pax_global_header00006660000000000000000000000064145460624120014516gustar00rootroot0000000000000052 comment=0048900f372d4dfd5c236f78b8a8453bcdbb458e age-PG16-v1.5.0-rc0/000077500000000000000000000000001454606241200136005ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/.asf.yaml000066400000000000000000000025731454606241200153220ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. notifications: commits: commits@age.apache.org pullrequests: commits@age.apache.org github: description: "Graph database optimized for fast analysis and real-time data processing. It is provided as an extension to PostgreSQL." homepage: https://age.apache.org labels: - postgresql - graph-database - analytics - postgresql-extension - graphdb - multi-model-dbms - agensgraph - age-database features: wiki: true issues: true projects: true discussions: true enabled_merge_buttons: squash: true merge: false rebase: true age-PG16-v1.5.0-rc0/.dockerignore000066400000000000000000000001041454606241200162470ustar00rootroot00000000000000*.o *.so .gitignore build.sh .idea .deps .DS_Store *.tokens *.interpage-PG16-v1.5.0-rc0/.github/000077500000000000000000000000001454606241200151405ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/.github/ISSUE_TEMPLATE/000077500000000000000000000000001454606241200173235ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000021411454606241200220130ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve title: '' labels: bug assignees: '' --- **Describe the bug** A clear and concise description of what the bug is. **How are you accessing AGE (Command line, driver, etc.)?** - [e.g. JDBC] **What data setup do we need to do?** ```pgsql ... SELECT * from cypher('my_graph_name', $$ CREATE (a:Part {part_num: '123'}), (b:Part {part_num: '345'}), (c:Part {part_num: '456'}), (d:Part {part_num: '789'}) $$) as (a agtype); ... ``` **What is the necessary configuration info needed?** - [e.g. Installed PostGIS] **What is the command that caused the error?** ```pgsql SELECT * from cypher('my_graph_name', $$ MATCH (a:Part {part_num: '123'}), (b:Part {part_num: '345'}) CREATE (a)-[u:used_by { quantity: 1 }]->(b) $$) as (a agtype); ``` ``` ERROR: something failed to execute ``` **Expected behavior** A clear and concise description of what you expected to happen. **Environment (please complete the following information):** - Version: [e.g. 0.4.0] **Additional context** Add any other context about the problem here. age-PG16-v1.5.0-rc0/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000011341454606241200230470ustar00rootroot00000000000000--- name: Feature request about: Suggest an idea for this project title: '' labels: enhancement assignees: '' --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. age-PG16-v1.5.0-rc0/.github/ISSUE_TEMPLATE/question.md000066400000000000000000000001341454606241200215120ustar00rootroot00000000000000--- name: Question about: Create a question title: '' labels: question assignees: '' --- age-PG16-v1.5.0-rc0/.github/labeler.yml000066400000000000000000000002601454606241200172670ustar00rootroot00000000000000PG11: - base-branch: 'PG11' PG12: - base-branch: 'PG12' PG13: - base-branch: 'PG13' PG14: - base-branch: 'PG14' PG15: - base-branch: 'PG15' master: - base-branch: 'master'age-PG16-v1.5.0-rc0/.github/workflows/000077500000000000000000000000001454606241200171755ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/.github/workflows/go-driver.yml000066400000000000000000000014241454606241200216170ustar00rootroot00000000000000name: Go Driver Tests on: push: branches: [ "PG16" ] pull_request: branches: [ "PG16" ] jobs: build: runs-on: ubuntu-latest strategy: matrix: go-version: [ '1.18', '1.19' ] defaults: run: working-directory: drivers/golang/age/ steps: - uses: actions/checkout@v3 - name: Set tag based on branch run: | echo "TAG=PG16_latest" >> $GITHUB_ENV - name: Run apache/age docker image run: | export TAG=$TAG docker-compose up -d - name: Set up Go uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} - name: Generate run: go generate ./../... - name: Build run: go build -v ./... - name: Test run: go test . -v age-PG16-v1.5.0-rc0/.github/workflows/installcheck.yaml000066400000000000000000000030021454606241200225200ustar00rootroot00000000000000name: Build / Regression on: push: branches: [ 'PG16' ] pull_request: branches: [ 'PG16' ] jobs: build: runs-on: ubuntu-latest steps: - name: Get latest commit id of PostgreSQL 16 run: | echo "PG_COMMIT_HASH=$(git ls-remote git://git.postgresql.org/git/postgresql.git refs/heads/REL_16_STABLE | awk '{print $1}')" >> $GITHUB_ENV - name: Cache PostgreSQL 16 uses: actions/cache@v3 id: pg16cache with: path: ~/pg16 key: ${{ runner.os }}-v1-pg16-${{ env.PG_COMMIT_HASH }} - name: Install PostgreSQL 16 if: steps.pg16cache.outputs.cache-hit != 'true' run: | git clone --depth 1 --branch REL_16_STABLE git://git.postgresql.org/git/postgresql.git ~/pg16source cd ~/pg16source ./configure --prefix=$HOME/pg16 CFLAGS="-std=gnu99 -ggdb -O0" --enable-cassert make install -j$(nproc) > /dev/null - uses: actions/checkout@v3 - name: Build id: build run: | make PG_CONFIG=$HOME/pg16/bin/pg_config install -j$(nproc) - name: Regression tests id: regression_tests run: | make PG_CONFIG=$HOME/pg16/bin/pg_config installcheck continue-on-error: true - name: Dump regression test errors if: steps.regression_tests.outcome != 'success' run: | echo "Dump section begin." cat $HOME/work/age/age/regress/regression.diffs echo "Dump section end." exit 1 age-PG16-v1.5.0-rc0/.github/workflows/jdbc-driver.yaml000066400000000000000000000010651454606241200222560ustar00rootroot00000000000000name: JDBC Driver Tests on: push: branches: [ "PG16" ] pull_request: branches: [ "PG16" ] jobs: build: runs-on: ubuntu-latest defaults: run: working-directory: drivers/jdbc steps: - uses: actions/checkout@v3 - name: Set up Java uses: actions/setup-java@v3 with: distribution: 'zulu' java-version: '17' - name: Set tag based on branch run: | echo "TAG=PG16_latest" >> $GITHUB_ENV - name: Build and Test run: | export TAG=$TAG gradle build age-PG16-v1.5.0-rc0/.github/workflows/labeler.yml000066400000000000000000000003311454606241200213230ustar00rootroot00000000000000name: "Pull Request Labeler" on: - pull_request_target jobs: triage: permissions: contents: read pull-requests: write runs-on: ubuntu-latest steps: - uses: actions/labeler@v5.0.0-alpha.1age-PG16-v1.5.0-rc0/.github/workflows/nodejs-driver.yaml000066400000000000000000000013001454606241200226260ustar00rootroot00000000000000name: Nodejs Driver Tests on: push: branches: [ "PG16" ] pull_request: branches: [ "PG16" ] jobs: build: runs-on: ubuntu-latest defaults: run: working-directory: drivers/nodejs/ steps: - uses: actions/checkout@v3 - name: Set tag based on branch run: | echo "TAG=PG16_latest" >> $GITHUB_ENV - name: Run apache/age docker image run: | export TAG=$TAG docker-compose up -d - name: Set up Node uses: actions/setup-node@v3 with: node-version: latest - name: Install dependencies run: npm install - name: Build run: npm run build - name: Test run: npm test age-PG16-v1.5.0-rc0/.github/workflows/python-driver.yaml000066400000000000000000000016341454606241200226770ustar00rootroot00000000000000name: Python Driver Tests on: push: branches: [ "PG16" ] pull_request: branches: [ "PG16" ] jobs: build: runs-on: ubuntu-latest defaults: run: working-directory: drivers/python steps: - uses: actions/checkout@v3 - name: Set tag based on branch run: | echo "TAG=PG16_latest" >> $GITHUB_ENV - name: Run apache/age docker image run: | export TAG=$TAG docker-compose up -d - name: Set up python uses: actions/setup-python@v4 with: python-version: '3.10' - name: Install pre-requisites run: | sudo apt-get install python3-dev libpq-dev pip install -r requirements.txt - name: Build run: | python setup.py install - name: Test run: | python test_age_py.py -db "postgres" -u "postgres" -pass "agens" python -m unittest -v test_agtypes.py age-PG16-v1.5.0-rc0/.gitignore000066400000000000000000000001211454606241200155620ustar00rootroot00000000000000*.o *.so build.sh age--*.*.*.sql .idea .deps .DS_Store *.tokens *.interp *.dylib age-PG16-v1.5.0-rc0/CONTRIBUTING.md000066400000000000000000000067101454606241200160350ustar00rootroot00000000000000# Contributing to Apache AGE Welcome, future Contributor! First off, thank you for considering contributing to Apache AGE. Team AGE welcomes anyone who is willing to help us mature AGE to become a fully-featured graph database extension for PostgreSQL. There are multiple ways you can contribute to the Apache AGE and [Apache AGE Viewer](https://github.com/apache/age-viewer) projects. We hope that adding features, fixing bugs, and changing documentations can be fun and educational for anyone and everyone. ## Code of Conduct The community members of Apache AGE are expected to follow the 'Apache Way'. Please read the [Code of Conduct](https://www.apache.org/foundation/policies/conduct) provided by Apache Software Foundation. ## How to Start A great way to get involved in the project is to ask questions on the mailing lists, Apache AGE Discord, or the Apache Reddit forum (r/apacheage). Reviewing the list of projects in the Apache AGE and AGE Viewer GitHubs may help you understand the overall roadmap. Once you understand the ins and outs of Apache AGE, share your knowledge by helping the newcomers as well. Spending a few minutes to answer questions are a valuable open source community service, which also demonstrates your expertise. We strongly recommend you to subscribe the mailing lists, join the Apache AGE Discord and Apache AGE Reddit community (r/apacheage) to keep up to date on what's happening in AGE. Visit [joinus](https://age.apache.org/joinus) for pathways you can follow to help you get started. ## Pull Requests Changes to AGE source code are proposed, reviewed, and committed via Github pull requests (described in Code Convention). Pull requests are a great way to get your ideas into this repository. Anyone can view and comment on active changes here. Reviewing others' changes are a good way to learn how the change process works and gain exposure to activity in various parts of the code. You can help by reviewing the changes, asking questions, or pointing out issues as simple as typos. ## Documentation Changes You can propose changes to Apache AGE documentation, edit the Markdown source files for the Apache AGE website pages. ## Bug Reports Ideally, bug reports are accompanied by a proposed code change to fix the bug. This isn't always possible, as those who discover a bug may not have the experience to fix it. A bug may be reported by creating a GitHub issue, but without creating a pull request. Bug reports are only useful, however, if they include enough information to understand, isolate and ideally reproduce the bug. Simply encountering an error does not mean a bug should be reported; search GitHub and inquire on the Apache AGE's dev mailing list first. Unreproducible bugs or simple error reports without context shall be closed. The more context about a bug, the better, such as: how the bug was introduced, by which commit, etc. It assists the committers in the decision process on how far the bug fix should be backported, when the pull request is merged. The pull request to fix the bug should narrow down the problem to the root cause. Data correctness/data loss bugs are very serious. Make sure the corresponding bug report GitHub issue is labeled as correctness or data-loss. Please send an email to dev@age.apache.org after submitting the bug report, to quickly draw attention to the issue. Performance issues are classified as bugs. The pull request to fix a performance bug must provide a benchmark to prove the problem is indeed fixed. age-PG16-v1.5.0-rc0/LICENSE000066400000000000000000000304321454606241200146070ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. For PostgreSQL Database Management System: (formerly known as Postgres, then as Postgres95) Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group Portions Copyright (c) 1994, The Regents of the University of California Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies. IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. age-PG16-v1.5.0-rc0/META.json000066400000000000000000000043621454606241200152260ustar00rootroot00000000000000{ "name": "ApacheAGE", "abstract": "Apache AGE is a PostgreSQL Extension that provides graph database functionality", "description": "Apache AGE is a PostgreSQL Extension that provides graph database functionality. AGE is an acronym for A Graph Extension, and is inspired by Bitnine's fork of PostgreSQL 10, AgensGraph, which is a multi-model database. The goal of the project is to create single storage that can handle both relational and graph model data so that users can use standard ANSI SQL along with openCypher, the Graph query language. A graph consists of a set of vertices (also called nodes) and edges, where each individual vertex and edge possesses a map of properties. A vertex is the basic object of a graph, that can exist independently of everything else in the graph. An edge creates a directed connection between two vertices. A graph database is simply composed of vertices and edges. This type of database is useful when the meaning is in the relationships between the data. Relational databases can easily handle direct relationships, but indirect relationships are more difficult to deal with in relational databases. A graph database stores relationship information as a first-class entity. Apache AGE gives you the best of both worlds, simultaneously.", "version": "1.3.0", "maintainer": [ "users@age.apache.org" ], "license": "apache_2_0", "provides": { "ApacheAGE": { "abstract": "Apache AGE is a PostgreSQL Extension that provides graph database functionality", "file": "age--1.3.0.sql", "docfile": "README.md", "version": "1.3.0" } }, "prereqs": { "runtime": { "requires": { "PostgreSQL": "14.0.0" } } }, "resources": { "homepage": "https://github.com/apache/age/tree/master", "bugtracker": { "web": "https://github.com/apache/age/issues" }, "repository": { "url": "https://github.com/apache/age.git", "web": "https://github.com/apache/age", "type": "git" } }, "generated_by": "users@age.apache.org", "meta-spec": { "version": "1.0.0", "url": "http://pgxn.org/meta/spec.txt" }, "tags": [ "graphdb", "graph-database" ] } age-PG16-v1.5.0-rc0/Makefile000066400000000000000000000127231454606241200152450ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. MODULE_big = age age_sql = age--1.5.0.sql OBJS = src/backend/age.o \ src/backend/catalog/ag_catalog.o \ src/backend/catalog/ag_graph.o \ src/backend/catalog/ag_label.o \ src/backend/catalog/ag_namespace.o \ src/backend/commands/graph_commands.o \ src/backend/commands/label_commands.o \ src/backend/executor/cypher_create.o \ src/backend/executor/cypher_merge.o \ src/backend/executor/cypher_set.o \ src/backend/executor/cypher_utils.o \ src/backend/nodes/ag_nodes.o \ src/backend/nodes/cypher_copyfuncs.o \ src/backend/nodes/cypher_outfuncs.o \ src/backend/nodes/cypher_readfuncs.o \ src/backend/optimizer/cypher_createplan.o \ src/backend/optimizer/cypher_pathnode.o \ src/backend/optimizer/cypher_paths.o \ src/backend/parser/ag_scanner.o \ src/backend/parser/cypher_analyze.o \ src/backend/parser/cypher_clause.o \ src/backend/executor/cypher_delete.o \ src/backend/parser/cypher_expr.o \ src/backend/parser/cypher_gram.o \ src/backend/parser/cypher_item.o \ src/backend/parser/cypher_keywords.o \ src/backend/parser/cypher_parse_agg.o \ src/backend/parser/cypher_parse_node.o \ src/backend/parser/cypher_parser.o \ src/backend/parser/cypher_transform_entity.o \ src/backend/utils/adt/age_graphid_ds.o \ src/backend/utils/adt/agtype.o \ src/backend/utils/adt/agtype_ext.o \ src/backend/utils/adt/agtype_gin.o \ src/backend/utils/adt/agtype_ops.o \ src/backend/utils/adt/agtype_parser.o \ src/backend/utils/adt/agtype_util.o \ src/backend/utils/adt/agtype_raw.o \ src/backend/utils/adt/age_global_graph.o \ src/backend/utils/adt/age_session_info.o \ src/backend/utils/adt/age_vle.o \ src/backend/utils/adt/cypher_funcs.o \ src/backend/utils/adt/ag_float8_supp.o \ src/backend/utils/adt/graphid.o \ src/backend/utils/ag_func.o \ src/backend/utils/graph_generation.o \ src/backend/utils/cache/ag_cache.o \ src/backend/utils/load/ag_load_labels.o \ src/backend/utils/load/ag_load_edges.o \ src/backend/utils/load/age_load.o \ src/backend/utils/load/libcsv.o \ src/backend/utils/name_validation.o \ src/backend/utils/ag_guc.o EXTENSION = age # to allow cleaning of previous (old) age--.sql files all_age_sql = $(shell find . -maxdepth 1 -type f -regex './age--[0-9]+\.[0-9]+\.[0-9]+\.sql') SQLS := $(shell cat sql/sql_files) SQLS := $(addprefix sql/,$(SQLS)) SQLS := $(addsuffix .sql,$(SQLS)) DATA_built = $(age_sql) # sorted in dependency order REGRESS = scan \ graphid \ agtype \ catalog \ cypher \ expr \ cypher_create \ cypher_match \ cypher_unwind \ cypher_set \ cypher_remove \ cypher_delete \ cypher_with \ cypher_vle \ cypher_union \ cypher_call \ cypher_merge \ age_global_graph \ age_load \ index \ analyze \ graph_generation \ name_validation \ jsonb_operators \ drop srcdir=`pwd` ag_regress_dir = $(srcdir)/regress REGRESS_OPTS = --load-extension=age --inputdir=$(ag_regress_dir) --outputdir=$(ag_regress_dir) --temp-instance=$(ag_regress_dir)/instance --port=61958 --encoding=UTF-8 --temp-config $(ag_regress_dir)/age_regression.conf ag_regress_out = instance/ log/ results/ regression.* EXTRA_CLEAN = $(addprefix $(ag_regress_dir)/, $(ag_regress_out)) src/backend/parser/cypher_gram.c src/include/parser/cypher_gram_def.h src/include/parser/cypher_kwlist_d.h $(all_age_sql) GEN_KEYWORDLIST = $(PERL) -I ./tools/ ./tools/gen_keywordlist.pl GEN_KEYWORDLIST_DEPS = ./tools/gen_keywordlist.pl tools/PerfectHash.pm ag_include_dir = $(srcdir)/src/include PG_CPPFLAGS = -I$(ag_include_dir) -I$(ag_include_dir)/parser PG_CONFIG ?= pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) src/backend/parser/cypher_keywords.o: src/include/parser/cypher_kwlist_d.h src/include/parser/cypher_kwlist_d.h: src/include/parser/cypher_kwlist.h $(GEN_KEYWORDLIST_DEPS) $(GEN_KEYWORDLIST) --extern --varname CypherKeyword --output src/include/parser $< src/include/parser/cypher_gram_def.h: src/backend/parser/cypher_gram.c src/backend/parser/cypher_gram.c: BISONFLAGS += --defines=src/include/parser/cypher_gram_def.h src/backend/parser/cypher_parser.o: src/backend/parser/cypher_gram.c src/backend/parser/cypher_keywords.o: src/backend/parser/cypher_gram.c $(age_sql): @cat $(SQLS) > $@ src/backend/parser/ag_scanner.c: FLEX_NO_BACKUP=yes installcheck: export LC_COLLATE=C age-PG16-v1.5.0-rc0/NOTICE000066400000000000000000000005011454606241200145000ustar00rootroot00000000000000Apache AGE Copyright 2023 The Apache Software Foundation. This product includes software developed at The Apache Software Foundation (http://www.apache.org/). Portions of Apache AGE were originally developed by Bitnine Co., Ltd. and were donated to the Apache Software Foundation. Copyright 2019-2020 Bitnine Co., Ltd. age-PG16-v1.5.0-rc0/README.md000066400000000000000000000306051454606241200150630ustar00rootroot00000000000000


is a leading multi-model graph database

Graph Processing & Analytics for Relational Databases



           


  What is Apache AGE?

[Apache AGE](https://age.apache.org/#) is an extension for PostgreSQL that enables users to leverage a graph database on top of the existing relational databases. AGE is an acronym for A Graph Extension and is inspired by Bitnine's AgensGraph, a multi-model database fork of PostgreSQL. The basic principle of the project is to create a single storage that handles both the relational and graph data model so that the users can use the standard ANSI SQL along with openCypher, one of the most popular graph query languages today.



Since AGE is based on the powerful PostgreSQL RDBMS, it is robust and fully featured. AGE is optimized for handling complex connected graph data. It provides plenty of robust database features essential to the database environment, including ACID transactions, multi-version concurrency control (MVCC), stored procedure, triggers, constraints, sophisticated monitoring, and a flexible data model (JSON). Users with a relational database background who require graph data analytics can use this extension with minimal effort because they can use existing data without going through migration. There is a strong need for cohesive, easy-to-implement multi-model databases. As an extension of PostgreSQL, AGE supports all the functionalities and features of PostgreSQL while also offering a graph model to boot.

  Overview

Apache AGE is : - **Powerful**: adds graph database support to the already popular PostgreSQL database: PostgreSQL is used by organizations including Apple, Spotify, and NASA. - **Flexible**: allows you to perform openCypher queries, which makes complex queries much easier to write. It also enables querying multiple graphs at the same time. - **Intelligent**: allows you to perform graph queries that are the basis for many next-level web services such as fraud detection, master data management, product recommendations, identity and relationship management, experience personalization, knowledge management, and more.

  Features




- **Cypher Query**: supports graph query language - **Hybrid Querying**: enables SQL and/or Cypher - **Querying**: enables multiple graphs - **Hierarchical**: graph label organization - **Property Indexes**: on both vertices(nodes) and edges - **Full PostgreSQL**: supports PG features

  Documentation

Refer to our latest [Apache AGE documentation](https://age.apache.org/age-manual/master/index.html) to learn about installation, features, built-in functions, and Cypher queries.

  Pre-Installation

Install the following essential libraries according to each OS. Building AGE from the source depends on the following Linux libraries (Ubuntu package names shown below): - **CentOS** ```bash yum install gcc glibc glib-common readline readline-devel zlib zlib-devel flex bison ``` - **Fedora** ```bash dnf install gcc glibc bison flex readline readline-devel zlib zlib-devel ``` - **Ubuntu** ```bash sudo apt-get install build-essential libreadline-dev zlib1g-dev flex bison ```

  Installation

Apache AGE is intended to be simple to install and run. It can be installed with Docker and other traditional ways.

 Install PostgreSQL

You will need to install an AGE compatible version of Postgres, for now AGE supports Postgres 11, 12, 13, 14, 15 & 16. Supporting the latest versions is on AGE roadmap.

 Installation via Package Manager

You can use a
package management that your OS provides to download AGE.
```bash sudo apt install postgresql ```

 Installation From Source Code

You can download the Postgres source code and install your own instance of Postgres. You can read instructions on how to install from source code for different versions on the official Postgres Website.

 Install AGE on Linux and MacOS

Clone the github repository or download the download an official release. Run the pg_config utility and check the version of PostgreSQL. Currently, only PostgreSQL versions 11, 12, 13, 14, 15 & 16 are supported. If you have any other version of Postgres, you will need to install PostgreSQL version 11, 12, 13, 14, 15 or 16.
```bash pg_config ``` Run the following command in the source code directory of Apache AGE to build and install the extension. ```bash make install ``` If the path to your Postgres installation is not in the PATH variable, add the path in the arguments: ```bash make PG_CONFIG=/path/to/postgres/bin/pg_config install ```

 Run using Docker

Get the docker image
```bash docker pull apache/age ```
Create AGE docker container
```bash docker run \ --name age \ -p 5455:5432 \ -e POSTGRES_USER=postgresUser \ -e POSTGRES_PASSWORD=postgresPW \ -e POSTGRES_DB=postgresDB \ -d \ apache/age ```
Enter PostgreSQL's psql:
```bash docker exec -it age psql -d postgresDB -U postgresUser ```

  Post Installation

For every connection of AGE you start, you will need to load the AGE extension. ```bash CREATE EXTENSION age; ``` ```bash LOAD 'age'; ``` ```bash SET search_path = ag_catalog, "$user", public; ```

  Quick Start

To create a graph, use the create_graph function located in the ag_catalog namespace. ```bash SELECT create_graph('graph_name'); ``` To create a single vertex, use the CREATE clause. ```bash SELECT * FROM cypher('graph_name', $$ CREATE (n) $$) as (v agtype); ``` To create a single vertex with the label, use the CREATE clause. ```bash SELECT * FROM cypher('graph_name', $$ CREATE (:label) $$) as (v agtype); ``` To create a single vertex with label and properties, use the CREATE clause. ```bash SELECT * FROM cypher('graph_name', $$ CREATE (:label {property:value}) $$) as (v agtype); ``` To query the graph, you can use the MATCH clause. ```bash SELECT * FROM cypher('graph_name', $$ MATCH (v) RETURN v $$) as (v agtype); ``` You can use the following to create an edge, for example, between two nodes. ```bash SELECT * FROM cypher('graph_name', $$ MATCH (a:label), (b:label) WHERE a.property = 'Node A' AND b.property = 'Node B' CREATE (a)-[e:RELTYPE]->(b) RETURN e $$) as (e agtype); ``` To create an edge and set properties. ```bash SELECT * FROM cypher('graph_name', $$ MATCH (a:label), (b:label) WHERE a.property = 'Node A' AND b.property = 'Node B' CREATE (a)-[e:RELTYPE {property:a.property + '<->' + b.property}]->(b) RETURN e $$) as (e agtype); ``` Example ```bash SELECT * FROM cypher('graph_name', $$ MATCH (a:Person), (b:Person) WHERE a.name = 'Node A' AND b.name = 'Node B' CREATE (a)-[e:RELTYPE {name:a.name + '<->' + b.name}]->(b) RETURN e $$) as (e agtype); ```

  Language Specific Drivers

Starting with Apache AGE is very simple. You can easily select your platform and incorporate the relevant SDK into your code.

Built-in

- [Go driver](./drivers/golang) - [Java driver](./drivers/jdbc) - [NodeJs driver](./drivers/nodejs) - [Python driver](./drivers/python)

Community-driven Driver

- [Apache AGE Rust Driver](https://github.com/Dzordzu/rust-apache-age.git)

  Community

Join the AGE community for help, questions, discussions, and contributions. - Check our [website](https://age.apache.org/) - Join the Live Chat on [Discord](https://discord.gg/EuK6EEg3k7) - Follow us on [Twitter](https://twitter.com/apache_age?s=20&t=7Hu8Txk4vjvuEp-ryakacg) - Subscribe to our developer mailing list by sending an email to dev-subscribe@age.apache.org - Subscribe to our user mailing list by sending an email to users-subscribe@age.apache.org - Subscribe to our committer mailing list (To become a committer) by sending an email to commits-subscribe@age.apache.org

  Graph Visualization Tool for AGE

Apache AGE Viewer is a user interface for Apache AGE that provides visualization and exploration of data. This web visualization tool allows users to enter complex graph queries and explore the results in graph and table forms. Apache AGE Viewer is enhanced to proceed with extensive graph data and discover insights through various graph algorithms. Apache AGE Viewer will become a graph data administration and development platform for Apache AGE to support multiple relational databases: . **This is a visualization tool.** After installing AGE Extension, you may use this tool to get access to the visualization features. ![Viewer gdb, and graph](/img/agce.gif)

  Video Links

You can also get help from these videos. - Install on [Windows](https://www.youtube.com/watch?v=ddk8VX8Hm-I&list=PLGp3huJbWNDjgwP7s99Q-9_w1vxpjNHXG) - Install on [MacOS](https://www.youtube.com/watch?v=0-qMwpDh0CA)

  Contributing

You can improve ongoing efforts or initiate new ones by sending pull requests to [this repository](https://github.com/apache/age). Also, you can learn from the code review process, how to merge pull requests, and from code style compliance to documentation by visiting the [Apache AGE official site - Developer Guidelines](https://age.apache.org/contribution/guide). Send all your comments and inquiries to the user mailing list, users@age.apache.org. age-PG16-v1.5.0-rc0/RELEASE000066400000000000000000000074621454606241200146140ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. Release Notes for Apache AGE release 1.5.0 for PostgreSQL version 16 Apache AGE 1.5.0 - Release Notes NOTE: This is an initial release of Apache AGE for PostgreSQL version 16. There are no upgrade scripts to this release. Add additional index support and performance enhancements (#1232) Add an additional way to find a previous variable ref (#1450) Add auto apply labeler workflow for PRs (#1161) Add checks for array functions to recognize and decode VPC (#1064) Add concat || operator to agtype (#1198) Add exist(?, ?|, ?&) operators for agtype (#1218) Add missing dependency in cypher_expr.c (#1256) Add path extraction(#>, #>>)operators to agtype (#1224) Add support for chained expressions in CASE (#1431) Clean up agtype_to_int8, agtype_to_int4, & agtype_to_int2 (#1354) Clean up #included files in parser directory (#1465) Converted SQL main file into multiple files. (#1401) docs: Add to Docker setup (#1204) Extend access(->, ->>), addition and subtraction operators (#1258) Extend agtype containment operators (@>, <@) (#1285) Extend EXPLAIN and add config param to switch transformation of property filter (#1262) Fix ambiguous conditions (#1373) Fix Docker file to reflect PostgreSQL version 15 (#1449) Fix DockerHub warning messages for latest (#1380) Fix issue #1045 - error using path var in WHERE (#1295) Fix Issue #1159 - Server terminates for SET plus-equal (#1160) Fix issue #1219 - MERGE not seeing previous clause var (#1441) Fix issue #1302 - crash on NULL input to UNWIND (#1304) Fix issue #1303: Server crashes on executing SELECT * FROM agtype(null); (#1317) Fix Issue #1305 - drop_label NULL cases (#1306) Fix Issue #1329 - agtype_to_int4 crash (#1339) Fix issue #1347 - unknow type of agtype container 0 (#1349) Fix issue #1389 - Server crash on using null operand for access operators (#1390) Fix issue #1393 - previous clause variables not seen with EXISTS (#1426) Fix issue #1398 - SET followed by DELETE does not delete (#1412) Fix issue #1399 EXISTS doesn't handle non-existent labels (#1400) Fix Issue #945 - incorrect count(*) return values (#1288) Fix typo in agtype_raw.h header guard (#1368) Implement chained expression order of operations (#1402) Implemented age_tail function (#1283) Implemented the toBooleanList() function (#1014) Implement EXISTS subquery for CASE (#1345) Master to PostgreSQL version 16 (#1451) Minor fix in `agtype_volatile_wrapper` function (#1172) Modify COUNT() to output agtype (#1311) Optimize performance of detach delete (#1271) Optimize vertex and edge builder functions (#1252) py_driver : optimised Antlr4ResultHandler to improve time (#1107) Refactor Regression Tests for CASE statement (#1268) Refactor the IN operator to use '= ANY()' syntax (#1236) Removed unnecessary assignment (#1185) Remove redundant job from CIs (#1473) Remove unnecessary #include in src/backend/utils Updated age.control. Updated files, format, and version information. Updated Makefile. Updated RELEASE. Update Discord channel in README.md (#1253) Update README.md file for PostgreSQL version 16 support (#1463) Update the Python Driver (#1246) age-PG16-v1.5.0-rc0/age.control000066400000000000000000000016041454606241200157370ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. default_version = '1.5.0' comment = 'AGE database extension' module_pathname = '$libdir/age' schema = 'ag_catalog' age-PG16-v1.5.0-rc0/clang-format.5000066400000000000000000000051051454606241200162410ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. AlignAfterOpenBracket: Align AlignConsecutiveAssignments: false AlignConsecutiveDeclarations: false AlignEscapedNewlines: DontAlign AlignOperands: true AlignTrailingComments: false AllowAllParametersOfDeclarationOnNextLine: false AllowShortBlocksOnASingleLine: false AllowShortCaseLabelsOnASingleLine: false AllowShortFunctionsOnASingleLine: None AllowShortIfStatementsOnASingleLine: false AllowShortLoopsOnASingleLine: false AlwaysBreakAfterReturnType: None AlwaysBreakBeforeMultilineStrings: false BinPackArguments: true BinPackParameters: true BraceWrapping: AfterControlStatement: true AfterEnum: true AfterFunction: true AfterStruct: true AfterUnion: true BeforeElse: true IndentBraces: false SplitEmptyFunction: true SplitEmptyRecord: true BreakBeforeBinaryOperators: None BreakBeforeBraces: Custom BreakBeforeTernaryOperators: false BreakStringLiterals: false ColumnLimit: 79 CommentPragmas: '' ContinuationIndentWidth: 4 Cpp11BracedListStyle: true DerivePointerAlignment: false DisableFormat: false ForEachMacros: - 'foreach' IncludeCategories: IncludeIsMainRegex: '$' IndentCaseLabels: false IndentWidth: 4 IndentWrappedFunctionNames: false KeepEmptyLinesAtTheStartOfBlocks: false Language: Cpp MacroBlockBegin: '' MacroBlockEnd: '' MaxEmptyLinesToKeep: 1 PenaltyBreakAssignment: 30 PenaltyBreakBeforeFirstCallParameter: 30 PenaltyBreakComment: 10 PenaltyBreakString: 10 PenaltyExcessCharacter: 100 PenaltyReturnTypeOnItsOwnLine: 60 PointerAlignment: Right ReflowComments: false SortIncludes: true SpaceAfterCStyleCast: false SpaceBeforeAssignmentOperators: true SpaceBeforeParens: ControlStatements SpaceInEmptyParentheses: false SpacesBeforeTrailingComments: 1 SpacesInCStyleCastParentheses: false SpacesInContainerLiterals: false SpacesInParentheses: false SpacesInSquareBrackets: false TabWidth: 4 UseTab: Never age-PG16-v1.5.0-rc0/docker/000077500000000000000000000000001454606241200150475ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/docker/Dockerfile000066400000000000000000000026101454606241200170400ustar00rootroot00000000000000# # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # FROM postgres:16 RUN apt-get update \ && apt-get install -y --no-install-recommends --no-install-suggests \ bison \ build-essential \ flex \ postgresql-server-dev-16 \ locales ENV LANG=en_US.UTF-8 ENV LC_COLLATE=en_US.UTF-8 ENV LC_CTYPE=en_US.UTF-8 RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen \ && locale-gen \ && update-locale LANG=en_US.UTF-8 COPY . /age WORKDIR /age RUN make && make install COPY docker/docker-entrypoint-initdb.d/00-create-extension-age.sql /docker-entrypoint-initdb.d/00-create-extension-age.sql CMD ["postgres", "-c", "shared_preload_libraries=age"] age-PG16-v1.5.0-rc0/docker/Dockerfile.dev000066400000000000000000000027401454606241200176210ustar00rootroot00000000000000# # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # FROM postgres:16 RUN apt-get update RUN apt-get install --assume-yes --no-install-recommends --no-install-suggests \ bison \ build-essential \ flex \ postgresql-server-dev-16 \ locales ENV LANG=en_US.UTF-8 ENV LC_COLLATE=en_US.UTF-8 ENV LC_CTYPE=en_US.UTF-8 RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen \ && locale-gen \ && update-locale LANG=en_US.UTF-8 COPY . /age # Set current working directory to /age/ and build. WORKDIR /age RUN make install RUN chown -R postgres /age USER postgres RUN make installcheck COPY docker/docker-entrypoint-initdb.d/00-create-extension-age.sql /docker-entrypoint-initdb.d/00-create-extension-age.sql CMD ["postgres", "-c", "shared_preload_libraries=age"] age-PG16-v1.5.0-rc0/docker/docker-entrypoint-initdb.d/000077500000000000000000000000001454606241200222205ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/docker/docker-entrypoint-initdb.d/00-create-extension-age.sql000066400000000000000000000014671454606241200271750ustar00rootroot00000000000000-- -- Licensed to the Apache Software Foundation (ASF) under one -- or more contributor license agreements. See the NOTICE file -- distributed with this work for additional information -- regarding copyright ownership. The ASF licenses this file -- to you under the Apache License, Version 2.0 (the -- "License"); you may not use this file except in compliance -- with the License. You may obtain a copy of the License at -- -- http://www.apache.org/licenses/LICENSE-2.0 -- -- Unless required by applicable law or agreed to in writing, software -- distributed under the License is distributed on an "AS IS" BASIS, -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- See the License for the specific language governing permissions and -- limitations under the License. -- CREATE EXTENSION age;age-PG16-v1.5.0-rc0/drivers/000077500000000000000000000000001454606241200152565ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/Agtype.g4000066400000000000000000000035511454606241200167470ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ grammar Agtype; agType : agValue EOF ; agValue : value typeAnnotation? ; value : STRING #StringValue | INTEGER #IntegerValue | floatLiteral #FloatValue | 'true' #TrueBoolean | 'false' #FalseBoolean | 'null' #NullValue | obj #ObjectValue | array #ArrayValue ; obj : '{' pair (',' pair)* '}' | '{' '}' ; pair : STRING ':' agValue ; array : '[' agValue (',' agValue)* ']' | '[' ']' ; typeAnnotation : '::' IDENT ; IDENT : [A-Z_a-z][$0-9A-Z_a-z]* ; STRING : '"' (ESC | SAFECODEPOINT)* '"' ; fragment ESC : '\\' (["\\/bfnrt] | UNICODE) ; fragment UNICODE : 'u' HEX HEX HEX HEX ; fragment HEX : [0-9a-fA-F] ; fragment SAFECODEPOINT : ~ ["\\\u0000-\u001F] ; INTEGER : '-'? INT ; fragment INT : '0' | [1-9] [0-9]* ; floatLiteral : RegularFloat | ExponentFloat | '-'? 'Infinity' | 'NaN' ; RegularFloat : '-'? INT DECIMAL ; ExponentFloat : '-'? INT DECIMAL? SCIENTIFIC ; fragment DECIMAL : '.' [0-9]+ ; fragment SCIENTIFIC : [Ee][+-]? [0-9]+ ; WS : [ \t\n\r] + -> skip ; age-PG16-v1.5.0-rc0/drivers/README000066400000000000000000000020361454606241200161370ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. This folder contains drivers for specific languages ### For more information about [Apache AGE](https://age.apache.org/) * Apache Age : https://age.apache.org/ * GitHub : https://github.com/apache/age * Document : https://age.apache.org/age-manual/master/index.html age-PG16-v1.5.0-rc0/drivers/docker-compose.yml000066400000000000000000000003061454606241200207120ustar00rootroot00000000000000version: "3.3" services: db: image: apache/age:${TAG} environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=agens - POSTGRES_DB=postgres ports: - 5432:5432 age-PG16-v1.5.0-rc0/drivers/golang/000077500000000000000000000000001454606241200165255ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/golang/LICENSE000066400000000000000000000261351454606241200175410ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. age-PG16-v1.5.0-rc0/drivers/golang/README.md000066400000000000000000000033111454606241200200020ustar00rootroot00000000000000# age AGType parser and driver support for Golang AGType parser and driver support for [Apache AGE](https://age.apache.org/), graph extension for PostgreSQL. ### Features * Unmarshal AGE result data(AGType) to Vertex, Edge, Path * Cypher query support for 3rd. Party sql driver (enables to use cypher queries directly) ### Prerequisites * over Go 1.18 / 1.19 * This module runs on golang standard api [database/sql](https://golang.org/pkg/database/sql/) and [antlr4-python3](https://github.com/antlr/antlr4/tree/master/runtime/Go/antlr) ### Installation (From source) Run (Windows): install.bat Run (Linux & OSX): ``` sh install.sh ``` ### Go get ``` go get github.com/apache/age/drivers/golang ``` ### gomod ``` require github.com/apache/age/drivers/golang {version} ``` Check [latest version](https://github.com/apache/age/releases) ### For more information about [Apache AGE](https://age.apache.org/) * Apache Age : https://age.apache.org/ * GitHub : https://github.com/apache/age * Document : https://age.apache.org/docs/ ### Check AGE loaded on your PostgreSQL Connect to your containerized Postgres instance and then run the following commands: ```(sql) # psql CREATE EXTENSION age; LOAD 'age'; SET search_path = ag_catalog, "$user", public; ``` ### Test Check out and rewrite DSN in age/drivers/golang/age/age_test.go ``` cd age/drivers/golang/age go test . -v ``` ### Samples * Usage 1: using database/sql API and Cypher execution function 'ExecCypher' Sample : [samples/sql_api_sample.go](samples/sql_api_sample.go) * Usage 2: using Age Wrapper Sample : [samples/age_wrapper_sample.go](samples/age_wrapper_sample.go) * Run Samples : [samples/main.go](samples/main.go) ### License Apache-2.0 License age-PG16-v1.5.0-rc0/drivers/golang/TYPES.md000066400000000000000000000017271454606241200177620ustar00rootroot00000000000000# Apache AGE - Go driver Type mapping * For more information about Apache AGE result types : https://age.apache.org/docs/Apache_AGE_Guide.pdf | Type | AGE Result | Go Type | |------|------------|---------| |Vertex|::vertex |Vertex
vertex.Id() int64
vertex.Label() string
vertex.Prop(string) interface{} | |Edge |::edge |Edge
edge.Id() int64
edge.Label() string
edge.StartId() int64
edge.EndId() int64
edge.Prop(string) interface{} | |Path |::path |Path
path.Size() int // quantity of vertices and edges in this path
path.Get(index int) Entity // *Vertex or *Edge
path.GetAsVertex(index int) *Vertex
path.GetAsEdge(index int) *Edge | |Integer |int |int64 | |Float |float
NaN, -Infinity, Infinity |float64
math.Nan(), math.Inf(-1),math.Inf(1) | |Numeric |::numeric |*big.Int
*big.Float | |String|string |string | |Boolean|bool |bool | |Null|empty result |nil | age-PG16-v1.5.0-rc0/drivers/golang/age/000077500000000000000000000000001454606241200172615ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/golang/age/age.go000066400000000000000000000165441454606241200203560ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package age import ( "bytes" "database/sql" "fmt" "reflect" ) // GetReady prepare AGE extension // load AGE extension // set graph path func GetReady(db *sql.DB, graphName string) (bool, error) { tx, err := db.Begin() if err != nil { return false, err } _, err = tx.Exec("LOAD 'age';") if err != nil { return false, err } _, err = tx.Exec("SET search_path = ag_catalog, '$user', public;") if err != nil { return false, err } var count int = 0 err = tx.QueryRow("SELECT count(*) FROM ag_graph WHERE name=$1", graphName).Scan(&count) if err != nil { return false, err } if count == 0 { _, err = tx.Exec("SELECT create_graph($1);", graphName) if err != nil { return false, err } } tx.Commit() return true, nil } type CursorProvider func(columnCount int, rows *sql.Rows) Cursor type Cursor interface { Next() bool Close() error } func execCypher(cursorProvider CursorProvider, tx *sql.Tx, graphName string, columnCount int, cypher string, args ...interface{}) (Cursor, error) { var buf bytes.Buffer cypherStmt := fmt.Sprintf(cypher, args...) buf.WriteString("SELECT * from cypher(NULL,NULL) as (v0 agtype") for i := 1; i < columnCount; i++ { buf.WriteString(fmt.Sprintf(", v%d agtype", i)) } buf.WriteString(");") stmt := buf.String() // Pass in the graph name and cypher statement via parameters to prepare // the cypher function call for session info. prepare_stmt := "SELECT * FROM age_prepare_cypher($1, $2);" _, perr := tx.Exec(prepare_stmt, graphName, cypherStmt) if perr != nil { fmt.Println(prepare_stmt + " " + graphName + " " + cypher) return nil, perr } if columnCount == 0 { _, err := tx.Exec(stmt) if err != nil { fmt.Println(stmt) return nil, err } return nil, nil } else { rows, err := tx.Query(stmt) if err != nil { fmt.Println(stmt) return nil, err } return cursorProvider(columnCount, rows), nil } } // ExecCypher : execute cypher query // CREATE , DROP .... // MATCH .... RETURN .... // CREATE , DROP .... RETURN ... func ExecCypher(tx *sql.Tx, graphName string, columnCount int, cypher string, args ...interface{}) (*CypherCursor, error) { cursor, err := execCypher(NewCypherCursor, tx, graphName, columnCount, cypher, args...) var cypherCursor *CypherCursor if cursor != nil { cypherCursor = cursor.(*CypherCursor) } return cypherCursor, err } // ExecCypherMap // CREATE , DROP .... // MATCH .... RETURN .... // CREATE , DROP .... RETURN ... func ExecCypherMap(tx *sql.Tx, graphName string, columnCount int, cypher string, args ...interface{}) (*CypherMapCursor, error) { cursor, err := execCypher(NewCypherMapCursor, tx, graphName, columnCount, cypher, args...) var cypherMapCursor *CypherMapCursor if cursor != nil { cypherMapCursor = cursor.(*CypherMapCursor) } return cypherMapCursor, err } type Age struct { db *sql.DB graphName string } type AgeTx struct { age *Age tx *sql.Tx } /** @param dsn host=127.0.0.1 port=5432 dbname=postgres user=postgres password=agens sslmode=disable */ func ConnectAge(graphName string, dsn string) (*Age, error) { db, err := sql.Open("postgres", dsn) if err != nil { return nil, err } age := &Age{db: db, graphName: graphName} _, err = age.GetReady() if err != nil { db.Close() age = nil } return age, err } func NewAge(graphName string, db *sql.DB) *Age { return &Age{db: db, graphName: graphName} } func (age *Age) GetReady() (bool, error) { tx, err := age.db.Begin() if err != nil { return false, err } _, err = tx.Exec("LOAD 'age';") if err != nil { return false, err } _, err = tx.Exec("SET search_path = ag_catalog, '$user', public;") if err != nil { return false, err } var count int = 0 err = tx.QueryRow("SELECT count(*) FROM ag_graph WHERE name=$1", age.graphName).Scan(&count) if err != nil { return false, err } if count == 0 { _, err = tx.Exec("SELECT create_graph($1);", age.graphName) if err != nil { return false, err } } tx.Commit() return true, nil } func (a *Age) Close() error { return a.db.Close() } func (a *Age) DB() *sql.DB { return a.db } func (a *Age) Begin() (*AgeTx, error) { ageTx := &AgeTx{age: a} tx, err := a.db.Begin() if err != nil { return nil, err } ageTx.tx = tx return ageTx, err } func (t *AgeTx) Commit() error { return t.tx.Commit() } func (t *AgeTx) Rollback() error { return t.tx.Rollback() } /** CREATE , DROP .... */ func (a *AgeTx) ExecCypher(columnCount int, cypher string, args ...interface{}) (*CypherCursor, error) { return ExecCypher(a.tx, a.age.graphName, columnCount, cypher, args...) } func (a *AgeTx) ExecCypherMap(columnCount int, cypher string, args ...interface{}) (*CypherMapCursor, error) { return ExecCypherMap(a.tx, a.age.graphName, columnCount, cypher, args...) } type CypherCursor struct { Cursor columnCount int rows *sql.Rows unmarshaler Unmarshaller } func NewCypherCursor(columnCount int, rows *sql.Rows) Cursor { return &CypherCursor{columnCount: columnCount, rows: rows, unmarshaler: NewAGUnmarshaler()} } func (c *CypherCursor) Next() bool { return c.rows.Next() } func (c *CypherCursor) GetRow() ([]Entity, error) { var gstrs = make([]interface{}, c.columnCount) for i := 0; i < c.columnCount; i++ { gstrs[i] = new(string) } err := c.rows.Scan(gstrs...) if err != nil { return nil, fmt.Errorf("CypherCursor.GetRow:: %s", err) } entArr := make([]Entity, c.columnCount) for i := 0; i < c.columnCount; i++ { gstr := gstrs[i].(*string) e, err := c.unmarshaler.unmarshal(*gstr) if err != nil { fmt.Println(i, ">>", gstr) return nil, err } entArr[i] = e } return entArr, nil } func (c *CypherCursor) Close() error { return c.rows.Close() } // type CypherMapCursor struct { CypherCursor mapper *AGMapper } func NewCypherMapCursor(columnCount int, rows *sql.Rows) Cursor { mapper := NewAGMapper(make(map[string]reflect.Type)) pcursor := CypherCursor{columnCount: columnCount, rows: rows, unmarshaler: mapper} return &CypherMapCursor{CypherCursor: pcursor, mapper: mapper} } func (c *CypherMapCursor) PutType(label string, tp reflect.Type) { c.mapper.PutType(label, tp) } func (c *CypherMapCursor) GetRow() ([]interface{}, error) { entities, err := c.CypherCursor.GetRow() if err != nil { return nil, fmt.Errorf("CypherMapCursor.GetRow:: %s", err) } elArr := make([]interface{}, c.columnCount) for i := 0; i < c.columnCount; i++ { ent := entities[i] if ent.GType() == G_MAP_PATH { elArr[i] = ent } else { elArr[i] = ent.(*SimpleEntity).Value() } } return elArr, nil } age-PG16-v1.5.0-rc0/drivers/golang/age/age_test.go000066400000000000000000000237461454606241200214170ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package age import ( "fmt" "reflect" "testing" "database/sql" _ "github.com/lib/pq" ) var dsn string = "host=127.0.0.1 port=5432 dbname=postgres user=postgres password=agens sslmode=disable" var graphName string = "testGraph" func TestAdditional(t *testing.T) { db, err := sql.Open("postgres", dsn) if err != nil { t.Fatal(err) } _, err = GetReady(db, graphName) if err != nil { t.Fatal(err) } cursor, err := db.Begin() if err != nil { t.Fatal(err) } _, err = ExecCypher(cursor, graphName, 0, "CREATE (n:Person {name: '%s', weight:%f})", "Joe", 67.3) if err != nil { t.Fatal(err) } _, err = ExecCypher(cursor, graphName, 0, "CREATE (n:Person {name: '%s', weight:77.3, roles:['Dev','marketing']})", "Jack") if err != nil { t.Fatal(err) } _, err = ExecCypher(cursor, graphName, 0, "CREATE (n:Person {name: '%s', weight:%d})", "Andy", 59) if err != nil { t.Fatal(err) } cursor.Commit() cursor, err = db.Begin() if err != nil { t.Fatal(err) } cypherCursor, err := ExecCypher(cursor, graphName, 1, "MATCH (n:Person) RETURN n") if err != nil { t.Fatal(err) } for cypherCursor.Next() { entities, err := cypherCursor.GetRow() if err != nil { t.Fatal(err) } vertex := entities[0].(*Vertex) fmt.Println(vertex.Id(), vertex.Label(), vertex.Props()) } _, err = ExecCypher(cursor, graphName, 0, "MATCH (a:Person), (b:Person) WHERE a.name='%s' AND b.name='%s' CREATE (a)-[r:workWith {weight: %d}]->(b)", "Jack", "Joe", 3) if err != nil { t.Fatal(err) } _, err = ExecCypher(cursor, graphName, 0, "MATCH (a:Person {name: '%s'}), (b:Person {name: '%s'}) CREATE (a)-[r:workWith {weight: %d}]->(b)", "Joe", "Andy", 7) if err != nil { t.Fatal(err) } cursor.Commit() cursor, err = db.Begin() if err != nil { t.Fatal(err) } cypherCursor, err = ExecCypher(cursor, graphName, 1, "MATCH p=()-[:workWith]-() RETURN p") if err != nil { t.Fatal(err) } for cypherCursor.Next() { entities, err := cypherCursor.GetRow() if err != nil { t.Fatal(err) } path := entities[0].(*Path) vertexStart := path.GetAsVertex(0) edge := path.GetAsEdge(1) vertexEnd := path.GetAsVertex(2) fmt.Println(vertexStart, edge, vertexEnd) } _, err = ExecCypher(cursor, graphName, 0, "MATCH (n:Person) DETACH DELETE n RETURN *") if err != nil { t.Fatal(err) } cursor.Commit() } func TestAgeWrapper(t *testing.T) { ag, err := ConnectAge(graphName, dsn) if err != nil { t.Fatal(err) } tx, err := ag.Begin() if err != nil { t.Fatal(err) } _, err = tx.ExecCypher(0, "CREATE (n:Person {name: '%s'})", "Joe") if err != nil { t.Fatal(err) } _, err = tx.ExecCypher(0, "CREATE (n:Person {name: '%s', age: %d})", "Smith", 10) if err != nil { t.Fatal(err) } _, err = tx.ExecCypher(0, "CREATE (n:Person {name: '%s', weight:%f})", "Jack", 70.3) if err != nil { t.Fatal(err) } tx.Commit() tx, err = ag.Begin() if err != nil { t.Fatal(err) } cursor, err := tx.ExecCypher(1, "MATCH (n:Person) RETURN n") if err != nil { t.Fatal(err) } count := 0 for cursor.Next() { entities, err := cursor.GetRow() if err != nil { t.Fatal(err) } count++ vertex := entities[0].(*Vertex) fmt.Println(count, "]", vertex.Id(), vertex.Label(), vertex.Props()) } fmt.Println("Vertex Count:", count) _, err = tx.ExecCypher(0, "MATCH (a:Person), (b:Person) WHERE a.name='%s' AND b.name='%s' CREATE (a)-[r:workWith {weight: %d}]->(b)", "Jack", "Joe", 3) if err != nil { t.Fatal(err) } _, err = tx.ExecCypher(0, "MATCH (a:Person {name: '%s'}), (b:Person {name: '%s'}) CREATE (a)-[r:workWith {weight: %d}]->(b)", "Joe", "Smith", 7) if err != nil { t.Fatal(err) } tx.Commit() tx, err = ag.Begin() if err != nil { t.Fatal(err) } cursor, err = tx.ExecCypher(1, "MATCH p=()-[:workWith]-() RETURN p") if err != nil { t.Fatal(err) } count = 0 for cursor.Next() { entities, err := cursor.GetRow() if err != nil { t.Fatal(err) } count++ path := entities[0].(*Path) fmt.Println(count, "]", path.GetAsVertex(0), path.GetAsEdge(1).props, path.GetAsVertex(2)) } _, err = tx.ExecCypher(0, "MATCH (n:Person) DETACH DELETE n RETURN *") if err != nil { t.Fatal(err) } tx.Commit() } func TestQueryWithMapper(t *testing.T) { db, err := sql.Open("postgres", dsn) if err != nil { t.Fatal(err) } // Confirm graph_path created _, err = GetReady(db, graphName) if err != nil { t.Fatal(err) } // Tx begin for execute create vertex tx, err := db.Begin() if err != nil { t.Fatal(err) } // Create Vertex ExecCypher(tx, graphName, 0, "CREATE (n:Person {name: '%s'})", "Joe") ExecCypher(tx, graphName, 0, "CREATE (n:Person {name: '%s', age: %d})", "Smith", 10) ExecCypher(tx, graphName, 0, "CREATE (n:Person {name: '%s', weight:%f})", "Jack", 70.3) tx.Commit() tx, err = db.Begin() if err != nil { t.Fatal(err) } // Match mapCursor, err := ExecCypherMap(tx, graphName, 1, "MATCH (n:Person) RETURN n") if err != nil { t.Fatal(err) } mapCursor.PutType("Person", reflect.TypeOf(VPerson{})) count := 0 for mapCursor.Next() { entities, err := mapCursor.GetRow() if err != nil { t.Fatal(err) } count++ person := entities[0].(VPerson) fmt.Println(count, "]", person.Name, person.Age, person.Weight) } // Create Path ExecCypher(tx, graphName, 0, "MATCH (a:Person), (b:Person) WHERE a.name='%s' AND b.name='%s' CREATE (a)-[r:workWith {weight: %d}]->(b)", "Jack", "Joe", 3) ExecCypher(tx, graphName, 0, "MATCH (a:Person {name: '%s'}), (b:Person {name: '%s'}) CREATE (a)-[r:workWith {weight: %d}]->(b)", "Joe", "Smith", 7) tx.Commit() tx, err = db.Begin() if err != nil { t.Fatal(err) } // Query Path mapCursor, err = ExecCypherMap(tx, graphName, 3, "MATCH (a)-[b:workWith]-(c) RETURN a,b,c") if err != nil { t.Fatal(err) } mapCursor.PutType("Person", reflect.TypeOf(VPerson{})) mapCursor.PutType("workWith", reflect.TypeOf(EWorkWith{})) count = 0 for mapCursor.Next() { entities, err := mapCursor.GetRow() if err != nil { t.Fatal(err) } count++ person1 := entities[0].(VPerson) workWith := entities[1].(EWorkWith) person2 := entities[2].(VPerson) fmt.Println(count, "]", person1, workWith, person2) } // Clear Data _, err = ExecCypher(tx, graphName, 0, "MATCH (n:Person) DETACH DELETE n RETURN *") if err != nil { t.Fatal(err) } tx.Commit() } func TestCudReturn(t *testing.T) { db, err := sql.Open("postgres", dsn) if err != nil { t.Fatal(err) } // Confirm graph_path created _, err = GetReady(db, graphName) if err != nil { t.Fatal(err) } // Tx begin for execute create vertex tx, err := db.Begin() if err != nil { t.Fatal(err) } // Create Vertex cursor, err := ExecCypher(tx, graphName, 1, "CREATE (n:Person {name: '%s'}) RETURN n", "Joe") if err != nil { t.Fatal(err) } for cursor.Next() { fmt.Println(cursor.GetRow()) } cursor, err = ExecCypher(tx, graphName, 1, "CREATE (n:Person {name: '%s', age: %d}) RETURN n", "Smith", 10) if err != nil { t.Fatal(err) } for cursor.Next() { fmt.Println(cursor.GetRow()) } cursor, err = ExecCypher(tx, graphName, 1, "CREATE (n:Person {name: '%s', weight:%f}) RETURN n", "Jack", 70.3) if err != nil { t.Fatal(err) } for cursor.Next() { fmt.Println(cursor.GetRow()) } tx.Commit() tx, err = db.Begin() if err != nil { t.Fatal(err) } cursor, err = ExecCypher(tx, graphName, 1, "MATCH (n:Person) RETURN n") if err != nil { t.Fatal(err) } for cursor.Next() { fmt.Println(cursor.GetRow()) } } func TestQueryManyReturn(t *testing.T) { ag, err := ConnectAge(graphName, dsn) if err != nil { t.Fatal(err) } tx, err := ag.Begin() if err != nil { t.Fatal(err) } // Create Vertex tx.ExecCypher(0, "CREATE (n:Person {name: '%s'})", "Joe") tx.ExecCypher(0, "CREATE (n:Person {name: '%s', age: %d})", "Smith", 10) tx.ExecCypher(0, "CREATE (n:Person {name: '%s', weight:%f})", "Jack", 70.3) tx.Commit() tx, err = ag.Begin() if err != nil { t.Fatal(err) } // Create Path tx.ExecCypher(0, "MATCH (a:Person), (b:Person) WHERE a.name='%s' AND b.name='%s' CREATE (a)-[r:workWith {weight: %d}]->(b)", "Jack", "Joe", 3) tx.ExecCypher(0, "MATCH (a:Person {name: '%s'}), (b:Person {name: '%s'}) CREATE (a)-[r:workWith {weight: %d}]->(b)", "Joe", "Smith", 7) tx.Commit() tx, err = ag.Begin() if err != nil { t.Fatal(err) } // Query Path1 cursor, err := tx.ExecCypher(3, "MATCH (a:Person)-[l:workWith]-(b:Person) RETURN a, l, b") if err != nil { t.Fatal(err) } count := 0 for cursor.Next() { entities, err := cursor.GetRow() if err != nil { t.Fatal(err) } count++ v1 := entities[0].(*Vertex) edge := entities[1].(*Edge) v2 := entities[2].(*Vertex) fmt.Println("ROW ", count, ">>", "\n\t", v1, "\n\t", edge, "\n\t", v2) } // Query Path2 cursor, err = tx.ExecCypher(1, "MATCH p=(a:Person)-[l:workWith]-(b:Person) WHERE a.name = '%s' RETURN p", "Joe") if err != nil { t.Fatal(err) } count = 0 for cursor.Next() { entities, err := cursor.GetRow() if err != nil { t.Fatal(err) } count++ path := entities[0].(*Path) fmt.Println("ROW ", count, ">>", "\n\t", path.GetAsVertex(0), "\n\t", path.GetAsEdge(1), "\n\t", path.GetAsVertex(2)) } // Clear Data _, err = tx.ExecCypher(0, "MATCH (n:Person) DETACH DELETE n RETURN *") if err != nil { t.Fatal(err) } tx.Commit() } age-PG16-v1.5.0-rc0/drivers/golang/age/builder.go000066400000000000000000000173051454606241200212440ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package age import ( "fmt" "math" "math/big" "strconv" "strings" "github.com/antlr/antlr4/runtime/Go/antlr/v4" "github.com/apache/age/drivers/golang/parser" ) const MaxUint = ^uint(0) const MaxInt = int(MaxUint >> 1) const MinUint = 0 const MinInt = -MaxInt - 1 type Unmarshaller interface { unmarshal(text string) (Entity, error) } type AGUnmarshaler struct { Unmarshaller ageParser *parser.AgeParser visitor parser.AgeVisitor errListener *AGErrorListener vcache map[int64]interface{} } func NewAGUnmarshaler() *AGUnmarshaler { vcache := make(map[int64]interface{}) m := &AGUnmarshaler{ageParser: parser.NewAgeParser(nil), visitor: &UnmarshalVisitor{vcache: vcache}, errListener: NewAGErrorListener(), vcache: vcache, } m.ageParser.AddErrorListener(m.errListener) return m } func (p *AGUnmarshaler) unmarshal(text string) (Entity, error) { if len(text) == 0 { return NewSimpleEntity(nil), nil } input := antlr.NewInputStream(text) lexer := parser.NewAgeLexer(input) stream := antlr.NewCommonTokenStream(lexer, 0) p.ageParser.SetInputStream(stream) tree := p.ageParser.Ageout() rst := tree.Accept(p.visitor) if len(p.errListener.errList) > 0 { var ape *AgeParseError = nil errs := make([]string, len(p.errListener.errList)) for idx, re := range p.errListener.errList { errs[idx] = re.GetMessage() fmt.Println(re) } p.errListener.clearErrs() ape = &AgeParseError{msg: "Cypher query:" + text, errors: errs} return nil, ape } if !IsEntity(rst) { rst = NewSimpleEntity(rst) } return rst.(Entity), nil } type AGErrorListener struct { *antlr.DefaultErrorListener errList []antlr.RecognitionException } func NewAGErrorListener() *AGErrorListener { return &AGErrorListener{DefaultErrorListener: &antlr.DefaultErrorListener{}, errList: []antlr.RecognitionException{}} } func (el *AGErrorListener) SyntaxError(recognizer antlr.Recognizer, offendingSymbol interface{}, line, column int, msg string, e antlr.RecognitionException) { el.errList = append(el.errList, e) } func (el *AGErrorListener) getErrs() []antlr.RecognitionException { return el.errList } func (el *AGErrorListener) clearErrs() { el.errList = []antlr.RecognitionException{} } type UnmarshalVisitor struct { parser.AgeVisitor vcache map[int64]interface{} } func (v *UnmarshalVisitor) Visit(tree antlr.ParseTree) interface{} { return nil } func (v *UnmarshalVisitor) VisitChildren(node antlr.RuleNode) interface{} { var rtn interface{} for _, c := range node.GetChildren() { pt := c.(antlr.ParseTree) rtn = pt.Accept(v) } return rtn } func (v *UnmarshalVisitor) VisitTerminal(node antlr.TerminalNode) interface{} { return nil } func (v *UnmarshalVisitor) VisitErrorNode(node antlr.ErrorNode) interface{} { return nil } func (v *UnmarshalVisitor) VisitAgeout(ctx *parser.AgeoutContext) interface{} { rtn := v.VisitChildren(ctx) return rtn } // Visit a parse tree produced by AgeParser#vertex. func (v *UnmarshalVisitor) VisitVertex(ctx *parser.VertexContext) interface{} { propCtx := ctx.Properties() props := propCtx.Accept(v).(map[string]interface{}) // fmt.Println(" * VisitVertex:", props) vid := int64(props["id"].(int64)) vertex, ok := v.vcache[vid] if !ok { vertex = NewVertex(vid, props["label"].(string), props["properties"].(map[string]interface{})) v.vcache[vid] = vertex } return vertex } // Visit a parse tree produced by AgeParser#edge. func (v *UnmarshalVisitor) VisitEdge(ctx *parser.EdgeContext) interface{} { propCtx := ctx.Properties() props := propCtx.Accept(v).(map[string]interface{}) // fmt.Println(" * VisitEdge:", props) edge := NewEdge(int64(props["id"].(int64)), props["label"].(string), int64(props["start_id"].(int64)), int64(props["end_id"].(int64)), props["properties"].(map[string]interface{})) return edge } // Visit a parse tree produced by AgeParser#path. func (v *UnmarshalVisitor) VisitPath(ctx *parser.PathContext) interface{} { entities := []Entity{} for _, child := range ctx.GetChildren() { switch child.(type) { case *parser.VertexContext: v := child.(*parser.VertexContext).Accept(v) // fmt.Println(v) entities = append(entities, v.(Entity)) case *parser.EdgeContext: e := child.(*parser.EdgeContext).Accept(v) // fmt.Println(e) entities = append(entities, e.(Entity)) default: } } path := NewPath(entities) return path } // Visit a parse tree produced by AgeParser#value. func (v *UnmarshalVisitor) VisitValue(ctx *parser.ValueContext) interface{} { child := ctx.GetChild(0) switch child.(type) { case *antlr.TerminalNodeImpl: rtn, err := unmarshalTerm(child.(*antlr.TerminalNodeImpl)) if err != nil { panic(err) } return rtn default: return child.(antlr.ParserRuleContext).Accept(v) } } // Visit a parse tree produced by AgeParser#properties. func (v *UnmarshalVisitor) VisitProperties(ctx *parser.PropertiesContext) interface{} { props := make(map[string]interface{}) for _, pairCtx := range ctx.AllPair() { pairCtx.Accept(v) pair := pairCtx.(*parser.PairContext) key := strings.Trim(pair.STRING().GetText(), "\"") // fmt.Println("Pair KEY:", key) value := pair.Value().Accept(v) props[key] = value } return props } // Visit a parse tree produced by AgeParser#pair. func (v *UnmarshalVisitor) VisitPair(ctx *parser.PairContext) interface{} { return nil } // Visit a parse tree produced by AgeParser#arr. func (v *UnmarshalVisitor) VisitArr(ctx *parser.ArrContext) interface{} { var arr []interface{} for _, child := range ctx.GetChildren() { switch child.(type) { case *antlr.TerminalNodeImpl: // skip break default: el := child.(antlr.ParserRuleContext).Accept(v) arr = append(arr, el) } } return arr } func unmarshalTerm(ctx *antlr.TerminalNodeImpl) (interface{}, error) { txt := ctx.GetText() switch ctx.GetSymbol().GetTokenType() { case parser.AgeLexerSTRING: return strings.Trim(txt, "\""), nil case parser.AgeLexerNUMERIC: numStr := txt[:len(txt)-9] // fmt.Println("txt ", txt) // fmt.Println("numStr", numStr) if strings.Contains(numStr, ".") { bi := new(big.Float) bi, ok := bi.SetString(numStr) if !ok { return nil, &AgeParseError{msg: "Parse big float " + txt} } return bi, nil } else { bi := new(big.Int) bi, ok := bi.SetString(numStr, 10) if !ok { return nil, &AgeParseError{msg: "Parse big int " + txt} } return bi, nil } case parser.AgeLexerNUMBER: if strings.Contains(txt, ".") { return strconv.ParseFloat(txt, 64) } else { return strconv.ParseInt(txt, 10, 64) } case parser.AgeLexerFLOAT_EXPR: switch txt { case "NaN": return math.NaN(), nil case "-Infinity": return math.Inf(-1), nil case "Infinity": return math.Inf(1), nil default: return nil, &AgeParseError{msg: "Unknown float expression" + txt} } case parser.AgeLexerBOOL: s, err := strconv.ParseBool(txt) if err != nil { return nil, err } else { return s, nil } case parser.AgeLexerNULL: return nil, nil default: return nil, nil } } age-PG16-v1.5.0-rc0/drivers/golang/age/builder_test.go000066400000000000000000000163461454606241200223070ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package age import ( "fmt" "math" "math/big" "testing" "github.com/stretchr/testify/assert" ) func TestPathParsing(t *testing.T) { rstStr1 := `[{"id": 2251799813685425, "label": "Person", "properties": {"name": "Smith"}}::vertex, {"id": 2533274790396576, "label": "workWith", "end_id": 2251799813685425, "start_id": 2251799813685424, "properties": {"weight": 3, "bigFloat":123456789123456789123456789.12345::numeric}}::edge, {"id": 2251799813685424, "label": "Person", "properties": {"name": "Joe"}}::vertex]::path` rstStr2 := `[{"id": 2251799813685424, "label": "Person", "properties": {"name": "Joe"}}::vertex, {"id": 2533274790396576, "label": "workWith", "end_id": 2251799813685425, "start_id": 2251799813685424, "properties": {"weight": 3}}::edge, {"id": 2251799813685425, "label": "Person", "properties": {"name": "Smith"}}::vertex]::path` rstStr3 := `[{"id": 2251799813685424, "label": "Person", "properties": {"name": "Joe"}}::vertex, {"id": 2533274790396579, "label": "workWith", "end_id": 2251799813685426, "start_id": 2251799813685424, "properties": {"weight": 5}}::edge, {"id": 2251799813685426, "label": "Person", "properties": {"name": "Jack", "arrVal":["A","B"]}}::vertex]::path` unmarshaler := NewAGUnmarshaler() entity1, _ := unmarshaler.unmarshal(rstStr1) entity2, _ := unmarshaler.unmarshal(rstStr2) entity3, _ := unmarshaler.unmarshal(rstStr3) assert.Equal(t, entity1.GType(), entity2.GType(), "Type Check") p1 := entity1.(*Path) p2 := entity2.(*Path) p3 := entity3.(*Path) assert.Equal(t, p1.GetAsVertex(0).props["name"], p2.GetAsVertex(2).props["name"]) assert.Equal(t, p2.GetAsVertex(0).props["name"], p3.GetAsVertex(0).props["name"]) bf := new(big.Float) bf, _ = bf.SetString("123456789123456789123456789.12345") bigFloat := p1.GetAsEdge(1).props["bigFloat"] assert.Equal(t, bf, bigFloat) fmt.Println(entity1) fmt.Println(entity2) fmt.Println(entity3) } func TestVertexParsing(t *testing.T) { rstStr := `{"id": 2251799813685425, "label": "Person", "properties": {"name": "Smith", "numInt":123, "numIntBig":12345678901235555555555555555::numeric, "numFloat": 384.23424, "yn":true, "nullVal": null}}::vertex` unmarshaler := NewAGUnmarshaler() entity, _ := unmarshaler.unmarshal(rstStr) // fmt.Println(entity) assert.Equal(t, G_VERTEX, entity.GType()) v := entity.(*Vertex) assert.Equal(t, "Smith", v.props["name"]) assert.True(t, (int64(123) == v.props["numInt"])) assert.Equal(t, int64(123), v.props["numInt"]) bi := new(big.Int) bi, ok := bi.SetString("12345678901235555555555555555", 10) if !ok { fmt.Println("Cannot reach this line. ") } assert.Equal(t, bi, v.props["numIntBig"]) assert.True(t, (384.23424 == v.props["numFloat"])) assert.Equal(t, float64(384.23424), v.props["numFloat"]) assert.Equal(t, true, v.props["yn"]) assert.Nil(t, v.props["nullVal"]) } func TestNormalValueParsing(t *testing.T) { mapStr := `{"name": "Smith", "num":123, "yn":true}` arrStr := `["name", "Smith", "num", 123, "yn", true]` strStr := `"abcd"` intStr := `1234` floatStr := `1234.56789` floatStr2 := `6.45161290322581e+46` numericStr1 := `12345678901234567890123456.789::numeric` numericStr2 := `12345678901234567890123456::numeric` boolStr := `true` nullStr := "" nanStr := "NaN" infpStr := "Infinity" infnStr := "-Infinity" unmarshaler := NewAGUnmarshaler() mapv, _ := unmarshaler.unmarshal(mapStr) arrv, _ := unmarshaler.unmarshal(arrStr) str2, _ := unmarshaler.unmarshal(strStr) intv, _ := unmarshaler.unmarshal(intStr) fl, _ := unmarshaler.unmarshal(floatStr) fl2, _ := unmarshaler.unmarshal(floatStr2) numeric1, _ := unmarshaler.unmarshal(numericStr1) numeric2, _ := unmarshaler.unmarshal(numericStr2) b, _ := unmarshaler.unmarshal(boolStr) nullVal, _ := unmarshaler.unmarshal(nullStr) nanVal, _ := unmarshaler.unmarshal(nanStr) infpVal, _ := unmarshaler.unmarshal(infpStr) infnVal, _ := unmarshaler.unmarshal(infnStr) // fmt.Println("intv", intv.GType(), reflect.TypeOf(intv.(*SimpleEntity).Value()), intv) assert.Equal(t, G_MAP, mapv.GType()) assert.Equal(t, G_ARR, arrv.GType()) assert.Equal(t, G_STR, str2.GType()) assert.Equal(t, G_INT, intv.GType()) assert.Equal(t, G_FLOAT, fl.GType()) assert.Equal(t, G_FLOAT, fl2.GType()) assert.Equal(t, G_FLOATBIG, numeric1.GType()) assert.Equal(t, G_INTBIG, numeric2.GType()) assert.Equal(t, G_BOOL, b.GType()) assert.Equal(t, G_NULL, nullVal.GType()) assert.Equal(t, G_FLOAT, nanVal.GType()) assert.Equal(t, G_FLOAT, infpVal.GType()) assert.Equal(t, G_FLOAT, infnVal.GType()) assert.Equal(t, map[string]interface{}{"name": "Smith", "num": int64(123), "yn": true}, mapv.(*SimpleEntity).Value()) assert.Equal(t, []interface{}{"name", "Smith", "num", int64(123), "yn", true}, arrv.(*SimpleEntity).Value()) assert.Equal(t, "abcd", str2.(*SimpleEntity).Value()) assert.Equal(t, int64(1234), intv.(*SimpleEntity).Value()) assert.Equal(t, 1234.56789, fl.(*SimpleEntity).Value()) assert.Equal(t, 6.45161290322581e+46, fl2.(*SimpleEntity).Value()) assert.Equal(t, true, b.(*SimpleEntity).Value()) assert.Equal(t, nil, nullVal.(*SimpleEntity).Value()) assert.True(t, math.IsNaN(nanVal.(*SimpleEntity).Value().(float64))) assert.Equal(t, math.Inf(1), infpVal.(*SimpleEntity).Value()) assert.Equal(t, math.Inf(-1), infnVal.(*SimpleEntity).Value()) bf := new(big.Float) bf, _ = bf.SetString("12345678901234567890123456.789") assert.Equal(t, bf, numeric1.(*SimpleEntity).Value()) bi := new(big.Int) bi, _ = bi.SetString("12345678901234567890123456", 10) assert.Equal(t, bi, numeric2.(*SimpleEntity).Value()) } func TestMap(t *testing.T) { mapStr := `{"name": "Smith", "num":123, "yn":true, "arr":["A","B",1], "map":{"a":1, "b":"bv"}}` unmarshaler := NewAGUnmarshaler() mapv, _ := unmarshaler.unmarshal(mapStr) assert.Equal(t, G_MAP, mapv.GType()) mapValue := mapv.(*SimpleEntity).Value().(map[string]interface{}) assert.Equal(t, "Smith", mapValue["name"]) assert.Equal(t, []interface{}{"A", "B", int64(1)}, mapValue["arr"]) assert.Equal(t, map[string]interface{}{"a": int64(1), "b": "bv"}, mapValue["map"]) } func TestArray(t *testing.T) { arrayStr := `[ "Smith", 123, true, ["A","B",1], {"a":1, "b":"bv"}]` unmarshaler := NewAGUnmarshaler() arrayv, _ := unmarshaler.unmarshal(arrayStr) assert.Equal(t, G_ARR, arrayv.GType()) arrValue := arrayv.(*SimpleEntity).Value().([]interface{}) assert.Equal(t, "Smith", arrValue[0]) assert.Equal(t, []interface{}{"A", "B", int64(1)}, arrValue[3]) assert.Equal(t, map[string]interface{}{"a": int64(1), "b": "bv"}, arrValue[4]) } age-PG16-v1.5.0-rc0/drivers/golang/age/errors.go000066400000000000000000000024611454606241200211270ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package age import ( "bytes" "fmt" ) type AgeError struct { cause error msg string } func (e *AgeError) Error() string { if e.cause != nil { return fmt.Sprintf("%s >> Cause:%s", e.msg, e.cause.Error()) } return e.msg } type AgeParseError struct { msg string errors []string } func (e *AgeParseError) Error() string { var buf bytes.Buffer buf.WriteString(e.msg) buf.WriteString(" >> Causes:\n") for _, err := range e.errors { buf.WriteString(err) buf.WriteString("\n") } return buf.String() } age-PG16-v1.5.0-rc0/drivers/golang/age/mapper.go000066400000000000000000000113551454606241200211010ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package age import ( "fmt" "reflect" "strings" "github.com/antlr/antlr4/runtime/Go/antlr/v4" "github.com/apache/age/drivers/golang/parser" ) type AGMapper struct { AGUnmarshaler } func NewAGMapper(typeMap map[string]reflect.Type) *AGMapper { vcache := make(map[int64]interface{}) if typeMap == nil { typeMap = make(map[string]reflect.Type) } m := AGUnmarshaler{ageParser: parser.NewAgeParser(nil), visitor: &MapperVisitor{UnmarshalVisitor: UnmarshalVisitor{vcache: vcache}, typeMap: typeMap}, errListener: NewAGErrorListener(), vcache: vcache, } agm := &AGMapper{AGUnmarshaler: m} agm.ageParser.AddErrorListener(agm.errListener) return agm } func (m *AGMapper) PutType(label string, tp reflect.Type) { m.visitor.(*MapperVisitor).PutType(label, tp) } type MapperVisitor struct { UnmarshalVisitor typeMap map[string]reflect.Type } func (v *MapperVisitor) PutType(label string, tp reflect.Type) { v.typeMap[label] = tp } func (v *MapperVisitor) VisitAgeout(ctx *parser.AgeoutContext) interface{} { rtn := v.VisitChildren(ctx) return rtn } func (v *MapperVisitor) VisitChildren(node antlr.RuleNode) interface{} { var rtn interface{} for _, c := range node.GetChildren() { pt := c.(antlr.ParseTree) rtn = pt.Accept(v) } return rtn } func (v *MapperVisitor) VisitPath(ctx *parser.PathContext) interface{} { entities := []interface{}{} for _, child := range ctx.GetChildren() { switch child.(type) { case *parser.VertexContext: v := child.(*parser.VertexContext).Accept(v) // fmt.Println(v) entities = append(entities, v) case *parser.EdgeContext: e := child.(*parser.EdgeContext).Accept(v) // fmt.Println(e) entities = append(entities, e) default: } } // vctxArr := ctx.AllVertex() // start := vctxArr[0].Accept(v) // rel := ctx.Edge().Accept(v) // end := vctxArr[1].Accept(v) // fmt.Println("VisitPath:", reflect.TypeOf(start), reflect.TypeOf(rel), reflect.TypeOf(rel)) path := NewMapPath(entities) return path } func (v *MapperVisitor) VisitVertex(ctx *parser.VertexContext) interface{} { propCtx := ctx.Properties() props := propCtx.Accept(v).(map[string]interface{}) vid := int64(props["id"].(int64)) vertex, ok := v.vcache[vid] var err error if !ok { vertex, err = v.mapVertex(vid, props["label"].(string), props["properties"].(map[string]interface{})) if err != nil { panic(err) } v.vcache[vid] = vertex } // fmt.Println(" * VisitVertex:", vertex) return vertex } // Visit a parse tree produced by AgeParser#edge. func (v *MapperVisitor) VisitEdge(ctx *parser.EdgeContext) interface{} { propCtx := ctx.Properties() props := propCtx.Accept(v).(map[string]interface{}) vid := props["id"].(int64) edge, ok := v.vcache[vid] var err error if !ok { edge, err = v.mapEdge(vid, props["label"].(string), props["start_id"].(int64), props["end_id"].(int64), props["properties"].(map[string]interface{})) if err != nil { panic(err) } v.vcache[vid] = edge } return edge } func (v *MapperVisitor) mapVertex(vid int64, label string, properties map[string]interface{}) (interface{}, error) { tp, ok := v.typeMap[label] if !ok { return NewVertex(vid, label, properties), nil } return mapStruct(tp, properties) } func (v *MapperVisitor) mapEdge(vid int64, label string, start int64, end int64, properties map[string]interface{}) (interface{}, error) { tp, ok := v.typeMap[label] if !ok { return NewEdge(vid, label, start, end, properties), nil } return mapStruct(tp, properties) } func mapStruct(tp reflect.Type, properties map[string]interface{}) (interface{}, error) { value := reflect.New(tp).Elem() for k, v := range properties { k = strings.Title(k) f, ok := tp.FieldByName(k) if ok { field := value.FieldByIndex(f.Index) val := reflect.ValueOf(v) if field.Type().ConvertibleTo(val.Type()) { field.Set(val) } else { return nil, fmt.Errorf("Property[%s] value[%v] type is not convertable to %v", k, v, field.Type()) } } } return value.Interface(), nil } age-PG16-v1.5.0-rc0/drivers/golang/age/mapper_test.go000066400000000000000000000054661454606241200221460ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package age import ( "fmt" "reflect" "testing" "github.com/stretchr/testify/assert" ) type VPerson struct { Name string Age int64 Weight float64 } type EWorkWith struct { Weight int64 } func TestPathMapping(t *testing.T) { rstStr1 := `[{"id": 2251799813685425, "label": "Person", "properties": {"name": "Smith"}}::vertex, {"id": 2533274790396576, "label": "workWith", "end_id": 2251799813685425, "start_id": 2251799813685424, "properties": {"weight": 3}}::edge, {"id": 2251799813685424, "label": "Person", "properties": {"name": "Joe"}}::vertex]::path` rstStr2 := `[{"id": 2251799813685424, "label": "Person", "properties": {"name": "Joe"}}::vertex, {"id": 2533274790396576, "label": "workWith", "end_id": 2251799813685425, "start_id": 2251799813685424, "properties": {"weight": 3}}::edge, {"id": 2251799813685425, "label": "Person", "properties": {"name": "Smith"}}::vertex]::path` rstStr3 := `[{"id": 2251799813685424, "label": "Person", "properties": {"name": "Joe"}}::vertex, {"id": 2533274790396579, "label": "workWith", "end_id": 2251799813685426, "start_id": 2251799813685424, "properties": {"weight": 5}}::edge, {"id": 2251799813685426, "label": "Person", "properties": {"name": "Jack"}}::vertex]::path` mapper := NewAGMapper(nil) mapper.PutType("Person", reflect.TypeOf(VPerson{})) mapper.PutType("workWith", reflect.TypeOf(EWorkWith{})) entity1, _ := mapper.unmarshal(rstStr1) entity2, _ := mapper.unmarshal(rstStr2) entity3, _ := mapper.unmarshal(rstStr3) fmt.Println(" **** ", entity1) fmt.Println(" **** ", entity2) fmt.Println(" **** ", entity3) assert.Equal(t, entity1.GType(), entity2.GType(), "Type Check") p1 := entity1.(*MapPath) p2 := entity2.(*MapPath) p3 := entity3.(*MapPath) assert.Equal(t, p1.Get(2).(VPerson).Name, p2.Get(0).(VPerson).Name) assert.Equal(t, p2.Get(0).(VPerson).Name, p3.Get(0).(VPerson).Name) assert.Equal(t, p1.Get(1).(EWorkWith).Weight, int64(3)) assert.Equal(t, p2.Get(1).(EWorkWith).Weight, int64(3)) assert.Equal(t, p3.Get(1).(EWorkWith).Weight, int64(5)) } age-PG16-v1.5.0-rc0/drivers/golang/age/models.go000066400000000000000000000151511454606241200210760ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package age import ( "bytes" "fmt" "math/big" "reflect" ) // GTYPE representing entity types for AGE result data : Vertex, Edge, Path and SimpleEntity type GTYPE uint8 const ( G_OTHER GTYPE = 1 + iota G_VERTEX G_EDGE G_PATH G_MAP_PATH G_STR G_INT G_INTBIG G_FLOAT G_FLOATBIG G_BOOL G_NULL G_MAP G_ARR ) var _TpV = reflect.TypeOf(&Vertex{}) var _TpE = reflect.TypeOf(&Edge{}) var _TpP = reflect.TypeOf(&Path{}) var _TpMP = reflect.TypeOf(&MapPath{}) var _TpStr = reflect.TypeOf(string("")) var _TpInt = reflect.TypeOf(int64(0)) var _TpIntBig = reflect.TypeOf(big.NewInt(0)) var _TpFloat = reflect.TypeOf(float64(0)) var _TpFloatBig = reflect.TypeOf(big.NewFloat(0)) var _TpBool = reflect.TypeOf(bool(false)) var _TpMap = reflect.TypeOf(map[string]interface{}{}) var _TpArr = reflect.TypeOf([]interface{}{}) // Entity object interface for parsed AGE result data : Vertex, Edge, Path and SimpleEntity type Entity interface { GType() GTYPE String() string } func IsEntity(v interface{}) bool { _, ok := v.(Entity) return ok } type SimpleEntity struct { Entity typ GTYPE value interface{} } func NewSimpleEntity(value interface{}) *SimpleEntity { if value == nil { return &SimpleEntity{typ: G_NULL, value: nil} } switch value.(type) { case string: return &SimpleEntity{typ: G_STR, value: value} case int64: return &SimpleEntity{typ: G_INT, value: value} case *big.Int: return &SimpleEntity{typ: G_INTBIG, value: value} case float64: return &SimpleEntity{typ: G_FLOAT, value: value} case *big.Float: return &SimpleEntity{typ: G_FLOATBIG, value: value} case bool: return &SimpleEntity{typ: G_BOOL, value: value} case map[string]interface{}: return &SimpleEntity{typ: G_MAP, value: value} case []interface{}: return &SimpleEntity{typ: G_ARR, value: value} default: return &SimpleEntity{typ: G_OTHER, value: value} } } func (e *SimpleEntity) GType() GTYPE { return e.typ } func (e *SimpleEntity) IsNull() bool { return e.value == nil } func (e *SimpleEntity) Value() interface{} { return e.value } func (e *SimpleEntity) String() string { return fmt.Sprintf("%v", e.value) } func (e *SimpleEntity) AsStr() string { return e.value.(string) } func (e *SimpleEntity) AsInt() int { return e.value.(int) } func (e *SimpleEntity) AsInt64() int64 { return e.value.(int64) } func (e *SimpleEntity) AsBigInt() *big.Int { return e.value.(*big.Int) } func (e *SimpleEntity) AsFloat() float64 { return e.value.(float64) } func (e *SimpleEntity) AsBigFloat() *big.Float { return e.value.(*big.Float) } func (e *SimpleEntity) AsBool() bool { return e.value.(bool) } func (e *SimpleEntity) AsMap() map[string]interface{} { return e.value.(map[string]interface{}) } func (e *SimpleEntity) AsArr() []interface{} { return e.value.([]interface{}) } type LabeledEntity struct { Entity id int64 label string props map[string]interface{} } func newLabeledEntity(id int64, label string, props map[string]interface{}) *LabeledEntity { return &LabeledEntity{id: id, label: label, props: props} } func (n *LabeledEntity) Id() int64 { return n.id } func (n *LabeledEntity) Label() string { return n.label } func (n *LabeledEntity) Prop(key string) interface{} { return n.props[key] } // return properties func (n *LabeledEntity) Props() map[string]interface{} { return n.props } type Vertex struct { *LabeledEntity } func NewVertex(id int64, label string, props map[string]interface{}) *Vertex { return &Vertex{newLabeledEntity(id, label, props)} } func (v *Vertex) GType() GTYPE { return G_VERTEX } func (v *Vertex) String() string { return fmt.Sprintf("V{id:%d, label:%s, props:%v}", v.id, v.label, v.props) } type Edge struct { *LabeledEntity start_id int64 end_id int64 } func NewEdge(id int64, label string, start int64, end int64, props map[string]interface{}) *Edge { return &Edge{LabeledEntity: newLabeledEntity(id, label, props), start_id: start, end_id: end} } func (e *Edge) GType() GTYPE { return G_EDGE } func (e *Edge) StartId() int64 { return e.start_id } func (e *Edge) EndId() int64 { return e.end_id } func (e *Edge) String() string { return fmt.Sprintf("E{id:%d, label:%s, start:%d, end:%d, props:%v}", e.id, e.label, e.start_id, e.end_id, e.props) } type Path struct { Entity entities []Entity } func NewPath(entities []Entity) *Path { return &Path{entities: entities} } func (e *Path) GType() GTYPE { return G_PATH } func (e *Path) Size() int { return len(e.entities) } func (e *Path) Get(index int) Entity { if index < 0 && index >= len(e.entities) { panic(fmt.Errorf("Entity index[%d] is out of range (%d) ", index, len(e.entities))) } return e.entities[index] } func (e *Path) GetAsVertex(index int) *Vertex { v := e.Get(index) if v.GType() != G_VERTEX { panic(fmt.Errorf("Entity[%d] is not Vertex", index)) } return v.(*Vertex) } func (e *Path) GetAsEdge(index int) *Edge { v := e.Get(index) if v.GType() != G_EDGE { panic(fmt.Errorf("Entity[%d] is not Edge", index)) } return v.(*Edge) } func (p *Path) String() string { var buf bytes.Buffer buf.WriteString("P[") for _, e := range p.entities { buf.WriteString(e.String()) buf.WriteString(",") } buf.WriteString("]") return buf.String() } type MapPath struct { Entity entities []interface{} } func NewMapPath(entities []interface{}) *MapPath { return &MapPath{entities: entities} } func (e *MapPath) GType() GTYPE { return G_MAP_PATH } func (e *MapPath) Size() int { return len(e.entities) } func (e *MapPath) Get(index int) interface{} { if index < 0 && index >= len(e.entities) { panic(fmt.Errorf("Entity index[%d] is out of range (%d) ", index, len(e.entities))) } return e.entities[index] } func (p *MapPath) String() string { var buf bytes.Buffer buf.WriteString("P[") for _, e := range p.entities { buf.WriteString(fmt.Sprintf("%v", e)) buf.WriteString(",") } buf.WriteString("]") return buf.String() } age-PG16-v1.5.0-rc0/drivers/golang/go.mod000066400000000000000000000024361454606241200176400ustar00rootroot00000000000000// /* // * Licensed to the Apache Software Foundation (ASF) under one // * or more contributor license agreements. See the NOTICE file // * distributed with this work for additional information // * regarding copyright ownership. The ASF licenses this file // * to you under the Apache License, Version 2.0 (the // * "License"); you may not use this file except in compliance // * with the License. You may obtain a copy of the License at // * // * http://www.apache.org/licenses/LICENSE-2.0 // * // * Unless required by applicable law or agreed to in writing, // * software distributed under the License is distributed on an // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // * KIND, either express or implied. See the License for the // * specific language governing permissions and limitations // * under the License. // */ module github.com/apache/age/drivers/golang go 1.19 require ( github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230321174746-8dcc6526cfb1 github.com/lib/pq v1.10.7 github.com/stretchr/testify v1.7.0 ) require ( github.com/davecgh/go-spew v1.1.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect ) age-PG16-v1.5.0-rc0/drivers/golang/go.sum000066400000000000000000000041031454606241200176560ustar00rootroot00000000000000github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230219212500-1f9a474cc2dc h1:ikxgKfnYm4kXCOohe1uCkVFwZcABDZbVsqginko+GY8= github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230219212500-1f9a474cc2dc/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230321174746-8dcc6526cfb1 h1:X8MJ0fnN5FPdcGF5Ij2/OW+HgiJrRg3AfHAx1PJtIzM= github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230321174746-8dcc6526cfb1/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= golang.org/x/exp v0.0.0-20230223210539-50820d90acfd h1:wtFuj4DoOcAdb82Zh2PI90xiaqgp7maYA7KxjQXVtkY= golang.org/x/exp v0.0.0-20230223210539-50820d90acfd/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug= golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= age-PG16-v1.5.0-rc0/drivers/golang/install.bat000066400000000000000000000064301454606241200206660ustar00rootroot00000000000000@echo off rem Install Java Development Kit (JDK) echo Installing JDK... if not exist "%ProgramFiles%\Java\jdk-19\" ( mkdir C:\temp cd C:\temp powershell Invoke-WebRequest -Uri "https://download.oracle.com/java/19/archive/jdk-19.0.2_windows-x64_bin.exe" -OutFile jdk-19.0.2_windows-x64_bin.exe start /wait jdk-19.0.2_windows-x64_bin.exe /s ADDLOCAL="ToolsFeature" /s del /f jdk-19.0.2_windows-x64_bin.exe setx /M JAVA_HOME "C:\Program Files\Java\jdk-19.0.2" setx /M PATH "%PATH%;%JAVA_HOME%\bin" ) else ( echo JDK already installed. ) rem Install Apache Maven echo Installing Apache Maven... if not exist "%ProgramFiles%\Apache Maven\apache-maven-3.9.0\" ( mkdir C:\temp cd C:\temp powershell Invoke-WebRequest -Uri "https://dlcdn.apache.org/maven/maven-3/3.9.0/binaries/apache-maven-3.9.0-bin.zip" -OutFile apache-maven-3.9.0-bin.zip powershell Expand-Archive apache-maven-3.9.0-bin.zip -DestinationPath \"%ProgramFiles%\Apache Maven\" del /f apache-maven-3.9.0-bin.zip setx /M PATH "%PATH%;%ProgramFiles%\Apache Maven\apache-maven-3.9.0-bin\bin" ) else ( echo Apache Maven already installed. ) rem Download and install ANTLR echo Downloading ANTLR... if not exist "%ProgramFiles%\ANTLR" ( mkdir "%ProgramFiles%\ANTLR" cd "%ProgramFiles%\ANTLR" powershell Invoke-WebRequest -Uri "https://www.antlr.org/download/antlr-4.11.1-complete.jar" -OutFile "antlr-4.11.1-complete.jar" setx /M PATH "%PATH%;%ProgramFiles%\ANTLR\" setx /M CLASSPATH ".;%ProgramFiles%\ANTLR\antlr-4.11.1-complete.jar;%CLASSPATH%" ) echo ANTLR installation complete. rem Checking Compatibility for Golang echo Checking if current version of Golang >= Go 1.18..... set "minimum_version=1.18" set "installed_version=" set "download_url=https://go.dev/dl/go1.19.7.windows-amd64.msi" :: Check if Go is installed and get its version set "go_path=" for %%i in (go.exe) do set "go_path=%%~$PATH:i" if defined go_path ( for /f "tokens=3" %%v in ('go version 2^>^&1') do set "installed_version=%%v" ) :: If Go is not installed or the version is less than 1.18, prompt the user to install a new version if not defined installed_version ( echo installing Go :: Download and install the latest version of Go powershell -Command "& {Invoke-WebRequest -Uri "%download_url%" -OutFile '%TEMP%\go-minimum-version.msi'}" start /wait msiexec /i "%TEMP%\go-minimum-version.msi" for /f "tokens=3" %%v in ('go version 2^>^&1') do set "installed_version=%%v" ) else if "%installed_version%" lss "%minimum_version%" ( set /p "install_new_version=Go version %minimum_version% or higher is required. Would you like to install the latest version? (y/n)" if /i "%install_new_version%"=="y" ( :: Download and install the latest version of Go powershell -Command "& {Invoke-WebRequest -Uri "%download_url%" -OutFile '%TEMP%\go-minimum-version.msi'}" start /wait msiexec /i "%TEMP%\go-minimum_version.msi" for /f "tokens=3" %%v in ('go version 2^>^&1') do set "installed_version=%%v" ) else ( echo Please update Go version before installing driver. goto skip ) ) rem Installing Driver echo --^> Generating ANTLR parser ^& lexer ^for Golang% java org.antlr.v4.Tool -Dlanguage=Go -visitor Age.g4 -o parser/ echo --^> Installing Driver go get -u ./... goto end :skip echo Aborted :end pause endlocalage-PG16-v1.5.0-rc0/drivers/golang/install.sh000077500000000000000000000111211454606241200205260ustar00rootroot00000000000000#!/bin/sh os=$(uname) arch=$(uname -m) java=$(java -version 2>&1 | head -n 1 | cut -d ' ' -f 3 | cut -d '.' -f 1 | cut -d '"' -f 2) # Check JDK version echo "Checking for JDK..." if ! java -version >/dev/null 2>&1 || [ $java -lt 11 ]; then echo "JDK not found or less than version 11, would you like to install? ()" echo "Y/N ->" read answer if [ "$answer" = y ] || [ "$answer" = Y ]; then echo "Installing..." if [[ "$os" == "Darwin" ]]; then cd /tmp if [[ "$arch" == "x86_64" ]]; then curl "https://download.oracle.com/java/20/latest/jdk-20_macos-x64_bin.dmg" -o jdk-20_bin.dmg elif [[ "$arch" == "arm64" ]]; then curl "https://download.oracle.com/java/20/latest/jdk-20_macos-aarch64_bin.dmg" -o jdk-20_bin.dmg fi hdiutil mount jdk-20_bin.dmg # sudo installer -pkg "/Volumes/JDK 20/JDK 20.pkg" -target "/" sudo open -w "/Volumes/JDK 20/JDK 20.pkg" hdiutil unmount "/Volumes/JDK 20" rm jdk-20_bin.dmg elif [[ "$os" == "Linux" ]]; then mkdir -p ~/tmp/jdk20 cd ~/tmp/jdk20 if [[ "$arch" == "x86_64" ]]; then curl "https://download.oracle.com/java/20/latest/jdk-20_linux-x64_bin.tar.gz" -o jdk-20_bin.tar.gz elif [[ "$arch" == "arm64" ]]; then curl "https://download.oracle.com/java/20/latest/jdk-20_linux-aarch64_bin.tar.gz" -o jdk-20_bin.tar.gz fi sudo tar zxvf jdk-20_bin.tar.gz -C /usr/local/ cd ~/ rm -rf ~/tmp/jdk20/ fi echo "JDK installation complete." else echo "Please install JDK >= 11.0.16" exit 0 fi else echo "JDK already installed." fi antlr=$(/usr/local/jdk-20/bin/jar xf /usr/local/antlr/antlr-*-complete.jar META-INF/MANIFEST.MF >/dev/null 2>&1 && grep 'Implementation-Version' META-INF/MANIFEST.MF | cut -d ' ' -f 2 && rm -rf META-INF) # Check ANTLR installation and version echo "Checking for ANTLR..." check_antlr () { if [ ! -z $antlr ]; then if ([ "$(echo $antlr | cut -d '.' -f 1)" -lt 4 ] && [ "$(echo $antlr | cut -d '.' -f 2)" -lt 11 ] && [ "$(echo $antlr | cut -d '.' -f 3)" -lt 1 ]); then return 0 else return 1 fi else return 0 fi } if check_antlr; then echo "ANTLR not found in Default Location or less than version 4.11.1, would you like to Install?" echo "(If installed in other location, please edit the location inside the shell script before running)" echo "Y/N ->" read answer if [ "$answer" = y ] || [ "$answer" = Y ]; then mkdir -p ~/tmp/antlr4.11.1 cd ~/tmp/antlr4.11.1 curl -LO "https://www.antlr.org/download/antlr-4.11.1-complete.jar" sudo mkdir -p /usr/local/antlr sudo mv ~/tmp/antlr4.11.1/antlr-4.11.1-complete.jar /usr/local/antlr/antlr-4.11.1-complete.jar echo 'export CLASSPATH=".:/usr/local/antlr/antlr-4.11.1-complete.jar"' >>~/.bashrc . ~/.bashrc echo "ANTLR installation complete." else echo "Please install ANTLR >= 4.11.1" exit 0 fi # else echo "ANTLR already installed." fi # Check Go installation and version echo "Checking for Go..." if ! command -v go >/dev/null 2>&1 || { [ $(go version | grep -o -E '[0-9]+\.[0-9]+' | head -n 1 | cut -d '.' -f 1) -lt 1 ] && [ $(go version | grep -o -E '[0-9]+\.[0-9]+' | head -n 1 | cut -d '.' -f 2) -lt 19 ]; }; then echo "Go not installed or version is less than 1.19, would you like to install?" echo "Y/N ->" read answer if [ "$answer" = y ] || [ "$answer" = Y ]; then if [[ "$os" == "Darwin" ]]; then cd /tmp if [[ "$arch" == "x86_64" ]]; then curl "https://go.dev/dl/go1.20.2.darwin-amd64.pkg" -o go1.20.2.pkg elif [[ "$arch" == "arm64" ]]; then curl "https://go.dev/dl/go1.20.2.darwin-arm64.pkg" -o go1.20.2.pkg fi #sudo installer -pkg "go1.20.2.pkg" -target "/" sudo open -w golang.pkg elif [[ "$os" == "Linux" ]]; then mkdir -p ~/tmp/go1.20.2 cd ~/tmp/go1.20.2 if [[ "$arch" == "x86_64" ]]; then curl "https://go.dev/dl/go1.20.2.linux-amd64.tar.gz" -o go1.20.2.tar.gz elif [[ "$arch" == "arm64" ]]; then curl "https://go.dev/dl/go1.20.2.linux-arm64.tar.gz" -o go1.20.2.tar.gz fi if command -v go >/dev/null 2>&1; then rm -rf /usr/local/go fi sudo tar -C /usr/local -xzf go1.20.2.linux-amd64.tar.gz if ! [[ ":$PATH:" == *":/usr/local/go/bin:"* ]]; then export PATH=$PATH:/usr/local/go/bin fi fi echo "Go installation complete" else echo "Please install Go >= 1.19" exit 0 fi else echo "Go already installed." fi echo "Generating Parser & Lexer..." java -Xmx500M -cp "/usr/local/lib/antlr-4.11.1-complete.jar:$CLASSPATH" org.antlr.v4.Tool -Dlanguage=Go -visitor Age.g4 echo "Installing Driver..." go get -u ./... echo "Successfully Installed Driver!" exit 0 age-PG16-v1.5.0-rc0/drivers/golang/parser/000077500000000000000000000000001454606241200200215ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/golang/parser/Age.g4000066400000000000000000000042211454606241200207500ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* Apache AGE output data grammar */ grammar Age; ageout : value | vertex | edge | path ; vertex : properties KW_VERTEX ; edge : properties KW_EDGE ; path : '[' vertex (',' edge ',' vertex)* ']' KW_PATH ; //Keywords KW_VERTEX : '::vertex'; KW_EDGE : '::edge'; KW_PATH : '::path'; KW_NUMERIC : '::numeric'; // Common Values Rule value : STRING | NUMBER | NUMERIC | FLOAT_EXPR | BOOL | NULL | properties | arr ; properties : '{' pair (',' pair)* '}' | '{' '}' ; pair : STRING ':' value ; arr : '[' value (',' value)* ']' | '[' ']' ; STRING : '"' (ESC | SAFECODEPOINT)* '"' ; BOOL : 'true'|'false' ; NULL : 'null' ; fragment ESC : '\\' (["\\/bfnrt] | UNICODE) ; fragment UNICODE : 'u' HEX HEX HEX HEX ; fragment HEX : [0-9a-fA-F] ; fragment SAFECODEPOINT : ~ ["\\\u0000-\u001F] ; NUMBER : '-'? INT ('.' [0-9] +)? EXP? ; FLOAT_EXPR : 'NaN' | '-Infinity' | 'Infinity' ; NUMERIC : '-'? INT ('.' [0-9] +)? EXP? KW_NUMERIC ; fragment INT : '0' | [1-9] [0-9]* ; // no leading zeros fragment EXP : [Ee] [+\-]? INT ; // \- since - means "range" inside [...] WS : [ \t\n\r] + -> skip ; age-PG16-v1.5.0-rc0/drivers/golang/parser/generate.go000066400000000000000000000000541454606241200221410ustar00rootroot00000000000000package parser //go:generate ./generate.sh age-PG16-v1.5.0-rc0/drivers/golang/parser/generate.sh000077500000000000000000000006201454606241200221500ustar00rootroot00000000000000#!/bin/sh GRAMMAR_LOC="$(dirname $(pwd))/parser" mkdir -p ~/tmp/antlr cd ~/tmp/antlr curl -LO "https://www.antlr.org/download/antlr-4.11.1-complete.jar" echo "ANTLR installation complete." echo "Generating Parser & Lexer..." java -Xmx500M -cp "$HOME/tmp/antlr/antlr-4.11.1-complete.jar:$HOME/tmp/antlr/antlr-4.11.1-complete.jar" org.antlr.v4.Tool -Dlanguage=Go -visitor $GRAMMAR_LOC/Age.g4 exit 0 age-PG16-v1.5.0-rc0/drivers/golang/samples/000077500000000000000000000000001454606241200201715ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/golang/samples/age_wrapper_sample.go000066400000000000000000000063451454606241200243650ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package main import ( "fmt" "github.com/apache/age/drivers/golang/age" ) // Do cypher query to AGE with Age API func doWithAgeWrapper(dsn string, graphName string) { ag, err := age.ConnectAge(graphName, dsn) if err != nil { panic(err) } tx, err := ag.Begin() if err != nil { panic(err) } _, err = tx.ExecCypher(0, "CREATE (n:Person {name: '%s'})", "Joe") if err != nil { panic(err) } _, err = tx.ExecCypher(0, "CREATE (n:Person {name: '%s', age: %d})", "Smith", 10) if err != nil { panic(err) } _, err = tx.ExecCypher(0, "CREATE (n:Person {name: '%s', weight:%f})", "Jack", 70.3) if err != nil { panic(err) } tx.Commit() tx, err = ag.Begin() if err != nil { panic(err) } cursor, err := tx.ExecCypher(1, "MATCH (n:Person) RETURN n") if err != nil { panic(err) } count := 0 for cursor.Next() { entities, err := cursor.GetRow() if err != nil { panic(err) } count++ vertex := entities[0].(*age.Vertex) fmt.Println(count, "]", vertex.Id(), vertex.Label(), vertex.Props()) } fmt.Println("Vertex Count:", count) _, err = tx.ExecCypher(0, "MATCH (a:Person), (b:Person) WHERE a.name='%s' AND b.name='%s' CREATE (a)-[r:workWith {weight: %d}]->(b)", "Jack", "Joe", 3) if err != nil { panic(err) } _, err = tx.ExecCypher(0, "MATCH (a:Person {name: '%s'}), (b:Person {name: '%s'}) CREATE (a)-[r:workWith {weight: %d}]->(b)", "Joe", "Smith", 7) if err != nil { panic(err) } tx.Commit() tx, err = ag.Begin() if err != nil { panic(err) } cursor, err = tx.ExecCypher(1, "MATCH p=()-[:workWith]-() RETURN p") if err != nil { panic(err) } count = 0 for cursor.Next() { entities, err := cursor.GetRow() if err != nil { panic(err) } count++ path := entities[0].(*age.Path) vertexStart := path.GetAsVertex(0) edge := path.GetAsEdge(1) vertexEnd := path.GetAsVertex(2) fmt.Println(count, "]", vertexStart, edge.Props(), vertexEnd) } // Query with return many columns cursor, err = tx.ExecCypher(3, "MATCH (a:Person)-[l:workWith]-(b:Person) RETURN a, l, b") if err != nil { panic(err) } count = 0 for cursor.Next() { row, err := cursor.GetRow() if err != nil { panic(err) } count++ v1 := row[0].(*age.Vertex) edge := row[1].(*age.Edge) v2 := row[2].(*age.Vertex) fmt.Println("ROW ", count, ">>", "\n\t", v1, "\n\t", edge, "\n\t", v2) } _, err = tx.ExecCypher(0, "MATCH (n:Person) DETACH DELETE n RETURN *") if err != nil { panic(err) } tx.Commit() } age-PG16-v1.5.0-rc0/drivers/golang/samples/main.go000066400000000000000000000026501454606241200214470ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package main import ( "fmt" _ "github.com/lib/pq" ) // var dsn string = "host={host} port={port} dbname={dbname} user={username} password={password} sslmode=disable" var dsn string = "host=127.0.0.1 port=5432 dbname=postgres user=postgres password=agens sslmode=disable" // var graphName string = "{graph_path}" var graphName string = "testGraph" func main() { // Do cypher query to AGE with database/sql Tx API transaction control fmt.Println("# Do cypher query with SQL API") doWithSqlAPI(dsn, graphName) // Do cypher query to AGE with Age API fmt.Println("# Do cypher query with Age API") doWithAgeWrapper(dsn, graphName) } age-PG16-v1.5.0-rc0/drivers/golang/samples/sql_api_sample.go000066400000000000000000000073211454606241200235140ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package main import ( "database/sql" "fmt" "github.com/apache/age/drivers/golang/age" ) // Do cypher query to AGE with database/sql Tx API transaction control func doWithSqlAPI(dsn string, graphName string) { // Connect to PostgreSQL db, err := sql.Open("postgres", dsn) if err != nil { panic(err) } // Confirm graph_path created _, err = age.GetReady(db, graphName) if err != nil { panic(err) } // Tx begin for execute create vertex tx, err := db.Begin() if err != nil { panic(err) } // Create vertices with Cypher _, err = age.ExecCypher(tx, graphName, 0, "CREATE (n:Person {name: '%s', weight:%f})", "Joe", 67.3) if err != nil { panic(err) } _, err = age.ExecCypher(tx, graphName, 0, "CREATE (n:Person {name: '%s', weight:77.3, roles:['Dev','marketing']})", "Jack") if err != nil { panic(err) } _, err = age.ExecCypher(tx, graphName, 0, "CREATE (n:Person {name: '%s', weight:%d})", "Andy", 59) if err != nil { panic(err) } // Commit Tx tx.Commit() // Tx begin for queries tx, err = db.Begin() if err != nil { panic(err) } // Query cypher cypherCursor, err := age.ExecCypher(tx, graphName, 1, "MATCH (n:Person) RETURN n") if err != nil { panic(err) } // Unmarshal result data to Vertex row by row for cypherCursor.Next() { row, err := cypherCursor.GetRow() if err != nil { panic(err) } vertex := row[0].(*age.Vertex) fmt.Println(vertex.Id(), vertex.Label(), vertex.Props()) } // Create Paths (Edges) _, err = age.ExecCypher(tx, graphName, 0, "MATCH (a:Person), (b:Person) WHERE a.name='%s' AND b.name='%s' CREATE (a)-[r:workWith {weight: %d}]->(b)", "Jack", "Joe", 3) if err != nil { panic(err) } _, err = age.ExecCypher(tx, graphName, 0, "MATCH (a:Person {name: '%s'}), (b:Person {name: '%s'}) CREATE (a)-[r:workWith {weight: %d}]->(b)", "Joe", "Andy", 7) if err != nil { panic(err) } tx.Commit() tx, err = db.Begin() if err != nil { panic(err) } // Query Paths with Cypher cypherCursor, err = age.ExecCypher(tx, graphName, 1, "MATCH p=()-[:workWith]-() RETURN p") if err != nil { panic(err) } for cypherCursor.Next() { row, err := cypherCursor.GetRow() if err != nil { panic(err) } path := row[0].(*age.Path) vertexStart := path.GetAsVertex(0) edge := path.GetAsEdge(1) vertexEnd := path.GetAsVertex(2) fmt.Println(vertexStart, edge, vertexEnd) } // Query with return many columns cursor, err := age.ExecCypher(tx, graphName, 3, "MATCH (a:Person)-[l:workWith]-(b:Person) RETURN a, l, b") if err != nil { panic(err) } count := 0 for cursor.Next() { row, err := cursor.GetRow() if err != nil { panic(err) } count++ v1 := row[0].(*age.Vertex) edge := row[1].(*age.Edge) v2 := row[2].(*age.Vertex) fmt.Println("ROW ", count, ">>", "\n\t", v1, "\n\t", edge, "\n\t", v2) } // Delete Vertices _, err = age.ExecCypher(tx, graphName, 0, "MATCH (n:Person) DETACH DELETE n RETURN *") if err != nil { panic(err) } tx.Commit() } age-PG16-v1.5.0-rc0/drivers/jdbc/000077500000000000000000000000001454606241200161605ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/.gitattributes000066400000000000000000000014621454606241200210560ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. *.bat text eol=crlf age-PG16-v1.5.0-rc0/drivers/jdbc/.gitignore000066400000000000000000000016651454606241200201600ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # Ignore Gradle Wapper gradle/wrapper/gradle-wrapper.jar # Ignore Gradle project-specific cache directory .gradle # Ignore Gradle build output directory build age-PG16-v1.5.0-rc0/drivers/jdbc/README.md000066400000000000000000000073171454606241200174470ustar00rootroot00000000000000# **AGE AGType parser and driver support for Java** AGType parser and driver support for [Apache AGE](https://age.apache.org/), graph extension for PostgreSQL. ## Prerequisites You should have installed following jar files and packages. - [gradle](https://gradle.org/install/) build tool - [postgres JDBC driver](https://jdbc.postgresql.org/download/) - [antlr4-4.9.2-complete](https://repo1.maven.org/maven2/org/antlr/antlr4/4.9.2/) - [common-lang3](http://www.java2s.com/Code/Jar/c/Downloadcommonlang3jar.htm) - [commons-text-1.6](http://www.java2s.com/ref/jar/download-commonstext16jar-file.html) Kindly unzip the jars if they are zipped before using them. ## Build from source ```bash git clone https://github.com/apache/age.git cd age/drivers/jdbc gradle assemble ``` After the build completes successfully, a jar file will be created at path `age/drivers/jdbc/lib/build/libs/lib.jar`. Now add this JAR file to class path for your java project. ## Getting Started * Install AGE on your machine. [https://age.apache.org/age-manual/master/index.html](https://age.apache.org/age-manual/master/index.html) * Add the downloaded jar files to class path. * Connect to the postgres server using pg JDBC drivers. Lets say we have a graph named `demo_graph` having some nodes. In order to extract its nodes we can try following steps. To create some more graphs. [https://github.com/apache/age#quick-start](https://github.com/apache/age#quick-start). Following sample code shows how to return query result as `Agtype`. ```java import org.apache.age.jdbc.base.Agtype; import org.postgresql.jdbc.PgConnection; import java.sql.*; public class Sample { static final String DB_URL = "jdbc:postgresql://localhost:5432/demo"; static final String USER = "postgres"; static final String PASS = "pass"; public static void main(String[] args) { // Open a connection try { PgConnection connection = DriverManager.getConnection(DB_URL, USER, PASS).unwrap(PgConnection.class); connection.addDataType("agtype", Agtype.class); // configure AGE Statement stmt = connection.createStatement(); stmt.execute("CREATE EXTENSION IF NOT EXISTS age;"); stmt.execute("LOAD 'age'"); stmt.execute("SET search_path = ag_catalog, \"$user\", public;"); // Run cypher ResultSet rs = stmt.executeQuery("SELECT * from cypher('demo_graph', $$ MATCH (n) RETURN n $$) as (n agtype);"); while (rs.next()) { // Returning Result as Agtype Agtype returnedAgtype = rs.getObject(1, Agtype.class); String nodeLabel = returnedAgtype.getMap().getObject("label").toString(); String nodeProp = returnedAgtype.getMap().getObject("properties").toString(); System.out.println("Vertex : " + nodeLabel + ", \tProps : " + nodeProp); } } catch (Exception e) { e.printStackTrace(); } } } ``` Output ``` Vertex : Person, Props : {bornIn=Pakistan, name=imran} Vertex : Person, Props : {bornIn=Pakistan, name=ali} Vertex : Person, Props : {bornIn=US, name=james} Vertex : Person, Props : {bornIn=Pakistan, name=ali} Vertex : Person, Props : {bornIn=Pakistan, name=usama} Vertex : Person, Props : {bornIn=Pakistan, name=akabr} Vertex : Country, Props : {name=Pakistan} Vertex : Country, Props : {name=US} ``` ## For more information about [Apache AGE](https://age.apache.org/) - Apache Age : [https://age.apache.org/](https://age.apache.org/) - GitHub : [https://github.com/apache/age](https://github.com/apache/age) - Document : [https://age.apache.org/age-manual/master/index.html](https://age.apache.org/age-manual/master/index.html) age-PG16-v1.5.0-rc0/drivers/jdbc/gradle/000077500000000000000000000000001454606241200174165ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/gradle/wrapper/000077500000000000000000000000001454606241200210765ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/gradle/wrapper/gradle-wrapper.properties000066400000000000000000000017331454606241200261340ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists age-PG16-v1.5.0-rc0/drivers/jdbc/gradlew000077500000000000000000000134771454606241200175470ustar00rootroot00000000000000#!/usr/bin/env sh # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. ############################################################################## ## ## Gradle start up script for UN*X ## ############################################################################## # Attempt to set APP_HOME # Resolve links: $0 may be a link PRG="$0" # Need this for relative symlinks. while [ -h "$PRG" ] ; do ls=`ls -ld "$PRG"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then PRG="$link" else PRG=`dirname "$PRG"`"/$link" fi done SAVED="`pwd`" cd "`dirname \"$PRG\"`/" >/dev/null APP_HOME="`pwd -P`" cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" warn () { echo "$*" } die () { echo echo "$*" echo exit 1 } # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false case "`uname`" in CYGWIN* ) cygwin=true ;; Darwin* ) darwin=true ;; MINGW* ) msys=true ;; NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables JAVACMD="$JAVA_HOME/jre/sh/java" else JAVACMD="$JAVA_HOME/bin/java" fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else JAVACMD="java" which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi # Increase the maximum file descriptors if we can. if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then MAX_FD="$MAX_FD_LIMIT" fi ulimit -n $MAX_FD if [ $? -ne 0 ] ; then warn "Could not set maximum file descriptor limit: $MAX_FD" fi else warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" fi fi # For Darwin, add options to specify how the application appears in the dock if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi # For Cygwin or MSYS, switch paths to Windows format before running java if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` SEP="" for dir in $ROOTDIRSRAW ; do ROOTDIRS="$ROOTDIRS$SEP$dir" SEP="|" done OURCYGPATTERN="(^($ROOTDIRS))" # Add a user-defined pattern to the cygpath arguments if [ "$GRADLE_CYGPATTERN" != "" ] ; then OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" fi # Now convert the arguments - kludge to limit ourselves to /bin/sh i=0 for arg in "$@" ; do CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` else eval `echo args$i`="\"$arg\"" fi i=`expr $i + 1` done case $i in 0) set -- ;; 1) set -- "$args0" ;; 2) set -- "$args0" "$args1" ;; 3) set -- "$args0" "$args1" "$args2" ;; 4) set -- "$args0" "$args1" "$args2" "$args3" ;; 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi # Escape application args save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" exec "$JAVACMD" "$@" age-PG16-v1.5.0-rc0/drivers/jdbc/gradlew.bat000066400000000000000000000056241454606241200203040ustar00rootroot00000000000000@rem @rem Licensed to the Apache Software Foundation (ASF) under one @rem or more contributor license agreements. See the NOTICE file @rem distributed with this work for additional information @rem regarding copyright ownership. The ASF licenses this file @rem to you under the Apache License, Version 2.0 (the @rem "License"); you may not use this file except in compliance @rem with the License. You may obtain a copy of the License at @rem @rem http://www.apache.org/licenses/LICENSE-2.0 @rem @rem Unless required by applicable law or agreed to in writing, @rem software distributed under the License is distributed on an @rem "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @rem KIND, either express or implied. See the License for the @rem specific language governing permissions and limitations @rem under the License. @rem @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @rem @rem ########################################################################## @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @rem Resolve any "." and ".." in APP_HOME to make it shorter. for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell if "%ERRORLEVEL%"=="0" goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 exit /b 1 :mainEnd if "%OS%"=="Windows_NT" endlocal :omega age-PG16-v1.5.0-rc0/drivers/jdbc/lib/000077500000000000000000000000001454606241200167265ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/lib/build.gradle.kts000066400000000000000000000043621454606241200220120ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import org.gradle.api.tasks.testing.logging.TestExceptionFormat import org.gradle.api.tasks.testing.logging.TestLogEvent plugins { `java-library` antlr } repositories { mavenCentral() } dependencies { implementation("org.postgresql:postgresql:42.6.0") api("org.apache.commons:commons-text:1.10.0") antlr("org.antlr:antlr4:4.12.0") testImplementation("org.junit.jupiter:junit-jupiter-api:5.9.3") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine") testImplementation("org.testcontainers:testcontainers:1.18.0") testImplementation("org.postgresql:postgresql:42.6.0") testImplementation("org.slf4j:slf4j-api:2.0.7") testImplementation("org.slf4j:slf4j-simple:2.0.7") } tasks.generateGrammarSource { maxHeapSize = "64m" source = project.objects .sourceDirectorySet("antlr", "antlr") .srcDir("${projectDir}/../../").apply { include("*.g4") } arguments.addAll(arrayOf("-package", "org.apache.age.jdbc.antlr4")) outputDirectory = file("$outputDirectory/org/apache/age/jdbc/antlr4") } tasks.test { useJUnitPlatform(); testLogging { // set options for log level LIFECYCLE events(TestLogEvent.FAILED, TestLogEvent.PASSED, TestLogEvent.SKIPPED, TestLogEvent.STANDARD_OUT) exceptionFormat = TestExceptionFormat.FULL showExceptions = true showCauses = true showStackTraces = true } } age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/000077500000000000000000000000001454606241200175155ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/000077500000000000000000000000001454606241200204415ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/000077500000000000000000000000001454606241200213625ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/000077500000000000000000000000001454606241200221515ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/apache/000077500000000000000000000000001454606241200233725ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/apache/age/000077500000000000000000000000001454606241200241265ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/apache/age/jdbc/000077500000000000000000000000001454606241200250305ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/apache/age/jdbc/AgtypeUnrecognizedList.java000066400000000000000000000025051454606241200323370ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.age.jdbc; import org.apache.age.jdbc.base.type.AgtypeAnnotation; import org.apache.age.jdbc.base.type.AgtypeListImpl; import org.apache.age.jdbc.base.type.UnrecognizedObject; public class AgtypeUnrecognizedList extends AgtypeListImpl implements UnrecognizedObject, AgtypeAnnotation { private String annotation; @Override public String getAnnotation() { return this.annotation; } @Override public void setAnnotation(String annotation) { this.annotation = annotation; } } age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/apache/age/jdbc/AgtypeUnrecognizedMap.java000066400000000000000000000025021454606241200321360ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.age.jdbc; import org.apache.age.jdbc.base.type.AgtypeAnnotation; import org.apache.age.jdbc.base.type.AgtypeMapImpl; import org.apache.age.jdbc.base.type.UnrecognizedObject; public class AgtypeUnrecognizedMap extends AgtypeMapImpl implements UnrecognizedObject, AgtypeAnnotation { private String annotation; @Override public String getAnnotation() { return this.annotation; } @Override public void setAnnotation(String annotation) { this.annotation = annotation; } } age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/apache/age/jdbc/base/000077500000000000000000000000001454606241200257425ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/apache/age/jdbc/base/Agtype.java000066400000000000000000000163041454606241200300420ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.age.jdbc.base; import java.sql.SQLException; import org.apache.age.jdbc.base.type.AgtypeAnnotation; import org.apache.age.jdbc.base.type.AgtypeList; import org.apache.age.jdbc.base.type.AgtypeMap; import org.postgresql.util.PGobject; import org.postgresql.util.PSQLException; import org.postgresql.util.PSQLState; /** * Stores values of various kinds in a single object for use in PostgreSQL. The text representation * is built on top of the JSON format * specification. The goal of the text representation is making it compatible with JSON as much * as possible so that valid JSON values can be parsed without effort. *

* Valid Agtypes: * */ public class Agtype extends PGobject implements Cloneable { private Object obj; /** * Public constructor for Agtype. Do not call directly, use the AgtypeFactory when creating * Agtype objects on the client-side and casting the received object in the ResultSet when the * object is created on the server-side. */ public Agtype() { super.setType("ag_catalog.agtype"); } Agtype(Object obj) { this(); this.obj = obj; } /** * TODO: need to define for PreparedStatement. */ @Override public String getValue() { if (value == null) { value = AgtypeUtil.serializeAgtype(obj); } return value; } /** * Parses the serialized value to it's Agtype value. {@inheritDoc} * * @param value Serialized representation of Agtype value. * @throws SQLException throws if the String value cannot be parsed to a valid Agtype. * @see AgtypeUtil#parse(String) */ @Override public void setValue(String value) throws SQLException { try { obj = AgtypeUtil.parse(value); } catch (Exception e) { throw new PSQLException("Parsing AgType failed", PSQLState.DATA_ERROR, e); } super.setValue(value); } /** * Returns the value stored in Agtype as a String. Attempts to perform an implicit conversion of * types stored as non-strings values. * * @return value stored in Agtype as a String. * @throws InvalidAgtypeException Throws if the stored Agtype value cannot be represented as a * String. * @see AgtypeUtil#getString(Object) */ public String getString() throws InvalidAgtypeException { return AgtypeUtil.getString(obj); } /** * Returns the value stored in Agtype as a generic object. * * @return value stored in Agtype as a generic object. */ public Object getObject() throws InvalidAgtypeException { return obj; } /** * Returns the value stored in Agtype as an int. Attempts to perform an implicit conversion of * types stored as non-int values. * * @return value stored in Agtype as an int. * @throws InvalidAgtypeException Throws if the stored Agtype value cannot be represented as an * int. * @see AgtypeUtil#getInt(Object) */ public int getInt() throws InvalidAgtypeException { return AgtypeUtil.getInt(obj); } /** * Returns the value stored in Agtype as a long. Attempts to perform an implicit conversion of * types stored as non-long values. * * @return value stored in Agtype as a long. * @throws InvalidAgtypeException Throws if the stored Agtype value cannot be represented as an * long. * @see AgtypeUtil#getLong(Object) */ public long getLong() throws InvalidAgtypeException { return AgtypeUtil.getLong(obj); } /** * Returns the value stored in Agtype as a double. Attempts to perform an implicit conversion of * types stored as non-double values. * * @return value stored in Agtype as a double. * @throws InvalidAgtypeException Throws if the stored Agtype value cannot be represented as an * double. * @see AgtypeUtil#getDouble(Object) */ public double getDouble() throws InvalidAgtypeException { return AgtypeUtil.getDouble(obj); } /** * Returns the value stored in Agtype as a boolean. Attempts to perform an implicit conversion * of types stored as non-boolean values. * * @return value stored in Agtype as a long. * @throws InvalidAgtypeException Throws if the stored Agtype value cannot be represented as an * boolean. * @see AgtypeUtil#getBoolean(Object) */ public boolean getBoolean() throws InvalidAgtypeException { return AgtypeUtil.getBoolean(obj); } /** * Returns the value stored in Agtype as an AgtypeList. * * @return value stored in Agtype as an AgtypeList. * @throws InvalidAgtypeException Throws if the stored Agtype value cannot be represented as an * AgtypeList. * @see AgtypeUtil#getList(Object) */ public AgtypeList getList() throws InvalidAgtypeException { return AgtypeUtil.getList(obj); } /** * Returns the value stored in Agtype as an AgtypeMap. * * @return value stored in Agtype as an AgtypeMap. * @throws InvalidAgtypeException Throws if the stored Agtype value cannot be represented as an * AgtypeMap. * @see AgtypeUtil#getMap(Object) */ public AgtypeMap getMap() throws InvalidAgtypeException { return AgtypeUtil.getMap(obj); } /** * Returns whether stored is Agtype Null. * * @return true if the value is Agtype null, false otherwise. */ public boolean isNull() { return obj == null; } /** * Returns a string representation of this Agtype object. * * @return a string representation of this Agtype object. */ @Override public String toString() { if (obj != null && obj instanceof AgtypeAnnotation) { return obj + (type != null ? "::" + ((AgtypeAnnotation) obj).getAnnotation() : ""); } return (obj != null ? obj.toString() : "null") + (type != null ? "::" + type : ""); } } age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/apache/age/jdbc/base/AgtypeFactory.java000066400000000000000000000043251454606241200313720ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.age.jdbc.base; import org.apache.age.jdbc.base.type.AgtypeList; import org.apache.age.jdbc.base.type.AgtypeMap; /** * Factory for creating Agtype objects. * * @see Agtype */ public class AgtypeFactory { /** * Creates an Agtype object. * * @param obj Object to store in the an Agtype Object. * @return new Agtype Object * @throws InvalidAgtypeException Thrown if the object passed is not a {@link Agtype valid * Agtype} */ public static Agtype create(Object obj) throws InvalidAgtypeException { if (obj == null) { return new Agtype(null); } else if (obj instanceof Integer) { return new Agtype(((Integer) obj).longValue()); } else if (obj instanceof Long) { return new Agtype(obj); } else if (obj instanceof String) { return new Agtype(obj); } else if (obj instanceof Boolean) { return new Agtype(obj); } else if (obj instanceof Double) { return new Agtype(obj); } else if (obj instanceof AgtypeList) { return new Agtype(obj); } else if (obj instanceof AgtypeMap) { return new Agtype(obj); } else { String s = String .format("%s is not a valid Agtype value", obj.getClass().getSimpleName()); throw new InvalidAgtypeException(s); } } } age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/apache/age/jdbc/base/AgtypeListener.java000066400000000000000000000154151454606241200315520ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.age.jdbc.base; import java.util.Stack; import org.apache.age.jdbc.AgtypeUnrecognizedList; import org.apache.age.jdbc.AgtypeUnrecognizedMap; import org.apache.age.jdbc.antlr4.AgtypeBaseListener; import org.apache.age.jdbc.antlr4.AgtypeParser.AgTypeContext; import org.apache.age.jdbc.antlr4.AgtypeParser.ArrayValueContext; import org.apache.age.jdbc.antlr4.AgtypeParser.FalseBooleanContext; import org.apache.age.jdbc.antlr4.AgtypeParser.FloatValueContext; import org.apache.age.jdbc.antlr4.AgtypeParser.IntegerValueContext; import org.apache.age.jdbc.antlr4.AgtypeParser.NullValueContext; import org.apache.age.jdbc.antlr4.AgtypeParser.ObjectValueContext; import org.apache.age.jdbc.antlr4.AgtypeParser.PairContext; import org.apache.age.jdbc.antlr4.AgtypeParser.StringValueContext; import org.apache.age.jdbc.antlr4.AgtypeParser.TrueBooleanContext; import org.apache.age.jdbc.antlr4.AgtypeParser.TypeAnnotationContext; import org.apache.age.jdbc.base.type.AgtypeList; import org.apache.age.jdbc.base.type.AgtypeListImpl; import org.apache.age.jdbc.base.type.AgtypeMap; import org.apache.age.jdbc.base.type.AgtypeMapImpl; import org.apache.age.jdbc.base.type.AgtypeObject; import org.apache.age.jdbc.base.type.UnrecognizedObject; import org.apache.commons.text.StringEscapeUtils; public class AgtypeListener extends AgtypeBaseListener { // Will have List or Map private final Stack objectStack = new Stack<>(); private final Stack annotationMap = new Stack<>(); Object rootObject; Object lastValue; boolean lastValueUndefined = true; private long objectStackLength = 0; private void pushObjectStack(AgtypeObject o) { objectStackLength++; this.objectStack.push(o); } private AgtypeObject popObjectStack() { objectStackLength--; return objectStack.pop(); } private AgtypeObject peekObjectStack() { return objectStack.peek(); } private void mergeObjectIfTargetIsArray() { if (objectStackLength >= 2) { AgtypeObject firstObject = popObjectStack(); AgtypeObject secondObject = popObjectStack(); if (secondObject instanceof AgtypeListImpl) { ((AgtypeListImpl) secondObject).add(firstObject); pushObjectStack(secondObject); } else { pushObjectStack(secondObject); pushObjectStack(firstObject); } } } private void mergeObjectIfTargetIsMap(String key, Object value) { AgtypeMapImpl agtypeMap = (AgtypeMapImpl) peekObjectStack(); agtypeMap.put(key, value); } private void addObjectValue() { if (objectStackLength != 0) { AgtypeObject currentObject = peekObjectStack(); if (currentObject instanceof AgtypeListImpl) { ((AgtypeListImpl) currentObject).add(this.lastValue); lastValueUndefined = true; return; } } lastValueUndefined = false; } @Override public void exitStringValue(StringValueContext ctx) { this.lastValue = identString(ctx.STRING().getText()); addObjectValue(); } @Override public void exitIntegerValue(IntegerValueContext ctx) { this.lastValue = Long.parseLong(ctx.INTEGER().getText()); addObjectValue(); } @Override public void exitFloatValue(FloatValueContext ctx) { this.lastValue = Double.parseDouble(ctx.floatLiteral().getText()); addObjectValue(); } @Override public void exitTrueBoolean(TrueBooleanContext ctx) { this.lastValue = true; addObjectValue(); } @Override public void exitFalseBoolean(FalseBooleanContext ctx) { this.lastValue = false; addObjectValue(); } @Override public void exitNullValue(NullValueContext ctx) { this.lastValue = null; addObjectValue(); } @Override public void enterObjectValue(ObjectValueContext ctx) { AgtypeMap agtypeMap = new AgtypeUnrecognizedMap(); pushObjectStack(agtypeMap); } @Override public void exitObjectValue(ObjectValueContext ctx) { mergeObjectIfTargetIsArray(); } @Override public void enterArrayValue(ArrayValueContext ctx) { AgtypeList agtypeList = new AgtypeUnrecognizedList(); pushObjectStack(agtypeList); } @Override public void exitArrayValue(ArrayValueContext ctx) { mergeObjectIfTargetIsArray(); } @Override public void exitPair(PairContext ctx) { String name = identString(ctx.STRING().getText()); if (!lastValueUndefined) { mergeObjectIfTargetIsMap(name, this.lastValue); lastValueUndefined = true; } else { Object lastValue = popObjectStack(); Object currentHeaderObject = peekObjectStack(); if (currentHeaderObject instanceof AgtypeListImpl) { ((AgtypeListImpl) currentHeaderObject).add(lastValue); } else { mergeObjectIfTargetIsMap(name, lastValue); } } } @Override public void exitAgType(AgTypeContext ctx) { if (objectStack.empty()) { this.rootObject = this.lastValue; return; } this.rootObject = popObjectStack(); } @Override public void enterTypeAnnotation(TypeAnnotationContext ctx) { annotationMap.push(ctx.IDENT().getText()); } @Override public void exitTypeAnnotation(TypeAnnotationContext ctx) { String annotation = annotationMap.pop(); Object currentObject = peekObjectStack(); if (currentObject instanceof UnrecognizedObject) { ((UnrecognizedObject) currentObject).setAnnotation(annotation); } } private String identString(String quotesString) { return StringEscapeUtils.unescapeJson(quotesString.substring(1, quotesString.length() - 1)); } public Object getOutput() { return this.rootObject; } } age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/apache/age/jdbc/base/AgtypeUtil.java000066400000000000000000000335501454606241200307020ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.age.jdbc.base; import java.util.StringJoiner; import org.antlr.v4.runtime.BaseErrorListener; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.RecognitionException; import org.antlr.v4.runtime.Recognizer; import org.antlr.v4.runtime.TokenStream; import org.antlr.v4.runtime.tree.ParseTreeWalker; import org.apache.age.jdbc.antlr4.AgtypeLexer; import org.apache.age.jdbc.antlr4.AgtypeParser; import org.apache.age.jdbc.base.type.AgtypeList; import org.apache.age.jdbc.base.type.AgtypeListBuilder; import org.apache.age.jdbc.base.type.AgtypeMap; import org.apache.age.jdbc.base.type.AgtypeMapBuilder; import org.apache.commons.text.StringEscapeUtils; /** * A set of utility methods to assist in using Agtype. */ public class AgtypeUtil { private static BaseErrorListener baseErrorListener = new BaseErrorListener() { @Override public void syntaxError(Recognizer recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) { throw new IllegalStateException( "Failed to parse at line " + line + " due to " + msg, e); } }; /** * Do not instantiate AgtypeUtil, all methods are static. */ private AgtypeUtil() { } /** * Returns to object as a double, if it is a valid double, otherwise will throw an exception. *

* Rules for converting from other types *
    *
  • Agtype null - Converted to 0.0
  • *
  • true - Converted to 1.0
  • *
  • false - Converted to 0.0
  • *
  • Integer/Long - Converted to it's double value. Follows * Oracle's * specifications for widening primitives.
  • *
  • Strings - Parsed to its double value, if it cannot be converted to a double, a * NumberFormatException will be thrown
  • *
  • {@link AgtypeList}/{@link AgtypeMap} - Throws InvalidAgtypeException
  • *
  • All other values will throw an InvalidAgtypeException
  • *
* * @param obj Object to parse * @return Object as a double * @throws NumberFormatException if the given object is a number or a string that cannot be * parsed to a double * @throws InvalidAgtypeException if the given object is not a number or string and cannot be * converted to a double */ public static double getDouble(Object obj) throws NumberFormatException, InvalidAgtypeException { if (obj == null) { return 0.0; } else if (obj instanceof Double) { return (Double) obj; } else if (obj instanceof Boolean) { return (Boolean) obj ? 1.0 : 0.0; } else if (obj instanceof String) { return Double.parseDouble((String) obj); } else if (obj instanceof Long) { return ((Long) obj).doubleValue(); } throw new InvalidAgtypeException("Not a double: " + obj); } /** * Returns the object as an integer, if it is a valid integer, otherwise will throw an * exception. *

* Rules for converting from other types: *
    *
  • null - Converted to 0
  • *
  • true - Converted to 1
  • *
  • false - Converted to 0
  • *
  • Double - Converted to it's integer value. Follows * Oracle's * specifications for widening primitives.
  • *
  • Strings - Parsed to its integer value, an Exception will be thrown if its not an * integer
  • *
  • All other values will throw an InvalidAgtypeException
  • *
* * @param obj Object to parse * @return Object as an int * @throws NumberFormatException if the given object is a number or string that cannot be * parsed into an Integer * @throws InvalidAgtypeException if the given object is not a number of a string */ public static int getInt(Object obj) throws NumberFormatException, InvalidAgtypeException { long l; try { l = getLong(obj); if (l >= Integer.MIN_VALUE && l <= Integer.MAX_VALUE) { return (int) l; } } catch (InvalidAgtypeException ex) { throw new InvalidAgtypeException("Not a int: " + obj, ex); } throw new NumberFormatException("Bad value for type int: " + l); } /** * Returns to object as a long, if it is a valid long, otherwise will throw an exception. *

* Rules for converting from other types: *
    *
  • null - Converted to 0
  • *
  • true - Converted to 1
  • *
  • false - Converted to 0
  • *
  • Double - Converted to it's integer value. Follows * Oracle's * specifications for widening primitives.
  • *
  • Strings - Parsed to its integer value, an Exception will be thrown if its not an * integer
  • *
  • All other values will throw an InvalidAgtypeException
  • *
* * @param obj Object to parse * @return Object as an long * @throws InvalidAgtypeException if the object cannot be converted to a Long * @throws NumberFormatException if the given object is a number or string that cannot be * parsed into a double */ public static long getLong(Object obj) throws NumberFormatException, InvalidAgtypeException { if (obj == null) { return 0; } else if (obj instanceof Long) { return (Long) obj; } else if (obj instanceof String) { return (long) Double.parseDouble((String) obj); } else if (obj instanceof Boolean) { return (boolean) obj ? 1 : 0; } else if (obj instanceof Double) { return ((Double) obj).longValue(); } throw new InvalidAgtypeException("Not a long: " + obj); } /** * Returns to object as a string, if it is a valid string, otherwise will throw an exception. *

* Rules for converting from other types: *
    *
  • null - Returns null
  • *
  • Long - Returns a String representation of the Long
  • *
  • Double - Returns a String representation of the double
  • *
  • Boolean - Returns a String representation of the boolean
  • *
  • All other values will throw an InvalidAgtypeException
  • *
* * @param obj Object to parse to a String * @return Object as an string * @throws InvalidAgtypeException if the object cannot be converted to a String */ public static String getString(Object obj) throws InvalidAgtypeException { if (obj == null) { return null; } else if (obj instanceof String) { return (String) obj; } else if (obj instanceof Long) { return Long.toString((long) obj); } else if (obj instanceof Double) { return Double.toString((double) obj); } else if (obj instanceof Boolean) { return Boolean.toString((boolean) obj); } throw new InvalidAgtypeException("Not a string: " + obj); } /** * Returns to object as a boolean, if it is a valid boolean, otherwise will throw an exception. *

* Data Conversions from other types *
    *
  • null - Returns false
  • *
  • Long - Returns false is the value is 0, returns true otherwise.
  • *
  • Double - Returns false is the value is 0.0, returns true otherwise.
  • *
  • String - Returns false if the length of the String is 0, returns true otherwise.
  • *
  • * {@link AgtypeList} - Returns false if the size of the list is 0, returns true otherwise. *
  • *
  • * {@link AgtypeMap} - Returns false if the size of the map is 0, returns true otherwise. *
  • *
  • All other values will throw an InvalidAgtypeException
  • *
* * @param obj Object to parse * @return Object as an boolean * @throws InvalidAgtypeException if the object cannot be converted to a boolean */ public static boolean getBoolean(Object obj) throws InvalidAgtypeException { if (obj == null) { return false; } else if (obj instanceof Boolean) { return (Boolean) obj; } else if (obj instanceof String) { return ((String) obj).length() > 0; } else if (obj instanceof Long) { return (Long) obj != 0L; } else if (obj instanceof Double) { return (Double) obj != 0.0; } else if (obj instanceof AgtypeList) { return ((AgtypeList) obj).size() > 0; } else if (obj instanceof AgtypeMap) { return ((AgtypeMap) obj).size() > 0; } throw new InvalidAgtypeException("Not a valid Agtype: " + obj); } /** * Returns to object as an {@link AgtypeList}. If this obj is not an AgtypeList, an * InvalidAgtypeException will be thrown. * * @param obj Object to parse and return as an AgtypeList * @return Object as an agTypeArray * @throws InvalidAgtypeException if the object cannot be converted to an AgtypeList */ public static AgtypeList getList(Object obj) throws InvalidAgtypeException { if (obj == null) { return null; } else if (obj instanceof AgtypeList) { return (AgtypeList) obj; } throw new InvalidAgtypeException("Not an AgtypeList: " + obj); } /** * Returns to object as an {@link AgtypeMap}. If this obj is not an AgtypeMap, an * InvalidAgtypeException will be thrown. * * @param obj Object to parse and return as an AgtypeMap * @return Object as an AgtypeMap * @throws InvalidAgtypeException if the object cannot be converted to an AgtypeMap */ public static AgtypeMap getMap(Object obj) throws InvalidAgtypeException { if (obj == null) { return null; } else if (obj instanceof AgtypeMap) { return (AgtypeMap) obj; } throw new InvalidAgtypeException("Not an AgtypeMap: " + obj); } /** * Creates a new AgtypeMapBuilder. * * @return Newly created AgtypeMapBuilder */ public static AgtypeMapBuilder createMapBuilder() { return new AgtypeMapBuilder(); } /** * Creates a new AgtypeListBuilder. * * @return Newly created AgtypeListBuilder */ public static AgtypeListBuilder createListBuilder() { return new AgtypeListBuilder(); } /** * Converts a serialized Agtype value into it's non-serialized value. * * @param strAgtype Serialized Agtype value to be parsed. * @return Parsed object that can be stored in {@link Agtype} * @throws IllegalStateException if the value cannot be parsed into an Agtype. */ public static Object parse(String strAgtype) throws IllegalStateException { CharStream charStream = CharStreams.fromString(strAgtype); AgtypeLexer lexer = new AgtypeLexer(charStream); TokenStream tokens = new CommonTokenStream(lexer); AgtypeParser parser = new AgtypeParser(tokens); lexer.removeErrorListeners(); lexer.addErrorListener(baseErrorListener); parser.removeErrorListeners(); parser.addErrorListener(baseErrorListener); AgtypeListener agtypeListener = new AgtypeListener(); ParseTreeWalker walker = new ParseTreeWalker(); walker.walk(agtypeListener, parser.agType()); return agtypeListener.getOutput(); } /** * Converts the passed object into its serialized Agtype form. * * @param obj Agtype object to convert into its serialized form * @return Serialized Agtype object */ static String serializeAgtype(Object obj) { if (obj == null) { return "null"; } else if (obj instanceof String) { return '"' + StringEscapeUtils.escapeJson((String) obj) + '"'; } else if (obj instanceof AgtypeMap) { StringJoiner join = new StringJoiner(",", "{", "}"); ((AgtypeMap) obj).entrySet() .stream() .map((entry) -> new StringJoiner(":") .add(serializeAgtype(entry.getKey())) .add(serializeAgtype(entry.getValue())) ) .forEach(join::merge); return join.toString(); } else if (obj instanceof AgtypeList) { StringJoiner join = new StringJoiner(",", "[", "]"); ((AgtypeList) obj) .stream() .map(AgtypeUtil::serializeAgtype) .forEach(join::add); return join.toString(); } return String.valueOf(obj); } } InvalidAgtypeException.java000066400000000000000000000022221454606241200331430ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/apache/age/jdbc/base/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.age.jdbc.base; /** * Runtime exception for when there is an invalid use of Agtype. */ public class InvalidAgtypeException extends RuntimeException { public InvalidAgtypeException(String message) { super(message); } public InvalidAgtypeException(String message, Throwable cause) { super(message, cause); } } age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/apache/age/jdbc/base/type/000077500000000000000000000000001454606241200267235ustar00rootroot00000000000000AgtypeAnnotation.java000066400000000000000000000016221454606241200327740ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/apache/age/jdbc/base/type/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.age.jdbc.base.type; public interface AgtypeAnnotation { String getAnnotation(); } age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/apache/age/jdbc/base/type/AgtypeList.java000066400000000000000000000163511454606241200316610ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.age.jdbc.base.type; import java.util.Iterator; import java.util.Spliterator; import java.util.function.Consumer; import java.util.stream.Stream; import org.apache.age.jdbc.base.Agtype; import org.apache.age.jdbc.base.AgtypeUtil; import org.apache.age.jdbc.base.InvalidAgtypeException; /** * Non-mutable list of Agtype values. * * @see AgtypeListBuilder * @see Agtype */ public interface AgtypeList extends AgtypeObject { /** * Performs the given action for each element of the Iterable until all elements have been * processed or the action throws an exception. Unless otherwise specified by the implementing * class, actions are performed in the order of iteration (if an iteration order is specified). * Exceptions thrown by the action are relayed to the caller. * * @param action The action to be performed for each element * @throws NullPointerException - if the specified action is null */ void forEach(Consumer action); /** * Returns the String value at the specified position in this list. Throws an * InvalidAgtypeException if the element is not a String. * * @param index index of the element to return * @return the String value at the specified position in this list * @throws InvalidAgtypeException if the value cannot be converted to a String * @throws IndexOutOfBoundsException if the index is out of range (index {@literal <} 0 || index * {@literal >}= size()) * @see AgtypeUtil#getString(Object) */ String getString(int index) throws InvalidAgtypeException; /** * Returns the int value at the specified position in this list. Throws an * InvalidAgtypeException if the element is not an int. * * @param index index of the element to return * @return the int value at the specified position in this list * @throws InvalidAgtypeException if the value cannot be converted to an int * @throws IndexOutOfBoundsException if the index is out of range (index {@literal <} 0 || index * {@literal >}= size()) * @see AgtypeUtil#getInt(Object) */ int getInt(int index) throws InvalidAgtypeException; /** * Returns the long value at the specified position in this list. Throws an * InvalidAgtypeException if the element is not a long. * * @param index index of the element to return * @return the long value at the specified position in this list * @throws InvalidAgtypeException if the value cannot be converted to a long * @throws IndexOutOfBoundsException if the index is out of range (index {@literal <} 0 || index * {@literal >}= size()) * @see AgtypeUtil#getLong(Object) */ long getLong(int index) throws InvalidAgtypeException; /** * Returns the double value at the specified position in this list. Throws an * InvalidAgtypeException if the element is not a double. * * @param index index of the element to return * @return the double value at the specified position in this list * @throws InvalidAgtypeException if the value cannot be converted to a double * @throws IndexOutOfBoundsException if the index is out of range (index {@literal <} 0 || index * {@literal >}= size()) * @see AgtypeUtil#getDouble(Object) */ double getDouble(int index) throws InvalidAgtypeException; /** * Returns the double value at the specified position in this list. Throws an * InvalidAgtypeException if the element is not a double. * * @param index index of the element to return * @return the boolean value at the specified position in this list * @throws InvalidAgtypeException if the value cannot be converted to a boolean * @throws IndexOutOfBoundsException if the index is out of range (index {@literal <} 0 || index * {@literal >}= size()) * @see AgtypeUtil#getBoolean(Object) */ boolean getBoolean(int index) throws InvalidAgtypeException; /** * Returns the AgtypeList at the specified position in this list. Throws an * InvalidAgtypeException if the element is not an AgtypeList. * * @param index index of the element to return * @return the AgtypeList at the specified position in this list * @throws InvalidAgtypeException if the value stored at the index is not an AgtypeList * @throws IndexOutOfBoundsException if the index is out of range (index {@literal <} 0 || index * {@literal >}= size()) * @see AgtypeUtil#getList(Object) */ AgtypeList getList(int index) throws InvalidAgtypeException; /** * Returns the AgtypeMap at the specified position in this list. Throws an * InvalidAgtypeException if the element is not an AgtypeMap. * * @param index index of the element to return * @return the AgtypeList at the specified position in this list * @throws InvalidAgtypeException if the value stored at the index is not an AgtypeMap * @throws IndexOutOfBoundsException if the index is out of range (index {@literal <} 0 || index * {@literal >}= size()) * @see AgtypeUtil#getMap(Object) */ AgtypeMap getMap(int index) throws InvalidAgtypeException; /** * Returns the object at the specified position in this list. * * @param index index of the element to return * @return the object at the specified position in this list * @throws IndexOutOfBoundsException if the index is out of range (index {@literal <} 0 || index * {@literal >}= size()) */ Object getObject(int index); /** * Returns an iterator over the elements. * * @return Iterator over the elements */ Iterator iterator(); /** * Returns the size of this AgtypeList. * * @return the size of this AgtypeList */ int size(); /** * Creates a Spliterator over the elements described by this Iterable. * * @return Spliterator over the elements described by this Iterable */ Spliterator spliterator(); /** * Returns a sequential Stream with this collection as its source. * * @return a sequential Stream with this collection as its source. */ Stream stream(); } AgtypeListBuilder.java000066400000000000000000000114031454606241200331020ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/apache/age/jdbc/base/type/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.age.jdbc.base.type; import org.apache.age.jdbc.base.Agtype; /** * A builder for creating an AgtypeList object. This class initializes a AgtypeList and provides * methods to add values return the resulting AgtypeList. The methods in this class can be chained * to add multiple values to the AgtypeList. * * @see AgtypeList */ public class AgtypeListBuilder { private final AgtypeListImpl agtypeList; /** * Initializes an empty List BuilderAgtypeList. */ public AgtypeListBuilder() { agtypeList = new AgtypeListImpl(); } /** * Appends the Agtype value to the AglistBuilder. * * @param value the Agtype value to be added to the end of the list * @return a reference to this object. */ public AgtypeListBuilder add(Agtype value) { agtypeList.add(value.getObject()); return this; } /** * Appends the int to the AglistBuilder. * * @param value the int value to be added to the end of the list * @return a reference to this object. */ public AgtypeListBuilder add(int value) { agtypeList.add((long) value); return this; } /** * Appends the String to the AglistBuilder. * * @param value the String value to be added to the end of the list * @return a reference to this object. */ public AgtypeListBuilder add(String value) { agtypeList.add(value); return this; } /** * Appends the double to the AglistBuilder. * * @param value the double value to be added to the end of the list * @return a reference to this object. */ public AgtypeListBuilder add(double value) { agtypeList.add(value); return this; } /** * Appends the long to the AglistBuilder. * * @param value the long value to be added to the end of the list * @return a reference to this object. */ public AgtypeListBuilder add(long value) { agtypeList.add(value); return this; } /** * Appends the boolean to the AglistBuilder. * * @param value the boolean value to be added to the end of the list * @return a reference to this object. */ public AgtypeListBuilder add(boolean value) { agtypeList.add(value); return this; } /** * Appends the AgtypeList to the AglistBuilder. * * @param value the AgtypeList value to be added to the end of the list * @return a reference to this object. */ public AgtypeListBuilder add(AgtypeList value) { agtypeList.add(value); return this; } /** * Appends the AgtypeMap to the AglistBuilder. * * @param value the AgtypeMap value to be added to the end of the list * @return a reference to this object. */ public AgtypeListBuilder add(AgtypeMap value) { agtypeList.add(value); return this; } /** * Appends the AglistBuilder to the AglistBuilder. * * @param value the AgtypeListBuilder value to be added to the end of the list * @return a reference to this object. */ public AgtypeListBuilder add(AgtypeListBuilder value) { agtypeList.add(value.build()); return this; } /** * Appends the AgmapBuilder to the AglistBuilder. * * @param value the AgtypeMapBuilder value to be added to the end of the list * @return a reference to this object. */ public AgtypeListBuilder add(AgtypeMapBuilder value) { agtypeList.add(value.build()); return this; } /** * Appends the null to the AglistBuilder. * * @return a reference to this object. */ public AgtypeListBuilder addNull() { agtypeList.add(null); return this; } /** * Returns the AgtypeList object associated with this object builder. * * @return the AgtypeList object that is being built */ public AgtypeList build() { return agtypeList; } } age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/apache/age/jdbc/base/type/AgtypeListImpl.java000066400000000000000000000043151454606241200325000ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.age.jdbc.base.type; import java.util.ArrayList; import java.util.stream.Stream; import org.apache.age.jdbc.base.AgtypeUtil; import org.apache.age.jdbc.base.InvalidAgtypeException; public class AgtypeListImpl extends ArrayList implements Cloneable, AgtypeList { @Override public String getString(int index) throws InvalidAgtypeException { return AgtypeUtil.getString(get(index)); } @Override public int getInt(int index) throws InvalidAgtypeException { return AgtypeUtil.getInt(get(index)); } @Override public long getLong(int index) throws InvalidAgtypeException { return AgtypeUtil.getLong(get(index)); } @Override public double getDouble(int index) throws InvalidAgtypeException { return AgtypeUtil.getDouble(get(index)); } @Override public boolean getBoolean(int index) throws InvalidAgtypeException { return AgtypeUtil.getBoolean(get(index)); } @Override public AgtypeList getList(int index) throws InvalidAgtypeException { return AgtypeUtil.getList(get(index)); } @Override public AgtypeMap getMap(int index) throws InvalidAgtypeException { return AgtypeUtil.getMap(get(index)); } @Override public Stream stream() { return super.stream(); } @Override public Object getObject(int index) { return get(index); } } age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/apache/age/jdbc/base/type/AgtypeMap.java000066400000000000000000000205011454606241200314530ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.age.jdbc.base.type; import java.util.Map; import java.util.Set; import org.apache.age.jdbc.base.AgtypeUtil; import org.apache.age.jdbc.base.InvalidAgtypeException; /** * Non-Mutable Map of Agtype values. This implementation provides partial implementation of map * operations, and permits null values, but not null keys. This class makes no guarantees as to the * order of the map; in particular, it does not guarantee that the order will remain constant over * time. * * @see AgtypeMapBuilder */ public interface AgtypeMap extends AgtypeObject { /** * Returns a set of keys. * * @return a set of keys */ Set keySet(); /** * Returns true if the given key is contained. * * @param key the given key * @return true if the given key is contained */ boolean containsKey(String key); /** * Returns the String value to which the specified key is mapped, or null if this AgtypeMap * contains no mapping for the key. * * @param key the key whose associated value is to be returned * @return the string value stored at the key * @throws InvalidAgtypeException Throws if the value cannot be converted to a String * @see AgtypeUtil#getString(Object) */ String getString(String key) throws InvalidAgtypeException; /** * Returns the String value to which the specified key is mapped, or defaultValue if this * AgtypeMap contains no mapping for the key. * * @param key the key whose associated value is to be returned * @param defaultValue the default mapping of the key * @return the string value stored at the key * @throws InvalidAgtypeException Throws if the value cannot be converted to a String * @see AgtypeUtil#getString(Object) */ String getString(String key, String defaultValue) throws InvalidAgtypeException; /** * Returns the int value to which the specified key is mapped, or 0 if this AgtypeMap contains * no mapping for the key. * * @param key the key whose associated value is to be returned * @return the int value stored at the key * @throws InvalidAgtypeException Throws if the value cannot be converted to an int * @see AgtypeUtil#getInt(Object) */ int getInt(String key) throws InvalidAgtypeException; /** * Returns the int value to which the specified key is mapped, or defaultValue if this AgtypeMap * contains no mapping for the key. * * @param key the key whose associated value is to be returned * @param defaultValue the default mapping of the key * @return the int value stored at the key * @throws InvalidAgtypeException Throws if the value cannot be converted to an int * @see AgtypeUtil#getInt(Object) */ int getInt(String key, int defaultValue) throws InvalidAgtypeException; /** * Returns the long value to which the specified key is mapped, or 0 if this AgtypeMap contains * no mapping for the key. * * @param key the key whose associated value is to be returned * @return the long value stored at the key * @throws InvalidAgtypeException Throws if the value cannot be converted to a long * @see AgtypeUtil#getLong(Object) */ long getLong(String key) throws InvalidAgtypeException; /** * Returns the long value to which the specified key is mapped, or defaultValue if this * AgtypeMap contains no mapping for the key. * * @param key the key whose associated value is to be returned * @param defaultValue the default mapping of the key * @return the long value stored at the key * @throws InvalidAgtypeException Throws if the value cannot be converted to a long * @see AgtypeUtil#getLong(Object) */ long getLong(String key, long defaultValue) throws InvalidAgtypeException; /** * Returns the double value to which the specified key is mapped, or 0.0 if this AgtypeMap * contains no mapping for the key. * * @param key the key whose associated value is to be returned * @return the double value stored at the key * @throws InvalidAgtypeException Throws if the value cannot be converted to a double * @see AgtypeUtil#getDouble(Object) */ double getDouble(String key) throws InvalidAgtypeException; /** * Returns the double value to which the specified key is mapped, or defaultValue if this * AgtypeMap contains no mapping for the key. * * @param key the key whose associated value is to be returned * @param defaultValue the default mapping of the key * @return the double value stored at the key * @throws InvalidAgtypeException Throws if the value cannot be converted to a double * @see AgtypeUtil#getDouble(Object) */ double getDouble(String key, double defaultValue) throws InvalidAgtypeException; /** * Returns the boolean value to which the specified key is mapped, or false if this AgtypeMap * contains no mapping for the key. * * @param key the key whose associated value is to be returned * @return the boolean value stored at the key * @throws InvalidAgtypeException Throws if the value cannot be converted to a boolean * @see AgtypeUtil#getBoolean(Object) */ boolean getBoolean(String key) throws InvalidAgtypeException; /** * Returns the boolean value to which the specified key is mapped, or defaultValue if this * AgtypeMap contains no mapping for the key. * * @param key the key whose associated value is to be returned * @param defaultValue the default mapping of the key * @return the boolean value stored at the key * @throws InvalidAgtypeException Throws if the value cannot be converted to a boolean * @see AgtypeUtil#getBoolean(Object) */ boolean getBoolean(String key, boolean defaultValue) throws InvalidAgtypeException; /** * Returns the AgtypeList value to which the specified key is mapped, or null if this AgtypeMap * contains no mapping for the key. * * @param key the key whose associated value is to be returned * @return the AgtypeList value stored at the key * @throws InvalidAgtypeException Throws if the value is not an AgtypeList * @see AgtypeUtil#getList(Object) */ AgtypeList getList(String key) throws InvalidAgtypeException; /** * Returns the AgtypeMap value to which the specified key is mapped, or null if this AgtypeMap * contains no mapping for the key. * * @param key the key whose associated value is to be returned * @return the AgtypeMap value stored at the key * @throws InvalidAgtypeException Throws if the value is not a AgtypeMap * @see AgtypeUtil#getMap(Object) */ AgtypeMap getMap(String key) throws InvalidAgtypeException; /** * Returns the value stored at the key. * * @param key the key whose associated value is to be returned * @return the object value stored at the key */ Object getObject(String key); /** * Returns true if the value stored at the key is null. * * @param key the given key * @return true if the value stored at the key is null */ boolean isNull(String key); /** * Returns the size of this AgtypeMap. * * @return the size of this AgtypeMap */ int size(); /** * Returns a Set view of the mappings contained in this map. * * @return a set view of the mappings contained in this map */ Set> entrySet(); } AgtypeMapBuilder.java000066400000000000000000000151511454606241200327100ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/apache/age/jdbc/base/type/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.age.jdbc.base.type; import org.apache.age.jdbc.base.Agtype; /** * A builder for creating an AgtypeMap object. This class initializes a AgtypeMap object, provides * methods to add name/value pairs and return the resulting object. The methods in this class can be * chained to add multiple name/value pairs to the AgtypeMap. * * @see AgtypeMap * @see Agtype */ public class AgtypeMapBuilder { private final AgtypeMapImpl agtypeMap; /** * Initializes an empty AgtypeMap. */ public AgtypeMapBuilder() { agtypeMap = new AgtypeMapImpl(); } /** * Adds the name/int pair to the Agtype object associated with this object builder. If the * object contains a mapping for the specified name, this method replaces the old value with * int. * * @param name name in the name/value pair * @param value the value is the object associated with this builder * @return this object builder */ public AgtypeMapBuilder add(String name, int value) { agtypeMap.put(name, (long) value); return this; } /** * Adds the name/long pair to the Agtype object associated with this object builder. If the * object contains a mapping for the specified name, this method replaces the old value with * long. * * @param name name in the name/value pair * @param value the value is the object associated with this builder * @return this object builder */ public AgtypeMapBuilder add(String name, long value) { agtypeMap.put(name, value); return this; } /** * Adds the name/double pair to the Agtype object associated with this object builder. If the * object contains a mapping for the specified name, this method replaces the old value with * double. * * @param name name in the name/value pair * @param value the value is the object associated with this builder * @return this object builder */ public AgtypeMapBuilder add(String name, double value) { agtypeMap.put(name, value); return this; } /** * Adds the name/String pair to the Agtype object associated with this object builder. If the * object contains a mapping for the specified name, this method replaces the old value with * String. * * @param name name in the name/value pair * @param value the value is the object associated with this builder * @return this object builder */ public AgtypeMapBuilder add(String name, String value) { agtypeMap.put(name, value); return this; } /** * Adds the name/boolean pair to the Agtype object associated with this object builder. If the * object contains a mapping for the specified name, this method replaces the old value with * boolean. * * @param name name in the name/value pair * @param value the value is the object associated with this builder * @return this object builder */ public AgtypeMapBuilder add(String name, boolean value) { agtypeMap.put(name, value); return this; } /** * Adds the name/AgtypeMap pair to the Agtype object associated with this object builder. If the * object contains a mapping for the specified name, this method replaces the old value with * AgtypeMap. * * @param name name in the name/value pair * @param value the value is the object associated with this builder * @return this object builder */ public AgtypeMapBuilder add(String name, AgtypeMap value) { agtypeMap.put(name, value); return this; } /** * Adds the name/AgtypeList pair to the Agtype object associated with this object builder. If * the object contains a mapping for the specified name, this method replaces the old value with * AgtypeList. * * @param name name in the name/value pair * @param value the value is the object associated with this builder * @return this object builder */ public AgtypeMapBuilder add(String name, AgtypeList value) { agtypeMap.put(name, value); return this; } /** * Adds the name/AgmapBuilder pair to the Agtype object associated with this object builder. If * the object contains a mapping for the specified name, this method replaces the old value with * AgtypeMap. * * @param name name in the name/value pair * @param value the value is the object associated with this builder * @return this object builder */ public AgtypeMapBuilder add(String name, AgtypeMapBuilder value) { agtypeMap.put(name, value.build()); return this; } /** * Adds the name/AglistBuilder pair to the Agtype object associated with this object builder. If * the object contains a mapping for the specified name, this method replaces the old value with * AgtypeList. * * @param name name in the name/value pair * @param value the value is the object associated with this builder * @return this object builder */ public AgtypeMapBuilder add(String name, AgtypeListBuilder value) { agtypeMap.put(name, value.build()); return this; } /** * Adds null to the Agtype object associated with this object builder at the given name. If the * object contains a mapping for the specified name, this method replaces the old value with * AgtypeList. * * @param name Name where null is to be placed * @return this object builder */ public AgtypeMapBuilder addNull(String name) { agtypeMap.put(name, null); return this; } /** * Returns the AgtypeMap object associated with this object builder. * * @return the AgtypeMap object that is being built */ public AgtypeMap build() { return agtypeMap; } } age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/apache/age/jdbc/base/type/AgtypeMapImpl.java000066400000000000000000000065311454606241200323040ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.age.jdbc.base.type; import java.util.HashMap; import java.util.Set; import org.apache.age.jdbc.base.AgtypeUtil; import org.apache.age.jdbc.base.InvalidAgtypeException; public class AgtypeMapImpl extends HashMap implements Cloneable, AgtypeMap { @Override public Set> entrySet() { return super.entrySet(); } @Override public Set keySet() { return super.keySet(); } @Override public boolean containsKey(String key) { return super.containsKey(key); } @Override public String getString(String key) throws InvalidAgtypeException { return AgtypeUtil.getString(get(key)); } @Override public String getString(String key, String defaultValue) throws InvalidAgtypeException { return containsKey(key) ? getString(key) : defaultValue; } @Override public int getInt(String key) throws InvalidAgtypeException { return AgtypeUtil.getInt(get(key)); } @Override public int getInt(String key, int defaultValue) throws InvalidAgtypeException { return containsKey(key) ? getInt(key) : defaultValue; } @Override public long getLong(String key) throws InvalidAgtypeException { return AgtypeUtil.getLong(get(key)); } @Override public long getLong(String key, long defaultValue) throws InvalidAgtypeException { return containsKey(key) ? getLong(key) : defaultValue; } @Override public double getDouble(String key) throws InvalidAgtypeException { return AgtypeUtil.getDouble(get(key)); } @Override public double getDouble(String key, double defaultValue) throws InvalidAgtypeException { return containsKey(key) ? getDouble(key) : defaultValue; } @Override public boolean getBoolean(String key) throws InvalidAgtypeException { return AgtypeUtil.getBoolean(get(key)); } @Override public boolean getBoolean(String key, boolean defaultValue) throws InvalidAgtypeException { return containsKey(key) ? getBoolean(key) : defaultValue; } @Override public AgtypeList getList(String key) throws InvalidAgtypeException { return AgtypeUtil.getList(get(key)); } @Override public AgtypeMap getMap(String key) throws InvalidAgtypeException { return AgtypeUtil.getMap(get(key)); } @Override public Object getObject(String key) { return get(key); } @Override public boolean isNull(String key) { return get(key) == null; } } age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/apache/age/jdbc/base/type/AgtypeObject.java000066400000000000000000000015621454606241200321520ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.age.jdbc.base.type; public interface AgtypeObject { } UnrecognizedObject.java000066400000000000000000000016431454606241200332760ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/main/java/org/apache/age/jdbc/base/type/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.age.jdbc.base.type; public interface UnrecognizedObject { void setAnnotation(String annotation); } age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/test/000077500000000000000000000000001454606241200204745ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/test/java/000077500000000000000000000000001454606241200214155ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/test/java/org/000077500000000000000000000000001454606241200222045ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/test/java/org/apache/000077500000000000000000000000001454606241200234255ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/test/java/org/apache/age/000077500000000000000000000000001454606241200241615ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/000077500000000000000000000000001454606241200250635ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/AgtypeFactoryTest.java000066400000000000000000000117271454606241200313570ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.age.jdbc; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.age.jdbc.base.AgtypeFactory; import org.apache.age.jdbc.base.AgtypeUtil; import org.apache.age.jdbc.base.InvalidAgtypeException; import org.apache.age.jdbc.base.type.AgtypeList; import org.apache.age.jdbc.base.type.AgtypeMap; import org.junit.jupiter.api.Test; class AgtypeFactoryTest { @Test void agTypeInvalidTypes() { //float assertThrows(InvalidAgtypeException.class, () -> AgtypeFactory.create(Float.parseFloat("3.14"))); //char assertThrows(InvalidAgtypeException.class, () -> AgtypeFactory.create('c')); //Object assertThrows(InvalidAgtypeException.class, () -> AgtypeFactory.create(new Object())); //StringBuilder assertThrows(InvalidAgtypeException.class, () -> AgtypeFactory.create(new StringBuilder().append("Hello"))); } @Test void agTypeFactoryGetInteger() throws InvalidAgtypeException { assertTrue(AgtypeFactory.create(1).getObject() instanceof Long); assertEquals(Integer.MAX_VALUE, AgtypeFactory.create(2147483647).getInt()); assertEquals(Integer.MIN_VALUE, AgtypeFactory.create(-2147483648).getInt()); assertThrows(NumberFormatException.class, () -> AgtypeFactory.create(Long.MAX_VALUE).getInt()); } @Test void agTypeFactoryGetLong() throws InvalidAgtypeException { assertTrue(AgtypeFactory.create(1L).getObject() instanceof Long); assertEquals(Long.MAX_VALUE, AgtypeFactory.create(9223372036854775807L).getLong()); assertEquals(Long.MIN_VALUE, AgtypeFactory.create(-9223372036854775808L).getLong()); assertEquals(-0L, AgtypeFactory.create(-0).getLong()); } @Test void agTypeFactoryDouble() throws InvalidAgtypeException { assertTrue(AgtypeFactory.create(1.0).getObject() instanceof Double); assertEquals(Math.PI, AgtypeFactory.create(Math.PI).getDouble()); assertEquals(Double.POSITIVE_INFINITY, AgtypeFactory.create(Double.POSITIVE_INFINITY).getDouble()); assertEquals(Double.NEGATIVE_INFINITY, AgtypeFactory.create(Double.NEGATIVE_INFINITY).getDouble()); assertEquals(Double.NaN, AgtypeFactory.create(Double.NaN).getDouble()); } @Test void agTypeFactoryString() throws InvalidAgtypeException { assertTrue(AgtypeFactory.create("Hello World").getObject() instanceof String); assertEquals("Hello World", AgtypeFactory.create("Hello World").getString()); assertEquals("\n", AgtypeFactory.create("\n").getString()); assertEquals("\t", AgtypeFactory.create("\t").getString()); assertEquals("\b", AgtypeFactory.create("\b").getString()); assertEquals("\f", AgtypeFactory.create("\f").getString()); assertEquals("\r", AgtypeFactory.create("\r").getString()); assertEquals("\\", AgtypeFactory.create("\\").getString()); assertEquals("/", AgtypeFactory.create("/").getString()); assertEquals("\t", AgtypeFactory.create("\t").getString()); //GREEK CAPITAL LETTER OMEGA, U+03A9 assertEquals("Ω", AgtypeFactory.create("\u03A9").getString()); //MATHEMATICAL ITALIC CAPITAL OMICRON, U+1D6F0 assertEquals("\uD835\uDEF0", AgtypeFactory.create("\ud835\uDEF0").getString()); } @Test void agTypeFactoryBoolean() throws InvalidAgtypeException { assertTrue(AgtypeFactory.create(true).getObject() instanceof Boolean); assertTrue(AgtypeFactory.create(true).getBoolean()); assertFalse(AgtypeFactory.create(false).getBoolean()); } @Test void agTypeFactoryMap() throws InvalidAgtypeException { AgtypeMap map = AgtypeUtil.createMapBuilder().add("key","value").build(); assertTrue(AgtypeFactory.create(map).getObject() instanceof AgtypeMap); assertEquals("value", AgtypeFactory.create(map).getMap().getString("key")); } @Test void agTypeFactoryList() throws InvalidAgtypeException { AgtypeList list = AgtypeUtil.createListBuilder().add("value").build(); assertTrue(AgtypeFactory.create(list).getObject() instanceof AgtypeList); assertEquals("value", AgtypeFactory.create(list).getList().getString(0)); } } age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/AgtypeStatementTest.java000066400000000000000000000171751454606241200317170ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.age.jdbc; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.apache.age.jdbc.base.Agtype; import org.apache.age.jdbc.base.AgtypeFactory; import org.apache.age.jdbc.base.InvalidAgtypeException; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.postgresql.jdbc.PgConnection; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.TestInstance.Lifecycle; @TestInstance(Lifecycle.PER_CLASS) /** * Tests the different combinations that are possible when running Statements and Prepared * Statements with the AgType and shows how the JDBC needs to be setup to convert values to the * AgType. */ class AgtypeStatementTest { BaseDockerizedTest baseDockerizedTest = new BaseDockerizedTest(); @BeforeAll public void setup() throws Exception { baseDockerizedTest.beforeAll(); } @AfterAll void tearDown() throws Exception { baseDockerizedTest.afterAll(); } /** * When a statement is run first, "ag_catalog"."agtype" needs to be added to the connection. * * @throws SQLException Throws an SQL Exception if the driver is unable to parse Agtype. */ @Test void agTypeInStatementAsString() throws SQLException, InvalidAgtypeException { baseDockerizedTest.getConnection().addDataType("\"ag_catalog\".\"agtype\"", Agtype.class); //Step 1: Run a statement runStatementString(baseDockerizedTest.getConnection()); } /** * When a Prepared statement is run first and the agtype is a parameter, agtype needs to be * added to the connection. * * @throws SQLException Throws an SQL Exception if the driver is unable to parse Agtype. */ @Test void asTypeInPreparedStatementAsParameter() throws SQLException, InvalidAgtypeException { baseDockerizedTest.getConnection().addDataType("agtype", Agtype.class); //Step 1: Run a Prepared Statement runPreparedStatementParameter(baseDockerizedTest.getConnection()); } /** * When a Prepared statement is run first and the agtype is not a parameter, but in the string, * "ag_catalog"."agtype" needs to be added to the connection. * * @throws SQLException Throws an SQL Exception if the driver is unable to parse Agtype. */ @Test void asTypeInPreparedStatementAsString() throws SQLException, InvalidAgtypeException { baseDockerizedTest.getConnection().addDataType("\"ag_catalog\".\"agtype\"", Agtype.class); runPreparedStatementString(baseDockerizedTest.getConnection()); } /** * When a Prepared statement is run and agType is both a string and a parameter, agtype needs to * be added to the connection, but "ag_catalog."agtype" does not need to be added. * * @throws SQLException Throws an SQL Exception if the driver is unable to parse Agtype. */ @Test void agTypeInPreparedStatementAsStringAndParam() throws SQLException, InvalidAgtypeException { baseDockerizedTest.getConnection().addDataType("agtype", Agtype.class); //Step 1 Run a Prepared Statement when AgType is a String and a Parameter. runPreparedStatementParameterAndString(baseDockerizedTest.getConnection()); } /** * When a statement is run first, "ag_catalog"."agType" needs to be added to the connection, no * need to add agtype for running a Prepared Statement afterward. * * @throws SQLException Throws an SQL Exception if the driver is unable to parse Agtype. */ @Test void asTypeInStatementThenPreparedStatement() throws SQLException, InvalidAgtypeException { baseDockerizedTest.getConnection().addDataType("\"ag_catalog\".\"agtype\"", Agtype.class); //Step 1: Run a statement runStatementString(baseDockerizedTest.getConnection()); //Step 2: Run a Prepared Statement, where AgType is a parameter runPreparedStatementParameter(baseDockerizedTest.getConnection()); } /** * When a Prepared statement is run first, agtype needs to be added to the connection, no need * to add "ag_catalog"."agType" for running a Statement afterward. * * @throws SQLException Throws an SQL Exception if the driver is unable to parse Agtype. */ @Test void asTypeInPreparedStatementThenStatement() throws SQLException, InvalidAgtypeException { //Add the agtype Data Type. baseDockerizedTest.getConnection().addDataType("agtype", Agtype.class); //Step 1: Run a Prepared Statement runPreparedStatementParameter(baseDockerizedTest.getConnection()); //Step 2: Run a Statement runStatementString(baseDockerizedTest.getConnection()); } /* * Helper Methods */ private void runStatementString(PgConnection conn) throws SQLException, InvalidAgtypeException { ResultSet rs; Statement stmt = conn.createStatement(); stmt.execute("SELECT '1'::ag_catalog.agtype"); rs = stmt.getResultSet(); assertTrue(rs.next()); Agtype returnedAgtype = (Agtype) rs.getObject(1); assertEquals(1, returnedAgtype.getInt()); } private void runPreparedStatementParameter(PgConnection conn) throws SQLException, InvalidAgtypeException { PreparedStatement ps = conn.prepareStatement("SELECT ?"); ps.setObject(1, AgtypeFactory.create(1)); ps.executeQuery(); ResultSet rs = ps.getResultSet(); assertTrue(rs.next()); Agtype returnedAgtype = (Agtype) rs.getObject(1); assertEquals(1, returnedAgtype.getInt()); } private void runPreparedStatementParameterAndString(PgConnection conn) throws SQLException, InvalidAgtypeException { PreparedStatement ps = conn .prepareStatement("SELECT ?, '1'::ag_catalog.agtype"); Agtype agType = new Agtype(); agType.setValue("1"); ps.setObject(1, agType); ps.executeQuery(); ResultSet rs = ps.getResultSet(); assertTrue(rs.next()); Agtype returnedAgtype = (Agtype) rs.getObject(1); assertEquals(1, returnedAgtype.getInt()); returnedAgtype = (Agtype) rs.getObject(2); assertEquals(1, returnedAgtype.getInt()); } private void runPreparedStatementString(PgConnection conn) throws SQLException, InvalidAgtypeException { PreparedStatement ps = conn .prepareStatement("SELECT ?, '1'::ag_catalog.agtype"); ps.setInt(1, 1); ps.executeQuery(); ResultSet rs = ps.getResultSet(); assertTrue(rs.next()); Agtype returnedAgtype = (Agtype) rs.getObject(2); assertEquals(1, returnedAgtype.getInt()); } } age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/AgtypeTest.java000066400000000000000000000373741454606241200300350ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.age.jdbc; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.apache.age.jdbc.base.Agtype; import org.apache.age.jdbc.base.AgtypeFactory; import org.apache.age.jdbc.base.AgtypeUtil; import org.apache.age.jdbc.base.InvalidAgtypeException; import org.apache.age.jdbc.base.type.AgtypeList; import org.apache.age.jdbc.base.type.AgtypeMap; import org.junit.jupiter.api.Test; class AgtypeTest extends BaseDockerizedTest { private Agtype getAgType(Object fieldValue) throws SQLException { Statement stmt = getConnection().createStatement(); String str = "SELECT '" + AgtypeFactory.create(fieldValue).getValue() + "'::agtype;"; ResultSet rs = stmt.executeQuery(str); assertTrue(rs.next()); return (Agtype) rs.getObject(1); } /* Cypher Return Statement should be SQL Null, not Agtype Null */ @Test void agTypeCypherReturnNull() throws SQLException { Statement stmt = getConnection().createStatement(); String str = "SELECT i from cypher('cypher', $$RETURN null$$) as t(i agtype);"; ResultSet rs = stmt.executeQuery(str); assertTrue(rs.next()); assertNull(rs.getObject(1)); } /* Get String Unit Tests */ @Test void agTypeGetString() throws SQLException, InvalidAgtypeException { assertEquals("Hello World", getAgType("Hello World").getString()); assertEquals("\n", getAgType("\n").getString()); assertEquals("\b", getAgType("\b").getString()); assertEquals("\f", getAgType("\f").getString()); assertEquals("\r", getAgType("\r").getString()); assertEquals("\\", getAgType("\\").getString()); assertEquals("/", getAgType("/").getString()); assertEquals("\t", getAgType("\t").getString()); //GREEK CAPITAL LETTER OMEGA, U+03A9 assertEquals("Ω", getAgType("\u03A9").getString()); //MATHEMATICAL ITALIC CAPITAL OMICRON, U+1D6F0 assertEquals("\uD835\uDEF0", getAgType("\ud835\uDEF0").getString()); } @Test void agTypeGetStringConvertAgtypeNull() throws SQLException, InvalidAgtypeException { assertNull(getAgType(null).getString()); } @Test void agTypeGetStringConvertInt() throws SQLException, InvalidAgtypeException { assertEquals("1", getAgType(1).getString()); } @Test void agTypeGetStringConvertBoolean() throws SQLException, InvalidAgtypeException { assertEquals("true", getAgType(true).getString()); assertEquals("false", getAgType(false).getString()); } @Test void agTypeGetStringConvertDouble() throws SQLException, InvalidAgtypeException { assertEquals("3.141592653589793", getAgType(3.141592653589793).getString()); assertEquals("Infinity", getAgType(Double.POSITIVE_INFINITY).getString()); assertEquals("-Infinity", getAgType(Double.NEGATIVE_INFINITY).getString()); } @Test void agTypeGetStringConvertMap() { assertThrows(InvalidAgtypeException.class, () -> getAgType(AgtypeUtil.createMapBuilder().build()).getString()); } @Test void agTypeGetStringConvertList() { assertThrows(InvalidAgtypeException.class, () -> getAgType(AgtypeUtil.createListBuilder().build()).getString()); } /* Get Integer Unit Tests */ @Test void agTypeGetInteger() throws SQLException, InvalidAgtypeException { //Agtype is made in SELECT clause assertEquals(Integer.MAX_VALUE, getAgType(2147483647).getInt()); assertEquals(Integer.MIN_VALUE, getAgType(-2147483648).getInt()); assertThrows(NumberFormatException.class, () -> getAgType(2147483648L).getInt()); assertThrows(NumberFormatException.class, () -> getAgType(-2147483649L).getInt()); } @Test void agTypeGetIntConvertAgtypeNull() throws SQLException, InvalidAgtypeException { assertEquals(0, getAgType(null).getInt()); } @Test void agTypeGetIntConvertString() throws SQLException, InvalidAgtypeException { assertThrows(NumberFormatException.class, () -> getAgType("Not A Number").getInt()); assertEquals(1, getAgType("1").getInt()); assertEquals(1, getAgType("1.1").getInt()); } @Test void agTypeGetIntConvertDouble() throws SQLException, InvalidAgtypeException { assertEquals(1, getAgType(1.1).getInt()); } @Test void agTypeGetIntConvertBoolean() throws SQLException, InvalidAgtypeException { assertEquals(1, getAgType(true).getInt()); assertEquals(0, getAgType(false).getInt()); } @Test void agTypeGetIntConvertMap() { assertThrows(InvalidAgtypeException.class, () -> getAgType(AgtypeUtil.createMapBuilder().build()).getInt()); } @Test void agTypeGetIntConvertList() { assertThrows(InvalidAgtypeException.class, () -> getAgType(AgtypeUtil.createListBuilder().build()).getInt()); } /* Get Long Unit Tests */ @Test void agTypeGetLong() throws SQLException, InvalidAgtypeException { assertEquals(Long.MAX_VALUE, getAgType(Long.MAX_VALUE).getLong()); assertEquals(Long.MIN_VALUE, getAgType(Long.MIN_VALUE).getLong()); assertEquals(-0L, getAgType(-0).getLong()); } @Test void agTypeGetLongConvertAgtypeNull() throws SQLException, InvalidAgtypeException { assertEquals(0L, getAgType(null).getLong()); } @Test void agTypeGetLongConvertString() throws SQLException, InvalidAgtypeException { assertThrows(NumberFormatException.class, () -> getAgType("Not a Number").getLong()); assertEquals(1L, getAgType("1").getLong()); } @Test void agTypeGetLongConvertDouble() throws SQLException, InvalidAgtypeException { assertEquals(3L, getAgType(Math.PI).getLong()); assertEquals(1L, getAgType(1.6).getLong()); } @Test void agTypeGetLongConvertMap() { assertThrows(InvalidAgtypeException.class, () -> getAgType(AgtypeUtil.createMapBuilder().build()).getLong()); } @Test void agTypeGetLongConvertList() { assertThrows(InvalidAgtypeException.class, () -> getAgType(AgtypeUtil.createListBuilder().build()).getLong()); } /* Get Double Unit Tests */ @Test void agTypeGetDouble() throws SQLException, InvalidAgtypeException { assertEquals(Math.PI, getAgType(Math.PI).getDouble()); assertEquals(-Math.PI, getAgType(-Math.PI).getDouble()); assertEquals(Double.POSITIVE_INFINITY, getAgType(Double.POSITIVE_INFINITY).getDouble()); assertEquals(Double.NEGATIVE_INFINITY, getAgType(Double.NEGATIVE_INFINITY).getDouble()); assertEquals(Double.NaN, getAgType(Double.NaN).getDouble()); assertEquals(Double.MIN_NORMAL, getAgType(Double.MIN_NORMAL).getDouble()); assertEquals(Double.MIN_VALUE, getAgType(Double.MIN_VALUE).getDouble()); assertEquals(Double.MAX_VALUE, getAgType(Double.MAX_VALUE).getDouble()); } @Test void agTypeGetDoubleConvertAgtypeNull() throws SQLException, InvalidAgtypeException { assertEquals(0L, getAgType(null).getDouble()); } @Test void agTypeGetDoubleConvertString() throws SQLException, InvalidAgtypeException { assertThrows(NumberFormatException.class, () -> getAgType("Not a Number").getDouble()); assertEquals(1.0, getAgType("1").getDouble()); assertEquals(1.1, getAgType("1.1").getDouble()); assertEquals(1e9, getAgType("1e9").getDouble()); } @Test void agTypeGetDoubleConvertLong() throws SQLException, InvalidAgtypeException { assertEquals(1.0, getAgType(1).getDouble()); } @Test void agTypeGetDoubleConvertBoolean() throws SQLException, InvalidAgtypeException { assertEquals(1.0, getAgType(true).getDouble()); assertEquals(0.0, getAgType(false).getDouble()); } @Test void agTypeGetDoubleConvertMap() { assertThrows(InvalidAgtypeException.class, () -> getAgType(AgtypeUtil.createMapBuilder().build()).getDouble()); } @Test void agTypeGetDoubleConvertList() { assertThrows(InvalidAgtypeException.class, () -> getAgType(AgtypeUtil.createListBuilder().build()).getDouble()); } /* Get Boolean Unit Tests */ @Test void agTypeGetBoolean() throws SQLException, InvalidAgtypeException { assertTrue(getAgType(true).getBoolean()); assertFalse(getAgType(false).getBoolean()); } @Test void agTypeGetBooleanConvertAgtypeNull() throws SQLException, InvalidAgtypeException { assertFalse(getAgType(null).getBoolean()); } @Test void agTypeGetBooleanConvertString() throws SQLException, InvalidAgtypeException { assertTrue(getAgType("Non-Empty String").getBoolean()); assertFalse(getAgType("").getBoolean()); } @Test void agTypeGetBooleanConvertLong() throws SQLException, InvalidAgtypeException { assertFalse(getAgType(0).getBoolean()); assertTrue(getAgType(1).getBoolean()); } @Test void agTypeGetBooleanConvertDouble() throws SQLException, InvalidAgtypeException { assertTrue(getAgType(Math.PI).getBoolean()); assertFalse(getAgType(0.0).getBoolean()); } @Test void agTypeGetBooleanConvertMap() throws SQLException, InvalidAgtypeException { assertFalse(getAgType(AgtypeUtil.createMapBuilder().build()).getBoolean()); assertTrue( getAgType(AgtypeUtil.createMapBuilder().add("key", "hello").build()).getBoolean()); } @Test void agTypeGetBooleanConvertList() throws SQLException, InvalidAgtypeException { assertFalse(getAgType(AgtypeUtil.createListBuilder().build()).getBoolean()); assertTrue(getAgType(AgtypeUtil.createListBuilder().add("Hello").build()).getBoolean()); } /* Get Map Unit Tests */ @Test void agTypeGetMap() throws SQLException, InvalidAgtypeException { AgtypeMap agtypeMap = AgtypeUtil.createMapBuilder() .add("i", 1) .add("f", 3.14) .add("s", "Hello World") .add("m", AgtypeUtil.createMapBuilder().add("i", 1)) .add("l", AgtypeUtil.createListBuilder().add(1).add(2).add(3)) .add("bt", true) .add("bf", false) .addNull("z") .add("pinf", Double.POSITIVE_INFINITY) .add("ninf", Double.NEGATIVE_INFINITY) .add("n", Double.NaN) .build(); AgtypeMap m = getAgType(agtypeMap).getMap(); assertEquals(1L, m.getLong("i")); assertEquals(3.14, m.getDouble("f")); assertEquals("Hello World", m.getString("s")); assertTrue(m.getBoolean("bt")); assertFalse(m.getBoolean("bf")); assertTrue(m.isNull("z")); assertEquals(Double.POSITIVE_INFINITY, m.getDouble("pinf")); assertTrue(Double.isNaN(m.getDouble("n"))); assertEquals(Double.NEGATIVE_INFINITY, m.getDouble("ninf")); AgtypeMap subMap = m.getMap("m"); assertEquals(1, subMap.getInt("i")); AgtypeList list = m.getList("l"); for (int i = 0; i < list.size(); i++) { assertEquals(i + 1, list.getLong(i)); } } @Test void agTypeGetMapConvertAgtypeNull() { assertDoesNotThrow(() -> getAgType(null).getMap()); } @Test void agTypeGetMapConvertString() { assertThrows(InvalidAgtypeException.class, () -> getAgType("Non-Empty String").getMap()); assertThrows(InvalidAgtypeException.class, () -> getAgType("").getMap()); } @Test void agTypeGetMapConvertLong() { assertThrows(InvalidAgtypeException.class, () -> getAgType(0L).getMap()); assertThrows(InvalidAgtypeException.class, () -> getAgType(1L).getMap()); } @Test void agTypeGetMapConvertDouble() { assertThrows(InvalidAgtypeException.class, () -> getAgType(Math.PI).getMap()); assertThrows(InvalidAgtypeException.class, () -> getAgType(0.0).getMap()); } @Test void agTypeGetMapConvertList() { assertThrows(InvalidAgtypeException.class, () -> getAgType(AgtypeUtil.createListBuilder().build()).getMap()); assertThrows(InvalidAgtypeException.class, () -> getAgType(AgtypeUtil.createListBuilder().add("Hello").build()).getMap()); } /* Get List Unit Tests */ @Test void agTypeGetList() throws SQLException, InvalidAgtypeException { AgtypeList agArray = AgtypeUtil.createListBuilder() .add(1) .add("Hello World") .add(3.14) .add(AgtypeUtil.createMapBuilder().add("key0", 1)) .add(AgtypeUtil.createListBuilder().add(1).add(2)) .add(true) .add(false) .addNull() .add(Double.NaN) .add(Double.POSITIVE_INFINITY) .add(Double.NEGATIVE_INFINITY) .build(); AgtypeList l = getAgType(agArray).getList(); assertEquals("Hello World", l.getString(1)); assertEquals(1, l.getInt(0)); assertEquals(1L, l.getLong(0)); assertEquals(3.14, l.getDouble(2)); assertEquals(Double.NaN, l.getDouble(8)); assertEquals(Double.POSITIVE_INFINITY, l.getDouble(9)); assertEquals(Double.NEGATIVE_INFINITY, l.getDouble(10)); assertTrue(l.getBoolean(5)); assertFalse(l.getBoolean(6)); assertNull(l.getObject(7)); assertEquals(1L, l.getList(4).getLong(0)); assertEquals(2L, l.getList(4).getLong(1)); assertEquals(1L, l.getMap(3).getLong("key0")); } @Test void agTypeGetListConvertAgtypeNull() throws SQLException { assertNull(getAgType(null).getList()); } @Test void agTypeGetListConvertString() { assertThrows(InvalidAgtypeException.class, () -> getAgType("Non-Empty String").getList()); assertThrows(InvalidAgtypeException.class, () -> getAgType("").getList()); } @Test void agTypeGetListConvertLong() { assertThrows(InvalidAgtypeException.class, () -> getAgType(0).getList()); assertThrows(InvalidAgtypeException.class, () -> getAgType(1).getList()); } @Test void agTypeGetListConvertDouble() { assertThrows(InvalidAgtypeException.class, () -> getAgType(Math.PI).getList()); assertThrows(InvalidAgtypeException.class, () -> getAgType(0.0).getList()); } @Test void agTypeGetListConvertMap() { assertThrows(InvalidAgtypeException.class, () -> getAgType(AgtypeUtil.createMapBuilder().build()).getList()); assertThrows(InvalidAgtypeException.class, () -> getAgType(AgtypeUtil.createMapBuilder().add("key", "hello").build()).getList()); } } age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/AgtypeUtilTest.java000066400000000000000000000115361454606241200306630ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.age.jdbc; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.age.jdbc.base.AgtypeUtil; import org.apache.age.jdbc.base.type.AgtypeList; import org.apache.age.jdbc.base.type.AgtypeMap; import org.apache.commons.text.StringEscapeUtils; import org.junit.jupiter.api.Test; class AgtypeUtilTest { @Test void parseEmptyString() { assertEquals("", AgtypeUtil.parse("\"\"")); } @Test void parseString() { assertEquals("Hello World", AgtypeUtil.parse("\"Hello World\"")); } @Test void parseEscapedSequences() { assertEquals("\"", AgtypeUtil.parse("\"\\\"\"")); assertEquals("\\", AgtypeUtil.parse("\"\\\\\"")); assertEquals("/", AgtypeUtil.parse("\"\\/\"")); assertEquals("\b", AgtypeUtil.parse("\"\\b\"")); assertEquals("\f", AgtypeUtil.parse("\"\\f\"")); assertEquals("\n", AgtypeUtil.parse("\"\\n\"")); assertEquals("\r", AgtypeUtil.parse("\"\\r\"")); assertEquals("\t", AgtypeUtil.parse("\"\\t\"")); } @Test void parseEscapedUnicodeSequences() { //GREEK CAPITAL LETTER OMEGA, U+03A9 assertEquals("Ω", StringEscapeUtils.unescapeJson((String)AgtypeUtil.parse("\"\\u03A9\""))); //MATHEMATICAL ITALIC CAPITAL OMICRON, U+1D6F0 assertEquals("\uD835\uDEF0", StringEscapeUtils.unescapeJson((String)AgtypeUtil.parse("\"\\ud835\\uDEF0\""))); } @Test void parseInvalidStrings() { assertThrows(IllegalStateException.class, () -> AgtypeUtil.parse("\"Hello World")); assertThrows(IllegalStateException.class, () -> AgtypeUtil.parse("Hello World\"")); assertThrows(IllegalStateException.class, () -> AgtypeUtil.parse("\\a")); assertThrows(IllegalStateException.class, () -> AgtypeUtil.parse("\\u03A")); } @Test void parseInteger() { assertEquals(0x7FFFFFFFFFFFFFFFL, AgtypeUtil.parse("9223372036854775807")); assertEquals(0x8000000000000000L, AgtypeUtil.parse("-9223372036854775808")); assertEquals(-0L, AgtypeUtil.parse("-0")); } @Test void parseInvalidIntegerValues() { assertThrows(IllegalStateException.class, () -> AgtypeUtil.parse("01")); assertThrows(IllegalStateException.class, () -> AgtypeUtil.parse("00")); assertThrows(NumberFormatException.class, () -> AgtypeUtil.parse("9223372036854775808")); assertThrows(NumberFormatException.class, () -> AgtypeUtil.parse("-9223372036854775809")); } @Test void parseDouble() { assertEquals(Math.PI, AgtypeUtil.parse(Double.toString(Math.PI))); assertEquals(-Math.PI, AgtypeUtil.parse(Double.toString(-Math.PI))); assertEquals(1e09, AgtypeUtil.parse("1e09")); assertEquals(3.14e-1, AgtypeUtil.parse("3.14e-1")); assertEquals(Double.POSITIVE_INFINITY, AgtypeUtil.parse("Infinity")); assertEquals(Double.NEGATIVE_INFINITY, AgtypeUtil.parse("-Infinity")); assertEquals(Double.NaN, AgtypeUtil.parse("NaN")); } @Test void parseInvalidFloatValues() { assertThrows(IllegalStateException.class, () -> AgtypeUtil.parse("1.")); assertThrows(IllegalStateException.class, () -> AgtypeUtil.parse(".1")); } @Test void parseFalseBoolean() { assertFalse((Boolean) AgtypeUtil.parse("false")); } @Test void parseTrueBoolean() { assertTrue((Boolean) AgtypeUtil.parse("true")); } @Test void parseNull() { assertNull(AgtypeUtil.parse("null")); } @Test void parseEmptyArray() { AgtypeList agArray = (AgtypeList) AgtypeUtil.parse("[]"); assertEquals(0, agArray.size()); } @Test void parseArray() { AgtypeList agArray = (AgtypeList) AgtypeUtil.parse("[1]"); assertEquals(1, agArray.size()); } @Test void parseObject() { AgtypeMap agObject = (AgtypeMap) AgtypeUtil.parse("{\"i\":1}"); assertEquals(1, agObject.size()); } @Test void parseEmptyObject() { AgtypeMap agObject = (AgtypeMap) AgtypeUtil.parse("{}"); assertEquals(0, agObject.size()); } } age-PG16-v1.5.0-rc0/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/BaseDockerizedTest.java000066400000000000000000000056231454606241200314520ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.age.jdbc; import java.sql.DriverManager; import java.sql.Statement; import org.apache.age.jdbc.base.Agtype; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.TestInstance.Lifecycle; import org.postgresql.jdbc.PgConnection; import org.testcontainers.containers.GenericContainer; import org.testcontainers.utility.DockerImageName; @TestInstance(Lifecycle.PER_CLASS) public class BaseDockerizedTest { private PgConnection connection; private GenericContainer agensGraphContainer; public PgConnection getConnection() { return connection; } @AfterAll public void afterAll() throws Exception { connection.close(); agensGraphContainer.stop(); } @BeforeAll public void beforeAll() throws Exception { String CORRECT_DB_PASSWORDS = "postgres"; String imageTag = System.getenv("TAG"); if (imageTag == null) { imageTag = "latest"; } agensGraphContainer = new GenericContainer<>(DockerImageName .parse("apache/age:" + imageTag)) .withEnv("POSTGRES_PASSWORD", CORRECT_DB_PASSWORDS) .withExposedPorts(5432); agensGraphContainer.start(); int mappedPort = agensGraphContainer.getMappedPort(5432); String jdbcUrl = String .format("jdbc:postgresql://%s:%d/%s", "localhost", mappedPort, "postgres"); try { this.connection = DriverManager.getConnection(jdbcUrl, "postgres", CORRECT_DB_PASSWORDS) .unwrap(PgConnection.class); this.connection.addDataType("agtype", Agtype.class); } catch (Exception e) { System.out.println(e); } try (Statement statement = connection.createStatement()) { statement.execute("CREATE EXTENSION IF NOT EXISTS age;"); statement.execute("LOAD 'age'"); statement.execute("SET search_path = ag_catalog, \"$user\", public;"); statement.execute("SELECT create_graph('cypher');"); } } } age-PG16-v1.5.0-rc0/drivers/jdbc/settings.gradle.kts000066400000000000000000000015241454606241200220020ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ rootProject.name = "age-jdbc" include("lib") age-PG16-v1.5.0-rc0/drivers/nodejs/000077500000000000000000000000001454606241200165405ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/nodejs/.eslintrc.js000066400000000000000000000021331454606241200207760ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ module.exports = { env: { es2021: true, node: true }, extends: [ 'standard', 'plugin:jest/recommended' ], parser: '@typescript-eslint/parser', parserOptions: { ecmaVersion: 12, sourceType: 'module' }, plugins: [ '@typescript-eslint', 'jest' ], rules: {} } age-PG16-v1.5.0-rc0/drivers/nodejs/.gitignore000066400000000000000000000016251454606241200205340ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. /node_modules /yarn.lock /package-lock.json src/antlr4/*.tokens src/antlr4/*.interp # it will be create on "prepare" step. /dist age-PG16-v1.5.0-rc0/drivers/nodejs/README.md000066400000000000000000000021701454606241200200170ustar00rootroot00000000000000nodejs-pg-age =========== Example ----- Initialize on make connection ```typescript import {types, Client, QueryResultRow} from "pg"; import {setAGETypes} from "../src"; const config = { user: 'postgres', host: '127.0.0.1', database: 'postgres', password: 'postgres', port: 25432, } const client = new Client(config); await client.connect(); await setAGETypes(client, types); await client.query(`SELECT create_graph('age-first-time');`); ``` Query ```typescript await client?.query(` SELECT * from cypher('age-first-time', $$ CREATE (a:Part {part_num: '123'}), (b:Part {part_num: '345'}), (c:Part {part_num: '456'}), (d:Part {part_num: '789'}) $$) as (a agtype); `) const results: QueryResultRow = await client?.query(` SELECT * from cypher('age-first-time', $$ MATCH (a) RETURN a $$) as (a agtype); `)! ``` ### For more information about [Apache AGE](https://age.apache.org/) * Apache Age : https://age.apache.org/ * GitHub : https://github.com/apache/age * Document : https://age.apache.org/age-manual/master/index.html age-PG16-v1.5.0-rc0/drivers/nodejs/jest.config.js000066400000000000000000000015531454606241200213130ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ module.exports = { preset: 'ts-jest', testEnvironment: 'node' } age-PG16-v1.5.0-rc0/drivers/nodejs/package.json000066400000000000000000000034031454606241200210260ustar00rootroot00000000000000{ "//": [ "Licensed to the Apache Software Foundation (ASF) under one", "or more contributor license agreements. See the NOTICE file", "distributed with this work for additional information", "regarding copyright ownership. The ASF licenses this file", "to you under the Apache License, Version 2.0 (the", "\"License\"); you may not use this file except in compliance", "with the License. You may obtain a copy of the License at", "", "http://www.apache.org/licenses/LICENSE-2.0", "", "Unless required by applicable law or agreed to in writing,", "software distributed under the License is distributed on an", "\"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY", "KIND, either express or implied. See the License for the", "specific language governing permissions and limitations", "under the License." ], "name": "pg-age", "version": "1.0.0-alpha", "main": "dist/index.js", "scripts": { "antlr4ts": "antlr4ts src/antlr4/Agtype.g4", "test": "jest --verbose ./test", "build": "rm -rf dist && tsc", "prepare": "npm run build" }, "keywords": [], "author": "Alex Kwak ", "dependencies": { "antlr4ts": "^0.5.0-alpha.4", "pg": ">=6.0.0" }, "devDependencies": { "@types/jest": "^26.0.20", "@types/pg": "^7.14.10", "@typescript-eslint/eslint-plugin": "^4.22.1", "@typescript-eslint/parser": "^4.22.1", "antlr4ts-cli": "^0.5.0-alpha.4", "eslint": "^7.25.0", "eslint-config-standard": "^16.0.2", "eslint-plugin-import": "^2.22.1", "eslint-plugin-jest": "^24.3.6", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^4.3.1", "jest": "^26.6.3", "ts-jest": "^26.5.1", "typescript": "^4.1.5" } } age-PG16-v1.5.0-rc0/drivers/nodejs/src/000077500000000000000000000000001454606241200173275ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/nodejs/src/antlr4/000077500000000000000000000000001454606241200205335ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/nodejs/src/antlr4/Agtype.g4000066400000000000000000000035511454606241200222240ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ grammar Agtype; agType : agValue EOF ; agValue : value typeAnnotation? ; value : STRING #StringValue | INTEGER #IntegerValue | floatLiteral #FloatValue | 'true' #TrueBoolean | 'false' #FalseBoolean | 'null' #NullValue | obj #ObjectValue | array #ArrayValue ; obj : '{' pair (',' pair)* '}' | '{' '}' ; pair : STRING ':' agValue ; array : '[' agValue (',' agValue)* ']' | '[' ']' ; typeAnnotation : '::' IDENT ; IDENT : [A-Z_a-z][$0-9A-Z_a-z]* ; STRING : '"' (ESC | SAFECODEPOINT)* '"' ; fragment ESC : '\\' (["\\/bfnrt] | UNICODE) ; fragment UNICODE : 'u' HEX HEX HEX HEX ; fragment HEX : [0-9a-fA-F] ; fragment SAFECODEPOINT : ~ ["\\\u0000-\u001F] ; INTEGER : '-'? INT ; fragment INT : '0' | [1-9] [0-9]* ; floatLiteral : RegularFloat | ExponentFloat | '-'? 'Infinity' | 'NaN' ; RegularFloat : '-'? INT DECIMAL ; ExponentFloat : '-'? INT DECIMAL? SCIENTIFIC ; fragment DECIMAL : '.' [0-9]+ ; fragment SCIENTIFIC : [Ee][+-]? [0-9]+ ; WS : [ \t\n\r] + -> skip ; age-PG16-v1.5.0-rc0/drivers/nodejs/src/antlr4/AgtypeLexer.ts000066400000000000000000000257671454606241200233550ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* eslint-disable */ // Generated from src/antlr4/Agtype.g4 by ANTLR 4.9.0-SNAPSHOT import { ATN } from 'antlr4ts/atn/ATN' import { ATNDeserializer } from 'antlr4ts/atn/ATNDeserializer' import { CharStream } from 'antlr4ts/CharStream' import { Lexer } from 'antlr4ts/Lexer' import { LexerATNSimulator } from 'antlr4ts/atn/LexerATNSimulator' import { Vocabulary } from 'antlr4ts/Vocabulary' import { VocabularyImpl } from 'antlr4ts/VocabularyImpl' import * as Utils from 'antlr4ts/misc/Utils' export class AgtypeLexer extends Lexer { public static readonly T__0 = 1; public static readonly T__1 = 2; public static readonly T__2 = 3; public static readonly T__3 = 4; public static readonly T__4 = 5; public static readonly T__5 = 6; public static readonly T__6 = 7; public static readonly T__7 = 8; public static readonly T__8 = 9; public static readonly T__9 = 10; public static readonly T__10 = 11; public static readonly T__11 = 12; public static readonly T__12 = 13; public static readonly IDENT = 14; public static readonly STRING = 15; public static readonly INTEGER = 16; public static readonly RegularFloat = 17; public static readonly ExponentFloat = 18; public static readonly WS = 19; // tslint:disable:no-trailing-whitespace public static readonly channelNames: string[] = [ 'DEFAULT_TOKEN_CHANNEL', 'HIDDEN' ]; // tslint:disable:no-trailing-whitespace public static readonly modeNames: string[] = [ 'DEFAULT_MODE' ]; public static readonly ruleNames: string[] = [ 'T__0', 'T__1', 'T__2', 'T__3', 'T__4', 'T__5', 'T__6', 'T__7', 'T__8', 'T__9', 'T__10', 'T__11', 'T__12', 'IDENT', 'STRING', 'ESC', 'UNICODE', 'HEX', 'SAFECODEPOINT', 'INTEGER', 'INT', 'RegularFloat', 'ExponentFloat', 'DECIMAL', 'SCIENTIFIC', 'WS' ]; private static readonly _LITERAL_NAMES: Array = [ undefined, "'true'", "'false'", "'null'", "'{'", "','", "'}'", "':'", "'['", "']'", "'::'", "'-'", "'Infinity'", "'NaN'" ]; private static readonly _SYMBOLIC_NAMES: Array = [ undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, 'IDENT', 'STRING', 'INTEGER', 'RegularFloat', 'ExponentFloat', 'WS' ]; public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(AgtypeLexer._LITERAL_NAMES, AgtypeLexer._SYMBOLIC_NAMES, []); // @Override // @NotNull public get vocabulary (): Vocabulary { return AgtypeLexer.VOCABULARY } // tslint:enable:no-trailing-whitespace constructor (input: CharStream) { super(input) this._interp = new LexerATNSimulator(AgtypeLexer._ATN, this) } // @Override public get grammarFileName (): string { return 'Agtype.g4' } // @Override public get ruleNames (): string[] { return AgtypeLexer.ruleNames } // @Override public get serializedATN (): string { return AgtypeLexer._serializedATN } // @Override public get channelNames (): string[] { return AgtypeLexer.channelNames } // @Override public get modeNames (): string[] { return AgtypeLexer.modeNames } public static readonly _serializedATN: string = '\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02\x15\xB9\b\x01' + '\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06' + '\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r' + '\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t' + '\x12\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t' + '\x17\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B\x03\x02\x03' + '\x02\x03\x02\x03\x02\x03\x02\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03' + '\x03\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x05\x03\x05\x03\x06\x03' + '\x06\x03\x07\x03\x07\x03\b\x03\b\x03\t\x03\t\x03\n\x03\n\x03\v\x03\v\x03' + '\v\x03\f\x03\f\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03' + '\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0F\x03\x0F\x07\x0Fh\n\x0F\f\x0F\x0E' + '\x0Fk\v\x0F\x03\x10\x03\x10\x03\x10\x07\x10p\n\x10\f\x10\x0E\x10s\v\x10' + '\x03\x10\x03\x10\x03\x11\x03\x11\x03\x11\x05\x11z\n\x11\x03\x12\x03\x12' + '\x03\x12\x03\x12\x03\x12\x03\x12\x03\x13\x03\x13\x03\x14\x03\x14\x03\x15' + '\x05\x15\x87\n\x15\x03\x15\x03\x15\x03\x16\x03\x16\x03\x16\x07\x16\x8E' + '\n\x16\f\x16\x0E\x16\x91\v\x16\x05\x16\x93\n\x16\x03\x17\x05\x17\x96\n' + '\x17\x03\x17\x03\x17\x03\x17\x03\x18\x05\x18\x9C\n\x18\x03\x18\x03\x18' + '\x05\x18\xA0\n\x18\x03\x18\x03\x18\x03\x19\x03\x19\x06\x19\xA6\n\x19\r' + '\x19\x0E\x19\xA7\x03\x1A\x03\x1A\x05\x1A\xAC\n\x1A\x03\x1A\x06\x1A\xAF' + '\n\x1A\r\x1A\x0E\x1A\xB0\x03\x1B\x06\x1B\xB4\n\x1B\r\x1B\x0E\x1B\xB5\x03' + '\x1B\x03\x1B\x02\x02\x02\x1C\x03\x02\x03\x05\x02\x04\x07\x02\x05\t\x02' + '\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02\v\x15\x02\f\x17\x02' + '\r\x19\x02\x0E\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x02#\x02\x02%' + "\x02\x02\'\x02\x02)\x02\x12+\x02\x02-\x02\x13/\x02\x141\x02\x023\x02\x02" + '5\x02\x15\x03\x02\f\x05\x02C\\aac|\x07\x02&&2;C\\aac|\n\x02$$11^^ddhh' + 'ppttvv\x05\x022;CHch\x05\x02\x02!$$^^\x03\x023;\x03\x022;\x04\x02GGgg' + '\x04\x02--//\x05\x02\v\f\x0F\x0F""\x02\xBF\x02\x03\x03\x02\x02\x02\x02' + '\x05\x03\x02\x02\x02\x02\x07\x03\x02\x02\x02\x02\t\x03\x02\x02\x02\x02' + '\v\x03\x02\x02\x02\x02\r\x03\x02\x02\x02\x02\x0F\x03\x02\x02\x02\x02\x11' + '\x03\x02\x02\x02\x02\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17' + '\x03\x02\x02\x02\x02\x19\x03\x02\x02\x02\x02\x1B\x03\x02\x02\x02\x02\x1D' + '\x03\x02\x02\x02\x02\x1F\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02-\x03' + '\x02\x02\x02\x02/\x03\x02\x02\x02\x025\x03\x02\x02\x02\x037\x03\x02\x02' + '\x02\x05<\x03\x02\x02\x02\x07B\x03\x02\x02\x02\tG\x03\x02\x02\x02\vI\x03' + '\x02\x02\x02\rK\x03\x02\x02\x02\x0FM\x03\x02\x02\x02\x11O\x03\x02\x02' + '\x02\x13Q\x03\x02\x02\x02\x15S\x03\x02\x02\x02\x17V\x03\x02\x02\x02\x19' + 'X\x03\x02\x02\x02\x1Ba\x03\x02\x02\x02\x1De\x03\x02\x02\x02\x1Fl\x03\x02' + "\x02\x02!v\x03\x02\x02\x02#{\x03\x02\x02\x02%\x81\x03\x02\x02\x02\'\x83" + '\x03\x02\x02\x02)\x86\x03\x02\x02\x02+\x92\x03\x02\x02\x02-\x95\x03\x02' + '\x02\x02/\x9B\x03\x02\x02\x021\xA3\x03\x02\x02\x023\xA9\x03\x02\x02\x02' + '5\xB3\x03\x02\x02\x0278\x07v\x02\x0289\x07t\x02\x029:\x07w\x02\x02:;\x07' + 'g\x02\x02;\x04\x03\x02\x02\x02<=\x07h\x02\x02=>\x07c\x02\x02>?\x07n\x02' + '\x02?@\x07u\x02\x02@A\x07g\x02\x02A\x06\x03\x02\x02\x02BC\x07p\x02\x02' + 'CD\x07w\x02\x02DE\x07n\x02\x02EF\x07n\x02\x02F\b\x03\x02\x02\x02GH\x07' + '}\x02\x02H\n\x03\x02\x02\x02IJ\x07.\x02\x02J\f\x03\x02\x02\x02KL\x07\x7F' + '\x02\x02L\x0E\x03\x02\x02\x02MN\x07<\x02\x02N\x10\x03\x02\x02\x02OP\x07' + ']\x02\x02P\x12\x03\x02\x02\x02QR\x07_\x02\x02R\x14\x03\x02\x02\x02ST\x07' + '<\x02\x02TU\x07<\x02\x02U\x16\x03\x02\x02\x02VW\x07/\x02\x02W\x18\x03' + '\x02\x02\x02XY\x07K\x02\x02YZ\x07p\x02\x02Z[\x07h\x02\x02[\\\x07k\x02' + '\x02\\]\x07p\x02\x02]^\x07k\x02\x02^_\x07v\x02\x02_`\x07{\x02\x02`\x1A' + '\x03\x02\x02\x02ab\x07P\x02\x02bc\x07c\x02\x02cd\x07P\x02\x02d\x1C\x03' + '\x02\x02\x02ei\t\x02\x02\x02fh\t\x03\x02\x02gf\x03\x02\x02\x02hk\x03\x02' + '\x02\x02ig\x03\x02\x02\x02ij\x03\x02\x02\x02j\x1E\x03\x02\x02\x02ki\x03' + "\x02\x02\x02lq\x07$\x02\x02mp\x05!\x11\x02np\x05\'\x14\x02om\x03\x02\x02" + '\x02on\x03\x02\x02\x02ps\x03\x02\x02\x02qo\x03\x02\x02\x02qr\x03\x02\x02' + '\x02rt\x03\x02\x02\x02sq\x03\x02\x02\x02tu\x07$\x02\x02u \x03\x02\x02' + '\x02vy\x07^\x02\x02wz\t\x04\x02\x02xz\x05#\x12\x02yw\x03\x02\x02\x02y' + 'x\x03\x02\x02\x02z"\x03\x02\x02\x02{|\x07w\x02\x02|}\x05%\x13\x02}~\x05' + '%\x13\x02~\x7F\x05%\x13\x02\x7F\x80\x05%\x13\x02\x80$\x03\x02\x02\x02' + '\x81\x82\t\x05\x02\x02\x82&\x03\x02\x02\x02\x83\x84\n\x06\x02\x02\x84' + '(\x03\x02\x02\x02\x85\x87\x07/\x02\x02\x86\x85\x03\x02\x02\x02\x86\x87' + '\x03\x02\x02\x02\x87\x88\x03\x02\x02\x02\x88\x89\x05+\x16\x02\x89*\x03' + '\x02\x02\x02\x8A\x93\x072\x02\x02\x8B\x8F\t\x07\x02\x02\x8C\x8E\t\b\x02' + '\x02\x8D\x8C\x03\x02\x02\x02\x8E\x91\x03\x02\x02\x02\x8F\x8D\x03\x02\x02' + '\x02\x8F\x90\x03\x02\x02\x02\x90\x93\x03\x02\x02\x02\x91\x8F\x03\x02\x02' + '\x02\x92\x8A\x03\x02\x02\x02\x92\x8B\x03\x02\x02\x02\x93,\x03\x02\x02' + '\x02\x94\x96\x07/\x02\x02\x95\x94\x03\x02\x02\x02\x95\x96\x03\x02\x02' + '\x02\x96\x97\x03\x02\x02\x02\x97\x98\x05+\x16\x02\x98\x99\x051\x19\x02' + '\x99.\x03\x02\x02\x02\x9A\x9C\x07/\x02\x02\x9B\x9A\x03\x02\x02\x02\x9B' + '\x9C\x03\x02\x02\x02\x9C\x9D\x03\x02\x02\x02\x9D\x9F\x05+\x16\x02\x9E' + '\xA0\x051\x19\x02\x9F\x9E\x03\x02\x02\x02\x9F\xA0\x03\x02\x02\x02\xA0' + '\xA1\x03\x02\x02\x02\xA1\xA2\x053\x1A\x02\xA20\x03\x02\x02\x02\xA3\xA5' + '\x070\x02\x02\xA4\xA6\t\b\x02\x02\xA5\xA4\x03\x02\x02\x02\xA6\xA7\x03' + '\x02\x02\x02\xA7\xA5\x03\x02\x02\x02\xA7\xA8\x03\x02\x02\x02\xA82\x03' + '\x02\x02\x02\xA9\xAB\t\t\x02\x02\xAA\xAC\t\n\x02\x02\xAB\xAA\x03\x02\x02' + '\x02\xAB\xAC\x03\x02\x02\x02\xAC\xAE\x03\x02\x02\x02\xAD\xAF\t\b\x02\x02' + '\xAE\xAD\x03\x02\x02\x02\xAF\xB0\x03\x02\x02\x02\xB0\xAE\x03\x02\x02\x02' + '\xB0\xB1\x03\x02\x02\x02\xB14\x03\x02\x02\x02\xB2\xB4\t\v\x02\x02\xB3' + '\xB2\x03\x02\x02\x02\xB4\xB5\x03\x02\x02\x02\xB5\xB3\x03\x02\x02\x02\xB5' + '\xB6\x03\x02\x02\x02\xB6\xB7\x03\x02\x02\x02\xB7\xB8\b\x1B\x02\x02\xB8' + '6\x03\x02\x02\x02\x11\x02ioqy\x86\x8F\x92\x95\x9B\x9F\xA7\xAB\xB0\xB5' + '\x03\b\x02\x02'; public static __ATN: ATN; public static get _ATN (): ATN { if (!AgtypeLexer.__ATN) { AgtypeLexer.__ATN = new ATNDeserializer().deserialize(Utils.toCharArray(AgtypeLexer._serializedATN)) } return AgtypeLexer.__ATN } } age-PG16-v1.5.0-rc0/drivers/nodejs/src/antlr4/AgtypeListener.ts000066400000000000000000000165211454606241200240470ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ // Generated from src/antlr4/Agtype.g4 by ANTLR 4.9.0-SNAPSHOT import { ParseTreeListener } from 'antlr4ts/tree/ParseTreeListener' import { AgTypeContext, AgValueContext, ArrayContext, ArrayValueContext, FalseBooleanContext, FloatLiteralContext, FloatValueContext, IntegerValueContext, NullValueContext, ObjContext, ObjectValueContext, PairContext, StringValueContext, TrueBooleanContext, TypeAnnotationContext, ValueContext } from './AgtypeParser' // Generated from src/antlr4/Agtype.g4 by ANTLR 4.9.0-SNAPSHOT /** * This interface defines a complete listener for a parse tree produced by * `AgtypeParser`. */ export interface AgtypeListener extends ParseTreeListener { /** * Enter a parse tree produced by the `StringValue` * labeled alternative in `AgtypeParser.value`. * @param ctx the parse tree */ enterStringValue?: (ctx: StringValueContext) => void; /** * Exit a parse tree produced by the `StringValue` * labeled alternative in `AgtypeParser.value`. * @param ctx the parse tree */ exitStringValue?: (ctx: StringValueContext) => void; /** * Enter a parse tree produced by the `IntegerValue` * labeled alternative in `AgtypeParser.value`. * @param ctx the parse tree */ enterIntegerValue?: (ctx: IntegerValueContext) => void; /** * Exit a parse tree produced by the `IntegerValue` * labeled alternative in `AgtypeParser.value`. * @param ctx the parse tree */ exitIntegerValue?: (ctx: IntegerValueContext) => void; /** * Enter a parse tree produced by the `FloatValue` * labeled alternative in `AgtypeParser.value`. * @param ctx the parse tree */ enterFloatValue?: (ctx: FloatValueContext) => void; /** * Exit a parse tree produced by the `FloatValue` * labeled alternative in `AgtypeParser.value`. * @param ctx the parse tree */ exitFloatValue?: (ctx: FloatValueContext) => void; /** * Enter a parse tree produced by the `TrueBoolean` * labeled alternative in `AgtypeParser.value`. * @param ctx the parse tree */ enterTrueBoolean?: (ctx: TrueBooleanContext) => void; /** * Exit a parse tree produced by the `TrueBoolean` * labeled alternative in `AgtypeParser.value`. * @param ctx the parse tree */ exitTrueBoolean?: (ctx: TrueBooleanContext) => void; /** * Enter a parse tree produced by the `FalseBoolean` * labeled alternative in `AgtypeParser.value`. * @param ctx the parse tree */ enterFalseBoolean?: (ctx: FalseBooleanContext) => void; /** * Exit a parse tree produced by the `FalseBoolean` * labeled alternative in `AgtypeParser.value`. * @param ctx the parse tree */ exitFalseBoolean?: (ctx: FalseBooleanContext) => void; /** * Enter a parse tree produced by the `NullValue` * labeled alternative in `AgtypeParser.value`. * @param ctx the parse tree */ enterNullValue?: (ctx: NullValueContext) => void; /** * Exit a parse tree produced by the `NullValue` * labeled alternative in `AgtypeParser.value`. * @param ctx the parse tree */ exitNullValue?: (ctx: NullValueContext) => void; /** * Enter a parse tree produced by the `ObjectValue` * labeled alternative in `AgtypeParser.value`. * @param ctx the parse tree */ enterObjectValue?: (ctx: ObjectValueContext) => void; /** * Exit a parse tree produced by the `ObjectValue` * labeled alternative in `AgtypeParser.value`. * @param ctx the parse tree */ exitObjectValue?: (ctx: ObjectValueContext) => void; /** * Enter a parse tree produced by the `ArrayValue` * labeled alternative in `AgtypeParser.value`. * @param ctx the parse tree */ enterArrayValue?: (ctx: ArrayValueContext) => void; /** * Exit a parse tree produced by the `ArrayValue` * labeled alternative in `AgtypeParser.value`. * @param ctx the parse tree */ exitArrayValue?: (ctx: ArrayValueContext) => void; /** * Enter a parse tree produced by `AgtypeParser.agType`. * @param ctx the parse tree */ enterAgType?: (ctx: AgTypeContext) => void; /** * Exit a parse tree produced by `AgtypeParser.agType`. * @param ctx the parse tree */ exitAgType?: (ctx: AgTypeContext) => void; /** * Enter a parse tree produced by `AgtypeParser.agValue`. * @param ctx the parse tree */ enterAgValue?: (ctx: AgValueContext) => void; /** * Exit a parse tree produced by `AgtypeParser.agValue`. * @param ctx the parse tree */ exitAgValue?: (ctx: AgValueContext) => void; /** * Enter a parse tree produced by `AgtypeParser.value`. * @param ctx the parse tree */ enterValue?: (ctx: ValueContext) => void; /** * Exit a parse tree produced by `AgtypeParser.value`. * @param ctx the parse tree */ exitValue?: (ctx: ValueContext) => void; /** * Enter a parse tree produced by `AgtypeParser.obj`. * @param ctx the parse tree */ enterObj?: (ctx: ObjContext) => void; /** * Exit a parse tree produced by `AgtypeParser.obj`. * @param ctx the parse tree */ exitObj?: (ctx: ObjContext) => void; /** * Enter a parse tree produced by `AgtypeParser.pair`. * @param ctx the parse tree */ enterPair?: (ctx: PairContext) => void; /** * Exit a parse tree produced by `AgtypeParser.pair`. * @param ctx the parse tree */ exitPair?: (ctx: PairContext) => void; /** * Enter a parse tree produced by `AgtypeParser.array`. * @param ctx the parse tree */ enterArray?: (ctx: ArrayContext) => void; /** * Exit a parse tree produced by `AgtypeParser.array`. * @param ctx the parse tree */ exitArray?: (ctx: ArrayContext) => void; /** * Enter a parse tree produced by `AgtypeParser.typeAnnotation`. * @param ctx the parse tree */ enterTypeAnnotation?: (ctx: TypeAnnotationContext) => void; /** * Exit a parse tree produced by `AgtypeParser.typeAnnotation`. * @param ctx the parse tree */ exitTypeAnnotation?: (ctx: TypeAnnotationContext) => void; /** * Enter a parse tree produced by `AgtypeParser.floatLiteral`. * @param ctx the parse tree */ enterFloatLiteral?: (ctx: FloatLiteralContext) => void; /** * Exit a parse tree produced by `AgtypeParser.floatLiteral`. * @param ctx the parse tree */ exitFloatLiteral?: (ctx: FloatLiteralContext) => void; } age-PG16-v1.5.0-rc0/drivers/nodejs/src/antlr4/AgtypeParser.ts000066400000000000000000000711121454606241200235130ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* eslint-disable */ // Generated from src/antlr4/Agtype.g4 by ANTLR 4.9.0-SNAPSHOT import { ATN } from 'antlr4ts/atn/ATN' import { ATNDeserializer } from 'antlr4ts/atn/ATNDeserializer' import { FailedPredicateException } from 'antlr4ts/FailedPredicateException' import { NoViableAltException } from 'antlr4ts/NoViableAltException' import { Parser } from 'antlr4ts/Parser' import { ParserRuleContext } from 'antlr4ts/ParserRuleContext' import { ParserATNSimulator } from 'antlr4ts/atn/ParserATNSimulator' import { RecognitionException } from 'antlr4ts/RecognitionException' // import { RuleVersion } from "antlr4ts/RuleVersion"; import { TerminalNode } from 'antlr4ts/tree/TerminalNode' import { TokenStream } from 'antlr4ts/TokenStream' import { Vocabulary } from 'antlr4ts/Vocabulary' import { VocabularyImpl } from 'antlr4ts/VocabularyImpl' import * as Utils from 'antlr4ts/misc/Utils' import { AgtypeListener } from './AgtypeListener' export class AgtypeParser extends Parser { public static readonly T__0 = 1; public static readonly T__1 = 2; public static readonly T__2 = 3; public static readonly T__3 = 4; public static readonly T__4 = 5; public static readonly T__5 = 6; public static readonly T__6 = 7; public static readonly T__7 = 8; public static readonly T__8 = 9; public static readonly T__9 = 10; public static readonly T__10 = 11; public static readonly T__11 = 12; public static readonly T__12 = 13; public static readonly IDENT = 14; public static readonly STRING = 15; public static readonly INTEGER = 16; public static readonly RegularFloat = 17; public static readonly ExponentFloat = 18; public static readonly WS = 19; public static readonly RULE_agType = 0; public static readonly RULE_agValue = 1; public static readonly RULE_value = 2; public static readonly RULE_obj = 3; public static readonly RULE_pair = 4; public static readonly RULE_array = 5; public static readonly RULE_typeAnnotation = 6; public static readonly RULE_floatLiteral = 7; // tslint:disable:no-trailing-whitespace public static readonly ruleNames: string[] = [ 'agType', 'agValue', 'value', 'obj', 'pair', 'array', 'typeAnnotation', 'floatLiteral' ]; private static readonly _LITERAL_NAMES: Array = [ undefined, "'true'", "'false'", "'null'", "'{'", "','", "'}'", "':'", "'['", "']'", "'::'", "'-'", "'Infinity'", "'NaN'" ]; private static readonly _SYMBOLIC_NAMES: Array = [ undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, 'IDENT', 'STRING', 'INTEGER', 'RegularFloat', 'ExponentFloat', 'WS' ]; public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(AgtypeParser._LITERAL_NAMES, AgtypeParser._SYMBOLIC_NAMES, []); // @Override // @NotNull public get vocabulary (): Vocabulary { return AgtypeParser.VOCABULARY } // tslint:enable:no-trailing-whitespace // @Override public get grammarFileName (): string { return 'Agtype.g4' } // @Override public get ruleNames (): string[] { return AgtypeParser.ruleNames } // @Override public get serializedATN (): string { return AgtypeParser._serializedATN } protected createFailedPredicateException (predicate?: string, message?: string): FailedPredicateException { return new FailedPredicateException(this, predicate, message) } constructor (input: TokenStream) { super(input) this._interp = new ParserATNSimulator(AgtypeParser._ATN, this) } // @RuleVersion(0) public agType (): AgTypeContext { const _localctx: AgTypeContext = new AgTypeContext(this._ctx, this.state) this.enterRule(_localctx, 0, AgtypeParser.RULE_agType) try { this.enterOuterAlt(_localctx, 1) { this.state = 16 this.agValue() this.state = 17 this.match(AgtypeParser.EOF) } } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re this._errHandler.reportError(this, re) this._errHandler.recover(this, re) } else { throw re } } finally { this.exitRule() } return _localctx } // @RuleVersion(0) public agValue (): AgValueContext { const _localctx: AgValueContext = new AgValueContext(this._ctx, this.state) this.enterRule(_localctx, 2, AgtypeParser.RULE_agValue) let _la: number try { this.enterOuterAlt(_localctx, 1) { this.state = 19 this.value() this.state = 21 this._errHandler.sync(this) _la = this._input.LA(1) if (_la === AgtypeParser.T__9) { { this.state = 20 this.typeAnnotation() } } } } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re this._errHandler.reportError(this, re) this._errHandler.recover(this, re) } else { throw re } } finally { this.exitRule() } return _localctx } // @RuleVersion(0) public value (): ValueContext { let _localctx: ValueContext = new ValueContext(this._ctx, this.state) this.enterRule(_localctx, 4, AgtypeParser.RULE_value) try { this.state = 31 this._errHandler.sync(this) switch (this._input.LA(1)) { case AgtypeParser.STRING: _localctx = new StringValueContext(_localctx) this.enterOuterAlt(_localctx, 1) { this.state = 23 this.match(AgtypeParser.STRING) } break case AgtypeParser.INTEGER: _localctx = new IntegerValueContext(_localctx) this.enterOuterAlt(_localctx, 2) { this.state = 24 this.match(AgtypeParser.INTEGER) } break case AgtypeParser.T__10: case AgtypeParser.T__11: case AgtypeParser.T__12: case AgtypeParser.RegularFloat: case AgtypeParser.ExponentFloat: _localctx = new FloatValueContext(_localctx) this.enterOuterAlt(_localctx, 3) { this.state = 25 this.floatLiteral() } break case AgtypeParser.T__0: _localctx = new TrueBooleanContext(_localctx) this.enterOuterAlt(_localctx, 4) { this.state = 26 this.match(AgtypeParser.T__0) } break case AgtypeParser.T__1: _localctx = new FalseBooleanContext(_localctx) this.enterOuterAlt(_localctx, 5) { this.state = 27 this.match(AgtypeParser.T__1) } break case AgtypeParser.T__2: _localctx = new NullValueContext(_localctx) this.enterOuterAlt(_localctx, 6) { this.state = 28 this.match(AgtypeParser.T__2) } break case AgtypeParser.T__3: _localctx = new ObjectValueContext(_localctx) this.enterOuterAlt(_localctx, 7) { this.state = 29 this.obj() } break case AgtypeParser.T__7: _localctx = new ArrayValueContext(_localctx) this.enterOuterAlt(_localctx, 8) { this.state = 30 this.array() } break default: throw new NoViableAltException(this) } } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re this._errHandler.reportError(this, re) this._errHandler.recover(this, re) } else { throw re } } finally { this.exitRule() } return _localctx } // @RuleVersion(0) public obj (): ObjContext { const _localctx: ObjContext = new ObjContext(this._ctx, this.state) this.enterRule(_localctx, 6, AgtypeParser.RULE_obj) let _la: number try { this.state = 46 this._errHandler.sync(this) switch (this.interpreter.adaptivePredict(this._input, 3, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1) { this.state = 33 this.match(AgtypeParser.T__3) this.state = 34 this.pair() this.state = 39 this._errHandler.sync(this) _la = this._input.LA(1) while (_la === AgtypeParser.T__4) { { { this.state = 35 this.match(AgtypeParser.T__4) this.state = 36 this.pair() } } this.state = 41 this._errHandler.sync(this) _la = this._input.LA(1) } this.state = 42 this.match(AgtypeParser.T__5) } break case 2: this.enterOuterAlt(_localctx, 2) { this.state = 44 this.match(AgtypeParser.T__3) this.state = 45 this.match(AgtypeParser.T__5) } break } } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re this._errHandler.reportError(this, re) this._errHandler.recover(this, re) } else { throw re } } finally { this.exitRule() } return _localctx } // @RuleVersion(0) public pair (): PairContext { const _localctx: PairContext = new PairContext(this._ctx, this.state) this.enterRule(_localctx, 8, AgtypeParser.RULE_pair) try { this.enterOuterAlt(_localctx, 1) { this.state = 48 this.match(AgtypeParser.STRING) this.state = 49 this.match(AgtypeParser.T__6) this.state = 50 this.agValue() } } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re this._errHandler.reportError(this, re) this._errHandler.recover(this, re) } else { throw re } } finally { this.exitRule() } return _localctx } // @RuleVersion(0) public array (): ArrayContext { const _localctx: ArrayContext = new ArrayContext(this._ctx, this.state) this.enterRule(_localctx, 10, AgtypeParser.RULE_array) let _la: number try { this.state = 65 this._errHandler.sync(this) switch (this.interpreter.adaptivePredict(this._input, 5, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1) { this.state = 52 this.match(AgtypeParser.T__7) this.state = 53 this.agValue() this.state = 58 this._errHandler.sync(this) _la = this._input.LA(1) while (_la === AgtypeParser.T__4) { { { this.state = 54 this.match(AgtypeParser.T__4) this.state = 55 this.agValue() } } this.state = 60 this._errHandler.sync(this) _la = this._input.LA(1) } this.state = 61 this.match(AgtypeParser.T__8) } break case 2: this.enterOuterAlt(_localctx, 2) { this.state = 63 this.match(AgtypeParser.T__7) this.state = 64 this.match(AgtypeParser.T__8) } break } } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re this._errHandler.reportError(this, re) this._errHandler.recover(this, re) } else { throw re } } finally { this.exitRule() } return _localctx } // @RuleVersion(0) public typeAnnotation (): TypeAnnotationContext { const _localctx: TypeAnnotationContext = new TypeAnnotationContext(this._ctx, this.state) this.enterRule(_localctx, 12, AgtypeParser.RULE_typeAnnotation) try { this.enterOuterAlt(_localctx, 1) { this.state = 67 this.match(AgtypeParser.T__9) this.state = 68 this.match(AgtypeParser.IDENT) } } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re this._errHandler.reportError(this, re) this._errHandler.recover(this, re) } else { throw re } } finally { this.exitRule() } return _localctx } // @RuleVersion(0) public floatLiteral (): FloatLiteralContext { const _localctx: FloatLiteralContext = new FloatLiteralContext(this._ctx, this.state) this.enterRule(_localctx, 14, AgtypeParser.RULE_floatLiteral) let _la: number try { this.state = 77 this._errHandler.sync(this) switch (this._input.LA(1)) { case AgtypeParser.RegularFloat: this.enterOuterAlt(_localctx, 1) { this.state = 70 this.match(AgtypeParser.RegularFloat) } break case AgtypeParser.ExponentFloat: this.enterOuterAlt(_localctx, 2) { this.state = 71 this.match(AgtypeParser.ExponentFloat) } break case AgtypeParser.T__10: case AgtypeParser.T__11: this.enterOuterAlt(_localctx, 3) { this.state = 73 this._errHandler.sync(this) _la = this._input.LA(1) if (_la === AgtypeParser.T__10) { { this.state = 72 this.match(AgtypeParser.T__10) } } this.state = 75 this.match(AgtypeParser.T__11) } break case AgtypeParser.T__12: this.enterOuterAlt(_localctx, 4) { this.state = 76 this.match(AgtypeParser.T__12) } break default: throw new NoViableAltException(this) } } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re this._errHandler.reportError(this, re) this._errHandler.recover(this, re) } else { throw re } } finally { this.exitRule() } return _localctx } public static readonly _serializedATN: string = '\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03\x15R\x04\x02' + '\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07' + '\t\x07\x04\b\t\b\x04\t\t\t\x03\x02\x03\x02\x03\x02\x03\x03\x03\x03\x05' + '\x03\x18\n\x03\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04' + '\x03\x04\x05\x04"\n\x04\x03\x05\x03\x05\x03\x05\x03\x05\x07\x05(\n\x05' + '\f\x05\x0E\x05+\v\x05\x03\x05\x03\x05\x03\x05\x03\x05\x05\x051\n\x05\x03' + '\x06\x03\x06\x03\x06\x03\x06\x03\x07\x03\x07\x03\x07\x03\x07\x07\x07;' + '\n\x07\f\x07\x0E\x07>\v\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07D\n' + '\x07\x03\b\x03\b\x03\b\x03\t\x03\t\x03\t\x05\tL\n\t\x03\t\x03\t\x05\t' + 'P\n\t\x03\t\x02\x02\x02\n\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E' + '\x02\x10\x02\x02\x02\x02Y\x02\x12\x03\x02\x02\x02\x04\x15\x03\x02\x02' + '\x02\x06!\x03\x02\x02\x02\b0\x03\x02\x02\x02\n2\x03\x02\x02\x02\fC\x03' + '\x02\x02\x02\x0EE\x03\x02\x02\x02\x10O\x03\x02\x02\x02\x12\x13\x05\x04' + '\x03\x02\x13\x14\x07\x02\x02\x03\x14\x03\x03\x02\x02\x02\x15\x17\x05\x06' + '\x04\x02\x16\x18\x05\x0E\b\x02\x17\x16\x03\x02\x02\x02\x17\x18\x03\x02' + '\x02\x02\x18\x05\x03\x02\x02\x02\x19"\x07\x11\x02\x02\x1A"\x07\x12\x02' + '\x02\x1B"\x05\x10\t\x02\x1C"\x07\x03\x02\x02\x1D"\x07\x04\x02\x02\x1E' + '"\x07\x05\x02\x02\x1F"\x05\b\x05\x02 "\x05\f\x07\x02!\x19\x03\x02\x02' + '\x02!\x1A\x03\x02\x02\x02!\x1B\x03\x02\x02\x02!\x1C\x03\x02\x02\x02!\x1D' + '\x03\x02\x02\x02!\x1E\x03\x02\x02\x02!\x1F\x03\x02\x02\x02! \x03\x02\x02' + '\x02"\x07\x03\x02\x02\x02#$\x07\x06\x02\x02$)\x05\n\x06\x02%&\x07\x07' + "\x02\x02&(\x05\n\x06\x02\'%\x03\x02\x02\x02(+\x03\x02\x02\x02)\'\x03\x02" + '\x02\x02)*\x03\x02\x02\x02*,\x03\x02\x02\x02+)\x03\x02\x02\x02,-\x07\b' + '\x02\x02-1\x03\x02\x02\x02./\x07\x06\x02\x02/1\x07\b\x02\x020#\x03\x02' + '\x02\x020.\x03\x02\x02\x021\t\x03\x02\x02\x0223\x07\x11\x02\x0234\x07' + '\t\x02\x0245\x05\x04\x03\x025\v\x03\x02\x02\x0267\x07\n\x02\x027<\x05' + '\x04\x03\x0289\x07\x07\x02\x029;\x05\x04\x03\x02:8\x03\x02\x02\x02;>\x03' + '\x02\x02\x02<:\x03\x02\x02\x02<=\x03\x02\x02\x02=?\x03\x02\x02\x02><\x03' + '\x02\x02\x02?@\x07\v\x02\x02@D\x03\x02\x02\x02AB\x07\n\x02\x02BD\x07\v' + '\x02\x02C6\x03\x02\x02\x02CA\x03\x02\x02\x02D\r\x03\x02\x02\x02EF\x07' + '\f\x02\x02FG\x07\x10\x02\x02G\x0F\x03\x02\x02\x02HP\x07\x13\x02\x02IP' + '\x07\x14\x02\x02JL\x07\r\x02\x02KJ\x03\x02\x02\x02KL\x03\x02\x02\x02L' + 'M\x03\x02\x02\x02MP\x07\x0E\x02\x02NP\x07\x0F\x02\x02OH\x03\x02\x02\x02' + 'OI\x03\x02\x02\x02OK\x03\x02\x02\x02ON\x03\x02\x02\x02P\x11\x03\x02\x02' + '\x02\n\x17!)0 | any[]; class CustomAgTypeListener implements AgtypeListener, ParseTreeListener { rootObject?: MapOrArray; objectInsider: MapOrArray[] = []; prevObject?: MapOrArray; lastObject?: MapOrArray; lastValue: any = undefined; mergeArrayOrObject (key: string) { if (this.prevObject instanceof Array) { this.mergeArray() } else { this.mergeObject(key) } } mergeArray () { if (this.prevObject !== undefined && this.lastObject !== undefined && this.prevObject instanceof Array) { this.prevObject.push(this.lastObject) this.lastObject = this.prevObject this.objectInsider.shift() this.prevObject = this.objectInsider[1] } } mergeObject (key: string) { if (this.prevObject !== undefined && this.lastObject !== undefined && this.prevObject instanceof Map) { this.prevObject.set(key, this.lastObject) this.lastObject = this.prevObject this.objectInsider.shift() this.prevObject = this.objectInsider[1] } } createNewObject () { const newObject = new Map() this.objectInsider.unshift(newObject) this.prevObject = this.lastObject this.lastObject = newObject } createNewArray () { const newObject: any[] = [] this.objectInsider.unshift(newObject) this.prevObject = this.lastObject this.lastObject = newObject } pushIfArray (value: any) { if (this.lastObject instanceof Array) { this.lastObject.push(value) return true } return false } exitStringValue (ctx: StringValueContext): void { const value = this.stripQuotes(ctx.text) if (!this.pushIfArray(value)) { this.lastValue = value } } exitIntegerValue (ctx: IntegerValueContext): void { const value = parseInt(ctx.text) if (!this.pushIfArray(value)) { this.lastValue = value } } exitFloatValue (ctx: FloatValueContext): void { const value = parseFloat(ctx.text) if (!this.pushIfArray(value)) { this.lastValue = value } } exitTrueBoolean (): void { const value = true if (!this.pushIfArray(value)) { this.lastValue = value } } exitFalseBoolean (): void { const value = false if (!this.pushIfArray(value)) { this.lastValue = value } } exitNullValue (): void { const value = null if (!this.pushIfArray(value)) { this.lastValue = value } } exitFloatLiteral (ctx: FloatLiteralContext): void { const value = ctx.text if (!this.pushIfArray(value)) { this.lastValue = value } } enterObjectValue (): void { this.createNewObject() } enterArrayValue (): void { this.createNewArray() } exitObjectValue (): void { this.mergeArray() } exitPair (ctx: PairContext): void { const name = this.stripQuotes(ctx.STRING().text) if (this.lastValue !== undefined) { (this.lastObject as Map).set(name, this.lastValue) this.lastValue = undefined } else { this.mergeArrayOrObject(name) } } exitAgType (): void { this.rootObject = this.objectInsider.shift() } stripQuotes (quotesString: string) { return JSON.parse(quotesString) } getResult () { this.objectInsider = [] this.prevObject = undefined this.lastObject = undefined if (!this.rootObject) { this.rootObject = this.lastValue } this.lastValue = undefined return this.rootObject } enterEveryRule (): void { } exitEveryRule (): void { } visitErrorNode (): void { } visitTerminal (): void { } } export default CustomAgTypeListener age-PG16-v1.5.0-rc0/drivers/nodejs/src/index.ts000066400000000000000000000037321454606241200210130ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import { Client } from 'pg' import pgTypes from 'pg-types' import { CharStreams, CommonTokenStream } from 'antlr4ts' import { AgtypeLexer } from './antlr4/AgtypeLexer' import { AgtypeParser } from './antlr4/AgtypeParser' import CustomAgTypeListener from './antlr4/CustomAgTypeListener' import { ParseTreeWalker } from 'antlr4ts/tree' function AGTypeParse (input: string) { const chars = CharStreams.fromString(input) const lexer = new AgtypeLexer(chars) const tokens = new CommonTokenStream(lexer) const parser = new AgtypeParser(tokens) const tree = parser.agType() const printer = new CustomAgTypeListener() ParseTreeWalker.DEFAULT.walk(printer, tree) return printer.getResult() } async function setAGETypes (client: Client, types: typeof pgTypes) { await client.query(` CREATE EXTENSION IF NOT EXISTS age; LOAD 'age'; SET search_path = ag_catalog, "$user", public; `) const oidResults = await client.query(` select typelem from pg_type where typname = '_agtype';`) if (oidResults.rows.length < 1) { throw new Error() } types.setTypeParser(oidResults.rows[0].typelem, AGTypeParse) } export { setAGETypes, AGTypeParse } age-PG16-v1.5.0-rc0/drivers/nodejs/test/000077500000000000000000000000001454606241200175175ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/nodejs/test/Agtype.test.ts000066400000000000000000000071031454606241200222770ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import { AGTypeParse } from '../src' describe('Parsing', () => { it('Vertex', () => { expect( AGTypeParse('{"id": 844424930131969, "label": "Part", "properties": {"part_num": "123", "number": 3141592653589793, "float": 3.141592653589793}}::vertex') ).toStrictEqual(new Map(Object.entries({ id: 844424930131969, label: 'Part', properties: new Map(Object.entries({ part_num: '123', number: 3141592653589793, float: 3.141592653589793 })) }))) }) it('Edge', () => { expect( AGTypeParse('{"id": 1125899906842625, "label": "used_by", "end_id": 844424930131970, "start_id": 844424930131969, "properties": {"quantity": 1}}::edge') ).toStrictEqual(new Map(Object.entries({ id: 1125899906842625, label: 'used_by', end_id: 844424930131970, start_id: 844424930131969, properties: new Map(Object.entries({ quantity: 1 })) }))) }) it('Path', () => { expect( AGTypeParse('[{"id": 844424930131969, "label": "Part", "properties": {"part_num": "123"}}::vertex, {"id": 1125899906842625, "label": "used_by", "end_id": 844424930131970, "start_id": 844424930131969, "properties": {"quantity": 1}}::edge, {"id": 844424930131970, "label": "Part", "properties": {"part_num": "345"}}::vertex]::path') ).toStrictEqual([ new Map(Object.entries({ id: 844424930131969, label: 'Part', properties: new Map(Object.entries({ part_num: '123' })) })), new Map(Object.entries({ id: 1125899906842625, label: 'used_by', end_id: 844424930131970, start_id: 844424930131969, properties: new Map(Object.entries({ quantity: 1 })) })), new Map(Object.entries({ id: 844424930131970, label: 'Part', properties: new Map(Object.entries({ part_num: '345' })) })) ]) }) it('Null Properties', () => { expect( AGTypeParse('{"id": 1688849860263937, "label": "car", "properties": {}}::vertex') ).toStrictEqual(new Map(Object.entries({ id: 1688849860263937, label: 'car', properties: new Map(Object.entries({})) }))) }) it('Nested Agtype', () => { expect( AGTypeParse('{"id": 1688849860263937, "label": "car", "properties": {"a": {"b":{"c":{"d":[1, 2, "A"]}}}}}::vertex') ).toStrictEqual(new Map(Object.entries({ id: 1688849860263937, label: 'car', properties: new Map(Object.entries({ a: new Map(Object.entries({ b: new Map(Object.entries({ c: new Map(Object.entries({ d: [ 1, 2, 'A' ] })) })) })) })) }))) }) }) age-PG16-v1.5.0-rc0/drivers/nodejs/test/index.test.ts000066400000000000000000000057361454606241200221670ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import { types, Client, QueryResultRow } from 'pg' import { setAGETypes } from '../src' const config = { user: 'postgres', host: '127.0.0.1', database: 'postgres', password: 'agens', port: 5432 } const testGraphName = 'age-test' describe('Pre-connected Connection', () => { let client: Client | null beforeAll(async () => { client = new Client(config) await client.connect() await setAGETypes(client, types) await client.query(`SELECT create_graph('${testGraphName}');`) }) afterAll(async () => { await client?.query(`SELECT drop_graph('${testGraphName}', true);`) await client?.end() }) it('simple CREATE & MATCH', async () => { await client?.query(` SELECT * from cypher('${testGraphName}', $$ CREATE (a:Part {part_num: '123'}), (b:Part {part_num: '345'}), (c:Part {part_num: '456'}), (d:Part {part_num: '789'}) $$) as (a agtype); `) const results: QueryResultRow = await client?.query(` SELECT * from cypher('${testGraphName}', $$ MATCH (a) RETURN a $$) as (a agtype); `)! expect(results.rows).toStrictEqual( [ { a : new Map(Object.entries({ id: 844424930131969, label: 'Part', properties: new Map(Object.entries({ part_num: '123' })) })), }, { a : new Map(Object.entries({ id: 844424930131970, label: 'Part', properties: new Map(Object.entries({ part_num: '345' })) })), }, { a : new Map(Object.entries({ id: 844424930131971, label: 'Part', properties: new Map(Object.entries({ part_num: '456' })) })), }, { a : new Map(Object.entries({ id: 844424930131972, label: 'Part', properties: new Map(Object.entries({ part_num: '789' })) })), } ] ) }) }) age-PG16-v1.5.0-rc0/drivers/nodejs/tsconfig.json000066400000000000000000000024441454606241200212530ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ { "compilerOptions": { "target": "es6", "module": "commonjs", "declaration": true, "outDir": "dist/", "rootDir": "src/", "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, "noUncheckedIndexedAccess": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true }, "exclude": [ "node_modules", "**/*.spec.ts", "test" ] } age-PG16-v1.5.0-rc0/drivers/python/000077500000000000000000000000001454606241200165775ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/python/LICENSE000066400000000000000000000264461454606241200176200ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. age-PG16-v1.5.0-rc0/drivers/python/README.md000066400000000000000000000103751454606241200200640ustar00rootroot00000000000000Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Apache AGE](https://age.apache.org/) is a PostgreSQL extension that provides graph database functionality. The goal of the Apache AGE project is to create single storage that can handle both relational and graph model data so that users can use standard ANSI SQL along with openCypher, the Graph query language. This repository hosts the development of the Python driver for this Apache extension (currently in Incubator status). Thanks for checking it out. A graph consists of a set of vertices (also called nodes) and edges, where each individual vertex and edge possesses a map of properties. A vertex is the basic object of a graph, that can exist independently of everything else in the graph. An edge creates a directed connection between two vertices. A graph database is simply composed of vertices and edges. This type of database is useful when the meaning is in the relationships between the data. Relational databases can easily handle direct relationships, but indirect relationships are more difficult to deal with in relational databases. A graph database stores relationship information as a first-class entity. Apache AGE gives you the best of both worlds, simultaneously. Apache AGE is: - **Powerful** -- AGE adds graph database support to the already popular PostgreSQL database: PostgreSQL is used by organizations including Apple, Spotify, and NASA. - **Flexible** -- AGE allows you to perform openCypher queries, which make complex queries much easier to write. - **Intelligent** -- AGE allows you to perform graph queries that are the basis for many next level web services such as fraud & intrustion detection, master data management, product recommendations, identity and relationship management, experience personalization, knowledge management and more. # AGE AGType parser and driver support for Python AGType parser and driver support for [Apache AGE](https://age.apache.org/), graph extension for PostgreSQL. ### Features * Unmarshal AGE result data(AGType) to Vertex, Edge, Path * Cypher query support for Psycopg2 PostgreSQL driver (enables to use cypher queries directly) ### Prerequisites * over Python 3.9 * This module runs on [psycopg2](https://www.psycopg.org/) and [antlr4-python3](https://pypi.org/project/antlr4-python3-runtime/) ``` sudo apt-get update sudo apt-get install python3-dev libpq-dev git clone https://github.com/apache/age.git cd age/drivers/python ``` ### Install required packages ``` pip install -r requirements.txt ``` ### Test ``` python test_age_py.py \ -host "127.0.0.1" \ -db "postgres" \ -u "postgres" \ -pass "agens" \ -port 5432 \ -gn "test_graph" ``` ``` python -m unittest -v test_agtypes.py ``` ### Build from source ``` python setup.py install ``` ### For more information about [Apache AGE](https://age.apache.org/) * Apache Age : https://age.apache.org/ * GitHub : https://github.com/apache/age * Document : https://age.apache.org/age-manual/master/index.html ### Check AGE loaded on your PostgreSQL Connect to your containerized Postgres instance and then run the following commands: ``` # psql CREATE EXTENSION age; LOAD 'age'; SET search_path = ag_catalog, "$user", public; ``` ### Usage * If you are familiar with Psycopg2 driver : Go to [Jupyter Notebook : Basic Sample](samples/apache-age-basic.ipynb) * Simpler way to access Apache AGE [AGE Sample](samples/apache-age-note.ipynb) in Samples. * Agtype converting samples: [Agtype Sample](samples/apache-age-agtypes.ipynb) in Samples. ### License Apache-2.0 License age-PG16-v1.5.0-rc0/drivers/python/__init__.py000066400000000000000000000014141454606241200207100ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. age-PG16-v1.5.0-rc0/drivers/python/age/000077500000000000000000000000001454606241200173335ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/python/age/VERSION.py000066400000000000000000000016221454606241200210330ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. VER_MAJOR = 1 VER_MINOR = 0 VER_MICRO = 0 VERSION = '.'.join([str(VER_MAJOR),str(VER_MINOR),str(VER_MICRO)]) age-PG16-v1.5.0-rc0/drivers/python/age/__init__.py000066400000000000000000000025051454606241200214460ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. from . import age from .age import * from .models import * from .builder import ResultHandler, DummyResultHandler, parseAgeValue, newResultHandler from . import VERSION def version(): return VERSION.VERSION def connect(dsn=None, graph=None, connection_factory=None, cursor_factory=None, **kwargs): ag = Age() ag.connect(dsn=dsn, graph=graph, connection_factory=connection_factory, cursor_factory=cursor_factory, **kwargs) return ag # Dummy ResultHandler rawPrinter = DummyResultHandler() __name__="age"age-PG16-v1.5.0-rc0/drivers/python/age/age.py000066400000000000000000000203241454606241200204420ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. import re import psycopg2 from psycopg2 import errors from psycopg2 import extensions as ext from psycopg2 import sql from .exceptions import * from .builder import ResultHandler , parseAgeValue, newResultHandler _EXCEPTION_NoConnection = NoConnection() _EXCEPTION_GraphNotSet = GraphNotSet() WHITESPACE = re.compile('\s') def setUpAge(conn:ext.connection, graphName:str): with conn.cursor() as cursor: cursor.execute("LOAD 'age';") cursor.execute("SET search_path = ag_catalog, '$user', public;") cursor.execute("SELECT typelem FROM pg_type WHERE typname='_agtype'") oid = cursor.fetchone()[0] if oid == None : raise AgeNotSet() AGETYPE = ext.new_type((oid,), 'AGETYPE', parseAgeValue) ext.register_type(AGETYPE) # ext.register_adapter(Path, marshalAgtValue) # Check graph exists if graphName != None: checkGraphCreated(conn, graphName) # Create the graph, if it does not exist def checkGraphCreated(conn:ext.connection, graphName:str): with conn.cursor() as cursor: cursor.execute(sql.SQL("SELECT count(*) FROM ag_graph WHERE name={graphName}").format(graphName=sql.Literal(graphName))) if cursor.fetchone()[0] == 0: cursor.execute(sql.SQL("SELECT create_graph({graphName});").format(graphName=sql.Literal(graphName))) conn.commit() def deleteGraph(conn:ext.connection, graphName:str): with conn.cursor() as cursor: cursor.execute(sql.SQL("SELECT drop_graph({graphName}, true);").format(graphName=sql.Literal(graphName))) conn.commit() def buildCypher(graphName:str, cypherStmt:str, columns:list) ->str: if graphName == None: raise _EXCEPTION_GraphNotSet columnExp=[] if columns != None and len(columns) > 0: for col in columns: if col.strip() == '': continue elif WHITESPACE.search(col) != None: columnExp.append(col) else: columnExp.append(col + " agtype") else: columnExp.append('v agtype') stmtArr = [] stmtArr.append("SELECT * from cypher(NULL,NULL) as (") stmtArr.append(','.join(columnExp)) stmtArr.append(");") return "".join(stmtArr) def execSql(conn:ext.connection, stmt:str, commit:bool=False, params:tuple=None) -> ext.cursor : if conn == None or conn.closed: raise _EXCEPTION_NoConnection cursor = conn.cursor() try: cursor.execute(stmt, params) if commit: conn.commit() return cursor except SyntaxError as cause: conn.rollback() raise cause except Exception as cause: conn.rollback() raise SqlExecutionError("Execution ERR[" + str(cause) +"](" + stmt +")", cause) def querySql(conn:ext.connection, stmt:str, params:tuple=None) -> ext.cursor : return execSql(conn, stmt, False, params) # Execute cypher statement and return cursor. # If cypher statement changes data (create, set, remove), # You must commit session(ag.commit()) # (Otherwise the execution cannot make any effect.) def execCypher(conn:ext.connection, graphName:str, cypherStmt:str, cols:list=None, params:tuple=None) -> ext.cursor : if conn == None or conn.closed: raise _EXCEPTION_NoConnection cursor = conn.cursor() #clean up the string for mogrification cypherStmt = cypherStmt.replace("\n", "") cypherStmt = cypherStmt.replace("\t", "") cypher = str(cursor.mogrify(cypherStmt, params)) cypher = cypher[2:len(cypher)-1] preparedStmt = "SELECT * FROM age_prepare_cypher({graphName},{cypherStmt})" cursor = conn.cursor() try: cursor.execute(sql.SQL(preparedStmt).format(graphName=sql.Literal(graphName),cypherStmt=sql.Literal(cypher))) except SyntaxError as cause: conn.rollback() raise cause except Exception as cause: conn.rollback() raise SqlExecutionError("Execution ERR[" + str(cause) +"](" + preparedStmt +")", cause) stmt = buildCypher(graphName, cypher, cols) cursor = conn.cursor() try: cursor.execute(stmt) return cursor except SyntaxError as cause: conn.rollback() raise cause except Exception as cause: conn.rollback() raise SqlExecutionError("Execution ERR[" + str(cause) +"](" + stmt +")", cause) def cypher(cursor:ext.cursor, graphName:str, cypherStmt:str, cols:list=None, params:tuple=None) -> ext.cursor : #clean up the string for mogrification cypherStmt = cypherStmt.replace("\n", "") cypherStmt = cypherStmt.replace("\t", "") cypher = str(cursor.mogrify(cypherStmt, params)) cypher = cypher[2:len(cypher)-1] preparedStmt = "SELECT * FROM age_prepare_cypher({graphName},{cypherStmt})" cursor.execute(sql.SQL(preparedStmt).format(graphName=sql.Literal(graphName),cypherStmt=sql.Literal(cypher))) stmt = buildCypher(graphName, cypher, cols) cursor.execute(stmt) # def execCypherWithReturn(conn:ext.connection, graphName:str, cypherStmt:str, columns:list=None , params:tuple=None) -> ext.cursor : # stmt = buildCypher(graphName, cypherStmt, columns) # return execSql(conn, stmt, False, params) # def queryCypher(conn:ext.connection, graphName:str, cypherStmt:str, columns:list=None , params:tuple=None) -> ext.cursor : # return execCypherWithReturn(conn, graphName, cypherStmt, columns, params) class Age: def __init__(self): self.connection = None # psycopg2 connection] self.graphName = None # Connect to PostgreSQL Server and establish session and type extension environment. def connect(self, graph:str=None, dsn:str=None, connection_factory=None, cursor_factory=None, **kwargs): conn = psycopg2.connect(dsn, connection_factory, cursor_factory, **kwargs) setUpAge(conn, graph) self.connection = conn self.graphName = graph return self def close(self): self.connection.close() def setGraph(self, graph:str): checkGraphCreated(self.connection, graph) self.graphName = graph return self def commit(self): self.connection.commit() def rollback(self): self.connection.rollback() def execCypher(self, cypherStmt:str, cols:list=None, params:tuple=None) -> ext.cursor : return execCypher(self.connection, self.graphName, cypherStmt, cols=cols, params=params) def cypher(self, cursor:ext.cursor, cypherStmt:str, cols:list=None, params:tuple=None) -> ext.cursor : return cypher(cursor, self.graphName, cypherStmt, cols=cols, params=params) # def execSql(self, stmt:str, commit:bool=False, params:tuple=None) -> ext.cursor : # return execSql(self.connection, stmt, commit, params) # def execCypher(self, cypherStmt:str, commit:bool=False, params:tuple=None) -> ext.cursor : # return execCypher(self.connection, self.graphName, cypherStmt, commit, params) # def execCypherWithReturn(self, cypherStmt:str, columns:list=None , params:tuple=None) -> ext.cursor : # return execCypherWithReturn(self.connection, self.graphName, cypherStmt, columns, params) # def queryCypher(self, cypherStmt:str, columns:list=None , params:tuple=None) -> ext.cursor : # return queryCypher(self.connection, self.graphName, cypherStmt, columns, params) age-PG16-v1.5.0-rc0/drivers/python/age/builder.py000066400000000000000000000153521454606241200213410ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. from . import gen from .gen.AgtypeLexer import AgtypeLexer from .gen.AgtypeParser import AgtypeParser from .gen.AgtypeVisitor import AgtypeVisitor from .models import * from .exceptions import * from antlr4 import * from antlr4.tree.Tree import * from decimal import Decimal resultHandler = None class ResultHandler: def parse(ageData): pass def newResultHandler(query=""): resultHandler = Antlr4ResultHandler(None, query) return resultHandler def parseAgeValue(value, cursor=None): if value is None: return None global resultHandler if (resultHandler == None): resultHandler = Antlr4ResultHandler(None) try: return resultHandler.parse(value) except Exception as ex: raise AGTypeError(value) class Antlr4ResultHandler(ResultHandler): def __init__(self, vertexCache, query=None): self.lexer = AgtypeLexer() self.parser = AgtypeParser(None) self.visitor = ResultVisitor(vertexCache) def parse(self, ageData): if not ageData: return None # print("Parse::", ageData) self.lexer.inputStream = InputStream(ageData) self.parser.setTokenStream(CommonTokenStream(self.lexer)) self.parser.reset() tree = self.parser.agType() parsed = tree.accept(self.visitor) return parsed # print raw result String class DummyResultHandler(ResultHandler): def parse(self, ageData): print(ageData) # default agType visitor class ResultVisitor(AgtypeVisitor): vertexCache = None def __init__(self, cache) -> None: super().__init__() self.vertexCache = cache def visitAgType(self, ctx:AgtypeParser.AgTypeContext): agVal = ctx.agValue() if agVal != None: obj = ctx.agValue().accept(self) return obj return None def visitAgValue(self, ctx:AgtypeParser.AgValueContext): annoCtx = ctx.typeAnnotation() valueCtx = ctx.value() if annoCtx is not None: annoCtx.accept(self) anno = annoCtx.IDENT().getText() return self.handleAnnotatedValue(anno, valueCtx) else: return valueCtx.accept(self) # Visit a parse tree produced by AgtypeParser#StringValue. def visitStringValue(self, ctx:AgtypeParser.StringValueContext): return ctx.STRING().getText().strip('"') # Visit a parse tree produced by AgtypeParser#IntegerValue. def visitIntegerValue(self, ctx:AgtypeParser.IntegerValueContext): return int(ctx.INTEGER().getText()) # Visit a parse tree produced by AgtypeParser#floatLiteral. def visitFloatLiteral(self, ctx:AgtypeParser.FloatLiteralContext): c = ctx.getChild(0) tp = c.symbol.type text = ctx.getText() if tp == AgtypeParser.RegularFloat: return float(text) elif tp == AgtypeParser.ExponentFloat: return float(text) else: if text == 'NaN': return float('nan') elif text == '-Infinity': return float('-inf') elif text == 'Infinity': return float('inf') else: return Exception("Unknown float expression:"+text) # Visit a parse tree produced by AgtypeParser#TrueBoolean. def visitTrueBoolean(self, ctx:AgtypeParser.TrueBooleanContext): return True # Visit a parse tree produced by AgtypeParser#FalseBoolean. def visitFalseBoolean(self, ctx:AgtypeParser.FalseBooleanContext): return False # Visit a parse tree produced by AgtypeParser#NullValue. def visitNullValue(self, ctx:AgtypeParser.NullValueContext): return None # Visit a parse tree produced by AgtypeParser#obj. def visitObj(self, ctx:AgtypeParser.ObjContext): obj = dict() for c in ctx.getChildren(): if isinstance(c, AgtypeParser.PairContext): namVal = self.visitPair(c) name = namVal[0] valCtx = namVal[1] val = valCtx.accept(self) obj[name] = val return obj # Visit a parse tree produced by AgtypeParser#pair. def visitPair(self, ctx:AgtypeParser.PairContext): self.visitChildren(ctx) return (ctx.STRING().getText().strip('"') , ctx.agValue()) # Visit a parse tree produced by AgtypeParser#array. def visitArray(self, ctx:AgtypeParser.ArrayContext): li = list() for c in ctx.getChildren(): if not isinstance(c, TerminalNode): val = c.accept(self) li.append(val) return li def handleAnnotatedValue(self, anno:str, ctx:ParserRuleContext): if anno == "numeric": return Decimal(ctx.getText()) elif anno == "vertex": dict = ctx.accept(self) vid = dict["id"] vertex = None if self.vertexCache != None and vid in self.vertexCache : vertex = self.vertexCache[vid] else: vertex = Vertex() vertex.id = dict["id"] vertex.label = dict["label"] vertex.properties = dict["properties"] if self.vertexCache != None: self.vertexCache[vid] = vertex return vertex elif anno == "edge": edge = Edge() dict = ctx.accept(self) edge.id = dict["id"] edge.label = dict["label"] edge.end_id = dict["end_id"] edge.start_id = dict["start_id"] edge.properties = dict["properties"] return edge elif anno == "path": arr = ctx.accept(self) path = Path(arr) return path return ctx.accept(self) age-PG16-v1.5.0-rc0/drivers/python/age/exceptions.py000066400000000000000000000036601454606241200220730ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. from psycopg2.errors import * class AgeNotSet(Exception): def __init__(self, name): self.name = name def __repr__(self) : return 'AGE extension is not set.' class GraphNotFound(Exception): def __init__(self, name): self.name = name def __repr__(self) : return 'Graph[' + self.name + '] does not exist.' class GraphAlreadyExists(Exception): def __init__(self, name): self.name = name def __repr__(self) : return 'Graph[' + self.name + '] already exists.' class GraphNotSet(Exception): def __repr__(self) : return 'Graph name is not set.' class NoConnection(Exception): def __repr__(self) : return 'No Connection' class NoCursor(Exception): def __repr__(self) : return 'No Cursor' class SqlExecutionError(Exception): def __init__(self, msg, cause): self.msg = msg self.cause = cause super().__init__(msg, cause) def __repr__(self) : return 'SqlExecution [' + self.msg + ']' class AGTypeError(Exception): def __init__(self, msg, cause): self.msg = msg self.cause = cause super().__init__(msg, cause) age-PG16-v1.5.0-rc0/drivers/python/age/gen/000077500000000000000000000000001454606241200201045ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/python/age/gen/AgtypeLexer.py000066400000000000000000000164671454606241200227250ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # Generated from ../Agtype.g4 by ANTLR 4.11.1 from antlr4 import * from io import StringIO import sys if sys.version_info[1] > 5: from typing import TextIO else: from typing.io import TextIO def serializedATN(): return [ 4,0,19,183,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5, 2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2, 13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7, 19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,1, 0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1, 3,1,3,1,4,1,4,1,5,1,5,1,6,1,6,1,7,1,7,1,8,1,8,1,9,1,9,1,9,1,10,1, 10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1, 12,1,13,1,13,5,13,102,8,13,10,13,12,13,105,9,13,1,14,1,14,1,14,5, 14,110,8,14,10,14,12,14,113,9,14,1,14,1,14,1,15,1,15,1,15,3,15,120, 8,15,1,16,1,16,1,16,1,16,1,16,1,16,1,17,1,17,1,18,1,18,1,19,3,19, 133,8,19,1,19,1,19,1,20,1,20,1,20,5,20,140,8,20,10,20,12,20,143, 9,20,3,20,145,8,20,1,21,3,21,148,8,21,1,21,1,21,1,21,1,22,3,22,154, 8,22,1,22,1,22,3,22,158,8,22,1,22,1,22,1,23,1,23,4,23,164,8,23,11, 23,12,23,165,1,24,1,24,3,24,170,8,24,1,24,4,24,173,8,24,11,24,12, 24,174,1,25,4,25,178,8,25,11,25,12,25,179,1,25,1,25,0,0,26,1,1,3, 2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14, 29,15,31,0,33,0,35,0,37,0,39,16,41,0,43,17,45,18,47,0,49,0,51,19, 1,0,10,3,0,65,90,95,95,97,122,5,0,36,36,48,57,65,90,95,95,97,122, 8,0,34,34,47,47,92,92,98,98,102,102,110,110,114,114,116,116,3,0, 48,57,65,70,97,102,3,0,0,31,34,34,92,92,1,0,49,57,1,0,48,57,2,0, 69,69,101,101,2,0,43,43,45,45,3,0,9,10,13,13,32,32,189,0,1,1,0,0, 0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0, 13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0, 23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,39,1,0,0,0,0, 43,1,0,0,0,0,45,1,0,0,0,0,51,1,0,0,0,1,53,1,0,0,0,3,58,1,0,0,0,5, 64,1,0,0,0,7,69,1,0,0,0,9,71,1,0,0,0,11,73,1,0,0,0,13,75,1,0,0,0, 15,77,1,0,0,0,17,79,1,0,0,0,19,81,1,0,0,0,21,84,1,0,0,0,23,86,1, 0,0,0,25,95,1,0,0,0,27,99,1,0,0,0,29,106,1,0,0,0,31,116,1,0,0,0, 33,121,1,0,0,0,35,127,1,0,0,0,37,129,1,0,0,0,39,132,1,0,0,0,41,144, 1,0,0,0,43,147,1,0,0,0,45,153,1,0,0,0,47,161,1,0,0,0,49,167,1,0, 0,0,51,177,1,0,0,0,53,54,5,116,0,0,54,55,5,114,0,0,55,56,5,117,0, 0,56,57,5,101,0,0,57,2,1,0,0,0,58,59,5,102,0,0,59,60,5,97,0,0,60, 61,5,108,0,0,61,62,5,115,0,0,62,63,5,101,0,0,63,4,1,0,0,0,64,65, 5,110,0,0,65,66,5,117,0,0,66,67,5,108,0,0,67,68,5,108,0,0,68,6,1, 0,0,0,69,70,5,123,0,0,70,8,1,0,0,0,71,72,5,44,0,0,72,10,1,0,0,0, 73,74,5,125,0,0,74,12,1,0,0,0,75,76,5,58,0,0,76,14,1,0,0,0,77,78, 5,91,0,0,78,16,1,0,0,0,79,80,5,93,0,0,80,18,1,0,0,0,81,82,5,58,0, 0,82,83,5,58,0,0,83,20,1,0,0,0,84,85,5,45,0,0,85,22,1,0,0,0,86,87, 5,73,0,0,87,88,5,110,0,0,88,89,5,102,0,0,89,90,5,105,0,0,90,91,5, 110,0,0,91,92,5,105,0,0,92,93,5,116,0,0,93,94,5,121,0,0,94,24,1, 0,0,0,95,96,5,78,0,0,96,97,5,97,0,0,97,98,5,78,0,0,98,26,1,0,0,0, 99,103,7,0,0,0,100,102,7,1,0,0,101,100,1,0,0,0,102,105,1,0,0,0,103, 101,1,0,0,0,103,104,1,0,0,0,104,28,1,0,0,0,105,103,1,0,0,0,106,111, 5,34,0,0,107,110,3,31,15,0,108,110,3,37,18,0,109,107,1,0,0,0,109, 108,1,0,0,0,110,113,1,0,0,0,111,109,1,0,0,0,111,112,1,0,0,0,112, 114,1,0,0,0,113,111,1,0,0,0,114,115,5,34,0,0,115,30,1,0,0,0,116, 119,5,92,0,0,117,120,7,2,0,0,118,120,3,33,16,0,119,117,1,0,0,0,119, 118,1,0,0,0,120,32,1,0,0,0,121,122,5,117,0,0,122,123,3,35,17,0,123, 124,3,35,17,0,124,125,3,35,17,0,125,126,3,35,17,0,126,34,1,0,0,0, 127,128,7,3,0,0,128,36,1,0,0,0,129,130,8,4,0,0,130,38,1,0,0,0,131, 133,5,45,0,0,132,131,1,0,0,0,132,133,1,0,0,0,133,134,1,0,0,0,134, 135,3,41,20,0,135,40,1,0,0,0,136,145,5,48,0,0,137,141,7,5,0,0,138, 140,7,6,0,0,139,138,1,0,0,0,140,143,1,0,0,0,141,139,1,0,0,0,141, 142,1,0,0,0,142,145,1,0,0,0,143,141,1,0,0,0,144,136,1,0,0,0,144, 137,1,0,0,0,145,42,1,0,0,0,146,148,5,45,0,0,147,146,1,0,0,0,147, 148,1,0,0,0,148,149,1,0,0,0,149,150,3,41,20,0,150,151,3,47,23,0, 151,44,1,0,0,0,152,154,5,45,0,0,153,152,1,0,0,0,153,154,1,0,0,0, 154,155,1,0,0,0,155,157,3,41,20,0,156,158,3,47,23,0,157,156,1,0, 0,0,157,158,1,0,0,0,158,159,1,0,0,0,159,160,3,49,24,0,160,46,1,0, 0,0,161,163,5,46,0,0,162,164,7,6,0,0,163,162,1,0,0,0,164,165,1,0, 0,0,165,163,1,0,0,0,165,166,1,0,0,0,166,48,1,0,0,0,167,169,7,7,0, 0,168,170,7,8,0,0,169,168,1,0,0,0,169,170,1,0,0,0,170,172,1,0,0, 0,171,173,7,6,0,0,172,171,1,0,0,0,173,174,1,0,0,0,174,172,1,0,0, 0,174,175,1,0,0,0,175,50,1,0,0,0,176,178,7,9,0,0,177,176,1,0,0,0, 178,179,1,0,0,0,179,177,1,0,0,0,179,180,1,0,0,0,180,181,1,0,0,0, 181,182,6,25,0,0,182,52,1,0,0,0,15,0,103,109,111,119,132,141,144, 147,153,157,165,169,174,179,1,6,0,0 ] class AgtypeLexer(Lexer): atn = ATNDeserializer().deserialize(serializedATN()) decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] T__0 = 1 T__1 = 2 T__2 = 3 T__3 = 4 T__4 = 5 T__5 = 6 T__6 = 7 T__7 = 8 T__8 = 9 T__9 = 10 T__10 = 11 T__11 = 12 T__12 = 13 IDENT = 14 STRING = 15 INTEGER = 16 RegularFloat = 17 ExponentFloat = 18 WS = 19 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] modeNames = [ "DEFAULT_MODE" ] literalNames = [ "", "'true'", "'false'", "'null'", "'{'", "','", "'}'", "':'", "'['", "']'", "'::'", "'-'", "'Infinity'", "'NaN'" ] symbolicNames = [ "", "IDENT", "STRING", "INTEGER", "RegularFloat", "ExponentFloat", "WS" ] ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "IDENT", "STRING", "ESC", "UNICODE", "HEX", "SAFECODEPOINT", "INTEGER", "INT", "RegularFloat", "ExponentFloat", "DECIMAL", "SCIENTIFIC", "WS" ] grammarFileName = "Agtype.g4" def __init__(self, input=None, output:TextIO = sys.stdout): super().__init__(input, output) self.checkVersion("4.11.1") self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) self._actions = None self._predicates = None age-PG16-v1.5.0-rc0/drivers/python/age/gen/AgtypeListener.py000066400000000000000000000123141454606241200234160ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # Generated from ../Agtype.g4 by ANTLR 4.11.1 from antlr4 import * if __name__ is not None and "." in __name__: from .AgtypeParser import AgtypeParser else: from AgtypeParser import AgtypeParser # This class defines a complete listener for a parse tree produced by AgtypeParser. class AgtypeListener(ParseTreeListener): # Enter a parse tree produced by AgtypeParser#agType. def enterAgType(self, ctx:AgtypeParser.AgTypeContext): pass # Exit a parse tree produced by AgtypeParser#agType. def exitAgType(self, ctx:AgtypeParser.AgTypeContext): pass # Enter a parse tree produced by AgtypeParser#agValue. def enterAgValue(self, ctx:AgtypeParser.AgValueContext): pass # Exit a parse tree produced by AgtypeParser#agValue. def exitAgValue(self, ctx:AgtypeParser.AgValueContext): pass # Enter a parse tree produced by AgtypeParser#StringValue. def enterStringValue(self, ctx:AgtypeParser.StringValueContext): pass # Exit a parse tree produced by AgtypeParser#StringValue. def exitStringValue(self, ctx:AgtypeParser.StringValueContext): pass # Enter a parse tree produced by AgtypeParser#IntegerValue. def enterIntegerValue(self, ctx:AgtypeParser.IntegerValueContext): pass # Exit a parse tree produced by AgtypeParser#IntegerValue. def exitIntegerValue(self, ctx:AgtypeParser.IntegerValueContext): pass # Enter a parse tree produced by AgtypeParser#FloatValue. def enterFloatValue(self, ctx:AgtypeParser.FloatValueContext): pass # Exit a parse tree produced by AgtypeParser#FloatValue. def exitFloatValue(self, ctx:AgtypeParser.FloatValueContext): pass # Enter a parse tree produced by AgtypeParser#TrueBoolean. def enterTrueBoolean(self, ctx:AgtypeParser.TrueBooleanContext): pass # Exit a parse tree produced by AgtypeParser#TrueBoolean. def exitTrueBoolean(self, ctx:AgtypeParser.TrueBooleanContext): pass # Enter a parse tree produced by AgtypeParser#FalseBoolean. def enterFalseBoolean(self, ctx:AgtypeParser.FalseBooleanContext): pass # Exit a parse tree produced by AgtypeParser#FalseBoolean. def exitFalseBoolean(self, ctx:AgtypeParser.FalseBooleanContext): pass # Enter a parse tree produced by AgtypeParser#NullValue. def enterNullValue(self, ctx:AgtypeParser.NullValueContext): pass # Exit a parse tree produced by AgtypeParser#NullValue. def exitNullValue(self, ctx:AgtypeParser.NullValueContext): pass # Enter a parse tree produced by AgtypeParser#ObjectValue. def enterObjectValue(self, ctx:AgtypeParser.ObjectValueContext): pass # Exit a parse tree produced by AgtypeParser#ObjectValue. def exitObjectValue(self, ctx:AgtypeParser.ObjectValueContext): pass # Enter a parse tree produced by AgtypeParser#ArrayValue. def enterArrayValue(self, ctx:AgtypeParser.ArrayValueContext): pass # Exit a parse tree produced by AgtypeParser#ArrayValue. def exitArrayValue(self, ctx:AgtypeParser.ArrayValueContext): pass # Enter a parse tree produced by AgtypeParser#obj. def enterObj(self, ctx:AgtypeParser.ObjContext): pass # Exit a parse tree produced by AgtypeParser#obj. def exitObj(self, ctx:AgtypeParser.ObjContext): pass # Enter a parse tree produced by AgtypeParser#pair. def enterPair(self, ctx:AgtypeParser.PairContext): pass # Exit a parse tree produced by AgtypeParser#pair. def exitPair(self, ctx:AgtypeParser.PairContext): pass # Enter a parse tree produced by AgtypeParser#array. def enterArray(self, ctx:AgtypeParser.ArrayContext): pass # Exit a parse tree produced by AgtypeParser#array. def exitArray(self, ctx:AgtypeParser.ArrayContext): pass # Enter a parse tree produced by AgtypeParser#typeAnnotation. def enterTypeAnnotation(self, ctx:AgtypeParser.TypeAnnotationContext): pass # Exit a parse tree produced by AgtypeParser#typeAnnotation. def exitTypeAnnotation(self, ctx:AgtypeParser.TypeAnnotationContext): pass # Enter a parse tree produced by AgtypeParser#floatLiteral. def enterFloatLiteral(self, ctx:AgtypeParser.FloatLiteralContext): pass # Exit a parse tree produced by AgtypeParser#floatLiteral. def exitFloatLiteral(self, ctx:AgtypeParser.FloatLiteralContext): pass del AgtypeParserage-PG16-v1.5.0-rc0/drivers/python/age/gen/AgtypeParser.py000066400000000000000000000703421454606241200230720ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # Generated from ../Agtype.g4 by ANTLR 4.11.1 # encoding: utf-8 from antlr4 import * from io import StringIO import sys if sys.version_info[1] > 5: from typing import TextIO else: from typing.io import TextIO def serializedATN(): return [ 4,1,19,80,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7, 6,2,7,7,7,1,0,1,0,1,0,1,1,1,1,3,1,22,8,1,1,2,1,2,1,2,1,2,1,2,1,2, 1,2,1,2,3,2,32,8,2,1,3,1,3,1,3,1,3,5,3,38,8,3,10,3,12,3,41,9,3,1, 3,1,3,1,3,1,3,3,3,47,8,3,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,5,5,57, 8,5,10,5,12,5,60,9,5,1,5,1,5,1,5,1,5,3,5,66,8,5,1,6,1,6,1,6,1,7, 1,7,1,7,3,7,74,8,7,1,7,1,7,3,7,78,8,7,1,7,0,0,8,0,2,4,6,8,10,12, 14,0,0,87,0,16,1,0,0,0,2,19,1,0,0,0,4,31,1,0,0,0,6,46,1,0,0,0,8, 48,1,0,0,0,10,65,1,0,0,0,12,67,1,0,0,0,14,77,1,0,0,0,16,17,3,2,1, 0,17,18,5,0,0,1,18,1,1,0,0,0,19,21,3,4,2,0,20,22,3,12,6,0,21,20, 1,0,0,0,21,22,1,0,0,0,22,3,1,0,0,0,23,32,5,15,0,0,24,32,5,16,0,0, 25,32,3,14,7,0,26,32,5,1,0,0,27,32,5,2,0,0,28,32,5,3,0,0,29,32,3, 6,3,0,30,32,3,10,5,0,31,23,1,0,0,0,31,24,1,0,0,0,31,25,1,0,0,0,31, 26,1,0,0,0,31,27,1,0,0,0,31,28,1,0,0,0,31,29,1,0,0,0,31,30,1,0,0, 0,32,5,1,0,0,0,33,34,5,4,0,0,34,39,3,8,4,0,35,36,5,5,0,0,36,38,3, 8,4,0,37,35,1,0,0,0,38,41,1,0,0,0,39,37,1,0,0,0,39,40,1,0,0,0,40, 42,1,0,0,0,41,39,1,0,0,0,42,43,5,6,0,0,43,47,1,0,0,0,44,45,5,4,0, 0,45,47,5,6,0,0,46,33,1,0,0,0,46,44,1,0,0,0,47,7,1,0,0,0,48,49,5, 15,0,0,49,50,5,7,0,0,50,51,3,2,1,0,51,9,1,0,0,0,52,53,5,8,0,0,53, 58,3,2,1,0,54,55,5,5,0,0,55,57,3,2,1,0,56,54,1,0,0,0,57,60,1,0,0, 0,58,56,1,0,0,0,58,59,1,0,0,0,59,61,1,0,0,0,60,58,1,0,0,0,61,62, 5,9,0,0,62,66,1,0,0,0,63,64,5,8,0,0,64,66,5,9,0,0,65,52,1,0,0,0, 65,63,1,0,0,0,66,11,1,0,0,0,67,68,5,10,0,0,68,69,5,14,0,0,69,13, 1,0,0,0,70,78,5,17,0,0,71,78,5,18,0,0,72,74,5,11,0,0,73,72,1,0,0, 0,73,74,1,0,0,0,74,75,1,0,0,0,75,78,5,12,0,0,76,78,5,13,0,0,77,70, 1,0,0,0,77,71,1,0,0,0,77,73,1,0,0,0,77,76,1,0,0,0,78,15,1,0,0,0, 8,21,31,39,46,58,65,73,77 ] class AgtypeParser ( Parser ): grammarFileName = "Agtype.g4" atn = ATNDeserializer().deserialize(serializedATN()) decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] sharedContextCache = PredictionContextCache() literalNames = [ "", "'true'", "'false'", "'null'", "'{'", "','", "'}'", "':'", "'['", "']'", "'::'", "'-'", "'Infinity'", "'NaN'" ] symbolicNames = [ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "IDENT", "STRING", "INTEGER", "RegularFloat", "ExponentFloat", "WS" ] RULE_agType = 0 RULE_agValue = 1 RULE_value = 2 RULE_obj = 3 RULE_pair = 4 RULE_array = 5 RULE_typeAnnotation = 6 RULE_floatLiteral = 7 ruleNames = [ "agType", "agValue", "value", "obj", "pair", "array", "typeAnnotation", "floatLiteral" ] EOF = Token.EOF T__0=1 T__1=2 T__2=3 T__3=4 T__4=5 T__5=6 T__6=7 T__7=8 T__8=9 T__9=10 T__10=11 T__11=12 T__12=13 IDENT=14 STRING=15 INTEGER=16 RegularFloat=17 ExponentFloat=18 WS=19 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) self.checkVersion("4.11.1") self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache) self._predicates = None class AgTypeContext(ParserRuleContext): __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser def agValue(self): return self.getTypedRuleContext(AgtypeParser.AgValueContext,0) def EOF(self): return self.getToken(AgtypeParser.EOF, 0) def getRuleIndex(self): return AgtypeParser.RULE_agType def enterRule(self, listener:ParseTreeListener): if hasattr( listener, "enterAgType" ): listener.enterAgType(self) def exitRule(self, listener:ParseTreeListener): if hasattr( listener, "exitAgType" ): listener.exitAgType(self) def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitAgType" ): return visitor.visitAgType(self) else: return visitor.visitChildren(self) def agType(self): localctx = AgtypeParser.AgTypeContext(self, self._ctx, self.state) self.enterRule(localctx, 0, self.RULE_agType) try: self.enterOuterAlt(localctx, 1) self.state = 16 self.agValue() self.state = 17 self.match(AgtypeParser.EOF) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) self._errHandler.recover(self, re) finally: self.exitRule() return localctx class AgValueContext(ParserRuleContext): __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser def value(self): return self.getTypedRuleContext(AgtypeParser.ValueContext,0) def typeAnnotation(self): return self.getTypedRuleContext(AgtypeParser.TypeAnnotationContext,0) def getRuleIndex(self): return AgtypeParser.RULE_agValue def enterRule(self, listener:ParseTreeListener): if hasattr( listener, "enterAgValue" ): listener.enterAgValue(self) def exitRule(self, listener:ParseTreeListener): if hasattr( listener, "exitAgValue" ): listener.exitAgValue(self) def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitAgValue" ): return visitor.visitAgValue(self) else: return visitor.visitChildren(self) def agValue(self): localctx = AgtypeParser.AgValueContext(self, self._ctx, self.state) self.enterRule(localctx, 2, self.RULE_agValue) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) self.state = 19 self.value() self.state = 21 self._errHandler.sync(self) _la = self._input.LA(1) if _la==10: self.state = 20 self.typeAnnotation() except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) self._errHandler.recover(self, re) finally: self.exitRule() return localctx class ValueContext(ParserRuleContext): __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser def getRuleIndex(self): return AgtypeParser.RULE_value def copyFrom(self, ctx:ParserRuleContext): super().copyFrom(ctx) class NullValueContext(ValueContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a AgtypeParser.ValueContext super().__init__(parser) self.copyFrom(ctx) def enterRule(self, listener:ParseTreeListener): if hasattr( listener, "enterNullValue" ): listener.enterNullValue(self) def exitRule(self, listener:ParseTreeListener): if hasattr( listener, "exitNullValue" ): listener.exitNullValue(self) def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitNullValue" ): return visitor.visitNullValue(self) else: return visitor.visitChildren(self) class ObjectValueContext(ValueContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a AgtypeParser.ValueContext super().__init__(parser) self.copyFrom(ctx) def obj(self): return self.getTypedRuleContext(AgtypeParser.ObjContext,0) def enterRule(self, listener:ParseTreeListener): if hasattr( listener, "enterObjectValue" ): listener.enterObjectValue(self) def exitRule(self, listener:ParseTreeListener): if hasattr( listener, "exitObjectValue" ): listener.exitObjectValue(self) def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitObjectValue" ): return visitor.visitObjectValue(self) else: return visitor.visitChildren(self) class IntegerValueContext(ValueContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a AgtypeParser.ValueContext super().__init__(parser) self.copyFrom(ctx) def INTEGER(self): return self.getToken(AgtypeParser.INTEGER, 0) def enterRule(self, listener:ParseTreeListener): if hasattr( listener, "enterIntegerValue" ): listener.enterIntegerValue(self) def exitRule(self, listener:ParseTreeListener): if hasattr( listener, "exitIntegerValue" ): listener.exitIntegerValue(self) def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitIntegerValue" ): return visitor.visitIntegerValue(self) else: return visitor.visitChildren(self) class TrueBooleanContext(ValueContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a AgtypeParser.ValueContext super().__init__(parser) self.copyFrom(ctx) def enterRule(self, listener:ParseTreeListener): if hasattr( listener, "enterTrueBoolean" ): listener.enterTrueBoolean(self) def exitRule(self, listener:ParseTreeListener): if hasattr( listener, "exitTrueBoolean" ): listener.exitTrueBoolean(self) def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitTrueBoolean" ): return visitor.visitTrueBoolean(self) else: return visitor.visitChildren(self) class FalseBooleanContext(ValueContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a AgtypeParser.ValueContext super().__init__(parser) self.copyFrom(ctx) def enterRule(self, listener:ParseTreeListener): if hasattr( listener, "enterFalseBoolean" ): listener.enterFalseBoolean(self) def exitRule(self, listener:ParseTreeListener): if hasattr( listener, "exitFalseBoolean" ): listener.exitFalseBoolean(self) def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitFalseBoolean" ): return visitor.visitFalseBoolean(self) else: return visitor.visitChildren(self) class FloatValueContext(ValueContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a AgtypeParser.ValueContext super().__init__(parser) self.copyFrom(ctx) def floatLiteral(self): return self.getTypedRuleContext(AgtypeParser.FloatLiteralContext,0) def enterRule(self, listener:ParseTreeListener): if hasattr( listener, "enterFloatValue" ): listener.enterFloatValue(self) def exitRule(self, listener:ParseTreeListener): if hasattr( listener, "exitFloatValue" ): listener.exitFloatValue(self) def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitFloatValue" ): return visitor.visitFloatValue(self) else: return visitor.visitChildren(self) class StringValueContext(ValueContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a AgtypeParser.ValueContext super().__init__(parser) self.copyFrom(ctx) def STRING(self): return self.getToken(AgtypeParser.STRING, 0) def enterRule(self, listener:ParseTreeListener): if hasattr( listener, "enterStringValue" ): listener.enterStringValue(self) def exitRule(self, listener:ParseTreeListener): if hasattr( listener, "exitStringValue" ): listener.exitStringValue(self) def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitStringValue" ): return visitor.visitStringValue(self) else: return visitor.visitChildren(self) class ArrayValueContext(ValueContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a AgtypeParser.ValueContext super().__init__(parser) self.copyFrom(ctx) def array(self): return self.getTypedRuleContext(AgtypeParser.ArrayContext,0) def enterRule(self, listener:ParseTreeListener): if hasattr( listener, "enterArrayValue" ): listener.enterArrayValue(self) def exitRule(self, listener:ParseTreeListener): if hasattr( listener, "exitArrayValue" ): listener.exitArrayValue(self) def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitArrayValue" ): return visitor.visitArrayValue(self) else: return visitor.visitChildren(self) def value(self): localctx = AgtypeParser.ValueContext(self, self._ctx, self.state) self.enterRule(localctx, 4, self.RULE_value) try: self.state = 31 self._errHandler.sync(self) token = self._input.LA(1) if token in [15]: localctx = AgtypeParser.StringValueContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 23 self.match(AgtypeParser.STRING) pass elif token in [16]: localctx = AgtypeParser.IntegerValueContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 24 self.match(AgtypeParser.INTEGER) pass elif token in [11, 12, 13, 17, 18]: localctx = AgtypeParser.FloatValueContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 25 self.floatLiteral() pass elif token in [1]: localctx = AgtypeParser.TrueBooleanContext(self, localctx) self.enterOuterAlt(localctx, 4) self.state = 26 self.match(AgtypeParser.T__0) pass elif token in [2]: localctx = AgtypeParser.FalseBooleanContext(self, localctx) self.enterOuterAlt(localctx, 5) self.state = 27 self.match(AgtypeParser.T__1) pass elif token in [3]: localctx = AgtypeParser.NullValueContext(self, localctx) self.enterOuterAlt(localctx, 6) self.state = 28 self.match(AgtypeParser.T__2) pass elif token in [4]: localctx = AgtypeParser.ObjectValueContext(self, localctx) self.enterOuterAlt(localctx, 7) self.state = 29 self.obj() pass elif token in [8]: localctx = AgtypeParser.ArrayValueContext(self, localctx) self.enterOuterAlt(localctx, 8) self.state = 30 self.array() pass else: raise NoViableAltException(self) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) self._errHandler.recover(self, re) finally: self.exitRule() return localctx class ObjContext(ParserRuleContext): __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser def pair(self, i:int=None): if i is None: return self.getTypedRuleContexts(AgtypeParser.PairContext) else: return self.getTypedRuleContext(AgtypeParser.PairContext,i) def getRuleIndex(self): return AgtypeParser.RULE_obj def enterRule(self, listener:ParseTreeListener): if hasattr( listener, "enterObj" ): listener.enterObj(self) def exitRule(self, listener:ParseTreeListener): if hasattr( listener, "exitObj" ): listener.exitObj(self) def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitObj" ): return visitor.visitObj(self) else: return visitor.visitChildren(self) def obj(self): localctx = AgtypeParser.ObjContext(self, self._ctx, self.state) self.enterRule(localctx, 6, self.RULE_obj) self._la = 0 # Token type try: self.state = 46 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,3,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) self.state = 33 self.match(AgtypeParser.T__3) self.state = 34 self.pair() self.state = 39 self._errHandler.sync(self) _la = self._input.LA(1) while _la==5: self.state = 35 self.match(AgtypeParser.T__4) self.state = 36 self.pair() self.state = 41 self._errHandler.sync(self) _la = self._input.LA(1) self.state = 42 self.match(AgtypeParser.T__5) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) self.state = 44 self.match(AgtypeParser.T__3) self.state = 45 self.match(AgtypeParser.T__5) pass except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) self._errHandler.recover(self, re) finally: self.exitRule() return localctx class PairContext(ParserRuleContext): __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser def STRING(self): return self.getToken(AgtypeParser.STRING, 0) def agValue(self): return self.getTypedRuleContext(AgtypeParser.AgValueContext,0) def getRuleIndex(self): return AgtypeParser.RULE_pair def enterRule(self, listener:ParseTreeListener): if hasattr( listener, "enterPair" ): listener.enterPair(self) def exitRule(self, listener:ParseTreeListener): if hasattr( listener, "exitPair" ): listener.exitPair(self) def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitPair" ): return visitor.visitPair(self) else: return visitor.visitChildren(self) def pair(self): localctx = AgtypeParser.PairContext(self, self._ctx, self.state) self.enterRule(localctx, 8, self.RULE_pair) try: self.enterOuterAlt(localctx, 1) self.state = 48 self.match(AgtypeParser.STRING) self.state = 49 self.match(AgtypeParser.T__6) self.state = 50 self.agValue() except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) self._errHandler.recover(self, re) finally: self.exitRule() return localctx class ArrayContext(ParserRuleContext): __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser def agValue(self, i:int=None): if i is None: return self.getTypedRuleContexts(AgtypeParser.AgValueContext) else: return self.getTypedRuleContext(AgtypeParser.AgValueContext,i) def getRuleIndex(self): return AgtypeParser.RULE_array def enterRule(self, listener:ParseTreeListener): if hasattr( listener, "enterArray" ): listener.enterArray(self) def exitRule(self, listener:ParseTreeListener): if hasattr( listener, "exitArray" ): listener.exitArray(self) def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitArray" ): return visitor.visitArray(self) else: return visitor.visitChildren(self) def array(self): localctx = AgtypeParser.ArrayContext(self, self._ctx, self.state) self.enterRule(localctx, 10, self.RULE_array) self._la = 0 # Token type try: self.state = 65 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,5,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) self.state = 52 self.match(AgtypeParser.T__7) self.state = 53 self.agValue() self.state = 58 self._errHandler.sync(self) _la = self._input.LA(1) while _la==5: self.state = 54 self.match(AgtypeParser.T__4) self.state = 55 self.agValue() self.state = 60 self._errHandler.sync(self) _la = self._input.LA(1) self.state = 61 self.match(AgtypeParser.T__8) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) self.state = 63 self.match(AgtypeParser.T__7) self.state = 64 self.match(AgtypeParser.T__8) pass except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) self._errHandler.recover(self, re) finally: self.exitRule() return localctx class TypeAnnotationContext(ParserRuleContext): __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser def IDENT(self): return self.getToken(AgtypeParser.IDENT, 0) def getRuleIndex(self): return AgtypeParser.RULE_typeAnnotation def enterRule(self, listener:ParseTreeListener): if hasattr( listener, "enterTypeAnnotation" ): listener.enterTypeAnnotation(self) def exitRule(self, listener:ParseTreeListener): if hasattr( listener, "exitTypeAnnotation" ): listener.exitTypeAnnotation(self) def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitTypeAnnotation" ): return visitor.visitTypeAnnotation(self) else: return visitor.visitChildren(self) def typeAnnotation(self): localctx = AgtypeParser.TypeAnnotationContext(self, self._ctx, self.state) self.enterRule(localctx, 12, self.RULE_typeAnnotation) try: self.enterOuterAlt(localctx, 1) self.state = 67 self.match(AgtypeParser.T__9) self.state = 68 self.match(AgtypeParser.IDENT) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) self._errHandler.recover(self, re) finally: self.exitRule() return localctx class FloatLiteralContext(ParserRuleContext): __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser def RegularFloat(self): return self.getToken(AgtypeParser.RegularFloat, 0) def ExponentFloat(self): return self.getToken(AgtypeParser.ExponentFloat, 0) def getRuleIndex(self): return AgtypeParser.RULE_floatLiteral def enterRule(self, listener:ParseTreeListener): if hasattr( listener, "enterFloatLiteral" ): listener.enterFloatLiteral(self) def exitRule(self, listener:ParseTreeListener): if hasattr( listener, "exitFloatLiteral" ): listener.exitFloatLiteral(self) def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitFloatLiteral" ): return visitor.visitFloatLiteral(self) else: return visitor.visitChildren(self) def floatLiteral(self): localctx = AgtypeParser.FloatLiteralContext(self, self._ctx, self.state) self.enterRule(localctx, 14, self.RULE_floatLiteral) self._la = 0 # Token type try: self.state = 77 self._errHandler.sync(self) token = self._input.LA(1) if token in [17]: self.enterOuterAlt(localctx, 1) self.state = 70 self.match(AgtypeParser.RegularFloat) pass elif token in [18]: self.enterOuterAlt(localctx, 2) self.state = 71 self.match(AgtypeParser.ExponentFloat) pass elif token in [11, 12]: self.enterOuterAlt(localctx, 3) self.state = 73 self._errHandler.sync(self) _la = self._input.LA(1) if _la==11: self.state = 72 self.match(AgtypeParser.T__10) self.state = 75 self.match(AgtypeParser.T__11) pass elif token in [13]: self.enterOuterAlt(localctx, 4) self.state = 76 self.match(AgtypeParser.T__12) pass else: raise NoViableAltException(self) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) self._errHandler.recover(self, re) finally: self.exitRule() return localctx age-PG16-v1.5.0-rc0/drivers/python/age/gen/AgtypeVisitor.py000066400000000000000000000070741454606241200232770ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # Generated from ../Agtype.g4 by ANTLR 4.11.1 from antlr4 import * if __name__ is not None and "." in __name__: from .AgtypeParser import AgtypeParser else: from AgtypeParser import AgtypeParser # This class defines a complete generic visitor for a parse tree produced by AgtypeParser. class AgtypeVisitor(ParseTreeVisitor): # Visit a parse tree produced by AgtypeParser#agType. def visitAgType(self, ctx:AgtypeParser.AgTypeContext): return self.visitChildren(ctx) # Visit a parse tree produced by AgtypeParser#agValue. def visitAgValue(self, ctx:AgtypeParser.AgValueContext): return self.visitChildren(ctx) # Visit a parse tree produced by AgtypeParser#StringValue. def visitStringValue(self, ctx:AgtypeParser.StringValueContext): return self.visitChildren(ctx) # Visit a parse tree produced by AgtypeParser#IntegerValue. def visitIntegerValue(self, ctx:AgtypeParser.IntegerValueContext): return self.visitChildren(ctx) # Visit a parse tree produced by AgtypeParser#FloatValue. def visitFloatValue(self, ctx:AgtypeParser.FloatValueContext): return self.visitChildren(ctx) # Visit a parse tree produced by AgtypeParser#TrueBoolean. def visitTrueBoolean(self, ctx:AgtypeParser.TrueBooleanContext): return self.visitChildren(ctx) # Visit a parse tree produced by AgtypeParser#FalseBoolean. def visitFalseBoolean(self, ctx:AgtypeParser.FalseBooleanContext): return self.visitChildren(ctx) # Visit a parse tree produced by AgtypeParser#NullValue. def visitNullValue(self, ctx:AgtypeParser.NullValueContext): return self.visitChildren(ctx) # Visit a parse tree produced by AgtypeParser#ObjectValue. def visitObjectValue(self, ctx:AgtypeParser.ObjectValueContext): return self.visitChildren(ctx) # Visit a parse tree produced by AgtypeParser#ArrayValue. def visitArrayValue(self, ctx:AgtypeParser.ArrayValueContext): return self.visitChildren(ctx) # Visit a parse tree produced by AgtypeParser#obj. def visitObj(self, ctx:AgtypeParser.ObjContext): return self.visitChildren(ctx) # Visit a parse tree produced by AgtypeParser#pair. def visitPair(self, ctx:AgtypeParser.PairContext): return self.visitChildren(ctx) # Visit a parse tree produced by AgtypeParser#array. def visitArray(self, ctx:AgtypeParser.ArrayContext): return self.visitChildren(ctx) # Visit a parse tree produced by AgtypeParser#typeAnnotation. def visitTypeAnnotation(self, ctx:AgtypeParser.TypeAnnotationContext): return self.visitChildren(ctx) # Visit a parse tree produced by AgtypeParser#floatLiteral. def visitFloatLiteral(self, ctx:AgtypeParser.FloatLiteralContext): return self.visitChildren(ctx) del AgtypeParserage-PG16-v1.5.0-rc0/drivers/python/age/gen/__init__.py000066400000000000000000000014131454606241200222140ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. age-PG16-v1.5.0-rc0/drivers/python/age/models.py000066400000000000000000000165101454606241200211730ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. import json from io import StringIO TP_NONE = 0 TP_VERTEX = 1 TP_EDGE = 2 TP_PATH = 3 class Graph(): def __init__(self, stmt=None) -> None: self.statement = stmt self.rows = list() self.vertices = dict() def __iter__(self): return self.rows.__iter__() def __len__(self): return self.rows.__len__() def __getitem__(self,index): return self.rows[index] def size(self): return self.rows.__len__() def append(self, agObj): self.rows.append(agObj) def getVertices(self): return self.vertices def getVertex(self, id): if id in self.vertices: return self.vertices[id] else: return None class AGObj: @property def gtype(self): return TP_NONE class Path(AGObj): entities = [] def __init__(self, entities=None) -> None: self.entities = entities @property def gtype(self): return TP_PATH def __iter__(self): return self.entities.__iter__() def __len__(self): return self.entities.__len__() def __getitem__(self,index): return self.entities[index] def size(self): return self.entities.__len__() def append(self, agObj:AGObj ): self.entities.append(agObj) def __str__(self) -> str: return self.toString() def __repr__(self) -> str: return self.toString() def toString(self) -> str: buf = StringIO() buf.write("[") max = len(self.entities) idx = 0 while idx < max: if idx > 0: buf.write(",") self.entities[idx]._toString(buf) idx += 1 buf.write("]::PATH") return buf.getvalue() def toJson(self) -> str: buf = StringIO() buf.write("{\"gtype\": \"path\", \"elements\": [") max = len(self.entities) idx = 0 while idx < max: if idx > 0: buf.write(",") self.entities[idx]._toJson(buf) idx += 1 buf.write("]}") return buf.getvalue() class Vertex(AGObj): def __init__(self, id=None, label=None, properties=None) -> None: self.id = id self.label = label self.properties = properties @property def gtype(self): return TP_VERTEX def __setitem__(self,name, value): self.properties[name]=value def __getitem__(self,name): if name in self.properties: return self.properties[name] else: return None def __str__(self) -> str: return self.toString() def __repr__(self) -> str: return self.toString() def toString(self) -> str: return nodeToString(self) def _toString(self, buf): _nodeToString(self, buf) def toJson(self) -> str: return nodeToJson(self) def _toJson(self, buf): _nodeToJson(self, buf) class Edge(AGObj): def __init__(self, id=None, label=None, properties=None) -> None: self.id = id self.label = label self.start_id = None self.end_id = None self.properties = properties @property def gtype(self): return TP_EDGE def __setitem__(self,name, value): self.properties[name]=value def __getitem__(self,name): if name in self.properties: return self.properties[name] else: return None def __str__(self) -> str: return self.toString() def __repr__(self) -> str: return self.toString() def extraStrFormat(node, buf): if node.start_id != None: buf.write(", start_id:") buf.write(str(node.start_id)) if node.end_id != None: buf.write(", end_id:") buf.write(str(node.end_id)) def toString(self) -> str: return nodeToString(self, Edge.extraStrFormat) def _toString(self, buf): _nodeToString(self, buf, Edge.extraStrFormat) def extraJsonFormat(node, buf): if node.start_id != None: buf.write(", \"start_id\": \"") buf.write(str(node.start_id)) buf.write("\"") if node.end_id != None: buf.write(", \"end_id\": \"") buf.write(str(node.end_id)) buf.write("\"") def toJson(self) -> str: return nodeToJson(self, Edge.extraJsonFormat) def _toJson(self, buf): _nodeToJson(self, buf, Edge.extraJsonFormat) def nodeToString(node, extraFormatter=None): buf = StringIO() _nodeToString(node,buf,extraFormatter=extraFormatter) return buf.getvalue() def _nodeToString(node, buf, extraFormatter=None): buf.write("{") if node.label != None: buf.write("label:") buf.write(node.label) if node.id != None: buf.write(", id:") buf.write(str(node.id)) if node.properties != None: buf.write(", properties:{") for k,v in node.properties.items(): buf.write(k) buf.write(": ") buf.write(str(v)) buf.write(", ") buf.write("}") if extraFormatter != None: extraFormatter(node, buf) if node.gtype == TP_VERTEX: buf.write("}::VERTEX") if node.gtype == TP_EDGE: buf.write("}::EDGE") def nodeToJson(node, extraFormatter=None): buf = StringIO() _nodeToJson(node, buf, extraFormatter=extraFormatter) return buf.getvalue() def _nodeToJson(node, buf, extraFormatter=None): buf.write("{\"gtype\": ") if node.gtype == TP_VERTEX: buf.write("\"vertex\", ") if node.gtype == TP_EDGE: buf.write("\"edge\", ") if node.label != None: buf.write("\"label\":\"") buf.write(node.label) buf.write("\"") if node.id != None: buf.write(", \"id\":") buf.write(str(node.id)) if extraFormatter != None: extraFormatter(node, buf) if node.properties != None: buf.write(", \"properties\":{") for k,v in node.properties.items(): buf.write("\"") buf.write(k) buf.write("\": \"") buf.write(str(v)) buf.write("\", ") buf.write("}") buf.write("}") age-PG16-v1.5.0-rc0/drivers/python/antlr/000077500000000000000000000000001454606241200177175ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/python/antlr/README.md000066400000000000000000000011601454606241200211740ustar00rootroot00000000000000# ANTLR4 Python3 Agtype parser generation rules for apache-age Python driver for Apache AGE, graph extension for PostgreSQL. ### Build #### 1) Generate Agtype parser with ANTLR4 ``` # prerequisites : # - java over 8 # - download ANTLR4 from https://www.antlr.org/download/antlr-4.11.1-complete.jar # - java -cp antlr-4.11.1-complete.jar org.antlr.v4.Tool -Dlanguage=Python3 -visitor -o ../age/gen ../../Agtype.g4 ``` #### 2) Remove the *.interp & *.tokens files #### 3) Proceed to unit testing ``` python -m unittest -v test_age_py.py ``` ``` python -m unittest -v test_agtypes.py ` age-PG16-v1.5.0-rc0/drivers/python/requirements.txt000066400000000000000000000002401454606241200220570ustar00rootroot00000000000000psycopg2 --no-binary :all: psycopg2 antlr4_python3_runtime==4.11.1 setuptoolsage-PG16-v1.5.0-rc0/drivers/python/samples/000077500000000000000000000000001454606241200202435ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/drivers/python/samples/__init__.py000066400000000000000000000014141454606241200223540ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. age-PG16-v1.5.0-rc0/drivers/python/samples/apache-age-agtypes.ipynb000066400000000000000000000113521454606241200247350ustar00rootroot00000000000000{ "cells": [ { "cell_type": "code", "execution_count": null, "id": "6301516b-a3fa-48e2-a95f-0f79903a6cdd", "metadata": {}, "outputs": [], "source": [ "import unittest\n", "from decimal import Decimal\n", "import age \n", "\n", "resultHandler = age.newResultHandler()\n", " \n", "def evalExp(exp):\n", " value = resultHandler.parse(exp) \n", " print(type(value), \"|\", exp, \" --> \" ,value )\n", " \n", " " ] }, { "cell_type": "code", "execution_count": null, "id": "adf14fe9-692c-4701-86d4-8c84fd53d966", "metadata": {}, "outputs": [], "source": [ "\n", "mapStr = '{\"name\": \"Smith\", \"num\":123, \"yn\":true, \"bigInt\":123456789123456789123456789123456789::numeric}' \n", "arrStr = '[\"name\", \"Smith\", \"num\", 123, \"yn\", true, 123456789123456789123456789123456789.8888::numeric]' \n", "strStr = '\"abcd\"' \n", "intStr = '1234' \n", "floatStr = '1234.56789' \n", "numericStr1 = '12345678901234567890123456789123456789.789::numeric' \n", "numericStr2 = '12345678901234567890123456789123456789::numeric' \n", "boolStr = 'true' \n", "\n", "evalExp(mapStr)\n", "evalExp(arrStr)\n", "evalExp(strStr)\n", "evalExp(intStr)\n", "evalExp(floatStr)\n", "evalExp(numericStr1)\n", "evalExp(numericStr2)\n", "evalExp(boolStr)\n", "\n", "evalExp('-6.45161290322581e+46') \n", "evalExp('-123456789.99::numeric') \n", "evalExp('-6.45161290322581e+46::numeric') \n", "evalExp('1234') \n", "evalExp('NaN') \n", "evalExp('-Infinity') \n", "evalExp('Infinity') " ] }, { "cell_type": "code", "execution_count": null, "id": "8881804e-d71d-4704-b74c-376ed55be808", "metadata": {}, "outputs": [], "source": [ "vertexExp = '''{\"id\": 2251799813685425, \"label\": \"Person\", \n", " \"properties\": {\"name\": \"Smith\", \"numInt\":123, \"numFloat\": 384.23424, \n", " \"bigInt\":123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789::numeric, \n", " \"bigFloat\":123456789123456789123456789123456789.12345::numeric, \n", " \"yn\":true, \"nullVal\": null}}::vertex'''\n", "\n", "vertex = age.parseAgeValue(vertexExp)\n", "print(type(vertex.id), vertex.id)\n", "print(type(vertex.label), vertex.label)\n", "print(type(vertex[\"name\"]), vertex[\"name\"])\n", "print(type(vertex[\"numInt\"]), vertex[\"numInt\"])\n", "print(type(vertex[\"numFloat\"]), vertex[\"numFloat\"])\n", "print(type(vertex[\"bigInt\"]), vertex[\"bigInt\"])\n", "print(type(vertex[\"bigFloat\"]), vertex[\"bigFloat\"])\n", "print(type(vertex[\"yn\"]), vertex[\"yn\"])\n", "print(type(vertex[\"nullVal\"]), vertex[\"nullVal\"])" ] }, { "cell_type": "code", "execution_count": null, "id": "0a70e467-9587-4eb7-b97d-895223009bcc", "metadata": {}, "outputs": [], "source": [ "\n", "pathExp = '''[{\"id\": 2251799813685425, \"label\": \"Person\", \"properties\": {\"name\": \"Smith\"}}::vertex, \n", " {\"id\": 2533274790396576, \"label\": \"workWith\", \"end_id\": 2251799813685425, \"start_id\": 2251799813685424, \n", " \"properties\": {\"weight\": 3, \"bigFloat\":123456789123456789123456789.12345::numeric}}::edge, \n", " {\"id\": 2251799813685424, \"label\": \"Person\", \"properties\": {\"name\": \"Joe\"}}::vertex]::path'''\n", "\n", "path = age.parseAgeValue(pathExp)\n", "vertexStart = path[0]\n", "edge = path[1]\n", "vertexEnd = path[2]\n", "\n", "print(type(vertexStart.id), vertexStart.id)\n", "print(type(vertexStart.label), vertexStart.label)\n", "print(type(vertexStart[\"name\"]), vertexStart[\"name\"])\n", "\n", "print(type(edge.id), edge.id)\n", "print(type(edge.label), edge.label)\n", "print(type(edge[\"weight\"]), edge[\"weight\"])\n", "print(type(edge[\"bigFloat\"]), edge[\"bigFloat\"])\n", "\n", "print(type(vertexEnd.id), vertexEnd.id)\n", "print(type(vertexEnd.label), vertexEnd.label)\n", "print(type(vertexEnd[\"name\"]), vertexEnd[\"name\"])\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "id": "62b7273f-ac6c-4dec-af7e-0467daa140f4", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.2" } }, "nbformat": 4, "nbformat_minor": 5 } age-PG16-v1.5.0-rc0/drivers/python/samples/apache-age-basic.ipynb000066400000000000000000000173171454606241200243510ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "id": "2e236ac7-6f78-4a59-bed7-45f593d060c2", "metadata": {}, "source": [ "# Basic Samples : Agtype mapper for Psycopg2 driver\n", "\n", "You can make transactions and queries for PostgreSQL with Psycopg2.\n", "\n", "This module enable to mapping agtype to python class(Path, Vertex, Edge)\n", "\n", "## Connect to PostgreSQL and agType setting" ] }, { "cell_type": "code", "execution_count": null, "id": "98a5863c-1e79-438e-81d4-d1f5354a1bdb", "metadata": {}, "outputs": [], "source": [ "import psycopg2 \n", "import age\n", "\n", "GRAPH_NAME = \"test_graph\"\n", "conn = psycopg2.connect(host=\"172.17.0.2\", port=\"5432\", dbname=\"postgres\", user=\"postgres\", password=\"agens\")\n", "\n", "age.setUpAge(conn, GRAPH_NAME)\n" ] }, { "cell_type": "code", "execution_count": null, "id": "ebcf65a5-de7c-4224-aacc-2695c9e5f8d5", "metadata": {}, "outputs": [], "source": [ "with conn.cursor() as cursor:\n", " try :\n", " cursor.execute(\"\"\"SELECT * from cypher(%s, $$ CREATE (n:Person {name: 'Joe', title: 'Developer'}) $$) as (v agtype); \"\"\", (GRAPH_NAME,) )\n", " cursor.execute(\"\"\"SELECT * from cypher(%s, $$ CREATE (n:Person {name: 'Smith', title: 'Developer'}) $$) as (v agtype); \"\"\", (GRAPH_NAME,))\n", " cursor.execute(\"\"\"SELECT * from cypher(%s, $$ \n", " CREATE (n:Person {name: 'Tom', title: 'Manager'}) \n", " RETURN n\n", " $$) as (v agtype); \"\"\", (GRAPH_NAME,))\n", " for row in cursor:\n", " print(\"CREATED::\", row[0])\n", " \n", " \n", " cursor.execute(\"\"\"SELECT * from cypher(%s, $$ \n", " MATCH (a:Person {name: 'Joe'}), (b:Person {name: 'Smith'}) CREATE (a)-[r:workWith {weight: 5}]->(b)\n", " $$) as (v agtype); \"\"\", (GRAPH_NAME,))\n", " \n", " cursor.execute(\"\"\"SELECT * from cypher(%s, $$ \n", " MATCH (a:Person {name: 'Smith'}), (b:Person {name: 'Tom'}) CREATE (a)-[r:workWith {weight: 3}]->(b)\n", " $$) as (v agtype); \"\"\", (GRAPH_NAME,))\n", " \n", " # When data inserted or updated, You must commit.\n", " conn.commit()\n", " except Exception as ex:\n", " print(type(ex), ex)\n", " # if exception occurs, you must rollback all transaction. \n", " conn.rollback()\n", "\n", "with conn.cursor() as cursor:\n", " try:\n", " print(\"------- [Select Vertices] --------\")\n", " cursor.execute(\"\"\"SELECT * from cypher(%s, $$ MATCH (n) RETURN n $$) as (v agtype); \"\"\", (GRAPH_NAME,))\n", " for row in cursor:\n", " vertex = row[0]\n", " print(vertex.id, vertex.label, vertex[\"name\"], vertex[\"title\"])\n", " print(\"-->\", vertex)\n", " \n", " print(type(cursor))\n", " print(\"------- [Select Paths] --------\")\n", " cursor.execute(\"\"\"SELECT * from cypher(%s, $$ MATCH p=()-[]->() RETURN p LIMIT 10 $$) as (v agtype); \"\"\", (GRAPH_NAME,))\n", " for row in cursor:\n", " path = row[0]\n", " v1 = path[0]\n", " e1 = path[1]\n", " v2 = path[2]\n", " print(v1.gtype , v1[\"name\"], e1.gtype , e1.label, e1[\"weight\"], v2.gtype , v2[\"name\"])\n", " print(\"-->\", path)\n", " except Exception as ex:\n", " print(type(ex), ex)\n", " # if exception occurs, you must rollback even though just retrieving.\n", " conn.rollback()" ] }, { "cell_type": "code", "execution_count": null, "id": "f45f7c7d-2256-4aea-92f6-e0ad71017feb", "metadata": {}, "outputs": [], "source": [ "with conn.cursor() as cursor:\n", " try:\n", " cursor.execute(\"\"\"SELECT * from cypher(%s, $$ \n", " MATCH p=(a)-[b]->(c) RETURN a.name, label(b), c.name \n", " $$) as (a agtype, b agtype, c agtype); \"\"\", (GRAPH_NAME,))\n", " for row in cursor:\n", " print(row[0], row[1], row[2])\n", " print(\"-->\", row)\n", " except Exception as ex:\n", " print(ex)\n", " conn.rollback()" ] }, { "cell_type": "code", "execution_count": null, "id": "c40b9076-d45e-43e6-85ae-296ba68a3031", "metadata": {}, "outputs": [], "source": [ "with conn.cursor() as cursor:\n", " try :\n", " cursor.execute(\"\"\"SELECT * from cypher(%s, $$ \n", " CREATE (n:Person {name: 'Jack', title: 'Developer', score:-6.45161290322581e+46}) \n", " $$) as (v agtype); \"\"\", (GRAPH_NAME,) )\n", " cursor.execute(\"\"\"SELECT * from cypher(%s, $$ \n", " CREATE (n:Person {name: 'John', title: 'Developer'}) \n", " $$) as (v agtype); \"\"\", (GRAPH_NAME,))\n", "\n", " cursor.execute(\"\"\"SELECT * from cypher(%s, $$ \n", " MATCH (a:Person {name: 'Jack'}), (b:Person {name: 'John'}) \n", " CREATE (a)-[r:workWith {weight: 2}]->(b)\n", " $$) as (v agtype); \"\"\", (GRAPH_NAME,))\n", " \n", " # When data inserted or updated, You must commit \n", " conn.commit()\n", " except Exception as ex:\n", " print(ex)\n", " conn.rollback()\n", "\n", "with conn.cursor() as cursor:\n", " try :\n", " cursor.execute(\"\"\"SELECT * from cypher(%s, $$ \n", " MATCH p=(a )-[b]->(c) RETURN a , b, c \n", " $$) as (ta agtype, tb agtype, tc agtype); \"\"\", (GRAPH_NAME,))\n", " \n", " for row in cursor:\n", " print(row[0][\"name\"], row[1].properties, row[2][\"name\"])\n", " \n", " except Exception as ex:\n", " print(ex)\n", " conn.rollback()\n" ] }, { "cell_type": "code", "execution_count": null, "id": "29ffe1b7-86df-446a-9df0-635be25a9eea", "metadata": {}, "outputs": [], "source": [ "with conn.cursor() as cursor:\n", " try:\n", " cursor.execute(\"\"\"SELECT * from cypher(%s, $$ \n", " MATCH p=(a)-[b]->(c) RETURN p \n", " $$) as (v agtype); \"\"\", (GRAPH_NAME,))\n", " for row in cursor:\n", " path = row[0]\n", " print(path[0][\"name\"], path[1].id, path[1].properties, path[2][\"name\"])\n", " except Exception as ex:\n", " print(ex)\n", " conn.rollback()" ] }, { "cell_type": "code", "execution_count": null, "id": "428e6ddf-3958-49ff-af73-809b9a1ce42b", "metadata": {}, "outputs": [], "source": [ "age.deleteGraph(conn, GRAPH_NAME)\n", "conn.close()" ] }, { "cell_type": "code", "execution_count": null, "id": "a4819e39-9f37-4dd5-bdbd-337b6d289158", "metadata": {}, "outputs": [], "source": [ "\n", " " ] }, { "cell_type": "code", "execution_count": null, "id": "02041ef2-9761-4eb3-b270-ded23e1caa6d", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.2" } }, "nbformat": 4, "nbformat_minor": 5 } age-PG16-v1.5.0-rc0/drivers/python/samples/apache-age-note.ipynb000066400000000000000000001126661454606241200242400ustar00rootroot00000000000000{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "722ec93e-b87c-43d0-9c54-61b30933d892", "metadata": {}, "source": [ "# AGE Samples \n", "\n", "## Prepare\n", "```\n", "import age\n", "```\n", "## Connect to PostgreSQL(with AGE extension)\n", "* Connect to PostgreSQL server \n", "* Load AGE and register agtype to db session (Psycopg2 driver)\n", "* Check graph exists and set graph. If not, age make that.\n", "\n", "```\n", "ag = age.connect(graph=\"(graph name}\", host=\"{host}\", port=\"{port}\", dbname=\"{dbname}\", user=\"{db username}\", password=\"{password}\")\n", "\n", "# or \n", "DSN = \"host={host} port={port} dbname={dbname} user={db username} password={password}\"\n", "ag = age.connect(graph=\"(graph name}\", dsn=DSN)\n", "\n", "# or Without Graph Name : you can make a new graph later.\n", "\n", "ag = age.connect(host=\"{host}\", port=\"{port}\", dbname=\"{dbname}\", user=\"{db username}\", password=\"{password}\")\n", "\n", "# And set graph - if you don't have one yet, setGraph make that.)\n", "ag = age.setGraph(\"{graph name}\")\n", "```" ] }, { "cell_type": "code", "execution_count": 1, "id": "34eaaafe-d9dc-442f-8248-0824c46c7b20", "metadata": { "tags": [] }, "outputs": [], "source": [ "import age\n", "from age.gen.AgtypeParser import *\n", "\n", "GRAPH_NAME = \"test_graph\"\n", "DSN = \"host=172.17.0.2 port=5432 dbname=postgres user=postgres password=agens\"\n", "\n", "ag = age.connect(graph=GRAPH_NAME, dsn=DSN)\n" ] }, { "attachments": {}, "cell_type": "markdown", "id": "96bbaf49-e774-4939-8fe9-f179ac9addc9", "metadata": {}, "source": [ "---\n", "# API\n", "\n", "### age.connect(graph:str=None, dsn:str=None, connection_factory=None, cursor_factory=None, **kwargs) -> Age\n", "> Connect PostgreSQL server \n", " Parameters : dsn={dsn} or \n", " host=\"{host}\", port=\"{port}\", dbname=\"{dbname}\", user=\"{db username}\", password=\"{password}\"\n", "\n", "### Age.commit() , Age.rollback()\n", "> If your statement change data, you must call 'Age.commit()' explicitly. Otherwise change will not make effect.\n", "> Or when execution error occurs, you must call 'Age.rollback()'\n", "\n", "### Age.close()\n", "> Closes connection to PostgreSQL.\n", "\n", "### Age.execCypher(cypherStmt:str, cols:list=None, params:tuple=None) -> psycopg2.extensions.cursor :\n", "> Execute cypher statements to query or change data (CREATE, SET, REMOVE) with or without result.\n", "> If your statement change data, you must call 'Age.commit()' explicitly. Otherwise change will not make effect.\n", " \n", "> If your execution returns no result or only one result, you don't have to set 'cols' argument.\n", "> But it returns many columns, you have to pass columns names(and types) to 'cols' argument.\n", "\n", "> cols : str list \\[ 'colName {type}', ... \\] : If column data type is not set, agtype is default.\n", " \n", "### Age.cypher(cursor:psycopg2.extensions.cursor, cypherStmt:str, cols:list=None, params:tuple=None) -> psycopg2.extensions.cursor :\n", "> If you want execute many statements (changing data statement maybe) with one transaction explicitly, you may use Age.cypher(...) function.\n", "\n", "> For creating cursor and mamage transaction, you usually use 'with' clause.\n", " \n", "> If your execution returns no result or only one result, you don't have to set 'cols' argument.\n", "> But it returns many columns, you have to pass columns names(and types) to 'cols' argument.\n", "\n", "> cols : str list \\[ 'colName {type}', ... \\] : If column data type is not set, agtype is default.\n", " " ] }, { "attachments": {}, "cell_type": "markdown", "id": "0f15bc37-4b19-4204-af93-757b07e7e9f9", "metadata": {}, "source": [ "---\n", "## Create & Change Vertices\n", "\n", "> If cypher statement changes data (create, set, remove), \n", " you must use execCypher(cypherStmt, commit, *args). \n", " \n", "> If **'commit'** argument is **True**: the cypherStmt make effect automatically, but cursor is closed after execution. So you cannot access the result. \n", " If **False** : you can access the result, but you must commit session(ag.commit()) explicitly.\n", " (Otherwise the execution cannot make any effect.)\n", "\n", "\n", "> execCypher(cypherStmt:str, commit:bool, *args) \n", "\n", "```\n", "cursor = ag.execCypher(\"CREATE(...)\", commit=False) # Cypher Create Statement\n", "...\n", "# check result in cursor\n", "...\n", "ag.commit() # commit explicitly\n", "```\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "99cbc91e-55ae-4d2e-b81e-a655f88ec807", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CREATED: {label:Person, id:844424930131975, properties:{name: Jack, }}::VERTEX\n", "CREATED: 844424930131976\n", "SET: \"Manager\"\n", "SET: \"Manager\"\n", "REMOVE Prop: 844424930131970\n", "REMOVE Prop: 844424930131974\n" ] } ], "source": [ "# Create Vertices\n", "ag.execCypher(\"CREATE (n:Person {name: 'Joe'})\")\n", "ag.execCypher(\"CREATE (n:Person {name: 'Smith'})\")\n", " \n", "# Execution with one agtype result\n", "cursor = ag.execCypher(\"CREATE (n:Person {name: %s}) RETURN n\", params=('Jack',))\n", "for row in cursor:\n", " print(\"CREATED: \", row[0]) \n", " \n", "cursor = ag.execCypher(\"CREATE (n:Person {name: %s, title: 'Developer'}) RETURN id(n)\", params=('Andy',))\n", "for row in cursor:\n", " print(\"CREATED: \", row[0])\n", " \n", "\n", "# Execution with one result as SQL TYPE \n", "cursor = ag.execCypher(\"MATCH (n:Person {name: %s}) SET n.title=%s RETURN n.title\", cols=[\"a VARCHAR\"], params=('Smith','Manager',))\n", "for row in cursor:\n", " print(\"SET: \", row[0])\n", "\n", "\n", "# Execution with one result as SQL TYPE \n", "cursor = ag.execCypher(\"MATCH (n:Person {name: %s}) REMOVE n.title RETURN id(n)\", cols=[\"a BIGINT\"], params=('Smith',))\n", "for row in cursor:\n", " print(\"REMOVE Prop: \", row[0])\n", "\n", "# You must commit explicitly\n", "ag.commit()\n" ] }, { "attachments": {}, "cell_type": "markdown", "id": "cf0f16c8-07d0-49b9-ba4f-3f9044cac9e7", "metadata": {}, "source": [ "---\n", "## Query Vertices\n", "\n", "> execCypher(cypherStmt:str, cols:list=None, params:tuple=None) \n", "\n", "### Single result column\n", "\n", "```\n", "cursor = ag.execCypher(\"MATCH (n:Person {name: %s) RETURN n\", params('Andy',))\n", "for row in cursor:\n", " vertex = row[0]\n", " print(vertex.id, vertex[\"name\"], vertex) # row has id, label, properties \n", "```\n", "\n", "### Multi result columns\n", "\n", "```\n", "cursor = ag.execCypher(\"MATCH (n:Person) RETURN label(n), n.name\", cols=['label VARCHAR', 'name'])\n", "for row in cursor:\n", " label = row[0]\n", " name = row[1]\n", " print(label, name) \n", "```\n", "\n", "\n", "### Vertex object has id, label attribute and __getitem__, __setitem__ for properties\n", "```\n", "vertex.id\n", "vertex.label\n", "vertex[\"property_name\"]\n", "```" ] }, { "cell_type": "code", "execution_count": 3, "id": "4cd66088-2c74-449e-88bc-76877779c86d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-- Query Vertices --------------------\n", "844424930131969 Person Joe\n", "--> {label:Person, id:844424930131969, properties:{name: Joe, }}::VERTEX\n", "844424930131971 Person Jack\n", "--> {label:Person, id:844424930131971, properties:{name: Jack, }}::VERTEX\n", "844424930131972 Person Andy\n", "--> {label:Person, id:844424930131972, properties:{name: Andy, title: Developer, }}::VERTEX\n", "844424930131973 Person Joe\n", "--> {label:Person, id:844424930131973, properties:{name: Joe, }}::VERTEX\n", "844424930131975 Person Jack\n", "--> {label:Person, id:844424930131975, properties:{name: Jack, }}::VERTEX\n", "844424930131976 Person Andy\n", "--> {label:Person, id:844424930131976, properties:{name: Andy, title: Developer, }}::VERTEX\n", "844424930131970 Person Smith\n", "--> {label:Person, id:844424930131970, properties:{name: Smith, }}::VERTEX\n", "844424930131974 Person Smith\n", "--> {label:Person, id:844424930131974, properties:{name: Smith, }}::VERTEX\n", "-- Query Vertices with with multi columns. --------------------\n", "\"Person\" Joe\n", "\"Person\" Jack\n", "\"Person\" Andy\n", "\"Person\" Joe\n", "\"Person\" Jack\n", "\"Person\" Andy\n", "\"Person\" Smith\n", "\"Person\" Smith\n" ] } ], "source": [ "\n", "# Query Vertices with parsed row cursor.\n", "print(\"-- Query Vertices --------------------\")\n", "cursor = ag.execCypher(\"MATCH (n:Person) RETURN n\")\n", "for row in cursor:\n", " vertex = row[0]\n", " print(vertex.id, vertex.label, vertex[\"name\"])\n", " print(\"-->\", vertex)\n", "\n", "# Query Vertices with with multi column\n", "print(\"-- Query Vertices with with multi columns. --------------------\")\n", "cursor = ag.execCypher(\"MATCH (n:Person) RETURN label(n), n.name\", cols=['label VARCHAR', 'name'])\n", "for row in cursor:\n", " label = row[0]\n", " name = row[1]\n", " print(label, name) \n" ] }, { "attachments": {}, "cell_type": "markdown", "id": "0a8606b5-8583-49f9-aa39-a1ac3e90d542", "metadata": {}, "source": [ "---\n", "## Create Relation \n", "\n", "> execCypher(cypherStmt:str, commit:bool, *args)\n", "\n", "\n", "```\n", "# Execute statement and handle results\n", "cursor = ag.execCypher(\"MATCH (a:Person), (b:Person) WHERE a.name = %s AND b.name = %s CREATE p=((a)-[r:workWith]->(b)) RETURN p\", False, ('Andy', 'Smith',))\n", "...\n", "# You can access the results in cursor\n", "...\n", "ag.commit() # commit\n", "```\n", "\n", "```\n", "# Auto commit\n", "ag.execCypher(\"MATCH (a:Person), (b:Person) WHERE a.name = 'Andy' AND b.name = 'Tom' CREATE (a)-[r:workWith]->(b)\", True)\n", "\n", "```\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "0f904526-59d7-4025-9878-15e458bc5b56", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[{label:Person, id:844424930131972, properties:{name: Andy, title: Developer, }}::VERTEX,{label:workWith, id:1125899906842637, properties:{}, start_id:844424930131972, end_id:844424930131970}::EDGE,{label:Person, id:844424930131970, properties:{name: Smith, }}::VERTEX]::PATH\n", "[{label:Person, id:844424930131972, properties:{name: Andy, title: Developer, }}::VERTEX,{label:workWith, id:1125899906842638, properties:{}, start_id:844424930131972, end_id:844424930131974}::EDGE,{label:Person, id:844424930131974, properties:{name: Smith, }}::VERTEX]::PATH\n", "[{label:Person, id:844424930131976, properties:{name: Andy, title: Developer, }}::VERTEX,{label:workWith, id:1125899906842639, properties:{}, start_id:844424930131976, end_id:844424930131970}::EDGE,{label:Person, id:844424930131970, properties:{name: Smith, }}::VERTEX]::PATH\n", "[{label:Person, id:844424930131976, properties:{name: Andy, title: Developer, }}::VERTEX,{label:workWith, id:1125899906842640, properties:{}, start_id:844424930131976, end_id:844424930131974}::EDGE,{label:Person, id:844424930131974, properties:{name: Smith, }}::VERTEX]::PATH\n", "(a) {label:Person, id:844424930131969, properties:{name: Joe, }}::VERTEX : (r) {label:workWith, id:1125899906842641, properties:{weight: 5, }, start_id:844424930131969, end_id:844424930131971}::EDGE : (b) {label:Person, id:844424930131971, properties:{name: Jack, }}::VERTEX\n", "(a) {label:Person, id:844424930131969, properties:{name: Joe, }}::VERTEX : (r) {label:workWith, id:1125899906842642, properties:{weight: 5, }, start_id:844424930131969, end_id:844424930131975}::EDGE : (b) {label:Person, id:844424930131975, properties:{name: Jack, }}::VERTEX\n", "(a) {label:Person, id:844424930131973, properties:{name: Joe, }}::VERTEX : (r) {label:workWith, id:1125899906842643, properties:{weight: 5, }, start_id:844424930131973, end_id:844424930131971}::EDGE : (b) {label:Person, id:844424930131971, properties:{name: Jack, }}::VERTEX\n", "(a) {label:Person, id:844424930131973, properties:{name: Joe, }}::VERTEX : (r) {label:workWith, id:1125899906842644, properties:{weight: 5, }, start_id:844424930131973, end_id:844424930131975}::EDGE : (b) {label:Person, id:844424930131975, properties:{name: Jack, }}::VERTEX\n" ] } ], "source": [ "\n", "# Create Edges\n", "ag.execCypher(\"MATCH (a:Person), (b:Person) WHERE a.name = 'Joe' AND b.name = 'Smith' CREATE (a)-[r:workWith {weight: 3}]->(b)\")\n", "ag.execCypher(\"MATCH (a:Person), (b:Person) WHERE a.name = 'Andy' AND b.name = 'Tom' CREATE (a)-[r:workWith {weight: 1}]->(b)\")\n", "ag.execCypher(\"MATCH (a:Person {name: 'Jack'}), (b:Person {name: 'Andy'}) CREATE (a)-[r:workWith {weight: 5}]->(b)\")\n", "\n", "ag.commit()\n", "\n", "# With Params and Return\n", "cursor = ag.execCypher(\"\"\"MATCH (a:Person), (b:Person) \n", " WHERE a.name = %s AND b.name = %s \n", " CREATE p=((a)-[r:workWith]->(b)) \n", " RETURN p\"\"\", \n", " params=('Andy', 'Smith',))\n", "\n", "for row in cursor:\n", " print(row[0])\n", "\n", "ag.commit()\n", "\n", "# With many columns Return\n", "cursor = ag.execCypher(\"\"\"MATCH (a:Person {name: 'Joe'}), (b:Person {name: 'Jack'}) \n", " CREATE (a)-[r:workWith {weight: 5}]->(b) \n", " RETURN a, r, b \"\"\", cols=['a','r', 'b'])\n", "\n", "for row in cursor:\n", " print(\"(a)\", row[0], \": (r)\", row[1], \": (b)\", row[2])\n", " \n", "\n", "ag.commit()\n", "\n", " " ] }, { "attachments": {}, "cell_type": "markdown", "id": "2615465d-9cff-4e67-9935-21344df4574c", "metadata": {}, "source": [ "---\n", "## Query Relations\n", "\n", "> With single column\n", "```\n", "cursor = ag.execCypher(\"MATCH p=()-[:workWith]-() RETURN p\")\n", "for row in cursor:\n", " path = row[0]\n", " print(path) \n", "```\n", "\n", "> With multi columns\n", "```\n", "cursor = ag.execCypher(\"MATCH p=(a)-[b]-(c) RETURN a,label(b),c\", cols=[\"a\",\"b VARCHAR\",\"c\"])\n", "for row in cursor:\n", " start = row[0]\n", " edge = row[1]\n", " end = row[2]\n", " print(start[\"name\"] , edge.label, end[\"name\"]) \n", "```\n", "\n", "\n", "### Edge object has id, label,start_id, end_id attribute and __getitem__, __setitem__ for properties\n", "```\n", "edge = path.rel\n", "edge.id\n", "edge.label\n", "edge.start_id\n", "edge.end_id\n", "edge[\"property_name\"]\n", "edge.properties\n", "```" ] }, { "cell_type": "code", "execution_count": 5, "id": "7673e270-4ea3-4878-961c-8fc97106e1bd", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "START: {label:Person, id:844424930131971, properties:{name: Jack, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842628, properties:{weight: 5, }, start_id:844424930131969, end_id:844424930131971}::EDGE\n", "END: {label:Person, id:844424930131969, properties:{name: Joe, }}::VERTEX\n", "START: {label:Person, id:844424930131971, properties:{name: Jack, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842641, properties:{weight: 5, }, start_id:844424930131969, end_id:844424930131971}::EDGE\n", "END: {label:Person, id:844424930131969, properties:{name: Joe, }}::VERTEX\n", "START: {label:Person, id:844424930131975, properties:{name: Jack, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842642, properties:{weight: 5, }, start_id:844424930131969, end_id:844424930131975}::EDGE\n", "END: {label:Person, id:844424930131969, properties:{name: Joe, }}::VERTEX\n", "START: {label:Person, id:844424930131970, properties:{name: Smith, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842625, properties:{weight: 3, }, start_id:844424930131969, end_id:844424930131970}::EDGE\n", "END: {label:Person, id:844424930131969, properties:{name: Joe, }}::VERTEX\n", "START: {label:Person, id:844424930131970, properties:{name: Smith, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842629, properties:{weight: 3, }, start_id:844424930131969, end_id:844424930131970}::EDGE\n", "END: {label:Person, id:844424930131969, properties:{name: Joe, }}::VERTEX\n", "START: {label:Person, id:844424930131974, properties:{name: Smith, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842630, properties:{weight: 3, }, start_id:844424930131969, end_id:844424930131974}::EDGE\n", "END: {label:Person, id:844424930131969, properties:{name: Joe, }}::VERTEX\n", "START: {label:Person, id:844424930131969, properties:{name: Joe, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842628, properties:{weight: 5, }, start_id:844424930131969, end_id:844424930131971}::EDGE\n", "END: {label:Person, id:844424930131971, properties:{name: Jack, }}::VERTEX\n", "START: {label:Person, id:844424930131969, properties:{name: Joe, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842641, properties:{weight: 5, }, start_id:844424930131969, end_id:844424930131971}::EDGE\n", "END: {label:Person, id:844424930131971, properties:{name: Jack, }}::VERTEX\n", "START: {label:Person, id:844424930131972, properties:{name: Andy, title: Developer, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842626, properties:{weight: 5, }, start_id:844424930131971, end_id:844424930131972}::EDGE\n", "END: {label:Person, id:844424930131971, properties:{name: Jack, }}::VERTEX\n", "START: {label:Person, id:844424930131972, properties:{name: Andy, title: Developer, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842633, properties:{weight: 5, }, start_id:844424930131971, end_id:844424930131972}::EDGE\n", "END: {label:Person, id:844424930131971, properties:{name: Jack, }}::VERTEX\n", "START: {label:Person, id:844424930131973, properties:{name: Joe, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842643, properties:{weight: 5, }, start_id:844424930131973, end_id:844424930131971}::EDGE\n", "END: {label:Person, id:844424930131971, properties:{name: Jack, }}::VERTEX\n", "START: {label:Person, id:844424930131976, properties:{name: Andy, title: Developer, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842634, properties:{weight: 5, }, start_id:844424930131971, end_id:844424930131976}::EDGE\n", "END: {label:Person, id:844424930131971, properties:{name: Jack, }}::VERTEX\n", "START: {label:Person, id:844424930131971, properties:{name: Jack, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842626, properties:{weight: 5, }, start_id:844424930131971, end_id:844424930131972}::EDGE\n", "END: {label:Person, id:844424930131972, properties:{name: Andy, title: Developer, }}::VERTEX\n", "START: {label:Person, id:844424930131971, properties:{name: Jack, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842633, properties:{weight: 5, }, start_id:844424930131971, end_id:844424930131972}::EDGE\n", "END: {label:Person, id:844424930131972, properties:{name: Andy, title: Developer, }}::VERTEX\n", "START: {label:Person, id:844424930131975, properties:{name: Jack, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842635, properties:{weight: 5, }, start_id:844424930131975, end_id:844424930131972}::EDGE\n", "END: {label:Person, id:844424930131972, properties:{name: Andy, title: Developer, }}::VERTEX\n", "START: {label:Person, id:844424930131970, properties:{name: Smith, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842627, properties:{}, start_id:844424930131972, end_id:844424930131970}::EDGE\n", "END: {label:Person, id:844424930131972, properties:{name: Andy, title: Developer, }}::VERTEX\n", "START: {label:Person, id:844424930131970, properties:{name: Smith, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842637, properties:{}, start_id:844424930131972, end_id:844424930131970}::EDGE\n", "END: {label:Person, id:844424930131972, properties:{name: Andy, title: Developer, }}::VERTEX\n", "START: {label:Person, id:844424930131974, properties:{name: Smith, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842638, properties:{}, start_id:844424930131972, end_id:844424930131974}::EDGE\n", "END: {label:Person, id:844424930131972, properties:{name: Andy, title: Developer, }}::VERTEX\n", "START: {label:Person, id:844424930131971, properties:{name: Jack, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842643, properties:{weight: 5, }, start_id:844424930131973, end_id:844424930131971}::EDGE\n", "END: {label:Person, id:844424930131973, properties:{name: Joe, }}::VERTEX\n", "START: {label:Person, id:844424930131975, properties:{name: Jack, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842644, properties:{weight: 5, }, start_id:844424930131973, end_id:844424930131975}::EDGE\n", "END: {label:Person, id:844424930131973, properties:{name: Joe, }}::VERTEX\n", "START: {label:Person, id:844424930131970, properties:{name: Smith, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842631, properties:{weight: 3, }, start_id:844424930131973, end_id:844424930131970}::EDGE\n", "END: {label:Person, id:844424930131973, properties:{name: Joe, }}::VERTEX\n", "START: {label:Person, id:844424930131974, properties:{name: Smith, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842632, properties:{weight: 3, }, start_id:844424930131973, end_id:844424930131974}::EDGE\n", "END: {label:Person, id:844424930131973, properties:{name: Joe, }}::VERTEX\n", "START: {label:Person, id:844424930131969, properties:{name: Joe, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842642, properties:{weight: 5, }, start_id:844424930131969, end_id:844424930131975}::EDGE\n", "END: {label:Person, id:844424930131975, properties:{name: Jack, }}::VERTEX\n", "START: {label:Person, id:844424930131972, properties:{name: Andy, title: Developer, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842635, properties:{weight: 5, }, start_id:844424930131975, end_id:844424930131972}::EDGE\n", "END: {label:Person, id:844424930131975, properties:{name: Jack, }}::VERTEX\n", "START: {label:Person, id:844424930131973, properties:{name: Joe, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842644, properties:{weight: 5, }, start_id:844424930131973, end_id:844424930131975}::EDGE\n", "END: {label:Person, id:844424930131975, properties:{name: Jack, }}::VERTEX\n", "START: {label:Person, id:844424930131976, properties:{name: Andy, title: Developer, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842636, properties:{weight: 5, }, start_id:844424930131975, end_id:844424930131976}::EDGE\n", "END: {label:Person, id:844424930131975, properties:{name: Jack, }}::VERTEX\n", "START: {label:Person, id:844424930131971, properties:{name: Jack, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842634, properties:{weight: 5, }, start_id:844424930131971, end_id:844424930131976}::EDGE\n", "END: {label:Person, id:844424930131976, properties:{name: Andy, title: Developer, }}::VERTEX\n", "START: {label:Person, id:844424930131975, properties:{name: Jack, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842636, properties:{weight: 5, }, start_id:844424930131975, end_id:844424930131976}::EDGE\n", "END: {label:Person, id:844424930131976, properties:{name: Andy, title: Developer, }}::VERTEX\n", "START: {label:Person, id:844424930131970, properties:{name: Smith, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842639, properties:{}, start_id:844424930131976, end_id:844424930131970}::EDGE\n", "END: {label:Person, id:844424930131976, properties:{name: Andy, title: Developer, }}::VERTEX\n", "START: {label:Person, id:844424930131974, properties:{name: Smith, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842640, properties:{}, start_id:844424930131976, end_id:844424930131974}::EDGE\n", "END: {label:Person, id:844424930131976, properties:{name: Andy, title: Developer, }}::VERTEX\n", "START: {label:Person, id:844424930131969, properties:{name: Joe, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842625, properties:{weight: 3, }, start_id:844424930131969, end_id:844424930131970}::EDGE\n", "END: {label:Person, id:844424930131970, properties:{name: Smith, }}::VERTEX\n", "START: {label:Person, id:844424930131969, properties:{name: Joe, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842629, properties:{weight: 3, }, start_id:844424930131969, end_id:844424930131970}::EDGE\n", "END: {label:Person, id:844424930131970, properties:{name: Smith, }}::VERTEX\n", "START: {label:Person, id:844424930131972, properties:{name: Andy, title: Developer, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842627, properties:{}, start_id:844424930131972, end_id:844424930131970}::EDGE\n", "END: {label:Person, id:844424930131970, properties:{name: Smith, }}::VERTEX\n", "START: {label:Person, id:844424930131972, properties:{name: Andy, title: Developer, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842637, properties:{}, start_id:844424930131972, end_id:844424930131970}::EDGE\n", "END: {label:Person, id:844424930131970, properties:{name: Smith, }}::VERTEX\n", "START: {label:Person, id:844424930131973, properties:{name: Joe, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842631, properties:{weight: 3, }, start_id:844424930131973, end_id:844424930131970}::EDGE\n", "END: {label:Person, id:844424930131970, properties:{name: Smith, }}::VERTEX\n", "START: {label:Person, id:844424930131976, properties:{name: Andy, title: Developer, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842639, properties:{}, start_id:844424930131976, end_id:844424930131970}::EDGE\n", "END: {label:Person, id:844424930131970, properties:{name: Smith, }}::VERTEX\n", "START: {label:Person, id:844424930131969, properties:{name: Joe, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842630, properties:{weight: 3, }, start_id:844424930131969, end_id:844424930131974}::EDGE\n", "END: {label:Person, id:844424930131974, properties:{name: Smith, }}::VERTEX\n", "START: {label:Person, id:844424930131972, properties:{name: Andy, title: Developer, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842638, properties:{}, start_id:844424930131972, end_id:844424930131974}::EDGE\n", "END: {label:Person, id:844424930131974, properties:{name: Smith, }}::VERTEX\n", "START: {label:Person, id:844424930131973, properties:{name: Joe, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842632, properties:{weight: 3, }, start_id:844424930131973, end_id:844424930131974}::EDGE\n", "END: {label:Person, id:844424930131974, properties:{name: Smith, }}::VERTEX\n", "START: {label:Person, id:844424930131976, properties:{name: Andy, title: Developer, }}::VERTEX\n", "EDGE: {label:workWith, id:1125899906842640, properties:{}, start_id:844424930131976, end_id:844424930131974}::EDGE\n", "END: {label:Person, id:844424930131974, properties:{name: Smith, }}::VERTEX\n", "-- [Query path with multi columns --------\n", "Jack workWith 5 Joe\n", "Jack workWith 5 Joe\n", "Jack workWith 5 Joe\n", "Smith workWith 3 Joe\n", "Smith workWith 3 Joe\n", "Smith workWith 3 Joe\n", "Joe workWith 5 Jack\n", "Joe workWith 5 Jack\n", "Andy workWith 5 Jack\n", "Andy workWith 5 Jack\n", "Joe workWith 5 Jack\n", "Andy workWith 5 Jack\n", "Jack workWith 5 Andy\n", "Jack workWith 5 Andy\n", "Jack workWith 5 Andy\n", "Jack workWith 5 Joe\n", "Jack workWith 5 Joe\n", "Smith workWith 3 Joe\n", "Smith workWith 3 Joe\n", "Joe workWith 5 Jack\n", "Andy workWith 5 Jack\n", "Joe workWith 5 Jack\n", "Andy workWith 5 Jack\n", "Jack workWith 5 Andy\n", "Jack workWith 5 Andy\n", "Joe workWith 3 Smith\n", "Joe workWith 3 Smith\n", "Joe workWith 3 Smith\n", "Joe workWith 3 Smith\n", "Joe workWith 3 Smith\n" ] } ], "source": [ "cursor = ag.execCypher(\"MATCH p=()-[:workWith]-() RETURN p\")\n", "for row in cursor:\n", " path = row[0]\n", " print(\"START:\", path[0])\n", " print(\"EDGE:\", path[1])\n", " print(\"END:\", path[2]) \n", "\n", "print(\"-- [Query path with multi columns --------\")\n", "cursor = ag.execCypher(\"MATCH p=(a)-[b]-(c) WHERE b.weight>2 RETURN a,label(b), b.weight, c\", cols=[\"a\",\"bl\",\"bw\", \"c\"], params=(2,))\n", "for row in cursor:\n", " start = row[0]\n", " edgel = row[1]\n", " edgew = row[2]\n", " end = row[3]\n", " print(start[\"name\"] , edgel, edgew, end[\"name\"]) \n", "\n", "\n", " " ] }, { "attachments": {}, "cell_type": "markdown", "id": "22690e1d-f258-4f2f-87b2-4f5b0a7f4574", "metadata": {}, "source": [ "---\n", "## Query COLLECT\n" ] }, { "cell_type": "code", "execution_count": 6, "id": "5771219a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Joe workWith ['Smith', 'Smith', 'Jack', 'Jack', 'Smith', 'Jack']\n", "Smith workWith ['Joe', 'Joe', 'Andy', 'Andy', 'Joe', 'Andy']\n", "Jack workWith ['Joe', 'Joe', 'Andy', 'Andy', 'Joe', 'Andy']\n", "Andy workWith ['Smith', 'Smith', 'Jack', 'Jack', 'Smith', 'Jack']\n", "Joe workWith ['Jack', 'Smith', 'Jack', 'Smith']\n", "Smith workWith ['Andy', 'Joe', 'Andy', 'Joe']\n", "Jack workWith ['Joe', 'Joe', 'Andy', 'Andy']\n", "Andy workWith ['Jack', 'Smith', 'Jack', 'Smith']\n", "Joe workWith ['Smith', 'Smith', 'Jack', 'Jack', 'Smith', 'Jack']\n", "Smith workWith ['Joe', 'Joe', 'Andy', 'Andy', 'Joe', 'Andy']\n", "Jack workWith ['Joe', 'Joe', 'Andy', 'Andy', 'Joe', 'Andy']\n", "Andy workWith ['Smith', 'Smith', 'Jack', 'Jack', 'Smith', 'Jack']\n", "Joe workWith ['Jack', 'Smith', 'Jack', 'Smith']\n", "Smith workWith ['Andy', 'Joe', 'Andy', 'Joe']\n", "Jack workWith ['Joe', 'Joe', 'Andy', 'Andy']\n", "Andy workWith ['Jack', 'Smith', 'Jack', 'Smith']\n" ] } ], "source": [ "\n", "with ag.connection.cursor() as cursor:\n", " ag.cypher(cursor, \"MATCH (a)-[:workWith]-(c) WITH a as V, COLLECT(c) as CV RETURN V.name, CV\", cols=[\"V\",\"CV\"])\n", " for row in cursor:\n", " nm = row[0]\n", " collected = row[1]\n", " print(nm, \"workWith\", [i[\"name\"] for i in collected])\n", "\n", "for row in ag.execCypher(\"MATCH (a)-[:workWith]-(c) WITH a as V, COLLECT(c) as CV RETURN V.name, CV\", cols=[\"V1\",\"CV\"]):\n", " nm = row[0]\n", " collected = row[1]\n", " print(nm, \"workWith\", [i[\"name\"] for i in collected])\n" ] }, { "attachments": {}, "cell_type": "markdown", "id": "ac4d3e0e-0101-40cd-bc9a-59386a1e4485", "metadata": {}, "source": [ "--- \n", "## Many executions in one transaction & Multiple Edges" ] }, { "cell_type": "code", "execution_count": 7, "id": "c8b36687-c842-4663-a7aa-084ae618301e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Country USA\n", " > distance 4760 miles\n", " > > Country France\n", " > > > distance 9228 km\n", " > > > > Country Korea\n" ] } ], "source": [ "with ag.connection.cursor() as cursor:\n", " try :\n", " ag.cypher(cursor, \"CREATE (n:Country {name: %s}) \", params=('USA',))\n", " ag.cypher(cursor, \"CREATE (n:Country {name: %s}) \", params=('France',))\n", " ag.cypher(cursor, \"CREATE (n:Country {name: %s}) \", params=('Korea',))\n", " ag.cypher(cursor, \"CREATE (n:Country {name: %s}) \", params=('Russia',))\n", "\n", " # You must commit explicitly after all executions.\n", " ag.connection.commit()\n", " except Exception as ex:\n", " ag.rollback()\n", " raise ex\n", "\n", "with ag.connection.cursor() as cursor:\n", " try :# Create Edges\n", " ag.cypher(cursor,\"MATCH (a:Country), (b:Country) WHERE a.name = 'USA' AND b.name = 'France' CREATE (a)-[r:distance {unit:'miles', value: 4760}]->(b)\")\n", " ag.cypher(cursor,\"MATCH (a:Country), (b:Country) WHERE a.name = 'France' AND b.name = 'Korea' CREATE (a)-[r:distance {unit: 'km', value: 9228}]->(b)\")\n", " ag.cypher(cursor,\"MATCH (a:Country {name: 'Korea'}), (b:Country {name: 'Russia'}) CREATE (a)-[r:distance {unit:'km', value: 3078}]->(b)\")\n", "\n", " # You must commit explicitly\n", " ag.connection.commit()\n", " except Exception as ex:\n", " ag.rollback()\n", " raise ex\n", "\n", "\n", "cursor = ag.execCypher(\"\"\"MATCH p=(:Country {name:\"USA\"})-[:distance]-(:Country)-[:distance]-(:Country) \n", " RETURN p\"\"\")\n", "\n", "for row in cursor:\n", " path = row[0]\n", " indent = \"\"\n", " for e in path:\n", " if e.gtype == age.TP_VERTEX:\n", " print(indent, e.label, e[\"name\"])\n", " elif e.gtype == age.TP_EDGE:\n", " print(indent, e.label, e[\"value\"], e[\"unit\"])\n", " else:\n", " print(indent, \"Unknown element.\", e)\n", " \n", " indent += \" >\"\n" ] }, { "attachments": {}, "cell_type": "markdown", "id": "f502e0db-a603-4eb9-90e8-dac2c9edd1d4", "metadata": {}, "source": [ "---\n", "## Query Scalar or properties value" ] }, { "cell_type": "code", "execution_count": 8, "id": "7f93e698-888a-4dde-b327-e591659e051f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-- Query scalar value --------------------\n", "844424930131969\n", "844424930131971\n", "844424930131972\n", "844424930131973\n", "844424930131975\n", "844424930131976\n", "844424930131970\n", "844424930131974\n", "-- Query properties --------------------\n", "{'name': 'Joe'}\n", "{'name': 'Jack'}\n", "{'name': 'Andy', 'title': 'Developer'}\n", "{'name': 'Joe'}\n", "{'name': 'Jack'}\n", "{'name': 'Andy', 'title': 'Developer'}\n", "{'name': 'Smith'}\n", "{'name': 'Smith'}\n", "-- Query property value --------------------\n", "Developer\n", "Developer\n" ] } ], "source": [ "# Query scalar value\n", "print(\"-- Query scalar value --------------------\")\n", "for row in ag.execCypher(\"MATCH (n:Person) RETURN id(n)\"):\n", " print(row[0])\n", " \n", "# Query properties \n", "print(\"-- Query properties --------------------\")\n", "\n", "for row in ag.execCypher(\"MATCH (n:Person) RETURN properties(n)\"):\n", " print(row[0])\n", " \n", "# Query properties value\n", "print(\"-- Query property value --------------------\")\n", "for row in ag.execCypher(\"MATCH (n:Person {name: 'Andy'}) RETURN n.title\"):\n", " print(row[0])\n", " \n", " " ] }, { "attachments": {}, "cell_type": "markdown", "id": "8ce0a003-b038-4334-9de8-111569549040", "metadata": {}, "source": [ "## Close connection" ] }, { "cell_type": "code", "execution_count": 9, "id": "e15b0654-66d2-4da4-af66-6f776e6729ac", "metadata": {}, "outputs": [], "source": [ "# Clear test data\n", "age.deleteGraph(ag.connection, GRAPH_NAME)\n", "# connection close\n", "ag.close()" ] }, { "cell_type": "code", "execution_count": null, "id": "40e4d7a4-4009-4c42-892c-93cde00762d2", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "ab18f5f5-84d3-439f-aa82-53ccfd569d31", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.2" } }, "nbformat": 4, "nbformat_minor": 5 } age-PG16-v1.5.0-rc0/drivers/python/setup.py000066400000000000000000000034111454606241200203100ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. from setuptools import setup, find_packages from age import VERSION with open("README.md", "r", encoding='utf8') as fh: long_description = fh.read() setup( name = 'apache-age-python', version = '0.0.7', description = 'Python driver support for Apache AGE', long_description=long_description, long_description_content_type="text/markdown", author = 'Ikchan Kwon, Apache AGE', author_email = 'dev-subscribe@age.apache.org', url = 'https://github.com/apache/age/tree/master/drivers/python', download_url = 'https://github.com/apache/age/releases' , license = 'Apache2.0', install_requires = [ 'psycopg2', 'antlr4_python3_runtime==4.11.1'], packages = ['age', 'age.gen'], keywords = ['Graph Database', 'Apache AGE', 'PostgreSQL'], python_requires = '>=3.9', classifiers = [ 'Programming Language :: Python :: 3.9' ] ) age-PG16-v1.5.0-rc0/drivers/python/test_age_py.py000066400000000000000000000344501454606241200214620ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. from age.models import Vertex import unittest import decimal import age import argparse DSN = "host=localhost port=5432 dbname=postgres user=dehowefeng password=agens" TEST_HOST = "localhost" TEST_PORT = 5432 TEST_DB = "postgres" TEST_USER = "postgres" TEST_PASSWORD = "agens" TEST_GRAPH_NAME = "test_graph" class TestAgeBasic(unittest.TestCase): ag = None def setUp(self): print("Connecting to Test Graph.....") self.ag = age.connect(graph=TEST_GRAPH_NAME, host=TEST_HOST, port=TEST_PORT, dbname=TEST_DB, user=TEST_USER, password=TEST_PASSWORD) def tearDown(self): # Clear test data print("Deleting Test Graph.....") age.deleteGraph(self.ag.connection, self.ag.graphName) self.ag.close() def testExec(self): print("\n---------------------------------------------------") print("Test 1: Checking single and multi column Returns.....") print("---------------------------------------------------\n") ag = self.ag # Create and Return single column cursor = ag.execCypher("CREATE (n:Person {name: %s, title: 'Developer'}) RETURN n", params=('Andy',)) for row in cursor: print("Vertex: %s , Type: %s " % (Vertex, type(row[0]))) # Create and Return multi columns cursor = ag.execCypher("CREATE (n:Person {name: %s, title: %s}) RETURN id(n), n.name", cols=['id','name'], params=('Jack','Manager')) row = cursor.fetchone() print("Id: %s , Name: %s" % (row[0], row[1])) self.assertEqual(int, type(row[0])) ag.commit() print("\nTest 1 Successful....") def testQuery(self): print("\n--------------------------------------------------") print("Test 2: Testing CREATE and query relationships....." ) print("--------------------------------------------------\n") ag = self.ag ag.execCypher("CREATE (n:Person {name: %s}) ", params=('Jack',)) ag.execCypher("CREATE (n:Person {name: %s}) ", params=('Andy',)) ag.execCypher("CREATE (n:Person {name: %s}) ", params=('Smith',)) ag.execCypher("MATCH (a:Person), (b:Person) WHERE a.name = 'Andy' AND b.name = 'Jack' CREATE (a)-[r:worksWith {weight: 3}]->(b)") ag.execCypher("""MATCH (a:Person), (b:Person) WHERE a.name = %s AND b.name = %s CREATE p=((a)-[r:worksWith]->(b)) """, params=('Jack', 'Smith',)) ag.commit() cursor = ag.execCypher("MATCH p=()-[:worksWith]-() RETURN p") for row in cursor: path = row[0] print("START:", path[0]) print("EDGE:", path[1]) print("END:", path[2]) cursor = ag.execCypher("MATCH p=(a)-[b]-(c) WHERE b.weight>2 RETURN a,label(b), b.weight, c", cols=["a","bl","bw", "c"], params=(2,)) for row in cursor: start = row[0] edgel = row[1] edgew = row[2] end = row[3] print("Relationship: %s %s %s. Edge weight: %s" % (start["name"] , edgel,end["name"], edgew)) #Assert that the weight of the edge is greater than 2 self.assertEqual(edgew > 2, True) print("\nTest 2 Successful...") def testChangeData(self): print("\n-------------------------------------------------------") print("Test 3: Testing changes in data using SET and REMOVE.....") print("-------------------------------------------------------\n") ag = self.ag # Create Vertices # Commit automatically ag.execCypher("CREATE (n:Person {name: 'Joe'})") cursor = ag.execCypher("CREATE (n:Person {name: %s, title: 'Developer'}) RETURN n", params=('Smith',)) row = cursor.fetchone() print("CREATED: ", row[0]) # You must commit explicitly ag.commit() cursor = ag.execCypher("MATCH (n:Person {name: %s}) SET n.title=%s RETURN n", params=('Smith','Manager',)) row = cursor.fetchone() vertex = row[0] title1 = vertex["title"] print("SET title: ", title1) ag.commit() cursor = ag.execCypher("MATCH (p:Person {name: 'Smith'}) RETURN p.title") row = cursor.fetchone() title2 = row[0] self.assertEqual(title1, title2) cursor = ag.execCypher("MATCH (n:Person {name: %s}) SET n.bigNum=-6.45161e+46::numeric RETURN n", params=('Smith',)) row = cursor.fetchone() vertex = row[0] for row in cursor: print("SET bigNum: ", vertex['bigNum']) bigNum1 = vertex["bigNum"] self.assertEqual(decimal.Decimal("-6.45161e+46"), bigNum1) ag.commit() cursor = ag.execCypher("MATCH (p:Person {name: 'Smith'}) RETURN p.bigNum") row = cursor.fetchone() bigNum2 = row[0] self.assertEqual(bigNum1, bigNum2) cursor = ag.execCypher("MATCH (n:Person {name: %s}) REMOVE n.title RETURN n", params=('Smith',)) for row in cursor: print("REMOVE Prop title: ", row[0]) #Assert that the title property is removed self.assertIsNone(row[0].properties.get('title')) print("\nTest 3 Successful....") # You must commit explicitly ag.commit() def testCypher(self): print("\n--------------------------") print("Test 4: Testing Cypher.....") print("--------------------------\n") ag = self.ag with ag.connection.cursor() as cursor: try : ag.cypher(cursor, "CREATE (n:Person {name: %s}) ", params=('Joe',)) ag.cypher(cursor, "CREATE (n:Person {name: %s}) ", params=('Jack',)) ag.cypher(cursor, "CREATE (n:Person {name: %s}) ", params=('Andy',)) ag.cypher(cursor, "CREATE (n:Person {name: %s}) ", params=('Smith',)) ag.cypher(cursor, "CREATE (n:Person {name: %s}) ", params=('Tom',)) # You must commit explicitly ag.commit() except Exception as ex: print(ex) ag.rollback() with ag.connection.cursor() as cursor: try :# Create Edges ag.cypher(cursor,"MATCH (a:Person), (b:Person) WHERE a.name = 'Joe' AND b.name = 'Smith' CREATE (a)-[r:worksWith {weight: 3}]->(b)") ag.cypher(cursor,"MATCH (a:Person), (b:Person) WHERE a.name = 'Andy' AND b.name = 'Tom' CREATE (a)-[r:worksWith {weight: 1}]->(b)") ag.cypher(cursor,"MATCH (a:Person {name: 'Jack'}), (b:Person {name: 'Andy'}) CREATE (a)-[r:worksWith {weight: 5}]->(b)") # You must commit explicitly ag.commit() except Exception as ex: print(ex) ag.rollback() # With Params cursor = ag.execCypher("""MATCH (a:Person), (b:Person) WHERE a.name = %s AND b.name = %s CREATE p=((a)-[r:worksWith]->(b)) RETURN p""", params=('Andy', 'Smith',)) for row in cursor: print("CREATED EDGE: %s" % row[0]) cursor = ag.execCypher("""MATCH (a:Person {name: 'Joe'}), (b:Person {name: 'Jack'}) CREATE p=((a)-[r:worksWith {weight: 5}]->(b)) RETURN p """) for row in cursor: print("CREATED EDGE WITH PROPERTIES: %s" % row[0]) self.assertEqual(row[0][1].properties['weight'], 5) print("\nTest 4 Successful...") def testMultipleEdges(self): print("\n------------------------------------") print("Test 5: Testing Multiple Edges.....") print("------------------------------------\n") ag = self.ag with ag.connection.cursor() as cursor: try : ag.cypher(cursor, "CREATE (n:Country {name: %s}) ", params=('USA',)) ag.cypher(cursor, "CREATE (n:Country {name: %s}) ", params=('France',)) ag.cypher(cursor, "CREATE (n:Country {name: %s}) ", params=('Korea',)) ag.cypher(cursor, "CREATE (n:Country {name: %s}) ", params=('Russia',)) # You must commit explicitly after all executions. ag.connection.commit() except Exception as ex: ag.rollback() raise ex with ag.connection.cursor() as cursor: try :# Create Edges ag.cypher(cursor,"MATCH (a:Country), (b:Country) WHERE a.name = 'USA' AND b.name = 'France' CREATE (a)-[r:distance {unit:'miles', value: 4760}]->(b)") ag.cypher(cursor,"MATCH (a:Country), (b:Country) WHERE a.name = 'France' AND b.name = 'Korea' CREATE (a)-[r:distance {unit: 'km', value: 9228}]->(b)") ag.cypher(cursor,"MATCH (a:Country {name: 'Korea'}), (b:Country {name: 'Russia'}) CREATE (a)-[r:distance {unit:'km', value: 3078}]->(b)") # You must commit explicitly ag.connection.commit() except Exception as ex: ag.rollback() raise ex cursor = ag.execCypher("""MATCH p=(:Country {name:"USA"})-[:distance]-(:Country)-[:distance]-(:Country) RETURN p""") count = 0 output = [] for row in cursor: path = row[0] for e in path: if e.gtype == age.TP_VERTEX: output.append(e.label + " " + e["name"]) elif e.gtype == age.TP_EDGE: output.append("---- (distance " + str(e["value"]) + " " + e["unit"] + ") --->") else: output.append("Unknown element. " + str(e)) count += 1 formatted_output = " ".join(output) print("PATH WITH MULTIPLE EDGES: %s" % formatted_output) self.assertEqual(5,count) print("\nTest 5 Successful...") def testCollect(self): print("\n--------------------------") print("Test 6: Testing COLLECT.....") print("--------------------------\n") ag = self.ag with ag.connection.cursor() as cursor: try : ag.cypher(cursor, "CREATE (n:Person {name: %s}) ", params=('Joe',)) ag.cypher(cursor, "CREATE (n:Person {name: %s}) ", params=('Jack',)) ag.cypher(cursor, "CREATE (n:Person {name: %s}) ", params=('Andy',)) ag.cypher(cursor, "CREATE (n:Person {name: %s}) ", params=('Smith',)) ag.cypher(cursor, "CREATE (n:Person {name: %s}) ", params=('Tom',)) # You must commit explicitly ag.commit() except Exception as ex: print(ex) ag.rollback() with ag.connection.cursor() as cursor: try :# Create Edges ag.cypher(cursor,"MATCH (a:Person), (b:Person) WHERE a.name = 'Joe' AND b.name = 'Smith' CREATE (a)-[r:worksWith {weight: 3}]->(b)") ag.cypher(cursor,"MATCH (a:Person), (b:Person) WHERE a.name = 'Joe' AND b.name = 'Tom' CREATE (a)-[r:worksWith {weight: 1}]->(b)") ag.cypher(cursor,"MATCH (a:Person {name: 'Joe'}), (b:Person {name: 'Andy'}) CREATE (a)-[r:worksWith {weight: 5}]->(b)") # You must commit explicitly ag.commit() except Exception as ex: print(ex) ag.rollback() print(" -------- TESTING COLLECT #1 --------") with ag.connection.cursor() as cursor: ag.cypher(cursor, "MATCH (a)-[:worksWith]->(c) WITH a as V, COLLECT(c) as CV RETURN V.name, CV", cols=["V","CV"]) for row in cursor: nm = row[0] collected = row[1] print(nm, "worksWith", [i["name"] for i in collected]) self.assertEqual(3,len(collected)) print(" -------- TESTING COLLECT #2 --------") for row in ag.execCypher("MATCH (a)-[:worksWith]->(c) WITH a as V, COLLECT(c) as CV RETURN V.name, CV", cols=["V1","CV"]): nm = row[0] collected = row[1] print(nm, "worksWith", [i["name"] for i in collected]) self.assertEqual(3,len(collected)) print("\nTest 6 Successful...") if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('-host', '--host', help='Optional Host Name. Default Host is "127.0.0.1" ', default="127.0.0.1") parser.add_argument('-port', '--port', help='Optional Port Number. Default port no is 5432', default=5432) parser.add_argument('-db', '--database', help='Required Database Name', required=True) parser.add_argument('-u', '--user', help='Required Username Name', required=True) parser.add_argument('-pass', '--password', help='Required Password for authentication', required=True) parser.add_argument('-gn', '--graphName', help='Optional Graph Name to be created. Default graphName is "test_graph"', default="test_graph") args = parser.parse_args() suite = unittest.TestSuite() suite.addTest(TestAgeBasic('testExec')) suite.addTest(TestAgeBasic('testQuery')) suite.addTest(TestAgeBasic('testChangeData')) suite.addTest(TestAgeBasic('testCypher')) suite.addTest(TestAgeBasic('testMultipleEdges')) suite.addTest(TestAgeBasic('testCollect')) TestAgeBasic.args = args unittest.TextTestRunner().run(suite) age-PG16-v1.5.0-rc0/drivers/python/test_agtypes.py000066400000000000000000000132731454606241200216720ustar00rootroot00000000000000# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. import unittest from decimal import Decimal import math import age class TestAgtype(unittest.TestCase): resultHandler = None def __init__(self, methodName: str) -> None: super().__init__(methodName=methodName) self.resultHandler = age.newResultHandler() def parse(self, exp): return self.resultHandler.parse(exp) def test_scalar(self): print("\nTesting Scalar Value Parsing. Result : ", end='') mapStr = '{"name": "Smith", "num":123, "yn":true, "bigInt":123456789123456789123456789123456789::numeric}' arrStr = '["name", "Smith", "num", 123, "yn", true, 123456789123456789123456789123456789.8888::numeric]' strStr = '"abcd"' intStr = '1234' floatStr = '1234.56789' floatStr2 = '6.45161290322581e+46' numericStr1 = '12345678901234567890123456789123456789.789::numeric' numericStr2 = '12345678901234567890123456789123456789::numeric' boolStr = 'true' nullStr = '' nanStr = "NaN" infpStr = "Infinity" infnStr = "-Infinity" mapVal = self.parse(mapStr) arrVal = self.parse(arrStr) str = self.parse(strStr) intVal = self.parse(intStr) floatVal = self.parse(floatStr) floatVal2 = self.parse(floatStr2) bigFloat = self.parse(numericStr1) bigInt = self.parse(numericStr2) boolVal = self.parse(boolStr) nullVal = self.parse(nullStr) nanVal = self.parse(nanStr) infpVal = self.parse(infpStr) infnVal = self.parse(infnStr) self.assertEqual(mapVal, {'name': 'Smith', 'num': 123, 'yn': True, 'bigInt': Decimal( '123456789123456789123456789123456789')}) self.assertEqual(arrVal, ["name", "Smith", "num", 123, "yn", True, Decimal( "123456789123456789123456789123456789.8888")]) self.assertEqual(str, "abcd") self.assertEqual(intVal, 1234) self.assertEqual(floatVal, 1234.56789) self.assertEqual(floatVal2, 6.45161290322581e+46) self.assertEqual(bigFloat, Decimal( "12345678901234567890123456789123456789.789")) self.assertEqual(bigInt, Decimal( "12345678901234567890123456789123456789")) self.assertEqual(boolVal, True) self.assertTrue(math.isnan(nanVal)) self.assertTrue(math.isinf(infpVal)) self.assertTrue(math.isinf(infnVal)) def test_vertex(self): print("\nTesting vertex Parsing. Result : ", end='') vertexExp = '''{"id": 2251799813685425, "label": "Person", "properties": {"name": "Smith", "numInt":123, "numFloat": 384.23424, "bigInt":123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789::numeric, "bigFloat":123456789123456789123456789123456789.12345::numeric, "yn":true, "nullVal": null}}::vertex''' vertex = self.parse(vertexExp) self.assertEqual(vertex.id, 2251799813685425) self.assertEqual(vertex.label, "Person") self.assertEqual(vertex["name"], "Smith") self.assertEqual(vertex["numInt"], 123) self.assertEqual(vertex["numFloat"], 384.23424) self.assertEqual(vertex["bigInt"], Decimal( "123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789")) self.assertEqual(vertex["bigFloat"], Decimal( "123456789123456789123456789123456789.12345")) self.assertEqual(vertex["yn"], True) self.assertEqual(vertex["nullVal"], None) def test_path(self): print("\nTesting Path Parsing. Result : ", end='') pathExp = '''[{"id": 2251799813685425, "label": "Person", "properties": {"name": "Smith"}}::vertex, {"id": 2533274790396576, "label": "workWith", "end_id": 2251799813685425, "start_id": 2251799813685424, "properties": {"weight": 3, "bigFloat":123456789123456789123456789.12345::numeric}}::edge, {"id": 2251799813685424, "label": "Person", "properties": {"name": "Joe"}}::vertex]::path''' path = self.parse(pathExp) vertexStart = path[0] edge = path[1] vertexEnd = path[2] self.assertEqual(vertexStart.id, 2251799813685425) self.assertEqual(vertexStart.label, "Person") self.assertEqual(vertexStart["name"], "Smith") self.assertEqual(edge.id, 2533274790396576) self.assertEqual(edge.label, "workWith") self.assertEqual(edge["weight"], 3) self.assertEqual(edge["bigFloat"], Decimal( "123456789123456789123456789.12345")) self.assertEqual(vertexEnd.id, 2251799813685424) self.assertEqual(vertexEnd.label, "Person") self.assertEqual(vertexEnd["name"], "Joe") if __name__ == '__main__': unittest.main() age-PG16-v1.5.0-rc0/img/000077500000000000000000000000001454606241200143545ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/img/AGE.png000066400000000000000000000515241454606241200154650ustar00rootroot00000000000000PNG  IHDR *EA&@,(;\n,˔ڇg]!g)oKT~|VF5n~F厯Z|՗TmgJԩjO}ʅ2K\Z_a$X9>GpHޛ c/oR@e_pniiBM.; $O'=:-|28>!Z~VM)+bkxEa5<;jz*jph21 L~TQתIrݾ$w.Ե ;frڷձ}mv"o?ф`X ?Ƥ)ܲ_bԞ_l#AZHh:} =O Y/p /Em]/ؕZî%z\t#EāV^.R߱q? c\h9ѵ  8 @f5QۇSՃîv1t^3Rq03r"jImTi Ͱ\(P(eQnoGrڳ@h5~zr.,#ܿ#X,4S $&Ӓ:N?KzRu/vIy6d]h˫}xL܍Y4V6B ]sh @bW;; l#7{˱n躄kGCywmki/WTID<ׁ ``ht'RGj#w'|B?E4^&`{[ؙYG(f#PXGnv Qϵ.܎JrL^= :v딋X η9`=?\\a2ΨccB>hν >/6HU*4._.ߐ3sg,tE@L,Vc+&i.=7fy2v+ w'ދ5Vs;V9[Fu-ZiM.%`Liz?c6j2,O&:x['f%. {- o(n@nuLC=׸mpI*MwֶCG-u?H)U'?,_KjͫHۅtV"_ZfMq_= Un}\"4Gs@|L]2P`-+G$z{HǾ}x]c`{ m'LжOY}Qt {?dxB!X:Ͳ :nUh=}Gj> {-:_3[ iX߱0Ba]MֶNnQ m?^L#u.!8.4!m{CkncWCBFqlDQ3:b-[9Eh Q|mwwԯ#ȣڶ1:CVJeG.(? H4عa C>s/R2:)Z8Cɀ*f+MܽʱHWhjde1eڶ0-y4ꞏSOobe&~#S#Оq%DHɨv۴+&e%:HdeIe%dZ;: }C|V4gFdq{i0"zwuĊw(긠+ mTB;ՂhLklP(G.ymQa>N } k=߳/ˮXx|ړeZ~1p}w`NcMhTrp&F<7 @9:3TxzŎ3ZMI&:O^_,9rY' ׼Ių0Sǰ8rotуl^kx)}34򒃕RbH$c:ob'"K͔SrzF]ho.s mZpγU\2K(PPP4{s8bhgnl Y!A!&93!;R9qor1׫w1'Z}'ɘP5?\ u.ǷoW}9dpCM{ݫ 6%6vFa @A.|őVhcNHP*?K󴨚.y~tS(py5 V{Sv??vQ]& Y<HhL^:{XH>Ѥ`Xuzr  *@ RZ7^//@^_h>εT-u@yoivF{!{n$?iMZrU{-sJ}][W%t7aWD#T} !wnh| /wO:1 4Z <("SiO@p? 6%]fP-bdF>:8EV@0+, 4BQ}Gc+f rq5g ';݌Y:S—tPnU栢 gh#}?2&f٩5~˨bUb3~ Bb@h~[:1)z<_CzL [낯z_X4 %YH.6Ƥz4N~󅤇ݳI3YAs^e8@(@ƦVIbFu, Ov=KâM [$¯?J5nUWNSəosZoeOˢJ/ 9wP{͠ @Դ(yeC0 hecj[/ 5N\y/OΕ@#Ǫ{[99.س3J1/+\[%sPLonﵭgU,:˞uY&{wr4ZvFU #u{a4g5P{L \["uOd6,7PY'r3`hFS^~-eбھnxfCM>Q]n(32]XPXװ)A!KӶ69^8_Bp(iU8xH.ߓ3u_O^Pp'^2B& $CBM}h~RnZf\*s4̈CϬq=6{N_")K`Uڦ"yn @fQIֺn4dZ0rbC,F1tcn:_ 7{־p KtGX&V(AI ` bXrGLerC9oʠ" l1.Y*rOW+q(lt~5mC`}wy4@F@Z<25ydfzZ՛BɧC2t7C ȭ\[۔*,ETiRT/ +]΄݈9ReqBYĶ1 (3 9UwQ̭3`1j?QRLIGHv3QgIWN:UkZuOzFN׎3=$gXeRe!<#^Mb\a 2FkzԂU@T: fb (7_;#\Tۦ)CUpkE_xfE())us=FM f3<|ɉ 86c Ez=?yY~)2X@}R~*$u,xRVm՜}wnE,L҆71$1ڵ+gxm*ٵ/GTi$s]BvlTsdzbsn[ `mD= !cxkm UF8z:l{dl>bbfk={3kO:\V-o[ ,$v1R砋I*r󱛅sn3}M}m9>@8dnPKp2 B":gB073O"[OKewWhgB!,Dt2H'T71U5&on!X$ÛO(<|AJyD̘D2>B!a[kݝ£hޏǰB!,D>6HL)²zKignV@Ɍ#"Xk;߉udcy*b4Wݳf,@!zڲl#گ,㓽P E>Wr>%!d =](m[YеH,㇧D4l!['qFz-7?M2iݏ!@!,1O ]bmJ\Ѻkg }=?B1N qrg|jO $@~6e!t@h,[qTȾ"'-yU _@!@}ЍUj{eL4Y%h:@! ,{O,&V#@3ee~A5;"%!$1,|(Xmw dۆv]mW}-@Uw?tN !h`%߬`Ӎ,{L'L} !aSmY^uX׳D!B)f²U/1EA! |!vmbb  gC1B1"o?FuطRuR!!A2z Bo{IZ;ey، pOM  N=6e!WE{O{@}wg@!$,tMG~]&VLR8T8β {~BWGSnN `Sdu*6*˰X/|B!3h7~t `^=K,KZ%;3<LL)Ѷ:f,mV k=DZyM-Y4+BΗJ0(H\nI(sn@5wdb*XTj,׶1s=q}ʳqr^(6y77cCY55Bk 7r=L+?nsVJ+139R 6VY_ oJ>{,fuJz'ۓ}}Vs9|{L] WL'#pT+$Qs#,KwCa!;i4J`~(Т)TΓ+3e;,p/e3^Bl^$neik!X6ʆ7=YS's]wYXQ̺}X@99.s IDATa8Q5b?UL.R?XpHD{ L7vu6rLd)b{GHwƢK 6]n~qWB?A=(̻uRܦ537ӧ @;gʗhՍc!tMkONR'I!#W3Ʌ@k`E Z!>=uM2!@P|J3'm~f/c(b?jqjuYk-JgI}QA-*DxŶgv+"l8Ʋ &UB:f8!-ٵLw+7*C;VjD+cx6֫ ,{koC%!O+zND:6}}Vǝu/1fBlY\` cAhzKdh:;_|UcAAޙ}3QNe\Kx5(3w _YR XF< 7$Vm Do|#WǞ:#c$5޴m&ʹF[{dᒏ]-Y;hշ֊jÊ>tUܙRf~0 O4,,̿??' d%\EjGN Z}k!Zcu%G&;+񚏐q}g! !@'/ZMU}FpBږ" ١5OWƝZ{jj0ͻ側]Lnl$WX8Ӯy VYaHCK}cʔ"\2-WCؓdW^AH>|>@'+~6*N=2~ϒohlʈ~~WqU2Y#uJ+OY[sBR·!$,MGd1 hGAm&u};9Z6Ӯ)mO oK>g2 ZksZˣٖpy.s*p1q?SoN `]sde6Utj/RUk>,9<شTb1̬C -z)YE5q"re3hm},#Z:^8h`!tY?_W:'q1]&C ]!8jhefOX V$p 6h=b[Xr0]s'}oNA4 - %1CmX1Y,Kt_sFxeR'Lە76(Ƚm Ju~]9/a)i2'k oLU}-v7 n; M:leehXtG{A1GcLLw:'C^!kpd[38s7ynٟfq۴`BW҄5up40^;<19Lo/$Zgok)~W:F_j,&Fzzsf>NMOzmV|%1bx)(fq?^ \4l1vhvqv"s˗pgJ?<|o;T?Lo://ځd^UgxTs2#-ɩztD5u~9~< ]}~ʍϽvl-aH?wa(4u6ٹAHuow>xKCK>(XBӦ@6;Zw3_}?0牘L- hf[.<ni(}"zHxȷ=i P4  E(v땨Z~,2كyƦjɘtyhC]S#{^/jYSm1[^N ^u2pXmh5'\z,tC[n^/|VַU淃?dQdoSd}Ohm&_I$rFl $Xk:b5Z$b"$T F~ļwA$P?kn^W:{81Ҷ?Ü/y8O?PZ_DSޢ}c"Wx'r‚{QDZ.`˪\c=YX]zlU9Q%ZQ?/y q}c0@aQVKMB]L k$mJ2ٍe_}tt0$0V w{l\wmpgO%ke/a)3먾N AIG>ULwD|7Cd*3ص@v*ܑX7fCm.WYp`0(riѵ+7}|)$>B+G8je{ZymY&=%?(B3g}GZ^gن1PvXE_=L;1_X~scNZn?03} m+*D{/ʹQ_ |69!$ S!ɋ `p |U4!ˍZ.@u` {s?fQOs]&f=~㌣2uHѬ(^Tnb\*Ǜ? #BBom.cѦ7~̵B'keL{v;rq/מF-u.^=u+̬b:7Z @=D^ tJ+$А)_rs"m\Y|cSѮL]3 X]Jzu].W[@roA/ [[Sϵe'k!X Y7i{3K.o.dTJveϰl#"7,ې mxBTU.}rң|?,&뱜Hm#\[/bs(ro#a-~&B7=3nM `uћoehPnӧ.jmg1d'oeow-utH['u..Q_@ HX fZo53E@T7BN҄*?.&}Y @42mrjsӢ~^1)UuZ-lUK Pf8ĺb>gRϹEk^m N'_ Y"n1KŃvS+:4of@9FlƧZ\tywlrEZK]cR0ХZ_}^,@!ǃ?}&Z >kE jMܗw ؊ctR~N~ɾ$mt `TV&gʿK}ry?kr_#F܎55B'V:P)_>?}aR VueՆP;2vs_o+\A]WL&SaWoIp?e"[@HNLt$k ,0M\kb:9N8_'j&ݖGQamf0̭u P"{&)qkOlaSA҃IHCX7pWŭ ]U=Nyނ vCN M˅>)Q(Ph؂kڅnIд\+JZ#-Dgwg>(CLԷYGM&K{^'6eO-Ծ aCIpC\Suf|ɖXEH(->rqiY{,r3  ޤBmyVa-ub)jWuQؔVCR$./Cbν(mzB1ag4ߕO (-d#ϴe|h`m_g^(N"#X:_S^z&uYmjS/q҇7/gkKY7Uיú%/+Q@s;}ʉ1sg#G+f";"$ '}zumf2mTq `m3?-kO>n-d)6eN퇗I{}ȍRe({oֶN Iz&yse̢"Ndw2cѭp>Ʋf@gmQƦtyW~`asnMW+=SE=4[xX[̶<>"ɒ$֙ mTinlȱ"Xwٿ,]9bW#1Op9 w.٢FOgCPkѫELFreOCQb?o={]2}H ,\‘.N7PK/V;]~!7EJj<όLdSkC!ĜI1޴딗n N±XO[jk!Z$s,^h;jok5ks?Ǘ^FCKaLg(m:El`RٷǘaYx!6AE;/Q_@5f޼bh| Nryi- Ѯ͈ϵ DLƞB̙TpA[솴h[yoʪ7{uINhA)?>o|Ž/*Gnt,a?g7ס.K^҇qtXjҿ,['D Y>#my"6\obQhڎ\4Vz&+@BGSBL0]-]+6',ȏ,h؆O[Q;촼i]Ozb|or51rO|b̽jWm'` 9(|h,PsFϴ,Yq!voxɿpwM=_DqNӛ+vk'LGVvLCL+d5q^ *6|'# &+lS/9Q|Wۂ(5٢j@fCe@kmZ/JP#$/uHN,Pf\;r _ybΉKV 7@NBWgm-}7\9{ҵ;HKB0v\/v1oܨ@x%xU 3i myiO{}}2"PѺ ž3:R~jghmoFf1b/cm+'I26;~ﵯp^-"ìљ˱cuZ4S2u.Mml+ fb޴rGr9Mnu`+zѶw1f7uӃP|J^ H J~؃OENm_V+I Ȩ{ܝ?6 (< ),5c}hE5d& 1hHr.`FJ>,#$6H?_r]>發%,t&ӱiSG[ݱK1꺜'=_c{rmⅴ/=M:X^Q0ugmg۵1< G;zԈUMK8r8Ew"-=Ml<2m!*їߪH,")zkRn$dO佗E"áU}Whc빟!x/'mt+MV+!d'Z~LʔE/llk;*)]h- ?.a;+B3!下ط.b]$XLq-hGn9zޓ?/*+u>B>=JbV&iN>N cOA 9 C[MJuuQl"H$NϾ_jߓf˸Om^~MimpSPԒɅ1!\bxB*pq1:f@5X`ӮyB7lTn%t.ՃX_ރӢp. :ӝTĺueugI2 ދx16^096hZ;_B]w7+uH\y[u;m&!YKFU<UfnC+?*M v Y\;pϽ#@2\H"E'jُX@өy삐,ipϱTLT.52~YeuS{̝j]G4ogLCXG3۷.)Zuk/zjz3I۱A/⻛ɋyӡGT]^;`ˏ٣|T.1bVYBmRgLBtL;56h[6'0}h񋣹D|z]]SACwvn~RJm}o͐LѪMZ: ?(d"Q$ə%N k Pc<)l9o־:)fKIoG6Y`wذBF@Bdz d6 v{mmfg-~0d=1CVү0Q}&*^w}$<;K3UЎZ,ۇycj<& 84umtPϡnZ9D[z>;V]BDn:|¿eu"f D@-;SRL6g] N3PHRƈ~]޹b2Xª%$ki3ʎ̤*CW5}<2@%V]n{!ٯyM U@3߿^]XL2N-6߱i[}luE2iQMԴ [3dAd\MjY ^ebWtrQN 5;NJ)ݛ$~ mI'ݲExnT *Ye 9Q.|ЭNso_/%u'nD IDAT%Vl{:'QԨy< YLwb5bYJSm|/C5y3e{c4g+ m\gF꛹s(fvp³D56Y{.x! {H!" ·x43byKL둦Nhߔ=?&= /4 c"VqJ t4"'h3VƞF LP٤2޷tr1muk?Ӓ߳[&=׿kC%/h|A6@`:dU/Y5Vl&FdtXrQ]'.~ 4ܭRr]%KOR_7bUL.9-,ZoG03"8mC4_kjsmM#oȦ_mˤ̤/VX,~Ёǝ:5Lp.Tp]U/wr`pCimua]j3rlzrRִ^`SV3"Ȣ~u9m,/ ~T1xt7r?+ Y>܈@r(/Snlb2sD.&_\lN`&VĞAQV<ɣ!M"ȢXh:g@aǥYt;3ӢpuE}-Ňa۔$s {յ 2E׭7Ivw&\Cu*~ IM"/I^RSuNK߮wfyvBV=J|)W&ZPЦ@ݚC`BfbA)VZ;1~cܹ~IYd/k+@yB7WOwR'yw on%{NHU&k~ MkJ}J~H>0/({ڥ7Omz֗\lUrBklZp}XZde1 ufasᰱm!##Ͱ=Ζ.aO 2=MV xcLV]-&V/rJY/6Bl#M١RY (ԺO(?i,% Ü h¤в }"]z^ u;iL 폐הQ0J\_iZiI'w`FtE9/ـ~!JZLr/*G1O.+m@rDG=:O*ѿ1KIYu@= > XPsbTY 6cgiʈ-E6" {IY7P y44#Ie4ߑ|+Ծ<8Dc.*}]';S`LCT|kpsG8RL!wf͐}}v2BB ;nH)vsvX̌߈ݧlNm24^& avu?$Uu<Uk(:o_X-0+C.,=_@E. b C9\=;LE2i$0Rʜ_eZ+wW?nJriٖsRM΀fȪC*( snֵhRbHɷ8.O0IV+}^g |X8=_uLhA7㜺D9H8u|v>M}*h*X>ܥy8Թ-8|{-]o& ߜd ^R-AE{y+Zbʣ9ɾAi􌒍XvJg4猩e9a.͇6>`ƉoETP+;E:V32@ |`xM)# }uAՀsCjl6SyrqJm O,F2 @|>jZ<7ܩ5y0xԹHH4UȾFR@|nGW)>] =W+~e/Hv@]۫ Tq*g ߧJ ːEh|!.{e}HF]a9v7iNj|L)= ]:+8o[qD@Ɣ(4(с_x#- 3>#'skaQ ˱'6ǃȅ,HNɲ 4[+uyҽ:۹C߬#ņG)SK\3CX~Q@L& \gH b:T (5ܲ]nK CL%h['քs wgH"6 w֑<$u.RL-i;h)̠(o: J4I@)מnwWGz=QλFfBrQM9>TcocTrڄ:mRg(p-uiq} }[JULeo)|K&_,ۖ Jd qA{VLi+bva~C_) bOTA&FZVHJYvlz_PAGǚcȽAG?VۓoRY'[>+I0Ll@f,gnZX淇sK;*"+k]*6(6==6-ԁc9ղv?3ҭeN 3Zn >bgLs 꿼HXK+\%Pߵ}v9#WrYlE,\ϫ,0E&J f TR0ԥj 0͑^\vR:Vc;ܟsc0%=*1@fRfRʋPKIW^/0txeHo<9Q$l#*#ޓ6>Ue|ur㺂 g#Z}?xY.>?){K3bXngrfaf{/-_Nv:}p{)!\r_neI36(oUl@Vgy6F[dk͋8nl0ԽH-'K^W?@/RVZmg!*3".q_OX#o]͈m=K)PXwK1sހށdŅeRD©s}XAD.f FxgI1oecf?ȹ6QM26 OPښtԹA{;䱈EVU_UN){@q'UH-"#E]8m "fP >)PƮ6e@%)]G/EٯKy"0'`ZDݦ^sC >zNaַҖŗL'!Y~BhtfbM^XNr#SwFԗ)lU~$1g)2O)Y-Bk.r/14/:f26]9:>F;}eZ?~@L|AdfAudCsdCzhCDGKDrDnGZGpH~HpIpIqJaKqeKuhK}lMNSMeQxTvUynXZ]XcYZvzZ^~_iawzcdefehhiqpklmmmnqxnovwxy|x{xywyyz{|g^ǍŚћ¶|̩j}ݬͮ汼ӳky׸ŹxѼƒŃȐȠйԾ֢۸! NETSCAPE2.0! !-Created with ezgif.com video to GIF converter, fa N k!o!]"l"m&w ] \#n%n&qBGDF">~$1g)2O)Y-Bk.r/14/:f26]9:>F;}eZ?~@L|AdfAudCsdCzhCDGKDrDnGZGpH~HpIpIqJaKqeKuhK}lMNSMeQxTvUynXZ]XcYZvzZ^~_iawzcdefehhiqpklmmmnqxnovwxy|x{xywyyz{|g^ǍŚћ¶|̩j}ݬͮ汼ӳky׸ŹxѼƒŃȐȠйԾ֢۸ H*\ȰÇ#JHŋ3jȱǏ CIɓ\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧ@-tHL'NG OW-T_u\c_w bdm6"p-)-:hucjp&0@$@3@;>9#S>7~S环^맓98쭧;룃{渏{On¿^+9;|s.}w=Cn:S<ߣ|ǟo{_w.C?=@p ~%Ao UVԡ:dG( :Hjd-d9WF~[7q؁xVB.`B]@:I#6np>qxͫ^׾ `KMb:}%<V@j7OT3\>FK#;bp"( vV%RnxCޠ!.곴ЍtKZͮvz xKMzA-AɌ^\.VdsjUaЅ"Am/w`,܋SJ{6>q0NyJ$Nn' "F}Sv-ܺ p vx@V/8`vh9B#-8 N4ǿL:xγ>πMBЈNc,x#k#WOwRU82ƒ.X2+0Bj(Uj$zŲV2%𦷕81 B񐏼'O[ϼ7?Xי\! IN@j_(G~w' =1%,,TVgVN7l 'SX8ZLrf$F;z++#S@z`i s8!DME^T#ol7l\8DXFHy58Gzmp+2v#q{ {Z1.zGsrC`(kNڰ iT rh~8Xxg6Y5r?3okPd|~ŀ2sg2/275_%*5dS5-LV@(OBxxȘZqK(\!_ rQlXs"\s b2H PӢ{]SPaA 0;`<_x?Uf (X8Yq! nX-f@2 ~,Cu1exwVnE@cMe0 VT'^`0pn6\JLٔNPRI^u(pВ22?Ro2Zd@B;D[F$$"EdyjFu#-j;ȃkޢ--!`b;d[f{hjl۶npr;t[v{xz|۷~iLX~քg0:$97dɉ3c;[{빜;[{뺬;[{뻼;[{BtkZ$UA؛ڻ۽bw٤n껾۾rIw{B0+zۿ<\| )*"`@| "<$\&|(*,.02<4\6|80 ʐP[]T0UJLNPR@B= lYqՠ NPR=T]V}XZ\/݇"LD]f}hjlnlmo LJ0rop/ L |oPA@ DPB >QD j1S*2W5bM)Wc SE=}TPވ/ <i,dm~V[i#H͟N8Qb&x㑔F)QG9)tY|CUdʕb<֌'qJ8[3Ɯ:LZy't䓲ُC?JyR,1Z\q¦]8NُYH)y:JѢΛ7W.EqIFWyp rRi6u )Un$kj!@_QK“%b:(cu“2 )ffmfnn1GwG2H!$H#1r~9,Qr %C&ڒb]T#~7)PKCKmD2N9礳N;FZ gie|ZIG~sN7-l6{i]/nZ&]nk'xm|ǥo҉tcw -mhAW2W5?(&Z;*?{)g'͎㨿v찵H߆;n离n;o[mFfۛarAqzF ?o/ؕpJWP,e+b*6%q275.t] ?d`?-`# ~wf(8Z|/0z_׿UA8.q 7F3&7ݥ wF=_a2kաR[Ie~ A5=mmpg%a rFz88 Hҗt5iNwz<яG2UhV&'+ 25Vz0XLΕ1ZφvŦnCv=Bi ..:cVwCtNji?%P@+k$śn?0~- (b'jY`珐79Qfh p8Εtx7QIP8iFkt NGxo;'Q G=Nvy6pjHw#C+;ic[ѼaAss=aQ E١G};nLcW}c `h]ql4;W=,ԍoEḪR}ҀF*X O8Uq@B@`9ґ+pGab9 b`!?wv(@w`?tt0~0j8P~@?L |K3J>c(OyHv8;@i{p:vhx(?b%dN;xt@@4{H+$vA z|9jhy+c@bA#R✿96|c7;sgA17E>@i7G=mJDXDGLdL|kq1kx@8qT[?t Q0({v Ft`upinp<X1|Qt|oć~o At{P|{x3hZ Oz Af{LDT=R3n3Zl8\E? :؅ 9<3Nj9Fs~Bx~ItpSIv@s(pbHd/[mB3X@D ?~tIԇ|p8reȇ@Թ~hJi˳Jjy8$϶$$B%;JkJ 8uaˇvs(Ff4dNtOܸ0THvػ?ˇh0u+|6<\3H]S`@SgcTET<=GUhTQTMuL,kؒEH{ME^tfPsXPP4b4̆Is:S`iȇFxxXmC9s;;3u3P~:sp8nгK:|9 |@1P31GxձՆ Hm֎Lq[@+>Sq:Bo8sش 8.&Lc8`8hK; P. fXÜDNm@P(8{B^;CQȸ~(9`C-sv:E8GG;}8O0~24,-PvT?KLŅ:eh6] kZ0\S {Z b87`k;=Z@D=^:]%ԥ=\%:sKѓ\\8\`Xb(\bG哎qZZ%^g#0J_ks61W\Nkkt]98skQA(zW)@3eu`:Z9xs\u(?@lN\Q,e,@?SrW0-8nW(|| `9phG(G?P]P>(z"+e-Hapz;ȡ˺jHQ/-WSz7T04au:qɗ5@xdrAD^ H JkTrQi(8eW2}YP[QaQWxsCP8Ep98`-@8pPp Jpv-~XW&>}@,WSY0he@q5Q;6b:KL,7@chCK1x\hUP9V}9](㄀65a[>ӳnHVfn3[-PX`(3F90X 6.م^K>p-(G:aZFMd#Ԝ>FhRxNi9W@hO:Yx9A>Cgj87\:xQ:-%^GgS6zپł*>]1wP|p0|O-F++?-HȲz(:tsB"7BXm,0;^Db+s. y HV.;H,.m6Ƃbr1(~+bqX[ثX u`8] 6zqbS?MB8pTY⒁D 4hh@C[dq++;plDm)Ten;]P"`1x NP =^9%g,(;(?s (VPVl Dlc(+`,?8;(8pq:gt8 dDm_ p,w^n,8I-n3v:]hsX" l)3uGseRVЅ;TwE6Em+p;P6:(;}:]uF3x6́Y$PQ!ЅiX%[U_nv-۸1PazZ}m1h49v8p^szx 6G@3e[T2I.0a~(?SzP;btx+B2,9}l, H1؅b2({W1:-pXֈw~cq J&J{& ?YA.0.F`&IhW ddQĨZ,c?3Ȼ~}eSm*^c;a;hv8G(rvR)9-Bm??f?(;@XXcv0QH99I~Fg:+a3-@qhg,Pwn(O-aahYm,XAu^ bR۬"̘sъ`ˤ 8m㈵KK(9X"Ǐ~YBAyQt8b*9pI ]ReW1)~StTDXњ>mPJG8y83nql Sx[ck7߼{Wn?Q?tڶmlq5\w‡7MW9mܖsK?sڙg&T?-؁(;|AszN8"~' !fE1h!V)S+r6$R*]a* b8bCvh+hq?N54A 9$Ey$I2M9 478Șq_1]ءE1qR xC#H0AiȐ q44ŝx"+ML@).x' Aq<͠G4S`VءŌ `AE F 9 "b I>,#8ԤCG1j)!*ERYEds+!ǖ`Kj|6)8D3S.Ea[E\ ,(7N4)Zk XV7E$`jQYe#Zta Q]\*/Nًb f|9rү6LD6W ,_EU1JRHft'Q2ЅRr-CR10=ha#λDMGj,?̢%\Q.-q\Y9\JH:.qw:t:?C"c#Ufk8:XhN+T3?tSӏ'3?G1"G(HјA4?.#?>"A?g(~* udPq:FqD4eh:!xHI|L?я: C dzC5(,E.! ~lgXF+ sgd>ȁba=PD%k.Aɽ r9b0"шYxDM vgD,1>8<h#q OĎ K̢p,.Uh5QsH2Τ&x..!NBP'̟ M#6 aB9? 9s*b/=9qHq1>+P NSfyKs`B#~`&A C?x6É,BXR7{f?ыr4F5þrA1#?B 3Ex9R5M?fGa?稆Cڪ2}.t+.P[ݺ G<1ucEm#ߖ61 c>&7MJT})05b(1rQCzcyX:"vatdm>ܗjCh,N;l+VSax8D zTC}r9p1-^ )/5\h9j.5ě.f]ha.`ZԂ,Cy!vsL ;bsaagAB<ƕq@t3,x d[\ _Ұ(kgazѴ+.XmN(M`Q2T'+Wۨ8nqWE p:c(#tp)|X!ΡYf9n8kpA 樈?q|#5谇=ЁwC|XCHP<쐎;1kGkw@?^artGv<)81p#mqtݱ,Dե3pL7h>(;v :?1~i=;ڃ`M H?PBd[0QevϽ> q+7V)lqe=e!c}//>0~V0A?h ) XЁ\H?.WyüE`qGrISTC9,/\HdԱGf~ -HL5*`3\<  %v-!.I h vC aʠ> ݭݥe@4B!D~՗Fya!6C9CC69C֡\C5\Ʉl-A%Vb%L0&^'v"8(~")b?(BY17X+b)TR(B!P#z2R)2''(C+9B>,'88`T-U>BID #:+:XC8p6,5Çإ#>#>Ft1Xq ق}>$B,5C_(vUCe!$B8ݝ$MЁtA F$M#'A>8`դO.V>2vuC<~$8Y3<_-bb+OQ='.05H.Z%TB74WZS547XvY-r%[S4/C5C9?؃57("5PCf;=ĺIoLfZB9dCc7` 8 wAhfw)l$mlC6-th&mΦm&x#x r%bTC<ˤwfqq'r&7XQmL'uVu^cdC9$e>tmfrgh)C6C<ݝ~g||'|gg}C8LC9,y灖gytA5DZ2`*`3`+`.H+R+*,k,C0ô^kn+>k1hkC65x8jꯪjjj+CQC58v**B9$"e--Z5DN,JlX6TVWuLnȎZ>'ɒY 7ˎ2Ě"Y,-"r#٩oTeF5t:>ȃC]C?`صC>LG=C?>ݮ>↭$j>@f-ݒ--U9DmBhfn/vrdL8 C)_//m)UZwj氹U6)0ǩ)+r9f/0[)+ao0+f\WrՖRV0 H p ð 0\9Ti` 0 00(<4Y$y0CCT0pdp/f4$1tEtmUbqU1O_D4=Wqr/2!!}0vXC9(B4,23T%[2&o&k$S2(/'2)r"xB&2,r)&254ă( -%/Sr/+/C5HD- w 23G4O35{[Ղ[E"7w37tm78ڪ:3;3/2[\'^>/V>o>볐3@t@젃 ? 4C7B> كA Y@/tD?tFeqŬ;e9H4JtJ?'-4)LǴL4M״Mt@tc8:4PPתuE]sD -5S7S?uƵRSfCZ5TSup\pd5䃍ÿ!X/5YώTOu;];C?<'#5`aC6jc:MO7"fof?sw9BdY64I9x*E[diGUu7c\^G>CCmN GIХC֭{xBH4bgsvo7J+6j9l-.m%u N_v)w{3<#C`owR{{^.!mXXcH.8Q.azG`9o9@s5y4+rvPwyB>b9]g'm}g킚I1h9 =*y5V?p,VqFk0nu0y1 `=BqC92yHebMV?$xˍ\_4_7?fH:736j8D @4?@1-Fs9CӺ~;;ngb[`C3#,y+V/(ؘ8.(<4(4B5C@)q(BhZ(eqW.(4:B7',Cy͂:;-1P10H$ =D:H|5yþW#j?p9,?$)t!A(D8}Sw%Ҩg=؇}u/{@گ=Cio/öR 9xvV ?\ *؀"(˼ `A\0X;pXH:HtlCpـx8#2t@}ZwC[G?4@%ͬŴ|>zVT?(?#=A+wC?U@@Կ@/8L@p8`Az_;!FrfԸcGA9dIR6mڦ?9~cF]`ï82?1VuG?V N(3ϼz̔vN1҅Sp8c!3vlHT+v]#PrBI^Xzę!SN1zbǎW~Rj[#vh+ :@[l\5m.Mm\h0 WysϡF[.aT`/.(p 2rm N/׿?HaOG"L)", IT x̵lS G ?ڑGn֪cPG4B +SN(Ɔ?P"8J,ꦈxꇝrb2DE z.,FD(BaÆP1'Z&q$EmQ{Υpю;`,x tmsUYmj~)'nh[qU]y_ Va-_)e٦ɟ`4pbElP5,1C~8ZW9PsjA:(@N,NsƱTn/1+Me,`Y6 s"`ZԪ6M-ka [vE^ImXD7OQY쟟j~(}C?q xC.*rTa㢢K#/(0:PBd+pmh80-̍ @ Z`ኸ!AW` ! ʨAҡ Rb0<"`n jAAp X p e% ` 8 x t`@ @ ʀ@ ހRP "XoD<1cDC7 rvP .  t t@  ~֠$!>1qQ4P#j t` `A ap A a Ơ@  a t1?b't"-"12#5r#9pv @  A ઘA @ l  ` eQ  a NO"{#)2*r*r%>vAZZa89aA8aJalA!-)Ϧ6q0 0 0݃ڡj0@+I1#ځs$Ś8:3a.$ R"fg5Yf"_*es6i6m6) .vS#J G)[93:s::*5#"δs;!:3s>S 3Q䞳5tC9C=CATCﳾ4)DQ4EU,!464FetFiFm/ⓖRFFo4HtHH9rpϦ2sH4JtJA&pjz4LtLɴLL4MtMٴMM4NtNNN4OtOOO5PuP uOiamvQ!5R%uR)R-R15S5uS9S=SA5TEuTITMTQ5UUuU)RaG9mVq5WuuWyW}W5XuXXX5YuYYY5ZuZZ5O/8aVi[[5\u\ɵ\\5]u]ٵ]]5^u^^^a[u___6`v` ` `6aF[a!6b%vb)b-b16c5vc9c=cA6dEvdIdMd VUaYe]ea6fevfifm]a[Qvgyg}g6hvhhhgU[oii6jvjj6gjvkkk6lFVVll6mvm`ɶa6nvnnn6ovo=vio7pwp p p7qwqqq!7r%wr)r-r17s5ws9s=s-WϰmItMtQ7umUu]ua7ve`5kgvq7wuwwgayw7xwxx7ywyyy7zwzzK6{w{{{7|w|ɷ||7}w}x}7~w~U~7w8x 8x!8%Uط-185xt=A8ExIMQ8UxYt'a8eximq8uxy8x/~8xA8x8xC8xɸ8xٸ8x鸎8x9) 9y%y)u195y7ْ=A9EyIMUyYa9eyimq9u}}9yy9yy]y|9yɹyٹ9y1}99N:z ::Oy%z)ڊ!1:5z9=ڗ+:Ez9MQzY]a:eSmwuzy:hq:O5zo:z:Vw:zɺ:zٺպ:z麮:b:z; {:{%{)f 1;5{9A;E{IMQ;U{Ya;imq;Wy};me;{{u;{9;{{c;؞u{[;{<| <|!<%|)< 1{|9=)8E|MQ^} v%~|-1>9=Al5~IM~cC>U]e]a>W~i\cu~y}>q>U=~陾> >~{]>܍~i>9蹾>~>~>Iﵸ⟾ ?o ߊ>%)-59+A_??IGQ?}Y]a?imß8Ō;~ 9ɔ+[9͜;{ 1K>:լ[N}6ٴk۾;ݼ{ <ċ?<Æ~=ԫ[=ܻn>˛?>9ۻ?ۿ?`H`` .`>aMHa^ana~b"Hbr]*b.c2bz6ވc:c>dBIdFbEcJ.dN> eOIeV^eV^^~ fb!=Ojfn grIgvމgzg~ hJhh.hR> iNJiȎtei~ jJjjj kJkފkkPuS=ԃl.[O:> mNKm^mnm~ nKn枋nn:mFjMZNo pLpp /p? qOLq_qoqã6l;kN&r*r. s2Ls6ߌs:s> tBMtF4*rV.AiROMuV_uZou^uT,cwrMwvߍwzw~ xNxx/x?yO.wۖ/ ~CyʯsCz{z뮿{N{ߎ{{|O||/|ë:ܗo~P6pC:܌O~柏~~Oߏ p,.z34ŰcWānhPF7:p$, Op,l _p4 op< (\S/.ӆa ,Rc\0qd,ψ4qll8qtaִo\z׼ ` {.d+{n hK{Ԯw-kWՅP!1jpzӍ=Lb:8@@! ,$%>H*\ȰÇ#JHŋ3jȱǏ CI 8(ɲ˗0cʜI͛8s"TΟ@ JѣHc*P`eҧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNqճkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv (.$,} 4(8e@ *ou3>>3>Cd]! ,&OH*\ȰÇ#JHŋ3jȱǏ CI%S\ɲ˗0cʜIM'(ɳϟ@ JѣH*]ʴӧPׯ`Ê˓\*0K۷pr Z Pr˷߿, È+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOy;^%6O>CoϿ(h& 6F(Vhfv ($h(a۬0(4z5<2%N@)DY^F&L6PF)TViٱXv)2bE7 噅&s' tS瞋}qr~j[ɡO# Vf v'qz*R(:(݌Q#窰O#jPܪO!ʩK;+! ,%PH*\ȰÇ#JHŋ3jȱǏ CI"((ɲ˗0cʜI͛8snRϟ@ JѣH*]ʴӧPJJիXjJ@O^S*˵ٳhӪr`oS vݻxݻ.WKÈM̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫG 8ĭKj(h& 6F(Vhfv ($h(,0M4h8#ڼ@)R>iH&(-TViXf@|^~嘙3* *fd >>'ypǟRV@QM7aD <95覅ژz#ऩO#O*kZ t3[9Rfk^=& իx 6F*B H >у7[l@! ,%8H*\ȰÇ#JHŋ3jȱǏ CI\ɲ˗0cʜI͛87:@ϟ@ JѣH*]ʴӧPJJիXj@@xu׭hӪ]˶-UۻxWg\rUKÈH̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫO{ @?.O}oZF(42 =(5RVhf!nl ($h(,0(4h8Nk0J M_J-?EaPˇz$J|N/d!.?uСnymCwrxNw+ϝ{;YYj˟OBn @!c O0{ #6z '4=F3\!F?;t¢1Di1EF%,4\1S~s ?<> z` c< ?J#$:  62W e(T IQ9(3JqSLO$TbL%0*笂M$z?Ote]~뮼k5#>> 6ή#?H%J-(e|I1 1:L/H`4 J(Q::'HJ'ǂz,TJ18ˈ,|RL7's ?jA +@| ȸG?`adk@t 39csI#F*$l |B E$T²8'+`GkaS&5B؃`A 5DB q5rģ,p4$j8԰MX> H `' JAYXƴCadȢZf[A0՜XO7oP"VL `Bez;00IE:p?q0ԎZi葏E0v: }CPC74A~Уx_$@a~g2&1J*ZP'k(ax CI> z`! lX(< 6$vE(a3dPDGiQ 7c2cƝ#lD)5U4c`AR(E8Tacbbe9rfN*Y1 }#'c>6*) 3πFc]pq}?{L(T]:8vhcxCE%i`cg>L3xq]%HGA{P>'RK͉HZ~ 4\rĘ*Abw0":(C /Oz=}=·f;|Rm?h!H{8=O0`B6p2H-b{_-pzou'&E~'1'q}x):w!`8Xv 0 a] "17(*ukQ284} 5: 1ȃB8DXFxHgLNR8T( @YWHWX`b_(1xWcl؆eQnr8tXvxxz|؇~8Xx؈8Xx؉8Xx؊8Xb j.qhh#8 .P qhRHhe00ڸ؍h Xx蘎긎؎8Xx؏J Y  ݨ Ȑ38@A7A V2 ) !;;,M @0Y ': װŠ0F&pv"i9)8 ` vpQ n\@  pzɗy\`Y◘)e`+P ƀpf hFxQ 0 /99JlhF50{miE! ,bH*\ȰÇ#Lv3jȱǏ CIɓ(S\ɲc9pPAyɳϟ@ JэRGTѧPJJU =z]Ǯk֭= DAp;AzಝKݻKw˔V~@EfW fX&"J\%4iϠC^ _G+_.siyCN)c>uOZ6`3X<2O@U-{ kl̩#;x0aCU|S ė.ѱtQubcxt=/haTuF#ǠhN?hG1O<,<SϑTVieDYXoM+\`olwNВ&tieV=`\O+`.i %袌6\62'x覜vsu\2!GD l:EƋh;kl',8@@0gqGD+$lA1 {0,@l8<@-DmH'L7PG-TWmXg\w`-D[h6$upǝ6\L9o˭p@cބM7!3]_Sc p<}CÄJLC5XCԙf:4M-ͬ4S{3~8P7ѿo mX7: rRoC !8~hLQ y l 8̡wHC/<s4  jf(F9ArG.n]b0`яi&n<#ldecE&t8OC?F:Az#)-2?!yLCB " $,(?}ÏCx"`W;f^NV{d%;3rNVB{SLMy,a#G<ځ|8G>atӝɇ;rʆ:u ?Ցc:AGD5|4▹49Aà5G:By,Dg<:&aH?'9CPҏ:P trrC[oxMqv!|"혪" pA 9@8zxb(? 43r"uX#)LLl*< 8$L I`!,7eBE(vvQ1~$'78D&@@[W E,̂p3AB!ވ98+ p("e`?t*x0T0kjSf/x\ 8A(3"]0v3 6C?` ? ZH &;"]xDCrO 8lulߣǗgQ }X"]c~E6^V9,z/Q -~0>A_=vi rȜYbu0Ŷj$%u_sn?$:zc"34~(bp;б|#vQSl>|Mϻ_g`u wQ^ɽ{m3eyb}^?S4~AѤ-! R掮|~G t/BH;1}؀QHX~lJݠ H&8%'G,Dt 6r:H9h! ,`H*\ȰÇ#JHŋ3jȱǏ C=&Q˗0cʜI͛8sɳϟ@ Jѣ@ cVӧPJJUjО`ٳhӪ]˖j+:_ݻx۷È+~k}-˘35y2)2i^ͺ89&n-_ o=УKk-OtËe IkOtJ՝ϿsLc_5~& 3Դ`Vh!Uޥsv>:j (,?\OSfAp8樣?xDF69c,YX7b% h `& ?8P"t 1\W xcz \!h槡F Ua)馜[ j⩨ꪬꠝ*a~:뮼+k&6F+Vkfv-p▫y+/D螛KpkjڌP=0\5cM9Lol !3L/06՘<4?pC`PD;J> =H?-TW6X\w`-dmhlSy̚9/cFQg!5kGQcV.cEn9B*D? -tuġ7y Yn^qB'#>:nŷzC$@WV7T#/d ߛ[/YL~?C?4D6.g8f@GL@j&P(`8Hl)@$ajt TAB̃~9B0*T gxEqD;@?0(h'V~HĠX!V&sm")Z&P :"(dLcF 5#x3YmxG! , H*\ȰÇ#JHŋ3jȱǏ CIɑ\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^8/|kL U FϭLFgsװcGU#PMbY>e GoQ# pA27FAe(OnN=m\BnЊ&U03Q0%#jk]ރEK#!U71(̙ E4M)`>|"-EOS;9%#3i:#? @.dT? $\UH3ģ\gvRgy'`8>ÝD OsW5ϡ3OCwgN5IFjzfzU9 C$Ej*ꨤgjHJ$j뭸Z(%YhT+lYN;uiM3E +lASK9r*A"kA^? %lX,ĜxaK#[LԳO1' 4+j|?Sw9@䰙,=0|A~F-4n,_B@2 PQT`!!V/߻#l7Kqt|ImL ;6^/ 1#,t(b!p0A|aZx+]f* 0Ba &9 oEчtvM<-/b~!T0n%^!d r sA5CD3|@h4ءOianHhiX`ը@*D+X"f-5t_@9G8b7(FƋXA s7#D ",Q l!"֤e`KCD E)C"m7Bľ}!pP=:D80)@2K- q"V_+)/!6݅=`ƻ@=,XM!|.u#C?f1P$ $9AvJ Ö $DEHݏT[$FJ08@ {ReJ[d!QPPpQAc )L)L3YɕKSaՂMps)j` am+TfH{7 Y6 }IgHr )(%!fP}Of{pYe]1uYPm&A4 *6qr"%1Q[V LwIT  2inI&fj]]/'$ ֱqiٜAy@c( X!@  0xUvX96@ӥxj!2T $GX a_ Ba z)J }sI{$u\d?& y ԎyQ9P'G¤1@a=MZ 'S&s Vwx9 *Lg7A]t ɦf/V<**pڨꨀJi`1xs2Γ ):qT u 1Zw X +b Q<-ѳ$p܁#J0v(Tʚ(Κ$Pw2$30Uʝjȫ9a7`7Bzj'GЯ+ְoਰE[h}z(ٱ$+pX.KyVR8W@C>kt- 5FCKDRbG+GP+Z1[b;d[f{Shl۶npKr["vz|۷~;[{۸q!;[{H蹹g۹k^[{ۺ;[{ۻ;[{țʻۼ;[{؛ڻ۽;[{蛾껾۾;[{ۿ<\| <\| "<$\&|(*,.02<4\6|8:<>@Bql<9@Xg:P ϳ&\|=]} =т E0sB !؎34]6}8:<>@B=D]F}HJLNPR=C}Vm"@Na dyB!B0E6Is/̠ BemZAI-v ʠvqWyTq p 0 =`UGQUȨp| xxQ<{#q ! ,  H*\ȰÇ#JHŋ3jȱǏ CII\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^8>t1Lr: <]Mt[s#ϴװ(h^b"H@ Wy$o֮铌L3 ,q%4 tMkxSqH^ςB[=Fb>@Hz 68+}BIPA2 F,"dD(R$P:T:?? #PjTb:8H&(JFXfҔ<^&ShN3>'xNqOA>M$#&(Mȳ裐fdRDj饋h駠zgCp9^@j>P:p@G? ժ+SCX{iz, :{DM6{)*JϹ;%d{AZ )SJ!xsV 3 1DŽpI?g@"t8R8?0_C{3 `P.4@-ў9-IJL7PG-ԐW_Xw\-v\Smhlp-tmx|߀.n'7G.WngۥK砫 :1N.'lH#^7\v!r0 64?GOX> )QQwz AM:lPާe/oH9a@elB+8a#Ii*9:?̐<!A@(Œ0!ŅN80#a ĊT,J"q;Дf$M #{H=]OC HbB\! La w "_H"FQ3<7qEP#.]DR?*Aa5ؐ-#C91!RTҎP0@d4A1鑍qɁ (D@H.9T rHD.1F1;,(TĈ&RG|#sZr#bK.4 6 B12f"(PK i(kĈ72Ny"E(P {d鱙p!b :|TW`戉Wxoy } cu'Mn]58G6'[l$MiLҕhEq&fy['x zjbtU v8WQî[rXŖ ^ԉ(7x}ȃ=K:A4Hx/\ @}x$q@=|vtcIh͗`'o~woLfncܚ'8Ad=u`HoJXrG}W;J WD7jpffɧ]b7YK xrXa68/KC?qendK0,c{ 0H{OhXǀ>^'EßFa[Ͼ{$MB|?aL@b5 !k)8Vjx1|̇  ؀8Xx؁ "8$X&x(*,؂.0284X6x8:<؃>@B8DXFxHJL؄NPR8TXVxXZ\؅^`b8dXfxhjl؆npr8tXvxxz|؇~8Xx؈8Xx؉8Xx؊8Xx؋8XxȘʸ،8Xxؘڸ؍8Xx蘎긎؎8Xx؏9Yy ِ9Yyّ "9$Y&y(*,ْ.0294Y6y8:<ٓ>@B9DYFyHJLٔNPR9TYVyXZ\ٕ^`b9dYrWgj)4Br'Atkr9t8EVzax Sig$A#4E٘ix5xVzy@alHpcu9fљ! ,LH*\ȰÇ#JHŋ3jȱǏ C r2(S\ɲ˗0cʜIKCʦϟ@ JѣHPgNJJիXj=8N{ٳhӪ]{bK4 `?x˷_a4 't˸ǐ#6MeK̹}YN`@^ͺkXdq!ssͻ7{a@akͼkhG]:Ct*se ËOhu qڳ%Wz-O _Bt4B1oӏu5ty sI#`8_ ("tV>ъ5`бN$808=<ȣB 0s DШPFiU "`+J>Rvg#b2T?Т21pΜtɐt]U矀rY&H,裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vk؆Ziv m9y+15&W6]#:￝QC ;\*5' 7G,WlgjɃ0 ph(G%ۼ,Fr 6@Ǐ@tAp{LGKk53կ3\wZ^sdoOe V{aͫ7l miO! ,HH*\ȰÇ#JHŋ3jȱǏ C=w(өLΞ=$cʜI͛8sɳϘ gѣH*]ʴӧPեRʵׯ`ÊKV`g6jtKݻx˷7n9>pʿ+^̸cS/<3k̹[X'װcW/-c0R3ȓ+_|K۵ڶa/ËO^?܂d+oϿqh|q8 ?A ߄Vh!S(3U)uV!9\I@0TOusYL{ P@H& -ЈPtM<ń`pdi~?K>6{4O)@S}ϙ*lhi8?jNAєBG!fĠv)c]2j.JLSJ# }魸=+=$P91 wԪF{Tu%4 )҆+3d.LEP@)~+m }!P-l 7,PA W<gw ,$l(,0,4l8<@-DmH'L7PG-TWmXg2=^k-636tFK#`E18La߀.4٨m G.Wngw砇.褗n騯MJ.i6;η/  ! ,aH*\ȰÇ#JHŋ3jȱǏ CI򢃒(S\ɲ˗0cʜI{GOb@ IѣH*]ʴi~AT09ԩׯ`ÊKtk%"v]˷߿kss '&:+9 ~ȡ P5ϠCO?X3ʖ@`gҸsͻwGO-~F#˩Dd:r@M=p%1'>!Jc HC2{9?$O w4DCUN=P_CEJ@kvv߇ (b 4 ?@>p0' pzr@ν1];(D[4Õ@2 P {XVXfنyhlW`v QJjJ#@pr o!h椔VjiKJb#v} P?Bi?puߥO@? Y<J BwQ $"(.!IɁ DqGLB$(g! ,aH*\ȰÇ#JHŋ3jȱǏ CI%S\ɲ˗0cʜḮrd.@( ͣH*]ʴӧP_7_00 JٳhӪ]5]3b l`X La L @ס= /;w @{s}Mӣ5Nܹ :@ͻs:N|Lڰjs سk>d`/=lCx9 ] pO*u#oIkÎ= 4]eAgf!M'd`VuCmV[de݆8㎣7I9x $T`@tkH! DY\veSt=Y-12B,I,D!`@z<|HS?w\Se& Tz矜v]EƹV Ѕ+>p"/1`뮼rzL#@ֈ.I*@Q')@tHfVkm5PCW;Tm:,Qkln1 ȒI1Sv+?S-K⤛+o]r;lsmh#-%FV~9 G2K?e\[@! , PH*\ȰÇ#JHŋ3jȱǏ CIra RDrʓ._ ,ࠤ͛8sɳϟ@  qGHt)ҦI 0]jXjʵׯ`dAk߾ѵx"]p2ؿ L*!)˘3k,_>/RӨS^:]:LQsͻŋ F JͼYvyŚliNνk'pzë_Ͼڙq-?iR ߁&alqtT Vhe=Fݗ$hbFW\G0:& c<~|"b@v?&ݍG=QW8`vT2\|!edi`u@y]g)[Sy7t6}!G!j衈j$(aT[&*餔""pZRU~ I^]n8_FnzֺdpOYM>D XiKb?p@MR׫F5Xvm~ Z| ~m#'ֶL5ٳn 8@Lt׼ëu eg1 _vU(GG߬x0,4l8<@-DmH'L7PG-TWmXg\w`-dmE+8 6pkgZTS!tn,A5}\@0O7Gn64-w砇.褗n騧ꬷ.kCR6o.?|'m@/! , iH*\ȰÇ#JHŋ3jȱǏ CI R& J-KʜI͛8sɳϟ@-:`QH]Z4)ҢL:PիXjʵׯD `Xf˚EKlU@*ػx˷߿hJE #npboL˘3k (@Z4KF=Zu L۸sHXū .pQٻ3']G> bǾ:ٿ}|ڝ^V:Ƞ؅j Mr-aMO;v!AvXP@$(0bC*(@!<#@ :2x%l3D3=\v3x"dbe7 暵cZ!R^kM9H矀*蠄 @&袌6@F*餍i|ip"P(hETia;꫰*무j뭸*+kծOA h iJP5V^n+f+fk98G[NDWJI]NS?,l' ; 1VlqI ;샤a4/U1 y&]~2.2+w8缑)hVA:G/jЭ"-5K kZպ4Z+dCk>@4 P9`@ Xn 3(~4+#\3>4sޖ-qrYP=@`0 4Y/cBR(NR9p@Ln^.G/}G$@m>Pt?!JcQ6Kp@E5нgsHG[[ s `IN zPr YW'`;aN B(2 gh1 4>W4LiGyc^AC&z`L5uS"NI6ScH:/#ADx=Lt88@,!ʓF:*=E KYR (ob= j!VA(@h1(gIZvM4L8^B$<9[dbh餽IjZs ~GMz\ ,%M^輣)ّDz2'#Iw-dv7y3ԀE-M(Bzht*D(hS"QhT2HGZn:lc7Ih4E!@3S57]M$Jt$ PȦ *q^Cf5OPJU 9@6HL{z+vGmGԨ 'DݍT&@ZZ}GN#A ̊BNFءfcNH@! ,dH*\ȰÇ#JHŋ3jȱǏ CIR J\ɲ˗0cʜI͛8mZ ϟ@ JѣHAʤPJJիX 2g֯`ÊKY^@(۷pʝKhZ˷߿Q6È+^L#KLrm-k̹K?Mi[|װ_]u۸sջ N\l+_μ9PT8H9;6߮'KW˟Oz1OsUXBhS F(Th0xPrI@u($h(Z{0(4h8xO=A)BaL6 [^SD %Q^\Fvcl%G^^W=%Yuvu)য়9Wl$.dtcRZae(vjڙ:*Z1kꫯ+lY[,&ka 묞D+>kXybQQ 7k.Qܞ+k2P=! 7086Hlgw ,$l(,0,4l8W59,?f0@>>}? c 7/,^u?SDK|#\K/a56@-rHnY-sE1,xUu$ pRY^xKC9 q%5a}yKPU?Unzgft9.;1c@Ӯ;` po|_$t Mc='|ژc;ܻ: ,<_>oJ >R5o# k*51)H+? 8#F5!p @6(xF8=҆5q B#>o4LP>'C9Gfa@ʆ2q7%H+A8+Ȃ1)@9FУp㘑! ,H*\ȰÇ#JHŋ3jȱǏ CIɓ\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx"@߿7U$FÂ+^̸.8L @ =A ̺HݹKgAͻoȓ+_~ >μs`gdOӫ_lϞҩO}Ͽ?-t_]95b|a(;Ri(ЀuGЅ(4j x@ XDYQpDa cT x.0@@P*dN"sY]k &#\qthNQđZq @|T])Хa9@,[Ǫmj bj .rʧ~hGϬ d<5AO5X TunEKm'$A j (-@2cc3FAX$Aҹv")zsħ: Vh@ @G х 4p r|! E1} 7E{e$DqΫȳ!'Cö.X( ₐhtĉMn )GWٝEcH1qMGb}D j&'t$&Ǭ };$L5p!B.uNERhNW EъUpk8ȁ0FD;h:𨨶"Ɖ?&x D(3 %=C DDH32V?iz{B{B >=Zk3<xpz`[{ ߐB(@~A|S$Znk)(vC mwR '&"DJ[BB"kxzn|P \%(^E 0P EGR]"0.tR+ӆ_'v!O)etRŅAH$^cTA+'@ӧ'Pm'a+|bqQemUh`p+aK=eb@DYdv&+` _@9qhJt?qa!;au 5TP ِ >eӰЋ_7 qwmMp8fh`?֧).aav8`.X9$G t/А _a }.i$40E~ t).4Q1yqh@B)h mH ~Ћq ~!No%gpc\ɕ>RB/X2Vs ]xu.]9fa bpb\,0ِm U,isEq1 $%)g!d4RBbBfo7 rypՒ#5@Yrnfc!d !(E eZ V~aG"iy% Xi !N%SU[p P AGp<vɜӕn `P@|=w͵Ƕ|)ȝPW!GGPǓ,tl;GwN֞`pN;tqD1鏙bAXL@(`9jn!QH s1Y @j89j= R6rN[t |fQE Q6 Iܠ `\Z]pJaP{QuZ]B0 ( s0ƨ8qVyja 3Y G:Zzje*J !Zcx?L>3yjpUn!eHD!Q .v5BF'` H:z0qxqh@ L:`_ 00 FFC$Y$| 0&@t[۱ ";$[&{(*,۲.; B =@B=D]F}HJLNPR=T]V}XZ\U-ѐ .fl }hjlnά ֠ )<"pm.ƶ;@{}؈؊،=0tmP׬tݐ:|wJz+զ}ڨڪڬڮڰV 0Mp  ө;͕P Y%ж\֚zݐڐumyݤi ݜ֐{ t` ep̞X W;pW@ T^V~Mӭ@tkPtǐ6`ϰtPk0o0!-*fP [ܺPOҡ$D 4zR-z-| 4k$ot<ڠ 0@w+ `^e+@Q `֕. 9..pPnٓ @] ].ۭ?ސnE pM~쐾F.LIޠ ``P@ - p氰P |t ' cJk@ RL|c [CǠ I@3 C ðF0 P `Ð ˠI Ġ} ~ ِc ?> ڠ pЉ@@ P ՠ  0 p N `̀ >e NՐe*VXD p АD_EPʐ t00 l  ȟШN?{pѯ?Pޜ!`\K + T P c@&̨ t QT A8n ? :LNǬZ7;z/:e̽iUN1bC DtfEjV* $j[5-cid.m)]m6,2:m6O#0T5{Z]CR ~G͟G^zݿ_|ǟ_l⎁iN$7'K8R(㫦X \a⡧V.BFhjСErZT=~(#RPzh$Ohrǝ}Qǜk kaǐF:C \)e|8C)cp#Zj>̹]pٲ:޸$1<+-yY*cRրe8>֘m)u)s|1A2cC$o y:ǛސNP )HY:jk4i ݣĨE7+s2)o*F8afa8b'b/8c7Jk bgV8iFj$7)yָ)%bXfami ]&+X}nV`abiцam%:TyF8+Dҝy"&9o鮑Kh6,<˩ꐢs)L\1zMcf 1 A \ZyvJwmB1xD :F [ms N\=d)XCO6SKÐec_<N 1|j1e0mQ [}>.A)*Aʱ fpB [$8A VЂ`5Q!F3:i,G5p68ae<xƵhx2ida3Әj`MkO)`2mM! A[k8h\!؆᎐c[!) ]u- Y"{X-'m1L4yRǃ܂l2j@Ѡ2 oTC8LPap<3w sK:m~5pうYF1naH17ƨv?jX6 1/#UG6[Jv=mjWv3>\'{Y$z=TPCS2Ն? (Dq`ژG=\C\GkhD֖=VcB2rc4-\Pc/>c4VL,р#Brס܂qPn̡Ǔd)HFB5o"-A!6āhCN;v>ww;Pq XL H$E *#6OuW%d4)pNwxZ[4/获Շ$\)Ua%Hr̍r am^,VoJ]}_#o|7χ>qQ,q)i(EMُ8~ǜ=*dշnN>7',$UL? ?4DT0tr};hɇ|y! (h8Ћ4A2 !$"4#D$T%`(( ag ?"˻/01$243D4TC0LC۪ԃ:;<=>?@B!B; 2֋dFtGHIJ|6{?r~CAQ$R4SDTTUL<8BO+K[\]^t[M*TdTedftgd Fۢ|? mnopq$r4sDtTudvtwxyzr}~Ȁȁ$Ȃ4ȃDȃ>7<y"K`a8b0aȌ$HHɑɒDITɓ\ɐtI|ɔdəɖɛɚIɜɝɠɡJɣIʢdJ4ʤʥtʦʧʪʫJʬʩV(VK˲D˳TKd˴l˵t˸˹|˺K˻˼KƬ1.i30JL\L#*|LƌLDŽäLȬ LLҔLDMTd +ӼԄόMלM۴L;L$LNNٴMDNMN ixghO$TdOt|ORx0".D(h$5EKaHu i =H,FO,[EUeuQ~{`t !BC P„ )()Rz=!,-Qۯ01qh^QaT5e6u78S75RBNDP?@ԲSF;t#tcGHITfQvXMNOVX,=wPRЎi0UWuUYWWU[%s x >` V4b%Va=9_n@2hVel3MSPlm:д%m/*]/J)3HwxWLWxYpS  ؁%؂ Cru؇؈݆z֌؍SoBWc<,Q/j\\чUJMٜٝYLJu38-ȁPuZmڨuZX/Hiڭ]kذ۱%V0K"Iх@|~jlNLȄ5ՄL@NY8^h Xܥ%HUP@t ۍR]mXM$k0x1hz^2x/aCB ڐJYLx^L^OJ\m^eXpKHZ}}-=_\FΉ_Fq[vhkv {hN֢Ot(StT@mT#E҇`̯J>2k>(2(X%(Y/qOeYcLHVL0WY`ޠ]~t@]K)< KH@.b4< }e6vttp@SV{`yHw؝cP uO);FDA5>>~8)f+HG-Xu`YFxUWpH calMPܠU1/HU'@\H8>KK ><XK@pno^Ê_XO3|ycIv@` XN%gvr N-S& Y/ "yNȇ808T&x?fj`PTK1CK6z 8&oNloЇ`PUXq(" s87$z$@L7S4Vk܇~,~։To ^kﻆv6lȖc0쐭ō騮ݬGq8WG(>Aԏt|S_u_gAeB ؁~p| ^VsЌxY؋[K`Fb aƍj@ԇlй 2)ѯLGM<Hb;Y 2yA]svkvbr[eN˗„ 2Lxi14Xo:u((L7n"G,i$ʔ*Wl%̘2gҬi&Μ:w'РBa{_äJس'?30PuX?9N(/]ӥbF ش͚7JBYԪ(Qit7vdV-[Ċ3n1Ȓ'Sl2̚7s3ТG.m4ԗ1oҦS~Pr5GvՆFiSt? 8 x * : .Sx g?S,#O<8r6Ox*1yN>C9cc̈P=U#Bada y8Xy%Yj%]z%a9&ey&i&m&q9'uIf9XΑ O C!]Cw6 @YghB|3)>L>< )B~5 BQ3**:+?̞&:?tL(c^ mk}Z$BIu-z-Z.;骻..;/{//8ϸNz==^z$=1Gpjz)?0?cN:cЌG=ӏDYj3ք7PA=E}\+M;4QK=5(bqk<9{б't#;F9=imlCe< ~6:8K>9[~9כ8qб^2;?]:lc9(8A'tH!(AN#`xO:rCNP=88l 1iF>鷁G7|'????8# ӎv''lҥc4!ucK# e<DG>G\ R<>J8f(Is1u\E{lJ۰R؍p]LT-FҘF8$f<#Ө5`* q`pB2 O'C+B<P<0 s<\`B>p:^Np.RҴp'oIrxڨƩli nX"1,!F;ul`/Pp  v@Qb unF ?X:^Bؠ: H54|X?+ R(8183Y X  . D A1]0bwU.2Һֶ59sSO&za?̀b[H#zNhQ{<%a3R# 1 )ax:{0ۜx% , h`(X@mUw\ns3ɬYRNhg/[:K#PBB&_ʀ5KS3Z qTF)1 &0C`8x!pXzʔ\I@qnb @MoOTd\#8.$TjG!i)!+g`K(G`o`C#Q c0N9TָefwK̟ :"c,C4T5^#6f6n#76H788RPgbωC7C9c<>#??#@@$Af6(.C9,$C6C>$DFDN$EBd:E=TFn$Gv$CC+EqC3<$B$KLA4(M$NN$OO$PP%QQ%R&R.%S6S>%TFTN%UVU1.l%WvW~%XX%Ye/B+CY%[[rYZC*߶59@Ap D LRb&b.&c6c>&dFdN&eVe^&fffn&gvg~&hh&iiV&?i&͑":CE,m &@w"qq'r&r.'s6s:g(FN6&Iflhx΀g HC?Q((^'Iz'( @()rJuʥhg>p 6^V^)fbh:PިրBz(薦)E~&闶C(@ 9|ٛ)hC((ln @U^*fڡd:" 耎@ 9,2D2DSC=$C4CtF~,:Ī\G&#Ɔʮ,rk;t*Dl,(?BpvD4P-&mxi3N-V-BTJanlZ؎-_=G@і۾-2C լƭ-Ɵ9+m}R .>.F*?llI.vnŢz.؞:OƬ.Z"x{.n .￲nKn.Vk^/o:/S o Lj-֯)\el/or'W)Jl.OpoC6.S0wmG-Bpz0 0|oF4jlʨ 0{ΫaB0 0#'gBp1C!n7_ ?DC<1gqDq.#Dj1X.I0n1G"p[11p oRܭ 'rRF>qG"O2[S2'0#W#r'2++D^2+sp2l+ϲZ2/ޞ2-2Z(0'pom2/$/4//^3r4ov17sz3 C.3;G%{&3=C9R-,3?;SF:3A//E 4C3[@74EOAͼlV4Gʥ wI#7DF@o*I4޳jBôM#"ߴO/z*QGl:kQ754Bs:;5U?+&tUo63u.WuWS.b4X5[k/Bm(s[u3]Ҵ]ﵫ>4:L/Q/huZl['q>Ѓ^϶n[)^cgn6p Wkgup7B5Km #sW0ksW756JO[7wGhfo,OtwusD_1yw}^4F3I|s^3|sRgt/Vc뷀p09P'q+8/x}{j x_x*7FTo7xt7ނ53kwe oxa7QV8=w>B#t`;6ґp’Cx?G*C:Xo9\om:\•方DŽ;yq9y y[B:"z 븢9xG6ЫRP?c:텞ChJ3z8B:TxGzzyRgߺ󸫗 x87zgyw8ðK;''FE~{{68GMg xwHK;gBC+;x?;S~[_x9?|3CD_8URP;6=5r$;7|{CL<{C!ZzO{ <u;w{sG={3{vZj+,_8z9S|+8(DxI[Br0z+#8,D6=G17ʏsX7 D+5XBP725' >lgHkBLBD׳#D'Eڟ1F8=Bx>TB>8>??'/?7??GO?W_?go?w[?ZC{|RǶR "5~^_GCE>C<@@&TaC!F8bE1fԸcGA9dI'Q!>kkS#隕{MÃ8l0*&UiSOF:jՊG7Tn`Z4]p\EsZdlm3k1k*7#] ջo_lp\#MLq1B ݆LN",& ּsgϟA=jC>B! ,H*\ȰÇ#JHŋ3jȱǏ CIɓ\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧP\@իXjʵׯ`ÊKY]˶۷pʝKݻx˷߿ L0P#+^̸Ez#KLpʘ3kvΠCj"װc- @ͻo^$Y @4ȓ+_N0 zI:kXߖouB,7Vq{% ri?u>Wn ڂ 8?SLq"hM)@bvٔ` ȈH& T,@r3M? UJvS `i=B!;`) ^C~fDC砄Ω}X?S^jeW襘$x󏧏`hWejo?O3APjyd)*ڡ(Gj챕~F+`-2kvNIY~k4ں-׍*Pʫツ}8cj+y+@@] ЌQ,hAn,+ ,$߸Z%2SODlC@@-DmH'L7PG-TWmXg\w`-dmh#KlC @1m=='kH$3qN3KCä8FT|3#W0}< B6qs?Ў/o'7oõֽtwA9߃#:TYGO:'`GK 4ݟ,Bџ(DHVA"jFa/3vrlo"G;?@⻂P G?⿆̏I+4"p ?tGD (k!AZ7&@,R]@x ⸗]NL/9X0![\'Ҙvኑ?R iAD&dcDn'Ap` %^GN(U(!C )rh# 9Fd+.$oϢԑB>*i!1fnҾd!#$"h6 :bI^0.ș\B&H[6# O0W@HIah6E##D/mY-Ev h#&zhOA֜$]flGA&iM|&:sjl4 Qh[F'͡u=)r]nTJg4 8~ȃ͒*DOxO \٣ù)YlW8]`qm o`]O9YnCggǻUNs 0ȦkstSX)4;PԧN[M91ַ1j$%W2L|p' )0%p8x'i̺b_^|N?# {OO:矵+f"Nukcs Sm Q2j#a kMqb2vf PM5V b4 Рw'k`flF -ްsv3qMt0qtpq`sv QJPrV ?xp˰@e1QEMfHogF 0\H` 69T@ aK:HpVXEhMѐ hp  ʀIF8\3xu Ġ e 9r7Ԡ ͠ dXs  9PgtXxȘʸ،8Xxؘڸrh8eCi  p60P 5|`R(`a ᐐ0H(0?_o0Ơ _i.kk=Q Q P юODQJr T ,, 1P/R5 jR JQ!VY@hRf50 gz|ٗ~ 7)Qӏ0? c8yyyh#vy'`K%tJ0(` Ķ8o J2.` .y4p2  Ppٜ^a}Gb" ),`ԉ&C B9 `Y7ӈ1G0C a  4  e@ Xez46bh C;n9 00Ib6z8j(9ʘ,Zΰt0DZCڀc0LM OKP3?Jp ̠ b:d:g 00slml|0n n[JP  gZE6+$@J+#0ʨ7ԧѥр{)a{cQ d@h\1p+DJDyPhy+0>Pp0@z @+P|^@7 >` \h0 =!@QhP!d0U0/8:w/;Zj˯a+g} 0h@h"DH@+ ==`$$@#Wuq@@7ʳ \Q <\9J:D `+wQ Ӛй FQJJ)`{$@π{{_{* Y{5 4p1-B135;8Zp 򋱓[OU`{.nA`kKc D`|;:Z4`"\ D\D Z/ *Ê <[=@<9)mA&o# +I@D˸@Zpƥ*akhp Ő*5 +rPz+nO9u@x7۪0/@#pZ`F)P8Zz !HF K<0Z s2 s*40fpp t0u0 Kņk6}0NJ /PbPd  ƀ `  <j@O 4B |"8 p } , ɐ  Z|T0Up"C  L < < < /*$ }@zP >Ә d՘X`5</O0 +T+#| 8Ӏ؂M٬Z;Kȍ,+}w}, P _)ؚm֝F@]Z,ʢ- /}+ cMֶ}ۚ >1]:$0`ڹZ]]ۚa5 {И31vܦZj@ \ӷM@ -#@ջ+}ȷ@pm,j׵ քM j<@40)+0[}5Pπ}n*:7j@ 9֔ BP<غ:9+g]|Z_a69`kmq=S@g0 {%h퐭SU FPT_h7p&=M\]=Vn{`Sp C++Cw?nÇ^am6ֱ=p * (\阑 @ @ BlZUU5O@Q|P^>o802-A{U>P>@u@ PM)qp_QTɫ=0n[^ݵ)XAT=[d PJ HJȾֿ4@!9?ڵ|;/&T$? g=P 1?%ZBPd_!1RB--$`):O:ՆONupPM =P\PnEۡP9ТMp zðL|S-pf==  `>[/@_%;` >Q`X 4xqEhRH%MDRJ-]SL5męSN=}T(vEGFMfQCN0QhPs+*hyxbm֘Q#Ƥ*T $$Ks@ ԧ!$.H@cD*SnfΝ=ZhҥMF2]>a4,F}i>tҔI&MY#gtر+>_.*/dH\vDZ 5 9xރ'Dz z%D&BT3Ɵ_~0@Њ|.!RЩ[6*DM07A@Y't'D'K.FHah{"#ȸc@QA2/ ER>b%yJ+2K-Ǭ/ЈHb$xX¹V` 1$NQqQEP@` 2zk0srP#BoE#|PIs*"!R4V[o5W]wLi((4pa C "BhPa;yPOL&HY$DC`2k m aH )@Y``5\򰾢܃aa e8Cą=6> C28ud|BP@ PddC#Awj"˪=tilf)"_яюwcLw<@ [0F" F,b+K^$_jCķaz` :Aj^hP7F=hF>Qіe.rrK6U|܄,"!O|\WNPa U( l*؞l54%G:^KzӞ$r,x/jҋB׼ UӄR( [A (uiӈɔ ! *N`zӥ/iLedGA*4= $60U>sΙA  B Te*aTՑXI@-'SխL?́(H9 .G~.cD*a[,X0hL@U=B{QA/h@ɺ)%яtյ-ɒeȭ]ʢM]FZ6K`w#Or "(T@5S $Թ|nR>MtbZӨG=[׽#?tїp!z C)f\&L|bhf&MxЂ qd H 0m#R*ą%U\bp4qe+wt1z@a¾s,j .p#*M fyF 眾!И@\`EeS@մ|#AWt!H* U@1}`_uח $03 ,sPZ+ P@RX8$$x˃M$"iʺSĥ/>XQa3C){y)"pQ! P0i6<01؈ xy4B 4kH>8vt7ģ>P. ;@+9#H =>P2F7$+*R5*瀑xT;%8dVlz =@a))3 +\8-FnCÓg\N'@A!>`!pr4G!/P:')x*˚@!0SM{$Hj@'%F$Ky ,g 1gȼsDɔN.Q[6!q6} A"@9(s Q3#&yy2&9`#v)Xʂ4AqȇTɲ4\tZx@(!-SI!'p80P,;QEQ .I4x+AЃ[3Qʃ́̇{xԒȌȳLg} #702,NN)N1gzEGP3q*,0. 6 &5ȓhVCy$Ez9j2Ax%K :ȗuS% N #,i)Sv_؃,sݲA@12{EۭA?m4 a!M5p/EQDΜϜ'lVTjOQW9{)(9$ &vHIĕ3R6 V"9S8Y<zaSkU, a0*pA 2V,0՛>"YГ(|ơ͐Ѯ0`KK¸/.xIV"r-bǸ1Έ0,YX" ,Yp9"W {"c;Nce:,}ML&n4NͥF|I3[6xT:tYt'QB:`)8Y2hϦ9M"2;&B ="NDJ8=PCF zڈb}@5-  5Q2Q۲#&+!F z*tr ާGOBu`V,PZ骈ed"ޮۍ!*u^FZ1؃!u(7رzLPf-ٗbKvqP_t VE\'+(νsB@ܨ7!x t7\w p'=J9'KpR ̃Q}vW-`D!$|6r9ψ,"[I*`#_\(x.빊_{ƠP15qAT9fIYX.#Nn)뙷&" N%w{sAHaGiF.9%m[4=ڟ,Pv1gz|*>.@<72#{զ$aU&5wGbf5>x^ccn&F [VxJo+QGH(0@3N p)pw睍h,ٍgre=Y3Aw&oƄ[)179hyɗCZ%봈Q'M&R)CJ"E"Gѣ J0lY1&MRnL6Yjh$ƋBi"Nbċ:kmX?qzcv{ #( V v40De@FHID*B4 R(WPHIB> br gs&s7)nz؃r)>n?a40v"(1'1y V4x (A,bAYDԌaPh`5~ME'5F@p`4K*L |?BU|%]g=5XA rNA40h#4.2O)Cӷ3LjD*(a08XNjz`4r=aUp #j'>+b@#T%`B@AHG5CKV%+I cL`*Af`2]Ȫ7@=ӝl=h)*+}#PrLa*Rc 0i D pNXn[DƩ 3 Aa;iO< |z8Ч~+`_44$$ Bh/,ADkɪ̠GirAհ8YCO) HH%A 8º`ƭ  !\@ QXU$SU4jPon“N/@vbF#SYeO<=Z8.Fm.@Q g H%J R ~O$:#JZsZh*TYԆrާ+CCVT>A HG?ܑ" DS1ͼi/# lZ9”qQ ieݰtB+s)dcPb:d#"=1` hȁ܃/ ЕĢ]⩍#x6FAvڝ hD,aY9x  1IL#FG=rZF%Q,xD'Hbs^slRW> yxHL; =큠a ~Z<}+1i?y-y=9qjBC> [C>xEJ XJqig |VmPT\C>>}nb`C> @XZx$F*t [%ZUӵUMT Ѝ2S :."#v`4UG?ŦIEI![Do-⎉GC> b#"-.^;C= ?"P̓:@MiUPuDR  T#Ua#2]HC-#:^$?)<Tx] ?#X[?Cip#huVؤDfcT MH7d4= ?G~d;*J*=!piU l a 5֤cDG  OIiبK9S>e]>0l^:BIV LLAPyXB/@LA4HD~UbX ̓;T_r,BUL /$?PsT)1LL,@>\J} J "t >ȡk⁅#7O@Bb$:C>Bۉ 4Ccfat@?/Q)3@%)? XXz')5X_pA?C:L) $y)PQ  @L%4Ax/Cy9C95 {v"ޢ?8Y:?K"-?$boB!)?\(ޢWS& $)xP`ÓJ)O͎z)Zr@nDI89ᘚiڃl;&,@+Nd3%Y>*fZ:$:b ⎝ PA.?_*"-pRE޵EDs|@šEA >,b?^@\z5FO>EE Uj@XSi- :C4 ֻy!&&ً-XH):9PiIiښ@I:J߳>3??3@@4A46S %r@27( 14C(s.oi5100\ 0)L6t)@ M L״11p4O[MC94hDR1+c 7024Vg@ @tu 5Wu (ĩYZuBV5,! , pH*\ȰÇ#JHŋ3jȱǏ CIң(S\ɲ˗0cʜI͐nɳϟ@ JѣH*]ʴӧPJJիXGVCׯ`Ê+2ٳhӪ]˶۷pʝKݻxo߿ nyiÈ+^̸u @LN!(̹57M鋛^ͺ^˞Mڸs@ۻ V (\AģK4@MD{Oӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(@9,(D3scDXSP#;JxdDoJ6PxQVia>\v`)dihlpƙ:J#ݔKdym}9^6~f6dcgR36ެ̡Uf&:PH*ZX̢.z` H2%:#ڡ6pH:Fx̣>1,kHABj̳OF:򑐌$$:L# T &2nGaPKc=8Ќ49Md*}jF P*ԡ­R`/ A:_ h0"qzcK;~ ?) A;4\Q:K5h xQ`u G=?,qP&Jbϖ0L z Ħ-'>)O|RkFP!G;m!$SAЌ4 G: HVS2%>%Zy$ &KԀt =!)ೖ1:> 'S( #HT) H ᳟ v,-t ФHyoXV8@3-'"hB@< hoHrnJ*G"ŭiJQK hC $~ahRԶXoG|X೧z/ DCzDVqkD 0Qղ1(! ~v 2/-/@ iA ;Y1o$><|d$p.R'p9<nkeY,nJP#nV JF;ѐWe@j<5$4ARZ%N@~H ~tV'nW@e :鰦3p$KN7Mc5ȁF);UUm:@`1t:Wp\8 8Q3슯(&m\K H?J#Ԡ@)n^/Ucŕ}{`HX:>pA$%ȫF<G>y:?N#䁢ιGlhOמv'@ЀU.@tCNG9+|:4hM]"Hc7{y=p8 Hgr (9=Wf>|b kvoSK3{0>3 c\WNzTַ>')f'!Ow((>Qc @ `|vk+@ҐZv';p @ % xiQQ1p8[Qz@B8DXFxAh׀/R R {H fi1@0VU6h#>׆&=` Q8z P 9^sbHK^@j%Q#e ЇyTx L{yXƊ\peUI@}ЃhH!r0 Q p P+g6TwQQO  p v!)r2΄pdyyy9y4|0 {X udWzKox{Gf ʡiPɘH p eJةy $v-USOR]LJV@uQؐ \P 7F5b:Xup_8MEcbZPOqs LErJm` #5υ77p=9Sp-YĨZBp t|@ 0oz^n冞@BH>0RȚʺڬkPZP=@0u Kԭ!r@IU$pIgEMڮX6A~Vf+`Y5BՖULՠ L0z]p5|jR;Njk]ߥ_OpTsE QV +Y'kEY6{8Q r#O" gt[u P O~uS|] Eڵa&Y+Z A5h8@ $@jpbFT5E9۷~iO v'U8m\6X%gO<@HOP\FUS䵨k=auffu{`ߕOn@=jRYUpaehQ>` وEWhn@[V\ԋ_pPe XlUpE9KgKhK@+OSD[PPs Ye=bDQ<ǀUDeYc`N4\_(fr+8Nļ"[=Q1KQO(\ػeӐU n5+t&t#NԶT4LL7AQh\Yi3D%0 y%=#+,t)E@ncEM|ue~h5sZg S hnÝ[n`ep\pmDɚ,0pjT iu]5HoL*0WSPv`VVO#<m|#0@iK7h)PCjoL`W tpCx\y|7вS=@u@vk*ӌ[9Qf> }B\VL{[Nu ^@ipeWLK|T @SeSpz@GOZz dpNDU` W z > Z Rprvko 6Q\Y8@ u`Ӽ[kA=t"ǫ} >'t@{ V(zϗcn\_QI0uQbOe/@dd·pL=+E |@ʠw}xa@#Y h@ Qffa:U|%ddp "@2qO :<[bG萫OP Yx ddD\4Q@UC<4h{3x; f M" % 8Q׃ Ua4aǥͷVhpMTܙ얲u@OS`Р4bTδ p } 0ɠ JNPFIU9bЩ}KkwW`F@Z]h pcFY D~!ߨ8pfR%ZW4>W=P XZh鸗zP lCL6W܀ )B"7gc<gL z_n#Ƌ5^00F9ySc1BL<~YRA=nF1tj`8E)hT͊=o:uETRM>UTU^ŚUV]~Vl{e͞EVZmݾkv͙(<}rAKt 77ݿn%kU83Z.Wt6"_ c 4_$YA:9*ƘQca2e\pM}h5uZ$ )VXݳ"3W$qFZzn^zݿ_|ǟ_~9/ 7X%yIga[ 3ld}ҩʇ> Hz :H!7* cM6- 7d#HE#vnx.('3L1$L3D?5dM57T0H ZhhAǜä:q`A "R. '"MqOˆE:R*DH *!.N(C ^ aCƛ4eYg6ڭ⢶Zkv.`k(uaU)#!3Hl1{ʮB.T8 p_D x藇LAB:-6Y4E$=!\ǜLZgfoMw?Cf *h7(lxNuc$q!* Kn yG x`$Í9v [0I -dd$[O0#t("@>jYl7s?gGy)k _8YM$]D|Ir)jb_0"@n@;H"B95pb#n“d4~W#p((@/fbOZ+ȣ9ЀD`6Ё`%8A VЂ|`>|hh[OV`L>`JhV舒`.L B0G?a~? ;qch>)bU goGj]l$$ yQd R<qE%4Q l}C K yJ#Ā>CA*Бd$eF:JVRM?qa'$ )1sJI%41J*8Ą%/c*8[e1uXG;E SDyBx-$Us^P@hp@baEV7 HU<̅ U 0Yr@ #qmVib! !c:Z!]z僇Ax0kG=(t}DbU.R<,(%C)ʘ9@y={ OB*u졡TD 4$ u)N{L^"t&FЇFthF7яfd]$Aq|УBPF̫gW:zǏc1Ph1W 'h@9q:/@jb$7/2 yӨ FPG7$d+ ܐE 3dAzgwR\zfO<,B0F=q!hG:۱FB^@" $ <@E[vku\u]L*: B6[0BPCm*̡LH/PPu{zԥ VWz#v؃D %/T81.:$B#YԃI!s!&G &\7$؛d5APb$ :NAq8upW[%@]`ďDb0={$( UBÌ]'z:p"/+&$;X 1(6*3{XR(:H8))` A 0YXL0 [~P5Oz󱫆Y>A1"%P@{8ڋ+É oYS(|b[_@3DC5^H r3u0z`d I/z2Ct =(P0c[Ю24C 4p.xq#9[ؓǣ &)|H x9UZDJa$FbcdGX.z ~).tXG4C؃neID4"ӈ@Ox1#>> ¥R*_H Ȕ"(x8xg\*ƎHBƐd[>1s 0K{z wHt`~(Cxi`{H~PZ<7zJ9p)$2GxȔ8h $@I$,@9@`@@80ȳ2Z˾ę$ I>'ȣOC!_e@"5X}tE uZு@=ى@< @ʋ%丙@Bx;bs)h[*L1tL`"MuT0*d#yȇq X,)Q'"HA4u,ȃ {BpA5#cړ@B wѴPhT*PZ-Xix#3:Ȇ:臧9GЃ04 i~Q{+z<$I#7 $9=9čH˿_c FvTW1 EezHIJKLMA eؓ0&:z{Ix*Љx58>a(:e' A=$4Z@'(?![ʅ! >Jˑ0055 &( 'jix׬zU[B,b|@{m'a"kK=X1(f((j[3'т0/hkrx=I`c Wdbэ]sh/רڪתgmh5@@ *к̃G(Bƀ~lJ9тǣ]Á'Х=V`[6"H5%HQYQS JE@П'?͇sxR0>e]׵z@z O |0RH81TѬ|R?Z/aX0 p%+:\X>uf1}ظˁE`y(O,$Tx"tK0;#!bdߨ&`.Is-8)_5q`~t`װ@u#Iw ^ȶJ=shW=2[* pkCT(h|*X'߄=[ Ġ x.Q؅]+nxh3:-R`d魣hh* ,11 “?yX Nq]Ka|\XRk4 /H dnq^*Y/ n[K*eԅs3Hf8^⭲ RP I<&Lล$lN :"0:  UH..g$lC \P>N6%_xAyCVU00h;!]谊)h/rv w cPH8((@P΍ n~Mp 7@KH@4ňFʋ@;:LyLMK8)=!-PhCdtr@8BHp,ӎ~)#H~f.ƏVll[ʃ&!pU__tPp0 ʃѰ@8L^&V s8Ξ#$N3TgX[f_'PKL'~/R#PG#X=Px m|)Ųy@ ;%Pd@AH0>F[Ox*.P$h;Km;$Q 8h5^ -pufX E}0ޚT]%ucctX ejD-pI$Xܠ[iH~CE ȕ -%ثU4~0A/*BW!mP"ښP2|3ٓVAN.Qwx[xaY=A@ZF {{m'H35R/2+3O *N聑!( M)ZJϸPxx@ߒӧHa^mVE$H DмY/s}Rvqo|AhNҧSn:ڷs;Ǔ/o<7G9xPH><|i:pb4}Ab49N>Wk/<?>P&%x"&P" +@CTQ 'u`"H@brREa[<@ /8ɕ1`BZ DrH&9%̓Pwi&m&!7'uy'xMqk  X,փOȥQSv$iUlOc/;83'(T94Sd\5P4sO{{Ms!@ɵ7?䐑a 2GD )=!}'L6*G %FT=h FQI`9rɎ?X'AHCVLC אn&hqjF1"<.\YǔI 3X̅grCߜc/p@B!?OT14qe‚s"p?B0D OH7 aJTOXBQx=*haH6Q! l*}!}^v.!/ZC!00s`9zO@I.,!7$蓃'ԣ<%*SJ ;i%,f2Kmpo!R7A8>@EPhԌ |Ô I::(*hĸ@$i 0KssCDSN,Bhˠ)V1I F|jL0ͩD~*ԡ=G>CAHD_WD!'@CtcXJb09P.񨝐5b z*`p0 `aȄL# ނ 4CEaEPXkYR"BH?Vt|Ohj֠}Ap1}.t{})`u]Rm ze ʀca!mB8+_b P 9H !@Xv'#b͗HzY~P:D0F$dj0!JB 3vЊV34#e͇,VL\X:"cpAOrҗ,.VN#:qS+C@|,h&k'V K?8HtBl :/Ĉ,g {tPD`!!XtOQX:x]h/=]G90M?T! f >(uPCos2%|a[~6RwԾ6۞V- @#߰G3"ZAR:) ȩ٪h3p$\ 63: E)D#y+RN\"֚@%#(C>aQXا*V10]1 r. % J' NgSA nCgqc&{ЇQGZR=+.?'0>B-|IF;g-,8h-O:jȇ =|E5 &9E>t΢jx8O~mxhq(XS>R# 8' %-iSY%c؊b$/D®uS B%A4ܝ-G 4[t[` A9tL_ Ψ ID+G|?bH[>&X268&t0 @< 8}T!#?RcMJC,Aŀ WDBфKF%lb"A&O8:Mɔ?<:X;X N; }ܾV  Qb"B%.'<A @ nG|-41+*M20F?И0!c \`?%_ `Q?`@AB ,E, VWe68@ A QA4CC5£?N=)0 ][ AR"'@%A!dR|,A4T@hO$R䀲:IԠ ( 4y_|'}F1~R}~'*T9q(@ ER $C8ל "3 f@8h" AM:N#p1*NJItEWȣ]E<Հ61hO|^ fB `'lpA XR^Z'F5J)Bդ ZB=Tԧ)?Vu =(DphUV%cЀW EBY>tC|" @0k=\H-$ \fC;HTI&IF G")LApW@|C4p8)mdXnDC>x*6#@Dߝ\SO %)G[5`P"EɊ\ڐJ\TfHe -jEA QdektEO][<ڕn^ֶ1!G#Y C% '+ |- r0aL`/F?4sJ0f"T}?j'{饘Cf,,\j]JK]iQ% ,쾍||\d @E2dX5 Bg%K$@BH"AlH:>0^P4 ؒ蝳 ,`O'6X? [(59y[%\a{-QRDA Eh&,Ab(GklFTA.x D0qss؃7x<@`%\>>C҈C>\B#A?T?FU뺱6o3k97c =UY C@?LK(ď9< ! 3DC7ӏTB ! 0P4m,-qH0 4A3;lx 4΃?% pP5vi;C,Q;@85L:4H}/bLRs ;ɒm)%Xx?( ЊcuL a,,j{Ĩ>Y9Г@UB9a./@ṕ'l5T{5ơ z0xUd_캴q5QǶlDO1NQN!RTn6pN)UN0z 0;N)Z4> ;PRB!t 5' R%?&+"(1*h(C3 Hƹ0PHFl72 m&ˈ7=T<Tѣ쒆C^ԶÎA[ N[ ixFgD&dѐ,x 4A+blmb  aE~ߡ1EK֎%KY0%?BWjOvԎ_:gg::Es;7D)@$ ăD4!4Ya D:=PgBo l)CNY t7F dm(%1$T|}CK+C6#M2D40<] IYJ9$;1:ؽ+{X[:;cU4:D2(C4L]]Ya@<셦'Z>0*D+ހ?aEǗA't4WV *,r P(шNo;9H}ԥ?B8J9JC܀tE $d;}>ֻٟ=Gگ=۷ۿ7:&~'C>GT5c AV?831]"'348ChšQ,6BAl脜76 ALJ3@'FaX@C0S#24%hI0GҪxI HC;C907s#EO?WOftm B&C?d @p( 4b~4>6/J?= @TI J*1b/8RkVx15^ĘbE$@聆X?hUF\e5R% 5P_9t `ܼXC\5Z\k :lYgѦUm[oƕ;n]wջoZs+tjaÇ'N\q顴J(Ioܹ^9r`Qeŗ#H+$Sl#Ag$l2' `9hI .n B=K\",߽qEQb#R"Kĵ[p{!4*鉟T|xA4%pxB,k00A QI,QLXlaqoEJD +ёFG2*mhaB,GQfFvGXGkyRqGPQ FDNqT!@ $7"9;Nǟ|q͛qA>z$Ra"&8Z9fsRTqeT>$zdrZKDUԶ|Ka-cMVm`}$ÄkԄA92ʉ"p-'F2-QYц,o8&JwLT=8gm$x .xb;4-'nW|I_ 93 ŗF&bZ!@y˛rA↛}9ZㆋF $0zꫭ^Ko e[Xn1'2J*qR{h]439)ܘ.haNȱf_l@$a kxp~9C$ #­4dOfr8ABӰ6@0LM5X] 89h%֪VAKH@hh T1"QAAbD81 ga {h$r0<'ZA8Na vNtb n9L KiU 'C`J%?MnK<i4)Qip0žtLLB!*sCt'̡3 :A ,@aO"'A AB5A q&jtX3v=o='5\z\#:XCDX8|"iSE8rc@:܀ zlW;*1pS(aSδD֠ZS;}3tӞ>#4Uq[ "H-T! F@B0(1FDЃ7Ёu @ Up18 U|*ֱf%P%r0df#A"nE3s7:nz!e<XDfA U D"A,a& } 0ޔ5qg,u3ьF41pXitqAu@kZOhFhQ*ȁ0 e]Y bH`BX2R7 {)>TNы=\ {E&;YAH3Q K -YWhT͘΀>p g4$8)΀%x/8-7NU򕱜e-o]f1e6ќf5=^gY2 Q)La h11ge(ʰͶxA,bh "A NfK^HUh(БqA:D+`ftvuZ|(jhЃ5F[(1 t]|ۃȴJ9UCЇC|a,jzɁC.eYno *g fĀ=j..ZP-1Y{$A L F.5͈%[pQbq%=A!a4C*g4KFX0P 'LbDhZJ3 s`d>ш=va uݏz|#AA e<oůt[< E v&"@g#t'^ Pv\~ F19mg`cPaˠD)Z9 $0Aa |Rd/ @ f%@1q !Hq `ȝ7ҌUЪ^u4F%(E#;pS `dnST` p!*H؂M!ل.0ަ`dJ`jʠtaZ"& @ a 6*h@x|6mA>n`A٦pdf .L-޸X ޢ *E0.ְ,p( ` Z0u ~ @ 1 BK3qC E1  .n0 .o@ ֠@ a @  Q j q+P/@K]qQ( ƀ NQٱ+ ! ,(`Hp*\ȰÇ#JHŋ3jȱǏ CIɓ( \ɲ˗0cʜI͛8sSAΟ@ JѣHZ$@ (:UիXjʵW} t0uίhӪ]˶۷Kݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkν\yӻ6O{ҽZCc?HA& JF?㍄fv ($h(,0(4h8Hi@JDi2jsL6䓶-9 TViXf%L>  l)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,0u lys!xڲ ,ghl\6Pi2 ېf9-07M16oM7Tsb6s9 4 y<~ 'hyDs1'Ne檷.nO@DQc 5@1/|5G/Wogw/o觯/o8@SgYH $l2&H 2ĠUNgBG(Bp " UL;fH!l֐%| N E3DPH*Z1!:(BlQ >t;h9x zpc#6t"]H:H e4"#Xf5Hd"I`Kczc[HJJ1 R> G⣇4(2< 8zPw^P$9[`t!dx@Wր+89Q\ŗ .?h|NHu @h3Ryӛl@)IQDg"sأG>(H@@".h<܉Ke(#&#z>x5ALc@#o4P"GUVa H ,}?ӑgh"5ʃyZLuZK#A?rA<y`=Hy1gzЃr =6z h=;wZ HQ"p Z=9رC1Ӭ+y@:=ٴ=ܡGZr'MaJRqg0\tbvk\W3m;jzb]E' p vs +5cD`<Ȼ؊Cl( 2302L6$4Acs?БSz}y2 /eVPip A?AZM>H?q̡+ KX!`?toL2hNs-B֦Y"8E5 a 9!d,aA:$` ?MBЈN?QE'W^H>\|$[#ư7X O(jc^[@@0A|wA"ˑjc)%hzǶuV fڎ1~ @u0Aݏ{c1 2i18R9cd$Sǥx-ÁuBF_!Ɣ2|*=UzG^대hp|Cǜ8?Q1 E!ѹfdxQxz?Z 9Cn:% WFwCC|Ђ {DdB!냷`? `*@B`q 9 0%1s~(ͼ7Ww>#XdG>HPD$sWAG>Z4|hB˃:4ϫ܏#6щLh߄7EHΐ4pA_xX#EOAtC`D1L`B:D8t01hɓOL5@yI'Dw`!\` z Gϧ`P o 9PTwa| xb7vEE$ } ӰtP p "]$@MDDUP1?y5\5\\H_, p |0 B ؤH]_0[5\XGud x  p B0Yo R/ eUOVB14' P ;X ` QD` hP d\h6hٖ~@0 x| q6E"O6WH| k+1\p@ X}6\DX故 W׸ P >(E pzxzx_QRA9\ @',E9I&dL8vEbCKb`{P oTpFkLNYpt #va~wsft JIZ L9tCElu tT{9E {`bؘy' P: o KM8tLIW) PVYe#9yYYDFp nЙCB I Eå`y9,iv' HjO@A9QN"@ nT 8Ss5`yQCPD΀I9@t tJzWELN@p$Pu x0 dt T]Fpg L"@L4 wU1@w( ħ?hAV{PJTYwdpS0O ^'SW8PILnw]RO(SDyED \4VjYDKP\J>t Qk8I:CiZ= T3 y`JW}yШh0y=椔RTC- QVQPECЦ070e\ J<ZuMYuVhЫ :Ci d@0H TyE" ; JUd8O1 StLkNH qڣp F;lU<5pSD;E UOQ1`XTP1`,Xv9RkkP5CL tpPVL00JuH@OXM# godVRb<7[5UP%Fn޸e9C tp ^W@R&e9w@:w>PYUSp xk3Ad =Fo߻wB `  L  O>}tM9@ #&\4B%=)BVDQDC FpvC0_W nKS2DjfD@ K'jk<4EAƶ3 EZLF\g]p4B C 0 p08ҧЩ|=Q{Q!|]{( u@U9nX ͠ "4 Ot@ ש;Ȑv A0 pv0 0EOD;L҉tg}l=` xK|)1:[Lu UCBnILEF D@zˊI ɐ dΆp P ٠@ 9bp Q`~߫Vu=nY$4mS@Qk ~\E4 Ueup iqB\ @xkHq " PVet e5QWOLCaspJo,[ .NfUlM84oB`[ P I@0pG *ˁp P `$0YψXv0M{?+̹,f*_hcsH!bIs`s {@lP P F|]   WeE{p@ JD@+f&<Ҏg[t op йp̀$0{CE$ LkTUp ȦdUqQ  :FR .MG ޡA ϧ p @ s۱Z"4^ 2ڿt>QD-^ĘQF=~RH%MDR{-SL5a:fvI4\9sɓ$HgϖܵVtQVl͞k'h @Si3_C$j80bDIq%FKw^tI3&zn֊٥2]Sc +hԁSǮJ޽}\pō8Ur˝?w]D]#)t_ݿZoZ"OFq)u筟S|H EP@1~̱Ǟt΋L4CM6I0Eo$V VxB|Q1GwG$򞗊Gȁb0"ZiǛ`VYŘmqG/B$ۑ/afn';\RG%}!f8h@k$X9zpUq4ۄ?z :șg wn gV[o5ג_6Xa%V؇%6MzIňa(I8=ht'|Ifwaǟ{A]wmǝm"9Դ|AI ]AGVZYt,#$O0DO:PIKDu͇t9fg9g,RT@CRs~ :Ɵ|'F8ܤMDuٹa~!5zh&ɇzba+.r@#O٣NΘ‡*֨RBlnidI=n\qP^Tgu.fWgug0vgvmvge-Zij89ChGA:$L2dNvqwkZtg[1~ yſ\v|!ИPd (E9.`;+vAPl˄n1=kxC)0/D(FAB c.D(z:zhauCvk?JsXz@ ዖuz.. Nj&q #^Ct:؋VxbG,Q U ?Q\XA ^ϭG.&8ʥ2c=UBC`*k4cUC&р9 _qDcK:xCVҕw [?J6%|%4MiFP=̑{Q0aKPF?q@<ӧe){8 U4A4Q eB&Q"@h`̀|G-׃T`,%:QV8̙thv.rdsDcEdF8<ўC+JjNpFH"|z@-A f6izHAh\j`%(X>pW3pңOk^׌g+|*zDCl2\d$Y;fx`[p3 > FaHtXfHaՏ<y, pp\b}7!nІ !!'-lYQ <3CBr:7Y&/ԏ{D f1 FBK6qH\BDnъig3c2VzS2D7a!sAЃ%pah$ N`)F8Ѩea)8 A#Ѐ) 깂2)!կe=k*E]Umc">tO|~(DXO:4(g[%Ih, "OTLlk8p _BK&xTvD3?g>cPF^΂>mHB A H8T`ɲy{Ck ,m.$l!=`{U6!ؤyԇ M^h2~ DѣsP8'} )AZ)ISv1AQ[H\Xf{o޶Ĝ`<nd ֲ~xsK|%?yW|KdE4R鎝g6.AW8Ҙ g{PBy:Oww$@I_ a$2 nCsХYL5H~D-QB\=2*p g)/x#kd!ڨjy2: v#RR=vu XA#j6hmфJMM}y@ @9ҩrb)hjHQ4k(OR1H5C@>XX Rp;K@'ω+up<!8*iBװrhBNx9Cчp`Ù(z +ss $? q##*K02$4ws숟3$eh:0 sB1=Z!HFR3hhmWX.z7(?TyrB4zsar臜AO@Oh,UO؄AHZTh#0.4= (93VIO׸> 3mхHhT;Z4B t*#nʡ(/qCʤTʤ쳄BT@`詨hu0` i:qYPOds@i IHyX|'@/0 D7"xX+ [pV 3h'(j=8~fx ٚIYA dV#z͇h>s@HKzrȖttz2LAL؄3](BjdH#ڬ|)NO $)Y~8D*zx0g˜j"^(UJup0`07t}. M"%XH>"#lu؉m:ŝX[`Nbܚ{"2>$vKp$>8Br"rD,K([Qr Q <"H*혒gai( NCZȇr`rx ĤVh]L;p<>BU$"H%p ">(Pg : [sz(a}xŸ"A~ "شsHRsǞhY]%`>.PxB0Z(*]ȇ":bO84os@qUڥo|/AO 4V4mEclEPz@n)|psXα; 9kS"R#~@,@s8<-z.5z?|80?yxZb)PFXѓlYXua0@e"R8HF": #h@J )eЅ3H80ܖR;y _E@4Pm+8aeTzmAZpR]={3\h1i4|8R(ߏዝ R c>HPЍk 0)NG >8*20يQ{'$iGaTUU3ZR1$<+YXRtp&qS!F$3bp|92UShѲsG8P3hcsm7xfZF4E349Hq8:XZ(GX<~3stޢyV]PK81Vpq MZ ˷GWtB.XI劆u[‡9R _՚8KN#hʇ=MA"'၇\pf(XDzxH8S4o{̓SX=Tʅ)i .Lq;ByI^L2D䂦Kj)ZR&ݥLJ<\ (/ڋ[#=z_(0 QvZv]#嘌0>A%hXk')-P;HPy#]xe'R/{~HNAQAyOk8Z#k]WN@"@“1?ުi(W!7}Y tm=Q}@Ƈx:o4p $]OmȆc 5z7k>hR$~mK#`iEWѨb .ȨK_h: >|Qm!:j/ያ1 D.Ka~1+t7=i:x6Bsh2E@$Dn9jP7$V. 9y)o~.(@1$[vxR -%. hch|<(% 8470/@47ؤ)P~NcXjiCyIyfi,{Q 2?roͮJƙՎBU /k:20['9ؤ@ph3 qRn8u'P7܏L"*'Cu0h^:hc820ĞH>eЅi ґ@'40C!s7n !*]8*2kem' 仸@~7/_˔ᐤ 7|f 0"bȁ\eZaPeeUo@_8Vu|wuC Upc7JYNS1$<:S_p1,9&|&r#V &T3L9DSK3R-NUE_D_\<4'kۇ{ڵ1N:騣:뭻p8N8; ?<=%U_Q |؎ظp4XBJ3O1Nź 4Orm>-VI4 Mdb`D&fea?~|#(G=юE- P"sD(LVatx12\8D䞗9ahMя\0 C")&],p-r^"IPsx e h. 5E|=(8.#4ِ@SRarYi3lʷ#g(N9!% 9&1IaC b`TdaGd̃hڲ)J-LDYxV%1C^TR^*h31(ҕ`B>#xFƒ01Na J}`CE'\*׹v+?f~e(x~xTX(, CpRNd1Ntx&61[h}XB0XHPts&D[ >СG-r@F2Aэm#HDy[q@ jt ,QtL0'DHXBat'XBЃ?*kDrvA1;eD+ R{2i1rA^a+`+K] Uu(XBs 91d"du׽Ȭms[:6-q.t ]R+q o\b Èiȍ{9N]La!1'|=<~RnȂ'* `?QPiK"Khtǚ: R:a+Ycx@(5+x4 !a=r 'pvDAt1*)_6Ӯvn/b$h5jbV?`F{ԃPYj`cNc!Ѐ5\ÃU>yYΰ!vE A532IA1LA,B0(ހ!I5aA y@Bkkh[fy X0T2\T;D7 _ z@?:;-Y鐅.肩tv6'xB?t ?D"QD8?L^=>D@l\ %T;Y DI=<˴lB%h<9B,?XC@Th0 < #?:^@,Μx!UBEMB7B>؉A?CxQ8 ?96TxDb9B HQ \$-|B(M&0?C`0P4Lʼn.1TA<98+\"3C-DC([:d7B-p8ݗ] ,G?%\c@Y@҉Aj I،.\--I1 lH9ɽx =e\_9$'p($>0'@BPA ؑT'T&Hf%4U4XCP΃9'x{/!A#<7dZ?r0 C VEJ)C` dY) x ;d[\'z '{ @eK9 ,E>tC*"b,*dZ:NF.Q%fБU(!0dc>",@CɨL_-khpֳfn1(=0|?Aq5Ť7B- 3=T9"LU FT)/M>`\WԀҴ@E(/''`ǹJ7 c) 2J'P0,`&M1(q% W?\.(ÏR!D1D@CӢK s0$Y:\;@-:84pgL@/?ZZ m9:|Pk$c*8y׬)\'C1?sHH@AV+2vV1P ]$po5B)B/,`%(n $@=hŬ :׎K<@ @o:C9DE p>B4<$B BMdh.A0-60:$5 9CO5D\k*9Mݘq&DB7`2A ʬ N?WeIbgf fwgw6X@>A,j-l^L.D999Po;-%@P@+C96۠;Shu@I.W)'T=495Y ^G8t99@9CҽCn0Aܗ0_68q7xox{ϒV8AC9hbgM">ij^C?XІkX性#|20;@\&n\q⼍cE/hĈHJx f譜Rn=j:s_*QРe d9vM\S>^Đbm 2)rAeΥ_ʎaDAgu9X/r: (t-Y%FQ+byItMe ._ GRfּsgϟA=tiӧQVuւ]ǖ=inqֽwo߿}m0$)VK-[6\ӖmY2B+<`I 7X6od hѠOY>=^ VpDB "HjƩZ@h%zTp#pF| F@BqF3casjrl ay7"9#.z!y-/ S1,3LS5l7_azBqFAkܦ:fO̙&nQq^hΈjFHUbDlfpIx!%r4Б5zH!"/g[IP+q ٳ+F$Ztej$jR'ZDqtPkh z  pT4S)=gAYI.dq|!OiRNdjo^Hdk 摩yƛ[FfJjRCF38Yq*x9x 4vڮFVʱRHa#I3qHHQךШa^2kj6 6@&sYoaϬ_fؔly߁^;{fġYwXgaXiFzޟfjJDe}(TL"h "Θ'P9= ݦ4$l2U5 VCKF3BFAKІ.<#+\8 [Ҏ=D8)!"MtE)N1DdaBd\QVhxab4qF&0r:T!E|Y3 _a#0!{ k0#PG̐  pO9W$,@G+ xs7,rZF+1h2#B-dNbBt3MirIh5 Kan1ݼ7Np8SbTӜTF4`1]887GDd3quDAAOjz/iUx _(ל>x@( OA)}1E@Ɂ . ei1ZQZ<#DLF@ g;UnU]WVUe%Y͚VUݜfW53s]׹|](0kJJp4"#A*T DUE%]2؅YfXL| O$La=xi|P*Y7H`M*"6֣CO3 C2vqNhEjwVn0^񎗼5y+^׼{A"v€0cE~+^0z A(C2K F@KQ2UaHeHh0hC.S-Tp "`ņ+_8W5x cx` !ghF/HRBwe-oLʈhek9dsi1gvsQg0ofE?;#Vtό:LtXq #Fp *SY*# jVZA% z *LW*;U'gl;o8CEM5rնMBmomoFnM +. n5(A w쭄0@ ?P7]%@3%hA|9 ?(A >03dpӁ>`@HT N\ ư `Xs. ! , }@*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI&lɳϟ@ JѣH*]ʴӧPJJիXjʵkK)^ÊKYΪ]˶[ʝK]˷[KO"^̸ǐ#KL˘3Ϡ MӨS^ͺװc˞M۸sͻMV9#_μУKNسk3O<ӫ/:@{˗@ ЯxNTv 6R{F(V`Y ) @A(V0(4h8<@)DiH&L6PF)TViXnu d!^1<5blp)tix|矀*蠄j衈&袌MF*餔V*6]Z馜$N*ꨤhꪬ꫰*묭@X 8*?P?xB@k?(ҏ6Bm~x2ZN#m4ɸf;:2-rn72ꏺ[/2o h?t?,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmheެpv6bb,,8CKu|xVK5hy|{<{yۜ"袗Go7^q갧zv>v~;v[G1C/3O<_}[}t}9?]g'>[׬ YcyU[M)ǘfF5QCs:G@4GAh,"E e9∆ޠ~PF3Vl9OXB@.m 48̀1 `C%4 z` H2hL6pH:1P+x9w IBR"$đK;&)P򒗄I:I㓠 e("R򔟴d%xVH;ҁcd'U2J/yʉ+)KJ#?(y%/n!e>L6ӏ3@"Tć.pړ >+)|Ö8z#T jXP虒} DяA( D@B Zt#5INӅ\ RWdO $| QX܀OijIZa DQ*DI@ C8u@+V fC9p _X\y@i<JԀ5XnٓЃpK-qUJ" `yC#^ч gi=M~#g3ӋOҨ n)чSH% {EފCӈB:KԤ:G5ANNx_*I) pҙʜd>s~VɀQẊ9J̄ʀdeY8#0G:aB9J!(9%Ȳp2EX Ѭ'a*d弲EG:xγ@|=|3BqjaG?e6\AEYCGm)-/W"ф!":QpWd"ota`=ڥ{pYd4PYҠ` 5k`ݱVp*qv 崇-($a =G H輖#*kq>%$! PD"L&2!Mix[`X";|2 9A`wW:lt4CD- 4A3Α[ĸMr#Oy"$ԛ2 L`b6 ex.Qz#9msW$C&>NTw@EuiXc0=YL?T! 69KL /8 wC$7BU0By ~du7]=fF{Yq@ 0Qy(7y I w@ .f{pL{ PuԀ:(`3FcG~JIH¶\(h e0 px~YL׃dNyPRix 6+Mip9t0$z( omXOq AvD0AZi%48rZ&"1P |0:Xj*NUg= N }@g-f필t,` PM X =`/\PKWr*[%1\X Hpmg j  hj S@<gV57s&aO%V,ET P& Qj%[` D[<@ 5joGw[~ /{-U8[jv_Du ċ`UnUn7MTtDD@D`$wP+0E+vf >E_S $xJ^VP\hP6}{sW R IW<U$v{hMTQpbv SU<`y`7 <$\xt4nz\'[RhМQ0= a(QM qU󵖑Vui p?Xh١gdKt] uIk5\]$n Om@u vI#hacGT P @r0 y0R^h VAEPsX䄄֟p0-L3zP0_Ph "vub"R Φ#bPGu.kp/4@g;@T 0TPWN+y nМI=480FRcċ=H 0N@] `Ppy[yp4px/ImP`Ks^` `Gzo@ PY Z_IDez F>֝u$;L(W~I~Աjp3p  dW: @ DZ@nu|E6c䮂f% P  0 |@vsp IVC4Dpx,VoċTNlJESS IDd(bƗ P ˰ p ^ la5E1ధp͉_H;zFT``R{[580K1GNV뱩ڋ%k0 UDzxP xo9 Y@QI BQP p?r F<)r` UN{0Ryxv(e@ AiTN\~ v @| p p QYb&"(ӀlJkP Pe]FТcD@ aW7Md{95PQ"M Ё`f0w~Ӱ ` CR $uF~Da鶐h}te[\ M up 0 ՠ YPN@h ml H @, ;t4I UXH1PZgU/c[#V P p @Zs $` xL #hϵhq8)j-GdМsD0o`nPooE} ׄζ \0U GK` xu`u ]W` p |j:stbucEU 0\sB t4p ȩ\Ig0  @  ]LxŰ- s @ia8& dI P$:sLNe:wԩϒ5x1%/pc]KvAeyIXة+^\ 9z|VXe͞EVZmݾW\uś{X߯| 6wKj'J+%㗮 (k@-z*.?idHԀ̓ģ|Bdбf/הװkjޣck ҩK_>KS$I #{Xzݿ_|"/{?Jt¦ffzGcOPqD~!)i'$uj*Vs@a缤^RVz*G36Zi6Z|6[mk[yH]uchŜasYFv Z~H:LD|q*@"j $|Zr|&H @"H{ eJaXhqb=3#y| %~9cbX|橧jjz, zkbe ^s٥oH!|>([dd>Isqg~#!'r~zfl Nӗ*V a.ɇ{^*^j˩/6RO)+yeyy駟~kq{Xrux̩?y3?yN6'N)^`"G葏T TKcOM`K(J+"|@Ga*;>1Lt"%@s?N$ a= gbAee9F6,F8Ef& @e,#鈚;0]4b*UJVkZS%HTaS_@zݦn"9`>~"G10N0`D'ᐶGI,%9'G#/Dא3z{O(Wb9 \x%9CBQҡhD݄R?ta?<$L5G/ b3A} 됅n=O&D kHGHpO({XaӌOFi$l@p\(2gT! hZպVŢMEe6G5C41XO=dPIo  m4P9+ yŰ0 =Ca/HcH J@;=vyոEn[JQrl rԊ핢b48anPF)J Bl<䡲A\}W.CL{i0π̇ap<8?Oy$VcHqE<ľ)MjQSAZҏzQf&,8!z|#@WҎ#d Xo t:ֱ>I,!'hPM,4t@籔~#er;,F@q8~Hmtݣ$kˡbw@GQ'8k:Tvm(8Ac!7}#Sb \,0&/77F>H+P +văx*UY,hnwa1hBSNB8Ȧ0^l.9FA]0D"٘d{2Ghч9bq aG+03@m?vQ)pEc5'pXb|NkpeOP \D\7~GGA7>wӣ>ӣ,SUu#03`N@vPG8*t7GQRF$rOڈπ+B9N"-  [V(-=R,]e=QڡvQ!qazֳu˽Y`?(`vmÀqfxu Nf1Eq>970C8T 'lHЈݔˈ8Fs5SXYrԡ8RlL> hzWZ e)"K^)N#Q)zP/ qXhs8P*X.ء@̉ e Ri D%ED @ %qY'z (L a a-.u ,RS4hHx,K|f8%PrR-7*`>p 9 KHZpthA*+ ZKu4r?3ȌISDEhɺUdŪ[űXM{X u8iYTVԣ 4*pS̅`A$؜pPؒ( #/r.ũs+Ri0f{hfQ_j 8 9+=JŹ HŃDH2B;+D"(SH8dchq|&u.wh$9d$ ">he q0rl2 u`FG#0Nz:%. .1Ȅ˰4r1sKZC16y6JdāX`/wS71]~gdS@c?hXc3H]rx;.R0axTL&PB s\l4)*y`)bI 6D ,K(7DmT )JS?~P.(9NU+hJBXςG0+\ܗl)<@@ Z(|ȅ>%O Rl؅CYGAX} M۱+ PhXMu,#J>SQ`γDw3˴G<;F8l|X[ȅJT۱Їs- ӂ=~@E pNZX1%|jZcXMJЄM`Op ?Q(S"4z0]_ *.9KeRث()計@>&%/3x|8)۱OhiPQ0fXxuX(R42l҆3OMI0d(fONxZ(OPNZ6̥b90TKX@/9zWM@O\r/H jQMpЅeC9D< ^R]8d[I([nV jOYikEd@f8ZV=.F84D#kf.{U"Wz-@(z;#=NX郪,0rBPJM؄f"?0rk@dJrFJxM`p ^@ȠzRЅZ QcD+.4M% ]$lYANc(HO0i4({{FAl"jH!PXDdLWChO ["< ȃj:iv9)xFx^ڝBJ8$ B@#i. ^~Gh>7w a"dќ-#uha uiVYp]ןST![f`8pd}M؅bixle>LY.  |@Xx hz ('P<;Br˘|Rȃ@Qbˑ-2kQ"hzb EYٙ^lZ-zPMAlpt+WXb0b_<󼫠25# Z`ZżC@;"{"j6:sEf^E 8i_O]BxŲݓ\(x}AuX{чEIJpה:3i%J(HT0c`LuB/F72GEcXƘh.bl ĉ:Iѳ濄Z>W`oB*D7UYyh葬(hQa 9MSc9oUgzAHKX,Xȅ1$3ۢɘS BHLɥ/x eJlNlKP ፇ`1I}y+ z4FWPiHмbUPП ~X d G^F"Hl`Uʗ%Ut L c;͆䪴eNߠqVH(exsCc9:xH,1X#7}P[|7 X|PJXe&V~2Ht,]@q{825c1qP;O5_%w= Wܘ{]XjVWpQ }؇č&hxdmR}uSepes*!Xi@U`M>ׄAboR^Ijo鮚>aX}H;GP-^NescWort a3ʇsIA=U9i D(U=ZXu|/QlhhRd;PPO2tV>t(Hȃ<^w$z>Vn 6?X95R+#)(iH8Z.gP+o!GH<ɑ$%uXL JExRhQ)8BdehцPV& =S=ODI` X?|"*c^J5sy@B*G+'pl}%V>2ۨw Ԋ.W!MUKDSl,SCy?H5xTB &P>6\'k-44htik??_wM;j,Ԁ{^ #@ |f9@.TGS(^t#XA%Da H ̉ЀЇgt(58auBY*e܀ <DŽ<;$XG"ƱϘE+Q\LA H@r$]#=>Li c$!CDxp F/Z ΢%p [< BKT8:qAR# :69H`4 P;Ɨ]Du&r}ek_%Pm)ۢVA@xD,Dy(~i?Q ރ# ݈;BRi\TBh6Ŏ4-(Hч9"gi.u*P*GDgz E,fx9̑e9Wπ( nF.~+`9GH揂WCni?t /<?1|19 p !jQprgF= sD$B xRR .K;wq kd$I>M 0S>!lB{٫TR1@`,D?}/*җc&T_>f%^\Y&0_6$2|W/P%M9qU*/a#_@/p 71i&@?ӨzgU^l_ˠGGF4*TH`@R5) |,1GӋی773H͋q[:e0fvt`xsQ)AٔyFR(4Q" B|8>{T =A>? 2 9vg*\vqVO)A1rAA%3-dmgvdfF ? 1:$"1Ğ\#0n ;q#A!SN\ *XLj:IiEzB%iT[=D+Wʆ.ΡJN.yg*EAPgHNB1(F#яZ%~ѳƆ Yd0t2=! KNǩq  uA7,Yܠ"a?QHV93yҌhSݾ/Z?Qv} "VD' SH#|;UŦCQ%98.V@@VxqZ y9~ }8F$D4TKFQLV ޴SPxCT.?`!PĹ-PЃ,0P'BRx3\!40t:? Ph`F9xpA- Hx'; !CHWhQ+`^ d>@ݟ?^rx?0C2B1 >D-pB+lT3lL PDWCpBX@.E>1Fb&9%f+>Sa[EY숟 #@"=y^vyE2,gFZ;4 ;Q9,CZmLq,X=l#A??A\ d?=3D:$J|$<WA/y>FTOTUeVn%W:UVeWvex%VXf%_? ag ZTYje>^$HB^R^?(VUuuŷe5>?2T ffYjYV<&9!# O&lfW*b2?\EQA.LH^Np?!R.yE.tP8UC08t^|# O)^;,(:rh!JVB9D2LA'J4a3Z@.,>_<Tp4Dr:ANPK|q(K(0Yދhc-%T19,$ABt٥, Ћ2g^iJ#?,7>D28#H"hR$* h5p74LtLq1@BЩ7/0-{B,-#ICB98|:#,)|M}M @47t3!{7CͥD @9xt<3@s3[ӳ\K׵]ߵK;^b57X`kC]5,'88$6}l+Ђ62+m5D _55:h'65xg6^{44A  %,6x,@Kk67H((VqW ?_r3Pl/2h] 2\7l_wC<P@ 5o'65{o67|Ƿ|7}}7}o{éiT6T6l:(C#16L4C46"@t3Ǿ#~3ЀZ/;r.p2hC48C445`t&2>34}3C~/zۂ/0ڟ??s?3C5 W 308@Dq b4#=b- KE[ ?L3e=ÜlvL5q޼/@AG׳c3D @If|S%H#Azdr4O<ٴٴjբTY+N1Wƕ;n]wջo_3K'sPT'O`*,BFX):` Z/b䠑c\X5”Wyc,U1.5-2bz);lH>QVu *91gi \xF P ,LPf% AjA,tP_AÇr8C CQO"P"ѣ6:`OH 2( $T×_iP !f=tJ 1R+[vVz,Cty ]ۅ`Ď]v]y?^0 K. `b]PI)K1eT.N=ՋQI}/f±ćHi:r`Yu"j*hNINir୏i:T)$iK`m5iZZep2Y:EYv!+6]lYgQa%×R kZIiz$WRq뉣]çjӫ_Ͼ˟OϿ(h& 65V?f0@>v? $ڤM(VU.#04i@)D,9ӏb_+n䓬H#TVI݉V5c\ϊ]ph^曖1c@igcϝ|p)b$t͠ϣÏ fW?T~|=H;`Iqӈ ?~x"o5H=;#R#pl+VZmPlOBηDOtn+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L74<-wC5!qe ,phdi1@M܇ASe 2ͩdw_:ሷͳ7G.WngwoD~ݔY:y뮳^괋.{|~{|;%SR-DEMq1 =Qp5T>觯췭 w1\F!㨆3wo!ZA?6GxCA=\ tr: G@;PHQ H"w rl t#$! E1l$$HQcG:tMb IZҲ>Lj5 ]ĥ,f&G4tCs6 f ?ZT&A|<D {C$gblIZT0 b#h=A98TNI |K0*r# K- L(Dx:ȱF! DC8%H|1?hX>jԂ8>89_<{q&,;bc#>a d0P8\z N3ЇnV P+'~4Z/};7Ǚh0WqQ#Tf5((щJ`#֧4.gmZrG? d%v`Jmz5x> uv\cg0GLMn(/{û" 5(W `T3$7_mYR-h>qu mF/ ʆ ī'c#k1rtmxAaj+W%6я㎶qtWp=**8Wls3!,ĚP,gNV@)lD?q D_x@/l׊'K:_ $ Џj_=P){PU ãR։z!^u gio$%t:v_{곲p# U đhJPcpqvP÷yiz9P\ Iy C:Ep @~w9 VD z2@ ~Zn K ~ xs :2L` zRo$I I(#O{TC)68&jTM]dr@=4g fLfUQ(WWxU J7 ~sP 2 H@@b5}p&wXitq*G\֤73 DITQ w+1vqxul  ؐ< P D< Ѐ KQfxX(y6uH\ׁ$ @ P P  4h hOTҰtpJ#YK'N\ i p e:‚DuKM@}_HPpLt~:L .łPTXJ.2PJx"EX ~ hp @~c `S/0smUPƕP90:YNg ,'`(p  @ I7K Ȑ Hh#g05O/P &LEu0$< ـ @P `i jmJ+8 0 pթ wv d?0dDIř dQ} ~R0 vIf& ŠMUP  @y xfZb1S:yIC (Uet9zዃtP Uy!Ɔw94u ,8ZҀ vi `P ( 0ZTIpM!@5% `Jq5a{ s#PYN_5P9 P0 I 0 H90U 7y P zJ piP\0wl)zh @ 0 iP p sD h~JDMՄF Ѐ 0nJ9R pcuMt\\z`"@k   ǐ uc@v@fGU%H2U gksr(]Ԕ@ p ntIPp S`SPT`S;@  䐏 u<@}`%zzӪsdrT)  p]P tkT7p y2G3Jw Ű@W 0/\p[d py P "K\_Q@ 5Q(]"2%U d` *7V Q`fP ~u$uQRqELFgj kKKKy wT=P)@UUYeM朽QsJb<6 WKPU# D &ረ P p PYO #== Ja4T6=j Ii0qy )e5 DKdKC 1MJ)p ǐDŽ簏  2\Nw:<\0Є_` I IaJ 4 7=5 cfGB\+f1I$s @ : X ZH۫ i e氳 =`TY O!K^Ft Qp P\ }0 sp 0O֤ D{ pFIx 0Z X 0Z̰  #;N6 *Q Heh{ :UaPL}vWbz8@g|u4К4`g։a(ۼqobbN d\ Vdtx iIiHyi0Py_Q V$0`@O`If­.5f=xHpDA}`u' ң|l(rxUJ j 0ЋJѧw s`  9=f:<5 =o{iU˾[ *XDp+L/G"LP ( 0 ^5liNeF͝A<`%Q ǪuM d`ERvt@  uh pa\r^:L7s" aC ړn 7F\4Tn <Y]PQPGƏleYzpN "p] ӠSelz :74 0'ˀ 6"FZ0]ǚhR @./%Uׅ0E%NZ7IV#8J$M4KT 5f~ڞ= |x n5Ő (r=+@#=ԓ/ ޹JaYUpZ Uߌ,[_NPHdOIP\UP n0y#"IėKEKp&P [[@^'Nt 0ZK~tgPy&HYrJsKP hNo =yDXjIWǐd>O<;O@`Rd @C%wSHճfn)s H* LHy 0DdǥJڕZz U`v  {lxL@ D-4SP7 s_JgPU \a5:_&_._vMrp n@? E8¿1-P _vR>kiOZvn^=w]|Ad?v!nB/^O];|=TPEETRM>UTU^ŚUVAG~Nn #пyc~ܿ~ n=ug]ѭwny!ǬqxKeEԉQ'x~AZ3~]QJ~ҥ\r͝?]tC^͓$Izpal>pkݽ{x]_t lgpʙm0KpCOdDbAFR$ֻpr9&vG2H!dD=lD$*ڱ1at#%RYl j bQ%wJGrA>JF醞1HHq.r~̩F5,;r&i!OE5UUWeը R(r${5hyYh@SGGzO/PFdW9ǟy>s,W(YB1]X4j!fSkNoy'vɧZjUfaJ'>KwIS@T#VZ+/쨬da aBrgY@[AvKGIծypᇞddqpqXI|8%EiƇZ1+‡p&ޘ ;o{G|L)p'p|IH5򉆗|\쉧$7yɣ(vN>$Fm@Qa FH}Vs!uzT'f&,afKHa3ι'|GJV tC~jSgj\p 4|F%B }~dCX&* e4O`=`A'yB*l(=~wP6'\4tԣG@_D&Ob8E~PKf>d;1nGŞN}A Ȑ 'mD`ԁ|T@*hL-$@2P|gP;֢S081[@y2Б8%:1idx?HRvIK^җ\Q_b,lRepdz#F72Fȇ>"OPb_2cNF E@9H.p xXF8A. /5Qv4}0'uc(4vQ WP:@5:6:(4MYaL8G>TDA,a G?a!g+y 4ڠ'j ҈(ӚiKc?aS@-h^&4"E΢tC ,AAC=LSO0GHx%G)Q> Y([Q/vc$h$G1J4 sܢ2ʁY YU?V׺͛_\#{$n0G#e! FȂ4%@ U 㧾$8)D]0Qs Dcۑ1CKX!RTFooDbgʼVC eHe1NbvHXaeM'6qyC5;(tFw$%1ypxǡ1& }t z$"?`/]i,˳f óJ͋a.&|`/T)x}N!hV:p^LP4f XTc/pUGGzG" G*$NyT5p96cQ?VbB@G5`2Gc6$AR(Wwe?{; eLv1R#+cOǵ-v$e,t$a11Ƅ=,yw֣}Bΰ,,3DY:9|!3sD'i""6k=ST@ǡ X;(SHz( 1;#v!Hx~e8 8Rɑ1+ =#j@2bD:c(¤XbГ@{ȬuH``sHh yp'!:\?v;{Kpe0 t14ȇ2ˇJiIA3$KD%..cċY |FЄPk sɪ1|8~ý"*Щͱ]i;*rhC3x7؇mƇo0+V)eWVX _Z+zܸ`G9r23RFkxY,Pzsc N7)o}"nmP~M M0Y42eh#͇Yxu(xyz$(H R8h3lsP}0YP eP  _c](n!Fg!;O NeSXO\(E3qX(f9eh%% 0RVPmQOcAip\Pk*˵k!Rhmmw^^g 1":= dhLIaf8Rr|8@#:apFȇ\p@4 *| ^H8yըYPA"zphN377 51Hpp0b窩HF E81rDY.7'|Avl3i4ngDhP%o^sH YN40pHݚٲwD讕ˑaZ+.73d8Y~]ppR ~ȇ] <#b dTƐ:KdՠP(ÓiTb9j w>~n[w_Z+APb1)h=lRP sxw Lfv|NXw4̓sPbfgyu'8jxQ0w%sȦIpexa])kj2pxv%G4*UpPUj6s=V}v[}FAs!~\ 7Re:UG|;=g|y'nIb؅AFV09H!4?1ju >QX 1PX3Uxw_xX:/@|_؅Q(|y靗Km+pxw9̇bP jQxe40EC"h)bf,^˖A#KSs"$]VR_ $Bl 3S":=v?V0!Y 8#c4l2y 9OH!c9Ũ,D|M:9^yI9%UZy%YZUIFlSPHB?QD`i5ՃN>)NMKlb;iVR:dS ?cMWdO=`Q_M#H /2 #Y\:"UOm% ;,>,?9N2y3O.s E?\=$&C̶8c8J)iO93 %uIZ6rL5O>3pt.%CK)G{,-21?-4?t6uIr 3>8T<5ہ*ƬL%.438sTc5[ҌLEQ ь?eJ1s<3۬2;8KsMcwlR?۱;VEc_TwvI(sϘuM N)_0#(3M+T.0#P.F$8/N>XI?z53~髿>]F4V:c?pRL'mO'g;'骡t&@$dF?r007Zу G9t#XZ C&>!)G0joq]I+H t $nu*|I? qt[ |wj W*$Ҁ Ĩ@$1tycIG5gղS⇨[ضXV>cYG'H#<͒-o[(mq?plj_rD3nAٵ摏e/ rzp]uW)F/2I=rܶ+nWސ3@SAwʼ&3sᣩ0Sygc w$c]hÓ$, Oڈ?egp.jP5.!U)E$\;P>3Cs [x5)y)8O ׀ɜ%9OɍC"%T4(W=> jR i@Q!rɷ|q*s:E 81S6ÄQT ]d/;NlG;&ڹp|G6v?((8ar@ HZ}Apb) Ґ=h$ AS ҈ʅ'RH r mC.r>)9SH,css|(_myxG? @z mx 4f?ʡ J::A@B&8/9A%$=b<\^$ K0)Yb뽇3;/CјƂq=O~ģ@, =uD:$X3GuO6KTJP?I@9L>'*?|?xK_Iy9ыNܙr"ARx0<1D77p4H?>C*|4C_!i!^E`_P f`Ruz O| C=D w!q 28d Ο8C|AxD97?C?ROTҟVn!v~664u!OP7L9JazC9C= 877! D^!!p"rO$"$#>"$F#$2"Uhj6p""z'zO$6P5lb%6b%"7X6XP*"bP(!".^@6b//#11 #O#02.E/+jb/nC*15^1R4f6@7j6#T#5c9c.:J44#<<;=c<=>P>U#=A$Bd@Q?:FDZG4TE^$FV$ODddFvGEFbG$JEnFrFdHIN$M֤t<NN$OOdONNVP%R%PPO$TF%U42PUV%V^Vf%WnWv%X~V^Xr%OeYeUZT%\B1%]֥]%^^%Qes%]_ &`&OeRe\.&c0<&dFdJ0 dNfe>ff f^&DevgVg&\fOg&j:fdfcƦl3Ԧm&3m&n&n.mgm oDm3'oNmo'nqn>'u22`gnEnZUtvΦxyPz''{zQVgP}{~g{g~E'! ,(_Hp`*\ȰÇ#JHŋ3jȱǏ CIdH&S\ɲ˗0cʜIM@yϟ@ Jэ T@ $8JիXjR΁ 8 ,׳hӪ]˶MnʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKN@(}ؼެlD}+ƽ}ϿW0߀ޔOAlS 6F(Vhfv (qC (O0~w`1hP ިYr (²#uAH.Ǐ@MpTV/V$N`Vai~9@ )n?=i'kb|Ν|砣-%fϢF*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,WlgM v"W9kLs0ܓ;2?M7Q#h~6O&T64fPG-TWmXg\w`-dmh椳6o?Ot_:Բr˝ Rp#t$@=(S[3ă~ \R{<=yCG\!E3c3kRH?J^?㯿mXJvCP 7@ThFk`wA RP 7, \`Ӎ%atBB9' yB`8!tpABGt@!>FLȖD PH*ZX̢.z` H2~ I(ͨwl"c#l!GspH;:r H|H "cC7f,5[AC=4k@;qI({Y'YA$L;ځ=! 'SIL8D-OӊJ}g"!W 'pc&39ÐL>S2S:k&fhT8L:׉hvĝ܋92 >7DP!Y$i5 %pDAU24/$CY drl" 5`"Ġ!-9Rژ]ĔifAz P 'NF,try"G"™HOPB04DH K*d^R 0Ki22Si GeD=>9o)֡@)Jǁ!hGQjQ @:~ÒF1Pb *ԡف<$д&İ+ˠ _iiXq`G>k*0rӅ#`b2)@/Z*{ /(?| ߗDzU(Cz;ߎt!CH:b)̈́t{ Rd 9|A _/8]b G< -G~ЭD 6mD%\`!XGGъ]tpB^@4 c]: Q2_^Y!ҍbÙLA$>ku@-Ҏ~5)ArD9EHfas\)vAR\!,aڐ"ĨFEnA'<*MGĥPZs=1G]dA>dR g+G:zR`#dըf(y!4PNش {jƅ4x!Pŧ{!,z!~uRm ExB1p'D`/C&$!>pDp Hֱǡ` d FxA^p;$ D q{hVAPs,c9V#"Q \ 5MQZF/kI}@8 ,VƥG0mJG 7GL ;D ^ Jgu@ %/ ЄSWwuu(Jv%y$Aq @a7m D$wL\onB4Ł !q@g  (`/ [ v T{rG q pSRWXl AO a  G0 pekJU Lu7 tq 7Pа$WHP 搖 q IS(pgጄp쀂H A74Y B&u0%זaaIO FC  !7 3i|)w v ӓRb: `c_az(n&tr֖0 eM8t Q(u8ZJcYOR5}P (R\9uh HQ)h5ZUw p`yN7 XmJ q vJGbR ]SWY  )9`y14 7Y"2qzu ٥S y@REzJ$Y Pk3Oa ! {[ xY 6+DWәNO" P pXP&>nIW;jnQ`PԤSoD{4>TQH 11PvHաan!J`l7p(  vd!"`N @3bH@PPҀr}p=T[8` J"94> QH0% "P ;7Z7 #N0 s=@<y3~ghA78O6qiph [`ltx4 rhk wY%I7}N4 66 Ǡbf9O@Ђh \p`D p D3jh@>&7.*g\6I HIZu;aZ1WuF$  (5INk5 Fx0 e {gspȐ(- p .8鐑JHZ#zX@ hU*`@~S4 OІPM?xXi:o46# >į1 /|IJ%%bǐ0Qo2Xt ~Z:; f,قp /Rb.J 1~ gJ8p٣XMÐ$4pv hE7u}(~1Q7] fSK֠TV쩁ڱ 5l"D 1 A Pb f{8q(ˀR1~gK8WcJ)xּ5X 1 [gr0Lbr}FU a,ll΄{ H@ [ !93 (w{ Q@wSg  p K P9vuY82 L G4HEQyp ?UW>?$NІؙ pD^ /"$p9 AϹy-Su d B0X瓔 FW@3w9˺1 GRmp @R  qPЅdr7Q3] `Ԁ Ѱ@ ~̓?WHebQe =g<6Ę?v<AmJObAkUƶ5-F;ѱ- aJ{6Okż=T9}p"kŞϴ@ W F +I A/J8^] F ƢVo7Okd`4IagWg▉Y1P{ vD2Ons*1]Ju%idPHz^8sQ57Q2NQQ1rW+̏Ɔpt/#Nv4IȰ  y N > *ۅQN1bU'(C10"XkI0>׀Ph 4ktV\ F=pB\/O1& "F(*,.217os@r5! ,(_Hp*\ȰÇ#JHŋ3jȱǏ CIɇN\ɲ˗0cʜI͛Щϟ@ Jѣ# P@ FEJիXjj`OɵٳhӪ][+۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNsxoa V!JL|t[f(`jR7OAxF(Vhfv ($h(,0M4֨U+6<*w=)D0E&L63  \ь7`qI ~??01 ,:_=z7B:3%L„x1z;[+7G)úus= Ȃ ?{toi;?O@DQ,N> @0!sP /CO> [jP/HzP?w쑏x<*x. a:p?G>8̡w@ H"HLQ"&:PH*ZX̢.z` H2hLc6pH:|> I࢐L"FHpeԡ~.b<=JЂW% )X(ʑW&E•Di HST(QRҖ. (Ӡ/abMcʝƁPJT AR C ?^pPUOvժ6DVͪVƭz~YXGVfMCVȌ"(A`#+zr$z `KX,+bz'{5dRDh?eGGor hԲ ^zOabUj]-jgK#ͭnwk(fu3C\(c@! ,(_Hp`*\ȰÇ#JHŋ3jȱǏ CIɓ(M:Hɲ˗0cʜI͛8sx@ϕ; JѣH*]R (0UALjʵׯ`ÚT(=+۷pʝKdϺx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËO(C˯MlެϿ(h& 6F(Vhfv ($h(,⋚m4h8e۰@)du iH&L%cPF)TViXf\v@`y2bE7~d =tЊ.唺~T 5'~G6 %_2z )0GȠ7A F=.8p;2' ɄP\x$/ d6h 3C&$Ѐ E b`$@^(;=3}и$~pH:x̣> IB4F:D6|$'IJZ̤&7Nz (GIRL*WV򕰌,gIZ̥.w^ 0Ib_82f:Ќ4Ij̦6nrk IrL:vd)es8Ի>~'@ʥZ47xAmC& P"/hE͍zbHGJҒ(MJWҖ0LgJӚ8ͩNwӞ@ PJԢHMRԦ:P% TtAʗxp/XUɱ{fMZMBuF%׺xͫ׾_R$ u DcHl2ȂeOf7Y՘gC %rjU+պlgK%ͭnPFp+=rь( ! ,(_Hp*\ȰÇ#JHŋ3jȱǏ CIɑN\ɲ˗0cʜI͛Щϟ@ Jѣ> P@ FEJիXjݪ`OɵٳhӪ]+۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNس'T`zⴋkh󅇥C_q[5˟OϿ(h& 6F(Vh‡5v?f0@>? c,jM0U.#8(,iH&dY4.ґh37#\vyߋ^cdόepp睲1c@gjϟz pi$t͢nϥÏ Y?t*꩚ꪘ=H;ꬍӈʘ?~x믋5H={&#e#lޅ+v z+\k[ BιEOnk,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg5l׫v!ؑ ,Аt&u 6@M߇ASe 2i8[Wb>>^4ЧSٵ7 ͵G#93{H3Ѡ:ٔ 0q{èM:С%0La0VN)oK) 'N}t 5a?eQHv]s%prz?֘(T;P%V`ZъRPЂE#FBF4!BF5FXgpB( mW8amȢv>䡉A"Q+{8щLlQH*n"V`)h`$" aP j$nL#f1Ďṛ> IBL"F:򑐌$'II̫!&75(r (GIRL*WV򕰌,gIZ̥.w^ 0IbL2f:Ќ4IjZ̦6 ,)rŜ":I{2M'e%ЂT8!1z\`%ъZ(UQŒ H!(MҖ0=t8.uSأ@ PJԢ34[P:PTJժZXͪVբC] XBP Z)ε 倅'8 Ev 8W쨳>OK¶x̞@! B 0`h @葎s&I?QVMFֺ`ے=SH FW1zXqW#M+q8;P sK2ͮvzx0^5IN<׼ ! ,H*\ȰÇ#JHŋ3jȱǏ CIɓ\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3kެUϠCV AF^ͺװcׅ ۸:H9ߎ+8|`o8P$W09س~O~V0S _Hq&w%Tu F(!yMhV@@0@i!$hm]#zԢ0H؋2h#h!/n7ԄkP6~>~9Er s7]r3C j6EQ6B' WC_RKIEnv.: $"tmL-$HdžHq"}D6*F1\r(8O蹓t<V6Yv!YH4 @1C2B"8EP>(9d0J^AI/"HBD:E G`` qRKo$N+EQD0#{!ALTȰ x@:%}I7"2Gmp="CzrO tz4赕/(GR0CF#A ߑ|fa06 @j'71 JWkQyLF}.qJ{}~1{(!,0 {Jep[ ހǰ?pD `P }!Y<(ՀP P CYoetP ^0[ RP YX`Ym1ܰ{ JR٧y0oQX {P mH1|ȇ`鰃0ȇ֐910Xx1U P 䊭8X؋x_  h` t(8XHx(‚8xV蘎X1\5i  q1|a q x 䏁)0J^ ` / Odq wm;00ɐD&Y0p8H; ]P P KH@\\a/6bO8{ p pT/0$|Y#C!h06av H3P<V3TFh7pkY* /?6BYٚ9*Yt!8-VԛWr-9AfUsvi%' YL}a"e$zgQ9N. ,.   ;( s"  j &PT1a & ,Рj( "-:. ʢ1Zr qC0G;;kဣ6( pOsK*L pO`I(YHZ.[Zfz?h)5mс A๦1[ӎx5%{:mYp8`0*YFI*9}*Q 撉zEy}zQAlJYHVJbQ{lӪQ^J%F1jQ0`&*ȖdЬ/u# nʩfD0jj'P* 5c(r a a lypd*:گ&\;I5`";)`Byr`p Ѳ0E9+;K`7 *ٱu ZĆPXZq a 聴1Kq]!^B^ @+5H+0-mc+x+)xj𓍛(t<(pΆ'qN; r+p2!ۺ{65dK$JT`UK"`Ѯk'؛ 1aѽޫ \C Ιw3кM' *7,۫J+B aK8 z *D|!16YS!+`tӷ'e`<蠭p W|f[Ag{ d!(t֫Ŀű6CiEqyHp{ 9GZ,k M 6@S|$ $Vkw4< JFl6;p\&YB"`R]S 84<ꨢ C+C DD70-9GWgLq +0'q35O9;PX\KѠBT* 7@z7prMO׮E %MDRJ-]SL5męSN=} L lb:|)U@m$mm b(v\ERfB]PuśW^}ҡd'p?{(Y*6:U`9}4|i3WT!%4H[n޽}\xPmX1L*H!I9nPL+^UL01pmNa|ǟ_~^&r@rɺ^x-$%sXN!2B!|"ϱZ&cE_1FR|{)ÒѬRK%m 8mrE".Kƺ: ~V|ysF5dM7|qʾ0ѤX4cr( "ISAH4)NK/4SM7M zBnToTGXZe< AV7)&&,o B)thF!O96[mMCJN \PMrUp%PzRY)]j٪ KKhr5nfa Ja-vtzRQpdM!tv f#5g-!gZ!2KggZ2t\ a dH) eI|}H:@pF{'f|Y",ihQm:'<#zq"Uԩ^$MqC/ttPKL5ihhK9Y*jCRDfLb|:dK"tw3)2H,ƎC%3չNvȎ'J{ 7H;)H~Bn-9/M7Ca\g+!:ѿ(Q!D sh 0&M/aqE ȝE(G9b΅DŽ`f_IQը>I:j#N)ҎPAd:M#(9B^3gEkZu^$ &OUR_\5Grv6$C9rPհ!%w2}T,&lb <&dzbw*P!ёE:2>)$@bɁS!rHBW dxƒ/ K FF-K0C6׹LnIM yQ><b`.a<׼ucRDZL r*]#?;9&_Do(M`2oƐ(I S$,KKR r:\IۘX{*+=&⍇pA \n˄E]@]>k>x [xer,V$TRi7&V9@tEmm YlEm| Ij \]T2E **v->v MM}kg(u@ 谛gq4C2Mkh5e|yֵ"iFasyr je ,wv]&)z$ >,F1)@rK–H&\a5./!@( dG}ys>R+:D RHE? lV:C.(7lnRUNmTH\ԅCśh?}r tygV[  (jn pc=2sXҒễz f!xS  }"!A4At 1!0|XOh 2 j8Iӣ{A! * AA"f@)sk-C9L-O6A %CN!$:9̖;bS <|h%NJ] 8qVڒ{(C*k2 4ڠh ,Ћ8$E#'a.H.d 4@)EfNQ/C ҄EzV1Z{Bm IB2 @plL[*1ȑ'!Q$P e8^*0W ĄMJTD T,V4~UC*>4 KR$`(@eXEMߌt#;N;ԉA#Tyȁ ByR B6d8`{ `Yz(UpU8s -*/_ң \(9CPlah&c |QR27L1Sip0XwB)iq mR% Rh>ܔPQ|CM)DT3:0ƴF]LDm2u1isQ*!""0m05pTF TxF^_e _^kٗaEVc]d%֘HV#AcU֒xSVmܥH 4R"8} xܢٗ4h$bfՠ:>=-]%XWQ:DLHm>Ƀ|/-X}mrh4xqٮ[x0m4?I$) zYY]Yn V:x-R<>Qy Sabƙ1 \叻%[Zܸϖ(۴U۵e۶]ێp[%5 [[sDƸ[J8Sk @BoªE۷ڛ3? \j O*($p]k8) "@\=ܬ@ޝr \%&;\ݽ^5%_eRxzx(i$`E>cjiw ` Vaa&aa6fva (Jaq^@D(>p:2|8)*+,-."s(1^gcqxW0I{0-q3V1vC0mᆀIDF'QA<4cIvlЛH NmPV3"ePdVX.(ݠ[\]^_`a&b6cFdVeffvghijklVeQOd[,U6gpndngu؆)ҁpg|}~&h}g8~sЇV[PhqC0cd#(Yc@Pv xi6viFPigLd6 e8eaڃꈼ1xf jFꪞj꧶겖곮jjj{kv曹^kNkjfkfk6lVlVkvlf죶lnkajVjl֋n vjlB(Q! , H*\ȰÇ#JHŋ3jȱǏ CII\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺ8HWP7 Nȓ  ËO Ϋ_9=˟O#݃_߀(& [<(o-hU U 2E@#`,ӆx`h88@)DiH&L6PF)TViXf\v`)dihlp)ti.vy2Q4AWD3!zN4@č:47 mS aʌ@c\!RdAR뭦Q a`X9*.@zl6F+Vkf;\~hhA9낃:քKXv ''`J-LgDpBK t tpTD;F0 TCҹO;G!OF-[5,7O?Y- 'S+s1P G4G)3Aj4ձ e mj#m1rB53IWSهGk3-SAp 3Su#P(HtJ]E{6&/tF',Z_d@XճXp /|5G/hHEp܎Q+DEl'"uP= aR]v[+!S^j4*CK`/8y@1#8b ؔB L6- zfCB {<"D ##^(*=+(` RjцhḄm2ȭ!G1^']c%u(?V~bfH8xuh?q?Q @Dm;%lUQkQ'223j@ȉhFMGȏ": ;LGt=xflI5`h/ G=ˇ*3+C|<E MB4o J k\$4  y2HoQ$1%rŠ199l'N`Hdag`I:FP?3pp&ewh{E"'uF.&a ' p!Za2+G d 嵎|'6:y3*eC ŗfX/K[>&0LWIU̾fJzbIocSTm(2*U tL(~qLd 0idXQ&[y'84z+{`L23=P4"kAPx$<"`@?z!Xj Y#xߡ'moҘH3N{ӠGMRԨNWVհgMZָεw^MbNf;ЎMj[ζn{5F4%U?1sS~Ћ%M8'ڱd\UIdۑ XCr1zoJA.ѶLxUqm&B 5ػ y,-Ђp\"-L">t :L#Ǧ 09yJ  !5!j`iYB$Z{LPI}wBh@ 8Qp|Ml&eEI :. S?(l֕I9pp7C!yGc~3 F?-kz7 (Џ~e%-[Ͼ{OCiOٳJ&~?\O D F{ ?p vq '+` S@1 7 a 8q7Ʌ Q Q  aODQq X˗6~ A4(4 1P/Z( ZM R Q^؆1g]xn$Qw qiw&`n}8Xx͗kLj"q)z$8hStf'`D2Dy(XHY8N}@sO"nS xWZb9dkV Rrlprgcs9 *w|ٗ~9YyYYkyٙa91N QP  R1bj|XA w!C9VٛqAlhHD=P;+͹`"!s{Y10"$ЅODPQ{UyU7)+yYy)-Yii S㐠 l4!Kp7o1+` y71JO%1*jZd,6D >:/O`Q:EOq٤p5q/T,p wP\ DjJ0ae4gJ긦r%9Ѧx_~IEpoZI7z1 Ч h0Q ܘ^K s(|3@ *C:@3G8( 0"$2!CC$u@2:,A2DJ!h`FA=p &k}G0L{PQѯS+ X% @}> Pa/Q < Pkq11^ =j=1 K|2W@!ѕ1  'ۊ!!e Qk)E;SD U(L/t&!P2Q V#1&AF꠵ ̛tq{[ ;!"{&waє [M[k4+0ۿOǹh<@ff&ѽ L+{j2q1+H0Λq +©@ H,h8s?<zb`Y +H,M%E|a\A ) 30],Ń~`aqykd @G 027Wxǂ`! , xH*\ȰÇ#JHŋ3jȱǏ CI 8(J,St%̒8sɳϟ@ JQ(]ʴӧNOgDP@wAgNR m0Fvt6liݱIF5[m7Fh`AanVjXqոw'8FSC-݀=TRns#Ro[g騣VO6u]ŶǮ/o'7[Wogw/o觯?KTD(@ HL:'H Z̠7z A K؇@2J^IŲ$a@ƒS׏:pH<?" I^XЇTR1B⒊xHZ\B B !V###&ώ-1D:8~0Cs=od#Y".IN'GIRV@1Bance_A~9 Y/S(I̽4ԋ<^&3*wX"><@Q~BЌqK9,!`1"Hbъic8koi@6aA%I$q ]o WG9 tЁ6#yh.xSlTz@ndcm{aG" 3u8265ьZBh+13̍fgL8αw㯔c豐L"HN&;wπMBЈNF;ѐ'MJ[Ҙδ7N{ӠGMRԨNWVհgMZָεw^Mb8DJ$h|TV-i"evyNwv}=k{IHmtЙ=NOd\LJp+;ȩ4 qrX^ خ?#&ϹwRx"ސg8х~$ ,ӛN+g^Ջ{`NhO;Hp.xϻQqO 5/;$:B{?<{*z# @ÏQTMF ;t1J9Y^~!"V`S#$A~"{*@4? D }2G? -}$ ! ,  H*\ȰÇ#JHŋ3jȱǏ CIɓ\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧ;qJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻxj˷߿ LÈ+^̸ǐ#KLٽt1[̹ϠC7oNVylj^&M۸svgY7ok6ٸټˢ<`[W={Oӫ_d=cW j?tF#'ueS͂IDa6☃6刓݈8l Hh6hSN'f38rT& dΈMdJJ,=hH&LT]4k\A%qLj3Q5F\%:PuՔSDՈC;SN%!}͞S-ק5hCMp{6T˞{^NK3:1Jfڌ4*-ǜ7(S^EMrӪ5 h֊7 .}^o}V@n3J*롳u1,r{I"jS9Ha?'R *0#oӨ93?5vj̣R::&S c0*t?G>d\(s wq¥8*MS!ʍxS6:SOXN嘳jP.2k!%{Qʹ`b58ah{ 6bTS-S MڠLw06IxSO5:U98r 8;h8p>aKC+oʐY>1 sKC!54ia8:Z 18.1 p"x#A D %AD+r0㈗!NB40`E96r( G9Ѷ=RPI5шG0.Xlp5 upby5Q ja=( %L@&&ΌPB W8Yx5o?]xR <5\iX:ԱF A7cr+EX `HOgAmYآ G cP?e|!lS2fqYptx!2kGf6r]b1HA0tEYȌ(#ttQkE4T>b!|Z .>q0ͬf7Y`ۇ3!RD:? A~pt f B )%ck_pVzWpfO8OPIc`0%ajx X;ANcxC>fҁhZqD|F6Ge@2se,c pGń* !la FgARq5$ U8W:c8!b`jO0:ȔL1I6M`Wc .gkhD6X:xsQT 0pӰGD:hُBD6Ӄ:!BB^agKQcL fLQF0՗7Dd%S1a9sHQ:CS,OkEa7A iHnpb P"۾q4a >%+O( `;;lȴR2K1@bt?D[2'l^CG`|ī` 5#s4Ca(m)CG~JU WC5 h.BkE[2X#zB\ W7lYAh''Zs7G; ]$++*89=]4L+G)^-R+԰`u<~B~O^O,  1c>A2H棥oh?Ryc!ʱDT R8.$Kcx2+; 2J<7P] L$ N=ߜ PLt v;` Ր) Ʈ @ 6 8]Ӳpg˙ 0 l9LL1/05@QML4RS^`bk |ѳnmrHv}xzv|׀=p]؅ ؈מL @UB{] lP @ϱ, P P @+N`]b3 mĕ0;{[Wn} k8I8TYҵ`0 :R4 (~L   Ơ ƛ0 !y5P D )^hp \n0{:ם.)ؼM.fpAl`T|c-:J0웽 E78o Xt 0 M ʰ ڠ ٬ ɠ ˯ 0 %yS sUP\y(bB~G. PdNM@6 pM!/ 7/?B?D`!)R3'5m-'H&2x 3ʸ 5] ` 7ٮ C ʾ$Q3Qt3Pʜ4p ?M '"ŀp~t-~!:ǰ\- @& "r# ƶk i\ϱ L Py@]no̜ysFc]؏ip؉? `pV0p@=ޟ A-ߕҲ;aٿy٣QD\xF7rdHo#uFmܺJ6eʤIL2mҼ #YQӆ/jETi G"}Ap%IzĚUV]~VXe͞EVZmݾW.q΄wO^}mΝ;y K"SX俕-eYsq?kؿt7[Θ-jIRKݼu֍7NU6nyUzQӭSA$0+PG~AZ Wkm #>1DQf~1&EWd`FFs9H,ё{Oo1I%dI'2J)J+2K-K/3$ix'xG>ygy矇>zۙbgs~1"y̹Ovp?釢feiF?#1 7E}Ȼ@6Ё`%8A VЂ`5AvaE8BЄ'Da UBB8|6d ݃{G?~'@>{pA9c4O׹(t0ш^%.vы_c8F2ьgDcոF6эoc8G:юwcG>Q(A!0;&YM"ы;v@G9Is6 wҕe,e9KZҖe.uK^җf09LbӘ%:Ha+:f fܣ5x":ځ#,m ̝g<9llg>O~ӟh@E&+/It_1az",prpO<aWjc8IRԥ/}iJ1PԦ7iNuSS}a\6uJD>`q u9@ sE:mUP+PXm]k[V5u)z s=l`;Xְu] QNDG'=IPٰl:˗ef5g10A W؃Y\W͆ w,n#D@"@.q2UpqC# txC>58p>yD88A o#fr A B[GAˉFmnxe4{+B |Ё'ְ+<ơGg ./d'@u8ŘB4owvюK&ytE9e"xV a)3eʴfۇ`%.qb `(?F 6av 6H v$߸/18wWYwX4= ?G1` "{(W3dR9wv$ރ5\PRX)(Yk7Rn:zC (; 0> 7 < 1bLnp%ފ AQA[AwY<y~a'ϨjIi&= SV>jCO[Coн4@ Ѐp D ܁x4䂱n>O B2 IIDG1DLAJD[*BNb|`+,{%NtP(B#(08 O(;rqp@KA~÷ ;ps1K1Q\FnREx[ܼqEs0j Ss=t`GFܺ+.}7{1|FK.FGҕ[aHW>tʼnDWmrx048#ɑT4ɂ˴jh|ȜZÚzɌ$Kɟa$E%} xi$ JJJr8!ɚ¥ĕ,oD1,HΫȸtulJrIKSLILLDLSjpĶAnt̝D ɌHsLfH-x ӌ}YLMLMԄjm짛ܬyݤI)J2XtN sNvzNN $4DTt|tlP&t8EUeuuP ePá%QP=UrxaQ3QQ!%"5#E$U%e&u#=eV!+,-.R/Rb253ES-]5e65Q78ӶI98N=>?@Sj8A5CEDEbFuGHIJKLMNOPQ%UKj":ReVuWXTZ[\W^_`as"cEdUef]rhijg1mnVaoq%r5mj(-4xyW4 z|={HzWp"R@" _ȇy׆u؇]"؋،؍XEz|(9xq0(RK#(@Цٜٙٚٛu]RNٟڠڡ%ڢ5hy7 2v @x(@=6w0گ۰۱%۲ [,R" XYٸm-!^ {[|$KHZu?  "s]%Yԋ0IU]FmՅؕK}]PٕTh+T'$HwYi8][K'pE4QT&v'(^+,b¿ssXs(q2X04V5fc%$9Y:;㉈=v;btqͼv&(& @H?v~hfե&V@&| Q̭lU/䍂(H"8rh韞Ȩ!rpEP 8tfXl@:}90hlJYUF PЇkZR(s8[eȇth69O`OW(dx">\`7SXlP`Ap$w(y A"vҶ.fu͢tuFJ`shCtȬL2ߖnͥվq0'un&nvNhRS@[N|oghx|?lfp%{%VoW ~V^N8}Wo&qVpwp/g&wFZqm_c'RP, 7#?%gc4 {in9%B*&/s=v'`rt&.6oXw8XrFe@`^839r>xQ"vqsR GV%I'Uzahf=cXG:P( fCYuq$U\ 4@r+knsxxn6^k[m]\ЫyHo3hP=_`mr..H*in m[F'H~`9h"pְ!zȇK r?ǭvG\sHWWV9>ȁɍiꦨiz8du8/hkfOVIwzy{gxgs?M%M^HlSIzg{(^yi-\h6eցhsuVu7yGcd8Ww}H9bB_sX&7/h'Bfbm"b̷V6P'ʆR Ӱh|h$)v'Vۇ`ۦg*r? *(gZC_ujhX7|wJ$KzSF,b:ڥ#Ȑ"G,i$ʔ*Wl%̘2gҜ &Μ:wޤ'РB-j(ҤJ2m)ԨRRj{Z7ܿzKΝ9eНcryQ#Fhc\fb-l0Ċ3n'dZ'Sl2̚7s3ТG.m4ԪWo>;_>jcj%+cgK/_:Go^RDzoًs;Njl'׳o=g;ϔN"aS׌S)C.2ـJ52O*>G!ŷ!z{X%x")"*G-ؑIc? I'|*ˀs,M9݌9B΄TEQL>##a9&e睹&mCFO=rϋՏN9ɀ"ˡH9sFM> )=B<M>y*Li*:kL#!HTAJ_ɕ7UGi:LN5 hRI&Q>̞N69ڏ92g@ HH+ʫ*#[9//VxQnCEg)Uvt A<蔓 .r 8Ï*?49hՎF0S.%yrg0E}4I /d:4gҗ8\eH(4PHHcBа$Jݵ-ns򶷾H&Պ^s EJaOfqGN/X"dFo\N8t!!J1Uz;2c . KPK+n{C1[IN:ԣNW갾_Q`ݼYt 8@?!I>B4%d?P t 49<`MX>؂[<\ DDRܟ}=܄V!~YPDE?(Eh4B5\UC7 L`]>(H::hӚabHC:,@*@x$(.غA~q%F4^NˈL#6X؅> @7,4v?T0) E4 ]$$.8=@>s#  C?\fDZ5#fF~EY~D=?0: Ol?\$ù/|L;9 uW1,錌}J4@$F`l$X%j@F$NY%ZZ%[[%\RXA2>Mx'\}D́/QDA93:pE+Ydñ?(C5#9XК5ƥk&lƦl&meY&nn&oME_^;gq @UAi'W?B E PA.D3B\-@ppL&BdN)VRÕn)vo&GU4MA'[s~\r11<Ɂ]ʬԸ RT2 \H,X5HJY2C2B,^DA( y)*(*^τ)p2_拱| @ B‰|J )HC4C@P:Ą|4@ EB+ )C01+V`r0(@Uņ܄ MG*s*֫zEޫ+~EԂajN'1)xB.ބdi6,CqPJ~Y2/>8PC4(q.܂@QB$퉲rAN+9C 8+&-6E]>@.HN}'FeÔp.x1ښˀ5D:ܲ.) $C1H(02 ,Bl \L^ &fV)n~ZF5B Lԝ: hpC>@?Ɇ-J`??,Dў_%3,1*`($.M.9g5>xe+2,Ђ2 2% 4ZpBn;UC G8;Ưfίޯ] &+dp4y)|ۇ>H%܎"h8*k@4H(#`2B8K:ߺplx3),f.,ԣ0@e D/ؐ5yh3ЀH}nNa?)u( 1N%(4U't(2.\LGE?PCk W0;:|.֢?!AM]7#X=${nÔN/D` Y?qb?xwN,؄xB ҃%OVK/*lb;# ;Cx2h`|.?YxW!6A8ͬ>WȨWHJ4 puB&UqK̘%@Gd'$A)WڈC|ZtCAL^]v1B6a c5q_^[yr/7s7s?GiRWf4=-xh1Aܭ)J7>`$t5Iq4l*X. h&mʠ,p?3 _5$>:0'xB3!(4??h-Ђ.|&r{C78N 5NC[NMH1H'0#hv:K9?"8̂:D׽@yJC1(`ߴt,HC,HY=MC7h?8'hD8WD繟$ Y*Pa(d[C-H?D\;(HnB)@ dˉ>))C)ɐ"?'6C9 / o8au]#baS9CNd^Q(A'$9hQEWKSd?'Cd(s0 !؂8D/C5LB ^E!CԪx!9$J}B%K 6 w<3rԍ<ɗ,;I؃? i`ձK?8},n-z%U-+B$@sض,Êق.LCdȄ,CMR?yoU_?g0n"I8C?{YA?zۡWԽb.78pƴ  P3 , l!P ) 1P 9C jv!vc|9 yĒV,hl]5@)t$H/n%1ɶDcF‡=h& zc(E4!@$800!\8C5@B3hdcM 3MAER|[0q49ѹ)Z( 's Hct 8bqcE5̡$Q瘇;|G?/@l8PX &=vy vHKaSnLi U=O45vS;я*.D@:v KȚ:,p#zO20(G* @C`r4ǵz@B |c@6O‰S.el`4;Qh /ч]trG>Q.G@FDkȒlȇ=1 lD4,-Tv#Yɾ2%$Uusku<'0I%6w۫uL`ƪԁ/\K0,djE$*ae.5R2?Z A j.oAhjQ;#]e \$$ =hM^5{i]wJ_qc#Jfe%(1uC'"GxPԁ@9Q1zE?U!OApB s }@l FHpp"3 kEE+v!iIOҕ !L.J ]"uB3 'hQ _x)U12*) G+&Vc4V ҄ENt NN!F)+5F%39#U?qͭoy)e%4Xz,K!"piz2i}P At<09OTb;\J6-xqA0gvF"qՓ` 8K$==Vt@"=2o]:]RՈ (+\ "ܑO[I.P>.PF΀e>jBa^DA|CaHPv`x`Ѐ:"eЁUNJ\a.A!cڂpbȌ pCtAZX+aAeRAX|jB#a 4'&AV d_΀ L/)!zx+nt=ahklvaHf!RZ;~g"  A`f/~=aAle40h<@!!qB^!Jo$aAA@GQ͔B* h  ҁ@a0qDlA,С¤pLƒ2*r l C'Ae:Aa`raI6'%j01B@,z`~#A$ )d*/Be%!kZD*%s2氞2b/35N  ta@qdqj!!F$)#)3ܲB]21Ibah !I%]^!CjAq0Ѩf#r3ɳ<ͳTj,R23*y h@a52AA8zFc#+CR7VJޏaC<eD`}JRE2.sFini=ktG{:*Blh zA& V:l !΀IHs,jd4x!6.A$ 1$aBh^HaJkp!\ز8eNaxx# oA. uYnn0؄|TH %0 b~k0vQo6ywyyn͂"lבAL.)9a |I42xcB]"A EFWu v v2A!Gfk%*JNV@!2ҷz/y=A/S,#GcQ8I~iA!F"1wU f d$afxtl4"AEeA:a@A!A:@AsQk^>aX6r^UA68lcXG98{Aq'd^2-C3҈<0lY gNt5)!?Ga>a6WAT9j>DcUr$(٘GXbpTnRBiP7Ȱ>ꔤ$j !h9RU>e!q0 r Papʡ!yԡg,*{./a*+!51:v:Q8EzT)'˼D0X- +(Q)eM Pҩ8,N部ĦR!f6p>RcG hLy//yج=,cyZ,-׆ EHVf+L1uUaȊa1`2j֫䇫 uj!^W0 Ѯy-x<صƄA:q;!%ؤe%NVeGXG#PK2H:T2vq" !c^ "A|ۉ hK>mfۙcmz?5$LHH5Laq5zbV :<%s0jT E_3e|+D>n=(Ár 4&(קƚ4ON.!bɞkBHF Ab$T>vܹÇ_v;.:3ղ~ˇПȑ$K<2ʕ,[| 3̗jڼ3M&u 'СAg$JTMD9} 5ԩTZ5֭\z 6ر`w-P _:ې]jܵ7/;.$=7$j ?@ +rR /rrҐ1B<@=@e=@ 9hS?LB 5lGc6ވ#wގ91#N=y?>G=J.dN> eRNIeV^eZne^~SJ:㎒iH 1M>C9XK?h< mmZBDI|);O:89},YgHS?霅O>2:eX ջRE\DA'Sϻ <Ԑ.mO ְ8AeUsLgNu<*r.ՉC_Dа:N:gf)#sX6go:+Չ0[I)/F0M#ׄ1yid$qmhzw~ xNxx/x?G[ n0>"-Gi H:Hnϒ:?ѓN> Qh ~OAC.t|/?x<+D"8l~Ke%FމXu9Zm#1הT;?8qbv;NrJp/#%g<桇$焐Ay؁&P;Ot=ޕB<s+:jld1# I@(JqT3-w TY=Cd4qQ }$"Vq4֓ k&ݰp<JOT-%1'H9@ҡDx<ܫG m1$+R[TP)b'2",ky &S!syd.sZn5t*fZwصr D+8 @ H*Q8q9ZҜt ΟxӤ.uE'!8?EzִN쨯!Ûtd$A}ٲ#gixT/TQGJejgikʦ)ܐp*p ` Y@ڠ w.aOzE  0 vXdB7})Jjʪꪯnj ` s 0  p Ы~Hu cP Р0P p t `q jR pt .cʯ +K[֐PpP |  oPp 0 . PP`tPP P@P@| op o Lppiw?Wv`WY[˵]_ a+cKekgik˶mo q+sKukwx;E o೻pp Ԡp `c | @0 ` 0PJt03Pq7P P mɫ˼e @ǐ k@ |p |p`Iڧ-t`0Pp `P`@ e0 DuPB{{MRP,Ll,P tpu 0{ppк뱗@ " B`ppP A P |0 P Ѱ @CaBpNaϫkmo p  ̀P <0 uė{zw5 j:t8Jq,ʣLʥlʧܡZvJǀ0櫬p n #RzO/ڥ8iih>@>X ,Ll͹iِ牚YZ*;Q9 Aμ 1;l< :KCMm4  -;ʰ = ! #-%ѻ)+-/ 1-3M5m79;=? A-CMEmGIK}ԣϿZSMUmWY[]_ a-cMemgikmo q-sMumwd9h} ؃M؅m؇ȩX52[!@%S*#w{nM4Q-}p [ՆfP% ,G]nӘk Q u,peiJ}uY "Vٗ=U}ngYe%֝T{&ndEa]@1X}Mkmޤ"Z(,߽k +=]=k-ݓGvE31E.ionG;f]})׋,ؗ6/N5n3|'njX1Np㤆A!)`Aiq Fh3%UJ.Rf1f&ڊ}XhR^Jo1$c%[iaUut6]VmNf#ސro午]SgKv܁i QNٛWenexefE&% HHdtN~gGkd٢eng}~.~d =ecp>~a{\`c O%.<5w-//+.*5OR>56?:oS^ hK8Ş7 h=Kû,DQqF)<"CF{di; ۱0 + R"%cG&{ O%=zI*LHr;!KҾ4IӔF՜iL:q2?N>/O 4BPDʨt=ijtG+M/ >OrӉRRѻ=2!,u@4SWtuV9U\;5(s-KソJ՞u1Uf W㊕Sjߜ3Tiumq [rMEUsmq8˕4p1v^|}j]eZW7_ڃ ga v`xb%-8b7n#C~ɇdK>[aʸ.V٘s^ܐzh,Ogr:hv:}eWB6ˣ_Q}zkW!g|V lNRl mQFT;aV\K'|gaqM7S5/2mrE%oxCo8ƚ[tؽ6tpط.tPB wxnɇAm^N^e@{{{ ^|~ w}w|_xqm6miz\d(a%AƀT jO ;-O;&uz ?cVx0I7JV˜ԕ YOG08J'51 D*B =A!`GT(UN+2BʘPemj~<9 tT@ІFTu(8 oSZ^4Z)t," iIMZR4 iJOғԥ*iAHҘUHGRC%jQ:s F5jAZvLU*Ԡʞ*Zjթt:%kIj֤ GMR ֫VuQ(Ӈw[9WV~`q$VQlbXȎmo~cIY@f$ٝȞGW/nܠ-mOR[n6,I7xˬl$7Qr܎@ unw{BM/v$C mkjdW 5[i'.Ȅ`o$p&W |`r1GykNsB:χ gmxG}|C!֍nsb!m7! , oH*\ȰÄ=Hŋ3jȱǏ CIɓ(S\2%0cʜI͛8sɳOJѣH*]ʔd'իXjʵׯ`ÊKٳhӪ]˶۷pʝKݻxv떷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOi.ӫb˟ϵ Ͽ(h& 6F(Vhfv ($h(,0(4h#KK7:HDiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄jz 袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸+l k&6F+Vkfml+k覫.Y߻] ^#5e:l' 7GLo?WlgwY,$l;,ˎv 4k8<쳔pO?H[4AL;-5>&47\u-_شM=dW[͐Z}t@Rʶ="m-80q߄n8^?,SJ,ZwOݗ/Eqx0y.:B+Cxs( _ʴu3!1:."3{<̮|\SmTL-$4\J?< :^?=Ȍt HL`@O \)4 Z̠7z GH(L W0 gH8̡w@ H"HL&:PH*ZX̢Ə.z` H2hL6pH:x̣> (BL"F:򑐌$'IJZ̤&7Nz (GIRL*WV򕰌,gIZ2h˥.w^ 0IbL2f:Ќ4IjZ̦6ynz 8IrL:vȁ!TςMB*rsgC&Fԡ @юz HGJҒ(MJWҖ0LgJӚ8ͩNwӎ?uiPӃt LRԦ:PTJժZɄxUz` XJֲhujWu)p\J׺xͫ^׾ `KMb:]d'KZO! z hGKҚMjW Y̺l];Fmg-n'Z[Zt?WCE+Ё5ЍtKZUf7ߥfpKMz|KߣC̮~0{8N;'L [ΰ7{ ](NW0gL8αw@ c!SfhG=&;PL*[Xβ.{`L2hN6pA:xγ>πMBЈNF;ѐ'MJ[ҘδN{ӠGMRԨNWVհgMZָεw^׹2qaF]d;Ŏ mb?Cζn{MrNvMzηq{ư b/1Np' x|2qg GN(OW0gN8Ϲw@ЇsmG>Lo:[=N?&oOgrӳ፲hOpNxϻO<71 pi@\ˍ` avTwXOWֻgO~ڰ6r7>GK3zD1O}ϼ1z+H>f{O61nhFso ٰ9 @ [gLdǀ ͠ d2u |WH[gc}GCt(*,؂.0284X< ~P倃:`t 0:p ok d p0 N `t p@0 ـ ޠeP c=a8Xxr` pޣ    0 kP xP o @t |pt 0 o o `f8 t`|0 WPk LE' LePPA8Xx蘎r P0 e@ {P |@ 堊@ tRh`;k u PP oP9 A Ր~6y8:<ٓ>Iw!G pH|Cp| `xeP P e ` {0 M to|x0P@o yە ?peG󓊹٘h uPue  t`аvPp  {@` tp@ `up  Џy@%|8ڹٝɝ ` `pP@ @p @ 7  N&|dd$uR;Nx#{:Zzڡ ":$Z&z(*,ڢ.02:*> ѓ P { GЀPTRjb/OUZW`JY:Y cjlڦnprs w{w q:ZJxrFw X`vNO77Jd:Zz" p ʪʰ 檰mZ*mJꪹ p:Z8 0>0 հڬZ @ Zzm؆J v蚮꺮ڮ:Zzگ;[{ @o ~ ˰۰Kkfda ";$[&;5ÒK,*EV/۲2K!Jd988:<۳>@7B;.}ZJL۴NPK80T[nf! , xH*\ȰC=Hŋ3jȱǏ CIɓ(S\p{,/#8m1sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊK٪޼]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ^o˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PV@(3Eh Omiff@R8cA> ?0ie%0BsP5@w?? !!Fz@I@BAvX:p cP4y*b̑?jk`3 uOӎ@NA]*kN;3P;p?DF+.`@B.[L 4S%:ttbδ5*֨X]Rӥ?j]9ݎ:%<1YHJ WGK0H$,:0@hh 1]=j5d-ADN>$TG5,K'!@ VmvR*1"P$M?}L&- TS:n'S?".yUGeޙwT6{.zR2h0 #,UK4m@CFUk1阌Q:NeFB $@=Ck= +:Ao?у@.DAD!/$tA} A'_0%( DSG;?C2 Ah@g) #xA5Uz^Pidi2v<@K )|(o tA_L#]rbغzp  J ^"ryAя< n|<3Ya)$z S`X Y>HlӚV:LUhA|&e!Mxq9.Jԥm 8" r q!*=@޴ etMel>E sx h(T . N ԑ49Ays(D*B 4:@B`A j $1(v*(@2ukrB ؆9qLˁ!{(U yz$0 MB 򑍥>-q}jhԁD w H@B-99< l`'&Jnد[RP CuEtLIuSA S’$A $`A bXڔRFmٓ0֊~=c#H `h*@$ g+D|_:,2A^aE bsg8C,ў.- ԔOԂQv]2ֈ++,!\dŘFfڎ.8ffaWpDA1B.lhJpu6)_,46 > IKXj.fhQ|PU*>ѱt@FG2JB:$D}b{lҶH&AvB낧D 485^:A+J|BѯhV@HN;,ac_Ę8I\d*2R_['@B,zcYg|YNA{@cR`壸ROnq? e= [\`RP CP jpkpFW oPgY/W$n7s"Q@|#Pd* *6g“+~bzJ.cT9@ uf rrj EAz3"hE3PN.P%/*EDԐB@p`{#7J$*WMP b}`-G%B*gy27(RhR `oO&Sl/޶ 6VR Pvj*P6[jc d0yN"pa@W! /`L Jq,*K>v(S'9t +z2h"EĒ : VѠ0 1/Fkۂŕ%hYw-@Qa-y)5&2?`H CSnVIrZb1401OTCYcL3q,tDD@@`%,Bh O ' 0+x =F6H(&v@pk o ы/?1 Q952g@lb2@K@DQC^gF@@[`zItI20erAHUh)!^t} * )l LWP 4@Oo@02n%g/͂7} 4P>h rs1)0CgD~Fv?#(+4ZER +0J ' #Ȳ.. AW,YcieY  4X6`s/

@+gx%ǰ3<`T{5Q0|jIq%GX,CĪ 1}pa }^bdq 7 Kt4uF,$)Od-*/%WR GDbbIC5| @ h 40}P%Ym GU'g5t%*R0 hHtr0! eYCr a/Ph+npf#@`Wz^@@ ƞ:5a*K; 0-^jVH k i}! JC  aPh!gx3 +葮q P[Vi³%Sb쐶4rINS nSP ]b  +k'sKHb ^͐e yPk@鰮C \C ; A iB ^$@508P/ DU; 0 Eu,7 p0d \e) )z<F-!R7$sU$FʀW KP,O c)U) kFV2ҳz P IJ Dq&W\jZ9! 0, \]r CrN 5:~CDzכpK>]ǀQd[,0^wܗ&q%uI+"Y; I ;(v$ Nłx.,r`-l36*_PbpG Q IȞ1`3 q,^ C `Bu2'y 7 OPv T*-q_`D FÒy F q FY v[/ON> HA / 8rѳ)_ E%4YYC@zOp P `c@T yrY2&ux^]UM]|f :wF3iU\.;w/.#7/Ky.}TPEETRM>UTU^ŚUV-Jֱ 0 7k]W;uC*,Tڋ}7g]+gеׯE;/þyDAM\][lڵmƝ[qgݼr8,Λ7s&L3w5R.Gފ>Mayl@>@bn0@$qYWb\fAf'"!pviXh@@=Ǘ] 2\hSԥ| y5~. o@zV[o5W]w50%l $*,5Biǜ1Y)1`9dFb!!| GSNq7 PͧtJ^&`FKz"]+Q:fp]ɦc!~3LGW+^Kғ|rЇvgf!.xN=$Ih':j0UvjcaNrGbԑ'F@c,yoJ,1efF mqCH#NA@OY1 u,X:*toJG3B &$c*UJV iS A PyϘ4U"@  CƬA-α{?NX'a eYA%xt̸?>b@ZNvӝW>NA!a{LU8cidH-0K9 /!]d/l@9G.@NQz%J0siLe:ӨҰ5Y%H(TPcI 8>@c>QҮR^,C*@L?A@_D*7aԮwk^ʊФhs1*|@VmnUd(R!KS>-(Gxac0JĪF'@L\:ę@{\"q\ HPh(~[׾d<9U }~;8j t&{=8%)&59` {bL9Aԍ,S9/8+&K<QhF>QXf_c% G,ړcvEVЩPq'2t̍.Ƃ@W i"KǪx9fzX$K'?AdfP9pp4;YboDAŘ2э+2U>Qď2pQ fT)QJ,P7;+> 1!Րa;ҡ03l9A9F6PE)J_b#|ǐA m,6`q|xb CRAs #],ܨȕ~}ş`;Ёcۋ@#u G3 N9({sh1۶ihk__(|z ``xqt<0 k +f8uÆНЅ #J!Q$Ŭ`ziĨW|pywytӈqј K,*gƧhp{sgLq] rs.|BCE5 H颁Ȉ0hȁ\ȃ ?Ѕy@(:Gm!:R9u0 ӘHآ9\Dkt8?ɘ$#jā(gtph 7qXl9xx |~ x 1 ʯd|@Jk ;0DƄzT8= f4$> >N ~0ȔDŽ̈8R 袍XXxP$|~8>Xx3c) *H$ 0Grsh9$NUA {N1K%C[8Ё5"X%iRY*@zT cx8  L#Ps<{f8k( o؃Bf"#$8ڈ>&s(_kK9܈S{VFdM{>ѝae(cZ$@Ќ젙u +Q$fy;9XrmJ-0xI$ i oɯ䚯 HsJ)y8.@s@ thЌ*x< &S"^Hӥr,wȇ#_tOAETjRhwvXsx qRU`XCQ`0&nj`{$3ǔ䉠h lm<+D K]n5sEtUuevuwxyz{|}~؀؁%؂5؃E؄U؅e؆u؇؈X-0i،X)rؐUoEe@FAUك*"Yt@0Yz/d?٤נMpS8zGqUګN NiPگ}ד>8ҫZE[zU,M۷5:nۺVcs bAY[ tPm/R 3RUJ*@Cx7l (qEݘ\4, ~@`х]M<֊.@F`{"߅'#Kt%Hx$ԠiVx|jGRPuthp4 X` Y 9 (d1Ӣ}BPF3ɋ`A X}+Be  {2z7\ 6ӑe}[=(Z LC=ԫEGj Fbc PIdM)tl *ӌe 2-Ssxx*ψV3c:x}Ϋ>ƫ|XC d:DvdҔAGdU*ClK1ڎ Rn%3TVUfVvWXYZ[\]^_`a&b6cFdVeffvghijklmnopq&r6sFtVufvvwxyz{|}~&6FVfv臆舖芶YCVfv闆阖陦隶&6FVfv꧆ꨖꩦꪶ&.AVfv뷆븖빦뺶&6FVfl6džȖɦʶ&6FVfv׆ؖ٦ڶ&6FVnƈސ,l~.6&6F&mPjNiҰpB6GWgwp pkn'76 <|vq> !!#G$W%o w'()f+,-./0^e<13G4W5g6w789:;<=>?@A'B7CGDWt<'FwGH GIKMNOPQ'R7SGTObKmlHJwlZ[\E^_`a'b7cGdWE_fwghijklmnopq'r7sGtWugvwwwln؆z߆njm}hW'7GWgw'ߟ?yOeK[ןuXs'7GWgw÷qnh[]v:^{0ߛ&mBviχv9sn,HP„ 2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*)ZeBkކeKg@tnٓϠtk_A ڴ)Rh%VkԶr+ذbǒ-k,ڴjײm-ܸrҭk.޼z;iOVXa 'ƫfrYn\Q{2-Ӧz V:|QcSzK-ܺw7VV83o9ҧSn:ڷs;Ǔ/o<[5Zry4oM8Lc7[b8ud#9M:3 ;?ǔQ!x'u<3?ڠ?LO;1S3PV=V9`y$I*$M:$QJ9%UZy%Yj%]z%a9&eyP'Ds 'BZ+̴r0vjS /o4c.Ռ3N5`ؒ!RFBxr.4f4z#3` O#Q0`rɿW 6F#|L'_şauS=u9衋y6n:r$3Ѵ >;~;;; ?<<+<;!(!F<"%2N|";qx'!j|,H4 \q \0dib P6/.jZ>1,!F>2%3N~2,)SV2-s^2-j!Rd6s\5y0+ c8ܡ5Q~=1WtR>1`ጁV~4#-ISҖ43MsӞ4C-QԦ>5SUեƆ7LJYs3TmlC(qQ †|.Oale`!>SN1ml;(txʶÝmnw[&wl}nDv7{mvM|~ w=n+ /8rp|{oq_;ukPP'~ʴP|'fqnl>@! ,wH KȰÇ 'nċ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիAyʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+I⑴УK)-سkνËO|ӫo~wOrX'}=C&F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf%Y CdfA_tO3;eY)s\2irv $!͘@L@8OJ4YhA=DPO;zVjcP?q꫑-/04B.H$AJ{Î?&;;p ?,P{砣~1[P: ;#9ؖ =ϝ&4kR Co\cF3P;  h 60^dS w"[D$n2YD(S04++<<"Bp A5\L_E=+O9,@4@|-)X}'@ LK=]٠4@p%r-SӉ@}N:H,܉BM8@D3I 8W #H@s,^ !z$7L \H9bO[90+kHf` LVÃ8HrV @\Eu 5A*w=@<K>9Vw\:$F41/VB " ܗa;Ӕ h 5ҹ A0q@C 561uR_j@N!$,p'h'%$2]HK SSJ 5 H=UlT4B)Ǚ!A +pC=d#$vI{ ,E b.PȐej),M! 0~*It\^MڑNDx#@S,hE4~A*`@ Q"u YIS"@FtKn#hlj *i O E?JoxxL#Aj* d"U!Kr* N$bJd* 2@=e)pq 9C |i7:܁(s0\?<C Ptz9/x86M?nxYPG{i8Aھ0 ̵pSW"eIΐE측@I20j/!2 m0$7P eHz/X{y@Y_ha T0}8Lb$ _|)Є@\ ,BYqR p1f]?!\14Xz̃@F5Wb E5qX# YH5Bҏc bHp r#>\CHጻr9"(D! Bvs9f?K@4h< !*v_|i&}hcώɐG`quZtY0-j ; B 0"lxF+R=@D򐵶 9A2{!iLJ 6]?$\r* "QpzW"7 i\H(|

!fFȡēT.n.J,ȡ8c(,$AWN7x)VH- 0#2ʡHdzC1aAl\5Gr1 aȄbTjL$9 SV97Lma[X\dנ Ƌ8;$Hd{lMʶto>)R$$!( 6 A46:aMڢ b}BB&Laې-l. /NHTL"r<hh PȍoV!&>AF7e`;x.k-Ȕ QoA4)zZUEd% ^ J! Ys%PNA  XrBD,-AA^"_`K',ufi6ea6 R-ERfCuvii$}A9A&'yiei$8j]gBNOZ"8 ?c$ƆCaZcj=([%5RAa\#fƨviӢ6Zio/tBOX|Jn8wu?1`a 2,V7쁨aR|"⡃XwLe AKEikzW-&LZs9L鞎=STɱ B5 3VJ1<:BUf2,AJQU®i)8)R fXAHd4ܱayF"U#OG1LOc[hmZs%]bVvjfADWLQra~VHu>#!.1IVx1)Q~8.eR-1aM\wA3Wfxc',"FaxXU &`:nG4oYn_5Xu&*( qS0.~Fl*{a_9B.`+K)LE@6PAii{2AXT5g#s>#$Aa!٤#x) `S;<D)" &ҁdAH=| h橮'${y:3^j.-7x$3$J&b5U' iVUJ"pXizD41f( rEr5)eiGroZ"#ÓڦA&&ZQ Z2$aVAe|3!SwCreJA䚡YR ^ѡdƄ0#L1J*JUw.C}951 "xZ`z0fjbM`iFObvV6F N @9z Ed&6x|jh @4%eL,&s(Lc hfad}!$A\!&,gc9{Tbe*aɿJϿ~!7A%Oa HcR`| lՁU=v$QZ A) }\ M;) .EΝ\Ұ9hf> | 'j"r`:R؏APRbWA@A |77bWhUZ X_`p ΠI0j࢜h.//zߤ`$WT|B@UN@, qZؖ'a>~ H(a@ ْV_dSʚ^`TF.8 znj}g )@ @C]a@` 6!kO~) ܻ3ƍ }'tAA>!n| ,ڈST@h΁'-`  l… :|1yΑsD< 3P2̡K?.,[)zg/ÄJ?t(|ׯ'qgυ-bũOF5bzlsoMI<Nj|b!iqv<-[uPhQ'M4Y)3L`l4z>:լ[~ ;l"Gݼs𤮞=.tر̒4~ɒJ6l@%;[>u(?s{?'y1J[H_ ^D ZY O= 5|(wH#eT;`k\AP؃= ?)WS?>@9C5DBI'`R &h&dfr ?tㅢJjjls/'o/qJT ;zRs):5H57<8 ('F"-H,bLwx3nꮋB C =p9*nB]pb-= @/A;bRL>YYnvEF#+N6UE3Ď?dO5sk=S 2D3;э@ WF` 8Tq?p GEy 4o ְB#^)o:$s(lb&T"K2h&m2'(>yONy:W {%Ɂ@-pB)Q*/q<ru #P4Khr> N톻ApS:Ēg?)TP%Ԝ(/r4GUƸ[HD"J[8W:ܱŌjt] nik N*Ɠz$ 4bcC{,9 ` z<ɖ4`# UuBH{!*-]mG9}A=eulA2t W%c"1GTZш=4@[֥(C?X d1Wfƚ*0Gd1:~)9j0 ]U3YPnV0\Hn]+Aj-Jɺ'we@mOdBo{+(* Pd! |$W9RKr(sc@$l!C,!8F'{fX+`;衜dpLT-)G B ~OCw*D.nW ^z%5{G+N #P%bcC`/B'#3Fq*c 8aRzyrn q>|&}< 1[.h닎w̗i2pts,jw#^2'R z+aVC,H#z֒{ˌaN4pHx V<@}0+=xc3Qdz,7G|6Y:oz2'q@8;^A )6ͅ$ Ͷ:i|C["['K7%0Wa.CوRsLE)ر%ZhTʹD)@)JA ehBw;nvDٱ=rĚ֔҇9T sȃЀ7| =V@40>hhr|.tvmyDϫ J0%j gH6( \@B 1z$HfFHCicKsZiP| k3ݠ{ F&*]' r1S (p P0!tPPu)7U|Vo=@aIAv(w)ų)k,vQP Ő  T$5s@#TiKr D9eX 0  voPUYADogc76l:b2dbPp ·d ʠ3yS=7v%61@{vCGhʡ u !Vb#@gt pFU` 6f*T$&6sPdp [0pt,a[!a `bVnk!>b`mAt"+w 22FB@%ZBxF |vY 85 q e!x99 ާHR!s o .Ջ64/דuנFRq9򂾧 C [ qK1%C=t ̰eph\rqpe'8@!1;oQ] lgC>` [z$Gp A?̵5h^H9Ƞp8PL3 pU5ϸo Hѵ/_1Ka3`p~kIP+h*$=Wp Х[ ѡC[ M|fq,0 B oP+ck@Qg27ioT=еpLXF+~bs1qB @-Bۆ@ 9@=υ==-H{~p >t\$>skS8V90?-a\! p$EۦOԕ p>!t VRPJ}!BVoh{pԳ~oU tǿrhc ɀ :& gake: p `8#R9p $}ƍU=9d`#͏-F-'Ҧ1c@<àk|A+ 5l;wAxK].Bmshs /1@$0oJ5@L=p[CR]5c `ڦ25鐍 7 y Z3p@ tPOIO|]/X=%$s+E\ٙ~#JdP INte ; @ p,`_Ev ̭{ H"c|H };*X! ,b8'+|-8" )>p?(z?/yy8P b~֡ yx P pԄ.idt0  @P⠧Sra@Qt\Ο g$`0h"CG.0ږ( 5E=^uy 0 Ӱh9H8{4PgRRQ׽BPZp BL=>50@k4p !!!7/Nqg>e m(hJS@z8S0Ԩ59>^Fp ; q@FU;Pא9|),WOI=A=)'0dTI™,Q ְ˂kOŰ0 }+Js2?*'7a UP&$ gd )ٮXmUE#qU@ ?v&4pC067Up 2l  =z .dؐat4hAS% .<Ƀ.9jW]r?d^Y5HadN.uHӂZ=*}zO>{4꭭GZh4@;{/>(W #@yW_LHBMnnWO4IWs3$˃ e.,@٥S_?syΥ J#FO# wŏ'_yկGO:]N=B H֛GZ1ǻ:Go0z)ȁe. b .8埤HkG<K|=ڙgrGAFD#4h 'K~!슁ˡ_'MJuNh!(*.S '3<DQQqIg,\0d砧˧$R:xx*bͮ'e #M@P ~@Qg*kpRwju)Qzi$@"% . !tAr5\te4]/ITgseгM{MY$~@l^Vsmb%xk06Y! E/D[ бuI,1ⅺ,h nr'PAe̪:Vr=Xeǟ\@r몃9z*ΒvzDyWwR | eƑ|`<@q~DJ7BK(rz5@ "tHp>7zp:F|s}w{t  A'q41Z`UyDD< }X~, HX <hOsc G,bU gAAS+D3&QB"@c2M= lX S kL2X#7N(!Q#rDjGt%PbKDXKZd Dz6s* x?ZNF/Ha RTQH  [bAPjd=yF?⁎p =r"Hx´r"\/`MzRwG1A(0;3.]O}#2+{x7MS )]\V,bS.0T<:M1DAG}Xqc 4aI@o^bC>E})MK?6?ŦJt#φ93ĦVe-yZfN|ʾE3E B+2GmяG>qlAT?1<0uPz\G$[sp*h+ODP1c@m2GI+hq H@\c:#Oφt(:F {<)X'"# Ab@aIm\^x#g,VURn'mr6V;7g~b\Ac EL@qlukFswaS+\JL\x_aG?1J,^+eċnd "Q< @Р24!l4% LmµP6W04` PѸ̢KZ0EZ\؆7y:rAz{)P(u=ApUFG1Dy采ʝPQsտ wE91 N#.owiGF_)wYG_Pka=<95oӝ gBD&: A`SG5^{(h]4Z9 Q`꩘ مLC9H3∍:p ^ _xXq> ~(҅:Gsȭ6tpa.ᥠ7kB'ЅFXXt3#P]ZДi5s 71|ЇA`MxC8|CLpE}pz_3Ao{/{TkJk "Hl$'xHj9r/0)X~3_ ! i <($߸1 6͈ivH+W1;y+NCK@!"H,(yBkFbtV(kS 2GF"A`[?yL8NY=v!p,fb<ȇr@-ٖ! 4xG*~@(:0+t2>u~ _ؠl hbܝd, Ȇ;>@ChtDP~(ᒺ|BlJ#Aj O;'0q{{X 4)Lt`X7yKME ;vi( y"$~zα%7p{ ^0ҤD-%5y3'{("_xŮcvXMl'鍵 JY<,F(2+(zHKXZ@aEbNܝ؃2fti(ZNԺ-sH`LCO:sxl7qabD$Й2C2L;"@ /JP̀i(*˗xi:V ޫG؃7?p8>hN!rV:yI(Ќ+G)W1 0vPCJx?kC8N;L;C!(K0QC4(A'P/"i$pIa:1prqP\^ <&#zvRV1Qb(1)1u͸Qxy$#RdM֨Z^Eq(+P  u4lЃNHSLL`3WJGvE;= }ݫ- Q(9 ʪ3@P|A9.@9PO|}K9>x!ȁ" H:OJͰ!Ī=OX:P$]\FgVtɡ݋0eMZ808Vs:DQ3T+%{dGYMO-+۴J`wt!':Hi3P R81J#Hď<0/@ ">OOc_8_0,4H.Ҹg:/-} vn8 MFU]5),5(> GR$)b58őv[FllWdpccc0PH6AHL Qҍۗ|jR K:HXNkE!)U3;IDp`JG\T n#RDd#"8EDYN>((z`9,DfVgp5e*Z9K{mb"VP!EK>_Uݒ;IUPdPA[b,dPP[ܳؓYQ$y[i͔*} E4Q M-ІC-@;#mư"~4ۂfx:h^#CN8Clx"NeU.;䭺%2m:7h0Ipsz|Css݄J`1}W0SY43,4N E@匌 3s@LKcLl+sЇ7C:Y@|}0?,>z ):I ÇxR".?%'cqdªBJ-=^]t0^hʎoe˦:@v(s9nx+|H&p|@Np7DR4w˺Exb` I`ɇA4?)7vqEMoZ?ؔrc@p|p::$g$$ߔMpnn\]q 7xq)v O7r3o+7:w0;or85eq;92"/r+ +GoJ;a_M$tF3Box;OGpHt( O`3}m8tN`O`6@bD0ba:v[Muf;1GAf>6Ų*JǗr=C4HYƶ@r`:Q8Ugv_=v~OUeS%syou:tozEE4_ J>ot#9zLA/4r0xaz Lp@q PR8i3zl)4rj$HY:ډ'L,\9Lz~F\LY wyՀ:K{8'LxO;9Nŗ=Zn@C]{81uNSJ05fin0#G@$jnUY0s}4f ȘKOv9 ɈʃKx9/$cR!!!\ut(7:ȩbpryZgRPhcxٿt"D]ƒ9|(qÄb̈0?liҴiSȑ!1Jf.߿yӡWQRtidS>i"v&ς(Bt*ժR"=VAL m@N3}ͱdiy(Ϝ([j95֮_Î-{6ڶoƇ_?uc.|jK|=P;B2/;U^MGJ*R2GAD׮s1tBG{ ,cqg\rcO%p5>=qAvݓNOB)<ϊE7O>OE=(IH 1%D=%QC^/cyx\_?б.x>"?oqQ -ڢBRj;ttquEc9L2h&܂ #ij:4>#o\!c0>UhH=aQ10hUZA?AhE7D /@40üB #\a6a=i%fQ;=ALH9C+̳P'+ I;O= ;ܳ/7d0v`gGCc?3sm AN8?s8GQ̠7j?SOs!t\1\ :'Z!Na@|¶DVP q14 R@h+f=C"C澉d>X  @~aY~<"a44('|DqzX_5d(BG'{$! 9ScP#"rc:8tqcp,3G s=xGrc]VI9e.~,cFH:@Q ZtP$;ۑVF=Le:\'?8V v>3(ƪؐTSQY呏bj%$ZbҔrc͐$a j1ErD@u)9q1i\g졎s"4x)y021'Up@KcJ?SBOQ gDCMYvjֳ5_\+[E`墣8(5zģCԏ _L_5ذ9kJox$#THW/bͩ(? JB4@#>8R蕐|w0Ԏdt{1k"(f(luM'jFs0Et{!|8d0OQ9T = BLM+}֊l̎(&(_ErʥLQ]nRK[u_#+PDZT(q51YL8B?nɝ{?Y<2,H@ScLhFB(랃.f%}XRp^+0B J9ie<g;tL lCg8grf;΁Cagۥ?4 (蘨;Hz1 =$y|6drg|GR 1 A C1Mٟg={F Yj1P2cHah1c;ۋ>yŚ}pq>#L'ŠFrw'[3BICǾbGLA@^"k2n)z߄8G"sSxDKymµm,Xz~bGD]ʗqdO{H٢؅?J|v-7 Hh'!vST8_!ź8>QGD}@^c7O"8hw'| <EoEb`;VH0\W:"I^'hF1 ~lm>Pd4$UD@^#T4bϏhD9)Չ^ ^[AЀ$]A `X;IBCV#BKdES$G|! F FC*iID 5Q @$Fxq tQzMBR> ǡȗXG>0"Ȁ4O(Ga}ыɤL0?CLsLr̰ [@\A_\=BVZ=VyGdD$>9[d?dC+H)x4FT0$ IX D@@#X 'XjdO8' 2C,)kʌ<^ FRP ߯d4L@ BM`3t°ði4aU@X?LdlY ?ѱYePO\8**2C;F ٔYP0 |474A9âT0MQ<\HA xN]eE$D|$0BD)A?JhcBfYa&[&Ǹ?B=E;`?PZ1ΚS 4MqrE=21C0DXZ[E܃ i=dv] <" 6D|,y'H?NTu$˘?0!X?M1&; EṇP0(EHX= xԥy#X A K D i 獲L?(Tz*?aԆ?E.k`꼀@B>"a:D"HlB&`%'SP)SaD>0'A-dUDKΊC=4Qʋ7CC!¨'BcBԙ:E$<Ytj|A Ql jԼ'{`I| `*;C-jhLB,ԼfNa"`B'ID',`=_)FLx%ÙBI\R)D ~5TDWQjL? %8`L68*xJ}ڙ߽ĥ\\%$B& _@$,A0XBثmAL6 "HkHlHtt~ujbt <1Q]=Õ,`B&@mz&" mTtRFLpBAC?uD:C-@6X% 4B"†h)rqQ+?\!Ulm-GHaB?z <Ǟ*p|"$B2',hH`&lԊD'(C]gu0ƚ@<쾖e:>m  RLA /!m=8ԭDiE K2L4?T>Фʘ`ĵ zT%A%A2D"込7( @o o'RB'@-oj X=(cSIC@ @ЋolKlWBFxqr8ƯVo?jB&,'/b,&!l:B!gʈ+HxÐ$ 4H<&5̀K1@IqT!/qKB!A)xߕ1B)clHXBC#<6EԄFrd)ةRXp1|#.233{(ICbyER*a\ W\&A^bzȪSL-LD㸰=9 ԰>s?3W#(ֺRI'~ R=3oTЃ?X%& @SC"H7I4P~ "^>A!}z09U>x !FI0lLk6%1Ku}1z"B9ɹ+5Q,'3d?ۜAjpC^ ́l h-Œh8.'G^ 6A'tpguF">P;!PʨLl?X.>J4C Wr4)HBc;@B# 0N=SҘc90A#DO9ND2X $Jk[ů`E@a6NꈅM{[9?#ذe_vf;sR ;g?JOLDK+0X-'ܒ99\b5\b\b Fqn2?4,t-4B+pB+t#44C-8:Tu,gS,8-e?>3F>:毱$im0+F0 V/y)@?PؚYd d4T8ryߎMdmJfLD!4B^VА[j:Y`94B  ܐVLDRWԓ9< b |:R>S&PBHz&TBH&t+!tC50C+D'pB#,'0\9 B@ ^OA^DA*8*L$L(% '14?,.2C)'D6܂,dB'$-$(JHȂ,TB>9y.knLGAQ5C 9ouA=ϝt0A40C(InN=ׄ4GlR]CL,6ģ5W q_= ={AxcF n7K!JYsėuN7t?shPA[jlw'>j4ui4r7ѡ[=ZݹV5V5,OWtXYjn>N]]pv{[c{$^2,Q6|֓[χfڋDLC ̈́|Ԇt䑏b KdHLV(P_Q6bB%qY[1BV4GvfF⢫^`@ `%.$Y"! H@xN"  \~d^.@U>u$h*ҊP9̡H0d&YHЃ|!0rfD(/y ADHBu ZEӰ"q$#PT>*QI d%( ~xEȫ%QJ݁y(B~Zˌ4E>!Z#+:aj^xDAFl1JU$T B 1wZ^$.HT7IJ_-I?Nq>!}D `+$.B AA}>Mܡ80 $BvJ*#aa@aSvZj?KLUr@Mh 7^, _@xO.Hʦ@H)0 ﰡ!T< K|oQ)g'ah 3 f  *&L-1vPKr|0&>Xa~ᕐ@͠A>\ bA6Dp$!AaZ%aB 8!/%E/M(F7"Y0h{b:` d+P-ЀOݠ,ᛶ8 0G\ܔ8->?T-b:aBA'TQA΅~HEC6rij1I! RQ]nj!T^n .RBwbr+HAdp$ XV/."sS(7ONT7X|;F.AZ#`Rނr(`X LyJdO&IELd=%c !! ڷ̾Ц~]fpTK^U7 \CmbJJa/Ks$8<{A !8P#5#7AxEbID !d@\5/N3tlxSYr H!nA`}#JaP!؁E(G(cX$@.~pfޠZ-C@8&}FIO1FLm`^j p`MxؔOJ@С+#(&A+T JP`$D Q%j$ .%RsWLN fRB],! SjSx+֦z lʰ v g'8(o2/TYIh`J j;x?TV-d]B|nD MriGgC aFGEb}ʲVa3t7"ŢDe8GzY$]!vaTq2obT&"%q <dE# Adt4wЯR6e/H6Ax2(!a7-}a0 CK~J5<A6,!4$N)kJx+B,HaA#̡ޠŸE|4 8tOСac-|"B̂U:Aa!8PDLe)Yeƒ=>cZ1d=@``$ayUD~#.< x(ں^S<'܈:GH@!a`aS8(ƛ+A A:g{3wP;bD;=&Y`&Y*Z Tg-X=a lPߚ5Gs 6!btQ@!=!F#!=Eց':l^YϕkmR"l$ S/P=A,QN$ĂT^O::8oJK;h@ ͮ!(FScT0[tk\`!pƠDTb8;!ƛ]^oFU^꧞> jT DD# &.~~T: Tž!ʞ(: v>f"#7xKAW``p5v /!8BA^*2B'! 6@R#@<#= #<>a[:Cx%E%\_~5鍦D:" ѽLa&ҁT́Ȁ ta'̒~JW# A2Ӳj!8^P#I"@!. Gz kl =J G={4.]:w =~Hɓ( ^'/8_ͻ͛8syΟ@ 󢽚A3֫rK_%I7H.ABu+dN_1[LV)uU_-0`տFtvyzc WRܿy:O1H)O=?υPH{? <!>u?ȠR"NFjXp\??cQ=O?&dgdɰ$۬&P ?MktR؍h3G$}R17}eZ-@9&9?,^Bќq 1q@gMk1HŠ?Ք:R 3 3(? :AH(H#T;"3ĚO5~d2oM+}Au@K-MH`/;>GPl,AhCDh1\pEh0sTV!i!W(늗0" )SoN7927h-6`҉+w1taomS_۔?rS,</K,9swz,W ŀ>q$Ksn,J"]; *>F,D2|?a]$9|#rB _ޠC<# icPǯ8HA sr{(4HLb vD@>먩FEvFm0? J &่A$#O`G9!DH^>i#D]; Vh:яq"?`p 7xAFR`Y;@ڸ$6M;QXci Rmdl=e)NLL t])x-bK#%;HPy(hXO6+h'iNvBH \4l^W50KG>w6M Q1|twόd'>rlqH(Fc&#xg'@3e>V 6\HV8bA?qz"%;PƎI$G IAja4HxNa:b9m6dpoPZ", r`Yȩ~co|{N'' خCm0Af~ IJw/{ҳRzU0s 85y|c ^EXAhĄ6!Odh4{C)4 O P̦ƥ]D+2sw1Nb׍Hozx>N޳)d[ׂ"S(tN)A1K<wTCbtI"Gby'El" 2B!2ņg'6It@yCt_@M(:$|@` -Dɀ q$@u .p1g7(ֱP {8H،3yOQ_I)n_@m5+e! $K""Bc0z zZC,Z @NRa ` p P0Ea5 pVr06l1W} thAeX=E T@1nCBAT7^ U \gMQ0K #xr; ٰ'Ց)!&sP t0A$4 p BW RX!@ pUl (\p S$p @  ! ڠ O$."`="V ďjE, "$#R`@ { !H /)(Ry FW9@U0 aWPXU3" 8`.ک 0"0"а 24"ףaZS"A@Y }K`p`p`oPCK^à70& t 1#4ZAy08Ugp(S7_OOQw  qPWPtP`&3x P J mz 2 +J2 4u p 3 8pS H9phD <QKDQ`Gw Q{w'dWCgB0r[gFrBw;$5Jy@q,W@  R4D4"5gKѢ7q1&s1"ʰxqt As+=f! dX[֫"[#u>۫p9 7 p P  0 8EG  p ` eY0  e  u q 3(2O08\y7<GJx 0b{0ǐ^73n6:/!4Jz+45 | %u X 5 Cl!1 س{ t!p3E/#bbqw!b "M65PD|>0f- `u}X ٛ_ĝ= HkLA=::nIA@-P׭` c1臑Fg&36y_ 2}INTNє[@ mPRn, $ |c~Ґa&!S{UX jHO"0 /bI0M+T@51y&!W#+,/ >1c O^9L^E-N<}!$R + H55"Hhw˼m _[kXG=Mc{`&N ɶlwV"rZWЗ lA{*9Al0N 8! d Fű8 @QthHk?q¡Y1q@_@A "1NǐVȒ- G p7la@[ $/UW/ tCWtysnZ )bg 1=S@B T'O^]ۇ޽vۥoKy𯝿v *<2zęS'· AL?;=L}J4)QtXL(ǔ]Α~A醓|#Qv=d 1FB 0bO:v x=͠/0B*nŤ"%QlJmJ<_.uK^3gH:3rpHl! (CQ4XV)EX/ȅG4la >}>҇Y%qX8`JAD" U#кTRx=#a;֏}BfhD>P 8rE-l:z\ZK,׹Unsr-#IqpkMw-2 ^J!A7B[$rZGnDB'W,q=s{R\h%d=ˏû厗AHL:'xUx'(@+5$f(7_0K+J`kElp|7o:$?~Ep=LЄMYp0XR"~) xb Ƹ@+spv"$u|A `+ V(9{jO~x !Gkչ:7ᴯRTihx`' P,D0Z@>Rh`3(؃cj0I˺:VKW;]*~(ӰþEXpg1@H  #!3 !D8~aGؔM%kt8eFP\8yžy/[pJڲ8 C^ +P=P1"ȁ0.(A/ 8DsrHP .`B1C'l4F>NXP8tCHf24K1(Xo{1~6|uI(%3PzpІ<蝥xI0!u  Rh:q8KƂMP†:(ъ0*3@*=Eh8E:.0MPPB.RUYUD4ŋ z\Bͳy@TR@ xCmQSxk *&Wj'}YYupD@f$& O'D(ke5}Ȁ8ؽޏ\|HQ4%0g8fm`]Ky>qXGh4 6e+R[R;AIX5mP _WMUPZcPhJXt*sPE=pN(ncKeQu hq$[ zXMFh4\L@bh 2JPpIDhmYC<I@fHtRIS6<Y !1K2b0IrA?hL Ei(SkSUdS-UMhhkoSvH2Y]~XE KAHNsX+& ajmMjcAb&Kx EF06?d^fpu1z=.y_Fb8n38/P[#y*Wz쭼NsLOdFȽU(;@v؇mN^~GOJJ0C3<^!l!J Ɇe0Pxxnnj.rD)< [$"&bꉨWYE˲f0 ef'} >s|cYQO~}0=!4B >Xyg`q47`<a 3qy@yae|xnCA AVx~гpruJ@~m̈́uVw 8x8}u)„7mZItPlgE7bܨN]S#ʔWl%?։CL"Ԥ&h',j(ҤJ2m)ԨRFX9hӧOL*5Ig'J%s{ݻKz֐cĊǨAǰeڲ.Ew9JH:3'P "=@ȔTtvxiċ79~, NgNݞetd1Ndcw_ձo E봨RAH$蓎=d]|5ps(#<`] rQ 甇#9&`_OLXv#9#=Xܲ^2|RA҉,Pɑtb : nvDOnEWZC m&of =H>Pf#F\@O"%,H2JTQ;zؒw]u93Ohϼ$(/0NЃNe?Z|1kI2`#-0*1%,6(†43LM3D㔒gdPJ9O7pX/0Cc1o6F\?#'K&ɠG1[Fc);F_[&2HAcn^t|ϴ>˟#xI^Ȳ 6Tr 6\a`%!l E)1 :(ЈB`#fHf$QASF>(h&ۚ$!Ή?ls۴(POa `! ~<G!h.װ$!:لz>AP\ 7b>CQ\,E&4?p<ꁌ ؇qի~ײ>/prY8 "c 0Uǻ'iRϐ2O|"'?E"Є&. ؇'p:p"c!s{(%JMb \@M`@ A j氂 uTzUXCژ`ǿf分2x w|Bl((L RpYj s4aIKȒا!`AtܣS?1>|ld0 HP@&L4R\W_]aDcl?dR,^1׬<$}uN;jcղuJ],d ©8%\DJx6I]Y mZs0fa;y s8 /@$搇@1â`\(#"ґq|p!/= `?ƈn01`a=tC@$& l6nq)-E&dO,P?p=zNi1a~D2կ2d.Z,t*^T :#r IH9i$">K},w/~8P"rzt{)4#YY1Tf$ɒbGF_+IS|IWSdV2G?3xIhFnSN$|("< Maf݃@PS~\}4` <^BK]onK#)},'-( veNY `F `,UuK8w82a=Aז|$@FX0>P9<4Ŗ2 Q*L d,ė);j@i>O lb*]{WN:}h=I 0HAd"I"qGԴ5X v\qm#T3#TQE"> A Z`2>[ =x?dĕ(R}( \pQ :AMQrC0^$tXeCΣ@Vh9 )pt;HX (, 2?RE\E;QY(1uIvȋQS]ɜ4d|D}E:1 ``HU%CT;PW??'h'h6Ef'0}"0>H@El>XE?H$84>\?öCd=JA!B4TZK 84V\}UC>82>`DDlI|% Q @5@^/GCX9̓7C,0āWl YdB%&V&hՃHb֢-em\yL Bl `CD`,4A%=.XaG.A D0@HQ%U[NS89+Yك- 8>dC9;<#pbKهWJ`DH$xQ<З"@ɜŴMC9 KC\^#D+F9@CcaȿHH,E^RT!&@E\&8X4BAFC41[.>#D/yH}G`xLC[gl@ HFed"=8TC5x4Nr/'FmT)6(Uz$Cngw)C? C"@>^y %?h>(\<>E|.Ɯ@5!G. EX)ţK.e CA+\~ ?*<|GĿF!P,bI6Dߗ4-<'pC+8C+ '; =)0#GOf22B1:C=` m(It2E=` `H %e5]_?B%tdY̛u4 ER>"<"F$TJ?iܽ22 C3TC:9LEW@RA3''З(6-94B?d\'pB+4D3B9܎u%_ ?Tth>.UUm؅mB"H[؃ˈ?&F?\U*UYҘ\ 4 h# Ɲ7r.^\]&^UI= "='*Rvo.>$ǵ>CfZ>a\܃8WJmj/o#C#<%?F=jC5dVevֆ\ZRMHq_2[mC5+ؤB440,̂7tCr"n?܃%b&Rp1pV铜'OZ`ÐgF.SHJ#9!;L&N 0!:mB[4(/EՕ˔ǡ.*eBkֈEolKn\J-+Þ(^9C-ݖ) R( Jԅmxv\?, @ @Dyd4ۍ=iĴaJ| *t`1 M /\!8u/HíB}w#,AXԷ5K(?BL?<:Y<+[vw81?N‹]yNsYKuC@HC\?_.5fGzEP#-(JwEC4+BJt hfqXքY|ԅ\$Ij#:<1|11t:C1Mcx"X)8D=!x!J=S_>ؒ-A=t=v=B1G29ȿ}]UT#^44B5]߳.>k C}oֆ _ 0C PA LuJ7L5lCb#R<'B!1G90?T4%9AaeFC"#Eg'K̕%+{Ă?J$L-DF_3sLn$4p(:C+8[qʄJ@\59j$Tp:1th϶|0Ӹ#AQcpdKCJ|[$Yo_=.:FԩH~dOT|Dryܹ:lYgѦUm[oMg՛={.:iߎq<>yL'oX9kcFh047b } <ʕKw32a>rߍIS- #h3 #_=J:o^>pۗF&9n/aѧW}Zsty~ڞڧr!"58˶iV* 5LH'lc ,yH$;'_ΉR-,)dCh54+8VDo)Ȣ$afh [* mDHLVY2{4i Pxa(.!:`s%i',ck_yyRL+kLPr.EͤKꨣ~y1pb7TQ55R.1D%[4z.| Vx#,Fsa5 a`f%kmct` :=矁Za.ڼvsD!`kEr1e>1Ѹp&h5g67JMEe]tgh դslɣ $ :,yBKV)ś&#GF ŜPaLEj`كjL se>v1 sRy14vҁ5أ衆bOh^~zt }hC hъFjѳ-/?jdȮeKIB4Be,VpQ 5LB=pA6Aِ GARIw7,ayQY3|pl|}!h uc P`2n+8h^6#?(ATBbw2ՀֶG=7"ΒA`e1$WGYZ<La$<0Tbz1٨1 ibC<@ nD7ᝁ1e&Hie*Q;)O!ԟ1Z9y:|D{=C2{!Ꮬhe٥0G"PaMXY 3 Q\\EtkHBb=C (;Ba| 0Z"I3xA XԵH:Y9򱌫MO_)#RpE&<c`)siSa&jlF8:{,v ,?Ba58J.;84A;T wihG6C:=@= 0'„ kTk.JS={ڷ%{}VD\(W{HBJ܀P]èf#qy# Ģ=Tʀ9mDpD1:}]@0b6pdv`Cngl' p`{$؇Ղv,$( czaԯb8bܠ:6/;n.dHbЁ$2o0gȮހ:):("L!BÎ(d/x 0*N0B&/#n$N4ZMbVBȏ ΁1fe~, E#kl %A2aH@a 者#4kLMF.bbH` !%k :ȡ2-CPa%CA$.Zq㔬Vj%N4Q"8N&B#vEF,7a 1q,A br a.JAMWBAJA p= J(\Ľ,'lGb9ʱV^%sj700hсȀ j=x @x"PȔ|,H4iA"I D[t>!Nh4 cIl.03y1G#v`p,"ɏjV R8Bf vG}|h!'GӘG%J*}/.$mU !s !lRr41xc.ni~e#~&*fFH> `A#RN )7K6Pct:=- sjG dw6AJ>n!@q@ РqHV! `bˠ /M P8RNx-2G>$8} R r8AӍbPAAja=dF=V;G\AtB a0QrDI7c| ( & A0t4`dM ka nd@6" ˢzaR*K\m4N T`bp , 6-V8)\m!Ae,Lj!0L8P1a| )OѠ\SՆ!6ra &ъ##:uN+U zCh5fk J|7. 6n`^=D5a-$`/Px .фPRNj0>"aZ4VVH@g'{b`BD=?D0 xMipj]%4-j0fL`T1ڋpONeGx!.T5oku1pc6W?!A-D7W.jr,8hl7YZ,.f~'6$1PfRZg`k,$x bleb˂(lAȸk6D ސ0L0DaI~5`5Dy5LDsפ}"G!A/5dwwj~DT.tTSA"_} ^@wyЦ6$Zo@@lRy+fAv?Ъ#<qX N"|w')L"L!G$WJBW|`gKa' 8bvNq0BiIa-.*ѐW!mX0%yŋ"IL!=@L WÐ , B~k@ƙh9b {#^љa rN U9ZÞvVX##$y _S}H,|Chmz0H(8zę1~Ḿ:0\: Vof U_GJXxF#"k` r`,O, a(uuTT"s3$!` šˢp9Zw0aNIgsA]0n#}#> WiTD#U$ \EMhd|c-   (z nQ`-- މ܀ Bj292jVn֯jy?XVcᦁa<f;7X4Gh`{Xb=Vg7$]KEd"Y]xz`k@},B0=L4_ ۷hvV6XrSn~6< O9azPyWV0X18Jm s Rzz)/5$[g_Ȣ9zLchi z <@`|cH1XzA,# xЀw2]x#RTlA-Ia.Eݹ3k#.L[Ov7X@Bݷy:5 x3fہ{FÊ#?Lqc(K,5 ~jh w?hn.zaa*r 7mrD(̆R vᬥc>X!/ !,r )!Wc[Aї,b>8onH˲pW8|;}"!ccb`ꁥbzR#!p xϾvohr2+!t,Fx- k ^ĆςhLBYX.U6 7!r Dj|?h`?naN! W;0:+&b 4cDrS ĉ+Z1ƍ;z2ȑ<񤽊&I| 3̙#ݛخ]Y8zկʏ9sw 3ZJ #G #E5fJ#h6'?.-xՂ8g2'zaÚemV∢.ͻ4-ؓS̱~vuvڔ<(SÇ[v <ċ?<9ǰ-<||n9L^Q0A֣ylk2.Huu#!MY=9AY=%T,i5X \p=:X\r*b.c4OC4"PFaO*S0 DD ߈PCe\w%i[=pC9S; 1diZi1m&c~ jIdh|l9nQ^M1_0 Eh,㏛MɨG9d#Eúw *P$ UrذJ$SP]H`7IpRΓO#$􀭪5)L3 =T7 NA+xϫŎJq_q8^/@CȶUu/W^=mF`S:cUU̱K>/MN5Y=ӳD+ ` A060-ʳ‹ +k rs4SPa0#WV\$L9O/>pa  #D,^VONy_>Sl_ΰ?,s.Иo_= j Nt8T=LMQbCu=U8lġ/u+Viܰ It 9 3Վ=S HD 1G s$DH0Jp#)"s]j:E#v:7H ;te Uz0$5zA Kb׈=b2 [ f#X,T}/U\U jYz9 8,@ EOCB) zivA 'p ^07 \D8\#aI;I"1uװEaE. jHfCln=cAmI̚<[5ps IQǚyN:$8Xd)3y^Q9!}H$ (DT7qeoxC2-C]2-V0ga6[YRΈ,ry8g1SU ǬD+zъF#r:KzҔ5.LkZ"? NW#.cTzլn_MAmh#"5gM[z׼ ` {.d+{n hK{Ԯlk{ pbjA`n Ȁ ߍ|{ 6 |F8v衃w|("r(t61Z!+'3,ָ06P$?!CP?TViXf\v`)dih~REI yc@#Rl&iPKޔ#P9gC.hK&Zj Zi~̧*ꨠt Z*B .4 -*2P< CL}Tj3´ʋ3l4s0 0 30bFJ-3ώ* /r)Fި)PO)t!ّB7o"?shJ 8c !Ҙ# !3iȎjM< R4NSN,d<mDC#Ez* {9` tAj]?ptmrs@Ê(#P =Pstpp7@ އ]8̓(]9r>Rޤ w?8"Ģ2׎z?C+ؓO> *C  $1c6@C2a 4Ah@.\";+r~(F>qOX.4Da>RA| BI( C<ʊX&|XAܐ!Qу< n hŒ$DD{A(9l>ሠq \A]:mR}e !Uk #{^E4hB&${w=,qA '1C f.p5U#m9hp'Yz(sԜ%`S@hC,Q O p2"$%t#o=tbV>g zx'Qb!MaNB52A&IU퉊$Ab5HS\B1H=깫?L|`:QFXpc?qFQE=aA&YBV#A(8Dj 6!U^FFv zٙ)p* Sl( 4JP(<ƺ)+4dM7D1r9ˎ5^G[ u8K|#6=1I7P?Arﲫt~я#^ {(cӼ =@tu80N"mTr%ܗo;kT`sT6KtNoxS@EWyà?J\5xE xߣG.@JKB(Rg`x᳷{"@R 0?9= ||t#.= /9?A `V UBЈSȚ N_xRT+ RHL|K[~+*`s`pDp4BeENf {PluE 0q~'d |Tb@$3@R4h@tJO0Zw97@9U%|7tup _=!$ `{Eh3`؅N767C7e{} ?QG U$~8d uU]Qu"KhC7h8 apx@<>HJ*| 9U9u:2>|P8@46v2qB= ӰT@ sgx7 !`eP a9p3ыsUs}qy@=fEvE˷ ~+Op IZ <BqgUE]qkTu5^qD74P؉t DAXdTWVϦIFY8P`F`8 Xb&U0 OTP{pT'VFM`cMdǐ3p Pl6 =Q`CJF ȃ{]{Z7D(S@xىC+Sk+8@@Ye Q^(c|3I``}'9'E)P 4D p!QRxD`@P?h:1=-wD7h)@HUIKQI0)I$7y\Л=Qō|#9 CP pzoX:8puUz R?v8hYٗ5|@"!qvgs⃛FkTQ<g Yx'qn$oڠ hJG =@|>$@9dG t{֣ wxk@5`ؑ1p_Pp|ETGP7$P0Q`Ap#t9h%Vv8iuP>07q'zoe S6i@<afHPbDs":Mr* P 'IƎv0`9f gZ@*@ᓓްJbaqcf̶^p|)T=@fDp@hT:AG\ seӢ 05u 6]uP psF~#|XV 9$@6(Uy:(_7Pz+J> 0go8r P 9}'u'izd;)Yib6 oUbu `PFvsR8w)@G=$0`Yb{ZF`JdKߣow=i$eqh@e9w#{ @tp{VReud W >+:^g0 O qDv~z80Q4QGdo8e;>T ^!o`F^ OI7Pz nYs[86K8@_{DkJBb[}iuSh/U@ gD pT>RSp Qbʪ9 TTMUInA{bU& ɢ6s r-yE Tð< HRR,>9@Ͱ zgIU v% k e9QW t V:A\ {S0٠n%Wut $xH N@AQ+PJչ,PC+plNt`}Dz9\M{X&G mDO@P I#UA} U6hWGK)/SeElS{uU WΦ@/h4Y5E#ʥ9@Ԁ{LM ԌU} 8_[^=4/E1 Dx >l41h_<<_$@u^f@_[bV CѤ|GoPlNuek`֍Ewа ϐgF3#qZi4ys @ 5یd%tn_mnhpKQPK@I@ fqDvVXf  \hR}S}/5  *~ZH9~pm>096 @t{  p{0f!83eG S ~fEldR(5EC$[DCIIqY\ zyI4yZO@+nonJ<n@100QsPHpS3At $@N'5}@ T O TgU {Яڭ כE `l=}_& C~rqH<\;=@]EN 6n+Zp[}ZIG/ps Sd~w8'|WW=w)mU01f:v hpy4黾fN({Z5DC9FH)M=\0\~=@p % BSO0\Ooy@(~:S 9t -wY6|=P+wd^o`+\???S`8S[~zF}":I gmbUnP+N D7Gt5p DQ_)wRa p ^Q$J`-J"E/ʏH/9 GɕWO0/>rI/vC5_5`RHUS_ I@z2m̘SNw;+9yzĹ{UQCTUƨͿy~VXe͞EVZdڳ׳ 4Op!nDx Hǎ[{Ӄ dʎ֛C\]2t/ה5bx:_Xj9lGSrzߤ=k]o0' RH.r×.|ˈ*Ck(/*B׳ݿFt'?wBr$Och:gsكi9c0->1$9)[J8]zȁfʶh,j稶vG2H!ʈPd5Js{è'3L𧥐iꠎEaXeɭŒIv0;8*,!'@IĔ?wrgIGATه9 Np1ǝ,G_xC^2$I$'Kn-rېՑb<l,GFp:,ͪSIJv^{7߶ +9i|T'#.׭v)GMuSc=&&g1oXxH\yaOze`chcH gT0mK|(-hZ*(\Bx#DuGR(4g`'c)}3a3-L1pr:p# $Lm@ $xeu_yɅv3G{>\jZtPqjVXC|14x;XFɧ3*<^u='vZusXDeA#諒O.G-tYwQ4 we%砉٢AG< {b8IXBzCk1q!tnKth pz0vGDb;̐ڟTՎyĊYNВs@2L Twp56),DŽA2?AuGN!{ィHCq)4 4B%GQa p,*&8]GFt#xg? j&H4A#~ep Ї<AdAk 3xDp N#`Gf )XY f<x8A8+ݒ,xN?1ipY`C'z#{;G(|y)9sЃjraU!H( KC`ԁ4gbăQ!FlhT8HAy3-8.ZJyQp~D@E;*$'f*DEZ$L*5*/*b.#3qE1!b;q1\CEcc{:ҡK8wpD#(F;ZqnE#0)a d8)2ےmQ*OXn2" @<XF'>] b#Eq}.T,!HҬ%l,855P[N87C"C`?ad ,2zؔY:I"kH^AU|2ũ =FyDUȁYa>Xi؈][ ucZGpDb$AX tв z%p-HxC> _gnp(eX띝hz)@*:Og(>VAG؃:a8:x@xA`:ȹ#T>@*rx?2 @1?8BhʆS89ءT{~p؃aR8Dۚ69# +0W*;zPn:Vh%{ q.ʇV}j0(:@Nv@Ycr`=x~P5}kLLMЄJO Is|< #{'J;*K3P#В`PԳ ̘y#8JĚtR İ7{]#|h:j^y*Nıx}&r|pХKz0qi:gHo)=8 ?.Tb@ҍI{ 3e(7hF7`,򠨉RY\(0e]EFc{ZȇjAЄN(H܄NXHX~0ʶ(#,~!%d5=(ci q@`) Y8(dz~E-%ȃ'ds }/" ^[R "êh;@ [R$Y\> رِ Ḫ(+4LZ)NɁ^a#qV@NdA4;DL y tХn0ەw-s |K b P\G܃5@E_2DnqV4c;p=PXL M\MO.DNj vt/lVJ@ `x LsP@1h9dEvGz% *8S"8H0 9hJ᠆h?"F8ƬR !xP8u C618 udS^{=XsN%a۬~ eH-}HQyxX``||(V7XN@* )1N Xȇ=0ne]2WxQsS8>xȃf@pBj)ueghNh4N4 ȅ]1GI8$X.t$ (Z) ={h,o|Q| b`Nt-o SpCIgu^4(>p/%yBPv (|(Y#ߥX:YRurC/^:(aO fWehLƆAHlql[0cdY}qIjx7xBK [e8uV`t456~~ȃ"N"@"H DzĈP ݿGRKg#H"EsO^>QgȘ2gҬi&Μ:w3'zARgN#7_ouLGf/W$|krۘR$Y@Ti-Y_?d^9>O!6S ?S?J+x%bs` >P 1 1B /C /pCBWtXׁG)_IDa2_P%]z%: $8ȀdnJL&$8MN)EO#E$tqfY%`&*&-"lІ4C9$29Ji۠rJvH1=`J%`&`2.EVj%DXa+\N9ciOgN:j*QXB580E01pJcaF$X97 (϶Ϫ2-tX;S 9c 7ϸ$LÏ $kyFG5d7%M<@Cg<$X= =ϔҘB*Ls n&}kI' 2Є%Ly+RC()2!;ҁ P@"DۗF0]s 0*0E~DS:Ad8+ =[EP? V$BG?Ȥ)$FGj Btd(G9no*!&dt t$Rx9Af IJaX Vp r HS : 8_c8ǯꕿYҲQ?ЀRҒQzЋ|t2<&9U=T~^998`7f70fc$峢C"B>1%&:щ;pA|yt9p(7HX<w'!=3 |RbhB$!7(cdsB:& %H A%LRV;ȱ0c `D?2C~"2+(tiڲVjMt 4L`5" > B?!f|PG4@`Hub<ܡ !dbvGL"yN,B`Fq ܠK;D?B#g1\a/=Z< NA̰0k$17! ,ͲFZg *|+_u.u%V##b/"uxa PRywgS ^:,9$JsHC@- #α@ @B('qkYyC ==]T12@9N vGDEElR> u0eЅ.adFbjL#̡غ z@B1L8I+P/伃~?C<#w3QE =I_iXT_`g0Ag RG6q GfH3pSV>4v .'Q֙-tlg%FLa wQ uk >U8R$"4@1Q+|X]0ʻ]:T!T JCkR)KԺ1%dލtA蘸8 #y9].B: ?Na^! GH$$jmw:ӊqTÉ1qja?S=E y2IΓ$v[ #k]?̡|xmLX@! %AO,H4Ȓ/X |c0JHZ Nd?ߤtyx`m:F3& RhCBNʈO>@74 */\C@(]'[<9 AMR* \\dڨ %Q %M߼&,B0h9xR͉9#P#$*C]hQ>^5Blހ&p":8H 9@aE-\!콁PxE?B@^Y @ sL _4Р?x5E9l (F,A)Bt"?@ xQ"#Z G>8! vÁC; }HU:0G!p+,w-OE F >X¯gd[ Y%B2܂&J|B2B%h-*M:܃=->D]A>+Ae CbC0Gl,%$%6?D>@C1$$)ș/[p'$FK'<vB>Ѓʽ]P)@ $B4X! #*r(C)%B9EZD6c6: E46R9 61fHn%A` @ ́/ ;I9M9}E#\пBUDkZDE >RN\O}AgfՏOE #x &AB2|B&('s!m; Uwfˌ&>,*2ۇ` F3d}L-f]D:`?<?@'s% NBG8bP T: FfxG`0`_Uľx0 2%FL PW_/5egC,@ABrsɃ->h%&(N\!hYg!'9 8 TЈ$AIKhLik)j> B @-`($C%$C$$tb-(t"<>hAʼ/O؀ d):l{nÙY?"<%?L 2d=;048rd;i ̾D%];5B5(C)?9ܗEPW @]'h(\#HA#-hK c O=\,)D"HI9"7Zژb>/FBOc;'ZܨMLD/O./vF.PAXADA/, .&$4)DC$߼?f{T$&8$ XĀς* L1Bl;/G)bG<lBw?BACIo>@!L_Yw\b4B$$ƄN8?C?8[><ׄSĀ"Hz%H/а0G#•]D~oO)n(@-uMfܜ)"LZp#`qlFTCš\~.lN.BV$SAXBRA H]ђ-R1Mb!Q 8"aP#]l6Ё "<8Q>ăceLH>HC"  4H(BR ]T$>C#F>MP&UyE!BitY3)4lMXX.4TA Ph~i4t1x.G C)ס"JJץJ4XF(I[t"̌CF%@PA(,8u @1}1NqN=dDq?X+1JG6+rE?C$">J:4EH2_+¾KH>T…J 9E4 ,\WМ_E4uM)0"pKs=d!OTn+%p &3}4q{ 1?+=net\D@JݩBЀ@IBy?$ěSr͢Za`:]uֽZ@?'0K Y IKԩM*d6:\3 dՑJ0g 9 G=r7Xq rk^H%AZWȝo<L:(u(8X9s4'PȶkMwSD9\~ rTk}U9 >%8-B\0S烚-P 2[pʼ\|#]!tCx ఋ8ńB(K|#lt_q5AN:y@TuT́?poI2f}Njiz5,xC̩MÍ10D A o3c >(4 ׯ9+r<네C5B!+U@PE$- 4L>fA,njnQ2< C5[iF:Ua9b.z@@;Pn޿^QL2e@FME ]z L@|L哷O5 ^C{Z×fQⴃpAÇh(b @ꛧ ~:&Db'5:D2jK@Hf'{HQB`y晇={L'NZ8(AKepR]z$M܌(aN*rvh;6YM60MEeq'&&?:wV8~ nGtX$D)ezoWQ>Zt!$h;.di 8 0z[)1g9+"rgЬ`*uev]%sfV1ʵtcLȃ,4 /;s(B"$8ϱɮ1G-idBdXQXwg}AvqO=f:vxkqܙW0MY$y)Js٘bP!.{~ӦuXDfD&&~f0/(PD%!t9I0܁:` `?a6=0?5'?{ ґD]`i6M:9A٤[ ъV4(](H ^ƫ`H@Ԧ"5^MDGͶ;=bsGE?^Fp*Ԃ">Oܣ@xZ|?)H"tw-d JP?E0.C>Ѻ.! &. 3@r@&*!ݫ'3Aܒy91 BX8Xxv#>3ɳL4 D"DQVpGvl'J&#p& (G)h`Tԇ 8xxPO\< A1Muj7x#XK]cӏZ#d/ҩL9Qx2\/0^o3框yb;~#X+vvAXx4[C,a!9Qǐ V8"\?As,dQTBɐE%6QMP(+Pq!0+Bvq%d|p-`idT bHt{Fa `.rtn|CPRp0hN!!/980EҐbH#.Bâ_ k^ ˞:d,*R]<3}aъBy_.|Ñuѵ{8Cr@O"x6:uU$##=\WtPJ t -33@(T3?" lc14HCaOPB$`G_$c3u6c?!DHG>.I[<8ȃ(xc!̡ :`+ju":> X hcRi嚻v]$\!#&7%!|&#<p5yhQǓ,Hlv(g7mN*PB,9 Ąh$J(x(/!8 A"$jjx !ytmtIȋ`J.o%6ZBԡIA!࢒msEaca衑́ n@<< o 5z)⁞|O%Z Ԯ@Z'8!x^gbtfHF;פ$fv@Hxh@ $h`!5R8'J (͆CAuT6!gHIzJ53'7r#[ ®/%*W@Y37wba a( ,0 ,+@q b bȡ8dAH&ڢ];؂v[n&ɔZ_!JBb!Z 43Mts}N(< La N J 1oH'.`A)AF w(jBT6 5$(v Τhaf*F_!  Ƞ Zmᇦk);s6)'@aG@&A@ nRVuLʑ&i/Ej`eC~+qkclH4DDC4'4:QDb8' ˗΁Sq#"7ATB& ġ-'m B05p0cޠa0:J(Zhנ 1j yuAn6@MeSa߂@@h\ItY $X a x3 AuvyV+#?'ai x/!F8_$$\YSbx &bgŹ)~Jʴ( ~'hʃs'0:j G=9`$&! WT:a-2a  (ah !H(wt8rw=!:^auVR\(|.a aXJaal)%lli`>Q4 B8` x}$k-`u!m5ǐ`>be-iWY% _gngSsg.7!*;yfj:H6i/`XPj&\ p 8(:صCbasT^g8aE.}0/VwQ^!(5yN JA`ʡۛJE!fTaT @D5KA@СA0.@5'-ΰ->&I@04-A"ovk98N{ˀ)%Ui.A/fF(XZ ":+ظ+.^ rEA0؁@Ȁ0:ebp!h7xSn{Y"J6J$!u>-w"kJ >K 6Gx<\'!@ ހ!(YۂbXa$cE;B:!؅}؉؍]YNj$50Q\b[pfA,û+:a\ģ!%хAWoD>5ar!( -aZ̡zc_3){/o5}%GGH~bㇽwl^FՌx7t? H!VAqN>uL]}v*i|P<ژ|ْ-/$D2jSi wroPX|!hWfȐD^!J)a`PAu?ēk%p !!An:a:#!"W h$jA8*&qՙgK'A 4>^qʽONj.3aa&~R ^?Ŝ^J΁$ף֚׀Kcr>/'յC}wA?ABS'L2< N%gvY1ƌٳ $wBc.J,[2̙,It׮߸Ktsq#͡DcM˷KT>y^f$00`ׯ޼|vڵ!g$2BNE1R[?z­[_6*2rYeyݿR nv[,_zvȷ}"^)~ 2;@#"ϔ+I&1)h& b҄iQ$~3iIB_t `H`KQ?=J4DYZrA`|&Hb&$ Þ^2"@?)θk#uxN|2iRk"99 FY(E39ńBNl >ORU+L4=8O<9TAi;7Qyr8=䃌#HO0P&& Cz$Cϫ˼ҏ94k 8$oKo.,Q@2LVBĠ9H%hm% DԨ*2r? $8#RVi|T=0c2MBIQHse8BU+kT?\t + /BT@9峗;iUbY; ` ̓Vy?oQ?v=H1SS O}SQ4uI33G#$"$A,l@A #2[lŜ:PNO}W(>< =5}T$ 8@) O?OOkHڷ*0h ":ЃN,bI?(I~`>ףhBR` } Œ N0$ PB8 hx {P$#biXDO{;9!zC_XNЁIEbK9a*L!)R.E|TD% DA]iA"IVK@RC:!E2iQ*$QMуI= Α)79aǣ _b > V̛G1}=}@(J<)@C8Y^9s,HL+Zx gET|E199P "Ƹ,(!J|"@6 Y84 >Αf(ϲ23eo hpK#!G9ڤ H8PTE^Q?9v4Rhp?Y),*`3vr&ΡMm]EKcQP8 UAD;}QXOuKpz8DPYY.s]O#0<!ݶ(JA#N8 a+soCr"9qӂ"9tK٣tTM> A-nLȢ`(Co=X ߡVTH; ;^#lfPF{TYo;MhJOxat(~Dej!.!NLy^>Dvu?J?h@5G< Q|80K"+nKT惪 / 4į~SP[`W~auu7iZ`4qgM@̀ ;-x4s {\D|$ "AGVn|p ]YH6dƨuwoNh=8jeq!}+K- g#Bn70]#t8tRW(PR:=4r0 8FUp+0+hpe`c: Xf0:#p 0 bh00 ``Bu "a` \H>2KahXQc17hx_+Q00u@ D H Qx0u`Q `uE{q 2lPvYsVsU/5/0& ˰ [( tp P !Yp Q}>PptG7amA1!O,{/I5w(("[m u o l!/'ZASaL/r( 2 )P=*/ e">`b=Y KWǠH?ʠV>u`/OT W6ig6%VwY45YZCjFPNmtfgxv"M" ^ G /7s+k/5t=_L1h@DO_+3 Ƞ|  +i"Qq pV{8/Qn0,;Ip/pR|W12' <"cap$BT0Y O#, z`LOW׃W}J  6E4= nȊ9zv+;l =0!'7y00`5rUA;  aɣʬ#&tP3  f8$6Z[Dž\0DO_ T\<9>6`5 '0yUK @p EŦvEPL̍ 3@yL d` h0y4pAл,⠂!#۵m۵Mp$"դ-@ heV"q@4]=9@\2y\h 0 ڧpyԇ(!V}{P"?0 P`:GmE5ٳ? תƵ__FAa+&`n>Bm/+v9pD·00 @ CL.Q$!Y0@d6hw7" 7D(@0}ՙg` MQ` -D<պ~۹}S@!A. |tI͒p9@LnG^H+82*.?m験" U@\Q c؜hK;iR!Y 3X+I"@ҠܞNEWs{ @-:=` D`IDI_n@MJnR}9n0H0SIS` \e JJuzb?q7]Q p  -#&%&z+p P [$;d˲[Cvv]\ )_>`IU / ʠr}_.QIxbksϗ.gm<G}Kl/qא0  ӰEO8cpoC65(Y= e]m]L喀) )O0|Od5{_һ+ #N`.gO]-E0iڴ(>{#]Cu'Yt荸ttćOܻ'8Ru2}'UYnWaŎK޼|H`[4z(˗n` ߽CG?~̒ԩ'PɢΞ?W ܹ/y[ #Sgw<嚳\-:vEis-Ҧk`!FrLB篟s񉯆n0Ơ7VJtG|~so;tdTXbsP>DUtQF:+azȁFb.*(N;E|ةQDu(ug,O*A#^jG]5FZeBO=C֢q .~~Gg,ՊKG|rхc86 R$zX/ "! !ࢆzMa,!!5zc`>Y6gM(Wa}qSHmG's)G 0 ßZF'tJ >rXxx1N*|n󾫠~ |pkxHidq[ovZrs[;P #~!Cw}zHᑏIG9g%i^*=Hl͗[}zzYuGC>Gl!t= )E}Q >aa~b + =p~h@>Uk|=ٮF c=|pN3tbXv&EP+6; 0_"C X#=<(D`f`_ 7[rvGWOr<J*mz<}HA)Ol #<52>e}.JWx8K{fUdގ]d}d4Rml XbX-Hܸ.Nfe89 k]iwԾ'Ca` ;/0HVaU͹ 2#{@UeT:(S2S<~?sv# i4ՐS518Q XD)! _::LѮAQ@FXw{:[.9 KOQCXD˰dXB}<;#Xry39@( ~X.T }Byc&s?z1{.Ĉz7} *X_1K=׊:$iBqGi!nj#/,Kh `,*m 51k􈗍*︽r4# ' beZbnr/Χ2# ֕SG?0Ń3x;WٮF)X)mt͖D,GnvZF~ J|y0 ^P1XtO?x+rl O9/uxG q;_y?8:z&LmAHK H83ȃ 3@Anc:&vsI [HA\2 ibk7R("i'*kxC1 r0q LمA-Ya$I؂!.Q#VX ME'R HRr`IHD8*X,倝̓>S@~ȇ]@"X $ )mny=^7p;A #j^[z*P@Y AeIʇb:yWʎ{ɇr"4z'X\<E#B|Fjvx+q r =ϩz_x58~ix8K ǚ._0ֈ eTHr@Drtq./b@;[Qia0.MoKA:7HԊnx!HwsvelF4ȑa8Wpp8c<,]Ǥ#`˟Mȸf+9HOx*HՈҽSfQ\Xjc *MȹԊ{DdHv01z-t2f=Cp9ﻼL "A]JN2*6*tH鼱Q ^#JK9H!-rk9й>pUu>K4.pTBqRQwգtzW`8ujRмyНd, ͣ01~[*߼ϙI&惮~*CB- (z Xr7p?y~zfȆN \pEāАȏIoKz,PZ 3MP_c"Ʊx|%Q 9ȃ@>K'jYW{[QI4S9 Ewc4P~EZ|s,+ dXʥ?NhH͊;OSk\%g38z_؇˺!ЃAOT G@1ȃ*_74/qO`Vk,bH U hs0:@=j<%PV-s7Pljȑ1q(HxuRSH+DO 'a&CYXy p(xcPqԉ~Ҍ NhpBZ!R (-(6`7>`DQM}K-hąi@bxh(Pa*NH@dJE#-dOΛ` LkL+ՊZ]\ZUBXIqy3Z %\#cNQz֘DQ+W)9DhM*聧@>pX;Gi(kxM1O&WZemKG x]_# a07(|^g.hȉ4)XṖ ^fYb!Dp 1p`f[ Q6x@QNSZNÁ:АC, @~\`'ݯ y0Gk0CjÝܙ9#BNshֱ+Zfb>n6P^ MIa<%n:9񠩕bhlJMX2h}3EK?L@rTGV&27x#C/ /FGWI,>׭xުM&FaD"Wp5V!q_x ,mh!` QD揆nm#t>sn&R&kE s ʍf2*Ap (Υq;+x!0@T;:GDZ7Ǟ[7ȁ[AoQk/rq1ȅ-NCUj6#^N܅5Gd}16haT$\_ [ '`4mȆ7׺ꎷJ9Pc<_VbXF[w0ׇHL`@_Az0KhѺ q͈/xT3iM8̇N/<4ph@RG<) ӏ48G(`Qr xԄȤ ԅl:W,U=w$et^ǧSWw7ň/=RC7O{rrwd݅#uA/||NY>у։EeXk '?uGx24E%'p**W%$.S(W7I".!N{-:@\WMQ`;tJ1ħQ:'4QFˋ4i'"ڜ+b G)7!vC.}:֯c&K]o<~͸s.^4` J,Ǐ%==8u}IȓO,OP Ucq8WYuݥ{4Ut(1q?4V"2cԀ{?"e@ Ydam4TSJ 9vЁKtt?@R )V/@BsLܑ@sY'Oi?CK?Ece?&iRVJ&B!?<* < H>@&^daE 3OX>6np*W j%yWYAA 9 ӎhgxidm̞*3{?ZʉO: $g CQE31O?N7ymw '(d`c 1|)R: #hbѥQ &9)fm4ȓŎ39,s{lnyh npAT!H pP'8!Zhs{O$B~R N 84F8'L 0:ЧRGp؁jP2j(Bg8у{'>PDE H$d{УS fl)ŘPjV/㈂.=(sK 8 @!Oܐ -u83P`L+Їc IvhԘd(w|?h:5Юj@=A@^>?ʨ/M:Ģ`>8C HA9m,;Z@% eq!$6p?q |0:,8(> >A‡~PG>A@|~#xE2[vɸ*H6ˠH'*܃- 2FLϥGcE(z~C^JzbRgAZ&|!S3cw#Vu6X mfbK bp99-v3;. 7h%8) 4gDY 6K>k72yF9Y tx!6Ej<"%:6u{^NXG(йA]FJ Q9 Ft&\ʼn(apKs8;^غXdhC%Ѓ MiJA@ rk:A'>?p o;D h$p u2HG4ZA+basv;rX=NX:T't$L)v׍#"g0F/[`,.T%$21f"__}? e tP/{))eqyq \@Cxѐ~/B, |E!gݘI`-1HiNTc 3fBy?0\ڊ;?eC9)D 3)^HMb vܛ?ylG+!-/-X(GC5Pa  #8+A9#9`pmMܛTGBWD$(KB(DTA~E]L4 И!sIΡ =^Lr?(C B)< )ZKZY AܡaZ%J??Dbdbt(sDd!,B'l bt|*l$E?;Y>J9/:XWd|D==Tt܃"݀ptc<8[YTnB?#H— B\XHG(B6-@xF58ۺEf d#&JD:B#$;sP=FHX4B> H ؍X>dGZGm6}|&4$=  $$B(Bߎۊ}$I(o탏UJ3E[tTB7Q7B\ݰ刷9<7 ;rcpß^۴H& Ę@wVPAQۙ-ff#3/C6GҘLjdYbEDnG9BNv<$Jȿ9?",Z:x+H<*HB"H2?B+H1 1A0H>)<̃R/!:rMs_p o?փL [H W@ER mLbUUbHe|"=~OA155Jq HH"\t?l5͎pG)\qM G%3N>@ă<$bh}5ƉR8ҔI jBpT AB9R#ټB>=q> lvUob i>?3B+KnI xBAm~h|X\E'd^`&4%@*?=' 8BXNSu -R:^޼zDpv2D:B-CMh;)AR$A'$Tzir,(ői$8[ bB>O̩(Bon6_4׾jR>"C>`B%+%>A82C?B4-A,Ê>(119;928?< uD)EQ*Ò?C4`a3?$av(:cuPȩH R v -C5lHv_G mLԄ?| ;Ci"2VKLDBP3cW1):?BcD <^,G;^(aFXiԒ6=$Tpg =o*Z8xF6EvAޞ :%+(BT:!Fd>hV[H?(@Z]zs`!>h KNhb>.R#_?Cj< vHM+x,8L,4×a)9JJ 0L=QÎ _jĻ6WEsucp693j=x=!SC>#t]wMv29+"i}ha捔Nu9vF:?!bs;Ѓ2d8D'C!8B1޴C*PZ~WpZh~{h&'ܸ3?䁫 {H 84 уp͆7$2:ؖ {SzIgYۀ(:ЈAΧ?8!B(>g_Iw9B"xg_ugdb:@sC[B:E4`a"aC>P. ^u4z":Ù4),mſGɦu:12ЦbX|3;OJ+R+ɓ C'ž+9A mTTA<ٍΟ؛;4 (Ź8o2L38rfk>鴛t|19HfB'ЀtLn#Џn /:p=N_?$H!%Ϲ@4:,xׂ<82+lB>l/;C,´|s :s)L\ /~* 4xaB 6tbD)wcF1l׮^s7AtRǐ9ƯǏY|KyxQуH'sHD2џ`ׯ^R,5ضu. >BbBlW.˂@."{kゃD yN/36458FRMۛ{v۹wϛox OVruٷיzfMi?;;uܑǟb眲!rt⧊bxfxb-x a hN<!o}GE拇VXHq@gzqG& J St>)>gckD''|8R<1HBy9gGG죓d' eOΊ3Q&~i SrHTSE 4PU Nݼ?]+|D$'yGie. . H$/Ҋ$H=EE(z/Ag0<ӭ k!R +zWN^'W'u[m rݓT}a!XhO?Y7zUR7![]zP KH<@##@UXSܡ&['~n6^~QĔsNRʞ˪gnaPiSv gXM)u''Od]wG"T_Mug^:zoer"-9 ڒНS?.tP''BPG\ÓO[Nw'ŵOwȤ _+P[H#W{Hb x@w3fp0|$KS #1d1 ?N"`)Hr@9,ț]-( c+X88 G+Bw6geag }$@ }`JSEga"}?RdvBB1jJ$:>))> ᒃI(Iْ❒0`DJW,i9A4>c>#8>Kci2 Lz|Xp+y 4&\)e6Gw@G+QPC%79r Bjp!hi/Р /B*VN|%7SYsH63>f)La^t"KLuX.܀oIAZh+qsF{\,  Mhb4|) },pMLrkR|x% PM52Mt #얨 t)HI\EL9 { ,ʐr_}H$Z7ߥo)A K 9[B(<gHXB w_O} EPlJUڑ0n'%֖p VQ㌩"f`cğ3L%nO`S=x `GكCvqG-BQ ,.uaG)pKpǩzdj簝e%"s =xBB=7T+@н/̀31Xx\DBƞ)1r~{"Üos,㌡ssA-8x7`߾!IGߑcbߗo}#_=(>}ia7hw4|lWPV$""E:҂(%]?h):f_vcdڏ1ABd .  h`` ` mA*A:a/.l !r'2L.Nr IaaF oA !o" ,̿ !,VLV *@4,J܁ =(xbtWF Im(zAa,\;ej^Oh`i@T:b& ,,c!#,Ѐ 6`$ĂN+lP(Ό6$&,W^ф|P?A!uqyQ(A &"ƒ<֠8A M  G->Ԥ4a&^!A">˔m'" 8!t Ԕ6bt 0PxӆȀ| N%CMa8i݊R2y~EQ1 1aavn bBP4CCx`xD&K<çQbn!6L+:/@ K%@L,B́!w,c4f#)?1/Xʀʀli ^ GAJya\e$U>cz ,t'aa.aa#ZTG "ha a&/Rr6gQx)f3- 4u."!(w>8&,rX;#Q>"31B $jFZ!`pʢff/zfptmh `f` l1fPس,O*50mPnP\h1AڴrEd/ȂXU8GuP)B"L'z` zjRk} u!L f,S=(HKTl*"rCRo޴a?%8^J/\vTW -p  %u*a! se\MV!gF!`h`A {{`{8pz@ pE72 SZw J``JJA<Cn>4tS2om>+$Ku%8 x>5ov, |adbF]Y0 sL[]),<` hZ!1GePE'}|/SO3W[NtF`y-$ EP;#0SϮ6\)5ߔ% AJhހ,an#AAp Ѐ Р p˨ ( `VPQ@  @ 1vv$wvn+?!@NW@!:0L!ɥbh 5pi($smFtB8t aSi\a#~@`U}#NQ/}J;e))  x@Q;f!Q'VnAd!*t)t+!V. X ހLi 8 ʢ`ؒefC9I`bD ǕbɄ! a ' `!&p 6` ZN@V!!ι!dnSJBUX833 HM$Iڬ#LOQo NZA}c/8 Fc'\~,0MMȁH IjaH HG0iuVAazS{u@``aѡ7f88a6*]@#P)Jax*<BL:˦,LAA>eaA[Kt?RvSH_ۮ[fN1⡁^JlN, a  %:b+Zxx tPe]d,AsΠ Πtoi2PS V L3UWXRC9.DA#ΡHd!!]8THtX! ``xa!LXt¹ hbӲtvK3Ng1-734́qMjV@!+/;(^#A >/hcHBa$jSRlibi8U۪A{;IʂK/h3']3UtJrT1ؓlDp(!6^u5A>xV'] BP.z5xw]3nrNj,+8N<(y@lsG]ʁAi~rz T4D3| =I|:JR'^.C>(U-| z` |ū/(u)+1A_"A 9fKH-'-Ԥz1 .m[j 3DIS\Qܑ##3 Ho4Eț`3^tn^=iԝG:uSG5^-Ck<]۳(ѣ8Kݲ5(p`UX5׊ȍ5[X$7o&{pU =z K"IhpAŋHx~$ذ/G/й1K玡ebv?˙S^ͺװcW9~(Qڤ1?scG޽J9\y"4ÇMAFZ?{>]G^۠uL ?<'ztrՠjp)Aɖ} YҐ]Uj/\޺&&0 #)=o29p98rN"D]H)# {C:QA I+tRG7!EŎ=;#C*8' =0cmfd(e ">< TxИ(Da 7ԂzH "r GoI=uIE63d(BǴKcĨI[0崃!`G99]G<Ÿ|cL;^?Rad32٦8 ܖGeDA ȃЀ zЃ v B` 0#v7o6pO[CX?aCضT! H@p\ 9$Fosqm J7gx#H>Qx, Œr!|QUgP-@LD05wCK 2(d ?3̬+D>#\4ʍ<`IK.$ztG1Sp[>FN?D' fA lyQG?α hޏN}@@bllTbL;A ABWQ_59G>1y*k˯T"5ʏL! Ą>UL$aO,EΥ.-1TVt0dU LF"TbX2[rm EkfRvbYA:ɠ>N0H)AZpЇ*<,^`kt:1uYEo푏Q"-~đ5(qt89Q Cʐ4Ou*cѐE{ķ&"iI2S!Bfꁤ#1d/BLa :e] 4ԁyؒGM#Ak=D:&؈Y\VpPjv;U&u "  &b Hò)@Cb կO%eaŠŹR`E _7V>8`Y\:zL9;`yCyLՏ|@Y\>18%㐨pzny|9󸞶uCO^>v& &ȩ>p"d.b'a9zvpc7鳀BshG|ΧJ|מ!:0$WCZ^M2_>X`#B5r  a|v\&)ЇK? Ő!L(BAe @e-4"30 V !S.B^ =MGzG4/2S*7\S505$Nj4;K D6b&/)c ؍ޘb<@btP-tVGx`7VwW A ( Ơ1IrW {Sq0p x@P rcx^'}x}vw!4\P Bxqx؇v"ɑ 1}w*t; dIdYF>pqrPCi\p\s @mZG'e 3y OYI*uwPxW5rP@bc*v*݀ sb g(W n\9sT0">R >c&.rYa og@33X>kJ[ dX%LP 0P`h\+KV,HQ85]គ 9@xRjRy@-ڴoFT)t|`[r{Ub/|wY Z.:zDg0fkӠ P eϒ@DDPOO~7t)\S 6bRp /&Lb8009tj $ cpP ْFxRz!h}}= H S1|1Y Lc .rK`Jxתw:w!iPnv*uJagOvqvnnR!]%fS8F10 rPR30CmBwjGit 򉡘l @ cw,y"tCG P ̰ @oP  3 P ŀ {%_ocS`.7"vy H6L4}@oQJNۍ`pX~*K:p ttp FEcrHŠ/BGs|۷fx$YpN0 w3zz[HtTZAe&Ը&@&)1 a>p F+cUq,i.Z" NP5@0 P0{Pc_Us  ^6t_v*Yjl'DZe U#D/0D9@`ۢKOۿ t o0 `$DgV1VŌ{qi%DcXeP oUWН` OD` Wq O9a/軀Uይ\P SPep9Ę.y`QFiiYr&8 ˀ ;S c t {Y{ 0=P @'aW>k/@ Cc*ŠP3  s0,9HP`z꿦qeu@)P }5A l0ǞDW| OWR94cV+,ɬx` :i30Nr4p Brμ >1e3VpS V P S-0iU1Pe@ p%!L@`Q0^^,L"8 @ 0 > ($`$a$ "Hq@jB= S$\5k p A`K Ij &A>U4% [LĹKRTKAq\Ұ$'qCCd@@PI##N~zp%ӆPwA>00!g| V ϟ} 1E`Y0 pHtp 0 #l 8p p +p)ۤ ÿ \鰒vu53B=N6 X1TP {po0hep K b C%C3,͌?% Ɯ#@V 7'!L@C1PyF3 Qp݀\'02}FB 3,m0 0 ɠ ɰV`` ` ġ Gk %BqX΁7-| v15r#d{Eߐqf>Sli&^eP  k Ǖð  PV饼nQe ~M&ϴ%}`?4LP %4lk9P v- ˛ YqpV栐\h Yp _-1{vJV'“ mYL1\ptn +)*πK~KG(2"q {Gz v0$IGP [pKkHdk#GρR/0H I)պ EFNhG( Lh}Q/DbAAN70 !@7˰ GJ0$FR t x`|p X ` [pP o% Ϭ P}۪p4g?cri3& ~ΚHT2$*eV`p<^Y~>]>&oP 'R S {2Rn/Ӫ$^'@@r4s @yM3@SM7%J(eJI$=ok̰ =6-X</i}:@Z,rZI%L(e¤&buQݻ7\uhWP^|֧G1j>b *K=^kzΑS$<̥MFZj֭]lڵmӦ ם;v svG9oe1ӬmݔgS\lq̐6*%p;{ߣ<7]…WWw[~/g/K8yq  j06"l.T"2,A!$ȣ@, @Nq+ZiuQ 8a~i: fJpxz @Hq d!R _F1c(EYxJ.:c?"mx,Az<"acXִL8ub6@`JRґߴ#7#HuA}!g&'@C#!{R#h@%H ?%N!6wGl!qe:xHC8H?.N tzӏsG?1 $ fp`u?‚>M5 x5,S.@F25x fc,J2iOAW,Hgf"`ERHH /uk _X}Yvv`M1WJ䏙jc]@z2,qh8afTk.bF-p #K>|#:aΫ))o,p=MZq+>,5?8!pZf7:= яZ< S_Aht(tk,J ٦59 'IBA Y]pnCMTUeb@e :Yz9O3ONPBXsThp& e#@ԎI$"?j: m@(6KӓQ Rtq= ҕ!i,G*X iCz?hFC3: /`Ga 76 we1jӊB4CfngKF~tp#>x+.av!eJ.s\a6KZgCm<'eT$xo4j\=0ao #]ED&”}fO)x"Ohs(E۳6PNFG?|}s>5D] m N1x4 Ca_$95B d 'A_@q$CN}&@ EC`!F|yW d@x8ü j]hFX~ã&l1(R vcY[0uЇppiʩyiht&t?3AX?&%8@S2R4 =@,DE [v`a(hΙXy+д9lo rA)ľ11D ihHD KciQ wyYB& r39 X is0331B8f :pZ<[7_(^dȆ䋎m(jpv [I 2h2tKH t0h艚śl`Ih2vi8" 큝 9A ܤʫܤeX0htP C NrR(I OQSXAJXSEe(iQ!~hm?ʲć@ (A$㺇t0sH {C ɄؤLXc ɔax:pMAxZhh 'S Pl[dPHOY ;!^c7=qoMXm"{h 5˃t(@'H4y/( K8IV6 &w)g6R3|H)X/$T8|+:(=r@Q XD`!LD1s@oP=ACcR"rpb,oQ]:85iqf -969]/?F Ѿ`hh2^TӀG8aЅKPP@ ir8AHHWlA[UHc[Є8Y/؀!xS0I)lCqx5XFX: >自;@Dp3p@K2@hK9V"h F8^:e4B̆& TjS"9LTהSD}ҋrDoR0v%:0o譙j5-%7Tp:+ VSR"?p)W8?-+(0;%uMэ1w;=6XpϲԟRNhXPZ`Qq#†OPdWBW0NUNI@8UEI@EXj0Nxh==t@)0=G=p(b@d Eس@'.<@>ȃ@(+8M50Gڢ:SI(xj oI#sZN~ WP{hCjKy@M]LG  a?ܸt8Q 1uU Z`6^Mљ^ M \Y]h(XDu0b8YYPZ-,EC=3l)G h゘y y%{Ł`j؃Bqx {ȸҨ ؁xd1xN(req("ibԽ5 芴 =H~HP.Y Rr7S\r l.vY r%R2"#W/2X$%mNa]z] A ?!|]{@%4- ;㉕N7:Ch_! * bTy>^zH?X`# v@Ȏz - NN7>x^ȠeZh`v _ʈ o 9% ic dWv} H$J4+&C!M{y%͘4RXn/*M{oMbc(RhY: <@zY юbI0RV=(yAo3؇zShyÁl0,8S t >xs4" >p,Y 6 {sȇu뤄AxYBy]:Cg4kB:h`xXt%F 8K) 3HGoH٦iF>(_J95N`LbXj(AQoDѦCE yPi@ VX3V)ڹrJITE~tOw7gC9(T1 $2؜ip}wmøБjrwH63C$L@ U($Qwrh F1H 뾎!u䱁͙Dq85]=_8|Kj2?1O 8j13q~m?~+qU 2viAIZه> w>Gk`-shˈ8#8HsTh[7M}5P8-'R$Sh!w!8Kt퓔(|dD4h9Hg2gI&NigϿ_-ZT(ҤJ҄5Sv,(ә )T%j_:Nݢi/Z5ݹ'\1Ggí/+rVt.1CkTaG.V"Iq-5hI\Eң5iٚB{ /Yw7‡d IS5Qԉ Y3e!Sp?TCvE*4W<Ђ /h$6hs~\Yx!\ S sL54P%!N!]X;SPbeO9RtE@1=?a҉)SJ+{(O#N=2?lц43ώd(:pB=xSXD#O>eV<Đ9#Zd-WWp9):*ٚ9"T&ʪ %P>s9#(O?"lGVhrODC6 ! CQy/O.| /0$䀄'R:"q0xe^H_jxSk,6z᝿q:4RABl=<'D#I,Գo%h''y *C>48u 08q R"cgQ#(:|-nqMb:T{,*QȸDd_!~% E #_R]|#֪V1X?H) ta&F7G.>PRЂbP* D G7,blJ&?ѼJy&GAA p!AzHy‰~lΪSDf7 dXu"߀X%0}R16o!a 8>!-lPi{h k(%DK2~j+hƸ20[xC\``m`c29P8#ͥDB38Hت:y.uVxKi8AnL!R 9Kx" h D~fMV69T{v>0R 8xRW(C``|. G8D2E, 'Zkm,>!AY#jބë6 pf;# ° A`&d" Haޚ 2Hݴgx Hp!h胜s5#3'EiLԣD,ISz `81ZL@hriE=< :(ΡH(aI!YOw H⏀TTa]SŴ~7TM(@ W0㔴! wT!X 6 9ґLn L5Toؙ:gdA}@@́gr }D{*ct18҂"葄xPW6?4ņp#ՁEa:G ::ՊچE>C$WLc,1V74[q0S"v .oD$Ѧa3QGnQ@B7&}V9ļ tw3p<ȁG$Doix` .1Ydnݓp{(! ƩCW8n?:$++*R@? DjVM6M·!1NcA{{XHiWaLQ&M"DB89| M>TF1(9LǸDyS4??]"(H5\T%AQP ͵AІD$J"MX//B\CC? #XGMs -ԐT_? u".Խ*`Fy?  PLFIM@M[$ â@"#9F% !A?pE᷐"Cb̟gƦK}<{4pF:*؊- 3_n,:s"teujunB% R'@l5 Wh!`cO&zҜ[ʹBb?dC,H>O>Hʼn-)HcME#pE6\B\ZyC=d"?,h(n`?(樎ٍ% T<'CC(6h=)CB"'Ї9> s@QR@&@'<Of9&C }&TGm,`vZR%TB8C:q9p,",Q゘#( ;FF?0 gqޛiMzͪ$D2 6-dž-l20RBrLV?C)Vl,n3΃aj X»LCxNުY\(yY*֢*$NZX@Xg2(|B%D'1XCl@B}LrTƣ)?C5/3LCF"8H}툏?8HrVO&à 4@ ԁl֭ HYI$\Cf p?&PB$tnu&%(TLնI2T*$+16C2-@o%|B't#0?=@oD9ݐ?^*5 $i^e^<9!h/[ȡ+(4ķD(HJ -d9hK?t;` 9 *CN`5?An<` XHB?tJ :C \/N94 h ?\_ă))}r],veQJGQn%PB4*S6EDz `C-(,Bq[m8:t1p/'AJz+ɒ P%C*eD #B"BV2[ՃT*TFT(8T@GT+JMe!L@ƈ?4B2_<+Pb CxT%fRG{'jhh>_ 0Z!Lݴ4 4gEk9Ct).R-R'u,B+z/RbB&T*`VB%.wn&3;90$#F%TA+M+@1D&C7cL4&(AR Cc]F,Wp>?A5 @ hX%$0)=&h?41G:*|B2q2D'T'P,|' qʣaf>UC>)OqRʂBgiÛWAնM8XAT؂Gh\YAC6D3T:?>R%Ø8h ?'9M&Ce  @?TED]XF > 9!#́+^i`N)K̈́H,zBx.aR%}[*@JDb.ER̳D-P, Y,(o&1Ȃ)(pL5-=C:b?M$Z/EABQQ1?P0P)ZP`Ӛ_nm $3t6DM&4BLEȖ7לML<$t.-+<:߉=;Tn˗4A \ jr aKa(6W_2!_ 7%DB2BL•NI?(;o)b*[ù6z[0/j-(9 A"Pz~>Cn4MLb¶P=@[!GL֔ݴaMgqo1LMkh͡k?) +iLtTBA"t>8݃{!?p@|eƻB{U d?@@T1H2Kt\|DkP. ŊG6 AYFCwp{=G&mGv߯1jm&pBN9W$ju|m"=b65!*Y`W02 ?B*)[Y}0~>?,>?)uDsd31ZAxQ$6.nG*PWl $AHD(D}S$b$Yt%^t%̂>l Ž9(l9@`”I`AM)aJhP1׎bEg^kUbI&'QI'}ҥ.cM,޼ݾx-WOFg&HTiS:k:7>|Q)L_jiQ`"Nm[oƕ;n]w ՟|C3#Jz2,W,?ѣgND}㷙s}1SN^|yQukׯ[ smUqy_HhA(Зh K1h䨕/OwS3o={%[vtJPq}JJ9wUmۍXel$Jat 4:7|- T$DEGt l*ky)ƑsǪ 1̍@Rr%-Q%NPoNX\t*3LS5lKVYJTdLERRJ(atb2"T#{ `k|zԩP, #H,9#90Β/Rxto~q'&bJЈj"6ބMs$yd43Eh(9Yg;a%)JG-6dhJلaj&2͈"u~)WapH`0'soZr~mAYH0z"O<4Y΂hqO؟Y&|(§a^z.9KS#/b>@ Sр@≰FDSb)xCJV[6#co|D5I .#s橇Ь6ddS"Idв&mId/9'z2Mp}e}k yAFJy4Jp;يt6d9I_/'EdFd@DM*[YY_%UƳ Q[і?v%$u`P bPAiNʓBp.HQZ.@/! qX0=azXLBH TxF)a\7ƃ 0i=b@X "G8wV(<.G:5.r0y(Bك* u{ .0X%?!lLFbp,\B$E>⑰v$,+B6QĕZ&p=t?P9 4]6rt4HF$ W`#-U`ؼ-G# 2`4ZQ}p%J`BC+ Zxh>~ +gp<4+޿H $ph@'V89 ~hER 4b!vDiG701:R,-9#*ny=n?/ϥc#4irLza }w9$T2]()؇*B2L%慘I16zLnX f%TqMlv1>!Bb2`q}T`C#8:\ XC)=T5ahL \@x@pKH @p H(kVpsCsI(cI %i稠k:_58C?EԎCt@06tL=Q k=`JoF_!;+Cv!V+MXaG*A;5ę P磢J[!PaUUkbAGA:(6DH#H %GAV=pDڱl#$z06h:,w"$Yh5G'4L9^'@Ai^>&;V,Eư=\t( A| C98 "1H%`(,GT^ssFe 74 A#A:|17yN"xЁjb'IӪ@LT~*B"Vv61Y,c K?lrtS Da{C'P>qSܰ>!(6Spy$ڑ# >M˴n!DEe0$E$1',XB2Rp '&E[ A##F}hl5vh(oȆr`gZV\c* M=B#6.~J˴BFk,)(A4zs◚`!!ԃ@[ ¡`&&"Aaa)b$!ahx1;" V`R`5I5f(.=!k=LA,o!TPa"c0d$3:Cw"KL (2jb !^c.xB"BeFiJIꄉ40H6V 25`UIEhAU*i̡6l!@d E+e3JebFINa YTLo)gL i3j |2 8rH^5Wk>6dB0AYd A>A߸AKDh`ZA KA$_6x=. EGsnxBX^Am"@(!)<˦Bc2ZTRXpzM'p3ʡK8ʠfj<p6aɪb3A!(+%hUԔAdQ2t_N2|E6b#"peoWd=@eA6+&/l}YvO#K4yb4aw], maY -ZR,mo`RXlqu-ȁ-Bxxu}YC:j%Q+? {5hXAv2ݸid~'3 -a V3]R  pѕ6y"B\yұ DM];4zԈѝtKҢ(UUdS1Ν<{ 4СD=z=zڡg?SͳO2W{L"UVU|?"ڽw(Xܙ'J6Y ˒-?~S,OM,Y2zM)UN$S#zyTQ3ж]_?K*\a),eӛU#?p3'P@h, G@U  Br5V =k Eew k,2`cL2`>꘲XEb&b&?G)CG6葊:c:m>8$=|Yc|tTX:}?p3e<9:y< :c"S%4 3SQtv#:9|= D=HаU4ģDՃZ8r>+A~Y?񜳋Dd>k`?3 C.ZB%Nt楖= .rN<;٣H ?Ք{SK6S9UΘN;@ʓO(ŜO?R 9 QmE iރQmՔqE#EK`x6$s 4P 6B9$C $*w?oTRFBo dEK 8"IFZ= Cp@`>'aa,X BK(uM+P:,9:p :<s;3" xi9x8AO|?L 2:Vc`Dz/{?8ĭ`*TȈȇ6x*'608"f gA h@`z4 p=`e 6.(# 1DYN6̨L|#Fxbm̬y(9dcGH;d("E["ωN)Ϡ O4d:ݓ=24ì /q\HAΚYPC!@i-:Km _2#TZě(9hTH@\XEG^ GCȉF\s䃨I ը)( !BXhW3͏aGu9q쀑9a)Ќz3 sh?IJlc e&Z/Rc XbiW!yt=X ѺOS"fqs(&EM [|BꀥP-|"K [ek U 7)]GI1 {87(g,G7XvI'Ɛ,tD<@sf7̾<.`ap8fI9Bַ1@F6a;bd5"1 * 40وOZ׿A=B}%2I8c0Њw"C)et4'Tzx*tC$hN |/xsng"wVu?qz#$r}{D?AX` 7vqXccM6怄yVHd_8M⧥gA#Lذ[>fD({e-{3GiIQj؆/A{=]$)Q{b't0(V?azd/D&X+Q#m8mp %.#@ 0DhyaD&ƀe Nv2` p uq& x3`L0 F0sy9=\5|PUN&^BqR`t'rCcaP&Cdwp+#IX@ V WuD @*RXk[bV$T~AAvYH 4/ V./PQy7p| 8C4b6U |`?7<u wP`@ F|hnhHQq c >~p k@P 1Q Q\g`P_@7m}BQH+@W6D:pu P2%% IkxX U{ " k'WO SD@D_H0D<)IPO7@7d{|W(~ w/ fs 0yz8zP}Y9,•]_ \RLP 0PP=_w4`PYV5 H6qLg1p6S3TPt:]"rpYC %uY #S1pebY L,R5$u "p`9y6PxbyO0 FHf=\er: NtWEL+gG2+18tآ1Ii`\ygڂQ0r݀%_'I"2! s\fF}R 1 2Ry\@OaF6duE3@p#x#V׋,5ZUHʡJiYXWP*Uhv o0LK١ aCazHc vt4ctt1@2+F  g Sn_ʞAOP0D+ g{ MAے\'aH'ð"8f*s;' dq0P cv<ɓr<$& LU +J#*we-q:n" 0T-ځr':Z#*"*dFP2PLc{p Uz{@` # LEfs3;"1PLA9p '4u@~,Gfy>efb IųB:VAPP#d;O W?ϲ&jepucNOW@tmŔ#T ݊#$dօO0 opW74E[\S YƢ'gh'ek踥@ N6zX($GP) _4E9S" `:fL .`%Š~Nj R6R 0Y7+e#{pe"qQle5l@bndm% *$w+@(X9O[(g s`1HFKUV ,Tin*B&" `S  q h#\Q,ſ#ѓPY\Ǩȟnm`D~wI- }@>@os90n `P ~+ 2+U\QFA:eսWZ @꩝pk`,ŧ;š,;wI; iy)x ;z9Q0A @yV p @r <qZe  $! _%P &ɼtmGO|бCYXrM8SN NSf’Y":)Z cGIhtRJ+OkDGd,+2d::$҅FUXc92jBIWW`/6A60aXfu9qԏ$HKm- őQHh5\tkՏ(HfaFu9t_v^F^VxaO7%b7M+b! ,vHm*PnÇ#:W083jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXz󖵫ׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nx$-J سkνOˣ_˟O~ILhO 6F(Vhfv ($h(,0(4h8<@)D8\5$9\m48=VT6 98UiJ$%OSNyC&}IPCc HIOoW[)PCܘɧAg1e tL3"0l̤NѢDC6 *MSҨ4*Jt3*Pj+BPJ  /k7`/Ds =={ 0D@4(s0SM' $<8bN6 8 &AHS2oD6\C{Ա3,LiN:頃e1qO#LO#3*S93B#"䀓oz39IoL989"Mb:pAaC#HM<ÔRM43?ͼQK:F82_ESAyDU`8D 1=d4 C"N>k#$O?h.G#N40?׮;8Ì3>;3tq?cN-}Q8DF)h~O3?P4hwmtt! uxyGyFvC"qՕG?<4eh?J!C{<{"!AWuP}FE|I"_"8cv:ԱxC<4ۡHӨtP$ȁx0;a{d\cFБ4ZCsyH c+03ΛG"[50cXd;HEBU Rpr> #M$0!H@2@V2#!xC +_J*!zxHӈd-G 8Dp@UӪ3-񿢞ĥ'@Xh@ځZG=rGxR!m@e{ID3PG`}㙢8 U =q:TMHB1A]s|!=>`5賠|U`ey!ŴJ8=mТh8N W\+ΟJiΕ)89㔬5;0KI8dE?FVq+@$ˎxL7mk'>;ؘߒ!;$Lcs KIԎFlZ0;. (#xlcH;w<+Gُz4~n}% v7^ Hlzi=Oշ}ص O@%H5{z>/ds? }?:= ߬Fל2PBomkʀ* ssr~6g_Gi:S#k?0$@P'v=g x S^Zss.HnWf Ð P sYh}5?kdu {@0f1{ w7P!xU@V& =`w&h5us RM`~yT t0c sӐSHU9rʦOTt= X[vH:L >ܗFq#Phw6P4 _` %:+;x;Ad{pk`DSXo$`]8P7@|=pHXWf:P #p[{E)DH}aw P@n|0L<T0 `oGf}DV0BFacY8 {Ptp ІU~oo*pD(d+@>Ֆ x8UwG[9@Pv"XP`gh()H; % A@pRep=op;?@ p#lTH4P61@J17Pf:sf顼AEX7CSJ9c  cXdɓ| Pc9;J;tAHJ)O4h0 pc':f=XL]=SUuUYi `# H:@/sEU wp{O{nGHV^kœ܀/OTO40SDU$pƧxJO. P 7<K/`8JDhTD*gy\HP4\H41@C6d/pP {7: o@ c=pW@;" dsQ0ɮ3P1D+pXZ>@kG:_RW1)?HO+8[sQ\J _ Pп>͘ hp zy` H E9綟}_0:h48#n4kO@@iL`X:y`odec@ 5_{>xx e!0XH# a$+' 5hpw}wfoܖ)"'eIh\KK__yby`u >f;YNyd s0[sp hCh~.E tPF?ЌU0gdnQ4l h*PX;g` sh}`Ŗ@g?ఢR aޅ@"IEa*PBGVdO +нmo6,= Ll OY gHts`h*(͐Y9 Lh6y0LDcZZ i[EN >Ve8DP~~ O4Dw1͗R\ؑ3=k8hPH_p8KpLiu@~'!|`0Y|`yF|tcOj$V p~"Y S0(d>@K"k`gDŜ!ĪN #qe.|PwܖPUH@V=5lӾ {,uɫ[ |UD3 ^ zC6p$;;vڡHĮD$hDijdemPx*9P'fntG^pENlo7:@OeJuYwYiА_Kq\Dk/ QKߥ۵]QPDZ,(=.Ց̧)I DElFs.zҰRt' 5Њn :9Zk FlF W9p((w$/E|eW` PGf{ K5m0 h9z1?yp0yHTz~S>dVPSAЖ5 hNtG; x %HsJҠ ׸$ D: @wdRPk Ӟ[  iXV$ =a#R^ #^I" f9hCsYc $Pɳc§kz*GҠ0l)!ӶPOl=` "` S;}Нk+ Pg&ۥ>C%?ȓRk֯r[ P *6X9>*%Ӥk8a[D@5@u" oS?7 ]iݿfk.d47vȱa^vܼy҃D' =~ 2eرCׯ߽~XI“T1Qp 3$$߿tN|uI?뗱r*=wCvY>yH\u[Q^{RX1m؎p^;dQ@sAB$$T 7KhtA4U[lڵmƝ[7z5"qZ4rZX ˝?6Cn]|V'<'9t=W9y/M)$xfIg4/pP'A"@Kq8i嘡It)F_ʽ`fȽ"\xllg7%JI'kbS\L6)㮑' <ƴK,a KCLKȃ$ hgI=O?6g"p /'0'1I%j ‘BZZ/ǜ/noÏhXdIdAǽ$ͽ9GdOH "##3bx]6w00tY#HQ~ 8[Nޥ =BSb¶&c6w3+P-u!v恏Z|qY RЃ>HT@%}-Q{_0aGVF##i6C,c o"NP0/vc(F0f f~Xd9D,ȡۂ61QjQ=HQC$% rn~`X%Xqr؛u 5] I9 a b9mz]ZfC6"hP [h5&FX!z@ |zZْ*۸g8(I9;'Q1s}C@*hi1>a@Zk=R.AT\A rpS1~ȇjbRb |A ,ªF5@qe'%r78G0d J0b`&@a piBxC4}Gfdu V &J)S-' G 08Z5P+%qy3s׭ʖtrFmzus k'\Qk٬3금Le ə ={9z%`u =ȁ7S0` gJQ ԣ:R R8q5јA}#"A Jhϔs$NŻ춼UJ>Hq`8Т)B#Q)"d FR)Q4@d ea?qP89ȰGX5J2rC0{b<@}g|{րeO r8tttsgs,02NA Kbp+Q%rvHԡ BG>(5'.k3x*d3%:щM睨Da˼@uo5b jPNEH*/ _GS$7O g@Ihah(-HAS"λ=Chv%ۥPkoP9=n8`5;>G5J fc {Dԃ?A:b(PI,HyD& M_ :!rZv ZK *8n6OsuQ0 iPQ 0@!%q{O !{zsx {`i R0\_ DBѩyiABz3) #a Xh(fh0(=[Ty@2 eP ac&AI|0qO(GxN5xS 'r;aZa_`:X)_:`F O]h(YLV?VEuspQ. ͙kȅ5HbD)xk, #tB#\ 겋$Aɇa8 #c*e[G z*DFyDA8~6y_["*R_BsD {4H ;pu*8H$&9  ~PtK1(:(j`YkT@vH䋄#Vrٞъ5f:Bt1H GsL+Sz<\T0@Pˇl 8zx43ÚS7=(f 4bk Hts8:(cexYxM2eu)1 ,>DYЃN?Ȅ?A|@(ȋ8K@65Nk(rPA6K~PEVUT&eSskCbx0Ud'zP8uhMM&ҹP܃17hN~h7ͪsx.}lֹ8ć#OC)06{:(c,bxMyq\x^K1y(3 ?Ӄd%|Uƈ-#pP~1C@~RxW)sx0v]YxMz]@ ˁ'G`6TюH*̉l|,IFڴM=AQ8Y[ vn:ZPZPIq`K&":ϛ_tSTdqZ:ycHǼ#xe$C6pTExKXxKMTXYKzq R1;bC^{!`H ,i `@l1h(q7eQX)P  . PZɁx:/R%$EZ\ hđ+F(-q(7Ҽt$8 DȂ|hj%˅#[HR`٥F7 /Mr )T~:p.Vh<`~hT8Fjyxa9! ":|x}HLPHYUTK[HP3VԄM(-eXQ@pd=bxR`eP7KRu IN؃g@:@_;܊qqlHim77"ȃ0 I^HЧ^-j÷>׈l,p#G#}®sx@<@|*X("/Ji 'ZXMq`5: IG?,u1Eb =ؽʘQv6+xv5xm8F( ~%$ѬtJs8}YO`dXiYiYM[>E0]p`Vhe]pT؅X0T0g*K\0(/h03>hq(BH<?<DSeVkXF[BEM+ؙ`6la&CH<'`l7p.X :(!Vlm_hFAW QUk-өf`؃h7(aL: ؒk(Mć. s69{FhWX^pf<8H[WS@͇ucdlc0eucJxi68O@IIVx~C{7X>XA:0V=sr0jߌ+J#q.x"w$9/< $(H* b )F˛5Zyĸ r*HT83$pK "mHyQHyZ^Iچ~8MSߦ~ `R> 觰5mHWPOJ[uȇPhI1}dZH˛jv*ٛ" Md d[`Ach|YF0|#hύVNyRF`ZjtҿNxjrHS~|{\/}**(ȁ%X,@ZI1ؾ^xAhh̯@8C/)qa3@@'/H6 |s0S|,h v 2D!Ĉ 3Q|ܹCPĐ"!K?Ntsd]:u%;Pߴ[ ZD碠TOZ GWo`~IBQ%?rkAy,;GB{̱[WѦL0iʔSJb /^6UƯecǮNF%fDEPZ%ՓVgӞl_,$]Xq/WMn:ڷ=w)E"4h#>}  S%h2``B +A#O2܄]*Ӑ=O$t2]rѵT2]m&ГFG*?L:ĉI[GqZ: v(8C3pR.Z%M"#(GI:*JO+/:[ G۫5:+ +@Sj*zu6QVId^)5BTJU"݃#$(c>#\YWI'<%qLb4P̏Ŝ:Fϑي4Ϡ(">(Q=*tb{ܱ\+ " ?(ŃҮg~ܳܓ˥=5C L Tk!uq^IEQK=DDCD;k]C=+Z36e}MZe#hV7SOl'u aD]0L?];gW6=S:cO:#2ɢ%*b/uѵ %r</O6ЀC2P {GC%M|¿>=ûܾ=Uc\O>怃`6 RrF!Bӊ7AZyY"ʑ#cSQ D@@ RB_U 7@ f3 +ծBe? AY;$ 2`+xAT` (#>@J\|du;\:A =`|`KbA2i  GAQ`A,=cXQu4aw8`< 8B!̌+6X.{pi8_Z0 De5_ax<&23mb(+X`߲6eb.RC6FcC S8?]nmk,aC0H.^(6 #>qeY)$q|C9Lx8Q' h {1a | C?Q fxZ1^s&ic{0՚`=. @"Y,ᠿ!uoja?q&F8C [F׽"5 dA `1ě},d#{Fx~!k%$ZQ mQȳ2čzR0T44hqKӊ@8 A{ߛLE)yMx,AXO)*! b+$ד43Д ʊ;؂̳'AG6()9(5?&u LU oZS.D29RV8"?f(|"Q`>&1cG?h5t#Pmryfl1 N$ HPa8*S0p . _<#đ%8Np]D H4bx)qN[v,p+lx6Ė#!>q00}BAcYkңvFTҘ&*ݔ.ڧ˖%A^ߦx8*~Ċ(5%51?ؑ FdEc`">C< )"?ă^(I!8P=iL?4mT)HrTT'-hQ&''lϋ8D_1>)BM2$RPhNP|6?9B,CDI g(P.D- 際7 @} LٙC,@@0XHP+dJ?A('OP$bC(ޗO C,? JL4 ;B!4B9C-x\?F m0mAfe;fKژu݃?A+CD6p!ȍ X\QY 5`c ĝA;C[D,6XB<@xL [>:tۘÀH`Qir[1)"h5!_ |\7J#CUP-6B2TVFB2$C$ËB3tg%S9؃\d "4B?$6W&?TC(6C8:C?;4 2B =fB+t.AؽAĆ@QFxLɎkإ(G74]^8C/ >bǮf.AkBy!H^5 J3.,CD F핕:4BJx[s0Zp5A|Qpxm piA)MmdYhjЙ:(|·-D$@$t^%?,VUMYn?2! HPmYFM> +Ԕ=HID 1?5]׵]\iGTIA7=5[;^54C <$A }jg\vL*- vB'K)6еAn#xSZ[)Bȥnĵ^ I=+ lP Gnc{D5G2dt\ C1A0&,*,ϻz4.(4CC>CC40 Z*ΞH0>x *@9@{'/Z#$gY@x*܁/CСiwS)A |A|; 3DD%T3L.4Jc;GETD?iE_ ! .* `39mpUrOs?!W7HJ&%vde/j9wHWC (mnS0Du'H𘙃;\BpȬ?H; BAC~D;S#10KrCyS])œ1 fH:>;ɃX-@أT]y BHxfN*yM!# *k@I'QT$=/ag};Wo;w1ҫWݿG`n(K&Fَ?ig WCtdctI5NOرdyB mQPzF4r7gۑ,3GOE4a”9s5%iѠuͼ=3Xbŋ+Я0F~pd3YҖ ĨrLr$L[h$S|`埔qj2C3'FG1vFR@>" 7`1.xb%>z7FI7|'sDy%yzrgA&>ޘşņ6{! 4X!L0>[oҩh78T /v'R1*gمRCu?_!,ǕL>qcdӤ0.dLL;,.nsn>ygQba~8ٓd tz2q({#rmj|Lcs50 ^4uzA*!/,}理"y`1IQ0BrLsz\Myx$i%3`<a"EG |`!N؄,dd|H#h!YFЊey*eqC0!-h3!>LPDU-X8&B^^`wxzaOac'QZԡ(?6mںɬMONlYw84ܗ}HORJX=n#.G,=!_FnZS2y,2`i#|m =X"DNQBD*Ol+(vdCo*n^Qf Zlf6N'. a Aب 8a p:Vd$!aT LXM|a`Qh$0a !V.Vb./CƁaa$?g jg +Aʠ|PoL M W΅v!` @e nJx<^7xFIA6@@qIDAJ/>X.A!dJadPnY-q0]~(C 逇3CC` c Na R)^Ѫgȡ$~HgF>bT*2Rn-i6aQzP6ʩ2ډ#uT@QH |a68d!R!ƎƐ/DB3$whJLA&.j1at! ʘb/PJ ?G)V:DB0k|WIjJ ;Qz#C'IP䁎@ds*h%a#:Xvh4aE.ͯclK՜8A V04$̡ c5p AP`4e&3Ё:"ί>J`dD)`#*ALǟr\v TQW LGa"5j?e,fL$!H`!lŖ&Nr=yub5u>ӈc$Zi$L&اgW@+\\"rb`mBraR!D8f9EVuCv(րZB5S⣉p'x MX@ vEYiQ2Z<`JTxQcH3lȹ}.CJAOUHk!b(s`\f,BApE`K;СpA2:p}+fa Ha2ĺ*5;/x&$<dJԪ@΁TZKan$Q#uQĈ$DRLSva>SA+Ke!bؿv <ཅڵ[]=t%Jz ݹgDŽ$ 2peqmN2e҄8qbÛ61ll:+[-Hw;{F*+G̡3g#W0[9~yRkkl~AA}aҿ^͟?y#JPU(Jcd%J%[Go$Kȼ>C?QXvaR-Zh 蠓 c5ӡkRNIeV^9p9BabI&&t >gr9'vڵ>4bճeAtYwZdH1ȳ%UO3'9:_ܰ -w 34!Tw:UpÊ%O=OGRUA#cAm?m5 zFg>2B,]9t?+LG;q O=̶ {ؘtIQC9* sO# r 3Nvg&׆dyZk%-"$ɜe;Dl?,raX&ܨ-#CN5\.Uk34+yd;1 ?4m=-,)܃4e;R+\oO.S@r8 \Hc$Ta\L2$c 6QL;;I*SO;BѼ `G=:T6\So9JG9_Y Iֲn'3Y:sH-*2I4;cY"` tB d aKV0CBM,d:?K(C#Q*5Ix5V/8BoE1ce vd^|x"FW(M:Q AŜ+,vīS="2$IfRU0 G& ! L$3@vN&C _!+" `%.oxQAw3xP 8 ,Gꬥ k8F 2̐!l$L!HOYKP8DwF!2a> gD fgȩۇR|q 3xjz#9b-lv5>? X| 6D 8K 9Q.%ӎ5 ) =H 05n`o)>g|0i#L=@(8{{byvqt_'LP?Hj>c?p!2 l@T h#}`DGxRmH/=cPED%fq5R "c /=yG]R`D|5)@W̧:tN0 gxG? wpGUX<@6H . L%qmep UE'*8p`y|^}CSs "G~gA] R^P P p=#u1`o-0@ C=`p R@ |@Ue \b׃ wb hl˱9pqdh{G>AFw=w g %Oa)*D@ "dJo#P@Cw ᆪ +L 9 Y{OBA 0$x F[H I$%U:t@XuNvQ9i]n!Pq ? 0G|]~e| .P_8+ $>փ!Z"F@P2gdj#E0 }@,vFP{QE]=<@" Pw8[(5 }fa `0y  ˅\Dž\ y `@5'שZJ*ASq{7#IS>uH,/pF 6+ @{G Qk@@ QYsI%f|P rp3Ѣq^Xs 䀖>c 21@{PpK1  PJP՗`CW0 &ba T0i10803`|D V q3o9J&HB$X(*9`7F% a p ` Z<عxx8"'lA  r ` pg"m CQI#0y\k㓒3"@83u .Fw'Ep LP )hP'X;a, 7o P`pKUB) 0Âւ @GP ׃`` +;D`4`a*sY)2}S@9b R3oh 0zwhc 9 kj?&Cgb"ƪJ6di`@" `0b@  V  A0 V\7"Y724?\u.K(lA `/1@$@ r%+ th!/Q @WW1UiUA IֆA Q e0M.Rwb'5'H+ZKֹ^[ pɠ C PB$2 wg8lu@N艞 {PWcpP@ {+_f z\瑄?sh yo*9|N>PbCĺy`y;9R}P [AxڠVPj!"Rd+P DY!v!@ t0M``untCm<%\C ͠|a ` ̠f7 z a8/}:RZ8lA` +8q8C)[>ɋhI9q  Ơ mؠjvV O7BhCܦ\4/Pv0# pWp{-ocp p ` /"30?1g6,<TI9ʇ3jSPحU`"{}%%STs@ Qd @@+u IQ Q0o; hla85 7}Ds|*Al@m{ 5Yk ꁠq@22HI.e8&*l k ` Ś n9c @ 0 bW&յ(&A u^ X#A 3R1RQ R(9@P| pF_,Qg $)Sp=X @6#L]}%U & Fʀ`:0 X33ՠ"F%q8`Du IgR>0vͮ* ;8$30g;diCк25Y4\1? @Y&tdC>Q[N)j_i&a$@D KF>:K* Űi !#(R @tD&<hr#mYѥN;p|@=HD\d4$EE=`e{vu `佉.MS:^6[D0u0 eW( B  MBd-oUCu o H or 78)\ Fp I a>a`7aD_+0:hky IkLC ([\n_` _PPy0P S p=b*`GH=0㯭 غƠPfAu/nhQDYDE)pvWpl^նΨMl'>u\u,#`U n L^ml2[ ,1tp@UQ tª` @ @ S$藰= G\+c=T7=_nOQsh0 N``!` \:9x0 5q0=tܯO o hpy<@yd*(4> o ,@{ň&M0eʤQ#Ǎ( JF_;| *dْC0۵GOZ5r4 4(9BG |՜*B1ڵk? cl~]| {]㢜\8^ \C#|@/{S,*GXMn&;{ʾo^?*աkwV 'z3 gnc`]دʹOڙ4fAix#{yRʸmT#UŒ3:3Ҝg.'F16*E(YEʦs>cr @$p#TH, 9D?5:yԓ;Ŵ5icr$@'@ Н'uOiʺW^8yaHI3R0#x9JDz~PѶ";XN_|dz0q-+9﮷uspi&K*Kv_(B. y 8(=EVP"4]xPD 9\ g1"-c#HD,bxPZfCPr11̠t#ysїhxD ]P,HG@aNwy;8&2d%' K*N9W|te>u3L,Wj8#r0;d+X&=e=\cx"X+ 7e> @ZG?Dk89#pD>pe&K/n,k =rNa@)hCb%`)CRZ "`LMp17\?S9l:B@:KE* Ґ=#M.3Oz44ͩ 2' .vho3JA0a! Ī (q%uxՇ* +r)AyYvɜ5 pVyie$C`,n tOLD+'loa"^Sg6fbEdLWz(fc3|V}L?@cO#PxOAmSg+СW(:u͂>X[qEqT p3A?R@a Rу˜v/x+xU'գ&\p'bQaz=O#Q Xa c,+1ݷR T/\mTXAtx[t|iYbs,,Պz ` ˈO9M>衎?5KȨ®;YuI>o4Bsc`sK`kY l,`G#?l" Q!vsrtI |)2zڬ~uG3 e(CCъ-- *5@Bΐ@(p?=A@OW`s]J׀25fgTMJӂ1ہzC Y`|US줭xX=;i1t?DԟuoF;9xKpP}:1A B?{zYjspXr&YsLLީ㬘dG:Z~OpU/>qd XiN-xlG9g΃=FdhC- )B^9@44}'Ğ++?rq0+V`ԋ|3\(%# uOchp}[ϛe Ɇڸ=OB: = 㠕] Z3# K(=N<T3//NHMyȇYOS$ h<@bKt.:s|@=TH/08HXCLU3 Tf>2's(z1-͛睭O}[a,?YE|_*.2H:{|[]t`[\[i7x7!xj9uۋ>mtɇWp*!Y@SMݑ{c"yG@ŠR؃5(K nUS86+  ZU,R }ȇh"!"8OXB}yXBz튆f$s뙭H#-cNq̪fo6kR K ]X8a{:յ[$`m1)pH8a 'f4kbb,\ˎtH$3J09 rhQTFJ!|MjeIq)@*$8/7@quS-dNtefaS;#>rPFݖnb4 ipIC9ھ0Jz.YFz- +>\>gQ07Vӣi+ z}a*Gpޞ2*=rhJ&#9T][Jq>$% G-GuHEII|X@艖"ch)K P<#';S;p@`dp+FP{*E_s,r tXtYV0}rmu'േ3l*1@ '9pxr) XX8jkvc!7yΈx QuŦ Y(mxk|Y,3مq3FC4mJw/4mgye6{.N=iK&]u8S8S07HUY998h'! Ep8va_m^$C>Y3W{E]s0a ; BOHY%/`)fqbHyx2(@P0cr Aa+{Xu(|}z9lCBx4gk4$@`U9'Й(|_7sl*|ixYjW# 8-?{A(q"Ê/bN]y8Qc$I+0b߼O¬1&kdĉ1@,'yҝ}u.RL!_t- ?s e.ݽMo^n+!P _ۊu5zNsS7!kxΞ? A%ˍONz5_B7'sbltCqCf;!;W!W 3ϐ$ >{*I~g^U9?'TB!Lcq8qȘpԣN?XOB'U-pRJ/\d}:fO|\bO,g̚t4 ϊ.gБCPGn2641ȇ9n1ubj܄&HE09?ᰦ*G |'3+Prn @BHEC04 g8qPDA*2ˌ`l S~%aM3Rv !tWtqЇX52ja RDŽ Q1mJG1D\BЃ= CT {ȗ:[f!1= |ѳa$-ZĆnsQ: 0\H,7U|ZZ V9c:؋R4+k(x(Ƒv8rj0?T1Lh"B2 LtE>gtr`Ty:8tD f@jA<͜y$ "ĉ}11/`8,55NdPpFaoWP3x#' &:LM+xtJJ,%ZaxbʢI^1>ԶspV y2 sZk(`Z=yЁ LxKChxHC=P?\CRAR7Lg!` چA+U ##q^` ƎC-B %ߐ=&t’qa -S(E_^eGe)CKµJ@ DAhFpA pfA_yH?Q\9|Y9CjYE&XEZ?2,]J`T?˴pK?ų9D#$iEMam#lB9lT]9+C_5{ẇ|}3CEGCQ $1TXP i~[8#!2(#"]-̳'C ւ41m$ݵ>Cp0",=hIEUZUJ >TGH R.YUYXYYA 0,l%H&P'B%_ ^V93U:J\Vdr>.=e;,e[J&e^c(|L} H?eL0& -!(YKB @X%́PU`d"C4cV>? C.lA@@L!̹Z61dB'hh2Dzz2U'dX\.eYxC+pB!gTfcVeM)` 7gN&~gE'cbvfGRgR(7!AKV<E芦Y:#`'$(B2lF1܂,-$,_RBU" óC(F c<:0ylRA>_)Cz,!$8QqU9=(N!/)4N'ZDZlfiZ5nnep\t*rՃ5j^;!#DX,r]m4!6DB%$6`* B2+`C0`(`+B&"CW=0F(3)3m ńH. d K\ || ?Ҍy2@VU|K}D`[tԲF+IճrP05AE%XZxBKX]y/0BTZΞfծFV4'H#1cd0l!LDmK-B2-]C&*)2)#+AIP [x/D /i_-hM}Y,ʂe]9C85:?@+bI@ ԁFܱp0ZP]LV0P\S#T'A)$V=!bmb 'p,|-#AcSFC]i%|BD}BaR'Q&o$|Ya0:ٓdKĭ[dE=de@QpH$F:5S,@4N2#.YWՌULhzt*] Pá-^Ec]+LZ(FpY@R[,p!"hUچYj(f,XS~qUdjWq97.B'hB%DTaBEI]Da‘M)E&CZ"b~NLA2i< I*XR(%#f 9 pA 5'e\%^jP-M@C>(4aF>pBl({^h4{Zz\?&$)U?C=î2Fq.bE= Z2G[ć>[s/\A?JxLBM&k0Fك*1D]&,Y1$A)]mx)S3,Y7P5x=T匞)I Q$l KtOp|@ qE \92oXVA6 ^!T EU@5-lƫ@IDC9îPP-՞ [)\7C=QmI&(Y28 [(rCXDG–)Ư iQ?P6NMupNrVRFVpp)HJKH̺uOS͵=V4BAZvE60d4T6v\˷k@ qJ c 7%4?6bWqj<=|#eWvE:l@H$u pIL5 uiVaEL 0{wۣ[I.?aķ؃ޜH82Cz x F@%uja['PU "MU|m7p3LNB7#0o|I[IGf/*9 L4$(R3Ict3r9HL%4&e QPH@gF#&,t88S@$$!BxZ ;P>9K0#z{L-@$zI8R?H t @Lg,sVk`S4B#qX&2KC_{ЫF.<3T8gElCK 8Lik=?V臄fM:| T:C:?*; cC?T' TƢFhSn}G#,9bY 6CU&0E< T)Kח' C.yɳ|́ jQ!IܟcY:Åhڧ5C[~<* [Do?(Q:̃<KC;C'?> g3WmJ+,B3p9^1CAE '9z4] +7͛aEC@:9vdHwNԫsiTѣH3iִyg{T%G +^]qtJj y|BC$O@ AB\sh)O/^H)߼z$ֵ{/!$a2avtn**B Yppdɓ)W|M{g~6פwuj2X_7c.1ΞջQ7= iMաNE4mryE@E悧D#B)}̎n{S>fy2O!>@* LAnj갂n, "聈*΀$|n+?lҮz"#4"C+ 4/,y*X "8gA Nv01zd:J(L(QnM1G{YVa&rp#"Z2~X0*Ӝy|d>胓SL#Q5#tkMәǟyf_=v62( x Kf$| RA=[=AgBأPnbtXc:GP <|]nADzٶdȄd>q,RtFeH1FN(YdjJ:x`[ dxQ8>?Ji:0)Jqj?vjHRHaze;ehD)f̟)Vcը~c(b`( 0_!z&LP.Z$o֟iJ~9О}_[u@&Wşcp!L)ew>Ek|rh48:GdEF@?fbx8Gը? Ñ(dQ\0TĴxR P_]4@fxx E&5I XA!m~83pܣm#񵱍p?,w|Hr ȇ$! Ih>HMIwܣ73Xu8%zQ39 |,QҔn"%cGGI bG>tуE5JRё&H Sڑ)xF/rkry!G= ͌CE(Α>\0q>бAIL5>3P);"IcPD,}dԅ|gtqCСt% A#ȃV̛OhrʲƁ#8p@Ĝ/0B*16; IL b|GtZóaZ; zWQ|iKҕeghiH5L*sfCrx1 ^e7v#@4f8DmgA:$dF%9D)@05] GTd %v]`|=NZ4CP@"c@G?%] ES?< Jr49 D1X|ɬO"2W cJ3tFl8GHי|P1 <;1SPWERD-$00I/9A|38&Ќux~ ; ^q2HFkaHי` . a\-\Fy%#1y&42E#Y42#@9J1WU$i+~QrBH)htpʩ6b&7GKy NV(֠GuF84@c&ZlU%&ZQ'8a`n%^kvBvV ܀Br -Du r#2MDQ&$8nOQEWٯx1aJ&s#2x $< RU sl(Ɋao/ NB ^23#G">AdUZ4Z fiqaa&*©ZEtRp C.%d`%Loդ"Ba@-r/"PgC-F@l M$l\a>CfJDo㐱^ R_\ 2ss7ЋL.UOda:Tcjn!D@ 2g]7k4A!< 8u3A $H"t 4B"u{X5bv As`Wa5y$xsuL6K{-L$J'bkz6.P3fN @vf* V`-1^N—m'a>T6\x ݶ#2Q#Tv`!.VeQ,':A6c_GAԁ% 09 !o  _!- QjxZ0!:)!:ˬ n_ egj/)(j0ٶ7ajVto[MB "AqaoP>!a/OٯM/ I!hvG|gO{Qi\5#BFj3h^Uoh _@/` i&`h@b9n8mۗ;!azA<@&N1!Tn<)Aqo".AA& $_Wj!a*FAal8[=8Zah2tΌ4vo`<Na* u͓U."|11_֝C> %|}t~-͑AzsT<`_=7AdYa48kBZ pA 7&r6Do N!j/a:$(dư.a)xf(3BT(RpȀ(#2 $#ti` WHK{|UC5Xn]OkAC (Dԉ H \)>c 4₅E^Mn}aj仾ӁX`/a`i"ybaLjh@| 7B\ѨX0e(|O" T/ElT@NqıKT[ʯ٥fa3wBvUV2;-F FAdq Y esr<#m]~ e##X>5m9r T3w=w)\Ȱ=#JHŋ3jl0O5_D5"_͝yrQ!#F˘@CgŠCM:iӚ4eJ}u&L6 JϜt̗wos޴pg.,&!MI%H}A 4'9Dlcғ/b^N9s߲ۚrєO״C31 S :cs3;c,PB &u %I@ lDO[eUhcDx7SN!X]SMD5qFd|1$ӏ(#>n%tP?8c#ݨP9LeBG+&Vl:#T(BGؐJB3Q )`$PqJ?8;V^C#$ be+P?筸ZjqlCOKcN+,7;<1TCG##op)HhvXI_v|DH 1!HHASL!( `A!W42!ApQ?{4t"O%"'xb&*cRI'~IQ2:e@РuK)1,dzVoI9,9|QQ:Cc?Q?xR88+AsK=rcG|qC`a\u 9\B;maɯi'I'`N? 2J>̼04r,o@\{$!`prq##$b=@DDKc@5eOҠG=CDoH)1D:x!lb0! T6-LHF&Bh c`# QSltCsPq:1yX(Ӝ@UT;1}ă(:([:(?ʊTm,1qc4R9"q#Ѱ9&TF _Pi^`Ko?tAXƗ BåPE2uDbHF1}6d#ոJQN(.rtcN!+9fw< -8ơ>B8a`d|8m2j 6E'^ȜS}:Rru WWKQX"걒y ~4 :H >{KD1@b) X B8C-"1G-@)LS HQ߾ըBE;|npp|tfr̼F91e h i$YSnP*Sf':!cN pCʠG7ጥȇ?𡐱XEZUAz0ðK i ' 5VMGK tBI91~؄p* EzљE&>SpE͑C]C#!\OdX!&G)nG6CCd *@,X MżxCW`T`ۡ,7x`Z5ul]V;2@&gM|Zduu Y8 Wqg l`pdBAGG4JEsf6c:jVzC'1mkBלeXD%[U/eG6rF Pl< D'D&d7q!nͧ5T*[ "<@@ Vl0 U5('5pHOU0 Th׀!33,;.2sM  E+X4c&$ xYpH}4cc!!#2,9,y"pduzr0@ 66'|OxXb?U%4F8OT41 6.ч LFYiV5$P10)D1tLtcd )CQb)5K|0K\uEDc p p 0xG؊6+< `f:Bh؋A5@* fkA)x z0;/f!  7XQ*D2%`V6@e Xx QcXi$Dx+W S1RkJf ه:))* n0O/Q__Py=pCϖX)<<(aPm!YhJ$0Lpx(x\PpiJEk J2QP BȕB;'$5Y'J /ҰP!1JWiyWEjlEpV LS0Ld$$ٛiiɋ!9 w9)əiٗCܰ9rJ<@iМy0y0%/M}DuA 1x+I!G!i١ z' @a!3&)! (E~)9<)@' mB475$m :!* A~|nBr :@qd( )v_@کiA | txez'-! p,!zC*k2(u]"HtD)TC;h UM”DK/+bvu(G:Zڡɕ0 vɚљi) @N3t39A> gYY#$E :;)aHT @[HY 4:){u'늘 D р 0 (s'I.06RD _!9 HKI(/0IV5I4$)>\P=\/HP^) K>t zM v ,mtza<W@i s`PO,O @+v#zr:t񃔠 =S r+>{ PA 7 px>McP_ 7 @v@ ̠iB(0xzRCx1{z]st\ZAJ4@P%PuAP1P~@uB P õEYBbBBhc HD L yP498 Рl:9E ;IEʀ O (n dJ96B_ _")֊[;яS{wA  ,C~I 0Ȕ  x@$ w Z" Ŝɞ,ř]-St= XXm <Y(:@+!QT ״  ngJF M1q cCp@g p plCIFnfntxE|S@ :(;"rM 0Ivl#!Ҡ<6mXuwHI(pf\ yov{` Tq4 # % !%0p  N w E\H $1 ^w57uH0 t ֧S: $ ̢@ୈ+AT e 2^V@ҷ!l7qC{&ӱ! PWUj}+(5Njl!m :#>$L)TE.|BXx@@!- |[ T`H0\@P+>QG3@n<ԁAX4@p=}&փ0]D Ȫs K Zl`< YlP? `w6~gC'h,̐ :N ffk!^uK@ NBPP 7u9W5pHb(`%qS!ꍂ p&܊]-}es2Qhn@/yq6g`nLtC d@b) 0GD~{ݐ Hȇ`.p0#Fx 4 zz@#pcC7GnD6tGC8+ݎISЄB[rTJUa?p0S)r+=@&>46-dM  q4 QCT:mfq  =y ڃMl @c(.,!uD:DHs9gO@$@'dO@) WT ^_ +2p ^ 0  wx#{҂뀘 oPE6_F>k PZ+`'/9@4r5bP  w6HY!1"\Ct]U}'|aMb s|ɦl P u\n@Z\\sO >H`P3r9Lh]_cny\,Cb/;O#nJ?No+_vw."V湣RN.TPEE:uY\vԩTV]~U/?p_6-lSzCgOB+[bGyc Xb+&M8h SL=iEkׯ@.lVp+{U{_qڞzeJDt'G< !£"Kx%DzA_8b={XvZj_#@D0Ab{`*b KDG{a%wzᅏGT2lv@rA:S)y+tO(p *w'\xG+\0K-JҞ#ҚL3܏$y^cFl>9N+{4's6YMeQGF5u4Pwlg!i8G|jKcpy.@&AbAهrh c_Gș4LYǟ@ aLMmC6^yW>t~bԱ*Ii!ɐ7ՑJ'&MIԐJ$z(!Ȃ|xc>|4_V衖IK+c5⤔CHMgCsA0$ZZjEsNuf#G:9G8E+c= 11:he~ %pDQ &tib"J?2ѥ!VaYUKYpxrl:9vg7à6wCEq}𽧮yGFGx$tОyɧDg@ t{'|Oz!Q|ϴŧ~>dpq2aFSZHkD+Qv||@7P2H([:eN$ :G1jj  AȢ`2ĥF_ъ7\ (X%:iЊe6ϫPD4@?`Zro`.z ʇAC9D! S 4 "0Hlg?>яR? uxD,Ilj`Q˛^ TDwy bH+YQ@-1%{(Α=0seQi-.$ A{x {0b̙D8#53AD'FlI#ʈrddc'/81 N\=ZQhe{Z}]6CC9q H 2@v#/iL}#<Ba` : o-J|#`?1MQ3V5PC\U/&Xf$-CWZ!, bBBʠ6?:U$q: G:R*&!l"(!&@dDb؄&IIxa h l% \W$8`fЂ04*CBM%RLRkC)~$ fWB̻ջߍ]#s Pmш7{E7nfk eO]/5q}!qOL%@?BU Hx$ :q ll2d! .˂-JdBX*ф {9qs\A5SG!hF-U?.Ѓ\t5EK<-yu EdX{c#a. uP8=W~25K9qE<Ꮁ2j5 8fԎ祐lY,pN /Xq ƒa(/n --ՠ*@6!1ڔ=kl@cE,,l@NH *0F2A`,T JtB`<O)쀍Ux'W^cD&r8?4!PD1 VwW_hP8 F5.0D?ah\ J]Ҧ{>tb8babư1HGHx:,dE+`C݄jTVI#T4kCa+yoqO[7t$8X<и,@a '*[̟ z#6),)a»AW>jQ2ީ##$.$Ј;]"!A:IAqj`Vx{:z ¹M @"AȆX~أ*@Ӓ|h-9. //"ȃȃ%"$.X)7X2Pj0$hRr022`WU !r} s6@rЇAh9J9LJ،J99Cp𚱱sm{ zK IS0p,dhQe`\G*h'zRBjhV^`iex&|T7u01lJ*!odNXO~ P4ƣPIS._y: 5:R8Ed,*:>tf i|Dhhh "NxCH<@@'Q"@@Q.x)yY I|ȭC`*RPc"BJҌm( J(NcBDtH؅RjP|hx( vIt >Z==,Ata<p,%FpBEi$ɖH!Á)*I$(tWx|Pȁ<c2ciX0=ֿ.O3퉭x#smIb@؀ |Ytn5 -ٝ[q_eܓҨ)WJPّ-@P: ?i\ݴz=xzdHGOԃ 4"A$YEhrZHX~;|uDQ|hcvpXxKɇCs{A~=XRV#>੶<sqXG8la 2 ! :W9KC_r[b\zhd z`6e׌(az 6M` Ї\)-D2}t8܇ys<sYyq٣4nMȇX/fmVd(}EP֚^c(IR"3Kr0Bq,R S WZǹ\}ƕ. ɇe7Х 3~X/)h6mshPol`gM`2}X{XϻKXӐQd*c}EZޑN$N08gXQ조5&`)CspC#w t|/i+̛lVZ- Bx d;Cm%qhÉB ~pr?ieO8;8*?,B Ё}ЇPTE86\D7ho~o; IgfNծW=GchrKxLтΨCM^N `GJI1d?`|qV3yhq1yHC 0e &b]=:A\"} GprH\Ci^8w@d y$iPz@,gȹ h4r `I*oc(q(+ڪ僲@|]zMqo5?v!zV2hCVEO,6EiRgh(C7%3Qq=hflPk B`"ՠ!PG*x8ɫsA>ly/,a*bYB| Z@)Uy>؅냍:-x?tlg vɓ/|-Lh ƌq@wNT@7av!^e!قF3AJqtV5jt^ySaO4Q?pR ㌣/>O?P>4REVDa\Z_ЀD\<cM;4N8kaHA-u]k$AJ*w#<vHm=K(=Tq7ЁK9<cPNRL0Q-4 SO;mO5b#'Qx> >HHõN@NVMW3e V 'y==I$m ({,r9_`ǰS3O7oF+% 6U!)R/X @ :5k0:#Kp*Z"U-:BY/__` EHC"Ⱥ0#s*Qް PN"W_AB~<)b)BA@#RFu,Qji]1Q${" Ig҉%rG4@="k!$#)ɱhI%Jd?я8tܩ7jh`I׎ ;;q`Q5@/)a+:a,h*h"MєvM^GuC],:b%2GaH &0$cEs3,#O>Q NpqaTf&P,HA XB4G:2у%Q2alhM|)LcMДuKM5 JP1:J'0':1Sg;QZ խ =E7Yzդ(,1eM:DG"hGV6B!U*`\p x6ȣsf)R,d`"s=Eo0:d=`,הP,a =A|ap_QAPĺZ&".?1)XI-A.U4AH[ |}o{u.\ *X 7OhHh yᔗ p91~Dvc1H^d0x!OJ9<> Л6YFmr%9D$"h!$H7qvyP>VRF*1ÖEV2@ V#MǺh~tJ8~ 8oV5hn$&:A`5<1xC+<#@#č̝8Ulҡ\F!94C-[ҙ[W2A`DWG 9l$?/A Sy,Wĝ͝%v1b[r?ā A"ٵكeDݴ;_(*<L@]{ A%*T4#4Ba]cޱ߁Ђ"0p94_$'%,(9<ɑRă?B"A9vD]P#Y$[ 6C,P/A  dK|e 4J MS!}SF}\Aܝ(%irT], ܂><C1P~ŊʔGք'zT5 F:tEZd~m,`9C E  @ 6&=bt&'-'>HS G uG9Q8 MXTMF4p2D%i6=,c Q@{W0˽ 2Pt~iq-)%d:Y.d> C"(@!# dNrAI"?4D42C?8,MNTa/xpA \)yY"+h2٢ &%ÃnE5C1C#Tq9 2B(HD,>Kb( P>4HB9(C@%<+B88v`  mTS$$@ƱnxU )=kix=<kL, 60>TIU`?V`!H?EU^lC> bH`R=C9S|0"TyMEf*A,>'(!Ё2tx݈NEȀ 8ٴC,?xC)04xR:J;E& Oi%B8CHlX̓?^K6 8Yp~ DPe\ %t,Ρ`F$Jt?;,-E~(=% )MR!BRTTP얔.T,=pD./qR0z &o==? DE=fGCτ7PY9$R&tNo]T %vfӨrEGX1_o9Fp6PA = 9(B wE/D: F0 DH0 3' C* PL3_4ȁ(C0dMTRXʜa̮Y;B[ ;L2@)y C<>D"o'eM%Wu"->hq7Ux']GFTAm<ϸAI|%|pI,=\a11KR5?%.(CLXnr$BCATAUQf q0MA)\xmZ_@>ȕ$FmDqQ@L9CP"g½/%E 0>"`&b~hC>'X̚ F∩n-?&xvuNE4% ?~/j>D`'6F$G@2(ES~b863@B g^0.஀'C DW<%= <"<,MQw9߈N"x,M:BAB%<̘# o#Qmuk:G0Ξtus&TwiL!g.YYp;`XB/r#;r&@ lFGȵ5#`B]`?P3xWLb4FG.Ga# V+M ؤ5O~=éie;{MI(9LDAQ9B<_Dz̑C@)Et8%y|LC,)B5 pd ܎"Y%+e8|zE(,B'H@hR, $Crhs+)CrTW( SL/ ZeGW=;Z=8%(P> :L;s2)S?TGw'x'-P.\Pk%y} 8ED)Ё5b?܂ T=rC{>@`IЦiҥkp!Dݽ{K@ F(a4rȈ6I)kfM;_ B8fyNyQiSOa߼6gպ5v;YyUm[oƕ;n]kw/;vͫw~# >|/!ӊ߿K^?ܾ}x/"?۷gƋvo߿Y2 bE4h0A|̛wރ `{&nb.=~N?c(ل ,%IO@r J(фJ@*%M:aDrGRIeH#n$j7w#k0)M6KMQΙ|zO1,3T ||{'dQG0:(NxfC[GmHcsD~y-0ʹ1+R9x!:ş'5m+RI(\JwDL!IS"9GHF2LDlT&n,2lqAE[@%r?Od1%(d6/'Z8QfG'(ǟg#ުV=ѕsJ؍9bǞQW1pji؀e0~FOnJR7jV];ǑW,wJ(!JZ@ ҩȎAIV0’Ȣ "oy';X笄fM3C m6*[wsC]U5%W4;!QzCK"1q5ʠZZ}NB촩8bA%3An|Q%FYDE>xt B!G}x$!$ryCة|VtlyC,`䱐t#ǯh܃" 1 N"s<wd]F:lHn 58AnPlGFƊ; Bjh;2>XDI4ĭ&2%9vP%9dnt'3 c1g4,ҵ!F؋rrR\ ==ja RWqVA1(!tLX$x" %7%msC rCۇ=U (ibI" Vl!)ݑc4W9)e sɈ<;e^"1jQY=ZE&鮄&< P!fA=}`dY.),aV(-KE@ "VQ-f^+- ? YdD%@dȢ(@ Obhi%*kLiX#?RA,H1`NA VSD@Sx! ӔZUnUX@J,Z*kx:D"$!|Cd ;!I]!sĢ,0=BH AC/<C ZwJh@^8Ik#um+r8 'pb+v}簤E݆&'!D&\ J@k"R4A"[vbH0X  -5!% tK A|6 ]1a -ćXQ`! r0@*1  m~ Xя}C\5Qu"H:A Ab^؍=\!9Lq(M$*/r^ *@ыf1tQ<E$ #V4" < r'{^r8Č&٤?@6@!OhB-%i'uuzC.IQ$Qyt'63AJ+YRdH둰d-B2O!(B*jxsz@"Taȩޫ衎zs T$ uEUt*#EdIu X5G8GT!"!(R]H*aD6:nC2j8r"0X̖l dB6,0-kB6'4bA""J"N&KdZ(>a{%{A; g =fĐ6Abxf3 lF D" -M."DʨoT9b`*0Bjur"pD0q@dňX!\ !U0?%`V\ 6$A @jqIk0N~%!ZJ [".ҡ ["⁀&VKn,&QVƙ`{H1/Q 1DOoYKz 2^V!@r)J(  H9, h !`)$LAhŤh$X {T@fLRb,l)$@tj)$&Zg!YYbJVh΁I nl![ 1@a0 Q30Aԁ$W@wܬL%!RM3BO9E&qV4S~R1 %bK{m:!x -$TQSB/4tm H;FpսF"pHĝ䳦ž@L  `! ! @ZeYy` ` bІ ZD́ 'Q$A>;W"1evU6械aqKE5%$C HEYz@a)Qd]#b|J1%+JN/S%.K&%P2UVBI*Z(aTT‹qj$ADFV4ҡ˴V/az@7M))I^+N(a&#)6o&ok@`2$bʡ'!`&-{TMASY ;E"`Uء(#nHŽhMYDvA_l(!ofFTJ>x+!l‚+zAZL5"m"|@@kbgVd}Q\2Bv~4da~jaFa|bJZ/\n"39))Q6v.k|VHc΄I*,;GPP!! ` GarAWMnbRt#B *nr&X..`+@3vqmTad"*;! l4",a܅3ArP(vzm7/ _[ꢡ:&Ndgax>7MT!ֈ(RsH>=L8 a @ B!aE] j VT# jv$,wl)a$H20pfx a  azf@(C˼p@"bxA9_y($'KZJbdj r!zH,"ɔ&%sad a7*_m'#i'{%9|?:%T@06YdE9Q,]<]naTAzX&jʀ   4p pA`< w, d4 42Z3`ܠdXg7$a GhlՙlUT/0|Xp`  `  zaa`@E^Lm;-"#b&^&6rJNOdv0 ݛz"oP5h;&/v6!a ьhOm/i"_")Қ4,T7 eg|@!YR$(Da1ƚzQ(K*( d'a&._vam xޠt,A L TЀtJ)~kLDf!Iv! v! S?Wi-ua6 5 vA4:2-Dn8Qߣ'zl RNp(X0!^^z\P81[)dsAk/! 3Fdera hTKwLE{zx1cdĆHH` w-"]:;?KN]}a/E*u+1c(eh,d(a`6k3g<{ gv0d[(-z uQ'UcwsV5ԏV~W=u#ʉ,go_s7VA Ν[:TJ>LASt>ٰ蠉oP$la9#6PɘۦJ:uZ_A?<̛;n8ԩcw$}գ;v;O/!?MǏܙ5Lj110`8怄8EzNxtUdSދу?O+A#q?蠕Z%t=䃌$O=xeH?< $8jՏ<5:rF7B/ >< 9c^la3AjM;xJ &0r*r+$Zɀb̺" OAcaoIL&/aÙ><x@ԩ9&|In%&:wI$Q~6Ģr&Դh9s$H)t)sP>g3t1L#?J(ꤣ;\["N=7=hV3?< e Ո:X?lu?3 "RI&aRI&hR %[&;p0/|T]]&|߫YYSC3P#NPؓ)HంưKrHsIbcXt`;v~Su)ܩ,{|}A1b.e G-L;2d!8P-E-‰7zȌDl3(Q9|Ƅt,.1JM怿?kh1Ib;C(q@^X#ޠ<~Ո<B&h>@!mB$&3Q0Nid[hTr s *xپ~XV@h-xdP_) | D@4vsye3,ɗ :8ϙElG * IAd0 +pvEU+L L/8=яB F+؏?O>aS"(vd KVt>=rXYPjy)GL 1GBҊf:H 1 ThC"c09=~(lm[ML'ҩ#(a cRfNa@AHzl0?|3L=A.\$t }^b Ad,K~z "EqZG>qiQki>` Ȱ 1]Z8{шgp'+q2Bѣx?$QSztZ)5(_d>xABjP EM2||G}9Ae$Ȏ"<"v'"pMhGbS'NWA @i>EɁ*SD( {5FSQpv_qPP r ou@E+_Se hcJ;O>Z>P<0;{́jx#"s(z]+R 2c/@|@ 5pq WKk^H qUEAE  D S@DPd^5F wP #h P SaAYz^k1t1<@t[ i)ŐY@vW2{-^ Q,lP _>qO81T PMhL8d@ į %/W@RՋd`M 7[a{T025Lwc i+ % O ni<ũʫJh!Bt`Bu˶ 3<<0 ` dM8!Fx{pMS06K˺_\|`aޗЖpuP}ͷζ }r$c95@MӐ!/vA H%h@ȓ!-#m! 'pPG%Ä `6P cwЅ=qw8ð{L/ݙ8at`aHoE=!4a y7bl aAhJk@Wb^#"̀ˠ/uf`Ǹى/7҈_ "M r{AR, >C ; @=-Gp kP p%bˡ~ :τRe995>@C$0@GZsׯ $eR|5{E@f,!>Ang&46P *TRe#(E L`j`} @х8<`@]T '(9Y Jiݿ8# ?f9g ]gRw$ocfS^Q#1` B9h$y@x\Mڰfj`T7Pb)^z+P5ڂPaמ8j^Q }3HU9@YK D /';BPp ِoWvj10-XB^.&DP{NL~wR25 Ͳd;N^@>c PCD6U^-± ` G&aawĔ4:*Zt_?nimE(PtKlU|H(0` BunDKO\/KLϔ| 0 GA({f#D~J!W|Vd cf? .\a;M3ɞnG!E$YI)UdK1enWGx_=ATQu銧I#C&P9hHQrqK7HРAΞ&.)ׯPtC%t-X!U$>?ǔUfkرe>y^B۹swtΝmܺoT\`+GzSpڧO 79`S%O< RTtMFzrg\?UW~W,VZGy!X!x!,k͖$@" бН\E`O6tNJy'zW`9K(D"ux^e5؀umJ٣_a#Gjc/XAbwa~}ecyf"2hKQgm5pA c^ja!nhXcVvTTEAϠf(Oq`Q:E}b^h{qweѻlG^QDnrhZQ:u[O=֨c;vn=bnŔ||e=f \ZS%Zy|{~6#]&ogXAsUtz u {8D$]F&a` Q6X&z4! cHWS$b$W?Q5СRH`BŨ^A,#bxD#/W(38!DQQLxE8|샊c?lMkdcb@"̡ D1P"*Du\q SI?S0? otxB.Rx0B`X3QC$pGGx$XȏRXKfr5,@{ $u1&Yc ` d`2L`B<R$Y!|.Tb2d&t #,20A3k$F J7Zӛk> @BDPNZիF0Y" BEAQ֬u}3cvH4_'[6?_l̦v\f:`Hmp;U! ,H*\ȰÇ#JHŋ3jȱǏ CYɓ(S\ɲ˗0cʜIM`ɳϟ@ Jъ ^:pNW1ћ5Rzʵׯ`r Y&Qp | ekh輳x B| X\bcp>k\OCzvϠC'~$ MxV=f§'7!cVE+_Μ*f Zfcn(FgoG:EN2vgiMCا R`?-SCu2}'.&zh3T{˽G#8jÛ@=X5fL6 bs0DQA\K`)deSlp*M7qix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무jkܪ뮼*% 5*찠r%&f) !eB&YgP $Z BԀRbJrIBAȆ]HE ;p G Ԋ|/zH0q H HGh~(F ǖBx00Zt 2` &v&iA 1GlA =I*h43%*qAP 'Ȁ J2&9qibǂfv0졏 Lވ͟Ni 7BH{|/ǹ`5 ?O {<> 6 |zAVD]% B@* Fj&JTCq'U }ĥJS$(NwӞ5*A*z vԏHQTww@3!(HΤP#@MT!L^uF_VZ MZUc+L%RԠzmRAV01Xa8V0$ v@,bfi. ij bK+^ԑTv)e0:LһtDDYN (uZ} jTנԥN jV{h̦y#aIJ6pvMz[XA~k$0%|ĆG>f $c@ߧ ̃~(9ƈF)AJ@RTK8w lr_Z?RAT~ nqz%WNLuF}+i8>ҡ xϻANvXh?~vAx^WDiѠ4Q>#^?R7eZ!X=1wCDy7>8юt?z < EiN\p5y#>#뇿bv _4Ȑf w0 G~a~z&J }{Fz€}`yJs `0Ѐq8 DG25)Pzc ꐀ00xzam5x|p 0 OX wP0 P g6 |t@Cǀ8 v4@ #+qXOjB07Xv>S(0k j|P p Ёw UP(/sҰ4PHwf ` kP hzgۖv`|0 @ W| >g@popـ}P u 6*S4pF$+f@ 5HLxxvۖ={ at@Pww8~2yP`P{ pg T@fe1p`=p"wj!z> fw>s! pSQ"9v0k0 " -"hH.sm+D@ PP(!zPU0S@gΖIGP) ))0ww) Iyw`W 1PǙm'*cj|,w@ &)ӗGzWB)9 {``g|{yf2D0sg{a{^RHq@W?"t,PuFp wR:TJJa!XWCcfmImI0Uz,x JѐTjR%hp)I $5Xup0D =i_@/`}Yv1gDЛF4@"pQط dX  A<"`#`sJj` /)@)>s@ yzT0)H+fGg 0U00Hk"# RP}{kcWDd<@j`5 F6j)p Ar4n_ktFt1aG>_=D`5\QDsDX#=@|@lD H<@󋿁y@HKay@8p`  w%@ {ח} r`g`"Ì#B7kWi$ @`p!r룤xV>ÂjCm צpj;ӗ{0 x<89HhH$hȏI1D6$p@mۚ1 aIA~J D > }@\` n@$jLڴp _y h$@O0h` *PlH0*i085p ,0`s@?w<|rB‘L{, mg:zнp Sh1p9nK_cv9@}It@ Wn@ x  H\ y090=ԁʹl ` \0$8"g,rKanG;˾psٌH0u Lӕ#hΜS` |=U\y}p.vQZD,ֽeÜP g q !t-5]i( _a|žp S4 Ijk w4ƢyOs` y=p-Q֋<ڧY*AJ gC]ԥFsyHά\s t96d `|JDJɃ IRׇ AJw4P\\Ps`\0_ QI0 $6nx =\p=^_`}_@g\_S\4 w",ʰ0uL`sgQ#o Y ǫj]pŠRnUw9})MmH?0\p@]OM 8u Хm_gQ@KhPYO\З$,3 o`)XsywiU6+P1p-b>6>=}Ŭ4 \k{4U[qi P w =Hw 誢$}y oĐP< *| xR&sښ7 c#z{*? Fs@yFn9_-s}HO@,p> v f8c_P~vj pkhBu͞4n%ǒ0gWq ϠG@yyfҵpìp-u=\#Ovnj)zp{@_Ϳ~z,.bگ@VqJ@Xۭm &]<,X [j!K9%lj_+c@; ˃D-^H#|5NH%MW߿!?KF^`y1F OXƒp,K@8f:qgOmco^DX×2ݿKop.|?e쉌X`…d(~r N]=Ъ8j tիXhҥMFZjkF$fSw+b  Cn=e'5ri#o"s\ҐZNaKő^ ~yNs'}iGa._⪎vBpG^bG$|C5qG~A|HxNaoh)r.E#D2I%T!|B0|vcEݶrK&RhğЮE( rJΫJ4$-TM}tuG2:405'S h(NHI#Q 3tR,"N3~l|PcG>֘ev5N X+xFs g,4K/ ,Q.SrAfy$P4muc ! 7xB_ 7Ј" s8z$c[faaJ!H|iJ^ᔎ./Fqh8Or &UH`,gs阵}P1)*0Vx$ctb>6$-ii>9RXrA;Pa)pfY2ʪNB9uގo&- xx i% #.@-i-X! Qq%Ob%d I&Q`_}s~8aKDSt5XsfpǓL2!$XC*Zu# $ؓdA9cL, P`t' tN4(:\u%t23B $#HPs5IQ桍jTCkabeޟJh=UC1.Xb C@/|aK\zȅ( P")H;@BvԣiB}ît8D4:tx4a)zĤ[$L8vՃ0$(!DgU7/Ru> <b%@GR4 <I( ;Qtl<hMC ō,] 1~ Mׄ`% -1lžxKlCHFi?qJTB"U@?- CqҬRhFZЙs'"AZw<dDգ?,CSYdu?jIUHhOh:`:1=0v@X N(h:0y`<il`@MMPtLGJM(I8@πD{36ܽ5Nu5[8I2ȃȁy<:G؅Du1AaKBȏ4ȩ@iȇZ(DI 32,! -i=;C :;bZ!@# s[ R8^~X Y e xc73 8P)y gIpJpaZ>Zra0\|X ZG=hȫl؃=]t|@bUFNLudM؄EW;^Q˅q0ȉ"9͎7@ǘ:LaN LR|nVz84z0§H=}D@jFʇVΉP"ԁ% %Lۇ$|d HF=QU0E*U\X+c% U -5ętْ ?AsHnx&h2'i椎bZh _)Q ~ 201Vf7}EPMne͑VDGAt(Ɇ 4vȇX(׎@09-X:V֑Xu):D}P|pϢ A]<@B.}$¥c$~7yFXDÀ|Q q\zVGt<ݘ8Fxcz~h_=Dȃ o ]иy0[z2Gؠd5R$eM& Mhu`rEeBhH96<ȋ:^m 8.!4"KR ߉8ʫs\U@l㊵F:A-(>|#ɱZ`\B8X\)3vHKF- O5 lCC0F*kR'n0:Rh2l( m- (ep+ռG6 A֭(8CNYc5Da +#3#RdШ.a&6c183; ~N04Y(̰%AO4T`XY 膶x08&:ԚUz= \% |Hn(b>`h/m ccb FMhM ՄLJuЇ`,؛HCh׀ +J4:"Rچ5hMIxelVF=(=ƁS(#i[T _uW8u"υ~.C_M'X70(thƸh OBGjmHG ?9 `Pd>xjV0ZEt\0Yh؇~ hVUNRu$lRփdRpRXCM8n%85J vY4~! !}z"|.\ 1J=M=jT'9Pi!"*3_8|<劙Vj1{Hj@;`TC^fj.Vh;f )SYM-'y!0 `zå|؆c)(Bx`pg#H:PrrEOM=@q(u@܄N`Se؎Pˇ'rx *D,h(}Vbe*DM1R<5 /@@/5σ/< 9$Hp$VY}\2< 5VU}.[| t5&:*as"a)vOt5r% R8g5(P9B Gp!W$fzޮnfк:|{]X tXvGcE!:7BtlFlHsDNO0[J_Rp?Qxq:VxC)+h>F`,OIDXp 6 8./胜9p?/pK8v*ua7huA[3*bAgJS6sQ\bV1C{Խ"ОspuВQV8CBeNQv&I+'"~ޕ2A,|PPh/{0vXAdP}z~dFHOJXGA@p 4P ~P!Tȇ=``Bڥ2)OCZek~ TgT(V(b(dd*HS{ 2lښ2cCh"ƌr׮ݼy6ov>*DΝƘ2gҬi&Μ:wԘ'Njo^vriRyL%g_.}zF*oB io{6K?*DȈ[u+Xpcga1RI:o_={9{i/;lrWr߃,RO:}b!!4m'w;:]3f͞7\*éCٜq24Tgt_iO?O>(؏h9 <ƣMQK/t8eeKjS=8N5?̔NR/N: (00R (e#_G( WGi3$㥕ГN=D#|,|r~R&J2뮟8 !䃒cO=?9̘4 SJ)X-zy//y4D3CP\/ B͜J*.NQHhx%c;} "3 2-F\pDQ % ='26/CP^#O y> PB &qc"|>f fP<0 #Z#ceYt9c= &tܝ{ q.,O>-?ָ+l]X[O;s_P;| 7C3ρRG8q[+$8 +U0 FrG^z?U,eUb% D, xpDҁ'l #Q1G>U[ ؄&2Avu9!!pGa clp=okj GrPH qU,Сw41|#V?GYُAŔ݃!ߵТ/%GG |Q ArG{0Rb =:y^"]#(YIz< Ayhx ӄ(43Zdx$3BL 19LqI 8HtANPBp&q|؅ ُx*|6yC0G)cBP31n'GFACF>˕4E ՒbUb +I pP!xm244bcpS%GhB*UP2| AzRʥ<ў[8bdSH: GTA9H R` 8B8mj! 9D l(ANd}lH39爅 BC6Ӹ*UH:2SB؅->Ym'YD uKܔd h܄yѫ ИdvyA֞,%#lByr@ZL̸?cruµ5AyGLUD ^@罀.w&ڳփ[`\Bc#mCL[."@FDXc_ث( :|b pAބt% } X\a |-L47) ny8xBNCeoxË 3:=y(\ *b8F+ T+PNDo$X%kLK;+ _eӐ'8Xlo{dz`Y] yɥŐ ^u0va׹N`4' G'ZrI6?套9j'G*1τy3` pƟ>RH!9O,{C~Q{etGأ I7T^\)0RTW 2 ~^-qcN۸O56*bp{W|8"Qmd3n<"24$w5qE\b\D;J:0S4XzPcE/n$2ME :A0Zey!$* mF#ԝF&lM11A?#x!ЪdɊF3@LA@ ,Jɛ G)TA ܔNZ Lҡ̗yҪ ^AFXѥ?lCi\B!EfpҩDٸýFT H8C>ăCZ$TxF)Tx,AD $F"@ A.žMl(l[=EETJyDJ {HHЃ9ûIعCXC>̂HC?LH§C:CG6TT!ķY&0(=$YD8!!\AЁxC %ӤD% ́gM2"B .\ \BlHXR' 8EG7C40B!W#\O?Bxҕ] $- AI?$iМ͙?B#Ђ (@Su91mB'6 B%ps|B'TB&xBTS%l+TXi'"D49h?T,$xͶBZRH#HC1*>:JiBЁDg^XX%X"0%:A&ba2XBp$,Cl؃D0\?B+N,MG%B 섒/A9 @#<z2SiLC,)\q 3Ё82-hB? D 49 D6&T'1, J'J2܂,Dz(&6<g{XlB1>^?0C2pN %|+PJG?H!)Ĥ: Wî2Ё p5JE T L{ Z7TJ$CڃR C!EژǵR%(L*-tB?@  Tm- ,b^Eɜ!@\%@C>|ɭ}Į rl%,BC2`-¯,D&-{ rB@2VdR;??+6:2TDA8Ɖ-.å8AQ)'pBB4Cl?C:F4E4 D HXdL:ℬ!jS7D |S2kN-%*‘]jFPy#""OܤZC/%pM,EE \PKi$(Ku\i{m~jJ O?|Q2~Vdqiϛ.X,QeT5|BBA @$AA  Ʌ@&!C(rc5 嚮ur?/><ʝz˼F0TBo['$%˧XhF "D_3*6{}o2q즹 :LjGlg?)'jK>uԩr O<NNyKG:Z$!DMd̑k(MqyQs) N&* 1^)JKz@@9A>@/,Cp8q|2S$h`J\ inz$̒p# VȠbH4Qc WC(5~ŜtFJyMNܽc%Òh܁GHVf@ѼV:w ^^5UDH*i&L6dP9?>wHV!cعvq')ØEd&m2&L2A֡ǜ@";%GE!x-ğ)Gi1y)f|ǟSN 9 j<9x=*ˊQu$X)a>z<Ј/b 0-%,5^0%mR{eVѹ$zO_Xt'p)Ó橧};@cDȁP9D> }Mw R>:Q:YM\Id2#0@(>ai$ + ^ 4*C> ƚd1)@"|H+0 AB顣&9q1wX }s8fAm$ 8z{=acxO S$J 'D! Cԕ@bM>ȁic(g1 o?${ ?07`n@@ 9`">8ET$Jmn37aGAል,+40!xW4ep4a q ȇO Z=CMb>@Aš\ `%^% 'H, >A h5"$I:БxL`edN (#A'O* *h8F#Zo& 2p:Qer1(T!T`yx@$X4i? s|0 5$۳m=D{H0vU!!au.ȳtAõ-H<8gRLCM&kEl? $5P}6$= T@XTrL" B]1n90nS '@UH"sAk$|v,njZ\AoSLƉ0 ?f]~,vuܡ|ADlEOZ}T=MDG訇>Eĉ%0OqpA&pר|(d$  5vohcL!|Y"X$&(ɚIFL B9VH᰷㕂<zDW1F<.@` @JlW"qJ FID4zCwZ,q (!qB8djCHpn|=^c XJ8?Q5I}Ls#rŧsf$hz$$>!,}A^Q,}h_=ބ8xB5|@9\ʌ mJi˚21L$iI:ri 6(D{xt{i+p=`qzу@%yJ6{ LJKpq1bTI0\vOԃ8'18A/~RAjE؃Ic(&>iVdLT?KJ>0oPFL.>" z ~ HhK&t@,N*RFb }!t*4>A>F/„>`@Rb2P8xʁp#~b` !- p>c r&!aanANIJL_ЉC2 Y"b H@*Vcf=b ƌ %08Ѻd, R Zʃr 0Lͫ;^R·A!maN ڀ`L꼑ڡAJd&!Hlaa! 0d+n$S&HB)ʈn` 7nb\a<~> 6p t~)A"!>2X'RD< ,,rRG -)+%!/%r11t` AaLjL!QBI39S1;h@RV@<`l(kQ$rzפ!'Ra;/;bDl }A2!$An>AT(AdOJa,1b!M*+RJ7N Faȡ1#0mrLiֆzl A3S!GLGFP2/3c Vp+{sJOa 14,$>pŠDq*jJanT|FȠ.DE}.`\ a;AAPV'J! $mp na%=d!=u"V>:!d lG[lLL, ʠcA0 `^ f$)Ws1cP1$!-ˆIJMdCgs^A#%+gcb`UET04FtJ=67vJQ 7j Oc_JnPv1p.if#l`*DmuGr %f!Bu~BT6Td!n?VAA A@F XKBbX#.d1;́ ! &(B7D!LL aOFahAiv]TuRQ/Aj 2Ajj #!D.:Eqzh{BAaʠkR6%@DbaO6{"/8rIҗ'h&A^~6` ]JG!  \hEw}d "Djp-* +01A'T"x˪a]jHdßHsi̡Cϡ!`n$>vd.RaJ*-4?ūaA]kopJwQiRaƟJ쪉d~%$LOqAX$tQrMuL4TXAWiR351.LcU`Ah%G6y , x y r RBjH΁~uĚDL:jb,&ҙܼ"fH"ljNĎYa`lH hUE6{`$S!s1 LJ:cUM!i#:#-orɶ  ^2OAi;A RE=b zah'yi_\TRPGmi3uјYv`KLKE.NnHGZ1 y~zrIq*A !h , DxH/bܬ$MkT!-TWLm(` .N?lkJ8N2/ ({|#`#8 4Za{yEoKA,&`2l.3 z˦$8 Wa,h0 a ~qQD6W N.&ح=2/.ӌLݺ/ڮyxXD/z@ q8e )x`DP!'b"*@TAԢ΢',#){k!C)cRAf,$Km'qѡ  P )ռui(qa!-ř#4ΐk:Aƀ)3H!ca\6e69XzΡAa!AlhB6 XAM%g+#XӺamܐvANIěe 2C3@ D+ gUX}D īLƄpCH$N]$.A$j<$̡">J)ae pl)@M7hAL!s8"A(..F! d&A; oJ|aPaSٸ') A DlJdG0  c, L,-)ns%u6`tJ\M?5U'- y7o/k{g--F8!WD!@[ " dfZ!vD@\i0&D7&aCE.8|΅Kob(Nk.aB9l0D1XѡGFu IΛKҡCWa'byϞ}"s A&gϝ6qKX0zit?{kqEVIuX]y>v4ss!D >8Ō;^,5?VwD{+_B|}h%LFSH'T!÷ٴ>;7cSTL]ڀu?^]>I 9~Jg5{F瑣2&H uLcҴ N:Ą:p'CpR,`q(?#m=N;O+H?pQ:1F:$.l OϏ +ȳT͖B {1uAG-(cc:`'ږ}}BIgv)[Q"ȐE?c-Q&h b |d:IVkIDӝ斧;sN,> aE~iqc( tTӒCgC 98p;Q$$" 2mCd؀& &ECOBR;eLv?p2 FFr 9܁J>NFt[\&t%,G.# b:[z4N!t<`Ҋ'l51MBU4/V_>*`?D"Z` (jcf*Lgmb;s?#  OO9 j,з"uO2;t3L+S)xO5>4ģKuÉ'JkdCX>D;* YD$@uLb X]Q8a 2Z2'Zc,mbLPp,l %u(D EPm鄸@Ca2մBLB#|,>G=ǐ 6p؃o}H#:!Y]$! Uab? TBPC EŐ+q~#Z"Cq (-13=9aE&4MK=sd5S]gbx#r UtimXX F*4As : sb $?tGt <xܱ@G@mӎAHj"bD9@p0F)]XiT/sN!Mqjs%xу@!,7eld@XDhY1Æ e6Pb9&v0Ċ05e/@B~mA(mmkp̦.dغE eW%(+];|@X$A B'.8@?qGrDX~DN YB-94&V ,aA,T5 kĉ1\")Sk:BX]>Z/XCtbE vFbxxĠngQX Eq59Hȍ9UIhƒC?-8:SHN䑏Q"P %2+a șN@Pw.v# aXx&WUFc*hP9a; CԦa0[;r (znuөKcQ<9-Hy9ð%ꠥ?D91upl8&JI,F] Kpz5J?|9[|4~Ҧ{5:QұUP;po8C͠ƕlTm\ьpԷ kLyWv25#0 kp SR$@u#/%PpD}GGe{7,`.D'I G#@Ns/ ~dscf$ `k,"E] ` 0 G"EI-pPw :!L bpɴ '-`j0 x ^Xad#GK6rv|h:1z0JvfDWp h0T@T0d00nRRnqmg|vհ ʥ -~VsXEy3*EOw3 7w萃# }@9@+/+@*Ft90:!h?CҖC>& }PQ {@W@58L*$ƕm:y;1w 13>Wq 0c@==@U0(M? n@nW1VZ 5 v8 tRRb:RMY,Q)S"a^ -^9cg;gZeXIo Qaua s8+/)U HbQ&Ry5XIQ yI'sAYsQP$S) `c`9)p pS=@*@UdPP 0 dn !qy^9P Xr@GƣI\U h["dP1Yeɜ 8 r~y7 O)/~y9@0BfUɹ>"xl5cݒ 7Z=iZ. E(HNɢ%Pa'| # Е]Y .>hgE/jq=p9Q/@>/B%e#XQt7آ0iI65 4dbr p?P! @&!A'c#pXuȐ @A!p`'Qh*!(Ԡ :|UFwp6I>r gXY9PA7ȐY0rr 1 i `x-i&q 94 p ؐ p p j PP( X݊l' h4`uA)@,Qp `Ќw&gOJ'~T"t @<'@Nc`p  f*Q {PyfExjpep P#ѳU8gDh y33Va0p S4@<7#'vq6(ZfZC NHgkP}q H'iGp^ " P^ "s቎p*@X*= IӤw8@t#$ry'&?1(Q :0U` b LW0cq !k' ed99 t0 tКOz00T0|IzY?K48SDA[}` Dp1`,5@T `\VeIU`V6h65HJ 2Z@!//,GDKJI"d=p ϓrQ&q z@ 0Ơ^ ƕ @ C% pZ`Sy|; Dh77F,*:J|8:Ap |ȊOW% Chx5Zc ~ u¾Dx5 w *sxAK_8 - {+>TT+RZ+LUCeDŽHnp\0!8P,R#C^`O0 * 7-=`uxSQH̢N$5іIC(Q"` Р ~0"qYfy6H @ -j9l[ 9F !p\9 -P.P0ep'B=;+#(K @ |I!0 5MP ]`*`p ``V6]qHp .R<#g#\4ׂnؠ ` [=(5$픻[*='=A ^ ,Pe p0 , ج"c}CI` N3u@ By-޼7 cpeQMyW@=5ȣIP W#6(q&NP?K ,AtT 0 q$,ᰤpkF<,.4Fp ,t[0(P f̺` h  3z p߭NMNyȤ॒ @ 4tp̐ u+ @prQ}"ȟ|V+eu:]Q+`lK +ѐ`cpPz|urTv3QP x.lX P`5Bv|Оrq``P +Q1P K0U[s+ӆ!:^8@^J"\Щ{i" uFA= {aL|  +k  p\ `XԄ]>| rIk0 p q W`#Ym e40 g|Qq}.}iԤ0ZP*EuN:ruB"` ޚ9+gFоo=!MIѸUB RR0]Ґ P\ !!]F)p{T WgV7]ƒD0J!^P hL@ \  񣌠 " Lß5Iq Ű  qo֍@ p:feF/}kf9u?-SO> $XAʚjWѢń/nĘѣ@w!ݵk?(F+?vHVXQvC9?:Cnc͎*%2:kJ^zԩl!Jh*.?nOn`q۷li䏞H9^H<|0\1bp򡫗^[Ϙ2e &К2}I&M҇"d[r{z[>vqɕ/gܹbLIJu@+T'>t*T9qRN3GIlMNct'Js*|Cydz(|f`6.Ac`c+H&j) u)[CX(k`ѯ,fvmi)Ś#CCs1ǟta1 aOx;5d+CșG+u$qd`66ad@a/guQ)4K,TpKb5XbF>iZ#Ag{KltųMX]P[}U#cCV0$H"<@CBˆH_ ˁiWKdk|j :Bm._bU3aRXarBDgJrWyE78[hFސU7zikD~!cfXrh>J>w̩@zRx ȣ"*sCH8zd/+sfHS^M6DYБ$_Q)|JgL`hK7D'iauvjMwtbzrϝsזwy@[ޟ$)A0F~4^O!tj^?ҖჄ .!* 4A<dfȡgc—b X3`=RAXP9rG>*4/hp!">Vw~؃A@@B`)K[PS/n$j=º0 %YA4by7܍1x3Ș\է YH+J=<"Ck"8TKAbҢr-`6e_t.aL+/J-7 iBh$6.LXa( >ȃZqhq p QL[99XeѼR 9J0cGXuȣ@)ȱ:8Q^bMM )15AqDt0sK Gp3G>aΈ4lo?a }p0͗1c_@_"!  D3 )8n >u 4 O !bя8ؙWC.4_ H$$k~4 @SI) ieHp{S;|X[O2؃f0_&fxVC(r#hkR9?4X$\ABnK~_ {Kc6Ѷ|_0: z0P5rbvYF! BDq%;Z|N(>&=(A+li|ī@H kK 9X! "{3b;X v3BeF)8X# 19GH8ƽ{=hMpc?31I)pr;. w|?@[9vÕ3;tPO 7Hxj5YfHMT>?xB"й q <J !3Duh8 @s "DX#:Lst}HF|užb q $;{ f8V8J,Y`*Brxŕ Gs%#7IJ2d H'э|X`{8tPF^9>|EFLI!:9CgUTm"+EX ?ĠhyJЁ@{`;͌'+ІpspeqXGK0lJ-! А" zȇK ;2E h2<3SӇ(ݤ34f(R:(g;HEB0|Qhϸ@b Ԅh!LTM,*؇}@.|}XTNH#ImVT=XL\=]V!|QU72jd Ú"N͈Q7hsM]`ІFKx>} E@w\+P\<IFHT'࿥(CTV_ qBYOd5m\ ؂IUMFhqYxPD Nm\E̒ N_RKYZ%ڊᡭ~`-i(Zڏ01|=ÁP<*䡪ȝAe(_BUہ[][0K:ȁŸ[ېIIҶ0)"ۻZHIG̝{poAס8՗zn؃ي}dPs8z G1j{ [_z |bՈr=uJK!5:f5|<[E P >Cmɖv'B@|!e[,]hNN{X CVuO՜`X†CN!JJiZBTPeP+BAH@<1$l ^ rc?  _2 0$ ҥOs_yS>BȥVX ڊkC#4@x N :Eoa@m1*|ґՍi `u{790md@eȆ-bVm ?rRHmhTwj\vV~j9ש/XHP)lLP>JCE`0!v\ii/ >0F'pLx?jB5JP|0D8fd!MbY1!48AOxBh0xRV_g0~JOMӆm-]ql92\ A\8dv΅awUiȬ4SuD&ugS!$G ˴2֝;åxR65! =yȇWlC;E!Rt*";GpaGH2( ]yh5A瞮<5Dm>"p/.kʯbIV Y"(H@# ) Pdi!a HiE Ai(NԳ|@sP[Cø;׮| 4g!$K뗮 Ŋ/bxǎgJ?s(vLo_?dwCO#=bL:wБɗ'Op!B 4D Y"Ƌ/j`84 +v,ٲ`MmEfPn_|vOn۵~]ҵb1GKx0Z/߃`7W4ns7{=2'8. :)+Zny/:㵦ۿ=̚#zNɑb X_HOt5$_YE_;㏄b!8Xl]"Y_uD9!> &gm_If=ҐQ1y<$Py V9?IWbEZv3j9Ӗb#O<<|!Xf;yH1NueWn3\sZi)TY8T1?a*rDr]x%t=41%d }D~%+۟$\zMl"ZW4g`}F P h{J 1U/leD⛯v)9CN=Ӿ4ɦ#ă#,M808jUNJ @E*-)Yh3N7< )"p=pƑ<H> FZ>l9Ёb`S?hqƸ@#amĜJ>ىZ٭4uȒsG)H\|чB@dQ$E5eVSn+J9䈙Q4؊@9+¹2Jqa}"iQ6>-i 3|@ 9rl 4,`-3vl˓9LH#CZ?Y4a?):誫ӏ#cBN;`;;D2;H A1؃ < 2B" ȇZBG`9)lI2LEgl#A؀"@#h p. r D#2h;HdHAt3wԃ# ZD#x4@]"x^gCŀx(`q,9>r/ rĞQtҸ2!G,8a+H<18Y 2=*UJ po\fY쑍,@0pp6bĒ̂c';?K!;`? ,8rgA  uf zl1"@Y~r2xS`qu#PGDү)y e>#rFG>Тʒ^&Zj |4R-B5atĥ#ů5 Ŕ At݊k4ҋb|DTC*k @BGO(&H@ e(+'i@C(H ^?ëATșNHEX=O@9 `NHB#<åP\MNaz0 (ZX,]l9&^ !dE" >؃I Zz7,4x!w(҈ڢy<0  pR,DQ|Qp 8HMǣM?X›CMX84\0 v >C]FHA?d @4VV8 p3ȊAb-NT5Ԃ'p1MلD5P,^'BcR͞ <Ö]lHR:X"zxE:5i/TPE 8g ;VEA= b9q C.4kH4BD6B+FCh!IY9\mnA.ZCH%'` 'DC4tC-0dQ)6ZJ#P-iɜ&hDB*9Q ^THQl֠䆓PގVYbiyB>W`Ђi4\Lpex- b"=<Jґ_8ڢljD:-]ZRRsu"=0'yaL?P Wa=AX<(De_T9lR?Cĭ%d&Fޡz[-ZL Тo>40nV=Z,Z`4@ G@LAg%j(E\\ Y$ĸ}qU#"NݴWŔhY?`^)E̜Rf B2ĖU:tJRaEíy?eS;V+^ɼBq\Dd>lc7 Yx!(q XBa,T.$A nIF=HCq.AVE\P|/h^`I@%ZqH/z|D)WF >pC)dhB>C @B>4EqDTTCM _SUK&7@pY>#c-Mi+^mYφ !<%)mZ0G!lå*Zm6gX!"d'KHD33(1r$$(-X0%B%D9.-+|.5#aCO0)M(@9\X)A ~cPfRHD?+_=#|_ ml&* X'aS܂ ܥJcEX/ , 9IYǩ:dDlXohDnæ4h/ \%CQW9:D;4Xp 6t0aBy?t9.8>XϞ+YtfL3iִܿGk\gǛCljNjyhԅmNvjPBL:Q҃m  I;vCT(ԛ#HyI)a:rJeX42$jTrƌ+RWoez="Arjժ\Lc|@;F!bN7 ̛iLoF5zt>_Rt?ɗG~ߴSUǤCg|dtE"ǝXL8b<AŚ+H{<+O&F;Eg|q& G1cv\>:VyF\tJ7dF}ҕ:+҇=sj2T2 ɉJL5,*cS$V$#W1FQ,㞺PGXGžT*,4.3\^atiI u.*Fx-kzUyŶgyf >97\D$SY%48 =`.Ug&r afhfjmd AZ50~i':bc||,ezgm!S(ILa*v쵥 ײrCP z4@bx%^%^hb3Nbw**!e 'x!Qb'cfy%n(fकaJ ۡ.n6U蟟)ɾY7Ȝtee@L6`PYV|90.thVWv`W0^%{[A: /@j.G)@jMAB7n@/ h.p nx@Ub'<D; # !DBzh@X Nah0{ݑFB%E.=Q7`Ա!@6HM|u > hK]kbr Jb&6 T)+\8C+60%š&pVH ;H!v`Qқ&CS U9Xb8KKrM2 CMu s$" nX*Xb45H@*E)(θB8kG1 }Nwh#'yc8:Zf1[ߦ:G P}rKO`# F? Kctx,JQF\8'[QoXE@* 54P÷T}| 8 pXLX"\|p{J%< x =@x@$:#4*I?r4")0s!?a >j'גY1;D #|$'CЁ )܎Ds+ lh,AяxCKH. >\be LRuBApf63S2Ո-Q=c2QvN.r<kx:1u樐 |̣ alh$RqGVmo30"qFm^az#$y^AQQ*G8olC:1[PTVI{VC`RpRXp1CbG RL40 B }0 VC5=vƌyn#yD\55Wj¥ dҨnd:ѯzP&R?vvăDžomG4%2&83tQjE]lIPw(2; CD CCkUE`P:%nACT~6b2I%/;"FQ3.ƍ>/<&~ÁaQ L1 Sux#3w0rB}~mP.ְ^-A.ƚȁ&Vn Ԕ-Sozr`8,csr|aY#(ƠSC#c 괐p*NP(%!PA0jc، B%v0$ËE bxA2l*zH]V2f!ܰ h r0R1f`H%Tp`P s8,A@*aYP!Рb+lZQ/A4|. Af9xNP4bZ@5:b@ O{%*:g Ra ؐbUƀ_0*΁9&ȇ!A/!4ba)C!wC !P9 o#SfMI(0?k#`."<;P!eȁ$dxro>2rt)ID/6V${n&՞* E(J#JV k /:\D2 0AFrqB̭0!1P6B!G! )zRbd(5c3I,/\$Az!o 29l%L23գ/UD&k0lJrqvЀ ViV@To$71!ilj0)P+#%/! Dr%ڮ-O%YB1̡J&@ 6SC3^ Ra>-z`FC_@>8,p+?ρ:A4"2 SCK`NJT1aű*ώh LoP!0EGWJCa'D35[*#lLJ?b4$AH n !Kc/"N92PcO-|Rd&b꾆0M@rneyvTK0 WGx`V}Gp b!valk&kpN5br2p 0!6jCeRAA+ Iq)h W_&V˺VV=kK;Ut:UAl`\ )C (tꩂ]%riʛU !`y+0'0!L&EzQYd&T&8>"a7W"H!H HD3R SR@Xwޕky.l| |HW7b#%S!-Q䊕#Xm6YkyА .~_5c-&jwW @x Ї, T, x@!ZhVQG-aN0gQ*4VY%>|!r\ǁD2RoP)$4э,/ b:-D^Soր0!sa lEŤ8A_*2ɤQ ,X f zmp >*ME 3$~#Rz,5G?"40Hd*28s_nj8AH2O@gm5хZajnZ(9b|I}]Bzkb4ހj6B 79 ! ^ fr x6p P"!fp[ablh)%Rtwi#J{˜ZbC(zګoUi=T鲖z:j֡@!}^RPnMP[Zɵ%"` '6FjH_g!^"p a{q zoh9a j9zzv78%[{TDvM{́ p^!'sf q![4\8q@eP\śAVa!<p8$#a ƀL)&" H5ʭq*Q:_V:b(b;hWh^ Mrmb=$n \% qKVS/z; ^K0n ֑ZO>A^ˢ}"afWٺ(a aZadW 5#ܐ t0"2 C8\B@+C `  `@h ܀\kFae[hد(AHD/!B!& +A~i,f^~B:H)鏊R܅''J A H9T5@!(!AR( 29܍ڬ Zqv#,cz xxG'hq'!%[yẚ9֝K~KhL95fǷ@(!Xj,DA h i!-tȱ<{ hd4"h<\^B3~}! ϵd5d-` .Er_x$xAN^!lc5 j:?`2~~a ҹkGݽ*D@† /52jȱc>GН(S\ z[7hQM4ܩ&0ItW2<ذӧPJJUêRZ̿Ybuj`|spV# 2cH̩#t߿&4'Z=3kt#[גCʒ3Ucw_sTktj=ve'f驨ng="߬5 %z`9ؓsRdS%t!sf >F9K?Na#Vn; [9\qL!0B֮S$ċ)gC *B )@|աO8Pu-=4,rfS`=,j=|ū PZs'xѐ'#|LòKC;P[2A)s>ؔOdS~l"Gu*rCprtL EГ+SjIC%D$|F:LsPO=.4O:3 Oj֮O +J$U!thKx :) y^"`75 9DFVrH 0;5 ^-K;$T*`X 6ANg?H"&4&&q?i[&q4Y ̰$p(L3,?|1" $P HG#89>cD^mСHUB)|RѺƮU{^(Xb w8% o̐V4 GP3 D Yb L!7@gXBr4 Q@BЃ> `E1PITZŨpG tF#+YQʰjF,e#@ ~db0F2@ě0B–E} Yy#sedr O_ 9\X&8!EPXZ|ęȭMEKqL3˩gծE|qM RPi|bH.0Yn!)W.%M,b@|pPBb {TZe.`]V(wisZT4K-?ԸhC`$A:XW_⠃?vD9x@Bm(q YPî1n!lPD% FDBnGo`%m} LΑE CQ? #;z`z ~C4NT)uTJǯhAGDqH̊U2@ rjP @ o0Wp {P=! e`ot$p\~5"Cd4 &! /{`o|`P P H # {tv@wY Š6'yl0 ؐ 0z0m4%pvp?gH =,r({{Ia p8nuOfW!|`o@G ԇ/rL^ uTpC }P Lp8Êr/b!dB>Q17$rxK@)"$y`؍a^P q.0 P {u p P!b sv>&=18ل@QtN!~ N,Bh p  0lpl  & zYtet(HYN#_fPiNKTqpdF xgE*{ \`@  !NlHٗIEyaPT`u,0"WLi4pSb*8>0s@ *Ig12Ni]cr0oȋNyv)0=`9(c p  eX$~MSuCSc䁐8`(A@!iCTY!PxPI J4^AA = 5 2> _/$8h 2`^*X/"&cp P`2#VR>ke`&`o_Xb1=09MA cGeM^X40D"|(e h0JstpOp А4(9Q4W݀B(BWs52-$5E5*FPr칂5@T "Yi3C5N#" !^M !+ʗ.N9 $ pv4"I$C䐖i V {шeGJ7)Rusc|p8SI#)iֺg!_q &1}5RW ;JvSAd)@򷍘䔮g!>$ui:'AkЧӺB4 %U0\0&p Uk$T1QzQ@o$ =+B1u$tmQj ܵPe=k@ WT#cRX w b) ʈX"pP| f=}U Psy43NJCrHVr: *`pcs)F )9PB3S) 8I\@+KHZ`-Q=p,:smq֟TųKN ,g[g1#*u37d:+(~ApD OE+ 6.9P( 45ԛbP pieQnvviPrLi$1`֫C:L9,g'd>+p8좊bqH}P` 8 QhhYHUFp Қ0IE4!22 Λ{kMDZA5'sBu72P!N*G w` `,. qpZ$Q,rJ+4ӦzZ|r+肢 aq [ ,hU!s{ U8ԓr :8{5?'1?$K2"ysMEZH0ZDZ =IH<|Ӑd`  H̄@e`P < C qB{cEt5Kd^bQdz¢`}!' p(Jf PoP٨B<)~N{p w `/ cĔ,K-V|8ρpAQ\Q N\HP=pAF dYd  q@AWo3=0 w 8<2@ն@w"?"/ GS)a3q3;7P<уYsaʱrD?5,>2̳T!;}#$CRX ;,2Y3ҕG,ֳ@Ͳ8v0$uRe&"5UW-` ذ 0 P!Fpwٗ~#];rP֢1mqA 4d"@S@vzq0a16|(]`4Lx)Xf*SWN`;wah#L29DBYKG{RH%MّǏ( ̑A×Dul?EK^}΍zuN޾2Ϝ?G3%͑9߹Wx$W/kaM 3DJbdճDZH-_ƬyB5xDB,=cF uͫgn0׹ eGy8L˗j;խ_Ǟ]vĕOk|)* BKN:u9D.AqP0Q(B0瞁SCӍ$9ǑQG9>@9.9{*1|$ 00IvԒƔ;$'EgVY2 Ls0=nA&t/I9礳N;t2A#$7% M">!q2>nu6h!{4UUWeՐv0ApJ&.Gqx5;GG4Zz\UPtuIYnIqے4 ސU^^癇@E}aks-HjuHGtF@ݭc{I'|$#`űd0)I4фM&d'(ueivO֑ؑ:#A#{#s̡s@4ܰ$KP<ȣba h?wvv#H!PCeNҽQ]' &Q' A%x N؃=iddtbbDr\dB$ z4T~7G; Rȡ4!Vpln$jyV"$n$'' dʼn:|Pe Nv7{#ijqL Bf9Te$yB@-.~kr\b9^ '*欀7E*Vq7 Gȟt[tP?q#0 o. m$$%ϊܙS!#Cq)Ȼ;RQI3G<($.9X:Na|83<o&D?ꌲ~~ʑ' a" $4 ;!Otّ #1Gѫ#V?rT0(x\REqc)HTrS*I.4=蔧J274ܣXxD+$J)KYS;X~p?.zi#șC4YR6hX?́4w؃i`^ $DQkQpA7A|d#m!IŐ=1fAh``HA*Tc4=$q9{ @sŰhz*V ItZǠAev{^?qp\lz} '&X'PH`- sP@G{!$=;1hQA A22.EDbH=> n`-5\- qقEF2tbP֓5 .qzwwj%=&/H p4wa E#K:tik(P+1K:VC.du2ܻ#z AvHVS,+LG*@䠏Azm?+N9A$S@2@҉tu~''JtHFto=c8XGT);23`?b!|f [*X$X^8~gs= echq+D{R;y=nHMP{Yy3A܂`b1BW{#x)$v\>hpRTa~D耋Rx(G9cNGȺ;2'CC .#veа0$La _)!3?;#??ښ] dBxP %0BX;a+% S@9¹6Vx?+ΰ#(#ڐ~`B: pq5(Q " )1~ۄOJؙJYAb@BB&oD~(hFX:=hc8f#'Z(_|!Kh)0~9pirF6I4kćq@1Z8-HhIЇHl[0[lU0lF%TpJ~Ąu@8D(HGshA_QIIfj[qFzg0)0fh$e]S=9ڦD, ؀DddмϼWA 1OBL|!h8@ \ @ t s2Bh5G7DÒ&#IExBX_S;/zi1=:X Fu?zITbp&T8]y8GP/p4x$"@Vmz@l0=؃Gxh8ǐxpȆ2N2+XB8c0x#)G(~].@@I0T<@G(̄xOd#RPOOȄO@xS)ٔٸ/R~ʡTe|GԎ9q rp9|JeѿFVнGx&O~(v>ˆUYUPZr@~:@;EI>UH4$@%"t('. i(0h0i,9 Cfc7+0fxGBEX9 rUh!BmB܆(AA0c G9(L F;SdP(s߅(y.Pn9&}.ZxR8>=As@>c #눕Ma oiCP^sڶK,m>>`U4X4A*KrtE]{H#R`E ^F`gBsis2HQtx U!X1.%MZ/AHPH@hD@ 钜ˀwQ@Sb幟EBV0:vЈ~PD/OgZ?㑲H48:!^pc1dy20=C{1|dPr4(@xuP9@K `)S )t=m膽F9>i)ݯtis %„wc ʘBf κ0h4ȁv$8Hc ] {a]~9ClIQ|AsX;]%4Vdm~E@؇ jXp$#N-r[HO-s8$/"j$U$H(Y'H' ܔK"H]>S~2&(Ȝԫ .YkV~n.2}p  Pj؅S S腽! 7O%N3nXo2-D@:5aC&F i}@Nv0KQVvC>dLj0uK;Xջy6+xU.ZŁ*:X$hݖ_2\oԦvΥgƊzp2ș2 I#؂ l͹cJFd-Gt c1} x19dWdŘroU<(iٛb%V]ͳ@<iθC=,1#7lЅA$% q^`gCАd892(?0QhNt駽E`7Vrp iu?bt'Žh`S(gU1rDu`>>b8DARLtf0{y#(ddX+1}jV ]Chr$.l"0?=ȤLr )mG8Tӎtpn%k&o'¿pNXA`| H@ r__Wa,Ңm~ǔFˏ>eP+f7C#p~7@Yȇ#Cc?$!vT܃䐦b0_8ΈW)(I CO8 ߐJKzV٭ Y :MЋ`M0i@Ҧ0H7]:]Б D(x5O#)T:q!hh։MF:,p]3yRh4Uщg=S+{\qݎ7<#)KnKЉ5;'$ސ sbإuQ @>&n1wV$m@O; ʽGˏ&Q4|n)Ed;K57\/-Ky'79Ox$*>Xa0WK „0la{Z+7rtH:>-ZTI&M*UTR6|εW;w7 ϨsQƃ2mꔣƧRf3԰bǒ-k,ڴj"Mq ;OWyǮ-v3nF 8ڥ{: 3.mz={xxưktʀhzs`۲lSIF(aN'P;@ΝR?z^x:mbZ8 3?cmOnBG!]z*i5?RG3\{Q#S`Z%>А$9Ѐ?ggA>Ji(շ>L4Ȱl3 YRa;0s64r'7MQ]z 6=S G(MYzO;1zAdnce}+r,3t3A:# XS2T:eq<8P H>\`Bo_ft=쓏#HO?]aVCD9 BީwC?c:S',HBNCkDQ CJ4 SP V b@ !@?9Fi5$n;UQ?ȇ:ԏDX VC>'яakǡaI$"/^ |cI)dµ(|LX'|x+8.K%ibG6DO>[G+8qa{(<$"6rzydrpc)/(}%QP2U!<" ! _%\. _@bx@2H'vDXN(mcH--0@(p;X@qN }q|or"13 FA RRIAԣX9Qvcвi(tq_:)JIh# AShg!!ɖ4sӠ*W|.Jh`8/{)MIl#B"sC KXb$Ag02@cSK|s;NGh(7ٸ*!)4kr "z\RC?1t*) CxCGҸز#;/qQ[DGx賈?|]M^|9pBg8M,xy! i(38A`y\tȅ`* `V$HUyh%\@ V",aT!ak\ G` 뎖ю#GB=k *#>Bc8h4%C?xC#A#x6XK EF> 僳Q969=tJ7A!Bp% |GnHBFᥜS؛;X*8“BaT:(9 C+|n^qP @@4L@CD:TT9r@LC^A8H( A?@Y@A`f6ML]?l,lB_Θ`(A22A5N4Jc !i|;2.ltaLC숀2J><#,?͟#L@^C6xBO^Å"mײ bS(&__8^ءSHe>W$kCM@?5\e=%p*> 'qx[:t\ASxz #lM"U@ <qAgC,pb{Ũl;@9827C|N+&;H$9è_9D@=^(ueY+^]Y?C^?HhJ6̏:pL=%C|4@ p.g\ tEp!,V)qB2GxN0e<(h&B6:X$(*+CЀ Zz$ǪijD3\A;) *^ =dhC70 '0ɔ?ZR=0 &VJ\+EՁq>%J!R_{A*Lb; 1?de uF~ҝ-@>u^B񂘰ٚі 9+5E/b @PHDD9 kVGC߰!:X]hrAPfAl- lCZR*yg)FAϸ @ņ!@wH&l >rr,$[DڧfS? " 1 =C93A0\h`ɸlHC<p9@ kR؅2SH?KoY9B Ub@ :eD  FKn-/J$XD)BA`8;Cu!ńDD1(??d#`:tBB,A DPjTp96XQ9vcn<?QiH;/v;6 P8g  $Ȁ >(C2B$lB$d->9 !' BIII, |*_a `ANo7G)N1ЙkBF 3T`3ŸۃA84jVwxE>P%ME,,RCA1@YFAC5,T{$މ@tqr<^p>,d-coQ,6uKmB0H: !uOp&Y9]]sta EDq[94xW| 3UppH)؁8OwB"U44fb??E"2WB@:;&m֯"C" 2Xs??`C$%tB'&`B&lz&hl, $xZ wM΁-%/@ݒ|teG@^ R4/;Y e=A.΀<|DqJn: `B4t[i+ T : E>ο |r^ !C0P l¥chw&ȼJ*Dɏ!t[G<`Z /뀅CyՅAXBqA% D(Qg?һN~te('C1ݛ8\2\$-eξHͺ^U 8x48DߥS";u&'İ'CU}D9_4(1(Dn`5l9l@ C8z'l&̯|&$h?5SOR:%%LX FA\U%.m,mL/`:܆ݿX\M<@#rM<o[H @J5\s4\aIdM7q^L1o\N%֛_4U*1ZN.]L6kN&PLƕmEK=GueNDRr|҃"Oz D,%Jh$H@7`^ۅ|Xuwo߿>ot))`" JL>pHv쑨/Bq.QEL4ykkHى{vH=R,VxAbb2K/_P sIHJH&۩s!E -CMtsGFxD CTGh@}Ad#`/EorDA't"5&Z Mc5ވtIԜvYeA(dM4k;P! )s'EґG3-=1<0hfA8Mt!FXf9@_2.Wt`9ՊTA"QFHFa~tgy) ΡndSG1hҽßZ$qP'ALp+jkgHAb+ѣZ3)p/:<^:DYh״jeehv|yg(Q?$YΨ僨%rV=G)A>߁ޣ|DqxPD|iSN0A|mDgEa/7f=~+QHR!+}9,;icA1?~*R LH8G?>jD' n,`L#HD7 כv]R:$ 4њށ#ӗ$H=!<1bft$P?7h(yCF²x.> vK?q .P!8X #pe" bG62{4Q}Pwѥ-KZjq\M,N$٪J0r'A9KV0iN3a4ȁ'ԑz8g&$ '+IfљNuKя~#V#:. q?ُz#w`?azE1Qn4މANnY ` FĘp(h|أcCQ=-NJP46-½ppZsM/U}`' YhCY) Y0D Vs#pL8J(EdѺD'^p0%tKDi nD9jNs:|10Nю"F>F z7R<t(@oD$自y553<1̣X(援C1́<%/ ,J.XG>DB\P PD?q[XzPE5O7"ݎLPp&jJ$B,AfljssУ5׉z U/M܊_e 8GlO]QQg6 G#Ǖ|rE6JEʊx y.A sPcH3i4p^vE<*ң?~B Bùᾤľ}FC&*MDaD&MWAtܣGʔQ`00~ >,>nؗ|c,&d_A>0R7j>ilFGb=)&!(il,! z !ϸ, u|V#l1MNOv&B!<5PQ H6mRG|P"nph(֡4Zn/^(Amn闂PH0^-zNx^tH(mO@ Xc6Pa A`5X#|K$a\,a 0Kr J| J<ءlhjơ (" p fqJN Mv{9ƦQLv*cREJdAʊq>-dA:!%B-K""[`.0[vbHh 8*d&kcEzyfb`  bqn> JA!%AaI6Aԁ 1'ur$\ albom/j6ԁ9! JFX hGk1ORru#$pRdq.#N6 h~a E(jpp"LTLNa>.FDmdN]Knqp7CA"h7 bavA+A\cNb=J!"*,M` Xi':CQ6A$j?rPF *,T+ur@Nu&b.c'`k>I@fSȓ.tR*saVa!`y/?P . +,2 L+\!2;N..AХTDE=$ J.GF/G(Q8$B! j(Cw"5?3@d6CnbD\jKNw2"`/ jP P UObЁEi, FtߦXx= uS :58B"`dRj.Kf"L̒aJSiVmP,*0[EDdjl\`""P.N+aa ea2 L*! A6A[?a>`S=S",ʁV.00-\vbVs]=`]!"6]gV&6,W7S UOd 笮B6C A`4e 1A\+"y a ?0& @N 4ù^K 4DuN!OFB] "[[AnA6@`J-.8+!6( T &b`A*"fe6a*AX8on?`(V#]rNBDeiE!VV"#b TaP*|b E` x j 4 ^`#uW&l$4^"AE Gr7BV P߀>aquUGp"rc4d)sIq<"|*]-^֩I!"jv~tV\J+%Z(Fxm̡jN5I4^%&J6PPu ara5 }y F!` !a 8, RLH*b+BA(,`(",B]‚-F&j iFVkwPm7C-Z8d?598KBʶVV6LR _AZ8mBˁ! y"^iLOa Ua#pxf#&7RYo܁aT㒈 `  !   H zA#A`fpf'4M)$~b]LD.pJ8_].ZQ#j+ZuyQHmm6\!6;#2*&Ie!(SG$S%B?aU6Kh! 8V9ql8blcry A$hx'%(b""*+$"H0)@#h ,)hP40y  ; ܠf ` %Abaa:+& {6 N 8Ns..v6T$.4o;aցG}x1 GA:G3AD>LEv} /B(ꉈ+LFnIGmbhla%z-MAZM!q"JJRxQ#uI8RARiI`iĵDI@NPa$Qo6vjZ8(+&Ql$^Zz\LAz*څpUGonv$WgښFAx*A!{BE*:\=3#B&tfAvw1QDkt>M.HjoAw6(%;נʡt8l\ l{8ƠKؗv<"n|h@\v yV` rfI&!ZA 8 Jo\W"Oaܑܤ %u"ᨥ->nR6>&䁈l0WC|hJ]4>Ԋ2A vK N&Qy6!RF4j&%=J&N*Zp$] CCa 3X@ `d `Ơl`N[a "c܀hx " h#)H}j @]B8EȬc A @ x  iffnq[.&JOFc^s\..]ΫzO Yͦ5:AJA`;qelÉ&Zd>~>KH&L<L .Ti1~ճ0ƍ;z2ȑ$K<2%GJb4xtQT=5CGVsz DBD@B4X eE4铇H8k7\*GC5 8pG`lXC8qP+)S{s$ԮeLHS,A(a҄{Ӧۘj܍ig.{sL<:sͦia2a4.>tc}ҩx/i;w#M4죎:ե\>AEaWG b&HbrN'|@ $@'&BHdFdJ&.)SF4B%pR0-q442R8CN*T $yTHS' gB)@P:ܒ`?_ Xe΢"?Oz-q2%x i̐ * mA|I2Ȳ %PR'|,,cm T(s=>H?ʸ"P[we,K`\F -# +ȓ;#O>`(3}ܑFs)<^χ%h'r3 #`J2b :jI&t 6R&Nr9 tBM|?>2R#xH!?LA+E ^U9GfU\ _E)TP f FbA&:)3<j=AO=O?CC1'$--52,Ԭ,"qD9C(8҄+Yp4H<2RɬÏ}bs򆨑`x^ S!=#ijτ#)zԃ@D1l}c0o?<G51~ߝF%liUo4 o(4A$Spa=xةP 8I K x/ ^E/7?v@jl\8r<|9`h>h() i`;1 rB<0!YBS1\H+K ob8;ơAA$+I&q!9A"cZ#Fyd"YH2α<0`>1!b. ;DOAT F%!R'?)#b6p01>4HFN Y;(#!t$-iH#ypIQPs?yUXe30\Q@Ap8E]t*KgqtB쌑d|(19IhYīJQ{L<9G"DbbP:;ObcINbFNC0/0(S)HCST(_5Jt.Fz R)pgLcfT4#u&uTw ʂEWp@1IA"H1}_*\y+A`hG<4F 3 VP1q+4z5#K9AOmf|aT+0xEkU:6d]?a qxANb EpQ|d?@EƤ -_wY$-}bpQ`p4 P ^0=?|iXcUDՏxLvd@2f Vw ,'nTqHRhsp`;] e[ B{i:ю@ nϕzG z:,tP"dqI r9##PAB9X\4"Af+1C"TXA#V@2a_l؇9(6" q. >.Tvj4 `S7FwV }@D9=@U\0]"eA8Q >Հ&Q}F 5kN ,fL( kp W AZ_U4qpr{T{8dCxef%6kp܇G@c!7e0H``~e@{ @@gMR@:59Q.< 5PGE%HGETp &8?` `USEC(rPlG'3VPZ%[e] 2T `!CLA{`pk 5 0-p 0TߘY{7``hh`` *RWJ9 e T@tqUVh2Wl@ -bA/KɔKiS}WU:` !LDsh!_p ;80R`"p@21ocWp R At Ss2qD XLPQ<~A<}bet9P w`tp ǰ p up F1sB9e<3}pؔ׉s'EaCEAFDb yϹ@淚AV0/w0*" @osPWe~US)2uYCS!LP`@a!T& !F8*0p Yu xFFD@0zω. E[ʥ8l=QS*@!]jƣ-$  RZMkҠ & r ZgRP tQ$q{|p5P|ڕ@:cs@19I51 ` uxy5k@@ S)#fJ@6RFi~lۊ_s9#\$ \Cua*u`j_ІѰV(30:%D8p"`p9DM{ɯD@5W o lWqP p SM  7q7`%$@А ^W+e 6P R*"S @OՍp6SzK .ZY*s[4(F g@9O$+H@:o\HEF>bjځ"V??*\ktjc4 {@u$*h5r o L [ck1=I@\`3x<1@$0wP Ȱ(PNW9D01kR.i,Q b~}˿As< gp bտp bn! щp @W$~" C?f"J1 !)*$a9շ)a'kPsn\@<D\L_@I58Z:|cH!4p~ԉ`j`ɱsL2!N76yulCi$@ 3.,. .d"4y(@6 pga%y 1HrS`@ @?t[P ŀw}}c1geO@'6}'JsHhEdPőKbW4!m,4iTs P:23;lbcEpqVwFFd WkL&\! rV5OfP`T&@g*@ PdGGi$7x6Y Ü'+pD6\>@KdDr`FhISsqsoI_ aM4p .0  @I$y*T{Y!%l#L3 p>KLY 1 РŏpHLOQDHI<\LL>` s]4fzm7*ISX  6) m$۲q{pD]8D>pt౰I `SRc%`zF^Gp@s9H*K\Sw*` F@$P`aG+sGE6"0bHǭ:@`y-v̟p0,q {At {ǎ` }qpNaY#BSck b%}&A T@+pPkzz$|:q< qp.L^¨ Sn臞4pY0cl 74̆x oD "X&=Pu@ pp@ ?>!l{u|ZtNk` p%G g=wn8xt 5(1',GJ H6 )a]`dM ϵҽuz=K\ t|ÀFxxa>P\4*OF/>ܾDPR0/$}LP`j+J͐D#"V"0zNE-9槊p@(z98䭋1 Vq @a>00 0 lҬCP{ ,z^/p Ul9G5fd-&C7yy b:߿w[rr,IF{ LP 9}9tB o`|KY0C`0ƾ#QuWC$!ilpF$9P `S+ٯuGX R@[DS"|@k sgsU@Be 9IеPAu?tMHE4g!4jԘQI5rhn^=aY͂)S/^>GǓƉI2o^A'ZUYnWaŎ%[lV퓆9y:ң[Yt;!0 ʑG3FLYƊ:q_zys׎P?81<H̚?[߸/7^,^Xq >ΞF7=M `m۷qTr2\m|tկg{*Dv6BowZ|F"1JRp|ě2`ˈ: Ct42!q?FVxF\K$2ܨ{pisLq$xH*J,RKuQxHb=4n($j8褂px: 12=x 9JF{Jt1'#Hx8kX),ǟtrHsy*D! 5tKZkV\s5{bk45zֳjc:"rTN0U/:L):٣9ּd j ~`ݪI&G/zH^PFcRC*I#yGGYߙji"=q#d[ecyf[MgLy%~gN<'GFAa_ 5rVgh+Fx#X/&|Qo>:hͧ>z b3 YdXrF NJR޸f3|sfjȆn1tQ [g}u\?jfyÓęo"zx()vGNѦt#]sZja+mi_hh~+/t٥RHn)g?/*g?]vahs d`fD Qe q Wa V!TO  `])a/1 9a3 63U Yx f]Z 0<BS{э*.u0A(+1Wq ПAqlQcCr4M:=b+ jCS]Y<§}d9EoD&cM7IAR2$VWJT"|6Jk)Y[_+UJ챲 J,s Ld&3K1ES۠ 3q f2TfAiovnf7yNtj/C;q}c YC&r|d$'YKfrd(GYSr|e,g6 W;_X ,X,&&.p=.TƁ B!1Wth̕i0cyVF3ffZӛ3 ^ŐuWv` @m `AnHC|ebj9ނ !Dkf, vO|9}mlg]|~j "O:k [ivDj@H~lۄk[ gxSYY'.bqu`"@wh#9!03 ahNFLy;\3yA'+ά$` SX$DqG  #wڋg][7 rc+8𾉜@;O Z؇>$~w]S)x ~CoR eג߬A&yg=yc&EHΣ>g[Oz}m/{~Aw=g#_coCߤ&?/Ftlsz#5!{>]_a ~˳:+@< ! , H*\ȰÇ#JHŋ3jȱǏ CI7k!f˗ i#y ͛8sɳϟ@+ J4`cZvEBJիXjz5`^lBgf)6VȅKݻ:;]j([d#3_JL˘ :@RgfL a~Xs.C#gMSo|6@ 9q䳇2y^μ緡KW\6p0LËOaS`9Z;7t_c|,E7ށ&M6_ɶVhfv ($z7%,0(4h8<@)DiH&L6PF)TViXf\v`)dihlJXp)gEC s橧矀@JKA/@BF:4Hj{Mד0 P T驨.'HwINZ:ZŅ;86@^Ahp1p Q+8"S6TF0|TB4D ض? dVuC~ @g =D4,Ѽa ːT@:Sv)5rśRn@k?'M6wo?^XqA\@ TO( " /}v u ֊liC68N 'N2WHo,`VBb\XCL  .l)V`i6`Aa"Aơ 1y2$ d#(SH4zyZAЋ8L"2?y8@qxÑ$ÓHAQ9$ 2>%Iq#.|AoEd8$ JWr&KWrĕ8.bL`Jĕ\OaCf6ҋa82shb8չaԢ3靃|0!`2c C'Hj b\1sgL%gBj bt g/pr; FYgD: ~ '6YSHT=9<1HM*A|@G\G<;iG1eْr00D)!crBʃop s$'C\8CH}at(# |ض@ @h r!,Dt˗Ȇ9tQ| >_aZx+,4@>s}]8,H0Z׺H>s>׹#*&pjNwr:@/瞧B!OdoZIP>8>pQRdG/Eu_p4i0CT8H/{یR腞C)0t ~ * %c}?^ hGz1#@?`xAxp"C1HuN4O{q#?AY yy!1?JB<E tU)R|( &FG=P:G*`A@,N"ޚ"X2P! X$_p CW4} *8!w^ 񏕱%*s`b 4B)A<>neP0z i;>g w=|97dϽ5Cr:\X'qnts%RH5Dx|B(:C\c@%nO7Au:DhT j 4r 1eù8-< R}3c_!1QtC݊?q^!h@A)zIQ#G1 <#G?Q"~Т= :pb3>xb G?u&~t G/跣?pU@>b9SpP ˳}p =`|bhsy6$@yn |lVl4f c<~A&=ЃYFV, kŀAShrVJ07@rwhhrU)@+r`k f uPgt4@90 mn7$qw{ a-& ghfivn`L gkWPwx֒>0w6ufh` ?f >1 As0(vs@okG|0$p00p-2*0 ezAriVFz {P! n9W @ h&az` ug=0\17 pv/ py68d hؑMfVF$`lo7ғ(y.+@`@H_8ahtpf5P)P' "-/0r،qPctiHhfp o`?kR7<\ r/nH bwِG=_/p'D,E/E׌/D krfǐgF2 FɔT`opF) `_iVztaHiGf&E p @ €  9ih|s)@n_w7sƋiv 0fIwvYx> / sV:nIK@9/OH)s(-8PciًkjH t%0Dhyhs0\xsPoH EPhH,_cA\HU`4'&f pi7@ GFɐtqЏWPuid phh5Bu]xF)@06.< shx4U0QpSp=Wk0W@9S`i\I-ʕ:҆gїmRnİ@ ;)y(0  x2Ɠ cQD->d„<"lСȊd8o9dۧNEM.Yo?OD U &4s}H . E( UIϞ̚]~VXe͞E;6kOpT5DW/vi?qg*)~qÍ$<7oE!oǾb=OD1EWdq'K|Xk$Xnި=(ǟ&ɟVzƯH#~h.ˬe;'EXȳG4pxFt{ozg0K ^= hIǝtd%(œ~hRqjV1қsKLk9k_⋝L)Eɧ"P9`b:a_\ @Xo!4Tz,KA< x1 7@v)h9Z+6ґq#͵3|1.L^*o!|B"IUPjj``/  % U$|FjB,!r(*Bć# ^F Bs8?1=:&qIH@:ܱI&`.+H~~|B N| W7eXec"iH P9 \@\dEs<8X g9=fZe2ә3ljҏ~|O¤ө`s bYϊ\I2 $\~YE=W#`<G52PQ e`8 AUA `P*0 h|ٲ&Ű!r &;q4qYb?ev;y3pkfFfW%8sD1M2R8!l}t5X!9=B7w XAi 3rYCU[ K. J0D%lf'|b1F"9!Ҁ@cLzΥs ĆiZ@B^ W0\CVx ++$P$,1e/GpIfB:)Eh6)R@8A``Ld΅|0)(v":KZcO`R=0F*ZˮCxaДa(HMbgMʄ=Hz31(0DT~ A9+8GE|id+(D?i`{2HȮ C0ЅGB 9B9@>;`_sR-ʭa0x+ *̏tcvb<9++ Ah7}AtEas1h>1R* AW~ha:"2\:4Ǿ:x|C|HSPt4񓽈T~@y;|,*:cre:Q|ňXO_tR0G؆C KMЗtYt`"ѹ03N~H=d[HsJ=۪r 4hC Lrs*ɷ8)"\kpϊ0Sx<:ϊ -{Ш#8eLEz-(!IZ8bpJL\x{.9x2112xRyAQј۲RXlxhqOflXGCAӉˆ𐺨6 4N:X=/݉h@"i!r8D}A3.57Hd'3q>؉bp"MXc?z) 9-D||1@%b@%zЙ25`gX`9.݌0$ \`Z((D *u!N[అ`z*G{e0|5-9 8rRP!N mҦ44Wi+B{ ~PQع;Kr/ ‚@F(>lBEه(#^~O2!T0c5 VMt`V{ ӊ`ѐ VПt7|'9- ]P2`iLr!\cjHIp6`|PA(ueW\ЯMXO( - 7Nsc܏Tv Cȁ<.m""@@AX(?r N +ivo r|vT  9*x*8QZQ8a{8(;@~9qh17x:`ˑ諾V`ERtds \LO \fWMxM`J-s G_x°T.m\@+Y5FӸ@(p=]Hp/98 霪xEq,Ma Ns8<^@$0޾|#L17dinaFx+qhgIPx@ xHF}eyHe`͌I(TY؃lpZGm$7Y(:Z1AOOȄ,\cdf6"d`T؂.>b*>rx~VxVpdi+FIi=Dp0S {Q>IH~DG<$8]x>lɖ'x*ťDܛŎhB8pvX7Ju5;V!THH1u+K-1G-LT42`72'W5Xو+-6mvcV_TKH=auU+Ts2Pp \(Ǣv8OdPfd`fYH[YJ6N/QƓ*FXD/)(uQsN^ۃlImFI@ Vb`b80 :*0̓9@ 34( 4V +Z*"֒ Knb L;#G^9>QG7@5L_`- n`#~s #h8x@6h hȇmss7XSNLr$Cqq}cHlf[0WXlcî#J(_bn,Gb` DpPsm2H:@*F)7RO(V,,>8nYÇCP'"("x)M@xEW CH*Xx=u8Z= so;]jo5 ]BTO>.I@Э6fZ1NePHhuܕ91l''mtyL1؃!ͮ6.CNi #p5\ T({ x8B-1\w{؃ ۟{!U/Z~#r8-ŏw Sto i_]BM!τgƄJ؄ׯca]s`W~~pa Èaɇ0ҩP@A jȇ7Ţ2B4y qTG G[^C85h=VCpd ~uѢvm`*`;Kׯ={K6h%L6mdb&ɚC|W;ۗfh&Μ:ws_|D4Zb4n¤bӧ6.=ttұIS#Mćfٛ3ݙ"o5j@^^3he&LPr|7ϝ;ˢG.m4eiho^fӦGO5n@WKi۳mv;g߻a㆑icЮilUg/?b s'>PVM %DqBN6**IR:qƍl4 O:̤=CV0PFe 5U@?㏊rF=CzyFNFa^>/6C /a?5NwR7o<=iq#?(9|Μ :(˼MMluVxA:\KU 8䐃Or ?j=+,zP &E@ L[da"9dz"-)ÎܺL3ӔM'[MΨS2Yl22[&֨TBip9ũο3 td3Yni?Qz1Ȧ&Ӷc@\H?'vcaD 80C 5B$CSO:,L ? DUEDN>`#C;o-]ZG)b 2 +ZxNceʕx^?jY`=Ѓ0,t;/[* 9̳6{l)1 3WH+1s=%TCσ) 7:H{:-(,  H'eS&Q"H2[ >q[}bȓO,M(@ BJc~H KX+ NYH`:2c8fZ!20$LC`7!Osd/*ĝ\!ްfSx2Dȏ&9%zp-o'-=-)J89@r@ͪR, ! d#~0"}QaÑCxDL i(л70h,Xi4 @OLQNˁɐtCoT47a=@3Kiԁ9ȋ Y>-utnJ4uj..&tȉ6Rz,-͹gBp}G<)~1G!8R @2'zDPԣhO0>)yy T#G(Nb("`; P\r@$a |`t!a #QG ox8q#A?:Ta f%8 k4t'4 0y.(C+qE5:(z,.Qd"B.1%;iD(t6a?hQ*J<ܬg١1=E5RQ`LC$Yޜ P| "#"hsf1B *b#0 -4J>ƟX =v@TF)+(W-j$1 4o6p rF>"=jɦ-DH bh8@B)@٭oVToeYG4hNB9 ?1 O@E4*S6x(&QH6G(CxW C̠uɇ1{Anq|1:S4jDY61TT94gα DHC uSc7Jo)Dx 2T2s(cĥ0Vp N;kg+X3Ekp(b:9`/X"%iiHhC*lAg©p` gij[5u`#Wvo cb>8` Vpstڈ 1-Y%-Q #wCZCC6,z"?$aێ " GdYD2C3x@JƒjCUp;8H dH3ofdXNF9$"D< لᕡ`pE >m5sx >i >x'067dk1\J.zy{! #?˓Bl(L$g.N@0*QbE%?CX9 2I[^?+|ef,D=n94D;\I4:h14M@ϔB4:h2 .,8CLa-'8i8ZX!} \ DрGC?nӸG] C8' 6HN ?$Q& %ߎ-`( B2''-,0E(.@)XA%?l! N>>0#B"(P"6C(4CP0 >(ID.Q?b'%&Á$'1d2(&t |?D Ch( Ȁ(B ЌoH!b|86<9A"mP2A(CC5R? h` ;PY4\`ʠ̄?P.2'%0?, NPT <=V>C{A;4bS"-gF yBˆ&杍 @؄잆P|76J 4%BLBN#vB$Z',\w;9H1hlA H#|LD'O؉< A?˪9@xBN+<#D? ?0 H?5sM]7(C6#aQnQPAX  p@ !HX"$6°HU'%|T'PE!+2XD0AAaAl+;0 i2t( l9 * FLfjfKL8 Z5x?A5C"$/ aO789ty('xY@Jq gfa V:(C4A5X~ >`xB-p iD.i*A ́%$A AD @l j: °hEja$?CҏKL)B$ &M$DŃQ8eZ ll(B"Ě<&1X<9$\Cŏ4B Fϐ0YE!Ve?\Bܝ?13 T_чQ+HlP5k+!:ԽXR(#:|\}:c.A AA ADޭ;9>T"Iٻϙ9C=1@%%0 -ÈF9 CL)t\"J<5:8hKlL@AF?T8:?^4p%CN,0!hkc<A&.IO>\plĔ*Ou0;[.H[!1 ė[?4,A@@BApAnLA DA<T1, ytZ:=BpϱDDK$C: bWU;Ĥ gS̟! `py9Bko(p?C>Xe,آQt*sq$ $ E5 ԁ4\)pH];IL.焘B >-, e0 C3 1F+?<'fN>\C+%^G84 `ةUEi t" 5JnQs0CΕ`"Ξ<}jOKd ?t|>6 ,BKUd*(\Ȩe+ȃ)ZZl4CA3 @$A$ Ii A. G?)C .VA!Tae)P $Os YA*HZYïy,Vi/߃wA g;!D/'TPADgCKy]t/94ma ?2' g ؊J>6G,UlGKF'pw!h8<2C4CXqj) %2E-IgAD>)@N"'T+ktw}?Ă@MH?  %nH H,D8A ?r_.X]xtvN̑Nt6h߃?P.t6kg?@ sIY$PTBB؅;ɤD̊?K邊s=$hM@ɶ%~K߈% =TЍFD$APy$4=4NL1ex*:/G?A!hl2!1V)FX[@΁{l03,<4v##BVM<';vxYAG. TA"d86ӫNwH+1dÎ7y0F:b ;i22A>N;A,? pD`&xNjkbtS4a_|*N(BbEˆU7N M`Z̷e"x7h9d=X؅A0G@C>b.@~1U'y*aQNE>(EKO0yQ'l;cA L,cT%<Ll 0{0\ĘCgrSGF/$d|uAahL0q,?8D ߄,?j'%l@S>][\*1K~Y_owO>2(BIN:L&'2dЂo[l1h;k{s@!$DL^v8bE1fH#=+H9B7'0W WF7%vhauI%9X'DB hʋ5jv8;lY֪K0MY+UCQs~;MJc 5nG|3L^QZDiӦL5m´h(}͋(<q2F]@{ۇT[%&Lt"u+@1ԥΝO=v{\0g'TH80_{a2 83A6+ޠZAðbiʃ Hpè"(@@ .x 'R@ǟtc1hZ8㤬}u1)SNszιd1 {P+s'패l@aMD"I5JdW"C/bqUh`'IgDX˜tdN2NL |5T$T183zZbƟKxIg+Rh$sIGQ˸:1IPG3s/X`N'h @"h+FFe*fҊf=|,C}"tA'0ny_4nxUH YqĻFcmJn I\aQșgVN1 r8p$CdvEH@ʱ30<] GSĨc XZˡA0޸bqH|x&oh裘~닖NT&jKSbQ'cK]z_7b Kd~门3~n=vp.a>⑏W$NX?)A!V 5T]1񜐙Ç5H33I<f'@H#R$+XArAs01DʱpZq J`RH-@JP ) [ًsEnZ=8#?Q5W`:qG,z |"q9t0~ۇ<ȡhc%dHGK\it;rl AYˤa0q kh_` j`{1}(HG8!{XBH  RwN!W@Y`bH<8 <?{"Ҋ,Yq~>* DBɐ6"n-XHlBzH=aNJL-Z9i&ʁ.3%p &J㈂ dMvC9<8xSD0850>YojOш7!8ڎZɪq ra@,vepqʖOJG9ъ=e ,㸘0HMs4"S9Tt\}x:S@*AxJgF3YAA`E;1Ct:cwW0!GQ `YA~hpJ# l0". A U"nqv"Oy砈[%r~{_b\I)Ĉ15Xz 9&YIoĥU4?r,{PSlKq8 i0[g&} WP&~4] K`kp4#6rЗt8 ̓]d!簛 rD2@9 tP~9 aVŽC6YF#TXɪ}򓁨pcl=H$#,qRW(-|O YtB2)=Q%0ya>t-#*֠AbA,Bo G!n. XfURe Te='CA!`n0r`TL\%V ` F^ R$!-!r4;r0a;sA<&H:#.8 J(%N̂=` f͈ R D"s `kaZ!_.8^!3.!, #d.DcZ y_BC> 4h1&"^ Ib+cPPc":H;3@$̃D\Gc0 1ddcߜI/$؃*E:n-e `b~.  )R@R5E)!!Xnsr5 `!6&'ap@R Ȑ 'f=  RAfe.Ċh$nDaQt,$iP8aʴ^:8h!N fRt1^ r nI!_p A̦&-H: $h^at.îC)ND|h_b(76@!M Lz e-HLB"+ aATAHsnB6!(Eġh&u߀aj-''.!HamPO&G&`c/80` d !9RƄĀ9 z)3Bu߆~!`Lƀ`KrE, LI z )/hjV! GRBVAa'L⠷2Kk0Av1-qa~OJXbc z xfߗG~IdnX X`:(,$EdAP#>|k A#,^g]` dAb|b00@LN)Gw䡧!J"1 .A8a(>yap Mc.czw69֡>&7$&sIT/20iK0s'F/`>f| &AU$Cj$}D".cԁb@ AFJPm8ahsk@pB<j%N  H3@vʁ8Rg ʠv!padT"Ad 2 !6FcWlVkJ`b>Sc5'JAa*.)4]+H/ϡ_`a4̨:AYD!JPzW0a(}B'@x8 Fč./Q0q"vV>ġ/,P` _Sȡ+!RpBl v8%2$$y mQA` LD0b "ұB:J:{ @0ilk׮N&dM%5.g{pPh(sv5kb,أ37偑/Y\X!zfF0DV-/F֩(,U.!~LI>*oB1nJ%%B=te'tAA[:UB侎)+pQ  yptm{%aQr(YߪpAK pA"UZ#dT^ྻI &A`@ zAXH:z7X{p<,@+.M {lad@Zu 9/HaE ojrf%tTݡGc"sC5FB>X#bOZ};@!0c7`jK?Do Ii:'n!0"kožZAEƠ$W;TBn%wϻ1&a X✺4qa.'>!|jI벒 s/EhjG޲|^0̷L!A"h"E"Ay8PCb(JEV=+@+vUJ]V38A[ͱ[#9c0DA*dVa\3%08PF6-s:Nh&Z'?#D$+aa+-aV)ZUA<8,RT#U,y)'Aaz"@A"Fl0mA8_L}aԈB[a&P"(cN?@DVy 2G-bK=4^"Hb!cJ"HYicBeb"cN:sO>B=A=&БřhTB)O9(玏0%J(>(:TSkR;8Pi6e/P91KDI@?L8O1A9l !O>)pr'{`NE%9?킌? c&9x$:&I=zS8)TsL)+!3.;39P?hU&FtB㏲9Î:!3 x" QNXeLpZs?\VY &,>sVRN=,#ԢCd<"ȓ+쓙T? mR@d ?,@Վ;nb 3?,t/3O*/ edRӡ$ݵ[=[(w& {A?|TD.%:2JPfÎ?`FV :5˸*Nb84/|s9ɋ1H?A5_C7b2Դ7Yܲ*(c&P;c("!}L.(f豇2:;>A R FP4c: 9%[(~Ip 88 t8Aߖh@d|DRrcAVh;xP)JՉ.jqZ(c.¶B\ > pxzXD'H{nх; CH*yS%/ɴ .]o#cN|%8e#Cg1H7P[,]ՏK(ocdmiICYV#Q5i8@h/ A90o0ʀ4)S9SH:?qjCu\qn/%PU#s#|L:ѰdGpa A>BcQ֣@;v+Q MSYp ` d-:C̨J5GjZnUW#Jd^ q@:"TyIY2>L!* rF@.2ǎu\rf:Pb,:գeP2r5S! afTh=AGf-1:\ ,sMm ʲpA7\XtXC"8< ]\bY1CGkG94cJkFCuu̧a&N/ab8"8-OZ^cY ~d) <z͐pYþAT+鵐MU?៏a t bGUK~)PeBH'+ek5!*я3"*d1dD1 l`*Mc"c~ޡ>i P^p.deiע?LT(S)H'I+V~=D4HVL B~^~fʹPP?7t@ d6X/++`g 4e/uS3pp@CqyB)@u@TC|d1xVcX!. cqg'a&pp*.GW2qPPz w 0 p _ , 60$("Q|C) (1 c F ?( GZ0c+P 2r L |Pf`t AopȕP T= S~?s(M"2sr'Q)Kp4At eq9%P @1$-q kp`1I1#X"y? zC&@08]@ p 0jy,*!Q)GYjHwE55s5*[>玷 z ;Zdd醕c,"92P uP|tpRJP s # 2!! C i1D1P:[r#HA'(5?Q$jgdjo@WڧV,GgJ{y*p "kـA)kF^`  &Mq":Xh7ƘspI1{Aܹ|q- z d  zU#ф/  jp {0R Y4tP E3u0&1&Cr0 m=Cb 8R2tJ}I[ZP)Чv";ZfЂOD?Ó{ 0Lv$ 3j4)BDEgp004Tt@t!X U1A}Uʩ7 H1y9rXWN$n=YbIfձAp=h p j8B+x@P80 Z9aʐ 0V!%#Vl:J &el`t2l'!5ou4!p SrXcr-@ 0uPsp )R p .A 4 {=JE 0Q pQP\pHpۚg L+@':lv'Rs+oc0 \.2.ն C`08AQ9F! 9P Ӡ;3j4;*֏Ŝ-Ᵽ$ 8>TM`t\<PyNM1` '8 B'(c&`0Am;àW=pX8@>P0 pG:Ȓ 1K` {0 rs jvc?0!K@f˔n MNh\yP`A=@upls0~Hq=  C bPIی@A`cF/;S86cc^ ٲ,ⰻ>ȃ[Qxr; [U=6l3y0ye_\M'8nTr9(XAt!/d\$T``9A]v`>@'?v225,`*Ȓ+Pp#\0CG9@jW7a:cs+ 7D0ny0sO(H\<ˮA=6b`  i g pBrp"rro&Rp*; f;Yb\!T \q- O` ~$00gہy S{@0Y j<| d``\+0cp z*(b&:v4 *%1 HjRBI@$@/0e1Z1pg\ʍ @qzd` ,N\0+hh` _0'8d MrFlHfE _ #T+@3j=%h9en0Fz=uP ,pN0 !A Ul϶ n[NQ >S,ܕnј҆ S@7pjp=@ 80qd %=  iT 0)HI D`NHHD 59.wD+(Xs_HO0\@ &WSy"Y1 Q2# t  ۠ 1Z KQHS'TTT4͓<<|Acˋ'nF< ,_{vXo޿V<xK`3 0 C^=hKvLE6Լy'Jn3wN۱S7Ogu# _^z|,:?s :ӿNRyg>TpAtyg[[B l'uI9ňjhfH^qj*">$:MBiBW@#>ȃ@氤9!F) 9$z&yQд!mlb pFYs1K)!YM0)9L2NY!B:Bָf/#,`۩k<Rpa9ux` )!}IFeŘp᧝tn*̨w"jAQ(^0| L' ~f65hЍf!h0Y塄Jh 2G{4hxΉiŌʘ#ǜxC/wB l7> 44P9/>4Te|/Ѵq!$A jeʁ\H\')}[$uf5TМtlV.gR N٣2K ɜra't, mdVH9Ͷ~v6E@ -JI9A`MJF*@@4}Dc!fp C'QjE;)* HFz7P;qr ܀ XA81Beq"k" 2ߐӒai# |q`Ew2:c{4ٙUI0>jNiVH#r 6etٱ6Žz`XyhKfC GF|G9h"Y)F7Pi'3QГ4h`݈ 8;,4չϛfGR~:s#2fAd(פEՍFpup r@6IV`s5JP3@w.wApq02-V`C2'dSӤ!y 1m? SCHHT b\ &C`pTyȦʭF4<II@@9*@@p !G]: )F2HN sp0I@ v(+x ɪ2,瓇#Y wH Pᜠ pn ~ p,`Q&Pt&rXxP"*tc!bKWx--ARqDd&Msz8r@XA?ӲQAK !#ȃ0=>MyD8uty >(4p"Kȃ0E9. 4h'X(:Jiˎ@TP~8+)(b*@_Y@;(>8vI@~@ȋ\0<:"X TX1`|. 9bR:v@[8p!Hi/ңydzhw`tT< GX8/ ,IDEh}D >)! 4|Ą!ɌEG4?̟U?.9*8 -$/ȁ(>)8/H9訙cZd@Xn899UBjh(P(0lltx!ëa V0r;H0K>5F b8(y8@Vx9).֢t0d?qY193/Y-;|ԡs(G8yxS%)j6 0XE1x{ Mc8Y8_hV.[^4r.t(hBB A.޴+s(&H4c !?H(1 ~oovKxVovJP7,pG9ih hSpp6%;j:Tڒ#hx0kNTRвa8*[}b*ݼ?si Hp>(m|z\ӣ0g:;N;1o|(C+k0u ?I* eԶؖ;i0UJȄJOPcZmA^@&MO8% 璘U%%ƒlZ@/>Rgʱ@ 3" FfZ?7: J=%cٰ7hrhK/Mb8 v^&tg buιuD(tuHXA`J`o[pH0G dJ.abV;Pe?iM_ /p(%nKPWQo^z-僺j58D';XdwjHQ\og1pqw@y! K3ІBDOtES^v4OMIMJ0  A-9X *pv Kx($4EfHoQ9 v v$ړXSpk?"d49S69OrsiٌÏ\@fCԷiQw10UcAL؄NFН0 p "o?TbE$V2׾]&2<\b/y9K}͙#0_(y|0.%@dT/>Vw@4*ٲfϢM$tP9glr=3d^:t՛KkPQcF8w2ʖ/cFȶ?ZeݽҦ3N ߿|Gt'I tLϢN2GIS'JdLm $Y8[T7΁S$m߾>ȓ[<*e#e=2]'O:{H!?-ffc `b )!M;΅$RYU%oˎ]IY>0s 0aVZ:" &d&P*3da#]v +BFP9ܚPz{Vd=c "䐧c[VoRd#oSF7fbi$)UT )p45ُC~sH9p4{4oЅl# ݩI& @'|ROl$H*;$m?Ab~!?ԱeUrA, !4͉_)dDiv܊("ԃ?A)0F B hE+ Nn3[a`(sR`Pp ˲ L,06SPR H jdI|y8n)8Ƙ$&15cHFftcnߴEy@r0hQ1"lsht-:1Z?*i-2p't ]+d"~D'6L4:HQ(|r:p;QVR-,M>`pi!UQF $ %!Sgxb4cfQF G9ATc)qRbQ Ak&0(?Qzqe(,jUOyִ  ̲bqp^7ul`#I0Q29HR!B@Y BKZ܇_ h8Y(Q#=Fcvh83ڴ6,a }M&p*@ZŏJL;HCكhh{& xh!W9,E+ 9NvN'4![kW{AE,<CSL&J'ébHhR<HKԠil<@F )\iLp XNKIfe:Jho pʰQt[( ҚpJ "Oߛ`* Yܢ'@ambvǖs8LR[HHdyI~xNK_QKpO%a @" UB>ae+qq  H*fn jh2mG5@cfb6EiF`EiImn{%pLRp A;1qAX|2T[z:~yI/9\)!Q.29<у3_@DH0t] ]jЀHz*<ȁzPU;^C@"KEȒ& dcϦAC~QB Ǫ'n 78A6!<,B2-#|:1,؛1܂|B%OFU>C׌9 E: NS @4,Y-E]0A-ԃQgB#LĖaiV#\L=P]=ָ-A#A8rQAE2 -dB$8b$,T'L'Hb&&#,_s }9Y<Ǣ/8 YhMň?LCLE M 44jY4P )Dst: Y *јCd1ErC'd:\8cC44e,BN]T\A0ؔ`o%h&HTB% FR$Elp\I5{IV$Y*څ3A@@L@/TpԌ;|K< hY 5.CNn#@Y F DC JX[LC|cY =LG?\B+0mP>%E#\ !L SɝIp\ U Y|5)C|Ɇ_ɢ9 ",>PJYE$4)X)5pƱdHGS@%=Z!@a-R<ȒJ]\(FfCx4Cet. \A!堍= A9*pXR- 8;xV=?(B1(PFݖ]C?6"%R?0PA*(t?fmtN3%X&Pp!ER-ӳ!`ͰPT%u՛-,p pR"; @&Ԕɨm=Ԗ #f֔iۍ@?0~˹OH?<DE4@(埌&[<eaZ"?dThFl]b.vT'wNTd&,&D  #B#8.B5|eWn:k1܁9C)tI7#p.x. ͜o ?Љf NqN8Z:9kl%¿dkJ#=8M"8ʢA=?6DL$J D|pAܪ@G )dO(n9פdS0qT/xA9@ eF?CrB+[oӔ("3܂f2@G,=bPRFKI2CUnOr@ 0NpA)@"ڔšɅE`D/&ANM 45v]8 *C)Qie8H2|"Ѿp4ۚBJD]9[CP(Cbr):693:UdŃ4dA>ʪr&޾T5C!B!`?X8>0@(@8Cd̙۔mES_r8pB@4tfሐog9z4(9|jB9C62Z=?àR=(+AH': ̠3Ii`'X9xًD Ao ̀VK>iFS;.\6˦? {ώh{M"Ұc+807:A9IL=9+Q_2\’?4FLR 'r-аݚԄNE# \lk1EI#7[}Fă)Cn>d*K]tpهZkH@\ v}pƍ-8C!d8ô?I $}ݎ܂48Ŧbor8T2 g|Tt'Bj)L6ySX2ًK:j?L2ʱʐ?Xvѡp?AJB1Ґ!=fYV~>9T Jr9DKU:[ľ~@'ot5gΜ;C7cF9vdH#I4yH|3%_+մ'|;|_?7s5s& .;XoБAݫg^C:nR"$hԘQ-uՃQ{N߾*8b`5Ho_V;tebe5wiyw ҡ3dȜixpI2]rɅmJR˕7ҝ}A/={sU<+XpS1_Q'}qđ/F0a 9g䲛bz,09;23XAHHas Ð}LakǓ>{v/Eաβt A᭸$͉ļ ȠΌԹctDgh,~8Il';Xq G$q}9'8|8GTUMQJ|>81hen?Jq=\+!L$b05e.=E=_Quɒɕ!2nh!\h-na. Z~ M)XC.p`hh:TEĻO"'cLxv09 p'%Ֆt;.]nviVsVHH{cF L,bɈIi&%(0.$΀ 0L%Y,ק5DTъ_k8P (9l&z$9xxΡ "oH.2,'f#hH Nl/ 6"0BVA&h$NA"crԸL$ioHv&+x` jA8%Hޫ     >`2p0]P98$`/$ @!:0ar#N^&+ki< JA g Nr.,ȡp XAn|f g ai$ kgF !J„|p ` b:O@x hho((Nơ˄'x*CN/CK!OQ=56!pO#  `"K!s`D"F |an!XR$:ZciA ZA/!M:!ZaLơa4qmb ʀ" -aVz0Į&"*\tF"L6g  c@pOB2!!Ht!hTh!F`!  >*əad (E!P|aN ~z!\i8!`VWHWKq5Va0h7hhc5DQQ(pZ!T?3lAw!NB@uP#D["@ha7>5@U!I.tt^=e$#B8ՂHιtB/4.a]t^g@PK5ߠoA,b#6xj ) r  yp $@, u \ A RX `l Hv' DaIUAn(A*Ah+8WVe3OO=a dlH2.bPF׊#A.aaBUrS !+dGf+p#@Lo^%$ aƠ= [ JtAbA^ci t@?Oǖ>z ': < !dew` zfo@ơoQA`d`@dA @>A2Ad!*3MRxb%h9fb^'pz;<Z#"@NB: ޠ}d&:!iNfWa .T%cC!t-P-܂Dt$@[ǀ` Za Ơ8 Zb2TgA5d-wb` :LKgg~!xaV & X<\X`>2n"aVa&B`aOqT]yn(p&+Za @+['&c;!1mQv `je'O\V|D:Nwn8|"lF!aBǣD/;^OB18D&(X4v0`~ ]a%\s ta ޠtJᠻV`0n# hf9aiˁaAʡ`^a &!V"!.+:*\ʽ MTAhNօթ +^'>(Kx3֛G8u>q7v +A $j7ϿSO:P3=ݣ` "`;Dt4B EհCQω(BwO=1;O0&8 &#0RI8A%褓;4b<P>Q:t]Qbs9H>Ca;бF@JsωQ Ra>T^ tCa>iCC5h@BxAI STjʑM)C u]N`k C 8T1?SI@s $B2/$mv뭫ݓN= r#]? ؁WO4p9`80c&#E︉ 3b;0~+1#ГD+M@\anAti, FH.9DqTM坉 gcVF0n;qԔic D2١]Do0z9bs`QH:q<(Т4IDlW>'B()я9c)$*$"hGD[ޢsAe!D-3TlIҘe!Kv@f"DbaMzJĚRq X8Q{5vx uGzY1ȟg!@ȆhKz,RSah@C6$, H&$ \@賜?քLVu?}#F}$܇<1H\ S 9C.#6q! iH8j%q ~ctg%AEZbiYtY;㧗5^HRqxCJMC=$UƁ) I$Ў|EC<1yt?@   kDhЃ!!&eG%_ UX;B@*@©H S89 j;(]E c ֕+>1e巄Xy诎Crd2yC2هl,@!.Y(LvT9CX,"Hl5!MhpicDB|hHZN3L$>CtD64޹խp~|Ř4Ia}yAXI&9ʙS"Z?Z~hz@)T(t Q)G4K !bA K&60#!HY;ҙo!F2sHFvG tJmP9$MMpBF!Ae0/zpz&P; ,F_#"qnG~$!н"4(WЏP>~ĨS*WAȣj`?aumttɇ7|ĢQ*5U8| [Wm4;[8x%#-Q>a|4G?X\8)+x-)p9nt5e.mG1$ GvHX(Q ub#azDx$!F`0(/@a-!xG="Ջ\ѐ["JtTK14 :k͞CILGdp+`~ W#@ hp bgPu}NCo@ <8 Ր .'~R1xOE.pZӑP fA% >qHm0`ǀ $X 8T1>\3+QaIW" cIn0At0` @ \ Gs(CD` )5X>T9B qP iPW0 p3_b2mnʲR,w(g(pRqu(jR)'2'SDp+gq! 7s \8!I {@0)" j q"T q :0DQ 5& E%C84jPB0)'8Ű J6DTy\_ MD4P "v8 d7@+)@ TR񙧮"]A+  p{`P*A3X<1 FB6 \ h40S` _D Ap  iNN$ A8&GFv\W ǒxt{PGP{P OoKxp<4UYD\@&G8_=^OD6 d@9}+8LU0 A:r0P $q tVpd8Ϩ>B A`,SS*0 :|`p RƓP #\a}p\OQ\bGo cpcP@ .w P I%|0!/o1^DFBC 7!Au0Xj$ v[@ Ptp j~,.`[Ҕ]2CWO s]TQ]/fC &@0 +.p x4m0M:4TDHpBU1ٳ Yp|`Pt vup@ @%3tIQ,`wwD)p <}L+@yKA=ب:L> `0uPQvDq1 wpZM8 \Ú2H70p1]j8p,Ap D 30;qې xВ { tRPJp $k 5F@`8ₗaR1sBI) Dp*)@LV3s 'RZ<̅a%*9P ` Z̳Xb\8yJ6^4atrLw1u&5pp t pag \q}tti#'eF Y@ cX D 1'@ ˰ dc Q{k |@P [%EUp 3]ɨٶmu 0bXUp}` {C(TFq偽o{L@r,- +QXRk}~Z\ջ38!;1>Q]SH+ij|U{P@تX\iŭ.D 0k ú @ l "p@xK~ { 5Ҟ Qp q:jqś#$RA=ByV!:r]M At$ LWt 0F&زq"s<ÉkmԠyɴ! >sϠ@ uw x{ PÐ-QgaВ+Q(g8nxP%ɀ 㲐x $l'2- UQ0ϰS\ bSOp*G$5|P-!PG|&`l] R*:cLY"JK}n<r1LC̰L,\$M$5 %R\Ѱ ]& kՈ,@Г z p p Ơ p ڮ티  0 Nd{q EF,C: OrLFT'&\ߝ^ KR`ˑG(F0 op n|VoỵK滈#02Co8O s3{L4+8\%8P F}Tȣ80=& le  P`V"G p i& ` m ؠ p 8R fMCln2qSq*5$])5q9Å-O`İ0/BӠ o `i[n/=X.&?&d P9 {E3@Q@7I |O ]>QR U KpW] k0up.rMJ!b ! IȰ$-Y8F(VJn9R'P?g.]?5ݹSg==}@v5 5> <$JTV]k{;{;|ԩU\uśW޽W?+ 0XthL#>Ý=wNtٲ?:M!s]iյmJԞ?idVDT $h#Y 7O .hx uJ2“(<B2…ljC'޿io*>`Gwgg|q|f4фJMBM ~й&쩩iFt*+vVh*hXa$<AkǹK잲'Q'}jGG)$L3ϤIpAGuǜ7igޘtGN9{J'|E #PABs&k4RM7i~!#0n@L TS]#. <=&l)!p!6|qbkdR5&hZᤑRry!W4sI'qgJ:dCpMWL2Aǜ99+恤R &^!b"%zܧi vy[DFt㑙E2Qb qp;iǟtq,o"{sEN2CŤJYGr'Jsd)zȁz Kb9v3ԳbJ(j,S3+'|'V@GRgь&^G}Q0q@ = O8/ N`7Ɓ)σ]94@,h X!.ONV i\k`ƛr"&HPt,`#$59]a`0]0N,؇~Pa1fAZbvz?8v`41ѐD[a EKTQQ7Xf( 'ƥIa>`M CH+q:ۡac4Qq $0&dN ʌ B#򡕢 26y)>!Ml;MxQl80ȃU03kU>HQd9Qn ,vJ$.,aQX{CaK4?<̂%Qs<Ej%Prr0u(|+qxiWQTBhSR<# L-U. ' oyu.׻?241q+Ȅ;! ua Ďsأ`QʊH2ѰIUN$ʲC`"qzŬjr!pS4]𡉍?ℎ8eKgAyp옃V kHL*2R-Y)DAT삃9oC)D`t(óǗP" ˽u &HCjqPmjV΢ܡm)$`d88bf<>‡Ьnt+ 0 +UUƛVߔ)l ow.] x[A!.}0 qP5 uq̈́z/! K![B<-uI}sqVS CÈx#2a &1p\Ri0h)k!%xϜzNA8\m@y :Pz?f2{99P^%ݹA`c\u:;Az򥄴N%@4({m͘\6~0vD }T,?a>'H ^Kc7%\a &}&d%`DQ&pBtaщY2ЁsD?EZIjU_jg;1sPErG]johe?:_hc.Ԃ:s9Z^=$t#}XA5bܠ (Ꮂv4( v4T 0w &5x a'N\ {wP%>tpNoU.&G0dsV$;ޙGaR쁠 "{T4#2t rz'mCЪ&7\`4;]xC3ȃyVX%1/L8 ܋t! q`Hc0l}0@pxJԌIt(G(q:d. Xl)=ZENi"t2e$fh{{88<<@h6T[25z(Ż} p3\WèH#BL:죆hzh* FaG@ˋ릍 X$|PxIpS8I;ʖ77hs腓kǜ)yɜp<<94K& ,I[.:p;|* M9#"3pBĺc8R [xa{`"jPa(7 :XL[=qTQ9G0u(uY=rz)0(C(qfS;D;:Db>ΉB0m ~GXH2h ]B 4%IW|WA(hS9mV4K)>dX36P2 Kx1VLX_PUA!* o£V؃|F:ʞ,%q+sX P(`h8Puᥙ᨝EYC q9Dح ܃jF+ЮrBq +FY,}39!.*x$9p).P.HKXVN! g\mW3>2+bE /a0`l#Z֭HsPpSD,Yh SHqqܟZv8_1eB (ӽ0iLC2)cB:{pzR5 &℩ (̣#A~@&eK|T&T!%Ք,Bmiڼ[z,I Ezɺ( PX(kx7+ 8]," vh(y D(s0ޚ8Cd*~xn@հP9d i>:pRD7 R@Jk722k-%v@|@N>73{ Xihʺ%f@D̷4@y8_prxaE>0V:HZABhU?D8xLa>q(a1 5Yv30~7e OH ]80`P52hp @>(O(]P#tIUdE9" 6u@SC}Ʈ8C `RhK> , I0Qw +7R·Az B"4:Cfwnɽ#>D؅.~bzC~L3!n(fe_h9*s*ix]x*U5]̃# h75!$Qq6koQX80&|12!R*V3?&Pblh~@;I/ c|x$@)\Ŧ)5 x<"p6l؞ '\gZ@"Ӿk*|X> x&cWJ#@e6nx:$9kNxVpN@5O5DᬩE3-Gx;䮸/i*jhFp; 1ܚu+&+_P-MQ0}x8 (fF5C.B$> qն{h( Qt`C2 0;x((d>T x*ġ Xp !7y8~R25Ф<(hGх|t]IDފ02qx:`GX'Jղ28b-qYmaؕ=Pv(Cɔis8@e0b ݐ |DaDrT91H踚P1vƅZMp2XP-/7k9Q~^h2&uh hUk}v@]g@>FpTyMσg:kxȇQA*L<wemEߒy`w3Qe@勐riIN$^׉^wEAZ0`^TbBb0(uXPxj֙fskιf(uX !^Vv@i0+8 i8J7ʓV;GZP/mu7{wt+u{T'7~QJ@0n7mt!\XM,a*]"`OUiCbG&>hBf)Zsچ$QXjߑRXGcϧ si0t.7,h$B!Ĉ.?Noa7#Ȑ"G,i$ʔ*Mڳ')BC_El qVǮ_Iw$:wG 5rʣ >7ŕjuN=zpM.^`.7`}9n޾ 1*DN:)/EI#?uTٱf7o^{]֘rQs0Aw#g ϝ9N1@=(g+ffI;_+Hwj/]Ÿ@?{/s +03 9TA9̳^hQE2z~J1Gu\R?#zD#Ŝφ?s?emR  kHjt{)UgTv_w#4UPCD]!49qgiX`@)?(:W?s83ېJ116b?(B2coI)}LC)`+ DA5)F"˜S<,EC!s8e]?8?3[GL>ؗJV7*̫Fo)4M#Ҋ?y:s /P [E'_L'A4pI>DǬEGS =D-򢒶gfБHGS2,O>Pls-G9\C-֘j5:W,a!-!J1x6H=ш?n ǎ= [ ,0,'0O>߼_\A}]E1t:W^BtHA#,tG8NHvAcNn=Oο<>Øcă7>|0Nq?o1\'~ 2(q0 *1O< aH QB9|y $IQ7HpK?cA'"^q/AXLl4PH;+q8DD;ѱ`#fiaǑA O oЖ$\H$f6*p.a7mn!!82СM ^:NHpg. GVL1EP H&2AM0-YQj0qO>19X/"hXBE!5( t(%<)Ё. i#XBHAFAa(X2P<jt:( >pQIk@҈>Q8ڐjh.Y!,XЇ* M I2;A$cRqI\zTt1)hZ7!KA zЃ/X\@kbP0e,HPJ~ zą8b}T:dv~Ct})c%#8GHO+(`6$T9P(0(Wp7ȇ?KYDPCf~#.Sn!FtPC`HӤmO C4B AGЫ!h, > w=^`ZԔ{4y<7=Gj ڰG)ʠR>y`z :p'!6a.~kEa |TY7IE$ Nat(9HM̸*@!eUGȘU k6P WLw:l#E_8QF\0J^I>1v!B 0>$au'@a Q@ڏ"#"SyӞ(R:H K$EL`j1"Q88elQ(&QZ~"0p:`ѓj$#)SpIlTbp3 >AJ$;q+A}ZVsEs:Du>: %P O `PC3R5bbDya$6}$#Rq|݅!xM`bhsɧI5+^̘4 /S븢ŭ  GB F2.Dq#O?WfR'!9WyˏfO<,i `{k\~|o$~= P<8fSe`z90X&n ɔj$s= `ƌ$KĘӟ$íEb?=J44DKa:NC?,2^?DrT`V>PG>B(\ؑ8 d?C?0'Paͤ@7vuw9xm ND:ER] ASP'PYY Jȏ!|E.P ^M@9̛x, 9(V@aDF\t 9<* 9=hpF@4xALA֑\uE|4؇фU>DwQa B:$Q=D I92.B'8b8 ?ڨbIș!ǠSspA9^JXATC. C{y %JE0-ݏ$8gXA|$?LA)+XE4a6H^WGEC2A18:*MlPIO D9c&4e&S# c 4'df 4^1Vp HH,-JEyXX A%~4ԁJR BTv/'WD<.܁Fu(]TD mxhSq4^<:{6A2(1'6B2ʂb1&t:M~db(Iࣝ8Ơ<4 IFM"='})ߤ" ?'ؙ 7p‹ L~j-F14TcVdf :TjmYǦT0d Z| MK(iCIx ?O2'x*S2%8n#PB= 610Cӳb*+ -sJ)]xe6A5~\YVŔ?C腌|)L<(.A"H911ّD ɆPC>|:l;?-KQ4ԁDlhia ,^C(g]ƝQ2B%0'9-юߵՆj*B26 (@+J'BpV:Z=1C+A1EN?@Zr h8ؿ JKL?؂)#$Gk&w3lT Ոt72ɷG(C6'@B.ȞP̬>Y\AxRH4PEǺCl{5i5E(T;?| aU9#8F%9܃QrN?("|&TrnB%d&l1a'4g%|B%1 'p[lI\Ձ8@+TUd |V|XJ4k8PC\#X-C$+K -`NeD0#+.]01kcڃbDK*Ki@/J,ļ@ @T82C\:H9NBnAr0-+ ;o\D\DgxC50C5C;{PS8*׸ `1()([Bg2|'$C&B&t:Ѓ9C;K;"6ՙ1$%ǐwi9Z?l?N2:ۑp)AT'3+2H3:4E,D-3!9T:3]GhJب.T̃%`Ajk&p9E6 E*x+f_L@k^HO1#6C>C+PHgU_C%$-4)UoF IfL"C0SDh-43/a8 ƪEf!(" Gi?XCS%B1HC;ֵD68BS<=B + pAE Ň:ʁ<s8 !+Fhgc1X |O, }O1HОC< ;KY0+D'I4NE0 ?fA]TfT>E؇9$1R܇M|GiNTۊ3U9>) ,<9{st%}C@cD(#K=hH= wENX|VxA,]$?8im1u &>otY;*?#BT&hC2^:DVjXhPEYt"y$a:{D44Ai< 904BsH (ŹL |r;8LEńLH $9H| p5>фX;3@t?;DQmdЮR]: Cl+ ìGwd4?1wm_ P U&}_AVC3U|p:X۽!B&miDS[`*(ma5=L}8*ge9S%_GlG:øj݁G^d,A /sA||OA;}Vn%M]hɪ{7:Uxq3}B0烎8pS&BS-(96*ȀF88&ǁb@R'o;w&TaC!F؎b{IM2I`l'eK/aƔ9fM7q&hE?=X:uF,&\zDlI޼A"ϜlQysM( _Oyv)oMY/ &Ǣd"ɞ!"B(*0By(+j|"*d9 Ò9d@#Hs '*Luad923>:Yd63l'v;Dsa>.K5EE|̱ST#M8tT%"334̻"V Va0,wI'w|ȟ,Ri, 섴[,&g XC"DG:Iܡ%CD')[`C ! 7r*s->%@t0-7-3d k:t`"j4vѝz+ D?́O DjzЌg ?AѝB-ѝQM2xb qp.A+0t2ۊB@{/A'  J|ͰKI:w݈Um&)[U#Z4"Cq*iA6!<(\>ldc[dxEĢh ,7-D]5䀳DO f"Tsu=q'Zxh.@^(C{u)s8EO q p*X]7#ƴc 8<yHWEA0<:q \%QR<@)!`G d orɟ`'nq Yx =s:~~seD؊LTfP`4$|ăA_dd@q G<I8SgHx1(T%HN7eQOPbzG: P`#=y ֍w4 eqq+24@,>$݃@ f4(h,r#D0Q!gC>Ҭ(ea<.$:xj9X`'"z6@ad|"&*qd ^-*1e;Z;sp" 29( ɺF"-.!{X7! 6@@`!!AnW8< |ІҲI4.nAdn/3 :0 0GJ0P %Y(>)@j@` hD.x@p 0 ܉"`tj "!VZa4 %)!H7!kЧ/'XY~ Tna6^"Ag2n&A8X8ȃ!? c2p Z! P'l @mᅐq6@p F+ V V@VNXm!q!..V!e!04"A!v%]4l\boLt  "t@4gq<VtH,;&y!.g(!"+#o,d}t0X`J@`biO3"c1JA%V(aAܰ; ( p0! z|/r"7P+WG0*X $nODN#U8CB>@!0 3_9S&V&#! %%Sq R@[.;!CG@@*!?I>PrDz ؁@C@%r=A~tjOa`(~MX-B2 |["nHs+\36)0ʡD I!1.@#*(A*ӼL 9MAmYvgN"B)6dXPh b2(a ]2KǤJW\?cnX!1ρRm\q5 7ne J !$&X4LaA.G&~B@B[j  4C=d.A`"!$a@`^!HR36!p>uhMva рBoX*F G.lV``rKĤb&!f!2e$?tXfbaf!|C@ Teb@ 8!&&D 6j2S3'*B2B%r JF!)UҦYLI³$ZaxA Aa54%R*na-r(<4Ob\ x@n }z@s <P iVaȬ6XB2AL@Bj!\`8=T`!?f"n^!!rJC7t Pt#tVOTB@T!AA ` d /ax\'!f$X kC!E1M&~s]tw|q̡N NaP`}, O^V!$$:EFdZH}X! XWhA(f S&agAm͆ox&V !7!@ c` @`M`Ih ԡ'P N&%+x Nxi%@ `)RtjS`IZ哨%!Xn5Hm~h!?I9@a I+(%!H ٛ A'X&ůA"XCAw*@ p ä !F"Ч %c8 A <"3Z87c9pJR@b ,6j + Rz)^nOA5q vZmX.goibO*Y7ɯK[Uc;Znb<D0Б&QAz&+H!\:\R au#!cfAƮJԋ~.AHAm44af*a*#\:i SGYt(d@:'t!˚{ *wXn,wGAp haȎA+$# !£%y5yt`z bC)0H9*.!~Fi?i:l%pcNZLp~~kl|  n.B^[w\m?eN9^F4a XR U[P[p0$c+?3'$<C+x!HD&AW6328,GTvˍ9 b|a v4H["W !&mp23*%177X(2q!.Kdl oE4{& 9J1U !kD!m%OA}.jwT{ wz Jҙc° : 852EakۑMw `Π `Hp~hA|olF00E:3`^+4=C tj/?=`2Y3;&"|  r p` ,0? `bҙc$$cA>42* l^*CFg [%!*:A//A=k(DΝ %+CV@H_;<0…! Hh,råO KDVD$O9h p^?vҥst13v3[=jWB'/=TZ5֭\z 6WuISڵl*g~DiQ^Ld/nWj| 2yΑC$m_c{<+3o!0ug].حC.QAR=a:xF=Ē*e瀣Hf؃g ܆e=DsTypDFO4GM&\P9SOKA>Ҵ+OO?&9Aini~z:Ө#&9?#At4>V؎Kcf2H"M?}xO4\A5XNb 5 /@ + 1 o1?` * sP?`uc8G1^`q_;Q) $ RFGc Er6`5 2cQPSֱ=V "d 8q>KcF`Tt?JS/`R!N2?d1 :0:PqB\G#GTxk .Ocy*2"@2p?8VA+ 2HG {g*H:һO;jD% \V-nŇn&\`qҖy_jtT|$0ZǐL+2]J'P3pt4iWE1e줦XFG ި/k>|娍kJ =`ԫ~7A1sxU\۞ވ/e_>|/_> j O>?|C԰B{|뷁m>߆AV~ӣ_!gA쿐_~7h{{z0@ j(j+8ltG% % g uMMzztQG =1,HXa7ȄMO Ð `WXp[ȅ\^`ehgh5WyWpGW2h @G aws0`wv8 ~~@v@w80 `}h @v ȇȇ@gwdW|ȉ~Ȋx؊ȋ苿(HhLjɨȌѸU񊜈 @*W(޸h+T`h.Z^ ,+%~uP +(Qw Qt@ (v烵h ^ꪎ~鱞>N뭎뭞n~.n윮^>N>~Nn܎;N^^ P {N怒N ͓> 0 ? p "}0~ 1p(tVL6USea[o7ߦVQa}i?o7! , zH*\ȰÄ=Hŋ3jȱǏ CIɓ(S\20cʜI͛8sɳϟ@ JѣHfqҁNJJիXjʵׯ`ÊKٳhӪ]˶۷pʝ [7x˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسXчӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&Y41\10JV^VG\`D)FdI<coL9d;FP#4|~VcW\ 5 ?"8A3LZP`n%@F**N_:HT)C}aɪ+M{4k(Mq!A2Pœs֥cKm K@nD)y8A@EIúguj A 4 0Ak$5pT@EcIUr)̵@c-\JV:ҵ:%",HdjQ0Κ]) #_@* ȣsRtZ57WT/iiבSE t#Q31AO㞓C~CEq!Gp5 g~(F茇$*9+DEB(: .шAD^V5 :Yd N/btPAW$|%pXEEOC LhNH˃>G3uˊr :$b L @XX"Vw)ɧMh€yBȁ؉Ejῖ!DCuMFę#|)Ar~0bCV;H g~q $ yԈ=xXxzP"S2H(+ KXa)eD ccFǴq5/l6:7$N'8kg2z&dPeN).!Ů5 :іŚgA@c``cnB]8%Ջj5jq  !Fqܯ!J3Z Ge6q 0hU|ErNvƤnb _L f ޶&z7 viv&G?A_@#mG+20G;79yr; ) _P"e2!#4$ WPO]k \Yw F<͈fCnb$(1B \[dxX  2c!)eޒ HMcCs&v#` ` Rq*S;9SDh^p@]J<#͋b◙TP] DuMR751GC7$,ݡ^J$ZMt`{O,5#Yyd[$-\O5$; \6jᪿ|þC4iS+Gׇjh@;UH@KaKc }yJ:QJܴYC& r7GzJȻ# s~ 0IR~o聩0}~{=`W7`I!xKw7oDnwCgbX&W~5 .5 x`_CvQj U8&D<`,v۠_-AI~f1Q/BaG'0?bb ! q@RxB/r^NQr~'*a^xTQ|mģbZJJ )vcMWXDY|+("Wb(yq'Hjq÷w!kWsX .vOS>+;xx~gHQv=C#I8v`!IႀS<h%#z@|c XX%s; %I F$hyq&Zu|H! )'2Pp P %w 3Y!yIH!( ))uxx"R 0 .`MoSFb w`vh 'V R QFR]6iPP]P !}sg$CY e ֗ a . PRXi0$D@ z%~1O!LF .ԓ*q h41s,W |D\iӑVqT r=eQ* i\+XAgs@8q38gѝћ^p1k}:  !)$W5m( "8i1)ZoED:QDX1H XLfj`Gi@1px CvRi6Ǡj`wb2esmUD:x L -?%0v2`HI0"@u8H+ (3QA&z*.➃1> g0z:mᢢרq6y ƢM KE]aG TgG!W̒, 1|Ўi`G[7A $L ^: / I=/dV(95簜 @StU6$P+ r-LtS!7l@77aH@ "!+zѦWhu>z( P6\+/lq (A ~񀨧q:>."ڱ?Q X O:!_(,_8ɘa|Wvb\Kk"`t6 -4@LKH)иvl H \px|5.^co'\+0jͺ*Ϋ2lӶ?C\\͑g}BT{{= "4k8"j[f+|ȻtKtѺQ=uB0U1 <#/@8P)2+!ckh]7S !-^OF] 51F([ )p1))q 26}ِj@ 4 >` MABPu&%\k/n!MuG1 enEM>9i!~ (=@G85^s΁mdg99p>CH+oqPT#Uqׅ<0fcsf{]%*#ݣ a'y@)s Y]필0mO|d`k_0꺑ru 0P%?FOK@uB::NwXboA)t P|B"[&=G&LtSomJ16xn%nď _ި]q+bK8#aj4W%C4͘Qv" QMœ.=p@ DPB{&C-^ĘQci=~RH%M%%HSL5eHM=}TP3XRM62Q1N^ŚUV u%_We̞C!-uc9uk\;HQP`^…G0Pb?Ydʕ-_ƜYfΝ=gҥM$]OFmƝ4:ݽ}[pUW A\9sGkhs'x [|MZcmc߯9va?i;8r O A 'B B K+ ?}6BDq%_ g$JF &CwG3>6H ӱh:`C\E܁J+R)nY2F. #:!'4ԭ18NjИJ0zsO?-\OA%OL"rB4ҟ@!ѥ,4SF[$2PTS #=jTOx0*XI V5P{R_/a[cRg>c U vYm?pۮ0٤իTIc Ό?o߅)"*M(P0 ;5R##!^0d qxx,~T7ƈK;'z>كE&cdeȑ*bln{:h`eM[S{N ZZ< c,'sNn_<)eNwD)NOez @ @;(SA/'(r`#giO7b0h>sOrVP=jm*7"Zd12y8v{*Ge@cx嗷^hoGqU_ ^ƾ|j .th! *Un/} ݝg> Jhču $Q 6dr]DBP/!#` OI_ R'^C-.AM)Ջ|!4J=^2CЌ h2'u@Q!CDB`Dș:8g3Jx-Fc#c4h8F0>`򸭧͐C:jƉ p$3v {3GG@91G&p)Ɩl|RBڰe^qH4d1N;F\ ,B<֞f2E@f6h`sL&I 9&f!=I#YZBT9l8gS* $hBIS xSiso{7ǹl;> sZCǥālaM[~BI/Oq} my mlo{~lڰFwg:ٺ.5nKɂ5>n:51@;2JZtґh?$'}mc6^$.~B|f'|jܥ|o#@"X0!2O~x@fht; F48j(Xa`8nPXh8Ih8Xmh:`NlcxZ2f4 max |Ϻe;h? BAZÅG`Fhs(Ở' =H2+\,L2Vӷ˹ x085dC`C55 5:܀.` B ,RhoHh:8iPFZhqCxcC؃cF>hheX@]`pFgg\>Che>@|c0Vqho:Oxt`e^0j4|j`fg ai0eaPi0AmP?*$]^KHE(\N#GC{|D-T2#c;7mx`7d4dCd `0C4LCp @fhhxK\+X):5)iC0s:RP2Z^\:PNlp%x>R\R5xYx1jx7D\e=s N:JXn`n+hO8\[) :R`^es8Fg#:HD>CKh COGC%pGGTM!4tMd6vi0H4  @ 0N 㴀 p Ѐ3NV0|FjXC8z:xs`+@ah`>:re.>4Ie:Rph1K)x+lgp\Pi=fx:xfȆNK0KhVXsY̳|`NX;O:'gO(`xFȇ7TODh+FJ>PP1:eP^(Y؃cGFN؃|b&Ee(Rl(W4UpxKe>cHV:a(G.1VO CI#:XѬVW*f؀؁%؂5XP7 5ysXyk7vt@lXv}MNS @㴁 HB 0ԇ `e cc^V7J2C^>W.L^Zc:8p+(7"WeXR`=fX:HyVІ4=7:XK8YCR(chCM,NhaFxCxZCľYL4\ƥW) 2@D-1$kHCx4LÉL I7܀<- pHM9N={^bZ+] }^ac(Ga8=Nf pZgm]8VPc腁2b(GQC##Vb&fb;(b:Nc1+|N]Ĉ L3Va0c3N #a,&s=``+^(\b^+n /n@>cbC>dD0BG^cEN eLfP(dnabpRc,^eRfRailg-BC b i'p,a.fb΂# b'8-8'hf~fhh] _xp~^^ Έ^@t68ظv.ugOtu|Fg`g`0aee1̣lm+ixx舖>xiV^Ma\`z6iЅVfN^g5nU$ݯ58C26Ǎ>G&^(^HihZ`&&mnm`٦ڶƅg/~^<%;{j- %xxH=o',|6.H&CnN cnnn.oVoo66o~vo^oonop>ooFpoof oo Gop  qop7qppWq p^?cfoU]m)E2\q@t@Qr&w0C)*(JZ).7%:21g˼%1Z܃B0-)r! , zH*\Ȱ!CmJHŋ3jȱǏ CIɓ(S\ɒ˗0cʜI͛8sɳF| JѣH*]z@{JǴիXjʵׯ`ÊKٳhӪ]˶۷pʝKݞݺ˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)ECHOL6PzQVY3X\e`^Cdi晟F*s` Fh X=Av@á&袌%:e%2PDU<*4{@hOAGHr $mp sjjFj,O9(@b931>-F)tt`2na ]StΪӎ<7;=zpãagL91jl_%'"J2JU=<C/ R$:C 3 »κfsV [)Xg\w`-؝]Mhmjf}vkrN}sF;!P>7fߣt;DsҀ@) 91> \я9fWN:̀~@>.Q{CL H1SLL-p@4, @ȳwW ,C~i25zO>,Y9 1N}vZ2AL8:2P1 .'M-Z VzCC!$xtDP-8ny •'H.7#P& Cq$ }@$>wNnb$->9]Xjxa1D/&;* \SDBq.+j`yN.-|E/: #/8!F:򑐌$'ICaiǽ*٨r ( Տ=L%Bo,{tD&giMnv8P$/Ib02̙,%zEbfӬJy>p 8b03c;x1Sor zn)~ @8!f,M]X5sܟ MGL(NW9W/{e!kh-w귱 ^!O}^_ڻa=-{ѫO2x ?̏~Yp}7:>57HR bI~9$0ED!5u> u)pD5 p` T se :{@ 7ps@FU5QT-8r"'#xx7 qu*qu.!'7c;6}#PcWNa7we(w91 uPX! QWX|@tPqх31/wYXf( w p~~+s~V!Xc(0 0Phx؊8HXx؋8HXx،8HXx؍٘e'.(Xx8NNqh`{3QXWxIs7 TP؅gu G Y} gqdQ1xB% A!?a Z<?)!FDyKyrdk;Fr\\+}0iJ50Ť`iGXk9x@742n)8uLO#k I;벨@rb]3, MqP Qܓ csN(>lAoa1Q{,YϦWFϼA@AE"9\$rAq Bk+tOB#ckNtxBKd@8"mG4d;j1`M3yEBw0\F@DC*=?T [ gO=RF:ڊ>%Upa@\ Ѽ\++ ,vG!DV.:Sԩs~׾|,SZ @G rxL =q[?ơa{A&Qp=$y`톢 A,B57`PǨ8baGaC!4eTaBHPh/=H"0^(D?dH4 Rz#4MI!9n& a.Vth?. #Hǽ&Ec(6xAd KLezprb=( 4CT:2ЁcZA8D&U0&GSdG)Bt8:Q. PzK );k o 9/t#PBy?22 lesHȀFLA Dȇ#$ MaA A 8t8`P5xbOLD~PNɚZiĵ/YG.^:F6 KG6 ZC?J!ZGЄ I$L s䣇mI>](B87P&t4R! B"C*Ұ0#77t^H_Tp+8Itx+N?F)iBHXaL:$Ƕ/xɱq"@ű_W1AqN w# y\B2E6 ?8ǜpLYXxzX)Q/v(^6? 2e+AHhĹ1M.xm0v\+31'  pi}C&0/b0]`p | o@b.t %dpqEz#.a+۴m  s G V05.0UW ܳw Pp qs y9=DSAF#7V87 F@ )7x^={OHP R" հ  0+UtcU?KuWK?$P3052.,$5 ~@ (pGi7yPt{F|`:A&w)D50H#a)zvw ap#v W*tsDQCDpbQqvyv G$i` P\i1AS78[mmqV ?yt Pf0 P(hQC#%2Yr  v (i $7 . d  m fk+Yb pk>7b gsp dTIYNvI s0pt (v^ct#P o  =DNlȀvhe^yy}awF k:k p0iSCA*YrZsPP 1 0  ^2 @g17zyl(P viO90 @wN%+op `p P)('JqŠp2ӎPpsr  L@ P2D23t P{0t |, #blY pyfZJl7V eZ F j_C&`PDB Qt g>dl {vbE0 (zp EY *MϰJǪG``Ab)К R@1ZthBFp ,|0t.z-K[@ P^ ,`t5 2xX "05"< tP("pR?10 `0)WJ5ٓ /sS"pz :9~{n#N;2p  Dz: @21N` QTW *pvpDuhe`a5 \A;&?[0 Ce+ 1ߺ )ڰUp@%;ɱ?QC}Bh QsYB;esS0i:U "yӺ>p> ȒA;S0 0ED2Q5 iѯWm\%FPq>{kJ` 5[cR(oxZ"*,<€'=` ! @Dy J|$@%o e*aT455Í p ' PpMk k w {s Y!C5 [D`hYɠ6 ݰ*`|W0D0W)A;c ePa %zh%6(W4˂ѽ#ѴsˇQLP!.k W0]␬M+t0lAH$+J'*!AGi₃9V[Pk` J!xw,ae0):ӹ&`%pxBPMиZI{S C $2V {"*!c 18p^T;r(pB +JVҘ1l cKTt5{`91CRqNq { 5} k+. B\SE PQ”\Ip`Q"hdrطZS ̐w ݉@4$ 25AZG]"`  {0]1 $B?hp JQ9#PF8l"gP"W&):i_j# n#EK+smeM#PkPBRQ{ ic A 09>>jd0%$w \oq$ epMǾk.(r+V9_ɐ !"{RlC1/Üt $t4Eep)t+r'zWpj=ؽ @]SP u{Y@֡V DPB >QD-"wQF=~#=DDRJ-]tmܿt0m N=%I@9EEt4M?UVQl k8mEC# ^hԿcxvoExɠ3 >ˢ ~Qp@tB /Ԋ( pCqgx%s:0E._}@bԡӱG٧Frș- dr/ӈd{@dviʗ̉16ܚVw\ D:H\ijσj2E*41Oˠ(:QQ4|A씴SOAzm>GɇQRWe$ [UqA 5W]7rW rK)J_=uD"mG|vq>\6[mO:y9ǔQΑgu6]u3v] Dbݥbcz#2b72wۨYyT:"'n]bhQI8d1B1eHt[_ε@2Y$7θLGJk"QDmMzal55bl6 ʑsr;nCB[qFOnf*8d! @njdP=`vt*r & 9bˠ\'!Bҷ[Ӑ(cՎ]s9tTwElb{!T-ֱ}9c%;YVֲ2e}5հDblZ:ųEmjU΍ )k?WيYe"HmHpM3qBSN m.^݋=-u O᥀=_=](﹄qKW9|چ„tsSG𥤆Ch6P׀zk}eI`V\> sc8.SrovIcQVHo@qQ/D{_aT>; bU2[dZb!Df2.9q^ I]YIq2" #\!}uJ _,hC$`ݥ:ѽDW'&[(ώ&>ܽ[`ۖB;Y>@@j rx@cыٵDE33!~ԥS;\%D0~@CLDDYT?*DY`EaeiPFkih'e\&n)jEoi0eldLiF8FjDFr4qFUfrh=m>@f8ͥ<dԆZؤ+؅ jdmfG\h*$YfT7Xi8>eh=\H\ 4ML RNJPRMFY%Ь8FNꬃ7F11`Xh2|XC]KINo)5X:0CS1x+R1h|VHKNi:iXP>hC:hOu=Ȇ]hh8G{K::2ph&]>PNjJ mp(%h>X55:x7P:y1e-[00Ղf:oh= :C:KxO0Fqe !݄JPlcP0UPUpJpXLPghl%Xe[08up@s>ȆfehqЅ5c:Nph1020G&hN#hX:@I(>5CF5xChs(R>0Cz:@LG#joh7xYxK=(XPdp:&7)x*2 =18G\1_+0N]8h8:P>85K:WOjA؄"M`d[PXPl5fHc`uXJjpM^f4)X?2xhshPaPlaeN0CmP mcȆpʇ7ԟ-:p[2gcRY0jhUV(O=XiXexQf:jXN\[<sUhUlx .]jCx`>9>+P5`݅KU7 h`YJݸW}ńإۍ Hd tmAkYTlex0+胈I)\P]RІV[Ox4=88fdl:0+5jUOx-CxfdqhNGxmBpg(U fxc0FOпc݁Xx>x\RxŅC GCEcݬCȆ:5 5 dC-iSRU1I18]aXUCWmgbR}%RgޫL)^56Fc8fY\8dh|aahbapЊ>^P`ga(a8>^`Xhc^dؤfh醆zr֣f\B`ؤ`覦]xian^>Ve^ZgPVe^p26Yaf^+0gpBĆ-͎$¦5^FPY\a(bqa2+`ilbL'#&iҶbpim6cv2nmBla~m^m׾ me`fܤm+mhfLfmN&n&o^o6ofnooo'p_p7pgo mz0P'eOxlfij$6m^7V  ?k@Bsr"k8rs@r$`d j`qЅ+Gt,ǣXtfsv<`r\X;FLJt@s(Y8Tsȿ8/BUP΄D[t ! ,uH m*PnÇ#:W083jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJЛ7Xjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸s͛2Gz YZ8ȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($hE02"dX͌8?$O?9ޥ:d^!ELus$T7 C M0U(ƲW6|TR@udd4 5fH :s~8XT'VH /R5i(kIGv9=TϣA DWT:O>CY UD !A[/Ÿ(eA ÒbN;  mmRK["If=#P,jIIa+Fn!$g6 jn<.be V KV#  hT|:;39! 2O?֫`ɗ=sA p>t-nrTCfl1bЫ=¦AKdt.p5|JCmCD@6-A@KqBݐ@lWФɛ;#V$Bv7AOy@, + T#0L9 eؔ Ibx^DPi$@ ¤ oaY06-2;r߁eam""$ iؑH+iA9hj4D1$JHuH"ls SFL``K3%{A+Pqr3JǴbKD $\ȆbL.#v*H#B_Zhj-HlS H1Ũ!Cn3-QZ* !`ǻH[$!Y|X&AHi@ `BThzD9[$a)T!t'MH,";AV3 D' <<)Pq!9vJM ,pmT eCP8$; mХ#Tn>U LA40fL՚U dXTiBSЈһ%q CҊ'-PJ- =KǪܱjd +@5q Q~a!P>zjĎB"*Al /rpіS %mo#]&ԗCakHO x`‚ m "PѰJ~SA%Yu#RuE` zKU>O:"$L\aB 1TmrG?G^bM[,1yUF1|$2j 'F1\:6lK2A 'te^"BRL S:4&!)lK2D."65˚3TOAiG(/2CvABIع u3SL)_1tL(Y9¨'>d )@npꨰz7:E%^kNm`Z"[V6mq- b_JU&FJBD<#iދ_J9`nx#{Ha TqS,-ƶHr&{Qq `y1)0:Zzک:1 JK6z Qn*y{B07HAA εAՀpЬ5y<) y12cct#K Ԛ#"ڮ3I|PR'1OQ)p |"kpd)B7oP# |Q$2b Jt h{&Pa u*2OF $HWPku" Wz&Ѳ Qf t/  ` ٔ;+%Z@fbu ?Wt *$N JbT4'P{;(QC  !q O##j s0 P i%  t P 0Ky ׀Ӏ! ;[ 1P! , pH*\ȰalJHŋ3jȱǏ CIɓ(S&˗0cʜI͛8sɳϟ@ [qD"MʴӧPJJիXjʵׯ`ÊKٳhӪ٭ڷpʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ N(W!=NسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,"bӼ(4hc<(<>)DXCH>5A3,PF)ED-SfٓZv`Ib=b7 E0:dqNMo!P:䩧pL)h;9fg 2ms 3Φv::hM5xj8$e ãejNLc4ȯ%|H#k6‰ĪN;Ai@<Ĥ#`!ǒҡJ(qE+!%*^bok>n/,B?ҖBgR!'6\!brf1"rBkGb?.SȺ!|!gȁnʈqB I?:/8kԦKcѫF|umbg=vؐAUш!S[=e׏gHrab`cG Q‡7{,"fhawg xa;nEst# KOB'k2ن-G1ߎAgxL!t\Fr|x௎d r?_?4JGVk8X^4>,(U4_B i 76ĥsRF@̂|N-.>N _@ (3tCA  >  B> X("ŀݍ#G<ƃïŰaiqa 8PdN`9?tac M |P]"0oz:tQF?{$ 53Az`#հAz+e: xX(v 8!R Q'-Q |C$R70tC+iVᕫKР a (21Lǒ KR T+ˠW|eڔ7.(aNG>ҷ I2&@8jQ ElDd.$FA s$ځ2`s4 Ⱥ";HOV@z7GF]#фGSUAs(R?Ҕ!TPgbF=(P STkBnf A#4E ZYa'X:PW8Zd^"j5[#@bE@k#(.,^=Gta f% ~@/*?tԱ*B@2 '@Q>#F9=pyCиp8QrXPC(B s#%K]aBT# 9 V0C)*\ByE ކ C[66ałieIPut ?, ME;v9aɚE~ќY),Y:1|a;, |Ajw0C8,G4zKaܨPǟ-G)`*K.憂- \!B˧?Q dT^mP07!, vp? n4EgA!7N3ʘdD C+LdPq?Dd֜G?vHAC׻t]>Q:ec91Fv,Jͣbc Μ4& nLEtGvc2G)"li=aCH|8ƷS7^Ƌȑ7O& ҉8y7g8/r@zLpͬCBOnڡprgKHMՔN[X:uEIKd_cp")t<w* ׺V.oБ;<5.cG˸3};GOқ'2Wi0cJ)t4B ~6/ߤ xX~:3O[Ͼ{Wi@8O?[~GaM{Xx ؀8Xx؁ "8$X&x(x*؂3Iax.9 NUhp<1@,8%EHg`'1}P@* TwZ\؅^`b8dXf@ g8׆rvD s}wz|%y؇!pXx 00qnqP%lj!a8QtEȊAXx]X"@x3P Y-S'RT.1XxH#wܨW蘎8T иZ`Rkʸ9wwPulss`X ِ#x&cq Q Ɛ @ɠ X  - qhU 02YwM]<@z -wAY.A'(4/yVyXZ\@>Еbh8NxhY̱@a+nr9t9LPzpuM R[eGP7䄙5!hǙ9Y g! ,tH*\ȰÄ=Hŋ3jȱǏ CIɓ(S䤲˗0cʜI͛8slLϟ@ JQ;:П?qLJJիXjʵׯ`ÊKٳhӪ]˶۷ouKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,"C$84z@7HT4CL1(ӌ2t (3L4s :V3$y.WaH>9bD8ޤ'ʘc`%Q0GqE+Ϡ SN3RQ -Ï@yaPE=H?٬KHtQ!r0)p4?zk;3|܃ER;1 K,NW2LG>R@ @:zTD{Hu9#{:mP4BG?,O:O{HRbX><@ R'*UX+x"t1 Ɂ% ($8 >q8  9`=(jkA'6͢A yɤ8E !!s G>B_rHBEڱ>?~Ki3 !`:ĝ.o I.$PUr$#l¹ezD ^[2zZ7-H,!aN0e 6Bw0l+$ԁRx iJÞR:a uñ&_Ttj'{A9/ A(_ͺP <'Dkd;.!M0UERoÎR4G58aO@'pGa! qz4 f0#A`6|pq֥=x! {nxwt2( {0u btR@+P ~plT@6zrb`b>#wA02{flt F Jb}B0wP6VzgZaІmX b`h@zgqpJnπ0? p2@ xdckPPPJp v`a8f`Vpu`{%D cMP :EG $-v r Pu UaxXH;As/ xFŀ mV `d]6@ qب|j (7' ;w.Tq8VOIWf ǐw[\0k@PwVPը;zGJu9K6ys83nb0Sx!> 6rR6S P [ t]g`dZ d lX`-r*ZJCI@4ч.Ő[qPf@Ҁ E`7ieaXvZbL5`ΓtATfrs@JsbAx Br@z ə(ɖZF*-+S}FPUa3CP 9N{ KcYsL\@ApYZX`l09KG`( `<6+8~be [[}BXS3525 | Zg)'@N uOoP kDx2sh M 0 P `n2[9za9ףP}|`d0{z0c#'0 Ƞ ǀ `  ЁRPp&wb@`PP`J3{ӛbYH@D vs0`ڙz0Zbט':@0ǰB [xt | up  tꐅ 4-k$Ρ {U e(rIa@z~zڨ{ a:1H`yWP  `0. *.P wj"39q77SQ7WrPШeo0eth+` TJN1p[ 6RLY"FbWU6l*dYzzZh`F aT(%.RZom0VВx fz% xC& 9[ k` TffڼzpsjIq.pE` T"$ZˏP ~ - %T5SC9V_ 0`y|[H(usAq}ͣhrxԃspmgJ5 {S1Y4u0 Oh-Kǂ p MT{2CmWlNrpq\7vlkPK Sz &ҿ٢]BD- rŁc)e Ȓ]lwzN>1zp CP'*@ P at DR%బC΃E~2 |5PutJշdr Xpmv*m* QeP9-,("@}p%{4XAPo0W0ppp vK zw6@]S0@w0W3dR?`;;3/eI^oWP0 @0ـIn@m m>e; [0VBpBPlnrF]A&+3A4A T1@@& @ d PUL_4 :p  - ^ ES œ$e{׍"'{p {&^ (p  `F5H(_^ #/(JdC-EY0͇+@?30 c0| Z  K ީa pF ]Ua@ _5 c}Q4{c3'5x]vϛ)<\JR%0Q%ӳg>DR:@+ zK('ؙa1': /!*0DG$DIsJڇ{OnYZ FGsEnHaX|hǞa7BL@43M5dS $$A|GƁ4"qGjr AXh|[I:6W^DXV[pHr'"Ɓ.DjG!srBrcgd~ǷqrB9ň[WqP!d {rMv^Af ޯV|1wd,WBt1E(:(jc= \aqfC[(V_7V;k~9tF!>y$!CzǑ5Z)dO v0c4H+~E߆;nbnJT*v<)sᷟy$%=ɮ:F%(8jC't#: Tm&ЇdkYw3Eȉg ֟CB(̡2T͚0>dz{3_[6,F+r&uةڌAr.:hGFj Rpa .#2Їt,,#0ԐJʠ;4 ?QD*0D#! ]'KL#,bǂ=N H/ãĹ`B!Z)( !Ј7`d' ]a ݀nԑ/ *.(nVC֪}?FbAցea:87dcŦB/e!>/ rc32%ئB"\ST>j.9MjV3D  l9fF=ܑ@N:Úg*! Q@%?膄V)XAG2 a>E:R&I?J2$e+-/ȩʲHG96TaS_xDTPaB >|H0R7լg>ԪT(עRrQ Qa9$d#Xغ466:r,lerI8T1Y|@jDX; ģi>!]4"A2Dj"X=!Γ# QĚ D Hlo]Z(jPJti>1C @l?AL nw<=)֛ ~viH|Av9hv:G>&VblM_|cI1-L Gt/e&'(c2.=B khM2!b@i tB ~$X4~@+T LOEJz8LŻ<W!_xvWT@1uŽ  0$w8 >ԖU-z2`͢,O)Ѯ=0{DVC+P 1@pP/0i,B1G;a+^v(^aQ:_ TJql@CnP"MHF'~r'1l[\ڍM#3J0[mzy PI 5"`6ueHAKfGFnws| .Vӊ^])|f)3tXw=XC fs0Q0jE3sx#Ĕd2y?Q \xw(B8h[|Dc ycȁeOh՞sCAC~\ c|%!X`=P K ]Ѝ#Fӗa?Qq vr`43ȃa#X[P /\?q;;G19`>9 (|82ˇQ0XݘJ[z_0* 1:9$ 1!"q@yӊ7</\C;Fqp@ r:ҙ96@8CkVpP{<ʡ3ÈN83}xG|a-"7DXB c+Ce``$*pY Qå\ T;AF[#p, #W $ 1ٝ[Ay]#G Q Ѹ3G $@(ChLg7u<< "GG8H@H>|͸Hо^|;G*E[E܍S*8PɸxE˫8(pAh~C5i_ʷ?$@c® !d>R4˲Ao#dHKɸ4 9C5ǨԶ|0UEL94SLȼv>#\؄iHC#G$''\[UI߫@jK,9@NpDM[Լf+F04O0цo4OM6i/YtOvxRLmϢH%P\49{7~ P1@B&@ }O0Y%BL>p "OMc  c(Hて#uY0xcМ0XKBD, PxN-57@0|й1S-2?!*j88Ӆ@.=T<ݸ@G`32CUEHW3FHJKL@= $!Te>Hޛ-lSU1ZUFQ\}& v!^z|R`eֻPfeoI=VC|يHXj }VaI 鸈 Ip2f4Zdx]V؃[׳,ςy deXV!d#06AiGI@eDS[Q)1 Ԋ=X|=Y $Yx]Yv ٚ3Y Ӎ]Yء qV0؈85Z IyY4թzքZQQ칛- DrZQ% F#UA_̺ۂZHJ[QR۸|V I+VKvY]xOcXDž9rO Nx>+>^#@w W;*O)c|ҳ vXa40{$|b3!K@Ձ`7MVe\S]p}NsCcXsUI*ƥɁ SQ`dS̷MzeN >i$ΆR!4N<cYi ^ Jvz1$7 \FE q4[˶@ J!>xT>w\ ?[ x$UɘU 8rQ$+d5!XQ@ƶyƥ||8>{9i<ڝ~C&e)ZP A TFgiҡF(_qh>Ei&E kH[ShuDkќ=ѐN^l}Xn)з^^r>Ul0QnNj췘Bp>uڞ &XcB!1hIܝiC>@#>ږi\i* S+1măP 1^A^}f^Yt.6onOmN%Gdkϧz]Cn7OPP o WTm <-`fTD^ ʍ&qEx1 T0%P 9dP6Y*TѧMW6EKM7MLtzjP7u[aSϧE_Yu 1XgZu Enʵ\'RcNf#[mg}Ms(#5ZLW7[4 =v3;Ƨ%v}aB0njbd8XWP["RHdm\r?́ [!rw8 G zvbv0[I~Uw S?OHx:x'z,=~e- .P Av[1W'v{Ҡc$&;Wx`_|p.iDFc&mv8W[Opn(cu9@od?N J+8囒}LBGxu[(Q5i<Z]Pń@7yTh |OPzL SNC7ε3Hg:,h BK!Ĉ'Rh"F2r#Ȑ"G*W$ }ﵬi&ΐr'Р -jT"J2M @RRVȧVԷ+ذbR} ٦m۸+ɭR\NM .lX)_SuGQւ|b|%Uhf3d R`V%+L&;`&ͷP5(pDPɁ  r]{:5u-}`Ksqu/-)<񁼝)j{ 8 _`%; K(f6 PCA)|m8axA4@W(8#cOIT>tp9dQ@1)?=̒@6%?s$U5CP A(*F%iR)"jK7ӜC} ?渹'ӧAUt Bz(LAi9ęQx&hqd??$Hz)AzS*F|\BtJS;kP8F\2h`U9:dK dalղD Y:TQsh AJZ{T;bH@gEޚuYF A 9p;0cԂ6 Or&UP=rz+Bn4F>׎{\XC{ 4C %2{Z9\Qvue9%XtqaX)@ABH6뼴7v62S/P\E >%.A2=vS( M8 ïG8/++y؋efށ B8QG%F'E)6A7LE8U~:HRRk@VS .3@;<+<;>[Ո/3~??! ,rH*\ȰÁ=Hŋ3jȱǏ CIɓ r<܍ֲ͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׄ޼}KٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ("*`@ڄ8xSN9h"M8bNt׋0: K/ʌL4&) D.ÑG"1NxtR b8WNb>o񏚸'|D@8HA?/?Ǭ1F)ܣ(Fs?GpO=R=sS9xF)`?ĔG?Լ F?є1 \jIWD[R 4\,\rO:{ c/ZT쮰γP3#jtQ]@y+:~HV4 K(ġ^"u"D ?  5J+Cyy#`8F4ibd\=8GqW;Q|`msiDHXԨL3U_p/3Id-vE6`Q uҕlG:24Nڰ \PJ24$4DXƉvpd3 :U 5$#! mTZ!G8e'amdVVxH)#SD54%txW;;J rxDE0fauB~/&xÚǝ I@`G4!ŝ20WUq"Ȅ yW:q2أ]L!Gx= Z-+un%p;@ciF? g(ñA*{`9aipl;imX0D41p8W~q=:Сj$"Ő*aЉ@ R[h>!U:DDԕ;Q Eq™@<溊Nku~(:ⱏ&UH\隿0B#51F <,0)N0Bf qL8<=H7as${jG$!ZIAp qV pQ=HAzka%s8] o èTK8(|POjE#?ryPt0'.2|"шRQ~ 8Ha*d*A=ցXyܹ@Oh?8!.{POx"0GlY$OMt/|.h1b@=`Q;mM~0ŖB 6u'w#ȇ3uCC4Kt̍ lnCpi< wjF 7T 0h{?QnD GRC4 a0B{~|D>`3p d `n5#Q$% R|D@%x ('z8[<\ oѡ v<" b@s4s4 | cdyq:%VTb3 q=4b . Kb?b;k,&a,6!A ]2AC02#~5oXe {DKc5p H?| V؂ p ϡh`ZPg_ uVw5Wӗ!,v)Z t ` Ű { S zc@`r6p.x| _`baB8j(wbf8b -?b t /B`LxZc:pQ> @ADxxwx\k apNr.GBrA ]} t uPmVv§BZ |xyXrO<U6P W Ld)t\ApP@f NJBb0|PfLxqOQ5vDR9F @ %F0 ΄TOsw?Vp|}t0t !P58i@9~v>Q}N;A 1 ,vCW . (%|a(fw\x!6`QA -q)~d XU@wb`B%`|Г jf0:xsIDg,D`$eAnB8P"Ô6 (NgQv20@.y{f|z rs 28+Ro嘉 #5ְ(k 2w58L5fMZ rwf|Аm n'"f~PPKW rj3 h2Qq@p}ёYP 5Zv 0g h|P;`-D|0| 7 o,\C\  q瀔'59ecod | z0zГCH{KʠC@wӘY( SWcR Sj`n *w(# Lw Bo(s`t a `{0.肠PJ}xvp> 䰕-9`hP3]3 ͥ`Y`%Qka>(R :Z :gS oPtJ:UPA-c/szifb4} K"H cHg'fГ=H e)z@zJalepBGboJ) #99:!"Keؘ(j J@Մ+W3Ee5XR,UC0e2'ي/[ ڍHh!B{%"E8'dfwfؤ: E yVY13P5n(^0@mPbЙ{h!p0RvPu@fXLIs'r_x' G`6hk|Cp`&Wc7z"x:` xI@6p늠!wu~JtP P?f Uz+`g % P`ebP++7@T7ӫJp,s,X{ P(p P8SLwx@cԱjf|@ɜm{w@ t2C鷝BH  F`7h( Δ`7IuKzhY}wr`fp{dJ`tP{pz#8< x m@ ,=$ l :C? obɃ>'8rew ]kf(vjh{ ,aͪgp ̠4Q#;hw {&bEbe˲wnp~wpΡp+xryp {P0S ]MY Pyv3 k@rR'Sq 6v ~}bjQwUWu,J"P T0CMXQ* ` PywB:Z( 7Ԑ~AP=8 [=]P'pfwpb0w\ o w u434,opbہ+X` 2p Jp$ c4R`Jm)1S0W;(Poe'`[@eVvДlI^E5Rp@ skv y:auYne]P`enFa̓Xqls G>+K+0ՠe` %Bx>ܓ)Ndְ ڐ p[` R X>@ 0 R֐~9rd;Rs,@q{#nt z0 @R pq]KV+6tBUD9lJv 3Tmn10 *AP]͐ 1N[k:`@&t BSZ"E+n@fdAwkXcBO v@pzuw P `v;J @ HՠdiyY@hD"H?Q/a~q-qCչOV ~^@ P 0< bd P p\Z)7 @^+Y$8;`'` S- .:-Vp^ נ \ѣ,{Wccd3&}M݁0 s,  $&o 48P]̴M R @ kPU'e ܒ𻓐 0 @ _Qa~Ol92*8)pBpת*(  $/ɠ QXR2k߳wK_9R@B >QD-^ĘQF=~RH%MD*Ex_:v=`H?yOP{;G6ݹzݿR{=NWj/" cDVGkݾW\{Dbt Q۵+O^WWk{y*š 猏u][lghFc _HBqsN9GtaԩϰE!S!o͟G$AfXbO 3)f8A ?"GD9yдjc \˨Atp!eH9ʻ!z"J Nc4)NʢV[o5Wj4zQfV"3٣>B :;NBC-ue]wߍ \gG c e1Rǣ#9KȷD:^/ƸfhH709Ο|.Ywʞ8Q/TK<$=8Cau3:h6v )D$PKtm 6tah%:lFovf:hE4~QJ eJdK~;#0)mG<8S2.'B% 0 9L OE|1G=uW|N\Yi~h(i0f=)yIIJ~֗gys4gJ"i%5I멧I eG?}ŧ}|>VZyS"E#w(F>Q/ρ)q3@,шq+`8Z7t![Q|;0xJfSuCgs@0 $K2D)A51@G>AD02?&MЋ_tr$boȞ10"y:r8BGӤR՜AC=5+iŌT8$q3uIj+|!8 N8YFEr4Tc!Mp`cKEkZI`{xD@±@/ ItA+%k`G>ycGI'P Ir%mMW`XzNе"4ljU \V;[V6&p93VQ,o%c|‡6bbZ#nt<^0L-MN7L0nxeS -@@ft+\*8,#bFjZ9L Zgb (e QXp5.d qQ5ІU≰Pg uUx#j&.Iklㆤfrr>x#̠|C#)x@.`Rf] 308Q ڥ,/5KXهbʃ"pX%Ђt{"Sާ0 !`uN*XԤ= 9/|^ukF1a ^p2TFVz=mjW ::jwI/Db}=QI~M v-Xzt!+ɿ3` ̆ Ec`DxE,DBY ]H#ΉGEnP /4\2xB9\Fs%$HυLTbG5% uH:E>lt8Wg&6q)w_>vgG{ڇVgo{tw{9`DqY<=jx,3?yW.gDo3룞b7i?|s*~Cwon~)O_.@?~΃Gտ~?x:>SD雁8+ܵ3i H@@01f; @A;Q`A'  !$"&2B^IBુkB#B#ɽ+pQ?L\??$DB-\P$4lbC׋7lhP+(9ԻBqÍ0c@Ly1B$]B@# DFDIJKøL)E[;:œ_|]0Fddft.|hۛikt ;22l1O]X׸+pDtTudv԰>7w,RCy{w{rȀHpE37ǁ.PȨbiƆG[P[PnFӈCȑ,| 1$ɫ;CȔd~9@II|tIËI!4L ox8`JUXO[{@U47cIƱ4ˆɳT TcӇHXŶD`b@"KXIˋKC㈲<Ƽbt\GL L"HL)ƴ ѼdM5͇0IL;!Ò4SXқ@<ȃ3p3sM~(7=M4X!(4TX@1dHK?]%5E1HPڒeOU! ,nHpං,Ç# W03jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧP:MիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸s%HK ȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ]9PN9 7T47%4:-("M,8 ; .t@41L@/E1xS$3hF=@SBcQ ,ʘSUJ*WyH/.y @7`\??s?QF+(O=|ʤ: a?PO:(O7o2F:R;cNˬjHH$! ;ep?4)餃OIB"o`ζɶ%s8@l[/*Lk\AHA#ºCsO-p1JR;‡Q;ݶ#nj7cN+̈!{,=j+WQM@F:{qϣ 3P8(3 ̬i:,=8{a6 ;ܝ̈ 49kCJt:,J ̪5! ;ӎ;>9HO?hЏG'01O>(>2|j9 Ty]?#M" Pk ]w)o?ýQ ?4=d>1-<*xbF+rԫ!P!G?ZmK@ UHyV DHr8 ovۇ@x.P{xx7]? T$C2@(ɻ|Cv:m l@؁Jtx'8X9,hqY@v}cyHІ `$0$|L  UKrr$Kna\@!7Ner4T%x>/A1(bħgg6x-rD^<"2G7CxP1Nqx;;0^KE0#\|B v@܈nAT 2fj,A X  dP4jm\x+Tc+ҫ|#U 7m`.7"'gq?otI|&0i!R0[K|0xT_ښar\ 21 clD9xzj %!!!^0A ii1L"+!:WNH͇9@ 9[ڐp{*.]qYgdoflC1\t*:ڸZlXô1S6e 17s`2tA b \#0Fp9^eH|Q&2E!Y0dQe굇:0ClG?Q,AV2>> тu1~4>;HQUQ NpBd0DDa ȝ481 e=%4[>ш?!0wϐ1h j.q.;8!U9YL7C3 @]ø_KG8f|SQUҗu}fWzrjw3-Z10-|r;ϰ,w7` ].Pv0̇y}чuq'q mj$3M2FTf Fd P`P p[pA R7z}auhegvh')cQ x` P "@6c@u`Vb`on rŤrq7uC8XtL!\Ho7Հv) u0 Ԉ.`[0d   dvv 2pd.֊!4;|C F' }r`cl!-2ڢ(@`l- pnB;_h wJd GF'@ȆbuS+F+4Z Pi` aS'WB2L[Apl g؃f0~0bFm,=p483 fl%`` P`9G `'jzsYЧX}p ^@0dp RcWRP { c fㄯ S@ f 42L6 9qj@jry_BpV`0^PxY0 _" u0P(|ʠl6<rn3<ċᆃfPI{0IY (n& P 0Yk1G n;v0og7u b)ċFqu@' os9&:=}csPҀvLF 3 C53fuVar e   ċprp1ѧt}`0`홟X uҖ J`DCsyMURZZOg>y!}A9G/2u8QjOp`ɨ1af} },7t uG am}7 aC mBpі0ښzgp1hb[59(]( i}p<9 j8{ WPk2_ "lS{9@  E*f ;LLyr@W ?Jp %Z8!G ; @ s p&ӪAJX q| ?P;,bO8 аP ;#~3Sg1T@ooa 5-㪱vIKP5) $ 4 )":jXdzydpSJbqSE#P<,4jJ. S`Pxsn!=uzpz`VP}R ̀ o@4նN@#p,d N-C71 AFJ0 oxM|Ra;u HXg'ؗin$ {P@;dISQjE *}SB@ k`l{0 P`@?g4̻7nfyf l0n`Aq4So0v?cp1}CB Z=b1M|%B`+zp7,qp|A<{PW7/CpP 3e T0źL9 i$  ,RT ?pxS`{uX 'v~`v@jB9*cp֓=ZV7 P p>uȈa9 P  p u6< e 0 Aiv6pm@m6PWvipw %"?q  =%y p Y p 7s|\/#4W dS{mip kwPeO@]{wۑnVvS`  5F 9>x i^f[@΍Vp6p4<0ѹѐp U$ Є( (0)Ac | 0 }} p @Ȕ4/E@k 0 xbΐ v%Lx<5 Pxka D@& ۚS/z@ o0 P */zP> 7 `#(]k PP!{K[$Q ^` 9 ;h` pB Vc7JC@a^6e ˠ%V[@sf> iؐq+ P UZGeh6(a]`470/XsF4@FyI @24A$>`L4Sh>2)P8 Ag"Z` _ 0 \ p Z>qN4@\7PUa 07'|Z,jMУ @ [ A 幞 *6,PGwDpmK P W@?nްP [Ċ 唰17@ iqSozT1p+ ]a (S+1>Rb`0:)HX9!Q 5<0ֻ5$1 ;pJ-- /Dp L&8tPߣT`P2ho<| ya @t]Ȁ q~]#S4mu0`a -TiNJc #7sP۫f-A bOV Zd.`/ts8qBA)4Jѕ=̵PB )%T 0cC=~RH%MDRJ-]SL#ҝy .;WΎP޻N9%­9~VXe͞E[f'5ݿG*!T =z$t%.y/j!s l+fΝ=Zy]:DN=FWJ笑7o4SHG\r^W4)u?t㽹ZB+i9N.Zfݿ_|펶ڃgH.s btg7Z!> 'B CJ s186EzRK1}ڑGgu4TQG%uBBmGKtiƧ*~IHIK6Xa7VIǛhk&qG|L|QKeE7]uˊha!/6(hI;;zquVB8ڝc'H'mjPҚC(|a_g ^qǖ*a@iNo:fB'~\-7p y3$9G 'Ap|I$|l:jƻi$r&g8BإO;=G;Q:o/FQB=tbǖG>+YPs2gWCw*c&S"#)p=,#>ឞiG &z!9O>)jO0D{YC#`!/Bגz 4@A zPBe p]M6RN!"a utBktSʇ|9PauxFc0S&4шJ[̱FcQFVwDWC ]1 8F0!!S)2эoYBz"RtG>14J-ѐ|Zp8 ؅n24< )@d&5>@$PDggyc]Y8t:̀5'@IARH >9Pe)Qв䀕CxlK$L@Q6JƝd@"A%}miLQ"S`pLuӆ@D11,ԨGOzR OW-Q`T d˕9j NigEkJ#8ik\?tE)W8<Wº}a1ֱ#yD짨S; Rdֳ,D&ҹh|ִ(a!Lֵ)Ym%VN&:?a hk;\׸Enr[s-׹υnt;]V׺nv]v׻ߍp;^׼Eozջ^׽o|{؄Ho~_׿~ %Fp`79h a WXGp5awqE9{ I"!+XTM~u(ksjbY"Mg誡Q"}c.,'pEq-X`rbU#yg&!Dd_)(Vhfv ($RM7%,0(4h8<@)DiH&L6PF)TViXf\v`)dihlJIKp)gEB sgг矀X@2IA1BF*%5Hj饕wu-I =J }驨27SHHQY 9@]U;Y9S5(ZkAnD AkP+:V c6E0M;@ 쮘Nfl A8p ۆDX$D c:3}2pb5l8<@-DmH'4/ұ+OWMZ\0Z5A_vVm&ȍ4N}` "͂&wBb$CLـG73кp&-B } EQMX5DCx-3yQA $ d0ݐM6.PPPYPG(燀AL@@0$ bR1{68@  pNkmi&s^s 6-iXDL5ρ@r] HB!c !4An@h÷G@Dnl[+"HDX_('IH8bEdq @F7A2 -CcZV}C o@<8Ƒ >1P$AH 59@C=77*r#ވWq?B!a )2,) 2K23,i0zqK6KQa8c΀H!hCpeFQ ehc%WLYKtS2#}rVChЃS @<ْ",r u B/A( > t00JA{2ti, KC:t:Ѣ8YPA:`2S4"7QJd-2N''AXrԂ*A b@ԀZW S G?ꑦk)jQ)ւ"[E:ִBE +VPU(ux'~P :x1K?*ȇ5?V2dG)@=`GUT)ƾ7G~ BVOU TaΥXH\}0j%>ƩsQGn9 :4H9D8f9ZG#pʹ#XPR@'?]) 4b چx) rP)ׇcKp ȻqV4BzB W޺5?| t(ٕ@kUeT%AL5HP Z0?h e?cVP@{`Ba,`Xv<+ D$\&)Bl[T Ŋg遜 tIRէIԗ"@GJ8Aqv=}'^ C#ؖ?\A ( mIn,\` @z8U *¼.['B=zy2(5DMM]Ҫ~r{8 NȬB-qcF)pA q_-t#7.H  5g#xll|e 9%7}- =u<詫£~zUrOzXNs`hGñ.1|[!I=vv.ΓD Kx n~,!_@CAZY93vC)DvŻ>ȝ\=\@ޟb oG#vȧD=z+t A93W#m~[x]"B-{}҉L!怵KNfC0mBVG^[!D W7@burG qR`csFs {uk7[GT,Jw~``Xu=Un4d1q}|5SEM6djsp\T9CXuR%?sp 02@IH p/0p06+s5 p.k hX+v@O(AQhߧCXVxTw/4CkGhHwnc hR AaR R{\h8}fGV`[Hh]X.`o P w0 Q3pe`0ty0wXW 7M#%jFҰ=x5q0[FjՉx+Iq'9@_(p1(_8FOdKQ{z)҈yS `)AJ 2fA{]ȓ b^@A(yUg!/ AXF` 4&|M 1Uh6 }Z9H -U`f]2nwI1p0ٙ[X< ']eiGq(\3|T5#Zz1zs(ejwu|{U6 `rH e vi$ M2Si'ݦvbp` ~9XMQ}hoW-rP +sy[Ɂ0Ex RsJ@ @/pʑ@,9:6o zig o!Q1wEF0[9)nSr(W  f7yW V mW erh*ץ oPs[9% 0KzKV 3Oso+pk7vq AQ94@arK!a2! o\El2E w57 WP J$Fa9'Ae3yV]C QwNfFp$AGʣv ~aG*cQ v@gam Š p Pr r N#(򁮘\j)À"}$ f׫1zAg91Ձb1 SE Q0[b @ګ#p p@VEbw ^.aŰs:Kf __4a-eyEejNpeqU}0 1k܀4h" Mupp7o1h0p _: A Zʰ pu t<;C ]1வ0fcpzLP Psft{ RWQ ٰjp1=X`A&nGk q1.nAOszun ~&:eK񬶠n#n~4e ])۠tnT2$%QTdA tp tk Zfhg"v9e% w  Їg``b ah0~Pr[^7!]Ƃ^)_ ;UAa5|c7o $Z@ }tAs e kx_7q!>#L<* @-K/vBf'ѫb2 dVߥFlUJ ;sʘ0Z93PFnDhk9Ng L»uXš &Kx;tnAr?w/c~ ]?=3/'\L4mX l1νC 2rsF jԈ#G,F;{@OpZy@O3=xΟ|0|pv Dp>p(Ã8uN #{$<;L-S?S"X2|A@p~hsD h+*"-zd7<06 BKdGFs :ć~Ꮯ/HP>ɇD;3ҿr,Ep-L5NG h6uHu`K~֒b HUHŹ٧.9|P!И 1ŒH =`>n;x6mQmUB -H8"kœ*݁)Wm2klء~X]%w^K`)B|82x f $vt17@ڈ`3E : 2qN%7sAgz$|ib 4"}az$Tǟ *p 9n#];}B\0 #b%VV_ +Ew5d ڨV -\RC 3gyIh|Й! #9<[A57Y IK 쑙 !zTIQfԡB 22cxC] P-+f!q #N(aPF<`CZ2t2<$n5<$k5G4Ҕ #HnLs(sO}o(DžHR|H\ t@+0#A`+|*خHp3Cd%!*!LJ, a~(ȱ}ьG\ :\ okъ+pbC8V DPG>U؇ABΉN>H0HZbȈƍ D?AQ Ё3{AF^ #S>bdO 7 l7D 3?!3 |Ѓurzd 0A n2 <O"+9voqB txC!VЁ(?&I<+=/A " s"mP7Pf$JG>^("VOpR A(MՓ${as%|p3:٪! @ 0h!;m(BMP?q\Bthpш_4h/QVЃ(y<HX)DFtFsdE#`exƬQr! "_"D& "XN_PH4HwQHij3%9!COg= "<jz(e>( -LTЀyvH,mܯp'  @eͬGiŐ;\3 \`Kf@|J#uhwk3_zzf2AA4#s:[uDf8"`ԡtRHm;Zs07vhIG$kľ)Ljw6t,{34T0!"uC(F]x LD,%7b~8([#@ iޫ H0#A1ӣ_JyP1X:@!|'ZitcyIB8:Њ=%8R(%K,{ a>t&q0a>  #p*Zq7B}(P<@V(R-9 X =%&:PQ0ct8DCh,#Cz)h;>MgA7YyT(EP@h#3uHf7<p8iy9DRX %x700 =$FācyEAӈyg;ZuL)bƖ7ȟ5@=",ؓk|H7аpH[hS(( ~(QDT@,xղMD 7Ђ:Ch&) H/+,H.7p#+ tY op6\Bىk9*+Ix3{LKis,ǁ I{pM&r BXI w~}'3>pλ-18D5`&0Bp!r˼*pe p(>J;[)\̈x3( JOɴ<O(N}μaVi؃r0b<0dHy< 3ǃp8߲u;蹄GP躪VCB_c/DS+D w@OĘ8̃1ۅ| ll #:PA >Ѽ= cY`#q-=QpGsAPUR5q8= 1P7PG8 1@ChbX: *a Ҷ%)uRxQJT&nz؇7y XYHIV9;ok:P80c7_iJ2iXcsoBa؃zȆy `D( >uWA8@hh+?X:Xcj ,]*pDKNC]F[,H 8XH2pN+P@#Y6 .)9}Ƀ*j \۸$Jh:M\t4L}9O0l0(qOFG+O DI80DC>֩GXG3Xt)f> Ճ^^85{ !s "/ۇ8DO + >H3X8 KGكpaϛI)0 aLlmNxO!(>(zcPjÄhEG0N@ID8G ~#{l?aBF\ ?[ -_{p y2@ =XZ9 (+Tl%hRROF* bЅ-8iE!XeTp;KƼ%-R'?- Q'> tQKj `EeW6XԈL(QLHf|ЇH}8`R(N+)PRD al6(=;(Pf؇dȇxp)z>i T+na`i`4[6A2T?Se#C!'O0H QU?kthMQRI1LJ\ A#\6?|(ŏqfYUkZ(fON( 4?c_t؁i8R(XjXkHz\̍mXk^b;~H)1V"X'p@X]1j^sv8ۣL!Ll;pvP')ic˖p&Gt@)Ղb(h$XJ1N~j؃Tq]0`$Dئ衃5!q=c6<;Hv>u0?Ȟ~\I[1U_3Q#؇nz9\MJcP@c;>1 iGx~HqG(\` y [<3$>Z9n34dhI̛Xd`'<!tXs9 K؅U[%K_ԻCF  جXף/OMR1j}@ =zP!DGASDM"+1$&W\h޾};W;wWGʞ__:pt0!F˕Q0)Gݻ+ؕ&0Ͱj:LKp,PΘu\ ]/Öl?lj1^p#hw3թY0|PZ<~ Y4V/$ /DLT49PrO]v kE'`m@1|ߚ:AG_xL[u%d,D枉S 0Уa.CTŐf)gZ:`ڳU;C C4D f(X39HOO9\F+$:36O=}h+ZnLCЈA3h{~[ A[|CD[)dpAEhgO<-P-]v@F4$=4:2AJ,$_FN+A!o"+ #%U đp'fśt1r.qR*D \"? 4.A~?l#@#(ͷ], ^4E+ŦAD$,yRL(9KCN>Q8N:B^M7%qe|0+S@Xވ;'Yp`FKA4^1R9AGּ~*CP9%a "a$IN%=P *h"Hj p`9ߞd0  t AW tZdo)nh;g($2?G氞' S𾁼LƆd-O$I@о'ѐ [B@c AKpW,^\E>"/,`hH!bcH=Hlc39v /uH($^lȥS "#^I"!9 :Ɩ8BFs9΁3Dr!G1{+B 3|x@h8 4Peį)( D&,Qr(s-aZ ؗ{, QQ'"0jN11T{hEz>6#PrAr爅%2= l @@1f@{1lA*9 (D=7YG1=ff 4Da s,Dg'-@!.tt88 7q<1njBD{q X2,l =n3{Bg!#&d7.}C.꣭cЭ@%߅`N &HLBh( jթEʨdUkFꐕ(5:Hib|Zq2J1 C7~qs8y2l鑌H(32=eXDwy|82tvD $2d$}tv&7ѡG 5n[f> cr:ܶfC aB$R̰|0$U1vrZ3D`QR)PJ6hɀ/9˱®ex8җx,\ @!zƃѠC "2Xhql<0])܁4jG>F9ܜa-̃h4kDyְVgЃME@ `Z]GЕ.2WdDKACu0WFƨ;ă?@kC>PgPliLO8Y!!=|BE N$~TNHV@TDZp0YC|U Y2`ZC9 1p0X|dL1܁@x<*2Tr \DQY"@Z"9Lr!D@0Y9 : E!D@C *B>=TӁY=A7(C@5!H Q =NT6QC %"5zT]di#Q] t5EA;B@ FMCŵ BF)Er eT >P)A5#X J: !$PJA>4+Th+tƐ0^Qf >u#%HP̖O5%*qM;j 8 8E0dTeT0Dg0vd)P,+ O_Z؃h98"0N-!KmL2.k,L^X'`Cf1tj~r@|lgnʀRD 1wւmWѕvI-ϯ/?!T_EYE:A0P C4 8`<'vys )d$e&v*DDͨ(A`ì #8"l8E H\+{@k >(DPXAwpJM?<ȭaX\O0#9B,_C]]hA(VZc`cl=p? (`,`C% KhU>)JBiV QA`ͫ2`C#tDlAl@䈴x'1 8AX ^dˁ*FD){Evn=Kl/C P|ZL@,|G/-A.o?C\^B =dA X&1 a'h5|D .U4D.XvHݱ&s<\A-(XX ܀zR~Ʋ&18k@p%>EDVHm-^j`wtC.IAA4MP2d!?lW^V'DCJ·[0D*N)A<'T.DTc Fجq B#p:;}dlKR! ;Pa4C#Pqs=W2X@CP(|ILD (!2eA'4u=˾gH8"A1cC =qT\Xc\Y&a[FKU~3p='=ùN4 C)DC)B0C/[iEHe1G)nAC-4d% @0݉1DAT]'A^ğR {X B>[ fAKBZppBbdK@6a<.T9tF$ 7deԌ#V_Ѓ70.QcZ  ̎D/AC7ZԦ*8(#2w3= bf=-'AiǙEK80Aa҃h_ExDl?<CC84F0Iܵ)RKPL!9`֩%wXތFNK9$y'Jb\Ѹ9k4KY7D Yf0FDjCD ^+rl =H; 0~E| ؅݃eNEGlI3 ,ƌ/K8+Wg~tؗ[Q؃&C2dvr^\Mgiў=oumaݩ/+>|yb l^6<7jsӥRgm u.K8G si6.iES\Ch*;.N8bd ʉ [Jm3PȢ #Q,#g'7!BGE#+$tBqq*qЯ)0VLzDάٺѡ̣ !4SQM9Gvjn" ƄJ5qǓcQ׮H5s(Yt`j#v25d)NZƒ_$s L={*cZ@k=CGR W'!a V0;05XzXފH/gM-dQМ8OMΡNd-o&h݊xcRvʙ$wUЏHDE#!S# 3 P$ ҹ4!#*ldN)3fM|X۩^YϱCN3u}f!QpQDŽxr 7,JRmfۤ[Nzk^/dG9|vvzrg,VOn@;++. dxzR |er(yq,3A&/m A!s0OQ $=SBrw xX#( 0(2<7 18ЌHhĉp\CD0 U:ƒjW9icr /9IsjCcPB̗Y W4h)7/$aЃXQC@/T!|F吖}Q s΁de3kOCZ6Rvb h`9>htlT1N%5$.BSdDITaBJ4x*V09` ;|d+_7YB56S8dV~k1~)$U G@ @IGj89h>:v!DՁJcVA'ؔO)oPGn72"y$FNXKm)*:c" 0uREa DȁzЃ'D&D H PM^Ȫ zŶl +unV"m|I|Ձx$#<㙎E}ka9Eab'DdIFGDU9Ep@ e/pXۘV~ ٙ=P*dOOV쨘e`V5;ck["wd E"t;c2":JU^V@  m`BD6҄ڊB5]O!_d1oT$M>MJ;doɆMԵG&8O`.iPrZ: @7+ >X<<1> K{Us |H~'zsPX\?;?bfO\_g'瑖@&j* X LWA?krlHơ_l%a1ڛ 6%H baRP-R-(r XXxt$_+v2Ǘ!B1GD流ȷ4(cAQZ7rM>7&QBRI *7Ͷ>]@@!~WV %*3Dx_{Ejۓf?޿(LmDFf%&, i aa" FBƏ6a)<\pGBd"*BNf3li`Y΁b"vHzKnD4̮@Pjd 6"@B*Bmcp j'СDb1!7&" th'Ma bB#bfbV #6-~ DDt*b o,@fa$dnR"2Cߪ 1p/(܊t2JJ +q!H`QKL Aqc,VQWr!JX% E$2RvqI>,b3P"Cb衁pfHl,N+e"˜Ec =zy4F!!8|4psAa(%BkbBR-$!,'/4 Ƀ| LRKAGb~:IZ i `*BIGJCyPp͹.ej=~ (+-bab c"r$Fhm^@) ,BIDJ sC,+b2")`W1[VF!,l++ 2"{px@B%J. 1!o+!E Y")TS!8‚.HS/ b3sX,[BΤS9MJhes#b|<=ba,;ԁި4 dq,M"9C4ZaZ Cc!Iv08@Q$z!%5"$s,@! A@@87F˔ AI7Eg-F"da^k2:pQ$je( b$1 ),"^ Щ͠41Ds! /ג-04(n8Kn!"bK:0j`Ddox@Dp~KxGd&V-V4^(! !$*Sr$Q1EIuPkvTRO<S8u ̣m8J!M*?+:7:$Aǣ#|5 ~^3b_Cb+.#-/VrdN@"?!,u!*9#zBQc%IP`*Am0!^[7 ,!<d'ydpAaeu\*hv!3EBS2n (%*a7E=BmGaeb,ia2b*»7vWq! DXP~E!"6rMA!3.V!6w oQEAg$_"j>5E*o5pYڬa%C@~b fpw^P]d,.dkc,&wG#i!3 UQa.z,J VJfYڢ=+d#Z|b E$7!,>&"! aNAP7,]0*bXW aJc1}'!NX$#\Fu)FGlU*T#`t.(.az-6OgHav K[ q6iia3v+F [!4nZ+n)r FVXe8X/,:8a2ҁ~b$=A4j3Nni~BTmm+*ǫR2w!4x121`a*8/$!dPO$ĂN›gNkKh2h ǣ$H"q~}'lU|9!vr/b!#e^=6z6V $0, PV@z "" iHl8K~Q{ ~'l&Wb_CM2x!Aդ"xYT0 ԝRNb@?u\#+ !P)X82E!ڤ}U:٭&*Fx* aنQ_!r Π\ub~8wL#x`C!@ZUPN"Gkؤ[ 6|4, +픉&n'BUptr{9؁[3+ .ӰZfqmIDטv[ a8I\$bhoO%2u f!gdAC'ġ^59|<΍uC.|i# ;0DHX5E @ǜ5Ua!(Ym T(_u,-5n;&LQ eȽ4'\Ky #%`H+a2ȿ `va \aTbg"ȳKj+XkˆÔFC)"n3!́O%#b =j@BHu[G^V!05<n"{y9=r/s?}%E/٢! *SGc4$\y1?cJMD<Ρ>`Z10"|"!#8#X'mAˢc5 +hW;A-~<+~`[*>:"p.z "njE??Gd+o==6|9?tV@P>?'ӏPs[T!\|9M'">0˹{sQn @+C^!>Gx@/YAU<1DCAu91ґh%s]^ w>1yb_<P8Ѝ@ @n^;z2ȑ$K^Hu:֫OFlnM<{SB@r|H9c 9Z5֭#v\Z1ٵl7y_a㜂B|(7`>lULթk1ɔ+.)Ώ)ղGI&MdRJEY_ǖic- =Vxp$$^>>Ggۮ6 Y|2d1{8jU0ΑGAFt0N@gZ6|\}Y[GOGOB{cG䔠"cWVh#Z9uQ1İ^]T@Vd5GGlZk,v?\M!NsCRx呌lh@(iIE= DVfrFG5>A?}D # 󧜃92] i SAh#n:$@\N>2"h2Db1VG^O/W؋dÑdD"G HN^k?^DdHC^͚jerf*N!Є@Qo=yGtTFd[Y>L5puD/D8oqT@P'iKY:9"Df lc>1#WpM}.CO9@G#|OOcfxэT-N<˾e ]4e`mHh>N+hi_u<&"e$ .Xu0{00|dfjQJ"ֈCE({ (Y/0Ԏ;F5Q $b6<2y9iɤ8$0:,&"J!(PhP}aҘ5\yh4cӐ &Pu L!RE1D|$VIF%@Z(%ӱtà2XV]PՐs]V#-&^*@rc @"ËO*qH, Er"D95gA!H'p[p/4!י|$Vv5^3&Za9#KvyF0.RL>Ls?m0IۥvId7>#e\-L*ů|®va5̱3Qp[Y'yI)q *CP@ڊ)I2⁔U$b!KGW :B GdSRaz=Q~>5."q-3'@TqV}*9(ZHD G^A2FAd+d."z4v+ْipabbs#BPdSnxDq;R U|*n;cEq:$"vn5?5^*^X`ULs9{_lʚ"tu%X:dnVAyB,i6#&]1Q Vp8sG \HX=+=8%lz>;2~IjΈI> L,V!6_zrwh* G" #II nxGvПW~-vf-lcMhkvDY,N묇`w{˰yo_C2 ?Qp{Znxw\!A @w";d!N(Uvm4$BU р<z8P'"Pe((IԷ{f17@ h~m!q ~wF[AHk9X>jp>*㐇Da 6'OgA q+>Xpo',3>vl,É?1uH7KT(1=|vHe#T@+u3q (EH6GT>hjh j3` Veh `F1xQ W[(sUWbaX!101< QY`S hy@</)"R69HR/E1!!!$Q9 `pʑ|`i1hUw$(Dix5;)6H"p]W^jfߡl*v!ױsaw7Ze RTQ˴&aBQ@ eWl1Q *%`i}ɁQ'\FgJ( F9 00pGB 2.9bfrg mw p9ư'җ\IxD&эX< T @qyg.wP S FN#1П!9 q5i.@)7`5m5ރQ6nőA5.w]9 3mYuP!,Fw`q {h41m 11;b4Q p>b !PN\>u޶Wؒ'Qf![5 G$wy@c:If1K@f訒" G#$X11ќRE D3J]O6I3IA+IQm!xlh1 _Wo 00Bǥ ǵvq@aՃ]mp/A%V<}nn@H eņ ÇwPwz}cW83oMH+pv7+p\ Í"r?dy{)C`ɢ^#xS@l>:ht{+AV#}YF#A$`'s2J!Iy}3" R_ٕH# Umx)@ :Ds'֓-1 T>58'XtqN5EAy"8X4I;KB!}}ِyu`O9 Zgz5ˆ x!]!~H$".E1G ֍4?~ѯAݰAJgOZ8xJ ]V"bldZhr Pm1rҏl~A=lq@9I5`!O4h퍾}$r+T^! QYrpQj1HD)m'nI?*Ja DrX$Qzxm @?;C +p@rSWQi-& ;Ig-N6ؾ)@R .dC%NXE5Zg!5KبƆڡxFy!չ84Lx("D_I:pB#݅H(]P^ :4Kƺr6M}a4\@ȳ܊ ޵RE%0Ozʌ[BAg D\:K) >2ZvdȫXM,Kɐlh! (`&Cs<)!ǫ7H`j Alni}@+%P*ٿ%C@]18Bhե9D\γFHCl'-yC/FaφG!l)l%PyYD 8Ď|r'I;Ά;c!c#P%Yl2fh]4W†%ӑBa nS I "ԈR&GL1B~m;Rr":8 d+r\dv(Ӊ{e&<>mD!RjrUjXT!EgQ(bXoIt!d:Y: Vm,h{, Bnh%'(a? 9)Fp`y ̱@ [P QC$ Y|(]Xs)*?Ha4"va,|͊}P4ҧV K$A^K9^_D'rB:-!/>1^q Jsnጬ 0Ϗ=(0˛~3r af84j^*: _ZR|0Y :X2z@5JH$,iGs"vCB 0="(X|A/%ēj5lN[#|}C-V`66˺K6 xX"Bva%b'dF ``B#Ha*" 18ߖSZ ZGxLQpAvCBg'$CzB* !K@E F$y-*tE%Qq]JR=˵`:Q0Xd;x FH&eWEe )N!]5JnX"IŎalfl1QaXOMK7P-TH7f6 Dj^IB vTsb5C+f5Moz5(Bqtv@+N@\* D6cÃ@vA փ^QTX Ex!>1y7 `Ch5(&N(s臨{8`=Ck| Y蘿Xk)񸁪п 4<4P+9>,t"|P>7$>h?B3`gÄL0?X 45xBp+ ̲P+ 8('B\P۶k}B~(C6Wa6F=87 4ĉ~` :ˉik'҈VD4->;İlc@5">`N8{Г JNփÄ+C=n\)pkEy{ȇCd+ XPBcNĈ -25xF8)`Dr uH78ךE5~ MFOP84l*rĈ0 Dž sH 2`FKQ2*`ƚĉxL {KH /Q,Rt(nZ?sAT0Iqi@̿Qut8H.plpl(UHC2\;P!I(1YH-iAsX{qyu@7ĸ3GxjxvA4ݻCPLd@Lϴ̇_ԉ#C J?cA!i# L)<(!"ÐyCII}(J )ra/+ٍʅFs85hJhcكGXJD6lFyIbPܮ!D_Dhu<Щp]!,\͡O`F1lJl+CàJEP~1 !30(~`aΡ##MSa}Ί[ :vtТ@ژI`,MbԍCfkdфГBUMU 2T

z8(9 !wHPM (O/ ilD@$P+u(L6 69_ѣHWH"N봈$UDNj}%NՉt" V@D.tYy}>8ѿWI=Jqx`}dꔅ[4؆iLÉ݈^ܞp "1JP8 mZE{Yȁz}'xMU5pPPOṀЇtPF;u@F;HS׭:UXB80B$f <过Pf5Ze Ţh4hJ6]5}M\vO I^A D" ka^݉m  !IyĄ$@S 鄣Ӵ{}xΌ8Ј90Rfy} SZ1 ||MH' YI"Ӣڄ3%c[a xRJP>;sBip3%auA-t%_b{E ] b}_\ڻkMOX1:ڻ=uz(8(Ka9"vx(ЋOٌŵv('j\HyAC P.ݪ,ՈEaMd;܂dsa=5AD =m;AL(C\ hم0ЊP lF"XVRSm܄Es0F刨0} thLl\Σ3;gȄ%fNK[![7Y̐ye^+ ٰ%J0FXZ]<&FS\xȇ83 >Je%e{i7 Zu! Z*0_\3v$X5k,^]۠3mT_FUԊ `FaVay(Ƞ1Ux^Lj&6# T> Ra<4Ԅ0ߗFIz&CfZr @세nea柴h|@!C,' pʅ8NJ;8Pk@VJ%qp: sN qpR܎PRv&xW*$Ub  v拎Y_, 2XJFmP3cp늰kpe-LNtMQ՟1 KnnHmȨ%"ek}OE$$ 9tL݃[[L膅%׆`Tʉ^+.h(8_X q(iN.Ph860.{i>}i :@zp!pڄ[UۅpXL\=HjVC v$zEHx%et`Hڄ[_Щ !iJLv8Ogǜ5 +=WɬKJ_BA裰 lE1k@bɒgJ4^y1/ [ n @LjY~) J=44ܣsh-+8:ɍ QxL `Pt$"!ń`N@hބ2lm_>fvӤ\MyR.CԎ? ,s4?958b44ƈ;6G)&c ҅ avx+0^H,R)L:WL@xs MFC _uI^;z.rX5"LРvB(q"Ŋȗ@38F&OL=._tH2+9a0]7Bu~"uy0!)!DW2܇v%DaL1aJv-۶n+Wm{xAswcǎߗNi˴"{Xߊw?;oF?8f9"C11>a)c RM`*F+7*3iz;޿@7|{^eziҫiN4H @=5UćFrR_%$oqyP+k@4D:)$!GLL!PkxC"WaQhc i}(YGC=B饐:fPH'ٝD e?JN(Tu#PSQ:t 5 Q23optёTO=sB%EfawRZNd~F Τ S=tԉ2eȞS&4^'nT'Jkv`0m*F'3TCШ< AdItc碛_?ޓL=Ч0E ϦcZDYDfm(6QBƖPٚ;洺6Zԣ?wM @6-AnZ~Ut-IqBU AaD"d# ?$cD$;bK -8J %QaIWdrUOk_%$@aenp"!9+/"Sl4 +5Ras&v܃;CW=#"hX=RؖQ)pyAz*8Ё}tɉDѓY=^71r|b 4G>('@ C CL՝f4y@ɖժTDBm%)KI xQ~XXGH!oX x2$RJ`Bpikb3L{DwD.!02)(#ٕFt$nA͆R>MJocߜ'e6m"4 AQ1K-,@ V$8"A*Si$;;`p| 4"a+*Lцa )O{.!1ZAV[)Yi53?1Z(%D'Q8O n,,e)WQ$c2!DwyԄ>+] h#/<d3Kr*!& QWB6#BU6|Kx)CXi'&7A5G_j,% ca#e a]8=N-Fph"c&%KI w:(8Ǧ$IJ&JfCh/e Ie*kҘ2-&p("\O ϟ*p / 4ZE~2]2I,R E|=̩O3t!f R]-UlIN2vqUAZrQ ĩrrR(q#و:QxÌh3:;`s9^ qxEӠF53B#ЊN4F3"_VHrئendB  g^kNE/zErt|FW9իnuL\P j"ҷi'̝fơ/=H/OƧ fW~#>)%*!!g4CIuX7 0C6^۽)]}G89)lde \"vBo#?}j-x AwD^!Z"NVA/+!">G i=BP)TD_lAD ) +DG8 A 5)@.E0øIA#YEB”^D&Ċ B=*4[ГK"a*2a:BaJRaZbajrazarI_J4꘵\,_I)3@1. Sɟ Ad&ĎAĆLÔ DaBbB`EDC5êt (AHd D\AEbB('"-P .(B2DP_Y(LC-",3|!qD!^@&3P0BToE B,8CĠV$eTAUPĥ9#AA. @Uvd'X&0E@YG*BG!B+B3;&0P1,,.^t$L"sPE%BG!D%bDcE´)Ð$fcjdeVebfwD&E#0L 0 YU.T 0&jRKJRjfjfDfljflmfnffBtmmk&B&mogngq*qJtRguZubgvjvrgwzwgxxgyygzzgu28\#7|, 9u_ff ΅eY 1(EI-@(FDHJZbB@vhBl((B^(A~hʨj(hrbh(&D((hzhh>)FiR).Zi"^ިii隊n.ID\["\4%BjD \&DV2B8jj<*E4*„R*RpbvħJ꩚DE*r*6**~G3E}!nbE E h:볆G&İR+! , H*\ȰÇ#JHŋ3jȱǏ CId7k!f˗i#y ͛8sɳϟ@+ J4`cZvEBJիXjz5XZLBgf'6VȁKݻ@ /l-Li҉tp {#KL\t )33}̰@?t9ࡂ1˞M婶_O\83Zbr+_μKW\6P0ËO^bv[(N`9Z;7t_c|,E7Vށ& P\_ŶVhfv ($7ޘ,0(4h8<@)DiH&L6PF)TViXf\v`)dihlY$cn)="P 1Щer'K+-uRx F*H3饘R6MDN+`CA$Ņh2<@-DmH'L7}&%դ\,@D9Ar7kWU܌C'h t 88.<&.CN1oGgJ\'ATs@[0P uҧgMl#]Bd. 찃ܓX-V`+[@ t2 \7t"5G"xcV7 ^o0l\nG0t] \CA(@-AZ 2mlP)$I\ TpEB\Ljq@- xč؇^Hox̣G1g$ d F @j}def(c1Ah0& Q2ьgn 1h!f(,,D٢0=\H"9ot!Qˉ rX C s\chD"K?Q0!^?ΩxS)'& xp"'ZG4Ҏv$|8aT40GRa{PD)RvoxqR|ب*WjIgt'= S) ROAH;â tXfGs ŋQh4uxC-ЏihB/FpcMlQĬiQVPWڪ;(%I=*j:Ha ; CeKs>RgSUW~䄛:P g!zxo?A: BK шl#Ŋo\#ם;$qC# ZяY9G!"[F#K"[*֛ha_[? D}Ek/  А@"H#9bqT Eя{k3v!WGd]ăG@X`<  T+Rz, k:XWk`qRƁtq! m: 5s!wFȪ,L@5Cz%!'aN3>Z! ys+mtx?5*5p ^s|i >rЛx﵇:1tx۪ }ox[fxA]Γh31H_=$@ "/xw5GD܊X vKTPVF{eGD><ёw}oQQ,0"َ?u "{nQOEE#PN`92(S]Ɏy('\ˤd.<$l>;y%vC"$! 4a@`  rݴf %vr M:EulkUg@ e}Eg_}FF q! Yx̲pŐxW T&`PQul 0y@pƂVp 6 K8UQ+sh-zJϷ 6/ 7у@BPn0 x 4UĦXY w G,}fmP `yuO `Uq7AgqjrhU [8Li}p[p@@f%QUQ@3Ϸ 03YF0  k{ հCAP @ #r qw! |* 0`E ==6kQ U qO[%p@3`EbUP PZ`bP~ v8,S0]tat *pW`i@x xDUSU vl  n 1)Z`w@Bb0b u#w‘:U qc#PF@u| ֐4OQp ep` poI&QGvn w0  z)ByTQ*'Ι(bVҠ/QWOPgW`[ _oPQ2O (_op @ P0O fg'b`'Et|s`ɓ)m2yRy7gdy&1 Tv Nc|cpr2Oޠ 4O ^U`J v [S') p ũ29|rhpWs|`[Z+"")s"d e>9Oy 7j^@p}:MF ~ZTg` V b`gpr` E ķ3 y\`Jr|p {)v 6it L zLc9 `xd`dp Z BٓbުXzY:hRb!- @DaUWVPm q r5d V e e@00kVpA fZ$[ک犮#=3Y0W @X@ f0 i 8p șP@rVQ$ bps Y-[#/@/1kUkjT@ {p` B jm.ڌˠ` ;A w@*$+yEA[`ǡT @zk{ }`m W`+}pjEYm%+P م(]av7 p`Ap`Y;īX`hPrPz^ޕy VrLWb[/Fp7M7"0 NP  p(spbZЩn`BO\SgP6!2[b+}EfP +0?A`l UE.,r˲тUkaVKђE JD6I22#vń h]c<tiPlǷݤ Ӑ]*$Gp Ads+BCzEr@Apm; Wa AP oUPtK@ U51+ pZ"at[ { }PKzPj@A^<PAp U xe)PP P p;,4@;O *sB@Gp|[p <9^<azzS=&|62Pt , 5 t|P1u f관3P9pnKa `i]e+uNMOL ea] E ˷{@ UP P jUVS0 9sC@PQ-ڜ]^jՑ0j:ѽPP Xp ) 0^F)5]Q~]".*^Dm)rScQIVu s ѰpXGe`av2tP3@=; _2̥f+KM1⫃ 02L 1luƇ`ELF.r&"3~m% ;P]P{gR ]@l׉4 HprЩmڽz0p j vx-m0qG֙W7O{KEqf  ۝SǍ" V g @dPb|  ZB ?P١ ֶm$/K" ,.}Lv1Ɗǀ{x0 @3Y!zzgJ0-pVr: ~{`W\ >I]pĻQ]zv@WRcT#Q yVUl` DwnV`'Y*|_ ^U֊y~?iu [<_&FpK !fi  fIǒEczVʩb0+R+F`{ cEN-\t$}Y"oC UQ6Ò]@ܒ*T?XPZ0:-ᏀT꩑eU. A`>ԛP Iݰ}P $`%[$ʓP$_کs0)[``a[>:T5>QD-^ĘQF=~RH%MDRJ3XY1M1m>:qјS?p)_->3b;]{$F4lY;icΥC+UJ gLwXbƍ?L@i扜b4MUiO3?^JZfXc+WBlt(y#;6(:th9r;УGVc"$_E!gzvRGk'vX?yڟ̱sqL._hzݟj68 }đ*iPO'Ud3)&;w@0{3Hi OHNQI r]b W0 B0"pa|at #>8tG.qt(#%*9dc 7N#ʰ񆉌 $GQ1#A)Q /MA@ ?U|"&>q|G>^sctiѶFTzC\"7pHR;іb4KJn %@bV QB YJ`!&4!Id8P&ɡb*PHW"H"ŕĦH/8^R RKmx=@J(T2_Bd,l'cR4ڱp=i#81FLG>dه [va[TG@A1v)1p ".MÓ =se8?Â8aRV#;$z׾U"H8;߇X/QD\a[H#x:hAD  DHL X(vD*s)wd e!ܠi"Cj݊#kXԫ >0 AFW"Hvؓo6WG!`b{f(@q{m!jH[A'܀0~HPL6"p" xs''bQrB BG@,D-D2̘BS4FaHcMD12^U")'@hI|*$!+!2Jfl"[#[g70Dz!ZohЍ#a ?ZĂ d 5KHL?H$ ~`["=@%;I' 08e K kX\ƹ&ВfGʄMjl;Dfx5H7i(cHV?qbJ_=4~wB,o89aAfg`kJhW[M|!iXp[!Xѭ'7`18pJ*jh+" ,K"5QXEt$"T|ŭEPJZ+0;tzsp`26$ʇIP xZ#QtXCapB8Y0x:XQȇ~y0-D;xH Xxrd a oRǍԌ/q̌t$@Іc؃+q༈-Q!Gbhq,`;ӧƨ80?3\PJJAJ܊a0CE8 * (`Ȧ);` I1 |[.Ye0i9 HˉxZJY/!vxKLiIO@\=0):h8'a9xQ3uFМ LAKP8sJDp 3ǛN|ÿ)y4RGp1a+F\*H2t㥤8F4]ZOhLaM+(6 OX)O,P+G(yͅ@PЃO&GJ㤔+~Q#PՅ5؃Z@=$UR1 z0yk*aX؃19,|8B͡Y,SH.)p8hv .ȁwz ~Їz:]40GH04sE@cSJqE/Yԧ }] Xj͊xKO/+!YO9#WtB|p]8y5Tґ U][ AS 0UY DS`yF0܉pυ&KRlUT~Nw-6ݏrOC@3>z݈% y h׆%>8PqN\$!q*=V%G..DP,kf1cXJo>T0 @Hx?8,X*a|٪EO%| };ׅZP8rLU[! ȴywה8 [!]cXpP,̠Ϛ"x? \(%(x$(XBI.u pݟمeGP$[ K؍jƈ^^\.)?|v^b"#}3!I֕50a,&c6[""pM+μ 8.ci9#!4 [^:792ĭcmWJFdwJW%XSdr1'M*$q>b`K]O6WdD̵Xw@bSR^`k8L^> տM`T؇]*I0?p E0=D2d"IQ$eưMP"avK&KɜQ Z{gpl`gUnݭ *RPbP5hdh|+X0-ǼHD6 7x)\E~1hV|~{JY$p6@v՛.~bXވ֒~if5؆buNh[85jYhhմ>`jLv#RD/ca {#\Pgl/=nc~ǭicYkNlZD;ùlXff&`@SmP!n텀ۦUf!~4٦Fm]@#N{ڣt曀!Y<~*x, Elei}:]>Xb3hpRR,xz.plVYZݳW8 'm[-, iZj?iQnȈȆF! =fϏ1K\"Hr"',WtrC[<5W {i6sl18;k2<׈wt LM'8;-:Ř/A?\j!Qs=zrLe&2bU%UwЯ:gY@0Uԭ]@Ӌht^׽HQJvD\!B_vYV4HYY$1i?D$up7xsǾF6gP[-qu- eP{W)H턉n|_V(Tpl;xx#V _v`?~V+8W }:$ahB,a#p,B"A(]z:(w0D* 'A+օ5Wy0.NYgńwG7 qy_{{_Jwc`W8 `O쎂#zsYKnzJh`kDm GnnAgO Ͽ7^lH#P$P'ECiY[="d$(fsϒ /@/G /n7Ŀ͏`㏈V޺~̟mQq,͈"ͥ,h „թS!Ĉ'Rh"ƌ+KN`G,)ɔ*Wt$%̋bҬi&Μ:wg͗@OѤ}EcCo)ԃ}Rj*֬>=uc?G̗״ LڸrҭkI U߃.l0+ָ8M`C|0f$sîG.MFa@| 4lRm6Fgsk6K+ |SIYnw>.=NqRT7W)[vͭ!ۢCNL4({E:|W{_(Bz2w ݄>T+i zIP1i' ; kqvqMx<9/W~4D +)dEӵ]L~5ֳ?QX3?iuƉ??. a7}UD0 NP~>Otu=Ƃ`XRBp |!D*P  sxQp؄@@`NFD6ɔ;1()PT"- "Ǚ́f<#Ө5el|#H=81-2X'-<ر:RV$$M58#D oGicXE2(i}A-49CE(S҈ƬO9wKwA-/c* ^E ,rsoa&KADOFLH4{23 @N369vND|C%wwƒn,F3k 4fckB!P_ mƠphǼ=yvQ9ҫohA<* s%l:aJ:RPA /S.'Oc*k])KޥGHVEdϒ| VH.4 CD sBok5#ĄDMGՑvYR] SQ+uQ#yjJLW:)+F ;Q|Ygִ Lw}p D':P! ~4l\V[pK]5OUUս#Y*&te FP"u: s?EFL(XA^Р }X~$H$5xWQaUlP r`U)`EZv뚂S 5F k*~1]D #g D4pV࿺2sI~M|02-{ƮVQ8,fSc>3fN͉jFCyxc}:ցx0R ,Zώ 5"}ES$Qkf M5APOz5Y:!@S\ַuAi.kjVCh\cؽl]6,mY`= F4S n?F`ʍj@Vw l(/݂ c 2 ӎ@])+]pQTN|W #L'd F 5 } |`BA0 !KgOS}+|~-6xByFMs4#PB^GuUym+Wh~ n u09"0!I8r{:a1i")Q,] e\qr6$}"(:v̩ %RCy!%i=!f؄c ] r^İa4lA 4).'" 41|1`XFgA`J(1DJ0|0ZD1, >D[Z A0p =e55\%=F4 _ `wd MRIJx!O0 DC !ʅ!F!B@! ,etH*\ȰalJHŋ3jȱǏ CIɓ#=\ɲ˗0cʜI͛8sɳϟ@Az8.(âF*]ʴӧPJJիXjʵׯ`ÊKَݺ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻߍW!q_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4=6j7F+;39aiGsdd|/H9OVY:w[C`vu?i,OFf\%RA gc gC6 L12ϟ7]?H4ORDj?]3jjʙt!>)FdMZ+lP3l{hpACE TMLT-B v1P)a>Ź拞ua>(gt}tH3wFX|ᇭF*dEFb(` AEb@! fRq?#X*AH naz*Qr\i!JLM5OА]v*q5Arz%u3F5Mn !x_i.oD@J#chCfF`A25 S d-gL!4P)-XE@-iC霃/:i"Ѯ!2c1)_i'|FoMc8ED\gH*5['j,2b <-B&P%GeA46b&3 h-tv"/V C+a) w~HLⱶtm(P qp Xa5b.z)H2hL617`kY@]/ IL"F:R?S|$'IJZ(2Nz GVHQGN@4 c*wԍ܀Yr7Deq%b nL2f:Ќ4IjZ̦6nz 8Ir蜊:Atn&4sI @JЂMBІ:)\Tױ:=KD3юz H *>q(MJWҖ0LgJӚ8ͩNw*/YPJԢHMRԦ:PTJU{QUU` XJֲhE/ֶp\J׺xͫ^׾ `KYbb礎d'KZ5̻,BQj hGKҚgSֺlgKFi1! ,hH*\ȰÄ=Hŋ3jȱǏ CIɓ(S䤲˗0cʜI͛8slLϟ@ JQ;:П?qLJJիXjʵׯ`ÊKٳhӪ]˶۷guKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,V10hᵃwyҏT`THHIhJcSOG6Y#9I8Tf0ʏ߭%it?$f")=K EØ' Z54E4B<#탧] DB9(E,ʣ;xE$?pF\h8ӏ'=#Sc%P /D=ޓN?c*;dc;%,cUMfHuD%:ܣ=[gLS@3-Ϗ&q0-*LH x`L0C2}R/PѼi@ ɩ>?49y{P%shK>ȓ[J5Ac6o#q:<8#>zK̨(9H]xQM?74BlB1|+v >n8+ug}VmsɳԳtLe #i;2b>x< G@O职,B@4!DpԣDV{Lvy) P!8 &;.!1  G?1=v< VHE Y\HA94wXk]zM x!FfǏ ?`7@#06d#rdQH#AG$B`xk$k x1XR dO $rQZ=>R?( d.¥m/?a:NbHVL%d^2\ ~L"MTD'0 ?+Ay5Q5+x-JR1Af[CF7 MըD$II7#?)M>!` <P7qM`D&Z M9L;([hE#0yU2*E $Q T&zz4dE3rLxjG>ԁv(:Єzlc:&}WVrG`."bzT? IBMQ/vV$C(Gd2]D8/?N(KJ-q%P|miv={ .!D'moe, iHcH#aKõ:.ɖu`"Ł`e0ss]~6+@'.f~Du  y)ftаtP {pkE x$7[@~p L^ b}Ppe+h!zQ81E tP !0wq um J tII!AN 8~aOpDdN NK~ mw= =(p 0 pz 1Ec-Rr} KhG`K.0  nzT̠  .VHe!^SG(LHVxStBC@ S Dr8s A p Ah`H`(pPg㸐Аzp RB\0`OE-h->\$e6 EV}V z? I5 @ `8Պ]HB`]/EVT ` &y Ez*,pIn^x@>v!{T@] H ]WbH ďGU' p00p 91.VQ{ f\pv`pZf3*3ou/.$]wqUݸ7}yT Y9R 8#V:rJ%`ɏwQt,A' `ןqQbq]Qn` pܧ ` WZ CqyviT]&`  k`Рd!&'!1@Ә СA 9ZdpzC>  IZ/w  Q T"  ѥ @F 2ph: >젚Gax٧/::EL."VP2 @ Lx 1q ]'W` P f0"r| 1:сCa*@- p[z82RqJJjpQj |#3ݺjZ)ڮ4ѦmA::aQ*- ,pq6b%&x&!'v0KQ*wR*)Tq jK*[u@ 5+C%eP aS 0W֤4K# P iсP;"0r9ѠZzh#Q!(QѠQJ !O1A`O`(Aa=j7S檸 q@A5ɪqZ" a}|Ï̂qR+@ W΁%{y o3[Qc j:ʋ|s  ;%㪳r`J;Qb 0,uP.1dpW*@I|h=$9(iJ13""|]) (U)u@y Q- \:*1_p@,! 2,l$}`K $ z%Veccnap1Z A8_ n=Сj6 )J|&z$k=O`ćHRUɠ>+P\#$0! ѻ)2 &˲!*u@[!P ˾tbgc \ :ό|&`!k=`j<\lHn@|$ẗl8 ϐeyk˹÷,K@0q'a_N\Հ!!m ,"',үQ K cD"鐹4/9(Q|:-L;SB= 11D-끺IO=P=T*\0gWʐZA\h)C@6)~mmc Qp(PUmk46 rn >ME 0- TH]?5p?jwƈ[X1<+ q¦Q -8(40";+۫}۸۽!@ۺ}X  2\ u w`q4 ?300'3޶1 z]ڷ gw塯Qn*`&$2}AQ.Qk̋O,/ $\%V4@35^<-L]?BKP›|/Ϛ1 Xr]>JL! yp k,ɁXvze1|g^ n}蝱%ˊ莱H0r<V-.2 >]@@ܕ棁>ԯ>NnY븞뺾Xt].^qU0yPߩ^x0^"|~1:z^WDDsN$>"8n~I: h50Qp _} Cqqe@T.PѤ/ڷ4<D?YڭAl1ɱD@ *V?)Pt/S WB5ڶ)._1iN?~v3@ % (ح?1^U^YH?_A_Lz:yixΠQ @O\! ԸU`kP6oUfOQ@ 4B >QD-^ĘQF=~RH%MHc<-]SL5męSN=}TPEETRMtTT! ,xH*\ȰC=Hŋ3jȱǏ CIɓ(S\p{,/#8m1sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊK٦޼]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<3K.dN"y @'sr 02ϜtL-(#0T3DMW!qxш'r$ID嬙73F)Xse&W)oQ!jy@`HQ??jO9Q -U41R:y?t,3tsE5o]z' GYG?Q:TG+貥*#PrO;s1F?b@@kpYTc-{YF-BM ? ZZ?L5(: M#WK0=tL i,X ą\@=3F`0;;d,{Dd?!Gf+EVtO?@/PweT @Rе/̀Q?N="3$/ԱN?mRsLd;,SG'R!63* sMU.R?DL33?9OK#S4g/U&@=B[%ܝ@[k^sL)N 'y{5=(ՍVa `F-@qGJk{$xC#@ p(Fo̘|C/F󂋨c]/L/R}4 CO&;Xb(YG`R'ņ(0U ,!AҘIAth-1G4R!'C u9Y1Q9N V;RTG:):d CH;Ѿ"٪^ 8Β иOS$5 R Xh*z#X0ԃ cCa7#[p$Qx$L! $j&YР0+$!!1f @ɄlMV죝G @>j9V䃟YAR'e3hA`@f /!,Qi$Ch|S9aa/eR%$(yb pO(Y!Wyq4tY ^TEBp*@ U9!#uj*Oе(7\ ]J : ( cqGf0 AVB !xm\x+ DHiKu3ъ+L S!X֊g E>֕qb`%:7,&fuoHf Ǩ+`!T q>@> 6D&0dlBX sD/P&@B*e!jD- :Tt!"w A,X ΄ #g"9<>;dj>JeCc0(xHU:9[:@3 %c#xGPGfը`$LE}y `#D'ĵkoͲ' 7XkH> v px Wb V?! &6hxy,Ez,OVņQ $h bUxL@P5Xe׷F \(N1Gu”}< I"4:WmV> "N,Ra|0+ [E㐡$9{ 0 w p Pa a d /`ݕP tP{p507`d [G5 i'_<RycPBGpw  u%#PJ  c7094TҀ p pɀ ?[@ x$y >?/5 `P]B<`.UPO\e\ j }43 {UP  llGU[  PKH䧡paD19)q?G qWp WP ť+0a! 0R G AY! <: ␛g0c M `U8p!@1yB:#sS8aOةv =ʪit`A+Q z-( JxW .G*qzȀ/50dH)k1t@ z4b+)W;sD QkA|lHgpP squ*q894 ;wd)'t0%Fh 7V2c<˲y8Qt[3#ˍ <Q X5@x  |rpR(ڸ  +W?>1:{! Qv&a @ V ૯k! uΰp SŻ,  ЩWPEګw*"am p R4IeKK$Ry tP.ppAPGº J@{:*5G.P  k `Ak; gMU+2YS>4@6d  uPY3 , W oP SP`FաP"fm5 @ 'J>d4 7Q `7o0%93mP 7[T)h35pq @1V+[`e?V#Ǎb|B<9ث&Ӱau7"N(P,+xzkt3̅t0BB)-_31UCl * C׼l4`0 Â3l(C(t09SkEǰ #J;琥 afю̑!@$ B=P'-ex"   ܔ' Zz$3y: R.TjՃ<ʂI:U8,t*$W u-Y\jt{P#PMEԩt}L-CҠx瀛g! (o  qJm !q1K`_{PaS:o!/z +P $'\/4_(oXJ(׭ @;#@h" ݘh { ; #P_q Kpp2 wAz }ۉFV5t )vޮ(uit o $ܙ!LdC n֍-SzÔ^m务n<8rƌ@юCpuu yNl{47^膞(-}諅*Nl荎a^)R i4š鞮 ^~nb.&Q묲+5"LIA2>^~Ⱦ̞=wTO[^!+n:Mq_N6Ã^2]ތ,>^~~ ~O?rp2/# op?_o T! H<@!$*02?4_68:!9pE*N!/SX\^`b?d/[ u#l#pr?txC¸<r/R<_tO1?_?_1~ȻI_?/S#B?_ڿQGO!  @o|m_8Fh1< DPB >QD-^ĘQcb=~RH%MDRJXSLSN=}S]PEuRM>vR^JqSV]~VXe͞EVZmjV\uśW^}*`… FRō?92CCYfΐ#dCZj֭][6mƝ[n޽}1nō#)?=(|QWxPH/ԨK哻u{퓍o~0@$@D0AdALL'B /0C 7C?1DG$DZDWdE_1FgFo1GwG2H#D2 ]RI'2J)˧J+2K--SJf$L3D3M5L3L7&c椳N;ijO@MC&^fFmQFeRFYG1RNC}TNoYhՂ\5n^m &\ؕ[um%؄tY\e6a 2g *Zb6ڊ6iVmW\p}Yk&ǟwz块^||8`F YFam5Wkaye(X_jXD^WLWUct_.oE)fw9sYgyhF:I:rƩqյ.zqfi&mN j̞keUs@6>[V[m n>\g"b|r sW^A'gsyMf|皁Ftgv~w|nY5eM~h)eƚmmb%ŇJiX%j&jЂha6 m0ՠ21 nmPC W8Qj}8Fߘ=hOm 5 p5>bx1 m#?İD&2Lf*S i39MjRsP!Zb ,jaKС0G+Qr.P5zgߑa(!R{`bN.ct!Q {+!PFr A7pͰF+nj4u8F)n]C8A fTck8DԱC!ox8>"xjqS:+=IZgT~l2X6Q31Os1h9' ].0tb F7nZB8('ƠM> x,xzW:?]C+ 0>;B>Qx-NFJAB;Ј:pC`T3 :c]`] X%ikX);=( N ŞxF31c7uc?r<}G<hF!ZoM|( zYpR=eNA .{WEa7 RDU^A1iJJ !D/w!`]V=\Plъ+ 2 >up5 ^o3)JaC,c Qe`X•28TB2 6 fӻ=oz[2Rqbh5ekHqyu#. ]{F5w 80숻][Ra; ` Ga]3QD+K6˸J r᥈!ZG|q1BLjFH!u`A>b,ъ2 R4p7Ij2]4/ˇ |xW?5yS/Fܑ=0%t1G s,՘|o9tAlmk5, ^ $.Dzw"øӶuWh8G\ و^a?2cLn=fhXp68;f+0Zȷ^$:becYcQ )ZRb91@<@<@AdA<:A`h@Bffexʫ, KJ K4KK\K\˲ʣdKK˻ˤDK. M&ɴI ɦؤ^`D[Cwϙt ?J>;u/S44%>^ԏBE@sp;CoHcLO2E =aR?.d:O)cp:!HEP ,8<@3YOfU+ؔ{A'Iڦ[p=t=1o6QR# kD>Tnt `BEWL㎽pG˲k9nJ5Y@ JhTL9,4 J"Ϭ-sPm$T+A\, q'{N;2'JeWK)@P4stBtXŢHmjQ 2.WP@.{ꕡҠځs%$G @!!ᦢXҽnlh4r I8B'"F@Dzp0t :r-bZ+R! F MtHp $\r'{*l|B*щ?("(@#9eӨ5'* 8ք LTD*qs}2њyŠBP,0A̸ƾw&p4Jb:p  el#kPHbMd-x(|@H$! P܂DQ r\˟0YOQ;ZU6$lDP, W8@# M.|, YTԛ,N$}(uӁX 7 1P"̙3& |;0I7tr H8GVIJBCY xGB`%:Lf9(7NEAVB !#ݯ"Lt?Ps@CI Te:*$=D+dB{Y$PT zp@ cVj 0Z~Q<:9'xD,ewmx g'P= jJP  X` z$e2  /R1 }q ` X E c= cVfwhdl`2IH!B q20 0% i8pJ >d"R9pP ԅ&@^Fw& ?j V%qR{05u+zu{_ W   sD"n#qVpD[z`0^ Xf l0 @+=X!'c]`a qxt@rnzrXݘ ݥu` (bC`2s-h 'Vג( e 0@2pyuV)5 IK UP T 0L(PkI (@&!1(6D+RC[dQ.CٖtݢSp PuV>" qP&pVT5q I!8c@p+bpY` 4l"{Y]"scp $,3x$`h|bb4AgIQ XQ9 r@@ 0$:2p o0AX#.%Wt@sP 9#e7'̰t{u uT0lbF'0#m @0 tش*B/%@+!܀ʠ?R@@ -j@ @$O-"Rr9sN"9|`p  Bm*7ov6/@> { ?>a/euq A$*,@ PL8z\3cTVT! cC%@̰e2 "`EPE5:,pk !hD5@t%ʗlr.&Պ" P79Cpe+ I;D );D0,%0ecF^?qb@dDg5eP ]@jQL)@L`:ᚨސ=)L`@ \L ۴!x +49s Z굆"9µW {PW `tr-j* YP,Ro -%~k&GeMR`u_5+&meG @; %Қ05;aR/C% e 9]$+GpĀM1 $ @ ж P<⛽LªJ e@žr81l2He2 ` %>Sȉ-3|: tҮ ,0$p k@p) ͆ްd P.4\=Ÿ,2+Ę¥B`KHLoRl0G\XZ\^\Nd\f|hjlnb4 v|z|~ǀȂ<Ȅ\Ȇ|ȈhAȎLBȒ@B=D]F}HJLNPR=T]V}XAZ9 ^b=d]f}h= lnp `Ԅ<> GTrM ri؊ع̌]e⚏-0ٖ}ٜ٘ٚ#م͠]ڦ}ڨڪ['ڰ۲=۴]۴A ۼ۾ ܸpȝP ν͝=]֝Žڰ0} ۀm }q >} ]>.ᆼ((,M۠ .wR q'0p=Aw27n?nCMpO#~X.@\^] = m @lN 0=N 7 PӰ2wu^u> }sn{N1 > 7. .nvn {~Q A> `N =]a \AnLlY.`^ۭ >^x  $z^ , p 7]@ n@`M%k n > p3Q p ? :::P A7NLP =PL70 Ϡ M ~ -ǃN^] ^5N ׀ h&Pt W aO P @ v[ S Ϡ P|/ 0 ٰ ? Ѻ0.w[ 0 Ǡ N ̭ p u0 ϐAܪ@ @@ u Ǡ ʐH @ 0 >o up o@ vP4 h,7:M@ NCP!5ԬiQ6n-^FEoި6&MHjӧJ)5mb$#0U”mѦ[+c&M+oq2T8yk67ORƔYV̕:̮ysœ2bZm%0ӈ7>̵⤬N[k|YƉΞ7Ԧ͢ÇCu8UNӜљҬV|3uOl.)e8Og/Z*CƬid )y\#Ou 3ԈS>:]zzݿ_|ǟ_~0@$@3(A`A R(!&h#ni DZ#j MrڄU l@1EU@F[bJppfDe–Y8 1.F|fpQqpMe 9īknf :@5K( >8] VꨆG<80v| cYX&ڼyKZ`=ZlX(γGvXio\eCRk10+.^夢 >ro=5Yeh@m[o7\q%gE7]ue\څtp )|Bti 6))MI[@eP"fFUa&cnĘgiFưY`7ָ$(Oe9fNZeYLGPidM>ÖRCإ^j&I0Z!:~$ yD0PAIAONYYC:HeZfChG.9dO¾hf5xKT^NΕFқczQF>8xi&f-7vgvo}vfvw>xf9 Ъa>wt>n<Q daYdQE#%o1FnA>fcC+[o@Y Ok(50UHf/t^"g FЋY2C\0fEff4.ŋ] c, \"s&qfdQv2pf3P1`L^S\2I60|'E+ GbHFƵZ!/]Gr,\u0QҤ'EiJUp1s|iL]fԦ6M$% aB> aF52j%(6u#JEAZ3ߌx6! eĐ0*Y՚lUY xjh%Z9Vܜ՚zEwܺϿUw=_L2vc՚ִnUyUdJ78,nԪЂwōe! ^Ve(V-mu{ַmp[WE.q{׹ent\NW.u{Z׻nx]Wzfm [^֗75);a61`o#Fp;m\(d!a O p 3i ($x ] @1qCa-^qU cx=/Ni?r-b P7Ȕ垟+)ZAkGַuuC׿v] \bҽhl09#4Жtȟ-mT*z۞mkۢe+{ֲj;.7}nr{p}x[fZo~7p{ۍ|n{V-/q# K򎷼&W{"s}q><'8A;-]cLZ8\sX/zw1 `g@! D5yLv@^w{d{{ܾB 7jg3! ,xH*\ȰalJHŋ3jȱǏ CIɓ(S\Y˗0cʜI͛8sɳϟ@ Jѣe ӦPJJիXjʵׯ`ÊKٳhӪ]˶۷pvݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУK.pErԳkOMËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)`Li%`\h^|)d?fS3jYn9=ix|gh)h^3衈& 6裐hVj饘)Bv駠^IDQIN,jH$%;cfh˜ZHC-꺊 gB ""?!D1T , fR, ˩&babk,l' 70#P=c;ӏ=젃;s4а"I@ܦ +RP*?9LO=?˜#(U;RP#e(];\5d6ArGhq Atyme3٘`&+!X/v9/$"&KЩRMsZD$N=,@ $/~7jo #:OY9侯>9wEy5Ag&X XhĻN:D$ϯ"Æ59%/B@P|lc$V M} %td,PjEVw5n/`tS"b[<ؑ( paxa U'(#N dPIBKFGX#   YL3H%\& xNRDb^ `vDq4>F!!FL| /LD9Xɨ 6%3vNd,QJtBwA|dLcπMBЈN7h焷ѐOI[Ҙ$$Lg2RԨNWVհVk {DHL&:Pb\'*ZX̢.z` H2hL6pH:x̣> IB$=DF:򑐌$'IIɩ̤&Mz %v! ,gH*\ȰC=Hŋ3jȱǏ CIɓ& r<܍ֲ͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵש޼}KٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h≉,ZM0(j@nрVSfCw*)#k]3$qk:"T@\C-TVns@/KpF h%s %iX"8 ZS$ c.Z࣒V ZF@ ꨤr;EY5cOu%^: <WD g<̀S? "f):4IUE?ۙ񚨄 s)L>K믅"+OmV$4Q\40B`1.ǚO _hQ&`"T' ~?ԉ@d,L!!Pcr"HGWӜΊ+в~oёҖ> 1,s2~F@, *0 cH\~c"1D N.p&};4eTA@O43l0[6:ӳN{]!j0[J2Ԏ5a SҧK7N;ə*@?td#X$m/דD@;lzx҇c]'~i#N!({FOt( eڰ1$!Rh1X #`.p6(' q*T"x*w \/f(Q'b#H:B"@?Qz07ٸ"x:""XB\ PPLhȡJm)_u}i̱h= <+!A~j>liwts\=a`P0!c]`Ju|=pI\g0aoCe OQ6rf3[=4٩v)ZU`ËSj tŠU9 RpQSxfЃWBkد^" #WCfjsбy A솪z_豘6=J ,UĐkn90Yb 24aL]b;Rwjl'Nah#pT1p[XX 5g1 D܁ Xe#X3$w_đY,ՏkIE-,m" ;9`-p Az}1<p2vq3Shq# f+ /4ڨ<'~p\ 4΀WFs@|~vT(OJCxB8N!7r~x m`?4JύR?%ʄba:Z/!"^$!OGĐt(!~ u} p6 W* ETEh{P EP`w\XEv@4eq&!HVB@DC1 P C34 [C>X w`8Z1&2'$AXp@A"T;@r6 b6 &,xs Gd)ۃr1 7#~b@40131 q'0\x/2sky< 8 $2a48 !yhg51 8u;a_\'2R̸np&qӸ<+UTAߨ^R6)W-3c1RĶFT9! 3E~B=@\)P!f3)HH#Q0t9$Y&yB (,ْ.2D8)Dŀ6y(Ya`=iUPGt"c DɔR<}S+@_ 1!yܐBDb5ihF XG@HRDI~!8З=8$U"QID 3 QyyΘ) ,8 &0BÈ X sI")  YyؙڹٝI ? OI6깞ٞ#i)yٟys~` pY Bin!ј2T|q&2_M/a2YZ;,:֢>;0T25 <ڣ0=BړՕ:a Ȥqa8eq;Pja{2a(wJXspi1pR:vz$yq# j`_ UGJabOZD 6-Zg/ 12̓#Dn ( Qe#C) ELBB($PzU:Yؚjǹ! u* 0J“P;H r@*0@Hq3u 1b2 ޚAVhκ 4"{('A*ز0+ I6{8:<۳>@B;D[F{HDJ۴3 鴢qR[a j1j @g`G< *1"_Hg{Q!aQ~+"q8:C+@бtYcUޡ cq^(I9P 15zQ H4Qk4rNAZjh`#Q F6_k Vݪ/&;C11#Q:@$& Aś%21z ዾ[]zPA";IIq_ [p jWۛt1bh l`@D qёl4A'O|A/9>ʫ@UjE<J,3Kp0k- h T3aۼZ d+O4 Bha-- ^Ln ̪LjZlh@ ~>I%ʐQlq|ȍɪl:. ,ʶ|ː,8^ `\ `HFy00\*0 @7͇Ux΅ ~X Ӑ0v! ,_H m*PnÇ#:W083jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJћ7Xjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸s[7Gz YZ8ȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($hm㜘0C*! ]圍! Ѐ#N@Վ@?d]3<2NKVz@,d)&]MH1X cNؤLsg]Ňsa@n4#$3@T |QpS+? *wrΔ̃Ͻh @s 6Y3`0AD BDDlO= mO<Εԧ,A~Cè Q#Mwq:xL,fsO? #$<#J"!h;A.$w¨QaI=D3Ko?dN6f͜#O>(a<ݿsvDuO;|cT9g}83y3؃G>:bi RT P ԃj͒x)1'oΨ dto (@;HR94@pd9~.F+F䭠~+9g$ dYڅHQ)HE90 |bAVќG4: G7пo0)C8Q7@?p B ?8BZkeC oCL p0q#HtWu]RfBTkF"`Q*#|d| x4ev 2" W pKh@ EcZQnr 9ˇLI˓cB+qI ""0c\ `G>&~4eQXsGTsLva5Bc&HJ2!Վh0D7юp~#kL& LĜ@!)j"G$~F+%vDMI`+KBjiHՔ7HUEIb$z h#g[ڑJXЁ=?2H`#@lT@8%y?h j$g2aY,ZjW?e\ $ ~ I.(*OL`BW-,&+عac!h'ƂI4!vc%D&9D> awjILn6"̱Fk9 Q zئ|nsk Ln#+Ǽ B\ WJъF̳V@H x<9+>1 |՗@^!C3Z1v E$ wrz:! 9^ vxD#@ Z؁p}H&\79,;a-weHUQB6W7nG-JAqƷo,<Nbx XЂ񌇅OU/|m ?$@$XmCz,43qFF}#_3 V#:dSC! {8tZ DHoRrӬ\oK7C~:H@4ʠT9$`\!x}g{G#V{u0dP f`]dWnT ?]g`8(uss s|EG?;6~}1?@ gb[|Zw|rpg`eHrrPKȄ?vhAuf`P`~~nP\`bx|b@g0#HP pQGtmChU`Z(b sVw3P! ~XHx5(KbgGCcx|a b`XR"8Ua 8HƸc&n 8(}~\D580d`Zf (5(`U(ؑR1|p숍z`nppa J)6؋Hab@ w_I"]ҔsPR)`SV]O4 |'zz0e9VpgN7&\!X}1^2А×X@~{~ z b@Ç1sWS@+{ifPP@jzP0zP>Ɉ )gq+ԐU78Xj0Ў;ٞz@z{uPCIQ Ɲ&2M9z0Ǚ>> {ؒiȟ<% r/9r0d(p0y¤UPq%"_bXH}Сc<ʠVֹY$_%=$>+u @4FP{`B)ɗ=XsiI$@y>|EphYp =z$*C)lIK^&D$D@wip$*\ o!jD~X NWG=Ànew x@(pH@>@9ں+ d1,s ` bgs6*P  ƈbhR8{i * 1|:vFj\6x `g@R7fp:z?W6LPkOa ΁&b/ggP h"6Ap7rPnJp(z@rpg; uFtE  ؀Sk;!kHG1<̠ aUI")YIbE{.JQgh"3k1H AYpi$p O wG 5 0P bfJ+N(hX`H,_#'`mp ?a bj{ f-o`` `e(cn|hٍgh0v #h6pVpw' T5qg0`2ha':pP0b@U vrVۛ9jVp~}0h-q(L Qu1D +g2 eWW@=0 IтFL;`$U&@Vv** l+LD]lwt@ TG} %|`bwBt֣vPpU50<ޣcr&@(I euf5JT̏*llc- g'Qv`^v2h%1wps> k-]h.&n4 #;e0 k=~b"v{$P 0*(G&|Ġ;a! s#,k,vV*//!H ePt>{{pQ `@A>p EKz:`  n*?5DΌ/Gqܐ1> AnϖJP tEypW >)-1(%0ܫ.P`Dpfu: kPewKH-R?yk *eKn!z21j &>Z1,np հt^;0Fo޿Fzc^z>t@D-^ĘQF=~RH%MDRJ-]1߼IzWNjWҹkUjMU^UV]~VFo+1qڵ4jLnfIO];wP|o`… FXb !Pt_ԨQ2fMzR6FZj֭]٣Y>/_;p{pōGfӥ/^?dwvoTʽ^OS79rw&ۇ^8yǟ?qTSđɞ/AdA-t'B'|ACG=i+H1Fg%|ntA%|'|jD2I%DR};|'b2K-YsS2($"Bdt Sձ_v ?vw},vb}c.,'pEq-X`rbU#yg&!Dd_)(Vhfv ($RM7%,0(4h8<@)DiH&L6PF)TViXf\v`)dihlJIKp)gEB sgг矀X@2IA1BF*%5Hj饕wu-I =J }驨27SHHQY 9@]U;Y9S5(ZkAnD AkP+:V c6E0M;@ 쮘Nfl A8p ۆDX$D c:3}2pb5l8<@-DmH'4/ұ+OWMZ\0Z5A_vVm&ȍ4N}` "͂&wBb$CLـG73кp&-B } EQMX5DCx-3yQA $ d0ݐM6.PPPYPG(燀AL@@0$ bR1{68@  pNkmi&s^s 6-iXDL5ρ@r] HB!c !4An@h÷G@Dnl[+"HDX_('IH8bEdq @F7A2 -CcZV}C o@<8Ƒ >_MC8YA'Rc`cőGahDtH& I|%; IXRKJd0}UFdYnՁsYDAEĂ*s'#Mc&V)}=C[\?Y 3gO }8B"`@#OX?~DYOX!Df*5x]ڑd& H)y"Ur u (m9T#(H#(*EBK48WDH0-7ExpDS/țNڎy@4b0uxGgt2 Tꐝc?%J: UF! r`;ZZ%Nxl)haЅb:2$S͒|3)kk!?HC.}H!6rS b 2Yт*`'uE^~ %n3ŽP^Pf:SRjY7!N{nfdؖ! QhBbw!h@vz$=IZ#i$hG?!bchLJҸ)u=Qz-bYX -"x!yCI-v>BsO<e qG դ 4ȁ. bwS nJtAZ &Cd0$_r7k\/$rRb s>8]\P ĩ <)CP`汏quRw {!@4~zD tC0f#-حs.\[e`s @}wW |  I}W$Uh4L!V䜒2%} s Z q> |', Js!U8A`X Ovs$T 9 ’# @$vbCll%eC!m6bjحЇ6DMWii d̞W~ 3x5PiGA6wB 9m GpT.ai'2roa\߇D}NF1b 8|]Y]zҀpgCye~p-#)s7qD #_!we 0abR$B1 Ta_@  qdt"0ÃWTBtV(t*p CTf 0G dk b#pҰ.:lxP(I1t qu8_N;^g/ %px!ãq`r~ 'JU@_Rȅ Q xt20u1g}MGXёj9GkJ>FX%(fe8csd$fQya`h]^  UhQ``8@35bF`Hr f5N} Q ASh(`E88V uB(4r)KUZpEJO E fW,!? cAz#A H (K'aX TPŲX7ELJ(pkp Svb^2^8 w02?"@Z9`i::@S{ W X )47T: +E av1  z I1JCh"頣ѫaN U\{H pPXXB& }E\1d(@RzkJ! P !l2`"0q1d؋Pd;dP:A>0 К$q$ K$#[H/{0(t^`m`RpQG TfۏרZpaSDBbR;d9qu+njyrqtqRBƉ&`/vDqu t{ q 1 aaZ !\!,\@;}@Ck%h;Qd `ePPd;dK ZPKt dxp+Xe< V!0d'+&嶰S:fr/& aWoepRu%U,9 `PN=m90!Kfp^¨@p%H */ hk ` VVl 1м A5W AXǖ:\0r<@`cNnzf$ 5lOʖq ,(ۮqzM 蠿 Az  ';~0Eq ¥ff8^'պ!-KZB*ϐʶ ֔ W 4]U` I  /  [@a d*2e UΒ}l E{@Pԟ{ pOr P[MUܴ]|4(&ХxQНWOc:m+ۼ+/ P c A'qϭ.n h@#+S4w{МѮ`R+\ ~<  L򂲰P`SR q^<1Ēp<aYqCz (Ud4O!MB P-t R6Hsዉ^zH;1 =wBb>pe 0n9,X<lЧ60y$Jм!> K^qe{i%<HwW^P  7 a 0P% u=|30Y P"iDוRjuq^q(W," Q.牮"9Y~:֯ϑ YU5ա%@0hUMf„Uap\#S%N!$ӅV} w˓UXui_kiٰ >"^-Sn@1؟[ 7iPh: OPTDZ4Ѐ%,5_fZ u} `0ӽ}UEz A? @"^"O?HI =Lq ! OvK_P QhT~&q)'`;o+!wo!@@ DPBi4$D L" SN3nRJ͛/#=, lRMhT 5 ғUֆ͸~I?t`2 TQYĤLnV}9a٦V7Τzu ,Rg VYsvQ̒Хɣ*ĦYhic*KgNdv90]kh>A T7]t!BxY!@\ryzG 1 7=~V}Yў?1'; )D)M!("9LD#?Z j ?Q=/ĭx0ETh|4Jǝ B7?JyDh(+:`4zԑx94ˈLN+*9etJ@ˁp|B>s~9ʳF C1pOӠ s:g%L| aԂIN4REWUX}N:5W]ɍV t(Ê3htv(hLEaoVy|d=!S sr3GTwR}םer^:F8D~Y6~*FLk Ht|Mʠ<@$8g)O M$V{ +%ڙJ*vft'`oP!DgROE9'tIzʥѝj ~6x'዁\ $z',Ƣ9y ](,y8ט1D|!,'%vxhP">s3=CV^}sݟqn2]ZUTSWpӠscJ9~>:wE6^εǜf92ь_8m(1f(hF4ba24ȍfhQ!FS|BF D*J=)ЇNSԑ?y^0(0-ԃvO? oІ*68D#BFA 1F'8β{_A채ޓ S`5æ~H\LO.@!y\?ʡp$%$JY2C.b#TJV" Ȁ`BKgAAfO+ڥ:6 YTQ`(K3! Lѐ6XbY3!7%#~P]8CJvr pApFpÛMy?|\>IU>%[t4 Hp(ET-0QyVa(lC LzIv;x>̡|+mp!6 \ %H)ꆤm((SSXdG<jV%:J1)<9 2P)jR-pu~8!FUSLǡ%{ītѸB&|ZT1kdҐGۧY4Z}\"8(U%Kp3 bB 3vr+ :K% B}]PJ.0ٍDy$*H;]8yh ښF>qvqun9tXG)= r 3'؇2bV2S0 lH ҅nАA|no֥t'D͊/L@AI*B1Kd7nG,L&QkXQh@iHg\!H0̐~ޮ" %QS$ zxCX*>2RKPB]<%ձG/J} t,. C#E ]>64\sN";>y#36G1cw v [x=%~`[=3cϕ%.!+x3m;`=E^`T\,5D GHxP=U:EI7(4kD Y5Yӡhv9]| ا8@c-=09#8 ]h+Kp 6Pg:(Sp6cA؄k=u풿ָh@ ۺiA[`+-S}:'؃1Њ*E 1<(Eh2ò774kÐ; qӂ ==Ѓ!$@==6xF`YHak2a0S8yؙ9\c {')" *調SlkSEȿ"2C=(@@BԃA+4b7MdڧTD)BV "%pNЄpAH<ٶθVx@rDphs=Hx^D=x=]!5jYqq7% fa G!EAFMBAG'PjTEF~PW<9 yA1AYE0RP7X+ٙW StŃp($ȁԘHϹӄ̰DG!J#ԃ5DQ@t*`RD}Rȕu#qPF &s( L@CXpx37L9G]P7΄)|h0:9P?̈́`dO`J|غ:1Du: T`LԼ&AʔA`m\ D9+p0;Ò OL,8b&NYAȄ5`Q`4^c(Bͦ |ȇzs+0:1440с=+܉j$%iB8 HelLz%9x PHȉx tp#'I7$H[pCPt 7BUϼ;Z+{N0hjP4@ ;2-#pYd0U0F< .QGb7 T t>Mq0Gp 6x>8+ O?<@?h,UDA EPMF: c }`s؇~WW$NTYP$T-Hm,J CqЧr689Cpۢ{ЁFO ҹ8St yP9VP*3.s =4 (l XZSP[Uc4<+4 }(:`sRpyTp<X >0'-1!,8 D$HjQ7v;BzP#gc-Ʉ c0xՍ MHNՂPM= `t@C|e(y@EHT |`-h3uU=-U9,2G`1UZD0۔  @Qb^]H-4^z-lFF 8S](M f(]x:Ѕ(RpsW$蟉@[cHH`><s(-F2(ByeZؤi00x5\؃5^@+>ۢ00%/9?T "N wQ8:U 51X\զе1`eڂ` &cKFc`Xz A˕0YsB(ZvgPEO`40c#Q)GO1T6CKK(e0P7 6T[%[I\H)5YQȍBn@` <681M܈ h0qCX00օfG(CQ0؃FaR|hsm'1b>8>8SgU%z\D x{ .S&܊H P +l \je׭ N.CX)MtS(& ~?9 ڠah/\nh7#OȝEKv(BG؃dqvT؋vQ>p/ )͟Y5S͈^Z8rJ 7 P0 H ԺrhƒevS}EY=1(=0" I Djv+62B(׊-C |(;@X/u2bi;PkRgnj%kP R&Oh(0V@̀yg%Kpl`w`Oavc{cKf];|؇F_@b&vPyPMqXv<-|uwܜ+ Ke@SPd:Hr&?G(H#x0xxxrxs+1F)HB^ !о,g e(Ks [3wqȸˈROΙ jqfhXK9~|ؓR&_'qk?Sd`{@o2@@<.K s80O%/"9]D`@A`V )V ί@)2hQ<&g 5lV{(b|u68)a^z@(dN`IR#tڭXo?]eWO@CJoϵ͇Zl^}sL7 c: I@->=(;ԘEVWE&aWp9Vqh=MS1E@<(R `LEȔVT!;TYJD{ ӄےaU5YP(WGfI;QEtQ!s \_qB;I#N7p9H>3)WH$?1)J#dlJw5R6#RrXka1 c7<W=S̶g(R") Ɨԗ(8F.pR.9<4R#aVHUTSnZP<@ >PGWAGξ)$C><=<oҥL !RuiOSHrS4ppZ NdAs9vUZQj/q;9GDf/S_<9Im#.N]tg Rj`{6$WthSyI޾<2k"q;Ӡ /YgA2{7ec-=YÉ'd2(I}cuI :֏(`w '[ H42RJ7aR|qCfdPg qo5(\AS |$tp. 4HG/3+ԬGo E@A0F%FǠC#::F6 'D@ތ!yC2R "8g䘂4{\fb :Wht,c P,G!}xTURL$  ^eeJ+ÁIah<{Q3Z6؎@ +L? xO D<$q'B!$,'Jn.'>UHQ?vTD uhQ 䩑CRoIOVn$K Oy.NqjG3y(J" .|]B!ȣ$lE"39 .d\D<LDΐ gt2p9Dqi YKnrEUH$BdE~3hqt.*B%a C )LI_ځ0s9ع#YÀPKYiG]M9213H!$=p*H%޼l?z@Dh_NWrD`]q_Xq_#:DPky:-IpP?1, fj[>/o@LWApamvp)B9"Ryc򯑒E߮y+'+xHbiDX/"q#OaO'\Be#4g!O",(QY-CS\6Q Ȅ)J)7sǏpq8x-'/Oۣw W@?I]jly@3TUDz$- E4Qu`E11X-$CE|BX DeG!֝ 2|Px ND!|XlB$&ED > VV|PE _TˉB)b\P PTCБM&̇BD%D&"suCbtI ^fQX_5L B?ECdB ).(ZF?PDC#bRXL'Yu9N$,,M$,"2?W82 Ւ$cX?LcS5c%BHB\ 08c  C;7#@:QD9H#P9Z@C` ,$D"Zn)6DA0biDk`QDJ9JRBĂ`Հ$hXBQFZKeşP>IpDAQ>AćUDhPx$Ug4 pXX;bE3l : $STN%E9C0DHA-ĤSeKv!Rl45J\C(CSAp pA)ÿap] H^xu- 2-'&P8LC0eJdx {LT$sM__{dB٦-tbElC]JL3Ht'DPyƿ%I H|E$yf̃O5^ػMoX&3΀{qIEYIq΅,֧WؐoRgH/XtU}/Mȃ.;D'BͤVp MhC@cezEmb!ćV>dp@Iб;lcѠ9]$c DvvېVY>DA!ŎIЌ(X|Pڍ2&LbpKVp!BfdeX$O EI:iV4O(bRآG?\RE`})8jRKg4إ^DF&6մb(9〬I$&F>B9R/o@|r0,5)| 1'@E4 =檋UI*J2nvR(PA$Q*NCXGpAX)*Ʌ`@:r+IPiAlVH+qZ?3MFXklS?CEDt.Jʰr6z)~;þ2EAbmoP-ٺF^-NJ}BWٟF\ ).셦R(Xp ԧaX A@J|-DX&l@QnNu_d玮Rl -D(-D,+B1>R"@$V? %M>`8B1d"olʛ|dlXҒ.ńD(bz: e&V\?4CIt6(BY?tyEUJ?8Ì6-bZ@9I%@C-I3'[Uو < Fnqf/fohy&PH;HD\dڤ%(D.t.]E=H% G.uLJBDK0fp@1 e1EXӘ*v"|2-,Qp 'lf,!܁BH $BB&!41*/bWyNQD1 )<-WNDyI^?:E>L.Wl PC$ :ȃaRԜH~jdKc`SXsv3-D+ >i+6t-d'Uȯ{ۡ/Rd#5^2E)?1!XDtGqL‘<'$1$(Ȅ/ QDO0435o2\(25 2VXIPD>-8A f'HTEoE&N= rSDDЪ,EW-ªC$l~#b)V&4K%7W~ȋ5tgv# {ߝAzxI%X)BDhe AN?R5ٝ_]@]5HPRSF/(=B_;TF4Pj6h0B*˵)u};k2EXFj\AUqAcGl )RZk0iYEd>HF1UD#M_|z5HR~%*Ckg~.E#=Luo@>;0ol@R=4Ѱ=F+`QxΑ'u2 d^>U\U->pK>x8D74@:D1*(;DB2>V Rt\?@8`A&TП!F8bE1fԸcG Q 6vh?3v|X` DI&]xROF:u?Wfպq0 OcF K.̂> S9*K;w}FobǏ!Gm8T50.0 (kXOZ7G{ ρ=uk-!/ *l^ AxDvo: mEHC05^%|bqqN1G/O!+9v='a(e@@cʈA!éQ)C t xi4dAvȗ٨9H@6X<pYBr ㈊\ )RHOZDGsN%ڢ嬢;X ( J}qD,7LʕZB%f화33ĭrJ|2H8 BL t'F&ʍH̛ ]ְa*$`DGy#8dI sVPڛ™)RqD^ʁZ^b(b'HRʑes HZމl?R|1Z-ulhT-CVqBhz7u#8X*+ #y|@G>1f JH/r>)1:\9(BEnbsL6 PM Z U#WbY@qEL|QT*wP&:yF @.\ږMIUv(EXCIaAtE'WbszkR-_ێ,TUqsQT KzgByK%bJpPIrhfg4mx*/+V`oDlVdW Jځ*2 eeI(1p,+ȂuGF‡6yv\2e:v=\0#X`,s0#`q9 f=#(=Dq JA/7e!=>Qw+h9[IAd ~@'"AEKeVtz6F6OS&I|f |e&j0f1MYȮk,iE.jWI.s l0-r W 5N|/FyBGwXS<^ ixV<M%FH%Sn~x~íNDS1[`b5@yL :SٸO'P1 c+#blOB1mG^+mON<} u.'8$;EPq}S˘$"ل. zĄc?"4E꬐GGHdX~F;n%!A |Ъ $ 2 α [\LsdpX[ Tqw#i =ޝD'HcoƇ64U(Pd(+ApKb%|sZ4`JH 1 ir, c5,N \0A5` #/"VtӞ"R6rm f$/",OO9.!B02E "+)"CbOS6v0dTMJ cd 6 +* 0S` 1""n#Y " #2h!0С ;a"L;LD$ ECV! )S G%" @  "AJEFQ!@1"kBo!B¤^1*?*aE d:(npBaH*BN2!0 na@ "ON6Q3e!kA^ +C#B"! qPB!aVd8*@!B8Dj`"/crp!A"<6ю BR"Ƅ&E&nr\ #Ț;4QA/"c 0 BgEdƴ$bX!W1-H*$`e/9F $D !N!o28ate (*I( c4/VDH bܖ6@.8FP)#D&-H&Y͕22"G?Sq  A܌1!/ocK)-B_D!U] eS"02pbLS"9K H@u#a04veAе#rRv)(" BG6f!-3+P(:b5.j-w!T"vkli" S{b;R9p'z6 "^T'N'"9ƑC"b/BX*`'(dv * <9f](R!!.0vsm_Ts㻺Ktd#BmΫAK8l+ʃ 2 N:  Bq>=u$v"u#lTqXI2bN/`!HFANFH?k:U\*Bg*i't .zfsk" p R Ί*o+l9:3*!_v$~+a1r b fq\!H"w#fxl4A& Ã9r&Z/dzo2UW)L$|` x"W9V"QDw +ҌB"&X"JH9Tc`wUр;  q}֌r mkbA9a , b* ‚+-CWhC= pV̱Ns*):."cD^a1"!5awR9*h".0w*\K 2s!t |O՘@39/YxJ52E p!rW+A!r"BO.VPAwCRx""e}!2! *(kr a8 a 7a?:rV t riZ*taBnU"}dR+F`˜ brtu!Ό1mFڪ7}F92f u!t-!U6WZ2$6p9!4Ƶ v!װ- l#67dƄXI;*ApP2ω]A A#?KJm2a"%ಪ:v L* aW!ub;[ۼ{ ޛ ›/ᷙЛ{۽ | ۿ#|\ (\! \A;m7ݻI%#fZ ľ##| om =gDžǗCWRșɕ"pǥ|ׅ[b˽\ ʽ<\˹\ל  BѼ̓=} =}!=%})-]1^܊v t|f b ~7h ³{bʁN6 ")]ɞj~빾>~ɾ>~پ>^ (1l2~} @ ~6"@6! ' <3z <ؚ*"6 {*O LI!ZBA}M"8} R"@I55*A?@a! J ]g h ̓ b-oΚ!#w h!2g t1d2Q7Q`ztaa6<]x8`Xgf5Cx#Vd 3X12FL0#C,&TLK=t3СD=4ҥL:} 5ԩTZeKܤVT bX#2'BbJE(0ۂd;WN%) 0a}0dɃh-716%/yL[ym)[e}]j.P欬[~ ;ٴk۾sN: V;~`r++G]LҟWoyvܻcv̿C^zvۿ?`H`` .`!Wg%MT\cBpS!LI75wb*b.c2Ku3VD0hS>dBIdF{PPִ͑RNIeV^e-V! l{A@Zfn gQ{YLb~! , H*\ȰÇ#JHŋ3jȱǏ CId7k!f˗i#y ͛8sɳϟ@+ J4`cZvEBJիXjz5XZLBgf'6VȁKݻ@ /l-Li҉tp {#KL\t )33}̰@?t9ࡂ1˞M婶_O\83Zbr+_μKW\6P0ËO^bv[(N`9Z;7t_c|,E7Vށ& P\_ŶVhfv ($7ޘ,0(4h8<@)DiH&L6PF)TViXf\v`)dihlY$cn)="P 1Щer'K+-uRx F*H3饘R6MDN+`CA$Ņh2<@-DmH'L7}&%դ\,@D9Ar7kWU܌C'h t 88.<&.CN1oGgJ\'ATs@[0P uҧgMl#]Bd. 찃ܓX-V`+[@ t2 \7t"5G"xcV7 ^o0l\nG0t] \CA(@-AZ 2mlP)$I\ TpEB\Ljq@- xč؇^Hox̣>qR`C1}X8s'U G|rPlQlRGR/ 0ʇ@j'uRL:6IKn+26;eQюý5[Ѓ(UIAD1!9w16JCx +0{ ։{j(Q+Q|C'3Ҏk^ 5Cu6G$D` 9P@2yXQB)MʩqNAHA }%J"$_&|t"L\`xb'QH"RҨyPi$ ꪦ@x/. Sm ($s5Y ϴeT ]$x'HըHg$n%@P+D aHxb>$*k>gu4ZyLԀ_n}3s8o{ pd >qEh k"h]]H;I%z4gHk:bKI.CduZɰYQ-D^Aj*CbZ]%XC#| ]wc'PQ |<"PԓD9=(S /9DaA/Zw9@F~5A.Fm$HDE%)䛈'ev1D 2AQsC|E0xrljո< pB?LJսA|<GЌ&#½lqJṆ!&w$Es`!_?qn&)~6AYyR}ib^XL$ ^*$L`HAߴ\&E,% n ւ8"wP@ !VD TK$A57xRx̤ P0_5FruR α\R0r4{a "Tdfq-U@n/u bȀp7`terGq A PdE`aAp85rl}"4'$r'Lp6UsC ϧ8x dWVJUUk ǨBhC +v8 wPAژ-K.4&u`fP=f(2}`)]5r׏ iX"f`iZJC<0*I! Hq Ő]{n ɐ- 1?ANh6iB bm5Ec A{ /ɐ/`T҈ x~.S t@& T {.mw|Pi1PE[P4Á%@x0 pe^ ~~шQdy$5@WJ!PpqhK p ww0  @ 0 0 P I IqSI[X//i,N g))N8ip aVfP`P 0| 2)U;YGH!li QBa@u6F[Z#pp5*@|pSxPUq2a:3)8S(ju  ZaZr0rJqY5 GxDqz yf\Q$ѥ`aPl0b 9 "Q3op?wGO U]KJ*x X zr`%GVQm-!%&| \R ag2ӱ_9p0ZPj2 ۤ3~KtzIU k7{v``@=" >L# Q<rUfpnP*`P= !/J#<ɀkj)+j1:1cq*D2:0z0۸rKz0zSa[+(k P szǡ˸Ka] x #J%F  Q\9#bPt@zpI1[o0KP K%45#%q h|Pz@ t{r;X 7e֡82z#|v i+x@h`ۼlSaK;ɻlQ鰽1j8{z~{MtA )_`\ g$G2 k#t/P{ 0fz-1r%20uPAf1l)  v>J,#2$rrL0 c.b{`ѰJбLs`K:ѽicO0ܗ` ]DzVP?f0ִѣD1X 66" 0J E0~,z AU}q\Pbu^V ogxJpjX@Kr˨g@zȚ$ BC hu4\V+{[8A)0ҙ<kM"0 q eiM`y0ݾr `+;`]@ lѪiK{`6ǰ #w qrf X k0rs;-QR &K JY=@ Pt0\r r dШM*b_ [`;`ށ=B׭%b4 G` ~D}fpjMw@wpc͢p4vrzA<#A+7lIP oP(!+KV+Lܽ=j1z oW0jlP% R%As P@VdP V= ut @bVِ@ Ûb`1~ WP ^ m ( #c[ A$Relct e`76^Î Чa'5Ftй p9+}9/_n4$5KqCqJQ^߅f *Zo^r@s1B% UK@  A r XB?D?qW w@ ny`Wզqw''%q\(0 _o@ O au mFPwxw? co e w P5.uiڔ)4rNTiY` I4F`Am`J_V-|@{`t6XA w h$%S 3b2h'3u5x Tf7Ovo0 gH}ˍ@@M QZ\_O,@@ DXQB >QD-^ĘQF=~Rc7вsΞH>)I?k|R!5UTV]?d +RXXu FXbƍ7oLuBٱ3hcvjTf[իWݿ=p3/:"`]Eŝ?]t w3+ÇYGuM-7{)o)/@@#҆ w(>4Ns ycA%~snAD o1Gz<#1r=␣Y)GLǜYCK1G#$L3D3M) $(H#{ơ2~+;`ktLk 0Xq3O5++ʪ!&ӎz@=6"".OY'Z$Ȝ٣r,R!4QCM<6Z@v-O^ۂ^!b(( .90[j(gS|-Gm$~ Zb-"D_{ Gu4HR :אjy`ʯ |С=ސ=ǃ cI݇$seg"I 4O( q/!sX<BFҊ ;l,.$uie8yȢ0^|艁 p.@H'Xhv:_y5(N:._&@1HcVܤo4`:}!!Ј58E8BJD1B lP2PtVC""abY g [q:q5X nы_ [ *lopopF:qRy1$h\|1;x K)0&㓖>h=ɚAd#2scPGv$Y™0e,*ƐE9A ä, @ 3!0fDOvLj2t&0d b(wͮH4`vxD3s\;QrbS*+@C|vȞ!F9r90 ~죞7>^ (1ĵh&!AE Wg2jX(s/鍴I!^pe"U.2VLuĂ8@ۼREH8XJ | 4rwի4;a2+)Zr2 c@V0WLԠ]NjeCP5W!D"Dz_%`{;) tD:"+&JrHb`z@f0ۃbA:ɮahJ*>{Wxɷ,(ۏ`ψZ4[vyiU ODpEH @2mM3ؠBq#ǠnnGoCD `yrJtRx@.14C4t p^X_` #&&-xϘʻxYc]=a j,yl~No~Yv̸>p(ZHd{/0w8DV=G8qk# KGy1GtNye32su)B݁;Gzif'7\OzE&յS ut|>v&VvҢ"<}:ĸ _  2>|? D_SX{F.y$׏i0-=St b)Kj*[q `֗10h6l!`V(P/l#O:XahB8#)[(0d@)nNJM(Y(΢A81}72 +0#lBB1ABh0dC:B>0CX$2E#p8|=ڰ6D>D 3;+c DG, KDxH7Hm>8+K&AǓ~E4EHH|9;[ /85Eb 08 Z#:` K:LZ}tS fX kM;̆$$8ϼM+9h$4MLLdN#ׄNHÏPD HSWuE7k]ر3-\d0PM> ؔUYXNXΕmQٚ%լ(Ben2Y;:!i[i#``#m#@55饖"`Kt8_&6똒ҳVfv\Mڅ{w̳~:] %&ц8=lflI"FfTɦlvc0l6&ўl6m.ԮymNPڶ&6FVfNn1F]l l@l,Hn1jnw oMm0oX2 46nl4L8]}օ\pZandN&|A:ΈGXXLwqhoQ p"bmQOf0۱0rgrC(c r#opІꆎ+h7p+qk(6_ NӮhK(q`eheZ-ϤUZ)()hՆQ8.d %OÉEI@°MOVp8fMb؉hG'Z cYW?\kPgO9V^%lg\1vubpH8a8s?q y:^ zOPOkk5hhv~hcg|!qNfwhWBa7VC8'yI! ,OoH*\ȰalJHŋ3jȱǏ CIɓ =\ɲ˗0cʜI͛8sɳϟ1e!ѢH*]ʴӧPJJիXjʵׯ`ÊKhneӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ>z \5ȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(VhfvI2h8#c=䐐H~$(4&A ϓT YH`)dihpL=_:TJqF8Di!'og9)*P9F*~SNj饘fJ:z$v)RD$Ā;3Ux\IFg*4ׇ pCH@ J ,c,Vkfv+kn|zn笫=$)\5<ث+PG)"-<_ 7\3-W1(t )ř3B@|4BP#!!b = #%[f!=3ђO==]E5tωVKtrGAom0B }Q+a r/'Uhj8doV\|8.aytXQ;'Fc$'7G<r,;xZFFXr@O܈&냼JTBQ┫|H?끑w3rpQ@z_ CC/zq@jhA x3w&C 96AֆPDQ.V8=aD$p…H\LOerAPb9\NPai#8 p:5(k )aa_0';!am3. @D ] GHr 3Ha`ɰ97j]8*AsnyD(`|wy]4o *f&$Z3S]}C`21A ه:y} BN朒0@i|J&k0H) df ?mq'>̠1x ʐt$thiPBӂYdJSbV4%8MRVe~JxT jWh0#"8>`{(U*2r 1?dU.%&ALR@K4RΥU=QV*^AZE`%B TÂfZQa3z#h*"FI;;ӾHk/ͭ[ ,n{K벘LfhCeNל޲9$#}a9xγ>πMBg/ u.'}'MJ[ҘδsSΛGMRԨNWVհgMZָεw^KMbNf;Ў6caw3D{;MrNv! ,I\H*\ȰaBmJHŋ3jȱǏ CIɓ9\ɲ˗0cʜI͏ɳϟ@ XnӧPJJիXjʵׯ`ÊKٳhӎM۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfbv@(;y3(@"J O:h#I4s㎏?@&:"()eF @sϔ\.An`sԘ]"Y}=iԚtYyI9#"#}@M"'9⨟ 9J+xiϩːCJ)h#orY*Co=h#1W3kDc@hHv ;2?πq!s@S#kQ a&/Z@:B ?"SRD@# $k#c> Hpo(q 0 )##'ˀb;SǼ,2 To< @=ϼQ1볆 &y3t9\K)WF6G+`C@G){Nqg5C{cOYtq؏`63S3Qƹg?(SJWN?Vo?.as?zC uy0#1 -P=##`<9c  "IնϠ۳8}"P>h("=*T"Pя90AR85$ @F$\BW 4?P,f8 jc yH V@O ""ѩ`NC@esS=#! ;>D)H9!i ?Qtdpȇ(DAxBt((Iu9/xM2"!@yT = iI"?fV+ |$K"Cц6A8/t ]<'^aQ#0V\Υ [(D#LXC›<89NC`' apR.В TP <6K!p9 bRC8!.C D Qs\b!0}0?8Zz!m! 4 p89ԡاA`iҔ:7iAq fUr<T_z щTAR9XЂj ZOөGC \+B3a}!Z9CMS!u|J|2u}<|b>DV kjUڇ SCEjJeEnsSDgk3e{EՄ؍.F +iexg+We>z aPA ` rln ᰬ &00| h6s958ewj,!V^{Z0CnQ1NV1DB &pˠ5 4,>2rڒv3.p,a*1] #vW0AHae ea``@=$tL? /a>ȁb 0Bɧ쌧+\M=}Sv#CMp >hgt Be! sC@yÊ?Pq @mCh|c= 9 IO{5jS͎5ήA2?A0&H#kf- vj,HQ0r݂zbt- 2[3HL)|(lLѡU[$.ޭ K2:7W_w`$6qESBIyb?qrct6!PKc=B#WH*HcO4CʯTJR{Ѝ|`ń^ V "kp,X^?/9aX<{@ށxXUl>ƍ {~ˠbPc - 7=羐jy4A+A4Z>50 b'9N}1S5 s7 0 $ހFCwrXɧ{o0x%Z_st)A l가 J!k#S{RRP8t0 -PYR>@8UEBbTEpJ xp~0cP J?= e e k0 -bg19qrg QUv0h:*Fu 8&P)pJPA x0 ˠ#0?YWG92 k {sWCҐ 2%2xjA9@ ݸ$B&&oh̳A $ԐP SKٕ9@`KBH5rZ"9 { ZR#%2 e$ 9s8roq1B*koc@8YC7&e!27# W89& ]1`4xo @-h40 р e`Pp2 aҐ%W@Bw㴭I͛8sɳϟ@ JѣH*]ʴӧPJJիXMׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhf!il (f3(,0(4hŃ<@)D~O/.騴PL:DiXf\v`taffw倱慴H$po"tF"cL  &Nx.裐F WeJZ`=S! 9GvJ`(#jsꁁ `*무΄:=믖 HU<;ư A0@h@3 5@bBwL+kΩ35!SD=Nk2X$a,!@̩cpY-Y!xnU (g!0\xfPm7{=r,Hk]tvaa|Ց`-6|u=}^apǝܱMbхCw br q@|aZqo)BFO[>c.Gbg<*qr?v2C";F8qfh!@ o+</$@GEnQ~r@(,B,?^|zOc(K ɲR%샀D)` XzI)C Y!tУWP/|P^$N2 oA !h S%dIxrУ"U81\\#60Y_E.LpUWH:ڱ.d#k8G=POqAO"Xf:%G%IjZ3*G6nz 8Ir49T:Iz̧>~ @JЂMBІ:q"D'JъZͨF7юz HGJҒ(MJWҖ: ӏ^5- 31ϜEO= 0EF6 MR@V@XͪVծz` XJֲhMZֶi\J׺xͫ^׾ ,Vr P ! ,O]m KȰÇ;O\3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӑ޼=JիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc%H۸J Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,⋘4h8<@)DiH&L6`5NDy"/4(2`)w`1fclQi[TW%|"#9QXAsbTC3Cf馜v駠#<*BΩ *J?j뭸뮼[_ L@ !C 0P ,}P+k覫nXسnz+K,l' 7|*pt3Έw ,$l(,0<<14_Ԭ-DmH'L7PG3 RWmXg\w`-dmhlp-tmx|%c߀m 8́=$>G~9Jngw砇.褗n:1>?H =ӣ!~/o'7G/WoxOw/o觯/o2ЮP^%M0  b 1 Z̠7z GH(L Wz 0 gH8̡w&܅+E>4*}J@! ,O`H*\ȰalJHŋ3jȱǏ CIɓ =\ɲ˗0cʜI͛8sɳϟ1e!ѢH*]ʴӧPJJիXjʵׯ`ÊKhneӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ>z \5ȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0Qъb=㏐NFBiH&L6PF)TViXf)`Zv%3$NC&ϙ&#y2rix|矀$Ā;Tx$!\*E!1)kD< 骬꫰*무j뭸E=.@sO#"g=@1@\v+k覫zhh oyܫ,l' 70<,?COw Y$l2_jqr)2q-dt3KγϞt397%6cG&X0Mf XP-!2!U6WcgBeƇBt@tݬ5"P|4B6߽Mk.xAo'N;F\X>标.褻k髙騣M#ziÁ>hWh;Z:ڴpc>3p0^=gfS6"#fjEN4/?c HL:'H Z̠7z GH֭^&K>Y10DO?bHCp5̡w @ H"HL!KHJ +pIW44)z"H2hL6p$a ԓOx);)Dy*HkL"-򑐌dZ8&JZ̤&7Nz (GIRL*WV򕰌,gIP̥.w^ 0IbL2f:Ќ4IjZ̦6nz 8IN``2ˁCd<$ K16% ! ,zH*\ȰÃ=Hŋ3jȱǏ CIɓ(S\$0cʜI͛8sɳOJѣH*]Td'իXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx v떷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiN2IiS !3<碝N>O:VuIs4}*j]V!9O<f>ֺV \QoSH-O]@c; 4F)s_Ń@4T@=`0똎?3C-;QٕC gPP 5/P)A:1s r8P3]w,:\H4Ӵ"\P͓'a:M-K9S -b3919a^?Ï'9 LSq50G^dYp9f>d:r!xJ>)J/?ʼN"o0 =W̼L?x2Q?hWd}K f@%ɬ l{B h9dUwuLOQKС vB)Q#pCP$p-FxEdH&2G}4lo_GXdKFyD)ea ;¥յF8{`3B:0 ulF2 ?P#Gyx-qa@H@8 )GYCG$GF"kK$WdL"U?`A:bf^2M@$!{FP)&ky4E@J•er#e$PȒ, SD,^;WVO],XT5~c*'rď¨d1?"5)C.e;urJ HbNE#"R?§,!#RC Q`9iRB^Uh;$SE"_ģ|JKU@C !)V`X`5pϤEY "K r F =Da Ȭj 1@kWWXdQEm8'd"dzpt-++1"Hzb R}D9ۛPfAv$A=W@uAUv$ҡ<,DA} jskE?[Q(:*&tc B' 0|+ V'C֩q5u+0+퇌i96_opĞ Xwm? B<@N0LYh=a} P |0\i&œf4S>AG`[`4 b=SNBWUgo>ػ8#fh;l<9Cމg'[xt\HETBP"AvkO=o17"* Jx\D% ^LȻݪ#*1 ϸVtsdڲ_d"?#>;F!h:d`p~ FP G (uw6 #Sx'vpؠ Ɛ #( X !G @mhxSaK11'B``bw`  ` 0Lh~ ~` rM-bK*h pQaPU%?}&}pP ~~ P [~ )gx< T@"PpB0|nF ~48|@ lV& $#_uQF ]x Lz̧zz Wvpml-L˗v"ɳalthG w{|Uw rИnIVx9KR1? @0pyG9GypayT$8fbp&Y0Y @'06shv<mB@#9- S i  ^P6B‡wؒP'r u]+}b ðNf203 S kf @|NG ' pBUM4m\Qy]},% ;tS1D;LY`^L Vnzfgp',GpUEQb=c7 lbI_, 0 p ò;tp ,DISi̐6|9r .N3]YцB5kU@4pb tL 4 ?90S_'S f|u t Apq0 uTxʡQXrB=IS1 .s>yG 80jdi&dz9ؐ~#|6v uP @GI4$F @)4 pepT 0y6)3 &m& 0_hga* wTa+z&+P $ o@A` 9ŒQ lkv̀  ذ  _ w 3j9xgZ.S C۩ u`>uBQ@ o &3h)f  e#Zy[6ИAV`6Z ` 3F} 昆oTFeV5) |Н&FQTAU &e0 E40?3Rt ep|. cvbt3zk` ]`[3z;CMhtkН퀟0p[}) @>!Y P1e^^՚O; P'P6Kgp-1y9 4WVf5_QQbk:pD}UѸ2i"[DF?ѤTp `H&0FD+/+!(%uRP pWмN A:?0[+2U oPuH~; z=yPP2Z A7\N|f&SP t;[]p0;U 1`P5EP WPW*X 'CL A=/qC)Dc=cPt d\Bj Qڠ $1FQ|D7P *uޛ[$yR ِ,p@Og A= |p4+@=``09JŚ+`ó>o,  !SPN`0IoP˱Gw{2we A= uG bP 10Q 1( J A=P KyP>P S LY2 $+l1D.h Q'>$tip K44 01㐮uPa 1eB7u;£ O< 1B-/U, tp |м \8Gf!yxp M Ő k@r"Eۄ mߣRf*]+i*=  :\ ?a >kW s 'K0&~(4)~n.⭡0> Q `[4~$<>>(San?^cJL#T^2VZ\^t5`.# Twc";B} QD"SLp&^sRWpP ,B~C\W΄D7`@ mK !06+3&* )+r& `P6\~\^1`(wqaNF!  cEH>XND{ >a biAr0?4_-R6_ <>@B_+`u;JA;NO!UUP?VX ^b?d_f'ы p%t_vV%^}xw> 3a =0//A55>C#zOHz h$RE18%` A *8#7;!  8W!R_ D z$u;E51jAK`G Q @ 3PB >Qb-^ĘQF=~RH%MDRJ5dęSN=}ThCLCwTRM>U*ʢQ;Up]V]~V؁&cGVZmݾWܕśW^=]_s|N|">Ct?36k>ձ4rBchc^A ꮑ0X)ZQ XH@L`4 A=JP&YZ̢3 OcmzԆag p ! C/ BaӇ4/)b\Us D)80Νs?tlPF5. Zp"j=De=EΥu;';C6Zt(ch8QjXŘqjPC֘7gxck(!+d5VzcPJ{(0Bܨv1evGk b`.ЩcX#F4U]jҬgEkZzֵji5kY W^w+[)͖r㸠2ьZ#Jj\ 0xca.e,1̢Q s(G+A p0cY %PCrBqR,,yց|x\:\(fIARC#JN 8fXC5Q:].Fu5QYt8 sx~ Gз.fqc3ּxv5qU|׽J9G4pBx}.q XpG:jUܭC!fZYc+ Oa0 Lhfeop|͑ZpTR!A 0Ա u.Ru4ۊ5<t=`sx M9C<^C1mO4vmnwv=lXŬ:lha|xD!:x'M-E-, ).D^OkPBdK6[/Ն8nRF:Ha3=qFO 8D+ e\8pq(㤜;^r,0!!ib X20, sSK N< ͉V<25a` K X yw>a)&yedp6ʰ2`5F\BVW,j< Q=p`xjgryfve ??Pwș:8aރ }(AG]2 ҁ8KaCȖ{g0C8c;07:؅C6^/ih2P5::78f:?`[pc=F؃S=!$"B7h뛩Y+И .Rx]&Zi0sXrˆ 3XVanHC\a6"':c#>jsmqP|xKj` ":Xk ;; ;fhXX[:;fkaS\^ xҘ^8\Xcp\##y02җ Ko褗ܦꬣVs밗R^= Ub;~~#fLj2 \n SI%`~C>,RE/9'.?#8 $w(‹SXy0@]H @ԏ(cjvdȠ} fV\!X3zGGQj"(CP@!1AC8,H8t+(}8 "6)zGTtb 9AԈ"G6i԰M~ RdLcٞF k\$a V*W:@ ?P VB 0Kai'ѢiJ3,sFXLc!HZfejNjFgfW$|QЙv~ @JЂMBІ:D'Jъ& x$"hФGGJҒ "5JWҖ%m.LgJӚ8ͩNw=>:ʟh?ґGkLHa/f`Pd@ti)d~0`1q֥%<Jb'{׻< n0:`B?aϨF)Qv\D:nYA *|V͊ - pKMr}Rz͍t;@KͮvzW,KÁЫ ={ͯ~LN;'_M10cips+PĮɞ@4bfӃUsQ3αw@L"HN&Nq=)[[G S`1×C-0ȝtBH#8J=!ov}{;`'ްp̂  ;)$SP g>ޕA,WH<'+oȻ3Bi)%$YVcCÁİ! lQR@4c Pg'tg蘱EP:\%!@Nޙ* jYHG e*@/t#J3^k)rGb^Vb簘(}4^ )2h1DQ_! ,sm KȰÇ;O\3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJ՝޼]ʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ NxO_ΜpͣKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PFX;HiXf\v`)dih&vͬp)gqϜuq"͝ .xO1h 11 uH=fʒ%j)J|*I~jꩨꪬ25G+PJ@"qqkd@>`įv: fv+knI+k,l' f 7JW?Xw ,$l(,0%**3y<'Ve@-D>:]J74\ CXg\w`2댧~ @JЂM/<:t3xSh+2w9,юz HGJҒ(MvP`N?LwQlq5)pS8@ PJԢHMRTL$hTJUb!8eī_e2Jְ*g-i:,j|2MNDu-$E4 fJ>D 12ca{a4$0Jv! , H*\ȰÇ#JHŋ3jȱǏ CI5o^Qf˗Y#͛8sɳϟ@) J4b5ccx,[C{E΋JիXj݊p6Y],slgb+xH1X΁Kݻ@ o6j|-Liy#!GJL˘ֹZfAOf4a(FEgMmnߤ3@ AoÇ4Ťu^μ.32(XMËO>}c.,'pEq-X`rbU#yg&!Dd_)(Vhfv ($RM7%,0(4h8<@)DiH&L6PF)TViXf\v`)dihlJIKp)gEB sgг矀X@2IA1BF*%5Hj饕wu-I =J }驨27SHHQY 9@]U;Y9S5(ZkAnD AkP+:V c6E0M;@ 쮘Nfl A8p ۆDX$D c:3}2pb5l8<@-DmH'4/ұ+OWMZ\0Z5A_vVm&ȍ4N}` "͂&wBb$CLـG73кp&-B } EQMX5DCx-3yQA $ d0ݐM6.PPPYPG(燀AL@@0$ bR1{68@  pNkmi&s^s 6-iXDL5ρ@r] HB!c !4An@h÷G@Dnl[+"HDX_('IH8bEdq @F7A2 -CcZV}C o@<8Ƒ > $jB d2 ?艶C\LA=BY&_d-x'?2]mA%3"ӈ?b CA:7!&0K"᜖r䖹RPGɁ! ŷ+/fA58B+\*9T}n1( "ZgKȜb τ A$L| vBJc=!wC Uޅk` 'B&:jB#IiDj.Ѐ4]H9)"*H@Ӄ䡙]T 9 0qC)`b.hRS)AD| *]z'$\21C@r :SBx }I +ks>  W Jhwi!֑;4vS Pb& ynK-*pUO_f Ǚ)X\F?\:~RO /xB-< 2+Sų1CU c ;|% Os"c4]!KP菀s4&O  Σ,Gp'A8R_ ^p] ȹB W ~ /+d\Mk؆^3c,%0Ăo $ZP +dX a0Zxwp@0Uh R: h|Jq=|!@,A$xv4}ك0`hX'Xf?O(~"]L$ oRN#2=H/ `A<LCϳ4"@hB^N!!o/jFAX]cx@{H|'.G^RtH g%4PpW0l 13y0u"с4@ 4H}0pSBM̰u;r"et ~xEpaQrMju9VC A"Ac%h+seN} AcF# D!{w.qG^\@KEKt́XAT^}r 0#|VDxQpa_QXjho8G)Z}7Rڗ7{"`TD-6j4WMs Hp HEp%~8 `&mfxEW0 9H8bvJJ<6]cr16p8!?$ X | AP JP9@ GjB a҅A/|Xo@V @K7OAkUgB D(8`e-!gUYQWf_fx3(wPqZu E1G7 1+7ДvR/!Ss"+b1> | .D !zlj{z]d!h3D)&WPLJEUo" •hz4АQP P7h6 8L8 oYۈ(*C 8 Y1~i,yUSz{r` 9 !=iY )̙۱rx1" .OIHp}I-&J4  [Ajhyxఠa:Z!1; `p[1RKkA8 iqRd1!AR5P` 0 jUXcYс ~'zr8%e BrD:&$Wk㇗9=Qqn]q٪cPu4ELA)Qw W`q8l`:%1`a"sIQ'٪ `j@7ArVJj ՀX$?a. +=D(*_Qj!*d%! H"@Ia{p8R1ӐP H@sЦ"#Z G9ezjdj#TѠ 8 ` _Q*!{$,!P̒|hY)cp(|3 r"VLLhy*U:b^ɹ(l'&4#X @ p Ih3a{i-$ײa2A0.+H/5.( -_.2-fS< eG 1z"t`ev`~@ Z1֗f[DR< ҂½Rt `$C9;FMC|xJ !1Z\C+0.!q3+Drx{m@j'9"iK-" A.0w:-~0}M 47 ` ؐ k.1c1D*"4 J00R ;@7#w D4&%!/] H ! ʉ,L ڜ* M] ,}9pW #@-->c$J!PW#<.>m^q R-X4xaRiV mq={>R ,+ QwZArv Gp C 5aaT))ų}-@,#S7+@U) W ѣNsL H6MV 7x>a SgL 06~>Pp|# ***@|Pu%K%;M 10(6J0-"K{PԪ668%)@aAM^oP'j~qV  Y>F1nZA}~O%`l2q/>OhJQ V=Qr{q L, B`ePZ#}[A]?1vCCp(-rv&N-.|XBZ+UOhX-?42dxOTQ Qp:f^h8 Dh] IsiQƆ34ƈHQJ-]\" )^ęSN;1({=uzR1RV!tNjFoPGt|qKK!w^1\^ߨ9DFX1.$y1-_Ƽq`~ |eHp CW4E"D26s6\rx7nխ_hؗ]hV0w)xxIT~A3Ɇ!ǠWA$ `X !Х::L;ȟKB^#hِiȢᇫ ut$H#jkZH)('q"%':,!j%,XdR'͊~qjx*}*^P$~D!]'%W3NDfs湯dp DǼ g.[(,uQ *뙤SzplHz!\ .ZʝJ1Rj^.pھO"mg Y`2D P#)_Ηs"HqEƝRsftC-&!Y5;, G㟿XEs>#Z+H g>'799秿~ Çq¾{qRy@6#Y.zr@'?$!$UYfyHN6t%=k' !8:a_fq/cQ%XFbIE*V13@NDn-|j6ٜplVDc6TwryM`#A3E2'q8H~^aII#f !dBm :265BvD%dAQS)9hI2 T …@XL$޴L PbԹt(!Ts "KY"DnDX,0 ,!8BN*  !`zM \?s^ r\iRAxL*Rb`œ BFu ad4w0AQ9ƹZJO2dsu[7"PD^d]>W}<2TҤ#L̃IlhE[d&l9zdw+(RkD1=F=,i䌘jKdQmIyg3P ~p.mv(R|òߤL#{:ږ7/O8HX~h'>a_-fnJgfd}nEUŁ@w%"BB_ɬ92HH 1J4X!F]pK*pBnAOyv%KDR0OT@]C1ue$X,E$V)'OH '5xդejI6\zS<% s<w)q9yB&4A l5J@.e`$sKxA̋M(%9%ɨ!V&X rr=`2VΊY?3Yy(]:/Sj(1unv3/ ص )G}彗!Fˑ@l5m^cUryWTfm[@xҡ,8#|$t31xEh%%ʽ3'_#\4y5b%' SWoC ς|A:HnoH/}*۞@H{`L9=gˣ>&{8H+3 sD/ʖx.4 z@э 2;|u[7xjA^9HKP\?S TpE wx*u4I"9v4#6@RkR(@e>Aȷ['8ԓ+؇;d:9 SIxdA>B~ 9י!8Цp OqA!S*옶 H9e{A4Je,1 yrA 0ԧH'/4p5@(4A9PZ[@"K.*$sOZB}>ȩ/&a:DP) @6}:$a!u8_p{`>tcA8;Lj:@Dkl~F{p$G#*rDtTuLg(aGK(0cSEs |?  CnL&<څxKG} ۾qDIF`C{#<#L 1>zx轇ZR vAB&sBى~;99…g|~, JvTDhEʄAYKxD@H@@# ˃د1,\Cx L"#7К|P L *z8Bll>*1@QJx2Mcٜ9 d g(ڈd(4 ,gA䋳d8CÖ- OH7LiKʃHO@ơ p )R3P\~hJȁ4>:TTB+:L0L8N  [0lӈDS5OA@̈́ Qz I݈"M!NK@ΰCHI\(.`Q"H9rґR@5 :x@ҙ!Yϥ6ɄjKA@S(KC $|̌6}ӆas䎲(ĈETPs9 tЁB(hτlG|H040Z-e#LևIFm@T(6h?UѲQ 1 _Y)^lDmz,0} QH8 Ax6 490 ꠥXOkVo; :XJz|u0yɘ\LP=Ahܗ(@(l ߵiMs'87%ʼnF. l<:]GKXX"yl C`,eFRT½R8Ch-uׄ(=x\ߥY| #yqČYp;6^@KRt(vڌU!zxᣢgyC$'^3X !Z܉G3#[@.pD?͌ PkžɇkFH,a9i,`HA$d0^+e>u` 8%V3fv0ƚZk?ۀH`ARA#B&spI^޾pr lBaE ^a RteľJFІ)$B% >Nl=` +Ñh0`2N]G|v}@?p ֈ*;.()j "iJ݆N ƌ28@bFÁ~- :*}))p80cv6@̄_(֖A(p輞_\Бg!9_`5XxkFrf Cܲ,1QXgr̐+oK@im`oVꍊaD_>b-s 2X:@A 5}x %GA OjVe5 2lANh8sUU0fV hn>]b2P/U[  )Q M挈wW#S0mW P WmcfL(لoм WO 0k؝^X4q vo>pxgm72 ~@٥1"W5S̕1M5{` }{l+.^GG>g#: Vb̬ LKu [${ @_}dwז6 CAWU' j|Ĩ$-b[pcYe~}iHp8}PJJQ⠰wE,h „ 2!Dڹs7o ޻#Ȑ"G,i$ʔ Sˊ*kXTK:w$8@safjtg#S)ԨRĵ)PwU`Gz(p^ՒjϢ{Ь[/zUI`iJjp&%N?|w–*.mz#3NC)ܼ?AcM0_utgwBLh~М;ʗ3o~t@"]91M$#D@(R_SL@;50.>As9@Sn\tW+ +:igHT z[I t I0~M%U"-X8$sYa|GPQQ#sΎ#9!CAP/*geNJ9%Uv ?mChL|)@x8:ԓiB'T%buiU.=a$yDssd)֋TsRNt tOO%eT Nw 3=X%5Q{Ow2HB+I-)JAΔ"*,祖j QҐtH3DI!-Xy@[A{N%a,ˇ Ў)BtOeGo 5.DI K1ǃPSj/ܩqDt> m$8\l,id:An$T 8 <.yB,Jq 3PYsߒ#iKI=`rA|A@$P 49DR mrs}?4jCi_pC dIMTD`4gN 92L5GK?}dXV 06 MЪS? Y/>MҸIJ[ل*r x;r\P:ZbzPQiZi2=(!@|-:%Y=lI̡o~!bmV3@#~ģ눐@1dECpas3 .M O A^tLӔ3"U.AG, .{<4𶺇@,zZ4lj D+b." ,p!vi@IWPr 1ߗ%&ۢAd}0A~-1SHyP 0&VD}_ U%DÑW8Эsc2OwMd;>2.а); /,)+zvҢBV 4h@",摐bp/(`<gJ8H<1YJY^qJd#]3QcQP HCZҒt'iK$12f~$JV5Ϯv5=ն7Tml#%^ l` ؼȱl)/ ivm!.0B!msFV5p@FMnq`@nv@&m}7.?838#.S8OoЭ2EՂڸ1B.qeyQ6co@Nj B T@9;^ D :Cް5|m.jצՈ3du) YQPr~Apl8c Nv4[;?"0 1 oDB}:) m;A" :[N9^R*_XB^"#5 O3[!2?7H*҈7p',(D̸>Oo?޷W?wħl՞?>Rx(|A&i0~ h/.Tx}vɗKX6B! ۬@@d,( ~1A@4 _A 14Ղ=_3 (ø_)P *.( >v D34a)ĢTA wG5CDmDmC1Y1! @<3 >a0a b @1b"  #!2F"%>"&Zb%^&f"'~&'b'"("*")*"+*Ƣ+b+","."-ޢ."/./! 0@0G\A0}!AE{ 3@0776~c7cAt8#:#8#ʉ#.!?ZI<v#cD\Ap!D8DcTt!4CD>#FZ5&! ta!C2dFJF)xBK@) ) D+M*TJ$P2d2{@K,ȓ+_\ 41x}K}n ,gqz&6kt/pRj̧xh?szAF(Vhfv (Dx3(,0(4h8<@)DiH&L6PF)TViXf\v`)dih&pR@1xɉ>y駍,IA $PN# Vt7a9}QȤjq4 o4*q#0T\믏ckCTE#)  V#2/n^Ah C@5 DCD4h*Σ)fr,C2T.AoTVx  $lp0 1 OF,1lPd $XB 48R-,<3r5l8<@-DmH',Ө)OW-eY0Z5A_vVMfF yp6n'dAn` 17RwdBd4Qm9`TcTsQ9@|Gb:Tn'~ @g =D4Ԍw >;AA|)5rER n@3?'ݵ?o4Pv y> ݻ@BkB0Dg6,8s H@X9.Л@&:Ƞ|`#bg nmoӠ +*}Z9][+̡B M ؀ACj͇6&$f(@L!jTΉ`48xܥiG<F.l#:xTDD%2TAHo1!#D8o0$8C9C1Q$LF%&?RrpR#d pJ2/I3 c1 \(C4 /w9 80f2%h.xaL̲xf3_F#èAL`Hd@_Z4֘NEpFC2p R.O7aP@7;H(O* tP7 "6I\PeF1SP)Hꐋ@Q:Q"`>Hz(D@!W|S?Ak5A2=!G:ܑebDDҵA{!a%0G.q5(, :@ VЁAo<A6Bv+P!d4 =x.v@PvrA]H;eH;5aJZ #W遥`  tʁK UaFV䷖<-s?/=$8WE}Ս~ Bdii,mVZdP uqz oF?I{D@f c(5E^(|х|C@CRvQhB8dX=%$F߯RTArʉUMK8T lEEkl$>ؓ ΢h *Z% E`8vas uQ O ¯ dRj룋=:H:1&%+MQ 4LA )@9@g vq d0y/@ i<_+@u P};VX6zaXv4P 2v z` >pXbX -3 |R./@ e fQp c<<0'-VhX<DP'rX HraeFld`a1/6T[WӰfW |0j9& 4,nq тUoeWp^ h}0 `\eHj`Fc'=p7|muD@ POc`\ [f)A`+ e@ N+>S/2U8-1E8etYv\ny@ 쐯f*6Dp=p֙9 *4b oDp Q [^U |w[ nk^Q~%*aŠY 0`d kȡ04ZRBk sPss08= *QK iBcc R85AqG|0 (U. 7 ioi+0 ٰZV6'/8#YX9`avhv6l zfKp U`^^ `~C6i8A_Ҁ@(d)|Vlh4J0 >iÙm<@X9P{=1հX/Ufv/rϾep[dx+ aC(hh@g xS1e+ )P} 70uyfv YѠJ 01eO@ "q!Z12 ъPqt$kФGjzfH 9[,mrȣU'kuq6!a@UoHlȃs]:Hd \h]|f  Aļz Xm fe@(n _6ď P `f' QP Q0 YPU|&xA }m(a\0=Z7l | Tm4˛8ҲlqɋAaka u0"m$u ^ H  ݛ=EѴqd P hM/m\   Av G ` 1_yŷ(y 7t\ea_ )?1P Nx@ 4P0f5zzr@f0 YP[-pd0 @4@bH pOۗmz 1 KsQp0^P D1@g 2RD\xM˝0[\WƙKSU`r7PV9Hu_> /Vr6egp c#mZ/ `$7 YP `t@ppLE |`9# Pm0khQ V!߫/cgHbe:e .`ZtǔًR$vCwFDX_ +`@ĔSTܾA`:| 3 ",Y2P* neB{(exԽUN#e:|_=sVb-Ϝ:}ִ 퓆ܹz:3 < ¥/Ux@Bd$SР! (F<\r͝?]:yRMI5^bY뗳Hg^C'K Nؒ"*'AHD1H1"Lsx!?QJX]eUb\:C`ORC0~<"c$ e(tC#,m2iERJLÍ:'d3n EBTrVJiLM%5#XFD`S4Fx"^iN!bvkJ{g9S91)9kB[B!ȇR,DWVRtt'נ6̑TC+hD)hZC acA C fHWRrz YD`%* U0pA>"tbp@% ;! TC%r$(0po|O fCw?1@!< @P$}aAzHj!\X;Rx]MxE^v 9zCDÒ0%i"t0̪qeH?sZ7E{Ԙ)p?qab qX.aZ"p? A jX$9>V F,4%E"ěg+qW8\9=`RJ9espAUq|e=kZr[r(xĭ43у-V ICԋ[A;"L0W:\@Y1GI+r,Yiv Aˇ X[YZPBJS"hY5[oCtO8ou 9sgeğ7 h+&(!Jb0GHV 35Q(5괬 )Pbh:zCO!ŷ&#Ojg.tP pUH~gA#okQ ˧t8:NV@(@ PJ;u;w@@[Ѕ@SME}sK0水'8sȹPwSl(@2HW>loÑsPW A$j;i:(GZ6\pWؠ`:v6i]:+80NhSt`jHbeؠvxG;dX!4`—MO(Eǩ@ Z(1.{~Ai@FHRX HhAEPC{Йb5Y,G`~00|va 0,:CH j Z1Ơ@E][1 vQx)q8ȇ3##0X}bSG@b18| (d@Ss9'U@ojk؆'x0A yiR,˭xN8Rky xOxCi <((j&0%3vrP#KϘv̇1Ag[z`vt`&nZ ݤx1hzatab@_@,ʇHVUŀBJl8$LJ'QR|$l˖MM![Ea1`;By D* A!3cv8M*CbѠ>DۇsE(A0缙:h8@9P9H9胥UZ7Qىl%nX_Z:79I@>Vx5Ady0QdiҶ۫k 3Vi!)GhfX5Ix16xxD?0D܇]-aihrP>[i20WȊ{p!dh Hϐ >lEXhqa@{Z KCdLhXbX0S2ȃ@@@<)Z8_P "P)p"xۘhH&:YiDH٘e`4R̶${?!sݺ+Mp H"uy@OKx\H%Z 2K]<@+46Y2y6@(>@Kh~(7G5iM5 xx68IEPِp9FĄNPQH)BhU̟K(:Vr0Ij~x@H@@@BE.@/KK>@84@*إ1(Wzi(9{'0Wp]{% vm`?}Й:IP CC!Dqf)Z(pz;Qr r WP@gU`XPqcj~f-[6**Ȯ N؃ۅu*:uPB^Lxjx@p {_*ip;`0hkz2V観b 52=@FHPh8[W'D%NqVNқSȻ;O%Njv0u$Qo NCh0F,bB=2ﳮ̷ux`8p9i0/ڝt|8]ґ*0b6K@uJXFhMqM@[JupuS`$hJb fزЩ~86Lc[cYHclu,C*Y|cxZ(ghP ZЅ%;rDIftVhM#=x=v.-VM{0%pW= 3uYC i] s8P[)qTJ`q}9@V9Q1֫[5l@U[*ocApdPWcEspUhO"aE^ Ⓣ"0|8pD~iKԆn O=`ZfSe#ѣeP`^K*2KYZ{x#S @[6TLp96WxB⒵3y_Rn`Aiτ΄}_JڄMw6ևuz ΃8 cGBTi2PZ [lC(_Nr/C!ag`2LѸj&Jv@ ? KP425;-AI` @E`D- >qh|*%Oƍz@q=dH~ v"l!Ĉyʑ#"FUr3\*!*Iͫ&Μ:wMHj-jt9)=GU?[g|xAذ5qVTO Z7hQLpftp. 6HjV8G?ɋG.!S˞}^h6i`:|)J.nT1tUZ fT_ڊs|ڿw0Nt EOaգHƋyxq=6>҄Gw! lIk;,pB ?NшQI#rE2` j:m%J7O.d0M`!*w^+ΉOF {cj%*xuQ'_7ctt:b aTYFҏJpN&O>1Pi:i%#4`tqӟ' x:@3[  ֓ oM 4rl+nj?i?s*pmCHsU;чRF5DO3?Q3g0?,t pQ?4UϏ􀃝9<d;搣O$xiaNE>8#r:X\L(x14G!ʠ,rPh; #L9b41E\U:B?r +tyΪ?1yW4%P3 %VN9HxΕGt$ץNZҏ?D8!c,S+@E*)4>ڋ;-:C?DGC"0/(10 8 2#&So'D |sBD'J3Jq/yn yV?p| \+A npge?!J ZLP5x͋*A#78N)KH<NvՏg#>s?~xC-Z!Rapa_XV*ryCrK@+ q%'1f<ψA eLݩ.Q@) T*A.|,CBl@vA2yzt%. )0Õ⩬rW֢9@cVBPC5Bx'>!M,J(SJLpWuCA󞑢P .Dim$#标*Ś;~$x:G)A F:aS bՠ,|FTRv)13 }.{S;@q {rae?FFzhBs80Xi$RK(kZ|9P' 'cIAȑSC *6\!OT`D2nMtcA!@1Ax $I"?. ED!G2!y%i#UnC <Ȓy[faE4y*<(~W@Dp41 ))?ǖ;'Q0p~ȏ,Al !xzHSXB_?:GMTP(;ظ(>/?D[G%ǁBNsTKQ i\ga~C~Q%(Q/bjH<~4]@>#OH[;A]L&ޙ4hO0(۠dal rCQ|o5 bs>?ԓpj M%4=g[H@|r z! gd8H J<*Nl/&ʼn@8H9*Rdǁ=ڤyi|,Wh7Iz'dr$>9HC|pB#X#\!8edOC?Hl5:`C8`1?A8C>8!OOĀ \Aph}BC\4'vdR1B送8܌=#`/6A ́%A@P%Hcp ^ @ A?0VΟBj`B%H^@ `Ȇ ( <AZ(C!*.F;78\Al|C=d^;H<ûUC>yЃ%ٷ !/H>!ztCĴBY=BPC @/83noACKXN;\z/|TfuY> aDQ$| B@]" ۄL9]CG >9$?O=8dD1h%I".'h~Df F Wd@8>ݎ=E> :P'e±RCĕ\Y=HTg=`'\B3d~AHzׁ` ̀BGH =%wFu/Ce Vy'}%S D <["[!$ _*L >dܭģL}D&*ÍDwz, oLmt(&F@5Ё`AH%$EUcpleŁl+ć<û%$:<=8Y݁/Q m(} B(8iBcF܈.pcHGdFn(wn65C)EjxUlÍ>@CÈv?GE3 y!04l7e!" $^PUdB>C|AA~D)pXYBXE<BJ` +y\< q<#ꁛjG0ɐ*Fč3tH# AXJa9Ђ74@ [[)Am^J) ).zF:J ML3$\$x)<WDgD)BYɁ'{e%ȺQB>X?C#Ё?"J4۸%p4 !~XBvj,BC>B(׼ɞ%42my,}HC@4a \jƕZ H.ZEMP thCC3@ʇ+I肣qw?@C T4 q#DkfNI@%t` ȓL4f tC44Ȓʇ:(̂3A p%6A[N I h<2ȗ<Æ dã_ @"" 7:!c\'D,0U^lIVC!AO9n΀n:WL6MJ!EVa˜kxŒď$LA@xu @y98eo $8"4%,1(9(9m o}Ќ@"p Q" $+$)292G 3 J I@[BB[AAA Ѐ9Ҁ.0A$%p}y@+SА 2MJ G.4At'ODk,B}DMa2l .ŕA8Jrf,($9*Zij@˫PCK=a^A1D  ,8 ЀU@A@AUN)+I0΃C0rg= [4P|]r ` !sA \ aX% @B? :s o4B-l2w.=TC,h BW߈ :恂jtCt k e |kD_-^i#24e=C:êL)* HOEd9C 'Fwa"D'M!AM)s#sO 9n9ߙ=4֏B"#7꭛<3T!Y>A<b@ 1VDX8)PSGwCJ4™%&_":;v|z/Ao=4]+d,:,„5&>Aօnv1 GIUJ;TC1MЌ9:4J,89Зɠ <"F C8X d 1Rv u (<$0":Ô#DJL%0C'w<$x^3kр{Ip!A5 d'ǩ9 B,,ZEU2 p8W!1P3N'(5u*Z?̭;U4tUN J$L:_|>"H< F4A4:0D.pD#,XM1ÿDV?X3p :$ͦV)s%!Ax1Ǡ膵B U⤊Q4B"G>a)TA k ި{,?$b26+8fdUcЧA()Cr}&"Mƒ1s"43ďzTLWCĴp4A1 A( ( Ҩ 8ܼ}OsNyZTDH)Fk: ie.9|ٳbEH_A9#/9F9|$/SFdL1pwIxM``:u6& ݼy) o"۵͡i);)^I؋/|X7Ϫ[w;J!suoŲ#97ּ4H(x1t+H@rYA:Hp+r|A} yy)u,d5L} ?g⏮2R $HH9f|^mUm/Nw'XDA4)Muds>yqihHe~aǞoZg-0'):OAgGt'ǟkpץ?"EctǞr&9TqjG`\P*}{n VɇyhGj٥"d<!Ni#tI f}i3$˪:9~R,|@dY㋬e&I$a5kɇӏ!)R?~>x x#e_RGB: V:"K#GH!QHAPR2(ɓDdTrOVQ-EWcQ-C(F(X#1b,ax))84RMT~ ( >,sb &;}CY@C1SVʇ xCր$u 5H[et"@ ' b5CUcbA" R3Ģ!s! #FB@L"N@1A QJA pB2sx+p_H|AJ=X(P)OɊ?I*oħĆ? C64Cbv HdFt'nj!ڂ4hX @h@!`<@A,.8P1`a`0c(A٨?!T`c\a QX1{s f ԤdD<:EwDhA$nspx y.џnHH%Q\pw*lE[ G@V(砇ؓĪE!`=6ղefUhh @Uģ]=Y\71;,#keDĸc(mia,6Ͳ=SQ9> sJ˛DZp "bBZJ}Si l VdsXN Oh/P1#`0% Lڋ(slRDBLЈj$W(¨ 1ְ7h \Pt˖cmf05J0\`1 {` #WdԨcxC2tFg]Ӹ!gX )v1MG>* eq㕦6]N-qG?e=#(2`PH!2J< ;SH">Xr|(BR9AJ[7x@"Wi3AI4yGH,5 hЦ*>} #ްn !PrnIy 71 \\B`PO"؀(ȱ[mHÒwkwW?`\b 5ɤP-:d|!E0)2JD8dAA,B6A X-$2TP$!S>!V(^hbo%}xĿHj`C[t#m >":"d=Ɓ(\D"I)DPh8Ⱥ-6(a`Ûhe"|ABa6 !(B"J" ~ ZBd.d.܆ޚg\Ɋ/Yp˼X76na6aQ0a vI\T)Dag)2Bbjq֠&J/V` kKs /BڸP6AAQ\h6` 1`X| )H` |%A`?BΕ_Kpq<(oX9=!k6H 8L@(ndDheG`CoVb34_(b!"e1mZ&mP)V3m7O=A]j?B@dBrHԪ2=#"M)n!2d>")hKP*Ą <^h쀨"v/A6B 1AkAnFycva!@AT F}iC"xF6 )Ad'Ob1Nq_$YqKA*S&z"ހ) pɸk*C7xh(8!`n `v$&P@ &hI tA=* ++!B[*j*PZXF+HaP3 2Oꁕ!yMbL7_DUYu` )FH"~j,0ԭ5xPaA_UE$HĞ;fV>A0tK)zI?m"rh J( z.|K!uY+3/.X!' h@jH``16a!"!|2@;>PwB1h` !l"XZJaB!*|؁` |Mp@z tq,ӡ=aa @N[`XVA(M`b!9jZi\,4Ax jy<(!*;>P)"aoY7P9pkp^i}j"0t9baYh@hHZI$f܌uTwN NFk+w+(b{-@ڢtZ/Ƽ"h fʜ)ZB!"EN*"5jni`h4Vc"b(!'&a/$0VaXX!]3!\aKY>3e cցҁ@!a-lԔW"K $«v;#G!4ZGs/ȂXĸ|%&2Ԕ D64QS'Aدlj$K<2ʕ,[| 3̙4Wֻ߿z'Qu,P،)YV%ӦO>QN9{jWܣ9j!q@صkΝ)}^gO;.W9X8pK'?9Ӝ%moٮq?'F\)F 5U´Ią%{<'=.RDqƬH / ]xNozyå/|g$H>To`R&"8X&lҍ?c~ma~:?3mH1+@?J PI`%,l #rK$cY?ʲ г=VzLt,buQ'EU 6\mRDl#3Ag oa΅??%B?pb%s'"$0 GlB"`&tD Rr,, &,>=@( 7.;%P 8(L ? -/y$Q:c8Lċ Q20"O9F,*ČWîcE 20$PK?i>d(\u$M$`1Q%0r ?=s袏^S;&†Rp2N5JхxH?J19wlJ>|"=)&14$F =(>9@/ @h2F:I}F#xtw `4" t'Ԏt#ʊQ Q0lipA1Mt%S #1zD XfG=s44X[LbV̡<@[sC\1$r QJVyl ~VC7th?1ZBth+ouCA~J? 2sc2-at5鐖|1L3tCZ]:f+42_l@}Nq ?F~|0%bAxcZ"aEZ )aJ{̣0<5aMD. H5񋉠ڒ *V3i\{pq&޴$ɐTL'PeQ"17[ Ґ6&_1ڑM`{x7\qV:R%1lnbX?|AK#>xA Odm4A)BIzoeXp4%Ё1 0h@cgt ^,$] GB;>Hsc[K0}*M> \_'0+|geғbA8d ]isC@0ˁ<Fd Es9QZݖ G)x^a W(D# 2#QIzsH!ܺK2-AxM݆Y~|vKJD$B/P 7;G7ARXl#t%B0`t7 N>(Ӥ,-#[KeïEiWi9J /.1M4 k>m;!^:O~42D`*#=5N5"n4"O&mp9!XĜDS?`q=̢8/wU_?:%,nǒ,9h@mh`mDjg"^?~ȱDIVtV U0KB`kvBϙ%`!\aC=lJSt֊(A`11 8&d!2[ Cj|ҋ&7Ê`/{= %̃ğwч(@mXH9 xypЈVQ "t7*уOƟ @(/ G S|!@ ЩuPsPq R' 9XR`Fu,3Dg5>FzIR"X P uW4Ǎ7>Ap QWVр{p{ 0cBEVp`6%a#Ҡd014,a`/ SxPsfz-gO_ЍtUZZPl86g_,:',<S B*֧f'4GՎ, P2`KVI1P ! o P%rOounVgp `:==.c"y;A9'q|OibPQlbUvAZs7t ]> WEJZB tA7ӐkȰ;C#R ib =3Nl08P P0>w I%si c0t h)Rh \p <b 6gom|cQdd W*vT{zUVep dcPFJp?Pb:C.CipT@ؑu@ :d/+!IP e .v7!%sl` $P]4P;Wk0S] k@bN0QC,(0 {"=5["&ewCOB\2`V|p1;ڣui ۈ s \Sytє,+ZB)aE\m'[rqWMqJRR_ɦ 3 PtP eo C!uo^>A sp,+sv=p>`L @*J7!*%PU5({].8ΤC8++0 p0 tr3@b5s.[CPc dg4KZDxk,ӖH&h4 u vvrx=RB@e5; Ȱm`EQ*|bT:Q4o |P LD L`S?cUQ)Z"+|[&UÚ;2b%[ d@C[EZp_੍Ee 7ιV0Ull[0 ʴXD*喻B ŏQ/Af+BbGwY i"z@ZC=7@`xZ0v4P4T5pل " TMm58H7^@<g { t`sj\Epr+~@ SpS` ,Lvq20}JBS!-+hι=:: 3EX ]y3aO Jl!^n  +"xf @'hn& 2!8 95`%O4☺,>q`9#P *#u0lDS? @0`i{Jv# BU(e`Y0"'D-h1cC+p`%M:Vb 00Qp 31IZG sd>{2"{{y_v3PaQ ?9>J DϊZ6d*YyDC$0X!NIfx@`%TE` :Qb-pU0P@aF s au`n&JgNb ]a%Z EZC>gB~\b*  b>-:!!$^wv</'Q_r?`drL= S{ UP6ٓ,!s7.S .h IZ7Z! .0 %=:m:a@FLY@Z w)A 8dk'a2b"0 ΆO`_X, q!d nQ_pO9I$hT={У'E٫W];,'Doʄ̜D2Τ^+g=0 -fsc͋NQ!* 0sgիyqPi +ŧ_^(xq$\7'O]9wbEر7Y&5GDxfidR8*qmܹu ޾x-#bZcf W<ȵ{7?틻=:uA# HD[ 9CBK! őO昂z02zS (1R ODjf)gĻ#rBˢע-P :^X!J,pb.Ț @`y!jt'w1G~TI#ѫp-`'tQHh}!i")Am b5x衏kI>RJI ׹'b>oHp$=AbH!>&1VPj5(e\peccD'<KH" XY6zg/n@+0:$hMv"^JH~ yܙ$y("'TG{){̡g~.fYFE,1c|8V1sC$m\,fPA" 'Ξ飊VHasGBY|y9Ǒ}=EsŭI:*/ f.80p4Lr`oԏb(-IK[3| \!O3GMbg %RsXbA$b!""CN=k5 R0GWE$BEdMEy=j̍/`V$Gp1)0ry 4!+ f !9&JHD E5\DA5\> :] y`҇EhGS\ )}):D! ӈ$Cfz95uFzbLx"6 $6I$+ .SZ$ g1%Fop}.%5,IU`|cp<Ɍٯĕ1!8q_8b\@?K!G=` 2zTT!hCB5ˏ| @t#091Mc^+$LsuH!rnD䀜_/$ׯ|@QhE#'Gp"INpH zPOq&>6PM.t;w@F;QO4ȁP9̡O\f-hHc@#Ukw)~Klہ޵>qcV v./%N=#oMpt4#\F+)xAiG&0s#@9q jhCIG=]@ -$p>̂elW:X zVWQp_PgC x*4 G{ ' a U^0ȇ#P!+{fLhRUj d[Ktr(t-0{sk&!$R7\tn@2͂Ӡ5 ym+Fo:#?LX/RO3DZO J- OP$d T8Шjlwk1pZիZKmw`^ALS&nsx&9)8vS@nTur9h8DzQN \yx, >\IHʑ0B iڃ!ӚmOүhz-,~9'9iq8$J:k `Ӛ0n bf@AG&" D$1S.s&"[!2όutwQTO#! ^R{XMz"lEpMPytzp_(=؃R~?ܻPx+t1p"`O8X@t8)YGxr2&bxdS(YJ`#dMƉ|"3P<$X)?"ְ. |@:xB)N2x7m*9G=`Aoks˅5Pܨ@hCKz!vb&u`JĶ_:# OXJEFnHFy9HSPe)>()/.h`#k8؅:(Y *eC8CG0ֻsb8JDB,@Ѕr#Gzs;ѷHe*|Gm;laRYЃY܄ IkɎ@1 %z2 ܎S?D ' 9p`/@.JKe4.rP8@8=qXgH(!1a}xHlG(*]Xj*=J˅w,=Z(fN6: EH#!.)lAM ILȈ̜\EEx@8")4 qW۱] cfPlA<ha L "p XVp~HLrPh F&ZxXx41ÛpįJ(RKtZRS*py$; M0SifALLLMxAHH%s_ HPKh0 3ɇ}x 7Ϲ/e?Z9 *?:Nܰx/ |0!G83 ǔO*p 3HQ+X7:xpt(,> &Ele# \VaK$%}NHPLF`@s;*AOX9|L@UႃPB/l6kϩjX#ܠ0hHkܨt)rXS OZQ :P5(naJC~1~H݄=ڪE}8 N#r+@D Џ%F"@/@ѡm* ~ -Pqh\ V \G6B@ՎP;h>Q%h0?qZ0HR@U p=PLKd ̋hP̈́FWHأ>y>?++Kp8(C\' 'tC?*h[@zR0_^lBؗ^v&.^窻+p( jn(+::uiFlP`d>rdd[hJk=~0 G@/b RJSЮFVpwX^ ʋb^';)aiȿ$Qh4E)ѽ,.e8@CkRP/u?C `}7HHc'wFHUH[_!W+guQWx= =c?UyxfNM\XqlCX ZhxpX(:h7SG@ɽ BR ]5u=eh2fqCn'M~Ї˔FoL JOMP’_}JgM;ẃΝ>t.  "pRӠč=2ݠX: ݎ7B2`]Bwdj_LYnuŽfN8W}Xb#1GKaȏ*ȃVF&>+RĞǠk7C)4Txt`7h`FX5J{矉(mf070tI΄M0Ldd}]pEgH}H!cf8\er@;"Lpѐ0zSgהż?$??ZYIb $f H2, >ϛU)}\BB1D4-.kcbOwNYj:Hkʼn2X*IP;Tx\d,P ?id,D*A?H\:%?H/d:<   }X[<@ y@PfEAQHѰ#KX#ՎVt0cȑU >ds޹Nx҈2r% #2t&\Po)?Dd8t#\^/RUY#̂Î`C +(WĎJ/J9SGOpsy%L h%+89vս3nHUZID0 y!~ruJZx `KqY%VHk8P!qj oR^%} CN]Sԁ9HAH`U!8\i 0-a)S$`@.!dpC HB]< OJq0Puxx$^ !r0ʹG",a.p74H%l lkW^{X'P1( QJ21$>V"1r(8W2=, O US3%!2J=Q4BK hy& 99rɖ80cJ Šw3;#ȇ=ztї~U옚)<*P2P Ї1>0–D28d`q{ A=< cF+J|&,rF$ Ŕ SP>"?qrb-J1( UJ3*Q(s3-mqRz`9$`61~L"B,WU3: :8s LT' Ҋr[i_:F ^_[ H@F䣪1rkv#;$++S bP` U_ A%W!G9.AF2X̵x# X5URG?W4,5ǥp#XX>t8Ǎ#m(2ƀq 4RS FY ȑzaXAR> DxƔsXy\ lI$@;Wg?_X#(?z dFGH#j`*JAi>muDs+ب 3Z¶Qc.)5g8+LEP^3Dn;)'aQ̩ qTU+Buh툇;`F# C` ql| #=,Ppx>wb˼@冂xA| tW4w`?VZ#%0"qŌ,Gt.,fԁia`s(OѨ?V)8Nў%*"x7Y@A LL`{dD/Rh#+wxa2 zG: `>Njȇ< h DdbTlHRC?Ǩ"aF!$\_ANXDHA~b+B"8D@Lś"Xb^X,A,V @¶#4vN!"%΃%~HC^:d$%}GD@J!DgT8CBrcCyMD vCVP>4(u Gn!]AA4ʭ  J#E`G~ F9P2Fb﹃9,C;:%@͡A(0`H@X/}[.%U*8C`D%pT5.Y܄X_P>;x>$kR a?C\"!CbCFJ@ ,D 8 L*@u%$AAs#@|$\aUDeڢƐsHOb!@|Yf#) uJY9*C DH3i~ O5SPA]aa+X˨E `ijaj>بƫZ>P E8if7 pcm8؃$"CEVI$T%l5Ę4ԁA@gp= -"T.i&lB $C:8upBy8gR H)p^G908H3qB?B(tV_MiB,G P(D$j^(?JFʃ@պCF?%q'p .&&(mTmpT\A\(/\^.#Y Dc?P Ud>2f |@ 8 4>@3J`$+D@0Ϋ@oF2 "`s[NBtI'P :Dkxq1M N=MEv$hMF!tU4EBTJ(Z1FQEC9APR Dq@HBu;TCI 6D 8*JC0$UN_7\?/Y#A8E;U42ḰDJBnoPD4A0,kdX\*>4a bfAr A`U`cE=C>p´6CEt6p$9> ͔HpO=pZ]'+"mHCAH q8@n/YwBxe-C"2DX? p1`n"B χ/o=," ꬵCwZ*a *ðE}&t"dB5/R V0XRR/.`K$\9h$ė)-ܒ!DYDȨ0h$,J*B6@Z*[.L]FRr@#ż?@?π|>b5O0%0BNs3Pȅ*"v ::(!X VJEdF#n<"Dhpy y(:@\X tqx$PVd  z[p_GD2BPnf|A(y>A6DJB<w99NB(І*6ĕG:ЃRg'0,Tʶ3D?  AH )1v C:ATFŬ8 /ԁMsvq㩮FF4A 28Kt+d_YN =X;M$+ː\bOldY`p*:X &mYW$6$ dV:NBCÐ+ t1`~ pcC(J4DddIM*DM2-Ad瞹.R`7 5^+IP.vIvR'/{쁪\х\ƱB f z.@Bm{.s!fn8GH mzIe㔆 z3ZmhjƓRޠe85x8FRN~q֞#q gRP/SyAs'^ g:֨BQ*.7|g|.Y!j\8aKΙwxR~4^qPE:FCP1ˠR,R8yvFǟ\ MxTLkpcPy랺N/Þil߃KeO ViEl)VꒄcedVV%O"3,! c X4!N;(~wS|@EpgvB#9"cLo ]{ =*~'#wYhDC2H:WD CoG#/n1/A0vɄ?,Aߜyw VPh䃈G i \N zuRtH:萍 G}=b%Iz*xA@G9ah1 bl!*J$#S# &#6MS!yЈLX8BsDQŌkBVO`2tQtK4Ha)a@ re.^U@O=L*`#4G#Gyʥh2Zu02p:3n|@"c ^`̈́d(P ";h(T+UyGX(N[l,!%"( ~ZOz\ov"׏sCGvjǠB`G:'!0xØ(X$ ј TFAFwal)f< R'<`XHTxDR Gj&ȝF 83 .MqXKYx-D`ETHAJ ~rb(PF`|b ܕ]j"ct%uj8K+܅JR@b`/С]!8?]8zNVI!9᣼J1^aC[XXDX]0u'M&wk 2L 3t_ U׽!mfEC)ncw#@H"}=U"F1X|#qz&ܾWޅk1eT*8F.V^,FO(./&[D쳬,x!R'1u|}fv#xLO0)%%mJB&xj8Hp =]ι%0YDƒ|#;pqVBɅb]L{fTW}ܑCC+z%8$/Vy"X%61%,8T z)FcoDtF5{60젲6jU xfC>t΃   " ,! A"b H``*hpd a nOBB&>A6Hf/؂A3H&D).;AA!JaURh` Z}X8#~kNz@ф***2 #"$kꀆ~/aAJrJ *&nxH` NA$Vv 0x,K+%#V>XAnc!!H5&)!i@ h/jR3V`IOFo@Uh18e8` nЀ    @` `AH$r'6f%Xa*!b(΀R qꮂA0Tao",!ցڏ"meV/~RܖP\1!|6 Ȥz,!N H5B",H72G ,opmy/ψHȁq'g&k1A `!F ! RVx̨$Fk7"-tbdA(d-AЉn3Ra֮Ü27|"Ԛ!5C *FACrv/!*@*!HJ.!< *dыm(6js(irb4b߂y7gRK"!ԎLFAz`RCB)(V!n؈Hj.^AoHŪN$/'8!B)CK΢mFb*2/, J-C0bIQSB:'MHC"դC0ҨoH;L.a*t|.NaAF! {J4.0a@A`r?!"$!3BJo/:m.R2X_^, IF)Z Jὺ/2^aЀ2g5 ƋX;,;AO#" a1, gx|֒g#w1,h%b#$pA1׭,W9MZZ f%KX)aTئ.(^qk`6K!iu1 /dW,(/%V.悥Ρ  ! d} eH FWS0r(Q&Rw/.r@O}5a d45fEQRl!0N.Y#8A (nQj`* ;AϕalP,@uCB># A@"&*(O ^`FBj6l)Nv.AʀġAH%(֠Yket LHL([ّU&gz*P@C0B,.`!+]7R,l*\&d-n.A/xKd.ȱ%| R A'@! H @},Gq9tL0c|TK-9hwuI 8amXqf$^T=,S^&@K53F +qk $2h o <5dc>C l\;A0L).iaR0fC4@\ rx9^ /vpU /AzڨKa+$ `h|/4G}A=*@\:Km0Z$n` X`K,+!'jn1Mz!![)etkR #aȁ2  !^7^5Jixr8M/}10H5b U ?< & =ڦf؆. .a Zl ʁ,"QT"k Y#8o  z Te#7jaƀ ʠġ!!')OFt7 "Z!q+^K*ż.lV,\(uBXD a 8L@1/'$(92a]@2C4^ BA PsR |HtCAP/b=0WØ@\7C1ZX@@'Mylbfw(l;!=T$!xadA,醺bV4w yb TKO@4(1ҡ t~%3A^ ,0a 2O>*\ȰÇ#JH"z@`r /N ׎"txs%fOs ٱE!(Y~ʤBY4! @i"p?C Hn'ۅ܅DҊ+̑ӹ!+fxPXgږvk̹ϠC#BRySi,&ҙ;ΜN\a| $h۵G54g0'vC _8!rֶǡ\IRLn(ރP:B4U ,3ω I']d&d#(d=eYf:4dD1,HP:g!t=C!=DZe :@S{W#u BӨ $ %BHB" @8%XBP't90ICF )H<Lfr:O< R:3fC66m+ogcDO>\IS(+%B*cռASNSI= ii29w?PhDAB ՐDH R5\Bwk8dc:o3MJz Bp '`U4?{4#ͪL5*ÊX Xh@2 & @$VbȒ$O=b. +P\L3˻l*`={7ԈtsYy;#p=E1P{\]=9C"gC Bo&4O>EB/=CoJG?P hE D=_DsD9-RF7?!qI#( kЊ c?B!UJP%mQAH%~5BLZ/w,484<ao9d##hLG*]h?r90G+hЁ/EÃLH8tc$H<$K%`3C NQHq_g4As kA8:̘F9VcF' S;l"*p̴!$T`XE d@HP' `|B `dl$CA Yjd{GQDocAF̡h$f፳@1yc:R;C띂*p@R|UA p>X"D!wvH~#?Pt?( єg0c?̡XYטx(9!BFw GG:XbS@HG>X%(dEygđ:9G,A#',eF>!x1bj> 4hO+HqЃ)AIG#F^(v x]V "!h%!!HhnYc<0lI;A+bMSF,RX847:J@:E:`D"!w!TDN׏vPW4$qIģ,>da)XB$ }HX::,=*m؆yUO` ^'$,T DZ0 ^ b։P~(giyb B=,qmG^8Ba\Ա ĨhbaIT Ađ`G>nرwQ,,9\ HhG`5MEW)Zރc@6EmlBmS)ӡFIr"(0 9"|q"ۯN7;֭FuД}*bsأ pZ34YQRX zb4L |нG >\a (N:*N(fG>7ssұ*^etL?TPZ7бCpƜgF"`E @:\")X/ρe!m?':C).AR7CC'~#1}slakIqI:G9ϛ0 /0wp]vY(F>jA# Avnxc]{Lp^4Xr+Xln1kJf1ЬE.ڠg^" !C|W&/xe`/sRJkj8qp)02Ap<&'Tr{ef19 k@k8p kpQk@l ā Yl  \&@Ac-4.fH!C`eJP gW`a@D Yo% %uO2䳊 n֟1JVQb +eC hc}P7Dt s~Ye U-qjȪo( _@Q v|1;¡ e)M (=MsA?rL4_̰0M?="r>M'CDGEQ J`sZ4 Q4kihҐ9pRV3C1_o:/ ٥bs Q'^ 4&/ ȇ6hCT OpCAeh p3}i#Qg!tR҈inZ0 x0 * >1#b҅ rzxkW44ȧ0`V[Ƥ])0->sD C,15/Ab*i rE8M&TѰ| כz4kfְuh x7`p5r-*kjd.0q3o . m_`NQpCp0 n~҉(}In+`0evߥCڑc6t"3>p"o SP-1gj_сX Q_;DPB >Qą捡.Ȅ)H|M7psd`t $0EJR]~&"#U,I|?tcݾW\u'Wιs߸VeJE'Q1|`{bŋ]8bJs%l޽G^Tgݮ=&k@c9-S+ROEV!t:>y0vAeɧ)7 Ir x8BenFP`Yg3I! c!e.46%%RGVh@  =A z 4z<c3}ă(9䱓8e8JVxB ? Hi_80XPxV@4TʇKWRCS"XtXD |6`$ʋMAzlOPf W8[z[@W@+cJEE7ІYh04@'KQBEh${@GxK&ىbPB`i=ȇH9nhx&<`Qpu@;u K8 #  4SH.R-q M ;y[I{ hXt^LUʛɞ,d EJR9z pxC   d4TEvlPVWp) S|]V]XfIdJ"ȏAm8CDɼp uIS0L`C…P%LUhsQpΦ`HHH؄dKO!K qXਆVH D 8 R <3A|DpL 8 <:( FЎ{;xiwx*iЖng;q) @QFYt: phsuK$ Ol&u`XK x8Ɖ/Lu CAR$;UA`CJلJĩhLShhm~ȇc(ѰO@YPXs?dO)ӂy![~؇ey`|?@k)xP_R 4K0B *H{pU0Dz`}XXz`}OLO(O$VFNVFBG٢2CjLؿۼt 5X7ˇfȬ* )9 lwZVZ{YhPc9 M+;`v 5݊erȅh戇{ȇb@9=.U1AaQԉ x]&ѓrUPV`sj(&Td>mj_lPQd4mFVcu0$UXëHuz۷|3 ~hXe٢U{UFb'rH w`Re]A;r0 ͚j.KR 04 JY" z]52Jl<C-xS1U{XAPPYdPUZ8FDFRs0LвPdd|W8?:+š(XUA@YDy VdAxR 0@@7”CO) (@B94ȁOX&Gk ccI]px@-!`8y؎gZ<clfQFzBrL`OZ@؁(捵EBՄ_UQljzP@~j.CkBT쭐ꅘlXPHAXB?ȃJ8UvvI .eXwy?r90$@x<'H,M>.HP r U[fkE`4p:Xd,d#jE6ʛ wt0LGH-`TE]5 <*Xˆ9F?YvxN! q)7r؃2$.ȁ'6 Sb&==h8FA? =Mx/@A1eaJ8a@:dԮ΄LVd:zl@áD ady uh ظU5`z.[uU޴1 Sd 9؏prs As@ӉQ`,V@I@%Tq=XexcЅHm@&`&|($q$־rs q+FaF2r2l!Ĉ!h"ƌ޻A72̤IMKב$̘2gҬi&ΜV3Oʶ8k5~h_:ؕr#Fk $"YAb ԩI;^=H߿sҊGgӨN`Fg6hV\;}tӤEݙ[' &1i\eN,uGi%L@%c=ȫ ~q9J,;L4?Rm* F!%BH"( HD\ na }̑` 3j n;`0CCȊCG7lÌPJ!aA'W8H.LO>>$#Hz)tޢ0& (̓$jÕ3,I')::C<,$ 3x">0c6}3{?ȽI'45Ӣ4{r{`c>;CGxRH!I#Q%kM;Ӭ/uH +0ŖDL DCnZ>9=шKbC-1 A < "&qB&6JELݲ7gL$jYkQaD(F=(U>!;9cW9W 1]^~TH-щE ZaKn ܕMЇ9Mrv,"th`^)QqLOU?i */sxANAHTa@%:% .qME0VzTA-8 L#(\#ib 8>d8,> YTP"?Ѐ*@Hx"vψCAýMD&A|@?8n9Ήq0olP@B s0s Xx83x>#6H`=H(CUY4cٰ!H?6 "U?HȄ?Hc} C|S %|yǪ.Ub &utAH$#ͽ mj \s%^8|Pf=0YHD@ Ȑ4H @*@a d *`r,CZkD{-@! b V .@ zB>2ڰ 0y*HǚW VLcM)GcP"2@ i1$ THA De$aT1VKvmkDj21]cBƸ "NtJlL~E 恀ܘZ0BA[OWypDȎ>d-R7TC FL1sC$$2_fRIxrOa)Ϡ, lDj0aR|m 8L%)`)A˼Lep P⺁`boΖ6CA;Q3A`EEhqPIxF'2Xa\~:84A4, \99T"ӑzu o8,)B" +YJLK4&LQRQ& Z$C^[U45@mDpCJ&:X ЀQ h8` XCL&&#pSD TTdYiCoxCT2T%X#$L/0$$?\ PFLK'(PEo"*,H[  8UC/@ @T49:$"y'@`9$=[;tq :FCAp.98B,1;C=? B1L„ "BbC_CY:L@_Ek?*4> J18ȴm#xPU*N HF4TqF6$X$BCe8#(,ˣ',@N(DD9d |UC!A+p /CA!׏MBB:DbFD9lD7T_=5'8%x^ lC4DuS>z-EpޑT9N֦mZH>=C.5D ?X&ȧqQE:&@ >q9C00F$G(~>؈Ku>)>?@6q@pB)Z|yD9B1Y>"¼`Dn6s,j`ptf@)D2(%A+A!\@(%8T<-1P]}]D}X]0 IhmAG|ަiN\. WC\[D$8D Kl=`DZCm@#DQ189C]^C:x%I5LGĬ9Ŀ=T")1tYe^} !p,&'CAhO#C4H҇v]0q`KW(i6jLP, x9#w:T² N&,Bɵ6 H, IĮ/8%*LN4X%2CX/0CtFĿ :N]لkTUCkCVH;)9@΢ǶGԂJYLADxkn D=HT!X Pb&&_<,C,A"HHh3pP*_95fD0āPC)J0ZnD\,| @%d'סǀ8r֔G Cd|ᅰC)`ĠN@ToU# ݦTC6(q]#0X+oQ 0Yp$8 5$8H=tG:GhCXy0It)ʊLCbB Th4ZD`3A E) D-`Uc( X)0?Nq]9N7NH:C7pGPԪfq5D2,C6I(o >іM%8J) zCm69\:>:k>4C 4"CB'B9@|8C.))8$ 0 XB/D_$i؃PB( DdK_D;Cx`-s"x1JV 24P#C?3p(h$ _B9,(D;8 oMH?3@@e qXB  2KG@F1@x6䃚cg] GKTxG1]Dl?P?06!aC5?l4JKY `2D^2/}Yap.;\T\}U#%DE^mYSL.A\%_4 M 1z7{E d9yPMkF5]j0LaI"8T4BKaC5 ,F NiC^G>¯=Y_(egՀg!b-Vf8 ztn}$>NH'_N6 X`{T8Ȁk_u2~AdB t&U/C $C ٦p2xhCݷM4T TY`Ő/9:{AoRuC;ǚ8AC`2A 9G]:L6( 7p-L' (p)AA2HP:"‚2CUy2u3H[DVKF9KD @ F]>2dA>ÿ]="VlɃ;P$C] uo pH)kB`I@σe~+;̤CV\x7J'Ђ!(/D@M@h)5/1]C? "2Ѓ;Qy_?9\1ы *8B>P* .-A 66#h &UT<`NG8ѦF7[K)(hڗM$7y?2qiӧQVuk%#:yZ@#0`Ԃf5YI#'eCw r9Fu\ЬI^8)b9h`d>0HtyFс TBeŖf.WfYfSQMiaVa}UXiZqU\y^WXiFiY!yZytʉVق\Mo(ژǛv)MiuЉ_|6gX7uYmf` lIi&&fe8Vev>)."VUY&^~x&^Q8^f'kY(灄>l!ZnYꩩHUim뮽lN.ԶkI[))&7qgWgp B)* ZƉ|5޸("EB )q>4$)i_MseDT!CnL`"1IUaGѕ-qTM/́У0Le.'xF4g 2մ5%BsD! , yH*\ȰÇ#JHŋ3jȱǏ CI5o(ɗ0cʜI͛8sɳ_> UУH*]ʴS=J᮪Xjʵׯ`1 KٳhӪY<跶ݻx) L;el5ǐ#K8sÈ|CMӨS^ͺװc˞MZuͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6BTBgZAޜʍ6.MZ7pc:TM=zT` @#h47L/ #nߎKn#@+)+/ Hc01ܢ@s222 .I [oGL0CqcKc@*/ 4͐3dkJ3M8[ӌ7Ҋ/102R7L4`G k aLMǬv=' 16SK) @ ' )c<$7CS١WggGQe\q?0T4hC;޸504SxL8d)9SFs 9P@Dx"O8 2S<a 4~c= 2G).:.Qx@?Ar1 ?"#G=21N3*o Nr.cDk׍#|A }/HЋ|tM![f&;A4T b[+Pjx E2 ;;FX,j{6h*iu $X:y#p+!}I:؋9P*p+U_udD9_FBMsu=a(@n^+zv<Д!I $`31~W -|_(oC1r:SЃ>@G]aPw`E?gشaHBb@(xpvXjYl`Cȇ:vwX*X99@*AbяNU!G>nuc2hKj8Vk$Ldž]鮵i} h[-C<̐64-U)9&C;-gG>XqScR8v񝑍`,p`+h=6+APuWR`# B@5\ hQ8u;Aẅ07|ӜD^jyܝ 09Lg!i'9F lkB@4A%3` h=\#@2=˜hHy\fR~TUVG[7s H`Z  hRnxnHP`SwaQtP }@xg& 0_w7TZM p p `Yr6FG`edPXqvU_"7M spgup @ p tR`Pe \0{"rFzp ptO`0 pmփنPE!Z5 [0 p ՠt P̵"{\pVVD@e2hՆ[VZ 0v+rVF` T&xhVhv P \@FxUUc`ՎZ `j `ce4@ }Dh0@ uEW[x^kP压VW0~tՎ`(@sdMhEl @6?(\Px ǐoP P!0 ʐZ9_Ć5p# \0 6o F t@ \ zj5F0 PYP{ У~?RPlRH,ep Dh  $[ }) %%AW^stZL/`GDIsv5ꈅxv* g@NiO&>aMִ W ha QvjiY 9DHXa{wKMl{K":`cPQE <ztd{{5PPeY PKRcjkjYX8Fp l^cSPH{bda i2pUF @ P ; Ьg{6\P$ͨV'Ufwz`ExD˶Y HGFpոzK۱@ZihWš*,1 @+%̪­ MX` ʰ-Om u)y`XxC!Y_ڮ qQtsyc4tNp®:, uH ?̠ Q }d~4t @ k +@  @kVvUf`'| 1 {ƫh0)?+X}؋P!{Q$;,/_s\H[ `Gf+<ub`MEYp͙+^|?0 |Oƿ`%(\h,\@`Swi; VP `nAYqȀ KB-Ԙ , @mz3!g58rP;>$07} ԙV@@-H[] % UpXsTp4Iw| TF!Ŭ`p2Z؆ݠ Ȉ0hL qqؔ} *hG W JzP g\A)1}%}:։* t8|y8FW {eyܕ})< :Xh0 * ;5J(= +XqPJ ɚ= 1:,# MX/hplp t@]}n; @!f)VS]AWvVr~[؝.3F ~+$\a~pӤ`$ Jv` A[b  GbPW0K Y٠݉ @lcP.Vv(;}[ԋ0`c"/&\TU:Pt[h7U y }>m>E 뀩Q!H\H@L>nG൞tTLst\PVh%J9gg:Dg `,oҠZn؀!JfP =ne>3GLn0 ۖ&C @d`xƇp :~?#y%HPZj Ͱ,qp # ` ,vy'c1O(RF?mT8\o D_PH<yMVI Wu%san-\p?zQD-^ĘQF=~Q}Avn޾۽SL3[jtn^>VױŚEҌܿRWОq-X_ 6H:oȗΤ&^m%)=tr 9tGaJXQxcq̉Iqb„i0-ڤ LMFN@Kgt&b0Хsoº.AǟBxc>qQ|A sqb0eJ:)MO=M-OA5mND{xg/aF. viF8Y e)gjTD 2! D1vҡB8b'W!G/%ؑ(w"(8٤Z(7chyҙO'p@ʆ#epiveRިtiɣ$tFb,@EDJ($QEnJB oL:dl[F!-wzfK8Y踂 ~a0:2<];pC<.x/6<0 K  $ .b mSt# c )ik#k:';XAz㉲|G?,DiΑ/|6M`3~L⍨ jF (F2V UXG>Xz(4 %FxB6Xc7G_R 1Y#P+e3Ub#G$!OE+1*jH,* JTD2a8 a8_?GJxqr{3 &:?졐~bA h0IԠ [C48Fız{;6S'seA#@f XJ`+F:4 (Z4xH* x9X%/B! r/Kt$;YVֲP8'69)z rg4h Bxܣ?U ۨMhL` y*V9`0-',P1dT‚P406@YZ0; A܂D h t*2P9D*V怃Ddf+ |+,~%ɽ\G?Ya\ʿM+҄M)"Ѹ"LHA4 # /qHz: c+" {Ȓ[`t2 +ڇF10CXB>*\PZ@+ ]*XHX;<:8sSix>@D?TX`T8xMP!:[ʴ!Iz,aB 7@pEt{ЊFf`p8L~PA)"MQY c Qܫi=ɉ~"PЃ r4s,G"s DXC0xY,nb1.H`+1o*C2;CY "PspK؇UДDN֠U2b 0~43!Z6 @℥(7 R|; SfD H0EHz<(?=X ² _h =`2L>SC@,lv0,) 3ȁ\ahA%1 r84pJFcܛhbd6YΜˊRiLe(QsH@Ih,AքO! MXUsˍ0p zC",= 5\;?z&xl6KL0C9q:8*\KMʁXSHͳQ|PYĕDS=dPQiH 4IP!zqhʹ”Ы~(Q@:Ƌ NGPF8 m8Y Re0j !2Khrsύ2PKijy@i<84 AOs N U3%$GzPzf %>UkSJX&U \OnzfHQG5,Њ 힘ѳ -1ugV`slML +xBȌj >3*R >=w#xX7ɸ҈Q~Ӟ)6F <΅p%@- ,ȆKXr`ᥗv@pPQBljL:~2E|Ãۓ,PEdOUXP4:J5Dš`DȟF>Cbpː8Ixr?տLȈJ=P3Kh@XP=C5E )L;:ȅ~ <=;&yI8j] KCH fֳ8] /(%`R309:RȁLT2˄z3*>4"H+Uh P8ٽC҂y4a^2'^]P֙b XEPOA*bMHЃ1 lkVXtPvPR ɔ[BM R6[8ֻ,߼%8KË򪈴FPEEi2BYr39(,q e2 L?NȢiVܭLW-,7&mT%2HP"5GMr*|â sȇb꛻9AHAѰ\{8MX|lɋ9A^i-Ze֊, Y"3n+(CСr K Hb=K /F)>)>8u3yc`]sPp(N(=L>[J'/e0] mn(`!rsX,}wkK[M z1~@MY )P0لI,`cSAuNd[d /|\VI~ͺ`UedH{_j(2O:GxVtH><-"#ˡhp-=gգVUbYh :xNPh kù6C8߸=~&31]ZR+x8k|@.X tA h lM9d,L`d&M$Á;42TPA+CXpVYx4T-zP.@dلeQ0\"}(6@nrhFЁgK^g6sD.MC%k1#Q܋HZ NnjɜNg] ^*~p 6]ҥHah}Sz0,] lM<*)S,2JPk)zGz䵸.'<~"TScrxHIHe؇]/#,Ah›cf[u!6(|x Z7@qX^%'zղ/#TlBZ{B"_-HR@ Cj *8$NU[#l!Hfê\zxK7&^|$൚Hb" ۟eJ5 <p" F`q| C/-?h,kfX2iXH^/B"ctJJ@tY}xs8`ZÀPbaa~lK%tōwvR0ȶ p CC\" @o>O)0[\ SHv>POt1=$"úU xtE؀!8h"Y7Wh0PPhsXwd1tW4Ҡf?(ه/fz> - cdxvh^iVID@+_ZXpݳBxq:9rRH"Ht,+u8kXݥ/08A zۥ):<8@( i"(@$ȃ($@+/+„ \!Ĉ'R8ўt )L0U֦J4aT @J.1i }ұ'Р --jtbA!sqt 'N{ӯ;{ .l(4h|KI 2pذN?~zÇ\~/i8'SlFdN]AwΒZt{s?OX!D|U =DŽ~G5N4jXnrαEk?:vѳX:#XK H}t~6Zϫn)ѝp#ڭ!;ݫEO{=G'ѼN?IݭU?uQF+us+9|\uumGJLm+xE|OLQ$DzsI U|n@Upq \ГO3Bc"Kg"o0BI0Sۭ:{k(Br1{\5M#@megCN,qB`"8C +g^)vHO+ЁV@D_LZv+8ROCFJC\!hǍ)hD"<i8=8|ܣBNn|B;ЄC:Ȇ)Lu^ËF( v0,=\(G)hxũzt#@Lbl: FPp¨ " 0HH. 3hf?ä)x9!K )_Ne 73^p Ax$$&Dшzƽ811:()E EduE#~AfAZ-šxMѵkbP E[Nzl˶S{lj0"F}DbBc&’EB:+ȩ4Jg. 3 g%jq#gFn .Q=0E@9|,:- !QG>^K@5VZe|v@( " *Kph)g윢`-qq)ej>&Vjt-8!~W1Ӛ/?n b5[v\H@%<t AUvF?^| *d .Pmrp.K0D4ry\%``)5[Ga:x)]bHX8e097d "AJ?G5A *@BU)0w9K +X _jǧj [| <{hXY@31hRr 15鲄OK\}'vj е.Q_!M I#!:r%p@ >X .:=S5D+G$`bl;$X?qp0E4 k3n8DsУSd$nt{ч9|o.a# ů?giH9^ Ž|ȩ5?D{j>CCHԁ܅;FF L!TcǗsLe4uA܆iLB*P"H@Wt%1Kp`Anw5 4 A;QP D=[8L" 9?824 ϞCDjxǫ8[ ë4;mAh2HA" f-G[m:n >C\hƹH@JcQ4"i`:5LAZT%䁲X\  .HC5b{{+Zġ9@BtI,h]GΑ"m)5QaC%&@H&d",B$܂NqP]AJ,A@dIB67 F?($+kl,?܈n8"7~Y|PQQ:tFtE)4bA7\-T,X s"-P/ <iY0D7fRhL:HCp!=D'\88H{|PGp $ ,Z pA] y:@Ɉn!x0>@R?0,#%H 2,!L5`Ҹ2ʗ0fdLElD$8$ hbFJ zP8Q\<@(8Dz?BlU?xl X`DB(] (]Y#B>>-ī%  'D. @B@%؉:9h-рtTrg{tFl>jVB|/)NhYGb9>,`;2"@;j,`<)L+~@젋 VrB#8$,?<:̈!E"<~:ܭX9A1d?p\A|Rk Bd9ݍ.C[XF) D<:ZHމ:k<0pC#&AG ܀Ɖg,̨A'z(S bC/\T@ L))b*>=>>0C2'M|,$3C?C>  2j%D|I]&<@ )a k !*Bg2ė"^>HիE$@ T)8#C;(kEXT!C C#9 D*P k`,81ECUB'^1W?ݛ\ƿT-֑aM]=?a88?Q:p lrƃg8;Pϥ P>PD—Ɓ) C+[XImTqJ Qf_C! *H6m(Bg|n#%zJFg?$LB8Գh_myDHCr|## :uBh9T>"T n>& J_r(|R(`eŗPA]֛<@A. sh[Dy =>+#V?.+?CCP̍I ԁ49B"LB7Z 7.>4$)L?CPm6AB+L_ }F!;C 9$$?P$!+Wj.C(B䍮v=4:HT":FAx19ACIt<OSށ$BN_q uJgj%*E?,9paGFm29%rLd!:1C"!B̫@:":Œ0tʺR((:&]SvOk-x/\4HC%Yu_46kPhj1 B\m[[ɼZE e-W$eЗCJ]ǃ4 82%7vt*(p&׸Ap٨Lb'e,s @sBo4kB6iZv!t㯘 C<"]F?m`OICC)H g_4 WBg0. MT5sPIp\3$9v>,+L#*19+\?Mho\Bp ˄~ gj`UE! 9^}NIC# IzNݨ@< qETk3Tǀ&KIw(j>=[9LUd?KHg#B^ >42_U|jk|P'ū>C6 B{9LkFVЀXRVQ\!`CIL C:ˏx9_`|?\\'`?0W(q1+<x|;$鮱G'19|)*h<| ն/R#d8G{O9[D|k+*yJiT)`Y7d}I-!,K@G.7>j$)8{g3eʘqKg]K*Ɣ9Ė 5H{,_`%aivE3% +kSLWo^͙ҡN+y*TMcf+t)^#Y:y{c7\1?FS/S|sˬ9|X;-F=54>HP8{6/Tx$_YʿTO@Yvϡ̗o?ImPiG^3_|y4wGv9Ǘ|}&Q|ϜItjyܘ HC  H@㋇#В(rSp " H93f'iFEl\DE%zI`myc:~Ѩ$"[EKx#kzu',j+2 hшv ' ~i5(C-7K"bۘ)asAI$針'Xr BQљco(0xQ'ŵMg-_y‡Y"V职@'l$`éh 0(Đ]Fӱqyӈ?e,8cq5f?DxZl;Hmt3ubpBяIF\ZọQ{Iw^O+O2G,L)e0U9h3(5(BfP^ VKU }?Lt,ٸQ%2Ĕq *-)SzfQw)p592/!~؈R0Gc/G6sCϹ^X*9OZmkhVbȥLۑ )&כQդE22vT>TZJ`;a'4O8S-ŋ,ڹΑ.%vWuu,sG0|F#p:\Ġ3wb<#/ً]2<s'1llDXWjچ"yܦR.DT`K#T.y"@]Y~ KYUC8q:o3IQG*@ZYNay䕜rhkLmg{& AlCG, )HJؔ)qSeiu؃+-"G+JAlERc(n ի\peK5INRd:Kȉd.+Qv J"αJlTkg ")yK͚+0LS _`U7菤-wP3[vQO2^6#@ځGBI"anbKlW.8d.f ܤXޯ a_N>HCJġ`@!^Ւ#!pm@az.pA.a`X+ ! `֪(kpMג)𚦭t![j0#`AϜ-(tTR"!\7Aj:tM㧚` Ŋ Ay(4 4`/ iЁ"fjndgငʰ $ `aRqa>1py1a 2oapF<~.DABP霈b P#wμj"!|`0Tұav1#.H0Xd'*>oǜZp!wjsƊ!ڊ Ϝte-E8^PaTF|˂l.\NC/1\5,h؁2[2\J3F1a36s#1a@DPh÷R3!v7\gAޠ`rKҼh Τ00a@V5CJ6367Fa#A\6!.`I.2c#ڠl„$-G3!;z2Wp;!oȣ`*7reT4bK^ ˰Ae8#nZnHT~⭩03(A!4;L(&oJ#`Dql3`@ # p@6J-Dp Ae^Xғ#.P5pTI\ \l. 'B?K a,G~ܒNBdJZ)1$@!aCQ.!rPn&!3Wz4"b&FR5@>g6*&X0m&/g%b(T"ڵ7`,Zb1niJ ` :ulL6fbk*΄)~2aDG ;D 5t-"&i\t"Iƀ!@uVԒ^/ b"(C.Z93BlldѾ|2e&.I(dUVT-4w_=A@!*3qa*fB[DE4aTl@r$5R} J`!hbJ BNT!^ | Xj5>A>A>:nõD+@Lv'.֠HOh EYqㆅ4`!Ǣaa|~cHOICa@ & "=  htG Pa?,E]#7gK8Ad_\TVXaĄ%nJXIu"ɧH HaWb}9.jra)B1cP`!ao|(_*| I%+^A;ayЗ!>6?!F(IF\~bJp `фu"؁.-MFR'm&HΠ ` H2b.JtV.%LE LAV!`t ז*  `ʁ`:WW do!\5{#aI b"`by`{w}|7 @ @G!(Pn2t&a@`VO/jYYL5!>Ao2U ֥gF\;IU5.v6(B#<HAIf t!`H wyhr|7<"&X3ŵ*CffXN 7ҁcBdA!]0y}I1~5{a{-ܷ[%Opw՝A8.A@,:Ir:tM91"| `2I%.BOA%d?56A*:(@73:?aIw#7 N dG@SqMG+_v!/8I%AIl,PL=U=e? lP!Y-SVTy "a?*U<j! ^ihف2^M> 5,b/6!oZbot80… :|;w9rU$x BiUŞ v x/8o7hQL*a:A04EZG\̈\CWREXq޿sPbŊ4r]GR_tЦ͇1+˗ 5jxqcȐkHA&V?3\m;t6ޤ5룫5ehHΙKǮbى]?m吞\X?y?B_1ÎO3&"" nPH0P)Ro(c/Wu 8hU0梻0N=\s j~ 聍C#S WD w`I2-2w],ܖI& >oz +S[J* wDݶ(,O?\yoy O:h4L_4c}Itpu~cO=aU+@4R;c^?_+1 23$w$s"S:oHq%Q2@2q&s  c8?0dz?u%hA hT8&Ppz_*Y!(#W`p-QeT9!)q9Q;LAiH`D'd-.qb&FZUO(؃Er@+% '$bq= ~3p=@%=rzѐ!Sc.91 YYRҾ%HFdr-,(C!,d`3/@/{CɳmTqlZe5h `Çp–m;`['* Yda|h^BCzgQd*!dohkj,Vjg;R)btV &(V+`2dY^dS%R' EokWъ=a cKRt# " x+ (?qh];J`ȣXU_ԡ Jw tDXhCꡘQ]j3h\NLzHaCHO$ UȢXe#n%xmAFuMKV JXqmnܮZ<"QL)LָäK< @#rOe*ukfW fB]QMc%ohDOяT=| *<\.!q>J c';rX%Erź!APg+ 샓8!-N3Lu edE%V |I2%n! JFP =9t&l[ Wls,*W~~KiN5R\5E$%QK@{%UG(u9H"һGVA=-njF`?E{lX c;^a eE6 {YL$pd+eJp"؅&` `x"%X ΍R[# 05֍ b86!TBF$}ppD.F< rT.wTj:򍒙d9FF|4mB|%> h_p 0>q _r7oVʥC'@)} d%jKx#jFVYblCXxCx!PpG>[.ɑԼd@!itF(?hlGpd?ؑM{pC$LJլEΆ$XR9\)Q /4(@):`Y XJSc 4ђ @ u@>)po7s-C],p Pt  # +6]1ydE#2r`-Q"ݠk{2b2IdB@jXpg` /04t Tt/}DhT 03B5@xb '͵ M`&xIb5(?@lG~fP7X Xh)U(_n<$p:hd' `3/3?TqjZap$$v F-GF7=`,Vp!`UA,H!@"[S"PCf!yױ,aw9〩)Q _\P5=0_0@#E`-~;4 k=aygLI Dp1pD@ +Qp00vО0 -MX 8? ɐ e 4 /P w];uB5P h<<3IDS /H\TG2#-֢PIJQK@DD@< _5|o޲KJ}9C!SѴ+׌ lF ktW WpkfUٜTc PD5p9SPSwF&W 02f vT(jMmՈ6XP mPLm%ZM\m1W`UTS^A%FԨ:Cqd80S` ` Vej ApTs9m3!}ѸVPt uZy%(Vr"p !)5t03[)0~ M dP'G|@ԯݗ=-$lͶEDAq>_A `@I5Ac4wsѯ1T @7IJ1od` v&U ʀ ҋ c;r;> yM~$R0@xviĥ5Qi= `i  PH+Ӆ1J`4S LPL0 7*K,, ,) [$n:_y0>K8Hd=p_:H5Yu3o9@W`S4y3 EIBWpo``p1p4/> ] "7A& ALwq%S|Tc*Rj~70 GDiD R .1_׾.זu: d% llj.fQ"'#^h.A{oѠ!3U"0̄M@T4?{-ehH AtUnplSsG=Y a]H0 c/\=P ivGD @.E=qS,& {P`3 b0 u^*d!}`$GQMU דĥȰ.ݹS =@N{#dO o>sV^QTM0 4P e"Ui=}^:ڢ:RoA؞>?>)t\}L+@'.iȡ|Dq$x1P&#jX Θov#VD$c16衧YdO>lx)dz:hnc(>̐=r1#H(V¡g\ LBתPD-/||a bQG}ʓK(QN;SMg9ḙ2vdȡ<6Mt؆ʍ2"? !zrhdzpCӽ9Gz݇Qgyn;9z+39%-`=Vf sjGȈ+ϝh!B2Usa>|jF*颅IIv9:q4jZ|b቟f!V7Q dH ׹OoB:ze%'(~Gֈ.D`"q6w 3@e%$/mE4ph73 |0z 5#=ad Rخs`ȱG4rm[aqBL?aR'թ$0%.;4)#va'cqB#<u eFǑ =Wq6sтqzPwQ$r2X @" 5HI GQy`Db#w }|̥]cؾc9jIwM`"{З{(<`'kS'Dda*ga\orv"r4j &>a?!3m!t#8DaT\. @E8uC9<+F݀ b*YIJB+ҹiO}ӟ?;!F $:IЀyh=U[ K[㽙"]14Xby8C 0K9$!CNYв*W{Fȇ9's}<{Hi5C!IT1+-8c3-8OJ@4gL84Մqij![⃩ .ԓhFS릗{G> :z=v#XXZ]*Q'~y#$<KR?ѮV1qLPK~+uD4 G1lB 0Ri |9yd4ewsch Q+AR<ݩ-SM!Nguw٣VMb[^\:,S9k 6I4p]=䎁4H~xTU r Shl Dш\BP=E oXt eyMPM/c'Q q&6 */PވVMĤ<-8qV0M\/y.ӫAuNA"/mH` DO:;n:û2u | ?&]dZa u>UE#t_YqR{g2Z(%#x@DD8p g?r@c( ٻ9* 3*CC9a-:G{3)*"j5*[ *c@ v`@v{,wXH8"z@: =9kL\<΀z*D )=v`!AOpvi'= O@~(,Tq')]SP8KňR;SQ*ؤ,<~<&GK :7cCv܋B݋IXy&ԒEVԈoB:wbL8=\ c=,@#p*\==ڿC)FNh2x0Za*Ce\;کW x]3?P/Xu#WBIՔ*aB>CrÐ|B}~S8< T@" 98*.ȃ)pZ>$piIuJE`T;`<kz,H\뾉_ q;r;o O/l ix\L#X|E;b}+31 !YE_DMڗpp9+?RUݗg#`?z4B5TYdF?<.0bNY3)* )8K8n \e -[$Ϡ5kz Ҟ(0eOIh;dIܒϳU@+i&chqhfcF1bE`sg~Vh؀D*̹v(L=|:x58CP!)O;璘 9NS{me=(z"KGC˹܃c VO|)DJŋ-0xețFȘhxbzۧJ=2vgĈZhpI_Ճb ߊ$`b@jr cx`X[[fV1{_|x@ /@gٍ@*jBc(1 >`é؃zBp7֌ QF`|TLN `7h>g*zVjK"uk؟h`>QcHJI4=lU`9bQSJ A FHHiWE"ȅtvl);_ dfቈ(hH"f|3+0hp'P\8(VWkQl2È=Cd)>=muP |꿛@s7դtHPiq_* ɃH0G !}N LMJhs[Іdʸ<W @(j K҈c +/bˁ(X.pEE%.x H̠HFzhR2 ?mFTܶYsD@[o$&wEOW"AM4_Ф%H}@ ZN?o^Db%0UBXCSώBّSn0"?t5G{FNukA^|2ʨN: \]wr]'D>COE(nyO=kO<(K>Ֆ{< 1@B "1@B 1Bp/Ѓ0b|uO.k(KFcRE:$m<( |RN Gǔ{ H,b}ܱz׎g /\5 d@E h^; $>鰓d#?F 3_s81eͮ99"^'hRWcmu&tB c^D.;җ#۫;E68dUU<,OP%>l^FӏnnVek\]rr -<҈?> \FZwu^{t9NSphXѰ >|Kls;$V!謥z <Z@mXy= L)o&@ 1i3Q\GIUt?Fh˓+cnӟw%%lZA p0|0ɀS06UQU8BBlY8ȃ?3c2#u.;xڥ{;{0|<&t/_ca &KAE"=&/E@F"{B OkFD%CnjPŨ7-q.=< E##b bWV`K|%|?i34gŀ.[;{K{;t8Sfo:4bHǁuE+f?#阔8,Ud-ڧzLbr-ki#eiH@hXxу ^`G:T H 4Ryfh~vh 4I׈Rxr."UJ:a|h2Gd} :\ث. {(NiE#: NVk=m&l#l2Ĩ7ߦ4"@bENۡdN$AL] nH@ _@QE=UU#эl#jDR2` HpPtz ˇe!MX+I1x\l)R1AK=j޻<&WCQ cƺS"&(QiG}D# nٮq:Vmc1UyWM/MA VK%sC9X spJlN`*#"_dkkZ8A@@!5fc5]R#Ɛ74fӫ52_Z9ְK䆲b&(53^MM=9&d JPbXr&dOȂw%(pk}_Gs/فe"/#PS9FdK"U!RQŭz7+Q| ḱ tT `Y5X `߾-G&'/ʘrmS0eX#uhE)8Q Q5]r]?P~C7P$k⦓K=ك)9 ^;2pb h/c`lC6* YTB#[BxAanYd؄ >A~Lغ$ I"*U `\`^fI*g8t-ч OA/ʄ nƋ8\ 1$¡n*\ $'r/]R.98 Jz!؉1p!ѰɩcLEETӘ=TG'1-1`-T -`*$C$$&``OcYbpg l.uD UEKT>BI AP- z1p@@I a[1 LXV@5<\6 P[GZ!Y?Z\8RKb(޵CrG;((NbC?7qcFb^(")?9?DB%1X3B:@^20&(8^'|42'`b*eS-b7?"Ú|*bk#>|@4LҺhpA/S":,:3 $  d QF/iK t}";(&7>>dB=%8#F^b_d#)ڢRB锂<6d7E*ރ CꥢFl#7"OB%P9=K4>:8E8Jtx\  pQ,(p*B'@Bb.ʂ |!Ҧ',`lƂ?;Cdf?@}Dڈ(d#-6G;>;X??I\c?|c޺$>. jI>,) L4g@bLcS]HBN!ԶlSFTbZn--nc:b^b*$] 7.Nc>J9F[H6iQʫ-- !6HX?FieQR>Ă"ė$$T9 "7HX4A[}E9HC=C rl=5|fR^C>sI'_[<5< $]XtVU?^P!dÿQ'Cp$A9 ~yr!" L<3)I hGQ">LN=9ԃ?qB+D#&pt!5b{ CMC R]@9!oPS$XD| <$ 5|AQEFH6"{A+ԁԬ]l_?*CCdwS"H!7.R8oiJ*H10P6]Tx ޺<,,l"%M:TGn;2HVVA5DC931؅F2n?$ydMljs8t̃YB ]fSJs_#XxBiM TA*|w$[&)|Rr];wVxcF9vxdȉAK|XɈ罈SFD+ԘQG@\r(" 4xAj DvW/Gcɖ=yT? q={⑓\}zÚ5|qb;W 9)hצeTfM|zlaa&L:}el>~M )rQ&$Ht0]F>RBƲ.G̙CeE/^_G20Db2)- jxb聇"( qS+a>Fi,IGw hyyőso?>1#|h%Sr&&}<ɟ,Y'l-|QG0d" rI6w XbC(dagB`̉&hA204<755t6gF3 0gL]MDQǜAӑM5 c|b}RHQB!|=,ˇi]]Z'g.%êXy桉,izgtqV`v|9w܀'z z Qxy 00Sh/:^8pǝ,GeW=]zĈxp}K'sa~5`4{쥱h,p@xQߥնLf1*KRI;37xr^6͵Qiez!$nmI(M]Cࣚ=Y3|aS.B).|XASi gWy4Tr˨c2H(S[2rgl4֎:k :chZLS&LsYy s}DoUG,SH?1zy^H@u#Hp#n4{${C W8ztfh38q C43{G5{p&D4B3!faWD&?OpE WpY9 `2"X9^GDCV e " |9(pƌ!H;! b&r jݨQ_9̦*wD?Бj,Pz1XDXcwp*50~6<<4HrwUdan5. dpqC @)&pOIĚքeMm4eXB"6$af;zN;"XdW@&;:Ԃ%F ̡`Y>;uSH2Sis#>H$iCвW>’rx# Aa`}f^ul=)JJ/+;G>ɪ{&{Ugask$0ɒa옇J S! C!:`yp-U(BDXCf`aQ+'!z? u1i5A;6,#@8[;Y-$ u9VFUsS-F A29+ŢPѿ"]jGYAغE%ChY}arhz؃uE?:Wb< ħjJVŰmҫx12! (GDX4`dFon)LR&_%=ġc='T15xc=AEXAOwp^d6S BD ,יF? iD%=JzXZ! bٚ9~ D"FC [ظr>^wdX44\v($XjG`If;8Cp ׀3{rp8K+4r5R)>ȶ) Z亵̬Mm A63|E 8ؑIMܲVF|0\^V()<#$Dy#:"f)/8 {ֈA=\9ȡ8Cc!$a7mɱN8P3* >rІRh op9AT6Ĩ絞D&عZ+B; 0G$V ;˅/D1ͺ4:{Owm`} Ѓa \)ȑVCsquJ1ʓ\~sFt%|FuA*ȍJ,]  y#p'ҡT'1V~+R z f ^,  h  `e,!(?`Nl%% >#!28,> pzl)rJK0`X"XℂUrk\6 !pDkAK iV~^$&x{a N  V -a a) g ъZiJ ;XN"8#/ P1L3@'| F`T2 VhE Π `</ҡE"aC$`,!0ZĊi )pqp j ,  k$ $'.t1V vr$N*!d},3HA"Ǭͱ.ģ'j`pmᓲ,ҡ'`R@#@!bb.ǧj/dO ; @hjV.b 2PZ n `b  F  &`ш R|DL"@XR`61B.W&d23؏JPb"B%4zP`AuxQf=<<5 *% Zb<஀pJ (6ntqQV2b(a 7) FjDݠ @gE#V΁HHn`Ӎ̢<2h‰.KGgj4 R 8AM6B9K\a%A'8aʀFo&04Cx eEffCI%Z :P!x#tPks HJ-5J$ȁ~GH[@VONT2` Fc K q'/衏A2a@!B'r'$ _$d U4C fB-Nba DP ^*>J"DE!i.&2t|GрFJꄆH rh\,fjVGH҉aJa')Vc"V%!@XfVe#P"Y#=Q ` XKZQIHF߈) |lʕ6C:O^^_CAc" cӂ@t&x bH `Ah]3#"hN .d8 5g'71U!$(W23a62r7(A:~Avc9ZjM` hŢt0In0Cm!tAyMQ/0Mw.XIzgH!Р`R) R `m ^yfQƋWp`R.]?>x6明86aV$ 8beB,,,V"jA2;cQ#R1|kۡz ^B ` r@)4x@y}9OKv׻f5q4O/m*A4X9g0!;fVz!4` Dà|6-TD5"`@iF؂w;a4c/C_Gd/^A~MH \% e 7  d }8QEUX -hpαiKJA86rZ6,w"AEfc !&ZWyB +=~&7n``lhq3T28q"u4AX|Y/#I1wY!eHBtdcX鬢\v/5 !&cc$oi,FW3jx !2"ne*"ub'1byH"[9@E4EjgV X[<7q2 `ox)a z)8htdVVYN!rC\1s!-ߠZAQG,c@fƲ.d}0L!aAqB84/n<<gM=#`O'ΡR@\X.[#D}^(s#A !X rvxt/o! bi@ #B.b2?+h R thAA$ZɝRB6= pXtv z"5}q*suB.Bިu5ݍv'NoډH{ %~fdD:݀g^}M6!tXW2Sr23z_F:k?'{:*kJU=I꫰ gYUkUs 8x밮@.SϨ̊h \<_p Hp-D$.Kp9p(c>C9C1PkHqY+{<?`2t0O($$b)Cl C2%6 ("K%c2'|,ϩZj@f?P&>?w9:NS:l*o7FG4AwYZH!k%Rghi7jLש2E <@3 y9\r;|C?P1䓓`D U /찿 ^ $h=uji%бrk\/zF5eќ *B1 ` GN,"*`# |26oL#|A|P;$:t&Xt|{CTӏt .\zP.`yq9$ _i?~~c KCT)Q(jpDJC`Fnj(~%`l;ԁ9 pUxSE?摗̋c "Ypp%F'=E>~#N ;NШ/ :0P'1rF_vuC2ElHF$dU~#T U`CR:On,nz\dqp2B)ӱ~>܅d sp:ȇ?MlN&)P_aLyeЃ(Xzţ'Gj-%N(2𥩝 .n\@w$$P3a 3RF|iN*9DXU>3EH9 hh*Uj\px0MGUq¦P%Pyawo4ćd eD/G-@|&@'/oR cѳT0^ :-U΢H592Pg_a/q8|pX58+0%z,UG>NAqNuWcW@kb‘@"S8Cp! ʤ2WF\IOJ? q[`LwVSZЯ}ekJEH!T>/trҙtG'u&iM8 fé0PN{{{fqBE*` 4wq4GR@ S/x)sJq}7nb >@t<#139_eޒ;T+pow{0kwozuR%p 1.$FA&W8n=blz*v+5F ćrx ŧ| `<І\Qa7T5 ^A5As(WQ`Z5^6VcaabPp@NPC7UuXEQP'psa83Xx4px$X<9|Pz=C@#17py-H@_hWxА@v&DA4X8nrET` }6:q  g7# 1X⏄扚`^c4_%ױBBsga)WT oP 4$DheqS`XƄ&0*@>CE INy\ q \s` }` hyps@<*o4Њ#\"_>0fHpȑ>#{ >A$ % 0Ș7 m Wi*]Y5 v5\WA}@`!r eꀒ` m pqST* gɨ4}kyU@@s0Ph`;i;+0`ٟA*x%(WA ڠ mg 9y !* z vy'Zcp`g~y0 䐉#ڠr]-h k <pWQv4JQ_![*pq,AZXWb8:9czrdp͒e@*(gY` i HH-__0e(]zv`w_xgw$pЀMǘ_("y$3!J|@a1Ěg5( @t.)Y"]v y}/ `K{p HďNaa}H{B=w[!6,V`}4 wm*<=,DD`/`y$@PXK$`P sGFmpJ}4xtw%AKf@@Y)8%,梎PuGw'y` TCi,BlFwA)PgA AbU" [ ^aEzq`+~Fs9wX\0z5AI@HG:F`xht#+;cHSHu =֏K sPؖ)IU;F8DYȆ~97 tw`oȺ_uQaBu%ڢEX^U_hQ`DscP wd㻧2 _ ^ 'R!]`؏7GAch_!H4@I4=4cb0j:wzѨKZpsp 0h9 Q\$:*tJzD  xNܭ=)-* =7786z)6r'ۣjLb {@8 w |頬Mli P^fuY jZ2 2v1lwA+p :< sבr*H5D :<ƫ+Փyed}1WQ|&*@2[773g( ¼&Ŕ]52rE2b|JQpE(0NO¼i I. , 'AJ@2p3P 'q['v pDza^qzZw*3Hw\*$؃zu@ʒB$*(@ FF_00|ΡQ8WU(>aݷ4B [:֘ F&{k xX,"„#Q P ` 2b<8){R QktI) D6 0~ B `˂e $Lѫ' .>20 j:*~X<,7;8-4;dFuڊV7iAPUO FhIס٘bܝ}\& Fp $U=v`s 4qP `S`=TPs %yR])bP Qe=ys!Ȑ'Xڗ? rqq0 E*(VuXsspy@p_P_yQPޞn5Fc8W+9x$pJM~h&kM_1o^RHR[E?peR h}.t>Ե2IZ \`89Ҷ*pU tQ 7 ׵Ti 9 ")N8F"q'O<h1.k4PEoUF_fY8ooiʆZ\K1y$Ѓ}@%M!e2 e-X'cp_ׅl.}8>WO鉈 p>0c7*:H>P&ϡ.3}a o _.` `'qgQ:>(a%:oRr)QR(pJ##'P gj ^tK0.H|yC)* nE]5ݓ]iqK)y}a5.ݟӘ,nxQ_Fj(0P{:oa W DO]AN0C`f흡$ SR e%1dkJ8"#Y0h@   q0SP4FL K2d DA$"Q"AZz,^ĘQF/RH;U%-]rEGSN=}{E4)M ӝ;ȅ 'TlѨe͞= Ҟ|`9#&9I7ݿl?tM5Gֿ 1-1>O_%4eiE Ԩ{ݫW(:'Ƹ8qZS2:IrG8IBŪ8rYA /^x1{5=Ƌ1F!ׯթsu:r %f@Zza*Qt> 'Bڡ$(P-\C=p+<)g褣<Az1j=S,;>xPaNk<pxsQwWJÏF}MeC5A Y#{(T;A^8 <@E1qu`D).qcLt$Ԡ1?ljr< ֐ UWĦ24& Oq:)J1&TCՌu,t>΁?Hcp}V1 B٣4%4X%Qc?JwD$+is'Q{1 mcTD:aw0E:U @2>MBP( lTdQFmBD@L"d Ѐ{̃cC!<#";,"MHN5 ⺈_J#GeVPKw ;pZ?;4aņtd _΃8 ۛau~3/,/GʇxA :*%aG4uЁ@Z @GW?L@1@aH$C@1p[T"sq0$ki@1 *#Y"[$ĭ+‘J`#p h>rL"kǝ0l|'t;@A;9R[vS?ŮIn?9DL;HĪމNN!_~dﰧ D~ĞDw|p_(M]bȜ!.ъuPBx!V\ !`=EI.Lb(etQ'l0*fU#m3+ߍcEefb1TW\W K9 {-ww`> M9-:pZS}ֲ?ZՊp@qӈ5K*48nh)`(NzjY{h>Ƞ|X,#UXLz(2*CJMࢇL55B~k%v`Xn٫P V:=}|0Ea,NԉK0)8*!~'a]T] 9My%_̃9qXJ <@x)< <HhF\ʻ<8@@t+ 'y{튌0xZV`91=HC88B)YtuA8ACx7=~@k& !vw?uHdG{ʍ <'Mh{`, 'yH* h2X(h:Χ(v,:8,tx;0M HM]E4$(pb<䂅@\ *HȇG: S~4= 4|%Ⱦ#"wx@shA5yȂy4.J TK3%9S& /h+5:):yE)(́‹ s!R*2ɸ MM*Z\!{?V$ܞK@s ٨hjyGЁF'VFvGhxԟ 5ɬϰ0[Xvr@ȇZ J ?M;@,LirKǏ%U1 `:3 M!A|0(C '6 z@$PxpVd83<#oo+{ ~QOpaF(8sCބ[X~~h,,<08;ΰZ_ȑZi 5(^(ɢ6ekX@}]:rBZ@zOP,^ݨx[p-ޥ& vNl8!D04s Fk~jClIi; ~ȃX׼&㲨G5Fnar@Zb:vHGzB֕U4`BENbr8YA98[v@\y@V|3"XxqZnp:(E Rh&nR8Vh(ȇ;}h@-Wo9~ZCzhTZ 'wKvPaSԇuf}zC fp4ovspw!BNB%D.t <>(HoUKޅ]Gn 8%Xp,l9VxX*VZ젶$XĽgsg xA"Tyl>ؠNwhQr0pb~(B(LF7&e^> XFI?i C햾Hp8xWry62eAkY6`|8 hx'Ȏ;A$ >b%` o<r걢Ptc~8OxVc2/~ĥ!6xhp :%,>Nx^ SRx}gRK9p䁿0@(H.÷]!hjB NPf%i5fƪVTh?Jd4h) 0֠ W`r@i1(CaG #z !@-)Ve'92xOz#і݈0_~_؃7(cۅX؅烽_l'F<@Ky^(X0fk!Ĉ'J`"ƌ5h̚cm,ɔ*WlK{'~ًjHAD2r ՜))G{g.Ňntn޼sHO:04o4Вe/OO\ BCo˰RJ|3DTˢG.mD$beΈ$y$.B3E40"ͫ!ҧS^~ C璡P/O׬Yk&“.:OG~l;SO=]N>#SJ+]0xхgC#I"OTgEf9$M9샞㩔`]J{\Q':=cxY!}1X$VJ ?$YjeIxO?!}AqlW*]BbJwØymEX!|h."9>r@I#OwGB.yC|xbшFcJOR<B2y>@ ǒt3U$)ppѲe-k*ˆqi$,{#.1P:W;@ٽI.و ~]<1VġIt8ZD -2%f>.Q + A HTXJ $h?)Сp3sLT ATAOX*y `(E9RF86un")G-x/ h)0JPJhC\?a#yȠ" HA^HQ%쾪*eC {x.Y!Q+4Ȱ)V/&1`Po^d:r+kI?,*UF&G1"J@֡  uXH$+cE$ ML ?#sGG%qX h#a#)޻Ba M-?ȆnsΈp68@C9S#iȒGaQ"KIbtR}J40 +s4өA>\P?R qú2"x4f!9p#, 9 C(Ҁq;FF) Ej9Xv8RY PCqȦ>p;\҇$B,G DZX0.n.RXAD$0B 5!A"d#}?숶b eʱ{@KJt>XqTs㥃}z$"$Qr84ךH'O< 8= )pc9F$?(3<=̞F,I<HmZ xB o%WIT}Ks0 jt$HzGC5B)42AatQ?dvcWiCG;<(X\mEGr ™K 8\Q&"e@)_ 0 e)CޭO:4" eBC N <X5HC_Ӡ\YZ(B!VW8+hIGU1Bd9l| <0*(&(,0=H'P=C,OUJ^Rf@F MOg(H`6gJLiN:,%-@)@CX9 B0_4b"Rٯm2hAFPI)\ !8 _ \\2NB$P"TV(&D1LEP>?\WtP5ҥgydF2ajF$ѩԙ32 Ӕ[x~`G`W#)4(|elIdLށ)p0,H1j1tº E`F`nB', B4L=_>Ȳme$x1heqABAo(A A4mB4j~FJ\1!DTXy>U-&|I >6PR >PI'<ղqimWjQCD2 $:0*&dhBFh/zm.B$=$!B D+$Dn@%@%@AmX@ N @j5EP>u|Я|#?JjO`za):P8D1̰'3CW,D:8lC5|º^D&$c/$qWo&th.Tj>ľrXn$T@|A A/N疜c^8<ؕZ0V΢^}9€5Pj֙/r^,biC/H(%0.B)*f{IJt9A  "r'\rr*9CL$i'py+yv* < G2>F8 =7|ѓ#C@܈C1C!dc kHOg, *SB'++f4*B83OsNI:,&t FdO6e'. ,ĩlWDT#C>pѤT5"#;V&؃3on?rTY6Ѹ9*8&d|ydg“/*xetD-A9U4SF8DkZx*ĭ?Zc8 @ hYw?5Y? u8BATLA#TcLt秽N#z ?`PWyA:T h&$sroJ_6lIxJ\LCv/Gg/0/؂gRV^7͂wD$\4A  cA8LxVɾ;zuLI <·FDQ'p\GG@$Xd $c E I-=A!lфNyH?CcW.ג&> 蜼 h^|gEh:ׂ:CY5#h W @50 uu2d@߿vaC!F\hϞ|* )&AđM0E.]ƒJtxAlzɒ(l@%u (}Js&P=W4ИKb+q޿\dFШm[ns#_]ջ7;wgG}&VqcǏ!G,soe˕'7T5>qΘVm>Tr뼙#n9?Tm]:t.aM/JGT9MgMbiLPd\a[-+c"-X[T SNag 17P~S?ꙇ\ᅵF{˭ _gI*dk/w'GD9G}6[aQFv)|aɝhG!,#D1:ta,g| 2/!"L#ih}d1ў &O4#jn9LdH֡|93"nJY>)NϪ2ZW롈H! :VV8×t dSZztՕW!YU'p)|șg_ALsM7y  gqI K2Wy$5ȧ~]H!Va 1~Iv,fN4)䓝b(u[lQHJMgԡ"EI(YP]G{tV zIǟcҌ}!І~c8/cui#;X簨wGR88e緅1\7o` qfFgnr:g/cv\eu釜?!gxRsgwWU#JL*y?Ⱦ^$\&hϤtJ؟#J*^zLJwt|"$!4/5 !1h ^ uﬓ۱cHK:ф !ܨK8XEAA: AJ8H P #PZΈrPFg6*, 0ȸu]D 6|Ac |Ԥ pǾJYMWcm[<%Cw@6ƒOP8'k,N0اL|#(V%FE# b NF,gUAĎ ?}B^ o :w-N-A(mٌe}1)V5x0c%_A9b*4!Oʕ3.!C1!ZR29DɿHc%c(;Mt⿟@)KZTn3XJ&EOq/&2ɏGK8G(F"KL,A6m߰$6!“K >Xz&{_Quqq @58@~,_)%@ Ѹ3R8D>Б:bo!ALNlքXQ cZ~# Q EHgQ"*Ye:DxT6PJ#G-*U2t #&.."F, $O. $$<"!@+b3 #`*H Z.a5/ "p ́d1  , a  ^ قH aa$N6 `5I# ;A>zlAdJ)TI _a/@`!q OFlp!vc3ʌcA$% M!PO Q-,(zPQe$  `!  `b3(*h "aVHH!HXL$WƤHlD<Cd^ oa5n\vL A>o#:a*"\e3Z @@)8zO$K&|:CA!`PAdZ pZ)$3e:n1R KO c+B ` !- Laa7^&l1~c5@]*2SFObka%]8>SP1:()2j! ~bmK$qNҡNBQLQc΁\f+ccz5c. Ђ+͓BLc bAK,s1 j`눀  nz A !`B $A^a zA;AG> e03UO;?s$a9Q΅"ΡFɐ5=$4VEP/ڍm&a(Cg$$ amoJ!az2"!D *< _S9:@Cxpb$!a4YOf$)a<\k2%qNAA>^)!dnքȁ7sЮ<#Q1'!8*eU.O=o`M| >41.d[a\(Br   ހV B8 .(G Lѐ.e>2Iu/n\kG93/\",k䨰h^!>HTd(X!MBM$!J!k -Lee bbG?cA7F`S+(V ܀ܠX`n .,!c3,F-wBp !Fn؁j8` . @ ́D~*rdxOz'' eaIw_$`,. W ,!A.`S1^pY91vq4V!a!Cf^eʡ jAj/aAB)4@&٠o?H#LT4W!CQYa9Gj #K`z!:6Ka"aJ6& paz3CY[){pӎpį{@nzڞ&胑*!>%\7#'-݀| @|bs>&krUhssFM2y4&hA>-N$/ abd @B#f)b<T)pOeul5a ԩd \TA!0'k 8 ^~#"#|ALaMuW!2MզZ"`l!#Z[r \"nA6=A'nAghW(pSF4jea; İ xf . r T`8N 66,x7=u e2@ ܻE|ÛB8 pƴѼ=Z1͌fΣږ7]brAAd:XMd|bN ?ӮalmcYdL\2B4j!q rxyx WcA:ű'~<{K~J{H\ed@&M!^eW?,/Z(7dgfab==ng(;b?̢&B}a!zGo3l[߿{s=z$KڳGr޼f) SRkWΝtk%e̝kwݼ{ <ċd؇v޳kQH7SM9OK!9}/s)< !OS=@290Vr5)"H"yHt\:;!93̈sX.q2"@I% %dxj駕h&,I84e kG+s448qU= J >DA9ԃۥO2P҉&IjI&znb2*%υv>#O:#"'GH>+bs?C {TUHäSNC?w 1N\1Ժ 8pFQ \VO3:b$! N C'mbjjo xvߍw޻+K>?1\.[C /@H:I~bm[z.5U$P<Lr?P < ,9 ѿs{'X 2q"ǘ9J9jx; f |3 *4Ӱ?8SJ#R~x( $ 2ƒ4r A,(]ꪠ/.">j$, O IP02I^`{c f"B'9UJ, -8MM I$?v~C 'IPA?l.B>А? 0%X!# D?4WH)_pD+q;2, HZA)MȖ  T Ԉ84r ?2l=XQ dP8Q ~ E+^1\ /$9q,'Or-;ucdG,<9̡}/Yz=9I:AUHpukCɅn!F6(D2 @T" Q Ġ"=|10VC G>Px ;!9eRkR@ )A Y4-g-R=ϭw@.  waX#@)0(#xA~yG?#cGաHLqS-l5!PzA YaO$b&xCuCZde&#J*mĻ>c>qX"*E)<0A(G]Lk"G?lkf#?jXI |@ըEى|#e 9ъ7'2F2 e! % P'ɇdE0?u $`fmPB2Dq.#yJ$dX5<pbWZ5 uxpK=P*q"4!D+NOB>O'J}@ctր+89V}cE" Dxш7,HD; iX0ЂTri*s H,GN=C19' t dX bD&C+6of@(RWt!-P P `4av]E*A UT+318Ex$@ʐ5d@ @pBw}?fr<,_8A( EQ .N."N-p }dB4D3s0 3ӑHD~2b :S 2?U&BP\`Ȁ kgL$} &&+4v,Qt0rBƃ+ T@H<:331/1QI0H(970 _qW Ĥ4T7Q>iX 62: ̰*fȈ A;t@ tO Z8?!r&I9 )k %d}qzFt w FT PX _qH]a`0$_1q^f`1vGQ0)zp >@}nKjKD` ==XH$``p Q?v8-ԋ$bI:Ԥb.h6p }DxMԑ7Z6q!rf!US Y)i quy@2ː;(N%?q1a@ _t0 0=p ]+2` fyOO=Ќ@h y`D%3Y6%۴L%Pې 'W1: `([+BK-=  @ P  |k@Pf{1]XkK +=м,B  V ;l\Q (Lۼ/<;X1:' LElGIKTjDBd9 :& Ф  lIH~9.DꟅ081 2nCS1QA$P6Ta W"H @A\pL((<-"@!;H#6]`%t1 q !.qnt|&:PHL7+<藳'nPhLXiv@4hc'vTdL";:ґy%! GRd& H, )'GGJ!R zd@F"0 ;#?vdDb afBx` _l@,pB"}@D$!~2))r$8IqӓԤ%CK {$yu.$>p8XG& Y">TO6 &dPc#}ĕo9ir+Ԡ3A ԢCQG*!ТWA)Ixĝ4g9EH(M:G )ŽI;Ўxͫ^:q $9?ĉ"{d:ǦȬ:ұw@?vꠇ*(;eÌ1 R"p  cf l#rzWJ ]s:t:w==V#d~[t1 " /#@AsG:;~`G::a(]* GL8<R`C+8$8k6Gl.H:\atI+ 8z >ЇV+C*ې%?W ==.T!YpAX0gπƄ[2iH @F>NbٮIsr/^W)bNv d.=~zá/l QBD Qu&LA8G=1zIrяs49(T! 4G1C0KB8ܸbF,ox?dv5$D`/ ^ TB)yc!.fMYl\`X`m':g@| 0##7A iJ_xWp=hwXw3P nwňaWGJ@cqd8tPWxp~V&l ktPĀ ؀w )GYg d+ bG 8@Ճ@9&ɐ*ِ + 8z64ir|70s` 0 ˠ` "LٔNiM Nw W 19l?U0 ArL,Ǔn)}e+Vf;dvP)`H!i+0=U fT!hUp x4f 5 W ` 5K6I=P |p| ǀΖYy"(YP 68 Y=1TYuW4T` 0Cx#dh^\rK{ƊiLaG`l؈)iᩍ 0< F>q~( <9 z@K.(ȗP 0g@2zhp U~ԋB0 * w#$FR d8 Seoՠ_Hd0|`M! I0wu~"x3Y _s`I`N^ЧPwF80~s`xj` JxhA9y< eǙJPP!qH`Ч`p\isp P .P£LR  `Jd\@9p**V=ePt}J`~p0G9!vp=PBfgww~J6Wvt pG&Wp9w/pd `w )@+ɚL8UBJ@cwwI%*E[% G` P)*Dp :C+0 :p ϶i]9LHmP+@Z;w3pO@ \W]yI )S9^̀ ` [ up u_ ;  z䋈ȟwePIbWDhGg]ꐬa !}?(wK0BEr}axUp$[ zPP @p U |v@Ü{iu-R`@gLyvT f?@w$٤Y"H4餒On$LdeO=E( ƟUBM҂[BTGZAF~(Eyб2+UaGHDcO:DY.sgsdl=|ن$aSg|_n'V+/fi|J|K1Ch Lrغb\*k)!"4HeHXm4@#(hX!*H= $dUۉF\V6iι\)dP(9L(W;ϹM$~ԜjaNgb;aFC(5&k抐5y\Ʌ8٧~ g}1G|̡7Gsi~ vÓ:Rj_Zg4R(N0'G[!c'ih }`yX-3?yd %_1R~H#B /h,s8 7'h? ~OR9*ʊWtN2A̝r>/#/9<ȁSx~( k(0<_\a.ě_;r8aG<ΡY,ˋ|A܇::(2ufB4 `xC)B%3vh9PeH|ۃ4QҠ"xN+ rBG6Mn! )s%C7`nCrBSutsy/CBDPVq ӟŨ6Τ(:o !pAJ=U{͑d8> @i8s8b&E>`W&1QR9ӔbH=hE>eQ՛u&lce8.ǬgJqAa `0Bq m*HjG= 2@"NA+byRa3,@  )h6"C1@XbyhLa &pXDB\6׹=O'dӔ tpkB q5\ o9.ƣ, U!YzxHc ,x p֌,_eg .qjE]ُ%@ ?/C>det<tэVhH e aA e$ DPqo(k@o<DrC\B3+[D$(O #4Iuc!xBWP \`xD9jУ}f.jM("$4!4v#!GZl99osl@eH¨U\k)Ux MBӵ&h-BqNhO#@ : 0z1bjoGa-k/"؃2x#iJĞ|kXmlJ6/ی1IȞYC9mhKR{*ڎ/*NUuZ<#`C,!+c(W)ɩ9ad#֎;Od91 nAzIA=I57Kp/4'c:a',3^ 2S١ŘK ?B4sT8pl j0 WH9Ar M;/6Έ, F "HC"7- `yä8hy:!OLK~.JYp)#ϸ wXMJhO R8T@K(8RxCP:+b@( *Sr}vqX/*7 y@hp * :37 XJ9Y*@Z8 UqxpȇX{Ox"T`2J3%yV|M I.<>>GtKXHPC*x !x T U te82tQK?R ͊@}i\PA)c=2⊶90T31$SxˌʈI4S%h؇qPG{ZScs;d8A):TZz v)sؖ#{XHs[5T~M;uyP +P+@EY>0O.q-ɛ)H4R"xO"H\|pV  Ep:]`e۶e[ #v IK@V| Mғd ܿ]L[mb=8޻*<9ѼݪX) !s> {@Q, I0 BA&Bғûw|DW|y;݌=K3 t[yG7ًYHUIT{@K(t/H!.Ipˁ =IX{ B8y4rծx@رU>zqZ`H[t`\\ *L[b( [Ј}Ȧ){7J3Hݧ;4Kpp;`W{̇~`2 ጶڔB1))cYsY~Ћ)1@y&`fH YY+u ̘Gyȇb#U97y;o_cz c2`$OA՘CUpv*  Ĵy` 6 XRZ-C@bXL.h~H+H adyiYЏ`}!8QdTƆ͈k97)+:R~(QH4HT,އ*)}s{_ [~IzxԴ8c;% AP" a6 !ŅDAR T~c櫀MNhx|W uFRdJTC4(bo{ W\fxlkٜY01J|VؘjX +9<2h)fW_e S@DIH֙}h&mI p1(x)I1AaRcpU=TߘF%ݮ%ZITE8RTVvDPC?<v73 6Ԯ^jKRI$7 \ sk.cp[HWqX|؀!C6Vж$0?o;o9o<ش> z-GD`g.Ȗ3XWYNRk"si(hS:z~ D~^3oz$ꞥHfIHBiجF`^IMڤ~hJ@`ƦS[oL :H?w&f&FǨw.̦hD8iI^{H0Z{H+^>-{R4{H8Dg@Xy񨥓2*9CM OtzSHF=]EWIZ7d?)g^ C 8uVH,[ s`JbZ.*|vx{O_+,}O&XvX];M"I)o#[a-Q|؏s .ÄDpV^*3Bݲ^dqp`HxdxsV |;H=*ŕFPx@OI((RYi__5=*A7/s #kZH@C$V'؅拐vr08HMwD_\ws@^Zㄢ)&[xGzHlr/~`v9r>jD?R.(8L8ǁ3^>9zWd VhSag[SJ S?,8F )Ȝs'ͤjcǎzڵgϝ;"Gr߿|H#{2gҬiH$wyPGnIw73ǚynR cyZQN"$ARy0۩3_mEsֶ3d#xRe9SJg`¢euΜ}eK}U D4;uVUkN3VyL!;)U@Bf x<&%hW.cbrw6p>(Տ:$(v:HV?vnU Ha 2<#GÑaI8( a|-w} j<7NMSQ?9Ҵ֏#|ՠB}E\HÎI9?#][BN"M^(%TaְyS>0E:+r|J+^8B% 5xMd+Þ:tJK+eꨇL 0DШZ!xy?nd՛ >Zz1XeЦ;-P39+I:ΎO9?* me#M=P $1G9#HEN,qd+(]!C#9?&hIBHeNZJY:xc$K:F-o+ԑ˫vàѳ7}MOށ fU:Djjf]fDcNF 7[.8;md=*JR>o)$9P /Ԑ;$̋;gO<~F$] ȐF?@78O(Hk$T+`QF#SO{OXBOo}\b7x$@\,r-(D/DzV1ujlqL8:6 e؃E,:cՏt@[=df)68la\ ("L掴X׸Dz|`%3&b{(0gư&СtFs&v<~7OJZIG51V & 9B՞|Srp+h0bp#Z)D~ H]?aLDa|hې r,M:8]}Dc>PC=ILSKX} E nH/ 8)),G=lDۦ&Sb۝P3a=+pj,�~%!8,>p!zʹ2u#3R LxCls7[=9=?(k^C4%pkaYO\9 2aA>$`x!B\B9 20LMH8F$rLI;\W?P?C^G4C?;H[=ONmH$ @ O.[#Ë5 I3|v& "UV j&$" -tƍEiOU5GFfp'Tf܌FV+C9A7T?B=~EJ0^!'ؓ_\A+T _D~Fq9THT< A60ZЊL;B\]L'CfTDBpDUu8\5=XL^_UG^H ![ťtdtOF_ *d$~F,?ă7ݛ.BH1!HHHF-%hB'b!(&dB'">>(vb]nlj3%UuB#XU%vud3(/hIp&`KI!pB!C3|^&endQlf1T^X;hN @L;CFai?H\A7@!DC!AfC^MJ`FԢUM ySXF'um'28B_i}pDאT<É,'I5p ۈ|YXp *\S %,(&(h&j'l,2LX_ffo1 ZUF!4>֠CfL#',^B7DfYZI%B άBh,*ɖ^4ߓԣkhU%IC-CUq@r;D\4MWwI !tC0--6D$Ǯj0!B6@A#~žf*!2b.GPIQR|Lfb8TN)LS|%0 RXu- "",Vn%6<u\dF+\%¹D8uA:#RTf\Aa'?@[=9 Wn$W0pHo)j&B!&hnbB'P B7TЇF\^t-A? W0-Aoz +G83E,2@<Gysҏ9<p%0?\1͹t->jpý1B%%+o"l#$(EZr?<-d@?:Ǐ c5siJ\AsYGcffCIU .m|L @"i(,a%?Pf|D3B2>]`+=K9WNliE୔|s^Q N;6t.<44df;D@Li(&u*8sXLj^".EObs|0o`J9HP4e)\,Ä2Z-hgqصhiLĽ=NflhB$T"w b6"Tife ,:4E1$;hz|(\2'd=avSg vwO4_T̥lw` cn۹x >tK@'}& $#F=u$.(*ꪶ $8AmhN7f6 YJ_ة$J MDO0A9L2Ƃ !T2^%_j[$H8P 20P1.A(yîCyht9DSY3IHesT'誥L-OrKp?Tbe^ ,% B2RKxVMIz.'Шoyrw.]<B|Ri'xnI*͐FfS']>Jf ($H=TiezyD_/yit_G:@%c  ;]uDe?BjьDrB(_@DB>Ԣ!2x%jkB肆:}g##'T< e.\B'7u2T?|fҸee;EJB*8<^ě7GTw|b&_Ӄ99C9n"CjF_^B[u N{F}==u}=+[ 53\\u\E?>H7C1(c}֚=H6LCT srƟ?C}7>\|g0,{'|*ff"Cq+\D_LEf&\4o> t>)NSW`+5 G |(Ʋ-3{yē+0-qǞ|$pX^ȍb[gv2凟sGE(1P>1&NInOLdJ1fN*YiM$Q!Hb:ʴ|Ea'Y45J;^HxTU!bL0фE"D6`8b!ta8Mn:`tGꩩ Z뭹Ϣk8`텵s͇l0wN 껱JmrGK.:8sAE 7F؃y[{hR9O'3 %W}MUԤNXA>cTfO%lT1Y$dN&L$q뻛vz+h ~N'¿/5ya~șGLm>nIM'rr4D$*ؼ / 6#pGAmEr=aL c0"G;r aCLd&F\ :c>Pm,3"7"eKMDV8\*l`).A\0e,?q7 їGP.?%ͼ,#@+Ԃ\㏉P##I1 _XDa%zB*@a-H0^(Q†'4Oze? 0U)EҸ!\$\|lP?pXu` hEqf+p ]u Kbf]`Da,N  PPBD#8'ʱ1ԴE1Q޲) $30IM. P(veWXONn1)LI$lgFrICq {P''\dT2qn?`FAsЄM cl[0-@0zS4s63MdD%(=Rg99kN& Al"#ACg$YrU |ЪiF>> \IMp«Hmߔ8@B))&'t؇1Jtb+h΂g\0p΁KasDIK:5T ] @% |pg|4zafb `C68f>Q moW(eC h9oS*XQn\dؙn Lٶ#$MNL2"p-5уdh)4| T2@0(PwDYmR3t䃽*t9M S<9xe?d!\.Y&\l.TAsMv{jLQ " wJscAo+^(8"8G=z &%`X)J*OOs h' Wb4zbt> J\7,dLgΙ5P̣>L/_H,֠h'7l/HWՂ &M-?&Z%5Nk2t6*!«`LC-́>3&n! 6nAt;l&&\(n#@ ݾj |l "Ik+. n^a+/aTynda /AfB(;$zf8 .4V N*Ԃ.~` .A|tB0h&lnq\R VAn乮;9 GC*At'=  0!,,BZp.@ d!1n`1"o8^ :Xcx*XT;p&PfEiI;Af|c 3Ҿ0&PjyJ'A-] @a!BaZ&ad@A!L[pǨ2?0gh a*E8 ,nTp z,Lȣ!%#A![n!όl(lXdtAÑ.q6% 3<^@WT+BAV/J<* ` @ 7S><S,$=.>"ZJ~)́!#R Av8GL,B`e/aW`I71k,T7pm>֒)X!@\0>!@z6a;\I@ARTѷKe$o?0/ RV `>.Cq(R . Z[őܡ>s>B># gޅJcIn*hh %?$" b(ZRQeZܖI,QUajᤆ%>UUIJUЕx ŏ0_KhtuV7 3\-,R*g;c,>a:x9.b!^_FlÕ ukQ0" Or2{28>Avaaf r-J8)<!> VW'GJۼ &Xy q@$a@ KAԢ>xd5/ 1͆^$ |0.aNT\9!-,C-[q,&B6bd@ȡJoRUgVkmb%P@L65pjHD *]-_7`2A#ZΠ ` l!~$ / HsVpc$C@ QaA >vл$?J`;Z"X8@`A/d $/Zi_b`Tsjl0#8pSVb  IػvSPKrGD:zM(h.C_RoHkJ! r j !HTUfśsBSġ_pKԣPĜr#^%T nay.׎WȥAD S$rAvz$&,Zz$`.A@6 ,ocX/. eNJ}K Am֦9/cРn$5gsYfZ D!v: P:xVPr!V РN z AbI43 Bp5`/ |A166mjV hPvbs~@r[(ЋC+)A0`eW%ph@B܁dKKgr#x.T!7%W ,A{%U",z B B ,!   @  .. j<-R @DdNSU l{{Qͬ$v : ;, *ua`1V|%k&c:D#DР-r`n %0ԙk-t-~@c[)%W@"d3kaێ#\%o a,bn#|S#aԁJ$~&8a) e X&P>R+vn#cyjԢP`F AbE($H dOsР!%KU^ȱyڵ2ȑ$K2ʕ,[T_+C]4K!_ 4Jw<֛+jԈtԩT:ANu8RW)QVFtYo%%q Q|IKǏ_5lduڄ'Y̶K7axX un_|X%l\}z%g 7yRċM 5/rHA /b-_:ܮ޿g|ܬ)>hh Ds&J4/ Eu!FdSaDaIDɖ9d&~b bI' r>Vx<9ˀwF4W:x'Pa{35DC 8%Z:dneHF! 88Td^ՃS4 5 aU 3\$cGiO[IO|H?SN:TQ  ) gvz' )LAJ>+JÎ=d{HtM9TND%Q"?6ф>xEZC%nz >P槺U(U8?jMD?cY4lӪ:x֎^?xҏ?nH+CNO+rxE{39"@$ T!HXup4 YBp$%WSrb40P¹OLÙ:pt?EPb B!MtD8Q%&X^j :   ^R|5ӕhx SARr8p hDJ‡# HJrG1df=]Td |G%#ISRRvB7)g.$+o钣=h')'A$ՑHDb\aJD56&G+C5P#|%,$iU#<>QN {#Qšx4 O83GCGH B88H B.0S Ax:i=SbG)@ZIr+)1*Qe|b&8!L8mQU&0TPDzI)`<ddJ+`x?|goH*K:T CCOA8! h% Q*K:,4̣g YВB6pc:cJLBZN|S˂=Lgu/C bC_Œc8GPNza/iwI5%aJwJ8[Cv@F?A?:v갇C 7DYHn@`WKa0 v_¿DK8lxS$ C.տ" Hu|"j脇JUi<#~Ct ?,{(=aJx̣\)kB N+Hа4flB*`; a*ٜOAsGݓڋ'趕VҲzp;B2788}#$Y&Hخ X=lg􈤳Q[OO?xƵtWڅP8B7hC2[{̃}xJb6:=@ 섕:=Y|_+{ \YKD}'|roU[C8E0BN5Q-GdpO{gFPqs0(|[r7DT.W s)3@9 )86[Dh(y9QŹ({Mp%ً2p=^ $e<bTV@XHq rxtP3po3爅Q[ol0%: OYZ'Ob#6zt d(|op"7wp@%P2]+5{O?2?[# D붃7&T=e8{' k?G{1Pc@Ota hp$.- d $tR9PSr4\ g<4WR/=DpD#]i)sBe -Pq8T4ls_0 钃w 0/N \p*!,KwB!1Pa9H P H){kb3%U t%suɘ IV3` ` ƀ !=ȰNrZE2T 0tV `(A$@p%Y3g1 3Dtwb q)y-Q<# 3Wd@9`c93gWT xY:FC0[S$߉82q `F pr = qpy:s)snEVauy@}K)m95[ч ʠ^a%5"s@UN0 %m[X.p | p _$@` ހ3dE3c<~ $F%DʞB%$8+)x`L~B@1XW?I@|÷/&1#<'Oa3[ ]G\mWy;P:P`  gW 0EW rGq))C*&3_1ޅ _b=0А׺++q . pymh<@99/o*iBP Jp-  w r,`1h /.J/ &<*¿ ¿JkΫ0{|5y` ABn BAQ0–Bw` >Cz.\8vF >`7` 0u@ Bs  |m1pKF+.]7@pP^Nz kX'z5S ܊Yyu)'vR=:je+țU{pnjtP. 0>Ȁ q0 sͰwPA80k| +A?au g0u&H+0,t5,:"J_j(A?* g"()@Ry`h ?_0>[/1D"mҋ:PD!H8U $~8~*$0"@=1aPS^3:H 'gbV1*$зԣFHHp {<*qzq q z8PR ںk$Gb7HB z;~]ԄIeT$D!$}f&53(5A$وαjPxXK2TPKB}0(#@B#PA5A d:ܝͮ d0oruvou0rdܐd75-W=` $t kPL9ld {D]N@}v$gp HN)z=P+p3}0Knܓ Jrk_:N`);zq>>ҔCwBҍ$PTBm sP~Q$@uDp3y0PڥB J5 :+wmouV]6k3?^ȱ*ә䑠T~9pNË~'G_G0HO^>u` :@ ͠<󗅢p{+qsDlc(@X25 d0C991Ѝ(o :#rH =@=@O002}c ;Ч H 13b 9TНfB0$"5 z8BR?p1zG$oU?W J =SЀ* .'_P<)l70  E? y.APUn`]](0]t&m"nB'9$u=d@]P p p #v[w\@p뼹@2DK;>}@ KK6MS9PмuaB SR5S5i54 exwA .dذtbgl䘱ƌ8o^ U9)ZOp nѹG3&ܿtNfJv c(Z1g6{mjA,0V K'>Trҙϟ~B+2kdA%yb5ugixE-%Q<8,K(. !!nFb62tj&!;9gTz*^vP DW2Jqrg`:a:|<(r>| | kHAcV萄M! #j`dtP@kiG,]׺KIXg˖wyA dK݅W 0!㌼z K,ȃ>,AcS ^ 8ge[vGI#-d *I&# eٟ^zh^]f9}!=駞I3Zh?| ;K/U $ɇ{fzav~ÇP۹ğyx4̆[`iFPBv!Y{*8DF(jyW;[>?ǖ@ "z b*]'{VZ7e[K$zn]:;1)ZFh6)?})oDJdЀ8f9K 3 KAx@@"HG;hF''e-!$rvl;qDb؁?ء8$0a9СgFt?ZAP4 nf&` 0Hd5`?D|$(X 0 UM@.:4vaYb0FTW3 s|ǜhcBIG# 665%0/DabD@&H@CЃ(LaKU7B|4`)sv#00y8 C)-&ΨFV@p04PR'ׄ(G6Ơ`'?F3 : r'QzA @GBCx.M~K 3L%D%c3!)HE*H(#yb^@+(Y| $0Y HP2n2,Q[Ԃ4ăfbUb,$MLLIt p$Ă9vĕh Y2#GTFYD0HL]* @]ejgi 5e@gxW>b?x+&cW3,F&hUuդTX- @I;HTLQaB"Aѫㆷ 4Ȑ$C.1Ϙ2 Vg'4TM vYц @8m{ "d6:R9YT KI5Z\8ɷ: |8i )g!,pX# M * gA84Rn4a(ZSħ4!ı) d"Ea}2q|#&h9(qLG8~ fiH7Ni~G< 5gEj\cX}eڨBa |µæW L8sKHay *D5{2'q7y!-ob]2{jܦ`_<\'wlfE.zƐ:r[T>HDYZNR\Tz^. ;|PM;3w#0ELd&0HGq2[P@ 6Ogdis48H3G/zNJb@̚<1:)bDш+MA_- ȇ8``юnxǭsܮ`eV!ywF%/꧔ ňL8ijxF/i=#h㬅<*qs΃cv#'_6Ds!0i *@ yʤ%KAJ$$pO xĀC01P<]8G;Pˈ>R2(PhhF$K髦<_`!2Gp1Y2c2A|!+A;<B&lB ڰ ~YXAXJpMЄMNJBLp(3!*ڡ>;XEهqB&á|x.T(@ AZ8[t4D[Ԛ?$| NP8Wc\FiDRi5sXzX zGr,r!4V8sc sGyǃ]Oq[`+ĄNԄL(L. CAVЇ0/gy`1elQnD,*Y҅}8DxC+FgGzp-HK@S@*؋/@.7< !HSk{r|8vl `R:`a(PILK̩ ʺF߻sDyt~9WPb}r(tM\;Gy~yrcs#;EB.7܊u㣄NH4HLBMA}{zzɇc3ȝݡY ~9G.w㶆pw\pr8@,I<H"SH#8Ժ*)[B/Z(KJ bbA"@yZh/ =\ @pMؔ>S s$ /ʏ_jx+69 ИA"%1q 3cDTȜݪrs@GɼGhIOM͂N,~䂽|ѵoH984@-H8j|0hR$LtP I>/x J-ٛZ8z-:q<"…)XM#_<]WeUV̸VzKRx$G;-:ZrzҤeP:)`Srtb]WrL,ȅ3ǂl!Ht,xүR0|\-TSeXMNX'0@ &ȇr:87(Z:֯=KAXĄ|9MJ~yЅ W}ӨD$d`ĜrLIem}m~ A+e(gKrTPOҤM=U 9rhdg=V M֯b=حOxN(X8A +x1hdWTP_Hex3@ª%i_]@tMt`.|X\lEuЇ ~/y.;@FZ &?$?ᘁ:TzL K丄z0|40tؽ;ڰ0؃:8\&X|AIV+nP̈[]"(9G`'F&:},4\XA3tVyY/e5W;<"Q8$H`%J3|jJjQx*W d.n2& w py%4?)rB㓒ۊ=|| d73 rp!!X`jrPv8bmɭJKN`?B:& uB0 ,V?ӦcYZf.l O JԈ|!xȇe=|҈<7Nf.؂xBtDy `+X V)moɁ%RzX~Dd >8hR>HA4MJBJUs8B IH`]f^f:)l h t*lCx3DD:)%ZȦbxZۥg^A8&=XEn"ۃ=x%֋A:^2X&EYKxD@< v&$:hV`Ay{)PFa=SFLHas80&a.v4'N^PvJ3$9p"p?" IĐٞ8u6@hFC&j&؃5,,9oj+&Jܽ+v]X0\ꋞBp4 p%J"ȿLpZ4`?apCу7X] HH ]CHR=4hb 6,3XuzvI.P+DoPXM8Tw8s4AHp‹ `r؇~@;8sh҄]|oRiR)P@䂋9ȃ(.H>3 v) +~ȳΐc:x*إ*HXk_uP5A]"FH20= gA&iBgG^MLSL6O) gKwbGzAQ狌%4: >}UY&Oh93R@Ks%xXq%ctQkXJcE O8]H__Î-{Ȯ]e8ǒcȟ촼Z۝mϮݷ6ΡWJ/;v߃gx#Av T~P@aS~$ 3#1`I%l O{^z9rN<,X{?LB3 4dTIS1UED, HDF1GOp@HQ<|AHXi=RG)(g<̰ FMp(kZD[:3?N(OceΘHbzʩPYټ? ݤ93&$c-`-2"-`1V* #vB O:\)"q>∈$~DNu+kf;C90T%E UL>zlqH?1 /Sh p PR$G>p7##J&.UP2S3@CgR2ݷYnp(Z'ѩ #c jXxvH\{|i=F~< "K%$O$+ (.+K8Ȳ-'Xiut>䌨SERHWm %M $@DX٨qDN9HoHM F@OtR<@&)k)?U(#뜣Y RQ,Iz*G>㍡&in}ӐgeGWx:6 6wS Y Y-n LTr#Ltp@79 hY4ŒU{q@[A H2u8E;x)z0_R^B)XNyw8CRgǧXnG6B8hqG $|KtC г-pt)cX"~tCD_C9R:l TH$NITw0QP(0x:=9D{~N4Pլ1OqxE\zn:\bT"-\C7[?`#E_u|3a?dE;94dW>"h[;x L/>[,Y-Yw\Ȏl T%\?@XL @ ,lhĈhHN:" l .\D_:B>VdaC-".!ެtUBAC""=h#Qb;PF>lKաp"{K.I&ql6Y HοF M$=5LAA$ |$ %#P|c1 AjJEFF>'qXH5+$%rl^ӌ94B781D4Gڝ]P&C}P&/Arڇ1ԃ9g>;-Aȱ3 n X\͊VC(8Jdtm)WN3Th@T%;ZPg>\5E`AB%ZX %@@X[@B8f,E VdkFW0A+H?H(цp+΃vƆi?A#B(>)}>x ,VUIB`, jx%.Dp3A+6"CF}e㶍DžS>CS@:Y $yzil {xX<"E A*$A <`YXBaE BR̨A*=zlHEQltc>J+J!Ȋ?$PpܥlDZv 6|/2BUEH+B#B1(BBNTFpVG`ؚC6]A_A.H2=;IhDOh<p^)EeBY@YBA`b AP f=0AA<-(c9$t.C&*ʚC2l"@.%R/I/j':)A0C>hľMXCn% ,D'HX9 4 [Xo4 0)A!.7\ROvC`])@GPpBDneʶ? ]%CbĀg@/;>9XVoqi+lC5p#u;kGʹ&E1m[#A!DCU S`ʕ:C2\($CT=Xa= {X2xq\Ay3?$s-feC+d*[F TLiTjHO$X>kijD{lQ  TLC?= )556$ʔf )D<{c>3?3MYMZqAF=n0=\ed B6^'Bs3=;I7'\'482,\H`NI\U^FD^}@ 8lH$N_+HH;5S?'5X?ϓ'zTWLh?MMH5B(uй]u5\ux'LC3C4..KeT?$zGt8 IXedE#0$) AHhl/HT7RXn[vxF׽ĤEnWllpLLC`Wzd˓-vJNH*ekV7\Ax"k Hky3n!m= !I9p%D8KCGZi!:p?4>J͈EL)S=xo8CrĊ$xѦS7ZGփerۜ܊8lL($mwozY~$oCCK08"TO8<105T/"Xl9 >u k >u|&cBbvSe]JC8L™-?}roP9g?4켆\hcS迆V"U\_vg$Aܛ6$LA?#M6:hI@?Ϯ&rD{4xav 6LbD)VО=v$ɇn†$yajD@?dA*?!QhPCkP|8LDjTS+6eN]NdvAI@I2,߼zTٶu+ҪSX#(ֹ}ܹWn[9s^?wT$TA i+Xt3f<^jիGWmܿ;f8tnݦ ^k ޾G."E:xtCg n{뷯$3BR |EU܀ӝ kamb25|@hg ťtsyvU]wm<"jH?k>6Ϟ6iRL\j[0ipb@eae(5hH ^^r"H┍2)+rV̟|9tV셵W̲'i"UYyI :~HXQԱ:8F "ŞyL7m@E;M{bs!?ѼL)=gIsՏb0'MS5vqX 1w4\^+VrŠ Ls Ȩ;і@*Qn?,4C(!q@HHHST!hpC 3| AA1ߥQGFVt>,e}C>B7LԲ'%z1A6 x!B90MIpxUe8hsȦ6\qHA@!)4 \ki@T sEY^/{?49=plytwYa .=A 8tLҒtd*ه<΁  @e'M!2J jv$O4?p }䩐$Oz"_ CЇ>9Brf43}0HE2\Zd/ p3V[i/C,*sh%ɤC- 7B+pKJFi!iz3utطr31:4wEV``Z h_7g{  ܍AJ it| H&g;Jl1l_G5 ^3hPqmT0KpҷmwVBiX+h<%LD펁$>&d'|f,%W@×p6"Ƞ/FoTB1,:h>L]=q*HB@1߮{=@ׁ~ nps$JV2U.^|t^:ap( dFѤgbDZBc} `l)L#O BSBPɘ,*R a)^j ExC.MaM@F!8Hx ҭXҍ=b@=$G -:aP(6Aq1pnI`ij   . jƁ n@v`""Sc\ /B8@|v"aMT+epVȡ.D^ 0Si (p ɸj x/ada Q15!6q"zf5pc,n!Z ,'ߨ' !(ď azP QKM `%pA >L7P$@bz++RV 8΀ mވ rCF#'wi<"!:A,rhҡTȺ%B%@ !"!Ɔ"h` !a*#gⲣV3Z@ a g(sQlr/dR6PaKJ$+{@zrݜ2zz  z`V ^@z@:)16 hx"P$DN!>A,1!Q<ǓPAڨ}R oB 0ʶ-|! @V:wADiB'@@_'/V/΀ G2'"0to2rMׇ"=FzI !-8 Gj/W+AYgC,TsV MF b6xZxYm~BSy]Oq0(\09S̈!*04ꁫA^<6NV.$hc6zi`cFDyt oh+Ew Ƞ*cV` bw,?&0@b$E #!/B%nA*AgE<70.'a t:\ɔ-T"p chgz A$XD! j{bX!ҁ ֠@dYs`pơu%94A߲D/*g"Xs!s@A:Сo:5a!56"֒4ZVTv3a,Ѐ kȡotk覄 ~. D0neWIU`k se_ch!@( ^L pi[ ֠ 梡 tA GV|^bB)V K8<7,dzYg1Ad(8Qߴ-^a&qb!AԥP#f@'mCP R h4l7IJڷ vfVAnEɤ6 Z,``~f u% Ӝ0՜A\ |TAnn5Qד!P@Kf?Ap72D Z Ơ_O돹?-(ab)@!_yo.8p }7Zf:z7N,(T].v"=($z6G{ / A  Z! !& Iv1da*A!n*d>A@AׁkXFb7%VAbx-DM=n#P8G%h  a'4]|f`W;T|ߘх"ȮZG`fLJ ʀA n= ƀt`K) XPaOa i@ `{==u]a>=w}דx IS&Me/]v#JH{hȱǏ CIdt{߿ruhɑwNs儘s[ĜI@3f\̹5^8MǨvT+[ћsm3ZwUG<* W`/_aH"d@-t+ ln3&R&a[+l#`& C樳փF(f~?4bWO;QO< P>S$c4 6?ތQo@{O;j HS9С {A=$6b&O?L6M-1s - CcNY)TpYfaF衈& =O:h@|p>Z6&5аba H{׎B f+S: @=vOVCSWaF kg?C*vI%Tr'T # A(I&_I'|?9COogdyZL-WB=)SSXT(9$ݹFAV J )С~&u)2UK )|?ъ3Pa* h0&:'q䄻aqHE}OFEϬ`  ATDBh%| # ^ؑGƙ%{\^v U.I|1=VM@$A0A Llb' L dzk ƱCJgYcX҃1n]nµ|HwX9)5S`,#QI5qN0W(%JGԥҭLg*&>5b0 O|`B00qR$1bǵ # f91j=|@Ԇ[,ӊ`]FW`Kc%ZJ!(#/#`1+AK1Kiؗ,G0( ` XZNPB9֫y?ASaBQ!o>iCi9aVCCIg Vx[WF䄀Ij5D"Du8,'B$19|0ŀ34 P|ӶikEyG$ gb P yEn= S@bh@C [\BnFw"hO(̄LX"m|'@D-zM.UPt&39;WoAVaj<{o?3C"cYd(ލ_(r 9ʫXLs(D]q 0\bW;&"i,`xPFpĴp+)m[5N940( UHK E @ H GC^ hvӡ]I:SeQC+&?c)2>c"p@gS1VR c`L.13U / v3!&zF%i\0N2W7&hsg9|yUPG3hG=bjSfxhhxgQ;=BJv ` Zi؇~k8,"ŀx>zHo"ar0 w_ko' ֈ}xZv:`Pe u W퀆xNP@u m7k''dCjX8R@(h(4g5؈!2p%y@'TJD| }EGhnh@)Por(qBHa?ؐf!+uk6`UqoiX~b>)9! Y+rDLYw T[kE"3#` "4~43Npl5w78q1Ec ݕo!{gHHHh5g5Q<Q8z)'$~i ) F $Y~:pxU:RP'b i"yw 5Qy|nV kp: ωV q 0viav ' mX^vOgZT9}(5R?@0G@]%GtBGE ]UGts0"W7lo@Y uqUP 2;d$Fl \Qgpp?"J A6Ee` `ZL q' wprFZ@TW 3fr$v {<Ơ ?`j+6mX X#/"Hu|U Ѝå zK9T}3 SS(]$]#ņu'4J1` :E1Xm Kqѓq:15x5nH! WcT~zG"ѐ 0`J +Q (itx~oxg? S`tq()B(q|p9j(f5@Tp uw6mUI0Z`!GpJ[4k[8Gqx@v'3F;PHH e?Mhx;YHfᰭ @#xnO|I{<PJ ̰$&(?҇Fohr$ {`+3B(K(a6(z76^K68+[g am {l$4$Ơ` 0t\5=a70M+Q% 3a?1⭊1Q i *%j( VZނ) W^O`q>` <8}u8D¸'?{T>P*)p fXL ZL ! ʠ` KQllE wնz/ p ԠqP0 YPmP D2p&0 @r P `@ʮ  #x5Z(|0t=p)H@ԕhSOx}"(Aɫw~ d@z{A GkLdK˄!V ZŻ ̠&ɴ;/4Va4L }pS0=D0d0@bb3g%ySP3Q M&ϊ!eyx lX-!` QJlN "vLbLC3C@g0*hy@yn@b3h` Hnp͗Ak "#H.P=Qo=`t,AFq37'ώm!'jR` p . Țlpp >8TqDk HX pS,e'!Òp Y020 :ɥ QJG gf<ЫUE;U@ \ 'ѧ}Ֆ`}p}U|`tS ?UسaTu '>  8ɪD;uqp=D9 D9Pp6R[2#pu @w.wzʙ` 3ZINގ3Sv@1PTUD@E>'@9('*8x9J I6>Y?%9Q; ňhVvT+ެ$A 9Qf`&w /E*0 x k@ k_;|Οc+O,&ֈ+E+O4-$ibgN|4F EatFK.}ti4RϞC]~Vlсd Nݽ{-Xo޿ZUrSH_XAҿyc FXbƍ?U-}0DdSȥMF^?rzWSHWp?*p4X|Aܣ_a D+dEٱ3wN_E4aʔp]cidsgܥ['+\!:he2~h%n(RrAs tAu*HꨱfKr|g+ ,r"p !*R cgG+2K- hP V|A"~2M5 *Fg kz+t f0 nĦK2lM2ԻOLAGzl>С:u7f\ʐ7ޠc7b %C :. ֨{'Zivq笹r!^Ơp b|ҹgM 2dz ܪE_А$WXhPa pb/7|;L|PçdO8e¯'pXI& xj dK +Cx"䮈F(3YM9 PEZTdA6yƟxbΉG"}̡fbCg]c 0z6Ǔ]h+ Q1GZaqgd>=iIp@V~@:'~!ڨ;b!9 ‡-"kpJv+gr&}1G?Omv^%}g~(ܢz(VszGQ?A|Ey  X}!@QYdD SF)FP,fPn+$!DwhI1=@"`5\WD!$=xC!2!X|K>zA%)s] nf~,`-z=T2j>},Ȉ a_&5%u{w@>g`1z&U٘N#S /ZaY^r %{?C<n9_P @T 'H82OP MTDQ JlS"V,@3i!]@L(RA!{@эKm'Q2SN "HuJUVph R*9R -_>y#!Gp*DjRj2g1~jVT_ V@REI  {,>֕$zի~ ȆU;p~t p&G4!Ka(['2~N$U`%¹x DD;r* bPQa:Ev-EY:٢<c`*@(+kJk""zFa;|BpۇZW]w\odU7+;G>@P0!.,6qS2 #pQI}zQ;d)T-(j#(-憢CxV2;9Q&f됅1[@ƨD2na ltP̕E| FSX( <4& wr(DsbyYQ!, u!^[5R9aM/T|C!~E h+5]WCuA>*X5 ^Ԣc<覐2G8b& axbP6V 1CZ6-d9pmQd[ov R091JSS:i`SyY1Zdb=;iYc%kaqE !|UX'|c)*vޑU!A֕D%d_^ExFduYp?rʀ,:=~@FXW'11 #|TLCnʹa~ lXG$n!fY0B *1{P|S*AG5 6W@j BpA0.}Ű4&w1-tB܁0}.5bHȃ`NzH ﺄY$Xxt0+bv82q:h::0vP)P71s"Xe…K@g 'T@ pz.r-|MbPHC3[P宅O7PB6=ڄRp9zΡ9$Akȁ3U# P 9?8P[@i2D @JseАy@cCD rBT@*$$@K(H/<" $`/f85XPݐQ!G cʫj=Z(]%((`@eK2A |‰Wy4p!JOq-M@!~H@ZE0s$$=:y`G8X A"fސ9D )q+s  HĚ:,CxrX"@9H$"8<3K@R胦 <@S.PC+d~2I0AdrgF)`=18Q'VOhebcJYD#u0y$#~ !w),M M؄ 8thS8@A[ i>O S:ŀ0UD̰IĒ꼄F3\W=?"/pK .@'ȃHE /H<HiJOjp% kjg1NNhj;OXKP6Ю1U#Q 0[kYM=C[mh|Y& \\L ȭ hiS2>_PCu?V-ٕ+nhhߊa|'%ޱ~h":p&M 0]:hU?uAX蔰Y',}@' iQCE=V|r%~Z`S$F HՑ#2ec@U(1}zpSq%^=Mux;؀&6pi.X+VC`\bsRdO^%&V7`{&i̾^&^4y+XvVix[@cXLp3f6!׌Eଈȇ~ɉIidȇ9K:ԀdĀ(Swڍ+@/}~|fl (:p⾠vyXFfɂ=cÈ;&IJ(}hG|kW~@z ,2bvp yhGs`+ZcRZQDV 01X]^@Z(\Vb2jO SZnB/H8j *g+%UsZ8_1a1pqрRmBn5Xrp n2*]t 鲣20v؃[&%rBl:0;NHr8F.qlx. |`0x1hORH/rM[Q] 1. "s@ZV(FȈzE]Kՙ8I3f&L3Klc ʾ~ (1NnP +ז((5POx(OK[$&Gw0Dhe@T @*`{@e=8t31 xbXH4#z/ wTKs-s螯k/l>PІ`YnqBDO B"͆)!zܡzLv И)%?OG@M'4hW!op f.IQ4)#`zs0ݒ8Hn8KŹah0{2GQjL-ڷ(@e*)pW ۟)@ꑏ8C m!.(<OJz2\}?8x;s8p R+ v S0>Av 3Ω}$91I?3CY<Ҵ:%U:0 0oH 'єrT XHDkq?_f&q9'tV5PV\qL6WlWl u$m_dUh>(Q> Yji=ZyV2OVSN- c'JC>e9" js(ܶO]%kd1d#W\"`1PO?˺*WJnM Z;/buy}pC*|p8ic>w2 ye9N> Ϫkjq /ju\P(Օ98_n96&(U%g 1!W0 'ϑ5ەWSJV-04NY^amODž7!wdeT4@Ao@GQ/Z :~{x@5G)g5p|8!5A {.QK\<[VD c0GDoY8 FgP$0@vD6C,̡7j0#py&387a~]ˣ2&Ie_hbNfY`0ޔ O!IQaȇ(JS뚘B-.>Lp)I(\|E6AsĢڷNn: *$ȁA tw rPhczn7LO\B >Î`nvT4lZl? qIZ;D 8lx> HY\4>GV|kNU0>nL*K_>P"Tџ= `ޏPG(TmA=A(eɦTMqI%4C?;(V_C>4\-mC/T,%P ԙ-` @@\9:ۗ V>t_Txk~1aJy(IA]`x aT?4B)Z?l1hjEC>8Bpʼn;(#Gw=:eEޘDPCCxK6- H?`DCОUbYb @T<R$M(zHa"TQ(2`KJV8B(OGdeVL\ '\BDx1`?Cth[eɠl5S#C$`~@:.,]ģ5P݃$Y(t\^ƇAs"dGCDlôPyC=&NEr0D>B9'pvW?\6[ 9܃]zsC))&lnAL-%,dK] 첐bqt y`9B< ,- p V"|y,P| C%M4k:< @:CA,&@/&`&DDkB'P h*:d"7PTn/`?HTA @@B p$ %-|)@A X;C]TTA?L終h_Npk!vML8l{("꾔QQtC(FRI$lyU>P)zB B̩?ԩ /?T'0BAl^36'qb l/@D0d; 3OdE#JODDD禲=J+C4&4T& ƕA5fHFJt2C0+(C4@}DDB^Un4(4o'h6?u6G @0|MU"/ 1A!3GVԅ=~ҒN  1 "\67q>&\m$>u+\/'|]. ?m>  ADAAD A 2 +B'6C5cT˂+!vWbĚfo< @BX6ؔ+ <ؔ@B Mh8h,&ˍEIxd3%a9I<ޠϲm!?";)A!4"\ YT-)*&,&\-B0o71St1ٮlCZsy?&L1\Xw1Qp;(HĺUzG;M8 CG:K4LXzyctrBԹpJ'ð2IDk.E+:duX9+p6DRj&:L/&b"TB2jpPۃ:-|pɟ|g©/*4X.AVd$R \j %*axL30#24)Ⱥ][ĘCh=DV`ozؐKԃ}Vx/aV(8#t5|&&HoATTS*C.?$Ppc3Ko', =CHT ECwuY.x{'7' /TFD4Mc&pDK"$~8} }PjI7Y)B/PH=\]V!AqTåa1 ý@H7k:C"-Mz=\v;E9|@ LjB!f*؉Ѡdݽ{A9ҡDžH j<$9fHڵ5:h9V:7:uk9jU9fź^W{; ~8Bm[oƕ;Uw5]vACf "=!.:#xvūH1ˇ?:us9C9 J4eҴwo߹1^DItl64-[d v&]Dhsv"CƌFT]R+*,J֋+jxAD|Z 1P ì6t%Nc VHaWLA|SK'q1~H;f|)c elGE(#}"͠N=`Yd !6ڤ)M4}q vxlXT34՘ y򁤇j/GkoG/tGzp;!gy MUU1G ϗCh0jHȁC|񧞅so*WU\u*&ir<\! (q-w J [MsYE;cN(d!J* _FnJ_1YHM٤㑴G.b^hTg4pXґk XdVb](۷TFq&)Y03d-V!+*||Amgs~-Gy6)_^ULDM4WmsdU15{n+xUP@O@IO[/HX!ՃZq Hy/:^'ЪʾLgi㜥IBm5sQe8:Ld}̹#o~3F$q lb*q U,0OT7X0$h +$)sʡA " u u/'kB<©FpG:" ;E Q{r;Q|pb5~218 '`Wڍ2T rŮģ! {XDު΁uTB!MY .bд59AP0"-APC-\ qX8QY?vXW(%ɴGlD n1e5 xiC8Q8E*%7c|!a=y%xRt;Uf%g|B reC S?&ϩ䚅TAsއn$~t[Ed":3_ޒ@PpES&)EnQ lTBp`FҡB%`8p#IeҰbz Dl"K$N<1X,MU5VSmu[׷¥A.QSByp O'r5aօ(#i,{ˑ`)Ữp$ZV! L~sHFHu"Iڡ=N5(-n MtbȄ,2Q Plęfs0B ,P #Hu=PÃ\ E桙pŭ]/l;{XtY \iZ֭4.Y$޾)|&a,=H+D㌸8dzvVtMr|B@%XǽDA~02n@`q&=ތcdTqXP|Q~C[P}8#Nm!cF\)w~$fBsAq e#}.ZKW.m97AP T`%8YU4bzX ~d*a aZ@fe0A]ATI`dLTa B~/P^y"%Rb "T0=P̤cDhO4 XVO&<&B+Pb3ʲA@`Da 󛈈I2a7Dق#8-8z_zKK((.ECg#/nd2Km"AcYTȁ(DB<8{H{ܔ*D!KM !n3Q[%b,a43 b x ` h b` B Ԭ3V&NK da bln +Pn<_P MC X*eX!6n@A"/FCN)‚ b$Zh;삝Jh6ijed18 `v.ko"+#> ` b 7a)6h` !b'DXiA6 м88%O =d9Vmgao-Pos$at<v#"\! =@j*!aаmnva+Ut),!wL}]}jFkFZvD"+K5o &*is b ,Ab q! 0 .w Ѐʠ%ChBO&'*5"c iD{ 6Ɔ!yƉ+|1(M4K/ڂ{)+d#`@!txsYXp뚊4!f`!vN.IJ362B ]GqUa_%TPk6? r? Р    z +` z z  $A^l=-$ɖƄ=$ `.n. pEcc7/l>KCA,pA!da &ۤM~1!U"ԁyڀLBՅRf[],S~ Ƣ"ކK=y6mi**yEAH_fnHhF RP!9 L֠ a8a͢jec<lcx'B12 g衛mM!ģ:B?$F`a %A)a`PIЃ)jrk!wֈj:VCINb/*gL͖gz}wa>T)t"afȡH~Ja` @ fa ֬ <2^mJT|Va0y;#wWUXrO3Ƭ"h kk!/c d!X,⡮jUjiě);};ῳȭze[\u̷!N.b))!8n8@a ^J ƀk< TH A41iD,ĭY}c!f8auA]U-ú"Y Ba$Ёc ɡ,}کHΪ(VHd'$Oʁ  .@  ƀ` J PpA2 vj֚tC,cA|5#}@o>?Kێm:M <:u bb|ڹ{& ~mgY%v+eczߝIеW\}=S%R:c #-!!&tpش@) %COgc2Hcуc:c14?М 5QJ U $M>KH;X^=Zr%<3U?ʔN>;䐓{_`3*| &Ma$S#BtYbDNg=nJ$G%;!2S,-B@F&։+cN?])s9HtkIֵ#?YW(tSi8fJO< 9)7RK-CM=Rchk.&,zɎ=޳ # 6$&" 6 J6Ȓ3BmX ?eT2Ls(1s:i= 8p$E/ɤO*ARl'sUIeыREs0lÎ9pO>NȐ$ YI8$ 6ب,0 6"7c`cd)"TjΥ;/ޔ!}O? . =oݫvB>ǔF:6?V< 2٣V3V;;xyԑ# )1=AU 1z32>j0`J2oLܑ-ˡŒ[$C3&2-eq|=ч'LRP:yG= X,i#?>T 8>UXԞÐJm;- B"ည:dlNq@6GYU:X>)ÇQ )C*e?T|[i`+Ay`Gh+pscJc^1wkVh2A0XC)S@͐>1JXbX-n P*njhM2VqlfHM&Qh& a hWFfN|+ࢡb+ulm3KL=N%l6a9!8GuرtpߢE~,%⑦$NRh(8!J,.>ҡ{r8"Da}G6I.{4H|'< VPa k⯀SA;}9L!,80  MTno˥1T'W ? d$a1ә,CK{ژH@vsvzPqه<@""P|@?"B:kr+u3.A3"%ir 4fL = jUr0~ rK԰|!Qcx43*g'6$`B 8d J< 6^ي7ZvL4d4A/ಗ f.$p cMɔCtΑQ=+m6?q|cFxHc ;`9&A :#v41G {X17#ptZ'LYH;v5Ӵ<| 7r/@=84%oh?Y!"EL!<*J7-N/*D Ї | 4I3KĮ8'^83q e|#2e8 xHb?Hb`FDn$g-.cdľ3bc 2r 9wk}0x'aA&3ÙaC"DDX1na ~*+ߨF55@ qc@G9*tC:Qx@uFS׸1؃[qp_?SO'_kdOK?ԟ~Qz4g4$ͯF7iCH_;~}x7 ~G|ǀ֗~W|~ .wyzyȁgTyyϷ3~wj0|0`6}z|w zEE x0 |)8,+|-Hݷ~GW}~^xᧅe|g˗ph7#` @ v{yh tܰ  xՐ h aհ M( Mh v2 $ Oxh ~xw؂{d8 A|x}ޠ xj茊((4 ո QQ舰t!#xL ؉#hQ(AHX(hȎLሐ縐  (9!)#I%i')+ɒ芮A'NO~XSy2(7Y=ɂ@9A{y#}#Ki/D ;T)4Fْ]2Ç~a9|ؔV)8WaٖKK}pihxvy6_Ǐ42 ~iɘ ؘ)Idhə陟 )+IY`ɚY)暱)Ii3iɛ! ,uH*\p$JHŋ3jȱǏ CIɓ(S\ɲa`(粦͛8sɳϟ@ ]G̈*]ʴӧPJZr{Mn6`ÊKٳhӪ]˶۷pʝKݻx˷߿ MÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L68VUM#MY@tٍA[Cm ZFY[if]oJ$7۔Fj9ΔdAV&Ad:xc73YL`YY$&D7褓?)c*ʬu0 ꫰*묰B ejC00 s34M4۫@s̩jP.mY{0IuK@LC,X .{@0K*3-M-ˮ4m/v,0$l2 KQ/LJ)€p J+J%.@-BlmU٩XaD c?6T?Џ( 7x VB5h g`>?H%P <EDC"ІA"H6d l`w6dBq Jo@%AslP$UXD q SIn,c= pHYC,AQ!(B|̐"(8픨̄&AE2| `G=bI 4L cP _?8jZԤf)k G6 &E89ăc (BG$ W~ƀ5  uMhBÒtDpϊZ "4.=a~(p#dDALH-[t"^s؃MGRzv@?w TT@7!ETc0T>ЉEL):8F2XG?: GC fP2Te#f/MmhGKڏjA?Pf4/@Des"*| #xf7KP!ZA"[4ȁpaO"խ(3acP*\atp4,;E'bp9uMll s5m\Ȼy#vfLCB7 <ĂG?{L$ ;ug&*aQRP>a}.яxC8Z@C(:$)1{9U%oU="މc+lOԂc`6D=#`J=摏KAӭEgP܀xKZ4FHVt!.ËPtxQlMJ`xq57c؈{q:chB:q.GG<Qtyl( gA j8}#n'a *bv1%( -҃pG< 8al`?qv ? TU/[|dBZH g$G?fЁ{nryc A  P4ͭre ` !5X H$|! z)O/q6-$*^)|#ƴUq&@Hu >ѳ $&vK6/8`,PBN|UGL޷[0EW˂/6>|̣ އ4Q b >q>6Vs@G?.叠=bY̍<Ħ0Jv}Qv-V;yXw޼Mb\1%k/]F5ę?hd|0JK%X T Hhr#GZXh>.k0 cHx! _+fbCnx"Y{Or|K2$ڨ([AB2a2/Hu3n Sd@ #"j!.HX!D (RC䋮D4њg'pN8I%l/ȃ65QzAl@dF>d4HdMR]WB~aO's.!&E Iw#g<$ {Q;b1r|vBHPi7U:tɜ2RȈCv|@|B9&o=EDyOBo!)74XiX!4"'h 4rxx! "b9Й.j(XAZySFt& / Od2YPU!Y5F:DeGBlራ 'ֺi;IyIg.sgm*Vک ;PQT=žu")>Hȁ2I0"QmxH= >(_hfZѷݤz8hf x*D+{I <y(f BhU0#]zPNr|q^'_hXfA6"3d Z7:Cɂ 6?bIjr!RpbF$"`JQ! xD5du@BvIԃSAs OrE0A WG-9Ae$EL!:9քqWȁ ;1>sBx?Q .'1lR3@ˆ4KU09* FFkb_2KCxU`"myW1a0wHM|>W<.vlMqӌi|AeEY؛9qPsSH#!QTuvm`XRK=4&&I5#9tvlT !&=dH wdXՑj-`xIy/.|0\ Ck"u~@SbPBt$:,2wrSHݩyjxVh j Yu0_ex} > %NzX? ,=V"_3Á"9;;)xp*­ɉ!ۇ"c.@H}r#@%ۋ@JV~8.u8 {qx;(/;Dp|PP&(+hL#a/qc|QkI눾2R8wQ@F% ~P0i\chX4x02g%⻽"/0P|.l!-]>3pǙR}hX`DC2G/ĉ!zb ȂX6x=z8|(4GhT@.:>{CPʊqqmaD0u0h"-r, zYȆ$GT I ć;H|@XL"IͽYZ t; 8 8 rʯyy΋+>~.ؿ!]j:ȅ]I,pi=؃hABP8+ƗLJQpD& $$)zm(41IRH"Ӕ⠁ 9T|@ѫ ua.ys֣ϛLV|zhkx3Rn !@4#1Hx#x;vTz0Rȗly8_@BS5%HXUpC 0׌u q/wAܓ-Ur+r0eDPQO;h.+M)LrRd<`3+a]y z"Ax"@C0c_maV:sW#QyRrQ@F;A{؈}Mb?LJ{H3ZˇK"ȃ5q ;$@<74>@" \˽S`3&rcsPr؆jn(a 08(yU&73b-=IPxЈB& ~%!K"8KM tuJ/\ F{@1v a2S [r ]5m?q J#q`hcNX*'s2%XBHS BUs$@{8"|[ട~G<Ș\-zD-P4bL=sxx"` H>3`@H8<@t+4@u4W(*8oxX`UOȄHO[p@(H< X*-2X &]9S9R*MtSe!2[8@D&Nh:`~Qxˆ@; [>!%B5%Itn Q q?mMI!tCRxy%I,pJ;sp%q tVczIG=O+aY<K<@@4$>ȃ9>X.3 )3,pJ A!FUJ \fj-:~x [:v?*Hx2])e=qʆ=(+h9&fZvG|qЈ8Z yXQLز&ᄛB(>_'CGȅL jvّg슩ݘFǀ釥]8B}Pu,xhRPp{J1492* 4Hh/ru1)r8ՕV*W@<Cƌ`qPm ƥ By2 ?`@[itMMOW[Lk& [PO>z|^A`sȆa`̱{ÿ cFߺeR`fЁ7:Il-]%@59T b6h31Xp`@XP٢kp7(>(`̹`Zʏ"U2h~j0.i)/o!񳈮ă~P ʨʗXcxzA?'|iUp(h kHp+g]{ah>UQ S&M*W\IS'J(Egܽz16'РBn@JNcТ3o?NJt+S~; ;w`J ^t7O`9֢пr]g]Ct(W#\w@1So6@:jv lۗN?ӵӏac1Z);޽ҭޕg:v뗕_y׳oq;ڹyb= HY\2uq?:ӊ8F3/4 `A+I>_Eu-IJ' =&,2,><PހI?āH9iT>y?{e3Dy僿5=H;I6eI|?H3@s5pe;ey`:3ӏw)kigd>U){.Jak(. ?؃)׃SMJ;-># "#)*i-R9QΊSG!RpV>$T0bA=1T1-;gXHtRK[|&̤:P7E LYD?Q(:%.dBx0Neub<'?vW$@9W\r#O)IfP2[ #M8DL8tR n*ebN+L 4"tsLCPэ;>CO[3:S䡋>謅wj3zEWO=lℹ =43xոsVIxq "|"YLG^8CB=D(T^$hYP(0!Cٻ7B 7Cz3,C #9~?泎N4eCЎq\0EPE'*A,t&T Gt4VA!P%( F#Nh>}hiAэE/ (qiPcIp)SH 94qmB[JD)G:196BUx̭Otx!Pq9LC`?p+?fʞtpD58~("{`;)2Y&@ |)bk?܃8D Ra~fHUqe}AG  D?"mK-a* &d5xzqdwG$f9D%ԥ8i5JQWQuag*gqS P H4G+Z9F#҈@HS̡&qmws?V *vMI4aLDԇ?pbVJISvcbB ɤz ?!ki#l=w@#q[A` 5ТU_;i*.uKP!LF&&F&P zгJcOpBhȀ >}eC;q |FN$ C̓CG=#` +b/HC 쨌9;xXq#کⓨ$Ӗ PWۣAA] H0`z]{"ygm= %MGyHhQ@ ch6+4 \H=8DNљw]ʫ \}c:QCu39А_``+(Xm(BP{,TBH~T;9P$^&xvFbHEPnxLN˄#*wqy:.//J)azH\G-ia琇M8јtI;!A znC;P= :tG|ջ1X,؈Jڥ]Q'TCFp䰃98?(AL 8T4P0d`j`o,xÑ0LtFNl"W0LWP! ;L.\ 4D H& @C>Ѓ&ŇZH0ȄIdOUK E&,L7L@I148H=.H9CFAG"'fK>  ɝCoHgV`ʯIwۭ P? H ! l %:[C5:8Bd$^.8{dER odE9t8O0,ȣ[9b@cG#mWT-C)p)/A aCHOdǥ LAC](v[x Jl b}&DN6e mL?䅂K A?JsMP|;^0Uڅ0-? HB?|+iE_Ѓ+Bn8/B\Am:tR TAp P d)C&=LH&bU'`1b)P{RB%$&TKdՄ:*I q.HA~MCeΘ{yCVEVP<9>Chj5$<)&C-{; 2t ?t'\}bBB'?? $H N8E<4 2o&8B@A)@CfZO;UnzJoC1؁4ʜ93A9C TA @@/xXDRI6@-`,P `C2'$|bC%VzbCLUMC:ڀ'd@1!KGJLI3:#Q©$+xFZ YnqZBGBjBj @PA\ C p))TxB.(d 2Š 6LB A> :diΖFZIZW@#ApA)1P샀YjL9PPoh'B  =ԃ RC,fA@),9(jCE` E B8:|,'#-6`Cjib>+mD=(p8I3/C<((B>`X\]2Z\ -Y.Ӓd /ثZ{WZ%2"L .,VL - X!ÐC+qlh\ARA`bA)Br{C>FX=Y0JD[\?F<ح1B8zέ1z-3:gg%;nKҁ/@*"9<28.LoEm6eO =C M)T]2&@p)+R;óC"L* 2\I`}B2 +,9 2D^CP?A @t<.14tz@ !H+j,էàB:,FZE NFgfL&|B$BR&(mٵV,lBB[( 8H* ,d I:0@BTtR)'BZ;s#9$l@DA@@BwlZ̈w0M:cPYQB0<(HV5B5C=4F@ĀBBD3P?T+GýAHC@B8wn8G9XJ-Sn^0HA)ԂS-@eEwۘ="0t%$~:I@%P~^xChxO)NjL>' f%Ё847=x_E,AɪF(!etT`ء H Ah7ew "'\|d}hD= ?ЂLI˰yb1gejGɥ{QNvauY@!sǸ?hG-B{gFo=QD}_ ք@)`FX0]l:dL(+yѹ d1"9];/T4Wc{WJ=RADm BL!1w]CWm1j% PǀuEt%=:Jŀj[18%\b$&|>#/(!uyCxl/DAi0G8eѵR\B (g<!A":PP8}Cw'0.X.3xSFX4 $A7R&DBQi+x< $GT0x@=4X9*6B4Ȃ3M'a#B20-PQB&>x\C雇K,N)>_\Mx8*,z۾>2ՖC~n~^\B[?t_v;`.l -hDK4DL,+{x@@A 4t"C Hߵ>SpFI'M0rJ exѠ?7q@|:!eQFUG>{>wF:gs"EZ(f"aK6c`cQ%l2aS%RJjʔI"7!‚ TqcǏ!G|Dfc(\=h$V8?s{\]ҥWֽ;;w3УO,_j{g6oG:9!& &mNc2>ChP2GzKZPbFsG2͙^(I%͌z"!yt6#H " K!1q41@sAdQdnEl"auQPdMK'1+PL{x+3u\@2iMx1I= BO,E p1JҖq%ԉMdb(ֱGvo]:nMkGY"w49TRMOy#o\i+A 9R4xd [=x|`QA{C4)tUcٺt`?Pw!pCa PGPw`299eE/s%dRo Ջ(iA%g {#O%AYZ!U3PXԛER@Š% UBa{HRؼY-nbaiHU;1x,[MV5P=a3+gQLX gh\J$& %+P8$ҁ|L41 oSbNT"\QJ(Z6%0:kC&&0&A`Yr * AH!L0QG/(VLqm-1ؖ} ]1oi>Ka<I2ܖ<ӌ:G0 x,Q d5/dD! ɠWG:Ա>̏f>ѯ7 Lz H qAR0[q3|t?B,@fZu3&(6@*l u)qEN||{dhwT[:GAp BςƙZ'%lA:lHe,Q lp !ю&.Y읔{@e(>}A*ʂơV@&֬2=s :1 /Pڄ͡ $6.CьHH@ xЀ yh`_A V/d3,qcsnu0^4Z/Sk:<L dE 95!JZ)耻W`?TuPwcDdY&X:}H*. #̐$/zx"9GmD!_cVa@I/8 b0 C3A,P) |0vX5X lı lcŽ@Ea(%d6lN:`hJb r  N xz. j NP b !聇 FCA&gÛLwΠWh`ynV`n jo!* 7bJ H֨x8JI |꧌ .a܂X!NN)XpgR$ +d *$Nd0, ffq [j@   QcOហ j` Z0 RX1Ph'f0O -4:#Xa 6&! a!ЁL(-wGP &O$ @La?-  ! N! ,"u N4Ѣ $*(Vp!Û|v*0(zn8N C x j`8G b&8&R df TFr- ,G&! ),9 !@(eZjɂ@`.2&n12Ī@ z-araH o ,!,5[O !Vo2RvtG~>Gs%A@&`qaR a\1Qi0*==ӑܫ/ |N%<0Nq 2p , J@o^’,֪LjVMiX2&i*(4 rԍR RJZAf 8 ZA< tβ(r>Ρbaa R9jaaF!bΰ\\+} FOG! Fb C ]$N `2a !?Os `b B2J" EH`##,P0aX3trVZ*j&|B pV:l40S#nC{"= +xGt$[őab&r f3h  tR N@6?$m Hf[ f !M$CN Bh%᪠D@耽̡a ޠذȟ8lf09oT>t.)adJ ֠ZFeBNNc1H@~rQCNE \ l, f Bny ^`3$VJGч7#@Ќ &4O#^4@^`*@O3r Z j 7unޣɒvHс jJ=B 5`6L*qN!! ˑR)j3tI Р6s   Ѐ@oI,P]a( py/cCMH$j,ހ2!Ou1`jh h @᫮(~Gg[IA,GheAAh)!QPA)M/9XXzcĵL@Ρ‰i", (3@THUΐ@ ! j 6Cʧ\1{7: ` Bg    P7 ^ Z @['f$Py'l Bj&ހ*LZR"nRajHHv!:F%jX.9vClu6궯P `ABZ~ axxNa H  xN a괹:`6 FOTd;%t)AAnb~x&2a`ùKxsL!Ae|#?f!P#SUi)d zB =qʃj6XTs)9gXGTXX>hNЋP|R *) ?j\4P4HY1o\!E+ [,,LLhBWIBH>$ףRE 6͠P qC\ \TO6N>+Q3ǀ'L?S^`\rk6c)@7tDTbzEUT 5j;,SrUECO)vPI)zr%xQ=wa>ӕ7$x O?=0ZX:O=*ē=搤~94c@t={+[2s?m<ީ{5u}h HsWHpy(6@y 5Qwh=ԶCD'3Qbx#.`\r5YKp7z#G>C\pG0Jy+EL,Ȑ(DYAȰ1KmJ 0 h\X':%"`pƔ[=:3qkP?'|ܢT 34L>Q:Uh!c=9=q6 ETK=P-5߈*iu/8޹/2`P+ C.$@i-aQڑ@є#H-d![$hpi N *αLOfb=0ٸ>8Cv(2#ig Y MےNaL4TxoG"Ac;B΁Q#ra $,Ph@*j_Gy*%XLњBq0 ă H= Rx)$Z,fxr[cz E 4 A!Fʄf\KuR@>0 a?2K h#eUiz0&͒Lxdxa  .DBʤP l 0|cQ6=18q-P!-A0x!/ S]VDdc1r)hg HTYKXc;:gBRJ,!(Gb('n p ` s` }` zy(p sysnb g` H@jV$xfHeU,[P  |S@>HS@}@ b.5elM8D\1SWP J=P ht`~Teq! "'Ba(!ID7tM)W @Yssw\8@*,s+\ ;Q a0 }@=JA)>@dTkt=0p8${ |p|Fp!ș5WDDe Sv1Y@t C!P9GѓO /P'{ m,0, ,S.4͘OBKTQAvё xЈFX,ɜ$@АN8h U!=Iu7)U0=eߡH^8QIw-`'q8ǡRAW DP7ny}U47yzp hUP 5gA@IEcPI_*$]d )8lau%d}14e0P(P;$*awt^{d`a7Dvw|^7jeq s0I/ClSQp" *` +S'Ww?\3!") 9YBAiy*ys =3atB.C TГ+@ZNs0 6kڑ9b犮Rq1o0Wڮ7t l<DQ=@/_` 1=H5@@'!av , a" 1kjf,ps7P' sT`JtsB{JD={!;osj1O G !Lcp: *[Wqidv:h䶅۳HKK6񮏴,'[k ;o(j /5m&1/ :s!F=CnBw gPD@SUp~ =t! 2\&g*)r "t1`61lA1^ 10+'1@RRRW Or,$ \ S&82ݠt@4,Ԃ)}W@u ? |6 vrWq }@YPV>泜XJ1} .sd@ }dPS0U@hҮ-a!0,'B, !ōBrHI0 QI``K``I4^D>3yNC  ` W}K7Rd9̙(*-C6:6*D&0p-ڠ ȍbu0 J @ `ׂ%s0VCqB eceS@eRdxaڰ @ph3uaTe$r [5L*d7PmyyKzn?O`1HƱhPDBP[쀤y;酋Z+TѮ ~pzRؔ{Aw+v15del1aoSQ {-i&%k L@ q h08+G q9| |_b+O6=ӂu v0)^rAPˢ[x5a( \P1 ֶGs@ ]|1g0!;e@v`V&P&M۵m۷M%yi4۱ۮinDAS =c##8΄DvMup Rm@@epPݳMeJ e`=PW#J=S0dsUQ]^iW w@q@ cn[~nnH 툚 }py s@:x(7;f0O_}ǎR܃ApuTa  \pkEDc:M s$Ov7MTpdq- e-5_JScPp1,Դuċ=`U WOh_>ڼ ]wqAc`כ=__*@HҀUl5=0ZL7OSr}"unjyUPK0nfk3}?q~x k!@Y]Bj.2PeIg+!:6 1Jb` Hgr ` ٵ j'uaoPA$t ^RgGO@>On@ay`so\s~yn7˵f@p7.>8ZiN}K6}REȧQlxE ݆Q!EFad a<]& ) }V JP 6:$O e4E6nZx+-3ͯ/A&!<[LM{r)纬۾rm[lA/ >O#gY}`ذC%N|E5nѣEwChȆ icHQG1e27O$")jԠAcOA SNtYqzg C8g)|qb0Q֯薵g>s.A:v--ΔS_:l4cȐ_e53D̹p_sH۷/͖1~8_ #$xNYg$xk0Ok$`…mwo0^?@.6:{ϟ53GWjJG oB**/@ʣ3iؾsNI)>"pP{GHqi'{`rI((g)!JDwЉ;I!q<- 74SH|yL,9s *PHg})f\tY/)=0!0C4gN( mS 8WVBK?VE : !RXa^TWPACNGc*1jI|sGIͤQR,BIMB$9_$L'pd w-2V2xh hU;~-| :g.eV |&cVE[V1FurG*)-]+bgJ:|}ǫ6Rzaxi'(j9]yi|xhޫx )D2xc~'B&qAG=h^abxu։r(|Ae;XgB/wxP4EH0dYJ@QqMڏǨv| ɶSȠAՑήza"tI2GT$xA.@VO#(h)L84Pj G7VHRl {#?R&QHD,y!R\ba,QYhqTCK^30c(=Q'L[L$9 YA6Ċ!$AцWCɕ~R~H\@@ ʌ ( Qb-i`7=X%1z<&6A0@Ѝ'R772h1Z~˦G!4PHbDH b$ ,QS!Z'" h> (Dj:4VXx@Ta7QE)3LiE%F0gy㋌$i'7jcT)7˰o *dG9<9YJ*k#aT-Ր&1aL4Ȯ&0Mhz*h>UESa =HխnmK[=B|dR GBPH ,a@%ƅSp _-S%R)AhHv#:} d{X<"-P7ޣ/wKZj.w8I+BЅ`L)>\%m13 OS"s4q؃Fݕ$hp:ЃhZG$GNl.w]L`"c-Q!<3W+s@AbCM,@`y(e<)6g!%D ` g傊@ ia)0@ c d\NikDN猑@ha&bEh i!HB4#R?xQg9M5t.K"ؖm!5P5D \0hF%F{PpH|ֆ.!sJ{(MtP-K=V|0I K:l-PT *ؾ13n ^ /߸&+?9pI9pOp،t@h]p(m4i)h:ljM nhO7Vxq|_ OHRo0qHLyR$m]x }P֌Mz{PSRٝm iP|Z\Yb5\:x e!~׉zHVsTz*d Zd/@"4x/X A@9T$4!mDw 4QNOrr_u|U70؜HE(%0C)ٝV";v ]+N׃KB1H8u4 [/ /b E̙k rXХ}amʃ$Φ X fJQ*AcH+(x7@7@Se$>SVaA A:-~˕b@yk:@C^ 9]$>q$GzK0plj+jG|%׭Ȁ pDa)f*$4JxDJ?N)"h#JY~x:2@ E蘼9>.aNē>3><H@x<>Hض~~Ej ̘}R5S]X!5Shkf}|(=7%Y ge()hCcufBe؃7v,\T/6g"Y(h2LYfJ6RMOEF21-X@E80 *A EuhCuqX$#K9h@Arpi7XKPk2<?Q{8iTr1–X` )(x9Ҩ͸~`fKV\(+?/|@RzhoQƒ]= O.ٛ9|P0X⟖igE!]Og:JZMMLڄS'E䮞9ӐmXDU5|Ɂ耬/X[(aP 4mCTi ndK#m>p9 K.fP)pp~tI:Ё&;ÿjtm+g`cZHA`l0c%cHJlPH[0lPupX_dl5/P 0sR8b&؇*H͘3؅tG|x)H)@>('P*w( /FR]U:#Z*@Iuq|GPqB"-P%8|+H2>z4EV.YA`lFd0`zYY7zcqcvgXmw:P:T5ƒ.x~JZ<3h` b {ejkډVZ& n{K*Fxm4]#C[wzYgyOx̴Guh.ye`-VlʼH_džOPp_O毄dPfHWY$egRFm".T$FoXpѲ9~=|5 Dhp!Æ5@Ĕ]k1⽎3vt^vmԛ+„F> @F{>m *t(ѢF"MǦ 2o COQ^"ڨп(ӹ+د+w.ybO+xҨ*ŕnh%Y2ꓬAd(P*%{ 3:͕0wzǮ : 遃Ċ4X3C\xFv!sТ!u(aO_~m7QQJ!Rjzԏ9xrINӑQ33ԑ9`È T %TɐEjb$% &jNR"?;>H㍂t$Hv5Swe=Ds+\ +\O=3&RFs/Wx=BDmfr*j|ȜB=d`&e$D.Ykʸ=Qe?H?f&kFf?HԒH%X?LBR2נ[ 3]PsJ4\+OY{c2ڴكO5WxV[^t;0>,B^?4c;8u%HsϺt[~O;X5ʜB )3EmIQeB ͐3<PhΦ6UzS4\  ϙGCbPsQFQ]"Ό_PHa:^poP!R;[YE<%U Ӕ1dA BG{ p hvЀ!;_SiH.E^ t(- 5z28{A,[mc}Xe!eZ[EYo[18 >#A`bsȜO0cKGTawh=+ r>XcsŰ4ޖ bQ*P*UDa :H`meX-z`ZK/ _ n.1jPSycʦPvႡjđ"Xb G&TW~ G+~fO6DӋh7{^yƽ>*(윆@<ΓJq=QRP_͑Hp_@K<UX/ nBb<%_@`V?K="\-;—O]ډ>,AO6x6؛R`V܅PQhDΓT8W?` =2p2 ]{9+QP0i` Ü,ɟD@ Z@A LՀ|`\AX AT)@B @%%)́~5A %.́% D< f{?9Lm@b$f(AV129 # !9ۥ h$ ",B$$C?Qʢ@2<0'tҠ`YmnR啒D72FO=)\|3h͗Z=% $a\% )aA@D@"rI),ȵ?4\a\`UF$?TX9nD$\,AAkQ[Y`C$`"PRd%#B1L=8e(.C4@#^A4D:0 P E"H?^2?fEH eRp9$hLTPA ̂7 bB p)&A B^_|fAjiFF|AJ1gۍ]C~1,>9 >X,p6#| qL$mp ?D,`IȋWA}-C>8'<ʠDC4t]5ԁreC'`k ' p ,-A%29 v{8C4,12PCC~C$CթbrDa)Q9C!E%eӟ2B/ "&ħ>T)Kر;DI`E22 r\maefZIګkG>Ѓg鷒_y*00'\Nó mjP^>] A,HA2  R5MT '?U6Ȃ,L *H@TiYDYI'H'tTTLԷ FTIO]aT$CcE#j,ݒx‘P?p@ C@IحBO B@kq,DC>AԒsHl>(\(R=pF>YGõ}= eXe˛$O(D?C8`606D:8~Fl`Zc4?:qAI %²T$6&U-A=@lMԁ-NZF줛I<l59..Q/yI90 `HH:P@ ELO\QK5 E ق%%bBx@ C@n P<'C1%j`%۱XWTOGLЌ ̓=(W1|#JcR)U/tug!S(O4ƩxI,##dž:9C?H=f)Ui'x0C) I42@ Xa0 t=h0/rkC. -3p2#_ŎA#00C9\B3m=ŪK$BҐt)F'')'=oD+.Ce!š&E3NC*K?Dp:Lm#cLD̀y A4cAJY3qJ Q[tn*tӗ8-E|˰$fFJCڵD*~"ֵ]OP9#Cq\A6@5;L2+] [Jz|yp^aoՆlGau?,CO d A;T^[5rqC QYsca n:"`.R.j_9C9X1׮@'p_C%=HO%9D.l4$l!LB{)D.< t;+ϊ%S <[R~׊! X3IX\O$nx ƦC<8>@!8jn,9ē=+駉5av_9T0@g"_OyzBc5 _?L?BP<֣1 Q8Y#))J(B*9*4-: HG @-Õ3|.\u;wGaA|6t/ÄVxcF9v`>{.~ .t{d;t(M6+r0ziL9VVVzkVSs.?@lԙ*^$a/R z!iǩS/P1pC IVmDAF H@cE #\ZGkd;W}%J={ 3~l ')6j GyեGߩ*)B>ĘT]~|y7>Mx6gRXᢸ2jp@_aG% -r.sE7$۹$|8]ժ3${0Дsj#SVt/W}rW')dD ^|dE["!U摇ܤiÎD"="ޞD9̟|Ų>|xAxx z`bg }>܁dp19.z9PSQ7!9y/rnry'q>|8Ax(oΦ!*AmΞ!iQiV !d,Ǟl09p  Kjx!@6Hh4,$ApI PqGnϾ?ݙ'e$xx19GR@ .9 n$HIu" ɹ#ܳzy3(!p“6W",@yۈw$ɧhzB9 )D.h7, h@V4  @4Kp!HvIX&b1A"]=ztpР6|਄$څiءNp0,r2"@FhKX A@Fme\ycEh ~:?t# fए|Oڑq|)@ĝqC a sz` ٙ}A.D8y,v 1h+ǖ;aHDJJt̵Mlfԣq^vGNbH́*;SnĆ>`&J:\L#oX`\D4TB D rA2b @9"npnh8hS e:)e2sKBidcCXTA4:"Ԃ=LRK$@Dr* J4 L`x[cGiHv r!/B΀ny$$G .@S,Jnѕ(rxbG$uqvZB׮auHBֺz1|$BN+4 xp;Qi9ȁS 'Ґ t@(#pm =9D#0B?Dýb@% 5BK.4` 'XbT <À~I.s{ѕFEp[!8ǖi$qu$wAcjgTnu®ғ~ s2;|cؑg"DCm񄨈q3GyfM%h_,QA 78~sؖ*v4b13gM(5JNQ0x;eYVY)*Ĭ%iuQhG8a W0F0`K`(R=PI?q :t:r o2Zt |_dv?z g,J8(S訇=Vܤ+1{WGbXGI찵!U~'s8 r!7-ah@?=KP'*E(naM죦.!/ Pz~9LxF@edJ ,L5~%<({o,aj.{GDCyp9Qφu3X5KZt5Sr/W?HPBX%FO ҋ>-aÆ ~{|!7( -=p.5@9aSSEJA~s)p=jjԷr.gĖyg "Q`ShcEBgSCjS Y\l$D0A:65P4T|JO>LgΌ9x a-*ծ!V.at6 sl!< lgf'l)An2By&D 9xCyN d a`!NF4YpHKhKaQAN8P0P231a@P"!0MXDJ^lG@P/A  ::0eI+"Zj UhFV%UIA ' mnB1t%MGS8 I;vSiMaFJU+US'`_^HcT&(4&(FVfKaa$^!Sԁ%JbU+~ Z_ulx\#|Qz)!8Aī b!rS`ccƀ*1'+ N`r `` K|L ,Cy| VS%`J#jg jC#j)4 fȈ>A;ll϶l3aFO$4d,KV+Z I .&#îa <:.`!L!ATUn%H׀A΅ ,yByH` |r ed 8xG5AȁONnN 2PIaHA{2!HF3WV?  jrBBCy3F-0pA,p ,w)H=**"A %`aaf~WĽ .d4`d2vWd]|ǩFU@7W@aĮ'!!1)Als{Al9n؁ͷ\d*MfZ"t-7)!h{ lkIm &A6%^2&JN X}./7ї΀n(v4(5| .y9ؐHK|)SsT*tA8V^ 6{?!YMc ZM'z"CF&S>@%T  j*05Wa'a3^|# Cx]dIrysDbwbIF 2M%aV!脖K"WM"B?4R{: G*%ae{\V'CyaMMFR@Ƞ|AؠBnIb84]UCwMt8ayA ʁrf &EmQa5j..ǔxM oBJfR.a,Wh$^>!2H/%<7Bul pA|WVN v.$ *Oq"bpgG3b绹阎#z" ~{B1P1;z;U`N.j݉ 4<+zL4chro oKځژ5Ё,DU4AM+Q$1Sm+A%!AЊb&n pk$ 8kxg,3Ô A9#*t9>a @@ JM bwNWH5 p(A;~#Ԇ [O4A Ƴ >X6,@ @!nAe@l7d@$y$#aa Q˷*) Uc %%gbHI@ !WЁx(ueS|rJR;vh8T@SydA ;? (i|F2K@xCDL!vaX @`aTadA>>A(qn=QdtPo= A \xI|i!@ I'ܪa hHQkݦ$Z)@ s{¾IɈIJsө@T["M/3oZb?FjbzoYàGpTP X6 A!]^T!t3$`$ H*\ȰCyʛǏ 4Xo|vXgH{Cܹ܅DNЭi:a#{I:jC ӥSEСճh Jm7-SpӚ] Ho+L9V݂{#K."*r9FuX?0Z\|0;G46@"JmmP2cVa(-Aę¶حUJ =蝖^Ͼ}Cwg_#% }yf2죎: O<89`^\\%?`3\TT]ewG%`H:t>,Tky$@DsL-.Д?(%AES-S` 3 g`vY Fi>V>s!D@Babr`+@ӌϔMD:阣;<49oEIqaC\%% 6J2O%d,R',@8>^N}D4l?*>3 >kNC9lON@xWkp F[5ՎAI[,SMK+!.JI?oO;=UK uT1DAd .u2>9yD!+hVapi8 U0{.{+ lOR)f5@H4?h>?P@?<K>S*''0r&Z,X($SI$0" ('3" k>_G.@ya7Fo\;[a?Ny  -Yk9Dz#<3ca?`4 RA<=@+INP }/v>n~aC?cxG)c l;,DRa = T.p8Pk4f+ʭNvXT!  kBZGCj .' `b4W`S{ dtlK;ܡQ0(MP"&0F2jbb%0l"( `B1z@叀 B+3QD@$'!%āD!->΁ ;HC-q;xX$U|0=HB)G?Jw@%SxwHNZҒ^ *I9@0tt"!2{m:G+'A hAP <򡓓m d>zT CVx. | G=\bOtfNt R|a 1b_@D8$,Hv R @#} =Lڔ(xGMh"> Oԟ5~d>o TE@BHY{7u(C БZuUOч,5RaXq }Q:EӂZv>m )04 bŠ&Se:Y H zSBH Ѓ{J:ODQ WAt@SMzҦ '<H:c[:K4Hple+KqŰmT7 QpG87_X8(p <`#XLvu00\+8RlTB~KQE71CK2x`X<Lwӗ3+C0E#tUF #_{"A?q+`H+ݎ܃XC")St<ܽ-L00o i/v3wAe'{?2?R'@B @$"D\,%` h-Dtfzub=ZITH'*[G$~FMW'7g`0h`$\+F0[bUr` D0g n@g0`0sD@[:P SdHTw y8d&v-l C؁`hx wr;w@POQU`W0p  MAJm n{Hx\t 4+Dp kf^Xh}0FSs(8h0yw(DD{%g>x6H$EP3iRSq ]u0?)dhUMn!&b Iِ CT( b-`Y&dR`HcsmP !%e!xv`&@B$0pae\2edpgOL{ _s UІs hІ90iH `DD5<Q@&f%*w4uU_(8uaN:X VPWR ؊6it% )0 P L6p%"XEtxKЀI](aNd2eqyAǀZH=pQ8 :0S9O0}0g0g7_I5K 5Fd2:3JT^G+B#4(*vl! mU0Aw #GH<&2X,[5r/IZQ Q hSvb2+HphB1O zrChp4UG$5/0&q@sCqFTp ӣYf8/_隚uQc3fvDIA9ƞpw@xvJIǒ LwH:VXHio` ۙ Ћ~ozq Q 2`*͊OL {'A"74@P(0*Jw hfUWF'AU l*vRab =UCS5SayWU@'au1ђhi%pP6 #zQ P    r0 [raĴ&@Gpa3o9e5Ng gRHH֊N[30We{3.+6e+ ?bOЄ0SgSp(u:Cݑ@gp sp h5PrnrL Hh,S/搲D 'yh@E3Emݾȱ Hٳw^z;UNJkFX*\:g\ʕ-_ƜYȅ 'sזj][[u9RAs_:|Q)̘+L}l_\ ;p25I$@,)kM1 ly:ȜJIt]\Za'e^1%B* ҈P)f^(,@ʰb"^bfx9I یZM/)AǞV!3[)dM7ߤL|X%y&cˢ3PALA̶K!:|ѳvy&RdT;fiK0RŧlLs !M6Ozj )$`Q vlG5 ǜ<+pr([J<1EIPapw٧|bxǂqsL#gB3")Y2hPhSI HeF9e s@6}IǶb're~/iFt0|@#v&T]-<٪t1rd0-M4Y$lGy<",'5OhpGC̑:Ё~*&"aQs&qXt9 ,ˁ:`H8k*/ssf)VHX xPgr# 'TD^§W}gbF9aC_)s\+?,L F'  6a|C$HU Po,`ꠄȍ 1%t 8D1<V8Y:Nڸ#MCM= 2@3BV@_c2= "B2U?q.) L+A4bϏd j#8莈D/d$! HJ joA .34H,vh%8~!I  Y,Go#& (|6MdoA"AAȂ@ uE~ЃfAh+J`0Db t,.䅚&YD/ _ 3Xb^pr$Q4xKnXцbX SSR`8fhs$h*S]".y4.sS撮h,j> 4@h78h+2=co-d\+QfP& cӯFdD8ф"fN]$w>0\,!: 'PCB `h/8шR`aK UG>HA`YtL-q[.?6z/GPMps C)< h)A`eMo:Hy#jV.p_oY0\QG8'R cPN:g"͍90((G=,/v]58wa;~}D"m&(趄>DV&0 %M:!L6@b?C`"*b7P %RE+ 5N7Y ;/փ9 88pygc . q|CWJqebE58yК.pvsǓ(]3@ǣhI ExVc uOtC ]Ё?@NAHppE2 FPB%*LPߚ'a lWHBJ1c 8$`ѻ)D@t?9c¶5> (hk")#Xb FSA0 4NA"-ۇ4P T#ۼ jlIG}{"^qzfܗ'3P3`gX(Yu-Dluۍ7ŽP:iŞouyǠgňudbw%dOB}2: &Cw2!H$`^fGo2y(lV#{>rnDg@|A@vOX (185HA(ʗKn3=<s?z4{[,^5h|1 X/⧚h%k@{v$ѹ(`X`ahrmr9G@+؃#cԐ= BH]lf+cW`H7lcHc`d0UxME~ Xix0b9lZ7`*I|X.8A.i1s 6@u(;aSL^C 6T@`?ۘhA/Pڃqx780Џ m+?Ki)i^GYZؚЖMهqkeXXS Sp'HAXFl[CUH`-jIpDpś|K5i;y6B$5R)2p)`J9ȑ I~ø$ >|(!K 'mXZЅ+2VP`8Ж7X:(5|I2K6HL,`>@BAPJ@C/HXHl=Fl`C3d=A~0sP 9(cR@ I#xRȐz򣤊\ yV`rH$ #ihɹb ,Xp@`O$xȑX/x"@#~#J;D"[&%r4s,o@~(F8C`0+ws<x:~1z@vid@wy&nu}08sEMYJ [؄JLRYF[`MPs8J0=9c zRD-25c mIu#@{sr?DA-08*H$SH'IK$O4S(!@ Rȇ_%%DU<; tɂ,X|h2rGXoYP5HX21&P$B"H@|E+L{8[y;{8:(8հ/I2I=E5}|x6cԎX@؝2ix@@@28@؅>8X48O.K@K@<@@HfP~)|03;IS`bZNvZ:PMy++V`Y`\KRRĐ ЩthsPNp؄M(ǝ\2d,T,FDE0x'HȁUx'p+'!xX8Ēh\0z]Jk̓ȃ@TM@HZ2KeO">i"`O.Pmz%|_s$^~N=`%e,:(CM Cv+ČZ5 %`ڌY&Jh&W\#Hb7P$ Uq&<ȃ*HK.lOkQ"@e+U%(!z@J]i\G~ `>k= .P" Aؕ$2\\ jdd;Eh׋TFfn.26`@]:1i*֌XO^a my9]A~R$u2dz ^^xIzl@h=Yhx ;H`{6X6>Xy ͖$<_.x!g @I|zs`'Om1vb'xsgECʓFKP P)h0@w6A~OݻUw}ߕ/l!Vhs@Dplov 'uq=\u8 q'O2h`s(ȍL#GI}Q'x؃r `V~%8v(Ktٸ$׫CuzdJ O0Vb ҄o<@2y8\+tQTݲb'0(ފ/;H(9ӷȿ3XsP FBr6~|8ռh:Sw]y\nf9vzI,i$ʔ*Wl%̓$\9&v&C? ,j(ҤJ2]ߥ+\¬Yrk̈7L5h-ܶ xq |+wϡ7Sx/ ,tIO\iH]sΟ?l: \Ĉ%LQ XIb7SN O82obYkCg97MSFv{o7$9QpZ(N;@{HD7|VT;(!L=G;@-hRQ,HOàB T8S,S?`d.ܓq]P3>s?$A S,d?c|3`3vMJ'S4kxO>pS=6W<VXdXd"=2G8  $pF-?ܡwc`C1}Z!;Fb^q+\L|W0 c|S M4g#:d /C^"b 8LDg BG/->  )kC)Z f F+Is:L贏xv SX7imd ;e<#PU?8'`D$9D#s.LcRlш+(&4數 c؆hR)#"˜qḰ U-(UPM8" |8'NrzfN;YKs '@$PJшX/*'| Xazv;4KP&V\eb+8 (mrߒԘ YXHS0ֽ%! P@4~6&O `[r5zbuwHC̶᝜ 0I)ާ\b@E) 8 I1r #6/D}`4:q(C+~(!D'T2n cR5<?yTȸ,A-H`Q N=J~PҖtmr"DtҠiAsjJի~56Ib?)#i{^t[ZթV5M9[KSIf6>FD>~ɫ3C4֧(Lyط;z`0f-WUߪ!M QB R744ƛ4:DfsƛDy[D>BBc2'ārfx#tǻe1J4A1TW?|HFyOpA2w` k\)vnq`SFN5Y0(c㮔|pa\m}Ij* q 0X mIl3 ,%v `G#%'e3ɪ7֜c4)dC71^vDh('tĶw1=8_-npp?!”^1?1}8U:YSD)({e㵖Da?$C9Ҥ 9X9mXSH0!x!\1DiCeD]d\C-L!N UĈxZ>חICmPr1E {?#P`?C-yOC_HI{ O9.(6pkvEC("{DS‡<nn'y(- v/K; ;F>Bd؃@ }N XKL xVHbNE?ATC"C~j.]:^aNp ѫCP M+xH9HڐI4%@ĕA>ϱb=d$\:,שjnx}.m>G:H) P?B@LT)l#\R;$0$3$9#ĠDV2@+L<^~vY1؁]*OLCK ^x̼t(M ,N솛d풰9l+A"DlDdW)\^PdaNSYDR<,Ẃ9>R;Ýo"T `@CZ A*2gtUJC7Ȥ(۽NDDE@>DkݱK!Z#v|C,^1*ϹE5 :P Hd݌ O Ko1e҅ FBxhuY_ oQ%In;;Bщ4%S(C@,;Ё kEP((9%sL@qHA`PeleH\qu`&|^hk-Em9PE#/9?Gփ: d`Ύ!OB(4)vIC*d ,&hB'hBJz'0iץN!`@GƄK>Ԃ)%  LfE)|ϗ9X7ɺz0CLB{W>8B<6X8~Z_ TKû x7 +}(- /%nHЧhsfO;+-`I)ӝ#UsjN . '@/x r/sXQ.F bz|t={\d>N’>pc$N!Br#@*x H'0Ún"WCzDv sl;9tR)L}MIG~ SL ,S&g% 3!%bǞ&[TO@E[ vr1=pa ``OMfbD~OHg[xd:Z1iRH .R!7NĒ')`3̣@p# &,Oў'_4HHl/ra8;{' }1.qW߃_Bs % B=N{7lT YEDtɵ-+pI$,p•HTڄS4kQVf8  0fNJ"|@z"hZxⅲ0kE̦2$\ FwǑ-I!\2_.hKh|GNJ0oiJd8:'e:$0$1:¢4tNꐢ̩wB%amib//` e2Ws/1> 6H!@ByFS/-x-R"8)?8A0JoZ/EJtgMHOKS[l2DJU C ]4_06!eiIKv3Qi |f2de-cH1Ƈ)-aO"b]Y9 trs2zoG+P5Uux~Ј JXkGFia9@]^B5/ LG~mȷ`slH$Џsc~E!z:C@* U8C#NQ48pla(aQ'cc)j&MEKy+OM$ٹSg*L(\UzE)7$B^ȝj 3 ȃ'oDg TA :8XpH젩a$iIOҕӝb| ?JKt!~CXJM:Nmi@x&(l>zK2dmX>aKKI~0W=Ծ_1Bm0!s"*IR|ԙޖ/MX4!s@ =A V@.9(t` ͛C8_guG0?Q;rC ,D&q&h7loq?A[`#W J wCJ wuI|$4J|C#>ҕ[n=ݚo TV2ac"هq%=}"ڀI;H`BéGmIc^#w3w6;=Wde1}ObdEb`ab@>JMFp ٰ .RhF|D≅$B.p]q a#2"`BN`Ў r/$ !4ODa  @sA|mhF]2GIa2tvn W|Q +gw@A~a 'rz o߰$*5Ms6Q ^ `m#'( |(N   :a!ڀ4^r10aMzVlЊ)rd*A8'U!'qUAadndv0i|8a%aH T BJp"!nx ^2M "m%%AhHC1AO^Tg\o082bR!dj5p6"^*!2A.E2 `Vjtd p+2! ` 1C:_)<#K & ear>H!rR R> @4A4A=gy$@>E@sA!B6 `y@ Bï^3"CxƬ 0v30TA)@p2v*&vZIHqg$un0N 4(Jgt>>!(.;Ɵ( A/$T@)BT"'KBAMTA1ty PƇK6!AH>9uJja TǾ FK#VcU^HG2"2 $0ZUG^uj/JƖinjGY':aH!@kԁA)zF%Fm&fتʌf"M| jPcOƋ6Jd,N^ r@N/!K`(F\VAAFRa<@`K&SM6Ja^@KU 15oZI:4VcϴeX!"1A4H>rrҁ!ch>膳Jfwp"f O2#+FI"B' >A^H؁F*1lk  Ѫ`<2!ic\6:CAA|c& aOvul!"+ .V` lAojb"Ul2ib#d !epЦ"(!*AhaS8e!^|7ngJ)iN0"~՚ 'h.>iV$ &&e!25d!&a‚B<tgl?!c! "aO~a6LzX3C]a)hWvg+b`Ćߠ8) 3nԡ7EJFw25aA/0|a24!*/LB\$-պ7un@>A0H隨Rh4*Pm26"pXT%XعH~wX*І"h)QKG142` (%LXC "a^DFBWA=SLJx pHe,p aw\u﬈p5SUbdBFmUfKDa&#(b$|a5ihl ?aQ0Vkq'WaZws5V!%Ȭjz$bIAS sbs{?Վr9LDǧxGd(\|Ё#3ɺ)`aݎt,i61kr%ӕy鞨;DT!! :2bajmQ'qRd"whB@a%:'A.V@;c`b`^+ێ.J%_ܡ5C\Fda\(K,өsdLeZ6H5AO-\S 0|P[霂aT0UT(! ajX *$~as*Rb%lmSUh a ^n.%kbf b ͹ʭᒅy| ?󹒜T{8 ,%d`usG=gIwǧ JFE⤊-9Pgk$i>ĕ$`3a$ƩD\"ԉ}ٸXk1(hvH Zg R{V0! ==|J a̧^ܶ'jBp)/!2$ArKm${R"IIz^AA]'Zb4Ȕ2~8HC<&uhR%\=>BaP?u$2KS'Ihg%Q>x+gN^ ν-($TE0d.^  #XY:`&ܿdiI… 5X bL:Q?s٫WϝȑtW2bɕ+Uޓ3̙4kFT_0J65Ú 1uZ4?skҦD%Oڳo?_ Xr\?ZG{jʔ(Mx2JFӧ0JWfɧW#Jc<,=8b]wn:|"$gL]$HV9~t>:լ[M?hkZR(OABciN%.yx g Dj AEwǎ#:vڥţ^/ۿN(!̤Ve"C9U&tI.Eeky=8bECB=&H{tWdU:C#C ?D") PS> CKIiTOŸO<b9STe٘@-Yi֙Zn"*szg~E?ҜC O 1GX9@H/E hAD =Bw!(,ӍVxO?#y:cs;D=> m|ٓ9 P6QTNlHw{ޚmԛ! 9/3?Ӵ+[LȌ,< ɖOgy[I'="=fODLWD?wHO<'A{ULOʪ?l&E:S:OMuV94C 59] 4k{ZCh@C䐃i߫J".SF?B+zxǞ9 Ls}N\aSP'ӫ-E 3R]u޵ENQ}?WhscVlaJ>b 9sxO+9QA)eE0pC%*1L FDl]E>́C#N>. 0+PB#+tcc`!Rp;~@]fЂK`Q˜A\rŮObK[jlD4#Y>Q]lAGH@Ӈ2!Otl'dq lCwpOL}H򠬐/hQ3zdg6_$հ佌HR06'_uSs?9k_.T#Gܡ,vD=G0e?q2,|` xܐ; yc8DPyK) $+Kd@r{N0"U]P~ GKJPZ -D0QWL$26$0{yZM`G 8#4+D9$~J3Ȋ4 uh:pw[Kּ\>ڬ!AH2\f=+"(:Ǥ! *9Іv^>i #Շp{.=Ghc8{3Q |[ޗE5F4"(0Kxx0AK<&0C8WqUYEDTQr<&(93 w@f1T |yq Z`ab.sG8 i G!v:>UX1hX(H e|lo=s}f0jbr&y~ .C jD$0A0}#:g<ѱyՠ4Qԣ~_7쑍>@5!ic( A fz\HkLW Q?E6"JlB@̄&LEv1?7!;uWjz̃}RS Hp/ 4o z!_B!`j x #H aGԱ0%SL(NSJ JG= [A VЀ4 VկG:Z{TpD6Byh >IrckaT#$*>/YhG#f>+h@$Ʌ@ x@XjuY7Ѐ QVN1,ss8n{݁J8$-G?qN%)p 2bu n.W*59у85ȵg ;<Ю>@1b)6qQщU03G0 ><; 䠫D)R||ص8Z YhC)5Hx㙳evI=\,inc=z!4HwP+dv85K˻k> +x%$ GN8r!J?摏cTN= C炇{YjKQ L5.vY8{4#.1yX#bf9:T " YH+%p90~0DJZs <8KLToTuSVtk0/Pn7PX DE3@P?#{ PP\!Zl jjV0JePJv}6{,uҐ^<yc g E+Kh0tSmXRAz@A|V5MPYso8,%ooS'S? yC# $W+Xos%*Q@=5Md`3Qj8}AR^8eڗrYŠB@p o JX w@X* a't' HfX p 0Oxuaxo]{p 4Vz|9@@'vrR_]w0 jh8e]o@p Rd2qU^^#Mnp ^G#KDSMH mU_ytXQY/ gmԴdB>A7nmh0LaS1n) b= Q3D'S? V x WrSjiG aŨrPA ĉ8@@2vl)k}p' ŀ)dE\l]vMuљ#ŋw0ZusRPRٍLIVu0RVvADP0c00EiGk XэoQ@`W!ٔ,L 2FGfj8a@IC@@ ğ5T16 U;Y?IM5`MDcXRɌaRLUq 5FCP5Z3TVC @0`f@ړAp̩ fVY0egi*% m^ء)*T\Fiqr@R @WL$P[%B 1O0 [ĥ^*{EЏ+\ mMJl (tp Xiڡ : D<ƓEhA*Zp@g UcpN И]JgFtVgppMݴH*!C ps萭n4E%{*JtІ/HtVq Hp(nqm ߶Ug*R 4TdԭT$$[Gk& v 04VRZ`E{N2QGHߪr % nYRE HgprY71WeNi { D p ذtdȰjNP m;*U7VQc `x0 PA`٤<::X_v$ ҥء5p~GYpqp |PdiK;DRQ[ R)@0 yBg=Q΅WIV UKF N4ȤPZqh+pv#KX) QD BCdDp^pJ,bMfAg E؀ ` \ Gqjt] $ZvI<F2f|uTZ Wj 0\:St0 qpȦ=%jJpJ2qDE'j S|9PR ~P .Djp%ۭO Ggh ~pɎ:fR $Ek}HJgq0T@Lj[l`v*`wn <)S۰TuÈ =yLBGgjl@.xoHR`s $6 n *BQ~ث''yfжй)+d kY'%W pe`'(yf& |@*0)$D qrYBХx:qIYkv\& j;P9|$_W3LهB0 PЫ3Q? pp;c u4c+@d@ w ȡnҰ.5Ђ l sռxN-C} `q])Ts]*dzٿ>4Ql ?èW֧  spA}INd;X{pwަxRP 0(; AlƙZr0LS`)@#e_Uvl+ XU*}QܨnTRGU$`m?lh0̒@\V9՜,VR=Y2t @ٚ{ J0 pznŔ)UvU98c[u` jfs0f: [+f` dpM #0l@N`}+U v RFA0~}Nr`0-ma<J KJ Nu}HŰm PA >!jcEf+j<41^ @n6r}QRKi Cp sp}p H*}e@zGN-%wIk!|i著aX]m o` w0Cq 0 `af@u#`o`݉PE .4 xdϘ*KMжjx̥PB >ȰD|&NLg.߿~9I#InjMZ)xYCL5mA=};wbLO?s殍3O|bC\y&ݛU,vcÊ=+TZmJt޼sX8D*s&%FlTH` Q D ,1.B `HTK;%K 4`H bȉa LP1' v@)P1Vq PBE0|m`"<ܡ*$3 /@u\R1(@7Őeӧ$?*b)_R|Nd[E5'! WT{LM)喘b <")*?!Ѡ4R\9ԡ k0@2@4)TKp@3¬5Lfj5@[Z6A"2XH?Kvf V30  $~ }HEN͂C8SAh@Ѕ0.49 P``"JP0)s ,.m>1#q bB`H:ߞe1O?v 2 D J@'<L $et 3Q1|xO!ɇ70ZuN!iECx  $w)/ =@C! caDSo%KMlB}H[ʓIxJC2ڷ%`NxC$:NuWtyGpxa\a{DkN>sB6Ҋa`'tRba?hʲOH ,`b>G<2!X^PX:&V)x˩ R27{Zs,8"C4{h ^zѐx;< kH}- t@>93r򲜥q5|9[FiCzѪZ*䑷~hOXjӄLPE\DMpDL(DJlj%,j()+m%`G, ACXXKP^` H$^hB7hC0YhCz8c(; [ _lV x4H4@hi@&1 ‡x.vNqa{WBw`:j8O KY&Dhz-yxH=ۙs;`)/qEC/xH # >9PEfH`[LLFJFĄۻ/FX'iᣇPx#Cp8N(0tF+J.K72>0+J ,NqP::P:+`2`qIl;` Q@}rC8&DN08a'{˷$XT>91;3 N0NvC hXh K, 4(`ɳt}PJԄt|LMЯJHJd xZPv\/sMZYI|?28K:Cx%JYoT؁ !pyXQxȇ pz 8'h9bFЁ2jXLvh7qy+]-l‰|hTx,Rc (@#k _ HP C X0>\-򯩬ϨTFԄN`AJ~(dzuB0)k MBІq F\R/Gq%#rIR@R q0Z5:9RcJE31P4S؀,# |XMB-)#+v;L0(\Fh>(CNx|V3WHIh,.3WI ,"RzWnHg Jũ~>C>ӗXRȈXNNȄ YHT cBZJE%83N=.q0g}lQuKxmGX̕LN=)=qX&G0 2CN#{퉌DHs2`f}' 8ȇabZP„U%`U~HޔY}-?c_=;~ @ȢH Z^P| "PPeu]וEY*LՀ+ljJN/PX~Hq(t(%xжv>HZ؃k~(U,|n8q+R _\ٯEN83h0+h( ^_%lOJP8x~ 7Cp:N8A]Vxp+3i)FBr04p?@2ߣc:+tOr섦lTIE~pPHɒ r43|%>gKs?:~`PnxViqTͽ^Xq6 S8KH!SV8_~E7jA`JGބЄhL؄zdwHP:x]cL惋8~ahgxM{vقWx$cmNK/U:3҉ iM( y^('9#Аf>Ls_KC7^&]Qy;*Tjx14C͌KӨڪ?T9:,#O>*>3?akrF8G3;C4 Ua?,Jũ*harK'b܂-PB,dVf8hDWm΂O?Q3Qztt:H c*H=4)uRN&,p=ExDAL?B5@la,X?,`Ө'M\9Qx(RaI#s=s~#CsТyDp+PO@RPG!CyHG#.8KJ!s ȸ:Z1 ]h!{O>vHz$A R` s 5b+uG(a Uo~#>JP6/c6Έ'?Qb>2WXP L6R rLar4⦰>:-#%00Sьf%93pXfBzGIȁ ' + :Ij|j)PqQe4c^ׯ^)V#G-0@ыA h0`]8qcc}݌hFd :ڐT䒧VR ʀevc)ϰ!0D"Dx$ DTrS:>a c$#9db? OgYEsH*P`XEciJr{8͑&{иDL3 jd/iA%S?h)6И{h>8֥Ǡ'TJ$C3`2bͭbn,QZaNt㰹EG n('X8lA 9$Z 5l8Z'0ri$kxAz}׀^Iӛ@=v%@2A|gBH,{ ]G?Zjm;[VJiazfcL>r?t~ :mPg!!g[66!)(A `5z3:CO=&lB~B%D%t(D4 &TBK%, `=CŸNB8`pĶx,PA@PH.$Q݈CC7!#%Iz<%C?Tܓ EN:-I'|\d]WC=ü_C)AU^%A ?`xY'h0/"=܄<*܁:pU?C!(D?VĩO C` QAE&PC( 0n„L*߰ޅ?p®@\R-x\' F 44KTS`?`ȥ,v]_C>< 4:@.=AėB&4[(3MPŸ݇$NAC/Tz$MdLG%!%NDLG ,,<0 戆Bl1VԃJV>J 0A-HEhpNNLHpGM湬VX2o 0t,lB%%[d\( \GT9孈M@CԀ [ <_@B_AV)$u4bd]p(!ޡ8T<B @A"| `2>_n[_e[$ K N.0?bSD?xCTeV\<Œ!yFlHI;&D VA l' d>Ni6hBЌ(C;)1-&P„ H%A% ݢaC&D 3rbDàJgpx;6ꁑ3$N*C\?dCG$Ă 5KF%?!_:X9TC<Dl@Eeqc^*ߔZ!yphFL:jU4G፞.9)"y4|3QB@yaNNʼn? $6L-Cq+(P#'d- ,Щ394feNh jCTlk@<9&Z?/耴ҤjD͒(BÍbe?ĆRB#L}CX=8B8H?܉Q~BŮarN#X\Bx>D2U>!@ސEdp`Dm#ylI pnDalҺ#P%Щ,p6*Џ> 2 |n0Ȁlo)àhjl CEC-H[OK͝nA]M?h(Ɖ3$a$ l ؠtXע"$ڌ\ ACiB Ȥ> v!JG,4J_4V F ʼnRQB܅+$à%p5l|TНSȂ+#l]unaI&/m<:m1M AybC֚=m*/H@|fP0q I4?lՃC=\A7\XCb1Y5??* L=?8C?&,Zp~hB] ݆$4zJY##H=X:C9́L )rC,A20f@Hr+1 ra89 :5,O&$&l.3HFe(7P@L* ժ~)!h*^/8!clD /'H!x)C.9DH9£ 9L=Ì2k/EM<21&*Ѓ9ߙ *1Ul9\@ֳ{x9kBXP G^m>(&*7qjB%|-܂b,VF&BB^O8{NhܲAG d&UC"ruA тGN6p_:A#x3 'Z+ GHK! 2Hl#y$C:?QH >l)P'^х,,SXQN- æZmY)A]6e)Bmr57V0al.LAiZkOC4p(OJ;H>x A_mGGEV'udzN%kf{>3ۊD+lȀl(PehϚ O$'gz!~ A*=?sg@ #o/Ċ1x!?Ba50)*C 8?7A_,r8Ll> @@1\]9]x pt؍FY񏝹k(3u2@ƒk:Y-)2ǴH*A @psH{l<Z` bZF36A 2RaBQ X<Ȁg'y9A-HIh HNbIj{m/ߌGHd\"M6odJr!Є!ch!ʨtHrMсi.kXN顊@#<Ш7 $pCJ$r gp5]%蠇t(vxMVق ԗCbhRV5NǟtB5tIQb^ &GZ>YB!ف{gN(t siRd<PB<"xx穁E#&TTq1kYL K'\1*p$*  "p#@D]"@ 7NF 7" ^}TsM0[#D'X'@dp!i$I#6$6W f^V"Isz9x" KԒPj4|SlbH0" ^?/Ӏy9(dǟ|JLV'802g \c]ޟJ1 7pלCQb*z^>ؑ`%D*!C ?Ѕ?A8A*{h#zPQTa~́5<@ {]14Hi82l7>Pu K"TtrY)B(>L>LÌO(l%-Mt:xAD?|"ip@-O2u;7Q"`@vC y E,P(r/T;<¹,lf*##^!1A{8ә&FSH88$*4ĎC{GB9{+#PF. 00(D8 eE90T2G2@,4iJ Y`#uPB+ZHb}F(C@Yϔqe9sGHP bO\ *ldx^!Jz |r$ 32뉐%+[\ ,*@H/H KAj{hzĕd|*=%PZպD;яb LG?I! Y@)(&q@ N.sj)>nDRG=tἇ@ZpHx_O-V %<2+x%:ΘA oMXg00£k8Xu:*r8*xNާc ' OcBa,ud (,> -e(a D?<"CcHCsld$U~ !Ge5 7,!/Ya NB" a1` nPi뻑 iHqS&8RX"[ăXNj}0/paT4XbG:q&tBQiUlMX:<\&iub-|x2ǘ(ev34U< Zy߂9padႥ^9T< 6[4)A-aИ|F̠sƍǔr%THANϜ4G@4TofUL&0((p~)L?1,823>': YcE2!~K͹wp#9Lx##`"=q#d|d yJů#] EFz` U!/' !?0 L4AH @4a_,Їj+_PQdB@)!G~7ٸaO;-Nʨՙ"O?$ `҆%PBfڡ*ř"pʭ84avHJtaA,)b!Ȋ.JvgVV0rB 8 #~!.n`樰 BAװb\~8Lfe_F8u*.֎(AЁep %$ap*#46/ȁ X**@x*lkR RH2tNa Vjܠ b z!h׎h`LB-Zl✱m.‡"FE":R+ofNtc`4``  ]1bs!|v !` *b_,R2(rfEm8I ̮xC0jTrWTfH T6's )Jmb:A a`Z cX$ +?Kj &܁0g(j3x EJ0Fd! a&=/m@AA!D:q#»@ZnBeF | uZ v-z pV@I4`r` |H#M6‡Er @ʌZ+k$!f?4"Fo4aӁ0 ](ҁ Bg=[̡:di`HHfeځHrf#\A{ %a`~{EtY΀5*t#`E#aEx(Axc\ x#rOC/N$. A A") ﶀ!7#!!1i$L1kTH-Ju ` r!TN ΠF'h5ywm "A<!'*icJ!Y~ U C2AnefRM §#x!ZR@\R6rͤa5b(n drsvr/.a4.A7DaDTX| lS{E*ōNam(q`ArGI B !NJ64ȷc8F_=q"_2b##(",%7RPmXe|rI !x b p Zi1lv[p p {7R#(=8_'@}($H&͏$VC @!#p(B7}Z   pK2Jާ>[L.g+4 \n]35z H!D{H_Sfj㷅M@ $cr FBHb`\x4 ׆ԁhB YX2&a r:B@~amhNN(n AB=e8y/B{@ Zjp #Qs4O#!wjys`!Aal(a\'`'ZAYdb\ҡ| ʀހ2LlfA.APkE2l z@Ps!^~iYEFU=4c@ 001AZ-tg~ha2vcY()6)bXMAN{#DzC@G=pΡ!DfWy*@ Z? X#U1"RE%$$SCB?GR W8W BlR*X@!2è@D`A!WέZA~ A *zL# WA{H`\i6T_S[\8G)L @ }lPȥX)/83 ڠ}СT#BMG@rȧ JjxD".&iZk  ~(a`!;[Vl?1!k 9U-]U"NLdAAI'L @16yأ^j ր)`ˏ#eE"DhsA}yr ۦ;TOҞn:4ǐf) {~4b8@}"^=M!e_L3e֧S4ܝC`8(MhG L.৊ٻ`yznughy]^iv_jajZpz#=ws^!!%6 GGƒ9@ġ P>ڒ$569F`u^r TEABdcA׬#3"U#79)x7K ?9* 6Qiz d^rWaŔ*>vVZt` jI%:~~T6pB}8wn-a l)HTE"z^];w<0…l1Ĉ$ؐ}ua=4go_\Q?Gm! 8jbF$<Ց xEש u~B =XD n` + 5p+#J/< O Sb<4z@#mlϪ]珙k:.i:K JA?[} >و?4B8Hf5_ l[BJ! >Qμ qQf6-hZwՐ}Y=+m\hȓ/ 2:+9܁?`4*X58/hZh;u8ň{Ui $Jя˚RBZ1#KW, $ 2"a-i Ra)< zX8UCD-ˆ-4|= U^9,TZNh"q:Ήbf d8-+'&/dҀAH_"Tf!D"+p#ɡ$b¥m&/O2C" 1a*T 8@ل`]eeַoOECwvL`Ƀ ..*VZBf@" h'HxPs_RGAYͺ C"@ 1A}0>,cxetD & :?kzܴjR O\a OfDa\C׼EG)~]b{f)A`v|q0X Td+dK9dZhHw kha[9pp O b8@Gg{!jG"a)g=PWe8)Sa/{ 1 JP P54ΰa W q\/p$h5_=|`NBMB١wDVʘVDa aVhxP*l8^T*mD$DA"}L0}I}𒁰p+h@:{UJ;:sY)gYatEt43P D05(J!ň_Zy3j/ p2weJkP |t4k$+M ? -p>c a>Apsl 7ZL}` FxS__O BzNH1`Q)xp$*H{ĉz BR> fT6p_ I9 {0UWrWsIH+py +`6XeOI *swAFz˯ u".b!y4\N_!/ o WW DZ@QQ ?PH ggz Ihpdg^f . >AQI1%p {D1Z&;*d =;4\ $ OP/py"i5kNj #51 *!!3 0@PN̑ 2 uPhiq(~#)T( 8ɼ+*ap8b(WU+*{SWe%+мBkcp|pWPR-0q[@ AE; >=l!7e4w XĸQӛvPIB 4 nIQ@=5eLeKKSՅvMջ'iQC,a52 rA(jAog1P`6'@)jGd@@Jp8e0 p @ E0 _!@E..X1p*ȵ_) !%kc)(ȍ"͆`*,e*u3p133@T1TOⱞDŽ Dž*R023%@- PЖ}ʡ1_ <3W9n !kq1<Ѯ, eqoPw0 sTSPz Qc/ -\ͅWmR@΂<*t H3yFC՝~+""zF'p9,*UkEqH'*%`*hqOPfpvMMk@*Jd@?@5 ٶġ ׻ȉ cSvRG/6a C0jWE%1 o~e"'˵G}ccM#^b@"*2b#*#c ` hPyZcF3)XMШ58u_dM^j=S1@``("9}y?? Y8avpGK!}a 0T>3<>@P p `r\Z=P|w#v4=;~]y (OCO9| _R/gr 7X7p|g) 0<$ Υ\lHWP 4Y H\bb vp%XHIҐw P ? ` )ڌ76PQA;f.P$(O% %R4@ 1}r f gb2h2um) 2Ay0n!!kiRHRlgh@17kڋaa3vLf8W#cM  O@O_ ՠ[Xw1ڕ@pc'0gh%vn/BƆ9I |Q1)P:cxpB=^¸ @e L mnWZm2v \~T$ZD$3saҔ4j(0C%FQE3ڳ6՛$Ɓ)dK1eL/H-DiO:mTI'HWoS3kFS%G4XEM1|ԩS2̂Ȑ<^lK$F_NU95'}VMK9=rJ=oa/+N$c,V?WJ |9s['^ܷJ;竍xj]%L+_XgYݼz ޗyιͥ{ 4SpڹȜe(ф(M21ɐ6Qe~)P?w@ERИ"B{!^xaTa/<~@yxAĈ7({Iv'1J8@,!SSP3.@ K y"S8<\ `50S0%d VAJ"|)=JiAlqTRK55&&S'#9';ȉn-TTœj:8ZhK[;]H"$-mdZˣb8yJS N4$ WxDFdQtIa V h\AW!"@hZI*h 0"N 2R#NadK| # A[xu+ZB _j&OT{b}\5%YC ܫ > 9B'DiWMz5 D/Vp8%̃R}p#S#Vۘ9npŻJ98A5C؆xB%EPbsK!戂I8&tX+pgTca;:#C@+HlH}&hZ(7-Gx"NPl;j2 Y,BW&xE,f1pjCQF~H0G?x5X.v j#vDJ;ځL L5YF)7Vг0,D@` 0t 3H@ hYؗ2.3=x|g8)`H [9s{: 0M?S{ j[98b 𺅞Jҫ4(I|D}ȸIK Hs!l-\[m4p>c*c@C 摯AS^;_ x@@p i15; Fб1,)lr1(s`&0O:84”ck h @/)h'؝>eX#BR^'#C| t8*̓ әhE6K-Ysx;0tÌyS@FFa@OJPGk0d5ir:,͊1|CJ_Ų{&hXm@sƗ ^+N`ep*[X]Xq ͘x@!Is(tKHh#:c.<J~X6ɞ:}дbiX("CB#\#%|1>QĒ J)@< x< C+KXx4@!(p7 Kt5Z0Jy1 liki zAqJњ̩4|(%e7֔Km`iP)M6JJql=z<+Y>NȌFNՌU +"+r M UЇt0{NJ 6@XjO8PzP'y1u *h[>OИ} [`. X{m )y0誻I (X iّ9RrݣŜ-Z]i`RxCx8e]e7Y} -߳=aT h% :^4~HdO`NLldA M*ˆAF=Ct!C{ՌB9Wgp' : KXT 4H 6A2Hr 2 3<(" .x/)(\G"Car5 yEi9 _v283IvPڸe%Pɒ.9n3$SQ츂L-֙U4PV6 Y@`lc(`JcdYHЫZ$`mh1)I1PICܼյa26X*zTۙl*+%pA/X"pȁ<NW$@(7$X\ Sy@WJ;z0Ґ!RP1XEIr(y:r e擘OHl}hS&+x>hE[PLVM^u0ՉUUOVKlF8OS&Cʇpf]. O83]iPH5X&M0҅v+[H09ol4 z(⦂OY)u36Έi kf sHR ‡jhNl샮 Lބ[plZlPcdadhecJH6Q.JSf|X:?r/s*EUm}*8Sx,a*h83 2cdJX> ,;\|~VFb@찹`CKh`h4|`2P֐F`euڐ+`U˓uP[M`6U[=cHHMpꖯC}i8 ^V$)!^q2hʷex jN-8ZPr8-9HposK}:G`2s)uj7I)17sP:Gd=N)3/ \/_yjqZmޜOJڪ}nPZ3LM8vw JNJXz [[He8rXV |8ػ t]ث9r` |St$lk 6ڟ蔮tm~1v(2XxFlm:Lc^_T*UUZjͫ"zELtX)0,8ӠxxE2u $Ɂ:>ixfyX~xz8kنpj M,OH9jxx:fg#PN c/B(q"Ŋ/blg7uc{&O$˖._pa:sVQZIϞ> 3EV̔;ɳg];+abP}L9o_;LʌxU+ĕV'W5hи'ydZʶIu;5%P# 2ͣZѭU;#kN5e2e.2ڶIP6~y3l!մ/s$.ݿc?ho~#ocBed\6y浚Lǜ'A4e/>I'I^X AbNc4cI )\:~A;*x!TSOhj*q 9~Db;RcZc F=X8DIH!|я9%IS?Z0 DRJ(H I5=ogbiU w"""(೏9ӎTRI'V239Ұ!M;FGIoX=ړbbT?T P >|1?*yQOF0Xg?(!E) ئKsZ^kH\my„?(!xhaS ;'PhO %h% 'x:j9 LR+cXWs W?,Fm3 U# P *id$Уv2Z|MFN#Oqg Ur1`zs6zdhEڎa*ĐV`v{=B s=j+p9)fK{DT3:Љg#s9 e s% xb?\mک? API:A At" `?~xC41׿$wlȇ9"3.L(BL6@l{/ R9)JБK ,^r`gllhFבk8=s_RGvu팵3.tnɐ C܂I€°5" #nԣXF>a|0E2' p܃?0$:jhHRLHR䱕/@@++vƖ|hbf/A ȴ` (c#m$(-CG A$H:dl!aʉ܊B^Y7feA>""e/^ILlpQSɠDpQ" ~7})Ns# maN)p&nۈm9u1vPBy|@VР1= # ;>bXsVCb \@"` KF98ãI<  Z&j^ )H"!lmY0;!@xȘiWb Vՠ@FiHo!+4ǘ̐Ƀ4l+ŗC HHG:> C?<v6Dl hC2|QB%&0O ~B29 $n C~n`y!J4H\p#,\B^6=;,?adC>!\4 B$x'.D! ar?C4)@B#a,LCb@>aB Ѐ{YBT$X) @@ (la j:#F1J# C=<2x' !:868nb><9>\F;b0ZZ?0-xh-#PB?RQ|-0??8 9=!<^/#x\pB+̚FdžE4xBQ\.l ^0ʣ;£?z$mc\C`ӽ@AB@ <%TjVj7рW=]cdHdc'B2D>,D^ZLl@C>JcIC|̤^C, (A(!L8;Ћ;V UFs t.@)C>˰5x>fx/ɄziVT=C1M V2 |jkpzxgyVJICopA¸Јy xI?C<#:xFEN s\!C?)rVPC)#\MDHFqVO:\ê?%?dJ=>B@HHW˞" :Cl %T'-#C„)n-uHԖ*]ȓ0 jdk+#\_Dܞ\ԛ^jC(,`UCߥX)F<`z 11+8 L<ga +A> a>LcDD(?\@#q2A#@;taD9@B@ g |% /cN1`~JlmYjttOrۺ`% A-:r-FL&?tCB#-`9c=æl+`LeNޞb s4!@ aHNC;F?@9#`FxaÂAoNG2:*Nox9 A1ռҵHd4\#7ED$&])(yFӮʆF5/p|L:ÔԐ.0u3 k(*cbPn-4(,P?BDoܶCbprt@MBu@\!L"SzH?q~;t'nCC{.x,8mDYɛ9{g9/B?PH pŰ1?|wC/g) V 40/UK(O=#D4BG1WDMKF@AYVPʉg$=9<ת7F {IP@"RA2e u6:c rsG=COnH' wg(9h#+C<;K5C144C;ă <:~O \0\=nyٝ=-ʌĆO Ƿ?3UA" <2= ԦFHxGsH!PڟK"^Ja JUvLOlCB0K}M?=F(:>Wq}s向ܝkC>|@7t /ܙPY.:~C$9r.Ҍ%P{3MdU=|g@B 6tbD)Vxbv9vKW߮CH|H5dpKhPCJxzKN>rV]kւ+ 3ɖ5;sƌ=V ڿyVvu$B_|6|0>|*NȘndɓ;x^:w#ПB ݩoN˙/ q__~|yr #-'X|Nͩ"$Ǔ0GNH՛gyr-&??' + vd V8 ɢ!*&89>g;9"ڹ]|q!u'ip: Ɔ1 hb $@BɉbP \G(hG-P'zA$4 zȡ>HyZ@#+!J{ڒ U̪hy"xSf8|:*idvG;Sٕ^{]]آR'rF<$rWmb"/^ "btwT$U9z؀5!ne#@@릥' 3R >[:1L5a>"][d4I/wY*%x瞯_:餕)D_n=U9' X`A|QgyLnڬ崋9 %I-*p8\KT@C/$4h 7J@!_"|%ǜ1ybo/8K084"C@ ݱM? E#K>ڐ= Q1L+:R7bxID"'0Q'x E=Q=84/+"2IpSsܑ2!X_C<1R!cCq 9`\ zA"XU%"p!^-LQ Nℴi$g:Җs#D>HӛɱPAB hZCU9HG9 ڬV]yD2wxy=I-]o|AH4h "ah$"!AIW07T HHj V:ĩft*H!}2#$;"1d)(0Q%V@$py"8I>NVFB5 2LcuZe0\(x >q> f* Ă"v1 `MW U"{vQ6^ wi:EE瀇`,yIqjk)h!&G wC!B4hW)o޺8$'WQ&m= cC0,ьr=_ʀ?҇'}0 R[N pjHdFYA)ap9f&(ЂHCm@?NM= IAH$R$ӄ`+d L0׋5&2U`c!/%=A ۉ1K'Ѣ#j9Lj?b 2p?8kݥA9VbL#Qc|v0Th -۳RmЀdQK:'*:EXQΈM_z^{Kr.xA^\Kw rT34Q ʈVVCz,~?pc DGp^;[j)oqV*;; U(w×_)I21˹ =SEwhL=w *4acBW L|ƆbQ .t %A VUv#u忝4H{|)sФ/?ZQϱxZ݇!JRn ΀| ` E"q%])]HSƂ,A.(J̌Za0a4A2_7^O\NOK JaèR@,"B! SM(PNw~ J!Z  n -P" AOq2 d'n"qNA'0Gc F ,!!$(jȂHA. 6A(y-ucReZ2ցҡ^jnexgځЬA Za ~(x@n 0(R `.`re=e"Lo| AET lN(Ͳ/daR O(Z|a j T@#!^z 0p `Vqa Br%Fa0/sn(a08iR8iRu¡CvE GG`lB=̡2Bbr Aa sqVd gA tgCN(A;G! R]0'' h RN 2]`z Hr.$xZwE_FU)􁾸G ?CLp x r4 2)fΠR`;7:b$JPP Eh!/dlX`0e h(+ v4B%mJFo ^` `r z I`,^ 0]. Ȁ,1D{ :AF""%s8gU8Q!BPݡPtGGA =4n4Ψ #J1iLaxKrԈD9| (BAQ`qE\Mn W4!` d!a@D u2zDpE]r,6&Vc-0vX5"h>hQ&afavohst`eG2e ,&#W@T0/S[۠ &EW! q] .OU=p yMIg˵Eަ΀ Ȁ|DnvWbÉ <,d:rb@q\"g0AVbuY4\/6ajN_ncD  ` 8a:#ڞ% % ϣD&AkY=2KdnJA ږTF?wW6 %`HtNT@jUTN !w,DT 'ը'X rk(f"aZ8?CXEX!tQOw4~Dt@xЎw9Ԙ,yF̡m5"z5R/`@.pk(Vnڡ 8 D}ͅJ#"4%diRzNaDmP[Ao*&s{ΡZaaaV7bfAMm*oQaX {"t i+M=7ܢNjoWYeI aLƯ¶"eӐ(vȩ؁xQ&yG봨_ %lYz/r9 7 |!-2{1AXe[ubA^I39(- 4 i݆ N#]*-ev)a8/^7:(A_D Z MRMZ%R ;{ * Aege'W a~@ LYLfkb;t p`mnv"r  a B%&ɀx "ml!:F` Y(aTnpq&iRsq{Tvqs~_I%n޲!ޠx$DD|8tp@ #L!2 /ugސ{0 Z eɗ#8%HrԢ HfP0%ϑíX0(T*(8c(A+8U.ΡWSX'#2n˕\a f~`)9ND!scQze)rmA@Vς&"20B2_/fT2!f%ٷDs-!=%j.WA`<\z,>HSF2w4`y-0KVe*W@5AFۃ??VR/r 3k/afJ Bxjw>FFDaOkaL @!Ga an(("V"}҂J ~B!w ̯$ `ΕIB`UA˒5%Q6a8/d!dA]Bh:(X(rGQC*Z.akSlJ!ږ <ܦ ZaA7zNgʙ>"ķ ~bmpKvK¤aՒ,a*4Raiq龍 @R&l@3-l*Uڄl@a3*ŐTQ2Nagv.gN=}LHѣH*]ʴt fiNW@#)ѝ6#g'9ylmGp?VlΝW&ND.!v|ڿMX@N<'O6QbmJ:\bC%(լmwn.(T.{=/ȷ+gڹN6Dk1ËA#Ra^nй;ʊ߿"hX6p4$#` 6>0:XD*#--$#K%I&0ď9׋0h4HcT3-\xSA|e#j%>@?(36JYPPc#83\q1RB O4\1ݪ:+8~/u'O`~u5{@<6S"|-a-̈Fd"1̨BE(ݢ&PI%)bC:z{daT#R+o>E:<)MŜ$b=I2l S0]X: `(Q`:8PNsF J \=ӎ7cJ!`X M|@c Isqu%njsqB+M̓'D@PqGv l @D+[c =3v1=,OR`2r-6l4E IIIɀr," *騧g1:B۸v C\;O"w)GC>ÞP4WpcoD-QE>ALU8'|Ȩ~NA_QǺuXAt  ie' OǗ SXƪȰU4#i!&>Ol"\>!($'`DP|b "1s"?HF~na<!F؅1F4ⰣO(^(Hp|XFqw@FAca$ ƆXI,~1x '\*pءGNGIiG.Ȃ@x9@1c :$Ƣ~jcC* ^@X7@#j&, FϼeSL!4Rh(,` =NK[jv Op9 ɪPo=Bbqy4 (щ`]'MJ]BJI 2Sh¦""}aP̢k'Qyr93Bɜ ̨a91y%Za ;HCKQPHtDF*(G+,3̪%7XSj@88F(Ι|I:yjg88f:pa S >xmzL#B CLlBTp"/f1sx:/ն]>XaEHH ^=`38@:\tt5!׫Mη2d76K0AZo*x6@=)xkQt;3L1X۲켠~oaZ+ƕ8)V~ e\#O%'̈́w<zARE`pTAHmݵClD?xO$ᦤN@ڡ{irspP?ʐ-xo`5o Rw=)ug< ﱉǷ-<4FVkAn {0Up p \u ` ps0}` sh ,Y]Av XHS=e:"z7(T ` *]7˱" GM3X0u#fpxJӦ)p 5RU1WB[0 Yvrqc0|! bc4t,p`Y6rG x&Вh]h` 8Ē\%3)5I,/`Qڗ8@ՙUZn 7 hEY,@b1'Eە֙V]9m'QUIS鉞U5"0I6qd%BKq| {0AOJ`=PVWKXYWb0 [P %T$6"ɞ*9d SױfBòd]FV;yXyH Б#Pd@U$y 3h`+ p h 4@<3H05֙rɝCp BsX@"0r~$wvq٧6R9/"FjbyQ @@q R'ݥZHau`w':/JMigg[~~B0r* =hPy 841=gp&9\p4@}=O`z-qRz jj:U ]v+?ZDRuI(Ce;%l@{vt!(&1L1_)P ;< 4#i00 3䰬|~6!,l73{z7u7`Q5 ~G+}50Q}bMb 8\o\ 6ccé  DYůh Y,9Ȱd[a Rbw0 ].X4@PiPP۰|@?ȇ-'i# K|'‘UlzjVզV_P97f7upB: oEQj~*Ћ'B3(b 襷U"P Ptr+žBLY ]0j zk#:3U:8sj @C l `m׮F15  .R]  `kѰ@pȹ($kxO7!q4,PaT@ nsg qx{{sgFX u^ Ss  hɑWQ"갹V9'"I,pw {SU$ wps¾*naR0?`~`컂 #B:Q pGcE;0 ˢm4ɞH6Q3[hS{aǥZnP/i<@r Q{ Ұ@p I LҢ $ vktР ي k%o/';Ӌn2]u!B1VZ"Ì#`p8q@VM P $]j xS֕p ;z,Ƞ*u}2 \$pD*A~R(%02܈M0ƺg=Ih ĕpR-- ƠdOF(FzEP"|P 0 @]a5z=nId`p4mDK=vG!>%q(٠/x lS@t7e"hS׌ .0 N+AcJ Mc@i=0ه+Qq1Q@6sqfO`kK,58pqzf,/~wؙ ITt.@ LT@mU0"( $h?@ LsdPU@g0@ ܌u1=8HdF/3 i3$g|#5AB7ނ N@_ʞ}]` S` y_+/H/0@<cVQ7ؓR[4gAFE`E@DLt̠)ھbYɨ,p 0d@B0@*84ׅ QAUµw %+mѳ`1B0`Y bAq`C7 ]2ízE'^C .9yУ}g@7 _҇O0*I96H nJBCbF5^@t^=wT{?Tdy8QACc 5ܿ Kcgu衯H~Ht籎%'B 'ssvctA>* 裛f" C ZЙڹУ~'X iQ(d0RMVǜs.jH/H$!`?wiFtDS'g,#a"R!Ò9,a@,9Ò>P^’#K  z,\5B4D[a)THTbWL0aQG[.Xi$ȹ#8ragw#Q+8iRfe9!qP7{mx⑆ @`؅40)#LN(Y$l1'Zrv3{IGAsCtQG=xQQQ$4b 4V#%Lшb@Q7@xhKs*Ɂ)9t6$6yɥRhp'pbP>`;r7jZ6CxiYh'=t`_K|ja{P%Xc 0ܯ)=ٹNUȉT&@dND!#s-B֨t!tbiNG<4xLCD"q4dmHCSx ^DdH h4h`95snhHtJ 4aQk |b8ù''Tp5R֏6n+ Sr&'vы"?1x+u{p2С9j]gA h>t -G#Z c?4es1AtBTGx‘ꐯebM)xQ2c8%8%A)Avц;8ЁLQQ dKO|4Dcω#=D!4(&bVᖽD CDk)7~Ӟʇ=`C;̤|ԠEo x`uxc?J@(NGH",qF!>@Et_,JB@F۔&10D6U(uP?hG RhA!^I+ 9+Ũ 2|zRd?䘹Ns+#, ARTͰ{3Gu뤏|r2@lf'|ÁG8Bi Lj7YJ+{;V`F$qu>x|2(N=UA?AV\R?*xZG$=%:a{!Bz㝓fgC. b 2N :&RG?BN #T ^J*XEcVt; WXpAD: |&GfvK(iR؏cqpdؑKV֡ y R{l8 cv PJ#8=Jbpث&c%J蹕t {K>̱HVtǦtdœ8Qx. %([D0~D2o?(Z a}\%_=! >&_WЃFCDlAwT~@9]O w|Ѓa UC a9Gx&osU})"FԘ9{; 12q ('3UaET%n:z@o5A +ZDτ Y@Dȇ3jWG>ASc7{(J_68 zp [(2e`PX[JXE^ӹUԄcJO :H$@~-pFV&یͨyHM%(?z=tȡ)؉H+y6uq{ kQ ߩ1Gs$I@CI͌pV@'C=A=qyf8&#NJ29I8%e)h91oЗBY:at A @ _LcP0 \dWdAlJPl`[`H҄M]@8$_+vP83Wra߱ṐR{fqu GĈs!~ s:赢'{g7G(KqR >H<5+v@(X }}PUpPpd Up}MAO M ]M4ttP<*)|4`jBG9xAӢ. .ךs6@|+[ak7R*`6'Rxf.h13M&4C)>*Ѕ| %y S^gbmd WbN2`.q\i8A]VX8v6I|DLY0\ )éJ[בk{.@'u6/7ra 0%4brIĖCf8^Vx.pc"*ų@$$X$83S`aHz<u9>%P6c]|XN10F(@:{%5;fCVU7LhB9>mMqK H'[ s)Hf#62aSx6|}73X03M#>S72S4X/qMqy^>-ذp<4r7 \XXT:e8h=тIHCPj]h5G)xXt(PYQ 3ÆHUXU LĝR*`7 9 Kvˡ6G`Y)V 0]guxn'@4'"<ȍ<./΃h%XB5(1PfeqƜ I.{(a+OVga8Z*:G)PEz`q8e8-9hGSxu84Ac>apko;8M,jBw88:I>"ۛXp rf>} |x50 4+3}Ȏ06A6 stZЄEx$~[ՄJZ}XbX_@Ht9,AzȇÍilO: 2l!Ĉ'Rh"ƌ!`h /+i@*WlF""G:w|㐴 @:J/v-H$̊['KТN2ijIS&L  q:^¬zRܺ@z͛ ݹGOXRMt'HŚ7s<1?0BהԪW{n5ƒc9_3:֕dz5r-_9(5Ԋ[%Ag1U9&M*a;wg "HϞ= 1~ØW)`r)XIs2[ Ay!V 'S>I6Y)S=IJ30HGJ\%sbV=F?TsØsR>Pxeydi"%sN>C 9긃UI+9gEQBvb !O<]9(:!.)Q-X(2?mL<%5:(CTMmLL :B d?(?o4~|VFwYknc'6M^.Ԭg͟y?O,ʚmc_{(=9{<  ُE^WJ&4PLS?D7,ݬ„?AwvӏL3S6t$&@>ApeP `t="JfxCv97e>\ U85>$La4NR($%ht ?Pqҗ+Ojz:@pރ1A?NHdz4O .?@PH`bM RQpF@e,d&!"tF5(JBBHW0:JD1x0dbQ"/`#nW '0)?eA \.Fbcd%(Q R6[%: Wm@Ho1MU t5[J0|xsĿ2v!(3ԉH!~I =0fN>F!b2i0*#%(l`{P!cz&=q Y`g5&|(-WFJwt _)$GC@#ZH Xy] !! Y"h? l ;u!&\] V4J>x7#R :iVeQ֊'cx`rLh Vp̝wu%A t#.G`wDWݵ=tCsl9^FHh^~{C\ HzL }v ڂ$R`CD $x V |890%!P?8C4A5xM}=9 d @9Ûl()PhC#!0?/40ی՜|^D ͉R8C d2Ds'0dCUl(-qE[*</l$I 8BA@!LA'=D]]1$ 2+$I\0ECϙC>!C!bЕ90C>CB>l݈$C7\A408j~"tFBť: '-mD>('IC02&22.v#I︃:$xA1L5#Օ ၃2$@B\B x)P@ -$;=C50.Ě'0TC$2"B,A6:P@C>#%㊼cYE;ЃJA0#a@=H_B0 1?-FC B $OFDA%2OJҜ0RE*dRJ3.DS2BJPZd2FC=lc3VO,0$biWcP>8?pa,*DGC|tU Đ4J?D\,6 :D$A}\YA"@C+)((AU)A6hfWbvz1zC+@NZPIA64BjVY=@9a|g^@Z۴,T^RTJjtץR"E)HL砲K0 )=kg9Ě=l%hKXC9+,gi3ڢ=5-')0PCPmD.CC8n(-DJPE4(00L-𩝒 Ү^ ؇ckb SVsl'4LNfC0Rj> @+|;AyaI/@Y*nP<'!Aa!@2Pl!٣AX0R 4C> \?H2TZcpP>(fb1F6eS*#B!sT1 CNQ. 9HDO#A0F$QSbqTR"&> E^ E72TA#uG+cID> Z AB-C}JS&#Bֱ#&XFplL#!\UEjkr2D@PH;AVܹ^>(DDV?4d)?@(1R/C9C<(/e=8Ķ'C6*LHDwe 8$>Aq!NGT% Td,C&209!Ic`r5g28^ע8'BI4\Bʴ n:Di~tL!?NB"2ɥ?3 C js @ABY2 )5h'An|it=53go<(*J(L K9</ݥ !\CCkdK23Uxg^a34A([`/vs?8"zt6d?BSC`U`#H't?RI,K={NC|gxspnoU@1%FxJŃ +(03$ATyvyBm yB~A^܋TYa,\AЂwP!\RNj\hCn@Pv;Ί.D0u|P`o?f ajPPCt4yJjQALMZ߈QB^yj,34%K# pthh׹Fߝ;(izas@c1'; E ̦FB19X˭jo',F'H;ރ\>dC#,l=o23L'=vVK t;o831 lcܵ29=qBMH38CHc%$<CP, f~!Q /Bv]x1`g<]?LʣK˷CU8wg$8< 4ĸ@)?dr}ͤcl`_ܷR͇=?C),L0tC\3F HwU_?8 `XF0C?H!Dj?DL p#:@{C׎^Cz9@vj3)ȝsٳ'^{ E8!ŖaƔ9LQ?tꉬ9hQ Kׯ_9@N DeѢ5к #yhj١/)|YɓD])Qd=Ǯ(Q?tu{Rzkؠrzßsv@ ٞ&GBB}cTO[Q"Z9R8y%8̝Ѻ,p N"m>ar*,g4In.C_꼨i;LW:$:hDC?va;$ xԃo^0|zЁ7.qgGPi#bQ'p5(s" f|ǟIuV%JA_N@a ը88q0JP6y#F =q+Aq,"SQ՚2"6%&<00Lӎ -=4 v'tx05LMUC3 , "[( H!-ġjA;zT'*?J'JD"j&j50bH_ȇ<@>&k0Dq/P֣Q&33(0XZa<, ]&_/gH~oKtp~P)iLV'  <;laX:㖶,=vBD?M$67Ɍs5^p n|S%-jpH: Qx0 UpFdY2Sny)9wB `L:Gd*qs jъ+ڃASҪ$M@;H KXiZ-djUH(9BG=zdDB2XHA; }t& yQ Nk8!%ʘrqSa(G N/ % A@p|(A!A@ǂRcbƇ$[L:T 3:27ݏyf!M O4$Eil,-8؁$_'cXǡ[R6ڑ6!Uȃ%Ѐ. S8^@@xs8)  =Vp@V&ĜePh|ح?NcyMtd*{'R-r5QܘrHN:B0"Ґ ǴO5lY4 Ju輚H)  { l/K Cp9 $p +)X y@U d"fAJ x#a G6䖱HʥeQR 7Jh.+KcsH ҲD&9'51M@%#P&O /4LNhp9$َ'ҙi4hqdғ^ "M} "  "#S4 $8 NaK7!RObq%sC]E0" <,3IYA=yĺkno]sGZnCƸET[ѠGOp.2A:m@?1Ak"1&TꦍL;= MSycTB.RkUb sEp@ X%Z:dpD<ӦoUChErzAOW33m!67\7~ )С N.A>!!0!d | J CAAk `X>*"06*b dZfB 3:n5d | Ÿ z Ծ`@ r `z > i z` x~KfA;$pa޼!$P;4pL P3ʀBy" b*faA*"h J>aabA@m(Z&ada3FeF*A|TkP"V`"HQ봔N+n &,Q8;jIq#hPtMt4MdP(x8@ dCհAV`̂?>Zk!v0P80/EaSGّ?if.`a0K9E5'>WTA!?%11͢*Ҡ"e 1"7(%4[MD95+B',L<,e_2Hz΁^fB\OΜ-"!$#1_k5:oH` z|r@Ð f5jAnn`eI5XDnVRZ2>c"Ac0=I[gX7;FLBǠ`LREJP}"QU+ՔUSNٛ'[vl=teWnt;iHw9 > |==SM$؀ ͅ`R'P@'nB-0R 6hI'O}T,B1=AP: SIfV]KvB }&?T\Jkӏ̪>)Is@c*` (( [K7Pm:ԃk]W0̳ب1`#-,bc1b#RJ\+tPe?Pȑ<\YM N$ ԍ9PVף'P &(SOѥ7Gzu?0>sE_S2}-?d9u#x@X8 pD2PqdRQ>ȇ'`,l _`=D>Qmq[Dy!ֵ FiLl LjOhG6ġ ȇ9FX$M b6f+Yp'Q FH-RźֵNt"6Ґgbmtc]ǚ#=$I\ҍ*N/̈9ze@=ԏ>Z KNQt WTD] GHUB_)sIhJsS $GrxDžY6ao989Xfl;י->DȘЄMOBU?l>6I0XHj(J ei-!~‚KV2 JqE*d B2-iOs{$!渇tIL*)`Et"ɣ(Fv r04Pu|9n˨=N[qԉ!,dɑ PPC4 H'Tר V@/@c Hr:@#g? zG# `#u YUqDR: '@!ayt8$ j K$!'6M$pT=.G=B29U ,ITRT%1e`%HHKՃh$hǑ%h#!u#@\\OEUT k9T@̡HH HcH ypCа*4 bxDr+;v~dp=X&ƔP 829Y,7Hh)إvR#9)M.&:@\UK*hMl HHfyh`V23ɡy]YHB㴫_=#T@)` A/FKp < 6c0 nEЃ<=δj{*KDE̵FR-6 &h&AݣCzT*kLso']Jޫ*bUllbd2B%I@I3KowpD>VX&$4BΌdߔhjJ<-nGOI?,I[1 ]h=A &H ;G?$La ABЅH)MTHĆ-X:0DcPG <&1!DrAO#)Ņ u56Ici&q@ ^, 2H13qІ?1z0!Hw0Lg ?v =PuC# xT'9:tc mG:1ԁt?ґdա:<\aL?PUbvģ,dE"G(@zL >qP܁N &VtCwGbؚ84h(j1Bd8 YHAQtZ8аRܴ-H@)lA6s,TK݇6ƺU9X ȇQs\ >oۙj)Z<8;-b?ȥAEa8;&fȓɡ6BKn@$KPa0Nqȇ=ABea YDMC52w"I{ `ЦfzBC*B&dZ TI>8E4P$ ||ol0 P` _p@*j 琌HG&H|0|<$+!B_Z0 Wl`ubh'[Y(~aB%Ls:^t# GG{& @ }Ph` 8` QKyEyhG Sp C1HPU` @P}T л뻼 ƣ9~`t_K_f0 ?A5TK7xhvEBtPZ{ OWsuB({Ưg{QSjLP v 0 7Xz.l𶅛ֵeP % R`_Kk`J nJxrD:YΤG7';jupYeC9SZZm#bÚP@ Uyuܪr=ОI*@:TtB ʻ ɘ j #wGQ\"$W $$m$Md? :{ Cpz˂ʓZ%BoIՠ- ne|K!G< ͊ JP?J e` E$ ά&o,0.^)KR|֕#T ? ۔J0x$#͜l"dP\HlQz6OT~ԖӸӕ! mdOE95@Q+@NCZKs=4H0iH/u5ug ^8 ɝə ؘ  `I=&p$ ZPL9x< W BDm ?eo Wu2;Ef8p $`NP cp J @ @RJ $ f[~v~H F㫘G`(z7pB\Bc at 6Lݰf 7;0]HrP E48 ލL=UN5)E8yN^9Ұrʡvl Ɂ=D>䘠ɕл F)$T {G^GkpU >DրlJ@ r (ivQ[`N? W `W x?th m %fpY`5 WiF & L`  $4 e L@]\%Be+I [@簀^Xx6}8nWdBEm}ϚDhUUjJW'WpV*0l&I @ A.E>Fnؔ+Z}ǃMiL.l-:][@m_x8=-HMV \5JQ읭IpԨY`Rt xLP^`oSP R8QDAg`Y0 B(N6O6$ !ΆG*P DQ@m%oPxwG^uHiHQ*pKŀP%%TPh@353H@ y%T< ɽ Pxқ; L"YP u ޔme{p_JpYφ8Je̳ jtb\)".<C4Y3WO6Q,!)rs@B >d ӏ=R I2FIFeJ-]s%D5męS'}c:u2]DTRMwGR>ttazyQQCZ5WҬ= c J0Մ)`…  HgdѡsI l݌yURit3җ_SjC a? eę>As1hNαFZ|#5;xb sҩtatErhjaǫv|0C\G!16GC9԰E_DxL+wVp%X§QlSPz#%|pA4 0#04Yr'$ȫ_ʩ7pܑ"]Kx&;{Qw 5G?08|`"qH NtP fi &Ps]G|^qcV%d= |FEHʝv#0pyD %<""Ҫ]uTl7?-!gy,5_N~'u&(B6G>zH(Mnd޸Bh*Z`y0D'*nS))ԫR ~zmPvglV%M(EaL>b i(3FG踢 JBѡr {mN:'r圞._VȇV)s6R_b_-zCtyt Y ó-1lj\uDh;D@.QDEKdXxJ>AЃsSclo?+pLhqQ sPp2I= cb[D8QbPD1Q]zȉUtS] @:6*;G,0}٫c ]D}>LJamJÈ @uғ"pRcU%J,Be LirB$H؃8xL-bs8E/M9b GvHZbᣉ"^ n"Mbsa^[2 )=G4t0tgG<6JDaK\8Sԅ(Rr}H P:eӛW1. (RkVB,i+dV=9*̡M+AM?lD|eZպV5AR'sW˒ ]{6hE-o63]u f=RTֲ v\/0EXQilj{"#e(?ŭivLhT-UD,A,⠱e ]Ph?9v"uJIҏa C^as|>!!g'S`P3BX⁌;8! 8?tu]W(%04Z3Qv0=`Ku+޸ac%bR@7i,9x=VhN;#"Q'g6 O0G9.N1shAUh4ES]CK}X>!",E`#N43{MM662j+…ײ !Q / ʉ(S;f7R2D'NMTtߥ^r3J$WQd(a4h!~ :rI$P}܇Q&g(.t[+_#=y*@"-* 41׭lnA$F{.ue GGܨ~Cp^%@S{N.ċ b~G#rzq1츑)PbкwЖ6|r{ &rv@8/@ Rp@HxG ,? +zzP(ꄟI+f3 [$C)һ+o%xבasˣS ,{@|ٛ* 8ʮ-At~!T,0"jz HhZҸf O膊K1dp/KVВ S<>/3Ţjjj4Mt}أE sR9,_"XyD+R}R.MJȻ; YR 1dF؃KhcS|BD:& ~ !)'{@upi48?@n1{ȇ)9m8FLCX]x q40791 >: 8rIGr PE =Z~00j*XH 2(%?W4(+hJj$((MȄK+ZR AYAZ X0VfR#yH:8-Вs雙l&H\9 @2s؇|׋=@h~B3sH8 %MhJ0 # H~f,@jŖp14Lʶ7h(0ʨ ON 6@|D# \`V(08O(&$!O"ś)8_TOb3J}J0N!(FHplLJp.JXPM„QY aҁ/܁Ji; XZ>>@) OjHՔ!cB<8,h~ @llёDh@-@Q`8<`yy'e4+B5RtT TRaH7"icS"_h xxE\:8ycdOHd QJPuAefPYhVc%y/1Hs0 Fs]4TX}Nk=z4hx̕{O2"0)3VDɐK}S!00W'x 1%:3.Uv,p2%TvPT}Jgԥ ]$,ڔHB] 4\xs\ _x4XX*HX*R DBLt'bAJ`d0UJ[UhUcu3o]i\1J9 S[ 0P=0x<>0rPҐ]~p]~X u!`ݣvwP"f3E۫"H[_[3IӒsv0xp#_`X_3N†s6HxD.e?D=9HD]RݧΥn207_q (I{0,*˪ٵwxV0x%X7kRh@3''28<_(8 4נd؋dXpFMPF\j5`nel0dЃkePՄJ"|&))Cw#EPR;<,&B7(+*p] - @H ] sHDUXRpb#` ͛s ؀ fALaVvWvL޾ pI(A7Rs4 :*XXh3Sch/wh(%=i @~@h8[8Y8^XˀyYdb=H0lPL Fp%VVlpPUFgYO2dO ahZXhJQrx(!ѝLz(x.x@0[$`'ɵ|(C/j,H8W_ZO@T@4pkl.Z%*(|3iN ^ հTkṣۣ&M(܅+YȎD: FN |.%&bU苾clhmFf`[@N׶).kZJ:h_ BQJkR)ECHhe4x ̌ )cȔ2bpRDֵ"Xxݼvs4شa[ZrٟI^|M|,x䶳F {0`$ap!ybH'[ThFXЁ|fϖ2'&g|+M˩$Ob+zhU *NPiC@y g0߭u ) 4_>NG 6/`A΁fj]ˁHK:q{6p@tf$k܄f`mlip QtpɎ_|srWGu)uva"d3cP|Ї8WZPej7ƷkUF tsq)%z_pJN3(R' =K%@[*h[`ω˲xoL9TFTL Xj[ 2hhw_)/c38ߋVMW\#ù;*W]8fj1L Euhn"k\'6]5ʼȽd+( Kd{e X~.{h Y~Q0>1r`n>]8=@P˻~ N$o =7w| 2t$#Cx+6=A );KKNq}mHB|[P*)RF@{gnTP mGGPQ +x~k{[ys@땁#h<W(-dP 2lN%!ƌ7&lߏV.]J ݱtNݼUb:wYcS ]v,U:L ={ICiv#Ebǒ-kvND\W/)˫rҭkWntT u>ɪ%MP´ #PZ#L0U:x0&L*ӗRWn%ٴ=@7Ӫv^uƤ)ì7]LYVҧSu_sH/s]k?{LZ`k_n\ؙ/ At"aP& J >b WjݳU)?@)9KIS4sL 94 5(N=O:NkW%?#}Tӏ4|N4u%hTVA}d],E?M2b*lI2TBX2P"-PR ( R:BI'A &i"_s=LEt;S w⮾M8S>v#N:;)|r f:pPB{o !/C,@e<+GQ"RKD@>Ylq O=[Y3L-$P0J3Uz cLa 6$ *D*$Sɟ:$ #x遃`9iiٓ 8Tm`F$ywۭd|@0ӭUJ$ڌ7}׏=CUJ@?tC/y(E|;#?H҆i! !M\ `;?aB%c:!?pr?o$=+D}ϐn=J&cg *&$c5P!!a$@.helZb"(cH"-8ũP (dib ElAmY2&]%5>ɘZAUIU|~ Btv1Sh/ #ɪ8\xI?T(" D8q6l 9ؕEtBϻ$N,bEa$e u3~8؃^@h>x'$J =t jƬAH@SCr$ N!֐#P Q"0T%; L|̱RmBؚ\,+ /lzA /uЉrwx,Aeъ0 xB7 GCyHX#<ȡ;#P9i憘 Q*@b=•GHA eo*@ǼX-s@RLYSJRШ T@'}=F@< =&8f %l2Fװ li22 P0Qb#h :A0z-m==~^,T. Ng/PP0U%.th R`ޠB-Y;11᚛%:qcGH$X}`/d8?#d'2)0ޗuaYZeJ/it5ٞ\uSL' BpWDf\FY*Yr9MP 0̓3J$A^MlB5|JpYOӇ9|x˶ (iXz0qi*3䜑}HJ8t,![-+YZ9 Uӊ;3ꃩ#Yܗ!G _=]]? k&4|`TezMpZ'fLNyDp0я@<@hX%~Kչ?y #ājy9 MHbɣ דdA 8*[]OGKޠ/MC2t`b%OJnI,R$$s Si9@i(bx wdVK*TwN#|!Y%FpE@2`+CQ  a(fN,׿gdf$U/z=RyUІDb{ae#>% )7XeBJ,4 0#~+ϊxlduv]HܘK@G3LA,l0m7i!Ilh$D4촎ٕw/'QG:\Tܑwˠ$\B#@B-,ç XFHpC 1-QL('?BD% 苾싼8H'0? ll*<ϭ[uM|Aq3x ^V9@iPC %O 8 Nԁ4 r4!uЃ,0%=%Y5APO"l9ڤFiGy jPO$_ '`}JXRЁ?CA],zLC>($L0cLA|yPTKlE6.R74]KN!/h8@@ &IO'U,C; 2<ܵcLAQ|DNJ'LdHfOxXnh^| @ (˰!U DUˌ /LrS4Q >#(^`ƿXT=i%,O1l dTNԐ$% $ @ !߼+/6V(T_&0,# df M@ LRQF\Jxi1IfaJA '\|A6FRG7:Q`FDTa P*C?9 H9CunlC!(<1X݇mKPĨ`SrKh'FR]0@@] )X. A %{jL@sF]{0RG$C$POh4X ʠ!:,?LBLA2?CK&gDd8/ZM*NAFS!)cj^BHT]C4H&TffMVL`Y^uhE|(#X((.pTpTJ*r!hPO&$?:<"BOŃK@NG)W$)A o9$֜>Wt%@B,| $[Z)-\K|)lDeVG:)D aLOlI xOG\BDQć.\.z%p=p@#C5xB!|Z]DuDU6c'%IIAt&(A <2T1e^#O|3$P$S1@39\pA T%@ $B@²NA @% %H,H L%uTl0OVJHQ9уC+l C8LH%lCA|il I9S.A\lv엦QNEוe/p̃?% C><ȃقɪ4U @X8_mB$\ 8PqjŠ U,b̓@ ,)h%@BX)\n P ))OVn],.kә-`%\:Om<29pG1BdA*h>::?,J/=B%AdL"cN|B:hpJm9@g1UlNd6η}bGDR;#0x?dC49T?D*N4Nͅ7  /rpf41C>1ڜC,=K[-9`C:0,#xEfkD=>D"CiHpϷ? .\0ps tC LaaQ_&h;=Dp^L;8ñ}!쩹L:3`C8`:?`D6C70Q q>C.t^=h[8SUlE3a/BDA kXB | P.A |Z @zd h8u@e'D[O,m @ wT dy&p'2ljDű?HA+t[=4$p.x#-jbkͤ/DXp_F2f.4?//>=AeړB@uH^IqC=7R5Ҏ#t/GC %΍I+淈C;" ڷk:1#;AdKazp"=zzOlH *7Ĉo:n][COYc.-56û'V|ݼPQr1gּY39GO`L١立QX_s_k_:sO][b '7p'2&\o;"Ǘ=o~/>/͖b֪})BD.޾R&wy8K $4J@#/ %<($rX Ē*98H,!b*++ ^!!0(,>냜IG!sHvBpd#34SNVD}"|z ~ O%s:h\.~ |ʠhvʴ 2!= j)0WaUhu.gNu>[-zɃNmg=u*`'; . '`e rJQԾ}ar{a5߹ _ŨzEV/bߕ VRya i ,#2$QȁOTԀT?6?*eҨFF:S%LCbtJ l"%_7Q6sAvAɽ-1 (AKE Va J0?~P`J:򡮙 1Bя|xjAgkmo\whQxapsS3!kBXq>,Y^H:Jc{[܇؂44— 4?lq'瞮a>1t9dh o 4s!1 :KjۊD8cš5.)XZh_7ƼŤ?fǏ8C&JPDN"9 %AXĬ !VJX"k7X`<P 8W8a (@l_ 1H r :#+Ƃ@"#K"b&O~⡆E90hB=AA6cǪf. ]Њj @., bA b+DV%KԃdZ@!,h aJ\&XK$  9"[+" `VM1 P8>1$1br XNHN1;e,)Z.J"$aaR#ԁL`A/两0#.B#'jʠ m ~ :EK05 YH^kA* F] V>fΈN%b3pj Ķ2n8p"rocdB!';J z䣛X΁Z|E&*\ `^%.xtQGY l!=A ϭA"IAdF$HN%h >.'_U>& 1m/&?C(4ϣ a. aa<8aO$ ̬a0FP2!F|S2X!"N@toam܂imz`y2:g:kT x s+3I⍵b9=m>7A-ajڡԡ!,!J4J onJܺ7+"}"t`6`/=~w!J8Kb .-ħgDg"XܓB 9 V`< Byo`/vSN1a@,bd I^3I4 ۜ'v#f'pA aA\ɓTc Sր (z NU0͚XЌҁ Pt0Q%ax &^H TIL rBH&FɧbT{ x ځWˆRr>b88/!'L΢bV2!bE=a@ LrԡOz>d Z8A-aCfz2YBGS7:4!",F!C 'C@rr!DlZ"" D& @RRk@] xP1"PSmJ c >©ab`H` D$zUs CT r`v  U raD a4M-Ki?ڡ<~j,l قG&9\+Y;qzR c&6QX<!^2DW⠪K畬T@8Xy&'H.} x5ip!B w! A&?"c XbN ɗC" >_ Hf.f$DO ,! F~Huلe >v bbGK | p txtdL ^u@`'"#E)~QZ00Ƀ)!Pr IyB,PtIjk@rp J1^w@v .b Iu !NZG쁾a 6Jڔ?wAD5?;.d" !5av$!` @(Wc_B7#Ra-`;1bKFkUf`f( > ^`m`| B- W2;Z)(bkO2` | E1*^`T p`ʵ7(^E=)fΒd9aƀ<|:֒WG bk~4!N !_{0x{a5p \YH5jWG{ lk "Xa $T.#Ć//*56z" [ `T!Q}8|zX$@/<08C|*Ha@M@ n&Ȇ N `~HBD1ƭQXvzC.sy<x< ܠ\BWt('Z`WHٱbRZ1Z pXBex;.v[>\رAA@ɶa;"YKc=~ q w<%xrIfv.hhf;3wL'_ n ɓ9xB )K"k;~B PW .A~ܭNp0~Tf-b"",.䓾l2ͫA?-"`1<`P?隋]1haq_#.YP2@rZ!TG'nz Bh?vC|[: pv}!څBz4~pc?ݽ{*Z1#;rl=wPBJ<^X1ʹs2Ί͛>2R}МR%*3s)vzq"Ocn| "=&*ٯ_)9R>=5xHу)7s4q̱?H??xrdY}S? /Р & #Tf8݇WځOՃ=h5B/נ#M5sM4zQYmG@1lH#UND9l>FS gvd=t[c hxNFfh; 8^̡לнCXWϥZg=\+kz4@F?@=WHF?RK4?}f5}/Ű @Dl;cZ-΀d㫷kJWp`icN>xA\y-_a-SS҃Cyvύq%pbΉ>l9juOɬi8a } >Q?>sdE;%eeHM =bg|4ϏWO9ĉ$: ݤctxNsUDX䖗 +HÈ\4g?s;T7* Mθ29lVE>9!M_Vi#MON{HD sgl=ӕ"Olͺ X[2y_ϟ^ T$藢vjpiB<'/Cc h >P"X?~OXC ffc:-p'9XJPU$a$cӘn0|'f890cMY{7Na@s6e ȈӅ挷PQu p-$/ALFCdH[A`AV)6QH= eЁ.1A9rDCA1YС( H2I4QfP }-EeobgƋa2r|QGtB1epfTv7>ȅ%T0|a'5eF5h!ꘅ#Αfa : "܀=&"Ή.ьb~D9!Iix S9F_ S Gld󜌞 RB! th@̇Qq#{ꠄ+\ Jh&))4RqeH:~#vg' h$;(}(Tj'a. wHmU  \:|B6xأaUZeGØygS*V8J¯aY6+ HQ4hsV Sx=!i(BG-~~=t?Jkq C4@(]eRq~-B]?+;f49a>$2+ цsV1$;tS/xbKY8A A;-ZģT<6q+*&e_v 7U 8g5  fcp~D2`>au R4@?B ]QE(tA,JӘ4^nP^ 5{Kt8ӏq$sTzլn5>*Eե1jX GkC̤Z֣ 9A8AsƇ+5icC,Pro/p! ceG+8p$)>a|# 6E>-:θjZȴ/qV'<θǭMlz'7+"49G>0 ~o[N>T#@}(OZ!Orc"h[~%)A?;M /:<Fp.g'&ze(Eulrc9P#AY}tG?B8A P.r\ p)p?JъbC$>lPNر0?3EI;rIdm3IJDկÓ: ?9MDft:ߍȸ6p(G5 l?ݐ Gh gB%1O Ơ ]?u!10 \u:s`+>`58s4:ÃTPj(5@+@/B:hTu}x+*1 @ʠ? ?2tae(R"{ʸ?MFX&m zUHd8W-ՠo`6Y|%nv(3 `ɀC[Wt!'A\%.PPpO[oa2xhp#$0Ł./.0}eg\ b5^D qRZ ]]ic . Up pl F6bvh,5PSP0U@Q<HbD ) U` H@HH/p:Q_FW(d!?SQ&W@ ob 6ʪj(c@%(J 7#0(#@UJT0(ڕ  I ` j?  IApAlZU:9#2 5)4tɳ&IHV cJK" O09p <p  ` FFH@D?hh0 p2p } @s9X(cd5>PD R xxjP̪?q%6Ƞj>ʐj0 bP`Š(7+b:Kۄ pܪw v Y 9\Icp _oBH#Cii&;X;[D4D7 0y>p DaD y'g z@sE!ܱXc h`#  !6g s?$ z2˶뻅[WE:3`;qI`J ?A萊9Hh׀T01Wsᚷ0 يw `""AXwp0 KQS LU1 ppKUW`J>м\g_Q4 O 6\Q0y>` 0#` @ 'Ksp=h[{0ۨI:"+@ds47^>xB /ht, Ž D;g _quL W ?P Iqɩ 2Mh {˭˼@  7 YV` @ spj% Oq(B&WaS+;YWk ypa 2}p8Pm<}` Filak5zR65$t0 [y}Jδ,M( zq̢pWP -$BBP &!Fҵ  ت P!Ԇ}sH/]ܲ/kFDlTD| aI\DPI@ I$9>3D1pJQK de`;&%*ɑcu *IP搉?_qI4:  Ub59s p:ڶ8 rLխ  =*ru5&qjq[ \c&,=:j'95*1( */$p *>T.]GPSW"1%e P6 mqRF}ˍ}]`}{ PEBu?Qup[፪<#e <@~ -vԋ -]m ͆R܌ 2zO*$2 H$P`3(u"RWrq2)D* |e0cU`Ht@!? icA(W}"Ԃ@|;rP{ۣ.:TR&O"PaEHrW)5 ,#0 4v&Xcwxm90%vn)Ih`VVONlkk #H P-P  G_,S9[7~q# YFP5$0)p(^㊾'[SiZ@%SAТ)S8Vt(057NZ"/@$!$NH^ϰ?4hH638! ^K ݲ3~pz:n'p sBǸ*Hz53=G\1@?y0/&}X p PIK"B`gPPӞie XA .dCEi&M4nѣƅ0u$S4~'K~ ΤMtss_ dyT'AGYPzy"r#F5Ď%;@YiŮqZzRX KNJ1 6 /fD|md|WteEÇj ̹kf ޽{dˆ}4so qDݿ5?WxԠ{Ǖq=}:K{ϧ_S9"-I?DRHM`I{⓯B$Ou69g}4+JEwNt3,"H-Z$y4Q ^"'{#hˢ!1N`t=NdhC|qGhCҠ2gO>)O tΤ!{`3M5#QN;5!O >adNDhՏJP9'zytT\SͤargENLC;B y dhбK6l$GV hܩC'Z4Ɂ^xz \.^,!߰d]N+ts'-bGQ;#gyif]ph9t -Ws޴G %idjf(Cg:%fnPO6!Mg3[N$#V3H;rM,Dz̹ǞֺknNHo^!SCO$]:zHa-ҡ^RAuhr@b4,q@ ֟xkSv'x:ta'g(j|pp3xb):ėh XE{ Z|kdE>DPVLY':0!~0@.?N_J zhb`BFdCi@o ($ZD% Y9scЉ>3c|@]HDh>u$#ȁq@!UH HSWp'gH >j x@#,o┋&VIӓBh3e@ U r@*z0*D\BXDq Q:\ c ڃ@cOPB:&9.遹{i|b*0(DNJ3e604)JCq(C%/ @8.XR0G,)dL)xM!D0pC 4 C { bP`DeDKW<&9G<2.*)X ^`- " ؂:ESG|5P Q5~K48dhrYpE[{qYz8ql@ټʛ>c>u0&(щO`D& s$MFdOshP<Zho4ȡA>i*㛱U@n7")@B,:7d] 栂@C$BG$X_@.C*HYc3 hʽ@ ZGcyA*_yX(A/{cސ0}Z%.ZD &0a &cdM$8=Acب1LDPH"vbklqg9c#s=d.BNs#DSlj.,QRBZ?5`[yE` AOZPG-S c* n SgG)x+D`~!Ȕ <>&d*?ч*iAm@) H-ZvCҁxR65yDC k(HߤkТ~U uJ F'Y-6 }ts2TaU0̑-nO(ȟK\2OB1r >v~(E'3'U8zPɆV^A*zԤǻWR:6^`]RttFW=1#`?|Mn+ T0K85g|AN[O>,3i?r8d{zc}潉r]/J,>1U`Cs-WɸE2:Ks#6x&,l^D?ڀм'.K(꧉Cq`;*@ m4@1@j.Ynk12IG yixȇ x4@x/'xr艴* ~amC(dLKv7qR >S̛A&`FHÆ78UJz~">W8>8W8h0"vJ~rd`2 ; I9κI:O <)fr 9 no{@TlAToqhb( 2!zq6yh؃LEcdE(+!ѕC.ۦ2P &ŃBl0R8tx2H,(sFm2aqRd؄JcJ(HP'v>L0H#J#[X>YJ.$ S[wD0 z(wI+@0uö#r)?r(Bb;H0KtqH3(@Z<Ȃ9(J<`'tAx(4ɂ0h2POP1ABw|G9VZЁVtZ1KAIb?voZUq!MLl-!z-L#*.o&0㘄;sPɉJ ҩ[)TJ $ )@OŪkAyh92 jcN6x$H>zGp0|j,{C 2oPp.F(LsV)7(qzKOGy~@YXFMʼ!MP =Z5qx{B0dyTh{t sͰy(LO3x&*X@Zy$~:\O1=Ʊ nt9t(OdyNȀ17*(#u(KE˻\Bg`(T:`Pz`@"X%.=HyzX'9N/؀ԐFv䲾;xrDJE(2GɭMF =A   ZJ+~ CYr/sfL[٫*[v8&(:&L/Ri+5AHaM]2zh3Aи-[ZA}(0`Zv0ݲrI_( ] >3}5h2L#%ރ8GBZE~z[Y\^_>oGHLVY9ad8 VX_'hDZ_t0k"G@r"Y |8\: J=~hD^*HpAͩeb/FdYhO|~x mx=.0AL@'MdM>!2XE@-zb hdhG~fJfȶ@u Ar0%7x_x`QF8|EC t]2+=9+k\IaU'aTuMx8Y)h8xHIHWd}P0iКrd\ \:ti:.|!iiC^j~y"zѴȁ:3a>BhxU_A-Fu\"C|0I^8}?x-m"BuЇ.yv@~SH#ڃǒFv(ƥ>iVy@G%LI?zhDzs*6Qz,\Ldy(R@ ]q$p.p J (Q TAUhaiOH ܇F.`NBhSI+F˦0L&ht "'[O0J\hҐ.V`Ia=yf@s6lql(1"N#*s0ksTG.$@K:Nw L28ʠaDCO28as_NIpxW‚h1]by7~`YnvkVb e,,C],%7`2x󟁊 Dv^/!y@j.vƅ 4HfPfY0&XeXhy`8UaoTZؓa(c=`1hPI) /]:| B(q"ňj~1Lbv&ۑLr%˖.<^>sBG)RG)\*_:/KlW>SRYA$K8,YRhxƒThu"PUо"SNt0†Ìdtٿt#*Όҥ:vIc_}FwCծ_f-{JSҢE6הipMlBMrؿً {j)i%:{~(qH lRh/WozR5%&R? 9҈3N9T_:!֟r O>АhEU?#;@cKT<\nAZ>Vd jYV#XV\WhC Hq?4g9Xaf9?Ѷ%dv4^O1`L T"T847FrMq+ځeX7 7 j`HC3wG>2dO! |ʚwb8(qV"CvބX@/"GJ& 3[h06qBD FCJ:TJБzQrLOc84䂬?N$(+# yH@)`26Ϥ| >"g`QIrz5(G;яZԐ8$!7T%d?QwTC9I U?ԧBqCR!j;a;Ĩ0j{8?$\0@lRջ>!J?j!XXءGXXe'81 G;"7վ[ݪ q*@*$7CE'yl![UרunznV*HPQU^p\[jmz۾6I*( uˋ&UD9ȱI IoD[ߺjuQ߈l6Kz`4Hǁ`hC1v0|vFBz'B@A4(ۗ՘p䕶!r`)A,7'8MOV)h I-O$ 5&C"{5RPfK} 8Gi[);S90 K D:?s ( hhCdU T`0qCTgL="mJr"/ Y#iϠLЈۭkEO~v-vШ@ȉt$ANv|kW('ZQl!ZPFr9L!}e{|j!r xjZ7uoh;ޠNX㡃(͑Mngi4@a&v!ƒ se eQ9M8#䐅 2QU+``I Rdc&r3"IWx$5uMN4F}\fYHqG|b&&N?ЁnO{MȖrQ~?eR|@tCVAI p;KiLY;+rNeLΩJ-e{^~W|C@FPghP>^-f}sd9tDMl `B aWA]^m C<`z!H4ŀ-4j` P L>LB\Mΰ7Н?> $d$Cԃ9- B K|Td 楡5ʿ%JL0]?H %; X&NuB:.H]D?+\!U5H:C7C90-ݚCHj%&CH]-I!?w4B ù/C7BlAkGh޶$JS@4C8mI.ٚI?(DݞaL꩞la[-d@=55JM9C0M5_EdG]?- b1C)=T >D@IS@ T) VG| FA A7C̒`k5Q%.Îu xO*ݨF&9\: 4!pNOP\-4H 4JVʒeπFiH=t&Ά(JLG;dJ6c=>?xDQT Fb</Jeb$$LJxi@ց/M}- Mgh^ai&CASJ9܁T$D>)4AD(DV<9=ăT,,J8:н@"d܁)C) ^ @%r]̓B.$ |$F#̓xyi0hBPу92 *I@Jn\TG6@AF` #=lQ*IU`>Sz4 x+CPP`pTDi9&#̃>Άn*Wn!ZQ= k>ؙ;C; U$ O!V)^T.kO`#<Ԏ ==] )Φ@A (E:A ȃidҹٞiT?BLAsj@D5-dHj aE!j'9$4 Z$^ tB6ٻ)LIMh:ŀDdT]/ϺTa="94Z LI) ^ 8Ml XR?csX'ԆvXJď0#YtRԦ!$`C\e`  f4(>I0 ET87Ufjk~9B>=PI50AaYA !:í0'k }&i\eIe*USS PϚ> DAJQ*1ؚ,CP @Z x TA. A.LN_–4 8lnC-ڂ>FCvCE磇oCvc#\gNMxG} CwCe۱*trzK30A7,rSCzNT5Li#;$BhR@g:>~K4A?g &sZ0#)F{E=; 8'|ThhA,jB=C^G,C8;P`4b?EC dDK_B pbD):̗y|IFH",Yʑ&MTc_exySMfziR qCgK"V[vl؉ u24;wIcS[.ֵU,D{2]zs|0D+EΘQ!3fROSGI6ujիwHɏB|gҬ{'O[Lyr"K)z"W{ў=蠯_'_~{z-1l"O-{ x@^@(^!(YD>|釺<z:`%x矌>TOu'OP1tԱg8K$`*D + mɯ2Jqك Ӊs(Fasϝ(=syh !<$#',ya"#4$HX$=25 3%Q PER$U޲S+h)+{xTQSVx~$4-;]SI{Nv'ж;Ot 0ޮr "QK59gBlwހ c!K "yKRb"H K!b2RM($́nmg95VF CZagsyWwǟ@ |qhHa>2vykq߳7iq8!~ .{p6w[r h's@"2:$H8F@ÒYt!:gI >ZZ[ _ԝ#(p0H)"YA@ |b w`G%1"Hn\>pLbf8&F*CNGSЃ\LhRSBNAANAR"vH0/ %]yC)UD`V"z#x=ԡ՘bQ˄KJaVURj+6 -t^=p聲{`"L |3BRarHÎHmJɸ\PU܆_InMY$$Oxݹv 5#EFL ={h+aD᤯*&Y'7u`Pa<=cD c@IYar5C8|Q/t TL }PAft1f?H19jiWگtcw19D[mOh =aJkw_ >+U! j`nT;RI8! ަӘ>?ORN)uE4axQ!jЃ8|5PEBD C :uZ؝?Fpsgy>TN.+vtyN/=#J{$PF *^ 7K4ll^(Îə(| ZbC]a4K:j6" zH u1h .$V`Oh" ,=AlLЁ.mgn0J J llžE!ȀzH % ( ZA |@qÎN>eAKê pg@Ρjj^G䲞~ tcmTIZ/ք PO]vDIDh O?LLNEA+Ut[Z `JA T7wUT UӴ'D4FtHÓ pi,O LRЀQt WH/n(eJ&$(!8=ګptAn4LN!@p5G_Ada M((UpA (8S 6L^D1t+RTbEi4ZZp5,꯶,a pXJU~NIz3 R\WT 6anA^=iGgգF/6!a!qq>&3> V"\ *h hAZ|D'^w$W#Z{p58 0ogL(PJuW״G@H't ¶AhFiňkjTd:e4S7);Wtl<@M<րq/rN1QzW):4u P!+"Z% HlH`w"$fL5}b%MjΗzԁpIJLLha Z }XhSg̬W ^QnlFIUjzz1V`"rCzyM-6pRƇNpa@!y)wz&='w7J@K45N9!r?S2G+c"i a u!  @ހa"@AmԣMp4Hh ش P?tVH<ASt*&jidYw'*C #1x@{r` $adA*!u_pIxIEA<☏<$J Ll"IK#o!S2AXṈ!"J aDX ګ<"4W,yaS:j {==_-!4 B/bw!yb[%AC2"*{ovZ!!]M@f۷|'yb~,|A\+lwhrUc'\b(h|B9V#sY5B2^T ihYz0 ":02fHX b;!Rl Ȁ  !HBйe"sa6ZyC~}AB S׮A{ X^{2\qŋ'?tC8o|[P哧Ȍ01gǛCRvPBz\ (FwP1]j;{?&oJJ٧:*`LQbvݻ1jxH]̸Ķ!Oڞ+x1B9 M/x~9 vH5hϖAgnzafZ|BL:-$kvνgO bϗ]I[ȝs^;~Od]T}w$-x<|^ݙ=S?(RcN?, ?>_>02} c1`Vl:)!Ӡy v%?WOwٱ4uqCf^|Z 4C3O?eKǝc&I`=rF)X / /@AJ H 1@Bh̑+=R;:C?wя$>^?r?\H9UpLOU 6=E߾ؓO$s#.RJs4 kA r8Ҍgh?6G,Ȑ@h ),QKs):0|LH p: rpQ@H昳MhBP?! :|A}C[p?౏<?.%QG?u}YJo0uFP #k)_"=رb ͈3H¤6j13h5l1 M i-c( n0+HERן"!>J1TK!sD&P <-q~eu<ɳ  0#wpI[6'E4ߵs S;!80M{q)@ycuhhQV"`a651p{+hz~}F \wbuv3sQ&].p`bFŁwe3qGt"Ȁ[xR9 9(W p,Ёy4 ;X%X YmpDvwS$4j1_ D15r{pT^@,b'UoȅT R,3P]ǎIx'ZUg^"\ CH!. IH1J(CttE}U H'}8MSJ4U93 V`#:%|ٗ|^9+G%1` ? _rP[63,5bfҙA#3&i(pbV[`O`b0E D@s P!Y Jp) ZE4 &+a!12@i0zQhT@V5w^J3f%}hI#%A#et U9=Pp{6f0䔂i:,eC.92 @ @ P 0 / wv[1;(1 "`=l ep 9jP !Vp @&qE_kOEzT U{*O3*3P)Q+i2M6`b)NGq .a4'/:)`t0H'7$ ư#1Q;x@0@ 0dS0SPgp 03<0EV/tֈ"j 5Y 2 GAH Ǣ 8I˱* pkq0 p"Ԅ?`L9hCB|!i +!P Vtp2hLDžF0o' 7A2%sֲ.L+ 46Ev^g0D8`DPu "[ z<:&V`.t-@]sIq" հHj9H  eA25AkR0oTTK@2 U y` s@9  WŔr"}xTwlsj;I 6}0NCV;T@KAoI/Q:۾@p?dе`;4g40g jUh&|{Pp L\cniK .1-eZ4lHlHMqD"@d @ \@h`Ȑ >0@)O2$;t HiK=CXuswZ<0RVCM*@gDxǠpD#m( t*S ä9u>3 R=J:I 2 0b*D 5 Dvf4RVu[=hIoiP͢E|0/0np @pBH)t4@D`) DDp<4\|=UpU*5XuBh@}%|kclpU{Qjt7`0." 0 |S@\#@=DU$" ԎP ,LA L}!̏q:q [m1Y=00 RF p @imd/_@8>ya_;M%{ (4H_XwƂ$(*HDPk+ѴD *B׆kO!Q``R JpbH0\1"b"#pM9 -,-`;$cA=A P%`e 6)W`"6 2 t;mNq `|/P=ϦO81c`p PL 3 %R lt ` P 2P@7yrGg9QMk%vFn_2` dpU9~AQGڰ䳡u.ӀM3M d5p2= ,rzH63aק S8+\ q 3-\˅p@pK!!& UF:š@ +~X+T A|?PWp !tU& wݓ@mek=`ah^ 2Y'rQQ-# [Tp6Z8g3}^3<~UEm?0_@@ޜJC)c`΢wcX40P`@o GK˘ Lm ՠfS:@ c 2|| Rep h&Rc$P" Jz䦘_fc֕P Xi9s  УvX/V^ }P*ц&* J_P 3uWHn4VAO  DPB >QD ]t7_)*rRdETaiep*J:wohy %0.! t:q+J2 M(Q+ZDM4RJ2EIƦGducz/=+~a¦8QG`jcœ+e~F>CSV"!Oug#HP" 3r SA]$;@QG}⑆ I!.VHVȡ"@_diWq=(B7]e]w l'(rAGha HV2V~(egF{b0A((j &~ůt~Sw"z2dzC7(s'E(01J㢲O#[LK悊6sYڧI}S~Ab^<Ұ:GDQK%`b:~G٣jP&Yλ{ԥ,"Hސf)asEHp/zcIY@ *x3k* t x?^S #‚Vkf 0'X!B!w7Q\:5 *Pp%: JL53A J B]@2lL% xvxL#niC"&Ń ':o=ڠRx)=4SШR@Mdz!y Њ1o@UWsc <ҡP-e\p-ґPP@WH2 G=AOa{x>Q }3H;b h>929^,wQcG_4YT%h6Ps,b#`ƈ[`\(A(]#܅#X`YapCT}C6'' >\>1g/ KJT"s?H"g I 0qQdXp}HG0EO:ԉΨGQԋB1IlQ),@1A`1^L#! =u+bWURv.9B }'P;O|bAd+Ƃ"#>! jŜ ҨcE#1P2@/K_Ꭽ6E"NAV )|- >1Q"i SX[BXq$E- Sс\!5]_>R8`U1Xq*cU!1 &(a~“لhc+@G;BTX6|qjs4,B` f"(ndc M1 LTXD' u`# 4Q CAqxs;^iaNCF   H9XRW,ɰ;zan5MmʫG? I]U9GbNnЁ,vװ5ʧgB MbAQa B.KUFzS(#>nYA@,6@q@lb10OT ,MFą3?I8TcpBs̑O#B!sScteΐGw7/P\a40d*:09AG>A+`#,{\D 8!D Kk"ä9h,C %!D$2CZl }-ZlX&\[('%dF$Q L霝1Kǜ"0R}L>dܐ=q!¹אvpD>hj&Fso}WΫBGI0~V85A垐B8b]5m&m9)a=0e b0h1 C:(@lP4,pt4H8@@A<@&fPWhHhF틥raa>>D*/@PC0 @$x"p`p.Hd*Z){(X\9jx+8@tt(C 5j ~H&% abFds uȇי~x|@ ;`FXL R'P*Y` UOx,p~kB-fj 991avu*ȁ$85X :H’+:wssa@4əCL3> H$GTH6L $H<D5s7 t8e!QIpyʂ6h-H:[|*+(j)@f˥(+q58KA)y|DyP sc3x B؂I|H`= l28J 'i J͸Xv ~I8O9$L)kh#뫟Cs6}0lI$OЈ>XPK8R" SxORX57x48)HOKX@44LDP#ZzPu1#,48LThD-b)(Ӆi=V7Kx h0;|>8ny+Ș*uhwX8hpupM𠅸RR L!A}+:S$HH.jY" ON[ڂb82 9<A-S9OJ.<HKSSRH)p3HK@h@T4ly%xEllCfEj{7(NP0+"RT(rnp0"XH "1W/2 0&Y,k1-/=dMsȤ(!|0K8hQ9D"C_CB])Ԃ૾`s5T> 2=U8*HJKP@KH(`CK=3xٙO.3T$pPD*$Y Lr:rVrDҘ :XB>Qfk@#Pe w*PsUE 1L[ˋ{HULK* iYXk)8>؅lܘ>S ruk} S ɟ8d]Ԉd8.TȃTDPE]'898\S(9ȃ)H>9HCZzx+t+]i (iPhhKH1YZۛ Z 2 w3]^? [x3'@)*9ViLmDDHP 9@I"JH4(x@~(^Q$|N@RH{E_@Ё=(~Xa L{vz-xm=*\MLn}C Co\ @>]xb،5j@-rdaHJd+ EpDGxNSDPv qRveih_KQ]rbC H&bB7y ID `X0X58]6 0@a2hF ܀`\Ԝpk9`X}pL{PJVi~+h}1_NjGƶ>#CXÊ*  %sƠq`Nr= `,`jz,3y,`'Q &؅lw9P9Dh>MsKX:1=PX\|0I: $zGhVt BM E^ { }0!\XJ}`}@(؀!x ʼnd}鈱89b.;nQW*4XALZqq|z=(1Ё8XT c ھ!Ƣ?r(sT [e[o|E`}7gI>o񥮞See(G@$%.?/Ј N%:?o( dP7&UgrYDȑ3Va6@B% @/KuhdV؂sPy(bvM 50#0 DyKfq ]P 6fr@k.w {:`2}t`xҶ|wvvx:Ph@@7xw/SiVY5l2 D8;V@L`glG {l#_q X'y׹(`wwYX~@&I#d2:u<؂Zєyzڋr4{q*A/m|)nlې4zG; CK1+2 F·Kr08_`j]+ƠuH z{wc(W+ Y}VIxeB(uvGJdVx-~ܟh=%~*:lL:yDO5Mta]׿};L2u` b҉bƬ=@;]VAtO?tS?uhQoh܌3vq9oEHcI*k?.$BALT?(A?CJ?yGgbG5I$pIk*F8[ı9sJD@ MuS/sNÎowjEv9SO=dӒC[ C μ" l2죎:#EcO),?pO-s!XYUo3d7W ?PIM;4?JKc>;+^HR3Uߎ)UIDuu>o=2I=cp> ; !Ĵ@h:O3OW3s^x={~lQH>8ztI\QC)?3N#5A7e>O?=!@UO?O=>o+[LrGN+hLC _Th`=xbяzCU>̑s ԡة$r׶ՃcwYila +ɔ :(aW?P\!اđ愆:RC0G?б-꤃\ұ 1TvAh0V?Kh@*tѨ b س $R 1u(ԆT,,t+ X$Т@ƃ"G"јE h4xI8#yf&4?#(܁s b 8Q7LB~3XDޕ?ƁWEhħ *JXRPaЕ<яW)b/!G+cd+.WN4؊l _BRM!Rȵ^_l(xTM#cw9VBq.=4 &xah.j@H徍 ;;l 6HSS2Pց :`?J̮#$fZ;ω3P>˛C>Z1|֕GO b\J&I"?hAwR(P C. v='G=t(#V%ySsDD,|qC,vb .)t%?)4--.!F@\M S79Qf<\zJrA {:?N#pQ5zƣѢԉ9f!li ,J:3,0etT^Lj6xppy?C!HC E $BHDA>:XakM"9`rx,p!H'ԁ@A^Hl$\ل^hR< 9`JޭA4B?AH Bh?T.@B!\)DC>Mā`l$Ż(A\وL $laџaV? eHn !$B>aK+B^3 Cͨ cX\!"Z9Bj\D#(^' /%׮kCC-T@<4 _TD6H!7> <<2l ,pDH#S: 6.A0mL]t`FNW"J)=.rlN ;0d@FSQP,ABR &qȒ}LD"QFE$<[];? |;*ɑB,Cm.p/E&=c; 4>GS@ҁjkl8bI2+F˾^mjL?8./R9f--ADҁ3Ҳ yvZ['~btNJ$3Wqel4e1l?@IȩTAaF4%܆qmjPCxPʮPC+C4?x?l.q GqL2djîW%MA.d m-o; (A^\T?$:>; DT t!Hnb m[H.pN 0C!>P#' `j"m͈pO=H#Cc<4omjK?Ԅ,e9sq8P up3)kj:pC@t7'@x yFPwoCjbJF 21(Ay9Ĺ+D7\TeB1hP߄υX82:"=t(<*@C0B$ha¼D,Bɩ3su|DxCt 'lENHFX2]xDC/1:kÈ6:guCv|:HLŸ+T 7GZd iT 9(aF F%>L@Qp?3 )Ix? _G H \u qOjTGZM+~t5<`WD-+xB4'ɑT`d6{PXD1Dg?;5DkB$PS&l&h@?&&lFIWwk3p'A͈{pA;EA 4 j /0r 5x@IRqYu ׯs8]q7\RD|T{d!'W#=ϡCg>N{#D?%JHA7zy{{KA|ꕏyzz%ͻ.})Ɖ,' |9y1`>aDJ6 /$N(dOVq:̻~={!k='9Ka\Ò"Ѱ >궣},A,9H\47.!/Ar' |#B-*D! 5@75csCÐ m=!+qwMvD)FD%uX-tpVOQ;p&*A FTb~*1N9uR,  ,,|h-?^Cꨄ xP P" 94y H+O 2Ѐ ܀0 yrE!=v<'"19r NSkJt0_;%(yNm-1Ǡ,1dɇ9 TLxHD":q!h" 0!tc1H%Cbx `$ .s+kZ3+(i \`94cHOVlA=ۇJfShRY:m | @qUlgr5x5?&}>"| *,CPaak*,4O3'9F -[H6|8hԾ&uMCN8Y Ac¬䃸 q{$u.AK73?P~sL9a`.?}Bk\2+Cs]&僺}quw\(G>1E- v`XDB!У y[{?Zvͣa.uaT9Ilc"xx B\Gq!vȏSV])ߕ|)&k@>4"e@L:ܑ!{3dQ*\4Ftb9,p>j|B֣-_HO >&v;Z08%y 9T|C$(I >`8xXgC@uSjFCzb*iĊeeO$GUCD{t.xjpE<dcDH$o}ta*;  n&=qTH@Pa&x@MIGUEIbu򉌣 kZV9nzhrCh"kiCh/!j9aA6^] |Ǜz҈ζ"; ޳_+C^[};_C*bPQj.c !)70)CBٞc'я>:GRs:sBlRG,y>"!H.J#zhslסeY_̜E m6^8LO'N!z~7MՄyCnթs|x&"#z`8'p:.#IyҡO$Da.fĎv$mj.mX,-DIJUV*j l^ޢ0nήPTb,c/F#v-`L 5`̄j@mF!!)ؔ ) oΦT p  I@ a)a/A"-6bg&˨rC%(C0i.lA.ӲManD,PBBa(`m"0hm| !;!1"l &(//4\#6R  <10bgKB> B~}&>DAāaad!60a=(dZ1#gQ~.,DdaTlQq`0!ր9". 6& r !bAOpfT"BO.?@:в!UaD:9bhQ#iދ fjJd?ބFdAn(T0m$B>A!2/:#Gf>%9,8!9P6V``/8L?.a$Rذ<-M.@/:Rdmnr ڢTA>9ivB-HQb SA>a'vEaAeAz@6C7"." }Q J<#` RL\k(O i` e&B)lS1Ӭ B@޲ uS.G{ ZaPꁺtKKtKoKŴK1TBTvt!n~e0C2!l!-iL[lӡ/2Ao!2aցBU!"VaU?*D>D_cjPL B 2cT7uT t_ /&CK5OW'Ρ=A&1JPVnȀ*pжZg.͢> {S ES9-?Un1!AyP"$UAR7Tn!*s"& T$o!:A"0-'T%8l% lVk uT+k F7[hEnؖ]53h z !,g-0  *9]QQn^i !lQv$4"T!* "(25o"sR$d4`S%QP0 n8fI óm9 AH )XV3sa p,r99PEb&od-,cҁR!em3.3{G6",n*:DB7:T$+a>!n8%܈>A!+J599T`&aP{9ff5G5>+ xW'7c:\ nww_iP)C uu$||f/"Vs9M%`w^ÆTAn0?N$5AK*b>A2/lC6!2$WD-&Ä ;۔,#W)e XօIVǚ6 Sd~ሞ'=V!#8"lC 7:C#720}OցW~;N<8-?EΦ4*ꘗgQnDcMkGəcM"ar"CS#Ȍ42L23X3gfbM,&o}3$kb+!\.@ XgHA `v!([$A S`*;R2!z@A4veCтR!C5B#B#B!/Pwu:Dǫ;R4=UM}ָÌlS@ 1|Zd!pvħ<ڷ<:TJ@nAg6 ȁFȜ!nFpbmBp ~!A>!Vߏ<ALaު![Za`zV`V!!h)VT! !6;>7b~oUa^!">eahHLvA~w>H,a!T>B=嘁!a !.?=_INQY]#b!a}?lI!PK?"h_P_Ɓ!|(mL+2ʕ,[DIf5|3Κ% ,@A=j4)ҥJgN638 jqܦu (O;˚}y2ʛ-oDv`JlϖPv{\m[D]~.>ۻaĚ>,EKML 4 & K4!d\i=!aEy&&n+e!y'҈2Zh0.bu&\rbN?v-yA@Hۼ(KTdGOE\r?hIfffjfn gsЉwʹ5M(V)Zp (:j袎DMd)YѦ~R:jd)l)jzj*7j뭘ʒ*/񚒰:,JZ+-f)[,*q{l>[+oY:|V5LYKoދoooLppZ{d3 ? qOL1Qqoq0, Lr&r3&JurG2Ls6k J> tBLp2tJ/t # `NOMuV_m3Xou^3Mvf q@! , |H*\ȰÇ#Jdx s3jȱǏ CIɓ(S\ɲ˗0%I͛8sɳϟ@?j`#*]ʴӧPJ2jʵׯ`>mLٳhӪ]j'ݻx˷߿ LÈ+^̸ǐ#KFۭ˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TVi%5ΖqTnZB7VAI)Pjn[n&fkgBd TggЧW6 ũ9S7Ba^zx)9zV/)ꪪ3 3ǰ*U*)麫0+Dc I4̬*tL30b1 LE] ,p3C6 Akア2L-XC 1j [3ТK4p 1DK)4C̰D!5, .b(.(.̲bǴ" @SZ97 .xcFgjă Hm O882_3$8qE܁@05sG?rp@tHЃ G> A`PbI}?p PNb` 5[%J|GHG=rx q 9 'A0ΥdaC=l*'.z,$h:(?:(a|c D"HFh@H@$*}~2΁H Z Δ@N#d&>~9V#PG?І&#bqy# ](BBilA<H$.0Ih0)XHG:2O->1EtqpRMtbpD2^~!'{,W|q%Oօ0?yc|ւѨDZI\`?h'0Dh?DX4_h# L BhC9pVv@F@5cB3 !N Lbre(JCxC> 44` m%C끎#%WHV > AL_ <2jdj'0LN 92Fv:(C-m2(>|lĺ(?[൓0BP։r? >`A$@**DG?X !lO=wV*gsr%p{- `[zO;E` S QU  ` Z.pi e BLUWBe DnP(^؇}SeTxwx@^zTrGԍHS74BP l LޘfWxoOCzE H.R9S45YhՎVBeFF x`6GRl?E;R|` 0UYhvEst:0 \:9RtP\ sz@9iD,yDȓPLqD?Eo@ ?͐@\;%X[hQw} @GvygF Y %fh\? 󓞠@W @8 ȔL锴Ձhe ~8$qU pQq! _Ǡpo')E g'R QjbwWb 39ƶ ^E@ YhQ`4| (#4v@V i{I0 a{p0G\Y ikw c(xj$sd `xhdgapAY  eX5 Sex ORz\P iPiB2d2$Cq^fCl gV BC;H@1$GpYG` k@+P3Ze5p Цqr wyL5` :C0@Pa4P tR^CԪ@RY@[pq%qVʪJJ pـDې5aix ̨7 tdlTN V7 W`˺ _jAXZx0\JrpZǪ]W uPNzYQWU@[_@@B{^& |D.51Z4Eh;u:% u9`y`F` x t @1o7U.f@] o`x:{x Q i jn+࣎tU_2T ${5p[@`H=砮OGtU tD EwTIG @bG\G||*BJp{1 e !hU]V P]a'C! `PDĬn wЅSKUo*hի{P `0VΛի_ _@#@ ;8+kdp Xhݻڞ`F)nd W9ɀY24C2tN7WXup|ϪCګG[  Dʬ%AP@Q׎%7* )6O`p61u Wp Yp~ʜ`4[eAɖ<َ٣tҐ+ ܔ< 9rG G0HvTi cNKlG幩;,ui^^H MB7ǻ, љfVf, `۷ PS*C@HG}؅mL@ eSǔP=&vFbWPSj֝t AE88iy,qx!@ cUqW p dy{e^P ˠ'ӑo@iP qp; ˌ-yW5T+M TU_LbE_MS=P`CF}edFnm`` F` preGRK`t ǀS8 WeP[Ii܍&LCnJGPP20͎\A e^rQD,2FY G|Eشۻ=G `tRO$JӐ[q@ 耷U cpEK҉_|dhh""x\S ?`c̓e@ \j$@A+`Sr `TP8`A >n v`m8hԩ0a9OU[dX P B,a]CN[Kg? k:HB'V(ץ)Y Yp j0 vU݀* fpF]GtP @?4 `@PB"]qa-o\}飑]EQ#υN_c`P o\}ʼnp u>0+Q90g0 5 vTFj g TȎ0Y,Fr9OpbkE7Hɨ&W~@H,@ ϰ @ KzB qۊ24 ;pM ?pNl˛G SA G 2tV\VRo)!\qUP倯OwS6iQ6&ӛ]W{ p @k+@@<Xb*}|g^;sEw(֣'k"M}b%L4UΘu*aZreM8%EIS&E3mZD)>uѣHPTUR>(A_e/G1ctyK_veZH^JWO"EucEҾx$jtGqn-3dȜ93gSU.#G|]7 _Iidi/͆ ;[E:ijtէc´ISHgn&9Wة:#wu{_~wY6ʔt.cAp ;Ǒ?i-`ۯ\tx~.vtf2HXlJ!8t$.YqllNYgIAbl$ldc LMĥ:dÇ>mraλ\PBG #/'F kH9*0‡raU3hR4" Щg}$#X`^gzd@Z:k-JE*}acD`I([{U7^y'B L^8`1 Ѱk  R+α4 R!Z큈)f=%yw Yc"fpQ[d1:PlTac@GJ6a7;}x?pQ+ "er1wO1N-v(܂dP%j UA'79^RƁhȻwsqY!T A(;lgVNp%pudGxރ׵F>y \F Z t_K!6g&i7֟z汧2jNy*b'h ~0l-BX, PJ=:* WƐ @ *m̸Ҙ*!J@:ad*0>ISlA"}$/&0hDasc ihVV(SR = V@ьg V sG>< B@ lʰ \";(؉ 0?~ '>uцV%z\oAP("| *5JQDXb2αUvXЊD${a15b1S2B,)S"O&I~#`(>4} !3 Ogm&ïՅC31RO<-#Y`e|4L>ؑ,sh*{<%AGd`G=C<*PA839@>p.iJ)R>+H< `CB ?4Z[KԺVխoM1 @YB!,T5Y`Y9yCC#ttl܆(V1y}7С!:-?-tTVBY`J2 L`d:n jpiL<8F%T,H*q C ,1"8vAOeG'C/HA 0P=Re\z2EM)P2H~+Me79rTK̚iEb$#]FueK_fn[URNj HcyK*qt2RI>=yfV)`L\`YGV= x쥼U*R܁sT;Ǡ0B(aOE dV\# w/#։ '&(!D HoO֤k`qhᏃ#54<d&*ڃڃ)aŗzr%6Avȃ5 8`sƟE*P\97p#zv!R[J7y}=DB .<`ﵬiuO)wZTEOLZ/G,+Oyk}GX>~i@Du [ .S,:[Ex,}]T3 a>tep`?bAZ JhpE`OR›8`ӷ\ž=`CԸ 3%63,9b;@ Êa#pD]0H1HDO8`P9Y0,*Hzιx l%ʘ3A<{ >~5@^C#q c؄HO8+X+j1LidH*jУAh(FP\ 4G=0a\|IH~b6 r(Cdt >8:P-t(c#ihHeQWhM#?K+ xp~(%>yH_*@*E3'rb` C@xtJLhËAXFH0u`1a<MXݺ[ЇJDt+reHGu,ZI:yY-?y4:`8v=)V}HHi&sPQ8'WEPvAA~Z%P̯|SxJ2хl(KXiN.Ng"$=|\= YPzX)YZCKJ'|ۂh@$LHkG, ,ek̲%qxP1il y"qS{2Ф#t*G0q٣;@`IhhZ@C] xP8b[܏4Mb_s7284&``XaC $d Jphs؄$4#l sTIL1xTFUD>P-ƊN$ =%esIfnVB :R[1{2NCP==!I!wM*Uj>؃dN$^gS\7ԏ6΍fyw:(h5> u#FAFR+n؍2j`3t@X0B2 /6ٖ53: )-s1W0=)+q / 9kSYh`*~90 lGM~Xq!TM+0I-W(x fű{j hN8.mq@[\g5)~Ƭ Vؖ*)[V`4́ X8 Tvtn 323o~<У`BPGm܄b NwSLp ^EUah߆CІ^ KCC/O e,< t#CʸFCP8B)(Ry@A I*Hbb]p$p%~:PeRh$6#\|ATgs1PKpWA\v;[j~a0q$~kwȊtu݊v1`>Ԁ90@QWW3q= 1Njx!A (j0:_Pj hʚHLi } B=z$'upk2>(`~>@ℝ4"|pmnbs\xHxi#*y;c9mks l.AiH˽>ʠXl:|ߏ̗xy*8Sa(#V&{ɋ{tm(^”3{a|&%z1Y51l/mLчx8pHaé$a~эVav}|ȬQƌ XȰÈQڿzڹs#Ȑ"Gg{7N,1^ؙƋ?kXbT*44n4„ɗoƐ&#)ɎѤYwꥳ.ҢE2a”.^ ݺ4-_X,DIQgt.ТGb:>uWK:5زaGCxغ‡}/ݿrL"Ŋ38hD_EN#0]QrœJJ3_7j;߱U5`ov?'&|ėWzm"PR,3? lJ>xӎyL:xP1u-B iTՐ d<-V`=R D 9%QDKp/)yP)/1HU $089I:@ ` JIHZz)]8؉1+A+dqDeVQ6k+V= ;c?Xn,gJ;H&"?Fžl;X {H!R?L`O?< ˏ:Is?؀In "Az%W1p 2 Odlf%1I XB4QG9Hfu6?|\v:Չ ?s2Cl ?#cJNl#TϊG' @-;?F-F5 >O>pAŷ/p EA/@ 4-G̱4`.a!e(!1`èCЊ&$ Y#aRL #J!Uk'̱}v?,ģ> Fr@p`ep9G&餀*a__$rу35 `F@ %Dr!,9ɸR94#kelX'顏[8R*c FU"JKqr}QG>X!4a q8BP9wC)yF1ސ|tO*X'ƭD)Țt(lA h|aA+~P>D7gR4IŘBMɰ'nG;֒p#6#!0cE>. g3 7P >2d"ajS4yX.C@T8%PK$~HB rFRC 29hG>bEh{b 'S Nj&A?D:M%ŋ4 }YXD=vˇ:PS sR*pPc3Bpe8Fxg\q;`O֩!`D C-L9!jJ;4!'PR&A jc+Z8G8! Y8d)O،a!5ɢ;⡎IlAZ3בx#w8:衑tr h@@ANnVA I x \XAܰ :2RP-:[#Sb " iP\4T8% Dx#&&IR7XщGR%5-P 7`C11MYȂnƻ89qm5^=摏KK8$HSHA  RQ# 7!&&/t{8vS_ ū?d;?T%ԇ>A9،4LJG<)4>th^#@AD), 4Y-NY*B VpAZ9_@ BLϴ'!@ |N 9SaN@SEM2wBFׅZ:|&`GWdiB'0 t}%ѓ;z\?L_/CЁ6Co}AĿqXle"!I4АH9`ɅFJC#@EݤQ$) M"YTA@YA. ,4Pڔ\9М Ƹ)Ce ` N)pc 9:^ƐXfPdB \Z -NtHTp]%6B#C+\%$L'pd e:, fD9^c^, F'TL a>&dFf4>.FDi*uD@BeV:TL< 4C8(32@6)-q];CZ'{?Lʅg=J u(>U~r@!B 4°'0CrS+C=È tE\)r&q ?<4hsiСy I$֠fh)>!(8A9`S2efFl?;Y@gpЩ{Cz )C">41A4pFo'.:Cl+PlllrC^/TG N%m9P~ TW]?|]@ Pr%ẃŬoyD DX] uW~B2C?4 L<(Hq|hP;,hq)/Ly4¬F~T#8ˆ']8/0 =ſ p-f?BPmHR>Д[fͮ@BC #+vi8G]T F`)"r>!5||g2H㍎{6|),C0S@F.싮@V-T_eÎ f6 )Top"p];lFdy؃SB0"< I%1 8l!HAKdGh@ :-e-^e7:YKl,d=t!x9<9qA$UC>08Hы . sVJqt6rR+FC2Œ]Bi;!ǭrh\P`GyF d t>h9gP[ 4|jA??`L:d8`•/^|(B2n KH@STcNj!'I݇1\G+HA}FY3?(C2̠Y;q@/4A9; <9Vk[H,.N49-l5sԃD?\=9k$a01d ʑ< 'kPah gy²: _ 7I=)D0Qjzvp.MGg=618ía=Ht>@,<=i4}.?A# PozB@}ЁIqeuH,M.cj=l';Т7jf%I @#=4x*uêޗJL'n"{łpikfr41Bk6'_;<;-@niS({B/&bpd,k9gwgfK Th;i~C/l4xC@ H/vbEdQbƉݹ:yS':ހWUzE=:hQG& /y2DkW_>|81$hQƋlٺe `Fݹm7ݷ9rԁ=e1Z!^xA1ey_ȇ`C^.OZOW|0?_;|-~ ݿi<ɉccJhHDG~T-޼sQnw'=}(=c/*#h@Z7(p_P >駞vѭ=.J-sǰ"zHvY0{.ptsX" {'|'tV|SF p-HC%\r'|2$yAs Iˣ dht˭(x!PK^p 7݈Nb37iV8×q=pG!!AT`xHT4t@M}5PR-SO8`n~B՜xZ#ʰXقrG*rXij񚖆@T- -'3zPaOFi2\͗Ɉ[Bxt#'#;u.9Su&j7DhVGeQSG]Y{i~|B'D9G} :d.z暑*R&$R@xxXOrH8c"T [f啅<.\Yy9E9~aǞhf a C @pmч @ԒEGNBQ&evH4D\Ү8!~((z#"\ =UPuilASbEX#VpO۫A G IzTNq#3R)^)1`@xL,)4 )x8L?ɀ 8hD5~3v m Ѡ,BPJԜW[R19b)@ =Hf@gDCP:"SxA p]0uSx9Ń44)q*L=`r` U8CZq Mr҈m;xu:ͯ&Х:,VkFG3^z*S'` Q\vU6hBFn~܁ z\oTo::a}t+":y0dhu5 ,ZxdbgU]%G#Jш _zd0ْ.7#HO ,a(8E 5"\4Xf/q%@SP< ۵c1Q|!Az6shP=ޱ T"T=UWN9 HA e1bW&"G7Pp#sO?11+wm=H7H;ƨ$#@I(HmߕBCfQl*! C`<=H>0Ӆ ɤ|Q{AG:+~hs,7>rU6%C @B=@m9xA6aHw*~51Q4@}ȃ9q >KӀ+gK8`aCTeD"8,! ZFzV`V@ȼ!=zAt/BabM%EH:)BA6Bh:AF$.:BbHk,, B.b^- IO^`:+/DV $-000vk.ڌBAg p`;ƣ;mp` 痐I t@8ba C @ ƀ'6K.7%;c?,?R C:)ځzdN* r t^PK*DbXv+dяQK11i7 8H1шT`iJ#xQ-F$(QXL2 n-{1 t/\k17JA zc\~ED#7 c k ʠw0Jra\ N), 2!4nfL XRnH(}l ,7N1zR-LMZ-"ي0!v.*.+ Ld |g|II3J0*3əe&cKC=)I~<"E2I 8 cW,cl7`x9A6qAE|& ,j <e욎Qsa3G؁(cbb4ž &+1dDD.iBb' b"4B(x@fsDAsZ0JAoc]XGTF 0T':!.A"WeæX}" āt WFlM&jw|cW!V3"l\ϊ] zHAl!: (.2dR3 t q:cTvQ)%Cu.pVTpI@ pώomK0+R'FhGN!=Q1U%U,(DF{6 D(IIzA .t ^*Rh@ bKЉ4bΠ` 7i9A%t"D0 )( z5ݷ1WigAJa1>l(ҌhM3SmaJ3B-T`0&aBZaw괇K8` 8 @t7S|NHlʁT}}A2~Yaui X.wEc%WXAA, gl5a!V!;3(ir h!,fU6e)JҨê`m"!}kĬ7!W$G2sr$T|@ VG[Zxb;BNir0GerdIӁ_=2jKV`ANs &a!ҁ2kFNg큚?qa6@X`86๏XkeIZhb[dvlwΝB"Ӷ[@6 D"x" G׻!p 2lAxbzu7 c8)K+8D)oq䟗!E=p㛉b"!&bң:lEr*V4U}LVdO?"Nm"L@ܙ58)vɀPڅ+4O4w0"z cW zg8aJ2~JaYGTڡh=,vF蘮O_XGB& Y[q[K+g& fxfADf⠭!YBDR')[1`UϢV'EpzKAB0d7.Am v6Ȁbat`J$`:X7KNS?;מ a+C!Xaf,Q~)`Tp\X"K #r$=>Cw!J© $?sq9 8 `'\n+'6!{:ZN <nER@X Z\A}A/vx̉֜Az0V͹Au#BBaWf`'izȿž0 z$nATAV!mQ >1=4 vj\aY-Tqң exI~ e{h} va 7!~ ~ v8((x$ 8ū(Bzq6|7w=nH,l.ƛT6a*(A+a>AV!A`4˩#vz Ǔ, nn0czrA 8JaU dO(P-H Q=+7Lv{6|Ht wH%23=;ӥ0כ:(7^!a O}Io$>Bb an:aa]*TF /sg(Ei Ӗ ΁o^o]K~~ u1MBX$FC/>c\]CGюί=Z󧄏0ĉ+Jw"ƍ;zh1ȑ$K<2ʕ,I~Yv!ϜDܽ?zLW߿LcөTYo޿q@eb(,%M2m:[%J- T4~"7%Ow֧J)^XbD$dNڒܼyQ?93=znʞXҩX q 1H RRl/h/#7DЌBq0t{~aU1˛/"Ŕ3WJǓB?ۢ?tTvH`,D=SOMw$;U PNedR=DGM)}b#0%I6bB&ga"|>ω*91`)[IUL?ld&2g1`U#=Ї%=<_F1C@)U~.GHD'_TG*Sghh)?A 1j你t:47K W@T`PK,I;QH"[?(Q?~ Gwb .Sc: [o͘f#YhLT:n^h $g4) l#sBN?HÆ/ȳO>~ 2Eӏgׂ@S #a b%S|/ 9|K \$jI|q)qVMI a)Tp }x` d:d5?7:;r~M Ȃ,$CV2ԕH7p_x#-P"%ogmuI8T%.v}'sD=aOB܃g 9C9mr>Se&e=-0G SRY%X U)/>sERaT %J4 ;A"#>x% 垚tCVŰ@ЄfȻDOȂa.6L CC:~@hpB J xj_NGxX#LH2pى]s@P' g%N #G<G#=l[L`"l}{ H@@K)|/`J#Ez)2a,7!5# ΰ C&5L;x>L!HQяY9NMцIV̤f6C2q&3L Qi*@Bh4́H/0 J8Z{\* oE%R[J|k K$q;oVd- {DTbĈ֙ KO Js$B \ss*$5@=Ld5#ȁhHU[qV`w KLaZIsqe c.XNMV 1̌G#pxF"踷;-l@E>QcQd|-޶d {UM paʅ.#$rN']wCɂ±dCfG5@P[+,~jpKN{%StA26~3 CrUIE[&RYڑ\ޅT IGڀ>ǁ1u @w-z5gMa=7P#hR3DDž+gc'Yq-P`BLw!F`-p{PCSp2xx$#o p;^stxYsxH>T7DcDq&0*A>~!MGW!ց=TI%ip=PG Qs7@!yHu>e1r!QbV8OĄur(UX%ZJ pyH>8 7qef CR$gv&! w0xTRߢZQV)G6/ ׅy=Z g+sXQBk9 s1 &Wc3O.)97: L WI~%ay*Q7tdB"`=*^ '#kH7P8mB8U)} 8mWӷ7-a|XMtthC6 Wp3}|9#Y! c'!bml;m02ag3ag0DgI8B!kP `?FYy3  ސXY\` #5Cfͅȋש܅X@zeT(^H#r0@ OkuuY9@S` %! *SPO7z54H'bK_h0j5nџgd P(G48>u[pIja*A=I6FPIBq8:Kj$a0 |@E1q1G8yHjĉ/˙#) 04=ڃ1Ű1Eeuz)sAtyfsQr{ PH Z T0hp /`j<I >;Guh0s%%$PB|7c '\5 p } p RNhcגT5qJ J@{P-ue#Ѩh:T`eo:p/L:@QfDT1=Ee&Z*!ei>pA0CA DO 'ZE Wsy p) nIG6S7&)CO+7hlcw }P\0MBF)* JcGBQ{?}+ג:@"l` `P :e p]A NF:'l'b=U{GZ}v_#iy/@(u+K?d$Q ѻR3 5gąBAK:u 1# N s3!t ٷ  Ơ 2R בMFc#C R}} @:,!H 6]0 ۱MI.SPMfanڡ@ӏ d9 p8+;S2)pH5td :?Tvwo`cQ{aַ0[m }q / y⃐ ] f( L$|783F)&Z@?w"9wHy)&2Z5w,> HpoO;#}/v_r-0P?P b8BQ }J)`UrQ0 P MQ Bؠ >=`  C?!DR3 pۆZ>y0ԧP#`mS=0h 995]{bqVj^e\4PZ˒R+j,!%N\Xc $իc;!E$YI)Ud˓dΤI3t<ժ> 3dM(CОj:0 Cܿt@%]H\Ŏ%ң* DJ(a$RLt3Ԗ/MTI۽nڴhuݳ{e5o>zgGaҫW^6g"9VHݼ}ӵ|ҽ|H 5&nޝEUKcXT~ {z)*_Ȁy{@ Fjj2B*(g*$ɉRᤅFQGAOA -l"YN4ɄM1LtԤGH#20}Iv1#,q˖g6!g4󦭸D#tgS8 "!$բ>zFQB%w Rtww?vrExß2+}{?zDCHڀj˨MBsĂ Ҙ\tGjhXGN" 1v39dedT(@Dg ;T`,#$'`~p&0J2d )#V<Ƚ2A)G+0-AE9MYpn%=V4&wdTn0X?<8 ,H>v$]',p$5A вDÄ= >Ё 0\8ƞX+Qxd[,X%#_ ~bʑI?r pmڭ4LQ6$b!bm1GYя}ÀO_nJG 2.|< u4ӕ Ljd{`ɒ|r@`O0qhj@#=cB;HP[2&kh*# 2`?&iK9$ "6"T9ȅ)(ș$!$/* e{ )` C4 x@؂SC{s~ : r53Ay^8zi`ch2B`=,r/C:P=AZx@’3:TH@H@R8:S87XXST97@PPV *N5 {$"#hK/8)ȅ/l @pF$m8+FKH2B5{XB643|G(NȤڒ[3yrȇ-#īΰ˖P \O81l?W%Y,EL 1^p NPV0xGs@cR yT1))N-ٔaK@:E Lȁ=AO`,k82H)#h'H@83(k@\0K4(K8K${ IEty,xLN`A@PB(3=itn@Hl &i HZrd *+Ph R0xPك0!*@*izՐr|(9Q.mY>2x)@)28 RŰ$@.T48S\d\@H4@'8$<$pU7DiZLx=DZ0!b|aՖ s}̛)!l q JpB?~UtDV@j(+00(=ex&i8мX1%! Hh>xHS`?KutĨ]F;c5,9i89 4@ <Z <%<*'pp>'@ '`3@%u%:X 5gPH‡/0˕7CЇ[VVJFEЄO`\B61#$<Á- C&0+]O:ZX%8qsي,0i >*:!S?[AAHݩU q i|չ)٣%sˈh#X@TOAPJ[=ОA<ҽU„qReU*;߂xB2, + ]t8uHYnE Pl8Cih\bp8ȇKW%Xd)&7&P&,``X]x3;Xb*H]oߋͪ0(<,t:)>*]v{00T5)Yh"|h4x+YZQcd NOP 8p2Gf 7{`K(:(1x s(h޺Ki|9OW*K/cKM'6{rcٙjKckF<jvlN[əiC;`uh= ~Їpf@hlu |}X]epuR\wpi `fP64w<5(tg v| #=U)sh<=j@ ,ɇi8 ߟri 2|Ha&Ц~'4k߅G*$hrhI0zhsjH@A"0vއs pi!5 ZfЁ=azN+؃7xNJ>+.99^kDnMɇiY"PfR :sx )xG@c>ST \uu]IZHd!vm{O3h1 QBd; أRb!sOer!9He}HP iSQ2`:aSL%v9[ROÅIMHkU=ӐE+3ޒ|nOkQ>Zm.Dm,D'K6wO'DkSMEs9p;>Dд!>+ +]Rt* c3IwH?1BR)7}jniШVWT,,$d0 ѵWUCNtl*)c^Iƃై=xT !?9xNDiSQ?aXӪhQgAT IbT|@E$A| T A`B؈ Hu &1b/76Mtm() KĿ'&2GESx؛tG0*~ABAt0Dу%Pxͣ@(! /QAIb\$9QJZ. rL 8G=恙12ME*HbWHS,4,u@ [1Q;$*ciZ1vc9G"@p9_R.! Q]Yf!OЉ.Xab Q'jiϖT!6d>A)I5 /h4 }Xj *Coi19dviQk؂#\J>rb,*LrMJ/]ja%ia 8<@y" S`} u`jA2+!+@."i׎@38d~iu(b5wCF&}=ς @KC RR.#Bb@ے  y@LzHhƇX-iQ#M[Z ;sLʅ>sgxr= B(p~^2+c7TkȽ5yrKMC%) oqa *Pa N*p]@%%h`T yA r73ӌB@<d<ڥ)B +sDM0d3VxX?s1AP*L SxBΰ-R*aZ'T&IDqH.W|eVH3SqeH~0^0aF 7%hKH|p>HE.z3Dm9؝nc" &g2#!@IqϕJͽ"8$88$qzX9S.A jT<4xtWBg;fJ^nڨesdThf%u{uvG? Q9"t ;_hũ8p K 8E,[#@%  89rHȘ=C0j(Q'"ORYHSû?nAE,IaR< :!;WImfJ=r7VRG7qAZ:^4`K H9XS1rQH<vC4 qK NQ ȃRstbJ+*[uPet#?;ާ_KH%wȇ9%7&fXVA (>ZpY XA.%XB@AZ*LX %%Q(U}KNƒYE]0I?Cܠ<A\HVO;C6H@|C9C۠ˏlMm;YHC ^XA.L!X XB}^ ^z,WDb!= :LY<̗rd!0i(L>PDA"C +H( =CL$\'T4L"!࠯Ŧ@@ WLAB, X$AB$t! PA$UԈT:P-CK#/HqS$6jS8@&)\@B QT?x8L).X!ePN4 -W֏A*,ؚ DAXXECEvd;8[*%F>TG?LLrRn,lGޓnCCJB>Y[dFL4o?Xa)f=!PPEAT p%Q x ) 2U0Y5C=ȍWԍh%)$B$:WCH5D]fbI\ Yk :H5<'T@Bge  ,TTa,eAZXx9~܍lps2OlC="> nڏE.Y y'0'Hx?x Q_QؤЅY@ @H=='ʧ?*\DXZ&ZT :ͨTBB)4?Ž4EF &y m!]9d= 9=\)_a֝C>+Ց˝_?@T@MxiH0p#H&0.&K!!meH؂Lc.,,Kb }PQ|!%lH?Ё!aN kUm=FHݨO6!JDyj03!<\B =tlnp>A2ͱzP?́RA,)!C^m݆@BՖc!uA\Xf(.pHD-k94%pB?ԁ@40C-ePD9|mٱD|@X5"d ʡ\{iTpB4 .@|D,kɈP= $$*R>kh垏JT!["4@!\C T==cJ*Boe[PخȞB@X|iwI?p\3˪?Bߩ䥬njײO>| vԝ-D)sJvpC{^C x׹R:/0+ K<Nyf\d@AM4w*'zSX2bCT n;LB9dݏ eh^5ہtCT81(@<7U7 :Z72LL3.%j.vm MpScI,py]j[=٢4Ÿq'„g,eN?Y+oc/m0h5u _+r,Jt]2L~]džaSv^vAQIƑA8'i$2)rReDS]hA6p<;\(p?pBE*19fo]$E@DB>d<E ßtaX.GFzwS`: ?o`5C/BAP`@W{oLs06ujTSVE@21vߴ9SrFZkٲv "dH嫇T{v+Pְyqy7v*ZcCP!X- K:~.]Yꃆ̓*Sh>3,h&Qx!k* `t9?vD;*pk=v;iI,2qD/͟5R'|8K=H!ɴIL z$nXڐr*Hg4R TTvd"$TxаuD}dF0~`Td*<s'zᇟkeD,!X1|a}a iȑg#;a' +{AGsgPc&Ȼdr$E#'7ObL]~|tr=ESVXuDlt)gV XxA8tqY[e!jvX20%G%TR%{ 4JlJtG;Lɧ*GYuԉrx8Mi:Q 90;;*GHAWu!mRH^W^9·U) GGvʊۦڳD^:/lUTsAn`ۊ!hfsYz:JbXX rpi+H失SCdC?AJ@b Ak?<vծ A$ग़ܖ#]4YFM#[b5;_ԁ*[u4VE ^0]axʊGF4rV%2`ʖap9Pi_%JԿmT-R_Nٜf I=慙B-5r=WZΤ N0doXcΒT_1ek r|hK DE-3sV&, ŭRD3KwWȢthr9T|HTH:.cR'~= h?C8.&!MT%Q |4fNtp&0áf2G@A3j>̡gop [L(ŽV C"߂F`;8-8|a@]Gɇ'@Q[eO(* mD13h3 Pw{Gh sЁ7k%0AI:PSd+RGT"F0DS%| cC>"/Uf;֪ EP*>}"L g.v8td!1E:%kȿu+Z ˋ01 4JaDwPA?pLS>)"@x#*5(Tz˛A .흔\g`.@fz$a 3yW+@=exQUQ"t܀ $S0U)BV3{)LF@_j@Cz])WY.)`i@*7~ Qyy3I ʑCShrCht@ OP_;{ʛfҭ)jʖ3t{W kVh.w, E<]6=P.O7/9_#ǯmՃY`Ug&z۷E)@rP y@?i;9f*YkWwN$)TI~[X=s)϶8K: A @؁Pn6b9ێ8:"Hc#aEBo# ٯO֌dB jFΧk-OoP! ..knBΉ*PA p f4LOHAZI!fL1|(%$& P$l@f) #2 xa  ! Ya:Dc8>b1΋f:਀ $AUΨ).J#1,"PWC| PT ޅf1Q/Na H b`7XALDV`^le碁 o Nar`f  b=#T/$at wNHʤJ . 8  4D$ " "e!OE(IG"vA$aqD @.$$x2Sj*n# !tr(_.)!/Pnm " / "-~#.r`E(V(RvnN$d2"$!X!%&Pް1v';rm#J D*@  z ."9 4@B1LADJ"Rdb /h `Q-V".v< /; ^ rhHsb@I a^kV@yb(fn$(p0i2_<2pe"bCnE ".9-CC!<׀*+p]O!x~!Hb.vA Y e(p߮HcK rpͦ#Lr*fH#+ɰE4(Q<g>-uRn.n2$`@H>IA x ܠ b z$8avKXVI  p@`6]>j!s#^GaSc)gJ PJ`R ;L/ nw%7x&AM(-a:NB:E!ta*7}cpj*(vDDF=`x h   #U  -^ ` h &?2tژV#&!MΡDn8MU P! ¨5D *=|yk$C%ArR!r虍I )ap+\(#XR VhFZ>KA b@1Wx[@3.EPJJ?Y a 2 1PV%4k,@sc4)XDz,'6A8m_rYAZt?a!5yn:M#$DzHy<[VW tD(JTD R- 050qX@.Mc'k7 ,Elx'H#wr!z#vYy!abh!!! yM SaRA$\㼯 g `ЁթoG B j/;T#<*J EWQ5kT` <jhǍO%p8pաUFSng^eA E⃢7هǼ]'pN ͓-P1fS!Aa ]|sA ;DEAL G` nB!>cQ29 M#* ~ȎuoMH:H,d 4r@"P#K5Ve^~ 6!* >= &!@L! H*\خA{ܹذ{(VlXo^KDTĈpƌG 4RLʛ8sTφ5Ε/&s|JJ X`Ê{0|3YxׯYǷo_ss}犱/|WckrZr:ձu g@u ³%ξ/J*$EөR'MУk„RsP %Ta^_O#MDXrʮU@Q D 4*@E$DTKL`*Ad;޶Qw 9/J *9nK8A9wANMI$$$'ɨHc?`Ԑ@*D=PU6ڳkGr < D9|F A =Ryn !0G9[Guz=HH*@dI5*JHnG<^>qT)>1Bce%cd'1:0zqmK";tIla&LAvJ>ry#֗ F|y XdÍ]NAD<.H8)P0"RtP2H08@?e`"7l<լ61;ⲶʓIl:ԑg)PdNу% B*p<+`I`, %@\j`,`@S-J*lGdVAٝv]`D11z4Moub |0dt)3(oN <ѓKoܐt$R .XP0A`y@ D8@#@L3Jl39+ܐF#c3tN88QكI,;Y#X+$< 4 ,>@c}%rp9TIu+ (cԜ4B@<>X>1)Է%ew'ݦP7NDFPZ #KyLu`-)\ c+D֔ D2D ᤠ ¦X*<!dN ҁMWAsj>I:ʁh́2_ibˉ' YHCІL3.D ZģF7I/TaK@%h( r=DdE{]RnpHO:q`#r]<G]:(%8=1#t9O Í Աh,'F!!>Q f[ ل&qBB;8zUY#KGג4e(e wP. t &''w#8ó#\)Q rf!z07Z/偔*3X/ (ԇZlǏ8  SHjNҤ D? ۟y J)@|a]Uu. o Uk+p<2<@TQKfo<(-a@d/tLb0W1x  nȐCc6 f6pQ$1 pv`@!-@ | LT{{W atqU*!C3A^i+CXRuO@_~sT@.؈d.d*@=p_I!gu0KaB1|Ea+C\@Ld@> TPmSsMTbW mʁ āwStK7>t@y(Y `R `{`Ue``t J`YdS+|`S? Op3.d@#14NJhLHro/^4ת P z `4|M\0[ W?[\ĕQH,TQe8Jlj./4Jp  K1 W k!w0|{ sNiY@[[Pp7pxA=p /p p W ߪֲJ`;aBu!UqZG \G /g P :.@@`09q(n|A$F ֠HIa "I0:AyCP)\S._~lĉs;JtC:/KGNJK8W3%0|?eJ8(ImQ*V 8p޼~5sX2EH(Y"%K,cdUtkSH"S 3[>UeL YɒT(Bw;\pōGr-g"*H;Srz͟G8sy;>o9u[PS~0@$@r!4F@ b /!KC7pp6$ *AVkiDA {쩧}~'jY&X^1eQq<AfhştK#|:gzͷ̩5 lԉd@D}w矇>zxWɒ9ȥ πX !#s O,9@#2Aґ!#/HA>Fao:TB.0Gj|&3GqN*RP Ђn'0hk#QRp2j:#xaT\C' Qqf@R.A͛^%,HȊh@u+H zP4" c8s(Dd"Ac9 5@CJ`/P PS ,$\PX!H!WI_z$L!2 jPٴOX00 ZTƠ )4b>[? Q>m=/c!#"щJW(pv\#A#{1#^h(]T8 r@:@C(˅ԥ/iLK<`lz}h)О|^8C*YBlXh!:4Qx#'8A?m\&` t&b:  oDI8'HM` Xq sL;@P! QkGy>ByJ;(Zη)Xx >vZ6׹ϭ/t@ [T yH| 4XNA L"UY\P00C R(k, ϒs ш\?쁎48>$BC'6aLd~pPqOrQv˨$3s$NaC+jqvLb |e.w?4#8A2fhC!Bkf/@^ 4W(E#<&t,w0qj^G+`1tv]4U20% B 4#* $6I?bhzy?s0agk@cРnŽsX;v>$120d\(˵\hETqo^'g Q6]G:D[uplZ&x3 eT|jhGMHҏzA:a;wVxC]yuREO Q Tm[`aһmoTMq >>]6v0ڀ's2W{qG "dL0wQKw {HxPKx7y47:D*`J+<ndaXx4@J]+,1XW+&0Q+3f41&08G|y;8KyʧszCއΝT;vmǯ~(,: Huȅ?8+0ć 52qv@!s{BDx"~ PۏĩJPB,0~`  `?y/i~A0)rH) BK`#[ F (>ؑBz Zh`谝+ҭv%HL?01͢yr-p 6! 6tّm!6pQ$EE_H6yxZs=:hCX=ԋ2vY0;B8 +bFЄ3Hs#ss @Vh-x b,E#<TX;yGs$P:&6H㸶pz190/Vx!%8~ptIs 3;"8"5*ȑLI۠‹d<}hۂ4Izd<3̇d۰fʤBܛf kü(2 |([Q|(l~ )|@&JMAYj1="?'jsp7D=t2s6p Qd?|X@G'DzA3eM6 L|Es^`"sT iT(K"l1AESQ5I}̜|ڇ|pxA,֔tp sXy: :V/PTX5)0@+,Z|1XCX'}r8UN">);sܑ|0{8|@̂ex3C!#5yT,͹R.M<H X%^R,KӚr ChftiR{ʛd|YD}rR ^,Qzs8 2pLӊ1h2&QZ9 HU܈hP$8btP^XzrPċP&;rD2>tqէ'GeqNp4/0UShthl"Ղ9Al؂61 H䀣):x1,,0xe6tu5F|M0IWrII@сcK0s8=hOBӊ5x*+O Vºq5}u |8jK'pu8AI>0%؈厤 $?l{ nih@| HA -\AicЁXIĝ\~8\xvhYoYAŔkȇdx524!:؃rx˥A%\u0\8̡A-\]^t*<2=^pIX)m2QI'M\qMoMG5tlJZŜ{PcɁх\@iȇ@Y y;`X (&ּ@dI.XG؃)#@b}0HHmۆVGik+Ì2uJ];l}b]Kd48)2Hu+;qhRx oZN`ln : BI~)(O0(|8EW{r-Hx0B8Uq{7[Kpa5~CqBʇ ڋh6 Fy Ex`[cw~ u@ zÇI@/`S tz08%h:X"dbBU MrPj`,OVhr,؂s8yR8ŁZ_ (ZJCVsMuiM;@pfl(< -^zӊlx%h~P]f2,;RUM(70%](F*/ZFp\9 ' n-")"k %mV%Pt"7VAL y aU;癈@>8@6g~#5r(2^& u RN c%_)I amF (_K@G% B~(j؅hp@E/zъDhm-ki!Z0)مY`a&;d{0LuᢲQV\ wܛ\/ 5Iw|5*;ufUv\|sX]H^b]zDG·WBXG(=u@7pux^e^wwtڑӣEh8Ym/O-M)V1$F+ܰ~MY>b7m0{ ;iy"s0jxbpˊƝC( 'Tt}R?$Ktsp|FxK߄s;0sj)v~8Ia(aF OHr6rVsz"s8V4aӤi&d|"8WRtn570i{a̓-Ȃ<ٙIh~x{n0y%8=02KV/̍2Зy}@((sPsЁC/CO2o~Rt·jP#Ov „ 2l!Ĉ'RhbCuC}h ƔٛOҝ|;OYj]9GG-yK]4R}s.>MU:G%WHb#ml:ua#Cj.03?%<_|[ljdĊwo-Ȓ02%tiϿG.m4ԪUϋϗ@;Wt b֪c1{ PR4|լ\ѝ}Iª[Gczp?c!%x")=M*`NI`Ȓnя9 c?s? L(I p1tO9cO8ؗ nmc=tZ& ib'?xA9s`jnu_J<2(Q?hĒ= y)IeN3 $@ )D_ԃ" ߔt/+*t@,#^"c=QÎ?oF!;rtNS>fyh+@7zЛbUAҴH>cy{ sE):N^ši:,AFSPATLQ@2LRUo)lB狐KR:\.J<+4MGNm6F[ ,h:ܑ?Q?|8?c -,Ycڝc*pA`x #xj'^b{0?\:؋݁=B ){ d5SIF]A;3J024[4Kh>[}<,Wu;ԝ5 #ӓt?J]O:D~>ꨧ ȇ<(ť{zsuނ;&͚ jv/..igL+7 q)@*X h@ qAPRÅ,q |,P~N;YJ_(E) ofTMRQ * i9f^ՃG3!8[^ 0:cAر|Ae,e.( <ɉUۇG "}15<–b<)RGXRԠeAj`Ha~AFr :` 8tmNoޔnوШcG5V1y<sGѰRh,NP( =DB?Ȉ&VaGe9>2f⁌6liYBs\ D%B_S8)Li\*0!ԥ$P֨L>)B9TS+q>-Ĕ9y7 9ÊdFN&zx5EŇXN" %H"$sF̠!3l0k0^`D'qzjCЁLj^:xeoK#t:Fhя8'$V#Pmg\K7%P*n=|݂ 6CvVU tIRJ>_1*HnU;\ > )E~Yb&(=Xb*|O =_y$-^-~@NR<%tЍ19ȱbDU>4CQp1MTS"!;8"I aL$X2!0G>4laWeqa ? iT.\U)(G+,=L32,0\m쑏ԭcavH=:v`~!r5m_Ɗ9v@etc I9$ &aP azB%:,H xHkX4 )ԱnMs,KyKRBQIdGwțhHG_4JlԮbя\T- nvA]Ki"IɃח(b m?H|mf>F8&MJIUQy#f]_J4h.č:A+IxTT>mR?ԁ29Ka] Q@ AD%DRPC'A豟!iQF+3\@Y Eh,.A+H84 p!C>d @1:Q#}?(әD `GbC> |$A L`4CՁPGʩ@YB@ *6?8>C?\B 8J ``)AC%.^`?x#Ѐ@TU4( 2]GlǸeG<(9\]FCx c^Q~\u K̃<4 Xc,@; WCzd$.d3܇  ^۾-D 0VB `4yL$LL:3YaBDʹ?CS^J9aEZ@q4`ɒ< <  +@>8lC6t8 M̑=h=08؜DSY҈:9D3H"(TdnAsC1lAhÄ0IT$] HB?1$V%0",2%P&*Ò͋j PC9q?JT)T(jڭB] NJʋشX ?YåAQ}I)Q$,'@92,f'ϰA t$U9FERxQ5:>H!śB$l@ҵWB;6E{Е9hAC?hȤC>TC&h&tnb£,#D1?HL aP~l<. @ r~!'\NW:BC5w,ڬE^0'\fٜ}fhJUU)E Hl$ Cs:؃9vfY&C$RB' D&Tob&v :9`ѳ.eŴ,ЁBnh|8|A@ lk A@|eR eEp/M Jԯ]C,8 6C莰8-#̚*hnux ;m>xz 9lR*t#l'L:fpV(CyZț\!@x֙u @.% @  01X%1/1oVک@BlR!B`;?x W7e_31C6 ?8$\E(KK`>B: V?m%bSDNwB$`ßpŪF,v0M4)L@.TAX)Ap %q)p/s 8C p/!Hpe+ G5[BKQR04B 0C4sC F: @ aC2i-F!M&-:L1oB@1+L[o&`oA-%x'?$FݚHRuE!T\?.dB,%A<%B%A*L@o䂐NA.$/?"kF *?[xBjEġ݅?D$k%p@CKR;ǃ^G@A1DF=!be'Ij6dkLpҤ d,T@LCzo2W?`SHAJjS?@*AB xu$XB@% |:_- q/n @C=vfWj8 b?ԟ0Eh/G!!4?A- c6Z4X(-11(C4Aq k hC BNGR1#|B&Ɔ}@tCdfR4@*8%% ˜Pu(p.AP9X C[Gp py@W͞ވY`4WDPJt(C XXZ埠+,|'T& o'¤V*PUcvd>2C$,*ڒow(èzF-p,ZI$E4|`xyA-X Q)X AA7A@AX97#BYt*ܮ@Z^ԁǔP=d[F;DnB%(j6jB&m89EC6* AdA"mLWD:Dl%C @2D)jF]jg?od1 /⾀V1R5:1@ % CvP WxKįOʨn@BXQ5B$lBR.~V&D-؇HdphC*lN/FC`B'CKP ƪH\5_Ϗ)l,feW~~,@.YVy𣯴}ݼl2(}V(WĚ( `@ 3En9õͧFJcC$6&&ڪ-/&DB2$@7]{@B!FН;vė-ҢE6ipD"3T0BL:Qi?s64Ί`ҊS0(خbOO!&ݼ`ԝ5;v/pT/҂^5n΅ VDSR'VX[ǎG3tXb'< qA wDr6dF|䧭!te&3I矁Z葔f3Y09&vzҥVH ,$kRh'O{DX-^l{K|[ Z \ gMVUƧpQ&J~~I'}:d{ٔj{6`&XlJ漢 tM|yacj*FX,^ OGmgxI|αџJ_g8ѡnV?ٿGQԑ[HuAK &ZJZJ&pe9rvX0) w zIKZ >* ) -_:uDMO׾y!Ap k@y;dD=B X})/pӿ%kǠBTchD-0lV`7=f>8&f'>l'$ I#MHrA%@#kKJN+d@b!Hw`@ @v]e V2X쨢X#n{ci]taM^g;y>NX4{Lvɟ)6:q=JTZLr1%JPb;D*Vp(C5P:4Gww }VͤPb@HkȢkFA r7XMzb5j]lR~L?Q AHhل q m< @ATUzd|-^cXbQJ;=Lz{ F- TAb 2 ;Qq{`D8C3ZxŮk"O`°06AzXEA_lB븅aqpXt$Dke) h2-]z*6ilkqvy εqDXLQtlAHtt ̇#xx fa6rLG*TU 1*=uY[Tzs˪Oz("Q&uCnlݬld#ۘHn#a 8:"$` ÜLtwm2gϥ =[$#601 Y KhC+ZEe@3t>$Dut1AiUq$ 4{r .\h|`C>4Z$2ёl;IӏthC!Pw& 9>Te'Ǟv2a6dt) dܢM+A+Yp$pŁ+#|6dxA(>#(j.,G?&}Z H@Ȟ}q?\ ݹ(gzԱQ‰^@7tr?>|X?@~K'7?# Q86X*?a/n8&\.V!V!pAa-!fA!PA4DEa8`` pJ!&P0"|A ʐ" p ِ 0p!apba!01Qpq!aa..114QK1>ǡ1P2"q!a!!́&qAa|4B Uq'FbA!aaª~qc!2!!Q2!PQ ""r!A#E2$=#qM #1+&er&i&q2'uR'p"!(r(a!(!2(L)a)  ( ()D*R!*r(A-2(+R-.-r2}'0311 0a!&('2M,a=z)24E(4Ks'Q35U'4'a!`6e36`=60,=s!r!28M)R(s889379S87R93;-s482wb4S<+s:o93=ѓ::32;)+82<"79>S-s<?S:==3:A3%9S@}S==9W3DU3"E&M"r?'(($3"j4"(/"Qx+)n!jtHotH14ItImITLsJJ4%b!F<Ly7cT"qơg[Q%QN%qW! R" "!!(uQm&#MAS Q6SM@O1UMWuO=OtU=!bSk UVk_5VwW[VyU_$iU/RXUu%5uYyVXUZY5YuYuWYZ\ UW\UWUYU\V'Y\U^iX^UNPW=1sL 3JJ Jk3([aa7aiV¡q1ftp`#Qh( AmM(dqHW! 0ApqfWTcw)y(qAah8Z A0 rAaIn6oMPM[e^i_)rC?tNtD&a"%NrǮ̡0,~Oaڷ}^PͿ ǟ!_1aT֑cŠtxl1+7δIcΛ:q НD5Z4hңJ:m ԥTNZ5j֫Zz حd5[6lڳjmH8ѭSqm3޽eƬgϢEZ5m;-ɔaYd hPK& ԧG ,61uݷs;oܸX.~ncoӋ7=ĭ|{w׳k?>ۻ?ۿ?^q vLA^)LvbPMra~yc%s5㤈Xc 5=a`c>dBIdFdJKN> eM WV85nb`DMC`42:7M4:3RsKމgzg~ hCBh(.@I0$Ŕ[i2VFQ{aAꜩ:*Zʚ*zkCʫzCZl˒ Jѫ[-f+b{bƮ.{N-2’[-ګݚ˭«.l FD&'9 c @9栃N:L22r.`@2\H!{8Wt4TF? JtFtJ/?Q>s{\ l3F1r^_! ,wH*\p#f #JHŋ3jȱǏ CIɓ(S7ʌs7N˛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKv7oeӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8hR:cE0K,Q99 )K%IB:IJ$%UER6C)9gRpV^0F0)2 s IEB Z1*t0I i(CfzZ:ꨜ6|jS)sL+z9x 7)}j14) 찇Z-R)1K*3iK見.˹Ӌ2FiCK))1O8H"4C'`~6843' % :ʹ? CSI=0̔#lIPטM$0&dHo&J ԴAC3m&Q}"$34Ҋ?vV1KޤCKW(C/蔍g?\8#7ItN@H4<"=ӈLC 34`d5T:| #,BI%:뙴N"W*hC Ht^9L<4P#-tC NO?$?'6~?c ㇏D/NÎo/?q 2`30r@Kԃ?2> ( LEӄ&P(L&H` Ra_E7~0#?&V>!;lA `#0#s } mЏ|L"cNBD$n;n #B\A#B-nDE1G>$!HG;VJVF"9qEH*1 W(sG; %YrP%. LXD3aH`)')F?NA0SAtl+ ȑ`3+)Jv&0Sb`j4E% /P %\+BtEv%!~0k[Pv HG[vt+p' 'ˇ1sSD";Xz m?V?-la?d@G;V<'p 跷qz\v(61q 2c7 ?9=!t#d P8w?R5~nVX {C?k̓h !"~+ ۏych R@n$)v?~\܌4Ĝ  UåAA&x P2R~HA @(NU8<օ#}3l04G1@da YJفd ޣvo~",L!yjD,|x&X}ho-v0P[ i0VhmgAP[']@oV=,B0 ;  Ypi0 S((8Jw{% [gPG~w ?p a 'fJvA@ g0=0)by!9@w@zBJ D 4BP P J:3KC"d4S W~>1PoJq)YJ@Iq;} A V K@ }P@ @QcjWX'%i2ǎ`s8 u0lɤ% xoXdYP ~\ C谆 sv TO@sFM`@CdžpgP=+$@)29Чg> ӗz'ZKSؠ5 N0" Ơذ"ذ 4 @UBM??t ZvׯଋO:AZh}Epy}x2 uP0)R+e(9TPu` eJw}YT9K ůhdt" CPPFdTXa$Bj C  &Цhxw7}Rq>gM`' Ā`@9𙹵`k_F:А@ spxۧUps p_juQjڦ0t  |DS6Z dZ &* p & j;<@`&naj$2zRAC۹đ)ῐ 9>EWbRvj9O =3ɠ^{K"GvFahK6Su!0 WP,=zAɈ'p PsPh0sp ʀltM᪌٥{ u@ 0> ƀ  ʐ ` @ [|!BvPO705y1P3P4RKO)Pvj\п0 R q܅Ecx~4N0C G{ Xlp Rbfw̖ppI՚Q{ǠR0l~BM'>R53(ѡy˃4.3<@ѐ` l Z @S ɐ Xd9dpWo?0L R5ww|x2 ) x2M8dVJvmCZD ]{ۿB.Dd.dBXaonQ^=@ 0hpd@U@gPsp  SvaY{lT}glf0U*@b܈1f*\'^]8كqQs=XGS $z\#w dm?P|^%VQve)K- : 0gr^d<SUA{ANo w:v:@ Yx9 M9pD KhzC{ $y4c8>P V vwp45;ToQB!Bx{{hL _ZQPrg WL9}> tLJa@\nZ?=d0sA܅N!{aٛ>գiu4 PWa HFy F>xuxnQD@hP %'JOoZUԄP _U0e[X> AUH]&g8XpѠc `ĿAq}` FVK|sY]yA}T PO3I M jBP…@DA;{&~RH;O uCѝ#gÉ/ݿsTCE4jEƋ#pRֹ9V7}yN{e:^k T\tgM#reѦ Ɏ .^Vw÷.ҢE:Q҄& =wΌ`h B\HiQ%li40Bٰ$,J2AȀ$F'jvr~Dd 'J>M*d3Pf&Bs5M:d%l.hOdQGq3;ǜEelg'wZP8KۉO'G.$G66V7NJ:A@[o51dA>Q{vx+CNS‡rD!"}xb_XFJ(QeOF4:pNAY)eey$f 9a+NwYxKJ/tpODɐa|'DDh NV\F]{eDuiX MNZ!cV8^RHa3tsOЂh "nk2|T rѨg++`F"YGM6E}de6&cuXd#; ^IuJ2Wzޓt(7Kn۸guq'VPGz sl{sr?Q  ?6Cғs)p#k"402oL UB0"?A:E' Z&iKmhY DP zй`):)GO5G:ҿz0$6fdQpp$RchG֑bI?$Y0m$ }X*Q } /~'A`Cxh6!B;h^(Q#7 {T9Kc-0A:Q=gR?ђbzFLd&Uc?Q OdNC,1 Hod&@"iж rL@e'cx4#Z8` \1vduA(i& z@`iE@X jNx) K&6 &*B.Tn華jvhH?[;#WxOG9BA 2=tˆ+=Ђ\!A\;-6ohi9p# 9c# A@H"ELo;WLi0kp&OO@r`m q}`=(:\z0ta=k‡I)V ="k2%U cxFۢ6q&M6>NrVK۔&FL@'lb}:GeDѐCJ67yYI$hТo/Z 2kxtG<l҄I1u0 N#Lb3iHr΄D"/e0eAMhǡZ{Fy2Qk0|-ye.s@/Oc' )ȰZ&3H0kkGE?82aEŨl"60,R35] eXlFAr,k4v (޼ x7^$|#hќ̨L`bM82pBEp#%Fld]Ҙc F] f}geG?tl`2{r`.#9G ݃: >Yh$ugk"UHr5 P;Kx/ js<xC%VHS t2A8|\%9&.jG+7h_~{tti'zO[Lh@IhBe0 :*&0G!戾(HzɁ ~@@# = *۲@ˢ4A h`6HQ8yhFkF؃f)]bһ{ ]?ؖ03h=D eXjzi.8k+C,ciP ~PMS8\YK'v Wp#p `}@u0X̎ЁVH &(ŃE%?qaC8*$* )28>_P5~=<\*tj280ȇK yi,p9B/ǢO0 GrI j– :h>Ȑx 9F@ P){ȝZx (!*%3[ɐx242Q Tii=s`d7(:%z8@OqR)ȁQ <:F1w@ʔD!H`( -\Wz)fjG z`rTӍ_H%V8y sl0h~kh3H@RC`kC  ?hHBR9H3hKH9ߴx~%.S{U sh,tO`(|h {E#âg؃`1 D %! S𧤌;": @@ ZS UZ"ȅ3SDEڒ $PGEM֠1"۞=۸۹ۺ:i؇@!`@Hl/*;v@V,B M09CEy˪$Vs9XV Q(>hK |VYP)_R,cx18xQǸ l"ש,U+@ xd#@~0JCw)ƹ 9-Ս0LA 䙇sx=38"@8_@.8T@RH]@/&ߜ\p$X.xS4(#C]97jNLHdsQT2Qa)ՈPxV؂ 8bkr?#&maܑ]p4LGى0:؄V;!45c;H㝈FCpY2P:%0c@R !+FR$]H@dx P!?J0!ǤD+r0JrHix 樵8?spD . m@É 2ߗ09(]f&>)H@@3ڴKT@^`$@T/HnVa@:e1 Rh\ys |8Ȱ}ȇ|i08p-pG(x`[ՍGu(+@Z7]hd 3hFHߖ3V.΍kh%0)YO(&0Ё7fX:jPU^EP[dFQ_OHtx7~Љ~`pHr^i.x`tyȇXB(^<%Σfg (4TI.@D rxh \8Ro/$8>ȃ@M$tlYD%|^:vfUGIQŲ:U`x|b0sHȇb48d'Z6"'KjyWȵi倾, -oCc6yP h7hq0fh&p1&AV1`&(e..#8vH~fHO AyPhV0@ZއzH^UGx@%2@@aFm`ܪ8,M0si qLihC@ki׋G87؉0:(+Ї4/2RPp5<|߬Ex,* C p7~lY. ˘IpЇeI6g:~Wv|7u-PEqQ2ȅ>xn٥#S@XZ8/H@Tx?TKly@ݓ4|h9<@SR&^T"sN>[%I YNqJ\MyX2G*S/<%SXh@YRl§sTBS8A1PC3\t #°LEc>\(&CBNcd(=?<&P\&P39,"$O5` ;QS:0 vR1?Ҋ?`SF>"y%:5q=YAwA)3[G.Uh;cg8/pr -KSO:Bߓ9jS?6:ʦ!U)OO< sDdq)lH>:RѕHB%y@)OFs pJ9ly6~ݞb.G.C/NXWgp$A&]  q i]~ҹ~elg*sLuأG^ &C$3xE T$QÃb;=f"PȢ\"1ZȐT}9p* K A"H 8)*Y) C縑 TlSޢw#"!MB'&2ExI.)G+``.~?P\/C k(яvuHyMtwbs1*hncOBp\?:fNH*Α}!ʡEfx(FXI{LnH0Qe@Qe:N< *xRUzMyJ>8 = @ +@B y(\O ^ \6{j }( p0VfL?NAaO p[:5'ϵ}KuN@H sk)(-=rDsnA7{?Zp)kƀH'Bo8# xX*Dr[DN1#sx*@"@<@@A;! lE2orü-"N@eE!ftwȥ^}[@?'K Os$x84A$XK<řk*آ":viy6j"WXGH3JHAѭ J[E81 l`?Ụk94NjŒh:P`7@3@~8ĉ&|[ yd6visA -uwͫ)ay/T동$9 SHN1$t]l?x la`ݝGA=TQNm:RA{ @*rbY?0C2 ^'-`C?9@4l 89uX҅eu"*4I"`ʋd_HtDOV\F`%l{A TA \/;ChE#:dj!:@ 0n[R@MYϋD#(5B+DSsX:C uc\vj9FdvDna?@><~C(d ;xčFE=,%ExYP[`HKECRTEiTR%?6܂,ȂvB'GÅ$]l!@ C;_#\"=ld%#I$eR%TVLRg=\8ÈIB K}TCir[nCQc=R4hÛř^L8J,]U$K-UIDC@)P#Xn; ֊4 {"A\n*4ŋB*i~@Wc΍` `!`l$ŀ*G,8 #r<I(Q6cL>\2܂1$V`WLa9In|?ۈ>Q4CTL.A)PdjDNC>,8xNtp*W:K,,xĀ4|i@D5l0Q4ȫ$x4 g샅vNB >jziB:J"U'"E\" >J]"Pݬ |Z=) sF?Ham$NP- >k,H@Ђ7>jLT?\b-0͍  "dK^=lϦu)kH%PCvMWYV@² ?@(+Ea>@%@ɃdC'!-36L>/ʛu20-_FUT@h p |q^DD   ۦLm1Im:AV!\>N6H\`'DᶊX~;?8C 쇐%8J8#0ۈAl^l 4CIn;#U BD@xBM-ՐL>b)m9C<!WQB e:"EK&uceͱK ${%A -@pA*ymXS}M)眎eyVH#<ŏ,+d'M6(6(ʄ]?HIJnjD%0)N{OUlҦ|@ Lh&>*(gb,vpD? fpLe8 ԛ]2-JOGV^8Wm0?>M鱾Hp& LlF*X)FqpX Z%B*AH$PDzy!` &=`o1Q.$!B\)5\X[NX:\A QX\?ЋA!yah9eeVHeMQ?(c߀I( AA} Fjhd?Cl InDW^8lm[&om;"b2.HV Q7CB-F(̆S.LA.S4)»TXBvM`4$2ېT 9?) 3 6 7.bt% l'<9RA"}KɥC4 XpAI>Q:LO*{ZSoO2+:C$ t MRHzx^ b+i!b rHao)<|>Gr2A$hX*y&Ca"1DwAgQj8 <|KDChHaL.08}/0ٱrH郌',n<5zbK'Esҩ9sxQ9iɜ|"sG;8MCFY~:rPBx՟V-V]$r iF^Hp/ a<dPLQ[VX _GX{muscw!]g>:R!%VP!*xF&{tmWtc8hg!t9W_5|G:8h٣. W;xX|b'|fb*ohH)f~l7`:i^g6bœ>s)ؚ5._|vnחYh?!=}zWN6{{6]}u6^{Qꩇ~:UϜ1c!|A]tRN7m'hky‡]q@]Gsq.|4tNx0 A~r*:l?4'E&oSC']j!!_Qc7ăwp9=9T8.Dc+yc[9Q ^ t!Cяk);GZ*9b‚`CՎd#2%F`r ȌB /Vk.W0! NxfSE5D!ى^"!l^:.^H]:q<~HDΑcɬ C; db~ #`>,!6eOAH6HqNA"LaJ̖=$w "3O<;2; -dqsN.9 T0>C8M{ Acf o0/> z'} J}dL4g;jpw96q>QjTLMq&f13ӌJJs)Tb9bXAvq*84 έQvpL:pV+[9l'u ˈM&ᳶE!cjf(YPZs $qCxPdmCG Z,9;] jR3n)gz09QY@NEN pQ4=l0jp99 @uꞭ rỹ$vC,ohp$a\_7za$7#FoR( D_ @#aIHt2eKs(8gEtǎ8H:F'tx ?Z UZr$91.~@q*˽qAC]{=)s8HO,G5N G<@6*HN\4#,a>zH QcDpRXiERS 9A/c~F-it4Ŵīt14-8G(C?hc4UUcc5S@bs8kϡ8E8Nc"nB1!y~DlV^'-sT#E)Assdh$CⳒ?idx:B 4)(_1$:?qS8GB8pzf%zBt$5(!NTģT`,9i,h4J>%fj=|sU2h|TuW PVrw8B\0s,ê|lN<rPZZye̿C.FɈP#p͖@_L-`Џ⃒U P!)LMpojpSXswrA b.koAu>7 6W"G2~b@?lQ~&#");x# 7 nGHBX9HhA¢ AQdyt~ZBܒo> ˼HpWqmcΡ@Qb2nJ b qgh嚖år | rUN"Hp` *d,~laȀk|_T`T)o Ye `^!A J .A7ı;t1 uC-ýx&bqB)$>Z\Fͣ2XQ *25cDJ w,!JF$,a H w8UH aA(Il$`BZȣf`| AbvBs!&4f.#Xd@H@ 5'aat` )dtw AGA.ġ`>Pk6?T:I Bs&!(8<>c G>#0ܔ*2>ATA!lP"1` 2Y|<1Ѐx쥰%Cθ*m 1H<p XXʩ jvVEcx`vx x! txү-ϲOKUޢeL$ gSQq',D[`-0l2)O@tu]]:BR fv! ܃8!@ y4i$V>B6ܕ]Tv0nm^b Dt9 E>"d}"rZI6Zl'O(p5H,Y4%4 N, B@6nBAv% ؄!b&s)F({ʼn$bF 0N~sF $|Yn 8&b,0' bDsiW'J$L7aw])x嶁8v>a!kw\ fgEEI 4:BE5n ZarA!p!/􉗱N\WuƤ`n` !Rvats @c r!QauN!' !@H!8oGwN  V_0Bg/8 @ie`"ZG:J ,w i#( a8 wziD!~( *]%YnV0eZ]z:]B,- I&25nk`H=.Tx'z'Z$N   r!v8|! y|  rar .04|Zom  5 kcu"tTNl*>`8Mz;a ,GLJN JIn?9?/bB@%9bz۸]?!6CR~Ȉ !K(k޶̡Rs[q , p ,A{b` ` N':r+h ;c"[>  7s#_\Ң&xހ Ɖi| %@vTw"!n*T A xD"]5MM"dѯ;;nof. ,znF 6B3;.0 :r NAH |  | $Ѕ KU¯[Y%%rcC#/2?/Y@dEc= Z@vA t@]4ߒu" !6aز r aҟCGN SWwbF18Ci| 1ƍ;zP:򩋷.K玥ҥ94ԩTZ5F|\r՘LΡlMzWqK6k܋Z W&A:aʤ)ɔ5a2NuEO]:{>m85Ӭ[vMz_Pp]ۧNkIH#71C+*d5Y>zs7D&Ŋ1\"",d}x&QDN?cM&p`>k\{B)3 FO5-5p_eN>:H=u"lIBISi`=Hxc (b39lJ>֚GY?(sԽ t):xgځV`;͡{2}_wC[a=A'FFiVp_?\*"W2?LM%,xVYU""?Έ*kV{O]m<9նCJ+P]+ #L?jV4g@J_u*S#lUo c#S\=W}HO??>St?\Sr< *PEo RR:HKY{vD@PR0E!39 Wȗ2D{LlFE+(D ~%>`$'`F n"UDx.%f<&IXa)j("<:zKlcjJX %48<^ r&FB |A-_`K nA 0,(0$:xPb;a_'&!b 2#(R!́V,5ڬ$GrXh1l2(,ɨҜ"ieD%1i6R>-ۘ;H#xU)a #pHH8"aq >]nB`/A@ A ЀK4p nXLpS$S*i4<~'W颩.tC_ ԕuCLr@Q)v'I:b֨PDf ==*YUج'6@A( wefUYW,Oh}bEOE^pKA@_ /n̸7p@ ?溵m$My !Fx^J$ۑO0bjE,d4Y:lB2qBYij6~#QM1R㶹%:{S#k/ΐ yxB,,q "p! @@8%T7ͧH,ZXqCÅ4$S`3''$x'p*La D0B@"P d8Ch 3,8Gi0xUNQ--cKehNb온RҖ_XJdyWZg> i AA;H@MH#zȜU 4p=WȰR;JHr@* 8)А<ͤX Na94!}3`9 UethD%U?x%a6I@#Hыn U$vK]+P5W thA71@ :GԱ#Qbc*!D?+ YPbyY^0p3X:3<9q<4(OP hqid.< D,f 78,{'Xh(%" 8t`y;7aJ+HSpz9t%+% à P6z(B :`Wp"VqLd- ww ,P p  $  s$$ vlZ' mY@ !cֆoQemIhR. U@#RDžO0I$YZ6 kDp p T7Pyg0 ],_QK_ huos1hVpSFK A7FU#-mC(y#|2ka0#[Sዺh!QB?u!WVkvu S   ̀ *H u X Ɛ ʰp ɐ 8, Ѓb'~W l E/6% d~U9P}`n b[F @ =mv }yH@4SO0]ɁfHp*#gp Gsd?98'  #P@89aϑE7d uRna r(W/EnG   + / p PG(P ؠ` # *P*xD  0V: p9 I9#PV.X*9%05X ep)aAQ@ni ؐ  Т0K ɏɤʣ 냐U'%@\1irYQIHpUBJKS Jd)3)oDW7qJvBygRLДLPi.PSP'a4OpSv`e;e_cU01:2 ЙP wp ` =ڎ 0x$ #( <Rʩ@ Io*y#P80 ڊ$ SU\8g@ /&)@8Ko@vBSZ)Xk7wʰ#` 97$9ѭS JP`P0 "f3c -*9X,qu>  b̀ ЍGZ puTw= 訣K  ذ` 2 dg0Twhui "dBd^y \09$eJ DP Y/x B6 7~#k4?CBvg3`^: |@ӥ7Lu+'>Pc8uVx˻@{Zn ZѻiiAW@ J@LU݃?KM-P w H C  &w`xsGx U-ڭ(C6!sme}=EG1哮[$ 90U&r@ _`-)u +oa+H@PUK*kkZpoQ"W" ݐEWpfJHܶ4̣Ƒb Y0 Ȱa@k (Gyw ywM_4].8$%aC申%.$R .g0N}a W)s4/~dgl5?<|+ wXZ$ 0 .0 Npm ϫoX`i@xl5*2'j.*0|0AS˘IF˜%Q91~ÃlY@ R ߥrF"pER8&d|M2#$G`, YpY `*@kyR۪n"P l "Zs92M- u@@ 4j XA5\b i#B4nX]Gթk3>Vp Ƅ/]$8M.GP/va%ZQI.eӧ-~WׂP>ߣj#g'?y]nSUIN2 &\8WL:QIsCP,CǹF?`GО-qozN+t2mw%7̔+jΰ D(r௕.Yo޿^Upg$a͸|9 4@Sz:+h矍^[@D5{ꩇ 'r$sGCIf>a M30rKfQ#azJ2ǜz@"P'c1F0grac+i0ts,BǟS@Bf^H3gzb+Hࡆ^h?J[ TRlZ>=gZ.MTS sMV-h1VAGUZm5׹B'I'<8GY,Jh*l"YdL6IlJڿƧfymTǜyGV$b|CDv&[v6{ګǜH5p_-Ha C8CzMeШ"8%J]2HF:r! bx9Tӽ| !B@N9 m)Rhxb!$H.Q'^ \ՇzY~%ДaZ1Wx⑦ ;4Bض^YndA4VM] GMYU1{X%m{,ӝ_'@rd ' X2X<1GWS@]*f8?l)d pXP\]ӽs1"TKrzR>ȅ*A4GghVIv6 d(?]eLx#oC[lbZtdl1D2/YG?C((]#01>P&fԁ Q`iK = xGL=`y$P!OX}Tb)]"} p9 )xB R D.J@H(xI !!SYC Ђ aTA4Ͱ"Z"LP>Tp!LRJ|I 9{E\J2yÉ 5I071d$*sg$P,锍3? *h@l$SxH@jl'S@˵CCR"1dp*XBsP%I"H \ 8C.|KRߖ8)VSTh8E@9>),IdD#d}54K[4B" i܁ vKX9ucQ)!8up`+A(8j}BG1D āK8BG4Q!% O!W#|،:d!% R ,`㖋yXa z'0P #t(+&xxR%n@t|@-O@3PQ*@8v>%+IB%61yȇVxȔq @4*I 8h1B4 Ɇ_8B/*) `@ Zd넳1O[0Z;z,`0, ďIvh:p(2ntVhDZ0 h X'd\>*ƘgBYjLzHP.PGٞ* Btt "rʑFF7JBHij| jʘ ȇsؾy ul0dd0lZ~pP?T @}| Mj8.aX08Djz8kH85y@MNNPܜ$C;X 㤈 HI#t18u6H4CTBd5aڇa%i`;x`f"8$\C& pʸ"St(za _'Nܤ֚3򔝱,l, ]IS cl؏:Q˩w1J{K9`}@-Gpz5~!/̇8's *V+(7(x+h(YA$ !cH.ʃ/"RBQj&: K8$wZB^`z=@! /aS+vȇ}U,dִEXE:r(PGPO2]y TQ;iL9MG4ԃ OxR@5 %8X%%@ǛT\BZ}sP]PpbZ$61,?r`Lbkc7V( 0A._zP :b#^[0Ap;Z*@m<|0d1>!# "6&62?{ R I]` ibٜ7&7FV60ٜ\c6fU_^6 ]F rCTP{ȇL i6 *ew8"ypaŃ#8?@}hyE.,'!BfHff ;8.2io& eX(pLbhx,Aȷ8@] ɐ'ȗ_'9NH-*hfS氹ƯHx͍>#Zp"2֚F-( ԩF&9DiR Jv0TpgxF~8*P|.j*BɰDÚ遴[pMFcVk\Rh Xtb-`ێ4h#:} _ڣ ft)t(Oe؉96BFUD@^|8 ߙEHж,l޶5uJ/ͱ @e8f;vfppST06P "g>Dkqcc#tSn'Qx{9юO .֕Q\iO7qHb |`6s`UfdNf*hfcf*'yb2x JʓJ.^&\pe3J&} oβxQ>y/`F?` hEk7ߚESyfcI+R+UQguqjsVfjQƕYK@Ѭ)^amiu'wX r~8"HyA.xoXq*sRuG֚Fus6aCV*+ *a0Ghxr4ǥR>zuۊOh9^ARupLan;S`ԧC]b4(BK7 x{_~Wr6r3NgE 4=9xp8IM*I4[ρ"{'&~`.V@_ >@&{鑞'@\C5~6@1VZRZ*L@Ȇ|h "|(kHL狔ȅт~~A5?=e, c R_Ѕ|H m2ѿm5eu."t"p p "L`vB޽/b̨q#G?װ޿rfPz)#͌n 5j-J>s"Nr@TDJ8( "<#@=bXL~nzYs.]2az )cݾ~c *r'𣿽՛g:wv^\~|Nzuw޼_;Gi4_8=ɾ#nJJjg|Ƀ@9:j%H},I]`,HMEM 4r ҔT\)̣: M`B=v"Ar@ ӡB# P:?蔘ډW\C}FcN;-CE" C?\ $e " hd)stCwd^[D]a+ ze?t,ErH \< E ,^@q;{w$bkDo 2E k(<?|f8\RFMޓ1F8hPLnKJ*gU.tJ/`* y@K fv/˾ 3Lп z#@K͓2я=#Ppo3.O(?EŵrJ,u Otq=sP1O5S4On<0 ??# (kEhI!Rٍ?Tð}~b2 1 :H?Ex95` ^@ ^0=+~8ġBC,/%яx@Aq;d@Fa)~d?EFyP3>/8;ɏ~ G h5R!3cF` ;G192[]A1KF9# QR%BX>"2@ ó^F:j< 2e3OAgZ˄&4L?H žpVHHԧ ¹P:U v(u3%bsc >U0~TpT W8eNu[KQ@AHd>1= %DaCgbm $G@Yя(z%,S !P,֠7cH 2sK A$BLҒu 3H 0t`3}jF`mCiIX+a3# [@ 32#? )0!L?QFX.Г]#iuBr1Xd-UkGΘ-?Q"5@qrcM:\ Y ,EQ:ftQC`"t]+k̍ ǦѶX"ƉA7DF{P~܌?G6 cDe.HCh%4<H3_`hE)X#)L*@%xL-BI:U5zutJC?fŇѱ8XPnǖ } 1lcHB 3kn5G ^/O,Q`nR|H#3}C [Cb8DLfڽ A8`8GnBBW/ f6Vq8֬YЂn<=Q2^p@^ r[Va Zw.A6YhA#`YI\c78Gjf D ?(CVi*;B $N9ͺtCa?1,`:"DFMG68 :W)\Jg;"wAI؁u?O詡QRہ0vޖf11 R~棩fÔ@ntV('; *W@L}5EBK0 уA!^DzF q *QiGKO; ͻ Rh"DCZ++*oP͋ӥ1X >}C؃.ݘu?k sS/֟#iWa,z) t=442 ٤: 9jDDF+1L)B4tF=TLʌ[rDU WM4L_xB>@JR?C C>CxrԍM8aqD^Mq`ʰż9E2=جC(zʆ͟xPKp0)\!B /zOj`Q۸H&Ŀt=@!‹l^R:않g%AXc(ZX LWD ع"K"\IBCp'r-If3A `B(@Hb/(Co Y&fX\TU #BYADL7/0C嫽]$4 bvND AWB5GަAߊt3D Hݠ?$_E`n7T{Lɧd?)8² UqF9z:$E0^,aRmQHf#(A+p@!ɡL St҄Lγe !qfVb&!j\Ⱥ@gڛI?B^ΠA0ZVV@e:<M'HAmj卡p0aB`A,(ܬ恺CTq4A)tl拰Μ%VFܩBBD5@(@ 밦@6r,A|baA84$B;@¥Zz*FH8!cI$ߴRS`-NFX9@pPR- V9\B@3͗Y &%,ȿ pl^ĊA+=/A/ g'I5>l(+$,92xA,) 1mC>լ쁞"ED"Dj&BHj-hl/2xƿ%fK찼MidZu!=Z99>nĊ4?B0[]XMadd-@A`.$)Leb<$ۈ*=ɟ1IgEA%ml-œ@#@I.D?ܪ`2|iBU heAK F,\͌<kAq tf5Ф98gpFflPTDAIC4H.$Z^ܤ+V"Dw,- 1 byFXaV'K(j gD]'@kHjă7p;G<9 "(]7x^^+>J#f|-/.I1FsbCØ*ZQV;#(xqBk>wj)459KvE$x@,+C504'ئ$GdMH:\&=T.)xB-5P IC> @NAHޛDI(5.ir7=ɕNgDI9^DdpduQ5VgbKr'`(gۖB͔4@U)8>A\۶6:C/xr5N'$CR (=/bD-|AmybF?ddR1?sJC>y?;D~io61@P>24Byt?PRdhhqPuy6OG.W8M!"|5@5'Vfe6WxsjS!4Duh_r }Ŋ xBV̟^;F|B .5qDmXvpbC9:Fgp1,/ nRhhϚqneGo,:q[m-sy$ 0O`kz4KW젆} ALh/Ě*&n1/cr;2A7|V2kc(c;8;pŝ4LCL=?: ߟÜ?BDN#)D'=p@FB X1G*uH7@F9vdH#IzlweJ5cEɒ iΘpE2SNfPU9iRK67S+~_د"ŎX)wcٹ}Cq9d]XWnSt{O?i)̥×.gr/$G]=tHg٢i]猥G7ߵG\PGo>e}i׾ɍO2aF6k\S,]\v7w v i򩇰|p B33~pۈ¥d˭-9g~'p6aq;Ǟ2DK8VqرͶ  E ?rI %|rˠ(ĭ+Ǟ}txßqD&@+眐(3Sʎ"џa)9AH!j.|x_|NI*T ybahiڛn> 6O? 5K_ִIǞ2!6gdOj?#j7V-w6ZkI̷!gyZI}”|^v tVF5ǜzv]k{'$~Hc['xG frAxhx`kXVR br9 ۩Z-j붛eFri#~)+PsFl KP"sn3.j}!G.+B.ziNB:8A1B@AO4gBvLc Vܟcg SV<8eΘ"ѤjI$差x#?`#tzF.r Ȩ H@$` 0d,-!)L~\RIXBd.#-%j a"76CQHE|l~6ct0`ޙ| 3"JMX~H [@F騋IRR,hyH)9S@4NP%4@A2 y@B . !_XA / LBNqK+a[HCaBD{$8EmS$jC`UÜZS84Pղ) <'H_!d8)@!C* _\"}8> s8Nc0B^YIF& J--)?qufG,i-*V=#tpZ;Q1xQUhYͬ[#Yޒ͎_XD×/lǴյu|HV1%+ C 1V(9_R  8$,]N. ҨC)OD7-:V,J wHG:{ӣ#3mT w}Fl|o|gKg)ZeiIBя@XBl]!n~|ΌntCŽ`CPrʒ#ep{uEhY 9#rBRHč~tޯ5H4. Hx${/g$D HD怆K~$z0»>@C5qQ/I:Iʡ6l',C?F+op!02%#~@atĊ)V6a4 AS o#-s( zeSB<Й@N 0?jHҡF #2,PeǤ.!*908*=Ǩ DD PMn6k c/޾O>2Qo6k>Fgb-H%%X BaR¯dn(#. a ff`0 SaNa,a'AI/Ob\> Pv!A~+[>h "=LcC!5OOZ@fB5. /R:ʎj tL]nZf6%aAB2# S ݅-1SE&ka %SBƳxf%XSt2)CXd A %`(́0X! vI33TR#2$;  a2baAᭆ@Z <+.E(L&A=bQփQjmb!=c>,#.s1Qb<0GR/}8 WVG,s X4eSG3A)n&Hk#ȡyjHw#m D6-;ܥa%'a vOf`L;0A:4U*;!/BaXX(z-ta6rFɡx]=B];!MM*%)ah2X`DDP xpeDXF({(D2s3z ke@u-h#fF3utKs Tcqec@fSΒNJ%!v Ѐ. 2h'Q(.pN<˳JET8IXƍd \{!ҁKr_A0@4?]+A_7a\&N/ff8 ^HA,V`c`ɾf @iHr|r@P!n 0S(w0ubB}U ƠF{7 ` ĭ`.XSfJ-r |Ր"Gaahg0X'3!^TD>sZ|!U w5x382"p985]M)'lc)1Y ,r- z -|@K`Rf Kla$O%a rB#nk$(Ջ_ }lWd! \(08] ^X! `*O5!0ZA¨1^?dA2"AG̡ eRH7JnP$㸎MY̦`@ ΀mr *  rC"_IY먳O‹ YC,mr H rW!kUVs,,V#\N@#%hNbm4(` !\'XU!J@L'(]Sy(#;zaYSzG.1p @ rHa,!{ ̋R,`ְOA^#hF|Xh.7įÍXar TVX7#v8QbSYh!,pq)} @ Jn;d@D #K|!#dd9@a/.hJ*PbLw,&ZӁ\"#z`ؐ`X,Ha { , I Rrkb@l$\Шd!pIy ^ (uP5! aO׳2 |`HQGtcC~R %haa2Ed@!GA϶]XDa<KA9»1!GK7">t$$r%2:6Bha!b!n  zx  ,(͙hTr*rIEO B#PR%:BsꙢax UT@Rb9!"=R H"@1=.v2A GՁ:{ nŏ0cʜIf~o_>h$ʎM5<)"GPJE~Jn$ۥK߿ӉOI)!i膋Λl_:s^JNG;ɒ& @!#?w1^!zFc~s5b E֪c2_vZ N\v 5iKcD*sYËO^qc鞻у |{Ϟ=E=;^WttO:!΃7zy`  +((he &vr$SM&FwWJxepφ#X‡?e\%g'e\AJ@9a?b=dUV?|9氃9kI|40E ՁVޣ~^N d{y1B DT5wFZj뭸檫xG7?{V qZ3@;=D?\!?ϴuW.?Ȥ%$I%hL ׉&""M?4ȭHf?Hш ͛?O!?:SOyCN>>(;ÎxUϯS<(&':t?մ.W0I?谆ʼq2:1\A?ċ(-?e,"R6Ї5 nHTTL⃪ 6BѰمd:P~~tE?vy :9P~= L 6E#T:J8.:$@zXa x(JȆ?mأb!DI1^  GpK(}C+Xb $R/-@ 8M ϒ1 Ւe=(lM4Ђ]8K0vK#pi!hT J(`Ԉ"STDGvkEbpE" , D r ކ,! $X ~HK :#,h ?`B)Am?a'8 ^TCR_ܛL#H-UD|+q AVGG chb1g85gNzTJF@8L\ :bD.YLj ؃Eˑ++2׿^mN#%X-I @MH7DS y6nQMW#MA$d . @ ! q$"xCEa]O+yE`f JJ%t ="5@RX}܈Vs`JI`T'ic Y1l,jO[( rsK56  0\a`ڐIRl :0r7Q1!]7M`xv% k#H:0H#T @p14"G"5R`9W¥d@ hPR3SЇ^"ell h YY)u PU)J=p?&~)-L^~`3p:zpd 0-S0!7{2D!ҔG(Q A ҠGݠ 0` P ۸p1t  bɗv'Tᘃ0 P P` q m " /gJ6 g *DdScWG0f@y9K2 Ghf)SC~br A!ݥY@#PT o@ ,AVk ?-AL$,-zz@fAp-}Ҟ( V[` + tg ɠn ܨ  S L* t * U,e02iSes@!" A"&{r#&)JjRP:@--$ @ 1 xmmY0'wCӦ_ҟؠz90xe)xJ V f | 0C c$(f15@P U7 QҤ0)6}a6f\%lj1P,1Rf,T p S9g!(^44Dce1UPiU^$&0 tph- VB{|`Jk|` C@yi01 Q  A0y0ֆS ̰`P 1 wI ذ $<ʠPƠ`1  Mf\7'"W+I1A9h$A` q>+L65p { _@FD5 Z1@/@KO51@=:??-{+zTf Lp 0 ,!&FFv01{nb2{l"EpW"!@NҖҐj8H7H@ ¦k7\#s}lY ;1@ \@$`*)Mg` 8H ]`}+|{`F@SS }@DI<I@Kp 0$@)\3D SHi`WP: ~ py1'[OLWo k yJGXd:p 0`W&,"2_OB4WN @Ґ4r;kƦ̸̉Ɍ_ xs"bĂ+u?w uHDsS+#,5J g!/H}h@D$` hp D  @ eH0sp Mk Sp D` ym <~g gffnHRAn(p WE !eKLtp=B a>VRPFA6_#7wi#xWי  # }@ }*ձ6bD@8u+lqwqpP}]|hF4N<d`/D g ! *pѾ` @_d_P Pn@)_0 &F|sP޽b=!! [Z1)^` ctP2UoDha`_V)| DuF "=uax0UZ#B; EO s ^u ]` Y^=j`0]-F޼S7:]-@t_juLң 0_;bw0`kȠmϮP BD_NS pXHe`㬀 JY^+:75\(M O@y@O+npy4@y(2IŁP NB|p:Y0^!f="Pi`]-gZbĜaN] 6r42증)#s ps0|0} ̮{5 $ZqvpgO"uP=׺Q?]!+$! L o0?23!&JB"8^v_JQ)LDPB0܄Ɏ+DXBFcRH%MD{ڭt?W/ݹ7KΥ;wDT҄,>ΞxXuFn޼L~VXe~׏!*hԀ.\5f0 ҭW^k߸o8:.2g.?kfvS%DB١ISYM7)"VbzeJXF|$AWt_7MZ{m]?͟G^e՛/ x1R4ba8ᅝt!)f v|iƛZzI=\pRaDrM0E `M*E$D@\0Az r=C򤨠:hJ(L*&'sLBxiG$L34y oVȁXyDi5AU.0P̡RYP2qIIDJ*٤j$rC"ic@!Q~M[ouAw(wG.LrZsE6Ye42|9䯮R聏kB XzE\Y`KZxСI7KK\xsGmůdr3"dȱ'!L̜tlge ?.]M&xI rǥIfZ)Fxj/{$ G4sl&cpLfaOԉhHD7GdaDM*lL"q%7WFx !h΂j,'y9G/&'1% T>1kGcl=0T H]u^L>(\s#?"&m B$mp90T摖T:@>{R48xK/qC2Pvԣ&Laϲ)޲9ljsH׻M?ء0Z`!rD'((\Tυg\h" )h 퉐z"mj.PnH\9+>.OdʑfYw2ktj/Mh5ty0T0&/+@CJx֠覵r|H,7Ab>O9 䠠|@;XU>ƵؓD:cSjYAWffЁC!zhXQfKArCg`8 0uI mPLNA`2RiQRg#:^3?q$篈J݈B*n c l<TW؃?kG4۱.,Efrт?jX 8I0U@tJ aƣ[,0h\.GQTTʜejrt `(~4k~ڎ|P]Β.sx:6v=+r}@UF]?9 FЃ*pQa(q0|%C$^9b삔z^$4@UoΡ#CGa %'5AG:AW2?? ZiO,AD>CIU x==/ <@Hhd GM;J%/J^ZIry93Y@S9s8X}@x TaV @$;+O1x++o8%;tFP:h0B2Y@b8"1S'[c899T6@%|b *SRcG($'҃zXs=E pȇt@kZSbE^k ;DqS؅@b}Iv]84Th|X@@C~a=г&- Qx 6P%,<]ٲi S t_YЁ|UCх+Epפ̰30`!gE[} ?Od#R6s%} K|C:&`uGY8m{܇zԟ 5)9y%:>(XhKCyZW* \K3Ӟ>Mx8D鮴](И$C p(ۯҎ (tVO:@vخڭq C;&jȦn&(=/ghN rx@?mHQ+B c fbSX01qRaMYh@]a)H\Ό}< >P+POXl)8ޔ9@IR5wXb9FSYMrKX`;b}䍨{ Z^8 lgRHOSj>֕Pcb@̐C8}`tHz5c:c4$9(k @.Wf=1NЁPR(RPg#ˎ/*"[>vАhP1%)j  6@Z'J%Z-L:j^@(AR>еJXeftF 3MR& V38R\(:yXNLCA;~El3ѧ6Uh%cX2݅ٙy}8{ݛQ@/ v:צ m؈g]Ҙ%@](聟:/\&eqnHvyT`C(އ(!\yxh|hz4WZPƅ=I7eYd@Lkz6"s!eaTW(cWjPcw S3xP꫍GdO vh aj_'z t$?[| 2%S|f곾tmChK4{kHR(6}B$Wqy X%#w=݈rP5&,Apy\#Fb \(*.Bkp088ot`/<#(<~5ULg1зW&*(iE8rug=LO`8Ul8䂞%UgߐfzDvSN㚘.A"y z6ȞیCR ";9H)t~h^& n.,:|${݈q-ҷ^3az?j\(:Pch8(Tң~ȁJ6MY2aR#̹kgРBdD'Rhb5RZy]p$J%,%̘2/iS=J$ۿt$g-j(ҤJ2mKti?sx͔Pܷ46X&Rt׊߰L<9"\y GJ<9̓!dO]_l1t:`ҾF"%h<՘qE)s=e$\) SܗN,.;Ǔ?oaО-~L7߰|̄CY:cqL3{SN> ?AB&=DꨳO<؁9clfCiѴi,Tkca?5s#o#SQ"eiJ95J%a)BxuС?3S9QBfS.՗?Hh;pLAZx$GY +w.u:O=RG?H4YKR_o(B9#_U?|R:pkPYc  Xc5?1 ,#?RB%{Y X' rcd!B萋I6V'%$j$ڰ4LNjHQKs;dw)tn``XsNy>$'sG P)hyG>Dц3jVa(.J u &M%4m,(G86QT}SDssXBu*Oh@CYBơ tX9h rb?pYpriD60e^;wG؁:])r$? ZC{"F6F`W,Aǎl;P=l#5[Ak&=V|U("#!AG wyVflE /Kj`hɉR<BTV90@PxҎؼbe|Al4ܑyCB'4 f0#তB%?4s0x0$+HY0$'Nh*׽F*M#RDIB)ȇ"Hd2Q!2bc`IciCPЃP,@O`,VpT b;]`8U dd&!!AM8'\븐zTBBx(d$tR&h@$ ­VA?ءnG<ؑ G?X,dMTX"E0(nu@"TX . g*H 22%`3x2<&K"R~r V:B/LAڑÇc^/cGl/ 8?c_R,GB"BRˆR :T,aeiNuc`E Pl(V1)jJxŋ&d }I ^lOЌ$r*A [dO5cv.⛚`d8Z׻nC!q{.ļ0`./ͣдxckd#㦋y6Wy{GB86'19Od+v16!Ldb&XbJ8<>#N?PuX r+c95 V@Oȕ3)@ҶAL hr˭.OPRc ilAl!҆K@r,`qKo!^w|E$(bJd\Є+yȗZD$nh 0!/ꅖ 2 x$=[~`>d N6E!YP2tB:~,d?ZP~ ]?돬dNAtQ8=Ռzt描=[HܟِY$?B`C$tE@'X8CNI?dC#xBXP}ܟ?$)$ Ͻ@ H /R NA*@  P= z ^?_>:lE@#GD%],/p@(,PL Ó9 B>Tpa]M9LLk29; B'TI &`RlB'\%1``wFy鉉eDm@*<TA  ,AA B$Y)/Z) ()DA\ 't,D?JM2#H?<XOr%;O@EJ :*"|1+y0Qm@  KpΚ m Ӊ[EADGy$cCVmH% D񂿈hLT5$I-ª&B2G;БT:N41DB\& &Q@L`&h PB$V음#e)+)RRD J LѽU` @|J gx٤)^.~PB'x]?F$+5;K:k&Ddb:iB#1,P.Aa[;? *NeX/UB2d򆯔;ɖhhwփ~B'?H!@ hDD[u)MuQ1p @ D"OB}/=gp9. Bp4%@H| 'C4+vRM")Ү: t7/m_ L9 Ke|3gh1-"`nD~,`: ?HC2TfB ntBODuoC.BFnXP.O(A#TxsB@aRrbҎs:$l9TkcNWQoMh#ߔCy*<'N&uQ(:i}4‰uB&hXo6Z5A\&CM/~hphH3S}l+cu?Ѐ:p+`+BMhғ@zHz[}z/͟vKslB0'@$R.Q'D\uLegV,spo8w8ETmJyA<94t7][ʒ#H}}Q9Bhg>ZjgS?&rCGctD_nB9X &'<-3dXP#y;0p4 (ٔaDx[O Jkw?妰BWE,ӂ̦HBx?zv'N4dR`nEB2`๎rwV&,C~n[/&okX{yND&3r/պxv#NJAQ{x(J؆_kS2?tQ/Y_DLVg;[zebC.-:4Dl B(_^p_'b8JSXe?&160&ZaC)\%hBQǩ[]1u'Cņq!AMĜQցRupTAᝣC5[Dl*ßtMy=ӌjC)X'=}=Ͻ3^ ux#A2(` ,,PB%R®',,66B'-.XC1mQ lN>~x'k՘H?,> d9V߷ TmEZzZoD $L12|?{*(*?*TSDOKDK*H11@0kJUU jXpV @i՘qkUp UXh )"T c`Ɣ9fM7q8h4eNGT3O%هjU}4kYQ_lYjRt̗Noƕ;n]w^@mݍWy{W}p_bD]n!ϟ$1X㍓C9yfH.QNYYnaYiqYy矁zg.裑NZE駡g꫱Z?뭹5 .l{{ITѳ[%&a[Ʒ\j[ /\abBӀ! ,pH!\ȰÇ 'N ċ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJի?yʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ$HУcNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8cO#8i5`JYB@vTN|#I㘃NM%V0v ʌ̙L 1L4c:4L/- #̝ĄyјcC AџN)sL3 *ҙ"1e*u2((RQH){'?l3P.u 5pR 4C^2O:Ӊ ;AKpk&3"w|ョ?F)yHۃNsߓﳏ4t9_F98Eʈ]>u`:0-L&& J,_X?ŮVD~?!?Ӝ 8>DҎv'? =< .a:Iz@H=BaC&L`k`?ґ{'0 rCFҎtx![hpG<4_#xJӡu!Ѹ"=qx8Q H:~OLm .һL2['J2rEІIXK1990 $bhI# =`G`F ҎdVӍ$u>%Eh2P>"qMLp,%щU p(^ 80G3hqF`&Qz},A?Md?DL!B9 xpćF$Ox&:NDB-;:Ucs@(tT)&vFZM%] D%pohA +)Dznm ^*!G>R]%4;P-A5A`B߀rB tA J !P~)أQu Gܑ/4MЌVKYtChg6uc3DT䕼pG;:E;q>v=`AXIe*H V:(/tĘ =E/)@h/2偤`D$!?LF% ʅh#Flmǁd_<яhE)gECd۱yALȌ>Ɨq}chatd"AvG F|# R˂n`g&^WUAN3nXF>Ё # Gp уY\}nҽVT˚l< 6HcLdGxC . >cH00yBfS8)q2$-K!` ݄,>A |F, lq#@|@ Rq2QW2"1^`w!{tcyX"txdG:KS1ŹG2/ڒ{sİ1JzA"q8d8 G+ =vc!fq`_|(aJ:}#] :00\nt#QxKp6#H tq9<G"(."E0 }rh-7Q#`D,|`JP `D%qy .gcu4qW ?-0.P\z|F TY4- 9|tnF pshs pV3<}a7G:h7\^0@Ô8A N8& 0'4<5`t"Ҁ lpY` b Ftt}F7 y#CppM~ @[ CGB?p ? PyՃGp Y>pe$ |G/WYpC~$PU` p  iƌ[aFa47q̠:p #R c;hnTIxX&C@ gPS@D>=@D0Ups `\w(!BZl@і2 n.Ea;t sfP H5 A&0VJ 9sb8wI2 e t:i7l SiDD.&NW|kĉ\Џ#|)Pɷ99Sp7< G p U~p xI 0 U𗕰Ơ }@WE0Q5]i.}WPe0R**R` 6^h7I[ip H>7*Pf9*>PgSPI@%Au=w#e.D&.#Ug/*q[ [_ P.3bGwtJI n|;^Cwˆy H%8M! ?5aH4 0gYd nFOv9` ɰP~ A ؐ z @ ` 0 3F0Hɐ7}הgLRRp UezeEHD9^1jEw 2:e)4@e>`uٚ*OwnY ,Ұqlf2F A 1I 0fHڦRqV `-.daxpWF9.XP Wt :Pu9.4G -} :Pө} ;  Хcؐ pPbUrhfP5ưF9љs_^: %=5 ^8BctJ%izo9Uř1|pU90UD;J&aRTH.E1,qvr05YC>GhqYC^!oP␞@HF#:`L{d3X-F6H.v}?H*` Y  D𣠀0F{K؀9:7cPL ѐcRH?8V38ДP ͠ $F.$h;{^wt wLd@7d Wӿ30C)3u\D+{,{h>@i ŀ C-q)Pp 0 cQp ?.!I&̡( q :c^tLl4|Sy P  S ` Az ; p \ @-W yLFۦ5oQ\ *bmD.P !Z_@UPd|p}3 a7IPP >0OKJRp3P:רu ɈPF@l:e7=CPop vD 3 `PW@s`FQZiJ W3Fc5d[Е[hvfifgDk4A]Rp p 1VYu839Yvp SXd4!,egC3 0|  '˥SW_6Y/1End/Z̞ q fAL`wEw ? o:P UԖM 8tdڛݐR{71V-m r"K0dP M[mPfĥ@\q[J` =P s@H/W+8:M8U CdE\YS$|+D@=9nZ%[&@@kãPukqGR ? qۓM@wXc@ (A; ;yV[k^[PrQq$=WlV^ĹʤH9peWcEAe}$Squ;1z7f !$a]cMF6<lHu!R-p}gwsM\n$G?0 T(ҷZG&еif)YZ~ 5g=LPlZdS: ۽L 24:1Dp!aOSp!QEߣ 0rG0Ĉ A ɋ` $gP}(ܷS=` P ԓȞnwC@I,!G XC+L   PP5 פ.PU !{@&$D|F[wa=!s UFT:íe^gp r>ZA9 [U<_jACWA;po nn-PL. tD;"``fh*A;@0Uʤs<ޠl<T}+FF?q/`[~Ձ ɿM a {ɤM;5 !GXsЁl`q(=@?y _; D`t cgN?9r IEDIC%MD @dٳ׎I5K-b7&yyCI֨"Ŕ3\:Ŋ՝;yJ"S4TL9D^mI,( ONJQtT*'\~0tlQ8Ldx1(9NfTSNT4% & 0$tksx!8 SbN5I&,Y0^T5(@Œ (q8dku> =.N** ,d,Ȗ| P[&Da9hԼr7[9y`YZPI(z)HQr fVIGg.‰DX9'I;AExԱ'tYe0MfhHlMņ~eheK[I!#P|xsةjk&4!SI7z_;rfIҘ+[鲒L2l*NFH?FZJǝa~x{Ħ?gdҜX W;jt? 0&|B=q -8eC tprt@S1яIla>G>d7{'F[nB$DdEd%*ga jD+g R| <`zeU U < UAFg+G: P"qL%*GF4$)Q MdN&DR lf3֢f.+xUvJ)e0S n41ݣqgV,U9D\8!}[YS$ M"!cNإ`O>#RBX.j2!= eepI"u\HCŚ_#CLɤT4Gm {itd2r< r&3> f*l,&6QĨBu&4 T?!S9icT^E[P̀8U ŨE G\!P:&ؐVV``B )@=$q0a?TщE,"Y&$ IX8RS2鎄΃ :c)Lt+AH9&z (;R Dg;aI<*w;4&F x Cs샦iŖ:xBYe_4zA H\"$Za nGCm e0@d&(A a`zy\6p-0Y !JJ=t>da 0 OP 3*5.QC BvF\$'(8oٵF@Gt,YX~h&3(B- @Xj)Haѣ5Nj0RT@p9p7KQ25l)o\SZa|0'Փ!'Sz&!୉h) cX D'Ǻma2G;=2`\WV@RQh2))myXHw)YI#ykCHZ0őabۦ1uF(A K]YL{A >pa DR0 ]8`{+:ʬ)N(NU;`ƀ2JCk.qBX6is9ph] :@ 8yUP!0b1g@v̀/`xAP$X@Ic z P|N/eD'9#K&31 [.BM$kBgr+V |gԃuЋAV@DX5)6kLȘ%7j%T^hljz" ex_=z0|hYö I>~(}@ppIxhLC(G`X)- 鍣.󲂨0@)$9f9Iv)(/ R 0$3 ԫ<@H84S#,(49Phr-ltR)xŒxȇb `4Ȉ6C3L?Ha K1tKL tt؅Cx"h?ACP(X< ) `jGh0PBaN8須yPOA@$!/;f {j+xd`@8D}#)zr2{# @d`#xRs,,.,KS@S'THHT 'HR4(HH胟IH@$qp[w(zȉ~DC҄:ȑAV؂ 8b,8'TOQs`qs臩3(D޳Z,ys(3 ƉZB$TBJ#2sH$2j+7`qЁFhKc5dkr@k$| 鬀d~0(Ip@0hbf{Մ,( H`&$ Jƒ .Gx>"H"<ȁ@x9Ji <8@"`)_.@\94<聒=X4(T, 99;@$*L;F˻#Hq|d08,p_0~8P[q Zg SjA> )2( @.">[k2| pN0@>%`~0:(PFN>k h(cHN[N@{Az$FO}5e2:dpi0Hi.Y0sb+XM-H3>|ҫK)&L3dBiheHKSSP@pSK(4ó@ 8L6#PQ  .G :OHzbz`؇b\Q@h)¾HLʉa:Oq5-_POAD9ܭ'8hBaXhq@ )N0jЁchV/^:DBv8Ї`O>i묂Oȇ|XJd>G8~s0-@}ɢv 405` kB=ӥ5I"`v94 9h؍x"ȅ:H*38"$=eJ8&!.YIJT {`v&tP}|@<u[K6=%ډxq2QR(}ܘv0Qa(q0+F\ĺ:z(-%FP&(Ifhj{X{xGpp[p;MNY@]:_K{q|@'Ȃ `I8Z$ц4# ]*~!h8dv]8ȁ%VH@`Sx.#S8 2pFd`:6$<p%u Wq}@X%`q]pI@ peHfszE3y̸yZ![}EPY$3|(A>՟ZЁnOOsȇ$ ]Vث7`C`Z3Gx-0lr\F %p R@a:8l(]j18#*V.Afuhr_+F |XV}x`{Rb.r1O9h.H#@@ȁ*H e*L!Xm ?83!>9. ?*wԟ5dV%pOɫf|}_jZqIۃH(֡%͔(`+{A|?1|,x%e(:A(t:U?~b`uP(c##t@ P\n;(+귘@4R>S@$8R"8*@B<@ ETuqKO"lMn =Ò2Z$\B@$o)8NEYJ . ݻB>;":P h']R얐1Rnq9B|Y.0hB^(gUJ{Ox(GྎV܃VЁ"ny{ȇhBF$VC7…sg[ֈ'; u8R<={ ^Pg:&h9\Ӭ%|pi>)GkL B.$4ơOS/8͉p6T(Oh)sP4v$Sm` #]S*6 :0MMԍ= 8&PX%W+ea0PaӴ7h+k{ ` „ 2l!Ĉݹkn?HdVQC"ȅ@7Ϡ={Qdg߿9r X+ct+ Z-٫G0eȬZ'@tP2_ \3H1%A~ѹ~ܩWkVd#[wn/V44_D| tL3|9˩1e@8|Fɩ)䱔E 2yj|q~ABrǷHAz`sGؕ=O'Jaڤ&1-D*ةW=!=&B?O)W0т'-D3M#!!s2?pdN1Xb:h$ь }4hT9,h.Q$Ȍ'=,^13NSM5O<ҴqbTBB03! 9>䃌[9Fc;JRs$D/9 I D0G u 1@QHԐ) AD 9@-7C`tLd$P /)&5t~N:F%I'-b{i^%- (.1퓎b5P:J-o?Jp`G :Sq"<8tG/'39$mq)Ӗ-P?\JX@BjR<#<Rr093t'b(%/ oM(?V8KB(Buv^bỹ@c<yy7#h$&X Mt-}4)4ذ` 8ǹF&4|_92G6j PQ8X@X;, B2zdq5!`- B:l h 8 B(ࣂ>Yk@TBMsCzNn$hJfJ~a #<"!HEE)+J:/0-!hc`#@.O A6|@={ C) ^GTqqS2ŃHQ0ڃ`XfF?gA :OA 5  J8C"cՄUSAFtC -`yܡ&mxzB&AOzRKG r >q $:=B.G9h ԁX#!ITljQX[0M9n:걏~l_?`.3@R/`ׄ%%j9^q BNC,9*xCRk\=2t=[F4MdǻsGx8cDc8G{9êSPLƑ\,8TB, ĔA$ g%ED\?(A؏E#T ҐECQqeyPC?dKP9?] O _B$l_!#A %A@ 9 @B  )J 8JXB@B^I= ȺC>`aB,-+.Ha 0.\͠[SHA5)Qb;HgM |LHrH9 a@GޱA.BJ2D<]=O:<!l4 `T{A4Zl(AVL=ì% Z gA$B FLA*A t) %`o}ęb(2N*D9(-@%S>$.LF@~dûq^<Cyp쁢an1K 5A7pAnݐH5!hZ6$/d>8 9L QD=d?AX@!b̉dbjE9H%)fA*L%A MMB)J)T4nAȏN.Qir[[<VE\DL,<MVzp.(IZސ _Ce10X?( H'W}_AlZub2|`juEG]p;Tc|?9ā  @0޴Eߎ&u': A>*v+>d#@0%mih%PIBJJA*rdvA9W y‥V"  pĥTޖ"ৼCA-AyI:4B5<̂.9Cʃ ߌDCAԌ́9ë:+~? _ T B@Ã,k:6:+$dA$B1db:M*\b .X!XMZGJC#D@ '_$B= XX!A*H‚oZ 'x$T_Qa]vXHC>BHjF\ dT!CU>'@#lXd;L 5#ԁTHLo}ge/HjEؑ D9ݡ~F'A𭦒ox#TߞAAXگE;̀-d]l"t4xTPa09Z" vCr@BdpJ$ d1 @g[JoB]B. 2A"ThjG@0EAFլ A+ۅ K31A8h:(?\PD-0#,LLȕ]0>`4tD3(C L@)ڊ1OYB/S$5$ (_?ʃXSOyA0k$9>3)JqH)pC(Dc$\?DccGʩA`/Y!TA#C/9[ OvL==DQ#\Q-3Pcvж?5c5at?eCA_F3(Pe4:B-X#0!t$.P]O;IxzE>D6CZ;4t l ~kN9׾wV7Al\m<^QETQ@4C ?0$`?C .dC4įTrmE ?@rC TVS_gUeiz}r,O³7B} L=ă@烣>C>h? ˏPAarN),sT@wVЬAlgs)r'H5;H81Ѓ'\=1^Q`\@,BMfC{aP9:#B>ڷV~y<$)Qā{x:7+uu訃U[N@xBBfBw {xDш*o'HU4B=LB>:(CJcF-gj%Vd#WAXByA;Q]xlC-9Q7:-cW?DE|b;DLp3+?@Cåĭ Z<}Ŕ_Gn56Ɩ3p<%D~;%C =9B@$k_Q*{rn=}pyf? 3<93PBsq+i1DfLc!4etVB--?Bé@0 $瀞.,B6E61(AB#B &F?L)@R{AƄ @ܻΝ@&Taà 68"BIXcGANN]<|#7o^Ď۵Hyȑ_<b:hѡ$œvNvCWhUW5{ua jؿyH:_)*rvձ{ C܏1Na~<.]:љK2ebKǣ:t`r呎| bs|:uj֩])]lǑ'W0&xP;WoU휟 ^}.]>f;yΑȉ ۳Gs|XSeD5^Ha>(#H> a*0ڑACf_ZH!2Q+s'sE:D&8z><vv@RK䐴GPa#'*.:ǔ.X'b-JwQ@^9G}īPǗ3zPF_CIFP#!*j-st`1hl!H RjEL1xcX℃ *8VmI/'a㟕va'< nH>ye@]LK"@=px“~NM`.*&=#VT UD1X+BH8*:1Zсję>K.c .z+.lI\B2kJG6ƻ;;y9&6`t%lq.ۣ8')RX!dZA9@&.HTh8҅HW +G+^~Hp!THAyh!3)cQzGnPkG?intUns`b,_[!Ǒ|E`Xc`=%ŴCN@ZBUsH4In 6&sF%A0 qttA!Hq'c# ^@`4xAV<8 }E?3z3t`o7vZ%0 SW'q5` ?dy%B|L"yE>utC1Va G2#?ȉXFpAX0+p ̉#7L "<+ܒ0K?'Hإ7Pb%48X@Hp-xҡRN:`SMZR?う!|l@ Ϩa9c/I E>AdD&0Ml*AF|R$g NQ<G8d AQb!F@56,% ep'@i.dcQkUC[ 0``B58 p{DV8J'(r 5Ѡ#!L! YlX"XDC1 w%d|.824HApQW;%rZI>rSi=q*ǁ;p RH,JR}v| `̐%< IIOijF8ƈlp'&X"'.GcCb. .a Xȑ#/:vzN(0*aDFe%t*VeHa `!HaA1P֨ވA(R(PQF  ab B l+&yE-a r R ,Ɋ2r @{F( .| ed,68.oNf) !f^AAh+."LbAa0n+ J!^FX*A(2Ab A:Aj@0`H K4ʡAXF ΁l,|mr"AF |^ &`,*kOA9   v 2o Rh(F3aZ粌sCz@v-!AkcM#0@EС! MMkF+~Aſ@xb!A@a(30 +A+UF0!9PB%X"0ohe@xȦtT/^ @tJ_ J*ʒ@ -n=C"& p | L9BAE+edv- N/.>A1YH1vl(ځVZB?yV(@ht2]*'Q\`CAa AABQ$S", Nۚ,*! z-rS94X9>E-{×j쁮 >CQ2ja <:pdZ`@ 62p3;Aɢ(3aU!5 H$<6e?dbh*̖ɺj6!H =:b @*!LvBrΡPdY^dq5"N '-9VСZ~S"DPV4482MoAlTQ' c(vӤ+f9,.d,c^ca K93j+e4 (! VSvvFJޠq 2`aJB ֋/"*9hD5M*~wVq(O-o40Jad/\\"A)]5|=4v Vsơ"t@3|T t`A8VEV1.&*A VC(!UU7 #"A>%^:ZxتuR\KV@0gK7N)7&Dj4)ࢸ ؀x"rȗh%6$DX#djt)<.W!APoYy(\)Vc `Xꄌ8 j6FA,-`b2nAkIqk a Zl6dDK767(=7dISXc>WaCSM> ͨr -r+4G!hma| Gakc7c!'c9K6Z*#ac[ġ! Û:bf gON!!*rp>գMnX"Ą"G+^h! b:Y.k z(^` Th @ r Xl hk,V-"T؂tmD5ĩ-&D?Wd9{Z@!5(Ð2y<0,i2rĄ I#[!d-9u d!zDȲϷm bmyܢ#nu]֩$~鄨aj"!HvT۲[AZ` ƠފNa85[ie( <#Toa35玺!O$b5aw! kܗRA/~kW!N J&Ȥ\8$c2;!:. r Nz;I!xn ZA{tvDH&~}s ΀ hzfgΠ.~ 1 pzit 8A~<)ѪbH3!lB*2-N#R\ J4#A ө(&MJoqt*d>HZԗ(" t!8Ē` *ѠN N) F22 r !`Oa z*IfHB =|&Gy(r~ A1[hX !I! !>!zA g/&E\L%SKRd`8R`T3@V` < :< |x,Zȑ-Ԑ"qL9{"ҁ*,jۓHط/ !wM; ҏ!< cV@y>a)*BTaBͰ$l(A`]!ցҁgWH =ނacvkоE8 AᢒRSs,9Ab@҈$s噘5FTTy| 3K|僷\ KNfZBLj4j8}YST1)| 6رd˚=6ڵ1k_?{\|gpn0Bnc}֞{ UI%Jؒ X'aiSuat&PA%\)ܝPĴҢݓlk)܇l 2usܮ]zٝG&x'wΟ..SX@SǎLeI.UK @rF.2%U /D4G 5@PʂhxTGSBPE*9L9pXQv=+A "M?u6}A #K4 .A S9U4?d7~bIfh ;æ?ʬϋ)x3]LЊ?g? Fg_Qf?|"s (D L%a>1ب*ۥ 'lSpíqdgh| (N~Յ~]3p ';Y'WWC9(S50 d W`#HF%2Q T#ls c0(:0*Wu"5D'Zgx[;(KGs,;/0grMSDi`)%/mKW'=`q-R"0|;.Ɏ:G F"`q稻 S0t r_J3`NpE)B#W?q`0!!4fd똅>,cCmH3nAMڌ16U`cX*&*eCg AH'sxw>xesK:20zfc RSjy#@(2ʙŚG9 &i, UH#%uEž QAeP~ϓ͔!h!,Ɉ?&: FmD(QHBJ(A L0P(AFmEQ TAXh)KUj`4b]5&.]Xݒ1#ØrP=`r2yAH!=ڏ*WnG=/=/A 4.,>]bnN6'ӂ8x n+V_k(@a)pOJs\Xތ|ZQ `PKX#H-?! A,Є&0(Mdw]B^M.wًLn6E,BR8vS]1P(F!k9f2 WJS@]x9ь|$L2GPϗqxhYX`:ч*LP#s87D6Tvʄ=JhgC `\OfsNg :1$//x͛ ټSSU9Z 9~Æ݋q HADA|`a ))Qv61C:)*D89M;KZDerp ~o$)lafHF 6ZdG2f\pu@AYnqncrr~30q3 f<ȁ6D ݑ $09$lḅ0:@/`@D4rw[wRjQ .ޜQfB!\oLKQ8%mi3[vn:UjWc? _"w9Lbe;k uh]Ɗ5rc *OOcusubIVՅ pPGDOK(`!]$,8 'c9)~7υ"6-A,6+x0xu3<"q3t2. kvƽߏ$k'qLI_❗'xoрbt%y4=-IwקwkL ?p X7H 6x :`vm63 KnndB7  2Sx 8 q{,Ƴ{1s-C+Ҡr`r~O UR+P%짃:8JR0 :@mCX>C0I[ap _hc _) C,&pPpk  [Q$E:hpH%Q=DBd N#~e{xrPsc&Qs#@y`kxd!>,uQ: Rx}.% nޥ^eopf#PipGP.QxSe _L(FN=&8J3'pe2_{hY[ 0RuIvs1tufൈ̑E IS @qp  @'ӉĖ7 [P eas[-D@< 9!%Qc@Z`a'Ow$=D Up2.rO uo0\?W@W;K@ w` Րr 5"g(+8# pP 357XE@C8ty0Y~i(y Uc9Gc6a8"^(VZ4s4R!0A%5Dd/rɛVJpo@N7S@<wgD)X T@U1pP`` i@x Jg1ŝ~v 㒉cF dAkՒג-/J}{s`$$ 3W@+@/c5pN|#07ZhB={ e^?XIPif@]{ݥ PTLQ&by6f5 p?AltpVFP@ϲcSg940 }qc2#^a h#5p㉥DIDTZ4P >*w - eh@0@CXmgSgf ɠ{Mp}/ep~" o3հ tQp`C m`M6ċ2qWgx/12ODMTO֧/J,8 @"B1 3!Rz9@0gQ*W"b$Qd J֘7e@pJ8aɲ@<0'(URVBrfa P#,{? d?W <R  ^` 䃱0KAWU"/cd rPd 9UnD$sP0+@0#\y  NqQZ=;a FH՗ʁ(^QE 7  ` 4.B yyPn0,͏2Px5fɄTC Y`yŠSE&Y`? ?uQu3l 3QӀ }dph}P 0.qm&ƒ(c@ `L~ϠXV6a].sd H$<00%HbQ<߾`bv3|zJӭDmpA ZlQoP6pB0_p| 6p0 A0AgC&U o@pyp$y.gӕ&iuIM lmz+FO:!8G$;œݭs=:;/p/:D{%"y( P!H}_I ذӐ ^S#ܵ鲠J.ʼn`#3D9 fj1mphEWݼyکS9D@8q/BwlGۡ3RK9W3e8D @aHAG"8FQFЎ4@ sAWaŎ%[={d;Ef O~G\՛_*LG8{S8FǙf12=z{ہ_;v]θ/9I2FZ} 7fw;w%W1p+LƄz~* `:O|,u `gl\Q\ϧ_qFA#h@ϣ3F n٨;"p܁) r:0,3 DܙlD95vLt-9B(bvǜ#t,k>LBw.Yc)7A% tZ!cRh#BlM8Yz"TJBF"~tPʧC8J aMBzADHH0ܐ‘pӭ)(FZaʠֲ)48Ö~R yCֱ9b ʁ [gYnm'Zb50'nǚ]DL^{هb@%xQ#e{)\NxG_iǜavP2A .!_.a_xC+b=[h h"Sȟ{Zi=( &.9,S=GF4& sɍłGyɊ%gbkX x =/k6񛹣KYjH.tg/C :Ioх7u #Cˡ|$}IyW CɹR=6$beg`Mh|Acg*ϯVN>MKY|f\'G!)x7w0GKe|(HCҥ>|L `!2#d8]jnzx VeFs>xB+@9P"P Yc~6"!G6D,nDi3aNE05΁+(<tc2A؈g#)xʀu>FLF J[z3Ǭ)=,SL#qy#[*ӏ}^fɢ{#oU:wtlH S i .j>1r2PY'~Tq#ñe99BNCh`HyJ  UjeN4'G?iC_p9F`2|">ĕ>aH;Ő Hq4$E̤_hPYQrdJ=- 9 {b<hP[ 9FwU+{## E@hj pB I|`Sp*` G P2wq;ҘxRn~W}`3 12jVAj#M\gWaIy$5Xuc+Xi"I~$ wFZhGa.evZ\D, N:/3@/ ADF ΀LeJd".\\BD&"ҁˍYk_bqvTi?ZQ, 8njYCDo1,ƤǑ?04eX{ DqH$ r@Kh$Ľ1Î@J|8W&btD~yY bu׀5xAdZ4\ `ŲݜG c:QFeXbdx>=.=O$<ѽCr cWr014tk9 Wmgz r_"Adl1xA$B/O?HǶa_"@ .؅+EKH>H7KP=K7XSh < 8>3.=8:i_'8"p$H@(7*r`cR^6~"H@ hÀ I;x=x?HX*DhHp(ǀ!{ݙv" |Tܐ+2Z+ (ۤ;et'G"@7ȁ/(9H(LC//`9 H hD4(xNy ỎH:#Mt yj84TSMcy sVMwȝϝ]`_80&0ɇKȓx  .8\̧Qxjm3Q:üap=~;-7-ťMBz9BŠh+xO;㖌(=H 1H5y<HC;;H;*07q0r8ȓ@N*? *"\BdHY#dF]ԐHO8N:8D*K- 67+Ӡ !@i TͰc(HsM]5ss(/<֊M287_]\QAlA:20I98 s8(<+Md53ch,<ԄVLZ.XV6pVc4v)˪E%(n0~\}S郝'YFKe1̚xKOhh8JؠҼX8X}iRe@=FhЁ+8X ؕ#X8_"ݴk.EtD v0˛%3C,"r\K%0iv1*PCZ@H"{]h♩7X ٯP+u}0uMa2:OAPHUy$']!+Y' eBVh>Њ~HQͤj\;,ͬ1=RhN0X8.9\  a#-'/BHĠ7eC`'ny x-XGr}_,5NG`%2*@9ǚ;8((P8!*4^ )t(1_:Ⴐ>MaE_hԂU?pM0Ka\~(X yhj]-F {8 v;&$eS⨳BH *e<┇Gpܧ4TVsPA2Jj`2F߸1,ldTsP-R11eXHM@ x;-W&q}HܥtL;\-k ٌܪ9֊Ў}OE%'_A>!%O yPa\6+1'u@ 2oP)eUЫX^V09p\,)v=c-_M:s)X'~A{q ?P.&0N! [za&`(i0T d](<*)m289xR6j)^)x=(-^LYk(,3YK8~V kH!@vkUR])+lF"!kۈ1PP(*8>vHŐ7@8,܈nx}9d$`U#3Y9ف|XvF4k8b+ġopu~8APh.)qxXai82HSѷo) 9ȴIew~A~b".hkᱍ+<4X¸^H[rvez -|%5hr\d;[cR UUמH>PEu!jP%7nl8 )R|y}m1uΡƓ3oCv׫О=zR"ȸd5̖J-ҦON-Yf+AS5޾DtZ4/7cs9j?.]:Ez4ӱ :t8uX$t.k`;_GpG!yca`9~-88.x@)p'Q;IM#034BN3ObVC^ s!t΋@IȘ% LF>3 hX= #aIwEh.prCSet!)!UUQunVtIx1N piFs7t5DYkj%!x3!OR~% Ra-O9݀7L#pL#x|| ?ccy7ci7f~Hd0老`,Z(/CB3Z3v5G>8VQ)|zh\a=Xz)gց?Eшp~#) :6xB)CPI1h1b^‡jPi?^7B#%ЇGǸS3F#+Ez$)BzK'j1^DQs(}H @^E=jۓB#‰Rp@ &sPa͜3=ј#B5$t䈖PR4}8"TȀFO &y@b )QjlR G= vD Q"` Q0qp9LyH%vA xC? qpbbCnZAҨ,!F8Vt GZ XH,MZGJll"Sj. &*RTȠGFQ4D&9Lj$hLP)xʱ&$jQ6[ڜcȑ6ȇ-:$d:'8Ј!)LBfbfA!=QF+$/-Q)^` d3яC"(*G/&24J8hἕ4UAbƐFh$!9M:2Ρ۞t6#jG$VHP<hBm1&9nq .@W)x$WTά>@X ^Q%D ^x63 rPžZVBadMvE>ڊJ%&xphWY;)wjj?`%Z 0>ڐ9FݦԲȹ$8ES KݙDY&4`_Xr%!C%}*"'AHPRH^Q<w7ms"u||$ƅȶ•~+&hz!cuHQ( |Tq)bMCdӏq [C<8ٱLvc<0yh ^zJ=rOrnt=A3P#HP S80rC:NI ^X"XwQ!pm(R?|02ỹ ?a1ES6x)#==Ky}n@(؀}cC~xcw =ؑOT!6 ,erV"G7.&$dX  @^y2 6AjR׀ܿz X6j|v>bH v>$s8w89q˭FH\C ⠍.A?lx=Fyڧ9Wa?d1 0 C ` >p4DA{BNF 6Et`bqYk8D . %ݖAa>J@ 4_XB. zi ! XBBQM:ãaAb C< ؊2+JIMC?ECC xB#.b//c0 06BY8\:#F$,D:a#I.Z$fD;̃?X@ <9 LA.LA :Ep)A |A A , "8M\c58JdPD!WC?BB[E|EP>9H[xDHJn֛CY a:̢o%0 B8Dry9>(jTzDhP<(Ɔ\tS@ 044ܛԜ3HsBgt>!xE@bp )F?HQ<#8(I9YA!Ad~X)A*g*gB%p%b!M"DCbgREF< :݄>9HJeYIho\pMfXC%Ht2ޡl3Q,'A*%T삘r)8Ha]a_"Afh)H0FUPDR(!驢Rj#lE`:R?4r'9%± A.)JB@4AcV%XpHZă 9AHHPD`ay)֠:kE=:C=xDdB>LAv!jTvR>GDĦ8AP8PcC L ?UQ@Y y\1. ,B>rAU[D@>A <-pM"?"k^C?#Inbn(ԡhД96TDRnpox.t&A#D{mNmIieD,ߒE)c$?<  E <÷ho C*Aă<VHʢDDXD2܆"Y֨THƝÀ@T G T}C?8+E\!h|ر0wnT""<؀AR^0،5J!؃?HԪC0V|PRnx A%O )prDBbH 3p-7:IavFG'uG89 "n$ @Q @!p CCDGg081lSށ @ "(М()E?'EI Ni> yª`%ƫTnrFߍUwhHOc81܁#`lݤns3+pó1:%::t393S3:;l.sRrl@d #(!̑),ϤؒBD4eƵ6yB>IE| @.4^gtDqJUF1)v!rEJ"Lb`V496L7C!ӱSW`hAnk93T1{puu>?.IFCP @M\Saİр L$p(2:ZY6` .-(9 GvC-^vH819Az^C j d!.A8kC'1A:vAokASp&#AW' #>mUrH?xԎCZ!FJ9W>U S?|4k~gI;\dFƂ?n?܃ڑƖ8\8D2p? @ D |@AD+H @;5P=CM 0h*f?SPC/|'5|2SiADǂJD\x*[pğcpe *±Sp[ABluDArs F4׌(dp-LH/C/ %#=/)%)c 4H:_CzpX4⃆CzkDRx ,S9%m>8DAO<V̉+K[V4dƦXWAl4x˳x9WoR MD?L(Y-)@ $AX|ȐF5#g,bhQlXcdžc7XVuд=U&.ϞBWcK)B$W< \S,9H*.sN! KXJU%2@9V_ݻyHpo5j1M|z V~{v۹w^=rg’TbXr9syzmΰ%yD](G> BVϣKΥocIBɣB}LȜ5tßGF:DÍ3+eD+X>hQ.{宝tb:sg%b)tie'$e)R, ćc4!d\x"HࡆNbH4M$^ |u}X(Xg4HadS“my}!Р¹M&haep?٣~Xp9r\xFt)YyEv \8 9hHپҢ 1]kq9HV;bPt=5&L(]zֵ,geJ;bS/7b@P!/|ȅ N H 6_ DS aAzBzsΗ:P!啯3rż*O6S@5"N% ~PH u@"{.s&2B XC3pE ~aY"9acBU ЫVcx$@7:!!iL! . 0 xT1BE7 HXX6zu&hv8Hpؼ/-|PCs"ȟԣzBF@&c*OCAN XG30:XzȐ +#&X"3UӔ o#2En){U;i WBxu"ma qBDSMnx^ `-cA?P 461DCHct$TB='IsDUp)U)2b 9P . 8=zȇB~%wFZ(C?бUZV7a~U /RiHM#yRs+!XC9nrabG;+x?C fqe`'P%FB:@d@;1@sa}|r"\FWz&SC{M R@2@Ijk[\_- pMC\IU`xt 1-L.u9P |*0 XRe/* >챆2CQHGQ cG#Y(`A `Rh?`SC :\CMH=A+q y)RRFOhũ6R^:%0Q.a` u8$aN =Pk Hafq<E:ra(B0N NVHZMJ4:a;0 z/O8k"[P]X?` {A t't"kjQ ae(?+sC IvC 4ReB |eb HqO HP94O H@\cNp?)DiPr+RP(U}A.Z hFYk43X }s+Vk̳갇p@CP %+'J eLq t(?P>:v\ :kHARa]~w8Lb @r~/Mp֌3ay{ L>8AZVPH$#5H(j𾯜?rt,a^4ncZCpUJ(߾}0`1sFU%`X `fnd.1vt(Bp%aa .A! bLϖ/!Z00M9R&>7-a &v@} p`r  b A!=ۺPބ#@͘K~dݨ:a#ZҊ/('Ő"cNDvn D, ld 2`Dv!! AqA t*8@"?pƀ[&$N; OP0P  #b !W ! <c Nn a:z$Gk\"' .B>  F`Q@'h8zhQr6 @ `;: k :@1z%z[a`A 6GH 0@" a!⾶bD` ) XfiPaҁBthrZUX⁾TgK0 NNH_Ch&o Z)/nQ40 9/]j$3#]̦Llj"v\kz :7rf @~j!A"O S bU/ pw^B@  Ȓ҅\m\oX:KQf%^@%rg j!^ a+tw3!0ޠ֠` ~@۸N) J"E& o|d 0 ҇hM%f  ƈ^`N! Vtx 6` Z23LkAr ` M fQ'[~.n2@ca P8`kf8&4+=faX +nũFB.v1~^* o)#}a= f|Zf !RRl$ Rb2FZ:!z V:8n!i ht9 #%Va#@D[&gBQ2D 4v AFEр+ŇpE.zҵGbaCPf"q`V2󙝇ʻ!r`a`^ VsSaN |pOW \7bȁob%[#m< t t@0 (aLK4yJo-g{]J T(.Հj eUR" `a]V(l@]?NC|}pJ}枦ziЄ N!| ^|3O7 pTøU[,!`СaVf=`!.} L?<hs'AB.oҢHY `j.9Შ@}>~p `H[9+a ֞g#= ФǗT7X"QG(9rXsjhg,qYa̩'+Ȝo)|K͛8s괉ߕo(tj0t8To7:ԨlCs"pʝKn\1bA3ǬCA LÈT371"S T ?Mau;'jxPM۸s}ӝ{HqAG@) C$'yr|bF@Ir)KycI}B"/|~QG|ܻ7_5bVw;POX(`?W΄6ShV?cUVZrTavhb]a1rY~E3o4(X:ӏ?b#sB. O~66i~ӎ=쳏4]BlT:`)fR5g1P < 4B 3PMwC4а5T 3vC#\3M&TQӓ'?cOcUeX1ƉF[b/6_@&[oRJb=38?ဿe츂,>G3O=Ȓ+K>a 3iy{ o ։$')kB ?\1QhX9$%MǶ!YlQkLWbV|<@U=:FۏRLNsOKWm`6[?}L1BY}Sf0eg *9E=JLU6ZՈ']Pß_ !^n,[f[ hH%XϤfnyoCwlO=?T1 j7 7 AJ?С'p"]}?\N>Ԅ%PX(êd̓㚢VaGs(Eg`C|@Ϧ Ä|&`EA+#[G%g#df<\8~)(At:&ZQvI_9 Bpf \"04dу8btE)գL aPqhLPC4rSv#Pa ` g^jG> N ø5&VgYY!Hm!"aLa)Z;`SlVJ:RIZ6)p`s$ p*X*1*t? )pJ8@T=RFd!Zr.xf H@DІcxKZGlς0AM?4_MT B)ƺya?ЂCC 2A✴W,>8s%E#CHBs@#J1q\ʦXͪNPKHLa pO'ЁrL7 C m5DŽ$Ž9Kb215D+fM/-M `})· zȕ«3}ٮYt0)Q (86 TH%h\sB ul+P!r'A~K\Fa1(ԡU6p9C r5.U#m?%\""A ` :nJGws_)#RQ (/ c+)0OF_҂b3x8pKyeĺHfQoA`"txB2,U>Q: ͻ \%C,, |#G` F ? FGKP2`6YyuCg5';<xIN ㍐=h Dli&78btnwv:zOX/%4lAgX76w$޳Pm'l>BJ(o^:C6g7X8 ;ηq> S _*P=ZsLD.q )Lj}P~H m@F>Z vR'^CD +Py;olpqYte44 )Jah=ێpAPR)vg0v'2Spp+QbW`@ :P r:AiWurp ,d#-|1el$C,eSDAk79apf$Psz|BcR(&%#͐d=$@<6(/S| 0w\R >)u fHXp@puo|vq&N}Ђӈt B]x7`0mq {`Wp@-I!xJ&JjHS4, _ )0i $>g P3Ea.v=_ B1;$4$y峈bdW { P,Ѷ ytАeDn|%DE,A ?{"dA OCG }@Hht'n(˸=0dːE\ @Gh0k2q4"cZ(d='hpcIpef;ze|0``p7GА`-z~O^5PAW p9˸0)O} )ф٠ @ Pt xe  ZPy^ri*f VK ??P W tP4!ɘ~gĠ?`k𹟤p@u`upPs8Pv Q\PSpjdp R8sp@W`B§-PFV( ntI ;bw@.Ps r`[F`Rp @oW{ g8`pZ:Ev.8*>8 -(P{@ءb,; <4`M^[p V݃Y. wǧ$lTHs$#c ס Dˈ+`V8a љE ? ?e=MɛMRwྴ㭀- LpXA8pٴYXpKe*5~**}=q=p(A'_u*Гg Ff, L@@8'I7=.TR]l;+;7@R Γ |lc% `ZhbEO6QDm3m vp|^ snv↱')U07AYԯmW yp?:@5w\tcw׋ɇY |jrVl6xJc43߅aA@H(Qځ H %e|KL'W.N.FqRo!\*7RB+u%^:4_p0^R"]v6 bTK%T &*@\`V_9AƨL 'n<u~d4٠BmPٰQa)!f 8Cn tzu0K; _L=_PTTHe]E_(d `T?A-uPzM2u*3UZD(UOl%K--RpD;t`PQQ|[CNa;wk@D-^ĘQFǪ skwJg1^?ɮ~bd-i0RT~E)>TU1>DNpu˺Xe͞EVZx&{#_>l٪S/96зl:tY9):| q>.͛'5g@YLQmcװyb!iAԿyo__49/7v͟GhHпr(5w$Jc#s$R,|ip@&B'$,xs@|30g Aѩҩ &!?Acr9a)歶Ċ1Eѡa2K-T˧28Q=q,R7f _Α2g=: i!`}!G.X9ͳIG aB.K;'7z'nXa kX)9mT\h@WeeTi5 A<2+DQY<-3 ˲CP !Zge$#|b~No1j(J Z)fhQb D;TjHzRxaJg/%B`Gf&z'馅F8ir'l!pB i3n/2Ji&ړ7w쉲Dœ|IG0~xk,d*"(*(Ǻ 3J H tADI=vfa&AǟhBĐV1ǺŇ-dCmp`:q}Q"qbfha6iuDNY7&97x#Aa=n9 d!3 Pd"#(FTBA䑖0f+貄Xn!f1S@4sy;n+!:Emj< B 0珤Ȣ#dG,бPᣝm,DxwHɺDNڙq; `Gu.&&;^J`B& LP{ѷI=)J.E ͐Df0g uha!Y۬c0Pn~B)p D)!^^ThLEi8#`0u:mq P`&@ebSKh< -b 8 p1xA1" AM|4g"a6w|oE)8O8pqbGpf.F9C1~N8?W؂:{G %P{ɝ&2LhٛDy+`X.\fA:>4;e=4,!%$U L71vA\p ^t8ǧ-q<2 :5x֐0,0 Ьۡx˟[@%y $xk݂!eSQ&KH$F_dT (IG A  !nA$$sshSЀh8EN A ୂb<1lR{ \(z<ʭp _axdh/8p#†H/9p2EULJ%qr>T TS@9HKS8`iS)ȅ$?0R0G[|(]ȇ!/e1cI+^!v@F,}ɒ|-05b =NE[x6g苬^PCP)Hsi8*"4@R#˅>\ TvE.8@S 40&c> ѩs@2;Q"txB^8NpJ\#9{z !VI!:"z0ٌG|8=O AU .i7OЁ0 DKF4/0B,غ<9'@xSKȁ(;H(C7?p?̣5r{0* r ~Ƿ8`g)j";q8cY@(U0`< vި@p%p%DIOtQÆQ!жQ\4/%48;\782D?"*@@1T%t\"$F?,i<;w zك%L nUOȄJ&2hPt a,O,%XUaS\ )p2sAY]zMxeX2[FH ȃ>ȃ*x94"*(:%"@XB%7Q(}R G v-y8T( 2S=PK8j%@Y4B/*/M(`8tKs8d`TIHW PͼLNPyLAR6S)WiJ:{{xC7X$;;]Jj4"u`I1eЉ<):(؃{Zp)!hdSa2cYh(8L T`A脏|ԢpԌl&PV8Eoa*ȁ;w;<c03؋3xV\0D$@Cl֗MҪ~l2 N( FM9+W E6Md &)sV|PE[5`G2MFeYYsV|پE =(hYKhQ6Uڳ׌ͥͲGX} P8-9} XPeh\^Ё1:@8J*K1vJ"xhe4|htTv[oy&oJ3^hP1Tey,[pt ڄń5mMHń~WUH"\Dk|11)Hr+JH-$b y@ ;I]@%5.`&]YdRy>,`ɇ4[ &xȊahVv@!tt*ױРc6 OۨVj\9(2 -&8)+`(P- ˕!v CH{ #,mٞsGxu2`J6EUE< M>]UZg`ܹBLD{)m`-0سcY7V G(Y[gJj 4cjGM0Y(5OU9'LԊ0_ýfZxI1B2k! RղF4VDDrP 瞞㊠P?(S:O ǙeO+%D 'Sa~EIs8͈0`fs&{23Z΄VڞD>hmcZ#GJ"Se 80yNi;=:tZ^чKڹ؄L`H}1 ]P2^J6ͤ2s2bKO's~.ZOdh11RmF:G@6{[$J֣JGG`ihѻl8s#;쟦†J0&*3IY30su^J}lbsux+wOkPNS_fNh1 fn@"(0 !"'r("8kXȣ)W| Ҁ9>(Kph8-0O eUR@sX37os9s6s85IePUxc0P VFlhT:UXsHE?tf0F`팘=3gi8f7(nfqC>>Rh10ehSpf]8i0h8vxbWdgewfghibosnqqqm/ּt'oDw#okf|'jxrkjkwmmqjp(nhi׆wxmiul#~qrrtXyXuxxЇc)lGp7yES^wzezdz^7 {m y'jwollHl`a_{m 'nІinßo|~|k(|+|{r{oϟ#gxџ/|?{}ط}Џ}@q}}1}?GWgw_'gg@Wgwg,Xh „ 2l!Ĉ'Rƌ7r#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:w'РBvV$NG$A\(P=ysA\z<Ո;HהmmÎ@ޤ&:Hix"$Tڴa*3F衈&6裐F*iBt3饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+JXfkP*&k1)~#iRP@ }kP ̀RD 8 }o 7(YWЕQI A"9lJnxP#CTQ50@ 4Cv@TFe=͑@DTEL7MR;0eBPE/F)/_ :m :k^F0M;/BeMP5{-xg`j&V_4 G~SYH@ +y盇袿8J9U9$@%~q{ÿ<\"O=bLw/o觯S/S,l@ "Ah9UGAXVqh",0 DA`BXn`xW]0M@ B"B@xLO, Ci!kO4xppC0NۄHEBU)o n%r  ,P,F6X:@?ƒ d((rFDю$ֵҊiR $Ƞ!q(su#>pI $XA2pP(wI1"Y@L4P n@yI^:V D𰁙iMP|8r$ GA 2jEmn` ')zs F3IP]I"A7_81ЂZtU^F'C HсF EWҖ*L "h4Maz)15 e !A]ɍT` 9SթPP*Tu TѨ>ddH-x uAC~A`W`֕5z} 8SP8d$$a!77̡Jd"nlhGځqI5z#oБ?$cmM+r-H"4x5&0W mo/+z/&Kn, ĻowKJ%/G `u{],a?|ȵ-u]ʄ3qV ~ļҀD׾i з(y ,nI1@:!kՄ&pcjP +x))LQkXm H#.gs@ى}5cȽ@Jj~#(O9%0Q/D {'07  6"axH!g}w!A xgxf&S@/$@~SߒyS̀EsVnrր;g~0Vs h ajZ`p2;w;rf0,agGii;Cѐ~^a(g`g|[eKTE0 @~Xr`flȆ7U%>'y2z~'}'x@@1 tG|ɶa*YTh56 0c7 qhVC G5a@fwRix aX!8SD@moRȘ kq0Xa%W!|0Qb(&u^٥%^4 aF'o}%)g'93)0HZFyabPci Pa 9 Byc  ^W `d{WW5yX*aaUis ))`yoaYY%?$]W1h Abp%_f{fx|8|GhYGnژHxFP!ismU)9 phy  p ؠG`Y5}7wvS)]p xC|gnxij)O`# 4+Cz! Y'bZp)Hg.!Ya]]dYa,^⅗+b yj6 q4sJQ}gY¢fa: ` 9ɃA2p})qblҰ 'ؕ;7bf={kw2/)F8ڐ`QOq X#1\`!ј/A a9:Xif(꩟ ̧D\{~(yPnCoZ%Pʈ80ЋJЛ ω"MHQ V[R]8p&JB7s/o㺉 Ѫ:@~zAqD32e|{ə٘/Q|w Z@' 17  ! )zaQ Zω|6+@ A ɠ$yQy~y: Sfs_öQF{ "{X QjxJ2hsZ wA#EرW{~9`2fYfjzZ V57&0\-VGa7s }@ J$uVwxS*T+y(Usp1\hK ~qkq] \:myd$ʑ瑾)!CvqCj7f`[ pWspxGG%BD39m #v7v u'+<9ѾCb1 A7#C `  Ei+ls!6M\5,P{ 5ss'+j+P!ZwF\-Ì4Lwж10AȚxg~YHзPi|uWidalԨu}De\˃"~*wfv}oVP9P[%Fۍ٨h|G6m!H! `K5جƲA蟡 J1IX.A AoID\iL;Q舺%tm ͳixpAfg"3+Lp'q9k{o&(aGp)a [* _ jF |s0kbܲ z#ע.!tP u |E!jdõ$ |n9Ξ@A#y!,fu`(!30Ån{h:Zdy\L(ΐ%{$ھy%;x(!1jǾ$(Ymo-P a8{!K*uy |3S:wC! :3 ڮ#WY{P)Up3j<.a^^ ڴOsO0 SU4D@q YY^Pa8 %fo#s&h׸_&c)ڤ/l @ lA Wo ->̔IPY0TwQH%M| >-]Y^CTHa3ZeAtc(B n4pc&KyA[!Xؑ4 v139Rj})ҦkI < ?\2ӂ Y3{3+4^ s !77tءe8K Z=g"41*h|T Zރ3u >x?1V┠e.5s#kOPWvЂ^0"4\j#0բrRHZJor` E ǵ.ٲ% ]8V(h݊ {&- R>&V{<&H+ nKg& s3OyŌߋA^Ɯ4]m* _)Rz}=4K!o,4zH7v:! jҨg%c*|,aeB ZݩG .hWHx>k r="y_ 7µ\ { *)JRȬ ;G{M| -25v;t&" vDS"`(4 :MT]dr Dze-ч lӢoxќ9aP+…՛J-OEr)0wb+lB~=`Glšy^әG?AiZXCUn^Ai~3֕NlIECުE24mf:ħ.gA+x9&'[UI0D RáL$SIN78+iSӓ( HNmَK^@%`Z!aEV3$kig~xfF0'\i*AX@5ː_AC؎|XJA^dU8h]\nԸUW!HIL[#S3!pXk0*C՞$Cb0X'|oCqՃbVQ:Q>U0kFd_j;XՍ).ނhq kCv_";6pR;R1? D 3Ĝ=& f6U|TTxG?VOGYC1`63tQ舌P՝=&Wldg, ٿཁ3ODp@r$~v>86i*+gC;H C^d`sG䖤y>2%˳n=U!ǐAX$ts@Yr 0{h3sBxQk@vєH†5I2!+ <ڻ›P } $h%áE!)J@60VШ8\dٴDm#|x#@C.8bXfs5WAjM!7((EPv[ [/`q?!48gx3Mk(d##q$ L0E "\CXYY >.F+2.|ClhHed=䙯 /}/HYQ UIt0F؇ uǁTȁd#.(iG[A [*D@ȊX AҮ2KZ 6_& rP; r@P y^ĝ-{H˳jC ۔zKIɿDK@b@5a-/ȔbpDDh2\z$`%"yl[Hvrk˔5Ph>.D؃Zj"0=ZA7#C'M>ƥ< ҂ͱb448LrcJ!f8+>9x&>\ [ЅݰIpT-_@wauOoѠhބ<6ih21X@h8h=T*:l2ZY09;B *u(J< `(,C0]хȠԣǐ΁>#PCO^K葆 Dy!s7Z::"zJ6STcz@   UkD⻈;5&{H1ˇf)yYOGYsV\7:L@Q V؇} ̈x`.ƍ˜s Q]* >RH5z3r x'P(*81<N`5QNI @CrPyC a˃- W`bҁhYؔ h=$A5 S`WZ) '\'Wgӳ3u<;56ӭ"ꇇ"瘇s8pQ% ,0; |&7>"U}x)0[>>e[S9FN9 dr9W%|`ܓ*Ȯ`pS"ӳ-DyA*Rp]d%,25h1 Xhh/H\?2(ԉ9˃f ޗ>]]x}a{]1! ݯH/᥸keKЍYߘ9O_~pǗAZ :2U 5fȇUƱI ' `PP<%]M- (("]po銩\` ~Xװ sHؒ7\,Շ=I %' ']NQ`Ȓ}p&1Gȥ{RB9CFJ6|c2AX*Ъ1 fZ݃HP@dD 1&|ЪddHi(ʸba\䓢 eW=}q!RVf?]X  OX *e/DYE63gp߬"W-^ ָ|pь^PZiQ' hCx *5,mL֘^6ˤ1 ቯtn@*VY]臀ΓixJʾ-۳Lnoal0k̂8no͵^Vdхȇ.܎ ug,i !֋e ֖5"gh)tb I {n8r*< ?&j.8q&Gq xʐfm桍6@ Z, r?b@5FZvBsFFrz3p,\s ZrvAK3:tҢߌ*%JnlXJȂkȘ1`OA1! RԂRzHro͜@u͌$&@DLk7MXqx0 P睄}QqȈ҅̚ {R( 7CoTz QA@ŇL~f?jW-9`m.qhxuy~ȏxx a4Y3y>G/=K) pYPPxd @CBjx^pu-wGpψS-x|S~^8XPH-&Py6eýѐg>zf d9+r_X6.Aǀ>0]3z9lQǹa +|i$ l$x="ZPq :)U&"d3,)تҔH,O|6 t}oyK~SR~HF`ʮy/+$G{L0C!2hѝ;*ְ#H1t.l FLQq˒rqC ˽,jщ)Jd)ԨRR1{Ut>hٴ `y\ ~DpCJ(-ۃ[#^mkF ` ͊uIx"˨13$Ϯd@>cKp c)&JKgQ=9=ʅKsDo,nR_ָ2U-"rEF*}4AΤA.t *ed4QG-Yi+5U;zTTZ\7lEJ8hmQ٨{Qa %tf*)#pN)W|4٨j硫yZmVZy-:U,&G=^!T8ps5hXtx D,13 -G/ A\hE{ѓu7?\z[gsP?"9 ~ ;XhBlRi 2 Jx &̳_Bxt\ 8}yГC)ZbHIp&1XE>XD8` E>X:ĊDi ٮBR8_X=V(jԉUd+cZ,HHt{x ؅u315 5j$A~F(-!3ɩ ; >PٖS&vd?J*s˪h ;rg31L0 }ģfl1(9*B Qux-$I8pM *Sd'*3l$]AZx %AkγܣH\ a<;埓V%hS9#7H&¤*2B1H<ҥ i*ɢ:S6fP訇R hEmE/#q(1_P'p9Qz*C-A ʐ a$eo RE} DE*i¼K-Y`q!u1+n9tu]يbW-&eU$!\UaHCUprȒQG:5,* )bKL7iH* r 7"MVKey+*-HQA465jU`{^V nrv!N@gz$~]b|P!TzaV?d8XR qt!0M=E8H⊌ ]Y CiZJrf) EZ, pGǖ C%}it<5LrgN4GP:i Z &ݰ<+ShaʐE&¡f{'6d~f)ZBP=`۴&j $IhlxR*F8. e bd,$ zN"B" !=ѣGz6Rݵ›KKЎ5N)ҏY. IzpkqC˞Y{O%cH Ʌ!Ͼ1|$7@B)\]xLs_@H:p#҉1A=Hh-q3.K#bdI$sLm91z!`i=2$Q7BQ Mԡ )H Hdֺ(8AB@}~뀏"|sp-Q^E`K{#Nx*rP{C\7N.@K/Z" _Ow-gouJw㖎( )лWg?e)|:u SEa'1T%A0B'\LPHlz;WT<NDxyI].|A ,$PHIҥA.hAyM9P^7,D ݄މxݟݯïd aCmD<T`*$UZi!ClۀT@CBa& @ cZO E.r>,40p 5BpQ]^SZH6([C],bj-3`206 A- |B8`E0ȎZU4ڑL[1=i.\I ` X kD"$.D3@WaFQAH}}!)4b^8U-G֘HGUY'0:A#|(a&Ti&(Ṇ̃v夀b@!jlNB!ECq%}ĔA/D dx }USn1BDBHEAE"DB0:E\@VDZ~D=l@ b6IH!v?䜈R̔QtaeW-X$E+md%Le2enKh.h>}D>PXifiE|eEXC?Fo4LGWdj&AP؈ApVE0$b>:0~qWEEk򃍵fE 0DN@DPTB8&`{|g_`CJ˹2|bʤ|,2 :a㕠q?xW a:@Q$Rv'0C-W0H%mP B|Er7bV0OCU&T Lb@mZDJ p h[EЀ@ATDtH:u E+,֩%``4U:Kq(D0HNDX[E4W4<AXEδcc0 vZqMe-&\LCZ)ݽ!J cZm JS3?0A$A|0T1O3B\rtT*6RBAG ",IDe׬%K05̙a~G5Ԃ'k'>GZ`L5>lQGG4 g ]DG 88@sA8BS8!Zh.Ua` _BȂntF~m@?LD}[+0ȜcR\0 Rv]0K<]?0{/ݑQр#ӀD,5=645r{F9vۍ.0P@^q<_݉ DxO=A!Eӄx]Jfqܴ9c t-hHt I.)փ|ЁrkZd D7-R6V9jjqDYK:s9S;/1>$=YUWz@L-w>=Jݷ^ƃ|U<{4K]oJBEq ;Ch Q)q;KȇMHt`oua=c|{eMB)9vtH7}I9K98(|Џ3VB\ҁBtF,.^ ty!%T;T@m2:"W 0uG&Rx7A9WFc K@g> z`f@t$D_05xH8i;pJcU2Ȗazq4D~#e^iCL#p=WG<R؂$=GX@P &T!q58bE1f(]AY1]'QTx;޻PJFL6[sA\qpMxPWfպfztAv\Ѧ*hۙ!D.EّoyV+S[gC Natp 5jpR_:|V!jU;~ / ^ e7pֿ͚نJԱ3- }Y]˦z`4Xn/.*n]:Fȟ! l|f} ~{Hgp Ra.u){0[ QH,)@CH?#b>V {kTAM9-$<-ܣWȶ A< ղHYǭfUM;t8xG=$qC` 0 9伥14Dc 2h"|u(cDŽX!3 ȸ)/K!i;APWϨ7gsXa%1֔3?:]6DVILA F*BCfAJ!FJU~cVqt#~,=~X!sX^40@$;ws'=ٹ{Ӟg z@%~`.>mHYRA/ YNKxH$|L ;z1,R4yzȝ2G Rm?)>ψ*CtK(z$PXx=>sX3 DBFGt9S~ T1%Q*YT`r< tQ~ַg8QX{.@(ƒ"X BL -vx%Xy#G ͣ*rBu@@p^Axỹ7S[W93G;qPRSHV0q` h| 1BgP?|;! /P#t:bU_5 ,F .!U|So~ C`=Ta .3޷HGH_@N Ƥf/  "O`y u8G4 2dY:*$؍%9IKPjs7f2IH#s9>`G&;hP2!+ 0gۮ?\hDfQ:#9@+m1S#`.SFg"KyCQ˺1 xq=li'd 2( Ex.tLQmvqK1'o(3>WP2:Fl" ". L Up;r0%֐!P+8"tlfa 9 ѫ.ڰ N>d˰8 Hg@UPh7B-6cB )^+RCe%BB#A9/${MX%]qM-bDoZހ <p"rb4`pA abo#' j & Hhh(-o+$.8StiF=2$X0pr!v%$R#2$&'3,]r"Y8A~` @ M1\X+-[A@ ~JN%8Ym8q"g[4p p h`a<25"vP1I,(¹t!U/zQ4s!=o 4'p61tdDYtЁ` HNJiSD,Ho!J &Rj~p#^T# O#Z,S( !D"VR-0 vk)t!DTB4ȉ5vPA$N/RO񔸞&JրL/-&xpd5TR3W N,aD~"`>,T+$ 4L:Hj ,Z`!s>]bJNR"2U9P~ HuUԄ2U]uX'3jd |`5$MF~ JbZ9h3lbUXCb}Fzt!0!%(u!-(%G_ar__"Q5J TWYUT^OzHVbig``!B)f!74AL[$$` c!ba>"jF^ Ja-DUEd5bA5H[hT0JMbm&nqfO¤jV!V" tgY@ 4>pVFu# 6xC lLOW/:zbfmbY#lkހ Fw@%AhKW"a1Q&Z=HJ^MWlkւ6|G .8 f >C1v_-2Ȗe5LXϏ|oRxOO? AViU#-v a6JKʀzy 8~INT'a"&(. Z ǸkUX,LDYV>Ȕ5/jyQAʁ7+ue%OwcPpB Ybot~~B5Pa/i_#Vi/JHր0/,:"%d 662mFSe#FsUc|k*h1LF{bH{I`ˀ<~F @tU~A`lXrIT-BQ!X)r34y!U|BAe"ľӢ]2Ϣj?[Y~~Z @bD&?:\-fk|"*:ÚnZ̀P?QBIQӧǵ)#&.hHОqnyᒜǗrxcc6#Z ܲJy8 ,ߵt8=A퐦j|[/:끲[ <SW;/swݹ y eLp ̛qR/yӺP9rأ={?$H1|ٳAG`N,F@ w CPG,#ڀ2D%C%_QlxM E䣎?t#J9#-Rc45 9 A)(OI sH CDd b=h% Yɐ{oC*ADpFĆad-4>+V:I=ESvxN#SM#-ab|g _{"b<%uE#ӎq{mٻ),)f.=wqrjChD/U,C+p3us^lH?}BlGs!bb.gz>HqI6ȡ!NWCd*I= ^MwGp C3dD`AEb˥PwEKc׺!OАe$GרS%J$^8BN>rsly^x .xGCG`8Zh:!WGl%0 7590 viD b 2 2k|pISИ^Aψ"rI۵r,Iॣ*\!A<4,0 IOCbnik0&|:yEx.F9pXC؉Ux|O 9/@.Bt%OUÐHd ޅ*JR (Hx`Xn\/1ȚKulc'k٘ak}$s,C4{ʶ8Q ǖGy4F5:a%DD5*R X`{d!*ϭ:PGMwfꐇCb[b{i!т'# /98S$09$ E~ِba"?#fm7ϤMAi70o[E,d0lZ#2\HQ ' XП wĂ/qN2WRdvx }IJmJ!Mj.LQ4 eD,Z7R 3`\`4[e4+C[c3,) $d3Z|pY3p(@aq@cL; Е,0r`L՗2pNNdls0eul EH r"%)Fb<8'X"lcb KVG>q S0#^Oa5>E>rȣ!xFKu09A,א}Ѩ|,e7Ր{̪.!"BA9R0 BC~d@ܡuov~Ĺq4C4|Z=5eKd{eN*fTsD^߇`!-.xISi&Nj]z!dX? FtGړ"NO&(fY?rG9G?!w17jy8&D66!b ? sEI O1@V'2!a%mmDm 8pQu@-dǃ@P51+"A .&S9-<α&p}}}sAyUUHg1OOEzFVe-X *UdA" AxXbVJ#e0~7(0׃H6[rv)0dR,m[|vZmV:WZ&}7h0Uby1Ur jv#LEEP eۈ`` a AP8H )^m^Z1-#^X;(KNH y !&g3*02+PAS@OpŐ 1sPnXzpt N/(Co'SЍq= ohd m@!p ?1Rhj.WyImQ;vVkSW/Dp:r{ykF{ R`x*q(W9FvG 销g0 QdxSEB q[M @/QJ Q6[Q0i&ZXE0  wYYJ+)hpUC|yQ-d;)u +E _%S6 zyrlo)gPoyp{7yf0'ebV| 0M.#ukEQPp  ڣ: LP 82` pbtEzNϙq0 `TPJ Q+= dpDe |hǞ:B!N?.  @rj(TT &p``WuP o:0 YE t|`18 p 75`8p<-u*T@a}-4G u (EѳHI3 i W JP =LfM [[V >~C`a] a@zaP•0+aJ 1bPq:?A0 %p ?9[0RcS 06!mjq0)q㴶C}K>f 4 Q cXɘgp 1P6 H ` N)0R L?_xA 1_-0.H.N[օ՗ )f i{PE(be :pW,;M{[0MNqE!"ao8 a 怂I c.wKxIݽ=CbRP `W|[ L [ƹ7 v;XP W `{8+4<nmtb00a0 :@_AyXĈ~ q4=c?s{XS]Dl6e%rr፶ٷ(`6 ?@gL%`=wD;V;~S + tfǣ֣{b@7X/ُ[!P-ROZl7 QŏsՒ9]p Ldl7#40:o7#bR|p  p ()rJ7n.S&#8ɒ%M8&b l$s9UF 9uiOqo#ksO?ktW燒-tu6dF`% Пmg 1Jjb+6۬pzABjiq "L,0w*12BrC[tEc,z8Ay  1wVDghyCxFha+$`75 :GY!r!\ǝ~ΣB Uxȑ$'|ƙp1F@٦]^%EH#-b#pk:CR(uC yߴNF4Za%\T\ 1HUq?As(B: u!䀓LAVtp$O/Jɭb" CP4҅ă[b "'#DЀ9  "LqG@LbA9A7ĉ7%B. tG+‹1k HPVYa+B}8 =!vqw]v̆m@Ƌ3G:@ M b2%85]o{ǨBbFD,BPV/X 2pA9"+5#hI=1?tC NjkQGkqtb(9#IC uC 5ԥD/ȡ}iN ;J<K]FMfBWI51WjVjyf'_*V NR$:5ˢN |h Pi>B09̦tc*1ю~bs0iAA!w\%6#T09Cʰ"-N 2<`wj}Ѭ.Ӄ`gNi#ޣ"`"a]~W8!x2d)N %9Ijl11 ӒP K;\C!DTcO1E4%j[h@:X{2Ë~'DH* ƳcZE:kE/ 8|dCUOr`N@(PNNณ* G92))M){sZ4 r `\)sФ:5Ae/] -a2JaH@;І$HL}pH֋Q%)OЊk%WV$VϢYV1BwpRΉҨ<$8rN2Cǂ*7 q<{lI++pSAb3C#pEA0  Z2;@7I\Ux.Nr'O ~U'O\38 $?1=vriW%bF v C r0ֈ h %(%vǎor fa'}m, ~٪ ɂ 8}!ֽV ;Ljpv* iBb o` ZgVr:vً0: r än+0AlPuRc'$ cq 4򋧎l:-fCMi<= ^(3t*{3LZ th>C.8âp G<С^0G=x7E_BITݿnպ)0s{șn9{%:3\R  FxG4H k2R;A:9]Ȃ#A4<>Xk(HC>7$.1_Љ{e &` z8B")=иAS99惡B9[ҭpå@-Ѓ٩!L<0&R@) SȈx`f5Ew /{]|Gyь5~08UJ_aB>x 637!20B9ȃnD9S萄ؤyԸGԋylI,+jA# xIC I" qhAdKHfć!! dlFN%@ 0xiH-Hs@ihgD n* Ȋ$(dcz,;q4aI\J$D9888>M?1@!cʪH}d 0xrlKpXlR|`93=D_!4L.TfFnD" ؃KȝLs:p {0vtM"N|g‰kxbze4ˉ \FZʃCF@)H :Ch~K3wHڸ:@t|VKtЈդ˳ Oq6c)d|ë8MohBOl ]JC@,`?x CV $0p"+^$у=R/E#5eɽ@'cT-SNPFQ9]JD ؁0C2 1p0ilۋkRY8krTK| sCKV ԷV:Pz`t0 :Vvc0S_D""h8 C[mU~@ \_r7hN|U- fՉ[ sʼnt7 qMp T)[悌dS;&膬9VxRռ9}u+Fј,ycPH,n@{ᠵh>R#PC\(nHУi6 ! &8&70DFED2H'90͚.X Ӳ9! r'&ڞ iPM_e`m_m}_Mchf8_ i meh P]l[fM: J^qBU \ @ k-W szN XQ83񥌫NYaa ~Y@hl)()9Asجr%h^X0+CxH ?m= cZ 8҉0aȷcΜXOpWz0Dv%[هx.0r3T0A>K6dTqPcX(C8NjhjKc^W5ތ [)āI~#Z-NY҃` JdkFEQǯLJN8h V>8%ЁRPW{ [jX*Q~8^l[LU|ܸL@ lK8z@PWWUƉwZ-+u}f=iNi^z-qL:z0:`hh`g`z EXבn5vU"^ heqT`c@@8k#ٱ ى6lSR\"]YkkE/ r8NF:P0@X +PM|9&j"ƉiNMUKB6ga`~kݦEihE84,( :`NCFm_ikx7l> șA.mfF&bdHfʸfK|%8:Toy7j6eogfvI38RH3R^Ӊx<p go6|H;|؊x=جrDRvtW/zFP`YmdB B랊EVb\j8oA(&Oh:B 7r5m%*3܉2=U(ܪ[]kUŠTds 6}Jq+`j=7.=Ё/cӰg걺;^<@N= F~ Vͼ*r렙_q} .@򳕽s:_Pf0)\#fZ[]OX*ѣxXĚ>ljy56hgIѢo - 0t@؂2c4\@נlᄧgЁX"yMAv]ˬv9cnͺxyZ2XMu8iS̀CLn"MؚPٴ@DƇ"쉘41Ws| :s&܋#HH[xl&-Al͕aЁn:ɘ)_Vh<˸ H"߼ph1#) w0?X'_8m~f,x B`V00K CLqĊ/bQB? .҅Lr%˖._Œ)s&Mjx!ʐ(G+`P s"M;wBܼyM6<?\`~8G ˷O +`ΓA$f־~C/4#/h`*SY#䃊6k߿L,cg޽E=YtgУ{o6(}AD.>vѣ7 ̣o\[4q{ vWؘ6pdS/5v4AdZvQGGU-VP?LW1qT9ňB<>ZN<NC "?񰣙E=U9%a4ҡWIGS}y؍h< fF6Ԉ`&EaiP< ECMqY[ _;?fNScp- J[S>P /Q@[ѧFpJkM2.O:DAuڭ7T7|~ S\kS\sR(3VF3?b,œ:"$R\O!%^[3llч ό-0Q Jpr9&p? ?Hr@hAT 5 ӿ1꫟}ڗm 8SOes4=LV&GO?d1PA'շJm~LF8RP>!X)pB.hG?aiXc4q,LV"A_n|7JҾ]k(N@}[7xi:Q}cj J zFJ8w.M28z ޔ] lZ 0Eh<*-qk!FA.*],9hU?1!2k9{G;pxhO=gtxWv,Df9Xq/֎&*X!: TL:CkrShiLs  àaScCj7؂ *H5aPVtc`tP n 󑶪eGjdbn챫2`R xr&'6QJt1ʷ6\ Q:dc#c9@Ӎ\ ޗU&;UklۚJ&  DHMCku "qL_>G<'%ӔYk/[KS Rc0(!C?b2( ]x,ZP $qG\q| ! F'I 2WH:U0 `i<&C61? )A 3"dKBVSfL8+Q"ӈk ] y h1F.U$ZtI2<br-nHt5 #X6O/u?1L<tcX2C&#J]S+ڊuo8K{+uR{vĒbP04Є$}V|L` YA<'b 'QA7@"sJQ(LBxbB7O}`P+j^ɱ͚A@b3 H bE8G:8yK8T|^|D9\yŧ܄~1CQhWd= 9Nj 8ALB(= XCd! R:CHoWMRmhJLd;5~oZpD&5"$4Y\8@сHПAADBU:]I,xDaM#DI Q%,E4XCHԆYAPA&TFzD?H6tGYaE KY lA' VN\D"HK@3r=6͊/Mg`AAٲe!0`^A(bF?>͐cAaḤEZ9&lR4FkPCؽt$X A FE1BLMMS`4fEGS2uD#|]ADY&d)ʊ*"LcJ*q'@?'HP.QDCpS3֪!H: SnHTD J9Z=VuA<FD(@MDU\RHjGBkaTp<،4(UE`*E{}2 0@cfXKu*zĐ[&>&MU\_Z7>fm4?A ?fa tQa`Wq\`EIU2RbqfUI9SYELGcA|婄 'icNpCm LRT Y9TCFf~˺Xk., Vuhh#I IKfAlFH\nd;/ :C=ðCiSd{L@E$RCyG[=5ZzDjfPx H'jj?kB#\HQJCb́8<>%^C?t'HhOpVYZh Ə\NY~OmXC+g K|La$D.GR_B)(o$T@hlj.(fHR& +r#J*!C0i"5ng0A-0Z.m=+ΩJFE\OeA4 -INȊɆDlF?DTWbD7*,\+@A) E5ƟjF0mJ83?g3@:<7='3D7D{~C~3;H~[ A4~GAp>/S?>K4s0A|R٬2^ؿJhEnC~ 4xaB 6tbD)VxcF92ZqjrzOǐ#K&s8r2gO`u`˨S^ͺEZIKy$q@캸ȇK ǝD| F4) $;'_Ͼ<>N Ow(h&87(F(Vhfv ($h(,0(4h8<@)DiH&L6PF),AEXfI#`)%'iRvRa h)HPs橧[FN+D#viFӐÒ4 *@n3P- @P CXǪE5* e#߫f8O6Κ ʐ++XVz $p릷++npGi)ռ.X0P5'%FN[B d@B;,TRFF/8T@ȣ_իFƉ`ie{x9n{ &!S6nAA d]W&SHA^8Y5BpIY<ᰚ$qD q Ot"6*ZX̢XcLr0un .ZؐiDI>lB&jJ_7>(pILʐIE*r#swT2FUl>|,dǵHʃ *@ 'a5 8J)ˠKy0[ UhMuC$;<jFwtn(!"=ACŠKEe Q, 2 $%=WB* i'@΋esFW 9P*r0!&8HW`!(Q0qY&dVa%q*4"O΁%[&ʐYiB uIA*ڎELZ +#`HMU4#M,QK ׾(W+cXh|2(F5*RKG)f]n邝*τsP /BpE mF%Y I1.5%[Zt!t霠Np`g@{VLx$^ *-b%V(H!a-iTH./ef<2jү4'psD2D@¬t͆x NM0 94xsy.;A L֎4ă@!5I -Iw9dy,$Jz(!"<Γ@As R !JRzB xAϣ h!Zq? g(A  H,{ph p !Y$BAjn~sz EeE_qoV+7H7~޷}Ea #W!Hpu(p#-I&&@{c0Ɓ87""%nv>طBX++{qAb A}@ R%zVE+HUW(1„J9(5W"P)"yl1n#`p"> uQRo2H8/1o!+kOG9wX;i1 60v&1G"1s& McH#!GZ:Z10چlaqwq08V@CW@Q /eanB`2K }@chɆ_!Ѩ@Ă~sP2q?AB 6**Wdds P -6iu 0x$/7!v%@/~hn4ŀ I!P WǧP@pЉb1G`Bhrq2x8a1`ulNSB.XXq{0>;x2'plDq H N)'W Czyb$q~ysH/ 3ި3|Y(=8a)m؆k=Ȉy,1|38[ @W Ք z"P D"( R*g!_B G `%:#0}͉6؁!g+P&И\@ H~՗Fa)n[Ց q,9 ,\r|Ǚ`GM"$ydk3'5`Eҕl!z],2j$}BEka3l<ʢqaE?ZքJ@IJlI8 lf~_i(B)aje*Z(h0BYdr4$o)AgY! =0'iY'L@1V}Q! D*@cé"d2AF\`2m)DA}T#A% kP^01JkjŠ90a S’UqU)9PjjG3CC"`#1u2iJyF@,@<m!KѯO0 d "Q#2UA#8 &:[M+0Rc((qA{Op~hwhMfӀ;]z o&YF#mY  <l $  [0ͺC`FC$$q5oK.|dje2N^ }2[ h)RP;z U`JC _`pM'S8rTJ$ PǛʫ:o;#a$ix@y @*TM{[`T |\ <' %"DfqLpzq1h@@ ]WB1 Sy+ E1[9p 1aBYp0Dp `l!"%p(VP{tv zMeq\!g \p LJ(vPp"*OkY}%gIvzL2hYr=$Hpsu, vLLwgcg Iy$!6 2^l&uJN1  '2WDArL^fP !@ oPp1] zii# `7@Y|$x#`Ҫ:/-'#vy4>"`J@ u  P FMe>\8#`p:ўMtP-#Bs pG @w5R  i. Np@W+"PӠ -yoLp#@| +@Y`:`p0 Wة#C`0`&bJyv?co }}G9Md`f/W@RM@Z 3 Yq ?pPeP LR =$|-'wLPܬppLPp0&= ~^jWJp-PC0 >_,2/>2`йah]u;h.@G}un=Qom${{ΉPBM+ T5c: a.7ڢ+NYL% 0 {P`MRR ]Q2)3GO@>q *7P e0\GyiPvc| `l/ׅ *Ʉ] `0A2 Rp pN1p1D QH@*t!P tkR{?-?_ W #ڤu>'k0PJpAa?_M !@^0 ?p M=n{2 J`R`ϥ { p%0 E ^ p aaXswO! >QD-^ĘQF=~RH%MDf*]PLw%o~tcb蟎5?/]9&TU^ŚUFJiW@;e+sşv`UKN!Y aśW^}X`2,]ִբ{gh11L$t uEZj֭]N}ѱ#G!KpōG\˝;GqnwL-%.KC ;{:3 [|{ۚ8{tث9dA0Bk'sƟ=~d Ct%t8tNF^qC8vg.X98il;L¾12I%dI'K0iG a".Yj8q1F3ό}! xǞD"t ̡\C5юw ', ޚCd B C qĔaq"nc`@q"4pd&CQ~3BR#4Q=iHG9F2"S4Wїx @9`l} 1!m+#JM>dw)Mߜ`I:'f8")pD #4.27 c~9P`j!s-<Pà2 C0$!8'8`)D+HCXsrDr9<"*]C'YUHFb/ao@Q(U!>@T$̩xR*oo5A] w/[|ːF/Ko~;3mL>JxC`!5饰b;/7Kb [j;NE H=(4~ }.O9v/NeOba5G HaY!!~%b"A[1>6{Oדռ!|]~ZkE=j_9 bX[Gц[KH3AR֏9twnQZCD4nh}65b7={gdF=l"yHo|}4ꀆІ##}jb02#y,|X #vHLD8ȍ{㹳dV}kIŌ^32pHP>$4Z.ox碙`AąJtABKgQh\BqY4G{VE/*prKoqNуP {|Z+3z Q hXs7a9R:E'Z)Fϼԏ+\<|UzHCAFJ X#S~ː">/GЃ0û+HH=0‰.!ma#07b=֋xIb5Y(FhO01`q@COhGh^hY CC >@19]x#p-pEt̂4Ȃ8H88< IpȁE]A0z7-8HP=Hb=] H K[E_IzVӜ- 80QDFBA<;h4,ߡ7 xC()x=xp+%+ &w0h+B0 ssA r8r !!Ʊ bkS( őܓ$AD/؃FF 4[0h0E:SJ؃=>A0=+^t:ə (hDGLįI@pr,h+0Kx>~O@la`|@X#xcTq PlGBݓL Q 0Pt(KQ8 lxPd؂ #BP,7ΜbHPHA`50xHN=Ptk#K3pIhx0 4-SKG+:F^(\8O]PaCpaXB\@BȠ j0>K,kchӟ4pH% m~;pC!KcR5`dɢI _܃BV{,e֗Eb33@;|(yK'uL50Os 0fjꉋY;^xUQL2k(0n=Xh ZI ȟ70=3VL6jO{x_xO-Cx64҉Ⱦc:BVc3090/~Smo7sP5%pCS@Xkh㶯zp+p3fPg шpN!0Pt upՃUsXxI@HTWj8ȂYU6C)/8E]ub㾠J h*] m]-  u*""X;ͪT(v}kG=z1PS%{u)]0GE<-DT`rWhY`9970)0Z]ZzB4֒{#q n镠1NE VKXI؆n/c^KSLݭHf +R!^i0eorpC\ĮDT(i $~8x Xp H730V1Y}]l4-F_EUT ^Ĉ )xYIbT` .hO8Gs SB %>P|̇Xu9ebs X`U,؇s(?@ Cncؚ08E4h"^H<ZdGȚr8EռB䦩T|d:h+O(zúd@)zm.ب3h!̱̋BYiE.tk'鈀Lu )0eO0(cQP((=X GXz08 xjiڗH ӳV헰\= r,1R:HhRf`q](Y`v(t=VЁ(y NӜZF 0eܲ <(yrh0l+ChFc1v]e(2C]8| nuLvh9ih8=Lw"P:XLr]D E"&=0!2o? zكsbhxb(?<Ȃ-\'eD 0OJK(gwD z/wyP6`jܭAA!3F(؁3Cys@7vQ.@' ppEb0.~!XCWň $7n)>8*,48; 8~G%<V,R sP0VvTچ+8 S 뽇PqHx3׺8>-0 ->@:wFJg CK8*P5di 1*Suhu߸ݕjGil(8m@du7>ʜ=z3c "fwX؇^L8|HXЈp$X SPb0F| ց^Ԡ>(+@6kM a6|@ۏRΤH+@TM%Vh)>XJ[bҜ.1˜_ D8 ؂p}6@B%i_)vgDo$:bOFΑF1VĘ& 'Nc ÃnQ? tD|̩%̘2gҬi&Ήr'РB-j(ҤJ#"Iʔ?eHwClDcC1Z^ KÅb8GLj2 Gc;wm1Ȓ'Sl23j1#b/"~# 2>9vaC3io_dH*O?hYxG؞ʼnn:ڷs>W|_XF7-.(#F+d6x!{.?r8'tx :x<J8!yuDmQ]a#KHq:J#YO?csԓuy$I*$M^Er8Ah\zm'PqGX/ sq:pC+2:y'y'}V'e#}QPYdQyaC;ԑbM=XZ:+mr<@,2VZO~**w`^5:XNJaCMN;*9?uHя^+jur>\ӭ~tF`5;c?Ιη <03Y?HJl6lQ~0]h SHc2-U;sI 7Qw, AH/BL'-:O;x1pU[}u<@֍7,y1bH-=z;Ⱦ`J΂]~8⬵Yg8`ۙcK9XԁBh뭳%DKLtg #E!DŽK )+bE&g;_a_!4DrZ ,{=?BK)XaG,O1oLL>zAkp҂ Ġ2p`g~P 3X ZB -~}@p?wD !R"7)I?U`2MrcG>&sL2c?z|` è84]EdasG<G#@&iI{CoXZ7HtP3sX˗<':]D-03{'<)y31$G1s#gl;m3.x'`$(F3j#L1C*vXhvIt `P0 L:8i>xZ2܃<*R,{@9汏d 'LAE1 t )ZӪ;n}+\*׹)HP}$F@\q\A{0sRІݣpnE~^8@^~X"6jM:aBdx!"Sd/{Jǂ<pbJǵЁYx-kjdJv3Que_ʈC@`#/`"&N(`C]@] 3eũW8s^H hBF>2afb Rbf/s "گ\BdR,1~H/ r2BpQlC G!~ щe3{!y;z) 6@k=8G#kA+K:\NE 4C}C$WwX*G:\a±`CL̉E-a/Rcy?DɏR#2tݙc>kTu&14bb'c 5xHc kDR-Jk,׻D 0Nk"T : ]t8)it72kW.(rH/v)+So%R瀸4aF]V^h~2P?1p{&+M V협<^U:~#9ڑdžIrL?{fCE .J~'*FR2 ?.j @~DZ}Q5)hMU ЮBI0S̤^zu";&##)<̈~IbWE &mRY'<$V%>h&^thA_vgGG29B 1LLF@΄Lb LC?яuHtDݾ 9ܟ:Dnԃ?L8kvW/8B>DUp >R?0.<qzi](CVr VM؋?P IC"A\%L5auH@)PL]Ú@A B@?(A!W?TSwT4?h!$ݒ '02@VB D")"% ]J!Id`).յB_T.#2D3?CeU2^ ED&PL`Lm#x5>1b<" ,#"" DD%|DPw`5@!,\WJ_!Tc0V `%aLT gia P(vLB V!'ARN L$ADp#JDDcbZE*rbUFޣw!45qќ@hDTM@KvhvDduPQ =0(Qh@hJDh@iDp{R dޫh=zbY~B?D[_F,uK;dn-V@jXJ)R%8J I]b6H9CLlivT4\?ޕ!JIgN yCD* `!86lCb^ufʣ?dt'f*br.X qLv˔)4P)k]=$D'faa*FbNƄfB&ZᷴͶC?5L _$R¦jsLL Tz8CV0V2pz2+_5H8\CkzCJ¶&ˌ5pCD5@Bl$94T.f4gDxl6dC*7XC5Pž,$RlflKJ.6l6hNmϲ6.OXCd"@4D4TmʄfDXmLT-brz-ENW$mF^-2-f9-$mOXN5-֖m4LmFJD4<-ML.m-Nz2NĻnL0.<2LAc2Ю֮~1,'+N4^$E9\om) U8l:@-DmH'L7PG-TWmXg\w`-dmhڍ{N;t у7y,]="Lr>;x =y8>=N<!+tN<Îctt?|My~vm t?NϏ];H:s dG:DG= 'da=!È9qr# v]?Qzȏ S!rtJtP rtD$"rqKpkт#y^{a"mchяv [D:V|GA>#\ üz p"8F{/JqM81HN@4z |!I@:(AAҁ2R!|8a8 t "&%ԡ3%-8if=ؿ8,QMTQ]8.D p :^%!x$&3 !Ç/0; ` ME-?Hp =LyQyG6p6Lp&iБ2h/ `G#kZxqP#I0-`h TzI3@E9w R :DpG\=U"̋Q{8;! ?MaL5Ѕɬ;ؑ;y1jTkgc8f!E >!n3'vc@F">;uC.e|hhOPňe7Su|{ u@cZT9wG\B8Ј.I0:xFA oË 8FR'ʁf7"S5z#:nwhx{?hA) 2\[%űIҗ@E@7":*dj ˁ]HWNPAsH- ԁ+s뗗.:PA"4M21x2<-PBSQaĮNWV I%`qR%x-x~NZ%l6tG X4jBЁͱٓnζn{3%X6+^=dQzA ؃*GNp@ @,|PF38'.q?ÊDя+С8 ZwJn[e6bɖ>>( $1{ 8D# tF/Е~#}Oo:ԝGB$:NB%Yg :*?8'Y&t9"ROG@thE 3 q 7rR[^_a Dc؍(u>1Uy ΃R=Q\\aA @?aB!8яBvX98DŽ2pGg$p%XZ Qj!6dtCt=pipai~?FDP0[IyPJ 4p0'2'qp3{XC7c&+B|  Yt`_tj> eNNyzZcQqI'B5PQbKWOI; nAi0 d |.0n*s(|JRXsLX7_s0ka)򳒒FM<<x0 L & xpPUCˬP 8p_'H  'n؋[4C*CLp}p n^S:L# i˨P 2dyE%pŰwैi9h`+aql1|ZP ;ED iJp RdgRp`V`| nS2a%R`^{I?)x@  DPB kg"D~/@f|J&!J&􎵘&\5{Wf qp.9sԡѝ{6]J`=s =a~*Fl9WEVmڥkݾW\uśW^qPhJj0@ V-޴J+<F c \=W\?cH&pLH8ԇ9b 3G\r͝?]Bhx 8a[BO<|4*؈'CUZ͚NbO\ hρoift 30| M; 7C?1p ւ"(ug<SDC Ec鸤eL 8QKpy&0Zt ]˒F + 38 4yA߄3N9礳N;(Khex$i2)Jlpg\H68"!2p!0prނH !vD'v˲3º ֊3z6D0; "2<e>{5rAn rX E&A)}gաeVN>JSWq@!Tc1Lr  6؁`6T2wאe UBB $ C jC\i ѴENk^Jj6qۨFbL3 ƜD3\"!d:b [a͠Hh$g_E;ZҞq PKHRPsb߰.$Cȇ=-?aoCEnr9a Z9ԓMi "=`6 PAQv#q؂)ѓԖo|z#sҗޖx,G2y9Q @aw8Ssl];bȪY0^CGxBP ɦucW01tl4k9np4WW=K89A&!p(-,#pQbws dGyW,=@A'RJPBЖgJWf;4o|dYuE=jRC +7^!d}KG>Z"&dn .ijeP챕zhE[Q XLԶvkwԦ6,`Q S(ŷ cģ7et~%tЂh㠔xD/GxZ 1 8"pWÙvCl8#jvT H>{h pKxuN߃PSLЅ>t9΁YBMC6Be,B l 3򡄚`y>vgG{վvCU2;1G?UP%~hULհf_j(Ҵ|bxCp7{͸hcijAj 9򭌭y_9L qYPp+()Gp0(au};ne@>~ti dc !Cyq <#@Я~B㷗T \Ё+x x0=d@J}r`G G@:(ȆhhvГD@.@?i1 : M;mS!$¾z h<&!,=w Pgx&c"-,-1/c%; C÷8@M~.'Q@6;5T<~ԐZ<B=JM+E%Ё5YhRK%UӰG`x 7OAR{i1BOüa@?9yUbubP,m5W!gV;"XpRhr=Q[e:)sJs ŇqI4xWy0=!w׃J[CЁ&pNLa$+ЉXdNN)`؎E<||CN`M0ΔYK(sXYhӛ%ZJHa&i4᫢چ"Veh8<٨ZЁUu @ڶ5B( ;[R!S[k1- )] |8C4\+o,0xdكl};l[T2qx5htżfh% ]ܛOЁ:%^kNh3ޟL@Lj `3` _Sc#me_K՘hjx<jn_,m؆m`Ufv `ƣڀ! ,)tH*\xP?#JHŋ3jȱǏ CIɓ(SN䤲˗0cʜI͛8sLhΟ@ Jѣ) T?JJիXjʵׯ`ÊKٳhӪ]˶۷pMݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8XQ <yPH@DtdPNoD9?Vfy#<iH كN?)OS fS[ <#!w< |ݏ?qo ^OGĒ>3@XBBF)\Nxq2c93-89$ȱvoyTs;pG>18j! G<{|81FwG?Nwp`Aznt?1 TG+Z ۿ1rohяrRG~H$Gq)RT8=a> Jh0i\6ܥ-Y͵h=tE堇 8N& A t<(]?K܅ `n)Ёh g `ofh@h@nG 3 Ѧ%4mOdѦ}Cx=ґB-@]"qh0 [$#8ac%&RMhAp6 t#OU!#N8"!GT5@G!9ah@8<1 )ܑz9[a#YX:w=j: ?J!0tx2FQG#l{ "аt3~1?jhp.`G@da iF :  J#v#)x;HiѦ~4?q7@Jvc:Fz"P5!~fG8#"k{Iɰ?x~ЏR.K Äu9L4c9DaFfp`F Zc2g:@/SNn qjf҂A1~\m +ep^RG z讁Q`JC?O>}2Pv㵯Lk0!McEe(A`׈脈ȂG)9©e8ZAX,%'aMb6΋PUkPF!ް5\o[&R/.E)0<~֌V&G̱zηo~P@hx1 Mx!Tb2vEV =tP+ྍq̸b?QK40gNЅNĄ2SE|zA& !BCch ly#fic?'?y910 :h3)DDAwrtdX̂CSVSHopMr Њ9hL4 w$w  0 x08W`S`ɜɛp0|` ;DsP}b Q`ƅP{Rz۫|Pxu0~0ڼ >@ Ie::и-`?JhLPq kp ! -p `; L2G Ȁ իQPb&: HX]gvA9Qm285~{`3fibSb &S[ū?8`b4D tq)P,UBAW w[ RӜ`[pHྦྷ;I' 1cg](ȕ9O9H9s pp=6dbz? V4x@@q kHQP N=XEĶ` @*`q0 T .Apf0".%zznۄ u7*bMRqZ]'GCGajkymBq^CS|CC6 6E> sItHK.x  xS-ږS: Os9Ko䮶d@Lod?U'(ݽ{@ {̥s@aD-^ĘQF=~RH%MDRJ-]8={,iҬW_:tIO";t͛Еw)Z2:Koz!:rI8Pb?c\NriWnX3bșsQFv4 JGcdȑ-_ 3f#Ӽ MҥHZԭ][lڳt"v}C0]?ޭ%ē)Zx*NǴ~+߽Vk(/Fs &l1؟vR6a#@dAt&A;+&t02j!o̡'.©j$̌^ 1@l/l*SiK$K/!4)]58 CC6Ta !sq OG. ayv8hd= >$=g$^nGJ*hs#V1x^uCKi7#vlF;mvHcuDnOs׹z:=dGt( &!N~X^#SqQ| o6V'tUweἵF#*Vڏ92 lA*2΀D`k'cH^8|!D! [Ґ@x@R\:`0 ZС\=Ó<8 iP՚M 1pFǒ0/T q 6VъWbd8PQjBHCr,!@2)hN:=Cӳ#ܣ(`AґD&đLM^\/WZJ #\́yA)(c0UҕfahA0p@=(wԃ'\dDGB31LF2įjĂJø ~U#/vhD)vRW`g>i:iBXpArc?17;+p!;oc/#^]u-HJr&1"=%`a 6B(tcO:T5m N F6s^H;ATYC XM^\zn ")]t; !l`<\A؁( հE,Ģ`2l*.0ŜYTوuFqD:I4 Ka꧑(ᒆIb'q$|'㑇NX6׹j"DNAŊȨrKҾ\bhL,ʡ0'WU% #n1Ck;yݲ>"mD!JG!cDG*J3=vP VPj1\]TMh~p^X '=)KAl3k]C:AF?=uc".t_%qk5z C}y{޺\#.%c2_(lX 'F\jBl_ " "8rO+R47#CK`e 4%B/P$2jHBte8z$b֜>|׉9D0"H+vBu#8) 8/`D\E&*>q dd[#~vcҸ!|`> njEEn/f (xbP4b8lo<:?'_!4Q\p?ݴ>$@O谩 GGzaң0+u/ H~灙!=X?,>2O`dҔvYy5wuh F;!Nي}l^㲈`OBѹ5&+8F)81zҗG}E_Kp`h/ooxwU=݇x I`r²*hީQ:(8aP$ 4Bԧ5TDTi@6{k6; l+(G>zn3R4Ty s؂Ix9HEXEV|h5xjPl5P7q{v`SjD~`8z1f`%kGIxvhxxCS8S+,hQ ^`azdHhȔhD-to\ 0@>\heHȕdI ~E~ H( VP݉$ʢ2 yFJ, HG8>!Ƭ\8˰DCA|QG:690{j9BZhA˾d.}hп=)f{Ȋlh`h KʤT9 EzpEPE~p (Z|)x+(Q9{˴lh6ʉȊV{`PH܄4 T6t85zj qtY+1Hr8=d{$S9T8ch:%@)(se8H$݈E~`<<b/{JƇD-ENDɊGg9RLlNGHKD@Bh\!L G.@TQȔIh@ ,Q"F;`Ay(t =:.4@8IRB,8 ?=`@|Gps ,V辪  MMБ)JYW a_ ~g܇tԀ㬈F}H8PQ'%3,;6@Ҍ'|׊eYk#ppui}.ZC\w jy#=J90ȁZo_vat mzNvx:N>0 !Vl`"vⓋ ޅFK1'b,%0^ KHȅ-VcȁZ[HSUJkxZh)Nea6͠t!]X`H%in1~jf |: PW"9f= wuC0_hˇ~|}ƢrUizR8~&A( pWJ^Q{eOehb0=hxd9xokkL}jv~0c+fmijxiOކmiHfv꧆ꨖjө& ! ,)mH*\h3#JHŋ3jȱǏ CIɓ r<܍ֲ͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`KzٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4X`㎂ 4(^D@3 d]ւ9KOT֕NXf\v`)dihlp)Mi'N r|矀*蠄j衈&袌6裐F*餔Vj饘f)In駠*ꨉId/0Ʃ*t*무j뭸뮼+찶I&6F+Vkfv+k覫+k￳>l' 7G,Wlgw ,$l(,0,!Y0%ԑ# MAi#OA]Hr2A3uuWNC<} >KS6s ^@A[??ȴ$\q1c+AđсW}?~=6?q+=\Gtn?x2Sx:909#?4]WAHBc~n؃N:#82[l?;71 BGA(%a|# G=\< W4Ap8BD >׎tCzև-=:N>  1A(ǐ@@Wq NR!Hc|7:?B()|4 %PƊ x」t`>!x1۽ 0tEX CG7QmLU$vȉgZ k% Vi"$աXR7\0?~@XBϭYMD 4(e7 V hGhIs#?B:6@c>H$zl2QY t?H7ȈxqY j~cZa\bR(?!D4i`Ws p WxCCxyp+p'˧= rt2JU^R#"PXb+Wtn$@xV0Ǖ?\HuR4CMɯXP N-S|/0HW t`GFXβ.{ :1c'~ЈW'=:F||-aAh b)vo-F;ю;AþG %-).t'+rNhE aP٭l?8ZMb[ DZxr{`=:= 0p`8WݑࢭE5P7n'ԨTCh! 1z7~߇x#.QnJ"qVJ(84|7s;"l#p`o4KRE][҆d0D#fN8Ϲw^sC).%'~P0"P.QS^#,G4qcthA#T 8_8qH(tc DG<qqOHݹڤ?Ik E`QQmQh~ tTއpe4_~uwMG"!g_siSq PPJtp`  jq|Tx8b`(XЋ(bpQȁs aX?<:O hCe :@ :}P$@Os(V@Xg^@0f0xfxZk ăbIJb6fЋbPXZ%i&(x 6  CۖEq^`0d`ă+e]}C9vhU%VyXi&hFP;0p%P2F$05 D7OQc}ȁ`HaiabD smpdA0|GHQxAy=7(E{ 3 ?`M fh sfUjvA@;}-JCy?0F{p :y)r"X9Xihng@`FLɀ# i NpP wuЁ)X0Z`g`g0w`;AfYQd`7 q0l0 Fuq_IV`PZɏ(f03w CF٢CttàwONqP '`[p }sˆa}8gFi\:ʩ6ft8 EMjOv{=Khzpup W0K`Gp뻃t!m( 7c iAGHW{DJidt@ u@jq  4RʊVȆlȟG#|dz*>aP az`ć{0az  \XU 20Tici ixpw@ tLE7s7-0 epe(RdS-*1s $ i>S8 #1#, wxq`a qj{`}{j #jK)w ғ Ӊx`njȠta4  t mV roP!_гW:Em,W P 0 dm  P P @ 0)2< [ up|! e ц I*=X{Pzp )Vsp$>c-@v9ۨ%T$BtRPgt`!wX+10eE',i3qMNMޅu}[0T?n0D%Shh%9@jJb0W y9JJS̸ympp\V~l`HHW@VM! 'W`- L5 -|pVz}IecŪYҀ P  GsDg0L%>d\ wIwn:. 5G Lj2%HFà  t@UհcW@Ut @ ְ`d#RAhveCtGylt<$9P SFA Xd` m`M(Ɓ_z1K1K Hr]!o%`gYJX~YkGeV ?8DA$ .18\ Avu:u`+=ٰ @iޅq 2A0gn kNl@;CSdZ=d`$[>Rec?NC=4['w| 1Q=N5)SD ;%QvWD`et'RY w0VqP 0$@1_Ps.9l,>Oyk O0Neg@@2ʺ6RJu:>ep:pVCqpp9sDuG@lً6oQ qFc5J[tNmNCgCzX@QH s+4L):K}X:tѳg{Q{ԨqsƊ=ajTPfĈq#g̟jGT*˨RdϬVzUXe͞EVZmݾW\u# ^=zhKK;Ec?%?y}79zԥlDz={ܱ<)>|@O5rF)Bۛhߟk:GNӹr40W]vݽ^hKG0{ZXnDɰc!0iϝ+:1VI'saT0 `Ci',83nP<O4 WdE_q;:> %lr،=:ި qQ5Xc {s& j)9b'x(ph C.F?"KPCE4џ&cV1Ȧ"+%K[BX 0RHK9vx(4F`0ι 9z.iJQg׺gZk MU[`K097tD1@q)g>Jt XIO. /320:Zvc?9dr5TjpA)ʨczIG=,~.yÓ~&Gy1֠ 'K'zJ9`'~c9c " 2Hn;o5#fIYFV$Сx+ O ;e9KhGuJ&_9øB84zn6ֻw>xQP[|Xe^I,8‰,(&NZE%Pc{:A L5j#D/ q*a8tD0t S!5eN!@h`vaXG90="f5j vы_cuARIo)6YCFq!V/*+ V\t?>$E:hoL9D#p8 6(~aDe*U!gఅ$8iH ! ~رǂJsE{H:qtLGQ dǔRt,b!%`P#"("|Ayg>)<6 A`NDG>BB0^R qx#ag(RR6n@D,M=уDn9؈>0D#-}gRTk* ,!pQK;sJh -YLT6ֱ/ZMrя|lD>%& T(K V`pD x+&3J_k289&q9 #0gX6׹C!b T'1( dMY[[8׶<p Z)9 Q|sgF\'!]>*00C\"0wDz'c(F6̋tEq; PV@kXo6h^%ŵIYfI~i$"q0:*iCWri 0K[u,Lj(Mc&f-S;0f5!,xˁ"0nfAsb۵ b1D3&{P$@ixX::Q?cHa:-PP`JC״@?a rn F7wjf7و:'\(X&9؂f`Zt սnvw盇MTpD'bR_QnGx8lwpﮅ !Wx+CLNhLI!7yΥ2υG7zщtbC3fV:1ϰ#99Ό 4[E+D{:{ܟtew{w[(/AJ[R?̑*W l>y;B |5yw9цs,yKzZq t@P!t:qu{~oUD]` ڭ:k; Z\ 3蠄¤/-?>p<*)xpxb ? N@3ڇ~@.(ry?+,0>:V yAq ؇x BhrXzhj@Xɇxv'% ?#c|v@X OЁ츂75@-BQ?sA0`NnZ11R.; #~.wPXHH =ϰH]chaxmЅ?:D+ND "@Q%\BPy%e7hh$!O[ ;.Sx=0Yi \df A|p`:`*Dgqd_P}<1`tX ;;#|G?qL6 E858)XLVb?Hچj >0Lg`>P7ы`0؃ap< QX-;؍-5n%oTe ]Pu?c=`B~8I؂,>K_a~EQthS HZcHQ+FPXhm95;ehFBх +X=F(̂I%\"jhS+u,:Ls0Nt|xR$QU]"=Ȇ1CT]˜)hV^Ӗ+Y`x 彋T=8Б\!D3H (y߅(`")fu_+q-C\:߄(FK5f | @B ; h@?qC+XT0{di"~>pVtXᎠ)Xa+y=8? &>9<=5:]'| mhNh&Q bbFQZ(M8N%`BN%ypAڕ?fvpfQ&@Vd}Ji2i]J&2 b@RG؃5W8tX6\ePfH >pe]&fߙfȆИh Abjmmlކmfgn6sFtVufgavڀ! ,lH!\ȰÇ 'N ċ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJՇ޼]ʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nxd_μ9iKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8P;ȍnH@=vL|I_n?ď AtԮ'Hj^R;; ?|u3f 1*i^9m8e Ժg}U AM@Agrtc Xq aC$ʀ=!w؃.4tAi`uG?dȒa`lGɃX#5DbjتmHzf)9F![pv EC§ڕa mJ 6a@pȒ!Cgp`!$@lG%H6Dǐ Eu3BX-DXW w X-*0DAP $khC{@,aj6CB@ ;"9l Vnl vl`+ یr6}1|A qDIq0ɧ,2G#$b, V`^8`JA <#t3 !8N-H9yR5 9@X 'Z\GC47=켌tփtgT>=kd ;}HO0,CH3AB\d [` ѵ8s$d9ş~d~FKٻE4< Qc\FkU 0g! ~`dsH8s'us0~H8vn&kG6WrWTS,xc 4D1(C[p_% 4M1p09X?Ix\7xǗ`Hv`FJN8qD r- -fpl(`y! `䇖% `^Ejdpj B]Ȉf QF7Eh!dĉ1Fp H]`1aZhHP`8x_V6AĨ8CԌ!Iax#MSGHu쀌-PjwHxh2!8}zu8P8>Q *Xxb0>)/nFa %4 .8*<395'xŽ8㓷?AZ# # YLDٔPY=PsX1\ypQA~_i.9`q?Mqflٖnpr9tYv-xUq㠗`0j~ EqV0`f1 ؘŘq1hPj9BY|8{P 0QQ 9q Yy!A! ,tH*\ȰalJHŋ3jȱǏ CIɓ(S\I˗0cʜI͛8sɳϟ@ Jѣe ӦPJJիXjʵׯ`ÊKٳhӪ]˶۷pvݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKس&WMËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)Di R H6V:X2 48i%cDp%eန;!6_Ol*ectix矀*蠄j衈&袌6裐Y饘>SO*ꨤOꪬbu?%#9Ѥ̜+Y?kȞXL&F+Vk{1l,Lo/0Pġp>-nk,lS) 3Q#H@V 1{`>0E;pɎY<(첇 27O83t΂zDmH#YW*"ǜzH#)u1%qeb&$CM?ob)U" =l'wFU[7qwWmX;? gZ ?;5t>k.FQ&ΦتIk.n[ C,FC0%#M"ALB|w#}Џx|>/o>ʙ~y8//-۟{,HGA( !'H Zz GH(L Wšȩ0 דpBͻw_>'ЬF@0WEX̢-G9#11>:5gmnTH:i> G㐈L"F:!1\cHqNzPYEֿi0L*WV򕰄E|!CY8B, S+Bp{#K\#[LT8&h:MTHDd1Tr#X4 d v>v Iג#MpAQJWΰy?EF?~L" PtS@e||I83Ld w%0 |GAM0mCǡ1_-28Ǽ۔&::Ldo.2l$U21 X }ˍɇ9JYg=qV&bD%iN~pE[\.xGBD!vH/D_̄ Ģ8G v ox AY `nh 3iД  mȝ}Y d@Xp %9RmԆxwP YNM4 q9 Us009wh~i  v^ {@HlG^3֡l:B Yz0 9 iTpR<044@mP(D2"A3R`[g,bt F{uTVQqIbb81z{Q0pOZ |ޠ91H3UY`ZW xY 6 zVhp.A kOM24\SJ@Jp.JI [B\a? @v0v Ӱ|*kPpˠJ fTmopec3JAO %ai Yx PY&A _oQOF o x<{+MAeĄ` Eϑ0l\YS WnmPG qW 吪Pcjh dİ-ꢞxp] Bg!VI{k3m@ U`ūHnMUb̆z>Q҄\pmkH.L}a1o+;`AP`5 ][ $qAE_0X7Y&E} ݰ\GNNКR N&B .7P]0(D .W@ 2#6qpےϴ#/7Ő/1X5QK?/. Y%X?-c*nΩY_ {m'5kG?}T_8\>{/'ehq*]@ lpJ).kR 69;HAd j, x$=@q$Fqkޑ- JYDџ@ P+PG1ށі?a)AEC)@ DPB >QD-^ĘQF=~RH%MLH J-]SL5męSN=}TPEETRM>UTU^y~VXH~оW\D-^}X`… FXbƍ<cʕj%r=zi ѥM[LPM]cl'[ݐgs~1SkLwp͝&8J{]v]x7xy[|Rqnl=ns pS*<dBA 'BQB 7C?ΪK1EWDHD_1FgFo1GwGG!$H#D2I%dI'2J! ,)tH*\xP?#JHŋ3jȱǏ CIɓ(SN䤲˗0cʜI͛8sLhΟ@ Jѣ) T?JJիXjʵׯ`ÊKٳhӪ]˶۷pMݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8XQ <yPH@DtdPNoD9?VfyFB *무j뭸뮼+k&V @*F+VkfvK:x+k覫l!/\s8,l' #vD84<`< ds9<1,0,4l8<@-DmH'L7PG "XޔԞc Pcp9G><##<$[ ]zOwN߀.n'7Jgߚw砛: n)겙߬.f)OK{x F!#n5&N;xG_Z;[?U5:0U?ӎ:SjM/oߏW~ @JЂMBІ:T6!0#dĦ0юz4Gmc!RP( RҖۚLgJӚ+ޛ_@! ,)mH*\h3#JHŋ3jȱǏ CIɓ r<܍ֲ͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`KzٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4X`㎂ 4(^D@3 d]ւ9KOT֕NXf\v`)dihlp)Mi'N r|矀*蠄j衈&袌6裐F*餔Vjic\馜d*ꨤhN qjB'ȫj뭸뮼+k[&6F+Vkfv>x+k覫+k,EN' 7G,Wlgw ,$l(,0,4lsOl@Ly3uHsv@SP34tSP4uL IBrj8]@! , ~H*\Ȱ!AnzAe YȱǏ CIɓ(S\ɲ˗0c,X "#ɳϟ@ Jѣ|J\HJJիX#JIi 8n kv]˶۷puZn2Q1|'a='ǐ#'ri=0Ji:RP&ӨS^͚gml$xׁvUM8v!nMAʱoNjD?vv:c2m쐫_Ͼ{k{O/D(hVM7 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)%KLiXt@/Ԑ`FJhaiͤIA +)>RCKЩn)N@֨ %Ih8DTQ \ 6." #pU}H@8x H:x0AB&J f!<D*"!!J5=`ô7(IP1@PW%9v%+|2C, z$Prbc0@>ЃLyiMB8ߨHL"JpBLh1d!^ =ɎW.7A&EZ 13 !g sBF`J,SBjL=&p=|dMk@  &-a&,yNX#ȹ;޶l)h8L؂vHYB&,U~v@!>O5Z_I>*{F8UP MMm nSJI m"@_3P $ji yKl$!GE\!@aFdĖ!vTžK'*:v/QJon'(|2/v%F8ouf$DYӦq]:)I]ilIRHKBV!`8xkU&v{(OtZCϏZ7px%`54JQoC!& 807!d9Iw70x_fUbr1s})1R q u G~" Y7 '{'[p'0++OQ wV6PocH?$!u' )Qn&!G4cp ņ3RqpW+$uKw3V pY1Q")#AU@ @PUwaRUXq16P48׀w e;c5\525!cH!Uф }7o1 gW&AkāHH5a*a "owaY('/qE$c%r/u "j9B}0)h8/(( ' q{#QF&mTx=; Ci#`vE2!o8zx1!k}VzDwY!Y)zw3AG%͔ iQ;w=Phi=0(P2 !M)5RA{y7ei /=~Xm`yY(7[LUy{TMF~bH   U wOVP?f@W Ieǁ -U藆 #:y;Q APR BYQ,aw!2P JS `/@ugp p1 z)1U iF˃,+c.dXk&zO:+4Sb@D@/ )N兡(,Au/3@,I J@1 _P-<mB" #fa)QxyP+1#D#)  0w7š-r7*)I@m:AO0(ay&$,XtOo$2J@/9PKJJ Lr.Q:DZ0HJ^Zlѭ bJ : #RpZ!z+B.7)rg|KpAwnk[4)bO,5b9B]  ˶L|2e9wVS t6& 4H]DʼUr4lL#՛4U1VV /qW$!kARF8a׻( q  eAM/ SɕQ,eMwJ2S^)a 6%7]汪S=BPf0Pڀ!{l_IA(]GW@./2e/.a*ԥ 9 3U@%VsKFs?Ɣ'q/ 4qUY-I8,DoqliNc \3pY$0]~Zs,эHB{4dqiBs AD0&7 h[͘*q aLPrq/JoB؎2k  )$+*=p&jjV 1R ~8,7D1΀K_X n$4?*b~AWP`\#N'5@'! cBӊ!.p3̩(|)+$%; ,}'G/ !1mB%a W0AFPPLw"(s A -IrבWØK>H! DPB }D-^ĘQF-S@8X_J-]SL5mę31s΃ETKz(:W?|3R]~VX%*5]mS!iTśW^} _…[kp#,֨1eó-_ƜYTF YL+8ArW_{mƝ[_ǻ}L uB! |o͝k@.WTǎ0zz+'Ϟ= ) `J\:|֫ ^z>qg!tl?|!OK@ 'Pq6A*!&* srgD|%.D_"0bB$7CV fvD2I%ZͷS _*:%o~)v(jG-+D3M {P9 zM93.CP>zӷ bGY;4PG "* OJ-IK2ұ -{)PutS ;4ׅNIX !z(?E}c.uC:^ .6 "![bzc )]wAtMHڂ3\MheHxm2m gցkqaj+IhȆ).8d$[=HWEQE8HQ%@hXn i29s{HZҟl:jiDڣg0f 8k ;:' ZO1>=Fj`)p26,+.bB@Xǟ:f,o??Tp=xPaF(Tg=c6|G/H ^B"zUh;K@.` /C PL 娦;CH-@c?`:%l9AѪvl(Z9n= Yde8y e(Hp(8<b{&X\Z1Gq>Q8*4c^]JOBJ(V "IF ?1\B Bяl hp10u̞AzIR@z *ȳ`9i ؘB&* bKl0)EiEU/*@+x%fV02#\ÃLidaP(.ӜeA5c^:9fbz`#fC.@!os yA%E\FKNdX˃t;C;6 AѦe!Cb2IrFB,ă(@ xJtfG&2Q zӦ[7:^X֚ȮRW 2$&3O#\!!?HYqªFmx)`:Ie &B s{\Vؤ.h%ҘBtҗjĽ @<,3-_Q?j4(h:y|#6/$#!&Kv| VNnQJ ,hLd"VRbwuWEKRqsd8AX8.k$f9 c%S>SH(Һn4%n?"p#ߣ!zA$ k" $kb0_i(O=&q0bD_-7 Ʌ39=s  Ӌ뭅kD1@THV0Ë/Jk 2؊%X(X(@mAؖ[94 #2@@rkLX gL@rB [6L.ߐFpHq5!DB4 iXM†؄A0r0 i:5*< 7:Rп/hry3ɚH939Gx&Q03[(FIAdHAX]<c-p-, 铄а/R "a _Ahȁʔ*p{*l \MHE;0CT(IID c>bAh7Ёh5Y bXhX/hń8+X#H̚I;Zŷ ǯX͆JXPv2Є?1SPMs0M`'9^M~0,X3*c`6 #M󑙐EcHL@MYiQhh/"]xۃ*ژ25{yEo(6ŹM `H釣XYe؅])qMn~@0˞`"=[Mb|!w=CI:JR 0u+P&kf;UѺPgXXW@ڃK|hKzxd?XF 5a%i EUS08BXEU 8نťH=˃eA C6iбĚ\ *Y脈@ڣ+Bw0Ԏ kʵ ]܊gIn*тHEkˏykRN =\0B1M Mtf }^.i S1s0.ŻTT>; @ |ތ0OFȊS8tD&57W86-DXk .ߘ]B]0%r8,"N_HօR8',0 |  LT0I.8O u(sAE*hؗx6;i*z8R#Ã0ք؅S =LUzo ZdtSRgrPfؘ}:v(XtF HOً.f\@`cdȅ\h:8ov?a&{)O"uh B]N/Qc(ӤiXtKue/ Ǝ3 Owqu%\Rr&{-|ؒjo Crhx5 H䖣 ÙC?=ȅalq &@jfՑ^0;iړOFy<~kްX.RgO 喠># 2x8Q:ن8h<f 9 7‡Q`H5ψZk Xఛ я1H{+=nՠA@vn8QSY5ljz]9jg_.e`h/-@X5?v ڡ } <~|tWv؝lBgp „ 2l!Ĉ'Rh"Ƈ#Ȑ"G,i$*#r|خ%̘2CK#5ls&РBܷO`J2mL*_KB&PrMxԦΏum-ܸrI +p.>zgBNǃc a͚ '٢; 5 4A(rJduFexMKX@:4.«Ɨ3o2TΜ@Xex@#)$m:1c5a|KdRK@R`VS UE1 哞G P4sXR[v"16UP@ؐȸ#Hi!t#Ey$*Lt?蒏=IeO ~f $@-hyGx&mBLU;nCD@q& s#ftN:SX:4:L Tơz)|)hZ4Q+Ͻe?]OMJQS,OP c=,Wֆfo;!T9}8+bPJ'[~mH]c9UpWd`K!yCq@$=n{F]1JYg $ "d[o9dR _:T" =Aq#٢. SO18@x:ڈ&!JX04$O;%2,pfHCxaKJm%w AG:1JX\H>bagJtܼgb~gj0 9L&SBlⳡ!r3`G/J.D[:ԦF Nyiql!q#.=ALɄS>{R~ ? f<%24(KO?TvbQdžG[ɝ9@8 !T*ZcTPI -W/ґGm5aWdMYZ zu A4TY^2B#fxSP(r!4?a{p\?'E 1SLf9];OیUmֆ|6!D%Œu+D[ܹL7(T@pw݄p bX"N2s (*lɤ3߇p5#Ĵ"s }@:;y)&0lv?wr-BN$X"fB 4 !HvĦ\ěR[}J$|H) E2@c;񨏳 ̀pAd$Kpr 4;H KB" GbT #dWq q VKǠ /9#hgbo*_@xKU C $vEm@hL M6ZXড়JC[ p!@G$q\+*Gr$MG89T%X)J@<ɯ:FnNN3օ"g'.1Ǒ(ʏ*JsWT=m !MrLD $:!ygrh3<5-Gy gc$;˹d]Nϔ7 !aYh;.>,"YxGiV#ЛytпDH'hL\`ň#؞]OD!R559ڎ@`ўa„ B \{?H% ;HIҟM S$EdB :.6, 9ޑ4Eؠs,%C!&b[CDFU,LhCnȆ((** @!*$@!#E\D0(1TbA4[|RNI5x9 8\"x*"8@Ģ*"8 * 7CGbBT{ 0# 14T2>c2T cDPC*^45h颎5p#8pjDL5d4",Ƭ5"Ql6HhcWP?.>E>2@hCA">"BCFD6@IH; ?#DlGF6GbBx$Jr$B$F$HJbLdHN$Nv:X#'Z- @"6ԣH<;E:D4,%C 2FLPd̉80Ò$BcNv)Ք{_F(T 'DSfD=B 9Wh%s\H4B$A$]f&P`CK BF3DfLL#A#458a~|eEXCB(C AE0]_ZD4 S2B|D^g ȁ%C#WsGOEfxRp]bB&]؂@&w*psgl'TH\YDp.,C%P(3n2B/@&0e3'{.qĥHE1@((PhEChhW2(SDE ÇYJDib7 8p#BR7(F}^SD$ee:!BN)@;age-PG16-v1.5.0-rc0/img/age-01.png000066400000000000000000022232441454606241200160450ustar00rootroot00000000000000PNG  IHDR գj pHYs&? IDATx-]u{lGBE| Y%NL YNQeFȁqR&M$TqOLrO;5f|?|3kg싿"bȢZIO5Dz%2^)~90MxzXf~?/Lڨp"eG+$5-|(ͱv\@;7zH4# U!Wezr d*.lEvyL(L[*>zȲQ<6OB1jV-ͫV֥8R;cN2İoyE<ZiӪX .! S5оYmjl2=j:ljw򱇑ڼDs(0")d5̨s{v0&焨-Jqf?KTSv#B9WIlE =lqQHdN99˗^ԒZ㴖m57>HHg!n-~ G חjV4aW+nkoU#*eWA"02^@V#hƬAd;I͊[ͩ>6!gp,9X7A;.O5Xe.f[$5nlS7qܻ}0q<5RAtz\,_ɅY$9j{g^WiiZ8N?="XSLEJu(?:͢Qj,<#o=A0ۭfXg62`0 :p4qG(*/Vá-J/Yoz~[c+pԲgw˃MOO>}rⓋ㧼g-5$I{r?MV]Zvf?ѾXt߫\!9<,Xdr|Mѯ!a#Ut) ,2f@&L |(J'M/%.g,/UdcYyf<ǗPII#UWZRCM1|CДPSO3p8G~wpg`o1}+𜩔:Uo]=$Z@76t[,r<Iupօֵ5 4dĘ +P2u2E5\"ne}>AD֣6l]?b(c0^:}V]l7)Drt\^l;;>/w-lVTTY):1+o5XN0Tزm fU9gmÆYt6z4:!#_8\qRL!3g o9ECMj/v-RVtiȎҩWqaZHطV`&SaRp[!*HE zPΦ^-(7z `ֺmٯ{QpX%-0lBUxiR<{?v`ZmoguDKm+ C5MCשK@eBcKs{rxLs9jge,PcFKDz~ L{Y{ޤ*@fک6*!a{5H8ݍk.1IآyHf:|>1ٴ,Y:jP"|A o SO#ۄ&¬Rp]Q[sE?HỶ>Yl{D`R^ZW{bJq鮘V@zE܈=lQY1k`kO7S&Ψ F.0HM69r|^ iv6 %ZD>X 0iV`ltkgS -H>@`^:kɚJOFMe_Z- Α8`B_ϰ+VD:I6ec73N{\'Yi:v5js([z[vA,FjI~ `o$^I.]PlI,@?m Da聓Nc*J8xԧZ0Q0賫)_umzʙHc*5:1$oC2xd廹PH<4_ [v;imIK:GT`yNLcg^8.hCSA樲j?3|.gn"bX-6K[+<-I&d@ ?ڻ%ZkGQ?";0~ӎ2f[Fw2#%׏9i [NK4s>alW>b_{6eU)nȴ{\BKUZ)LxM3wiy~;̵M-ʵkms)%36!I) O,JIbH*]W/L L$0gً7V9~y (6ӇoZ^ѴM/1MXYc`8dz Wvy!m,XEMuMwMHz]i`::Q gYn]64\$sեGذQfbXmXQ?r)u,m<_~~]9i^ڮyV쭭ڻICuCW}L2jS-Z".]7 @h)(}%.GM)h " usJP<}µ2R˔v[J@kOx',dd/l=p2ySi%k=9|'?Y pGiҷVIE_= zzpU.O'}@0b P)nP3:~kfT jz-~79⺝YE4[c=ݴҹ%{0ԓBz2Ysl+SZmԶ2h-0 <ztg^^=LG,.7Ҵyn,- f=UH읫Y:i/ HRᩐ>>Ucğ~NŤi3A4&82Ud 6l?r4s:BB{O;:g,4H~>TKô㜱[xo3!F .LYM +ZeV[ZM0cgK]q${ =L!aD?Ya\H7g)$ѧ($ûu$x!~3Bf콚, QW&_:Vm-蒇~ބ:!I#09S4W f [kѨ’8GQ{ N M-/][⇬P^o $ ~ЯQ^sm-jvJ~tGT_/rЄRC`YOYf6P(0+ J3cPG&ݼf_ڂnj6k@y#};ٙ{RXl0l7CLŬy@m6'3C,l1I@&C<=(5݄?Ryaj?^#7p^t !UP;Љb$h)vݚiئٯkoWGU_ل ࣃݯY.;T⧉#bcj0:}9fppl Eb+VsF%y}Xjf@-.Qb֯TCoNVԠɟb7-7gr3:33zѪ *VLlW9~XrknEwSs<5b3ii4:0U!L)]f`*[#è*TplW3[6Y%)/ ?{\6ƿ:DȳS6 ˭iyOm8o뮲'mT6 ։m48ۖx#\yƸa1߬ vQlnMebm [!ԳY;_1MXt]`.f{i3bvhڏc>^xT֗<5?'OB-P1M寶8-Q03m󆮘^^/}R5@{HI"ir ?(R ԯ$;jSW8Va[Sm+G?Y[aH#{gЂKS-gLm,@}Ί'U;$+)#Onoq"l|̖r'-U@{]=w%Pm6WK6>sYSa+'D͕D.d+myA51k8j{*ίӤjpw”(a {M^.{S@J1BgY9C`7[ںf_\̝Zkysx2c*oz쯒{F=A Q3Q͉}fc𧵣ѥ'7嶭s9ےXT. `T&P]VÜF_' C;3s{2'-5u%Nu矔K" uEc;5n{d "W!:mH\Ӧo.ʴ7V`x `?e.u6 IP8*K[&MRWY- wh|ijճiP,)¨a[eQ[ BM6 T"NvUݤjApҵC!v3sL?'q FvݘLAi'y<ÞqZẃwS=OO+t9.=? S _Cn |i9-=k1/F-EL=|E J"؊qe-XVQensjDSeyIl-Yc+-=hͰcP!7xjW.0CFNҹ gvk LP,)/Ye/}ZˆoZ^Sb慢7Y{9},n`.'%*= ɴ,9HjǦw#rfdtԢD& IDAT5sA @ATNy·ھQzaOGyrYg}hu"@[X &7u, ÇsT `v.0tЃEUkLg8}iUbXҵNj\ķ *vn6j񍵃T\ƴݺwC?66qm+5gx4m[,zމ$޺s _(y2̧e1)oZ5_U`=6L }?23/͙Դltv8yi5vOt`'Nx2WYzyQ{30qNHzʊt6-&ÞMQ!;g=jlv+Hz -S>Ν?5/aښltK/L.f VZ.|Y.ЩWԀMk: n3|Ƙ+0FlޜLzb'P'#9#AԦQx܇Át̽SCJuBgh4YgY5uǀ$T˵Uu\۰(eZZƚҬ֦MEpZ.Ì]=Zc9`s4>UEL o:*=7L@G6b a %q^F)(ߴRNiye0v?Мޥmr:|rs|-dU!_>qq7)jsS6I'AAg+_\g` wrlDb)3 c" MrhH{W/hj{=6?ؗN𜦵Uaك.A R4ّð}p4ȍh (944-s4uj)QW0kMNs!E_9 G^t`ɒ2@H%PKՇlت0T-gPSHBN3BϧDɐpCYuAP,j` F;B !ȌOΏM3Z76}]4y+ffN jj6-v<[l2 q;2PDh)\=‡00|Lĺ0}XÁ;f ``Oq a8ɽv-iv4A%\eEcDbZ$2 *1$Δ03&dʙ_fk4kۘ\id1B}8sa*[s<V3{ҋU/m|hf4[ ]곯*bʮu.65ӳ G w&Qfl\۝_wy`tIE~rZ-|ݸqM+v]tPm OJޭ}@aap^|y\!ډb56`gI}VDQ - l?%Ao`E1yUΖHư1=h^eTPl/5.} 8I-e9m5_7ԏ4)xHkَ*0' Z\xÁNF_G'ԻbLbo>iH:r8iӳ$}]$yƐ~<=$S[dnxw!4M5!Zy:ګ[? NE%ozJ$_$²|nH}08\k,:ͤ:ܢH|Y=W!3ۏ` X4a`\G?nyy^ Q;U2}*OyI(&QTVƓ/ U ڬ^\ijL"M$妒gIy;Ô34g-zɥJ٪nB 0XƷժ!?xZ͵-ۚ0;҅,F\+APoK dcx/kp(:.){<0}J͸J2ʶi{eD]ngn&jˠ"t 1wlY(R %Z $]f VVv# "'fi9ö\FkZEIMIx+r_Pdfɺ)ɺK'=P Z2{0E-P9oL\]]&~LwU{bib6LbkfIRQ̦tbFyGɂEfK9C:%%m嬊 <E`[1{He$ެM=dȇ ]\$\օ r.efK yf_SLxQ~(㾛H֊[jп6s;0.4hu@0['l͎wyx$V F(٠q Ak}lq7\UQkY-خ`4ylk9FZgc\evr-߮ sۛ|a~5v;1Y${ ! [eTu @=&$]&۳E+xcCK֨t%Yj%Sr)I7Jŝlwu0Cv(yBfQ.m*zD -3({BRE!q ,߇C'~FĚulԺŮIL3H¶ζVHh{l..TR0`D eӑMCcW:PbB +EO*5`iP@ Lg |O(:&Ea^q>1Ah/bwNZG=V~Cv=턳Axs0^XmzW$t`0oɴx28axLX2TVF 4\7Zl~'LsM˛ۋƘd+> Bs)vqGqAͦڗ1s1p98pz Ť< Aic /-A3SenRusf;lZsI7i~^dkkF~G*T`rfSDr~S5*t? >8 l- 3h(g19"IA1{b롖y:UcԺhW޹hhnN7n.ǧ<;pLU=*&ض4֪g͗@F m<%B̔W"\tyV즭6򷲟ee-R;ξ. 豠++^''?dt#|E΄.ێ9ꃊ{I'vLԦ |/_ 45ܷN|5EJ!pkj3ڢ)R3Y[ (٘Vs")M8lHζ3,4ހw^K`2J:K> ZL. #Ţ2knuYA 23h;bvRf)kl8V I`sR}>#ۼ-EMbs WJ\/)Dk{{Lf4- ]JޔI9PWNkq D{4kmy BŴ9z(pj_vЏd1zdƯ9VW"{vV sjc&NZzZ$-8#zU.n5a S']̕9ٚS`R93nS4Œ&=l 4Ӎiˤ>u{ @8$_eQ]"B%kY#+=쾃 $ޥ/v >s雅űiT{+|Ԋ%O2NYޣ&y3h*}ronޟRґa=Ҍ Z۫ZձkT*Jo(ZU@!4aYr,%%z ]Vqp/rcd|lwt1b 6 Qq&#T~YW)kbBx5VMB`泖h(T\ۈ WyL׵ǘ[>*w spctn Y` sEHbQId(Vf1H*p̳ܬ]!.t1+Cnifd` ňD}#] iݳrق Sv'd&Ti|-;6ڬ5)^1Б& K{*@%$ey%HRc0Z Hd>Ud=g1RJE-i:Y^|i Lι &8,KYMA~{ *F*gQk YtugYIUBHFds"LRQ"Zk='.WU$ٜo=BQq5&PƚfW;rj*9(_2=WL&E$ʥRŊجT枨x$ZL nܛEٙMɳEq9@eIN_|!*aО{Ɂ/6C 7.QـX:]K(w`U|Sto3Gfq05 9[*)jy?#wx/Z PcR[kJ@9h_,c=˜MjC²1J|*N[=ot`Z9;)='Xs ќ`|l'EA.A8K6o-2aA2`@g5AW{Ŕ-IKIU]JDj5 Y$*[%Ge UI8U@agU7r"bb_)* %81T~1͍NLjhiz=B7W\nܸQJۃ ƵUQ){zN`V(8;֬LOZj?J3,΍_TQ䊈l~J۵Pc6&wЬM5$1tF8Jv .V;SSx8TjfY| ˮ2#vQf EI.H J(f"WWW/x_u%Z]!° TpS`#G:2zE˜|*ԋ/`Cj(r*k{Tߠt6W8mqmTg~WzCR[I>YNBt6x [mCG4&*#ϓ*Ez]^ܴ3dІ0Bsgޜ8?kX*9g3ض%?wBzٸ"{laTk=ELͶF@Nw =svmE͓KG1`0(xm؆kcR #J6):1Cx>|NyMah`:9]]]e#.G~v!諥☦G{-?t|uzQ@ӓl- rsw)dg! y#fYjR9),ۈBl-YaÛܠKe\0 yֶQHS8gxSW~0&~"QHiCij_{M#Hx3BaF| AQq)h~zXE*RgY5Z?(a; @!FEʳ ʰMV@O?2XJ: ]S6zL\VaQry* nZF~@W\f@:#@A;@/|J\D?ЅN';' u䦐vH7$*lA0G9&!Gw1 \" ڇ$j+Tx!p޳,UgNQKEj`wqe_%3!֏PW߆1k_7&v+?\t#0 ejHoү5]υə0(M8T@ !0X *z?2IT?cgOF͹(tvr QrakW2fVI^kmE3td<@Ey_y9jEhIuQճ3SN~'-EzIפdfd(j&;μW0w">ٙnlaTH3_4irTX! kNI5J|=\U-1 84+rkFS u˙Yd^GTP,l¬lw򾞥\bjoޅJ+y0og;%H8Nƒ6&fN4;f~Gݐ}!`w7BKjDld߆@ך*$I m{\1ZOd{bYB%=l0@\H\?4e' _dӴzFL,gj"b^)OdݲDʐkav4ߴ45>Lv808GDETk.QK"*C p&|9̀E>^fnYu,㲸[˨ozݵy]`U;:lZ\#lLi1!l"ﬨeVm7GQBs: ퟲ;abCSGX щJ|Z()yc`əHxQWdH;y#`7n߿{-0J*0p{9$}73֚IIuLvY+402d[f~ɣѻi3ɦ7 x<PsC ]% hwa`i:e׾vm(I` Gqj8]V6C_250/:6S-ָ[sNU(YM!I5&K:UI7SC)|`'ar!QwTIҋtbE:(R˴֬K3D׿hH Q YB$7[DvhIp8>} -\Z"L4x"!ߣ tf{a-ř[j6NZL) #$e&<6UrsfwUp|63}q3I ZcjdA{9ڊnXqd?ٟh rEؐg0qea U2dme,59o}M1ؙ抃CٵڳdW6i4znWtr~ۺj?E%'b(>[vd#`&0`9/r:Ka 4CoT f06$E<=rk9;]ӻKY[cJ[:뽷ߣJ6K3Fw{U$7:xDͭi8zKvO/<&[fKĐW'o1~iaϔX|ֈpVBĵG-RY*d=AXT DKSeQq{_D%{& *}g{;(5V6$ckOR,*=l l&ΪQ FtfpzFl7 #|~6ɚ[%Sjd४!Gbz1u\ Tڕ |k0-*Ot/x)r$Ξkey s.A &}И%v̚D@ٿ`?hث0^xFߐtTY\0ifjϴe=!}_AFUAW jWxES$Uѹ=d֥ߩґTO#,D$dc$pu~@]"iߛ,_O*6cQ:8.,QZ /6 } IkhЕ)dE%Pq)ZigZXjۚ6qq_~, W/Іd 1IRQ |Op6Gx5?t"DØ}5;g 2ö#E-ybxbU[2CS\޼ȻY [T1-I4ΐND$˿T"y7(96j[m`PA:O3EV͏IzBzjLN@hu<=]"ږi=E2_L7`J{JW,ro 5WG11YG C7?;vAG=hć+RWM`=wS;#xhbuxv3l1-Ʀ)\(gyrb*1ɉ*T)s `{.V%^L9K*IBUhmP  >ȖKk 錍{Z{Eղ-Snq3iBFl͠z>ر6#V_l8n:{_z2 ~\ijD1*E-q_\[CDS| TLPAP oO3ׄ$w}wb s EׄC eB-l􌆦cBUÊ+8\Ecx&Ӯz$/;3/᧌T؎hDŶ89?ݣ'1Dy&[dNWɦ AH.nr5ܾ82kZXR2;M<#{%Rø*^_7+t2/W  KL[D~܈ͩwb t`*vOХduyR&+26$v~=ISE;kvO9th;Ư0ʇC`VO #-~ƍ )?$n#5n۾}G,wr6\M'_m$eY^dDm?Q lkk6ΪM5YsZ`*0\n<] q03 0X4Md&.Hig9}Z1)iŠID+lԼYbnf);K35j庸8eL:0EAZ:`XWf+9.b,Crw&a?$4e$y p8w2b rR^Lُ*yKXAUR7]v45̎+yˠ([MNL5MZu!=#Q_qJ/pwsUt^Hzc B 1q,$5@8nfcXxjN56avxa8ԂT$`¶[El4/>p:KS.>ahob"`\  ZD-Q{OU%We4C#!@Jk9ϤF ÅbH9oIK Kja\ݬjf6~f^-fRwK՛댬52ۥHBm`/!bg᱉ /`#NA/PISiO;ONR4WKfd /uׯdW2 +]KE)W-Lu<3'(:czDÅ&iV]H~";hٳ#}>1ͱT19;Y)deB6fƲ9 ٍW_L5EPOYg++7=ͦWN1Mꅶ5E~HZBj|7K2s5q!:"ɋNƙAf~?l6g3 m S7SIRRReT)9 HխǖXE)MCKm|M1\BٜhǑo R2if]T{85צփjX+$A?8U4'6~<_/%&qa aVCL^⯜}M ܽ{2?W*rn/Aq<#եcǏҕ[>goRMBsl!ף] æG*srTղ_8mzV{"&Myg}%ޚۣG<,3sQݱ]< 3[;4?XvaAqΝ{&$3Rq/_72*{8[$;˨qyVdxMlO#c!y EKF)Kk9~WHNf0:|yoIwIcxzm,`f/ yŦI̴Ywa,ňTNZ0sadm-bym𴛅d]"kݻw]vTFh ?AwLoR&[V̀&ϫxGր[*9#v9"3; CV)c>P@}{!i-5F(cADq Լ.2|V={8b}oݺѣ ۿ^x֭[ϟ? /gϞr@o6u9͹:4}=OEjmi1W"S!i(m6?f{JWC:r i{tuN#kR8R7[;YG.][==y2FԬl&0B@f*&K;CГQ<iCG-nny1?55h|[ލrs%9C^̶*˼UY]XA=-`\~r1 IDATw]JvΝIN.//o~??\^^m|O9pC- Ƞ:`!@OzfsY;KTg^} әQ'd"jKYFEQ3|7S\T$oQڔY.D$+j~Wu N5|o}#!S8a|6{8fb%sZq޽_/ wy7߼y櫯IO>~ÇV|O{"oÇT~S5אuE)RߠVl*ϋ/DBIJҟp {N(g.c=3 ڐRB{Yj*xCC#s3%f)j1fR ?]TjٲJi{ '-CM?g6ާZSHyܶК+#Ě"tB$> L5\Qeͭ/bʵKhbi%/5wۚ[1;'rk.0M[s=7Xlsl|7G}zuʭo۷y~O>~ڛo#H75f/dBȦ`lZskU/W6ǚ42u+QNK'kn; -oá|{y%O6B5̏:i͍m)'$PtQ2> 1\_qMePᝡ褛X/{>wG^5HWk8 %? 9RlCq+&v{[vƲqmjs&͛կ/{xS /ꫯ޽{/_W7o/Ç_|10 5 R5Z{ ;2b/\QIk|۩;u{3'; mwrѾnU4v_D*OԒ6/ae5ZEުL3(;1`60+]3՞L -y'OYԡɴ]lQZm3z!hlf ؂wr7teC5/s38ˁeöNo~k׮.^]"ׯ_O?޽{?я յk~?;>yo]QoOq+1}fnqW.0j^ FTT-Zk7J X +i)99775##(2a)TBݔ9/0_%b_pRhёH0>iQ$YðJT֤!DgJ<{0x1\D%bLƑw3k![/e,>i j-)zBvSk.RUdGuTq#[zkWbGς{J;s*b*OŔY=3SKMRD2y3i{o0.OD٨- c F[[){=zԫ>Ν;!'|X7w7ܺߴܤWn0=3t,TմuB8dy$(-驖NƴFÓ{p<[8MGX>=1NeC7+v vƬ 24a%UpHU5]+- Z*#ʘZU(\j;>y5WtO⿿,@kU0ónqV!LAX.J$C]e[_#ܚkk氠MVh/uQ ve\+ҖZ}HydyM$ghfD1}B +WݻW+٭[&4姟~7ܽ{wk׮ݽ{oOiHs>ev*Vȩì)$ƺ܅ͨo_b-zp޽oΝ;ٳz whj\NW]t TO߸qXuVeNں$$w&r[]zLq\ ]:5",@dj-M?úwg!oiτZPCJlh)!ӥgC =9n/?}^\oݺ58ߑ.@z{~_ ׮]㏿_҅Aw?$Y↨\Sy7 Ċ1li5o'nH=gz #$1lbSu!7ƿy="}E5}GvمK2eq3ms6\, 6_X OZb拈􋝥;-p!z֭wߺu?l=][f no~ӟ>|pX'O~?gb;M1xϔ,X_:(j$wm5poS.ʡ" \ Q8oQa<5+BJ|;B0'5q n,ze|ҴfEيP,J I=?ũz_I[{'ͯHonή֢ +8դhͥ_=vl]4 *[9cy2K5sϤ|Ѵtx _߄fb2FJV!2!Р*j t큦_o~/Gtv0:7y2KKaPf˖z>h:dk};J2ƳǚB{Ukk­C3Yf ̇`56r**d|]צkX{gfmN@Z&Z5g%5hUIk5w]nXsG9= IuhrzzkX7oM}كH0-w }[oOx57}*km>4H"d'Ka-BufZ-kn6ոMk*̴_^Eբ7r~2:UZ5«m4<4k\ {[s%o53}\goJEZsU=_[/L*!Badϖ4]L8ώUXK,G`r퀬!ŵv]/Np\_Ɨ8sD7z*hꫯ޺u+J7o~!ϟ|̔;{ڇ~S׮]ꫯn޼9,EeN3)]3 {B^LNzLe{o0g]gƢ2iCzURl?-Y  ]"j2ix] F5f#]^PY8|'' ԒPgRLjkR%)鏙iB 6 0|lYquj?:rO>~࣏>ZjgϞ}'wmt^S,%[`6jw[p x}W1Mb!}mi,&35Z"@©o_ 6{[yƄnHΐ°z{che&8I~<p>sO?Ӕ{}7߿?'f߿>ܓ΄]ވ #B̹3.Kxߠ3sW-Į5k[%Dl@٦5oed>_"5ms,M2bkgAbe[tCm3LLֈ>qF %9s)~G%0zCv鸹u36K$IPJk]"a횋eJ>wqG6h}܋-ALډᰡzN宼7 ?|r7?>mFܦfqw޻wϓ<Е5J/RE'/aϴ"vQH~a>H^L)BQa׆rJY?*şD#eK5` nҙ9/W>$5HL0|+Tr*U`ͅɟ6_9i1>7hgEo?.f*5erzռ* cmUY3[TӖXC< ,Gl\_Uo0gi'>g8rC#Ps+\~01JB6iz7s"8MΙ۷oS^~_|᭯~g-ٳ>7x9pbI304MK'}췳:'wND!%0TEn,5K9~w0Yњx) U@JG0@@WMs)syk׮ݾ}۟g}t2 ?~뭷>Cs'nt%<7PiOEH*m%"v!T* 8nɘjN!O8 u'(Kh8(GE8{{6~kU>S [ ݥ)wfͩ^_ي?64ĀS.bGEJiK s򔳁kRΝ;oc~g"o_ݿߙE$۷?k׮]7R,FٔE-0~I҆veh) t)imC^IEj{5axV1]R9$Ngju|,oPkR vJ4A:Oe¡3.=BfK6?#uV$3P&L$Xܫ״}i :ޫ\iJ䡻I䓉DM_ 8*}B`y%Vyi9{FumH!$*^ayE%L|z"TQi7D1/aVPО0'Q֫q#GHY^s?<}yx[o~Dx IDATsD=ĥө̯$<;o,S4֚1:qmFLBe*3 :nPGl iT̴= c󝐭GÊ9 W)7-aʓ=),+F=co:Q.ZHŠ%Z*-y)eZ2"lt梭J ϖ \ }s֭W_}5w Il?oCoZF:yUӎ'w MP k֣rO,`X(GW|yS }WD|SK"jyW షuv')#ٲz}W>%vZHxĔ{Bk϶U3lԫo~UZTInyJ8=; P-$ w fO Tf1b91ݾ:[03Oj7{w2|'(vl nC #^R^|`Pfb[{X.U[0G^b\$_+m4v1NlnW9V{syy!Ϟ=N>+S A30ပFHܨkҮ[$.gRi*%=l5_ !&f%J6`)@h>$5T3Ql/x7nb(9,:K#;Q{= f']L.A6X\Py&Y.#&7IBW5)&RXp ̲",4oq()m՗$)/kjEzMgī6P< 5VZ2 k⟄Y|`I-M;mj*Tpz6-[|8\4e>fDHZ"iU˞΄MɳI,.!ee?UBҿ:U, t6Hott:] S`\ׄSO5:W%b\%;ݛT'O\@O&YU,[=B]\#2-BpM,ZQ}Q&\,S&Z;`.&<ٚS`N$!/;6/OliLD{䕰XʦH"@HE!*CI"!Eu욟t-5lV{E\B | j~:>>]V{2*,,~ة0ryI\oCZ^>޿%)]a @@tAܹ#3l1fp , 8PHZ^KYtz"2Z 32}:ԗ,OSPxB{'mv+j]bEL0kawQЕe^d@f!np1\+_l𔂕Yp3*3Np7d=9Yb{rc1MjEp;N_Fyec5safI3g#ԙG3NSϫ971wz9a r\8oŴ>5*L+T3 !x}˗l:ڠͮ;i/ 7\ JJ]?z'*( )h袴RV ݳ:7n P$eHr-hr"#T<0vkxi\Nzi".)K'+bgnH|_-*S#hCp Ŋpwh/+Knǭs>QIET F!nJ=bLV'-a;lm)0&0DpC/KWkjvgϞ]]]q^*-0pdI6e(aNԂ U0⃓͙D˃2_en=g2^fЋҥDV72gW[s[r!gCtv] @! ej3DaogD 63hƒ0Dp,Vwy_z$lu.&f&[b iMi5;0*s8 @ h}鯿a55\ul79Y{.dJq%N/"A2ސAry2VA*XM%Et ÇI*.[=ÛOQj̪'q|P( MeJMkE-M}u!6 ]2$T}Õk%k0'}4lRFt{V-`D߷of3:zѣѷ-#- sۭW8K;{3CDȲc,#l HWc]@n< w<{ecYI:ٽsDEF/NVnc7d[&քdž+To~ǭ˸@5Iu\(wEu+B%1j*4 `{!qcW^-xBJ,*C6c1aLe)*u âI_\LJ'IEkr §dHKϚ^*wG>lzHf]'$}t1QK1A%kLDn *ēMCط{wp߯l6Y C{k_l' qA?ĔYLAG,AC[i X28ob/Gժr"BLb_ *FrT-(Nk\S$D&Ɠ?m$oiSB못:s<~4 ޺F6,b:^ ]$^4K``0_Z`0dէ"7 7ȳd`%`fYn 96&PZ?iuר3P+*B()srxְO]pH$- 扢xXb\<$:n a,}:]rGZRSjl~#BS3RTo91R;F,KuɐGEM\Q~ ~ےݟgC7x=E\Yv=0(Y;TY`(dh݆H ^@\zZɮdwAn(AM)` *f8 ,azPtGފ?HV%At]rlϥIcvƥV̪lXS:䃵*JcA *f;s|L.k۳9Uq뉎)gt:ɛ}<6J[dgxm&{Jy!]psa,Vj#$ ڋ#ҲSns#F#UeZ+#ВO]p"L?؛ A&0PL'Ox$[VEm[Սu~n'/Ykb Rz yr7 ab==fa}v1zH5*F*Ç7ئ, &T!@n*:Z "`]c94+s(|,;! š%jALb5Yv-a@y85; >7ނO"L6ERiX= }bb#hq$<ٓ߳˖5`0 PEn{\.Yd > iܿZd#{nb3arIuH=6ܥM%yu n( :aG ݸf`P KV+j Wr5^5t%3֖tkRrbY4D 'Wٚv/g R.7&.R!k aS[f̙ n@"Y9C"/U4ؚ H$T3ӳXvn FIzH4;;h>JtQZȌ5Q`0:ئ`0}1w^___ b?::Z, C 4f].zE0'T?rg]2K"(@wrs(VxnZ|aWIS*"V~DuQhrH\O熕> Vv5\p+4 $fDĊD) fA ~}VtxeYu0&P 8\m$ ]L& Lz40ea`Qw"3ϟwD8dEf>U2ǣJ+V*8X#;ܝjŴ֐ɖB9K IDAT5A]e XqkH<MGO,d8&1OeM. x KI[Ȁ*t=FʓUt{&Ari=tA4C\:tS!Y94cF 62+ṊD'.eVޚۊbAЭ ))̘cO]U2BӓXrSR<(bHڿ$9%n) gS\އEC_dZؗp0A|,x%+D f8*a4Ux~j=M"hP^w-ز|80jd3ٝ!U:Tzk%u f%݆E>5FE(C#W bzM k ;aooo3U@kh%<\j[3 %m (!Э i t[k#ѻR)+'Bl o**&ÉL~ywh^ --w8ɔ'8s UIO~`@x_\⃩J{Gd F$i ({ıw1w~$y4b OD]pwtHNONgC.D#nMzjZor%{2xlb+?j\\\|7,}ٻwb'O~zzF;$OHlݮ,WPܵPEtKL8t%@2BK x,YvnubM/b~٫_4#+0ֈIT(R Jyz\+0erQ.)oQh BE_0b~V1@aB28մ)Em"ꓢKkFm*-[-E$n9~҇§B# 2Md֭hAn4pCV]n ͈Sf"hnvPA!6 |换*wr~~?x5Wk( W|bIߎ.YZN^3h;SAvΜYaOoyYNJJuf'LJ^Cb8kT ^a*jb]]5mȔ 0kIA~"!h=ws !}qwIC?~EgNa aaB""v`hţz㻻;gggDc:~۳3V\kC5]*3 MPQq2\IS,*. >D\V:L**,!*Ɯealpuu- XBVXD.A6Pe$dFl7(d@|c(Fj0 3|q<}zQd2y~NQ:ҕ! ]OUɛssT?ea!ąi}vf‡D JwѵmEpu![%Vͬ`Pse h=7pic :{E'V5!nAX\~+ ]/ImXx2`%ZcaBA02k\:vW1ZE2%YLSnݗ/_jZ׬,Ţ'bןŋ|VL[Um"xx8=4QK M4ࣉ_5x+v1'PpUYbB=rKYK1lѢ=iAkKX딅r CADL4#<)Ǔ◘ƥU-޶%S 3j9(H tqwWQϱJQ8IJ+n.r;'ZbcSKI2thHPFlN([|W!RIZz axc[%ʤq#mZ}W HW"R.U2y5'n<ŝr^t-\ng^AAr/^O^l c^(*=30Z7Xr/T/^Ԑݹ>}t>R6A5*N1Y-rGDPQq DTcmRđ/ #^df v-)IGxD IZ7@T5i%~ p'ڈ$A_h72dYWYۭ7) VVp'ߘvwm  LM esOA1nFӏ[J}Q % o ҡ!٘ȶX31 ܸw4篞EϚc(ƺsSĈ ;B``0/lnp6f A`Xp=8;͆<&?75B(/z$hOā44]AUbe?A{†9N[b%хTahkڇljsuF`\{Jy Zagy7W2zhγwP1s0 t `0X:Vwmcex)T.~ x* & 1_]=,u)}oEt籢m~M1äE,AD+b:$Qוa5\05-T͑t"QHwI!>vLF%SĠŀƆ;0_{G.ӱp+>]׻AĂ{vx&?&(s1h0 $ v}p^pwwZf=|>L&?7ޟ-7WߴS9(WO&2bjf1͵)q[FB N,=Nei2GOk$zo'1vr&A+ Yэɖu:loβUhh|K;!Bk LZ*T`0l 1B{s9c Lo~zY_0hi "pM1/4(7q޸_g)%z)(  Hhr-ÉXm'`BD>Ws0G<8EJٞ762G6"ӡUW0J҇XA; pF2t#B>` I~l`ᶱMt2qlu/pAOo.մR&c^ % p#NX-6ZnE숏1Ҵоuݱ&}T!t-٦ CL&苹.nnn5 اOVc&vݴX,,A3+HG`,sux ^HxN&U*Lbd&')YW^Ql6ۿ-ϚAbnwF.ȻIah0NMx`moU7nY1jg)c!|9j%]%rK8KLLxdem[Wک,`[ @dIEnL|7WGky=S'O rp+7VƠ -!?3J3#&"('ُ˛J!-~zGĤ I\z^o|oZPEa(iBg7;I PÎdeĮϭ>E;yT.|>%zb&OSb. . 6d߄ /..,7ovJX?IC} >_˨# DuNqiyH TcIWFjuN9aLYIaf#eKDQޡs'W2(L)U&E!jHj74`jd*o]`.σ1~ p?&m0jk2 1Dv`/@_wc^y0;1=|WLڄ;*; pmm0+0zlZJ3FNw~~~ﳸCt:.ҲaQ6d bdi:`Y;6N, Lrx#UDЯޡ 7]0nb- ^U'uj9i<ƚ޿1="KB lq), 1ń=vmSuTO+6)gVM<]lLdXAȓ'(\)OU26 h y{0Pn;N=!0˫ժ,mI޵|X4,.?NܴkEdqEj/z[CP,.xOdRI@oaܦYu=n/fB0rQ)K.JR?>fЋBx@5qPu>|`r 6VhlIe311 6,bVMƯΖs}%3ɾPSEr|8<<"1[ 0͸~e[.ggg,ggg(ONN[{fcAͤU r+G7>ONPZ~xl#q;J@]w.2/Z2k}d³p=+,2jhP=|kMHwC2|̈~0bGJDog 2Gᒲt `.CLSnTh(=??ij8)ay MPHQPT}P@S_B)ŅQ SGLij4{LHo &A2?c˔@-2& Yv(i3CZUFc<~2I̐"-õɀTRlۀ--iz@ k̈6V&3sf3&ǺCݔ+p1UFzիWGGGŢ6gq7r?c>/&(:-5&,d@J)$ E)HZL#qv!pemii_2Mh xֽ 'kRU^F䖮jIq( YMܴyENquY 3MJ̛tNkb<|",T=b]=ocyV'X_, &(E_qWXOgZ)p{^]K5h-R sW ,tEbkg-g|7I}C_Y.˯L&߿g{{駟㳸<;_+ūؠ)6(kKw kܟp1s0"+<*2%ƒ[EAlgqWN+{t:r-̲LB a36ea)^B6nFLЂG7{F2qݺ.3}%13" _ 4$"V N_t4R@^Bna x؛Y+1XODվA T ? $Gx-bOwj [\K  thqm.Ynoo[޽|UjlOz೸ZK:+v'85ֽ y獘|#)5 . W4' \R N ك- "EROO sR@Ar'JIKbo*3Co. $err^F_)fq;'"lıZ2de\ Nt[6K^.2伙 kJ&Af V.TV1X? 8ShprrBwܡs;qUggg$rOfw}g=\Ejs XQ)ÅH]'cP|@4|jwEگ?_ƴŕuPFч]Y[^NK(2۪Ъ*3­E;ףƲXd&,No0c?r똻lT tܺq}}^X._~ٳwޕ.n6GzePzTZTR h <ءG/q4Ro(VԮ\nsj5N`/1qePdױPSʲK]) BY Xo?[GdĽw ܅K|#jRGQ[fI̴*z 7R *[d:Y2Zޢ8h*Í?/ LehrTU777\*AWW__⫯D)=9 3~O!(q^Ī~jH(SzmҔ|LnNXpPz@. 58}6R`v0XNTt7SR M "$|瘻nrBNh- ,Z1Zl:sꋵ_)ZnVAC ՘,ŕMꧽdFlaAlƚ4 I&}"c09˗czzǏ^__WVO'OӗSfF W*uu͔+ i*)i:?(Z/W&?WV2!Tvl-!zDp*H.p\"vTFRhmvSFK7 KP[xbM J=w[t1j"<ĵUxJz7WVap4Ab0 6a;`ey嘺'lA߫[Y\ķ"?f;>5L>*C}X饆ż AflR*]j@:<y&S#$Xfat7$LwMAy\.Rk{I SP)/WP0$&4f ^b!F;-cDX HڕP0w r50 vYoQQS9ִ{(LRu\;>o,q_rlNa>Fݡq/̝Vf'''r2t:eUpDlibU%Mp.1K;Z ⚤iRGwHwOLtFEO:<(X ưA=Lp"UdDd#]Yupe]Qs(!+[n)pl@lK,҃ v %_n" Jў[4"`m^EĻ%דH@OȜE,$ƆxFNkIґKD_ٻ)=t*دIe_goWݙSx$lRon9uNeH3W;HJ D+iWEV,8h7 1kh0dY^*z,7 Znoozy1Wm.' R$tmWٙVi4xT涉VFvVQR4.D +35 Zz%5 KT[q!'ZZFb$VCULlr]tW[ZNogUb$Ds-,*c:VQ`4vu \1:6Ļ_LlbЋݻw\|>L&E>嘻\.a buxN %z?Ѭ_~ɃWH{d/GjKw_M(3 2(.YďŃX McGGG*^__o6$A#"x+0J{^_uO81 9R1GVZ Q4{KeY+pYrsH\& eߤUT'%ƷLgbR44uB1Uug0 /̤Vӧ*EǴ/㏟={Fo!sjj.jfZVY$Km*BE `9upeȓ 3 c}}У+JP YIF9^}>e8Mm)Nuz<YM߰V~yaÇ3>Xr}1^M9&qR۽z5ڵ^R'HFN AX(т(Aԓ &5SH`- FP"PFHlU@0dtAE׿p.u`a35x&icD aXzg}6 7|_\;N߿ZM𣣣,ժ$SjVGf.-XF:1w•cI! cxrI41^ee0)738,ˮP#fށKq$7VY1<1)!RSL:ogo=sAu gWR8=YuKJ~োN/\5S$: B,J\  ۺ` u^|$4xc/"FPSkX-XhdLG MXj0hp, s: =??ݽyOh0r ,UO̤2tu-=B떝"QQޱlnOKՐG m6j6{bH9NT/ -)(E(AV Yx'1_l07nšiAs<.d[f%Ukk`0.f0`6v^.|+\pl6N_|Eڪb6(^^^6_-&}e|/F&~Jєz$ DICթ&$MRҕ((\L[PIrwO&NbK*d#hno`s i03on6l'eҹꫯ &?s I7 v9ԁ߬xO&EdPvm lj BW%D(ۗ]It+,tD TBWES9xV#=Xz:O]ks{ RvG p࿬3zǀ瘡DL ^~"'0ڱkTH tLM LL`0Tt:} 6{dXɤ7nuknc!ivYSp(Wd$M͹{SУw "Q E QaubաIn#|"LAMojmtt0d>82 OCD+%W\_ki)td{&xB+ 1`[1$͊6t.8,^h #q^"`ܕ7l0+˃ת0ĠFNPVCW5OvBcLu1rX,[s̝N|X|'yȺj߼yc{h,LB3`n}%OIbD>/=41 = F,MXԏ^OzΠfxI:&}fɒ}z?llyQ! QdD<2U'H$XL' k O^|ŕ8q&+{ O&ӎSCW ģQR`T 8R୼9Za4MzkX,vKӤwSWG-y>RHZ4#'grƹx ~_ȃebJ1FJN!^KbH=7%FN -Ogj?mM"C&~g#7oyv,|>jYX׏=*G)fO_nIaXO9 |qicPIQԀp3wOBkfJ-/c< mNI E'rX8 *F{w $S:9_E9 o-l'i:oP󵹱+gl@f2r+5pr9b)i+?1#ØRG;`Ac)HG)NUO2Yb'ԯrŔ *bˈ$lI*x3w e(cS6ɚ-^F:N;iM{'Hn1;5}jL+5aXpc|fZfqׯ_s^]]*AB$J^53]!߹DMpMzSJ%^T`w$(:6tkثʺbMOL~8t"T,:7Da51nkA%-݆MQQDG6WO@>"iAaƒ )L58Ioˠ- KGKS$s|z2|.a 9GY|~||\ܧO>ۿW;^\Llu+zQKڎm [fq9Ԑ슆d,\EPz0򷃈)`g+@w[}W/1a@qe,7]A4E(T/:`u:).PZSTNW,Afnj^h S#sd. k^aXU`spEuWY\" A/w [%3rp8~{JQiCi5iA ^2>:Ǩq6iWƆ,mlYrf04s cfTu%ӧϞ=띍ةrn._q?VqvWZdC}]&:< -FR;WN;j(W#Atil(ƎrQ&dwB~~_P ׳KCg D6!j>xp91=z5NP J ԭ("^.#tf=(<[ 9+Un[/^:Nc#TBO,{4y* -!N13d?Urꫯ*pWY\"6ǏG bU~ʲop;ۣ+Yd3ޓYq`Dŕn)E#i+ 6Wbapb(&+{53tBµ:16>3M Hc*K&AT:.xHHX6^&$[_+7#Ӫ2$5pL7dJ/1"Ahs< jvd = "^JRid]R7v Ԉ?z0pu$7rj#Ev_]0zỷ`0 {s0 Y1B從ťh>___XĪfSGo12O&"Z;)*,N`0MuʈV0]P ulpA,\su( qWT>}Q֬a;Kt-1+ &6 ށt\$t39fdb O3+ZbqM39`0 qcXZ =DI{rr"{+ϟ?] {f9 YEϛ mWajuorS,ŐD簥>Z)8M96IFsqAt(ŝ:_ȂʅJHF/GHc:5yO j-[a*e1ĵcu?VCV $s2UF&i3˺;f+_"IB!dcvkWP0zxY rm~],'|2R|>L\.Gl!Uف#IGZk"0eK]Pk3k'}RU 3^^KЌ|2WezW+NI_a-iy?Awʥȝbͫ{GUH)^`E6 hرJف`0f2o0a뵢gq7͟qrr}X@{qq7>\#^pqfW HřL"OAfGP1b5س d1qP EkY Q;+[TUB`R5Oiz^BKMZW"HY9 u;!K%ҳN_ҹ ?AT~qW%bJr%ܐ6e\kLx9YqQ``u *Qb]o1 fGaMa1NgTT>͛~ͻwnooYggg"NWd2ﹽaٜv h0Gh#;17dbH*x3OPQD:w!&,+j6"2DWj)"H* d>k8kjXפx?eO^Cxuu%V^__UWWW^b\,z CNteS tЦ{s' EٙO 4B0:mKq!wu>Y<0 -hDʕ֘!FAy6e.~\KWA₣YpgNxߨ\X`i-SB#*i~\V#Poȴ-t'C1t1y! VyJ,b.ܵ7XnXZ}~YpIo/q{"h7/ō81-&B 1Ɖ`{ɒKcjh5zaL߼ijNɘ65I Z\>CWHim +k`E/郡}0(%gDS^B;A٤iK?C3Rj?䘀H:*vpZ=\G,;0mt(U؟M{Wt1C3c +7gw*ʼnǍ<.vR6.Ux݃KKi&C } Nҡ8Vנt3Xjf㠷Pť`6}Eps=r P dId{x~,sWM [))!'X"d E}s)[+-%:Ɠ!4w}ӭVBI淛ܴ,_ZkiOeX+Fg#d dQ*SʞfP;o g}3*>poi/nqw䪾Z+uN(yq7ʭFSad'MTC"vY5*cuԳqa&<5`a:r5r,.j^Ξ?΍\ӧZa7_|ao3պei@?)\uWེPC]ALCwiOR7)FduCBv {׌)Ӗ%317@PU[6Ww:uZqB$QX(d%r7`0 $k0X,Fzeyqyy+VQCzٜJ,@P.*cf0 t_Rj!!K}ؗ7)!kY0*׋43re8F r_-=F)/a5xLf"o0G,9'O4KX$d$A76) ~4H{AlNqd_;EZ63~g77o⋡?Kd2y=}Grl6Z]ޞvl.bKW|K5 ) ,qOńW*Lҝu%1#sYr{,#-'"<_K n[^Y.\tjbxvr~Wt= k#7Ef8)xNH6TraL)Q ӈܜf t,=tPX7, q֣_ 0sDD+xzŠ,2W`H在~4\/2l" OIDK-`.70=]->K=bt:)qONNŸ^.#H% ~@R*xFv;2~ĈFkeNjUMf+# ƧK1#bW ^UQܛ-DQ0<ͥSċQiVD' v"jYrxx "DTx 侈hR9 ?q␽ṁq%B@+RPmIi DMC9"dM4(ts|4#<3Y po}t3?\BgqN߿geYVEf?f'4'~U:L&o߶?8qzz?+̛;iro(Y, x!Y\szeƔLU/$Zˇ& M '㛛T\!B~2)77 M7"ILBo.2E6HnAI&]tVP1}RmLd]b2( ܓ/r|%$^wzO%y9 R2o~J[b{v aC9m&2XД8ărr#n@.iFh޴Nˍ ~īiB9dގ >>00b4-+,.wwwՊx6MS?o&/Pr l(\A@O$ JeEs-TN B ҉S.Wt1)=G4Je w'(]k +^GLY͢.Duj$˒,Yr ex }jf.tMG6vB,WXG\Gd4rGBe tiCL?J.+&J,>ՆbU{KyR=,[c!o(jj #kšb(ɢn{Y !M?~_\__V3"ju{{OGO?}ׯM' [$/ Q谀^\8WU$kvΙvՅ`,ɘ votb kkZBQq rLm(MK?@˦юӄF0\KYBWpWCa> '1$:iB6h̵n) X]bxq1 58 0PpI dz6r,.777e>O&|=իWzWׯ_*42]dje XF$D1أN`Z^*}^Ot {-ېbԀldҧ@H E\{1`8lҵ aX,`Z}׿/ꫛ[Tlӧ*E/K:IVǏ_^^T*X6WOMoq2Law^tut qB eM:$՜#=>p_@(L6(b>n|00ųp#CŰd}V D5lbz#E]"QW|2,636u 2Á5 с<Լ&MZuQ)knfc$-7 t|w^.u޲> >ƍ|Uz˛5@_k3XV}~}v=== zD.ߒrIDɏ=T\$%U ΃$E7ލjX\=)>b%$Ǘ ~{հT2\軻7o b^MkOSM us 'v6@.BKv.KiGD"t\9!r( V+}${V!}9c'}J0 J{nqjYP;729l@WM >HKbCu:L,s þaKkfk'1NgYZ,.޽eeyt:/˗D Rx){1UY+;f1#MؿH)9M35-q B ,ڟP1 [ pqqQ=KD_VzOg!\.?.oˆqdMCV*A$U2{: dH"Or2`Y0xHw<.`fAq-oWڊs3G=31#%2V\,6: %;>5j0KaWH> s d2E^?Ѵfae9;;L&E_^^fR?~W_!=L^~+S ]6zIW;i˜p};A`Pl\_4Q]wtAwBsUb6[hjR:OW }UeYp" B Gk5/XZ$-R)MܕU{Y<ܷR9#07 KkRZSz]t(zrc%vՉ ȳkd2[GYe~3lsyMˀ+e[egχ7ٓ.Y(1 vNÍL7|COtt4ܼxBwOhⓓׯ_[t=M7S"kf쪞$nۘEW:~ {aP@y͈ҽwelXp3<X %B rIӣ}<\:u)wﺏ5˒]ƽ਋,ZxQguU'E7 q9q $p ٝ5xG)tZSYwL>#~i5Sc^78)FHA%9HgJwq7 tmru RJɟc)xA*HiRtD,>bg>5ih gG`0 (fy!˪==Zzu/~ӫvTLkP`aMg0 D NkN1 ; qhȖׇ+i5S!֎ &ygs'b؈QZ`A2 $ƀvQ@4N4 ` b6kjZ.777cݛ7o˼U"`NsOϯu:>;P&SOfVi(=*#ESOAⱛ $4X:T$ }%)|&B,p_c:ٻ}+K3l\\$=2}@x; N}@l$DoTW%?IY^PdwR-v!J .( 7t)|gfD|XBLRSyfcIXvn%o4e>(1C/粔_Z.R IDATv%@ijJ;Y Y)"P2>c#5)2u+5V W Y;_BYEp"&ZpA+;!9y4\ `0 ݘX-!qEOb$~yl3 &0 Ğl D  Dʊ]P(/1sSG-)#q8!\[JRЕOqկtbzob\k"qppnc>#1鱱ǍRz1, 9ПZg$m4d" 7AE5WK#J>l YT&J5D"̕|2t$ޫnÝ)m7 ،3 UȠwRBLxs"AA"uE2vLzB!5fbLBD\$Pm$}PF\4`Gd凱sxI ߵrukM|1W1٠Xc[uco*>*\FT(z[NexS$!NneSXcg.&KY>Aguvn`0 {Y,ZliN.'x_%xO Q7r7@tlFK2*V .3I xǚœBglD^yc"-oeEi0BkړTmvY+ͯ*`PҬU .&sN\je0 %`k`dc mNß"L+%-D!' J{n/m?76)Y#,սUPړbA= @B2洲:/>W%(5q1v4%BCܒ ,f>QJ2<8ld۪ ;C> –/`0mnpCvD_(ܐtHZ袚^DA`ƁǺ9d4gjD(8Y(S~J:Y?}ïBMBS1Rtʀ}s.k[.uwgݺޯ1&Bzr{n$ wkr)`Ddz=C_qY3O+!DۗϞӥ}a_1礋޺#nk%ۘ 62bU"原d Rק, OvH(cc֝8u8K֛tnF8-L4ul!=Dt-%]&TApa@I`Qp&׮Yvw)i0 2:Õ@{nv^kdɂo1aTDDC1C)1 .n 2@a&Lr'ɕ/qM^Zw ISYXkdWʹJ5;%#~(e7ҽXq9Fp'Qf/h4<"=z*+NX C,:\,H2N33Uݓ 2v|J 灸Pf wN梷X[ĝ ~AܢrB[l 1 %Et*TڂiRBcm". a0>تn+Cҕh<8q2 ^׎%aps3=r;{'rQa5WNH(וo jAqwzzqֽ>zq8|W:oKhG̥VЮ3f)BKo4s2%WEЏl0 m"v6 VR**,nFj@G[C1νǖ)(V|4=cdF B #wjSv ao&\{c^X% q/c uK\kVƊF@lj ./d~ӅV N'/Q2$9` {wHu *E1Fںav.Z!D 4uLQ[ȹH"AFW+ĨU;SүR!(T~m"r1\gA:{QFk0T6 (sw$M*cbOSJS4sG/;Z6İN)I 6V `(%W)$ȯ9̋$8/11-8 V-좪 ]Y%Y̵"s+dBNc9^?KZerH%<Kr-ϯF|Z۰rڳQp>\\&rrŃAkAc] $Mh=Ӱ@;bM809%׆v8ڰ mcӾ1 |3 ܨ$;,`1YF:\pY&MCl3)րW\.;D[;?_[)AWP9`*j*2Yp7ti*"PtecRqT91&|sǁZ(=t͗N̜rWX ֆ(q>=\7b| U$̑L_{ۄa`0JqO%#[;%Lt.V/qC"igGfft'-Wm+1wׯ 'A:ݜ2a}5H萐QX(+ T-V0>]9ni㚞%-P^C%^2b [^2WK!}ov v'M 5(tq;|Y yc )YMk`xWD=bx3SE0.MgDpYY6C P^{nN(ֱ :("O߰_@YiA%}"PH~5'7ay$WA6{_^uY-U[qPc!P$_hDӎ8#B,`4un+Lntu?Ĝ&0uX쑉`*)"_;'niX]X3=d0 f0i)U!z$ rTd9R2)f~@ |E9IS&x&'s'ܐZ)eT'Y2ąّc2 .֫+I|Չ/02E頀dTFMjى!R9\?PF*h5R7U/6O/]H5. ~)?e*HfhK n3&NcnM$<3\x{g_rc.JFW:y%VT T! ZiCmպƈpY,b M^uY.-F1Sʹ L5 CS*V/l[w̔dE\3r((n[޺'ip#-xݹ%7S“] b KAP"Y{="+ڹu*ٕ2w]w󮈔-s3 qk[ ?Qnx*/ѻMZT ߽YZ_<˺,jZ*hQ bdlF m`0 ءC8B¥/a'u)BZ䭺Xu:B >r5ZAW9<ϨQ!¼!t=A%!?eEAە%e9 .o̍me0&`a0 C! ZX 硌.?X(P5CEJw>{CL2ݑPZ}xU ,.s#pa,=>჆QǞ[{h?tkac\i-1VWWq{=HOX`g#\)-|͈rcTzSNNY^t(n+e0 c7k x=`0ځ) IwSf#!BD>tb+(&kpm( JM G~̨B <Ԃ}`@O9q7ӒrGsqAڨbV8{ECuX!<}`h'W=rxtD i.0V!'BޞO>TӷW+%pjq%j]3@SP>06$)6hXpC }n:{ tFOsTCJHƚ wZW316  {g 1¥*VM&ѶNcʴEbu .`2f< JP[2DЭ#to٬W!v3Q% d3cᡖ{}W0^fQj"R"UgJA8&\;5䇱 cG!aQzYPRnhfT u%v Ikmٔ ^}[Hli᫋8$'x@Q2ZdyF$u! z `0 at@ muEIb[!uxy&1Q_շY圱X! 1\eZC;<\c1΅vA)44<ГMkJbMqpɏXk,b,A }ʊ6Ũپy.e,x[<|Q WuC+yD;k0 `0J#{:W*MM0 %uЬ;,Z<%}p-)/(9UJ+_Q…:8/O;B 5]'&ֽBCJ]N2 }Պ¨r467yuE6<(: fG%oE"ëfTHs: n= Lk0 `0 A!@_TA)<HR/Do]Aw.%s "Ȯhdžp.Ui[o5;ͺ$6^*.TH#İKwn km BbGF^tE=ЮJ'^IQ#"9bzDi%%)򢰉i0 `05';o+$N|.08C9έ&ɓzr|{1NmP4;T8ӃCT|A:ml ({A[˩\vzt:>?r[5xdJ/ :*JG]b/ @!I_3q$5xUAC,y{ۆ`0 cAEWRoG5mÍW&_EP/.|g4tf\3QY2Y@6%ļm յg4k6ӧ\ ]ei;/,b͚5p-G@;gp2Nl5ƓЁ{H0or뚱PQ4Xy^ѿMrރZiȠ]=h2Z!&l3:D)j6yj] `AxDdBetJ FJ!8r{1Upg>/pUi - ?TPGkyuTf3OZN c,.Qrݼys9ʲ4|YyaO1.PH1ĥSt\]]ԜA \MR']. ~AŽ`B{) Z(0J( % *'$52,By4_s!*S>A:(V('&ui4 b;vuPӡ=oAO`0sIJP}) ҉֥䦾[sIѮDvªA5-85(3c)Hl^#K^3]=v+Ɓ,h,ËR+KRBc*Xbt*f %?g棂BxM9(1q-;ŎTHnQ;H)92J TQH "E(bR]V|#ѻ!oԉjb ;qMdžO!ϘjYWڄ)r `0 w@oc RcTNV5G"ӉTXۏ3yL&gHJHSTs O^uB HMAǠA\FsQ'YQB;r@5%in^ O޺)DPkD5*v y~*aQ(/9O:䯲BMP E*GZ_+tGs׽%u`)Σ΄A#7ųӓ)o,=eJ(:KcP7v@}O8+)C}0N̤ЏnQE*1:T! F}kK8lz6`hv~+-r 1 Рw٤P@m唑'XU+ae|e^Q,HLBnQ!q}\ +u{*| T5F%C!8PCLBrΛ non75C#Xe$?Qv )7V +.?P2APYxblq-}A@>^2ɸi:M$%ڢ[+䭓 X^CKs+ M9dboj>'רnsޔj Rf]IƶB{6ȵ֡[IR 5/ `suk\N' s Ҳʣu{VhD؃"e'VOܖЃJݥWv&2 X]0WذOW>Q`5RE%(/B1cwjO Z7$4ֱ% i[ӚP9A#^nC/Ǻ%'n6B=vjV}=7.4 ueP8ż%VA&]): 1CsH/}J!0\$}Tm,emεo `Wiõž02g`aq;۴sFMOn~xOW>uҭ+COn~8o|0LvNv^E)׊u^ճٌT c֖.c]ªudOrh\U6ފ]Gc@L%Ґ_M>eZ%(\*hLB5uKk2WAz$K_W7RRy8vIAi1k*&p9rS\-'L^ (%Р=bDyL§& iXBvغw_ݕ.xF`#-HǹϞ6xL D]mT +IB|;!㺰@PgXzFMӢ[IwWnwoM;w轷ja9tǟ♓ y7p n!UT"1>rYAlӆU-GpQj=mڔ&!e\gF4_9r}3-MРs{KCRbko3#M\{Wvl&7t7^bbK}]Khs.0Bތz$X([BK j#\yWb( [54f90GCǼiG#wH33xe0"\W pB*@ 㲱k98$ JTgvxN cR==bbY'lb{M~GN'GDȻh[H@IaiE,\L;&w¼,Q`04TZhWI04.s `Ž_|qAfQ2 4;FV F7$K@5n萋Mj mFvnfl0仹xerp_ro]t+o]~߰7''zdvXi50W'TId<{V sTFu;osXbQ~ I \5F;$}T 4J+t|\um􄤒5@9SuP8&/!ށ;vsǒ{LޥD5*~  $#d輨yv6a20K'<%`T]}kg)w XKZ j rXlw<?s>nq,,ݭTY [^E:&$k׮ U`s5myg0qG~n=с'efKDDZAZĨP:j0qu˖O2%0frp `br2-Rahﵥ1we|ѧ r)BT{7eG]rPDDe[= Sޔj!yz i[h[W.{N;rC`,6lS?J[xVq[z0 ׻z/̭ =X 56xyQTsuuR^?Ѷ0dއw(x $<'^J+/43J5xJDAPA)N2*P '#mgPŪQ./F):XSfVE%'ìP)cyqD3{͛3Rx('8#*]\Fz@1c9L E Qj0󰀻+/9i5`$H˨sۨ~,;+ @(|zwQ]ZW݃-d黳a;I,U#-UM_1 ',ebVQ>#J](EpTQ/{8:טbnRaVX IDATC1 fnep'Um5o=zAQM.Ҭ5bԏ20~\/! l۴x椅A;pVcO̎ٓ1i DK(ߔiF䕡KTHT%shN,4ZFT(5t5&XQ^U|P]Jh9 IJ ]:ΨbadRPGB.:zsns.Nm koV*Vrx@jc _1`4Q c T,7 y|hfگ``0H0aT 5Z۵=6)~0 OxvkQ_rvK}'[H\B{ .̈XqP0<9rU%mNaGшp Ob&u^{Z 屳Ы"dJFz9U-ROɍ+5޳֔0Uh~Zj2+{@)f &ϊ-K;NVBS*YlG'iv_Յ槛e]{LNg3 {qw uOy#Y' =YvpNuHmG|䗎Z=2Scؔ(u9f)0.a0=ce1Ҕ>ff6 6oQPa?kUç?1]X~._~tPŵqw>in/(+n]t2TO<X>ߺre~ ul۵tx*˧ckL̫~FPQvbZ,/n(n?ST+n]tg*! {]xOudt%6em/ Om?DwkY .aFln,V!ZWu=͌z~CQEL;W!ՇQ.tꪉ/ yXy.o1;|.̛k1K^Fs v=TM6CByGvB0v[ GX~X j] PEOD%ЕOPo.SM0 ;AB(1޺!_FxE7;]!s.Yغwk?ߗ_x:9J9tɣx]~;:1*NAu&gO|Ƴ?1To0B鿼|܉#k֬ٵtxϡcM(E÷M;w?yJ/zZmZ5^ *.9ΩoC?}f;_~K 7_c?=Rlsخ/ sǝ/90wg  zA I]TJB,wy\Mʑ$A;16|00%PF EpKi%H׿ܳ͡beHPP;\eUe:7JSdDRF\G_8BE  G_~` -܉#ЧVF'v-f $xB]#:Tbܺw_vt|rC>׮ \jɓl⊚*>ՉE/njY}}uVgAlGP%BREv38It)v/f k6zۨW{Wys禝)߹G./F5s&eES^;j;3}m{Cݑ{ʍ /y^sCeSoA\^>}9⮥O}yaqNˇ~æ]z5,Kש2d|\|V@EDu蝮B Ż=ԫupܻwhSRBc2!/ E19x[ ꡣk+g|Ơ̶AcW~ӗorZ5nop]+isun Ч$<~UJ#{Nį=<8;],=ɓȘI I| 1 0 :zUN F;kO:Z Bر?Au6L\Z~iWS/=qίKL=zwOOswWn_^>}yt0Gjv.j-ׅō.=hX]wB];|xjo AqWCRjsxPֽn\8߽ՊFU˯_/qO}.9 ?ps]vv}_vϡcO3M~΢vCo]t2} ~spyG>pzMX~=܉#TtNn9_'|]"|ge5vHsP:I* t|rC 9asn]ԇv|^Y>b{eJ,t(,nĉ%W]y\ !pp2,s>#K]`b wAP-M,,\j.ϮmlK 3O)8 w( {g%EIpšȢ7Xx=/Ĺ,KJSJ:J2LL?Nc኶݁Vhc]x٩z-BGWu[8ZWOCֽܷ$E)$i)2oFw/{_bbu]!;1tQ24o^e;]H{͇ˑF.TDP%!|ryU.:PBΞvy=(D"_3:Οb|K{XfAoYH ËjQPY޽ {}-Vai s{QjN h[n\8wlCNK/w}o4 V{$b_@&P t;'ң3 ЌVӕ8AQ! n2ty)Kc~(e@THaމPwLRX SΛXlI0m BmiP 1DlA`>ia𼚂FnbZK 8m3䅍+Z{=׬a:P{Q~qxTa Ddsc(.+(O6|;3R⋜.[ Kub>{so$rU-Jq^O9[|}^M%MA.Ǎ ܼgƵNHޮC- jںw_RV͢ӛC6V II9ϖr,WB6ēe8&A'멒BUnbrEe/j ДJLx0AӰ~ U [Kf:TN^Bur.ħgjN `'‘ ߗ"0%P%T?j\Foⴹ;7Pߋиt@AJ(Rl픊haq#R UCvLNDoɣt+'QxPkխ{Eisi l♓&~`i}Ϝ`uz5q!񕀊ݕۨfAM>gNR\W}FX_NCKjϮ+DNٽ_"Bm/Wa낖}o`9L Ejbrv:Esõ sUwa-)Bʪt]eB0^iVP1Am#E}IHiZN Pnf᤻i H&#SgϘIi7}7KdbJO,vTJ5 ]0v%dC (s/%o}#ɣ@L7q;3@5LިgxL= +VuOff[9#z|Uӣ O?]K)"<ʮgO|[2cG^RϐsQY!>gPԝEqiW11 ҉y,Ki"#)J+_[R]ԅU&Q紙3ꊄASWzwAC, 3:5ìYE=*v,9uUzAt}3ڒ*ĭ.WW`!%ָ@Q|b&) Al+8< 1ɳ--{=Q&|([.\ ^^$H{o78fmkga߅ō.=dPU0X1^>Z Dzr))υ]K)o-R7T6BPy ;qӕOcmϜ l{C8.z+RĻAO,T Q/\ ^(@i@ ,)b(i0%_P(, Pl>H5 W҄{GFJLO&#qD1x7 Q5*d9@ 0qz"*ơ ƂҡXZ ,PoCě6A\TQwt޼4[K K2OGTd{¢bH"R ;mWYj%$^ؚl5: BeANldTI}$s2)e՞?!->a.wWnGEҮeT2&!R97)7w݌*YpXF]Z5oD:Hs7 >~CǞ{]~'nOʲ$˸Ze]REl{ !N5-ªҼ@Ld E1R|T-rOX䏅O'{o] ;J5~ᘻf͚{[Q:JjQ# :òSJ:3kF@ԋNQa]}_K,Z:|y4kIJj4`Ea(E1PfKP+dΰ8X\4x)#PG GPQQ !%T&Jr+/5/߻@7I?<E6ksǥ|^uIHZ(5DGvϢNɸO)ڔ/jQtסfڕVP&#(kR5a`n 5 )#iԶ5;%}?  :?Jw\Xܸ%֕KfǟJEioنzJG4NcR[iʥht=}r>⨺#P\wWn;qO>"}tyJKÝ!HPF<8sAqrl+Rg૷]8S,|qڄ',q,Iԣ "h&uk0I/|/b'D8"2YygKoY`#b.!*I`)3FzJND75Zg0EgE &F^":OMi?~y5 z?gNʨ~hۨӼ6)Uʭ{J> Q\*ƥ~:Z.޲ Fϐ;EgSv8;rPb'cԙ8V+\Ys'rަc|^_µGRfl@ʕi0mAW5h$Hi~G@/hed"t4gIVtS+\_:]bs6CtAx|uC4s[=Ͳ_G[wd.!\ \2l-E{_ fk& ܱBKFwp*BҾ hrA/Z)EʣMLǮGQ{LJHws J % YNG~\ ij3jR{=Qy#~uI˱ qϜ=;.,* Qɍ ܟ%m׮Gm݇*oJY<,'r \ZuTS[ɨro]tđ5k֜{5iu2Pvw[=40Q:uE;|׼c@/OxOa8xH2Rbj Ij 0(]]Ѽȍ*ORTc9?}q^|k,!O >Sj ȓh=8LU|=t#g;Ng/\1x8F2`$G&Ofg@;? JjP7&ǪW *[A^F]mܪ幛Z]CB!4NAPAU ]䒐@ܿګX^hDR'8@,|ޔF$tP>`sf'uS*ǽ+'+iC65G$noW<|llYULmDlYJłH!7>7П72Wέ{Hjtbݚ%|+ښťBO}e杛ח_xCR8Gv+t;d77k\=D\cbhuCJM;wP~I}џanuΎ lT:,Mz艫Pi(3*Q h=L5؞7dNJj)6zfHb;}1ѼʮvG <;?5K\\uuė+ M!PzoAN:; [W/?DU޹.#b*}i&ʛ\.Z M;w/#Ƒr(WP_&r,ysK(.rf݃ x$:fJqJHi=tO}o]o,}#g" 2:km̂@| S6 r#?πbz=!Sn)Lv)G@ Ut%̽/T(#.{Es~% 7<_: ,"N򃥵<b;lÜzw7(o<&q٫>A%P\>z yHCQ G *;%DzdDa~h0A1 x{SV*wLNs8?X~}aqe*A7_vv߹y݋ciw>u>^s.9*n:v↟z UZ:ї]PucWoF)ov)=:B![vMp{9"{fo}砗3GOvoS/*h*/9 ԍNa?W:g_H-0JuUw-^Xx8)/$Mǹ,?*,[W>CArlje7z'5f'x{*jOI*P9<~ 7LnIu K@&讱)Fu]Ft@P*Bg\!0 VH۸Y00eFtxJHꛉ> 7TQ 1OXsw:ypt'g(|!*]^ )eƅy@͉f\gNhT9 Q G#?X~z(w>X~֕Kzǟ~`).[,ϡc.=j׽vvQehbN|ﻖS#܉#h]q<$cϡc6ϓ8Uoƅ~|.l{xSrm|:HV[;pnGo??=R7ѥQ)sQbpķ{]%8|ʥVJu<,)TA0*U{'~%c W@eҒ\F_셗YgxW ;,P:Ļ"  &) =Ty zܡI;(]E {hG7m=2O⛫DwPӤSd$1XzkZ2)qУ^Pw~oفzr2:ID ?R:ft)-ԙrzSimД!ouOyLޘGn]<Q=ܺz^#WQ+Ϟ?1kZW"FZXϢ]ϼϝ~oXZ17j,P%뮥TtߋgN^^>MUB~=Jq9^^)LA2P9 5]'A޹yuRk ȳ 1hOLIG(Z4BQ"ɫcn՞['{Pq5:b 3HOMQjyE:2w.:QEc^Řb ur=}K+7KUmRO[԰(}Ps*Xo= s<0%nF̘J(=%<JP21V>U:!)ԦMQWoO$Ûa,J67*O5&{x搰LQy~XjIbEh O / L6^@*M^Љ0Sח_x:10ZS(:ݳǍ Jw~梏 n]o,:*}u>J{23-۞8E#WQz̾˧u|Fy>wn^އV?Nܑ^ <;L77V`Ra RU9p)t+k^%EUO]( ^nЉP %޼t)'g ILD)IDqo{峣C1+ jG̲J(a ~A+QrbT%ܣE$̘*׈ks)PjvAmH>^nM-oYʔ9[`0 )q3M ]0R>7niW+KALWN{DɧۈºM;wS.BgNn]xH<$=cM/9xl{0 r˧.Kr5>!zqt(x/,\(d%h)"AyX@0|u5Yi/b^2/c!݁ɫ-*< uJHAGEzrŸG4$AEhjBPp4 `B4YVj`0EefqwNt`3r'cG_//~[ߐQ.9I)Ղ0>N9w∼-Oy;"V^V i~*ܖJ)5㯢RߺrO١0FDW*6^~  3~:6/5]:lyQ<\g&EIܠ%dtM#` (|+QB gtY+700Hq3MYx˅ΐS~q-^ 5-Ãbl29^ADSۀƜƅ/<q(;7?s/Gh.{7.sE-OsŻ+7ly&,3KܼΩtNj7UW@;ZsӹRrBhuT *a(PQ*+ A(֥҂Q,\&-6 )7oib'kAI9yqۂ&9XH'l %MsIq}_mj]edoK-ӳ E{(phQQꘫj?Ne2U+업!)!m\ o~/:^o/Ds DHf$ [𻝱"vPoڱ{`æ_ܰi*[W.}On]tB$.Dv<78%':oݻ~߾veaqֽoٶiNyӑ']x -ԃ;۰w<ܼ~go]tʥq[ ]z~ܸp~|kgiE77~wWVhQQj]YG0X/]w%cxs% S>lE6elqތ\Y9L7j6QUDQ AO)a9̠MVڞ]VnP_/}zBTR"~c. Jwbf!K> 2!vaW"*N ٣Ɔ'3jT'Wﬢ.0ji44AQ?b`!%_گ~?$9tum 7Ee8xe.l4 KN9:Uz=/2e|{u/kx4A/(E5GX: ܼPx@5 21 #kƟ'<;n'E/Km8fYPm 7`0*N.s#LU'~KQD.y$ՠ.UVyzIr˲ )T1UVxz^)I ^CI(UK~MQdD!XBPE?s)4&Py hu+!+Pob*KOT:}zYP =EQ^N-6 O#x5Tf$FQTU.AWxN q`h6O}uuոa@1 G[g]uOc:wJ lHղX3%FE!]]]_i:oh(9Y*DT1TJ0Uit+%Fg:e42 Ve uK atf*Wl\՘0S }P'TmkӘCOE [ [\JAk;xg)ɣK6Ij;7u^KagXnoVS2\B}cHQz|7 0@M'tMm=-Vʘ[௔jsm8(!A"L$Rmz^^ A 9PP̠C"yDJ,'n^ddYJȮ`"􍎝zA? bº @Q3+ŒƧ("9!uh7*PHMN<f* sP8ƼnAEHwAu:-*NRao(a@sbdrˠZrT_}ߺ`0Lys)qGʡ׃\,SE]KӅK.Ԓ҇O`Rᬕ( U;2ƛͥ"0F)ZLƚqPLkm|k@KB+aP4}-y3:0g QD_σ )~MU{\:UmĺR (Jd|p޵УްvsW%lF!C- wely/4 ؑx|51㦝wWnW`0*]QN($ʔ['U$YA\X|B( >D8k,Fw]:DǘGDk0*k$.7WVpR# e/P[Fb[(0(y=.5:)xWyC,8ʕ9_aB* Ak+AB2hTL |y`0 \$ 3.(`h )]MTE4,F,Tnw/wk#Დ"m1XE . Gtf`^E̹%㚔Ww((nw IDATS7y@9w˥|ޥеBkcPЕd\fj)gž8{d4 C;Mo`0zrX0 )s_% $'FHch`~7 ~qʕ ӊm(}afu)*!_;Hօ3f}"/^&˄5 Rg 5avY^WRД.}b#*2VL9g % 3+wJOe)!(vr'5 ja/iXXAѡt]]]f{*,G}s\0%=\K:0k|y۞GA(jeo"%2vˡAd q~T:fsϕ[1 x`ao,d!~q_ix'lϞ x1M_  @E,sȭZr0a!UKZ1㏷!Uxưúzf /Wbl'd1t65 c~ RZWkETL ruN. Jf_ܳuvCLq:x0%<'HR[TI Vv.ۼ -Њ{/aXo`+Hb=9O^il7w/w uH@ߍH '[RK0PM+K(MQ(a)uMUx(>FuePCT8Pkο/E TWc:֩oS*:72iEŋ6aϋF1jp R v062ңx0jN;Dv wn^[ߘ϶ t-˂;W\քXVj=V=ar aS m^@傣֋&?oc4ԗwWn߸p~0 &yo.E;WrWKN$߅‹PTzJ+_WK:m0;(Wdt?B`Q >Bt-)ǶkҦK1mƥ;$ /:~zM7m4%jzNeh!^JΊso曹M"$&ŀ+j$WSK j_Ů!0 _L9x%=2q6e!fa@ ۰Yf*Z4r`0Lya#j#EXͺ%"QB2rIW'N猰R`v%,G͗ވɆ`@w Ǫa^m7 dh]O')\Bͩ&]ۋwt(u>WX2v#d4D(N\QuiVѬ_~$lcl4=èbN hO܀j$E[FDpDDQǪSn|KU a a-`0CoF}fxqir/fyuDXtCE du98D4͛7>1"blƗ: b6$e\% !˄U+r(0:IlO 'EJX#SR(Zz@#FJO C"ލ(<[ ᕟnNjFV(y[3+A0[mw"6ta#`0L |d&d\ЭPEwdA. #L Y̿$wM$m5W ؒQ㦨4\-5e+3QVWWBK0^e3b4Ou k;{0ޑ^rQ v%?PUgO?zi1c~h;~7tlM'r!" ]2 _ٸY_+#`5-J{MIQbJ)^c% y<&4Φ~^qYXGaPWIe2:ֻl'N҂ΗJcO#8KFP\2j(Y[R?) &ܨr=ZԾ&AvenR&`_Wo +!K"e5HWI^6׍RuL$817ðXy8`W8 a0 6C'~[?ܜ{ _"e(; aRLaNhs?tKegxv^ArPY/)Sfdv5uѱhTۙ*F썭גb뤃] i I~t=T<'KuO7W6ͅڶ|Yw6 (w.ja2\zX@$|y7VKwQ#$,;7Jǂs*^X <R)4W3Bd ~m}@d7\QIC^M)Jm)a/հ Qg cyGuT F* `=eن ˨s`o2߶v_zwraO??K& _什0eP1g )EFpKZ%Ԭ.]9P!?$1y[!LJ hYrfu$a5w[j.u\=MO\ `T.E BۇI)TQ[Z2 k(F2HɘeFsgtxkEX.f2\rѲ-eJۍd“9|ZP9n^!Ӊ sÜt[ز /h6u|eÎ? a T+(EIޙ7c)|l93mۜګJ@B+y#GE]:oQdl)FmC} Z5lv!ESc\3cra(SQ`bRGQg4b5R%cY#L3xt6 (W"-&_[Ϳ[<ո_{ѭ?/gC`(&ΝeQ`mF4:IE$lI7X;\l&!LL7]I3Ѿ :/a6͌ ~hFjEHd|?Agc,!X/䦔 rb rHAɂ)$ه씐sEo9y]&-td.vc,!m=wok۾7w, ~H퉗$aw!u6"=OdOB#kS@LR8x( FHJZWH:#%ҙNWFýa,hwP<)zP,2Yr)4d`Tx ;HODN5@b{s$A2;#S8GoPVD xp\9^NR9kQ[nFĊgyRtcvuC"'8̉I 9DM\U4YZ4N>yÎG|WK_ꆝ{9Qn #Fj!IfxFk366̱(YTCbU)EwQ>.Ɛ5JZZ^HY+195v|v.']-0jsQ$8>gK axH9ˑ آ_tAF){Քz"3jUע1Eƕ y9WC C=I{G|=k09 B u.ݚG3Ҍi h ;0cNmI$7sc' `;$'EHAb1hhIhZԩSU]3NZZ[J0*"x +f?=aslw,X2 TR;W$p f(zLKB@'ڐvՄfP]g`wuu¬NT'FD#Ok ,e;Fs. ]h9 1sDk<&<3FYU6JԔ֑])Ei1q8 r$;puFH3ćvm"ٯ OK: xR(EP7 ExXޓE#Ȣ1;m K$0ZSNVwٺʎCDs @)5Ej U\qE̹f 8=)Тv!as;RUO S [;,t1sh0Q'Xˆ@J1MBT)Nt'8Yk:^dl.radOnM3=sXOM%.`9%H%x7:LY=}fkD7 vb"9RԞۛQ)B}Yg>=_SU@@C#&H IDAT25.$o̾p%<$v,@N>#o.}Ы:%V,1Cؚg)_!h`6>73d"敉er 2!+o1rsDqQ3 KS]2ZQ7qԕڗ<Y׾>–>/TpqJ[gqq~`1BNfQtU|WW#'Nב9N9Y*M谳x  xW *NQ3# B ;O[P3r2 XdT,MV2z:P>H| ƘCiuϞɯ4!iQc|@ Vbΐ`hp)x&8W%1w|g "ED%-eԄy݋Jع&7b-yzyJsiaa+!Bȗ46(ַΛz t)6חt_6c;wh3$[nS'd).TiRH'Sr"DQOTvnx6wN6;;|մY7-fPŅ1 oiQ >*#p & uzT{R͐`n^W,|w.-_;k'0lisur-]hzVf mtoTjKBjhU:ņiF|'-a^f֛fۣ\ I!1o!tW╴qAIޗ*]c&< 5'`#XB?S ڷziƌӧ_5W1ti[w{qpCL7  ǖV& J-D % ×o] T" ojAut+m+9F66 k;{A֪`F(Z>Hͥo'-4SHfny}-K*md,\4Uڂm/s ADH܀P;EUAGsy^NJʵ g~NJ ۹SN@@ꐹeSL3[ 6,#!up2}gY!f}Xt4=e+{<_o=TtgtZ˩2+.bb(Kxw#kjKDiuPU ;HYT(m'@z_Ĵ,]LHa?fRs|Tk *=i SkV2d ~o Q.ZG8’ hb¤Ĩ(E(dil6$mOe "hoHSâĐ&*Ix :92MX7Q6qY;@iH]*z7s!}k61:P* p I3}"=N|N 9f$򙝗Kڲ9]s-M6čU}x-\nmCywYS};N+ zq=TJ!rX ece+*0)'$=朤Dv,$j ;h6/ui#H>!Ñ_VDm*w#W!-pbZ"ybmrk18Mgw&{vf$NV;C6dǢ2Qm!CRzo+nz[^,!ZQDO y)o_u5ϴT%:A3 ,Xa"7;rϾz{,YQ6̋=ૻoҿo]5o(/'_g8x9 CDq= [E8_E~\5TZ,Fi9'wc+w.\;iXL$aE|"6 MԳPFأ@F\'7w~7b_FLgf3<eLlDxϋtc[Ve39,~.J)ى~mDZvr@@@v{0 [g/Yб&)[W)nni:Eg]|}=;Ni~v>{CL7 CRfV-MaCQWDUV>m=!Q{I ~P1 mV任-IJ  8cG]Is1F6ҍc*ɪIERODΠ$0P=~ע*AUi\xh=WU^ 3*3[RTox80IS)&|mSM[}he J/lesۺ&oޟb\לwRVE"pyWw?vyzǣ/DZ@@@ jCEh, l`T6V!!OQM(:a1@eipc=7*S\Rc,BU'ZК`!o9R+Y"[;ҸNR4 >lF =/r@(J d/F'+l'22 KG9,z3mu.mAy4 $L[TkBN|M!cim$OS9GD&F$]N19AO@|U4bִ9\$=wJ!&KVNm6őՙHO бu5V 7{cԁͭjce@ m4naPH Vl]@>EK޳bJmsB.+jKw{s~\HîO<8Fnq@<8e׺esmS Ah>G)˥b;6_kbR}Ve1*,)"Fj>xrNF&)qAm)BIkwQmhkjf 8` WXU5)`mW@HSy,J80jdd' d> E辤c`2M)J~ke[TeY`!u//`PЮ2O33#3FL([i_*L5` :Vn,_#q ڋr?R+3jtO .?=84L.)ݫyyM?vlYN@@nQ)ir-%)4J8; Ļ=qɹ&-g O(oSA,),9> lJl:=zzX"xGm"%;в uk*A/ ZIT1pŅl$zjwH%H\o!D!e =ul UPM1ȼ3'yT uV_غD/i/Fl,_|m-_9[,#%kBW첁E\?}-۴pt7l 6~S ԟIk) RO o1,ԼĤ "7,jz7uF>!l҆ &kjfTe qu+LJ|WT+8v+>2^g#$Ґ,Y+qMN/on&(31d77mz> }ÂmC` S< TOTuM إ8`nf?BA̻ p4&R}v2pvX ݬ݀ZFs}i]-Ac8Em]#5/0\nPp\jp_* ^vx 姴< %]j F{Cvm^^S?Rb``ۆ)cCTvbHצyOr8wa@摙HVWYgMnF"i@8^'٨|^%:Q0J}Mo.fV'2_λFQ=':on  3yBjVE/F f,\@0lj?O[Y±M#YT`skȑ=xE6 s'/XfTBm틮^ Z*":ٽ5Hpƕ0%t_sx8pdQ,)̩T V@\7QDWVWt#(& oTgEP@f82 9`R(WJxU)nGkYb0ې43/հXL%x>!M6-`tn1*VJ49ڷ^5,F"hZM`l.Քb7BfD(7nɷNQSֶiG:#lGJØV.T sKr\ \36,uF'n6 amKSsiH*DR`sT;g/{ԖtL`$tARRM)lUUpYEڳcm}❕Csjg|ć?! 錫}Rtfn۽qޣ#7 fAh:C 3j(kLDICt|ʯ*f.Fci`1AmKZtS%8rT2MY@UId 00'8g- =- x2OR kAQ` N#XUH>/ +'ȷ1`El.:7hNHO|gs3Ɗoüi\ >|,)CiS; jIHKTj;eguE5 NxMn i'v$>LD߉j2،/Jӷވusgf0gJQZޝ/t+$h7IesJcm\ ŨA سRe8"l\.=M T(!#R#U mPY `b~Nu* K7u>Jc pa1Ȣ3n!''qsӒܞ<кsķo<.kn<:8{IYU)S'ağ?yu=k1<@A`s9D"[Gxr;kͅuo*6"9Q`S=&9H|zu"ƱNrePFql.Lj\Lk+" F>LԚ?6WJ[jlZАy1z(`+aDWfLHRҶ8_Ωes`5nH &;{)k *[;i x]Ϯi,?Q9'qٯg|u|vMi*8C۷rzr]vxh8=?l IDAT$o ˿`CN XЩDlRdl`GGAE\ϥeM9\Nʵҫ*jWhZ\ lntDUޛ#9IzQtq"mØ{sUv[J1UX`=kkAUzJun2b(ЪXj@hlhig6 !X! jR̐]a%ڗ]¤r{%c.Sx'g\Ǎn[MRqFOyJ|ob8cZt 4!@mҘZEi]GBDa.E):˪!%|81Z`YNK.8D;TFAk !Y{!bu`aTLH:7thA%]T{61s_/6E)өҖ &'W1@[4'7"VS"P`sFjhh\Web0ӥ*@ -58dsS# pH u*-07 t>ݟ3nN?B<ܙ=r̞̞Ŗ&N U#6[ w ?ۻȑl|zp$"HV'uLel՚Uʜ-8\,x`'q㴅j͵. J<}#HFY@ 7 )~]%5f&dTUI $櫀PeAu7Ha$V\Րå3|'U#!T 7zkkAèqR 捀vX)v@XJS\Sh_Qҟȹ"Z|1Xzȓ9?C8<'w^H"9JY઩9RIG08̌IOq]|ↁ!L21WQo(L ~>V- bwv°ڥ]@t1ZN+F.J͚^-TN;ab+gYx <%5}i*r8gH3W׼C_%Jϝq-)XPQZ:ٿx}wݶHg =/xщ-Ձ?fٮ"ENB ox饋g q*DcxON>gӃ돌vn@X-VB!T R son$ {byfhE@DbpW0U=LTo}HWyK{{02hf7P(T~PXQ+\4x-!7"ac3$-Se ,ʽ`Qk72ڳ^]w7IV+{T # \n-+V\, Pq*VIdniJU-z*6WKk>KVn`paxͭYĉ=3 B p`jrhײG֦Dŭش&֗Ι~ɴb$JΓGcs5,ƂYo|w?:rd=bM@0>z\`2+Ū(*;h g!I2J Vw$U(i,T%`l{1`C\UA@ bsU瑯* xQK r40BpÄVe,p<H@ʗZaeSY+e@$X"q@,>En,Z*0j)Zyy:9D<>Yh,E̗DO ;XaPɴФ}} f[$v- ! 1 *lUlgCqqIsTSK1's q1_amB_>>6h7٥OŎ9 OG4i[E86܉v[d\\q3mPVY8Hd3/f1&) s8IBT ;d0%x(Y(gzR\* *_Rqk>Wv?!UMSFW.dK%%cVBx^7Ca@lVv-/a)h `:.$z7Wc[N$aviۦK"Y\e;JI\UbHO`[߹ t#l?;qP, CuԄel*ӍZx 5F+IPRLzz3(Q# 2=P@TTFsShi)ܢV=ITĞWQ\&Gk#ձ>t^ x5` ^CʦkaRN eWDc1|̛(iMhPb-?}v7zzKU?[.<xÕco]6<~FOY@lθfuJKO]w:zԗ淞0qoVx@+HM+u֤ [fkNi[4ev*=j^ I\(U2 H4L_vp: ][t=io[iҋɚGHe,"eW=0s3ɱ,+ՑI:sw蚊m(\ǬCۋ`ő8BDOFGGDxJ?2i')p2|V/9lc` YuY:WJQc<;# }%T.őF|.4Kjs.mSTѣǦ*N\>H &\_*P\Ir{pZb(Enw_x40޽X19ap|V`cUY sn9d}K bHUOU 3RB3 [.2&AZ lQOR1>l*%<p$`[W--RK.ZN|ḀQmB F1U$'59D2 Ā RS*W5i0-,$wJ6jڇ`4Rȓ*r \2F-0mFhI+Ծ-ijCsl/jLjƃNu#~h!7ΘtEookqr׬毮G:rw|ƽ{9Qo/}MkZ+fؑ[{>pC[;N7O\θ=bc]MO(7<ԽG86`@r1Ęas119aԐj+>$zXr"+cZYr&hJAPiH+C%\؜i 6!z@k4,3^ps7W^_v1ăO ( sR\=X> .f$X,5>#9νU 9ȕ3PFGKSAd2 w_1P6*9-wS_hggY>7' 1_0'-.Xl{F.E27CFPvEg-l[dEnSW?re CÏ|Η7|w5+:rO?a-ÖY9~cG\8ި3[FzrƥK^0ia\.Ȯpn@JTiMI*9JF|CSB FA&7*/lj3:TNu@.|>Ph8g;i+9<;|?|]E*o6;rL+#^ dJðn/R珀򱭽pFTt;uOk{t] p Bo ZU0 H@a&R ViH0?KFL#!Jj6\AF!%#=M'\vhbhx >?K<e Xc &|.VڒP%$R[.S2Z7Ni堵ch' y{K`P\Gj⭊P o)Ħ(qݶ@eI^0B !B@F`uIkSh'L @CFB'BNT֙2zqu/|% *FӻzU49*M +@mcn 'G[#R ."n} &FsmcО)\}!oU d4ri(aFFF0A .Pi}mcz?v:ΛzQK]O[>RQ]__/|n! ܓd-UFöm|ޭb[1[(DJq^Ѝmu~qdH ip0@lWQ0l]ROG -~]!ôYEU0xkXJ}Raݐ=/\]k nN[՚ڕ&:Hh$ҦESn#/ʚJ"B ޲|Y9H{2NxtIgsEfl@S6J$-V2ߘg9> E!*E\j WPqy1pZ5"Mfs]Z\+\*Nl4SI&#,!bsuA`s҆dw67qԕVt3y'EܵxQN/^v}EJ1gżwrŜ(Vvyj.tutm{w;&j%PXfwTo\7ȑv?M$ Vʈ{ C4*h2ųs`Z,7̉FE$G[RD\ͩx*<։DJkJbqMWƞOH7Vm26t܄y ?66׆XIe2q(༓ -vJx\TUYmּe7ra# Z6WږpeBMl.fU%$eR]nRzR@ dsamŷiϱ ln@u 0LP>x; BmϜt$z.]|9?=笘kݶޭk>wmSȵiR*X 3]f{?w>QW4YtSw;y?C Ėb@& -*HbRlH&;LG@$AdATFZn0+!܊V*2w8Q8DeO n\ r~e ,NKKbV.N\V P@1d^F;phƆup@\gc3rzg*߉h""gT؁rrn q>_btV5;ߑEj_SpLƝgnӄm3[<^JTp2(ՖKHځ齖f|V0rl+۱8 ~@1 $̿p%xsr7'룻r+/Ƿ ;h笘/[h/G|ޟ}Ǜ[=3*!-oƕBܾ훷Ӝ<ܿyc?zؑcVcsH\-YSnj->`0e~G7^M;5~!'À*='@2Ϭvݍ_c"Ls*mIGgi!&"ގ\=#}b 65<2dxhop%.j(4xMM/0ꡡGw^Qro|w}͍} ?t޻668Faw "qM76cG!9uֵw(wL=)θKO30cK:ǎV?錶E|~Ȯ7Gߌ-݀ZlrRM0'sH$Ir}*bX\"MZ5z(vᒗ&lyߌV c MB@Z*ڄLT\C ɢ0VyӴc:3ʔiׅFR7KlW"q*'ecJ҉NI'gy!Bug6K^WL>;:XKUReJ(L`B]+^}ֶ7Lv0 âsYfx:`/eKUzRT2:p [3RVR+jF #4N8V j/ki(4l?gnK6h\$bi'+gsEasɣC6P pd+ h]t֤}V0{\ɻ>{v^~tQs,WZ?k}W+qUp\v>/W7`s^~R[$ek@E<<4|燿c\xЫ]Gvştc`S s$桱*F9 0|`ٳhx (xn+\6\b*@Ū1ʦE6`#k>exX' I / R>Ql2p_*KUť;z#Rڼ=J466WBx]שrE[;IɃT!R2ڊ/Hhp6ډ)A9Ҵ 5d۝V%v<\kqi6VΕ ~PI2-r]TlOmY(bkiǃU7ǖ{JԻ/1JV sV* kׂŧkMڭ_t1)db1PU6dU52{q|V}V <ӌZ Y<+ VCJ? l 9#r"U7-lD1{T}s.zFY+G/m =eB~mJEԅT곫jF*G%PՖvJ̻4!WEĵ ̔fo)s)JB[ H9L~[;&ҪUgř7]|}w_u[r&"'I'+>;>ù6x}?~[ "OO~7v&S2- VA:amvoGF<'v?YApe0y0!H6$|s1$MB*M׈NjɩjO6E0'ޣ/>.9ڣiFp]dsrS]x8^3`e|soz|s`-hHˆ,c7.F #BښWC=X-NC:IH2'v)8"\FSdSL+&  nT@9ڇ RNJb$L0wL>߸($lvT)Qv %HN^ڄgж%Q@FH¹«PhXڶ)v4tęnS{=vG+k=ܞc8 [C53 J'X=__:re :7l<)wElҚ_饓65`ב]ODÉeS&XP&6ڕ 〸ZZT*U:`cb Jx-~< P0*E_1笪,QYJ% -i6òqڙQ`9 (Xw\,M*Fq1U ^vIb$*ʲeTbu[q=k'0/ R&>!"a'7u&xee'MYy>"aNJmvk )X?3JHk; `Tfo,Tkń܆D 1IQ9c9 Op jug5ϪOx^ONnywθtj{{tJ`Y7IF,ߡ+NodW 6sżgȾᘛbXh2CUHO] 6W 聼,6%Ԛ ؄'!kkTՊeה4]lXOy2HZzyvC\'V/ȅԁ̡Q4шg1 6X;لx!任S*YҔDS6W*Sp@gJ6\㠵p՘]YF$!-y@WɑUUU(MjkS_xU'kSJK^{;P 022D tDb1:pNrԼY=&<&ӧT> ^` }5s |by@@VllȗqT!Wɫ:IU]욕b'߽ocuД}#ҎzgALrmm[z2֫\~)߷h48E|G{)bCU&U#zOf2j Zą r&6#FŻb'odvx>-/A7^Hg4WkX.#y-N0~j3iNQ⛋V1c mI6*#L ÞJ t=D+B7*ΌladKua_7ic(-<»R#M=]մF:k'\N!1a8 yͼB"аb ;.(յğ=θlǿ,=58rhnsڮ֗_ܹ}=_R[3 9Hp'9r 'ts |;sϟ I3ԞZ{X}qln:ûӔZ-tju4Rm.LhҐԾ!e (L.J6H\e@OUոJ2f %bS3AT881XFC zjDeb3~Iˉ|6Ws@4fYFѝXFZm%N Ljp<_Z5r{WLS4fs}j6'_ɢhCS 't֦ՁQO* c꤯'þxcUQH{b4 ]q[IWi.+Ė7EP.ZQ@A&`K*,j=oj?i{[|W5WH\ing_1Q:X*9T$3wբ(1}jO'~ۊu_&'Gsًy Qoފ[/QA4'FBlϚUjxM]Wu)6*];_`ju@dxZ9 ax\QěB:OơX9+ p;TJ>՝Skh)eگ-6ю {T[\1yMd$Q&WnёA';Zh'Jb$_%2sgHa9DPRb\h,q!cߗx^R]EyB1䜣{٘K3.__{O!5嶯~_lq{Y7Fb([m\M=x[;8'tÛ͜lJ]8>??x\*1tlC8[bsQn=ˮ\ǰ5~$?쵲Or XTį< OUKdF}D nD26;"҆o@`$ `OUHG8iF-9.W¥AZH1 6e-' òDڌbe1%3ri˗N>H i3jش[鬈ÑD@Ak1 .{j?𶶳K^uu7w8*G7s`-2wwރ|\O՚yQyX=ݍw`'7 ==0C~к;$np,T'6ӚKHϲI,;FFF8ӏCjf-,_^F' 'b;Bǃ,|@6gTMciXhXvhL-yol*(dsGx < ,H\e Т~=%?{9N7z7g"^Q׬ZR:_nYH7Q&cv.nD*=թH`N)=~mZ89DO\vFR[Vnc^+kX^{- Hk͍!]D46K嫐<eOŹb/V._x^"S{\)WêkoE2V ?R8fU_)y1 Y71$8+Uwutq峍3.l#Ϟ|X8ʳ{ִz*I$Ga__}^FB}qS_bk͕ժ*s㲞^4/r–{g.Ӆ1[+W;] ZT,:JcaG.e oA LW01͒Ŧ=HŪk(c4zhN|]nlH*e(U7M33MX@IV206sq16mfG&-79JiFx˝V vs(w2+<٘>;=F#a|+"55! 6uы9Õ?fX)7u7i唆v aroSz%{ʭ0'- /HH\e ~a?L=e_{õi鎎=^8{#.2e."9 52:MWnٿu'׆\LD>H؇LX,K"O0ziN-fsE}F[Dⲋ{"pۚch73腌i}%MT*)>זXܖm*QUɔjC|os:V[B6qK<0; dlJ ^z"LL{B@4-v PFf\6faF.ৰ C]Xƒ:(mg-8g0{żqs|TU}1w|.ʭp7| bPH& ?Jnnm+[?[z6UFzZna޽ObtZk$M\;3geY嚒U6Pmb'0߾wTnG?+:V~8:鬮S 8QsCGOP\o5E?[qNQb`#]#+%mh(4,o;VY409*&w5 {hqg9ai^@u_`D6&|R*ᄴ ^T݅M*dsP-a9mr6VBm-ܬ>rD$4B~ 'zObb:JbS6u +!chKUT pE6am rk!piC$>TM]_kz7}ugY=t'W&4{n}TuTF|Ex'/hn+~? ~_G2jvU3.]ȭZZzxџұ A@1MQC+|5G% >WO>"Ů:fzrtD5TTlz ޽@A`㇏;{TV;%Pfsc27/z:*ygSo 53/aCքo+` /mؙiƬaro(-[4+7ta6WE([%pTֽ͓ؔ_KJ-N7҆R(Ln둡=W귡or-w2rC燻޿au<)7G#12O>'Ӗh}0-^)\MÑׁy V  c\/ꖗμ'܌;~7rCX<ӵ'JtܹŹK^,/|me>pMYK,MZ{2w-{oVK{WSCu (u[b~a%&u",-/;sL%L =P-Ӥ>IAnT߀E&Ӓ}WJr,5g/jd*/0d1{.Y+ C"Qs @-Yb[{Q.TGDSB/C퉲FG_%qH2A[|>ŝV\*F@ųvU5+ )n\f\ùfh x }&X+RgC*jlQ=d+Ralx'>qO٪@9-ECq g?]ZsU 'λ`BCմ>|ɤrg\y${^rr.Y+L~TX2Z\{o+v`!2y\.w߾ڤW3.a}lIރlpiKKg<{mW ; dxφQ$6ie*F`"]<22Zq7qҕ5T$% ^S4[}ȝO 5r deҦ[ A!,}be:D!ݸVQ_%Պ3=@!s;x;6|aԤ[ŭݯaPP WayPȏQa4.8ӮؙgrG1R{i—\YuNMjOʏAرaS[ǎ\VsK8/Vv4pxUxؾJO^8^y^W*N]1 Z^yͪIgǰ$ :Teq}Ae[ N ~xgs}P Le.x@QNGB.pr0mA _"7A=6IhWJ夼cbUYn34Cf\oЩ\sE$e <~nƅC BIdp'cf\)_-muwlr1l˖fmkPhXzG7xJU 9L:GvbcQO Rku֖,r'8dQK#&9rlhD'N7l  LaQ bRT&{7v$ve$)>&٢N|} ;L&Ŷ=,EʆTvZ;WϤr(MVV"*Y9ngiP@@žM]Umg5%7{~1I~1VYFrues' ?O\ Bw!g\.3y߶76mƌ6 3vru-ruӮhkq2rlD\ Xaf2`րXֵW@'{m`#bi`ZlM4(] 1/SYT}rvx{B$mhaR@ :ڸAKoXt*r]ѕTQBp1FGKζ9@e(YX_UiRi3fUT(iWvQmڴr&ŀfT&F[M'HdS.Hg#\ x@smkjeMuB __xo㋕\Gs 4$[y ǎY +I猋'kQ,C7龼W8rYJN=[ro<<@y,!]QeBpB>%3ڹt]4MꀈFk m'r1`%5qv8$ (5!U[PڀN@2#vxH4JWd 1m8\f7@Ƈ O`*$q M2+/W#2LehP\iü*@}aZ5F5JE4 k$-/J  д0ٔBZ$چvO7^ ՛¶|[@-C ͮWOMk_'^ӞHl:I2lhng\J%ӆ:JSokͩ8ʇ7ndҜqٿgmKtէQ{%q fUWWU{og{vH$@]Re־~dBզ x>i98$+#F$L׭nW=. &`9xNFqR}g 1H%GZ[F0n/Y^5L_X )6{;np I}PF"J(8+r Z аbZ>xBJ$&?u7Not6a]hb|.kC|]O9˭o'hN7"ULx[݇Ԯn}e [B;3嵕@ |^el+m&Xkj~V|`-bJJ5{2`.N Owwa|܅8^[9B}gk(xu.5Vsi>ҙzkףs9 ENf^Uѹ0"ŀbs 2+(NKĘ'2K-t?湓u';c$bÏ``mEWH9)/P6XOyﳽe,,xj{xs+=lk>3b߾ymgr~C\Z,x]I]L+_?}[o ̍3u{oOL-{" !ٟ.qi[d[]gy /(x6F{Ulxkxg+$?~кRiՄA'Dh*3EYvy/ǨzW'Bm%V,12Nlp&8XIh4N3xuQ$kr{mi K+BU.KM'<ͩ{PC3Hm? ֢q=ŏpyXg872I(*Z`掣)ppmgK Meq, IDAT#-)r`{ ?vw:dP%'tPTF\=<u`C@L?v9,+-/?U,1]ѰƲ겈\kk>+r3[asT/oUmžwS$\I h].]x\m*]k+vmntsKo{_? ?@DJ; ݃֗.mG.`ԔT鞟-.KP$XϞi2YtAE劬-c4 FR^tU`*d=1† vbE4>WDtDZ*$6 W 4Y_U;bI%RzJwW)WժDbeS5&Fc%Q:Z` ^Y.c;s:e}]?}_&dHvX@@;SµN@Jڴ{kshuS\c!< qO71~!4@.a, bCMC: u+iݲrxϦ9Pҹ$wѦN}O慽SXtAjEW_Dⲧ"*s%ֶ%ֶ5";ql8vß?#4ˮ,,5ɖKV_ n8*-ѳ6V#[Y_͔'voJO6b02X+Bƕw+ƒ Ly* O'=2Ť/ຏa.s:3 f ftPF&FO0@qE)G̥Z3&*֯52Ѻ>x\x,]{n#t3'*oY 0j69yV0oi1(ՠE~DXdJ O/<"']EZcUj׈v:≮qiЁLavVhwz5KpP77SZSC-Mϖǯ̨UGf `.4JG՞>߶?a0ɢƣ:b"޾Ц\xk7˸":wY;ݿ]?,x ÕnYʀ%Ӹbte$+' glmYƍKmџWLͤE;Ӽq>Sn^Vqӓ3WGfEusE,m| הk੄x9 o *:Y9zjS \kIVtneF| |ȣWX$.2pb/LXsPAi ]i F.SR a)ˬTS mKN|9)={\c5)U5;)_ϣ P=r*l~SmO$E2U36r<iX*akk*2j>kzp_EQ+Csiu1WT+4sWꃻ]rétg#T&?so\p7T;IѦWVwԎt OSi1M2 >0i(TJeA+~|m@+Tm{W"bRᯘ׭T-~U DzjCR°biPwxr݌W Fi9 O' }ۉdQ_= [}0^>w|>\cPWBs*L[z%}s>)UN~|xkt#Ã^J=LTE$@υ!Ȗr:NǑqu{77 (x$'(plE8ơ#O1 M4 m~lB>>R R#%4j -,9H` TWiiPlI}UۑdItSsjw[}2-Pk[UKŃDZ^=Z{ -,ߏS ~ .C,ԇ+CsuMDl.SyX6i58E5/cK8z ޙf%3*Io~e;&Gd˙ƮoQw\qkJ*>Z_j.oUP9/V=Es5 S4ZLs}z]auRp,|@攤5e`j7ygS@"k" %-QgIaaa4X.P>./H@a0PUمE!H )=U ^" "e_> 4*~eI* X'\SQ*66L n޵vfD/xKF([L<8v/YKFwU%k*aljg\LUXY¶rv\I[&r+@_Zƹɚdˎ6nߪ#ku XE{V%Z~c;RY2z䂐~%3̲pW\ $O `SkN[)Sioę;wl>%8l!m2y fY]boa^xXYklnȊ&ɚ IPN|T`?fNSH >c|MO[BעaE#{~MɎ;HO OK )[إMs 1+-CVtoGIMN1_] lE%J҄IJͽset,[O0c*TZCᱭycnBU9= 3<7JyjKK}h0 ,Lavba6r^JX|)X5\ 00U-7Q{b'2>zYe5[wd F)O*]r=L%/^|[kO,R@sХL" ŔȜ̦1v0ٿY{g'\9.1ҫJ)}⏎y2dzrPi\HDGk|b >z32F\aKꞮj%]4,yۙfa1jS1.>{䐡~vd3PHJˆޤVi`Nr;R҃t"evU Ǚrj \|Eدމh +BɌv&%!f?nbT_'P@%,7\uXÝ?@E `u]&`!'6BNMUhQt,og-FMI+uG,_ۥT3WӒֹA:gqݥ%.X!JK5ZDA=7~;*uz? g wͯg: F/, ^س}_E% @Ei~-UANӬ8{Ԩs2SCP/f0W#'/kW4Mآs7D -.p:' yfKePS] ĝ!)5C(zJ6$ \U# lZJ,Dl1UGj F Qŏm0j9(+$<XOCs:)jW$ UVr%'N@x;2hy﫞<怜W(ѢtTpƅ؇E2P~R\mnte:@eMi{\K?ߦ`\QIp-N_<JNu:K?]zȤweg{:)B_#z2]g{_iS{'4wlfjldph)۹幄qnp~ k@(I#npPEDdXU(6L|Wc\Oi|"eL"+tp|&Tďg39 0ND}kKS*V"aGFZ]- 7|S* lKYH%n!RUS@wG_$[r&Y'RsUpy팫A2W i2dqV֗>U߻Ip~y]|*wIMHe:v^Wt/V Ñ= p1=&*bPU/P\gϪ bK`/2##5k<EIcͥqͅ+7Z}2Q}]!rc!8X.K™I>da`Tl_Sp[",Fd xPM¹e|G\;?yT{d s@,Bu8a":ᚃͥ8[]5swb .n|>bO|p?ž^WVPͩK0ub:,P8{֖v<E1ܮ҆WG|&^eu_ⷈ븉#B7Df]߽qc5EڒWjU#f:m]lr0S#Y;/12ˡ ȉ_멮i$ГO=in^ n {Q ;de&@lutQᾁ˧ʭ| [ZsKu4قjMڢxIIIg N>`_v#ثQnQ+j=,!"QSRt]%KG}:yKnڵ}u۽Ɔ'_~S;uu2ӼMsc6W'bbPv)ûjG'&~vf@fT-sm l^OOo7ힻ!rdb:%:;M艩􌩮#V7Jj.\Eɷt4҄qOͪ/0T[Mg2=*R侤$* 9{]R:dGB gd07Oؒ4;ՔܭUԭaaQ<ӞGl.Mu8_: mdzDRfȝ' Ӣqrֻ>;=t(Eg)$&E.5@/',UH)}0ABmU{UlMDeq̍O.#̶^˥]sw~kor))/kgԬ,˥6=.2lk ӥ(W1!x̿~~ݩs7Jw5q䣵JY|>8SS?__ޅţ |mӮOxUttjRݚݗ0vߜ\عt՟R\ek.s-0l"s9"n1P[S>0D@@_㭶;Pr,f>ks¿ڔ4dl{x4LXRb,,,D:$ A`rbY|+ՖuOAO+z)}@ɹ!hZVUSZH姼FD5aA@aD`Q1ڑH5>ϥZT|-JH. +ҙװ]`mpd 5jJ*qJnvQi|` ^;esnK>za=?AV}qӜ܍q<)LĂk4_-%K6T>#DitM[!Ίwz6]W!-9rg۟ޅr3 w+;^r: F<8Hﵡ2E"p۾;|LRmQoT@K{ZW0#1"*:scNHi` 0QHx)@AQ9DRIcLp R.qW>xG@e?il-fp~P[R#-vJwަ~o_,",<*-/ky~{wYC^v 8kwUmEҥ(Wj0.wot YO쪉F]qѧ۳w-V-^͏~uz$.\?}]uժE.7sF"릦/֭sY$EMI^:uǣ'Fǩ._-YRS.^ Sms?͙"HX?x, = ;Jeb:KT{\/U RfWk9˧wU;0uCB-,,2euHV9+rUlKp* *#҆f4(vѾ"WA?A %Gi\JvfK]Lw5KY,,#tn;Rܾr-e:Y|)߼{ݕs72G+VR?d&ӷg:j`\XT$*'bA5KJ8csr$J/>ޔpʁ*K?p[/Y/n}-kS̚H asrU&'.L"!M$ENƘىS%ܺKF_ [ xƁl԰PF-jp!% ՐaaaS(L6?xf 5ήWGrj fv> P5qW#6KM= [TXc q-, Y^>E gv*j WeܺmO,˲"_Zas]~ 0;01GU\$} CU:0Mce%~--~oC6U1 $[WWPg8;xǩ>9sSg;@6M/_Ac!3UWls/ *エnbh nA&Z)ILN &^;? oC@*TFp |"dAX?AH7v@;KT EVjMr IDATLQ7J)9aBjt'1^+UE޼g||j(LB`$ZkOZ*;l$99ó[>vٿK=)]rNꏭ럘V&.H/2Ь\9%# W nnZU^RPgCmzoJ^}rM#eX^wpf6w\2*lKո%Q"V_Zh-a*b@ah'ܒ S=SCkG- U`-Jmda猅ENb%8(*Mau˒ansElw$?6bZ&1T 7:K NnO.x:N' o+eLMvsOGm+_D:bO,=앧2W n |zxLKdWT1獻n\s覻 \֜Y|M`u\Gr@qLڥU/ΝnޝHģ/iaS%k<>>ֻ=ÏֵU_Q6Qüʏr8ݩ55#-\-ҝ:1,6"Ę}RX6D"D,J'U'J^"-,Nf0Ҧk-ϲ_&b3ȒW=H]TƧ3HӑHĻٶ@:]jfFtIM |Z&4nRYAh2dD A[4"0@ϳ4CN9ܼ,,,{oB o Lh;>Fi1dnkO.g=|,8P㡇xGh { H-,,DXhx5%v55TU[ lkIs dskpa^K>*,-ztE}]B5%q[6vvO:o_͵.E5xG\ ?S{Oo5ݓAu)T^|8~6 9n'7,a)veTX=J~9Aʍ)mjQ)* WEv&#Fe|zdYk,03n|T9!r>5JKգ' djSX'ydbZ bB=,2-xk-E3Z1r[t"J7?=Kǰ966wEmRLeS$.Lj,K eP<.U Vݹo[ҕU>QTn;32"Y6(hoտpk Ϗۑep1UyURYλ7U؏0>FmжɘJ,Kh9C@ATgE5h4|s$u^ @ͫ|>ra]T_̷,|Yq ]X{]Xa+$ $GjmZ#zlMSYG0Alu8 t"Bhpg+wۑU{@5o[Tv&n 'TGҮߤ4x<2l Z.ԪrW. Tf]MM]v9I,qʎŏL${iSBk-o%n1@*lK~EslFI :0RՒ7b;U foր;58<R.$asFdJq&\InL4pxRHF Uo1F ub/ʅgKC9a: ZK?R}aje zF&+kmK(Nno|b/ͥ9RzPGe0,%uKJG\Nyz.,WN&HYiyqİ@2x{7|ܭnr*xvסeK HS%M'KXF@<vEDJaQsZ7yqQ ڗǹ,\ oAi#pD[vXxsXV㫘pKOӄC)v0EU- zp`+C c˛I"uaeFc'p:LwM}$VS^+U;_}NDz:̼K\<K2Y2l+KR4W KrOT-++C _qrދ2Nw*[6p66rpP[eR2ˁ5K bU~K˜ex[7<#ȤqL2pZ"5 ;Jb Jn BHSYV+r&L֣}:v`\VW̢v^Z(m V2uZxbsU9W/6"߲C}lM/Y=k(/x\d[TL=,`\k2Lx_=N7LMO'f s[~kr{~6vk3='*OJ>EEDȌȁʮHSS8ǢtZBN]aX9G-` >8YWp~`ʄ1#rbfmzBG>fFxݐwSͦ(YuETz/.Hœ->A6:dHcɮ1 o+L Q Lzs iaV+n7hulKz@mIAcֹ%jKZ{;_iO%$!ښ۽&Rs]EL-۶,}T*w9M!}/zf/Ytg#;>L)OKJvI#^v:f ijep<_JC.lD#Irؓ% *,-ly7)QUȵ.jBE\& "YX^>\h+~YK冃ia]r#}#S;]}c3Z0wsX.L%[b ӂI,.Ê}XrIT`:bpKe/$U?P"1bPĨ}HmW(ruH "`$#y56b: .,.D>+ >@o Ghu.tSOo)%|h2Q鏹춵=NkbmpMOmkܲ429=/k;k.+{6o\Y%b8QL*&{\F,$f~Sޔެ>ğ+Q.mbu[T0l)$8 m1Ϧ5XspKi, fP!5PATѲ}& 3LZ<,,, \G!TR.K1'#UbaNպpF28Iy\|^㺨JTVPN0$:Zn\`xbHiD6YʇclcztB/.v4Uu~'CW|YDnXYatbR nUwUCwUXU+Ѹ <\ ʾ#~FɿgP`NxDwM'Naoz- -*OV- tT\+ հzRP>7EWb/.ґ>Nitg@N*(ro yZwhh}": $v u7o?I?}}\θ`i.<@gAZi'?sҝbe'FVP>U}L߻Ep@iR=Hԟ]Fi=䲜 KK(1+vF%W_JD&E#0&H͋qk!"D2"ɕl53:@[NAZx9u/"bIɌWC"<݀zDJaj}5pL=L9V 7P(.5Xa.FT78_1=( @1  h/) и:=kp8^vh2A5Zi7WE[.`5owƅJb(mIQyθNn]PV]eey3SssW/G綖=_w~-^E #rElR1Đᴎ/W:;Jh[rjfצ\x͕r\NջjesE&U/Z_g}}S8K_;64@ժH?BsduStuSvRr:Jff#Zw2?asz67T52YL5yjz'r17!MMÊk8E8FUXi(^?Wn$t8,@gTT%2L+T{hUȽ%IibL ]#*fH-F>槽\vjr_OS~p#}!wPsBTKd=N.B6GU=@ h\0mI# ƙڋUՇ< $BԂD]21cD 3Z_yju}M!J1)E4]_;~{]O4)[A:5,ZS^s7݅ۘ0e_7MGXCBDaQQ\U:8+hk SFu~Q忍\e~xA]?Tkƌ-d m’a kzFDm`jÇqR9m?/n̾xT㉥{*qUc]S*?A@)o'n4D%/}Iqs$ \9H^ZÐVcc Qt\[n`d\pQQjn !PËRzq7t4NSۥ٧{w32$|n: |WM75xTE4\Z;;~WƖ|gˁJ$` IDAT.{N+=mzUIKh̦I uR#R:`PUXH1]YDnE4 E>(ԘPi?.B 8w *^< &AUppwJ`rN{%|ckpCqmV58.HڬSi4ri: ^; GE$Wh܄R-G7a7jCҢ6fm\: 2pWD5!<\##VDG^fDŽaH\эYr݆Ta\pUgv-(|ʥa/ ϵ8}o\~bف|H瓏06Evm$595{J+};sݿ<8ΦuK'J5 `񑩛W.#%q؆]m[Ir 8}}Ǝ 5 =Kv?q"e,! _qjﬨ>BWҶp#0.t>fbh(tj=% l?7rY2J"Fn].eUW\jb k'9ow1i}VE ٢/WtGƁp?+m$4[dkE./K9.kS\ho 6h@Mא՚Yd> B1dj}iXo\e(-@ACՕ f-,,,謨[VwxTnkss遡&2xCOn;}SӺd"a7M(0}{ʹc dl-:⋗u߹PG2`s'–֭?؁,;Im\`sݖR=(L9+~U0Wt(ii3VڑT*3!=?:{l\S /jPA;(~٬`Eafs<\CzQw/4sYǵ|6kN\PjAoߵJqLfi^Sg[B.V9c&XS$xj.s,{rw;5wr3HԄXDkRn^k֕ᔃ@emٞg֭ u}sl(ulvrfr-cg HcM:7vzA Un\aS+g~DWkV,' i7~?O ף)l%V58g>!)?kА $s6\(lmεǢ A,Ţk DO+YTt]_xd%߂x2#`UbHŏY F"aU1+ISv046sr'R3LƞĞK֭S[#[{kpfjuMëWmn_~}Mw:v@,@̇S߹0=x=4w{au=P8yg; I0wbKʲ 2vs۝dzUX@4Ne|΄%\5Ec :'97O#uQRURXf' "۠% J,njt)bi%OFia%uGU &O6ŷbvQhaa Leǚ# $&ydGyaXڲ=3Gd!\. --4al8oDfOnܻbՕe.Ӵ8 i;Ou]&cˊ̿SsGzMn/? :]VwVdX\Ŕy]5E?Jm&c54)~ܨGXjL'o^=]#QHZ([UY/7+ ~ 8qkl)6-,r |6?ٗ\1˞5bGA;NUZW Th4^ځU:<`)9͆@.JdJxm,p ˈ+`,{~lC] ,,2L2UYJv ȥ1XxQ_J5na(LiԋU.`kWV=`j>{sꖍl/z&d}mW=Nرw\z?@1fhK/$πK޻5=z_%7ܰgE vu<ݞ?iM# |ߟ_K=é2BvrhRޓxHj-D8YV^ctԺ RucE@k06w1/:{d>jW:.M]{$48ŕkVut+eN@Ig9N*$k[!\IػO .Ad]e`vQb af(OԤ)`4,\RmF1J5e22-\0 X$ iX'Qԑ O|3&74(4(rQ;6Da SBJAҐYi`UIgJuD>"SLGo5{9F[W7gk+K(>:3n={w^A>h:q1YVVHG%]a%D,Kb[~.wk{{g_7蹲lc6]I㲭|6]}Kw_~p7\ݯF<}ր4Ͳ8uC+QKH@L19|YkP݋>zAl\B4E!\eQ85KkXJ'"4[XrW㣠TSN9#"Ruu 8rA ka^'4g1}2zz)(|}ZXX;?&$4H,7+:6>78XZfBC#M=}͍o?CL][[vmmIM}{HwnX e@1_yUy2Y^Xmp,,mmVm)!*g)́ѡéQLdm۟X[Oܱ=;=9O|}7uwph́ڮSw6>l9N9pc@fqM[O G~^_SMzb>ZQݱ pA#rNB׋TYZ /Jm!uL̍B`V]HB@s;h`iŽAš]dBPx2 LU"E%tNd$%ے5c6"Pbfpx.^֣'r*mtThXm&q8g۳H҄dxWV_~bodұ܃ݸ=Rgmh<˥ o~j}2npʴ /bG4ߙ޷7x_ m5di,ڶohï-mp8;7BW{GS^XduK&8'w~?'v1zy:C4>#kbQ)gde:TjTzljnOm8dKIe=Eޤ5-܄r,,y7ɳҧ wv6Ӹ*VZUlhf]vcMueԙ<|g,͵~)S+J~wQK, 쯭5 qDYis[ %Ý0<0v*5{d!+A|Z[5ܭh#tʵv_GbX袷mk-Mfqlݓ]n.Ir ~[wN| ]w~޴Z9Ɔ{JNtmGuaOcJbt§lz|O!REWكٽথK70FK aL%4mܦ=-H*kmrs[OX-nU/`T!Ω\Ɣ\\rjJ=Tރ~ b}TQU>YZ89mYIuP`w&}rT5lx"ydeXqgFg㵱 y85\owkfRCrdj6H!yVu6\]kY4ԗOf++6y7޶z{[e]9; ȫ3=rZE]Wv48di.Lafr΍Š1=2La+k#UGOtm]̒љ)'.+EW0O3WCYE>0\``G)h\"n::]Hd݂(Q}SZ jɯbhb&Hrf1kd{'J H%X#մ\-sK-bǂEsr|]U3BQAdBwzL R[BH"m܏'.w1W6Ѕf@z*zbV-9 &Z#Aʊxk ZseKc\yQˌ$Y\qƥjTnff Hz4kKo5)l`v# v&"񚒒J&cǚ#GG–wk޹_za+Բ.uRS\lMmlo󆂛1vfff&O~P,Y \L돬:q 9~q}_GAg^VNN1夏VEJJ%O?F#Ð J@P%W xWM@:Nxc%r6uCqff)taD`jn%8+2\X0iָ:6 WM`om`/@^%ȱR~zdO#U@%9V2;?Π4p$̣ï|zi7 RABb#e:䒑hܪ3 L&j*~vD,T;_,#DL`M7w~Mh6&M|ze=' jdđgaK{,gsq}sOY^vq1պy y|gޡ}}S㊚MKjyxLpckkIi3VT֌oKafbڏ/~=\8Q//ecb܅}S%c3K3,Vڢr/u,3ݡ!) ?:Z1vySwe[]*] X^e[Ҕ(cs>rjUOX?!H?ڴO܁OlI!lcKKxM=DC*ꯧ2Q1ʘ+6 ]9G^ @^;10Nwn"=),ה}F~jn=V ]9ZZzɒ߿ُ|G͒e>Ҷ~}+lz;cG;ڥe_f}ꦹ +jVԶo"ɒ-}Oynͫt|_{oa[ryVksZd*/Znv,RT%S%3E6ݣr##ޭjWnēV qhJ90#yk80fh\%zj%ܦ>c,lJaZ9X:&163:@##-U0;CLMEՔ\IBWGW]Azhdgո RJb#iQ꫶}Ył~eWE~|x#($C.Y t'zyXV~Z:Jԩs~əG70608Y_O'ȅe/|~1遁_uT.o~xJ18Ǒ(+m\Q׸o]B-s{Hdkopb<ߟ^<7]dj[Ů0iCõjLHj.`*27.T.xLOT~U~ M>EI$)J\9E#3hJ:Ce[b6%;:W(- Za#&BلS6BcVVRgsLڴKA#\ 2 ƾ[-r, 8]tݹ%H>IF+k=86t$AŌK~c 9޿g7!Lܹbkz١/$MHq_'o^sghpbh`"龷/ 8[Xy]YWU_QHJ)P]>yɿ;-'d)].FXt5wD_\d]Ew4ˇ޿͡rW[IK )]ʍX*WـV>0QHAd ơ`+YwS=QC-$d/s1h45-Tx$zRLf}(iFH~0)0M&%$)vH?LXRqם,fpi/֐e5 ;#gk0GR/Jl.\#ogqWvD,v4T{(V j`_ҁbT+4|Uw^f+aKZ |vp^xx3?t%1dlDSu&GJR~:w(bHGpS)zw~6sj_lXj]4?Mf{so(5 ޺ S#6e敵vWmlYV"QoXQ1|Z1}H^_'߁/YQfN вί: >(sz*=}{8$ĝ7Wv)^ki*75&ͯPQWYu_VL \UUFF[Zc 3; T,F)*>73wH*`d/.uN%>y0#^AL]ؒ51O480,!aEnvpÎ\lw(9K+0H{ 'yH> ;3:7;>VHݩhceM C3KPםW)=XW_sy|D,$vْҎ lDܰGGU7,Dي? +Գg>]g9)s/; Q~/ӻyݫ^AUSk'4B=1]ĥ7tF\nܚerf>8s+o7xY~Y{o1/EmJLHj.:4I-lr#B@ߪf+j982k NV.OŞOaouSv\~GZeݲla&3S8kSu Sy8CRMd*0Y0~Dg8KyBzZ( r/i0lD&Ìj,F*(ϖAX^gcp"^Xr6uTo:VQI/H$Ϸ<;=l7ku~ͪlv8~SoI=ܴuu'~}U],8N]C姿8@jtt)UO ,e-;DDV4T>? K%vuWw[?\]}\10Ak-rR+OEfGiTwr=`:Y]ޫ- 4+-BŕDhK%ٛqB/Ḟ"5hj3?T%ЈvSs%HԸ(efU)1"ag/ra.:0";C}Hp 7P#„xԀAPdl*=KJ)Ei{&vi[YXXd v0n:@Fe;Fg~b~{ffd^T4djlfsO^A7}ko`]I%:WqojyL_jb7/'n߽"S~+ݙ?QӐ+Zy!c**!u CDzgR3oLNcdL".#ҿ&Dg3_<F~iaa(J*+%[y$ՐM%Z.(r3OOέڿ(ޏn=/BBBJa.;IWtmMU49v!|(a!6v2`7x-EܯH@f,/հ\gq*WaOS#%h^B]ӝtHThDvYb3_b/X7P?;Xv]C>^t v^dyi +u5NLs7tB,eXtE{͍߯()H$5_r229Gr$SљGmel3cwfƺ¿.گ*MGWu3/bCPs;˪ۘn*9= :+2jdRvJh qUۗf`e# ңf WaǍ*%&YT K)H?6oɔl[U2E_-U@@@]WR+;_}s0_/=ն{\f=ܿK[b}NU,GVKG{"9ʥL.&}Pl1SDojYӪ!^9UAAPCjp0%DFJC6 wonE֏OjUfY1;?}Q[j L % ~*Q1<]{-ѐg=1F4Ye$j*xH=Lڀ_k'gu#e@lNU Nr"3DJcwϔ;E;ԓ@k/}Va^)L#n.s)QR;JcТ'yZKq"w!2y3Lo]vVz:==3=<"Ȧ$+ۭz_rv'ggƮ\8رcУ^ϔi]UZL.VG1rXCw?~{kߚ'6t<;i2ue js9{y꫾J9v#<*ס\_+p_Iŗd2)ʈP5f%9Ad )uOJ=`z.`ր`֯Y\ ,z,*A+E"Wa:"Ik "id<1;HBiFNV_3iQ/=ZXXXϖf^ЮK9sndLwnln{zvBNE_+Z[pS_ cztv3Ic񨒯}PO?*`ɕ:KVk RyO7'ͮ~bþ/=|~(}c~-akm^S7C$3ܞ <|-#\G.+,Օ"lp h|[@ڠv*^h)ծ`=z~VYfSs6sEÚyk>:Z5FY n:A>aJ*=Ђ~W2_*Me6 ^}RS)sώEQ\3Ifv|8G.:igfpgM$+3Ѹ7Zzn@4;tc4Dz,k=< iB - hz3+T̛qcKfeUG7?F|Q:UmTFl^d ~sBbdF?IK߾/ys` ]u#>:2B&ߜ|vu"֭)1Xږ]W prhl\Gkc/4%LrKvȨ\R;GAkJ~/zL\2#Pp`` L1jqb|MdFKg17]8!XV$VYC0@beo30`awG6 cbkcw:i%sz3L!VLPkpNmŬ,VS!Ξ100J<BKpK(tiʓu?yj mZkŮڿ ŏ8JUƸQBnR717m]][c\n c\= LțO}b^wƸbuUZcn/["䅱/mX.J։"YZ%k ,ˌ!ԃUՉXjR"]w)vPd! N"ĊK1=FW_=[K-jyҭ6X%Hr<Ƕmq/1R]'Su5G?ke6s4-;&G<P A%oVuMpF6E^uUbw`oDo/X-RoTQ &KHJoj&UՉxIEruc*vͥBЫ?+q(hėaNްE]Nj -+s%t<^j]tey6B#Oen6/`b|1߾N?uWl׵䓏?½\}yNwɦGǹBJ⳩BQ )S^~1uWlQKfUυo7Lg_\?orh\T:=U!35vam.F\VynН1]}[/ҧ8a/qMM(]a'UGj*]#aYZ]tR,XYW,.x48TY+_%"J) tcq n_ZE{ ^!){x #D_hE&oX<:I\05Җ)X^P0k0KXC|r 9<,!eW$wbz rؗl@m6#m}H !n^n{cP&ڢI#dXڪ-Ew_AcW8]l^jGɬd$d/ %34?+/Em֞9qΗ-eC˃.m]{xtާ>[Y K$ ~Ҵ2~c1mݮd6-;u݋;wmfM<1haR^^_,a"`Tr[GWa87ѼKOs^x_{E׼'^$YS`/Xplnq' G89RaɸlWϔsny;~*rLɱ5~ʭ;D,\2 k\GdiRN싸ɞ-K T8I6X1}/2Qzo贱T&AtL+Mza7)|mb0OaB7g=9yU#5ޝK\I'P߀k5bLf``|-?q|80ᣘΩ8 ':c`nttӚU{y7_+L_snX.VC[;pRɸ_Tp_u~#uɸ@J㮮y>wO>hXwE[k qッX%J")7ZXgL됯+R*MTjtpf$u )JR }o3%p&S1׏ o@$ 򻁁oW{,'Q-Aei{ ΃ +|F;_؝8R=zRhƋxPO]f-ǒbÙJf "åU)[S,lL_vW{~!^seלO,B&̲ySVC)W.(R&&_n~Mwжu4?h3 kMTz7w< 1?<,ε\鰳mRVF.r;h'tREB'#[KDT<9bDW`6 !D:3\Tj9Kg-tC}uB\𱹢I1C9D)=@vWwީq5jTuPR4icz`*\zj8𯶢K%%%^.dQHi)@ӒpNuX5T Ȁ,pʯsE >DȪi~k6F+im6i,9Lh;E-oP{ov[bt#&D)>Uh4@YSB;z X*?Z`\$c7]4=ڹSuW$׌16qOKgʨ\'Dc]S!zJ;g}DSXtRj2dl]g.q:Z!\pdQaO5@Ue1X\T{9Q #vo:aIXuBU ?LVTkPX8[L.7N NaBV"-\+[IPݿHJ<}3~'D" l,i4`W0>*V|5ILo;sr ]F^ h7 N"˚!fXl`P⊝"xWo1[ qN,3n>K4r\V# `5pq۶U{;|#Źɗ@XJWPCXDe=ՈY/+W t=(P)ID < G͚{[[n[(vi w%GPkѫj 4Y1;1֨KLa=Cwxz"ѳ~K ngV >0tM&Zp\&T!iLٶ=-s&W3[~>~Tj_88cXjnRKUIي4pnTy֙ނkiϧ3b]!sW3 slnxǯ9i5̤1E\<"wf9rYRSVkĔQUʙhǴ=jTYК:?E4 xڼ$\rս\[ZEln8vMW9у1GSEp't "tU-{%tD:gL6JS(Y!zn;`6ʫTf`]nYGr!FGɬƨn:5 ~z}t.g4Yk"wJ ?7X3ܣ5? ~ + g'x1G{+ Hano udpeێd<|!Jk^0aT0M .Hbg4V.x+]RxyBSXL_V^g6} `OcϢ 6aҷt@~i Z2} Q!;+oPU/ A GހUvDiӠ J M 10F݆^UU?}뭷ڌ?d۵\£zWILJ0ƺ^[1.;Izj'xfe<דt^l &t6]Z,:15:ӭ_P>w )d@,J;{=*Gq&V-ID$Yy/9>U=uɧ%*\gkOB;4W*k<?$Cˇ2eYkrm*Rx\4Lx3c5ëtt59hgvR3r4=zNfVa}GSoDqL{Z%so\dsm$f<';GΨ*Ŏ;>}Wx* M7Vx`߱{NTkW*Nia껤8Ugy;Bn٬//+b r* -iCM^jYx4-DkЍY!UAۂ=GfmCln }%=Tݛ}hU W؟n]bT7tfpH87ë́CFӊ p=;F*Me@63+[oӟؘԲ;+2h<Kr,{z.;[,r'yaUg ['.*-D]o~痬[v9B] ~dÏRElhȁ$"ǞڣҲsHckCU ūIXV,yFᕇ72=NF3tՙNFT.im_\9*G+\ئ-e%ڶms'_ͽ ].8+,h {6K2 =_Fz[G'v"^BfcDL|zoF0L0X=ug PT]{5j $pUqDQX-GكQ=:# j\+^x_}\vlj$[EXZxf.wYZ _gu]Y RiԋH2:3ߏ?oԆaHߜ'G.ҥiׁ?W/勮C2v9^ dËgfON9Llj QhZ&?c_[>=s^񳫖ǝM&]R.Xr1Q!u eYi *WIeqńpfO̕sϡCWAOy6B=lߋιy~2;LXNU@/>;^K*|ڊH1D>9ipH]sߑM`}DR*MQ,#l\BΠKж30XI~ݻe>M1:[?{~?'2;Ze#Bt,wr{.{z? "Qo"c$)Խ|SrX;>CɱʄnDVŕjHM $JD>G^]ۮ's~֋S?x?=޳y܊m?5bP渄il,ty~RvRj1 adi' ~råUܰ~Р[оye]RV϶mYSM+lݹ+GK\A613~5L5ҒMEܔ*AtPqnXUu𚧪 >\LiSev>br'k\pO5'dm,%<Ù߄0z8^.%y=Ò/jС7tƙ-?0Ɏ+a )L100O|3u Vv ORmmSM. 'r2vRwƊ&y,yhrNW3DfHx|橙kfVI/#'sdZl>?g={LsG/͜8?).(3bOSLr-?+TAu@VQmr|OՋffo+W<2љdRZ١ٚ3S|f"lrT.;K*mbsO+wC{|wy饗iTZԾ YhZ<+Bi.$~<} VCnf\ӂniÅB-lߋNSpE8fϬV>F7+- vH (`p{<1.^9bE}>" J#'v/}i׮]扒ww7{.=FYZMSm, m+ G "{[V*e%ӶX:_I-lZmޱ[-'{ e`O}ڧ{BLܞg+.sc㇟_{6q 6jMr#RJNSf٣cG/+&*SCՐ)735Zn$ځ94EikyR&3\*M(Dc.ҶSQҦ/H~__ݵko]?̠̄*>~5t!fCK 3Bsj^A!Hd ZEA;$(wހA3̓q/^Tr<,vn bg2whbԫh5Y[2X1ke|,(h&Ptpmک麴GվMWʝ$V`iiHU&j]Vj,^nsn4Z3dΎ$N9}cs杳sίt{'箫疝9Xfq׿=e1[`a<#e<{_KuɎ^I&ՅSoď^"''//05R+"ttl֧jN} >*=\tTSr;t,2pn2O{a"3{s=20SPD~~ZOXDT&@хf "H٫x.Aݵ,$$퓪-%QZ\$޾e)չ8ӥE?NAoss -<l cxJCo[B%:̪o㢢.K11BƠ1},0qBn a6H+1]*7X'>|&*tiJn%.isNv#Z(nڶ(c48_0W[ٺ!gn:05VlёLN_XZXUD_#_Zc-;w %$xׯw\~U<+"/rX>|懁*v.{͗'~==zYtmx|i5xs КjbQ5mKr},oreF*r,bo,7tΝ;w}A+`I}5ENLhq˅HR^,+MjfKq]Z\x_ S@K++D[ltke٬Ƃᛖ2Lڼy:,!e7H`סt޽X㒩*~<.#"^m7?zKݫKz8LO ^Q_-tb#ݞra<K{ <`-P!$6bA,bQ6b{2B'j0NVC \}շ~۽ıyWD6A֦timߓRNuz!4 J8̐X!/i'Dz ak&7i-;!O}??>W- oc#W>ӶXxY\Ū癃޵w屑k6'EM㏽t{&;Z1;Y4Z[M&Y3`S>ܨOVi?-ʎ:5A*CT.*\6\u< bywkM7nqC=ܳo߾Uo){B _l.R\hɳE^)B^*f`BWuGZ6W<`sJ FphMj86WJC7{FEbsNT!] ?]vI\L7ڏEBFRd4eؐ)e|%|n8C,,Ŵ_m'%Q@K"c')||S3Ul%Ikw|6W?xa0b.;xxpץ_x h"gy~3*/Kɼ+tjB g=4㏽~rv\!q]Tm{_!o(_AwhV'*P.e}^=Ȅpɩ(=|7%+{z7޸yWTbկ;vL[ rψl.Lq`4B$GC@tjMʼbC'TDasdP SKJ1e Աkp+bhAܸ AZjasvZR1lt4^6Wb5V:t 'seREasUji ՖB,)X`TT8rYlL\4) nȪv ˅gmڷoEA!ݍ"p*°+|u)"8iOg'j[dMN8]ܲ:wCq:AryqBvջSfZv5#3ITx٪ɶ6ek2'J $#V|OY-.[by4^ʢ<f\qSyHeN.m!Ҹ)u|YxN=!bcn-$3y uT/?tvjKG^%\nV?05`/ f_oaKqON뇎}Xk89^YVhqMm*tϬW/\zb_lN%&'t^VE>0S7Gf \2_BW&s|"/]*ÿF 6_~tΗV%y%y%ijUj…O=Gx*ʕ *c+Eն<<G1;bQF%F'FM#$b$L\^!*Jj5*,B1R wop=XnB((2Pv[,wUaϭ+մG{*vsh-&S٦X'*V!(-,F^y/Ъ>*6` 166vmz1@)ߋ\<]\pmj[d4IFVhljq~WgY}Z$"{Nb I/|ѳ=8A| O_[|k˜-kU߅Z %EBP凷o[pjԁ#,{uco+WVl B\VkbT)Ov]JJ*Y9Jd%T.g&/9x);2ڜ'!]ܰVyO/_8&AЮn{䖌T{!,Vt)&_(UCt=XW0G dYMoq3K݀ wOmCd-f$QVxEL[i=#C/?#"'l}VCʌ]%{a+ =K{De#v @H=e؎+ͅ\jD67(;͕nTl.|!D6W368[ڰK, #r?O /N5Ltxi~ȪE#|e|)ъVK 8E]EY"׉-$tff/-s(p+o+_iuW\zQKJm~[qXw$\|aXMf_=prj_-[͵cL#s p?; DE$3TWYȗktiRV5-I|m ?ؘ>h1 r inZdsK=fsU/vU![fsi &ss vZ!}*t( p@ --\`-v*Pu0lnh^~XqvuDTrUAb ';}{+;t7as{|gU Gd1U7:+*\ddl.^m8?͊Q8H6`c׮]7m$VCrï &rԘ9Y*-"6ِ26rl+֖fP/ܧE-섕Jd58\yjf] Uo˷]Wlܕ۪C9ڋ6b[ 6yOM}>$h{'oRݾrr+'g3oMКzcsV7ַA1Ly5;Iר8*mP{er!gUTNT?Z'SyB5pن3^oL$X!1FVuὰE>hR{ٻw/Rf`7l.N'TxSmWUT{9֡J`mszv͕n6 @K*Pu0lnh^>wòas*n,抬RϠZ d1fsŐ\|d-EHҙji\eK%ҷ67Y!;zY#6w t2GkD?_}հ8݅R{~ч_?[X5Iu)nvA~wI/ xcZ߽H2ߍLBB{ˊgҎr⭞욂s %K[??}rO|o.O٧PBJ''gή{[구C>2*(0:LUCw6K0wrMʳzd~6>Ʒ}rLݩ7;m[ّlj ƵƑmC0?ܘowm ęp GFds1E\(R 6Ã\  X-!QpBvެd$3j۶t Yw]V%T-OtY\dx6WU c30]:674 ۍRi9 o0,v沋U)l_!z*S.İ=fsabasBħJ 6 m68JpaDYI)أa)Y*s1suN _.0l*D>; ;uԑQ);S*{e-k~Fm9]XOpޣKqbbՇLP3s;拘z3ڤxM1ue-!~#?;w+iOfoVMC-GO/]J-inޑ٤}zm;"W8wJQDaۉm nӒ3yk0G.W9 bqϞ=0`s9İ\n =Pzհ o_fe@*a% .n0ZJŌQcS%%eX2w.LĮd7J{;kiWsUK L_xA$wbspL6dpxb14Zv?j#2Y͑͊QUZf?be\O@b`Ŏ;/pGEѻCz^F[=Y7m-$9ݔre?*^$i[>VbnIn񴱝#I 7N Ldm=5Tx6ڛR8Sq 6Jpa>E[[@KѶ\*l:9S&kVnm.!lK߱a 2cNLL{0]<Pe&VT8D "9XKK"-lhu %c$lnHN67dUv>.Gl.̨HiE@ !RpYUU6Ҙjlf\Eq\m  8"w8ݩŇxEƟLM.PuX I+ k ׀n{5 ~N7sw.:^7Z >:29":!V UfQcDWZpm'J,,y&u@6XTq!}lu#_^Ѣzb!vZhܠjyM@1mV8E'ȁ\NzYp~ñi0L^U.O\| }bU1ݻc"jVF"°ё?~@JZZgO|siG,23"YW z}40OEYDel>͡-7c#C)?\ZG2\§1Q8I&Q/sqEƗlp/!sY[(9QsN+~8YXDwǚ$Y:^vhE8])%)`I0 $3`!J^...03c/`?US!AKSz63~J2"rHNans2h  lp77^\`bhw}}Z*lyM'e'Mpl.b:JrS,4 Cm\Q^~NhQ-Q86׋~Q\xKl#jl.r<昘p =6OݴiSWs (2YĈ=籴*m>jshCAB,sƸle,bEKSQ_L,SEڕ$CO>;=IJ"Bژb+Z>Z↸ lwyAllڴ;馛R9{Of$LdASVvdX4=I0lӮ$q|dr]˟D~4o+0MPӎιyL,#hdh.+]<"ب ϝ% R͛ͻ}̫he}ĭ$_?q%$L;`:73(:{^z9euӅc:t+_8R @5 `+\r) )M!<׊°xX0^bd9߆Ԑ]QUF%AZU=}ܰ*Pjʩ;(T"&"ք}#KWQbopM𡷒ŒOWXrįc$Mo7:˕͕R KhOn"Ul>a#+l.@r_X\i%6BrӀesU/su 6chnasW?O~W@_9|-F^ysӳELFř<]*ju:`/;\9]mUq=Kj[?6w(`)BX67GP(tUc5,) g׭>JTվ [c]W3ZbB&gvp1**/AH@YҎpJ@Փ@'A.3Mg4J5w/o:· PZ}W8>St,>}%!Sv韝rl&U)՝q JfBɠm%$D$|8vK leIVJ+%' ^Cj/fOӛt Uzj|"yz)Nת"QJ;./Ԧg@ i'vBش\*P6ZGe5iEk]\^gX.856?tN>Wb?9īӯ=널-sr?x}믾ʻBf{bM+X $W%9t?Mtábn".| YRkfdP)"ZP,}E*ХeWK1!늡Ɍ7~X\؋=\f(:-+(E/3\+E}Qj1f:Jb"nᶽ@6ls&}j-M!#i% 8ж}1s_8 <Ն|>]w|\CZnӒYQ^\'Mm+fL~ IH2;/sŒ9L`ÅԡzuA#Z7q2e-B芹%lpé?GyUU\!ȝ=w[7\9{FOo>8>Ar㖟rVȒJc;v{yVT/x HdZ UW8:#Wl)X 4d\$, \0ZJb1r(i56j:Q* WZUXIm@+ٵɈYesŒ4MuHi;tA2["J % G1l-n0lh(rwt.1i_B- 3RAy#UZe)%r3\`uB+ Kc#>L9."so҇VY{%o(sgN G+zESA X(M$esKTiYE d"X IDAT] iLJpXmus?#^,nDHl\IKmUH ϔMҪߓ@Q˖*9DK*$^a \-g*>3UEjU "yl>JsGuj GB!\Q1mn{938 s,X~p@>OŵŅw{|5# "es]lxڗ0YTKj I+K@Nz]])\܄$@XrɁlRzn~kǘO$ f1*֪t6|CW=nQK/jiP2ޠghɤ=>FLy+N켸Il\6#tEv]q[hli{t"82IU1+'%@"eѴ9"oOj43l=:@^⒝tGL˘S(ѴU ȍҁu= gTҴu(.iac!U | 7U VR qaɧ+Oƅ%i%A!1oA w͛ýBB4^6m۬+TKEمfsgP6!ۛtY[Xn_@QKyH(!p2IuG_`yG 8pNS ;R E Z1P'S\BbHUopskҰ.讻袋<]vs'%u=-l"Qm}?9Tf~:5Pk8?.A6$[KYzt@f-&TD %i.!KuyÇAxdbAX䠐Q`\q-vst =,ZT(֐@EWi!\@ &*`UJ:u 抣tXo];S]{n,O/:/YVx$ qӠ婙2mgfkcZ`*eIl'`% l[|.|1 m̜g|snڡ/bxs Pa>)<B$w[G?U+Ct6ž|G!~=Y9`zhc.ۜQʽ|u[7B'mX3F.Zmހf"yСرc$n3 ո_lHJ&"Fz{pADJp8cJU&}4|y2 5n .]px[iwv Ll15|䘡fŰ殢WAՠJes9ve#r\b &W{j#, +j?@=H"ÏpoNZmd@9*vS:.q~csDgsµާUHCؠu#XKtn!\)1C܇ӀX\ixͰ@xw~SČk=z7Zԡ4(!2?T?o@+e5/J;d7fPd=]*.Լ\39e\˞OOj8]);K4d\nh<|q*aAPL$:F./4fm36#rKJYQH{2.'T.!ݰCɺ3Nϥӂʎ,O{ ke]5xM׌z@{[|busŽCO1ԼbRQ}Jߊ̥j@:<&Vˠ?Ng+Z|Y8qu86xg{cpBI8qV/c=VϠl.Qàvj >!jk,6tK.I\ Ų|_{i"5p{L%Z#yE>{VA,qDD獤ͱC)w)PmA#]`KU|>/~nBV Q2N}ML:퐕>؃d`)i#瞽>sS͡鴵\y~tXU%h ًnH_hRmPӥ-Gٟzsmi2zcyU' Jm_)aj]sFl`;jl!w(74׌$ժSoԪۭ}T@.+ ])K03T?9(^`@*wZXEC#uz ^y#rհRi;;H:i{wꩃo ,?hhNJs\s͗%n7^np&Fm^v)[Y VgBe o+=VƈٔTv8*biHjDnCISB¶mi1*Dq!JgPY(!.f?fel>N"jM.նG0A\2n[л~S|+_ʎ;f Z`~q3:# ZߓcK6vSЩ)4J_*m].لT)/JYVɯX߭Vw0_b?f/(#VNJi;l௔HYֆZ-7g{=;tZ+R2?[ɩK@kn}}QΗv~z1[W cE[ś!GtiuCCu[ nyL0C&3S=0Y覟}Ş--g{yjekSI; ~M‹rKҫ JkRb-}ezTk*3\UiCUbZ9ғADxNysU_F:u%c愞lꮘ>@ FT *ˋ-Au˸кWH̷'νWTj!Ũx]u^J<-{UQ{iՀ#"8_ZA Wc*#1-^,ULF+F5͉B26Gk_CBIdj+*&g+YOVg6#@mcbN@C6\' 0ji|][&+q;48uǞ;ݘ%m>dQR۷o.*Fǘ?|^۫.Y~CXr\/S}IN=]+V=ٴE6%BΟ}/Kӵ:I,K\V`Gbxv0+$1]ڡ;g/X(c 4ΤSS)zԠ4qCos|6?qz0^w%B\ 6;Ilȥӂ]ʇs+.dr]+߽{cu=Xn[ l]}ٟ2HzѾ`.-𥃗)K*w%-YMaªja5T!XFSh(&/LjU%kmJBMhg@a܌X*P,Jj[Cۦppڼ$-DL%]/b[u =~KDvJmԡ9bV2c IqiLWe?#ۈ-,exO:"Vja9c)d03L` I} nhETn+T:q: a vtfӭT1(6Ͼz񞧴mڸ)7Z8{T ꄼY 9iem+2-䇻FJZ$Sh>LdXZI,8)SRjTBr@-˃ٝssa]@18.rnDVzAYTIr(H6A+KW/<;T(Kˆ;i8VȺ\vyD.bp}+^sZs[$Yt,.V_-[gōsϽ2k&ژQ\s]w1K2y4gA_\qmٍf9O/aW묆n_a\`\3◶>q(T q6u2j3H߲:8}SvޥWywafoej4d|v)H6/-ȉX+CV̋vpxۅr`/j $6o-OU'uWt4m` :5hk0'Sx f`XNjQ+\ 3~j˥tiaөkF/X(_1_4ĈÃU[ti4lZuZTL򤯟 ) S*ؐ9]w\ f9;y_qdZI͎ mK,1;??@$ٍQa*>_qZ![7?21舷 ZS(}8t#.H8Z?a ˢCBl.HQUo~R/=C9ɤCRѽ6yQ6P]bdQZR9L׎G --܍o VV%qMŅ|>۷oMu;&Oq>ݐ&O\vg ͉\$r1?CNE/r^~79zJH*_HN,LLɆ>VHSxWda[T+ӥr"~ilN^VυzƻNM:`.HG2'2鋊+! <d.䊉D$:J|AM0kv(+c^١,Ʌ7ճ쐓ugY dp =!t7UFхsݲ6l%n g'LYmknRa-wYZ@->Q$rk  -*"?O5S:B"Ng ^{3־KIG|?I#2d|b!N\0H}\VڃW#"B.XF໊QfLbsscOtu[g cFZ5yZCTB3JUt\7zi+K pnTE2[^YI B#>@Ω$ÁssS[p ΙQOUm f_ "Ϲk^|dXAK4Y8|k_r{k n+ϷJ 5TDžС^v~+|N&|N8t'3K.dvzm/[ti"[RVq<;FfV>U_}Te &ry\cED1xrp&TSݗ?J8JC"lpQ8]dR%'t)R5r*;/y V/6ȵMq2'3S$?U 7nu9A>)Fbb{{. oNK+c!bSiq%T*9eUWݩP q^dXk׬ҌD%U/2jM ^{/!Z\ /a*MRj2-xW+^vZipLL=(FvDjȆe;Cdvpnn?{$|%<H&bEԾqF!]pǿ#W@BT[Qg>MK!\m℣ ^gK='rT*@y4#LU9UՈHb?_+/+,Ծ!p7** bL(~>EfaY;/2aT.RbUjd^?[kj}O$\0LjZxl.!#Ǯ"dd`OӃdeXnA*%Y,!V ْ$$I,.GK׍#ɥ^se'IUFm1O7jo#0X1YsJMKpZug%>`7/? q،dɤzm6 NLIJpP˧d[yB&X.4$-22[)Lb<?4kh~ةt"_R)e7\{Od~.b,Kʧ|St衇CA'?P.]VE:D 2ZUo60@,6*"O`I9@Y9\R/!byT LU\ &E[W7&cY'TžH=,2=:PCtc9RZ[xBKX|)tuӦMs]EGFYCWU* FY )~,SU5Py0B!+F bEI7xK-UϬomYPMfpR87”N%V^V;{b8*Ti1c7ԛW\p G@StLdհ1iz~Π KŅ|yﱷf܈n>agW+J'eզrIؖ ElV3'ia!dpz>}3 ilyzfAh.h$H[ߙO.Dh_Rzv%$%ijGHB2DK K)spl L!_C<J e}RnK-qL4ED$D殙xq8!;ǗħU'N+CߪZ;ǡ|fh 783sosA @A@2%l+Xye k{u86vWaڕVދĵH)")%  @$q3^U]_Gxѯ;?kggR dFdXV*~" T0 RW~5x Ꮫ_Es o'>r_FŢKWx BnyCfF2v-$tKQ+4G{jL&R0f%ukjBT͠&+PnE;C&jR~pk:2Mu˨юEBNxQآ#b4`}dP3 gO   h}b47ybhnTe$B2($4WcFpPr$P0ɩV' ˳yo02<@t2"YIxgS RD&PL4͕> lņ a~܀FhFÇWhx0]g?}7~YeqLsǪ?wȰp볅,r]?FڴͳWsx.?_)W\j;eGk/9{ZD<iK\FJ.9m/XŢ6lB_Y[^.fgƊ(R-W\nrA <نPnsY:- ifٻz[\x(?l8 Tve_|crgnP[~?j< d}m]e.'6.A;6xh^75 1Z}Wf&$}%5gSLms@ IDATvُ`IJK}juY6*֧}fT< HIDsi~5g 48Zƃʊ#dfhaB R*7WR\2=MK蛛e ⑯%~~ CR۱cG_M)ɜ+?gNtcR(`!tm*qemB&ݖnm?.̣{(F3OrȮ5 ui܅r 2rX#aN LR'[B7¸#EP!OsJeK a%BxXx3TW\%Ԑ F˜SKBRS5@#dȜC.f0 οx˵3VRGxakquo6O^&̻V;:X??|#>$\tQը6~!hp,_zj|N D 0j4Wfco⩠NHshà:|ePR}/ԝ 8t~8dٵu0}CzX TXfLt4`Fh.\~͍Wb04Zsll:IH׿F'?X?X4s#=^A$Q[ )u}_M> 1ftOn07~W>4ٓ4A_HSç%EQIv/HndIԏi3!C 2{q1&s8x[7myyWX\Q|>s|R, 3 -8Ŝ0J$iyǦ7^i9.h,clk=,O eP:)XR"+j`ר{-n'يiN:(B/O-ؖv.[vV*">FZ҄:іΞKžӎ[H\<1ۼB+oG<{xƳ)ph٬99m O0٨==l,~Vg>k}_d>7QL)Jo57'Qل&ap.3kd{g!c눴!eBebK ~-+ 7 TJ -r`m7mREvN|T{ El|z[)KtW6\+3"jx|sy~Bg߄<'ni{E0 4ͅѣGX?ω\m|G'1IP^ԏW*F]f1`y<ŕ7BjdeZ͖ĨX"[*qFu exױD,*(>d75K%4ӈMJrn#ڐt6iX1^A+w@] I;ņjl)BNYZ8@HBP)wd ֢iKh[.lCSSw^¦eO"j9&1  uH} "RQN1QQSt& R@˩`K|uZh&ۡx!έ(9Va$Djg5ǸB>a$EG$]Qҁ{?>|X?Sxamq'j^c,]95D&vڎcnm9=78uUӒ޼W!p…r 2 ?aEHeCX.2 " P[pkuPmƓcYۆTh-] LK LR*Bs!m0NN¥!;-oABJ*44oO&j " ͅq]:WC£;L[avEm7u|1K\Ihp q-XUtl ‡2Oi߀O;ϚɟIw}ncP k}_zZmG$!8\>Yt\lt#4/ri#HOzgt|t(da\cQLL#j)  5L\*,hon6^L8yD뚚T,A*Qk[kë[';Z0snD(jzD 9a%g~K& iPS ޸jSk#u15c-شVe1]l.^SHl㞛˚p`m_O9_xߍZ(*ت.Cs"O 與Zt7JOUUO8*{eݑ .EZh9!H~tEqx0BshYknx+ι BkSNɋcgiou EZPLў86KZhr6|-Sߝcoio*Q rn})']"p2W0W'i 'E}(Oi||:1>gA_qʮ놎|!ɸAbۮ4ٲuٲx1 %\r魸~.2^m>+#tqfc奣GZGR ?3νlc<׾eˌYA8,;ݷݸ>zd1ᄬHgDf<6o/--0EZ\'F5 א\%^5R]h9@iFse_deE;L "b @{0B5)L8R"ꈎ @HTP)1vcG6 i 5|iYnӥj t6RPQO%ś,ޜRsb)NI8 5̄"- ZWvl:O(?v}˘%pgBOh<Ш=4R N|E$/h /ӓLQf*sH4RISBi[ {'F "S2yێ^칕rMc9vP^Ӆ~hzv==]tMd2[Zg T['yb=ڿ+/oGiaiykl,46DjxPv:&uARNھ4P%v1]#؆!E:ϙM75[Gs|A'Tܹ4z>\bمWyF]_[ry.Aޜ m"TJa?yMO~o( Հnۡ/9vVR rƐdqt b)U.,y'] 5m]T[Zu5 Bj`H{ ;EJevEmwSzGvR5]E-!!$. s"VO?SdlP-6ڶCttEUر 5\bU1ͣQ% DI5:=RBT}սB`Ŋp WpOKFZIeQqK :0Y[k`uE O z^CuʇtI%Ŵ/cVMHp#;N p(J"}i?2$r/j/+";/_飹FEV<]4Oh.M|_!0r,Vͦ 7V gPQ81 GIx0FHƌ^`Uqᝥ)22$31O.E hN.܅:v {ETS'o!V0mm;nVd .AK$/q*_uᥨJ11J"L΃ͦ!  !ɜ8q̙3pi>iB5gBHkT^&H^^,]6 f#RM&x}ZoHd2M^Voe-fojk5COmT X%On2w<־ SwǑjZczP-Z{_YISGk81Hٹs';3bd*^ SY^ z7%B1`MŏSXMHHtSu(31(-Lwӝ_8K^Neob- +<U1Y EVaZ4W^MॠR#B@_" duT8Fy BBAJե@xyV&žx]\ctoocpxF͒.J'O-ŧ^z"c‡:xQ"¹|}/-h2m@w7 {FH ;mBueF:Nv0Ӗ1e2.ݾԤ#+s1tұ0u$ҩl(m˪˪|~X`QAUwuGB]x5<*;,[%؂03 FNEǫz=` ܞmf]M[?G#}щ=`<( ﲉ`ǶZgɟ}?'?ɨB! LŮ9V[t 𦕬Fs!@ oë}.E-S4d:|weҖ5LaߐZ82P)-켣RIt樃)3)Bq|GndE Ճo im4OؒUg*["pxf(JP4WHj4W&H5O7wҊT~B~ ͕5uZ-?x4NtiLdmJ_7R@6ԋ2 ĀN g ykt{*0fLꫛES7 \+xހM |~xt kA`<gwE<Sc9vʯ{wt-hnOBMlTR@=m9oV UslVovqPla2¸]ӉjN2iRZu!od=re[zDkNUi8gE\q0(ˇG&uS 0KEN c,.:ފAm˜*d hdyuH9ػw[;v` Nہu=8w!ЕޛpOFW31bD\<εʼnߊ"bT7 ǵx'/48|ZLxPЮ(+B)YTLLIцBB}9s\Y(Sau`au =O;!=*H &*#kRdV` U0#wWeNUdxDI !\Ha\XؠMHµ aQKӣ$kmOIiDCseu; me.iY!٧f^`|Wb=͢ !w-|zC7\2:|?ym4v1JC/}Ab,# CwrhKJpf'G~Lvn\Y(7'J 2l teq8X*1]łˁ|ʸBG&`j!&jWZ;D0aN`Pn$]F @K7^0l^Tx^vv#stf^+7sny>Lxx_0н\:xL}rԌj LŮyh\zs 10XeoJ?T(]PvWOh{ EEBsy6Yex}M},ͅ0 {!j&UDT"0`~c!u]tx4L 0Bsפh zQ!4*FU,J2Y)2-j T:_O P}d6~C>^R)\y0Ô)~%.OƻVO~UK7!" bȯ#jJk$@ʶ.(paV ;u]r ?|IIx}"lۼow\%`XA-$in.eZ!9̤\,hٔjz櫊+MggZYY; ?!dm.y)F/O?{=F48 OJ xA͆tMa5uc/3c \XBŲ;WN4'rAċ)U[=rVڡMD& -rrDm{5Ih IDAT]{g'xF hsmS֩ӝ,WjlBMwlqS:|gEY~/³$&G5\'QlL5_Ic91tVA&LQ7Vl΢6WфWCG~"۶+TLHӈl7|W[to6D}CD|vsJ{gU 7B!_qZ7e #E6ArZ#LB~hU%;ɕ P@Yk#2kwχ$ 2 N N%L_ Eg?)OKC\+{7g[j5E#k?r /_}@->޽%~^k`a4W&p?^\ `YBU3pg]0U #49^ydsh݌y49ۺu?eQY_lKXdzoZV{zt&yZ7?yDG4'c<6iZxjWfSZ21Cx$UHWK+|ЦxsV×CD."薍p>f@إ!t\P5sĸJ1;B6nCLm! g S(ɨ#ӜO! P0 `TlQ3ѤBG-^h5a2B~1͍d*1A"*Cз^U~ cFtz(/a8ٳ~r@tW9S;(>0rfp.ƴedñiL󳇡bGtYH尘.~ V! <渇+v U BlXI&9_vGʆ0+M9(7`0Z @2(~C t5Mcj"EF=~u?;vN7ٻd؇-붆}X޼3}" aࢢr%K_߯o'-lա}*bGHN_;C4N +tT݆5ԶZ94Ys*Ap*(F]R\ ]_j`SUJ0p<[P,:hm%PkBك,J""Wac>1K˦*ي'wce oM\E]}>SіOLт o&]Z ̫ V(db_dC K'*pH XeZ1xQU)R"Zh[5 BPR@ssh\yKyh7Oo `` ;7W|~+c,# ]%xqws2\ >3gQ83Xj}u>bP2M(Bgmł,a(ʜX$G6aⱒA-J5{mD󹓹K9Wja .ny6D-$3H0#u`MYus)&ƥb4rff۷|e=L*xã%sxˌbpw {.=Ͽި 4 ?xT.ŇaĆaΕ:)*b8)2 X!Sk^à -QkWMjSь|pMhv@-iȚZ 6#:D?Q'#!aZ!m khEQi1xYn؍BKZr@- ["ՕDѾliobP_ڵ~l4*%nQ p= }Iq h{BC`Ya ~c#:_m:=c E M񛷽҅c se]$Pn06/I>= +/\p+.jOW]|hk˕|TV}ޤi[ߘ ܎Ɍ;Wk B"SAY ŝ"Lc&=\ UV;EKL(-SfٌZS[gb~Fh#h:q)X`jsB5l1?S\F )i&A"?6ꜮxkI0lMaꗞ.mÆDs]pH驣V`HX"9'FOn8" ",[.ĆUF6a4#:}]pVkE4#Fp[km?$um7"_o||j7qˠVDԢJn; ީʫs/2=ᝯ~[XT@cSb):_n4> zel.CaҐjU%kmLzEۭ-ߕR-BҎ셌}Y X=T5E եwłpʲkP7bP) ZCB꺭e,kr)(rjd3O;ש^39&X18⮇؏ӝw Ϗ@[]FyrM̼}B-z($g|jڶs΄ƨKmOIYv؜uiqіT*L LRF0$h9tT$fyrQZ4ė8f>cdI1^X.0*i@k~;WbzQ,L|*mݵ/jo }p0Oޝ ΑQ:0/ZHȢ"W*:'wEՒwE2&T;ܵN]]/Y?K1NW<٬2#W]`?oe_xgODoakC%.2lsީşYvv?vOk5msbxҬ,:#EijQ=Ŝ.K.F,:۳PqWZJ6^`ǺaTȟ+1U3(9ϽMYUq`Ƃ  smBtzK!b"d`<^*'sV|~C=Q53;(]? f5Zcntm>`hi@oi7܀|/(s뮕mj9u4m,RqՈ` ++a }2L3Ag`buQDG?"%6>0ZS[ahkt+J#K] ر#sQ1]&yF(a3*<σAۓėNҒ}O&('1g*YԐl-EHMI^T ` [1UV0@rE,z[(۸ʊV[Xc_HU7b*iVB!,B0%1Rtnu[5#OC06TT[/$ cs~C?ŞޢPF*o"̦hOYg9eAyy T$;0 =}#VӲ a0hȬ>E/RT Ny4*JL>O Ub:5Ei BبGem )u莏daHkbG%FebSPġ˷<}gj,0WI8o߹WfwZyuv ^퉧Ҭ}=/pōخW'rlu\T}uʎSwq, ]!Fm;zKp-Œcq7{RHag K 73 m{a[׵6"5-Xܪ6tcb[Nz +OBW ? \:/Pxo!dL5>Um넮)wṫ҉n}Ŷ;6rG'>ksbg3d~OƤL[ o9nuϽlN)>R/ &Q?1Z%|#шFt)-hD#(2;!WHB˝uDAER|-+p^PZ *-+eʇdEDWQƫaCo',"CBɏa ̩… ad2FC0ڨE wy} O8nOXEʫ'd}[ 8y|‹_){9ejl- N:jǩxʲ7aGC 0*n43%(.2'U1ہ1F͝Ui/ϝffjq"= (`3i"re"BH0cCݫ{ˎ8. cl+f=G\ı#?s}(ɽFZ^_>_~>t;UV[>|ֻ|r*?lPkrx*S>bϟ|iVTS.ژ.Z. Z*Qj(xF@E2Bz C돭0@CeFD uQ( 9{-7*4TƦ8>eI.a00zjcj)uS~ 5'ف( mn[.z@6>KT!;1Ɣ.lprRVNW~$@ fR0!l#~A.\@r9-e3YUPq}_gN-AH ]%}=?[;k,6{fz2[W~́=MVLllŲbY0.]ph.t;9pXnYղӨ5a<;Vn6Tjy#҉\L.`6=tU[6O&>`ĄrQ8N @+oV\%n!ӸX&ʧf}Ǘ&JQ#NvN37eB_8 ^n ]!(u]|iZSǏSAadZxvkEOP&*pI,$Y u*< !&Tt')/dAQ {CCwYT?B+& Le>t.50}\6vPd4rfɀvI\G]gdb֕p]sgxBL0Q^Up:Ʀ5TX`zEu[̩T yZ\@^Q3IF;+xgj11wY|w}OʵMLfnW>|U1*_g}x]{`oi2]_4*y.61*fO9I(LnX..% 1e϶e`Ezb4S7Fjiɲ^)m'uhe7>ՈnSR,>#`Eikm d' ?fu=gy?goؓ|_̫V:/S]Qo9yoݫyP Bkh,-8GkAҐ2G=Ak70 b=p,ג@MRj zc׿Dݓш.A-Lq|s7% dZZ:otW i@w>HHRh9\N8 bx } Ռ;ZpTۺa{lDoiӦ|>=O-9u$ucGnW>?xq].+?vC^s[v-Oޏ̼]{`|^c秊R4꾲ˮS)t w *ttӕK c"]^ uwa+BN[Ō=Skl{_jT3W % 9Wm';S\#BYdPnChTG٦9>Q5GTf~r_/ms>mܦ?9 xy=W(#W]a\!4???ZmlI)I%āݣGo0=.h$xtӈF4!!s~hNkjQX> @ 3g 0`V 2n#Ed!'#}ulX'YBtԗ\p^)Xx]~c=Jv3#-IEb3@dBS(Ŀl|gQu3?]1jeStE(Z5m|u}"B~S:tPXXXH3cHHe_Ht_k/c,3,`$~kQߝJ.Z~,ctwV5TUs]r1n&a韽t,IU1`aH"0]s-+ӸK aDl~+T쐋uRqH^"L鱵'nb @N*\vUuoťb0]};neGO]363:.v~G(2[ff8іcw~Ȟ#Q?Vr]Y*|܇~#<3"ZԆ cy^`GZ*T9f.qV9LfS5c4c A̼ G!ĕB]oH";+썌zDHG T sISGZqBhBalAkт |#❓o [ےc2 \I g2lxpe0 Me[[{?dOI^Gٲ/B`I'O~4d<@}tH|x&/8 $"hŋ:dln6~uQzbrȏ@[n*|EoPDW-G<d-%'g}'4s;;'DtS_}T* m =+St7*,At:b^f~br\k_E[\<"c96JTקة[pBhlsw/Tgw=wUG3t' |chRUx 0PvvUq.SјnhBY0 ںefxE ؄Hj *J;R7]5x_Pl!<w,<' _.L:njD2̱B (>~cǮVa)+ogd=\} //Dp ͉́MuhρT U j.3r9BH^?ߪ`hp">F:ED}6]z2_E_#Op/G=MRBk|g! ~6t)[eZb.5ƂT8dҘKID9#*|EhiR?>oKW𡒺2!V2"ORZd?>dpc0ZuހrՈ9dY}):9ESG}y(chgN@rpnz4ZSJ@ u NOOx㍮̴vIXK1$'9IZj9.!QN#O2 9O7ilVڼcڨUTB.;s-s+o0gXF k:xaZߐlIJv`~y?rCˈ;Lw2haܹP|a(vy$:3)"ZGV>"dѴ@K_7@|?ꦘc{rWlU׋[Y &g;p'xhPsrinGɋ0l6j>2!6uIPd?<a>!!2y ׸)Hrܠ*iQ=OF /|k536W ka9dHֈaܗ)`Кoacl*P%@ft -dWq&]1+. )6*pt0UWQ|bNM7.ƸX,J%PT?ԋ4cwרnN_; F$"-x" Rr^42qHuMoTBwYRt Ծ($iG1DRCEђtϿWG[a+*(dV{*ڶ*SAXD-BS}N%Ej^۲eo!m@۳Y 3£G:1X@V%:|K>L¾7iT@!8#c-RUHȉ /.'šHv'@zºu\ZV|tPh٥nDLY]EͱU>6"׊Tߐ{oQ%Uk!E0:}m5>Z͘DBrt'B$2o+ዴVlz0Wq.8<3545G4],=s{xY褋( —7ByEn8$HgAaDxp]e,rLcζ<\qPae<^؄kBU#5viyWkVb&o.瀋 "ԁb)Nu=19/f1)WziaDpɻs^צO<l`J@Si';}hӇ>~7X 頝2199?IϟV~  FU@M΅ '[+Sj 6)N#%e0LeIHў@&E#,nǐp4J""cij@BH$e]mPXں$'ɾyLP>o̚Xu܌6R/Q-d}sM#OtiO&J\<=:<>ja&%n]"ynV'NLMMn$]^~Uci]ɱirsw¹gW1}+.}ҫ}7.23=ş>/{>?y#Ͼum3c)4=$V\yyӴ[\ ˬUt ;Y b22~~*%Pz~(ԝņ˶K[Cm/L^0]ә̼mpҪުf84?ER)43 3P'-H=z}NuZ.aJl>#}?j6_mq`?er7\quZB1B+scӅwU7:h0hi:hglxrrҲ:so1r< 4it!4j%1'BhD;h4Aܭ ~rh R,7I ZQηLbFh*1("Aٹ @c5~1E-uy ^%G,G MhlW(,b!̌iS|:ëʊ R3+)/AXy.QfVOޫȾH=5"$ThQ#0ԙʡ⻎\~˷!PyRVW=*2Y0-L](C!$N'Nq(!!f[dYHk;y;cV%]kd9ٖ :U#W vwn"Wpx Bj(7$r ϭ\0ðm3ۿ&K,bks .dΑ FT>U1¤@6oC Q㩩m4O?*Hj\c(qCD } {-_H˼=LaYx"QQ/~hX ,)`.)Lp?3A5U6TYJx}M}biW{PXHkz˒t9`C1w?>S?աѓW!N&P nSȂE9 c: ***~s||SlEciG䥫P2ʮ_n I?g$1HX E7nN,z-˗E_73%{]#*)Oᙊc/"R1.5N86df6ȫ`}"(- "-8eY ;v0 ÿlֲz])"!,ӁE WVP|gJJim{rr,h)Fhq_[Ve-tkU/:iV[A-s&5A"6Fmp|c[*lL:Vkvǫ|*Uj*Imm)IfMֽ^wuZ"MڗNd)Q=0܀` j@|12&\oHiO2'kevіp5Y.:iDb*_ )IHjcd:ú^$iRwtmƠ$KHBFmuJ KTTm'bmd2Z-I-`ЗeI32I+d~ǾGx\B;Psw恧w^s'̮%e& u UCj '_{t2_k/#1s9lI\BĵpVO}UFB1'l\%}.A6Ma\-im0Mh)(NȪ㬄Gͅ']h@RKbi<ÆNqknwMsbT˷)̷o#r1,Ny}sڟ~4Tn"M~/\`ݾ2D*?+rx3gf\ Ű/C!4W[iڼBM Oh.]v`Euku^Ids ^NK$P`,bQ`ɫ$qtMCOycпرe*K> Ā1 $\X)؀c'}# `+H}R=FcX;Zgf/"m _[kAJ2Y6Z nwB« $Hn\Qw &r(K4 KP *sImMAs[q]4ZV׷lY,]u'Ϩv04t;96]xeLGڊ:|ˏLx+mgAk?TaDZpZ '~0BN[*0ϚV7x>xG6Kn(.ng.Q4F(qe ! Y8 IDATuF11[)FY1 w1اrY^V\tN曤s2aQse {R~wrrSm6Z/4`h˟Ŕ+.3.TҦ9h, 2Cg1Gce# ^bR٩%ɞDN?L bFIr3xgYE`fDfTb')^VBfHéj1M<*dkWi˸RE '\8iRaŜ٩=8Bc`2 ASliG%ΊյNHdcN (4)5v(awGs3l. 1ra4 &_Ɛ?ɱiG︼X=rϬr)[ݙLڽi?iۼe5'ku'R__|czRy z2B#5"A鹸 pKkN}I]4b,L^RP`},^F S7E˖4p:2v`u*-D35r^Fe]i 8)\qՕѲX,a]uy]%疝u.fscv6if>vcs뺕JE(a)m w5-m]z,ѻ!V)NmS}UFw2F9zAMQ@+VQ84@:EpDo3jmL%`D]E3k4tHŐ1)FH&X:lХZFe%dHΝ;QknYcLVJB)Ig+\} KS?_o2<9`vE];`铪p4Y3)c-÷vyGQ5T/_ ѭ$˥+~ c* IQ+(tA.(K$i\t˴:$aX~3"IM-$ţY (t{wlؘi]w]pO%$BrQQ%8!$Qĉ=?t1m3 Kᾙ_=a핛m*2![ MW<30y/|[_: URpΰ-HU ܏ t%"cw0^ _bWPi9>e2f>k~.2 t 6(kh4lb.4\TzoRZP.KDrqz7 K]ZP)uiRw.k[vq`ٽ0 f3uǍ]sW U&BmeϞ6{NKp˕ }(|I3 PM<3O6r캮0#m_45pJJfdm l@ދ4 VdA[@5n%աqM$r¶Job$ue2:\"ӓ Ǩ"q-.+j-dd;k5hn?(t 2 ʡunaV u&uqH@")Q-ɒ1my-=;|3띙f۱ci,[OI%Y9eKdR&)@"@Aq4*+sʊŋPY/^?ߋQIhfs֮]K; t Bh֧J0JQqSknhW=<:^\hN˯֏|>|&Jb|*YVŲ^?QVZ?r\e~䦙ӥƑP v un!v Hbp;˄ 3uWv,ZLR?KL$!}6ZM XVͶ// ~F>!|#̆_ >ePtUUu"Vh_퀅:t9ߍK:Fб!vm{RZ}Mb? 7mX޽SK,k?ßm-]kŔ<Ѳ͍ViBXdÌ,Lq!mseVךVhr g(4Qb~xŐсy+,+6J kGzW4FU=^%̳S3ˆّmnF$ )rvSV!""9};?lP0\cL Bm?7Oh ˊvSk_}nsUd=Kۿ86`i!"8)8n(1*N^"{ ŁEbl=ɂWo%6)ݼ2-Z<“sB M}Eb-֨B43B^( ,T/Δu'۶|Zv|rtKl*z&L`t.p"3 ϖ-+rm\:ێ۲t69/\ȹ*QbY=Iv:^6n aQXNNQ;j@v5eemw|l\)9( #?sIB|.j[:] Q_w:k+s{7" _Z$l )G˂!l;55U,_~ȑ#H(wi9:q&fJ7̮V [0;k8b:f 1؏ aP @Y(옐e%+Vy%d&|cNT<©ډY@gFRZoꓗ,jĀDv(y.\,ψͶRZf0N(Rp -VvDSbBk$:ˬRi Ғ{:"~iմQ1 F|0}lc O()ێ lM )mRXxf--;#COI=:en'VhnHfjrF1;;4S,mJBh4!=1nf$]S, s ik]=sm,sl:mgu>S^TF;vo{\vxk)P4&"qv^ھ5hߵl;b=Ā4bݠr\+%;caSI[Arl.ӵ:Β㸁UL. sO Fp+o\V vm [}! u v72IV$ױJ<69ܳ~,[kw?yβFn|/߳M)$_ YdRޕ=;pɓ' XZZj6$' .`'}n8obG Ռ+@0'xUD0aW|BFzۆR&e@+bu Y syV5iE( 4&a͢{@ vIՌ W_% )0H$arvꞖC''KILBs1gf҄TrA+>u+]q)Wl1"2W\`U~|KxM̑FfpBuAK 3%9y?g,t\-j(«Gߑ,+.T @rzgZ!GFb d >(]{ȬIi&q*Jh[,;99g mCX2-Nv(̜<)R_۠vs?xNz窿j<ՇJӯ[csXbpZٮk/ : I%rL D⁑%i_ߪi՚B.yW+N7yO#l(s<;Xfۛlqf> ڰV R"Ж _C[!O´v6Oe=O;7ͥK!,jlq˕U.rvKa`H\./..O˲E7 E ]n Q(F [vť2Nܛo~l\x  w:~Ǩ+l P!L]m+ۀ,>!a>JѠ(4Fix67 zZiq9ϗe=/h[\$vITJ7?cb؉N8>Q oՓ;6ߴe0܏m{|΀ļ\n߱ks^THrX[jA~˶v`̘B#>kI¢?7Ď;yj6[N.m/:N2c.K,l#mX>&0qbS]07[2i9lAoZ͐-縓R b; ]+n+[ə(2]&j$8>ket:V_R/]+gwڢ|Y0gӶ퉉J˜B^{^xayyj-..:Я bE <>7)噕rG-E)yWQ2/4F:퉖sk6`>0 y5Ԫ\dBp|t|1ȋYgd^}%̈0iQΐLj+5H5B HiB ͍TӥpgL Ș ]r2-.&'o pOn0Q K8Em g8t/E&\ Uhu[)`l Hct0Olm60+ :M`c`inOE=3a1UүKT`my $\e8r9ݾ}-[xp`ZMhd+{U6w9Y۞k|/ޱiZւ2ZpOĺXu"*o^,[O&6];gw;ьCrQ2I@b/"5%*B 2nLyXjjZ\pEGjBMSZ 2Sncf\ ՎQ ]*z XA#!r%Wc²ܵZKvpn 7G\+h5 q}?v[,tpTfPRp-wA0!]ήkm߾Rp'8WJcy|eRd}_8%tŀ.;KŢMJ7碀آO5|/X'AgO(t5_ @ BX zmoy~3kK[;?;ź"rސ[;F'M?޾?L j46[^y?~5rtqreúbqllL@;xyA,//3($q 2IUE.i\T*9P0pt*h.&n! ͕V&yV\;<:`&)ԽAaWf:hETtPSeGsB5Y㣰2My-m* #eZHNc4W ѽ T+2 Z.|ٰL|*X 0r_'貣Q47bX*"߽{wtnD8VV2IIQNkv13 gCܨYʵ>wo]{O59og" VJbĶ0RҘ2Wb0ݎɻ]*]/#J}rf9CQgE=4i37qސFBT'[uPn^t%$ IDATU勥 G[mʾeOJl-޴Q~#cB7c&ѯbBb.wn7Hnra\nll,$̙3Njj5ˤ;?Qa9ī,Ĭ񗫋FiޖiBh.(;Y)4Wxsjf'{eGfGLbBgesBp2RACJX)ᗑW91*_VX47u FQǘ9݊! 0h/SYĄ#dlF$de3x"" f : LB0y<c.X uZ~5aBx4~Yb`B2s1QYϕO u)½ &<!)lYBh@+}JG{?7mڴ}|^󼥥Z LC MEzܣw-N Dp tӖ#߶Pw_> -J$ zV/۵ҬE k>Z'o)!ӕ2>H0]¼%QV>.f- &nYk>rVEy ,k9 "Ǵ0ԥsj5[~+,GvJ岛G&ݵx;8V}]pN= 3W_렛j<4xh{=[&4uT*BAlرcG /o4k,`{M& 3;;%Ta e=jHK RW]`eBX&dהcp>F9xi29oQI*QZ_iCZY blϦvfaRaUh.2E@8uV2g]'eY#`Z)""gA3Rx X@IVFL^5|kT`u¯YLt_DV.UmIT]2L*,B~4&.rRL 2K`̰ )vC!f`RYj(Ͱl"WZ*a$hZ}BaA4FẮm ALLL0G{!& _s\f?s6tv90h "˛̉u۾,2}PN}{+7"R?XeVZvG=?&¸@stk?DρAgB(QH ^6pQ,ֲN7y/R bQ@H ~fӡ$8^t6PL+-n- \*{w?ۯJ1wc qm!bk[gQp 6O=}7=ӑ'NahlۮT*\k~~瞛;TV Z ѥM iP偀rPBXf= e$)'ll knY PJH9p# lL -4W4@dȃAW ||oƔaZҤ PUQc*/ e͕)4vJQ gD0YHi :2zTimskLp1 #:ѣ/hgSt \a2SHH% ?] JfY⻒'l H0vUoZZbQ$ifIn;3.rٕdڒm.M|\. nXܾ};snDZҥKIz Te𦺯<5O>ql)%_U샰ytEcox9dvHj"[c,^7UU@"^N@zƪ(eؤXȹo: .zQ:Zd C7% d䂠j5kbX(7[Cf6bsnn"N\~'ժ.p-r-!sNյ2FmRRqUՎ92;;2儉4ɰ(fJ4Wi+;mM?jc!1ucL?rblsp3+dGVbL ?"Zɢ >!L#ykhU1F%Ef#fALHJW0̃0póf,ZIKQ n4BsZ.%[++Ma@snrY|B,As*? ]<*+Fޛ.>=%+,7h q%0BsdO ,f !gFYQhnHrP(Xjծ]* ~V[XX@a]<v(;kTD si.|pN_쉋KMtI_ؖS?vx@U |%cqk7ュz'S2[ xQẎ],l\3вEU_ۀm$>H,K 7k[q˕quM}ۿ~N)蒼[c[u 'o1!-x|o~;;+!1joyC;o=k"ZLu\N׺l;vlff&ty^ZH iE 2,@1T`*TĄgD@ 1hn3g# bT0NP@T\eko8-|xTL%e4Lhln0Gsf\;0RJJGhJ)3{dEt[)47 Ġ`Щ+Nr}V*ɟ}%dBJp&eZ5 f$a@s,LNk@PF0,ѽ uT܄_h366O1euaH̉'fS璘at pP'r& }L*d 0]1VdӉ̪RWN+Tc`<6BE]1mrTrl ?KIz𹷮dYdzFf*sh* )FtO8aY cЗ'TMңAJI6/owƛ7|aQm Ro U]?ܰK(.o=:/Q} eBrva[ mi9B_kQ-EU<:aryg)`%3g[ ):0Q7=`Bۮ$;؄㠊_<;6]ؓ~6׶Bߍ5o>W'!1Ij$q|dQTF$.Eev066^3,,,߿ѣ3$WFsy(FxGw˒`G'BMdF% Af[EZ p-0: GQ`?YgȺ1aߚ!Wj dT+eyɡVQ~/|t yQsr3+Tt0&%6 +Za!h?0a.8ɵĬ3,p|W2h-C=%00lCdr!mhZ@+<})X7It ,IS:Hˀ |$aA NzVKX H8 sMl)5l ;‚?@Gzv(,:WwDّwGvR8.G΃߳Ӎ9餂fgKSP(Je{rVEYQ}-(] e /A> &g 0.ˠ2j4e4H\ʤN䢖&+c͕UYWA,Y$lJ+Bua/?JڬjI'-.P | ܮdс9eVɈ@*`PRv4ZFm8N՚_z5x9˅n0&L-E۲̬c&^2eŹm/rePnTg;vܰ ,k޲ero:]93k^׸_J7}m7|R]VZdZB+~^!v_?GDhn˘{($2;]Yad$k⤬`;ft˚*Iֽ@lۓֆJVj5k;XT W+MwԸ[Y;nsv;{7܃?_rQ.1Yk}{+)M+Ō6>J{tǙȑ#'ZVS5M!j]<>tc$LSe-J?qGqBZI)n ϟ?O9s kZ#-U>DyNkgv 팔) ï9e@BM .@%p?@4W9`3И++a\k,cPvց#fnpf1(i:LM?&V'%Nj~E1kP%ntȔjyW50KK̦s݅q9FH0rbpY,9CxĬ5y12uۧniQbU>>`_>+snQf1^Ån>r3hacvKX&BoC0zhgʦh4.!Wz^{Ǐ;11pڶ]*\ /2WTRu)A7YHi|oP)ibr-mKڡb[w]egb֍\?6Լ:^~yz¶jxqڗZj7A`2[@+])sՀզTD҆~yȶbk} ?'qF0s ZQ\+ֲۭBP9[?n)vE.K❷w^G .億&vu[v^>`G?H'z7g~5 ۈdbF,,٘\.OMM ^fV{g9][V[Vh! VB]UVi/n]p> J&S*KL(4 > BX\w+ >4Iӕ)Yx&O26+]@v,ã h^]*f5)줢WfeĊ$" !77$!'YF24cH貸708&JCb%tonBY$bLK8+:W/bA%eIП3I_C Pb|} /6~Cƕ)(lt|ɲ W4s%P 3Fd@{s. 6=촯{sT(rĮ]d.uhzbrQ2&2JcY +LQrMw|ŎmnͲwuմg/=yB2]Zz|ћ^x?}{ysn/iߤ^]|Adg;E<= S( )!|dC]a$3ղ/xKݡ[Foy~ k1g&;]PN]7wöܶk6ef9gno#PF]]A|݅kv𤋮iR4[Ҕ]#zwᙙ0i?hÇJCxRQ ³/g +;؄? U##47Sv *^pg.h.&yid8)Y KZ"O~-<\PBКdkQB\?Oݛ]y2lbƍ@]aTXy  # !I5ea2yahmĔlɂ\1A&2-| :"]PrᆁЕɔ`aDа FCߪyK'9{?(DL-u+x0:N~ 9ˎc#!9Yc!h@*+#jCڵ+/,,,//4HSg>յ8zk}pg6M[(w/Bs[\s247X;7џZnu=u 1=j0ZbY %rDjЁD]Ƣ1BZq(_(@!iMBF!w|[vBn7tIZsx ,}B˫+䝛nߌxFJl58ؘײ_~p6j3rw\'p(-Ab 7-Pe"Q">- 1y#Kǂ ay=4 uY W}Jh'@iD IDATQ#%J S#d6*)+QWbAҔ{`?4T-etQISMEYMKzrgb2^wRW1j'8!xሑbZDwhb8\xRj'I=j$lkK I4+(/l \aUvY|o0(ˇɤ{kŋ+pǷh#m~6aXh`$Igv /m4奥۶'&&B]KBcIk >%$+ٞe˒^!)ת'.{Í3yqC\ײɺU7M,,{џn=_U%$ȗ,:m]m{Ѐ/dC'3v}2 ].wbxZ=-C -:@ ‰٭e:^I-*+rܵ;ص plONnDr6!=wvxq_e{-uΝ,cb P2oN2< J299ɛW>쳳"WHW$ SRZv*cĬ0,&-xuh?inK1J[I8GlT29<4T<-6Mʂ$Y{+Yiςq1Y;|XC#IдrdO,-0)dvfWaE(]܈~>SJ bF,T2I K,S\RdE7"My)^u$+%gBT$UlAيd@BmMcL0 mp@Pg c+!>̂ ;`2K jPH;%_p,0#lb]քಟ ̕aKS.T*E.۽{녜ZmiiIvMuSAmK=ܸs[vw}Wos,Bض=yԁSeq+Zw}ѻd%ǫZ*ii~["sL \ضӱ= %[a %`8T%b>Vнu bR\3=oF-ۜ ״sCfs/GjWnɠ572 jDabq||\8.//KO~uVmd"7EeZ \P+j`%a@dJcGpD )/ު)~ ʒP{HϽS22݄V( e 3$As:ж;"dwE1dM: !Ȳ;v RX,J«Vھ}2U&.MF G9٧?3g6_{rCrLm[Zq( kz<ڷs!/[t[Us B_,TYkqEL$m4W=-Gsa(ײNYf B$حxBB9L O?p_ݴx-)m逸vɹ;~  yDm k*︖Wt3M+ ?b<ѣZjjͽE'ze% "o 0$PL1h'f3CsZ?Iy=aɚ}h.2Ŭ0bp!cV̄ Ϡdϖ_B8٥h >Y+" ̌(>5z"IKy-4 Jwv1#^2M8ҁa OxZ㩲%<v2 N_fC֋f 8J(̹f}[2)%8N᷾t6Gkrj#L }ftӭ^z=-y^6t]VIljB|XluH( ٻS2]6atyvW֍90:^&qwrh(ע|pb> 'N߿?4 Z.//t#O+B X 4 : 6 2:MrRdd!;TV7& /¯$ {8LDIR`"<3E)s-,vi#2^xDAZaNV1LҪb,rLqŏP 8HRm̽Lg({TJkc l1 |ےz{674PJZC8u 0Uv"\𺣬k\P",ņ gf$C",p୰ hipw_|yR&PKHCZ1M#?ЍSi n'#)I_Wmls#rR r뮻n˖-`DFcaa(,rWa՟{\Ρ si|BС $/>Efͮ/ "-sT&\Ax$Jo*$WA?| 4ls4E~}%?A1b66z kYA(b-%"<=7xH^әXm9v~\k_&Z/B_FUYnڽﻳs$H+(!!>|zlsH70gJԁ<徛 "a%~{E$ˣ.(L^֘#yQiQ' g^& (fҢdElB=^a#ajDvVtp68ue3"'|3 WH^`Fo$Id}6aims0ݜI覨lҗz:CzZfa/R(!%n0nPC: 8<%8(91js DNT-qb|\|H3 S+uDM s$\' Iy aT*Zb,-韲Λ#JBhQ~1hnH|><0x㍫Wrj;]snF#WNWA<ضFs"4 Z15H_\+;$W(VW䞞ăw=vnqܵ:k7ZKl Vfٲ[?ǹVA'L]"5}57n0ԃ+bPqCZ'NCFV֮xFhC^c! :% *q2>e8d,0H:u!.Ô2~̍p `Gޚǰ0ёZ)Q|M7+ })jRȴR]Gd*/$~LDfD:FVvA:r<,'TfOQ`s2> e>nHJΠ$7ɳ9fʏ)P)D+z +_&WLN @2U4)4ǩEox#ӻ[LZp' hDW8M2aPZ^^uZ֩S'''s9\.W. !f]9 J7z׿yweWzn(.{./_xGwۛ(7n ]]~ Ds/L;άɱ[ݒӭEV7=_T 2< ʍٮ2EC0 Qto~ Cb~,_,r/} 7Mў\v=6imOʄt sI2֜?\7X!Tݸr~ǻ7׎%Y|C5" 8Eu'''+`;r/^VFc8yZ^AMߙ %(:FQDLDaigP ?1{\GLF/J.ӥ:ŕpBQ)-sK҄YU ۻO[5YKw6gպ=.!m}I\*/yo?RpW[L^Hhlڻ>k¨d<)0E|&e9s駟>}ߡZ6\]{ AN|{{Cw?s~9emLjؾt}x%@su\>J/<`C:N.cno>wbQOܜzf#:϶8.ikwmsz]ue4\y1HiVo{sV*)Fs]$!WSųŎi ֫U56|{ce_? e [`TGX{%F+@dicR4!~M.T 4Y)52JN>|C͔ZLJߦro. aVr2I2 ]dN"I1S(ٍ'wE#fqo._n.>!sFZ͘/KˈJyRT\3PJvgM`݀YvPL%|K@wPW>=HFXfzL Fsy6Lpm%6}o0`XkUÈF$⊡hC~o BT.ݻw䤐V-..7 3gZ)(! eQN|܂.z+@yuW_uKxw[ܱSoy>WX+/n{$*3_[5*L3wRcQŅ<ӵ[ܹ޽Cػ2 NхT>V͙\mO\Rq-!i?8\y{/N D3} nSQ8wܸoϐqN2 ψ<|>?99)z/W.//%5tѽ+HW膔G82K\YrUh=a2mLz sğU4ЈYT"X@ҲK$E7ݢһ~- .7$0` `FkApX\h@*]?/NR&YB[e j])$-N=ҽP6!!jB8}n(i$@zHVax4Q v=SFȯ ̦eԻ3 'xf&C2">ifيM(\Iȃ!*VW>%Њ@ Jl*Bbj( oXݫvI._vXuׇq`ۖ_,;km!8K\iv,^=w–>HP('tx 7? 2 2<;T#AoFѣ\>HJqmBipE,XZ{ڲjЛZCa6iQi)+#lL`}/2bN |})LoO;R|xZf(fjV5==wB<}ˉJ.sٴ7.xb>/ Cm/7KgoZsY6[]_[Weϲ,5?kˣ7?Kr9i{/ ҡy@"! el%{@ kܖӪAsn)_wp&_7yw%LǦ-iSnh{Z??~XXJ_$,<~ݪ9WKqHF$'''W^pᩧ:uTxErߵ2C#O!)^EM0Y,> z|? Fؤg)ބ(w|xȚr#/ܜT'ǜl-l޲*N]saPepdb)T S`82vp4uw_JKHCB jk%*>\QΏLؕ gru$ܒ׻%O?#Ȧ^;-Bn9;n7׎ŵX.<0T,&Z瞋LrzVkZ\$ S>z# IDAT7wH2Bb >)-PB́rS&aN?ȂZAS`izASMS2`F%>*a@i}7jLBW2g&]KiWZ8#O msyGm^$,-fNtewQouy˲_|K |KNacwiYbJ"դGtUrr* r9bv]TVt)r@Py`~//<׬v1h_ۋFp[-ſΦ o9{w1]~ Ƀ߮C`] AZ-L׊ŗL,Z:6{ą~ @HE&NN\HxEZ9_&:v*w/mcێw}/p~ ܿcO>WVga1C9Ϗ<;v/V+r#O#?( WNN Lͅ]keSB6-Ӳ#€u0/k0U ,\z1P"0&ʂ8#>e!Bٶfz1U`|0CQ۶$2hi őm.<- bI3JuYr̴G3<9}lLF3 ƕi!(Q ?JH+ L3fF-&!^UdY}aЏRY\U '$w Ӛ]dHS(M%T`D#ʮa(%_ֶ4ZF-[gggy|X,AQ|^˙0Siҕ]6 !kn|Υӗz-+fHtE^z~~7^;4J;!ĆrYm h;?o^e6Ty[J@ NkxĶӊӍ6 绸cО- D<+zԅ72V&\PEqymSmke׵vEp;;~z[䳕L9 _Ư[_?ᛝ* mUH|u`qqf'O|gΞ=Z^'Oteid;<dbz0G VUY84%yvLN <3Jb,:0OieʌFf V4 dnÁJƁQ4TRuДg` )fq? oWC]+IW,Q =Ԋe@SrZ vJ-~4IqgTRI;zҵ(tr@EeKt@.Q%Ō0w$)̪I@[CR4DJ&()kBiY>шtŠam6F#t433LmP(VE[zb&~Re !l*\gǽܸ o320άg[֩tރcKӥbvD7o[s,lj8Gn2iNOniaqb령嘠O0g:*5 ]YnfqG4P.T*v 7ܰaa[^^^ZZˆYpb?Ϋ_x[:.VBV%Br|Wo>er|鵋󯞏_>=p^=ʀNϻEe7'V>B"1 %>mOf|dْu[v.ʵR!ܾ[a6P$Bܶmq;w>З\dbu(G!ak߱w"]2ax9ZvСӧO?bp\O l#OL@OR&kx& Oݴp) l2U QL%s,(ˈ1T!2aP/$9U ?hP")1jDnjp Fh"R+ _Hoyob\Zu@ VP4JCE4!LV옕i נiDS]_24T6y$Nƚ .&'$F> kaa2ߑ~dKZ{Ha4)mv~S?`@ :9z12Y A  IRNu`Nx"lHHf@v8C0QsOF35[ 2Th02ci@NTƘXOIY1Y}e/YAҩs&]_2XY$T~xKk]b&L. `(~aUFzb C0M]W٦p(iЭu{(oҍ0-2r<+7I#Qvt!yWmv]V.//=5ϗetiBWxLω5H gɻm_wӥW\*|"gf>[3m;vNl]L&5Fk!w}ݣ7݇)s8n+_=AHLatmtY,PrIrеrn1_pWu󑇿xܶ=HbH(4m_}'c5]Zy/ܻ SXCg|d" QNNNW߿̙3~j^"\hH'Aw=DG+ٞ:fC$TIy@칔b1k/J '&ѐ)+)0<0 h)hoopB. P0ba=9www~,e"}EnBK;h^~ߧj8GݺqХ s˯ur̼+%0999==  <833y^FZ^W *ͽLc'zV:u}` J_[&;A:-8J(Vwߧ EZ!¼n1Ev(l@sa.R-=2Q1ѵ2w%nmo#%PTv67p i7I{Z#V|2dL'WV\tyGyo.Lw;2&#geu/7hHB䅦̧^U} 0#l@>0Z$ˀy ݢ BbJ݀lTT ^)hDѕzonDtw pݻw^Zx@SSO1#MKBZ\o~ŨJ((AJ^u/Mx 8P煣w.%$i"=OG72z$ȷlCL֮OLעӵ GFݛ-nm#άh'89xeXxH.oK=.E..翲Y+~m'|F#/НyۺOhn´D7Pr<118Nq¡CokB7YxcDifw1F-ƣJ$?1l 52'- uHeBl*<ܓ nuQ:')@⯌-gt.>Tсm}rTClbZ itonD֘00vԜ5yg c''@h|g\YS3jR&Q& c0(&1%&D`ظɢSD^E5"U.GLp^2 xypaA ϒ0lHXƇV4O`K٠QzdG9RQb `؀#QFtU!Jb>Zj=躰Lbaciwȟ>yJQ=)+{;Yn-{KZDHe//4Z'Ibo~{p`RMۻ}xB8 kK[O=xԶtrgÃ;a/#LwYݸ|~zz:G ^ycǎzWZkaZ#4w%$Xb<ɐ6S{PSnQt  XzEC3R^E&A6lоВH(a<̵&aC~*iHp.=$aj_Ȭ[z|=r>ѷsiQvV*Ey̞\t)uu5&JSrݛu7FAR9 g9Z;I^q(NS+paqI3 +K95IU(0rw)+^f(DVD$ԤI`|~24H<nxIln'jGm)2U j`vc`4` 3H|=}U֝ k':t1W["M,ֱTYa^λn, ֶrz47`e[BW޿[K֧cn&ˤ2.g|p[g?~o}K%n;r6Ҽ& $½L( 9FD*BG'-f630L7b(?yk.:x zZJX#@ / Vw s}l#ȃX5k *GHA!T5,2m2ax:D IDATS"\k4^]$@hG!ݾ:^xF^LQe}uK'Lf2x' $SBmӢLa<( 8iYDAoNF&5Z62"ZįJPݽ{wOOO<jzeoI *) jլ͔O㧌Tn`ct*7x7oL֭\)<ӵ`B7سvyS[DռHV#fv0,:z:"nY;VmXT69ǭ,jNqm{-OܰBm'Н_;<69e-^Լ? <`mw6ьQ.+2$e :n|CV;::zY;|1z!MAh? /  %]bVDh8V!Ko>k&Y'؄U~)q!U)t]"yBCwRW_~w79ނ >[.j"b.\-@8x ynP.u3c%#_-}|?tNWQ۪-HRO +^i]ߏJv~ecJQv܆wt"N>gkHڎTƎqfJ[_:.h+󥊸^Cײ6[]<  FiD?$ R;̙3ǏVW)He;4+ "ZvrG]-j_f= WOGS(LV 4 65<дM0fZo‡?"N#&ۜ4^u2ݪmYe rc*bn=Y/gX >{zMi>8錓جS='G~n={aI+[N][w/wܶIn+w]N?L"C.H$zzz:;;㬽׃ȈwDTŸ^7ye2<3 N< GNZA^h]R^㽰K FdL[0m$lߠ~:J syPxB`sLa kdW0P=AhUD$}1fjV)Hc jƒu{ɑ˖|*/R0"kyt`Ʈ&,R4[ZͅhΖt:mH&fĨO$B!Hͩjj3ɪ(o۵DaFme˱11׎ur6w=jv2K= 9O\?x`{/$r<1En"AoR`Gl~fJ,^O+{X6M罩ЁϤ7N ͛7yRG'T*V6A.2ƶ\#0 p0Ό _MNb6;91$!Oi@aŇM 8gAf4wk8QCCv3H i+|. u`R`jTPZ_6LA?TABsKTփi&~W =L呦nH f>!]';!CơeBWtp@WvloOn[zu F@kOl\׭Ν;uTZ':?3Ő}$? /`0FF\}3-ᅉhxC|4"^hSa̲݁ĦRv@r>m AP1V`Iab݉پ?x1' r;7K[(كYk023ГS8Y! x0U rڋZxH[AMhwI3Zt2?T!00iJ |\+2fєXёDU73bL叆jҪQ[w P&uo{˖sDŽUǓxq-_&s‚Kkveʶ\DzbN"))ꆊm_/sh>E+r39/cY{ZWɍm}>rsmD#ʇM@qievϫ%DuEʀ4X<]sBꄓO9>gsfM31`jxu]& lug SSSD"' :֖fr^4) ::(`T{oI=eƸOV/4ky^$SBc4/CdHABLx~-@B)&N\; q͓M6|OẆ: ҈*~@*xhmNBC$YuXP0]# `#0ziCKE)fM_#t'dm8p҈87\hdC[A%\NԄ ѝMYMHͥzFdl0V1ZQBddud  *PӕJſLҥK|>JDX,brv4%A S]MlYao1]׍~z]δǼncdұumn-ߓm_-z-d|eTF-jumIe N uEs{v<ݻO9lwy''*]O@6b%t}}XB<^ Ν; wkp֪'NxJ333ssZL6``y+*t74 %^ `ʬƳ&J0" }vfƇ#Rn/@Lټ?ih= Շ[GXL4 %#~?#_i Y~䉥zfrpܚxHL_o {sefh &4Ifjmܛ= g@^3 FY=f DH6PMPm~#ȔІwYebW!ddY#[fx/f PY]35?`ULGJց-ЄV6WBZRFKl[Ob֦/ rnOA&^yOp[.QNZK[ӷ^SMڋ qmY'v5VSM&_뙻o|~XXF,.ʵ'0CŶ~ޯut 8 p]_3~M],TfGϼ7r|~VF5R%;vlܸ1F}`:4>>cSSS- D&| ϶0tu0e^CaipW2%H RDV<x8|(I3c[^j¨7'e6at;~OOO72ہ?Bh6  |!BI5C?>RH~9}BcGsmBZ eVȠ "Ԙ'Wtb|B-ߴ0#B< +L}݃G#a zFlLF0f]I p)Zi0dk#a?OBQ1nA xCbD`$׷;cm6mĬjCCC"3%cF@J?uٿ^s rŻurV5}>̿{a&BN߳۰ӵˣVAd0O7vyA0JݷÔTǵ,ksyC|-^uI_9vr_gR aN-y9PٖG 2KQ8@ h(.?5jt#捕fenXxs GHFRt,($"^td~G&Tx  Io jNSjB jZ $nvё+g0Dd0mpEjKZ{s)4t:H$&''GFFt&CtP(dRD|_,ߖԗ)]"o3G/XaFt*wjJox#[WRT;uXnu+奯wm&˦<l4O_HR&~O;g|`/M=^׺w]l:H*$(%JA`d!3l7no,R=zɓjhVցܫ <=Af2aDb".\Y^BNFC }sbM D{>vw6R4G(Ǭe^v wM0BG/#Π^E2D"l@a'5Na6e!iE3)eSZv &8e}RHciK#!2 >B^"sRx20S 30aJQV0JX0b]SV6a޻RVǫj.s]wttt||ґH$mۮT*sHRhSk<5=£66S:9ıB*͎N_ػo{:8ɤθU\]LUk{^?<ُ[\;A6n0hQH6zm/ٹ{:?t]2͊1* {a_Ϟ=ꫯzWNMM eȷmLuM5ɉO.-u2cA+S'?7T 7`dLAJ|^|,~T,܋q[a hٖV LG!L cs`El0S$j@dA&!2" ds~ )21؅MD8Q BMXp`,KمGQce}R>7БgqJ;؋ Oq3o IDAT GLc6ʂ67Wa'2n,{vz+XiA `Baj.JŶa>h4d2b^W*M  qLSI_tb66cKr-goSm7n?lyޝM;[ZRT╷}mornxИ0Tl=w}ុFY@_Wfro=r⡿k=jf{D]mX.Mv=h>LA`d2s^ܠ2<<|!ooqرcNi{ME?dsZ !/fd@`GbACl5{t݊R}VZo3:/Y܅~>Y۶}ښa](<[O=z&7cH/?^ ؉=&>G˙r f%H趿{߶?ply4Wlu¨wEnOOݻ7B=:00P_VfeXxll^m VtTVF}zAy(ρ!}%f-x^3S{0fPLO7L!s:14OeƼvHЩDXF??o,WMOxhR4͖ ?MEґ#d4 b4 tV\`hM.h60D+~&,+!f֬us0gBZxvq,|S *޸ j̙L9@ҧ3W䣿YK6.g!BT͝Nntt 4\-XP(Z0M fјXlbbbll-NexPH$rH0rЧ#K>wMO7ы|-&K#gԋ׼7i-nuS b"d2T~I-]>۶vмL=;~lN&$S?_':&ZnՕ sd_8ZYX+~֡iaÆ {-u+ʉ(ޙ.\(JL[SO=U?nWށT->$;Ca؍72'U_)EfNXS0>`RbB<T!pd?UJxX>>,Ёi5Md6Ϥ^Ma &X[JAK 잞²3/b*OjL4lw"%=W6`%u]V67HPRB9teB`V7)Ik*Kd·pO&#?>Օ21 GM(!1p0lÊ85NYAhs)T'TK 6o6_:eC6lqۙhFc|||bb‹15W/?7{3/7<ɲ?oӹĭ5o\5-Zcf n|cdK84 仿T<*^qTN$_>?L/$\o^z-b!Υ?{)7ʎ u:- ֭[s\Ц^ 8qhx ??RUhƏO$ ѮIIJ'N|ĐjArH fƂȂxh@nI*c|P#Bx 5 Hd\hNӍK0EeEWpCOn Hw<"/ w3<$%;1})pxzV2+Oaӈ2Yj#ڔAGA7W5@ +&Tˠ 3u,k)o,ke ֐DU4leuL韩e9$L++f,:h " %QZ3BJ/K4>H:Dˣ X9|4ւv}0MYK.9*7]<ɴ5rlpO^~G.'%K!udWaYeK>;_K[|{e'c1^_L7X/;ϼxuyr`^3߼?ۡTdww'=?W^M,m($l^^jnLJnݤc0.lAY^Tj۶mK&9W_}uddIJJr̙0g"nOq^ M @س4@&A aZW ) Eb*K9"dž܆(4K 30pJ}@5D 873zW"y%@TI+d'$5O Ro)BFa$dsBGD2>zhxaL %$iBž +-P0/e<(cda eeZj HYHʔMM˘9.Koa, R`:F>k1SaB 7]ۂ W;am*`;99yl6Jfff&&&4bLRxi+Q {@q[:cJ|S UٽH:*LDeçd )x0Ma *#~"|+U4 FQMو~*Pz M}d^|2By)&GY곹AcdeZA.% K5LO&)SvrGҧ{}[+rmlIyy\˲>~' -Foɸ\`ɥz_;܌6+BA2ttt[ۃ{ܹǏJ%uGFFN>=33S/^x0^- $LwY7?Xp(+RލTxx&`-d `ZGn8 S y0?ӴLL4; >\;_?avXZWBZE3c`'@qL턻u )EI h;ME 6X2(t ޢ b9 Tf4|˘H|["ȫqX? JK6}S\-%ƶƳ I-BTj ?u G1DĎTjdX2,H a|ho0v<(JOCaXsssCCCmFqҥZF JE۶KRPF& A!(ٟXzm1SoxЩ\{y*́ R{lW'IV\צ,Lk[N l_ ۾p]_|8M|G{3^Κ^ǯ2z 4}?PT 1;AirQP(rv/B:v|癚:uhPann'h_}>Ë <#ݐ-Frdh(V6!0paBȄHc`'ǏofF[<&ۣMb_v L! T`n `*%et5imʠ#S`oڴIA; `ևRg%q@*QH3—i[=G>Wh)ݲ}'.+#$h4A `֗ 2.h4xD pEyyDsV%e f,E(1ktxO~P  VjzhKSub؎;6l*LZ622?Cij6(>)) ~=LZTnc}>,tFԘ]0?o7})v"3~܍cOO9T;+L+3`[t;S}\D0>."x ecضm:;;o'''O:5;;ܹsii0*a<"-y'xȑ#"-f s`A kzLA %Z^!E*L8Iz\\f(ӵy1,@)9 E`#9^)$,+TpF!5E?%;0AAʠ@aB:K= padsoudsVoM@c># KHͮfE fs`0ſ)?\LbO4 3)^L6W*O涠77wڵZI=S#gٝ;wz{pDOO}Rixxw ƴT>6{NC8ח/lv.v]wf17Gl%>>)ES) x&dg Sp[e\dړ`Y8>N3j b 3D լ=jj ZE*#5w 9"- d <;5 G 6:5G,8Tj1‘G?n`vi xq`6 ~m{rrrvvP(ED{{8r9}SӠxőbt]]s]X8xY+k[n;{ű7Uض'_,tt|dhpklght8Z]/=p26eb[?soo#b)ɶj,M^ IYP(ݻyEeY/^ ^oLNN*KYxG[ o@!cGK).4aa>/)XT @‡ª%bcT$&:8!>P8 Chkb<>$ozr~,P !%@S422MJRv@ r2a&pU HTj$l/5$YA@lD ݅ Qr4E:٬0fR)/ܙ&QH/$OhȖ;a Y|0]u9[@w9kjMΏ*3333<k¢BǤ_ɔi13Af 2S4tZ6cp#|byޔ5ٷh*ňH-7@pD(U_тѣv/xՁ8&@VLLLT*555533!0{EO@E T >F^+/UP;;CHC'F3P]!S#섘0@MBJIܡ[ׂC@k&>^@4LUp'a@@5jsC& g5edZh6VVO~ruň/ݽk׮D"av>!NLLu `8*Sg&̜ߜv_e|ȥc_}l{_V̸ڕv2yǫwLL~^v_|h-ߡڿeŻʛQn00^[[֭[,ll… Q722rۄ*ǣaeC/Z~_yLG A4y fa@1h! ^S 3C9`lx)c4(^Bkbsa0*72t՘~'ZKIHѓ(Q>5)G@\g79jh,{o^  !C ͥ,`gr>̪&]1Ɣ%ʃ4 IDAT_"Kbɔ@a% FԄvY˩<3 i#` LŁFǰE a2p^,cze<:LK,Yef+ ߿%JcRfp֭T*TyGf&)z]xocF)2̍ᄊ>8^={¥r-T3^:p=;޵ŽfDNɤנZ:4iX6gz]w_g}^k[W6^$U\}'7VkT*s͛73OMVOȝ~Ν;a#Gy晖j"'bDK?>'p.Lt!a9aj"4(cMPŴ"@a< l.^V W OXxxzRo2Bw68?+`xadaZI =s7aC j*K  mJL3*qs يG ewa^u1ipŋ2e۶s\&-YB\AbR@ɧs6}㶹qgKK,7kWZ[[^:z=m9"c'L62k5ʹR׾11iSXTB%t\;?@bz~B4,txM0oڴi׮]t0000<<\׫ кuaddGYV6 W}0 EԑY&H=sŻ">PT[^火(.bO{ {a Ji8 +<4+L\S A` ;S #! )?8`$sMP#!W,Rkfe( ca84X;~)s |,;e|aqC0(/k^-.]q ^:t'`1y<q jRӂ5x idoreP;u (N8S32}jW'2ۯZDiLZv񎎎x<>==]*r]*H D"QTt\V*}%iP0(Ļ 5OW 2Xlpѫ對Ie^ ܹsjZ{{m333˦RB`vRA~dQH]ۛMCWXfl] r=yz=z+'l'/N4Yt}剽+]m;ZYG?:u(BرW*gYuW^yexxF /DݫQ20yDW,̵о,'I̫?H!:@F0hPPk@3tYE 1Pfj6`ҡnP֚LjÀ:f9̇ȁ{.?it i"y) Q5"Bae *h DmaV]O2>AΥXՋLDV -; f7](SJJyO" <`h ydx{@ L' [≐ Q&&"< fk&pρ sd7c#CA1]@ AmO9W%vm<@&+?(e#@%yۦmj###333x<0ޥWm#aӡ)zfߩ~->W ^~Gn&qə5: ym^[&*AεEYz~ K>zKqFvalci&ɞN^/euKҡCFGGiR >h|ٟH1|yp+0񙎭A 0P@"fL @ă!g\Mf0CLi EvLf`qxaL, 0ya~*EUt[3BLF^YnJb6UD@L^x.Φ,4!A>M)'DBejF4"ݖ{b,z+(e+c~\CfDf'"o!ESojf'9oU=wvڋޫ;=[g. }g~wd_`jtm;ʲ>he5cTA!Mgoo;<ylllxxػرc,JiR`= 6ӱyMfx Gf"4qK+œ_Hx}0O ^ώo&M`j  X0:Dc :#s|#e1 c0StƟxQ'haWy`3T DʃK@!@\fFP8iΠ鉕ff/T<|!5YR 1YJP0ivCW6 vlop0FE>2qx 5dg~~6W NZG6愐&OMLi6\._pajj=zRDX,&9OaYRA!ymo77F6^IZ-DHz=qo=-VM%l]O7~rhY}^B7]lGrphe)5 ,tx [E`nnnpp ,RF{mc < "CvpH&sC`lMiև|L; >FuH^j0 )JV]-5!j>/߿}d2饅x˗r!f51 OʧP=>8ߩ85] d c_Oe~|mslK H8x?rΥsGofZ3:TT6ݼy3pR,ҥKGdM " _ e"Y·b_ѣG`Iȷjf 6BǙpC}sZA801]L4w|Jf| `jJsg>gjxw1|`23Kٱ'R.xbjU b0M)EU5Z$z/f RH;qrI7fyȉ}gsXWfaų<V(^箊l.!wO'ԸO&J ,RZ L:23*` jt7u2ڂ>4@evT Mά«|[^& g|o(43<)^j>Xd2[n[GV JJ_ /*)BSIkzqo`)eqC-h0_c[n~Mmn9Zʖb[lY~=allO?33sȑAj+ )>l޼yƍe=_"-I,1j0K{Dp&&|r90&SHL6~ &l|My"Z rx3++8 `-^WYHauI=Ӻ7Ф@d~+ UIj@AZ 0e!>f m jVPXl7P ̔WH IAY@Q޾^@w&Li%|hY?$yf~#P}#S_N}T$%!,q'd-ZݻlڴiBx|Æ \nzzZ*(M8Qjx[/d0Rz5?I(38R,> `檁 [Dnq>/$b 36(LoC ݻ/2ŋ(M86gmݺuϞ=lֲ\.3RtLLLyYy>FDҔW>wjN{?&oҵX;w\xhr/=[G0׬ Ba֭TWpddij:Μ9sرYmI,̂ 섯?,m6ݹs'̥K̙3 <@xXAΌng-5f)!ӹ#D}RJddYRRA H ,Z<b$2pG݂=ٗ[+ZW<1ni@W$W\!r:x٠ r?l0'4Dx Bh-yaoR( ?Q{s.A #U@@.XR*Tlk*`3Ń臀hdi,5C#q0@ܑڂHx\\Z6J}|4:2GB0^N7VEv-h6hڦr=WP(_\.ͭtbWlHƞǁN'''ϝ;h4:;;zZenҵ,+N z^Tw%ߪ0ҭmtWzڮ̧Tt׶aڋϖmɵe9= čenػuުtT*k׮M6>v]ҥK?OO}q 7(^V Ak<()4U6W >ǰ.D[ j2DKS%#z 7&4aɟM7D]ֶݥ/O7~g}^Y6mJx{۶mL\*FR9tЏ㙙<DçNeffmo{cb^ڛK}݄v0~2NJ7]3@`0^d Phu?͇wu1fW~3>țxjQ3- NRz lL912R5KgM19hb0Z2G#3߷z ln l5/jxHEJ+es!0MU]wק( XQHNTWPm T6{ n F ||[[T9|(LJӧOL7X~ӧ7nܘJaD[[["(+x/Lx?}ٮiK'?pCv^^J`*ft?w[O>9ZY9g)5(72 ;;;o^,y3\Z,رc>x "Ǐ3^T^61l{'N\!!TWaTL|D6Ne*>)̑Ɓb'`4O,h0%"h 63H[4QE+e Arl3)eEF(~*+ %*nڴ)1T,T*^jSN ڵk۶ml~ٳd2 ֖&&&FGG̩@XiӦ|>Ch46_|qzzɽр }d:VG^~V~m) 7{(BuX懢SA0MoњD"cl5]T2XaтUϵ+Tհ7+u&PkWDR xAs@o+z7_fa2{!~g&K᰻nÁ_X_! 02GyKGj#M[xߞ#bOqHZow~wǏrt0¶Fqҥ|>>`v˗O8d֭[ d BVv2qm6Q5M )kouq%O'?[KG+9VSW`f(${2܆p8 GhyX5d\_C@Rɱ%KHbl HO}_ [6,H}8}ߛfݼ$W9U_}U-Ue`08666:: DEjdyׯRE.l.S0hhoohԐd"ӎtQz?tS=V@+d 0i%L)\Bk /Q" R0Z5%.Jv~:At"˫1:> <.(M2lgLA\K43,7jyJ=Sd0ͭ>xqnc:)U^dvn0w %mC-&}ߥ~ݴ&/iфϮx9* D{LΈ jp4h-嘗J^Ϸ 韀30\z͛GLNbqee%NB]/nT&r$R, 8Yh,|XT*<4mBSdRBw `⽕Zs?/v?`\,VS- l}(s=X7n;D"1==MɵP,q ,ܾ}?[o`VgBTRt(D\ OGFI gZ2^!gGMq0ÕKK<1LTS?GêCV{:P(3:Ӛ!^Ȯo2B_d *\>;Q+ӿa9蚊WLJ޸Sʛf5<כqB|og#†dq\,.bkLƜyiJȶ_I׈+S:F݅L])a`:p#5D R^ۍ,yꩧ;lggS<"Lۣ<jiiD"tz{{+Lʦ4RT=/KLN==ku#f @!|wwc[-LMM]|P(R=HKKKlȿf<Ԥ^[ ;@AC&3< 3RoT)۰P&@%hꨅui-/w>K/)XmT*[[[ӫN~~ܹ3gδ|Y&T*$Yo{1 niwCgJ_/nkPO~7̸WM0ԏD"ǎ[X[[N!b2YP"sΟ?֭sLЪ(0J q:}L, ʞ]^4W\cjGH.7) <\zyyYʛkauuukk'NE~o/Fʆ8jDR3C|K(="n4t6ڈoԡV,9]ΏF n3h=ҌֱlC~?GpL 啋N|i ,ᖮ&S a1RNvӷa(t03 EdR(2t-xػd޼LLƛiC$3J7; x-L13sWNnv19Yuj)<hw7Ǐc裏9}xJ|@.SJx?ޠ7W7P<7*GVq0,Ʉ\40 <5Y(X xfFY)S!V2-Tʴ 0yfyiWG־.}[: DJH5ݧ@n†O|9x cb41&ޔ(7C\w -aV%jʬ]MLf!oMJol8mF@7#9?S6[U FL l;i?v~4[v:gwIADgդPT>p@ S>\0n#GB*p1ݞSNb1c/^Z49r1---׮]}Dn!L..."%fy*k,spbA5=gEG%Jy`V>IIP!q)A-[Y0z`;ǒ N1bR; yS)g\09*kx5>pNqIL}X[mwB̓=&D;xTdMs[]&{OVf^|ax0=olw, ~ÈjNh8Pea7 |;7\wxBhMp 8Dw _:::z{{uRήw}]]]~Oܹ3;;{w}S@ȑ#;;;E?34Ȥ6M[ӽ4چ9"Lkk]R<]\,p3 / {s;|!s$2<|HTs%ͧ1NLˉs|c@5 ˀy^RŐpT. /%ajX1D]x#U!SFUKMv*#ǢcA_{P+s+SP}Ԫ|8&aL쿉W" .<2c} @Y &0a  ەh`l%..W}w3jw@}kӯhyI9lfS%v8Wbt"ظӤ݉h;=J|B-L&Ki1f~j\s/ 8t$οj裥f8qjjP(ܼyk||CS(W\g?;00P BO~LWj UVkjS6esG֒```@NZ*]611!E߇X___YYQx"FZ)={! 'yt @_Wf2ﱳ>L,&ܓx)hLM EÚS'gY"AnZOj9 vmBx-k"&oHFIx2\2  𠀇?]Aa^ ۪)Ę/xpzfC6x ^yq <`'@YGQavl.1W~7#UbJh+ZI(ىW$d}dls^&$"WVțcnj8K.\pUJrƍ|PߡҲ駟?sppl4 tz{{TF!M^LLzu]u S޹st:=;;Dr8p!}N2i`<M  r^٪pU';}y@|V.E2x.C #A͂Y4w ֡&e)E@DY[4M''yK9ᛞ{EOb f]_A3`TF<mP=θ,a![h|Z}4(^Sڛk;tеuĉ~_?OӧOÏvvvbT*C$Tub~IIuG)"`_יLYoP,gffvwwKѹxxokkr[z"8S"8(ƻPM1$bۊP6;&T L^!Ry1R#܇Y&x!~J+7`c=$oاPzSqWa(q9p{h6x_&x!漻BMra'7'`N8]0dMi4MT#0SÆ|{&)q?4rƍ\.ܼy~G͛?O`vtx4*Hll$)ɡ&CO>-toDnR,//_rŔ+wkk>9x!SBWˆ#w/dKjB߫>YY`Ӥ@Ϙ+!_B9l f5]myV.B*b[ґ(Ÿ_*ܶ05}|z_zSWWs@Dּln "EEܔV? ۡFf:{X*|X*- +.u|<N诘>Q*9̝>}ѣtr<99Y(N8asDoo1R飏>|ᇅ=z4ooo3oImģxf8k701 IDATܫQAwܹqH7lmm-,,<miitWJGH#bݖm5FPؐbh{܃p5ȨyGq  8q~ԼSE3KqUG}8̐Jio.43^Y:a#Џlz+l,ŕR?0~gd )\%[q\^\m>B*C!c󝝝t:}A1A*/y=?^cRT2T*4E46ŤƧIuxf1sss|Dnawww~~$p̙3gϞ52BM^F;}-]'gBlfOى iD'" Jvwك&Moz)32w iޅ6.x["MBaFty)(܌r( 6'2 KHժmlj[7MEE)N+&&DFBH4>䓯:p%i*裏Μ9k]+ȈA>177|cݝ;;;TF?wEdҔ[̴bOG}bqnn`TՉ 1\.ܼ5Vvh$nNfrZSG"阰P1ϰYAߚ; * x*$@nŬY#aޥJDg1a8;1;ZhLD2^eeSv"oҦ+%t2 LaB+\_@O.M"9^@|,ffd:y `VـAj7(h,'JL&SUhD䨁*)>x`7n!1kֳG0!\l'Í>:&=yi6򀀬M28Y0css5ya3E4?s:@\.߼yٳD"1<<Rϟ}}}ݛÈgŽ0'nu0IJF5 `ѣ}}}ŒlƍsssXWT*k0uU]`_tFq$immgEN.X7K7.=N#@ֈaGʻ&`2fb&0KuG4 O l&nkjy7W dWlh`ʼ:m 7QqLXN oBŒ˦D@H|s@g+|HhP OSz涣͵[}ٟgso~s=lL&399722_\?f/_^XXx衇B6q?j*AWA&I)uݨfkkk__ѣG1ONNN޽{׿Zް|W[۳Iv^4d2t_aym怳zcURͪ$ӄpz 4R1'oX̔_6;XRM? aǷq 5`p4hҬC7W_)Q+ i\B!7RAU<WN\.OMM---={ȑ#6H $Co'z!d*ysոJ+ڸ[WɨQX,v1+++W\Qdٹ9Q[TYuͿ{wqa24YbFpiIp"Z)HJS_4*7ItƬYE^%$4?y:JZ#B_hn:d7Wum=uY4 pYtPM!q3+{E!S#_aRPl_Fp+g2a[ɰd"|-Zyҥ}s>&{>rӧ#֭T*;;;###]]]ٳgab===]]]ۙLN9mImNlooŒT*uʕMVWT*fJssscǏ_՟R`8YtBo`k2SRj89s<:yRUޅeƒ`@ѳq-Rm|2-l+kR`dh̅mLighg{̀@LG:nu!B*7 u# fZ̜aligΖif3NӯM5mJ$xCG@```+H *cf=N7Ԫ 0'KիWްj\H2r=F/4b=HDj"P",\:!Ӻ";P'iMg0&YND[ #T`&m֩\lŴL7WXaĉF2 1fxp]pU/VbH MļZl^dMs1+@iZc$ ;Pt<^PQJ-8SVu˳PWQWd1@BB)3kֆfBZeJsŠLP7JM eR,  [`vvv?u$333ۛZ[[Kd7^6B !xIVyQn3J4Hȑ#gΜro߾ӟt~~φ駟...u7oCXVºv&xf+HLc{+Tl: ?QJ"z:23,Db_q- 6ⅤOmK,Ot)k8|0yTߴ OS\7. * \`c6ެs-d^[y sűRx5^+U9[:φUcԐd]:qxL& BGGG</ z$N>ggwr[n-,,9s`'loo'Ad}hbkk?3gcx<R)I|%YYؓC$DRXl``;ul6/puB055e\nd2rp)ž{}}ݬڇ0VAG3Ul^xlA;XXE'xj= 14\=P%7|SMGTj^cU Z F-5˘\@^2'5k_}m}}C*?Bɞ24pO x700]/5PϠ\C"n{VoUW_ༀQCUlj~YΌL0jh!#ҰR)RS5Mrz=h4笟>---ݖL&|LZ%h4j}LMM-,,={ɓ@ wvv2KZe7֭ڹAJQal6ommW]\./--gjuuummZⳜ9sOOB-Ō0W 5T12!Mi< 11cr.$+˼Bb,EߔTjME(뗑*)?Ph/eS r4g^#W⫙Ř^gXl0U,`> gÝ#ِPwplnM* d:n]Gu :k :I)PV*&&&xVWW߫l6h H_3P V9Y~ >|f4>|#uEĘ=R)dR?,݀QGD܁tXU Vƚly1K[%N$_ɿl 78ni#ďnFٮ3:kq I٘ %H3>gyylD_h d$vev5sp(3W:hy"^y K9`)A Y&p/'->bqzzBT*THv[O&qF"]~}yyi'S_7QX;u2|~~LwggGMDG%hmI}=y"w{{ڵkT + D"ajwll-W. -RE,*J5 "GڦxzNp|+L{C]٘Pi ݧ y aVf Xx(!0u+ A?3/pƀg"X튼.-@LID3@F@KʼY)vv_:6(/ex~=0ey@: ߽LK0ObasP3 1`?ȳm*r,(^1y"Yμ$OV >Y}" L E0NA NԤh( )u;󏾽R j.LՔ=;!U_!TN)3~? &HX,fup81_ԩSʝH${ׯZ/..r9d}cbb"LzLp)xIVޟ)FFFN<)tr?ރCR|xJwnll\vMߕ谥4Lnmm |` W<[1hbypuIADx\"N!XFm% ^5)ׇ,j($M~Xt }(0Ҫ#a|I*K f.&%ődIh5$kDR?m~3_z!eR H-pzQC>c?~jb6fxk_ZKKիW:0݅jj=J,?yV*L&ST:::3nR  L^x(- H,doooG@WʆJe$ΛElRLa2MCT̶ SSS~]>\۷ɤBݻwwvvg.]7ɻ`[ޯP~ʕl6k_ލv\p&T @rP7&j}4Y=u]Z=@O]PLx `^Z "wJI С̂İ9^w#pK# ?_iDH#.;(͢Ӆ.R5Uw&~o (7WۍX`^ܺ}Dy0*(@P }nπΛZϸUMs&2/jP h>|P_k½#j/ A:>ܺug]>,ub^| .|ߵˢT*ݽ{wii2tzoo~G=`{{>=s1ǏRd2It3FeS(\^])RhtddDҍ7Ţ>cwwwvvV}bqnnNm|菬›KVr9!28MHtԤ SPU)]hBk= eob{cҔVtLPSKm{1nIz<ˋp'ow\ 4knj2ƤH8oS7z Ƚ/Rܐ(ٲLkp6cn̍S0$M' g>D$Ӹ0{ "&&I?œ#Wpu:0sC/lmg,!Loyv+AߴcT@\&!'Fh:a׋hbXѹ΅Aa[PBD@3ޯ.4i&11iف) "΃N<3Э!lX_xlpC㯾3>hL&Ӻ<^[[{~__“'O9sݩVp8ktH@v73aJB`ФŴFϟ?z(]GB!HcH\qC* rw..../Q3=?rk',0#t'H,..*مKcccG Zbxez|?)={ `/(UiFο(%:bBiy҉i %}Y!KL e д5LG agu(lL&ڟi7sÝE+)1!w)1k 7t4T*A4̓@)xY"xfVAM(Ӂ0db8joP Ɣ\c.N;Eʲ0K\Bg?C6!KqODao䙀iE)3F en)ɌEQqjufL\tBBp5g$${v]5@مP[+jѦ:7ZGMǏ,MEd366larrիּ~=11mt&q_tW^ śH`ʵ]---׮]KlVlf!`|U7(X/_1|bǨ|Y6 MOZ800{Bɤt{9fwVpPO w,-% Bnyr[ xCӪ#\[!C}t7SΜp!`O`kQz\/jK da݉,^&i$]ejnjJ%7fŕk L"K>to:˽yGiMJ aEDAcfK\%71y^Ojy'JRqd\a:::岦9 ۷o+iVX9F?J%|8ԙ ts8Ԫ`jp.o:K.[XX}}}𞭽X,® R_z vfAH'?~GHp}}>Z[[V+Y/+P,痗uFo}[O?t[[An+ۛ|f:!܊7zem,&-(6YmV4դ[I8pxJ r RH>1Z! ;S)Le 7Q^QdmLt?zQ$#<󤋘0#]q0'OS^Z5g!+ c6oR4eV\̓0%NKmƁWEl\cмX O-UyQ*r/S.C%ypcz$^ f{`^-ƅM%AZ W f) bUԇ,onKKKRimmVNui$h?駟.oߖf](vwwiCa.}$pPr` É!: K $ZtzqqZ /ӭT*Sx xJ"diLd(pĘHW\6/J2}Kjȝr:t>͉' zzzO;EfSʂ б׃YS4+R~ [ rHy1zgt"%`[bo!|ew FT:otMYx̃@'T=m1A6wZC` !!S0~.o3ι{|gEM orSwi5®>, ?"-B#6G-cpZ'7hqn;kkPւ5)̑H7l.!t:}G}>jmN+_yg}kהZO6?ӀUr9Httt9riQ[J|ΝclJ쮻j 9"}oߖ 'ruH$VWW5}}}/s0p8ǝWWWoݺUT0Ӌq4p[J WeG7I:hȚ>WA{oq/Z/#F?;K4|)Rj@G}BCy|`{6p3>/dP;f,3IxJ&91^HPj C`0QE wTn%x()f "t-`R_ j L1էBg$-+Dw*į1ɿD1'd[=y$o[FLpb|(Z(mmmr8kFeSsƋO>[0ٙ777gff"HOO!̏Jz ѺÉp Wh.d7f 7/o\냏xZ鶵EU} 227Ni]wwFUOR0/{D"a\.777QTD"~E(Rü3;[L&SysӲ٭7P[k D%%e1E {gQP4RtZZh1TE{DG[DxOc c&PTG`tvx.calR\?̂b=Zx&) 1y:KO̍>c ?I1S x1p#މ> Y@Y\>pvJu9Q@,62pLHÈ ״/^IY'5`bo$]vwwSާkQ?Gu{Hf!c׳٬0/Q(ܹJjuqqq{{[ΥKyobtww>خܽ=!i@CqV\mLD$2Y}nFge0aB\;Lx h(!1(ZoJ*_g7)r1Ϲ#`弴@c=Ŵ6H?h03eќ;KsF"o0S|T gJ 3K}WMBaigOThNY jh`o&[,%8˛vi2zƇ[咥5/¸ )ʅS&̖_uJ~)O'r JennΝ;eezqVsٗ_~'b#, lW.|>{Hv,4A\yg>Ns\Cj|jH=nz/5w8Qd2Xl~~>H<XX,rqnmm[oL.R͛sss/^5bq{{;Ym} Nǃw_8(ᑑL&H$|UV>Ɨ1SvwwbVVVܹ#uTڇHR333LlQbq~~^3<Oww NEpkk[VWWÃXw5zggplUڥ NFD CT)2cf 38Ç5A{s x[Rw:Gs=vu5u}Χ ½- ZI3c]+6ͻ JoM+KYaKt"٥8@P('N<  "H&Żhmm}'/]?я{{{#&zNfJ I:><"|p^OVp?ϊ3#BrIav-p.,R@F=Jjaժ7¼ȼl/y>be'3nHx0?Yua2|6j W_}Ϻr̄SN [?xn#ڿۿ?8ɓ'ycο:$noo^Vf 5`ἰقg7yyD"{8֖uӯ.O ͫ@0q7߽{wcc^vu__'!Ay[\0A}YNx+P4m(Ju *266ϟ={N!Ń6OK&W^-˕J%VU: ƕ @=<ۀy aZ0 @H+/%Lx<.Y!WMuiK0<0 "&y#/ tlS+IUnX>}3~.L`2aՐs섂KU 8roɮH Rb\.[;v}Aba=N Ot$g?/^.;w~w~>jlVCu;+WO8!|Lwtt4$rl}T^)Ȕ cȸ1F̸:;;kN;??L&ͲS,>< D>Ĺdޖo޼i#`dt t} AgY(Iy?Y=ɤPVnpu\:L6) :}6goL $kq*l:QM\j޼SY_}ڥYrD_nV- ,[g._:"8#$1Jq%/)pq;T8P >@xT<Gڻujf B, Bccc{/k`T*0zL7|7d2_CCC?x<7|T*a̕><'2}xREf FX{zzE'YTQ(̖\T666VWW5;w_) D.L\rRI uuNLوOe'$5|#OH&ޅLaaՕ?PgԘ'['4;K-lR)[1#҈1k gذЀ :oT:\#0 .:hGyݫob"+ .=ʫ ovjXd`YFR3 zKF i6K&`Ps*Ciyjjr ܛ܆0^LfCJFKsư/f28nFm_|'x^{bmm7<?wM aYsu?䰮]__?uSh}bOsLbxq|P.s\ZթNӣ!F7<kH5Bu\wؠc[a,LL|1:ݪ h^v}jRÉ,p ^,|c) EkNCȸ*g.y 30lxN 0Ee !j0P|,JeQ& B0@RC>54-" Se#̎S8L 5@yD'H9 h'#2bZ_)Zi"uw T2QTq`RY[[K&]]]vrK,>0y.K_pիWlt޽Dz{{!cw#aWuB!rBOFHa:?N孭x<Z&,u?%(r1 uuuD*RЇ{޾qL&333AFO?__ Erbhrffƍl:tc\1W.pU=Y/EG"潼Cr Sg`V}n1Ba(2Jaq36tb4 EU6aL0faV3H ': +yLMe0N@>@6If7cE( ԼqȞgk%^rcۣNބRA;<0Cje!\_R@>`A8H)fmeFN ZuaZ2u/d_Hf3 9zжɪB!r+C'. }bՙHyAG8dV `pbJR4j[EElƽGzjT0D"?ĉ'O trlpT[/g25T cZ&݂)1Eq0򵵵i+^ex1 a 'Psdow2̝wTZ]]Vv/DHb/ܼs8nRr cd5?8&A(xsqWFjQGhK7ŤF4LƳ삈`. Q)`#,a65i=&Sr!zJaLjeTvwD-hx< {֣y]o1^#b1S<:?1kLDg1{MvEsi7NG6*Aذ@l̼1Lj=0+6Rg^fӒjXt3CsTHӵ&F.3M3ݨ 7m%qˋ'a.•B=J KADYȽ%_UڡRd2H$ WVVN:5::J Bb1J7p&!}'x_\D"ӟĉ=qُ,oGRiooG:}xD"166FD3P.[un`gM0EB!%X,&KQ?(.=ysyBMFsN\ξZyp(pUó֔B0 om" =Pd`)CZԈ_ g "\nL~qtШ+(:hvW/@ht ԭM /ռ wJ8s ۦy۹pb7OHKJ\D(ވZ$x1#=41 =c ;c~@Klgݢt1݉|`}```>'+O<~k׮)7.^}LP(vW?(˳aCl6۷̸VVw2,X+R/--y5 >|\6[B*ZZZt|?>)-`0H'(J333ŢC[bQ`at ZyAtT<}7 LBqu\( `gg= SSSZr9sJ![佄➳: %X<4PHf!tqeHJa iVxKH-0n?OהGTYJ+T oK2z3ۥ$ɃkKB ԐeS[F$MF[1mgpVh.Flx@2Lo,8t8H-tJȗq3o*=o4; s:< ScxKRiph"|)esMjf B4mkkK$lj@www4MΗ5o{{{jN_NNN>####\.WP("駟;vLX`]oXQR:k1pݚ:q~FDPH&fךJh==\?AC(hyaxkkk"q߷04kT@ym0YE!TmV1N:l(0IaT~օ**@zu+a@˦guS?sg]S>HQō*\Ze-s%/D2N'fT ߍ t65O ʅɫH/cv鲄}N?"oM˩UCQ>Lw14«0Y󿴈b"&d~J1 @-w&4@C)6nT`||W_uh4j9qΜ9344L3+{{{s f}o좽>|NmB @Ҍ^y+/Ƥ:00022bYV-u{d^AD[ͭ; *U ihfzy\0A}"}\_ZZrԤ fĎ ϟW D"xE/]5JZ_JT*#HTq™3gtp{{{.sū”Xꯞx_]1ݻw=C>2$C[?@gg@ `鱿` ܋B6kD|㙇D"є'r3ܜh4 _gr흝bqaaazzJY.szmfI3Ah|h[9eny2BwYVg!({fà~6iÔ)p P(" uo֘p:H9tZ`g=`a"Hf͌΀3.簔B_z,"ռD("k *\!Ƶu^ݬڋ>7q/sgaR2Q۟!}9+-?G}tرSNX,ѱgrȔ.\[oŰ (/_s?~Im_T0Hև>F=c:iWEdrjjJby--->Wh4U߭ b1l,//OLLXNl6k89?ZBoʏ7{02Çp5j ҥin8#ši]pFѺ!{3rJLz K+Ny~<"3^Èlv.*ͥxvi's<䓶fYӍbPhyyyccĉccc2 uwwG"L&c=?LO\t7я~djN|}~Z=G\κCZM&Lw?֖YN+&G}^$8 @4D"ģWĄ/ { q=$,?`A1SN60Tf3D.bݨKhwmyǯd̲.4)>Wot4{p\{kaЂݻK0^D-Gq]=4(MM+On7ᓩO M0a[vY(W^1 'seJIQ X #*=JFKӧ=JP{{{ooo.K+uX^WWr {1⨱&ST*Dbgg'wuu5Y|*`Q|`\.////..?ijho~NĵX,fwf֗bT#W@Aц0:^6;} -2hfP_.\y1̮ṫ5W}B֘ow>1"68|3*ـ@P@;ft8^9q9O|NeBQ,7),=Bpt Y{V@ÌyrdI̹`> <0tG^x (lUjNf5q{&EW*|> +F2t:hE<ӈ\фE< .LOO(l/-߸q# S̟bA~JCH cMD2wuâTHe7陙gU[yhgd|>Fر3gy1L&S(?h8 魷dPxw^/ytt!)T*d2j=P+J%l6/ d2977L&vYX\\\L&tկ>쳱X ^8 @<=111,r5zox&>#Th0) 2#^ E0Sa]H*1/0SljB|w>Fyx/̃s`5@F=p#=Ѡ۟6b{ L33#%cu!FZ ]OeZzL\ OC,؜;adNjcs>oP\ZRݘtܷNMz15 {e .xzVލH^ֿA ֍bh9g2۷o' z"?Rg"e`se.lc=sx8u%7볧`.:~f5`o*~/zп:QG+#7b]!3ABsb3[szsmxU…P`n)*.rEobbefxh:ƂǘTq9ΌpmSku:zG f7~@ky)g#0G=zL#؏;wຽ?Zoyy)cطgy{޵kהlii__G1.WUT*l6f莎`0D2dSR|Rd]"ԸsU Y⋏<ڎNrR)P{^Tql4 uwOj.txaɨ!K;xa ο`I^/*H؞k7 <DŽsBT*ᎎ|>駟>ˉh4,dݺDzu.}ʕ/~~߯)X/ZFF@ `;kakŢM|>oO3ʊu\hԺZxC tuuы`jjjnnκNzݸmHukCkF}^}G )@_ j@HI5rLcLJhoXBbdʀecg"dd֧3ENP̳s4œ4#h}ow"H1CR.qfNMAtn|b|s%J0L }džc'yM7B+et6F$of!";/#tD /Hqy7pcbqpE($Z,Dnb;Ԓ#b+a9@H@ERi}}=FQ1_emnnbSȉ;!w}K.^Wyl7裏/}L7 i[RqKA'}mcmmmpp0L-h6^\\4_p|"no MMMXK9H97662mG5;\^DN&ā9dB_R*-Y㫢 5z.2hdgeSf$2׈"JھXN8s_WMRin-qH[Q(>^@QoQ,WWWp,euuuLfuupj>=K/oj??>|_bKKvt B\l]3\ݷA ]uOdA—A ۔Mi N8)K P5>ɛȳWImղdI˹ij&i(f#6 VC R")E\;[RDi䋶)afDF]?ү@ 1EdP0rn0*2uU=( C HXwhY^+^eRbW@oZ*ӃwbHreWcXW'#6J`RS +=z[~`4|Vaˢl%E"/nwwև r$b|jjѣ7akORsTcc /O&޾}Ν;gOj Irs.QdW" &E0'7 S )}q?cxJ-%GZ #:WzSE~qc-sӫTOL`d IDATRIZ%PzDLTz؆u7H8*{#C^R󯧷[,&zʕP5 mօiiTKldU"xǓ@W}̙Ѧ >c +++~WWѣGwcX*r.ɘ/˗_z饹9d2o_C{yu|BՇ[KKK MO~_>{,y2 UautttpppK?+5>|(1%ebJ"LEZjqĪ-:K'C(TE;0Ľ. ؠZqb[-k0#ڊwU6,f`;')羒CcX,nСCD@ n>G:kpccM\xҥKkkkzeZ^^~/| 5p(}>|lid27o.---DX_XX0sɧ~S/9(a,kjj~M$7oLRZ}"w U:˄RU:=-y<+2F#_>/Z4EIiAa_r҃aI35|:s+abJz=EBmmmLfmmX,ޫO9s?/~ b?ӽ裏Οi ׇ\.%Ç*DPԔ>}]p&h4Bto6'r-KGrk]dE߸lҙ+^:mNYpVf0þ$Ύ-JɎͤJ'fMZԒ(hK^speQnI:h͌Tձo/ J\/~3odKmCNzDi1>'2/$AQPbuq'IPn*`8X7TYM#* .@*oOU<9[Gg2}PB$\Cܣ()Ȳ[7@?Z3% 2Hl> RCCC4}}}t#&D˖h`b޽^8sŋM}ɓ'~am hPrc>|l ܺuT*522LVX,OKՀ;ᦦp8( cccov'r5:DrszݬEӀm50Rh1XT=(1>*Gv_HT1EʑH be=՝)nM*R3lOdev9@|\|T-ۃ-"͎}'Ϟ=<`0<;55588\*>|>] {sE{ _uTe@_1ʵ_ /=kz-8OltvM FrsvY=mԸ0Za:7mPU]تt|@}L1 MNN߿}L.GT*U(,>c=/|?ŋpyy|U@ Dl>EևVdFFFVgXbرc>lGGEH8Ob1L&3g2l6'>Qm! Hn{˙ :p(ˊ)]2ll~1P rvK2R|s ]{lX!Mo6\ݨy_ML0?+|\P=%d 9̀pD(c?2m)zsm)"p Vs'GH7"Rc/Re{a`/8}KTQ J/JF#2!fŕX,'&&;sNp8ޞdRpx…{쥗^|v?>w):/;>]XՀBpΝqCraaa||쎎g}z"D e2 &K4ZZs(U\<JZ2yLFC^&L z]LLѫp"R _p;0\zL!`ajq&1` 7:!2yԷao~_m; mؕ;~{sYCToO) &vZI=*;w Z^}*\tnEtHF]L^J TbFx.з݊T4YSi+AOͅ>TD,D"L棏>joo{{At@0xի/АvKW^=u?ym",BP8rΝ>|GFF2]6Jbϟ?{,^P(\__%5<<<::8 B&1LІ6wd!]tڪ=s–ZMixULt)+Iz4w\pJ#W7l gߍ&d E(_"0=jĊ9r]mj@XUI7Q 2WdA4jjC:ap7WYAwu-`] ^׉_TEp<_rw}FЇ3L,O$/_9z(ub}LweeyJcw}ʥK.^Hdx{k_ځ,&2Hև޺u+Lڭ\.7>>nNٳϟ5f|D@EP,m~U,WeW .o ` sYR@EzjuHZ.vS@RZUHSqՆ)%rF+N9fFBH43% $_uW8ͭ@hvܸ $dKA]Am8"k@oȹi/INnApW 8 [tK`" Ȍ؃⡱MϞãܺ^, x[|;'=]O 1BF-܉ܳ}\'gNcԢa)dfHDZRQ*VWWp4 B?p1 u oc>=؏^{MMرcgϞn4mhhX__r@PuԔ]X,:>;v…㓨uDO䮮O:W+ *E8QJv{*|>kYmn_=Wqk,Y 4ec>n%`W:[v`H,ghb*MyWcILńHz,}X69 ulOs!"ܫ1ɹU!= ̥NRト,7&`Kx 0kV\u[̣muIPmujbX|[AGdVyIRTEaǮLpǛԹ 1iv!?4Zb_{\GUGl%Q#{zT,,\@; mˇ]7De{oKK WpGG*g}'_vM7oG|h4jCrBauu҇O122lքHGGDž NST}}= cHR&Uݺl_|ի/vqzwyܹsg,Y8nkkd2`:oݺTʄl,sVrgP(ڱa{\jr|nm34DT3|`ē s \%Ԫ_JhB5kTamU{#jGUjx6+NF-)M)HsҮQ&*Hײ20&ӏxs 2\{L,bcc#NgF1ٷo|M----XleeEt0rwM\t1K.Ν;xźnbmmLׇ[d27nܰDnXX0?עxA2~Dn& `7A @['i]mPYfMIwX! Q B{bb>>nwt@ui]Zfevm`*nZ-cE.}.r 7 n}rBz% 6zUr{햃j6񯗳-v `jeLT:Oz ;1eT*Rp8BѣGwr32.^ ;?OjK܆wI H#A1&I/g;9YKK#!Ѝ@\jr n47Q4= lYvP.EV+Qow$60k50:~94ٜt瞖VF M ;<T̡_~MDՁߢOr\"),ߢ_R&@6I- CC!@4_*\]DP@Ldd@|Ώ;w  l46X.F`cc'r|>NB \4i])E31 LLmrmsk[-Մk&brxVkzHH`;DܒiA&Ij"E T6aj: s:@Aԋg=/W&9F2#F(0(8iAzej7=7"1EF$$T\1 ▻Fd {I q9y)D2vռx}]t^~L7L~===+!i[>|pdnݺ577g>̌!'O^p}"WC~w67f2_YYqf2JJPaGkp`ۗrW2jgdij/ [y W{s`5+P@mpo/V g8Tʢaɮ;jKo\bT[Szۑ"X6 ]mW"RU?s ##EZ(ş|T bqyy9777۷oONN>|x׮]TmhhسgҒ5YO?3g.^_B>ɓ_WѨz hP([ 'r3ϰOjc:~\w7 L&sM\.NE_]Qƥ `KPg-΀EU%a8DMΚ2dYOq0 x/ݍ~#ӇeR>MwTQJS/B96J !vBMݴ,쬶F2rݒn75ңjvxQ^jg֫; oi"Ϝ6π_Br툕A9+z@ @aKKҼܴU-,ڶLJD"666k׮uvvq*禦X, QTݺ]]]?ӽvv?ׯ?gΜXy`1eYÇ[nyU244dx5]p~"W۳$Fmmm ,B0666::ꔢP(9jHE\!ȥ5zP`-E*ݝfna4^i֪j1z/Tį'Lۯå]s/`VPUL+k(. UJysŻl9]:Z,Ұ̟} `nCm>*>Uuh4H${wG"`0ҲiFww}'Nx7_y틗3̛oXp8 r|>﯏>9p"g١C:gϞ=<\UDnss "NMM رT*Ywx;9l )yIEςÇڛk${Trhp~[7#a`j9@xSj79r:zex( >Eo1&]L(u |_ I /.zTc۰vSWRu=GP)u9NnLь*@S+ n7QsDbJ&@\D]EӻHf#P Ҵ :LM8Evً: {2Ս&N=R1⍭#>666VVVx$d IDAT;x]wEuP({L& }LL쓁@{衇.]ꫯj7B2|饗z{{oka٫ù\οxD&[B\lH>Dn"Ms`0HIdrpppqq!d7lB9z )QƵX,TTˍcJ/s&'wQ{d5@IFUEdELQ@&(5'we[ѱE+KSTLVC$C\9`JMV/ۇ*(S|?_6[6tm) ȋtTKң!22cKmŀێ|ŶScn˝ƑjfU2ëUF[Qy:0 zW3Dryesbe[RaJ֒b)N&VRrpGh tV%H2\UDi<.DՂ/ &knMQ D"Ҳcǎ[nMLL;vht߾}+++ JZ"{xSSӅ Μ9+\|YCCC7sԩ/vӍD"9]̽>|&oeXXX5$ϒOj/"Ťi׮]Px|d2im>"P)˖YO/qP[QEIVE!s]\"0179՞Ir+mqd ҭ dRãϭZ|kK PbQ**eY }2# <rT0m!l!ۚS›}[G@a=ۂlF5{[*P%X@h]'V)ZPҚވRFJ-'ppbLEEVe䒒ONԺ'Zf#Չ&2q!x<ԴTݻw_իW_|Ź9{ٳ  MZ@:[T*5::jx5?ܹsܯ&{F帡a׮]Φ&'rs\*=¶oa^UO_ )HCeY ˺T8k=-]+hW_ېO'JBv3d֌vPfJzs+L wh2U2# ֗Q~hIrìkr 4|(ҖC))(JQؗg]-9[BteV]0X!AL4`;VzN( feh+f"8հߢw= d2F'&&fgg>E5 ݻ7Ny՚X>}ŋvMOLL?{ϟ?o1;vẺB_꣖P(x"wzW+;v… PM6sΎ~EǏr}X} 5V=OvF4/J@*ޥqQZ^hפiJ'ԩv!/K?9Cd%Sp}ܘUk1A!gﺝY^ tOCDFjH3[ K\O{6Uy!/̛+7 JG}HR++ek {̠ = ўr•Y,؋,,΢ HEi,0"]urK!Ci8{Zyx,sJypС~5\+sK- X,vx;W+s_%i_pWho;#㣲؊{ a/PW9/:H*-قJW(Sr D'%}1+8Áe4)Y'Tl8nkŇ?!d[NRQc %TKS4>r>΄~뫒%Ztǵ-nU;m\$p ?޴\{xBU"ʋw+ U/Rm) tfx]Tm__49][G`mm͹x-N_rȑ#Dkkk<_YYFh5-'L޷;ryT 6[h$*=#'꽕DzZ ʭ1,1IcqnjÇ9JjGGGcc#GvM]]] /r#xp{&^xw}Ǐ9':U_򱵐d_H$r](FGGM_8xϟ?~ $xgg'w7j__ښ5L: Ç0IYïaꕉ:t^U,W'L6X,UWvRצ79Q%7&Y э "X/?A JU-Sfφ<+ox0Pte4S+ī6VdO")BidD[ծO>CPFHcccGikkD"===kkk͊O?׿W^y嗿6[x~c`ׇjFPԔϟ?~4|>ƍD".//O=Ç^*/Rp4JƄ'.7 ?",5 R^dg=L>}%ʋLM@`E dpRFV1It.ގ$X],s8܂PE6c/6=UJf8 l94ㆫ6* aK@^q%ŪY o[o%T7G^i.z*ECRH.4tQL@{Ӹ߷u xkkΝ;?GkkkoooCCT&Ғcɼw|}}}~W~K_zM'>&''ۃ-"H^DFySN)N"455uwwGQ[*nݺ儯/,,z}Ƈ[j1"p#\o [1qz/MU)W\'(߮f9@`|Նd,t˻ja)>&xK _y+s7L#gUoөmmCز577{Z*\|͙4x@Zz /eZ5 r#3(,˻IHf }5@);q5(HVOgH )\tKp(̻ C偂^s}bV{ƏYVNT|@`k\15 _iKd}s[,J\d2`0FslPhmmeFRdIWpCϜ9k׮5 ۷o]]]|R S f*(-܀p $ ET3w*L~w>iml6;00099i|'>|Xy߿gϞP>H|G \nnnniiAab[s,T[Z"W(Z"""a]CfLj Jrt"KƓx8^$ TE C SRPEQ솋HoT~+C_.H9tǵ& J^h;%f!QY niBʐt{y>gU,0rb/;Azz+",iFN}es`װZS4FIEU梅T(*@vX` (jPi0AЋj'agtu2P*dOOOccl2ܻw/e(D1]8s̃>믿kO@"я~tXo Ut:o-b8>>>==mH糟췿펎[QE]]ݮMW+X]]u-JKKK8ٞXYYUP5 Od'r>vGFkwZ<(RY`2J H6k4kjx;xAg-zmC(AeQqĪN[km/ ^4t[.``|εŤu z[`6)dIg%z-Au,hװq:~7 {>0WHĥ-R9Y yHHoBz&J "%n=P++fpJΞ=[ÕQ6T*-//766رciXx8d2turן8qԩSkkkJ%"?%7DC{ڐ^Ff#Ν\ٿp -I-ĩflS>㏵7= ezz͛~ɟWX,f#utt*ˍ dٍ!M^7aJnJR +5P|s#06:Q ^"yT+S76D$f={>%NWWR/p0uZ ~D7,"`Y@J]$)Ydk]Aށ[5*Vy _Xl)@Mo.[Ѫ 2``ϰ2{z؊EΤz H|VѼɒnI6HC-z7mg$WJ$j48s  Yr1EҼnP|r%2RePxد?+U63!ld|/>޾F 3/..h4frMMM%+L&c!ŃpSSӃ>x'I* o~8`O"-Wp_jf"Ál([Sܩk׮Y<͛7L*!}|:b833s 9FGGz)j1¥](H(ؖ\EJOTPǕXBPUs+iYhԍJMxl +'2;Sbp-\ܴ{y9J4 yK:p]=OG#\TjhxJäT#('͑VIЦEv3s N 67o T` "_j-/;k4UU*nsW_O]݃&VU.V^YN*?>|D¯r[XXiooOl{T&`=ϯY{饗|GgOӷz멧:t-&]Qp!B"Z\\[CLfddĜٳgo8q IwXZZ\__/J|~vvֿ"s}QKpm#oU*2 ؆Mony^h{ Ybs-¢헉 \fw{vꗥ!liL/uoK3$V>8-R ].Ƚ>+:Jҝ;w4==H$zzzZZZBО={|.+:#̙3=kꫯjZ\\Ç?Smmm8t-JuuuOׇwHӃ֧b8999>>nH=D.y0={pGY:v f*Q4n-3ܓa¸wY(Wʉ-"u೪P0+3xaI^`Tݸj,Jj6Bzq:vAYG &7; JT,Y GN ȝ׋pj8zsVY'CvW8t{Gm'+eIz !*CPe mDRBȱC~,<*IKMΝɽHk Z悩FR'g|RapaZjYp^x//k6(fKK޽{vx3KKKdX,:Z333?D}GΞ=@MJh@  q/$dM~d/) @6I- CVW RT&bJI;444::)@^lL6dvvvxxP(^;;;}ǏD۷/-^,GFFJDԔh I)xaF__d4+>ڍ7?CʇvU$%`SPkQ86$E{\DvEeRnqO,P5aRd *no[ } Yl*nqoF "0; Xu D>KFs)XzU1Y:+``_K1MOj+JC`@N9va9A`E1 MiѠ $%J bL~d傭'/ہf^E UKģš&[Q^[U5tnűյk׮7oݻ嫵5' J$jݻw߿z~GCzw}'-nTruuuO"essst:<66lB$9W+9 &|T?usY FG)dl)Dz#5|ʛy4뫳9A|kĤEF*q K9RYo.pdK[0.EcE$V 0IXX(̞S=x$ /G)U<*tr5eK E"Ҍӳ(U|' ?9;xb@ݥ:Fy&ҭD"#d)IcťH$аL&ꨘ`0GL&\]k8oi IDAT8v?EJ{DQ[9w 1]U+jpgxC([SͨonPOnܸn;wnݺJL;v?}t8>i27ݻ9=nݺ566 ݊A᭷!.3|1yH¹|.MȪaqc*oOKЍZYjlKI/ZSIMnI& !@)ɢj䶬ۙ lJXm_(yJ' &%[ϡ0\ -%kV(MhvEǜ&dJ-6\jnUA,( 3» S~׮!.Wnw:)P"Rv֛]Ηz_ċA$ŬQ4Ȋ-` L/Md-M=/6^^]]\MCzFL&FQ{a6Lp# wZ yi"Nܹƺf3.,,r;v$ɵV6f8vsH]__x`bbbvvV~_رG$666 BT n!@M_`l([Sͨ7wtt>r*7n,..+4&㝄j[#;vlΝqQ*n޼nGFF=oQN\+KTlVCQJj:Q "RJ R &''kxQ͋gff666xTZ\\ hX,R7O>x@ 裏bXww9W.Jst]]k?Rd#Dߢ@jF]Dޛqn궅 _W{ÇS)5D]wQߟH$gdddnnnE?[l񏻱Ukr8HAt)g%a<"0EB/t|D!"#/$W໣`/H :O+3E`"pAD"$gbu.z7_|v`LplLD4ck.rEI4{ T]l{wrwqbw萫>ގ004z2Zb&A8 qXD£*DCo4 dVY'épYȯLv$)n]I)KĭvS6ՙc "9Ep *5%;@J4Xy;RNļao+қˍe) *J V skwuZ4 ڢ2GyidzpnvpZWng&?n driAD[l7ffHd#('bjFZ^3pZTR8# NohN:AiOFAv]mP2FUbJ`"7-k,~N=zlM^NʃJ#XaII8nπrKt"ۄ[&ia FBJz"eZ_*jCcv@qX"fر)bI,/g\R\aPTȦDi.H0@JAЮaLNN~scrҰ%ٍI- +++Phee%Jq/b Bx<dYsĉΝK&J |￟L&{{{_\(Y +rݢ_8r"qe"S(\"堍~'r}ܹsnvSrvvv=zԹH>ؘثC.]$DG]>  Q"MD-jf'cRf HeDZQUJT%>YHrtgQJg%(JP` @7 rK`KØ>&dǦF<)2p@KIay|{A|$̷2h)J"xcmzs3*j6 <*^3`KT7r*xq+L&sƍB`BOjl$ٷ U tνәLf```rrҰD>T1??o/{ڐ,'xRe IAJiTr>B-@)&nYi83 Kd$g#^J'MQB䊓VCTcDp+PO> 8~/iCHϝE (eyʉ9qH#R@e RRN[Ӌ$q9D mvVZ-Thy֠&[ƒ򀉯ԻL %AW Rё(hVJ5]30d<E7вTZ%w<z衚ob1/QRL&ggg&`ccc4uΪiWBooӧ^:<4f}eeů} _xG# ;Kܯmοp5`,bOO@oQQrܿ@n rQbzB>D>g;34{fffhh=Fttt$᠂jJP`oHti-ংU{Z`2Pd]a}. z s/(JNV؂o=LӬCB:lSD(p;rKmR^0'Ș# Xt)Y@ c4S4̀ϋ;X q zuuumU2B'2Ȍψ]+3oݤLu!)Y, sDrBRԿgsjVhZO74XÓRT$k›vxSJ7zѫ(:vwJ dY&qJA5SU2"Pd8aDbk 205(h>zA:F*J$'Nf&(XnKVq#OLLR啕:gI!t:-%1O655=#'NN&J!?;px߾}J dKR&)*k_8>E8 LLL|dzvV^ZZO ַ~ ")bޮ.:;w,//%7'U W\ygٵQjT`fUCj)Y;Q p5})p 0 [&=X 0 ?pHnYV X'U=`2p 窕7epdN:4:Pd-[l2@*h3 &Ӡ9Dlٗ:ׄCss&Һ J*&''ká[NFXZZD"͹\.J555qgh4<^VNWW?u5* DQ(nݺuʕ={)1wt) k??>E8 Nk׮Gr |ܹ^xVWW䎏'bNȇ nܸ_үBUTV,y*SteЌ2 g sFQTdq%&(;iZ$e[p,@Lp4Q3 >Y\&R4a{M=$a6c\ZddSEV+dՄWFKJmX3iF^0Ϟ%3>R#P>&R7q)"h@I2BCVhxsyC"5'eVUH:3lBB7<\34&2Y#&UgDr'CD5rA&WU2](ZŀJ[iv;6eR|J‚PZ:nlldSh4d0 5|Νrp?e2+W} ܥ9r&OT$ E8U|>w s% ׯ;m?~^8u\>cǎ&FGG K?07P3[XΖ!߮u\n0;Ҿ4D*M(qH Xp8/Dl pd"+\t3k.̀ޫ%s-6!g Ay:h@rrmŽ_MT$WlIS':iv,ڗTKHXgm4rͳ^&o.~:V"ACC·S]r$ DTpu~T7pnkIaw[)#"R5\1H@3eT}ܠ#ָ~F 2!2&D.ruzTߨpC؋*p9!0,ԎTe\nzz:477B|>FY2p5 fY$ןJt:p]]2rl(P p#q۷o_reiinYoܸ`BַڪوGmkk^s:99fY>J$qŇ*pf` U\Y #s{)YU'0ܥREiaDEWFeրRy@qj҇c@OWtWiT;)npIsTLa] +11mc KM j)pGت2-ن{Zde 0ܲӫv1k-dU?TT+3,#+q .p;0^.:!]M5d'8o]8 ΋X.cN* xj0®y;}q*$`R"kh )ttj߆4r Q3[5JWjTAyRBp8R"uU| 2"(/eZߘU:()0.Kp]Z'?B1M+|K:'-'gXY9R4\ȡ LJ@Rʈ/ 5QF Ɣ#M 4`GΕ)j"PϵhM:-T*5`(J66ǍC|K뉆b"AATQҞv0,J\ !}Ǩ5Z>գǍY4UQ`e ulEfEEܠ\pɺ|Me`z虘YX穧2t`TvE5[1/80s=]]]SDP(j\W9O~򓵵5g{y8@ nG hiiFʛVW RT.bFԬWgS=2B&FCQ?uԷX,P(ݽk.QL&No߾=99"|hb*\I__d@jȊ|W.ʚ2 Q%^#j$wIY( BmllA[((w2:W8I( rS41`s6A*5%l̮zYL; U*/fX{ 0+:'gd?XiJ\Y [3W[xPV!r6\KRjqb?[NI|~` f;$U&_UiʃyeJ5;<\Qjw!v 享:*+Pmfg?Jvx`*B֘4&/$TXB΄@RW^p"Rc0c_ՈԱ"Q Rԕ+Wsڒje.  d2#z>A 8lV~{Ν;L&1buuʕ+333wu1]yʊ cǎsZ*t IDAT+ hC  }}}O>g?%QUU Aj:"m= bUO?S@QIŰYs+^RF3 ,R 4p"Fur!C` @lddÜ LaLS0䘹ND:eA&%x2"JԤCDV:2φ[ߎvxsO𔡑0ɖr"23Ў_YeG$!as xB 5|Iy ' o.>& d: 6\Nȍ~R* im2_VUgJICCæ2e(Kgu[=/cņd6FPWZڄeJL%d2wI;w L& q/^omm \N冑ĝ;wt裏ݻtUnllRL&@>ˮbl $ @j7wdd>0|˖իWMgy6컕innnؘv333~re``²Q1 ylfA 𤊑 c"7(la T^n^Gu.iaɯH6|aa23!D́$ Z| ^∎= 93[胇*fρP :dU; /ZI&Y7WIoy3S}X)P[lPGt $WHyH/ r,0`*Qj@[DwHhU%Z+`{ Jb%os>;lɌR4hyQTz9rŋՕwR T81zPsNXL&rFіbܒ>}MP(FGG_Fw-DC9Y__f{6r"qJo=99i=z1'r{Ç1===W|ʕ|>'Ovvv޼yo?MaP%F?i:\D_kpYS$UDAIwfc]p HQ-,\(QwnKl[> 8PT,JfFnrn0+#W0Wdl|7ګN8! w#5UAk-9օJ*Pš=ȑ#/RSS#'*+pyi(&_*DKKK,rl{_q h܄sqޔ!wu׾;v 99@&ݽ{d镕:~ن"?E8 䪔N^l˹y`` ɘй_g@PhݽWWWdX6ajڨ?rH<w߿ӟk׶&'%d*)*nc/0RL"UKI5ZD PFvMf( ^ Wʸj7LaY*rTI*ӝ@{ldx4q1 npQ*,̿COȾ EIL8J:ʨA.A:Tf2(t-LeQ167.TjӆJYͫ.竭^-°0 &?Ð|7" ;Ry˝ t&Y\>E i iZRQiF*tD\cRHJ<wI6.jkҺb@v9w0'[-s2qjmadG֝999irkX_ȬS@GGb1 :M$N jw* O~_W4r}ӟDܩMT@#Ȯ]bi"UJkE~r"␅!@4_*\U0cǎ|>?<<<00@M@;~Sܹ322g>OqV(Ν;.u;v(N|>-R_4;'i|Yhזͷccc-ʚ#WzVb{t ֮D<"dL vjR e?Ȋ+{MEF gJ1,ȌōpEM)HE[ xXXXݞM֤tq JPd`\F%aVa<LspӝTkI#\Z\=N766~Zڇ n|]qTSN/eʂaRa^")$HU{4Jey)GyWK`kkD"0hUR^zDIO&uuu|P(p hP(ޚhlڮG}y2KyLի;w8srTFN z'Q (!/_|{R\LڵkÆ7ildu6LB6͝Y93}4FX[H^4#@,#[1A#qV;0$Ĉ X; ˈffrߗasinM//]rro7~~{:Uu,|׾\SP UX,//{X px޽$}`;t׵dRT9qC%H{{ܮ b8&U| ԕJMX𔊬(&88 J#.ۦD0["i|,sB<v$ K`m @|F6[c eYL~J_$HRV2d/_P`>O&W^ڵkuyoLMIHSȠ̈́ .X'67L&344C/ElC;wVVVe2T*usq4El6{ƍロ8q>0MSNap1}!h.'Lsń4F^4ۼ'odgd MC!1DZ 61d^ &‚`<B?>/[030x,2=X r'b6 EP R/ R&f#$! ?L Ş3ˌHeƛ@+!keHKG2ƫyڊ䙁4 ]:DxY>D"ʫ,~.paAxӡ'DAv.gy/5^>)P8OCf `*#ou2/$}Z0i͕bEC9%ޔ{B5s+CcRoDPJ~]|ֲsIR 8[)L g 4iIiC 'l5; &)j1EX8VW',`9_ 0L4ZGJNp㥗^zG.CCCP:LEќ RoooiiuX*/d_ I|4?#}wر9'cccϟmmm \JfggST$!"8W߼@B5`\rkyy,\XcttT|3_׉+rvhooonn歜H$;֞" tzhhh||<ͦ; ۲oe6@P  e.#Mu&MYgdz&T؜&`:9b4=p^f)L-` LcB׼,RcuxU'%\x"=51C#q :\jCaRn!nLygRaӈZQQ* LARuVy> dQ/sbPvr5z7\ޅJUAEsM+U\[N⇤@4ë-&S"Gki *נV͔h2 br o|^ ah0 _fgs$" %L ,&3" lgʀ_LikӜ\</Y -0i: j0)3}~WÄRBvIOSAA·eeeǏoooXvQg2h4X,x㍟Ѳa>yꩧvA'Ps[rlFsi'@2_9++g7(s9@>YYYꚚ ?{!mmm 4\.LrϏya~5,|+|NJ^_dRrfĄdaaOO1Ԝ ]|NV/h-(6X2iÙ 뇭f I%xnt>t*9̭m|̲++lV`PD<{()M>N"Yk\.D}2L?d+h$u|+5G\rфo8c)?W¯d3= @͂Gy,d K5L'}\(OaNn(` pHPRfB,|bo>6_Sy9Uv T U:UWلZVu 9 Ax'4MJ4L4]̷tk& bee 8pOR]]]"'K.MNNB!mXazu <HSrŋ'&&#d2W^]ZZ)Ço|#-[[liooBʼnDº"ڵko"x`vvoaajee%u]` ޖ-[{{{ LjGyuEH(#s6~YgP=|\h4 떠 gA\BЋ\ߘ~3)IȌR,fAq(E#L3C3 ~PNNv5ds6ĕ'Sf|Ã7 !Bz`0WAUk'^Dsǘ1F+W!VTqPDg5o6S3B3)|Ho^ S<B̂ㄗ)-IW#0M(ާyEs9O9#A/F` )lf5T~A:cR=(O,D8stMW;::ǭ-DWWW{ݫ &UeR6b庺2`0X[[$6qnGF@z9w\IIIssLfnnκ4 g/e'02i Lftt>~@/]FuVnjjW~N21#Ⱦ}x\:f|otciiihh@ @Ds 1kykN"DUx0 OZuNG0L&O'08V0#@6.ASa$9| B *6sK HDףBLQȺkLd^]3LJgN RAȸ ˕PgߔfÙ YTܘTwte![?#y(O; LR)`&A^$#-b )^xE8wttTVVFxiii.qFEESSpI-L, Cm,r0?EȫdǰdZZZD~cǎ]|9+".\D"I!GL&SQQaE鹣VO%ǯ\[YX,vաL&Lg7ɼ\YJP^^ʻ" {LNN={kc\aNGאJ2 UWWk׮zpFp*Sx^!aO#93UP:>LU%p\*nJJk_MYaFU@d'+RykVL"0< ϠjX J=%Q0<(4$=`JϩnMp݁^[mյM*QϱGn1fϑXGf?_8LwZ)[̐ |by4) OHISȐ}KK/-L'暚WVV.^X__" TҥKv۶m|>_cccUU 2]XH`;vG?믿oЗ"H$?ҥK{ q6-[$.0>>>:::>>Ό{B&/U)x\RZ ӷTx<׷Z{#NNNNMMV X;k$Ƭ IDATvf낇ۑ=/|0ybfs /Xy` 0TK|*BPPmقhKm>++\Ԋ r9̽̒374:` !䄷Du@z@En7&pd70?q6D6pI[S~W J2)wc(|ems(#Eb⻒K }>'4-fxtҴݙ&Blnv r|&(c)fNL'59xl;LFtNx&SxT#GBqmۆ9=ME ###pܸqCABuUrZ+ @ SKi0{e+ö~c4mSI}xq8+hv2R 773B%LBJ&x 3au,Wm@k p"1WtNpD<83덖@Q7)G6&wFcC$]+<#,tN6^E<3@6ZyL 'te 91[Epg褮;Mt#uDE!GHIN[P}u" fC$ ; {K;1:[yTۘj];CD>O˷?bmpǧwر{nOYh4__v[0V!gY ȗ^zgyW/_l/_9z`Xnܸ.066F'''c7FNKF}x~ED*** {KKK8ދ+++###pv\)xsfK*b2uXCi݅M5"vA*O*0ęIFo7rv:l'*4ôÇGǬ#YGPBxwn4׃XK049w>6Ң50 bEW\+ ;sl  nOWX 0R h $J-ҩ3EP`6qC⩧S;jttd2 PH=zaꪪbRNioo3gμkjuH$~˗/?C{U##Xa]+XC#5bI/̕K.jygx rnP3YYYY[[f+s&&&м4&7nZя~-m ʍHq^v#<,h-m@x)lhn<4}ʠ(ީipKbCdv-ֶ7H2;5x10>Bkԃ3 uI f_1Jbe^‡L+pU`V#0B]4DKyؿepzuǧyk㐬Ƨ?iJNM$.\=x`(/HFNϟ?uIv@ dtWVV"dB|C:vؿۿ7~_n߾tuVWW`mmmuuuCCCuu59/HRVvffƺ/ iҹ;/H,Rd~EH6JuttCwh4:11D.#Y3W8q"k;/B{,3I^ṣ,*ƹ]j.egjrWC .Qs{77{ W~<@fqnɴ|6'ǛBIB yOZn\pxv2S#&s`x ?n=Fm+.$&{p5`M+H t$ۼ$dy iwyD7;!._z3QCP_j{7Ju۾[oUgn߾}׮]~_"\B<7Nxc(jmm]\\bL)Wg~;22ȑ#< 驩h4kUQuuuMMMuuueeW.avv6LNNN...qYzzz5v/|jcD#0ׯ_(^[hX\\j!xc. Xn7lSXb4Y)}!iG(!NP0cq)1*Q 9,] {:0;@`^YO\s0Ƌe\\ fЇxą@0y/\adcflzW@8 9TT8~LWɄz/Audg[y%mnp% s:tr@N}|B舲2qZ̬lKq_? ] Fxq ݛ83G}`0vp9E x$/,ٮ;3 ٍ6ʧ R< 2L (mk&VcrH$`q} YCR0::zƍ]vz$9r`ZUUUYY9??o_6 "{JssK/#[oC2Y,//[PYYꬳ|j%%%333Tjq n ^|Ysb8pa)H9?<}tBC*^K`qq8YRy"':,8XZf>`O!p/Kvhde:ǏaQ Ȕ ,$@Yma1]HYBNy7-{L(L i=!tOô]f{ŋ:tzۘX@3  e$Q̎قjnjg0`wTGj,鸐z(6w=T6O=o!T&KL0R.7e,u57nU~l; g%L^fY /Ly,05P.]}?2X1GGG8d2}}}{~bnݻw|>ue2r<_IIѣGkfd2y̙W>۶mK///)~Byd2933Ch:ׯ+߂l?uT86[2[}>֭[녟ӧO{|pBdqIrsYvUl4PzyŽ:jW^J Ί2f@/JX ~$0STB)_s+# B[N_gGGՆkW[81EF%H I#-U'  yiap*{(݆a]`=< fXmrUjms£Le2Ɽ B<R@hEYv v[UUQ-:l6w!K.544ٳG-*\HRnww-"L%HLOOR)ٵ?>7x_W.¿˿l۶Gu3FXd2ֹ:8tЋ/h]R 477755 ihu 333###jx.չV(61^9e/=6 (>- dLx<`-LWˎ>\2dlR ƳfvOݖ[Ec~5~E!w0"P 4d$R M !Uo?W]=Hd a_%s$@W# ¼D* d]੧ۘՈԅdod2cs(H$HD('S0gbL[ٿ|CC|h D8Tѣ=P4db.\H&[nnعskeo~ԩS-jS'ݻww/X\\흚L`nnޘ/gE^iiiGG_꫍טnlA:Y!e q9SBc5p@ $V(@r6>"7_^L d{y 0v+R`Nk4q:=eaZ&Z(9Щ1GͥMCO8;|LZ' Y0Y:!-j~LlE[܋lC_~eM>u=HFK!wjSdK1_3G wnTBt6R%$u٩[ZZ'px{{9rM7a.ӝ]XX08)o_|{^4U .\vɓǏW&Rk׮٭p8O:u5^TTTbȍF~,+T*5<[ 3$wHiqR#|ݼxon(CCq35cWú]u=y!r޻ \H >9FG;%\+s b!{ 늎斔M3Looo4ݱcGaiqÇWB|کlXHvG:vڇ?|]-6-saU~ssscc0e<FFFRfccc:s\?}80f4+Fs"`-TƋ `Y#;1" ްo @ 3 G/. f'nqz[\eY60'JaùTD8^X;X,Y3 (xfƥ5'2!î^*O€'tF}|.E HlbҲgWBW0lԐAY<tNToࢇqH,s /'M:;zuGHD %b֒= DX[![$ٳ|'N5$ w7GVTTǢ`aaի[lٶm|o^"{VLUD"F *<?믿o(/~={{t63k㸇~笵~dss3ήT*do0===>>L&urrׯ_g^j{-(i蔁@c6ogpBpix!Lc6UL΂HLY"쪴)t?: HLpE8xv"`2 [GԘ&`2-\.dz4JsRf؀k E@숷TMNtU1h otʤ+·t2u3rx`JГ $M17yc8Gnd9JC Cg8˂91%JZ#FP-h.3"%( 9:`=nC{cd6*'[Ly~#H[U\Q3/ٷ0>0Q cYWF *Lwuf/^ܷoh,kiiikk+z]v?~>x9 رc~~~nn.:_HYYY /+re[ɓ'oO+ueee۷oǜF/_#BET*566655e/$|]w1 뮮zn|wbً`/\Tev)t}Z:X)HCU'oA^躢_!)(gMTgWi͋1 ˫&K!djlp= 4= }l -](P΍Ïٔ[bclic._W2fK:I!\X'E_HSRm.76 qFZd߾}===7UTft:m]{[|>_SSSuu2]:,\u2oo.\Mّ5W)V~'~C?N?~``066699I_pe sL)-El9Eah^ usu\wYB7%HW iw"_&{fz @h%܅ya>MAgsۺ3c<&^^@֘D)\]PpB8'~xMEsTЄSdVyPv2,Վ33S__hi~*JMOO骪*=y5%#)G3\-#(dFFFB͌@ PUUUVVL&{!Eѣ?x,it;;;ƪ׀\6¡#D:xbooiWOF"BG]]ݻ#0իWy睙<ExX,xcr\gg'ݿ3<y>/9sŋEIQ#huYcv%ʣ6 V Ӿ8d jq3;Q-H+P$dn8|"W zwL}S'1a F\@+O";< , G?&[}ސ|EBx-,gnT &棹,fo@t藞C8o :H$1d,^SspʏQSHǦc ‡BT@^ Tb 2ax1 O@HtȂ`C8A9 %nca'陹3ۅWE4􇼼[& 2AʜG^:_62gv|ꩧ8s---կ2t4~NzmWVV~?}tlJ5Sc+ nLߟN~?͒2K$4|^u,++;yѣG'''ѨrKY1j7V ݗ.]'v+ K_206#Ν;z뭱1#"Layyw||l[+++[20 IDATQ Ν;sٮU*gU%4762p_g0 p"=0Um'Eetq 0s,-/w+L ~ެsƄ#f.5N({G^."K)?DX&oR ʧ]!4:yf=REfĶA7=S紝+,#06?G2!AGdJ/1wh* ̅GpԀ̔Hc>Řٻ ^٠(~N (|yS#ݝ2IBxe4S2 DHߪQXa_6R-L$#:)PV4 E3C+b ۦ9iC/k*gͬ!vYYY:Ҭb@ 4ny?-{uuuqq1a灖n)̏RɄ3/J翱XwFVTTD"\.JxЙnnnLgdt1kYtvv^taaHԩS_o&8=IYYٶmZZZ#,//>}"ZDvS~k&L47#oŃZs}C'Oկ~snII~ӧO_CCC2u!oA hhhhlldusOO3y6&&&ƌ\kâ)L^JXҒÛ'C86ᐢlQ 0H')_p+p҂eLco50yk)a!oFYFZUf7 DmC )ׇk\r;Pf.QkL'Y,B(s8y0)Ly'1x):V `J=s ze!x,a2#yIҸaD?jff!SE?!:3ri!rrzL4sx񶦟9ѲCWZά}ي Oۻwk+\4nNuhAtzzz:UVV 9bOO3·kƤdX%`0H`%)N =xrrRׁ)rh4zڵl6˅(d=X,fpgdSS/}>]d۷o9}ԔL p ׯ_1xu.|oVa2VVVw}wttͯ+@Fhf SrѤ d4k=1«1CJy1ax>@)p#EL&iVy݊.)0q5R AABhWbڔ)tv1w G|-!%CØW"b ¬LL$^A.&d>WU^O$J 9)g;ȩ4<~Su˾LmHOP$<`C? Y :8g.lLa_5Yey{m[dmSoe2_qeg\)KYJSЯ1&P($ QǏ'>_m"qݻxe1==ŶnZWWgl}={1H$b~>Ve˖|k688Y3khhhhmmݵkWkk&M1)LKpԩSO>$SBV mΝEcL&177700vw< ~HB!u*2(sWx1$G͠QB:,8^_~[IܠD20%1 Rh6Ẏ<C8#=exsj!C>ӯaLx.dN[peo./3~ȅx0@p[ᜍ L@? s0MݍZ R(DJP.iNA 1K %xX[")V}ٳ97z:L@R3¤!fZ]l;d0{:/93I~|Geڙu}}#< WVVtrvC{L53D"qƍD"QWW=sre2R-< {.01OOO BU緡Pʺ9"-[\N`"ēh4}ʕ@ PQQG):ӣׯ_?ux≗_~ȑ#R6okkۺu///W\)^[Pd2]]]7[[r1p8p~";)c+W7 m^&byTl B)H c|}x_ F10Fh ~Фjx+<#_4AN@6 @2isJRH!xax):= ='x+.>!<鞢39OJeĀ ?H \eO51&0۲jdߛ =Pj"rUR)ι[=)YƏBs`ra@&5j)C0>*PJJV>qj2F2WSr3(`Ql2N@swIVa~YXU3L ЫM1.^xL- +L@MLL۷?H$:_~_z<8111==cǎvi$et:}cǎD"133c+|1)~a2ݟgj(J >ŭs<&y_|Ѻ"Wjx7bsssCCk׮!(3LMM "WjK??-kc4WlHAw U0jOiHű1H:dˈxbo#ІEnQy$hO2'`# 9-zއ< W2~#Wu0π\9V OxqtT6 `Tp'H6M'X{=Hɀ}6IO8[]UWa`x%b$ Zrc/q|:j2;˪f#%nrrr^r"6)yϜ$ʇ#J{4o1a1>>>==gϞv8,WSSSUUŬk5"+}W^y%W %%%7n G`3_M,vZ[:ßԧ+r7ʶn݊"ҥK)X$Ɂ/D.su]!:{iiizzz^^|8t(éɻ* .CM6&q^^jA>WyR_o8)4!F@ 1+Hs"cLos=WYy[1~^ r]>'-3<$_{:znO纃Qy沬؎\<dIypD9ɜOS0EBr+3 FTC\6^ wx JO[)tzlllϞ=V&L2_US{챒:s̎;ݫ|- +zo-Kl߾544LMM% lXNv|7~y5䤗YB8~r 8-,//wvv ^"df'&&<33322"{yLm$;™"6`2܌#K"ltXa]=i6w` D6` } *' Y;E+idRE[ |9.u7_V"/O!~xs`F$K<_8H1Q6~Q`b)IYe4U]T?ᵸRJeLiDY.'|5B@x0t0 :B`'oU+4ɜ):-cWE5`dcܬfHKl;!eee+++bwǏۖ;[V7*f&d2L&5E*%-,Qt2+>33S[[[^^N†竪H$|MRa^R_b_z[nEarx߱c0Tl]Y&hOO,L/5,..)ݱcǟٟ1OOyDʺ:HD"qukV]zTS&(b PFWsGy\^;rd&*TL8a0K40L6`0 ^ %ގ7i1ܭ& !@ѷ8+2@ce$d0=E\i9ϛ/ pʡVjYhr{֭[uH37qUϧw_ͻ< `:d#Uʽ+fujae'(1B>}ٶ6;n?!e<5NԤs 2>z`$F£@G uu@xy}2vSWi_1I` KҘ݇׃&9pCfO[) Rxaկ~5 655u]t2''' cǎڿ~]]pe)Tx׉RMߊПbޱcǑ#GIKsss^D2]㚆34ljj:uԃ>CYQ8nkk\;22Ǚ,H+LL6(pyNZ3??_bTjdd8c۷[߲iPV#D"փ/NNNZ9sٳfnRf>0 LeucMC,qEG5Gah#Z$L]ģi{DihhZP01 n>z8gEŖ @>2Kͻb"EB״PrM0,L򜊼eQ#IAY/BtfybN_\8;)߇)9F7إ1\-X`yA٧4D g1?4 #Y"HJ#_I1ోDV8fLtoh0Fx.L `M0Axc 0Yu>D5L reduh5!RV+XVWWWaF|ܹsղ288XZZZ]]ys+!m.d^)?S?|u:&5Ecr333p0QZZZYY4}'~R677?[l3uGe455=/SO=T]|>_SSᓷ.]"^\\4[U333\s?v2/A ^YlH++GxS,,z){'B-H{cy\ԈWd"'dN)yESh_7\BCa!A҄w  (>o)6^\x&BNC#ؼ3)<(4@ )/˷rZjFMMΝ;1tww-@^v͍+rh6U|ԩSBJjkkBgffk 6L4Р]E3,F L=[Mu FO gA+4A9q쪕i]j /o7aޱFv#n$ݻ^diiItŋGill4XyKKKuuuKB07|n/ӍD"pxaaw.^yI5LNN?ٳg7fo;\&5C q dǍ+r'&&)??9pD`XW)FGGp0WQ{Gz 5n>Ę1 -#g$:\- IDATW2 g|: fH M`{(CƜˉpL̸f^GӁdxgTW«a]_h\YXd|̠,0KuxAV΃9o|mB,#mO^q8Si'U15WH U83f;Yf_Aߵeg) ȋ (ӊPX"eq( ԳZ(M_L5gL0,ޛkjZZZdˑwe}СzjvvO'drtttyys.i9'xݻʌp|0lnnniiv&|  uuu)O?N?>Jb=_uuuyy=cXȰC?ѡVL`0g VLW3 01])MYxC Ÿ  ^UVV;v.)D"133tm%2={5V`׮]wy59 5uL&=00}ɈxE'PW9oS &ȣ/ !2a~5zckt@ PSSpܹs KKKMq̙g2oD\/ h,#ap\`Q A'`:m aDKx3;BYjt2 3 o*9! Y|M:+'oYZYdRGhk^%ۉym+5rHQ=a -Ri eKڔ!^P u fg,vW`ݜX_wG8`*0kZЯh a\@*;1He&oVdħ7X%[jYxk,hёi$ E":.rx<'NX|iiiYYYccܜ8wiϞ=N>?QNӝRC2D",0*g϶|#G쳔`D󩪪jnnE088Ӄ %ݨXYY]\\ԡ />vXmm&N/..Յad۷k.eXL'~rᥴ.ֵ6^| ^rp|v\d=cL777cz׍_Z&dيrK|l|#>F ~7555ygbb"Jӿa'al({53v,εKhiS,{Wnyldk;GCYb:Qya2+[P,D!C%xKxx^א%\g(KYcXUW.xʻydyiEIZOL0"~.P ֥ !H"<`*Wm W\̨VfgC-G-+ީ  e>֏d2 ...]kaYY|65hZ"?G}?o~eSSSoΝ;?j,[ZZ.;44t6gY^^2R)+++nII&''\ÇWVV޽{׮][lٽ{`V6lRSS#LrI ":_eם>{}yDOZ%*ؘe) V3qJgl^baa֘lvL6+p#oZ,˺|2 by)Ƣ KKKH ?~ 5 ޖ_~K.)߷oO)陙ˏ("N_re|||Ϟ=e@9HLMM{:!^jԁWZ0!g p&k.dK9YR666"fZLjFWKKKCCCdRHEE>{~"sPUU '&&]fϖ »$#lJfo 睺~xG")XV^Dt7m'0o%كM;!@9M6.{[%;7Jn*U T-AC;[l$J8p슢 kpCHaBʜ׃l44s@rB0D7ԢK:?/jd[M[ZZ|>Q1_y PfBs O`<1e& oyK+蹞bY;Wᵥ\yYL4rq{1޽{_|EH$RVV O8ASfmz~_?B&?~͞Pe4dk5ӷY&~ ټy'}Iˉ-o[[۞={X  sss(R9w_'?2wy;,A.[ZZJ$H8,3Eѝ;wرL:I]Ŋu:֥R9 )R |=VXUEh"LONNru&|K_jjjJ/3A(D"=22- |I·j(f=0|2w4V\V81/%)0ALmjj??o#G6.,,$H$Lo||| W__o]H$xDQS i E|>DollL"E&[&/}K$ ZQ^^n?>~DC=oyq R y |2BMQ^&*&v:ĿUpRbnzН\a]aG-̯ƕseOJ**{9+6ҫjU40P`p  #nbP2#oblpU6P툾fP {|D = oД5WM[Z5a p,h bJ$ Ud2dSϝ;e˖Ç~+++CB*5UǏ~'?ƲH.\>ydss&WN$T*UQQ9H{ュ[۷?m]<77:~>~ȣNMMuuui0xwׄGQ D/Ķ!ˁo@@j:Zp,82u φHrQXV 8 0pU9PJHe@ԃHfëF"ͭrj鄊l{ߩ&Lfi0zg m oUZ(udyHsYk6Vb-6Ne,?j Aɩ;0)WWW s@ k7WQQQ^^J 45k:t詧JRׯ_W@,kll,++sG$NR)gEe }= b_0Cp`} ujmm-]9NB\.N$/nTB&544lݺRxqqʕ+-l6חL&y|)V.Ҍqiii$8ԥKD6\f+{A+ū\ºID%/'e'MLc 6x'-桳_1Ř{" ^ r aYӛΎ)<:Ip ӣ^NH  ` V`Aj wgB* 2,|mMp[͕:;J0KRDnlboT`P>osQS ϗ_foD ]Qsd.RKp/;^N *Y mNSbG ueDyn%hoەM AgHDBNMj Wx+=:EKy!rt2Nwvv=z`0hlM&|+_'>~ҥKtFpرLwii) VVVbv% 278t}>_ccc$NU+IzVtww[׎b#ֿ˖̍70xmij3<Lo4l 2ß= H (+2CMvk>h0x7~7ٝ?z@tyKIx9TOvR;ԪEC倱Mai'- ᬦk mœh\'! Y,%άm vR%G@)3\8$aDaڙX%d pw)Φz BI7L`08;;[oܹ:^Ypxqqy4K}_?*_Jyo`[W[>}۷ܹ>ۺLwiiinn.xIMa!`UUUuu5۹ׯ-4$ɮ9|eљM:{?&rvUkH&տ{+r E tɄ62bntD숔m_"Sb?~ߤxM̎c9. VN§dx1lujMFqW`F :o_8:`0  WaJ-jWDYH%T*z$RlWJ^U*JbSLJIء㲨r"/"m27Q(`!Vb>WF_/_P3w>}9}V f`撠@ P,K6}]$ze\^E.@X^oka 8YYYؽY 8L)WA ƒ<иԅBavv6 E`0ǯ_e˖uYi畕Vd22#_ȑ#׿~i /`;wզ`~~>Nrjqc nذιft:{١'|cVQ#NwttLNN( |>oQm۶=S۶m#_#kjj˗/|>L&尕f['ss ڸݥY/w` IDATJ2`An<v51L[/;יc*V[n_&(;YD (ڙ(7,"5ҭܲ.Bf#o:MMA|)]>(6S8Ic}5̂ 2ܘtRGV86?0~t6 eY!đ妧h.|r__mF_I R]]]UU57jjj/8pѣ.\.Qwww0(T_|OO7߬한LN$eKXV|kxxׄ ƃMGO}ꡇxLñXLx2)Gx„X?AC~ȉgl)Vr^s8[΅ 8tfLJNyb<0] 󸏒#~z<'\dky +[ͭf7ؽҠ$P6<]h;&Q̆,fZxq; zbЩo"Tzl<~s#h gqyVD3[x.CS+S(,3(9wW_,1Ohyp]CYv&Ko7%B@+1etۺy}sFHUTTtիWvmUG?:~Ȉnmm&uHP('L|)tr@ ~ ,{7򡱱o/ӥH$ 9=')Y:qvT L0\hs255MPCh!8 fB۷ϺD$bh}$BSݬ .~T6c~9@?E~5 dSa!dޕi/\`^2y1{|y :,k>;2,|z 6HhV<,]>Y:J c}F Ce 3&2<Jy wrgXy.ńͭ-JnpNAYIot?F쾮 +9L- ý9חLȖL!ʡ#/ @X/#ZRRPT%'\VpՊ ZR>DŽS<ӈ 0K-a`+=P)Xdd5&>AȝԜ(LKX2]4M61 WVVG"D":ɬJ۷'Ohvv?uF="Br|>a>J[s&69~H>},^, ? q(d21 rC:v:tPSSPA ***h,cybbFR)  )2'2wZ lϋ@f\<+2l1( eYIM\9ɂI˼?x#{lUE908G De]ؾOⱴ7x̑eG2+&܇Xf:7`٨L lWtm-9xMU_y- LaM{E L(b݃mmmep!Jy~#GݻN.:uԖ-[^/X" P($$ݸqcss3&r0qd2N-"IUUUwЖL&322q|~``lcccCCCƦM:l#?n0RNdٙZlYzr]}g(}EfTu1y7&c̘Wo(SdzZ)o;QYbąF#l#c!142U/"ݲ+mce,9.Uv-T-[8߃i ʍF\De.]ڃY`#pת6:w 42MMMUWWG"t:}塡6^H$RUUJqԊ+֮]{׿ӣUիx|G(L2 $!tWWXKKK]] #9T7 aˉkOsssׯ_]5enWD";"78p`+fpl\/) dX,-K2&?i |,R{|r.~AvgxbJ ׆CP!A=Q363Fr<@V .a-hn<ŒT7Lc>jyW2t=[ (!%ͤZf=YSby'5  4\|JaB0KYreHl6ar lœa[QQArM$`;v˿oqQ탗3̻{Շ~xzD( $!fffVaٕ$`hlt|>oY#V.0>I#|tooԔ٩'OMM9o߾XWZPJ52A nV*d2iÇ< SAbxU 6T^2`V^Հm&پs=nK>nNΧt3J/=¼4V,sݛ ^d1ʅ& mO\-FL )_cg\Jc="'AѪ?8+ֈ?FVΥ#-nkj7gNC,p$$G~` l+WJ̜{$D[d&LЏ|xϞ=G=svq^{o2{n>X@3PWWf͚+W:xp&!2_+m0 $;I!  v6x<>00`~ƍBHSSӳ>N?Dj555̙$A6~:IRbvvE v15 X#-:N1Ko90!46*e*)r1l`PV.*!,L d%YDNqF8YF1E[1ĔC;=΢R\?i!<~ˀAlb=(5% 0c ʹ#}uWLe-9} :N\[xV +mSd'X]]]UUNϝ;pm>-r\2e#Fz׮].\hҥKwu׎;𘟟'N;a>bvիW^re86[xaP(L-`rr_3ǻG&~r(6<ߴBZ}]]]Tʡgz~>‰J x Ef . tso+۽ꆉ_ ztDJQI/+,f5@ d$t P6ߍbX[S7'|p=6w0KE}-by¯OSg fW#ӝ݆ߦgÅ\1ъzbj>TE "Myr,6c}̻fCɑA7 I\&exR,d&D"23gδ1ˊH$233, ر^;y^onذAħ[7/gd2Z~ʕKfHм3DWWlrׯ߸q!zñX 3k$ [⣣s0/I`Rcwi QRVʿl)8UwV2Ox$j줼ªVʶY"݇L,,Lx sـݙↅ9婊gZiwX>f .]Jia&p=64*}(T9|W 0|Q缥m~/"m/Zb60i:䧄3 PoߕCs=^6iPq~!t@ODjjjx|:x$f=߃| mn$N:윬]eˉ⽡_$xyy0ᤲM >bRAY2s1@&صMd#X[ {SXD}/{s`Y, 04***rGK{PhoOe-aP>ۍ/43soN|> FZl[@UULogRᦦum8e,?z_ KԳ#sK{% dmmm]]],^5W,42|3z{{ݸ"l #Gڵ Nĭ)r\wwwoo5N>|(9xMԤ#o@X]·*%f_S;GGbz]g 6x0nRUL2 j1e6EH=j2Q&08̮ Lb[Ȍ8d1Ml (Wz3jkW<5ca)d| ^]$A z "kz/2{0=sِb*Sfd M(1=Sj,h27`61m8im\%!L_Υ4Sp Bլ5+!5]:ռ-Vt1e X3]On \cz9cm)0seh4 MLL?ݼyMt,١]0 8qɓ'/ӝy7\rG;m=4HևqY"B@ T-2g2rĉ[},d2+W"P( ;C8pYu^QQFkjjx+&''/]d]JF8:3#oޱPNM2-9u0e֯W geӰkA4UU/m0i V&i9uaxX0c /60bSF_i~̅At1]E`:O}$:6N[sfA%O ebhhI"[}O, [D"eh4zݻw7 BJSCe:aцd%|H7UaI!γ0$cWTdݰ˖9 R]-]=C_|䖧p0e⻁w ]bpSui)s7*!FY]hy^@*]̍;|bVm-2s#_]d[&Ţtl6K.ӝyw6l/VTT{IqB KhٱcNj/o8qB2L&s˗/ݼy!@eeeX(X(LƚԲ,]_155.[L&;'{\7V:H$"<00AdWCHލ)Oc–/mحS;.uBe]H7M %A+b"Я{|~h\ʱ{- ܸW #Ffxv(G `0G3C*2 j)†gUXjM>yLMbFe%m ^薥{}X%`XbV2`0XWWW]]H$t-ŀOw|\ƍ<ի\9P Y>|2|066fv. CCC[U,ڵ-!<11q⍜b IDAT.^ڐe/-ly|faOy'Nƫj$[@Yႋ1JkKBOH) l-(+Y ]d.,lc[׹W͘SBI: eR$Z z . 92l` )l_ %2oPUJm70#  -,a5r.0%rbVvXB..«a/8j HHvi[1ޫJƯY:aUoUTֆ澸z}P BX,uuu zep\;33W^蔱XСC>cΞ=]o۷o>fkOׇ|>k|r϶ɴg|r~MM 9[A*crE$׆ ~hc@^+{є̔e`[Ɓz+n5lSTvܜ^#o~cmڴ`KZA>|(sLMM]vmjj,Lrr!}𽹥0a:͆NcĘEֺ'vVAx7C:.tF-x-*5Eo'\'Mзj0,[2l o&~з 0GXL$`Lnbx\nvv#wbXbϞ=<ɓ'O8]sSSSoiӦ߯7@  UVVfYe>|WWАY u(6mWA8DQ<533111Af;`>܃sBOfQ!T^uP2>F=/:t+MOB:P^\0pieD6w *md"׮zEY('m/2C#KOoWv"\ot#h ̎%KKmep^rd4\,ݘ$d4(ʓL̂YMŨٰ-, ơ)Ra0P<ZaZ#-~ P|~Mȿ„/b*S:i%K.ӭD"e۶mklldRBT*el6T{|E=z{ ^[QQD cڵkqƍ>@SSÇwe.9q wtt \.Jq>7+z >xO,X{UĪ鵻s 5f'4F#Se e<%ߎ2_]ph6@etxpN8pLFfL]5,WJ-@!nJ&Y!dD2<w$@7YM&<^Ie!OW)0UNsT24{,l焉ad/҅%SB68/ߣ1\[1HJ#Dkڢ#tuklEC΃̋|~R [8}0 E^T!lG*&%_& hO6 'eXErL&ˑrso߰D˩TʖYEk׮}ϟ?|eddDD?_?wq6`0y̹>|(?t:m6Y'D8`/PHkOOOoouEn:^;T`LyRll>Jez_GB>;XҜ)[Wzl=k}QXlBJ1nWVKJhu| b=qál1hRTp ţΝK(p0*/¡c٦`IN,? pemƂ!8#[Ԅʌ֯A8런ZfoPqrx"43B11cߠ2F+3csK_v /XgҠ)qSpRv5jKR\}PfKz5׷e`>0H>eYÛ`0*&pv45fBO5OrU,d&D"2ݟmmm!6#ʔ;w|WOw2d2ׯ_wH硇:|JsdWNNN^tLf.qR}o౞,ǒ&)u.+-_С lgpuBϪY&=4-+5މ(L]0*׼.C e5^04E' Lqbf߆, zɡ\cn*-me7n#U-+_cw3S ґ&a`4!AmdZ˷ LNd.%ik|^^*KҮantݛ[6/;|?,vw'ﶥ]Ծ-K=uU*xf島5ۍ+[{spR:Y(Q ϲ۲\٫,ͳ^m骪h4:::뙔U K&7)cs=gϞG:L3s={,jM555Bann QB Z1556778p`Op. t|www<RexE%gWNGF_V}?tx=4=2kM-bߺm尼 _u C}ivZr_zЛ5Vi},n3e-%!EN! _.ը5 d(C/Y^`|F]"ȃe܀g_cb|B~R[;r\bƇ)XVWWRwygڵ[nbbhtvv`n[[ۋ/x̙G/N'?xݻ?ʕ+Wf2T*t}W\!D2qB2>cWm UUU4T___ww79P(,|DzO) `<ȡf+H}2AeՕxzfs0efx!+¸^(YRŒ ZW.[Nd1x*ix0vUb2Npvr9Ϣo*Թ{$Xvh29ʲֈ8ɋkB2ꁙ-W2p"sS(}d!s㺑 8JUPT%LaHL9@DƬT,ea:ے~ !Lo(dW񱀁@LG>GaF꒭LddK'Z]a˲Sۀayk2p/P<Է~Ҏ@!th(]@[[ƍth"`0M7(pĉ'Oj_;99yԩ?#7tV"aʤ Ç tߟ0;  1tvuСf+ђ,_''';;;7z~~>Jr%|Hzoxp򟙾v%+U\x<)6K-x_0"zyHhC5#03:Dd5LVV2K]OZZce.p2CВ" S"/"l.\ 6p@NL3)Ha $e"3(@kh_ٖ<*SE>N[CLQJ|. 0 VL ;bw[ڣn)`^Pa_ "6zmz%xӓAKrQh'@%fR)-`g8R5Cp B7ҋCP B555`ڹuֵk2=rժUTjnnc#CsĉӧOk[Ν;{1/H$L&I0>@>1N{dddppakkkC۵)(GH$R[[+tGGuAfSK>lpQ :ԽԔN8Vabj+KZ؜Uˈ4_gphߪm q%/IֶOZ=|W?1xvv':Ç'hYUUU[[ c9|___WW5L>LHx$$|\w4RZ 7Ɠ҈3d ShTݑpi3MdXX}ens01W .=w BR\eo*7(-ߎCu!^y&N'OqmuO9V' [ly\O]* >Ahirruu֭[yp8l"ݹ\+a>}ĉ###?cNxᆆd2N}Ň#L$f3\v+V8pc=f]kP h'wGG9X,+r㏫>|8s#Jؓ$ DFJGee$Ͱ]NT"He0QV^;MXvnK&Y,*W[i7"ka o78,ּ(C # 8] E5].sf=WMp do6r;o`   5[ WprL+B݈9׍É ?؞&XJ>w֟ŁM?"!7 wV\* BCCCccc7n UVb)Y !LgϞxɓ'Nn^{[nyׯ_MA  nﹹ9.a>|B*ӃMP( ;ʮu 5 ҙ陘 ÇC]Uc8]քP EW%2?=+Co-9]Cz<}}}ƻx__÷-477?쳘~A4]j1Ӈ_Nf20>|̱#/UqY(7Wyl } qߠcP0d K8HaBs z+6׼Ak}o/gnZ-]hLf 3jb|-,wN1B43 ^'Ld5GGSSrr ǰ>x؁\> *V-'c,l ML'EA#BHy,S"%f6dU-Iz#YVl27d@"PsmfyC:bh4HLOOj&5k^x .===%:so~>62L&L& cichh;N-loox$"O?o>/Gp8XUUe-h ===xT*e-'ʘ߾lI$0/d)A7X xe6La̭b_w+QY.Y(͉Bk6ek:>tv!)L}xdg Oc*1@ ~oj `=7/7%fh-{ケn2XKr,7+@#uTTT$KY\-zUCqWwr윬XTdſ,8T֧$\KBtGӜ|XH&T*UUUMLL---[l tWTTLLL((vݺ$َ;;v_~ynnN~~ s8Bad}XzH$W^%D&㓓I߿zz;0ƚښcL&KuV >|8*cb2yNp@Sx:vm̢na, Ln0eƐqI3Befqf %Hى |2ۧlMXV3: _+ k/\b_aܥJW1Ȋ׶29,"//l¡`x%5 'X=oevۆ\X(#\v)3}Xmj0еXEf sPs>!ʪP&{DD"DP(4888::z75k֤R7n`<ȽC.=~SkkrrƇ>O~ j=TWWWUUR\.gK|shhl C:۶m;r3ڕ%|~^8vttܸqd2#}D7b1ӌJp%NqJXR1"ϖJI S(=^[&Pn+ ST/aQa׳ˋ% ^s$Z|3! 3,7?-p>.a^zVK:Ao f7聧܃iw𪆫 ,m Y>65#&QG`ӊW$Wa|m S"> ~=pc~<;rh4|wqG]]C LMM'ʀHʚ{󆥏 IDATWrE]^={z!h42 >)B;CˊDm۶bŊ5kh/j\vFr(69k.*D"JB>rɈfIl=K^U`"~_'|^L$(C KƏu^;)]xYF71k #`Fmt NXp4ڛk|"AJeqB'{rop6ufYyosYJ<ֱo GB!>:ߠ 5l4FlCr0(7N;UUU /ӥakڵk/_x+_Ȉv>}g?OΝ3 555v.SJY?[? ={69s<[]wqG}}=io>m߾=nٲ~\zٳ/^J)G+|>)e݇b8 MMMt.]J&Dd2N㙷S)oC&;{/~ L%?\.XB676$sM1 B52MYXװL B#,/a # L&+`HȘ~$ʉax<$L' ŜyY6G$ez&\RJl,!W ̠) 0DʆoڵTBݽ$\lP?s U/c\C˛˸U`?v+ 9ڂL1yȚ1Uo.cw`bFLv _u@Z\8zK͛7\UUUuuuP(TUUzk׮tKk6 Db||\/ FDرcoE;{߾} qhY_"9xX M`@2|J'M/\066688xedpd]]^[[}իW[nnY%,7 ;ؾ}{9Aشiӣ>#[N&Qw?EOJȯ\ҙɗa*|e```xxs37K{{ەjժFZRK.+r\*hL!u*X^cixsMd ysyk$dZL5{se_uZ"c!"4\ao.ܦ֗j+kyKȞ2_] #riמY7J21еyXxd4!Le,`a|G d1bo[+%ͅ%ѨJ)0rɏ)B9{s1C7PM6kRt#ʮ73#vQNd\eudee0kHdx)`!aY"e!?"t5)V9e)i3:"n % |o.h4Z___YYlR[[˻VX111155U(4rawwc.]tHdGI1] 3(Z(rLE8Y.n&7/;\|_Jlڴiƍw߮]n喺:Y3gggo~;0Oo?|-y R?) buww[Wz.2LLLq&KsswmE[9bիWa򕮽|>sڵb8??dfffg%Nu*v2ߛE5(4~:BUff[υT@V ̛Mf%(*W{sR3#,V#cYK[Jf!4Z͇,2\{H2;LIeeA&f"p^ G.fR+)LǛ]Z7]>< W8S*4L2,(7ok,BX j'- #픂w[ GOZvoIT+x#`sd{)BcWJdɌ{@JW>YFC%[e&x=0i~FW]4~%>+Xp8|UTTדڵkejX,9RgΜ9vDt {-}ҹ7|r?[h2>^^n&ƛ;>>'Otx;)6mz6lY _Wz;w޴+Wܹ}ϟ??55e}= ??޷o_0J$|4MVx息+dڵkBr(Bk֬.ڛ;<<|#̐rx%M8%d2ߛÇP!Ri\_EPM>GK\Q,B5=O<'PN <ʽLB \|-B JX!P#|A25I7.wmS m daV']!x 6Ⱦ±<aU8`^xa3;iK%bp=g0l_]W`ddmkodđ1>i7׽^VS3H gL\HʀEf FOvM|e Ee `6E-b;QAж"s8m +ϤPYY`]u5k֐]&q*qeM$[LW{ڼyZZZ zs\.F]?m>\rW_={F~G>Bn׾V*?ݻvΝJ]:uW^u?<裴O)~'%AT*i=onPҫXw34559#C0lllljj&k.333W\/өTJ)a] d7ׇ#&u7W2'8 r%t5LxJ>OF+? ۚv>h[iaC-/j&I)v " z( I׳'ˎ@Lb#+,Nق1 r+2B; .UoF8mwEwnJ#L^!s!3^ ~0f*e3tdV%WQ*aP6ޖ UCa2'- QF&ֆAJ[f ,j6^sdkNrPfa 2_`6ږY¯|mԔI|lXЦ)aʲ5o ;̛+{KFY-z\#7y\<ꦦ&čF7oyPfff&&&.ӵ𫯾oz{y-/o.B >kif|@ pʕ^{ %'֒UYhi Y3g`رr\R K$:VO<ᾕ^8uLkk?;2?) _s\<)0zsnb󭭭G!WjӑIrP(DO"$e&&?%Y+l&"Wd@!gXd7ׇ#C+ i441~ 2~j-pvB]Nd^,b d1cfKH ٻZد*|h)|ueu"|m!SL eY]R)]x 7G%1!o©9Ԅ dvHLFbs^j2`9hypϛsysPAn4`l}NoNtΒ0/d*f\j d#%YjcF6tm\ /BE 7W(X"ʢY ŽɊC@#+%&*eMd33)L 7`͟gaʋf5+Vխ\t[[[|O-@2] @_pW_/U.Q$yGqk[¯ONSڃϲwVo@޽\zxRe Ž;~'|҉ەx {K/+qC=/|??  ~͝d2_D"AurEn4ZH>$N&V̤VlzsgMcXLx% ր (X~Ia>xp#E2rL@F2WYgC.xs0x2vˮlA$ee%^ '"l ̭0/YysɇbhLӱČ Bja  =B%af.D9u-jS4Ӑe2vX\XvL \+Jx&2Ъ%#BdeJ8EP<Y(? {=U?\_vcsBjR6(  wO{ey ;*Sx0(5Xysd-%+LBaQٰKЊB]p&/ߛA,6mRYYɿC=}/L&566>;v0%CWi?ޅ?oʮ&}'\ʕ+u[ 8[oe+x/ /ɗ'|j,@OJև xgS0_3LWWSd޾}<_AB(Zvm}}=}35+uuu͑+r'&&2h+2 NS'd7ʝ|zsy3vp]'2 u~Ypg1 ˎYA0Usd/&sSI[p[SN'?޽'ǻW\ۿ3 O)4F~{u떖h֍[Z H0iwOO$+| <'A&=Oy >Vl-ms577_\fMss31PXblWW)$tf kMο"OӶ~E{s},.(Ue#-^4H(\(Cھ6IaUǯW0ļ% 09ܱT0r++l ʧuAs\l.a5*K=1SV|Q,ZB8& `e!NόʩSf=mQ@+)~Ɯ*U6!ƕt -|+_Ʉ.Pmc_5B\tM7 ^.Y ^~k׮( HG?w4WɄ3 c`={_e /Əߺ9@qm}cuu%S /É;޽:?6tcf6y^5֮oTmؼucƺќW'?8{nk}xg'kW2K/} _`~?=;;++?022I+=gm^gffzzzɤ-}A$y'CB]$iiibt,rbJlj[8Ȫ.x P ʳ>|.FmF:N~s(@Ύ0o"բdG_tGB LJ v`(\T0Z`_y`omԶ\eNU Ȁ`Y*xo 3/ "eTʉ)o|16IPIEHmX¢Y&KV{O}]8ыvTm}duR"p>-x9 ca:~rHhJ([ꇤK!ϑ1"[-ʴXE0SiBle.]hdnjӔÌK |z·X&z{a"ٓ eYʹaÆ/~L#H Ph+W$[ZZ6l LGFFltӾ^}չ9%jii9x͛VsY2N sӧ_|Eh :̼uW޽:0tu#AE>OMMuvv& IDAT <>>N_."~EfaJp7x1)K4ypLg|ior(t;kL:N֡$ {;JaHh"D0F~{4Wę`{L"%Y*Va2_,/E2/i'cr^g\FG3SSZY5TcHYg"X .`Cϱ%L1ٹb0?|OZf2n[d$S+;m.4"g/ƛ+fLcfGF*.eM@a `L֨[]4 vrϛkcZ_"%Ail+/~ ['i:L(o.geU*+;0^.- dO&K^z bŚcLo&NR### Y5HꫧNU";V"_Ae>_dR@ d6F{g>|MޕO+ܷw~.m FݵeÖͻXH\1pm'wѝml4{eNgy>pǎG%WbbrAeO詜|D 'ضmÇ]y͚5֭c%?%ɮ7nZ@Pi@,LiN |;P+9^, PK%`0A,,[ 1_eSxoMA{u\aH"ZV(BZ Ve'^Ym ^/od"!|^*"#@,\(#\YEזOgzseA4@ߛ/pF2k)hb$_=WU$dlȤGjx?V iê{X\k?#2qq1p"@';&`:pnN7W6`E#p-2dc M23!KAe/M&1EXeT\8???::חɰfK[hnn>|]weW#£oBw~~X, rT; 6@,jzΝ;[oaenL-2_,̛xl5|eLBd)!Z#d"Լܛtc,Co.s"l%;H/t j^YpP& |1ystxR:g ςﰘ6u/6Wsc%ͅmSs [nv!B7W4ވZeN # ˀB)0=1<r'8/l9pƷr'7x{%,Blbl+csԳjWz'j~m*(_LL*$s (ɧ?IYQQܼvZ򰱱UVX#HB̙3/('PHDT.H9 ҕ-/>?773ЇX[3<ݫ_~"zmk?;ȻQg/d?;KueOCwzz"@Ǎ7{=sp2 X$n@3X">cp[n㒍bccc|A6-drll9/I'ez_Y"|P+9c@Oe.>B/<(iBg϶Nf=pt=d`?ͥZ.+wcZ{dGBV6".yYm$[w =Nƛ<g]o.م'FX<ƣ$\XNĩ G]kkka_ *ۖL0_m͒w#R e̸vB'M/+{^Ǜ eXe&])S4r/4^%NvG"p9?kaj4deCA#]"aYN+l*DEq,?Ÿ́l{"߮HT(SMNNt:=:: +0@MMM,r|KzӦMԧVXݝJ&A>xbWWWcccCCA&Ţ`/gWg}n6߿7fL^]l wme^u'. g{u`}S`n}97|މT^C7U;wtM###SO=G"JΝ;ݝ P(tuuuwwk3F{~׮]s # _~˖-pI8??H$.^844T(А/gd2NjcYA{y|jf)!BND,|LB)P!LJxkaDxOH n2uUAƘl&|(Ȕe>dT#Fs(ܱi,²3IcJ$+~`P?H,v#lP7Sz@GVQ o iۛ {(3V:|mqh8+TzԌWFiT]c}@ <C[a$or,I m'Pkw3Nju=4ܛܞq0S3 duhpR'2R~4f8HH9he)D d䨼4 Vd,)cLݻmQXDp>@9ѱ T"Fpxfffrr> 2)+++ꪪ2 vONNHL'&&~_NNND" +\j22֓SN? 9r\HS?L1Ib*c+A 8 }cT|LyH,wL kQYu T+`tvto7rM¸2͎gYR7nHBJ8&ϳ,v%<}[/kvppe>oii] Н^G?ttcǎG .ء n_f:_B,L~J6CnlCg.lNos.%sΕ+W֓ _ϝ;799i˗/߸qú^h33VΝ{饗oyGy|SnBB¡}z1auVZ:'-K7r!O]zOU9|Ϟ=G0?~_2p[ZZ,eK!755X}o۷v;58>99yrrgnn.uww~>loc|mf lɔsr+⸒+J\Ty՜ +wik@(M M,~ f!JTSBrA@J`LCT*঑~D9mwL[t0SXUu={C`bS2Yn,[-ɐL %Ws kR-q1i%gP4BYiV^wYaڬ::(o'/eyhکz.7 FK+l%ʙ/=VQ]Hb]e̦_z fa #N 48MVZNpoD"zy.,d)憇`NNN a?_dIvv%K0_h.%%%3Ν; V=N]n큗[M]*+? Fg?[t$8=ԏ^me߻|r˛\u{EO|OUsݖaAGLfxXFΞ=K9[GoooccJeee_׾/pIt׭[|rF;::Z[[ k`{{䤕իoV #)Tf"JE̋0c5NgsQ(0 P&M RX61Uͭ'̞Rh@ҥR0 >3uqt`,f4{ l$ T{|s!&ۣDzN,԰bYaUʡFwGDGHb kCoXs2`[3-]^Muk;x[rTb^+v!wwo7s`ABSBRn>Ĵ;RQvm(œqmooΝ;S7'&&fdd\vmtttnnkIMMNLL Bc,;vؼys[[*11ԩSK,)++ Iw~~>))ΧO/~A|wOR,i$wϼ,3|bVAUބA^ٹu˗z{{B[Ĺs熇DlؿٟPk׮]jD`KKquk0lnnuo6+ "S*m}C9<")a$HBt*/ C, 0\]QTj!^'[鮪_]Z CJNq L0McL잖-*L_hT{ȾaoZlP!EEEvǁxzkR)M*:~BE/J,c"i5a֫  [=4DYU܍*&50SzP2p;ER]ŜDzt$!lۣXhCnj0)jf2i_%_a2yfCYU0o1`Q%irgo@} 5c!r lhݹ}nMZ-IIIk׮-((0\2;;I495᭷:t萆_#Y+V<#k׮e15?dRSSSRR[eee$c5-=?űҶO-'ZјsGEI޳,Ko=Pv~徇wlY|?'ߑK.̴YDxg=2T&''^://իW]633ntEu}Ĭ@z՟,0+R"===qֻ؋Ԥ{r{WOWJiƩܫ Y [j׮]#K[}rlpa \&%5PJlVv3 g#` '6⦧2BQy4J44%蕨_qYM H;*\]D:j\re1X,!;b],!.b4u|sf"oEw8ZW,T~FPMT2: P{#ybX۠u }+(>lz`KSkaBQ3VŒ#%tCn2٤uŗ p(.0 ޥޙXI'筭;cc\/͍x4sGGGӗ.]:== 333Y7deeṹ9 ϋP^^{DT2ݏ?<-- ?$]Fp 0tڨsWWWO НyG2FNqˎr~>r3/~s```߾} MMMEDi+6n3ر"Pe?,..^n]ff&x~~;W^|ٿ"Mk /+|BwU0cGi!2/R*@e.^fUZLsFUODބT.S0pJfӯ,ʥF1QdfJ"z*nEĖQ:Ǝ&L3(6򡔈련&173 g^O[d 0;ڃU/spx34d }9-iLYز(`VDx*>.V9ȖoMeîO* -எQ;m$(h.Wh4D6lg_w!+%K6 NMMeggr%KΊ+NII> IDATe˽;00Ӄqllޛ-++@8F/r{{;ȑ#䍹lpx8+=Lζ89֠[?ȅo~ܲfx焄UVde˖X˖ ,F{\m5ZbEEE\PccĄz9|ԩS---WgO>|p* JR)a'YUFrDZXgM-I5WZdKy}wWY N)I !Qm @6RCd5=- n-%ĉuЉjQP[soaf4s=X5 ]FFchJ#WǤO…%:wOI}^|80U˜mt-Uk'PHn쒕J AHH+X{:^ߦ)R3B=QVՏ#'=z}XJ :;; lYlO)" 糲]611q5{ҥKsrrЩ"V̺[l9w&(ӧOggg{\8я~Ḋ_Wy2S?z=掹*͟C1HAŎ6{y _|jժ~vv|2;;[]]mX^+ʦ _xWB96v;>>488_2~_9gO>|e[,m,Mn.7+Ҫ*.}!F)M\ETXIu @s0:O8:1Nf9P!)jCcK!EcL1z*3?pJRҫT0, i_)bIe49SEk@<*^`,.*JM3/ݒ&'%8iu`x_=ݚ^ UeK{N'vH)& ?gnڐőoRL/SER>)jԭAF}L U>}e6ZG|"vvv N6,//o͚5p4c+ݖ-[^~/bff?ö6CMM tϞ=O6862'~?',Yd0ߚTS=pfZy=7r|RUUE/..%zw}ݫ-f&%%^oXD"mmm]]]htvvŋG!kדE@&u*{@zwMSR\DS\[M5)+9]`.mnzJdûؚOؖFZ&zFϹ)a&P*)E J  HT'jX"P a7:t8BF 0ʒ:h(wdeFt C;nrkNԵ 0<33/ VXAyrrJ^zz={x ҎK.=%%eڵ%%%` !`0qc}\ߴ{|p Y*8O_@!eQ\IL@ ̂[: U¾P (M)EV-9U-޹lK]albLs] KD:#"2@.pV 6V3Rn0K;,y6 hҁ.g !Fq89# - }gcq (JZkt-e/GH8+\q1WM6%@\c$Ai2)5W(S$3|Q1"cj=>㄄G}TV,#mذ!??xx811k 999áPHʘ:ȑ#M_gϞݵk` l=QgH3a`9KWTWT{GdH~I~||ҥKxhҥKܹs߾}[+WG澾>$e7kQmi%Vcl*G^6dZ$ i$D`ѓ-&r}J-JJS#&(Wp{RH (kad8_VB4Ic,`)rkXsmb pchq"wWzLL.i{g屭gۻBdhWx-|s?*foܤDۊ?nBBš5klڴ r*'$$LLL:;;-ȇu 8q¯H>|X^ݺxʒlv xk>+7G͊v_jWEYmpĮ:λ+Y=x2};\yP (4,T?=nzvuq5#¿pz8ɯ;aW MıLQJ'Ľ6|pp /`SvallMMMhtnnn```z6##s. |ꩧY}ك?~|ݡmT6Nj9KN`24K^׭*dr||V O<==S. @ڴiӚ5k6ttt}Vߔs #Rjl&y%vZjA8U*rE`JG;]-V́;'ޟX.x?fJ.ެ`j,;z;1BL(]^~Q24<21ĥiSގ0򝟟r% )W[^Ur}h=Sw TR;%'SK֫s?,H 0l+HS >Ē>ףS`gKn$)` 3ɂ DBwf\FWWWyy5k&''N@Xtttիx][lo+z ~޽{ƍMMMOe{mPa_?0F0kd<33hX@`޽>`zzB9RSSrssE WP(t9=Glo{48kDq=p8%R)"u&YRl'F5Nȗ-2Wr`"Rl1uM( @ -H57v`=>ExY5)syXn)|\+bbE`;'c|-vOeT~L;rK(X"T,+"ŀiɯc7X4ܾ1??r\ʦk9a0weh<^[\c¼7nK3>_8Y<7&qbzjO6㷞m'JMX't12!WHY\-,r^%wJSRH$#7"AE-+` KɑJfq[L=$ ?]6K>E$ijjڼysnnВ%K񊓓 FGG1@v;UXB[ɹ ?mR8TMlK3ܰЮ;벞uJ0i6f?QuwрȦ }lgRBIUOE}}ũ]N*97.H>| A5$S\IEH5}R]c2Q[~dhW#3͑YB^'OZ4?37H7n,,,V ƥrxauaca8)^?Jʣ-%ˈ^EjCZݔL2\iKb3_|J@)GiWT3^[4E *& z_C]0}s݇Ӟ>\=@}BF5ju.J9 'zHᖎ wd1SCCjNDnEh@&0Q7MpŸh8erXgE[| =33Uݻ7==];Ꙝ\RR\;111333???==}…~%a# ۷o/++{;;;j |UqS^j6ùEϹB%ʊ'x Y+Fdi.e⡔IX%>;&W_Q(R-0~Y- IT_PV @ӐqѨ. ՋUW^WP]EIcoWI^=ˢ!j7 ͎zʳ3^Ndވ.˒Jd]Y;;*_G!ZD{GY{5?u1>@ `DNS,\%%1[a%U#Ҭn_`p[؍[46psJ_WKYM Hs6[2frb\$9ÉF[?R MazRdUs{fu֙\7n윝8&"H]]]{{qDJJiu jժP(488hil~y睯ʫ]/Қ5k5NS=`V5 uUFn_}g_~b]&Ahۊ;7>d\eq!"7cͪp%%%T;W$!T Q rIc\ ;QInjXU?fqmD)l1<%Q7E5EC-p, 9ڣUf7UJ1f(U#mVwE@Rfyf,0G> "BփHa\5;<H5XlwjtoNK1Z 0L%w3DEVt1f+hTon,x^+ԂR^t ̆fs, Rq u.a 8b@B])1׿ )7o\\\<77xz|P[[;==F'''IgkiiieeeyyyIIIV.}͛T[GG?;PpT#3-AY4܄kޱ Y֚sO>#ܼ~g˖-[DW&$$~mߔ)$%%q/##;.*Ç ZRV7dQ|wH|s389 >q *:9nEltdoW=#kDh qIRNբνeT0~[4 TRRk" %tww_reuBDQ؜Q#>_ʕ+;wĉ?pttT ,#3i^Dܚ^\[sRɟ*g64X8==}탓i{eeec1DHzh"++,5 ?xBB{W^@fXMݥc6"1 5!XdvNeWj5ltED IDATHz!c8}_ZfH3.!Y iO83.*9ſҨ,%M!9۫ܛ fqd7۹D320sH ~ nԸm g] beе3ppa4EJb->I˶H"!cDKM"څse Jz!.UQĢI|~JUXdff^pvwwoذaŊ>\@$illܴiSYY̌aXbsyyy˖- BFp˖-?O9ra^ ̌5w 47!!a\kZ>l͚[Qzl]]`ٲe~,vyg D fggCеkצꛅ<{RLzo/@ۭ,áBx&k낏ߪf !|_OE rHF@fc:$f ;Km'HAD!Cc, +/%@-}XfYla\ʌ]>$GZ0F7å*j|_c *v8Џ>MaaXٵ'U 5g)zVUs(S.U.QFFFNs{g6aQINN.**ZjUr'bm4gϞ'vrn1Ź0@.KsMo?Wg>tF+Բo8yFZg{ӦM<̓O>1 n gffSǏ9FGG$lOx[7Ҧwcx.A9GJ0䟲sһÀwwK~.$?|M]ߛbpOd[~p8+VPCZU6##|ധmƇ!&^BtNg*Z{a[ E`rNsmFYhTv(qdddg ȉ՛D77OeMR\?ԉqQ3l,;P@YV `9acJ=UYΩi:9dز!LzU# @%̺9ml70 ۾jh|(jh|, ;XA*2drk0+|0/$w;U+;5paF涂UFn Ԑgrb]4DNQ<wj&$$DіM6\Cʇ;뫨[Ѩq@srr ѵkÛnӧ_|E+z R]T8|v[o() Uig,'$$lݺwLOOwޝ$')))%%%999pxnn.!!alln``Ͽ077CP t #AFF7Zy$l4<m^ MvJt&}SA zګ Wc#SE"W1>lbTe74̀ރ͑( Pܑ3irMT!db!\|Vo.:l"_qyVV$JS|mD6(ٟ{3F[Brȭ43h;naK}H*YہH@%@'ް DYdCx„,eʞBia7s&78~Bʴ<#AUHq'ܵS=LSzK}`͵`YH7q {/.dXX@ePh="̈.`Y ݞ Yk7Y6|~\Q58%xDʮϑ,Y UV}_GJ&NB-[,]Iʇ.\hooߺukii)Z2]8|#G/*JnkYiyYiն,zcŠaEE8PPPa|TPPj* ̵kpMMM{{;yhh ]N}XVV/~??G ф(aEK)`kB"ݺk]v{(PdSr\M*=[%D0#"˵xh"p)`JF"k1m#[J48ϸ`EyL٣WJ36\pܚK"$ײVi=EbpqRqSZ1ZJtUjG ,hJW|3#%G©OG1_I?hPy]Ү/ qm###'NXfͺuX}SSS~AAw^L"55( 񙭈f߿+;vbl,9tCDA n((/ͦ 7w\iiUALKZ{OUѵn(&r}sXk֬9pWYJgbQ\億H$b|~…p8ڇ;陝/1/!b勌dQ$DָK$8E `LǰNă-UJh05竒ҳr[Pɸߪ}n@Wc(D˅)sbW宻cI,l.7:ADGS,3e./&)n:AZȋ<4O /U)M19]rdC6ZvfPjNlKqrr/I&x[o#uU5׀wݺuW5 6lزe .BVVVFFuqbDc \a=|vQ0\U]UnDEDW}#W_|S0ܬ>tZ%AY:'eee8p@uu5꾝333 #ב000p)\A$Bʛf{᷶_2%ݯ.Q [%uP]-zH2nvUo Π_y\ C6 rf0ӡ,\Ӱ@144`5+.> Pp_tN8?7bJ5n]'io+iɳpb e hL_| ,b r#.R0<7_0uSM_:7`0D"MMMrˁ>\FSSS[[ۖ-[*++˳bdbb-[6o|رÇeYizRݹ;6)6r߱陗Ҿz:UՇ;e f͚^ ??xS&4"ZjŊ@J|_5SM(2ۗ6nxw -bry9\}j}Ej8#_Q"!{+8WܫyEE`'Nܳu%gpܞC%3b۟"5T<6FM!UH ruePpT wʲ* Sc0#/YT~U ;ĪI^tm̑;8Z0̸ W{z)9S "x׆'\LpRÔ&^iäQ0#2m M5x Ԯ!Q1{_PDa~+j)i)`a̬NY0'eSJAnd (M# hlT<Ŕ<ܦ Ƴ-qca1OqAلL(/x; OY'b VrD`e帔`>J*eYDy1WuA7'+W ں+**>\Ful޼y訴(+W_|vQe˖%PYO m:s,Oe(^QR]UN&JO}Ó! .Tf-kʭiy5-P|㄄ޢl܊]u2#g29J+qmoBP!RF(+sE'6ci,4[E`=Jo$&&޽[Z8ˆFׯ7 r>755m۶n1/ BYl޼G9|tRRYQHg_?pUdi񺊒gOڃrܥO}y'38=ԏ^q ،onNN|}ebbbRRRQQ|E>K>`__2p8 LBڗmۖNC5Co¤p\CI^/1-vX1 2@@֦d*rJt+-EHؔ!z@z: KR"%CUZ!6Hx\57Bes~TR:tvI4|R[NܲlJ@m1k lJ{ ŽʔZ/'J6I PC]Hw>JݣGɚk`rrnժU7tSjW|+}D"ӧOr-p&'' FQ'eٳ{W~Qsc螛e]Ɇ1Zz?=%2׭`Cwn,&<[)73-jwl(7ZzSY c<*o;PVUU}G 7|֬YWR񂼼BH޷x ###4p_ھ}{n &Cp6ʒ \B¢p'$zۥ5e-f(E fU7C%=qZ)/JQ8kN6XQRpS/8q:;ܘ!6*Ebq6μ N EJ6]?:\hV_u8)) :00022RrXa```pppڵ7|3tիWOLLݷon(AO4@m%+K6 k Nf?4>|CG?t wJi9QvNܬRmM>!o/ײ撾Ks?o~nӠς333KKK1W䶶ONNŒ A`pll||knlȧ>|)04C=>Ě`;xaSȚ Q2|Q? G) ڵk@ȗT`C~@M_{[amYu-E6ؾAֿsJF`SJR<]dhD{{DwXJZ ۤ\VշJc"+z `qFzyIE-9rENJE<ꁚ  r+jz9<إh]ÜoNA,yvv6ѱb|%8w܉7<+VHOOpF;;;V\AChkk马/zDUUy܄~l]~΍~m '$<;_?O?w24{xWL\]U573-2K>VkVopzţ'dEYg0ךaÆ/~񋪔10%KJKK1W  !O!Ie1??Ͻ?GO6lY hM"uDtUw>`~\aB4BGŁU%p4Q9Fz*ڄ)%%8I@$R#EWgJ l} AFV&[l&#'(NDNR#x;FDn5*I0^H4e)8$9VXU 7 ?=ưJhUHõoZbr#Y"9$g-+L)b\K(&2F q4 loj1pW`6(iBJG%pC`u  w_23{_8jPi6E>Iw'z}zJ34OR56la!MHhœ Uz뭤Yp_|]fgg[ZZΟ??55e{ϟ?oH yyyiii[ .2>>N~i-NaSnfZi%M?xO,Dctp>^sN㨇 ˋ1g"ϝ;ڇ-̱0FFFXg3CCʇ3~ IDAT|X|Co EpӰgg`bT㜁ACCJD%:jsKQ'"6D0R5oKfaz;v>a:)݉yN)c%~ZsE.T̙4V\!W8.cXB f>..rE6&{] ΂f@)AD0ϕciAHD0岷?)͂krFE.((+ 2bx}87|sڵUUUpB>o裏'uuuf̴ɐ9}{S_\? _o״o8 =xT(e ָ7si.o?##&s̙)_BPWWի:40(P.] |544xD{/MXN82\vww++]ťKYD\ [sr^,:XAntbY`?{b/h;b^ ^:u})lSj^>4f' (R)/30eJׁJEo,Ϲ !u47@6~;b-TiP^~= @VȠFϞ= }GHs\|իȇ5QX^+fOԵ>Gҹ||ܥ $p6͎;z[񔔔r)wllرcSkoopS|SSE֭[5(.4pكbV!w" :h eK>Q"3R>Ul=[HXTPӅ+Y=R64-| rK"5V! 0~˭= ElS;.?\幞A!\0).P# BIPo vp ƙw|¤Y*W0HX ʁ@-D.*2 hs.Gk~~ʖT"0N!xϬ-˝Eß@ya`nᾢZAFEf.5(mz٘._i9)ux+jk$ H%ڡRaT;x ( 8%ɐd, ydݺuT[]sW/^^n]JJu>lA$tg?YV@ 566 WxrƍgEiޫ"P! :ᡣrhTD7.(S[lpzVIݺuk?@٣sss1T$ikk2X+D*++ssx'Ư&&l@V J%BXvtD`UI0J.lEiNXV\p$F]yȪ(ZDHMSͭ |յ*[(;n}zKl-Qͥ+-;LВ RhTj-,L ['ܲ\PK_T.Dro15bH׮]39ᠼܬEaN:VHt@kSkl}x@~}HW}kRbr+f!2~7l<N j[ኲ[X/vJzj~ǎ50&&&Zlիe'?gK.-,, ccc7mD=l~1:ס#lVo SίN e|Қ[WWI%t{Ԋ+ 0GC/\} ڬaʝf_-]@ɦHLJJX5,1 tҒЉ獵ʋhj "RŊLn"S(>i3Xs BՄGt17 9#KSY )EևsԆ:5 Ї4p.@+:bߖر r1z1, Q2*fMMaՌIE)#1Uɉ匜LYk3iJ)dpQU$wu(٥K5Xʕ+6aCCC_UWWD`bYYY%%%˗/ =qU PfmwMƤ׌Dan7ruuu0@dffHMٳgRA|8p8)O/f%Kx9A," mqE3'_[ZG UA M 1,t.)"gy7擛]r mQ)e[RacY9EA5WtSμ7TCUjK.d[Djbx #Cؘ2g$URTgD?xMU (OYyٵ"Hp MEGMN#h ڵkE W]annLktү~+*1@ `\޸l臔5wbbe]@s B'sG/-̽jdm)0\kk1M]u~s1Y"lMHHسgL _kN MbW,T8vY."W*id>]aROD}chGER)();Z:D XS4LU lܲYP:OLLd\1ػw/jddٳF[ZZ|9O!9sرcCCc^rrʕ+RS|ݞ:v-ɋ:@:lrB%lEl2?\r"pHŋG(044T__[r0|Sneee^^(A HNNIx~\ʽ c#`*n\pzbߥrwue s˖q\+^di.Ռ؇]܅W}iԕ U:v |+ؓXsxK 'rLz׺hrx"D㼧h,QӂtNP:Z(GYNp3!2sV[4t&9s{嗁333eeeWI)a:twyJznqqq0ɑ^[WWG:m,i^0rCfY%yz٢⛋ g;>0Seggb#;::jkk!^իWl<  p|_E)*^Уů].)&`]N9];I$U$MOXD`$Bf 0u6JMQlp94aKgl aIsʙ0ᶻ&օ2@T 9Tܼ0i7!a,\RWZBZsa-лL1`s3ڌl7`!HoDău85ϙtbgnS]i4T Һ,8)h~vllNt-Lﲫ^^蜄k\GuMS f]ֳ#. LFݢaDj'qp +D |4cXbirWE- פRs3W$ CԛHfiD |+a:###L*..^bd}XoM6[nɒ%@ʬ 'ȟ*u-y7i! z`HZS*K/ĦٿJNiiiҸʆgmm4 /pGGؘ%M;SYYI=T*)?^1;0*k(8DUOE+ɟxu/l##Rڃa,O`qj~H \( c:S(LTUS>r\?q1dGEWȝ_$0@)C`]U *0RRiTC|2Fm, [*hA5 zL¶X)zDP>.p㗊hc`QGZU8w`R~jub/'4K[ r+"%bsp{ɚh4WL.+[[['''m$:? S WNKKI[#-/s)cRc 4m(q4;0999k֬ARKNN.**ZnԔ;==}'Nk!DўZ{M)7-- 17$%% Vz0ŅLӀu#zΎfы^tHc%R>E-M#R?-*c1+6VVlYjԦrժ"ܼf9Q,"H1 3@HyJA|X\/ p#u+^v) SoV[vmZz؍[a2rӋczCB 9N2I/RkIG{+!G~.fmK|h\Q;1 m{a#&4ܩvx;3s0D*UUUU_җFK.:u^醙K. @{wiK&%%qlrϭ,c}#W]cv24{i\h{i?lƄ@Eǎkhh}x W^mhhhmmcppŋiyW3) kGku, uۇ/0hY~p Pr.7LZvcΤ ^hrKxPL[<4HИwxu|<ƨrٝvg'7#psegF=J lF8dD_´WH?['J xfqa8JVVLrz'fffjkkϞ=k~nnnpp`F>7MSSRNNNiiiff&RSչ\,B߰NW~bIݱISԋon5?q;''zH#%%kxxw=sjއG0;;pc'777K/5nҘ0>>|`:{ JpXTXXP$# 0Y_uTrKJvuQRdq\0qnb텢jG%^%^htIn4llJa[ U0p3K }ȚcIn*|H~cu(욆ن]ە숒2TR@ Q7ތ[4`qnڷ=<)7$he`ۥַ+TD ʁ@kUޞ6-i i(v,U$xp%S.9I?7S+vޑ,܋sWU8 HwgY,Ҏ-]\|e"p@pk KMjB`JAdddJOO> ?#lAOOO7. }_9*%%Ÿ~xxؖ(z.ܺ.3]v\Xp:FJ |.`(kAAҙȄl.+Uz'X+б2DJN.yJg5?!͜vd+M.d+?bc=sVd+DDT5уQY%V |("E\!)dIqs4ԍȭ%&ŀH]IYʝzN٭ؚbPMA{ݹp,p5>3 {{ yƀ[bm RgG5CxԸlJ߬F] $;jnіlc11tiP~Oe YZX[ 599i4\̷^#sww߯5mmmJj}.`zz?&&&RSS K?`;`E՟Y)Ss?y.1w||f'D^lYee%Ɣo^>bn{M`/߿Æ dxL^?gev`U(^gޚT4 $ ࿂Q+YE"!X!!^ɌT=2OӠRY36މV3UR dV5k⃭%i.35aŃ-&5ei8}lĝ5N8 ݏ\EG\퍋9Th#E-법}AoTŤ5}Sַ~MѲeˊ333)\֚[ D aԌSo#E?cSan(%ZK}y6́HoJJի׬Y#>11>}˗NJohhᮻ?c%~Ml.|v/T[&JEFzXI}Yׄ"VJB^]Y@W!OIV5h鴭ᵌRJYX{ V # i;SQn=1;DKNxKPQoŻ},rpm<҉R!^Qİ5vݫC+)pLj WUDuckU1i,W2Q`yp'=8;;s^[$k]w}D"===_ "z IDAT;&5$''ڵr( L^0@>|&iH07;>YWWW__Ϧٷo#ݸD<+KbWD".\o~34N 555k||ŋ}}}YS. ^Lyp J,#+փZQAXFXK]5*k aXl>h&grS/SDDQ11 =Q uAK]ٹ뇿k<,)NQf=0 )jJE܊@*E`ٳ@ E`~17z|jQ|Rg?UVEJF'ŪgM|76ӎC]R dl)"5%>۬x[LqtW;Q9J;  +V 9Anݺ)/Gi|Aoo6.ۇ+p\4PҥK uu.28NǽonBBudA53Mb%s%y\ܝ;we˖KC+[/_p555 B---FӻOO'r:::L 7J{xC 䈑ILiRيʚ.U qWިޏ˶\"L`l ![$N`d(!u@pf@pyJ΅&xmzYdm-CݭaE=vSU%ZsvڵN޵5~;,0Pʭ#BU,\Hݺ@.VMT%xiG:B[,Qͨ(X.zYA`q`0e!v1~衇O]\58rYWM<?{lwwYO}QBxszز{qL^:@g#}W1*(0? 斔|3`СCwEnJ!uuu>|։G=^qĦMD,Kh999Vyzzz4mnnD"sp)RUٸٔnCk5UA+S좰<a}>`|,H%QCq`@je"=de"#3|p/1=>{sS.>+w!$\1tlүNca&ޗxn")Dَ@>gVJRp+ol]L whC( šh Ǐ8u"yްa~JItwwWkkHٳe)Ɇ}q/ӭ&em|U~q..-eJTPrdW$#w4555yyy̢hkkgo)s>|,;~Q\ >smݦ&"\v`A6%3V8:9S ^CIzƭX7eQ`P kgA 9"n,1>EZ K 7nI=|l >ZYk[' 8 `77.tyf\NqdכC1+*lP#P=ɒaDm-t:JI P ߗ}oa$ZWJٍkE wvvOR E~ .T narrW_W&xwwwnJalllo{.K]rUF@ΚusNsI'-,Ց;v?Y544DZ%-++7quבYi7:F(Kd-={KY +(nqC \&uD"F|999[h#<_z{9u&АwnJabbѣoҥK+**Hruj7}kVxs|wX%JJ٫_HMSQQzsh[[kf*V8{lCCÙ3gVkGG.GydO4Ni}N8'&&fBWsGQA }D׀W"k!̒f[ƀ sr5,9-*/CvuI>w*"Lx"\W.8FѶL\AY,3oX=@b; 3hܩMt>iv%;e \O,Tz׽H}韃 M}1Q,<-a#M9{CU$qc\"'&&&~[oEnMOO_`AqAY!WVVg?{衇0S"LNN=zOӹs#tN9xgvE܈T:Wlwo6਴ibMjRSTg^4i0;(BЅs*:.p8 XnZZ+++5 `gׯg6oެCvbb}Majjjll? $A===ee H܋]BgK9i`sUtNձiJJJ\o;v;6ڎ;6::jx<822C.yf[PP`ooY7Al g\؊y'I*#ӈRjb,<)= ?e@ U\%e %*CGMbN4lcy՘f%Wh͠K"\z3B$|3ɂE1sӚdDY?~A2v믿>44d LСCwٲjjj!RZZ|fy(]◮ͣbކ3xHV.NM= ^zɪ:*Nl`(]+EKX]5g3D=w<{l2JkZ'ZT,',?:J6e6H"jFKw ppxRF:ꤻ~LE$f T%Ɩt{?'F 5vUZ#-EdJ_ 8 EUN!";]ĊQeU<ʇKE Q(#jL_"[o588H|>Ϡ\.ZpBMMM:;;#DΟ?eIڵkKw4c61[MP\2@6?d~jBOx3\'Oݻ'Y[o٩s-@ ѡsbs~~m㏯^@dee-XE'Nbs~,l_ R[t6*]Fal\#F %ZI6Ț[9w5 Zzm.?F TR&PA@\ LeHϵgp=s ̨`1}`6½ PQQMaL$&cSfih  9L9hxכ_CKiUf dE4Hnu1qHh&(Sq<"u2 ,EDѰqe!{fHMRtQ,đ$djNL) N 5;je:V\6D~M DR>ZD\)֤1K|C[TTTVVfٵ seѩ|g>t:g7.4{eTx.5az:εl1Awp; x2&3'd.<}s,SKeAjNK1Z9~mϛ7/33.ˠO7==}˖-XRFNz^ܬye]o~{N!!dffΛ7YBOMMTN$1)! NΫѓ\w)C8x!Mfy{D F\5"zDk\#9x:å fp'U<3@A Y#Rdx' 僞 \}8Y`rx#xȁ1ׄ Du$"uu|7WPR$CA8r9 X*,{BR/x; RnoDчUYڿ?K*77БR!a?ûv!/766Lwd3ך? pd=\[>[KSԤ`K]R]yKnz/&ssoVM{С^GGG?ק3r}rJ $ ɥNWbovZk^[^j>CbBjgl}0҃LVf&K=]A"ZY"@,N.E}np ~bEΥeن| -QM&##JQ\~(b˃ӆ32n;:4^0:Dx$bta.){RYNybv 9;JfMo1SX):+Lb8CT .PV7'(Ń"+e(Nɱh4:99ydF%(**2[đ͠@"\l,L,SʑMAPH~Rbb70^N- :hV$oHj-BY>84>`y:#0 *,%-cM.)4}6e!)(I^: HLMs4ոV .8DLҹo#ti`WOGPv҈~uX ϙr4r-bؘuWо}N>XƊKKK0&^n߾P^}a}HLLL a.` IDAT|L}_oK4C scss- ]\Z|w##Wxe;8fkk;,~޽,u`PرcfGx<ܬzvu2QFFFaaaiiivv6 ?x`(F}ˌ vx$͟'Ct OV::Z(GEnl 4f:i`2r"fT>ƀtlAZ\6(iJE'`5[(^f/rQ|6R$r ,ub- ' lzxs)qjvD!LӰ:U6=p\n5#).}FY`p+ ]^ ,KN3k E69^c8ퟶT #%I u5CSgk,Xu,h+(ֱɸ؟ZcY(}]P>+ˤ8U(^=111::j!k}}}lEϟ_\\l_rP:۷ڵk:D?8pV4A+ T >lM\_r\K#b9\K'-,*(0K_tb3g:thpp,/gϞmllԼ"/ַկ~\k"啖~h4zǏE"rg3ARVǩVPrBM퓽DQDMjaE'F%.:R88@E+m]rcM6j6"(7;+n'@hD)'%LDGUB*'[ gEyIeՑ$8ŀ\ƕ/N)<I@$:-ĸ}JX %Vd" 9/IV\Aqy2_QH0,Y Ta )g5̒ݘAI mVj$F} ) p\%Lrj/#ӦYKcvBY]@NNnO7Uf̠r/Dy>Xltt:O>xyttdƢ_ZZJ^K)E}_4/moo=CE, Ys;;;'n^<&oMsI ϥ`\ұ]WW,Ξ=ovvve?~[Pbwwe]F>_eG+8pܹsSSSi(g3}e#v:k$!Yܩ2>9d!%5k~į`/ xqKWRJ7F #-.#ݖ,҆@Jˆ95D `8h|Ф#5zre7o|/[ GkQTTTXXh$h4zɦh4&&&]螆BFGԇI'#Hو4#٥9h9s{0TM쇢fR M"Bݡ0o'UE8E]+)k'. l}1k% 8 kFRW^S qୣ&(o{RL1MD*!MAI"(M!jf'[POItƜffⰧdQqDN#hY p3% Us}˖]geT)YYY[`AVVKlذ׿m۔)/{ѼБT8Vvxpչn7' ^|ɧoRCzI߹h=L˘n};U%/)#۵ܸ۷{B(jmm=z١/566~:+Wܹs͛K􂂂 沯3gا+k"e"Kl6^*cF@, K2\Ce5Tg! T ZV!BwYJ>*hbSQ++)]D3w26NZ )B\b`AJG;8Ѣ@mvX/X 0t? p"5x?%L25(]i>ñXlll,-䔖“(,,ܾ}k֟=ܛoF B`06֮]K0::J9t>lWsԺKQb'''ϼ:Ν;ѻ17F0[Pccu2yee$X`&yyy ,|lp8|ȑz+ MMMMLLAofؼwB4J2{Ҳ)>xR*=EʸͲdd) ,N!g m@~N}t1c]E*y K}jN$'āpbCq4&̩㴽ȟpX"5gWd#Д԰C߿GҼ4BNFIKS r& O&7d}nF&P25 Yr4AByn#dWVI"BX,?22R\\C&n%氯T٭[XX}}xxXy/<ٔSSS܃ElHJ8/<K /DO nvE }}E$Z +WqcplYƫW]K퟇[]eX7^ ɵP랷Z?}c;/ _ҶmVUUmtH0͆ӧO?^g1n￿is ;;{޼y>:Z:uVT䤑\7NZNY(&3TDm3Q @bR`;SCWě6¶MlSCN<{!ZCdR\+ 0%]D ,-cS!_GZ옌Ґc"p0 ;Imgt&t11OwCkx@s W#MiY]6rlz%::/Z(KRX\|.BiG5H&VmQ^e!Bue@"y$t#*BmTDj gĐ\N%֚۔ҏVQ%!f*.ru,daX/[nڡ755²2 T)'UUUv D<_h4 NNN%~ddiS9Ung*z`+Ѝkw̲(5EP[eW߾[444`봔c(o HR}_GIG*Gb42X0kcjj*Ď ӓU\\LəIVZqp8܌EDچ.\hݪHMȉMIOú%]ʆ!^༎ Vo}J _7''g``ԩS$K-7/QF$fPnZ!5; ;X$Z;cك=ܻU:.G + n/@FMdddM"`}Cܠ(@K#G~={N wܵk׮Xn}kfߒᬬ, W!/lcE.58(/n'z߮&VPf|ILKK{ҟ['^?r2Pҿ~@7--mdddҥ￿lhh(--СC~QZ뮻rrrȑWlrI ~ddٺ\D QE>$h#??o޲e FJNY\\,4yImo;M80 LJV|јxˆkR7Wa;+ctUt@k2R|CȮV%5oED& Rbm%a-,eV'rkg? ]SKo8 \@nD: s{ n;Wt%)""˭8U/Q} w ʶ훢ƕ';@qMRI26Eb|a _:ˆ,I>7Fs Kqe>{ᾕvy;+J˧K(26|h: E*pRp.Q^o{{KrURR1o<-a %v{7W_n V/p[Iz (d׮]>ٿ6X4t| 4顾My侾gZCI+WnٲeժUr9Jo&&&i8B266>/ V9Y25o@-EiD6XnC0hd4QBVR5&)"UvLcd͕.J" @]"(4Tzφk_$nl1+iLYU[*i\l Wh;XϹEMdJdB1D*˛MH4!w0OA86%]4wl@S/@2,꫶A"2 !,1`m (]:B*&j,Q_t}1dddH5\gd08ntOs`LLojN˔+hPtiq6Wj<_zzA!S\3x<^^^N~Yr_3|EC=^uE3+x_`={-E]uU\1.}_>r9;;kqiK֬xճV,)_~Q`8ʭ&nYXGUvѢEK.MKKkii_nݦM/رv###p8|С[sݍ֚'O|gʶm۶}rZ-HGriyi&''O> ,xbTUS+9i{yrSrLMU]rbe>;/<2p3"`&\}4Ig,3R3P) pDJnS<@kk_a|_3R?17n,`ND?~qibW[D"rDQE$ XT5A)&׼7,U4c~Fp SoT - ġ"ʹp IDATG0 7$}7xsExDOJl.yK"4C~.eZE8z 0OLlXR@ E  !##Í\8QXuz" c\xVPZp ץފn!| D$0 2}?ӟd|nOAbz`訚F4n~[{\bX_X[sb@4ݑ*+Zz4;wWJ=l2r[6OivK!LPDrncs'&&+r~lr78Jn\nƞfx< a?.sLf\ 2yI-Kp O.Uq[lEj®nXȻ9Yk.a*66Q98fR/$e,wHUST}Q"k^^;׎ Ehug'"¸DVSe㊋)5xaU}L:ð(M?D5zsDR$mS_("8l)MO+e urߪb{sm V$͚L'p%ϛk?7ecsg7 2) x\$mUo.0%v$48!NPVH#`p_sE֛ou'` uR233 ޽bsٲe_|1xH$X;)ǟ{H(^xuוRY=o -SEqEy῁@`T]^xܧ^<륃{oԢ422R]]}gIIɦiTWW?c'j~%pڕߩ)1eUUU2}oa;R~JsQLcB'O?Y774GW5km& ptGMMM7zjj:Z0\$%fzNYJlc$--QSM̆7WT4 ec UkAqF.}9ܬkݙ\AٯDsikRe@F-!eU7ˏleگȆg߁V.[`6 .Un2xˍ \x6锦JNZv^^aOvRƐ\kjrޚ-+h2 t! N(6l(|݇4|kE8|Y4JcJAr"m)EXj\XN}̒9L)09qFe#/}V܁(onZZ͛`xHADѮƉ ;гg϶ |뭷r]$oX $/))CrIH$bms 唂z"Gf?}؟䢞|{nvvv^^^FFe'pY9kȑ[* w37j+"n ĞK%X#U'{5Q3MF)&~0E)+*ə3䈖06hLZPb?OB$D^rxYZjC'¶ )E(D">/''gh^xᥗ^J]QPPC2 (eeeSO=??r8Z8>x`SSM7ݴdjfa ^ziee%YWWW]]m?jsoYOݻWkt/^~Q7~WD }i"zzǞzKlQܳ*}Httt%%%I@r1::zibD"]]]d7lذuVϧ]:gddk:mOOO{{Ɋ]j)sj<)R}-HƬS|IM<>vAHSNֈa͆N}emcF \ucsa5F^nIG:Jt#ܚ HJDEUHU]_ibXD۾?4t)h}Inך۬ @y/ګH>gw3(5fIӐFCSJw̛h,> v&QI͵155FVVVFFMKKcɉF;*'Jlٲ7䰮#|w 'N袋rss)Zz̘ !/-EK / ד9rV-˗Wn'?檬|߮5 OF[A&{nt~x~}WZE&cKPs[ڟ}[\VLz7mIꪫzv{uEn[[[(rTQxbNRXjշ:;;[_k5B766vvvZ[G+s? Fjo.]9YTnkiN{sy>LьN:UAVa)v']0JKZ΅{D2TDlpR6`kG2( W)k+$}@aJ,Z%4%P , #-J\:7\,DZ3hh$$ak^lm {RQeCdCG;ãafdVf!|f4dIjr )X,666&''O<ݽrR͜`0+Bu ΏO>o,G>vZhegffZ1g5\pBx;v޽i*y\* [)i 運0RWyq/ZGoپ`A2f0GF \DjNax"{T΅{R3s7|#rq*"%!XߛFGd yR]We*ZGY 7Y'kԚܖ-4 NUVdߊv*Pt 9H! J"#e%w> S[ص"pT.s}[PnLOa? KМQYa=K"B!aGFFJJJ0|j/C%+,,zdwر .φ`~>]}h,5\_[\K=اZ|ȗkdu1OxjF1DK'w$e@iDW`o7?sc`2/l 'uuu{/wX,]s)Gr~yVO~EURRRXXh]&Ge=ydCC`/YO.+<)ȕ,aV.tM  {h1QNbTD0l+_T_ UMpb|KTYԹ |)>ـHNsO0ˆ a5ErZ"t8N'<|6Gr>) {qݦOM50.n͔ݎ^Oq ':_;*WaݫbR)qȔ1?44oIJ2鑞6bWս[XX,P(WUWW2.233srrj,_~ѢE0jkkɟ^z+ەаi&8KIIɷm+}KDF&otk9/(-]l%Xg?Mn:#g>~cǎiL!tttZ*[RLӋJKKmgϞݻwɓ'#1[D.5$l-!P)vOjT!a}VeW (QYA:5Qlv|֋D/i'^$CDEh ?X,XYYY^z%+33s#d2lׯ/~ /(h``7|c+))Q"khapm۶䛽{޽>uw|5?ّj+FEeeeUUզiptv05H>.(-疫6^ѱi&ibb"!Mh[[[uEٳg5Ol^j՝wixY|pccc̓H$NGё9RN fY['!VҢHdfX`Rc-9b{2p.媤&ܵ-PM%NcmǤD/9 IJkTYf[䃠$&URԲ,Ql%fsCh2vbe,d_گ1&D)_" %RkNI;ؔ8I#CSl b/%+,*MAL.\J|ncJvNO'r|oYn0*+ʈ45 ѧ.:msZbI)Y'\ߒ07@xH}pRKD N{zH "5iMuvz^3 g3eHFnnunsssGG_zCʂ` *-ɬ{͛=zTFmӸk\e:,999x|rrқJQ<;vTWWۡ+.*UϾJo,Enxe]UӨs^q*\*"v0?OMoعsgmm)geei>}WZ7.m۶m͚5r!^ 999܃,'wggEjrr2 =kfPk$!9f'dJ64N7=O} pOr9]'Z~q@dD|RlQ^44/R?"^dP+-]"̀-}b)#>\b$QYKE:ns_95qab`Dj;col}8\zr mM-4%!H߄mVR+ܽ<`t&B(8 o7j4KDdLL5gШ''' :`}C~(rE\pᣏ>o<gϞU믿~k/W&"sXRx衇:;;-[:}O7V555V,iIII4?p׮&WW^{ҢKWXz;D}}}mm޽{"۶m'>zg:FFF̞l`566C< ϧFA:fffû\e˭;g<Ef*͋:b)0dp4~ Jwb[{Hg-~/ϏhddCcc^[QQF e+  +:}w6md;\|57s@t,[֮|S555Ҿֲh:W[v._RvƫRhťŏݷ?n>u?>r--|o}}Ν;-+nvMd"8qbdd,Xy;lR^q+x322Ć㵧u\;vUGXն&:ROX-&ωcSSSKL4N%r#81[xp #mi, ӳ5<{aԖ IDAT;JX*BTQ"Qwjd)E?3\L Pȉf ׀7/$rzn\u4yފ=#juYVJբ`Y[ ^ĹH3ٛŭ#ѼcǎuvvXLLڼyO>sc>я^wuEkYz-[e˖{|xȑݻwOa[-{ݻ?Ϧ[Ov ĵ57ť$;ĭ߽{7;o|okk3~b?uf;׭[H¬,^h4z̙6g0Wqx;d'KjQQ$q`=I}H\'X8K 1`mt䓌 r%H.'5UsR>⸒g:.'fDmpHѱ+46L`,-*j^@ñLpKq۔U!&߷q5(]jx8|"[ Xce0áJ52e'cYnHB`$D Etu2P ™XK?sn#:,6NZ0.1;X†#(فWP(Dt:p+VP-协[P0Ȕ˖-{_ŽSξ}9rM7]vejD ÑHd/ajjj^~: Х\ vZܖs[ yKק͛7$c a$***}y>FFF~YpCe˖o###(7޽։a3\Sb/փ83h5ԩ4r=A " S\E"<)ܒ:d}˸6471%w_~ji,47:P}R`ȟ:'1}6YЃZis$ ? sH &]+̦Wn`65=ݾL ++k```hhL7338???X}Ȕ7t5\sϽ @@F***֯_h"5"\Nr$;PXX#|󟧸~駫va?x?۽պ+evttTWWۡK.eQí}=v<9u|{!ɕԝ#|K_ںu,: ;w,X,ӣƚ5kmf_t#ipG͖7zjjj&̅#4hÛ{HZTn /Jo%z(5I'-Pߤ,e" N@S)]9JJQbL5[ ʺ;9"?{vfm@OOfﮨضm\S_LT(jooywŬ[fO&L0oҖMegGRPWH'pn,~I Lk]!K\LZ=EPp.b](p.QT)1G"?=ӛ=QLNI` D?aǐF!}")[?}CaVZ+++[b:555111>>ӔGy'OnEvn᪫?edHľ~Rd>a!H DEyv}}߾}Ν;R.)WkhhƉ^PZT]u7~tԌzJiE/?Tݘ[K_Ryy%S/MS$!>--mll;(ߺu7 'dU\\͒촂xQ2S#dӰG~>ɩ apH}H2n[E ʟ5^lh,ՍMeEs>-c)huqfJ*WdȥL]ωL`/IJ,C@`5nچU,l-}+SCQ,DXEVh$S(劊aE/;sL#-Ըo xl0t2Ԑږc)=K T7綔z0EMPJ]K%a ζ]*WYٯLxP Hmx!Pqo.\wEKW/_BQ,oz`LdӦMg,?.5¯j?ٹO>=44܌HsxxX*^xL۰a֭[}>S+ro{{{OqLZS.ܑGRjO Lɐ+.$;8dFF\a\se(jw81+1tغpeV`pkJVpH m9@ #9^`'t@!-Rne,Fn.k8>rL1KSkd+(9i$ + ӑ/ i ӥ9ӒDP;O"/"Vp$ P̖k6Xl``[ʕ+/W*@***~~KKА=B!P`,QκSyJl"T3ui6f71dRaNtˉ)+,}(_DW9ƠBrUKGLJ!9,`BB:#Џ@ +D#6V%"Km;7WN`ӤygaͩF9`/U gՍ #A*@y Ҭ ٹ\8T쮣#Y"ܡ&#soOyAdx|S4a͠2ݜ+Ԭ{ʕsrrtm-ȢwyM7ѣuvoQߦ+`..Ye˖ܹMKK; +rZ?1@/;w ώnݺ+b͚5W]uٳgs՜:ux:3g4-//߶mۚ5kL؉G~~~qqAF[ZZ+r爯 Jaԃ ܓ`MSBA\+X"W4߅C01UKIyIQ ۀ]\ T^i Յ0-=HI?+|#9̲a l;t-(S{ 7TTTlڴzxwߤ86rϛ7.+**.4Μ93+ܹs#M~OOؘw7o91f~\M^k]=w1._nnޛq\w؈}%b#) H:"mz*1%.?GKJgWIU^R='_vٲ%%crؒPq,Q(qA vX.\w{Η==sbӧsN/_k׮mkkw.˫*//BN&"@زe+rȑGhg?ٻᄏw޶6M@(...**[>'nܸ׾5{Yy׭[uV+k׮p8lECN:;qy܌͝?qDYYYAAx܊;%)\t:= {Us΃u?WVV.܅v;gPk/,F&RkЦ;wj.)3dnFk,heS/u譝Q `IHy9YJ{PZ>RDF!D"o#^m1]@nnn2.ו)}5SQqu;OQ!eP{Gof0{6,ѥK Rp:AI0~$#.%R@m)s&@VG14yY]e4"HQQQYYY<xwQYYie[TT4}$Mf,++{gsa7^p"WYYFyyVUUOMM}ܴi__.yYܹi.g _155rkmmwܩڢ鳂T*et6x<~~]; hzcIYd}[ouݻwo۶M-GBR>䓟gD('ܾ}׿NN3h-[OٝϟN6~^g +r;:: Px XbժUN_r``Db~~~n @ ۠(%X5ZoyF8Tl>^|JLFXVNO3=BVFsEdE;Q=x6 8pL{Kw=p_iPם-køHPZS242=pZnHRsss eee׮]۸q5k>mVTTB)jq}ڗNMM'?b6l0XEEEn~СC}Qggɓ'UUUv<8ӸnzwMG <Ǧ5,ZW/+XOMM-t"뛘pIۿ]]\ `>ϯLMMuvvZ+u @pwd Ľ:cګyD ]Qi"R2+;l(U(3^;YtIEJK7x}1Qa_J⽹^QȾ@v/6Tw{CzwKQf\~.Co ,U0G,=ANr .'J"2s(F"^bEEEEAAAww@{{;(**jll*تSOٳW^y7Ks۷o'?iܒh4L4n'tgE%~ѣΝᓟc=}z.(-/c@oo9իW\^zv TJjOECZH숳&ij#. L);=7`BPiiiyyy,;sLUU7l_k"H8&5º _җts{?6yyy} j)?ɓ'/_|…¿۹swܱcǎO|%%%ԩSvJo6v]&莎vuub1sH$rkiiwIDunIII]]u:=,XD< IDAT z`bT_0Ͷ T8Mȼ"yy[V#29/-rOE`^/dTJzAn>u#"Ղ͇{)s,ϗOOO---ׯw^k2 YLJ*ɟrկ^}Uto۷;0Xx<" ׬Yc/]dmmV\\lũ([NlTWW˻ly,,,(* yiOe][QQTjddŋ֩drfff9A0Lp T(] ta3 aQQXGdiȊtHlC\ ~%,.6LBjMZP=NO(sD|YDklEy5Hx&boȢ c/cR!#")8e力yQ\YL{i'3htI(?W<4眿 [#R&0Tz1εCJȄ : / 54gI 4m+Nb4Ť(/Woqp[:Mr3@3zäf(<4,m dsssEEECCCׯollt^6FAA}}}ee.:S.D'N 4NwH I5Q':KOɤaKPJƺ*]!Fs8D jN'tʴzLcX;ω02CȘgҕ>Ki)cZ]D dN!20?|ૡE2?j!3^4 PsD",..kjj%%%k׮P)(//ꩧv}w}W._ /ܹex<8F;ر#iŢKƗ/'[WW"Wjx3Zի= kWА|nnnff&ewz%  bNzέMJ+eBK)+>IZUZ5_Z. 5y {#!Ű}3ϑf 0K EQv&=J*5:0_᠔~sU Dߡ(v@4͊)Q1LN/ӭӒϐ֬{_ü<[gsx·>qI>[.T{D[¡t}7 ߶0/!T}vÆ NTVVakS(ɆӇծ~ĉ>oD,3H6@Ƣݛ$1223??o眞sy0uII;::(B BfF"r#H_e2E|/¬FQ1O -xD,DIS2MUy$uv֭Hg׻氰pʕP(# Aim*(;r7x6)}tSHwjS<<{>nk0v7~dW*'|)@?D C'@P٘ڵ#jY<z5fNCdrm|{ݦqVՇHdVh2vV܌Fd$}(QtL{֨t[rёhB8W2l!|JHl $^jj0F%혟zjyyyMMMnnun{{{yy9SuօP(z 1?3ַuYmvww_߻w<`2];1wɠッ n;;XJ\p"d"EDCt^i{En:0Bxo@HM1Q1'd2)5ot𶏵fy5؆90s`$q9?a68#j|q78o{aRGSL& 5!# 0%s ScjrB5"SCdFJ)# e7ۯ(ӷƗ,5Kgv#u*hœd P Eoq\M @ UaJc]=C>]58 Ct` GŒr4*"|zUȮr. řH}ԓˀ6MkԦv#uü3rD3AِKw^hN U`;;CFE0;IgDsX}  CD,G{-I92ؒ׶h%25\¤T.AX,=66VTTȦBP8vᇰ/}K?Ç\{ӧOf/ %Zܭ[\WB+W㭨hjj*))&+WXMLLd]f&kEN &bؗk)]-P9["Nge=ڋwE& hW"c(HcZ ۈTWP:I.&şz.nqRHƴ!UAK/"% O/)10 {y"X3#\ R_|S45>48S>mt꽹67A½?~# yvFHe5"5iNZ*eHH=;`52j'yKH'"Ğe"R%钬?݂==rZA<L=ʚMAJ] epA5q<A3ѡv3 ̬ZnzzԩS `V\Y]]=>>>==mDlLaÆ^xw9|ɮhO|N4nݛPܴgN61ohon(:w+rggg\QZZj1ȭ B 999ccc`wٵ1XVVwscQ^P=LJl-z+ev.#Β"8BR,74V`DsU31pkrX(.G\ x9TͲR#m<FM!CD"=H@[Hܔo`΄P@^/VbAe7O)'!_7 Va'h1/M4r.)LuM̬n#JTէSLR⧭!I1~.2)_ys_q=h~OW,#3FD4###(H$pڵkmmm+W____YY \^SvرyG9rD; ^yǏ߿] UUUV>̷nݚgFы/~u۶mO?tmm!X766qܙH$Jɤ'CCCϟ]vЍkc }Ж'h [Ѿ̶NޔnH5bBt"znd;SzTP\8{əb]jelgqRڔlTyE9UzQu=?ر0n ebl[X4}7WL)3y ai%NYxp޽,,g \>Ci <0VX/tC}p,FuR%ɜ 6\ꥊX,WVVRXXxʕᶶ2%%%ӡPJ?=kojO|/..6ŧD"///awnj=v֭[]IXpnmm}۽o֮]<uaaʕ+ֿPhrr2"-2Y\QMz`Bս)5"Q ЖOu~ty-CA)/-; :$V[%GHΌFRE2 .J0-L5H^f*D Dʔ]q#aZsSeDFd WJH0d^]K"i>` #q<+-^V*q og @`9j4n;UF8ASd`M`?$o t҈lt9$K +Wݭ4ZܜnV]7v5tɤ~a//Բ~:,UOjTށ_&=kSyzԞB9QkR֢LKW1Gph-wP`o9}jx8?R9A9<_W_9҅FjGtS_#vcaکt\})zKi?|1 dG::Lm^"{)!5Hle]ۑ9 >> V}\ wk6E'ePf" LF̔Eqn Xuɓ'{17Ha]F/^XUUWQQQVVC] ?ӧ_z%7;;{=#MFL& ]hiikeklZۓO>uٛ;66F͒D"333n߿~tClڵ1ַ1333###\ lW u-F44>W5ɪnO#2=$T!KpmZjӪ(wdk :Hn(# `D'{d2g]&09 dB#ZںX631H0[X8. W`Kϟ;ɖʱp8vڂl)((hnnFcccXP#߽{zQm"7s۷eX,YG7_z;7֚FsxggАYDbhhhdd 5~uI?՘[ׯY"w~~rrҺ"ڵk###n< Nѿ#dfSA7f [ ֵV7n ˠ^-dRkgdduMmlPѫUg ,ߓ}k{>o;2a1`/J<vI׻6a]S-ιY_J6[B=T+ftbs`N`8hDXa 9Id½IYsz 'ϟ?_WWvڼk,ᩩ)策Fgyf߾}/ٳg霻~{5;LFe=uo{s|߾}i˗\֡ڨ{駷mۦJnTVV_yEɑE7% @\8Jl} #gUc{җ;/g72;&*7MR,kf|ImmrBQT_yf`?;13 ۃDrDXDeLԙEv)=)Sz]Q$}w[Ro+|m$><_5D1yx6=rƂ;GEcE(c s\_mn> =ވLRfe&D >e1q20kuΦ6giՋ>ԁ05z*Īa '5E- (#~--5n0oD2{pߓ)K󛛛[ZZ'uupp.LNLLLOOhΜ9o}kllLCgKKK`۶m|ez_aaaaqqӦ:._!%z%Ӝ?dde᏿ӓUkM %EoX__>bVH]Kwrr̙3H!px`` D(--}G8LT***OBPb*P&"A剿WXI|+M644B( =gA퓥R#H \2LOO777zꪪ ;pa?/ӝٳ͠8cX $-+++PѣGg3kV/̼mmm]vmWWϲ?}+rxooS3La`X,m]H$&&&@ of :K YTz 囫k#m'2៸ՙ(F\ 9J;?С<|1o,e禍NhB 93_OlQ}@h* aU~$s^K4nk,7T-vLv eb6 )]ȗZ{ SstJd =J/c`zvW*kɸ0ab-[e.0Hɓ充ׯ_?,((,**ZXXH& es͛7wttLMM?᳛pSS%Xlaa //99:[ 3a+C(?|rNNNqq3XfhE ۷9yСCwq8 x룏>W6@gg' [o(++%w9լEJ uwwk7fGz#O#T4i<1w ̬yk\乥zH5=N"E٠ Xܠ`QŅQB̀f,hIg!˂o5<1`lRXiR%QH|J<:HSgrnid|CĚP51Ȃ!f4 LDQĸK&mHF*6B4]˅͛jQ.9+835?Tu/I'$o\)Le48?/?v$i ƹ 81~MIa1RDv~~~ttt~~&777R>eaaauu]Zkpǎw} eQF###|A"hjj*(pufTjqq1HX9?=̴?Dߢ`:~g0yEiѱS=s$~po$xצɤ?ܾ'ONNN%;99yܹ pO߀tMbƍW/dD".]JiUvh`hhj.MN^Խ/ghw'qZX7"h}M9GDLE9ŗw8$߸JPж]5o8-1R|(:O.cP:̙#9RX҉3ZȗRe=tĔLO&e1j0vkȇK9+>(Ts '0i\0qE>?Y>Έ4Λ#[!=]W7Р!2[h29?,ytW% K YJ‡]љ*LH:xvG#U"A][-RAcR5\JX7ç DQթjA*uqnX5jOF7Ho_񁁁-[IFG}28LNMM]z$F"弼 9IcÆ w.,,b"HMMMlrbh4//ϊo1:0, WoQ0MUU/~񜜜SN} _rsKGsM/o6_by͍FOB.h _rZm۶}+_?^XXMMMׯ7[G+_z5LZ^tɬOMMy$L,U< ]@{P4ÍGOEɈDx6NDZL%_"RUog @|0x҈u$`_q9:2씴N\ĆRYldy̔;`C`"mT| 4FcbYxQ tWoM}SFFQ l o^^׻F@}U $kE֯^Djjj E/XrŊE:xyw,x.MMM{pͥv19.@~~EKC>J-J J`Drrrve a}ʟF<zY;2Iv''V٣hn<:44tp8Hkk}1Wj446 6ԀG+OLL X[#% ofOOw"wr@ ^@)3@~Xo )ϔBe>.] `q?lw) 5R+M,79g +FNɈe~8%)*1p,!g'Zx.(:OF,ID"]ww?@mǑ3E)0SzGn H79Vg~3 ~fA eiJ%\PJ 8@.+1>HO; "-VMC^DM*S{)s&S4A1 SdiIUٻJs3JmaU:5|̝bu\[*:;g,le'L$UUUT9EEEh€j[^^cǎ͛72;ψM{KZ/[_!%z%Yzuز=3urNNNӪA{ҰT(/)ߟ߷kY__߮]/⢽/x4whhĉv"ȩSܜ\ZZ~Cw9KX~}}}=!̤R)% ǏTZJ|93-hK[o}+8:a1VB\Ãg!Mf[^Tq]$L D[CJD| g-%[C@ bA^"6^fPޓHH-  ty2oV]_!*͇I-h H,R)UŶBm . aPtR^4 U sAUF)4jq<'m8z"R U VJͥDl@cv5t5>.i"9TW)ey$moo~f.&A$...XXXmܒ 9Q⼾~޽gΜPm?æ&;Qx<R)[vZ_!%z%|w9;3vKC"uⱻou +guL훜NNN>}ʕ+ƯȽxboo+r;::^緶]Jp"FgΜrp7x JRE!Bl<"Mu uaN8"cĽNJRR$LBd)^A01)H4 UODy9<' 3H ZZH2h9-aJ[7#RM!įD,!ʀoF $9*oqH ٥]^C⇪#Nl@!EP~(%fF%%ꂘ+S4~ NCt)hrK.8 ę2OsM3fMJD.]y 9drrggg(sD"AGذaCGGGaaٳgU~a___[[[qq11k)T*FM`Ka+C(&''痿ڵk}}} =7}E+O?uԾ}N>$nmm844ύDs Ο?OeNu)ٳg\.o|cǎyĆԴa ӡPڵkDZqip\"_uF9ӝ?gR7&"N/o9pցM9ED"] e`-  o"pR 0JYe| D*ԌU  3R/E Qv=J\Ii*eڀHSB,J7 Aekjjg|{Į0GxK_nQJK(W~ 9Ulfr&gPvDJ̿iD>ʎ4A!0}o614C4~1JUM9//Lw]{shRSM48/.,F& '[{bFg^w`JgޮՃ19z;I\@o T~݊WԷ/@mz>s-J`y(/iҮQf;`n<\opcI$W Qp_ ΰ+͈~)ѳcZFV HmhgMpɇZL/}K|QLׂ?o'6yy' z%$V5xctī֠U|뛨P`\tg;@vNV Ni z6'x[osUKou>\bEkku555-d2 a:{6M̙3/3}cNRh&??q)N>{}n^;}%E7nj۶i͝0A\B?]~;wB~^zYQWiHp8}u:_ZZq$RҖѹbdիV; ]pt(I4,*ëRѦBi14-"gn1AKXG>X> Cw묀7I@n.;8ȰZEa+[([SP,9)=Q&8x EVLvJ2d#R%exG4nk$qsd=R6ڋ41CF)*Yq7HRbМ!NȍNC@ hΤDypS 9h.#kpNuNZCs/ptw9mUFwNTWLbfdDs jk5?<3O =$^gDs)%$PCztǫ T|BɅ/@7y 30sBdOvwwttf2|a7tӚ5k,֪UDk%v)G}׬͚8;::֭[TNj4>}9ݵ30JoܞsΣGLNNN[oqD=q?orm~zH$ry]OKD+WR#eaΝ*--C~~~SSիE_/,,$ɹ .\v(\VJRd'}%M/}`Uq6"G}oiVZ_BQK*h.3w&]D1xEv."2Y; eDN TbGsE  39,k;"2|u * H~MWBUMZF6^Q^SxZԨ& r#HT z4ϔDr#xPM)#7$>v+nI hn^^~ iT))ZKl&kDkY#1Q\A83ZP'S̨hj;H2zU4Ն #@B.SlT'X >Egf4W:j"e^P7靧׈S"+e D8#tfT+4 ;,:uh1ZOV\q܂h4:66fΪ ̼k: nG}oz\GAAA]]uBlfeff4wy'UUU}.H$$BWTbs9/ 7  PVf$~СV'oll6󘙙N&Xʕ+K]"줯U%f^w7x… HUiq+-O/gn 9 B)K!CZ%J\mRc" 8SduԱĵo|СCvEX?.]Z\\τ;ybK.mCI=۷oWʵk"UJ.]477vo\VJRd'}%M/1 |Do~ӟZwFl7Z3K' i4M1،F4w!!Њq(b?'&FsA&E|A w%y8,'!/*$*`TDb2S"G4RdLB^ \jBgATlDWCECŁxHDL PBFgլ(iN?GJ t\ 7YZݪՃo0I|q{ l}iqԟqXR=3g2Q55.C%Ro"u =K`HIW.?N\UUw̿I}: 6XjOVXֶi&UUU%L&'&&D{ w};xv-[8hzժUyyyMRԧy8@uuçN㸔M_혢hG}d]?tuuYWDkkuE޽{H.**Zn]yy(A(bdrzzٳVLQMJvWG49v||?a q5Ci )h.ЭE\7tܝ(Es 2_LLDV6h\b\&1YgH.<@YsOyO(U1)a  |7Oتon~r0k^h(^FEu!9>edGLB%+ړ&:Àq!!ޟ&b4B鷱|הb%Jģsđ ~K֗:')~{%cd%Sp!^(=X(f)̋}?q#Bj4jt" J2211#}p)-1S:&Jz͡>"" ǩ~i>?w/ F$AzK)E|"_7@>tRkحْ?ͷF-5܇vρ7׵x3Ș4G*ի'N(((hii1/>ٙ?Ѹ@EѾX,jժx %ѡC[rA& 6LZwygttMGOOѣGf2g JOmpaYQF ٸԲ/1k^U598WLEDm X(b]7Dq!H|):X(g3 RKM &BY"&-)t_5"CzM3 @0"Hu,ܛ+Z$Z1G\9 J!̎/}Q"2,ete-H^njxI{=@/=aX=RJ 5gxH-ZBc"?JGRR= *AH*U1{sc%vATe|)/\Drf2ڿ^̂ܧuc2 o喍7Z듐Mx< YpHoz^{M={lڴ ߘsիkkkt![@g;00/~Fz߱cݷxuE4F .LMMI;O(++SsbUVbT*533sqJTQAPʂ[!mA]H54\53C,{~ ׅ 'ODrfbZ~>~‹YDӑnam߾}htjjʾL׆v|8;;=zLYhmmݳgի\s+V^L7[֏s?izmٲeǎ>kGsc0b^BYD-}v~?>ϯL&ggg绻L(LCbvW֓w}>ZXX@@o#PL<;Vf:K/ i42mh.Ae0(~Gbh.)<'x4'bgdPbLySiɿ8l |ֈsl4 o42 ~QiQfjjؕ) XF\xVy_~6 VZYZЈ*h.G!'d役(w@g{Hl{s6KA4""p'@snjCZ.YldF iLOj2W8&`,,< b%I¸y3X\Jv#"|Wۊ]ٙ7p@h$C3Η%77~~?}^z幹ׯ_L$sSnll쥗^:~8Rбy={"Xs۲KP͵{'NpkZ[[׮]|]w:鸉˗/X[N+xFQ}sv(3WZXXX(J?;;k pD$P!1;+izYhЯ~+%2zSyx^)D&Ee Y IMtH&"\'ϔjCV nf"6dB!B"#n%PTM/vQR^'ψFQz!H[pIHDΖA`:"֬ȃ41>SzT-!:{s懥ҍ /#Y ZF 0[7NJ>t(v9P@>ȡ 7tXEj\_$?;RTWO(8?ؿENΔTGLQPFO`u 3844:Py֚Iw_!u"< J L$#R:p0(-..=$#T$dɫ>o+V݀d2DB} 9{K/tJDϋ۷3 |.zkXreCCCqqs(ɖh|$ӎuvv R+͝bG|^ZZz{())YfMyy(b"H&ccc "a[CbvWPhA0}L@&;lP .ddm a䜯,Щ(J<{GSFJEqdxj$1?ł BT\rб3Sgz EB"N|:s`wH184lǚzeLvJ枴i CBOךL *FCM~iq $?n)FihA,Or=#j?MT[٧q(+{:>htu)F̈́2g"N=_JC7o5.=0SC`i*^{'q(zNq-ҴsWs"輁tتѱ& ҇ccc===%%%V *ZRRRYYc1wttן={֙R㽽gΜihhRA4[\\,---((Ué>Ds Ϟ={̙H$A/W4"^\\t޽{oWb.k׶ [r?~YH#- @&;ZYl,L,%PJQij!4.+|M* b |"O() "8y])H@ZD#Z>fE5S^"@)E|F2HҏQ^)յe%נ@wRޛ ͬ0Jg8:Di*L؛9+:h՞5QUޘJk/FL=l ֲt 1*Eeq3@ڂҖ-+URWJI5" j<˟kK (IfR^Z3"I "z⻈5?fWete~O03\[nF$[]9ۚ;S^p4Dnևe[ֽ{Z1]c~oMMMEEEE'H2p8|呑]^E{sxN IDATOOTv>9\ E766"WZR/={VxR1.C줯U%fAѓ .;v "׽$d!LF6Jd/+Zg+fbQ=!8}8מVPB#2̸ 0Y8sN2ű~HK*5Lh._Pd*+j"WH{|E~+%&i\gHE>"m EJQg{KpD%90%%vY YzgS^|1uNZFJ+lZ  BiUDqEs=@SР _J$XLl-(E>&KS$5L.ddۖ+SR6c K#=BerLd[dP"af*aÇ\cyU3 \Os)YNRxp!NQM!'Sίh.( 9;e8h8Q .Hވi<㥜H{鑂{s]J%o1{~!LRRX&"Ny3Υ@D}tɻg'`)j.QOQ%F:U#Mel/L|c#p8:Q ~bAcH^lI}v|зtJd,ſ-,,VX3L&C@]7̙31]=.l1OƔp W.hn8vZ___8FK0͝|f"M+--ݻw?i**maaڵk+rm^zĉSSStœQ$UUSW(Y$9v;@/{OCOѠAUx"ݶ" uQ%zgC&sr ƁDs,F(h""ǎF6RdP ?N-+^d$eEsjBuC (m ՃE3'on[>QbQHP7jRQ܊zHg l4LEGHh./#~38MM\Dy _ J (g0>~HoQ|"S @tTqqHG,}P 23VbJ4>HɊЧw6Wn8G0|vHa3SєˠSCI]E$0_Q:CRxPJb~K[Zqv%: S|Qq'&J,~<@[[=SpoL%&ڱts]VVyK ƢѨ4vyѿLA}}>Xxuzz8;dp@(%&I%Fb,Eʖ*үb?Op9"2T*)EP E$"$2.^o3=~;g{gfի;::R[wEs?쳋/9sfxxɮ;::zر3g軘{瞳Eљyݺuf?ǏwʕJg059_9>`q 𝹜4ɑZ!o#Y V4 --Kx>Cm:Z&bAC PIq҃]l]zKlT$Pн4$O//-fX,`TPuKCXFl?T@Yh>pFڕEF)#$.w {9 ~w` / 2u洂 -@!er+$VWvUAoFV—NY#-Jڔ˒'))Yi(rYZB XcFxϮ`|;sM 76)Z? DTpVO&HYJM>",6J{BTM/ˏ=X/ǚץ1w5}C{ڵ_WVZl˗)ÔЏݻwtqM7˗/7)Q՜ҥK׭[re˖̓hn__9|gRåohcN:zw\B3V JJDO'ąY ֢ WaܧAjP5\ˇf9[Lz|؉rê@hD"R4 _I,VumY)q5 |;kיVI/Y@ ?a |N3Xڸ"5J͈6 Ç-U [vdI3uSׁೌ4ӽ9p.9^DsjFs1eX.`.$ lq4Z'%zkϫ<V\F<'}N =[R6Jͥ϶2k^UrC'YJg'X禒+96R͠A/ XSf*P U>p'it,5k_ڷ- 5M)Vi2-+'e˖[oyrCCC L7E =qďfn[o]h93gJѱrUsXxqj?Vtiq'&& ~MK>rH@Ϧuuu=woF}ʥK^wuO޷oիWi!JsQj@8*srWYEҥK~JT!ʲDO`xMe J(I J\{4K= < ,KcEs} ؉Vhn[[ӞԨI 8ٔʖdQknnNT49X禲Q+%FZ]Ɉ\eZP$ej[aMiU&N)}(+`ʕ>֭[A0Ě4Ar-۷oǤ&{Հ?^AҨ+V|_߶m5Bg $hoo\>իW&FjQ?R*}211O/ ѰիW?%K}Gy:ZY_3M[[ۆ VXL?DIdq>TV|L_4ql!ۑ.S333%lC=2RZK(MkčZϱ!=J̑\lCI^h.[U偡= ʫC)r$5ZizYLcD`i~Z8:mP+Հ{)hQ.eZآ%ĪF2. $`^`:i9:i:ȼ"7lV۟}YRk֬Yn^kʷ/zPY3*y B =BnG.rbXuDׂpZdh=[ьXd悇,ΆKO.%H~$)le[W@ Y}G[ `bC7Ʈ\;4brZ$ijJY2_݌tIHcVO@+$i=YpVJreUs`Ử&hnuҲ WJ\~Ikn_j YbN"5W8~S]YEs$ƬQ#-J4..]hJt:tnYG${-RƭKďe@vœ׬TYR*뵵T*qR\b#^I]s2ꥎ~ff@5aV1;;[Vtk-} ^u48R;5{^ߟ\/.\عsy[nSs2I)dMId3yzVe4whh(ۛ|ܹ_MC?$K~;v̺"WnڴgMvZGIFgg5\9,+8/O| }*srYűc~&W:*r>XZ$79SeFv[cX)M 0wFjjfp,sت'I "XJ36<%@t˵zoʐNcj d-)6JkV.LֈSr$$GID ͻ_VE#NU%@9I8%%~ ]V9NPH VR^SH=I.eF,`* X2{ᒳH 3ψ5AFvf˷>fbBv&1- (˖e(G5 {,ۮ$r~\A%J"; nn=7kYw"hZr w ˰ 躈_vJkT~@- G巵}7yAvf'VL 6'7|۝ !qY9^;wL.ՀmE|_0zLRZjǙFC_oQ8pŋ?{2},YvڥK:^pwb]Ǝt:+gzAկ+rYhG;=$RjeXǵJ i[)f[V:3}oi@j*GXY%E*o󡆷m.r(TRE jZVg k;5uAHje|YN8-\r9g1L$(=ܡIdTwX,+L3)n:|JIJ-[[ElM31() ^{ܕ_%|1ǥrљҗbKaE:N$S+^(% QJpiQ.7 \e10%Gl:JdJò/ : `uy}?4ecjjѣ6lذj*@EC3ūIooǛ[`K.Iv+*-][Vww'4/ >+Vd숥:cZ;O?nʩ\s͆ }x'B^${뭷~_$[rSvh{,k,XiɥڂlR&z "%i58lj ?T6B$Cn<؛Ku Ӻczfq^[͚f]IYI{s%5 D:=2ݧ~:8KYE+l>Uڮy-JgUV}K_hH"+/_]aL9<TV|L/MByg^kf'4'Ac4TuMPN8ŧ`a,,`g &~lz*,*PB (`{]e IZJWlK򝪆! TMd9e_ݓLvcAf[%hJΖ`Vd߬rX石Jc`J2DQnƩ:p5-U.MPg{s Jn(&) ^{@YӬwƭ"BQoJN$K:'oKq.U]LSX` ^T+A lGrKYbi*Il Hɞq x5eb888gϞ 6HDϯ圥p^zzzW^0,_ellL+)vo~ŋ}(GjN+W3ٿ^|͛WX,ȑ#oŋTW!:>ӟgG[*LZwՔ_c$ؙz>qmFcѬ` ar1\I.3 xTt2,G-'p\mU -oYͦY%N a,iM. Nf9l"ظNyB^9ÓzqFpgK4 x˪&I,=* /P\/Q&:::ngŋoƉ'xa\[oU[rˉ(J̅(λm@ %w~JNKc\)tZvY*@/Pj-+Ƀd4X*eb,md-w kgF:N;Wi4M}@..XR*t:b Bn;y.!L'^CL# QD6-Y(aSz}7Q[ZrFD2ΛrAh]"RiBH[()H 3TGD+"1J%E+:Pc#P[%  04 K(zKl]RWinZ]iJUZ| 6.iÇ:t+od\q'VSpl4qҥ'N\RnPCre&&&S5L)]v#<}I SN}]]]˗/w f"Q|裏,2}KK5s\w?B166ڵ+ J LpNQ,H_^2O-_xR\~ _d%3%=ĄtvAk5|l l}h+!BP^C d隓r &P璷7aI:ܛ˞ O:ZMJ-G IDAT9{< :@oY6i$\z4FCj) *$7d$LCG暥QUJjl/50 Q椰l\"}\^'ivKӋH~K]{Ji]+F_k7O>հWR ۶m{6oެ[Qk*xAaѠNt>TV|LC^{j?nQOƉC#'OzWu]#k2C*Xq7џ&p,tٱ.45ZwRbLkjj>e))mR# 5n&kJ6aeI2O񅉗" R6 h炎ƍ$:z)W4e0 ʄ%-VwUG+=ǨK'SP}ginfYlUKmI/W ='rf +Q;ls&3]KY KD-zU~BR1T]?D9zV2v*rF$,ua,X]+)/^%^<@4+òWz]v4755u5tD} qeC/ZxL~􌌌ZUhYC'rŊMMM@pʶ[oɓ'MÖOy_k.>Jp…~'Y[öY.]}NsEɓ'~mpsO?կ~: ΉvyY9z\QC5?Њ(.QF|3.iZ Yc!kGVQl @!`_)&ɉ@''l9ѸX%F<$MvrëeQr)6Ot~64E)hy!@f#E QnwGƽ[T_u)!T-I$2h)2M4Ϥ*333(J&JR*4m6t&|#if,+[FQEX Z 3eotv۰D#-04fLLdlHTN|[ME_v TId+xn."N RWi[JX[[ۍs1ݤAaSmlsf115Q^եL@Gd]‰(ؙ] řs?\x@ ϛǀ>ܤ\]J'&&>|k]GYDOdGiH=833sҥ>lɒ%kll\<9HivMv'x"g\S'OMb%b~ҥׯ>`qd?p'gXA|ʙ{…ݻw>}<`޿QC8]vcF3` 9 )afU;]N7D䨡ɤhbғ,"yE%mmYFtlq Vux}e봻-Keݟ֘b3o߳v,JӍihՂUjofR ,"-i+Rbgi1# Y\vDO 4PEEs *70bzkeB4Q7'-|ܩ z! A,5:>n4WZftD9 jSh@-D@J -3lmUK@$aPag4Wj;KEh+KC<[Z#!nic%*td_QkJѽdμء@iPZ[[ 7faffիΔ ZLw޼LWѰy[l1cti47ܹsϟ)駟~+l)֭[|rgʁ?ҥKe H )Nw>TV|Lo;66{&Z8VW6e/ b -hrH˥\e٢ZWcަ7 d7GYpNivZl5+Q㍱Jsnv vQQw*沉5N`EgfƯS;45M,aZ: (# >K?9`Pyk`iyR*Jk^[)a R*M{r%y ^Pݭ^}Eszh.|ՙؗI¦ɪtY\ƗU&hktdQhpEl!l{ffs3<)^]ؚSi`WK[Zcŷvٱ1$ /k׮XNhkk۲e͛7m$؇REs/_|^{4p?so'hnn^z5[TV|LgϞw4{Qs6;4*_RBYފ⣹lbg4yMoDsDЖl[?$jY8W,[m^c  ikh-aRZ2;d1[:0l-R"m;i) et`tYmdFI=FiPVH%F((_Iu3CqՑP" ! 7e'g޴TU/y70J^+BWKr^*Jr*aM IOV&C_RJ+`iRڜ |=% +s9`_4Z-$l3]R:UUY efOJVм&'*(i$zb`f7|A9"@JZ̙Oߒ-xli5kz뭋/tZUʔ/^ܹsk&[) .]Shn|K&''CM6_tErʕmmmΌǎ;|o@\@|_J49_9744:uꗿ X 32V*fξV$%!h.*7؛ߛK/m L*N-$%&OgL5214ߚM%) :"=iY2~1fV VC$2* jV(p0SHB֝LI ;^,vrrd)}fP$j:;NA鰊͙r.FsSX4J,YZm]r,IU) BHHŲM` ,,zRMYHhU2n5(j 3q] a'K2MzpCijXay _mWګރ.u%K&)vkd'2h\Z: gqxZxBSo"8Ti !uιVI!Vs}\ 6QL3fK}GmX}@^,4hU}c5+BR3Ko5 8%$WJh>Cmlt\:gmQ6~,4_k>MْfWs+ɡ!`c4VfVQ/xuS̰~ntRǵ[\yKBB%-/|k[MOE}W_}'? }/ZsK.]j%Ds/_<)ɜ)-GNݿQ.>-Z PzXu~Y#[jӑ%Ee$P#WdL3 ۢ'JyAtzb3`8&u b0kI*'$pvZ1?ټN>iFNK5Ap4&X>6׊ XFgQ 1:ӹ{,Wz 8)WCVyTTI sf']K1l}{"W""{!u=K9xD0P}ž,*i(29WV ƸS4llN5Fe-}R,@;Q;v <& L]岕 ^D5լQ@3n۶LW߉^kIɜy|T$N\rǎWd[흘H&]~ӟmSIslmmlkk[2ZSSSIVz0 ham۶?R{wwի|1Rru>TV|>|S]8jc1_pɎD f9XJ^Z |OC\|yMRk!eK$r>tzaI Է)y;TYa0s1t­RZšޚh(qMv.G*J ,)NNJ]O;#V# ,|rZ_`IHF}EGs}Ҍ}?Y)L;P PFs`k8^I94z>D] hE֊L8===;;}t~5WqJ0[ظ~;vtttP- {2M .<”qwV7њ 41$` Pm۶gyf˔/_|ݺuΓN>}\K{L˅ &_J49_YO:ꫯ[+Z^BHa\ˮި"-h@l \+Kh0|;~giiӤh.aeBeOY,=/!p+ Ձ%kqI3Ovi2S)lE xIˎVNjq fe V9H/5B5JJ=]Jd);GsӥŒZU4E5_˅Dsk XKYS2!ʌּ9΢¢* R]a7\vX%Y6ˬ[C6-b'^J݊/ܕ* [ಧrv.`&+6@*WOj7lBR vpWf1 {sJkD˰7W͵(Mk-53W}Նnxea◮LpFvfIMN[kSv{\Znf}lF ()? Rl^pPl"g]I2==pm}ߖbN(W#-:ml6lb7z[nEyK̘n N)w/Wa" 0&6cY*G;;;5W8qرcVי %ꜯ8[o[+Z(UC );4^GkB_tLtFw\% -ko"@buVmqLjFqdeLޚw.3-.p1-%KK`Kz'JU'3`1¶OA-mܳz'K>ѫ>' haq_\}ÊY?Yʫ.%ǾNp8- c9%  pP55"R@WPƔ_;qAD|y4̮G01N:3orWZή4q'`ت|@F9do^_eTb#@y&FI666Wia KA%1+*i]wu{~dw*˒[+D~_wu7|22]Q,pO^{|xL0O3KGGc͸ٽҳK,ٰaO?ȑ####TS3;#,.Uh*N>[o:uBT=i+| k>,(][)<+((yCRiQ=Lk(kL:PǬ,V0UqpC٭*)mqJɿa%SjOyԧҠS('N"Zb0XAbfsY+ٷ+-Q uYzc^}'S$Z2/9MTG:UVm+{49-%f~-& }e(>`$MYi{4kp0nQ \cE/[+ *+JWxRH@#,!bQjsbF3ʨ,_SJ~%|yB\7(Ҙe>P=[ ;@L"$aVUV=B S^ Vw@^/+uli8}n033;44$%Џe) S,MPI[woF_lذAsEnoo˗/j 4Z_gzI?JRy}588[o8pB;XJ>g)sk W]IPEQV`ɉr.FJ̀sצU4〇]gjLL{*PtV &UV4ע%IJq/Sie$ ﭽ:/ۊʹ"d^|h̸"թ5@@Mi=LR/7UH:_*|{锶VŜ\Z85/J.FsNdrd"hn*@*i0d'I_BiT5Y悕n,H+3lJvi !-07±xqjXE&-A:_P7UCiY%-T44մ3s|Ԃ0{$V.3̒)(Yzli8ѱm۶uѦYi4<}t{qe9&|׽Y[֬Ys{a7zԴz5k8SNMM:tO?5s-32\Ʌ DPY7ܷo|S 0Ue\R`.zu%A=JE[1*"@Z&2-ͥX ag(72+MIe(ޙr Ds-d iZy~vTj+1.kjYpw8bfrh.Z85iJa\ϵYf.՘)xc7EJTy͝^]WRNk$i9AIR-4&_\Ή#,W' R94b*GbHksbFHf Fzd!֐YE S)fVARu o`M\'IY>o'looYN笅xV5X65knݺ|r@ }}}e&M6<W^J G $ }!yB#C#6yͥ1KY42RrZ[cmVm.5[dTY騤6 <3VT"i~DxgbK'N&k謪Ρu:⼬?֞2+=ja kH 0k^d_.)JTU}JU;(9d$)qDsd ;bW5W]N-1+ŪG㤎4S0aإdDs%8g";1JŚ" JUEsUxQ psm|QJwN8nbL5>5EN#U.'┲N&v')oJ l赢#ɘӳw}>ۛ"L{%P:/bU2$/[΅[Yڭ[fZtlʓ'O޽{޽.]}ݫn~yo7oʘ%Ktww).\pСQKѿVulz쏰\|_J4%8o~bPƈR BͲRP . kEǝ x\Zr5%9FDsi2f 8 UhBy͕|lV~P4B%I'a lgeН j4T`+#,M"&( H2T&f#$+,$!c47`QX̢G+Te&!@X)4)yry01@# +n XrrCC_gg 2CbŊTP΅Ky/^/|K~z/xC{Сa-6Ug|y-[l۶m慸DSSS=zIsƴ4&י].JRy7+ru _cz8śqQ_bD=6*WAJ]g&?1 F>k-`դ ހl VKUK^+U0AJ4I4{p5iɸLdV<<7M`MUTFs5 S;kSQk$0c4WO4c!{4&'y+z#\^iع-n|\^hnܐE ҉#-a.8F@٬%]KU|4ZYҾC erJ]ܞ| לlQ$h [ 1dAT?b EsSI% hX|*-% huIfUt 4UX^H%XZ곥\7z;vHbbhhyn r)O ,aݝlÍŇ0+֬YLsر KZ}E̮ jrDW /TW3҉@~)GF͕JǾkEe|GHQ7}=XZ[x\ d"(W\2|1R,*zk٢1R7U`_T3JYX@2KKvQÍu.YEH]<x尯p^l|'`DH%K--Gӌm`mɖ?X VV(QEsެ ZfXh.Sm(+Mr>V-faK'Vr(mnrF>Jy|b/+^?h.>xdu H>\瀢O=E%e2ˆW4WI5,?M2$9dJ\i@[mB5T!j3ꙙ2'|oٽ4@*BiMŊT2 >[΅KyͿ7xM\r'3᫦0 N䓚t+cǎ|655\rҥ}}} d.89Ɇ='OL'O4i;|0[6w˖-/^d N{ŊN8LYH^ Xzri".p%oD\:'PC$$}fp5I#`H"Ē(1PEKOR')Ue;У̫l~g_9KP>^Yd5.PYlvR_v+Y96aXW :e@ZB*Qʶ @0lR Sɂ 53"^dBCR@5h X8?0ݫWQa"ZsU777755MMM9sG?۟|IͥԡCN>}7Z =667>>7Lt۷744$Q_ Z)dk֬Q^s)>W^y"Ba(ڬ2+j,E)3^b X -'k(`)bY覅RFp$Fh@i=z=X8n'w"{QYJzdl'-K ѳʹ+Ux3G~@Kz+Xrfڝij 4W8ƞV*tЕJ(=j+R%U^p]!~G.K(x={0ψr5ۥ8k `ov W\vRUԐ%K]VsEٳg9299IՋ ufgJ*ԗSN׿>|C eԥc(/VɈ.-5+qsyNzXeM Nm urI2 ')Ilzɕ*50Rp4"L|,Z%9& Zд^jt[ٻc`X;8L5 6-Ъ=<\9֌*hΚ\r"fӮF8Pi&Sdݛ+MְPa[k5UH.75繚F Ǣ ʁX3)KlvN4veCղF4< q<Y1KH9<{PMjӲ( hEphjjjllo߾|;Ux\xӦM^{-LwK."S? qZxիW+xOz+䋁_G\Zd_DCMID罻 tO]ki1c J 0+Mfb> 8V iuIJף@JC;aYv-. P`c0y@vfRf3;T%PF4W:kQ.Hf3!4,  e˖E/rCfk]!kBZ'aƪݙګX[0ȏsmՒFsSaQj铌M嫀Օs9Qx oHt#6`͸2 l{©Q}+.-K3^2W'XPpeviR>lNF\Bԛ~t?::zСǏw!6e# : KlL Z[[Iѱlٲɩ)Rʮ݈&kmm힃sK?BwUm͎V)RD$rzPM`WRIDP t[ q~s\I%8=Hus|EW|\-͕d8{Pchvؕ^T/M»?NGK5+WWRj6y{sUΦzyxE5uiK֐:UX4hTs+,Xwk ӼR!øQj :28q4{B@%\*DP&v"`?6: dFœ. /.,P=InzL<裏Ο?e˖+WZZZ֭[766v婩h٪n]}ZZZV^b gSSSO>uT@(Bؿ믿>00PBTK "6)Qmxy>/xhz5 X-n6_-ub^iKB/QY^DzV5FF5 c3ZJIO$.S]lF :"RYtCgu7 x%- G< ʪ^K%8?_(˘ 68)$=D (CH\R IDATŔW]esW~(#k.*8y} >"{|+Y0|{ M]F&~m,>CytmZBG0)L (A}F+Y2N_ggO>c6W7@WQbd4 'ںq͛7SYJgj2As?nCC'|oiH/_a:?rY@ }866_?仭׍aXU+ Ң<\$?Xt)jZz~Q2e][zb#ato>Xpc׺l7A#q6J2$sthXc/X0׸"'؁`&vzizFjNMБӤ~p lZKNR-ljJǎMI XyR"R_,s% d,kpJ 6C>X;|v`/ ^T J$oo7pOBr~̮IzҲ%AxKQ_f WWZj_B>[իqPo Ըׂ Wtˣb`fJ( W1wGׁKP: !ޔ:F5ް\~ iOG) )>lY!RJ˳#އ|ÈNps%*1#W5ܪd̪BSS):?TVm`E+a-b5 i!iLa߾}|衇=￿qM6577Ҙ+WX汩7 -Z|%Kq\|رceùs^~垞Έ 0%("_s5LyL*$WiMI3aR%blUO5.HΰNY^?ifRkQN[Ї;`=㈕E, YʶHWpj|i͖pyDFJCO^)m8|bT;D$粅TF'| @PV+^Ύ(!0 'F;cf4KjHBپ ~]Yddtd!JV!#=xytt|??^!.Μ9s뮻nÆ Ε+W\rebb"{$UmDopaA$p300PY믿.tFTwTͼDխ!ohS&XH>Aǥ@N\4Ӈ4{v+?)1Pl˨<8e (Es3q0lAfwWrEP]NZv #鳝 &ü 9yцX_V<ʆZŶon( p7Gƅgkwjׄ.Ͳ,k4V6&t~p :;;4TSSS'N8{M7<4i\222255IgMӥy;::&x_c4>>~ر˗/W^wo[][;*mSa>O?S }Wnvzjؠ[*iJ˲\fTGㆥQZ*q\I3[iѡ4K ԌeXڏy+Lia%-i{~qi[$Ώ*f&(ޗ v)+=AʞE})ϣӐt)wW t9?1+}AN Q:zuv@9,`KSqoV 湗N 5);?h Xm%%JFWuT|@%Nҷ&ZQjs%%- 'j>lZIJ7;;t$/wttcgo2g^sR^7]bY?_5k6o޼h"C CCCIX7IE!+#% vtt$_$b||ԩSϟ7Dž?$V&X)_7 Ap.\T'OWuE/jT)^pV-!.I y(.?dif^꡹$V]چnTz$>[~\7lu,qz7NkqBj5Mo7Z ɢL.8X*K8N?k9uIM-Pk#N*?gGkielY%CF(%Vf̔u BU+PfsZY\l9똇@QeT+[:%&KI'Jz\a` )4.4K]Dd%|;BZk` %ea1FTLj26<`muJ4_#[uА*Gdt9:vi.=x_~7O;pVQ0[~=L7E[[[FFF|ǔ_3ekkk"`nӧOW*?ϫ+r+QpXp,A8l,c:Z>i5v(%mf|2 |CJV$Qdm O(wZLviRZeZWP{;Yfl&8ep)Di7DW 9tҬWHY#aP]!i'ePg);pLhn[*c uʥZ/% bd|ecH1Y@|]Subuz5H wZVJoeehjjMB}###ttKO?6mҲ|ɆݱE7XLѱhѢ=&.^xܹWVkβattw}:#*aHWtR7%a08^F嵚4Di#$Sp2}${$Ya$er<+>WR|aZ+h5M%FL\X*),@)@ޗ' 3|sP0*dAo'W񊲖O+_+?/H)YqQ/לNM7&13g;zUVO{?~̙7YƗimsH"SSSq}9JMY'ۖEe&tŋGGGX!.?K*TwDJ 3_vtET_9ebi/o C¨?a XMRQUwނbO8Cts WVOHFDDDE7C:::soE -;e R΃K1qLj(M)w5YNuZ$7kx>@$VqťBrZ ͠:'ahjjJNjʏMRN=!ibIߥ^򦦦d7 {xXc]=l-X*~w.>0%aV3J 5Zo@{}f,Aifü%43sQsF:B`g7[Jf=\/[ʉlc͋vߐa*Jcl]ggC=twҢ&3/$Jùo)/$HӀa{ѢEk֬Yv>0Xa]v?e"HMMM-J&13122r…IS;S˾?@beolzҬ (߽{|ѯ `tIaYPGwdovX_˹YBapz]`E*iu]^J7R/lf J e,be\RT)Ch4EFfbgY-Fg4۴iV8q>dK 9ǯ"6' VZ`\8H),aԠÄ)>)CA}L@ {^<0#\<(ޡPBTKDH9eX!n/T(ഃpIy["~2ݾ;w?pun011qsέYsٲeyPgeÃ4d[l}w~h Na)2JP*(?S l&aCy鲿,PeDX-`P a2zH?t2|krtܫ-h\>O>;'9*zAF3$%(^a{1<(gkWP/9qT䨕t/Ľ*ߖD&tz;//wySO=U\6aѢE+W433s*[r߽{wBgDJeU EB)QE%yU_Nwe\46A/eE@`x0f>+3z~SN/R2~g;`=ujI 7aGs;͓-5+|# B Q2KrsEo+;gl+  eC0?'Q]vcg$[:[=H7Yk\|Lh pSSSje444ݻww?Bat˗VXY}166644tʕW&RZb%ٳg_ ӂcYd g-^iVi4ܫ˞lt@dndtt_~z/~Ί*shiiYbŒ9]W  %wVƺ/X];xx@kxa5vX蔽Gؼ^5JAP-c&XQ+\6 [ 4"*^ӶGʀ5D9Ovv:dI4^xWJ" DfTMh 1-'`e`,i՚ &#=mn%ЌeV# 4prjZKi{~ŋK(J32N~] 5Xv5?5п!M_nKKK{{E<0>>>55511199qMѲ~Zϥ\_+:ӳ?r>/VW&72iV8ԯ@}ruD.)BMP~a`ՎҢ17Kh|`Ř2&p.{ڬhP`=̎J'=I>%umORC:k% 6:;nffij8GW늜\RP4,+ze撨UXOOʾ /جYcJ2cc<$V"-0ZAs{oNÚ9ͦBͿP|0T(Nt7ziBslu3̧vIF2o=Z.=)ͩm%J%Yv-0;t R3 ÕR5S([XOM0i"I333iɯ޽{y/K]>M ݦDMNN&!dtk+)?ĉUVР+JT(xZraNID(`X~cmo+r)EP40-A4p+  '! hiJ.n862Bhl=x,IjHjKX'LaA-տg,Bfa7 s”"Plu QFqWl=4mb.?D-Σ<䁦$ \_˿oUhccؘ7A[[[7gjogo~gϞΈ gQ) B6Z%<9lhj]aIDh__,g92rXSEpc1P~'aESRIfX+:}SMfՐ, Y@*ox8MI8ͥ0u7~b!5Ђ{߱s?=%T2L(0[]!gù弐C3WASEJE+@iIx/=/iu<Mlv3k`Ϟ=BgBETHw)7NU}=nЌ:,y!KFF@!L秴xɔŌ9_6CW#nwp``4/S1DǦx`V<==>90Gy{MP<_|ųgV[D*?ubBs9.󶅳haei7Q7l +ϗVs%SW]EnӤUSbAki#+} q[ odыx8QOEeÆ S(7hԔ4M K#T8dé-k̨t槩SySS8¢GS)`aEI8x7l.^5F2+KQ iEi LL%e>* lNr.3u֨C(:A<}uD^`v%lNūE~ɂ("i;JEi:)s)W:%b@5 Ra/¡C6th c=\\/{W8#ZQ T!X7BK¤|lȆ rp^L9iG6K`L|(Et۫U.̘CIZC9@%`Lô? t W&%\:7yl>}HI2Y% ,~V y ~C;R͒0AkxKUŶB3]&i{sNJ/. <^K('應 SPwl@_ IDAT̓3(`yS+Dk,pxЊ?2_mL,36'٤;;;GGG^wsM7e)B 5={^y啪+*ҺBQ_i-׊ܬyyfHi&l0{Sĉ~ cʿӯkBf16(>S\rxyɫ8V~P B B(8略~e#`^p\+_igF@OE^WUe+_f!2G4449s韾կ>e*) /TW.@mQ-0*U(w~l0O[4jl%dDDJg$)n(GY^ITifU2dž'e9wX6ARF^_W lث5nvr ᦼ auD6w4نjb!E@ԣ_-XRN|'XLoדHCx|;ٛtˮۺK]bez7"Uy`F>i7Q2&-$Iqll쥗^zw}ѯ}k6VPV{WW@pt/*X^JX#[~V,/E|4qMs\YD μ:R0Fl,=HauJ0e8 +qJ/=\J+kTZ[Ihd^˟sO ~;SHwER^Xe_IT:u03-[!orPq@ے1_p{ى*"Jףo|X 9 +PL 8h( $cu,// ` ɔ+yݛ;ST3qL ֓ ,~?P ̉V J! qZ YrpB-lbeLt:ueUXN}&.3LiwoQ\N}n8Ir1vxki3~[k4///>C'8 .^6Ν;o'xbl%}@;]LӐϱb4لe̩}ћ!(S0\O1*/Jy{$ ee"AJ=CE2}?S#EY¨A+ y[Y5`j 7^8u`ҿ'-ȴ'^v뮻׾Wi0ܩBbX5`(|9$.yۛ=7B^ہkQH$ _d 7Nzw 2yޚ &s5\+ Ni*Gn=#,ʉސA앇,yBn KH_`BʾGs12q"XلHt҄l٦3I@\.`t#na!fDLaoPP=+{Vn5jk~_}7mt]w]tE'|fܚ^'|ݪPEC(Br%\IM17 QBȞ!X"ovl6\ dҭ$6kjŦ| c0}Pr.d䂎Y;8Gh.LKսrk+GEx) 榧 TCkw.be0D0h+P$3BܿSz_|E=9ϩF`ۼywy!cƬLuŰ,ȴkC;hM܋BߵQ}V֌`(Ԍ =}bGp47t`*t }V [[50.po꣨IiE &KqPn+ Mm0]Zٴnw7.^C;nC}c^>ꨣ"H5 AxUW=ܳmC}Lrp6i6,!ӌUz} %l7L< UrL!W4]Gi=ʀ>}$1~žH9[o.]*@Esʺ{!f^z|4 |=_ϠV;ur5' KjFkT M,Pk%|g?=.(E\)=LYmV|P[~J!#1z^'B=žqbPo~^:]lkpBaN sW~ ?qɿ\WNCP <'2G sᡦFwޫG?l`@HL!͡P~={xf PvjHE ! uT-Q C.i2ClY`>?Q !لdN%RP?a LSW2 $q ;蔆2Y^.qϹ!|5D^2gp]:D.ON-Y ;GnH&'9 H)9I._X*0p|WR_M)%B`f:-k2f `eWaϯe fArsjJh="cE2[8;ÿ/k //~q^j 7o|w:#&i讦kDd6:W1`K],;}냃At5ڻ]59"Wt ˦Zmn/N&/tPGs BtbL^o&dART.(*5qNBF0EL9*XBf!l2mbDRH N5_-';m Cog .P*lIfM JV"ѹ}X']y䨼 oB9M7w2tS.l&~6(㍚ ,a7kr?55^eP #X&<ۡEDk5¢UIouOWȣ _LL|"4 >pIV^}eC4~^?p2Ғ6UmhaR3^͎.pbkQd`Qgcr6YM`ЙP  SXXpTc5)DoƯ7zH|)k;UNJ$ ңѳ=7/鴹4Ǯ ({7]H}Ӿnk,惒ϚvkCGpoMn /3q`0 x/;v0Lftf rE7t%@s _.O9 m'd蟻hFb_*ԛc%`_$Ӝ+׆Y*~={%8d5I1$ p( >qDy4+O.`^qMX?Y+Ux D{Q^d|]r.T}DaE$4dh9hC[N*X 281Jn貖=MFRPP.4Q@lfO(I\ *+Wz".M[ׅ[Ljh[rZY2~дrͨ}+ ^~Hoi8 kOv{C=<1Badj.'?C\@{Hʴw:t[o+}˪^aND^1nVaDHW[@l^n`ckY`<’uPSO^ߖƦS`f\U?޾ٛM(5+)z9Gf*~dR'HB(rFJ94S_DUdOxBШ ?;bz?~ AR+ G^3X$1w]74Dj03e0'nXO(7k K II%(3 B BF &~9dS*!#} $v0r7bHGr(*i E4ߚ^ M=ZWoހj Zu ^ re$ZFܖNYULCt*a5!DΕ菃WhXy/:J؍a+!lV8Kp9Btuo߾{}k_׿|Ì?M~ـO U51x«}ԗF$MrpXiz׿P>J@8G~= *$JlJ?p1Ps׽>&qG7)Y..fAi҈u 9$gwF21..eA 8X "@*qaJ<)8+wr: [ܹz{kҐ,;Q ƲmkXLErWa>fٴnrqh'2% -L)qV29% \ ;xh{g>s)\lY9R iӦn駟23 sFKeWoJrnk=.LBJ04xGDo);c51cWDb.Bzٛ?ԗh.M*f8s.Pq(x1ع}ܦtBGPy! :ODŋt{<yYgY^6 뮻'7 ȫc4c, <G?yeehܿq9 YzY`'7ǃ\& )) ҺhҥArG_uw 6{A8 i 83l.UJcw \B(z38?DlJNDdM& }R. `X:M etH%۽LJdMIy;&hM+r'Eԛud[X^%B}6*c"l*D⼦7!^}շzSN9EI0F:tkַ5/ih{ a!.]ֈW̒TC*&I5=j 9LWnۂM15pH`Bk!\f͊$»EW?9tz4wD҂GSz-b3mZȒ3 AY 6VmF(s4nSeD{x_୽{_)㎳17L76mt!NC iЬ@ZރADžvef.ˌ=Mߓ ha^g܁ pR0ȚfbǬݖjr֡AsIiFm3!q)ަ DdM$O0EOw|}_c0>>p͂۠W5РKׅ㣀rWVh (YEE}=E"Oy%ٳUH>`sHRn{WI>&X.z)v'[.sO1"5t/rOf~-pjR0I,I7#oB^><\o}(4&*&fFcqm\h٬,cX/j4$Ɉ*'Y2xZ[1+x(.wz6f Oaw&@ <,Pe޺m۶5k֜}2mCػw>z4F,=-oS5}MUOgҀE8+#HIKx]*L`\3w0_.svy ddGDCI19M Bht@qj>'ʕ{]OIB/q5-ף#9o1|`vv&7b\c!KP7ȍ i4 /(79 'D4Qё!]M0ؗɃ ևsBKCI^Z7E4 rBXżİjus+wHݡS>*oVG9lT_I<~?ҥK;8,Hspq'!7W@(2TzС[neÆ Oz>w^vٽ{_]}$ap|߼k~FC M%YXW ō྾D׮2k3 ؃ƈnjh2Y3Y0 -zcA#B.(6ܡri:Te'ГGZ0,|zϞ=UrѦAR@9m (@ŹBt ^I;EI|PdU9蘈ǮX5; qWo+`ҎI"pG$ţ"ܿv jǚqsrІnp5yeAFm٪!|NlOd5QE͝e{݈ YD9䬙3Sʳ92:ڌONb>BDi @, %{A ,%\7'oXC9Iiu1]Ina֭o{9P wޫ{r{Lg#k喝&6։.>+8h$pɈ$;T!ADa;/e^rGXC|}L =UrV ^e8J岀*wy]}A068J &v!Cr>ZKhpKogݖ3ݴ5h34ׁjBRTG6c ({Wn۶oK^򒼍 8x-[o:tzfa_saڰ9nA|8W؂c jCa+g0_)E ;'9w]GuTM m۶x㍏?I`0d5 bjG :jkͫ{ 5{d\ {9r39A_5%[>s[úhҥrvd!hof@$R37vV2|xnxFע_šL~*$(O R7nkb&Wa9RBX9G8S9oi& 1VYM y]O G+뼝u=@'IG iRțG90#'=<2L6=$4G>}6`=o/+01i`YKƂE}(\0R Ek=kg͐#?qzmpbwM\Vh4:N0IQZ N'NVJK]EMDc\SnM.s]1҂$Θ\XX<|e֭W"m۶ES7f^).DuLWiOK]%9\DPJpaTSk3R{zi)ݸ.vO>J rdB?\7LP( eirsd\hPP 3nёK"S{ AӥW~O; J"1q[Foa5.k 0L~tRJ^C|"ʼn2-Zx#{챿ۿ=SwE/J!`nزeO?mqIrg0,̹8FL51ݕ侨ܑ}1АA} | ޚЫB)+Ce4x*Y- ,?xKF.}ġ܎Psa4ES+, b^E Ը]J(ؓ5/CPh1b d_E>SһwFea{ RDYF0NroAPKw??^>5 {/ݻE$>+c6OM3:0#Ȩu}6ު륳w< {56 =^+8:.P[ޣ窍؞N&Ts‰w4 &foaig5R" f@Pml av4̈F$ri55N f5-3Ps^zΔ=Еoo7g[l;?7M v<29fN1yÈr7FD{4gFtdp$I\=啗xo5waLB`1PQރ“;GȩYtRoObl,`lAI*B?rb .th~V4 P[|+] &YivV[oF@XF+^nB V݄ tGIUă4kk;<S|jPDƵe3X_&خΒ6H40aJ^Vj.zᾘ@np!$5sg^)4}W&}s/SO=եs_rq'!7W+{H>[1ᡦ\_-[ڏ%rqd$qt D5[&8 DTYJG=)pyx$Wc\d#p'gkx@8-Y$ . .x~py\9G!\89пKJYr^Wi%\jGes_&ӗ[0y{M1"JTx^hV@+-ݓAI|h CȖ|#Yt{챿:S׭[wqe˖믿СC/6"`zep hfѭӸdF͚zMޚ ܑ}4W؛ M3 h;]Zwv%|HIZ2Pan+:Lt Jzb:ue%8$z|IV\K8"L kBB=Vt~yg೟޽{heRR#` 6xۃڤJVWȻVσ_EC  U&QP^qV4Lgy;PCqI=%;2߲X8`+.W [Ʌm4\.Burtrw$8LJ =e4=|VbiHqha#7㚘T`HP+1) Rڴl+*޶mh]Rio1S@%=8^|³b$/$®8}gLZdGI;&~k^/O {~wkqN7(&0o젴;bЫr cFχ7*471,?W,WG2%\]G eʟjgJ(WZH2UP5RAq9 fxfMy/k1ֽ\,cJR hQT<Κ3#)e{ zqoG`):K8xW\q͛/2]͛/wq\d:% `KnbH b,cq1;xd=W;!j 4.jHmBLܤl `;:uWbRkfYxLM)ܛ#ΐadLC"׬̧=i:\v,Z2a@n1B˲T&Nܢn??߾袋?h w/|ǝ<*ok vZ@} _\GhvF_bSD۽w+T2j,Pn΅ gpJn;6\^2J/Zt)x$ qJ͗7$e͐ -u 3*$&{FlStZ2OMneV,$ +Y W:7܉>ʳ+Br/}wުUt]jt_!. =$ pe\ r'B1_{,CM]v}<ʳ  uӯB>YG . i\vB\q0q Ny#Wxcd{}J# Or(tS%XnABan(^>| ;Śt8 RpxpCPM3jɣMW+J4#WNee45 W5u]c%rWIM cT8|!M2aJ d~}[$8%&JoG5BLaĔ\+yrٛpWhQ?,ݘ:`|u]w_xᅯ~2{k;+){4Ĥ&,/Ps( F"n:Rr2cb.Տ864PI A0ɇBOXFAUAP .Ӽ<pF=GW8'- f`hP2@3p` 4{.ĪlzNN2-*;H/AGrPL Η4ԟZ^~>E/7g茤d˻vG?׼}QGAatۿ/=cl6Qxew} AFRg"TY@d2a>F?$wۥ{,nѝ¶NNZBoA^bH?a+z[ph$UOdb@ޛbPMADܷ*/_Y߃rtI.J5rݛYu-ѱF6c x,Aη _gҥKB?Wy^"ߣ\^Z[la 0bbD\&䬢 ,d܇ы̙̕sp)K"Y!WL8P-_T-&}zkVNjՑ *](EC`XJ\!A׊UIV ?} X%$}> fNP$b|t|#N⊘œsA_<7H&2&U8r$s2r'B1_{# ?8Ϸ~{gZF윭q!iRc[ߢ[)Dh\ [qGl./e1 CYn{01Xn-fc 1v9>e\%7Q2f!ÝŵaV%ab2p95ˍ7:0W+xDsJe z\ {N#3ͥP9k8!uud(9KKA0's;={snT1dO^:[`ڟ؈U!~hKiĎZ n6EW68(]s[s6Z*&G}/?>1 /}K6m:p@%׆bi$sz®YgM&Ga Ni]TnQ)8Fa%Ae0!{lL1R n2f(2ԄFM"crعR/=2Mp+ZNmO <~͝)l&Uq^Ԃ 0%4ÄV+vdL; s+0^π(c`mO"صk>7x;>\4cΝ}Q;ZِCLlf&uM%KdĆ8ѯTA/228Z oq,q}XLh {$ẄN U)wHjLwHd 'K0 '=\vKƈ`s'ZŮ - NMt (dJD#]&49\ ٯ"p+@ofe=ʷ5suM7vmx;hH24{wٍm5p#R3 }״! h#M&?YSK)G;%8l%o3:q"lT_^7xSO@нC={{!- $"_'DV %\"eom4`N hHBuQ=K )uGK[5}C-DT vx ՛nCЊ+rPknޥe(J6 OΝܐ#:BRŻY>u~keJCs5Iw?GZ֐T M!-xZ<WJPrIb 릑x/8?㛒!#$M͡ ; dG}c󞗗NC^tM\sMwEq[CMAܑbw4@)Ԧ$֦y2NΛ8.㋔zv]96k7h .]*ץ'CYO g{&"-rU^xL8a׳ShFO=ӷRD^{j!pGc4( ::P)MWpC=T58jB*/\~zʝ#Nr,PΧpɫv^@D^}Jl I޶BeMؚmOAb'\Ê (/zE IDATYXQfRadd'ʞw9:.$X&4"|[c9o<䟸\;CP <ǚ#wǎO__]OlaEHXB4X)T˃buO*\u '}S Z! X'd?3"eP ܒ $%ȏI׵ïjK[NiJb$G1%rDI}.BF頑'0V) .-dp7NSMLD塙Wl٬tSMd_C&o+w#+[渇J "yiG|W_}^:/:xGʻᄏJak@ޒ$r+2z48̩2H-k%d.y LZ"0"A~ÖwHs-r74Hg?\oErGPhH/ u_,z3حޜ/ O4ʥA0dG@(n t`78 ʂ4ˣiBˡd.6mt^2Siٯ29 ԧ>կ~駟C 8կ~ꫯꘟ7ܘ 7ՋDVriOҰJ5#h* r2FB^Р|7Qޢul2JW'MT: I&"dDAj (ue9 3d:YF$x4 ɼ\,,*cخ_Xb4^'S3}FIA%YS-3IΝrtp, _67@>W<[p |ޠ`ϗXK-ZxbK=w]|v ^vmxnl B7LC5B6fQ p#G6HImA>{1=M`֥~PRЄrn]{e۴7tb'++xc Bd4GvXݘ̀mqPZ_2|x(HcmV^)kYEJWZ\Y81,ރmo}[w*`Ν7nܱcG/~c:pY-o!m6fQ3:nσB,-V;(8RAtl78D, y1m"TYNeg nӤ̸&b\Iz,D+UaC vsEJX ?R-K髋+9GY9*ۥWFkUZ"}[ħK#-#WűeAlW('e}qIAyQzC.sN-@ 5el:z[^M+OB"zyú d)?X57_4q/ɡwFD '}ՐFLKQn[e#G?#8 ks al(SY@9 Z{.3<ջz-ˍ8*s2/xν_cD#lܸF7VrI‚r']O/ϣu&"ԙҝYB W@Mua+\Lyݘ$=(O˜-[&!}BORi&FIߖ@Eלb P BdTNNŌ$9)J0'QAoqR6E0w_ʺb{s`PgoPfyp3sDfم1}M Q1w&!eY8 |"5a֧A(`h~c\_ M}տ%Ksن5U 59wߺu^_r%G}t8p 7|_}ꩧzG)l1fj"LV\Us?[$M.)@%#F 5j Iư]M|,qp]yBV#?J+2~RhZ|tIjCwBŸ>0Fpg Aleq zk$G qscsq|f4gobѶtw޺}~#07xcǝQMO0FY䗽2 +C1#:5بtv8)41㭊DZuEl hdP¥$=N&N1Ki֚2Jʳ@Qwy2 M,\ycPO-Z\UmY 4Wn1; 'Z;-T6m[o*Rh lpicg .M$&fF-b9"s^̅LzuS6xR-W(m~~^ޤSO} _׿gg/}K36=#xG/l߾ݍږܚ'eĴ C5dW$BeXQ0⚖'}%u*QJdd9k.`Pqna :@ۢ6VAӪ=As$ހjYf5 !nE('.E+A FlA/c5DÊHs+:BCrqAA\QU؃g$O'kZ0\b]:\Ǎ2 @^jIݿ949^qҫLrdv! y ٣CȎq\yVULY_dVAoH#? cixB^{G?ӗe]t^2o_-,<=6gW2AMDGSi5LK&픰|c1nW(7\3< DLR|;n LP 6O=GbjFdb|IPD4jrIdKC]T7<77^=6o~۶m۲e ҶVF6`0 YɊ,19#$J G#PBOD$sI;њ\V@Ƚ7 e2hscm;gO}6D#ؑߪ(| ȊqL*ÛODoa()ƛ[ e՘ h!GS,CΒT.m\b{7~9c9=G?͛lߌb~~ #!a5|T^cM7tWr (a-DBYId @h,,yY2@L+n,ntڲtVya M!ZYd*'S5ɨ BC=L;aGd Ռμ9Q(32cfkӢ4!T(Xhŋ僗@?O}^xoofY|{ۺuw??$YV6 3dq Ee,qR5h ڕm?E9b'7|_/.IL(9m;aX~bM.29l%,9JsMs ujV*e#3e193hk↢쩎ҝ'. gz<2{,d9XՁA6VM9眳jժɬz;;3܉aG+k Ea`r`ȽYC[ j4F/B6MSﵲ$H_. ۽Qd a[ݐ\4f7,^‘ g *GK7+uF o) iDN^75wuUoQ\@?R/?exQesΫ_W3} pe\΀ؓO>y=|CE,딑* ٟE.^d ZsAzs$[ShDx8}4FD"KF }r.Au,r%* _ W%ivtXc2IA3!#T\nr8)^zB.Aq t1BD  thD4kԊed 3[s@Uܯܠ{1n ]Կh";iP4hKhlЛds Wtehv*MrWXmy E5Ն FPK 5)#9-JCOII6Ŕ/~#8c^K|H͂g>w{~\/ /<6@bi2T9F%Vp+ѩLz;Kt[gc(\e^Y BdwXl"J=]8;׍jЛ^Gs38Ȃ CոڝeTX&o(jQbGT\rhygAdbjY\\XBj/&;9易O>|'|)/C=O|{ySq]ZC7| F!ǾXhS1Vw"te[Ӝ@G>i U`_`xdGOg 4Z[sIƺd)NOlo Ȩ a7)Ubf0d]'~\ ͡&&Mi-͕^ȻT WXy͒pRIUHUYcbz{ﳞ/|)#(D'|??<?F3qc&?R"aǕF.zQe)USqɌ{L5pp\phCDDIip5Qn0sY9w.dƓ+bep$sS P-a. G 푾uҙsխ{s(9(B=f[i(q!&ֆ)5+&Y u0nODU;ۮɵ G`i^cYHSb=|/|ҥK~w~gnnnɒ%/yKzyի^%׹￿ᄏGGmQlƝwV -`JR'ͦ0$B5|O %h>KJJ!0b#/n.h1WgPp7$:ns LsR wp5WUnAb^U?=r*z"tq9D 21KDtrs.1ej%Рog & m _Jzf", !$#eQ9M PW}rOMX^hxΙgAXrͻ d+ͺx(Nrs^_i JK . ? JPkW7L mHX'\U<_}8"_e)9_H_jdù;)KKr(-1fܢ0(nD[[YҀ[RKp,7ƌ|tқy-v\ŰtKHρQI֣ E/4U)'%MKBGPb ɡ"{8+"zFϹQ H*@ݔ މy>.kr84[ɹ~ʲ|y1)yonOAЗ2c2*D$lӮ7N ؈.RF AcGpCdlhMW R :HAr01[Hqxe*.go_MxxO1~2 2IE'4\MʏޥUtmqu X[Q١&TᴭOAF e[Lż]sk*!I#k1Z4&I /Hc7g{1=DB(q^&Qd٨ɨrLfl7-=IY\hbw_&q+Iq~fnM IĦJ#=?"̌17P\)Nj,lG+j4Xp 4T?%ލϔ)u˙ b0F L5 .7lǰex2~jNJߚhwP^q]k"HZ %)hyͽЈ&CՀS%)"`ΔBi`4w!8[_fo4nFܻ@B1du֖،34Κ--OA BGGN0ER&2' iʰu-[}LAaC w SZGڄ96l~>rQCe$% Te6AO;_9Yvmr,%MOyB;/3)n%B<*)f\iR˿|zZ?𳐡Am*MG;>wPavvh7Wo(eWOTCQ5Qu& r\Vypq 'c5ЍݚNWs\ϺA/fyu50x{\C)\OCsh\RBRn v ” uh X[/߸ 5NwpLR7mB5k.d%IĀo)0mk'y,z-L; fAf|]\+JQm#4B֩ʅ hBh ^pMCMȻ\VxڼaFRͮ`E!k‹9@$/4dD#KeaV5AdDz^I^e%.]&,([{˧אt1j?R"_OBsn k'xi[.U޴R.yrOJt"A9>BByI.d U7իiVc Jr\s IDATwSGRE`ݲNepN6]PĄ#4AQ\!X#0Ϊ XF;je%wW[ܷl'BR4Z H&I%,4w Y,-}Lqn<48)g1b{[5t ip<ށV\>IҲĖ;5nmN& FoìkI.JHǒCU} s7 Jƍ8P^+_rDky^\3 z$z~7:G5 /xw*,ѵ@`uܒXkE^Gxamtf`%!6k ('3޳UC㜄JS2A'BH$z+'3GuJH3`!6x;80Y5<;9n5ڸ_EӐ]O4Dn1dw"9,Zc2Hx0 =1e9"eQA7YǷ"Z=dFO~^@.b\z\Yr@~E iPn ô`lTw.lQ̻Y d (gw^୐݈LV4\c{lB->+Qiy*!bfOar#\d~0dau6i$!p9wmS;C8HkFOg(X`?s!H9_0;ҧLs_C)<*6YخHƻO]FM C99N~]oFNCHOE!{l1C5eġKTA,qCM]n$⾆+4#k$g&+Z.3(_d g5;CVŔG#.r:)YΎx,!Iv1iC;]nAql*cBM&1,v03`0Y0wCϊCSĢ*g6qcB146XtcWY&bHoDMnt_\[bnK2W+<Dy<+(P CvRUZg06/_,O"((j5\Ws<J`^S#\k<#2:mdp$";w]pHc>FgE+)BڛsmeYq&Emkyz^ Ƚ#B׊WcwdA@ ^F*TNϛ-P{Z0&<ҁ_#V ,+$"L͏_kapd_r0F+^> Y7Cw^?A%8OܕK%_p'e7^B`B@ /TZdA, @h-rKPC/8Bl`φ}.y\A<!YJ2` b)b{rF2m! tP&?t}k䔏Oz>G}yq$;\&''/EሁY!\َ9j_0$6$|)P1)*I4ur%c+\D5h֊Dx2W/ ͯs0; :)֤!,? gʴ{aB=<95?hD 6ub SrVдJkw^RQ/}d S!ډCN.#}4&t\q명fӽ]Dr8RJKDYMTpeBqDsm*y_@}L-wM/ @x赡8{P6CHQ6-NGP>.Un[//%Z5:}=[ 4peU)/| *qГ1`҄0B{'ݕ,_GsI#%1A  (3ɧx %̦ k *8~J+']9"kl Ny4c r3d1`0ļOuČ32{*7+iE{E[]>KEqfVL"ݚ`k2$_Կ%lj'[B8?Tx:ۖtIq= J3\Hbodrټ hn55/&3ܖ`0 B]4N KƏ@O/;`^&!'sukeB3j8O-t0hb 6'Q kv" jw"yv(.}SCyfG9Bo<}75 Bsh]LӔ)q5IP"zJ2҈eڞ,"&WD8d eotp2P܄ [6 I.bɛCX%,=r.ȑpȨy : ah04sun5Yڸ wޭ{ܓ+K>IyCM-,,-d ILpx{Z9zA{d?/]roׂljjWBksI%C9S 7Bô הk AAv`t2\L .BJ8Վ,Yn%o!u[sq.|?e|/ 0{Kvo1w{I`%4+e58qS mO6G6\BQ2D Voy㩗47j&c}/`E$O3GD%,]]P"8ΊS2fD!&cʾ,z8[py+"AF4wV; x^'D}:" Uqucsp>I0^%PK6fZ̔aRh*EEv WCۃ->4Mאw2 "BUEV%\P͙}+CL9h\Im q׺Çܛk, `_pځ !dQD>_I!8 b;MІLf\M‚[ d c*\ 'fo+iF`Q3,#Zy{+d2L cf MVьb{+@5!Ci 8vv9r pI"vm,j ⵥ{Ƒ#=66T X o^LHjyZ kdPӯpM&kB3:J[ 87(na刀zh.~J<]#7C-Zs6`Zf0j¶eɀXhȮxZyi#@M_yBrzRnP7٩4SKDeESCi0 !#w5MOt@WJmQ43DC,j j.H E [?=С8&DhP<zff+4| woZb:U\oMIHqW>;"InORNiP/eKhhqXMr$$ZdUy[ٔ;@ᔉZea~Akp~`nB'O:1 eJFHf&NI29ܝ$19gT%\}$d }N6!u׈O9-oŜT9 v: ĉ 9솚OA65ȃօxցa._nx:]x¬Pslk\{&b#bz a4wDA@:isVޅ2o q. ?\VBi!ᑅ-Z DWFCY^:A!JhE96ʵ ~ʤw\iȬHWa ڢL2Ld%އ$I-3yHjmB]1e5VwtǞviB4wٲe'pL 'lٲ]wk׮={ڵ$k*nH J5SߵFIϔlӆY[]>{ʕ~%KV\q۶m@ܷCN<ĕ+W}˖- B={toݺW:,YF>.:iӦ \b~Pp`[2@V$45o%qO\[sw\%Mc DeYm M ûsCs479r6m8 {kv+Pʅc@@J]#ln@lxZ_tJZ)#A5DjB-/i\T١bR*J213'J]v-yO N2֡]3Pz6F,"p-A#!nF$!.'/ LNfNg8`<ɳw(`v .9ZihB,Sp*3T݇gqu]'7O>۷lٲy=6 wY2&[#IͽM؞TL6UqڵW^jUwܹu֍7 ʕ+.Yplڴ)18rʛo<ׯ_8XD [ }^;♎Y7qB4F P}tV[`U8KvV&+|85zB9זPx @47T_7. @hNa.!t"|\aDlC/ޚ00Unݷv{"E,Qd^nBC(Mڹg)X"E$NZJ= z6@hJM"1vAv0ab PZG2(c=,&%B)n ǻ؎Xdɒ.?W\=;77|um۶mΝk׮^ׅK/zgͭZjÆ ;w+N<Fls{ Y@~!!A( %7}2&hO)sHT"i AE5+I!;\:eVI3ql$;z@{kc[3ׄF1<*=ɶ' 2jg l01pυ0E?4d%xY( rJl{G>|;bHY* ͋^իwueqi lٲ. z\xW\qݻ/A\c=v͚5;v찘AF}k\Zdlo=^m_h?.eI2eȻ Kih+;Mc\QϔZ|Dmb,b́Wཹ83N$h Σ+_WބC3PefP(Ke <4#6FkJʷ?Vyd9#+֯__b`è1krID1`LYkgA-A;q. ]MZs4s;A–nD (AAσ*/wc|y2s(QzPCJBIp| 75/h|W"5kǖCS$YVtwty rCJX|~) BwhB&=ܖP .&46yY+GrrS#B-ApL$rJ a!| }npUYh-]Yw_ՙ ÕĿ^k]Dq w$N=8\>C]WCӟk_ම8 .`nnb #!|5)"z/94< U 94jP[fրo:|&ン;ww}׍+VtI+W<쳗/_.Լjժ[nSBA+Vꪫoy۶m[nݶmի׮]+nݺիW_|Mlh.(Ѱ~Pn(5sy]2: բ&y}4xI 8 +I{8;i鸗VJ&n+Y,\ey({¡JjIp0tJ)ȦA0[Vdw|1(`Acs wPf0"dd d7 1u9 2٭83 ϼ*h1=G S_'`?Xl 眕EZ ž={>O*-[ivg^pz*Y\042&XyH*?jB";c2_=3+OBW]u7߼u>ut袿6m@\XwAkٰ֬aP`Ϟ=ׯߴiSʮٮ/ׯ_b%\fزenK.dƍmF;5z_1fދ7So3x?qY䠐 iƨC/hf M.W'򚺂 `r847\]$$._2Ok!rp4vݭln-[*e δV8`%) Jj>a($]v+=߿2{L/LDG6뼠0??1CJc`58p]w]wߑkYjϟx;#q*c6wyy޽+!An۶⢶+W\v+#.l=޽{5k֮]~@wn #C{* IDATEʊw,`HmЌmr e!TA{ SnyDurAn,5%ZT"rUB0dBݛ+dLXO=m߭<"ݱ>ŚIpYPnj8Pk1;fj(͌p6'xŦߠ:c. '7Z?4\W_s;;ŶqC߿_88=-}ݺu\.ps.`,6mk֬KJ`hS-fi5dd4yk!UptO#VJ*l,d:ɧ eM%Jڂ셸G t</:h|u^[׽)‹ }V^rF9xDG6bi WhΥgQaŠJ8!+nC/Zd?ާmkе(; r#Ds~L'),'nrX_OGyKx" =~)[%q !j2'X'A+v7CcѣQ@Mr?=~^AW/WBOfw ݭYiă8f\ L^\2=ùw*POh/]$7ddW9`8n tո׻_, EWɚ5kl2Lhaڵ֭#~UWZʻ8۷j*n[! NdԲW.܄<1͡kB ȭz"󢐧r/"ΠF+$]ʀ' <һYU4lu;^LΖ$ݳ@DŽ{aR\w+IR~G3D82\ {$XrEKS?AI1QaLzN 0WWDIfޭYwa-~bn%^7>>-)<.hy@N"_x 6qWa4 *X"bq!i9` \ SJN! j2_ ?={\y7 ]LZmrQbKh9x{,~7n,}VO\tE\r -K/ۆaÆ+V'0j ocD Grd1{Cy~A66/\L)u·F09iCr"ZQr[Ƣ4g鴃1܁?.n3-<IF9)3, 54$\sjC-Yaq\{$<SArկI/ѮO<ٺu+wr^lذܞKn~GPn 47rݫzɒ%Cf0 U/k"gHeK;pϕB^͒8]RljJ Y}%\JD0)#͝ps0Zb e0 !a#hM+-Vjza"ٔe$1>[̞={~|ٲeՔfFJH^>.EjPJY xI';vCҾ}K[u/__uUr;lܸwٲe.Нd84m-S^y\MNPG2n'cc„z1fu⪕7q҉TG[81{L4F3@85e7$M AC,ַfGp{i 2Ip] /I]z@Ouآ4,,Zc@, ^x@N;i}X>`kڠ(]*Yp1.7hs nI߹s'~V>0|h"y\S޵u[Ѧ 4M6 [d ݹs ,clذo/Y=8_ G5Qq?˲'MtT; k. zE>Zgυ~47\ _ [H0l Mp^H¸¯ѲhhMEzIj vui hD0a!AǮ4M 9w!}ɡ$_o9-I5{I$&%F;AEѠݻ]oeg㇗_~9y;2`ݺu]!wN[saڜl=HwPfs*Ѣ." PJo\H` q%P1s-֣vjۊ[PG.ǭWʙs\ 82G$Cj/Khr,y8y%To1I5 $?/p=6WOӳg R9 P==d.rRa  330Lm!ԇ(0].Z >h)_XXDrhf{_LeAL'PkKA7q5 Cg.2%$ޥ0DV"7$L@]%I]&UɮQCN'Tϟ'[K^'\MImp+VTnذa4}]z5k$nL^>AL? CiRǭZy!4:˸֫'Mp0-ǚVNa߾g"9&:@4)A$@7Awwu?d.A0ہtٹRoq]I]ʰҴwe/tU !p ( T+V*'{ hR~H A Õ_]z!}t[b$3Ib3kLSm(t̎c1bLOA0N+" ;v+tsVYA@5ujxځEOh_D\Uߨ[@5pnk8gT & hZJSlڵ 6۪]|BիPz 1&'9z!#P"?BWCF(QѺȽ}BI Rڛn4Wygبyk>d4 l:'\I|KPiIsB- ghL!s mNJ 'qrV$x5Lu"|z4g(d .2XM,6<, N9 -:NhѢ}w}sss;vؿ"nȺq˗\2Kyc ۗX~=^r%5Pmg;^i/òVz vMg&S0Pɔ ܘdc>P'%x.W(<ĕ#`on= ¸cc4or0} Cinm|ry]|g7N9ڵkl޼9,Y~|^?~w<}o[nK,]nf}uɒ%VZz+~G={lݺu۶m6lYU? BߓO&l;FwQ\gډ bܙX-; DXDЅӁeK;.e: q: N+iQ¯۷nԨ7>x9s?&<{{~{tMNNܮÇO{1@oo|ͣO~v+掏OOOONN\nwccʕ+ZҥKsss8@X`iAnd sGFFFGG::UtzUgOs3;|wc|B-![.|Va&YO$e֟ n#yu88PPE{dIGyI+rprsuimAؠCI "F 2%!Zu3^\Apgg I7_`˿P[cgg|yxxɓv 7Vב#GnnC}#yᇍ_Wշ~,2*<'ƓPÁ<۠[Zu-uȌ6'SVaPٴa-3:t"nC]B}hC;o;6PVg]p[6"Ⱦ:kLo%5c0gUwc55ГW~_FVAPXLAvfJ*@0!bmqa cCw<IUV0lV'X[٨Iter}M1OL:%lCu9?{asa53V %\=M>9Aـmtt_Gvm_wrU r-?O?~\O7|}>\'?:t(Tys卍 7W3gάONNcO_%7WnݹU777l]### [[[˝Ngv{{8+TLӵ{;Q=Tyʳ[\9IƥKlI 2oXmQ${[7ZDzuaEA&,uCM9F>rPáQb4$@ncƂ񧖎 Fic1ӑ6)*={{{P-χ y*T6@ xE27Y1ݛ҂ W,{sgFFc&@:N:d ܖI|>#t3R>dFd40'׵:ITVh~% ѵZo?g; R&Z׊c.?颺Ŭ?R BS}DJ\. F.HZ<y+_J>>ȑ#y{x'իWwǏ+uU;vC=׽NrYknxы^?/~^[O:kP+|# Әgff2<\ZZbqp777766HL9z@3gFGG%< .7}su7 v:˗/;;;KKKT]7gDhxxfV鹧O&3t+j?ct9W\RL.h@1;39&Vπ"/0luB-Sb{-̡ nװ$?$zQ܎pkVeG ujmm>2E[D?IS:ₓ$)V@-ԉg~Q:'kpd`g*)!Aⱙ~G5]Qy VL >D܂?Hjw6̿l qc=^>0Kرcԇ3?3< F>~q헾u9z.{ɐT [|sɟI灁g=Y_/^x=9>RɓozӛȤ}kGŃo|X"΁BW >WL݊8qbaadnmm-..pրm{{O/>9yғ>s}8GGGWVVHWUN3\YY^|[azzzyyYv֮\iIiv{FO}rrIE} AVw xVT۬,3Hli>\$T1)]yRX2fq]E$L-SE\ùO39U3w ӏ o5_ƶ=dhyݽs!/m BDd0IW#Ls106_g!':ۺs ]la<DȀ!ٶEdGVOsz~ j-e㢢J>UQV=i6"齪)<%رcԧȓ+K_{キ=nP|o|; '>Wu]>7 xgƚ_~Vkկ~u7hQ) ѹrO8177W{ kAG;??vccc>U]0>>>@aҕvܢՑ৙f^tibbBHSWWWwwwח+e#\O~"P#^UEţHcS,Y::,U[V3.4y*+ aHbjQ|&Ypo e#XTO0GFBH_jd(_lK&KpV3jQ[k\R!y j3u h|2~jAL<ے57Ktmſ+CM!\<4Ԓn7Ɋ_yu%H3I9̮κ{<8LtgJryChP-CVZK#pddo__Sc?w>яW6|Gs={fF؏'~U}س]x{7\gggBW|xVۅ^IkWWbq=liz5u`3,mșBTFSʯINnZ/16BJ6" IDATl|5 Dn7J>y3I=FnV۞OFR l^m8egBDbTn\U`70ќivpf ő#GMjycyǏ7b oG?Z?<p$`~1lmmگ[V;ŋ'־/0v"Є|n?U{@i $~zܹY+<}4>_җ7>Yj˧Oᅅ]```СC>i *ښ,szJ$ꂂlij{6k}xvȳלU%@$}s"ĩu A.4 q<݋ǎ [ݗ׿Zreի^o6b_?ev}sP@Zqggtp[LVVVfff){K_,TOfgg+++qEK;>>~Çnwf0uŭK.;k qVqAѷE@^ afr%ܶern=[ՊT IFp#Sn`_6O$QB:}(b[$y-HŠL7x8ݱFw$&)|ȹւਲ਼AL—e〰zw"q[&๢6֚bᙀ1ξ4ߗիW78p tM]Q<)zکV}.I@AV=OO|Dn~V\2/Ej?nQ0 W7Ϟ=i.]ZZv7 nnn?~qqqjjjllLMMϟ={vmmmkkK^y A'Hl vT((((\@HJMݞh{я(]`a șv/];,D>'ooou]TGGGqWVV{HswwwiiIMϝV U5>\|Q3gϟ9sxSr+oAA,^,!AHR;3Lʦ8bKNHyޭ 'n_:48$4UC:bɻVW y/X' e}hhhoo{pppooHNly VsVaVXѶd DŽH[T)AHG#ՓTbhhFopؒG0 *=uɘ$1@*\f/Ȗ8JZ4o^1 gLbeVd%Q< 9}i ZAnqyM=2q]L0mny䑝G@r~s% 7.C$zCz_җnnn֟?c߭/?SrڅqX__s'T@V#Np}ֵ*Q+OT@Nx¦jۀY};222>>^kKƈy䣣G/:l#%HnQ)xʕ+n|__ n7婘9;;;ꍶ'N*md>@'/ܝ5f\Y$+򧼇!;$3ɗmumyS(oK&_<+g*PΑn\b'HZg U=Fz:ȁɤ?$%R*OQaVMȃc#}!0!,[nC؟F`^$6qmQEV]mw' ZUgK[S87W(lw?|}w37|mo{۫_ꉉ]_إf![A.]'p3 ]z:wtPEKKKccc*Ԅfsե ]Dӂ̑N^$? ++ BW@rOhpkxV _J&j!%L޶LaR}mn.1c :fD1%=p>A%JJoS(y^MCc'N_@F=E4Ħ>C?i B=O#a-gNS?\azzzmm|#cdb(붟YNgaa(+eqtX\\4%zFG94 ϩGxyBAss=AXq˻;11ַ[oR߶=o}?=qV/RKv)cuT1y Eq5JpI|nll`o, dM.<}ҷ$!O$$VK%[!s0 s$G=sϭf*[Kgڨ[,F $A B-ñÛ t"QU.^&JC\ |>psq/rTwj^-l v}BэOf2 3vLIAȶXȮlYm7k_;(}uo7;< nEFrN;:cP6 6J[\~toJf`u&O?^z__Wg>y{O|=? lLiiRtq9`qqbjj{uu066aqY0d~Fbm@bY*LJ4?k Ѧ`07u6Rr !jV0HX u %&ͽ=!>4ym\np#*䇒*$/I˒- nu`nAA!%lIHwܛP둶bJTD6{FhHPƒ)9g2P4+8982d’mHSKizȌn8{+YX}HuSkTCCCZ7*Ns0x! Ҫ^:YXs.%$9W^zw~w~gkɟ__x__ԧ>E/zg???FL ԽcJdB={yvvv}}};mYzsu)T4WtN:nmmmoo#x`.v'PrnHʰ(>{=a9k԰B&H!G6$ >d $ҭD$OƁ`ddKEtd>4.V V'$䯡0#mۨ7Ʌ.;BP!ϪG e8\]`.%)Ғ .PE# zG dUJxWud~íՅicccǏSO{ӄ9r7>PDY$ ՙWHU)[[[wyOD׿XlnnU2&x~~~iiIO:aBꃣE[B6Ii)@>ȿ/v'9{j.F1V{yյINLR`LjQHO:T3^e8rj#Wr3”*f3\Bb݇['OH$>jJm(}L2̀Yy+V#ECFTuO<8877ު&s0>Df IS,g lB ]hᯭ{*M!C;22"I_ ptwwV=rHәt:7@Wȓ{iO{ڹs<Enwvv鐶r@ƅʽ hK3GGG= 2{10m\r󺳚BәǕ7DFkCmǕzr\9-}KMy\o|hHrFw.a0pՕil&n+ vɵhҽȼ`qX-ku5%ܷB!0X$,;T8%;:2 3.'%dTuvvY+)a][[[x;뮓'O^s5/x wDj&xܧqzz:l<< fb?w8|p]!0?? .dC\PPPbh*(Q7F£zSta6[f|im)ZЍ~e?"b1rЏlEX~(l) ~F]__V9"pfyM=yرc'2K8,woo}[졡<ͳ7a77V%7wcc<9qD7(Ҭ2؉^&O[yǗy||onn )V6MYeocF)09VAZAV])?X؏u+s'mƃ+?Hg9s@a3~8D60%;BT'Zq'7Y;h@ ~$ȯ#)6LΟ#[_PTҙ;)e' T>e]QuX YWҭFp"FƬ:LÄtc>rs/-U# b CI6ex}W\fY?K--Ps2JF 7pCÖkqڛ{'wT???'MLL ҳ "P=V0)$˹RW\OT)39z~~~Fwwd gΜ!ٳccczVQS yYcS̈6n"tE»t1U352I')Uc>'nE(cLd7]ZܖhTh)4(I+heFVĞD[ >իW__FK_믿^}v{"O>x?Ğ 8w(;>?sL&0Y4Ȧx~~IE(g2C{ӡkUPK\6oj,҃:QBV2up1G!en ӈ+"]R˟pE[n;<<|w+NZ^{[Ǎ2:e} a *aEj֍DP?8=K n=Uӓ~z$ s=ߟgWo|400@[Ku0ޭk^0ś: a˗#X722zpѳgςk _ZZ"OMMBWysN:E SN3-uM`SRWnVrFW!4dd[~a-Y{,};WD:ܓB.kwRe!xߍ#`T\.bKWDqf2:HRv\nr"YXW[KPCQ'̇1VF[9v^رcy{swr-~ ٟY|W_纜HNGnY__lj;Y:==λr=*µK>>nwnnNH*Nsʟs9s&A2v/]jwwqͭ UR[:9dj~,W 8 %()O, WGpˑ2Vxh2yc0 tJwoFZ<]BX+]QuVI"< f%c8HIvGϰ IDAT`&zysbo5V 06$ {ɷRC6ᕮxי8$d4U7ln\ +qR#Bduq~&#+@h.dQa!aKbNӴ*-#<r-y{uW^}; re~XA8kz7zsc|||yh+r\Νw޹1;; kfY_;qWpռI;||Eݯ333ܢSSSOKKKtݱ+W,//;033HJN#\f\4>AaAf$B&`Z3|:;|ʚ+gC(Y>~XYtDPb:NWSTd5!XՎEXdua9`Ia Iqbw9iŰh\mɵAA bD峭"QUy)0 JKX|m4%@& |$:詀2?W^4r->###qVn}_}ZozӛkooUJ7~~^WʸL뮻O###wW}NRo֊ō??tΒƐLU7;sssqҕki%Lɵi q333[[[8/~鍍>NSqtܹs>ÇONN-#X]EQ{RL4}ao(9J-_acd<1Lzt%0yq'9_ƅd5:jb?ʯwbt^P*d62iE/ŒaoDܖzZMP?xuׁ"T1P3tU1?DPFUx&L@NIaPs\*Z]UH0q!=F]!Ip&}eq&:44䦜h)@uG~;R8fxn]i+T`9;3 \ڽ{EGGGӕ+OO>tFGG'Aj&V^d(XmګkbI/"GKbtttaa,pyyYwH5JrΥK֮\$28qbrrrzzn{)YU~*>}}kkkkknv:'NLMMIҸϝ;h$stJlmmnnn%3xhQWGdʕL?Hg!k"1om6JbKs6r\0$X#^6)퍤a(+uo{4@3c8Nq-rCn»Tex 'Ż`#m H"mY&_k*IЕۭU&[!Hg f$OU!&ś+ot hvL  u@T:rr U2uЈ-C'l q#onn Y1i ^KS;$ k:onӈ`ЭQJrtV|n ?znթ7ptMd9>_r\O~{tۿۗo~[w}}zv'G|Ǐu=/zыu?d>W}k?x{5]wrff;{s7_}/{s+,,,ҥK[wtt,'w3grΞ=ܰ޾r*CpaX%Ԕ ^\puNJ<|x*I&1:=$;n1;+bxs#!aL1eJFn-qjo.Yܛky+Mn\lzsuNHu'y'7c'盎ۼ7P7JxH0eOvד/cL_o ̒:XN˹(iK[&\nQdUͳ śK$jOe:ŎI(\OiJ!yM\"A񼹪+xsqxs+-oѥ֨962_usN0P׿>33S'usskV%O:533sI֬@M1zs''''ٳ|nr^=zq[9s-urrܹs<趨3ߑc ӑpm[3 E`OBZT?p# lǔ8f͵B :[onӈ/7Q$paTbӀ_~6eNOe1{ȥiTS8oAņ$s13~S^t: x{_BLu'wLn\y23`|*\eD#p+y(Oj}QizyuJ8;/%?QϸRT.j佹|Y_^9ַw;Ν./}KϞ=ԧ>5 5_uyy 822?]RK^:cX- _QuSƪD)[[[W\Y[[#S'''<]+,..ڦb.,,}i)577G9iKkYFKdqn~!bNJ+q4VY3:j}|d4n>x#sXT#:hed&ӌ$qd'?pH&He^0J9PȮT]:nJf]]+KG\0&9`Zi~ /6E:A7)FAYIlI:qAj{G>T[ŋ=M7׽{{CuWՕݕdggË/yKeyw5/_z899Y=?tXuƆnA j֦FGGgggx/]T] CL՝kkk+++U|Wƫ#|??|5\wuOySxꧭo~ЇqȤN%~pw:?99y Et:'Nuɜר$MOOOMM=z4gtmmr*T *fNOOOLL*˗.]®ɳg2. .9sFn-[r0_qOkaшhD$J-ynn>ۮfihЌE3:n:R[n.L2#{.>UG\!t<1vd;, F[C4  m stm5<7qpߛl $WT}Y2:;Jѱ \|-43Jڅ"UWFB=9>]S] O䢩[7 yա-Z8TĊ铮Ov.pyyO\pannέ?h͛ "1Rr罹Bs?!RszcA qlFU8`'+_csYFx˱5cJ/8?k? CMU\C%=nl5>n_ݒnW+%&/`T#J^#K$ҌV79LDd2|7=%`6v">ы ,wk:ߍT^ZɧJE [kyu` ~5T0.jێ$i`:]# `A<[ܫtp^ښqʕO;w+4"oz 9jmۮggWq 65m _E h۬k&WYͺh[Ү>mV>"~CIfC`ԍW:sD(>/;K!V2*[ʍoMA$9ԴT|:$ "O' hP@IbR6ەy6zs)T%!322, L^4acza#k ~ӈ453FDŊ伈$o<"QMJPW,F)588022ReVF\<&ˌVZVvJ+76[hUHr+!u=6&e$IJ𤜷W$ӝ2ZA'O9nӷw$;]L3v J-Ƈ*jFL۳JڙjOٺtKȤif#m].ͭ'm-Eo@md UGjbs&H v 3J|V0 syY-sz.f̖ 0C58Z!14 $܁p- Vw:|N]Z 4 «㳳+++1:'-մ,; e6 XsKel)oT<9B{OxupPVyU$Jj24:@SM$G7=W} #xfJj2↸ 1% c֨:uVVOlu-y47gjk_[;Hy- =$Q,8#7[itddFUL]%2-4'j Mm#jAi*@0|bqq|2c図4<< ={VW`A*Q|/]rWPP-Dv3=ѷ͵u+"PIϹ' BN>+;Ag>6yG6C+ Oѕn5v $A^5jD{nM fon *N1E@ȡF_o7?(Fh&VocLsUG)?8,4 o5"b0e8K;w<:~Sb!/--:u <ڊ:Y?( y"Ob [W'HW+# =\O q.s+|=5;5_C؄mQ" [o.0з(pFQ# &@P3440>D?X2 *Y (l vYjpܹs =wdd䓟$?ӧO߻.ynAAAoaPP([GeAj'3Wd˄2d^mR!b6`~Ã]w]~ zhhhooohw Ue2LpV$XB~ 9O5Ho~lQ ۜ},^fjT;Eسtg&E,-7B]9,[MCt]`k xLj RGqɋ$DRnr#?Zc9x ZRvp%U;Mht]CZqOWsV}_~ʘ:DlBMd/޺ErlooԩS<xvw\pO̙Tߣsss333偁׼5jbN *dp\wxj]vBnD(u@*fyU |-rsZ(S\G3E{J7| *kt_:ŏljZѭE[΀(maiF ㇺQW>cӛ[z̛[ۓ:9[Ԥֆ\O^k3%sѸ7-VsnFz:#1[T:n'cP VR*\bYysm؛Ko.㽹d>8N_zsOܼ9}}Gu͵5ʃ;>>>11199966FVe宮7DkMA8.TCbg^QaoVd>ÙAFڸ]fX2xs ]5=b:v}zs>UϪ+͛ےc%"!@r7 Ggy`FGޟeUQ7DI,Lu :O6*AO*!?vv\S.nBOiLv<r.`< k:+o}ji)<;E 7Ҟ:@uȈmR˜\oPAAȕ؀nќ &6ͤM`1„Ђ*zrEdշ.\X__ӛt)x ={veeErT ۈc˿(e?AY2A&<9i|"ofPWQ]\L Oi`P^_ IDATYEj0_O5f?o2 I2عI !0a/`m<٠ʷ2#Ԯd um[R,_i(%cOP<*N +hiT 2"U)0J>FIγ5O[ͷxȝXK5qC_v:*ɓv/_^]]5Z|1ZZVRاULLHqKL8T_[O'JƝ;lBk|o*?1miçOqVP_Q_I|1|^e=|q$J&l1|9T&lƆ|kev )d(/,A_w+._P`IR-%4uoV<$g n\, k灣LƁöZ W7bPF0Dڰf*Rk\ f"pyRu}㼜6v 4+ɻ $>M R|7繂^^{β2b>H{$9wA>`lA!/Y{!9bO0v1S=CZcÒ˶~H2/0ڋQq)O oz?gf\!J?Pp̮c([HVQz*6zÙExXhVgВ?zchu@tPi˻TA[}@ib[}[%u6+;f-"lmKJYUjpO{I> B>Rez`̌(Bw !b;8%7BE.ʇ l+3 ZeŽxu@ Osn '[r-Y-Nk7L BSޖ[&DQ 0[7?hE_ e oVJS}q1]Rޥ$HEW> $T"J=n'!61ۘi3 5BFүKj7D`7TH䘱@K qT!qثG ȓޛ[P!B̴a`j+/@Ƕ aj\ٺ; ›lk\rIr4>k  s6Z}MCo[MBF zUB-U-diVt lNʨqoo)? s!4vFDI(Icr<988Xrs z€b夠ހ0q >$*v7.Bq Qa; t3j䂂H( OAAB:6ggf[*Vw Xa)p3q~w`C@WY-*1u]1> pH?}T(QcdińN N:LARŧ%ɨ.'[|$Ug_o͂ߓ$gj-=1xB<?9 _#Y-jVՅkA SR+a#Y53?IWR20Պ|9L PtgE}a,AKW#-!o1\/0r1֜w&;=Cq$!A# .ʊ ~4C,*0b€WLxM)Wz RJ R[In7Ty@Yi2%[K}GVcxq3jgIOOnA1 WZ C4]m>y.Ƙi43|?7ÖJ|d>,}fX.i-lYb$NH U#Z~=lq$׭AaD:T2Akw)'mVސ;qmuSzڜ[4ߧu|3 )&1)0I&m+f?g]<%x؍{GouCAv:-SVt.jcׂORH ` d"LxgL2O|{7HpAC&|Ͳ g$D[j8cqdRT/gIƜ(dئ 2$yq)e g]6Yv*OEA8v?4SP8I_&fh(IG5)4g!Z奜kchVG9oY@*ZCJ#&?/Y&]&_uchN5捹BVcC8#Ax}6m|;a(/H%#-YfS:gApaˋ3tDeUnJjWCIphyTV'msټgxj)i: 7,ڹe+ړȭsiR?P]GU=OѬݲb{X H!O9Yc['PGJ*% 9 o$ QQoѨ)aYR?(|F.  xH sҁG_ ,8$sw=C|F&<&0/xڃ^[ Z$p,ܧ 9y̐d @x-7C(27ǹ@+I0ډXOl7-ZNH OӮ^L:[f^ת:9U&LL ;Z6[RA-L0L}'7r{tI4.%M{t@ m 1ʬY5 SOmEbm'7Q|t+~3PzTUynn`R?8]|ƙӒ%ě$ :-q i ٷrҲ nA8ܩ- <o(W&8= FSA,yUkcGF<'ZNF:?Us+tͿA*=t]~[gLq.h#ZeNd #4&xqt)xI$cJ>4_.f*TuQ]uBva>"@u*Io _Ӕi2/;yGd2σl(]i|:|r?'+xsEhѓȡlA\ 7F>s+$i Kg %)YQ7z$5'`CoR*͏}+O.c:>]n29lDb{pBCBg\Vְ!'ŕ[jUA[/q"yQsZ7rUY}/n5jѹcOhc!+iuOxߡ@9 |Lz|uB~D?3#ue 7>l=G*ѓ ǹO[Rrn` OF5JQ@]VS5 ucˢ-eBcOtu{?fGYq zy^ZPPPPLm$G@Ds rKj%-y;|y¡!bEa>Z]Nm jxsE'} Fzš8v> BmɊlk#HlȄQ' aBj{1؛E<,W(SkAAA@s86 7] 6p>|IVre d!Wn8DLBHDRIVpb'Z\pN%" (RnN%wKZ9 <$1xǞ"&>幆_XKev>-r> R#t*> c]`ٙM.1:;ԄCFId0C4-B/\$2=#i%oYH.ߨ@HX'물4hpCsI*Z2*P+c2<?S}4f2M4AoE ex|:0lE|6^VPU딁mA>#(218[NnVEk#2t[rw$:%k'i&_:RuK6M!K^LSJ#%(DRT_wӪ%̷rsd{NxQ7"tM7MXAd@ cbE@"6_I^SKnq/PEA$bh|4P>Ϲ2l0:&Ep V.CCC', m)V- /jtA(]t52dccV}X2+@K[[2F&4I|U,RrPma'Ɠp!_URyQ5r֝p43 in%8/׽ u?[j A":^ G *2-P.qAЊKQ$1pU'V_5_*cA?QQz09eA"ڋv]e? 7Bo {sK,U9C) EySҊ(2T#79i(0Ȁ-1 L#Ơ|@nyj+yWj2D&ejH}MeѥTx3}%dHD*jp.9tKmCꁺ=LG [*P>Ӡ{LB+pcs{+^_y%ra9Xy,.Tmu*[;_~Wm;?!6"vw,k@ʦ#53u\+|(=|7I/ †?Y|( pQ# 0ݡCEI-fF S SMνպS}-@[ 6>(v52u؂h39I>֐xIFKp](zTNfcIvxn@W| *s.F]O1d7SG@fPpGw3ICKOXU (4xsܫfcILL-m3O\*KĦ))oP #Xu/&> CI@gbzn 'aU)s}Ly)E-AZ-U>UXذ;J]y*òoVcd+ca!'%m$jei V+BMSR|{=@1PFO$Y:?<-ۈvYmF$+Θ& o~A罶-̈cJs+6I'1~`-w"4CB $19(ٹ)|H{ qǕ35w,I0Y%8tӨ 2H?-5x?j\Քų^20 }пs9[AxX&FƆC_ƪFO-)!ShO$k4H" ٨@(NbchJG4VZf am\OҁGZ;ͅ~sa@5EuXy1 niWLaCJJD )sJw󎰥|[eg ro._GK1x{{{{{{CCCdeȫ0bd;B `UQV7M1B,-p@UcAz:lJGPsE΢s\ vFPLGϽ={1VKr_hgvЬ= B!cv8#R]PF} zxFCWnAA(?\adV)JjS2W)B`߰0I2uVTH'tljuF:?[wx㴖43Vׇ T 5UD4USu,QG͘}S(H`3!t2a;&DEV9r `L*HOy5?+S%alf彨|~u1?r2O"&#?O\/I0 0*Y'@J%īɏE8\LU'#tqCd U|5pUILpOƀAuH^sK$ы瀊l01u$\tfN0:pJJZ!o.WW*Y0gՍCXPOUrK-~ܮ U]R9dI}: Q;QZx"r`a0f Kn/W+0JlCM#x@\ nP㤒_97<ӔEvlS<L@ ۅ~M_`e @E3jWj_Uu]($6҆ct#L5,tV*R4y:x% Ҹvu{nCf39lm1!X8:<bD Za}Ҳ6AoHϽ_$dq,IwS^`U0xy6)p"AT0 uk+bOAp"I4odrGZ/LP^Vzi&[?nAAh0\š $MM=is ~P*02{/J,;J(mjBysǐgpG0@(@pIy"Ljd›[eEq#V; ⒣-Pj=?̤2CfSjnz IDAT0%(VL>+L4Kk%K΁)<.A,M< zjD@\4fz8y)t:b66g+Ƒ_K܊,Bl]ƵԓuNf%P0WHMɗbpC>|+1_?sp#_/yu8^݀HhnP&,Y^2ەvf kpRQ{ zXN^ 6J2obt4A 3Mŋ lPHvБ S*#Tw !q UCb,"my,;dKd ˈ1 &^oX\Ig$+ $⭒|6EIn&il7΢$@3Ȟu%ȩ)d6""=1lCH|d4[8 am ۬mmgRtn'gg*&Ogts4O ]Ƹ0Hu̸32m<;ltσt!Mim?/ו%kTC,o"*V^_BA BGT[…[['re Y~ Tm[k<2 0bFk@5:F$"W2e^c4uNVvt]vaшy MV i}б|TZFLJDZ欚,^r@OŅS"rt3)XJG9YҼoݺO:W .# :ϙOjb%`Z$q>!xW+FEJo3tnoX2O'`IL y;GNVXٙ7A7Ah-bfH0*"/| hj`O:]iNThϴGRnt(ar(*AsV :Es ֒T%xyʌ$F 0$Z*t53ꝙiV ϞoQ+~n 6WO!;?AHETUفT.AAz$w[-H"7誶Z.)ߋق[g KR#vقIjO׀깏ok]S`BFt6: Gq !+a\=~GDF%!8zLb(x9EIkc3AR O.4 [0JD<0>aB6azAA y ۢԬ csƻyt''5+NG[~W r~iV.7Lud\N] 8U^u|~0I*IfSw[fdt;Ê:7[Pl43Ж)E)K[AAzbAf |G=zNfk,RSd$&-Oa 8SW'2c^0v+:-njv.>9ztID.8 5&#5f ss3Hn;oBTœsrT礗9;mB8pHpt7";-g٦!@ꏽhe  |QZ5/ 磢O֡ DaTbh8%@b*(]Xmd, fE.ΟLd\dOj-=Ҍ/}h^- PAǓAE91X~Hhlm:9C}@J{[`-]#]sb}߲0^(SM6 JjAAe~((yQՔxnO$#1K06/9O V-$rkjiI^EY!TQSt% &MtԆP(+x.SOK Ƨ nyHE$ugk/'Ǐs$% 0Ifj$oP`43rKG5T3tnFi'؞ "<)C^'@̃yp_DJ,4|8G09c(±@e6 l"ýukױi)x"! jM~z]3K0&ZT6 % 29υc*5Y> c9hlA5BA׋3< 84y! Vǣ/mo|gj${sm$PQ.Q.+(~5={%RbBNqnl4H"y[  5]Lcspw%cdû9ْcz0iJG6JV/ɥT(c.[u-R%! 2򊌢:7TAle_S$0Ā j|v;+'iVm4#4 [*"*z'a}; Ց܈ T3ܢC@@A ?֪-OX4櫶UIV0&3 d碫 6 z#`ZѸ x.^d[8ߊ3-+zY``/ZyZ@BmVi$Vs'c{scqk[y-&g+q*+&g5:,)%(qC'[jn /V6s .ٕk 7Wm"7 5vxV;1ʣ%1klxLJ41=T]mmܟWviAATa ,GwXR  U9!;u3@[-9Y 7dk=`R&!-$X[.y.Y@ShI ͪL^0_,)AH By#10GHrӌw<^'ۀ5c_W/. IEM(m)2dTdz=L\'L5g9?z9K>` gE~C=u"ԫ(ݚXF9igWA^{L {.ߗwl$0`t24Gtm,&㥦JQKW>V3ĩP/(}r` SK& :&^wR=.Gko2p2B7ϵ_Amr]6j Ƴ*׭)f#x’ X~j=8vC:'[ǒti:e^TCyXPGo^7o?يX(XCr,/trSuCW IMq5~IܖaUP o2^ eEStz40ayBv҄h&k):?Yj媗$:C1LYBa ƋVWAWay$ܪ㒒IZƌj.ʸЉ+~նjU58@5e #ͶNF|Vbevkq _N<-pxК"@ ɤdmF~(FXԨs^L&cu'g4@TTϪmzۺY$"y&K!lpa t\-_f;H"$9sGrIfx :2-/X^] %H'L|͹| (vko?ʦ [b**6eu06'< 5⣇T;H~ [sp<=]jWHCLz +rt~ʺL^ug .0Vp?$+J. XcxviTȟ ̃ɑUux'Z\&Sd7JPS6a@] 1BA xs ԞPGfAػan>1R͛,v7Cݨ3Tťu, R zgr>0H&Ξ 4; J ӹuw1P./sK`E[MF /T~-|FZu޵-Yؓ;O=]jzA k1 ,ݺ(~f(Ix.1 ]g*4{ߚC_,ծh^,\`?(Yuu`v7V !FsS7Xs  ߀!CQʽ y@3 AQPR,U 7F̯#5Q`XMܝQtq%äCK1\V&0U SnUHԣFayf:*>nĪˢ9x*$Y\[%q2:5M[V0G_鎺e?O@oRͳ Dx>8GJsbn\H%L&Áhz޿i O1A;Ige*էp4DX l%(OY16ϊy'gߣϟ4^oGA"PȐ),>\@97N)ĕ@$V _V:Ï8!2WZb- 1":)zEzp.Sܥ!x8jZd !CX|W!փ!xHYgu|A0=X#ꗯ5!r.ÊS49/J3UՙPQSվьuU:o^[ EP1{l#);B#jOf!ÜzübT;ڸ+MȚ;fSU ;9$v@`8 ްp2vc&Tͧ!adIS s 7waC(xJ<߶rjsv@x 5\c2ƃ#Al^Kxqp&+.px?)ڸ&9XT KsBzgul.o}W״LW._i,aijz j;0uw](AC\ݨ!vc.W[-;T1gcE.pڛcޢu^o!طdWRq&[/p ?L7A$ˁ5aű*^7FPq* 0clB' #>OwAhB)9^,pm(nYѧWsf3 Y[L2# e(Aۋce6A4ٛ|mԣK͡4[Lg0]dH4DW!ڈFi*0Aף'n}"K6G\Ubg4N %m"{wzn >64Rp@Q@tF]׾&bq(,^QӞt66ۉ< Vs3-GDH3)U? ?:tMijqv~$.V6 e>{8 `Ռ+*9xUĹq(Jį_.gf^NX3mX PG$cxVa ]YW?՗UP\QbC{fJ(-~#YXDo2{Ž{fC0湌D@[deCVud )Ȼ:'c=(nN|r7Ve)NFgZ7V; _(؜Zٻ+7`"[yi-H[ռe-HXPHhoa V5+R*B3Οjo;@-`%?,FM>nk,S֨"3`jK-jIYoLYeRuOE|omFU%J5F<0+EvZYCi3GLi\XLi @?3*'S/Ĕ#PU7 [~rl'"ǡ|E׿MJ2πyJ~za`n Y#s1J_( .\m[0ɕ fCLr0K0|Y%zsI2Hk"V"O̫^k+7ISwX(fPxE8x&biL0?jeįx44˹fZډy¾%ܺy;{mUΡ{B MfTC\VWqI!{-jGdھƚ9&$@@T|\gz3o.47:d{{pnSOF+[9'!,WF_]X3.vHRAIqd Bq_!xzq5B1IA,VT*p{=oTbJC}M# @{f IDATaPֈ\̽#8q2Hh}KhcQy>@^o ȓܱ^;.lMJ?f.{7uW~`ZVpc*V(^/*fsL1\q;t.<%x-nLtW8`[wSv&usFq?{(;&E E { ,ʑB?<q@^|2b{063nK> ̗M!3-MW⹗Ю9z,4e;-7Vu|"߽6%Ϟ=8ؘxQŬEd5rovtn1]Ly];*`7oBVV1j!zD|zwEb cԪbSmF8hj? )v*j8_Z%7H1N)s=ATQNqV!? =<6s f7?̕yV M/jL>qI;8|X{  VJDjRV?p)Rlk%ǮTU#\:ofGCV蚻ѓgtbT(a< >ZNb!RK968n|8b-'}t  8 ׻LĄZO+ӟ~lI&MCq+Ru!6fD$ DK yϟ+uEBE!1߮Die 2)0˔}hmZ9g-LԎG)'}s+hQa\CRp直vw݊Sk^aNtԽ,BBp cK5k]yE[ 9LY!qx5^4̩\8V&6 ހvͦ[t  k⼫,JZ[謱` t+Ow2wq OlrNE{q?6Ɉ)j1Lerd.>Ndž'[w4mR7W%ZUjhX`mY&tG5xQ-sX7'G$ٱ#WJx\xF=Zfc⡇1ulgO㲹|p/~0!=wTl{D 9Y>ъ e霉5zW?klbiql4u֫irF[ЁUygSU4|36da%Uzc7d״^ͨu1'_#l976&!MIob_EIJ +ع<ئcBS[/{KTXhuW5&U.JG?1Uak=j |-R-NCϺQNBP*$x6ٝyo̥bSfM|}pl5{rǁ4 U&0yD%JiƋt6vО#-8Q%Ϝ ^ 9v.!w"2%D&WA`YS$p^(AD"5bO.{qj3vFqtI&A)4ژZ 5> eF%‰YT`Rm~ *v\@LvUBU/^Uzi1UoYwz 7  ਽G9` bpf'!nv5h w=ڐI=Il ,y "C#zֵqӕfomS0^jqG- >q."/'{~M ߶l(B;(j6 pܱ}Dmðx@GH2q-:=U;@2Jp1Añ5?xwrUf]UxWJV/ PԱ{Ed9aqr1˴ ϖ|][;׵Ɨ&+K| q$I!B߆áTgY' 8A|{ AT!hwY /B7n*Zp%[.\6ejězزX˽'xpحliVImQ{1#y%?3l6Eɬ"#lJgPě_yhlqh~a"| vU$`0L1Sa$''דfmXvG٨!ρ^o^BN>'zߣP:g*ˬ+k H| '\R^l=`,%%6;fyZ2͍d;#`pہ[\t9?ѧ?.\ț mxEq3$ɭ{&OU>ρjij}1gY;ݳŘqFKѿV{|&*XBK`%hv(㹷oAqD~5 /?i<fsDĝqL+czD"Pɽ<-P&x˗P 5աټVwb]r_bs{''"j~BI=vDkTZr8K*hϴvpg |81Y@%]k6ʄ A,T'?O/PW7j2U`Ձæ1X)vd1 Tx zJ6܋xG<0jkǤbg縅|yN^G qv;PfGs^i=r>LxAe V琤1(hнxؚI=A4yqD7NЩ$5N*59Zͪ-Hh~m_d9Ʌ\G'5c~U[73nNhqUG{%/sҸ!<צ ^x=mHw8,bxy+UKD0xffgry-m6;(hpf=<zs \6 &VmGBp ^>UL)\$-xOޞoۭMWmuU;]#֦ȭ:ǴW`|0-oqWiC*NZi}D1& ߾U~mV8B^/ ȋB5Pܷ{ssnVލ1@HPtV4EC~OM}M,nr4y qݔUU/F uz/uI706"#: 6J4BQUSuOQPkFٚz S{/bv7MLձpz|b5;lEq!ɜ" .Hq ~^vx~ϊqĴ [vMܱ7r1Ul1eIU`fzji>HQ7" xYeo_:lX($,5m#)Q[~.3Q^4 0m(iY3u(j#BTYۚo}-96nk2s֧XSGn .,iv"҂&И~i /kU:bЭ8?8\ P֮e6@nZqXG oAnyj㶩S-q6׼ }l'!*GV:8Lti&=.פ ~&Nf@#:S7-gt[/8*O+Ug4^5yG0˲, :֛#]q>"͝s%к \D!^ Ê-hȃ"b::m0 A(< ǹ˓l hToyخ]~vfHE[6ህh \S-0.*'فwDt2^{M ޷;VG):"Sl:\'\mE.jD Hn^C DlO݂l$)+ St-իVyѫo&! ӑ{"n/ Aw9mca@GbZqf;v" Qϟ?=_β u"}>0rgl0#M%*vlücF<&2DF@sxUc4vuf#C-Yq)DR)v-nK3gu.^8xރ4מ{-0p:0CB:޺SofU"VJPk r 92jdxhEvӻ+Ԥxh.4Ci {_]Y'Njlg=j(ꊸK=\WEda TWvT/pj?vq |f,NڂY߅~(,]̜XMv-xYʵa;3?{ }CS[O~݂iAEA;k}7VnnZҎz, J]sA5y+c;*=i9{Ł C /ǚCrbnQ p(j9xl6}`ʻX>cG:!O8G:Cp~>C!pgy9k1,A1U J󢊶Xp&U4#AmfkQlKLc-S2mԨpڸ#z`s'V]޼("jAp՟\P+QDz-<&mTތ`nPn= !S f[n+ߕlJݷcDJ̑SsO!I%5W.8 (gж`C)~-n4$@^DYbs@3Id|+O B=-*BeQA=Od)U`#JЃcpBxﶠms9zKONFhD$e!ȿM 5/kgi={gEf Wnktz?/ ō$HId|kbxIDATnK-(& 1?`@)Y\1|7TKUp2m6g6S*L:jF_%_,^P/&~`Qy 9+ z1 faa22|`hjGah{_x7-}l q~|k^kk4VUW͆nK_0B_{V !sY)rhu_Tm|Lgñzs,aṆvZӀls7ħb+Z`Bbيx \7$y >#3p(w m*L*Qzu~]ID緝hKb~0X5ۘl %,(Ay͂\a z-ʴlI9XXk Faqb2c$8V9'c[%Q T0VbD[SqFpvhN7yuڳNN@6 :AM^A[ 3˳G\! ʉ߭)Pz$i˫LJ@Q  (o.09ED<6lzNki Ԟ7<6`֦gc@LwfgqQ ]` N]%xb=yЁWGY˿ ,FQX9f~EDS3C_#fl`Hr o^-V։`:^BUHދsQCOׯ/ZGIENDB`age-PG16-v1.5.0-rc0/img/age-02.png000066400000000000000000023244051454606241200160470ustar00rootroot00000000000000PNG  IHDR T pHYs&? IDATx춑]Uk->O;_9ݶ5T}!ņDNAñU<z7£cxIUɖYTg_"ʳi[3S`Ul.cUtSQ(ؑ3:Is)Їݴr*s/WcqenqOLb% 22 eT^}>>f7ctnG{wȒ 4n=xk_*F[@n1Vr+p+ZDt2ʨ\Z|k5E)c[zq ;ҹB*i6{s3T*ҞKw"֒6YA8WꉪvnlǙf/;x7vYٌe?~ I kz((eKSE!4ΨQ;t@V@)NLk?+ꯜ-RV:-փvE'![3pʚr aVL.j#$w١RQw( rs)$GoDwΝC5|@s4VW=*͒ZL`FL|1x2`4PLT"L^r`P p |F`j`WFlJ$N75dGGJx>f7]Yp[7$D' qD'S-ex%h.Cj(AHe0_v?{{VmRM-sejHPTv]1]}{;^6MV'kGZe:덑D( .`gUJ/րl)J} I:ڲݏ4SS"dIȃqA"9*LjNu%F(BULSMp4+J멢av 3Y*&⩱*pslʥQ 1˯>aQ n+^Tsa!kUPD;\6GhV(9V`',mw;h]5 _4; g\1>p$XQxkGEr(X N ٣zFHAi*Ձ۶JVU=>zcWD#c6 u+ñ:'{⿥N-#:g  h29|k^)ʰ0%ii,Dtgr 0"jZD 4NNzu)f^2sUSh73%v?jd%aCːe$ȺF=1]@ + (+ʂ`uuxAa=5trMSp,;] {ÉF[BıX1-8neJImCZNev#Y`X9ИlzR*GZM>ȅKH!lo3{31LEq ]6BCe=$w6FIJ,G(W}SvLI\ӼrbgQL.yv[[hh :Nt7o>h)n9{=!⎕ ibi)(w^r\ԇ1uTZ-[=F_}~eEEKz)#MZuDeml!oG8wYO79ɯ;&|45q?0'?ݭ򬪝rh'򬕣{ '@*?koHF LH7YMsK|G쥴eOmKhMz'|hn!):J^1rZ4 ߣ , 22F.-JDo}uZgV!UjFY!{9 Li 24*,c$UFrX'2N:'xٲWuєAq}w5ƯK~dMAS D[)`$1 &3aH_O1N>lnXHp~‚pOp 9ď4_oV5lj/m;}!faR̆>(aa'w[_ p1:Bn]NpI |ʤ̑8BŎKdw_{AҋܮU!kOnGy@4:u?ݱ$I>凶aLfxz ݨ*C/rrD *? 6D"q~v?k$,Ўu|DZoȩeLR¡Tƈ:vO}s82hO= !0Uf5(_Dvǭ-#V*V&n)²BIZ>N|v/x?=nFC ŋT)0ǔe٣Gī*a+2SڭihրQGMc7 s% 5kx[ZBއo+/kԵ~7!`eDΊhKʕb 0Shhga7`#B=EM+%g"c>1G(uɪ -VSGy2^ht:of۟?]Opma{xT[]ͫVRUkD&"9녀CJ1E9Ye:J k9YR'Ć$*UZʨSŕ@PI> ŐwR*`zFm*dJžnӪ5nB/Vi>}EuWBp[eIR#կ)ڛtfJ?"W^9 5"crmM̭0@؎/JTǠ0hUVNoŪAdK^HekJZw** ʦC30j6-p^5P&{ӹጠj˾|MPGL[@YFE>LYQ4PUe.7߲vT0ݮCj]JI4SL|⯛ֱ,izC cƟ_U. (k+1QwYPmi3k*ʙ4uʫ"wi~0DP#@.{O?7SKMt4o@Ug^J/Uy)W\AfR.L2z{ZVo4/*OZ.𴥆=Da )ٹ pa4b[GE8$4sGrkQ5Vy͜i%{Y tw GMI1?xN3|jᮣ)\cyk[D۲Fաкe1Wt#+lŠÄȶdWZ jD.6Y<9&Xc֔Xb[/?q|38lZy)meuכa o _ :Y0aپR (*AMVi)wt5T>ŕ2ahd\SnV^bhx;ZY%t/+hՌF_LȰg%牭ڪ,i*OKޞuo 鈦YYD^VS>41ZfUOR-Cg\&Ȟ)#lwX)*TϻY ,˚#s}(E?4MOTsJ|- J8]4b+y0㨣,*.|Eo/n < _~tz oK{xC=KZ p ,F[ b L&xtem)ٻA}W n"&Ms[F+!ݔ)7EV)5O{خNp8K&'s}4b՗c.U*muH-$$ jmɢ'йD(nн{/~⸒%rkӋQ;)_*DhL&3XʺTfơ،Sj1Pgc°/Zf< ><4W!Yza hЋ`:[tJ+! ŘLZY(qWk̚ `Ӄ\.a"vnqLeY0XM"ĬJdnYd; b<%+Ld/'=lo-FZ8cu7}zqֿRi[|\ӗM,Y 7up*K*2}JL#f2ԙXV!ER&8+X#GM]=(uDzO$Ats0|>, @*-Gfsg-\>)@c\j:ӃD=P*z<bYJ#XXEK+> iҽ)|3M0f/{ U,!o8R`?Sժ;{ dہiUbE0|U|؄f9;Q9jQM)?3Um4<LO9dv_-w"zgҤ?\ G,-&:zU$VR6"_X1o GR"Ov׸j[廭~~w@KHYeK83SHPs D8iyǪj?,wWr<=d Q,@oxO0nZ%eͻYPr$ҳH#>8)@֠c$1X wWE86s8ĤToTM / ˶AKXX~.e4Z#7Ƕ&\L(46Pkr`14Wr v&DLdBjN,"Qa7qahb@aZ"nGXR.4d |Z~|hSu,gQ=|MM{"ca  .lP'|`ѸX ^ח!, }V]|*N\ 6Yă IXd⥥?4w\QFXKӎ&~ۿ.QYaHߥ6 _mS?~q!{ L K=.SLN&9HVUT/eu X}A]* { 9OHT׊}Y*W6 / J)]RI>>M"#Fd'tRi}}1ʪ99k{aUɷRf-x<4P=3}bB3N?LRx%vh׼D^D@"o5Rn4J~NjP(퐠~=ݛ +AQT֖9*ea][N}:%r]X3-Iw?G>kG3L8Q8KFx;9|ےON(̎吰-KfחEhsQwв`_xK}JG&lwnjJR>Ed75^e:4 >F94S1W4J9}%\>4Gj>/DZVO/ƕ\ ]\\Xu JJy*:fZLW8u=b^qX! y4ҙxh!2A.>z7GOƮ!8^`{ֻ]8mj-!g*ksAĔć~dMF4U`ҝdw7G_4&?YEӗddÔȾQ0E*sP)(ic( 5|o|Րf_U{~tuM!z9lW|Okafԛ{鬃4*wќ-}`[zƉ Q-S冺ͥaf7 kN2ͳ;:ܻJ_qe|~]oUݗX/kI&0sV#Jz\OC'ei}ʎ0VEp(m-/d5[!, Jy_V&XyW֟Nbq[~GSt]Bg MSZ~}W;' Gˮu*jArmh7"zEt@|'qb5FS!,;3_v``ϵ~PƤ ͋lx[^0Γttxeh^>2C*j;'#;<4YhƱq:X/2m\v容3o+Z"ʐ)]λٲY ,$ VFX,y[݉y{#OYFJ &,']=j4.ti;FyzƵ;MO }=1Q[u5*:jG3 >e]L ;Tvbܓ]9w/(5m4?Y&?Uqb;o~75UQfbPᦠV?PV__:jYЉHWy <0X-7l4J,X9H[fC L8cF9vǻd.NBݡfQ!3(OqZ-Y{By V9^i{%g0+lHmR9N*-P#8> ||H'4,'9cfөW󴑷$؎]R<uLYWҵpXTO3J\4e,G؋1!~I~_,5u]l?n AhY3 9L;302AyMyYm4TKt&ƌo%>*vafc+egU&LV)Z-EVGSeN%1ħ3`}s: Kyb]Qn֦VJS)A}(?oVSÈVIzy7z3J{[5 mC$:#7$R HZm b32(}uAlTCJ[z 6Ht@ժtRkXejW%{@h PqV:F ̻O841ZdϦy++׈}~Ĩ̱j%*(Z«jM%) +q-CbrPdggg^VWs例;BZ@uX0uLMˣ"!sBT{.ƱQ_x:)7Ik9BW?@Z% _uflV~I7F7̞&9jT}X;+mJ; kBގ&!`AfD}WulNKҌRb\Iz*"1l *H]הP$ K$ԩo> ,2 ^/ Ue۰,!{~EYyą/'j[䚅%QfmԊR׵[t n;ZpqLI|Tj4?ռKnmq vSyk^1wpބ5bh}qUXސʊ -8u#8z,LESxwmJ%LP*W6OM-ʅЍfuV~_':*QOOZ;?7+$*Pۯ,.ZC0)#ftjA|6RS1Kq.|c&Ea.I^M|tu_l|4i"]c 8#kZBq #+#5yBs[( ;/&݉$?kPzh>EwEx $\uEϲq}0H;?ƣ3)Ζ`Yc>Oyek.J2c,[œ=k`5p`c@yF@b x :_X ld,ݥx^|A|kդθwu~Lo)YXu}}韎xnݗ딜2Vx6T$h3c&ʒwc@UEi1s8_iS"Yt夘JHǭP>+@07V8YyþD~V7!klU(zpp}QY|[_pV >QwxVi!}{Btlẗ8(T `SsƊ:RV`eQ VKq~> Dׅ,\?/S;e/WMľIf;vRNo5'5_ӥU+t_ l5j͠jVV,2jF2%=Mu/|;t_SV:ލC|@`YGd}ڶߕOѨ4Ba4ڬq]`hfl5fPdU6t88*MquSNvU?n3{V&M.V=?3Ƚ +q!nJ"XC_3sav%GFr@OU‹:  R[gm.Y웻0nTFc*lpS),;^RUTTtX)>RvrXkS?/')Ÿo^2@Svݑ+aUJq8+Mj*[UrZ5- &jx=[;0S, Y~@9X?N78kkM_=(Y%S+e!\%2Q0l[*v7:Wva˳gǖ| @0L8KiLu-mYbipOw3e\rjβu`PasԤ'^-! ̊{錸]wEyEj0NotԐ8)iYZ F-qɻυo^!i4z5ea& 6g=~Tʃ$tEntʼl㋰.`ObL@(!$`qQ=&K\I{XJ0h]r@AAd]%زnldq!֟4Vmil+# p*iHŝlFKQ︦,J/1F&u")b- 5L#"Mie.oC[U.;`- Y"] 7+38 "759~RY/԰rM{}A[4 z ,.eVl^]uW9fJV2`ZMFe5`|98֐ 6"bDKC래x%[`[=9rӸv'+RY+ k#lƖxO<ۏ(r9UfݝV&3Mvx6ΛZzn5bjBʊhT :I&"uC[`Pnh>5v#+Ɯ5Z g~+e:$-Oj`~Zm<hP*حZhlfܲHXBY`-=5Sm%wL)J$m6Gkr\tMXGuUJeϮP3Ǡ~91h՚ɁE:BT8F~.׺]-o*ިyQ.ƨ.bUt2詖4b[O] i2a+69²<ۯˑCU?*UlLG+m+}ZgtUA*G5y@:z8 +JZYKkݚi+ߑu`*dٴ&9%v_KJ1|{RVk5ww7MM9DY[qՌL1wvd}Nz'>?lnk"[~ڴڇ qGV4MZٖYS~VU,h ͔F@MVN_ Nwq4ռ0&6eOCEGW}IG{PaU{g1Y+|>'g:zU\֌nU=j-Xj:3OGgǦ<։A]r e-depԈk,Pc R|@H|+$Hoۋ)1ZvV XsF+#|5+i_1.;: Eʛ -PДѺWDB\PZl5 v,囲mOߩ@)vC\U=?]G)~ݙuI[08J+i]"_5šҘEKH#egDcf1H2uJ :za"fB_`F,Vu& Yj Oz:#)j"*|M rCWS;W6C}|5VOaGk"w}sleM[:KH2B;x#N]{v`jaz6J*\KMSy\\lz{RpeƗjP]zJ'juh>/FS ҆, l>&Oz0]<+( NY㼷xv&O | q ' +83JE3h h\yS t}킥ݤf:c `d$"T&LX,4K&~h>_"m\³hQG/P'&pʏTCÞZ]0"gtDWΚkF^}h~wbJ!Z(W"}5ђby(*;""$ѤXZyg$MU~FXj(.*i۟>?h܁5:V(ZL>KPR?vTqotR֓ f,T7FhSPEZ1* Dva^%?VV|55{en*Y,CbuJoEpdY~\T &\1&܋!s[GR*t{ ?5\ ÛoaYZ'cQF 柫@)\?Q6;AS1g0 Zʦ00 WK5w!^Ǜ!>`k5FK֒()5]v% ka2໓vK5A3Bv-˲ME4F2hr2-T(0ZJ\|eKa,e(6b(fD1Hь2ЛlI,:K)SFaTSٖjO ~0 ,0B~ekJvY:Xֺj7W~bYYxVt i-2g-;PL"͊դ4q{e*$,SY/>Du5/;`ܮ۴PU[}.:[R۽Ʌ麴Vi(IbZYd?]9T断?.n7oofP-\gQdZ7VA"?K#xj.r2pe#_3;55>:-GAnvAJqVW~θޯ$0X:BUhP52n)3/i]+eX%Z1c#}#RIf֪t+bIAۡ;nTG)Fg=%硣r8Pv-k t4:kZ8!Ҟ'ir0@!WV8vfmԠ652gݏ*ut#$VQJF[X!U+[ÑF&u9Z@VV_y;`Xo?nG"u&HsIDΖ;Tij(o> Q:KI"`4T^4/ؓ#O,kpUJ}uI͑]k\tc3]=59 Aݭ VQxѲ%+)'Vç* Q*:c;/[=_Y7‘ ͥY(P)HKYg0 =8Xa)}huH`q0I*RY[[QhvCC? ⹮@5Zܔ֤,?oMjq 2 M '+rUr`[Y2_ [q[5DYj%jf+-X]G=`k`}]|V-! ϫ )AÉ`'cVg_הaKjX{n˼;IC<ʆY [TcQGu:3E땛K~S2$lw# {HugmZ1򦣘y V#o_&SZxeU"դϺ7L[KQamj_g1&<,[ʉf(z4\יᄫYWPչs<74dkÔT) ?9Ҝ`"UXbXa8@I%O,gӋ"RGBsPj>) ߘ`3iT֗}r*~k}I+Z='VP A@ձw sܢ OW pY0X 0`t%\J&}䔢!DK"㚚1gTN|)D%T0yN5̅HsctɻnOPO`]7-/յBOWݿ{ i[6Gey6V֊$+!oKE-H$Z֏%ŻqPg\ykBaf QoK=~1F,s maY~'޾&̖uzx|+t"kgSdU֑eZT)6Y $KrFp^`+P,`J^ʬ5S/oaȟLʦ ȥՕLdȱP[{ʂD^2*@ ;w]c2FNq%k3[5:~hȚC]r5 Vgui쉎^F˪rZbG$Sl9\HQS2&//f֠Nj怜l1>G#,8Zh͓zɣV rJ}C9hS\$'fq)¢NRw܉\7F[52ݿ&a]脠%e@9D4 , )憽uyFhP~|Nj ˂^bMx}zLQCGZ+F dq#~ccGy|a~-C!kݲr܂fLs9pTdQ%}RP= y7lv(nZYG͖zHx=n5جJO#1_+,B%s { kX;ڡt;]ǝ˜T_u2)eeNv>ЉKz?rB)2(/9[1rQ*(9th+X'ϫ=iy`n_̒UX3vDӄ).5r&<մRw{ 1ݲ#D ~}^XKer"mیh%j -rwɪBR `(i|@ yܡ8]8Bb290M]ȪU 9JgLkԭuUǔYY`+T#p'pa L.-CbBy U {BkQVwpseԬr+霣$ը^YoaSv w#G2Sܫe7ڌ[~[[6mXBy:\j:b9c便=".윗7[j+,F7Y([;Ș\i ?,G9nX+bez!"O"uܠ4 ͮ[O=M͒Xǂg-lʋ& jHiA0r~.ZvTӌ䫑\6GWrʌE @twʡMHVزgDevrWXg}%t\v4BvIZDOnߎ( G- a5p:[ԍu}m ,˩n$[xUT4k7qiݏKɠ*LgL3C~"$9pY1]}eM;tN2>"-5=?ܛX9 z)ڒN?)PNZI"S~-BNFq M/&yMN$~Tv.ܣG:; 0P;4pݣ־V14ƴuoo2)kYvh |,91)hr˵߻+=t n&f^r5?'+ X ,|,|ftizϠU2"/ [˂qbiGI` *O\d7pcY___rm/ ըB9(|PHrLvRh^M^*G?v #:< {?u疳~3{>dr9֙vh ς&=3YdwA Ec,βXM*խ]|~K%FPEf)Bjv[6٥LcW\Hͣ55ym(M|`7>Bv׫l(zY-_NR~U:Z˿jsz.ir 6$${sl5Ub,|~AYT%wkD4so%x<6"2X%SV 3rb,)?ba5ՙD*ջ/pح՘cnUR)ϨY;oCoL}ʷY7l& >ᠿ}oŰZK_d7*gXDCdѹbh+ELƻeȊ|,ñP՝Ypn:L`dhuOIV%ˑB>kYʫ[n1^8._-IeÚ& (6Z18 a-]#;*X1m]?0'u?uK1MX¼!Ts{~^rJ()Aܵf.}U+1drnDyt DZtK ,tcWcV(f3>`*)JE/j[Hv֤ _sEu7t{,f1Tq3| +'a`>;4"P\( t=e4F)sX"2<Y#FHssTf4c )qY"TJ5 :X҄ƔYGup)/5YS/~Ny 0697ּHge5^׶>JnY4W,]& 7QddqG=VS|nK5G#ѹv|CoiMe z_dw*YQV h+gg͢dmk*EJgSSpS?+J #|[,ާ@LZܕ)HgjU ]<\啸̨r!$& !3Ʈh| %ǭ^-#c{6C7E(Y zr@;4j3 (hC7Jq+<,Xz ft>mt# [)Nv}F\m4/fd٥=r^=:5<:#0Tp#~ytq7VM&gAaqX5v\RSu"o˾$t:.p hGբsgjA+LVkr.5)`}t/;/etm_f2M sr1k+D$._,}ϩE-.h&FhA.mZq]]w yG=H< YxG?A\{R,BzVJ$Z/wd^ )iŠiܒb2+kւxٕёJDL`bוeh~? 2aYe͔NeJZVjl&6jiZ>#XZIXB38Z[֯q6Ϙ=D| KDXuúVXfwzG9ã҅]pGAbǞJא`ّd[lvAq?-4}.hHTաYJ]5ԔUȅQUߛ]Q}9WEsW_ %?*XroMf]ZB$$ {@WmU{p dSښsVR%k&9J!: [5=\+,F5Z24 QqǭübTtW(gghM#—,XV(_艷éXt DCλ瓵0:`cL;;0Sɔ`<5NK p5cG0"437 4ID1M6`\7}>fv^ט*].UU˙k` |0@.U0ug NJ4ߕp({zu B/N&>&$q^0o Yz<:UJàWnn(b nB=SB_rV]{o*I$ႱwBS[U"|lk(Tkcu-n1~D3:X s~%Ga *4mwKL2MA5KiMUw/4e{0!h:rg]">ןݤXoA—#\>К}Ѳrsg p~|<Co&o[VNǴI_ N+5 G" ˒yH2BwƔv:0V.-4F1kN0w(Vig ,}׋ijLhK V&S̕aVoݶ2idv^tR eRݔG"jg2M؏InѺq~T]ڪ[ ΋|h 䌨פ5aտr>1Oww SXaLK0&Qy|Gh+%? ]Pw<{/7Whwqg* 8!ofgRrN '.Y 8=kYi8Uqn}r~[U [YGb6*|eHiJw*wca&;`և|1v *ɍDrv0^P}`]G>Yzܖޱ#lc¸ s/Fח~Bf]p֧HAn&I/|Kk*O7 2-FBR붼&:GZσCx 5Y.`ԣRےg#Fi~an`n^wC"@∡ 8V0!VpZ3RB[qa&K"KYsQǃʂ j舭4s".-N[X[wL|@xdZy<%kIS y\sWa'z-{)gAfzy*K(O:d/[ pնBd踣pS6VF+GVF 4KZJn)n \~:QWn.Aʒ+}\3"m $ǂEX_YH͝B74}1sT\$ @cL3tjө+v\bN?nI|:uD,_{-)_j IDAThI)׻9a&ASGh"Y%RJƸ*sZ_82xdƧR,)n|u"eXFm0ы3bI([ ÙR>˚Hh;mYB_vrV"Ղ]_59j4BmyLxQCgS-.7rաMVu n, d)ܬ =.T2!c{BStT!r!\^[E,m~"5x`M|%oS`%| 3\W6%L w#/}&>5Z&Xi5>jAŒ8UӮ/sȚ: \pTBI JeAp!H*6T7p;NT)H^akunW$`CkVuLrYқ)$,5s=.h)ϪUM&{|j>9ח?eoz\+-$~_ʩvעVA_ү6K)H h*jj]9}}UKW>.,{dKξjd#7ݹd\o*a`#_fc >x_҈* nk.5_Yc~m)W%dX7#}p#-230h9e'T]|w2 VaqI]O2 .X)ʔ|D}}/nkܭ uLRؗRwӅ1?gSn%]0xǔUPpY&w5fT&8N>5wS|+bŪ)kpK{^89Z)^hYC+T)w=U, FizK0 #&}e,JF .zʕk{>Yzk/@`e8dKd;Ȳpp3DlM= O:{بV3+.$S]V[6]!ޖmDWā2?Nyeְci3m s$h\ZNǁDy`׋QδNFS)}] ?F$ɚ%&UKgXr 'xw7bzd?c`rf܋ir7rQܳb; Vk*ٔɯZd[n' $ G/w췁3nbe\4\Rҹ= 5ވ'b0MP"fQU*ezt{#50%]M.X'[cXFEt5 0JޤUm(ga `ʚ֮ޱ_/Fy7[Cl}Xn `Y"w,heevO qKP׮n 6gyi PNw4HdTL2` G%zc+=A}z\kGJeWd\5SO?$?AA7`u[n^ʺ`🎋\ɷAAzƠ XsVLrqEֿWr՛{^ͬopI@.ޖ,o} UnU&|@~J]i+1V&.ܯp_Ȃ1w֭w=b/h k&4RCvVAfvPK7jnKgjp )?l*d7):Ӫ@U%TUSWj!g5+f͂+DJq)^]tz7ʭh"+ɪ&YuzP~ .C kjO߸m,L yވRp8;Xr pa󩮔wo3iJ=%ݸbU$s`zOb君ilg{+;h$28֘ݘ3lAR@OR*oDa.yU5ӂ wDo`?y~{ۯ_1@o!n(LGb "e&Jd?؀,h"=ii4=N] %KTإV',trF}wS2v4} 4O'R`tdJC_I^oEپnh;)I aлj*.[)Ka@vAo3l1wqv÷䢼)wގBdM?2T.kW#&ts`*Ǟ}Q"l)%*rw3ҟeV#QHĺpu8[ l-->nw4S;ɶ{)Z}[vɷe5{l>&.ಾYb<`F@_cUKp4X”7Omc7"l΀f^ZdbBʕu0$pX| L4Y18YH`ܭNQy,vݿݾ޿PҝbA7zTw#cn ˟2,}.FWxo@m!UeDJOѓk܊UϱZ"rӏ9KUz&7_V#+)za n Az qQRU8"SkN='FD;; -mynRZ&XFRw Ibw<|euΚeaT>߀6PM-؝*][eCzPчsK{)7,n#@QyMY|ܿ}p.6vۿ+tZ %׫_*7սur7P(,-0k?틜\9-Mt @ )0ULJXR c4)3GE=ʠ}頤W;BH%e4c˱&T^)țorei}*41dTp5O"52tVYSZu$s&n.^2Ӝ}2 VAQ&;-۱W.6UedJy9=$ ejg-Fy95SW?~:}Q&rcjlc\#)8qu^jcnD|ܾQ%\'+t?_)TMەxF6u6YaBb?YZՓ-W~l-F&Ÿ @p,ܙ3W OxmZ΅#[WZ2V@Z)=X/F.z?_1L6DX}tW 1$E;ML/nYݲzr-5vhFGk(tmwA~tPVs2.٭xM;`ǦV&[:V(Xӂu#ŷʩi45R~@EIe"l ފևYKmo}qxo~z^xd!yOķ纷2X镨$>&Fh%+ sSݻ+|cKV"+ɧGW:,NYg ebJ31}q Rt29@Z S\___BPʯLGW K4`¦6)^>3a-Ga9JoRچC)nhm;lzDWL_~>tag ev&?I[^eZ;~Q.5CWjO۫2ͺ>ͪ]65.Ǡ:SF1I٨؊,pzQLzU+C#g0ʟt^dS󕤕 Mɮ{bY',Yݥ`5ettԺe%ح&·CiFrOL۸i3j\sP4|hE)\:42j|CK)d&eyN˂=+T|4sӧ~U3~qVTyUsqSR_oB4XnA/Aw7EY&ɔ2;Vyfȴ0}վS/%:V^Jų/}p:4-XeQŒ8?Ԑ}4u)ZgpzUnRNM5 S+kY{+[BaMcL- Yn/8 w;Ƴ.P7Žw_>y,wT`C電QnAo9Ds*ȁV o,J*pN:Vw3A{Y0MO2'rV碌th8%.Cw+XX9zO[~IpVo9O"VF'h85BXauP.nҖfǞYqk`2ttKp~,U}|n7r`Ɣ 2<_G}hS"*9:9$s8j U`gqR!.DAJQĮ\:+fuF=Tإ$;ݝV;(]3=Fsrf2kرi^)XY(EYnX_are'MGXHxg'J 09q퟿@q҈1{"GBޕPЈ b;(qt_44?:>%8շ#%9W.5VW|)Ƴf_;⸩O?mAw(V)f 0e5v5>-IR[4">m]q 9+}j#&0a fRy ̂-_Z \X?o]=KuWRQ5ϴlMɦ XwXYeۺfjR\i%@o*؀|uѣԤ>*]PW u#rb:F"U8kaIV ngWGv.rR.mݔc *{$>Z)Xe2HqpDvԪEo5Rߋc _s'?]QJwGaZKP-l@?_F+aG&Քfp7n_:{ጽt\{nylfT`kŗfEnJJ8Br '90:L "_Äu3b\-Ǐ~oUP\c CJH=YRj&1"PM5}c\xE4}+= Yu d GH5RX sw[K$hkE7oPw%g[J,l€֨K;CN^,8ȣ݋+O0M;˃1O4 k2v$ 6rqտ忭fR5~߿@q$Es0uCHXGnFѾbeK|SӔ۪cvpݗs(sD:9FQ J(n=` IDATp8C/ٿf)kqkM-uiRGF_閦TD=hQ)*OfACǚ^BG~FƕB]~k$&]u }䊵Y2LFd}@]o_~ve)s앭{5`]"UneP*n2ʣ#ymw`c7ekiDqH׿:WEܳ:SH.V>rgre0k;`q~ʋ΄euϯPaV82]+VNʂU}VJlU+<p+w/] `My?U;rLDVh ˱%t]H* oӿL|we')sNnK_u|eXBt+s 4MTn#{[!Ğ0ʀqdNc>}nTtAmQW]olxcCN5Vqyan׼"'s m=`S5upg־n<1pV}˔Ky5Mv2}A`Gcy}|ǟ_ >DܗN#?I 5%{T9gY;KD=bJ0.yǡ>U?9Z;s DjSD͑XY8 z*X}V&`fc6#*gj O۪qq֘/zA![g+]g7߮ǤY|sWMiwǖƗiIWe'!Φ#ت~U[ލ0mjIX 8b^nZ*Y`>ƾZ0=]0~{]H&bJJd4喬鷾D*jqm]j%*ţ9ҔwDa ed*m+)AS ٪=&x Mʇ;C?gb݆&е7$tΒX8]j&>IA;]ucʞ1ӈ70 .q+ S,2ȭ^Ct"UMi YLSj*5f\=!^ou*Owac*жJ"fN(]p5[w$BXȗMkk߫v J҆bw!P_Y~1giu7v\n_]r_@JMS:+H}P`e=!_o{xi#hdv5tguXSMJV"dx|t}n}G/b2Fh=gV=Ƒr4*J&.ૣ~a{tEaW5wZ(s2chשIpmQUFp>OwF3Q(Y~svOgn[ޔ(#@  YXo ^`L^ cȼĻluR( BPq؞uXDGź9\WR->ElKarE U+L}g}rqP( J0m)||{ Y+ԤN 0GqyKWn!d5rr wL_q"2yGRttQfa\&௠Fnuaw( cMif7,LcdH4`_Ph:66ۀմXIQ,ʃ1kX˚e`ydl%F :۷e!W] E&Ó~tAb .˲A(/D(D訍fD D;%6Fft+i@v8q%EQЀ jGg K'Axę jfϜe Q!n.\;Ek.go&"3 NVȐnG~ =8BodRi&~tQ3݄(:i/~=WKjP(C׮tMDDemY߹X-ڦ?N> o6>[Aq/$/(V.*ePSn) e,@X򘈨1 {\+Xaf7`*Qb<|y):\0czU2QPߑWBc1thFD`p|-)kEAq5>1|ZwʬxUJ#Y4?'P(  łYܻG]ijwۯn~sS(pL'(5E@yX`ۓC&Hw=U-a0T AEire';rpHt̋S2njtT^FkLL*+)ÆXqhQ!ap~ лbIH7T(J"2NP(Qwq#*m?=]`ۢ#cZIY^\VD~F`nGҩ$Sh\!Z-'ת8 <σ[ n1Sw E'EX4UЕ)R,D@\Th1!*5xֳ;A?<+ '8@ӵHdnif,NR:OY<ó 6gB:KBK/B SDC\i{;r1j۴Χtߗ)to1 |pKrHi6M.1.rL6R&0_"2MUyl*+H)P ) **+e)Cc_u- B]zVuwRYRAa868[S"vk2t)q,J(70u yF[}os-^޺OṶ/Gym0s$u!cغ' [jOp*h Ȇ>u)L>ڝKj']yfu=;Nö́TK}gk5}7VK+8b:l"|szD9f|`!UUfr?iDp"QcFB"( f:PWW2˂m1 .]/IHCd:V17)Du6e0[jUrdGU>n~O|!jpk7 M. 3.trbJJ,[2KGFrCdSTe9bk k7s`I4wHTпx/"I6T@d%8=/ :F{Gopq+pIE}z?-$8Di Uy>2%.+5XeaK፤, Dt#7P-2}0 +ҥ܈V7Ie\6Y!'RbuQ3 FeêOC`ئ$+]8͝`9KQae`*+s ꕉq&stb/H}DJ! #k뤨 ڧ B ;݃U;Un0쓙PK)NvSxoyjU_Ea6)h5Pļ`)s(j[x釢|jf7# 8۰&[ /ڊM+0bD#W7F {(L(&<,-շrABP(-~v}_7Q9AwǫwpUY7`QỲ1Wn5?^[֯cR✥h8"bz`yD.([f8]Sځh^"3p"ֱ8v e)fQ!]be{Ǐ+ȏ\էgO&b,ٍNm3MF ]fW( 2z4.m>>Z] GRip_*MMT[^)Y{;@z*j:%9>L%Nao.=U6|Lb54aorUt Q"⿛.E:6//h1gG9^ BP(j2rwg]sC8mdu{r=0/]Qnj˯T"`?n1ƎE_ 6FCDlubaXmɴ1t%.pٱ$?֦gQ.% ,68:??d.9g6"A Z_:TaƳlSp!z!8P1>1DE=tXh>WD0|sٳHNNgpw!D*x _&WPر'GBabtg+͉ټ\s2#XGJ?R@/njLAk#]\Dt `ph2 {8(Ӿ6DtZ$ӲWhG*V(0`Z_Z̤ xR%<pOl! }|wCIk[{/˳5lp%&H_s|V%vNMČLg/iF(EJʔ4b񐛝K_rmd(YSV(Kx"R-x>9#kF}-<- TAܬJ6FV BgB{APX8jOO:)u{^{zxwٿ^;9n(Dj6 Ab-p|% "R (B6:VB/c)K:DLhPƗF;ũ:rMG{RHQ8li+ƯφkAcls >$`: ͍wkˬAzQQ(SE:T2P3I`((DIEKlS``d,_OQh_ @*(YRw3 m(q&\"'fĪ#>><%I:y($j4 בArSY=nbpDFX|F ꭻ3c?cfwsȔ46P$ĺB){U>'Y>=py'~HBQ~TB̊F}?e !e&3â  On}C/jDOP5(Ma[\n0xTQ|rA;)<}!}APPLT'i Vbj2` $3-Wfm?¡Z;몪j ^a-\L3͓B(^Ӭ#v}oMyٿ[mQ,do {D xgI JWRBjVLJAV /ER+J=LF9wz3: V= tqP,GAv%֣p+p#&TkNJ+"dF|\!Ԭ `)ݙQMWb~֝Xe9{7L.nPRFt +]lVDjl*8Oo*BԥcXI\`2҃9x/'.> Nuw7rvֽ: p{WV|56qWTgkCޡ0iMP;b8mj[R%E|=߾_a$1n ˈ\-)bQяAGx&==D 5^9 (A!I}=U R[LRN]4rEtQc_c}o"9vVk LbwH'ޘQ)W:DWD$jRkBfC oeBO1/#1BjP샕B1SMA+Q({U>; >[^ݿܾп֪<\1ɬDR!lAo8}]A<-4]~ ,(M٭(#,/o֦z(9~A"`UqUsain* qLMk?Fl|Jqd-oX(*}6DK{C>c ŌnP(6Iwvܝi+h7Gݽჶbͼu`-ЂN sE0& U 秂Y_'Eږ'5#Zz/rQ jW:w b5 alyNhY!/e&*ZK[>wk$ ,w|i\qQ VE|~`#͖ބ!^) L%BP!ڮP+}Wús}线x}s#u5e79(nU{2y:|X`ŬŪa`{-VhK\]5&"E]phg>AGa_[;Kj7hx5ʤ7g\L_ع |Fgzg)R05,=) @PLnhj'(q{؝|ؾ_i[@@BɠqJH")p'QJp?@q^xEp!$Rh?JBr7Bp~~#8Қo<yF: uO+wGa+rl)?A|ۑUDcFm}ovڱ[XE뾂@ZWZ2S,5b4Uja>e]f=0taT[>VA,rVdQ,v}>=UV "%6w5EL[I*"2"zۓrL,<0dʵ JQeMsj"xO Aݑ8ZTW]LexɤTӗ N|gE bȎIhP(JdN{jDeEt/aM@P8~FYЯx| r`pf@˞e*hEXEVDQ-d8n[@ |c(3 Xu H,`A(|Sr騣s-ɤf붓oUlY@] K.,@0J.bE]}*Q NQM뭲rh Ep-fP(2=}۵a{_./.u% BHzܪ{%f pM\Q{&/*eu'ղ`Hx:,_#6&P SH,+%N߭2?>x|Dl.'=I/*&P(&VX$V=Uѝ÷_>KBTpBPlW$P07[죨S 25#aD %{,l/؂iGc.;n6 ^--3X>x)E,u_0 {>!RY U2}':^-={U2 !Ed,EQj^ Eٗ E1MwzpUGtV=\A{GGUD"lQNj)7J,(:`XKN>gE%O@7Ǻ, m5ӛ`:J!,s71R0 =.\1*rܟd 2LϺ"Lẹe(66a}35gn},+/cHSY4GH'"|6yb>,*Q >9Kn҆X,u]\:W*,c;Ywv)jӂ?f#%ƎCzvO$h9K#N9ִ?/ Q2 BQ ^~uP(慃u wgGW)YCL?-$BaAq>,U@:mF0~AHG^fdr\AeOx,WA!,³ˏ'?M[7BO(|E@ Z| i] m~t X9y@ B܍ˋwcNZƵ[GqMx!u3̘lwBfxԊ f=9*H [*PwW_jDeEXMfd;lbYGDP@THSdCT5)O/!(q"0ώ/+5b}aMЯ  Ce2¾%^ʲ(_/467 1ӛ4 D]JK&򖵔%qYN񗸚| T)ξUz֯tS hּn2Y 5.to4@&8<rm^>_af-4 Q?"eE1PF8}RJ'eEV%7uxQlg7 5K/e>f) dc vsAw[5od.7]ջ/Hz5/Cuc B1շݩZ.wV ةwfY o/32ONPTRNHl 0pLɻH@]w.2?-YZҫ:q1rj`oc9kRԱ)JsBvkcý3p!uj=@/\kR7=o"0\0€nq ǓsT 1rWXv%")HfUC]$&+zvJ E2'N;0{"Lɢ m]=ZE |q +ffp=iXA7Mx%d>hK`-rYjM0+;SdQn^Иqha<-X:+46͆ɍtY*ڒĞ7#%;r+O7*[E׮4HwEQo"?RF$n- #cQC%> 4kt0x^l0${$l:"zU[Tq(3Tkz6*˜ZD|4\W;JCHf.R> IL;|&l5K)N4MhXjj⍢{=Һx) )\-VkBNvȀ2oR]{`p.o.1xXǞt'KIĮ4ZL ' "7WS uJlya+Fnu9uQ6Lb.x~~GQ\}[0Cn(r5wY 5F ፌ m&M]!_p;- 5 u/.?g0,ct(W>#nTL?u ))=Ͻ۾>詳C)"}~̋х̳[{h< Ϩ171 հ`(8W^⋲᦬QSg#b2[oyHi.JMN:Y?%W\pdt`l'Y(lb  JSbBQIk5 膇5tqdjdև>6 tYv5q׈7jQ:Rldm@3y?Cg hB[1/H!l}Yi켎㲾4J>1|98x˒>RB+'Z g*@/V(#v}=\A{|>?NE ]38Y=}~}^n>YOȳ_fmFOQ" nӱ=HA6!H=i;kUn Iwq%臏C7kDc)8>]}&Xȡо}nXnn[+08+3@!@%:n7J.[ sJ!V곸={Eܢgj=W a,>YJAw[7c "lS^c-z x]U+х`pDdŖ͠Ǐ%a3R0eNڲytq6Ҽr]3(jK)}s<P28/7E:AGF2*)!qc \0RGʢo"pD 4S{vS"e0/go=B[|8J,s='*"btP(wii#\69^w篷OfAdP=S(*f[6y)rcϏ$퓷g]&J6рrDUR N2]gOGdGjsw_I[ VQkLn$J}SaUs5JQ`q˃U٨rA;6OZKg0Fx-\'T$X?}i\@ brAVP( 58"GbhսEDeβԚդڶ?Ŭ}j-!(fH*úKZ:c:d>ʓ/=B)[޼&X-,*7CjoaA"0;{ bޙ6=Q'k2ӑ;&Z#  f5/!֭Aytݵpf :'S C E'1L˦"tggZ{ =iηrZ9"oߛ[•ED=S309R)IO~TJ7)9y ˽ \0[bѾ@.cHcGA k>lyet vĨ]wc}oNٴl{?ȤW;L/HZ &SD&ϾU~Ll@J)U*_r36c?@3%J&A-J3c},E僥qdבhBZcPIogkZ>Dܚ< EFs؈Q.)l5 3s$V3V[Sj&@ld]RbJ, 3-ڲj|5ȜrqT(+/twD PMKݮv5QɘGMX P, ]~|ovݮ.ԝ=yX5eMvu~|zruBV2!}"Dz$(ʫqj.UCܷTDr,U v1c-e'y fbbJU> T K{!bH^"o3 4ċEJXXRv\% "zpQ6գY\E؟cPMWׇv}ju)BN]V+^JnL'M:f*a bOL5qhJ2-4ݑ@AU9dTaMߧ(oM8CtLai ٣RtD]3ApLZMGfX IDAT-ǭp%M!Ow>2VLFc~lEljB?0!6BP9tT(o;ڟD|>rPqAǫWכoyDAmAY7x0܍peHJL`8ȆH "d5lA ['-foGgb^h,2.ag2* a R: =~|8Ur;}(u9,a*KBCۣW )W+|oOʼnOv+BeqhJZ)(Ase[0h>|ZOM*h*Q"&V"1X)4#d+N6RZZu)yl։#|+D4gc/G+Kʍ3S !_zw%5qoȣ bAWWDōo%f7yZ565,6(ͳ#24UoS@UIX8sI>X 'S9WiDe6tm7=ۇb srﰮ2@#ĭzY]'=q/k_ k s_-|ҳ% sueDE$kDizSE8&݁*E$26j<),p}Rwp6?d}mnHId,} KҕÀAUv)'|Cʏ ˥K!B/SJsS#*mq}H(Rĸ0,ݪOlUyPYD,? ~d!V**%Q|V~vV`9p|&l8삔|dކ+>Gj1rY@B1kۣG=^nTb0趺zxwOo?/]w?:^w .ub\MT R|Y48D2zj%Ȟ{TY4J)+Ygkdt18bq:I:QF *iX#nO@*a*SX#>F OOS` ΀+jK沑։ wU(kV׏׾6CsSK2cM V2:\-_m~|}&cHɦ_.nvYǰ`8(`cj["d>q` s9QKKy{u+HdA | 5q/>a2Cq14)(Ɨ2MHɚƲ+e,h$>1eUIpG{*7q}q?HP:I:H:sCWtUT(戻_mծ\t__?,`*&]%%%>X,ۣo^͋\寧¼*`p2bT:sB_g\E|U/bR?'Np `.T|ni≐ *}1Cߪ,K! ŅBQajP(*04Z'-fspunyѯBPQ k4"L5[UeT В[S< #sVկg V:}v:2c,ɞ97эO׈L,'>\~3ϑRLG[ח<Ċ3fv&Ew#o^-7+Y;} μeu;Eu`L+,{zRE@ 6ӑ)+Kj9N15iﯿ9[j7W1"}y߇&p}b"C OZ"di) 7 )`Yns 3@4v+D Q~ q9D4&+oHNrRKd2 U: h"ʕ0nD=ȣ JbU\>I&Sr{ Y"n TQk\)b9`+P4L:&)n)C<;Li`nXkH0\62I\p40X[H}cշ Blht2Ō5o6ݼzp[ۊ`wWy}/jL$L(٣ɤROnC!P( 8enX3☩Z^zGtGA['G/\9F#rC=5& "s3%bAheLQ&8>~6XεS  BPԍo/o~ܼxp=))怽7y?P6ERaFQ&qey(d;Xs@Č*KQ1zkwdOz\WA$ūUNj452qc{TX%.Y=>RPXrKx枥lb-XQaT_B5FZUz/٫Yz |xc2}P(sT!BOVg׿=fB`l?^m*&^r؋Б5!2PX?{8{nKW_̭`b.@E@DG JlvFQ=P4G?TV% q^sl bʀH +"8\mvUފ;VCv5x 5(^)]).t є=j}ӼBXH,)H 6ˍ'F Xq<fŮ8< µDi"S?XTHB491m}}ro{#)j>_^ yGܝ}.)#gPKDuB,+?X\ VE<2|. *}O-`Y9؂V_l}DbmԤxi3SY((r;it)f8/qTm3 e8Q#$ålgbӞ;(pa?7\@_#((.ФUMmbZV~mCR),^E_p_v~{ԝӤ0W<˛SEStiS=d ҉O \i 0:msqwq>x Na:MA5V2[}()iK.XKWNp,wDO, ߤHABl;\dd9Ʈ 6RŚASM2IJcRpdW͔;j<}''"G:)Mo gOձAb" 6OX@=n}ﯿy'{q͏734 ة+h(Kϸ 94)lұUH$<< @#MDpjGz22u2*L@Bf(Q$e1 fUȀ+OqxKe I;bcȁ_;^( ib ;dO/)K-C <-5 n!2'~L*•{_t$ \B5q݉/GN֓eFD|DuU( .4VS n~ܼxx;{oY1-;͟+`fN$J\)jޑ 2# -w=TWZ-*žEpeX#a*gGq6O9+] $%UwN')^AJ o*isؼ()Q*,L7)eLr 2a;/d09gDXFQ oҁ>?:X|)UfgE%c,S^U_SlVD8%=fnv˧~9h{׆YSRFY#_M-ƐxsZvAw][(B` v0iLrɵ}b2LLJ\[T#SR"=BO)JEiDd_Q/"xRK@D4GqqFrԕZäk jvS3[SN+%Uꔧ!jG燑?Bi<`tJl'³2x8كG)DF, (#2BLC\% 6˔Et%A\tf ]΂[kTsP(fhu*/!qG|}y>~W^kYJ]y~pxѹ_ E&6ruJ犱4Y{R (E̜8Ė!`iA1ъ%=qlhRK hp b@+;ف+e/<KC:} "➫P!|Ӳ4o7{}?uwt(Qg7{Qͅ>k~$P(QyI|+R$X'{Qa ΢67OĦ28XhC=dElDUxKzEҵẽC*«O SlySU0ːRBgBXp>Uߝzx/*[͏n.z5j"U˦&.xfKCϡPBk4*aZ'q`$`2 SJ\̰ٞA<kX\n 8fIC[(@'o--]D˔KB 0"`z56Ac1}r)%2u^X0R"7t"TnѬWÊEPT5>ݾ|}sl~0F"~@R3)BSc&wtUMڪ3"LJU|GSKg,iaHdK!jm"ґ7,$LL۠uMyw|SJ7kP"6>j>Lk7xKӚ׹ºàmO>ղEngqG&jS2S<+&T^S>Rm6RyTXU?_>;{ g<7)g6 K~t'͈05B3#hMtuE:GљA=~m@yPk6T?D|(ij=1sJ- V)M6֯&xK]T:J#[j:N>%?!mrHԍ03ߑ1H3ZFe-L$ "pE]NV}}%Ϣ<RL)]?ZŊo ͢ +Ŕa#-_o4 [<(=i%SRZyOvg;&V(>a߼zWIEEm>:|}Dđ]PIqw.v,C:1w>L{IWD <]LgO˥RT wvY6=Y6DOlfE"25),uF'qw (Oѭ :c<1,"lҿQ+qMV \ "єiB%RAB} wBl~̃ܚ,M #od{+W(d5aU-|U&> Ŭvb_]:"{4u(MCLoy\mklJg /+Vkrbj(w MjJBoRУ,o CHЇ՝u I=|o^5BP7N~fkLmԿP eNdD-ݨ$Rkf"@.xHTd}O))Ǫ5] J.^E'(W쀸+ nNy;(@ kn}-w_{œ?^j3 (H&LR85W(8CmT X tv.` )/j)2HW0wpvq㲳[JPG9Ob<5MG,+<| m`AyHN{-vϲQ,۴BPT]%%>rKv~ۻÃw:v{Myv盿k@m~4^:sc^BG~%CV)̈!ݎr5jە0-Cƌm(lpg,X+1`ZgBjR+bJSC=%"-l͐ظ"=(; p/b' Emp:jB1S8FE/CN_?ZvieŒ14yz'}(gy(I_8;]sN>ve~`r΃gm@e%I%uƞlnP4SAY}->~x}2X}kJxX Mi0醳niؾx)Q}G0RvLn+!D/`Hz@'#o0'>)\~B-ݯ},^k Xt\MjV `0KØ1Is8Uזg]o]uֲ?qmaטKnkrɵן?]:;lR=W?_V2<.қ@ń" */(FOz˹LRp'{ RZ[_!FvS{W%AvRPFi6;ZIb8kIas!!)cW'kE 鯀S+wwUYQ0鈨3 u'0q0e"afsU-'\by2}+i"cUQ l ͯ~ck/o~xy_຿oh*L )T(feL-@Wx  uCUwɨKO'Έ0q|F!,r7a(e#Jf~2|ͤh5 IDATd tYLչ#z$Wz ;>y^멝.U/6Óɧ[}UF:Z ֥6BP(RFbP(f Fusώr^f3\?qw:t(fMl7 FTV3k˭4LJX8X)%yD^⒠" B"* @j^.xI jIFNJu⛾ر %"JDuKw}@(OrSwPV9LPND(Fb,\& n{V'L'—0ȶEUc{GE9 boIPHC+[~h}o}%עw1Bӟ~wݼ= Ac!"hO/7e+B*LG?ж2a<9+@%.&5/i` KIg$.HFDh=b)>ROJqᥘ` Z|3窸%¹4g䖈4k %P( ×`ne;DB+.4sכ.6O.o~/jQ^|5$ "yV}kKEq(ʗ:f76 0<;G]]u`*UMȀ5b-dg㚕koRz|4_H-6Wpӛ,qgЛ5p'iFPK_8QYB-3țCL{wCe8+h["7 zg#K3b*DTgK0GAMU98;öY\r[K.Zu-J9_W(fmO6ӎ+ օi"!&A\nP*Yo:>{`u)bΖٷ7wqdž(dŨ ׵}~v`娎K\J`c,ddZ=3&#FB F/n4kC#.6)bPBP( ED\rwL qۦ/޼; c[Rl|,J*SZ/{VQUlSrWќ]) ; s͝;Nӧfy{82.*GA%՞R pM>b{\hEu}T( Bbg1Yڦ ^huc$7Oo_b#*tIDv% "9IY9 v@b1{HN*\L.5, Q})KHYj_Fus^9 xٷE5)K/;^5Q{.E#Qڴ(1U xĕ\p;8 FFJ>4<>~59fDّߴi`-(0t]0j>QR8q"ȪhB#f:Z4)>f| vǧQ`7^RH6G r_W5=QGTvP ;SntAWag:ˇ7rujt$bcƮ=x4bM!mN~'YjПe> 0>t]se}O""(YB|,(Y(~3qXq<6N?<⌔vD"A \q 8t ^:8W-+weN?wl͡Qc &ly6oxQ _xvwJ3!mp/fzkm +)q%g䢏L96c\6V`k _,ۑ=y>kxvDDd|STѢ ehY\JI}6Uj}PE0ZK Wjg liP =ntð}qwoOVtXU,?eO3€wRDP z-QK|YTZ^kUI`u~ёUޓ簄nhvm AEjSQ@w-“1|/?g2WMaaC+=E퉧CY@ F;|V"N >t7+(Y|aJ `i^;P2WVRdZ6$Iޘse}wB۪槅<+B/żQwsi.v"[|n,r4ﶯo/ypAg_Ϻ#ͳf:7o4'YKRdHlFAqYIF-iy20p)KTM3M{ЗHSm2+| xK"S*] Vhc],"75W@:?}߷_JٖWc&"o3u5$Rr&ފ)Lɸ "~c5RƕT?) FPT6}}Y_4]:?-kqOhe44퓷Ëߜ~1Uտ<4PSAܻ fUg+8sdU-)YJq< p&FBaM22ru):J9˼D/J Xu>a7)OHFO"t7ߋ,;]h@epa*\5t۹Q}V$tvWE ?0.lE֗)( Os=BEƃsk]bQS2#{7%Ծ㦤9պ3.ӴAĵKU8"h{a2 gLf VSEnBpqP2{1O$1m1+KѵY6\_4>*Ye'$WJY5#5L 5տpk3fJufLx ~V(g-޿\kc%qPNv;^mc__e11˛~᝱3kp&@֠'rZjT,%ў|O݄A J93Yk$q,A\,CEM!ؘ|O1 bZEc`JRN>Z=P+Y7[\1 9J+n^ST\6Ů&s mjJZZi!H֌Ĩq[}Ebp:+ \+ub3\uztܦ}`N"h9L%10~yp[}@$fwvܾ\l}V\Ua7CM5F'd̵+yk (yՃyqtj-(w2Z|vwLe;9R җzEx@?rjn>,N Ŭ'Y@.żmnfnWJ% l,_Vt:0<˓ooGgbvD>%5RFk),>š)CgEȺW NNǧQ! H!sF^t•R^)XNs}-q09t#gd+ѥ5ۉ N_p^vFЕSB}T $G譙BdX7GVPD[Q?mXd,;\'#A{tz|zN>uy}*ӧ>Իz4QPXJ&(m>AM0/q>({Cǘ-j`;$(Yb=Hģ];Yxq~rVRDI }*ɤ8RGK쬙}s+8h}:\xtDd!P`6W0WYut SZIK Fm֑W;릅>'GBI8()HWOL!E e+yKYsWĴ#6+TP|mR5E4W=^7;6#C+` W!_,ך9ˇhe X5k[o_6s}~Ks n)3)R2 =}\*. 2 h? , efLE"<:FZP8Q\.~}M7؈s`GpRdsZ+KLB6>QX,qYD)q> tn*QǶ$pEб7ÇrlNpkXoܦI|?o˛=T#ł6뛟}z헗qs  |{ID";&k9[DERȘ8JzQWDec)^,{uk얡L @eebJ%ag~E!_wvvc#9lf7\\vThn>XQPM$ AY$rx*A 06q2 cXT]+ܟcI{޿bpjcckB-/,-%.ˇot.﷯˸_n1WA^q63I읎h"FMuX<;PI, 5\QIqG1ahg$ښ|޹ae+(ipIw6%MX*4qJ9~cʥU ).v)D+yMѪNW0qJ.߸ϗՕG㱖WyZG8 9(H/ZN\lQf]K \z,_2:1ESX2xCzz6۾vK;)%xq"VU" jRq@5 .ђŒ"KJ,ƫИ q#eeAʠNYb-KIb2@8|Sb Lablc>]O`Gm LIruIefމQL1EN H}>V3Χk*''ramvs*j3 ,"1xV,( 'aA^Yp}K3b"v;LZCKZz67Oo.On;Eb߿_)5Ob>}FSeYET'npM.q״o"Zp=(9T`^uYRn]op9: kE._*xq7iL. .{.?Lg ǖ d&zӍRShJ|#M5A'cvg6b3<Նbɫ{)FC氽nwa5VĂ ] 菛Phe0Ml/g7FmJ恶i˟npy2 ,'|~/.>˖  Ɩ$zD%KA% @|_N遾qj HQ?T-p=>' hNwXh[ ]r\)v3\xٿ;뮘v8|6UsDA(ޱJ48dmyXʂ)m.9k%,O]j0X1UqLnEKDLĵE~A vDoK- IDATe"v~EŁ]M$1xa_r)DA_e_*-5{Ќ,6t]`!J'Zu-`wY/˕YEjYT/Š %֟Z RybmM[3"2Upl{"Lכ'?_fxɧQ:c#e!9*KI/ƁHgEPOO:#!f"91EX`fn*DĕV?uqMm6a{jqϔn+n\r3mrm}qlgQv_n_?ŧSz[uw5A.Gf;[UpGb.!xȀrd:_G;u˸Ȁ]IO* O:+ \XZܐy}NRr "z X;K@J!5\]n$-T2/9ZFMmkL_jؒRna{+I I ܂w[֓֟RpvC;3UNOڏz񥯻bN> ښwjUwF.n[alّAfP߉ %x@Tᘋ 'DH#7")#HgM)2JIO@oPL綡LBʺ?9nQ[zSFQ p NʯœN Icre Ets"vHIy(6Yt#g&r|ʽ!7L^GDkɚԌ(ĩSٚm\$fc*`@\5ZBABpy\pdkd5pheSq`JwXD>i^]_t"3pܕGeS[*RT%=5+A#Nr[|%@M0悘p}f}t\K۬ΊlT5"Q]*>3Nb'5R im`>/~b/T$ ]Q)f8+rxjNVgGj.TB[ϻ޽qjVn?o.:ZuAh/{ѶLAKҹCҧgS"Lln` &}/~Pn:1u}߆X0 ϸaVHJ(sXdYQyh5^ HѮ0X/A:txL}_'}P1/XեC$lQwvA%UZ-]{!maep5Ytopq:|}z /o'j;ꘫ %d\l|`D^q,QWl6b]3Ut.?}xK#d579rKćwn ͘NNX cy!`2GRz$  ˬ3.rFQzQ}ܓC^ތ|\%> cffc(: ODpDN9fTJP(悹o>,\z{y;2<{[zKkKMZm퓫awO{>7F/AOOwuU\ˀB3V`Ms@( ޴A)e G) CR Q2.ߨB&7>S\7J3cBtyi֟ª8f.x|r+wx1~c/)D<9+o bnXlv07(z>}[gkXWRtGjK alddY")U( ߋm2{N )'VTYV|(A_tSxX9B+w]ri7մvM#_[73)4Msݻ}kE6oMfӟ.o49~I/?56_>}ӇOn٨Z~0U!Nk F`bX-̍eTxR.k<ȡTЪ۬lu``u|bD'PcFЕF 8ycuŒY} 2u(>"[[rK?O5`A =2V-$R3x}sA>-xMI;>NR4^ :P!7,.` ۮ"]̟nrS=kgn#A-`##PW֔ҹȡ8OQpom׬?Ֆix \E-;/S粉E·#qk่BQ9faha,uYU7 o  !(eٲvN}px v#hE&20L4A fy۽תttWwuV'&VgugN#v`+jwU<$ޜ@. nyKI}U$(Cޕ܏3g3M`.\Oٛ70N)j@07ڪ[s&j-rժpDUF+jҭ6>VgaUJ λa4/J֐3'>ew gN۞n퀫YuYl2**)l!h\.׏.Gc\wlmpf| 󭦊ԡĎim?'a{LKM뿆8n&>|d*b#.l(N&+ɏdeZ4T ǧsJ`{ITJ{鈈"@>]чOY#6$`[X2=N]R+K9]9Y\&o$ K|dQZһ~f)ޙiٵسsT4&X>Ew@#"|KV+'t3S10\kbLPT-)(2toGc9oGރvx5輬Y3I(!{(&#KHF5AEh0!G EB\"Kr"%~};*9r^ "KP)HoР[|I¤pV  ̭ʈ9D!W1X+ X~}~_,%9QY﷤Qe"v\.!3 |;jH}@Rr~*EUDb>[^o C*NeA UpokwVxkȟk >MR:zP2Yb}FpI%7"Z| nJ%"2/_-L\ib]j5ƹ=W+卻v 5Y\M(rz%oЁn $fT>8"Tm9j[[i“NAHQδBce9ύjDk}^Rj-lyP}x5_-Fדl]^d ~P݁kzYJ1堺'  ӧ[;{z4\tXnQ5 ,?R?>Bg4rdUssR%.ybz[AhHiT垻>P$mZEXXd1s7KJZQn2fN MN0 }[:LV#P-nd ֱEgжxF #|q}6⽩vw[(s~r_4̐M,k.wFb:شg.4h0AWdNP=lwdoA| Dz+!V[VʪUUI ?VŪ[$%[m/&څqRO6\Yd 89,ՙ*'㪊i94)m _}Dc49O֥F6oc ?U:XV=F_Wj"l3[5RFYq֞!h5[/+Baiž3]8gUaaѿ/JlB?׼LSkoZiCZ-/n_1i-)ybЬtV^\d,KS\mFm  70$' ۄYyƶ*g!#_??;ˆ>g#;C]8C aݪ,PZ׫e~q5ndfl #Vɔ[}F 5ѵw*m mblB2[xjC8BRuv"qcr3`̴ |*8yU R2nQEi9JpVDF[knq勛쭋vۛ;UBr*Y.bR:c6HCIS4L C7gΖheŕw('*qPq6=>U TһvCmتħdkeP 8:+ Ueɨ^l:_뫛hڢ&`vamP~I䒩P Ⴀ4igë}hL d>oT3{mSEsaZ4V,_Uu5?I }K6@E8#S^ю("wŇK:}c=@InX$W}9R[Zy߲ili=w뜮r&E~<~e& 'dD7t{Psi󒶮8.XemZݽq(_nƬl8WjΧ'\30}e͕埻Xa?n^kTyn 82*:PEyb>O,g]j=lN7HZشRb[ 40)*WsZ9 b+CfTN@=1R[Ue}L:Fm0&vj=I6Y2YbqUo,GDDDte&{3䩕U֤iUe%@H2E3$ΌT]*'ܤ 4rA4d9vl ݞ;0o*.)I|SypLSpȨ獌LߖvCA-Xz^WP߮:uz2F8Y6(cF5kCy?d IDATMbRܲk)gZ:JIB/'nEO9'Et(UV6όqb0NyV|$vݟ7uԦ}'l]|-\[=` | 6MvH%}W")6J j$r_S&sΰu`KְVLi2/[=qʜ. 'Q>tur@i62ezCH+ο_eM[O_cHEYD)iHTgyOƈ^܄LX@fA jqz@,YF$t5QK:HWXD&tX϶[رmJ SL0Ot2l*Jm2mV,jTW=[jj8˖&%]>ȧ !r9/n'wq3 ^yCPCۊ1&l9i5Kd /\_k|P4/+o!!20pd 2Z:QNadTm"*Wzr=>AWXЏ,⬿r2Ws`I Kp 'u2|U2:W`Md/^LJ& ")Z'{>e:"B}Cg.?,O_jex4fUmVSAtA^a\76Z^M˭vc݄30n>J`PM\Ua&j{1Z4}1:. CQ_{vdX;ֳ9Qgrj(p[I8"Wtj  ڄkMB{sM)ϖvMtvӺss?ٳrTrC %Gp;G4iSnS͖.FG!VGK +zB\]FUDj:%L&4SDh[`f$,cA u!b0~Y}g&u!8ڥVHP/6GbZ&8 0'[-'"%*Έ ``.$e<#/[Op!*X$\F5[̖33V <1&U*nZЎspn >m>#:CZϊlUUz[b4]=')ꘙБ){>~9H#a{ko]$K-wCꛩ{ p\E.r**2aps==KpoMW/I_#j:7Sl܌ny4HٖԝG,y0)`nݗNSsFb1*ۣ i!Km\zEـr=%UQ`'$P9!r~:}qvҐ)t5&\\8]+=FӇ|Hn} $Uv"$x-\71[S.Js{(7eׂ[(tS~sDo^3RE1td[q["RDt\u M Zd8y{M7Wt"$ō4z'IB:Uv\Ś Nc񦢯684##Vj zO}wgg|7)oQqĂф3(zJȽӼs 7n,Dg/X\ l%riܩ.Wը~pt=W?PhM lpX5uSŹ-JͮmD _@7Be惿b]`y )H Og#er!/$WJZ) 8|NѳQ_jոj)ԸP1Z5E$tq-9&v#/c)B}#WlNgxwVlV1h1/x(?/ndS+7dYE'7r,7cwu4+RuSjkqd&(F%*uCK)J^ؘHiD&;ss /}A^q΅܆hx?zVFFؓ)E;;k-"&=G6DGw5j 3ETsvٜŚ,*R,g</,Rp*Y@v}dvmeut2d\vU6VrUE:wJLlQC궁dÒ|뻬+P+^:}[|)l܎4!T[n*,a^"Zr?MFbF^D pbӞ' /<^޽J(ʘ1]\dơv9/aVDhFdҼ(&x3n͉[w|F;s霼\nj&XWEwWsi|9Uͫ1&jߟ8}N߆݇m3_gn}#A|5*tܠi}~GgVYq9@ףpt;vli3d,{mџ`QAeF5.8 @~Ro]غ]>QWo(jw8H{jˋpJUk5 X7i2FW%*dE'GDNO AAWߝ|a:- khݤa=M!M:,2|=@wc1PZR\Vmk2%}()O s|!{dn @2c;Ô]A*"ۖ$U݄ٟգ6Q(vk>fv VVr3eAţQ貺J`+VӬ3?IATG~st .ۡ1t92ʝY :K 'ڏ5}lDOT(<G|>&@my eݡ9#~U٘t:&[FdU0n>m ΢=vZH ң Ao""" S3i̴%ҧ>æ&˂b|t˰QՍѼD /FI黏F-v[[0ss| dO߈ah QM8 OxbJjz?;Vk1$H$saPRn]wҺpahKJz=eh|B>ZqVC=:)󡍼/EzssSw9ď iu. 1- O̰c fҮo,&5A?Md7}S[jjPڔqmdlrGl{6iڐMkEТ Q2?M'_Ho?3dwU=tgݛ])i+juWwپ Cj#_\=B9yqz*%luy5ZƷVчWPZ҆UB9%<ꂔh2_m0.FWWE,4M30ߜgW@9LV-h32Vyq:.~2ĵQOV1ۂ2[/rqcMSKjvsTyc濾s?9<q `¶I[2ibi&78h2$Sr*3Q쯚pM `΢JV+Q&u m8@b H8OVU ه> Y%drJj( 1 7aAPqWʟ>f^Yɓ!H@22EJt-ˇ4-Х鯦xDhAPi)C ̥Y|oچM_pv){U}C6Ng"WLcWmQэXO|-<&T!Fٶ^ lZ:vgFu3SG՚91Ƅ++<#l:x5'ˇ#٭R&57w'DXs"5IAf/8ik7ձդ+ guhR_cۺqnŦVVe|RMGӐ Wَ:}%΃pry22 NWz< Cs|+~6ᓇoq*1hFXE$V6>߁jAD|zRuOHCOAe)s۪oXJ-&24V`3Z;ʋRm-тb_>b@ B\iO̚XW\)Kq xn7mS+c&`U?tҐ=aj{MhA%be]~~ w܁RD?>#gIOD$(mj fը6Mwv 29 `XN!&rkD*a:׭qNq,(}Q}^T >tP=5H*̷߭Vf4v1DŭKK':v@P>-2W%ѹQJA{) X2|އPO= DIQ僣ZlkhD ;gYi(BKrB A,AOHbdllHЍ4A2??mm)kn' O͈jO];cwDp*CA꽉^ըgٗ'i;[ܔh[h Sf6vmB5)3f K)H3X$Sejq'T=; eQ?̾.rRx0Q+(]<(5ht&͌>K>p%h;p09yDX5 -qe.>݁ԕ2ֆ lyO[TJB7:P+r>$}9V#Yc^K [E ɖ" etJ YYp.9s2 9?XY(CMrhwlq<#X(ވ+,_([V_s!!{bulVVM7ɁbR?i]zuDmUٟSȖ +UF6Bo-(?t>[ 8̀;vVkf«&%Kz));J6(̱l*?)'urj |DctqT[5Q_Iq0'!4' TنIQMrtΊbI:ȏqC69!5{[馱yMA@)J=@#v=X &EWGo{k [+cimZG\>/1ܪR+ck[`|{3 5dFp3P=S}:U+?O%E 2=HU$懨y 8׊{6x;I3kN5261J-z 5%pbf>BJsU$@EYz[Si}S(*AoY͍FnIV]\|RCK"G" bt&ƺS y qrKbzZWw.${^*hN|aBrqLgeR߳llg A%AzoA E%l.E9!&vS`[loF>Zbl^M \mDrϋ)3pvJlQG/!A;Fc i)[E@BƁS,)WS?ƟW(gXȵDVd'F.k(m"IF4X 6R:J͋f'[X|EUq}c5;jz EGZ%jrCmk۔r_BuI8۵nF@deW;$IX-;ebBhB-VtQzph1lrY[axԢT}FOEn|]Ȍ%" 8dg,GU专M90M2:%LtpQ:0J'A?PJN Qǚ,~u'2I/[,bHv 4թUepCۦ)}6n'UƌG!hX'liJ1lgmuq۰:? ϰ7 GA3-g%%a3b7,ç&=c5߲#ʮ'ɲt<`3Sg':Õ+"@U|pcD/S2A] 5" kuJIk4 [SJ;шy ~~L#2XfMq*ϥ9x{_<D fOaAGWtr^}BqS am-1oԟh/ )Jރ͉:R =2vґ 6X}{"_7 'D0&0pXv@ ® ԗl;:K $o#^\qTy6*C x 8Z[s0i:25ş MR2D84EX]^^SCAQ7N03zigZEknDp#t#""Bɗ_YR:p xup{(03ِAy5}ˏT8:b_x{:τdFV=q#9M%xpAF@+{ѥD,wa[^Nmms*[4_MѰ:@>xL7:]$¹6uDt:O2̕ӷb$]v (Tytlϔ; jěќ8k,Isb>pgk4[K:V0MF S!I8[]ursTH/Q27)tVjЍbeշ=B&#"P{|&̖9$'r#B%M9:-I/~VGGkHmQUaB/*$Sc+|Ne}X;ImC͸sőu 84ZbU@Z#mwx< 2"eA/Vy6MQ7|)!\ `WD# =YlWk4B+nWSBe jvUUctq3$^.':yN$CeW`LJcۚqF%Z>@7B"""=_.i\m6{DX!'+%Y`Ot[ 3^?cSF8*?j[UJ"M `O[Ӿ+1l_z$ ˲ܯ0Xԑ +&rvkx' @ȨeErr50myϷ}U.:^w8A]oUmb39OF>}z#h@8)a;(M-)HiȲ0:E*mQ HXwGvsf9XԀ.w&Ķ-t;w&so{" b!1ڔ?!ɾzZyR of?Zy'CPIhAPAh[PBQI; BQNvwH=7fQnn~-hy˯,?< ?5z{k$UU|+c> v٨ Щc\䍱Ậ?J̨f WD=yRk؎+zK0;z}V4N;%s65 FO2P@4vDTY6*i.=layZY@0 Dzfꎠ|OoF+ 醴w09﯃q!%$M5Q>eI_°J/;hE;؆l2vPx)vPYUJL5rll;ׁUu1IĴNRw. WJWl!,בۊҊd~؆hz;FW+|W#""̰ZYξGGgEDJxW^}}#2f!f-f!![uZ\J\2+'3."͖ ܿKĒ=T8Cg]g!!t# ݊1UsG)fP;e%Ꮇޗ̓(z hҜ)rH Z׳I-+۠XE֖Pa->7'JDxM -zT@ gj'#JAԧ 8c -64 L*0&Lkp HX#c('%^}o9""XfM`bL$WZ*S sGDDDpXw_]3Mթ!vnR>o Vw҉_otgPD6, ?nI_VDAɕB^kbzHEn ?y|猝tAJgF^h_ i6Mp95;,E٬pe;SEV ;v =~ p='FBsK˔7 ;!ޠ+-R?} DO ʚh4/V#""T|JT1Rl͗=n#"pW~z:ύ\{Lf7w } EzhB.x_Ĺj6}r8wӺ郡=x6vw8̓i LNn-it  ,tLn2jvV wt!H+GI?GjXv\ӧOwWɪMρ˫6*m?Bn^9v-3}$k`' SYAd_R<ˡ%"Rs&{G ϋMsaEB&`ٔ4DO筺篱42ۊԁ5}1+Q #"́a$1?o߽IߐVnnq3Bw4-\90iLLq:G&m"ZQnֵz+Y=8^H-@<_۶UlFΞq2}qfHȮM*H?VF4\VwƘƥ N ; V(V\nN8m.[Gn|@%G!֓jWʤ4!y#\؉iReTVd]Y'18#t487-4 LbTfbI0n;zkK)FtՏXpaԡ# aGG\#OMvLR+c0Dj50~߿oO㜊8RﱵpVi`t^i#e#M. gʑXR(0!d2jIoQ?aeN㼣! t4oy?2'n&(ܼhWooyQG84f1%㰀XHL!E&u]8Vm |\.W9&9X:S ɣr9hϗCe;iқCXÎ)'%_pCZ|mƋ{=}O6Ӏ۶F MͤmiyL1kdK5#X ۙ*?jGr^hnuظ>AG3BA=ɿͮ-zOz_$N{[] z_{wˬR'r~܇;QG6@sp [@s+u Ϊt[źAU]*ד"H28,nuZMY^V̊+6Ln`N5JMN|=sq_`{0-ƭQ?iNM^>xIv J\I24pcE9X/p6l^Rڐd_m{Ӹ- z)gp A;F{|: >A*?YE)qe6lo2*_'cq{&˱d58V 5ۙrY;"0J.Г1^%هqqLEt^&uǁаZ|ſdF>ded/ʡro}s-̡wVWUUPJ6Ω5>VcF5-e{ 8%aYV,Y{p3XWūbL .$B/2I9u7=oÛԮqS*1kW5TtkYUT'mx[ƣHHm/;R:ؖl*zp=5I+n_+1i}5}nkP>h ^Ź-2:+DRRkд3v]g[cn+:6Uv ᭪=Hs Mn%DUYڤ.}!4"{Qɯ7Q:mVrڴfHnФ[hpշpr ќ ٳ!Ahd87y,UTmmG2Mui6! 3Z ֍ІWx|A }*䪯oaf%-;RĹ m;?6jd0hCDzpA ʲ\FeuM@B m6&XĉP+lmͥ: {[ IDAT9sN1Z%^F""\VAu\$a{j6ဂ~߸oL>5֭.$wsyʫ_Q-1.?Yj/W;6w~z:p"艎g9j~ؕ ۲OG|xk$4#H>G8X{uFtD9;G }D HB`<ӊ*ۉm0t$IRJ)h(ׄ.fk7VkBIAŵf7s-B~:X]Ӊ+%mxX9SKd7)vXNI5Nh/W¦gaL߮橩npX`LhN$X J8t9G:"=2mpkk]oI?X'rz$5k,rx=/^Gg>1c>.GV8m4t&IFOsbrC3\OQ1k.k_p墍Xh|KF=!C}>IX >8rRob\{f:xۉ}saw'^E~Fݡ LFTSJOZ[Kͺ9scK]/[/}"X}n]5hpa819N#""4[_{_OxKlRDQXp4Qpđ3ΌUP[mCv &q}8-D\aoIkY}'\Ut YUhhRK_?OnWMu6{*J`; oFբg s0۞L$+"o^񝱅ôa׻_i:!7l((eFd#ct!3I#=߈9"CHh@ڜ?O@YHDlK,AUn4R=gfEcsA,A !1F sLڭF4aiңJ`|0T_<\:%htrKezG4m@>IJAp>@pw )饨ҋቧrJN@`@sfuPDTYRn{WS]XԴ8.? &7f_J@7+FbHs"N>= B*^t_klHfQߚW^x,nD34@:V޷9V`i< jyVܥ̨ce1 "cT 1 a?9-s:&WęfB b-?_n=yu81XGJP.Z& . 4Afy#c+Mx6jEt¶SsrVݜq?t^ )@0'|\9MQDJG>8? ]7U_!z= : jZvSJS4 EvlCf lwʊbv$Eq)tr|,Y̟ۀxgYU-٧Ъ!g0.ѓ|#aW?w!qg h`r`'_ޙnp.bv!KWgߍ$" Q;л,k4?+8lO.XRŖ2 kۚ,>U={a7Y.|3~6RiO6w-V5t8zbxՖN'ਊxUE!~_?E{/#LF ք~# W'V*:p1԰wnZ4rQBOBᰔ_=ָ=U6W0-Tՠpus U7NEs$|65a0: x+Ύo^< [#""""P o.m90F\;ջoƌCU) Z {i ;vvc7b1K8αc 󄔭<$j ~+G-ʦѭ]e:V->[ |p%;V ܀Vti470L?ɹcJhc\loi noU4+fx|NE#r1*nM4)Tb1c?ZMWDix5s\dU#;*mɃk@?1Qy;\qo\5S+roG' S¨Vmu>YB0ka4F8GϹ}@ŭ*>1|HBYVqKqSԙ%h66~ԕe,/Xho*p!n-y4.Ċ6Q@ Ey;2E>9y 4ocxF " jzHY`[U/[*EQHYZ`3aaՄ'?d'ff7bD]qbD"Zs#Zw_~U-FTnD^8ψ6lb>7lox*Σ363tqQ,pJVB )fueů.a@y:el&MR@) :dt(%#\pcNʛ\&8kGmdz#wRUz6;S>6{5K7-rtͱjPTISu選?rT\c"r+Vv\`k2 cBƶ1$+RPF(zB rEir3E=Me4B/~ V_1rDD\n[1b&铞.VpJow֝2%)٦jiXe(C¢Cqx^kTl|uf‚[;Eg2q;[WG -x0dCE.GHs0 v4B̡U Q1Uaؾh! b͍A%z}q,$IB>\l 쌘:kw_ߝRQ+~f5"3mi]FI_9+tpODz70 $[yƋiHht f\ :Qet6]PMnJLVjdp UqZ^a}Z6Ieٕf+A_4=lqoR^OBC{ ;UTdH@Fv3ui&^*cj㆐T+~HIr4˲ZuQ21@Աї6I}6Oݑcegh6ѠaB|M##|0+?_1rDD5*Z=ABSpQRt⨹e <+WϧblyYv[=+Wk7[Y_bssr-ӈ\G&W^6kէR(ik+6o1-?M7F𣊋q.6b0JGC{/XRtIG.M=\+ӆ(hNV>a =&~9).S-!lDDDDpHwjBrQxXD$*=VSzJ"V41Y).8COVH3{F$2>|%5'B*r,I%R8`_[#9AVJQ{xEFgrM1gOtYKMX'Kd,-lhy##k̓ Yfƪm+_ߣOVΒӈ_Tv\Gp6]eyltԺ&"""""bdm}SҴ+aDԣZϫUQ ՔUIUnJըh8kFU4U#`T]4IsCўwڱL°'{REH<(}(bx@]#؞/9c{;]=8[1ضhh|=@wgwP?s:ZH1 V"7.u+Q,R::#H6n4Z>#վNܖ*W"gQV\4 4u8Zq3mEyP+h招H -Ș)h=`(N3t){!Qي؆έ+ӵ*#mv0e+ギ:is+bА n" qEԸUض?5Fz}+YrmSt ky**Og *0}FC,fVYal5qZI]C*S!SVfqeSe5w(]LGJ4t2k Y 4FvPÍlJg}Z)Uct҆ n ,)B*ѣ ukOLfvT\iB$1V&_y5ЇjCdD\Hڬke͵q!ҖEFCq<@7""Ѱz,D߈B8'hRh>7n듷īg m0Y;'??}iFy4~c:pw\:JA8Χe^黪[ƨWm%՚ejHӞ2i^NEd Rb HPVhitKB<h}VYn3B-vVsEs2PȕnEdt:Rng?xVW @;~ y/uǏb+ir3Cg^Dđ D!Y""DX&hUҒ񨮋91[b, !7 k'Dଲ1F'i)_.bSEf*sTj̺i5Q5mA\%qx5_St;@%$ƃK>_{p 3[/ kyj ,2D~o\ؤV ,>fуz-os;*togi\YޅZB~E2oD ƶVlWyzfhkZ6*.Ӱ&cYlhtFqm9H#%~rO?2͈П3mq. M_lOS0!zqx#nktl=Vգoa1`ɣE 0"u*xYyN6GY]=BrD (ӧOwW0$l]KR5*#-&nqDEb ?媫2@է.gXPmEn!NHJz+;ΪU2xޯs5^#z5Y?T2yjya&66+#^*ͬRgrJm?*b78 J;mZ %G/LauGo^V Ђ &JD2J5as ճ,= Q 9y04}#|TCoyy9QDٮ>NiSjX7󞪈Q@ $Y\eF3xvO#Xrm7sx>Z_+i qPuLڡWXqm[HnCfU6oSE/G].o\stU IDAT[]D'eʭ9mF_LniASA?ÎV #mC^@B/q2=*X.gb&K**Niʅ62ըeVIz[zL:!vQ"6|҈tex%FS h[$,]Im i[}>1E+| ݉:*Lۺ=!"""""35dm&|6t ##x.tV70MN ][,Umu9ln,Br-6 ]zNWCc\=Oؘ9}$vէYvV(%Ҏvл}.SCFM,4& l@K-ϵ?\ip3z1_Km*T&+ԑfK:+~5fUȪ8W#hnzK+x=J[#d7ѯ5an=|v 1lB$ƙ1\Ku#}UOhj¸G?FXm aIF)?e,2YS`zp{sqfE雎fc,"n_W.Po)^"|hSG\6l_iMygFy]fIm ֢?L@l:0@!8Җ6I1P*o dI\WDʯ6e(55T{:.LWiu:Ӻсo[W9}? c4|=D!-0hg%-\nYC2y<:""""" TMBFe4~8:@EJ =GE㍳r?q}jc.Hc.6QpiPՒB5յ88͋Ԥ=U=kpRK> n˿ E%!r]o8=s0|&ems quP%j DpÖb}evKЅ{ A+"4@ЫGRJ$nx/>t8dRIw F c۩z7MDpOm7 z7C+YYZW5]pgmE(Sg0D(cUkk@ -Q7ICE Vg E!P&%҄Vۆ1r$V^nzpC+u)}ƍƯCbi hL1%NlwOwD8Rr4Mx#>O]i h$V$k|4 ^Pfd{IiRp>ab-)ݨu샫\jt,m.[+qa@gceIg9%%%a,&D*X6BD b+!  *HJD2e+Q@NdRÐ%9&-%.Ar{}sLOWgz^]]]sNvqLOW_UwW}Jo8|NaeY`* o˭BMZJ˭KC;jZTs#EGW[=M\Q(<;xA0;cYh+CB7)hFj[k =)$U>Ey/YG ;%GѷkХޢP /,9 xN~Bbr`XŘuٰy-'/v7m\?5ۋ%0R2O{[aenMJ%^C4'hMsQ 73nl$4A5Aj!h#Rۘ1g Oe}r+1놓^~%h+ܝeHQ9Ijl1m/oܢC$Il(Rt%C_J3U 1l]:ϰhx36 Xi[[͉jk7O҃GM2R8q 0 LVC(AaL&-g`rdHW/a D$9%ެ̰D-/C|)JA_x 4xK-`ސV$.!V|Ţ Q:5yR tB~9]v˻/~aefDGs2a8=-Q 4AIL'I58 PeT $lB+9T?REu1*=o-ZO͜g\LMLS~u)TIMh&v~ke9nڝ!’Kǻ4`XےNZTJ˖4s5K7 P&*WS \?&HѓYI4%*km't$=@W3d02a׼|g5h0zbSj:Kqa'Q7àj0[c/:M>/khK5Hwf{q }zídza0+UJ#ky0<6*~Xb'_k@\Nkdo0ٵ[~I<$-in1Vwx7.S;CM"|&קdu; \^ Pd2OM3:IhיAvk> #JUDG)1Aꏠ7ٝڰQ}:cm o%UlNaTkQn)aZ=&M:n C7˅2p.!@n44 ɕ㊠ Gx`TYNP^8cxt\W GcMOWt<l0͗Z8ƮZ d?KK?ME]nKiaq rg31-[#(pS^b܇Ĕ<CXKV8#bÁBF fqHJU*3}\sH 3GV@WlMw% TZvhNmNqLnkcvpr}9YLR5NJ,WգɎ`+6:7@bi;X[#0d>Sck4 і3fefYg2Ahspwр\e))hsp6ΘqnH6OT?Ss^U( hqݴTUtBჹ!7++$5=-{{\AU,edDfycrlL`{lO mjҥی=Ao[<\|0u9S}^U}-&4gQؕE 4w#2& 9ݭh#Ѥ\+am Sh7R&6tݝLQ^0EV*iL\] ~FzVSr|o 10ȫ1!ގ2%ږ%"eT3dz4a.o'ވiE]{!='DCa B`AULVuӤ9Q`bԯ& :}ЏTM'+YOSA3V `5l6>BR>nc\h(>~xAPƩ )Q)H`\2i:tԅۍCPZ%Z|3eP6u,7ڤ6w&xz'vբouUS Tήn~˘ KܚR<0W6wYR%-*,NcE:jP1l^ގAz^8+!Yޭz xX#c$͔Q묇KiFuFF)D0! AqH:!u+-%Z?%JNo3!]5|W CzwҔ ."~IX.t$=qYZdWv8js!sH:qb8G7_ OBWvťQCYTȾYru፬@BUl+ \^rQ*͒WϨy^ )JbK9?~|#@H%.$A@B n)Y+ZtLBؕ5*FqUm'"bjD+3KPf2πaoR!8 "<U(f3zjG)SɁ\~988˨ pL&1$ "Bp}]Y KZ4r-J2*fٚаZ&ml)EB'$9<Jtv*,RCic!IQ%&^jp}.iނQ=3͡Ž|.Oq5lɉ\aZ6n:FN$S-ImK?\Уl"YUT&Òք/ޚZIW  c7{"ܜXMJ1@-S[aSyXLVDvbDlP%5z{M/~ʜ>.jGԄi=[m/,V2 Rp0 &޼" hs $1\U8JSJ#4`؟Q,*\φnDkh%ds$ 6lF—?]4×gHzEKioZŕO pˇXϫ͔,.5xIn1 :7}U,*+5JPl1c42=>L_޶[6'PVfVVSp:23EPG<_b*,8{vZlgir)NK?7[ k_~\ko4:d}8og04{xxx,R# ډ+?]vApVag\-ݬLk*%:\ַ k1Te? PL5Р~y[E(BfJ_ AقIӚ yg2m@*Ҡ) 'fTgxzo)=,UngƟƼXL| _ЛsҔBPJC+vP"T7䡷:IE}/3ߙ<ͫomI4r% $U_v\ 7@Jh|w#V=9Zs1(衺_?xs_}AZ(D0 `q@~q_Vs^?K~6A8(uuUZQ;dݜy$})ߍv.?AI.XduBfOr%UQ6UPShAɃ}|JmZX"r:ښUjjeX: Y kl7{RW(fB|/ NX xvs?yT*r|h##,t-ܛrŴ$F.AgA.}1*6V$gָMN =9-kpEifqNAؤ1`!@&}Yl!QQBBvqVw;Tn^ǯa[g=ej IDAT"4y8`+&N|o1{d1D0аȍo!~~_}+4bFo9~տ\eCw:j`2*k@+TX"߼XnXEݫWUJ+ o15Q[eo2zYS.ϙ23yi= J>|.@e*/xknWR՝Ttpl_Mo}P~ۛ5oRuhw1M6?* XG[p^ѣ u z]bv垘M8dcԊPSa7'_=&cu<^ڂbX~ xZ-xLD~Ӯ)ÉeE`vjr5XB5IE|K_yS&Bfkgf8_> d'&1E!& T1U5eJRk֐i?KcMaxn;6SSE]+ȊF㛧һLⷒe44n@iPk+VZ`a1ߚ>woMΎ\˥9,r,CuspE9asXQ\v-$><*/!EsjbCMQS{Y}/F57E@5&kz!Vl2icQkNo1yn dzےʍGaT{}ƭa $&ә]PT9y.Wyޣ𓭇ǹȐK(1[XuT$`J#L^4젪]q}װmȘ9KlURKTU.랪>U1׺TVlˇEЛ͛y`?L3]EyHF[YMȵ!^; 9GR Y6mҪ&X]ZBmق9 MzDAT^vW3Iw&5-T ZJU՝]LCED?U"W,{x;xӐб];TP_JG&7/;{3g4b93 &G(kh1c, YU$M293kƉH(cL_p oX/~=}ןՉg&T~\3f(l(4>&{hxُtᤕ=RgW׺šѕ? -g+YDR&9'tz68<\H)xIe:M[vЀC0&aע҇{y,}r>r+,˅UsIF 4sýف/V֪Gڢ&R\Z\\72ι TL!y4ya'xb;x pKvCX.fPV4 (RAD`b]IC.eEX;E]l *T^:O;7)va荾 #`k M)0 lJ9;{=ᱢh O}ɌY#Dø5q+#n5--u iZp];n"2i v2 V2#Q&?Sz|{VpRx PDYDG1N_xagw/:̘2492- ,A̮ԥ~H?l9E.+16oֆbykuB xrV. *iԖ ֊9 a TG:E_K#sQ`/|f oFR1A׻Q$H (ű-e?Ty˕W);~n2vͣ /Vr19}kc%@5LsW'*{ Vb4slK L2Q4:3 A2QBp MqNnhC &rRsد}akI:YE\)1ٞõeP,֭;.r]Y Ss1k(y0N_Z˚iZR8dp*,7{cQˎ+uȘAZo-6LL^>Zl)wi6J z O4z. V1'nu>G96q#;o3D[`nP)'(ͭ ÔX>;$ʩ44ڕ<5UjReS(]'1arjmC!8sן7^iQ7QLvh){xx .M M&ó2qEf~baWv0̍lǃͳaP4[iXMqQh"$.Ll}xJmZ76rg=N~yr\0UEBq *DO׶÷\ Pη\\)l(N5m),* :c.W:g2..`Z{y*ӆt $4y0q/f7\yxxt Ziԟ5wL =̼c7$%!EӞ!sWNiouӷhCr%Gj23ߙ~}=< P{eXvWo Y*g1PF]aZ tB9ycq=<<\Aq5 4캞FUUċ )KR4j<)&Ii)+-9ː˓S_Bdej UnD|*1sC*.qR&Y/ˣJ#RKnq4TT'.Q4f#Qty+,)6X|b fE+QMƋ)7TxAq499 fJh4|#*_*t)(ܝq =:7y0Xb*`X&~z}绾3g|+M8 zb^]BO*+DAþ; 飺=<0J.K6 d# @r.)\%.v#,ei41MJۖqFve]3,*lTɟUal7͵:|*QDj8dTm&>N#Ճ!קSnCQ,<|%ajBd1V/+B'dRtm _Ag+pW|HfN'd2sxC~ˌy1EEFL5 nYu'7jJR%UhߜU@SaBNޘ<Lw).p׃sQ9ζs!D!ޙӘ:> cwg{_ (E0(&ozl)9%aۨP'~Α:eu Ux>Dw/e14< Hdnjx& ..ɆLS.aC5cv7 &0 yӐ~ܴĈ[7ùE[p@إݴV+]ʑ~v1 ސ Y5J-87&/{EJ&텭^SO~A7ͯ))~B MޜXq-&xf;VR48;@w0%J^R.{xxxZ-B(: h8PlNG}ghV̬9{mRz!RYˢ9Tld ۭXk&(yY? {WG;=[zZ%Q;D6 F[[`#xBfo==<<kAV׷ܤ)- ̙ %{e&޾^a9giɚ+Xjsl"E2[v1VWQ,Η%rU e d]j(ŲV4ZH5e΄RB:9|?࠽ ͷqL*,9rijշ~Fb?! jnzx{ j 1-(@ Q4#pf%XgE, ՟8EHVodT2^[T~-"Szء3W*W>QPrF14ҧQ:Vu]^ҕОGQ Ň(("gу+Gh]˝K $j\CJ:i[Ε5j9쵊yԀe}%! )T~=>/ 2oeѭABypvSBUZXLԓu\B-\ yVPT(t2 vɮW{8kƥ?=VL r˩r)95fpe7vOqQThpN_C֠,fȂbFf)iCv;e)!f;n|ηRAȣ<.*`~}}bPKv앯}6ʁ)FFzLd''iĞIãw #,n#d|A0I0ΜQ!ST1,6p2h^+ԹY'z}"Oڀfd!flyoN>˃a&S)j:kK&gYدMi6m_1"tDqRFgqNM8 |l;{xi$'g @`݃ɣY5n}k&ᏙU>]DsV%fm2knM*GoN3*ν%" 6L.qZF0|;(:PNr\NXsGsFɆAؔL]JSݮͣ@g4?HX_Ehy0.HCr_+ s٥ŇSzx{&4*VM--=c8T_():z =RV^цO?H:{-9]H)7XI}z&,*uϢxa.]XDJQ0?suCX/ ?6WA8qLUDK͋&t.qfSrtkcxxx8F3* - ɇ*뒤X-!B&$>;@wW[V/T{xxxuHogi;&5:) T#&<' ֨Ǜ/R!N'.8057Z<<XcHS$+.oFF릟o{kpI,[g"3Y3X6UQ|`MR<#Hutar綂@]Kgߛ~s?yÎA ӶWU7͡?8C>9'?VO_! [WkDYɋEag9yq#>3*JZэ>U~hςf^i5u,гctf?BE*+Fx=DVOA<-wÒmz&(Ϯ1"z,NCE(Mq*.&.]Cma-xnsbemrseXۙ`L flEh\=rw֢" Ҩʵ#k" %3@<>V\8~G]LJ{o'271k Z$jrZxGsX#Qc-άRYOCф TF?_4j(jR4*yØ1t uf՝biJZ\u1R2,5H[ vQ0R.Ԍ:\Wغ,\E&7˻Q %иhUeъF.f*,*r!Vf(dcV>BBtwpB1}MG{ݡ!Tk9{RCҵIv ÆmD}r$Ȯ*[ŨZ&lz:}̮uNHGUZ"BYT\K%rGe2fF|4}w6ЮΌ, Lg hK4c#I"xI1GT" .s9K^*.^C "3RT,e?un:ΎŅpJDE` 3+d2ThC|`I6`wJS:V9&Os}58ٽn" J;" (Kir+ePML90|*SFW-RkVL^Z׺`P:z&֍x1iڎ ͘Ǜ`h dR^dgMx2ANʼuBM~/Di1T,bUFQH>EK*SG@J`zذJ9CƑn44jxqE_#4_T*=m^r[Y)YZU$hz?~_ A+{ƢLk0JPغӲsc]j4 ';|}N֌R+0͡ 9}Vv@(nJb;b(Eh 7_У?ί&q\6VNG⮢Ȼfph#$.ׁ;\J+g+e[>RH7ۆz;*@jYY_Lhy?bb*"1+,QoZ,-̘[j_/NrQy`܄>䁟|.$o9F/0~7M?DhaLO&ԁ{M[RU.G bH D]s˙~gqØ3gЙ{ UuN2ly)YZ<?!v2:c;%UCe-\GWGh|zN]Ʈq));GW0OTWXs\]'Ј 7/4oH)_WZݾ!RT>z %i [fiuSX?GǕ!0RJq92BI`~-lH.0u]u{CNu^b4m}Dvm&TVrZ ȏ}.M6`B8q0@TMi*SXj|Y3))9-Lb-RcN?BQϏ5Oa}ӵ6&,5,B3U 6`gf$$-j8 $[.^M)B0$WO2Ty՝NkaB]/TXnj5 TR{=8H4c|h ~灘~c# ߊT7yߤ1{IS>5ZLה9^fu6,E; 1ovSQor%2.t᠒`Jnٛ{{xWkښ[Eo9ɻ9p['0mF{n;8e`6 :dG׭yJ\Qlm=}%~C+"_}s*!܄"߲[wrR᱊Gt %~Y\ԫ/E):&I qEfK_jŀ6SsSHbFZsYuM.*CoVQ"i(Oqe-?`{\1[LI)c%z-ǯQWVGY8}41c^ed2ȭj+s6T5?cX%SnzmMLupK7Ҧ`=s)`H,n P߭5'ωhSZtuʤg%UU3Y3?3"uSޜ?^xYy!V&_(&!Q<Dg.!l )=jqn[-$>ҹK!qh8XBí,L%ZRڨ̓\pd.4{ba0d܅A*K,SkƊpp/V֒ d?~? MWm9tNǵR6CTo٢LUՔaZZ%)J/ߋ_UcX} ˖4z:>}J"- -Dw |Myz;WA*I'^ΌY5Wꭹf2+0^V;>J\^Ln7zx'a;?Gr`;kSzxʎ/??jB¥)=cB-ЭD-0Q}JB'(fGh쇤_`hUkndlpنLC6oN;T~3]EoQ(f*ύml(nӾQk~կ)R{ /usѨxh/0W(2t KԜ\,kxӥ 8l4}/].NR-2X(I1x3%3m޳%;ѕȷ\ A!B^aCeF(X|%7;MQ-K*30cǐm'+=|dO+Z191,w?ԿS}ޝ|A-|Npl(Zr+"=<8:0&dBZm Q))4krBvoAi rq8E 6>IS[T|+dTU՘QU;5Qe/mkܪDq׹nl<5ty5aΊY0;/ Stf!{h0g #פIkRDBjQiS+%"70<ґNt2n̕d̦8)L!je\o㻾Cճ__ cooYB*(O蜾<<[ͅsDՖ})ei FT1уx^VoUOUS&3AR@Qr7~5(ښ. `0[[[3)]UMm;x sh'_ ]jٗS}DEy$MH㾸Ϊzjr-{7U9峥9,Y3sץ՝Mt$3*J޲!-erd0!) rWF2<~w>9c8B)`o7| #>l )b^bՑ Pa{ c?яhJ܋/}`sGzLJ>ywK+3Df`FeNY,81cPB^]a :%]M ik}hLA[Qi'LiRѭk.jt,&*>FZ%@V3mu2)ZHԈz"j&sx<-Iƙ1!N3Zʐs =V' YLP  ^t-@6.>9fM62DDuvӊmFժ:g޹=y>!PhWc,Zi`7bW._)-RAHN9ɰ':in梱Tmp>QɃCs=s.ޤ:KJV0MOghslKU>S+a>8-Le-Т$9<*8akFm:й4XUS"0WFB P"k"'wnNdBOsnHqwYe|F[;F# FHOٳ?)2;n3|{~_?ѾrPtW8 v-]%mogT] 3I"FJ:L55n)XWk0/ ޝhz+st9N[/FWrK͝GK(PY7H 7HK-s&4l"?dug`x&Os,g@VȖ?|*QlY2!i&ͯ!l^j+*y@0#;^3"%*&QYA\dR VJ-9@- $tf+YP/]ؚkrWQy᝱ְ_~.#6&흭{;;Ks*Z?%1=9m*{x(" o(2ER2#hdp KO+;S2Uu`\e {am,,o-zka4ܞOrYkZhu(w-GZRVYPѺBɣcx;x2E8{(k6Jt\ ZV=H^8Sle\jkYOa^|y}}.ioe߱ [^; RR(EsV(\ SBsEWFDIB͍e> IDAT3rUk@ AvJߘ^VYe֔OLY.p+c•sgxzkZICr`bf ~:Ge.U`n/|f:iwPgῬ ϽGsf0}/vs? bnx`UPftrB 9i;SuͥYH9'XP|l /%SZ8Z\VxmagP!ܬ&+UBD1m to(k NT͕jٔ-*5u|ޝlo4Po d6߃.l2hLޞ!Q}1(C`ӌ[>ȜZ!)\7t|ɔ>w9I[_R㵡zCjy^X*Ey"ꯝG[W&W_#vYe̝ ;TiJL]*VKK)c;.J.j/" .sҭ 4 oM;IeoB-FLJ 3HA۴Ǐ.掵]6*ہ-J-#ɭV~]juw[z ŨZ`;o+”iɤJjTb`hM+\UuQMچ"9L̮[\ n'Jn8^=MPLa6nhqRԹ P3Υ^<0Ӑ  t&FSes^^`  hVb;(YŠc;VK/nuRsSYӰ Bcy[LOo>H8.:{!(]قV:."R@t%]m. 0k9 ;&x绾?i<>H@v (}>yI}ciE$+)ݟKIU)3]MuAV'(oh#Ϩ|!/+Vf hF!UUt2kQW7MSVr)Ur+9NÁ0rt(LtYUL](n:U0uQb ,0qU!B>9 Adց);M6"r/~|+tbElH+TdlDƒ ׌1AIښQ&pWFMWUR;Q-lN*vFPXBA%,T$ Mpb-Ot f4@fcD\7X!P %0**H7S+ ARVDDsڛH"j%*WKĘje!ae͐BjOhr?~^NRyQ]]r7\nvk0[#՟,G?9u;o (wOeZy5 +iawl#9DetZ ڦ><Ɍa8 E[8`{낉Fs2Id59 H6Оb>mAPj]h3n N\VK!+}=6K̕g4)bes$t01Ktmmt E%bSy{oN>9JTEKs):^31ڪT![3mhє[N$&ƭ S|\j۱ P5q uyC5ɋj4@4Ƴ IqbbGfm^ CI?qp1bHbذǯU:!"ZHiYLF|e-T">w1_MdM y26+ȃKQLcWܿ=yaB"Zȡg}LT̉T O̕2Mĭ[3*(V5`m olΦ*E a i*kVh:ғkxw+z@thrs\8φgߜ~ѹW9tY)*xb.3պ6Ww: ޥuZT黜Exf/\J9\[١n"J ϷS0GiwJ WD"LJRT0ͭ\*~fM\X;2-r9!w`כֿFX5;}tRfd͇LڈZ9}2]Tk\RHˌFWaݗfԯӦD{bw_>RӖx岦;!ek~دƣocxH :tVP!;ΣdU +|T%(Ӑ\]+GCؼ] P4K X%PTrAW[ Xu6̌45hwil3{& ,(_h5%WO_Oe)^tm:tWWyOYE ` oE|w|_KW_ySw_xOVi˭Z!Lxx\L ƀnz#F$8 ]L\۠IP\#iaRa@a8*4 DaiZ|' fBsou fLV EQb,Ia]䪤e";GRd)@;Yhk `㇫6MˏGiFT7Jt|H_a^|ycc#͂RR+>[3iAa&Xn:z׮]"#Y;.oCuVSa +?Aql<2kΚ2DNa*i*1&^g89$s_J9eq>3+٤ 5 Ʌ̖ Y۔,~ʼ]Vp/YpEs'H) —cPy*$UUӳ0u| O;ek?џ:?d/.eZg>to/rtR` Dx0(AۮXI@OG5oH.*kyuB]YZ/y .z8;œ$#N~qz?s%[E#Q*dL̯_d~ iDT3nbž &N0@fdLӳ9Ԝ"Y]PbaYhE\9X5ZI5c5>"J`{bٶ$7KIw'hݭ,̴_ ;4e 6y\͉~Ҏw>wWӟ[чҏ|/4a\>C5dݣDnR/s+B(9 hf֌&^V4Ep.9!?`rD&Gb9HEoYX+5iPV`:0`cJc(?N6#TKy6Ar<sӧg\` &d1@bH,3@BĆd1lob' !cɟ=_f}T?RIRT*]ΥҌuT>}wA)i0nw!,1WlPʘKӣl...v:SH̕i{J|wt<@)EɦMhXZ9퍛b dK(Bu1RZ+CO:a~k![q1ˇR8oju)ab Yr~9z?:9~O1GT;9kYTGT6/]/3Kkx\ُᇟ?YMя}eyu{2OG~>9Te2n.EKiSaf:ák4ACVWѕk(p-_'>wB7}S4tqD1J٠ٱȱW/Kb wJ&HCq}:C0J-ZFunxKnI3 Vҍ'q)6-,hEBXbYCz0cn+shBʱi~$Fe5[!vzaX?EWHZl.[}eR;0-ra~K](+  <{TQIZ&C2(&I Jd,& $ EFxU "EH1L)0cnD48)RO =kof3O>j^ܣM~hG&єLLlΕnoLJN-"z_-t?;)RB=H(O܁c(`q[䌳OO8'q/ Zc8k-iqϏI}\7wٶ/|OU?5+-7 rZ;SAE6f}iyz$?&o/=EUAhTСUz}Jqx\Cn⏯i{~=댾Bӟ? vyUe~d֭|H;6@ۭy\ƿ__{ӣ7Z;^pnc?^F`n._냿/*uIV֞.,$8ne_C4ٶnʛ(ޕhv"'Rz|cC`\>t0+o?8 kIRv FJUGg<HBaҬIl5o?؟Ωo#1WR:@x0k \Q+~~\}L7 hmZ@-{cP/rf,NfP@q&8%7rjHsM `ֵ;Hb.nG?95|hӌ:+F~c. 1$!1Wn3,30:WcX[XXhIT,YPGn*~3N$?Ś TB%%4A?S3ݦU,Pet+Pa @|K.T!BSVmGae7&Onꬵ19}" R 3{6VԨ]:XrY'Kci$F.!ɘn(VRA* O238ΚKbPzbDh>VaB+3xtI԰+˫oH?Ɛc Ľ&&_,k=%lQ暴W nwoƞĥd[>ps;X.yʤzEL?;V('n^ X%'}Κ=X̓Iӌj.Wa dp<}/ȅeBuB+3=-C`z ؙTahR(5^FN8?-?II叛z-sUpFnK֌%4ZfkƘة"o6v O{aj޷\)D(ػI!p_b:XJ:f"ĉ[FmXU(a>@R ڀ[H D2 #v("bZ+ج;`ۥ>lg <`2_e'LBKOrH^4gX% ]s\uw;h8!JsIчD(t5&Jfs-*`cXwkHf]/eO9)1y?auzQV85S]؁UؐnNxFb44}I%k(Z]zM-2.\G'}e HlLn n{"z:&ttc呖|.|PV2Nߞv VC%=0QS,U{&$}}&}Wwe&^`p$;l.QJ']Y>zQ>\1KiƸŦe>C1LdT_Qk=;4p\!9hF F zPJ9{@gKv"֍(z"6Bb(2r(/Fk!ޔ?zw=5kOd Kʄ(e.gvn%PgMoJ^;]A0۟o?sc9ts3p-0f521dWl\Yx1~^vZRH4hk7 !ȘTXquVB7HZ )Ul XZ1<$"kޱ:П&į@ "hƸNHA4~|$iɸfLLXR¤QiBaٷoms'}m1^U/6TÑf1;9j ZBU5HOY!FAWOOXi]4đ  @ 8?#\h~dF"}2HS70 R[)&tւ)R+MdӮ.ď;tԷFA.ҥUtd^'˔lnT73;dsCHZL.1PJ^d\I`d8zQ15jZ<  O=r0%WZMo2}w[zŰmYQ$Wix;xOk-:Ù$Ҿ$Wtt u'hZchlBN/{MYDJVvt 2)]P^>RE>`^6W_Eʧ; x3AKX؞Yj& rW ԅB+7$n+ wi 6ٴ%hQTS%/^ڤ.ӌ!z˔N;)-nIܠ*1W֌ImZ\vs+M!Q 5v3*rAb?j]I骰ߔ@i?67h}؜"j$Dyd]MA.`6XpIqi52J(bN Cy#_m86cc#`Cq ,JD?SRbՔ&md\/S/.MJ&[ƽIV7%9Fhpi2OrStXMƞf$h KE]XE҆'2F]vݳ2jWJ]s`9"cl41scnB3K "\/sߟ_)ZLu Pc7`$rf1|EzɌZ0%1+ >9,kLTD?jSMb Hw`;lSR);fVK*b2N즐 p?I2rM2 ]߁q). 67h>~-w͡[a6\m#$@0tE:D\aܐQV8iq z֒\=k::/gAb:V|߰6%qGd'X۴[de<^[@22n`="w"y^.HE:6af63u 3g=e$z',Qf5)&NM C{` 4ƘSk҃IlT5U&U*]<4c}È푚zs  2AQsO1כ_fG>密:p;3齄o4ǼL$+tօ-JNDxU&))T o]CW:wMs4=-3Zƹ &KE˱7Vc#p̫("`($* jBcN&b,n0 L#a] hy.(Dܥlv9v̧AP7OPe,he {g0MBMT$po]@h]Bk3|goSQ7CF]^ (FgC92'ЂA S'\q1) Y J4c.p\9$Oޗil4; UNWL54=11$W+`& 1Jvl.ުRk;s wTGwY4Xf5B'0f2l.mك>r0B-t’BXK.9NSFVQ($%9t<ހN[X$>G C6]c. .<2Ed d"\cndbu\KT}RhS4WLu@uБ⎿2|=پNQZF`=-HPŤY޳ l&{ yl@7&4mI-^YjRK*CrNGAQKaр =l6L޺fSt.SF g_|LԛON7]zYCwj u2s`u+N*IU "ނ=kv|֊/ A (@eq\n@CoϘ| Ʀ1 0C\~Dᘋ/,c8Z$WUGU쪞iOpm1 4DAG)vSi7z$pL #qVXǥV* :_PAAzH7ܓ]k}E mM_$eʙc_srȀ 7 2d 8٨OR (QeU]r!/4 DDޣp'8ѣfsk$}ƶ6{mO+kw[GR24k.NJWln4]wD1ߚ "*O7W#+Hݱ lRؚilBTs;1Ι4LdvHdFM\r4c)F҂tbBy$u;tk`竍 3@ű&O((vgA)6f#]D2cU^cnX b 2U5osso|tRθvZT1`4Jb;v'i"Tqz kG]DӐTI5 L^`LDy<#"E*ogǵ6QiTX (NP{2C:ljh >t-ki*pR!:3 ]a򼯠 G|f hcn )B1dP޳o޶-I_ra"&Z8sw5ֶ8' =fj>_ ?n2bS|KD;4h,a{9GÆpqMSP '9xv. pi5!F}ba lK :xBoFRBBҐadB?!LK=KCA 1|Df\VGD( DQ;PBz`E˻5Kljk\0$?oc;;Y{t.RxN޵vUM*Dڛ7M1=Dt&哴D1VcwaC; -ܩ8A Yn6Yua y#GJs5kBjN@bq>/%}ڶHXhZo V52lD0񺱲HZYd]{Φ-cᴗ [RetŸ 2j'!%+xTC7WC1,&31GzQ= C7%~xlp!P؏`,BCee"׻{{#]XcIW8] `c@ˮ kڿ`j.4/heէ* =O퐅|5j !g@ktbLQooI"/"u B%Mݎkq+ΩUr$㢕sc9q!| \5c *-D1>^,jޢy1f,A}ӟ8o:y5jL ̰$ҙN|$!&Ν%[5g3{\UL(i|),Iױ{>Ѡ5J{6直fuM_\R z΋dm8F^oYp)EV&z8[ɅRK I]T+f.A ϴaVq:D0J"ȵ?z}240*4t Ae`Xdz;R86DJH84阋Y l}Aء~ ] 'ai%I*0 n&hCgk@$M߸WlwEpm6T.?BIN5z۵dsVw /8H9 k#%⣘}KFHrR/>i.Rf,y.ɉMIH> +E[X#TjZ5 3C !izjtqI/&-@LN>e'_94MfQarx&K,iz{MFkt;_cp"늭@ B$DE225cMkܖMv]4GSz .Sjs=ug$j%KJcW)+ 䎹^wvk ].(Q?i#]{eBFo=F,1Wʌ]UBc6J)'s]X5DLjCEwKen.kmNjxꉍ>aK*{,8T 9{xKV,:pUP=!SmELTs:Ex Vը*]͎knʞjNFoYX.,F7"c.sP3rXd a\AIʃ+UfEB["FLNQ'XP4h/vDP8 1~p 0y-XtB4^{oxv Y1GSAgx!<=Bf_~5[c!BLrR:\ki \LX@wSry"S"  )Kے?jO 溻E g`Բfh ~[\w1Tp 8vm{0Щh'jMG@ vf޺-4RDb?S[6|zzc%;2j4id=-E5^OK)ըXo<m&ofܷDN ° pPWyPb6n(!jn-Y'ච+&Хoi wx&J}u(r~4؟Mf~:za?[ gd]fWc)1BE1m8 >,O ;%mSZN=ko/o`Q/iÍc7nrP?ss#eNqϞ׿3m&ABd۬t ,AQKEiJL6ykN9سX{G70Dy&r7o'$'T2?2^ Xd-ԛA< 74zD2ǟ ^A*jAZVtW\F#Kx iUR|IJLm#^$L\n*7Z&<S?yT*@˚xFϋRFyG" ꌹ(L⎹(w#^wz<:NVh5Qc!i ׂ^Gki}{UDHljkƤo}9k;NxbYG;@w .F:2C@qk燳E^sc'UO ?ggZ mv*޻bi\g¡D'jnic0ՌQ~Q31AIV(4],1gy/Lץ}ASUَлXl ;&'cn[è7^<3qSZTL4 U2Nq0GBzt-Wp)F.74OsW>aKi&4dl?EO*Ibשdg0<l[tMXOHJo\{-plF n8<xx*2Dw/AeX,|\~X "AP QV38ꂳDT-Iގ/II[gtk~oט$[w~/| 1es vˏ|֏߮'̕Sc2LQӒ̵k2c1Ј+d"!j]k2{[Nc,1z%2E.rV"Yw|R~-0)2>s7Z6m^"㼸nZ}L%k ?15I 72]r*kzSC\wش;f,bgTguQALeApxEWf! ;撐&an20JC`7s+k iuv;{`ʟZRZVFa(Fnԣg%oqF}|`(3%H{xX2i( ?A%b A bj?VDiArفEW r%Vgгj=cͅ~|`(r+-93aG;0_ l/\{ZY^ˏ:rc>[)ked5Xٚz,ӽpM +TR)NPz\& Չ VW衁容?++նf4ݷ謘NsરPK17g˸2"QoOsvX  jHuPI&Wޱ I[iψ.Yxְ iZ]j#lҮI%0݂!hp\~ؖp\cOU|B=4#Kr<0 r=3z3ժ*\Փ_e[|yjsX?bI\NevAcA*< ˅ɈۀEn{FP7Ӌ!| }MI\'Re%P@ČX1{ZIfK n򸾁#`؁ˮ|ްyJO8u7cC9{?UMoP^c8Cjg58hW{sl;=n.ܦaEwtZ ?Î2+~^wHLY@ŪOa{m?H;&aT)Ma VcqDE !7|[Yb8E Y`pduip8 eS GƢtjIFW#J@ Y}q5_zg-e1%Qm5YL=g1{ЏU;RZb[++Ɗp V5b4^?w|9æ-.&$EɔP-J15RXޘۢ4xR:D^Tг7ζ8TeK.yQټԳCs̢$Xc.(q\LPDp̅03#`oD4-".1@75faB\=%ը3  q]UU\_/g>u?~^xw~&#[YY}+~i\ˎCpBf2zGrIkn}P-h%Y+~Y4gbd!L$^g7s)` xſ/a@b ]oͽ9PqB6[Kynҗ_|?~|{?}m_HA^s ;KZD (3"i8+YISicY)uWeFpIh7y4l b*舚Е(5\>SP'h"5ߏãCwiFZ8iu϶""o, c8FC1y1L#u t4{O]^Ki¡\@]ѽb*S?pBUoZdQ|$[+/C()br . r6Q֕Cj(xPb. |I RI3wƯ#OqN%'.J{XȂ dkx]Y X*A_//# Х4-l4pP9-܋]zadY"-R?'z #~1²Z.!^]^"JC̻P_,8J)+z$}G`O&^\kU\lz4?3nsK0H ֡&&@frNLSg=[tl?z?ɗ⯯,ߺw٤|ṗlyB;}T ޅ]FD"Ӵl^q yiIWd5hwR/o_W^y9߳k (?szˮ浼g>"_t/ʗm#k_' Μ{8+.~اoͨKQnK_~ۏE^>p&p^N ]3+"n 0N=T((3&]HMúɝl-sIR~wK3/ky}Fw]qRrn?R Mc*fkP_Yheix\34Ĭi郵6w@'bʱ/H_%Lk(פJ$TvZ/$@Ep-Y7mICӒ.RR)"l¨,iĭfO.vFNf `cvYhĕmM劂Z1*$㶣r3Ye)rsIm&b-FDk\B,9qpHN2it(.bBj2%͍I~i\2FB]ִ4!Y|bQN "%//XICL`BգQ} B-%>qKP U.(#zb8`ɻ~}ȁZE8Tnm@g/*oJP'8 IDAT/3ُ}>7%]dREϽă Rm$&Ҩ%e4U 40}byX5j1Tnf^D'|k_dB߻yq׽W\ 5 zñ?0e'9r犃8#__W_ڼTYs笞s޷<9gJO<5OFK(`V#y{=s ,^ou2 vޚcm;%AzdIbTn.OC֊QJ49T^VrZ{Zш=E1*)5bU!ư*s햿'% QpAp1lJ}p}D5+VhBC To3]\_m->P?0 (!n!@j8Řʧr2\ Ä=FMVX;*a n1Tn%=xPSs/o<7w.dYZr=2-/%yœIsI CcAUUsrmp4Ze|4y0tF2Dܦ]9A5hw4g~?ݾ 7.FY*=t wj?z❆] }a;NLnU1gd 5Hc3o0Cf~g)9\,yȫdV9,Fi/&6l+x.*hH4%7t9z6bZ4PQ!7EuВ1EP \ú\3]FM2zҌITVNoMiLQ/IJ [`ESWi(-QZǏgVLZ \S*S_O@¶28ZYDYKX0udťUg9ЀᬲBA(٥\$e9PhThb 6 .p7gnhlUS8iz"7WSQX&Wʭ1j=ӛ3~D>aί~]dscO{߻xX](zǿߒ ܙ.r$VF*Q'^%hBw=A'nϽgU.8:r#k_ӟb[7xm>s}啗L]B/ſ"*!Ouo~^}b쐭7WD.8Ȳa6CCkYUzjjZN+怛+lH&,1)i(.ȥ嚬UYҊ֖Z NSᒋP%+͢(PH2VVFkxhl[O=! / $Q 00ŗ_҈@&M1Vi1(5W'=ʨ- 0FQ}lmnLbwurJ2EE,M_zgŚ܌I iY۬,0,cd/ddλܫ}yTU=|;1ˣSCc{ڟ]}k̹s%/ψa/z >#t;2?~K^&~eycG>_~~opK;')(9*TnR#A2FNjKR#̛ؐ;Qav % ]zRjHՈ\]}s;ypqQ|? !,s@fVO]Z0X]S#,K"FʱbL& 5cg 35tk1_wVأGMTn1WTʉr-oH? rXiiL"˼4cc+Bv罬&Y6$r=Y2s(CZzWIh(K(JR)M/44`n ؂dq#7Jq, CO)\n\ObЏַO]x4n4@g/Dخ2:y~w> Y2mF-Au^k lhcP(MrAdҷkjv:qWG0Vs0*ESP얔z{/t覟KR2SXc }|ObZy s7:rf>̗V5kK_q?q?]$ep+~wcF/r5|Sɟ<3/%#ܣюW^yM79[>Wm߼ۙx/zljN>-:r_ԧ]wd`kkm&R}Q…v T4L^F]SF 9\r35iFZp%h:EsZN-A阚 C+ pk=y(Tq}AZ ޫ+I#?Pc.sEYwbc.og 3ӎr璻J ie:-Ǡ]2y/S*J嚓2oj cl( doP#GDп΋u*T,kBhFyqsT/b"{r61lik#h4cKk6aZM:$5 д:-q?|@Ze.+HB,eqAA8\T1WB%10WIO2;0Oim&2?4q}M>N C/̏Dï\џcϧB~拹5 ^zMأ.tNٸN!AO9X]K.k[a>2@ ,ID]x^Za'˘|@B7`-1Qpf7 p5Ϙp'3O *!'br5* Uabh:坨(`$ yJ@e3&y32-f'Y=9IDJxnmKRLF5LiFV]Tւ2|-.̞>˦4|RX Bo]"xe &M [V7E :"}~v} 8a< #(2b,1,l2R?LR&  %~kAI ҭG}Úk'kfP+Mo]kbCrܴʆ4 (Y^m#{nEZ^]^{/0<%+D@yGv)¹IkMV +tp}d,eJ&jTnhBwdDžo>xxxo_͇z+^}s ?xc}f9p7i xϖsμW]\n ׼er0sz#HD~_{w~eF{ȁkW с.u9#|^7W\IpVT7SCjήrѨ:TӈX"QYY~Wq.(Զ{1Q1tƱ~!%sX G<\-Z.\34fW|2Al@S~¡ϏL(>?~_ʒՓKBss8UM0h5[({dRITKc ϗ\-M# s{25w$=ʊY -*GXt̏T ~O FZX,1IḍKjHzídT92沌 (dsi17UYX\)H$z^'??ޗdlyi&m/̤rMTnh@g:3O$MCTnr Tqͻ^xK6Mr~Oz6&P0P|=<<QB"\M֨{;787 |o< t'u UY\7\v5b\Q1ƗPΌ zy+˫>sWe!ݥ[XbT杘F=ji\=ˢ/0gpL!5neΒ4S#RJ"kѠ׌\[lZhe_tŘVf3xЧ l.Sr1Sj`l"cnX11o. %R2ݕv Gm!URSS; 5[r8PɈR!mP#r5\ݍ-7r! ,ua.6r%P9ev*W3b&Tn&)7mX^}=GH 4Ji.~6ڏ.ʌǍROH2H`X"?mq܀8\/Ɖ^- 406L8Ҁ厹3ⴏM.6RQTnd-؇x~DSh˦")M 㷆 rVXOr%\JTKN?ܻBUN~UTnId?{ATn`'PʕP4"S)Uj5cgz;ozU9&Bbw%IxOq'J,+"[`xЄ}#|-fiz͕[Б_ӓbE,^qUEoKy\KwfVW}\T.[|t(#;+^ 3b ioUKeAs6"SXS&TnZTڽ̓,KnLVމLdq\)@~ޗsOf8R`LclN5cKn<5 rGmJZcƩB? RO8K9LUq>\zqv$)!yQjʜK*IjPZz1z5LH8N;}"&&DsƽxQ@p\VR,Jp'; ^O슎so{K|Y\6p׷sQ;Ir~DeK^&C7E 5du6RO$lx$jYC6[<KY%Y^Lcïxl5yo~}>/4wܰ&aVJ o^IE i& Fg 1m7duյk~sz ~#oo=68zUZ|]/F=6s=wAW|䤨 IDATpOx_bP~pp~b[Bʶ[5r78lcB& LEX-|,V@>d=P+$xP|sy9)xӭum#%iUץ)f6j-(;<]ǵޫ|%C‹(UOj"uo85 Sjt"!R)o$u$FAt_]я*6YC07})I5jز H.5۷z{ybMK3yYUOYrw:3&O?a;6{Dnr Bʐс㱃1="-Ӈ'_c [ӟ1exܔgy:}|* KqRcx\EQnXWHŃfJiq.yeO&#Xv1_C͇?6#lQeZy}zY.!ڣj}cBHiePwhB.6+PѺw\9:+ )Qs B/մXYg+,cOem!*8vHIAdQ N:e7SQn_ } XLjbH{OfJQo|s 7RR&IJ'5 Q?p ŘamK.{"zLթ5V&V%oɞ"g*DݫeYnތK.ͥLf]LZ5ənL^S3WM0z.W9+ps|^[HxU TTFQ92'i׷93^_4h_ĚݸXx)jvݗϿ5Ӧe|ؾu#cz]E>d@UvFwHg{H8G6\Q~M'f̚tL8·*QQІmMΣKNK?tV}eO0[GN )=P.eh@_ߞһo 'j:k(Mor56}X&'Ma@ 1')_蚖t3 zR(*8_BI1=M F ۊmݿDHxԿ$+\EhIUsa`n;laTs& ښWb@quor}lZKhE̚B V"z3WK$F0Ԧv"~:蘫jhOSLMdJث]CS;-yo7L(WICaBA$Ul"k+s]XXMVVWLtkn\+/ݰ]>ۛvmoE˯ФWW? L_uۿ_bA6l\wofPuns20<5LMX03K)2to8&?#s]NO{: :jb oLQGYҒqzABL/ r*;G̙p;܇rOtNL ֧ܺ$5eҵOY[& $-g`Z\-#0o>2Q̌ H&1WՌ0j2`rf$1<ט&+Cͻ!$z.wj]Z%<溷(BCƖi>r hϘ<~ϙ񑉓ᮞW^|QO`AL B8 flo&v l$QN3;֔o__[:Ֆ:epd̞AM{3fA7;\c<17Uzjƪ'榁I!;O2l.^a |[/vOrDP`]epugsn3y/yE3ϙ~6r?_\5ۚvY.[IӨ`IV|vo|˒|O=:ԅ3|J6@dM:|Q˥Zem釺cG:c- LeЧqrun1BU0ܶhDDlfj]>l9yfŋ?^V) qkEc:ꊇDˁd|m+^1kyw %ҭzʾHi:paEݣ`qHiq 爳!֯ip(af+r79\\kNWk3SWM"6+]v:Siוu3Oxbvscb8fS5m-g0!IEiW4e>r`'K츻lw;'iv8 (Lm6+MWk&!L*UrD٠LGgY#QjVZ%J璛vDnՅl17،s#uSeRǛ%>Țc}*&vAihVlmKn[Gs 籸'7Z"^=KFddp_ڞapm´gϻ۷% 9{Z/ӿhӿ?lgPon%u㱖pYS,mp8%RbzG4oX;u/uroEXr ~^zǃ_|ӡ@/Z&7^t[mmi>ruۖ]]35p 7}"$r>Vu +d)V9 qU.GU6Vnl> 6j%W 89;r,Ӗ)'eӬʚzIkVլ WL1Wz1791`! G# ! zAg_hKi0t#k J䪞9PrkZer@T{F4D -UtHS*k+1uezIfY uc{ {.vŤ 1F1cMN]@QF)"{$ܢ%]8gqbH eZ`C6$/ji0οheW] g uD=Բ;K?±nq[T+:pZjVjE'H:\#8]"PJFhDyns&}hͤ3pO? ~lJ lX߶eYK?̊,>9دo[ф,~4/̾i[apE3^[*\"6P +P"GJ ք%)dxI64AFݰn5JFո(*i;>0+0蒫;3D eTSY[\0O5L{I o.}+[ 0I)!Cr~Sy9 CӲ$#,@=? t,?H&}ՀYf`j–2VڻjV&hJ5,V̈́}Q2YdasWcka&p5Ħh)XME:15=Lj&NGiMxq} yJª MϾVFeu5stUAGXK|{ L<'oܶq=„+l+M?W-,3V(1>'sy.W%b8TQ7cIV!况y0wxָ>|/(BKw<$:pv̳-=d UG 6[H褄kS'g۶6 ~-͇7Og<zȲ(b 5gL"^#V1%Uң`5 Y{S3iq }ZHŻCTgu=mB2ehM7¦*tUOMy:-;r~a8oE4yF_xi,0Jz6'yCܥY1,X__q!q n+ $}~zm7.!k;W=ftj9n 궥ȟ zIx!J'W5%˔o$ ?w,r!CuڙC# WQ K3+ܻϹTpq?qwy7}S\rzVo^әbѲ{߫0?bg~gúL΃Ϡf_Wk =z"TqRI@JdSSEoH[+Z5-yܚabJV:T:)d}J VW,ܴ.6WlM0__bG09 XD"a~r"~K7g8"ZsGT.ramk>jWS?6TiJdoɡ^jVИ`s \=_t}<}[Td.`%|ƀ*ǒ9|ȭ6  (W.Deu[q_$ w|wws~ێݢt8sUY]QY]·6̗_w 6rNK <qriu%"PJFk&qEyu,{I@J|`6o#q 9A vU~3?%RMvYj G<(7wF_$P]|6! p E&rJZ::tJV/ s9y@)j:<$z#uGeuştW]? 6'57LQYMUbzd[R2f(AV13FB䄅N;ȋvP;+#,|_6 ==غ{{SM1pLv8=c<6zx $7GwDΑ<|!=ݧw{ sB3FKU+,KE.0ޣ=ҷA u4!wE!qIX̑}./U[=Vi,&™FWe}5>pYnǭ2ZUEm MLwIWWqm`_ٿjQv&kپҠW ry) ʋ֜C%P`ݝͥs\p1@ۓ' ^dS?Tt!0hjY\oDoMgszs?QҤۈ 6^Qz0m,wUG +UnwӘx'%_ze[wwwpmߺO=jl5Bc7?KDw&ЈޯZ#ۇhUB'Rh$!QwV(Q6v1=&9 rE{ypn:] d W<$ȴBM&l|sIECz80C%779vFgZf}@FUQ('vͱ>p=%&i:roO)ֶ֛[N Re+N7\KwzptxňиVR5HӰwk׳O'6qiSɋfL=w\,+6^ks[ˁoN~h>Mu@;o@Wxxٍ|{r<,Dଽ1N\X[wPCe`Y!P8w6EX @7@hk9묷N2ƚi3>u}]W.eWPgRr@!X+E il?BT0+nBfn9FKs/Y|"Xj+[FG&U5$2\Wtn=wH}Gda²yw2i@t{m+͛4 8uo+-]֭INrK8Eu ]Z+ٲws[-#8^ X2EޝjMOVI VU5se\Bue@ ַtkp M \,A5iՊML~?Lo @`]%‡V몂cjk4Zu-7޴g ?'VP3uY n:vփ[6NUNx,>u T$gi;JXdwH11÷X2k&} ߂'XSJԡ9=x\V;s٬?n5m۲:qU+^Z% ׁ/~~$oٽ}W_޾'NyF43Sv_jrXt@oT$j]S ZL٦w r{hH%G9&`>MNK ^Wv'DPL1+Z*l{ `'آjUTO+l$Z.uj5mv@K+CN4z5Xa98tVM#K3tٔG7O&P2Ҭ4ʠp9 +q%5~N}q `w9їP_g54"8H 4ݎ=;$?q%I67&'VY]n֍ᮞ[άI@ҳ66λ݃saC徺捼n]Q:OZuF#?>.-P[<Z1*t ЕP]:oYuWgϡۏ ;]ןqgnխn߲۪Ưn]ƥY w*sh~?cx$/kxeV*As:6/хKA8_%e8w[|ѧL2d7|iSZ6 wf0Va}/"w5=Ƒ[PǞ}aż<~ i(osp6_(3@3qIу @JQB`&m y ,UkB3$@SթT=Ac,eܵ|ֲbds%{y,.\-v+ڥ ,A%D@M! Օi"rG0|^7)srPnwWO^":L$7%%r ]Q]1rxg}u&<'B8bڌ3-dy]3 ={˲Z7#[v7Ir+yM{&N>5]۳>qĴgYZa'ԕıC) OOdsd(W_R=XU-zN?9A W{oȾN{хVFDƇwBt)-N*!}ZÎ9Glu ntXbe!G_I:Qi91nbbeҰ} _u]YEIiu!K¥cs'w軀7a>wo^sa>|k6З ,P.޲oy8ioq& +[Y-W쾃(@{dWu9rtHb?mǎ5ՆWpr%}w]>s?.q8mY|pueKol?bI zz&{٬mo貿"b@g=ڶa}`OB'q:ٲ܁DB~=X(7Ǐw]70A נhzd@8ַt^w{hjXDp4Vs\\=`MQYQm pBrkpY{ $y4 q4W=fQwsZ$gSg봕!w@oXU+ohkY"/@h噟XG_28zXNx Whq镟SҿƖMm\%G\O:;(=v8#;hUJN *&Qkӳwn\mi2`fނ_6>/g;WE#,[򰵪o߹̽׷4޶e093άo=UE+ҿ-ѣA1q9hU/G<ݥ-Z,f!Q xE2xn.3jp{j+KD ok>-.7B 5chH/8 3Ja GH>eW2Í ^29#x$} dI":H8QƜ1k~& w\p'y>ROx38㍁A40}w();[Io'q܌> +cmfE kj&Z/Z7i\(> _X"!=l{Iup]fttJ3;48L; 4!QY]~sa]=})(]#Gb{y,1'}V<@n~pJKt5o ֌ 6me`8,[~Lq招y쾧[w]3 +_/e>{%]c˞gSĭ}@_Ps+lѴg}dDH(]#Lv'[u; zFb! m)PRr=BzIiY"I4㺬/"aMf``iల&skvbW{f0>`mi__͖FcdleKv\եPFZND"}j֟4MK$FOGݮ:PZti,x\j4(G^<kΟ{ Wɭ{FX'ro D3ҐrS!ev&'P= ʹm+G;%]o$ޛDv`2$%J0@lW9gU $F.xF=6vH=]DTG Jdp׺|qsI׷-om>ȳ37=Чwq<Ձ:TCx)l1jV bرqBtL|i{?貧/ĹT|-~dП[etwd\z}Ӻ-?ݝ=g&=n8?9Pc-(Dax790LrGUK=?&:ydRv0+Y DƀZw 퓐_XFK_ sqhv](@"_"k7E@n;oingkIԽ(d=Z;^?eu}&lAեRPi b2}/sh)o9XP]ƫYPeu̥W~vg{Hܟʏ?' $+=]vY9Α:T*$w/U+$5HtOgeLՑɆuM5қ Bw<;}`o\s8d6_/皱ާwl} o"0|OZ8[FvJBȑ5?].ﭝ@γvRPSGяק.XrUеP{^٦1^oB< @it%|B,FrۡCŻG0q~B ֜p82 öQ󵊰~CuIg.*e@6^)Ĕ=XB]G&-8E5a}›"KdM;j,򸲪jDS 4!f-/E=/ٟOU|]яEgD|ZŲV^[ VF q !X/u<@S쯞]?5tkk8Ӛ+c˞[v荟@eC 2)߮wg/\, n0k,"1o_ɫCB?QL6dYsK62t{0[pg"@.\ls)鄐"k'v ]=*~FMj`pU`ۡGV:Ѓo/(8s7j Vff=@x~%K^@NpX ryNe>JdXmAȊjLw:vX1;ppm~ $4p 9k*.5RU'Nɲ?G]wvG*Ӏ?H|@A*w mBdr ^zYp4=Ը;ouU@$;4  k}V#;#BZ: _|/{Ea)wփ6RlKPo{b@{d{o>0MșJX>.^hKN"z;#pz=Ǝ=W埼\F5o\eӺ-Sg B;l\67?ؽqM{N|X5*ʯe?{7 \:3Ƶ'KRn }EYo= s_m>zPvtEJؕP̊5se\+ lՏAPcX\l!`Ȗ^*6a+7n,;XLΣZm ߹Eϫ;%}v٫#d[ɀ'bg/ΪLMK" -]ȹhkIGtB_mx=9ׇtx~rC! T #[8%ɍ WZN^4$cfgW=>ԧt 87FVy# lt>Kۛz"֠JcUL1e_Y FD?\8f)sn=qdVU#ypWϼ/-|ɗi %z4%[zkYfwQ=-A\5G箅Y6cL5ʚ|WQE+{GguYp.)S0GosK8SHlB,Kg}0wdU'NdU ?m晏w0}kpW(QgցVYX^wRsGɺ7˶ |4!C CxMѭ=F[K7g+4mm\9GQVB6bi_f 9,aLn9ν`8x!d{$4){"rBJ֚dSL)&@CI?f'XSAe(Cɥ+oW?A^/-Gp:aO:aL)4s˷[fQ06a)ּ˻0.GÑ]X\ ndq5O|Dov_328΃xow@_/y.6̛͡qܼc)޼nZ%8Ի0%]=-ylŲg86_,Exv?ZxKkn^t'/8pٱeO}cuZ|nZt'/Bdw9s\EwhwN]N:⮰VkNm&#=/ڒFsʤ|ѻk+{OdzdƇ*Z,4(rd.^W.ͽ덹uE8:>{rq#rEQX!csRtx;^lT.+JMLnB\EQJ\РN:Sog(OBm뙞% 9H\ p[ƝrOXL?SKSM2bt蔐V"^i=}ҩB掭{ZÝ=n3u cjj>rdۻkwyo燀cM_Ib ;;"'CPd?2ٗWs<9w-Zإ?s"%+l?yɹ7/=!~ǞMv_={qϭ|9Q:{e pWϊeÞ:s͋;}2% Ʀu[\`UVϞ9?OOU$:bG:%KOR%"rT.S]r9XmeH缦rg Sk>Rzk)P0Ěg u$+Eb esZWWGPY{RIr7-c`݀,h̦|UPN *)! gH!Q$4p&ba.'%*) Bj1-# -%3ʅ3"ÃS*e%PP)\B?PR&SS9rɵ~"8fx>oK*WQlts^#Ꭶ=*yS+ [kז|keUmbV;% #;㜮V\AF=̰GԟZV[2BTQ9CiEǚX&P|/ KVQ7/ßX[oWϚ{{ 6t۷-fdݬYh=ytΉ}"zN\Vi.@u IDATD!ڰ@$k58rd՗Κ*hT.}lJ T.5i[H+MR~Rc{2eRRuZ$l Ŕ7f\UsTn*u2EG•s2P>p(rAyj>L)r<)V5G D5 BY);) r6T.zɳ]B(oKgMЇ5?ԣrSLDon\\B^rfSŃjd5Ҡ US% QX}{յ2GM=OLCwy%XZFT-tE9k%DE|'{\D!ZUMM :C^O1 fK4u"^Bu & wۄ^x :M)޴h~"OB,[o @Z8^(6oW3=#8<Vݬm)㠿<4DQW2pkO8{v 촱1)W.'I%7"$ *\seS4gMYRn ;$[,~t :XAnIͯD"ݓC6m JKpjΔ|#9հ͔@̀_l $0@BL'+k&9"]x3pٖ~&KQ}>:+3@oYcO4BIT qE*V5Tn0d\`m?ԡ#BcPkn-1MoɊasoZ@u c~kθm_'^$nn+Jou`[L/zq-`.K }2#C UT{ %3b鏀xB\`9RArcٟnlEc [op*?yɹfLkQ3iݖgW[i9kzcUƂԱ›<,9Kt%s,?+ l@CC+ihZɲXOevBz:O WzyY^_E@B<[!1RT.zv8ARѪGƕݹqӢkgͽ4%C |ٳ^(uT8b.3C9+{v3c$E &b1[/<_/| $nUs2T̗Ɗenܧ;tayɈ`DVZ`$$$ʥHrXm'Tt{diqݦrqf \HYuL5OIA(* \ \Oʵt©\X8^r9^mkm'++PȼiUDN#5_s[Ux^K2@^j *%*Ry\-0*7_ „R)sheZ#LdDhBP:n ^=*ĄI|tSޝ[hڳs7jQQU˿;5owߢ'%\(Ñ y,rJcңSVG ,6rqMϋok~+SgNiw疭7VoS?QokM*FBFعryqbi|S4 PT Y3o0}V{.$vV92P hOȋOnāIL|GO*?d2Xpgώ{ۚ6hq'WT-AjJAOȞQY"Wktj'hND遑qc@ Wԙж6{6e> V]Q,y|}sԙoZ Ԝδ'_A].LH6߽Oy|*}ǟ[ƣ9++#=qcrw00{Gs;MbVg{)u`2k&v`U\,4Q&prKΩ\X$a9JX]M5e2OI*':H*|T.*l[c:GEdV*Wuk0c:|Z!~Jj%*M ۖ $%„Ã,` ZF0O`9`g [g&l`z]T'y*Ė٥l04QMH1L#՚Lӝoʾʵ5X3VOz-uͽ¹ފrûh¤+ ޼n0g5BGXŃm<o--T.Ѝƒ0 vr 5֠ZV[2DyjacּRєʕV&`ο&qʙV8 hN=q'#]eruEM?8ca-3vX,QXLr-[]Τɚ-e*E ݸ6~6LRB^dO(mf'X Q|raYu'Vk7]Q x@>aIbs*rHʅa%< RRJR= G2I 7?[*c% ݦrʴ6EnRUi\BjBZaFn gAh; SU*5P\29v.7U UjAP:ahT}}G-!1tEo%r"UHNbR!ZUMɄο0_ 7V$xw[O0*˯{)w\#H ZW_x!NIS$:dn*#{HPr.)HÃKKV69%LCRC*j'F_rm@Re" >rYG7 \$\\&ҟT[尚XCҿ)^&pi9I*}+.Q@)\rWT>RN{iIsE":%'p(ffrq*{'9ZmpN2(V*@R~D ȫ50=ٴ li0,AYg$Z$*T5M/aRgFpFZ̈́O9*'_H\+fͽtѴ% j|-> m1?>:srW+I r"qu%0olhhhg{RHSq#%iD0۲7kkAՓԸG(%PՂ) ͽ+@hHT. \+"/%[:T.rH0)ʵs&N£r7_rNM R­dngW5K~qʥB^ зT.}qcsH*8*c. ~ KFf5աڀ*KBRyX"z,Ht|hHٟ~j èCq.+Cꑡq%*,R `:Z3Be@7oKt,~&kM X!RR-K*|;rL^R8<+F7Ey;_{\\Va,lBJQDRMHR>Tfrl1`wIrȀmGmV8$Kpd*V_Z2RZ bY>$o$S 0tu[$GKVFmRaMJՑ vJiڹgp)n[ IT YE*;-ıbz.{=*R>7r$!16D5<W"`e[QUB7B3K}[GO%$u^Cs-=4t"柧J4<wW0 E[֖|;,~RUI .v$x1yQO(Ҋ ŷ6$'a!l7" +W>A E%vn覔cuhuDMY.q['5B!9d-Y?(A=K lu&"HOf (5o;FvV'D~5ZN2h?`W]Ф hi[EQѩ.jdhlVzN!H*?sλpZseM$+#8%#*K/Kqcń* 2=rCV|M+v4;>QY"ODo#&[TLhlU)`9IBBB YoQqN|%a%f HYUSTRښ[BV9zas.9k L~{q rS.%Ƌ98Wϻ*CFsyzQ*Nvg$҂-)2 ƒ` Cy/} l;w6|' ߡCU|K 6 ;¯|z7pѝ[e.dwk+\QU>a#mGMz8ܿ%ړ7ppBv ߾Dt%$]IEG2X|.yY3%W\_e#w\zViWk3n Iu&!ݕ 3J"yR[?J9AypΕd`g5k=)5. 8KPۘɄ~s9#Zs3G'lx)(w6;#?rmlp>t&ښձV.`O8N"q둷si_˺FsuÊB_|f *46XHHj]]SS'cWŪX]Tml|dUF[xÜiFj[2LF Ԁ,\Ր dlӸ eT@$3 i4rۄL |y@Rz#}I@ټHGǶNH bYϸCٱ.Ì[ŧ 1r?j`bKB$2x:X_|_|_n;f޶#GݽnA,0i\Eu5m=a8E^^w̹E,=U!kL,p̰GJtzMAp*4-$X)9D%X֕{_;9Y^B"_PLzW(jZ!b\ok-C 9F" iWȎ.ei\2701 IDATg3FKdFV,%F+\J}p&6CIڢ8\7%[: s,(C:%x}`N|Y*:SVf˪p6|!QfFC1 ϹqvuJ r_mnP@se>MK?|񖧠q񸘛q<.E7-kOX_D2r/XO]+ƶG׮Hem;FʈE$tؔxWADYqYmmC1%5oYBJ\-&3m|2qјq^8W@U/sZ-'O Y)RBJHW.SsK٠m=MHnR8f ZYw<='SqpC;lܠUZU%nnw݋scEfAI Jf@GL*pm@ِ=r!jGp:;1IEĝ7 r?ZE"#..֟jPJW%XgBfPQ=څ_9ϟMkl|}&SP;v@"rB<Ǎ^yo  HcUhJGcG%\F|d)=RdkE#7۾5d 5(&8'+jwUr϶H\jf8xYkMLOFD6%0q"Kf2swv|19V KfiTפ q;d ,RH*ЙJFV,鰒i넃 k 4䖃p`dA|TaYeW1DVN( H+PmؐV:g:{j藿{E_=f(?dpJD ':Ň4 u},!IETGFE|Hb~֔SʵUKH8CʉVݞ`g)FZNpԚ-S Dx_DZdL"LU̝'ҧ{a܄%94(AZMH>ˡUgym t^(Ch"'tU=@O0*装\KC*I KZCRyDgHN8[*0~Ž4B8x, SzB\VL4${j[omFU*26 Ω\J_JX]͑& "EkJl}DYDO&:X[ B~~ >Ѫ*51~Ҹ zyL}wwxں܋DHtO[tGWDBMk dusbx\@F-YEaD:5BKH拥+J޾}{\T.N(2?PddEH) FI'TMHh@3}HCsr3g*DTn>CRγ^t-*ϺSnכT.6Brz|YN¹زH\[SLJXLn%R8֖[*٬4 S^8,V}P| :e+"!,o$kA?)ع¦o*(JE]$k5ղ`Mep:^aIqqC+Ft5O0VmèIIg} tvmݿk_E ,*tE6l% )**!8E;. ?. z<0rTh<@WB JPht_" k Ω\cU4*yrPV> iP%KSjn*vħ`@Ū?>\ .ʵ58Æ27Tn#'[Jʲ_lVCw-'ͽdWQJ8T89xpp䬗J~UkE% 9:V~ k۠@؜咋Nb-A? بJO(c1Cոd jMA$qSh7kPw;Egw[5ͯ_Oj*?3*4θR^Im̶#$ԭ\~(sz' 4NJ b!DؔpLp\&?;@-aplG[dG\a vػRhV4grU&Mzv%sɔ0An=d8 m欐,Lk\4F:(\%% tR|FX(ࠣh$ӈa'!i+.VG4ҸS‘Wz'6?'I5i_لarOtG#Fjj[m5ォ~uw `Koƶo|pڸoۄS}wS*؆LRQ5t4+bm'egq߼%?z p 4G:b"!QPzHA\ -p;()[2'CLBUr XBB" đ}$Xf<ZH9R|b,@A>bJ`}Blkw\Nf |(0\{_.!(F\d7ArAyh. Kh~.dQ~'۞`h9ӀNٶ!_@ضDYmvD(>Grc6 T%wnO2h^4)ЏtYbqT,S < yȅh7o ?e.BJ 5M TFV iS/|iKok׮ل:#)p.|-/W8 rJ> +uEuYaGEŕԑj<:+7ph2pTGFh #/#ϔYUhB'R$$){1dz§r[Hں@D (.p+8ele>FjN\nV&NBEHWcNrSFs`>2\0ʺ%).roe1쎜0Q:[}҃s01xy~KX)QNg5OOS04ّE?Gcgɷ  CX+F8&$[ۧ'mC"V8"2>t ?]k) *OÉQ!JѼeqWg~WԌ h/=ǿ!L6k&3k wՌ}лcG3<W$9 ^ KHspxB N Aޟ>8:X;N_#ݭmPji mmL6BNPGQKԡ< "C޹S_@Xce5r1`w/]AE20 pPVժ<nH*yWBJ*md͕NQnjI 0]$%; Ɲas;3O (>Xr_N=PQ2/ I_m3lBgb&93̺&dwZX/V W330<+,^e_, ba`ɀ!CY$R3pZCrؼt7~]2¨ʬȈ'O^+*yddds ^ipP<:y~sq,w77~ͺT^-Go/ooҬ$Fh OZC *ԄzJʼ;B w~_ e }o=]tF'm;\85C'Sl$=! T9TaEL5u9ɂxzs%̷$+/K_ʗz{^og}T~ [;zW>weϴ&q|OǪOWnG㇟jgWWTEr+Z1y<< ^^.4 O۟ r<7v+ZH\ z|j[x appX6^|:aۮ^ehV2L+h$U}9]KeP^槶jz%.}SBƵrsjފ,>.HGen]^u&&dҎYE[!bȍn.b5)T; Pn.D^V^E4n\?n0,sMjnAV4VPX+ #TO ?-nڿjF&̷|ob׼(|ƒ3kmGFҕKW';>wbt@ךq֟}Ӟ^ҕuZ񍻃[loNn,ED+wpX!pq -ۄMHy\Bmx.)'dL)?}7ܻఠ8x957!cEU22t!wwwݮZe13UU!i,!ۙ%j:k f?&fĞQOMdЗ*f;9N+HDC4g"^]\\'`XQU )WS@xpXn}FB6dTW\e2w)Ѷi6+bῼM ţMf` Luɴ16ELY2s74,4@M5TkOۇ%CA7QB]gbT=".՟m4ywx)V-ֺ7u5S\U;mҕ[_7\ B0n\~Mkf<ڵ/ OiLLW긑0QP2}nUtu~_Ƶ(rKӻ Yĵ:v\ <鳠)#Hr% 恤WqݎkO1_(ئas3298p$cIr8ZLYtvwwB(4SYV IC?U D_^l=rir)M iv^CƼ:2YT;LYPao%]+JjfZ4L0@'To5 Urmr>r`,nIM8bUhLݎA&R͛r˷X)Y.)W;6#M>G(56ŷQ3O_?[;*oŇSfM6ZR-;4媧(!Δ[78gpȍB^H PXsՎ7j({UsyGE=Ƅ1 /gsjl^ZF?AD:Oǟw{-srp̑ăOD"--Vhܵ]m{RVmժ :Pt͑:?W~`vVMzx;888&$BC-7A"!sU=CYe,m.̡y)j;m~+pռںdVo ^j?q;^9Ab#@4r*[aOnN~{j_Ƶ|fw2 oTb=&,gSmmmmmnng˘4]|Ee|!3nS{XR٫v|֧f B+WbڅZzHhy'a1` jV>E*b40cqbAυ=r_i<esX:Ɓ_dov 2 &[x!nH#cgAdؼ eӄq3S` 뒆lo.AZ{Bԟfja[XjZ吳co槑ɱ CvkZҚ՟fLu)LԜ|g>]WQfՒoL7~8;QLڵϿ> ?ea~w|?lCqN_'j@&2cCEX$ e;Ry8"I")xPz2L6r纗=0?< >9x{$y85h+c-.qPM?d_R^MA3!r9ҐY m*bBғQesk[r 𮑞DHe4(^FdM(+DDDu//Q;]>.Mo$ڰ/CxZ;o_+@eg0(˗ME?Ÿ^)'Z6Ed`(#Sk0رʜ1P&Z\򨖠mLRIҧe@\ pS.!)$NVSB@1:fA5^LpkmaLp.6qbV p#+8 *ie_aO[?9TBr9PXz0\cmKWcڵϿ+__K|r1z8S1WцRC iN5 .}_|ˉ^xorIV ,PhVFBrN9\np:=FC8}$DNBjYJ)tr+`LSndef)mMyEZpbP Yv&j̟y/$Xא畘U7AʫW_y e(Cudt0r4>t\Mn\z!y0O|˃.8Bl "uɐī`]rX ?ϝ\ܠ!Aw?z8Xya$On;ڵ{ܻoܸ~+:^D&I$BzK5qw|>x +&}61h\`Ü1Nb] 2jwKT!E2n@!z8Ju_aQp$:@GPtIEq1qZܵm]2 @;nf.=7ӆT_!GѱÝK*YD>2ł0(vΎ=9}Z Ѫ7wi_x3@ [|\16˧Fl}_:4o5$ceCvwXmԢPrfAZC̐vL6̽r6(jpΓ=_mZsE52[!fE=^YPT.Bs-(m6r8MopĻnB(rTZ 7Cam ЦF4>lu[e뵯v_kj`zp%qΛ4^d_͝ :=hk7?q;o~p|p'$g&y}(PNDԪ7TӳQQzܐτW9P)|D/ A i!b)xPz2y<7SOy[;/tyJ88Ƙ ?=aMōY|<]LweS&VS6lL+!+;Ύ-:SͺDko!bS<㚥rsAj`fCRR.1hn]Hl3 n*Lj\T#\ypgMW D$UʢBkTڠhWna곂)QUN)F$ G$oT_[6{J ۉ2EQZfrX̲ ScVeN$Ju&j kXӢVж +t;=埗cz+^iF@fսKW*11nzl Adoxja:cjGghmL2ደ\ w{|c~\;XmN% &arH.`‰7mϷg׼l6w_~_|ꅗx ]=} R_87|0? *(r!=tTY(ǀ)WaL_X@IrrCx]S,OY 5$,O JSZ,ғNlΨ?1v؉*?TlNN|LhTL(LSns-ЦX)4՘v5\[)SQ`^S.:oUSQ.Dt?# r\gdib7#㶞)T#BxiU(W9[Δ48Snatj=%։Wc(#mFjarHd <pT3D {n̦7Z~}ƆO)&U8jmݡ&rt*G]֟OL/BoVɻ`jj!2UY(DɁ<?g;^f89ևܥ+rasw/^~F1?/7o?d4 tX~ ^y`꧌a~b$`cżzhuK>u7w;:8bONks[)S @>0&'{ݗz.߲gSq 塊d[n+#գAr^tS<P):^ /Z!sʷ|6ZMm Wyna5宎w$J3Q: We,Yvc?G7XSfFeV$U53+tե;p^r/Fl$}kaAʼcy5_N6k}vڣ&N op/̺n\}ڼvRblgNǣ[4V@,uI*f[ $AE R+[h˿.A7ޭ t 2߷L(xy8q&zJdz} V6;<_\Cx4@Dsr'xXqrZ\F$N(՚TM4׶U-%y [ Lxm7]̈́j8S98ԍ^DwT31d'XXUR#o\T$Mp:8 .Y2UKwSMC,VK#'3wwR$ 8 dfBDS%]dt:7 cB[j3kD/ӈKyR6NѼGʻȺ|Fl7ތ6`{4tXoyR@ԩO1f4vUK<{j\γ=%tb,?~:7 O*S orv̍(7\&h$D։q ?,[n%/"!bKc!u0x4⏲>zؔW4hnHTMZi.Ez\VŢsޫ+_ I$Cq%bWfe֤HYD͎6rK/GZuyJL'cP3F׆پHj!F;őbřDrlZa*m R~ =ɶUl1t677{^ÒŲ<ˊNUFP Ԭ< 9A}F`I^?kz6Z&B\3s?]^C$DPVpo_QZ%3UʀMwl%[6W+x{akqeozP4f)DֶˍBXamU'@mɋy-:,3QL`,V;7g|ҭ:yѱ}(Jړ=)@ռ{8Q},*g㳽XaV O>/qm9,-$G=qJD**~KsUɉ'17ʨds<UuŢ$)^}V(qψ<ɞH:b/~ N?Dr;ƪam(rx./3.tʶ.ʡnTսjBJwpvAU2vf[zW3ys27[I` •8se?MY^^T&[?BHq#SN1& 35oa91'GɓCpJg*L:[ ̍/ 7}rHwQmfKh9U/`ct%Cf.wW[kw~Zum[Cr8F۴A3vܼ kRF1!2IoׅZwXp?h4;S_B5$κT`nb-V~*cՊy 槠v]6V ؁vo)'LJzZ‚g馋Ԕ$)B˷ ȣ{C9y gW*m v#&*훆S}mYb:Bsqa&<6f:S"PY!qj7-mT;V̓+ץr֨Yg7qphf\fKj NaVO X IDATh! ;RΦbN&{*@v3a}xt,~a-f)R\\\g]`dy=e48[a h9x90 kP8P1jO@{v:XZsXtȧOmqA̕\y['r%d4zĆ9&@YA12\)S!)=,E҇xת$6=2`3I[R7R'+Q-a e ><߽1K`GOweb#bW10󼭭^W,咅źRTg%/5)W\*U^UDf^:ƺ##:܁ :r+fѴhg ̕~4mCwÿ S0"hR{SuxU'\"f#-![:s >)b1Ӗ!т0ޑ-7/{/ Gsy][£zKX#ߺ\.º:n'qTX+THzJUXk]n:1SUTX{S#ht0._mtgq)%>A_Z%?,fc˓j0r\%RG<OxF?>N-éPl3Bt7DM:6ڲ5]`^ yt'sZratPᒿ/w iP-b.u+Pm4i0l&%t"| D(Rr0G$T9JD$f1[LmE 9____[[C~D4j3hs-C墙pt9Ds"x /+lXST"Ym>oyw^ m`hε~FnI.]fly^>/̗>p86R UvztB m0EB\D. ƚF "36vDu(aD&ڧ\q6)ȒVb&[FxSK2osN1.&O)~ 267ZB`}F ڛU@B 6>|m1nT-N^ 9R^hh Nvbfw*gz!ObCiK2R2IɯH\w̕*s /P%%ӭEo|q~T(ޚe‡dĴA,ҧ@*6qMN l{<>IJÂL}4J,mDMʧT;Ԇ^;`H'xϡ.kX'39[fo]eԆБ(c@f:k|@\+WT;\)k 8̱u/jc7jʭ]ԴVd j9CLnK S#ZiيFXV%x+k]f>}X 鏸<&Kz(LVG#y6= =tB{jjeWMlQX4wcyt|nz}ރסL;#3 9,G,5c2*1כXY;@R,4y%?*e]LzO:|'ͥPMT}yU;n6D0' tnwnŅ`Ož!Φ!Tǎ3 r: ɩs;FϚZ5@ ZaZpZu%)؀ViG8DE&ȸ:ܶ.LU:s agV> YhM]QrvZo+Vr4:,Sb#i".; X=-K*xF*os6"3e%M=4s 7ZUZ2-"*ܚeT?=Ñ8];~V3" )u{f)z&gXζ[^ p&O͡șqT7.V`.p!?KTfBdFk!J0yŘY~.,zǖたv'i0G7snłd`|LD,tjx\'r(zYXPvS8vWP[FAWrP%ijq Uq2ZQ^JGᗮsXz!r Zj̚[`]ѥ8ɤVF׊%jh0K:!/DjÇэh L 9>;(.!Zi((6PCru"P+jH.X_\@N<6ĎC0'SD;뽜[إ |jGWS,ڬlU;|/ RD4I5<,Vʔ I`m{ z١~G 6Lɻ2MoG~ccLADAvݝKJ!( 7Lt[zݍ1Nj?|tKkڼܗKfzzbLe= !?*(߸L+`Ǫu IUw[=;0(ʁ\>JbTX\I!M1[[>gBG➜ucRL8;7> E膧Ktyn+UP*ٴ9 {婪aOJrQ,ATSΪFPgpP^̺O7vdiJv`HT}ww;CFΙ8`4E99g*PDJLk*%(LL,NE^Jz\4*fD̐U22lnno)oMB$W(>D}Zhoغy--{Al`k<3 *sبҷ7TY=3o@f%{1/-Dra3W~+\&Q7:niEبfP-Wӝm|Ua ~89pp 5ɰQsf-naPs[ Ɉ{jXYqJTdqiDҌJdOΎ0OpH F 됍oT96<JGs@0v\ƥQ?Cn6εSBns\A29?VZ&V&3(is;z/Xl\ U*@%K9˼ \> 62*/0֟y3^V)C.j4Ue l6\.{hٌa*qUP M/(s\L/]0fee9mə) K}7H=a'R20w*eb3<0_᢯~OdQIt~ m!摈O00n$\NL)L'P(XQX^v6=n3L,.v&G6gUr^m Òa{ʃ?Z?HJQv8U_AV9*Ӊ/9yyΕEeIy իDR MU밠 ,jX -dP ^|r xFsձkI~ hY<]O1i";wd̡B+efs\!r=]9@w- ketV_QX9$i"3S\(odbUVRӟ]_v| b$gp p\᱐,oR(O# d\ALj˨¤HE12㍪N+1̮OTI|<},iF?Q?ENUPU!|*PKiS_8884U˭C"8uCd=˺b ,./KY@2uKL-a_&K*L賸<)qJDLjF?d{iiKbYl1E$E^&GKn8DH&$X#q&'׊،=o kWaI01 c?bM#r\K7HCsD8͑uYD" H|[[Y6Ɂ@បAM'0; 4idv$dVͣ ~ QBƚ1T9WފqpP6Eb M湗gƶl8 ~ޫyPQw[e.o2ȹp&OGK8l0 WɐFf&JPT80"ySx_U;n"G;a=U9JYHUӇ4X+ k{"PamPUHNap,Fm-v(ιw]szɱmzq.P^ &AMո]9@Oyf,}ʬ@D+};݂a!x}va^F9V4\1S‚6Z$*}j IDATd؉xt|w$ W!Xca/n險Tc4ScBv&DƗē3{nA;nsǙN0StVkRd^RlPVekFsi5 `k1$n/6V3/AUf qppա>*{|1L KZUނ[/#yv 5$;g0zJY}dKlVS<<9e^؆SNj) aíYwlL Ѷ̆wxxӣ  k5EaEFTjeJ ESJN #v6n/Ɯ:/L2*^' XW60WXP!F1x?!(SXW6]etNN t/xVy[3_\r{"ycncuk=HL:_UI];a˰*'j om ƛƗ&fItBB-%n1NppϬI+k4Z9888 #7>c72*`+Mf~滦PM3mn}[)uEpf(˜#Rh=rkRղo0)3fE(HFB.`l*Z[=C1Se"b݁IBD,[uyo5 #q;nzI8A'܉Rxʕ?J8tglvyl1媎X<-L3OJ&N> a`an;xl$DG$rbNcC,j#k2HȂהtS$ =a"dzj}3q̸9M1~nBjdke MfLM|Rs5 U}< %.3]`M_ҡ/Q˫%ȥ: $U'1!ĥ.jLu9THܼ QUH1Y-@.G4dgxT {0|y&'?l" :LNfeS8)`MFNNʅNN) nl_pre.IG{齥1.ylޅNOf7(i˯8JAA9/式4ۺtPWtoк:Ffx3q#PwN._,.+ ގyriƳ&5gi'nI>3+NM||M&ybl> Ղ80͖_Zq3{ϋ+3BeFiJPώl=/*=Pcdo3y} GXHOt6:<$c1;i$1V90Wp9eTvpp`@؃sNWQ$Z0fхTۥaV9 K-P<g#qwYZ#Ӫ;ޗ2A@Y*沘HvkEjdp /"g#:,4EΒ!+*KϼD)-A^8?ඔ°]ZY:aZ݈ڢGTPw mx؁ <<݉zipl初CguppH LqTvsu)b< g0x8bebKq8vUʁ󼾐ݡV 5%$VIUt@d(Z]XLH;׹ǃV3\n%$qppXe /5TiZ^AL3')# E"- h0\<̞7mlv-I+%(OǼ7UѮG&Bt6lE 3͕Da۶ 3? NBDdM1xSSJldXQ[z>=MP[H_\ά22\L{[|Mi-fL4$3<6Ĕ+YTJyRNEMu[<9 N"|_v6s \䌅q hOp\&t@N&  ,rN/q 蔔xxBm7|RG$Q2㍪N+06M)U0)U"@.C6'*2Y׸&㊦4L 2Ż"=jOWqA9MMD,r;z~$D$&C?fVbb'r]"I'",)dS,)r&gJ 3 A90Q$댥?$]`Ԗ;,u \q&]T,RqVWO!Td>kLVP9GƉڍf?璩u8e0h2&۵Iy5kN 5w^ꔒV*U||}K6=Et OꢷUKiuJ z,DmDTv@AժƠ)99,1x:}_g+ME SR k雷H4;.4":g $QXK&>:}w-Xw:Dw1酩}>ͮm$Ex\&iD(A'RIt2I/L2<=RPF(I*)%d i amC#=c;dJ!CUZN?9!gOHڎ P@ '{:Y8?CfMeSʎvs>J`?} wS[to=3fZf2p飊%RQ}`rJ}`ri i֡s=MW;6'L BE*By|~ЫYPr1$"v;ϭyQSyp<-fyw^:׹NR:kR}́\kk2ƾEtʧwŻ':8HξQ)2 9x*Kui%)C""܁$xr&y3_._Kl [܉~ RϗKJ>mq+Z c/Bn|jl0E:r˵y͉@dz+Q]p[7 .$GPGX {{oƶhttVLu7ju@Ľe&/v ;͕>!b-U-lRS1 H_{ԦtmFKuf¼ Q_f"׻o֧ͯ%hh+̘ {3_E/Į;6>`y71qOW@sxfSrӋ+O@A8%mL̓~Ir#~=t`@^?ј?!w:tB}_W5lx/a|{*sK]Y S.dlY+p챥yFJdD<#7;@:888`8ݝGSǞȝF!gS3n6dYHA"x&F˳0- oB>ߌd"E66gPĢ+wOBŒӱVf,_f"R3Oh{Dba  ĚH]|/FB`us%g0,`Ay)g>k,hE6ΈX~LO}ȫUbl^t afñ}& s҆NXM4?ΧqLĶ3]sN" ,ҼE(K7ﵚ7sjU;;yK檒@-AZQ]r'nͬCa '|T_%=mC᧣܉/TX{ҥ4`LA8B9o P\%<= bos1bu/2bkYOo/Cq9~w79^z9888׿u_BβdF & \c ǧ ^*΂8Hs=u^z5`"=ci* I%f\Y==ٙi42["PbTOX~XB/ZT-c2kd3I޳NCUeel7HHeZ[3#U%TO+B;& (2õr$嵔)Jow^%0 2!jΕW,JlҸ![LlNgU{6"v3[*{IIF<}̴ !GO>={tJHwcf#L[~"~\SXYlT5jL|jO?&_򞡀^1;;  9RMs uC׾>>M/S-0eM?ls4 éb 5B!*=9> 416׷gxI.JYNN [t ab (\Zk^3XNI7X6/YyWR֍jrYg5IK.M4Ydp.#zQĚqbBa13 8]bȎ-9|xl%lXfW.b[bf攥Z&"6Ʀ5|5CASY#N7OIMd^*ǯ֜Y7Lp+b{Fr`WY"F;K\<6VmsL!ˡp%;('駃8֜oYJ~޿"v`8wG|ɟٟ%?7庯^M;cxgD>_t3O)E1SzZqҔɆ^LeH rp*rUX^wuٷʁ<B6hfa}<rh.W[@LqėeT }۳(lWq X嗫FSn&۠{ *$6| r#CNbԬ:QŚnҼM7R2Ō߅aν3 8:*$8rG~0x̆w>d7_6L*&RgϺ}ƞa-eHYO]vkZr:gcŔ8R}.]qT] IDATEBXElp7"Ԙ5z ^q|Gq_xLsDB3UE&$ZQaJ`v#B t%h+\ TPS&xgx)%syj~)Z.BnԶ2Y*ʼ.J; c@+QGytc~F_䕰5ej*z_+dRvڅ՝γ֙QU'WXSN쯪6;֑MǾt $fBH*TUr-S Ǽ@n%N2a׾6KH& Q@pSQt̤,:!M!°X蘱I_"d_H9jIL|3fCɱYXR2$larO1 Ea+Q+ ": `ږʓn GĞ}_*ê//^{fo/ywL*ic鰒r-RuTi;Nz}PNWt(&S6NgE^祋ݟPlȦ$R "&坐q,6|"YAxTF$]L_9gGզ2rUNf4gDRU$R8CvCZdJLP.GDuJj6$ l32ލf)v jIa)hB%8 A} e۞WqY3{Z%fjFMJm` #v*p(Z=U1Gfo6*ӽ0KKb_Y˖=--[UHlT>pEWy{`}}ӎ9ߤ̴ c裳DYf;e0qo,O//}~׼8NOV607''t;Bmx&JupppK/%vȔ V">-7կWvpL|*>{dWy'x~eahWa Xec<%X;b"xgCg'jewxgױ1<,/ð1 60UFCB*~TwWfe޳y3O<|qoF}FQ-J46Tf莥 kHɈHmD9w22}3tHe$~;nxK?|Bg=.nKH Wf˧O 8u[u/dIqsSĄW'mr"Qze?φœ{Alb߱_ˑ_YEd÷89s'G/gmX@@9ϕigsnH,%#a'G-o$91.ˊ"mY;'^n3D4z0c GjO&xk.2R MӨ^EHknAHS]e4f] 6W=bK9=qI?=;VNH R"\JjeȁN.Nʇz㑷j液KgWM ~`ܹsZ N&kы&[kcd.I6*L5ZkHđwoܘ es㸕\߉kG{xarPTnZޙړOG;h%܏HR1w}Kl6>[ʡ\@#dTFb.B; BRJ41:}KUI=Ek)o"֚ QXԽ/T݃{¥7ZqO'^PEvނJR;*SW (nYUhOFQP< B)A!5"`$|<#2r~$/-ڽD)YG^spQZA.KՈ:xS`d$3rUQ2yڅZY  _C0˝'z((<чRݱ&DPo5'uDGDD{pݥ~(n&;n|rP[\Bȵl_%#pbvh7VU/`I(2` *΂8ft k98 :Z p^"KǔҎ`Iܴ[ԤqOUd'\MDիLW~nDǻNT*a:-X,Cl=o#15ћp(ڌ& NJ eW畃s ,*h7)1ZO#( iepU=V@C<})8RZir v/>ndj22] viةFS_H6Z2! ${(Wms 0d):֣GoCXʋ& W>潈9{uٕ/y{V{Ĥ`RpibEηNtk͡^c!YSQ'}{3&&B|+FDf;n@1ˍA@k#vQH}L˘\ܐ9`b01oPYbh|zL]B+ ӪC3)}5Zc[Hύۚs)kCp] v-Aʭw X^Çp#@@ݧ?_#49D_I|G#ux""',xR-\ %CloͣM 8ǁ]}kAZ`}}VQgΜ)ɓ'̊+I_x<܎kM:qrq$ц^XfXOX7'SˈL5$z#Cf_1^z-;%{H,uoX['dSj^5#)Ys6=0}kZ#d 3 i U# ()B祥]Ȟ#Q]nAdRxE]Ө'f93bu ˜ӌ.3JY+a}\g׷:?}#FPHa{ZyGqZl&K>ALٌ#ajo{VV Zmcc&gD7XO:/>]%UU3~#\19̱D벘 /0:$Iw^K܏vbX9j ֱve-9c4W8HK D* m*ʐH1j#Fxffʨ\/JC9UW& ,J),]*ǚ\SP)U|I̝NE. ϶^>/}Y#E5x˸TaFz5Ni`|^̨b&im~k- lnnnooYO:wS*+(ٔޕ"=L]K_J_%zcD5_T#~e͐BzÃ7,p2u{,D B;6h`Mekeoõ &!ϒr6?Px(,7IeSxTT1S`H@z|fJ%Rw+(ֈҷt#%=O4lqzYD4=|4 $F-T:+PiOSiTɴÁ{. .ZlPS'T=tZ4W\;Mk$OH_-r$(^^-eUk΀ %5"/d./b)bHq`[)Ad)%FXwtI#/Z^86`/jq25dT1ٝO]s?z`nJOnu+َݞ:ujuӌ v6*C8/ J|lL3@YKLUG|b݋""bpWi3gmVC/{nB"Q4.F++IGbO蚓 nL!#1j3c^`~z.ˢi}=bkkٳޙ3gL@@@go6:~g^׳8M) `DipfbuG{g߸nm&˹070UbD' q.x?oG;.{#"mMߚR&o KڐXWPw}aբҎ"zTDP,KȞ=]ߴ!>q2\ڢ)IFH jɔ8A`GZM ZjExp˝'o}wAu$Q9+jD TNvL"?t'.ܙ Z}.iVa+++kkkSe' r`Crە-N!Uue zf|MXY6&ğ7$E&F]>;YHiAɳ["J>mytL;oXD{U$3F}jq RbJ/AǠk"8lU=FuE _w" k{CFkIE9k󧊲t%;({ kT4 66=3 ?U}{6^sׯMmyHȲ~b X8~08C!ُsDTYT(('| չ*,(u%vOYDR(4=iT`e1 ojrLvsjf6Qax@_hTe4ҫ;o9zRt@ʫ}Y2U@dsuAqisTztp7r|09R a\INZ7 [3QQI,|`I&dq(\-\Tn]e!Q:n8"ɰK:IdfD0culh%5Jz?}KMc}}#rN̙3{*a@ޤQpjiG$0Ai'OX_jE؇R׭,9 x8M<61ʭ%t]F<^τ#_FR5X(Ӊo4qn%d!K+?:F Cg2$hdK;XIҽb7{ű^ԆO85xؤ1= ȃ9Rz^ˑk#'UD4\>ATeBsTYR\@Jeۅ#(HhY rTUiPbgT=.!M:uRUbS +|@DpUS+ JaLJǔt*U8)ʠ{ȇL%֎Bt9Trk}`.D- _eqͿ8M꣕ kQ+PX󔙋j5tȠ,_TfVdQQQTljWExڹV:cQzdFe-'x"ڔ.^*} b0v(aҨ2PoU+5oZV]@(U4GK5 8$JjTJ+&g2p@n\3HHv\:05k  X9X#/>5p +iy+9K_Hē:|Vzarz%XY|//:X|}䎊:kr$d4K2s_n?^X:ujuuu&o/М‚ k]__l[YdIɫ&!$pVfrNU %q2yG/6+ *i# cM_hѥ:έY'M7Ńd:[W}hf NMѰ7F:ҲfYܣ`-.e8%w };wTwTd%`Q;uI8iUs.,^>y~+;!I|86WUeZxH;e֣IOqbnG>y<%Y鞬)7TbxQT ՕٳgtDG~w8'eTieJx'CDxeuy|8DG}Tu'I.j((.XY9CiL1"#-4z@@8qh2U@H$IJqX+V8R.$I',M1S}"2Ù)9lϥշlIN)&c@V6})|'D أT7%,`@D B7(gq8]ѴwJHUlps7護,q$ƑT ؔ+Y'X"ņn:2;Ўz8i߰Qh_#QF"~IIeQFaW 685&K#2Hd:J {ω gaQ JޓoZ4v._owe0u˜g(8β OP=w4/?LZV9D2ÍJ@݇,Vr-U4?sm7TSmoFQ~ [xjfF0 ad)_E`LKaw%=hZ_,ӣʱDtPrrЦU.YWǎ KW(8 7Zײ'IWӹڑ3壞^ys;w5F|(f9;<燁)B`2I00W~`+ ?;O$IIJz/{EyLܕ5G r:}G'^j gϞj Jθ4~|M.|['+?]jNb'^1,=Ə_|xx!{nK>؅ V KnT~ߌݮVڷuЦPPM{p9v|-@A?nY,Zƚjrf!` 4wϖ/^W)N>樾)7ǥu"HCwĤy]je~EV{8I92/10F.|^jo=KAn֊) V|2)"*tCLP@v:ě9,J&M~ ƚ3-qlSNoW#轷p{x (%-M<"TOĴm {€B>7΢.X*:.ta z1(デ^!R}홗D" ̽{ݻm\v!v{ԩթ3X63UZmsNc@qFb'O<~8sVnWȮa,flVꋍik+;O{ϿyLdJ@ab3#sQA80w7.$c 60weeemm:Ub=t.W$I|o!K B+8 ofGQĺw:;_lP7(WHZ/)({/B\ܝAѴЮ\"K.DLdbܭr4X&}J'xofF9Zw7k|* fU-aF 2ҴSfRv n @ 8WnH 8\G"E)MOFɚ EpUp=MKKg!ܢ#],ҩOQmB!OqVDL,"Xqi7 F0>'fk Mڈ> 6dZ½WzVkd.])(x!-@@ Tݫ`_{ \5f|a<@55W~5KD^sSSϵKZ>}Iz.,IE_ 0ؓc(^QE)"~4A{>DRMa:H] X[/5v}ZIT {Ť7`(07ūh](w,?~;,;;S PUSuTEa JcLQmnnqe;x{iܥwK/xW,А\Zi`nj8v\SgEG/sD,*R^|z2ENe7#7kQ(fķxW--%˃!3aWqzw@iX2,1k[f xWG-T2wy̐Yc-ŀkDSvqj!gtG 3XssH|+6" "p{{{/va4ts˨q MjigIB׏8Aɾt֗:~a}b]*ڠ8%4S"7|5}v&Vgwv0,OfKب.,ZB#OM Wp*>7?x@;,Z)[ "k mp.7i]O Y:,꽳@-lr?ܛT w@U "Ĵp%> mqKPޘL癳v+Snm89'w nɫG@| P>2Cw(1HOta- ̽WWWK` SiM7NM#JJ[ T\35fQY1X׍ommz]ޣ>Q'q%XpldBrD\ ̽N??23C@\>'.pH[Z8'EsL%Ҟ ZΪP ){Laˏ㇫f#}EtaZhi;y 5-@KecyWex8F L`\QIQQpgYF,x޼Y e% =ՙW P![kl / 1ýa%`*sFPtl~ ̱ˑJe,%:n|w?}U&_\ B֠dYSu`.+O\jh%۶#R˃ɓB}2џs/.681dSlyK$ۋ/]-*8;hgN{\O;MMmǕڌaMR`\,kSwpP1QA-fF IDAT# 4 ѩT+xeϋmU*"N Bq'/_Ay0kuĉ%6ST6Qa=}IID Tājeف3O*/mRFk{(LAy82dl/38#PQJ]y9wbez_iO@e]eU 1`sq-~\ybDMKdFM%L@5$3`iVu6}QGWێ[ٿY;w($$PX;o GF28HJ,2B'[U{/bpvmwҡ :N "1%]}}O$݁kc<ܖ+)Xmnt7ik/K:usoo;ww_8b>>,k"{2  )՛c-V}t`o$"i}o@DTT-91EV- U&SUG"s Tb J$Ζ7sb2'S.4n R4%:@*[)ejqRܪZv\k`c[TT%r 'am6%^M|LhB9–{&&˾Ⱦ*CuZ_p N뮯̙3X礒ƂDފ! JI a)r^∢;|FtE$r7Uˬ~<-~1_Bb .b#,31p=1WܺA-6!jzް'w`t]\FO,.0ùOxxX(@D@5k:#;HDDZraP[D r-,|-6^M]ݑ LS*,+ڃi̺/y񑬦vkoɤ qGp"uuSk.ʑ_ u8>z-6Z97h&ᵘIFA:1>qPZ~wb> 1K?W&s|$ VVV(_EJP>Ygz_"G9x2W!g?X e0 . IMz!e $RL~^+#sA̻#2FPch "`wqxQk- Vnbw={me k\3X{m=)hge2 ,sl>;?9 \(b`Ns1-5w`=Jn\ {QBnhY;lw۬Γl[C[4(qS~}C%GXnރ/&.//y,~ud;<.<EM0Il`v(677 )vW[#$@&'A̦0 5 +uP<\x% = 4JȢ[=X.Z\B<ԫ>(Icc >iE@bz)¤Kxf.w0eLhrRJWZ5xݔ'cO\ (>E>n+N[U](гzD"A0L渉 jH#jmy{md^M,:B:qgY1RZF-J_ulm~R[s|`gY8Ȩp9mR3<~0J^8K > lāѬ ZhǗuFDRod*d_SƣG/ٔ#jEɰJ(pu]s?߾eozMa 0۩tw«z[=L!R@|뭷?!fB1eG[٥ 'KnLԦ ܺݨ{7KPCkkt 1$QV:Pũm{#Z,A.x h&UTR3^Vf")To&7(,`:BChÆ׎% @PK0fTSq,ly_ mi=8o,!ǩӺ_fWB"O]*pum_VĜ8l8[s  0m=^\Eպ˅T%lgxH D=W϶GKZV>߼ck {23ӧO,#?2y<rgzdq?pb"teWSH= Z"I>^jqg]89og oJSo}Nش-sF6xYgP֑ fVs \TbWJ@@kq+Vv8SE>4íg\ofX-Bς.A"g V`+/%edsxSFGc13x"uMvʗ;I䀏!g/O[ggWDN\cR+= e1I~3WߵYܹٳgi-EH)ސ%8֖]:t_=>1Q̫{/|\H⤱>xc',h]n*6B10\TP*Sm|ibm5&v fU[, \0[GusZPS{zwuJ5^MsSN?~{Z*>ZY_~4ϥNM[}y8Q[?ο=` p7*a\z|̫P9[t) #/D.t:PWo.ʏ^Ӿ&UFMQ\rC.kk '@ߪi"6=EiL޻_uv'F+G^wTZݗXW]U*5jUFG@7c_qe^Jn ZZ\7*sde4)h,s' K-!$q>E71+BUtku/zJf+=v\)ʙE5ݏ#fz!Ct/ŕ#5v/v\1{`C-+hlll?~wkMOf9Pܷ]^6qv\W=_waat0x@K+H5-RH`*=f._qȕY% XDdDP4\XY_P9<Ů KH\8 ] BʘVu.Xa\D?p٢QU7D#a6Ly(SH $1jz/,F:zqaZWUK_{h?zD-v?Q᳸`ccc{{uԩo@@5ay4 s}}KlnSiU3.[ܘ[=Q㾽?>[2 3+u@!Zӱn~Qv&awYTiD6TEݩePn ű۷rIpW@g8X+{ʚ z~jb@G g{ɓ'?777CztƟwnLK,v\+_>f%*?pD6c i$gUj˵(dLP_:[?P]UU~Z~Zr.ǬTZU@Js.N$@D17p׽Y(jBgqs0h۴(Sܴ ;~nݴ IY)5;c XnqRLv%zQ0n}ܠGO Fa=lۏi,KwsՇޗQBzn[GYe`\r!}W'WP٩xWTmkjz6G0SK|adKOm +l(W4ꭝjv.v=#QH;guF*d|2%vW>'8:C_ T`di$.}]hNR*&Z#B*vUuJ41ٵ &"D Ϊӈ)}+Ԍ^<ཬq88!QGKKɱıevT9jf EboQq>QU#H/&Іb[KV.ygF[xÕ} }MFDDTX'?ioMVDB?P- ~[o͉moo XX{Ehlqr7 +buu駟?pNpcy[[p&7iK'6BTZT4Ǹݒ>j0ȩ|Z FN xtVTio0Ts GV%Oi[p !J&U=Dʼxe I[O,iӋc9UImԛi:qScGn^KTUTY;j dqbJMDMQ ' UvLJunwr/pWOFB+"^wE:!#Ƕ&.9M'_"J̚5ńng{C φLqu,yA:ٕ-^/"28W)i:GZ:$~ ,^[&Թ-j!=G8U2Ny"5TKb艤sRS7;~Hz4E}h-٨]Ğ3rKn7Α ̯V~G>"qxڹsY W2enWfQfvܡ09vgdXhW4m~k([^6#}JqV}9#"* 4,+VRt.UY#DHMeWVgŶ,'`'YJSuWO_!Oi@Z JU~7ݫw;]QLv7rM'q++% W)ڝ\Z8j˫P h-%Z8BJ½R<ʳ̦6B-pyy73;R wV.b*b WP7: !7kWn;7kKמiŋe'Oȱzނ"Ms_k46̜3=* sjMQ?m? %@n?}`ǭY.뮅E@jzJ2)ܹs[[[a N~-eM qaA4*c+@@=gZM:M8E0XZ^ٕĝVUg=6b,\|U?|h}6ӞQ"6JL'=/,s@(lM>U7kXo5k'GZ7>kN%Zk\ygv__,jڽKӝ>}:H-`vϥ.iz/?k !|aɞ.+O\/~p1cYS\Alp`Y[`~TV4Wb+ I׊RqIU/fN4x F5!U*iAUbѾ~M䚱4ݩ]\wS( 9*~  @b,"D  \U\<8G D'^{e-,K[n3TWHwEcwr&F-Su*<&5vpNn0s,LP-즯h|~hg&5O_WRh*xee[8J:d^Xr0>xk.ҔXi->@ZK>=yNzRO@"iT۹t}o`0<]GPt`(JSAm%t# r5Ht5!%[{^K3`fXEYigt1.xUրnWf߃4F IDATmtǕj;ڏ|eO iVKĎ1_L#DMyo'J|zfqvA/Ă9986zv6z>X׮7xN`"8L+1(j:ofKWrxa,,$vs|*&=iHyP'M)$ \b+A S =<WE1Oڲq{C RFN 7R5ZZZ:rPrX.:U48aFiigs FثuT%ٖw]9D[cKQHߴWvzuB%9HiעGaTNqr}K'7w?l-vx ?Ur8\DuADA!^V$tn%vնX.(#'ȶ3ݕzW.fnqi,k7eNEj-H@s`w*R/bZ.$00ښ_ L,>H}h-v}f܍3yX}lEC`n@,bmmqUlW:x\lg?ܨ\qp{~ǣ$g}3f"BF^4`wG~ r ;Uyvݻ~${'@WԮ4w*]Ņw9)6,*'j zUhc#h2zu'"rE ).r:y|Aq^]C.6~eyRPVAF*)s Pfك•Lj,L!fa/ơ#K%q,ad\KE OƲK=Y[MRfVv5R1U%4%GA,ZH`gNc/ƊŢ^3 xUrUrYA4Ee8xoּ|;]"C;NЪ@QY?A 7:qEol6> *@!{~h~KiT.?1o>~MǏʼnr, ;<݈77dX*XDž;A BTJDC"r%UL]3L!yGz/TjúVA~|t]֠"jjXe ]`M^4yz¯\mQqoQ)bjx{0DF2!\U[G;`$0.=v\ 60weeemm-5h"|g6~cccLr9؎PMhRმf/us_3OR4E"e}^U1*q*%eY޽R?r:g.Xj*lK{gH;E|mE `Y \A(ٺ 5^e ])q2pHYicg#H봽ݨ!꽬'wv_huhteOY0 n2tZ-IJ`'@t*1>ĜMͥ3o/k#%f0۹yw]wݵ )`Yߨ F{4sRPmnU{k.YugE|(*]ldql ⬟կ]\R:v)A=c[nXI07W>p瞝Qt`"@\;/d14MYw*Rٍ캫X7L jHk|YTh̍t_,gNP݌qD[u1//{ # 3C%xֈ+0[Rh7q(AL-7X8i(+:k z[" ^*eצ0#Śg LhQ|lT>ZB)Oe]sxJJpbs/g̲].m'1X!ԤZT }.]vT@kVSdpe:iz찟ōc6ͶyJB:wLa쫬,%GZ9N&j} tWрbݵ _U(m~g [ցx/3J(.q*S MA;? AbT/9Ռ1wإ13Z a5=GEfG)7>X):e)ʦ4݋tk8j;TWR-;1)o*3n&q7VU}0J0mC&{F__ͷyD;!TŷgznllqǏysϴ `v!޴qi9[UY;s綶"bC,S`vtY<:ibtZKkpgI&=!iLhZk{hR6IKHK}2Rn'aTZ;0K^lknNGg Jl92vs7r̢Jg(#$. ӷ#UоzN@fM3야gNOKIuP}$qi]uL%0 |vEmfW^hrv,KmҮhA4bqP0,,|ӛv׈ǑU<"/">5 mcC VsZۍm'kiBٛ٥m1oTYC%t(yhH(qQ.Y^V[Fo}R9+ ג\ٻ^יv}Y&.bL&7|B:ӻOST0uo34XRԔH<_NyBSӨKq3Y/Գ^;0B%qt^FHb*.:L'Q%< {>M Ú:zÜRtr Sl#b@90=f$vr9ޥU!":tC@A>fٝoc-u@@@qNR_:zTӣ4ȡ-<ӥpwcHӗڇ60)#pdK@On Fю2"U%Cn^$)2M2/ 2~@zJϴrJ*.W5i)hOt8skMvNOm9 3?̡FBS d,C$-iZ?2Qi% Pz깋W2[:l uLS {tGPbzbmEP&=7}s[}p1=ܑ~qiZs-Dl3Uڟ}ċĭ9K]hi}僯UMs(ֶi,;ͽiJԵUPrk7;W_&CL}[ԳbqaC :,æOS{ L;ulL6 [lsʘ5q nTlZU;imb:?h=-VµB1^XaN}/[^$UõKlcOgwuH(P$2,&NPv/kħȬo5OeQRI@6U,[;'1fx#"5]Wb=k@DZ#$ Fw9!c6U1 CŮǖt,hc(1A0RvɺQqjKBDv7$pf+ JWTB$I8In[)]΍ q!3$Vg'OqwNXmI)8 p{]%W~3ȿ6VC[e 7@iXQW9®w}?ʭFj;"h_`/F A{)@(N 0Kb\bmmmeenW ho UdrCE9 EjyAEeo[M :r(EԀc#ێ,8uHCUQafEDfYmDNJm 74z+ӘHMF+ Z^ᷔ?9{TxF^ZM,U, Qڞ3ɥ= 8W/e BTq(GnwvlOS#/X.]+zACȪGUKǎ!YJ"tE${L?QX2"q<~bV#/=xkb^25d"v hi o8 ).X]ņҀ~}K9sL`(gs d1-c-g ւ6Xma+s_u3vZ |$NڎN0r"*{0j=uRBe< $fâhD>T!T@4"5#~կbL6>Tn"M@0yu۽Wwk;Me4<`XlׄX2wUCSΪx(8U~ c("lVy-T!J@g]OӴŵ@߲:IA]BkZsb}ă"YeX2g"&ds`ؒB݄-aD_i3lj{w>D`qj0dWl*4Po0LqwTdʭcI;-ݴ3[ ܨۭ]uW `g6&uѺnc=Q4e=KEs-f+2M X)Bi%]Z=7҂vܹg'+K~&ڥ8ovN=uf鳸,hB-{e/pΤ** 2Ur=N/T1g|E J{K@@q"hp7k,߬5wqǴRTEێBXfkkk` 3ꈩLڂTAF֑Wys`;]ܞЎZIs[ju,\4쬹 k'ߑ4kԚW^uJ5REECضǮP>*;b0%j_]-_ TWPERyA@vY?V8Y?evJUo\ +B^+6FY3jLb֚kT3̌)2d~oB"jVȟ&*R~(666l_<8]πɓ'ٺnnn(M,.tx_{)lR2J?\; *ݬvntɘˑW'Ǔc𭊠"c2;Yԃ FX XKB>QpZpR}@|z ST|. ~"UBw6iѾEE{K);=d"1oT?(B+B&ioSʆyT.N℟Z~QעFRed{hJaibl4gNR0M#"L5ŝ[v"  K9`=-Ν;ӀYAq`9: `x|/EHonf-%fCT¡̋l ~&yoYJc }9]R60֨M4k~o|G?YKס"huWD4VB 3?f$b&3;W:7/tfLr&yXqA $3e:F+徚sG)G%Yt;ȑ.Ӱ-O9V~iw3Z,0!Ki ᠊a4sgEh7 l5a#i/:|,Y:*?G)$x<]Ӹْ=zYT}UTbYڭ>ަ` `F[ 8;.r9s jlbzEKh-RӦ+֚ȑSKruIRV5hqvYuVD]t,Mp";!HhʢYR@QknٛojRY7$_k*H۬Ez{<}ﺯrbJw1sإOVKxX+t⾾f;X3Q waB{CBwR;C^&{xFed3 v#Y_vreS-EXtW ,+v.gDlu93gřn0*-QU vI@@uQE) \5K-@2K#5W>6#j0Bwc;nܩHQ%1ாFsT SUKZ9g0GoՂ[Ω|D*}"``: 9Hu~es5`qme͘d] rT1*8R30ZQRN ӧOnooU8?LwB* 8։0Kv#,R0TFd*eLM4>i\kۄӌoł YntWMܷܻv^q辍E ('|w9L Sn - JQeL+[|` s|;וӾn'$#V#O;œQqaQb-TM Y'/:!>^ 71ҽx[(@צ/G ~Ҕڹ%,.;7qX`oW!e{j5V@Lm5#YnL[]DR!c݈%ݔ>as6dQiR[EM\6&?F ?IbRF#f[.<Fg~c?Q5;pXHgM-92m6-FRIt=,ٖl;.6c{ƖlU3M[YNY =Gb0{3唆Ƨtd0זT-ޫ%3漛ƍ%#N2#cȈ K6p}nD>e+V `(xryj4:F.seUW5@Sp<˃RE ie+ccp]VFUfc_Bvv 1tce# {M\Op,S|bS8]yy@ qy/TY IDATu'4BYQ=VWWY.]N@ (}-aKEjpF0a-e*oʖ2VbFw!ыphrx !AE-#Mҝk{>uU~(KiTĽ1S:I#2yh,,,~o2c A 2VKEx:GָC:o>Wh6'Hpw6](6o GIk&?b?4i]w+7+nД1E3E{ (nW*|rЍ"#]JaW^Q6>#˩nen[BEM\a4l(ܒb\\D|ǍCW_1>BP&{t̵aRVv 47#QN: A\=G.ɏǶ#ٔb#eJjFsm1jpa?2,Etu4%:;$5\kޜ$:h?V0R4A6elbl=͗с 7hもq vrY {q9a$vwrF c JJ0ORژz@n n]|DU/u>W-z o~Aa<sw"JmmGi[lna4.!KitK6 c>biQ &MMĄcY9VVVVWW'("=n(c2ﭙMee>mT%W=%d Ή=P,ɣŨ,5N84WۭnpBwͥKH/$nf^CKXĺ/͑Y ~mwjl-gQv$Sz⡆[ uX+KB#(꧆,o8)CQX urx}lHowjnuj%$Y.nU)YbuuBD%`ޣ,+-oS/@|'MM.0 g-l.e#rׯ~1 *Gc5'-Ws~-V=Hwov*R_]Y5TEjÛt KLܓ}f%'X9&=P8fU.Fgأ{u)9M{>ySj;bҔ$qgÈGXo7Â4)NLSES/{*TZrh6_y#/1.RDer >|孭-n8I1dXMBΔ{s]2x'-]0,i'{JVrtqB:3'ݐNB0a;Jij lwܑ` ^5Lw+dXP TPJWX1 7GL.=ձJ░Z唔R6n]/(B4Ma=Gh+nhChM`XKQWKTiVzV0W>/Fj/އ9 aѢ)Lpo[Frիx'(- Xg)ݗz҅&R:f @ ܹs=#׼W"|UV< x0JQP(i|dVrW([ dRoh%Yݳ $YtOubLyu0Ke]2tWYkrl )^r;}3t Z#6-MuY7t4Yb!T? yh0HVkG[]qFk6=&?2NYޥf "avG<!jp~XR#ĕk=01[,QY04 E})ɴwvew5KSvIR=H mN=5گ%G0K-lRYâԂ`?@T !v+:"EѥKC\Xsl9ʰ}'aog^㊠0uPg҃b1qV'ث@il}ۭݮm| #=! %re mcُFNާijR>pI]V`Ur9Ш{uwQ4;*B#c~Ty[x r.'l @T .2E ApFfss12~aQlv6Ai gL:s6ո/R[2E:$.CM}_eH,^2r8C}fJm.PP(MQMBЌe,0F~}$I48\֕E>KeoNmBQw7){K90pHS6rE_"c=6IUy+PEHšE5~,!DΝD FޜBpG `T;Vsܬ+7J NiVs }YU|H)-E6ڻtNյ$9sÂ1AٿZƄyCQ_z_[=q*O(v[[[ D=$^MyVp?esQ5nֈ8tD˧Ln'4&J (aiz?RWf;k UA ϯp{Ngw9H45ލØHy%5x:?~\C8*n9 mթBbtmUH< _9rFG1fGaAm 963 cg+MSX$F46 ofP˰=R?͘%$V#@'Y? ~Fi:;u8"YDrd;vF9Say͑.1`j/ovbFV6R6fЮ)m  66i.m_I'B/k` Q6\reV*{ȂphDPjj-7,AdA6)ƣa[O%K-zHBFuȖ'gEX6NHV\|(T@.N\7餰Xѭgtk%ITy9>-: zH|zV[ xxSp9!0dGݤTS:y'Jc\w\ɏDN398-_Ӑ_0rz<D t n;Y^zp{ ^@ *pL5@Nx؟ҁ4 0AhߔT_Y6Je`REu{Q\VݱjS'*UW:[55FVtwk'w{I5(hc!9Ԗg._ET_[gdT.7$Nv݈GӰ6^y9F}Bts)g5)c,!" d`B-Q6:"ԩS˗/ommae(EX]`#2K} &m8A|E6\ pAgV'l*wNcC~&N2r1/q`R]洹!T"&?siqVձ@ *'UheCp5` sQYS(UG^DWZlhTy\H =He"Ja2EFct8U1nkhlʞՊіl+ C c .={6cYpD byyӬ~ Y).,B2RqR(*a݃W150JM9M.m}[p3+>DrHy8' XX5dFŗi><`T7瞼~lq SqC ь*2(lG \Q+b qn+da׮ A-D a4ŕ ҴPN5 ۖܪq'K{WW gz'2`$<5]sjv1Sr?eRUkPw2 UGΛߪCIOh#(yY26Rt 3?cxU.а6쾐W7쥲igMFoN1 7uŋ*wyyܹsOB ܅.Q=(D NT,4lTFٔ]AԴϨ0ncƙC&@Ish NG{|$\ፒ4{S]v,cܕ(\'ʓh̊4Jt:JsvJoTatzmxC|*&deWZqJs89sVVV pV691Xl1G{~*]ZcYzm8(Z[Qk;I 9fW4ȁ9;g ~nIҒH`T +Ĩ`̽$Zyր!lyvtCWNW!L2iD[Sn[ "WW - vDom3$Q2xU$ڔUpeʲ46m`2V3tDu'N`j]QxU.Q[m'BQ  l^&dnc2?=laCY#P@YJ{ P:qqs~B\ B;jߩ(ٓ}rD8UYn}yd{w[VDNoC߆`Ϻև%^pI˖яGFK:~= U!(=uˮY\v!d&t@',ˁADK:t2pi$=}3NHdJ(lPI56l &4㬢1YtN8Kvj% ^:-1RĸC$?QC4_׏ ʉ'؟>(8:zMl, ,Xʮ{,Ȓ,L!hCҐکyK|KƤk]v$9w̛ 4;5^)htZRvGyMׁ>)Y [%oa>jt}rw,==-OSXơ`vubbqdזʅ[ 16;jЙ T_V1뷁B/!/'&?2v|Ra(:n_1VLvHWa hq[ ;(@vŘjJ@^|9lf$G}tkk [#جƋod#g8lRK(uV,F ct,ؠ ҍ;~/ )^R]\1qvw8I+"=b{t s1Pf;V-"ʆb,Jxi;DFP&Swc@GݶoYGh]vp@y(1DB`U1L#lшBʸWA=% 7t/Il>W )M,I Q*n]${l>:j!VDdc.Q_1Xq#0mB&ᑋHҌ_^lӝ@َ[[QV[Y6Gu ,ݦCՖ rms:/^tEƛB@aCHU.*|nGW^~"EҚSi[gnɅfH+X<͛wڍiҚhu!*^u :{s#Dkkk+++؜Dp9s'\.7O7C'(\{nkmDh]#IH]bE2 :=AWk(4{Joxv~vu!ߘa֪(?A B $۳_gTN$(9E2"da'v:D(t;/+x3=qGZ3vwTu*C’.5jWyh`9J݋GV)'>Ndj8`܂* 8 6%pYg .HK4[~Vqٷ5ct<m; q[&bO0~xu@9M(z衇Ξ=ܼ{FpSQ/IEqԉ7^ sl%Rxu7RmJ.+AY})[n& BH4H :`H'דoe!*.lk-rTMI_)GvC,B\4'o4噙X2(1%+J0ÿe؃/_pR#oQ1e 4:?-O/LS|lqe+U !l/rueh*?<4ei)EI̢T _T nD +W\|UؽDp^蒋@xx `qj^it]Lxx 69t`  e8P.柦Fl?uh"}bCxIݏ:6QFػYK+* [ >%=&Wꛥ7T AN+A-iC= x9$WC' IMSStʼnrv2E,z̮F.{*תA=Pĉr@ĩS T  V*X!qR>s"T,QPu;8ًZF_@z}p4i;Q('yW|ƯuXHW_#{+O ZQRyﴒ;0sb|:cTYĕs$8Xۃ^`HӴc̲EG?`YhJ$)3;:9x$(2 Q-]vH7gw)h0.gEKby4 J!Ę?.sX[[c$/]m`s၂ Yإ p׽]CPkXsyҧ .9*{;g-QfdC>P#'~ &ﭧdPxw.He?J*PMv0#V?_j${s~Xנlw0_bBmBDFiAg{X7uONnYFVGYA0A>_yQ1.\N8wJ@z HxMd9 *b+ݘ]Gqёoݖ^>Y7SB'^kvTY.Ks@fM5șBѷnة嵕ٝ:~Jkq/ՔUrC{7#XY+ V<\6ʮ]@( HqjCRAhf633+tksw]$j!mash$eTIr$J#z07gwᷩJK j݄SL7i7m! ؐȆ={k#%"c/={6zyyܹs?0v#B \r G+F=22` ^qhE{F)UJ>y :i* YK)>|.|8K,sz60W,Qͤ.Htvʻz 9LwNʹ$\CP+G6oXj)&R X_$V'aQC)sg s34D<5ވn>cSs7M5lZ L`yو%QgsƬrD^, rQFQ Nu࡙`sfz<5ăvmZ4:~R(:Bǒ+-}ggѪ~"Xgz>݈tgtN(U`,LkWK1)4='2eS#4 q5ft@ UDXllllnn2r'ɳVD07wʅ4pM6g aBIKGy.;((nRY(%b6*(iyX8dY\Љe.^HݖΫ4'ja=|. biP+zr@3wE+ ^gŘ PNM4e]dyF^:4ުz*CcZ7X"sdŃ3l#*K[qDsNa&wuRxbdw\.Lh@AkxoљNoF1:n# 5jƢG%(immmee(^裏nmma8:^?x| F. x[2OQj:BPʠJwF3\UY'o儧gu4mYQiO%A =b{k&[cGAB *.)FeDȬ'ːprbT\ e4M^q蜢שGZ6C(BnC sAS_Ѕ@dgT(m~NK L[Mxc2P s3h@ M`BPq0'SeDU(P)GޛhE}Z9C%$CI+,InիWYm.\w7 NW.--euG?Թ~ro1aV*A3*TfCJAy)dt}I@hs'J +ϔ{\낕)aE,,*Tr5ᲄLߠI?tK nSxwIpl}T/COPR_ |{5RL9k/43u z,o {aD@~(cY@[Z=c9Z&& ]j WA ڈ^1$h"*N,ZەhMT{(y&JԚX,o xF`4(BDޫTL>,9A'.\pٌ<.(SN1=.FWF c2mv.M'I e;۾1ٟI\([y8dتN5:I{$)T6.5dmWZL4r PẸeƄ*ݴX^;<@^{ffvjTh!7E >"R:ɣʢ˃R cѴ1ک#*jwU3TU+E 5Z U _!ty8WF G/^du]^^>wv>b{{ҥKߐ?E *I_(N_3ed35F5CϤI}}rӃ_ 5dF t=*]Ei*@[Hh[u7e4,rmB& \\,7:%Mrx2 2rUy04Ii֡xXec:` UXV!DekVi.Q~!dNu{Jq(oꃉW^t@%MnYe" 6u@8 u ݙdy(_FF1rq"̕;cKR^RنsEL|A!'cBހ6+Sή``0rq.9>0;FTDIBEsyL2[..MY􏆗p&io4CӉiuTMH)\u9wAl=rBSϞ|㔹w$Ly"W4prKRFVyGǏgF6S YZ%oj RpXHZӞY}WKFyJnwza#D.jꇾFg.j7TM YKCz*5%U-_JWJ(Hmet%lR nW7#9$ѐ(a7N"OOXlp(*~!j;»qVݷI|a\6t# {,"xL(G =jVw}gKD@Mz0Bw+CN?:<THgWDP%+sKRH: T{*M.2XyycH 9_?HkDm}ӫS8OyA!eR)v#&sSq(ńV>A9ʗ8 tʦYRT^|K4ʾ'c0,+q{P.`$/86TANui2g6P ^YTEnaXtsљ-St_U+)S hɃQw]Zq7ϣ@{ E 6X^^fz(.]4y[:䈃!7N.4{OX)sӞKYjז)x'+Aa-*APU. 0=* j6yzT]*qeᔅ44_UVls)(!{oG8*=+)(@OMQ6`ϟ&G q>5RA0Z+X$APuHP{&>X+2ڈlH`AqM^ 5\0L>ĉfBs)t+B_$zY6RD5j))zFdB;rU͏47fK}v/FAQea'LiesR@%M+8ZfR~,hS+jFSQ'&|e?U61Bd@B|nM,$LDQc l]7zaau…gfI\ +_r1(ڟeT'Sb",a<]t5G[ =2Q_8336s%YԂdk`c'kUO364X-7Dz2VơX =lƁώ,g Ymkyav*(E߂Y‚:*)7:HuLoYQ 1@C#'Ndy'?IV׾/_F} ya) /4:ʖ䓖FBѡuu-Mv%e dQ:_H K`Mj%{+ &(V,Sʻ~-" ](^;JNOWydSJn6EzՈjw&Y;P+ =@V}X"F͆_s{+NxfyşQs Uhh{ ip<%e@ڵRXfW 4%d~uIݎ`UULDك)0Edo/1 sO>݊@nooWE ]QS:$@b"2HE`!bt}v,l C"05ǚ-sk(L ?9rf,0kW[{_IijjQA d/΄Uϳr ')YG=!$ѝkgwHD~G(ʠE$ck[T:Wͱ6\t GFђ# цYTrCl%ӻ4R+m\nAvՙ?iCwy#e*cQqR$;$Bkkk \"͊[N`/oA.;o@c"df`-Ή֞=6J)ƒniY|Xեcg>̪%U uxjQJS Wc"Z9W\9qN)3f RLS.T)ӹb K?v [' D(. CD: AN7 KR%5"(efhWѲzmVJ)ʨ[2GgE5?P8I][J"TH89Գ&ܖwr˗WWW3^~T"0VWWYX(666#P2ۄ5a1Flv)LI$Nf9<$Qz9X_;HJU2IisSXrfj3LaO{x]/RL)ݻi4oj6ф㈈B91P1}d`8*GSPNS2^1}ElͅG=T&^l9n`\JO}lusoN'R͡<ܖ;;f=ʒ$Q6+ (K@ nO8ԺB >rE.]~l>NNg4C^CVyJvmg”b0eƒdeDn+x(d#; S"ٝI(!Uf~BFCihsiAAMD @ 6*&9ThlXxQIxnLkjvmU0^MקcB#Ǐ ʳ|T6SAph[?i*"x( ASx;GZe`!/ͣfʈS+jb0DV}TSůΗ~˅H]=qe܀\v|e2U8GMQaR`OWv-o7\*W9jɖOe\kQMHX0gGԠayyի .=);bcB x Q`W<. Ξ=yT":,//3=.Rǃ@hUbͿN"ubii XPrB~Hy] ^I|EA*DKPdT!U)!a5\s~f6192|6ljBk`Oγhȯ4ErN:Nn75zolLRpR׷̘(+2-cȈ ~T+h*@=U$@Lӭx& F7h,.UP.ve.8 mXћiVpbq'!ݙك4"FƦDr`Dh]~5z#U @L6>Ν;@(qvsD\[D.41( 2f5ڇ9 ҍ}18i)g"lwy6E0isjho!ME F)@Y " @b)PQ5WGj[ 'T7UF1 9LZr|Xm/5%9>ɠ/檦,@1qݔgyD"eftQtt+OYqZL#h<2P[OM-[L%Eu^,!xS2NeZ-҇?_$A!Q$,%h[52,2#3J b: aq9\:T=qFA`r$RL lm(C dְ-%r ㈣ C6w@_wka81GH`ܡx28[Sq(7ۋR\# >EqY_oRfXwP#y,M&>xidG1eX*lful_m%J; m?h !cs0dFRC*HqDc=(4cMI:Bx24?hPfQcJ%b8,ZGwA:/J]ҘNnVy=M/՜~>xbwH)-{O^YYtTǩS_.] %@ B)ay`ku墝ZpPR<~0uD,QR$Γέ24+kW6m. $YYtLE`DhwՇvU\B) F*rkW:q%IP{:Vt[{dnijF!̨Fy,7dZE!u!FSCּ\axL375E)~EJ@ <蘋@X[[[ZZb~al$Ęb,, Q8;;Tݡi.@MIA.Y@D$'f sM*,Lw9U_D2ʮk/}ƀyev~ 1 ^6sRf=fyo*|K@z'&e:EpG0U f^Ÿ<c_":=e{O4AxL F.C~V_i適]o qL`P%W1L\ $RiǏ٤\o $ݩnbTJ ķija*+Nj<_d Ms薁@ xN<ܼ{G F __b۷vD@%U`9&@*TexѓSuhx]B]ݔ pF6#jLLՄ9qSk3B?\1;m}2(`[%P4[JDruUflg{ݫg5h JhZ܆pVRHU!tp$ls8*UF,O/+C3%aYFbKA<1Yn<.Q8EF?]۳4~{9}VPSxXQ0oS]eiZn6[-t&VMKJI@q?"8|'VWW/_͌Te/^CYq:.p;P2AaHR S%ҙGc% rJ(X~Y ( 4jI7$ŅΗz_us}O|駾O__/&dQJI@H'w]K}'G\}KWzf HCn i?-M@IG"*;^ʲ؟i+bl4|;ޱQ \W5=t\ݐ+*r;:Xm}T7qb hA6Uvi#,n5^0)^)%vڼ[gYAwd\ƜW.Н oW_wZb|B[s6(g`-'Q;oU'^|ϝ wpߝ뻟ǯ>}ʴywP70!77](W1΁ WyW T&> ^ʺa[i5٪\'6U 5墪U5rmxH/.hcuE6YP[ һֽ#JhMko{_ur?kɚҌi^ՙMϵNKu;SRZLB;,r\)Vʵ(Pu^L̽ wEw틎m|GQ~x_|/^S_=BCJ}?-Cb*796:G&iJ +k89Jn4\M `ƨ5<]< 6?Ŷyש8X[['?ɚ5G(F#JN'Ō|Feuc,g@',:#&SŨ=\ eb4B1+ FaYP*cwx?{M _>~mHaAU.\~?no~V[_S^?}.B@,r ǚs7F<@032TrÀl VEZ'WrP$lV{CIP /WMFeŽ^vqg^ 9<7}^owaO~۟%[H.s &pk\́aG1+hUJzVŧRgfA9S! bF)jFT#"jTL —i1 E\܋PHyP@ ,O8q"K*DQd,,-~qt ,Byz_((ͅպR!2* avTJb؀2BbuݑRfTw!n)AC+KD:\U %20,s Q7z>SXZC~qiO޷G~kbm*K|; oz۷ abwgS|bIWUA V[ҢxBrsjI{-hgN@UMWaSF_ÔKu 7@Ƞ\6;ʜ,өrԍ@[Mqkq?gڕ%LK"(aK4wA=R"sH^شx(r~qMt`,3;۝N׹*ey,⡓VQ,*:o(ccc}{_O^^^( eNDouZa-Z:7%D8ke%K6]7ҙRԍG2Po sb"@K"8P"2U{d%PS #UfU'z>1uF=软<o:*c>CnqIf1n{h̩ ^RV_ Qn@{z֬ϔ֦QC$(gﺾ㗝@5eZ@OI|>3}5H&&r"9Rmfy ~$3s ^Ca0.Z!A4D `}}̊:y˗5Gy0%+#-2&5*H ' KSthP%)t(@!⑴GSb`*b3>DXqyT"@f2jtai'?,_G;sO^}(*%mZ)qykc?n3 av y}˓u5,pͥ2 1B݉`_S~ȗ+TЩG3I6g7Ou#oo~7?7_w?)baq¸PbK^F _ю)itZO }Bv]M\$}( 4*hD 8beD y9аBUK^RtzuzR0:Qrg{7|?^g=n}7^tϝgĚ}}o#fϞ_{? JsޓqjYNF*@xa얔M1ƅH] h"?lcVp4QYJ7#K{F G3Z!BS6tF#_yZ;TφQp Lo[ǔbQm@>[5q_}[ eGOeqi>>.Gր1q L} 6f_ufH˃ӄ0PP}@ ]ZZ"G'N`G+^wNB u {RPh JT0ۺ%JzuTTA^ʄSÁ_d&{1Bb<(SW #ԅ*11l+)&on-4Z|Du4uczAvųZSqŊ8=+ΏW6ܥܞ(2b|~ؘ<^t1 XӍ[F,APLIycN0~8VP@u@dgbW8<s n~kp >kww..-#]ϸ!yV<cԼË8RkSf\E w4!xйc*8)< ϐ<e M`v#%xӧGgΜa~Gp dRjbPpZ1 ᇓԐHc[?dq8}l$ebȚ]rnfr NwV}[1Gw}ozb~G> Gvv/m722* Niv3fn~,0-܄QPGV^Ex#W%-aRE Nfn!YkNȇ;n/y]?/~]#d}uD`YIe&DGhij滷6kl+I̒\d`$oRF'T}Gu:"yXleeɓOt= SI:hTwG%x2̏ v s<@b^ @ xj5myOhd~aWPk%#م&5_\GE Q.(fc^NwnaT慙R)׬~??h(FEf qX I{(N$d-q^rJ-H0,{r5]z\rP݊I~$wSRi*4,N>AHfA㹔vyQ|n3<*a IW9<ȟf%)A)P0 P`fl%GoLJ'A GW\yǙܹsr1ުA:uKz Tr]7o=/T k{t|׉{a#H2YYBJ`S$kYB=Own mbxզRsW\G taQ}NE(0%1`Z6=VdtzsL&r"ee5К,na9Iz o;v1ߒ >;pxnoLBӔ?~4,<iIKjKc+W;G8:3^`X H&7F!Č Yz+nO*x~WLb*&1_=cE.]@IMm΍&B/xwaюEʸo`Ð%g;7/vz::&Ow'lVAx7kAL.B7,ᄋ/12Ӭ뀘TCr+¼2,ȉ%‹+~ձq"Jʾ\dB+L(. 0YPş+ܴ*W{:zKZ_T v?;<=n;_5}?whqy|wk;zd^giQ&'wg"Ųo\zX*蔓Y#|*=6ߺ#n4d3:޶nMUGE7_^'컍Nʂ&YG ɭ1i¡$~i8I΁)=D %} }qF ".\n*qAqD՝GwA A e+Dt*9ڄ}sĕ*ld#l: 0:Hr9!(<7s8LL [>4?*q_sk\4rR7kό3*!/ x|%_ΓQx.~pr2*U~|p,U6rGJT"(E*;Hdu@ó*JAeג_&qWe gu1*C;!m1#ֺbuzqݨW0[v Ƕ.@1uqi/_>s9/yٝ_`tXp4vU"-,o|áwyC|W{~/^}_2 ~ ~{Dh4EϵM!$bcccssĉYΝ;\SXE/]ݎ@ 5G577s1kk%Yo/A$"mAEiM?}=/T |{7-gOOnW]#|am דڤOt+;=scBwGN?rXHe4+3#& (Pl5 V-UZ+XؿZ{ڪ x x@r!؜ٝ}yse>avw;~㑱*z;q\x0yaF[?F2l].a PWϜI%1Z'%bNkϒJᑥb0&H5gT88gM:;+t܀EoAHe -վR{nc'0f<~U/^6u+fL*1)7o?ChF!r`^0x2Tɣ dyJgN=|nXsSȼ|XB6c'^13&'Co Wǥveٝ9vB GK?Թ(־(FFˬgg)ٞzNS'@FB45Uar$o)Z8mO;M0!ҀNnM|&4TΚ5KUTT 'Vu /" I5;n0ϳO<&FgAFB? KUNqpd\~quFd`ϻzED~Hpi.2%qUO[t?~ h@.,2R7[ 5Hdd?ayg"9pٴ.~.\?':t+W3֖~\sB77$us۠Lmy[ni;iicc4mC:a `(d.0.T d}uh +$rZicN5iׅol O>\t)5$- &sMg+o* Zӭ}k_{ͦf#25ZRCaxO~ҝqŌIW̘ˆUQ.h ͞y—'c'.~1"MH3>~Ef]U:hDi&/ڒ7ݶ.L>wnlo7nC~_ǜ(hƤ .;g$[+g5ØD\+%,xZRg $ԓ秽bGQ~ꖚY3DxiPyXD hmQs  ϯP͝;wѢEb\15`zz6'`ڥr\V%ѡ˃fYt+gU* $6D_yB3{*gL t-lIT($^> F3@g57 &ٹɓ7 gPhBtgc}D.uo}ğQ>fROȲ04aOb'"Yە֎iL`T^/_5ms" ?0~ ~\lhcrgoWoL< }@nie< 7omCߗﱝ"wVo铌Fsr#r῝w6{/%)ӝqW̘4(YwVƼ8iǎ/(y_|?kh*1~W/#^x9Fa^r@YL+4_f?-X|++L8ptL=bx]CgxUɈSP$I:pm BVB[ S[I\BtCmīP]uQ78.52nȮiN3|\S+0Ȟ*Gv/5p7OC3?FIl޾eSB{yN9q%Mhsg{K5Gnޱg;ٵ_9VN917o32欟 ;9iJ&]P܊uLCc~XV@jjֳ_ ky,+(dAMփ<وzUsھt5b~Mf<(1ޖ'XьIUb r{rp˧_#ܠRS_vG^x~˯xo7rD<<6%Z$ӝsn(iyů>gy{ |Osga'>qxC>`k65zhuȰ}{O~WeM Z:y + IDAT&[$}OSI݁ȏ;xe4A^z68t4~0h9nbn2Eš5kTQb;gD1'™lذ!YKė|;N@<V:+V< X?!HFw_3Nz`:I:}ܩ?qszZzV}-kۆR[6زyů{890}oGwd93+޿#y}S3` ,5GJW޹jŷpIS/xo%@? S9S='$WM~9 :ZS{fˮ%vnD,hHul 1 ?>pU5zY'k`܍yچu_~նG*k__r FC\]U}Iys>8(%{L[6sge<􅅯@"PoX?"ث[{oXSp[S"<ڋ[¤{ڒU>{KIcK/̨~kHt \ &~hFZtm+ĵmS9XxDDF|q8DWUez[lھu_ؽs**<'qinY<G[3'}j"QJ5* ^n YЍ\D4̴M ĉ}<96fXnPPZZz!C(?(W )xW\@-[ {sRWʐ6߷718Z~.F:%F~N?KVd5Y,F" yaiqD^QY܈al{o~__ʢk{羻ozK֕nzM;lq%fk(]~!W@fj>Kdg_xJc8W ٌ@29:mr}PI`truE)& 8`1±" )}$d(\@{Y\aKb$;-Y/Lo wmɎiP3nza<)0i%FJ^o~u2jnlO)tg6zVdnjly722ÉB]˺^)YC2e`>~,Of\vV|C&-oL(;;[ YFػD ˯ <F\ |HzyO#k x9B;k^ȎGiS.o k29LT W4N2&!rzŹiVӰɦF~Bo+\Os ]XO;ƻozpjI0DMh̙m/5~ߒ#"lV{B@M'|slξ,D$R)dt4WVv5tW9ޖX#bE*cN%$X #bl Q\Rjw=/ş&e _-ZЭɨKBpE km0.ɅTx[>]Bnހ3&!ŕd땑#_Qʺ[n^stF$r;"!_X 5#,.~ɠ]bXSvK"ɱg \}>頟R5<;p 47@f<-6̕}] $-ZX4@aԈ0ɵ\(uNJn[ ſ4́aY~پ!ЍI@$6n.HD fhofpi8!,ƣđ;+ _lxv.٥\*[uin@J*[<}7>ŏ-͞(N^uk>ybb+ ;$+g}Sa/O913m "]KqO/jڎKmU=4*l Q9I]Z4IG;+OHjAvP}l$G#{~ƈjQ8GƐ e{K֭Xđ\J'8m[d]o8 :ذaCWX5%x$vS궲xײB "ֆ yK~"U<*7n_no4OeglQ %hna El_I""Y")np JڎC ؀H`ƍE>vV}HeS=ARNᒟ̸nU55zM)MvaΠFǺ5,J4<"'=AN63FQnomn`جECx]5=%d\pfӌ/uխW::{rʖ%n"lF~\\+Oӹ, G$Snڽ,pG<^HxnuU(S'nS;ƖƉ;k)= )UHS~v<ж8MG/ 'NT $Lr} R˅_g(:B-Of@(xD:k4Gpw RҰР;oۺ UBd{uK'kuEYpjj hCyb" Ձ*k W᪗߭=Roc (kMC ztrھ Uvݑ %b@j)VrelJ-Ûͤ~tX?9EMWV+0;Ņ ?@WķՕxɣoъ)&&  `!_ڡFh& BN(اS2|?fRK ё]TqXRR|MhX|_ 8k^Հ.LdDuy5ѦҀ?'D};ֆMJhrIfl Wp^mԜ,W)@7ugpa* . #ͯ+-y$xxŧ7:ϮF--H0WG ]a-SIZUnsSVbMbGa$6/@ï/rI Iud.%Πŕ@@9v0 HtN;:WE,,f( yȍLMtٻ6C&s (B]\ǽ}҆p ¶w3f}2츘榖{yBI|߆_)gNC^iɑTVSybI%<͚e+Rai¡TOF(IL0fܩI Ub=-av0%|Gy|4~8zH$` ?o2ɺ^:N1֚Fߑ&_$e3d rF(7^S`~4@d̖ j7UL;5O +=k`]E/8F ֿᨎ6h ‰YcAf31JkhyE =?vJxhD Nٔp(ĉ>෈#2Zxx eCRsەXŚG j6ԢE{9徠SNUKVZ:O@) ZqafpĎj$Q.[ ke]Y$5bF4}S*$Y5Wrz vP. Ƀ%v"7Dʩ!%eDikQ)_kN 6'6rTFzٍ~n# 1ěի|2KŅurHf3|&+hfThk'$׬,HY~x IDAT9/Q oFgI`'7oTc=ԊD ]ᓏs_L¹X:°I?X\B3Ib8ɲwEu fco+hbphMۛ"7cúgfY 5fUΙ3GEaaaVVJ{{W0`8z^`"n' hzGL!Sa+f~GsNr`6'''l:f~(+)$V .K'ͻ] L1cvC߳`gQPx>[V9\_p]e|#*E[)/jܰNWk}ƙбs%^9SCe]5g=ks&V4:umL$E:7{tF&[Z * +Mz$齕uS$͞wیLU2 4+Tݠ%R$%sIx3Rݸ vWGB3O<±KpݥN+`0\x<4j9Ʌ2a(fsX"s#~> 1Fl E!][{544,_W~ Q@BX%1Yruab]$KJѣ⧫ġcI6 Y<0!ưͅ}O~@8TW_%o]nޞ}ӆt3Q|T ^ЦH!>&3 md΂~Y#[$*BId(gkA[7!Ƿx5J7%I~#k+-?0OjכȒ 0Io(,M>1S ?vl'g sb/]Àz`dİ{vt)e/xQNDD\35% M(!|XsQ N qJF J{NLs*@WWR4l'%I]?~DL`Rr {ʉԛhntM-H<}QC(7.6dٝ|?C <.{ PB <:YZi~hUw;8[^G`<׬8aO8-2~,٨:'lYHŤt?^yjK%8]L(7++kʔ)]V&8qZ15:w5CddO Coe9b1H}BLS @=ǗkhxN ZtH'u⢉#!iM3w$xτ sII5eM,V}P.z vzW޲\ s.G&$}]nC*`cmIp!ŗ#@B=*xFux81۾1=iZģaxo@m~*'CK'r4 ƒZ-!R{VJYvEՃi?1Q]UhA{\yĭ&$FČb'&4IJ7 uaJ$Q(P&ypUSФeN4~(߯ X'vC#F uTInې\MFZS;6}Wj7 O4O9T7:hT[=д2E{ XDiiiccꖶXr* ԍ;$) .[(q&tKJ; ~eڂ ݍ1ko5rR{ҍk`!)%32wӨ*.آls^yR930 r5wt,k( 9<O]j8\g'd rLCe Q6:ђؐDKZʤQpvBwԎ^ZwW~}'~D&aQ|CRَg6)Eͳs L: 8 WL7{Kyuqh hA$jD 3S0>[ױ}ga^.ɥ\r+"m%8*R: 䞦=(m/l98TLZ|f$3 y:,轕sӔQ!#RРt8: ` Six^|< LKDVf$-KV ؋8=QD]y۶mGHJ؝$q 6vv%K|Ħ BhV$cw]n/h3+; _o#r9Qw>p]r\E^Kڮ, nfͰip I{O$r=M-X!VNL9ZPU9F5^~WUٶ]jf,MP?DU.N+؉Y [3~  YB:a;h=ܾh/^ZmBӵ%I>o8SU%l MjDXR*4`NJ "hE-SN HsfpN4b~?mjFMR~ޤqt$mORr/FP9U/;zmˏIeq*~֊+ z,?hf=Y"q[[5K Nl۶mjB+p.*" D 1]A04 U9}SpyIT}`FT^2ӹdedL!3#GI'Gg;o Gjj^?iП^}^LKܐ{HN2Ic2B+w#5z;c6bAH $x {у[}5ɳ@g^'}~2djNHεe!? ~?z춹uYm 񖕵t?(oUxe./Frl,% w4?jhBYsWC›UG/&J[7-6p4\B$0.Xpڐm$:@kU]>q3\-ḋ}##X,-u3 CA/22'C˅0jJH,*(((,,m(@Mr%IڰaCzPC"kԜ#nEYY-vC˅xqF4zK?Y.n4 VVXqD\\_5[|uJ by_e $@d< Vإ-O@ `R !I79-=g$rUCx ?s(` ⬅-Y_5PpHʼ]<٫a+IK W; @XFB+Q߱H>l 2W7)a؈:pb݅v[I߮jLCu|4}:}9(TYHݴw zOcKMU]q*|fOcLv 4dh:?~!^5Uu ?dzW0HDYQd@)[T)Xά?? -U2!D=֥/^3'8ޟtD&ӰG#R%`'|u{}C[˕1)T\΃i[p ML?.b㐍mF(.x>@PRR2|59sH_\'9y32?h {<&\5R-5UuPrF@,a| 4hsV-]Fɔ9Leb{tN[A9E!!VS¯Ӏ},geef'feeZ섟4vvYKCG|&_6,iLCtzSTWdYi8{cq_`hi%DXn0jLcaYv'pjj@vI:GD+L$ZvJ]nf>亘QDL5}[Y(5f\m+۷yS3:k‰e+&?" 5 D'$~HELh#%0>jVulk4c:tL|OaG<B+(,1f򧅯g3.tgg Q?ޚT=M-߻n.ߺ ]}klƅh90Ž}oOx #W{$ƌ/~aB^sG_+/?8ppH@QW w&-B܅ ~܁uMޔȉp|>o2qPNxCj/ k d8BF/Q@iiiccOqquvU L1&7hl1 Xm|RJC,{HgyhDwl6f0} Uf {w sBЈF! 5ӓF XG l9kGi3'U}B{#t"@ba;PFau(I_yc׀".2tӡ;4!Mpy<}N- H_ăU&M]ǑHzH=ϗ4XJ0ocƍ3n߱uSyue]ue]fVIO3n4-]\̼;xED6'nw}Ҩ{Q|dy'f` b˦`wN?*hv̸/7>lתܼN:KypҲ,@ǜ XhǽPg#q3_i"DSbY NU>hsԂ+3{e@d֬YJD# 9`Q5kbK,{#`phUpnaV$٧w΃w$ !?W4ީ2q ?gltOvS@H7ahSme$I^$2;xnw<5w&8Vd|p2P֜c^ ZUFPs/Dxbk$kwNFoTK|DGFfϜj;j+c E iOm]n@;)Uۿ*B+i2PkC*C^Ig?jVq#Oių(bOdp؅EW/Zx̸mOc3~{r:}8=ӿ "~o uS+?y3״}Yo};#'_}d-wrbŦ9zHX0e uCl!`䫫!K\N q]xi*q%ƴ(D2X9MҌHٹ4|4i?Rc!ma+$VX.ZHT@<#??Ȑs~)B,{ӜsC+8+g4Bʧ}V<\\$CT'%=`FA8rrxcTXx˖eTվÝگO`YJp0dݡ)ӌB`"{ {,p0פ6|$"G~iҕ Qz$K,X(#.bWq/>cp%ˑ֔Qn:|QPmIHj::>"}K0jy!u2##o?d51Z-‰(L2l\hPl~]vgЉ1[n}k͢Mq6 4I-# `]mx5T҅}1q]7>Y$zd]͚ۧ?z/2o|S+FT2{ôqs7IWс.{jŏTJ~릊_MߑSExdghl/;ұS3 iYY"p\gy t4Hnm۶M-,@uU@R5\"uF-8SNC>nmeM:]D( E-~Mؓ-!kuo|MT=+ p 1r~SͻsP\BgY[:նKNgFa$.us|7b*Gd@ۉgIgZskjkҴّh?!*XE /IOV5r 8NyfwŁfSN]fXݧYO«+̲'WLN]KWKY@3GΝtw>=sAMU֍[6~ssc˘o X+\wo|M?#+ˮx3h*>_ʥZ SDD;d5j/yk:4jX 4AKW ohy<U6HaF/vψ}-$ZS@@JJJQPPPXXXVV&R nr?SKpJ&M& M%(fC#` `Kmq&I9cҦ?vlKMD&D!ʢlTV^ZHW'r]6rQ'I;)DFsSŲ%渞s."XГO?c9dhK̦&CXJ`Щ)֐r+7uĤ[׹{TЦّt1 IDAT6;hNL2A.5c_51yC>*񣇏_IE9uƊʺjKO|ɕ&2J;[7VDɞU9#DWBvQ'je[68uclݩ3&9ę:%/W S 5VϞ=SSS 2 }x%܊t4wǺ.i2p2)q,hO,mG I+,T-h3Hzdgg9rD-O?=g+MKfIy84Nӧ섃/F82՟ GajCbګo9x X:'C~`*+LSJNC)F27|# -\`IN7jA º7?}V~( L$V2=#[k>r |P:x6&zϵ6)>*Q>RR4ݸ&%C=d?vT18cvIpdYKOO9tJX/n YpWuzϏIXIH ,R=q@Ycհ,!GB02@SUǎ^8LfزwWՄ0,{r岅f<Ck 5 , J aOŁ=8sgL `JsqL[:;NsA9H7¡Ͼ%RiNAF5ar$ Е[o)uP\\,DNs~F~M^/QԩSJKKurϕ"vr&žQ.s[@IHȚ4J4[|[}{SP/wzHnHniE-JNp/(ӡ9Vt%ިוyq% XL=gVV gbw[BrBBe6XӾ -*e/Q[B3tKQ)WBp yH̽#Y᪢i)]PYs:B}_n,\ W r`'!nHTi\2a!>P6jڷ5]F.9+( =TH : g̢e4p! _B X#9RV4tPT||e3=QHr:rIM$ ~~F\/lq;]9.n{9y>>5naa2)~;NHִ 9^Q\rAkJfڐ@" dEIIZ,,R=ҲF0OwaUWHd+'NT!cP&_$Ai, x-і(ڂWʪ ^Aߏ~1ѪQ'DDHGR*щvԷԎIKk΂IR) "ԕ˅g LxפcU;=cV!inM7\A*e.Y3Y*id་PC $O6Tjmi&vQ$Isz\a[eA<-ŗ9vwܪt3 7VEC[S8B='￱oey * M:{7 j/j/וھ2.~*l$&V Nba~FYWG\stT9_8=CH{J0 <)(7(@2o:ܾ#3_ Rĥ*Ye2RRt,-J@mf̓Hw+ʕ$~o=;;L5l0^ms~]{v)oBvxf)C{Jsoiih~F3cqC/@ H=a*xPAԲC|{LR}E Lb(T1!7xO'_kTSʞYۤMs}^GeMC2M*Q~i"D=b4qZ.<^ bg-6-0`ˊa=ܧ ԼLs~Ksu93^+=/O2&6l-E5겅\Xt{sgLmy{uGH}*Lf_}U[YӁd!C;h-9'ZDm 2=tN^?塍u=x8ގ sr*|׊I]NDscKM~9CSjBɁ:X&וa(1:H+P!.t/$&Ic#M҆teS5 Yo;_W`UT4y4ۘDfh;it>ޝIS^lR;܂iF@䋤m8 D%oMǽGhQp ZɈ',+sP"p# Jm۶@Y\\hѢ.^7)OwcF!WV7_"]:ʂ*NC]ao}^|zLR%"}?vjkt=p"'%¾Z|" 0Ҧg%}f |#6:b$s?Ͻ!z&_J]Wd{M}EE [\{VϽzOR]ޚν>tg1 ΓrӰMq8?bc$Yxv!)WYG ].|5sV_): EI\v)4pX#ɈEҸGZoESg{b6{*T5DSMpZq"zECdU搓o!pZ{*̔@2OjZj}+y*e%B1od$reHืsxi%֦J؁smE&&$w8:#_w6-VU=b<6|>eL J@[VVZ|އg1e9JJJϟXPPPXXXVVe-7{䈜*ܺ~SKcx4< >DYg^[vXbhzN/})XΙjiGra[xNᷰlIFU:MTH+6/ړ^^ݱ3=w!)r>uUvL,]qHHS .YSNQ[MTt"lߞ}XPͽ?R!բlTO2󞺳n$Ix`ɄO]Hs/,O dXVTO p}9nNj$JuzN|*zb>,ԷT,qa6!J瑩9p.겝˜cei:#t*\Hjyq-4҈I,C mc1o@X0_1sX>pܧ1D3.!&Y.~>R#~YݱSKCO^lm/ eƝx܋4+W6 +94f1a\I֬Y;Zt5\K&=DBʴ -ejUڂQ|.j wyOyeM'te%8!]Wn{*nsͣ/0Ȓuq%Iz9Ij}Sױ/mQ<'ࠃe ]+P5 7vQrЄ.=sjHp;;mP?vKTxcUK_35gyQGBģ4PDE5-5Uo_ 96Lw!w^4~[+-Ԝ:vXdX257lm$5yXI:tT4mӥ9`-`PB7REC\"HaK:] oVQQR9stwly=܅y?;rDpO0~ ,rcX jp;bj, ?ZV4n3v[-?[T҃>`("PXV}p;uW{%c|i7?8U)+ÝqU^Y<٢Os+KeInijіD.g;}Xu(QLXrO="g<*v|=d!0CGÕb AVݾȕR1'\RX7Nn #Q_z\(Kgۡ 'ĪVWPCNX/ vb1!j f֍(v`>ZG Y~ؒE Bi.; U[܆] PmYO ql?ʼn9P %5M !C5$h IɊU5eʔs"~g =ƊGe6:oXce{7{b;ϏxvӼ9!o{N (qFL.مiødɁWE$_].w<3fbb*:0+- FR'֐PwݪOaZ9sִ}wevmڵwAUB簑CRton}o %kd8"SpJ30b7d#?ߴ z_ '^8 v Xl9= W6aoD(JA)(#/BHz"uc:/lff]K hv6aY^u⻮BT&kZ6Wh.Ƭ,]Af6 s)B^ Gp(dgFg[S?(WBX&x6Y~01 M 2'!!PHyCIVZ匵r2%@,Y]wf"FqkۃU9*U1U]`k̬$Iі>ܢVu( =ysu5-ͭ{ws wS=L,q}3H$%~+Riߝ@ dҞѺ"X&Y:F_̸]㊇2!LP;;+5/+%TJrmlŽjsYOjX1J?g*y[E`F AV=6@pJ?ұw^9 u/ij}Ojhvi<ۘʛ  ^|NM;n/oǑ5:C327k홇 ->;DV7Sw j#1Hz̚5K)eQQQvvv{>5=IQ]&w;5^>lX`;NR`܃8p MQPO $ D [ CÕWD.c2Q;S;tφn fhI #b#lsq%;P#;}趶o~q'hQ"4HXُ53{zɧqrr$W?*$"|.i0v\ݾx̕%'=h B| L4mhxQ_*F(ۖErʡB\:dWYdGAHX k*, mՐ'R9kf'~DZ $qʎl93Ұ*@$}3?X˟Z}bGg/VV[3_6]郦>:8۾i7sNS&(!J4{If{-ɦ ViScTeVvt0hS zyh2jGI /X}c_wW}!i2îngN{c'5&]}~(i+N\8pa#U\}bX": a 1:!fєnG_em>eS3Sٶ,O ="3U2YX]E"Zg_>&]eee۶m+((PZ\\hѢ$+w^ȑuX\~ :e@vsbxĉU»r-}"zֵ(@n /; N}&=vT˝@yp%C Y  P36%v^5X&ID pZ-")P2j >:nT?Dkϼ}RHQ_W) O⫨;)N$$) @xd1_e}AʸO;q͡rNL^rqB[Ю.BTISӄCV ܉Hx IDATxsys1e,r\WXU.Cj2mZYC*%vSUNxb{+9xƝOy^ Ltv(h"Ý+ݶi׽ n^0\(Q4|鑎 ]9.?LF`}̙0s+CaX3a,3t#&@6-(((,,L>h r/JsugvR3/z}N88]D)S6lBсs\"CdYuyP]b0 ħ.I%ë!q6e (`F;^6jRd|l ް՞8,]W*m}$\L jkQKk%K-ұmj;:N>*8gȔ-@\{HGƌh OR3MW5 x%ǯҨYreehe۶&jnlUKױm ˟\=Ǜ]+|cVs}v(۸Ժ~=4gew(a x9*4£! JHJd:o۶91hnuZȢgHZ47ug^\`԰`; l~ ec_Ŀ{?Iv&>lC}:;0[[щOzZ ίAv_y0yh僓,c$ٰ͔j^1E:*LVS,XOE=n7!#'( Ow`ȗzpuJ-dqwȹB̗x$v_zo{ץw.3)1&]Ey]|pwܶi׶M;7v꧊gU}~ sB(Z٪11z r{|Ɲ0nddIN 7bzYNi3W'kA6/zU-Tkr/biZk;;;gs8[V<yץs[W5ow`h޻u/`=[s,A]`ZǴЪU^x\w,5*MB,zZRibBS5S0ũ,1VΙ(=\SKv-O̙𴨐EfF-%$ɉ_txBx],]u&5zؖb,cE6A=Wo)bڪ-D7 SǙ |jWwM{꽟/m r{_Ͳꓴ᳏Nncr,bVsJwyߏK?P)FGܳI?Vy~z:?ҾzPEb?罳$)p\L2K&eR' 6){*~pe'#SdPBV5B_Fj#DII.-r5;it[ȡ\W5fݪLPU+\*/yk:4u](WAU bҒߘk*cŽUk/=kҳZC6ܶi8)$~$ #-rruy E^+-D T P.2~(+R!j\|c[+Kʍ)BGmjj}o香Rͻ=ڼmEKn}mH:.~߽O?C{k}W#iT'ʼn#reU3ЦMV\i1(G?\}~5HÜ2 7vSit*r{!A^B|J (xB@H̓†&\WduGd<¬dKr^cm17r)6 -T Bqeys -{38oaqQP.mW^vT ]OWA 󃍕:FehԎ)4V(~\Y`\} /4BS\BB\:P.cqPnÁZ(WB ysb,HZD \{6sS2P.VOstkX&d$@5U[ȄP jƆ% VJQOB pf[P.foN7ƗQ/T"EP`YӕSXkd-p'!LYA2$yBGY(/Q~QSLC<8{CRF+lH]Wt|s1Ո,cNJyZ $b])Dvz K'LȆ4@]vu&[wվzI9 =m™N|߭Cl1fw bKTPYO(7|ʭC:bry5xvB+d%r!,2kX%h(TʁD[-'](qq-llI/HzDKUuwu.80hCZψ/'V`(/l,zP.Dr (OdQ娠\M4WkIE)TV%5R}Y2* wT L L!frhEMW]ܴe3 8fgs>_>ầyx~eʙOn{dbz[oƧguց-"r1k!  Wi KSPh+d,\ӣ}K_Rg5t(l5FiNdY @ȦJ0#33R2ryYQǷxwfu˟6q]NTߘ7j' K.\jvnG%ꏼ>n_Ryg[~DIȏtѱ}A[" W=Pc=vZe1+4sɝjCL26NMtLLb械B<V HL/}@O4)mjVhqa ~1ܔג0!2Cd`=KjKcyFlpT4i*ɲT3u|dԅrN;k&Ev|IVFs;FZo Nm"c(WF:Pn!} [o[{\E;b FhMF:)et!e )Lq!D=uJ2>0Q>W* %YVdVd͵hB6v*Id6Prb2Vʕ=@u"~b~V"ar`G; (7#+AT5I=V{9BhL,M|Q9Z8SL1U?^}Ֆ۸qcǪPꔑ~ܷ7uF!zu꺋[%J Qd~Gw0Y]>>+tLJk& ޅ̀;XenW=#28e6.t g <#W՚?/ȋUx `I+A#U?U%x2/>_Ra2M̳,2 i;x{ñLhZ2^cA %18.im p)`*ed$fF0MwA"99};XtMJtJ驟O|_*-t~N}U恏k.% ׉y8yp'r *DYPnSSS*1PlRG[bHr.+\"+7w,WSgنDmd(ᅯIʗ+Wc(ܜ99F1ʥ.DPU{uB+l%PS@IN" &$H o#~##U& wOeӳ}R P?Yf5[Φ܂3u:;dB_~.;ƛ.V'Dze(o.KN%‚LT 2]زXIJ1_EX |L'z=eyIgeuzlwSL3J7lpwW[U\vQH .bU2(,خ#zoOug3wr Wa}g[~{zv{ʍ)SÝŜ ^^'w+qEK ࢶcBzz]Tnމ%?ډC;;5xu񊮺L]cf9 Z׿ ;U3əٝ[uGҘUH<-p+_mT֥سH+E䚶ʝTmPl+\LUͣ|T.E>ub(NB+șOJ2ҺȈX(Aˠ9CGFzB-LhDUٯCD%|X>D,%~>7ݿ׵|ڕ#W^ο,rGM[AMmĢ; ޣ=&X<}~v9[T(Wf)2Zqm0irj 6CP.# _4yWʕtvCd83 {\ \ Ք.zH ฮB,r&iI.h4:Jۄ3hs[cK{c]Cms[c*l6v0*2 h5th`$ N?erŃR7ц~(W!4k)4vx{ 6gĢ X (W1eXPlU.reBh.!g Yz\.&j u%3o޸qצ.x^ǥO%xG]˜w۳gg`ֽ=^^i񊮎m]m3:<~sbLL#ܹsV<.S dRgFB|T(v re=$mfU94 ͗! ᠄qH>4 9ӽșH t\6 b+p&yr1JlZJMvɦ伦D'bcw26t!_w+.áȗ7lc|o޻+|=?'V . /sz=qd|yUd-@rU} #=NQP\&yb(7|2$ ׅrqȡh|UA<9$.(~Zri(ׯK;amX%q2mZЮǥ\ThO-k]dnGgkGgk*B8T u -Q(qʡc9?QJBOLЀr$;mPa2Q7@džʢÐ'جzC0jV_R+8GURG H1̢G655Y"?7t42gy-2s#/o@b(2}29ĮK.i#bU ZDgՏ\+giP.B`3oҫ[|~oa 37˫N۹ۂZosjw 5AHnP*MZ^n ٢`90C Tʭrt\aFFʺ]$u(ùʕSsPAegNZUSXKLXxM-m+޸tڒ0_h(SELʡM82桨bP.{tPRQrq-DCE.,Rt.՟#1*U%ReZ\TɰROja(L`N#r5 ,r[`nX~ɜZy+:Wt6f2Kny/7\t#?VhEW{Wۢ]uME+`LC-][m7a{oݾށbf-r4>u0L6mڴrJKo52sH}F 瘦f! Ot(.2 b1i_!렃b3AE[HEI.Ww޶1]ÉLTI,cE$1[)9ɘg $ri1 -XWKa~{xS:;CO<Ͳ*k{$a^\MV_Oyל|?QElO#n 0{f8/bk<#_,@.\d1+g(3UdS`QsS*B4_ϓ:)* )rE%2^AaP) rV*ș\r,P.:%PE@Ɔw:`X _B']E++[AS(7?U"\ͣmÅct5y M\ jI\ͦ]?e\'(SKP/mϲb)A$ݽfMs)#}nEg4 +>.2ǤiY-:e Wt-ZUuE#>fi. Ю%w6{bK}9L_m|,?ʯB{9֥}Iִ4]4 \QABZ{A  \DJ,7XI[_YE)>Y:6I\58P 2&pɅt "g=.!@종r= risĠy h}EOu?_ٲ'$EG[(zW\VWCw=q?L,pIE=4q0Ⱥ>PʥYb(WUPʍ*>Y kI$w_P0ꎌu\ rqAr.Z^I0Qo&`JJDE@kuoU0`)D2)2ʻ %ץuz\nJ׼"!.-e,B_~kdE\G2 /jFEU U_TXyBV 2,]pT^BDI̯'c)JL۵kn۶U9y9"ͪWau犅v'߲wjdΞw}[u%XO<߇wXIU aVSe&F'_ն>$#_L|뭷>>pJTCjSfKYi4LdX`.PkhZ4W`Dal\dFu-Y??]"5Uco7Hp=0YZWW!GkHyG8= Ѕr*J Mڮa7S=ty꧛&Fy3PD[oy+V֕ⵔ}z-Or9 * X##㹽}}KÜ#r0(1[Ppȩ|PB%&3*٘Z9P.S.B&Rи(7K.ilJƄVfaq80a\{ quz7,Zܵ贅IOka dIV[%" {㣓>K&ݛz.Pk3Ov(o;4-kN1>@F>77ruMP%/ϥ+IZ^j4${BR@ci%aÆᄏ~%-vuuW> +eU|ѱB t|t/7?٤+gf_|q+!JzǮZk,A9+XR1s_(72̅r-[OӶTYn;Xx k\*Lw|t-{7-{;%c|xȫQ %o zbW^fMs W<К( trVY(8 K{[Λ?w~W缦y FX&h|dbblHѓlgHH?5siVBIg{e۱ ShT#p&OT飂rpAGIA<<K^W`<+#Px Չ_T21ߺ{/衹O0mڥ.DZ0t P.6X62J3e.䤄@"N[ 3Ag"-n*2Ξ,+3u7/ܿ9Y^TLj"9PsL6a}cfə 2-_5fG&F&-!ك'D5LZSFXowaFdv;cBX3 2^R`.^,%YP23gNCCCR Iݭ`٩z!A* 喕 ʕr)°+_Pu4Qn,M7W0 (ѠoJB+˔ & 8_J6,UQ!͇*N@lg|,iiM-L )'\F)H LFV:kv7 KfʕYGrΘXTM2G%!UjTPnD<\!$ɧQZ7bn_@-&Y+^Oj|êK 7W] L%,}9-EK.Ҭ8/Ռdz ĒBn{Gc ( 84d䰫 g^6 ,H.IE\ei#~Igf`v`0Ud_r]w݅O/ڵW)x JHp1TyP@] SDW{~R 3L|(Mlil}4WѶ):t%Fs-1KF-*26QF.882d kH:FG7Ӽ3~ޫX$K/Έ(Gz:o Yؼli //j7 ,bg0~VXʖ/B]كS/Ⱦn$w\`reW1aarq2 6#Ş&(WH=cL7MG3\L Md0ˮ}t\; Ӗ%@A.'pmݻ>aB/62r,`ctv`i'4ӂ k7|ytP8NА^P.')ʍE%aPmN}A(v$fl е?+v-]VC~D"Tb 6]Pnrc(WA^^:)Sx(דo0(oUZdA>k@Ϗl[\['pIYήK\`p r+ ȉBnnEq׀$H)|R*DH9]f`icfߡWr8WRh.,a\_dt剉bZYءY ۤP0*F`(WM|e)Ni[vm#LJK,پ};>?Vj %b+b=} 3flC̛\M~(0ji@&ދ51{@D jSOCrmjЂZ  Ė>Sk#!C3)&ńDqɬݚ L6&:P`US!{첄=,w ehx-dl8iiz<{/$ SpwI4\k1k=\L)z~Lnc5e:<S SWET(8p@JL~?=ׅr+C&0)?Ǖ IDATr5I5n@5]{#rHcXHq5RY`,sSF- :ŹF'  Qt!cP.a (2@as'Ti'2\vqat{s2D@M(v$AnOmYRkG14vk{{f {Dcc/.!Wm#'_TPb~V䍤:~;I~VB_ʓLL@Ϡ.O\g]Ț)M;&HDuC6%Ldq2s,L]Kܐ}$GN-(r) QEVCju@Ё WQȃzw%N[θ`+/,%@N rxZWdy>09/*OY MNNl۶m,떼m;-I@pdj3_5fRX×~[?,K[Wx{>ss{W_O,pP5Ie&c:rN"fxcd"weMd$Kä$]! Hhm! 3U%4q8}h¸y2kQTԖ ʛ&! R|ҠELcֿetXm.ZqVnҢͿxGgblsʵl7~]+|ޒn~~彁fv {GTRw"ɢ[4KWҘ}@c5`S jڲ/B!sQ({$RR1dRAd}g hȵY1.:Dz:C;y1-c5 pYi[}!9ɘkbċ&5GV-S+Lzl֊&X5vzWڊdr \\H~LE̓AvEڑC[::o1ש;a'*՚P,ۆ.,Q6(fmQ⧰Q6OIIJb175\򴭇 VS)d$,xZ%ǵv߰<jHBk۔&i + NFۄ̱ESQjBVZO[FA{뿛ξ:?bX.9,|'6،+0aL,d"\x!W&xŸzVP|%~} zTk BQQ+_jQc)w֯_o_{CCCL>s SWq魗ز O+E3V|_t?n UyS#p^Ys./?6np˟} }+w-:C鷴3_~@n:ƍ+Ph$0U;:aIڬ`1k=վb9e|yXk|"03؆s+\he8oQX4X[$z=F*0xG Bd4_pq^2}n»rBnzF:iʼ?} ?LX]_Z=pB|螟⑭ 03wúpžp; g O~G(pH nʝ5^V"dz?ʕɣ1B(ӂi3r ̥(yXKZt< Qm%FIms BE2ě-Լ:$51)V'u7ܶ*>*Y ʄ$;`v3)JB -Uu0ݧL#w?B~ݺuWCC_Bf5O1"tʾ!q9*@8},hA e_lnrI1qq _t3Qz (7̡ZVxÍ=KjBSB ^%0e n]$Ɍ`x6{"WkW#S˅8Td$9@㢟ZEeQ*d2kIǂ_X.[%dRz.-kwݨ@ň)$}/%0/R041}{}m=; E[n+%`ݭ-d髺:*Wzw'ۜEH1.SMu~+O6 n=,Y ظqc@-Mruj&JLf [ao[ΆF1Zo,pomM$vqQb,;-[Z&,6IXS/D G@0UT&\"*=lutY)CrW|;BU#C&,p![y˘eReW،ƲEc>esϙ3'LT_nN#͠I2]O*xeGqa2?M,I4)r S(s; KY6*2juVdtMFb(P36T Jg@1g7= 22%PF 5p'@>ސhJ~JC*au5^rO\*,쑩c +Ʈ&2*Qb1ԸR]qMOQ]/HpDHѐeF]]]*+%L,󺐿,gK@s:ƐbfUGX o)Z$_bHV6D:f TA˜Bs.l:WBRmS aL#svll{5"BT/> -?peo-{+[m_9td/N [nyg}Ezu@H"Ep"T &Fk\D^!N- UI͸%{lj2$\R>BulM3.AsUĕrY4 ڧldf|ҕ]2 dmKp˅\,˘-d%Tؤh,>nȠ)ӒgMQORW릗Zwؓ$@7s$(z eDk¶Jl9$,cN>a%QgNBuEmw"tttd2}V C˘t"Hb ◃'WN++rf:e,oΆ $4 3h%LoAR?YC3 HG3~Q0 '͡dg lx}1LEzNU "ًz``P3GќԷjjj2Tb`nu枅3wɘgliR$o߯rX^ƛZVVnj{3n}ƌP1ɺβuE,!liO7I\D8$.z^Q!QWa---4 WPf&*6+"yXery,:a*4Ȩäaf T5;[S^r%GJDUDQVbE]4Qn0w7:F-7tUi0H9bIBZ+7>gڻr5e7e8=YwgtFt?tPx/e֎7!1`" CmY{5&6)%ZkEn`ElR֐YU=n1*+CuԺfAMg{OGe.nyO+\!+kEnQ~Vv}'F_M¼Hyb#e.6}~^{ڢ+ЬYr]e^14+ $MBBDIL\/.40,]vd6)LœsD쁌ԔW܉cii߅cktt'=ˆJx*h9ъQhv/yd $C~3aWVFc.Oj&4ژbP0^bHaGY9)nY~ IDATI34a.Qd=tC NTbbt5b+1gAw[ YBՐP!# ;%x욯rw@:be?rhXv9ĩ6U1װ Nk􎹉D.𷡎j|d2J:2V.$0 KUFvzXw "]+ĞХۥr zm"!2 `8˘r,j]c.jGh1FpS,>3LGGGM)HOy*(EDr*s(wPrãH,[42[TM^mX1|q-LLLM@53z!_&W%=fbxS/<Ƞ5 s`jH̩3ZVH,e4㍭*Q+rs+QqBПؼ,BH´Dt-!,峾=jD=^}ٺt:kd+ ;L^4L(W#즀'0(~&=#EfE5w!EYHמ$+*CZ&Mw fN<;Mo,FTJ_ my2-I`>ާV-;7 MZ7x-~ɏdjnԁ W۴"Wv@MF;ۮ:F I(۶m )@XK)N)O ᧊lYY0ڎ_1C03EIՠI S]̕M|2ű q./㎀6g]|g@CM9Yɤ9@Վ0D!\q'W4!,t ϿLڬ"NRq8Kl^Kk qY2exP8"֙I@{{%Ɏ:\_n3vxxg%+8,}S(.j#F٩B0jփ5d@I3/ٙShBGκ.b0V2;C9uDny&/NMP.0sSt;tH*fbbA^OuV' P7C}Tv\[%Ɛx~Z C궮?a1_&!L%Ww/5Vw\d2iLR:)H ($)ȘN5E>pȃEHϮΫܘh&dW.ƷH|Ktʮ}rg$w>'eK<@U ZPyk{n2U|ߌ_{DѨTNc)&L>.S m7EJw'CN)_0)#F~Zĥ[F.rz,߹%# i/cLVI:% 3*[>;MŝȄuN3$oCraJDdt ɸD{&K} ̒C([M6" #f12W-X3D qBw%cCk\EpUrԗsԱ lstW3dn&Шv-N 퇕+wx*@^Q<ܪz0a]6Oi"[/0![yJ$It:H8(`v"ܰB1# H @` llJ5@յgĀ.*̯T`$ViGȉ)ӊ}e]O\1!+ck^|2;:(dגg]6KS6}OPT_[>fN0]&ײIr٪R{ stC4]ac4MR UTZƤ^8S)էg[矵0Әa.+WN[x 8xegoKh.)`3!;cfOoK6fL:֜qǿnh輆Ϊ[-; Zj6Nq;&\5TNYȮn!dA/bb#o`! s).&R4Dv+d% tZnZx1.^Vw"M WdH]I_g1JEpE`Ծ½Exc2FC7a]DeW9֎Dp#;::Io(xꦸ~EkNTm`[4Xv)LQa` I/U,d!MlU9NӚIUD 즁^顫BD6٪ݍʴ$ʍ5mB0 M~ zu"FSk B $e0nZzݛd\asy2 XȸZz@BR][+lHr=8>n~ОO'S6ㄭÀ$?zvz"?EgʓlG5F giz y䩯A\w[E$/^"Չo..OеGg]qw^@UIujխo:gLeJ*F,"9)bK{}Bx2 SDo{ JdM#(ԀLh_D NL_2>-ieq鷀pl95-A uH~&O *?iR!I B)MBF5G2bPmȞ7˺W\Aǩm6A퍃Gf41WVy`+4u+2 xN3 c<*X^?dF[*a" m`9ZAJ+@77;0 ,&!!RY.kK"J͕a?E}!5 S a \}Dì\1yL/$GC#'_3 U[Vs=fc=qdQNHa$"ammmss9Si(Lxƃ?IBʫ2{%K_!NPr$u]*2_ŖDVFBg-׭i| Nǿ\7 u⋶ MuO#:[qICC,qv$*&c! `r2} a/\0';\=mUHBl$rH`hYuS+{5, KR%#dvH%T,XPJ{ vV)6P4P܅$d(B+]piJIh[E:ABʐO4:Y(ޠ s/0oNa)K,!W^ P>+33HDK,U~z zQE69*8yLBj{kꮚio}û{P6?Ӎ#-X2UO垵m((_ūR]@nD\M%J]REOHEՅ>olODjW2BP`M¦tX.7:V;A ]DQHYl)1%[{35Ԥ*?#SLDdU'S2(dJ$!Aľ<ݥOv9}>}z_v>[=۟'HsK{EN*S/9[J(?|+صSۦO}h/.zG?s@l{3%np\Sx Mg pϾU͍Y?yK\g{b߾?a;t}ko=O-]WpҜkuE*B QjfdOd#=3]:-X.Hr1Le)w ܈nCln eeRjcN'zX$tҵس Uu* PQ'TQ-^츋LyD[Hg -c ߆s13/71-1!9[4)Z655UT Ve hC"F(Wbʹp '%鋢bpH*ODaZucξTUZͬc ØHRX)p*! :@p4TؠjȼN#\4|0IѴ(HHy[.5̩ZOm{s+b ~2˭NIvwֹ:g_EJ(Kys!Uj"rIzVU+X/ꪘr{fhB؄b~"]bz WPZX>6p,ݠGu$ĂFiVD]z"r^EcnI&ӢT4F+񳾤o<{:H^\6eS聱䲝t׮'*FY[vL8y#M(;fN9KN=C} 7<#|a]{g~p±s]w j+̕c>˥5] fel|yn_5u pر+ɱZqhn]rGdt%]ORk͠^H"^N[Wb6q%Z J+;20iׁCBҖ1r C_F #I b)1DM,͠B7{|*K ےskٙUhO!2]2tPP p樶.$!#OLa2ya$bpȕ*Н-8A,P!}R2ߐBL ,0aX`^4oF%7BJ3eMMM5 q xqQsc_)^yHkuP'I(L+II! Ģ4#?vZrҙkOl öDse%Jy ҂%f^@ DEi OIGTE>A%!h E]ol⳥%TC^I'y'V3 Utqh0KPRA̅1z8917PM̭VZMߐH4CoB;V=t ujPUZ("g3O.Pb%w;(f^ٱGח&>c;/ov/G\h (1vM/t2 $rq%ԳfZb:n/;7o#o뤿7ǽp.m]hݺuW,O=_2" S>h.GGљ!˪©B%SRls Gjp`-wLft@V<B)(/L2#\g2( [XDZƄ.htTHZl &<`x.KB U^HlvQ,WԡH D˘H%-Ĕ`gi8(w~fя>p9"nc;wtW WՖ,K,mf=mF/.VK]yߗ%}غz4$@{~y/:?{Uub,B'&SװZ,N+q eH bm4iN`F*r Vp{CJ.fE@Mb^uc2v{Ģ$? p#7Yjߢ?tls$G hlKnq̐B1f4ނ>ҔSZ)X;ZpnQ7C z+z.Ύ>% K+QuD 䊚t^ t҉,=hľEH- 6:r//24G7wl#}룟9o,N9+Em~pvpwOX.b k-Ep׺*omqAsdo,Hpb6Vp`+knv^x}iwzO^MglQ]`MWET\өv iA>|g} T(xUzBb, Ki͕hVBNy[3cdĜ"Qh$">Si%]pB~]7C@"۠3oE3}AUo+J= og i4RI9֝%jш0Kab>po( 3SN,SVE5]*htQC;)>6QK_# DPUH!jF=ܸHm\?}x|?k8SDRǧmxd>8x\~$9 W+Ι]^rWǷ$\̅z2Sw=UPTぃ=?t!Q$uKdQ*N)W<D *^[(3&y5ߖ=viN%SK4Y2F0غk#9>A_t\=qqۈ.תQ[TT_6;;'x֥c=O>gp['Fn'w1~ܹ׻CC"\,b/;ΣÜC+ҥ +JC {Q޷bsxTb[ nimҰчeKT%އKWd-1^b "qh1ΝVuZLۙkXФΔ2\A'Zy.@Ev]mPX\]g|/-n1}g $L0?.ɘK41Z3 1O*5jMo\6@t- XVijj^^ih7qQ9\jhCy}2<hOn\ )Z o~$!"WC./% DUJc!s+C @epm-HBLkl$=X߄%Ѣ3rFJK1:Er|P:ʷ}hnəE>{!,d p{s!4Uzv&gzr:(m+/R, 霨9%QBVX=kXRp )dʎgGP?lݹxb7_{W~sd+⠾pF eh⸺nN4\`ɂ_~p"Y=yܵ"^~R_> FW~_o=]n7<e{yL}ɟ.mq 5ؙoŻ!!P[բA+""9 -%3RN@ҜiV,Τ(1Rր /-9!xN$d-cTؼuaX6?AЂ=2GIe6~php)K,*A10|c*iR%Mv&pl.u<6+em\!SI @D\%sXN>ycL̡9|haccaDDHkwXV~պy$C#tErdw e6ͤHOG ~B n<'RBiEQxt,V3󹴂aBõ<*䈰(h|>V 9i=qC+h ݣ\-ɠwFQU[Rx2۝(Un_^Bjj ?`g40BHhpj =VՓp%C_%AqC@5vK%ktlR)kzK4H$[ӄ+IZaTD>:uI,֊+:',D2f|~F1p&O8^~so5\0/=*]M9-yn# Ơ_^6*+.ERg^?Ř=\ $ȋ'.ȡU`)mrdftadNc<}䑳lC7R7qȵ5]V.bʤ2gq+UpuJ3GWZv7 ?VJttُoo.W򧿳S/,֣`Tw` kCУk2Чq tre%`%. !KbV$aXI o#Qc [`` ww/޲e:)i8Uу~ 5Qcu9xuM*^AݹPƫp4~^7j,He1#A/n-v%:@Ҟzi@ 掄iq1+qҍ$!4L Zʻn m1OiK /'0Uy\XUj*lΒ#]ý)nWUyĨ{ #n^YZKJ|EEȈPQxӥo4=(.#"}x~T ׇwkHXQobr,YH!!#cfcUGSsG} >?(ڦ~q3O3U7.Cxzv$ʽw}E Ơ_eSj9$}hsK6ydhdp!mn*̶MU^{i.W?{iƒw\ oN|tuM .̽nY=*KUG}PnH!:9uG*pddH}[荃I.K%WIE \\7%.`۱ UǠß0xSL C) Z9Ǟ$B HR^Xz3xÝ_'e!]v:`a@# SO&}H_F a2S(ӱ#f-gk F.krCDD!{pB I8eCO=RSv3H2Hd ˁyăX'XC2yr};die5GGJ4Nń\jiaj7 v69c)k6W[q}Xt f@SZ˗vx4{cCXF-DV|`0p'&zѩ{wxI*/|zΜ__iwu?(V)U\ᴱ3[پͥo-ly t,QUXy(_6Ul\9Q;Fɰi[6].ߴj$Cia8jTA/{c2ҙɮ BH=,{޾es \ hɘݳyv*'0s3i!)!R毀K_ hH:D} h B\L\̄QA5G~uaC\t;JY zեS-2JM$E", l;e׍N GJ^P(ɑq(T,8E{/T1ڨ=o+Q3'4-&kX 쮳dǕ:a @(ēu  /bRNr9UB8{:bizfZfٕcoyenW̮*] 5SԚk.*AJt:}-Rȝ)UC/׏ _KHrO·דWHU n#Yҧp'ʟz`'zx(la3G޻ ~O>4R!Tݩ[~@ 7g_pc*UXLC=/=vF_(B sv ~"HRcSיŨleWZ{p Bk@,c04|AD/R<6r` 4i1ǜ fǓCW:3\;}"rqRӈı%Y2e-tpKy˙9 E̅}G̥PT:}(RM @eLN Db.>U땉rrU,}P5 ʘw5Y*Z !Gt v7̹m+eչk[mk bHHS:hMWQ< ~)j: ҄+FjS?YmeE-mQ8@r%/aPɘ{K+sVP 9l&BjZR~tRt1j"{HG"} }M[2y sv!dC=/>K+y e@oٵx-o|[7]*W\O/g}ŕS+NÕ´u{Ϯq$h1;Gn1ؼv1fzL M4j_Y %%p*r0 F Ex@QVvls(b.6p1' X@w,'b.~|Hhb.$]9h@F̅m6GF/:fֳiVY.'+}$Jm0Q,%ʶsYY IDATK:vA%G 4?\D{mKԫ\JmL'\:~"g$.i˩:p!/2RPP8O@VR?-BZ$$1َg 5qCf r|$uR(j$.₮ l1=@u7s9tׁ,~Be3\ <7񃅢?IS!DrLT eyt(ijxxp0bi,onPɡ}-}sT~Q?B_ ^Gh @u,C"[|uō tèqo'jY bQEQ385(XeiuG"H 2Q+9m@jLIAy㓁 Q6H:c}/>[@bQX`) Nu{Gf$1z,BRBA&xZ莊@=0VE|49cġ׫RIQY4$~$TKډXK ]Ҫr,Q&pjɲK-7Y2ԍ-r!D)k'u0Ll.I-]_*wƠ].QfŃRF9qqcLgƥپ#!ս)ڳ1R5+td lD g-0J>cnpC\@s%dg$0! s MXWKiq OVX/ehN%S4fN'탺6Š<R'O7xϋuM;<2@"|[t?o֭,W2<4\-|Wuzr`ݸz*,0}5kWhIRH")~2+(\jZURj6nףFe΀I1Rv BٗaS K )`ekm. 1Se֜%0p+)0FK.*c1KF!w;N+y"0,=1~ak(\[B%6J֏xbnhEN1H6V.#U^XhbnlMVDks'nN}7b^j1OOUPnjjBEc%Ƿ[.:M҄0%AE%-*Q#~@)LGLB] )J~UF8eQTg moM62ɘ ]2@5r sK>|6.c.5hbd\wR-U t1rcs^{Ť*cFgPЎ lGjv<{'ImԓK(r!RZ]_i>9n6>Go?Mab,8&ޘV++IU.tu؁pu2bmJV! ;Ϟj_g1EhɅ)deEMM*ꉢ8mX:NEYj s4hpR[e u6%vDR&ُӽŗ^ݶ`vl@M2+xr3 bg!l$mH!"rPeBf(0(%x 1D| ^b+H7c0\ed|XA1HY|u%iq5_ZC.R SːO]鐈lfKDy;9i|5E3\NU*QM䈭iZ]ZkcJ$ |/ !Tﳠ PBr)R :6'鉯uQ¢EVR]atgB2J))eL \QfCR#(B+NJa`OAxb՛+7JT$_c҈._%9JR} *[]cY!#!Mxb[DƨmA&k?pH!dfǞl`uq}Q*9MrYwہS24^7iF(ݳ.M2m WO<r8ql:e4\niۼ4^15رtw}x՞CWM dM>0[KuQZ7QHݍ6F7sQWtEVN1"E= gPplk IZ*4A.`ŀ{$api,iB({BUAQجpn VJmfi u76d+|J@3࿐B/[ldakk`8QOWP? OʄLOr9@z?2Z\7^[{B$2| ST{ فDIm"/BRN À[}RY>[qd{kK4!DKP@,cwKY9HSͣ {˜]tfʠZ1t}Gs5(#( &TSÏ9"]b0~` #bGAȉʘkZF^2$D3cř+R7jutkU&S`mMK\H!k@d}gͬ}_ڹKn)\~bW3[բخnmpu+MU3q.B_~Թ|˹2 (YU֌|~]?^:Nl1G.)BğjWW<e%~IcVeWUrXVjzE?{(2`ĨeB*7m@ /4Ԗ1V(z6oHY9fhxi!Α^]Z肐Az0Bj搸/`^.2$v*&6$wɯ:4!p-hl?ÇXưg by\)*M TivC+9Jjhe5)ryDF1r ȫavaa8[j1.cvlԪp!M/DZ W!2 qYRseue2+$J1~c3|7It, x=?|\JݲE%R)MN4N O1!Qd]nI9Џ}]8{tRcn.OCݿ4a¥75?k |y޸^xpcb2i{/?>)mXPͲ;l*ׁr4ܤ.ElO.ۗQ(7y&ĵ&f'R*n"%5, &$mzٚ6,fg)";kJ2KEQ!#J-WQ .{$h0+jeuzNj6*`TuqGR?hCrg0%=.,D&q X&<XD0[. Nf g [\\<)/ !XD49gZxZm 3ul VvO_Jb!KǤXЎufa5:*L]_X[Ψs7M:'zF TBUeXJg(~/F{>Ϊ T} BeA.Yf9hE0K4!ֈjY$b!n!4 4aɋr=PJeބsw+!R:a?-Aw1q(K c91`̙ #3 C|\l( Icq ,67R҆Ljaԋ_Ip gz{o_~_ONrR۩VL1fC@䣷p|3IiZb蚨xj([w>K鯡9ϳ\w11!O%s{,. HZBb70ABfZZb iX22 ?B$ Gҡ!2F=xaOzY1Lɂ/Z_uVzQ`R -RmSb=Ja8DiU.]:oSt)ڣ~H E7w\ ͚uGVn,'I%&!{aӅղ,u(P[[Ieނ)Ȝ"H,UsT39=)c*UWjG!=gv5~B#aO u{az∹&\_sMȇ̈́KJF i@״ʈhn)G~8.wnTm%=ag08{ATe-Gv?B {F{ jMܵnDQ˝׏]{5gn} RvYQ m,;`n쵏vܾg2 Y^~|o@D=n ٫?^˃,˚Tp?}',LWIFc0䪮hKgl0X5#6?hCbtd=L]4 9^ {ɞ`fqp@jxTT'0T!ߣ` oc8xϊo/C%w"|/ YO9@>sڱR\ဘB> 6^^]B> l87bJkZ4k%55EaG׊Ht5|] ;C3͢+cwj5{ѩ9H>}D,Ѳ@a0fLNNQC[%V#GU'U`|B96f̥ɘQs}8̘ ! W š=X=sCꆹ/`SnV3YR75餕eNSWԙZ̘+Ƕ )de?ܸdW75f]K>O|ʉ7/{ZDxUฉ@X6)*9wrVUÑ d+`&ҕkr?CkϊUQ>L+.c?i6'&G]Bo3]sjOZv=,x' P*+ t,4!wXfsQB. ,q/f8.4h\L٨A"*e L,q8ft.Ax$!6%i!LLsaH #Q+ӆs7ɘK̟@ѓHeeQw3AbResdVٳuEQB5%&9YV!v>щ\Q?PKĝYP +ZiUS]a *0W HLa0XLW^3 eF8J__nˁ(:*&zZfVvipFFbn/ Fajb.Dg䐘wSUPټ *U*ѣ&}QJ7ñQnPQ=}rgZ(b[gjItu }!mXg=Wᣃnjlpu•|{1Ncx0|6Ǯ}pl0]N^J+)<,={\X?j=v]^?7Fon_B )E'c]'wgɺaްoq2,ȞOдY򲪠x!:yKՌgEu=>@m٠[1j(p[.aGV:3G ^^ ,GmXp>@^B:c.s X ZfRց@ o yNpa&c.A!a . X̰g0Clia4F+fy`&ۧ-abP6/lCDAQ8{TA๹j#E_)$6v$e ^řrjr=܊wuTV6e{T7P4YeJj*Ië\G"1M+o׾ :eV@(W#axd^51P\o*D u`P<ʘ ctkRenE0Asb hE%2 cutbT^Զ2Q& 5Vzib*ePYX͉ i7}p7{&]_@E.nۈM4UzjYTwy-u,sRH!/uQ2_U3tsf'iJ}cK%Q Yj6*ro@lq-wݪ0LE_$X UKS';gG=ٯ'?+k$+l ^b@x}6t\|7p0H6Z ^noFZ"h\tRި3_G&aM* c +z.[}r]~ܭӼ(VfGpáS[U'I|7^<{;ƪP(30.CpO8wS71vRŚ6ԡvNlwXy G恝7qeگqR[YDisu` pbF4[Cq\ |rQ _nm9iTE=ΥSj b#-#=ہ B]WRx E&A`19H+6 ɔ70nAXZ "lIXӂ^a௾gā|@ft+c!(!#bfR ХAè ZnV{g` Sc$\^\gQ)p?|#zN9%I=KVrm #@[{/Qc|%eF3u&8hjL)itKf;)4}Ot[p\3ʰieqt!K]1J1yX0]_عds>LE%𗀸1M1^1+(g=M$Ru0]DEt>@_fY-րŗ~4W*wNrט[8'+ Rd-cZ[[f{QZb haP4] B=MiB-U TUF\׋}:0T^a.sM Yu]0b.sibnehV"k\,&jBjU˦Hᕺ[~s"=׌?),mb2WP>i~8|֍`ݳtbE'D]߾b6ڷw~qOqPX? {sӗ>uu)WK;p[7:3ӗf?|?>sg7\Y׸.^Cwm)*iq )$GY6;JEɤ;ؚud_}i yR٪:*=g \Z8r\t ,&'9΢zbɧ8u җAv, LdV,-x"j6^Iz'{d\i2FZC:X8=~R| D R6/&ɒ"XEDbb!Ш*M#M.03.9ċt5d m}` 8D~;0i(h"`sS ew4!5CF` S@1؇')5R7.-0Z<.CQmΛ;$aCsw&#ꑺnX7y`;u+/Μ}}.n3MύRΛk^/ I )deEeUᠹ(Gwie3Rb%!SI)=66hTEot?=2?k6݋tӌ00w P xHLi桼ٷ.82;{7(1rW<=n;GudDO ORDIh0d9^KV@}\O͘KGE~cBAJ/?$]Pp d\?RH τsQKJ0Ƃk:jw#Կ%/Cz>.F_(Vu,*@a 2_sDk΂r9a0w(Ɨҁ [߁RV&c,t #&/2yEE¥((\y/@F J+ѕ$UN%5J X1`RM੪Rk Qiˈ'bQsAIb/^q~([IS;5j•Z{ŗllbXSHˣraxxF_fB4NchYzyӶ37ltW&kK4Oli4R][oU}|enQ˳ouAajT6ml_7xpoTm܇WZߥ礼[N677,&vh_9%wc o_{53|F^]gέޟ,:>xstuyɩB Cxߙ|\ZN}QdkЌ{|UBsy`|_|^h6/3!Hs)9`0 "~0c.yG̥IH̥VʘaXٷIvCx\ se */eWjR,֡AUJ}V#x"'K.>9;QW 2\=*+5˼tGi5M^1AQsUF]hoAZBfUZTf5JieTJV1%3!Q6̩Qsw\^fO!OI<W$x171y1̢]C c:\K̅p=[=W_U,9j*Q銉L:94x>iIfb}$骢gEQML|Qu-KgH2n8Ug@Sԏ!P8 f-޲-ʣfX>V}ׁgg+N K?#\1A#6u417u! &"7]u ڨa]z0 -K$}+)?af"+_S(ՙ6y$hñFX WkVHM}rE{t TXZ^8HK+Ys]?$Q SF!ZRȓ#w=_X1Ugᔂ-d4 8ðz"rW =kfh#!} 2QnAׂeU8\Y~Աf٬7wC`"E˨p17D"K5L s1?VF g 11m H-T|LO5*ȭ}+_W.aj"*X%4;UiEUdTQ~sQaEAR"KZ^\:(Uv|T:9?oQT?`:VHDMZ Ll CO݇^۞F",f;=|Oϯ̎-oN/MNEkzc)7r5.oX8V^:v1x+Ԗ-{Ԗ1v8^= z?[}'vUn/~G[oőEɵC.6lx;]Vۜ@@ƅJ|)$V03_%nS#T%VV4%ch7b(n6_^|+:sĉ^zs?Y(5 0*~ڄ1$ 20s 4D[G7SŮ mbl,h(Vqd,~_u;.D%X1+L$Ga4vF0n8E=b.531׀ӋH=• q1xY<"`\WKꐘ[ LD,yHh"HQe7ՖcUдxk; pg)>XrCSw\N EҪ(?xDD$Q1_3: RO!H*.G86 Q僲JF"l `cnUa{*Fy4~'z\zʉsQ+ɘ&Ab8LC BgC@Z=>sl6≏ҿ2Uf?$i `UBc=Iѩ4?ռ0!Bh!V6ZQg- ֿ?f꥝6}_vD[~ߓJ\ɵ/_Z4ڽ붌Om[3g:G1O9Hq~䵣8Vnk? q˅jE96gEǍ,!Wq 铤V7DzOɨ_|/| ?K^~^zAhFMU{3V%"G+ wF'Ayf8;J48)"1~+.;c9C,˨3wy1ybXS  ٠O̅^>1כӀ`1\D 1f6Y`0cnbX6lgzsrjK*%J{mj!5}(wş0t]WDǒ a͛Mub))>`ef:p6VVc 0T^Oy9>*m4D [,IIt]tВы\V'M@~S1sE$ 9^hb;͘=>^d̅r1PpσO\Վm-=s$/RLZE.5RՌzShUF%oS+w){Xg\(1,:Kni,f-o۹ҵhu?s- ^&G/>NExd[޳~ |p37ܽ^Jå^pt/Sř2:l4'룓-wo(J붎ӝOV`>s'IZr#讣o~WVw>\͛-@Lr[,%k]:)R OCD}lʣtSqsh_yaR昽F4ڄ$/|Fj ߀Ioz08nIR&EUaHlhp\hja0vrΈ]}TiW\ߋQlG01Swc7v1hpa\OH!giS$c.E\8ɘk<L? `D=dX K2!WQ:`noo`"qs_phRP+!Vďf0{޼2ݭ)Sc2%5. 5EEZBlJz Iu(" q;8aYxI"8bMm,k@E)7Ck s=P$KT\L x.*b.f刹Wc,1TKߚ˗/oٲE_(K4yE1i ) 6 ,)VDkNFp"3oʚ)9HѓbKVHF޿A9u[-_V?q{!JGG'O^(@7_~yW9Y .]~9FHM=vXu\+~աӗf^?_GN ؖqlVKJwg߲#U-!-.] \R'KiV&i q֯i"NIm6EW^yeOD=ξm{zje,)'!*ҍP{3`hcw;`Det/m0w9b1E%EsA@E!>#Bqʘs˙Kg<1HWJ^dBh5Q!#*'5A_Vu,–4BEl7f}V"YA뺜:ߑjX;E@w˷V^Ao Ԇv@/򐰕 T]7,-ցр8-b\1W,ȌrEų7^hbn0]*a$1qX]Gq}}_}t0|c/+1NjM,鈢:ۃ~ǟݡgҝ:=z+έz\=C5C)<ѩ ̫()ld9?xl}~W]bT&-bk*_,S0MܺS/\|6U[_;C9}#? p[ [Ml6ZVXU gu8 )$_ŠQ#|tUv={cw)2_7z3;|3pO!*,Sٶ~UNMO6ּVȘn^ZwuŎ.좰^ͤЩSK ~D$Jr8{_׿S?~^%E>[\.q7T^ʭTvh£"Jj"VPHm `)3)A9nNɨ 9 SW2j[-X6dz?Rb~aB̥3=˘kP, ͊˅ :c.T,K͘K.DT3H O5DGQP8'T@N,@hR?ܲQ8pVpA%ϩJm A?֓NJ^bGEI-(JΙ}QY_ɔݓH?rPo1EI5ioأ*0лx(TW!˒Kc@=E8dkFa,<%7 %#[ޫĂe Hv3 7577S:]"ɸ^\/2r#Ax:_/_̋B^3}%!\CO ._ rɿxß=7{^Q.~ּ^^WK tnuKSQX>]1܂faޛYR\gu>Cϰ bG $-$?I p([evXaE<Njϒ_X_bH@` faow{EUVeer*n3hʽN}_s\Ǟ=Lt)v s,:ZZU O\pk&}Ar =Ա9aJɢ2FyD,5uґ&gUYvTB}@}BoNZ7;m~[7/ݸ|~}>Q=K/O7]}Ζ\ 19Z7Q??qmŻ =0s|J9g,{r;N;|4-7w2O IDAT)r [f*#֔>0JU>5}yGGyIHyeɆ -&LJe-K䉅yByxNQ>GZ曯뮻N9TOCVdZELp^Yj ryIBz l6xD~ͼ(:b<\5 n-s8?4/:ovC\DqVB!/æ\a.yy0E:BD"2F\Z ;~hXgdEpeA!/j l[#5: ӕdbE5zLp&>D@;\ f&5p=7.Q)s8mA$He~k>U5jg"DׁGjl; gB`&fEԝs`9T\R~&bC+AZ)Vd1`Qelt8?S,tOa[2|%ss;}?}BX3չJg|m:ro\QU G"l"hjv*yy8epS'A3ǧ8ŠfG?:ïV 7P/֡kq@t)U!\W7Z:/e1A0g8.%6I@ʕ) K*X(047nWW__^9|?ѣ(Q;1&欉ɑBHb _ 8/I RM3Q(Dh2B4j,z19D~6b1uѡY?5/(p)(.\ B͂~,8'D )?k3;)4I D`{47MH͕9auw Ŷ9 7!+$ [i& =ޥ^\ Q "kxf#LlCW5Frw+UrJgȏʗ(Sc5K<_ !LgUV"FUj?8@3PQ[WYY8[PU e9ʂs1Di U&"zf8[&sCو0*6j1ڵzrgc꫕nK}/xaV@@v 4 MTsª60Ni؍ر/tK˼u6R8ll91}MsUFqHmޘb_v*6s9IFz\_3cZ=a)CW7y] rȑq<)#˶.=o{[{s]Envջ~o߳;r9}OX^:utLrZ#Y|HG%QQVlLḎ{lxӟ_ wpSGxf$.2[_cpz:!bD%_[¸W KIR~sȃ4yg!5: 7jȘ 2*(ĕ̟ea59D̍acV.V1Kts1!ܐg. c4b.!gKfc1\.@X#^Lq@.r0R7mf/MDb'ENrj62t:\NX(DPvcDr@?O03hl0KVvVDDz\Js+Ѩ"GW:DO\+%-fU x.K <_Kʯ*hp\J>4syW6 f K](zgs-~Ov8yT]v} _@]Bq斗1O8EĄ' ?K &:G|dƷB\Gu|DD/ L1c 񫀿 yȘѡRWaV ao.%H$KQ[EB*U'7|ew30ΌU{şRz17T&}Ӎ wsy0ʎay^T.D!U6`l^mҔ s>\-ګ!*V\i[B ѫԉTPuxԩ_:Ig /.&"fXOl%:B"&UbژP<28-g'0 \˃#QHP @L:_7e1cGqȩV2keRO~pE 7V 7*D}zU6%ZD-5ǒz*;%+zԪ*HcrT `_hLi3cnM9c$j\|*S ǨuղRB3dtvLu6?[-`(˦g]HNnE]s{!cۑ6&UMI3}#t)"tThԫvy(/[~]͕F\QQo|Q"ǹz^~ Q_}U. "ʥ Oa.oﭬ]j^zWxB9:7l&F^_1ݮYK2i8,ys[_&QPѫtvꎴGIvC6ҁqS Ll"..XngsuC}qƛoSdbb{_25 ݃|ۨq]H B?1O`1d}@,!{Nz90106_Ufz.K$."Z\qHu\Pbp^RHk@\紐/$CBdP9@+m= b>)5̥Pf](A~TD *19&:Q,݉VvV7f?En.yaBFi u, x]9WJN*D)E[DU~ubF/YR~RB0i#=̮s2Aa.k^Fh(_Krdxt6'zTnђD6{Grts3ϟ)&|[ 01:IXd2AQsYHGAFC.}6ewΜ3sջrMsӃG'lձ?Zreiϟ'gf&gzZd+$dp Bj?)?fC{b3\%zЋr\탯| JBngT!iU(H gMs&iJ:JV߉4yd{W{wb"T}CV;I|?eA'C\E?2uea!1LswOba.#3y"ӈEEGvL0̥d(@Br.ۋ.MqZҏ{Xĩ7 (`Ư9-V;Sp~efFaN͛щue(3Qv`>,wD^h' *jjf2j 6Sz"Vl<+V k!2:* #$-EL17@5s]G^A:-v5KHL"zL-|,Soة&' o)ۺpXO7C;Gul~.{G2MJ lň֩S4>uZ [6QxGRWqǷ ]LqƤmOۅB'rbPR]ũv ["?Zyo/|S i+3\ctϱQ× '`p)9t[^SlnLvʡǺzdd&^65@YL"8B\?OECJ )[nP۷o7o>P_ʱ_ʏjvOC)D~b(1h sMFAA"LӨku3K..A܀E.+ޅlP17@x!E2zDS4鞞-WM]ZaLWO7)@sb0[y+Yh>qH gTv`8Abž`RKmqh'q4;>%gsRu\e~DCj3N Ɔ3̥sMR'2!4E\[#' s ?bnF,_(:߿$vjfC.Vw&EO2 HЭt-0ΕYw 'u?GGH&|LT1#DGd RBAzcO^((LgtM|O4?G]k/j=<5Í3K{_#5#4BO2RfLUm:p"aಧ\ފcy h2:G7[?ʜ 2Kwx܎atx67EVћLf%+[LBs=O=_<闝!_n2)H W^궖 ٧aR/r$H0Lg.&|*TȮ+10'EOvJȘGe) gx\?b.se̓yXh!c4ԭOR[[/wIdBmG,  1&]3#(=nh\7Y<"@OLX,:e ]|XvXӨv`@Ğ]jϱ(ogȌ5җ; (9WHjsH$:x(u/r1^Wu/_P6tD5̥|G͢, s**?w .Д0ױQIQFU pf,ngL I;i"+5 \85{|̘hp (Pו~taM u#MJ1:&[lA?0>[CB׷/ltIzrž@wβ~<4ʍFjg_򥻽SD9bJmTVinKMnG:Ҷs1JGj[?%?gΏ.*$%9o92\,&HLzDbTu3 *= /H C̅ _p:[3 j~m&|@4#-?HY]_*PFK$T/K,C4r]žc+R‹r@*bEJo~ɪYJ0 q 8&p㸷Fo/An8n$)eߎtz\n/ ߃ x)umϐׇ7iG}˘v$X%i.ŞTJIx+=vP95 Eb;B䲺q]; ,ɩyWZXWp[Jy0<- w IDAT/R1H k/WE]>0B{1gpH"H D [(_ɕ'nO )~߆\3gZ݃cp}ʻ&܉zpl(l%:|U5 ώq4-}L\2ʵנ{It9]7Lpq~[ mowY4#h )ñ]Bw 㑬e a8`Q }#vF7|3Q%^_7[a^5i|Sd̃ (C8)~{WG2F< ] uxȘ"cFʑZˆnU6"f&5 #GU.D'XWafh;G3OE bBdfd*WvIe" eu|[[YP{ǒy'ڃ?Z!^ T^*\b-ow $@UHdc\"DG̯M xhu=I-\\6:}'^e" c# ⳅn3qs]hZ`NG~bMiShXo20$3MEsN~:ljp 2wٰJ|믿WBx{浔 Vs@iI?6j7i4wEp̽җW_>>R% R>}]C] RwO_wpӿ;]g k>'Q |+|w)g:=3y݇Σ򋕞mKgsm|:i-.W"F}C'B:a:dNDt1bRhYo;r͛MB~)ʧ)<C9Ԏ^..rdkXNa\|L)Z<_0ŜP|혻wf*H܀ s D-d @0]ar^+j <*+%,͟NAݛ4d5%+<[MI30FiQE੭rIX*_ʚt7 +-}bOyn4E ZVC[CϰP^dj+_9,JUXwKʉu8 ܛ_pSY%7^\y<;Z?ZÀƆ}]IF\"=~G sok(GffK¬runńkNQO.5iqy7 ZQی*:BNul?xKLŪ/=5ZI0u&w XisjR?}CJ!tï>ҡ]Zwu#([_;ʇHp*H\=aYlu yTʎsñ nu6Û<+B͝oe o- bKM:uk.]S)6uI鹷~u|lCpr'oz#{N&ta6tòVg2Ks뎜/VC]ѼuQ~+u%E_JTr `&_ƍ) 說pY7 a:ȉ/eJZn:@V-Pg}T|yJhR=R*2@XEu-!$P~-O2B:` v0KF7 sQV7;ȘSg[3:A֢Wؔ8`/W`YdCyyԥ횛T#p{@!ϕnR. CRɊX&;NI`u[- IVS3DwE;D;N>*W)´R heir ;3֢(HrJ?8jUeꏪX(E@{e懚rI< WtDU1 Z7KLO({`|=^Sv{{T$k1QO5_.|/?t 2 PL5uMHq&B SdTҨ=5|TP0x䜄7:Q|S| \>`B*a.%*ID*a0u݋57 xa{`)MGC/\nxdR8$ ;5N{4t8裏Т K(96]]C9u" Et زtI]?(5YÁ7r:WQEr"@:N|2V|HSet:jR'>}HYۃv>=ܽCڃ}7i#.  ErB\A)*$Y <ϗOٲc|rDio8cJ;<;=[<–*?E0))RIW?s{zǷ~n+/"]~?|xbL[*ʥ B:i{LC}:eQ*׊GQQ}EKLOO?<|PJ=+nnhռ(h^wD(4C9 >&&r]JWя~t7p0o۶X(\PVCN 9cq-姟]ӨKUa|> t SD o#X|%='o9a][J1*G* lqjdc܀u( q\h >҅C\/ݻ.([+߰nMNgefC)7yPRr~C7R<6q"-?aƲ0,ۈÄDgHahyߚ!_bH1(yڤT1MRT [L},"/e eU&Ȕs&JY[jrSK"dJtuv$_՚ĵ2 yu5ӅܙAGcEkeJ~:XnR\'`d1C\ǡg ሹA%$TXe'Bl{ F T=uA*}s<]\/2 ?2}hL9 kp]_)'5Ýz_po>wZv ׍Jm]:\/5dS"~,I8].k(n-3=a~ڴFxT=o|cΝhJ{~zE*Ό:RrZЉL4d11`*!Eɗü+( ݾ}wO N;PQßi I9(#J9 ȘS1d,0QuiN?Jn\@Zgk+XP1}%keX*7nw-LMrUs}U" gt sY]0b.AP#75V~c.'&fa p%W X*W?q9ۯXNiK-]߀nDNJ^˜M%#1uj\FK]jQIEQ0) ,tT.x+d+)n!{.i7Z!iQQ\ӵ ϨثxSQW%hY+a ܈bdR%@a9bǥYQajХl3"0X 6z:ǿcw|\9s|JTn_4eX*7ՠ ~\L\ ڄ1gLzkxU7(ØLAFS.~>*EU T2yW aÆۿ]r\Q{'r p*|8dpx'hQbey~u*EݵsW-)V.n}j垮2Bpi. o~|ʡ*V^qN'_?tpǞ?NWvj*5zĀpgX ٢ )XЮH0 +qs:R'UryKXܴMko|cǎäe.'T. 9+ja=V .޶mwXnp |"AQc%B*$~LXs2ʘ ȩD? {"N*7[QaI{I,}(0󣴈#[nͷzkl(ܻロkZSO']^xjJ7)XNt%tȘ?(PFGـ ckeZEAkQ[9scʕ22HF lG̥ CƐNYczxxwTP`Z]T%*UVPl>3&=C*WDcL ;M-Iu$#1SIIidZZH.eA۴mǀf:9rVdEҲbYl 8S}iAjrBchD[T=ee W:T(b^Š) GԷ%a{4̝&_͠1yˊʅmVꤜn Ti4´%`X`'WᵧcJRg k50r)i.RC*W'|H "re)~tRGV*Q|۷VיcѣUq<*`2$b, trYӟ )9& PB k6>TsKܩc;7=PR>Sל+પFcyϘk[\^*/yT&O4:K*,.B Y-u4hhTE{W(Q~σZq?xr"ڙʕ>[Č:R:Tn:95=:=A/RBqs*s @W۷}B(\tQ(Idf&T7a0eH3[DkSdLIܲ{J!u=S22fJ+zfƘ\lECτaڊ`xIa8+*XvsQrćd,t2I140V!nh|ʤ- .Of:oNoSfBfRI˭?#-r?ͻ%2 n%O*sGN T 7}R$g3xSъM&L!sZY]9I.߃]he8όpOUYs%ի𷼬Vؚx;o_pjuxY3Uf[?Y`lK/>HA8AhⵃՃd׾_gz[R-_jL۵:@3q+RD1t6:\wf * =V_A^_~~jw;c=JLJ;cҡrM9J.0SF i͛l w۶mw3 IDAT}SO=ӽex N C0+ e|rqy["9b(!&F8:XP,ߕ#Y{SLT.42O]+ӊOA>GKr2IX\b ֭+SC'&!`1_WU.ʽ5ypgJbIn Ԝ*XI9: ;M-*uTnVsXrb&nDaबFm}%io,<;  r eUpi39$7JgT 4Q>?V$VF4ZHX̟&&08^+?ڸ1{s/|`Yjg(=!Jβ?,Ɠl9ݤ.|YT^%'ʵ&"h08L_ X Y;I&H-Y$y \uQWp$ Js nf 6|s[~=\ #oY9gdl`eU%X YXPEe?3# u˕ܽ3W6lÑԇOYvS*9}v_wYkD6auΧ=+Vk5Q{yOiS<4԰E6EL~|oQٞs`+rHڶNСreeܲR)7c| ~m=& @Wc seE?*~P j(6)d .[lݾ};%qVHV_GDܐK uz+9Q U`t}xڒYjaBd5osHוu>MlGG̥Մ.%}j(2Fu=^}(n `|IKm a>0)&|I&/y%S)j34)-+x\PJ$ɀ|f.@*onR_LdAYxožeW#AK91Jn[۪Mr韂[f.1U%7͆2r sz\^%Xm;eڇ~5,p^-$ԝQqYL4iKoqaV wGh7TS`,0\9݄ رsF;:eM\Vt.7LS;dr4rO~7pǼgz{˗f꣇u!O949M -Obɜ7jQmOMs]s筛ČuhO!T_+F; VH;4:d/bV)JG'"ؤ6^Wm47psr-M~6ie`wqEQ!t;Vår>==#4*Hj*WEt:T.,'CBrDX[n˖-G?|6 *T`W~JU٨Q>#BND Aޯ^j}V##Vz])F7tC/whfa9p1'0 3 4eT.?I/?0u< Q\:A]vY\Ϝ'È;]8Vy*8bwSgBjS] c/)'6ίu2+Y*4+Z3erCʫC=L!kyrc%&3Eg*Rr怽.G ^8\p̼(5].+aA X)kf3dK$ Nԫ 9ԭ} ^_JO-Pl*& p\&8DpQOw&ГŲݟIYoþr|ⴙYԑ/cCoH&i=HE:$."&Ϥ6HR)sJ/.)׬ӗIz"MNR @x1$MuT.n!"Zd~O@ꆩ7&D11Jj-Dm>Tn:TngҞ$r3?|1ok*WhZYVoET.?<*-#g8SRx\s%Ԩ?j9 b.UB\TDr/E~"*02lQ)l׬ N岜|/tCpRxA;4vII*Wu3ruq55OjfK7MR?HuS4a+r8IWyټy'?ɕ+WOg}Gf&kn --)[R<ݐ_^ɊdV_F*ztWmXRWwdQH/V*S Y{vNAX<@[69 UsVޜ*,n@iv>~˘ܹ;سgOwo?A, +5ޓ3,'CZ#)%PwuדO> T( yǐ90LqEVnK~Fr c((X8*!cCXeT^w>+onNG b1bmf<Rl<{[%Zim,;k0 K :Vg[5 W:O7R* $C@ɬxm r&5|w?uʝ:yYYPs(]%unʏ.ܿd:+ܵ2eSshZI gNF\) scpyg54#/ѐh/DT;Ei$^K"*]njNwa\KȖ35 [/ܤieHF\@*w6øCs~g Rp _=eudZ479\5lpεе! 5Z_q/_,+BI]85}ovw=9'ulR5anfHlnC*WQCБsF9 wV7$__t /_S*3?3 )N̴bZ:Tnʥr2ʥ)ls^F"!H%U`YJ\Y}zHR I&&rX}<7OBVab>[eн{U)_ogK=֛Lɇ^Ҿ"Ũb*Mk)n}0pP!VOxjI/(gRI9]%/(O<K;3pu0J ʻ,g2`+Hd$p`w9⑑O>hTd|<2e`+@.ɯϭfs7r"4s=\02gӅ{OPdLbA5bUO3UE8]~ˏmWco0@goL٥I'#]K%4C*;c"&` g\2̼Y ĞJҶ r3 85#gO}"zK4FiL=8|}əV.J'wi_|ҵ2O/FJE_z'7 *7a.;KVuz-]z[.(74R@\&kkMg `{<[*&죮H'pkHo84OXY7FTWrK7gok pN(3 M~D_]3 7O}Ga$還3ڱoݷc7*V?xenxC.d".+j#-ݺgf.bܓ(-/7Owdf_K܌]ZZSZUN;hR**K e{w?x]C׬풢&4L2=zoE`Ҷ[bɰuCoOIMf>Q<'pn}m޽/\l:nhe ac^2(PazU  Mr1g@^\%1кAYqΥG񸈺YfTnXe-[5H¬r#䈹N@sC'z"E%vS&qyDyVP"HߐHb:i2j8~/7N7Et%*<:wk&lLcÝB`JZJnKLʕw MļK KG,[\3O˺hI<:Zٻdg\s(j:XΞ$b]m-' {WJ ;[x Sp_Tn"bRNQRraT<3kuT.fYW"O {x/=,k3s Pq.=݀'tuo?{'{]="Z7;Ɋm=/UzjkNun׽eB|.<K5Woe!rS'`L8G徥=塒b 7^piDcRV\irU;wۏUDc:ҼyO*7uKq% @oq˖-7x# w֭wu?נքmq0mrul:>/_brcAe&MƸLWNA0i02FA1_yИOF8e@5?%*/I170%ο=nrbgGiTtxnTgOQDCN+Vi ;!&;g '#M[34LĽIi~&` NRrZ '+8uCfUC҆_&]LIDEI*zU"\+$C1RIZ9]#AsݮUYI77TAĈxocHD3ูL6YP)|.~GeyGR#O4Řv TCp rRC*WyʕL}UMuV&cMə`r 4r&\X>rUW}_qc֟fuJkV?x0/~ڣ*-W'ǏVC^GKrHUP([?s@j].e+t ET8OWϝ.vCr"nۤ:i41qeۀxY+Α7սKQgFߞ]*.[N_V}-GtmQH+@@ ,ܐP^"1< \.JD K`D&- ɟIA*o9URʻ/;tْARڇmC7|3&_}wǾz篏T-=k,`\}3;>e0[Фxul*2PaW)8&۠*-9EgґVt.@ߡ׽4՘Q𬌗E/k`3faqkuzsi{ԊAo =,']pWXRiF/MOOy?υKSohۡr3CK,.]o?P_Wn:11XL̊zY8-;' P܄[JG ͭۧHγ,-E*Wq@V2\+eKUt`,b13Fa-Z]0{ |˪NA%ǀQXdi5!`S2yCG?N)7`e.ͼc鬤:[Dµet1> \Y,K;TRY4V˂DT :Q3QީS!v+Z(>"Jڵ2M<2+ 49Xnkjj5𓙉)J+ PeRtxib__ W pJep b Kk& I4Y¢G+WI.UՕ [GXP& Dm%T*ᡙågqE 5Y{-k˕tϘtb'K*?+ŵm2>Ѩ g2x\ ]:: Է[F]rVL͈}L*q[%zy|o%Z_cbh!kK̃P=@P=W՗^zI$UP}~q3rUHt'| X:2ةqQ^bDP>eY ">2j\˺J񮕣Ȱʱ1?ٴ:#\4ܑ+EΑ)6u$9@gȋSy[cQz%<ˬLQ>Ԇ(+/ _JPEȶ\65*+L'sw2}9\t7 >𛹍ZR[Ibm^SsíD)gVUT,YPtTPw \QUZ5yovsf8݇~޿ADWLTg@ܜ3uP?{aӯjr+Sc#UqU%y" m=*Rֿ%R<] 3sL0s|^\cE\05}*hG2#ŽJaɣCԔ]6d RA_ s ӷ~Uc tbŁ=*,z3=0jŒXy<‚޺w^Txtb,+s~厘vǦƜoKZ.B wڵ@S[n;nR$S0RKJXOYRr0@ 2 V-&)N:JȂ/g!€z3YE\PBSEumj;"9k\B1-|{g07pYc/&aUYh¬a:*~) 4pN6oQCRD%@:=cAl2A 2nx"*Py&rbR:P~=i9DdfKf>jeH%0k!>$jw~XK8C*0dMrTOC:3)ms*;МP-p5iO΃"ˆ:TN*׾ק+Qg+ݾ E0^T]s\:βD7lG~7pl2zlflb`0wUd.NLeƥ.ЕZmk|ry.^HR}7rEgbA%gѻ2õךn6/۴IbIw7l]22Bq>bQ4QeњouܰiPVasr;LtՒb֮]{M7vm\pmǎ_Wz! WǬs:GGQ(Ut1^eDɝ_aJ'ʱ,RWB&15ڱ*BosZ9į<7,Q[4'8sA0w5j*"cPL,b;cEXWǬ\>Ē|Q@t& <&/n`]VvC](ktOI)3:4CmD54#S @ChoN.XNL*W \bru;u3T./::*\xo)n8w3@*684&&JK!Ua bke{\S;߷<6OD* sQKZzoW]R4qJiT^ܖlo":UWVɡVP( 浥rĬ&`5boVP:qAmYϼxnZv̻Wξike\esyҨc6P-s̟>?!F9zxjfcS V^q#b1 C"EG+g[xG3cSww+-09cif#*y՞h՜) .Bު ;FC==%B-^xKf q\O^y=\oV.Kw¼asW"}mu\C% {M7ņ½;={Y5dqDt@y#yKAʉ|v^R*WUSb'T.E;@h@a.EJK#1_t~>\8էr~C*O1) smTۓ{%AK5$ utB:Uivo ҕmŮRs2BGP曆*yt~2eQy/ Μ*Ӆsy˻眉1Y 1)*-W'jǏWۃ%9,sXf%o<˼13r7B  ۛ/>ΛYmR LDʼa]q$!_b=gQwgzɣx[`w? d3˻SY"!җsevGO>CJG-Jh ܛn$/DEd%w"a*,Wpsr.tOi5^Rv: ]72_.ttJgCBGevwegqַ^3umQ<&Foeѳ.K<`ȯj5.yZv{(yY2 <aH*gX{ x05,˟rq`u=A^0sDruUTnPE П Ǥ3W!I=uTnRmP_.?CQSun&EFE5 {!N8I0{$}hq@u/ÚiݨcMS|6%I/wk^/\朝'%2k SVhrD ^eՕRrR0w۶ϝ eUy;W9R=UU(R(5h4:;{5M}#DMk *P4PP@P9U^덽k=?fOg5k[ p}K2 O&FMj9{9eؒ 'V.~}[N/^~l$,7Ƅkx`o Kcj/uV/Ĝ-V$S D??͟}@]-㰈)gn po_"'PX9qo[6 VƢ pv2BT nR@λui7h we%2V`2Kؒ[ƚ6ry|;6mc߯;,=&i,^S睘2g8Q@H瑍HHE-F =h/rTCUkkR#,D+.M戤IM,!R jjQ>M<q=x^\0|,=X+1Gœ!BdM9+QwZ5rw6eCZ5Pw+S?+wC"FXڽ/V~_ r#Ρ\|8% 2G9G>(LWE(W>b槢XP ~`ۤbݹ\|95S\zM;{.n!hzj%=Zug6ͅR91r;rdJe[#,3tqӃ?}2!w4 A]t臷uL|\RS{g?ϟm7NE(nA3ٳV zӧU /z /S{1hY'2P*|=:UUQ\(Wf׻`!gpg9.Pn#)lmƿ#eVx˄x+_=!ݒyTUWK8+z;rUkQ2aw IPNf[*4%>G4U.\׊}K);K)⚆' _!$=ث:k,X^q 㶢&2/j !j%VVik (wg.::ʕ-2R\<@#sGfϱCɆc`8zg$0]"&j,(WT+U@(EQ^L =#w RqGP.s]`}# Sg>µr{3_=λVZgmʩ?lag-&OZsOLJ E/*ښ~f6aX9]/C\I%n`mM5F>bX&qb)'mv*iwk-NonX #܆=?  ʍ BA}Qɼn9yJ< ~mvU0N|\^(&bV )(W!z媘M,( r!cJʔ3XθUےmm&UA;< NeiJjJ ҟX.bƜ@eB$֒6e˖{。mV@/'O[úM'\97#4״kԪGNTw+#` z){4>1SX`lSM Ƭ;UxcfL98m{L~]l9H˜H]MkSޱ~{q @&98{h޷9?<2Z`-\Z;u#O>u2N[\yζ\2ݝ;w g F^>ʍ"{JGw}Q (m q h(rq+F(ĄBDA7~FD}(K .` [r=s\غ-uyeQSL~ ?+Ǎ=9ߞpb` ўLlM}64UC{PR tsJCd T+J/l[He NǂѓB GA} yrt>%Ɣ{j""tePի8xf.uy֖\  ^sXK2~+RCG<;Uo(Wp+Dv,@,/@Z< 1X()Ju2]v U傉E +I(X t"FFGV 6 XʺVnڬUjʕ\&}Q|3'(G"|LFn]7*|37]lfZH2f3R.zrpjsj'3ubjb0g,2r6n:m5粩JrK*s {0oM'iei얏ޤ.oqޮ8UiУĢۯrtR笁67d-9ScN)֒}gmnn.va6.iB\GbɟǑXgPe< Euϡ GjyF! NB',Vl {[v)ՎS8:&um|J' w˨sZd2fsۃbq[uوlZ\Qnx޽k&UPU Xv0U/9]#ȫʨ2q:v-!BA1#z,ZЙ2^ (e(7Va+ʸ^'R>զZe(fYP3=pT tt1>rZ<h-ˬ7t(܆MjKn-բܠ*XM_@j! _y}•| 4"q:;@I {OC< 0/nqrfǠFIzg#PЫ.ey M Er>D;GŎrs )=qr_{3&JZa6[uU3lƒk'/U;U`jo]ůUjGKպi,=m،3Zgajo̬ʧ2e2@ΖT.ɴ8;eo6f&-{T.TܓZ?<$Ugq f.r˔St捌[m\m.b55s53wl'Nv>ti;wͰKgSrjַxOyɯh)}EuϡD? 7iEb͇W-lF@0/hUޥ9e Gאp(q0+1뎮5ޝqD_tdEh=-cuQ=Vi~=?.]k?vU[Se*:Tm|WE:bGE^(`YrjPA'@ԉLB8XVMrq+1E: >T V8E FD́؇;~))uGYGUiQz 5 D/NL2JMWKK4Gkk*s,-d -uk,֫*LGݝNQƥFeV &H GnA5Tq]k#V!E 5Igw{~>|gxTŤK()GY*<@Z`:Aՠv$-X|k>͆ƽP IDATZ{߿3ke+jPuMH6Nmܭ8Vk~ 1۾g}OSS3՚Ø1li @ nG\&3L$egCX)|?Rַ99+XD-"S0gvM(\G >(~&eC-FUJU\{߲J`KR^"Cuٕ 7ǚm.`2p0FCb-.Դyڏzx7i&0p.qkb"gR5Eb}G1TG{ fBPt*t*MIUPQX3 uHY GUr#rhYH+zr%;a6!\Ux47/s.Tۂ%Wp$1I֎݈GeAMk(7Sui (bXU0>җ2ݟc0Ӡ6_bXK^0:P)9 ̈́W6;9< TtZ ʕmX蛘ړ|3'T:{7P-*>Hcnze63M:߮4EVv-v1M҅xπ ̜O1ƘmZ&%]nKY:Cu@’gK>`/~tsܩ3^sjuE9;a꽵rSm9xlw=F*exqkϽ׾m:Zq^a0W/'xJ:4hz(vxEӠ|oޑ؏¥xOW>2Qh,Ja\%t3.h/]csqv`>5g5(m(wZcI2exKaJ^`qE8Y-z +E*TQV m\^C6B PKIAުHFx"]C3@anD}T)DGb sr,u3FS&^K44,p5MeZP Q/Jӓˮ5ZX;y J]+');:F%JP.1.\u1*˚4b,R#BġBߧ{!8OsW>PUA>:ECAh9eb5 TWϮoލ()Kڼy|=Ӎ{q<9sqw7dcc?-ᡝ/Oo?T>>o_85uսSM ŒX0fYW* y=!3fl8@wR=X= Эtj_&#ߚ.󵚃Wf F`-x)\2GGs,p,PWm}sJZ l*i5.soc_3s'3ڻ1.k׎m\@7h{ ҥCn<4oWB?}2'&3LBC[ePYi>&D7!wɪudDZ+V@P)SȎB@/j' 7}ޑ63xkXY|Xce^2d.V2y}rښre"e/V"!0OTCCNVpU |#Thtr"8ah R ܢ\U" 3*]z?J(`jrFZ]Ԕ캊rU A&j2'"#HvZpiWHFy0J/%M^uF*ͥ!UVrn/QY.iPo TŒWAPx2%k"`br%$+J{?zĒN7D%BnU ViH!ƒ|b jL׆Gr *|Ľמ89VfN'*#YWzԋo-Ȳ}݇&dLVu0im\J;tq[;tZ$d9;-mdS*/g;JfШ83NfMFb~\SalZa ҃c./n-|3eWlK.OU|<`|YNk߿]ZI&N\ORG(YӥCntyܸg֟+~nMZZB/2iNFU wn.7(S/%^TEAhӈb{MYвtq[12:lֈd0Į4~oνrDbdU]rhVy1l:+,>(B*\B(iUqxsrCL}>(GEG]S&^KyB1(  6z)}Ѩ](Ӕe۰f6˭kÞھ%ZyݣKN8u9GtF]CQ&j( (WݸT3x7 r!GXig`>A7!@E «DqI"򅯖> qg;vTՠX{q×yxO!_I}zss~N[j ߑ9k'J3yˌ۱塧i-kضnE̘wYk'\ƒе]weP ]) tjB\sOy⊴UB ´ +5!:U\&5<,W>~֗%.N]~,ލqՁ6'& XؐNj#$R)o&UFeҡ?-$ZET/eQD!>U C 8iZ0- \>-`!l>2㒕VI5m4_m"R`[QnCOc'`i+YUuei+%_ʴ/p9*YA‡=Pc2S.7ke2uC\HB/]f+tQ*S76K tD@tHøkuQVًSWwZGZ\ Xb#5 M K.bCE,u.nZs!PnM?U_cCH'UkW*tSd:]C V#mA2zn۶tn<]>@;ETL$VYA\-hZ6&-*e9_X۝ 'e=n/uF-{355%DWEFR/b!_Wo0 ȱ\lj*"sW&w?Q *c?ȴ'f BưeeM? @W-]CF*e i8_P=-W ldRu׏5q m5[v{s[ם%=Y\'Iȣ n롕K}3d8uJkqZKSxo/o.6 >xyK C\ݶmN jj0cOY'gFgԧ>ҡpy%SYƐC1e~r"EW]^x_ 8ĢٹLTGVLL!E2rkw-tn;-Z 2};;ʲ/V"sN,bI'*9?BнȼqYޘ}-j_ƌ=0fKa7'Y2PEH/\8^?xxU,P5E\(׿%2]n eoFJE\g kPj%Gpu wx㍓'O-i1W_9>{Z5uy32b0ŇxrY ~rtONU*X0GmRQ.I:b2+C{r?$%O-AE]tx5FكZeBНs Fت lTอPQ? |Uԡ.69G^?g-.&\_1ݻ'?xih+D18] j%oDR  Rv_v߿||V(r"#?/ ƹV69S:7wRNo5j_ǁtJT}fmy3t= n:\v^4lr}gTw螲WstUaNj+Ov Q+o5 (ht:U7P.΀|W_ZJ%[ ݲ*u9Frc1Ҟ췿6;[YOg0щ,1cUbxNrc33t_phժUH9 \1(ʕMsS$P|(j%U|k[Tmz<{ulcmDG矪~F@,Mk(o &6+E1VBˉ Q9 cpAr%}FZ"GP.rG,Q'K@*Ÿ+7J(^{JPVrEZ%)z:޹l*ʍ?̴IȎݯWEYQn,:zEa0D5Fa ߟ,y_=ݻ.o.>h-ZK\HtD !jA{WE*ـrU@< _i˶mOOO b Rȗg?+q?ܠ_>/^}nvbϱ}mʍKJW=Bqb{mlHdZ.z6:]9 MmI|v5Ғ2poJ4̤OJ2Ǝ nCqQ[5gVu\7e#V’;r]ql(mssm7>~ruh\Y6A9UDwwhhh۶mD|/LBp)޾~0gA+S<#)ՂO[jOir"TڅS!}BK@oJW'xbժUǏ}=( |m{keW1Xb 狟 DeLjUjGuG_`B x3HlR;P.2%)(l"YJq܈}&>3P/J $:U|mQweXРI+r>S&b\D.wcT `>CedT'7"ON\yikr(7\ x6 ?زeL\c@7r~xb,ÿ:f{SHa hk2?1sK wͬi[o{hh|Rή/fja,cez Z8eme$staXAǒédI)vM qMǕښLf{\eSjqLrHVVJ>_oNv);s9٭m^C39_zm޳w߶5al~k_q!ZKt'g~oR \((}a%QKʶ>U~kHAآMw350.rkF{W;F,S(W5 WHV0VDƑGJ?gm~/6(rCt+_ 7ܐL&O>/CЭ5s-G+ 798<UV#I׭^#NЎ,](]#<q+gż 0rx\ڝ$?O!2ֶSJٌ%rhNq :\O=*?Vff^Uqv+Nm d@o/}ອoZah+V'};:yg _ʍ+h_~!/"X8;t]fbG-B`+qns.|.qLO5V˥&"oE&&Jp j-+uY+SBA{)8aP[0dEMԳՃ K1.(+־t8M@4.WBP\ W>!$ x*tb<G 2*^(W[  qBQצBb_!ĸŽmyΧXn(Wߩ D=yrOlC rPC\=th .rTJ"e7]¡\ n,s(a7'+}E(jG)AP.g-_)UP%+FoeeFW!VRrUvw(W.BEeE/FxK1M,E%ܭ:22'LӧO9Dh\Lgʅ2\+mmϽrl7nwk{kxcKv#_=(V&&ZeF0,4 a')qu6wtLflYjmM JL֤4]eoRM 7ke\ugX̦r)ϯW[.m~RMo\EuIڃp۶mc޵&6P) ':ޱc^gv> 'o̡Џ/v_ӠCFTRP ~ErPF afiTߕNJʈiV>*0h,޿]EPnUvPJ -VmYcHE. V|Wpi.b*3kK \zQ >T+UFLMB|g' %01Ai"Pj >ŲR}Ń&h}K=`K:QvջS#G΂1ΠLBAZ3lW|֠gʕ3E^uphɘq3Θ̔PQ?)J^FWػkݾ,wMx6m/4JW F7ZOL}/#dH4%W(壀„Lvw=BhOs(ӪX|.T׭jYֆ 6mTUj\1Xn1__x݂k|O^==2ՙnO=roʼɝ0tS(W&'V~l2BYe. pwi2d-*W+];@wQ,m.;h=Uq-q-bΙ0q]VU @&G'6_5S&ísc&=1][[fh: yVl\64%ЩnȈi'Nؾ}{Xduo`.( *p2Iw$Qg 6XAYHP>-@8EO cG`x!;ɖg5N"3E=Ğ{{ %v+$!7\(P?; Q#ֿ]`S-vh+pu={߀9j}ʪj\$>ʥ+O\{rC ._|۶m./Qn1R{ Η 0J!`yFֲftFѹO͐mNr\ڲeucޢH4J&O%D1_-ז{d&Mє2i?QGȵ|NN L^+WYt`H+|d_c+81^9~絬z? fы]ң21(SF8aJ't\12uGݔO:*A.' 6XApl 9 O4y4% g0)]JDD/, Z(׿~;GeUe&IJ\J\GZPJ*>@TL5勈JA(0\DJ;Cʥ̮E.h ODdeB'"3]Rry5Pn,w-u͡D#kP :(HNe5hڹ ys\ pZ'yk_a/*<q3 Kx WBw b$.|/ZWET#IJC.\r۶mrڵV1]U(Riӓ)r; k+BUp)#zJkS3U*bi[,rħb7w嚦p­[f=Jg0&ӥh򉹦Lx֭OaXT ?əFyق7 v 8SӵrKt-c]]BN. 2egӶܩ3TִTjq"aM%xUvV2 4{xy-׏uL%ЩCʗ7bO/nº?أ io+o#ԈS%h]ʁm*AW\.ɕj[G$ćvT" 2~`ڹ"hDdkk QҋC UfŊ_}}r\|DҐW2b%>@ӆ;Zq|2-[ljO.2Eg]b\&moʅGO  a,ء;w/TZv v+>"rmfکMVee@m}Lwm,NԑJuQ'D|Լ+m; [ {uSV*et:7.nѭ|mF^|լE"]^[7lH4wنE>1Gx:S[߿P(w;rG="t+K冐=zD\׽)Gvm~+K?(5 RxbWj\E"u'n!n᥀#>"ؚ2jZљrU9RP.ަ`8diDjG7N(Wnb?զȆtN\0j8ËVx%b"j{&܈Hr֩Ϸs2Fm_5$Z]N;%L T.+HC\Ų8 xQ6^Fn3 YIT@^9?WXáGOx'kQPXE(Tt>N\:%&44*bb9Qncfjddħ|>?55E/ctoץ=ub~}:z]l>i|dk%ae(7B~}oLLUj1rۯt$I0i71t֘]ɩ/ٲl:E!.V[[DbqeuLA^!j+62 ]krw& e iKV}W0nnH_t댤k1vc=xɌkF7,42J2wuСi>@D8e.s.ģporfn`JUt+̟*l\@u-E!) 3-PmswP2ʕ{i/S\7RP.T 4䀧BAo mG1Z"eWe|Z83P.OHɥrh:\#yk8(O?"UM[!R `\!mHdQP]W=3P.TBHp4r} tNo.nUi+!(" Zb,F|'d~2_G>ͽ袋J* At-<ͽx[OO'Ky]9bbM&.[al]Xujw~>o5'vwo/?VZ`Ō6B>u2W?y2?8t+n&O9}Ql4e\qW[؉Ӈ)L%LʖjKʕdɄHL]r\J>yX} ZiqkSKf&MeSڅTk.fh]` LT?V2:'k.Yv.|8i|eq-mۻ{s(W{\/KvY]Џ|}Q(/w 0UtSTy v/)nrA +Ti 1 F6?m-'lou A".EU-]Z ѠwE*RM wmjQn\BJC퐔T47z 'H+ĸ\A:<"A{H APn8Ab@wz \"vծ頒,RեhTl!Q~qNrV.21ph1Yi#HHj!r+$PxuvZK_3QZ,7D\YO +Vp t>| pj@ ֲ=B@ڂQrUT %2 }ˊݷ('4CCC6m-׉W033ScV{74o>>o=oy(+o~wYKC?Bq'^9 Jewzujm,e\8偮iOJ]id҉onV*UKׂ3uv2p^(WKMy6Ih᫚jGRP7wiH,7B3`6Tq(LY^hb'20h+SHA[`R[ub:bxRF$`g:]a( 6 .׊R躁DэO D~HG[ r9CL WՂCUA[*kZȟ%FWIeFR1ث)`D T"Up[R+=rmt ^PP. nIj'(ߧ{骊VD eDi)jrP魏Ii&U Ze$NY@\*%u֭Zʲ,Ky Lz&Ci\1{krХ|ooKK{KX)T06еLA[rt\vn=72-̥e~nmZ/ƸmWܓzxupxm{Z VZթ0IZ@΄(+~W\2Cʑm4w.[ұC0ZDhg䍟Lo|SS/.KyvD F$H Zw]wzz^b7r Y%-Kuo $țe$ ̠2S_ۃP41+s (B"#@eS@{y+hжKP.?eRw/,\ˮmAbJPEWuN$"n UFh(4M ;TQȰ^-'}:2T ؚRp2A%J\9 cBuQ.p l:Ţ%> mZT- ZeSUbjGtyrU+ \r+ݕSjR'vRn]re}epSFƒrPTE= QjEc|hQnPQ\Od.K&w޲efjSSSR{ʷ?YʗyOq[~w/\uݰ~Pc"{i8rs84*u?Ħa&D2},"@W72Ʉ(K:p6 cҲN'S5vVVm\iN2 ۣ}]ǩԏu,б'nUϝze57lLhk2tǥ_;l?%~e\r@zQbb]`D˲V8p`޽rP( I,k@a-ىGY(=[zPQ\ h:07jى`A̠4*\Gz (W_*%ϛ18S4!0IO5EY@}@#)R|UU#DvH:{.^:m@^05RxU#=/>-BDyqCjbUWE\To3ݦr;'bryS>KUܸ2sWY0:cTIEC IDAT6AWWd+F:K?wV Ru-"Y {xH^[ )Ԯ䇬jP,oiQ=^TQÜT4ZЇӄsr=@!7nۢRLNNV7k:C z>w'O?ͧؾ_p{2k;}CJ3jvr r,LZeՁ!;7tedۀ.rO`锝mqF*դNִeUXtرW; \]vLW12=*fFͦeC[7=eS>/DzUkxea}.ѽ9;"w&/[v"neC0\.dbqΝBR)Q qGD]9s+(\RyNt4 8  3Hz숶olUfB\Q{TjNdM^!V{+bBUAzK jDDz֚d)^ ZBo- (WZOԎ,gƂVm$[j'7h7ȅT:rC$"elN+F̺+WE+]끪!+#~,@D\Pv' k S Jz`9NLVFc<"/I93Vț14Lj[6s?+=]ۼ+l7 @4L*a[kb1ucqk.;Qq'`7eyM.Vs4hsj~,\< oÃ~+w_t ±[~o*?Ԫ(#Fĥ7ob4d2\x_B;UV _%kܦ G=+=sJG"D'bM:}'GڂQ\e۩_G(UG|Gx=>ʕEU*fS r?#{j_Wdy1^CBr?r>ʍ+ af# ʥ77'掌MmW [w,⢣\Se]E&=Ap4D4)(\t3]IӸJM  Ur@P+.w"$HrT*!VxTq2(c.1~3w?Wɗ=ʳQ X!]cɏcUw G4RMeH#/qI I:4dݺuTr Ɗ>O ˈfO|ɽ-k^5|Ϧ>*cOOwJo78@5=a8 iIV?@Kne&[<]#s6Y*[fU\v}5f6"|&su۶NݣeT6NYSɻ޽[75?3N]6yR# ~b,W~j~`߯sdՂ-}}+?M%!JSSS{왘T*|'!晞l J~җ@қ&yq`*I@kLS`0ei v? b$rD(Q~_CS|xvTL\xǫj"-Lr/Y\-Q TC&"D)NYU|/'#}Ia!E(G&hb!f.:pkTk{/T5wP6YUB@(3 PT[W2q\Tr\o(}|b!B.}$o1|Aj_2UcUlY`rPQ?ǫIK|B =(!ANI<s!O(q(W;[@P.캇R " }/LwjjJIś AbQhç8V MqԇdK(׋{F\|D3Ev`jR+yY TќK-SX>@Į\XRۡ%A\v:Sd>D* D%zT`06hI[p2fZ!n W+hUJI^"T*GHK}KB,d2\pXk+dRT*xv{'':O5Z`)G~G(X}ㅟTL/oїYtlVJfqt hf q ҂eOrsî]4SI} Bʍn뮡v wY܊ɌT2HggR{+.ᨳaۉs&֮4u|[ߏb;w}KJ܌kg}j2Ӎ -fLJ ž={=ZTŢ8"ىr8ke^{It# t#=SJAE=1( C`09%6lٲpz_ H!ẗ́A !lӤ_dzuӝPۦEX\är;'*&2QtU7F^) ( "E@f$?2TY! Oa8G_++W><3]0M0Sɔ@8@e)'t r@M/]_:'1"4l2ݴiS2ibqzzViۚ !1zy噯=QU WQ9o~oGx-aU+2Vn8^~iĎ}'+UC_}ΟeE9GS녷tr[Ȗmۘk]4 [Pn͟\V؃;k8é0&d*=*?uޚvё*Z,a fWy}ӝ86kɯ zUl/ ԣr읶f\.fɼR߿߾}ޱתQBڅ2P2Wu'!x?n}& A#ߪ+tkoRkR "jwCi6sNHDEJY%VxS] W͈$uUqHYU\e]j#B U'G8)JuSPuC{ K(>,n yD)ewfHsȡ5EHNsEގw Fՠv/tMtc,S_,ԡU\;4L"Jaqć-L`=c/!'(!(DtbP*Vу ݒO AzLW^#U- e!& X Ḫu')y/K-B>|շwBbG,W^nosP(O@mM  *ϔ^ccFvO]f-לWf@UƦΎ=b\?z/p4mV.Sl]N-t60L3NPtQL]ح+*jJH3m d+7\6oXĚ @>HU{O_o^@Wm ۸OmY`h62KďJ-Çٳۉ[*E}QŻ@J(ISO~{Z6ck/-_Pnͭ5WOLfSl.}v!+`8UppJaש7cw 2L(Xed?K\-N50t" >J~ڭ\yI[lhy}= qsO=)eiӬD6S[W{#icOĶ큁~ݻ'''K !}Qz<5_d^;_Vnsr+SD8* 0@ZY7~SAJP}TeE~EH8"^Kdh4Z,w`ӀjWX{,+{ qAMDH, 롸F׿FIHZpFrb"QTT"mHLF塏^Qn峦ns"y(W-&8u+qs)8r Egm]@ț C'DV !q\~ S7ϴ=-(ʕu%x*Hп { ۫ eU3!^U}N ,#qYH96h} -C,ii^|r<==KtKi|ƘNuEi0?(7%M[a}/*׻߷Xq]>\T D빏r#Jz\Όp)+^P2H\^1T yGўC!Y$#)`U\ٲ@(WUv9*(4޸bt 戠\ ނ_|D, ϔ,xDm7Sk'=P18 W9{Ek,N)*j:(euE[W`?A&>zT4Ĕ\kݱyE"-FA|S!g^@x,rF\A^˝Ak'<(!8|UX%*K(WqS\$M:E*Y vDVEѺ]rePZQ)-k+K}}`mD|xm/:K84b,+&%K^_2-ϔ>cpN=*lTo{8L}! $"j!)Yz-?ɑ3([%KĖ$d^9vsfs7KۓdleΌŖ%ZK,[qFwYԭ^=<`Wݺu֭uUmOz޾dnYϛϜ>wjh6X5Md>賍dns ܎Դ2l{fx䲟H$h(oq܋_ spMfi˧چD" K|uxdC0М655~K%wcw_N'E6.T6Ds}wuZؔ E$Ϋsɓ';6==\O+egBBSIU{޽{WUU(eEP. D1 =bTPT'ذP*OPoZYh%F(W;t)Ȅ̌->aO&F IDATZáGsK6zɬ?y.˚B?F!{=)l ʕm+ZPƢ 1\/5b@#.AHr|*gW.6uOV„htJq[vP.ctQbf- Ƙ-.<" xMʥ-(4\I(NfMN5aeB8mq, XyՆ+,RFWh @{tUT'"a}iQ0m|B˂J444$ɝ;wnٲE=orrr||冤%vT\^~ƻx]_k_3=/3;VHD!}|?dGyy˩Pyr}oI#-䓅_Mx~mmS"=||O6~*'^*o_xP8N޿Toڛu7r'\đN6I:niiI&/gΜ9zĄz-.¯FɫP*JXV zwuVUU(rQ$@ry1XjrED(W5䟗ʥ8cr7m&ŭ%`l*"4(jE`7`F4Ӈ8IuōD 2.< BXJvSoqUb8&7j]xcIܑB^7rhΣ%<ΎB9ZCI ɏ' A 4L@áT|jO 7P,OSal+k0AZeWHT9I 0[X_I8Ca 8KfdfB:R5W/1 7VNHErS3%0%Rv*21 H"MV>ݶ S1NօP.?2J ʍRSyGr % xUڿ:ZAF*I\(l"ߧ jkg@Qd#ړ(P.F5=4,oܨĻ t֮]cݙ1WcѽSGs-_n=ㆻT;~=5 ,Ůq۷󟾇 [-=m݂ uqD~ dmǗmߍmC>jMɔy?'W7<2hu;-(O R%g\7ʶϢV s1rR rA 2n ٶU+W\#֥(Df- 3iP.U\Pnɺ-* VTrk*FGrxÂPn<ʕKk 冭ݽo߾} 4PmA(׭Ƀ .S*d1JuuuرC@7Ɍk!(:[T7皼0ڗ DK45=ox{=k4Nfg"dny@vn"X+@7Ͳ?e8nKNy^>Hզ)ZܣKԇs)7:?Y%S nj󣣣qv??g'ã^qOc<緞mL&'''Mqع t/ 3S5!5 t}Hh(w`[[H槓9,?U_GOT~=W[r-́څȋPy=O?f/`JkrÕ{SrJF1T*ܬq?tz-nʭUB0bzn٩BXŗUoRih׵4|<yXk.L0AȪbe ! vRc y2־L$5[mmepe#&Pe@UTڜaKkm 0Xf$ èHBBQh@Fn[:i˓2*]).(:VSnHB a^F6Ph9+ԼvI^: ?ƔVk/!ԋԺPEH"xIΜ-$(9)HPrQnFVP.J:1Bh-^ф R&c =cAP$Ţo(2UG|CPww7_}'D#}<\\9(#OQ0P酪!Ȇ.!+gffK=CpLUх珅G+CwNE7ޑT_ܡ;ˏL];'2ֳ=LrnMv,536E@wP@76 3 < Mgl0HkENT~uxdCO$=5L]z̭zid,؉)g),k;v{HqVn\BD)8A\.wѓ'Or\.NFuWT~PNիp+np@ YP0̋(P*S^?h1?t' òlcTB:U64'Gt%RúKȃ5:oc,*/Mlڡ<A{VjC=7"+9VsEGaAiuAp:/r=ĎBAnT khyYѭE5UDH<&A TQ\Fe *P8beQ k1H(i?TTq٤Q~fXDMP(VQcR3hnZÎ3d0j ]tE;o(VB{BL7u𜰂MM' 6PBK6S3` * 4@fӦMvJ&`XD0Nb<}N]Gmu7@vC۴Cӝ;S煛l;/ G|mv89;9r" ΃Pa&Da6Jf}/Q[ۘL!omߍ^mD"Q0wBkGo}G;qU47_(N:u>]ӕ |.(a h[Ԣ@&h3 g>,‹ˑ* (N766m۶]r%zxxxbbfEDO&?Է^φM,[^x.XϛΌ3x*{{tPDn:Jfw]];+q5SŒs'*c4OԦq_Ւ}De3K7>b>44WuV"XlCMP__֖N7###ʚE)s%SϫrUrhu^[s 4W !\k`[8ͦ@/dmQFqښp$LJ کPW VeA 4֝!m`(Zb9_0ZgrLWZըA%]NtD0+1NQ)џ@$Յx}PE/tqd-oE"Ԕ0*׭SHREGq[D(,:J@V!鵤_Wr("[ݢ35f  !f>azTJ?2ύ(nd>#SC_Q [U` Rla ћ%M5*f҄TVAՇkj߁* (=񪫮 vH$,d"H,n)d1rٷ|/\M̧CtT"ScG -|-537;r,rWHx(<9?O^!Mkq|ٶ۶mks'*/5Mϼ<2v4_+_HO&L[)@po;==dpWc[ k_U@ƹh×\ʯ]?+=KZS%`'($ MDQК UO$p/kDyIL?BJ1}'}~j~Ɓ NRi녦2 5fe$hT#!1$%S#Jjɮ\ U9gAg ykvA69k^3)|E6dzĤ8 PUŭSisQxP.sE1:`\ '*D,kM ̤_PDJ'V0 aEtrZQ4#?(i-FLU(=UI{+b :i$P.U13 cEa3\5UTPn𰩩}ݵD"H9>>><<\ d2ab>Qyc}*>- fO߽2u{n><1==2wS t|{3H|zz&7:'~KsFT|ah&-q\z6{ 1䀎v߿W.R_['\}Ol R"{ @Ɇ[n_R~,$0&Xvmkkkx'92===99Q`|e%Bˋ*^z^^WV\ hIJr!e%-sF ʅlsRZ(DPRiP.e ,OJf" FÌ{fR&$y%e6ΪpBL3Q>Q3V6CJk*kœrhhvw#lʕG$F(Œ%W3@fܙs3E"PQ\ۊXUBEmkhNZz(ʃrj2%]DeڦD0V(0 yB528tByʱO;4<<4DHF) jb܀tSSSmmyJR [(FFFի5E':hg7_:Og'lj-,=xUnץ}w-tro冧敼sݷ< Ns5SC\% ^ Drrkq5D:UJ,u_s'*,F>'["dȓ Sּ{%!DW䭑#JoF6RsiB5V ./{Hxz 7v*=kr(6#rVC- t2@uB)NK̨B(#)%@MjQ٣7mmq~TZF(OJfcE" [I+h 10D:ZAѡ\^Č=\ޓ8 @̨ 1ђQ!ݔ`~blۡ`/wTGB-]{?z.-,^n ܚ[\\};`Vo#2'+ 5557nA~|||rrRMCCjJE6.I=uc=Eܪ^>IPwY`~n(8ʒBԺځT-3B)Y{A1`JmJմ$$F3R6f[kJC9ʤ r *K^<B}}_- Cr]P ޟhUT/|hIzcފBV6+ Ƣ3 KRr儎1mVrpULRh'4إP}'|n+6M;XꨙMB\jeffr(hUksʭρB>LkD|uxdCO]t{-z𭇡t+IѱDd2lw9},5LqFiU(&% U)ʕq$9s\\jh'T|{㑋>Q2Gġ34$KW5 5ɴ pZ8*1Sq4*Z"#a&1X`$T!z BC( 80Cg , RBJd\VO 1>9.'l@1mc>U( RSnCTDB1NKZm,jZl*v)Tq6ɌD|h y+вeSoAnPBh2bX 9hm̨UFJ`cFO8p OI"8*35*&oQ  PM_h@AT*f͚M6ر#xhk1d A9xɨ{T~zwnɡ\x17 Rd>_JNx?e;Pffg\"HDۖj(Cu3ͨo>P_R7'lʒALIŸO :l2BrB=̔fHy/ꓕ+׭"QK˅H5N/0W׎7; Hs0O6vrfS55 5Dm_W-9QNTV!s/~T=[3kڍi"aZ><66644466qSjNIC=d3_ yS.6)w(ƫp)`seCsBMO-v4&"Q (&P.\l2%eB f|y,m/ ZƈAťC~KF#=K1v.!=V1TauPsX\FuXA¾c%G35E%E0љi08M+4ջrɻW\TfddPO#k>3]uW1KY:~i ^r9ψRi\c ٺhtj;."le̶("`U"t>`6 b<8%&ZmUbOӪ5I. 5eB܀ׯ_ܼ}5kքs\__aEt'^8^qyedsY0rL/nϝo_=o953C%g~ǗmߍmC&=w7zmt-@Ɇt'T*OqxrcN7mښwrr kL/Dx}Vvih̷A*\#UˠM+ UAFd1Q!BSBJ\fJ(.*p$AxI$_Vh28PB莊9qJ1ѾFmrQ?FF~ⴱ֚|R[c~L8OLYB F wR}6F٘΋$x9uVA':a6bq:Gh7 j:"i;?i@Rإ/'H/E,:j\Zz$c j-,V N-llkʐqK'#KMJCT`-J6[INj9B<e2 &&y )ra8PĴPQݻwK 0P6*֘ U5eڥ+Y>ܹq|~ppphhJ$E[% N9&^ ^qC |Mm^+f s8w>?OL ?w~U\y .m?lݖGs uSWR,je˖-uuu!;::zс~6 >YaZ_?/N2Qb 2i9yaXS0^V;%:Lr0PfP0;k60BLօbQ(8vZm)(ta.ϕEPK|)VN=gYiJ c LCRB~$ȉ&ޚl4؏Yv y*㯬\+9WTdryPnDՈb`qmh-d,eSRr\rR5eddȇ~FU(ⅰvB󅝋iG-AhޚCd`Fi!ֲ1o` Br-nȁq5ԶWZ^[TD8{}T^ɴ}ƍ---;vHRl6ߟd":RVLoG~ٿQq3 uLy0;7զmGy@WWnߍG6TܵK4GZվ]w^ϜW& O]]][(o?88x…`PsUfle~կ~uttԨ* iyͨE*8籕9&=%#g(y$\hKi _ R̨H}K!R`p-`Tb1 a^Fێ2jRRKYfDdFk)Bk@DE!կ/\\c_uP2r#R1((?mU=HFĒ$D#Qm`&=̼K,F6xr!j(0P%rѢW5PŠ3I{=p@RAR3fƨ2 ۢJ*uuuQyUq=O&k׮:Ďa*[J>YP?b?>qxXok ŗWSZaEomߍ^mD"Q'S곎;5 ·57mhɡǢyITj<%o. 333gΜ9qXoo84g?Xa|>34X}tiͨKIիp+li E8fwr) `\9ThKiprU)ho+ʥ Klh2\-E{G\P.*&mU[rзp +5Z$LeA!ZQlqsũ(1٠$Zm-|{t(J$d*Pn@T[Fs IPh\sXtqW."=TA[nfE^IUl$D#2tf2W LRT(JkcɌ!,L(Ui(C*PgM0:|ϵ4pnà|q*Оfݼy3< `]gt(5Eg>,$V<܈UyCC֭[[[[;;;׭[ .е+gb_O=7|/|g^)$j?ޯ|B L>3Y-<գl;v6,k6~ '*+Ԑ}O=xY-oM4vM-!щU[{QEhoo:OhH0> '<|0*9вQW.#rE@ʨP.B4|X@Bxlx=SJPLUŀr)!і5ZhPWZ8b^nS(JLJf^$c2ϝ\h'V%b\cdjAP.#B&MI+~ʕ4bjT ``9ԮH ݕldmZH̓mxe14%<_u>O$BKMEN(]#0ߡkHP\#cȈc{7QrDyQnLI_vjP=!eP Aņ)jy5Msw1p.,ݷC_0?Z4LbYi,w*k{akn۶i֭y|?<5F˱}nDlٷs#<[a='GDS0==;>>kqm<}qbǗmߍmj~MzD-K/dX!(Fs[r[?z7#ȶYݘa˖-~Ǐ ={󳳳N[{%4CWUJU gE9իp+p3j򉏅jOP6g 4E7B ZX2@3; U"U)}atKÐQTu(&X:7^o(QU(5JڝQM6:mcK{,A hIc[C m!+>j"΍qVD,*>%,%#[E>%rR2) QTrEחY|WNc'-MM*tS!ey%ʧ^iy(k%ʖYiXjr)—S}jDm?5 cEZTs3v*X}K*+efxA3ޘk4FMg/K 1]K2=]5"pU7hiOO%!M@d2L&>!_W/'<g$ _d>ѣGZT3"Q* HHE-^# Rh F ,}h$H\& O43SqR-Sk3<`JE[BL.r6e[z(a=Tۗr!B{V)i!3Z ab*gCT:F(W{(;+l)8M)QM9P}o ̣P\6f\5VЍmy Qu5M{V?oˁPe{9VV%Whmlp)Б6lwU$$NPȯܩ{1݀a}&="A+Ihi޽w}wzN~n˖-k֬[ MScynDlwijo{!@v{w=_w79ٱœϝD#6WhM(P sF̼(Xk&E˂˘Ƈ@CUT Qc84zQt"6*7g$#TqWFR(yDUP.Cy (WP5U+7D  jwbBbxrR: +K9IlWnveWDZ}ɯ"hAZ_jj88/s6 Zqr8dD+bO?pDnhyQwK\>*-/}#Wmmm[n]vmWWWMMM<dk=Z^Dy#@)!;y?}]/" tg' Y]w?>O릲^x .~o/$j%5-׍Mܼm6ZL&s̙#GΓWR< V eٯ~lVN<.NWR$ ^L\ u4P "Q Ә;e+DrQt R-#S_Yʄr)N/ #6%@(G2v&QjdJ/W$x]~73j12WKuAfPg%;$$UYmwe@U(Xt6 I[TD*1 xx1_ՔqgBxW.5~3++)36![:VPZWЧGF2|0FRȫWav ޽[~n@PYنQp\=T__}5ջƍwr}}}0Z6 IDAT0?<3~MLy`3n&?+|7} /L3k=ܵKȩ{ڑ1/ks1hn՛[;[*(O>LV[[m۶%w ={vhhԩS'NrڰBU9q* 3h?pOO@aUpHBYW.G1R)!@2S>U[@(BڐCg93)&Z3u#l7+*ܑr`XNںL>jC M P.h粭oo|>HBL0H.U"F`ERUbчVB6(2Q eʥB. Ln*ʍD݋>OGbJwd,ȹЗiotD#Fw@a7a(b80"e02$j`I;n(uFGEO蓩r/䌂 9P"$C\ }͋Ubhf2-YPM&W^TٳGtڵ6 Re5!/R*ץ!*|}?Jm޼y۶m---mmmL&ߏ&ޑ%8np]v;ԇC(wC0#ʹspo ڀ%&;[K%5rFm%O%S}844tÇOMMipAO>Çy-T m1R5@HnEQ-VƆ"08p^.%Pz$ 3+YP`M Ԋ u`vA(`FMH\B+B5L(oD FOVǸѶSX%̌ JXK5:3#R:v:eB|a*\Pdàt^%$qQ(.Q}ccxU(6< '(ᤊ"QN Bվ#p R {~RB w@g3m^+i+htFEt# amCVъS'h\\N- ل 8O(@eCQ53UjBB(^-UAj6F`rp?NUPyפ.Q01D!/RB'>Q⽹gLv~ׯ_ѡ\߯fjWNf8wlߛxdnx2HИ~G/|?Xݷ8oh5kmmٹi&ZC iPW-QgURBp'| VQ3}wy* ^XQd\NZD817+Ȇ3pTD}h8RJriBhqZThBŻtDhauPPgTH؎ivGS{ʙT؊ג'et52!'0A<|\L(je U _"-)u@W-;V Ɠ^U\ xPnQM!RϸۢUV"$^|S/+e$+ -;4q[r8Q[QSI45MWr"@UI.'c *M"L?BntZ. Ke ߢrZcK|/ߧl ^FC|*Fi 5Ͽeҟ,cq c5k\qmmmjAVEƿt~";w _;'U(߼ǾܺQ/i)njOnhR#JVMܼy憆sǏ?~Ci>~JC=俆믯f'B j˖-{ﭷZ W*J8Q0$R= O9@31B2V\"T >CQm):^<Y.(L+:TH؎EeŸ̇ˠs #BBPWNSC {3eZ.C~)UMkE@(>R2OBLƸU *U(?I\ƹ3b1ܼСHX9UD턚6IRʋf-4qQ!e]@9F ) PDmv#)1P%!C6X?:@ 13#g&շp7BgouθgϞo]OySr&0pꡱQl[m5ӯʯtMQ\Z hnݺk׮&5q.;|&a">$ˏOw3yMq ׂ7ݷ>Mt׏:n]| ^=7޸KXc.m͛7k'uSOOÇgffT4CjXSOKrH mP0u]wyg*\*].'D% 2N(Pυ>B&!?j+2>GBUZmYf[mԶ$hƟ܋Hn!ʘ*OA})Ka\JԖS^$@{Jh(QU|m "ɮ\^]aHx-U\3UU75DAhd*HnPSp2R >`a&hbh)F(WKg-5wԦ>P.d]G50<9{> 4og5&@+i5W(y%>Lf '撟ӅjN$#fʍl&/I̧mT2;1\ "bс7Y vCVy0 :Q '=*N8T$#y*(*0Eu75gXHeTCZ.^PV!7l1>]LF{Wb?jVܸh_=ϛ=}toooQ10p}k:::Z[CGFFr/g, 7 p\%Cno{'*;w=7DyKe_n͛kq= ={,ԯT^ja\-_;={7I^+*|B[^^[3"*W%g3!IG'TUrP.|e *-#EU0xBƔr Rb0],?+)1JjFoQ[pC%HxUDц!-t-t>r[Eqf m3.$0*A*PXu\M@ rS#5$ۊ*L%2.ESNbdfceC(gt* 34fʥh4ܨ0R1Ԫ|ygϞ߹[`k.~$lh*# +0 ߿ _$;vltt4&ICs{{5\T!1ؚoSo<OZ^j@wKۅ'obCkH5[ۍmeƍYctdfffT9|ۿT^j<R~mkkKީSlZFڮ¥Nj\QT c5<E\P :WgB(1Q#c0 [ @ v嵊. )ZRkVwRű ™ dQWQAh`?Du+iGR1c.dПP*GYcNDڨ%ÏM{Vf13)ă)D@X%Se6) vD+eBP]VOFò5G#V!J-4,ef4:XN_3ɡ\S.#Uz"ǙJj$כ -!&!/*JjYvWVC@ɴ13?J!fWFl8Rv_1RI4APZW, R*r{`4{qXQME}Dž ڌ!_QS+عsvjm  =CI"$)sN?O^> |>ŮkO~Q^sz~☷6lXn~xxTGm^4CHT(fggw5 FsKj^j¥²uz%*"* &>4=P @@nԮV3\0F\MbCP : Q}w1%@YTzI5Q&F1h j3P.D׳$vqRxfVV71_Y:[MHi4 0Q5%}(·5ş}%0>5OC]rq޹ֺ/ޖsBNnjEmkkN鉉^zO2U!THu||ܹsgydt§UU @+UeOYly+ٕGO[\P.*P.4̼JalP[L`9k,gT€9%aRA Jc7BA-YbhgTK|_cE4(RQrRBC&HgoS%/!RJjR@FKQ.z(U΁T ():kC\`kچq(W#JIe I;`١cfQƨܕ(8OfaX{btEJӌ$冟_H- @O &/)`|Fʟ@51GO`FuEvUS^+^W$cʗnQ=/RkkW^f͚ųMfa;۷o߻woss0 <~Frީȿ|< 7PGm妺_MbDyֶnZ\󦦦<o~e^3 |!:@̜={v`` xrȑ/}K_| VUFr`3d|FLԗG&CcHYGq-5F3# rZ0!%m,e /N*)Qa.4WF }HJȁg(SI=BQ2\ߪuuDDdX)IU@{[,S+Tlb=؁(h!ƤQ% _ٶ *[Q)g_.R׻ޥAoΝ[lq@WXe;Z?m۶Accc*rlMIOrvG Ǧr'3_y_ܒtC%&v#[󎎎73<۫ |&#ϐIɧGFFzzz٬Ǐ_6Gg4A%PN5+Jprf%WT%j)'Q[fN@NkBٰ"T igk =dŒ<@ ){oBU>UGVw9Q)Z.ĢjFfJcodLQ;͸-2R eāubHؠ\P,*1VrCX.(g] Q*~g x1cP#Uqr  &|YMApf,; c7ZM!c\9q‚PjӅ:kGUFQ%\cAFR [oa._}ʤҌDfKn??6oK׮] \vA]˓L* t7~>tvv^{|>?22288؏Yt[87<w%MWHxIwdVj455mٲE7W^9|:@Cʃr3LOOvrx@tC?/lSN5+Jyrr+*7UbZQ@$g RA36ZR SZkejY{kQ)*UE`r"4UC`AP7*8Ƴc.g;FTg8C͒Q8c5Z{BIh TE㔩Mw7TugH)CR E`U.O EErѺRI!3jk\YeQ} IDATEQ!!FBGŹ!׶PTTc"F  &|_vV%]@(`czAJrn"Sa%VaQnF~jnU)(! rj)Ak'h5o斖+rk֬پ}{kk3.yvcx!}k'&&Pl}|HDdnbDyk+j:޼y37xW^ wW+ ʝGUl}.۳g"Jmذajj_; &P+s+dTFy+5Lnذ&;Z@.\8{,<$<|>YbF++ʭEVW~_2!ZurYZ )m]p*1`65l(t80(!XBۢm+:FsVBJbu(JY V/eWPw-:j7[V(W{Vd$|'&På>Č1(b>]I?yeM7d=znBUw``ŵbhzzСCǏkjuww ylS)%K]#Ĭ*!`#:jV>D̯4sK*`U$R2M@iCW31yT~~dBJ ^ʈ2u`K 5%dh\0h2RJ E!hV I2&KeFI*˪UCˏBe/-O(?Ȕ Ac:3TyJ+TbH<]EG]F`XS}c(ʊ ˿馛$J?^{-wލ/۷3xF%cԇVhwݍZ|~ppptt45QpK&F!566nڴ^{>33o꘥E{B}Od2)4cǎ400pر7| ;04FL !U=3|W555{A響 .w: ayglS9ަRuuvvd.\>44ؕ+WL&o)F|XDtLr*UwNE7Ş,NE@ XyX )lM0"Tqhu<*1CT(cA()kU`MPZ(Qyx2 VMNVp@f;< cU(W|]x#X b====XU`lH, 듓{Ν;'W^ye*@Q4҄+I }`҄(H8Mb/1˸(2&vsΎP(]vtZ{511qСcǎ5}@__+cF!J3::zɰqnӟPЇ$Ee~Bիp)1qѲTB$:48W0/ rXkD_@葶U(W˂e[*$|XQPPIz&FGLkKR$=SS*E5brC1P1Z d}4ߕZ" cQJՎ})QawSgU(WXDQ=pRK3Ҵq8)fi"~0DI{Ej@bc y0Kt(ѐdX,Ce֚~@m@+hTՇ?GH%3`H -+P0|q<πl1WJa#t2; k)=|_|'uuuW^yeSS n۶-gȤO8144$imyy8N3]R` -ƚx^|g+f{L(J$deQm`l2bf|n@DDGJz5gW3 =Z%3!8*U5ܑRσ1e%<.|7n_mnT`559yRQz.CYtԩϣl^y??u֮t:-rjnn޺uk?RdID phzl;wT/ (f2?8'2"mJ>d2iӦ6ĉxNQ0UbCnʋ~`rySfggU7pwmly]]]>>&)nS1]FH-:ËGTĹJUpl`"(s5ZF1 hSt_S &74 #mTwQ+F m(5}kr`3 FּS)4W&v$##3 @b((a)Ԋ܂q>5 Z =Sz`4Z/P T Y1Ilr>eZh*&+r(O%ǨZBZMRlB\>D-ZEmp F_-PݟzJ(P ?QjD/Q0y^XYB;Y!y8RK2F6^$㓑> -*|.fǪp9D Ki1` TZ;a5@j64EQ|Nyȑ#LfjjXܠuuu;wBmܸ@<ÿF[g^}% ꫷n @169m(eY&YI~vy LVM@D2yLC__ӧ٬'Gȭ?nE`͚5gΜԧ>%)q9ʤU9f L1bآl R<,XkiZJfn(J=Ȑ0d-_r c_S.-hTUֶk׮f!H$RԦM֬Yc,aJ-L>kP>+-Y+hoo󣣣###hu~"ۡأdM'3Ҳax-̫zĉCVUP)ѿ+cF!2O>=::*Q{@LM!7)Q\EHYRŖr$^N'#@S;6@ @GibhEH&NЦEj7iX4)R\E#G&,sf}=<7w3gΜ9;3.ԄFt7?J&@U&s!}N$gniAEv'A1!3HXT?*0پRʏ3Z:yLre`40Ers)9 #C);ehu$aI[e39P.PX(NµlPͶ,ɡ2SƊE[ Mw&IS\;AGV1m, e (7z)@^ WBe):0O/ߙ|rT@q.chBފј]E^ϫcy &w(ŝD}ģ} oB1`$t+;b )&#ʕ#yPœ0srt#bT OZ^y ;/Kٺu__UU%rC&ٲe ԤsHzд++:::/- ccc_H&A72 ݼy3KO>RuW1544$˗/r>&eee?I^ƶU+s1RޡVϠCB@>*3BzA9>$h'r(BWE5CfT-"(] as;Zv2te d8glBBz xF!ZSX/Vo+9,AJY*ߒB1&u3PV"rM~`"HHR(7P)L#͌7:ع2s.]-L@j9SrME1!IOt;+اLZXL©9s'׉2bAW#2<ξ<" QQ3,9++Q֗0g0V8躂g)߷NnUur Qw]Tzg>ϛsb~t̪ܵkΝ;PM6dp_z` UUU{ٵkؘ:ڷ/ {C@d~ƫ&7nDr믿>55{_-I͵/}Ё===kq{zz+_J&N&Y~/~o|V-*DQ4\kmOP"KP[EfY,2\ɽH5(}J+e%P.jP"լTE}\L*.9Q(7IfWҖN-' 9kb<_2K,\o`m CeQ_'ҝ] "KLV<+-B_j%i]XKʮːRBt=;!gBG8O}0&% CuU2ʘ bAg|gT* 27Yg>q,Y݊2%2ej ڦNFs9H"bo e^wwwuWssT.rH̲---B(eÆ pApo4ʊZo7o Yr###{5/|% [pd*ZssƍLOOæ)^PHWWEsss]]]w|D7zeeeSSSyyOӑ{LƪҒ t^{WJfnL"9YR;(JM.&$^DIfYP]Q,A%bN:qru,AU?U5~Uq/׉bzmfEW=C%! eV ZVjZP93\Rzo&yyE$ίx($ enJ4#r|m(WrԒKͅ6gFNas>կEQT(Mx/kL9%J:O!6iP2$ 25<mJ阜[2*k),? &.e ԋY R99&ILG >u*D+~1UKNI&KdƖ`^,>9 ÒW8coG@ +"~bZG@2VzA|P[t2OyJ{lΝ.++cƢ_W 5Yknn>tP6@꡺j;KE|eEѷ.!aƇ's1xem۶gϞpi[Y3`kE_1ɡq‡wy,Z\\|uj?n6MCys*++{{{zyn[ %p uT$wV:]D''t]T9HB%XZMН.#EsvyO#* ?`iȰPFT s2V+[Qr1%0)G U{A>I>/_e:>ڹa!h쬦]sv`=O8z;1 IDATR-i(7Kωs;9R!X cV(T5 fBn>Ȩ?3|ʐA -D^o&l?S(7 1-:K1%P@Sq(3żB- A^#pb \tghǺ, EqhGaiiKa.*{[oݴi}ڼ4Y- ===}}}^844׷_[4vnn^S_!PnDJ:-z6Q*N`3CD]ss0N#[+ Xgd+UkRI(+GS2:!@yLvG+@mGuܘVB"<%2[ƝK*+7E|U3ZJ_8JΔnz&~ á\tG,K0r! S^΀j2#ePPF!:M(w6x`srlO_2bEEM%}njR*<"Pnb:Z,P>3I.(pK< a |NpD@f$T~vddb!T,/NE0 [ pRu\5 ;C(ͅrV5)YUUUp B(WmhhhnnVh^~Ư|++˿V7|fffxxغIqH1x#Wo!W%BNNNvww2xt?.5(WݭJ0JJ]]`uϦ#8^ S#;_) 5]72Dq@9̍5P =[-F1sGDLVPV`!*zE(,ΩL} @ фKʉ~-鏒oV$TvJVv_>>RkM\4;`,B*de 5 o 0If|Bn)gT.@a)eWeNr8`:ZP.eRYRrM Po5BD5Y"ſ]-ZA̡uP.U~vkĴ UU ?~ĉM}ɒXwVGOZO<__N{xV!nݺʆ&4Cz=[hZMf7tSKK իz&_$|eɋ0c655mڴ SSP|^5PիWϟ?o^\ooyd7%xfjɓzy zQ{{'?xyw]U)13_T!T {pz#Q U"?ys\!܂:PDjjyk2;Q*6DՀ :hT+:&TFL%tдN:g^ZI53P攑Ӷ{THΤP.<u2TI/ixwVR%0 J8aE12̛) )d*(.lx9 |kلqJ O}+RVV~;w߿_:~ĉ~ֽ)oٲСCuuu(W=WVV677g24C,&z@Ӛ7\fK޶:tVyqqqlllbbo(ᒴͦl6qFT(ys.Α02߱c?A^5~\.P՗FU1'P<u+"[M);s-㒂.9a7VQ\F"b2TPnιU|;k-rCTʡ\4CXI,P m,(@9h tLu@h.6VBܰpV 'l\ƶ"bN2ԦP.r T,-IeȄ,9gNf j}P쩙1ab]ֈ1<3sD-y|q|0CzRʼ(@=S1BJ %JNÌQ&(k*⢞+VpP y |$fS& Ma:0!{ 2e΢Վ/<ϰi`Ν$03{W~W;vh4w~~~||ޣIn^xgB#jWUUٳ]z@rCmmmsssEE̐) zд++vݺu]wݞ={ t&&QL$M6_|ӧx|^PnPS0|Tݙ?O 555KKK\7ްL?N9W.;K]׬Jf: ݞ`br:a2:cXCLBȆ u4Z Pzu(d1If vJ$4,0>fb+IDRѨ!_7SPL-ɻwD1S^Q~e ݑKڶ10L;)20Ql⯝XFS4O2DqLnPn0De/x  hHJlEP~*8^߭M\^ЯMIi43M4'DON0%Ug(ɣJHVvR^hAFB?MZMrQ4W3Ӿ}_|F^WWw;w \U4cNgMk s,|H:###Vs%fwLCEEņ }Vϫ5uVr;;;usKF\.?99}>Ϸ1q``eee}}`rr7ޘNhO\:WB ܆,ץL1WyxBKM!(]QYYB> /7rMD-eqVe6nJmt6ptGqNPo)ŦkJ@٢KraKD%T,)K&:͋g@s\< 04j/Z3~ %d )UDNT 0]hn[[M7ݤ}: jף<祥}kpPC[[ 7ܰi&!~٬p5z=[hZMzkRCC޽{7l+5>>~UMK򌑇֪*̅ ._̀ \APիW/^嬻a:/| U:vJ]s믿qʵ( BO1WyЉr9Xʥ`$Okh&Ga\k09B)\IEդJ||MRŠQBV{Pnbr g :Ex W]¬x\ XB ^(M<[DB t =$! X'aeī3 I^ -cɁZD kVB N^yBO7?EE- #՗OYM^ vN5)>T!h#}71Xzg܂rռqLolnnW^UzYO< Şٹs{󞚚 -_>[h>++$qƽ{bGFFrM"C6miifVB} ߚ:+pE@333.]R=1QfsqqqQVd#G|u6R]OU|M*bS B֫[crUu5$9utP~ JA&pj!":@x EpW.^Oۯ(kJ$yUPͼb y;a,s)E"O59ul,e\EHZvjR /er5J螙JB랯[)op΄.Ѓp@LB(T"0bItm|k*eifIqݫ.BJH>33`1]kA(WQ6ݸq 7`S =3/S0\UUwC \F5u>[h|Mz \Evڱc@wnnntt4mpIZLqʆϞ=n(P(\FN(ի&J ^wqǃ>iz_*΢q(7 7Jʥ|q e(ץوhP΅pGBR( CȉP'˳ ⋣6BA8h {>>??l~;J4\#YrΝgU  uwwX90Pn>Ee߾}>`GGt4eׅBٳ}}}|~~~mmBI^ORR(ROSBuXd.v$ ) *[к52ңB3ڙ8ZP)b625bEuʉqfe07Jn"RLsȡ\Yk/Ӕ FI(i0@k;l#+X(j(6PDhŘI,K&$"P(7ąj'C( fUV@$3!a@5L6rW|BfďQHO)w9gj=$,s "uV(֌X#Ph!pRO J Ye|JIr\D U_wbGq´ hePIt,sFAq D`JڰVH؎p~lm) 6֩Т-|1}{Ǐ?y$sYreٚL&-B/ŔhŅ |'N7mY喕UTTd2}sl=0~kze\E6lhjj5U:ofDM"މ4;Yl&;55uq(LjD^XXqEkk>x-׺ukjjt~{jj*G)(7 7$9I䞕N)J5 wBQAGN/UG۬I^"5¢wRkm꜅R-i@PP1M s0NBP)3UTVVig;ʡzK7,S('Tq0+ yZ*yn5"[*Q0+ X_ꠕ5KbL:]5')M^ 9+t;D&Ԍ*Fz@XÉs6IQJ9mP2z%ECT„ A%4UkCG,%||ܜXdy2 rFq2kdG;G:a`VL]`4M *jk*ۀ9<|d3A%pʍ:\.E"V3dRFTC3)ᓟ:?*W>݄ *N6nnn5P4;;;99PMSv7|nrseeemmmEE}|WV4U[lioo*@W`*ifh w&Է2խ_ӣ(P(\xqpp_y```pp0y6>vud2Z Bgggww 3CP*!J\9 &_Y=UB!F bLx6G0?PIt#Q6x9Sš@NLBfL&2*(-qEBlȶrf(3hU)F:^ވvj˘2%2|kPnŃryChd'LKOPP.?ӀA$ fD`tVS^]=:QcS¬ J(ΐCMjP(3 ʲzUpŚYzD"_^yKE6A)!C0(LBkt*@5/("$3U":?f<7 uPPzIqP& )eOUG@d+** ȰYU g|r0_8=`&cj#SWVg^mqftI"FI _y&l޳6EEHGɼl)}+"tK&'(~C_IGlT@NAD\j.JDP:g?cNƚ"I̷jS hBV)U;4'|%xx3Pi +ۈ ›\Q`ROx# @5h{QpPkq~.0]9H\SS{۷BYIx'_}U*v}}wܱuV!*++y׳5_Y_r(W=^wu͔<;33#٧+r5 Tw.;i(V {ʕ/2O[\wwi9rdΖ+++SGGGϞ=;99933M*\=Š$JFafMe\$@/+2+kf¬ޚ9Q<[Ly()B;\QQ3ՁIeAyNປrQT͜#mrUHsX}NJtAʴ#,j8*[*_*ak#T9yy GݩizAjXH^MUGMW] h=͘.؝(}l%Fb@t3?9eӋ$2ҕ"@=΄:](b IDATϳ5Kd"xL5ѻato&4+-A悰ʑ'߄rr.IA\*mdrlm(ϻ PPYWәWf]I60CFu.1P3F{ٮLUcPmmmMMMcc޽{+Zjbduĉ'xdsB(W=TWWYzg4ʊzrU۷3{Jm01Dyyyuuu5R|׾AWM v!+gϞUB.---.. 9";v;dPyyy]]]6Ձ/^[XXsa5AU^Gyr5I %_QiMdyh!x.aqԄ1pʵؠߔ3'jm-{0E<^]>kI47bل\3kTPec$8B8f@JN2ЊE''[" ETߚIYX䖘prqR"Aj N X;Iʳ5nG=t'1D/BnKRkUT !(hI;lTBHߴai`i}">3E DHUd ug^at|e 3d z쳳;xpou1(WQEEE6ڸq} gD'[F[T:\^qgSl=iWV4m677o޼ٚj_uPP[-E W^^^SSTYY6@WVVx-.&''gEaW^tx~Xci}c&D6Cl]]Pl~~ҥK]]]k \U -U-l")*۾b]Y4uzpߝUw+y]: y0^?pj ʪSx<捼H)J84y e7/T~`T*$lwm |C~*FKzDt6"$PǨ.U"bj2jJ^R,"ˋ>~6i;b:Fg$Y,X[r%7ZIJMFad8I~Qʏ:HI[&/(e2e+ܖA(z6*9;Iڰ4yzFG07ȚBOoI:T2KXl@ KXy-"i|%ClEEŞ={va^s/355 /rؘ:KYk`Qf$ZZZr===z˲Ef-rر6+&z 9sfzzZf+ʕ_O E"Ƴ!KTu``2D)CԄVr bOKGFU yl^D4ܹwYXP˄P.'mtT+ȡS𣵋$FμBbVC2]*hM) _GGPu6L*4*-ϰt7vhKIx78ʧCaf|'s\/E/. L=9;bP.e}n\ hBPIM55Q#%tf9Gn\D&d7+r:Hn2t KV+ʥ4Y*lT./HS0L%:ʟ*r+&ȴ;4_ PN8;;Ý9 !j<X.3CNVt#Bjjjluu}6mڤ B.\8qY;c۶mB(׌zgo^oC*++7l֖d-[ zj.zB%5(w||… Wj>Cyqر8cZ! jo011q̙k`;$ c,4)r Pn\T 1Rڀ=!^'uէ@ePșUb)w ŴP` "1P.ꑳ0$/T/x$3SB7WIu% ;G8D,>QoTM)Mvz,NՅIc{ĨUS %'s\/9;H 2lOL\'KΊi;1s9ϙ%fGNhPmDV^^}jr3%[|JmEWD37X9"YRW9PW,׹9ngЖĊ@9fHșP.a[^] Կ`0S;*PB+]-t?~۫brͻw.НЗkĉ7c Ȓ7~AIަFF&5ƺWUU1m#MMMMOO箑ꕋhMA333ϟr劥煅>)d=z=ƌn֭S'*WgϞ]XXJ)&|ʕ_O|_;W,MNJ+NPiK ʵJr#Ǫ y!4 t'D(A}_PPLye@PѺAXVLC3r0+t+ITʩ<6=9pBhrF9aQ\CC+Ԍz;jlQ/E_Ptu Id^uIrؠ 54ϒr+S$& #'JhrbECB;:9fB/NbWBhk\ U]$ن ĩɢBr̬5Z:A93♚ ^+gY;q \4 e[QΙfTʋɓ'&X0ݸ\Euuu۶m۽{yB`C_|^bo~{S[[+ܕK-go^ocrͿuuu B0???{:?لi[(zzzP;q<22ok )>vp,J0ammuŋTEQX|,vn Jr}|Ii5QQ r :}\+&pF20K/C(xmxr(Wy2\__Ȉܵ>#Z\/;g2*ϟZZ\+W&HE*BЩQ4܈9[ k%/fKg«PC`t 4\ɨ 3vBB~P(Ϗс3JZA5(9:@T0yRQ1Ajfۗf\.SMꫯ>t#xGjkkPP([?&5Z-hUx ;;;ovtl2&e2{ѣTaFY\P8|WWWPLD^@X>(wY( XJ*-&qz9 < kzĊo-QnAKr 9)%+XkFAc9销J3sFyAb܀J1@y0,QoQ؝af˹OqDVHL 2jCI@svp4[ '^6S(Fc'_rt&S(78aT&%fH~ Wo@ICfAhq2҄rBW1ER(7! ̍Խ"PϷĀ&?gZEhq y!o 囕A!1噡jhʍђą<'ݻA*C+z_|ũ)vmmÇ?\Ig<#p^oM!:~ ) zg||Ǽ;lصׯ!]]].\PW͡Íerӫpz.|F7]Kn+JN+1yKNfdqKQ ^)rx nE[%ryarwdyAS2@M`"E%B(FREss* 3C*YT?Rbkt[!V^>($ZA#/j+ cP187#  \:LP.ɉohݤ=@k'$[GdiyXJe80?kbh\ad^ hrօ-,5eJNܵ~E7ג"ŀ@5E(iP.5fnFD;~ā\nQV!̜g)EDLd)1:޽{&3|JHs= njjͽ{ \P( }1p ^o-*}zrrrvvּ/-#[ԫp,PnuYHK,bSǦz(蘓Ey:=KV8ZaNAU< A)A~|}fе*Z x-N1ܢ!zZzR`qT`'*ZMDji(}6[D:9.1*i5&[W _HsȏF5j_g)T©Ko$ʾ%røbe#O8+=gJE}>x K11<'?4ryN|yȍ5ʰZ Z\Zx%) OXjPœQ^bD/CάV9o(Kf4t6OI4ÎXL0EOo 2o-39Ï8%saOBs3uxP4ZD? PO~MMMB(WFVpy^o-*?s|>WF _gxPnznQ)riR!(،Oy tBAxci :B.ObzxY)0I ķA!4'fq M8CVLr ajJ5 oV]`orvCsg0 .LB3rNwJQ]+EY60(WniҩD>O}BDhrJb L1TS,Ց\]r?>UtoʁѮ(d.dq(|PrsI50ח%2&5/abϏa|_E:IoMc)s$ɷX) ,vp҆μlKʖ2H||d2:g RT3[1cJtLS-0*T/$:RR) HU hˉeNeJO/}ҥK֭7_d2oZg033355.Š^y{nppйN~{~0@>B`y A|eEZ-hUx .[(Ν;or/_ZB=רk(++fZr|e=rӫp%\Kb&@(8RJ)aNrk9Oqb'B_3g܃AMʸPPUh BGGr@4$Dbn)r@7>ZQˏ,5?% p÷x<ҰFTR}Cd0?B F|p/샼?f ?jV)TK1qjG!$ə~R, 2ίMGP5}ی5(y( l)tE stRe^ HSTLJ5r-ǐdu|hQ"a2%yD(׋ kb*A `֦HP֥LxUfeZS?bR{ϝѳv-#lF,CjġLMQ9 Q;ͬ"LxL=I?[J1}ff ^wݻwG'2LeeeGGݻ᦯, 455 /4P&ԓlEC=hXݥ8V]PUNUS^S x$gX!nu.T 㜩a4PrMe se%6%J p'5 ʥ b즐%slf % B\7a :/vY\G|́1NzX$|H1w<%2RG7hT$(y-^.<ʱ+gO3q&sըP 4sSK|I#zo:LJDoQ:I2[hhhm' &urmm޽{7mڤYXX!B|'_{53͛뮻Nً46rK" IDAT;uP\gg'qGGg?0 ֵ/^EfgJgPn ԮM`ER@d 3KjRGQsN͎>!uEɆQ1EKg4DReUZ2<*NZt>T|&+dc"gӰM ce+Y" nO9$"b7$JLKV`UR)Q;bN)T& WeTĬV3%9- _ v[vPo1XTA1G6 C*+Tr=ʘ9dbb5RtՖfggN:ݽo߾ƥ%HeىBզMĉO=Tgg'Sgyf߾}{ \)kWeJkfff~_ʿXXXP'*;@6=v؝w)F˝]__dtŋ/_^[jk$K*\ @iJE)R|ɹ aJKK瘁"!4v"Lu,HT%X4yh=HJx\XzRKaV6(7`bzoi.Ͼ ZhD"4`Jl'C99(vl*ٕ E td9)4lWxe+*$˰',Q~j7\r q^k $-..ٹ_7nܻw@-_ztW馛~W^y婧bjs}3 BajjJ)* De^r[_<ͪ(B_YYY5;:;;WWᆑh.SJidA:(xTAZ!10|8fH{RF_tA,Y/q96Jki)Aܙ nMCyȡS}":AQ6{' 9 rC"4γ/L6ܠ1~T%_ytwS nnTe\ψ:)zP\!3T?ldv/8 Ĭrͬ5r~}aŒ\YZ~DT(R|ΘnAա*^Tzr12OVw~7`޸&潒{"]l6[YY{Jm!$'ZSSS=/̗[VVdÇ3,[KKK333Z_k@a0?6|c"Ν;aQx~2 v-r1Z\g*---šgNOORvRĻrӫpF,. 5ոL|wt#B[K\C?dQi:sA]]qQ׊Q3V["fL6dQT@\h f|5cZ;ۅnJ<hKTb4 XEXhW\(={REJ`aX_?8Ӄƌa&|G;\2% 'o0OȩhV_'$j r)5J)$WWzsK(ZSacjujRMde@yA1ΌW-N\uU))s__GW\p]zצMظ~NiWuuu<ȑ#Go&sff^x7ݻw VC+Rٳg'''|vww9c>#`,UUU---LFÅӧO>233#Ԯ]gtETz)p55.#xإ'&XNp6vI>R 4ЄvB ȕ$Lk33_x̊xrEIiR bdRH)+̄)Blcw]qD8)CƖ4۫o7ߍ }6Hј Ǘe<}T<;;{={(j˖-|~dd:t͛7_?q7AwyÇf ݚUF|ܹsCCCr#?00r+Z\uEM]є'x,׳ݮQI.|3W@VI*.t5o 1D x@,LhƢor `_ˇY, EFRCe<9DCg_b^Á?XQNs~3㕰6{u-RĚd@(U@mA<8o>N hQ첄ķK))R Bܢ,$t DLZ'g<va9O8 :kG#YJXnhaaallzqqqxxx;vPblllnݺ#G}O=ԏ~#|>>O/Doo/zExGԵ8lE}Р^zĉ\.7==P⤮}ovӵ|nJ)BP1tU(\0qDͳ]JdbQ!UrE".9Q|EP!hW> ٫4^``Ѣ"D)QJ)RqBrvSl#!kRRi{V))%afԾψ],(1$wg)-;,W(uiO,"<(ɟ%׹k憆 ˗ۧ>hkkkhhP7ׯ_GyꩧN<rtts"Kbnn.ݞhllsttTxPvlmm=vحުCaI?~ʕ\.r5M]0qҫpW/Jŵf%椀]Si/ EG_s×(lc$qskC^x3Ձ80HloSr jfX$K"Vܪ[{HX3Rª㛪i# i E5kDf|"~vGnhgnh!DR#%+5R"𗖖ԉpR!LKwpxg #UT4 y-ViC}M)OP\=bQ{u&q0v@~}H}l>PIx[# DՉikj?+/5DV9wo7,%a7lP__ںgϞW\ʕ+e_}էzjhhmvgr=>,.. ?̚SoM!:JM_|kygstaq3@]k)J5ie}/0) HIH)"1~TkB[8%jl%qPًzPGUIbyfTuѷφw3~cɱ`JAߚ3N'VL>L氦<[ BP!yg/#(ߊJʝXLEgGEga,HDpJ+oqbEn` l8ߜŧt25~ mL՜uČy%HL-6业2k,3Lbb)Řn]Tl'$NRUY{ AGd0b2`(4i?xlh|":---rٱ1u޲jhttt|||aa* zMOO3}VjaaA jP}}}ggs&&&~n;w, {jjj:::l٢0hvttkvvٲwuױcȍаe˖Js[nhhԩS|~|||%^vhaJ&%Bp<٨sn̠('VJքuU<Ot2ɝi-c:P,EI/ 48o^jJc{7Ww&x_#6?59Jy cr a8St~$d};# 'Wf &SXV:gQګ)|Zä]~2P]|砌cԬ2Pn$]aنa,8҈kW.a(4 ؕKqKa̲S"/"8 6Y|R h6~Uv T+׌f٣UnՕ\Yj;Koii9v޽{r͇HjܕN:nݺ^{M'[p z++ĉSzzzN8!i& utt߿nڵk֭[n]ͭ888x̙|><+wjjKؿѣG8L&ul6799y񱱱 }F:ZÌ8 % NH+ -S*]ٌeW.1ύc3PQ¯! VJ(+JzhGhIG\R %4&taxzyR=KJ6B$PJh} LfqP>TCf1 [ɉQ;fдGxR=S c*FY.[]+̱f%M"0AJ. .VhW0TSZZgQ[^\hn37P/Op[EEdY~_Uq'ñvhzzgÆ sss ﯭUKM6544lV޼yɟo tGFF{챽{;vlÆ B룉%:;; ӧ+++~mޱcG{{{P]SSsA!WMLL+?',;/_~Wwi5~~~[[[$gΜBӣa橵ѣwu2۶mSz|sssΝs.Yz)ҫpW.If{!$d"xo1V|BE3:?6z,kםs)7F9U|ʊ~'N$8k߹|\鐄ދ:LgcW~ A|bjÁ #@1 R^(o0O?>+^VQ}6$djG(~c'TMT(a+BwjڸqcSSS[[ݻWSsu[+l߇>{キVw1Ƀَ['O.UЎktmڵkΝ7o5@)P{{r-UUU@.\6[5kWnKj+&u-?l6+d֭mmmʲwvvr|>Eͩ<ж;Rٟ OR&YS8h 3O~W.J.%$7SĤre:|0[ԞB/&MI8fDA) WCguq@­rU_C}6Q0cAQs. ^aJVN?6hTVpIH)- DxWr5o$TF5u)4QrQ#NnP>Nqmy*db`mv*tYY<@% ʐC+H7DZUf^Q،Lm0V&pWJ g"fq'L-, ˿˿ۿE߃E =|Co^VVO?<<<77k`O8O;Nf:tȑ 6Pn.{饗^~eFseee;z~7fMLmKecccNW!;wT{dѝzoo}~0F얢'<̳>koll|3 *ZZZ* }}}<-d2=z-.i۶mۼyT IDATX({zz&''{{{-]EE&yСj0{'O8qYB)g*y#7\ J w[07D\yR!k&A#1~9_(uk X(zڝx!@[XfQxAJ oP.@ \TJ%LPBfJG#H$CK,::i#%OFWEKdtyR\4j**b@*ء\+aQgfӽ}I\D"V?zO^]K T"#+S@HPs #QcZxM! Xe1MF챓5 N#J)XJQj-8:$w$$iQBBPlP5v9b5L(UO]뿎=[/K>FWWWoذaƍ6m2_MNN^rx$u޲@{;kkkMgvtM_ ;5x5 DmLNy:oԇ/ S3ѣGյ3n͛o^QQ#uuurK.r9-|Ì_/s+[6̥$R$ϫ1 8G9:s\=49ś]ɡ\Po9pP` ݸlńZCж@CKwR 4V2b (%yS¬=Q ì22yJ  ~QhBʁryT$eP.*(ñCJhyHN\`/mtJ531gk๩k2;9:qؕS=P.CMl]2E'`<@僎/˃ lhQF\A/94¦E}ZDr"iX_gd4"s:N a5{5da>}|}Y;ON8!S?|}ˉ&gSqo~o>跾-+{zzLxՋ/gqxGзLZu-Љ~j؂f8TQՄwԇ )r TJ>:HZ딄Tehb Acp{ .lQI!-8 A©<[&Z(EFI.~MT4rLL;#$猪XeW"L%f|a!x5CͰbraS.Rh2#7^rt'F3loe KՊtWHO>{&ȳpNs͙p!E)ghOZE=K2R$p˦-l3#$TC+YR<,p2WB"h yr:x&)1v(&QAw6lPъ _ւM ~3 LEC$ڥ.7yI'wG?k.uƴL뮻}Qxi||_O~/[U=C>hp2Cg{ }##Toor;ڮѶg>39w\YYLwwS Z[[y}-.Jh&555jW } G<30i5WzWd)Nk[A' erPi 3#䃺ZY_U?+e<Ε2Sky|DT,ْ!*.QooLS249bH(Nq1QRGڭ(L>FRfIwzd6|8=Tgo䦻*|f:ʼ1:Ƈ@bAYb΂f(HnjJ 9^^eDGH^褷;(n‹*ƒ:;ŗ,?W9EL[$T'z/3Lh< \?e()(Q0kd *Bw8Kh2Wot3h\J !)vV!x_e:)Q;48aP31,~01&VjP a!HI1n K W۶mkjjQy"uo7񍡡!'jo??Yn =3[Z$(&JU'0Szǝ zӳ֫lm^gOFaݷ\>[6aƿϳgϚH*JlV_:EEܴiӶmWCCC.]Vw6;4qx +⬸>;;|gvvV*FD)ᶆR;+P(|*0Zr㗍I^K֏ :B*kc_2 !{\= EpFpbJzk䒉L: `:P.p6,wrCVMPݕbr+>g S QE*XBK{): ʥߊ@ ?TfPp [kdzHPn~Nțu8cqXCn^}F/[Vv.3br+bNZT`/(7j=Pt'^Z. m7 THd KR_ @#ۚ[b_YB;8S)FNDrv/+d^:}hVt/}\d\]<̥1_^MMM[nd2f񱱱^y]ٞUcc㣏>/s8{gx2?{m FUxPS/ ?y/~\Ieee35{w]<72_COonwS>k{~Ls=;cW֭[&'''&&:;;GGG *BQ,U }{/^4_ ON( A#XZ7 P) ky(`cb((Wr\S0PJ e irPdBU_/(WA; 1 A՚& /4haB4*n_6@'!?hy͗ k*setӭJtVPCڬ * E3Yy"rcq:yp^&O⋌.`q;ҋ 31ʙ9+USvtdQ<;xkr"M5X'_F}_2 [@kgd#L@sl+hr j( VI"9HJŪ%7f5"r#aiʋR!TTVХ,Hc֍7IsiI޻U\yz?^ƒv,XD*HxLrS3TILfL8\I% ] p#ac l=%[^ґ9:̦ս{:ڻwիk^Wuuu_~yeeMMӓR\XXxꩧ?pf;wܿKK 7G;;biӻjڤqlij/h8!U<$/еz@7??fffjjL?\f y$Ͼo*BkMS_;1Nڪ{ofͬ5?s{ojyxuܷWJ|WoܸxkENj+++6l#̌9s&,RJiqd/W~"'XKF᪭&,3᪄JFAcB ECID7_닢ĕ+e`W.QW.TQYrKl;}OlxhĕK%2Wrt%YDTTX#CBPQ)RQ@JPT:REҋKo7Qp(H0DzAXB+ =7Bpi۳q&<MJ0)"{*U !C"`.Ttr!Z.{f@Xn+ U[K /&׳?A.5`sd\p]z3Ac`Os6gjrوdi+(*9i-T8[; ``ב=p:7Jl;oW6lPLn_rY;qsȚ5&'8٢?Tؓ.1_r297tRkA{089]uv/c^ ܓgLW"S窴LM_N#QԝSԨ-VNj+h"R.mY  V])]a^a7#BZHi/!SגunQ!B4zc^jkk׭[G%.е!jg?)M|ɃF➛ZO|'^ƍﻎrwgK۷]^={|S>V_?%k֬ټy3y-n^^P,%a_ lz4S_Re }M(+kjF6zxnXJaT\%gp]E`oj6n [n޽?V>wܖ-[+⓰e  m߾}dÝ8Ws̏E,Sd#وҪj<䀭^"!0()x]r3e E.%\d mxMy)YE όJ†&SPEHЬ&7$_ᝣz=)uHvrD LOLpqFX *KɰޡzW]+B":izzO4TJ4[P{ լ7+ɟ??K/mhh@E;v{rrҤ>/EJʔ0T\B3tX)/+%wv^=iaz;ErU+zNp,Inx#]0<́!rB廰KM1L>aCE*) 1d4!0u1ܸҞ(mGP0%d ` ևy昜se6v._e! Er[o ڴaZ:yibb<% m Smd8ʕz=z;ٍISI9~gjՎS{\Yye`DKI$] d&kP%2c1/~)hMܲ4-@&fOژRQWo_ s<;DbWn#+>l?9z=c[p(Y׮]K677755;?~.+l޼yӦMV8 7099yܹURw? ]3p>3rjNʌkB$["W` .XzEzks$ [`fuHB'[<~N1gs mk8 MhT~00/1A )-5n,Sv%6|V 3A+i+4d]@JR19+z73y #k!5I,z/DmܜJ͘:Pz=> T]\_+!W`DU ~3}r IDATq^bNޕK4jMU(7xhP6g*)͔Fx|5wNt2A4@SyX2_$ Lm|2ҫt ҏkhڵ555===PH$ N9YpGh4jnO˫2믿裏O^x5kw?W05wѩO4XO6jǎ33O=gl}p8๹]vQg^veԵTjff__=aP/'%?8ݻA~ζ~0bsA,KXd|Jka.mQٲrӓP2kHD!JQ=LYC MY%0&qcrJ@뇫/b/ATNW" YPE+5+v咟S}A wi\mZɶm\+Ժ긶.&sXZZzO̲~(zΦs@i1i*e`A,YD!@LBTXYK4 !xtnA:r]jO׊hL%6h#PUy$?tOdm /Ep8\LGZ567 o)Osd&w +D@$ |OX݇@]B{*iqX62|Hܵ5vz^^=B]*U2D82g=KV/U%JZ01XeV ;+Q)č7}űxxd8x…=h{{ǹ9𚚚-[߿|uomCL{"X_[uMirGy@xxe$ЭyfgYr/M@꼼~z;vغu+˷q;;;:4::j0byyp8OLLt7Wd@%Y 0:8a6"wiK(BT>"&N2rs"$\ v9]( W6 Ra>'(Blz?m}T>fnl}JJ)li$F>~Сcǎ-//dmݺ#S~q8S?|B'Q ʛow?qE,TӴ]p|ɓf-R;cwySee?JR3}6='#BMCF=T5sN76"r!́5#K'?4bf{laPYU!}yyy7//ٗOdTHS^%O>Ǿ1<4a!}HW[Kmrۭ }}}ǠDɈ| ##mM(mhq'?W5pJJqf]OH`Ƶ8,N$r ͕8L.;W,lZ3lho@+++a+,:tPH",zH4%m R;7aln笂F`͍}HqY$Lúlu+WTbn# %W"-T>Xl$s:.((2\pa pb-R!a3a;>EnʂDuR\8)YrD*@jb'\ێ QdK8Wz 9Fy@x`hKK;7 z}ìI:>XM'.\IދXu.S|`~eݎbyyȑ#^RAξӟIo3 ;|gPc_WYNo)pc#Lvvv7sA"ì7HLNҮtk׮gW < <lKV#o hyP)#DXW0 sJl/KF/όȜ"dj,mZ9kl^p=;v<8lN^qA9:eo]HWfnOf8!H.@8re!I۬T7A|sCrT*%giiĉ'OƉ'߼d'ѿ CٶkG6V f7ӧ;::B}T*5::-ڙa fL#ϴ\s_TÊ4g`a UCMiȶdAۦhfKWN^]FW+ ]"|-?v~p 6)WC!U5 ym镙~ h٬rʌwaʌ蕑-"YKeHP#9I&mhL(Go}mT*&&199k NR,%ccawgiHG~w轸𶖆 f~<my ֫m۶y\_j59]`]sEx[ajدBY}D"V0B]@c%▎5pX (})sJ@YW ѥyV\ PZU}܁ R'ރ7L9p63%0Sj M&d' ><jav+Tub: H3Tܳ'ܛ@؅w4pv9Q jRH91 Q56="wְ3^;iOlwvCcc#/]~{`` F2<}tggC"}t喖|baZH2;3s_YMEcBfY^HRgϞD$zi;~Ϟ=+RWWY1LrE/epU#U{V(="]j)Z̈T!%jMYT;trK4=ŲEdS\wQ&5l}V5$EρD <1)-OJjw2zNe=Ty̒a @d,5.&Q;!ԡeDj*$D WJ#A%P(w91a9aKK+7[H(?$V\i1ݳ( 'uj\@c'WH~^[lf .xC3fÅ]#5ܼ )l[2W5G۝rC0}7ɵO߻6R4vnf\E"@!%VRA\rTSܹ~˛xwFGGsh4J=!͐+4NW/ڿy'K1;;922"ٳgIwڵklقlTRRyȞ4hBj4n@YXv2PFFeqJZv@`,͘Y]M\Ն%I䲒nMبmVi8)*2M6\St@oxj(Dr?7Lgy$]fQeՂx,nwlvʅgԀIU$VXنn!vՂ>M{P 5Pjƹ:Қ$0nu%Lt1Zv{%P^^noK/~L&;::FFF%ɑSNMMM9G.%mknc.|c7VsSKn3񞞞p8 \Kb`` ۽;4O%pՀ^HyXȂg(ףgwe-E8ͦ4Kz$z&SFICLJc>%")p5SU_S@EVu"KWus)S ;+\&Iow>fsCjj[2d?{v8YrΕyco*Et `.m2F@8B Xm熁[?BV 0E%CMdv`jNVqi,ֽ{ROΜ9ݍM$Ob$k֬!ɋP2ո2NW{}*˱GbN+ W CHR4ǭݳgw`e_fU.@ DpnTzŹQ"%au+0JkgnkeDzm2HipRAX8L*=)sX-QNYҜu d@Δ>Ug?) O+^\i{i܃fHHќʲN&LJ1K܀S$'܈n7nqqqaa\J955o\p_h$9w\L]KrGP3hmzߕ{w8#4X_J 80p~ q#L$===5~[:pB!I9jR9YP}XwxЎ3G$22l 5rgTPU |h.pV^Wa6rF(5 MƌF`ynyi]KJ!~Pig@-)ln9~٢xgs K=I܅>OA Ҕ[QWE7ΥUM,9UF3KRyvjޤ`?W=#0 ,D] AW*&BjX&i; O+;ͥCAևdrI_3-@TbSZ +9&`yeJKQ X>or`ah:ű,/P[m{,=;phjzM WdU2)rsc)@-9#jslWDTڧF ?ز2UerN pA$ۈO͔? խ`fI͊Bi/ghcd{5B놆 7x̙3ÓrNM@ᚒ7ݬOkF8]3R[o5=='ajjsffoo(L%Phaa! ֐:X`aHmOq}>I)&T`R>zp Zt1YpTF aR0eEf; yL`-7K8'+M!삂+:DF%.ଲeY¤aJT\% FO#x/Ysh. Hܐm6CE8gUM8C|)Ȕs'1HW(X[X",**BNy?on2<{ѣGGGG,..]pAt?10076ۿ{sٕw[7Vn$ÇSO~[o544%၁Q|衇v؁ ƵP]]?<<HjA r[P޹+X\J(1Dz^[#ܶq/- T"[PTg)FdU#֛"CXFʛkT6|} S7{j"Ԉ(w:~WP>ҥA- њ9)ga,eh:kgw#(KS(5h?679 bI8IF3>PZ $|wR #cZƦ,E[ U8 80M\mV{i*){iVOP}Uؗ ݲѦ vK/撥ٳ#i[\\Fk׮*,,TGغukw=aEm-ۛ67moTO~r1wwhdfڸqm- v5np6n\z{%|iXlhh8NB]]W-[O="EEEk֬_^^R*@'n%, gP$veήm)b+d"5ӔJ0SF`[F *Q\*r.e׉G%OiOoĀi4sTRZ5GcpM>x9#@fC5R;5+22YQeqeGLyUV 2D qJ+#&/5?,(V4tp=.Md*[_3q%wsT!nng&f5VWWB9WVV~[ڻw;;;|VV fff"ڵk+** FyQ.al`+MqlJsa:P9$Fey)*f]^{?]gΜ6^HCCCSSSҡErݷ֏wO$-(xH${O 9@1ye,ǫ J^` ̉ p=' p&O8)xi9fKD8J*-@@z ו4 S=c6;L(׾ "8쑟. 2a4 nUoPNzrgb2H=t6NQ۟~Doum‡}Pqv 'v(fUsƑJ Ips陙cǎڵ.//y߹s~^x駟zKJJ0驩ŚRPW 6ޡr[7{5m- J!ibX< B?\nZƶFԼs7דyyy}cS﹩FG떻7볌ɽH+;\85@"^wW|3ٱc/;wrV;BFDZPv=4!R"DUVp[ZX^Jc(#qjaOi="={!eu7)E]sgO8J9fXLod"5j:Ir6`]^ȲD %X]`#l4- Ed 6rq'dSLWF~+IyTuN/ XS] iH,0CpynUs6/~ρֿ\[,S.=@ W26"t8*8jsdJR4ɪ% {3,ooаm۶y+]~??vvv>@h4z 6|йTUU٠Ier6nlT.C:G{Ó]AmmpQY^m=wgKB)dz*7F嶵MOOWk$u5rHcccQB?ֿHu9nuuuQQ+V [0{܆ YJ$%J}*)3'\RN\َ C00>dci`w5 ~lb0' 蘘KbFu[l\W+3D>֟%4_wCju&l:-fEj|@Vq9x7x[s9d)1&DT%U:zI50=EzݻRt"<77J^y商-[Eх%ݺ@'OݵkΖUTTx?47Yw5mrD$Ͼ!pVlk$cSX/۟{5օ:Z;_Bulm{ϕKzWn#q˻+='sTE^U/|N@-...O:577!r a?,an 1#u"HnU8tj8(U0]n~+WJgi;h$V[pr3WKk~~}6L)ODdceo =Ңi4R}CiL@6$N=f4؛ $!=a%Mzt:/--;w\ccWeeeH$-z>޽{@G\{֭H$-g3S ggg߯r:{䁛I77>{מ8caR"$@+>CQApV5H?M_;b?RQu9SaY>۳ȣaOp!Ћ 7د"1GӋsH] g+"I_9׽Ѯ\,5҉^y\= \^;:L(q'i$MPF9A!%i8FtΫ%Ddⶐ?#/^ssW`ݛ̼gthFBREfaoGiV[iC^̣'KO~0ڗHP+rvvsi]Pj 9f@+ck$NS.)(( sy"oAJKk*.z 岲SN544ԼYů֭[.\yKKKClBnvttq&"{M|ɃAm;SV|_=g_>Amm+caN^$ÊQd?!92Dr3YAɇtZdZ'kj/s#jDՅEd,F0XERYP< D`RV)}N~%2uRÑN9pJh,r͕6cٮJf G xIJ,l]6FE=DKӢI BV4T7%zP*ъ r;Cm`B7sx 15M5JS/ViO*6Nr֦ l)=jFt:d29==qƆ:eyDKK˳>_papssW^@7Nb2ozʕKmTGz ;<katrFq6Y<ԥ¤G_:xˊ=|k#ck> D^JqL&GFFCaLOOY!0{wZXBy˩Ϟ=;88Ÿq 3<>^0P ]\& Ez9µV*=(I&Gߡ:d'`= \$ '2TҤ -[)+HBSDҝ@ rLJ,Mr>sr1p},yO=@;0ÜM@Ip' 7?U-EZ.qX~;5H#7z;o*/..߲eˇ?aUXq]wr-O<ċ/H$:::?mݺOp4-)))..v{!Q_Lr1XſǾtjM=⤱@V́ =`']^^-++ٱcGmmu\uuu(Z}7'x@7X~_o{H&T#n IDATwAI۸{;GxxٶퟸcG=UR]mP"G'/eOW޺ukqq D"166655%MYWWw}ڵK=),,vicɓ'gffhN^J$ ]oEG.; X'R +TJl֛.R6 Wnk= /ICR){"DDgb WTw,w@5ҠJ?)"Um &/Fo˜ɀ=طo~;><58ʆ6x_Kl9GA2?ƺ""oP(x4SF ~(3XWc.//8qbڵW\qudkQQڵkB`x˾꫏?8P{i-JQQKڶmrX&=66׹q].0Vy2+e]wq|s,-- ?^)qinyyz]wYr'E؟$T*L&uZ|p \G5) u%8Q0 taYD酅B¼X64"8_jqq(w``#Ȯ]'ɂHB$ˍ@uڸ W.|ﮦ 7ڿXwEJ'*c5 _Nf]kwўD"aSp|F  "}-7<yfsǀs5g*x{.4Bfsh P׌`)r$]\F8q{^#Y!6j+((;pS)EEDޖx.:Ӏ)8DU2SNplVN\Le(uhQzo懹6#3#kwU6BcKL o&Nj+Ț=1PE'5dLʕ=!=D{&nq0TIi $(a[4PW\ 4Dg,sffd~˥u=tRYbÊeIr\r"Լ\>IF.-)).mhhش=u4k$YZZ>?O8p@zcz{{?OڅJaupRq[l~?ڥCB,liM!AF LCr-Wcܨdba̵w߶m[GQQQUUytOOO$JԲL"*cRVU G~,Ȋ v҈ee3f+׽C;@x<7Թ 0<6F&ͻrIWn{{;oR }}}OR(|𸅺oŸom#ieeu-X,s…d2t21`x G>eonrFL$PeiD[(r[" |t|jvs,9/EF4K#k0xI1RcMua 8E~qS;ε+\ֽQ˥\w֌~ЀLcahT5q5*g`2o ˂w z ׈'rFv<CA .]Lh4Ǘ|͵k^uU%%%yyy%%%k׮bTJԅY|Ν=###O?tKKu]WVVpJ]{a_o%|k{IIשAPi\y.tWn7pًrd__ؘWcccCC޽{oVDe"wyyypp?Jb1rJ4lFwĢ<ʭA+WЂ^fUA)bЩdkn5o̮BP$d9ʕnp)^N`hʿ \X)]tS ;y9z7S@'`qɚ}n6 ҥYQWhs/+=5ޏRBqqq2|Wn`*Q^^^ZZj9tSX[nٳgs=w􎎎뮻(f9]غu+KOKK)˯%]IשYM،մ'^wFӕsΙ*nddٳJnх̵zyiiiuuuaaFKKKmx4ۚa @gE8=+NNTiՂ*'ҧNä;J{CQ7`؉ș j!rHZG̽є 4%tf#񪑱FfC|HC[*N{ 'L͉w֍Jt(iD?Cm:"&Y(}F\bjM%@-`L%+\`f |E/_DiiW\q饗Z+**ʬ7)bD\YYn'|ȑ#@xݟ'6oތ$غℼ$LP(ڟۮr^ ̭ O/v?#ݿ?vΝ bO'HQ҃$U46#ki lVYډ5c݇[}v纈A<,J7"NwE"!S!ᒢƃ ~Q.L5 9U1,۾Dddt,SJ46h̝D=m6w]k$g8鞤1?bRڣH(ww)lpRQ/VpYnXm ゕ.V*lT&M,UY+<t"4@;}s T?t-|_Ep ([.++{wl ׬YH$"O|+++֭wOEOLL>OYIpAAAaaa*v677;v.wCmڪ^upKmv˪ OWN{ǻSC* B}-LAֵP~FFFFd4u.׍l Z窮Xcg7EӒrLq=.J34Q)"@Ǜq@u`nP* Z3;YODmj4DTɖEԀǔ҄1@1MoܐV_6(9E5)lP=VZ-dIi[SAhP|BMݤIy㤨!HQR=o0D6vR[(ˁ܆93m۹Lc4A) YC*2Hk6rY^nOvsYF猆e'yU:]+$JH^ziSS}nmmhY|Ν?{9}ggvB^_\\L&5ح[vmӦuzd$m- Wj%nsOW0А1555449D7 UTT3g$ Z\]XgHw-WWoUovbD@M:H8ͦ,w3C@˘6m|u֦A'l߄1+QۉD(57¢xgr<Et`\V| ֜{'T>Cf D*RRojg?JI-/{o 5H.*9pA&VD;=E@u( #1::zс;쯬J;gg>#-W_}ꩧN<'Di促Mٺwq{T ddpU<\?!`ΝNϟ?z#HWW2]v˿wqmpDkDUUW" @\tfP#LIP ]-8LΪKh/S&'?AaTz+%Ô]%ݐ0碷BHv.Q>ShKC$aܨk7lv}WnV{nV>}bˆA66|"^0-E L3@iԒHn*?e~-CP:蹞G(YT.107vJŞm(ʼnjh =kyyy"N>}:Tӟ#\og}ܹsxBPqq1ʕK} U G"8x*TڶsH4nIo7vtt R 3gtv=vXww7-0y2uuu}{w#/䒢 7z뭹9jWh/C4=nI FYj `@|?`R ժPUiyl1+|Q>dֆ$"Jb1)(ώƍ_ "<swEUu)8e@)MJ@{A+Njܥ2-զ['E4i0&wx0Tm"ոه"œڝ}"p?El\(c :23R]ka>(aU@s& id~Dv[ T}LTI#*$I <ʑ`gGgz.D6'RYj&r*YH opȔN<փH~_o$TY~ުRz1 mx$5Uv4Zjf^LM)AdJ Kt]!AupK 6Y9>>x"5j*dTSC%R4d(S#9W\; Ň GS|qqmx򲲲X,&mw]w=/PÇ~[neǎ@JEEE555KKKx[ss~;Ço[6yF Hkak w$$j/ss˘%0"A'̃ =Ze ؈$(4vAi6z| &/&6DUۺzN%AӆzȀ5=? ˳Hӯ#H/x'{x{l~~~ee5kloP(m6 ygZ /uxs< ;PmC#Ziooq%ɮzkff_IyסP讻я~זšr3gOX\\b\h 0 u_o鵦(.SDSAߡ4Mt\r-% )VjD؟T5H H8~atރ `vI-B\Ҡ]U%\=mP6MNAzgq5ڐ#g댰='IOn^4,ΏO|QKPY~z3Q)%pol.Z+Q9 KW 9WVVlٲ}v˃[VVV^^D.,b|;w|"(P'zzz>OٳIpQQњ5k"!۱c/ud,|Ŭ9OnM( 瞩) gϞ;w.L233388+p7lv IDATxu5 Y&???N[zzzR"ԇrN @fdWn4WXD!N4P#B3B(sV5JW EsdzT('T\z B]j խ I{tQXbg5'N|H|2WTn (jFӏ !=`J *:D. mWaJsY`ح>M_6%K}ܢٷ؟3un$QUUU֭ Kt+**7|3\t,og(YKJJjjjI3;;;ggg~>k0*w}mdxk p`.7w-~i*Ν;m7*W_}ٳx?n<9}ԏcǎo_җLii dsssɓ'#H"@R3pU@OuW,Y˓dK-[M˘` c\&_U`8be~aTBL` r^Md[XOzZ*ΥwӧsN/< v Gf|$7\Rl {_ƫ "XLx @*I&gDو:d خGA;7Q+Ct(sr,`TG9h/1rrpҰ!E:bnrQ©\vF¹ko6w˒61Ք܃8Jh^ dY\_bb",Rr҅qMIrєU/JSI*VJ9[ٮ^5#$&&ECYٸe)x M g4UWpV0 ቉s577_s5>/)))777### R1x ,xǷmԩS@ӟ.[쳟ܹs1|)))DŽjr}.|(74b۩܅vֶH. umS䛻#c=FeQ__~Ɛ'&&BSs;djk8k$_U ={ ***:::Ȑwy_'LA۽{;DW:z}ZZҥK_~y˖-pѣկ{ . NNNkɐF'~.vd m|W `ؤI~N`IsoW͓n]]-ꪫ=S?x^^T'#$''/Ydׁcǎ9s& ^tittI"td'uϔMoC]v5i4x-҄n#1#$vqٚ4qء9rR^^\+^^EQ#Y` naJ)i\ufMFԲx=3`{%^q˲T]R' ݴFLSLOHx,-WHm $-}MëȰvq5Ω۵ImClđӧO8q" '%%~QZav7o<趶G-u5܍Bj]D<(ݼAʺ׈opwAy n_*?3[?Uj hόDRuEk /nfYd޵ä%b7!W:G١ DDYx{Cd <Ì lӋY6p﹀:|q`"c%H:n=C|B본w`co ˘wyÌԢTtz]XHHN9`24"Lf")T8l[{SS68Cngj/-NӘuTj $4Ϟ*ݸÂrNF6 TYI4y' 톬%Pe]-"˗Toot 0ަMNNJNNzס|&##ܹs@]]]HHHXdIrrT[[[̟gϾ{͟Z{`kYW/d=ϻ[,_)<)@F gjIumT۷1 WV]` wJS-DV÷#h.ʬ" 7,w4\I|Tv#t?)-B/Y\6*c5U \h`UDU-r:6jR^D9 mYfR0 I% R%IQ2Fׅ===gҥW.]aE⮻ڶmsQ[{O}S7oc[2۷z]qkÑ|xqomKШa{qmjӛ7.ȇȻ@Ճ#ׯxw 1hll-))yG>xlJOO  VWWB+p<,ܠij=K 5U=P5Ek_vBπ7QfBcmlL['G2Ov^L%7ˊ=.H0)xgLgs͑ݐm5.v969qRI0Юi$Wikt:.stQZ+*ϥs[ĊR}ll611177wҥUȶxݻn:8U__/ /?v 7P!̱rnQ\KPCkɏ_n`~ܵk&1>>~…gJO>SO=Eq1clJJJQQъ+RSShpԩS'NnkkCL >Exu)l9x$r+Efʼn4`R\zT]2&#vj26j ˭RB1S J8Exҧt WPV6;F.\|5iSM<s]oVH:4;=}"nP;qJ\8s=Μ|%\(ewu)!>`ܹsϟ4“-ZTPP,̈́l 쳸$1xwڵYYYflooomm닕^Iϳ"\` *XR+Afw +) \ % ?5TM:&I@9V1*͓CR{̚t)vjV{f+a҆њ5T{=*%H(OԢ<=]Lزe/I>O~;'u{CsZ{W-H[-#OYYuіw5ܯLޜg: |qwGrZ 9.]jii|M7G?4/77wڵ ݇pBwww{{ЮBkkkRp؃mx zWz#BYܯz]{;1p,Q 6>`{S*Q)Ȟ|!Zv72Yz}*`8#%5}tMMgyGM"33dҥ)))=zٳͱ~ŋQ8Dm7@<Cma: 'MLqHuFl #3U6!kIZfT6-rKlfriMR\s7+v3[sb#T `B1H̲+BjSX%^ֽ},- :dZhvR3J29`F?X)CdYQܖ̹%q0YC2T_ym) .a`ѶO:d=O23W).߹ď3 ?11$E(٣&t%(*RB;:se M ݐYe Y-/J$մC@EG4>Pi Yő=]HT S"gܹ˗;VDBCepooPvv1<|+0/aƔ ZZZm`tt.\(((09s䋪 ,(++3''յ4v DF/|ϴ]OSGmKV-7ss wo]nՓ-=F}sOWbnu~[:z(Pԅ .^(u=w_vv %%pŋϟikk BqKO.Ҟ!)" ds|q&$(eH4C>͟\'&&RDq@*$FW-f7P15PXZpY +ql>6^R`XiUkB*$Tn^%8vMI,aŃە`wDњ&\`G58&$H&,`m0" hօ9劬yQ#̧H4/XOp&wS/Uve|®_01UxR ub"M) YeLf#TƇKR5&Vc$G<'6ӁV-Z4Z._gW*}@w~g>{ד"skΑw,WUq撅9f\;6Pl<^wM?nBBž={ܤGr=*}7--mǎ?:tXPPnݺ:;;{ヲ @kkk*!!ZymArIxJUɎ OmIJR=Qst*鿀ZRCq3^P6 H=?#x1lrU leqSar̃ٶmnKrEжkmL`==slRmȜ1zD{jl'.[^`Wdi"d⋳:kucWd$"Ch#*1wە,KҝO hJ$1i2[jfiFNZ([f(v|]w]jj*>ۡh/_<00 }>_(JII={)%%%33MLL`6ԛXbŶmے (mccロ\XX811UQQa4}LIuݪ*ty$742cxRLӠZWsbG6/2_ {/{$'8uށSN馛/W>짹sZjΜ9q-޳gvtt^A|8q 9r `fm_zE*$iN܏(*/ڙgxU konY\qȟc|@AJXb0ي*d̖Byr1jH @ ESD|cmҁ_zz+.\t쑑Ƒ'X-B7x#j!bpz-(Rm0l'`f"&8upK%PEZtѽR HBkl%Yҋn`&rtqbA5I^0F&![-[b5JE(11Q& 0,h41׀Wd()tl1UsG ti/CR7LFlB O$dq0*i+W!R{0Re2FoK$+b 썬ì0{,nR⧾J$bnى.4UW-BtdӊS+TsT{J s6lVԲX M%Vm *lƒmh[l1}KiH>::=55511166e'&&N^_gddlٲeݺu/^ @̱GΚ5+ ;w4'*OK U\4ƾAl-Z0؏mS\󟄄ݺ/ܱ|*Ga y'Ο?OLNN666Ht}+**̋Yp)))i˖-/_~…κ9Ûoof3Q8Aj#܏-uɀWJ)"<5#U' *BK%YTa1d#`h(\öYF&b%[&^L] D)E\FOAjxE=0t`JK0&ثw3=_X %n)G\RUa~O{=H)t_JоGj5ҫf- 9*N. bVVVq{8Mc  R]Uwg8Jq2j" ׂ j;=}" 3s?! vJkx2ūRƤ*\Z qbŋ X.--BثR._<88ۛ4666k,䱱1 |S7oӧEwᡡ!3p``˵-~8ONZ,u3R[ZVDjRh|7sOWbwަ&*faa͛{{{͐j=];vxGW\ )L,XrJ2pҥwwwvttLMEj'P__=CҶ٘pTq-b>"v\1 R @)lR- [eײVPDKx" Y@4rQ(7UkfMy")5"}@ғpO{1D'¦TE}U9%19-.W9V!jb+yҦAH,ʏRTJ v-I5pVח\"K"Aw79!"sq'n)HXM]/O6* = O iEEzDlD@7Dai䆓= ($y`hQ*{i4ZVSJр`pn$(Y#6Yk*&R.,4Rl)HB)/lFΕKKE!d GHQH}OƢdi4[EqY~HK#5DJ 2+i@D3rYRIЫ)f /BSc6* ɬ>^@5g}ƕj R았?4(DԬ^9E$|4<:::'rfffN\mJJ5\ܢn'nll|͓ ?owYW yON5v^ XY7]c Aۭ[644U(,,\^^DcE\rѢE ՃWo߾]˴<Ŧ0pmB)w…6ꉤ]Aq '`g%C.ͱ%`AZMB%QnlBl*׃'1+T1n)fW \([h?A%*Hs!Gr(E;x12GNnCL$4om\ 䄄\` #$͘3% Ozvq &+%#CI ׎=U㋖&)-gl$eĢEOȩ1ree-F? p$?UC70wJ`I6P:99YSSsG\Yf቉@ 555S afddl۶k9u0U#X_zyuтU;MeMlnV֝n ͟QGcWœU?Z펛1>3cҗ|ّOOO/]4̟??''gܹ/={}裏+)))??Ŋ泸 a3gtvvZzx7/^C0VhE}PE?cqO>kho)w.tiPdZ֙KwV*" Y aOFRL@֎.I 89BAz˓6 i^eF,{M E^xuVDi?UhxWkHs"GWZZXdU1|`#%%errTْǹ{D͟?JOO0w,s͟um`Ѻ-k Mo?9i5 s2k[{[֐+w~(d=^8666u],i<@kkkSSSRRRfffFFdkkkWWW}}}ccㅿܹs Vڱck⬬,3$uwwWWW_x<8w\Ğȵ=*V`KLp$U}EqO#P)[JΤ!J: ǨFm!_Hj 3b*ܨʲ/hET  P.AVT")6]6lPJ2T[eEv4@ǐ$i:.\&ە)%e@u# @Au@sP׶ aӲc4-,9p$ $1בO)s[! ]ƉJqf+Z`#^r j+K-r#K ʕk] !y3P4Z)%U#i,OO]t;QWӬ>gnB ^gɍ)5M$fD? ITbYHE !2>#i1,,H̙nݺ򜞞tR0e.j_^*Hք thd+a!WYYف*[mD0 ,^chh… KD?JqQ&x "FQ3.l&tjbVY+EDDõI}cOўf3asH(sSj$]r)aj uq"}ʅ9CC֔YX(%OJ7[6)߀r[[GnSZy.=٩`J 'ʍAn.mnٖҀ׼v*Y1i'!ۢv̕6f'W*͉j*!b/e]wr(l,`c7| ~WvSje1 (T'3siVwU0D[TK$w{Z3-%&1^IŃmJ`ҷeڣ)"puN 'G*Q̑Ees;Kbּ" Qq ^pqܹ[S.JLCRmPQUUUY.555ᔔg޷233'''p"%%ۼysKKYQ\i. ON[uyZc5۷h@?'++:; <9u֏2&$$꫻wﶱ~;;;{ڵ>/] 99 njj:zhoo(y<6:a8{Ѓh On;}#X5PH!FʼnB"")tЋ/Օ:::j~}W`vvPy!ޱd5 s2d'qI_cShtǹ+ 4?Aii7ͽ{65I*---+++--;ٳG~{߻S$f͚5y͚5 |rgggOOOmm q&$$Jynv"f$T *1I )xrRm$ve%R\QdVlswJЫ$"cffG>򑼼 F:Ut6ETȱcnj V\Iq/^oԈ.3LMM-Yf_zZZ%y+HJ7awZxE1gJGvIhȂ'g]}$iL-T9k0ٔ(j3 ̹pY|i?l*X19hW/ARy@_JD}?+T56wXխӣ! 8ωv"PIaQ!8*\:iG}rB#02?zWTIF D!rFt7hæ(Z'f|خoBr*9MA)YiAzCfLƴ(huJ30\+e)K5M%p0@H)&`ČIzDmŞJ.駟NIIVd߾} >/++%2{{{|>_ HJJ2S%%%qm:JJJk{;;;;~^5.]0Lb||i{4grҖ?x.<9%l;6/?ʵG:rGy {֮]tt2< uuu9rv8q{o31׭[w0('fTNRQ0 pjDJ0Z@V*?uFT&wdB̺k9?>vXssڵkϟO:t@zz`ӦMG1C8PYYijkmy1_kݻX~={ږ~/xcl53\yͥ/vؾy BO^;;n(+]nEƠ'!!tHHH3g΂ Ȑp8<<<744Dhkkx_Bfܫ]ȫfhz%3lw0 m͈~mRNE@8vBwuA9][̞ &$CE9IuI9~/\Hf[;w1YB["E 6m)ADUt+"x 9 i65ۉDYT.Uˡ@¢DFkc%X-~f, ń>NQGN:^t)| ZZZ Q BMaaasssGGX B$5?6R qٯ]67i``AG-h .)\VlذojΙ3yȑ+V̞=Oj좡m֭#+4o޼@ gRiӦsΙ!_uWI_c-WVUUܹoq@Ï;4;sht;3Xx]6 m&)$Qyd=pqA[#`|``vwOOOcE&_ F 0 dwY l#* Mcs V ;2eGL?[m/n07e3Eܩ#*4ī >6 FȆı-B\m9J81 )q?B~t@4- %|v_җؘT4sד'}|M7&nŋ333C,:;; ,Y*.9p8nڴi޼yd!g^d@/}Keeeϲwl.y9)Ww~]vK 7wi_[U@]n\ ?=42^ý+^gA߽{ڵ2 .]rC(jll൥| +5q{\5!>Umu 7¤|rhs5Р|4%n]\D+f@.nVő-M⺖W 2\ {TqZ狈꒑a388x…+WJI?sLvv~4~^[jڵktsss {'|PjSSSyyyee3koo.7z衇|AgʪGg\=[8ܻw/YYY?/ڤmnn6Z :g<(.z疚g =D!=8 q{fWc&WШ޷4XԾ'EDyp%JPG 9,jd g7sIjl"HwtJsXIHa}}gxErI S2D=--8^P]BocZ'[;&IG-tO7tQ^\n'PHqwP%J)x32ѼMcKg{=Ģa U}CTqJa,p񐭸u$aoP%ˢV qTlEdic_ : կJTڗZ}.E $fe͇;S,UD3 R FJ&0RӟD@D+Ih';ұQ"WȬ ,gNaSi_ '2;Djʴ.Ur鱷,ŵrMYRq&W$%dlR ZH+\پ{El){[wŌxdD6[)$TEJDd szIIT¹RQHUYhl%Œ<6JMb(ԈcJ;7!@g85)H=\md)?.@ZM&TsZ9B=O!2u%'o~jC8ɰ8O:mS;z7{OHMM5JO7xc3{jj8) .Zh3A&&&=zҼ ~zw+_nIon@Xo0]`b``Izj] rwU^kuTVV~Wn O?tvv8@(jkk3oq?Kf<(4<["^x툮['wi;M&lGl.P`pM{@Pif bW(scM\vfVTmt]\%w̥/jCIe6s@KZ΅%e`pSVZe޽ cjjoɒ%$`0x /szgjjjΞ=K~=*e-kj[zFs2|pUUUEEyo𫯾j5oݢL 7'\E}#\ oxx8Zu pkkkOO4֏m66&w|))).{LFu*AqH+5hË"[U0! ➩B9A#"F{UwcwJ[ {[)T-uV_+i+Q$K-u^zKEڒWLAt&ADJLAdC{qЈ>. JfM9Bא@usI!cRc0)5΢}T`IdX*]\e^BO؊~ǎT'45 hoo7ϝ;711A'&&X??333$/RYYYcc#jqҏkxm_z{~;\Y\7WOOqR[\)),,7fݺu`0N>LMMǖ,YCp?00eXX9 vB"=X+&NwN,zű6"d 55NJ熈E\0~ViVEJBVA$d{q 䍊Cf] Jc>*RAg\vqnޑ\)TVrxk"&- {`[:lӭ$GfU5Μ=RmuL; kw {8XP}\ESpxccclr(PZZJ5յb &a`p`` ???//o&<;11Q]]ظf͚B_K/u]Td]v^'> /ܹ ,+]^Vx]+)#ϽH9 ܹ8%]l[|wy?UV]=ollG=l LMMgiiimmmq^ q Y#[lG5ъ7N)9(=FQ+Gk,#:r\q7SEX9iI<&G` "vY0b6C3TjzJmUؑS˘C 5@5V#70#\bl[6D˱ mD^l~ Tx.Yon!>?F˨Ϙ ز]Op=QH2:=7 effr]ҟx`/;sLvv5kRSS1$$$tuu-\pΜ9$1Ǐ777~pcpyy~zWuVʦ&_W^}]vQ-0!  ~RLW8q ,]ׯ6^ZZ|񉉉ejllVJ!pc[E2<##cjj= f_\4mI|a1|rbsiqJ5 {e ba֔ѤOZJeǢ7Ɯbưie*or䎥rAj$YUejksԥxada hj\#ᅫ*J7-H&^@&:LʵR(Kp"U,,YQ8\""D%R&5 D .d5PXJ0-kZ;!\+W B!J4l|n@,.Xm\5r[ xuI ^. 'Pmְ*.C'+ Ԃ.mp\\8JLՕJh(b5p{dA#rb'8e QB2l9;b7׫b``ҥKsMKK3S2nKHHuuu֭A500044s5!LLL\2EEE'bz꩚_{ӽO?t\t޼ysΝ7o{ndd, [)P($dɒ'x"-- Yf|/x~xؕaGJܒMPG >'M$Iu$C-KZMx.gOȊ0Ts~S; SVӬT mۖ<3c?66*OfGhscY$YG?W+R'W .yf%8'ILMMϝ;7L\(n-##g>i`llѣ/))!@{{{g}###G]n]fffYYYccΝ;_z%d[npo}[+ggg/[lTD}}sfv<>>~y}mmm%̦s=x!FaGyVȕxUcE$Q=XobգxpZ DHnU+p%갆] |)WY߹(2N!* Ora գ̪%j::FLx..h*&  ڲD(;ƶ hbt,"sUpaA4C{jhQlSbס-V  )KਜtvvYΙ3{v7x={/_UYYyyO cbb Dw*++Ϟ=;99w?O> \}s/o=7ob]7߬ iф,Ǖ}}}NBqE-'&&.\0s<.f/rW6>m!KgʁS ZkRTYcT*.SMI.RC܄\#J;TCMc/X;$ث֊gK܏i$ACT;}K? IBDM=6>6fiϗh s_YJ}LI(Ė}xNV) b8 jWڣ:So³ wP'MR v&Q}F,F'Tv'`͔v]D̎W@i$W˕aʬi &"tC 322n\jE"j!`iJg2#{.(+pkyk M.6pKεa\|aqGPENڰaq6W5j\>୷޺{'OMLLTUU^:77I^(TWbbbٳ ׯ.6OWwǎďx>o߾}+ \gϞ9`}}0>I8nmmƼo}kdee~%ﲇ 7,EnH2+8[nZ(ZD*UiLZXh\҇^?ց^y = 9,e)&{[k ƊŖ2v`g\?gG^bݏKBd ȹ 9qx刖t**$ܭѕp8yܹ7wP($=G  'O|gZ}%K _ÝB~_r1Ç^s5d@__А9Ldff>x?{Ǐ\ts͚5)))YYYCCC'Ol V@Q]v̷H:!$79/aGFFZZZ onffRKv֯__W^y饗+VXreJJ \ٳgϝ;w֬Y$ݕ+W%%}Z&&&eff^tillLT+N>U]]w "S~PݺuCFFFf699ܬҥKc@yyj>kD/^|yhhĉ!V΃'@mTTWѺ DبNj54#n#C֛(?EX* [J*lKL-pYg|M8f@EJ'+B _Ao8!}z1 /Xc=Q1pX(9(RC sw\ q9HLIcF%^%3`j~Hȋ0 n͜U$uEܠB0'@e2== LonBB7oIff{wzo'&&Ν;ܼ~E1Iwuue\ y@… MMM%%% .$~~~H__{-B6×^8Μ9=f8)4Vrgfchh# Ic^|^Uns C4111++j044B!_ 'Vb99aRܷTU(R̥7ߊ<İR&S[.+\`COo6fd (%lYL21 }h)O@2` qΥ`nT"U-2 XŐ[QaOVJi;kl኱+J =x Ps) Z !n:~ޮB}tYz.4rp:M(xb2bK[yT!oרN Ec 6y\>/rk2IzRDMZ"#jGȅ**PzLEߪ؝lE[ U N.2:2olUڨ"(bp?^0Q,Z:zd=iՄa\ eT2n`Ha\~jr%Z Z%Hv@rf݈_W{D"פhjjJ&f;dLw˖-__{o~@⩩^ziӦMD"Q__<ر;ﴷo޼ٸDccc]]u.7cmOݒH.1,//_rA,^{9r/&|k'Hz~+f){*ek#F?~6vIl>JzY~3s֨a-,QE8"נ?txJ>~…D"& :j5x,)l =]Է咅U \l 6ŐE{@rc4܊|[D9=21.J]6]1g>GOQbVz( µ8ޤBAH&c,R:6d C7U ?i ʇZa#JHÂcuJhCjW2G;kt EGʖ itzxxxrrkƍ555Dģ>z>3 tϝ;w}!MRh:d._|kR8nkkbh4Nr.mcԩSlx<.E.afff``@ZD"122wΝ?pgg'Ь<m4_Uݖp%S`IHi ˲d& Az÷Kܭ(oybbߵkמ={aErD"TUUA+/Dw}w]]]dWR4˝we*KuO8Aݴi9L&?114LMMaŽwxVmmmuuZ( Re[p\7nhOLsl;m [^X( ujsMett%V6BA.Qu^m%ӛmQi32`'w0ɤT9<*T_ 5Ͱ>CiFtYuqݛV#p_.b˒vr˥cTBY7&2vrt%Qt`US Ý&/룾Eʡ$HPr%Z"'#l!5I_s v;z1Hx0dQ2pKɤB/]\jzSb㑲a\RwPHP5@>v defN3b.& D *l6UVVf2_]]]\sM0 555p8/--Beee{w?p;sua5N$UUUw9111;;A[A*ZXXzt jhWnYYwѡ!kqcؕ+Wɤ8wZ7BH$ yи'J&\w2 #/{N URo> bι,@ʼ._! LFq} =RY[twȤb.,Xj)C,[}}\H ̈́c OQ0rE'UhbBL/J4 % uhs$pBU/&Oʕ+۶m[~a\Ǯ...&IDcuuuǏ{x_(:J曗.][7l؀$8rTXd\299y׮YE(jnn6eԦ IDAT>]L0~ڈ;Ne;J|ooIѩTjhhs-5\#ܹ5H$bvd2o)?n\%]=^ˈ(5F;JsfRr[rVQbߢ ֋p_5> {{—BUb97O/%(\)}R3|-R,r*1;CGh)[l_B\F~_O9!>Orap۷o7.ЭhjjJRt[(Ķۿ=}7ٟ́6mڷo_}}=L&fCNa\ظi&]1N5r\mDr75e/mhh(-˽NLLKSVWW;vlƿ񤼼T*kqK^S?|uϟÏS_ׂsp~e=#*v+󭕜HU\JkH4AAkȓ|#/;pKSr5v9xlsq/EռSӇDb#PL8];SwmwMA 6rydwG5@eWғD7F^EU{Hh6rynkk; t׮]H$u@C޽3,--`޽7p|>N+X%Jٳg[ZZڸ]#^QQaͬC'eee]wɓ'PkiF(6gB&R꛳###c=J^+ ߚOjW@^?88Nj;Qy›$WA\C/@tc+@Ȑ\h(nQ~%2j T[2)TTT3jzzzff&[NlDv8؈ӳX~|F~:uiӦMEʽzj__굸ÉDB:VܹSTKK OBP]]]EEprrX!ںC saRa0gZDXlqb @ph7("%-gFڑ{ @TF>.=q5* BJ@DfiiEobsEX1)+w-1#n HDEZ/-*X!@n TzUf:+9yK@?y +MEyJT猨DQNJvC 7욆"R2 UAr=(pHԪ W 4*Kv |>u  p#ҥ*3|b{N)TrP=^)ĮlQَdczߒf`( m>dq6uyy9J%ɳgώvuuY&J-,,k+y[[׾ӧO_{vy-D"[Vt(D"uuuH*Tݕ{w..:K˗.]gf''''&&w0'hHCz~#BJ9 ̂A=t2Ism +j]h5-\mcO4v;׉ t3l{{ۍHa(jnnX p|{> /bسgm݆$\"tznn. ݺyh|gu `(wǎC";ԑO&{ѣGp,Rp8\__O3UևgxTQX5̇G)|n%VKב.mQ*On4c'O$Ux"rZ@`44[vpDƺ IHlR)V3zhk \ r*di|2wv a,|{\. h0"үw*kbs ixJD׻|.pM(́eCJND1B(47tԄEMCϏ;v'x⥗^N&ofOOρn݊9 x"@ P^^ pEEEeee 0-++Tܔ:5ϓ޽(NzҝDʕ+ ǻvzG:;;1ْE(5oA󳳳gϞ{DePDz0F%P 2aȄlX=,ʃ S9nm =H Oc1KFVti\ DZ(f0J9b\ kĭ,&sn˜- ^(@h}[B-82:s9!+-"QLDw"sp8+\|6jEG>|;ƶ04ypxGlOZAMMqΝ;׮]khPSShn{ȑ#O<ę3gttt|CjmmEl2s+E\.H$n XXX0~er~=q;Ehtpppnn1333O?w^U! VWW_%gΦRe?[Mu>HVl ᣀ4Jڈ0uBnyWf~(W;p TK{y4,.QC<>r?`-ZPeI pכh.!v2 J+dr$x_@-ҩg!jу/ 5J>vRbqox?[[Ix7*7YpRKIŌ;㋨bNo1p9G$"љ< @X!YMi-5d@ D(mDs0SЫry&NX3M` rX-J8 0R\Чg>H b{f锋YA:"Ud܊ ­>RrTC.0Q:;cDN.T~kVVV688h}ӶJzw;JYhtxxs-yѵ@nc'n* ހC\"3{]iH*]s8De!JP~S]~a*OO\^ƽ. sϺRʵ"͇Dd`WHdESd  (f|YLT`b \#gy%2E~x =ژ\b cșe5L`'2wF C iDsgd+i,@e# L%O#ס0[k+7Ps҃03jSp D+9@ w쥺 %dVݕƂdEg.`@,NrCxy32)(l :.%% p`f.ƪyFN,ݪ˗/uuum]mmeo@uuuǎ}ٗ_~ myyW^yw>l  ]v2B'NxG66_v۷qԩ!G?Q8_LOOq|wK& Ҕ;wzTT^^^__O1H$zzz&''t"r-\L|'>pcТm dP%QX w}wșkph[uIs"۵ZÎh_;y6e%l+dhOi+hM ܤ_oȤ]B/q xe; zHQ,CL7W %MfZ) y'}r5K0 ߂}.FL^nCqnSSҒq'={|~饗x x??߿[opeee2$]طoQhԌ߹z ~u#R+744y/^B;d2a&&&FGG1BuV֚'\repp0L& (C*-}vS x<%뮻0؎\.L&sX83H Bp8eYQPhsիWGFFDl4'k Á@ ɰrNM_[>믿n\}ά{UeʼnתڲG}>~;)sssd.crT*u呑f??G?Z[[ h`pFX,v̙x>@SVVؗ'Z ͊? pY; x@&o?QmA2)7XqUەKkD^X EVlٖؾLL`vBgL9CJN|.z r waR&3)ҹvB)l͔ &0WS[e6s"AɛLM55ʕ2DzTs!ДSpm܄y燆vА`ccc:^XX0OI=_nߜ>}_*| իW~;v>| Cm ^fWe{WjUOs߷''/{qԮ~wz+꣏>Jm=p@SSL|Imhl@\555ǎۿ4OJkq'LwttkqZ^\H@ wF"UtQbɖRX(W)Má .٦U2=0E[w/=@@4&&nI (GoJIXiݡvG96_.)J ˖-+H\5ۧ!؍ `֎?iDYтifJO n(֝SW^prSQS1=fEsaN\HAfJ&C+ԮFX騇\k@'<*Eml)jRqo1^9"@%wԛl/oph|.cUKǔb@k攖]!x+BvLƸvbbbyy8_hMEȑ#uuut?ɴWVVr. p8 iњeaDXPB#u~,,,8qST86/26\'ʏ?3!e\ϦRL&<>>n\ 󖍳ɍD>߹sߟJzzzD˗/9s&oذ!C04[fgO/P-5r*^W_}NO| 9Rcm?}`~??|馛SNQָիҸ®]/۷l#[ZZjkk]>SSSD"y(PnQld*cm{U }2o\ ) a ` [1o)e ϒ)IU1U 6 @3RiՁ܂(CiI .[s9z'ܲ&8Wc~ŕFiz7RO< *!r%L$)aҁƢ"bܤ2d2 _As6~(Wi@B{ƏHv3%\`-|}%Zzj v P)gW#걫KJm˧61z^CUOlIrs0*Ci>@zS -R%7+)XJZ( }*1\#$$msVT SblX %^u,= W I>TWZTe@"x[C 9`O ị]2fW.vڐQi`gPZ=_&m8 ^(s`;uln\l'h@5[Y_},ZE%(.Dj= U[`$("ͶEvx"Y9`ΌB3%*1rK!_sڵc \u#`Ѵ^K#,mfl⛏˙L&/&7bPc֭FlHFErsϽ F 0wȳ?L?fl`[$}KhܤHC{OU| r޽{I^}}G'?yON^x(oز=]f@4 ~>099Io m ʕ+CCCFцvvvhhh>pcǀ"D"k׮ |>D"aq;5c<7~Rd~*k]w!|5DQb/IAf>TUAImz(ՋtXZ==Eƾc-*K՚dlĢ&V7b`\T}Ma$Y!J)*D +++NQťRTpL:UX ٷf^ x`F=8eHo@nb#D]-Rŭr L7,O*V0 ( Mՠ:Oq7 `Z%e N2XW?h&A5AFp͇C>ߟH$Ha׮]ǎ۴ifl$Ԭ]8x8??X,{4M@AlÃma0ui۵} hƚZO+=~SSQz#FQ5v7+`0nݺƩD";z=cw}s=wY|;[l9rE  UTTR_| [>3'Nxǩ[#{ĉG??/~q||܉PbO2Ԕ4esscnf ƧcD=W^M$ \<>BiV<+>`m1ZxV{jqsr̖e?`} ~2PI($i^!TBpp<&S,#DY:@c$+NQ@"J\l',;:w2Esꉛ, !ZVo ,V`eQAȹ U)5X6It}: T`,"l>^J2}yǎDXlzzZz*+/s=799)CСCjjj\ܞkKQ^{ѣ,}x;1:uG?щ'N> 󼬬K_C=dJÐ'@K'*?X&kjj[Amm-\_VD[[[i:NRy0gve@tw˦Թ[٨[PN^r ƅUXs#jeLQC^M~n`4QBT"Ʊd\:A \&P2K쉲VXAـSKذi'n:/PU};@?UE5ƒ$``D$W`ȥʓRE,;\.0b- D*k+H5c{\.(9 U}Ğb8IgD̵TȃT UwhW@wtĚLl´~B(ٸRl|4j!mE2ιNrE}" c-⊑n?pK q*~ABFp8XSScl~+fҬHbVҫ>5~dYcӤ9n/e|K(7?>p8FD4ńo 444|[ڲe"UK7ť21??חL&c||HD֯__QQa, (++<|"F}4ܱ W̄]c#>JGFTrJKRLXoH Dϵ 0 Nx̺eD'0f0rg@8&Ć|(&p݉dάG?ɥ*Α$rP.&>dV-5yt1$ĉzH:%J`|u~rnr"DRfXTn80ȲHÙK7gQ&d;X__ϭ$)OiȔ^"0`z@n U E.E=Px"m"hGMq{&^ jYݑ)sEWVaWnRϹ1MzT1Y)wsQVϏf@z-yb"a[ոsڗvY̝hVJns|κ*F*7ld0rAiJ$L&D"199F>˙[BCݻ8pՑL&s…7xcƍHPh@%u_\z.J#Fz_5\/*>???ۘ@2~T#?{799Y` LK?ٹs?CqY6rQSSbJN,;šl'O($ ׇZ ^)9 5g䕢v;4{_6 hu m%Vd_`|wpQ#Zo`[H\s@&Ҷ@;ːm?_гQG&F:Ȣ1Q[,m̔VpL Xd8 \eXƃ"+j}U8%IA Vy%z"RΜ CC%rRShrT\խlX% Jpe N4nm&c `F$eַҹV= O%CDIa2FEP:x<ԔJ֮]e劊uE"Yx-řַ._ |533}Ϟ==PSS`c~ݞCe7"8~}nnQĹsfgg" 0è>~DDq0lkk3 r@ JFFF$|ga*rxPX :l#iYxK6UC #T^n$,'Q 9;q j+\.xWfc,+[M 8Y Pgs3g5"b  RJTώ&S!1 6 [0K Z358]VgcTq$C{~Wm{j1ˤ7#G' tе^Nm"t:744)&''/_G*KSRݳuƬfիWB%sEg\l .ÇXEOٵ"mJpl,@u#ƥY _pِE 8ჯh_Q+9i9E-z9&0 g VNnnJ`-ޫ\yJ*ib!vF%F֡dPԵY\eY 9e+<^ mC%T5]'G=(u4VY/(l_b%H` ۰aF_]]e˖jc5k"T,C~~k_;s 8H.Q\i/>Ј窍©F+ɧRϛ[6~o=W9wa7j80hl[oKeڕOvʢRx|h閣q\ՙɌ4*HZ(g ׀/M+q~sX%3q޽{=@ ommfk׮0򬨨X~}"0@[[WӧO_?-r}/ͮdF΍7;vG1BƍoD"ans;q 'LflllhhH)p iT{PtT"xT p{=w01a#všgQ@BZ*̺?2+-HBBunPb U53W,ڥ5U%R}u &rEWl//duu˷PkD"ׯNFssslVU4[6OS]]}w߿߸@=@  ~r" 5iIP[w70(7]C7ʐ|KKv[L}}}Ԑ"k`bbbhhHt_/{衇jjj`qb߶tvv{񃃃Xlttt~~4s(=kQDϟ?/L(RĸnlGUjWͮح-F<2tN&KQCsIdҊuל Sn6(D%W\:|*Z[{4.UM'"I+KzOW@]|gip"eD#X'QYniE$Cn2F*7nI1YS1 &DU |-Ѩ,;'fe5a4P"'~JD"0qRZ1"})52/^ Ir{eH˕-` H'JԘ9~pѦUwQW!2_w=UFs[h ?dgB ,,a. t6 t`p窩Ը$aEGjT)mo; E5''rAD-B Poz/)aKWx|Æ "퍛fgffbX0bՕƫp8АɤsÇRL&wԩjc%fx$iDHOB"1::;LOO㳙x]v_} 6l۶qbϏˢr뿔n&. Jb,CEa5T#>8*%M19L[` ѠLT҅5ޘFS IDATؐ!`bmxqPUz,ŷd;-+' ܔȢ0C`¤s{`\s$G1D9cH+(=7' U-p · \QV;9hɒRE!^\Zdpq7]UX(઩'W5f#I(0hK]oq@q]kQAԾ.xRWS%9P35 O}z[>s{i9Xd2žP&ɉt:喗555H$Lf2 {mLNN)Ĺs13"F+ !Z4"h'Pٳg&ɁH#---_|Z- KUUU+0r>{|.\0>1ܮ=pHMF9QGh"eJNށTMټҔY^RsL?}%e:"`ei~mzf]p\bBK;`cg'Jd5zE$m6"Ei#{Bpbc,o骹+W>D3ֈ>dkogriSR O>Dt 4(H @PV@2J|nGXᛶbSe]ik,{Po,1زlTC` $n3@ Ů^ d.3oHxWP׬Ys͛7-s;y\WWWEEƾL&SV` (Ix-|…D"jhhŋp~_Z[[aieּy溺:3dOOիW&&&Jd2\2`kڢ&VjCMV 6Ό1w"KQݹYqguVVV600=?all7d27oF-˥l6[QQAt&\F$d2gΜFfffΞ=;33#ݿ˿ܽ{7P**@W'\&hO("E#27^aaNVyW(wRF\ 5S~ 01JMLQB!)͍- HG'x,LVk *RV1-)$m\nǏg#͊72W[n۸q#<|e-:\nU)D(΢:r`ȯ$)Jj$ ۔?wcڗ })d5`-ppeI{:;l\@1ai{,.0zJ3Br5Z/+Ҫ9}NgY/tC@*NwdĺI4PeXz.jP Ժ®8Ԝb=ClEƪ^"ȊP w -s,n2Oq)˗/766{W@ NLLo+**+**"Heee*"m[֭7. k|5'Zd* \97D6n:MgϞ=w\<G~RVV622r9̵[]{{{WWy-˗'&&Ν;wr@!JQ#MH4 fFvBqE.Ȫ]7.fHԵ(QY7VԘD 57d([D3`. Ri}iobiҰ'o@)m%bvo#wcDDqJfֈkq"-01tx5wqrQa{G3%*C; s`{Eoщ#]qwJdKN~rIu,-a_JYi 0p*LJhlаU+_(7gU"[iW*KlJul2awww>j SdѨq:xD"@@< Ξ= [oUYY!"*:l6 )ع Fznrykq?99){}s7| ƭ[▕NOO_pGؑJ9zxD %ڃKPJV#GvpcGR.OIŠ٥*:y=WƷh1 [8w|4RD婚 \\Q2YĪ,+eȸ}%l>`5.W+E 򑉉FN|8&i@#HwB'Oß߻|˗/Kvvv~=ty6'UUU[lY~=k&&&{y$ŋd2OMM!kP@^sxJWt5W=NAMPقW7T0R+/\ @0#❢r'mh;fDpbfq١&Ƅ{J|bkt% f8zřO:=5 1;ùImT?q4&LY$w:wC<+UR5C\RC4utt(0k=]T^~(BE)=E* Ȟko(W*Exr/]a-'O)6X& +0ޖVWWR)Q;'8pn0v(bիW;:: tE.|>*++C9QED:M$oŋ:{t;lmmQkk. 7nܸyfZT*57|s||\آԔ<`6z0ӐtEt–|5?ONA':jPR'v Dbm"bnU"Tql@XfYMUR %Gf*h&$J^<4ݡTY'0 YJZ#UDw³0zc)Y:jN5Ei,TZqbMy"?w0,љhIѩ\=@tQbhx'KLPmJ'JA bBk& k>M.~i*i]g؀ &h!83dQ6H:y)ۛDu1)^p0O"Kô'&D"ʥA:r(m1뮻gUuCU`aVWWڵkÆ MMMWҘW}Cv[(221)_G8nnn"  ƿq[w70r&=oC7|N{{{I&S=;66v%i7?CAu֭_> i$_ѷaLx饗mBix[ ܯގ4cu / lpM,ny 㷡&d\#ZF:(:r?ͬaTT@bQS*_]Lt+EUbp@H͔@bnnKUUkT)[@ȆheS .H^ #" F%lO@hW. k'pP6=Ʋ@H^j3):^?^1b1C(CEQklJ uB˜15Rip(%U]18DP7CuV2tv~vLƨlJh b^[k_D#\dm%soIGhgϮYE^VCw&5vXdXyÇR^~ "O t Ͳ$? R(Mo`xx7ߜrٳgGGGݻꯀkqES@$ٺu5kHٳg}]ido ;Y^SVI@ѹ8lAak)e\b`Bi`Q.0W!gE*?[|D ^I tR0歈'J)͢ KJxF1,3R`¸0 IJ^Q(rO&4) c[G!|ՐPK9?r+/Wʥ_u'- 4`׼vJN(lVN^9FhDˬթvh+JXBqJs4^ %z ;a|I+"9IA*ng zddkO@ڜѐ=CTa". e5$ ;t2v(vCCCt,ՑH$Je2\r B7tG>򑁁IL&344 ʟB2F@W*xQjzrgffz뭡!iDS{kqӮjӦM䵸lvnnn``_W:5/K%>|󖭌V4maB;vضm"199dÂ̙3_ـ.k޽{ \.WYYqFs.":`yzzLjRe#N_Yu2:555=Ç ׯONNh"K_ѷ oƩS>T 8;4D^&7suJl-,uW +ؽþbMa㷡&Iai>r/SL,N!RZ ,yrR$hW }5րĊ֗M)rq;)VgUTQHU0Ty."p}C ɮ\ r`Lq69jm7m&[t2**tM#4[e)H.+s %oҬ 5dV2\ 8|vgdR{6Q*s* O<-*Hɸ .Q+73͛P."O/j{e NLL WWWWVVV666d2=-Hn:c'hoo/td[sbb̙3L #F***Xm?`I(QrOOO{DBZecccΝ=tc=vuI۵knٲ%ɖgff|s'oFFFU.=3ǭx7:YZk~I%NI,JTgņDև(kpM'jL(D*z,Ʃ̹VDQLYU"mqYڸ"^i r.j0dp('Ldujx~F Kx9&vS]ρG]B }1m[j*C=s"͟9x0^A$]XF -f8akY)BB ;Ea0DÚs@ OVf^.HԐ+٩l n6C-W\[/ ?'I r'UKr&ؔ\nS!.̈́P@xB 4@gge"466=zԮ.R5G z-ry Yz꩟\R=Yt뭷JF29UZjW.@90E2Cv(Ru>iԈ,ȳ:Jir5/--* UZ4vN58׎220ýC4a Z,jwD6ejgE(H ŶL E Ĉ>%I'`l.DLԬK%+@xSYN=Q v*HD >Ě:#i.PrVpݕTHzr #5U)`: Y?-}i]ufFт4B`6c@;Y,60bWY+/|T*rURN̿*`%6`,-,BI43H3_k4}>~ԝv>},:NVcsqҷW($@:6:r5ʙJioʕ+o t0?-[g3|߯ +Z(UL߿{Y~'z7|gCߙŋ/YN[dIP}:4<<~%{ȑ_~yxx̚5k5kXfff޼ygqz͛_|'N0U~gȤP/K_fU 394QF.:HFv ZFDʓjy|5CEضar̯aCnp(`2*,;6^"-L$r2D?v +_>ZHQ=wz8?jܨVkJl'^Š: UQլP6B{3333G> /Е綟-XgAv\r zo=22255 ĺue===w~%WCK˫N;_kݻJI0[Qݵk׎;kq)vU|h 333+V3Q~gȤO#GX F= m5ҐRLh#g|I\Q'td5YB#_Uj. Q+Mh6z;S7G(GtkESW6#^BC樹Z-4s$5g$cը*JKZe֪!Z_.3͡ZSqY~axo @6}'o) j9eՊw P.*:rL(Hs19a F.Mr8XKƗѺ5iɋ+W>k5k˥HVVr#˗(OdDTZG>SDrߪkksɇhICOѦ%*K$gE[UUr`,-E˜7/^|.n~kζg\r @j>|xddFc{wEp)\s5W 9P)7hV:e˖Z\mpsϟYgkq'''7o+1Ց~gȤӨxG3YP-km-D@6j*6)9dj>ISc6PCQ}%~f(YiF*7f (7\%;;)6ղƦG! mE"Orh0J9_IPʭU~]=C!e .+Jv}Ut_uڕ3DZ@[ڲI E08M^#`a< SMl;!S:F}@OdEӹ~SWu#ONiL D:mikuhEd^ফL9De `]D ڊLԂᆐ 1Cjv N{yqT/kvIsMf=%">3]z>vخ]Ɩ/_^^:o޼ NNNNMM7_z]w݁z-k'dɒE6߲eۧg}nXϙ3sYbR^y|hLLL;q8ehV#W֢ATI|W~T1v@تŜ!$唣"L7@t19aiLZkm$)m]*ƃ)D6qPƝAfry3~bUy&/sML&ƢDJ~Ei@Τ\j5EAfn*+yBI>0d& 4PdTk>))Q$MfT(ͳl x@TBX'LkpTSSpOU/'ph<9gmGc "s }Z ʕ+=5XuSm*UTH{nxxxʕs "[pV}fffr{{{,X0o޼ǏOOO3Vӂ K/_5kK/t+Vh$;99m۶-[P'K?+0SٳWXqgC8p`ݺuwPvs=ݻ7=(Ԟ%y"1$2g +3;M~#!YEJ%$mer' KMc2$$){ <_2-yVUf(Hç=K.]0Z4*>&IBɐۭ!Aqs3_FK^UO" [( ?M 8 AL㦴Xl0'cM BB9"!OXg2gH-+9% zd۞i**bPe $N" ڟNgmGcA3ܦF$!GR:Qײ=Sq,+)O0scٷos=799y[ If;JD~kzhZصkׂ 4{pً-={lTS}tM߾}$Ӳ###/BOO r*GP;6o\y_Qs9«رc7nܺuk})o7߼oT:CASN5[4ϞbaOC}SH>< [\ $)JF͐R&<1s4+sFF WԈ@&c?PbɋA6##Dތ(?nHByy:BP)E[g7_R.|;٫J!$VPXTɦШS>VZD[8ύi&+Lb5 OY8Rs LcI8'? PI`ƫ}*SҮ >jQ Eǡ$StԻrl(n̕L[%ST1~^QcKKfV}1D57 Bk}9/REz?5k֨ 㠄;{Ix#ZO˗_~Vkdd{]ǎ{xc-ZtW\tEj{exWÇwoJz`+WΝ;W{?99}m۶1Ѥ,__9[|LJ?Ob\[VKh#P"s5vM[ A jWɏPsNE ~3Ԝ]KS)mj^c`nL^5 J B}^ 2З(W)UF+*oAVR;J6'Rxdmw5*HGlhri4DJ؛PvW\޸TDeG0+f^]PĉVCй62Nĩ%0fƻ5%=IɈCFtv(JPBlC1$" %ЩaBq/جVoeyܶI2?R(d 0֚1B&;rїu m5hb'THH+-t~ %! OKO .`sшSB[?pWm۶p+ /[ 8qb߾}Z}E+? _@2NVW\BXî]'N:>UYB2)zc5 (Q`Ք7n5,- p2CA*an@PTmvubBVuLш`3+2DRq4huS#-[`8ME%`z0 ?%Hu=0=ж( (=t h(scgAKlGBXk9C`|5L/A'wX%kDQE~LE!t ^Ha4P1-C| h;>:!%ɨ3d4ʥuHUUFgA:5PU 1B|n538LR;(m:"\G͍j,V8t3ȼ I!\ˤj[Ν+VDYgMSW^w411q)ՈM6}CCC} ,X r''' y7|3 }}}K.E ###F'Iy2)Շ[nذQB|요pxvĶ3GPXHtz|\D~V479]W=(/"T0֢;O X ?*P7sXmB` M 6 cMmlzxv9.I %\Q셝jhbꈖ(g 5fLӿ9YmfH E!orvI[F|0)5tJB9`Y2k V`ԀVhP8CFw*7Xet5Ȁ-Z?+r h@(Wv;sJe2֚υB&3\%& j![>sX$QC &(UЅ' Fa믿V`+ZgM%ϟe-[ vQRJPַ1c{zz.]z} ,P1v(wtt{9tU)7t]wݥnsŋ/_߯%{饗v =?uZE4o8- P.uf J(7*ؠ2D"XPW4IҎme٠! ITCʭs"R`zZ=0~³ƨĐPgĀibx4Tzc&|L`{ {ZMjڕg5 $ R%JX\s1WhAU%ɃɄ>Uj(PAP\>?kwEH|OHrR_9FO$i+ F3T6tΖ!IbP,mɪL| `N+ZՠgoP.sV Q1a]$rh9P,.`0rˉxt򜙙YhѝwމnWUa4z?QFY{@ӫ?i{zzV\@СCGCG}6l9Yp9眳bŊ%KT[ug(wrrrttthhCCCƺho֬Y''{+fffϟ|r5[arr;N8 Wj?1/-9|w؁*8rl #r3"0 0 XPy "\Oΰ4w1WM94T]Q2- ^gʥ>B ab E-vF6'hE}[*]D\d1J#6|q_;g)gڥuƎ͖ʡ·)uE?8Ʃcނ>1Gۯ\C)yPΚ! mxf %p1JEj"PD]N c% J}eTڌQ6|s:N2%2 P7n9$!eYB؞ʪD2G)a IDATA(20SS@a0١ֻ@BIX4/@90H6 NP)Lu@ ^XWa;hۅ)Bm+Ijx6'♙;﮻Zd 11̼zoa 3YopwyǏOLLΝ;o۶>ū .X`Ŋ Nb , 厌LNNV;666f >+/ppp0oK/;vZ/Rv2厏?O>$: | )d Gwsʊɓ/T'!702O_TP.l8t1h0LV(Z^Z>gRf$\2 ¯P#ъ€̩]̍ËPbXK,cOsETd3UmP."h0-)o[IfDߕk-^gs4$xB_ g)JfG@X.EiB\" c`zr/_I.i4OFէDVP@R U3F$PɬCsSk`5XD*L_ $J]̇Z;-liM{6$1/,]-+S NBhZ믿ꫯ;w.dgM%U_zguرcׯ_8ph#~jYp:8v=wu-"DҥK'[l9x P֭[xÇ3ʭC ;j¶cXE>byl662j_nCvUGݱjLzfܠN'~lUᨊ03\Ҕ|jnU~<zߟ^{-FA Xoܺuݻ㑝vOP*wAAAA8]TY2\xh*1$d l:P(,m,<ʙ&>( ^UUFFs 8YI4xʒehXp~mkzbYVrD=!{<.RT;lĊ`utvy0gΨV =~o9>>~ꩧjȹsVg8qwJ;W]uձcv)ᕿ挳>/\r%Aܹs8e˖iɶoE8|u֯_M : U*^Oľ)`W>vŹǼ7f_5y&8bRsUMBhw4J$~~;d|Y8rOT<8ڕWCIu꛼8_,\2>GDlXR+4P@uJEx2Bt8X.Y|,ԒNjNC妔[gv6 6m@UfEcӬ`e+ۚc;`mbdF4USR_Y̼7 ˕Љ8Z}%Q@:׬Ys뭷vij=0NW}I̞411122211s߿ 6XYngU7oޕW^y-s94~赸۶mv-y,oܸ駟>~h؆r8#MA gRSԔT6ePn 6f$2hlCQM3jV3"7s ʫlI2A*~XA{z2i$Q:?jA]@"a>KBhTd,P ;&0O|`K+rV576E35QL* 4ၥ%mJ$P.Vۏ-5TU2ՇT~QCf@ziI\B,ޔe*_!Lr&TZ%[A2񾊰P:0i|LkLI\k΍baP.SCڴycrm9382zꪫz޼yh Wzճ~%5:o޼ /3τ=zСC]?oذaCCCBv9Y500pW^~W\q[fZd <||^@U;)ꫯ]Z\+81liH/rhӦ`UP"t2mP"s[L3"Ùt:So/&iKgVIKV+uҥW^hF:rȈo;w_~ӦM0+~)0=sιK֬YEpm%s+WNMMꫯz-`ZU}P׮]v0Q YJ$urs}$('e/rgq;-Id ѕ%ȗEkiRQR>z W EiV(t2[1$a+TI|AFLXJ'_}AWOi)ڃFJAV*@_w5_.h$P-Ny$c:B_%=m(ܐFEs-#J bs2jc >8}XL9TJ9;;s(WzA7u*m6MP.4|ڈ7c4JJ3L&pRaʅt0B!e8CՑd B*3333==}p >-o>kh>OZ__:묋/<55uС1XA;?ܹs֭յYիW{k֬Kϟ/ ٳWZ500ܵk׎;N8Q#ʝxǟ~ibmŨPB % k-wG)bC,5W $2 4\&NuBhh썪EjJ?< 22 5Cz>~J H膒< 'D|JܨP.:L: 5',IHrp2g(L(Þ+tr( !qcq\9IK51ؠJF, c8& (XkPnlPk(\6-"h̟/ 1Xuv"3$k Z{Z~^+ɡDH9zQU`TМ['qe}[)=՟dV̙3s&&&:t `عs믿~$v966f5,[l僃~9眳|s=׊}__il2͛aPVqv ?߸qvkrlDTPn$BIZNEQёbd~ar e|x(Ua$} ԔzlBxOhjTQPt 0cq|kJ*kͷ2(W±`XraZ ƗTzR (3"GS:L6̊|P*܀0@1ʳ $5S&#@ȱHRo\m̝i6N P4Y8rtAl:yլTB >_Y9Xy(a ]JP<(BkMUJ(Mz[VW_} 7u7mVk֬Yd Qu2\Pcv 600Ply0=H۩zCwbb_޿-Nݽ{-n(Hͅ"A%؀4DJFJ85h/*]/ 29`\&* c%IFQBFÄ)b]P12K* lh$1mjLΚ6/ʤE vX>kQ(g@d\mz*omVLGvC9όQճ~VA;H4'V5e]̨'u6hz&WMFеSL[U$fSNa`YYac'N<#O?mv饗:dvg.]f͚s/ZhT/OC< ˗/?Svku 8::z]3֬Db.K" S X#s'c1L2yڵlD=Z!- ۃt&*)ռD*4;/O|@(̭n+rlJY=-X@{/ 8/el_xy.-48$ˎTi1AQLuA">p_wۡ(F3k$Pr>Jx($&ua<ΰ*J E6G-&hJ8w;=9رc7o^l矏^{#GLMM㯌9 8SX{jjꭷz7;?+Y!տf(2QNmM- N^93`v|P9C\JSU8X}9h$-p5밦Sy6Zդ07;zb`KƱP݌-S\SRA+PE嵋g;9X>.k(h.J#"(-PMlÿ/,QC;079"5V۹V/~^[4ˮ< 솨 LnNYi,঑Kn%K$q3TTQңG6lҭ"ϟ3g}v5>>%CgDe^Gu@x@+U wxhwoPo,Рfۊ;<%DRF^(ʶ,!|!T_WԁT# Brسj jvj&0I#F<`o&(h ȃ 1'CJD˻=Le($LI3}zRl;}c\svn7سgy睷|r Nbjjjllѣ'Npow ,=߿{ Κ5OQϙ}yC@Sp/B-(H&oLwZ1Fxm-j06/D V8V3Vae MVV[`m-ܶHV:kGUGwKu%2~P9x.qf;ߔNNEOZSc.\cj wOg>d}!PJJʛŀ'!g<ѿ!4.JRGptjNdܶ aVkV@sf(aq2 vpEŘ*9L}c:yvmW\qEq3^IKVk N_]\=/^ZhťV5666qƃ) ͝;SN|Yf:p]m3 U9Q05mK6,_џaݻڵkY[ew9hnAe]}wFnRRddfP?u=imU-4O! LON+Ee D- P5~mU =QZ_93fT,kM D ?H/@ r(##(ͮYjq~a]%KrRnߕGӵ}D}g7DRAn$티͗`pMBQԤİV( <6;" Ds̎h|UCFKrPŭRw{XRetC> u[޳gϿ^q7xc\;44q IDATte˖-\J;$7Up <5kx֬Y^۞4lczzz$[VW6lxꩧ`Et]rմҏ +x *<^/{g#p$ga~*$sBwdzR5rx|cVR |)QMx˄[կboπBbNjPb<;TsC7r:ᚣ8킺$ Tpkp^Yx0 7%irKA&ۍ'Kt+jS;0B=Aj=[nk.@?ҥK-[q m@Z#Gv6 /҃>|-.fL jٍ[RYY1lRe4)QoswyٮCS2p&(?7FhjP8)d=X#!㚙 1O~pacn€+_ CccrvحՎmS?7xzngclll|||Ϟ=/>SϟߟG=|ѣGMgsN|4hK @dUYjtXF @)Egt%$)c0Q|l24pvr#mD Mء&;)Dtr%өlIXLUm 0 \Qj_7Pce@k K?9: $5n\r_q65A}4A%B(|B]r 깞q^Bs]'ٮD[P{ֲb~UߣKUfZJ)ɟ:F3V>XM7B︑}"q9Y- *Vo{~n3LSp#G̛7oϯnDZ՚;vԔzĺux≪ZVqQX&wp^x'V*MAV('?UGDCM"rg3ZR&ѳpP9o7XgCb|iu4*yTV<!^JyW`!zT)i}*7Yi16 5>S1M4\ ƿA+¿dއ~Ր ,jC膖]²N"YRֶƶgCw|S哒mgkI؏mj+8DῒR$cOv#}08"4ɀ ⦤-y/`1GՇ<:4g%:RXA5VS|)HJ%YëvPîQs62Ym/j||0Vz;+ۻ'N5k֜9sΝ;000$fCݺSSS'Nvm“O>n:ᵸ5xpWK; ~"D#ӎ-%DDWF"qՂ47HJEŝ|¹%4ݮ`^m(~MKx<'G0]QSa$APDͷ]"0-6i0:r>=*WKqcJ~Uk}2vЃC@p,6tB mҎ!6 R2* xi!u ?$4V`PnEd2 QϮB4wYPPPPtQf3G]d!?I8oʵ΋6Xn _)dO aZP<66Cmڴ铟>݃*[u{zz?^ſ%U(FGGx_|Q8!Ϊc[O,#uOċ#5bGгM_aQvhZmWSYllbWк $۲ HWF/i7| 1+- @JG܅m3?QyKMIqhgĆ!+_:­HԊN.CH^g8/.,c28Zn 6> I*Tj .೟ҥK+(111qƵk0,j#h&үu!x*@H۩dnA_l㠚9S"a64e|n6A7R^eJ Ck0$MW#${&]zܕJ12PPLpX(2P-$ԑ ںWWv8̤w>. .SJ2W/җnSUP0k֬g} fCAЬ "~6GF6*al4h 2VYd5JdV[奇 hE3Jh$P)n{֭*m&WVT_a]&+jXo9^wj>[R.Fx^ATz.oZµ*(-ܜX}g6vvGQפ+%T: V~ )y`3& Bk aWjaζX)DK SfcJcPݞwvFl?Py!] Z[0jf$Fj>yG7mt72k{쑰!BժjJzD$ɒ(HL(-f0jsK10IlQ[U7j0sg',Er_̼6lF9I2Y4u]ctL@YZT>Oл q*+i!O Cm:l.+/2R?TIk쥂km_Pb\5I*[,VmjE0_1R¼G%r |P,p@0tW*%U;bCK3 P3Us[YPkUW{۴iwqP$ 3T0jl#4[| K2 e+ڌt+Eh%F6U>(+}qщ*"+Y/)C[n(J\xXC[g3^"K P榜}.Ga.n=Ѧ{Nͧ ^h3>wRR;J'U 9/uVak)hb =jO:c;$͚`tٕcjZdeDV(MtMV;4Z!Dzm<)==Q8v/BCmB-\>A ټy-[n뮻n޼yEtnpxxG2m 1ȩrnahѦJ%xzU7{B1*1{ ^Zd/Dqvm+'uQxXQEbF^ӡE>Sjմujª9>4"!X⼢%їʤ Io[}+8S}gF1 Ip~=?@|m#tKkXDD8]@J$P OZ%4MAooo͛_}եK.[ i_5ݠJC!T8s&7ÍDbhwqa|L*T,DKOb?χYARhm*f hKv̙?>\F9FdaTE?S3dUϮ'i2T歬X7R%\14n*L]k Pp&ZDTQ0+f;Qcz[ޱcW~݃'>x<3;EgmaECjGJ`V($9X_ìERY%6Ƚƃ%flxŸP1>^IjZI|#IAӫk7Ųf $FSZM שHl^c% 2?cbKhAϠI!up8Tܩ{h~B$5rxytA78I>dx+EۚVN]Z|ZU{Pp$X0aD:c[CuogӦM/u]я~t``cǎo~NܶP`J O6k:@.l#=a9%sUFb^N*;Je^.zz _̍*~XEd[axP!6>"n|8 }oUtv܎h$tjaK#Ь ]uEL+B^a V¦k0*u0ўvW6,3)~Cf͚xy睿ۿ؂0</TPH2Wm[m$H=y|up#p ښ<.\jdK UavLXP `?S4[4~y$ ƚAu cZir^ yl.r]@[v,OP4 Ocn ݼ.aݚW-V9SnXC$iWICFԉö{{{-fff:}=y]ww+1>>?QrŤ* @(e$[))?ՃP`aJa&sӪ&g M$jCu$ģ vHaz"sV n"Z|2!qnʥVR6ߗ|+3QbVT )Xަ=VWhKܲjQ-V[+9Xᰉ*!VSbuYo{v|qk8>XjahBc mV$^ʗV–ɺPX ֈwrqي%R?ܨgʕQ%H]!Ji0ǫ=u_V;L3hkR*e9I5?aЦ]"ɶjhDBp2#7xiJjX@Ř6ßbmYEs+76l+V1 LƭHeXu?Rv  hr܆SmUo=$~n5cOnu-c $ܨSe>7Z6 #NZ[K,<==]7oG?[oUS_U7ujpWVy *VT UW_j0ԯڳ&fLW_};[or=4"8 d9gzʪ 0DXg. OEAj DE$))]h~B9*W*]j8IH-> KKUMJ\X_frdȮ9PAU;,kȀP̌/^\n/X-`$DI3r!F+(4 Eј 7Ѳu Bޒ˄̩ӠZM` [jd.`Aty!% (imi;83]gj/;ָj;TV4xBWR.:׿4H___}fo'>Q.OowڵO>?}C>+rرCi Ulѩ_% 2vRhy-)A5Q)d{(ʙH!4 ʓýB+>OmP}ҩv#]WZ*HA֘?-Ɓ,}C26z!C}q\"ԆQ`1J僾Q1Y-ڥƦS;Yx|t4T_Pbe:*987ǧhZ$Zgxffj:&FSq[DCiF"}6ht~Q<,n TZpqT>>%MVǧ5gmޑ|BِFf,_9?֮];>>$Ul҂B ]V ,Ʒ̦.m3e'&@ԝj1O$Gn j$Y%Yv#YiP0nDӔPhSBZ t QCUǬ /lW̰YfnXi ꬰi–),%ێH0gLͧZ]Xy$nnas{8! (t_<`(5}rLXZ>dt*ϐFCP7%<9(䭀OyIWdmǰCqBbYns;v* qNhm>V`8nTX ;1Ӕ+s۰^(R ڲQGY}=P~ rPVogƍ~UW]eU޽{پ};zW^H]_2 +N#,_DU )uxÞ~iߍ70(2/9A'2/Q[ٓ6KIs5ݿ$Hp#gAQecոENWg`{$R|+;8ݸ`:nPR`ڼ cԇc)j}(gH6w*3#7s*LOOM0o޼oSUWNSB{YR_ߠW+TBԞaz-CW_ԯ/ҿ:t(Ȕ˭BѪJ*?(:BoyTQbqOuz|!>h6&`oAko '!2 cuG;)<ѯڡ#d: +͝'zER0Y45RҋSoeFKYb42 ݿPFJB(JSBKY _p] 9PiTWK̡snWn2-' Z`"0*G7S;K`@jǣ WWUO 4.whk8SU 0gRԨk7?S By5sl[Ek>Qv#"[B_UgC]POڛ xm . pw'J/.4b}9 [: e#4@-ـ.Ȇe<ߡs EO7`ll;?\m nŨ/(QHA 䩞u$ڕmUYVъVCh:'bKQ:&Zt[h ɋn+tX:V<3}Fbt15eRrGhsGa3 HW#SPPm76ەDv!NÊZ vDoϭ.n;?'݀G}X__Vb)Y^PȢՑH߬՝y?v Q7賄ly)A`WgϦF*`K`J62N:j%8E8a+B{@KYX !1"tvr C@4" ‘7 -Q{lj;ϛ8 C;uPuA"ԵOy%xMw#mMfz};[nG[_ݻwD0Nj]P'vBLj_׺A3j&RiƋiJdΌe> q@USJD%Ul%ֈ=[ VsnTumX3N=V#{W3lOHߧ, |z=MȊQBj7۽hHnӳzER$U/r3M&춉1`4<$'٪ +.j,J@AG8#*i 5*FelU +낺- i#9P 01$C[ ===Ӓ! n}h2czTb*+[mJo]8&6jqA$' W;88/|a͚5=MT t*AyVs 2TU|g❌6/߈ c l雷m$O5.A1Ɍʕ(ODZf  $C#?Dk^q{2^b8>56d2~9fOUtdJUvTpDe53lzHJJJ-ᘯK 8S)T5Q'4GaKY%.b  lT9m,o`Plaxr I!Ϧ)-k85+[(-BSmDrO¬ \d@ch=:" ֑9T[ }K_Zz,_i؏~/N\e/(0tFЅl*`P݂ĒZ ,mQRvmpՃqyCZ* =:A9">2KbvGws¸_sڦP". 9 "4$yy;&w!qȄWnTx?_|//>O $w$6lp} kq :uX yAp!$)領ۺ* +蟧En2.9FhWnYUPy&xO-hYMr-")a0Js|x RdOPG0+|QW ƪoG?џu}m۶o۶m ]_)EخZ4d9L;CM6.fXfӈqvJܫClM_F _ -HLT(mMZ!R"ԥV+-}Op4ac 7+b<[ԎsjGw*m`TZ#onU9MaTebK2ssL *(D~"Å̝H/Fa#0f6\F 8ʜb R̈́5׏;կ~?W^tرcw} ӧ݉}!Ra_ǬU [Vko*IVhFA#ܒ D5y#9YH,b FTW*9ieĶ=]:Y֒uzJvGVT-\п2FŔjW25D@ [ 98dr,JgƾL!%TPw0yPC^)FA{ `.(ߌR|Tk5|esXu(2$3ިi8!{&<`7ipp*}@ȇ-n>oSܺeHJY G X0Ⱥu^.h…c J=̾o}[_wfNg;*Zmj]T۔ U n[#Oq yc2^x_f[i lVlD.lۊyh3ޤxwDz|y A.0 81V;-K)"xK&H[fe˖o~U['/m]UF ȁth"l "a͑xpVK@w)_4ƜbYne{,V6VO7Ȟ%>%%oLۭ :l|SDr9S tPq^%ZieD;AIdRF2*[rk]&FN'm]|$[I&axڳyffFAcIp Gr $ڵky-[ԛs-HNQb h( )((a]% `'' x#\sqJT˥uMެ1KV LOS\/+Ileu9l;-ɐV>dNBY<9D4J 'v!26f{P3%gW:D) +6uzHhjg'1iںI|S'?@w߾}?#<F55ĂF /J!D{"ÂTյ'Hvzc|ZJ<̶--^9n\=Nv8B:G>^'Ϛ-j*x -&鶟Z6^r7P;8KG1n@tN?KA ^V(PC*m$.鋔3HAB F} 4B XP ~Eg$5LY4HVe˟W ՗ɢ{.L=GHB[^1[(] k|u5OaR0eGYJ= ѢF`2g͚U[=EBabtm{n]>; .֨VoPXW~PԞ9O'?y[*V%"4jNL! V#<37a0Q@J 9Рj= Pj0]I.ʜԢ@+p[% u* el I/5of2m%i$K-LK;کud &@$`h[5d1%~6?)1`{.|bյmJ"'śP٭ Vߦh\_ܬʨ`ġôR`&}}}jl'qxW_}58cmܸZՉV] iX AN7h<M&P$L4GWI~2RⰊb%Ҫ8bY:~^[LrUc"x;Ь:Ts(7Q;2b.` Pg/lPȫhKƗ.4վH/rk8S[2DVb#4g+o3}$P;W:~Uq_W\}.5a޽>s=ݻWZ/($PgȗF. uD,7bW`VP44kH"|#"[7iT\FŸWhPvz@1u;# )U<,BQitO'zxw[qjq[ <ө^-4 ULK.Zd` Sz{.LIf͚Ut/ /3ΐP%Ğ={^~۷+* kFbEd~)Hxq^gTSBڦ~>RA-7YÕO:`:R^|z`U{&6*ZZ$JjDGEbƦ'%[a[PQ〺8t0[i;EDn:K;5A濂B -`(x4m(q5 19JS56T+QmXU݃1VYj];B@TV$ڟ ZՅ28UE+Cui5~I^ve .袋zzzJAZzEPμGiZo֯~gyȑ#۷oYą ^٢2*G =͘g7pq7KCCSuՐ0sUZv:C#K'h%, b T+Ƙ1P+$ҋY"m{4f{p/43a8,RJBhj/!( Z!wb<}¨# &o5EQt4k7ZV#5 W h&Xk룒n ɢ$l RP(Яfffz{{4DaAh)*~AkNP(Vf?ި Ӿr֍rr1 Fm03ƉʯnՖ(QenP l}T0&BbQ:*J'ӂm0նǡڂe0(̈́BcTxH\%L7tC(794) yUJJI(h懤NR΢XVMkVۂi~όZFVK4[au4ٟahFa`̿jAw~&R{U%Y`gCLBu1=*] %!l9Pv% J,: x$Q![R\#j2:*g!c4ƟrIr?)%2#ԛ}Y FDrlTX4R,.+ ?ʟ$DuַZ'ILggw]3 IDATsQ3*51ˡ-o)m)$;ll*}Q8G !p.Ė-8RT0V[lM'f_خ-C$Tx)mq9S)a0#TF󍟤)cj)#k]mVs4wrAVh6\P)ڛ.lZEZA Vz@]X1a;Y0 Pk*^u4gbTt)Blg7\fToRAnAht!u6粠&L2jwKٴQ c=Do5^ Tk?EӖًڃWj*>-*VPWR?קZj M0c !pvF^}<'5-+P٠pN"Ǩeʍ7M dvD4stMET(t3o72iF BᯭiDQ(!)i  'l㲔zZk%HcE#)c6{⸍#u;">K[t2[`27" ӂvά&fD23cՔExu<`̛I)U{b-56ڒijxg У1:KZķ:bQҏ )N<TpH=3%g#Hnl,*ZY (Ї?!oMhتܞIӭDYhikDJ9췆OR[|WlѺTh,P&PJJX bf*pR+3 VB:rgR1}B5)74"P3As0 Q| E4=rEPyT.cR偆 L-x3ev1nOH=S._FloG(52fjDOsfJu(^<(nÛ*ڛL(ڑ"́EvaS̨Xؕ5SSUȰ#3>V߂ auF o?I Q^  )ztV0U杔1{UPPPP(TAxn"DtHNd=*czp8R_k MIs*됧9U$M*{N҄VmRLDEAld{+KPhPNZ6"[h۩]3eJ-( CW톺ۃ /=̓ 6|Gol)3l$ZZ pdاvg2Ah9&Y2fNfe= G6Vp jJlV.A Aa.x > ƧZGJxΉM2.m ~ZhD 롖d/]Ņ]jv*Qڢ %򗷲L! @ EwRv+eA/H>\[7*K4J0^{$߹(a\Zv %J2 @B0RKe.Cap!,t% Ò!H^/xIQ)E\+ӽVPX-*b E.)msٞa$ -QAGCP4XU+xl,$ؒ8v;j2xf&tڃ  5mZ uBO~gWf)J(kWw>:uT ߵyK!4;7SO ,JGk fQsp%zb:zB{\l$ (nB;=a (LpYZ\=^9m|09D g]UHN\s0^`t쟮k<dU)| ޲ulFjiJg\bBkA0˨OsOV[+>2r=쥊#WGaS4\@ś]֙md͖ ]_#a2{vqow !h,S/ϽDs!$ c&r% 贿R;҅^V\~FAw&|U+6,,ɥp;r B]Zw+MDN9T+"HN|mt` cfullicT0%4ti=^6>5},#}:1Q(0lC\CLSnhz* D3`{H(zQ$-x4V;EZh[|dbzjU3? _K^rQŇBvtVL9:3Qj :WCDzLs`o)&*RV6jܭ"PdžNGƒKbn$Y X཭OԌ?-0 ;-{B.#3~PUc`Gfg WD~b?⶚q>bW bbq.KX& |9RBU41.6?CwK짻(NHu2QQh!ә@dm7<; &~%]Bw 4aցdD+8a%ܔsMEbM搓!IەCE #_D ;~.^ρx7i~~ mEDhũd jW^q ۠_ڛ©gQR8#,lbZ ϴ(w3Kz+cBc56 ,H]Uߨ!,.Z䪷Qof"< f1<YQ5.^%%w#.L aب tpl6Vj[?VNL 2+Aqc}nJ)?;ZFzҦ Ia'V|egRxm?Mv-~ӼQ:A̅pr+آILJXsyt\eH#V?Ր),sg.v.,;#|eid&"ϡjû4 q`ϭ9ϭanJ#09GL׺{vtQ8`{_ FIEK8eϟ?0,Ρd`EAGZTy? Ba ȼBa){Q/Lc m21~M~ޘcH.r֪F}Y =(\tU&7qj hK{7p6w뢸m]bߚxNLnjlT3:.<$0&@Gz>>3 !=GRzWEbA22<--ح]T@<"ܶzqh/܎uLP7Y g@J{鹫vd51^4 K fC^oߝA6A8*)߿* oM[SG`V(xcfBc3n?y^ gVBp] `Ss SI(lPpZu: }L0 Z^xu2uO8tM Fx#]ĴDE4v'pbނ0ɸ.~渭o2r̘N>zvmia눙v]eWgnGvwPoC[(ҮL](W_iܟ݋f|~T)u#y֝Y]>&l_۟:t9L'sw"\~ x_{*|NXŞvuk~~І{kw zH`z~]snF Ь][O{JnžP-鯴9z6όhDxmV\5:uy)ț+r^~ D R x]n9ꡖg5t:RЃ-_6ہߙ¾l;߬qu_|NCNγl)S ivbN#&DnK͓-o_33$TgUEƛ8|`[81"{Vǝ1ߊ֎څ}:iEN=FcѡI#1ic$`c$D=#4ѵtPr |XźI1@xuBHO@[HZq;I-%Sxfu(I'B{uZM[y:u0g#n|.WNQMsni ༇1:J!nOق>(R37w1sion6O]؇w]=xTƒpbԄp푐Uow*WĔ+'NS!k^B_LMQ0C6¨<Pݡ^Z/(Яr nTۡrF6k#8Z1c&O ލnLW}#},߆Ħ߉{F\)oݿe "e^7:B±g 1+Nf ]O//KH&Q3ܼn._2:p_O'V f)⣫e'fEBxUz/jN%6)5yXM68N#k[Qki qtx{0]A??? mW`-ztY7xI۽ؓh(N@hL%oroxu.{K'`,[ ^]Y7%9 t*yA0{Ge \)/I BstAS5'ލ  8o9X.=R[Wx)%C%D7!W6̽ȓc+=~czrg$^BEw$cmN 2Z'//wt7s!&/?P=ð^o()VR-E8<<v}}XL _O)<ْdr=JA\(,3Q+DYۃ.B1*PBKèTr)Y~nFRMzӼ|'T y:YEǑײkKH򭫙 yKeUC62Z(goei}_Hc}>wzAC¥nh9?\ﵧYD zGu_uTioc<ޢh _osJCPxj,/lN e2JuLO/W8nn-bqܖ6Ӽzϫ /CƮgj ꈲEgm03-&Q3A?Ė4S.s%[`?b$g\k#]Dzi9O`S*@Q8T5@B4 {p)joHj7Go㽛sU)A^K.uE^5! +1ZZVjS~}2:lԕ 1R] Z L:Yd0I8=. m>alc  & Wf5ٕYKaˇ?@cw1_>;|qBDŇ$xę&Bό=aB!+GSNU$C{DL`P:4W);*ŚEDZ0ΙJ |W8fWtMݸٸ+PusDv.j9d>z,Ě{jRw NalT#ѣTdZ=&) m4el~" z&;+ڈiZB^<9\#= ^UaAzG5U<3v$ע$u=BfAo.,m>Qqj?4țL2O`$ #nFeB3N fQ`uXq QÇku+ ;FJJr4 ą#$vyvĹ\ŝE!?ZRp5̭睙 0tec@SpiںN QvcmS

C.ͷY }")Mz\= ,k{![麙JxS d8sxF/ok7⧘0<3K;32o +6{]]!;NCCiJCg3)'(\Sni OUҎ12%ͪ2U>7z '$KW1t91ȍG\! ntÐ}YP&ŨB ]u @<#8LO%wc:o- 8f96<ى {D[x9QWzޣP `v~~~9Gz.B|bBp#kYhs "ԆPറPcû9cAۡ՛e x_qN`2 1]Ky#0i(*gCxvݖ=cn06E_tKhjCK}6Cek xq>M~toz=ϓmnnϏw?jd |O?VZ=DoRb{ĈH~ 5qJM]MoJK#Gf+SejZF^bnt2Dž.}>er;O\(ӚrPaYхk17:\O=Nݽ8jis[niHpپPbZk6HC8ZeWfagϙR6>чn1ˉAu!\<1C|.y=wٛv@/ r`/)L/Y/<,<[n{w'fd0Pa3r!&-7x5C)I'л"uMFͼzW?BoS5Qkr;kGٍX ptM &l}pu(B- G *=νBrU k8'fjifpjW0(f$Gi2H5 Ur)dg4C%=oR*S 2B/bln}We39FHsf'?N&I tfmR.n-CO:wsqDZG{$ΰePYXlj֍v~QGR̊46_'T$bmE ;K5E!!xQ`0$kubچbWt^XX3qZG11|p_kOE4hME6im(5^w:G}V3s{H>DIM3x:D1,f /%#xb,DIF-G?ր7n0'L\{LjUǤfa)J #JŔktCiP\-KFhLݘmh)ITbxQ65NTg_s53J'-NPUcY#zNaQՑf3aE7yEVTdZ !xoihKs8 t@<擂5Uxɥ BSݹ~~~t ` p~%Xv!Z e.Y*\xfep}. ZȡX( BԑP(к`[У Qw}{Gx-Sn"` rä6.08x78 09*LgoAS~5Vx֍Ìm's?[OmLcx/l:Ņw #ָÉR6iIƅ?t|u$̘"x(>|-<ֱBWQv£ FWҮ׋8F&lw8UO8ayZ-3Oz 3v_7 `5\,ڊI/c4C:Jn2@r;[24| {+L5(ngxr/UÑE!j{9JZhshRa]t싑Z5!Ez!fKI~=ɱ?Tt`u}E $vX*wi >d3]ί"sUd n66t0J}yT'm"CnzHϟ+73IBZJ͚pLh&%>'*eE'$ bi[wB[Z$xn d+`'uOH7h~1% f#Lfaɻw-J: 1'Vέ(g jAKn l;ژvfr ?[vfSDC@Z\7s$Zk>`׳O+TDw{bĬ@,o&L}0 ^ߚk$)+soʝ{ɝLVHFUqVV qSt+lo9S|(PDF62̯6v+4Y`JxS?Kk ,]KE\ߒsI{{zuꪗn80Q6QNBبvDO2SaԙՉSgbN*T 3lg#5 k 4^Q^n85m ^6nDL\|awt;j^fˀ4a.%zɛ;/NbEJω0m>KNل܋o- 03WeV"uwANytKM=ƵƦV 1vk`MlYi^QZ,6 K[DC]MbЧxIvg-$6TA`J)X_xLSfVz-󏧮o2e0 3ardy.<%9\lF) LǑ! ?_CwԽ݅A1Q%Zs1k%OL!TGG,Ǥ%\ 8R8_M][wٛv-r*Os((%8`1miè1RrLaڣOVܭ[H>(xU;Mm^~ 0+Sւ]XQ0DsE?_(~<|'F}G?0v*mh@u#?!0Qۆ<5wr/CMV&O⭣Ut'6, F2a)o$ZsM:oeQ 1~2EqvLjFz}ij N-Д@!'F.7*Qsf|ApM Xx <+@LUGy25j3T͇,L0R*fy"lY[?/״&)Y*$wgOakGsh}OĮʥٹu7X;93F{Vyump7/] F–-\hލ̊7vZ Dz[t*D=*ܫ ˏu'#Ѿ3MVVBxFB;np/J G(ro!x>>w ~̀H` /.mۡi/:CI^o?I[xnATD?ԞpJZ \~m%u$Wp/=-0>v?sBQ3@7؄(Z-~a\cIE}ck鶓ot3>ڛ!Apq=F)# mcy(5?yD W:גP Nh&LTߖgEi_rS:J沾}m ߻sV$bO2Yct>n*0?Cn~a|@Mm/Յs`׋ OΆQ#ѕr%Fm|BpX*HKs|S|#~n[\|W&s!dEg62J^amO%rl@B_Պ<n$:X!cwuu̐C;77}|3w (φj* zLONb.H[]T; z]Vn׽F^`t2GLu&"[/Qufa`l=.5VB{&5&D9vP bjkx+`6`Ұܜjf 4WeLtߙ. U{Nv?&\m擄]#:L(!iCE{jXT I{LFBL=wƹ:7&,j`̏6;%Dg0YFk_ӤꉟWe{ `&]'L<@&cL|Nox6==LvM]dMˬ{_6RIlhC90{Q^<6Nuqm (߅۽ @:G8vG$Le`AE&7M| < vLdnN8<{P!LѠ BР&'SN"sVbDʗXnWq 49;1_{9;{00gi2p5{b&_b>U{ͽb\{"(Z@jeonsw]9h΂s 86{|:>nS0q)&wǖ)^1ijqo7Y&{C2VrLrο*u[^6 )00v>9S%lTVVٺpbx;mDjנܧ#.?ZY8%phnO_+!wCCNLvGn 0hid:ڴwaJ$ 'Wib6r.ov!]Xjp--yĥxL[z|boWi%ZnF7TgY=YhQCD@{)c +\xJۀ!㨖PxjC@ KH (@| 4|#/S>)'Lga40vKDr\ N<;_dʽPJ(K 1%Q wDX7auHuF߃Pe"q{:29l)@/ޔ>ݎ[GPp;r·D!#L?Gx l IDATfd\:Kfbdwt/(w ش\WkDÁH0^4SM_Q/2VJb)n{<ͼ'"Sҍ8 o =݋ۧq;6&|2e^Cg32LnvŴ^4Dzn&d$a5s&z%miiX3OoyÞˡ9jb`;3M(uHԯKA_r]ȩy'm/ml7Ut)v-'(Plʭj"W;@40w'/;kO Z+{q\/F=( $nrS(D䊇 "֐^^QՁYw$" rhQ(c F1D$-|W4ՀZ)'V@- i| 4S:et D^۹EQd/CJEwR!52h[qQ]") P=ㄴx>EHH7! F.Qkn;֯A.a3ݣxy|-gKdq+?=f+fB_ %QsѾ VFbChd̡3k}ͨ6$+etf8Ҙ57m)M+y10W!V?ZlϠggh /6kg[/li̤ ]f^vk>vnw&`Ta53E 7aĖSQM)=B~p\g^ 68u~8+ ՙYIi'4P $ C=[otweV)~=zt $oSތn=SDo؞rr aFiB an%KI7'Stk-`e<41\ZOr˹%Y؉hkd$bFy8q#Ϳcj=k1wL?Y^us9bQ#F)B\e,:98EQu  gB]?1+4fMH#o}b`PDixߤQgwRނ\.| ]8 ͱ'2mw#@NӣVCraIs{Er{+^ЭjbT\Ԫwjfxc17.>U xhzk1^慮u#B=yixeSO}L{2ӵb3x u$.N2{nD,> ^hkI9ʛU'fNT' ʝZSfך3ǟ.kZe}q r\Þ>l0vT[HheU矶* 2b%buGXp(I`BB E;w"3c6LC׃=LyY~l"B-3fs<D)z|i3U%05#oT< L]/Abɿ8}6q5$ _FKX_4mr $C\9H"ɗ~Yp8X%`8lZ7L _a^KGJ\QC !ApFѥ#LYΒvϟmk[\v٠=P{˓䚵t~65q.F0ɜXW>QbvM ');րA Aӈ;PN3wOe^f̐(LI-y.Q<v7)sct!#̀<+Q$-b+^_brtK;m .F@ji3.JBrp[lH~PJ{w^`ګ=6S.`n۽_=SCƂ"-fP>a;QTt C %t5Hc͹W:3- <|۾u+YWU}Ի]H+VZ54=A7oNT\4RN4onh]SgyE2!Ȟ6!朑s,T; 0َЦsN%Don\Z{aD!(~!4a]mLл|)b/Tl:BHMoxFDWb6JqR{kwϝ7jջLއL5aeP^v؆l~]{@u=pKDBL_8Jmˑ[Ю9x jwޕ@8ľ |oNMF*Bx@PTQBU* .WԈݪOO49Sο+u2Ӌ:!na_wrW2^(np@?!vaA-z%>< 9 -Vxᙞ "vfנf!+Ĝ 0OqwQ&J6RX 1.^z]S'w=f}:BOy)mXp,/ " WYb} Ϯt́SC[}e>rQvsMt87DCz?OŠ2lnLSC ˍx cycjaj+[BP(.е(QS(< 5f A#cj錒!ޗAۢ{,יs-2Q&O _Õ^u"m%oI7Q eX1Ǻݷ Ё). Ώu/L*v!5„@V\&]laidv ?5TM\cCsߨ/ ׁ֢zh $ZʖY*lL#PEX4ό}!2~~~dJ Cxfqc4Tw2CcaFS͇QaƝՕ :m52K/,/4^`r:z>stf 7Y^"1;ste"-BT :0vӏrd]q f9^<{A<{Y-o)#M[[w9B`Wl"yy:7mibm}&zѶm{db5@>LQma{h% =7D 7Q/+}fɵq,1a؄ygϾȃO?HMSOKȽwޑja"FP]`o{@f{pmh%$V'! S؟>Q4|`Mc" ys9 3qaG`D]@F _Mf͊3K[Cޱd-6. b)qrT=+Y[\vbM0vk~#¬>Ù&O5 ڟ܅x̰t(u8AJO' 5-^k!|yns<1F\8& jz 毦5ى?L &/2a߻Lr;r1`&$)z0-vrR 2 %b}us򫑥enki\nsiY{wznz"1Û.Qz_!~ Y8 ;!Zh &~btzj\T:l-Dmk]_ c=%nE Q]^#OLi! 5+\HYbo6u*ZV۶=?0]szdbSD8SJûp ^]>Z7몱iP=jcx{N4/5B/Ũ@SzɊA/QV }Ԡa!CT)N8uO9B?%Xq`+P+j5u-=#u?mx#JSR>eQ^+rC7Y6FlS5>TS`xum'< L""`:eKz ck_Esf6l+յ>3<(<x߳Qnf,ݢfޕe׶+훷R](nO %X'7h/kWBᒊ=#"QVC4V>Ԕap>2xAZ:f`\ڽ@k׻TkWs/@{o> (o!\$nK _f&1X\u&K5P:q8:] $51ٶSIs,jo r&ٵʟd/<be–:x>qB7bt} cWBD@Ύ(Q|(B5~'"u-HD,Oj,L}/B Owf#EtM}^m;?~^Kj^At3rq'إ Xp?F\2S(8EIl)LJ4yHbACUKjӨɶP(D3lxv!О®˸T9jsnTRR<&j2юR8 Kvܫ+r?t^*_\RI|CmŠ%/Qw[կmo|eF|"wۺgӹc)駴wT1BvU:)U{~4K!#ffp-K]? wg 1ںĺï)f$!EDnהs=@؛ ,г('O]7ۤ.KJҽFy u7)QXp&ox;`m^+ɎLRߡž;5]{l{O/bxsqZz3~)c-גzz5 b)UHj%ة\Zƒ[c<|_O誥LuS{@몉4.f }m#NBAI[B#Oz&(~ S&w#?Hk7KAv£>^+YۧkyWnZD3^cصBm@DyCnGŗ Q4cHH'^cP`^ޖz0fhQ }]$2^v:#dsxt3?P}&E?O<a׺A~e)՝ܻƛ9 F:iDӉ!ٹKm撷|'QQɉW 0kҹMC-Ҧ0b&洯"'`=㉋AH˶]'-/-x'gp![b̂F QSSot9^dLQݥ"YnlAr8- 9 Th/CGcEG@%]2cTv$塝U3;.f],VvS32~~p\owKU-Ͻ"la!ʛY qd!}9hk+-c`I2勿3o[gOv[)֕F}ؽ{5AFqh<"`DSSaҺX\ dOۑbohBWT{/6苐[-D$-Udt+ kk=NԂB?~S|y }wqŻ 1 ZwѕB&:Q 6@üɞ !7 ^+@1"]tq]@LOۏ:mL&)gk7qlK>6'I~LO7+LzfU_(KMHο<Y$E1VHu:+*:yHmzS'm\ݓv0g},Œ5Հa_ZKhZDz>߶aNp^\Ʌǡ:r [/.>% A ǽ =ņD6B/GIB0<,x{_G:0HgF 3-snZ"JZ#yiı|A[1p]qdDlOZ TKONbm OMC YILԴuYi&o)' fmWxY݁(VLLiRVe4rXcJ;ż{%q[F81vsWke/1g:յ>xlۋq(9}(mp f-LI9IK{Q i"v."IZ e~O!~zdxp]^Ѓ QSJi}IWK!&Gu߳|t:DfЍP9Okg>//xiECn#ʞ޳]JC?^ 2ld|};ohBb;yn@)lFP60?k>@'Z֡x<8gqJcS=.!xaMcœ8 ZĚwe"OT}ɫ/mdB$>l?~Um~ՒtoB:tW񰨧L=2I]?syu?a\`ēܻ .DvD^y_BwlzN( ڷ,\ Pؚ5$W~h |ol]*Ӏ A0b `& n5Jy^_0 ȶiZ/iWâ.lihJL##3%`!0s﬛L|;Cw{p_-C,#г6O/NO)a| BKA\Q%)fArtnis*5Wh~N! g솭Y`̉!Wx\k6&[˜p2J- v=C +3 E:A)w0}A`Ga}[ #t@Voq(VA吙8ouZ ηO[ok:cP($0Ad~,ÞLlz.E zw]&D=;_ݺ4xٖ@{͒ɆPP`i3-]3yfzt) &B)ܢ(1H1yKTcޯTgcCxN%h}"t7'VfZow{%6½Ne8 MG܆MX( C0ZZ Baӵљ97Zi/"w/>=L(fɌz%ht ҥ(Mmu \9nەf=->ڱ9>p I7wytT Bqź| *}a !{f˂ݶvl0V9LWz b[H5yFP:FSs߆zmU\Z/iF[Q1Hkoѡ:n6D0w9a{L%~ӷ}PTQ8_#J-J"Nb^~, .綻ga:v~>Q>ģw.tas"PϠ-1'aN-E%:+J9~(-483#w,G315z /ύf2K ɢtjN8-?g!am:xӉe$d;t7L]jh~HԎJ60)$M|r14A]Q1 =8D4_uUPS~kb Ͻw(v].{YCLx2 9D=EZfCg-`/]SIBx3/$$ :G m=zv[)ic!=g-PJt&!FR=EˠItⲛPY rN\d G2y{ k]W>.KOѳ$ -V?bV?7Q9-W*Tt3 Oc&a@jri?BShCWu VD!:Ь;"Bx)8Ƀu**7Jcb` ­uݦEq }tL>y5bѾ[o>4`}nS62i [3o܎OZ|2eYCU%`7Ek X9s|~&1\k$Ox=TFAc~*}ʰ#WvLQpۓ.9\|CSiSw0y9 Ov'E<[} :$+}~kRd:ws!Z'xH#|kI ^\յ&A$Nȫubc`6<[ ǭ3)iծZ}y.=Ù52=8O.m̉(U@r/.L,GȈ]Ba)6m6`uCVE_1cV>[uKh |:gߖL•gbE֩Pɜ CIl0Ý$yiuuVsR,G_ČSӲ%Lisa^s:aF%{c):P-#F2<qMZ_8ySn1??? yXށ~؃;7 ' ޵Raޅ<,oeZH\{[e52%^4"qf{l|T Q0w1UK$Y'Կ;Of6UFP ^#ҹDƝiM00OH҆Iln5򽓋&]J3u_2!}&(P>Xjsc-+bסd.rlkH]}Q&76'@tP`;W͙ߠ+ y9h(5kRW(є kq+ ͗<6νnCQPc,XemU3 _wmʎ_Q}RiL % % >Ds\LDצ~m31^*eIH9}$sJ04^u7*GieX4d"@¼}W͞ ]+\}t-X$ڨkхσ`,a?,2sݴ;3EC@#Πp>'Q rvӄ͞_:]wu  EYLuI=8(AWxW\e[QƆR,Z냹9-0c܂h]/0;}h5ɣMۆq*P;x'/>8̟h5i<EkZE܈]kVqNLB4k}C@SdL`+yh0xANu.FȽ_Ôk09maTt1eS(LDn =(0KQ{qtbr`"g"m;m߂*g BD2ͮ]K`GtU4'MW"[/(X0=Fj6U6B9`0?OBW4_/%,HųUD_]յy3'su לD4z]Vۋۿ7u~Gv2)vn#ׄ6PƍS@q|t}Kvkv٧]k0v\ob5rՒzc:Mo  k^Mq'1:!}`tN[w(_^- }rޙ`W0/O+w]y%܋(r}Z]uȵ-a@ wN|x:[[k6 ,wBdBJr+zЋxaH`J( 7\Fߢm!QO?w- 230Dhm8Q*$z+jeړ ֬Qr p-]c!~6((t)IHPW)z[S*Cr]p]bQN<=;^D: 3+n<^Zݪ&ed҂n^yŧv$ppsBeD.\e!ףs)5$ERCr.aOt1]I^P4OGZ;q(%wm2;3# ?cw z+2O}ƝDu4Af=Q5B{v}nYb 'ۏZ4s8oGpd*}K1:& SP㨰2Q]IN_z )XL XM7|. 7k1r\zk-ZwL/?щ =Uqӹڈ~,"}׌tM?. \W|K@` pPT#lT[ۋ6%w9 ̇-x%RڎXOc՛3W[>13-_)󹞜} 뽶ľWowsv3yGf}Z9 }lʛ(sx Ih6-Tf^xVJF E s-j=kK+ЩGV7cXrUz\+xgMi{48?7,%t#INIDAT}޼u fs3[vL`3{|>iVaxF%sV D,hP[QT.^h|RsVs匧℣ WV[tگ娬7(1( M"shwak`!3 1ݴ̵Ҽ&Z{81ײƱ3p#t#(/*Cdp!VN'[Q]w-uǍ<|Y՜C#PTx1ҙ5"qoQ=JEQQEjV9 }m>3[A3vzӔ+bߺO՗/UyqW@ *xN){whg2GdNC m7^A-$j־Pxv=HnlYgˀ-rM슚E9_} BM}b#u;"6f .w„| ;N\+by>oI2t`kCmD$ǠkzœitO.qMƚWnrP6EDwyBHWo fďI6;iۆj\Nb TGb֧ ^spZ>lkiBw Cঢ়%s.s$*\ۗ>̎?"puۛ1 ݗͥ8_" |Efuܕ?>nWZ Qi UwBRhf2G{֗yoƧrL8PiN#SYվc$=v)rn\k?Fx8mQtP77z lf98j*=t-k!p7=LNr{vn`Z. (gWCL )r3)$2m=&_?IIENDB`age-PG16-v1.5.0-rc0/img/age-03.png000066400000000000000000016160361454606241200160530ustar00rootroot00000000000000PNG  IHDR T pHYs&? IDATxێ4;W A8] Re ћM3t.N?[o7׫[>c'$[g] s1R+Oj{lJKX /J7? v:r^Gz88{MA>S{O,;rWs|Bk9__6tM@SׁwiuJbnp,#=AS%"0l;jn,>t  r&YrJObUU?rc{1+OlI?z:ъ%9 cd8P;;tu^` gKXD!؅㦐؛)9{byz58 U{-g@l 8kAXUTK'#s׾pFFv\# Ԫ}69K$84pC!<׍~R  tJEGJx>f.o"=Gω[O"I$f6͓AanQh2 Eĥ-̼Kk d ^\`m]k6x*)wUnOkm[e١iEډMaUxvWa17:nLy$t-EQ7WBY7[r«=uaLY?71){b0Ȍp| SZ*v9ARb-44;/wx2 m3Iޚ?IIpj"*xlXV._Y|n驩*H:/|b_}^Ƣ&|?:~zMWWfDV^arʏj7zPQvvN1*nnXڼ;9tИce>- K.w<9> 3=ɥp)3Z(8G޿{YKAP.ڃPm ëZO]Uo!2aF~uN,U} )+A{=~-n+ZbFd iuGGˁJtW]H37)i 9i0t27 teo>x9H\XqQ#+EWUWڨgr<0'>d8> BK-]k i^1)lYzRFMƹEH DZSyp2e \sVVךXVIg&|72mH)a {3 L!/B!4J噤NNF̤^!ЀCJo&&ͱ(=V7(TX֛ |uI&q%p?|N!|Hzl^\UBWѫB/Sր3ȱppr/hO!PD`|f/-|j{Ba[>EtIQRky ,t+W2AAF.=JP{ M% fo$_ҒຶޟM\$ ۚx^ݰ:pQڀ=Tcҩ\:rs']JŚ7mX;%ɱ.*{g@=1̓/o0N[BְnܧYs@4[aNm~]ݗccJ4IPZS)1Ƥ\ܦ~@`eIp9݇Ar L On{ISR,|/YJs+/j(P `5W6m9ESS4$Hk-"us&44*b\djǧ>2T}rP>0YZOӵͅ!=ɻ{aw-@>jF[!Aȧ{ rkgo=?=1LⶌI0v)rx'2N;7z|eT t1U)A&NWpH MV$UJG&v1PIǶRSv(財T (yS X.9 (g1QpsyќʺlWMc$GKhiTy(R^q璉(h,Ӭ简jW AN|+7Щ43G5nI#?kU}=zGV8l%9l8`|; g.!c01xc]}Uoꂔ^˸Ě2_YSsP4ц5]1‚u0j6 -!8&ꆍO+l} 2 )$Qn˝0^/64z)彙;sSy>1F ) 8n(Bð r9ŸA!rK~ aP.A |!l׊bKd? @ҋTnWTɂAȥ|ҧi/%jQW;`%'ڂ\AqUnor D :2FjEZMɆ5Rmj9K>#-2')!{PC1 A\%2G: o@V^VGHЯCjb<]6.*I V]*?X  c4Wmg*K"5a I{8,sI%g74_b' 4OEsrᛔvMY:3ЏՖ2˝kÒ`SNӛbc-*wRZc';{TPם9a }s#yQ]AG=`H]f 9''^!y2m3E=OFz? {ጡU.i՞}0PWL{[/2_.xZbCjAm@=d7LW&]nuaŮ/Ws}=q0,&1Hy}SeDK]1?eʉ&c܆e-RjA^Ɣ>=FQE>oc=kW<,w8Y[F S5-돹E!^I"#'ݞ>ւPFR bSdk7֔xib{l,?qm.q86ykJ!Ek m6k #c9Cg.LpZ9 /R4-hiwu5*zJ0NWo0^*Dxe-pXMO^Zz(hEF/*9Ol^m8~t\,`@ &wRK&[~HAƸpbNOyps:id[A5*^w W NjaL¡󓑂^ &ej. SW%v`3}x:dw-( |fiy[kx\503{ʩmY-ht]z=3iB7C#V~@עlCj.FCFq,Fq;'S ثwXQߵϐH"uDu@rmu) \OV)Tc+}yuzQ^2bƨGb շ|&0\Eω% !dr 9Prdg$h x_}0V<y.1)m@ ljzQBTkH *]B>#>d/ђ\~@•dba\j\16 =6D\WY\X`ԯW(SO8KӴ"塛AT]-l7'_U S(Kj/W-D/cC/oɽΎBfv.,4!@%7CQ?&&,t* &*v;K3 ,.p-(`H߸2wmx?N ЫPRj6ҪSkȲL䱳ʕ?.bSfPP^qݰhk4A C[QUQ}-!@Y#Jl"N! 䝱S,R&5b?֬[ixtvJ) 0nY160Ǝ$5}n[ߎUWU͉/S hO <\z*2i;g{CWu5-jy !$ > یBy wN"V.!f^?9qq)™=~Wp4Une'xe==qHKcǮ}m#؆mos 4TO ?caNfZTiSLYAqc! 6 !|, u x.ei^?1K*i;'gw4YhƵ ;JY).e]ϼ5YACuoROR{VKtFĩ^^j׫/_AHتa?:Yyfk =qdžpQ4M]Kt452|z}:^ ؽ=5y5:CΚėIaʮsU%ӈ7&ųUS'>YN?Rmaq{Y>ż]% UUί^ }___irN5ǤX;0MJY`asW3" IDATpRN;'HagCQA!BY_ar/} |R &Uن6@ ZBG}}骁zVB7"s+ +j~e!Ѭ!+,>Xz^gh~"IP2WFc|lX؞ӄB!>(瓙wvgPL[|׳ԅllrxm3K1g\vNt:n<4g[x@ HϜe f/#% 'W0yD xZ\#6VEO_fQ?9yE ~ZO5.kZf *%PrDY !B#YAV4Ϩk^#zc꾙J o.yMz Cp JF߻)gn/+m*\2GQc8Q E T7/.;_4=؟NIdT}=c~WkH;'kK1Szڛv7l`Yd }w%rrNB!|84|6OWzMySWz5XX{|$~6i'R伛^{Ղ\XԘ"||HX 饉(<䏹MpeMO&)Ofw3[9Ϣ7g hrY ӱTr4"|CS>mAaf :ݖVmL`d3F65ԣc0 93Uk3B> B:$pU>,{Ky=0|S̚lM.=:5kP?*U *&zrz2` { eɲӷFؖO&29NԞ/0MPB/r?CY; `d74]`[יZ7 6<# ߬A^64& }~'êh{kwUp(w&uÑmiUY핡GcdA] ASr^hl8 M92~8ezSy<}K+z$lv@9\׿DJl @1¦ư3޲ia[?qCmx ǖu-b=?j'{X"e,.+N+Ak GHOê1{st-XiqsYWmm}+ im2<rn~ZN 3*=-myN aPe"_lÝUE ԥ:~w ö<bB)H%h5dXT8*72^H,Z 6RǏH AbH (4u[pLwx Kāh6ww3Q,pj{䚅Ŵᇟ!p-c72xuvjW]B]~WNQ"Rf? 6[U)7B;jÔ<)jC[zQ׈<S9Bc@!ܑ  3V_=G"|ʛFE3܅ ǝYӬP^c+6놺4,dFdU_Y ]5aRc>kF.yV:2F鶹d/*^oƒ 0(L,Á; P; ԆE eǸmrGδ*#B!'c5ψy>,@žQ1OwLS cFӊ:x%ȧ讽'KUw[tO@>G0;Ol(dM* '(װ~;І%tkC*<_+YK0!%!+!r;b;Ց^I&2\_Wა,jN^vH]5}kMқ@.h_s32Ѓ~L kNL޹ E~)Oʯuhm)Xa f;!Csx^$PNʩ~lD=47fgYqG,! S;$ܬIzӗW~eX{K #on(/*R@b]&(7U ccR # Xfv44m`VY=V#lX..dd+dԽ4:6Cۛ/q= )x4F@aO?rȔ? 2nl-ujm 9r5Vy_si,eVV+7G] ?iٷE'95eywrjK!52B4r8&Ӷ?Qi9 ) Y=(>{α1ky*_D1 UY/ܡ-Uiڅ^g= 6 Y%}ruM kw`` MSg%TkGoU%|!r %᜵ !dR6wCa0jTq :'7pTq]\Q:SVO18e%FKě\be8gqE׋y'rVsބj& {5nǭ7±pk'3QAۚ#F2yPƋҸh0^ߤ+NV I,{aԒW\we/۱RTO1zulu E*h / S>{ͻNσ;]Dkz6s󒫡@mpy|8||1L;գObl(!%pQ՞GeAMϤL?s,BHeÒm.}SE˫!1_1'Ǎ{BTjʔVv r?!KU3GQ8R R"V .@`&^)US=bF}jeVKN쩷6≄S]%qE(Ԍ&\77f|t,5 u~k;|XerBԜu6l^]sW1=fBjN2dyhCz9o˷ׄ[C;5&0~TՐ[K|Fx){iod j+lӺv+&ЈU+ o#nƞxO<ۯ(9YNά^oq~g!sf!U x4: H9\=uF+E;6}8j!X/j`Zܞfۛ~=6jm7%І!@ëqSfMzqnjSBn$* 'su !õWN\?ڻK1Sፆjkc55==RIscѪ !uAѽz/E^32*[K d-\5P"WsԬ׍`f`ٖEuI7<[[S>j?jE׾h2#WC52@A6Նj*r_B9$,hy% &'jjǞA|ʢqھণ}RHQ嘢*?U'155G=UzFEKfEcF.PUR'*Mb2Y*mk 0Jۏ\Bp!BR7B}BpȘ[3gĺ}g UBlz7{mt=\N0wC#4|H*{l:ȺŞU4n4AdG *xzMRM-@/dؤ($,8`o>ٔ7 69c d)^y3TԏM*`;pf3Ias,>`Wn zۛ1sT%0'*QQ;vƲVYk#k-B`,-=۞4r9\UX#pf&Xw/A#=wR zηm$wp"kAJ;y~dT)7;?z 6|o[ Maˆ%&lJsxEyԌVhW Mc,axd٩M21r_a@W%ڛTɺ^wqi\YZmjh>`n|`=D 9f ӳcԫq" O6:,rvm9Jji3C襟rr-R8K/˶6ƃ;D4k܎=F)By<<<yp Pg)sÕtE*sÊ]eNfVȯydOonfK5c[^Ozݬ?M߿4xs&Bo3Pl^-%ׁLV\4^ H_a*a|螄 `ܴNQ¦VWʉo.vx 3timҬ(^Ş94施?.أ=\3gHL!rhnaq w!KecGBcqE}q9^Sί]p GMwhlHvJvE$4~κo$0xFd{@ݣzt嵺; +\b{ Hi,oE[9B6To Hz1_2,HH Hl$3[` ϛ i p i(O^m*^{#Y.*ޟH|pb8ԅ*ZTaQ}53c\fw?%[~7q8X֮M!(o2s󗐚!1#.Y.")f3CQP`mk~-*M1u $}gĘd_2(:rۍ~O/UH{ː8qc!G }Waj+0Hs{{Hy5,VsO*eNtmKV_dhwx5b4~x >Za<GB!;}d51%wC%|9pn 5E'_\II)캓Uuil0y߂%=XP? z)LX U s7Wb|eUi{r*WU[p6kcI;ЇZ֐ާ=s9bSύ;oގ{0YibiU5|UuU8M E %#aW|56j;h\cƳV1T?ߋr?|&Y!d<4c&> L)g$ǩr'DWZ 40^l.爔IKkmzM/\$r2"kB!{3l'q#KuhMP_u99\٦6N6Okx}lpːe>VӺv^#6R^m]q^vp)eW*\`b|pEkfjؽ k ޵_`y̞8>' l iF :+:QbrA70\Eȍz3&Ǚl};8c!Y\8ߺqo_^=n`ǰwK[n`VDۄ)4 f[uVc|gD+UwZz@6Ku3K{2) mk0|BH:;()pa" J\v4s]1 o.v^r?'+ x l|,~fuex|u~9^p)͢p/^ ;}GgÃ_+N[ '{ii6Qf)4^UّC2pe$"tzF*6O^%Gxk +|?_% Sk)Ԯ̻֬ҵj#F-G"wt}t\ViC 2s ,{{nO·BӍ7(_.A]tuWilu9֘ qS/ԝB!;HG1#K̉)KM#'dEC2qR1{{tAVzL eYֆxo6QdN $Q+K;BUQE>*0\˱8)Yݮ[H'±zzP6]"1EB!sqɛ97SYE͍|#{:xhA704?lz_;x=-c lUJtAkn)B/K\I 튐LH~+B1pmnyU s#&l$=Je/Π%[plkHTӪHX-FLOe)t2̜o`?܄KvU6ŸeY4[PvRmE";^= o]{MuBQ40?dl%7G$ ˯RW*V`[:|bs:F3^)rYvQK` ħCbZ'W@H=μZ RF a.R.f|+vuiQjVԥh aBm^Omsi|Tf?`o _1IF6?6nz 3 ,ٓzf1r=i[-uܾ_/SVFvj1c[.FD^A̯ZrgD<:JRS n4Zz7& jo iu5.d{Z+v ]BR`wBn2~:Zu\^z3 JQvVf- t)q׾yRCz , BOW^Kir}\Q z[LY} 0|{ބŃ5\B}"Tl휨nx=0eopC^9ѻJ˖<GHa@L(yzIjL_z5eZL .'7ܤxovׯ\y}Bh16r"sW!pxz\o{g`Ӕ |ޛEH3,ےyu;}%ȝ1֍`~9MjjRK,`0ذRU.*s3_Rֽ@,Vp/ ^cySGu7PxCܷ7B_ਗ਼|O܂Hrw!#;Q:E؆<ƐTsGvNa6`[Ɔ @M0|& _ i+D49r>ZA m*5\X\Җ7L΍jϕ,1gH!*{u=/ZWjsɍp%d B!Y 7Y"éӀ3?I EԃpOvƄ>CTMゲq00.Oߛba&Wq9O0u!QQ QPsBNEFf+W* ;yIR8V<@ !*(!BJ#͟&#~8UCƇR'xG\Y|ub,\K՟߀$!*f23 cmbc~ 7)?^DPH~jR1jֽwY}'jMaC}{yL>\4ć6C b֫Q Tjvo3 Jz |c/lJStq0X nkܘz TR|OF6FS|lxH" ^H@5U=z^6^Ppuz.77DhL5`6R)6bhc`28 D!$pߞ߉}e{nfmah ysҙ%̒ro/RW+Ӱ+1C{r^k-L/I}/fP6{"hsVU/>aW0S4]Õ~O2`] I~;<jsɛڜ[!2!+vmh;Pa+Bq2z.Y&Hc 1@`PA(,AYO=u:N,&0}c=7A;wt *Ԑ-,]dë`Yf0hW$ 217vA:|SNC+2޻<;qK( !mj87x9@|++)'uTŹ)3E}t;O.jIj_\D]URu鲐;?QD.lɬ/'ׄBH.B!B)PtTسsV+ҒM3ɢu!EZMaLO]{F2'l,=h)(X$7evWW޸,xUŒC[­w0w_2F!fM/T5V5bp^MzuT* Bz2vW[YkVبڦǰH~-\dg::_)H©SF*qL&'c+%W+RNgRKꭩK=!ÒBIɬr܋ ƷdS2Z`|!L}n܎sO&k1 IDATԑB!BH"H#/J Wn@F%T?}"ÃKJ ?_aMWb1ޓBX: '::CU)\!]/B ȗ {`"9r!S''>&jcWhZ|K]׆'.cJFn:ԶiB"Y7B!BYf/ң'+O6pBNHlzAO(d 4f0̤\'x  V!ҦG]/Ե;հ`֬uo %p*kיw\gz3q #1iR+"4/~d#^v{a8XV<+A!KXڰ [00ܔAzž[&'xsx.}eM615pλ-EgpJ+.46'#WSML,EQ2ɵ뿪OVNui/V]a&RΰVzϬl^TVW2ZSђ.+nV7+NV9BX^Yp=Ah6^z78 pP=ĆJ}}tv\>SD%lK]^}i {~Wa㒄T |7)V02{T-zBF7{ue&eqZI;i]嗬`\(b4v ve#b|aCs+w<=wA>/N nvo/ՆxWvoV$raC9{rLCCMMV1PoZ@}n  !B!Xf$Y"fۄ|; /r-^Bu S0_e2/0Id腣0Y=D틔 d1W\)8bE;ZTh5f5zИH{Go%RD1Ԁ= |6:n.rW6 1v{13rqEοV-3o/fbOs$"$FR!.Lx MaU&>`?/pՉkoGxUsgdApֽw=bohϝ2\sHehߑvVyRV$$xGVHaW!IVMjnr,R{]Uȳ\xIfG#b0wY{Ld~Pm}Frf+x57ԢMػq*o)mhf3,J$FH Bo?[k+9S%wl~1)%7/I$657|Oz9C=l,1*+q=boW  RrcK` uikWaEl`?l$rM/Qe.UzIxyb=Z[' fRc@.[*N,ӶsFjh$>L}L:ɂLBxƲD BH '"Y r2;2N\N+yw76{FԽe&ejARl#"=EYN#ˁRE%5&uw.e_OmTWBm{)4ؙxK!?8!W0,5!iMY*{AH3=;ωHZa.YF`;GW<^7D(^u 9 prsF]T 8<)\jctN >!?n+D B>pdBC$d: 8?"a0S0x#Ql,${ɢѢB:fKa#OGWbCR)vM ]p}[e|;sC!Zy?]SudJhY )ϏT6qJ!@.KaPAA@%ϸB!oëw=7ْ[em* '[ y xjMӝjkcbX֓yXK{n1UiTJ;Rr>!?լ!™M3' j 6 . J+IDHsXq]Qeba WEn4R̥%=e RNV/v1H.kZF3_a%g d%K&ehTA-zQuZx ]y wϨd*6U۪ | K"'F!02 tGibT9mJÍi> o8u5{dǞ΀bJlF<܌S^6oz>"Gx3 Qѫ.td]c5?[ce*97C Xbt}(^t/ySd&% 9LghS<̱i_!}J!ϗŞd{׽{--{ɏ=kJl¾j3/΁xYb<`LvP6k_wz$[EDeT7”-ʷr{( ߪ+¨Fʍu1$X| \HBȁNdVL!|, {:Yn?:}+:ߋ. _^jFn !U3ˊR'j컋չ#pK;8` Rqm-ױp*L!@/wps_j #bYUlUWޏo _\Gن=I7lz)!7n-`"BR;) %YRuןҏFW6)ΐG!y;a]_f~q TAf Ɋ3z1/=q)to[^{8Q@&Bڙ?5)4Z r'+B33{>w_ &qBe<Qvdz7qgh$2Ob5'+5? 90T[fv9U̜sxV ?pjv\MOvC7xb;}YW롃&op@yQ_.~r^ܳf꧛\n^ wc, sIHKf7'#! f6s6Y5b?UZM'{~+zh$2 Bx,,'HƖ'|6]atJkA9) mҟQ }635lPuh6 ǠC;=;c9l0sF"˱SI5_[ uo_6{l[tEȃ|!4ёtBF½y ~dO8 !wbqC J&s?9戼#Vj 0䕫~vԎHڠ o}wו6xM;aV'[;6XY;hk |ST@v5tV[Q V\qFV-9N!xC ~qi>؞޲gL. '1#62Uz\;Dlk]z@C7|}ɓ*`3+ˁϔm^p8O3BGTzQ4]/zSk &anPr\B4!k5&~hTufLdn̶U❬}.O1COkڰ75z._ƙl׸xG 6l:7Z kϞlC̃uxB$wB e"I*Rδ P!F3AE5XIzҔ욺'_u2IɢvflÓNΠZ]u5 ׺!gL9g7Yx'm e>2黺&G+Jm@:tG[GXn!w)swXYQN5)3SH8!YIlSq!L=Tw%b.WTo9@Dupދ۾K 0^}/By=xxMXv izO @u;S pʶԐVICV \UW7V֦Ho=n5DԢFN5LY[vg[WRjƸg킏[|:iByKX&Q;*8)޷es3Hǚ@#cx:^0xGQu8x~KT>iZzәe"gNK~ q5emrV#hp/mB7hv̘ow-wU5yz&62 {erĘ0߇p9L*ˏdN:r BepcE\uNk݁6%B,H̱φiUc; WwL4$n1.a ^&%ZOmR^nKÝHwUdصRm%i5Wp"uQ(v7 + O\3#ᓱ-(I|3Fw ؑw%44=Cs*qOv_&p!;=ZމKLIP8j"^wT?sr7=Sx'ݒÎW$) _DrSU5v5>=I+( ಋ c&9 (q+8{=txĿX9>pf.A<bFs`7'ށ.+!H ОgeJ6Z7a_cU >^OȮH9CԤ>]k?&8!B1x⪅, agHL?L3{6Eʱx=2?Z)xe20Iّ JD^:ZxKU]lVy~ 9~4=\%Iy1|h oyG{͑HŴ~^?){WTt3jީ+zo6y'zM `aj0617b$_x#ϥ,W mRx>|FZ&2.UXd!o;rլmZ#t aHU=UFr6#=|H i&+0w[IA HIO]=q1W IDATx^ Y.ʈY=w]5Y[mw^5D[= 2^ׁK8GǛ?M;rL7rYq[,ԟMgVIww nt7ۦm0e\: ukA%RY| xüVETjYRGl2Cؼ1RFA[oki "vr >ɀxkCUdG6ϻKgŎU>bRUwz$#DɊ'(a4=/7`Ų $?!D hT]U),]~^wQ5'?M|[XԊpWId޶>-ulYxpW{kM !Oc+^{t 8Da9#yl7wWccuFE}åcGkR2@Y~t@ZRa=E5@RadS27b``2}ʆV6Iﻡ*H9Dr29 u 4Y=U^T Vm74w=%wng$n?&dubhE!IqɅ rWn &^C|uAzuerXMb||A!  YGT='FE}6P@6m175/jl[ aS*.OҒ,`JFopARLVs%Th:0.И+ 'eӭk" ex[Kw\_߀8H"yt s5IYu95]>6/!m\o'(FêF:2s4V ەh.$^1\z|BHrwk |mP4ª"_ 0k1rA@aʴE_3g2&eخͨOF6K{;Лvc QW]dYvM#4rPd7}+6 [{kFll#'necE=G8doB!K(R8`ō/` )*U0 YNARP,;W?NƱ'], & ^܈ɺ'#s;k֙RՏ5 .ݔE{~zkw̃RWl8 yo=( \huIjрüMBЬUΰwJe lWW^#?1mCb0<]הdF]{]ҟ߅859-5SW7UƆԈf3o Q Г+*xq[Kma  e3*1~;kV~c zבaÁe5 "k她PmADg^1ga1 r˽iOۥcP~ ͂8l cz\Q}[ݪu9!xf]B^i1 jF2eyiQ1sqs 8[; T [?zy1㌕ V*ǟp+@)'R@!CDi|vI.|}}^/lC~2QlsE qaL/%WMviwxۖnͻe;g5<^j7b1kPV{N>I+}aaw֫ E~%$@bI;1NiC_35IOYTu\ttOMMU(cI$8vOeɞNfl%8pC'H`# +^ߝG:wk}^W k8~{¥r5qLMҮ2x\ J<+'i'xUy[=L -F|]3w._y ? d!:FLx z|L>qc$#(%b~܏xU[T ׵\o[s/-9؛,cNFt5~:M'N" |9[raW:`1`;QI.;tٗ/e_[։&Ro򬠳x!Ѱ10J%M+ԐcDWNhEŨe'QOŠLfC Y&9Hd$F%Skk[p%kͳd5ą%+HOo=?/;x 8rXOs;شT3gn_hUCw"-J$YO c\A]JR,?]# sKQy׌ ?2YU`qo"ddhJӌ0o׸MOz*N4$$~.]J6x{{֞0`ZDH\X%7Β峜^O??.P#j@}6; ӡ!I1[+d*~-}[7}Vhθwno".~Xro`߿Gzcu=ie6gk2T3AP&D*BXX@qե[9# N$,kLkS1֧̕yHMZE95s0?B_TX$}\ﰫL!ajLj\$T:ȡ}DꣃbU| Ųčol_3+`j" K~ev#\ĂewQzrPLd=WW-8^Cj߰WM]?0sv θ$clwtq/¶}~7kIfr͆OM7ʭR>\/TnwJ&*Je*J2!X]T.>e*Ŕ!ʕ!}R*L MQeskVtI?jQ?8Vʵ)XR˷Y[ &%q׀ʭ&qa B-,#ؒUo9[@-Z*cچr i7T 6Xv*~hqݙ[~θ|Ե}>C79k:QXKBjQ^cZ'2v*59\cӲ.AFDE.avrSV6!--h40?]$삠0]{2FZ`[ U3!'8mފ=~iJ#xbXqFn@|[9pĻol??KVP]$eJ%KE]~s}?.=5HIpW= f {w i gtH^7ؙ%ia *uLK5zj7dsLmZ1 eXk0S+F6mld5Tn4">2#OgXkIlU*le^.Jk /&i.s@r,_2uǒ_̉ K.aRA,׬$=Ccw> #yZ񛪤k!'!i-go\qbNwͲ|W^bJkg2VG IW ‰hc[A @`fkm4rd$6b#,ij~9:wzC9zXZ%z=DoI(ceʌ̉-\thHeCM˒.^l/-2vɌM?n2:Oxҽs>0xOHˬ K_2h%Kų?{ =[ 7/'j( y o^M[z7<2b˗i g!HwM]q:AP9Hnp Sr_pGЅoq_UQzȔN$rt/$lu& %PԦeLWIEvuZTe-3v X9 IU[pz hOPsbzۆ^rzX%Lb4I?9Bl \7y/wgp ݕ1q䄣/V3tTeY][ g\~]XᎠ^sWy_9: !Uk>eM~CM__X~U4sg5G_t#]EGb6T\MY=Hl4`v9V*VB"*hNeWoey /yB1Z }\2w1[. ~pcǶi5S$bU)ZQX֟%wmcr\B8Kx\&i*^0s3[דe֠ |`4"+Ǯ w"}u_*ve\r.+\ Σbc|sЭJpP=R > "0Jca9=hK/_nȣAF爊,ﰉ~?Țr)P}\ IP0%z@ Ai\qc|/}lj⟰d U/+-*HIJ ՃKvphh [A򪩡[:D\.U;{DKv C/aE3tߋoK@:㗽E֣z^· 0|}D$S^n&6j)J" #.=&5A^SIHiie~Gd( |H8A5^3Պ|;5J>8dg{7NA'VCKa;h9嵵g.?W *żղ gun: Ny)׈'BC,#_5߫uhz;/;kꋹT5~wS|l2>\ nzfmzx\1`BKBڍ{bCo~I]Dֵ3Ov٥VXOVz5a@rKPld]%sw<*(oy\W1W *VOJ%ڪXTTom˞b,T S! p\itUA˲a B/u󵑻Eh>xYBZ,Bh1߭3-lZq~*rK^ʁ/^qI;w>la]X"5Zi6_F.itηD+Y&Œ{DyLJlmWӐQ : ! kiGQ* ZG'mmlqA2X8z&OLDUY4&qmT$fԹ@>xD2NVʃX;˙^L*jfr`?cr#ŧ0A?%e"_fu4o¹e8kjP}m<66.'=J$3ѯ(+L9zPCc:s:ֱ弶a?j p1>t73=x\dS"9.Zϝ߄0#ھνֻi8Q@qIh`ZvYSM#9'A5v0U&C*8dOs)łn4O:c NN{DVY]9Km6hePi:6Vzr@Ԛp;nf"h[аВOlY%+7 kk"K,YHG-Y^_^9B$T=J*y&!ԱNKn=v1b hsGaF1hC}Ce& ƳVMbG:2.h@>y2-Z`*rG YW@2 z0Q9E-7'vqyRh4{{AWs(4 M>^L&d AjBrtH%+kz0Wݏ[?% Y`v@rܡ.B\={+&_\VMbd]׳u] @%^Iys4>5Wij{~f`d8%ݤ叜*2m``krivP"Ig)TiɑA |IbZ:vx+zX+mLf|+ۙ7%*#9%+&x%@Zg\c}Kn wy_@XD/Y7*vvb3RhL(-utMx  0G3s]s[Ӳ^o&@@d6@F ^w8.aC9#5mlE<(dkxkj_cC!'tO̯^ |SaӏF3ůnVVb kw '*qUTvJ1mCIv)l&BvSkݚ]{z~Յәt|Sݐi+cw!5t5Wr\UdzjeɈv9X?0@ L"ڇfTl$-LM΍g 0~%a\h~o<93KO,=nbG(UY0GB< ̗LSE3}{cvcC1<aw2.x ]B\6m5˻zٰg6klgRoz7 }ӕ{u5 R) a<}SEuؽ!%e%!͒Ucz0Ld޿!ȋgB]rBv5&ǥeKnzxr#=\ -[TA&TlQ5ץ5Dd$Jr׮ӨG/-ן K"*KF[@Pe>rYKƷd]Ș{~ ik@߫[CU5HY]7xWfM)oK5~ɷ%`v+T($wqFR:4_WÛ3Pox[tPH$RH:.,$E`ӛ?Y.õ( W[Q4g}h;V5\ކ2CGjb4~װ_AOX%dcm,UiJew/:Ӄ,NjLduWiZ ܺ$ax^`s*]Er܋.WR+N,mt $g{6CŸ$?dj6ʌf'PIglnh]YL}F\f*C'#9*ZuvKfbE⧜)R*7Ƨ'L9/vu3 d8yWI2%rvKZ/Y׬#ִ0uJv :4*ژ7){%K^ E4 t*nfwV4]DR튁o9y y]xZmie5k[2CtZp]&-RAp3!+DO+~/8҈lEIz Rxj\J&]y҃eJFrH;\wQXnO@'v"LE~Nxw%ײ͚R$r%"{ߜX@YԮLELR9c x1kDe=at$iT/xh挌]3{@ C#5C̙qT>bA\]Gj`D:\{Q θC%k*T9[1VT^'~:8M@&TG"kw (~vut^zBFK StNk jI6LxzrU7MfYNP '|L* &/3HkrM4hCse'Jh|":Ԋ'nA'/8l4[w^δ2*i z4bu;)6X04,YCh%`qKt̺̒0s>dQF&+Ngn~gKȺ%]Dwqˉw cp7% l8Zbz!O~4wdZLbuLpwu|C4R!+<%{hKx1VGhሳ'_Vlʑi[cȱil`s+Q.,YX,Y1s#-YTyn,YnKVTf T\ߧ\PKU+xlKR$hv!~ieJ  Gnv]vE9L!i2u)h269f)ysHI=`:6[ud*WKzt[V%Y+.3q0o褘tNּѵ*fekmq ksI~):nU[ܺPZvyUXGd ]^>vkZ@J!aKRθ\ddz QTJrwb~8~8\C|z_ћjBE!gܐڅ3n2ucvW]2^Ѡ_L%0 h7Y+ii5j?쀬mB/Lghjg^x59]AI= ͨќմH,6$ҠmcԩiڔMElfvXut' tS8eyM\#Ϲ[qBnUtsS X\c7RL[kSe٦MtGvN_3~T`հN6:u OKntY/*WAN ׸k{!q!]K pyҊVjOv(<<'yZ ^ ҁ. aj/A㊴̄ LdЇMfb,]^68R,#%ÒB\GJmisOEo~ጻ~fw.wL&\"Z$fxAo й83i&,w3EG1K/> 3j >Y,aZ_u̥ "iD݄^1@UGqx1Č͍/qKU$ǽX.Y׃@ʔ]̤n~fw8 d5mOxAB+i%A]Vf 52II2k Zi0 ֆ8B).Aچb- r%S-R?J;P Vnd-^;"`lɺ p2~0J_8ݯRhBƢu׾b5 F7)&[vum?ne k?V-rEtF=c%M5\P]έ4\2 >zzBkxtP "a7hpf8(cv*\fD rOnyk l@rbXC~i.xX?,Y!Wθ!ab8_ޡjƯFЦB|>+eymn~LÀ/.qӵ#Sߎ9.?􍉳JL+5FU%3O''"'"V^@$UŻҴL~D˵ˬjkcSKZ9zwJܳubȤujg.BrA^oק0v-un0GM@,YpGK%K\GE;3`~e#|Ͳw+*Ixc# 9_ ,0(/.SMrkNbU$B4t"o:~[$~7IHd63ͨʫ-fb#՛i%Kkt9 sά^S׺{SֱJt8lE!DIB’$qK5\WnɊb77d~ٍʁ/~q&d9S-xQj*g"X qR,L@$SPقuUg2#@s5Ý8 -r5˘GUw`_-cɬNOFs@49V$& Ŭ\eL.Ġ^@,t d`vc$ÒE-,@ڎFjT3~qq.v\w8 XM_hfZʏtI^=/;_B›$kU.IґA? ;(}h7@P3{^9,H龥 Vp8TX1=P1jwn}3< C|{FN#^~{)kXIV3.@h\̏ I7m|(ѱ|hQ'DS=!"L.jFa{E<`bQpC o ]&˼A%'5 Q zUj`]]%#bG9_ʄD]Nj3#މFZVYyTZlXVV|͝W5}kx´LSbQV[6Mh0׼*ʗw`[zrzͯ^y̗I,Y?_O\b o;Ϝ_>Ϳڽ_#t,䈺q#+daQخju@ZvpK;\ש0VVkP=H1NHj 2k*)8MVV4ӂgvJz̘)6s"&ʆBF($ %T;އ3(Q V=SAQi38-rd \e+G4mvmll^4X!,sPÚuduf6w6+&"Lc_-uGrf\y+&fgm&+u1_r~H iۊ?fV0)瘩tѨVFC IdUʧx%D:#GF{dCG/*V/QgfM\}LlVq*Mkz:h%V v[t+[)aΗC,eMKHp`mL-8ЮE/9֘ `.˦'/*7+&e©)KVUՒ?s.]G zj7^1Z<'9x+-y\Z2*mwa@~c qcPA,iLJ(WI뵠v^ >۬|%C2Xʒ IDAT2.\~g0h r<\2wˬ΃(13ERӜkYİczK:UOM̝5=&V$U&N?nc1b]*._r\׌7Y@X9)l 9lfBU-ۉ$_;Tyjג6tK_ѽݯDpb[M6T,ٻhq0ȩ lV b?nO 3=Mfkv3= /z"=*s؇لXT0|M̒徇~g$7K9Ѯa!>nU^3tiqr2VRֶR/.hmqe<3tC]$Wά_$5sjGr%ە_%Msͯ>]K몢jN ZxȠ|L=_1[7L+=eP"DLt)fKdTv/V&% r֞V2تCτ~1Z]^Y:$KW @-[otSp_4"aq_3F8:&9DcNiZ(YI;/hAJw}J~oUb\SI T7uaⶇ۸fkNo8|d_ -YlɊQx,;ª-o{SHx'w>Org\XY*nCWN-4|Sux7p}7D2v,5-~ANѴ˜Zռ^wlw2aiLʝD9yA9a.8sٌ P}\bWNE۽=1s,`[ס^J"&qky~᠞R~1O N*7aju)/amyե!-ȹh]P|XQ3- [ui)ͪZl*0Jt*=sV.|~uKq % tLHHD1mALC,vaHnG~[dPj4ɤywD I dslKd4MW5˺~UiȀs_n)uNP D2eCeǜ0 [eAT p ,B$hڛWņ7%j]R 9EU*fL)w5Ԡ"SjYՈTbYZQ-\,Px!~I½JlsՃj*-q}ХD8sj% bڮj;]eԒYhs-i'Fza w1}Wlؠ Vgٸi/ZxQ ^hur\L*ɰdrL7<%VmYﮋ\> $ کoc튁p,ߘo5&ϵ4jPuG@6 h5[E X2̄g5چlj5/,]&#! du"9:[Hn%˦uaBl @-.0QZw#wPcc.pOW>#D3_MY#v.RPeVO&G>OXY(q[+J]`x)ˆjܥM.Z-0 TQ~?+,nֶhKR0#^3-ܕdCS@*P#5+[. B+u NiYuԳK݄WU Q=욶KM@hW XOYG%P+0Ao(%Q#z& gܐvc$wʒgzsWP1eDjJPַ:SIJbg<_X:.\65nۦ^7=zzBn5[/[1)jZ=vπ;tO?yl jб/qW駽72+˫)4a3"[9-j6d4n6La%_ߴ?1b\Lk3/Ӑ+;N;U;J. ѷ7}#cev[Y`"x楺wH. ߮k,%0WLZ惩߷ijpyc},guw~]%<*n~ G;=5m3zEwݾQvĩcsO9vsNϟ*|yT9䈺 =K-aZ}ط=O<F "nj]&_m 3#9#14ǭzPBzZ=h]Z%kq9 .}_l|-璬e@Kq;XW+aˇwmⶠozfĊkox0KǏ:sM2Zv6Vr˛i_:We7kLUBlhZe^Noh6yTL(%!u&FnLB^wiB M5>0I˿!9rf͒b&ժ[L-)V뚱 E)3vE(@'FKZ,Yp KT 7O q&" LNϬ^mo W׶cU׭n֢O<>wكEAY!4"h0-zv9:1eQe*J'd8K͈c3#H}-.64YЌW%3bUu%"`+i4d QṘI$'q@쵫S tc<.qӵ#m,8㲯@Zp¾'%ǗɫH뒼vmot!fr{ny?pكǟa/qSݯ񤋋j~HP#j6y<%m&,ՀJ fbru K!VL+Dc5!@?7JH+ed׶HI"+8W~r+ZcGIﺏ}zaLk4)K Ʌ̶My[6_u)_=_vfϯ@*+̴uĴ͆ClXsZAV9b#.KT:&ԗxнPusfSYX̭D`voѴh*we V&Uu&:ZHDa-lJ&VŞS "kH sۊGIJ2W,Y GŇZ g8G ȫqUswl~5gBF{Ӄwz?O<{EW]9۠丒H6sz))jc"jKh7N;Yژ\2_Z;ⶬ6bXLg3(I%82 ‡!8qC/*z2RpssfJ[mmITղB"_Hf w%8'/  iq3nvi% $.Hy5R}P-L\|Hf]Ղ]F˺TRp_kƯ^sMQcA<;=4"\.6Ǡ΄j\fM8Acڎ\Xh g\dXFMPSxY ?$WGyv[7/[1ɬʼn:w;pÏ0?6Ylr%lؾuot{3V']~6(9n~3kx*(3q +stY aW]rUxʪ0N*7bFs%)k"2nyz[6Qq ~1Z;i珴h%h/!MgBҢUJ /DoPsn־!5J7uqî&㷎֞v^ӌ5"6ũq&PxtϒEqx\f6#4ْZ weS~/_.WG69MIPGf?:w2ǭ~/{/sՖlXukm]n֝ںS?s}ܡRwpU749jfgZW8gV aBX.iIgUHB_=2SAMXY^k :d\\#ͺlUK1;Aw``V*V5nЧ%űJ"Ƽ|k|$rb83q,[U%UJjU&[Oܱ9W.ā lw;euÑdmq{Ȥ ԈZ,Y#qJBr\f](Õ&)bYgܛΝg-ۗfqL~>>w8/fۦktM{çwgϡ coߺ4;XnӜ׍J,f\rb$3:Tqf=LpXk< TF9ق: M*CIs$DCK%*rӮK3=:3zoW7PVFsG7]XJ tG%K,Y)g\[և>K#/|a34}hE_Ͳ/{Hylz[cu;n5oǿ Wl.vhy).T,¤9hYVwA\WnzH &Us OODZ, |wwY(Z^ AaOa 4qCRv7q"9.MhziWC' 6"-ɿ}۽ݫlၻٶᮺ}'m.vIITjϬ*<+X;lZ4>2m]%.f/19!&ά]Rb *4w@lyx/C_yȱL_8фo,HMN-΂Lk\iiŨϴe: W"hj,R]EwA&<3I9_?T9I-ݻʕe!Ve\j"T?²q RI{.:i557.Og=t@ffpeH@,ϊQn]r$׭Dž;Bv̈́K}HjgO2]v4_|i,e qQ/4>]r`II]UȤz[,^kZ^T첩joo&,T [a- ʍTdTq}r e$è7.򒙨GJf];y3_.F*Z k Owpƥ⾧_7Mog:^n|݅{nvm<Xr;M<`Lwd^Y FT{XFJzOzn n.s*qsa`rhBCz^$ê"];efu #sܘ qy"u͹`=`:7@wݳdgqY5g\ ^[mwq=OƑ/x\nJG}z#13߾svvՁ丼4"we1Sq6t|"]3漧j.ƒI(U.f/I+īEh[Vw8p\;L%h\`$hWnC G/&q\GLmU@;f$/Zfؒ13^p;\ {xaUoݫ6ܡ^#wrQj\h Y+o^p\f4ye}mDE&1S3V;Ӹ-HDjl-o\ ~_$:FBbqz-LPZS$SG{a$j B& B#m!:[nU7&wxߛ.U׺WWNgJ9x*╤*27^1^B gMVLrOr$$٘ҠWv5I% cxvl듒l.גjkWfZo K/ t1Ox\Hf&oEE IDAT/sϿ[)ƿW^+&N[P4\ &ƆQGoQ8#?'jӐri]#o-QX֮ڥkw3+֐K^SIPSI:MW:v"5"m}4 ]`S0"Olc_9hđ \Uf*-p@[y>2Z^=p^69!,YY̙}f̒X@PeD |;jCb;?߇Rp)E(ʵLgÛs)g>$Gh f\XZvZzר# 7kFKfM;AW~p .I3tCFڀpe46P| /Tx,Y +wv?~7o(ܽ)M56Ҿ/^s&~i3.,YK0+CaNUlz33/;=5?t̮q!6wh#o=bBCwxq Տ3a V L|fSC+]X ~n67N8pF6!Xo4MyVn Vֺf[fypl3]2_R\ܙٯz։~ToHabֈ\f\_@h^(m:Z5 3]._sP_-d=> 6gv^o"dlm2~ q"2i/&:3;O1xw5m'qT=w>l{×,*C&fHOQLAօh*?Y(-$n0J&Rz׎P¥}Ѝks楔b#c1 xOfi5 eJ֘B; 7UyKdcFDNhBWykHn⡙FX=hC(/fEubZH-ȌG.~:566Vt-Nzo#>sR'@A6G,YAfWyy銃K@rAx\vx)_v5{Oz}h8WcǶ/ܶWo|nB`%67Q/͓!!wA-!Eԥ' ߳ZM ˙-LV/-\!IMu\ZV|aߘ=*6h\oT[9U(Z^P`%RUȬ4c%2q^0nvRUvК2t"\b5f冪 * MCRi»h>hQ[zT[?rACϒj?"pA)E^;oO.%޶Cǒ,UADտs@4h`MCk_zhyi0+<.9 ^U*kAt][!xWreMhB"OpXOCmŔ UR qULϬx lؾd]Y@PedBRl9O< 'Mq/¶=3~YݯL_qb`z%^WuVކP.3ℶ_,JDp<ݭ WcdGMÖ.i7|h򞈊 ~?6t25sAumԤccc@gZ -s t͊.|XU5u A]L.W< Nh^`3j*S`SSQJ.ss3M5S+ogB]:yh2) >:GKʽ!fOzr7>oKnziqfd5aՖ ز~#-yH]_2m`PHvYd}վ o$aߤ.w[es置GG~_1 g\ݠ*}m7Bf\?_ [Zvw{/f a-|H6ںY4ym9^Wh'N_q~qْ#w?;;7W6]FX$e"H+}#h"^~,EY9*)@wu+!f\CQM+Z(L`Rmb2I N40#&?0q@8Zr6_Usw]}ed3?<:L ҃}> Mo:=_1W]u=UFr\&k v79n7}կ??i<A3)뾰;wwौL 2&7Mn}*fse4lr$rseq1CV"cZJ6GDdt5-u=J8Ldes:44K4+)xT5Te3ytYH@ٽ5/’5\שVdz^fۦXKYW|,Y|*"ЪqKo}'vJڒZKǬse"fdBP,ͺk}Vu[Xa:'|n+|DջX|?`>"HR=s?8Lv+A+c"Z@0Oڪ!;qctpƜH6'&T|Րm=P=\(ZgcdA?c΁_%0@YLHSP~ۍeӓ7zi㳻Q3_r|)E~vŨ13'|1Wm)ͺvYS67\es9 ^LTQ5SmGCX+-eaPl Y; rk]Q*S -oOf`vk-1?ڰX"9]֛*\%{R5Ya/ %՗UCw, \"U0 M`0PhՒXZ:p cաDcޢY)udh wẎmAZeuAݟkk5p+{^c+Ko;6޵ooTw|,W+d u7* @PrOkc(ۣ+?fM)ҁ֫?}']1:T2vJEzcײTf02~!O콚j%jS tg?GɢT%#Ŕ\˽Ve D5#PPWq*M@A=537Db 5R zU2fx+zhwl[=ҭmd5Ez0>nೈhwöKݯoZ[r\1F*yM%gv/9n1PF!N@2uJhZj4mu* $Jҡz&ZmsD[i9ɹwf!}az Os?s,NnCL_V49l(S 'a:?DCt. A;k\5C?&<+FȾ:K>ƒE^EXEtDž;1ct n^-J]oˁ8c1W]Dy\?S%~d _VVqIzW6!N {ՈѡbXf2QgG5M5W\xvIm91Vٽr tD$SʀK K;6wz0V`K+ 22B9Ti?6\$VOP5M0Z-T1yI eTKYCv5J;NV\9A87r4ݺ[+!{(Xwc&V.rǑX `.V`lT1ՄUXAܜ1Ij`gֈ%Ղ7[2XbdMK wيIOEJtߋhWrxK+kV_hxavZd]ՠ(2pAK5AumfйH8>A*A?j7:Xzd~TK  }J?Bꐃ%$A7VBMACkN7;NFSTZ1J°rKr;gɢkɒ0c}[+&x`Ыq q m=y̶~XO䌻_]լAh;Ior;fWWr 5rECUN-)6aU߳e{+4]qqy@'ahAzv(VbDa|5_qZh3Gˡ;jLP@ Z]:,X~Ut]rRfI&qv#(Sb FѶe30R"jEPdq-̵ˍDJKs.5iA솀 wJWj%3hNvα{A,%]|D(hPJĚ AJU& Jow&/P4/AJTZ_ 7TF'GSݘnY Z,‰ AMwY(λS]x4ϒE^<`ZD9:ZZ[θCWaZi١U"sG87;tՖ f|9uf'VnnͶM޶ϯvX -ѶLXMګu6=[3nϿuûZgn84*U`]buC@ '<_ S2 驠0p/bG% "S^x j?VpkqSo .;$.^͙W .lGܕ[6${-YF lV}{3*"9"z~xɐHQWC֗3|| 񰾅1-,z#s.'JO@>ԱJ~ާ (;" 9fmWGM7?_IJz𣾨c˟\<,ƒEʋh t^m/,  Q7ZqclZgUk[_rܲ{nY㖐Qz/ 2%5٠8U[28ni42叡 Kl&Ř|-H &}sMϤInzuV),̬IDG?ua9UCBh>zZUJGxYWܜ=x63]X.`Nm`s'׭>$,Y Z K)bيɻ{pݖ~k+JC;1=uχ{)E|70$D2U. Arji&'L6GLu̥WK9zNF j7o xZ|va+VIX1k8M%e. j3y;  '42p8-Z{YVFuWǖuY(J2OkLhj*DϬ:dUu 0ܕpB%g.?5p:qq+"ns猪'xU%n`>+ECx/ԇyƝrhwN9< AC،+7a{ٮoЛ8%7;1= Dž3EM2t] f(Z0WT3I|#1e-@"[D̡SqUwmBۮb| w:G{4 U+;&{q8{qowV%{ے[vU6?i.U6?;+cn-Y1FV;)aes)-)E:*i %ta E&.èذ_TB)sM%$«JGׁ!PXr&jI(~"q룀X0ӂ&lTDBou-050')I ζXmo+դ7f[FKVo}OVo/x%|o7롍jx׶Mo 5;G~erj؆>pa/~^'$<..]6&|Md2ϰ2IǧPfTs*q,^=6jAИkJQrx UW9>u]9̭ Ja>bbD ב.sysj;/D߽Pefu{ZaUT^Nir%\9֎^oJ39=*'D{hj,Ju7ZjU SŒ<.=s_}R*F.(cq]W<5ǥ+&7<ݳdŐU"h3YWo]r\٫G,x\V$ǝErܐv~M[]0O&;e3ɕ-Ɖ(Pix -!-EmaUeĹf<~7fʌ؄SZx L7ݘAQ~fи֔ZIY뜒 %mҼP=Uo9 ϹJʡ['] I x?z |Э]r8}#5+M_%J#Ԙ7Fg#ږ49 pĩ'Zq8ۧlylΰda}j{ %bRzG19.- ?7MO&out_˳"(77|+BDB[M5ۑ0R&T&hqdVi\ko. l)|ZۃQۋTAw4դu`&3.0jEk,p AjM` ReٝCw0C{G?l$d]UB*w|>T&N9jzfd$h @6 \19.as{m;}`v힋ChFr܍v&?ۿxn q4T9LUMmӬU/ƋM%*UP5V3ݳj. UKr A s=爭 0R#v(3R'ٗ~zO蛸`Z8^nwȃr {" 2=z|5JT5_Vt 97~vrmZ@1%P3ĸ&˘ѽV0wr,1XĉD^@ NHljs=UIfnu 龞kIfj ߙTCs'76&ȝU T b<*xn"jX-ErW;O>.@J!o~- gaiǿG. }>r2w5k㚌 -Bǖ`ʄxhkˑ'FNt2>T>\/Q,9muJE$%wy@w4y^ v 9z F19|8Rm:XiٻF,x܂}0 4TNq$*7ΒWM!B0r-)bGA97'gw Z߼{ܦJ/cR8MDImFR4}b]_<)q¨o A]ZgF ٱna_-F(*P$ Ñ ОZ$ "!1ojX,7kC6TǤ4*ih ׎tĘM^MN: 2i]Ŷ)3ۤ\5\qAOV 7a˺UZ+7B\钺hy@Hų~˲z~_/7/Վb_y慑=^@\-j0nMCݝ6߹F81pޯSq:;4}UYX$Kegp9w#|-B\=FgQwHk8J 1F2}-`7,ʆMk 63J܊ɴnd䗿#DKJ2PVxHu<0kըYƑ-eÁx,ƵKi($ Jr@ $~'t=|׎{=+߹bw}/TB֯ʥ–;kY'q/MS?2QpR@ ͠û(@]Zdd7&XUNqh\;Ьu`Ȩ9Jb"Cr9%^p1q+?T%YMD:VʻZ}0޺驝^rR7ɎA'N# 3Cc?x+eDE"j,eEZL;Tbm N`_y sS=(dLpQTEՙ&,MZiᅑ"R0B҂q]@<RB8;^$HM Ȟ߻RS_??z~xl0&HҊaaKc枵u͍FOL<.lEq%m.ASu8:U< a7^b=e[%jj5<;*clؘu{;8ZgyKìm #E*Z2. T.1U$DJ`cOB@&Jt &NFM~ @W~“>gJ 7}-tJk2y(?.*9N@("( ㈬(<7]c|ǥ{{Xsl%]T–Ɩuoݴմ數ou02˜ɖ}QBĊE4:.ͱլ!b8n-n$*׏fU%~tv Nf*a n U\kG[qȻ,5&-q  %Y x\v [ۺV}hǽ+i}5+7ٰcϽrp% Gv~DZE08ViH!'w >֣XGWHY"o_Pݗ`q]R LG{kx r >\Nʅ_KDA๵H> 1^Ǖ xN}rKi. *~/wPHՊB*,Cf@<.T@ =QNb}ypGo^]Y+#N|pdtqMkwYW{K[6[3(q-֟/r"Ģ/T{A]ξ/c@) CEC;D;Tb\QYxẹrqZ^ap\{h[?Fa) 5/8SB5J(s~wHk -Q** G /"%O!iS!swnٸjFWtw>Ɖ37'qHut-оk-kku!$n9`+@ZG캱(U[9}4:b"λbSW'ϥkJi|W;G +F a8lt Ę5} /%U IDATʹ,qR\45+ lU ;ZnNY'lqf%mݶ-?\Q);w ɗ0+nTM+Nk{@| U䴸߳Y L|i@NߩHNǥ`\_'WW<@(دQ Ҭxq]֙\y7J3G^9sd Z@0zo'$.u&g>dF|t\yE|d juQb䈍Ca.6"e%uNN DϪ˶ S;b`ajt170%/u8E 0̋Ŝ_->iѓhAkȎE|j,[< iע6H1fUSLa AQq9C!&JfWϕ{vsB ᅓ*򥦧]@uVd72M[\hHT`0.e'EL>(^Oݏַ4q;׸PK;Z^K)|qjG^Bb[K:ۖnζ[Vc1}bⅾ}<}q^Xsx\ y3-ɻۊsZ"EYFe.5u)0L1 jcWcE$qzܤM]EIa%bg ߹bD*605VxїxFfzGhb K&ɪLʁ@ Y-S?}CC;׾w=KFu[_;#f7&?lٴ~4ַ4-۰jaK–Fmc{8t|0^%7ߢ; _^ dFMJ@Oԓ3l'nYHC#SKK ]$`֟ـB$&M}=  U10Q*E[ π*ŐHƝ̈)(D2XgD:ՍKq !p+OY,ޜyaXz֍^y* 8f7«ό\9sdC{F5 uK:J [^n3 ѱ_y ýU(q@o6aT/ lvJ7&UZbh V110>Orhp_FʻÚ 2 +tә(&µVI;Rh v: LFml5eb3~M2- x}qƢL!ER2ۄ_ ̓ۿ5YxYmۼ;Ɖ3OJׇ.Jv,)ZtPwm!K{An:{y=Pc' *Ɛi5\asi9 q*S5EC1@R!Zz$k=6(' L TK$;-ƪ@O@ a͒AHM7a:%au/{Cg΀!ѩXZKZk 9%i3P@؟Yºy,n1^n=b^OfE%iC]$c xKCznVgbrPv_hw!ᮒh)!F %b+8ȑczO8FƜtM£`qaMC@<j'@  x ciË%a~q蟋Z4ZCF١ g89ƚuCyX2M&ïEz.)p 8h,3 ώ ƽ]ΚSNJ.41g±9#Xx悉w7M҉;T 6ZOWVk|;7IZpSFKQK_ OVkvvi+^5#[B]8TUOJVPG M5>+X!ѕ/42,ZͪnkWzxM\أkԑn}Q7W3:).CHq5,fT / ndkePutF,߃:1(k%,} $<NE䋤2~Uy-0 1'5`3LΘyHNqN١A3.qA,")`<.0ž,q ҳ~C`Ֆ76sΈ_K_+)g]"LY q $Q"n09vy\AZ ^B.y[̪?Mw5T~)&sҽϥ@i _V5\eek E\Br|5ˬg\Fo-A+ wZd$-΀m!qd*8z;`q@[J\`Pf97@  IqkkۻVr_97 `\h+uQS~Bb`K13)W-4am*O ;/r9Y{ 7ULUaTu >c1#8r[B0ç*'a`E64Rd?jr$@>։tҔb^edLnm> +)N5|d6pAT;٬% ߀YxrEae8,$ @ E~߷{ KXmz6d*~Y(d86jZ@/Q8t8H!;>%up`GCX%=M_Pa9ZM=1QiqL<.@ *A_ohVn^s疍8dbq\ӣ]{^P" a:y1C&1jXt[OF:dNcϛ}Zݹ%Ok\Fإ<^8+k^Zbl/I&lb 3*!<`'[r/?.j^ܲCϓ^y0 uovSGxaa T9d_*K SRdîvJS~lT*;ھƮUZqa^k7в%'Dbc%OTTƯ%lbk]A#3UAU GPFċV呇Tڌp;.p^ـGAn+S'f}\d&`G}Qҏ=҃ûwxLpkתݼq|~(@q4˿;_w~X "G_Y=nӃTITfEy_ϷT9l}]cU"H|]UDCZ9i7Θ҆ɲZyuX9;œufh̝uOgG`qij]_4M\0ũ4' 1G$.@  ZҎO>]#WGI㪎m{?qÕ jG]<~+!rKъ7e '1ه"'kA֦2 jǚrgB>OLwTԊuݻ~ q/p lkJr'RJaVJ</HB\` W 8zfh;?o]77\ZıOШ H8nQQ,@  M8jQxdeZǝ7⸥R>!@웗q) #9c/&u+IKFYCU2 , 4t8Z_CpJ z[1)]j Q~)"t~"t4k,H Sݸ1Տ!6g@I*yd ҎcJ,Qx\ hZx\@ T2QGuFv~jn6}nއq#'ZPqy}~{x"HEI,{)*(2/ApGTVfCf皻ڛNmc/izqY̅Džǵy lq\h\;qɓ!@ Qû~kmF7+zݽBVE8@`bX~}XIeDw3G8ϪcӣW kbV{ѵ'ˮi$\hj2: Dzy`0.xX%7+ȯM KESvk[޺~սw~ uɩX!{8ζk Y}z)˺kluA*lWޛt5pf$ǭXLxOrySDv^פ M2r{ܕI[@M g$3{1Xܰ_:% UQ NFw]*L $qzqBSh!ħԽ@{lZ, rI ydYũm5:`eǒ"./JH\Ҵn~c]fuL jev{T!Ƙ|$$.pE"l|yX Fif{a!c|01E+r8"Qղtb:݈|c1)<9QkrGZ>}/=$[tǶ|oM__G7nh?deslE(YFpd79:*Wb6=Hݼr"s:fHV쮞t&pkQ6ڋvA6 ATG SDxE+!/L9OHuw׏ō.BǼ@8=zpϯX+xyp;ؗ㒎%8!!LXvnQi/|wUvyI;(2dQ0.bT*£-1e'F.MN=ݻ{ktVYB=OEugbfkiwH~u~=:p}.0^.9!ﮅgQQG;hcD dp]zDe,P(#Xͳ$eY']=TU {ƙ>,cI-8o̮Xͤ}E q-X%V}Fx\ , ~ !˨({|#wmۼwQ5]mv~ dx\ ]ѳnMzv{{v\Z_$ȈYIG2џf>L#_8Hz/́JabGy"ȣrsxt O {ktLT 'Nbjbu1|{#撢G+qeAOzЗx\#8C_ݸ t/@Hiǵ>Q+~dg5/ȮwܿgF^ss'5nJnM+]h=v۸ѓ?zޣdbPU_aͺ1&Z 'Lq"r4,z\Ztרi]8ٽ ~'Lȣrs3ljE×U gg* d AM2Z×b_zyEx}8q%79`m&̢`֯sG:{Y^W-_#S38l:n)oZ$ u+z֭rwc*!hl+}/M C#wSVvq̷!ҽ85F68q {[kaѻV8!woZ$t*0ËO zΖe=\.71dBʳ"½9񵋽Ƌ/噀Q/uhkYLJH`w7U@Ot][zkת5;uYlhM}mǃt#U6=jņpnQPeQZ%Hb<)ӌQVZ=Yh! ¹NB4G}#K{I[*tZ=S gJr?UwX?xA4zal}֦ nJ/*9>7qزa51Sq}3cڥU sY4J߾~uc?2a|qR W/B$1w( 8!Sa\֪{J;;0zea}{`ҟZߺ",@ l޾$`K>X_ 򪷈{‡$950WGWSWlaoX՚Z+ :/3m,uhDdU C̒ +FI}sčK`Y%O\D`Tr0l_=nlvK.͍ 1 ٣cN0>1=6qa !ߛ:j64ԹN ;K*I CIMokjaד=_c(#pޗ8фÞv#Fk8jz˘Bx7x!|L@BURҨMLJLc,ฯ!_ίh};ۋityNo8@ʎ`& T˓E<./p;o\RԶ4wJM ͣr-D Y1ׇF>P}ǖm=k[m+骰uIGkKZi݋Q˱W.͝-5 uY+4^ 6UY45sj]Pa˜ LPq Sbv ˆcǝ?{{4Եvi 鲈wKR|ũsG|'[BfE`+N}}R*wF /Yَ_W cha\h|eo yt !kfZ0]]\.OucLUwA]x,Fh=o"Kw:܉x'p'2lJqhdr1T)*-r:?#x[ឬ>!]qԷ0^~i(Jk[{,jwkIY#?:JWlce)lnUkiz$rU c۷,C/>m6f|v~H.+ͷA0 X(Cs.>mh I`LZ FT"KRu3[Gf|PcJvʧQAqŏKqcntکgɓE BT4xɪcfol[{\q `ç'O˸O%;?2fUQ҅Qg97‚-lzqw^m@qaJlLǂya`R 4Nn^'B'T~FC)2B*<ؠ$YVҝ nK B Ɓ(EIi?-3BKڇQT)SųSŦsoH{ݥ&ܵV]|ie'A,S_DEfU.wnV1<1z(5i-"aUg7y8.rPJ<_[S3' _dC}RiyW w/YVl1 {@E߲hTF6|=^WxώOPTwW_A~JD v~E bvGI 2\CUI 'bp}R0_Z}!|Xp|*g7l$#˔Q.]{F L#Iekj[i 4_GSm5Ke%$w Fǒ"x oZż#Aȓ `\Qq~L{Y뛜q @YHv[_~mp\nTZv%Wbvt?ִZ(gh):|)-^R"%ǥ`}qƽ:+}b".$7/ B%BA*ߪPHА$X(f`vS 2ҧ89b'",};Y `!sn\kp*#e1c.jYKE%Y+ \Jik/~':(}Fyk6/iHn!=NB@H ~v-X%IY'.ODζ u﹡ы2x{C6=`bp( #_D-wJ%ͥ`\)ëc݂XYKhGHAn1u*.F7A2xz6ࣤۜ:SIHvٿTbBKrNش+G{ݹEo$TY =lp ҝH^(vO\, '67E:#>X#SIO\t/23xA<.(BǍмcyi_83dm"jM `60Pw,HZ;ZwtӇz~9:[td'͏l~}bb:hAC}w*Dds+ufc{\{p8TOǝ5tt#؅ZJzz-:)Xm>^!u%8Rs jE_*qVi0W`!fxjXTU.Mjl 0/gN /w)jl޻;a ]OIb C\@D,0!UՎuKn%-PuI2f G{S3*CZ57"qnM t"̓%zR8Ckvv\.s3vL# X/@(:Żn\~MF-߱kW<+YӲ>tp_ :D?QY$#Kȍ~(H("ѴnX_|v7oWqI G_";U1{g+%<` L=2DR,3ؘ S9xU`8^Lw*U0kbmr @{ B> -Чw2o!9#)PػL|#'A4!ki^'w8.(Bz>DF>.As 7lq/X޼fQKV7v}j4qpxJrcٸ)[3㧟kΛg 'HVOFH\ǾXY^>S";>3zr͸` eWBP1,VŞUc-?$nBp,2Gu JT]oL8!؝]/݈'࢜q]=Adu$qa@ T rgj_w}|fJMEStGo7҂.F$cU@鄝'Xaw\䁌A t&OC:Ki%$r,Er0 I2P_!1OiUeW8KxV9r ӘG.Cm^>)k2J.[Pk͝7ZҴy^Ul}?FQ=Y{2L/KEu]^1K{7%ETxkr.5{cs㲞IJqa.4ICE "$WTӘʅ4ţ$NE]6"Z ʥrY^Wk5_yʦe67;ZZw0:mQתwbؓvPiJPTlR嚆wmx֍K:Zt!xL /LEyM>, BQT7¦LR~K4mPf[!W;%{-`\@Z(7Yh* 7' _@b2.cy9H "pCV?gN`e; ;{O@)1{-JŠ]{7KEUp '2ѥ1RQ}]?pF㪮rF]u{ ;;UGd؏EBumH=ݐ2PBfi:%XNlRѷ,Wlݮ $'!.B;~U og~x7yQnSTZqܚ츷{T $O=O!I\H`1;;+R*A \>K/= ?L< iTr0.jt;o\7B1߃)ZnjY$]IgOĔ&=k+ZY~bAqrmچxH,1תMg n;ᦝXxMK)/B&U^޵ŚZy}}{BĽ TLԾ蓌@ "*Ǎp׮Ϝ{}h?PqfȾwJ!/1nlij1顷t̠ c3K\v);1w}֞~D;<]>Ck553y:~SGcpYTlq\͎@ 4zalF=Yv('ō\aip˕G7@ F 7-"jko}92񸲣/K(0TlR tS}okkP#ϼ^5w$9RLhZ}AJ;"ypd6?(5٩s\.&V%(KId6tvv653*c pSsH pq^@\tq )g0F aOM{J%Ker:$21fwwX5 u,hGpbh߾<}񚛦b=Y{/+O~Auh_Ʀ/qىag,,rV7u`J%Ϡ,)ނz\ugGtVqp M*:9vޤt\ AR7~CJj^NΉn nïА)kȎkRZz{GOSQz7 n!Ś[_[byܓ# -GaT\,^6UYS@ QH pjL%~tq~Wm[65uG+Qz譩_>- 3Q~E^ڽ#Q*?R!E_.U_MEX_@NEwfa5uY8Y<$!Y>oDBk8%s}]V"vKTL@!Q @ٗ2[<ʗ~]6GBef~+_~mp)مtq+8z Odd.\6=YL=O E(k}_ M:їv+CgƖ}ButR: `\U|XF;(h8q2:%k%ügg5 Kylj!bVX,dnޮfY2!A'_,VukբR,`G, mmO9q{]4estnmTRѝ߹mwm?:;8J.YHz2|,qD=*#'SK1Vaæ A89LQq(^k@F &N2'%= qH!Ŀpyf|4?`+r%31! Z}n'f6wqKGweӤiylFRq\d %@ /2f_?rl/=:7}O~-=kA]_ RzCr,[lc{?u顖-~s=Ҳ~Mme=Qz譩_>-%AV:ŲF4`k%]f;+ ^1zy"3PT|fĴ ]EQkcj1O{v>"eQZ@7d8nͪ?(%UfA7 $83T;!5meGhݙd#q5]}5>4:'1,67~|3[ڵʑ{~hC kn& xbO.kí[V jsǑqJ~-,.˻LIZd܈UeೞਊƤB4C|ftNR3#+5L.ORL{iԼ S,iS4 8LaM4b}mJW6,΢ȭA=Y35 uqU& mRTH)IN'"Aːnu%EESH07|qrz.Fe]~s̜͠y2wT4ԹGRݟbs}m exchTɹ~MKPZ7 %OhĆ' Cm: &ˢ;`Lؖ Ǫa4K.o:Bq4|e!L^,qݑ uw\3ߝ_,HVtE^otQ aF @K+[A(ɏ[`œUP׾ḿ'؎T qbuIK0(=)0@ xbQO .gέ`r&~)'Iҧ&*)C74޶c_Ŷ~]{wlUdGŞ \!2kWrkZkkOD?GdǿDҎ\*)#SzH-LG*ϝvmҴrx@Xgnಊs)'2g@S7;b e SG2.[- h( XتAaep N vg,^>R!γMg9`ybNeH6˃Iv \,8.V2%UX{~{4[Kv=FJYWVbq\^lԋ++Ru}߶O|};>HZW5v6w߳g 6e˦ږLǽ.D-Zj{j* '@+PђvOb!zcto|r<םszŝ2t `Y@V2) 5?ע-[Ո0_>5pHھCVX*$ .Ƒ5Q^O;a3Va]|yJjuSql ?oN2RP IDAT$T{Ջ3]lV~bIM _$ Lx9Z@{qho lf mGUIC\c!N|%U.]q/dD[WBr-%;hE@  \Af#sf.ӽ}KS3O?|Qa{XX3'&& K^・?ĕyh#FH}o[=|cKcSG0X4#cK˪ )VuR=wz \6v~.-i6]+6T'HxD3 %]~1A+MJ3`$)ҋemEquUv{c9,e殾V͂>ܥ"gOn(lj13ɭU mxM*4 @jWewpGApф48 Mtε'kY*b8JVq)@2>Ԣ}.RY_g/P@=׍gI(*i U'g7Xpj쉈.#n\pa$Ӷcv' ח cu86_䷿3җ{xNLw8*rw4DE*g+l=*jx}H :]gk1q\/4@=侒[zt?1lƏ 4Fěi(sfmddJ(XIr+@;Y$qMO'"tus۷lT*ҵ*=wd#O!h@o]K-7t,^݆O_dZF #]ow$uq$ΪXE47ʿmIyd`+e1!*6ؗΒ2rcl;Qy}݃*ZȾt([jcGAۅ{'T %)lמ54@paEm@/YdY` e7O0edOV8֓x\$0`KzjK.׈]=S=s@(_xԭߋӿ?>__v;wta،bl6?"-U~/Mx9-3ts*<[BYUs(WP wʚH7aw-B##ɻ#Z= G Tf@;(,ݶpXrR/*icBl B-Wk S *}iqyI0Vx\ ƝߗzL$  k:SCQ[67u߲A4118<3>qW\l7Q&7?ۙEMU~/ZƑEW6|h7ܲ Nu}cOrQL&u8/ϥ}1[Gi06qr LuF&K#hc S_FMU)Lz"HP]j L.Ճ{ 4j8jzI3Hs;Bv`}qƥ^$gD <"wo^>g?K޴,<&FOO=?tQwk=WG{dsorwT_;#8r< ooiiɆEWoQcr9pdגKw# v&}U}GL/^TF'%$xNzluʨfa)}F,TP܏_!^nx{9mTw 袿?"1CL}bdE⺀x\M!ٷ~<R74}'ЭnXXx7h0 *Ypfz^P@ lad%ZRh$w@A㦲S^ EsLA,Osc!"޼X!\EH wJ#J1]X{ v^ DTSSYVA&ƗcXI.^* OTHHg݃;gP eze[RvcʎDoJ&ȲĞD˞LM&v0)y]e"5(dٵZ w'ЎHG -[P"A #&s}u`_=ѷOy=ypBn [ ,,\zd0 EqJeٿ7̩iii%ɜQ.`NHixɾ߷NŔPjwڮήgc^84{ĨBѧr[޼Ѩ_,[Fg&6~a~R# NuQa3;ChrOhS(̥bqʾh2C@&ͭwj@Jh]'mT/ |߳+#ɥ1Kv5x EPNr黚P"pVk}7Eb6j] Ye5TֽƏi͋Jt.$pYk/^j }@ J ~:0Ξ+2K\߳}uu_wYG{ζ`sFcGG'˻ںgxud"w3tKlU ۻ)j[2iw<0##&k}QYq0/%6W8D pVk 1v1gydMmiD~cQ89V% 0#-4Tn 4ڣږȃ?ײvbU#}+_O0ăH r;؛4N7$%ס-ؐq}I.ƒURT@ J ml;s=<_PE~Ѩ.kPġuCz`aAtmZUA6Y[T Cd+92e_OchpwW $QI^ze* .U;rT = ~;W3"--g9ߘrI`> Ӥ?C؜]fdUtVIK^QYEݩ6}aww.!^\QD4wii% c>}:L P1崢8S-eF)GJ# lצWD[t)Sq̰~&{Rqms VYRq܋:K<ń#ȡêo&M cc[_0?[K>&܊~PN -UPkn&5X~LZ!H͆A':FZ})+|jE[Ua~7|h0‘$U|,*!:XnCIl%.6!m^Hv}! ᙎC-* N4I/ix-wZ;Z''pX#IIc]H"dQ8 q $t$.񸁀3EM|;EL_.9]BP/㢏¨{hxO$\ &V*d`ꫲ.ZȄE+u?#_gڙmWtݒ1cQ4f"t/z8˿Ae%r}F.{.c:m)ڻ5;r+ D<\ցF \{V/NyZzP!K,T+Z[ _T@ `ؖߋ6Dtڰ\~IRcb8r)S.Ѣȝ/]fw"\'BCA 5y}vO({#r+$&.\^ ֎v$dnqiw\j,.X{t0KT6Y"=Tӆ,YmKfɢ`d!H|eDl.@ P lϼݹyiM KگoK/.rIxe0ұ ꨙL#<uBx<ТW |B@Fr$Ɓ%6j^ DI]W #*tLJ"h'6_RH dQ0.T@2"x\о.]B+W*]A (9Q0Xۙշ%-دC[]uܖdLQ7_3e~q99iT.,',yShļtjao આa:H"AJf#ZE:I\'KMMqJQIl)Gpbq=ݓL^b73R7v!do^e)֑U-(4]`ĆMY,킓YFLJ_ _`=WŹH}0 Uzh3s KTR[duOcHZq@C6ts e~j`~_$wa`s:iYk 9/i᱃hUJ]&b$ ?ݑT }$SQl3^'YNM:'mʅCsIGI F({dtBe+?tPqAo w67Kq]1D/(X×%?7bm'~s_5/zOMuEZZZa ᨒaءbh*\Č%.̢6]^8*ҽ[$vVQŘ# 9tqU%+ Hkɲ*ǭ-i゗>`X5(2@6^@(5TA=5=΁C[B.MPv_m WzZA_z݃ 4'sqC5~Y*P;N#abnv)T s;°s#hjT.LS op!6 =#j\X!6SuwH4 m<ܹ,djl 6tIbɂ$SRe_Ǎbl.r[=@GBhinW sI>+8;6_ȴ̌G oeiʢj3CPa*>0.>[GBhM;*s0!blu[阭YNmQiH"҇(AbKSe,# hE%-9qEJ%;_i+F)#] `aU@p(Z|@&2}j`\q`\z]J'![ZʪB> .x>]JP:TFG^lexޡ;7_-mw^9{ttb~zfazD)ׇ$I]_7n$I0֎nXbú]WXH. c}IGe9X57NVmd IDATɴ4Ga(8U8Z U#17DIIq%" c_u-;Rt*H;5 .%) (J\RؿA|k 4XQU.z )ϧ 2M-K x\H\q 05XL@ Ts.s9ͭsX/x?)6{p9ˡӟ͎7owI uxbOR167{ÃwgZe{R7أ\q׋(~p$u; !nD+Έ,t-zqAIH-tHۡ!;VӄÑPng ̡"[i=1GwtK7%T:m`4RYNlt!"*Q1t$.>%=ΎF {@ T %qAz~ԫ mH=2ٶ5Pmk:oyCO>=fiS~5es;s>xyzމzgȾ鸡~-(_'8{&\2^5ޮ [©yJkjɋXӬlB]6%tg"3XhX, v#9w%VK.܀X[ɁwSQnI0H}UJFTgv iCx؈nǷ ,J,AfZxKm8.t5[ɒբXFмHO|ؘ7KPT?!ҡՙ߹C6 N8) !߳s/Zq)}k#oo=cS[ݹzw0m{+|n~ ~A\x 2jM e솄^! ώ§yȓ-AG_)J8HA8L$"smZ{tt{m-{7_9J|_ 6W֕m[յS{&ۿʅ䖲8v_5V-}(NӫŨ3Y:p?Z _nAmC 湝 :Tr.)Vvj\M,V{   -U|pf!F#bȠb-9+6/#-*B:{bApۻ^sFns/D0 mu N>jqlnJ~;ۮe&~NOOtWOM6JjM-ImM83I̦; GW+3^!% w.,0T[1[5l|ƚ[NuW K:B3JڝʞT[ 3H9Ӈ IY?!AVn>f3/Esυ} =s_#7BW57G{ѫlD[7 ﱯ,όwwYݽo}GQro)q o|b!Yu}b?|pg^yz])sC}$} Tㆉꚶ 9+bp,ُt5slwGv]^^-Ќ~gs۝Vus]9{@Pk ]=wö0x*rDžtpPs8B$RPRTOMF~[w~|Viz>o߾6{eLE87ΑWwӇ{;׵R3gXcú~ ~=V܌LϞ?}p)b6[Re ^TXPK3_(gG #Ņ& ӯ;,D*a 9sS8vBim̭*f3hsqXב]HY\H4m:?0|G >|x xCQդ߿u%i ÔW< MbQiq\V}l痮߼ϭ|I&mm?5b5CB_QG6ue 5qϷ0&Iy_a7ũ7=56yrlrqn_),bvS ޕm$UlQͦm1;khzG*u^ZI,vpoΟy!:OO-mm*[! ,prM0++}]\/ c+Yu\pmvLQ/-:*8 hˆw뭤rC{iD!F/85,:mS(?}_3 bۅ陣7GKY3taqx{Ц]~[;;7˩7=F{IN>*/!,aSz)\bTrG0F<1qɋH+i[Y7c^Sd. rxDr?V/L##4o|b[R=^)ӅtVL̍Ɲ6AzF+)ϩҫ,  nIR|:md6.#6 M9*Ӓe 7]cɲUAy\e, XDSاB UvekH3nLQK *&U⭽?CfV?ps`UBnB_G;`T:?!Ee+867T4o?ꎧ;=-*\-r7I٧,i~k"$b+\)Oјp8RQ2r- buinKsX8QR8yµ~L kHءUZZZ4=?$#.O'k`=pfOә/[{'0WCCeDoOyݝ_rKc_unOkI?5>ufzقqYx|yy]o0Qio6oW q|R]:t*y9L߹]fʢk`M6&n*7ͱ,r$;zϷ:ޓ4+۴3ZMٕ FprpDpS}Iw㗎ݞ5lBp!A{ B 44"ZXd[fG\H,͝Ĩs8ӧPZm2dՀ`E;^h8fU5:\qGoܺw۝V Ƨس !qMk]YZ+cq\/b=}qBXv Myzݖ{||jazؤNڞ;1w@{q}IN9VKF&xx@ HTkϽ6܆mw޴u l[{7N7B 8qjgO,Ɵj77esWnaYaݩ/+"@ʤOh!hfjЈeyەZwPi!9Q|q*Z FeE kR ;Z` {װL0-ݎ\-5;JpZJnKw%d;%_̴_貎+;G>F%*kKVKfCP@aε%@AYv|oܺO芜މliX龜:Zyk6{Mxsx*Ir w$I>_d(2p26 J1s"RӢwpzbmn%׃XTƒf WF8XÑ.(1 iAI ͧnܺr9E&IrxOfN̎8> -$M~VEow"U#~#r9P n:FW ^=J\,YJ;uR:qPhUI Gs#h1AVPj ДIOcLZͽM?/2Uio|/ScG8CW?s}}P]CB֒Ux81}Mg{w*.֋aƭ[_qŶ+73ΧߖWGSuA3X8r)S•8WvXٝt5TM6_‥AYkIb1F\@YC A>3-u͵E|J3cK\/91mɚ?4+ٲ;GLE-ERrǭl{@/~Wo޸jq]P1KFPHN*3 kgXeN&bXQ&]4 x?הsRlT&4 sSϭqŲmni$If<;z`n|ԂݘC)תCFNM8% }oG~u~'?uЧ.tly_WvT8:͎,]\D^l*JZK G5TvR*ӨXH@u7Eri-;`+ĮGH͆D^>y,De˽÷m} 3̀U62Ŀ;ZjDfp>`vJSltSvrTk`]-F' j/~F]:8n-Yr) [ۚ-\KvKq\Q$K%+|)x\SH߽>:e$X~۝'>vA+VZcЭ*O Ź ң)BQ]?M9ocņLB~0I}& Rh B3=Q6 VhH -`I ^gG11h]|Q O;| 8,pvyFt] [̊(O%-XfNp7OܮYߓU;U_ٯQ0 2sO mnƞ[WX! dX҅CgN;7?7>9p6-J彏|Autǁ;0 b%䋷#?66T2w,s$x?A;(r>HqȍCE 0<#DhKFrK)4P #χr z$c~Zn"%t.? 2>׊*f$F t*u,.\Dn2`ۥR{W"^ٟM[pCVmMZ3Iٽ/ˌu?$q F \Z^ɒ4VlဲOP=Q,O K`\3ye/N7Cۚζ5:¡م3gΗڝ{<076N%KJy&Iމׇ؈-:ɱ}JltǏ엮ު>udY;ʮbTGuaB-n֎b 1/Ǒtͅ1\, AJ}6rEV~(F8`#Ɨ+zGXh|bMa5k;@- .3R͌"bHnZt>11 SK_aw_{y10o 'g7#_+;*QyA<]Cݲ֑^v C T`9ݮl쵨 #w$f$InNN?tov͟>imk.Vx]Ѿ_~qDRR̋u`_bgW^[3ylKziBp$k5=9PV¬z mW<X\>lԢֈ鲒d?!ۅ`?Ϻ/6K?=5—o;O4#oxw*m񎽎px(`6 /Vum4_6UwV?3ڛZ;Z&$I>=/q($7?t$9P0.`v ْUj'h$~pwT]T`0kؤiHx F=В$VlXM96zdxLmMwK\V/WzqsSRkI^'%вWoUCp*'# c(t,Pm#rM?71uftH'#I E T 3'G=#Fqg{:*鲈^\CN^px^YxK"I&V-]D&-HMޭb:qu:fv.zuT"qg:l;*Kea^;`M.#go'j,뭽3{_lI]߲u%ٹFrq m[W^VHT7g1rd5b!/М(r:yqB{K9 :o8C")υx\R(Y=@E9moM0Dή(X !*`޳Vj#v-;6G˹_K q/ xFɹxS;z Fdg1dp"b Jl{=UutǏK@KY0._7ɗ])p>Vo]QHm}a!@x PEV\(?6rxKr=(uyCC#gM-GYM+]<=+Tzsڢdsl?#̨`DR0n>[LQ1KV)Y؄liE8Ok V(P{|lI3f]i5ܲ4.hb7ũפT0o$Ԓ731@6t/!bNB*hTD73Q$CEf!D~naFnO*|fj2Zidn'Ā֍^]RxDoRҬ%_sˮm]z|hma2xsxU }nU1KBh``|1|Q¹Y "Ņ1ev/u_׶cúe++׽KGT[,>L(4!N&ױW4RQ<5<ۣ f+k&Ir·TVO kEKJFbCs˄^tz*ch-dʖ2vh Nc;93x!ct3@膘Yz5b `P--KM/Jc=5@B^ٿw~IztʶO ޗ_zoO'VBm]'{`gqxO9 K(^!Zi㲀{;.LbSaAUE[fqSo}K,O 66.hr}מK}rlrvwF|~S疏m|kvdё}2eG9f~KjhA/ĄFfbEZD:4*v)r-zr+n7QL-`\LofԮ<{}|=8g ES H[4hŸ&x yD% 7bU1` ]`2BK)i妆KD&I9w~c秆az9CTE]SJ̢bگO>_lnRrXQ7|ЦXiW ݺމWǔ^uÃwu񱆙^=/yܟre~Q(ڗ[lxC0X8'gA*(Z y] '+6뛊+nDjHdυQ4祩%Ks{gF̍ItA,Y#In2dJc"E/eg©߬]s t CX"ְ~OMj ͕JX=/ӳ;=| mZX$+{~뙿82?87f'UiBn E@ Vk1m96 a)Z :&(3ii̴HjF2䲨D~V;gFqL )͠"]ko_[;;7q}Fw^$gO,=ΆV>de%aq5v se0xRPp|K?*;{P֙! VWҾ)[<4\%M-#l7x -*$k?BX$ŧ GG!#JBgR8e: S(qh"TɱIŌ hg޹Ճ}|WmMmG/=ɅmWe԰1k 9ʔЍ"Dl:uX n,g=hdݯU R]i-ߗw!E<+/r%sedxSHU8i-F*ە >+ BGؗ1 bԯ[g?xV;neBl}= MPmucf < \2k4\br| k/E=.WhP՝tc/Rl45ZkGu@ K.؀ #W+kML x}emNӆ"%j8i/JqT29o*Zn^9l9@x+ՆDQ |"d~znC]>%-&xr|TCQq-p?0dK |ݐ E}zzFz3k6qSl[5C<_L^\ =ӪRz;'$T.PY=;&ұe]OPAN suV؝WSnd%/f(T3x+,(nuv-u}~K\Lm ] JOfb.QrztlY5sK Ձ٥{>C&=)K܏QW,af-9$C3R,Ϳ3zXsoz $ǼB)W\$߼OHN+J':'uZeUe[;t-}.\z鷛r*1w`VQ>(2qSĘ`fe+Vy5_C OKAyfz +620ǕYhM2[ _`cIv/IS1auYmr;KxHMxrD* 9G܄-@2/Gg}MYb+m~qw2M \"7i(`F1N<9dU-Y?hvƮ޶5R*Ēz'qmCx\6$J~ye}B";~1ꑮ#ţ֝j$7#{zzvoݰn;kͦx_f =w'=2'-)rЧ>c7ź0ŭX3Bg^^I]~9F!JBSkTtEU@~w [_+=_ 0aL]}d+k) McK[xd$]+^y-AqSpj8dqshKYj8Ʀ T&~ ۟~996yoǻu-]oQ}F3r85>ud٧9J~ =};LzMKb \BMRwIδm@G{4hXH Ksv[ Ik i `aȥsWҎˢXLGҮxKS!%3plNOuzщsN ~6 @[@dɪ*©ǹ[ R '9ty;rcK :[{blr?~\Zvqn=o ihb&Ӻmyw lV˩SSwm?sqH-2.:2"22p҂ļw(´deq?<@/:VZDY^.r+P D{[eOқ."hPV2mνYh%, DGcto89B)^\X՞7.^>)٫W5*^rg:jVi@~RQ=kwΒUFA6/xx\a1lkғ%ZMT$438U~j(p3g^9wD<:fk9i_~ +v ~KgaQgӻvHy\sGG|m]k{ q~z?盋' WѯU2%Xi-krGQg3R,gqӉP&^PRH޿sj%#:wdin,ij&{}ar m"{.>E6Pyɸ-$]6B"bj' (L{$ͮ~/CʃB KL;ZԣZ XQ1KW5zzrTOro\HA0"ׁ?U`!;fgUhAɰBNM{&ix8.G`Şo;G4≅Ww<5oʸ~{f-+Qq"V K?5>~ ?/vq IDATiLLoFl*x۸hg%gHYLThw"[+K>7/[%*!nZ;ZIjj xp`JbRw/H.~M7[Ve슉zZ!FoF(n(d1C`\F2 XJ=@R;GE1ۘsE/+k-2Q]=k!yņuң'dȦU 9arpQ!{ k(u@^pa-AtrZĭ=z> ;9\11r4ɻ9Ӈ!x5J\JQ;V@,< dE[׶[ q5vʃdqßBA;*7eѴqe򼌪$Iޫeɪ&^CRI2?5$43 78˘c:nJ1Yc(Ʉ: {A{Qe;O,35 ך1@pkDMeɪ%K&~YG?/%UօudY%Y gɲ>JMj(0lҒ `hPk~8wB>Sɪ&bu[Xk~`hϼ4j)ZR; 9bI׍K)nNuGqGkps䙧g{ٯn'$q]FK.\Sv LKY[_Te8g# sTb6(O0~Qd6 `nlHLmuV.㙃o%t7>{Ŷ,>W(>Iqs%~9Sk]@WൈѲg8} V>2lSʱVX)IښTV$a*c|nY,G|_%;_%ìs *He[1WY,0%mebfHY1]nnF" GiGu²m/:jPi2Ǿ|r|dQA7ɡ-xM4-@(Aq!]Ɠ(Nfh5C{pj\YNI +Z0F (w .C\ 32sʁC Ui\/䠄k!;gÀ3P|'DNTwnfp-)mɾJMj}-2MPH1p~vp_)y8y6!' 4Ud*67>r͖[mFs6<%_.,O "AmTq~LϨzg.8.<*k rTx|K0.vZh1&)E3ݘ]b4! F-j;k xQְ0y cbq}OAxv.0l# 33p9X.gDeu-ɣVy_oG"5Ht`_kOVW*d{BZ@n^k8\&dX]Ww=翞xmm2鷹,Y! Ybq;Yee߹L&F!oВ"^\B7ś{y{dx Tפ߲j,&q 5Ehy! .G7g>pIB>>KkJ dfl<7lʑVYÄkCၣ^vm;LJ Яٹ/oy~e+nvM<}hvP.l@^# #d\]a[e:d"<~XT7 kP0nc[_~V׺S'&^y-˻޻t~G9:%U6:dO+B,eغZ[i: 5;^$J.S\BjeQ"?oxs;ΰ 2?06MUX5ؿA؅1[Ou q[#?nĨ^`,"q+[4L@~ۂ:~yqE9:ɡkxܲ0ri*cE􂊭F)jsG}j4Qz]eOa㸨l=rV4R.t/l)pq,6_w ,Y ':}uu[xeS9mwU|pK&w*t u iOr)3XU2ͥY;N5o;28$َS ijk8)IK6L0=Αv$IնR,l˰:?܏D:%Mp:v2{^W}SqK:0=0=sKdFh*qYKby]v\yyaʗuhx\/b)l4Nב2X8Sr(\yŚ!JF((P,bPR^^in~.~c_"Er_޾ޣ6A5MW.D9r%sFQ~ڸ<C`Dk7޹h,kTF̭[ΰ q~ b:16i4ڎsjHT| |Gxv͝'Fm x\Bn\ / reYd 490wi :cq\N %/Yu}qBѤǧQ5HÑɁ`OVmUWXqyÀ)H͟Bzs/x8݇_5;;>D] :KJ_Po+iy1]BJkD!``{̐O olµ$R9S2pYuh7%ݝy9e_~ a:>zp'n %YąX%D/ #v:o /&1߆~ڂ )חdq3Gc~UѓKh!qZ ި_@M%@펊vo[#=_v<nnąUE[}2\< YjGh˺/EspU'K <ĻXml9~g:BMN1$ R4RD0^)xlL*3FG-N,=&ݫ@T[GVn5Dj /f<Gr!sM[G-GUyĨzW]2J70>YYeŀ.. ֎Y Y;k`qT87|S8Bc<,Y,|+zOOZ-ZݹxbG~L ,<%ʙK<.!Fhk+!&0RʟL  K<J?Z +Ԧ8kPck -.3ӆGP-}U ^ӲR9S_g4l.!pL ܙ0\@U آ9pr  CȒeo~F5#cq\ ,YBziCP{?[xx2[KImHi/)?Z.|oh !8&ދz.(+[^z{!~qW.`8#H|C7Kew˩|yxd %UKi|I%H\ WFVcDh- B~ѝR0/ɤfbƬb 8\0E$(3FQSha:B}J U̧*sa@XT7Щ@ò[QW'߬aVE:TD}b"#* 2mu*OfOSw Xk݉Rx*9#6Y474UL.=m. G,YV-YXa,YK GZ"lU:YD4K1bs@G9?6@+q+ngo.h^#=ꈢZ%-iX m@~گm^׍*Ct">$F`T*0rZX6g cy.j$Q``Z'D<RN@0MjT1h4Qjy\V8X1W.pS;(|H">]:;TE>ؕdR:E0х}1[pP=sXs*,Y$S8Bd}[Dnv\t "4QPo=r_ƃqM%׋X~YG#~ZX@G#O#-t$!^1pD(v0r5 %XVmGZ$TҢLËW}3Rqa~DK .O<&KIdQ0.d".ؗ;_y{U !F6ʰhȘx#|,$x#i&~)כd~/ZsMbL|0F$M|Fmr>e0_C.ј>9*1sAZkU}igKќ˒ì \XZe`K}xZ^<0EfuQ_ 0B]$= CxӰSs Z٭uÃ=d}DIR1}7gSf^:L,tK2Y2G MGV$* ʻN *88.Vk> $EwJگ/ɕ~)E:L;T&VO\_LkEG /LMm^e B(B`{JuCK*,Y$`ɢ`\_Fu wC Z ~urpVBdccsEAqH1~)@2i^R0n ~'+\| pH<<}|I ,E>{T78.rTͶ7R&*I((-2*ϵr].0r~={QFi2Q/ 2 FϕN,k3ɻ޽~K,/b)l4rKV$?o9EQ*3ѪR9`0|6:2=vKq]Œ+H?;v;#Sz6 2S00)PO:3b~tChC39;mY-tUtN5ku$ ,Ulb:t%bԵ(e%#S^Y"mYL8KX3l"&+rQlm[aPʽc,ysx{Nko⸀ "A_kk"8rMQ疥+x*۹4[zTšR&A{@HBTu.#1|.אcb+ VPkR(ͪs(OHe!.oE,nd#g73妐z63\VKEↇ<+ k&K+-ȝ|.a5nKঐCqe㒹enXBW-Nɒؐq}I&KV&h)^YX @h5y瘨GYHgbEP~s~yazG2o2rdhߦra$헗F`\Uaf;/T (l9 # C ȚRThp ͉l_0t Ii9dr QA0+XlЊųvpŴ#|u½BդT~.CrT@=!5tsU)~V6G,ad9},Y(2#l,% 5x=GdP Bl XAa;  @r%Y_u7D\hR+Yh` r<tke(=} FYΉɥGpҧhʌggk:feOdtȳz ="Tku^E$NDrnQS|I;xT:MnU{@[R]ECz8~naU "Z\qM~Hj)=S"ںb|ct.wS&U f_d;.X}᧭>1m)/T7l$ٝ @ Bnm*OdLavȕՈ=ft j֗[K @2i^Ēۀ߳-K/>#}d .`K>#E+ϙǹ2UGy|*@8#?kU ? .J.h%㮈UiRY.48ά73-Jp +Tc-FlGhx-p" w*Ut Riݵv-\sjb1Z`C!.hE}JvƙٕPlrl#^iQ"G~ҥ%|Rv'Ԥ 8 nf_Be+|ӛ' ]V( EAׂqwiS+3 rO[$r0,Ѥ`Eȿo{ËQ%ƌtuPKw՘\MׄRLIx`[39Qghݑ6,YĊ>Z%-%@C"Ep;(C,8ݕ"xL@' tT Rƍ'\kk+ <OX~9~ϊǒbOX4Q|9ʬ"v&/v\`t:~j~iw~ {93XmQ=SWюQUv±#\.X>~/M]H{J,SGiX!QƩjە莬fԙ-B) Os,tB\eۦ(oKBTqyϢ 'U^@9M_Kkp^T[ڊ`0ÁKrz_K_Kz7^| {( a͙ 0昞3̧.bf EhBLWA)9Ȓێ(gK(įdxQJ@[K':FeQTIJ'򷨟/3ӓEg:DEDH4+*uV#<R:b$iI]Zx[+XiNQP4 ^ay@,$'KQ:䓍=7:!RU]93۝',q(fX^,ImYrk<˗k $Xtt+ӿ )lj#m0mEJV(6p7]SkoѐQ5Y rR2k qM-3 8|'\vV(K+Pfw΍p^T,~OokqrWmmt=>^r"f]~,g])WjQftQW`C 8]Cf"EMU1u:BuMq>m4rsB#/pCAa+ʳEc]Jg[6*ZZ;~"k7{7edЩէ繀Ζq ?x\[f0 cO',wy]@Q_+ ;MGŹr7GoWͿZPd@E>[v:`Sn g]^٢NqS1ΈE+nMlF-lʕMY =wu峴6efh'Zu23LߠHYVr !.V%moh,zue_o2e-Yרr_rMV 5kQb輤7W $w`oE}l9G_ʱ.Ǎ&F~&OE}Y5PrfG@|Ҙ͔(IғmF:V4?y2):[xؔ|yJUC˰ٔ˦\)$0F\@S2^?8m?5JI&2>.id=/Ka6  / AvK){DhlZ¿?뢲.<*/˗㦔r$MߞN2`0jl\~ԍ#z#dTwe_I/^ܔ338pVRT=-޺i-)7-)N6f@0_ T@g))7Iwp)Ft']{([OLnB hʅwFJpܔ~ ޞ_*ڼD5-k)~ CCkhE7U"ͻFXXI\YTiK|zko&K`ʬZ IDATkifQ62 q܏NtL``Y]w׎>HYf c^ShB)$UXFJh,GF"fiթtrt<@LK,!?}0~1"0n,7>9D%f3nXK 8@,H4;"-9[<ğhv}"4#^ J$nbLkэUR72R0ZR_iViI[sv[9čW)y};n^׃97j̚P;MeF\EJ/,,֟`0"'휾%/.ޮ宒~مQâ'_ =J5o]blpkEGǞCЭh>32>uӿ_+RGY}rmt(`Ōlq(M8[?Y{{rv:i׵ZɲhչGkCNdE~/mڿqT.`0hh@jeע]Fɲ (qүH_KWOg??ax1Ѡ1Ҋ , PO۹Q(TT.1¡ }QXgVϦ\Δ1!.jlSOS.'IxДVXSDmʥsn=JX+S F \Ě9U6m)@gZTErw{GP9t+*1?'?-.ۥme oK u̚,4YQ^~bO{_X ^aS.`0F,-W}ۿyj7}8_+uo׏2K"e_v O6˗:)2ʖ7]1x'RNIP2p)ȏNEcf`Sn6`S.r{]]`@(O2 bw%;]uaa$N.@: %K,E$7v6Y90<`e>e%oEWZ?~ߡ: }'O|k߉}}}J')HRe*M0G<2@_5םSO_m'}Q{.Y۹H `Vs<{kķ~wJ'|&`C$D1 _r_@XҢ/rB_c13O$#mK}r%xh7hG]}QzÌÛNP NKuןJ-UÒ,[Xr,=_ԏ[?_Ԓ'g39씺#n)*hCG-`g0(|i7XمziR6@És+M(rw9ȳ :᛺b:C{.HV VȒ;Vnx"M_4֊OO`Pr SA@R"hc>RبsT.<ٹicʕcD#ܺ1XPe$2@ U `D̶GGT^JQ\f Ւ8lE ~Qn.ѸyYʌ#:Dn= hP^" B׀3.t z e1jI 5Xy!5*-oxE, I )~PCq(qb)ԝOu)$quTY!' yh*ɐuqƌr_u5f 64SB+s'7@#sZD3Y ϧ36l,ݧQ {%;%=-nq{ƳA,ު#ʋѓx~g*n >#6ҊG=^h߸U`SA8 e&V ag0 ̄Rǽ`#x#ߡSFyZ(:brps1|7Vܮ| lVKO9`L^lZ̠(GBgW /a2`+PR~*:"JC7s%};"B)DZO2U2J>[1&gt7Bű& ` %"*muPhСl-rNqK Ё2Dx*VyZDȲԔR :G) sP!SJ0BqCvq.-D<LGXjХ Q@$Xk5SH~Ks 2`a{ˏ Syb Wl,Pk~M Cahu Ү3K5K@zc2}jMj%u sPgU.NӶlF/4E]:lv{p0 %]" .x"ĝ'FO(jF"\QZX8hpl[9\.5J*9 l$WCfu B9ldaټ*%S%ZēB^i(6iGڃ+t'{YJ\nO8hQ DsIpaVn{mc=``) !zAHt8V%q 'Pv0Ha&+6ҿYk ;#ko2[3FrJ@AdS_je;SVbtw olu`@  3:[ G1 !O|أlk9Ps>X;RS#1$(= F7A>|d0 ]_g\(Z)-O#1"bJetw{f8h+=R? Y5ab9N$ckk؄D?I=&Uϭ/V[8Q6 Zrv8-*΋q!ēbVki[5V ǖl@14Vqڐl{6a?M))jq/#  S AӲH(w]!n>AA9fG?ic4JR-MP2Aٙ GbI,8g[-08GEײ~t'Ti@&ڟ%Ѻaߣ,9a~:e `0 %m"*ӂ$wy[EDD "?pp+';[Q$ wE*<*ćVg:eJӺ^;<2 Yr˱ #GⵕFk'Y3tlfɢ6StB}B`VAvt{0:|ep}#K*D9I9Lct9vࠛݳ+k0iLgH ͈o3qaJs =OFOD>.`dd?< 7ِLtl(P!zd'rk:*m7N80lKi³ .8}AV,fs}T2*2P47gNӳ :zH٨~\s`0f'2YCP`-DVdR2ꙤZՊUPu g+#HJ;5ɀ`ن(-Yj˯{>Ee.IkG_I'zUb?vK )ȧk.Y!/?3-\D`+[MI -I8wkToDTwJe1o n6:.+c7d ձQ:nH.$ Ԯ1Ϗ.;A]-ݒsyȧ%Gr?(K="eaH#QV̝`0zAVFJdfl@͒TTG8]ҨH+ P`I:-ֺ J#VN>TDqXtc0HwnM Ŕb6qTqʝʔbtBWu&PvM<}h(<< FUr냜Ss(]6CHF<9 'CHG/[`,Bq̥)]xێX)miS/И|)ҖBLDHaQ]">q; !^`0zV[Mqv `0)]LX yۉ 9_ndn5 uR LX3=`6[IC^^+<51-c0]G&3dA!b<#L&ObPW`rCf@" z >g 3y;2k (> 16{É2< l)Vbch2iܙy纑Ln:]sb]e^`0 FE8t\2G+~`yebEEb EAAEW2 4'29$/]B9(>bػ Af&L48Tz%Be""[3=C1 03?w ?Iʊ ѳ(=߼as:Ó7i3.a+Y]IM[6ʈ\)՜Mdd`0EuNx["sHzJ‡Q9O (+lxw#1llNiq.B|pvʦukR(GK¬H)㼭aPKzI AʾLLq#t<#]TWo[iMJLlȘfJQ4i|(q9w3O}.@Ԡv#`0:rO6ꑠ<5 <ڪ(:Sʠ^$(@T:=&X2κv*?@q”*>A7D ^VSD:XeT\C >S2ny?K*}:VEӐ8tD{;C>ۗ|two|1IoӰNu6ol +iX"zz8,J"FOtLu9jΛTR nCDXRJ>|w-urRR, K`9K5\W >r^| K80taxd0=#MD(-++!¨t8a"ɍc(ٰ[BOf;}S Y,>4ǤUsP!ԭVC`0yaQqΖ.pC92#  @rAs=e>B?Ɍ$fɝVi.5"烢_lN\tOea=f0(±/Fֹw,@vB~%<\[Fs AC99zRοǁB0k"İVPb#L }%Pz`&ޜ6^_qL gQ¡^^Z#JzL:mgR| ~Cl%W)9Ҍj/:R'3$<ވJ (-]:ElȓU[i4te`0 텥/x#j9x:3vҍ)%}N:E:J 3/Z8t(:#'V-̇/r`7| }->"A$O._~nH e}RtgwcGw*2 jA^Iբtѥ8Jp{ >2kzNb0nM) #8Klq`t=t =wWYĹLw#nJњN!( 'sP0"V}x/ kY"BUAH-/טA-VH\TxHo\GWH$,Y\˕Xp5-pIbV IDATa)D%o[S[WrGi I%zSOـ?iMn:ʸFA #cHtӸ_5!XY_.u4)+;YNO?tn*YdS*V.[Vw^.hQ]*c0rG'"f<#-RdQ&]d2eE"Ut$9C+)ь?WalT!Ha\Ob˰sIq9tuPqjƩ >OirTU6Gy咣$Ga)m?PШQN2JN-0O\szd}a.B%*7btDeӏaSxe;K]gl(,QԳjYX8&q)A4yFi(;R8(f|Զ"*V|. Sύ ^F"OIaFlpe0 /ҳHxčCx$eA[Dc+M8x`|M t6t٠Tw'-ڸfbAcX*,yen*-`\$|}rWnJ]j{lJ~|g*WnF{w-PhQ8e8Wި8pX]ioŀ 3VăQqsܭxCc02PPj^ 8N.+Tv)LDU |huVbD`2g0؈b-W'vM_701,4Uٸٷ2ĥ@WDTXjۣl}V8_%r=ΊYDY=ڨC%!4R:.9g{`J ( R&Rz\fg(`0 C">r xQ;h1r^էY= 15em{CD'n=Dm!|>|zGIN;qBʳup} Xa0Aiɒ%Ć+:'m(`O8v29d)(})%'M8\.&vOŊXt:0LKaQ^c/z(e0$NjQg$=L˷Z-s#'ɒPŌ;=n<6Jɉ蟫WEeV9tM(g{*?d8gA1 .ޥ*H'n%Qʒ}򚾳!-""!-VGGc0x4S ]:c5[: .ˌ.J^\/ՙ_ w W4I5 Mr0iD[2s[%!ljA%nʐn>RIz5v ?:\ellD9u"Q6+m2Jyй^1]:dd%"COb E`g<>]DV1`0uVpI/ij`0 ޚ'`03(.*x@^ov'f|rHdlGTSɖ~Cp{"sG :JS 1›p yyZgpP{ވ舱ee׹`&(_(JK~q8nVSzs$ҫ=M\AZ=# 0F׃u$zf.R&J ~̌z|[lly%[- scsZ,A.;mجϪ֌׼zd2V\}S7R61nBkPb wp; iezd<}30aDS }`ܶػCKIf⚱Z?ᡢݬPB,H~R<4N'WqJ6pA|LpC,%Y8< aRۆkA..*~2I]"3zEg}m {t~^ge1~Xv`2ptL*AgU-}hu›q5LЖ؄L );VB̜{ӭJ:/R[.͐&ewhcO6BQnhDR#v\ڋtcCYѤX:Pd*.̠,>)էHE:KJ[n G8K!- ͹4Hag> nV*JtsD xfS#Y̪;x]AtĩY7OƊUh7аknw":XQ NHn;s-$N  Eey!3>4SsD;7*6`QZx 2:+fQAq(Xx1z&X My5=KFf FܒeG4`rmKx Θ̷F[+IrTۼ LQsy6BB(>w;`):=K),ʗWm)NwER.7EY: ~e4Br.u(Bq7 Kj́CIylZ?sYfJ?1ҔA JE7.\V'Rfp7.>͛aT)?== f0znΈG[u"VI9Ix0j FAZsָ1R Bi4SSS&''uBwSO4ʣ2).TRe7Qo#a6fW,/,OIr#<6UK.%n8|iӊ+wKeeY!ȀK(BbFZNR4qUj\ g\.m, by[!QY ۝G`+t6tՋ/yl g}w [+bHQ@>QT-Bub]yVI0LꓘYΊ#000pe]}1FgniϞ=w}tt\wvfZvp)m4&'o(lg0e0 ꦑ!,<;`%OF$ɿ~qf@w2 d,пʟsȳSS;J222DW[B1Th+h4Q4u\rI܎bٲe7.ЇtlZ\rC?"GFG3G'x;)=qJ8ڿk8p{K/cW Q,2yѲvn7">`( _YZ3۱ nB)FfZc]OCAS900qF\k֬|k!2`2~_V(b_=aOzw2ERSʸOc,*cc>V__SS###]69] /rD\r%nj-"YsW\qOe.aJK,ɮ1WRw?3ʻ"(X p௣ho W*^"qtJO{<#ߑ\V`Źt׬RtźS'WȯT!K~ H_EtM 3q8q+x믿6 'Kʘ#R'䜓W^jxqnTVgo}{>::d餪LWԻ !!Ȏjwu}@CZsrӈ+ap7]KҽEt^iY()ApWPatFOFv*\|pEH3{Xu#6}[B*J^w_܊G+_~e9 VX~U*pff\Z\0|)֡\>))>LSyk\ɉHʉ**vvEQ\Ogl)8K|Wna[`+7FC'ݕ+y_(kҌQ 0ogq{ Ɲٳgϡck˗/TVqƚ5k`8i.|yzWɲPp kM-\њ/6 ,\84455URpH.@@aNcq d^;8Xt~}[(_WWB97p~k_;|#GVvڲe>[݋\^\Ç7;;ٔ;W8묳VX\#ޢet":hs}`0BaQ-Utr,teENJ<.ԌHAunQV`䉩׺h6# Y+C#ŚnŪzz:gÛxS;T꼭]V < %"tH:V.ݐ?00WqݱG{^vٚ5k 5kqW^qFe|Z`?!5TlJ+)Kjdjj^R$VJ~zxY o6 `)`PwV ђYTUl:4jJ%Pϥ?t)IyP*mSR8;x駧Kw1(70ߛTE|rg>lH;xZ?|TznիW%N7i9rK>Ça}-]Wȉ5}hvvVsBcʨ ZuдR*ոjW;Չ(b+~EAw<s!oN5aͺ]ATR<,< zθ+Ca{@x:֡mJP7LDEz) a,AIEAvZHJܭL-X|9SOn6Ɏ,yE]|E^pwyO1,eJ-yKfs{e)SBbfCA܊ e)Fc˖-9\>qQp8e3 (,6)ڶmrj4## %WGB8 EV)'8Kbc)#%[N*y -|Mz#ss7tc=t+Tޏ{~_zA$-3đ#G-[VX~Hn/}ۥ?Lp|P.9DyFe䇲*` ) (X;JCXMt_##;˰P=;w;kEn Ὰyq?DTC|˗/WC׭{\u<.LKYuДK/vp5 `jȄ&SSSgj]/3:::tRZBXg9:ӄ,~J]<\j K2H!^7dC(AJzw:`02Mw x/CgClBua#Lw}x(%fy0 2'Ʃtpu.idvJ_}5<}Q:;v믿~ǎ>$C*׮8%/\zGbͅG6m ;,,3 5ج!MLLHyml6/595ETb IDAT+W )0=As 'VD;T^ܮTTR>ڑ/r-?qU0.zkہ)_em3s5NA2Z1> PMK  FpƲH_р9Nqu#.QջWeSwHi 2ij I`\HʑH' q_@"JיNY,YЭ7Q.`Fh/\ԝls uÒW/> Brޙ{J hXg0KffSj33*\(`0@RR׋)= LY2Pl(69P#_R%I^F>᾽{oyR1;;K"U!抬}-:%ǡk2Q|LamH8osTr<1ԵSlQnƍBgGdI]LƘ< y{pjvjM[r~i֘SX]x݃Qn,M)xam1U&]̉2V?rb^V0j]+^Q"'K[41hͽꪫȞTyߺu؃_SҥKWXMcsQ.Ik)͇V }ЕzNvM[{l+lC43^^.%sB),re`Q˥;F 78v-q:w%7gn)J>Y Po=" KMn 3Krʄ&O77Ѯޕ;UȻr&*7ROOO{vJ4xs Pfb-mRY~:9]6{"o@j[r/B7N;M|>00P߾\saR ޒ{}{&G=]_~yvvV2mDD+=]ҕ m 5*VR^xL1!SnDlK fuZ1xft4F,] cٔ A׈"3(c'- y ~g&_E0;!Zja:k.:xb+@ڕV!}:p{9H8`D zYfժU7pݻ/^|e]~UOڵ{GT&-Vׯ_vUVf{jjj]f3)vpvliqhpp <{Ӊn/ưNOOڽ{rN@tjV;)Fzzr.8 ˗,߯ܤb׻ڪUS>j~hhpUɝ;fRr=q6D=𦺤.gVCCCɌkjjr~v1 `1pFD0<,j4@V Ðz.f0 Fg!$ IYUf]5Q7mڔ!>HV'B]Tڰam%D(:& Bxb%j"̯Zx.뛙ٵk#۷CWWn'>3P\~e_pAJSOٳ;tMh1r(]nZk_>1) N99yg>3P~bv{YgI~k؞<(r.ܗo&J>DxOteʒ ucnMƾZ#7xL a0F]覷xvШQ C5~^ҌXAẊrľe{*t-1t ɥux^Z6}; ҝd1ݩxQw>Ǝ@t>\jgnI{- T*%']я&t|vRY?4~hhͣspM x} j 嵃# Û6mYk0=.GI,~;鶖HPfAt .] ZћG$ ۃ)()91c.Q>\f |DJ 9RSkfM7߬#[Tڄ6|;P+ʗk׎*#`fsNKPViYzZ}[;8W> /o9P9Y)&Ll }) -#Zm$NRl[^"ס ΰ##=x0`0  w#FC.IfFQ_xZ0K P*._/`58ԅCC,ׯk|(f\~V߯#L?(W*B)>g􅮺? 0Is{nǯ}v%?Ò֭[z<1q.0*Kǐ 6e#m&ᶏ?Q'f.ќsN^Yф=>|'?  p ֭3y饗l).TfvvVjAʕ&r_E-ījql]H|"Vb+|Őn(dJϬ" +B{hC8YA`]Ya+I|o m3ċ:DX4r[;nx'S3Pۼy3^ 6̓I 츱Cmi-lz&v,8c)Q6yHz&JN z!I1G `t+SXV7tp=5}vaTy<yɭܲ{Uvfy-w'ӊJF43kŕI吏qxXӹidM-{jjƍ'-^sU13yfWqyj5lnٲ]gƍw9M)N_VضMX2G^o>ZMZ9s>0`=6*i@i^?Vph¡SuMFj L8k֮ER!xꩧnۺ[ݱ#)u֭{Szr}Z`I-0erq}g b΂[sC(uR 2k>Y`0kݒP94`-xWSa,DʉԢܸ+ NcG|"F@Ubyagr5 1͠ DEX(KPR(Cq bE%0DB H2.S7oX$JHdHJz%biBx1q1YA%-?c*PBb? 3v*%_w#<|m뇆twuݵ׊&|/\熟sƶMLL+ڵkrrrddfיg*IB% MOOoܸqg"i]RlĮ]HoI']9M,ȷ[xrrrtdDbl<6nܨ *ǜlBjrk]}>}OLF<^eGjNTⓉAM0lJ%Hs'&$f0 +!ksG\^:VU^VXJe˖m 87Df42puN(^byf(f߿PhZIxK^O$>J: _cނT{Ͽ/9=Y8o{>zhM|qСC.K.ᓟL ֭[lٲ KjRJ&[<K0$[y'X{/vGT)5V *t:4\Iِ6g$T^KWI uZeVz(yt)u]P;p(ԮHMOXKy0BF=[o"P}ϋlnۢK snו~W|64Y.}qˀNY!@p Q){Ͽ;ڹf9`ff枻Tq׮]G$GҚk.93d9Vk R5:2|&wI=GF@pcJX;8{krrƍ:_iͅnD-[-nyd JxԔz]TqE\wk׮].$._/)[nݱcx{pV'觟~'O}JF+_ ('/"Ό1 _מy晏}cʌʧvZ}lGիWٳS J÷3͇OY⑊ Ėl,]^,]"Dn xJl=!D|9]-x)t<;Wfm #u(NP76sαV8@ǎǐ]~dѸk*o̴߮6Ȁ-ccH6=11XCge׹ukhbB3T〱R($y5NV/Ȕ啦\uh)FBueё[bP*4c+u l h]?`0E@lSaxJk۶mJI-oقqS~Z(˄txÆ ғ:bMp72GpQ2*a5x#ԓO>l6>f .lVV<FCV~VjD'_>esҞ')ΠQCPLDML$q/+N̦`dPW t#p0+I52iT '$/:`0C DerRjVI&" m4PЁ^X)S*$OO>J#f3W|X^uPBʦźD;1 ARjʼF((7Ipc-ǯHlM$ bBD_*VQk1TK4Q(&k ya>dEMz8t=oSbnn\s֭\ru~)ܑ+W| MN)KeC*}ua_~Yא@AL ׽xaV+\B_JWJO{-(FRyHjFw-##!֩]HW2{D5kCa2Q4_!d:^t.m(;ԲݒGZXKIt һ˥9ЖN )YgGK]hۇ:e9S)Qʐv MSn lF#@wx8# &T-Z?/J "`T.Lg'eEm)&)Z4:\ ҺBr !]1vKNpA79`01==-}jSFˊ]adLzӦM] 9m7 /(''fRFKұfDX sTh}DtnХJFpae1KnIY9`=pRt} auu&0I@Pԙ$%@)22/Bi7~-^,=߿߸KOP@7M҄ ꂍxp8tݿ[vNNnӥ j`0l@:S|a{FR ]xaІaE SJ,a(3CғUw5җ~%)#Ȩ}_ʬ>leTrٲeg),[졇+t]#Cr w:qca[ʔ0n攏6>R:+<on!Yd4K|H'2fAy݀KOȞlvIL٥s3^v0l6'Q,k1(6\ amko? V[je(pR.0 |K蜳fw@ á{O.ʵjxX)풭I2 `Cٴ2UJac*i_ t]990`0p1zPUA4Q'x_)PH61a%B(S#HRu$qUfXO}J1/ʻuʴu]??K뮻a.h)WJNcausKW_V!Yʇz$0^W"=ãas/%j gDQdxN”ʒdk){wށ.0^FeBYye &{~nD$;{-5l-_~znnNzO =p2WxԞ={t+֥RIʮPڂFidn{V&oj{W'$ƈ!_:wpp&7r1=>Z3$4oH1t o.~h(vŷĐ\Q[ov:WLqƍ5 F湅{:t/{^}{?|ll,&\^{Tl߾}/<(=LFFJ! c@u֭Qd(# m###4^l뇆׃mlEJ(Y!x"f)޽n ]}s 3ŜHtc$o~O?￟)bիzÇae o #q ?n<6?ҥKFa(%%Hx@w0qӿjjϬH_g딄*ּ]zrPR _xv'ܹNfl.T)13{e,{H!Q_#&Zs)Oe#";Q$r%Cup?|^|}ԍW_|a۹G)7΁ݡD26l~qB#VZT*D%ԑAUTyJ*<=&v7v-[Pll5l&ܳ Msss ɂaIeMϡMD8<}p/Q-`0]rݻ!|B(ݾ}dݰaiS4mo21WM:\э*=*WG'K'I&?Z@6c{!Yso៼*^]g͝=|x߾}cccwT߷o`?8}O_P*{lS̢ly㱄Mמv\)=hԥTZRX1R 1mE "5]鉲XֵnZ-X3VF9. $pa8*ΑD2Hm)VsO4xa]耶۔Z^8-JrY6GI@UI9_Gz _dD<\u/?$R>]V"EN:!%u0c}`>]\+#v0i.!s4/džQzn .mEbO'uWEʵC FӦ0(nWIkF=SjzYhm46mА2,Cj :@;n:FbLBZUG52QՐeiJ߽#:VԘg IyPyFCy7v|T/^|ꩧ"kѐj %Qq]?4dD0a$ONIF"o@AoE]`;c#,#Ws98b+$#~|Ď׷ԡY\)n^zId@;fʕz}ҥe>|AW9rdR"PTF$^8b1z!JӇ>G*S"ĒHđ+9PWH"(5tuT|BMO'o?vF},elA:{3`fg2Xs]O(d˗B-w6AѼX7\'  pyJa%( @ҖX i-2Ķ,/|`s7Zqs.=Wq~q9wq`ϓވ) ;rA'.`A%J!ί%kcIԂjubҌ0?+uOW~ Y'%p8|AB(mHE-"N$Æ ۧ"uja^;vرO-,D7lذz/^{^]_ 8Oת߿?>c===<>I?;ryllt xdr|l~j?ځ:lӦMD,V/DfbrmL٩)U]|P̀tK?Kpկ\ndtWTT夦\.wYsC6L\,6ˍOLrL3 9mdCr<\(HJ2\(qEI@tQ;~SUqbl6ۓd{{yqKU "arbbllrN0-J 2;`LHRR|^* g2ߣ7wGpqu> /T*sϜ,)t{{_+GB&ܚl(}+!j/{g ᓮK 7`~ VήԪ.Sɓoɓ'O8QբwWXqɊZu5/]]] "})lT 'uGG>Y7^ezģ_wg ilWVhijF X&Uc[exL^cB7j oڔ\Ϟ=+.M)2U$3iSn:i% Rۙr8x=cTFqB0gQE0yה+B:JrT0;[cBLֶ ];uZu\Uxqqn?]o}$U\iӞ~晍7VZ-۫7T/DDSO[\.èjAo6+XZnU1"ۃM*"1CeSE855% hVLjK/4>>]mn[ҌUoUؒ@>2^3aX!i5R\(F.T*M.5  K3luƤB̕JU;GVիr9f>p#QFT*\VԊ\NA+|$jAD#B0Rh2-6dU&P+d2kY[V?O/04bTVrOTlD^+uq)?q№5vz駥;޽۴߽WUUOA42pJx"B a9A\j)UD]J5pj5@F\}#.TF\#>-MZxf}ؔBGtli01p-ځ)E?x/ǔ LVM4QW mF\@6JMh ݶǧo~qLFʨ.'g@Xu~V[H rMk9kb?^f߾}FIUx'C.L&~'9tЖ͛ULbx?Sk2澴iSD3ߛ;[bREu80C,Jh/-*H SSSPVqb) {Ri(ېE3e$Qưj5t bP +c6^bqXq/RIeւ<<<<< ړZyk.w kpI}ғQ6=x\0VIńZC+G⭃Ōn rOCss_4BZ+댌+%OZU @+rM/~!e !?:/5Jqo- ~eJ\Rڒ ڸ^l㗮Үֲaj55JUӪO6F0JkQtp46Wr1E4MQuү7Ejv<|:6޿?q w[`sXE,LJ_ RUUv28/@r@6jq'%.N"*:Em31?/h4c'rÇsPվo?i1Zm3# B/^\Ni74 bóG lBB^CS:cyEn,GLO]uNsHC=¥Lm۷c:Gj"i3p>*?sN (!.nܸX_ۧ: 7|3#}#Jl.]kj"μ ghfOB+TPO|~<<טIC ]^:҈.R}DnhFrH#Ƣ2zF˿6.datߴ^hﱞNtgv@w&O,oA'.g3~Hb%u\ )&˩Z>aWWך5k.[BS N?v8JɊ}.zf͚l6+SGթ SSb/mTG1 KV*RD+ XfYf٬ -HYlzƄlRNCd&J\.W*Њgϊvs.AF R2L>ǮR,T*3336L&z24W*@ IDATq>7>?HŀjUl!jU,/$iӦ̉NM"}Pd׮b\x !tPZj o%ګA|.[뻻WYjډ'>8uWxƉȏXL|WWe]jժ+V\bѣ>sn޲t_zEeb2Ebd b_wR)Y;a&P.89OiIOS'h*.83V:D+=dijuWn:ѽ4MqMZB* 6L@hf#^l w(/a iʍ`kS.qhTuh5F)W{rF3F.22 s QqY0n?g>pg&o)W(Cr_8a|*6 @\O8U5ԕ4ܚrC`-A gϞxQPmwzxxxxxРT=TMt嘠C&c?;p166efr̀ؔ!]˔) ZD JlZqhj@%Ӕlb*S b094jMb y˖~g=J cP遉eU4Z1T'~R}t*U'ʣ/4'V R).UFoe6R ލYB .nTuG$la@*HYuVq |lnՖ#F`)pk$Am*0``"ft3Ut9G}c:,aڡv4L֌ :c-n"`g稥U4i5'h.abQU%ZᭃAlZO~OaW*@0?砆fo8xNBJ1NEM4)ivMlM)UdCNUl⌂9hMm,6`y*`aA%eRjverNt{bZ@J?fX ?f)!W0nz$`ѐFh{ 1Yj |. Xݶ/ w 2AIARL,؂pUT/!FMn)|q:-Wn"q^2OGeWmAʨ{sa̸ʷ1ύGcH8+6J,D\\^Dtov0$nB0Zq @1Fv2CKoLvV9yPL8lT 1?@wm|M'+[ jw ڨL%N9i"$ =W}δYۘ.hRqBEwtD@^SVnџ'J?UZR `M ZX FFFR4],L9tHSha~,6'] uԒ+<7n)2' QIOkմn{h)'J6gCWHYစ4Ii/3=XʧI\&%.hCdp504,7lJ+7PMN2FԌ]M#pWr_Յ_Pk.H?X/]R07=zNQ~:ѴCC86"WmvF!Fp9d%[ Nd]U \SkcLlqjb MY@7Ж$b BI>HG3:Oy\R[z4/.PMY@s 2,Ϛpe"QJt4r(mp)(PŤP8O"tը7KwÌg9&U`+唓[xY rEޚQ.~ڏ4" w-G<\lg2BRd1jqsٜGiaCwJ=?v;RC^?a \LU*TAC%ѼClTpjmwFsIY_ AjsxͭC"]~(ׄ$,|CW1EɋΞ=˼%.Ñ"ERCaY;5QŏD-T*ΩZesSe3*/jk 6nhv27Xh- åY.$ ĸ7?AMU4 6у>3AFFu!viv8FZ//Z^ ^h`FS,x%4) ^Q\j&N7PãOjqwtt9k#S YjE,o% ^O;]JS(Z>69*bJTQ .FZD<_byGH> ˀ*>7Pj|8-'d'=JErR&LA[McK4,Ds4d-K @f bxImiw*1%E|膫)W F`H%=M\k.J=:ᷪXeѿ 0z2l\nqt.{xxxx Wq6?-?91QT6_,[Z0hUHmvA6)/5k^ u߁Tզau toM3Q$d zvb ,v"{&_f݇&*kU.QҰ89vUdJFCM'=}GRh#G{xxxx4 :hGK6ʣJR,w@`~Ȭ#f3p1YZtr؈ܚreY_TP|3M:=n_!b|31e^L J߂I/oxA:Q[X"z ůO!"]Z|ebe2#i;n:핫vqmr~K0Jcэ8턶%3tzezzyܺ %/S6/bj3ãY8\Wl= NNNVU>}T.U;GEiFb|d35LrL*Ԁ%ɦ*(٪.%.8'_ㅯjl|M\_$LwL+vb|̕RCcj;K$ CkyC#{Dt`SO.Ie{$mѪ G4'l}Wҩ-ur#gׇ^.g0 ,esC _WVB4A  eR85ؔ0hK`K5}Iמ h[:n+I3ݢ胱FVxxx}8I"k/0r-yI$HQY;#O0(&9LޘqҢ%.7L}x[ m%#=8p>DoTٳbz4 h:C6,z9F6::蒱8CrZDq^jZLTw4Z®" vh 1<<<ꎋ;xiKFqNFjzWvp]iEAc3-HhwE?5L5"AfqZ|\BKQhu5h/ńtP!Mʄ)W8XLSKIb`+=gn:~DtjkkTy h08zYۺv~Zfg;h݇vӯxUJIPI1,Dss.?-swxG}D2bHw@28eJbh XJԞ?e٭@X[^dHVk0A%L<̞={6Z+$!ց'ԈԤ 7WG)TvTA:|l )M5^RAZV9 N@"MڮUaiW'|_G-v~'jR:^@-CTm/iu`diz-֢h JbrZX uZL詘cmq_rh~fj('j<^Ҽ+įQzhѤ$0 xuYyokUT~®D]iX,&1;^-5 n_ĖYQ6cLST~J1hR`$Ma oX~D'bLhguHP8ÎOז2L"2 -1;R`WL"R=Jϐ䠺e0N]fƙ*ӻlq!],ѪZ CѼ#?35W굇 \fhvY9aO EeҮ@TLibQ 'eOƔkqjHbOR\+*ϑi{0d7骋;P5 ٫j&mcKH#PLt]'8 bʿQgoebgiYS@]nEÛr=SPǯtIHÙ"s@f|ƌMG.i)HtbWK_ t#%"'FEsZJ~lV~(A!P}Ѫ~#3I#I;TbDWziWe>{p*R.?'O\IrN`·/UDBgK)댸2Mߍ  0ߴHBj׷$jVat\)Mi^)@=A  8Q"Z*ngſV T t&E)}.OοЊ)l"8ic^ !(-41˫ILq@NrfS6C&՗bŤ0ұ_?Ik@+943Y^jSip>Ew j`)̅%f:Ԙq^#!hF\@܈ nRl4w;N>\S8L2HA'?1Y*hĠL<'9 H8IWB~$n2mCN J ޴/zxz65ey"#i$qBBQFw:xW;3i"YM0]oO#"ZZ6]o#6sHQ }h[HOFeT W,j7C:M:2/@jHj"R D,aR3i~ Ԏ5g2H6 `:+;8my-j,xQ874DzMoJLL % |R6.${<ҩ 9m$ˈ6 NBAӉDjZ&t2!8Ɔs3~/EcP?L"3`̂+&KuY= )>Zm=۹Px$ ?< )Z^Ź@W'' r~0Y2A@X#y7O黪ª'W-)q4R1ZɍSP0MߵSj̪UozVKDvPDVNZL;5ÃISEuEǹ?2΢ 4sP\ZŹC8窩~Gq2h)O1vƯݚB cE믪 ŗ6"6N4PZUu\K+A|'?* eh͕m?d2qPkkkV~g#54(_VuߨUšji={Dw R[IMb `dtT|RT)?aS.m4f_LL?'kh0YqsΞb~wiDTܭfUmsMƁ8mvU84:r&18ЮkCz{I:4߼`KL,hf&V$q19iwOU5}, pU~z7y#$OM{SmnMT\ř3qh5IZ`aS)l6؎* l֔GէѤߗ6ѰavR)| 1%gC4h编ifTJNAW` NWwu~FBsapS 0 s7hk=1 j}І$*""A+>y뷢 )-xIգPܤc!3dMM>}HƉ.uɦbRnM1wǔ́{vj*rU2 zL&#GRV|hrcM?W$r"o؏K\֔U33ޠkM/=?vXRԃ 7$87>RhR\O/n/S{QZM<* T REQ"ʊvϞ=+>]::|^هN9xY(y(*sYf!l&)K "\jR⯜KkCp H FiqE{ܐnIz(86A ez2' K``ko4%S#t+dٰDH}vfX,Fe#l63kk뗭\jKBZxKHcOOƍԲ_ZX8^}/R!Du<%FplAN=LjJ?|2 ]NXJ2҇Z4!DSQ+/ISR75_S;}0j*90CDhiOBneFiD8,'.W{/UTrpQLt#LD0mN@uJsR2&kL̰"R~w _W%;@hʬɆ1oÆ *D+o[={^yÇsrp{cWmmmsR]<3]?þںu+ ,6/phOU ~.gfgt :8844DDG.addtkNh4+K|'0\>V! 0 zLJ p1mwn R=vRlCQZmiP*ݵc8e Z߻womɷO[9aBѮ*Um?w5mmmGZ7 IDAT}znPp:(Gt[ };0P҃=h^,C?VK??SW[b˨E|DwPnl'C-94ǚ/|-|-{y衇qMo/(ܞpNԻP(D\'I?L&ǣH-iE':8uppXPnaqeTnᬌI{6nدyn:\|t@tKB mRęoi /[=)MAhz߈ u]w=O>'6]B{ws뮸bŊ#<`tGDrj',Y|:|WE#KX"H̡:"N^hF-9(h$ЀF/ DAh4pO#̘ڤ*<8h?6N2S%nʫ4noG3 *6TT] w5]R0dX@Ǚtu===|-/R[UpTcL@ m%I;tkpp"2V*I!T*"D[yE6q;;n\cF>s|e|2lFC0FD9h5Gh#M e{`VMqWn bps۱c?v /t ;-1?>W*_-[ZJ|_4*Z]v֘PY"``U2E=! s`]@j%C-GZ66hX#oM L Ű X np~Ah*%;&^4'|j05kvk֬yj)5HT!U |K`Жs1 u3933SEIbҋ7D6a`ddd|u!vkBpKpuSuMga k Ŷ,lOcILWӯR˃JNNhpT8m֮]06`Q)67pxG_ u }}wk֬'k%~]-8HZ:zOdp0=*Pz5 gϱeBsRG=>?A `fAѩT+|etca[5 6 6EƷl[U=T`Zl 5]sx̦ZuAJ It&߹^k8{x{V|nEVz|B BŚH :LxKhHN8qʄӘ=@d*ɣr VGW+ ৭8U? HdW;8^L;]'mRu}QQR[`|F{pT| "Mҍ!5 /Ûz]scmB-e+&(ФےΑ8KJ$$gœթ̈Wb3QWs ^{-zw>g(ӗ-  ڶTUR,A?YQsml.`\iӦL&ӓ9\4vhhhX$A<;5%5Vbqzzs焿[Wr۶mkoR֟Z-5I?dXzV*Wax NNzE[Kb֟Lo+ ~Q=T9uӷ o#՗%<&|ĖɢD\TuDiV jĘ&V'+z;Zv`_$]6tN?|={\;w4b]Ap-Dt爦\46,iT|>R(mŏP\5%̵M] :8HNMMIs8̌q43333|~Zҩ/R jivPɦ,%T4! =07DT/x VzիU!6@?02?ػgO4@/,,<{#طgO=uWc ĭ빑g7|sm|sGy1}A#`!p +;c}M3~<1Z:I@ix8Xn @/j|`A*0aNPqE%aKa1![o&g%QmX N4-S (AZgÖ5`رc[6oo~sa 7bSdHA K&|PZB#sb<'!"=3@EՔ/m4;002 hڱ1mZfRSP022d4n"l@ @DZ>A̍RD|M+_.4).bرcǭފ{=|)Zo[v>(f͚o~O>$v5$qu-*8qȑ#Ge&!8C SC$B#<~*h~ jLD{i7rã ΝnЎʹSވǹ%,;SEX $>"~1?0Zj6 'X&j' *&0R4)FV2BZąFaS;nɉ ;<<<RC7ThɭT‰A$4Vtaqttt0ZLp ZƼ(^FvqF%ړ믟~koo߳gϷt>U3zNyr8h Z 1Q>{ઢR6앆 Q5O .YҦG]>4bEسĒ|5g1L9 T;kL޴Pne;IiW*382?>~C?Fm?NS1[1xYW-?@I~ DCeQD꫘x-nJr2WDSǢ485*p䝝CCCbZ^ȚvփlO4'yƻHJsi#4aj's`v?Wf6:ņʴ_.C|Maqqq׮]ЎGx ~[s.ʀ .YP1;\vZ4qS@TQ8{1m8}np EQ6J "eb-RO*sU?s^NԦ&S; qa:pl 9 .E?N,ftwBO FEbM hY'"gϞCdiX;Ӓ&4}B))D~[9d[\Id;irZܮhX=htԎu=jOF:TԤٕ>tTgk?-K٧/5Hs.ۺu+xRV\lrbzxxx,[XG5J7h\'Y#rw{ѵs=qʓ>&r7ky>w#Ԕf)F8p l4?6˂=k䴎8?d㏯jŮ+U:5eKuY~֘MS\UZ#y-Ω^|uA C&-J#DUH;LT?{,_BrQveK ;h;I4>zS7>kC'|8X2qrrm=A 2sssJ_OUT~8]|kCj1sYWʁQtسBoNhf跤%U< y%5ӵj)cF6\s)Ycvha4zI$X֬FD|óJ9pĔ-[t#&\mH5kSH0$#9 \E%p+jCrq'K/h2;42 msrp qtа=Ȕ#=+yx4S3)/F{ lqQ7V6BZ($aMaGL:a;[@2EޑD-U?hWUj h.LPϨό;kQZ"82}ڍZ.r2j7k5p>8w4/1#p"8mՖ+ *233>$R=<IhY#RH!1kܤޡ'[L0)apR& *o}װ 5oZ-F٘?/e2Pf@sҌ"tsT $.@7˄Um 焴l6j:_.v뚡U@Ńg?2;:sa6U:cǎSnR6Y?v,ʇ+W^&?~"}n:uWo߾>, *3W^DN8qw:;;\]k[[oqw^x`hN^ueL=y#G@cXb-֭[j׿~T^o޼r >/3gӷJBKxBN(Uk>G-Ul{LeEOUJ'[jSR[(] b?ФΧkphQꊚ+$&P~X#rUԮr9K*xHF *jrqLZPg+-oU1vIJOm /yCS.`y]{oC*;ƍoV]ͭ[ed0WFF R>22LP ty odt `dtt,ɉ Wqr2円ա%U2J3N\/]cAOLs lj!TfKV!_8>`dہZ@u`,ELR?9,#0|>_#A  R3p$ T*c*.~ p266vNQm۶Evxx9Qvd?ryYZiVՅ%y&qfѹޏJܷa7S||gСo|xM7oFD}_=Ν;[ze};;;z!p*yر# r jWŒ<ݐ+Vv[lQdmK/%V'E8^+W|G/ K.*m>553hh ۫}.C?WctX]Cqk.@fa !) јXnTCܕMWD`].t Y$ ƤѨ|R|%eTFˆ)p*rj{S!8$^Ç>ѷa,wFU=Axp{2zkԎ+"ܶb6lS?ު'y\5BဣU DRidʡV XLfXTVͪݳqUs_8 іJ fãa*<Ӛ\;ی ov4 fJRDeWDfIWZ2==SSS*9B9/ֆ{R;܋!;,FWLXP&ZUJN1}F\.kͽ!njA"XZ"M$dʝyVM"u)9ZP|rR0B* ZViZ:88>>nIo6;99 a׊4"H=KUJ,:Eq| 7~DWpe=gO(M[[WOZmFM[l{A#~VZO_sDlnggSwwvvr^w_\^`H3j3'KbA]=26 9s/[{K-ѕҐ͕X5!Yl# IDAT89S[)r>8F61-K_ܓg*\uA  5s/ ieɭBg);cr(e?:S=?~\ }}47L ,:LEj2 ;nd$)m*Sn"\rrMf\.!&bpp})SQQ/m!eH:664ãYS HȎBr3L63jRٍ#Xs(!rԫ^y#;nl6<0OXc~)3sss LG ,{ܪl_TvǏnuuu=䓷|s֣۫\;vL^qʔ{5ר'O -VGwU N/! }ygmRV}U5'BD69$GW)m,v^9 M,κ5ո54|x#C\T>IAע\v91p*&V;L[^m}i1L-5vBt^Sx@@-9R|OIo!*9ЫȫC鴷tZ0L}EâULݻ'UlԪUG@Ac*z=g}[t877]^uVBcXc -uJerb"- RH(Y'& . *L&3T(ڭKW2{133m,]^A'ڭ?X,NWJj2Ӑ8ՕN!Ur:2!e4 fjlݔVb.[ˤth)x8i~W, R(}e2\.7$ ggfKbs'QLFj ٨l.'ٸʂi)a7~'Oچq;w<;Z`d}Ŋ؎{̙ݻw gΜ([;XnXrݺu7o~W_ (߿A!۷v[ggĒ80j[|Gc$- ;X@u0x-UJ_:Xͭ~z(}ш |©jI嬏BJ+&au# ~4JFF2 ׁ]9Zw^Ua#Eɪ\|$&Z(|H͗۷o7,Z"|`ddhhH"bgff nZ. fef1MK>03ߔ'&X,JC*p0],bDPp ''&|q\L݄w-CTձ m] KJzxx,ODBl$GbZj86!\.k/V7;3L|~ltT$2"TNZݶΐp,,,L/addOL|rZLJzaDaQ\籽䪲+H,mۀR^¹##+u9D:hP?Y;|8t7l:uJW0JZZnx>|{p۷2tmw/~S??~3|Crws0`9sO.ŒG}wGGG7_xmrE0wltTw_~ԔnbNMLZ#0bTh8a)I=2՞V s ̋DLmyӵBvV0M61tOb0vZm<$bB kVr렅c8͋Vm-&zkdBYX$#;!8uww[<A0ƿ kDQ8*7DOOϭ _җ*X?86VVGFF8ej+-/ls \.*;M )A0|NKc RDZw7N*9ʱ|>?nֳi&oXXL-}DHwyS**J|gKsn^2Mږ"8Xst2'ROMvz1*lVzɗ6mRjuxx8"}3OSBk>0HE³Eʍz/| 7$-{W^)\̌rٝ?qhǍ>xꩧ3SUpmTtFGG/_nŊѓK.d-_z Dct !XB(P f81~EkS &QSi@Y x_VQ٭~Qb6"c uQ+O XDD$ rDQi^>~Hx1tTL+Ov U*ZXx~?|9Akuǖ Ir8a^IvDaj8eӔ*Tҟ[T*33c.E5A4$ω ãa-8~A#2aRT6NU,in u~ޑBAkNZ9yRZ4[¯eN[nOvt. i&$ Ttv?-^G>yn&'!~ӟ'V_x~8*D9L ڶ_|dg~Vr%`Rv.DT/u _d!iC@Hg"t-ՙf$ƺGO5)Z"oD:IwMA$Xf"c 7cs=_a4vJ:{*ONdؖ66פd{k⋇ƁDL BW*qFP>*!;mqzK"18,!a(x" :"lXW;XqY,A[ q>-,t-k1T晙l& hQ*fdbZ,<%" 6È4aOCD$ŠQyĔH}_]o?RX75x /Эhkk{7Gns1? pggwƵh4Fi!D:*P<۩86c?ϥWƦaR*w &S[ߛbH\hܕȈVl9pye5 U;::g6I>J9Xg:WRvTXG믿D yU-6n@c_@E(W s=G$qΆ75%>!SXF~ҁiJ.]ZTjZ*@_Kpl[GGN*\n&a=<<<ŬFrϬӃHzF5Y (Ha.j@4 LWoEKjѤ {"f'H=U'#v5F<LR/R:Ì51a[C>wKV0Ve#hS|-XDTFq>jFLf veT4e1daaA"W.5݅b i P.9\I/QEI( Ab+ޖ$JЄ=ojʥQ+J vi Cֆveк 3>PpS\h3XL;x)7!t\4;;:.ɢ;Tf7qb&7b3$Hͦϒ 4Z@VgjJ$Gy`bf?~{"X;1'D,็3g@a{kȺu= >쳗x믟wÇmEOjW*uL VʠEXW2`^wJXU/sn* jX]LL$& $tI Fk_"M? )]_۶Jڠ?N6]3Kkl uZfAI"/9}oQ89:iJt[XWA+ƙT*KE-DѪJ_p"} De A_{,>NY.+Wq *JHzP$e+~T]%zO)q\^uy [p/l+@`.,<wڵ⋃ p$tƒGkAs`%#A؅^^R1F>4y#i-xo`pO&ӏxӳ xiK% rɫ"PAq/IOsNr9oe%6p{\rSw^QK쩯ׂ|Ƀ+ƀ¼8tM1ۢ:g;ہnFrGؖF#&ot_E Ey}Z۟ڽ{ժU4eUফS'lǭVyĵ ɍXWz)ER̡UA@G}֭ACImy'93ہU ɓuY=ztvI]rϞzJyW, 4SD4Et7tv" .&?ɒ5mj=Wlx4/h g |hӍs!> ?-\&=pNW m7Hł8mD1b_mWPU t)uy *#`çL!C]z?Amww7x#b黍EfZHiI"._YV2=]z饠.ph/ʥQ[.iV't!Ү%n,q: FFF =>]74OOO[HNdi.`r9&''.ΏBogDYt[J0SΨ]JEHGymGvS'$EzNyo'z|d[fZqg>zȑn CGX<<\H~Hq/V:t$f K\-6K?%TX_&V$v&6OL$6jG("kbF0c{šB r\,<"  ?4īh鯦 8ٓ(1W/Śg maHW9&xVޠ-81Ȕupp Jerb”L&VCVI)qDFLJSc1)߯A`1-`n ]:i.T*zGݸwϞCI7|Ç y{܆' nc~򓟈z&/=AQҍ0*Wې'O>{ISuYT}=裝_~%>}Z%ciSŃJV1Re+,T _7b^"G*>\bh#q)H7(vT}jۢ~QZ#3.`u<"MtyR$v~?h/I'/މfߘgUWARCNE[5u-􋥫ZLa /M1c0Ɉsϴ V14#wppGyǫV6?7ZUT0e;noIb|BIcI&^"K3=d0Wv1lv+lno>8\F/ !ĕ{O?oAWjzHr?|p>*W\+7l KzR?VNE4Lvӈ.GX23PUew}̙3u`*2\;P;\B %1V9VJ4l i9.ts,K`BjuFx_Mt,;&U +&3N ^&.K ֈ  UR>r7t -J2% W>0Ng#C*8&ϤkO7$ڸP:sKay̰ ` KѶ!bϜ9~LVU _~濢* TNNq`}RIGwK|YL0 -=Lg{FgSn]PwWoM`XssWG8s4 ,@bT8admI+TNڴ!kN!k^ ; P^X{t6/]v q-DW:M&'jԴʇj IDAT_3 #@/Vb \^Dp %[(+ULH;a_HhPjM+?Fz 獵l14O+p282ӂ~yռ(X;,CfDҘ`/?32X[s1CE3Qy/ z?E%:;toT(䇸+ddnoofZM7ټe __@auk1"Pp3&><" ՟IJeZ'PkE,ȍ ҁ*~y@] A[ 3Q`K(Έί8eGG#03BjY̡h=Z̊cvDJ>2 Ր7pJ]´V)P E;Ewƅ=>h=!xѡqYDΞ= Nc5*QsW@m|MILꃉy5sŽJD8(_wD 4RjX!ԢZ\\ܰaϟ^Ѓ@WsΛo<_XXxWiZ+Meˆ-Uܵcߏ_VFmmRI/"]\\ӇʟR@Hu1z\z=-#e&X,ΗˑB3rRcXV3ͩU:88#hJ @,Ԅh #hKCiSRG$qiFYL`(K/)Fg݃5;{n!$KC7FRؠ\AH2eTũ (3 T1 5q#1* <'Ql3UqO2 U)CGo뮋/F~$Wl*w\]G&9r`U f-1J^K\ۻ@[)EpSNIv\C/6EHÜ8qԩSl?ݍo#YClsVȶ+RUI5jHYH?yFjDT% 3T)/UxKȤ \]I)ʍ,hdi~,:O~ĞivtPdc-{GI93-rwT?^fH7qկ~5yh nCS>'IV|&mo?OO]vYTك7Řv?9pիh?dCw"J .A*38@xjE%eĠ~ˤz+"< ZD|«8O պPC sD8O;9szwu׻|kh>+ѽo j$!}Me[5K엧Nmɞ8qYMzE!N:⫮*нnEYu=Ogi*?*:w>[Jn[NW^cj(@k.:Na %K<,e9:u 7d9v֒vm=ps |ͷvLcދcwM&~=y34o|䕋񶷽_Q z:tB_o>gh;ߧ?eϞ=?L a`xCPT.XB{jeLIzPL%YYyxET0wbZw#Gta竿~M:Ybx׫{v3SX׫gM9i͊Jg GSL#k/vGPx׻ $̽[nW~W4Ϝ>׾S r$Z5Iҿݠ0Z#loV{N8q5לQA# [qF?PQ\ x:0H Y~L4#fo57#b`O:u~kGSNݔqw)9s̛旼%'O<~x&zdr65jVI)7|' {{{SU96_CЏ 'NxUWvJ'7lAu(F3%q @Đ*V}ܮXVYywÏ{oiӧo37Svw/ȉ}qok=sL7=iKwK^7}̙~?W+_VQz7w>O>>do֯꯾o/%W"tӼ={}OL앯Tɏ}cox?瞟xիOVC(ErW(MuJG9JQ'D +)*ZC!cPQ.p|ZvCŮ=vX! !QZX}׬;Q ߼(gHS!hgV\zB9c0oaZwa*O$daO ٟ‹US5ѽutb[ٙË~tvE`-ވjW_}W^~h[.M2pȑ]y7?Qfoo'0/})|eoo;|dvc8r_WD'YKEr9r'pWDZӧO9}ԩSlNf탬\&ꈾ%I*\/8(Ok,9({8y"//0dura38!Roo}\cO>}Stޒpk&3ؕW]u嗇7%N~S>))/xMv{םw/BHyы^jv?~ӟJR^W\~e߿3g>OoBTAH*U-0Fʄ?y~3|(}۷}pH|W`\g+^$,EǖIjE Q%A ~qҫ7Ub4Yb >gƀ:vZء"krPu8Ƀf(G=GU,ʍ[G.er+T9۠{ W 2r%=WeCZz<+I$Y<*Z 6+cIutRq(}VgF< EDp])qrG:LrcRxw%)WNEpaUӘ1)$7z˸4G*,RT]wyםw"6IFV*lh\98EϩV/FljɨXYޠRG䒵HM5i?4#r4p]KD@tYw Z璉*Jvi/Yoo'hJFP>&pYe['2B)::ͷcE+oOG),Ibf ΋ 4?hTufZ>뮻ßί|+"43gp8&ShO{`3m\auѓd[09',m<T?uQMHt#cy9V*fԇ|;76`lMVAj{ w:ؤ{&Laskd%뺒U$YhAq€ekI9^с#tة!rCE䗜kСhOx:v[Ar|9/Q1=?X| ɺJL׼&zxS98aV.(ȑ#4$}->$ϋߩJ>i))=\I5ɒ!'GAR|6*GhΔeJ ʷG jpE6 $-6]0_ 1 Y0RI1Ms_,4vQ 3e>_׾G/ \g| d Y+iUļd+l`-QSFa<:PjuײOW?^?~_>;yv3? Rz]`0./Բ-"b7ȑ#Qk>{g bd\νie:Y3Y,% HSLyҲ!@ FIѓ͐yM0l#' ҰVQ(Re\D5a3r) L'[#R%m(nj& Jf 9LzIY|* +K#"Q_~Z~b7zϐ]wݑ#G~8`p9ca`wjn(K; W\qśn5#'NUUŸ׭Ԩr&rְYdV2SVYbIp-Pթj5d͇M+VO s{4LBz<9\9kHU%,H_ ֣{bʗKaY,3%5r7$Z}Q{{{w,"$o('z[RݤRgB$tJmXG0"63a!IиJsJR:zBKF 'j(6L6vnH]>I/*҈$2Jm=I ׫!6aPf,*T67Vp qO,'U}s|*R1{SpIw<\a2l!r(=GP#JiP<+Ɯf~_Q-J]pV(eBY\0hCq]w=馛瞫RM7r ([BjX*2Ԩy%vh>Dk9~5/wqӧIBI{#+R J]J6JH2~dB:- ~]xL*ʊvT} +ڽ{"2@^.̪씺B& 5YWkXkLXښ>(G%Rds^r҉늒+ 05U=TC)$# Ւf9pL|3jb W ~XC3r_05Aӓmr(Q JH۶Yɟ\qӧOǔ}x;WjuR=$5Z(Ͼ;2IF3]V~ BQ")KR(-,m<efrqԫ@]1%H9%(JmHJ 鬙w>~^0IAjW‘Br[KO\4l&G|z7 Id'QX&RMT)'&cm<[|h+ذ:AsC-DGS}l#%O*qc NR>bMF#+-l$J^7}L{Hx[޲ IDATjl:Mc[o츛Yq7h-=IҫĢvh|84UGO'a3@ B;sQ ^Q]=F;CNK5$.S~bB0Ng"4Q Dz8La?ݪ==4W@+r85&$ QDa FAFYmnxPO-Zph_&'f~)) ۢ^3gֲ׾FjCp8ǔqȑ7M'#'Nm BARnŐDZ"P)Y'3V6&nތ̚ IdP2$MR]J:8BwSxs\@MEWUd֍>Dve bZؙYSJɣH#>iF)}ha2\k\ (i@-%kub=A"Lp>{nwW.5toHIrr ,]?m+5g&%RKU/~ȑov\݀;]+؋Ia"p8Gr}oמ:uj.Mr)իH:WV*"|T ᯔI 'JJjLMK黒4]IYZPql:dT q&mMwY^|$o,)6rФnƉ^>sf%7Zha. IZ f`D*w4QJҐnU;(=i3FQݶ0}gvc.bGE#fL-Msd%6G@}\J Kja_rN?x]wxW_}Ǐ'O; Q(Op8᪫v܏81#;.*j4%JuV;ѯ5CNYˤBJ`C Y`I-DhݣGMÓK󨻁al;-΅G%flrdM=Jv>AP1*wQl ).,j~O (t#uN8Q20zON '+rYW^y%\'ɓ`p8믧~ĉݒָ$^!6 YoloIUBʐǺQN7YL Pڨ\R,!ʘZiV[HQ`RCTrMvBN9U4[eIAyDۨc;`(%WۮvpX2"/P._`d(6y"}xӬ1Ajdu[6%sr;69g@iez@ZD:?)p8p{{J!(Jؔ"6哞IISS";wYݞ,+\ݖ2?k\b 7zMM_JXf{QSzW2fHIkXL(#Yp8GvHJ\i7,MSc%jHGx)9WTE6Z֣<eOj@m*Y4.bfHn .Io@VHQhfTqp8 s> ;,n*c7٨S y斓WZapd@_:MBKƍ4pL=KD4ejMw["C ' {y][}"%TL55+4dž͏Κ]?Y}p8X7Mb*%Z֤Y\];k|IpRFӘ"nJ U.)y 4S)V Mzz }I61$̄O)daar5 |;k` ߞOKp)AjE9=3LMmVN.j-Y4;2jMV:5S>jA*Ӵp8ᨋd<s5CLp!hDJXSn-YuiTL"JzDNliWLNYZKr)o21.ĕގ)gFu;v紷3m;V24Ñ;^Y_.+&~#ty-L#kEvjnz6(By5>pVV11:bX%vVXPXNE_n:6" !k["tĞy X^TS%Il1M+4SCnZ*-}z:`Z)p8ΨrWb6L$UWxțu"êGnN63/)zꅀM']Ruɪ ΠG.T}sZGty]gP,޼?j<V*JJ:w W#}KsUm_g8H%eW`.fΛYcm1SDMQпҵ=?ِ䞌sEekτWIaݜs0¶${%ěD =~ [Y=J𿹞4QrKdUSp80zGgoY`=MpǪX(V Id*X"$Q16 ;3R) ^ѠDHJQ v%RX897pC0וsYduhJSO*io6:u/)C7ؘ2=ύ*:\&&T2~iXEhҪe-IC|ϱ<&Y;c&[Z2s8p8ft 8lddYg&b7 o-~WsFѨFz,Sc`y|`j c1d|m#xIyrENCNR5Qf~]FL08=2;p8 FgCV`eri@a,)<I  g˘±0r > !pf2_ 0+RBj N=>u8Ç?4qJ$9}hkL x`3i)d 9Xgܽz%!p8S I"9 UTLzy- %D ~Ф0)KfM@P~]}aͻ \a6|Cz̓2ݷf݅J)eџ768SGS&?.Jk 3yoL0Aq=qJ3y8B;5JD br]P[mn؁w(QW@JKŊXkSwbc|p8~T[*DcbTء \Z@ۜ$ML}V+ eoCzQF5w 'J;gOB-admfmm5CTptCwvJZCP"j'f";eՄQp3tk1(>.ƊԜ F(\*2p]Z:☽"JAo6-PB<ˋ9|&EfBsZap8M8f q`X+pL!V`EY8=6QԍĎ㒕vdGMzyA8/nt4]u# 檦G$p&*W9%KXt`rTgє&Y7m4hut4 E~IK+mh @kR NFH&lJ͍ Z=Cs'T!VAwi_1=?Ymp8v8|:m'X KF6E`'i gmi bjw3좤tOW]L_Qa`2X]'Xb 11g)oIm,$8_״84JQF |)r,|=\ˡ5֢xeV[Q0{] f$}EҬ爟ܪnp8hAa$2ab_ I`M8fYffߢ=_.(F:3Ys m\Pm!L9DV[Uh؉:Iw ӸF6c!̱HRV3jnuu|56\MP-}>býnA+<3g7r9PE#eXP~p8p8Ƃ4^.Q]Ջu;K+Jq;zVA!+[@3mWD3YyEus؃BTP%؁ae)6ؠźf,ېL1Ŗooz S^G 7F<#D7PҲՙ̳eX%3jMc'zp8G UEFmqYGͦzhӹ*p+kM܈E~Kk 7+ )[zJRSxVC[TΤ]THu#yLE4:p8R1#e)E$ %Gur>IUl;T],o,& uTRp;hIO,*u,x22Ga¿ Eף' ^QiCLvHd5Ml_L\N&=)}o,MXEd/b*2Lb>;&V")EXewlOJ$Zm#^jJl YʵK$I\,| Z\I>dQ%u8,`|lI$q8 GdA֙XIS3KL<.$5h¦YSR\QiW-HRh)e0o%GJ҃*r+˧d%9I+exkor7~]p8^6Wj͹YOUHE2,'mS GvV%o(Yk%꓈l-R[Iǖ+WyEE\"fիS:t( ڪ$> {,uo(G?̆|6^w6k!L_/a? p8ǂ_R"e+iiuGR63Nk:0S"҆FFړ!o׾g"מKoR,X۶A u8fcǎ5X%0wcժuֈ48M0퇬E%YwhԦFh*B3%᪬~֤Ul'*;67f[S:3Pr}MR D/N+x^%Rl߆ Wb,1gUSĎ:6Y-%}t6[cD9ca^vU F lHB}Nhы3|NDs`56H鈨,>.lad*ƆX*dF0+*)uj Hj8 g8P\.bGtE"{X4F/N[ IDATVV1(ߥCX õ^)qJJ,N&Hs&p XUۣǂk ZI#HttT8 -ˀ8-ك[q:TA"hx˧oGp8Gq8s[MW%V k̋H'K^Ц6,4-o^ׁW(pH"C:5m:r\l]w5fs?E [Vuap2+[O 1i>F^NVtF;p$$݈QWJF1iFaj۝0c(BuUkb賐ia@vaÆw;:&>UŊ@">idXMZ@EM6wDZ#Zu.9ۉodMCʰTH왉%xϫSedh&{2Cp8#t= %c1MIkGR:FL)&_L&)u% $3!Lz2=t2[/m5J)2e#Yu )u yEdc;m+lWWi4KFG̱4U_ЬçŔ;#4Yg}f: É)ኯZ4iwk!%!+J1U =\|mqgk>ꑻIhKt OIjp8`Bl3*bgt(d5GS{[c_x<ҩ5=լf7źWY3d^69leם͍F1PFTN Y={8\seE]Tw:fŞ 'vzR7V7j_A:BWt&:ۙw_^0'f}CΕ#GgWum|,Id;6Jt!y=K =p8 pBlbO}0_jIFbD>^,H/a~!pwN6$rzO'o04*˾]s#zF.f-ՄmE?iȘyJ7j*If{̅]|9\":|:H?:eQ5z"UH{V(6| t[N8єOe½,:&V_z .{+Tǘp6ed2"/%Ivѫj@++FI5xQUԢ[ W0,xUG9lbfrKCp"U  {z S"53y>/`(*B V  %dv%A/-iݥ+&Z2[{ɶ1D PKou#b&$1qbj'Of1Zv Q M<%QbȭB<"ϜH%rvՀfzWX6QC-TB6Q w#i8yx0B# (+zT2$˚TY楈E@[Hd\/?+p"۔f6[6,cA:{v"2=!5!O'撖;6p8ñTHĆmi.nq!7NYB[Nu#,jM)4bչ}BE\mpݎ# ǎO4/n<@Q*۽Vi&>ܱ'JQ+Aj5130ESX#uv-hEU1U~-?ӮH[h.cleZ"fpB$vcxS~i5=L,YcXa2zm4*-wM3Wn $0\)0.|:3psAd9Q-rɨ 0`CK$";+зXZ3.N26k Cu!MIC2.5y5Ҙ٢nF$i`/m .MZfPp+ŒKy쎚_qً edT)8e&q,ca>kIMHjr+pbE3Z<m%G=;-=֤-ZɧQH*S؇Bm=OYhG4Q_Q d2ϐn^ ?Y) \Poi\@p8:s1r%جW+hɽDF*_ҐAJYR*9I.Zl*b&+%LuSJ”ۉar󂤻^^o,$r8R~a.z*ἤYia6{S[ͤ A >az <0'$}X^6V)7X#Wp8UxnE3%>9MEZJxHl3f[J>bEᵬɉ x5.3A.g<[RZztËoa2F݊dUv* |Bkk؄?2fcVkqӝe1PlΜm䏜;E'w%2 p8cx\cPK:h!kt/>MY<.bFhX,ҩed;x5Z\3зb.*tKfKjD#Cj !~NQ{U2OjEjNDkya2B2#2 ס$E0F*lcE3=@*Skt=p8זWHbg9BNHf&+ Ysߖ J=y!K*,'8J ̟laefoW @ݤ7K_&@ƑH" y EATpcj-33.袩 ys5撒UJ)4^}h7ZTۇӬE7w"±P:4֦UNCpJ-y1}GuM ;a$\Iؒap "9K2Sha(}p8̠ 9pB5?KG,@ )@g#WIOeV4#5噵{2O2Q\:R1:jf\a0%4vJmۺ,)[zUc&h8*OI *X-ե0>QAaP؈d7h) yҨYY Wp8/8y f˕\l}|1M>*Z *g Qq鋘p 'S"wv6i)ò !lk\f##j`ǍAV" >lD:ί`9Ҩ>qg֗n?Rt+y HLj+Yss<3$외[Uv,^a(&szʵp8n{ Sc=Pq']T## MĪ@IFqƶAȕ(HYA$R+uYd2VC HU53zjd+$K<< ۇF933c٭W >r5eΌVK&`\[x-`GCtAz@fPI"i1i|.`XQq70Gb 4r\"pyb,oϻ%RBbK^l XVY}X2Cj䳑J z G(qǗ%gf~ ܌n d_-1kHsiGy\Ul.[ Q^0JZW"]6D_ ,‹ja#bt7ܢcQ8FVu4p Qܠ͈,O_˝D) k1u7x@ttp8_Ix+,~ Xn|2ʡ0Q68iH}E]%z4˅Z;9˶Dh "j%fG-N"[$?b@k~]M M -"0ڿd-xMᫎC~D-Y:dK.NAjJ7OzN#j |+G֨)J|Et8h'A f]T9hzy+o-k'*Hdq$p /cnӦO)@O"˛fZŒɒ|%Bf q[lCsu큁ZeA\Wr " [)kV/#R"t]B'}Ѽɸ1":9&V\˶^v%H\(U6nO2B/N룖Fx"8sm ùİj3m zlmf[›p831e.$J}iNS&&5^ JrŪY&C?␭LC!\"8VAz䭄*H%h б `*? ;lP(?g7nݨ%5ќ66lוz*p'8dzZwlC J6xJp8ÿw,0w`q0kCAF/fhɴI&mM;7SaI7tNS']&vJbY:,үteEK' 6)GjAE>iD~}p8f?;f sU(0g?N6JfFCR.A)mј`M%) $,Cl(*Fȕ-D(7O J!v>PDI¦apd cIƌHueVo4|U8p8 GıѣGpٳEꢪmFg F9)R͝n3֭VaaWw IP)gfwwwc<  Hm|gt,s Wk(;Ib6c`?,Ƀj>dJѹ̳U7? ;c(mF8iǶ$_M>vGtZTa_Yw>N304 AQ-OTlGiKñgVV6)VPRa죠74'46C}EbŨDJnit(ŵn]CvaVNh.P*/ɷX6"M)V*csk}a_ L S]`y ڝs= ؀=Jzm,$API:6Z`=LIW+%bzyr(L@u[BC-F,ҏo&ys8c^cc`Z@hCR"ȕDXcj sl[S蒸$o~5^)`^n4OJ͜^G8?f+ME9`Oo3t`dNadin0FgaW3[d_#wiY]IfI')'`p,QsL Ybq`8h沧ENYs57@03WThl羞|QȀQeG&:UZ+HGN$m9ƚ{[tW.88n3Z5ݽ[>(\8QF,lYXtO 36Y Ltn)7\n'pWDb|jNz[kRRs8cp1)(u8މ@}a&= G \ VHϚ V#4+tKtl3ÇM;0Ud Eeq/ӡG1-Vo_UJGՒFO[z渠k Į"*~HZ ]2 BTyQVzA]i折 I;Y}ppduŰYbY1 %FMkWoROyKiJ9UE&ȽCcUa`5%ۣM`"h!wȧ;5 k[#i 򡴫4b[΀>'WcF5xh18eg~Ü5͔+puq?IȮ%Rɉ{5V’e9FP5tuiz]_iY l VPB07b,T+&M)9A'ah##m("=W@,ur ,ѝ ֧Gj%|fihhb EZwp8*0_zOYJ) 3$%F=٨)}}\+R6v)hr-"2J@ꖩ>-FjIoݝ[ZU04;YK-Si[f"<@fGȟOcpC-=cw?{k) l}\ۯWGp82b$tl0ʦT:d /%Vퟯh} *z}ؤNs_gYZB KvZ#;JPYQ99Tgۡ6x E4RL}J(G'I C7aLŴ|rwG2O5lɄ p8~b&*.R^I7X(%EU%d=9m (H2S] mf\zUW/aIB>Oiu,I1K W >)[pu^ 60xQblٴ IDAT$)]wpd Pݶ4$F`#[gDN(&ۦ{q %;4ap8\7@X;,oMtMb/Y7=2Jb@%4 0in*M"bF [rkV*[KWNO$VMpjCr\f dUVnn!ڎJloN70gw ɭ]C?uWרѯcǒ)1B2Zp¤ i?pV b$ahjFv'kw7PҌ`z=@6z CarjZѻ,`ߔMð+-#2cp8w|iG&-|Z,U9&Dž/$sW *I YJ)WVsldu}՛iY5@2[.JhbFjYIVNBvJQzt]ISKy6 elQa./VTWGu&3QbJjeF"*S Tv^5BSs(y*#"L*lNk`NdR[Ge-*cQ!6ZIThŏ A p8p@Rdye.oUsg;(d*b.7%sجu4vMutyg7^kM4uْ#8ױG8;[%X#X-A-˥w CP փ.+``'VscxMep^9{PV |$˭Y >%|naMdq{ݏ׵0w}pSw\fˀ}p8pl\p8=zJ<ȼP&38lB* vNѓ"J:Z72jZw/.LC}:q( L.Z *哤?R0PꡬN%f~GHZsQif +uo5*OaKwdPR΍v8]Z0/b9 ֳH\Z$Z7,ݧBԾ[yglTT\~sW4x+y`- !~xu87d#taljdUч,辦kڐ<V .P"a)UV qaMCE6W(oz}djgW 1:wAb-$ V` 'L{ϒ^l?]nì6p8B|R[cIɤN@SAz(_}+ V!^`(j*9RR-u!-LXlfMyK=?lչ)7Jk oce#+V]t  y6?-;1ɬY( _XI&j0k]׫O2{zEl t8%pT?QI:ߚdP~իQɻOJrh"sEeE0Bb#gTC;0\ (!+b^b=E} scѠC$mmZ2ڈHXPmH^ պ7 mQA=%0"OM,>h@mTmפt8Q ʲGpί"}Qɩi]y*<&ުtPJ?Mmp$C`袋jiWY=)-_R$4 KdPŠI8٧KkոDfϭ47Eh"V!"z}7*`+4c$yI#* Z&0ퟺ$ vZˍK9jiRĢaєGWb7f-WHav%;@Zs'+r8wjGku}qmcv=`7bV$ GSRhJmNjP)VcDE=:LYhKXmw8p I"$OYt H(!8~W(~EYrҚ" l5aWPV>_RM.C#$tX=2]Z4F|knvJyV6y\!]X8ZcI*zNEKj`R|r,á#ӟ%w`pD-*/+ۦb$ ?h\~EВC!=̍Sw~p8K(Ye5f# %- 8].*DJ/J63PEĞ>[(C@IlV%Y}M8&0UL,Y(5,H_tS&)TpSC` ;U6WShowoX[z6Z3fdKkːN7_`q>dfp8cX&WuKWɰW[z&\\RQ>4jբ*3+"*5Gٛr)ҔnAWoKeu C#v}3(fYۡߡv6T$PJ%*,Xݓ{@P=rCp8A2˱D0W )M9C+p<͢7XXx.-Le''*rUoT Y(H؏PE|ZJ}Grkdl sd8r1ƽxI׻{رܐ|  k$$A3'-DF++7X}>QuѭZ#|$KUَ!m5XUW w$[;=\On㇭%*١Yv-:^s|C-B AyEoJZ"S:w,e&b6U(YW8=h@-[\'Z N'h[2-&@$Z&,i԰1Xlu6NZ/yd͇)H ϖNs$sQֆ*"*3Jiu'SړlSWOtL?O=H>&OK; C8Unf>nV%luf[Z682pɷ6{@iJy,gR-Yi5dm,%| ĥ`Vp5t%g)*S Mv>keöɯW_Dz Ii@Ʈ5Acg5IhaK^8}"b*zB~.}{g?vUs/YJJ)%Ld~/eHlPBy-s҂ 5ԍCW<{çw]p8be+v/{;w=spJ)Oe?>"tN 8vR.1ĬT)(r ͞XH c%V药m.W(CWs!+l#"=J*գOҮo94MSn2oԐtnID[AE;vܬ}iqI6$³(h*|xy[tʠ<7M(Fܹkvvv?]]];|͓/˯xnGRIeӦhbpy/yKwGq/~Xwa. 8>mG/x;g꟟?=+{zdKMM HDJMDWM.3c΅Fdq ւd.N*ВKQzpoi+`'2<<'(zn7<~Wnx >%ۢ6Q4';DյqzIRnEu%rjH֙_! $kN{`ޕ+dٵz2Mpyʀa:W&PulI|Ck᧟|:](,G85Y/x/>{/:\9 p8 `Sv䱋_: ~=oӿ}yy%05Pфá)ZݬdJ^SR@VZBUaU;e6/R)0cw eD\% F%D)gTUC̪4PVydƠ^O8:3Eh׊)Tf0*$IK. 2>ơ\QVHQ kA|)*l.\hzFtRES.8+i0& _ƳD1@ dΈ,4Yw{6HP[ ,:P(䰏p8…;js6Yw1!]/~=V0$ 0du@'Tْ^(4*`kZF [ &"&@sc7bĪ۸ ÔY<+=0uyD$ *o\x/ň뚬9m IDATdy8BQ5Y;;;??s=?OG)%;c^ >2~/USFwK&3_KK9xO `KuASY8us5WTTq#Uz&DI;|^pI ]%wmLEϋ*t0ȔK%jnntx1z5(nkG*|!}Ҕa* J@;MDlWvq 'tr z˗‡)q \UF\dQ[b#?_Qma0nRyp8BrCDt>/8w~sEqՔ{]s<#3ykO"Q8n1Lf|a.Ty(oգra-hRŚel{YMhkòfW鉲>JiTaےTrAX Q'I5X٦4 QvtU@ $GC鏂Z+vEj*լ:>whT\X\aL `-47]Sȿu+喕T7o|˯ѣvMRu.gL5Yߝ&k*1ᛧ+x~d??90S>;o c;#y1~{NI#X_ gwΆEX]dƣ%))Woԓ hx哦#aBlXANc)FKRRQyJs $'AY*nPXy1 FP+xRk=Kʷ$u` ܨ "3) Yj)NU\=jِyP5r9N zUh-Dd9bFKJlYsF347lyK-@[kzqrFܩFGCOvuK>|(;y?'h=z7r~տڥ/x[>,Yad)Ffhjjl l;l agtԏ݆ɁŴxI{B_w^1cĩ‘!S+ D9'%rkAS?%@"=@)9%笒_V9Q^5[Vhr) CpJ z_?G9"j:nIxhnlp8 Ip wǾOoNg.?& *|wMVJ&k<p8*aڌ+vGs\׻;-Fr;W-\!/JYܛtYC~9^?"x0wKcӓo8ܝgEǐR):mjW=@V!f&Zl{_FMj`xt@RkpݠP<ƴױԕPzZ#zs\`cM`-5]m}lIbEᓽ#yT&'y^ܡ[,=`\=gyvܚp8sA“v\_=r\5e?|^;ž|~sy_4S4frlD:B=CbȊrvw=FfP{a/V_KpTǡ/8Z䚥=1.%3WfdY}5=lZeJfKd[jڢ(C)QagIKr({;kt ROn4,gW0 0^bs}c!oʫ׸)q*<MpMd s_׭Th ͉cA?*8$R~ӯNIe7U/sG.ClTq$NS3+hS U 3syGaURkK* QŊD VDҔ;~8Z>*7rѴgӆ*]$KN3ZAI*{ɟ{َ.# k`G܎ed=.PIu;n.wݼ~;O+p8_'& -On (nR~ضvVw(N7X]Ǧ>-YE-Aq|2[@iOjrx+ҭI,3 kPM^wb#0xˢ3bM:t5qcfvqa+6D߂AKޓMQKn[k#="T:(5YY";+j,dzѻ:.'~|X$ݝ2 U};ϺgIffNqy-\)4?9 ڷIºXO g}%WE*f Cʇ(}l?*R l$IZ} Ð5Axx7;@_0Ir6bŽ;"P\нY"@vjmS5,2z)+M_tM^o[ғK25YzI5R`)ǞZp8#n/dOac~fWFԤ>1>5::ʟ¹AˠX+Tveb<+y2 y<迹J6Z^z/Gi P9ЁUTqUn~I4u]}?2 y}#;Zc9TU-y!To _82^Z᠚k # CP#T9c'QJkTH\vy\{چTnwv2>ńIakKT|áR\.W<TP Qؑr\)ɹv+jjn["Mt \ 2D j߀cdS99Y0F+i1p$ T1F'82Hks1k,D_i_H n) um9A%C 뷺K֍)".1ڐFᦑ:N!>.Y+ȻPw.W) bI>;LB5d:ӾhWcޭAd'")1PFFp[K|'kx"Lg 'cD4&xa,Ĥa*0x|Ӻ+`udhȓU]jdU0P޶}@15|:ђ0ꓓ=)7"t8.#YL+ <I]Q$874^y=EOqɕNςFvl`TZdw=^[]ɤ'c$'n ,:WOo\P064^ zúY_kk"Bwt8A~ߛϮ|ao!yaF9Y{A Ck"m(P6,cNDa%B#d$kb*JqH5PT5bREJ6ЗFss"0? wD9q ǷU#+j<ט3ܖggOܮ0ȓRiHOUm%UA@2ܠ֯dVIN zH(R.%U;B .Au&4 ܄Hn'1N;˂7i&Dk?gqm<3@$>М{KGΞ6QN_;g劘.E/ /Tԥo/B`品uV@*[: o[L[bd0[J(4B T-4W,w_vf+&Wז[Ԗ*'q %OVU]ig5P=l- |[%8 f%PȬ H.B/_ Ń_|]-CWRwz8"זA;RYPJ^q9TU< z.r+hݝ%.nf)]Ht0نè"ʄ% #^XC{ݒ3M%zǂ<+kxl5]%;vVKdU֧{+62fުͧS)B"Z@ D@f`*Uap\o}bFǵ[PgWZTsr)T&A0D8KYTLײAH&Gj:O QyY\" t=ZӉHyopsawQPBLm٤;Ń.ގNb;%alIͭբ TXsVň9 тH\*pA!Dv|P" j:O ,M @$ec82[\\.c"C) cg6ަI﷤QE;e@yJlnO6r6=Y(ru]v'Udq˦nP@ ajPɮ|Mr`$5i7#E\_X+kGZƱ~ <(:@1yfS׺5LRļpT؛EU@8xC;"?W+^2(Y7-{ui" O^/ ԬgmrdÑGbU\?Yx܅p o%B1sbMp\5ȓG OVǕNG6YX%GR z !wo#Et8tr;.c>4OK750Mc)ǎ6,[dg 'Ӫe/t*"`nyQcBC炩@_dްK ' X@C\`{Ѵ_@‡r̩aJu.]E.; lzUF i2UsT%UqFi[0LDҞYD?i$^qapV~RCҹxz 8mZT 腸.VȝAɓUUW>)nUP"3Z'Cwr">(g!] }O#~.s4v{%vF&&k۝ғ-6ߥŖgg/bgxI:Ͽ(IAZv:{ IDATwIhwGJ"zL-\:竲+SZ9tb%Cq.#]Oօ'r 'h ͮL[M%뗕D,M]{n?Jo0b.dׄQ_ G;*:q/vBm-1 o1kPL1:NztGfP;;$&|72|=:1k'Hґ ʵ9P x l+P+jCVŏd#.vKjCTz3avVxYZe'NYwHk ;n\ } Ɵ<\I '-UϫνC'ˤBy(@2y$c}KF@ ăօIOZXyAMV$iZ)~md3뗂q -W.ZT6酨CR=pJtjQiőI:rInEEepI  :2\%xq.z!AP_R-63ŮIҥ /N rɊ:ի)V5h"*z,r}AAz=TŐRQGd$r5j)'Xo9ǝ#O}8Ow_p~xopA X"dk`\<ȓ VL%G`D edۥ`jkݨ=cv[̷s4 ၶ[ ;UƗdd GDŬKFaU‘|j.PSqvX3<~UErU15a1F3zaHwxԊXڗ70&2~zq/'$' @2#TKuy}kyV Bo/K:.Ydt8.Sץ]{dyQ8}^d%BQhݐ 3Y&<*_SdSyXHTnoTǽ@7(Rqm8`\oɓnE յ9O֊Rk%r ;QS4ݖd[rk~I.Ku]ڵG6y\d,Hlp;K+ f̘7)\v$HCHA.@87C,U2'pvKfG V]nd=^*!ŕ6Fn Z5ȓ:mG[L4w}!rH{JN7➸%O7ix(@2y$D r#KY`$/[qMr뗂q - 8 o3t\^A[!h0kRG*2d(Aܪ۵/2@:,5frBMC{[Hh I˩Z{_#q' [p@ n_3hR0ddV׵nY~[˗^E2o)% *K`kY__%a6wiKIȺ%5R.׹4,>&¹Fr9O bIlQ+;T{ɩˆO8M >(˭KQj(nlLnvوL_Iٕ\`q]]] _DudhG\IFČס" dDpړEx' 0Q#%dV___ 3 gyQC"` CqdVյ~i cu\Z*g$Jb?2S-}_,>q:i7E{\.s=C[,G5jxc(u%FO;(~%mBo3Hv5TbB#Guԁ /J* OVu!jP❓}1Ӫ'2Ha._㈺@O&^z{e;c?i;DK @,C"}RڬUDT873gd%t_PGCTtïdVIΛ[S[$*Bny?b,) 0g.9Ҩ4~`aXЄR8U$iU&A >Wr :)#?ޙJV y, NGb23(2`SX9F ֚5b>#T6q}2YFdyƓUp=Kw\6v.ՑSӳc>jED!H_ b覫'Y$S0AVUahzl8ȷٛ-x@p%`Bc#u\񲄐 4rB,R`){?ڀp Y)TX6(%$l?wRݱB>#&XK#qV Gckv:cR}SWG_=|Ǐ̎NTk'q BF ;ۯ+d~ǥ`\G=8hTFr,&N_µ/YdI:BUQl* I-{¨eo+XB^PWW?+7_:6yu<;ĽB9%"t>\x~FdbZ`h0fS\# 4dAi` (2kR0nu⥻f\ϝ|yA x89op.2v3`bV5c T3QK]Jn"2w O@5-΋__l[ɘ2HlnIgPM.3-9%Έܕ;[ I &ox~jڰGȓE 9O/>՚L.qB.E(x;JoYYX 8D^R0^O؉Jr5*5<`#l09U[Or%;#5yLO^u:Tn70r]--Q ϯ(^J`IIXið:B\Ҵo*'!"/j=o״Xt)ZPb}aql%$ 5LJMa|xb3'B,oxuɪ;F`궵wnY{WGƧ:E%דI Xãf@ߌ#}E2maK<.]pds #<&;j`W[: ::P֢ 58 'B# ܘPcg(=t;j 996W[CMy(Z2kɋ;;v5mnhir.*o~&tp\P ذorQ0뗂qM$C Ҩ=jٳy EZ]CF%bsb<zm-@(>/,%B쵬2fҴ';t }Y ')8`Ɵvkbɢ`\|]d-hn׶7[DT:;5}8aYsKoWTj#nw]dH&PntG8g|$0 lEwH&뷪:@HUumJk!SrઈX_'V;R8 GUu4j٤ds;;Uq cCU5ٹ{\xԡ:h %` U~0l7So\[3!!VeM ;J+Mrv{yLH 2/쓝{IKOS:Sqc+_En!AS`n0תUHebpv'BK b$d+]]ӈ3c>vޜj$^-JCnlm^{eϪuWaUݎMq|jp\!$n;iA֯[]x\l]bq0tR Nb؊*ɰ@$&} $ Y.;)ͦâ ŝpApR펳-j׮F,@O Ŕi9Z/$Uy 9YQFPC@~h ugphԔ'%CwX ^~ˏ>rn6'͙/ }i{׵zp]G=R0.}p.ڜW,3cN0(mt`/H@<.SѥQ{Ԃ+u]"_(L sR}TLHN" >l%"qst9kx?*0"و br`!AywVٗ\_= #aQK5G| ud}䴛Զ\X*7"5ߝ*<,v_cqG@. L>Ҿw(BH4TV'@rw, 5 "Z.d]w \M6}yvШ=ȓE dd*QDuuu2 T_ ƭL<.d ƭlNr=4*1 |e|UB0AFHb+`jzM˹9+UE"hTr8mVJ4L*&6A|\p(ң2G6|E0;IL A,:Z=ZXsp]L9k3If1jNu:H!CzR0.#=YK>.mRg< ś3s?ȯBxnu^L|]{'@H FJJ/Fd#ԨJ87kMUө$z6p/ d2ke*R0.݂[3ࢍ T9ƺKH;ukU.^eX2GJlEǩ*SUu lGW!5qT$-{E<\_n=2* O)U/D$ 83IxVݚ 8r.zCiz>k$*׈zQ:HPH)HL޳gmRm 9{7wd1iXЗ,ħFGuLwͶ'OГ|SUc÷|H\!e# OxYӰ~)@2Um~Bo%+,̺:~1*J]l9btK[0 h@:S1_ѷ"§S O!nIh @ GN@|c2ܱ9(q-(O5I,FZpىm=Yqw<#J~y?{jv.vfḰ'x\BFF_ GXܳۅp\@2l~A<.ik8oZPZ|EAu=RE|m0 h ϿZq, Gc> U*, PpAH /%5 ~"DzTXΓ7dY#Gis?'==O0i1C-Z\FsG/ j˕9"5Sr]\9Bh(NJLK#r'|d疱p8]fߝ 4OZ{ uufѓ*WK}v#G>y0ړ(9yvK[:ݧT[>3k7[,CA.!E2._YauV k ~M$CE ۨ!_Kt8d֯i8"yԏG0º%/%1\iJ1\$ۿv* %Kwp¥~/Zti}I2F] 3)\[JYKBK~2ߦn\,s9ȧwO1V,)m1#g,{[iJIydi/gf[ j7{FOlgW: 2̓Urb8m[&:D ѢW2:raʪzתHc^4}lK!HvXM_CgH, U>R9z>+*'#RϓHb+~32aIpKQZTPq)Xb1;jF.#{D,\cǦ.Y|tHh7Vf\%A& ?U}B 5aJ9jp\H,YUuA [SQhZRRbek♬b8D44l}]HPJj3뾑+ TբR];oɎe"M1=gQ`9/ʍ%g^ xX@2fN@zseHCKЭلyx8.(6Kagnѹs[2nb![LbJ/! \ ьci).v!\0 1)isbhN>@[W|: IDATJ-^QIR@T8OwTA8?s TneW#+6:G/ HȼBdq/bi_WC_VzflgrN5ܹ嫟x޶ r{fltu2|!kyZ/?bWPȴ{h뺼A$mQcG'OM0|fU]A@L P.\)l2p \:I-( i1$(T]T%ҕ_N֟&>qa =tW,4y, l}Іg0sFڗ83^X*6YQ˩D n{k8Љ Dsډ5曾W L/ Pq+873O|cx7?q?ՄD".@(0O?gz$32dQ0n\%U*΂=369xL ~t7J46iuO?vK{eIEC1ƹ +7tڄ/Rlj癐51s!'F[k,K PҤ 0X%wp_V @.ظ<"H>w\jm7jH“xBb)}['{鱉ӣK`gcllBQ2Q$ 8"U~CJW7OËU꺠#77a4t]:W ݾ5$2*Yg< E6J1g) * R+6KGsmme̶.)+]NF= {ಔ7*4"8eՈa@jmmZo_U5V0揝/ 2ŊGe,p }ͽ g3#"Yr .͗dxp\d]d]k vٷ [ܺ~7tӃwO)-@/Df;5E<L[ GͬYxC"ͫo_~{鴒E[]7[zqKxEG+Wv^3kpS"[*QˤyV-14Y꽖㼒DvMzRV"ojqV(~Žd)%(-iJ^LNT=wU:NQ iL'eb^Z*gڄ3tWoAlB5ޗ#O%GX`PXCz +3H?ėJзrVQq3},X+k\3YZy􎯋G̓H#ÿy_%?vCYK}_p0_o"Gt^,11@ eT_jߜ>;L*X֠x~5Su\Ƥ}ߙ;qyu۵;RDГU6ix=HB(# +Ǽ;ZxSL(~8Reo:F W&,ܹ@9@3ukOzvrrxri[|xr!A<.y?k%OVu]h8G%;ǫ &UNpܼ@ cF,lv-bŋ=wLB%UΦT}kfy@m܎IJEOlļN Z;DH6pٴ! R#Ltӓ>G"e: 4Mqw4*( oYL\URE#?)w[+/f+JƯ%"Pe<*tPFLV~_y>V ߈Xƚ*6j^#ͫ9Aq_ߵM*=w8Cpc{(;wn89thzdT<&UԵ00:4r6l`^ *^,. ڣ+onT$û-gN]a3+b# Ջ2]4R~hKxC?@(~nhҭNt(Tk'чU5$}O"?*=EǬ.[Ee/*G\=E@/Lbr*HJ r+UO>@qirlJVyn^YIV&{O^ene"qq8k-$J2"bܹFT,=SiL7*9Fj9 GIIe8SlkTC i*b̍!EjvxNMKq1 ՘q( MS't8.SV,}ߑySƁW@z-ͥcH߇^q,j]e+@ ȱ 'W`C@5:S ~bD!(!PK=E@ L1 (DHPm'3m9{z l9c5eA@AypR_V2v~=I%2UL%A:nJK]0nw/^s!c(JgF']`^OV UHvwflcg.F=+6tO0$B]3=l|?׻w~~zW)@  t_iHÒbfs[ n ̝aNp\_= +hRۗT}%->Ҳ~ kQ섴-1A>qM%s=&4#'ܮ1.- JB;?Y މ!TC E1/Lhtt gWE@EۃVBT,k[Glާ/fpNœEՒEm[? ΄=;uc/}yޚ[`yܬLO~ܗd'2ڃx\!-Ж8n}mJ!] h0 QoNMO\:R7o0$a8G6?R~IOw =ɥb<w: j:ASz䄧w&ŨTF*'qꪈ[(\&~pS6gZASvHF2 '}( kTn_nSǼ0Zq3w{Z.An>/H< I p!?Roel#6w|; AAxd-h_cշ}ƂbqGWn>;urzǸ Wt_eX\P;,<*RM[S$EF4=ȍ~}s~gބ8hb Wb+H.-YD^m]kxaгL{rAqݣ$10EDG",0no`qM]Q0ջ-Ύ q$#߆Ҧ r6jn°{G{2Q0v8.r|!.>x\ nCY|&̫#>f'<.E)M0 ?1_1$W%:W./q뺴kh .9dH+Eu$*E= u+6 csZL^:J_weϻoٱs3s *J3gߗi{yT /LyJ#tU\7|iZSx -fS Xg&k#A Wecv+LU:>iu -%Jjg IkW40l08xxyGDrg3vQyky gĈ ~kph3k!uv|fIwpK<.wl]V3qNT YؤEH."E*yu۵>J<.@5?  Jrx\5MkWniXմ}6;5Ξ89|zvlߓf'x\Cm!\*s κ! bYdQH*[Uz ]BniBEj γtW㡀}ד5ȓ z\.±!Z4q)A|M[x\ Ja OڙA*a٩;uSӧ@\[׵몭-xR41*qb܉͂-\ʐš h|c` j#,*x~ϼ*6oaqWY׵ZbūV2+zx\+EM0cEoLd$02E< G8zU;0J|`BX{+] T "EPZȥ56t҅Ȟa$і"Ӽ D0NQJg6Gz PR ǵrO0Mġ &Jr+Сn6ǵFpe=< 6:;u_zFrr ;vGܶ:{CO" WPS<7 Gwk֒%dlyƐ" >LŘ.nx|vx@s2Rn|PTj)5߆erF`\<[ IDAT&h0[q/`{<|ǥ{CЛu]#ˬcw>߇~8QncԨmE cܣ-}ߛ>,u̎N̎~{ukoیq]r)xb#L Ɩ$Dzdq E@mrHل]tDy\=*ZJԷ06vK&ǭkj`˴ɾPu޹쉓/9]Jl"9pϪ@S'q65=cG>[߻krՑߺ.&%><.R}A`\BO F5ݏ-(s*!ڵږn#F]_\A@ByX7ַ @|4[=n8!S)VB78+bJR8="L^e! UC֓} 2:wѠZ3gj*|{`"EDA*w0>gI~tpqUn?4l,oySqM$:vlxܳS'z38/RV64% #ϡe^WDf1 _7{ 6ONw\_^~ Tnv }U,<>:t9Mws ۂ$2!/ݱh}_CU =y쎯Jv %n<"DJv+R0.@ k#އ%D8$R~~Xǣ.R(\`w)i^הױNb/Tڹm9su}+q'?ujb2޺J-?𽍈d^_’d.}K6\Hdqk///#SW"7@[ċႶUhz7>AVcjT,KjChxa #8GrB'!ؒg-" Kq:r kw*-yKwIEy\ǃqp\sS'ŋ{hE T / :7\]tV5DPvɧba䩑?>sy8.׮ /~y[}ɣZ/uq/Wi v~_@u-_3/\1|7|9FZ胗%\A>`< !rnnBA+Ygz Ut}qYCMqr97w7?/S fEJvg^qM$رUzG}.'R.%UV`o\EZ \v/vdB ;{$9,cigp[+7u4< l;lklm7<g~e t~AR~{t7Λl/}ļbvƵ©}]I=ݬ_.\؀4 g_c 2uoGu-ts`u{5W M$MZ.iuIEQLu5z|q0} ~.G1=ԟ  QxkthflcZ=-M7?qC~NnˇǓkܔw[3s{RqS,E'ό.5M-Į!T=tRuDW.~Z,mCT,J̍^K5tG˺J"PZR0ٍAȅ b^ `n P9-ޙ~&kfW؅zU\t'z F&[Qdj)sR 8JuCkvH$5 BY]uuur9Q` m5[Y p\Hl$n0wLL<..X1B9tq/v p2(ŝń\צUvŲ_}O(uNoa7C;~؞G1:>ur/nk^]N|HXPٷ qBbsEM<cxC|*;v $`SY0K"`?d{r@p_&R_ֲL&k"YUCr{ #97vXR!xPjrIE3c1/=yBg4E<#HXIL؃w!<75ûӭ{s)b}_C.>6 ޡ&|Ә5nx䇼zAfq_X4W{MrNv.hs-ImQc`4 ˦-c7 '7蓴+6sNG53d*v8.%Uf% `$r30Xp\OF"l$Ȧ{~f_?篍Ksgw|Rih}D=[*ɧĿ?U4\h~MґvmNJ5Gɮ:O_ؽpW_qJo!;DJ 䜍pud\2xыeƃZeDY M?\95Zm 3|n[LLf!$ܻhIMt4IV"484O 3h4C-~@[\LxTH܊+LIuuqK?%K@vM B^gk`yHZ|֯msCGYͰoRsOd۞s{"kR/4V7= GuP\sZ>_ykG:Yb!_d?VV%eb+,f=\gV[K)&tj .m/fR`&˪@i*Ӈ򎐦JKK]͸j k14[#7{T "usBrO8ӣvH){a$Gizڸ*3!T$|\,3\qu!qCGo7FM d,c 2G)VGpAɡ q}// "3hFx|Oϳ嫧GIsC*g2ukMzlP_w)ߣhTX{UGjm~o HkpBm?d0l3j];"z5+ (NrNyyb)7ReisU{̜-kAdX*<ܜ* GS-'F E^S#m(4.oф}g/k%>13oK#t8nd ӏA.3:k qMulT9ݔFH ޥf('@b0bsbCAryE7Zpzt[e0nli.fB&Y7ܑ"~Rլ*d=R?gHRI^c k{-0̄)-tƇSCg񄯈/IKfcG/+AkկN.$CsX䨊奵LtZ HCH7,LUyPDZgj#| Ŀ)D 58+܄Csp;G!N@.XXX^zqE]l-0jz@58p\Ȳ+M^[C<.[]WVNzydx<.$#/L6agKMM.&K `ḉ{cp>6R~}vܼ鿽"+mXե` &<|䝺w }7zqY44ulk`QkshT*{VfM 㫽#n{;؃nthz{jl wD)F0/Yu8TĂ0µ]MC0#Z…a+EEЀYwMXugB+Z:gwAoyv\vhZ?p760~GxŦZz kUd2*Gqte ޛFpCoJ+(]^b\'f4~iI#P1ڸs@.:-w]Ggl>5Q0|wQخ, ʦT:Dzl}##*%11Ex\/Q 2Ѵ@I%gvRluduM +5O0#qgƤ{5d]2怏=KzG6b}xm|jG]=i;?= FcKv~~7k7kY{=}oliWK5.JJ7&42npR k,\XHPG`-'&ffe{O\a ," &P^W]Uipƒf-U~HkT5q2v4Dj$̶Ņ:7i]E<fᏟٜw*SrEAEV ~0`lkqs)\-[ړ`e= K/wmҾgP`Zq[#?jWJLMh_DY$u 巳#S$뗎__;|m`I| k>cAߦ{shZ^3Gw|s~jTi ӷ~m~JCuwh򾮗ede>x_8zZ?0ӯO4Yh{*)pxܯ~S4LhŠ#pEJ !0 GwL&gᅎ(ì4FZ}52kh _lEZYZ}0ҡrS.$oƱ<6zz"9]:)>#0.Xvf`~/o30{ַ&>bu6Ɩ]*/Z߳kIڥΑ C"<.H6qW !ËїLbgᅠ1s(oOb )"I_yȕ[WyEG[;%7 [3I~xܖ.)+mlm;PZ~+Vڻ޿#qUh[?~ ]߹s~OZ* t^u.Krjɖmä@bINblK{ X=ysC&{oMrFe=blI0oe @%{k~{zߚsC#㋫K.to( oZId{BHaU~U_r <'Q>õKwbQz̚j&b p"Ȕ+3[˸|Hd-]$U)U•6!="#"WDn"zc{uS毷RZPe1EhlZ+z)GSrE5!u=P ~XrC|3T7HE uؔ!B]1x3՟)zO Yd&Æ;A9QbV%'@4; \ZaG6[޴iUY\doJy\Ŝq7|XέL$ndOEխ\UIE XwL-oRY.\Zⷷ{hL#OT%ywPqjvܵh3p_?͙'œqo~+W7J?jllv߳-w`ӫKjV7oMoQ-8?2ïஞoMXeMĥ`3>Ԉr"ʊʜPp&\1OɌCbv `+ 5(ũ&NW*Rw9k 2yISEif#8Zz}JiP+VkQn.Ő2^WgR;=D#m@ǻOBD6?u )>.W'SDʄ^z9\)^n~{'ܹ<!ʕ |y8.x3rSz$ c8$  &p̑o$_sUwĥf/1GHNy(By2/Y9qUUϑwO |x3ll{NwiW=1J{HȰ& #~;7t]<֞?L>Rr M0 CWi)G+j]޵N"Rb)^ /[SF6/w"6jA.p3jȷm1IOK6iF+<"h(me?&Hp R ʅ50q,-ɞ"7zJyfkzL *`՚Rge%Um7&7yw޳ȽqX>;+Wq= "@OH>HR9/G/,N6jXa8? +U?p_]^Ҳt~wґcRzg\y򅼡xONz"KFfkXByg grJDb鞁*g[RyEşLJMm>If2ZҨ%oIUJL?6>M /{~d|pq] y%W!mڵtf3W-=ז* +<⢗A"c_-J( dx9Ⴔj@bM`H[*ݴ,R)%BzznNĘrխ!ぜN|5ㅭi!m`G& 2}qwUpad|7y*Nθ*xPn{ ݒq=&nJVE9@FFTH beFy.TVFk \${sW܉:vd25~FzbQiS#gM9>5J[0RD]J%|(5yۊXg+dAz8{xS%\a'c.XT]qw/y\rSǵ^EuOK ,g_iX.ZZpd1GƠxP*ag@Nr()d#LKUޘ6|1ع%"g0z6v$0;vi40< ,FhO@Dm\Y5B6av'Y^ޔ &J3jyd #]/y^k~}K.~ '_Ti(7_:wjdl(Kߜ䬰Ut1ᮝ@7!گ/%r{ʊ\x`̏zz edACX9 Tjw] ,Za0\njm՘'\ HW1WTnbR 1ۄQ*Y{@zKكv< {fvNB ]f9Jw~V)V|UHF-Y+[&02#OuwwθEe%5߱z]9`Jk\ij{k"Gθ]?vŕ~g9y"⯤(< q #uCy1r>9`x[>-N/w`H5W;H*b6"ghM2TR?^ щB A\˧;%ihQD0v ՖMs4X{0bvZq6m ։ CBUOV8 2IUZU٤kA9q\=\HׅarPO{/77"05@fbҪE!͜`@ IDAT"𻺐 9=U&$9s8TU|Dqo_$n(*-ocM}~ĝ%PVnZXlis[b9fFѧs Vn&qU@=ͨ|5mH;%fl\O^|eLa<[vM;f"Զvסp^xסB۬lZR4g^T)f=C514LɀKb\X;@C|0JsV$ɵҖ mLlprсxwvѹ¢*:u`M @tനl$sVX(ѵsI)$7cʊl^\&eaC^T&(%do.kR"KA(҈X5J͇HH +VuiS5KZ7;Ld ?`@$ǽq}s&Eŷ§;BԒ531ߚ,ev\j[zwV<# \\~}wx6D5~Wwd2…F6SH)f7Wr@U G**-i=݄њjbߓfNڥL[ԟ#Fc u zQwl)AjN;Ȗܡdw>LS%b`,?9A~R0V& n\hg+lH1zfwW6DN Hb!wtz`dt}؏vc<"]<;qGڟ}q ?.D*DžMwͣ_aTEpm,Yg'{i=߼yt󸆖,m邻Os8Ómx%[5@Z0z@d1#2+Q rkTt 㓽zrv~T'XZWS+s5Vb=u@%~jk0Q/wθLsa.RpQ* pJ\$Z#VȁZdYd-DE S8 _h=Y陊TDvkgwxhvHlNl%uvƛ<"| #+( ڐxaa%K޴5O|Hpad?{V:Tq/|&U<"6߲Kږ,<31lms[?z"ArUGVt!N5޳6E<<wگU8|S)ֲueC-(Ga|ᙺ#݇4ֱn@}Şo\6gWڵ#fxxx( u2tj*dq'QD&G;?}v( kjH_li}[h:7ug<^rmߺy_X(7l=ɼ<'q`^ /,,$ӁryDpHx^Hbtyѕ?FW q3LqUE60TIQmFƈր Ifcuw9@y\P5)4W_ LdcݙvsEQ|`\FKtI7)a:5#1%c{Ά#ь"z6)il *O*7,hKm,6Qo^[Y`?-,,$n @1G*%9pX0t'ۍk~6(v'}Gr=7Կ/ρqErK. N:g=Ă-,0L f$ؒS}ǻK?tˮ/wK*+֍v]quVԃotpw3Ob|ög&^jA&q+m,@fK%Cuw$9,J 9Ɩ{wsh8[$߮:שl~K׮&FWq/IPcCl8qjUΚyjM;' )S k%|gY2>dYJuꓤJ>("V%j& }ua8/t\(+(sVB0@]BЊDv=#MIu\õ A;b[SX[t8;;m_ 0P@O`)+'TnĘH 내KlHiLԼɜ[GDi6r $ .f$dsG'F^tSh~|Ͼo.O*9j{ԧ9+TˆLw}hY]5ږTqG ج[I-Tk/w%U+Ϗ҇{w1sq3Y_DT>mRqmRn"Bۼ\8a P 4CiÍ %ۍ =ku3Ky\"[S1BgÞ.\q[Gv!RZZG 22+fx^MA~|yx$f:Cu sELZqL&_eAuwJЎrUE%RfYuX9`a60E -lZs[푰S"-уȵxH==!& t@= Kz]$)<楝ɚW "1Dx1ɀ9ûQ$N\ 248†2"# !,<;ସYy=Ėb"y2'[ad>@ש+pFn!B Әьno6T)0`s [M`h+oPz7rp\GsF<]YήY-{PS-[hɲ(}nv^;i|(s8G Y?R$<< Up@d!f2-.$L2V7_9P=)Zq~t|3ra@~eL9/N R͐Q3`~D^ r_20[m(J%j^PddǘUAJdQgridj-}Op*X lAV"Uk^QQpQvr[㎉|3WV$w >zAJ!2qa$Gz:Q[Vt"u$$!AQb$ iEѫ/,m!; /R"5bؚ sC59HIa׼Ȣ)hd5?j¯jnNdU`"2&IeJ_G+Op@3]jxQ8Tx8f!-=#;#MSDiHʛ67n&ÿ<' J"k8.:gp\. }C/tp.9'7E_7k&<<_6FZ{#t{qI&p JnzFڟzY)qdpq wx9n֭K.Gsj X a_)q3LyizQRVWʆ:Ff#]/9"V_=hR˃ >IὖMM:rIhnpl="vC]pa6I>M)#x1Ȭ(!VEZO`Z Y>¥(F81#~(y xUCƌHT+}v=; ttcdav+s.SJ9'p\J**/Y|}gwt>rȮW7[\w|q>77WXXj P=M "Jmxz=oCqma49R=7OpZe\Q;OT^Y[-欳 {5!qT#.f\eBݔ͐Ԏ0l6KZ6=2SkLfEIS WS60DꀵQ"ʖmLQ*,j' tRc+'q"L "aig"gPֺ#\{/7=;6tzP ܉]T`Fmz EM5^WCouNUE?0mRXނh A|t創ilʫErFd<M9rDVVnyܒ^m3yaM&Wڻ{w=}02dLL {Z=G"&0*>k3ʎ.g\T"+!W- k>s: kȦAù׹qwmI O>Fd}iEEHkdeۑx.MeNq1R`jTnqu TPÈҐ{"9?ö&/,,, $fjDfF5mԬBvZCov Bݑ% K |bvGyy9g<.msڨtrXe㺊ړ=B;{߲%+c q5IJh4:[_IJ?{9wz_jC\bA,AmEe%%C.k]Pz]/gTEFIuEFĚbh9_mJ]\Y~sOF IDATݵ[6>|oH;gPO*e؋E|qDY{+ee!o.xXR9cLH#?`#k'3\v*4J8n{Z'4I9NzZL Y˶hTm]Asא{,ޞ]7oK;`jrxELY+,5)nr;P/ݮM vR2,|>\^zT& ڛ0~Lʰ7|P.%&wwqȓҜs-*+Yմ^tT$]c2!asck pSKC\cM<|yMiXfcMͷs.٠\O*4W!{xq D\گ C*+M/alDÆ3ʈorL9UIS1V5vJAZϒ6`;~Dž9_Sr?\r`-)7 N5 2UH),h[& 8AUNr$k}K5É P0uraRA>GGz~#d]PVRѸM8KSAs560x<"S#cTڈ72%+VݸcH}G> .g\3 ?W/T02}S]QTVo7 aVR3qO +cWJK-|UvS-5e}bF6,^әEz`m L2؜iwpbd' rcNt; ͷ`*R/J-"en-ĺ#MQ"LLYRs=QՐ#ec2XML~p؆S 7kBxTG{*me{q~,,TJ!-lv [@u$;,;I{-Ơ!*8s7ɼXSL*kuD792~k6ұjlA7"(} E8y擇w+3mL+8Iu[ٴG `&'t}C}XXQYI/klƉ!sӋ}C<.o[Zfe}aY2}d.- ͷs4|Ss Ç*)~ԩ:C522-(8C*ԤN`]eX2Vvn"Z xIKǤ;iEJȶGOҦÏ7L0FpJ]3@]KHC7j*74[V'})gb{<ߊ#0+0^"gANuUV]gٜrE,G^#ge-iVzoӕMJߎ=ֹo6=&:%1}8xug >󸉂/O<<<`/-#aEY+Μs =s?|sѻ J~/4'/K喭]t]I'~9qA L os}-\\LLw^z獟ƿs(h.񸬂GH#7^UT嘭EUbQRNJSs x#"y7R#<&jaIXwplyZk󱵍YJ,}m[(T ܂^ Y{QPN[<iEu/[2AiVA2fEl""16?@\fj"^7g>es^iދ4:pɬz77 uᦹa uw<6̵GQ7;w .Kk6'9qkQG[ӠN hM9*ҐZh/^~g;GON h cA˖qf?Y:%#gFL9%y 'p0P^1XUy\XwE3>0n9j&20G4P`/lOH]pak|GCvKTEޒťr }@DžO294 $qu3jZä'됗JhpSt^Ѓ-Y` iSRP&pJ{TE^m wXk/X}|%.P > >Ėc2Q%=ߜ؇'Dt#YMvdf,mKyS5"56@q4ΝȖ&1TqCUVn0O)E'"h泥2sFWA5vuEha8V2ٱHn#&PB,6ճǺ^`q#qLK-kbF[ljfrm} hT9 A) uac,SW [W:Ό6W[l6|{< ~_ wK fp&if'^nyj2 =<.(D[TYY\]A<_ms\%VcȑXRO:?zꅖ;7{Q9vʢ)څȠ,*qH:*JζCl6%fIgehɑ@$#pX.Q c6BJ )H ʔqm1cr$sZEv\dFa*$f.U}nlteR ++gé@d=[$dm(87؆J=fJCP `Yq:ђU=bPrUAGr*&tx#DNX;‚%}!y#)Y~(`|'ZK!=G{Z?oۍ#i\swzd|9gqUgMʽ`YZtNyr*+gzގBѼg;i]\}CC]xr I8-֡z\jXF6+)E*&ڲ2lX̙~!X Z5Oq |rꌈ -Aq Dݵ$2 }UH㋃ËDҵzw~H3..g:3wu;*U6_\Ulm3}Cov+ D<f&29s4q=k_>yxxx~ilq217~O?}_\+*/ñsB?{Eۘ&7; һfI="th䬽2)2{ב4 JV..JaY_;.p(wp[0>+ 1Hrr1=Q%=7ֹ}.DC(\.,Z⒫dw$NWV?HpV\\6rr4]m<"^KUr $5!q  M7hѮVʕIBǵb:7X^:!BJuqNrՀ-{3{+K֮ԩ?Otγˤ~k8ULNNFJ]L[87,.7W `+<5Bˑ1A2 d[x&H0U!̥q[CY,)37,7-&t*0lׁ-X8YSeu(p `YfN>{)TGM#{)A1hL(C6kŨÿ9XuS[A.]h"d\!)YC~0o-Tώ^\,L TYGe+p14h9D) DAj6yjI4M/T.9X aD|baE rN< {Y!Ģ 㳑HfPq͌@;[rlΠT a:?`t/y\B%Y/E]aRTas:Y=v eFZۀlsEetm7j S&s$ ]Љ$75cJ_0xٹSXF1}7@KeYZ4˱3*Le g~eN;@r Ay}V}?)&e8a -D\)ilʖ$6*c\ZhhB]d>R冡Uu6Fjʧ0VNZ kѮ^ò\'X9tH&#xsrSߩ dIGٜqOcNhɹ#W,DU^XVM63TW-40Ffɢr^%u%cѓ<<<5'05:/ސtbF:sGگLGu*uqcBħ|(Y,EiRJ VEvreylC.5ҹpLS"Y;F圻p Am1]/ZD y)9B޳;ց; kC}d֘=)U&҃24 kW.x%Pf/Q4^QIG6*W<.`m$G/wxU@e/h2NA1s$2gb`8dYd( x?ɜJ&TBdpT7~w)t`V=?)Ā* 31J pEv MX]Ն e0:H kxHp" fcMDpXjY}rtv:E n)NYɻERf7#ni"Q≈QEv_Tϲ_R@&5Lx lI?QupܲCj=h,k'G,@[QÞ|uFv /r{,q_(neۇ+67 5J&esoIGY5fMȊh @&KLI+2 }xis5DAEPU+]u* $qjs󥚝>x4ω&֘ ~WUf#u]ڼ2u@aΫɪMaBcMkHOwP_"WB"y7Y*Ņ (Z*F#{68ZYn++o^*|-(rTp̝2D@R""XG9yhC5aI-[xK,!1%(QC~v9qݒ)ze?EdIM-hK#S_)*+y]n8cu3npxgnyTnyrD*5zA"CnT{xxxx$p<jJ*鑱ʪUӗ79R$o~ۺy$GjP݇Ȝa"}xEZ*+@j 8d̯R,H-SҨ(iz|S8?C"j6"R 5Fތ&oGue`=Fd၏6;ȍd>}yҵ1%qUʝUUM~/,-fLNQr%U TnpK=<<< ";ěReu"lzzZ7w3g> ߪu;39=rW֑"vap\)^\6 V i"gJsTYss@Z*(g ,VZV5kdb̞JR7hXmM-uOă.5>9 Wf7."59l| s'W)NVSj'HerBOPsk5JDYbw%;n L3RAg&MP!8!>Z<<<<< -DoT9u~[zy1k/%ӎÿ L(7;_uΙ. J'Pg뢔?Yph]蹰uqo@#lbS|Iˋ((eCsFE:"qR8T\n)Z[`Nf9fv` VʛY4^u@!sGMb* l5 UUVd($E;P#zL2wp`v2{J[Nsg@/OM*=5eĒғwlypZ@W:I%kzxC*7=& g>43y+Wfo2qi ?)BG:%;WRn_,:Dy͖75XFG7>dՎo].,+jZG%o7Ḇگ]I<` ʲV/+벻2_d#֒%R0IJDAfSpᅩ\Higq3DraV0$wk `gB[|rVo%X`UB,; p1Z.p\ ZΒ?K#-'o0㚰,Mt=abH lme)F$4ב L5/\S'Q7d'^,m&2rVa&[:YQ5z"K,g:Geyq(V=|&nA7]`jhq!ryMz6i\׭ z8W9sB\ǃ^W xt׏kݞ{bkĔHU>%y\9|3/\.lB`ߣXm318{ #m?r8ne%kZ\\g\=!k[\ra<,~[F!ns=Rc>xx'{b?:}C!9!Fgz*M`zd}G4/T[RUQV_-G30ua9q8niybp\C씜N X$hvdwzdDkד<#ۿ'~P o׷Һ4igև~)J(.{t9ZV"7>[R2Dl+u=#0cJe$2MƉ(u,c\wg/̛44/k?eɬTEc2Obm`y;. *WtFYmhr-|]b7[b(rJN5crwو&ւlv WU cTJlaa!&sæt!|)+QRSL4' dQeT5i9" #zJ[Hd&״*YbQU(22gFqzd7ۻ? 5m~}pq.jd[e5!JdFo)Qu.JQ&s1dhҢf{EVof{{ݜzJ< E'c3yO?j,q2VB^ j"n -Lh/)soHx\`)dnS-ffIʢ7fיj72 fIJ#)^fsjy1⍋D~@GSСr)/gr 5؉b;;ƽ=qmC㚐]Bz/HLx-3T%\ZuDF ձdѝqss0刷c,}A\Dp,*^7UzB@+O솳G\,.e[v5ܼq ,YLhi)q1+WZT߰4g/XRVg&<@=qoT?wЋp\5/_m y}?SzNJE+?7TxYyC 0~g&ǻmx+%3bp8r|u໋k[GLJмyUwj.f&Gj5o^R"WЖoX_ZCjeMRs"MiX39HJxܳȮ+FR 1T"//:QzP =k9sӐofLrO=Ms0ϕɏ-T=u"/0\H'v. Я-6ЗJnMb3L Flx@;+}xL^YRrQK;+U4ԇH؅E *yy9L39\r/v/mQ. zx$ /@N*9Rm VV fqOy1Y*7x\Rrǽhġr>F0<%܈KdS )qJ;*Q:^iXݘER[ӞJ*~YㆸϙTEGK)9 ow3ܚo ~~91շRRc =Gwu;~xU 7CݚqEjV"~1rvlG4gi~a6|J%f .| ,9w/J#se Ŭl܏X hԬ4ȭ @ј@)U0@fA!z"z1=* !Y5-%R&W T=.!@ybF-Ijx3hdG[HWkr[#&WC5\мr`~8.]/g:8槕Mw>Asθ0VWs`Ǻ++a⪕^$1:ㆸiy}S6Uo>Y^ ԕ7urvb]d3??6xw׶LBe9cws_IUEe͛.:_:t~d# du|?a1#mQ=?7/~5T2Qo*c]G2'[ E/\q}㧎uE"/`@zy^YIXHocˆHGER`Wi=#:rOMx0ڈG`9D-@D OxDg)㘍 zcՎ3lM ,YS}C1KTqXXV'.\8,xK֮sжdy&E(w:%qr썉:"d1KPTZw/p{ߵ%Fy@f_TZ5>QF752j{׫]%U+7V4^F=?|wd! F{b}~>T_e:IR,Lg.Ϋ{׳;ڊjc@⒅*`|#'m#@䞉^U i .촎Fc>"aCmA󜆮pusDZ )TIe.*H5ڢ(z wrl>Es 4z4"9d0}E/;2GI;TII{f vm:_.l\<*Oǝ1L`>^HfS9҈-ur?yqb\5^Z`PBҔ…q c]7="Ye$HA5]6/oG7y}b͙cc.+W,,+T;wIU%U嗒9yԙ˧ꕫ,yGOVā?>192ַNgi5xcQlhsl6K-,,LlK[C@56ann.96klVd#J-CyPb6-,,e) '; ,?"*sVlR\\^\_)NGܕZTM3tY4Oe <.TTJ5jĦn+Y lYܩ+s&@0O4:5bU'%aORD;uWPk^0y[w[w!lQ]A (uqD,,Xzr3uw)Hy+оc-ʒ IDATlm pzRsy\C@aZ~7\ @DSp2ia|뙌nE$, Lse AJ- cv ,o岞 R+QNhiwpX1[*D*C.;:X3(.23օ=Q^ˡrs-Xf):,BT3  6ȧ *ny/ 2ٹF9JRf2;f/ѕ=@pU<9.o-[:<液yʮ\hS?oP׷3xEI{n|s=l[;N3=g&?ndel?RV+D͋ENگ]2Jݸ.;zTnz)( ߹ Fp!79"d|rUW61sǭiRӼ<_Wz'8?z}{O"n\:R{ͷxr{䬁Ã݇?RVᏠJ˗Tqb#]at[?t?OL}u+tn$nArIĸ-i0_J1"rW E#(VHE%UGueGƑ ^"܊F5"I4\{Uݵ[x]UxrH ~|#/pJ|Jd܈៉PIXv|ѐ|#p1~j\GIiXlw q%x~y[pTn.tmͺ'a+W߫kv" ql?sɝس_zwN M8qad3>;**-g-2щsG zf>]TZe"6\7ɰGqC?1uC[urƊͽvǯqꑷr8 (_=– C{g)aQEA•+N #O!#3EmJ%r[F'c2Sn^FV0Ԧ\Тޅ!ԭryqi߼4riJBib!EҸ4 SN&i+3=T1҆*8\a\D/Nя87+e"$}QqE2Pj# R x B҆,4.Kֱǟe/L6YEMq%+~oo)Y6L!qKGޟfr ^X|_%*7@:pQ-&e+r+ E#'FkJ\w[ .b)P* kXMn pja05IU`IzXI}&5y{G;tFiR#e\܋>~KKV,_dw-@'CL"2j@}|{mߟl:cn7>Ĵ`Sbz0κTz\3Rl&O3q# )>jRA.>@dqlc (,N^SKUAdrP k/P//!ҵWUxpJ>"-GgRQ'f mmP~[ɩi,HvZ(Ɍ`RMCBT8)`#cn*[w@KVZ&7~sGv8sb)SD/[p^keĭglߵOd:8880(.6pf])~3asojoYظK.9g뚖߽/},yHOˎsܞ:- 7r<ܒ~ ɾeB+ @w8N!BWHRM|gZLIЭt=h B_4ǼDFrwg/&#QȆy K2.{@PĠ !s ,DH`ǯr9P*d#XG [}݌қl)..&ֳAypOSLÎx7r>{ 6"PYiɚ_?mngY$r-YK7=~Ta $w 668?4rڼNfz{S,S]Scbc6c^N<0A\  NqUO*<>9zpW=Ȉ_-7†:?iW{3ː{붏޲`7No{8qgk;n~|q;߹/Pq#qZѱᆖUWVWzw+}ǟ1x2b<^JeOH^dM7(AL%pzRXF$4dkX ELlhj[ wre*dRBM''Ϊ mG(&@7\~dsR DV$p >!;fX έu*,ʪapEϷ#^emZ1eB (-MD\;@ _  _ϖg`~O=u}饥ْubUWr]*o1ՋJSc?3ЎyM{]((3(>п4=>^>0 0W +g>^RQlPq~ >7|W޽e0Օ7oZK/9θf%,U+Ld ,Z)[uYB$?eS2ѹ‡rBg2 L JBW"W%:熲eBSV yK:8؃[}F  5,sxM 09%^kY3Lgx0V*ٱ׶Uȋ}i5VX;۠q@*>81zIy5UDz_b+Jc汘|ZrB#TcUF5~};u-A깣HJoхl? ]-<՚%'꨷nz˽z[vA^`r:|9cwŚ]o:вR7ς*OЗY@]C|k"NiDB6/!.9We&NIUr*ꙴ[҂JIC^pvO';*748+o [!鱀Ŀ A dS : UcqH-Yу~ hK/KeU9t<(L\"<͒5E8׋ohSb*ʍx;w}<"L Xk!,(rb!kiʜ3.Eɹmg@3@Ec]•ʞ 㑋WQ߹/qU#*8)~ <"sƝgۻCIEڮ%4E R) 3;]״[>y㾩J bWRo(j-w.kg,C"%kOgɖ= ~%~SԠf0@ttvP֨<ڷ;SY 7bCBXQ1U&X|85˭AU ,տܱoǁ;>;9|&+< KsƝ*`{~Ly{ڗmL|ﳔI%rꌃC X!`"Rtz7yF39QdNk[¨\IV!l.7U*&}ב\{3O;%lf uqRT#=Nlo hTL Pj'O +{HEkY,7w@${-3{ _Y74$1Gmi|^ ۼ{:a{N *d^3#C~C]rҖ"HX8X x?̾2cp/1#s<.QY27uUK?<[nл gQc{a|7{-;{_94=tv`/V<7;/ty҆2[>| _8pl2&9 Q2WNd|UHϊ\A&+9+`6%$I;"=pb^O\͛qѼwm4q={eܤ-YNvppppHRF c%'q}7 {~x{-;lShk:7g0h3X>Ob]"sܰdwXR$3pDY ORQ{Ձds@V>D=db#.&\i>u\.u (lb[xQ2 Fd`rWR=+Ni(JfE[wpAV8Hn"ǐ8U4̍<ބK[:.!αqXOEɘsq{ 8T~7Xt>1,-Y8BdyMZu(p <d? ǝ}[.c1&O}+مsp($ @G"o$ntnU>^V[U ;?xP/ŹC##}>kZzdpm'PZeUu˪; yՃ_z$^۴uյ˯+u,.O ! IDATln?R61|6BXfyޙo7=eUec-ˊk9a_ -Vo/RaY$KqE]0J ng8bUIބ>9Ljk Ji<\'ɟ֠rt51B? ɹ^EigU'+~6D3}8J?mt+k?(K7\a_1 3QT!t iq?uf2xImLi|;`н8i\A@w 5ݹv ;P,<5-@)ecrb9> s@^`!7ף{r9Abp[,##S͎X@nu#F ĭ+@4[Ǝ۰4K8׆ڤ -(gܒ[m|WZm/PqӾNT'"<.nr ]sH {8~M J|~_^J&J*`8VŵVWT9yG~NH?fzȯ<=O/]CcOi .xu[ 1|05gЅW:iy2-7Nr3@׾E+joڴ)Žn+3呞x}S5qasJhw[v|ݒx`PFTk\'Dr#f&FE? Z"ZDƚ}hXƔB?}PŒ=EL.=neDž3t X7_FNQZ fgU5pr'b"ڝȬ >V\`)J#6%/qk<Q+fCњ v(Pdd5cI( (!xKQ`Vp刏[`S pyI\zY2Z_$5cWATd(7DAyy,8"0Q[Ǝ0ۺ>pң}M̫_cG]Y] ޽r]gM{ۗAk BqWv5ː8Ng\d"A!ɁcQ /yܙGO>aʮT2~!c$Ҟg^Uu:Znh(O>KCī/!N4q}}s9RR[m^<Z }_#En^=>ú3jzzZdyOŅgi5p HgBm0jef"N#|#Oq2P۴ˬω',iC\cgf}lpQMp}SfZ -Yg'ϼwV;[*i9(2ި,YzmfǭmYk5-|C|OmEwX>8 OIDθ֮l^,Q C ̎sA =w5]Һv] W,-<5r_uO(?rdSݺ3^zqρ2_Yo\?`ji/txm+k+j/OsSc\{`7`tokB  29'X;paY͏4cq ~폔PB7qk}^;yy޵M˯^Qwuc݂py7azwe͜ݫ'OtE7o<]67$nG"Qޒ@eavpλb=vY`fbX>H(0+ ysӁkxB !f :BL5An4\ J]/Gx/:Ia,l*7bo)2Dvj|8+=Kp^{D|/wetfI1cC e{K~#&WD b(p5D!fLr8.Rű/}-H%-~ $tdqwũR"L,Q #YT(m;=_Hd⮖ AkXD({>`j<7M;чv&;:Gmۺڶu{Ugr98S;)O%w@쟰PP>iۘ88+I_t 8\.'S/XG/gQD Б)-{<  M AP8N!=;>;ҧ>wI;{w?ƎҚ)qghȊJJs-Y%jwObF.K::ݡ'SE݀ ~ ^t L̊de{3q}Lyv;Z=?Cݻ>]8?8癑sGT7OZ\ 'cwCGn֕hYC/<5.*;88$ 8blYspH?q3ܼAM(9ܓGͽr}Gkv}d}ljctonRθn^6+ ̡ˈ i*Ҡ:TK+80+50c6mݡR2Qq)eqO1cDZ$8^ Dcm qK8N I"-@eOӁnyNeΞ=OKm['`ac{v |jc?yݫ% ~?xq|RINg9sd:+:e|;~QK*7*ll5t}eZPl!:/skSĉ޵impۿײCdsO9퇶~DP4Zlq ābrp$**y57ٜ%ed%P֎~`N$i& -kpvt/amơo/C7X! UX1,0R yɠ[ 9\ -  0C((Z댲rg\&lО.@եV(k[絽乣& '(]\v)LWz-e c7lo@ugo t{܌ualbhߑ +3wGi40Ӈ"JP*?u+J+L1~j';;>kbCyKa*8S|ef:CZ>& {Wn,7oe4ajj[ټܒUKDϗ1Me(!zŌ8=!8KPѮ'.Mw|li*a~Ι/&81l.2UK[V!7BZ6\Vb `/f4Q"=mJOϖZJY($hugNf[y N\i@ e~)vj$6'2 'hkD1񫢝MfQ0ʀcquJdΥX67714J>an^z얠(y>ݲ)lŕ.qA:\x lV-a?29xlZnyU^Ϛ!C*7>̹#yKgN@'#{ w>U$ƈspfodŘn ~zwdԸn:M]``B 26Wl_HtN:tnl.2W~wK<-YHK 索w-%݈ˬ=@%+_-iukR mr eJ.>>GFQ1KpƉ -d b M Վ#n>JpʁAb$&vG=$.^;url>^>p]^油Gv>Ec{~xȮVn݈ DÈ98|Sǻ<0U7sTBPp$C8j3~,Ȅ|k~EYܓJ8`k_:h~pf7w٬o瞛R:vo 썩ōՕ6%ǩjL)kʸ#Cf,c\k,BLn!"'KB"1 }SEw(%*CMh b`&Ɖ7_$۸Zġ,,Ov/<}sGP#Qg\!LL 9嫇=n]׷^bqS HǍ peGIE՗=w\L&6ȮǮRY0>ٷS;7KG^9Rz|qEOj%qaeiMa!$K}y%>+oaԽn_P^ 3sU\EǻPNT}Tnt$nJ NVY} uqW brg;'ŋ DM#fq2 \`<'mk g+iuiaۥBvpVzJ"B!VٺA V=)ʅK<$(&sP:5H "7…אiY(ğH 8S CFAkӲ3?(-֎.bpӃ{WQyՋVWY2W&@0s䮮vفg~ޕ;20Rϑ,o xPe,Yr33t*Euni]b`ebP$B^RfNjqqi,K@)!"M7"7s$qELM|e5l lWo$E'dF_-Fh6dӳ"g9ҵDW%ִ.~2s EEE %!1Sf ] y ~˪Ȕp€-XJH#6&*9i*Xy2Չ%6A&-\~~+Nx`tD(N]ZVlʌ$^#%eмr҃bl} *CCf?JC|dc:| Dx.O˽yWVyUu V1SgbdӍZV.m]tϟ=wlKڌ :eD߾%R!Y7ןC[7My 7dOiʛZӳ~bs߾̧cuܜqi{JL-9}jr Bw$?ʢ8?Lcs_X߆;1l&Dlqgd͘g× IDAT<2Ohc%:7qEP`])}DlVdRrA$bsdNTg*u I8-Yg& *ʮj1&{=_DU˺0+MZx#|gqG^GMȀl(v2\+܄EAGGK' O^0" dFg4Vc"}+M1E3$hqcz qqlL1R%b*Xwzk2׿6¡/Kkjg%8 5r(PZ2Ԗ8&Ui:%E3:g0~ln01&e"ßsJ 'q3gzxP7n`ߧiĖ4e}{*#K?זW@&+,r2VŲ`^-,$y\ Q",8YDCbi0.O\5uw*P*UĂՒۉJB)6,A!OlgUd=bc)7߅ؤۘ!e("9KX}Kӎ%#,WWfqa3DYvYlZCA#,@PWQ~ǥ#7{zx˾bUq|Zbfʙf1.ZZ~RHYJvˈ'ب+dQR\nOJw+[ fSW:a֫i_\%`wM /UhpOeHZ^D\|2>)xnzdVbOJUD_:DI X;X5!wxW-vR!$EiL&pPBQExwaJVb/)*˂|2E@ Ҕ"͗UNL/e)$ . 1]8ߐ&)m #BV5ufeİqI9y/Fw@6s?N }ol 0A? 4 %@XDpw7\.|[> 2Lvz%>)+~t2қ6D[z͑pdΒez9C"ޛʔJabUkAse",'|V[9]o#~zYLBTnERzp\tj\7bsC~A*wJoQԽ6%-U9ӫVCŠ} ZҐ{\ߢA+S ~+/dtXW6,`o"݅pdhߌ".N?DJJ eNWwAaQGH@Y(<1b60G`f /`VžU%Ned J}zgʶJ!b88A|#|2R1؈2ml~8m%  ʈ%kyy'9 !m?P/@!I]ĩU5/ׯ7c<"i2l.Eln䮜fFz oZ]UX@??h4+Y(wtk}ymDwb/RPd4e긋t2`J/z 8LG@cBPibWx&"O\҉HGbYÅ. aFJǽu_ߺZب"ptE+GނT;97aJ蛟ܷCowT.BVb~/ML..iY]Z\iGq/#wbE";D67q4-^x(;P4`o(%R"@*g(NK_YV͉45P3(Ų ZtQޕ?[Z$A"E-"NiRYVZ)ewuT'(]Qn]*ec"8r`X|l9Ę! {DdɊr=ɒuˮOK6k8a8KʠDw~EAta{+jʒeqpminj8D9x՛1g\㲈Hno2`sDAFww>(^eLkf ҷS!@Q f_Z a3,H4l?z9BU'ñPB<E-3SP/^.W_TpS⁻x]\ܸ=b5ђ|3Xiu1rDޱy]w-Y9l]/׭nɺiX0 -Yĝ6J.7s`xm2̲qɕFxk -asWGl}{ګgCpq.幹<-jF}*7"*:ggGܥU)z. zSSBv`!Y"7J- V-%4DP֍߈7,.{qI$ O).ѹ&kbJcxWVKw>`"s/b8?UHמr r@6.P7;ɂhl=3&^,AiSkcH%J" FV>Nbe[=?2!Jj'\*AuF|seX uDYQALIA},5~SG뼊2Uwqv`oh[[ݺ*,4,Y8*kӱ^LʡtUȬHX߹%y۪1w `bm&ė1]u4s;NՀ WU~9BT>NV9xLy{.\T7c*$NWAl@#-ߵ>yfLWf4W5֎Uk͂*ϯ(]v515>WǽIQ 2 uu%:҉U))!mD)BbgQeQNQ=$1"03߬[6[d)Š oe. ԪT!" ,V(o^rY3U)~UIԈt E-Dk#BU7B` 먴V`$%` (8B_C3(_ $It=zBXugA=γ9S.tBd{z|Gw!<3pC_ $#Bno;CM`P4?j~ V]30shn疍k1Ɏ.̜$}Mw\X[QSUQSYf,zM.mAAP^8#s;mXDm/0#{e,d>{ƙ4kQ\ZR"dFpH˧>E(@,\ 2ru.|:=$>M(ߋc?;m򱰱nac;"nX\k:v\:{@[7`s}asn N15>7_=Dkw)ah&DB  t^Pkȑg^cMDN>$ SdX3+"W>,ds B*k7/׈d "fGXHz|R<}}6={E(p}Ѥ/1,$n>!MOZrk -p)ȞY*t6*MNNdۗT}niɣYܐ}a2^ͷH!U1쎯ye\WXzr3=uZf X0zK/4-!*\|o&-*#_ IMӲqs6@VK(UCb)aY9I6SÏ!m&h^;[7|m?3ů{\)D?.]R@׭]EZ_"-زr\8@D|F7?~S_(, ,oShB+ML&3>փ,?\Js($hԕA#VɀbUy% KFRq@bS>&6RJP^q9C j8ͧ~~8Uz dZqav{<﹣'ӽ p%奕r}녽S;oOwҍEF/Z)A~#jh >#5M /kdq˙(p)e:0(*VL,L^ҁ2Of>.P>7zk!llV34GiRivQAbnCtՋخ*o%JCՃ{RdӀM@ [g 纣 >rtse'TA~6BF{ׇjSo"g|Ac.JvEk 5:bI`/]ͧ&(6Ru ;)lu):?Z^Y 죬fT~ՊÏ:՛SWRU9Wz|x46󼍏?4BPGEMթC/ "iqqe+\uBK9d.ֵNjSL~E:G-8ŗ?4?h{1zL_)G}s/ͦT"fJf7W]pGnGԡz>O?%.6{~Y\#j 2;8%J'byY..2sd}EiVrnl23hϡK&/p`ܑzH{TH`i>-Lr`f>M3,ydC|  .8aՅ/#PJ)+%& oO-C^Jbʫ²g?nF="f:宙Ղ 9Eϋ\48HiLa=VXpSq=[W.~P!عs9u| !vSn{m匡ޱ7FHד7%](-Y*8G4MJuH-UtUF%1!CVHr~Ͽʋ#ewN;2bnBln}$1E~e='DZ0q-S㓿O|WREy@I"<O!,2F.CK](yR R4 ɂ+tO$%xitw0Gᅍg,a\;"ټ%$R(HЧ+u p\5U;?%@̯(<}WUqmA;+_$AVIrC/y3!ݓUQ&Ro(kO y\䩑_p̮ O q/wPlBoogo)oΖc6ͩO~oa䙁_|'{=p7{dB~vo_v#f 1;PY 4[8uY.Aעئ,* jr.R, })]K9\VLyL,Q];$#? ȈL )$(LP|Y'| %Hus^ؠ=k>CPey^gG߽b_u8"Lf] #&~_ֶ['mQusMJ'wXgOOCp41L~hS,tJ%QsHxk Jt"0R?x:jVrگ,]߸M IDATߑfkѩ[ܕm{h>Z3c_^SuvϩQ'+üspxud`豖9R+S}}#uAdH^Gp"&)D4Ȯ\UNBy'p#huqqցD@Ƣ'J1\*9/ )_4sԑj fB&>5`"ɦ.QB"B^Le^?cW%̲ڹ&I BQOd"کrY@.EV :-*!rkTNB ̔C2pHdlcĊB!b?18T7ٔX.mCAɒ*Cԁ)P#o}do& `{]ևbɈx΀K.n(P˗KGFyܛ:ZxXCwi\,dy̑tT6|K#lǭnZKm&u8Y3ϴpEq%g&u1:dOxRA,Y(2% O-dDT&t"AJ6~"q=ϻq1I]\SDw|xdR !"-|eV5nβlʍۿݺпQ4T 3#'lsV[ c[f I(e) 2Ϋ([~zo -9dM,YFZGB<JAumwqc훨%nRE:=#>C@<"䓒PȨ+/Na~!潮yXojHT=;kuVht[s#x>e;RV53S,61r۱{`AֆG>v'"p/zϋcIVTץw,+ %"Yjt˘v9 K#@h$ݽ8~̨&D'Y܅`<^yS!~2#BYRE') R2 5!)/ ቃ_;=&*ׁimήT`W2G V,I|KO1hvrļF}8 aK ^lTF"-YmwVYfVw~ ʬзFhJND7jZ 9lMVIe|WUrkI~Ʌ'][l.>1Jܚ&X=PPp\P5u>P2*J5}8PQXtC=H@^ CAyVPℋO%{θwi>!#,~g{޻[jӧUm,ĒO *{%dSg\Xt,5njY)Q[d[m˔-]6{?¢T(@kڲpkq ǝr!ܳ\jp\=ZY( 3. kSc0Kq}ōqBq2&{wS\͔Jr;Rt 1 d,+s+ s4 m*V; /s<]?@' @/Kר8LG~qSckLwtìִ;- (F ;&*}*S`i"X+A:c! n'%ˆ,1cEf2FaLJqs}|#wCLptAݚKzT%cMRfqpj-ȳq-彺ҩ..*f0uʽr~q6w996WK7|es:RJ݁N 1SC3)UtP1U#hL!e&Ġ&H^.(Z1Oevzsd)C38,? ,YċU(?@׮qG| 3ehA!ZG9ฬЫvU{DTix%YuXcd+C.$5R>1{@/0qge\b?{(#+ aoRr!r Z7լ[7-"X "mPHAC_QS桏X?f6痰|S j!~X[&ʫAO%%VNy1wŞ9r r8.k W.&tp|oecPoگNOrpScOvtMOV5ԮHH8<qU:[d\-\vH F*%bzIPP;UĖ+c#CYHù# 4P<[L/YI/JӀ0xZ +(le#Ɇ}Y]:cZ42{8nջm]r}-'Ap<.s+qJnX~, x0]@a)6Zr:o\r֡$؍? vAQrq1:RKWqw@zw~xK{aG=+)/ 8E@gsGwS75֫^#DZ*Y7VN(Y)+h28Yymvq# ؄rXX:bU^DW"bq^'n@Pz#H-JB_"џD|ZQ'7,V'"]%#[ +ZU!>ʶ%O WM-#rCV䏴 "XQJD˽t VSf {.y"{Rep˷_Z]e*UW *(7Jd)5ϋJD +WӴn2旗޽,K0%Bű^CD K9Wy6?{;Wd"%e }g^ټxQZ)2?V &Kds3w8.xJ02 PżDWYNK*Whn_v rA8 <T:88Ć Ke *FWraĵ_P0Y+J6e=ResFZf{;ջcw?f=M ‰܌;M!`A!HHJ?֭RQ;JJfQC4){Uabc aEk5N`.ol%5H29Lyyf7\I9<H \QёLMp{R ǐ$3E7(1̮Sn}&tKrU\="2Dq<ƺuIqCۺfm+i+byGˢ7DQrxͻNb~E}U5VIO%K-1 D#CQ%QOKG 7{ǝ7/]v%s0~pf|Az",d(gskG_lnæ йJy=r6J~nE~2P; &?eɔX*T]2 Go @<'nvXe0G^bbX31oH-oL'ʪ :\Vɬ5X̦vcoBP ,7.`B3tW=ld9>&˱CzB,0`8q !J|'(t)>ùN{7^N\!,saNnɧZ$ nyh;aJK7n]`6r-~_K%cy}daUѴ:s}/oeJ| tw˩,sd57l4,&lALtl3P391[' $*D)lB ıଋܡ6ej8eX^:pYdR Xe%>$ U2 '̔7SnӔ@>K @?b ,1-P|["J\\\՜ ,ʦw XQhT. N1#Ī1K7RO>(f5C#?O6$Ȝ%UM|{,nn]u0,|qwo(xJK]UWVW/5AMO>].5Um7n\ݾY^w02&B8$0bMRx\&cB\x~KnBьCºTn<سk,;yԚ>264x^ %,F q6/Hu[W"[QXN:9PR8cͅ}QxJrs&F3}%#s+*ÜhVӒ2^Pyk7ȚΎx\]//}>!`C"VH'Oj-Y6o:Q$e 6 !T!U32rt"w.*❜=zKۑ"G.g<\WPGT~_?I%;ٔ3C@DGO3Eͽi9<.XHQ!E^X&w$QH4$H¬Mt8^VrdYXÚP&GǠ(KV}G˪-78ly^ 1%kskSh`Th,Yf,TČ3Y픪(+ҳ sU1jŋV,J33c??(RWVWί(ӓ>Bdsq7y{MC͟5"`[e\)%h]"!T#a_ɪ҇eQU,A,.*nWP3O);RLq-Zʡxl`̤D0k!F? q*1 )O t%8Ł]Q&e@Zdzbϋ11Ā<Q`+ЪnУO8+]npsoÍ!mP4CRkLgɚВeӬuqӉMw +1n2F+-Y,YZ_z.q=uUߒšvp?a;Ɉ)giM,;E{"B\) S~e)ª]zAEʽhE9㲈’zן0>9sվcC-ψ@ obkVԾeUyu%`W#"7,ep5QUJ/eNW3>NEqpNerwć7lI\VSO65xϟiadEH+65{Dh2dԥQU ~R\!kՄe f ,8Kcd "}fk= %>p/ "C,ٲ +6I)?8xV 7ǁH66O#m1SCY"Z'X ,*36(Xrz,Y,d-zGZp&~v[7}b!U MNIΩ-,73x @ώ#Ԧl|}Eq!"7Pte\ݒ~G*x94> =x|6"Vr9VIVj}[:-J++܊#KZ,:M 8v`_w9{4)!5Pcsm$=wU({*ńʝ {i hi yJ >fn 1|<2~jT^^Si_o y\uPeySN)VH:^TL+TDmJLfAəFa=/!#EXDڝ ~egpPR5F(ۛ~:hQ>_}S޸yU앞Ç^\v$BY~r7MD!* { 괒%/bZ.MD$V/!>JZBVpa9x^$2 >`%%(7pq o!9_g>"_'M9^ e+߅J[:`kvi%'N6͇9gk>}_W~=])B<LP7-Y.8@U(NnR# Wj2Q,'f Ku?Ӫg p~C*}Yu)4RcW~&/FI) M.W6Ҧ'AVjP8r9֎+Ìpm,Ya5k5 ̀z0vjtMwE,`L a Gk0 2`ܘr3(s.}+涙v\Ç_G7ksWO}t6M.g`߅^˨|a ϣ㮀o5^VK,%Q%ЈB%稡3OM7a f-mԃREcex+kQa; x` 1njC٤ ꋽD3OV ^A9i̎Ĕ.=MgvuR \3wU*3J̎SneNɏƿyG.yo8?\kпw?x6\;>q5n]M}x?t=CIB^MU 5qآ> >-.n\l 4G jd&;('MbV9LsY{th>WRJjC΃l5{֢DY71 d ^o.Խ (01$ݥxHs)CY4؛YR9*`,d_nHVJJK mETG{CL59ԧ}*O=|J].k'͜MSn*,W4@B{1. z&t٭]k<;vfDvt3ըc۶aU#Z[H a1f- &=`٤_udyGҍ#=鏽=57`(;J܋YLln7~8v,JJ z2 +vViY\krJ.ޒjU/)4JR */i϶=F?.lW¶]R_ Bf)MpuW>S~NU/thʳt%ⅅH]صTV޲@Yeۍ.k=I,9o޷z&H b-9&QvNS>eC5RBW7Gjk8+*btlP jvb1 * kFŎ+U] `0L C];F7qY\yM@#=&!6/vjbsW]S9_%ewp((Qq;4\z'ؠX4,'3iz/moo/˲"L m5v~6b*c,ZF6rڕJM}CPjmxo ؛t),la("Xɚu3<:;nfRdMV,:F60`'&c2Igُ_s&qW 5o_mo+Mwck.CS+?q?Wq@`b=`-аgNc> ܘfzȍ RKU!R J5&5~5NIo㮡& 5rPsh`:Xy$bs^yY "mR,rLwsg05u>3lRe]rd?inuıso$eE6}>m2f/ 9Of㜺TnOKM.*0 n v6r(dsH4 F:u,9~#QDI^!͙̾e;8%|T~[ u[sARWfiY4_1?c2OpxIJȶSZV=HKmFoѥV̈́t+kjToIA\rOdU v7_y{of۵g˕sG/XnzF\q%Hn`z]b8` _ ]C(͏^_{?wӂisヒ/>+.a_x|m=h̷2SCq;ϫηg׼(탷ў+I F87|r|[H9=ba+4:4%9M S?28-pXFh%ۨ,ʞAJ-gljl1S$UDSCp,jpaLbƕ׵40s`NKM PZDW>MD.QU7`E07]pr?)ף@.9f=qV?. Hݻߕ4,[ޜhIA顸&h5;ۮ~*g#O#ݍ ҋ>5X_n?~%[rqסQ9fm *Pq1"xl6]=\M V= <5$fXRr3(;*!J|{wa*I=0?/ FۀD7w(kngOO|=N #brکaKQQ\-$=6jI)DuDA/s,Sy_X,5HZ8S2nMWjҴFJWMpY3&>["]B- B 3ޛ§(='0;5+0[6;ܑ!1Նg;O$AbWP-4YBs(猧ڻo+.e_Kw^sW[om4Ď5jзi6A0;# b.F/7{?{+ʸ_oo>@|%츸5g/O_uKOECxWvxg*7 &HZePMzbk*$A/Īh4dy,{EZddJ5MDH9'Bq.J c;]ktVL)wh$4@@yR {U+gHUAƎ.l1ҩ&)s6&v9n{W^rq#oc4Yׇ|觯yBMLzVxU?ZmqskiֿE^ؾ+;K mW*8l Cr\uCI]"5)qgٱ;_p<@o8C'?/oR\ qYgV+LF,]J\?xey=V8xZ9W:<2BSk5j҆?Ef{+bզrqP Z]BZJ2 o>^578TL]'6-7i<|_}~?՟zU˩)GsQTH o6kpv5H{±A}OwF\o T41fPΐ~]ʕ츃qÔGk]aec8v?^oոrAUEe+s<;qd0ƑU\ʹ 4]Mc[)#j+i[49-{A&Q8Q WZpvD m t,袃crƔ-^1zevwM+%xzsju:R5Bݕi6WZTw4fJ5]{vػ `5X;?"LPwp_J1Ra&qbߏqDU]1>-d]asO}v_Ɲ{ò.ǦJER}}mZn]⃟;p)\GcIA&OcQjG75oӝvdƇYd{nZ c9Tuݗ~Um076! E| ELڡ`0TĤC7J޹98P&̑.8vϯ┒*p1"Uz!*|LȗMrFŰI M 'ݡzr2r=ˇe ]!9,ZIdfo3uzݡg1b\p~sW[!;.qW3ߞ' _%$5Vv\jb9st󬁩 D2 ,r3(gqXq׿}izs_'Hxwa0m;򥊮!f**">P&X;aJ9R "Pb7"@BϚl䆚j$!;*UVTno7FB0 H˭PC9յ/bx dU{\VRM-qT9/%@Rvn;/|ſݖv=5/ܡx ٕ%M{w73`3)vQ5DXwDܠoZX` z*oqܝj]Ck?s᥯\==~C!AfګAk(4jcRٮɲj^QVgWsHC "}@]P`?9.Qe,6D2|k 6CR9":qL$X_h~ ))= n1U]M SKa$/nRe9ԃƣ0J}0;nvҬv\n3+-r=رܭSFw}2Loo:@{Xgp-_Mk.-dMPF\vljzxVi$9F`0qV{x7y)jNո.z|NM0eʷԥި IDATeCeD4S  ]] F5vS,p$kM6u`cx4AHQSMS Б7$]qqf UDW ֧knky2oPZ'y}=Snp$ks1 FUV۰v`A#Ʋ$S1*I z+w*F\`Mr+$U~ߘ3Bi]W^K5~{o^Acpx0LZM)./ aANA qj4zFr\Uq;|{ݯ{Éɦ#Ĥx\iXUUaC{ Q[V Q6 hنןvV6fA++Ĩ6YH_8]ܧ{Q0Э(ţL/g NxϤv9츫4`Cw=W+ۯ!o}YnPo~)ZTmkV=^8{Bؚp z?k~JG)bтw/]ݕxp?=Ph` 9㮣b< QK5EB`6%$)kq9~)廟FG9wմV..J(Uc|R/EDq$8̟J>xk!rk#65xFPg_$ ,<ƝJwwA&s̎unL{?rRܨTMp RG Mc{@QM]·c7<Ç;nCCvoSyҼOG|rD%XV@x;*. z.fkКn0 O;*͍K/zoܹwݿѺzoOI. ql==zݏr _-wxŞ `_7 <ݮS ;$qA p$ȱ-|rﷆLR[N/bNHUd2ڕfR% K[^J[%lDi6K4N&KN=4wTn;ۡ7YExh@d`O"AD9Ou٬nU4Yc Gšˀfܗ>/D`zԃVXlm|5B6!LC?b 5ފ dcy?5$m5ͺK˗Ҳ18L)]],61씵D[\ݟ%J`GOJh̢~@sDQR(K QB{r VBB8l=Z累5 Ly%pc㸧KĕUp(i06;nF|M}7 bMV^l&+PsnvWu$dZ'ϸ&ݕYj\fB#a)aQg H;[/e&=;\͎Wn-n*)AoLbt,[dp]YhL!]o=IWe4:"^D;%.(KY^FڥNU({^KhXGWξ=Z>;.Aewyvt$dV9KRJ$=-ULCV8.B7(x@ZXW.3>XV7MʳmClNdu8׃u-ZjUp$J>XX!ߥAD B0qoYڛ~L9pm$@:D`5^QɈk,XZ9õUIQ=O6k`(ׂqc(c{P p BeIM#O;.F.u—JEokC_}eҀ%bU30H1VSn}&*(Rxs>c=I hs=Dez&KJv\K+ύI`pҕ?)[_̭`0l-`\&SqOco6=crG͵Xl"}ո֍ulDu(96h-XDR.8Z񑽡3j4՟F;@8T>Ada8U[nq ‚q`v\S㪟NÎKQN[KAik)M]`vK5 `0l0w dǵ`\=L xIJcr?VW*% j/˜2'* 6i-FҶeS`&c+fY=RkzڊU %Py,|Xfs}"A6ˏ;588MTY]?`+ _& )u~qIҧs@m֊ 7Gkj8d= P6;/Ox{?;v[w+Ȋ,<`0 ¤5ԑ~-wqԒ~`ey6TO2W\1޵E- O!ےU*lX.W˂7!RE"Yqc)Hj%kQy W `ǭV+k5nFBZRJ kU̢Bp"ɦÚUGOAvk.Ue(KMR,4"3ȭ)@WJ14  ,ͣ(Ёv<% `KdGN#[ {Xb(W9f>d'LAg~-sE݂U:(\+n7Ӗ7cd;nZw>/K:vq)RɅl0N̪A4Y-qkjr`,%j]{Ml,%X).{sG!RbpN73n,bϘøpRZJX0SقqQ7(ߺpC*;Pj (K+iV+=YRc` F)e)E V %K_ꅨ a>M>4 5T7G'&? PnXMCoxV菥߁a#luSF-iD抚!P$c^LX?!,jOH^Wɚr)XySۼW<vVް\.3N+eXrw4D9MV?_MV0g|UZk%UC/kG~o5Y!4Yy& ?z&s!+[ K`Ĥ,Bf\ 1L0nA;4AO4BxڧX >k8*7GB̙sqP8}AMJ$> )$Q{6p4QQƔ۾t(ذm]nmD]XY=z z(W#sGʠy2uէXsM)ƅog{,Mʱ%U% VBpc`C])ROM~j(g$U-&*уW$NX4MS=QXM/O[KJ9 Z,MXE,+6%$L2q5AFG+J]I$RB5Y_hx{pM{ܩU^IbjĀ~1,3/CGpAjl3C3_E Z વ]-8)M{b̞wBrH3n3ht&mb| Bc ˇ1`iPMuネ>zɚ{~n郇˭ɚd8{w_xE?z%{wN;mΔk,=\N;,KI]隢I?}.  o@HZ YL]Æ]4@yZ&QɈʐ\Օ:܉ݏdKU.)Z"ȳ,QJ@F걷˗aXH {Z4&rXb~M*h$!)<;%TtmNh^n21=]q`Ƽ7bV#oƱDٖ˞75`%:v$xY:7 {*wtҺ6Btt=NRJ7*~ªwAjD& 5Ɗ }So7LZ4Yk:?tӯ/E3|?zt4Y3PIY& aR_ ]rehI[QWOnfRe?jOu?knjedBԁ;|Jصl=Mk1 C,r) q+;.*v9:;nn;6(SZGDcn7S*I\ܨ1hUf!lA64kI1+eI?v~U o,tP~4JH0)pc5 zߥI!tN{eV&̒."J4N$.g:bْؗ`ZVǦrVV%C !.Wu4e|v\ġ2s=W@**)9+@NN$.}tꌅO{'4YE(ʞ:w/ݏ{]}WoGn]K8&38O<3fQCTK^3\{En8̴!Pjӎ"bFIx[Hogq($::@!7޿gU/FIJRM t y>eP,vV|TKPs9nm( 6q恵ӦWZ@UV3hKb\mKZ(Qͺn\54Y? YFA^E WrZs;j,yeRR Z:bXaġ&5Ju}Sl׃:7>xKD<~ϗCݳ޿⼳p=)=zsHWxP 2B;VRh(Fv_CSQ鹧 "Z0nLe*X?kq\ iJ jei8 +O=yM MS#w7靠[dSd (."~ XXZ1cjf gTcMjkEW7YmJDjiSީ!ݔ{To|[Blb=sTjEfQU*w<Ae5qhIP|KW.+ߵ=7cRp'|Oz&K,YfZSgD4ܘX.+ C,li[Fq-7\~"*fEH͒2Z5M%*1 MǾL&a] kX;+3 F*:k<&8~zT9X,=T> V46z%/OeyyD?zwI7Άiz- *N;t^fE5 ՜w>$6M#>N5/]ԦIҌ ԼY4 au >b ʐBǕp.8$_ r'R V :Hs M$Xt1-h=eWjފSMƥ`&73)g{FSš4Y.dY0R`\V}L]3Iu l0ƂiS:h߇{W%7E5qbR.&l S}yQ誂g1-4'^^9 LR]蠹WjׂqOMU:-|75Zl3鴯 rDj*kQeD!fѨT] l]iwvi UV~.z ׅf^cޔ5o!)7n4([VJ׏p;z 5낔У^kvhan~Γ?9QLN.= d=-ɢ 8Z@_J4`0LKd֥U/Rq;Nk{||FkOXX 'd.E:l zk96 ~ 3-^AmOYŻK-3z({i3"щ"ifާ,**\lJ]#b[j"Y-cb[5O+n`+i@v='<a9[`Mfiv܈rG#OAeVޠ2Mvcg=)(Enر%7`z]ۡA#i0&kÓ*:).nӔ$= ,D{%VlE3 z'#n(i:Snү0PNIBXV}f:eV4"Rk93K%x ^^J ^Lә jSbDD;;dzMJZb NMTtjmJޟJ?p׀Ud١|F+OxcHiGU;0z-V_ X)|&oq"6ډSǶN9IdY8BL:.=? ,e/f `PN?P/r0~q]N.= ~מ<v4\xjrx'Rux_] 9|J)+ZBY{Oʂ3 K&eқV X {u J;t upCu1 I(~ :%Y0V%:LdeɀmuɠfnwzhpXlۊ(2'X S^ K'G&4Y(z04Y/rOS %  z_<^`0 .zFjv\~dEW_IgC@P,aTW&@#!{Osel.=أ JTA5c8Jڹ5dH_Y;][FW :FJ_h Qvœ(Q-l2WipQ rsGU+)[R,iW`G݂vzvZ%ڥɀ<`,?&E%r6Ϲ& kILK3$Ms['_?ae ; ܷLuQM(&ä߈rkI |9.{cdJR-.NLV*Q.X32U"*P$~vbHςBZzHG+ r;jH%c\&i8 Mq s'we&9T 4k4YOE=w⫫<0R7>eq(hSOM=A,h* ,`Wz0R,=Ws8# +=WRɦbL1eMEm. Z57*:eq[C\k6AwOif׼I]X$#K_hOC[\Jy,MNb\-2cx/gy%liij }٣J?p0 cA$`!%%P6$f8_™.PS5`3IazTd˻4YxeXx_zje{{bӎulWYDFq3# x'QSS-w`UN=Zi.L]l㞆IkOo<vDFQSݾҽR;gJ<>ݭC"=m^nNvaXm]&է\R@u x)ZYm)pWFɎw%=6;n)JC {Upwp+%sdדJ|^lG{o60yc~^/?7\iԪ$ڃ Z Ms]a(MV&4Yzdxa o& >fT= fu1:.]֤_-_)3Oo?Z1(C(X]bp/iUS%Y%:|q)xzb ]I ﴲg@XHy1vK^<]ɎDC"4EAGUel)6-p!l(k`1jl&C5Հ]{ZGb;x=졝ruCqg< |j@W:a*m!5ܤ_Uq;qa[UE ir%hxHkur̄izl$ Ą[Y|'N jA{$ l?R&-nB8} ђlhFfT*^{3`ya̰8/.ZdY8iiO-wU7`$j'v]bdcC6L0P6:kU*^C˾_ -G9~-W,ܧQ&{qh&"1fYILL[UGD̢s>m6߲4S/mjjD݈7PL#}N5rMOA>ި\]Uo:/x9biva[l$-OiV:ƒ &Udǘ&K4@yMV0r& sސ?&cΎw{lH^ܖ?:\_W͠[Y Z;Y}U&(JU1;ƥw<~rv2/@ dbRVY6YCEN8Ć:[ʉbk>G+ ~4aүAaMyhЈ!4LE{35&@6qUOwς򦱈YAW Mf}GXՁu =si2Fc}w:F LHĠ2D>].ބ$,H=Ϥ;r$?&U_eT/I#=k-^jF'{iHF]5q.=C{NmU R16ɲ`܈rMuQv==zrKpXHjyH @Re-BĤ~KA@nFe!^}ƞ*+fo8{fo"*IIJ`]s_AtP{6 :1Q"",쑡#鴥{X,(YP bdKZPr)ځR=`:SuRۡ ɾjI+mχmOjdpw6S0yAG I_Oi{SWnJMf:^|dӠ-YS"彯^~찯@(; A $Ԁy=t'ac5 .n:4Y.١3;4Y^Vʎ{xDZ'ߋc4;=ϡP87Qgp|:RɶOmCg;s7Jmr&M~CǓ.x!:S#lVt_Mc%fc7%GlRr<5%R*v<(RZ&ξ'[hB]jVڮTOSRVdUF&(`urΡz`6Q28,Y ԱW -j 1PT 4k,Q L8dloi\o{AS!a`00\O1&Wf>?+^)RMMIzԻ"/d*w8;kҟq1pÝF0y}CWNfO M%su_+`-X(à&.7CAz_ץT^ΜA#g|G_'ƅM+Æ۽ء|y6%0766z&Kf/E"w2`Hn蒯2A$Z <PgHx#Fi ^ev9%(o[ɥn@4s|C]ᤣfy6E @{痎aM^ K =n;7P% vHH/KϚONFȾ`BZ,TRҲg>W4 hfהXC^ `5p f4eWgkqW}x eKSnsiE=M*i3zvݠA_) &FW] m[ISnzRzWH0w\sHſ޾+1!ҙFU5Zx5QKGiI0j]iEi#vfV68k-5F/;oҖ|X, bv2C vQK{bΜmM咭w=X=M,׮s0&kv+1Ӭx2*SC(2$~ep~{G''Ng01"kγ?9;l-b7SIH }a7ڴψ {vC)c3uHH`|QQ4饠oV[l1+57CE bAS/a}z5*G F^4o ,q48gGK2M f*PR#\a]8jxi8]kXЧ" x*#G^[Ie1ӱQ, GSzzdzz_n8k}.ݗru(x௨ϸ!8nњ"K 9*aA9ߐU⿙'_bI{.M&koЎ2+h)xu'SUzPTg88J*$ Az%ۆ!([@H8U# biCO Ѳ .UϴYλ =rJ/E`k&5{zM#*+'5z{vzJ@G45$J6=3| 0/sӭJCOѣ{g#JȹNn}/#CK@DH4M.sg9Wz9.iOd x9.4YkOS֮/u#>g4;=T,`0$Otv_f.Ǎ)wdo+Er\$:;a=h$ּ1Qk~["ys؜?̊J##v[z=鑺VӧBw;QrOl&8yp( Df>WòV-A1Y˜j>w].ck4܎ӌ]IJ4O`\k@mVtcOo1Vd x=X& qJ4YQz8#cSOzŷ~18ʗa(lrGo<777ĭ|q1W0wӿ×w|.bMwM`PW_O٤ XKR9O#уŤ*i\䕤g\hAme -S*?[Aѿy3-\q*Y/~P ׏-Nnke/`b/M]Qn-M`׃%d5l6;xm=Jb2^k̎w'>k}kү\d1o+|m}/%>UĖ׷oFiْ4E#*uj4DV# 1~e7:(M,ERk4kNTq(Aj -|z νm)-@/Wvԩ.('"+l]KpIVcrxBzK~2|4Y9k, u9nƐBԌOv|SZp],J`+BY. EOڋy΂8t f1Kx`w}'_ѥ1w"_fI|er$y~$H+% lTZ~N׎-幒B[FRk2NoIEEC=xNpɺ)LpqRQW.~줐TݽB hEk޸K[OLPԄ^5iz:wph-iSȌ(nڭ[}݃`̬Zp+n=o^'`ľ(f otWգI5& 2hGk` 'oȉ(_6ThoJr>{hyf7U IDATki"Y6S*JS+f'!HJ֦zjF2˘y7Jo~YpEH}}|RK6 bqq_ͮa .]۲' 5PԼkRxX,VG(kA Z]nw)[f q̓KGJeZ*P>$^0fCvףFڤ~,DèX={fki Mi"$MV=#r>{'g/HW2U \2u:Igª`0qó]35w_sata:y.quR X͔ҥo=T%fbSPJ!n5RILNf B9\YuT#X͈g%@fkڸݪ}*?9 S.K7 LAbvLa,$3컥ƞG[{6ɲ`uʦrɲpo糧vs츬g.ͪZ.9G{P>Kd.J0,4JүFP6Wt\͎$AV|3%/ŤӳvHWigÒ?bC\'lp5stkEr^B|Q;^v)MnQ+PΓ6gSGwo|ݮmk(cz׃%`ܘYGvc7D@ɞ*ubO ƭPN\42&Jdo%3nh&_ ;R;;>+ˆI!bb9{0TJHj "?0 ,7c>n2!26,QOc/co{ 0Q,<LY(VR L/15yM- }zbD [we=:SJ?_G>Gh yw_;Ҩ&t$k i̎vw?pǮoz6QwI<Owp4f GOSfb1 ,k<=~x~&[r*9~Po2LcqOnx`7geot/V TJW_2Cڡڳg(cIkaS/+ S{GJ霌RJ="5&(O~'HM::,:ݠP-T xj%\klZ uӠi$}#ҋGYDldm2 kM}M}97>}2H&259Zk$7$zm@T2hJm+ElT:j"++@qM.TS#d&S\v5't/G=h> EMBWA%{s ]Ӭ0nUe]ƺy7N^Y 5M9e#ւ>k]p{tw3=UޛC9v9Pd=Md=uov)hiWmD+Ʊ-w,[2st3H}ox{?bo t "Z0:6K=r3wl}d 5A5.HĥyAFDmJ{fBÕ X9PYR> le(R}xyxNS5_˼0;%ؠSk ]pm,Zs;aM+Y/&91Ua 3y>:U{?'wb,e) GXi֞&j^\x9O}w^nQqOGL> >Q;?stO'=o-]ŷ?uΪp~c( IQH9LjwYɹJ?Ҙsr"E(J޲ԺOJ֎?ҘѷG4|3=˲,v4ZS.vՏtր9!gXQdM٭qPgR6cO U˶@0]Hc d؀7A[=󃳰QҔcȩ,~}1܌벜D6 wv@;/F.xL̞{vWo!# K!o%QwQP?).u]UޢLATؚO2e83Sc`Q]ֽREϸr; +QOZ [/5qr\[V\P'N-O:uffGӊ,:QIlhd+Sz2+MUT<lU*&5 nXwt}Up`{l%w\xA; 츚F*_pmѐk]$ è3uowy iEGRa^ﮥy-3a髜oKVePZ3˪c`y%, *;zs=Vua58a #}MӳM]?gx$BW|͔ \^v K0sEޟ 2k!|z?+]>rH ?ʯpӐb8c"_#="4o %èR} ][(ip Ƽb4JΥjS 1&S+TaQXƖ.{ӳ!QHi9A8Ѹ:)ưPP)=eAy:yܲS k}!!)@j Ž ynTnP+} UE'?Wla 3# %(>ՓuC#Hk6Kiꥹ&w| BIVZ\[rκ_]?܃ה*=c'ص?b[+-O6l;Ļ<%\W^  zRX/, z$=$"Jg*&?[ \W(vx9#6 +50>F=a>cXPfjX[4pM<-]NʲZ 8$*=މ-=R5~NdT&XgZJY$y)kC5[ ]9[:6Mv4e@T~&m{T&HlĪn eϼc{{vT$z(9dCr#'o&x8Vb&Ulip'Jipj(J#'!T*^sz5S` \$i0 ЂV 3`C%$DEy废TIX*YV e:fyJOh'5+d9ɱ*(fF ` *CТ\'=MVW&ݫ6eJA㭒UR7P!6ڜ+ؑ`\@rپcq3."A!gcߡuIE f"&.eBC8땈Ԣzv$G& lScXb1D#L5c Z7JJg'HkNol0+W_GdtK'GX+={oiE'{z'_Ѐiy|uET J:$7LUҤQJT,m2HSς4VCAXʄQǶ,zE]6E ]ۖenyk=5ج4 cD`h80P\f ZɆKlC \ UL4t@Yj'])d%ᬪ-{e [Yj->|nC p &$JbRR|>_\2~zkoED'͚[SW waAte5uA`bO,Y4(H?~ͮ|lA>a;M fiKġ`SP6 c>ӓY9V/Ӭ<8=dIHTfodDAV:$-<RGO^^$ *#-NK}0{T&]}MCQ ^= e;Hut[>vtw-Ry 件͒-):ɖóf Cr?T2{5*XO,i<"5l9zGAR7[SviPk택&(ّJt=/ Jfr H{>JvUӤlEvO\^KZc}r0j&sA[t5ͩ=CAtEG4AR(zCͱlZXs0<KgiG"GQ2C?H 1p &iL"'L ހT.h=j^X-::~M5,aE }ͫGe>h͒(oB[#)]z76L*kr ԧxPUOD:xs]Av^%JuTczNيh\à teEk&U[4adzrR56t&Xοa?-f3LنbzR\0l\^<9yѶ1kPԿ捨6|)[d^M!rOQ|F+^RÙ l) C eNI#EJ*ӡ<(bO-i r mɣˊI*FuP D#֡Ӟ -Άu](}B3dQ6Ma1ɭc[ U1Úz!/J>42ueX t=C+aiwŲC_`f,C[#` -tpsid-`DT>tL(b-&sĉ'\jjNbm5p?6e\ܽ_ٜX حS9JЎH.qD!xXAmg {1KXAw>:`d}7B|*=| QChHY F sJU | JqOsc$_'IQy)5])p fI 4qc۽9K֎ec&}A/rjmdzRi\b+9tʫC# ^vӹ vg&FՄC IDAT:0* 40V PrBG+,ibQӢf_t=zܳ,4ׁX rZZ^dr@ncob(ء@6/L5!1xg%k ,Ǚf1:4AXM{So,8cJZh f$geC>*8"}QN|ZMHizce*#Y7r&DAj I4TTJIŁ>!qqZ0% k)nnHx :9V^O,E:=W]^"d3 dr,W\_`OC5ήbE/cFc?-,qG?k> &rSEI?i)!}EbޑeTSܘQzoy/x&3AUi -Ddc'K,IZYlf״PPBT 4hZT)թNUa0?`sǧ;Hl$Ը9tq\Y>jj.x*}Bl9b9ӽFPdJ f) @Ď/X)RwJ ण]R 1E#֚'G0Ģ7UO(U!$OO6`b޾ & BY,8l3a(h԰NZFdHR6=LiΌՐ)J+~ +æGrFKq"= ӕ=_*W?-IXwmU8gV>$h+M& KV#U_9yv4ޏZUY˚a_E1S"O ra؈-jò ve'9?2HJ b4|G)믭GT;KsYǰ q6zFK Qfa@L6ZlF<[\ ~!p(=bBQSR^Sb}+lt(h]@'s*^UG- PSgKLSSdqVT %W^ؿ VK!S"XJvAZz!-- k3ƶÒ˟pZP`+< ^uPT4LBqP^kώ.ũ22U;z0(AQgPѴWh=f+]òz2%f{j;ʦ-~* Q\)%^G=UأC +` KA*߭Ep_ /V/`($k`qGJȗaAW} 7Da!I곋XdLcע8sUtsł~+*nY=ҰǞMZ 5PRy6P@>GNImߔ[clHJbKI:V=XC轌<(Z{Ûҡj顕ʿfy(ž (KD<|yPVYtloC˩2QxT_6842"P;8Ɗ# gzIZe\!=L%, +w6<4|GB 6uX1rPye/Ek4&mц ƈSUôǡ C0;a(uA~Zˀ~g=SBIdK>sMЌ$OV z5zV'hck1[A!pi%aL?CXqn16i1Xi?[zT70>,4g|($ޣwA,j1Q̿o0LUBOA۔[lDY, Ǡl: v0:#+aK|k WHτ?lu56~ܱ j0 |VXg)ncLW2*DXZi=6m,%0hsev?hyLT AyNZDtoC=,zOe>* oN,ޭc H8n5RG^ϯ\G/0W1yDl< HC?O?͊&S1aSutiY{5B2 jq0'$b] E$C&xeU T^" q4\lsf Kͨ!A15#]D0!-elj je] E2}W&T\:Q?MJӀ_8KE0At"@c՗ȵ(:1HߩHV'-Ҥj QU_t",HDUig4e_AS=# m C2l07A#1F>`4)D(%|%[U{H9=_[c|lD>g]%5\VID4(xp|23{9e ~ @T.kƟ&jUuWoGJo'X i =x6N%8CТOuW*ǩS>ͮ콃]S(|Y9~0Ae?b;JPQD|޷N=)ܤs|bf\"r'/'4tt(5'-l܉%8E{zP/G1&):O苣E9ĮfuƸk:W<}Kre';0#| 4YJeиS攄9~z{[5Q'b; ; XaX9P*۞pCi1%[f0l׃ nK~v Txc̕T*Sn6MJ޵K8MIJn]TqTlPrKHq,i3ha 6 e4l(cfYRm̔Bv+ 4aE9;}ўrϼ9(,|j44DRgerr,M2 ϸ A:\#X\&4F8zST4T4EC ;A9=^q 6rPPsxB Izx!?m F*BƄQ&EV DY^e5 j&)'F*RRஞ"Ga!!]7|&=9\Vɼy!P(f;ٝkӜǨD1+"gAe4ص#ežQNٸ0-CgNT?>jH Մ>Yv!G/.VAnb@wwoޢwU;`D>(Y;㢳l_= y7.${@#R|wUMd;WXB@j9 H[4B1椐 ?4R\p]%pY̌XTVɺMĩVpGx8I98Irr#"-qioAn+6,W jĐ"y~@$TC{CA1Fˍ3NwKIURxE>ة zW81$;WTYRAnHFqĈ@DI( f!jeuƫFI@znq\#z_x\H)OO K1,%SrN<|Q8@9d }@h_&ESǏk n8Zpl[E8C"zܸqC,$i(GXSuV=˙;cs8xHdpy J$BR*}f,M,5+?یZˆ푃Gm-l1"[|f +Y` =]LvLXQ.sj$7{/c4sEdRu94'ϔ25d*-$sU>U!P/)#am "rB͔7uGpbW%ZU$ʆ-jaytrIWpKZ]O`Nps %HNNP2 p$ɥY),0\[ce_)'?LrAVՑLlҀrq\'-SpAI׎\8M/gdȌmC?^apO3oړ5I{FHZ!M=`9I &2CNyI7. E;{yOЃߎ8{nH$߳k׮wDDDDDDD8b⭷Dpnnn*уo s}i*!V"".n[#"V6ڨ\+.-LK6X^˃s?eAFaR_8*WީTÖ 7Wn5.0RfRj IGNV_3ð橿ˁ V^ؙeeGV0kݿ rcd @fהM4*#1*v&\+Ç՚G r%ʅ,tL: kJ,Yk*XDvr1*}POduu5Wne|prPYܒ㽔k𤋮LSzLB"W2c3Nv g]fYk#irA,5++J1NiˠDI1ZHKVZD8!Sfq4 $-叫CM>F uĭ%2\4)A&$򍼤V3Vl}o4%/d%wDP5zL+_]U~$ B3B`%T貦ȤqG.+xdvTrHԁxw"V}ep7v'Ü*ŋx^˒9}Ço}mtXg2h_n qYgsZh'Cws|(A~ /!<IN|HL_]uu>H{\_ Ї3$Ԁri_ ~`Q)GqvW< `ӻdwU12aZ=71.a QxׁƎq89pgP'* 7S] E`,Pfʵsʪ O|wDWf_!,*3ZQ!v"E(ʵWC-AZNߩ3BKc: PF,?qlӕBN%sN:擟ud>qֶf{{;{zz*ÇO:sarRI?{#ﮧYG熑Y)[r1yL2ʌyuDdA}p sqQƭwܩ \պ5ǟΞ=`x:zscPCCC޹F1;;Su@pUpGB0<.`n-~15u S>M^*mk]nլS미BaekC5_,C k\Id+Çr^t, 3˿î\u ]>Hpޱ29y{C@T/|~'WyCsVw*769`.7%7u apppw'yGDa\Qka_܎@rS9YӣGˆd4$nw429M:H;N,\`Í1)fLɔUx˃%/`fq*t Zu_Ko+sI:h,sE&O2222>>>taرK/}*ֆq i笋TVVt<'Cr̵͑.{fօvZυ͍ ${_E ͬ2 :'Vwu:*,Ӛk^2+`[lP0Ns^˜J0@.;C?% n=r@r[[Fa![r1?Xrl!I mӞ鞲Kl.t݀┰NWɾ,dXfF\M'BGK*nuX]f>922C MDf@{\%fGg8J"EMQ6g1ʘb)SyC8|0(Dŋۈo\rd++ϟG4{I2b`teM!J5Ô>Ӱ \\ (sDDD F-̇j= ;6==O tr&Of 9#Hxہw?M1pUO)=A?N~r W..>z'@& (jǖJv`$1ye_ع(bˏ- t}d9sھKB~y52ʕ+_~SAkkyσsXr *h\ 'v6۪qnQLM;333'N2޹sΝޚ~:3976.XB*whȕ[jčpJهʦZT$Ȝ$99|Yݕay,oZ!Nm]4}?멼~po|mY9\wQ$Lξ}IN \CU eC(08F;uʃيI29j*j  Bɀ& &[FN!`Ls|ffƕM_<ۇ...jt$hltO#LCE+r4mtv}m5ꞞNWVqM,-.V*f RZ6ȶex\Ny\o62bQ.)t'm9QތМJ%~4Kc~;JGpp>k6/d.̥9gVƦh^ TYf$R3"oמ۹W*e7cX|&z $X^^.>Vr`YpT&eaE9ax}BW%cbiG\ >h4dEBLnrwQXl_;o?FB͢E 謦bfTQNcf0Q]I[s+u t0yPoNL $gJPV3j΂ 6ƹ}5/T/Wtm.J YiF[fw{ifrԄYh|~z|x{e%{:!\f01J#R3IG* |J QDD^wL.?D8ҤZ25 |r"px1ޒ ( .qnArϓͥ-_oY#LJORȆWC64̓KZ^zZـIc[3%TWT!E1~׼ke59ͧ+KЎWr%uKH 8k ,\26(?kBtfr%,#D?Ύ;>|<񠱹zQWVr Mnź񰹳CdQ*CN9[U.\=6͘|[JC "":1$?JMP@km?ߕ]~?;/ܜ ; 2 \A}._r]i")<^28Hy\ba-Y)Z1>ְy|D󨔥I>,. V҈Q< pWMmV > ɾlȂg=00+))q===Ǐ<|pJ7۷o ')zzg'w,--..>zci3gΘ]lA~}VMKpާϑjR9y/|͛7Qzzz4[sݻkk+_} Uݯy=zȑ#0ݻߣO' {mݻwݯw"P{ȑCS޻wBF[ >22һ0? UFFFKcn-/TQ(CȉǓZ-us/j候4*{;q)C^ظSjU`Lwthјwjccccz0? HZl jډ=m;Z[;5=]&_D2G2ɤBNxiO?*dg';n"mnnQ&&zר5j߿ZCǎ§[]u++ԴV:6f&XXXt*%?8Mpscus" @qU2_\m#gT0L^*ky[vG~4 60H4ځr@8;8k gƺc"(4 {rDZ}daۼ}SRfML,N{ʂpٸ 6!L+5WF( pлaA*gN@a}ȴ=_y :8xS'OkW^XOWJew=fH믟 R$/|ztp_7}G}Yrttgq~G["؞>~~{kVsg1,M#M`ѯ@*!VMikӽ"{ IDAT4x=DzMn8 ɰ &5!eîI::!4o+7 ´& D<Ý>av54 |#0 !OG {MpwG&*/_'GOI7ERyi@XFAP4 )\t'R)N:ߓ<.xSkxfy_n!ڞ[}?7/.78gW٬yHD %S[c."":8$Q(*݀_}qMTkׯ_tdp/;K."HR "ZO5144r6/ n1 i4 VqMYjujz ZV b|ȗ?H_P&NhERO6%t1S=_^i.҄W>Yp+#""L\m4f]XÕ#R\~ݵI#R3o2 {Ǐ!hYkV7n8~znT6m.:YcWf ut&mƭxձ/si,@Yv̓>w\[w5Ν;wU"Z/ϖ5wjNj91JٔcE_"R@* hd AJ,̅U'&e4MRIN&#&3*yy,v78p`ii)9c9šC\e&ȿ)sk2>ÅI] r !j0ztH$rȑ½L2.ÅCUʳܬ,{8لe<6M8,KoAF;p Ld0p+:AzRDH{sY}Mبflr`5.&7j'cjj =$<*JpA2&LoAr57Nuqh"e з~_nnn&y﯉$fHrcqSP= P\B\i%}5d\ - cqHENaJ))JÖapSօ'h ˽yRN ?aة5n'BG_:wp{@{q [!4>Tq' #_k!@dh>} a4;i |-f:1aizq~۷WɁei-h,-̤`׀圄غ.E@Klnmm]r r}۷òp۷o! 6afv?}k 7%|gHoT*D7ۀNϞ_~cg?ﮬ|IkFGGc:;]C`??,l~Wo_?{?9H<< ƍ?U߻wm@& GvZ"j\)nsf¬ vZGDD j:)d]'''̀ιdIN'y껼K/|'Iʚxi$˗'3pJ|gVT}P344]]]U@~PD^٥WWsBr;Yӌ14i32U?><2|MSiFuƕ_qUs/_s#{{K o?ٯ`>UYWW@ຎyYĚ3Ot̹ Q֖duG/Pz 9ʉ0z#y 8_z:_?p q4 (^0jCǎnz1R \\r3<򵧟joS9tK$uoA_N! 2ʨ\o-/_"I/Q9Bъ.aggAp Y!O!8d &%RׯH_,Kr~PnfC~&ϗ&ޯhdʴS,KTAl ""3. kId@O h<&pE),8>gR8$pH>XW;\Wa߮5I]XXpFL>OVMLk  f  $8M4ol~sszm /Qm<}WnRT&߽w\e+dAwZQ-h]GT0!E,ESQ}9= =MNJnoyy \c' asqnܩ$p0R*f w8v)Ozߒ+[Voܼ:G2ȿss[l] W)I/cm&@!rģIW~b ,__(簹'iMXG?P!A 7SFido{RXYtHI$f{S;0Qu&ɪu,F7c0r-M9\WXJor3!2<` } zF}:ۯ+9:" 3]~ l.Q-۷H^s,m68po_N<(\H.Ǫ:bYyq}]LyCW_ᇤxsÓe$2|߂TߥaN[F(n;#gQN޹r:yG*#&Q&h4M T(Wy\ x-+@6P `f'm) N` '$7 (*_d{Miš!hh"˓3C\{ ugWŋ0 kB&/sR&fڜ!>^CwvvH+%$(c@[r~˰CW~nP}oԚƇuݠ$pudly*pO?p?OwXev1ߵ̎8\{y9nTj.:Ԉk!;]#[btUBӭX##Z ШFC,kjzҥ۷qT.>`Y 6Mkʄǽ%i4FOv|npN QF 9;IʜcdO jTo ~[e#H y轾s%8<(|J8tV> +ѩ:wi@bNnw),Mj4ܡ yNb= [~os߁:8rC'¸#hꁬUHC-̫wqҒz7ܲ:%{.A-4[Wv+ӴOb42MZ'P֚-Y{0!.WӴȻ3 (0vlz2e3du}ÔfΝwOϟ?o='x葲fx&V] ́GÙoxe.u- pm}}3P&lrm%AMV ODȝ&'L5+X @*Xs Yybp ho ?U sS)emf)s AmvKW~;5*ʸ gD;[%q?o-&cI3>)M!P 2%fU ąOsL#D}}hss!˜cuuu 85=x&*C׊T$0+"f""PRuww_t F>}] ('&XOĤN&0~4ڑ/P{9MM 8pR< Z QJDa6^L速*C K-3M<毜e>~#uh`YO7++8OMİ8wkk S!ɸ.wAsQtQ+4Br`eyt .5C髗\mވ2̠Fo@ѽ$ŒdoYVt:tUJЇa] FU:7t_㳳7n$ՎClhQ̜ɧ1h@IB.^H.s^!xfQX !N? Ay:oѦwVթ,V].R;0 0ujVfhأJi42' NP׳ߒh\xjzu⹣1sm$?Mp*#Pϝ;x녅_a=~N !eI`^Ikz|7%릙W2+MNLo3H BgJ%\>X4Fb H)<&4"~QPLPȡrԉYSaqjՠam?9G˄pS"=Q5Ura/jv88:l Rw"Ltd1<0a nRn&^6tN +wmm4?K86qIqj*)_]7|GWʵvES, | |\Z\)1ANݥs26CIӣg^_~DQX_-dK0~ccuwIV$i%T5Xs/y5 m`+m~k3Ica~f{Wvݝ'"Y(@O!J85{(Z`ø,W%pH#?U+Yxӣ<fyߋy9`k Fbj <\XX̸I!DT.X +?&֜n"q{5]7"uj d91@'yvbF[?N ȭN:5$PcAZB7z IDATA+>Mnoy1(pLo4$yJ8c Cͦꌖ`}t1E*W0I1oYeϹ@JUA`6x X䗬U\P3&f\UenQpf1,jh aFQ,1j! n3K\˵8L " & ]wq3yС?-C?Ę̱GG ~)<JFj"`U-Qӿ=+DzDՉ6axW_ᔸԺHVHS_5/G6@a<~Z_ii. TdX! %kcy7,UDDDtunt'&&.]nllݥ:2<a\|3BdԔ@GzP"ڑƚ;'~yۈpd4`]9ґǗR56Ƌ.a!&Wq} }}}7nΎ8\!d?SLV \Gh m"\MqȬaGo D@3AJj!LG?yW.)J xQr?5"ΈR !K aAncBimB`QKc~yZfY{y2.64VpNQzSd33bϼoMG ~g$;?;fsee>Kq_O$W;{43Ŝk5۵p[wܕ7-w8󟚍+iJS1g㌱MA,qartbbO8chh"yIE"S4 )NMOcĥK&Y%jzMYx,inW 2puBp5 &&X!p麩)/2(\LQWvC}:󝝝VoC`0~r3|?rGQiS===ǏRۧT*$Q9>omm]p>{zz}k^Yٺ޽o_;8{q(?Hhu8<< ͵k48zzz.] ݿ{?d===${޽7n([/3җaAEjǽ^~]sg+~AffnNE:YK/;2RM]bRӮdc]t o8@'rɅXB\Q#kWWɏ>g{MemV!]\$*?D]duu֭[PWƾ[Յ $?447׮av$5sj9:,9B?~n2 M5Y3B ?IwęMrmE A?@*+RNn;l5wkd,xYk8CN[ FA #'' >ⴾhRT cW|чʕؾ|dKvqv!lt4L;{O_7Cro߾ԷΟ'COO=a=s-#,󃃃Kxa`3gpm+!d|յ633GNӃobiqBѨkkk+++o]yl49B {vֽ{_흙l6+J#Mft޲%DO`rXe4)+)CްqlDDauuurrVpX^ȼܩNQqB,aōkTpe\ôzaP $>&&̘cj6]ͩ$#NFѺ\xɿe5M9L)d{E+AYӛ<$LM-,,4Zilz$xehhhm}  8 [1.aBlk <\ޮu?0CM\N< _~ ތ2X[DtRpZ5ǝw%^mP@Teq$ʵ6GpK逨b'a&\ђ=`7Ll2V\hٙyOO[akw16!=?njo(Nh[[~Y~+W0^[[s~ ٚ?{me&\H+ޮ_9ExRz{k =N;p51@lf_aii~];n͘U&' $ 'OZVw$Rq酖“C K;lخ̈́kAS><9O ]lccc2Fz5I<󮙃)ӿ˿:%̣@aIӧs\vӣfzFNB F‚|2⛠^κʹ`}ku_0_@FMO ّ|WT=,)J<=:녅ӣB5YIlJ? jBBBߑ5ofb6'kn` 7DZ67^ R%sowXVcPBu\mJ24'Per~CN D:_퟾7pc2*YZP} %mV|͙#_aIrQ[P`.5v^O[^hM&A,f}D*1mR\]Do yZ*ʠ m)g+'W+w٦kZZZ:q\2>.X: mciqG333WV4_C%Bk?^pl裏0+ݻ_Optir .b##""\0??99Œ4o_sUǫ"9?;pE?;AĝFcxxxvvVlr17ͮr8չ"K_XX ~kyY#^x %Qׇ/^˶`/ yƍP(dvvڲ8;= ;;;?y>m%twvv~իWٺȏ% .(TGmR?5 '3wg}t qbϲgVZ$i6sqkTu!ET؋'nސ#.3`ʰ #?9;>9"=|d1{ <2:tÇnoo}mW<fϐU*]:BiwVz&3V'0"ȑ#OL7/_<擳Bf_|E}f)g6fr,)eBpz< %@XWn.!-4U#{+xEhO&F^V; PDS1(B]Zj A^76@:Hn5\snju###S~ߙO-?x0LMO,P4ZH__=Z^&-lf!'3d71NJpm\"B~T^;5)'i% cU)nq-ObӃj*|U*:Z#Wk4] WZ:^\/9Nc\qN<Y\)WǬzcd&Eg)p23)3 Zv*XSYJ/y^0aU j䇘T'ؚ;( S]TGp"IkZ-crOi٭,Σ`=rѩSC9b66pivd$C۽HrGm#У;x%>6s -O+V;wCR*԰wE[̓'1K-5@rFs+ 2ACP@\aEC$?ݟ< A(9S1Qpa_& ẘhќ ܄ aVN#jMe@X֎Ur(kΓ/$srxʘ P[ YOks˂lު|.hƭ&TtTPpǣk]d{(g[e+(1y C }T\=u qfxO2v Q\& ܎ow8YIb!!#ȞnD}3܍& `,AuFyf,xɝ1ԄA #Sz$Eo` OCq $ 2F !UWF;}]mOsQ-!,=%A(t[kcq TB' w=op<T.ؕNZ>|Ыs5[Bܬ%l墝.- f>h1۱lQ$ff 3\VU H`4GDDG{N$"񈖣C@f*M}|\$fQB t]ܯX y5 T !T8rdNrtRfY$+ǜf2G>BM1V<>+eJ hkɓ']]],9u*J^ +Ȕ 8rf8?/Sv i؈NgxOM_kع2Vjvcr.̹U}N-"i,P@k IDATG'oY˲;Ε{-?&4P:=WX4eǐKq({y {0XXHxK I* 3KPwme hgUcqxS[RyǶuhӰ}9VPH8`n#$ށqO<鷶5Br*fXiWRd)B.CfansZUAVYkù]?&UAf{A07HJ(́ ?0?pg9()/޹ӎ܃](Bcd u`%b>17,*p > kpkRH㤵ɜzzqAZ9Y raEM&H{vq#{%/d݁| u!u2,J~ VJq;?I?ߒjN}IdzrCv2|ep}CpMb-QQ;kz`?}Yc:9-AXشJ%l>P9+95"̳1،9j;WWDDDDD 矏Q6xlrrBNuY2hn<Rn'I3$٣|%Y#r(ޤ3`[LrԔ\G+ AYӎaA!GkF.UWrļ#iN%q2bl)]YcOȞ24P@/ɲvsɽ{Z$K ^SeZޒXOA QV WdEDDDAa;q""-hacא$E!E%F H촘rN #溇@v<[J^95ݒ%1!rrYNfͯ2D;FR~hʌy1*F1O |bDA%"u*XSˏ=ʘz[7[L-UT+e&N99L7x,ZN\,+[#%~ωɶr-L-?i,Є, T;!<hL Z2$}5]F+5$]rqزī#gNg'BX龒 P+a^v^pb[;7'i5?oEPVj="܂dBXw=; <ܡ"ܰ+ q0qi>HA[, YWol;cJ4^&&B?K|ϚYL*+* \$7e/tڹxp- {j9I MZNu'U@rwkxa6xakeҷZ֣gHedA-UBȭ|-GyƜ}\,_ůOP[<\Co:wxEDDp2:""r5ˈr͸k$c X(ϊKl:Z3%IkyC&ka+K9*Uf[\Z`du^NZ{YX2Mu+7*cq1;F\im>QZe2m.# edXŗ4+m DM#ƾG6faux͙=ߨH7UWPv2P;f-zwx@4]] gv<πq @d m72p:FdݝZ'^*NV!Nb Q`3+*)A$R$\+9[-I]Cc}Uf ~F-Vwߒ /o.Z4ӭ܏,()J&EkzRTR#+q7+sJX~^WI\Yg 9 _,ˏdjV> ny'2.ͼ4yŶ PG.|ۡP,J%EnU\_.F^tʝ$̹IS!#P/P\V)I3i5eVjhqq5L4-G Y8n,*qlVV |`{@:*t vq((?X)L:4.LGZ5 "[{QIW8PM,Ifԡ֭p] kHIGZ7"̰Nz;SQBh:H"!`a޻y\JSŦ=S#\X %$%$p]Q| ;!; T>KrBn`oOףW?޻R߽ZZF?̧/N!J+I-Eѡ*OmK1|Z *8T$;+&f&~DjQ*N `pX5U_nлe.Z ]N0h>(3Jvڬ,pPNS{fg 5ၢtHG /$.aL)BM&mI>_R[c  NDDD!MD[I-BCeGrjGx[4)' :_irFa4anLB}ma./?36)N'h&L<31نʍ[[&ˏBgZD읈jњ 9'9Xg&1gب-?❦F0]`ejxnLnfqLFD4(®jJ[vwŇVS>K}y>UFm S#/A\2?bff[g+R O(a6Q|X/g磄&1M~Xoi5 Wʏ27_/Dv+W/SNϜEX@Iu$)U=#Q1Za0JCMkcE#●ZU¥ҿBv6SCm*̖yo(S:ZD?`>jɩёBk+!Jb)P@cDRʃT+0[XkQCxOϧ˂*:2юU6(0 EJAV*-fjv Ű@5$Dq¦!tάC?W|EAslV:c^g+<1J,HdrwR]F9p@j%MQ-#2CIjT>\)#kSr|>m(iK`bT;%jO(@/Z ̋~+&i2[)}`BT]KՇh %2PGe w,PM:W7y qC(\j|x144%$jW*ծ<[ᦷեe,m?)x L+@KVZ g F) jmFjxֆ-}oo&F=(U\͂D*V_ޢt U' Y{h Mi:fQF]TV0 jxn,LŎJN5 e" 2ܘ׈ݤ>{~[Z@Zu[[۳jussǙ2f%ngQ /sԵE5CԊZa s:d),RklDD(r4$nF eޚ1OlP;ux6z),ơEFs<+mqY5#:/Q[8 /U!lh~~ZYYys477%3{̙S6?{nbFz%͎oLu`3tH)W2څ"+j&\bDDD(\$nk[o]яsΌ$$ {dtt aݭ=.IELLL/ܸQZ9 A?%zBJIJ9?=Q6*0O&V3]+nyj,NE;*ԵWNj2#ӡ}|4+ax:aOزz};Uesr^ID d$"r+==BNbeeׯu&eAJ;wK=88sG~s~O}5 hJ( xGrhlRh0M5ok0&+vDD zDniT*KW\YկG`hh(۸f>IV+H)&fffCCCJeʕ˜A @g:w4T)AEӢ~4)Lh4[Ce]OA€,)[Evo&H|."Q3 QL!9n"A2"S8 ;.Q WxVK]_@GA"V2 _ܿ>1NIl:r+xFD "dvwwW>ޮT*#Z_K,Gr+PQeY^^Vtq_dLS>@hZ74Uq1Dsн|52n""x`2L`Ԃ#$"nwwwU}p"8HE:c9O vJ[Pb _tN0;;yqqkk_Gnfƀs/%H> hKO8oahԾt`'z177(PmTU]@9ܡڧ$T~Io7:7$X֮KQ?"S(tSqgYxCy E6qIs$bP;\^^뿾:3sQ;;;O9s\aE1s+_FX[[xS:;;7?^^^ˁA2gw%2|rh 4Bi#O ^Dօ 0ZZd[[.879oy⭷'|q&4$7b"*݂ C񑑑Ahb8eQEWۂ\ess*y9P|b.QutkIiZ1S$im ͓04ڞ>SFlai+ _Qٙx.w. ¨a[D8\$&2g 5gw_F$VB6IVu<+#Ӳ2"-W'gДϪwyZ ɓ'T+5BHsxxscCzPLD4HfU5MX@)tKmZ! Rdrs! JKB`ܴ$T`pehrxSW͖% 6W.ۋn@o4 `y 3 kM" IDAT?Cꟹq9"# Ϝ(ϲiaGt@gO+^F-RoW>۔!VR >!̠^{/]AFF't 1Tb|!*TL\JԞ\A|FLh<݈?RM+F# n!?/THn֒@#W  ۭx7Чܬ h6Ufe{l.3'*SU80P"*>LTRJKqXߌ˔U`(>AMi~.h`29` G9G뙆w2Ez-|n\+'̼~f&P~ 8vE9ưܤ"}TmP#ՕgqMgQKJIjB ":i;Actk kddf4[5CU0% X#kx&W`YT_B5Y5zD a_SuLnNTxpUӌ*$/4L@p` AJV8O)uEUhp2D9e7:Fե[It"adMwoNMFM@\&݈y4G?fy"~_xHyy4zd%1WP]\zDDn(G,9c}}]w⭷Ѹ333 ## Yhc**7hJӖRr;M;< +J)YY2FO%WCSϪ'\1Zi{Z$LKL4^0e['*hG_fM{ŒTͷ*\DPFVHD.6"V#zn.-mES?P=`V/t8%nFDD4% 611{~~~⭷4WWmyÇړr܈B 1@(ə w!T"zP61qyVdzaBѶל^RMlzUxSyd&gsC1= B嶈_Ό/vD#Ҩ GRFw Yl0 -B1vtVCc}2l"M>ҍ:uFk[,5zց둈(ZBcB iY2SS1CCCkAwbr'&&kW529c٘[s Jx\um~-<;PyH_V4$ [% L!AZ=W0-J 7[|pNyђ4Y K)!p( ‖͸ }V,I5M *7e]<[%mQ˳`ъzj#$PYY8QƐ^𫝝rEhЋ 漪7Y9|}xP]aG%ύA+o-""|U&a>ؾHܟ|iyyiy^}ez[ro,,vw!-m<9gd=ڋ Mk3="g0\>E h /7lpm/d'_9WgL/D])э;䣜@'8OHF͇;b( JU_{ _F2"sDXg;+>Qȋ-]~¡|=_gXF! Y4EiE}M raέᶡq[}z C̙mjY8'RMt4vvvZIvII^yE!l RJ3|嗏%onlcpgz]5G%Lsr*@j^]}`@́J ?NCmkaFz&jw*7d# :r r̢cC Q;js/)Zu\[ҙяt7:aP̈́ԍ7_MIj18G`&ƞGbI4KT:YY19ޘC@b[ ǐwfڊ ?9mkwhmYo=H-1$ ]=os"'ZR.417i;\:_~Y{ ï3گ8009>}ɔ1} UA=lnn>Z[$bppɓ'2X; G=} `y1̙3ϜYY>j>}ؘ$ձWV76IoR=z̙3 O3>}TVyZO:{xoo'=}__zmD||ǃ /_eP?y#İTqRZ7ÇjC#RU(򵭃Vk,W֭'ONjqܜ_Tx:SKCCC}/Ґ[[[ YTޜPl=ydkkqqxz0:\+CC]]]!VWWSJrhh?(?#xVQ[[/ԖQ[LM[/ (͉hloo/"WqهrĸCgi׶̟jPSf1%2tIX5MҴYGJPYc nWrKQPC4@0ꣀVdyZ*)g%ES$_ῃ|pZȑ#jL1TZ4ٖ-I4{j4ѩ9Pe=ʾΓ~fB:lC͚AVA_azA+>YD:C,#_YJrM5lEwuu}g=yҥٳqׯ\onnG&=+ܼw-˗SٳXY^~MWss4zP[;wG~ 9wܻァ\[[{wόQ߽s5(d`p|㶶lX*k-ۥF%l$jB 8/WTԨ jR j4Qk(bVQM;DJdi;qSvwo,,[s܋ĵR֭[#jY^ru,MNNxfFuzzzÙ7'&nHdc ;99dxPZmʕնhTE8'f^_[^}U!C>;;˅t ?>Tׇ~<3b5ra"t>u !">JǙFfmAGM_(pBwC*ka41l)&V\&F%S*⡺*'z[ (hDahՁ`5,|PURhĪWss)wq聁ncgϞyf~rx׿mkk;}g{{{?y,;;;/՟mޛ*>Uc= {@? jH%E߾sgl|QO&+7d,p| 90E7"T?JAG~wqqqxx <.v##_ɕJewiɩE91a$[sss /D1 "W A.~ .>x`qP&333sj/ EciyC*d`MTyugFٳ3WJR\j&j8}MTH8ZNcgsn90 EB;wNRzoo'hǏ,|k qJѲMCyܞjvʽ7"""̘Z{L-Uɩ)XU$g,:9ߋ=yXÛsss $y㔅T.l䅅 hyW2&KKB`R9Ul +X4g+/ҏLtPI١jaF-I1|Ba7,PR*5Dy4>2SpT0PO1$>T)ryQ"T bGAld+hDbV|Z"2z%.۰ׯ_skP' hc S߳jɎC$kL r^vX;;!{U?V_VXo/snnҥKC$]p8w! Sqw{۷NҞTeQE߸tX΅:kY~P ,&9s."1ר""2Q1"#`]ݷng]S/ Crӻf5ndtTUl0$_JfRd1*7rJzz3_ejǜJ]՞ vw_$333>D`S"My?> SyƭKՒhԔYd •5%ivFfS̋T$jy@!0Ћ{aR0JJ:eҨw^UίcLլ:::ªuTJOw[A[XshRPxTCXtg¸ݕ+ɿ.#xL[Q[[?Pr"3򒝴3H:k{Y(Y֢\vܪxZVVV[uu|QBӓ~] P޽{ʊ1Rӛ=*>z޽{xI:;;CH]@{VUz`pٳϜYMHb>J0,3[䪯ܽs/H?~'6:^gg F^_ZZxi{zzO*Q򭬃ގz&I04ŕْB[ ZCL,F *U j$"hJ5Fb$3CWbC O݇ߪ5`y怵Zx;/"mƮqk]/ƀ MNM~Ą& M_q 7n<\]Mܑn?cfVǭj 7nnoo'#ydd͉ TNRJFoMM4~&dV[UN庅񸫫 7nlmmOFFGU65ip+i'ݝ{Jij׮C^6~޽{jW`+++o|{ٙv?!-_2' 5\z GmVq40ZQoj\Ao{{{xx8 xFvuw۟ 0$5 GFG+iVmu':xuujjE+jNbLGAj_fgg0< {t3>|sbLj񱱭-tJh{n=yF!k3o(_n3_vP-d>$!х蟒׍2aF1A腝kՆPA6N~)zAnkr#" dc5GZ1j4B1rvQ*{ hw+Gkkׯ_zuDHKAc+3U@ZYz&znN4֞lnleK͍ 9dW7F`رc+ wtZEߵ `7pA{^_p޹}[ MQ\+-<(HwޡՂ EkI= A*ǽ([v3֓'i0 pq_ Wٵ~WW$]կv_u*  O޾r M,"=<ժDKΟ.Kmpj2ګSQa5):֟k;eE|ʇ*4PCX>)Ts|otjPu+, JTncl(} Q6K.PhPqTAmeyҋnwŴ5I$$_?UZ7aX-$>;;;a"VpLtoGkkH0{yo~rggnyr!j>5PJp IDATRl.67 1"";k)U/ʍA d}T0+{ViIe唜,FyydaT ?`Q_Ev2nmmWTc{-,;R?/y}kS={fl``^캹!tҬ뛛cǎmnn>~FP4u`pea5r~b$1Q 9թVHkoo=~\KZ* Ǐۈ(-'$EBr?7nF*;BKB*ѝ QHOچLzZ $RZJLQh7 \\ jSI.D([Fu/ i\xw57??<nL3ɴ!̖ J(ٱPY0&,Z+mpXYF6FE{A)oTZ4O |.$P%Dw 2 .F W!+ۻ*&ά >f(aVhk\5PX:J,"םRp&{ iB]5K@yBHf>P+/$8%ܴjjQ)V9}3@ƺrU B{I>sn| P*pX̪ۏMsrf23˴S,p!Ç]]F;9ܶZ=q# B=Wx$-OOT0Rm hcon0,I+xo,,P`mwyJ2?7wńǝO'q  U155Cr#q J-lO_ 1zl2;CI5*w*7Jer! xf2^\X㧫{n~~⭷~6;kA2/: ͬmt]I;+RG[#X[W-v#q7HϳpLJ_\Iק}}}gf;7"Beϣ1aw&`B !+,Q"mMlx DLh[eHl;l%dzZ?Mla{mZBpPMIF2QJJJXDܖ߆uhD)#EgߦIϝ;weT07~篳2oۆ5C/ T?,f5 l{a|Zz wh!rABG3=kݦdT7ZVx2= iZ[|a-Aggfw][[t!D񠝖 Q3i/eE0B!z^VW j|.*Ý ;aZKub|C#[___q]__xb؋r䶵@f:< RAK52%?̚~ߟT_ROZNp1jFZYGjS^raVW<3[T&3hjR6y|'Uۯp;f˷9Vzlw$g~(D6Ti zF47lz9qk4epM) u<Y~G'qFcO6Zռ|2-?m!U۫h`r6^,/lrX0xٳgh{;d6U>vyI?teaNW{ylsYHeOAMy<ņZ->LՊm0[FS[BT1F+ElteP"+9cvD>\ښ/h5>L{x@vgΤs\ ; W^5իW^-Er,p2>IP)l" xl||ll/?)ӕ!ՋE+ CL&o5]-0)-O[}9HD4.LIԜtp G_bCH-=x@}xlrjsuDcK~R|Z.x+n R[݅333||<6@K"OKBrwT.EƒGFG! !xnvrxƅq.oF80;Lx|[s|:@e7JxZ[.hTb*% 䗘yv"2a-`ѩxznKS$kFaOh\ G3ϓ?C5uuXCGz/Sǖ(lVU;K$eݞyP&nnn ܄OMxn> h5^Y^ϯ^z98a(/_|Mnj===ݼɯ99<ٙLoo'^-:H琌ao"Vӭ*ӧOCRr귽}뵟~{ᅬsqBkl!>7VU\&}ΟrX.:\Gs6/!n^[[RC*GFG$:̕ !V r~|UQ(H~G6܌⹹I [['߶R >,44Mf#֢ȑ#kBgHcT)h2`7"isƧYZs&tFI.qϦdbtȿ(qҁM!Z#M-ٕIhH^dyNmuUq0WHsr/Þg+pULywM klӟ:;;WP~nee ߜf<00v*ܹshAO 980Юjh9{zD󣵵iۭXo/ ?J-|y-͍卍sC?L{奔nll搰gϝ9ׇW&uN̫v??0j|^K~ܹ ^>fT:u )>;oCyQ'?S|Q$%S5[+u( iuahS {VdYjbYPbD irϾC$p˪>3/d|֭[#ίC*tË/J%-k)hprr/noo*;DS{[{hIN;O8MjrwwVT*}}Lvw_}U'(-F Je.j (h׷/^dNo_~ڏ Lёk^}0ńnnA $̨jB/UZ)~CM*DmE3n?$1 d/ qGǏaT5ݻǏ&wvvѷF8|lo'|@7 y)AZK^Tt.VlϨ2/b&ߖ0 먊X~fTb!E;lۺc^2=]TWBvwLO>|֑ёUxܖ ɽwX]]u^T˃LO XJ"v_{›GWWWaL쬜Ȅ,3.,,T*x02߀jMxSq.'r^^~z$a(z@J(:R +N[EP%q$Twx3?JWk#5&2UH7h~TcV-6].-!Q`M*`ؑ38C5:YU>T|Q,CS#[܊dKnhU,ׁ.5sh`_cixm NWoj+PFT#"|P饰k Y;} VYړ.uKۇjnIÊS[Յ Ftvv*e,,,ӷa;6䌴$|ՌqchTǜFT:ؘh&+ڿQV˓ǒIJdB`LX(nEfj>wP> n $JO0e+R*zd| |Ki(hԋhP1HT.KRxV7A^b/]w#T+\M]rS6WåVsHF0Ըv]w!=|忿_~|$ E q ,7;'$HZ?dGvK 1>Њ\cc/^Ly+uO3d񫅟B*K2 MD tMw#1LLLJlv( H[E[V}|܇^M\ImVCh[YO)XK i?('9;z|@, 9HځCHjJA !Z1O`p USS)1/p1“>eQoQEhNPO QΏttΈF} $q+$ws~oep;YK@msrɘ""""Bmwwvvv|l b1 !|qhhhrjvLCr|3(jrr''gQi\8a.ybJ]]] ȰEMaS|A IDAT3Iofg?>nmkk{qy/.Qt矝aR r?o $)1yfU6^s1R_r!@  Fɋr ='޻-4Gd+ԚBkG9r hNy TR=vX˜ϟ?_[[ꫯ=5<ɓǏW;;kkk0&KJ*p&{嗏?ۛuZUP^$no. V7B "UֆeQ[Y+cעdl _6΍<a(':Jѹwvpڌ@[@Z܍Nl) ąZN%w&(Rɭ'OlmB8+2t@QOeשLn[rrI5vJeddRwnmmmoon>y?%,ՆMakTȬVplʌ~׌0t䘪ڋ)fK*]U(uw,ov (9խae/,W14(ЂȣCKH5 ڰFzx0O#`KG2F3S^HޔdiGlJ6+RwT>9r09=e̺쏅!2D E媭؉+,CuX@[̓MnQ0ѓyG GofxP|`#[m|{gi㟿r?# /R!W3Nг١R*hK`,ѩ(V('Nܺ}[}. b4aqh}qJ $h!#.TT(?ɔ+YꧭAMi 165#hs '߲]#۶@_%ϩC$3¡$)-δfg&:єh:m 3Pe@FBJ}ˍ^GҶ`Z@ =jhoASZ)(RD E*_Q0FS3mDq؃!cYz LPEo$yu(Upqf@tC?fIrC+Ԛ2m%S4i:_BM}rȕ*hA 9 !!?c IYotfl#[;whrn'i UˮX"J@5jc0Ox -AVʧDU*!GlmgV(ϤhtZhZyia |)yݠ[4~1y aB۹Tݜk G`^X(n0C)pc&V8r@6e Lvjxxnjǵ';ϟ346wJP/FUBCO8 "J j\$O?7'&; 7%A o0yeQ u)m3}7Jd\M@x!d:KN !j7dp̠%,B5q:CsjO~eX:edD;@R4-+`n˜ WX̧$pvs{Pen,nh HR8uKZ7zau-gϜ%rnTlI-8<&m*X9"gi*?oWW ]___\Hn >@C4L(M!&eBA󴭬=3D!TL EZ +Mx@٠8 I/B TnFWDDDX&cAdp{iAI'NQǏ E>tytϲ~g6 47pfH& ~TZme?8IˠGv$""mrjKk_~EnD!8q댲mΙ_5Ź JcLfhVCT[a3~|'/Jo;= B Prbnm+P:L`u!RKU`mUhOqIem%/pd.<@=1sB0x_'ܶ ᄇEp@g&kkOKyj ?V",jKE8ʍXhC!螃Ƴ_<hʒ5/CwP$+mivSn߾].{'_|S Fɐ(Li D}!nE3L 2: ,U jZҸiD薮P$OIsvZNZ"?!7d4P;ND4B%U1QT&''3*10!Bk_$:#܂R XKSn6]޿P5֤`jbJ*;g{Qb;4P~R x peVf`vĸ i;Z&pIF*cG\(pakGq [_In7Ub_av%0cJrwh=c0^ !rB*E!H,$EldW">G 7O5U^Z>A ms q===?)n?x7T)sHs:kJD:HJVr]v_'Fqh&Ƈc* kUL9M9s+!|M8]e6gQ_iOjB!qZX*8pc mw sˈP7i̶eNƨ$h#c^*.yBӜ:- @^:%O*ڄ$sZ/A{g:uEcA~QjS](K9ZZKT]^GzWn렴f衐s5ma- ͩF msSЂnG4ƣ^_pې91?[U+#O˜)7,|bE-| #F zŠ*ô*UDl)"?99YT Z'۸4#lw} "Ǔ桂,m_ J.$b՟`кDH;3+xlݬ}% PX>zws)Ty^jo;xKⓃƄ;(aTԷ%۳]A<>~Wm KEJ3S xwDu-Dß<|ʐQС/祃? [ahzu1?Gcn_s,PEk[LEV3tC;|%1{',eii铏?TAw$S-/ok[BDhz^᧍*NnkG.HSe^7nVAm`MpnBFFG4 Ml*Dh;)i ³Ylͽc(sssoNLh*R0JZy&s'.)2E!* ͙ڜ0VG-THًnA4 eI( C_\xI}oiYc0=jŠN!-3BUNTh0h>GG >Djv`ڊi.jʠ0N1THh j1d8 `/EBE_cx (/'SȈ .HjTZ[Z9\Z1lGHpz~Ν奥3cc'O@U>}\Ă&2sdTgy.V&.37ࠐym6QL&[Je3T1"Bѕ>_\qA+3$fwqrOPS2u)߳MwIEC!(a.JTO M;whPMt YN )6mеP Ue.韒 e)¸0>t4h|I^D=zȑ#ZIc?ʚȶjR2XA3 2;?uGƨ9%;] r^((چ_|pB)\eȫI>%RÁDC#M g3ddAۭ<=%wIĄ3W7xкgdQx9c2FjBR.aZ*GŰ[i86_^ !H|k<:YubfB5R$ظklҳKu"90jU5>k!E[kKnҢYu+^qJF1$5N F3KI̖rBFIا)Jid: !=7V$5ϴj}ax fRSsȄ#ʸFC 3J%?¸ߋ ߧpvWZz6O`5 (QKj{gMLجT?ԗ5gPE;,Tu/HbJXVW|d\sӓ%y:Is &qUֶAU˜S%ۏtJ-J?LX|j)BYH^H6*n "4 ӔEI>p1)q@(^ŨC>xZF"棆2uHZ(|6h.έ&/ϛȴ,[< ϐ|T?tl5**0jP3~r)Q o.0QEd0!:Bfv(G ~ اv ?aEjp`JԔYj^j,QdUs::,f&5$T#Sg2t(}LF,7l q #0$2Uq#i I*nŤ !ø8NR_EElU9fCf])[L{ ԘCX-G9<!1SOS)1 EZ;H8L"K(sP.AAh*khnQ!,̞V .ԽЖy6o#"oVɨ|(8 D#~G(??MG Ly%Cʃ dr}|<"/+9N@:Cc%YjxBH|$?#3˰kTA؈sb 5-;7StUGz1dj 0g DɟNSȌD5` 8Z=( c42^Dν\ݚa>7e^=i7!gy$jT4fF'$hwS{l(3";>cE*y]hFs $'i.+V؍L6ƍԆ1-Q6/QEBB' thyZM5 cT.xrT>@\K~Ƈ%&Cx4n츀P/}tεl]N]_o!k|[uy}Ao|1BD#9r-->,V@Q1mn£ sGV?Bu.͖}9kѸ!>v4*%֭$yYY d 2m$zPFl5j&"( X.M=Xg4n;9t%,7~r7Hr2a4Pک3% | MjGz{Ա&ͱ i-u,^EϨiN4Xnxq;!C|V$V8v u^Ie[]ڏ9"N T|EJV'-rYjYon[Z[EG PӣfX/aqrt H#;  e2g56|qr_Q-@P69C,(&hZzvʐw2z;}!'MQ06U ;U3XƐī9Tv[ڜu!?n -ZKVceRZj3<[Llcj& 3V(isI6 ^^0{Bfya6? )<ѷڡ+s+V9Q*$Q@InԌ}1hV2ΓXd)|0PK(4+(]TJ,F*t~Z!`QKgj23Fq'} 'YVۈFX!Ѭ%`تMuQCpƊQJ 4; PE7+f0v:>p ö* IQE|HFDYeu&NNJhoD}F]RM^wzm &%JSG]qvPMxetYIԸB_X^ Md|^փ%w5 IDAT)G"QWhQ0Op.QqXhMKJ@a=)ak>m"Ђ ւ8ud%DiHBdb ]>O "fk23Z3wx!*<ܞ5%mئgW,2Dɹ>'m_&8]ՙ&wk#CK^Gk-"d؆Tމj7I /95]22bʍWq wp"C]?'"""S4ژ{m )kL,-؄43a4Յ (ȸwm )R{`W3ڿw SOKĖK/BaJ OQ%FWR+u&q$L =g{PC.Ð'֒4*&nj7"QHL8>CPT]E\Dphʏ@=e?8!k^ѿe`;H8txǍwDD9єeDi_k HhOI ꙡy?#HDM4 AxݧW%))C$3a{*=TjmXˌ3vwmo#Gˇ-P˫$۾ge.*NJX"KEeY#VJ%3"%Ӄ0̨>A6͹)7h%5OlԸ* Eg4S5AKTWR*SX$DCDZEk}`R5۳ DiR %'{(N zpX(L+I<.˥B\#"Ӥ`7evjQ5vڍnXRސf<*"9o9ghI㪴/gVthȎ(ռ;UJznEL֥7t ^ ܇ltfNLeӄq(P`uʎJQfƛw33ْٶht  nOqӌ~[-bL/Pݗb#~Pז/Yo cmYE+]djmOFmPxrH4AP(F$g!PQBGCF^aqQ9,:@MLC5 _pE{fBfQB61~)""")7w5k\2<ïi|UK>¶07cmY#hJǠ d)b<aaFRP+1hr %=Sc,E}j.0BnMu*cF6ϖףr勈DCHkJ!A<1NIW Ԧ IR4玎t Կ)E+5وoyq/Xbf6"auN|8]H **o%u,JtAnH PnU]) നCVn&0X4E8M&,16{-M&d# f2X 3 "2UңS |X&=iT y !OSݴ&5CNGLP=KN |lZk>9PQx,%ʇ,pLkIFBn %/*d-|IjSrTb{96Pe fAvjF/x磿 g|J5q&*aK 'Ll4˒'V_ghe9/Nv<BiNG+C>Gp l|#Tvj ͒u%YH:C4`Mo. yoˌ2KH|'MU4n8zJhyjRت-m79$)yM h^aTpMOЕ9,W1[|qhF-31 q`uRYڈJ1F kTTCm=ȍ- tT`R.Z~.dXJgP;<V#|.ƫ'l+H;ONXg=ɿ⭹iNqR+A Q E\gvr}h V\ ͘aM #ᔂC)[yTJ&w巺'i4h[n"0ZJ&K`Fغ2rwPP2n9_0 0$C#W7Sr#""ԡy\c[7+9%攗'kň IJOeȴ Ȏi A)h*>2P쌀AzJI؁aB N H5qjHV'fڠB y2{MA,YrͽO~Vy=s+BVGD$H%#4ug($4uV')|Ymsk9B MH(F y:9CA =M,X(+ng{Tx9׿ui=򗝵;e*_B5J2p{P4÷5vQ{2αo= ^w۝MXZ9Jpp&oJ:֕+Dkve9z%m?r16ā&MPd&2乨VHŹm6e((,#G J1)mځ 0_ (rֺ_Kqv3yr hkJ$Y-_\{j+[w*x5ዽow5DcEgǠݴf-ms9q]=BS› y]|Pc#!m7#yџ0Otv"=hcލ*( ~:SV,#x$hg @N?b2b6ṃjN2FѰ1k(GC*. t(C!b-bb6| o?H ɛ+ !/!(3zqg/gtg㰈 H60G(osWfI|3w_hvR/>&4 coR.Bicq”y6QW8yIV U*"*^k,e<2DS|ԋ!]mλ fQZ܉D׉3L~^q['#y O }H5MC0 Q "zsskE25qDt˘FBOWOr}5f1{ѵ6KW'Uf_[vN\h^ԖE{hԖuʜˠiN7U(&rV#gmL, = {ixj/CYKgV87h ԼC^5%@c/rbC't׉4dp\ XE|ʹ^!LM"yx|8|7?|QtCr[frѯ'jI+m9FIJW$ .e{'i$Ri 6c4K!Z8ǹs\8^b/t6$A/bjvԪU+ә)z, &oD6`2K)Q!q6x_Q $F f O'T ߞ 0p3;Ju76%EW0 $6ٕx G/O)sX@P( Z(2&L_ '`&LisurKċXnOvE:pF^'aE|>S<"'j{3ujE%Ҙ -vP!F%_x^]eP ƾ3I weÛ;Iw*V N4e5#2Qƴ@ŹA_gC*%XtuvZK]꼣RK_%N5\&N5 kN,Q2=ҽY@Dw{5*M'mՋY>ŷF+ٟ0WW@FʭS$O;GTL>ik&9g=~^USU=uhɑZC$5CDbڢ:kl('H`k=Ӣş[DC,V9w V9iY . M CX9L\/| gw 84Fhܸ~pt0g&X^EQ ڛLB3ki\֋zx̱ P.{F.~CImnޓZ`"fjd1\: ̯Hw񇚖U>ijϯӶkr22E@, $26mܩJ *8o@nݘaMZq2 Jx‰( }ht=vu$jo)PBPJ*,@K"wָlPGr45vސ0Sw#i%gӽ {+UOJv>U S qLa* qBDe5MѶM-Px]voh;^*n^CtXǟѻ H-ӕZ&$*̆c-}rS?nq˭AkC,\,~DQ{!$j-MoCH!MI3&y$k OuRq%',a(@ohvw 8e{iw8jxuW.Kv%NyxK|c>յdTl L\&**8Qh\D_X Z_B!zaNNυٖh9CGpۓ=izߟχ<xᒔSx /5wCNU)\l[9-IKmk)A~3 IDAT0n5ؒ?3<\])iIz(׭w g 3/~rn9Wi$gO9lM#_ &_ ͓*r 8o +x:鞅R,WQv{7싁5N+l!r% @͗`rFO3\r#Q 6^|y֌IQKa;ri]& D4kj, -?I i gSvu`7u(4 p9P[v5aR~|XLUcXD=8DpgVY2>eGkj9cu}҆(&#i UWՉpcHjg^_'>yB$ yϱlbZ?Ӣ:&bs U$rE,@D|!. ~ʈ^+k8' ?ޟ:#VC]P@`8d=3wUьxxE)Et(mU{D}8SQsQA/yJ:4N/<1jd?!l7aUkNePOCi" Ig ,Ar:+vpfB(8jkL>wxwO +1G6 ~hW  ^oEj'Ũ=GcHϯߕDFD}]7os Ϙ8eX 7%mp PRiT2Se[܇U/FnJp'z+=u[3=6e7f_i>QO'"bLg'pb3HgZ"1S[1_C+wȊy kSGX&X7 -OGVɖpPl;Bf"=i#s9/ *p5j z$ͻOĽV^]ߜG'H_;p/;}GxaT XlvM:k}c*d@\hi^m񫐒 R t ۂsC$rE{LI,+#Ɵ8e[(uP)X,v5|u{c5uHiF,;ZW "~LwW&CIȲ#Ն:׶n mpkRz)ӁFvI6C..A};6sLA ~X\+{GgHa1Z3p /G"C6}k/-?ԊM8q tܜOT#(tr"GF?_[&dEt< |)M+0׮25X2/i&I'z䃄tB4텞*fC%7ضk,sJ @́Lbv;׫C '`ʯ9Oځ|-J)dI di3!f(G٩P@I$S9@iDeCbJĕPn5KSjy'}MwQ(ZLBb(ÇyV6gmNf 뒣bQ 5w A Q~c}C"ۃ4Dj^>'jU-ٴ[n_ %P<|&L;gs4g<͟N|ɮqf35AmX MsTI`X]$vՋ.@%ozX" z Nw?r h C6>.UU ,tC-+|RY: y/I,{*6F '8GKWp9qcQ;W]cr[n9^ɉB@R =;9C6iv$?Df߂EPjs& l1pfVH3N鶞~ aT]̓0ȃ 0kouZRB碉yV`<̟1}{č2=5 z>MzBPd&!F}jcM"^ȟ{pҬc}T3ߩbF"/BFh´Zq>Q,5 Yi%: j0P c2{CuJ9H~LLbs_iK[PC\GZ<,g.>ΫA<] f윶T%ń7r:޲s~M(LL5vӒdm#3K)^4'+b`nt)hճH[:9=7Q4uxPku ACGL5Qs`mMЏ~Y $/D [i \VêAO{^?/nR(2C 7\sl,\xt^Gdw<? yJ^ls}Ù TXE?M7z= - iCS,s^a3b7S5Qo|;*jiFΖpawBԶ4Bajk(iO^gv"T`Hxҕi\u.JXZ4L셇ε ku].Q3t$HdO > ZWJyR3%B1danZ vsH7%Ek*DDZ[@9k:UPV_&ZysaǪ*痿.t5ۚ[Ew,/Irp[VJᛇ^kxON?n".ZVm&2hHd?Qw8G}T3s{. CEspH1oFc5$EIy&^>kw YkCp  ZqmK,H|߭߳|lo') '&z(trZ.M$#'|g߉)=+~jk03"x(HL8DPpP$ZbАfyE JdjT{{[Z/<z[R` ℿ~ARzdcc`2!9ǝ]h{$8ϖ6B}m ĩ%:3wrjסx@i BC(LkϪU9Hy|1ExajRM v{BPӖ#?׀9qCS>IUNTey"CJI~O/dQXKh4d%17%g,pO~Fx l x̲L_j~ w~kH"ey:-"0 8< o;6ŋ#Vwq̞Vo C5VY`I~Y[= ьIjԦ!y wv&+-e bKnf2l^ S BP(lATB!6V>w;vh+g(B9AiR2tN[o 3/]Gjނ6r^8ly\S&ܢqZly:gE' -G6ȁyrOgl7兛g{D)l!sD]y7^B3h _rxҪ]eS U=' 8τHb1&%$T~ gj4/-suGs)g ;ע0UQWũÜrx髨)Own!~NV-Vrzq('=-P9t!xr;@;B'v1+yٵ+.ec[WG*bI IDATT yçx+:;Sc'ܼ+a2Q0C+\ŧIfYQn SwCGM#n'mwH_Tnk]S׸[5;_{l#"a=C@ G"{5:qu=ĘH!.P!pr [{j|^ҽ|?L3 ^J[3p0 s/^.] 6 %fG8cP(vLw'GԢ/nЄ2ځŌہxnS ,@zVicHvBFoEÙZ0{oɾUP( +|m~!_>95\^I?FZ.uUID8v,t7X:Fp36iбfi9ݞuy½OY pncbas zZ먪*\)-2uH|'L<9=ΐ!آ\ɸiMrhmgN>8D$&8ZUli 9坝i=)7ni±sI >o49n.(ܓЖLJ1eD*㫍?AO 0{<u3o`qCN U(% 9GVb}̠7e{]bƴcb4F}c#XHhH(M!.fikR4W1xHk}☊d@c4ODIU.,7j3Bk2fBld\4>&&R8 $FZp0mpYc5f2d]e _(a*o˳퉷WԪWCIW^n!4=ض+oj|ta/jQ[g&xW!d~j7O-ƚ\b D]bjț1|@x3~Zrpc_BZ|ȅTPZF CH9?.g+718('>_b8%w]Vo\<.5gy>]v=<+}2}(.X0Rb;>!18|6^zbxYi]k ~~~\gŗ-LC(փ/(`nu )6z. 5+40 |!-ޮy2q[^' ꣾ"} ;Զy =ɨݹǁZ۠%_;~X^JBhvFO<_qD Kh*R WsM6_A"%@ <ߙD6 v"M9AT5ǵmQ6#*Ghx&Fx(u2Yz 6lae]g'#Xu4xxҤ(|>mq#r[*1|nóWy,o{ I Zȇ*,u'}ھ`cwyt4+ʃG6Y̢ޝ4hO]*aX=0wpOY/ٞ wG1(|L@ y-tG]8DZc1jB>؎\A+<x0wϮ۵h8*PUE1Mr[(O-QJw ~)gٷϏ':Np'."fS8z(147bt(I]UEћ#Go)%N@|V&BW\9ABIib/쥧eXs?ǿ.ތZr߸c" Y>OUXn?i̩R?G!D^sb%md{BKB%klp0`Rmi&yQyQ;#q.u{1PZĐXBg=L Y<%h Sr+FF+ͭf+A_64qS<0= H %^FLo ܲ-M pH|>W1ΰq.' Dzt ނD!h㜒 >$E TҎbO{RKO-BaDnTP]~=V͖ܻX Vev(]bQ gHۅLV<Z]H[^T {!h~muQ`<6цcJ|$T> 6xYT!Wfh(2?68c:y91 ai^{•Zi(V``c} X}ܜifަޫqf;Ѣ\jٴjy!~j 3`:)axE Nnr/ړP[fj&iNi *IP g>ps_4g. |/iYrJ_JDiC@!f~+|>fX>qE[T"Aɳ 5A+H$ 5s"  /dw,k?-)\ac UP0rk,)kz/`On#7!e8ZEbPN,; @K<Xge| iK7ȰY@UlXFai&ȴ<_{=2Djs犡 --"wYrEYS[ZM8 mu<-Xg;󺮡R\Y 4y,9yXxOzx^ߊͻLJF\Z:q]O ]p-yex% nwu:hB+.(=:ggEMy!msP?C6 (&4AĀCQmgE]p;Դ- z\Ds!cN#Q{|Ѻ!4纖" ,,hXXH5of&8-Wr/Q#b^ťQȣgdX7aI5[4Bȯߣ f\Q|%xE8efFըI~*4)b hQDL@ĂyA{ = x)`ȜX њ|R['NT8IgaVIW}ʝ6\ & 3e8C4\Ҝx߯ƴudRsH헣˹KJ-E'jG+(@b`P`(a @~@hDmQ!i`ՋZz>0xb#tc^03C)Ӝq并.0x pVGyLvWL"+D 'F3E_'Q2 r;qB`x 5LvW]cцbsDSÙ']g {`}zJFKUF}_0 ԌutFIZӦA~V%_;#qrI(8UQbBKʾGsOg˻TlE$+E1Q0D=A8JOr>,7 QU{G(t`"l[\4vB  'D|py0ov嵪T=HdM8-(N>jvC+nP(|(NNQkmAgxM^3fS nT:,+M+N[Ϫywp75i+( 'f_,!ߟaF,,/d\۝y82hC P8α_0tU(G흪9)x;VJ(c3R}vd{snAdG|2cA EGw5e4!q'pC^}f^3ߝZkoF?EɯQ˸rTbNƼ4*l-XHhٹ w?{+ŭ>N#9h+^oC"N Np-9YU=5`K]r.bfW%f^ ; ! Zi]XNv&š`3ܰ fq'[3[ۇG$O/ۥ3s=bliKŇ&YZcq'jz;q?NnKO+j̽B;.=/ K&d^U φ[D:5+.'0;QIn&ksQox|K1E1ȃ C@a ɽv.JR_r"_u[뻱ȅpr3xE-f?O˨C Mbi72qxfv$k_  8^whL4hjTZ! `stL;W($cڂk['DjJ1=&WiyLn @L36דmv+???m.45SRk@z \'9t;/N~mOMOOBk{ׄihgiC_|4EK~qh) ~?Z|l' @HύMdoWܕ$jܨ!/S4du1N&ݓ g1;0YעG+M>!QO36Z [[jMB!{b.Լ> G9& w?Es̨ wFjn!%k7?+c*xP*:ڵ>` nK9F6(38xSj4{5 6 Zo$h7V'җ-e"vvFo,K^dCSZpdE"mk ,x $tk2FT:=_9CvME߰U̇ng3P=& B\zt i[ߕԥa8ƁzԞғ0W_T4f;A%ż aҲ_?;Gr[@Kzqg-WϜ3C5%;*]o^yIgSC&?al6!F:'ۡp Y-C=`vFEFs2?O4_Ep=*S=-Uq0  ~>Ȇl;y{8QZ[3+jRkg?,iRKiڮ~X13յ_E CupZ*B.G,qh:i${-1vmL^ 103ZbZJ!v i pZN4;МmNi7BO9$ųXy3֎xYzj'cY NtrL $t\C M? {Cm[d,U΍ÜӄEڎaHG= 2;uo[svͱ.gK^K_Q@!gYhH=Cy 6z>VZz^zVDZVg"݅!X%P,qff*BeLj9UmjD3V EclS hV/QYED}U&_ 4AH7yv) (ZLLۺ+w':i/0ܫ-0 7ۓIŋM7-vXT;jp l%\Ѐeg}"$A!rZ)m˄%e±@F!vlAEBk pPZD5':C+85k{uIWYYщ/>ٕ4Pi[x|nW,Eܲŧб8u 1tdosv<0?!Wxץ'H.(bSÉE=,ʭ4'd9#tVEWcCpŗ !`euWv"- B&pWnT`vm|>D:Y,O"2;S~Ee|3sʜ-ݗFsn5 Ku-5pQ5F[zxS-n5](^- S.J 8O-'&kqyVD6Ҍ؊bwenJ#= AHi?X?$Za]3 -9#ej:sv | o=ThyD!-1d{jVq~C9aXIZ<6j_HO_y 7XNlHN갬pkB+8-"Xs%?ZtsD7f(;wUs.&\]jI~twƇlF|\3Utcn-g+ٻ_h4p ~OMGzLbca;&^8i2Lӊsg!Q<4m+PWC$9k6NE鉻yrھ'8KRSӍho mTe'$`I: ܤ z399ň/}.=*4>.~?O;'Q2I?P4=+Fppy4g^1(!<;;:-dh9Xk%vFM#:V{QLlLjB>|>zFܿ^lLf?;5hIZ$'gI!.\,DܳrӄXuZia"!A &QD=& 6ə|DrjyspȯcW.y-q=c'TjQ(^(cG Zh!(V)4Mնwy ()23γ% B(" 3֚tXV. 3ׂp:q˝5J9byHEmKObA%O!7AKy!z3 Z^VF-B&ig' tרY61O-w~=D|o9'0H^(~Dߕo9pB*"M'z'[BdO\u bLS`cԌ|{yߔH!Mi"Iz#MZE0U?E\`D-CH|NrG>И+b.(HQeqӨms/3w%ӘrB:H-GvF`h4?u/Y3v+>̘f`T ]@qv_t 9ZvDD9P/ƫ.x2!Ђ 0Z 2?N3E ;='֌*8ٸEoAsV $:J) f(07zo޵hbyWbv#؁u'FPi~܂o{m%< -ܜs4=ev^[es>zNum??-WX$Vq:iCNo)m |}2&+7{b'"n#O\@q9px޾h7SP~8<)HGSfͽ;WA4̻~p $ y>rB ~ax+tY-FBL'ijNo|AheuܡK^4G/jC-UND+RY?2y,6Xl=^/Wn!W>,y6!욓's?DiN!J{{zF{cFS99VWiWNSժqkQK?Qز8g'i+T<>B\QBGz*.6q 9ԟ盿H5 6Բq~x\jZi?vz\Ѿw}2.04/Zj{t}tBt.BI;.r眕_m3yJb+s!•ZF< d  %m5ׄP7%Ps&41z<Y*H$ʭGf:$fGBJѸŔ,As#Т[dR{F#(1'F#?q QJOW!Ƶ0 `S> ișB~9n܎%*BN3f/85dbt^pXNTo-)E%ܤ ĦI 8en~_FZY{ mb/1lL `E{hFC{d-Y0 G{ N<>?D>D ww#uzpd8ؕbHG:]k?쌌vi\ /Y 15")lE}L66jCmx <b9ǔt*M vR:^/THV](\㵵i~=Y]85 ܷl3n\ {p>r1B1?J|*̬&P؂ ܳW Qڷ {{\e^F4.PDO2w9;m?ij2>}o=tUך9 x/^pMsiTirI[ w {%fܧI +$Sz} u?[zp;1k /DKDYNA`zx ٪!x9<˶P8_B$ QҼTZ7ߓ:tʬ6AxwhY$a:dr94Eם_5?<WeGK*r-mLVnڶB of2%G g4nퟟ_AV ix^'V'<_o2>?Tm?_д5&dWps%(b 7cތxòd^`kw/"fgI`+[x=Wn QTZ4Xr5X_}(: g:|{|7ǹ`TWnS;d%>t^v$h-˚0X( s߃҅sXsR 6~pQ .jׄ Q,P ̺8UDs,%;wi9کYAFt1pܡm~-I䤪g}u2ΝH_{UQ#{+c ߤ[:,RvQ+)"E.8 g܆-,DZP( G Bi0IDATíѕLZX_8YD'$]W4hϦ>{L~gda8jN(0.DN.D-rA$eg4cP(8s!F'ML U.8]\BwJl ?1<sdJɑ;wakӵ|ANb;kzBJ5aBFxQt9s98O G(G1',K/:'tčFp+@fXmx; t,P?9N&x΍k^%%\RH6!?:^fYhnbI4 )EZ9hLg]0ii+vM,ǩH|J&NU!YȂ1>+7jJsN4aՈpi/ a;1ț7M;27;k[̢$bENq|`!F~b*lD C/ ^ !@/E$?Yً"x<'0 0 AZGiGeT5ۜtOQ~'^r4vҮ2}96;{d. =ok+7f}&+}٠s@A]?Ê8@>$Zϣ'I iy!fn9xȤ $$iY!5 VWDЮ]˅ߩ (ŀbwZ,[Brf&R2 XY k2Ib~lU[疞(u&a\[΄> usv(-zpxHf˖u xì"?(G_t:l N<ZnTC\ x/n`5]q@EpzQƝ\ s$kg";+l/8V{Al>[x&-"i{?{p wlg<"a>heIn]wuƽe/Ozn{,x Qx7vu*ZI̽1 /N+]1  .E|Ӈ6ھqmʪ+)_Nnds3|N9L`ޘ74g:~Y7 - u goo9~O<t=QD]`#7:.S-#;v o4[+6j1хTta/7d(Wx-n!HLZ5Id D%LM'%@Ҥ Qc('IGb_@hh !0 ff8%gxs:`g>G4JQp#x Ńd?`kZ 5Ag]s5m=mħ̛em^#BaJ8)q_fW(͠< HI L V ]̱ٟ|'bkMmyh[(b+58'|ZI.aw2sc1dN9da6:U)O3{B88!z@c-# i/OB#O+IӐ;D{SF8M鈶]S j L[Ӏ%-2DH߈ߎ7y\s]Dkȃj1civQh &_O#9W @[`Z%xD;(r~ӄ#?u"5g'vgoO,ׂpM4Mg&$PZ! @,sފr6b}/X_D292tZq6 mقhڙ( !*h]/;IPspIbŠgJ3GcC$&#rm j=i"ɷ%i-՘7jhOMB @iZ3qp G⽫5;!hp}G|)Yw}DgM09=nXgK٩uNLy;]89m/pS!?PJxO@6bY2gX;p[@4  À:q˂N+[=U7,E zxghbl OyՎHu nqt:Y\ Wb4)P>$rmAQ+-ygި[&Ba*LMu-D!80ҕAx% [ PBHV$8kMh@hM[AvD4J=c3SMMm4- rhTW.>F`bƩ#$I<P(w״xΙWPXbt +δ}V_ W߭$; OxLfT AO>|!J' )#"m+}MD#|nINx1_0;e;3aԸآz 0 Й^?Oh'׀^)ߧ  (T x2<_gYp /s5a V.9FU éZxRnq sMh yn\?Ui -F|.~^9LߜcjzˈpqsԜ[vP{.nBM3@^7bz@fG;e>9qںr]pyY讗Q2wrؠ3jv 2X[64C&QxMJOby ܉Cg~ *;6!'nt:bka5̣8Ues ?oMxKpB/Hp`ZS4*0kJDFMq)DƵk OҬ"T-ܮQOx USVctK1hHu3~k+\ ڣb+Ι _-N` K/,/z Ƴtff&PA"љH^hG僅u3%]tqㄉwn"' c]עZb\hbt_~8:1SSq )&9})Ov.+ i  LeQ*$ z*j✆eZoV4V p-&vHM?sLhF3uILmrz9 9܅sf˷t?2t\g?r_㙵QrF +ɚ̓gx͢:cm&߭lhb!ix]3;4ƙG"eН=p(l2FE>ĝQ%/HE4TBZ:9#z_[W;I h1--b#B9aQG)nā~erxP6Y3 P(}8J=O̜BIdr]%i, j0~C֙~KxO`H[ 'SQL–pLЮ>:/u ')nUbHOFŏ4s8߶gpb&)2u|KuBމJM.Qa>+Y^k͔tIO=XO+m4Biqv8st^% ???S\hN~=*4^7_,q +-W3Ǘ;Ios92;wNU\l _Y-X;Yo:GE{$R% 2p?$(ݢ\(fZio^K:X'j7iz>q\W8gNcE^2Bsb=' )͉tDf}W^9=\m1$ jr]zx_/f` i{XiNu ;p8k"e\x3 n!"j+xG*3px'μXHE 7^>^E&riS_G?!;_BӦ5YpܝRY#ɓo )"%@Yq#?*gzC {8VѹXl>|<Ҭc43ۘ !{C޾YYфؠЉ'ʩm|xŊE_#/Dp*-*`g/A*c4q{\v{[w2Θ.9<챜/6; 1xys3YIov>[ 6'RY QDXڿߞ T0{ɭGLw3p8H5c-QB-(_C䍖& w;Qο4߿; Z.f7CKG Qu!@^Ob<}|T(c {lWT-~+49?8 2f|;v c{mG=biրAOO=5B bK>|՚DM[`OL̋Ľ!mfbdy.S_~ePc~Qd%T9__{HT)w4\Pg;!iO+9$iYZ(by(~D|Q5mɱ5R£@ cK1c؟$Ẍ́ӽ$8˩cr!ce=4ꯈ 󧏶6`Z[D;X|bTy9-3У-d  4f\L :#:ÇzpQt+@Eڗ1Rn/͉;¥GfA֍׻|{˟X+K-T_.4gTP/|e5K½_ C\'TfvMJ;Ovl\%.ޢ<폼z:x>FaP77j AV9Lk>e"lJ Xhhk;$*>amѩDz+/7M˶?f#{. 7L@m4s:qQi ""_21..IENDB`age-PG16-v1.5.0-rc0/img/apple.svg000066400000000000000000000032751454606241200162050ustar00rootroot00000000000000 age-PG16-v1.5.0-rc0/img/community.svg000066400000000000000000000017131454606241200171230ustar00rootroot00000000000000 age-PG16-v1.5.0-rc0/img/contents.svg000066400000000000000000000012561454606241200167360ustar00rootroot00000000000000 age-PG16-v1.5.0-rc0/img/contributing.svg000066400000000000000000000011721454606241200176050ustar00rootroot00000000000000 age-PG16-v1.5.0-rc0/img/docker.svg000066400000000000000000000225431454606241200163520ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/img/documentation.svg000066400000000000000000000006461454606241200177540ustar00rootroot00000000000000 age-PG16-v1.5.0-rc0/img/features.svg000066400000000000000000000011001454606241200167030ustar00rootroot00000000000000 age-PG16-v1.5.0-rc0/img/gettingstarted.svg000066400000000000000000000006161454606241200201300ustar00rootroot00000000000000 age-PG16-v1.5.0-rc0/img/installation.svg000066400000000000000000000006161454606241200176010ustar00rootroot00000000000000 age-PG16-v1.5.0-rc0/img/news.jpeg000066400000000000000000000205531454606241200162040ustar00rootroot00000000000000JFIF   *!&!1-%)+:..3D3,9(-.+  +& &-+/++-33.-5-./6/275513/-/-/----+2/5-----------/---J T!1s356AQSqr"24atRd#Bc%< Q!1Rq"23ASr4aCbc#$B ?@"25sL*Ȉj$=DUZVgֶ2gVSڜ\^'ޕ!UΩnNedJFS]WKH`i;w#U%yt܅%yt܅%yt܅%yt܅%yt܅%yt܅%yt܅%yt܅%yt܅%yt܅%yt܅%yt܅=vv3ّ*)V.5/3c)%ܟcCd͒7j"nV*T-rV$RaZջHw*{rQ j:fE^Hsʩ Ԍ Ьe+"kW%WS^O*TIf7εe%˅\[>ElMnNDFט+;Gv}lMnNCv3 ѝx[z[`]y³wkgޖ1o^c079 Fט+;Gv}lMnNCv3 ݭx[z[`]y³gkgޖ1o^c079 Fט+;Gv}lMnNCv3 ݭx[z[`]y³gkgޖ1o^c079 Fי (){71\%+Q][?a\șU2ט7,u+N**\XoFI{>{QU=RNf5|g>ޤ _"?'/]ګbU?I2l66{=n/hq:bUzeO٩DdR&7oRB{.U1*** ɀCcg0߶_ȫ {aHvFx.]BTX#Cf:#W 7BM%-{#f18FnÖS"}MГ|Xr׻jrOioZmNC>"rx#Wߔ{]AKdW&A&QeXar7.C*\//M;FEgm$ÌQuzT/~PrGjf%S˦r *_ <%b܋rq-RI#JU+7U>yknm)yG3]ЃpYrטx;CMwB eho^c}< 57)y4t \:G3]ЃpYrטx;CMwB eho^c}< 57)y4t \:G3]ЃpYrטyԚ{drLETb\cU9^^iRU^ʩ*66{=^=qCDd98ifYIDmz\T%q9 Vqmr-e~eY"t)Y=вV~9w79EM SB]"Ur"x.tc>IכWG֢ԇo0W#\QչU/*"'!RzÃ3#8p+JR`l.|Nd*ʨ+LM5kWWTN ߱-\rޗI /D^''ȩ49XHeOV)ݑ?Ӗmׯz*;rT/XBd7a6B37oRB9x^2 `sC6%k5R#<ʇ8+V7Qڨ17mS;MGSj17mQۇiJmT[510[p5M`Ʀ4ݵF n)Qlƛmôz%6-v-vDEcSnڣQڨ jcMT`j=ULij;MGSj17mQۏU%,pǓq[#kZqܞ>$4ĈoUU"f>66;=^=qCTd|LQTz꩝=f<O*)E<l UE;n*O#*.F%ȉĈgֵʤ<.6aE"c^.^𪽋c%h/`g'^)5Øhۑ5FzFMv_n k9F+\9yQyB{_25kJ󛚕!)}:'8ezSԩSSStODDG%w'&]EZQM V5.ޞ(`xqGSoOΛƧԐ}+rGje%S"eS t;%Es[9VS nudpҗU>>țޜϛ?J]Tțޜϛ?J]Tțޜϛ?J]Tțޜϛ?J]Tțޜв-j -X6[H)bN4"JtnB(9mӢ}z'qg ~vMw9;yO&Fcoܧ $H9T49ũĆ=Jڹ ~z\PPbߦ'!\Vz"*/E&RqՆԋO!mAU uM^&|Z:fp̟2;D `o̫ȕUJ㽁]0֩pƆjʅsc̗'9ѓLjȟtfwƿxb~T߻)9* "Ι?YϷ!sABWP⓺z#JCp ŻFhXGIR(b({"z.[;w3܃z=Mҗp[;w1poY空R r^n2 <7J]nKAgK-{S`> MgTJ_j7諯sMj1%y–tV qjR._;^J5IT5vHD釞/h!15j1QKj3sUnEGޱ2vJ>+.UTq)Vi euWVQQ`S$zDr*omלt6Ø{[}:ygz{qKP>j,llӫY#^ku))!9QSÙ"()wAwCޤ _6BrIje%SELFښr6FEKNR Uk5"ԵRyꞔ[1ERyꞔ[ݘncQ'E-ٍ:ERyꞔ[ݘncQ'E-ٍ:E:;ҽI+Ȭ[UU.jyHsIDz"UwbVu-;X=u".x"0E`3ziY;MD)SN C_0ߡ޿W6LSS*{J"S әoYpӪ^`?PT| /)ڭޙ<O|: T/OB&CKjzLjr=GrVrZf4F+R^< T+ +⋟OʔzxeFKW/Fޅl,/s[|WU5S"X_xOʔzxuQ/ѩ?7S{3ƟԐ}+d뜼RwjDTh~sI?&<-c׵ɒQQyQQyPj*Qjʇ?7hmT[ Ϙe>Ej1ٟ1TtFnh4ڨ vgv#QZ 6-GHfM`f|mQ>=VdU(NlkoMQ#ŋUֵ+sQ_BZ!qpl.ϩ;^Jj0T|k{^P]qBLuQ?Ԫ=vTΞRʇ2޴t~KR^ O꟯/mLKda㮁9M\  9Q죧kMV**r**'[0UT֥zt$V5..ޞ(IN ij &^PvDO1mڃ *Sbve lXRM\,3FdFH}I))`9*T["+U_L*Q=*" 3I"/rEŷHЕռ|O4>K'EHuo;$%ʮʹyn R@`C_0߶_ꚎiQV(f{$uޜ:7ņۑ5!5pS:,F6fV=O\^a,&+𨫸ԭU ȡJ[28oF5|k[f#,h*V=NU1kK~qvSjuWu8BEc[Q}?*RℹD뮮(xKSnOq3~M@GcKsH\PB\x^){W/Ī4?wlT4S+ƿzam޿W&']uܩRDk:"sL$mDB;^3oRBd;rK|f%S~A27Np釞z\PG]uq>xGުSݶjSA:^%x­4ߙjqZOjOY 9+NkMJ|f. ֚f.G_8zV IM/]%;Lj5r"q""r! UUkSAxƃUpu䙪PBu>)UR5ljŖ)_)$l#ȅoإ? 5+{qCw9*9t.TjV+PzP߷*Uv57!#j'u8C9Gf|Œ {|Ojy&NcؗgnDGj2ҖͶDbwbErMA"ESQMFG|/*1Q||KU9hd5W$v-X5zOǴՈnئ}lQ:}.=ݱF)Ag%Khf|lQGvCc1-bFrPFgv}lQ:}.=ݱF)Ag%Khf|lQGvCc1-bFrPFgv}lQ:}.=ݱF)Ag%Khf|lQGvCc1-bN>WQWXo|OmD⿍=32 f\%aFu^9ϰj}i$LdLy fa.E_"bY#3 j4x_C,9_+?+eTcܾZ%4ūWVRQڵ`p0c#~[ܙ./F%W:EN$忊|4|tu܄Z=XQR6dVܾ%z}}' Zi!AVi?age-PG16-v1.5.0-rc0/img/tick.svg000066400000000000000000000020051454606241200160240ustar00rootroot00000000000000 age-PG16-v1.5.0-rc0/img/tux.svg000066400000000000000000000253161454606241200157240ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/img/videos.png000066400000000000000000000003211454606241200163470ustar00rootroot00000000000000PNG  IHDRw= pHYs  IDATx1 @{,ŋx۵R B 6Së0 :<)kDY<>$#ޏTϺw3WQ] j8g N5!o8(nał$el u)IENDB`age-PG16-v1.5.0-rc0/img/visualization.svg000066400000000000000000000007661454606241200200070ustar00rootroot00000000000000 age-PG16-v1.5.0-rc0/regress/000077500000000000000000000000001454606241200152525ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/regress/.gitignore000066400000000000000000000000501454606241200172350ustar00rootroot00000000000000/instance/ /log/ /results/ regression.* age-PG16-v1.5.0-rc0/regress/age_load/000077500000000000000000000000001454606241200170055ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/regress/age_load/data/000077500000000000000000000000001454606241200177165ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/regress/age_load/data/cities.csv000066400000000000000000157014731454606241200217350ustar00rootroot00000000000000id,name,state_id,state_code,country_id,country_code,latitude,longitude 153,Banaj,629,BR,3,AL,40.82492,19.84074 154,Bashkia Berat,629,BR,3,AL,40.69997,19.94983 170,Bashkia Kuçovë,629,BR,3,AL,40.82489,19.9535 180,Bashkia Poliçan,629,BR,3,AL,40.58608,20.04535 186,Bashkia Skrapar,629,BR,3,AL,40.56036,20.25477 191,Berat,629,BR,3,AL,40.70583,19.95222 280,Çorovodë,629,BR,3,AL,40.50417,20.22722 219,Kuçovë,629,BR,3,AL,40.80028,19.91667 238,Poliçan,629,BR,3,AL,40.61222,20.09806 242,Rrethi i Beratit,629,BR,3,AL,40.66667,20.0 253,Rrethi i Kuçovës,629,BR,3,AL,40.83333,19.91667 258,Rrethi i Skraparit,629,BR,3,AL,40.55,20.26667 273,Ura Vajgurore,629,BR,3,AL,40.76889,19.87778 155,Bashkia Bulqizë,610,09,3,AL,41.47152,20.33192 165,Bashkia Klos,610,09,3,AL,41.50826,20.07107 176,Bashkia Mat,610,09,3,AL,41.63317,20.01228 193,Bulqizë,610,09,3,AL,41.49167,20.22194 194,Burrel,610,09,3,AL,41.61028,20.00889 209,Klos,610,09,3,AL,41.50694,20.08667 236,Peshkopi,610,09,3,AL,41.685,20.42889 243,Rrethi i Bulqizës,610,09,3,AL,41.5,20.33333 246,Rrethi i Dibrës,610,09,3,AL,41.75,20.33333 256,Rrethi i Matit,610,09,3,AL,41.58333,20.08333 272,Ulëz,610,09,3,AL,41.68278,19.89333 159,Bashkia Durrës,639,DR,3,AL,41.42743,19.4869 168,Bashkia Krujë,639,DR,3,AL,41.50091,19.72571 185,Bashkia Shijak,639,DR,3,AL,41.33558,19.58977 197,Durrës,639,DR,3,AL,41.32355,19.45469 198,Durrës District,639,DR,3,AL,41.3166,19.45 203,Fushë-Krujë,639,DR,3,AL,41.47833,19.71778 214,Krujë,639,DR,3,AL,41.50917,19.79278 250,Rrethi i Krujës,639,DR,3,AL,41.55,19.75 265,Shijak,639,DR,3,AL,41.34556,19.56722 269,Sukth,639,DR,3,AL,41.38056,19.53778 152,Ballsh,631,04,3,AL,40.59889,19.73472 157,Bashkia Divjakë,631,04,3,AL,40.95716,19.52364 160,Bashkia Fier,631,04,3,AL,40.72937,19.4869 174,Bashkia Mallakastër,631,04,3,AL,40.55669,19.77347 179,Bashkia Patos,631,04,3,AL,40.67793,19.65591 196,Divjakë,631,04,3,AL,40.99667,19.52944 200,Fier,631,04,3,AL,40.72389,19.55611 201,Fier-Çifçi,631,04,3,AL,40.71667,19.56667 227,Lushnjë,631,04,3,AL,40.94194,19.705 234,Patos,631,04,3,AL,40.68333,19.61944 235,Patos Fshat,631,04,3,AL,40.64278,19.65083 241,Roskovec,631,04,3,AL,40.7375,19.70222 254,Rrethi i Mallakastrës,631,04,3,AL,40.55,19.78333 158,Bashkia Dropull,621,GJ,3,AL,39.98584,20.30529 164,Bashkia Kelcyrë,621,GJ,3,AL,40.36196,20.16476 172,Bashkia Libohovë,621,GJ,3,AL,40.10754,20.25753 177,Bashkia Memaliaj,621,GJ,3,AL,40.41524,19.96911 183,Bashkia Përmet,621,GJ,3,AL,40.23246,20.41091 187,Bashkia Tepelenë,621,GJ,3,AL,40.26736,19.97003 204,Gjinkar,621,GJ,3,AL,40.19944,20.40611 205,Gjirokastër,621,GJ,3,AL,40.07583,20.13889 220,Këlcyrë,621,GJ,3,AL,40.31306,20.18944 221,Lazarat,621,GJ,3,AL,40.04667,20.1475 225,Libohovë,621,GJ,3,AL,40.03111,20.26306 231,Memaliaj,621,GJ,3,AL,40.35167,19.98028 240,Përmet,621,GJ,3,AL,40.23361,20.35167 270,Tepelenë,621,GJ,3,AL,40.29583,20.01917 156,Bashkia Devoll,630,06,3,AL,40.60078,20.93814 166,Bashkia Kolonjë,630,06,3,AL,40.3142,20.61482 173,Bashkia Maliq,630,06,3,AL,40.75508,20.60748 182,Bashkia Pustec,630,06,3,AL,40.83591,20.89405 192,Bilisht,630,06,3,AL,40.6275,20.99 199,Ersekë,630,06,3,AL,40.33778,20.67889 212,Korçë,630,06,3,AL,40.61861,20.78083 223,Leskovik,630,06,3,AL,40.15139,20.59722 226,Libonik,630,06,3,AL,40.70444,20.70861 228,Maliq,630,06,3,AL,40.70583,20.69972 230,Mborje,630,06,3,AL,40.60333,20.80306 237,Pogradec,630,06,3,AL,40.9025,20.6525 245,Rrethi i Devollit,630,06,3,AL,40.58333,20.91667 249,Rrethi i Kolonjës,630,06,3,AL,40.25,20.66667 275,Velçan,630,06,3,AL,40.95472,20.46222 278,Voskopojë,630,06,3,AL,40.63306,20.58889 151,Bajram Curri,623,KU,3,AL,42.35734,20.07679 215,Krumë,623,KU,3,AL,42.19694,20.41333 217,Kukës,623,KU,3,AL,42.07694,20.42194 247,Rrethi i Hasit,623,KU,3,AL,42.16667,20.33333 251,Rrethi i Kukësit,623,KU,3,AL,42.0,20.33333 169,Bashkia Kurbin,609,08,3,AL,41.62215,19.70734 171,Bashkia Lezhë,609,08,3,AL,41.8132,19.64121 178,Bashkia Mirditë,609,08,3,AL,41.80953,19.99024 218,Kurbnesh,609,08,3,AL,41.77972,20.08361 222,Laç,609,08,3,AL,41.63556,19.71306 224,Lezhë,609,08,3,AL,41.78361,19.64361 229,Mamurras,609,08,3,AL,41.5775,19.69222 232,Milot,609,08,3,AL,41.68389,19.71556 261,Rrëshen,609,08,3,AL,41.7675,19.87556 252,Rrethi i Kurbinit,609,08,3,AL,41.63333,19.71667 262,Rubik,609,08,3,AL,41.77444,19.78611 267,Shëngjin,609,08,3,AL,41.81361,19.59389 175,Bashkia Malësi e Madhe,626,SH,3,AL,42.36798,19.58977 181,Bashkia Pukë,626,SH,3,AL,42.02997,19.92778 188,Bashkia Vau i Dejës,626,SH,3,AL,42.04834,19.69999 202,Fushë-Arrëz,626,SH,3,AL,42.06222,20.01667 211,Koplik,626,SH,3,AL,42.21361,19.43639 239,Pukë,626,SH,3,AL,42.04444,19.89972 255,Rrethi i Malësia e Madhe,626,SH,3,AL,42.33333,19.58333 257,Rrethi i Shkodrës,626,SH,3,AL,42.06917,19.53506 266,Shkodër,626,SH,3,AL,42.06828,19.51258 274,Vau i Dejës,626,SH,3,AL,42.01,19.62472 279,Vukatanë,626,SH,3,AL,42.02806,19.54778 163,Bashkia Kavajë,633,TR,3,AL,41.18127,19.55579 190,Bashkia Vorë,633,TR,3,AL,41.39804,19.67703 207,Kamëz,633,TR,3,AL,41.38167,19.76028 208,Kavajë,633,TR,3,AL,41.18556,19.55694 213,Krrabë,633,TR,3,AL,41.21556,19.97139 248,Rrethi i Kavajës,633,TR,3,AL,41.16667,19.58333 259,Rrethi i Tiranës,633,TR,3,AL,41.33333,19.91667 260,Rrogozhinë,633,TR,3,AL,41.07639,19.66528 268,Sinaballaj,633,TR,3,AL,41.06889,19.69944 271,Tirana,633,TR,3,AL,41.3275,19.81889 277,Vorë,633,TR,3,AL,41.39083,19.655 161,Bashkia Finiq,634,12,3,AL,39.84393,20.16659 162,Bashkia Himarë,634,12,3,AL,40.11581,19.81389 167,Bashkia Konispol,634,12,3,AL,39.70064,20.13353 184,Bashkia Selenicë,634,12,3,AL,40.39503,19.65958 189,Bashkia Vlorë,634,12,3,AL,40.4134,19.49792 195,Delvinë,634,12,3,AL,39.95111,20.09778 206,Himarë,634,12,3,AL,40.10167,19.74472 210,Konispol,634,12,3,AL,39.65889,20.18139 216,Ksamil,634,12,3,AL,39.76889,19.99972 233,Orikum,634,12,3,AL,40.32528,19.47139 244,Rrethi i Delvinës,634,12,3,AL,39.91667,20.08333 263,Sarandë,634,12,3,AL,39.87534,20.00477 264,Selenicë,634,12,3,AL,40.53056,19.63583 276,Vlorë,634,12,3,AL,40.4686,19.48318 1,Andorra la Vella,488,07,6,AD,42.50779,1.52109 3,Canillo,489,02,6,AD,42.5676,1.59756 4,El Tarter,489,02,6,AD,42.57952,1.65362 5,Encamp,487,03,6,AD,42.53474,1.58014 7,Pas de la Casa,487,03,6,AD,42.54277,1.73361 10,les Escaldes,492,08,6,AD,42.50729,1.53414 2,Arinsal,493,04,6,AD,42.57205,1.48453 9,la Massana,493,04,6,AD,42.54499,1.51483 6,Ordino,491,05,6,AD,42.55623,1.53319 8,Sant Julià de Lòria,490,06,6,AD,42.46372,1.49129 1657,Andau,2062,1,15,AT,47.77441,17.03293 1671,Antau,2062,1,15,AT,47.77377,16.47984 1673,Apetlon,2062,1,15,AT,47.74394,16.8302 1734,Bad Sauerbrunn,2062,1,15,AT,47.77439,16.32841 1737,Bad Tatzmannsdorf,2062,1,15,AT,47.33126,16.23067 1743,Badersdorf,2062,1,15,AT,47.2,16.36667 1765,Bernstein,2062,1,15,AT,47.4,16.25 1787,Bocksdorf,2062,1,15,AT,47.14256,16.17784 1798,Breitenbrunn,2062,1,15,AT,47.94452,16.73149 1811,Bruckneudorf,2062,1,15,AT,48.01667,16.78333 1839,Deutsch Jahrndorf,2062,1,15,AT,48.01667,17.1 1840,Deutsch Kaltenbrunn,2062,1,15,AT,47.09455,16.13145 1843,Deutschkreutz,2062,1,15,AT,47.6,16.63333 1859,Donnerskirchen,2062,1,15,AT,47.89425,16.64635 1868,Drassburg,2062,1,15,AT,47.74645,16.48679 1888,Eberau,2062,1,15,AT,47.10764,16.46044 1902,Edelstal,2062,1,15,AT,48.1,16.98333 1924,Eisenstadt,2062,1,15,AT,47.84565,16.52327 1925,Eisenstadt Stadt,2062,1,15,AT,47.8445,16.52575 1926,Eisenstadt-Umgebung,2062,1,15,AT,47.83333,16.58333 1934,Eltendorf,2062,1,15,AT,47.0087,16.20239 2005,Forchtenstein,2062,1,15,AT,47.71161,16.34525 2014,Frauenkirchen,2062,1,15,AT,47.83678,16.92581 2064,Gattendorf,2062,1,15,AT,48.01667,16.98333 2104,Gols,2062,1,15,AT,47.89689,16.91113 2111,Grafenschachen,2062,1,15,AT,47.36667,16.06667 2141,Grosshöflein,2062,1,15,AT,47.83586,16.48035 2142,Grosspetersdorf,2062,1,15,AT,47.23895,16.31783 2197,Güssing,2062,1,15,AT,47.05936,16.32431 2198,Güttenbach,2062,1,15,AT,47.1571,16.2923 2203,Hackerberg,2062,1,15,AT,47.2,16.11667 2222,Halbturn,2062,1,15,AT,47.87019,16.97542 2228,Hannersdorf,2062,1,15,AT,47.22895,16.3825 2259,Heiligenbrunn,2062,1,15,AT,47.02705,16.41688 2263,Heiligenkreuz im Lafnitztal,2062,1,15,AT,46.98917,16.26083 2278,Heugraben,2062,1,15,AT,47.11783,16.19041 2290,Hirm,2062,1,15,AT,47.78652,16.4546 2330,Horitschon,2062,1,15,AT,47.58729,16.54696 2332,Hornstein,2062,1,15,AT,47.88049,16.44447 2351,Illmitz,2062,1,15,AT,47.76148,16.80024 2362,Inzenhof,2062,1,15,AT,47.01667,16.31667 2370,Jabing,2062,1,15,AT,47.2388,16.27659 2377,Jennersdorf,2062,1,15,AT,46.93848,16.14158 2381,Jois,2062,1,15,AT,47.96165,16.79604 2390,Kaisersdorf,2062,1,15,AT,47.53741,16.39198 2418,Kemeten,2062,1,15,AT,47.24859,16.15213 2442,Kittsee,2062,1,15,AT,48.0925,17.06389 2454,Kleinhöflein im Burgenland,2062,1,15,AT,47.84151,16.50413 2456,Kleinmürbisch,2062,1,15,AT,47.03299,16.32448 2460,Klingenbach,2062,1,15,AT,47.75202,16.54069 2467,Kobersdorf,2062,1,15,AT,47.59572,16.39173 2469,Kohfidisch,2062,1,15,AT,47.17472,16.35701 2509,Königsdorf,2062,1,15,AT,47.0,16.16667 2487,Krensdorf,2062,1,15,AT,47.78552,16.41495 2504,Kukmirn,2062,1,15,AT,47.07544,16.21033 2523,Lackenbach,2062,1,15,AT,47.59042,16.46533 2524,Lackendorf,2062,1,15,AT,47.58996,16.50404 2568,Leithaprodersdorf,2062,1,15,AT,47.93348,16.47915 2606,Litzelsdorf,2062,1,15,AT,47.20826,16.1717 2608,Lockenhaus,2062,1,15,AT,47.40753,16.41623 2611,Loipersbach im Burgenland,2062,1,15,AT,47.69656,16.47919 2614,Loretto,2062,1,15,AT,47.91559,16.5179 2622,Lutzmannsburg,2062,1,15,AT,47.46373,16.63665 2631,Mannersdorf an der Rabnitz,2062,1,15,AT,47.42815,16.52678 2654,Mariasdorf,2062,1,15,AT,47.3658,16.23136 2661,Markt Allhau,2062,1,15,AT,47.28333,16.08333 2662,Markt Neuhodis,2062,1,15,AT,47.29565,16.39564 2664,Markt Sankt Martin,2062,1,15,AT,47.56205,16.42508 2666,Marz,2062,1,15,AT,47.71667,16.41667 2669,Mattersburg,2062,1,15,AT,47.73333,16.4 2705,Mischendorf,2062,1,15,AT,47.19277,16.31444 2718,Mitterpullendorf,2062,1,15,AT,47.49325,16.52129 2722,Mogersdorf,2062,1,15,AT,46.94917,16.23222 2745,Mönchhof,2062,1,15,AT,47.8802,16.94126 2748,Mörbisch am See,2062,1,15,AT,47.75,16.66667 2730,Moschendorf,2062,1,15,AT,47.05843,16.47728 2759,Mühlgraben,2062,1,15,AT,46.88972,16.04083 2760,Müllendorf,2062,1,15,AT,47.83943,16.46258 2776,Neckenmarkt,2062,1,15,AT,47.59964,16.5467 2787,Neuberg im Burgenland,2062,1,15,AT,47.16894,16.26054 2790,Neudörfl,2062,1,15,AT,47.79655,16.2977 2792,Neufeld an der Leitha,2062,1,15,AT,47.86558,16.37856 2795,Neuhaus am Klausenbach,2062,1,15,AT,46.86667,16.03333 2811,Neusiedl am See,2062,1,15,AT,47.94901,16.8417 2813,Neustift an der Lafnitz,2062,1,15,AT,47.36667,16.03333 2814,Neustift bei Güssing,2062,1,15,AT,47.02474,16.26041 2816,Neutal,2062,1,15,AT,47.54548,16.44619 2819,Nickelsdorf,2062,1,15,AT,47.94056,17.06944 2834,Nikitsch,2062,1,15,AT,47.53615,16.66017 2848,Oberdorf im Burgenland,2062,1,15,AT,47.21667,16.21667 2859,Oberloisdorf,2062,1,15,AT,47.44736,16.50764 2871,Oberpullendorf,2062,1,15,AT,47.50352,16.50447 2873,Oberschützen,2062,1,15,AT,47.35138,16.20732 2884,Oberwart,2062,1,15,AT,47.28971,16.20595 2896,Oggau,2062,1,15,AT,47.83333,16.66667 2898,Olbendorf,2062,1,15,AT,47.18333,16.2 2899,Ollersdorf im Burgenland,2062,1,15,AT,47.18333,16.16667 2905,Oslip,2062,1,15,AT,47.82906,16.61957 2921,Pama,2062,1,15,AT,48.05,17.03333 2922,Pamhagen,2062,1,15,AT,47.70092,16.90779 2924,Parndorf,2062,1,15,AT,47.99963,16.86049 2968,Pilgersdorf,2062,1,15,AT,47.44106,16.3492 2972,Pinkafeld,2062,1,15,AT,47.36667,16.11667 2975,Piringsdorf,2062,1,15,AT,47.44826,16.41516 2985,Podersdorf am See,2062,1,15,AT,47.85412,16.83706 3005,Politischer Bezirk Güssing,2062,1,15,AT,47.10164,16.30363 3013,Politischer Bezirk Jennersdorf,2062,1,15,AT,46.96667,16.15 3027,Politischer Bezirk Mattersburg,2062,1,15,AT,47.73823,16.39486 3034,Politischer Bezirk Neusiedl am See,2062,1,15,AT,47.88853,16.92465 3035,Politischer Bezirk Oberpullendorf,2062,1,15,AT,47.50184,16.50593 3036,Politischer Bezirk Oberwart,2062,1,15,AT,47.28854,16.20861 3109,Pöttelsdorf,2062,1,15,AT,47.75369,16.43864 3111,Pöttsching,2062,1,15,AT,47.80445,16.37109 3070,Potzneusiedl,2062,1,15,AT,48.04504,16.9477 3098,Purbach am Neusiedler See,2062,1,15,AT,47.91289,16.69561 3129,Raiding,2062,1,15,AT,47.56581,16.53056 3156,Rechnitz,2062,1,15,AT,47.30467,16.44095 3190,Riedlingsdorf,2062,1,15,AT,47.35,16.13333 3197,Ritzing,2062,1,15,AT,47.61316,16.49546 3198,Rohr im Burgenland,2062,1,15,AT,47.11667,16.16667 3204,Rohrbach bei Mattersburg,2062,1,15,AT,47.7052,16.43005 3213,Rotenturm an der Pinka,2062,1,15,AT,47.25,16.25 3216,Rudersdorf,2062,1,15,AT,47.05,16.11667 3220,Rust,2062,1,15,AT,47.80122,16.67158 3221,Rust Stadt,2062,1,15,AT,47.80174,16.6721 3240,Sankt Andrä am Zicksee,2062,1,15,AT,47.7841,16.94195 3253,Sankt Georgen am Leithagebirge,2062,1,15,AT,47.85,16.55 3297,Sankt Margarethen im Burgenland,2062,1,15,AT,47.80335,16.60875 3305,Sankt Martin an der Raab,2062,1,15,AT,46.9225,16.13611 3309,Sankt Michael im Burgenland,2062,1,15,AT,47.12852,16.27148 3353,Schachendorf,2062,1,15,AT,47.26667,16.43333 3357,Schandorf,2062,1,15,AT,47.24183,16.42267 3362,Schattendorf,2062,1,15,AT,47.70973,16.50979 3424,Schützen am Gebirge,2062,1,15,AT,47.85233,16.62334 3449,Siegendorf im Burgenland,2062,1,15,AT,47.78098,16.54232 3451,Sieggraben,2062,1,15,AT,47.65128,16.37993 3456,Sigless,2062,1,15,AT,47.77533,16.39503 3492,Stadtschlaining,2062,1,15,AT,47.31667,16.28333 3509,Stegersbach,2062,1,15,AT,47.16667,16.16667 3516,Steinbrunn,2062,1,15,AT,47.83333,16.41667 3530,Stinatz,2062,1,15,AT,47.20266,16.13312 3535,Stoob,2062,1,15,AT,47.52845,16.4776 3536,Stotzing,2062,1,15,AT,47.90688,16.5458 3550,Strem,2062,1,15,AT,47.04498,16.41426 3568,Tadten,2062,1,15,AT,47.76667,16.98333 3605,Tobaj,2062,1,15,AT,47.08333,16.3 3615,Trausdorf an der Wulka,2062,1,15,AT,47.8135,16.5576 3630,Tschanigraben,2062,1,15,AT,47.01667,16.3 3652,Unterfrauenhaid,2062,1,15,AT,47.57116,16.49885 3654,Unterkohlstätten,2062,1,15,AT,47.38333,16.31667 3666,Unterwart,2062,1,15,AT,47.25,16.23333 3737,Wallern im Burgenland,2062,1,15,AT,47.72847,16.93706 3756,Weichselbaum,2062,1,15,AT,46.9425,16.1875 3757,Weiden am See,2062,1,15,AT,47.92532,16.86899 3758,Weiden bei Rechnitz,2062,1,15,AT,47.3,16.35 3767,Weingraben,2062,1,15,AT,47.51393,16.36375 3791,Weppersdorf,2062,1,15,AT,47.57954,16.42679 3809,Wiesen,2062,1,15,AT,47.73776,16.33798 3810,Wiesfleck,2062,1,15,AT,47.38458,16.14552 3823,Wimpassing an der Leitha,2062,1,15,AT,47.91667,16.43333 3826,Winden am See,2062,1,15,AT,47.95,16.75 3838,Wolfau,2062,1,15,AT,47.25,16.1 3859,Wörterberg,2062,1,15,AT,47.21667,16.1 3850,Wulkaprodersdorf,2062,1,15,AT,47.79753,16.50447 3866,Zagersdorf,2062,1,15,AT,47.76471,16.51382 3887,Zillingtal,2062,1,15,AT,47.81442,16.40928 3890,Zurndorf,2062,1,15,AT,47.98314,17.00315 143783,Albeck,2057,2,15,AT,46.81666667,14.1 1646,Althofen,2057,2,15,AT,46.87298,14.47449 1668,Annabichl,2057,2,15,AT,46.65,14.31667 1679,Arnoldstein,2057,2,15,AT,46.54611,13.71 1681,Arriach,2057,2,15,AT,46.72921,13.85046 1706,Auen,2057,2,15,AT,46.59963,13.84389 143785,Bad Bleiberg,2057,2,15,AT,46.62416667,13.68777778 143786,Bad Eisenkappel,2057,2,15,AT,46.48333333,14.6 143787,Bad Kleinkirchheim,2057,2,15,AT,46.81361111,13.79277778 1733,Bad Sankt Leonhard im Lavanttal,2057,2,15,AT,46.96278,14.79167 1746,Baldramsdorf,2057,2,15,AT,46.80111,13.45333 1755,Berg im Drautal,2057,2,15,AT,46.74915,13.13536 1781,Bleiburg,2057,2,15,AT,46.59,14.79889 1788,Bodensdorf,2057,2,15,AT,46.69111,13.97111 1816,Brückl,2057,2,15,AT,46.75167,14.53667 1833,Dellach,2057,2,15,AT,46.66175,13.07965 1834,Dellach im Drautal,2057,2,15,AT,46.7375,13.07833 1838,Deutsch Griffen,2057,2,15,AT,46.85606,14.07501 143791,Deutsch-Griffen,2057,2,15,AT,46.855,14.07388889 1854,Diex,2057,2,15,AT,46.75,14.6 1871,Döbriach,2057,2,15,AT,46.78049,13.65738 1866,Draschen,2057,2,15,AT,46.76909,14.06758 1886,Ebenthal,2057,2,15,AT,46.60806,14.36417 1890,Eberndorf,2057,2,15,AT,46.59139,14.64361 1894,Eberstein,2057,2,15,AT,46.80806,14.56 143792,Ebriach,2057,2,15,AT,46.46667,14.51667 143793,Eisenkappel-Vellach,2057,2,15,AT,46.48638889,14.59611111 1957,Faak am See,2057,2,15,AT,46.56806,13.90972 143794,Feffernitz,2057,2,15,AT,46.68333333,13.7 1966,Feistritz an der Drau,2057,2,15,AT,46.70157,13.66479 1967,Feistritz an der Gail,2057,2,15,AT,46.5775,13.60667 1969,Feistritz im Rosental,2057,2,15,AT,46.51667,14.16667 1970,Feistritz ob Bleiburg,2057,2,15,AT,46.55,14.76667 1971,Feld am See,2057,2,15,AT,46.77639,13.74778 2998,Feldkirchen District,2057,2,15,AT,46.72127,14.09683 1976,Feldkirchen in Kärnten,2057,2,15,AT,46.72368,14.0958 1980,Ferlach,2057,2,15,AT,46.52694,14.30194 1981,Ferndorf,2057,2,15,AT,46.73651,13.62661 1988,Finkenstein,2057,2,15,AT,46.56155,13.87086 1989,Finkenstein am Faaker See,2057,2,15,AT,46.57904,13.93496 1997,Flattach,2057,2,15,AT,46.93861,13.13444 2033,Föderlach I,2057,2,15,AT,46.59998,13.96128 143797,Frantschach-Sankt Gertraud,2057,2,15,AT,46.86111111,14.86027778 2015,Frauenstein,2057,2,15,AT,46.81417,14.29417 2021,Fresach,2057,2,15,AT,46.71556,13.69083 2022,Fresen,2057,2,15,AT,46.70516,14.04513 2024,Friesach,2057,2,15,AT,46.95528,14.40583 2036,Fürnitz,2057,2,15,AT,46.56188,13.81732 2043,Gailitz,2057,2,15,AT,46.56083,13.70444 2046,Gallizien,2057,2,15,AT,46.55,14.51667 143800,Gemmersdorf,2057,2,15,AT,46.7574,14.9022 143801,Gerlamoos,2057,2,15,AT,46.76391,13.272 143802,Gitschtal,2057,2,15,AT,46.67972222,13.26055556 2083,Glanegg,2057,2,15,AT,46.72259,14.19893 2088,Globasnitz,2057,2,15,AT,46.55694,14.70278 2091,Glödnitz,2057,2,15,AT,46.87398,14.11915 2093,Gmünd,2057,2,15,AT,46.90722,13.52944 143803,Gmünd in Kärnten,2057,2,15,AT,46.91472,13.5467 2099,Gnesau,2057,2,15,AT,46.77544,13.96251 143806,Görtschach,2057,2,15,AT,46.61278,13.465 2113,Grafenstein,2057,2,15,AT,46.61393,14.46719 2124,Greifenburg,2057,2,15,AT,46.75027,13.17982 2130,Gries,2057,2,15,AT,46.8316,14.85103 2135,Griffen,2057,2,15,AT,46.70444,14.73278 2155,Großkirchheim,2057,2,15,AT,46.9727,12.89589 2178,Gurk,2057,2,15,AT,46.87389,14.29167 2182,Guttaring,2057,2,15,AT,46.88536,14.51071 2258,Heiligenblut,2057,2,15,AT,47.03979,12.84345 2271,Hermagor,2057,2,15,AT,46.62722,13.36722 3008,Hermagor District,2057,2,15,AT,46.63137,13.13246 143807,Hermagor-Pressegger See,2057,2,15,AT,46.62722222,13.36722222 2282,Himmelberg,2057,2,15,AT,46.75667,14.03056 2319,Hohenthurn,2057,2,15,AT,46.55774,13.66038 2344,Hörtendorf,2057,2,15,AT,46.63333,14.4 2348,Hüttenberg,2057,2,15,AT,46.94139,14.55 2367,Irschen,2057,2,15,AT,46.75694,13.02528 2402,Kappel am Krappfeld,2057,2,15,AT,46.83861,14.48639 2420,Keutschach am See,2057,2,15,AT,46.59306,14.18889 2424,Kirchbach,2057,2,15,AT,46.6416,13.18454 143810,Klagenfurt,2057,2,15,AT,46.63873,14.2973 2446,Klagenfurt am Wörthersee,2057,2,15,AT,46.63333,14.3 3016,Klagenfurt-Land District,2057,2,15,AT,46.56722,14.29295 143811,Kleblach-Lind,2057,2,15,AT,46.76722222,13.35805556 2449,Klein Sankt Paul,2057,2,15,AT,46.83611,14.54139 2453,Kleinedling,2057,2,15,AT,46.81417,14.82778 2514,Kötschach,2057,2,15,AT,46.68167,13.00694 143813,Kötschach-Mauthen,2057,2,15,AT,46.66666667,13.0 2515,Köttmannsdorf,2057,2,15,AT,46.56139,14.23389 143812,Krems,2057,2,15,AT,46.9225,13.5675 2500,Krumpendorf,2057,2,15,AT,46.63333,14.21667 2516,Kühnsdorf,2057,2,15,AT,46.62194,14.63639 143814,Lamnitz,2057,2,15,AT,46.86666667,12.98333333 2533,Landskron,2057,2,15,AT,46.61667,13.88333 2553,Launsdorf,2057,2,15,AT,46.77056,14.45194 2556,Lavamünd,2057,2,15,AT,46.64019,14.94733 2561,Ledenitzen,2057,2,15,AT,46.56639,13.96139 2574,Lendorf,2057,2,15,AT,46.83528,13.43028 143816,Leppen,2057,2,15,AT,46.48333,14.63333 143817,Lesachtal,2057,2,15,AT,46.69388889,12.81583333 2594,Liebenfels,2057,2,15,AT,46.73778,14.28667 2601,Lind,2057,2,15,AT,46.62244,13.84715 143818,Lobersberg,2057,2,15,AT,46.865,12.91111111 2618,Ludmannsdorf,2057,2,15,AT,46.54139,14.13425 143819,Lurnfeld,2057,2,15,AT,46.83333333,13.36666667 143820,Magdalensberg,2057,2,15,AT,46.70111111,14.43111111 143821,Mallnitz,2057,2,15,AT,46.98972222,13.17 143822,Malta,2057,2,15,AT,46.96666667,13.51666667 2646,Maria Rain,2057,2,15,AT,46.55389,14.29556 2647,Maria Saal,2057,2,15,AT,46.68083,14.34861 2650,Maria Wörth,2057,2,15,AT,46.61639,14.16306 2678,Mautbrücken,2057,2,15,AT,46.72037,14.19399 2692,Metnitz,2057,2,15,AT,46.98056,14.21667 2696,Micheldorf,2057,2,15,AT,46.91667,14.41667 2702,Millstatt,2057,2,15,AT,46.80417,13.58056 2742,Mölbling,2057,2,15,AT,46.85,14.43333 2743,Möllbrücke,2057,2,15,AT,46.83639,13.37278 2726,Moosburg,2057,2,15,AT,46.6575,14.17472 2749,Mörtschach,2057,2,15,AT,46.92389,12.91778 2755,Mühldorf,2057,2,15,AT,46.86028,13.35361 2782,Neu-Feffernitz,2057,2,15,AT,46.68772,13.67914 2794,Neuhaus,2057,2,15,AT,46.63333,14.88333 2823,Niederdorf,2057,2,15,AT,46.61667,14.4 143829,Nötsch im Gailtal,2057,2,15,AT,46.59,13.62277778 143830,Oberdörfl,2057,2,15,AT,46.55528,14.10806 2849,Oberdrauburg,2057,2,15,AT,46.74306,12.97028 143831,Obermillstatt,2057,2,15,AT,46.8106,13.5908 2879,Obervellach,2057,2,15,AT,46.93667,13.20417 2906,Ossiach,2057,2,15,AT,46.67435,13.98358 2928,Paternion,2057,2,15,AT,46.71417,13.63611 143832,Pischeldorf,2057,2,15,AT,46.68333,14.45 143834,Pöckau,2057,2,15,AT,46.55,13.7333 2986,Poggersdorf,2057,2,15,AT,46.65,14.45 3108,Pörtschach am Wörthersee,2057,2,15,AT,46.63639,14.14639 3078,Preitenegg,2057,2,15,AT,46.94,14.92583 3081,Priel,2057,2,15,AT,46.82758,14.8333 143833,Pusarnitz,2057,2,15,AT,46.83333,13.4 3123,Radenthein,2057,2,15,AT,46.80056,13.71167 3130,Rain,2057,2,15,AT,46.60528,14.38611 3137,Rangersdorf,2057,2,15,AT,46.86001,12.94923 3157,Reding,2057,2,15,AT,46.81667,14.85 143835,Reichenau,2057,2,15,AT,46.85416667,13.89305556 3165,Reichenfels,2057,2,15,AT,47.00718,14.74425 143836,Reißeck,2057,2,15,AT,46.87694444,13.30555556 3178,Rennweg am Katschberg,2057,2,15,AT,47.01667,13.61667 143837,Rittersdorf,2057,2,15,AT,46.75111,13.03444 3210,Rosegg,2057,2,15,AT,46.58833,14.01718 3215,Ruden,2057,2,15,AT,46.65833,14.77639 3231,Sachsenburg,2057,2,15,AT,46.82917,13.355 3239,Sankt Andrä,2057,2,15,AT,46.76829,14.81991 143839,Sankt Egyden an der Drau,2057,2,15,AT,46.57722,14.06167 3484,Sankt Georgen am Längsee,2057,2,15,AT,46.78061,14.43033 143840,Sankt Georgen im Lavanttal,2057,2,15,AT,46.71666667,14.91666667 143841,Sankt Jakob,2057,2,15,AT,46.54777778,14.05722222 143842,Sankt Jakob im Rosental,2057,2,15,AT,46.54777778,14.05722222 143843,Sankt Kanzian am Klopeiner See,2057,2,15,AT,46.61444444,14.57583333 3279,Sankt Leonhard,2057,2,15,AT,46.62528,13.85865 3288,Sankt Magdalen,2057,2,15,AT,46.61667,13.88333 3293,Sankt Margareten im Rosental,2057,2,15,AT,46.54417,14.42444 3301,Sankt Martin,2057,2,15,AT,46.61667,14.28333 3319,Sankt Paul im Lavanttal,2057,2,15,AT,46.70056,14.87556 3320,Sankt Peter,2057,2,15,AT,46.62978,14.34016 3332,Sankt Ruprecht,2057,2,15,AT,46.6,14.31667 3334,Sankt Stefan,2057,2,15,AT,46.8075,14.85167 143844,Sankt Stefan im Gailtal,2057,2,15,AT,46.61666667,13.51666667 143845,Sankt Urban,2057,2,15,AT,46.75027778,14.16916667 3343,Sankt Veit an der Glan,2057,2,15,AT,46.76806,14.36028 3044,Sankt Veit an der Glan District,2057,2,15,AT,46.83333,14.4 3369,Schiefling am See,2057,2,15,AT,46.60444,14.0975 3374,Schleben,2057,2,15,AT,46.62039,13.93301 3428,Seebach,2057,2,15,AT,46.61667,13.86667 3430,Seeboden,2057,2,15,AT,46.81909,13.5143 3439,Seitenberg,2057,2,15,AT,46.74801,14.08825 143848,Sirnitz,2057,2,15,AT,46.82361,14.05944 3464,Sittersdorf,2057,2,15,AT,46.54444,14.60583 3479,Spittal an der Drau,2057,2,15,AT,46.8,13.5 3048,Spittal an der Drau District,2057,2,15,AT,46.85,13.33333 3483,St. Agathen und Perau,2057,2,15,AT,46.60627,13.85615 143849,St. Andrä,2057,2,15,AT,46.76473,14.82442 143850,St. Margareten im Rosental,2057,2,15,AT,46.52498,14.416 143851,St. Paul im Lavanttal,2057,2,15,AT,46.69869,14.84877 143852,St. Stefan im Gailtal,2057,2,15,AT,46.60796,13.50973 143853,St. Urban,2057,2,15,AT,46.76128,14.16658 143854,St. Veit an der Glan,2057,2,15,AT,46.73536,14.35404 3486,St. Veiter Vorstadt,2057,2,15,AT,46.6317,14.30579 3496,Stall,2057,2,15,AT,46.89056,13.03694 3517,Steindorf am Ossiacher See,2057,2,15,AT,46.69833,14.00917 3519,Steinfeld,2057,2,15,AT,46.75812,13.24934 3526,Steuerberg,2057,2,15,AT,46.78804,14.1129 3532,Stockenboi,2057,2,15,AT,46.72611,13.52306 143857,Straßburg,2057,2,15,AT,46.89555556,14.33083333 3548,Straßburg-Stadt,2057,2,15,AT,46.89444,14.32861 143858,Suetschach,2057,2,15,AT,46.52694444,14.15638889 143859,Techelsberg,2057,2,15,AT,46.65861111,14.10194444 143860,Timenitz,2057,2,15,AT,46.68333,14.41667 3618,Trebesing,2057,2,15,AT,46.88639,13.51028 143862,Treffen,2057,2,15,AT,46.66833333,13.85555556 3620,Treibach,2057,2,15,AT,46.86667,14.46667 143863,Tschachoritsch,2057,2,15,AT,46.55352,14.21461 143864,Umberg,2057,2,15,AT,46.64833,13.9575 3649,Untere Fellach,2057,2,15,AT,46.62504,13.82681 143865,Velden am Wörther See,2057,2,15,AT,46.6125,14.04194444 3675,Velden am Wörthersee,2057,2,15,AT,46.61301,14.0413 3684,Viktring,2057,2,15,AT,46.59194,14.26917 3685,Viktringer Vorstadt,2057,2,15,AT,46.61773,14.30931 3686,Villach,2057,2,15,AT,46.61028,13.85583 3688,Villach-Innere Stadt,2057,2,15,AT,46.61275,13.84638 3054,Villach-Land District,2057,2,15,AT,46.65308,13.77287 3689,Villacher Vorstadt,2057,2,15,AT,46.62368,14.28892 3705,Völkendorf,2057,2,15,AT,46.60806,13.83153 3706,Völkermarkt,2057,2,15,AT,46.66222,14.63444 3057,Völkermarkt District,2057,2,15,AT,46.59641,14.66664 3707,Völkermarkter Vorstadt,2057,2,15,AT,46.62418,14.32081 3721,Waiern,2057,2,15,AT,46.73028,14.08194 3744,Warmbad-Judendorf,2057,2,15,AT,46.60126,13.82241 143867,Weißensee,2057,2,15,AT,46.71666667,13.3 143868,Weißenstein,2057,2,15,AT,46.68222222,13.72361111 3776,Weitensfeld,2057,2,15,AT,46.84743,14.19213 143866,Weitensfeld im Gurktal,2057,2,15,AT,46.84861111,14.19166667 3794,Wernberg,2057,2,15,AT,46.61667,13.93333 3833,Winklern,2057,2,15,AT,46.87361,12.87472 3854,Wölfnitz,2057,2,15,AT,46.66639,14.25806 3842,Wolfsberg,2057,2,15,AT,46.84056,14.84417 3061,Wolfsberg District,2057,2,15,AT,46.83333,14.83333 3849,Wudmath,2057,2,15,AT,46.59634,13.98067 143871,Zell,2057,2,15,AT,46.47222222,14.38888889 1602,Absdorf,2065,3,15,AT,48.40021,15.97874 1606,Achau,2065,3,15,AT,48.08026,16.38611 1608,Aderklaa,2065,3,15,AT,48.28333,16.53333 1614,Aggsbach,2065,3,15,AT,48.29404,15.40382 1627,Alland,2065,3,15,AT,48.05829,16.07901 1628,Allentsteig,2065,3,15,AT,48.69725,15.32756 1633,Allhartsberg,2065,3,15,AT,48.02633,14.79009 1638,Altenburg,2065,3,15,AT,48.64765,15.59295 1639,Altendorf,2065,3,15,AT,47.65,16.01667 1641,Altenmarkt an der Triesting,2065,3,15,AT,48.01553,15.99661 1647,Altlengbach,2065,3,15,AT,48.15355,15.92606 1649,Altlichtenwarth,2065,3,15,AT,48.64442,16.79664 1650,Altmelon,2065,3,15,AT,48.46222,14.96552 1656,Amstetten,2065,3,15,AT,48.1229,14.87206 1659,Andlersdorf,2065,3,15,AT,48.18333,16.66667 1666,Angern an der March,2065,3,15,AT,48.37778,16.82806 1675,Arbesbach,2065,3,15,AT,48.49337,14.95308 1676,Ardagger Stift,2065,3,15,AT,48.15,14.83333 1689,Aschbach Markt,2065,3,15,AT,48.07234,14.75395 1690,Aspang Markt,2065,3,15,AT,47.55,16.08333 1691,Asparn an der Zaya,2065,3,15,AT,48.58333,16.5 1692,Asperhofen,2065,3,15,AT,48.24583,15.92606 1699,Atzenbrugg,2065,3,15,AT,48.29119,15.90614 1703,Au am Leithaberge,2065,3,15,AT,47.92296,16.55794 1708,Auersthal,2065,3,15,AT,48.37373,16.63596 1718,Bad Deutsch-Altenburg,2065,3,15,AT,48.13425,16.90624 1719,Bad Erlach,2065,3,15,AT,47.72722,16.21444 1720,Bad Fischau,2065,3,15,AT,47.83137,16.16707 1731,Bad Pirawarth,2065,3,15,AT,48.45194,16.59833 1736,Bad Schönau,2065,3,15,AT,47.49473,16.2341 1738,Bad Traunstein,2065,3,15,AT,48.4385,15.11712 1739,Bad Vöslau,2065,3,15,AT,47.96533,16.21359 1742,Baden,2065,3,15,AT,48.00543,16.23264 1824,Bärnkopf,2065,3,15,AT,48.39046,15.00479 1752,Behamberg,2065,3,15,AT,48.01667,14.48333 1753,Berg,2065,3,15,AT,48.10147,17.03842 1759,Bergland,2065,3,15,AT,48.15595,15.18553 1761,Berndorf,2065,3,15,AT,47.94567,16.10973 1764,Bernhardsthal,2065,3,15,AT,48.69158,16.86951 1768,Biberbach,2065,3,15,AT,48.03006,14.70795 1771,Biedermannsdorf,2065,3,15,AT,48.08393,16.34542 1776,Bisamberg,2065,3,15,AT,48.33333,16.35 1778,Bischofstetten,2065,3,15,AT,48.12222,15.46909 1782,Blindenmarkt,2065,3,15,AT,48.12749,14.98647 1786,Bockfließ,2065,3,15,AT,48.36,16.60389 1825,Böheimkirchen,2065,3,15,AT,48.19779,15.76178 1796,Breitenau,2065,3,15,AT,47.73355,16.14338 1801,Breitenfurt bei Wien,2065,3,15,AT,48.13333,16.15 1806,Bromberg,2065,3,15,AT,47.66539,16.2099 1809,Bruck an der Leitha,2065,3,15,AT,48.01667,16.76667 1813,Brunn am Gebirge,2065,3,15,AT,48.10697,16.28466 1814,Brunn an der Schneebergbahn,2065,3,15,AT,47.82376,16.15934 1815,Brunn an der Wild,2065,3,15,AT,48.69425,15.52008 1818,Buchbach,2065,3,15,AT,47.69648,15.98425 1841,Deutsch-Wagram,2065,3,15,AT,48.29972,16.56667 1855,Dobersberg,2065,3,15,AT,48.9151,15.32188 1864,Dorfstetten,2065,3,15,AT,48.32573,14.98218 1867,Drasenhofen,2065,3,15,AT,48.75,16.65 1870,Drösing,2065,3,15,AT,48.539,16.90264 1869,Droß,2065,3,15,AT,48.46393,15.57561 1877,Dürnkrut,2065,3,15,AT,48.47315,16.85062 1878,Dürnstein,2065,3,15,AT,48.39582,15.51973 1884,Ebenfurth,2065,3,15,AT,47.87738,16.36731 1887,Ebenthal,2065,3,15,AT,48.43333,16.78333 1889,Ebergassing,2065,3,15,AT,48.04567,16.51709 1895,Ebreichsdorf,2065,3,15,AT,47.95579,16.40705 1897,Echsenbach,2065,3,15,AT,48.71667,15.21667 1898,Eckartsau,2065,3,15,AT,48.14507,16.79737 1904,Edlitz,2065,3,15,AT,47.59797,16.14052 1909,Eggenburg,2065,3,15,AT,48.63892,15.81903 1910,Eggendorf,2065,3,15,AT,47.85809,16.32182 1911,Eggern,2065,3,15,AT,48.90829,15.14877 1920,Eichgraben,2065,3,15,AT,48.17204,15.98391 1927,Eisgarn,2065,3,15,AT,48.91675,15.1032 1935,Emmersdorf an der Donau,2065,3,15,AT,48.2414,15.33721 1938,Engelhartstetten,2065,3,15,AT,48.1816,16.88367 1941,Ennsdorf,2065,3,15,AT,48.21181,14.5029 1942,Enzenreith,2065,3,15,AT,47.66839,15.95249 1943,Enzersdorf an der Fischa,2065,3,15,AT,48.08502,16.60832 1944,Enzersfeld,2065,3,15,AT,48.36338,16.42387 1947,Erlauf,2065,3,15,AT,48.18333,15.18333 1948,Ernstbrunn,2065,3,15,AT,48.53333,16.35 1949,Ernsthofen,2065,3,15,AT,48.12915,14.48058 1950,Erpersdorf,2065,3,15,AT,48.3421,15.91747 1952,Ertl,2065,3,15,AT,47.97704,14.63134 1954,Eschenau,2065,3,15,AT,48.04825,15.56694 1956,Euratsfeld,2065,3,15,AT,48.08181,14.93154 1960,Falkenstein,2065,3,15,AT,48.71667,16.58333 1961,Fallbach,2065,3,15,AT,48.65,16.41667 1965,Feistritz am Wechsel,2065,3,15,AT,47.6,16.05 1977,Felixdorf,2065,3,15,AT,47.88159,16.24208 1978,Fels am Wagram,2065,3,15,AT,48.43333,15.81667 1983,Ferschnitz,2065,3,15,AT,48.09419,14.98454 1990,Fischamend-Markt,2065,3,15,AT,48.11667,16.6 2009,Frankenfels,2065,3,15,AT,47.98234,15.32593 2027,Frohsdorf,2065,3,15,AT,47.73333,16.25 2029,Furth an der Triesting,2065,3,15,AT,47.97326,15.97326 2030,Furth bei Göttweig,2065,3,15,AT,48.37385,15.61408 2038,Gaaden,2065,3,15,AT,48.05364,16.20003 2041,Gablitz,2065,3,15,AT,48.22856,16.15437 2044,Gainfarn,2065,3,15,AT,47.9628,16.19368 2052,Gaming,2065,3,15,AT,47.929,15.08818 2183,Gänserndorf,2065,3,15,AT,48.33925,16.72016 2058,Gars am Kamp,2065,3,15,AT,48.58899,15.65363 2063,Gastern,2065,3,15,AT,48.89446,15.22027 2065,Gaubitsch,2065,3,15,AT,48.65,16.38333 2067,Gaweinstal,2065,3,15,AT,48.48003,16.5879 2069,Gedersdorf,2065,3,15,AT,48.43319,15.68865 2073,Geras,2065,3,15,AT,48.79725,15.67268 2074,Gerasdorf bei Wien,2065,3,15,AT,48.29447,16.46765 2075,Gerersdorf,2065,3,15,AT,48.20088,15.55613 2078,Gerolding,2065,3,15,AT,48.25,15.41667 2080,Gföhl,2065,3,15,AT,48.51667,15.48333 2081,Gießhübl,2065,3,15,AT,48.0978,16.23479 2087,Glinzendorf,2065,3,15,AT,48.24605,16.6406 2089,Gloggnitz,2065,3,15,AT,47.67487,15.93893 2094,Gmünd,2065,3,15,AT,48.7683,14.9808 2095,Gnadendorf,2065,3,15,AT,48.61667,16.4 2098,Gneixendorf,2065,3,15,AT,48.43751,15.6181 2185,Göllersdorf,2065,3,15,AT,48.49357,16.11943 2186,Göpfritz an der Wild,2065,3,15,AT,48.72497,15.40236 2191,Göstling an der Ybbs,2065,3,15,AT,47.80664,14.93797 2193,Götzendorf an der Leitha,2065,3,15,AT,48.01667,16.58333 2110,Grafenegg,2065,3,15,AT,48.4304,15.74907 2112,Grafenschlag,2065,3,15,AT,48.5,15.16667 2114,Grafenwörth,2065,3,15,AT,48.4079,15.77826 2118,Gramatneusiedl,2065,3,15,AT,48.0304,16.48936 2126,Greinsfurth,2065,3,15,AT,48.10846,14.8439 2129,Gresten,2065,3,15,AT,47.98521,15.02552 2136,Grimmenstein,2065,3,15,AT,47.61635,16.12724 2146,Groß-Engersdorf,2065,3,15,AT,48.35873,16.5661 2147,Groß-Enzersdorf,2065,3,15,AT,48.20278,16.55083 2148,Groß-Gerungs,2065,3,15,AT,48.57422,14.95789 2149,Groß-Schweinbarth,2065,3,15,AT,48.41472,16.63194 2150,Groß-Siegharts,2065,3,15,AT,48.7918,15.40429 2152,Großebersdorf,2065,3,15,AT,48.36405,16.47076 2153,Großharras,2065,3,15,AT,48.66389,16.24556 2154,Großhofen,2065,3,15,AT,48.25834,16.6194 2157,Großkrut,2065,3,15,AT,48.64389,16.72361 2159,Großmugl,2065,3,15,AT,48.49917,16.23056 2160,Großriedenthal,2065,3,15,AT,48.48333,15.86667 2161,Großrußbach,2065,3,15,AT,48.47412,16.41649 2163,Großweikersdorf,2065,3,15,AT,48.47123,15.98251 2168,Grünbach am Schneeberg,2065,3,15,AT,47.79747,15.98785 2172,Gugging,2065,3,15,AT,48.31385,16.24852 2173,Gumpoldskirchen,2065,3,15,AT,48.04538,16.2771 2196,Günselsdorf,2065,3,15,AT,47.94395,16.26062 2176,Guntersdorf,2065,3,15,AT,48.65,16.05 2177,Guntramsdorf,2065,3,15,AT,48.04687,16.31384 2180,Gutenbrunn,2065,3,15,AT,48.3652,15.11899 2181,Gutenstein,2065,3,15,AT,47.876,15.88881 2200,Haag,2065,3,15,AT,48.11362,14.56753 2204,Hadersdorf am Kamp,2065,3,15,AT,48.45,15.71667 2205,Hadres,2065,3,15,AT,48.70965,16.13038 2207,Hafnerbach,2065,3,15,AT,48.21667,15.48333 2209,Hagenbrunn,2065,3,15,AT,48.33333,16.4 2213,Haidershofen,2065,3,15,AT,48.07579,14.46131 2216,Hainburg an der Donau,2065,3,15,AT,48.14627,16.94504 2218,Hainfeld,2065,3,15,AT,48.0339,15.77414 2230,Hardegg,2065,3,15,AT,48.85,15.85 2231,Haringsee,2065,3,15,AT,48.1927,16.78741 2232,Harland,2065,3,15,AT,48.16162,15.63835 2233,Harmannsdorf,2065,3,15,AT,48.39724,16.3722 2235,Hart,2065,3,15,AT,48.1532,15.61569 2247,Haugschlag,2065,3,15,AT,48.98333,15.05 2248,Haugsdorf,2065,3,15,AT,48.70762,16.07656 2249,Haunoldstein,2065,3,15,AT,48.2,15.45 2252,Hausbrunn,2065,3,15,AT,48.62602,16.82844 2253,Hauskirchen,2065,3,15,AT,48.6,16.76667 2254,Hausleiten,2065,3,15,AT,48.38333,16.1 2256,Hausmening,2065,3,15,AT,48.07074,14.81438 2257,Heidenreichstein,2065,3,15,AT,48.86667,15.11667 2260,Heiligeneich,2065,3,15,AT,48.29964,15.89413 2261,Heiligenkreuz,2065,3,15,AT,48.05559,16.12493 2270,Hennersdorf,2065,3,15,AT,48.11173,16.36311 2273,Hernstein,2065,3,15,AT,47.89465,16.10561 2274,Herrnbaumgarten,2065,3,15,AT,48.69606,16.68283 2275,Herzogenburg,2065,3,15,AT,48.28137,15.69431 2281,Himberg,2065,3,15,AT,48.08333,16.43333 2285,Hinterbrühl,2065,3,15,AT,48.08611,16.24809 2287,Hinterleiten,2065,3,15,AT,48.16513,15.96654 2292,Hirschbach,2065,3,15,AT,48.74329,15.12521 2294,Hirtenberg,2065,3,15,AT,47.93095,16.17908 2299,Hochleithen,2065,3,15,AT,48.45317,16.5309 2302,Hochwolkersdorf,2065,3,15,AT,47.66127,16.28072 2305,Hof am Leithaberge,2065,3,15,AT,47.95,16.58333 2308,Hofamt Priel,2065,3,15,AT,48.19581,15.07746 2339,Höflein,2065,3,15,AT,48.06667,16.78333 2340,Höfling,2065,3,15,AT,48.05444,15.03672 2310,Hofstetten,2065,3,15,AT,48.09711,15.51149 2312,Hohenau,2065,3,15,AT,48.6042,16.9047 2314,Hohenberg,2065,3,15,AT,47.90679,15.61998 2315,Hoheneich,2065,3,15,AT,48.77195,15.02857 2317,Hohenruppersdorf,2065,3,15,AT,48.46439,16.65244 2321,Hollabrunn,2065,3,15,AT,48.55,16.08333 2323,Hollenstein an der Ybbs,2065,3,15,AT,47.80305,14.77312 2324,Hollenthon,2065,3,15,AT,47.58938,16.26131 2331,Horn,2065,3,15,AT,48.66274,15.65663 2333,Hundsheim,2065,3,15,AT,48.11749,16.93581 2346,Hürm,2065,3,15,AT,48.15601,15.41262 2334,Hutten,2065,3,15,AT,48.17856,15.98579 2372,Jaidhof,2065,3,15,AT,48.53333,15.48333 2374,Japons,2065,3,15,AT,48.7925,15.56831 2375,Jedenspeigen,2065,3,15,AT,48.49807,16.87225 2394,Kaltenleutgeben,2065,3,15,AT,48.11646,16.19956 2398,Kapelln,2065,3,15,AT,48.25817,15.75731 2405,Karlstetten,2065,3,15,AT,48.2592,15.56544 2409,Kasten bei Böheimkirchen,2065,3,15,AT,48.1532,15.77946 2411,Katzelsdorf,2065,3,15,AT,47.78055,16.26985 2412,Kaumberg,2065,3,15,AT,48.02415,15.89842 2414,Kautzen,2065,3,15,AT,48.93,15.23932 2416,Kematen an der Ybbs,2065,3,15,AT,48.02541,14.76468 2421,Kierling,2065,3,15,AT,48.30997,16.27616 2422,Kilb,2065,3,15,AT,48.10101,15.4085 2426,Kirchberg am Wagram,2065,3,15,AT,48.43182,15.89692 2427,Kirchberg am Walde,2065,3,15,AT,48.72477,15.08826 2428,Kirchberg am Wechsel,2065,3,15,AT,47.60738,15.99103 2429,Kirchberg an der Pielach,2065,3,15,AT,48.0269,15.42875 2437,Kirchschlag,2065,3,15,AT,48.39345,15.22285 2439,Kirchschlag in der Buckligen Welt,2065,3,15,AT,47.5,16.28333 2440,Kirchstetten,2065,3,15,AT,48.18333,15.81667 2441,Kirnberg an der Mank,2065,3,15,AT,48.07246,15.32232 2448,Klausen-Leopoldsdorf,2065,3,15,AT,48.08771,16.01686 2450,Klein-Neusiedl,2065,3,15,AT,48.09379,16.60661 2451,Klein-Pöchlarn,2065,3,15,AT,48.21667,15.21667 2459,Kleinzell,2065,3,15,AT,47.97993,15.7362 2462,Klosterneuburg,2065,3,15,AT,48.30521,16.32522 2510,Königstetten,2065,3,15,AT,48.30198,16.14492 2476,Korneuburg,2065,3,15,AT,48.35,16.33333 2477,Kottingbrunn,2065,3,15,AT,47.95096,16.22715 2483,Krems an der Donau,2065,3,15,AT,48.40921,15.61415 2484,Krems an der Donau Stadt,2065,3,15,AT,48.4104,15.60574 2491,Kritzendorf,2065,3,15,AT,48.32932,16.30011 2495,Krumau am Kamp,2065,3,15,AT,48.58879,15.44914 2497,Krumbach Markt,2065,3,15,AT,47.51667,16.18333 2499,Krumnussbaum,2065,3,15,AT,48.20877,15.16212 2517,Laa an der Thaya,2065,3,15,AT,48.71667,16.38333 2519,Laab im Walde,2065,3,15,AT,48.15486,16.17359 2525,Ladendorf,2065,3,15,AT,48.53333,16.48333 2531,Landegg,2065,3,15,AT,47.9,16.4 2535,Langau,2065,3,15,AT,48.83207,15.7156 2539,Langenlebarn-Oberaigen,2065,3,15,AT,48.33023,16.11059 2540,Langenlois,2065,3,15,AT,48.46667,15.66667 2541,Langenrohr,2065,3,15,AT,48.30489,16.01034 2544,Langenzersdorf,2065,3,15,AT,48.30432,16.36143 2546,Langschlag,2065,3,15,AT,48.57448,14.88459 2549,Lanzendorf,2065,3,15,AT,48.11056,16.445 2550,Lanzenkirchen,2065,3,15,AT,47.73621,16.21985 2551,Lassee,2065,3,15,AT,48.22479,16.8223 2558,Laxenburg,2065,3,15,AT,48.06833,16.35607 2563,Leiben,2065,3,15,AT,48.24628,15.2746 2570,Leitzersdorf,2065,3,15,AT,48.41918,16.24513 2575,Lengenfeld,2065,3,15,AT,48.47187,15.5987 2579,Leobendorf,2065,3,15,AT,48.38333,16.31667 2580,Leobersdorf,2065,3,15,AT,47.92796,16.21651 2584,Leopoldsdorf,2065,3,15,AT,48.11557,16.39126 2585,Leopoldsdorf im Marchfelde,2065,3,15,AT,48.22261,16.68858 2586,Lerchenfeld,2065,3,15,AT,48.41234,15.63183 2590,Lichtenegg,2065,3,15,AT,47.6,16.2 2592,Lichtenwörth,2065,3,15,AT,47.82756,16.29873 2600,Lilienfeld,2065,3,15,AT,48.01312,15.59664 2605,Litschau,2065,3,15,AT,48.94409,15.04483 2610,Loich,2065,3,15,AT,47.99578,15.40163 2613,Loosdorf,2065,3,15,AT,48.2,15.4 2620,Lunz am See,2065,3,15,AT,47.8612,15.02998 2626,Mailberg,2065,3,15,AT,48.67379,16.18132 2628,Maissau,2065,3,15,AT,48.573,15.83005 2629,Mank,2065,3,15,AT,48.11024,15.33915 2630,Mannersdorf am Leithagebirge,2065,3,15,AT,47.96667,16.6 2633,Mannsdorf an der Donau,2065,3,15,AT,48.152,16.66506 2634,Mannswörth,2065,3,15,AT,48.14547,16.51374 2635,Marbach an der Donau,2065,3,15,AT,48.21667,15.15 2636,Marchegg,2065,3,15,AT,48.26217,16.91045 2638,Margarethen am Moos,2065,3,15,AT,48.03333,16.6 2640,Maria Ellend,2065,3,15,AT,48.1,16.68333 2641,Maria Enzersdorf,2065,3,15,AT,48.1,16.28333 2642,Maria Laach am Jauerling,2065,3,15,AT,48.30412,15.34472 2644,Maria Lanzendorf,2065,3,15,AT,48.09923,16.41984 2649,Maria Taferl,2065,3,15,AT,48.22702,15.15954 2651,Maria-Anzbach,2065,3,15,AT,48.19012,15.93155 2659,Markersdorf an der Pielach,2065,3,15,AT,48.18333,15.5 2660,Markgrafneusiedl,2065,3,15,AT,48.26667,16.63333 2663,Markt Piesting,2065,3,15,AT,47.87358,16.1251 2665,Martinsberg,2065,3,15,AT,48.37549,15.14997 2672,Matzen,2065,3,15,AT,48.4,16.7 2673,Matzendorf,2065,3,15,AT,47.89137,16.21393 2674,Mauer bei Amstetten,2065,3,15,AT,48.09643,14.8006 2675,Mauerbach,2065,3,15,AT,48.24514,16.16793 2679,Mautern,2065,3,15,AT,48.39319,15.57793 2688,Melk,2065,3,15,AT,48.22737,15.33186 2698,Michelhausen,2065,3,15,AT,48.29085,15.93893 2701,Miesenbach,2065,3,15,AT,47.84035,15.98236 2706,Mistelbach,2065,3,15,AT,48.57,16.57667 2708,Mitterbach am Erlaufsee,2065,3,15,AT,47.81396,15.29537 2716,Mitterndorf an der Fischa,2065,3,15,AT,47.99739,16.47357 2740,Mödling,2065,3,15,AT,48.08605,16.28921 2744,Möllersdorf,2065,3,15,AT,48.02575,16.30508 2746,Mönichkirchen,2065,3,15,AT,47.51062,16.03425 2725,Moosbrunn,2065,3,15,AT,48.01667,16.45 2731,Muckendorf an der Donau,2065,3,15,AT,48.33183,16.1554 2732,Muggendorf,2065,3,15,AT,47.91059,15.93533 2756,Mühldorf,2065,3,15,AT,48.37432,15.34672 2761,Münchendorf,2065,3,15,AT,48.03333,16.38333 2777,Neidling,2065,3,15,AT,48.24005,15.55591 2783,Neu-Guntramsdorf,2065,3,15,AT,48.0642,16.31573 2789,Neudorf bei Staatz,2065,3,15,AT,48.72083,16.49139 2793,Neufurth,2065,3,15,AT,48.07894,14.8118 2797,Neuhofen an der Ybbs,2065,3,15,AT,48.05795,14.85489 2803,Neulengbach,2065,3,15,AT,48.19745,15.90219 2805,Neumarkt an der Ybbs,2065,3,15,AT,48.14103,15.05758 2809,Neunkirchen,2065,3,15,AT,47.72096,16.08107 2810,Neusiedl,2065,3,15,AT,47.88769,15.96313 2812,Neusiedl an der Zaya,2065,3,15,AT,48.5992,16.7799 2824,Niederhollabrunn,2065,3,15,AT,48.43333,16.3 2825,Niederleis,2065,3,15,AT,48.55,16.4 2839,Nöchling,2065,3,15,AT,48.22433,14.98123 2843,Ober-Grafendorf,2065,3,15,AT,48.1504,15.54531 2854,Oberhausen,2065,3,15,AT,48.1769,16.58506 2863,Oberndorf an der Melk,2065,3,15,AT,48.06386,15.2243 2867,Oberndorf in der Ebene,2065,3,15,AT,48.2704,15.68985 2874,Obersdorf,2065,3,15,AT,48.36667,16.51667 2875,Obersiebenbrunn,2065,3,15,AT,48.26537,16.71076 2881,Oberwagram,2065,3,15,AT,48.20157,15.64917 2882,Oberwaltersdorf,2065,3,15,AT,47.97567,16.32191 2886,Oberwölbling,2065,3,15,AT,48.31719,15.59166 2891,Oehling,2065,3,15,AT,48.1,14.8 2894,Oeynhausen,2065,3,15,AT,47.98533,16.29187 2901,Opponitz,2065,3,15,AT,47.87776,14.82283 2904,Orth an der Donau,2065,3,15,AT,48.14524,16.70089 2910,Ottenschlag,2065,3,15,AT,48.42393,15.21924 2913,Ottenthal,2065,3,15,AT,48.761,16.57914 2914,Otterthal,2065,3,15,AT,47.61667,15.93333 2923,Parbasdorf,2065,3,15,AT,48.28333,16.6 2931,Paudorf,2065,3,15,AT,48.35416,15.61853 2932,Payerbach,2065,3,15,AT,47.69209,15.8634 2935,Penz,2065,3,15,AT,48.03333,14.48333 2937,Perchtoldsdorf,2065,3,15,AT,48.11935,16.26607 2940,Pernegg,2065,3,15,AT,48.73333,15.61667 2942,Pernersdorf,2065,3,15,AT,48.7,16.01667 2943,Pernitz,2065,3,15,AT,47.89759,15.96022 2944,Persenbeug,2065,3,15,AT,48.18733,15.08809 2947,Petronell-Carnuntum,2065,3,15,AT,48.11296,16.86582 2951,Petzenkirchen,2065,3,15,AT,48.14693,15.15465 2955,Pfaffstätten,2065,3,15,AT,48.01737,16.26354 2970,Pillichsdorf,2065,3,15,AT,48.35,16.53333 2980,Pitten,2065,3,15,AT,47.71667,16.18333 3103,Pöchlarn,2065,3,15,AT,48.2,15.2 3104,Pöggstall,2065,3,15,AT,48.31734,15.20405 2987,Politischer Bezirk Amstetten,2065,3,15,AT,48.0,14.76667 2988,Politischer Bezirk Baden,2065,3,15,AT,47.97729,16.19845 2992,Politischer Bezirk Bruck an der Leitha,2065,3,15,AT,48.06781,16.77284 3004,Politischer Bezirk Gänserndorf,2065,3,15,AT,48.3934,16.73892 3001,Politischer Bezirk Gmünd,2065,3,15,AT,48.74732,14.98166 3009,Politischer Bezirk Hollabrunn,2065,3,15,AT,48.65286,15.99701 3010,Politischer Bezirk Horn,2065,3,15,AT,48.71341,15.68712 3017,Politischer Bezirk Korneuburg,2065,3,15,AT,48.44343,16.2412 3018,Politischer Bezirk Krems,2065,3,15,AT,48.46582,15.52093 3025,Politischer Bezirk Lilienfeld,2065,3,15,AT,47.91667,15.6 3028,Politischer Bezirk Melk,2065,3,15,AT,48.21314,15.24282 3029,Politischer Bezirk Mistelbach,2065,3,15,AT,48.59436,16.5473 3032,Politischer Bezirk Mödling,2065,3,15,AT,48.08517,16.24118 3033,Politischer Bezirk Neunkirchen,2065,3,15,AT,47.69424,15.93783 3043,Politischer Bezirk Sankt Pölten,2065,3,15,AT,48.16905,15.66508 3045,Politischer Bezirk Scheibbs,2065,3,15,AT,47.92316,15.10376 3052,Politischer Bezirk Tulln,2065,3,15,AT,48.3,16.0 3058,Politischer Bezirk Waidhofen an der Thaya,2065,3,15,AT,48.85925,15.35814 3060,Politischer Bezirk Wiener Neustadt,2065,3,15,AT,47.83203,16.14291 3063,Politischer Bezirk Zwettl,2065,3,15,AT,48.57435,15.17159 3066,Pottenbrunn,2065,3,15,AT,48.23333,15.7 3067,Pottendorf,2065,3,15,AT,47.9,16.38333 3068,Pottenstein,2065,3,15,AT,47.9582,16.0948 3069,Pottschach,2065,3,15,AT,47.69856,16.00725 3071,Poysdorf,2065,3,15,AT,48.66667,16.63333 3079,Prellenkirchen,2065,3,15,AT,48.07401,16.95233 3080,Pressbaum,2065,3,15,AT,48.18333,16.08333 3082,Prigglitz,2065,3,15,AT,47.70318,15.92794 3083,Prinzersdorf,2065,3,15,AT,48.2,15.51667 3085,Prottes,2065,3,15,AT,48.3868,16.7389 3090,Puchberg am Schneeberg,2065,3,15,AT,47.78709,15.91352 3092,Puchenstuben,2065,3,15,AT,47.92819,15.28748 3096,Pulkau,2065,3,15,AT,48.70484,15.86031 3099,Purgstall,2065,3,15,AT,48.05841,15.13478 3100,Purkersdorf,2065,3,15,AT,48.20769,16.17539 3102,Pyhra,2065,3,15,AT,48.1591,15.68624 3116,Raabs an der Thaya,2065,3,15,AT,48.85,15.5 3117,Raach am Hochgebirge,2065,3,15,AT,47.63333,15.93333 3118,Raasdorf,2065,3,15,AT,48.24657,16.56532 3119,Rabensburg,2065,3,15,AT,48.65,16.9 3120,Rabenstein an der Pielach,2065,3,15,AT,48.06535,15.46772 3133,Ramsau,2065,3,15,AT,48.00313,15.80332 3136,Randegg,2065,3,15,AT,48.01198,14.97334 3141,Rannersdorf,2065,3,15,AT,48.12772,16.46379 3144,Rappottenstein,2065,3,15,AT,48.52161,15.07925 3146,Rastenfeld,2065,3,15,AT,48.57348,15.33176 3151,Ratzersdorf an der Traisen,2065,3,15,AT,48.22639,15.66629 3152,Rauchenwarth,2065,3,15,AT,48.0833,16.52794 3154,Ravelsbach,2065,3,15,AT,48.55,15.85 3155,Raxendorf,2065,3,15,AT,48.34108,15.27666 3161,Rehberg,2065,3,15,AT,48.43114,15.58702 3162,Reichenau an der Rax,2065,3,15,AT,47.69509,15.84572 3170,Reingers,2065,3,15,AT,48.96667,15.13333 3171,Reinsberg,2065,3,15,AT,47.98567,15.07067 3172,Reisenberg,2065,3,15,AT,47.99406,16.52018 3181,Retz,2065,3,15,AT,48.75712,15.95485 3199,Rohr im Gebirge,2065,3,15,AT,47.89471,15.73603 3201,Rohrau,2065,3,15,AT,48.06667,16.85 3202,Rohrbach an der Gölsen,2065,3,15,AT,48.04699,15.74169 3223,Röhrenbach,2065,3,15,AT,48.65,15.5 3207,Rohrendorf bei Krems,2065,3,15,AT,48.41935,15.65772 3225,Röschitz,2065,3,15,AT,48.64312,15.81774 3211,Rosenau am Sonntagberg,2065,3,15,AT,48.00778,14.73927 3219,Ruprechtshofen,2065,3,15,AT,48.13648,15.27675 3233,Sallingberg,2065,3,15,AT,48.46667,15.23333 3238,Sankt Aegyd am Neuwalde,2065,3,15,AT,47.85383,15.56969 3242,Sankt Andrä vor dem Hagenthale,2065,3,15,AT,48.32202,16.20724 3247,Sankt Corona am Wechsel,2065,3,15,AT,47.58333,16.0 3254,Sankt Georgen am Ybbsfelde,2065,3,15,AT,48.12892,14.95364 3256,Sankt Georgen an der Leys,2065,3,15,AT,48.03149,15.22722 3281,Sankt Leonhard am Forst,2065,3,15,AT,48.14232,15.28464 3282,Sankt Leonhard am Hornerwald,2065,3,15,AT,48.6,15.53333 3295,Sankt Margarethen an der Sierning,2065,3,15,AT,48.1591,15.49055 3304,Sankt Martin am Ybbsfelde,2065,3,15,AT,48.16425,15.02076 3318,Sankt Pantaleon,2065,3,15,AT,48.21058,14.56804 3326,Sankt Peter in der Au Markt,2065,3,15,AT,48.044,14.62182 3329,Sankt Pölten,2065,3,15,AT,48.2,15.63333 3330,Sankt Pölten Stadt,2065,3,15,AT,48.2,15.61667 3341,Sankt Valentin,2065,3,15,AT,48.16667,14.51667 3344,Sankt Veit an der Gölsen,2065,3,15,AT,48.0432,15.66942 3359,Scharndorf,2065,3,15,AT,48.09399,16.79883 3366,Scheibbs,2065,3,15,AT,48.00474,15.16817 3376,Schleinbach,2065,3,15,AT,48.41667,16.46667 3416,Schönau an der Triesting,2065,3,15,AT,47.93452,16.25376 3417,Schönbach,2065,3,15,AT,48.45,15.03333 3421,Schönkirchen-Reyersdorf,2065,3,15,AT,48.35477,16.69115 3384,Schottwien,2065,3,15,AT,47.65683,15.8725 3385,Schrattenbach,2065,3,15,AT,47.77902,15.9906 3386,Schrattenberg,2065,3,15,AT,48.72359,16.72201 3387,Schrattenthal,2065,3,15,AT,48.7,15.9 3388,Schrems,2065,3,15,AT,48.78333,15.06667 3392,Schwadorf,2065,3,15,AT,48.06936,16.57957 3397,Schwarzau am Steinfeld,2065,3,15,AT,47.73183,16.17094 3398,Schwarzau im Gebirge,2065,3,15,AT,47.81223,15.70581 3400,Schwarzenau,2065,3,15,AT,48.74436,15.25838 3401,Schwarzenbach,2065,3,15,AT,47.63547,16.35109 3402,Schwarzenbach an der Pielach,2065,3,15,AT,47.93333,15.38333 3405,Schwechat,2065,3,15,AT,48.13333,16.46667 3406,Schweiggers,2065,3,15,AT,48.66667,15.06667 3429,Seebenstein,2065,3,15,AT,47.69936,16.14484 3437,Seibersdorf,2065,3,15,AT,47.95858,16.51842 3440,Seitenstetten Markt,2065,3,15,AT,48.03333,14.65 3443,Semmering,2065,3,15,AT,47.63347,15.82993 3445,Senftenberg,2065,3,15,AT,48.43333,15.55 3447,Seyring,2065,3,15,AT,48.33333,16.48333 3452,Sieghartskirchen,2065,3,15,AT,48.25531,16.01223 3453,Sierndorf,2065,3,15,AT,48.43024,16.16658 3457,Sigmundsherberg,2065,3,15,AT,48.68333,15.75 3465,Sitzendorf an der Schmida,2065,3,15,AT,48.59841,15.94254 3467,Sollenau,2065,3,15,AT,47.89834,16.24833 3468,Sommerein,2065,3,15,AT,47.98333,16.65 3470,Sonntagberg,2065,3,15,AT,47.99561,14.76065 3471,Sooss,2065,3,15,AT,47.98464,16.21737 3472,Spannberg,2065,3,15,AT,48.46393,16.73647 3476,Spillern,2065,3,15,AT,48.38333,16.25 3480,Spitz,2065,3,15,AT,48.3656,15.41416 3481,Spratzern,2065,3,15,AT,48.17044,15.61844 3487,Staatz,2065,3,15,AT,48.67617,16.48726 3506,Stattersdorf,2065,3,15,AT,48.18333,15.63333 3507,Statzendorf,2065,3,15,AT,48.30752,15.64127 3511,Stein an der Donau,2065,3,15,AT,48.40163,15.58102 3512,Steinabrückl,2065,3,15,AT,47.87053,16.20277 3514,Steinakirchen am Forst,2065,3,15,AT,48.06965,15.04801 3523,Stephanshart,2065,3,15,AT,48.15,14.81667 3524,Stetteldorf am Wagram,2065,3,15,AT,48.40815,16.01862 3525,Stetten,2065,3,15,AT,48.36667,16.38333 3533,Stockerau,2065,3,15,AT,48.38333,16.21667 3534,Stollhofen,2065,3,15,AT,48.35226,15.75963 3560,Stössing,2065,3,15,AT,48.12267,15.81379 3539,Strass,2065,3,15,AT,48.46667,15.73333 3544,Strasshof an der Nordbahn,2065,3,15,AT,48.31667,16.66667 3546,Stratzing,2065,3,15,AT,48.45,15.6 3551,Strengberg,2065,3,15,AT,48.14685,14.65147 3554,Stronsdorf,2065,3,15,AT,48.65157,16.2989 3573,Tattendorf,2065,3,15,AT,47.95,16.3 3579,Teesdorf,2065,3,15,AT,47.95,16.28333 3584,Ternitz,2065,3,15,AT,47.71565,16.03575 3590,Thaya,2065,3,15,AT,48.85489,15.28902 3591,Theresienfeld,2065,3,15,AT,47.85,16.23333 3592,Thomasberg,2065,3,15,AT,47.56667,16.13333 3598,Tiefenbach,2065,3,15,AT,47.5354,16.21346 3609,Traisen,2065,3,15,AT,48.03333,15.6 3610,Traiskirchen,2065,3,15,AT,48.01485,16.29324 3611,Traismauer,2065,3,15,AT,48.35,15.73333 3612,Trattenbach,2065,3,15,AT,47.6,15.86667 3616,Trautmannsdorf an der Leitha,2065,3,15,AT,48.02357,16.63266 3621,Tribuswinkel,2065,3,15,AT,48.00623,16.27075 3627,Trumau,2065,3,15,AT,47.99348,16.34268 3631,Tulbing,2065,3,15,AT,48.29336,16.12226 3633,Tulln,2065,3,15,AT,48.32829,16.05858 3634,Tullnerbach-Lawies,2065,3,15,AT,48.18912,16.09117 3638,Türnitz,2065,3,15,AT,47.93095,15.49295 3642,Ulrichskirchen,2065,3,15,AT,48.4,16.48333 3660,Untersiebenbrunn,2065,3,15,AT,48.25,16.73333 3661,Unterstinkenbrunn,2065,3,15,AT,48.6677,16.34607 3664,Unterwagram,2065,3,15,AT,48.21243,15.64951 3665,Unterwaltersdorf,2065,3,15,AT,47.95,16.41667 3676,Velm,2065,3,15,AT,48.03333,16.43333 3680,Viehofen,2065,3,15,AT,48.21667,15.61667 3692,Vitis,2065,3,15,AT,48.75964,15.18259 3709,Vösendorf,2065,3,15,AT,48.12107,16.34036 3716,Waidhofen an der Thaya,2065,3,15,AT,48.81667,15.28333 3717,Waidhofen an der Ybbs,2065,3,15,AT,47.96004,14.77361 3718,Waidhofen an der Ybbs Stadt,2065,3,15,AT,47.95999,14.77438 3719,Waidmannsfeld,2065,3,15,AT,47.87042,15.98116 3727,Waldegg,2065,3,15,AT,47.86852,16.05154 3728,Waldenstein,2065,3,15,AT,48.72845,15.01419 3729,Waldhausen,2065,3,15,AT,48.52183,15.2625 3732,Waldkirchen an der Thaya,2065,3,15,AT,48.93333,15.35 3738,Wallsee,2065,3,15,AT,48.16667,14.71667 3739,Walpersbach,2065,3,15,AT,47.71667,16.23333 3743,Wang,2065,3,15,AT,48.04538,15.02672 3748,Warth,2065,3,15,AT,47.65,16.11667 3750,Wartmannstetten,2065,3,15,AT,47.69359,16.07506 3759,Weidling,2065,3,15,AT,48.291,16.30865 3760,Weigelsdorf,2065,3,15,AT,47.95,16.4 3761,Weikendorf,2065,3,15,AT,48.34438,16.76651 3762,Weikersdorf am Steinfelde,2065,3,15,AT,47.80612,16.14389 3765,Weinburg,2065,3,15,AT,48.11351,15.53295 3768,Weinzierl am Walde,2065,3,15,AT,48.43211,15.4321 3769,Weinzierl bei Krems,2065,3,15,AT,48.4,15.6 3772,Weissenbach an der Triesting,2065,3,15,AT,47.98211,16.03935 3783,Weißenkirchen in der Wachau,2065,3,15,AT,48.3979,15.46931 3774,Weistrach,2065,3,15,AT,48.05,14.58333 3775,Weiten,2065,3,15,AT,48.29564,15.2601 3777,Weitersfeld,2065,3,15,AT,48.78097,15.81345 3779,Weitra,2065,3,15,AT,48.7,14.88333 3803,Wiener Neudorf,2065,3,15,AT,48.08278,16.31384 3804,Wiener Neustadt,2065,3,15,AT,47.80485,16.23196 3805,Wiener Neustadt Stadt,2065,3,15,AT,47.8,16.25 3806,Wienersdorf,2065,3,15,AT,48.00819,16.29169 3808,Wieselburg,2065,3,15,AT,48.13333,15.13333 3812,Wiesmath,2065,3,15,AT,47.61667,16.28333 3817,Wilfersdorf,2065,3,15,AT,48.58333,16.63333 3818,Wilfleinsdorf,2065,3,15,AT,48.01667,16.71667 3819,Wilhelmsburg,2065,3,15,AT,48.10571,15.60539 3820,Willendorf am Steinfelde,2065,3,15,AT,47.78929,16.05686 3824,Wimpassing im Schwarzatale,2065,3,15,AT,47.70295,16.03334 3829,Windhag,2065,3,15,AT,47.97906,14.80245 3830,Windigsteig,2065,3,15,AT,48.76667,15.28333 3832,Winklarn,2065,3,15,AT,48.09135,14.84819 3835,Winzendorf,2065,3,15,AT,47.81154,16.113 3840,Wolfpassing,2065,3,15,AT,48.07785,15.06453 3841,Wolfsbach,2065,3,15,AT,48.06667,14.66667 3845,Wolfsgraben,2065,3,15,AT,48.1587,16.12098 3846,Wolfsthal,2065,3,15,AT,48.13333,17.0 3848,Wolkersdorf im Weinviertel,2065,3,15,AT,48.38333,16.51667 3855,Wöllersdorf,2065,3,15,AT,47.865,16.17119 3856,Wördern,2065,3,15,AT,48.334,16.21016 3851,Wullersdorf,2065,3,15,AT,48.62792,16.10089 3861,Würflach,2065,3,15,AT,47.77648,16.05463 3862,Würmla,2065,3,15,AT,48.25497,15.86031 3863,Ybbs an der Donau,2065,3,15,AT,48.16667,15.08333 3864,Ybbsitz,2065,3,15,AT,47.94745,14.8918 3865,Ysper,2065,3,15,AT,48.28865,15.06131 3869,Zeillern,2065,3,15,AT,48.13029,14.8076 3870,Zeiselmauer,2065,3,15,AT,48.32852,16.17565 3877,Zell-Arzberg,2065,3,15,AT,47.95191,14.79322 3878,Zell-Markt,2065,3,15,AT,47.95878,14.78318 3880,Zellerndorf,2065,3,15,AT,48.69657,15.95841 3885,Ziersdorf,2065,3,15,AT,48.5303,15.92691 3886,Zillingdorf,2065,3,15,AT,47.85,16.33333 3889,Zistersdorf,2065,3,15,AT,48.54252,16.76136 3895,Zöbern,2065,3,15,AT,47.51459,16.13111 3891,Zwentendorf,2065,3,15,AT,48.3453,15.91026 3892,Zwettl Stadt,2065,3,15,AT,48.60726,15.16714 3894,Zwölfaxing,2065,3,15,AT,48.1099,16.46267 1603,Abtenau,2061,5,15,AT,47.56373,13.34599 1611,Adnet,2061,5,15,AT,47.69746,13.13115 1644,Altenmarkt im Pongau,2061,5,15,AT,47.38333,13.41667 1663,Anger,2061,5,15,AT,47.15593,13.10592 1667,Anif,2061,5,15,AT,47.75,13.06667 1672,Anthering,2061,5,15,AT,47.88333,13.01667 1702,Au,2061,5,15,AT,47.7,13.06667 1722,Bad Gastein,2061,5,15,AT,47.11547,13.13467 1726,Bad Hofgastein,2061,5,15,AT,47.17274,13.09871 1758,Bergheim,2061,5,15,AT,47.83333,13.03333 1763,Berndorf bei Salzburg,2061,5,15,AT,47.99532,13.06146 1777,Bischofshofen,2061,5,15,AT,47.41667,13.21667 1789,Bramberg am Wildkogel,2061,5,15,AT,47.26979,12.3385 1808,Bruck an der Großglocknerstraße,2061,5,15,AT,47.28494,12.8231 1821,Burgfried,2061,5,15,AT,47.68004,13.11175 1826,Bürmoos,2061,5,15,AT,47.98343,12.91786 1848,Dienten am Hochkönig,2061,5,15,AT,47.38324,13.00369 1862,Dorfbeuern,2061,5,15,AT,48.01667,13.01667 1863,Dorfgastein,2061,5,15,AT,47.24172,13.10223 1882,Eben im Pongau,2061,5,15,AT,47.4,13.4 1883,Ebenau,2061,5,15,AT,47.79073,13.17527 1896,Eching,2061,5,15,AT,47.97263,12.88786 1929,Elixhausen,2061,5,15,AT,47.86667,13.06667 1933,Elsbethen,2061,5,15,AT,47.76464,13.08104 1953,Esch,2061,5,15,AT,47.8403,13.09223 1955,Eugendorf,2061,5,15,AT,47.86765,13.12609 1958,Faistenau,2061,5,15,AT,47.77767,13.23393 1986,Filzmoos,2061,5,15,AT,47.43333,13.51667 1994,Flachau,2061,5,15,AT,47.34406,13.39148 2007,Forstau,2061,5,15,AT,47.37842,13.55558 2031,Fuschl am See,2061,5,15,AT,47.8,13.3 2072,Georgenberg,2061,5,15,AT,47.63333,13.15 2082,Glanegg,2061,5,15,AT,47.75,13.0 2084,Glasenbach,2061,5,15,AT,47.76667,13.08333 2103,Golling an der Salzach,2061,5,15,AT,47.6,13.16667 2166,Grödig,2061,5,15,AT,47.73833,13.0373 2139,Grossarl,2061,5,15,AT,47.23333,13.2 2140,Grossgmain,2061,5,15,AT,47.72416,12.90851 2202,Habach,2061,5,15,AT,47.81753,13.16252 2225,Hallein,2061,5,15,AT,47.68333,13.1 2226,Hallwang,2061,5,15,AT,47.85,13.08333 2269,Henndorf am Wallersee,2061,5,15,AT,47.9,13.18333 2283,Himmelreich,2061,5,15,AT,47.8,12.98333 2286,Hinterglemm,2061,5,15,AT,47.37685,12.59583 2288,Hintersee,2061,5,15,AT,47.7,13.28333 2304,Hof,2061,5,15,AT,47.35,13.31667 2306,Hof bei Salzburg,2061,5,15,AT,47.81929,13.21488 2325,Hollersbach im Pinzgau,2061,5,15,AT,47.27658,12.42326 2347,Hüttau,2061,5,15,AT,47.4161,13.30775 2349,Hüttschlag,2061,5,15,AT,47.17635,13.23239 2366,Irrsdorf,2061,5,15,AT,47.96667,13.28333 2404,Kaprun,2061,5,15,AT,47.27239,12.75985 2452,Kleinarl,2061,5,15,AT,47.27725,13.31955 2475,Koppl,2061,5,15,AT,47.80808,13.15561 2513,Köstendorf,2061,5,15,AT,47.95,13.2 2489,Krimml,2061,5,15,AT,47.21799,12.17487 2490,Krispl,2061,5,15,AT,47.71667,13.18333 2502,Kuchl,2061,5,15,AT,47.62647,13.1448 2529,Lamprechtshausen,2061,5,15,AT,47.99098,12.95481 2562,Lehen,2061,5,15,AT,47.87083,13.01722 2572,Lend,2061,5,15,AT,47.29856,13.05176 2576,Lengfelden,2061,5,15,AT,47.85,13.05 2581,Leogang,2061,5,15,AT,47.43906,12.76109 2609,Lofer,2061,5,15,AT,47.58475,12.69333 2627,Maishofen,2061,5,15,AT,47.36667,12.8 2639,Maria Alm am Steinernen Meer,2061,5,15,AT,47.40579,12.90121 2653,Mariapfarr,2061,5,15,AT,47.15,13.75 2671,Mattsee,2061,5,15,AT,47.96667,13.1 2681,Mauterndorf,2061,5,15,AT,47.13451,13.67884 2709,Mitterberghütten,2061,5,15,AT,47.4,13.21667 2712,Mitterhofen,2061,5,15,AT,47.38333,12.8 2719,Mittersill,2061,5,15,AT,47.28333,12.48333 2752,Mühlbach am Hochkönig,2061,5,15,AT,47.37746,13.12926 2784,Neualm,2061,5,15,AT,47.69336,13.08758 2799,Neukirchen am Großvenediger,2061,5,15,AT,47.25046,12.27585 2804,Neumarkt am Wallersee,2061,5,15,AT,47.95,13.23333 2820,Niederalm,2061,5,15,AT,47.72872,13.06223 2828,Niedernsill,2061,5,15,AT,47.28333,12.65 2838,Nußdorf am Haunsberg,2061,5,15,AT,47.95944,13.00917 2845,Oberalm,2061,5,15,AT,47.7,13.1 2850,Obergäu,2061,5,15,AT,47.58955,13.17621 2864,Oberndorf bei Salzburg,2061,5,15,AT,47.95,12.93333 2878,Obertrum am See,2061,5,15,AT,47.93722,13.07722 2957,Pfarrwerfen,2061,5,15,AT,47.45729,13.20531 2963,Pichl,2061,5,15,AT,47.28333,12.85 2967,Piesendorf,2061,5,15,AT,47.29077,12.71839 2982,Plainfeld,2061,5,15,AT,47.83333,13.18333 2983,Plankenau,2061,5,15,AT,47.32673,13.19282 3006,Politischer Bezirk Hallein,2061,5,15,AT,47.6,13.3 3041,Politischer Bezirk Salzburg-Umgebung,2061,5,15,AT,47.84019,13.18799 3042,Politischer Bezirk Sankt Johann im Pongau,2061,5,15,AT,47.3,13.3 3051,Politischer Bezirk Tamsweg,2061,5,15,AT,47.15,13.7 3088,Puch bei Hallein,2061,5,15,AT,47.71536,13.09296 3125,Radstadt,2061,5,15,AT,47.38333,13.45 3132,Ramingstein,2061,5,15,AT,47.07462,13.83642 3153,Rauris,2061,5,15,AT,47.22656,12.99459 3169,Reinbach,2061,5,15,AT,47.34673,13.19072 3173,Reitberg,2061,5,15,AT,47.85269,13.1573 3229,Saalbach,2061,5,15,AT,47.39138,12.63642 3230,Saalfelden am Steinernen Meer,2061,5,15,AT,47.42681,12.848 3234,Salzburg,2061,5,15,AT,47.79941,13.04399 3235,Salzburg Stadt,2061,5,15,AT,47.80067,13.04532 3241,Sankt Andrä im Lungau,2061,5,15,AT,47.15,13.78333 3262,Sankt Gilgen,2061,5,15,AT,47.76667,13.36667 3269,Sankt Johann im Pongau,2061,5,15,AT,47.35,13.2 3278,Sankt Leonhard,2061,5,15,AT,47.72587,13.04577 3298,Sankt Margarethen im Lungau,2061,5,15,AT,47.07927,13.69613 3306,Sankt Martin bei Lofer,2061,5,15,AT,47.56667,12.7 3310,Sankt Michael im Lungau,2061,5,15,AT,47.1,13.63333 3345,Sankt Veit im Pongau,2061,5,15,AT,47.33333,13.15 3364,Scheffau am Tennengebirge,2061,5,15,AT,47.58831,13.2202 3375,Schleedorf,2061,5,15,AT,47.95,13.15 3396,Schwarzach im Pongau,2061,5,15,AT,47.32048,13.15171 3432,Seeham,2061,5,15,AT,47.96746,13.07699 3433,Seekirchen am Wallersee,2061,5,15,AT,47.9,13.13333 3435,Seewalchen,2061,5,15,AT,47.9,13.13333 3455,Siezenheim,2061,5,15,AT,47.81529,12.99039 3485,St. Martin of Tennengebirge,2061,5,15,AT,47.465,13.37761 3545,Strasswalchen,2061,5,15,AT,47.97947,13.25535 3553,Strobl,2061,5,15,AT,47.71667,13.48333 3557,Stuhlfelden,2061,5,15,AT,47.28761,12.52755 3570,Tamsweg,2061,5,15,AT,47.12808,13.81102 3575,Taugl,2061,5,15,AT,47.64747,13.20282 3577,Taxach,2061,5,15,AT,47.7261,13.07184 3578,Taxenbach,2061,5,15,AT,47.29116,12.96215 3587,Thalgau,2061,5,15,AT,47.84142,13.25325 3593,Thomatal,2061,5,15,AT,47.06667,13.75 3594,Thumersbach,2061,5,15,AT,47.32952,12.81675 3637,Tweng,2061,5,15,AT,47.18333,13.6 3646,Unken,2061,5,15,AT,47.64966,12.72946 3657,Unternberg,2061,5,15,AT,47.11269,13.74261 3662,Untertauern,2061,5,15,AT,47.3,13.5 3669,Uttendorf,2061,5,15,AT,47.28333,12.56667 3678,Viehhausen,2061,5,15,AT,47.78333,12.98333 3679,Viehhofen,2061,5,15,AT,47.36667,12.73333 3682,Vigaun,2061,5,15,AT,47.66667,13.13333 3711,Wagnergraben,2061,5,15,AT,48.02036,13.02395 3713,Wagrain,2061,5,15,AT,47.33528,13.29889 3723,Walchen,2061,5,15,AT,47.28822,12.68739 3726,Wald im Pinzgau,2061,5,15,AT,47.25,12.23333 3734,Waldprechting,2061,5,15,AT,47.9,13.11667 3740,Wals,2061,5,15,AT,47.78333,12.96667 3741,Walserfeld,2061,5,15,AT,47.79222,12.98 3792,Werfen,2061,5,15,AT,47.47585,13.1902 3793,Werfenweng,2061,5,15,AT,47.46204,13.25582 3868,Zederhaus,2061,5,15,AT,47.1557,13.50576 3874,Zell am See,2061,5,15,AT,47.32556,12.79444 1604,Abtissendorf,2059,6,15,AT,46.99583,15.45639 1610,Admont,2059,6,15,AT,47.57537,14.46075 1613,Aflenz Kurort,2059,6,15,AT,47.54211,15.23898 1616,Aibl,2059,6,15,AT,46.68145,15.22619 1618,Aigen im Ennstal,2059,6,15,AT,47.51667,14.13333 1624,Albersdorf,2059,6,15,AT,47.12166,15.69826 1629,Allerheiligen bei Wildon,2059,6,15,AT,46.91417,15.55444 1631,Allerheiligen im Mürztal,2059,6,15,AT,47.46667,15.4 1636,Altaussee,2059,6,15,AT,47.63844,13.76278 1642,Altenmarkt bei Fürstenfeld,2059,6,15,AT,47.06638,16.04785 1643,Altenmarkt bei Sankt Gallen,2059,6,15,AT,47.72327,14.64838 1661,Andritz,2059,6,15,AT,47.11387,15.42348 1664,Anger,2059,6,15,AT,47.27422,15.69139 1674,Apfelberg,2059,6,15,AT,47.2,14.83333 1677,Ardning,2059,6,15,AT,47.5912,14.36372 1678,Arnfels,2059,6,15,AT,46.67639,15.40306 1682,Arzberg,2059,6,15,AT,47.25,15.51667 1694,Attendorf,2059,6,15,AT,47.00426,15.33897 1707,Auersbach,2059,6,15,AT,47.01667,15.86667 1716,Bad Aussee,2059,6,15,AT,47.60998,13.78243 1717,Bad Blumau,2059,6,15,AT,47.11667,16.05 1721,Bad Gams,2059,6,15,AT,46.87111,15.22472 1723,Bad Gleichenberg,2059,6,15,AT,46.87556,15.90861 1732,Bad Radkersburg,2059,6,15,AT,46.68806,15.98806 1740,Bad Waltersdorf,2059,6,15,AT,47.1696,16.0087 1744,Baierdorf-Umgebung,2059,6,15,AT,47.28511,15.71045 1745,Bairisch Kölldorf,2059,6,15,AT,46.86667,15.93333 1823,Bärnbach,2059,6,15,AT,47.07141,15.12792 1750,Baumgarten bei Gnas,2059,6,15,AT,46.91667,15.76667 1762,Berndorf,2059,6,15,AT,47.41667,15.26667 1772,Bierbaum am Auersbach,2059,6,15,AT,46.82949,15.79237 1775,Birkfeld,2059,6,15,AT,47.35,15.68333 1780,Blaindorf,2059,6,15,AT,47.17498,15.86795 1799,Breitenfeld am Tannenriegel,2059,6,15,AT,46.85,15.63333 1800,Breitenfeld an der Rittschein,2059,6,15,AT,47.03333,15.95 1803,Bretstein,2059,6,15,AT,47.33333,14.41667 1810,Bruck an der Mur,2059,6,15,AT,47.41667,15.28333 1812,Brunn,2059,6,15,AT,46.72944,15.3 1820,Burgau,2059,6,15,AT,47.14268,16.09643 1832,Dechantskirchen,2059,6,15,AT,47.41667,16.01667 1836,Deuchendorf,2059,6,15,AT,47.46593,15.32172 1837,Deutsch Goritz,2059,6,15,AT,46.75083,15.82944 1842,Deutschfeistritz,2059,6,15,AT,47.19852,15.33623 1844,Deutschlandsberg,2059,6,15,AT,46.81528,15.22222 1846,Diemlach,2059,6,15,AT,47.4361,15.2746 1847,Dienersdorf,2059,6,15,AT,47.23979,15.90142 1852,Dietersdorf,2059,6,15,AT,47.2,14.66667 1853,Dietersdorf am Gnasbach,2059,6,15,AT,46.80917,15.81167 1857,Donawitz,2059,6,15,AT,47.36667,15.06667 1858,Donnersbach,2059,6,15,AT,47.46139,14.12972 1879,Dürnstein in der Steiermark,2059,6,15,AT,46.98833,14.39167 1892,Ebersdorf,2059,6,15,AT,47.19852,15.96219 1899,Edelsbach bei Feldbach,2059,6,15,AT,46.98944,15.83694 1900,Edelschrott,2059,6,15,AT,47.02156,15.05266 1901,Edelsgrub,2059,6,15,AT,47.03333,15.6 1903,Edelstauden,2059,6,15,AT,46.98333,15.61667 1908,Eggenberg,2059,6,15,AT,47.07,15.39871 1912,Eggersdorf bei Graz,2059,6,15,AT,47.12338,15.60084 1914,Ehrenhausen,2059,6,15,AT,46.72417,15.58667 1916,Eibiswald,2059,6,15,AT,46.68667,15.24722 1917,Eichberg,2059,6,15,AT,47.38188,15.97356 1919,Eichfeld,2059,6,15,AT,46.72528,15.76806 1922,Eisbach,2059,6,15,AT,47.11667,15.26667 1923,Eisenerz,2059,6,15,AT,47.53333,14.88333 1936,Empersdorf,2059,6,15,AT,46.99892,15.59959 1945,Eppenstein,2059,6,15,AT,47.12833,14.7375 1959,Falkenburg,2059,6,15,AT,47.5,14.08333 1962,Farrach,2059,6,15,AT,47.18333,14.73333 1964,Fehring,2059,6,15,AT,46.94,16.00806 1968,Feistritz bei Knittelfeld,2059,6,15,AT,47.26802,14.89334 1972,Feldbach,2059,6,15,AT,46.95306,15.88833 1975,Feldkirchen bei Graz,2059,6,15,AT,47.01667,15.45 1982,Fernitz,2059,6,15,AT,46.97389,15.50111 1991,Fischbach,2059,6,15,AT,47.44234,15.64972 1995,Fladnitz im Raabtal,2059,6,15,AT,46.99167,15.78528 1996,Flatschach,2059,6,15,AT,47.21667,14.75 2001,Floing,2059,6,15,AT,47.26356,15.7465 2003,Fohnsdorf,2059,6,15,AT,47.2,14.68333 2011,Frannach,2059,6,15,AT,46.91306,15.63361 2013,Frauenberg,2059,6,15,AT,47.42855,15.34206 2017,Freidorf an der Laßnitz,2059,6,15,AT,46.81667,15.25 2018,Freiland bei Deutschlandsberg,2059,6,15,AT,46.83333,15.13333 2023,Friedberg,2059,6,15,AT,47.43333,16.05 2026,Frohnleiten,2059,6,15,AT,47.26667,15.31667 2037,Fürstenfeld,2059,6,15,AT,47.05,16.08333 2039,Gaal,2059,6,15,AT,47.27268,14.67003 2040,Gabersdorf,2059,6,15,AT,46.77722,15.58417 2047,Gallmannsegg,2059,6,15,AT,47.18333,15.06667 2053,Gamlitz,2059,6,15,AT,46.72028,15.55333 2055,Gams bei Hieflau,2059,6,15,AT,47.66667,14.78333 2056,Ganz,2059,6,15,AT,47.6,15.68333 2057,Garanas,2059,6,15,AT,46.76667,15.11667 2061,Gasen,2059,6,15,AT,47.38333,15.56667 2070,Geidorf,2059,6,15,AT,47.08393,15.444 2071,Geistthal,2059,6,15,AT,47.16667,15.16667 2079,Gersdorf an der Feistritz,2059,6,15,AT,47.16667,15.85 2085,Gleinstätten,2059,6,15,AT,46.75361,15.36972 2086,Gleisdorf,2059,6,15,AT,47.10559,15.71011 2090,Glojach,2059,6,15,AT,46.86667,15.66667 2097,Gnas,2059,6,15,AT,46.87306,15.82528 2100,Gniebing,2059,6,15,AT,46.96252,15.85645 2106,Gosdorf,2059,6,15,AT,46.72778,15.7925 2187,Göss,2059,6,15,AT,47.35871,15.10015 2188,Gössenberg,2059,6,15,AT,47.41667,13.81667 2107,Gossendorf,2059,6,15,AT,46.91076,15.93043 2190,Gösting,2059,6,15,AT,47.09788,15.39777 2192,Göttelsberg,2059,6,15,AT,47.21667,15.6 2108,Grabersdorf,2059,6,15,AT,46.84306,15.82472 2109,Grafendorf bei Hartberg,2059,6,15,AT,47.34028,15.9906 2115,Gralla,2059,6,15,AT,46.81404,15.5551 2119,Grambach,2059,6,15,AT,47.01473,15.50407 2120,Gratkorn,2059,6,15,AT,47.13333,15.35 2121,Gratwein,2059,6,15,AT,47.11667,15.31667 2122,Graz,2059,6,15,AT,47.06667,15.45 2123,Graz Stadt,2059,6,15,AT,47.06667,15.43333 2127,Greisdorf,2059,6,15,AT,46.92647,15.21906 2128,Gressenberg,2059,6,15,AT,46.8,15.11667 2131,Gries,2059,6,15,AT,47.06236,15.42421 2165,Gröbming,2059,6,15,AT,47.44272,13.90122 2145,Groß Sankt Florian,2059,6,15,AT,46.82444,15.31861 2156,Großklein,2059,6,15,AT,46.73611,15.44444 2158,Großlobming,2059,6,15,AT,47.18333,14.8 2162,Großsölk,2059,6,15,AT,47.41667,13.96667 2144,Grosssulz,2059,6,15,AT,46.94556,15.49028 2174,Gundersdorf,2059,6,15,AT,46.95,15.23333 2206,Hafendorf,2059,6,15,AT,47.45653,15.31837 2217,Hainersdorf,2059,6,15,AT,47.11506,15.94374 2219,Hainsdorf im Schwarzautal,2059,6,15,AT,46.83583,15.64139 2221,Halbenrain,2059,6,15,AT,46.72194,15.94667 2223,Hall bei Admont,2059,6,15,AT,47.587,14.46372 2236,Hart bei Graz,2059,6,15,AT,47.04311,15.51527 2238,Hartberg,2059,6,15,AT,47.28333,15.96667 2241,Hartl,2059,6,15,AT,47.18333,15.91667 2242,Hartmannsdorf,2059,6,15,AT,47.05461,15.83941 2246,Hatzendorf,2059,6,15,AT,46.97686,16.00107 2250,Haus,2059,6,15,AT,47.40997,13.76724 2251,Haus im Ennstal,2059,6,15,AT,47.41058,13.76759 2255,Hausmannstätten,2059,6,15,AT,46.99111,15.51139 2262,Heiligenkreuz am Waasen,2059,6,15,AT,46.95583,15.58806 2264,Heimschuh,2059,6,15,AT,46.76,15.49306 2268,Hengsberg,2059,6,15,AT,46.86667,15.43333 2277,Hetzendorf,2059,6,15,AT,47.18333,14.68333 2279,Hieflau,2059,6,15,AT,47.60639,14.74503 2284,Hinterberg,2059,6,15,AT,47.36066,15.06951 2291,Hirnsdorf,2059,6,15,AT,47.19167,15.82868 2296,Hitzendorf,2059,6,15,AT,47.03333,15.3 2301,Hochtregist,2059,6,15,AT,47.1,15.13333 2337,Höf,2059,6,15,AT,47.13401,15.49092 2307,Hof bei Straden,2059,6,15,AT,46.8,15.93333 2311,Hofstätten an der Raab,2059,6,15,AT,47.06667,15.73333 2313,Hohenau an der Raab,2059,6,15,AT,47.3,15.55 2318,Hohentauern,2059,6,15,AT,47.43333,14.48333 2322,Hollenegg,2059,6,15,AT,46.79147,15.21345 2341,Hönigsberg,2059,6,15,AT,47.58038,15.64808 2352,Ilz,2059,6,15,AT,47.08649,15.92676 2357,Innere Stadt,2059,6,15,AT,47.0665,15.44051 2365,Irdning,2059,6,15,AT,47.50529,14.10155 2371,Jagerberg,2059,6,15,AT,46.85361,15.73806 2373,Jakomini,2059,6,15,AT,47.05441,15.44984 2380,Johnsbach,2059,6,15,AT,47.53333,14.58333 2382,Judenburg,2059,6,15,AT,47.16667,14.66667 2383,Judendorf,2059,6,15,AT,47.4,15.1 2385,Kaibing,2059,6,15,AT,47.2,15.83333 2386,Kainach bei Voitsberg,2059,6,15,AT,47.13637,15.0953 2387,Kainbach,2059,6,15,AT,47.08333,15.51667 2388,Kaindorf,2059,6,15,AT,47.22537,15.91125 2389,Kaindorf an der Sulm,2059,6,15,AT,46.79248,15.53879 2391,Kalsdorf bei Graz,2059,6,15,AT,46.96528,15.48028 2395,Kalwang,2059,6,15,AT,47.42678,14.75442 2396,Kammern im Liesingtal,2059,6,15,AT,47.39245,14.90407 2397,Kapellen,2059,6,15,AT,47.64784,15.62863 2399,Kapfenberg,2059,6,15,AT,47.44458,15.29331 2400,Kapfenstein,2059,6,15,AT,46.88611,15.97167 2423,Kindberg,2059,6,15,AT,47.5,15.45 2425,Kirchbach in Steiermark,2059,6,15,AT,46.93167,15.66194 2430,Kirchberg an der Raab,2059,6,15,AT,46.98583,15.76694 2436,Kirchenviertel,2059,6,15,AT,47.13124,15.34764 2444,Kitzeck im Sausal,2059,6,15,AT,46.78072,15.45384 2455,Kleinlobming,2059,6,15,AT,47.14954,14.84875 2457,Kleinsöding,2059,6,15,AT,47.0,15.28333 2458,Kleinsölk,2059,6,15,AT,47.39444,13.93944 2463,Klöch,2059,6,15,AT,46.76472,15.96556 2461,Kloster,2059,6,15,AT,46.88333,15.08333 2465,Knittelfeld,2059,6,15,AT,47.21667,14.81667 2466,Kobenz,2059,6,15,AT,47.25,14.85 2508,Köflach,2059,6,15,AT,47.06667,15.08333 2470,Kohlberg,2059,6,15,AT,46.9,15.78333 2471,Kohlschwarz,2059,6,15,AT,47.11667,15.11667 2478,Krakaudorf,2059,6,15,AT,47.18131,14.02061 2479,Krakauhintermühlen,2059,6,15,AT,47.18333,13.98333 2480,Krakauschatten,2059,6,15,AT,47.18333,13.96667 2482,Kraubath an der Mur,2059,6,15,AT,47.3,14.93333 2488,Krieglach,2059,6,15,AT,47.54728,15.56248 2493,Krottendorf,2059,6,15,AT,47.2,15.63333 2494,Krottendorf bei Ligist,2059,6,15,AT,47.01667,15.21667 2498,Krumegg,2059,6,15,AT,47.02111,15.63139 2501,Krusdorf,2059,6,15,AT,46.83944,15.86083 2505,Kulm am Zirbitz,2059,6,15,AT,47.05814,14.48702 2506,Kumberg,2059,6,15,AT,47.16422,15.53261 2522,Labuch,2059,6,15,AT,47.06667,15.66667 2527,Lafnitz,2059,6,15,AT,47.36792,16.01103 2532,Landl,2059,6,15,AT,47.65666,14.73189 2534,Lang,2059,6,15,AT,46.83765,15.50471 2536,Langegg bei Graz,2059,6,15,AT,47.05,15.63333 2543,Langenwang,2059,6,15,AT,47.56667,15.61667 2547,Lannach,2059,6,15,AT,46.94611,15.33722 2552,Lassnitzhöhe,2059,6,15,AT,47.06667,15.58333 2564,Leibnitz,2059,6,15,AT,46.78161,15.53836 2566,Leitendorf,2059,6,15,AT,47.36667,15.08333 2567,Leitersdorf im Raabtal,2059,6,15,AT,46.94182,15.93365 2569,Leitring,2059,6,15,AT,46.76667,15.56667 2573,Lend,2059,6,15,AT,47.08256,15.41589 2578,Leoben,2059,6,15,AT,47.3765,15.09144 2589,Leutschach,2059,6,15,AT,46.66722,15.46889 2593,Liebenau,2059,6,15,AT,47.03333,15.46667 2595,Lieboch,2059,6,15,AT,46.97417,15.3375 2597,Liesingtal,2059,6,15,AT,47.34597,15.01352 2598,Liezen,2059,6,15,AT,47.56667,14.23333 2599,Ligist,2059,6,15,AT,46.99389,15.21083 2624,Lödersdorf,2059,6,15,AT,46.95861,15.94333 2612,Loipersdorf bei Fürstenfeld,2059,6,15,AT,47.0,16.1 2625,Maierdorf,2059,6,15,AT,46.8925,15.84972 2643,Maria Lankowitz,2059,6,15,AT,47.0622,15.06525 2652,Mariahof,2059,6,15,AT,47.1,14.4 2657,Mariatrost,2059,6,15,AT,47.1,15.5 2658,Mariazell,2059,6,15,AT,47.77306,15.31639 2680,Mautern in Steiermark,2059,6,15,AT,47.4,14.83333 2689,Mellach,2059,6,15,AT,46.93333,15.51667 2691,Merkendorf,2059,6,15,AT,46.85722,15.90389 2693,Mettersdorf am Saßbach,2059,6,15,AT,46.80583,15.71111 2694,Michaelerberg,2059,6,15,AT,47.41083,13.89333 2710,Mitterdorf an der Raab,2059,6,15,AT,47.16667,15.6 2711,Mitterdorf im Mürztal,2059,6,15,AT,47.53333,15.51667 2714,Mitterlabill,2059,6,15,AT,46.88917,15.63556 2717,Mitterndorf im Steirischen Salzkammergut,2059,6,15,AT,47.55556,13.93187 2721,Modriach,2059,6,15,AT,46.95,15.05 2747,Mönichwald,2059,6,15,AT,47.44655,15.88275 2728,Mooskirchen,2059,6,15,AT,46.98167,15.27889 2729,Mortantsch,2059,6,15,AT,47.20752,15.57954 2757,Mühldorf bei Feldbach,2059,6,15,AT,46.93861,15.9075 2758,Mühlen,2059,6,15,AT,47.03071,14.50848 2735,Murau,2059,6,15,AT,47.11056,14.16944 2736,Mureck,2059,6,15,AT,46.70806,15.77472 2765,Mürzhofen,2059,6,15,AT,47.48333,15.38333 2766,Mürzsteg,2059,6,15,AT,47.67556,15.49145 2767,Mürzzuschlag,2059,6,15,AT,47.6066,15.67226 2769,Naas,2059,6,15,AT,47.25086,15.59449 2780,Nestelbach bei Graz,2059,6,15,AT,47.06053,15.6114 2781,Nestelbach im Ilztal,2059,6,15,AT,47.08333,15.86667 2786,Neuberg an der Mürz,2059,6,15,AT,47.66423,15.57226 2788,Neudau,2059,6,15,AT,47.17554,16.10184 2808,Neumarkt in Steiermark,2059,6,15,AT,47.07398,14.42728 2817,Neutillmitsch,2059,6,15,AT,46.81667,15.53333 2833,Niederöblarn,2059,6,15,AT,47.47667,14.01937 2829,Niederschöckl,2059,6,15,AT,47.15,15.5 2832,Niederwölz,2059,6,15,AT,47.15126,14.37479 2835,Niklasdorf,2059,6,15,AT,47.38333,15.15 2837,Nitscha,2059,6,15,AT,47.11667,15.75 2842,Obdach,2059,6,15,AT,47.06667,14.68333 2844,Oberaich,2059,6,15,AT,47.4,15.21667 2847,Oberdorf am Hochegg,2059,6,15,AT,46.97861,15.72167 2851,Oberhaag,2059,6,15,AT,46.6869,15.33202 2857,Oberkurzheim,2059,6,15,AT,47.23333,14.58333 2870,Oberpremstätten,2059,6,15,AT,46.97444,15.40444 2872,Oberrettenbach,2059,6,15,AT,47.15,15.8 2876,Oberstorcha,2059,6,15,AT,46.96667,15.8 2880,Obervogau,2059,6,15,AT,46.745,15.58472 2885,Oberweg,2059,6,15,AT,47.15,14.63333 2887,Oberwölz Stadt,2059,6,15,AT,47.20117,14.28321 2888,Oberzeiring,2059,6,15,AT,47.25,14.48333 3897,Öblarn,2059,6,15,AT,47.45938,13.99023 2900,Oppenberg,2059,6,15,AT,47.48333,14.26667 2903,Ortgraben,2059,6,15,AT,47.45,16.05 2908,Osterwitz,2059,6,15,AT,46.85943,15.08998 2917,Pack,2059,6,15,AT,46.97917,14.98417 2918,Paldau,2059,6,15,AT,46.94222,15.79583 2919,Palfau,2059,6,15,AT,47.7,14.8 2925,Parschlug,2059,6,15,AT,47.4809,15.28645 2927,Passail,2059,6,15,AT,47.28333,15.51667 2933,Peggau,2059,6,15,AT,47.2,15.35 2936,Perchau am Sattel,2059,6,15,AT,47.1,14.45 2939,Perlsdorf,2059,6,15,AT,46.91361,15.81417 2941,Pernegg an der Mur,2059,6,15,AT,47.35979,15.34236 2945,Pertlstein,2059,6,15,AT,46.94056,15.96167 2962,Piberegg,2059,6,15,AT,47.09424,15.11658 2965,Pichling bei Köflach,2059,6,15,AT,47.04785,15.07098 2971,Pinggau,2059,6,15,AT,47.44232,16.06713 2974,Pirching am Traubenberg,2059,6,15,AT,46.95,15.6 2976,Pirka,2059,6,15,AT,47.0,15.38333 2977,Pischelsdorf in der Steiermark,2059,6,15,AT,47.17417,15.80572 2978,Pistorf,2059,6,15,AT,46.76667,15.36667 2979,Pitschgau,2059,6,15,AT,46.7,15.26667 2993,Politischer Bezirk Bruck-Mürzzuschlag,2059,6,15,AT,47.4188,15.27512 2994,Politischer Bezirk Deutschlandsberg,2059,6,15,AT,46.75,15.2 3002,Politischer Bezirk Graz-Umgebung,2059,6,15,AT,47.1386,15.38823 3007,Politischer Bezirk Hartberg-Fürstenfeld,2059,6,15,AT,47.27923,15.98373 3021,Politischer Bezirk Leibnitz,2059,6,15,AT,46.79565,15.51849 3022,Politischer Bezirk Leoben,2059,6,15,AT,47.41667,14.91667 3024,Politischer Bezirk Liezen,2059,6,15,AT,47.53521,14.34314 3030,Politischer Bezirk Murau,2059,6,15,AT,47.13333,14.2 3031,Politischer Bezirk Murtal,2059,6,15,AT,47.16964,14.66469 3050,Politischer Bezirk Südoststeiermark,2059,6,15,AT,46.94089,15.88623 3055,Politischer Bezirk Voitsberg,2059,6,15,AT,47.05,15.1 3059,Politischer Bezirk Weiz,2059,6,15,AT,47.3,15.65 3105,Pöllau,2059,6,15,AT,47.3,15.83333 3106,Pöllauberg,2059,6,15,AT,47.31667,15.85 3107,Pöls,2059,6,15,AT,47.21667,14.58333 3065,Poppendorf,2059,6,15,AT,46.85611,15.85639 3076,Preding,2059,6,15,AT,46.85861,15.40972 3084,Proleb,2059,6,15,AT,47.4,15.13333 3086,Pruggern,2059,6,15,AT,47.4237,13.87625 3089,Puch bei Weiz,2059,6,15,AT,47.21667,15.71667 3097,Puntigam,2059,6,15,AT,47.03333,15.43333 3101,Pusterwald,2059,6,15,AT,47.30611,14.37556 3114,Raaba,2059,6,15,AT,47.03333,15.5 3115,Raabau,2059,6,15,AT,46.96278,15.91167 3121,Rabenwald,2059,6,15,AT,47.4,15.9 3122,Rachau,2059,6,15,AT,47.21667,14.9 3128,Ragnitz,2059,6,15,AT,46.83667,15.59278 3134,Ramsau am Dachstein,2059,6,15,AT,47.4215,13.65545 3139,Raning,2059,6,15,AT,46.85,15.81667 3143,Ranten,2059,6,15,AT,47.15949,14.08349 3145,Rassach,2059,6,15,AT,46.86028,15.27 3147,Ratsch an der Weinstraße,2059,6,15,AT,46.68944,15.57111 3148,Ratschendorf,2059,6,15,AT,46.74222,15.81583 3149,Ratten,2059,6,15,AT,47.48333,15.71667 3164,Reichendorf,2059,6,15,AT,47.18922,15.7616 3168,Reifling,2059,6,15,AT,47.13333,14.66667 3179,Rettenegg,2059,6,15,AT,47.52694,15.78104 3182,Retznei,2059,6,15,AT,46.73333,15.56667 3192,Riegersburg,2059,6,15,AT,47.0,15.93028 3193,Ries,2059,6,15,AT,47.08315,15.485 3203,Rohrbach an der Lafnitz,2059,6,15,AT,47.38333,16.0 3212,Rosental an der Kainach,2059,6,15,AT,47.05192,15.122 3226,Röthelstein,2059,6,15,AT,47.31667,15.36667 3214,Rottenmann,2059,6,15,AT,47.51667,14.35 3232,Salla,2059,6,15,AT,47.1,14.96667 3243,Sankt Anna am Aigen,2059,6,15,AT,46.83111,15.97139 3245,Sankt Bartholomä,2059,6,15,AT,47.05457,15.25889 3246,Sankt Blasen,2059,6,15,AT,47.08333,14.3 3250,Sankt Gallen,2059,6,15,AT,47.68631,14.61705 3257,Sankt Georgen an der Stiefing,2059,6,15,AT,46.87333,15.57972 3260,Sankt Georgen ob Judenburg,2059,6,15,AT,47.20744,14.49736 3261,Sankt Georgen ob Murau,2059,6,15,AT,47.1,14.1 3264,Sankt Ilgen,2059,6,15,AT,47.55,15.16667 3265,Sankt Jakob im Walde,2059,6,15,AT,47.46667,15.78333 3266,Sankt Jakob-Breitenau,2059,6,15,AT,47.39229,15.4297 3267,Sankt Johann am Tauern,2059,6,15,AT,47.35,14.46667 3268,Sankt Johann bei Herberstein,2059,6,15,AT,47.2,15.8 3270,Sankt Johann im Saggautal,2059,6,15,AT,46.70389,15.40278 3272,Sankt Johann in der Haide,2059,6,15,AT,47.2808,16.02579 3273,Sankt Josef (Weststeiermark),2059,6,15,AT,46.90917,15.33639 3274,Sankt Katharein an der Laming,2059,6,15,AT,47.47069,15.16319 3275,Sankt Kathrein am Hauenstein,2059,6,15,AT,47.48943,15.69414 3276,Sankt Kathrein am Offenegg,2059,6,15,AT,47.3,15.58333 3277,Sankt Lambrecht,2059,6,15,AT,47.06667,14.3 3280,Sankt Leonhard,2059,6,15,AT,47.06924,15.45784 3284,Sankt Lorenzen am Wechsel,2059,6,15,AT,47.44153,15.95498 3285,Sankt Lorenzen bei Knittelfeld,2059,6,15,AT,47.25078,14.89549 3286,Sankt Lorenzen bei Scheifling,2059,6,15,AT,47.14556,14.40583 3287,Sankt Lorenzen im Mürztal,2059,6,15,AT,47.48333,15.36667 3289,Sankt Marein bei Graz,2059,6,15,AT,47.01583,15.68389 3290,Sankt Marein bei Knittelfeld,2059,6,15,AT,47.27396,14.86085 3291,Sankt Marein bei Neumarkt,2059,6,15,AT,47.06591,14.42908 3292,Sankt Marein im Mürztal,2059,6,15,AT,47.46667,15.36667 3294,Sankt Margarethen an der Raab,2059,6,15,AT,47.05,15.75 3296,Sankt Margarethen bei Knittelfeld,2059,6,15,AT,47.21667,14.86667 3300,Sankt Martin,2059,6,15,AT,47.44667,15.2849 3303,Sankt Martin am Grimming,2059,6,15,AT,47.48873,13.98105 3308,Sankt Martin im Sulmtal,2059,6,15,AT,46.75611,15.29722 3311,Sankt Michael in Obersteiermark,2059,6,15,AT,47.33839,15.01784 3312,Sankt Nikolai im Sausal,2059,6,15,AT,46.82111,15.45194 3313,Sankt Nikolai im Sölktal,2059,6,15,AT,47.31667,14.05 3314,Sankt Nikolai ob Draßling,2059,6,15,AT,46.80889,15.65083 3316,Sankt Oswald bei Plankenwarth,2059,6,15,AT,47.08701,15.27703 3317,Sankt Oswald ob Eibiswald,2059,6,15,AT,46.70833,15.14667 3321,Sankt Peter,2059,6,15,AT,47.05,15.46667 3323,Sankt Peter am Kammersberg,2059,6,15,AT,47.18706,14.18464 3324,Sankt Peter am Ottersbach,2059,6,15,AT,46.79778,15.75917 3325,Sankt Peter im Sulmtal,2059,6,15,AT,46.75,15.25 3327,Sankt Peter ob Judenburg,2059,6,15,AT,47.18417,14.58639 3328,Sankt Peter-Freienstein,2059,6,15,AT,47.38333,15.01667 3331,Sankt Radegund bei Graz,2059,6,15,AT,47.18172,15.49192 3333,Sankt Ruprecht an der Raab,2059,6,15,AT,47.15336,15.66256 3335,Sankt Stefan im Rosental,2059,6,15,AT,46.90389,15.71 3336,Sankt Stefan ob Leoben,2059,6,15,AT,47.31672,14.97831 3337,Sankt Stefan ob Stainz,2059,6,15,AT,46.92861,15.25889 3339,Sankt Ulrich am Waasen,2059,6,15,AT,46.93333,15.53333 3342,Sankt Veit am Vogau,2059,6,15,AT,46.74048,15.64217 3352,Schachen bei Vorau,2059,6,15,AT,47.3801,15.85816 3412,Schäffern,2059,6,15,AT,47.47771,16.10956 3367,Scheifling,2059,6,15,AT,47.15044,14.41278 3371,Schladming,2059,6,15,AT,47.39289,13.68699 3415,Schöder,2059,6,15,AT,47.18333,14.1 3389,Schrems bei Frohnleiten,2059,6,15,AT,47.28109,15.35932 3393,Schwanberg,2059,6,15,AT,46.75833,15.20833 3399,Schwarzau im Schwarzautal,2059,6,15,AT,46.87886,15.66421 3425,Sebersdorf,2059,6,15,AT,47.1865,15.9936 3426,Seckau,2059,6,15,AT,47.26667,14.78333 3436,Seggauberg,2059,6,15,AT,46.76667,15.51667 3438,Seiersberg,2059,6,15,AT,47.0,15.4 3442,Selzthal,2059,6,15,AT,47.54988,14.31201 3444,Semriach,2059,6,15,AT,47.21667,15.4 3450,Siegersdorf bei Herberstein,2059,6,15,AT,47.2,15.78333 3462,Sinabelkirchen,2059,6,15,AT,47.102,15.82795 3466,Soboth,2059,6,15,AT,46.68139,15.07833 3564,Söchau,2059,6,15,AT,47.03333,16.01667 3565,Södingberg,2059,6,15,AT,47.10703,15.17169 3473,Spatenhof,2059,6,15,AT,46.9625,15.36111 3474,Spielberg bei Knittelfeld,2059,6,15,AT,47.21667,14.78333 3475,Spielfeld,2059,6,15,AT,46.70556,15.63722 3478,Spital am Semmering,2059,6,15,AT,47.61345,15.75096 3488,Stadl an der Mur,2059,6,15,AT,47.08333,13.96667 3493,Stainach,2059,6,15,AT,47.53343,14.10872 3494,Stainz,2059,6,15,AT,46.89444,15.26722 3495,Stainz bei Straden,2059,6,15,AT,46.82444,15.89222 3498,Stallhof,2059,6,15,AT,46.88333,15.28333 3499,Stallhofen,2059,6,15,AT,47.05,15.21667 3500,Stambach,2059,6,15,AT,47.33333,15.93333 3505,Stattegg,2059,6,15,AT,47.13333,15.41667 3510,Stein,2059,6,15,AT,46.99778,16.08694 3522,Stenzengreith,2059,6,15,AT,47.2,15.51667 3531,Stiwoll,2059,6,15,AT,47.1,15.21667 3537,Straden,2059,6,15,AT,46.80917,15.86806 3538,Strallegg,2059,6,15,AT,47.41165,15.72534 3547,Straß in Steiermark,2059,6,15,AT,46.72722,15.62444 3542,Strassengel,2059,6,15,AT,47.11573,15.33288 3549,Straßgang,2059,6,15,AT,47.03333,15.4 3555,Stubenberg,2059,6,15,AT,47.2446,15.80027 3556,Studenzen,2059,6,15,AT,47.00583,15.75417 3563,Sulztal an der Weinstraße,2059,6,15,AT,46.68333,15.55 3576,Tauplitz,2059,6,15,AT,47.56005,14.01293 3585,Teufenbach,2059,6,15,AT,47.1287,14.35913 3586,Thal,2059,6,15,AT,47.07644,15.36052 3596,Thörl,2059,6,15,AT,47.51952,15.22276 3600,Tieschen,2059,6,15,AT,46.78611,15.94222 3601,Tillmitsch,2059,6,15,AT,46.81195,15.51679 3602,Tillmitsch Links der Laßnitz,2059,6,15,AT,46.80955,15.52394 3606,Traboch,2059,6,15,AT,47.37705,14.98647 3608,Trahütten,2059,6,15,AT,46.825,15.15694 3617,Trautmannsdorf in Oststeiermark,2059,6,15,AT,46.8753,15.88451 3619,Treglwang,2059,6,15,AT,47.47458,14.59083 3622,Trieben,2059,6,15,AT,47.48574,14.48744 3623,Triebendorf,2059,6,15,AT,47.11667,14.23333 3626,Trofaiach,2059,6,15,AT,47.42524,15.00681 3628,Trössing,2059,6,15,AT,46.81667,15.81667 3635,Turnau,2059,6,15,AT,47.55776,15.33739 3899,Übelbach,2059,6,15,AT,47.22534,15.23615 3901,Übersbach,2059,6,15,AT,47.02318,16.05517 3645,Ungerdorf,2059,6,15,AT,47.08333,15.66667 3647,Unterauersbach,2059,6,15,AT,46.86556,15.77028 3648,Unterbergla,2059,6,15,AT,46.80746,15.31516 3651,Unterfladnitz,2059,6,15,AT,47.18333,15.66667 3655,Unterlamm,2059,6,15,AT,46.97694,16.06389 3659,Unterpremstätten,2059,6,15,AT,46.96472,15.40417 3667,Utschtal,2059,6,15,AT,47.4,15.2 3673,Vasoldsberg,2059,6,15,AT,47.01634,15.55835 3674,Veitsch,2059,6,15,AT,47.57815,15.4945 3693,Vogau,2059,6,15,AT,46.73187,15.60837 3694,Voitsberg,2059,6,15,AT,47.04445,15.15313 3698,Vorau,2059,6,15,AT,47.40548,15.88754 3701,Vordernberg,2059,6,15,AT,47.48809,14.99436 3710,Wagna,2059,6,15,AT,46.76682,15.55906 3712,Wagnitz,2059,6,15,AT,46.98333,15.46667 3725,Wald am Schoberpaß,2059,6,15,AT,47.44936,14.67567 3742,Waltendorf,2059,6,15,AT,47.06667,15.46667 3745,Wartberg,2059,6,15,AT,47.52717,15.48095 3766,Weinburg am Saßbach,2059,6,15,AT,46.75361,15.72111 3781,Weißenbach bei Liezen,2059,6,15,AT,47.56667,14.21667 3784,Weißkirchen in Steiermark,2059,6,15,AT,47.15,14.73333 3780,Weiz,2059,6,15,AT,47.21667,15.61667 3795,Werndorf,2059,6,15,AT,46.92417,15.49083 3796,Wernersdorf,2059,6,15,AT,46.71592,15.20718 3799,Wettmannstätten,2059,6,15,AT,46.83056,15.38722 3800,Wetzelsdorf,2059,6,15,AT,47.05293,15.39923 3807,Wies,2059,6,15,AT,46.72028,15.27194 3813,Wildalpen,2059,6,15,AT,47.65,14.98333 3815,Wildon,2059,6,15,AT,46.88333,15.51667 3834,Winklern bei Oberwölz,2059,6,15,AT,47.2,14.23333 3843,Wolfsberg im Schwarzautal,2059,6,15,AT,46.84389,15.65889 3858,Wörschach,2059,6,15,AT,47.55,14.15 3860,Wörth an der Lafnitz,2059,6,15,AT,47.21368,16.08081 3852,Wundschuh,2059,6,15,AT,46.92639,15.45111 3881,Zeltweg,2059,6,15,AT,47.18333,14.75 3882,Zerlach,2059,6,15,AT,46.94593,15.65093 3883,Zettling,2059,6,15,AT,46.9522,15.4342 3884,Zeutschach,2059,6,15,AT,47.06667,14.36667 1600,Abfaltersbach,2064,7,15,AT,46.75715,12.52828 1601,Absam,2064,7,15,AT,47.29572,11.50593 1607,Achenkirch,2064,7,15,AT,47.52659,11.70559 1620,Ainet,2064,7,15,AT,46.86603,12.68968 1625,Aldrans,2064,7,15,AT,47.25,11.45 1634,Alpbach,2064,7,15,AT,47.39878,11.94373 1652,Amlach,2064,7,15,AT,46.81639,12.76361 1653,Ampass,2064,7,15,AT,47.26251,11.46226 1655,Amras,2064,7,15,AT,47.25,11.41667 1662,Angath,2064,7,15,AT,47.50758,12.06513 1665,Angerberg,2064,7,15,AT,47.50563,12.03119 1669,Anras,2064,7,15,AT,46.77389,12.56083 1683,Arzl,2064,7,15,AT,47.28333,11.43333 1684,Arzl im Pitztal,2064,7,15,AT,47.20712,10.76261 1687,Aschau,2064,7,15,AT,47.26667,11.9 1688,Aschau im Zillertal,2064,7,15,AT,47.26613,11.89536 1709,Aurach,2064,7,15,AT,47.41223,12.42734 1713,Außervillgraten,2064,7,15,AT,46.7875,12.43139 1714,Axams,2064,7,15,AT,47.23111,11.27892 1727,Bad Häring,2064,7,15,AT,47.51071,12.11912 1748,Barwies,2064,7,15,AT,47.3,10.96667 1751,Baumkirchen,2064,7,15,AT,47.3,11.56667 1766,Berwang,2064,7,15,AT,47.40807,10.74735 1769,Biberwier,2064,7,15,AT,47.38333,10.9 1770,Bichlbach,2064,7,15,AT,47.42033,10.79042 1774,Birgitz,2064,7,15,AT,47.23536,11.29922 1791,Brandenberg,2064,7,15,AT,47.49053,11.89459 1797,Breitenbach am Inn,2064,7,15,AT,47.47829,11.97372 1802,Breitenwang,2064,7,15,AT,47.48713,10.7342 1804,Brixen im Thale,2064,7,15,AT,47.45,12.25 1805,Brixlegg,2064,7,15,AT,47.42942,11.87794 1807,Bruck am Ziller,2064,7,15,AT,47.38998,11.85124 1817,Buch in Tirol,2064,7,15,AT,47.37447,11.754 1831,Debant,2064,7,15,AT,46.83333,12.81667 1872,Dölsach,2064,7,15,AT,46.82833,12.84528 1880,Ebbs,2064,7,15,AT,47.63333,12.21667 1881,Eben am Achensee,2064,7,15,AT,47.4138,11.76138 1913,Ehenbichl,2064,7,15,AT,47.46667,10.7 1915,Ehrwald,2064,7,15,AT,47.4,10.91667 1928,Elbigenalp,2064,7,15,AT,47.29041,10.43607 1930,Ellbögen,2064,7,15,AT,47.16667,11.45 1931,Ellmau,2064,7,15,AT,47.51378,12.29937 1932,Elmen,2064,7,15,AT,47.34039,10.54318 1937,Endach,2064,7,15,AT,47.56796,12.15603 1946,Erl,2064,7,15,AT,47.68333,12.18333 1951,Erpfendorf,2064,7,15,AT,47.58333,12.46667 1979,Fendels,2064,7,15,AT,47.0539,10.67777 1984,Fieberbrunn,2064,7,15,AT,47.47626,12.54347 1985,Fiecht,2064,7,15,AT,47.35,11.7 1987,Finkenberg,2064,7,15,AT,47.15279,11.82212 1993,Fiss,2064,7,15,AT,47.05714,10.61747 1998,Flaurling,2064,7,15,AT,47.29143,11.12319 1999,Fliess,2064,7,15,AT,47.11667,10.61667 2000,Flirsch,2064,7,15,AT,47.15,10.4 2004,Forchach,2064,7,15,AT,47.41667,10.58333 2025,Fritzens,2064,7,15,AT,47.30535,11.5895 2034,Fügen,2064,7,15,AT,47.347,11.84939 2035,Fügenberg,2064,7,15,AT,47.3521,11.84173 2028,Fulpmes,2064,7,15,AT,47.15202,11.34922 2050,Gallzein,2064,7,15,AT,47.36807,11.77159 2051,Galtür,2064,7,15,AT,46.96667,10.18333 2076,Gerlos,2064,7,15,AT,47.22464,12.03012 2077,Gerlosberg,2064,7,15,AT,47.21667,11.93333 2096,Gnadenwald,2064,7,15,AT,47.31667,11.56667 2101,Going,2064,7,15,AT,47.51332,12.33164 2194,Götzens,2064,7,15,AT,47.23606,11.31154 2116,Gramais,2064,7,15,AT,47.26667,10.53333 2164,Grän,2064,7,15,AT,47.5,10.55 2132,Gries am Brenner,2064,7,15,AT,47.03849,11.48131 2133,Gries im Sellrain,2064,7,15,AT,47.19554,11.15619 2137,Grins,2064,7,15,AT,47.14034,10.51409 2138,Grinzens,2064,7,15,AT,47.22927,11.25318 2170,Gschnitz,2064,7,15,AT,47.04469,11.35089 2215,Haiming,2064,7,15,AT,47.25,10.88333 2220,Hainzenberg,2064,7,15,AT,47.21788,11.90034 2224,Hall in Tirol,2064,7,15,AT,47.28333,11.51667 2237,Hart im Zillertal,2064,7,15,AT,47.35106,11.86476 2335,Häselgehr,2064,7,15,AT,47.31667,10.5 2245,Hatting,2064,7,15,AT,47.2787,11.16838 2265,Heinfels,2064,7,15,AT,46.75,12.45 2266,Heiterwang,2064,7,15,AT,47.45,10.75 2289,Hippach,2064,7,15,AT,47.20435,11.86523 2298,Hochfilzen,2064,7,15,AT,47.46667,12.61667 2338,Höfen,2064,7,15,AT,47.46667,10.68333 2326,Holzgau,2064,7,15,AT,47.26045,10.34419 2328,Hopfgarten im Brixental,2064,7,15,AT,47.4498,12.15659 2329,Hopfgarten in Defereggen,2064,7,15,AT,46.91917,12.53639 2345,Hötting,2064,7,15,AT,47.26815,11.36868 2350,Igls,2064,7,15,AT,47.23127,11.41018 2353,Imst,2064,7,15,AT,47.24504,10.73974 2354,Imsterberg,2064,7,15,AT,47.20517,10.69605 2359,Innervillgraten,2064,7,15,AT,46.81194,12.37472 2360,Innsbruck,2064,7,15,AT,47.26266,11.39454 2361,Innsbruck Stadt,2064,7,15,AT,47.28433,11.37706 2364,Inzing,2064,7,15,AT,47.2737,11.19751 2368,Ischgl,2064,7,15,AT,47.01257,10.29179 2369,Itter,2064,7,15,AT,47.46667,12.13333 2376,Jenbach,2064,7,15,AT,47.39173,11.77245 2378,Jerzens,2064,7,15,AT,47.1512,10.74686 2379,Jochberg,2064,7,15,AT,47.3792,12.41807 2384,Jungholz,2064,7,15,AT,47.57409,10.44723 2393,Kaltenbach,2064,7,15,AT,47.28333,11.86667 2401,Kapfing,2064,7,15,AT,47.33333,11.85 2403,Kappl,2064,7,15,AT,47.06667,10.38333 2406,Karres,2064,7,15,AT,47.21667,10.78333 2407,Karrösten,2064,7,15,AT,47.2254,10.76561 2408,Kartitsch,2064,7,15,AT,46.72889,12.50083 2413,Kauns,2064,7,15,AT,47.07822,10.69219 2417,Kematen in Tirol,2064,7,15,AT,47.25,11.26667 2431,Kirchberg in Tirol,2064,7,15,AT,47.44539,12.31602 2433,Kirchbichl,2064,7,15,AT,47.51743,12.09629 2435,Kirchdorf in Tirol,2064,7,15,AT,47.55626,12.44511 2443,Kitzbühel,2064,7,15,AT,47.44637,12.39215 2472,Kolsass,2064,7,15,AT,47.3,11.63333 2473,Kolsassberg,2064,7,15,AT,47.2815,11.65289 2512,Kössen,2064,7,15,AT,47.6699,12.40545 2481,Kramsach,2064,7,15,AT,47.44312,11.87545 2503,Kufstein,2064,7,15,AT,47.58333,12.16667 2507,Kundl,2064,7,15,AT,47.46667,11.98333 2526,Ladis,2064,7,15,AT,47.07459,10.64949 2530,Landeck,2064,7,15,AT,47.13988,10.56593 2623,Längenfeld,2064,7,15,AT,47.07398,10.96951 2548,Lans,2064,7,15,AT,47.23833,11.43139 2557,Lavant,2064,7,15,AT,46.79889,12.83806 2560,Lechaschau,2064,7,15,AT,47.48804,10.70652 2565,Leisach,2064,7,15,AT,46.8125,12.74861 2587,Lermoos,2064,7,15,AT,47.40358,10.8807 2588,Leutasch,2064,7,15,AT,47.3689,11.14404 2596,Lienz,2064,7,15,AT,46.8289,12.76903 2655,Mariastein,2064,7,15,AT,47.52772,12.05479 2656,Mariatal,2064,7,15,AT,47.44788,11.8721 2667,Matrei am Brenner,2064,7,15,AT,47.12794,11.45176 2668,Matrei in Osttirol,2064,7,15,AT,47.0,12.53333 2677,Maurach,2064,7,15,AT,47.42124,11.75305 2682,Mayrhofen,2064,7,15,AT,47.16667,11.86667 2683,Medraz,2064,7,15,AT,47.14256,11.34287 2699,Mieders,2064,7,15,AT,47.16667,11.38333 2700,Mieming,2064,7,15,AT,47.3,10.98333 2703,Mils bei Imst,2064,7,15,AT,47.20616,10.67485 2704,Mils bei Solbad Hall,2064,7,15,AT,47.28333,11.53333 2715,Mitterndorf,2064,7,15,AT,47.57728,12.16968 2750,Mötz,2064,7,15,AT,47.28333,10.95 2751,Mühlau,2064,7,15,AT,47.28333,11.4 2753,Mühlbachl,2064,7,15,AT,47.13333,11.45 2762,Münster,2064,7,15,AT,47.42164,11.83356 2737,Musau,2064,7,15,AT,47.53195,10.67339 2738,Mutters,2064,7,15,AT,47.23333,11.38333 2770,Namlos,2064,7,15,AT,47.35,10.66667 2771,Nassereith,2064,7,15,AT,47.31667,10.83333 2773,Natters,2064,7,15,AT,47.23414,11.37342 2774,Nauders,2064,7,15,AT,46.88859,10.50126 2779,Nesselwängle,2064,7,15,AT,47.48333,10.61667 2815,Neustift im Stubaital,2064,7,15,AT,47.11667,11.31667 2821,Niederau,2064,7,15,AT,47.45,12.08333 2822,Niederbreitenbach,2064,7,15,AT,47.53333,12.08333 2826,Niederndorf,2064,7,15,AT,47.65,12.21667 2836,Nikolsdorf,2064,7,15,AT,46.78583,12.91333 2846,Oberau,2064,7,15,AT,47.44336,12.04891 2856,Oberhofen im Inntal,2064,7,15,AT,47.3,11.08333 2858,Oberlienz,2064,7,15,AT,46.84722,12.73139 2860,Obermieming,2064,7,15,AT,47.3,10.98333 2861,Obernberg am Brenner,2064,7,15,AT,47.01667,11.41667 2866,Oberndorf in Tirol,2064,7,15,AT,47.5,12.38333 2869,Oberperfuss,2064,7,15,AT,47.24451,11.24755 2877,Obertilliach,2064,7,15,AT,46.71056,12.61444 2889,Obsteig,2064,7,15,AT,47.3,10.93333 2893,Oetz,2064,7,15,AT,47.2,10.9 3898,Ötztal-Bahnhof,2064,7,15,AT,47.23333,10.85 2929,Patsch,2064,7,15,AT,47.20527,11.4151 2949,Pettnau,2064,7,15,AT,47.29204,11.15962 2950,Pettneu,2064,7,15,AT,47.14595,10.33655 2953,Pfaffenhofen,2064,7,15,AT,47.3,11.08333 2958,Pflach,2064,7,15,AT,47.51667,10.71667 2959,Pfons,2064,7,15,AT,47.14201,11.46071 2960,Pfunds,2064,7,15,AT,46.96667,10.55 2961,Pians,2064,7,15,AT,47.13486,10.51237 2969,Pill,2064,7,15,AT,47.32352,11.68018 3011,Politischer Bezirk Imst,2064,7,15,AT,47.08333,10.86667 3012,Politischer Bezirk Innsbruck Land,2064,7,15,AT,47.2,11.33333 3015,Politischer Bezirk Kitzbühel,2064,7,15,AT,47.43333,12.38333 3019,Politischer Bezirk Kufstein,2064,7,15,AT,47.5,12.03333 3020,Politischer Bezirk Landeck,2064,7,15,AT,47.12575,10.56679 3023,Politischer Bezirk Lienz,2064,7,15,AT,46.9,12.5 3038,Politischer Bezirk Reutte,2064,7,15,AT,47.41667,10.55 3046,Politischer Bezirk Schwaz,2064,7,15,AT,47.26667,11.76667 3064,Polling in Tirol,2064,7,15,AT,47.28333,11.15 3072,Pradl,2064,7,15,AT,47.26539,11.4152 3087,Prutz,2064,7,15,AT,47.08333,10.66667 3124,Radfeld,2064,7,15,AT,47.44806,11.91424 3135,Ramsau im Zillertal,2064,7,15,AT,47.20383,11.87545 3138,Ranggen,2064,7,15,AT,47.25727,11.2112 3150,Rattenberg,2064,7,15,AT,47.43941,11.89407 3175,Reith bei Kitzbühel,2064,7,15,AT,47.46667,12.35 3176,Reith bei Seefeld,2064,7,15,AT,47.3,11.2 3177,Reith im Alpbachtal,2064,7,15,AT,47.41694,11.87785 3180,Rettenschöss,2064,7,15,AT,47.65718,12.26872 3184,Reutte,2064,7,15,AT,47.48333,10.71667 3186,Ried im Oberinntal,2064,7,15,AT,47.05,10.65 3188,Ried im Zillertal,2064,7,15,AT,47.3,11.86667 3194,Rietz,2064,7,15,AT,47.28593,11.03075 3196,Rinn,2064,7,15,AT,47.25,11.5 3206,Rohrberg,2064,7,15,AT,47.23333,11.91667 3209,Roppen,2064,7,15,AT,47.21667,10.81667 3218,Rum,2064,7,15,AT,47.28333,11.45 3271,Sankt Johann in Tirol,2064,7,15,AT,47.5233,12.4232 3338,Sankt Ulrich am Pillersee,2064,7,15,AT,47.5274,12.57239 3346,Sankt Veit in Defereggen,2064,7,15,AT,46.92722,12.42972 3351,Sautens,2064,7,15,AT,47.2,10.86667 3360,Scharnitz,2064,7,15,AT,47.38899,11.26455 3363,Schattwald,2064,7,15,AT,47.51427,10.46143 3365,Scheffau am Wilden Kaiser,2064,7,15,AT,47.52943,12.25139 3372,Schlaiten,2064,7,15,AT,46.87944,12.65417 3379,Schlitters,2064,7,15,AT,47.38045,11.83888 3418,Schönberg im Stubaital,2064,7,15,AT,47.18333,11.41667 3422,Schönwies,2064,7,15,AT,47.19665,10.65742 3404,Schwaz,2064,7,15,AT,47.35169,11.71014 3408,Schwendau,2064,7,15,AT,47.19753,11.85897 3409,Schwendt,2064,7,15,AT,47.63182,12.39266 3411,Schwoich,2064,7,15,AT,47.546,12.14049 3427,See,2064,7,15,AT,47.08333,10.46667 3431,Seefeld in Tirol,2064,7,15,AT,47.33016,11.18786 3441,Sellrain,2064,7,15,AT,47.21667,11.21667 3446,Serfaus,2064,7,15,AT,47.04018,10.60339 3459,Sillian,2064,7,15,AT,46.75278,12.42111 3460,Silz,2064,7,15,AT,47.26667,10.93333 3463,Sistrans,2064,7,15,AT,47.23333,11.45 3566,Sölden,2064,7,15,AT,46.96667,11.0 3567,Söll,2064,7,15,AT,47.50378,12.19221 3482,St Anton am Arlberg,2064,7,15,AT,47.1275,10.26372 3501,Stams,2064,7,15,AT,47.27603,10.98315 3502,Stans,2064,7,15,AT,47.36667,11.71667 3503,Stanz bei Landeck,2064,7,15,AT,47.14758,10.5534 3504,Stanzach,2064,7,15,AT,47.38333,10.56667 3508,Steeg,2064,7,15,AT,47.24393,10.29436 3513,Steinach am Brenner,2064,7,15,AT,47.08333,11.46667 3540,Strass im Zillertal,2064,7,15,AT,47.39556,11.81966 3541,Strassen,2064,7,15,AT,46.75389,12.48417 3552,Strengen,2064,7,15,AT,47.12589,10.46199 3558,Stumm,2064,7,15,AT,47.29052,11.88755 3559,Stummerberg,2064,7,15,AT,47.28333,11.91667 3571,Tannheim,2064,7,15,AT,47.49934,10.51641 3572,Tarrenz,2064,7,15,AT,47.26667,10.76667 3580,Telfes im Stubai,2064,7,15,AT,47.16667,11.36667 3581,Telfs,2064,7,15,AT,47.30707,11.06817 3582,Terfens,2064,7,15,AT,47.32355,11.64388 3589,Thaur,2064,7,15,AT,47.29476,11.47529 3595,Thurn,2064,7,15,AT,46.85056,12.76861 3604,Tobadill,2064,7,15,AT,47.12513,10.51404 3624,Trins,2064,7,15,AT,47.08333,11.41667 3625,Tristach,2064,7,15,AT,46.81611,12.78972 3632,Tulfes,2064,7,15,AT,47.25806,11.53333 3636,Tux,2064,7,15,AT,47.15559,11.72872 3639,Uderns,2064,7,15,AT,47.31667,11.86667 3643,Umhausen,2064,7,15,AT,47.13503,10.92826 3656,Unterlangkampfen,2064,7,15,AT,47.55,12.1 3658,Unterperfuss,2064,7,15,AT,47.26667,11.25 3663,Untertilliach,2064,7,15,AT,46.70346,12.67758 3671,Vals,2064,7,15,AT,47.04507,11.53281 3690,Vils,2064,7,15,AT,47.55,10.63333 3691,Virgen,2064,7,15,AT,47.00159,12.45661 3695,Volders,2064,7,15,AT,47.28333,11.56667 3696,Voldöpp,2064,7,15,AT,47.44469,11.88343 3708,Völs,2064,7,15,AT,47.25,11.33333 3697,Vomp,2064,7,15,AT,47.33333,11.68333 3700,Vorderhornbach,2064,7,15,AT,47.37009,10.53947 3702,Vorderthiersee,2064,7,15,AT,47.58333,12.1 3720,Waidring,2064,7,15,AT,47.58333,12.56667 3724,Walchsee,2064,7,15,AT,47.65163,12.31868 3853,Wängle,2064,7,15,AT,47.48658,10.68995 3751,Wattenberg,2064,7,15,AT,47.28333,11.6 3752,Wattens,2064,7,15,AT,47.29419,11.5907 3753,Weer,2064,7,15,AT,47.30375,11.64498 3754,Weerberg,2064,7,15,AT,47.29841,11.66592 3770,Weissach,2064,7,15,AT,47.57091,12.16255 3771,Weissenbach am Lech,2064,7,15,AT,47.44162,10.64071 3790,Wenns,2064,7,15,AT,47.16667,10.73333 3798,Westendorf,2064,7,15,AT,47.43208,12.21406 3811,Wiesing,2064,7,15,AT,47.40486,11.79708 3814,Wildermieming,2064,7,15,AT,47.31667,11.01667 3816,Wildschönau,2064,7,15,AT,47.40619,12.03784 3821,Wilten,2064,7,15,AT,47.25829,11.38808 3857,Wörgl,2064,7,15,AT,47.48906,12.06174 3867,Zams,2064,7,15,AT,47.15844,10.5897 3871,Zell,2064,7,15,AT,47.58333,12.15 3875,Zell am Ziller,2064,7,15,AT,47.23333,11.88333 3879,Zellberg,2064,7,15,AT,47.23333,11.85 3888,Zirl,2064,7,15,AT,47.2741,11.23961 3896,Zöblen,2064,7,15,AT,47.50772,10.47971 1605,Abwinden,2058,4,15,AT,48.25903,14.42625 1609,Adlwang,2058,4,15,AT,47.99245,14.21742 1612,Afiesl,2058,4,15,AT,48.58229,14.12777 1615,Ahorn,2058,4,15,AT,48.52382,14.17408 1617,Aichkirchen,2058,4,15,AT,48.10944,13.79158 1619,Aigen im Mühlkreis,2058,4,15,AT,48.64578,13.97109 1621,Aistersheim,2058,4,15,AT,48.1868,13.74175 1622,Alberndorf in der Riedmark,2058,4,15,AT,48.40607,14.41441 1626,Alkoven,2058,4,15,AT,48.28753,14.10748 1630,Allerheiligen im Mühlkreis,2058,4,15,AT,48.30215,14.65061 1632,Allhaming,2058,4,15,AT,48.15246,14.17022 1637,Altenberg bei Linz,2058,4,15,AT,48.37284,14.35029 1640,Altenfelden,2058,4,15,AT,48.48555,13.9698 1645,Altheim,2058,4,15,AT,48.25154,13.23406 1648,Altlichtenberg,2058,4,15,AT,48.36001,14.25845 1651,Altmünster,2058,4,15,AT,47.90219,13.76415 1654,Ampflwang,2058,4,15,AT,48.08333,13.56667 1660,Andorf,2058,4,15,AT,48.3713,13.57412 1670,Ansfelden,2058,4,15,AT,48.20969,14.29004 1680,Arnreit,2058,4,15,AT,48.52513,13.99487 1685,Aschach an der Donau,2058,4,15,AT,48.36458,14.02044 1686,Aschach an der Steyr,2058,4,15,AT,48.01312,14.33544 1693,Asten,2058,4,15,AT,48.21941,14.41784 1695,Attersee,2058,4,15,AT,47.91646,13.53953 1696,Attnang,2058,4,15,AT,48.01667,13.71667 1697,Attnang-Puchheim,2058,4,15,AT,48.00833,13.71667 1698,Atzbach,2058,4,15,AT,48.08364,13.70347 1700,Atzesberg,2058,4,15,AT,48.53959,13.86936 1704,Au an der Traun,2058,4,15,AT,48.1802,14.11248 1705,Audorf,2058,4,15,AT,48.2181,14.27931 1710,Aurach am Hongar,2058,4,15,AT,47.95182,13.67291 1711,Aurolzmünster,2058,4,15,AT,48.24834,13.45533 1715,Bachmanning,2058,4,15,AT,48.13104,13.79436 1724,Bad Goisern,2058,4,15,AT,47.64252,13.61609 1725,Bad Hall,2058,4,15,AT,48.03832,14.20773 1728,Bad Ischl,2058,4,15,AT,47.71109,13.61893 1729,Bad Kreuzen,2058,4,15,AT,48.26737,14.80648 1730,Bad Leonfelden,2058,4,15,AT,48.52047,14.29459 1735,Bad Schallerbach,2058,4,15,AT,48.22999,13.91925 1741,Bad Zell,2058,4,15,AT,48.34906,14.66945 1754,Berg,2058,4,15,AT,48.29278,14.24778 1756,Bergern,2058,4,15,AT,48.16752,14.11153 1757,Bergham,2058,4,15,AT,48.28182,14.23141 1760,Bernardin,2058,4,15,AT,48.16042,14.00834 1792,Brandln,2058,4,15,AT,48.1451,13.99504 1794,Braunau am Inn,2058,4,15,AT,48.25628,13.04343 1793,Braunau Neustadt,2058,4,15,AT,48.24606,13.03583 1819,Buchkirchen,2058,4,15,AT,48.22427,14.02242 1822,Burgfried,2058,4,15,AT,48.5199,14.2957 1835,Desselbrunn,2058,4,15,AT,48.02145,13.77027 1845,Dickerldorf,2058,4,15,AT,48.17676,14.05705 1849,Diesseits,2058,4,15,AT,48.29216,13.43546 1850,Dietach,2058,4,15,AT,48.09018,14.41647 1851,Dietachdorf,2058,4,15,AT,48.08364,14.42874 1860,Doppl,2058,4,15,AT,48.24811,14.25416 1873,Dörfl,2058,4,15,AT,48.01245,13.65472 1876,Dürnau,2058,4,15,AT,47.9971,13.64459 1885,Ebensee,2058,4,15,AT,47.80716,13.779 1891,Eberschwang,2058,4,15,AT,48.15504,13.56194 1893,Eberstalzell,2058,4,15,AT,48.04392,13.98319 1905,Edt bei Lambach,2058,4,15,AT,48.11667,13.88333 1906,Eferding,2058,4,15,AT,48.30866,14.02233 1921,Eidenberg,2058,4,15,AT,48.39439,14.23313 1939,Engerwitzdorf,2058,4,15,AT,48.34507,14.44204 1940,Enns,2058,4,15,AT,48.21346,14.47612 1974,Feldkirchen an der Donau,2058,4,15,AT,48.34524,14.05134 1992,Fisching,2058,4,15,AT,48.22301,14.42771 2006,Fornach,2058,4,15,AT,48.02277,13.42941 2008,Frankenburg,2058,4,15,AT,48.06844,13.49065 2010,Frankenmarkt,2058,4,15,AT,47.98333,13.41667 2019,Freindorf,2058,4,15,AT,48.2257,14.2951 2020,Freistadt,2058,4,15,AT,48.51103,14.50453 2042,Gaflenz,2058,4,15,AT,47.89511,14.72477 2048,Gallneukirchen,2058,4,15,AT,48.35363,14.41604 2049,Gallspach,2058,4,15,AT,48.20992,13.80981 2054,Gampern,2058,4,15,AT,47.98877,13.5543 2059,Garsten,2058,4,15,AT,48.0224,14.40747 2062,Gaspoltshofen,2058,4,15,AT,48.14324,13.73643 2066,Gaumberg,2058,4,15,AT,48.28085,14.26935 2068,Geboltskirchen,2058,4,15,AT,48.15338,13.6336 2092,Gmunden,2058,4,15,AT,47.91839,13.79933 2102,Goldwörth,2058,4,15,AT,48.32664,14.10112 2105,Gosau,2058,4,15,AT,47.58417,13.53447 2117,Gramastetten,2058,4,15,AT,48.38028,14.19185 2125,Grein,2058,4,15,AT,48.22862,14.85884 2134,Grieskirchen,2058,4,15,AT,48.23333,13.83333 2143,Grossraming,2058,4,15,AT,47.88333,14.55 2167,Grünau im Almtal,2058,4,15,AT,47.85493,13.95573 2169,Grünburg,2058,4,15,AT,47.97234,14.26472 2171,Gschwandt,2058,4,15,AT,47.93515,13.84569 2175,Gunskirchen,2058,4,15,AT,48.13333,13.95 2179,Gutau,2058,4,15,AT,48.41724,14.61285 2199,Haag,2058,4,15,AT,48.27063,14.26875 2201,Haag am Hausruck,2058,4,15,AT,48.18423,13.64373 2208,Hagenberg im Mühlkreis,2058,4,15,AT,48.36788,14.51689 2210,Haibach im Mühlkreis,2058,4,15,AT,48.44429,14.34411 2211,Haid,2058,4,15,AT,48.20477,14.25107 2212,Haiden,2058,4,15,AT,47.7179,13.56906 2214,Haidl,2058,4,15,AT,48.17267,14.05297 2227,Handenberg,2058,4,15,AT,48.13356,13.00751 2234,Hart,2058,4,15,AT,48.26526,14.25691 2239,Hartheim,2058,4,15,AT,48.28079,14.11426 2240,Hartkirchen,2058,4,15,AT,48.36349,14.00422 2243,Haselbach,2058,4,15,AT,48.25308,13.05614 2244,Haslach an der Mühl,2058,4,15,AT,48.5757,14.03984 2267,Hellmonsödt,2058,4,15,AT,48.43333,14.3 2276,Herzogsdorf,2058,4,15,AT,48.43011,14.1128 2297,Hochburg-Ach,2058,4,15,AT,48.13001,12.87735 2300,Hochpoint,2058,4,15,AT,48.16139,14.03838 2303,Hof,2058,4,15,AT,47.86667,13.31667 2309,Hofkirchen im Traunkreis,2058,4,15,AT,48.14312,14.37776 2327,Holzhausen,2058,4,15,AT,48.22296,14.09683 2343,Hörsching,2058,4,15,AT,48.22627,14.17786 2358,Innerschwand,2058,4,15,AT,47.83333,13.4 2363,Inzersdorf im Kremstal,2058,4,15,AT,47.92808,14.08104 2392,Kaltenbach,2058,4,15,AT,47.70618,13.60914 2410,Katsdorf,2058,4,15,AT,48.31791,14.47432 2415,Kematen an der Krems,2058,4,15,AT,48.1115,14.19391 2432,Kirchberg ob der Donau,2058,4,15,AT,48.4444,13.93805 2434,Kirchdorf an der Krems,2058,4,15,AT,47.90558,14.12228 2438,Kirchschlag bei Linz,2058,4,15,AT,48.41149,14.27656 2445,Klaffer am Hochficht,2058,4,15,AT,48.69544,13.88131 2511,Königswiesen,2058,4,15,AT,48.40453,14.83824 2474,Kopfing im Innkreis,2058,4,15,AT,48.43991,13.65841 2485,Kremsdorf,2058,4,15,AT,48.20031,14.26249 2486,Kremsmünster,2058,4,15,AT,48.0529,14.12919 2492,Kronstorf,2058,4,15,AT,48.14324,14.46307 2518,Laab,2058,4,15,AT,48.2611,13.05418 2520,Laahen,2058,4,15,AT,48.17192,14.00637 2521,Laakirchen,2058,4,15,AT,47.98188,13.82166 2528,Lambach,2058,4,15,AT,48.09276,13.87453 2542,Langenstein,2058,4,15,AT,48.252,14.47655 2545,Langholzfeld,2058,4,15,AT,48.24297,14.24772 2554,Laussa,2058,4,15,AT,47.95,14.45 2571,Lembach im Mühlkreis,2058,4,15,AT,48.49517,13.89513 2577,Lenzing,2058,4,15,AT,47.97326,13.60846 2582,Leonding,2058,4,15,AT,48.27965,14.2533 2583,Leonstein,2058,4,15,AT,47.89666,14.23124 2591,Lichtenegg,2058,4,15,AT,48.15,14.0 2603,Linz,2058,4,15,AT,48.30639,14.28611 2604,Linz Stadt,2058,4,15,AT,48.3,14.28333 2616,Losenstein,2058,4,15,AT,47.92428,14.43672 2619,Luftenberg an der Donau,2058,4,15,AT,48.27462,14.41303 2632,Manning,2058,4,15,AT,48.08851,13.66682 2637,Marchtrenk,2058,4,15,AT,48.19275,14.11394 2645,Maria Neustift,2058,4,15,AT,47.93333,14.6 2648,Maria Schmolln,2058,4,15,AT,48.1382,13.21981 2670,Mattighofen,2058,4,15,AT,48.10732,13.15081 2676,Mauerkirchen,2058,4,15,AT,48.19173,13.13338 2684,Meggenhofen,2058,4,15,AT,48.18017,13.79582 2685,Mehrnbach,2058,4,15,AT,48.20809,13.43525 2695,Michaelnbach,2058,4,15,AT,48.28788,13.83144 2697,Micheldorf in Oberösterreich,2058,4,15,AT,47.87764,14.13357 2713,Mitterkirchen im Machland,2058,4,15,AT,48.18795,14.69593 2720,Mittertreffling,2058,4,15,AT,48.33868,14.36505 2723,Molln,2058,4,15,AT,47.88723,14.25819 2724,Mondsee,2058,4,15,AT,47.85648,13.34908 2727,Moosdorf,2058,4,15,AT,48.04492,12.98902 2754,Mühldorf,2058,4,15,AT,47.89689,13.95049 2733,Munderfing,2058,4,15,AT,48.07039,13.18162 2763,Münzbach,2058,4,15,AT,48.26737,14.71009 2764,Münzkirchen,2058,4,15,AT,48.48333,13.56667 2768,Naarn im Machlande,2058,4,15,AT,48.22553,14.60838 2772,Natternbach,2058,4,15,AT,48.3973,13.74965 2775,Nebelberg,2058,4,15,AT,48.62854,13.84629 2785,Neubau,2058,4,15,AT,48.21901,14.19301 2791,Neue Heimat,2058,4,15,AT,48.24565,13.04172 2796,Neuhofen an der Krems,2058,4,15,AT,48.13866,14.22764 2798,Neukirchen,2058,4,15,AT,47.87502,13.71111 2800,Neukirchen am Walde,2058,4,15,AT,48.40584,13.78158 2801,Neukirchen an der Vöckla,2058,4,15,AT,48.04053,13.5376 2802,Neukirchen bei Lambach,2058,4,15,AT,48.1,13.81667 2806,Neumarkt im Hausruckkreis,2058,4,15,AT,48.2728,13.72836 2807,Neumarkt im Mühlkreis,2058,4,15,AT,48.42818,14.48444 2818,Neuzeug,2058,4,15,AT,48.05,14.33333 2827,Niederneukirchen,2058,4,15,AT,48.16093,14.33965 2830,Niederstraß,2058,4,15,AT,48.01398,13.72956 2831,Niederthalheim,2058,4,15,AT,48.09901,13.7687 2840,Nöstlbach,2058,4,15,AT,48.1666,14.24609 2852,Oberhaid,2058,4,15,AT,48.17593,14.01495 2853,Oberhart,2058,4,15,AT,48.18333,14.05 2855,Oberhofen am Irrsee,2058,4,15,AT,47.95,13.3 2862,Obernberg am Inn,2058,4,15,AT,48.32133,13.33427 2865,Oberndorf bei Schwanenstadt,2058,4,15,AT,48.05559,13.75677 2868,Oberneukirchen,2058,4,15,AT,48.46404,14.22275 2883,Oberwang,2058,4,15,AT,47.86667,13.43333 2890,Oedt,2058,4,15,AT,48.21335,14.21013 2892,Oepping,2058,4,15,AT,48.60284,13.94586 2895,Offenhausen,2058,4,15,AT,48.15,13.83333 2897,Ohlsdorf,2058,4,15,AT,47.96073,13.79145 2902,Ort im Innkreis,2058,4,15,AT,48.31654,13.43362 2907,Ostermiething,2058,4,15,AT,48.04636,12.82937 2911,Ottenschlag im Mühlkreis,2058,4,15,AT,48.46632,14.38471 2912,Ottensheim,2058,4,15,AT,48.33246,14.17425 2915,Ottnang am Hausruck,2058,4,15,AT,48.09568,13.65841 2916,Pabneukirchen,2058,4,15,AT,48.32367,14.81747 2920,Palting,2058,4,15,AT,48.01542,13.12712 2926,Pasching,2058,4,15,AT,48.25931,14.20369 2930,Pattigham,2058,4,15,AT,48.15521,13.48443 2934,Pennewang,2058,4,15,AT,48.13333,13.85 2938,Perg,2058,4,15,AT,48.25,14.63333 2946,Perwang am Grabensee,2058,4,15,AT,48.00692,13.083 2948,Pettenbach,2058,4,15,AT,47.96016,14.01692 2952,Peuerbach,2058,4,15,AT,48.3453,13.77205 2954,Pfaffing,2058,4,15,AT,48.018,13.47507 2956,Pfarrkirchen bei Bad Hall,2058,4,15,AT,48.03046,14.19914 2964,Pichl bei Wels,2058,4,15,AT,48.18515,13.89882 2966,Pierbach,2058,4,15,AT,48.34815,14.75575 2973,Pinsdorf,2058,4,15,AT,47.9298,13.77068 2981,Pitzenberg,2058,4,15,AT,48.07361,13.72484 2984,Plesching,2058,4,15,AT,48.32099,14.33802 2990,Politischer Bezirk Braunau am Inn,2058,4,15,AT,48.11203,13.08924 2996,Politischer Bezirk Eferding,2058,4,15,AT,48.32168,13.98453 2999,Politischer Bezirk Freistadt,2058,4,15,AT,48.47006,14.64844 3000,Politischer Bezirk Gmunden,2058,4,15,AT,47.75,13.75 3003,Politischer Bezirk Grieskirchen,2058,4,15,AT,48.26667,13.8 3014,Politischer Bezirk Kirchdorf an der Krems,2058,4,15,AT,47.84346,14.21346 3026,Politischer Bezirk Linz-Land,2058,4,15,AT,48.16667,14.3 3037,Politischer Bezirk Perg,2058,4,15,AT,48.25724,14.71796 3039,Politischer Bezirk Ried im Innkreis,2058,4,15,AT,48.23333,13.46667 3040,Politischer Bezirk Rohrbach,2058,4,15,AT,48.55739,13.96926 3047,Politischer Bezirk Schärding,2058,4,15,AT,48.43333,13.6 3049,Politischer Bezirk Steyr-Land,2058,4,15,AT,47.9,14.46667 3053,Politischer Bezirk Urfahr-Umgebung,2058,4,15,AT,48.42512,14.27451 3056,Politischer Bezirk Vöcklabruck,2058,4,15,AT,48.00313,13.65772 3110,Pötting,2058,4,15,AT,48.28325,13.77059 3073,Pram,2058,4,15,AT,48.23536,13.60579 3074,Prambachkirchen,2058,4,15,AT,48.31711,13.90449 3075,Pramet,2058,4,15,AT,48.14295,13.48752 3077,Pregarten,2058,4,15,AT,48.35488,14.53217 3091,Puchenau,2058,4,15,AT,48.31214,14.23614 3093,Puchheim,2058,4,15,AT,48.0,13.71667 3094,Puchlkirchen am Trattberg,2058,4,15,AT,48.04478,13.57198 3095,Pucking,2058,4,15,AT,48.18886,14.18824 3112,Pühret,2058,4,15,AT,48.03488,13.72252 3113,Raab,2058,4,15,AT,48.35243,13.64691 3126,Raffelstetten,2058,4,15,AT,48.23759,14.40273 3131,Rainbach im Mühlkreis,2058,4,15,AT,48.55758,14.47449 3142,Ranshofen,2058,4,15,AT,48.23308,13.01571 3158,Redleiten,2058,4,15,AT,48.08138,13.46894 3159,Redlham,2058,4,15,AT,48.02443,13.74738 3160,Regau,2058,4,15,AT,47.99078,13.68811 3163,Reichenau im Mühlkreis,2058,4,15,AT,48.45704,14.34875 3166,Reichenthal,2058,4,15,AT,48.54286,14.38471 3167,Reichraming,2058,4,15,AT,47.88333,14.45 3174,Reiterndorf,2058,4,15,AT,47.70364,13.62914 3185,Ried im Innkreis,2058,4,15,AT,48.21123,13.48855 3187,Ried im Traunkreis,2058,4,15,AT,48.02581,14.07452 3189,Ried in der Riedmark,2058,4,15,AT,48.27114,14.52796 3200,Rohr im Kremstal,2058,4,15,AT,48.06864,14.19306 3205,Rohrbach-Berg,2058,4,15,AT,48.57275,13.98834 3208,Roitham,2058,4,15,AT,48.02432,13.82166 3217,Rufling,2058,4,15,AT,48.27839,14.21674 3228,Rüstorf,2058,4,15,AT,48.04326,13.78982 3222,Rutzenham,2058,4,15,AT,48.06076,13.71883 3236,Sammersdorf,2058,4,15,AT,48.18091,14.1667 3237,Sankt Aegidi,2058,4,15,AT,48.47929,13.73737 3248,Sankt Dionysen,2058,4,15,AT,48.22439,14.25485 3249,Sankt Florian,2058,4,15,AT,48.20568,14.37836 3252,Sankt Georgen am Fillmannsbach,2058,4,15,AT,48.1256,13.00811 3255,Sankt Georgen an der Gusen,2058,4,15,AT,48.27183,14.44951 3258,Sankt Georgen bei Obernberg am Inn,2058,4,15,AT,48.29193,13.3332 3259,Sankt Georgen im Attergau,2058,4,15,AT,47.93595,13.48306 3263,Sankt Gotthard im Mühlkreis,2058,4,15,AT,48.3802,14.13185 3283,Sankt Lorenz,2058,4,15,AT,47.8324,13.34839 3299,Sankt Marien,2058,4,15,AT,48.14805,14.27759 3302,Sankt Martin,2058,4,15,AT,48.23091,14.26781 3307,Sankt Martin im Mühlkreis,2058,4,15,AT,48.41553,14.03821 3315,Sankt Oswald bei Freistadt,2058,4,15,AT,48.5,14.58333 3322,Sankt Peter am Hart,2058,4,15,AT,48.25268,13.09613 3340,Sankt Ulrich bei Steyr,2058,4,15,AT,48.02116,14.43685 3347,Sankt Wolfgang im Salzkammergut,2058,4,15,AT,47.73932,13.44666 3348,Sarleinsbach,2058,4,15,AT,48.54525,13.90491 3350,Sattledt,2058,4,15,AT,48.07372,14.05478 3354,Schafwiesen,2058,4,15,AT,48.16667,14.06667 3355,Schalchen,2058,4,15,AT,48.11924,13.15716 3356,Schalchham,2058,4,15,AT,47.99825,13.67188 3358,Schardenberg,2058,4,15,AT,48.52058,13.49791 3413,Schärding,2058,4,15,AT,48.45294,13.43722 3414,Schärding Vorstadt,2058,4,15,AT,48.45195,13.43946 3361,Scharnstein,2058,4,15,AT,47.90426,13.96135 3368,Schenkenfelden,2058,4,15,AT,48.50273,14.36188 3370,Schildorn,2058,4,15,AT,48.14564,13.46314 3373,Schlatt,2058,4,15,AT,48.07177,13.78904 3377,Schlierbach,2058,4,15,AT,47.93636,14.12018 3380,Schlüsslberg,2058,4,15,AT,48.21861,13.87161 3419,Schöndorf,2058,4,15,AT,48.00167,13.6588 3420,Schönering,2058,4,15,AT,48.29838,14.16103 3423,Schörfling,2058,4,15,AT,47.94544,13.60408 3394,Schwanenstadt,2058,4,15,AT,48.05537,13.77505 3407,Schweinbach,2058,4,15,AT,48.34033,14.42247 3410,Schwertberg,2058,4,15,AT,48.2734,14.58474 3434,Seewalchen,2058,4,15,AT,47.95246,13.58382 3454,Sierning,2058,4,15,AT,48.04343,14.30935 3469,Sonnberg im Mühlkreis,2058,4,15,AT,48.4608,14.31167 3477,Spital am Pyhrn,2058,4,15,AT,47.66487,14.34014 3489,Stadl-Hausruck,2058,4,15,AT,48.08255,13.85213 3490,Stadl-Paura,2058,4,15,AT,48.08333,13.86667 3491,Stadl-Traun,2058,4,15,AT,48.07963,13.8614 3515,Steinbach am Attersee,2058,4,15,AT,47.83087,13.54613 3518,Steinerkirchen an der Traun,2058,4,15,AT,48.07911,13.95796 3520,Steinfeld,2058,4,15,AT,47.71254,13.6326 3521,Steinhaus,2058,4,15,AT,48.11614,14.0189 3527,Steyr,2058,4,15,AT,48.04274,14.42127 3528,Steyr Stadt,2058,4,15,AT,48.03333,14.41667 3529,Steyregg,2058,4,15,AT,48.28513,14.36995 3543,Strassham,2058,4,15,AT,48.28348,14.14524 3569,Taiskirchen im Innkreis,2058,4,15,AT,48.26468,13.57318 3574,Taufkirchen an der Trattnach,2058,4,15,AT,48.24731,13.74767 3583,Ternberg,2058,4,15,AT,47.94518,14.3587 3588,Thalheim bei Wels,2058,4,15,AT,48.15,14.03333 3599,Tiefgraben,2058,4,15,AT,47.87385,13.30591 3603,Timelkam,2058,4,15,AT,48.00394,13.6076 3607,Tragwein,2058,4,15,AT,48.33314,14.62237 3613,Traun,2058,4,15,AT,48.22656,14.23459 3614,Traunkirchen,2058,4,15,AT,47.84462,13.78939 3640,Ufer,2058,4,15,AT,48.24842,14.49977 3641,Ulrichsberg,2058,4,15,AT,48.67498,13.91049 3644,Ungenach,2058,4,15,AT,48.04756,13.61472 3650,Untereisenfeld,2058,4,15,AT,48.168,14.041 3653,Unterjosefstal,2058,4,15,AT,48.29216,14.57525 3668,Uttendorf,2058,4,15,AT,48.15887,13.1218 3670,Utzenaich,2058,4,15,AT,48.27622,13.46091 3677,Viechtwang,2058,4,15,AT,47.91531,13.96345 3703,Vöcklabruck,2058,4,15,AT,48.00279,13.65652 3704,Vöcklamarkt,2058,4,15,AT,48.0025,13.48383 3699,Vorchdorf,2058,4,15,AT,48.00388,13.92122 3714,Wagrain,2058,4,15,AT,48.00503,13.67163 3715,Wagram,2058,4,15,AT,48.23828,14.22996 3722,Waizenkirchen,2058,4,15,AT,48.33018,13.85754 3730,Walding,2058,4,15,AT,48.35209,14.1576 3731,Waldkirchen am Wesen,2058,4,15,AT,48.44059,13.82174 3733,Waldneukirchen,2058,4,15,AT,47.99854,14.25879 3735,Waldzell,2058,4,15,AT,48.13562,13.42701 3736,Wallern an der Trattnach,2058,4,15,AT,48.23296,13.9462 3746,Wartberg an der Krems,2058,4,15,AT,47.98909,14.11863 3747,Wartberg ob der Aist,2058,4,15,AT,48.34792,14.50796 3755,Weibern,2058,4,15,AT,48.18333,13.7 3763,Weilbach,2058,4,15,AT,48.27725,13.37165 3782,Weißenkirchen im Attergau,2058,4,15,AT,47.94964,13.41843 3773,Weisskirchen an der Traun,2058,4,15,AT,48.16202,14.12395 3778,Weitersfelden,2058,4,15,AT,48.4773,14.72546 3785,Wels,2058,4,15,AT,48.16667,14.03333 3786,Wels Stadt,2058,4,15,AT,48.16082,14.02164 3787,Wels-Land,2058,4,15,AT,48.1166,13.96637 3788,Wendling,2058,4,15,AT,48.23182,13.66622 3789,Weng im Innkreis,2058,4,15,AT,48.23508,13.17801 3797,Wernstein am Inn,2058,4,15,AT,48.50802,13.461 3801,Weyer,2058,4,15,AT,47.85717,14.66409 3802,Weyregg,2058,4,15,AT,47.90294,13.57193 3822,Wimpassing,2058,4,15,AT,48.16667,13.98333 3825,Wimsbach,2058,4,15,AT,48.06667,13.9 3827,Windhaag bei Freistadt,2058,4,15,AT,48.58774,14.56186 3828,Windhaag bei Perg,2058,4,15,AT,48.28582,14.68091 3831,Windischgarsten,2058,4,15,AT,47.72223,14.32755 3836,Wippenham,2058,4,15,AT,48.2225,13.3792 3837,Wispl,2058,4,15,AT,48.16488,13.99753 3839,Wolfern,2058,4,15,AT,48.08278,14.37201 3844,Wolfsegg am Hausruck,2058,4,15,AT,48.10669,13.67274 3872,Zell am Moos,2058,4,15,AT,47.9,13.31667 3873,Zell am Pettenfirst,2058,4,15,AT,48.08009,13.59936 3876,Zell an der Pram,2058,4,15,AT,48.31625,13.62923 3893,Zwettl an der Rodl,2058,4,15,AT,48.46552,14.27133 1856,Donaustadt,2060,9,15,AT,48.2333,16.46002 1963,Favoriten,2060,9,15,AT,48.16116,16.38233 2002,Floridsdorf,2060,9,15,AT,48.25,16.4 2272,Hernals,2060,9,15,AT,48.23333,16.26667 2280,Hietzing,2060,9,15,AT,48.18623,16.2965 2356,Innere Stadt,2060,9,15,AT,48.20906,16.37135 2686,Meidling,2060,9,15,AT,48.16667,16.33333 2909,Ottakring,2060,9,15,AT,48.21667,16.3 3461,Simmering,2060,9,15,AT,48.18333,16.43333 3681,Vienna,2060,9,15,AT,48.20849,16.37208 1623,Alberschwende,2063,8,15,AT,47.45025,9.83152 1635,Altach,2063,8,15,AT,47.35,9.65 1658,Andelsbuch,2063,8,15,AT,47.41167,9.89326 1701,Au,2063,8,15,AT,47.32176,9.98067 1712,Ausserbraz,2063,8,15,AT,47.14875,9.90066 1747,Bartholomäberg,2063,8,15,AT,47.08333,9.9 1749,Batschuns,2063,8,15,AT,47.28306,9.65 1767,Bezau,2063,8,15,AT,47.38478,9.90139 1773,Bildstein,2063,8,15,AT,47.45,9.76667 1779,Bizau,2063,8,15,AT,47.36906,9.92839 1783,Blons,2063,8,15,AT,47.22327,9.83414 1784,Bludenz,2063,8,15,AT,47.15476,9.82255 1785,Bludesch,2063,8,15,AT,47.2,9.73306 1790,Brand,2063,8,15,AT,47.10083,9.73722 1795,Bregenz,2063,8,15,AT,47.50311,9.7471 1827,Bürs,2063,8,15,AT,47.14972,9.8 1828,Bürserberg,2063,8,15,AT,47.14644,9.77736 1829,Dalaas,2063,8,15,AT,47.12446,9.99104 1830,Damüls,2063,8,15,AT,47.28034,9.89164 1861,Doren,2063,8,15,AT,47.49278,9.87972 1865,Dornbirn,2063,8,15,AT,47.41427,9.74195 1874,Düns,2063,8,15,AT,47.22353,9.71663 1875,Dünserberg,2063,8,15,AT,47.22752,9.72372 1907,Egg,2063,8,15,AT,47.43154,9.89762 1918,Eichenberg,2063,8,15,AT,47.53333,9.78333 1973,Feldkirch,2063,8,15,AT,47.23306,9.6 2012,Frastanz,2063,8,15,AT,47.21735,9.62995 2016,Fraxern,2063,8,15,AT,47.31498,9.67391 2032,Fußach,2063,8,15,AT,47.47933,9.66278 2045,Gaißau,2063,8,15,AT,47.46667,9.6 2060,Gaschurn,2063,8,15,AT,46.98584,10.02702 2184,Göfis,2063,8,15,AT,47.23356,9.63458 2195,Götzis,2063,8,15,AT,47.33306,9.63306 2151,Großdorf,2063,8,15,AT,47.43361,9.91528 2229,Hard,2063,8,15,AT,47.48306,9.68306 2293,Hirschegg,2063,8,15,AT,47.34813,10.17137 2295,Hittisau,2063,8,15,AT,47.45781,9.95962 2336,Höchst,2063,8,15,AT,47.45934,9.6405 2316,Hohenems,2063,8,15,AT,47.36667,9.68306 2320,Hohenweiler,2063,8,15,AT,47.58333,9.78333 2342,Hörbranz,2063,8,15,AT,47.55,9.75 2355,Innerbraz,2063,8,15,AT,47.15,9.91667 2419,Kennelbach,2063,8,15,AT,47.48306,9.76667 2447,Klaus,2063,8,15,AT,47.30913,9.64678 2464,Klösterle,2063,8,15,AT,47.13333,10.08333 2468,Koblach,2063,8,15,AT,47.33306,9.6 2496,Krumbach,2063,8,15,AT,47.48306,9.93583 2537,Langen,2063,8,15,AT,47.51667,9.81667 2538,Langenegg,2063,8,15,AT,47.46922,9.89744 2555,Lauterach,2063,8,15,AT,47.47572,9.72941 2559,Lech,2063,8,15,AT,47.20797,10.14184 2602,Lingenau,2063,8,15,AT,47.45033,9.92166 2607,Lochau,2063,8,15,AT,47.53333,9.75 2615,Lorüns,2063,8,15,AT,47.13306,9.85 2617,Ludesch,2063,8,15,AT,47.2,9.78306 2621,Lustenau,2063,8,15,AT,47.42642,9.65851 2739,Mäder,2063,8,15,AT,47.35,9.61667 2687,Meiningen,2063,8,15,AT,47.29891,9.57862 2690,Mellau,2063,8,15,AT,47.35034,9.88149 2707,Mittelberg,2063,8,15,AT,47.35127,10.17197 2741,Möggers,2063,8,15,AT,47.56667,9.81667 2734,Muntlix,2063,8,15,AT,47.28296,9.65939 2778,Nenzing,2063,8,15,AT,47.18436,9.70539 2841,Nüziders,2063,8,15,AT,47.16667,9.8 2989,Politischer Bezirk Bludenz,2063,8,15,AT,47.15144,9.82452 2991,Politischer Bezirk Bregenz,2063,8,15,AT,47.42069,9.91989 2995,Politischer Bezirk Dornbirn,2063,8,15,AT,47.38349,9.7494 2997,Politischer Bezirk Feldkirch,2063,8,15,AT,47.25535,9.5836 3127,Raggal,2063,8,15,AT,47.21082,9.83688 3140,Rankweil,2063,8,15,AT,47.27108,9.64308 3183,Reuthe,2063,8,15,AT,47.37113,9.89481 3191,Riefensberg,2063,8,15,AT,47.50137,9.95838 3195,Riezlern,2063,8,15,AT,47.35778,10.18759 3224,Röns,2063,8,15,AT,47.21667,9.7 3227,Röthis,2063,8,15,AT,47.29332,9.65484 3244,Sankt Anton im Montafon,2063,8,15,AT,47.11667,9.86667 3251,Sankt Gallenkirch,2063,8,15,AT,47.02102,9.97335 3349,Satteins,2063,8,15,AT,47.21667,9.66667 3378,Schlins,2063,8,15,AT,47.2,9.7 3381,Schnepfau,2063,8,15,AT,47.35206,9.9452 3382,Schnifis,2063,8,15,AT,47.21667,9.73306 3383,Schoppernau,2063,8,15,AT,47.31205,10.01646 3391,Schröcken,2063,8,15,AT,47.25755,10.09197 3390,Schruns,2063,8,15,AT,47.06667,9.91667 3395,Schwarzach,2063,8,15,AT,47.44904,9.76213 3403,Schwarzenberg,2063,8,15,AT,47.41415,9.85154 3448,Sibratsgfäll,2063,8,15,AT,47.42667,10.03806 3458,Silbertal,2063,8,15,AT,47.09368,9.98314 3497,Stallehr,2063,8,15,AT,47.13306,9.85 3561,Sulz,2063,8,15,AT,47.28721,9.65183 3562,Sulzberg,2063,8,15,AT,47.52178,9.91353 3597,Thüringen,2063,8,15,AT,47.2,9.76667 3629,Tschagguns,2063,8,15,AT,47.08333,9.9 3900,Übersaxen,2063,8,15,AT,47.25284,9.6708 3672,Vandans,2063,8,15,AT,47.09569,9.86525 3683,Viktorsberg,2063,8,15,AT,47.30092,9.67484 3749,Warth,2063,8,15,AT,47.25,10.18333 3764,Weiler,2063,8,15,AT,47.29972,9.65 3847,Wolfurt,2063,8,15,AT,47.46667,9.75 15805,Antopal’,2959,BR,21,BY,52.2038,24.7863 15810,Asnyezhytsy,2959,BR,21,BY,52.1891,26.1299 15820,Baranovichi,2959,BR,21,BY,53.1327,26.0139 15821,Baranovichskiy Rayon,2959,BR,21,BY,53.16667,25.83333 15833,Brest,2959,BR,21,BY,52.09755,23.68775 15834,Brestski Rayon,2959,BR,21,BY,52.0,23.75 15841,Byaroza,2959,BR,21,BY,52.5314,24.9786 15843,Byarozawski Rayon,2959,BR,21,BY,52.5,25.0 15844,Byelaazyorsk,2959,BR,21,BY,52.4731,25.1784 15850,Charnawchytsy,2959,BR,21,BY,52.21948,23.74043 15861,Damachava,2959,BR,21,BY,51.75,23.6 15863,Davyd-Haradok,2959,BR,21,BY,52.0566,27.2161 15868,Drahichyn,2959,BR,21,BY,52.1874,25.1597 15869,Drahichynski Rayon,2959,BR,21,BY,52.16667,25.0 15884,Hantsavichy,2959,BR,21,BY,52.758,26.43 15885,Hantsavitski Rayon,2959,BR,21,BY,52.66667,26.5 15888,Haradzishcha,2959,BR,21,BY,53.3247,26.0107 15897,Horad Baranavichy,2959,BR,21,BY,53.13333,26.03333 15898,Horad Brest,2959,BR,21,BY,52.1,23.7 15909,Ivanava,2959,BR,21,BY,52.1451,25.5365 15910,Ivanawski Rayon,2959,BR,21,BY,52.16667,25.58333 15911,Ivatsevichy,2959,BR,21,BY,52.709,25.3401 15917,Kamyanyets,2959,BR,21,BY,52.40013,23.81 15918,Kamyanyetski Rayon,2959,BR,21,BY,52.41667,23.66667 15919,Kamyanyuki,2959,BR,21,BY,52.55757,23.80525 15942,Kobryn,2959,BR,21,BY,52.2138,24.3564 15946,Kosava,2959,BR,21,BY,52.7583,25.1554 15957,Lahishyn,2959,BR,21,BY,52.339,25.9867 15964,Luninyets,2959,BR,21,BY,52.2472,26.8047 15965,Lyakhavichy,2959,BR,21,BY,53.0388,26.2656 15982,Malaryta,2959,BR,21,BY,51.7905,24.074 15988,Mikashevichy,2959,BR,21,BY,52.2173,27.476 15993,Motal’,2959,BR,21,BY,52.3138,25.6072 16010,Nyakhachava,2959,BR,21,BY,52.644,25.2027 16021,Pinsk,2959,BR,21,BY,52.1229,26.0951 16027,Pruzhanski Rayon,2959,BR,21,BY,52.66667,24.58333 16028,Pruzhany,2959,BR,21,BY,52.556,24.4573 16044,Ruzhany,2959,BR,21,BY,52.86322,24.89357 16075,Stolin,2959,BR,21,BY,51.89115,26.84597 16076,Stolinski Rayon,2959,BR,21,BY,52.0,27.0 16089,Tsyelyakhany,2959,BR,21,BY,52.5175,25.8429 16114,Vysokaye,2959,BR,21,BY,52.37091,23.37083 16122,Zhabinka,2959,BR,21,BY,52.1984,24.0115 16123,Zhabinkawski Rayon,2959,BR,21,BY,52.16667,24.08333 16130,Znamenka,2959,BR,21,BY,51.88168,23.65545 15804,Aktsyabrski,2955,HO,21,BY,52.644,28.8801 15829,Brahin,2955,HO,21,BY,51.787,30.2677 15830,Brahinski Rayon,2955,HO,21,BY,51.66667,30.33333 15835,Buda-Kashalyova,2955,HO,21,BY,52.7179,30.5701 15848,Chachersk,2955,HO,21,BY,52.9164,30.9179 15849,Chacherski Rayon,2955,HO,21,BY,52.91667,31.08333 15864,Dobrush,2955,HO,21,BY,52.4089,31.3237 15867,Dowsk,2955,HO,21,BY,53.1571,30.4601 15895,Homyel,2955,HO,21,BY,52.4345,30.9754 15896,Homyel’ski Rayon,2955,HO,21,BY,52.33333,31.0 15915,Kalinkavichy,2955,HO,21,BY,52.1323,29.3257 15923,Karanyowka,2955,HO,21,BY,52.3506,31.1121 15926,Karma,2955,HO,21,BY,53.1301,30.8016 15929,Kastsyukowka,2955,HO,21,BY,52.5387,30.9173 15930,Khal’ch,2955,HO,21,BY,52.5643,31.1364 15936,Khoyniki,2955,HO,21,BY,51.8911,29.9552 15962,Loyew,2955,HO,21,BY,51.9458,30.7953 15967,Lyel’chytski Rayon,2955,HO,21,BY,51.83333,28.25 15968,Lyel’chytsy,2955,HO,21,BY,51.7862,28.3288 15985,Mazyr,2955,HO,21,BY,52.0495,29.2456 15986,Mazyrski Rayon,2955,HO,21,BY,52.0,29.0 16002,Narowlya,2955,HO,21,BY,51.7961,29.5004 16005,Novaya Huta,2955,HO,21,BY,52.1032,30.9837 16017,Parychy,2955,HO,21,BY,52.8042,29.4176 16020,Peramoga,2955,HO,21,BY,52.3973,31.071 16033,Pyetrykaw,2955,HO,21,BY,52.1289,28.4921 16035,Rahachow,2955,HO,21,BY,53.0934,30.0495 16036,Rahachowski Rayon,2955,HO,21,BY,53.16667,30.16667 16041,Rechytsa,2955,HO,21,BY,52.3617,30.3916 16049,Sasnovy Bor,2955,HO,21,BY,52.5194,29.5988 16081,Svyetlahorsk,2955,HO,21,BY,52.6329,29.7389 16090,Turaw,2955,HO,21,BY,52.0683,27.735 16098,Vasilyevichy,2955,HO,21,BY,52.2512,29.8288 16112,Vyetka,2955,HO,21,BY,52.5591,31.1794 16113,Vyetkawski Rayon,2955,HO,21,BY,52.66667,31.25 16116,Yel’sk,2955,HO,21,BY,51.8141,29.1522 16127,Zhlobin,2955,HO,21,BY,52.8926,30.024 16128,Zhlobinski Rayon,2955,HO,21,BY,52.75,29.83333 16129,Zhytkavichy,2955,HO,21,BY,52.2168,27.8561 15806,Ashmyanski Rayon,2956,HR,21,BY,54.41667,25.91667 15807,Ashmyany,2956,HR,21,BY,54.421,25.936 15812,Astravyets,2956,HR,21,BY,54.61378,25.95537 15813,Astravyetski Rayon,2956,HR,21,BY,54.66667,26.0 15823,Baruny,2956,HR,21,BY,54.3171,26.1376 15842,Byarozawka,2956,HR,21,BY,53.72406,25.49709 15876,Dyatlovo,2956,HR,21,BY,53.4631,25.4068 15882,Grodnenskiy Rayon,2956,HR,21,BY,53.66667,24.0 15883,Hal’shany,2956,HR,21,BY,54.2585,26.0144 15899,Horad Hrodna,2956,HR,21,BY,53.68333,23.83333 15905,Hrodna,2956,HR,21,BY,53.6884,23.8258 15906,Hyeranyony,2956,HR,21,BY,54.1159,25.5773 15908,Indura,2956,HR,21,BY,53.4605,23.8823 15913,Iwye,2956,HR,21,BY,53.9299,25.7727 15924,Karelichy,2956,HR,21,BY,53.5648,26.1406 15925,Karelitski Rayon,2956,HR,21,BY,53.5,26.25 15950,Krasnosel’skiy,2956,HR,21,BY,53.2645,24.4301 15952,Kreva,2956,HR,21,BY,54.3118,26.2916 15959,Lida,2956,HR,21,BY,53.88333,25.29972 15960,Lidski Rayon,2956,HR,21,BY,53.66667,25.25 15977,Lyubcha,2956,HR,21,BY,53.7522,26.0603 15990,Mir,2956,HR,21,BY,53.4544,26.467 15992,Mosty,2956,HR,21,BY,53.4122,24.5387 16006,Novogrudok,2956,HR,21,BY,53.5942,25.8191 16042,Ross’,2956,HR,21,BY,53.28451,24.40335 16047,Sapotskin,2956,HR,21,BY,53.8329,23.6598 16054,Shchuchyn,2956,HR,21,BY,53.6014,24.7465 16055,Shchuchynski Rayon,2956,HR,21,BY,53.58333,24.66667 16059,Skidel’,2956,HR,21,BY,53.5904,24.2478 16062,Slonim,2956,HR,21,BY,53.0869,25.3163 16066,Smarhon’,2956,HR,21,BY,54.4798,26.3957 16069,Soly,2956,HR,21,BY,54.51301,26.19381 16079,Svislach,2956,HR,21,BY,53.03474,24.09829 16103,Vishnyeva,2956,HR,21,BY,54.7102,26.5228 16106,Volkovysk,2956,HR,21,BY,53.1561,24.4513 16107,Voranava,2956,HR,21,BY,54.1492,25.3112 16108,Vyalikaya Byerastavitsa,2956,HR,21,BY,53.196,24.0166 16121,Zel’va,2956,HR,21,BY,53.1504,24.8153 16124,Zhaludok,2956,HR,21,BY,53.5974,24.9828 16126,Zhirovichi,2956,HR,21,BY,53.0131,25.3443 15881,Frunzyenski Rayon,2958,HM,21,BY,53.90056,27.495 15927,Kastrychnitski Rayon,2958,HM,21,BY,53.85667,27.54139 15969,Lyeninski Rayon,2958,HM,21,BY,53.85944,27.58778 15984,Maskowski Rayon,2958,HM,21,BY,53.87417,27.50278 15989,Minsk,2958,HM,21,BY,53.9,27.56667 16016,Partyzanski Rayon,2958,HM,21,BY,53.88028,27.67 16050,Savyetski Rayon,2958,HM,21,BY,53.91778,27.59417 16087,Tsentral’ny Rayon,2958,HM,21,BY,53.91778,27.56333 16120,Zavodski Rayon,2958,HM,21,BY,53.86194,27.66222 15811,Astrashytski Haradok,2957,MI,21,BY,54.0651,27.695 15814,Atolina,2957,MI,21,BY,53.7817,27.4346 15815,Azyartso,2957,MI,21,BY,53.8397,27.3917 15819,Bal’shavik,2957,MI,21,BY,54.0036,27.5669 15824,Barysaw,2957,MI,21,BY,54.2279,28.505 15825,Barysawski Rayon,2957,MI,21,BY,54.33333,28.58333 15826,Blon’,2957,MI,21,BY,53.5269,28.1732 15827,Bobr,2957,MI,21,BY,54.342,29.2736 15828,Borovlyany,2957,MI,21,BY,54.0022,27.6754 15840,Byarezinski Rayon,2957,MI,21,BY,53.83333,29.0 15845,Byerazino,2957,MI,21,BY,53.8391,28.9879 15855,Chervyen’,2957,MI,21,BY,53.7059,28.4313 15856,Chervyen’ski Rayon,2957,MI,21,BY,53.75,28.5 15859,Chyrvonaya Slabada,2957,MI,21,BY,52.8522,27.1698 15860,Chyst’,2957,MI,21,BY,54.2698,27.1067 15871,Druzhny,2957,MI,21,BY,53.6238,27.8977 15875,Dukora,2957,MI,21,BY,53.6786,27.94 15878,Dzyarzhynsk,2957,MI,21,BY,53.6832,27.138 15879,Enyerhyetykaw,2957,MI,21,BY,53.5871,27.0535 15880,Fanipol,2957,MI,21,BY,53.74998,27.33338 15889,Haradzyeya,2957,MI,21,BY,53.3121,26.538 15890,Hatava,2957,MI,21,BY,53.7829,27.6407 15900,Horad Smalyavichy,2957,MI,21,BY,54.0249,28.0894 15901,Horad Zhodzina,2957,MI,21,BY,54.0985,28.3331 15904,Hotsk,2957,MI,21,BY,52.5215,27.1385 15907,Il’ya,2957,MI,21,BY,54.4167,27.2958 15912,Ivyanyets,2957,MI,21,BY,53.8864,26.7432 15916,Kalodzishchy,2957,MI,21,BY,53.944,27.7823 15921,Kapyl’,2957,MI,21,BY,53.1516,27.0913 15922,Kapyl’ski Rayon,2957,MI,21,BY,53.16667,27.08333 15931,Khatsyezhyna,2957,MI,21,BY,53.9094,27.3069 15933,Kholopenichi,2957,MI,21,BY,54.51746,28.95645 15940,Klyetsk,2957,MI,21,BY,53.0635,26.6321 15941,Klyetski Rayon,2957,MI,21,BY,53.0,26.66667 15945,Korolëv Stan,2957,MI,21,BY,53.9865,27.7982 15949,Krasnaye,2957,MI,21,BY,54.2438,27.0758 15954,Krupki,2957,MI,21,BY,54.3178,29.1374 15956,Kryvichy,2957,MI,21,BY,54.7132,27.2886 15958,Lahoysk,2957,MI,21,BY,54.2064,27.8512 15961,Loshnitsa,2957,MI,21,BY,54.2796,28.7649 15963,Luhavaya Slabada,2957,MI,21,BY,53.7823,27.8434 15966,Lyasny,2957,MI,21,BY,54.0072,27.6963 15972,Lyeskawka,2957,MI,21,BY,54.0024,27.7108 15976,Lyuban’,2957,MI,21,BY,52.7985,28.0048 15978,Machulishchy,2957,MI,21,BY,53.7788,27.5948 15981,Maladzyechna,2957,MI,21,BY,54.3167,26.854 15983,Mar’’ina Horka,2957,MI,21,BY,53.509,28.147 15987,Michanovichi,2957,MI,21,BY,53.73937,27.69276 15995,Myadzyel,2957,MI,21,BY,54.8789,26.9371 15996,Myadzyel’ski Rayon,2957,MI,21,BY,54.83333,27.0 16001,Narach,2957,MI,21,BY,54.9102,26.708 16003,Nasilava,2957,MI,21,BY,54.30441,26.78209 16008,Novosel’ye,2957,MI,21,BY,53.9162,27.2009 16009,Novy Svyerzhan’,2957,MI,21,BY,53.4542,26.7301 16011,Nyasvizh,2957,MI,21,BY,53.2189,26.6779 16012,Nyasvizhski Rayon,2957,MI,21,BY,53.25,26.66667 16022,Plyeshchanitsy,2957,MI,21,BY,54.4235,27.8301 16026,Prawdzinski,2957,MI,21,BY,53.5248,27.8303 16029,Pryvol’ny,2957,MI,21,BY,53.7969,27.7967 16030,Pukhavichy,2957,MI,21,BY,53.5297,28.2467 16031,Pukhavichy Raion,2957,MI,21,BY,53.5,28.0 16032,Pyatryshki,2957,MI,21,BY,54.0686,27.2179 16034,Radashkovichy,2957,MI,21,BY,54.1554,27.2412 16037,Rakaw,2957,MI,21,BY,53.9674,27.0562 16043,Rudzyensk,2957,MI,21,BY,53.5983,27.8621 16045,Salihorsk,2957,MI,21,BY,52.7876,27.5415 16046,Samakhvalavichy,2957,MI,21,BY,53.7396,27.5037 16048,Sarachy,2957,MI,21,BY,52.7867,28.0186 16051,Schomyslitsa,2957,MI,21,BY,53.8211,27.4522 16060,Slabada,2957,MI,21,BY,54.0087,27.8866 16063,Slutsk,2957,MI,21,BY,53.0274,27.5597 16064,Slutski Rayon,2957,MI,21,BY,53.0,27.66667 16065,Smalyavitski Rayon,2957,MI,21,BY,54.0,28.16667 16067,Smilavichy,2957,MI,21,BY,53.7496,28.0115 16068,Snow,2957,MI,21,BY,53.2201,26.401 16070,Stan’kava,2957,MI,21,BY,53.6292,27.229 16071,Staradarozhski Rayon,2957,MI,21,BY,53.0,28.16667 16072,Starobin,2957,MI,21,BY,52.7267,27.4606 16073,Staryya Darohi,2957,MI,21,BY,53.0402,28.267 16074,Stawbtsowski Rayon,2957,MI,21,BY,53.58333,26.66667 16077,Stowbtsy,2957,MI,21,BY,53.4785,26.7434 16078,Svir,2957,MI,21,BY,54.8517,26.395 16080,Svislach,2957,MI,21,BY,53.6404,27.9199 16083,Syenitsa,2957,MI,21,BY,53.8313,27.5343 16085,Syomkava,2957,MI,21,BY,54.0101,27.441 16088,Tsimkavichy,2957,MI,21,BY,53.0672,26.9902 16091,Turets-Bayary,2957,MI,21,BY,54.3785,26.6581 16092,Urechcha,2957,MI,21,BY,52.9479,27.893 16094,Usiazh,2957,MI,21,BY,54.07598,28.00698 16095,Uzda,2957,MI,21,BY,53.4627,27.2137 16096,Uzdzyenski Rayon,2957,MI,21,BY,53.41667,27.33333 16097,Valozhyn,2957,MI,21,BY,54.0892,26.5266 16101,Vilyeyka,2957,MI,21,BY,54.4914,26.9111 16102,Vilyeyski Rayon,2957,MI,21,BY,54.5,27.08333 16109,Vyaliki Trastsyanets,2957,MI,21,BY,53.851,27.7139 16117,Yubilyeyny,2957,MI,21,BY,53.8191,27.5215 16118,Zamostochye,2957,MI,21,BY,53.8198,27.8685 16119,Zaslawye,2957,MI,21,BY,54.0114,27.2695 16125,Zhdanovichy,2957,MI,21,BY,53.9432,27.425 16131,Zyembin,2957,MI,21,BY,54.3579,28.2207 16132,Октябрьский,2957,MI,21,BY,54.04059,28.19813 15808,Asipovichy,2954,MA,21,BY,53.3011,28.6386 15809,Asipovitski Rayon,2954,MA,21,BY,53.33333,28.75 15816,Babruysk,2954,MA,21,BY,53.1384,29.2214 15817,Babruyski Rayon,2954,MA,21,BY,53.08333,29.16667 15836,Buynichy,2954,MA,21,BY,53.8536,30.2671 15838,Byalynichy,2954,MA,21,BY,53.9994,29.7141 15839,Byalynitski Rayon,2954,MA,21,BY,54.0,29.75 15847,Bykhaw,2954,MA,21,BY,53.521,30.2454 15853,Chavuski Rayon,2954,MA,21,BY,53.83333,30.91667 15854,Chavusy,2954,MA,21,BY,53.8098,30.9717 15857,Cherykaw,2954,MA,21,BY,53.5689,31.3831 15858,Cherykawski Rayon,2954,MA,21,BY,53.66667,31.33333 15862,Dashkawka,2954,MA,21,BY,53.7352,30.2625 15872,Drybin,2954,MA,21,BY,54.1192,31.0939 15873,Drybinski Rayon,2954,MA,21,BY,54.08333,31.0 15891,Hlusha,2954,MA,21,BY,53.0868,28.8567 15892,Hlusk,2954,MA,21,BY,52.903,28.6845 15902,Horatski Rayon,2954,MA,21,BY,54.33333,31.0 15903,Horki,2954,MA,21,BY,54.2862,30.9863 15914,Kadino,2954,MA,21,BY,53.88389,30.52028 15920,Kamyennyya Lavy,2954,MA,21,BY,54.0898,30.2962 15928,Kastsyukovichy,2954,MA,21,BY,53.3525,32.0514 15932,Khodasy,2954,MA,21,BY,53.9266,31.4779 15934,Khotsimsk,2954,MA,21,BY,53.4086,32.578 15935,Khotsimski Rayon,2954,MA,21,BY,53.41667,32.5 15937,Kirawsk,2954,MA,21,BY,53.2693,29.4752 15938,Klichaw,2954,MA,21,BY,53.4923,29.3356 15939,Klimavichy,2954,MA,21,BY,53.6079,31.9586 15948,Krasnapol’ski Rayon,2954,MA,21,BY,53.33333,31.41667 15947,Krasnapollye,2954,MA,21,BY,53.3353,31.3999 15951,Krasnyy Bereg,2954,MA,21,BY,53.3291,30.1929 15953,Kruhlaye,2954,MA,21,BY,54.2497,29.7968 15955,Krychaw,2954,MA,21,BY,53.7125,31.717 15979,Mahilyow,2954,MA,21,BY,53.9168,30.3449 15980,Mahilyowski Rayon,2954,MA,21,BY,53.83333,30.25 15994,Mstsislaw,2954,MA,21,BY,54.0185,31.7217 15997,Myazhysyatki,2954,MA,21,BY,53.7776,30.1765 16000,Myshkavichy,2954,MA,21,BY,53.2172,29.512 16015,Palykavichy Pyershyya,2954,MA,21,BY,53.9854,30.36 16025,Posëlok Voskhod,2954,MA,21,BY,53.7766,30.3497 16038,Ramanavichy,2954,MA,21,BY,53.8653,30.5597 16056,Shklow,2954,MA,21,BY,54.2131,30.2877 16057,Shklowski Rayon,2954,MA,21,BY,54.16667,30.33333 16061,Slawharad,2954,MA,21,BY,53.4429,31.0014 16099,Veyno,2954,MA,21,BY,53.83333,30.38333 16104,Vishow,2954,MA,21,BY,53.9805,29.9925 16115,Yalizava,2954,MA,21,BY,53.3994,29.0048 15818,Balbasava,2960,VI,21,BY,54.4207,30.2909 15822,Baran’,2960,VI,21,BY,54.4784,30.3159 15831,Braslaw,2960,VI,21,BY,55.6413,27.0418 15832,Braslawski Rayon,2960,VI,21,BY,55.55972,27.0 15837,Byahoml’,2960,VI,21,BY,54.7316,28.0577 15846,Byeshankovitski Rayon,2960,VI,21,BY,55.0,29.5 15851,Chashniki,2960,VI,21,BY,54.8584,29.1608 15852,Chashnitski Rayon,2960,VI,21,BY,54.75,29.25 15865,Dokshytski Rayon,2960,VI,21,BY,54.83333,27.91667 15866,Dokshytsy,2960,VI,21,BY,54.8918,27.7667 15870,Druya,2960,VI,21,BY,55.7906,27.4505 15874,Dubrowna,2960,VI,21,BY,54.5716,30.691 15877,Dzisna,2960,VI,21,BY,55.5676,28.2076 15886,Haradok,2960,VI,21,BY,55.4624,29.9845 15887,Haradotski Rayon,2960,VI,21,BY,55.66667,30.16667 15893,Hlybokaye,2960,VI,21,BY,55.1384,27.6905 15894,Hlybotski Rayon,2960,VI,21,BY,55.16667,27.83333 15943,Kokhanava,2960,VI,21,BY,54.4611,30.0018 15944,Konstantinovo,2960,VI,21,BY,54.6593,29.2684 15970,Lyepyel’,2960,VI,21,BY,54.8814,28.699 15971,Lyepyel’ski Rayon,2960,VI,21,BY,54.83333,28.66667 15973,Lyntupy,2960,VI,21,BY,55.0516,26.3103 15974,Lyozna,2960,VI,21,BY,55.0247,30.797 15975,Lyoznyenski Rayon,2960,VI,21,BY,55.0,30.66667 15991,Mosar,2960,VI,21,BY,55.2232,27.4609 15998,Myorski Rayon,2960,VI,21,BY,55.58333,27.83333 15999,Myory,2960,VI,21,BY,55.6222,27.6281 16004,Navapolatsk,2960,VI,21,BY,55.5318,28.5987 16007,Novolukoml’,2960,VI,21,BY,54.66192,29.15016 16013,Orsha,2960,VI,21,BY,54.5081,30.4172 16014,Osveya,2960,VI,21,BY,56.0147,28.11049 16018,Pastavy,2960,VI,21,BY,55.11676,26.83263 16019,Pastawski Rayon,2960,VI,21,BY,55.08333,26.91667 16023,Polatsk,2960,VI,21,BY,55.4879,28.7856 16024,Polatski Rayon,2960,VI,21,BY,55.58333,29.0 16039,Rasonski Rayon,2960,VI,21,BY,55.83333,28.91667 16040,Rasony,2960,VI,21,BY,55.9058,28.8135 16052,Sharkawshchyna,2960,VI,21,BY,55.3689,27.4686 16053,Sharkawshchynski Rayon,2960,VI,21,BY,55.41667,27.41667 16058,Shumilinski Rayon,2960,VI,21,BY,55.33333,29.5 16082,Syanno,2960,VI,21,BY,54.8108,29.7086 16084,Syennyenski Rayon,2960,VI,21,BY,54.83333,29.83333 16086,Talachyn,2960,VI,21,BY,54.4087,29.6955 16093,Ushachy,2960,VI,21,BY,55.179,28.6158 16100,Vidzy,2960,VI,21,BY,55.3945,26.6305 16105,Vitebsk,2960,VI,21,BY,55.1904,30.2049 16110,Vyerkhnyadzvinsk,2960,VI,21,BY,55.7777,27.9389 16111,Vyerkhnyadzvinski Rayon,2960,VI,21,BY,55.75,28.16667 8693,Brussels,1376,BRU,22,BE,50.85045,4.34878 8608,Aalst,1373,VLG,22,BE,50.93604,4.0355 8609,Aalter,1373,VLG,22,BE,51.09017,3.44693 8610,Aarschot,1373,VLG,22,BE,50.98715,4.83695 8611,Aartselaar,1373,VLG,22,BE,51.13412,4.38678 8613,Alken,1373,VLG,22,BE,50.87553,5.30558 8614,Alveringem,1373,VLG,22,BE,51.01238,2.71117 8623,Antwerpen,1373,VLG,22,BE,51.21989,4.40346 8624,Anzegem,1373,VLG,22,BE,50.837,3.47786 8625,Ardooie,1373,VLG,22,BE,50.9757,3.19736 8626,Arendonk,1373,VLG,22,BE,51.32267,5.08289 8628,As,1373,VLG,22,BE,51.00755,5.58453 8629,Asse,1373,VLG,22,BE,50.91011,4.19836 8630,Assenede,1373,VLG,22,BE,51.22598,3.75085 8636,Avelgem,1373,VLG,22,BE,50.77618,3.44502 8639,Baarle-Hertog,1373,VLG,22,BE,51.40504,4.89226 8641,Balen,1373,VLG,22,BE,51.16837,5.17027 8648,Beernem,1373,VLG,22,BE,51.13981,3.33896 8649,Beerse,1373,VLG,22,BE,51.31927,4.85304 8650,Beersel,1373,VLG,22,BE,50.76589,4.3002 8651,Begijnendijk,1373,VLG,22,BE,51.01942,4.78377 8652,Bekkevoort,1373,VLG,22,BE,50.94074,4.969 8654,Beringen,1373,VLG,22,BE,51.04954,5.22606 8655,Berlaar,1373,VLG,22,BE,51.1176,4.65835 8656,Berlare,1373,VLG,22,BE,51.03333,4.0 8659,Bertem,1373,VLG,22,BE,50.86403,4.62918 8662,Bever,1373,VLG,22,BE,50.91667,4.31667 8663,Beveren,1373,VLG,22,BE,51.21187,4.25633 8665,Bierbeek,1373,VLG,22,BE,50.82876,4.75949 8666,Bilzen,1373,VLG,22,BE,50.87325,5.5184 8669,Blankenberge,1373,VLG,22,BE,51.31306,3.13227 8671,Bocholt,1373,VLG,22,BE,51.17337,5.57994 8672,Boechout,1373,VLG,22,BE,51.15959,4.49195 8673,Bonheiden,1373,VLG,22,BE,51.02261,4.54714 8674,Boom,1373,VLG,22,BE,51.09242,4.3717 8675,Boortmeerbeek,1373,VLG,22,BE,50.97929,4.57443 8676,Borgloon,1373,VLG,22,BE,50.80505,5.34366 8677,Bornem,1373,VLG,22,BE,51.09716,4.24364 8678,Borsbeek,1373,VLG,22,BE,51.19661,4.48543 8681,Boutersem,1373,VLG,22,BE,50.83511,4.8345 8686,Brasschaat,1373,VLG,22,BE,51.2912,4.49182 8687,Brecht,1373,VLG,22,BE,51.35024,4.63829 8688,Bredene,1373,VLG,22,BE,51.23489,2.97559 8689,Bree,1373,VLG,22,BE,51.14152,5.5969 8691,Brugge,1373,VLG,22,BE,51.20892,3.22424 8694,Buggenhout,1373,VLG,22,BE,51.0159,4.20173 8718,Damme,1373,VLG,22,BE,51.25147,3.28144 8720,De Haan,1373,VLG,22,BE,51.27261,3.03446 8721,De Panne,1373,VLG,22,BE,51.09793,2.59368 8722,De Pinte,1373,VLG,22,BE,50.99339,3.64747 8723,Deerlijk,1373,VLG,22,BE,50.85337,3.35416 8724,Deinze,1373,VLG,22,BE,50.98175,3.53096 8725,Denderleeuw,1373,VLG,22,BE,50.88506,4.07601 8726,Dendermonde,1373,VLG,22,BE,51.02869,4.10106 8727,Dentergem,1373,VLG,22,BE,50.96429,3.41617 8728,Dessel,1373,VLG,22,BE,51.23855,5.11448 8729,Destelbergen,1373,VLG,22,BE,51.05952,3.79899 8730,Deurne,1373,VLG,22,BE,51.22134,4.46595 8731,Diegem,1373,VLG,22,BE,50.89727,4.43354 8732,Diepenbeek,1373,VLG,22,BE,50.90769,5.41875 8733,Diest,1373,VLG,22,BE,50.98923,5.05062 8734,Diksmuide,1373,VLG,22,BE,51.03248,2.86384 8735,Dilbeek,1373,VLG,22,BE,50.84799,4.25972 8741,Drogenbos,1373,VLG,22,BE,50.78733,4.31471 8742,Duffel,1373,VLG,22,BE,51.09554,4.50903 8744,Edegem,1373,VLG,22,BE,51.15662,4.44504 8745,Eeklo,1373,VLG,22,BE,51.18703,3.55654 8751,Essen,1373,VLG,22,BE,51.46791,4.46901 8755,Evergem,1373,VLG,22,BE,51.11306,3.70976 8773,Galmaarden,1373,VLG,22,BE,50.75389,3.97121 8774,Gavere,1373,VLG,22,BE,50.92917,3.66184 8776,Geel,1373,VLG,22,BE,51.16557,4.98917 8778,Geetbets,1373,VLG,22,BE,50.89431,5.11199 8781,Genk,1373,VLG,22,BE,50.965,5.50082 8782,Gent,1373,VLG,22,BE,51.05,3.71667 8783,Geraardsbergen,1373,VLG,22,BE,50.77343,3.88223 8786,Gingelom,1373,VLG,22,BE,50.74792,5.13422 8787,Gistel,1373,VLG,22,BE,51.15612,2.96387 8788,Glabbeek,1373,VLG,22,BE,50.87267,4.95615 8789,Gooik,1373,VLG,22,BE,50.79443,4.11378 8792,Grimbergen,1373,VLG,22,BE,50.93409,4.37213 8793,Grobbendonk,1373,VLG,22,BE,51.19043,4.73562 8794,Haacht,1373,VLG,22,BE,50.97737,4.63777 8795,Haaltert,1373,VLG,22,BE,50.90634,4.00093 8797,Halen,1373,VLG,22,BE,50.94837,5.11096 8798,Halle,1373,VLG,22,BE,50.73385,4.23454 8799,Hamme,1373,VLG,22,BE,51.09822,4.13705 8803,Harelbeke,1373,VLG,22,BE,50.85343,3.30935 8804,Hasselt,1373,VLG,22,BE,50.93106,5.33781 8807,Heers,1373,VLG,22,BE,50.75383,5.3021 8808,Heist-op-den-Berg,1373,VLG,22,BE,51.07537,4.72827 8809,Helchteren,1373,VLG,22,BE,51.05591,5.38244 8810,Hemiksem,1373,VLG,22,BE,51.14484,4.33874 8813,Herent,1373,VLG,22,BE,50.90861,4.67056 8814,Herentals,1373,VLG,22,BE,51.17655,4.83248 8815,Herenthout,1373,VLG,22,BE,51.1401,4.75572 8816,Herk-de-Stad,1373,VLG,22,BE,50.94013,5.16636 8817,Herne,1373,VLG,22,BE,50.72423,4.03481 8818,Herselt,1373,VLG,22,BE,51.05159,4.88231 8821,Herzele,1373,VLG,22,BE,50.88681,3.89014 8822,Heusden,1373,VLG,22,BE,51.03664,5.28013 8823,Hoboken,1373,VLG,22,BE,51.17611,4.34844 8824,Hoegaarden,1373,VLG,22,BE,50.7756,4.88952 8825,Hoeilaart,1373,VLG,22,BE,50.7673,4.46835 8826,Hoeselt,1373,VLG,22,BE,50.84714,5.48767 8827,Holsbeek,1373,VLG,22,BE,50.92097,4.75747 8828,Hooglede,1373,VLG,22,BE,50.98333,3.08333 8829,Hoogstraten,1373,VLG,22,BE,51.40029,4.76034 8832,Houthalen,1373,VLG,22,BE,51.03427,5.37429 8833,Houthulst,1373,VLG,22,BE,50.97824,2.9505 8835,Hove,1373,VLG,22,BE,51.15446,4.4707 8836,Huldenberg,1373,VLG,22,BE,50.78939,4.5831 8837,Hulshout,1373,VLG,22,BE,51.07451,4.79081 8840,Ichtegem,1373,VLG,22,BE,51.09572,3.01549 8841,Ieper,1373,VLG,22,BE,50.85114,2.88569 8843,Ingelmunster,1373,VLG,22,BE,50.92081,3.25571 8845,Izegem,1373,VLG,22,BE,50.91396,3.21378 8846,Jabbeke,1373,VLG,22,BE,51.18185,3.08935 8851,Kalmthout,1373,VLG,22,BE,51.38442,4.47556 8852,Kampenhout,1373,VLG,22,BE,50.9421,4.55103 8853,Kapelle-op-den-Bos,1373,VLG,22,BE,51.0097,4.36303 8854,Kapellen,1373,VLG,22,BE,51.31377,4.43539 8855,Kaprijke,1373,VLG,22,BE,51.2172,3.61519 8856,Kasterlee,1373,VLG,22,BE,51.24118,4.96651 8857,Keerbergen,1373,VLG,22,BE,51.00295,4.63434 8858,Kinrooi,1373,VLG,22,BE,51.14543,5.74207 8859,Knesselare,1373,VLG,22,BE,51.13932,3.41282 8860,Knokke-Heist,1373,VLG,22,BE,51.35,3.26667 8861,Koekelare,1373,VLG,22,BE,51.09047,2.9783 8862,Koksijde,1373,VLG,22,BE,51.11642,2.63772 8863,Kontich,1373,VLG,22,BE,51.13213,4.44706 8864,Kortemark,1373,VLG,22,BE,51.02951,3.04112 8865,Kortenaken,1373,VLG,22,BE,50.90862,5.05968 8866,Kortenberg,1373,VLG,22,BE,50.88982,4.54353 8867,Kortessem,1373,VLG,22,BE,50.8589,5.38974 8868,Kortrijk,1373,VLG,22,BE,50.82803,3.26487 8869,Kraainem,1373,VLG,22,BE,50.86155,4.46946 8870,Kruibeke,1373,VLG,22,BE,51.17048,4.31444 8871,Kruishoutem,1373,VLG,22,BE,50.90168,3.52588 8872,Kuurne,1373,VLG,22,BE,50.85143,3.2824 8878,Laarne,1373,VLG,22,BE,51.03078,3.85077 8879,Lanaken,1373,VLG,22,BE,50.89318,5.6468 8880,Landen,1373,VLG,22,BE,50.75267,5.082 8881,Lebbeke,1373,VLG,22,BE,51.00464,4.13457 8882,Lede,1373,VLG,22,BE,50.96626,3.98594 8883,Ledeberg,1373,VLG,22,BE,51.03859,3.74458 8884,Ledegem,1373,VLG,22,BE,50.85785,3.12409 8885,Lendelede,1373,VLG,22,BE,50.88626,3.23747 8887,Leopoldsburg,1373,VLG,22,BE,51.11667,5.25 8889,Leuven,1373,VLG,22,BE,50.87959,4.70093 8891,Lichtervelde,1373,VLG,22,BE,51.03333,3.15 8892,Liedekerke,1373,VLG,22,BE,50.86892,4.08743 8893,Lier,1373,VLG,22,BE,51.13128,4.57041 8895,Lille,1373,VLG,22,BE,51.24197,4.82313 8898,Linkebeek,1373,VLG,22,BE,50.76781,4.33688 8899,Lint,1373,VLG,22,BE,51.12707,4.49669 8902,Lochristi,1373,VLG,22,BE,51.09644,3.83194 8903,Lokeren,1373,VLG,22,BE,51.10364,3.99339 8904,Lommel,1373,VLG,22,BE,51.23074,5.31349 8905,Londerzeel,1373,VLG,22,BE,51.00468,4.30304 8908,Lovendegem,1373,VLG,22,BE,51.10168,3.61298 8909,Lubbeek,1373,VLG,22,BE,50.88278,4.83896 8910,Lummen,1373,VLG,22,BE,50.98772,5.19121 8912,Maaseik,1373,VLG,22,BE,51.09802,5.78379 8913,Maasmechelen,1373,VLG,22,BE,50.96545,5.69452 8914,Machelen,1373,VLG,22,BE,50.91061,4.44174 8915,Maldegem,1373,VLG,22,BE,51.20737,3.44511 8922,Mechelen,1373,VLG,22,BE,51.02574,4.47762 8923,Meerhout,1373,VLG,22,BE,51.1321,5.07842 8924,Meise,1373,VLG,22,BE,50.93934,4.32655 8926,Melle,1373,VLG,22,BE,51.00232,3.80526 8927,Menen,1373,VLG,22,BE,50.79722,3.12245 8929,Merchtem,1373,VLG,22,BE,50.95129,4.23197 8930,Merelbeke,1373,VLG,22,BE,50.99447,3.74621 8931,Merksplas,1373,VLG,22,BE,51.35851,4.86513 8934,Meulebeke,1373,VLG,22,BE,50.95136,3.28804 8935,Middelkerke,1373,VLG,22,BE,51.18532,2.82077 8937,Moerbeke,1373,VLG,22,BE,51.17409,3.93001 8938,Mol,1373,VLG,22,BE,51.19188,5.11662 8943,Moorslede,1373,VLG,22,BE,50.8919,3.06117 8945,Mortsel,1373,VLG,22,BE,51.16697,4.45127 8951,Nazareth,1373,VLG,22,BE,50.95686,3.59425 8952,Neerpelt,1373,VLG,22,BE,51.22807,5.4427 8954,Nevele,1373,VLG,22,BE,51.03531,3.54574 8955,Niel,1373,VLG,22,BE,51.11096,4.33428 8956,Nieuwerkerken,1373,VLG,22,BE,50.8638,5.19467 8957,Nieuwpoort,1373,VLG,22,BE,51.13008,2.75135 8958,Nijlen,1373,VLG,22,BE,51.16096,4.67008 8959,Ninove,1373,VLG,22,BE,50.82776,4.02657 8963,Olen,1373,VLG,22,BE,51.14391,4.8598 8966,Oostduinkerke,1373,VLG,22,BE,51.11565,2.68217 8967,Oosterzele,1373,VLG,22,BE,50.95261,3.79826 8968,Oostkamp,1373,VLG,22,BE,51.15432,3.23128 8969,Oostmalle,1373,VLG,22,BE,51.3,4.73333 8970,Oostrozebeke,1373,VLG,22,BE,50.92093,3.33799 8971,Opglabbeek,1373,VLG,22,BE,51.04258,5.58346 8972,Opwijk,1373,VLG,22,BE,50.96724,4.18442 8974,Ostend,1373,VLG,22,BE,51.21551,2.927 8976,Oud-Heverlee,1373,VLG,22,BE,50.83522,4.66421 8977,Oud-Turnhout,1373,VLG,22,BE,51.31978,4.9841 8978,Oudenaarde,1373,VLG,22,BE,50.85168,3.60891 8979,Oudenburg,1373,VLG,22,BE,51.18489,3.00035 8982,Overijse,1373,VLG,22,BE,50.77436,4.53461 8983,Overpelt,1373,VLG,22,BE,51.21038,5.41557 8986,Peer,1373,VLG,22,BE,51.1303,5.45952 8987,Pepingen,1373,VLG,22,BE,50.75922,4.15983 8989,Perre,1373,VLG,22,BE,50.88914,3.86098 8992,Pittem,1373,VLG,22,BE,50.99279,3.26317 8995,Poperinge,1373,VLG,22,BE,50.85386,2.72659 9002,Provincie Antwerpen,1373,VLG,22,BE,51.16558,4.83402 9003,Provincie Limburg,1373,VLG,22,BE,51.0,5.5 9004,Provincie Oost-Vlaanderen,1373,VLG,22,BE,51.0,3.75 9005,Provincie Vlaams-Brabant,1373,VLG,22,BE,50.91667,4.58333 9006,Provincie West-Vlaanderen,1373,VLG,22,BE,51.0,3.0 9007,Putte,1373,VLG,22,BE,51.05337,4.63263 9008,Puurs,1373,VLG,22,BE,51.07409,4.28844 9015,Ranst,1373,VLG,22,BE,51.18983,4.56533 9016,Ravels,1373,VLG,22,BE,51.37274,4.9921 9020,Retie,1373,VLG,22,BE,51.26652,5.08242 9021,Riemst,1373,VLG,22,BE,50.80995,5.60131 9022,Rijkevorsel,1373,VLG,22,BE,51.34795,4.76053 9025,Roeselare,1373,VLG,22,BE,50.94653,3.12269 9027,Ronse,1373,VLG,22,BE,50.74574,3.6005 9028,Rotselaar,1373,VLG,22,BE,50.95302,4.71665 9030,Ruiselede,1373,VLG,22,BE,51.04039,3.39416 9032,Rumst,1373,VLG,22,BE,51.08153,4.42217 9039,Schelle,1373,VLG,22,BE,51.12615,4.34114 9040,Schilde,1373,VLG,22,BE,51.24107,4.58336 9041,Schoten,1373,VLG,22,BE,51.25251,4.50268 9045,Sint-Amands,1373,VLG,22,BE,51.05645,4.20957 9046,Sint-Genesius-Rode,1373,VLG,22,BE,50.74645,4.35754 9047,Sint-Gillis-Waas,1373,VLG,22,BE,51.21914,4.12374 9048,Sint-Joris,1373,VLG,22,BE,50.87117,5.272 9049,Sint-Katelijne-Waver,1373,VLG,22,BE,51.06691,4.53469 9050,Sint-Kruis,1373,VLG,22,BE,51.21399,3.24949 9051,Sint-Laureins,1373,VLG,22,BE,51.24202,3.52441 9052,Sint-Lievens-Houtem,1373,VLG,22,BE,50.9197,3.86225 9053,Sint-Maria-Lierde,1373,VLG,22,BE,50.81867,3.84436 9054,Sint-Martens-Latem,1373,VLG,22,BE,51.01459,3.63779 9055,Sint-Martens-Lennik,1373,VLG,22,BE,50.81158,4.16965 9056,Sint-Niklaas,1373,VLG,22,BE,51.16509,4.1437 9057,Sint-Pieters-Leeuw,1373,VLG,22,BE,50.77926,4.24355 9058,Sint-Pieters-Voeren,1373,VLG,22,BE,50.73863,5.82224 9059,Sint-Truiden,1373,VLG,22,BE,50.81679,5.18647 9066,Stabroek,1373,VLG,22,BE,51.33189,4.37127 9067,Staden,1373,VLG,22,BE,50.97456,3.01469 9069,Steenokkerzeel,1373,VLG,22,BE,50.91851,4.50989 9070,Stekene,1373,VLG,22,BE,51.2099,4.03651 9073,Temse,1373,VLG,22,BE,51.12794,4.21372 9075,Terkoest,1373,VLG,22,BE,50.89832,5.27623 9076,Ternat,1373,VLG,22,BE,50.86654,4.16682 9077,Tervuren,1373,VLG,22,BE,50.82372,4.51418 9078,Tessenderlo,1373,VLG,22,BE,51.06513,5.08856 9081,Tielt,1373,VLG,22,BE,50.99931,3.32707 9082,Tienen,1373,VLG,22,BE,50.80745,4.9378 9085,Tongeren,1373,VLG,22,BE,50.78054,5.46484 9086,Torhout,1373,VLG,22,BE,51.0656,3.10085 9088,Tremelo,1373,VLG,22,BE,50.99231,4.70807 9092,Turnhout,1373,VLG,22,BE,51.32254,4.94471 9096,Veurne,1373,VLG,22,BE,51.07316,2.66803 9100,Vilvoorde,1373,VLG,22,BE,50.92814,4.42938 9103,Vorselaar,1373,VLG,22,BE,51.20243,4.77259 9104,Vosselaar,1373,VLG,22,BE,51.30856,4.8896 9105,Waarschoot,1373,VLG,22,BE,51.1525,3.605 9106,Waasmunster,1373,VLG,22,BE,51.10572,4.08573 9107,Wachtebeke,1373,VLG,22,BE,51.16852,3.87183 9112,Waregem,1373,VLG,22,BE,50.88898,3.42756 9118,Wellen,1373,VLG,22,BE,50.84096,5.33867 9120,Wemmel,1373,VLG,22,BE,50.90812,4.30613 9121,Wenduine,1373,VLG,22,BE,51.2983,3.08213 9122,Wervik,1373,VLG,22,BE,50.78069,3.03854 9123,Westerlo,1373,VLG,22,BE,51.09049,4.91544 9124,Wetteren,1373,VLG,22,BE,51.00526,3.88341 9125,Wevelgem,1373,VLG,22,BE,50.8,3.16667 9126,Wezembeek-Oppem,1373,VLG,22,BE,50.8395,4.49427 9127,Wichelen,1373,VLG,22,BE,51.00526,3.97683 9128,Wielsbeke,1373,VLG,22,BE,50.9,3.36667 9129,Wijnegem,1373,VLG,22,BE,51.22787,4.51895 9130,Willebroek,1373,VLG,22,BE,51.06041,4.36019 9131,Wingene,1373,VLG,22,BE,51.05782,3.27359 9132,Wommelgem,1373,VLG,22,BE,51.20452,4.5225 9133,Wuustwezel,1373,VLG,22,BE,51.39214,4.59546 9135,Zandhoven,1373,VLG,22,BE,51.21488,4.66164 9136,Zaventem,1373,VLG,22,BE,50.88365,4.47298 9137,Zedelgem,1373,VLG,22,BE,51.14236,3.1368 9138,Zeebrugge,1373,VLG,22,BE,51.32901,3.18188 9139,Zele,1373,VLG,22,BE,51.06566,4.0403 9140,Zelzate,1373,VLG,22,BE,51.18963,3.80777 9141,Zemst,1373,VLG,22,BE,50.98318,4.46079 9142,Zingem,1373,VLG,22,BE,50.90409,3.65305 9143,Zoersel,1373,VLG,22,BE,51.26825,4.71296 9144,Zomergem,1373,VLG,22,BE,51.11994,3.56496 9145,Zonhoven,1373,VLG,22,BE,50.99064,5.36819 9146,Zonnebeke,1373,VLG,22,BE,50.8726,2.98725 9147,Zottegem,1373,VLG,22,BE,50.86955,3.81052 9148,Zoutleeuw,1373,VLG,22,BE,50.83316,5.10376 9149,Zuienkerke,1373,VLG,22,BE,51.26511,3.15506 9150,Zulte,1373,VLG,22,BE,50.91954,3.44859 9151,Zutendaal,1373,VLG,22,BE,50.93306,5.5753 9152,Zwevegem,1373,VLG,22,BE,50.81268,3.33848 9153,Zwijndrecht,1373,VLG,22,BE,51.21979,4.32664 8612,Aiseau,1380,WAL,22,BE,50.41158,4.58671 8615,Amay,1380,WAL,22,BE,50.54829,5.30974 8616,Amblève,1380,WAL,22,BE,50.35357,6.17002 8617,Andenne,1380,WAL,22,BE,50.48941,5.09513 8618,Anderlues,1380,WAL,22,BE,50.40704,4.27136 8619,Anhée,1380,WAL,22,BE,50.31039,4.87827 8620,Ans,1380,WAL,22,BE,50.6623,5.52029 8621,Anthisnes,1380,WAL,22,BE,50.48323,5.519 8622,Antoing,1380,WAL,22,BE,50.56765,3.4492 8627,Arlon,1380,WAL,22,BE,49.68333,5.81667 8631,Assesse,1380,WAL,22,BE,50.36934,5.02204 8632,Ath,1380,WAL,22,BE,50.62937,3.77801 8633,Attert,1380,WAL,22,BE,49.75035,5.78634 8634,Aubange,1380,WAL,22,BE,49.56652,5.80492 8635,Aubel,1380,WAL,22,BE,50.70189,5.85812 8637,Awans,1380,WAL,22,BE,50.66774,5.46329 8638,Aywaille,1380,WAL,22,BE,50.47411,5.67684 8640,Baelen,1380,WAL,22,BE,50.63131,5.97433 8642,Basse Lasne,1380,WAL,22,BE,50.69503,4.49218 8643,Bassenge,1380,WAL,22,BE,50.75883,5.60989 8644,Bastogne,1380,WAL,22,BE,50.00347,5.71844 8645,Beaumont,1380,WAL,22,BE,50.23699,4.23926 8646,Beauraing,1380,WAL,22,BE,50.11042,4.95554 8647,Beauvechain,1380,WAL,22,BE,50.78195,4.7718 8653,Beloeil,1380,WAL,22,BE,50.55047,3.73484 8657,Berloz,1380,WAL,22,BE,50.69829,5.21236 8658,Bernissart,1380,WAL,22,BE,50.4746,3.64961 8660,Bertogne,1380,WAL,22,BE,50.08364,5.66689 8661,Bertrix,1380,WAL,22,BE,49.85596,5.25539 8664,Beyne-Heusay,1380,WAL,22,BE,50.62251,5.66508 8668,Bièvre,1380,WAL,22,BE,49.94085,5.01591 8667,Binche,1380,WAL,22,BE,50.41155,4.16469 8670,Blégny,1380,WAL,22,BE,50.67255,5.72508 8679,Bouillon,1380,WAL,22,BE,49.79324,5.06703 8680,Boussu,1380,WAL,22,BE,50.43417,3.7944 8682,Braine-lAlleud,1380,WAL,22,BE,50.68363,4.36784 8683,Braine-le-Château,1380,WAL,22,BE,50.6799,4.27385 8684,Braine-le-Comte,1380,WAL,22,BE,50.60979,4.14658 8685,Braives,1380,WAL,22,BE,50.61745,5.13302 8690,Brugelette,1380,WAL,22,BE,50.59577,3.85363 8692,Brunehault,1380,WAL,22,BE,50.50524,4.43209 8695,Bullange,1380,WAL,22,BE,50.40731,6.25749 8696,Burdinne,1380,WAL,22,BE,50.58454,5.07663 8697,Butgenbach,1380,WAL,22,BE,50.42689,6.20504 8698,Celles,1380,WAL,22,BE,50.71229,3.45733 8699,Cerfontaine,1380,WAL,22,BE,50.17047,4.41028 8700,Chapelle-lez-Herlaimont,1380,WAL,22,BE,50.4713,4.28227 8701,Charleroi,1380,WAL,22,BE,50.41136,4.44448 8702,Chastre-Villeroux-Blanmont,1380,WAL,22,BE,50.60857,4.64198 8708,Châtelet,1380,WAL,22,BE,50.40338,4.52826 8703,Chaudfontaine,1380,WAL,22,BE,50.5828,5.6341 8704,Chaumont-Gistoux,1380,WAL,22,BE,50.67753,4.7212 8707,Chièvres,1380,WAL,22,BE,50.58787,3.80711 8705,Chimay,1380,WAL,22,BE,50.04856,4.31712 8706,Chiny,1380,WAL,22,BE,49.73833,5.34104 8709,Ciney,1380,WAL,22,BE,50.29449,5.10015 8710,Clavier,1380,WAL,22,BE,50.40069,5.35154 8711,Colfontaine,1380,WAL,22,BE,50.4141,3.85569 8712,Comblain-au-Pont,1380,WAL,22,BE,50.47488,5.57711 8713,Courcelles,1380,WAL,22,BE,50.46379,4.3747 8714,Court-Saint-Étienne,1380,WAL,22,BE,50.63378,4.56851 8715,Couvin,1380,WAL,22,BE,50.05284,4.49495 8716,Crisnée,1380,WAL,22,BE,50.71703,5.39802 8717,Dalhem,1380,WAL,22,BE,50.71315,5.72774 8719,Daverdisse,1380,WAL,22,BE,50.02161,5.11811 8736,Dinant,1380,WAL,22,BE,50.25807,4.91166 8737,Dison,1380,WAL,22,BE,50.61004,5.8534 8738,Doische,1380,WAL,22,BE,50.13356,4.73545 8739,Donceel,1380,WAL,22,BE,50.64827,5.32 8740,Dour,1380,WAL,22,BE,50.39583,3.77792 8743,Durbuy,1380,WAL,22,BE,50.35291,5.45631 9154,Écaussinnes-d’Enghien,1380,WAL,22,BE,50.56822,4.1658 9155,Éghezée,1380,WAL,22,BE,50.59076,4.91175 8746,Ellezelles,1380,WAL,22,BE,50.73512,3.67985 8747,Enghien,1380,WAL,22,BE,50.68373,4.03284 8748,Engis,1380,WAL,22,BE,50.58156,5.39916 9156,Érezée,1380,WAL,22,BE,50.29292,5.55815 8749,Erquelinnes,1380,WAL,22,BE,50.30688,4.11129 8750,Esneux,1380,WAL,22,BE,50.53596,5.56775 8752,Estaimpuis,1380,WAL,22,BE,50.70485,3.26785 8753,Estinnes-au-Val,1380,WAL,22,BE,50.41016,4.10477 9157,Étalle,1380,WAL,22,BE,49.67385,5.60019 8754,Eupen,1380,WAL,22,BE,50.6279,6.03647 8756,Faimes,1380,WAL,22,BE,50.66252,5.26005 8757,Farciennes,1380,WAL,22,BE,50.43006,4.54152 8758,Fauvillers,1380,WAL,22,BE,49.85116,5.66405 8759,Ferrières,1380,WAL,22,BE,50.40157,5.61092 8760,Fexhe-le-Haut-Clocher,1380,WAL,22,BE,50.6654,5.39978 8766,Flémalle-Haute,1380,WAL,22,BE,50.59994,5.44471 8767,Fléron,1380,WAL,22,BE,50.61516,5.68062 8761,Fleurus,1380,WAL,22,BE,50.48351,4.55006 8762,Flobecq,1380,WAL,22,BE,50.73733,3.73876 8763,Floreffe,1380,WAL,22,BE,50.43452,4.7596 8764,Florennes,1380,WAL,22,BE,50.25127,4.60636 8765,Florenville,1380,WAL,22,BE,49.69983,5.3074 8768,Forville,1380,WAL,22,BE,50.57424,4.99861 8769,Fosses-la-Ville,1380,WAL,22,BE,50.39517,4.69623 8770,Frameries,1380,WAL,22,BE,50.40578,3.89603 8771,Frasnes-lez-Buissenal,1380,WAL,22,BE,50.66783,3.62047 8772,Froidchapelle,1380,WAL,22,BE,50.15106,4.32742 8775,Gedinne,1380,WAL,22,BE,49.98037,4.93674 8777,Geer,1380,WAL,22,BE,50.6699,5.17364 8779,Gembloux,1380,WAL,22,BE,50.56149,4.69889 8780,Genappe,1380,WAL,22,BE,50.61173,4.45152 8784,Gerpinnes,1380,WAL,22,BE,50.33789,4.52731 8785,Gesves,1380,WAL,22,BE,50.40146,5.07457 8790,Gouvy,1380,WAL,22,BE,50.186,5.93917 8791,Grez-Doiceau,1380,WAL,22,BE,50.73901,4.69829 8796,Habay-la-Vieille,1380,WAL,22,BE,49.72329,5.61999 8800,Hamoir,1380,WAL,22,BE,50.42675,5.53304 8801,Hamois,1380,WAL,22,BE,50.3402,5.15619 8802,Hannut,1380,WAL,22,BE,50.67142,5.07898 8805,Hastière-Lavaux,1380,WAL,22,BE,50.21849,4.82446 8806,Havelange,1380,WAL,22,BE,50.38931,5.23816 8811,Hensies,1380,WAL,22,BE,50.43263,3.68411 8812,Herbeumont,1380,WAL,22,BE,49.78086,5.2358 8839,Héron,1380,WAL,22,BE,50.54731,5.09774 8819,Herstal,1380,WAL,22,BE,50.66415,5.62346 8820,Herve,1380,WAL,22,BE,50.64083,5.79353 8830,Hotton,1380,WAL,22,BE,50.26742,5.44609 8831,Houffalize,1380,WAL,22,BE,50.13235,5.78962 8834,Houyet,1380,WAL,22,BE,50.18619,5.00762 8838,Huy,1380,WAL,22,BE,50.51894,5.23284 8842,Incourt,1380,WAL,22,BE,50.69151,4.79816 8844,Ittre,1380,WAL,22,BE,50.64396,4.26476 8847,Jalhay,1380,WAL,22,BE,50.55876,5.96764 8848,Jodoigne,1380,WAL,22,BE,50.72357,4.86914 8849,Juprelle,1380,WAL,22,BE,50.7076,5.53127 8850,Jurbise,1380,WAL,22,BE,50.531,3.90942 8873,La Bruyère,1380,WAL,22,BE,50.39478,4.61444 8874,La Calamine,1380,WAL,22,BE,50.71809,6.01107 8875,La Hulpe,1380,WAL,22,BE,50.73091,4.48577 8876,La Louvière,1380,WAL,22,BE,50.48657,4.18785 8877,La Roche-en-Ardenne,1380,WAL,22,BE,50.18361,5.57547 8911,Léglise,1380,WAL,22,BE,49.79985,5.53652 8886,Lens,1380,WAL,22,BE,50.55696,3.89946 8888,Lessines,1380,WAL,22,BE,50.71104,3.83579 8890,Libin,1380,WAL,22,BE,49.98107,5.25612 8900,Liège,1380,WAL,22,BE,50.63373,5.56749 8894,Lierneux,1380,WAL,22,BE,50.28477,5.79236 8896,Limbourg,1380,WAL,22,BE,50.61222,5.9412 8897,Lincent,1380,WAL,22,BE,50.71222,5.03654 8901,Lobbes,1380,WAL,22,BE,50.35258,4.26716 8906,Lontzen,1380,WAL,22,BE,50.68126,6.00712 8907,Louvain-la-Neuve,1380,WAL,22,BE,50.66829,4.61443 8916,Malmédy,1380,WAL,22,BE,50.42686,6.02794 8917,Manage,1380,WAL,22,BE,50.50312,4.23589 8918,Manhay,1380,WAL,22,BE,50.29219,5.67562 8919,Marche-en-Famenne,1380,WAL,22,BE,50.22678,5.34416 8920,Marchin,1380,WAL,22,BE,50.46707,5.2428 8921,Martelange,1380,WAL,22,BE,49.83195,5.73655 8925,Meix-devant-Virton,1380,WAL,22,BE,49.60581,5.48045 8928,Merbes-le-Château,1380,WAL,22,BE,50.32449,4.16489 8932,Messancy,1380,WAL,22,BE,49.59201,5.81879 8933,Mettet,1380,WAL,22,BE,50.32119,4.66232 8936,Modave,1380,WAL,22,BE,50.44614,5.29532 8939,Momignies,1380,WAL,22,BE,50.0271,4.16519 8940,Mons,1380,WAL,22,BE,50.45413,3.95229 8941,Mons-lez-Liège,1380,WAL,22,BE,50.61667,5.46667 8942,Mont-Saint-Guibert,1380,WAL,22,BE,50.63427,4.61061 8944,Morlanwelz-Mariemont,1380,WAL,22,BE,50.45502,4.24519 8946,Mouscron,1380,WAL,22,BE,50.74497,3.20639 8947,Musson,1380,WAL,22,BE,49.55835,5.70525 8948,Namur,1380,WAL,22,BE,50.4669,4.86746 8949,Nandrin,1380,WAL,22,BE,50.50675,5.41905 8950,Nassogne,1380,WAL,22,BE,50.12849,5.34274 8953,Neufchâteau,1380,WAL,22,BE,49.84074,5.43535 8960,Nivelles,1380,WAL,22,BE,50.59833,4.32848 8961,Noville-les-Bois,1380,WAL,22,BE,50.55702,4.98466 8962,Ohey,1380,WAL,22,BE,50.4357,5.12375 8964,Olne,1380,WAL,22,BE,50.58994,5.74662 8965,Onhaye,1380,WAL,22,BE,50.24148,4.84069 8973,Oreye,1380,WAL,22,BE,50.71749,5.3488 8975,Ottignies,1380,WAL,22,BE,50.66535,4.56679 8980,Ouffet,1380,WAL,22,BE,50.4387,5.4657 8981,Oupeye,1380,WAL,22,BE,50.71184,5.6468 8984,Paliseul,1380,WAL,22,BE,49.90395,5.13537 8985,Pecq,1380,WAL,22,BE,50.68619,3.33789 8988,Pepinster,1380,WAL,22,BE,50.57375,5.8049 9009,Péruwelz,1380,WAL,22,BE,50.50819,3.59373 8990,Perwez,1380,WAL,22,BE,50.62426,4.81354 8991,Philippeville,1380,WAL,22,BE,50.19612,4.54374 8993,Plombières,1380,WAL,22,BE,50.73656,5.95922 8994,Pont-à-Celles,1380,WAL,22,BE,50.50518,4.36887 8996,Profondeville,1380,WAL,22,BE,50.37581,4.86506 8997,Province de Liège,1380,WAL,22,BE,50.63427,5.56543 8998,Province de Namur,1380,WAL,22,BE,50.33333,4.83333 8999,Province du Brabant Wallon,1380,WAL,22,BE,50.75,4.58333 9000,Province du Hainaut,1380,WAL,22,BE,50.5,3.83333 9001,Province du Luxembourg,1380,WAL,22,BE,50.0,5.5 9010,Quaregnon,1380,WAL,22,BE,50.44067,3.8653 9012,Quévy-le-Petit,1380,WAL,22,BE,50.36879,3.93602 9011,Quiévrain,1380,WAL,22,BE,50.40737,3.68351 9013,Raeren,1380,WAL,22,BE,50.6672,6.11535 9014,Ramillies,1380,WAL,22,BE,50.63395,4.90119 9017,Rebecq-Rognon,1380,WAL,22,BE,50.65147,4.10683 9018,Remicourt,1380,WAL,22,BE,50.68069,5.32785 9019,Rendeux,1380,WAL,22,BE,50.23423,5.50414 9023,Rixensart,1380,WAL,22,BE,50.71229,4.52529 9024,Rochefort,1380,WAL,22,BE,50.1631,5.2216 9026,Roeulx,1380,WAL,22,BE,50.50365,4.11163 9029,Rouvroy,1380,WAL,22,BE,49.53771,5.49031 9031,Rumes,1380,WAL,22,BE,50.5545,3.30535 9033,Saint-Ghislain,1380,WAL,22,BE,50.44816,3.81886 9034,Saint-Hubert,1380,WAL,22,BE,50.02668,5.37401 9035,Saint-Léger,1380,WAL,22,BE,49.61196,5.65688 9036,Saint-Nicolas,1380,WAL,22,BE,50.62837,5.53243 9037,Saint-Vith,1380,WAL,22,BE,50.28146,6.12724 9038,Sainte-Ode,1380,WAL,22,BE,50.01723,5.51926 9042,Seneffe,1380,WAL,22,BE,50.53135,4.26301 9043,Seraing,1380,WAL,22,BE,50.58362,5.50115 9044,Silly,1380,WAL,22,BE,50.64877,3.92363 9060,Soignies,1380,WAL,22,BE,50.57904,4.07129 9061,Sombreffe,1380,WAL,22,BE,50.52865,4.60087 9062,Somme-Leuze,1380,WAL,22,BE,50.33699,5.36705 9063,Soumagne,1380,WAL,22,BE,50.61385,5.74679 9064,Spa,1380,WAL,22,BE,50.48375,5.86674 9065,Sprimont,1380,WAL,22,BE,50.50922,5.6595 9068,Stavelot,1380,WAL,22,BE,50.395,5.93124 9071,Stoumont,1380,WAL,22,BE,50.40667,5.80838 9072,Tellin,1380,WAL,22,BE,50.08038,5.21638 9074,Tenneville,1380,WAL,22,BE,50.09501,5.52895 9079,Theux,1380,WAL,22,BE,50.53323,5.81245 9080,Thuin,1380,WAL,22,BE,50.33933,4.28604 9083,Tinlot,1380,WAL,22,BE,50.47493,5.37755 9084,Tintigny,1380,WAL,22,BE,49.68326,5.51349 9087,Tournai,1380,WAL,22,BE,50.60715,3.38932 9089,Trois-Ponts,1380,WAL,22,BE,50.37128,5.87146 9090,Trooz,1380,WAL,22,BE,50.57026,5.69521 9091,Tubize,1380,WAL,22,BE,50.69059,4.2009 9093,Vaux-sur-Sûre,1380,WAL,22,BE,49.911,5.57848 9094,Verlaine,1380,WAL,22,BE,50.60743,5.3174 9095,Verviers,1380,WAL,22,BE,50.58907,5.86241 9097,Vielsalm,1380,WAL,22,BE,50.28407,5.91502 9098,Villers-la-Ville,1380,WAL,22,BE,50.56667,4.51667 9099,Villers-le-Bouillet,1380,WAL,22,BE,50.57708,5.25945 9101,Virton,1380,WAL,22,BE,49.56824,5.53259 9102,Visé,1380,WAL,22,BE,50.7376,5.69907 9108,Waimes,1380,WAL,22,BE,50.41488,6.11207 9109,Walcourt,1380,WAL,22,BE,50.25401,4.43796 9110,Walhain-Saint-Paul,1380,WAL,22,BE,50.62627,4.69837 9111,Wanze,1380,WAL,22,BE,50.53907,5.20846 9113,Waremme,1380,WAL,22,BE,50.6976,5.25524 9114,Wasseiges,1380,WAL,22,BE,50.62186,5.00528 9115,Waterloo,1380,WAL,22,BE,50.71469,4.3991 9116,Wavre,1380,WAL,22,BE,50.71717,4.60138 9117,Welkenraedt,1380,WAL,22,BE,50.6605,5.97034 9119,Wellin,1380,WAL,22,BE,50.08133,5.11413 9134,Yvoir,1380,WAL,22,BE,50.3279,4.88059 8233,Brčko,460,BRC,28,BA,44.86995,18.81012 8230,Brka,460,BRC,28,BA,44.82837,18.7242 8217,Banovići,467,BIH,28,BA,44.40596,18.52648 8218,Barice,467,BIH,28,BA,44.54065,18.48069 8219,Bihać,467,BIH,28,BA,44.81694,15.87083 8220,Bijela,467,BIH,28,BA,43.60871,17.95078 8222,Bila,467,BIH,28,BA,43.78265,16.92676 8224,Blagaj,467,BIH,28,BA,43.25892,17.88815 8226,Bosanska Krupa,467,BIH,28,BA,44.8825,16.15139 8227,Bosanski Petrovac,467,BIH,28,BA,44.55537,16.36897 8228,Bosansko Grahovo,467,BIH,28,BA,44.17944,16.36389 8229,Breza,467,BIH,28,BA,44.01862,18.26063 8234,Bugojno,467,BIH,28,BA,44.05722,17.45083 8235,Busovača,467,BIH,28,BA,44.09769,17.8783 8236,Bužim,467,BIH,28,BA,45.05361,16.03254 8431,Čapljina,467,BIH,28,BA,43.12139,17.68444 8237,Cazin,467,BIH,28,BA,44.96694,15.94306 8433,Čelić,467,BIH,28,BA,44.72524,18.81474 8238,Cim,467,BIH,28,BA,43.35401,17.78045 8435,Čitluk,467,BIH,28,BA,43.22861,17.70083 8429,Ćoralići,467,BIH,28,BA,45.00694,15.87194 8239,Crnići,467,BIH,28,BA,43.13156,17.86452 8241,Divičani,467,BIH,28,BA,44.36682,17.32678 8243,Dobrinje,467,BIH,28,BA,44.05008,18.11958 8245,Domaljevac,467,BIH,28,BA,45.0611,18.58612 8246,Donja Dubica,467,BIH,28,BA,45.07559,18.41023 8247,Donja Mahala,467,BIH,28,BA,45.04327,18.66996 8248,Donja Međiđa,467,BIH,28,BA,44.80235,18.40477 8249,Donji Vakuf,467,BIH,28,BA,44.14361,17.4 8250,Drežnica,467,BIH,28,BA,43.52891,17.2812 8251,Drinovci,467,BIH,28,BA,43.35454,17.32536 8252,Drvar,467,BIH,28,BA,44.37389,16.38083 8253,Dubrave Donje,467,BIH,28,BA,44.4806,18.69709 8254,Dubrave Gornje,467,BIH,28,BA,44.47229,18.72685 8255,Dubravica,467,BIH,28,BA,44.44131,18.11883 8257,Fojnica,467,BIH,28,BA,43.95952,17.90288 8260,Glamoč,467,BIH,28,BA,44.04583,16.84861 8261,Gnojnica,467,BIH,28,BA,44.62058,18.44684 8262,Goražde,467,BIH,28,BA,43.66795,18.97564 8263,Gorica,467,BIH,28,BA,43.41833,17.285 8264,Gornja Breza,467,BIH,28,BA,44.03758,18.24564 8265,Gornja Koprivna,467,BIH,28,BA,45.01091,15.95487 8266,Gornja Tuzla,467,BIH,28,BA,44.55659,18.76159 8267,Gornje Moštre,467,BIH,28,BA,44.01911,18.15477 8268,Gornje Živinice,467,BIH,28,BA,44.42921,18.61667 8269,Gornji Vakuf,467,BIH,28,BA,43.93806,17.58833 8270,Gostovići,467,BIH,28,BA,44.41124,18.17029 8273,Gračanica,467,BIH,28,BA,43.73333,18.28333 8271,Gradačac,467,BIH,28,BA,44.87851,18.42764 8274,Gromiljak,467,BIH,28,BA,43.96668,18.05504 8275,Grude,467,BIH,28,BA,43.37208,17.41449 8276,Hadžići,467,BIH,28,BA,43.82222,18.20667 8277,Hercegovačko-Neretvanski Kanton,467,BIH,28,BA,43.45722,17.8125 8279,Hotonj,467,BIH,28,BA,43.89341,18.37751 8281,Ilići,467,BIH,28,BA,43.34765,17.76848 8280,Ilijaš,467,BIH,28,BA,43.95128,18.27128 8283,Izačić,467,BIH,28,BA,44.87485,15.78256 8284,Jablanica,467,BIH,28,BA,43.66028,17.76167 8285,Jajce,467,BIH,28,BA,44.34203,17.27059 8287,Jelah,467,BIH,28,BA,44.654,17.95897 8288,Jezerski,467,BIH,28,BA,44.98172,16.09447 8293,Kačuni,467,BIH,28,BA,44.06433,17.93894 8289,Kakanj,467,BIH,28,BA,44.13311,18.12292 8291,Kanton Sarajevo,467,BIH,28,BA,43.84333,18.24222 8292,Karadaglije,467,BIH,28,BA,44.57065,18.01775 8294,Kiseljak,467,BIH,28,BA,44.48904,18.56982 8295,Kladanj,467,BIH,28,BA,44.22669,18.69274 8296,Ključ,467,BIH,28,BA,44.53251,16.77682 8299,Kobilja Glava,467,BIH,28,BA,43.88188,18.38864 8306,Kočerin,467,BIH,28,BA,43.39005,17.48552 8300,Konjic,467,BIH,28,BA,43.65126,17.96082 8304,Kovači,467,BIH,28,BA,44.44874,18.20521 8310,Liješnica,467,BIH,28,BA,44.49497,18.07644 8311,Livno,467,BIH,28,BA,43.82695,17.00746 8313,Ljubuški,467,BIH,28,BA,43.19694,17.545 8314,Lokvine,467,BIH,28,BA,44.20466,17.85665 8316,Lukavac,467,BIH,28,BA,44.54245,18.52618 8317,Lukavica,467,BIH,28,BA,44.76452,18.16887 8318,Maglaj,467,BIH,28,BA,44.54771,18.10003 8320,Mahala,467,BIH,28,BA,44.01194,18.25528 8321,Mala Kladuša,467,BIH,28,BA,45.13443,15.85217 8322,Malešići,467,BIH,28,BA,44.73824,18.27335 8327,Mionica,467,BIH,28,BA,44.86646,18.46603 8329,Mostar,467,BIH,28,BA,43.34333,17.80806 8330,Mramor,467,BIH,28,BA,44.59234,18.56458 8332,Neum,467,BIH,28,BA,42.92333,17.61556 8336,Novi Šeher,467,BIH,28,BA,44.51031,18.02624 8335,Novi Travnik,467,BIH,28,BA,44.17133,17.65816 8338,Odžak,467,BIH,28,BA,45.02461,18.32107 8339,Olovo,467,BIH,28,BA,44.1277,18.58065 8340,Omanjska,467,BIH,28,BA,44.69831,17.95757 8344,Orahovica Donja,467,BIH,28,BA,44.65345,18.36951 8345,Orašac,467,BIH,28,BA,44.63039,16.07443 8346,Orašje,467,BIH,28,BA,45.03366,18.69334 8347,Orguz,467,BIH,28,BA,43.77414,16.86329 8348,Ostrožac,467,BIH,28,BA,44.90866,15.94045 8349,Otoka,467,BIH,28,BA,44.96,16.17917 8351,Pajić Polje,467,BIH,28,BA,43.97583,17.5275 8353,Pazarić,467,BIH,28,BA,43.78882,18.16049 8356,Peći,467,BIH,28,BA,44.63139,16.7825 8357,Pećigrad,467,BIH,28,BA,45.05444,15.89694 8359,Pjanići,467,BIH,28,BA,44.98568,15.82304 8361,Podhum,467,BIH,28,BA,43.72295,16.99887 8362,Podzvizd,467,BIH,28,BA,45.17417,15.87361 8363,Polje,467,BIH,28,BA,43.88014,18.07452 8364,Polje-Bijela,467,BIH,28,BA,43.63299,17.97216 8366,Potoci,467,BIH,28,BA,43.40953,17.87855 8370,Prozor,467,BIH,28,BA,43.82222,17.60917 8371,Puračić,467,BIH,28,BA,44.54562,18.47865 8372,Radišići,467,BIH,28,BA,43.22302,17.54056 8373,Rodoč,467,BIH,28,BA,43.31453,17.8029 8376,Rumboci,467,BIH,28,BA,43.83154,17.50273 8377,Sanica,467,BIH,28,BA,44.61354,16.64062 8378,Sanski Most,467,BIH,28,BA,44.7667,16.667 8379,Sapna,467,BIH,28,BA,44.5038,18.99818 8380,Sarajevo,467,BIH,28,BA,43.84864,18.35644 8438,Šerići,467,BIH,28,BA,44.46674,18.5637 8440,Široki Brijeg,467,BIH,28,BA,43.3829,17.59416 8381,Skokovi,467,BIH,28,BA,45.03139,15.91444 8382,Sladna,467,BIH,28,BA,44.72897,18.42575 8384,Solina,467,BIH,28,BA,44.56226,18.69322 8387,Srebrenik,467,BIH,28,BA,44.70819,18.48834 8390,Stijena,467,BIH,28,BA,44.9363,16.02224 8391,Stjepan-Polje,467,BIH,28,BA,44.71634,18.25783 8392,Stolac,467,BIH,28,BA,43.084,17.95995 8441,Šturlić,467,BIH,28,BA,45.06389,15.77806 8442,Šumatac,467,BIH,28,BA,45.09743,15.85818 8394,Tasovčići,467,BIH,28,BA,43.11333,17.72 8396,Tešanj,467,BIH,28,BA,44.61191,17.98552 8397,Tešanjka,467,BIH,28,BA,44.67228,18.01109 8398,Todorovo,467,BIH,28,BA,45.08833,15.93083 8399,Tojšići,467,BIH,28,BA,44.50133,18.78523 8400,Tomislavgrad,467,BIH,28,BA,43.71849,17.22515 8401,Travnik,467,BIH,28,BA,44.22637,17.66583 8404,Tržačka Raštela,467,BIH,28,BA,44.97597,15.78489 8405,Turbe,467,BIH,28,BA,44.24352,17.57499 8406,Tuzla,467,BIH,28,BA,44.53842,18.66709 8408,Ustikolina,467,BIH,28,BA,43.58338,18.79106 8409,Vareš,467,BIH,28,BA,44.16444,18.32833 8410,Varoška Rijeka,467,BIH,28,BA,45.08936,16.01906 8411,Velagići,467,BIH,28,BA,44.55618,16.73349 8412,Velika Kladuša,467,BIH,28,BA,45.18497,15.80579 8414,Vidoši,467,BIH,28,BA,43.77139,17.02833 8415,Visoko,467,BIH,28,BA,43.98889,18.17806 8416,Vitez,467,BIH,28,BA,44.15424,17.79009 8417,Vitina,467,BIH,28,BA,43.2375,17.48389 8420,Vogošća,467,BIH,28,BA,43.90225,18.34438 8421,Voljevac,467,BIH,28,BA,43.87873,17.65861 8422,Vrnograč,467,BIH,28,BA,45.16369,15.95444 8423,Vukovije Donje,467,BIH,28,BA,44.46209,18.74941 8424,Zabrišće,467,BIH,28,BA,43.79224,16.94224 8425,Zavidovići,467,BIH,28,BA,44.44583,18.14972 8426,Zborište,467,BIH,28,BA,45.14593,16.01728 8443,Željezno Polje,467,BIH,28,BA,44.39875,17.94103 8427,Zenica,467,BIH,28,BA,44.20169,17.90397 8444,Žepče,467,BIH,28,BA,44.42667,18.03778 8445,Živinice,467,BIH,28,BA,44.44929,18.64978 8215,Balatun,470,SRP,28,BA,44.86332,19.33931 8216,Banja Luka,470,SRP,28,BA,44.77842,17.19386 8221,Bijeljina,470,SRP,28,BA,44.76583,19.15083 8223,Bileća,470,SRP,28,BA,42.87645,18.42967 8225,Blatnica,470,SRP,28,BA,44.48677,17.82278 8231,Brod,470,SRP,28,BA,45.13747,17.98722 8232,Bronzani Majdan,470,SRP,28,BA,44.79237,16.94039 8430,Čajniče,470,SRP,28,BA,43.55712,19.07186 8434,Čečava,470,SRP,28,BA,44.67961,17.7578 8432,Čelinac,470,SRP,28,BA,44.72453,17.32431 8240,Derventa,470,SRP,28,BA,44.97839,17.90779 8242,Doboj,470,SRP,28,BA,44.75944,18.065 8244,Dobrljin,470,SRP,28,BA,45.15106,16.47869 8256,Dvorovi,470,SRP,28,BA,44.80753,19.25999 8258,Foča,470,SRP,28,BA,43.50646,18.77854 8259,Gacko,470,SRP,28,BA,43.16722,18.53528 8272,Gradiška,470,SRP,28,BA,45.14484,17.25453 8278,Hiseti,470,SRP,28,BA,44.76111,17.17944 8282,Istočni Mostar,470,SRP,28,BA,43.42056,18.00833 8286,Janja,470,SRP,28,BA,44.66554,19.24691 8290,Kalenderovci Donji,470,SRP,28,BA,44.94673,17.83785 8297,Kneževo,470,SRP,28,BA,44.49071,17.38161 8298,Knežica,470,SRP,28,BA,45.10548,16.67668 8301,Koran,470,SRP,28,BA,43.81038,18.56999 8302,Kostajnica,470,SRP,28,BA,45.21956,16.53929 8303,Kotor Varoš,470,SRP,28,BA,44.61831,17.37204 8305,Kozarska Dubica,470,SRP,28,BA,45.17667,16.80944 8307,Krupa na Vrbasu,470,SRP,28,BA,44.61875,17.14351 8308,Laktaši,470,SRP,28,BA,44.90857,17.30135 8309,Lamovita,470,SRP,28,BA,44.92018,16.89933 8312,Ljubinje,470,SRP,28,BA,42.9512,18.08702 8315,Lopare,470,SRP,28,BA,44.63498,18.8434 8319,Maglajani,470,SRP,28,BA,44.94975,17.35014 8323,Marićka,470,SRP,28,BA,44.86801,16.8551 8324,Maslovare,470,SRP,28,BA,44.56594,17.53216 8325,Mejdan - Obilićevo,470,SRP,28,BA,44.76324,17.19012 8326,Milići,470,SRP,28,BA,44.17016,19.09195 8328,Modriča,470,SRP,28,BA,44.95444,18.30361 8331,Mrkonjić Grad,470,SRP,28,BA,44.41729,17.08288 8333,Nevesinje,470,SRP,28,BA,43.25861,18.11333 8334,Novi Grad,470,SRP,28,BA,45.04643,16.37782 8337,Obudovac,470,SRP,28,BA,44.95215,18.59869 8341,Omarska,470,SRP,28,BA,44.8917,16.89814 8342,Opština Oštra Luka,470,SRP,28,BA,44.73278,16.82861 8343,Opština Višegrad,470,SRP,28,BA,43.72167,19.31361 8350,Oštra Luka,470,SRP,28,BA,44.99724,18.58464 8352,Pale,470,SRP,28,BA,43.81664,18.56949 8354,Pelagićevo,470,SRP,28,BA,44.90105,18.59185 8355,Petkovci,470,SRP,28,BA,44.46849,19.07466 8358,Piskavica,470,SRP,28,BA,44.86717,16.97464 8360,Podbrdo,470,SRP,28,BA,44.44189,17.01495 8365,Popovi,470,SRP,28,BA,44.76547,19.28667 8367,Pribinić,470,SRP,28,BA,44.6101,17.68981 8368,Priboj,470,SRP,28,BA,44.60233,18.93165 8369,Prijedor,470,SRP,28,BA,44.97991,16.71401 8374,Rogatica,470,SRP,28,BA,43.79894,19.00363 8375,Rudo,470,SRP,28,BA,43.61781,19.36719 8436,Šamac,470,SRP,28,BA,45.05987,18.46756 8437,Šekovići,470,SRP,28,BA,44.29896,18.85532 8439,Šipovo,470,SRP,28,BA,44.28237,17.08597 8383,Sokolac,470,SRP,28,BA,43.93817,18.80079 8385,Srbac,470,SRP,28,BA,45.0973,17.52331 8386,Srebrenica,470,SRP,28,BA,44.10748,19.29669 8388,Stanari,470,SRP,28,BA,44.74475,17.82714 8389,Starcevica,470,SRP,28,BA,44.75708,17.21178 8393,Svodna,470,SRP,28,BA,45.0377,16.54019 8395,Teslić,470,SRP,28,BA,44.60639,17.85972 8402,Trebinje,470,SRP,28,BA,42.71197,18.34362 8403,Trn,470,SRP,28,BA,44.85829,17.23583 8407,Ugljevik,470,SRP,28,BA,44.66361,19.02028 8413,Velika Obarska,470,SRP,28,BA,44.80461,19.16183 8418,Višegrad,470,SRP,28,BA,43.7826,19.29256 8419,Vlasenica,470,SRP,28,BA,44.18183,18.94096 8446,Živinice,470,SRP,28,BA,44.54765,17.37357 8428,Zvornik,470,SRP,28,BA,44.38605,19.10247 9265,Bansko,4699,01,34,BG,41.8383,23.48851 9270,Belitsa,4699,01,34,BG,41.95694,23.5725 9275,Blagoevgrad,4699,01,34,BG,42.01667,23.1 9329,Garmen,4699,01,34,BG,41.6,23.81667 9335,Gotse Delchev,4699,01,34,BG,41.56667,23.73333 9341,Hadzhidimovo,4699,01,34,BG,41.52222,23.86861 9368,Kolarovo,4699,01,34,BG,41.36385,23.10669 9374,Kresna,4699,01,34,BG,41.73333,23.15 9422,Obshtina Bansko,4699,01,34,BG,41.8,23.6 9425,Obshtina Belitsa,4699,01,34,BG,42.01667,23.58333 9429,Obshtina Blagoevgrad,4699,01,34,BG,42.01667,23.16667 9476,Obshtina Garmen,4699,01,34,BG,41.7,23.85 9482,Obshtina Gotse Delchev,4699,01,34,BG,41.63333,23.68333 9511,Obshtina Kresna,4699,01,34,BG,41.76667,23.23333 9555,Obshtina Petrich,4699,01,34,BG,41.45,23.16667 9571,Obshtina Razlog,4699,01,34,BG,41.95,23.46667 9582,Obshtina Sandanski,4699,01,34,BG,41.56667,23.45 9584,Obshtina Satovcha,4699,01,34,BG,41.59848,24.00781 9589,Obshtina Simitli,4699,01,34,BG,41.88333,23.16667 9603,Obshtina Strumyani,4699,01,34,BG,41.63333,23.2 9633,Obshtina Yakoruda,4699,01,34,BG,42.08333,23.7 9653,Petrich,4699,01,34,BG,41.39846,23.20702 9670,Razlog,4699,01,34,BG,41.8863,23.46714 9681,Sandanski,4699,01,34,BG,41.56667,23.28333 9686,Satovcha,4699,01,34,BG,41.61667,23.98333 9694,Simitli,4699,01,34,BG,41.88333,23.11667 9705,Stara Kresna,4699,01,34,BG,41.8,23.18333 9711,Strumyani,4699,01,34,BG,41.63333,23.2 9745,Yakoruda,4699,01,34,BG,42.02528,23.68417 9250,Aheloy,4715,02,34,BG,42.64987,27.64838 9251,Ahtopol,4715,02,34,BG,42.09768,27.93961 9261,Aytos,4715,02,34,BG,42.7,27.25 9266,Bata,4715,02,34,BG,42.73802,27.49643 9292,Burgas,4715,02,34,BG,42.50606,27.46781 9299,Chernomorets,4715,02,34,BG,42.44408,27.63902 9353,Kameno,4715,02,34,BG,42.57084,27.29875 9356,Karnobat,4715,02,34,BG,42.65,26.98333 9363,Kiten,4715,02,34,BG,42.23424,27.7749 9397,Malko Tarnovo,4715,02,34,BG,41.97958,27.52477 9406,Nesebar,4715,02,34,BG,42.65921,27.73602 9419,Obshtina Aytos,4715,02,34,BG,42.7,27.25 9442,Obshtina Burgas,4715,02,34,BG,42.5,27.46667 9495,Obshtina Kameno,4715,02,34,BG,42.51667,27.18333 9498,Obshtina Karnobat,4715,02,34,BG,42.65,26.98333 9529,Obshtina Malko Tarnovo,4715,02,34,BG,42.08333,27.53333 9538,Obshtina Nesebar,4715,02,34,BG,42.78333,27.73333 9560,Obshtina Pomorie,4715,02,34,BG,42.73333,27.55 9564,Obshtina Primorsko,4715,02,34,BG,42.25,27.63333 9596,Obshtina Sozopol,4715,02,34,BG,42.31123,27.51733 9605,Obshtina Sungurlare,4715,02,34,BG,42.83333,26.83333 9640,Obzor,4715,02,34,BG,42.81998,27.88007 9658,Pomorie,4715,02,34,BG,42.56326,27.62986 9662,Primorsko,4715,02,34,BG,42.26791,27.75611 9668,Ravda,4715,02,34,BG,42.64185,27.67713 9674,Ruen,4715,02,34,BG,42.8,27.28333 9683,Sarafovo,4715,02,34,BG,42.56079,27.52195 9702,Sozopol,4715,02,34,BG,42.41801,27.6956 9703,Sredets,4715,02,34,BG,42.34747,27.17898 9713,Sungurlare,4715,02,34,BG,42.76667,26.78333 9715,Sveti Vlas,4715,02,34,BG,42.7136,27.75867 9728,Tsarevo,4715,02,34,BG,42.16955,27.84541 9262,Balchik,4718,08,34,BG,43.42166,28.15848 9310,Dobrich,4718,08,34,BG,43.56667,27.83333 9330,General Toshevo,4718,08,34,BG,43.70123,28.03787 9357,Kavarna,4718,08,34,BG,43.43601,28.33953 9378,Krushari,4718,08,34,BG,43.81675,27.75552 9420,Obshtina Balchik,4718,08,34,BG,43.5,28.13333 9457,Obshtina Dobrich,4718,08,34,BG,43.57763,27.80628 9458,Obshtina Dobrich-Selska,4718,08,34,BG,43.63333,27.73333 9477,Obshtina General Toshevo,4718,08,34,BG,43.73333,28.08333 9499,Obshtina Kavarna,4718,08,34,BG,43.5,28.38333 9514,Obshtina Krushari,4718,08,34,BG,43.88333,27.75 9587,Obshtina Shabla,4718,08,34,BG,43.61667,28.51667 9611,Obshtina Tervel,4718,08,34,BG,43.75,27.4 9690,Shabla,4718,08,34,BG,43.53983,28.53429 9720,Tervel,4718,08,34,BG,43.74789,27.40911 9318,Dryanovo,4693,07,34,BG,42.97897,25.4785 9328,Gabrovo,4693,07,34,BG,42.87472,25.33417 9465,Obshtina Dryanovo,4693,07,34,BG,43.0,25.46667 9474,Obshtina Gabrovo,4693,07,34,BG,42.9,25.3 9586,Obshtina Sevlievo,4693,07,34,BG,43.01667,25.1 9615,Obshtina Tryavna,4693,07,34,BG,42.85,25.55 9689,Sevlievo,4693,07,34,BG,43.02583,25.11361 9726,Tryavna,4693,07,34,BG,42.86667,25.5 9308,Dimitrovgrad,4704,26,34,BG,42.05,25.6 9342,Harmanli,4704,26,34,BG,41.93333,25.9 9343,Haskovo,4704,26,34,BG,41.93415,25.55557 9350,Ivaylovgrad,4704,26,34,BG,41.52672,26.1249 9392,Lyubimets,4704,26,34,BG,41.83333,26.08333 9394,Madzharovo,4704,26,34,BG,41.63461,25.86439 9401,Mineralni Bani,4704,26,34,BG,41.91667,25.35 9455,Obshtina Dimitrovgrad,4704,26,34,BG,42.05,25.6 9486,Obshtina Harmanli,4704,26,34,BG,41.93333,25.98333 9487,Obshtina Haskovo,4704,26,34,BG,41.88333,25.61667 9493,Obshtina Ivaylovgrad,4704,26,34,BG,41.48333,26.0 9527,Obshtina Madzharovo,4704,26,34,BG,41.68333,25.9 9532,Obshtina Mineralni Bani,4704,26,34,BG,41.9,25.33333 9598,Obshtina Stambolovo,4704,26,34,BG,41.73333,25.7 9607,Obshtina Svilengrad,4704,26,34,BG,41.86667,26.31667 9613,Obshtina Topolovgrad,4704,26,34,BG,42.08333,26.33333 9693,Simeonovgrad,4704,26,34,BG,42.03333,25.83333 9716,Svilengrad,4704,26,34,BG,41.76667,26.2 9722,Topolovgrad,4704,26,34,BG,42.08333,26.33333 9257,Ardino,4702,09,34,BG,41.58333,25.13333 9323,Dzhebel,4702,09,34,BG,41.49566,25.30363 9354,Kardzhali,4702,09,34,BG,41.65,25.36667 9362,Kirkovo,4702,09,34,BG,41.32715,25.36379 9377,Krumovgrad,4702,09,34,BG,41.47127,25.65485 9416,Obshtina Ardino,4702,09,34,BG,41.6,25.15 9448,Obshtina Chernoochene,4702,09,34,BG,41.78333,25.25 9469,Obshtina Dzhebel,4702,09,34,BG,41.5,25.26667 9496,Obshtina Kardzhali,4702,09,34,BG,41.68333,25.43333 9502,Obshtina Kirkovo,4702,09,34,BG,41.35816,25.33731 9535,Obshtina Momchilgrad,4702,09,34,BG,41.53333,25.5 9276,Boboshevo,4703,10,34,BG,42.15296,23.00146 9277,Bobov Dol,4703,10,34,BG,42.36256,23.00324 9321,Dupnitsa,4703,10,34,BG,42.26667,23.11667 9367,Kocherinovo,4703,10,34,BG,42.08439,23.0571 9381,Kyustendil,4703,10,34,BG,42.28389,22.69111 9407,Nevestino,4703,10,34,BG,42.25551,22.85175 9430,Obshtina Boboshevo,4703,10,34,BG,42.18333,23.02731 9431,Obshtina Bobov Dol,4703,10,34,BG,42.31667,22.98333 9467,Obshtina Dupnitsa,4703,10,34,BG,42.28333,23.15 9504,Obshtina Kocherinovo,4703,10,34,BG,42.09909,23.02942 9518,Obshtina Kyustendil,4703,10,34,BG,42.28333,22.68333 9539,Obshtina Nevestino,4703,10,34,BG,42.16667,22.83333 9572,Obshtina Rila,4703,10,34,BG,42.15,23.31667 9583,Obshtina Sapareva Banya,4703,10,34,BG,42.28333,23.31667 9614,Obshtina Treklyano,4703,10,34,BG,42.55,22.6 9671,Rila,4703,10,34,BG,42.13333,23.13333 9682,Sapareva Banya,4703,10,34,BG,42.28333,23.26667 9256,Apriltsi,4710,11,34,BG,42.84142,24.91759 9385,Letnitsa,4710,11,34,BG,43.31167,25.07333 9388,Lovech,4710,11,34,BG,43.13333,24.71667 9390,Lukovit,4710,11,34,BG,43.2,24.16667 9523,Obshtina Lovech,4710,11,34,BG,43.16667,24.8 9612,Obshtina Teteven,4710,11,34,BG,42.91667,24.26667 9621,Obshtina Ugarchin,4710,11,34,BG,43.1,24.41667 9721,Teteven,4710,11,34,BG,42.91667,24.26667 9725,Troyan,4710,11,34,BG,42.89427,24.71589 9732,Ugarchin,4710,11,34,BG,43.1,24.41667 9743,Yablanitsa,4710,11,34,BG,43.03139,24.11278 9274,Berkovitsa,4696,12,34,BG,43.23581,23.12738 9283,Boychinovtsi,4696,12,34,BG,43.47222,23.33583 9290,Brusartsi,4696,12,34,BG,43.66075,23.06732 9301,Chiprovtsi,4696,12,34,BG,43.38417,22.88083 9387,Lom,4696,12,34,BG,43.82106,23.23677 9398,Medkovets,4696,12,34,BG,43.62403,23.16876 9404,Montana,4696,12,34,BG,43.4125,23.225 9437,Obshtina Boychinovtsi,4696,12,34,BG,43.53333,23.43333 9450,Obshtina Chiprovtsi,4696,12,34,BG,43.41667,22.9 9478,Obshtina Georgi Damyanovo,4696,12,34,BG,43.35,23.0 9522,Obshtina Lom,4696,12,34,BG,43.81667,23.23333 9536,Obshtina Montana,4696,12,34,BG,43.46667,23.2 9622,Obshtina Valchedram,4696,12,34,BG,43.71667,23.51667 9625,Obshtina Varshets,4696,12,34,BG,43.21667,23.33333 9632,Obshtina Yakimovo,4696,12,34,BG,43.63333,23.33333 9733,Valchedram,4696,12,34,BG,43.69281,23.44518 9736,Varshets,4696,12,34,BG,43.19356,23.2868 9744,Yakimovo,4696,12,34,BG,43.63472,23.3535 9267,Batak,4712,13,34,BG,41.94225,24.21843 9273,Belovo,4712,13,34,BG,42.21239,24.02081 9286,Bratsigovo,4712,13,34,BG,42.01667,24.36667 9384,Lesichovo,4712,13,34,BG,42.35626,24.1119 9423,Obshtina Batak,4712,13,34,BG,41.86667,24.21667 9428,Obshtina Belovo,4712,13,34,BG,42.2,23.93333 9440,Obshtina Bratsigovo,4712,13,34,BG,42.0,24.4 9520,Obshtina Lesichovo,4712,13,34,BG,42.36667,24.15 9547,Obshtina Panagyurishte,4712,13,34,BG,42.5,24.16667 9551,Obshtina Pazardzhik,4712,13,34,BG,42.2,24.33333 9554,Obshtina Peshtera,4712,13,34,BG,42.03333,24.3 9568,Obshtina Rakitovo,4712,13,34,BG,41.99965,24.10877 9585,Obshtina Septemvri,4712,13,34,BG,42.26667,24.13333 9602,Obshtina Strelcha,4712,13,34,BG,42.46667,24.36667 9627,Obshtina Velingrad,4712,13,34,BG,41.96667,23.93333 9644,Panagyurishte,4712,13,34,BG,42.49518,24.19021 9649,Pazardzhik,4712,13,34,BG,42.2,24.33333 9652,Peshtera,4712,13,34,BG,42.03372,24.29995 9666,Rakitovo,4712,13,34,BG,41.99012,24.0873 9684,Sarnitsa,4712,13,34,BG,41.73835,24.02435 9685,Sarnitsa Obshtina,4712,13,34,BG,41.73333,24.03333 9688,Septemvri,4712,13,34,BG,42.21138,24.12946 9710,Strelcha,4712,13,34,BG,42.5,24.31667 9738,Velingrad,4712,13,34,BG,42.02754,23.99155 9268,Batanovtsi,4695,14,34,BG,42.59692,22.95634 9288,Breznik,4695,14,34,BG,42.74085,22.90723 9509,Obshtina Kovachevtsi,4695,14,34,BG,42.55,22.83333 9552,Obshtina Pernik,4695,14,34,BG,42.61667,23.08333 9567,Obshtina Radomir,4695,14,34,BG,42.46667,23.01667 9636,Obshtina Zemen,4695,14,34,BG,42.55067,22.7144 9650,Pernik,4695,14,34,BG,42.6,23.03333 9665,Radomir,4695,14,34,BG,42.54565,22.96553 9724,Tran,4695,14,34,BG,42.83528,22.65167 9748,Zemen,4695,14,34,BG,42.47889,22.74917 9269,Belene,4706,15,34,BG,43.64594,25.12627 9300,Cherven Bryag,4706,15,34,BG,43.26667,24.1 9312,Dolna Mitropolia,4706,15,34,BG,43.46667,24.53333 9314,Dolni Dabnik,4706,15,34,BG,43.4,24.43333 9337,Gulyantsi,4706,15,34,BG,43.64109,24.69368 9347,Iskar,4706,15,34,BG,43.45,24.26667 9366,Knezha,4706,15,34,BG,43.5,24.08333 9372,Koynare,4706,15,34,BG,43.35,24.13333 9386,Levski,4706,15,34,BG,43.36667,25.13333 9409,Nikopol,4706,15,34,BG,43.70528,24.89521 9424,Obshtina Belene,4706,15,34,BG,43.63333,25.13333 9449,Obshtina Cherven Bryag,4706,15,34,BG,43.33333,24.13333 9460,Obshtina Dolna Mitropolia,4706,15,34,BG,43.58333,24.41667 9462,Obshtina Dolni Dabnik,4706,15,34,BG,43.36667,24.41667 9484,Obshtina Gulyantsi,4706,15,34,BG,43.68333,24.65 9490,Obshtina Iskar,4706,15,34,BG,43.5,24.28333 9503,Obshtina Knezha,4706,15,34,BG,43.5,24.11667 9521,Obshtina Levski,4706,15,34,BG,43.43333,25.1 9541,Obshtina Nikopol,4706,15,34,BG,43.6,24.93333 9557,Obshtina Pleven,4706,15,34,BG,43.4,24.7 9562,Obshtina Pordim,4706,15,34,BG,43.38333,24.9 9655,Pleven,4706,15,34,BG,43.41667,24.61667 9660,Pordim,4706,15,34,BG,43.38333,24.85 9696,Slavyanovo,4706,15,34,BG,43.46667,24.86667 9259,Asenovgrad,4701,16,34,BG,42.01667,24.86667 9289,Brezovo,4701,16,34,BG,42.35,25.08333 9345,Hisarya,4701,16,34,BG,42.5,24.7 9351,Kalofer,4701,16,34,BG,42.61667,24.98333 9352,Kaloyanovo,4701,16,34,BG,42.35,24.73333 9355,Karlovo,4701,16,34,BG,42.63333,24.8 9365,Klisura,4701,16,34,BG,42.7,24.45 9375,Krichim,4701,16,34,BG,42.05,24.46667 9383,Laki,4701,16,34,BG,41.85,24.81667 9417,Obshtina Asenovgrad,4701,16,34,BG,41.95,24.96667 9489,Obshtina Hisarya,4701,16,34,BG,42.5,24.6 9494,Obshtina Kaloyanovo,4701,16,34,BG,42.38333,24.81667 9497,Obshtina Karlovo,4701,16,34,BG,42.68333,24.66667 9512,Obshtina Krichim,4701,16,34,BG,42.00439,24.47235 9516,Obshtina Kuklen,4701,16,34,BG,42.03725,24.77949 9519,Obshtina Laki,4701,16,34,BG,41.81667,24.85 9530,Obshtina Maritsa,4701,16,34,BG,42.23333,24.8 9548,Obshtina Parvomay,4701,16,34,BG,42.03333,25.2 9553,Obshtina Perushtitsa,4701,16,34,BG,42.06667,24.55 9558,Obshtina Plovdiv,4701,16,34,BG,42.15,24.75 9569,Obshtina Rakovski,4701,16,34,BG,42.26667,24.98333 9573,Obshtina Rodopi,4701,16,34,BG,42.03333,24.68333 9578,Obshtina Sadovo,4701,16,34,BG,42.13333,25.0 9579,Obshtina Saedinenie,4701,16,34,BG,42.31667,24.58333 9595,Obshtina Sopot,4701,16,34,BG,42.65214,24.7431 9597,Obshtina Stamboliyski,4701,16,34,BG,42.11667,24.51667 9645,Parvomay,4701,16,34,BG,42.1,25.21667 9651,Perushtitsa,4701,16,34,BG,42.05,24.55 9656,Plovdiv,4701,16,34,BG,42.15,24.75 9667,Rakovski,4701,16,34,BG,42.27408,24.94083 9677,Sadovo,4701,16,34,BG,42.13178,24.93999 9678,Saedinenie,4701,16,34,BG,42.26667,24.55 9704,Stamboliyski,4701,16,34,BG,42.13333,24.53333 9723,Topolovo,4701,16,34,BG,41.9,25.0 9348,Isperih,4698,17,34,BG,43.71667,26.83333 9379,Kubrat,4698,17,34,BG,43.79658,26.50063 9389,Loznitsa,4698,17,34,BG,43.36667,26.6 9399,Medovene,4698,17,34,BG,43.76667,26.51667 9491,Obshtina Isperih,4698,17,34,BG,43.71667,26.83333 9515,Obshtina Kubrat,4698,17,34,BG,43.86667,26.48333 9524,Obshtina Loznitsa,4698,17,34,BG,43.41667,26.58333 9570,Obshtina Razgrad,4698,17,34,BG,43.53333,26.51667 9581,Obshtina Samuil,4698,17,34,BG,43.6,26.8 9616,Obshtina Tsar Kaloyan,4698,17,34,BG,43.6,26.21667 9635,Obshtina Zavet,4698,17,34,BG,43.76667,26.68333 9669,Razgrad,4698,17,34,BG,43.53333,26.51667 9680,Samuil,4698,17,34,BG,43.51667,26.75 9727,Tsar Kaloyan,4698,17,34,BG,43.61667,26.25 9747,Zavet,4698,17,34,BG,43.76036,26.68063 9281,Borovo,4713,18,34,BG,43.50086,25.80992 9322,Dve Mogili,4713,18,34,BG,43.59258,25.87486 9349,Ivanovo,4713,18,34,BG,43.68568,25.95565 9435,Obshtina Borovo,4713,18,34,BG,43.6,25.8 9443,Obshtina Byala,4713,18,34,BG,43.41667,25.83333 9468,Obshtina Dve Mogili,4713,18,34,BG,43.51667,25.96667 9492,Obshtina Ivanovo,4713,18,34,BG,43.7,25.98333 9576,Obshtina Ruse,4713,18,34,BG,43.85,26.08333 9593,Obshtina Slivo Pole,4713,18,34,BG,43.96667,26.3 9617,Obshtina Tsenovo,4713,18,34,BG,43.58333,25.61667 9628,Obshtina Vetovo,4713,18,34,BG,43.71667,26.33333 9675,Ruse,4713,18,34,BG,43.84872,25.9534 9687,Senovo,4713,18,34,BG,43.65,26.36667 9699,Slivo Pole,4713,18,34,BG,43.94248,26.20464 9729,Tsenovo,4713,18,34,BG,43.53588,25.65764 9739,Vetovo,4713,18,34,BG,43.7,26.26667 146184,Shumen,4882,27,34,BG,43.283333,26.933333 9253,Alfatar,4708,19,34,BG,43.94525,27.28751 9319,Dulovo,4708,19,34,BG,43.81667,27.15 9331,Glavinitsa,4708,19,34,BG,43.91667,26.83333 9358,Kaynardzha,4708,19,34,BG,43.99278,27.50713 9413,Obshtina Alfatar,4708,19,34,BG,43.9,27.33333 9466,Obshtina Dulovo,4708,19,34,BG,43.81667,27.08333 9479,Obshtina Glavinitsa,4708,19,34,BG,43.95,26.85 9500,Obshtina Kaynardzha,4708,19,34,BG,43.95,27.53333 9588,Obshtina Silistra,4708,19,34,BG,44.03333,27.2 9590,Obshtina Sitovo,4708,19,34,BG,44.01667,27.0 9619,Obshtina Tutrakan,4708,19,34,BG,44.0,26.6 9692,Silistra,4708,19,34,BG,44.1171,27.26056 9695,Sitovo,4708,19,34,BG,44.0273,27.01982 9730,Tutrakan,4708,19,34,BG,44.04906,26.61206 9360,Kermen,4700,20,34,BG,42.5,26.25 9371,Kotel,4700,20,34,BG,42.88333,26.45 9410,Nova Zagora,4700,20,34,BG,42.48333,26.01667 9508,Obshtina Kotel,4700,20,34,BG,42.88333,26.45 9542,Obshtina Nova Zagora,4700,20,34,BG,42.45,26.05 9591,Obshtina Sliven,4700,20,34,BG,42.66667,26.31667 9620,Obshtina Tvarditsa,4700,20,34,BG,42.73333,26.0 9697,Sliven,4700,20,34,BG,42.68583,26.32917 9731,Tvarditsa,4700,20,34,BG,42.7,25.9 9264,Banite,4694,21,34,BG,41.61667,25.01667 9279,Borino,4694,21,34,BG,41.68408,24.293 9298,Chepelare,4694,21,34,BG,41.73333,24.68333 9306,Devin,4694,21,34,BG,41.74327,24.40003 9315,Dospat,4694,21,34,BG,41.64462,24.15857 9339,Gyovren,4694,21,34,BG,41.66326,24.37557 9393,Madan,4694,21,34,BG,41.49869,24.93973 9405,Nedelino,4694,21,34,BG,41.45602,25.08008 9421,Obshtina Banite,4694,21,34,BG,41.7,25.0 9433,Obshtina Borino,4694,21,34,BG,41.64834,24.31694 9447,Obshtina Chepelare,4694,21,34,BG,41.8,24.68333 9453,Obshtina Devin,4694,21,34,BG,41.74346,24.40192 9463,Obshtina Dospat,4694,21,34,BG,41.63228,24.18765 9526,Obshtina Madan,4694,21,34,BG,41.53333,24.96667 9537,Obshtina Nedelino,4694,21,34,BG,41.46894,25.09481 9575,Obshtina Rudozem,4694,21,34,BG,41.45439,24.8369 9594,Obshtina Smolyan,4694,21,34,BG,41.57516,24.71302 9639,Obshtina Zlatograd,4694,21,34,BG,41.40028,25.04591 9673,Rudozem,4694,21,34,BG,41.48751,24.84945 9700,Smolyan,4694,21,34,BG,41.57439,24.71204 9752,Zlatograd,4694,21,34,BG,41.3795,25.09605 9291,Buhovo,4705,22,34,BG,42.76667,23.56667 9701,Sofia,4705,22,34,BG,42.69751,23.32415 9707,Stolichna Obshtina,4705,22,34,BG,42.68647,23.30561 9254,Anton,4719,23,34,BG,42.75,24.28333 9282,Botevgrad,4719,23,34,BG,42.9,23.78333 9285,Bozhurishte,4719,23,34,BG,42.75,23.2 9296,Chavdar,4719,23,34,BG,42.65,24.05 9297,Chelopech,4719,23,34,BG,42.7,24.08333 9311,Dolna Banya,4719,23,34,BG,42.3,23.76667 9316,Dragoman,4719,23,34,BG,42.92191,22.93109 9326,Elin Pelin,4719,23,34,BG,42.66667,23.6 9327,Etropole,4719,23,34,BG,42.83333,24.0 9332,Godech,4719,23,34,BG,43.01682,23.04852 9333,Gorna Malina,4719,23,34,BG,42.68333,23.7 9346,Ihtiman,4719,23,34,BG,42.43333,23.81667 9369,Koprivshtitsa,4719,23,34,BG,42.63333,24.35 9370,Kostinbrod,4719,23,34,BG,42.81667,23.21667 9382,Lakatnik,4719,23,34,BG,43.05,23.4 9402,Mirkovo,4719,23,34,BG,42.7,23.98333 9414,Obshtina Anton,4719,23,34,BG,42.76667,24.3 9436,Obshtina Botevgrad,4719,23,34,BG,42.95,23.75 9439,Obshtina Bozhurishte,4719,23,34,BG,42.78333,23.11667 9445,Obshtina Chavdar,4719,23,34,BG,42.61667,24.08333 9446,Obshtina Chelopech,4719,23,34,BG,42.71667,24.06667 9459,Obshtina Dolna Banya,4719,23,34,BG,42.3,23.76667 9464,Obshtina Dragoman,4719,23,34,BG,42.93333,22.93333 9472,Obshtina Elin Pelin,4719,23,34,BG,42.66667,23.6 9473,Obshtina Etropole,4719,23,34,BG,42.85,24.03333 9480,Obshtina Gorna Malina,4719,23,34,BG,42.71667,23.8 9505,Obshtina Koprivshtitsa,4719,23,34,BG,42.61667,24.38333 9506,Obshtina Kostenets,4719,23,34,BG,42.3,23.86667 9507,Obshtina Kostinbrod,4719,23,34,BG,42.88333,23.2 9533,Obshtina Mirkovo,4719,23,34,BG,42.66667,23.96667 9556,Obshtina Pirdop,4719,23,34,BG,42.7,24.23333 9563,Obshtina Pravets,4719,23,34,BG,42.96667,23.98333 9580,Obshtina Samokov,4719,23,34,BG,42.33333,23.55 9592,Obshtina Slivnitsa,4719,23,34,BG,42.85,22.98333 9609,Obshtina Svoge,4719,23,34,BG,43.0,23.4 9638,Obshtina Zlatitsa,4719,23,34,BG,42.7,24.13333 9654,Pirdop,4719,23,34,BG,42.7,24.18333 9661,Pravets,4719,23,34,BG,42.88333,23.91667 9679,Samokov,4719,23,34,BG,42.337,23.5528 9698,Slivnitsa,4719,23,34,BG,42.85182,23.03792 9718,Svoge,4719,23,34,BG,42.96667,23.35 9750,Zlatitsa,4719,23,34,BG,42.71667,24.13333 9258,Asen,4707,24,34,BG,42.65,25.2 9302,Chirpan,4707,24,34,BG,42.2,25.33333 9340,Gŭlŭbovo,4707,24,34,BG,42.13333,25.85 9338,Gurkovo,4707,24,34,BG,42.66667,25.8 9359,Kazanlak,4707,24,34,BG,42.61667,25.4 9395,Maglizh,4707,24,34,BG,42.6,25.55 9408,Nikolaevo,4707,24,34,BG,42.63333,25.8 9441,Obshtina Bratya Daskalovi,4707,24,34,BG,42.3,25.21667 9451,Obshtina Chirpan,4707,24,34,BG,42.23333,25.38333 9475,Obshtina Galabovo,4707,24,34,BG,42.15,25.96667 9485,Obshtina Gurkovo,4707,24,34,BG,42.71667,25.8 9501,Obshtina Kazanlŭk,4707,24,34,BG,42.61943,25.39885 9528,Obshtina Maglizh,4707,24,34,BG,42.63333,25.61667 9540,Obshtina Nikolaevo,4707,24,34,BG,42.6,25.78333 9545,Obshtina Opan,4707,24,34,BG,42.21667,25.7 9549,Obshtina Pavel Banya,4707,24,34,BG,42.63333,25.13333 9566,Obshtina Radnevo,4707,24,34,BG,42.3,25.93333 9599,Obshtina Stara Zagora,4707,24,34,BG,42.41667,25.63333 9647,Pavel Banya,4707,24,34,BG,42.6,25.2 9664,Radnevo,4707,24,34,BG,42.3,25.93333 9691,Shipka,4707,24,34,BG,42.71667,25.33333 9706,Stara Zagora,4707,24,34,BG,42.43278,25.64194 9255,Antonovo,4714,25,34,BG,43.15,26.16667 9415,Obshtina Antonovo,4714,25,34,BG,43.11667,26.2 9543,Obshtina Omurtag,4714,25,34,BG,43.08333,26.48333 9544,Obshtina Opaka,4714,25,34,BG,43.46667,26.15 9561,Obshtina Popovo,4714,25,34,BG,43.35,26.23333 9610,Obshtina Targovishte,4714,25,34,BG,43.25,26.56667 9641,Omurtag,4714,25,34,BG,43.1,26.41667 9642,Opaka,4714,25,34,BG,43.45,26.16667 9659,Popovo,4714,25,34,BG,43.35,26.23333 9719,Targovishte,4714,25,34,BG,43.2512,26.57215 9252,Aksakovo,4717,03,34,BG,43.25615,27.82105 9260,Asparuhovo,4717,03,34,BG,43.18067,27.88823 9263,Balgarevo,4717,03,34,BG,43.40296,28.41189 9272,Beloslav,4717,03,34,BG,43.1896,27.70429 9293,Byala,4717,03,34,BG,42.87426,27.88865 9304,Dalgopol,4717,03,34,BG,43.05,27.35 9307,Devnya,4717,03,34,BG,43.22222,27.56944 9313,Dolni Chiflik,4717,03,34,BG,42.99296,27.71596 9364,Kiten,4717,03,34,BG,43.08333,27.31667 9412,Obshtina Aksakovo,4717,03,34,BG,43.31667,27.85 9418,Obshtina Avren,4717,03,34,BG,43.1,27.71667 9427,Obshtina Beloslav,4717,03,34,BG,43.2,27.73333 9444,Obshtina Byala,4717,03,34,BG,42.88333,27.81667 9452,Obshtina Dalgopol,4717,03,34,BG,43.05,27.35 9454,Obshtina Devnya,4717,03,34,BG,43.22056,27.60052 9461,Obshtina Dolni Chiflik,4717,03,34,BG,42.96667,27.68333 9565,Obshtina Provadia,4717,03,34,BG,43.18333,27.4 9606,Obshtina Suvorovo,4717,03,34,BG,43.33333,27.65 9623,Obshtina Valchidol,4717,03,34,BG,43.45,27.5 9624,Obshtina Varna,4717,03,34,BG,43.21667,27.91667 9629,Obshtina Vetrino,4717,03,34,BG,43.31667,27.43333 9663,Provadia,4717,03,34,BG,43.18333,27.43333 9714,Suvorovo,4717,03,34,BG,43.33058,27.59908 9734,Valchidol,4717,03,34,BG,43.4,27.55 9735,Varna,4717,03,34,BG,43.21667,27.91667 9740,Vetrino,4717,03,34,BG,43.31667,27.43333 9751,Zlatni Pyasatsi,4717,03,34,BG,43.285,28.0418 9294,Byala Cherkva,4709,04,34,BG,43.2,25.3 9305,Debelets,4709,04,34,BG,43.03333,25.61667 9324,Elena,4709,04,34,BG,42.93333,25.88333 9334,Gorna Oryahovitsa,4709,04,34,BG,43.12778,25.70167 9361,Kilifarevo,4709,04,34,BG,42.98333,25.63333 9391,Lyaskovets,4709,04,34,BG,43.11111,25.72833 9470,Obshtina Elena,4709,04,34,BG,42.91667,25.95 9481,Obshtina Gorna Oryahovitsa,4709,04,34,BG,43.21667,25.75 9525,Obshtina Lyaskovets,4709,04,34,BG,43.13333,25.85 9550,Obshtina Pavlikeni,4709,04,34,BG,43.28333,25.35 9559,Obshtina Polski Trambesh,4709,04,34,BG,43.35,25.58333 9601,Obshtina Strazhitsa,4709,04,34,BG,43.26667,25.98333 9604,Obshtina Suhindol,4709,04,34,BG,43.16667,25.2 9608,Obshtina Svishtov,4709,04,34,BG,43.53333,25.35 9626,Obshtina Veliko Tŭrnovo,4709,04,34,BG,43.08241,25.63202 9637,Obshtina Zlataritsa,4709,04,34,BG,43.06667,25.98333 9646,Parvomaytsi,4709,04,34,BG,43.15,25.65 9648,Pavlikeni,4709,04,34,BG,43.24278,25.32194 9657,Polski Trambesh,4709,04,34,BG,43.37233,25.63525 9709,Strazhitsa,4709,04,34,BG,43.23333,25.96667 9712,Suhindol,4709,04,34,BG,43.19167,25.18111 9717,Svishtov,4709,04,34,BG,43.61875,25.35033 9737,Veliko Tŭrnovo,4709,04,34,BG,43.08124,25.62904 9749,Zlataritsa,4709,04,34,BG,43.05,25.9 9271,Belogradchik,4697,05,34,BG,43.62722,22.68361 9284,Boynitsa,4697,05,34,BG,43.9565,22.53255 9287,Bregovo,4697,05,34,BG,44.15167,22.6425 9303,Chuprene,4697,05,34,BG,43.51806,22.66611 9309,Dimovo,4697,05,34,BG,43.74167,22.72694 9317,Drenovets,4697,05,34,BG,43.69134,22.97365 9320,Dunavtsi,4697,05,34,BG,43.92111,22.82111 9336,Gramada,4697,05,34,BG,43.83738,22.65279 9380,Kula,4697,05,34,BG,43.88833,22.52139 9396,Makresh,4697,05,34,BG,43.76794,22.66406 9411,Novo Selo,4697,05,34,BG,44.16214,22.78376 9426,Obshtina Belogradchik,4697,05,34,BG,43.65,22.6 9438,Obshtina Boynitsa,4697,05,34,BG,44.0,22.55 9456,Obshtina Dimovo,4697,05,34,BG,43.75,22.81667 9483,Obshtina Gramada,4697,05,34,BG,43.83333,22.65 9517,Obshtina Kula,4697,05,34,BG,43.9,22.56667 9577,Obshtina Ruzhintsi,4697,05,34,BG,43.65,22.9 9630,Obshtina Vidin,4697,05,34,BG,44.0,22.83333 9676,Ruzhintsi,4697,05,34,BG,43.62179,22.83286 9741,Vidin,4697,05,34,BG,43.99159,22.88236 9280,Borovan,4711,06,34,BG,43.43333,23.75 9295,Byala Slatina,4711,06,34,BG,43.46667,23.93333 9344,Hayredin,4711,06,34,BG,43.60193,23.66135 9373,Kozloduy,4711,06,34,BG,43.77864,23.72058 9376,Krivodol,4711,06,34,BG,43.37444,23.48444 9400,Mezdra,4711,06,34,BG,43.15,23.7 9403,Mizia,4711,06,34,BG,43.68623,23.85371 9434,Obshtina Borovan,4711,06,34,BG,43.43333,23.75 9488,Obshtina Hayredin,4711,06,34,BG,43.58333,23.66667 9510,Obshtina Kozloduy,4711,06,34,BG,43.71667,23.73333 9513,Obshtina Krivodol,4711,06,34,BG,43.38333,23.48333 9531,Obshtina Mezdra,4711,06,34,BG,43.13333,23.73333 9534,Obshtina Mizia,4711,06,34,BG,43.63333,23.85 9546,Obshtina Oryahovo,4711,06,34,BG,43.69038,23.98643 9574,Obshtina Roman,4711,06,34,BG,43.15,23.91667 9631,Obshtina Vratsa,4711,06,34,BG,43.28333,23.6 9643,Oryahovo,4711,06,34,BG,43.73618,23.96052 9672,Roman,4711,06,34,BG,43.15,23.91667 9742,Vratsa,4711,06,34,BG,43.21,23.5625 9278,Bolyarovo,4716,28,34,BG,42.14962,26.81116 9325,Elhovo,4716,28,34,BG,42.16667,26.56667 9432,Obshtina Bolyarovo,4716,28,34,BG,42.15,26.85 9471,Obshtina Elhovo,4716,28,34,BG,42.11667,26.61667 9600,Obshtina Straldzha,4716,28,34,BG,42.48333,26.78333 9618,Obshtina Tundzha,4716,28,34,BG,42.35,26.45 9634,Obshtina Yambol,4716,28,34,BG,42.48333,26.5 9708,Straldzha,4716,28,34,BG,42.6,26.68333 9746,Yambol,4716,28,34,BG,42.48333,26.5 54404,Bjelovar,734,07,55,HR,45.89861,16.84889 54418,Brezovac,734,07,55,HR,45.8675,16.84083 55017,Čazma,734,07,55,HR,45.74818,16.6139 54449,Daruvar,734,07,55,HR,45.59056,17.225 54453,Dežanovac,734,07,55,HR,45.57056,17.08667 55025,Đulovac,734,07,55,HR,45.66588,17.42981 54489,Garešnica,734,07,55,HR,45.57444,16.94139 54505,Grad Bjelovar,734,07,55,HR,45.90172,16.84522 54571,Grad Čazma,734,07,55,HR,45.75,16.61667 54508,Grad Daruvar,734,07,55,HR,45.6,17.23333 54515,Grad Garešnica,734,07,55,HR,45.56667,16.93333 54517,Grad Grubišno Polje,734,07,55,HR,45.7,17.16667 54588,Grubišno Polje,734,07,55,HR,45.70214,17.17268 54589,Gudovac,734,07,55,HR,45.88028,16.78083 54593,Hercegovac,734,07,55,HR,45.65861,17.01361 54607,Ivanska,734,07,55,HR,45.77889,16.81194 54630,Kapela,734,07,55,HR,45.98543,16.85174 54658,Končanica,734,07,55,HR,45.63611,17.16639 54831,Predavac,734,07,55,HR,45.93583,16.78333 54869,Rovišće,734,07,55,HR,45.94472,16.735 55028,Šandrovac,734,07,55,HR,45.90556,17.02111 54886,Severin,734,07,55,HR,45.84152,16.9695 54891,Sirač,734,07,55,HR,45.52333,17.255 54960,Velika Pisanica,734,07,55,HR,45.8016,17.06551 54962,Veliki Grđevac,734,07,55,HR,45.75028,17.0475 55038,Ždralovi,734,07,55,HR,45.87639,16.875 55013,Zrinski Topolovac,734,07,55,HR,46.0212,16.75509 54387,Batrina,737,12,55,HR,45.18944,17.66639 54425,Brodski Varoš,737,12,55,HR,45.18111,17.97861 54434,Bukovlje,737,12,55,HR,45.18528,18.07 54441,Cernik,737,12,55,HR,45.28861,17.38194 54450,Davor,737,12,55,HR,45.11528,17.51639 54460,Donji Andrijevci,737,12,55,HR,45.18833,18.29972 54490,Garčin,737,12,55,HR,45.18278,18.18306 54498,Gornji Bogićevci,737,12,55,HR,45.25572,17.23454 54534,Grad Nova Gradiška,737,12,55,HR,45.26667,17.4 54551,Grad Slavonski Brod,737,12,55,HR,45.16267,18.03062 54590,Gundinci,737,12,55,HR,45.15833,18.49139 54661,Korenica,737,12,55,HR,45.22472,18.16556 54672,Kruševica,737,12,55,HR,45.0775,18.48278 54708,Lužani,737,12,55,HR,45.16806,17.70694 54757,Nova Gradiška,737,12,55,HR,45.255,17.38306 54774,Okučani,737,12,55,HR,45.26034,17.19925 54778,Oprisavci,737,12,55,HR,45.15111,18.22972 54790,Oriovac,737,12,55,HR,45.16611,17.76 54819,Podvinje,737,12,55,HR,45.19028,18.02694 54862,Rešetari,737,12,55,HR,45.26232,17.42346 54874,Ruščica,737,12,55,HR,45.14667,18.07944 54887,Sibinj,737,12,55,HR,45.19167,17.90806 54889,Sikirevci,737,12,55,HR,45.10889,18.46444 54897,Slavonski Brod,737,12,55,HR,45.16028,18.01556 54899,Slobodnica,737,12,55,HR,45.16222,17.93278 54910,Stari Perkovci,737,12,55,HR,45.2175,18.34861 54957,Velika Kopanica,737,12,55,HR,45.15611,18.39306 54995,Vrpolje,737,12,55,HR,45.21056,18.40556 54437,Cavtat,728,19,55,HR,42.58111,18.21806 55022,Čibača,728,19,55,HR,42.62889,18.17111 54471,Dubrovačko primorje,728,19,55,HR,42.78988,17.8624 54513,Grad Dubrovnik,728,19,55,HR,42.64861,18.09397 54525,Grad Korčula,728,19,55,HR,42.95693,17.13181 54544,Grad Ploče,728,19,55,HR,43.06667,17.43333 54653,Komin,728,19,55,HR,43.04083,17.53694 54656,Konavle,728,19,55,HR,42.5401,18.33944 54662,Korčula,728,19,55,HR,42.96038,17.13525 54684,Lastovo,728,19,55,HR,42.76757,16.89708 54704,Lumbarda,728,19,55,HR,42.92278,17.16722 54728,Metković,728,19,55,HR,43.05417,17.64833 54736,Mljet,728,19,55,HR,42.74439,17.53645 54737,Mokošica,728,19,55,HR,42.67556,18.09028 54785,Općina Lastovo,728,19,55,HR,42.75,16.9 54780,Opuzen,728,19,55,HR,43.01528,17.56556 54787,Orebić,728,19,55,HR,42.98556,17.17472 54813,Podgora,728,19,55,HR,42.84861,17.83639 54821,Pojezerje,728,19,55,HR,43.15741,17.45152 54898,Slivno,728,19,55,HR,42.95864,17.54431 54900,Smokvica,728,19,55,HR,42.93056,16.89639 54914,Ston,728,19,55,HR,42.83861,17.69639 54954,Vela Luka,728,19,55,HR,42.96333,16.7225 55007,Zažablje,728,19,55,HR,43.01113,17.65683 55041,Žrnovo,728,19,55,HR,42.95111,17.11417 55042,Župa dubrovačka,728,19,55,HR,42.62683,18.19475 54384,Bale,743,18,55,HR,45.04056,13.78361 54385,Bale-Valle,743,18,55,HR,45.04089,13.78565 54426,Brtonigla,743,18,55,HR,45.38139,13.62944 54427,Brtonigla-Verteneglio,743,18,55,HR,45.37918,13.62554 54432,Buje,743,18,55,HR,45.41,13.66194 54433,Buje-Buie,743,18,55,HR,45.4079,13.65914 54436,Buzet,743,18,55,HR,45.40944,13.96667 54479,Fažana,743,18,55,HR,44.9275,13.80361 54480,Fažana-Fasana,743,18,55,HR,44.92822,13.80548 54483,Funtana,743,18,55,HR,45.17472,13.605 54484,Funtana-Fontane,743,18,55,HR,45.17483,13.60627 54487,Galižana,743,18,55,HR,44.93167,13.86861 54506,Grad Buzet,743,18,55,HR,45.41667,13.96667 54530,Grad Labin,743,18,55,HR,45.08333,14.13333 54542,Grad Pazin,743,18,55,HR,45.23333,13.93333 54585,Grožnjan,743,18,55,HR,45.37889,13.72389 54586,Grožnjan-Grisignana,743,18,55,HR,45.37728,13.72145 54629,Kanfanar,743,18,55,HR,45.12194,13.83917 54634,Karojba,743,18,55,HR,45.30083,13.82306 54644,Kaštelir-Labinci,743,18,55,HR,45.30277,13.68841 54681,Labin,743,18,55,HR,45.095,14.11972 54691,Ližnjan,743,18,55,HR,44.82833,13.95694 54692,Ližnjan-Lisignano,743,18,55,HR,44.82765,13.96028 54706,Lupoglav,743,18,55,HR,45.35204,14.10846 54722,Marčana,743,18,55,HR,44.95528,13.95389 54727,Medulin,743,18,55,HR,44.8225,13.935 54739,Motovun,743,18,55,HR,45.33667,13.82861 54740,Motovun-Montona,743,18,55,HR,45.33633,13.82977 54761,Novigrad,743,18,55,HR,45.315,13.55806 54763,Novigrad-Cittanova,743,18,55,HR,45.31669,13.56155 54784,Općina Lanišće,743,18,55,HR,45.4352,14.08196 54779,Oprtalj-Portole,743,18,55,HR,45.38226,13.82406 54800,Pazin,743,18,55,HR,45.24028,13.93667 54826,Poreč,743,18,55,HR,45.22567,13.59511 54827,Poreč-Parenzo,743,18,55,HR,45.22717,13.59653 54844,Pula,743,18,55,HR,44.86833,13.84806 54845,Pula-Pola,743,18,55,HR,44.86711,13.84882 54850,Rabac,743,18,55,HR,45.07944,14.1575 54855,Raša,743,18,55,HR,45.08028,14.07889 54867,Rovinj,743,18,55,HR,45.08,13.64 54868,Rovinj-Rovigno,743,18,55,HR,45.0819,13.6397 54925,Sveta Nedelja,743,18,55,HR,45.14932,14.09889 54931,Sveti Lovreč,743,18,55,HR,45.1777,13.74317 54933,Tar,743,18,55,HR,45.30083,13.62528 54934,Tar-Vabriga-Torre Abrega,743,18,55,HR,45.29946,13.62489 54949,Umag,743,18,55,HR,45.43139,13.52389 54950,Umag-Umago,743,18,55,HR,45.43462,13.52589 54951,Valbandon,743,18,55,HR,44.91879,13.81344 54967,Vinež,743,18,55,HR,45.09806,14.10694 54977,Višnjan-Visignano,743,18,55,HR,45.27614,13.72128 54979,Vižinada-Visinada,743,18,55,HR,45.33126,13.75943 54982,Vodnjan,743,18,55,HR,44.95944,13.85167 54983,Vodnjan-Dignano,743,18,55,HR,44.96187,13.85041 54996,Vrsar,743,18,55,HR,45.14917,13.60528 54997,Vrsar-Orsera,743,18,55,HR,45.15074,13.60558 55039,Žminj,743,18,55,HR,45.14278,13.90889 54469,Drnje,742,06,55,HR,46.20694,16.91694 55024,Đelekovec,742,06,55,HR,46.24989,16.87011 55027,Đurđevac,742,06,55,HR,46.03972,17.07168 54481,Ferdinandovac,742,06,55,HR,46.05,17.2 54492,Gola,742,06,55,HR,46.19583,17.05806 54496,Gornja Rijeka,742,06,55,HR,46.10977,16.39079 54524,Grad Koprivnica,742,06,55,HR,46.16667,16.83333 54527,Grad Križevci,742,06,55,HR,46.03333,16.56667 54594,Hlebine,742,06,55,HR,46.15694,16.96278 54626,Kalinovac,742,06,55,HR,46.02944,17.11556 54659,Koprivnica,742,06,55,HR,46.16278,16.8275 54660,Koprivnički Ivanec,742,06,55,HR,46.19907,16.81629 54670,Križevci,742,06,55,HR,46.02194,16.5425 54685,Legrad,742,06,55,HR,46.2975,16.85667 54738,Molve,742,06,55,HR,46.10917,17.03167 54765,Novo Virje,742,06,55,HR,46.09834,17.15215 54803,Peteranec,742,06,55,HR,46.19222,16.89167 54854,Rasinja,742,06,55,HR,46.18389,16.70667 54857,Reka,742,06,55,HR,46.13028,16.76694 54888,Sigetec,742,06,55,HR,46.18833,16.93583 54972,Virje,742,06,55,HR,46.06722,16.99 54390,Bedekovčina,729,02,55,HR,46.04111,15.99639 54430,Budinščina,729,02,55,HR,46.12785,16.20415 55026,Đurmanec,729,02,55,HR,46.19708,15.83786 54510,Grad Donja Stubica,729,02,55,HR,45.97955,15.97069 54523,Grad Klanjec,729,02,55,HR,46.04977,15.74615 54526,Grad Krapina,729,02,55,HR,46.15968,15.87258 54566,Grad Zabok,729,02,55,HR,46.02808,15.90855 54568,Grad Zlatar,729,02,55,HR,46.09198,16.07695 54622,Jesenje,729,02,55,HR,46.20724,15.88194 54648,Klanjec,729,02,55,HR,46.04982,15.74418 54657,Konjščina,729,02,55,HR,46.05435,16.17763 54667,Krapina,729,02,55,HR,46.16083,15.87889 54674,Kumrovec,729,02,55,HR,46.0775,15.67556 54725,Mače,729,02,55,HR,46.09472,16.03528 54714,Marija Bistrica,729,02,55,HR,46.00611,16.11111 54731,Mihovljan,729,02,55,HR,46.13306,15.97222 54791,Oroslavje,729,02,55,HR,45.99672,15.91507 54832,Pregrada,729,02,55,HR,46.16417,15.75083 54851,Radoboj,729,02,55,HR,46.16639,15.92361 54918,Stubičke Toplice,729,02,55,HR,45.97585,15.93238 54930,Sveti Križ Začretje,729,02,55,HR,46.08224,15.90704 55001,Zabok,729,02,55,HR,46.02944,15.915 55010,Zlatar,729,02,55,HR,46.09417,16.07083 55011,Zlatar Bistrica,729,02,55,HR,46.04788,16.08527 54422,Brinje,731,09,55,HR,45.0025,15.13389 54501,Gospić,731,09,55,HR,44.54611,15.37472 54633,Karlobag,731,09,55,HR,44.5275,15.07389 54690,Lički Osik,731,09,55,HR,44.60389,15.42472 54758,Novalja,731,09,55,HR,44.55778,14.88667 54796,Otočac,731,09,55,HR,44.86944,15.2375 54802,Perušić,731,09,55,HR,44.64944,15.38333 54812,Plitvička Jezera,731,09,55,HR,44.88053,15.62123 54824,Popovača,731,09,55,HR,44.63917,15.17917 54884,Senj,731,09,55,HR,44.98944,14.90583 54392,Belica,726,20,55,HR,46.40417,16.51833 55015,Čakovec,726,20,55,HR,46.38444,16.43389 54451,Dekanovec,726,20,55,HR,46.44861,16.58472 54455,Domašinec,726,20,55,HR,46.4325,16.6 54493,Goričan,726,20,55,HR,46.38417,16.68083 54570,Grad Čakovec,726,20,55,HR,46.38583,16.43333 54595,Hodošan,726,20,55,HR,46.39528,16.64389 54606,Ivanovec,726,20,55,HR,46.36833,16.47667 54663,Kotoriba,726,20,55,HR,46.355,16.81806 54675,Kuršanec,726,20,55,HR,46.33028,16.40167 54697,Lopatinec,726,20,55,HR,46.43333,16.38333 54726,Mačkovec,726,20,55,HR,46.42417,16.43361 54711,Mala Subotica,726,20,55,HR,46.37616,16.52893 54730,Mihovljan,726,20,55,HR,46.40861,16.44806 54744,Mursko Središće,726,20,55,HR,46.50944,16.44111 54749,Nedelišće,726,20,55,HR,46.37583,16.3875 54764,Novo Selo Rok,726,20,55,HR,46.42839,16.46215 54788,Orehovica,726,20,55,HR,46.33167,16.50694 54801,Peklenica,726,20,55,HR,46.49528,16.47611 54818,Podturen,726,20,55,HR,46.46472,16.54306 54834,Prelog,726,20,55,HR,46.335,16.61556 54836,Pribislavec,726,20,55,HR,46.3925,16.4825 55029,Šenkovec,726,20,55,HR,46.40889,16.42167 54915,Strahoninec,726,20,55,HR,46.36889,16.415 54929,Sveti Juraj na Bregu,726,20,55,HR,46.42853,16.38525 54988,Vratišinec,726,20,55,HR,46.47806,16.45778 54381,Antunovac,740,14,55,HR,45.49083,18.675 54391,Beli Manastir,740,14,55,HR,45.77,18.60361 54393,Belišće,740,14,55,HR,45.68028,18.40583 54398,Bijelo Brdo,740,14,55,HR,45.51722,18.87083 54399,Bilje,740,14,55,HR,45.60694,18.74389 54402,Bistrinci,740,14,55,HR,45.69167,18.39861 54403,Bizovac,740,14,55,HR,45.59278,18.45889 54421,Brijest,740,14,55,HR,45.52056,18.67194 54431,Budrovci,740,14,55,HR,45.27111,18.44861 55020,Čeminac,740,14,55,HR,45.68639,18.6675 55021,Čepin,740,14,55,HR,45.52361,18.56333 54447,Dalj,740,14,55,HR,45.48438,18.9861 54448,Darda,740,14,55,HR,45.62806,18.69972 54461,Donji Miholjac,740,14,55,HR,45.76083,18.16722 54464,Draž,740,14,55,HR,45.84222,18.78861 55023,Đakovo,740,14,55,HR,45.30833,18.41056 55014,Đurđenovac,740,14,55,HR,45.54333,18.04583 54476,Erdut,740,14,55,HR,45.52639,19.06028 54477,Ernestinovo,740,14,55,HR,45.45194,18.65917 54482,Feričanci,740,14,55,HR,45.52889,17.97583 54494,Gorjani,740,14,55,HR,45.39889,18.37222 54503,Grad Beli Manastir,740,14,55,HR,45.77219,18.61084 54511,Grad Donji Miholjac,740,14,55,HR,45.75,18.16667 54533,Grad Našice,740,14,55,HR,45.5,18.1 54540,Grad Osijek,740,14,55,HR,45.58333,18.66667 54556,Grad Valpovo,740,14,55,HR,45.66667,18.41667 54610,Jagodnjak,740,14,55,HR,45.69917,18.57694 54619,Jelisavac,740,14,55,HR,45.52889,18.15611 54624,Josipovac,740,14,55,HR,45.58278,18.58139 54632,Karanac,740,14,55,HR,45.76056,18.68444 54651,Kneževi Vinogradi,740,14,55,HR,45.75028,18.73306 54664,Koška,740,14,55,HR,45.54528,18.28583 54680,Kuševac,740,14,55,HR,45.34778,18.42889 54682,Ladimirevci,740,14,55,HR,45.62556,18.44861 54683,Laslovo,740,14,55,HR,45.415,18.69611 54709,Magadenovac,740,14,55,HR,45.66159,18.18679 54715,Marijanci,740,14,55,HR,45.66645,18.29284 54717,Marjanci,740,14,55,HR,45.66694,18.29222 54718,Markovac Našički,740,14,55,HR,45.49389,18.12556 54720,Martin,740,14,55,HR,45.49222,18.06667 54748,Našice,740,14,55,HR,45.48861,18.08778 54792,Osijek,740,14,55,HR,45.55111,18.69389 54804,Petlovac,740,14,55,HR,45.75833,18.52806 54806,Petrijevci,740,14,55,HR,45.61278,18.53528 54810,Piškorevci,740,14,55,HR,45.25528,18.40417 54814,Podgorač,740,14,55,HR,45.45861,18.22278 54816,Podravska Moslavina,740,14,55,HR,45.78456,17.9841 54877,Sarvaš,740,14,55,HR,45.52722,18.8375 54878,Satnica Đakovačka,740,14,55,HR,45.35367,18.37729 54883,Semeljci,740,14,55,HR,45.36056,18.54361 55031,Široko Polje,740,14,55,HR,45.40528,18.4725 55034,Šodolovci,740,14,55,HR,45.4,18.62028 54916,Strizivojna,740,14,55,HR,45.22611,18.42389 54935,Tenja,740,14,55,HR,45.49806,18.74722 54952,Valpovo,740,14,55,HR,45.66083,18.41861 54963,Velimirovac,740,14,55,HR,45.52361,18.10944 54966,Viljevo,740,14,55,HR,45.75139,18.06306 54975,Viškovci,740,14,55,HR,45.345,18.46222 54978,Višnjevac,740,14,55,HR,45.56861,18.61389 54980,Vladislavci,740,14,55,HR,45.45944,18.57417 54999,Vuka,740,14,55,HR,45.43389,18.505 54415,Brestovac,724,11,55,HR,45.33056,17.59694 54541,Grad Pakrac,724,11,55,HR,45.43333,17.2 54545,Grad Požega,724,11,55,HR,45.33333,17.66667 54612,Jakšić,724,11,55,HR,45.35765,17.76502 54631,Kaptol,724,11,55,HR,45.43472,17.72611 54677,Kutjevo,724,11,55,HR,45.42611,17.8825 54688,Lipik,724,11,55,HR,45.41139,17.15222 54799,Pakrac,724,11,55,HR,45.43639,17.18889 54811,Pleternica,724,11,55,HR,45.28861,17.80639 54830,Požega,724,11,55,HR,45.34028,17.68528 54955,Velika,724,11,55,HR,45.45444,17.66139 54964,Vidovci,724,11,55,HR,45.3325,17.71472 54383,Bakar,735,08,55,HR,45.30861,14.53028 54386,Banjol,735,08,55,HR,44.75,14.78333 54388,Baška,735,08,55,HR,44.97028,14.75333 54420,Bribir,735,08,55,HR,45.16111,14.76472 54435,Buzdohanj,735,08,55,HR,45.34528,14.48833 55016,Čavle,735,08,55,HR,45.35194,14.48389 54442,Cernik,735,08,55,HR,45.34361,14.50222 54444,Cres,735,08,55,HR,44.96111,14.4084 54445,Crikvenica,735,08,55,HR,45.17722,14.69278 54452,Delnice,735,08,55,HR,45.40083,14.79972 54465,Dražice,735,08,55,HR,45.39083,14.47028 54466,Drenova,735,08,55,HR,45.35,14.43028 54485,Fužine,735,08,55,HR,45.30528,14.71556 54569,Grad Čabar,735,08,55,HR,45.58333,14.58333 54507,Grad Crikvenica,735,08,55,HR,45.16667,14.7 54509,Grad Delnice,735,08,55,HR,45.39806,14.80111 54528,Grad Krk,735,08,55,HR,45.02829,14.57233 54538,Grad Opatija,735,08,55,HR,45.33333,14.26667 54546,Grad Rijeka,735,08,55,HR,45.32693,14.43758 54563,Grad Vrbovsko,735,08,55,HR,45.37542,15.07856 54598,Hreljin,735,08,55,HR,45.2825,14.59917 54609,Jadranovo,735,08,55,HR,45.23111,14.61833 54628,Kampor,735,08,55,HR,44.775,14.71861 54635,Kastav,735,08,55,HR,45.37528,14.34861 54647,Klana,735,08,55,HR,45.44694,14.37694 54666,Kraljevica,735,08,55,HR,45.27395,14.5683 54668,Krasica,735,08,55,HR,45.30972,14.55556 54671,Krk,735,08,55,HR,45.02744,14.57542 54696,Lopar,735,08,55,HR,44.8325,14.73028 54699,Lovran,735,08,55,HR,45.29194,14.27417 54712,Mali Lošinj,735,08,55,HR,44.53056,14.46861 54713,Malinska-Dubašnica,735,08,55,HR,45.12277,14.52873 54723,Marčelji,735,08,55,HR,45.39611,14.38944 54716,Marinići,735,08,55,HR,45.365,14.39389 54724,Matulji,735,08,55,HR,45.36167,14.325 54729,Mihotići,735,08,55,HR,45.36125,14.30553 54743,Mrkopalj,735,08,55,HR,45.31556,14.85528 54755,Njivice,735,08,55,HR,45.15806,14.53861 54759,Novi Vinodolski,735,08,55,HR,45.12806,14.78889 54776,Omišalj,735,08,55,HR,45.21134,14.55495 54777,Opatija,735,08,55,HR,45.33771,14.30515 54815,Podhum,735,08,55,HR,45.38722,14.47944 54846,Punat,735,08,55,HR,45.01472,14.62889 54849,Rab,735,08,55,HR,44.75769,14.75906 54863,Rijeka,735,08,55,HR,45.32673,14.44241 54870,Rubeši,735,08,55,HR,45.36694,14.34806 54882,Selce,735,08,55,HR,45.15639,14.72111 54893,Skrad,735,08,55,HR,45.42778,14.91111 55033,Škrljevo,735,08,55,HR,45.32053,14.53268 54924,Supetarska Draga,735,08,55,HR,44.7975,14.72472 54970,Vinodolska općina,735,08,55,HR,45.22219,14.68941 54976,Viškovo,735,08,55,HR,45.37572,14.384 54990,Vrbnik,735,08,55,HR,45.07583,14.6725 54992,Vrbovsko,735,08,55,HR,45.36861,15.07833 54424,Brodarica,730,15,55,HR,43.68,15.91972 54468,Drniš,730,15,55,HR,43.8625,16.15556 54512,Grad Drniš,730,15,55,HR,43.83333,16.16667 54572,Grad Šibenik,730,15,55,HR,43.73576,15.89602 54646,Kistanje,730,15,55,HR,43.98278,15.965 54652,Knin,730,15,55,HR,44.04063,16.19662 54745,Murter,730,15,55,HR,43.82043,15.58988 54746,Murter-Kornati,730,15,55,HR,43.80959,15.60024 54808,Pirovac,730,15,55,HR,43.81917,15.67278 54839,Primošten,730,15,55,HR,43.58632,15.92302 54843,Promina,730,15,55,HR,43.95798,16.09737 54864,Rogoznica,730,15,55,HR,43.52472,15.97 54865,Rogoznica Općina,730,15,55,HR,43.5362,15.97086 55030,Šibenik,730,15,55,HR,43.72722,15.90583 54894,Skradin,730,15,55,HR,43.82028,15.92361 54936,Tisno,730,15,55,HR,43.80417,15.64333 54940,Tribunj,730,15,55,HR,43.75547,15.74444 54981,Vodice,730,15,55,HR,43.76083,15.78278 54429,Budaševo,733,03,55,HR,45.47472,16.43667 54475,Dvor,733,03,55,HR,45.07306,16.37083 54491,Glina,733,03,55,HR,45.33806,16.08806 54516,Grad Glina,733,03,55,HR,45.33333,16.1 54518,Grad Hrvatska Kostajnica,733,03,55,HR,45.25,16.56667 54529,Grad Kutina,733,03,55,HR,45.5,16.75 54536,Grad Novska,733,03,55,HR,45.33333,17.0 54543,Grad Petrinja,733,03,55,HR,45.43333,16.26667 54549,Grad Sisak,733,03,55,HR,45.5,16.36667 54592,Gvozd,733,03,55,HR,45.35305,15.86563 54600,Hrvatska Kostajnica,733,03,55,HR,45.23167,16.53917 54676,Kutina,733,03,55,HR,45.475,16.78194 54686,Lekenik,733,03,55,HR,45.58556,16.21139 54689,Lipovljani,733,03,55,HR,45.39667,16.88972 54721,Martinska Ves,733,03,55,HR,45.5867,16.37465 54768,Novska,733,03,55,HR,45.34056,16.97694 54782,Općina Dvor,733,03,55,HR,45.1,16.3 54783,Općina Gvozd,733,03,55,HR,45.33333,15.9 54807,Petrinja,733,03,55,HR,45.4375,16.29 54825,Popovača,733,03,55,HR,45.56972,16.625 54859,Repušnica,733,03,55,HR,45.49278,16.73083 54892,Sisak,733,03,55,HR,45.46611,16.37833 54922,Sunja,733,03,55,HR,45.3685,16.56702 54984,Voloder,733,03,55,HR,45.54806,16.67889 54389,Baška Voda,725,17,55,HR,43.35694,16.95028 54407,Bol,725,17,55,HR,43.26194,16.655 54414,Brela,725,17,55,HR,43.36889,16.93417 54423,Brnaze,725,17,55,HR,43.68,16.64972 54454,Dicmo,725,17,55,HR,43.63678,16.58978 54463,Donji Vinjani,725,17,55,HR,43.44613,17.24064 54474,Duće,725,17,55,HR,43.44278,16.66833 54472,Dugi Rat Općina,725,17,55,HR,43.44923,16.64738 54473,Dugopolje,725,17,55,HR,43.58056,16.60278 54486,Gala,725,17,55,HR,43.715,16.72694 54502,Grabovci,725,17,55,HR,43.49278,17.20111 54519,Grad Hvar,725,17,55,HR,43.17263,16.4455 54520,Grad Imotski,725,17,55,HR,43.43333,17.16667 54532,Grad Makarska,725,17,55,HR,43.3,17.03333 54537,Grad Omiš,725,17,55,HR,43.46667,16.7 54548,Grad Sinj,725,17,55,HR,43.72285,16.65819 54552,Grad Split,725,17,55,HR,43.5,16.5 54553,Grad Supetar,725,17,55,HR,43.38444,16.55528 54555,Grad Trogir,725,17,55,HR,43.52061,16.25144 54561,Grad Vis,725,17,55,HR,43.05315,16.18698 54564,Grad Vrgorac,725,17,55,HR,43.2,17.36667 54574,Gradac,725,17,55,HR,43.10583,17.34167 54584,Greda,725,17,55,HR,43.61528,16.69361 54587,Grubine,725,17,55,HR,43.42986,17.16292 54599,Hrvace,725,17,55,HR,43.76333,16.615 54601,Hvar,725,17,55,HR,43.1725,16.44278 54603,Imotski,725,17,55,HR,43.44667,17.21667 54620,Jelsa,725,17,55,HR,43.16139,16.69306 54621,Jesenice,725,17,55,HR,43.46158,16.60197 54627,Kamen,725,17,55,HR,43.51417,16.51472 54637,Kaštel Gomilica,725,17,55,HR,43.55,16.4 54638,Kaštel Kambelovac,725,17,55,HR,43.55,16.38333 54639,Kaštel Lukšić,725,17,55,HR,43.55528,16.3675 54640,Kaštel Novi,725,17,55,HR,43.55,16.33333 54642,Kaštel Štafilić,725,17,55,HR,43.55,16.33333 54641,Kaštel Stari,725,17,55,HR,43.55,16.35 54643,Kaštela,725,17,55,HR,43.53865,16.3074 54650,Klis,725,17,55,HR,43.55944,16.51944 54654,Komiža,725,17,55,HR,43.04306,16.09306 54665,Košute,725,17,55,HR,43.63083,16.695 54694,Lokvičići,725,17,55,HR,43.46428,17.09142 54700,Lovreć,725,17,55,HR,43.48761,16.98632 54710,Makarska,725,17,55,HR,43.29694,17.01778 54733,Milna,725,17,55,HR,43.32667,16.45083 54742,Mravince,725,17,55,HR,43.53333,16.52194 54747,Muć,725,17,55,HR,43.69328,16.47267 54752,Nerežišća,725,17,55,HR,43.32959,16.57743 54772,Okrug,725,17,55,HR,43.49638,16.26732 54773,Okrug Gornji,725,17,55,HR,43.49473,16.26531 54775,Omiš,725,17,55,HR,43.44472,16.68861 54795,Otok,725,17,55,HR,43.68661,16.73488 54817,Podstrana,725,17,55,HR,43.48668,16.55013 54829,Postira,725,17,55,HR,43.37551,16.63091 54842,Proložac,725,17,55,HR,43.4669,17.15507 54847,Pučišća,725,17,55,HR,43.34778,16.73389 54872,Runović,725,17,55,HR,43.37667,17.23667 54873,Runovići,725,17,55,HR,43.38704,17.23892 54879,Seget,725,17,55,HR,43.54305,16.21222 54880,Seget Vranjica,725,17,55,HR,43.50999,16.18704 54881,Selca,725,17,55,HR,43.29722,16.85083 54890,Sinj,725,17,55,HR,43.70361,16.63944 54896,Slatine,725,17,55,HR,43.49944,16.33333 54901,Solin,725,17,55,HR,43.5432,16.49314 55035,Šolta,725,17,55,HR,43.38714,16.28865 54904,Split,725,17,55,HR,43.50891,16.43915 54906,Srinjine,725,17,55,HR,43.48333,16.6 54907,Stari Grad,725,17,55,HR,43.18472,16.59528 54913,Stobreč,725,17,55,HR,43.5025,16.52222 54923,Supetar,725,17,55,HR,43.38417,16.55083 54941,Trilj,725,17,55,HR,43.61833,16.72417 54942,Trogir,725,17,55,HR,43.5125,16.25167 54946,Tučepi,725,17,55,HR,43.27222,17.05444 54945,Turjaci,725,17,55,HR,43.65,16.66917 54961,Veliki Drvenik,725,17,55,HR,43.45,16.15 54974,Vis,725,17,55,HR,43.06194,16.18306 54987,Vranjic,725,17,55,HR,43.53333,16.46667 54993,Vrgorac,725,17,55,HR,43.20583,17.37111 54994,Vrlika,725,17,55,HR,43.91098,16.39933 55005,Zagvozd,725,17,55,HR,43.3975,17.05694 55012,Zmijavci,725,17,55,HR,43.41083,17.20556 55040,Žrnovnica,725,17,55,HR,43.52111,16.55917 54395,Beretinec,739,05,55,HR,46.25,16.3 54416,Breznica,739,05,55,HR,46.07111,16.27111 54417,Breznički Hum,739,05,55,HR,46.10722,16.27667 54443,Cestica,739,05,55,HR,46.37167,16.12528 54459,Donje Ladanje,739,05,55,HR,46.3,16.16667 54497,Gornje Vratno,739,05,55,HR,46.35917,16.15444 54500,Gornji Kneginec,739,05,55,HR,46.25051,16.37555 54521,Grad Ivanec,739,05,55,HR,46.23333,16.13333 54531,Grad Ludbreg,739,05,55,HR,46.25,16.63333 54535,Grad Novi Marof,739,05,55,HR,46.16667,16.33333 54557,Grad Varaždin,739,05,55,HR,46.30354,16.33444 54597,Hrašćica,739,05,55,HR,46.32494,16.29427 54604,Ivanec,739,05,55,HR,46.22306,16.12 54613,Jalkovec,739,05,55,HR,46.28083,16.31972 54614,Jalžabet,739,05,55,HR,46.26083,16.475 54649,Klenovnik,739,05,55,HR,46.27028,16.07 54678,Kućan Marof,739,05,55,HR,46.28944,16.37222 54687,Lepoglava,739,05,55,HR,46.21056,16.03556 54693,Ljubešćica,739,05,55,HR,46.16667,16.38333 54701,Ludbreg,739,05,55,HR,46.25194,16.61472 54750,Nedeljanec,739,05,55,HR,46.28778,16.28333 54805,Petrijanec,739,05,55,HR,46.34917,16.225 54858,Remetinec,739,05,55,HR,46.18528,16.32778 54905,Sračinec,739,05,55,HR,46.32944,16.27889 54932,Sveti Đurđ,739,05,55,HR,46.28331,16.60438 54947,Tužno,739,05,55,HR,46.25667,16.235 54953,Varaždin,739,05,55,HR,46.30444,16.33778 54965,Vidovec,739,05,55,HR,46.28333,16.24111 54968,Vinica,739,05,55,HR,46.33611,16.14944 55018,Čačinci,732,10,55,HR,45.60389,17.87028 55019,Čađavica,732,10,55,HR,45.74417,17.85472 54446,Crnac,732,10,55,HR,45.69611,17.93722 54539,Grad Orahovica,732,10,55,HR,45.53333,17.9 54550,Grad Slatina,732,10,55,HR,45.7,17.7 54560,Grad Virovitica,732,10,55,HR,45.83167,17.38483 54576,Gradina,732,10,55,HR,45.85423,17.51109 54732,Mikleuš,732,10,55,HR,45.61861,17.80389 54756,Nova Bukovica,732,10,55,HR,45.66472,17.76694 54786,Orahovica,732,10,55,HR,45.54,17.88472 54809,Pitomača,732,10,55,HR,45.95056,17.22944 54861,Rezovac,732,10,55,HR,45.78333,17.41667 54895,Slatina,732,10,55,HR,45.70333,17.70278 54903,Sopje,732,10,55,HR,45.80111,17.7425 55036,Špišić Bukovica,732,10,55,HR,45.8574,17.30089 54920,Suhopolje,732,10,55,HR,45.79972,17.49917 54973,Virovitica,732,10,55,HR,45.83194,17.38389 54985,Voćin,732,10,55,HR,45.61778,17.54778 55008,Zdenci,732,10,55,HR,45.58917,17.95028 54380,Andrijaševci,741,16,55,HR,45.22472,18.73806 54382,Babina Greda,741,16,55,HR,45.11722,18.53694 54405,Bobota,741,16,55,HR,45.42111,18.85389 54406,Bogdanovci,741,16,55,HR,45.34083,18.93083 54408,Borovo,741,16,55,HR,45.37639,18.96694 54409,Borovo Selo,741,16,55,HR,45.40528,18.97583 54410,Bošnjaci,741,16,55,HR,45.05028,18.75556 54428,Bršadin,741,16,55,HR,45.36278,18.91111 54439,Cerić,741,16,55,HR,45.31139,18.85611 54440,Cerna,741,16,55,HR,45.18194,18.68944 54467,Drenovci,741,16,55,HR,44.91944,18.90284 54559,Grad Vinkovci,741,16,55,HR,45.28044,18.80482 54565,Grad Vukovar,741,16,55,HR,45.33333,19.0 54573,Grad Županja,741,16,55,HR,45.07231,18.69513 54578,Gradište,741,16,55,HR,45.14806,18.70667 54591,Gunja,741,16,55,HR,44.88,18.85333 54602,Ilok,741,16,55,HR,45.22222,19.37694 54605,Ivankovo,741,16,55,HR,45.28861,18.68389 54616,Jarmina,741,16,55,HR,45.31806,18.72917 54655,Komletinci,741,16,55,HR,45.14972,18.94917 54698,Lovas,741,16,55,HR,45.22639,19.17111 54719,Markušica,741,16,55,HR,45.37389,18.70583 54734,Mirkovci,741,16,55,HR,45.26972,18.85111 54751,Negoslavci,741,16,55,HR,45.27944,18.99667 54753,Nijemci,741,16,55,HR,45.14028,19.03556 54769,Nuštar,741,16,55,HR,45.3325,18.84139 54794,Otok,741,16,55,HR,45.14667,18.88389 54840,Privlaka,741,16,55,HR,45.19472,18.8375 54860,Retkovci,741,16,55,HR,45.23333,18.65306 54866,Rokovci,741,16,55,HR,45.23111,18.74389 54902,Soljani,741,16,55,HR,44.95028,18.97028 54909,Stari Jankovci,741,16,55,HR,45.26194,18.91444 55037,Štitar,741,16,55,HR,45.09556,18.64028 54938,Tordinci,741,16,55,HR,45.37028,18.795 54939,Tovarnik,741,16,55,HR,45.165,19.15194 54943,Trpinja,741,16,55,HR,45.41917,18.89917 54969,Vinkovci,741,16,55,HR,45.28833,18.80472 54986,Vođinci,741,16,55,HR,45.27556,18.60972 54989,Vrbanja,741,16,55,HR,44.98079,18.92717 55000,Vukovar,741,16,55,HR,45.35161,19.00225 55043,Županja,741,16,55,HR,45.0775,18.6975 54394,Benkovac,727,13,55,HR,44.03444,15.61278 54397,Bibinje,727,13,55,HR,44.07324,15.28288 54400,Biograd na Moru,727,13,55,HR,43.94333,15.45194 54488,Galovac,727,13,55,HR,44.07139,15.39333 54499,Gornji Karin,727,13,55,HR,44.13598,15.63423 54582,Gračac,727,13,55,HR,44.29916,15.84752 54504,Grad Biograd na Moru,727,13,55,HR,43.93333,15.43333 54617,Jasenice,727,13,55,HR,44.22969,15.57514 54625,Kali,727,13,55,HR,44.06278,15.20556 54673,Kruševo,727,13,55,HR,44.18333,15.65 54754,Nin,727,13,55,HR,44.24139,15.17833 54762,Novigrad Općina,727,13,55,HR,44.19417,15.55667 54770,Obrovac,727,13,55,HR,44.20056,15.68222 54793,Osljak,727,13,55,HR,44.07667,15.20722 54797,Pag,727,13,55,HR,44.445,15.0575 54798,Pakoštane,727,13,55,HR,43.91222,15.50889 54822,Polača,727,13,55,HR,44.01833,15.5175 54823,Poličnik,727,13,55,HR,44.17806,15.37556 54828,Posedarje,727,13,55,HR,44.21361,15.47667 54833,Preko,727,13,55,HR,44.08111,15.1875 54837,Pridraga,727,13,55,HR,44.16667,15.56667 54841,Privlaka,727,13,55,HR,44.26667,15.13333 54856,Ražanac,727,13,55,HR,44.28194,15.34806 54875,Sali,727,13,55,HR,43.93972,15.16333 55032,Škabrnja,727,13,55,HR,44.08949,15.45146 54908,Stari Grad,727,13,55,HR,44.43,15.06222 54911,Starigrad,727,13,55,HR,44.29601,15.43865 54921,Sukošan,727,13,55,HR,44.04696,15.31391 54928,Sveti Filip i Jakov,727,13,55,HR,43.96472,15.43 54937,Tkon,727,13,55,HR,43.91996,15.41639 54944,Turanj,727,13,55,HR,43.97111,15.41139 54948,Ugljan,727,13,55,HR,44.13083,15.10306 54971,Vir,727,13,55,HR,44.29995,15.08663 54998,Vrsi,727,13,55,HR,44.26472,15.2325 55002,Zadar,727,13,55,HR,44.11972,15.24222 54419,Brezovica,738,21,55,HR,45.72919,15.91069 54438,Centar,738,21,55,HR,45.81313,15.97753 54470,Dubrava,738,21,55,HR,45.83361,16.06361 54579,Gradska četvrt Donji grad,738,21,55,HR,45.80834,15.96949 54580,Gradska četvrt Gornji Grad - Medvescak,738,21,55,HR,45.8282,15.97938 54581,Gradska četvrt Podsljeme,738,21,55,HR,45.86097,15.97996 54596,Horvati,738,21,55,HR,45.7,15.81667 54615,Jankomir,738,21,55,HR,45.79167,15.9 54623,Ježdovec,738,21,55,HR,45.78333,15.85 54636,Kašina,738,21,55,HR,45.91134,16.12436 54707,Lučko,738,21,55,HR,45.76111,15.87028 54760,Novi Zagreb,738,21,55,HR,45.78333,15.98333 54771,Odra,738,21,55,HR,45.72979,15.9924 54885,Sesvete,738,21,55,HR,45.83333,16.13333 54912,Stenjevec,738,21,55,HR,45.80846,15.88245 54917,Strmec,738,21,55,HR,45.70843,15.91674 55003,Zadvorsko,738,21,55,HR,45.71978,15.9088 55004,Zagreb,738,21,55,HR,45.81444,15.97798 54396,Bestovje,736,01,55,HR,45.80833,15.81667 54401,Bistra,736,01,55,HR,45.90657,15.85087 54411,Brckovljani,736,01,55,HR,45.83333,16.3 54412,Brdovec,736,01,55,HR,45.86666,15.77102 54413,Bregana,736,01,55,HR,45.84013,15.68792 54456,Donja Bistra,736,01,55,HR,45.90778,15.85444 54457,Donja Lomnica,736,01,55,HR,45.71194,16.02694 54458,Donja Zdenčina,736,01,55,HR,45.66667,15.76667 54462,Donji Stupnik,736,01,55,HR,45.73971,15.85975 54478,Farkaševac,736,01,55,HR,45.87899,16.63467 54495,Gornja Bistra,736,01,55,HR,45.91667,15.9 54583,Gračec,736,01,55,HR,45.83333,16.31667 54514,Grad Dugo Selo,736,01,55,HR,45.809,16.24123 54522,Grad Jastrebarsko,736,01,55,HR,45.66667,15.66667 54547,Grad Samobor,736,01,55,HR,45.8,15.7 54554,Grad Sveti Ivan Zelina,736,01,55,HR,45.96667,16.25 54558,Grad Velika Gorica,736,01,55,HR,45.7,16.08333 54562,Grad Vrbovec,736,01,55,HR,45.86667,16.43333 54567,Grad Zaprešić,736,01,55,HR,45.86667,15.8 54575,Gradec,736,01,55,HR,45.91111,16.48278 54577,Gradići,736,01,55,HR,45.7,16.05 54608,Jablanovec,736,01,55,HR,45.87583,15.85361 54611,Jakovlje,736,01,55,HR,45.93611,15.85559 54618,Jastrebarsko,736,01,55,HR,45.66833,15.64861 54645,Kerestinec,736,01,55,HR,45.7701,15.80864 54669,Križ,736,01,55,HR,45.665,16.52333 54679,Kuče,736,01,55,HR,45.67694,16.145 54695,Lonjica,736,01,55,HR,45.855,16.33 54702,Luka,736,01,55,HR,45.95795,15.81954 54703,Lukavec,736,01,55,HR,45.70444,15.99 54705,Lupoglav,736,01,55,HR,45.79639,16.34639 54735,Mičevec,736,01,55,HR,45.75,16.06667 54741,Mraclin,736,01,55,HR,45.66667,16.09556 54766,Novo Čiče,736,01,55,HR,45.7,16.11667 54767,Novoselec,736,01,55,HR,45.6525,16.53639 54781,Općina Dubrava,736,01,55,HR,45.83759,16.53683 54789,Orešje,736,01,55,HR,45.81618,15.80246 54820,Pojatno,736,01,55,HR,45.905,15.80056 54835,Preseka,736,01,55,HR,45.97456,16.38697 54838,Prigorje Brdovečko,736,01,55,HR,45.87944,15.73806 54848,Pušća,736,01,55,HR,45.91567,15.78049 54852,Rakitje,736,01,55,HR,45.79389,15.82222 54853,Rakov Potok,736,01,55,HR,45.73806,15.79722 54871,Rude,736,01,55,HR,45.76667,15.66667 54876,Samobor,736,01,55,HR,45.80306,15.71806 54919,Stupnik,736,01,55,HR,45.75314,15.84078 54926,Sveta Nedelja,736,01,55,HR,45.79617,15.77971 54927,Sveta Nedjelja,736,01,55,HR,45.79833,15.78056 54956,Velika Gorica,736,01,55,HR,45.7125,16.07556 54958,Velika Mlaka,736,01,55,HR,45.73639,16.03111 54959,Velika Ostrna,736,01,55,HR,45.78752,16.28139 54991,Vrbovec,736,01,55,HR,45.88333,16.42167 55006,Zaprešić,736,01,55,HR,45.85639,15.80778 55009,Zdenci Brdovečki,736,01,55,HR,45.86667,15.75 22011,Acherítou,749,04,57,CY,35.10022,33.86155 22102,Áchna,749,04,57,CY,35.05515,33.78388 22014,Ammochostos Municipality,749,04,57,CY,35.11755,33.94335 22020,Avgórou,749,04,57,CY,35.03615,33.83918 22021,Ayia Napa,749,04,57,CY,34.98213,34.00183 22023,Derýneia,749,04,57,CY,35.06484,33.96083 22029,Famagusta,749,04,57,CY,35.12054,33.93894 22030,Frénaros,749,04,57,CY,35.04121,33.92242 22052,Lefkónoiko,749,04,57,CY,35.2598,33.73189 22054,Leonárisso,749,04,57,CY,35.46892,34.13886 22056,Liopétri,749,04,57,CY,35.00885,33.89256 22072,Paralímni,749,04,57,CY,35.03945,33.98181 22078,Protaras,749,04,57,CY,35.0125,34.05833 22090,Rizokárpaso,749,04,57,CY,35.59719,34.37916 22095,Tríkomo,749,04,57,CY,35.28628,33.89167 22045,Kyrenia,744,06,57,CY,35.33634,33.31729 22046,Kyrenia Municipality,744,06,57,CY,35.33672,33.31504 22059,Lápithos,744,06,57,CY,35.33823,33.17368 22104,Ágios Týchon,747,03,57,CY,34.72606,33.13872 22015,Aradíppou,747,03,57,CY,34.95151,33.59199 22019,Athíenou,747,03,57,CY,35.0618,33.54156 22024,Dhromolaxia,747,03,57,CY,34.87551,33.58684 22049,Kíti,747,03,57,CY,34.84696,33.57344 22039,Kofínou,747,03,57,CY,34.82449,33.3913 22042,Kolossi,747,03,57,CY,34.66865,32.93375 22050,Kórnos,747,03,57,CY,34.92396,33.39764 22051,Larnaca,747,03,57,CY,34.92291,33.6233 22057,Livádia,747,03,57,CY,34.95118,33.62658 22062,Meneou,747,03,57,CY,34.86114,33.59516 22064,Mosfilotí,747,03,57,CY,34.95256,33.42511 22087,Pérgamos,747,03,57,CY,35.04167,33.70833 22076,Perivólia,747,03,57,CY,34.83355,33.58196 22079,Psevdás,747,03,57,CY,34.94653,33.46277 22089,Pýla,747,03,57,CY,35.01237,33.69188 22093,Tersefánou,747,03,57,CY,34.85411,33.54746 22094,Troúlloi,747,03,57,CY,35.03203,33.61501 22099,Voróklini,747,03,57,CY,34.986,33.65387 22100,Xylofágou,747,03,57,CY,34.97743,33.84894 22101,Xylotymbou,747,03,57,CY,35.0172,33.74245 22103,Ágios Tomás,748,02,57,CY,34.71158,32.73129 22028,Erími,748,02,57,CY,34.67766,32.91815 22031,Germasógeia,748,02,57,CY,34.72207,33.08254 22044,Kyperoúnta,748,02,57,CY,34.93815,32.97551 22053,Lemesós,748,02,57,CY,34.69218,33.02854 22055,Limassol,748,02,57,CY,34.68406,33.03794 22065,Mouttagiáka,748,02,57,CY,34.72022,33.10066 22082,Páchna,748,02,57,CY,34.77874,32.79355 22084,Páno Polemídia,748,02,57,CY,34.70559,32.99269 22073,Parekklisha,748,02,57,CY,34.74583,33.15833 22074,Peléndri,748,02,57,CY,34.89597,32.96817 22077,Pissoúri,748,02,57,CY,34.66942,32.70132 22081,Pyrgos,748,02,57,CY,34.74167,33.18333 22091,Sotíra,748,02,57,CY,34.71189,32.8634 22092,Soúni-Zanakiá,748,02,57,CY,34.7357,32.88437 22105,Ýpsonas,748,02,57,CY,34.68797,32.96191 22012,Akáki,745,01,57,CY,35.13341,33.12873 22013,Alámpra,745,01,57,CY,34.98898,33.39887 22016,Aredioú,745,01,57,CY,35.04844,33.1961 22018,Astromerítis,745,01,57,CY,35.14096,33.03793 22025,Dáli,745,01,57,CY,35.02294,33.42195 22027,Ergátes,745,01,57,CY,35.05365,33.24292 22035,Géri,745,01,57,CY,35.1056,33.41977 22036,Kakopetriá,745,01,57,CY,34.98768,32.90468 22047,Káto Defterá,745,01,57,CY,35.08489,33.27558 22048,Káto Pýrgos,745,01,57,CY,35.17897,32.686 22038,Klírou,745,01,57,CY,35.02004,33.17806 22040,Kokkinotrimithiá,745,01,57,CY,35.15303,33.19966 22060,Léfka,745,01,57,CY,35.11199,32.84997 22061,Lýmpia,745,01,57,CY,34.99889,33.46175 22058,Lythrodóntas,745,01,57,CY,34.95105,33.29777 22066,Mámmari,745,01,57,CY,35.17604,33.20435 22067,Méniko,745,01,57,CY,35.10945,33.14474 22068,Mórfou,745,01,57,CY,35.19869,32.99338 22069,Nicosia,745,01,57,CY,35.17531,33.3642 22070,Nicosia Municipality,745,01,57,CY,35.16944,33.36081 22083,Páno Defterá,745,01,57,CY,35.07778,33.26584 22086,Péra,745,01,57,CY,35.0335,33.25413 22075,Peristeróna,745,01,57,CY,35.12928,33.07858 22080,Psimolofou,745,01,57,CY,35.0625,33.2625 22097,Tséri,745,01,57,CY,35.07307,33.32344 22017,Argáka,746,05,57,CY,35.06646,32.49446 22022,Chlórakas,746,05,57,CY,34.79768,32.41207 22026,Emba,746,05,57,CY,34.807,32.42406 22032,Geroskipou,746,05,57,CY,34.75498,32.45155 22033,Geroskípou (quarter),746,05,57,CY,34.7619,32.45135 22034,Geroskípou Municipality,746,05,57,CY,34.75142,32.45449 22037,Kissonerga,746,05,57,CY,34.82279,32.40131 22041,Koloni,746,05,57,CY,34.75228,32.46487 22043,Konia,746,05,57,CY,34.78516,32.459 22063,Mesógi,746,05,57,CY,34.81577,32.45542 22071,Paphos,746,05,57,CY,34.77679,32.42451 22085,Pégeia,746,05,57,CY,34.88341,32.38166 22088,Pólis,746,05,57,CY,35.03534,32.42575 22098,Tála,746,05,57,CY,34.83745,32.43272 22096,Tsáda,746,05,57,CY,34.83801,32.47547 22115,Bavorov,4639,31,58,CZ,49.12184,14.07893 22118,Bechyně,4639,31,58,CZ,49.29523,14.4681 22123,Benešov nad Černou,4639,31,58,CZ,48.7294,14.62737 22125,Bernartice,4639,31,58,CZ,49.36889,14.38101 22130,Blatná,4639,31,58,CZ,49.42489,13.88176 22147,Borek,4639,31,58,CZ,49.02339,14.50088 22150,Borová Lada,4639,31,58,CZ,48.98983,13.65986 22149,Borovany,4639,31,58,CZ,48.8986,14.64227 22164,Brloh,4639,31,58,CZ,48.92987,14.21857 23388,České Budějovice,4639,31,58,CZ,48.97447,14.47434 23390,České Velenice,4639,31,58,CZ,48.76851,14.96368 23393,Český Krumlov,4639,31,58,CZ,48.81091,14.31521 23394,Český Rudolec,4639,31,58,CZ,49.06835,15.32437 22219,Chlum u Třeboně,4639,31,58,CZ,48.96235,14.92799 22227,Chotoviny,4639,31,58,CZ,49.47803,14.67695 22240,Chvalšiny,4639,31,58,CZ,48.85401,14.21114 22243,Chýnov,4639,31,58,CZ,49.40677,14.81122 22242,Chyšky,4639,31,58,CZ,49.52346,14.42757 23396,Čimelice,4639,31,58,CZ,49.46557,14.06922 23397,Čkyně,4639,31,58,CZ,49.11503,13.82906 22252,Dačice,4639,31,58,CZ,49.08154,15.43727 22277,Dolní Bukovsko,4639,31,58,CZ,49.17086,14.58127 22282,Dolní Dvořiště,4639,31,58,CZ,48.65642,14.45221 22324,Dřiteň,4639,31,58,CZ,49.1428,14.34596 22313,Dubné,4639,31,58,CZ,48.97619,14.36038 22328,Frymburk,4639,31,58,CZ,48.66094,14.16564 22355,Hluboká nad Vltavou,4639,31,58,CZ,49.05225,14.43427 22385,Horní Planá,4639,31,58,CZ,48.76736,14.03257 22390,Horní Stropnice,4639,31,58,CZ,48.76124,14.73502 22418,Hrdějovice,4639,31,58,CZ,49.01893,14.47857 22436,Husinec,4639,31,58,CZ,49.05496,13.98697 22460,Jarošov nad Nežárkou,4639,31,58,CZ,49.18989,15.06734 22476,Jindřichův Hradec,4639,31,58,CZ,49.14404,15.00301 22479,Jistebnice,4639,31,58,CZ,49.48553,14.5276 22582,Kájov,4639,31,58,CZ,48.81082,14.25859 22494,Kamenný Újezd,4639,31,58,CZ,48.89753,14.44638 22495,Kaplice,4639,31,58,CZ,48.73881,14.49449 22496,Kardašova Řečice,4639,31,58,CZ,49.18478,14.85315 22503,Katovice,4639,31,58,CZ,49.27348,13.83035 22545,Kovářov,4639,31,58,CZ,49.5176,14.27809 22583,Křemže,4639,31,58,CZ,48.90497,14.30568 22575,Kunžak,4639,31,58,CZ,49.12119,15.19028 22592,Ledenice,4639,31,58,CZ,48.93329,14.61886 22603,Lhenice,4639,31,58,CZ,48.99479,14.1498 22627,Lišov,4639,31,58,CZ,49.01597,14.60838 22626,Litvínovice,4639,31,58,CZ,48.96207,14.45146 22634,Lomnice nad Lužnicí,4639,31,58,CZ,49.08468,14.71727 22640,Loučovice,4639,31,58,CZ,48.62019,14.25747 22670,Malonty,4639,31,58,CZ,48.68611,14.57678 22674,Malšice,4639,31,58,CZ,49.36391,14.57868 22689,Milevsko,4639,31,58,CZ,49.45089,14.36 22696,Mirotice,4639,31,58,CZ,49.42908,14.03697 22697,Mirovice,4639,31,58,CZ,49.51555,14.03582 22702,Mladá Vožice,4639,31,58,CZ,49.53313,14.80857 22762,Netolice,4639,31,58,CZ,49.0493,14.197 22772,Nová Bystřice,4639,31,58,CZ,49.01926,15.10316 22776,Nová Včelnice,4639,31,58,CZ,49.23935,15.0726 22777,Nové Hrady,4639,31,58,CZ,48.78963,14.77839 22877,Okres České Budějovice,4639,31,58,CZ,49.0,14.5 22878,Okres Český Krumlov,4639,31,58,CZ,48.75,14.33333 22824,Okres Jindřichův Hradec,4639,31,58,CZ,49.08333,15.16667 22854,Okres Písek,4639,31,58,CZ,49.4,14.2 22850,Okres Prachatice,4639,31,58,CZ,49.0,13.86667 22862,Okres Strakonice,4639,31,58,CZ,49.26667,13.9 22867,Okres Tábor,4639,31,58,CZ,49.41667,14.66667 22893,Opařany,4639,31,58,CZ,49.39678,14.48137 22993,Písek,4639,31,58,CZ,49.3088,14.1475 22936,Planá nad Lužnicí,4639,31,58,CZ,49.35444,14.70147 22968,Prachatice,4639,31,58,CZ,49.01292,13.99752 22982,Protivín,4639,31,58,CZ,49.19949,14.21717 23013,Radomyšl,4639,31,58,CZ,49.31634,13.93024 23049,Rudolfov,4639,31,58,CZ,48.99339,14.54179 23063,Sedlice,4639,31,58,CZ,48.77401,14.39115 23069,Sepekov,4639,31,58,CZ,49.42865,14.41815 23414,Ševětín,4639,31,58,CZ,49.10005,14.5722 23071,Sezimovo Ústí,4639,31,58,CZ,49.38519,14.6848 23083,Slavonice,4639,31,58,CZ,48.99753,15.35154 23092,Soběslav,4639,31,58,CZ,49.25993,14.71861 23098,Srubec,4639,31,58,CZ,48.94806,14.54131 23099,Stachy,4639,31,58,CZ,49.10179,13.66659 23120,Strakonice,4639,31,58,CZ,49.26141,13.90237 23123,Strmilov,4639,31,58,CZ,49.15846,15.19934 23124,Strunkovice nad Blanicí,4639,31,58,CZ,49.08402,14.05522 23133,Studená,4639,31,58,CZ,49.18516,15.28688 23141,Suchdol nad Lužnicí,4639,31,58,CZ,48.89,14.8772 23189,Tábor,4639,31,58,CZ,49.41441,14.6578 23200,Třeboň,4639,31,58,CZ,49.00364,14.77065 23173,Trhové Sviny,4639,31,58,CZ,48.84231,14.63924 23190,Týn nad Vltavou,4639,31,58,CZ,49.2234,14.42057 23214,Vacov,4639,31,58,CZ,49.13686,13.72911 23313,Včelná,4639,31,58,CZ,48.92373,14.45383 23228,Velešín,4639,31,58,CZ,48.82949,14.46252 23261,Veselí nad Lužnicí,4639,31,58,CZ,49.1843,14.69734 23315,Větřní,4639,31,58,CZ,48.77425,14.28616 23271,Vimperk,4639,31,58,CZ,49.05857,13.78286 23279,Vlachovo Březí,4639,31,58,CZ,49.08135,13.95842 23286,Vodňany,4639,31,58,CZ,49.14789,14.17513 23288,Volary,4639,31,58,CZ,48.90881,13.88657 23289,Volyně,4639,31,58,CZ,49.16578,13.88624 23309,Vyšší Brod,4639,31,58,CZ,48.61598,14.31183 23337,Zdíkov,4639,31,58,CZ,49.08456,13.69738 23341,Zliv,4639,31,58,CZ,49.06608,14.36613 22107,Adamov,4602,64,58,CZ,49.30162,16.65253 22196,Bílovice nad Svitavou,4602,64,58,CZ,49.24708,16.67247 22129,Blansko,4602,64,58,CZ,49.36304,16.64446 22131,Blažovice,4602,64,58,CZ,49.16569,16.78611 22136,Blížkovice,4602,64,58,CZ,48.99976,15.83482 22134,Blučina,4602,64,58,CZ,49.05497,16.6445 22154,Bořetice,4602,64,58,CZ,48.91302,16.85306 22155,Bořitov,4602,64,58,CZ,49.42504,16.59119 22152,Boskovice,4602,64,58,CZ,49.48751,16.65997 22156,Bošovice,4602,64,58,CZ,49.05351,16.83676 22157,Božice,4602,64,58,CZ,48.83687,16.28875 22204,Břeclav,4602,64,58,CZ,48.75897,16.88203 22213,Březí,4602,64,58,CZ,48.81928,16.56748 22166,Brno,4602,64,58,CZ,49.19522,16.60796 22180,Bučovice,4602,64,58,CZ,49.14896,17.00191 22190,Bzenec,4602,64,58,CZ,48.97336,17.26685 23363,Čebín,4602,64,58,CZ,49.31324,16.47791 23366,Čejč,4602,64,58,CZ,48.94653,16.96511 23365,Čejkovice,4602,64,58,CZ,48.90592,16.9423 23375,Černá Hora,4602,64,58,CZ,49.41361,16.5814 22249,Dambořice,4602,64,58,CZ,49.03828,16.91757 22267,Dobšice,4602,64,58,CZ,48.84834,16.08218 22275,Dolní Bojanovice,4602,64,58,CZ,48.85861,17.02859 22281,Dolní Dunajovice,4602,64,58,CZ,48.85447,16.59283 22283,Dolní Kounice,4602,64,58,CZ,49.07011,16.46492 22285,Dolní Loućky,4602,64,58,CZ,49.36099,16.35871 22302,Domanín,4602,64,58,CZ,49.00167,17.28476 22305,Doubravice nad Svitavou,4602,64,58,CZ,49.43664,16.62937 22310,Drásov,4602,64,58,CZ,49.33183,16.47798 22308,Drnholec,4602,64,58,CZ,48.85746,16.48586 22309,Drnovice,4602,64,58,CZ,49.2763,16.95146 22316,Dubňany,4602,64,58,CZ,48.91694,17.09004 22350,Hevlín,4602,64,58,CZ,48.75209,16.38131 22354,Hlohovec,4602,64,58,CZ,48.77399,16.7623 22364,Hodonice,4602,64,58,CZ,48.8368,16.16337 22365,Hodonín,4602,64,58,CZ,48.84893,17.13244 22403,Hostěradice,4602,64,58,CZ,48.95006,16.25931 22404,Hovorany,4602,64,58,CZ,48.95493,16.99346 22424,Hroznová Lhota,4602,64,58,CZ,48.90784,17.41697 22426,Hrušky,4602,64,58,CZ,48.79272,16.97404 22427,Hrušovany nad Jevišovkou,4602,64,58,CZ,48.82991,16.40271 22428,Hrušovany u Brna,4602,64,58,CZ,49.03863,16.59429 22437,Hustopeče,4602,64,58,CZ,48.94085,16.73762 22444,Ivančice,4602,64,58,CZ,49.10144,16.37752 22443,Ivanovice na Hané,4602,64,58,CZ,49.30542,17.09343 22459,Jaroslavice,4602,64,58,CZ,48.75657,16.23351 22463,Jedovnice,4602,64,58,CZ,49.34453,16.75595 22469,Jevišovice,4602,64,58,CZ,48.98736,15.98992 22516,Klobouky,4602,64,58,CZ,48.99609,16.86298 22520,Kněždub,4602,64,58,CZ,48.88666,17.39546 22525,Kobylí,4602,64,58,CZ,48.93286,16.89159 22542,Kostice,4602,64,58,CZ,48.74685,16.97869 22584,Křenovice,4602,64,58,CZ,49.14216,16.82932 22585,Křepice,4602,64,58,CZ,48.99986,16.71989 22562,Krumvíř,4602,64,58,CZ,48.98901,16.91027 22574,Kunštát,4602,64,58,CZ,49.50645,16.51722 22577,Kuřim,4602,64,58,CZ,49.29852,16.53144 22580,Kyjov,4602,64,58,CZ,49.01018,17.12253 22591,Lanžhot,4602,64,58,CZ,48.72443,16.96695 22594,Lednice,4602,64,58,CZ,48.79992,16.80339 22595,Lelekovice,4602,64,58,CZ,49.29144,16.57874 22598,Letonice,4602,64,58,CZ,49.17726,16.95913 22599,Letovice,4602,64,58,CZ,49.54709,16.57357 22618,Lipov,4602,64,58,CZ,48.90495,17.46171 22619,Lipovec,4602,64,58,CZ,49.38394,16.80583 22621,Lipůvka,4602,64,58,CZ,49.33933,16.55313 22632,Lomnice,4602,64,58,CZ,49.40462,16.41359 22636,Louka,4602,64,58,CZ,48.91517,17.48927 22657,Lužice,4602,64,58,CZ,48.84098,17.07104 22659,Lysice,4602,64,58,CZ,49.4516,16.53716 22737,Měnín,4602,64,58,CZ,49.0824,16.69424 22742,Město Brno,4602,64,58,CZ,49.19954,16.60755 22688,Mikulčice,4602,64,58,CZ,48.81643,17.05107 22685,Mikulov,4602,64,58,CZ,48.80556,16.6378 22690,Milotice,4602,64,58,CZ,48.95528,17.14241 22695,Miroslav,4602,64,58,CZ,48.94767,16.31252 22709,Modřice,4602,64,58,CZ,49.11928,16.60446 22712,Mokrá Hora,4602,64,58,CZ,49.26176,16.59107 22715,Moravany,4602,64,58,CZ,49.1478,16.58026 22717,Moravská Nová Ves,4602,64,58,CZ,48.80304,17.01371 22721,Moravský Krumlov,4602,64,58,CZ,49.04893,16.31169 22722,Moravský Písek,4602,64,58,CZ,48.99016,17.33269 22723,Moravský Žižkov,4602,64,58,CZ,48.83285,16.9314 22729,Moutnice,4602,64,58,CZ,49.04924,16.73741 22733,Mutěnice,4602,64,58,CZ,48.90413,17.02917 22755,Nedvědice,4602,64,58,CZ,49.45702,16.33406 22761,Nesovice,4602,64,58,CZ,49.15111,17.08095 22769,Nosislav,4602,64,58,CZ,49.0138,16.65431 22771,Novosedly,4602,64,58,CZ,48.83704,16.49273 22808,Okres Blansko,4602,64,58,CZ,49.37399,16.6436 22811,Okres Břeclav,4602,64,58,CZ,48.75958,16.8726 22809,Okres Brno-venkov,4602,64,58,CZ,49.16667,16.5 22819,Okres Hodonín,4602,64,58,CZ,48.86471,17.13284 22871,Okres Vyškov,4602,64,58,CZ,49.27844,16.99362 22873,Okres Znojmo,4602,64,58,CZ,48.862,16.0627 22883,Olbramovice,4602,64,58,CZ,48.9848,16.40239 22885,Olešnice,4602,64,58,CZ,49.55755,16.42169 22916,Ořechov,4602,64,58,CZ,49.11118,16.52329 22901,Oslavany,4602,64,58,CZ,49.12335,16.33653 22903,Ostopovice,4602,64,58,CZ,49.161,16.54548 22908,Ostrov u Macochy,4602,64,58,CZ,49.38236,16.76268 22914,Otnice,4602,64,58,CZ,49.08642,16.81443 22928,Petrov,4602,64,58,CZ,48.88196,17.2781 22945,Podivín,4602,64,58,CZ,48.82554,16.84822 22946,Podolí,4602,64,58,CZ,49.19042,16.72084 22948,Pohořelice,4602,64,58,CZ,48.98119,16.52445 22964,Pozořice,4602,64,58,CZ,49.20976,16.79074 22997,Předklášteří,4602,64,58,CZ,49.35253,16.40241 22985,Prušánky,4602,64,58,CZ,48.8284,16.98068 22989,Pustiměř,4602,64,58,CZ,49.32251,17.02792 23055,Rájec-Jestřebí,4602,64,58,CZ,49.41094,16.63902 23056,Ráječko,4602,64,58,CZ,49.39393,16.64497 23017,Rajhrad,4602,64,58,CZ,49.09021,16.60388 23018,Rajhradice,4602,64,58,CZ,49.09203,16.62933 23020,Rakvice,4602,64,58,CZ,48.85811,16.8133 23025,Ratíškovice,4602,64,58,CZ,48.92002,17.16561 23407,Říčany,4602,64,58,CZ,49.21497,16.39362 23027,Rohatec,4602,64,58,CZ,48.8804,17.1833 23035,Rosice,4602,64,58,CZ,49.18232,16.38787 23039,Rousínov,4602,64,58,CZ,49.20128,16.88215 23408,Šakvice,4602,64,58,CZ,48.89746,16.71424 23409,Šanov,4602,64,58,CZ,48.80089,16.37858 23410,Šardice,4602,64,58,CZ,48.96403,17.02812 23411,Šatov,4602,64,58,CZ,48.79317,16.00992 23416,Šitbořice,4602,64,58,CZ,49.01433,16.77975 23417,Šlapanice,4602,64,58,CZ,49.16863,16.72731 23082,Slavkov u Brna,4602,64,58,CZ,49.15325,16.87649 23093,Sokolnice,4602,64,58,CZ,49.11392,16.72156 23129,Strážnice,4602,64,58,CZ,48.90102,17.3168 23137,Střelice,4602,64,58,CZ,49.15221,16.50399 23142,Suchohrdly,4602,64,58,CZ,48.86822,16.09471 23145,Sudoměřice,4602,64,58,CZ,48.86723,17.25676 23150,Svitávka,4602,64,58,CZ,49.50178,16.59793 23157,Tasovice,4602,64,58,CZ,48.8361,16.15558 23158,Telnice,4602,64,58,CZ,49.10187,16.71774 23195,Těšany,4602,64,58,CZ,49.03956,16.77003 23166,Tišnov,4602,64,58,CZ,49.34872,16.42438 23180,Troubsko,4602,64,58,CZ,49.16951,16.51078 23187,Tvarožná,4602,64,58,CZ,49.19177,16.77146 23188,Tvrdonice,4602,64,58,CZ,48.76048,16.99446 23191,Týnec,4602,64,58,CZ,48.77943,17.01322 23356,Únanov,4602,64,58,CZ,48.90082,16.06351 23213,Vacenovice,4602,64,58,CZ,48.9451,17.17404 23221,Valtice,4602,64,58,CZ,48.74069,16.75499 23235,Velká nad Veličkou,4602,64,58,CZ,48.88257,17.5206 23236,Velké Bílovice,4602,64,58,CZ,48.84929,16.89227 23244,Velké Němčice,4602,64,58,CZ,48.99168,16.67208 23245,Velké Opatovice,4602,64,58,CZ,49.61237,16.67947 23246,Velké Pavlovice,4602,64,58,CZ,48.90469,16.81605 23262,Veselí nad Moravou,4602,64,58,CZ,48.95363,17.37648 23264,Veverská Bítýška,4602,64,58,CZ,49.27591,16.43686 23273,Viničné Šumice,4602,64,58,CZ,49.21358,16.82541 23277,Višňové,4602,64,58,CZ,48.98241,16.15025 23282,Vlkoš,4602,64,58,CZ,48.9896,17.16356 23285,Vnorovy,4602,64,58,CZ,48.93096,17.3505 23287,Vojkovice,4602,64,58,CZ,49.05138,16.6082 23291,Vracov,4602,64,58,CZ,48.97523,17.211 23292,Vranovice,4602,64,58,CZ,48.966,16.6066 23295,Vrbice,4602,64,58,CZ,48.91508,16.89779 23298,Vrbovec,4602,64,58,CZ,48.79978,16.10061 23308,Vyškov,4602,64,58,CZ,49.27747,16.99897 23435,Žabčice,4602,64,58,CZ,49.0116,16.60257 23325,Zaječí,4602,64,58,CZ,48.87295,16.76646 23326,Zastávka,4602,64,58,CZ,49.188,16.3631 23330,Zbraslav,4602,64,58,CZ,49.22155,16.29415 23332,Zbýšov,4602,64,58,CZ,49.15524,16.34951 23440,Ždánice,4602,64,58,CZ,49.06729,17.02751 23446,Želešice,4602,64,58,CZ,49.11689,16.58137 23448,Žeravice,4602,64,58,CZ,49.02288,17.23726 23449,Židlochovice,4602,64,58,CZ,49.03952,16.61881 23344,Znojmo,4602,64,58,CZ,48.8555,16.0488 22106,Abertamy,4581,41,58,CZ,50.36874,12.81826 22110,Aš,4581,41,58,CZ,50.22387,12.19499 22137,Bochov,4581,41,58,CZ,50.14872,13.05227 22209,Březová,4581,41,58,CZ,50.14557,12.64996 22178,Bukovany,4581,41,58,CZ,50.16632,12.57265 22217,Cheb,4581,41,58,CZ,50.07963,12.37392 22224,Chodov,4581,41,58,CZ,50.24018,12.74551 22248,Dalovice,4581,41,58,CZ,50.24779,12.89581 22292,Dolní Rychnov,4581,41,58,CZ,50.16462,12.64507 22299,Dolní Žandov,4581,41,58,CZ,50.01794,12.55101 22326,Františkovy Lázně,4581,41,58,CZ,50.12033,12.35174 22337,Habartov,4581,41,58,CZ,50.18297,12.55054 22346,Hazlov,4581,41,58,CZ,50.15634,12.27238 22388,Horní Slavkov,4581,41,58,CZ,50.13863,12.80758 22416,Hranice,4581,41,58,CZ,50.30459,12.17577 22425,Hroznětín,4581,41,58,CZ,50.3094,12.8718 22484,Jáchymov,4581,41,58,CZ,50.35846,12.93465 22498,Karlovy Vary,4581,41,58,CZ,50.23271,12.87117 22518,Klášter,4581,41,58,CZ,49.96762,12.87623 22556,Kraslice,4581,41,58,CZ,50.32372,12.51747 22581,Kynšperk nad Ohří,4581,41,58,CZ,50.11893,12.53027 22664,Lázně Kynžvart,4581,41,58,CZ,50.01058,12.62474 22630,Loket,4581,41,58,CZ,50.186,12.75405 22633,Lomnice,4581,41,58,CZ,50.21174,12.63267 22644,Luby,4581,41,58,CZ,50.25248,12.40595 22676,Mariánské Lázně,4581,41,58,CZ,49.96459,12.70118 22681,Merklín,4581,41,58,CZ,50.32808,12.8635 22740,Město,4581,41,58,CZ,49.97997,12.86432 22757,Nejdek,4581,41,58,CZ,50.32242,12.72936 22775,Nová Role,4581,41,58,CZ,50.27092,12.78422 22781,Nové Sedlo,4581,41,58,CZ,50.20647,12.738 22812,Okres Cheb,4581,41,58,CZ,50.08333,12.5 22826,Okres Karlovy Vary,4581,41,58,CZ,50.16667,13.0 22861,Okres Sokolov,4581,41,58,CZ,50.21667,12.63333 22887,Oloví,4581,41,58,CZ,50.25113,12.55877 22907,Ostrov,4581,41,58,CZ,50.30592,12.93907 22940,Plesná,4581,41,58,CZ,50.2207,12.34669 23036,Rotava,4581,41,58,CZ,50.29627,12.57341 23058,Sadov,4581,41,58,CZ,50.26711,12.89708 23073,Skalná,4581,41,58,CZ,50.1703,12.36144 23094,Sokolov,4581,41,58,CZ,50.1813,12.6401 23147,Svatava,4581,41,58,CZ,50.19223,12.62524 23170,Toužim,4581,41,58,CZ,50.06049,12.98506 23233,Velká Hleďsebe,4581,41,58,CZ,49.96151,12.66763 23274,Vintířov,4581,41,58,CZ,50.23382,12.71748 23456,Žlutice,4581,41,58,CZ,50.09192,13.16297 22114,Batelov,4575,63,58,CZ,49.31425,15.39465 22138,Bohdalov,4575,63,58,CZ,49.47921,15.87582 22170,Brtnice,4575,63,58,CZ,49.30695,15.67642 22175,Budišov,4575,63,58,CZ,49.27138,16.00383 22187,Bystřice nad Pernštejnem,4575,63,58,CZ,49.52295,16.26147 23371,Černovice,4575,63,58,CZ,49.37265,14.96089 22228,Chotěboř,4575,63,58,CZ,49.72072,15.67018 22259,Dobronín,4575,63,58,CZ,49.47833,15.64992 22279,Dolní Cerekev,4575,63,58,CZ,49.34449,15.45655 22335,Golčův Jeníkov,4575,63,58,CZ,49.81626,15.47686 22338,Habry,4575,63,58,CZ,49.75603,15.48486 22344,Havlíčkův Brod,4575,63,58,CZ,49.6069,15.57937 22349,Herálec,4575,63,58,CZ,49.68891,15.99431 22379,Horní Cerekev,4575,63,58,CZ,49.32026,15.32769 22423,Hrotovice,4575,63,58,CZ,49.1077,16.06067 22435,Humpolec,4575,63,58,CZ,49.54152,15.35932 22458,Jaroměřice nad Rokytnou,4575,63,58,CZ,49.09408,15.89331 22464,Jemnice,4575,63,58,CZ,49.01898,15.56994 22471,Jihlava,4575,63,58,CZ,49.3961,15.59124 22473,Jimramov,4575,63,58,CZ,49.63719,16.22632 22488,Kamenice,4575,63,58,CZ,49.36659,15.78023 22490,Kamenice nad Lipou,4575,63,58,CZ,49.30303,15.07519 22521,Kněžice,4575,63,58,CZ,49.27078,15.67216 22588,Křižanov,4575,63,58,CZ,49.38858,16.1096 22589,Křížová,4575,63,58,CZ,49.68841,15.85207 22593,Ledeč nad Sázavou,4575,63,58,CZ,49.69517,15.27772 22667,Lípa,4575,63,58,CZ,49.55418,15.54465 22647,Luka nad Jihlavou,4575,63,58,CZ,49.37403,15.70194 22648,Lukavec,4575,63,58,CZ,49.56541,14.99041 22746,Měřín,4575,63,58,CZ,49.39321,15.88381 22711,Mohelno,4575,63,58,CZ,49.11412,16.19022 22719,Moravské Budějovice,4575,63,58,CZ,49.05209,15.80864 22795,Náměšť nad Oslavou,4575,63,58,CZ,49.20726,16.15849 22773,Nová Cerekev,4575,63,58,CZ,49.41723,15.11675 22778,Nové Město na Moravě,4575,63,58,CZ,49.56144,16.07418 22783,Nové Syrovice,4575,63,58,CZ,49.01763,15.77345 22784,Nové Veselí,4575,63,58,CZ,49.51976,15.90853 22818,Okres Havlíčkův Brod,4575,63,58,CZ,49.66667,15.58333 22823,Okres Jihlava,4575,63,58,CZ,49.33333,15.58333 22846,Okres Pelhřimov,4575,63,58,CZ,49.41667,15.16667 22868,Okres Třebíč,4575,63,58,CZ,49.13333,15.93333 22880,Okres Žďár nad Sázavou,4575,63,58,CZ,49.5,16.03333 22882,Okříšky,4575,63,58,CZ,49.24539,15.76959 22881,Okrouhlice,4575,63,58,CZ,49.62991,15.49083 22917,Pacov,4575,63,58,CZ,49.47076,15.00168 22925,Pelhřimov,4575,63,58,CZ,49.43134,15.22336 22965,Počátky,4575,63,58,CZ,49.2602,15.24022 22953,Polná,4575,63,58,CZ,49.487,15.71881 23004,Přibyslav,4575,63,58,CZ,49.57684,15.73855 23037,Rouchovany,4575,63,58,CZ,49.07036,16.1076 23115,Stařeč,4575,63,58,CZ,49.19783,15.82791 23421,Štoky,4575,63,58,CZ,49.50249,15.58863 23153,Světlá nad Sázavou,4575,63,58,CZ,49.66801,15.40393 23152,Svratka,4575,63,58,CZ,49.71066,16.03214 23159,Telč,4575,63,58,CZ,49.18418,15.45275 23201,Třebíč,4575,63,58,CZ,49.21492,15.88166 23204,Třešť,4575,63,58,CZ,49.29092,15.48211 23231,Velká Bíteš,4575,63,58,CZ,49.28838,16.22742 23243,Velké Meziříčí,4575,63,58,CZ,49.35522,16.01224 23251,Velký Beranov,4575,63,58,CZ,49.40504,15.667 23270,Vilémov,4575,63,58,CZ,49.81566,15.53584 23280,Vladislav,4575,63,58,CZ,49.21017,15.9883 23459,Žďár nad Sázavou,4575,63,58,CZ,49.56263,15.93924 23460,Žďár nad Sázavou Druhy,4575,63,58,CZ,49.58726,15.93215 23442,Želetava,4575,63,58,CZ,49.14187,15.673 23447,Želiv,4575,63,58,CZ,49.52984,15.22181 23451,Žirovnice,4575,63,58,CZ,49.25318,15.18824 22109,Albrechtice nad Orlicí,4614,52,58,CZ,50.13979,16.06437 22198,Bílá Třemešná,4614,52,58,CZ,50.44465,15.74101 22148,Borohrádek,4614,52,58,CZ,50.09777,16.09326 22169,Broumov,4614,52,58,CZ,50.58566,16.33181 23362,Častolovice,4614,52,58,CZ,50.1291,16.18128 23370,Černilov,4614,52,58,CZ,50.26265,15.92254 23374,Černožice,4614,52,58,CZ,50.31863,15.87403 23381,Červený Kostelec,4614,52,58,CZ,50.47626,16.09289 23385,Česká Skalice,4614,52,58,CZ,50.39467,16.04276 23389,České Meziříčí,4614,52,58,CZ,50.2868,16.04428 22221,Chlumec nad Cidlinou,4614,52,58,CZ,50.1544,15.46026 22261,Dobruška,4614,52,58,CZ,50.29201,16.16001 22298,Dolní Černilov,4614,52,58,CZ,50.2611,15.96107 22306,Doudleby nad Orlicí,4614,52,58,CZ,50.10742,16.26131 22319,Dvůr Králové nad Labem,4614,52,58,CZ,50.43172,15.81402 22407,Hořice,4614,52,58,CZ,50.36609,15.63183 22398,Hostinné,4614,52,58,CZ,50.54066,15.72334 22412,Hradec Králové,4614,52,58,CZ,50.20923,15.83277 22422,Hronov,4614,52,58,CZ,50.47968,16.1823 22456,Jaroměř,4614,52,58,CZ,50.3562,15.92136 22481,Jičín,4614,52,58,CZ,50.43723,15.35162 22533,Kopidlno,4614,52,58,CZ,50.33085,15.27029 22540,Kostelec nad Orlicí,4614,52,58,CZ,50.12267,16.21319 22579,Kvasiny,4614,52,58,CZ,50.2125,16.26323 22663,Lázně Bělohrad,4614,52,58,CZ,50.42874,15.58269 22611,Libáň,4614,52,58,CZ,50.37542,15.21684 22668,Machov,4614,52,58,CZ,50.49927,16.2769 22673,Malé Svatoňovice,4614,52,58,CZ,50.53395,16.04978 22684,Meziměstí,4614,52,58,CZ,50.62461,16.24207 22703,Mladé Buky,4614,52,58,CZ,50.60643,15.83348 22726,Mostek,4614,52,58,CZ,50.48623,15.69622 22792,Náchod,4614,52,58,CZ,50.4167,16.16289 22752,Nechanice,4614,52,58,CZ,50.23737,15.63276 22774,Nová Paka,4614,52,58,CZ,50.49449,15.51503 22779,Nové Město nad Metují,4614,52,58,CZ,50.34456,16.15147 22786,Nový Bydžov,4614,52,58,CZ,50.2415,15.49082 22820,Okres Hradec Králové,4614,52,58,CZ,50.25,15.66667 22825,Okres Jičín,4614,52,58,CZ,50.41667,15.41667 22841,Okres Náchod,4614,52,58,CZ,50.41667,16.16667 22859,Okres Rychnov nad Kněžnou,4614,52,58,CZ,50.23333,16.28333 22866,Okres Trutnov,4614,52,58,CZ,50.58333,15.83333 22894,Opočno,4614,52,58,CZ,50.26742,16.1148 22906,Ostroměř,4614,52,58,CZ,50.37246,15.54949 22924,Pecka,4614,52,58,CZ,50.48034,15.60822 22933,Pilníkov,4614,52,58,CZ,50.53247,15.8202 22951,Police nad Metují,4614,52,58,CZ,50.53687,16.2335 22998,Předměřice nad Labem,4614,52,58,CZ,50.25633,15.81556 22983,Provodov-Šonov,4614,52,58,CZ,50.38711,16.10797 23016,Radvanice,4614,52,58,CZ,50.56745,16.06172 23031,Rokytnice v Orlických Horách,4614,52,58,CZ,50.16473,16.46567 23045,Rtyně v Podkrkonoší,4614,52,58,CZ,50.50523,16.07187 23048,Rudník,4614,52,58,CZ,50.59517,15.73362 23053,Rychnov nad Kněžnou,4614,52,58,CZ,50.16284,16.27488 23075,Skuhrov nad Bělou,4614,52,58,CZ,50.22946,16.2923 23086,Smidary,4614,52,58,CZ,50.29146,15.47725 23087,Smiřice,4614,52,58,CZ,50.29978,15.86508 23090,Sobotka,4614,52,58,CZ,50.46741,15.17619 23095,Solnice,4614,52,58,CZ,50.20366,16.23762 23419,Špindlerův Mlýn,4614,52,58,CZ,50.72615,15.60944 23101,Stará Paka,4614,52,58,CZ,50.51032,15.49444 23109,Staré Nechanice,4614,52,58,CZ,50.24298,15.61787 23136,Stěžery,4614,52,58,CZ,50.21572,15.74831 23151,Svoboda nad Úpou,4614,52,58,CZ,50.62596,15.81648 23161,Teplice nad Metují,4614,52,58,CZ,50.59332,16.17026 23197,Třebechovice pod Orebem,4614,52,58,CZ,50.20097,15.99223 23181,Trutnov,4614,52,58,CZ,50.56101,15.9127 23194,Týniště nad Orlicí,4614,52,58,CZ,50.15136,16.0777 23357,Úpice,4614,52,58,CZ,50.51237,16.01607 23219,Valdice,4614,52,58,CZ,50.45501,15.38488 23222,Vamberk,4614,52,58,CZ,50.11756,16.29067 23248,Velké Poříčí,4614,52,58,CZ,50.46177,16.18931 23250,Velké Svatoňovice,4614,52,58,CZ,50.53164,16.02853 23300,Vrchlabí,4614,52,58,CZ,50.62697,15.60937 23320,Všestary,4614,52,58,CZ,50.2566,15.75983 23436,Žacléř,4614,52,58,CZ,50.66329,15.91063 23323,Zadní Mostek,4614,52,58,CZ,50.4967,15.69804 23443,Železnice,4614,52,58,CZ,50.47274,15.38459 22120,Benecko,4601,51,58,CZ,50.66633,15.54816 22165,Brniště,4601,51,58,CZ,50.72919,14.70338 23384,Česká Lípa,4601,51,58,CZ,50.68551,14.53764 23392,Český Dub,4601,51,58,CZ,50.66054,14.99617 22232,Chrastava,4601,51,58,CZ,50.81693,14.96884 22245,Cvikov,4601,51,58,CZ,50.77668,14.63298 22254,Desná,4601,51,58,CZ,50.75987,15.30284 22269,Doksy,4601,51,58,CZ,50.56471,14.65553 22314,Dubá,4601,51,58,CZ,50.54034,14.54023 22332,Frýdlant,4601,51,58,CZ,50.92139,15.07974 22342,Harrachov,4601,51,58,CZ,50.77209,15.43141 22348,Hejnice,4601,51,58,CZ,50.8772,15.18168 22362,Hodkovice nad Mohelkou,4601,51,58,CZ,50.66586,15.08985 22377,Horní Branná,4601,51,58,CZ,50.60826,15.57146 22431,Hrádek nad Nisou,4601,51,58,CZ,50.85279,14.84455 22445,Jablonec nad Jizerou,4601,51,58,CZ,50.70347,15.42959 22446,Jablonec nad Nisou,4601,51,58,CZ,50.72431,15.17108 22448,Jablonné v Podještědí,4601,51,58,CZ,50.76528,14.76052 22453,Janov nad Nisou,4601,51,58,CZ,50.77204,15.16913 22472,Jilemnice,4601,51,58,CZ,50.6089,15.50653 22483,Josefův Důl,4601,51,58,CZ,50.78191,15.23146 22491,Kamenický Šenov,4601,51,58,CZ,50.77359,14.47287 22549,Kořenov,4601,51,58,CZ,50.75926,15.36532 22551,Košťálov,4601,51,58,CZ,50.57165,15.40403 22604,Liberec,4601,51,58,CZ,50.76711,15.05619 22635,Lomnice nad Popelkou,4601,51,58,CZ,50.53062,15.37341 22652,Lučany nad Nisou,4601,51,58,CZ,50.74136,15.22046 22671,Malá Skála,4601,51,58,CZ,50.64631,15.19543 22694,Mimoň,4601,51,58,CZ,50.65869,14.72474 22706,Mníšek,4601,51,58,CZ,50.83163,15.0563 22780,Nové Město pod Smrkem,4601,51,58,CZ,50.92491,15.22943 22785,Nový Bor,4601,51,58,CZ,50.75761,14.55555 22805,Ohrazenice,4601,51,58,CZ,50.59765,15.12596 22876,Okres Česká Lípa,4601,51,58,CZ,50.66667,14.66667 22821,Okres Jablonec nad Nisou,4601,51,58,CZ,50.75,15.25 22833,Okres Liberec,4601,51,58,CZ,50.83333,15.08333 22860,Okres Semily,4601,51,58,CZ,50.61667,15.41667 22899,Osečná,4601,51,58,CZ,50.69489,14.92138 22996,Pěnčín,4601,51,58,CZ,50.68769,15.23593 22938,Plavy,4601,51,58,CZ,50.70324,15.31736 22955,Poniklá,4601,51,58,CZ,50.66152,15.46329 23010,Příšovice,4601,51,58,CZ,50.57813,15.0839 23022,Raspenava,4601,51,58,CZ,50.90415,15.11465 23030,Rokytnice nad Jizerou,4601,51,58,CZ,50.72561,15.43357 23040,Rovensko pod Troskami,4601,51,58,CZ,50.53532,15.25941 23067,Semily,4601,51,58,CZ,50.60191,15.33552 23089,Smržovka,4601,51,58,CZ,50.7382,15.24639 23127,Stráž nad Nisou,4601,51,58,CZ,50.79099,15.02683 23128,Stráž pod Ralskem,4601,51,58,CZ,50.7028,14.80102 23132,Studenec,4601,51,58,CZ,50.55344,15.54936 23156,Tanvald,4601,51,58,CZ,50.73735,15.30585 23186,Turnov,4601,51,58,CZ,50.58356,15.15186 23220,Valdice,4601,51,58,CZ,50.5835,15.41248 23238,Velké Hamry,4601,51,58,CZ,50.71373,15.31539 23276,Višňova,4601,51,58,CZ,50.96663,15.02495 23306,Vysoké nad Jizerou,4601,51,58,CZ,50.68559,15.40152 23350,Zákupy,4601,51,58,CZ,50.68475,14.64522 23438,Žandov,4601,51,58,CZ,50.71394,14.39623 23445,Železný Brod,4601,51,58,CZ,50.64274,15.25408 22108,Albrechtice,4600,80,58,CZ,49.78645,18.52444 22113,Bartošovice,4600,80,58,CZ,49.66884,18.05461 22116,Baška,4600,80,58,CZ,49.64584,18.37233 22194,Bílovec,4600,80,58,CZ,49.75639,18.01581 22139,Bohumín,4600,80,58,CZ,49.90411,18.35755 22140,Bohuslavice,4600,80,58,CZ,49.94232,18.12866 22145,Bolatice,4600,80,58,CZ,49.95172,18.08358 22161,Brantice,4600,80,58,CZ,50.06351,17.62911 22210,Březová,4600,80,58,CZ,49.79158,17.86556 22214,Břidličná,4600,80,58,CZ,49.91167,17.37107 22171,Brumovice,4600,80,58,CZ,50.0153,17.74958 22172,Bruntál,4600,80,58,CZ,49.98844,17.4647 22173,Brušperk,4600,80,58,CZ,49.7001,18.2221 22176,Budišov nad Budišovkou,4600,80,58,CZ,49.79511,17.62969 22179,Bukovec,4600,80,58,CZ,49.55114,18.82683 22186,Bystřice,4600,80,58,CZ,49.63657,18.72038 23367,Čeladná,4600,80,58,CZ,49.54873,18.33759 23395,Český Těšín,4600,80,58,CZ,49.74613,18.62613 22218,Chlebičov,4600,80,58,CZ,49.95942,17.96748 22229,Chotěbuz,4600,80,58,CZ,49.76849,18.56912 22237,Chuchelná,4600,80,58,CZ,49.98664,18.11656 22250,Darkovice,4600,80,58,CZ,49.93592,18.22213 22321,Dětmarovice,4600,80,58,CZ,49.89412,18.46079 22262,Dobrá,4600,80,58,CZ,49.67383,18.41393 22257,Dobratice,4600,80,58,CZ,49.66039,18.49226 22271,Dolní Benešov,4600,80,58,CZ,49.92101,18.10835 22284,Dolní Lhota,4600,80,58,CZ,49.84236,18.09241 22286,Dolní Lutyně,4600,80,58,CZ,49.89876,18.42815 22300,Dolní Životice,4600,80,58,CZ,49.89732,17.77969 22304,Doubrava,4600,80,58,CZ,49.85873,18.48018 22318,Dvorce,4600,80,58,CZ,49.83332,17.54762 22327,Frenštát pod Radhoštěm,4600,80,58,CZ,49.54835,18.21078 22329,Fryčovice,4600,80,58,CZ,49.66677,18.22321 22331,Frýdek-Místek,4600,80,58,CZ,49.68333,18.35 22333,Frýdlant nad Ostravicí,4600,80,58,CZ,49.5928,18.35967 22334,Fulnek,4600,80,58,CZ,49.71238,17.90319 22440,Háj ve Slezsku,4600,80,58,CZ,49.89856,18.0954 22347,Hať,4600,80,58,CZ,49.94644,18.23931 22345,Havířov,4600,80,58,CZ,49.77984,18.43688 22358,Hlučín,4600,80,58,CZ,49.89795,18.19196 22361,Hněvošice,4600,80,58,CZ,50.00299,18.00829 22359,Hnojník,4600,80,58,CZ,49.6825,18.54143 22366,Hodslavice,4600,80,58,CZ,49.53856,18.02367 22367,Holasovice,4600,80,58,CZ,49.99843,17.80847 22374,Horní Benešov,4600,80,58,CZ,49.96682,17.60262 22376,Horní Bludovice,4600,80,58,CZ,49.74965,18.43677 22384,Horní Město,4600,80,58,CZ,49.90845,17.21112 22391,Horní Suchá,4600,80,58,CZ,49.7978,18.48189 22392,Horní Těrlicko,4600,80,58,CZ,49.75177,18.4829 22411,Hrabyně,4600,80,58,CZ,49.88249,18.05483 22413,Hradec nad Moravici,4600,80,58,CZ,49.87042,17.87843 22429,Hrádek,4600,80,58,CZ,49.61661,18.7372 22433,Hukvaldy,4600,80,58,CZ,49.62381,18.22189 22449,Jablunkov,4600,80,58,CZ,49.57672,18.76458 22451,Jakartovice,4600,80,58,CZ,49.9151,17.684 22454,Janovice,4600,80,58,CZ,49.62141,18.40602 22468,Jeseník nad Odrou,4600,80,58,CZ,49.61194,17.90526 22475,Jindřichov,4600,80,58,CZ,50.25184,17.51903 22480,Jistebník,4600,80,58,CZ,49.754,18.13063 22497,Karlovice,4600,80,58,CZ,50.10564,17.44563 22501,Karviná,4600,80,58,CZ,49.854,18.54169 22515,Klimkovice,4600,80,58,CZ,49.78809,18.12585 22524,Kobeřice,4600,80,58,CZ,49.98548,18.05212 22530,Komorní Lhotka,4600,80,58,CZ,49.65811,18.52777 22534,Kopřivnice,4600,80,58,CZ,49.59947,18.1448 22547,Kozlovice,4600,80,58,CZ,49.5904,18.25656 22548,Kozmice,4600,80,58,CZ,49.9128,18.15584 22557,Kravaře,4600,80,58,CZ,49.93203,18.00472 22558,Krmelín,4600,80,58,CZ,49.72914,18.23541 22559,Krnov,4600,80,58,CZ,50.08967,17.70385 22572,Kunčice pod Ondřejníkem,4600,80,58,CZ,49.5507,18.26113 22571,Kunín,4600,80,58,CZ,49.63377,17.98965 22614,Lichnov,4600,80,58,CZ,50.00786,17.6264 22615,Lichnov (o. Nový Jičín),4600,80,58,CZ,49.56423,18.16898 22653,Lučina,4600,80,58,CZ,49.72082,18.44776 22645,Ludgeřovice,4600,80,58,CZ,49.89042,18.24008 22677,Markvartovice,4600,80,58,CZ,49.90595,18.23602 22741,Město Albrechtice,4600,80,58,CZ,50.16294,17.57481 22682,Metylovice,4600,80,58,CZ,49.60666,18.33911 22692,Milíkov,4600,80,58,CZ,49.58565,18.71943 22713,Mokré Lazce,4600,80,58,CZ,49.90462,18.02954 22724,Morávka,4600,80,58,CZ,49.59607,18.52471 22730,Mořkov,4600,80,58,CZ,49.53684,18.05968 22728,Mosty u Jablunkova,4600,80,58,CZ,49.52737,18.75417 22796,Návsí u Jablunkova,4600,80,58,CZ,49.5872,18.75907 22788,Nový Jičín,4600,80,58,CZ,49.59438,18.01028 22797,Nýdek,4600,80,58,CZ,49.65609,18.75687 22804,Odry,4600,80,58,CZ,49.66255,17.83084 22810,Okres Bruntál,4600,80,58,CZ,50.0,17.41667 22817,Okres Frýdek-Místek,4600,80,58,CZ,49.58333,18.5 22827,Okres Karviná,4600,80,58,CZ,49.83333,18.5 22839,Okres Nový Jičín,4600,80,58,CZ,49.66667,18.0 22843,Okres Opava,4600,80,58,CZ,49.83333,17.91667 22844,Okres Ostrava-město,4600,80,58,CZ,49.83333,18.25 22884,Oldřišov,4600,80,58,CZ,49.9913,17.96074 22892,Opava,4600,80,58,CZ,49.93866,17.90257 22895,Orlová,4600,80,58,CZ,49.84527,18.43011 22902,Osoblaha,4600,80,58,CZ,50.27517,17.71523 22904,Ostrava,4600,80,58,CZ,49.83465,18.28204 22905,Ostravice,4600,80,58,CZ,49.5351,18.39164 22913,Otice,4600,80,58,CZ,49.91684,17.86982 22918,Palkovice,4600,80,58,CZ,49.63467,18.31508 22921,Paskov,4600,80,58,CZ,49.73179,18.29037 22930,Petrovice u Karviné,4600,80,58,CZ,49.89587,18.54779 22931,Petřvald,4600,80,58,CZ,49.831,18.3894 22992,Písek,4600,80,58,CZ,49.55924,18.80231 22995,Píšť,4600,80,58,CZ,49.97857,18.19349 22975,Pražmo,4600,80,58,CZ,49.60876,18.48617 23007,Příbor,4600,80,58,CZ,49.64094,18.14499 22990,Pustá Polom,4600,80,58,CZ,49.84917,17.9979 23026,Raškovice,4600,80,58,CZ,49.61975,18.47286 23401,Řepiště,4600,80,58,CZ,49.73338,18.31707 23033,Ropice,4600,80,58,CZ,49.70536,18.61345 23052,Rybí,4600,80,58,CZ,49.60073,18.07592 23054,Rychvald,4600,80,58,CZ,49.86625,18.37626 23057,Rýmařov,4600,80,58,CZ,49.93183,17.27177 23064,Sedliště,4600,80,58,CZ,49.71836,18.36869 23065,Sedlnice,4600,80,58,CZ,49.6577,18.0869 23412,Šenov,4600,80,58,CZ,49.79315,18.37607 23415,Šilheřovice,4600,80,58,CZ,49.92602,18.27017 23081,Slavkov,4600,80,58,CZ,49.9218,17.83641 23102,Stará Ves nad Ondřejnicí,4600,80,58,CZ,49.72775,18.1885 23105,Staré Město,4600,80,58,CZ,49.66992,18.36349 23116,Staříč,4600,80,58,CZ,49.68594,18.27281 23110,Starý Bohumín,4600,80,58,CZ,49.9169,18.33619 23111,Starý Jičín,4600,80,58,CZ,49.57686,17.96169 23135,Stěbořice,4600,80,58,CZ,49.93708,17.80547 23428,Štěpánkovice,4600,80,58,CZ,49.95738,18.03741 23423,Štítina,4600,80,58,CZ,49.91487,18.01245 23119,Stonava,4600,80,58,CZ,49.81691,18.52518 23422,Štramberk,4600,80,58,CZ,49.59181,18.11741 23134,Studénka,4600,80,58,CZ,49.72342,18.07853 23148,Sviadnov,4600,80,58,CZ,49.68926,18.32762 23164,Tichá,4600,80,58,CZ,49.56999,18.22148 23205,Třinec,4600,80,58,CZ,49.67763,18.67078 23177,Trojanovice,4600,80,58,CZ,49.52039,18.238 23310,Václavovice,4600,80,58,CZ,49.75531,18.3722 23234,Velká Polom,4600,80,58,CZ,49.86359,18.09331 23239,Velké Heraltice,4600,80,58,CZ,49.97493,17.72879 23240,Velké Hoštice,4600,80,58,CZ,49.93609,17.9738 23259,Vendryně,4600,80,58,CZ,49.66662,18.71307 23265,Veřovice,4600,80,58,CZ,49.53916,18.11425 23312,Vítkov,4600,80,58,CZ,49.77445,17.74941 23283,Vlčnov,4600,80,58,CZ,49.57866,17.95458 23294,Vratimov,4600,80,58,CZ,49.76995,18.31015 23296,Vrbice,4600,80,58,CZ,49.88333,18.31667 23297,Vrbno pod Pradědem,4600,80,58,CZ,50.12095,17.38316 23316,Vřesina,4600,80,58,CZ,49.82418,18.12569 23352,Zátor,4600,80,58,CZ,50.03413,17.59296 22119,Bedihošť,4589,71,58,CZ,49.44826,17.16643 22200,Bělotín,4589,71,58,CZ,49.5912,17.80654 22197,Bílá Lhota,4589,71,58,CZ,49.70953,16.97507 22133,Bludov,4589,71,58,CZ,49.9408,16.92849 22142,Bohuňovice,4589,71,58,CZ,49.66301,17.28693 22153,Bouzov,4589,71,58,CZ,49.70426,16.89288 22168,Brodek u Přerova,4589,71,58,CZ,49.48419,17.33825 23368,Čelechovice na Hané,4589,71,58,CZ,49.51626,17.09379 23378,Červenka,4589,71,58,CZ,49.72068,17.07773 23387,Česká Ves,4589,71,58,CZ,50.25736,17.22805 22270,Dolany,4589,71,58,CZ,49.64987,17.3224 22274,Dolní Bohdíkov,4589,71,58,CZ,50.00996,16.90433 22294,Dolní Studénky,4589,71,58,CZ,49.93506,16.97107 22295,Dolní Újezd,4589,71,58,CZ,49.54597,17.53547 22301,Doloplazy,4589,71,58,CZ,49.56876,17.41393 22307,Drahanovice,4589,71,58,CZ,49.57856,17.07701 22323,Dřevohostice,4589,71,58,CZ,49.42594,17.59204 22311,Dub nad Moravou,4589,71,58,CZ,49.48249,17.27723 22312,Dubicko,4589,71,58,CZ,49.82806,16.96266 22336,Grygov,4589,71,58,CZ,49.53841,17.30887 22341,Hanušovice,4589,71,58,CZ,50.08049,16.93641 22356,Hlubočky,4589,71,58,CZ,49.61783,17.39436 22360,Hněvotín,4589,71,58,CZ,49.57205,17.17954 22373,Horka nad Moravou,4589,71,58,CZ,49.64009,17.2107 22383,Horní Moštěnice,4589,71,58,CZ,49.41213,17.45879 22394,Horní Štěpánov,4589,71,58,CZ,49.54901,16.79078 22417,Hranice,4589,71,58,CZ,49.54796,17.73469 22438,Hustopeče Nad Bečvou,4589,71,58,CZ,49.53053,17.86994 22461,Javorník,4589,71,58,CZ,50.39077,17.00272 22467,Jeseník,4589,71,58,CZ,50.22937,17.20464 22526,Kojetín,4589,71,58,CZ,49.35179,17.30207 22527,Kokory,4589,71,58,CZ,49.49482,17.37544 22532,Konice,4589,71,58,CZ,49.5903,16.88911 22538,Kostelec na Hané,4589,71,58,CZ,49.51398,17.05824 22553,Kralice na Hané,4589,71,58,CZ,49.46296,17.18048 22602,Leština,4589,71,58,CZ,49.86879,16.92748 22617,Lipník nad Bečvou,4589,71,58,CZ,49.52721,17.58594 22624,Litovel,4589,71,58,CZ,49.70121,17.07615 22642,Loštice,4589,71,58,CZ,49.7447,16.92892 22639,Loučná nad Desnou,4589,71,58,CZ,50.07433,17.09052 22651,Lutín,4589,71,58,CZ,49.55845,17.13572 22669,Majetín,4589,71,58,CZ,49.49808,17.33314 22679,Medlov,4589,71,58,CZ,49.78754,17.06261 22743,Město Libavá,4589,71,58,CZ,49.72162,17.52013 22686,Mikulovice,4589,71,58,CZ,50.29854,17.32155 22710,Mohelnice,4589,71,58,CZ,49.77698,16.91946 22716,Moravičany,4589,71,58,CZ,49.75694,16.96042 22720,Moravský Beroun,4589,71,58,CZ,49.79374,17.44212 22727,Mostkovice,4589,71,58,CZ,49.47215,17.05212 22793,Náklo,4589,71,58,CZ,49.65462,17.12969 22794,Náměšť na Hané,4589,71,58,CZ,49.60213,17.06539 22800,Němčice nad Hanou,4589,71,58,CZ,49.34181,17.20596 22765,Nezamyslice,4589,71,58,CZ,49.32543,17.17326 22790,Nový Malín,4589,71,58,CZ,49.94262,17.03191 22822,Okres Jeseník,4589,71,58,CZ,50.25,17.16667 22842,Okres Olomouc,4589,71,58,CZ,49.66667,17.25 22855,Okres Přerov,4589,71,58,CZ,49.5,17.55 22853,Okres Prostějov,4589,71,58,CZ,49.5,17.03333 22879,Okres Šumperk,4589,71,58,CZ,50.0,17.0 22886,Olomouc,4589,71,58,CZ,49.59552,17.25175 22888,Olšany,4589,71,58,CZ,49.96509,16.85894 22898,Osek nad Bečvou,4589,71,58,CZ,49.51121,17.52829 22900,Oskava,4589,71,58,CZ,49.89523,17.13214 22912,Otaslavice,4589,71,58,CZ,49.38833,17.07108 22920,Paseka,4589,71,58,CZ,49.79644,17.22276 22994,Písečná,4589,71,58,CZ,50.27303,17.25373 22941,Plumlov,4589,71,58,CZ,49.46614,17.01502 22960,Postřelmov,4589,71,58,CZ,49.90756,16.91226 22961,Potštát,4589,71,58,CZ,49.63693,17.65174 23006,Přáslavice,4589,71,58,CZ,49.58568,17.38209 23000,Přemyslovice,4589,71,58,CZ,49.55637,16.95581 23001,Přerov,4589,71,58,CZ,49.45511,17.4509 23009,Příkazy,4589,71,58,CZ,49.6436,17.14337 22979,Prostějov,4589,71,58,CZ,49.47188,17.11184 22981,Protivanov,4589,71,58,CZ,49.48351,16.83594 22988,Ptení,4589,71,58,CZ,49.51163,16.9611 23015,Radslavice,4589,71,58,CZ,49.47817,17.51656 23021,Rapotín,4589,71,58,CZ,50.01094,17.03121 23029,Rokytnice,4589,71,58,CZ,49.46592,17.3912 23046,Ruda nad Moravou,4589,71,58,CZ,49.981,16.87782 23060,Samotíšky,4589,71,58,CZ,49.63042,17.32807 23068,Senice na Hané,4589,71,58,CZ,49.62401,17.08578 23074,Skrbeň,4589,71,58,CZ,49.64115,17.1765 23078,Slatinice,4589,71,58,CZ,49.56155,17.09992 23088,Smržice,4589,71,58,CZ,49.50569,17.10698 23091,Sobotín,4589,71,58,CZ,50.01039,17.09129 23108,Staré Město,4589,71,58,CZ,50.16174,16.94734 23429,Štěpánov,4589,71,58,CZ,49.68404,17.22041 23420,Šternberk,4589,71,58,CZ,49.73044,17.29889 23425,Štíty,4589,71,58,CZ,49.96122,16.76576 23130,Strážná,4589,71,58,CZ,49.83104,17.13275 23144,Sudkov,4589,71,58,CZ,49.91903,16.94516 23432,Šumperk,4589,71,58,CZ,49.96528,16.97061 23196,Těšetice,4589,71,58,CZ,49.59317,17.12607 23171,Tovačov,4589,71,58,CZ,49.43083,17.28795 23178,Troubelice,4589,71,58,CZ,49.81731,17.081 23179,Troubky,4589,71,58,CZ,49.43215,17.34914 23182,Tršice,4589,71,58,CZ,49.54237,17.42483 23355,Újezd,4589,71,58,CZ,49.76397,17.1804 23211,Uničov,4589,71,58,CZ,49.77092,17.12144 23212,Určice,4589,71,58,CZ,49.43045,17.07291 23358,Úsov,4589,71,58,CZ,49.79831,17.01055 23311,Vápenná,4589,71,58,CZ,50.28338,17.09762 23230,Velká Bystřice,4589,71,58,CZ,49.5948,17.36544 23242,Velké Losiny,4589,71,58,CZ,50.03197,17.04058 23253,Velký Týnec,4589,71,58,CZ,49.54994,17.33359 23254,Velký Újezd,4589,71,58,CZ,49.57858,17.48347 23314,Věrovany,4589,71,58,CZ,49.46109,17.28795 23266,Vidnava,4589,71,58,CZ,50.37234,17.18626 23268,Vikýřovice,4589,71,58,CZ,49.97792,17.01234 23299,Vrbátky,4589,71,58,CZ,49.50805,17.19994 23348,Zábřeh,4589,71,58,CZ,49.8826,16.87223 23339,Zlaté Hory,4589,71,58,CZ,50.2638,17.39602 23457,Žulová,4589,71,58,CZ,50.30933,17.09871 22159,Brandýs nad Orlicí,4588,53,58,CZ,50.00194,16.28528 22212,Březová nad Svitavou,4588,53,58,CZ,49.64418,16.51799 22167,Brněnec,4588,53,58,CZ,49.62735,16.52202 22199,Býšť,4588,53,58,CZ,50.13243,15.91116 22182,Bystré,4588,53,58,CZ,49.62846,16.34679 22184,Bystřec,4588,53,58,CZ,50.01168,16.619 23379,Červená Voda,4588,53,58,CZ,50.04029,16.74268 23386,Česká Třebová,4588,53,58,CZ,49.90436,16.44413 22223,Choceň,4588,53,58,CZ,50.00161,16.22303 22231,Chrast,4588,53,58,CZ,49.90205,15.93396 22234,Chroustovice,4588,53,58,CZ,49.95553,15.99143 22235,Chrudim,4588,53,58,CZ,49.95109,15.79558 22238,Chvaletice,4588,53,58,CZ,50.03443,15.41846 22253,Dašice,4588,53,58,CZ,50.02844,15.91244 22256,Dlouhá Třebová,4588,53,58,CZ,49.9404,16.42329 22297,Dolní Čermná,4588,53,58,CZ,49.97954,16.56475 22280,Dolní Dobrouč,4588,53,58,CZ,49.99273,16.49766 22291,Dolní Roveň,4588,53,58,CZ,50.02927,15.96774 22293,Dolní Sloupnice,4588,53,58,CZ,49.92721,16.29401 22296,Dolní Újezd,4588,53,58,CZ,49.82562,16.25461 22352,Heřmanův Městec,4588,53,58,CZ,49.94707,15.66492 22353,Hlinsko,4588,53,58,CZ,49.76213,15.90756 22369,Holice,4588,53,58,CZ,50.06601,15.9859 22393,Horní Čermná,4588,53,58,CZ,49.97053,16.60772 22380,Horní Jelení,4588,53,58,CZ,50.04901,16.08396 22389,Horní Sloupnice,4588,53,58,CZ,49.92138,16.33948 22414,Hradec nad Svitavou,4588,53,58,CZ,49.71143,16.48058 22420,Hrochův Týnec,4588,53,58,CZ,49.95946,15.91054 22447,Jablonné nad Orlicí,4588,53,58,CZ,50.02964,16.60059 22457,Jaroměřice,4588,53,58,CZ,49.62556,16.75185 22462,Jedlová,4588,53,58,CZ,49.661,16.30608 22470,Jevíčko,4588,53,58,CZ,49.6322,16.71125 22565,Králíky,4588,53,58,CZ,50.08384,16.76054 22561,Krouna,4588,53,58,CZ,49.7724,16.02674 22573,Kunčina,4588,53,58,CZ,49.79455,16.62763 22570,Kunvald,4588,53,58,CZ,50.12927,16.49996 22590,Lanškroun,4588,53,58,CZ,49.91217,16.6119 22662,Lázně Bohdaneč,4588,53,58,CZ,50.0756,15.67978 22597,Letohrad,4588,53,58,CZ,50.0358,16.49879 22622,Litomyšl,4588,53,58,CZ,49.86809,16.31298 22649,Lukavice,4588,53,58,CZ,50.06029,16.48207 22655,Luže,4588,53,58,CZ,49.89341,16.0285 22739,Městečko Trnávka,4588,53,58,CZ,49.70926,16.72744 22700,Miřetice,4588,53,58,CZ,49.84126,15.88472 22714,Moravany,4588,53,58,CZ,50.00095,15.94071 22718,Moravská Třebová,4588,53,58,CZ,49.75793,16.66426 22750,Nasavrky,4588,53,58,CZ,49.8445,15.80461 22814,Okres Chrudim,4588,53,58,CZ,49.83333,15.83333 22845,Okres Pardubice,4588,53,58,CZ,50.08333,15.75 22863,Okres Svitavy,4588,53,58,CZ,49.73333,16.5 22875,Okres Ústí nad Orlicí,4588,53,58,CZ,50.0,16.53333 22890,Opatov,4588,53,58,CZ,49.825,16.50458 22891,Opatovice nad Labem,4588,53,58,CZ,50.14541,15.79045 22911,Osík,4588,53,58,CZ,49.84355,16.28467 22919,Pardubice,4588,53,58,CZ,50.04075,15.77659 22952,Polička,4588,53,58,CZ,49.71465,16.26543 22954,Pomezí,4588,53,58,CZ,49.71026,16.31729 22969,Prachovice,4588,53,58,CZ,49.89379,15.62872 22999,Přelouč,4588,53,58,CZ,50.03985,15.56031 22978,Proseč,4588,53,58,CZ,49.8059,16.11621 23011,Radiměř,4588,53,58,CZ,49.6985,16.4407 23404,Řečany nad Labem,4588,53,58,CZ,50.03589,15.47735 23032,Ronov nad Doubravou,4588,53,58,CZ,49.88825,15.53144 23034,Rosice,4588,53,58,CZ,49.92226,15.95127 23051,Rybitví,4588,53,58,CZ,50.06015,15.70472 23072,Seč,4588,53,58,CZ,49.84694,15.65643 23070,Sezemice,4588,53,58,CZ,50.06651,15.8527 23076,Skuteč,4588,53,58,CZ,49.84347,15.99655 23079,Slatiňany,4588,53,58,CZ,49.9211,15.81377 23103,Staré Hradiště,4588,53,58,CZ,50.0654,15.77885 23149,Svitavy,4588,53,58,CZ,49.75594,16.46829 23202,Třemošnice,4588,53,58,CZ,49.86912,15.58002 23359,Ústí nad Orlicí,4588,53,58,CZ,49.97387,16.39361 23305,Vysoké Mýto,4588,53,58,CZ,49.9532,16.16169 23437,Žamberk,4588,53,58,CZ,50.08601,16.46738 22201,Bělá nad Radbuzou,4608,324,58,CZ,49.59115,12.71761 22127,Bezdružice,4608,324,58,CZ,49.90724,12.9711 22135,Blížejov,4608,324,58,CZ,49.5,12.98926 22132,Blovice,4608,324,58,CZ,49.5822,13.54009 22146,Bor,4608,324,58,CZ,49.71159,12.77516 22203,Břasy,4608,324,58,CZ,49.837,13.57833 23373,Černošín,4608,324,58,CZ,49.81613,12.88381 22222,Chlumčany,4608,324,58,CZ,49.63256,13.31323 22225,Chodová Planá,4608,324,58,CZ,49.89321,12.73014 22230,Chotěšov,4608,324,58,CZ,49.65408,13.20271 22236,Chrást,4608,324,58,CZ,49.7932,13.49358 22263,Dobřany,4608,324,58,CZ,49.65482,13.29307 22265,Dobřív,4608,324,58,CZ,49.71566,13.68681 22303,Domažlice,4608,324,58,CZ,49.44049,12.92976 22320,Dýšina,4608,324,58,CZ,49.77735,13.4915 22343,Hartmanice,4608,324,58,CZ,49.16948,13.45455 22351,Heřmanova Huť,4608,324,58,CZ,49.70679,13.10069 22370,Holoubkov,4608,324,58,CZ,49.77598,13.69246 22371,Holýšov,4608,324,58,CZ,49.59361,13.10129 22372,Horažďovice,4608,324,58,CZ,49.32069,13.701 22378,Horní Bříza,4608,324,58,CZ,49.84012,13.35558 22396,Horšovský Týn,4608,324,58,CZ,49.52965,12.94405 22402,Hostouň,4608,324,58,CZ,49.55971,12.77147 22430,Hrádek,4608,324,58,CZ,49.71316,13.65296 22421,Hromnice,4608,324,58,CZ,49.84907,13.44146 22455,Janovice nad Úhlavou,4608,324,58,CZ,49.34515,13.21813 22502,Kasejovice,4608,324,58,CZ,49.4627,13.7406 22506,Kašperské Hory,4608,324,58,CZ,49.14289,13.55616 22504,Kaznějov,4608,324,58,CZ,49.89313,13.38295 22508,Kdyně,4608,324,58,CZ,49.39077,13.03968 22511,Kladruby,4608,324,58,CZ,49.71498,12.98232 22512,Klatovy,4608,324,58,CZ,49.39552,13.29505 22514,Klenčí pod Čerchovem,4608,324,58,CZ,49.43484,12.81473 22528,Kolinec,4608,324,58,CZ,49.29895,13.439 22543,Kout na Šumavě,4608,324,58,CZ,49.40255,13.00208 22552,Kožlany,4608,324,58,CZ,49.99389,13.54107 22554,Kralovice,4608,324,58,CZ,49.98192,13.48747 22666,Líně,4608,324,58,CZ,49.69472,13.25693 22675,Manětín,4608,324,58,CZ,49.99177,13.23319 22745,Měčín,4608,324,58,CZ,49.48009,13.40289 22678,Meclov,4608,324,58,CZ,49.50556,12.88082 22680,Merklín,4608,324,58,CZ,49.56043,13.1979 22744,Město Touškov,4608,324,58,CZ,49.77587,13.25108 22698,Mirošov,4608,324,58,CZ,49.68782,13.65807 22731,Mrákov,4608,324,58,CZ,49.40314,12.9512 22734,Mýto,4608,324,58,CZ,49.78904,13.73461 22759,Nepomuk,4608,324,58,CZ,49.48616,13.58225 22766,Nezvěstice,4608,324,58,CZ,49.64043,13.51962 22799,Nýřany,4608,324,58,CZ,49.71145,13.21185 22798,Nýrsko,4608,324,58,CZ,49.29387,13.14353 22815,Okres Domažlice,4608,324,58,CZ,49.5,12.91667 22829,Okres Klatovy,4608,324,58,CZ,49.25,13.41667 22847,Okres Plzeň-jih,4608,324,58,CZ,49.58333,13.5 22848,Okres Plzeň-město,4608,324,58,CZ,49.75,13.36667 22849,Okres Plzeň-sever,4608,324,58,CZ,49.91667,13.25 22858,Okres Rokycany,4608,324,58,CZ,49.78333,13.66667 22864,Okres Tachov,4608,324,58,CZ,49.76667,12.75 22896,Osek,4608,324,58,CZ,49.77594,13.5906 22934,Pilsen,4608,324,58,CZ,49.74747,13.37759 22935,Planá,4608,324,58,CZ,49.86816,12.74378 22942,Plánice,4608,324,58,CZ,49.38993,13.47106 22937,Plasy,4608,324,58,CZ,49.93449,13.39035 22943,Poběžovice,4608,324,58,CZ,49.51029,12.80261 22959,Postřekov,4608,324,58,CZ,49.45827,12.80678 23003,Přeštice,4608,324,58,CZ,49.57298,13.3335 23005,Přimda,4608,324,58,CZ,49.67488,12.67366 23012,Radnice,4608,324,58,CZ,49.85677,13.6057 23028,Rokycany,4608,324,58,CZ,49.7427,13.59459 23097,Spálené Poříčí,4608,324,58,CZ,49.61371,13.60556 23434,Šťáhlavy,4608,324,58,CZ,49.67555,13.50394 23114,Staňkov,4608,324,58,CZ,49.55348,13.06976 23113,Starý Plzenec,4608,324,58,CZ,49.69768,13.4735 23427,Štěnovice,4608,324,58,CZ,49.67051,13.39963 23118,Stod,4608,324,58,CZ,49.63909,13.16474 23122,Strašice,4608,324,58,CZ,49.73552,13.75755 23126,Stráž,4608,324,58,CZ,49.66878,12.77546 23131,Strážov,4608,324,58,CZ,49.30326,13.24623 23138,Stříbro,4608,324,58,CZ,49.75565,12.997 23146,Sušice,4608,324,58,CZ,49.23106,13.52018 23433,Švihov,4608,324,58,CZ,49.48136,13.28417 23155,Tachov,4608,324,58,CZ,49.79528,12.63365 23168,Tlučná,4608,324,58,CZ,49.72425,13.23534 23203,Třemošná,4608,324,58,CZ,49.81584,13.39499 23224,Vejprnice,4608,324,58,CZ,49.72988,13.27628 23319,Všeruby,4608,324,58,CZ,49.84167,13.22943 23328,Zbiroh,4608,324,58,CZ,49.86024,13.77262 23333,Zbůch,4608,324,58,CZ,49.6784,13.22564 23444,Železná Ruda,4608,324,58,CZ,49.13743,13.2352 23450,Žihle,4608,324,58,CZ,50.04491,13.37502 22162,Braník,4598,10,58,CZ,50.03498,14.41518 23376,Černý Most,4598,10,58,CZ,50.10475,14.57974 22290,Dolní Počernice,4598,10,58,CZ,50.0876,14.57199 22363,Hodkovičky,4598,10,58,CZ,50.02346,14.41415 22387,Horní Počernice,4598,10,58,CZ,50.1121,14.61036 22397,Hostavice,4598,10,58,CZ,50.09283,14.55822 22499,Karlín,4598,10,58,CZ,50.09272,14.44711 22507,Kbely,4598,10,58,CZ,50.13333,14.55 22600,Letňany,4598,10,58,CZ,50.13333,14.51667 22605,Libeň,4598,10,58,CZ,50.10819,14.47457 22672,Malá Strana,4598,10,58,CZ,50.08774,14.40449 22708,Modřany,4598,10,58,CZ,50.01116,14.4096 22970,Prague,4598,10,58,CZ,50.08804,14.42076 22971,Praha 1,4598,10,58,CZ,50.08802,14.42166 22972,Praha 16,4598,10,58,CZ,49.98357,14.3611 22973,Praha 20,4598,10,58,CZ,50.11568,14.61122 22974,Praha 21,4598,10,58,CZ,50.07521,14.66898 22977,Prosek,4598,10,58,CZ,50.11525,14.50685 23061,Satalice,4598,10,58,CZ,50.12484,14.57191 23106,Staré Město,4598,10,58,CZ,50.087,14.42024 23139,Střížkov,4598,10,58,CZ,50.12674,14.49363 23304,Vysehrad,4598,10,58,CZ,50.06509,14.41711 23307,Vysočany,4598,10,58,CZ,50.10938,14.51667 22112,Bakov nad Jizerou,4554,20,58,CZ,50.4823,14.94149 22202,Bělá pod Bezdězem,4554,20,58,CZ,50.50121,14.80418 22124,Benátky nad Jizerou,4554,20,58,CZ,50.29085,14.82343 22121,Benešov,4554,20,58,CZ,49.78162,14.68697 22126,Beroun,4554,20,58,CZ,49.96382,14.072 22141,Bohutín,4554,20,58,CZ,49.65551,13.94389 22158,Brandýs nad Labem-Stará Boleslav,4554,20,58,CZ,50.18709,14.66326 22160,Brandýsek,4554,20,58,CZ,50.18923,14.16199 22206,Březnice,4554,20,58,CZ,49.55763,13.95063 22181,Buštěhrad,4554,20,58,CZ,50.15594,14.18897 22189,Byšice,4554,20,58,CZ,50.31044,14.61136 22185,Bystřice,4554,20,58,CZ,49.73213,14.6674 23398,Čáslav,4554,20,58,CZ,49.91099,15.38972 23364,Čechtice,4554,20,58,CZ,49.62403,15.04824 23369,Čelákovice,4554,20,58,CZ,50.16038,14.75005 23382,Čerčany,4554,20,58,CZ,49.85293,14.70299 22215,Cerhenice,4554,20,58,CZ,50.07127,15.07203 23372,Černošice,4554,20,58,CZ,49.96008,14.31979 23380,Červené Pečky,4554,20,58,CZ,49.97822,15.20856 23391,Český Brod,4554,20,58,CZ,50.0742,14.86081 22241,Chyňava,4554,20,58,CZ,50.02736,14.07398 22246,Církvice,4554,20,58,CZ,49.9456,15.33505 22247,Cítov,4554,20,58,CZ,50.37225,14.39813 22251,Davle,4554,20,58,CZ,49.89218,14.40037 22255,Divišov,4554,20,58,CZ,49.78849,14.87579 22264,Dobřichovice,4554,20,58,CZ,49.92749,14.27469 22266,Dobříš,4554,20,58,CZ,49.78113,14.16717 22260,Dobrovice,4554,20,58,CZ,50.36933,14.96233 22268,Doksy,4554,20,58,CZ,50.119,14.04782 22273,Dolní Beřkovice,4554,20,58,CZ,50.39313,14.45024 22276,Dolní Bousov,4554,20,58,CZ,50.43825,15.12812 22278,Dolní Břežany,4554,20,58,CZ,49.96321,14.4585 22386,Horní Počaply,4554,20,58,CZ,50.4244,14.38993 22395,Horoměřice,4554,20,58,CZ,50.13173,14.33879 22408,Hořovice,4554,20,58,CZ,49.83597,13.90268 22399,Hostivice,4554,20,58,CZ,50.08158,14.25856 22401,Hostomice,4554,20,58,CZ,49.82526,14.0456 22405,Hovorčovice,4554,20,58,CZ,50.17866,14.51789 22415,Hradištko,4554,20,58,CZ,49.86828,14.40935 22442,Hřebeč,4554,20,58,CZ,50.13595,14.16446 22432,Hudlice,4554,20,58,CZ,49.96096,13.97063 22441,Hýskov,4554,20,58,CZ,49.99072,14.05055 22465,Jeneč,4554,20,58,CZ,50.0873,14.21482 22466,Jesenice,4554,20,58,CZ,49.96814,14.5135 22486,Jílové u Prahy,4554,20,58,CZ,49.89545,14.49333 22474,Jince,4554,20,58,CZ,49.78624,13.97867 22478,Jirny,4554,20,58,CZ,50.11578,14.69923 22505,Kačice,4554,20,58,CZ,50.16261,13.98815 22489,Kamenice,4554,20,58,CZ,49.90151,14.58242 22492,Kamenné Žehrovice,4554,20,58,CZ,50.12697,14.01809 22493,Kamenný Přívoz,4554,20,58,CZ,49.86299,14.50339 22510,Kladno,4554,20,58,CZ,50.14734,14.10285 22513,Klecany,4554,20,58,CZ,50.17599,14.41148 22517,Klobuky,4554,20,58,CZ,50.29401,13.98748 22522,Kněžmost,4554,20,58,CZ,50.48917,15.03829 22529,Kolín,4554,20,58,CZ,50.02806,15.1998 22531,Komárov,4554,20,58,CZ,49.8065,13.85636 22536,Kosmonosy,4554,20,58,CZ,50.4385,14.93 22537,Kosova Hora,4554,20,58,CZ,49.65414,14.47173 22541,Kostelec nad Černými Lesy,4554,20,58,CZ,49.99403,14.85922 22539,Kostelec nad Labem,4554,20,58,CZ,50.22653,14.58552 22544,Kouřim,4554,20,58,CZ,50.00306,14.97703 22555,Kralupy nad Vltavou,4554,20,58,CZ,50.24107,14.31149 22566,Králův Dvůr,4554,20,58,CZ,49.94981,14.03445 22567,Krásná Hora nad Vltavou,4554,20,58,CZ,49.60461,14.27742 22587,Křinec,4554,20,58,CZ,50.26449,15.13782 22576,Kutná Hora,4554,20,58,CZ,49.94839,15.26816 22661,Lány,4554,20,58,CZ,50.12471,13.95041 22612,Libčice nad Vltavou,4554,20,58,CZ,50.19778,14.36385 22665,Líbeznice,4554,20,58,CZ,50.19198,14.49357 22606,Libice nad Cidlinou,4554,20,58,CZ,50.12677,15.1782 22607,Libiš,4554,20,58,CZ,50.27417,14.5024 22610,Libušín,4554,20,58,CZ,50.16819,14.05458 22628,Lochovice,4554,20,58,CZ,49.85318,13.98126 22629,Loděnice,4554,20,58,CZ,49.99486,14.15785 22638,Loučeň,4554,20,58,CZ,50.28537,15.02049 22654,Luštěnice,4554,20,58,CZ,50.32296,14.93667 22656,Lužec nad Vltavou,4554,20,58,CZ,50.32138,14.40022 22658,Lužná,4554,20,58,CZ,50.12377,13.77004 22660,Lysá nad Labem,4554,20,58,CZ,50.20143,14.83281 22736,Mělník,4554,20,58,CZ,50.3505,14.47411 22747,Měšice,4554,20,58,CZ,50.19799,14.51992 22738,Městec Králové,4554,20,58,CZ,50.20718,15.29758 22693,Milín,4554,20,58,CZ,49.63192,14.046 22691,Milovice,4554,20,58,CZ,50.22596,14.88863 22701,Mladá Boleslav,4554,20,58,CZ,50.41135,14.90318 22704,Mnichovice,4554,20,58,CZ,49.93601,14.70907 22705,Mnichovo Hradiště,4554,20,58,CZ,50.5272,14.97134 22707,Mníšek pod Brdy,4554,20,58,CZ,49.8665,14.26176 22748,Mšeno,4554,20,58,CZ,50.43809,14.6325 22732,Mukařov,4554,20,58,CZ,49.99115,14.74155 22751,Načeradec,4554,20,58,CZ,49.61018,14.90633 22756,Nehvizdy,4554,20,58,CZ,50.13056,14.72993 22758,Nelahozeves,4554,20,58,CZ,50.26148,14.29881 22760,Neratovice,4554,20,58,CZ,50.25926,14.51759 22763,Netvořice,4554,20,58,CZ,49.81569,14.51827 22764,Neveklov,4554,20,58,CZ,49.75373,14.53291 22768,Nižbor,4554,20,58,CZ,49.99995,14.00237 22782,Nové Strašecí,4554,20,58,CZ,50.15272,13.90043 22789,Nový Knín,4554,20,58,CZ,49.788,14.29355 22791,Nymburk,4554,20,58,CZ,50.18605,15.04167 22801,Obecnice,4554,20,58,CZ,49.71615,13.94731 22803,Odolena Voda,4554,20,58,CZ,50.23341,14.41078 22806,Okres Benešov,4554,20,58,CZ,49.66667,14.75 22807,Okres Beroun,4554,20,58,CZ,49.83333,14.08333 22828,Okres Kladno,4554,20,58,CZ,50.16667,14.16667 22830,Okres Kolín,4554,20,58,CZ,50.0,15.0 22832,Okres Kutná Hora,4554,20,58,CZ,49.83333,15.25 22838,Okres Mělník,4554,20,58,CZ,50.33333,14.5 22836,Okres Mladá Boleslav,4554,20,58,CZ,50.41667,14.91667 22840,Okres Nymburk,4554,20,58,CZ,50.16667,15.16667 22851,Okres Praha-východ,4554,20,58,CZ,50.11768,14.70836 22852,Okres Praha-západ,4554,20,58,CZ,49.83333,14.33333 22856,Okres Příbram,4554,20,58,CZ,49.66667,14.16667 22857,Okres Rakovník,4554,20,58,CZ,50.1,13.7 22889,Ondřejov,4554,20,58,CZ,49.90461,14.7842 22922,Pavlíkov,4554,20,58,CZ,50.05599,13.73636 22923,Pchery,4554,20,58,CZ,50.19378,14.11782 22932,Pečky,4554,20,58,CZ,50.09043,15.03017 22929,Petrovice,4554,20,58,CZ,49.55426,14.33737 22939,Plaňany,4554,20,58,CZ,50.0501,15.02944 22947,Poděbrady,4554,20,58,CZ,50.14242,15.11881 22966,Poříčany,4554,20,58,CZ,50.10806,14.91818 22967,Poříčí nad Sázavou,4554,20,58,CZ,49.83895,14.67446 22958,Postupice,4554,20,58,CZ,49.72798,14.77722 23002,Přerov nad Labem,4554,20,58,CZ,50.16027,14.82502 23008,Příbram,4554,20,58,CZ,49.68988,14.01043 22986,Průhonice,4554,20,58,CZ,49.99962,14.55017 22987,Psáry,4554,20,58,CZ,49.93622,14.51276 22991,Pyšely,4554,20,58,CZ,49.87678,14.67713 23019,Rakovník,4554,20,58,CZ,50.1037,13.7334 23402,Řevnice,4554,20,58,CZ,49.91395,14.23589 23403,Řevničov,4554,20,58,CZ,50.18489,13.80823 23405,Řež,4554,20,58,CZ,50.17734,14.35733 23406,Říčany,4554,20,58,CZ,49.99168,14.65427 23044,Rožďalovice,4554,20,58,CZ,50.30476,15.16962 23042,Rožmitál pod Třemšínem,4554,20,58,CZ,49.60196,13.8643 23041,Roztoky,4554,20,58,CZ,50.15841,14.3976 23047,Rudná,4554,20,58,CZ,50.03502,14.23435 23059,Sadská,4554,20,58,CZ,50.13596,14.98633 23154,Sázava,4554,20,58,CZ,49.87164,14.89674 23066,Sedlčany,4554,20,58,CZ,49.66057,14.42664 23062,Sedlec,4554,20,58,CZ,49.96391,15.28846 23413,Šestajovice,4554,20,58,CZ,50.10845,14.68013 23077,Slaný,4554,20,58,CZ,50.23046,14.08693 23085,Smečno,4554,20,58,CZ,50.18844,14.04037 23100,Stará Huť,4554,20,58,CZ,49.78225,14.19735 23112,Starý Kolín,4554,20,58,CZ,50.00977,15.29388 23426,Štěchovice,4554,20,58,CZ,49.85109,14.40543 23117,Stochov,4554,20,58,CZ,50.14631,13.96345 23121,Strančice,4554,20,58,CZ,49.94811,14.67745 23140,Suchdol,4554,20,58,CZ,49.95247,15.16651 23165,Tišice,4554,20,58,CZ,50.2698,14.55411 23199,Třebotov,4554,20,58,CZ,49.97244,14.29127 23174,Trhový Štěpánov,4554,20,58,CZ,49.71147,15.01356 23183,Tuchlovice,4554,20,58,CZ,50.13803,13.99115 23184,Tuchoměřice,4554,20,58,CZ,50.13543,14.28218 23192,Týnec nad Labem,4554,20,58,CZ,50.04202,15.35836 23193,Týnec nad Sázavou,4554,20,58,CZ,49.83348,14.58983 23209,Uhlířské Janovice,4554,20,58,CZ,49.88019,15.06481 23210,Unhošť,4554,20,58,CZ,50.08535,14.13007 23360,Úvaly,4554,20,58,CZ,50.07394,14.7308 23229,Velim,4554,20,58,CZ,50.05965,15.10711 23232,Velká Dobrá,4554,20,58,CZ,50.10964,14.0698 23247,Velké Popovice,4554,20,58,CZ,49.92252,14.63934 23249,Velké Přílepy,4554,20,58,CZ,50.1605,14.31447 23252,Velký Osek,4554,20,58,CZ,50.09867,15.18629 23256,Veltruby,4554,20,58,CZ,50.07059,15.18454 23257,Veltrusy,4554,20,58,CZ,50.27046,14.32857 23258,Velvary,4554,20,58,CZ,50.28152,14.23616 23263,Vestec,4554,20,58,CZ,49.9805,14.50487 23272,Vinařice,4554,20,58,CZ,50.17585,14.09106 23281,Vlašim,4554,20,58,CZ,49.70632,14.89881 23290,Votice,4554,20,58,CZ,49.64013,14.63809 23293,Vrané nad Vltavou,4554,20,58,CZ,49.93585,14.37706 23301,Vrdy,4554,20,58,CZ,49.92153,15.47243 23318,Všenory,4554,20,58,CZ,49.92883,14.30392 23321,Všetaty,4554,20,58,CZ,50.28187,14.59297 23324,Zaječov,4554,20,58,CZ,49.77435,13.84072 23351,Zásmuky,4554,20,58,CZ,49.9547,15.03058 23331,Zbraslavice,4554,20,58,CZ,49.81179,15.18319 23458,Žďár,4554,20,58,CZ,50.54366,15.08034 23334,Zdiby,4554,20,58,CZ,50.16799,14.45118 23335,Zdice,4554,20,58,CZ,49.91207,13.97747 23441,Žebrák,4554,20,58,CZ,49.87574,13.89735 23338,Zeleneč,4554,20,58,CZ,50.13362,14.6607 23453,Žiželice,4554,20,58,CZ,50.13192,15.3932 23454,Žleby,4554,20,58,CZ,49.88958,15.48853 23342,Zlonice,4554,20,58,CZ,50.2875,14.09214 23345,Zruč nad Sázavou,4554,20,58,CZ,49.7401,15.10606 23347,Zvole,4554,20,58,CZ,49.93466,14.41769 22117,Bechlín,4576,42,58,CZ,50.41615,14.34092 22128,Bečov,4576,42,58,CZ,50.44972,13.71784 22122,Benešov nad Ploučnicí,4576,42,58,CZ,50.74159,14.31239 22192,Bílina,4576,42,58,CZ,50.54854,13.77535 22193,Bílina Kyselka,4576,42,58,CZ,50.55,13.76667 22143,Bohušovice nad Ohří,4576,42,58,CZ,50.49316,14.15048 22163,Braňany,4576,42,58,CZ,50.54295,13.70017 22207,Březno,4576,42,58,CZ,50.40185,13.42118 22177,Budyně nad Ohří,4576,42,58,CZ,50.40427,14.12591 22183,Bystřany,4576,42,58,CZ,50.62867,13.86419 23377,Černčice,4576,42,58,CZ,50.36138,13.84521 23383,Česká Kamenice,4576,42,58,CZ,50.7978,14.41767 22216,Chabařovice,4576,42,58,CZ,50.67318,13.94184 22220,Chlumec,4576,42,58,CZ,50.69972,13.93964 22226,Chomutov,4576,42,58,CZ,50.46048,13.41779 22244,Chřibská,4576,42,58,CZ,50.86079,14.48444 23399,Čížkovice,4576,42,58,CZ,50.48418,14.02839 22322,Děčín,4576,42,58,CZ,50.78215,14.21478 22258,Dobroměřice,4576,42,58,CZ,50.37009,13.79473 22288,Dolní Podluží,4576,42,58,CZ,50.87988,14.59503 22289,Dolní Poustevna,4576,42,58,CZ,50.98251,14.28684 22315,Dubí,4576,42,58,CZ,50.68558,13.78561 22317,Duchcov,4576,42,58,CZ,50.60376,13.74621 22381,Horní Jiřetín,4576,42,58,CZ,50.57309,13.54717 22409,Hošťka,4576,42,58,CZ,50.48859,14.335 22400,Hostomice,4576,42,58,CZ,50.5877,13.80803 22419,Hrob,4576,42,58,CZ,50.65919,13.72676 22485,Jílové,4576,42,58,CZ,50.76082,14.10383 22482,Jiříkov,4576,42,58,CZ,50.99514,14.5691 22477,Jirkov,4576,42,58,CZ,50.49979,13.44769 22487,Kadaň,4576,42,58,CZ,50.38333,13.26667 22519,Klášterec nad Ohří,4576,42,58,CZ,50.3886,13.18342 22550,Košťany,4576,42,58,CZ,50.65507,13.75554 22546,Kovářská,4576,42,58,CZ,50.43821,13.05388 22568,Krásná Lípa,4576,42,58,CZ,50.48378,13.3575 22586,Křešice,4576,42,58,CZ,50.52259,14.2145 22563,Krupka,4576,42,58,CZ,50.68449,13.85815 22564,Kryry,4576,42,58,CZ,50.17437,13.4266 22596,Lenešice,4576,42,58,CZ,50.37516,13.7659 22613,Liběšice,4576,42,58,CZ,50.56886,14.28906 22608,Libochovice,4576,42,58,CZ,50.40626,14.04439 22609,Libouchec,4576,42,58,CZ,50.75854,14.04071 22623,Litoměřice,4576,42,58,CZ,50.53348,14.1318 22625,Litvínov,4576,42,58,CZ,50.6042,13.61812 22631,Lom u Mostu,4576,42,58,CZ,50.59328,13.65729 22637,Louny,4576,42,58,CZ,50.35699,13.79667 22641,Lovosice,4576,42,58,CZ,50.51504,14.05103 22643,Lubenec,4576,42,58,CZ,50.13207,13.31319 22735,Měcholupy,4576,42,58,CZ,50.26666,13.53737 22683,Meziboři,4576,42,58,CZ,50.62115,13.5987 22687,Mikulášovice,4576,42,58,CZ,50.96507,14.36368 22725,Most,4576,42,58,CZ,50.50301,13.63617 22770,Novosedlice,4576,42,58,CZ,50.65633,13.82304 22802,Obrnice,4576,42,58,CZ,50.50498,13.6954 22813,Okres Chomutov,4576,42,58,CZ,50.41667,13.33333 22816,Okres Děčín,4576,42,58,CZ,50.82905,14.34325 22834,Okres Litoměřice,4576,42,58,CZ,50.5,14.16667 22835,Okres Louny,4576,42,58,CZ,50.33333,13.66667 22837,Okres Most,4576,42,58,CZ,50.55,13.63333 22865,Okres Teplice,4576,42,58,CZ,50.63333,13.83333 22874,Okres Ústí nad Labem,4576,42,58,CZ,50.66667,14.05 22897,Osek,4576,42,58,CZ,50.62115,13.69274 22927,Perštejn,4576,42,58,CZ,50.38166,13.1102 22926,Peruc,4576,42,58,CZ,50.3425,13.95986 22944,Podbořany,4576,42,58,CZ,50.22937,13.41192 22949,Polepy,4576,42,58,CZ,50.50563,14.26447 22957,Postoloprty,4576,42,58,CZ,50.35979,13.70291 22962,Povrly,4576,42,58,CZ,50.67276,14.16033 22976,Proboštov,4576,42,58,CZ,50.66773,13.83601 23014,Radonice,4576,42,58,CZ,50.29803,13.28464 23400,Řehlovice,4576,42,58,CZ,50.60712,13.95412 23038,Roudnice nad Labem,4576,42,58,CZ,50.42528,14.26175 23050,Rumburk,4576,42,58,CZ,50.95151,14.55699 23418,Šluknov,4576,42,58,CZ,51.00369,14.45258 23104,Staré Křečany,4576,42,58,CZ,50.95044,14.49617 23430,Štětí,4576,42,58,CZ,50.45298,14.37421 23160,Teplice,4576,42,58,CZ,50.6404,13.82451 23162,Terezín,4576,42,58,CZ,50.511,14.15055 23198,Třebenice,4576,42,58,CZ,50.47632,13.99005 23175,Trmice,4576,42,58,CZ,50.64286,13.99449 23353,Údlice,4576,42,58,CZ,50.4406,13.45738 23361,Úštěk,4576,42,58,CZ,50.58474,14.34332 23223,Varnsdorf,4576,42,58,CZ,50.91154,14.61824 23225,Vejprty,4576,42,58,CZ,50.49232,13.03212 23227,Velemín,4576,42,58,CZ,50.53898,13.97675 23237,Velké Březno,4576,42,58,CZ,50.6627,14.14174 23255,Velký Šenov,4576,42,58,CZ,50.99078,14.37428 23260,Verneřice,4576,42,58,CZ,50.66114,14.30114 23269,Vilémov,4576,42,58,CZ,50.99054,14.33531 23302,Vroutek,4576,42,58,CZ,50.17999,13.37986 23322,Zabrušany,4576,42,58,CZ,50.60495,13.78748 23439,Žatec,4576,42,58,CZ,50.32717,13.54577 23452,Žitenice,4576,42,58,CZ,50.55528,14.15665 22111,Babice,4563,724,58,CZ,49.12167,17.48075 22191,Bánov,4563,724,58,CZ,48.98801,17.71752 22195,Bílovice,4563,724,58,CZ,49.09965,17.54961 22144,Bojkovice,4563,724,58,CZ,49.03864,17.81487 22151,Boršice,4563,724,58,CZ,49.06254,17.35084 22205,Březnice,4563,724,58,CZ,49.18643,17.66277 22208,Březolupy,4563,724,58,CZ,49.12138,17.58034 22211,Březová,4563,724,58,CZ,48.92543,17.73986 22174,Buchlovice,4563,724,58,CZ,49.08627,17.33852 22188,Bystřice pod Hostýnem,4563,724,58,CZ,49.39924,17.67401 22233,Chropyně,4563,724,58,CZ,49.35644,17.36451 22239,Chvalčov,4563,724,58,CZ,49.38918,17.71149 22272,Dolní Bečva,4563,724,58,CZ,49.45498,18.19419 22287,Dolní Němčí,4563,724,58,CZ,48.96837,17.58585 22325,Francova Lhota,4563,724,58,CZ,49.20174,18.11175 22330,Fryšták,4563,724,58,CZ,49.2852,17.68346 22339,Halenkov,4563,724,58,CZ,49.3174,18.14749 22340,Halenkovice,4563,724,58,CZ,49.17102,17.47156 22357,Hluk,4563,724,58,CZ,48.98805,17.52744 22368,Holešov,4563,724,58,CZ,49.33331,17.57832 22375,Horní Bečva,4563,724,58,CZ,49.43216,18.28859 22382,Horní Lideč,4563,724,58,CZ,49.18121,18.06099 22410,Hošťálková,4563,724,58,CZ,49.35467,17.86944 22406,Hovězí,4563,724,58,CZ,49.30365,18.06062 22434,Hulín,4563,724,58,CZ,49.31689,17.46374 22439,Hvozdná,4563,724,58,CZ,49.24848,17.75163 22450,Jablůnka,4563,724,58,CZ,49.38355,17.95021 22452,Jalubí,4563,724,58,CZ,49.11626,17.42788 22500,Karolinka,4563,724,58,CZ,49.35128,18.24006 22509,Kelč,4563,724,58,CZ,49.47844,17.81533 22523,Kněžpole,4563,724,58,CZ,49.09855,17.51671 22535,Koryčany,4563,724,58,CZ,49.10639,17.16433 22560,Kroměříž,4563,724,58,CZ,49.29785,17.39312 22569,Kunovice,4563,724,58,CZ,49.04499,17.47011 22578,Kvasice,4563,724,58,CZ,49.24223,17.46974 22601,Lešná,4563,724,58,CZ,49.52055,17.93004 22616,Lidečko,4563,724,58,CZ,49.20303,18.0513 22620,Liptál,4563,724,58,CZ,49.29051,17.92177 22646,Luhačovice,4563,724,58,CZ,49.09982,17.75747 22650,Lukov,4563,724,58,CZ,49.29027,17.72959 22699,Mistřice,4563,724,58,CZ,49.08668,17.53597 22749,Napajedla,4563,724,58,CZ,49.17156,17.51194 22753,Nedakonice,4563,724,58,CZ,49.03159,17.38141 22754,Nedašov,4563,724,58,CZ,49.10778,18.07036 22767,Nivnice,4563,724,58,CZ,48.97465,17.64757 22787,Nový Hrozenkov,4563,724,58,CZ,49.33697,18.19793 22831,Okres Kroměříž,4563,724,58,CZ,49.33333,17.5 22869,Okres Uherské Hradiště,4563,724,58,CZ,49.01667,17.55 22870,Okres Vsetín,4563,724,58,CZ,49.36667,18.08333 22872,Okres Zlín,4563,724,58,CZ,49.21667,17.78333 22909,Ostrožská Lhota,4563,724,58,CZ,48.97559,17.46751 22910,Ostrožská Nová Ves,4563,724,58,CZ,49.00434,17.43632 22915,Otrokovice,4563,724,58,CZ,49.20934,17.53944 22950,Polešovice,4563,724,58,CZ,49.0339,17.34064 22956,Popovice,4563,724,58,CZ,49.05255,17.52712 22963,Pozlovice,4563,724,58,CZ,49.12921,17.76925 22980,Prostřední Bečva,4563,724,58,CZ,49.43609,18.252 22984,Prusinovice,4563,724,58,CZ,49.37898,17.5871 23023,Rataje,4563,724,58,CZ,49.2713,17.33555 23024,Ratiboř,4563,724,58,CZ,49.36769,17.91499 23043,Rožnov pod Radhoštěm,4563,724,58,CZ,49.45853,18.14302 23080,Slavičín,4563,724,58,CZ,49.08799,17.87349 23084,Slušovice,4563,724,58,CZ,49.24782,17.8015 23096,Spytihněv,4563,724,58,CZ,49.14115,17.49808 23107,Staré Město,4563,724,58,CZ,49.07515,17.43338 23424,Štítná nad Vláří,4563,724,58,CZ,49.06881,17.98274 23125,Strání,4563,724,58,CZ,48.90216,17.70671 23143,Suchá Loz,4563,724,58,CZ,48.97001,17.71379 23431,Šumice,4563,724,58,CZ,49.02858,17.72205 23163,Tečovice,4563,724,58,CZ,49.22107,17.58733 23167,Tlumačov,4563,724,58,CZ,49.25351,17.49559 23169,Topolná,4563,724,58,CZ,49.12187,17.54434 23172,Traplice,4563,724,58,CZ,49.13088,17.43622 23176,Trnava,4563,724,58,CZ,49.29603,17.84191 23185,Tupesy,4563,724,58,CZ,49.08427,17.36983 23206,Uherské Hradiště,4563,724,58,CZ,49.06975,17.45969 23207,Uherský Brod,4563,724,58,CZ,49.02513,17.64715 23208,Uherský Ostroh,4563,724,58,CZ,48.98556,17.38984 23354,Újezd,4563,724,58,CZ,49.16809,17.9061 23215,Valašská Bystřice,4563,724,58,CZ,49.41507,18.10977 23216,Valašská Polanka,4563,724,58,CZ,49.26215,17.99667 23217,Valašské Klobouky,4563,724,58,CZ,49.14064,18.0076 23218,Valašské Meziříčí,4563,724,58,CZ,49.47181,17.97113 23226,Velehrad,4563,724,58,CZ,49.10543,17.39426 23241,Velké Karlovice,4563,724,58,CZ,49.36064,18.28355 23267,Vidče,4563,724,58,CZ,49.44151,18.09473 23275,Vizovice,4563,724,58,CZ,49.22287,17.85455 23278,Vlachovice,4563,724,58,CZ,49.12377,17.94001 23284,Vlčnov,4563,724,58,CZ,49.0099,17.58183 23317,Všemina,4563,724,58,CZ,49.281,17.87682 23303,Vsetín,4563,724,58,CZ,49.33871,17.99619 23349,Záhorovice,4563,724,58,CZ,49.02266,17.77922 23327,Zašová,4563,724,58,CZ,49.4741,18.04436 23329,Zborovice,4563,724,58,CZ,49.24889,17.28464 23336,Zdounky,4563,724,58,CZ,49.22771,17.31899 23340,Zlechov,4563,724,58,CZ,49.07396,17.37938 23343,Zlín,4563,724,58,CZ,49.22645,17.67065 23455,Žlutava,4563,724,58,CZ,49.19976,17.49037 23346,Zubří,4563,724,58,CZ,49.46603,18.09249 30990,Åkirkeby,1530,84,59,DK,55.0708,14.91978 30577,Albertslund,1530,84,59,DK,55.65691,12.36381 30578,Albertslund Kommune,1530,84,59,DK,55.68022,12.34797 30579,Allerød Kommune,1530,84,59,DK,55.85856,12.32558 30589,Ballerup,1530,84,59,DK,55.73165,12.36328 30590,Ballerup Kommune,1530,84,59,DK,55.73248,12.35793 30595,Birkerød,1530,84,59,DK,55.84759,12.42791 30598,Blovstrød,1530,84,59,DK,55.87038,12.3864 30601,Bornholm Kommune,1530,84,59,DK,55.12386,14.91115 30610,Brøndby Kommune,1530,84,59,DK,55.6429,12.41101 30616,Charlottenlund,1530,84,59,DK,55.75238,12.5745 30618,Christianshavn,1530,84,59,DK,55.67383,12.59541 30619,Christiansø,1530,84,59,DK,55.31982,15.18783 30620,Copenhagen,1530,84,59,DK,55.67594,12.56553 30622,Dragør,1530,84,59,DK,55.5928,12.67221 30623,Dragør Kommune,1530,84,59,DK,55.58233,12.62756 30627,Egedal Kommune,1530,84,59,DK,55.75556,12.22778 30633,Espergærde,1530,84,59,DK,55.99464,12.54733 30638,Farum,1530,84,59,DK,55.80858,12.36066 30645,Fløng,1530,84,59,DK,55.66212,12.18698 30648,Fredensborg,1530,84,59,DK,55.97558,12.40314 30649,Fredensborg Kommune,1530,84,59,DK,55.95,12.45 30652,Frederiksberg,1530,84,59,DK,55.67938,12.53463 30654,Frederiksberg Kommune,1530,84,59,DK,55.67856,12.52216 30657,Frederikssund,1530,84,59,DK,55.83956,12.06896 30658,Frederikssund Kommune,1530,84,59,DK,55.80957,12.04038 30659,Frederiksværk,1530,84,59,DK,55.97073,12.0225 30662,Furesø Kommune,1530,84,59,DK,55.78333,12.34167 30664,Ganløse,1530,84,59,DK,55.79124,12.26421 30665,Gentofte Kommune,1530,84,59,DK,55.75,12.55 30666,Gilleleje,1530,84,59,DK,56.12196,12.31056 30670,Gladsaxe Municipality,1530,84,59,DK,55.76667,12.43333 30672,Glostrup,1530,84,59,DK,55.6666,12.40377 30673,Glostrup Kommune,1530,84,59,DK,55.68188,12.41018 30681,Græsted,1530,84,59,DK,56.06558,12.28512 30678,Gribskov Kommune,1530,84,59,DK,56.05833,12.24167 30691,Halsnæs Kommune,1530,84,59,DK,55.96765,11.94214 30700,Hellebæk,1530,84,59,DK,56.06823,12.55782 30701,Helsinge,1530,84,59,DK,56.02283,12.19752 30702,Helsingør,1530,84,59,DK,56.03606,12.6136 30703,Helsingør Kommune,1530,84,59,DK,56.05,12.5 30704,Herlev Kommune,1530,84,59,DK,55.73317,12.43106 30707,Hillerød,1530,84,59,DK,55.92791,12.30081 30708,Hillerød Kommune,1530,84,59,DK,55.92319,12.23794 30722,Hornbæk,1530,84,59,DK,56.09027,12.45693 30736,Høje-Taastrup Kommune,1530,84,59,DK,55.65643,12.24854 30739,Hørsholm,1530,84,59,DK,55.88098,12.50111 30740,Hørsholm Kommune,1530,84,59,DK,55.88759,12.48566 30727,Humlebæk,1530,84,59,DK,55.9618,12.5341 30728,Hundested,1530,84,59,DK,55.96397,11.85044 30731,Hvidovre,1530,84,59,DK,55.65719,12.47364 30732,Hvidovre Kommune,1530,84,59,DK,55.63166,12.46615 30745,Ishøj,1530,84,59,DK,55.61543,12.35182 30746,Ishøj Kommune,1530,84,59,DK,55.62299,12.30567 30752,Jægerspris,1530,84,59,DK,55.85248,11.98565 30762,Kokkedal,1530,84,59,DK,55.91179,12.49952 30766,Kongens Lyngby,1530,84,59,DK,55.77044,12.50378 30770,København,1530,84,59,DK,55.6711,12.56529 30780,Lillerød,1530,84,59,DK,55.87496,12.34579 30782,Liseleje,1530,84,59,DK,56.01295,11.96544 30785,Lyngby-Tårbæk Kommune,1530,84,59,DK,55.78456,12.50508 30786,Lynge,1530,84,59,DK,55.83941,12.27725 30803,Måløv,1530,84,59,DK,55.75528,12.32327 30808,Nexø,1530,84,59,DK,55.06067,15.13058 30810,Nivå,1530,84,59,DK,55.93405,12.50485 30823,Nødebo,1530,84,59,DK,55.97877,12.34685 31000,Ølstykke,1530,84,59,DK,55.79567,12.15509 30857,Rødovre,1530,84,59,DK,55.68062,12.45373 30858,Rødovre Kommune,1530,84,59,DK,55.68852,12.44834 30861,Rønne,1530,84,59,DK,55.10091,14.70664 30849,Rudersdal Kommune,1530,84,59,DK,55.825,12.49167 30880,Skævinge,1530,84,59,DK,55.90785,12.15036 30874,Skibby,1530,84,59,DK,55.75122,11.96083 30884,Slangerup,1530,84,59,DK,55.85,12.18333 30885,Smørumnedre,1530,84,59,DK,55.74232,12.30276 30896,Stavnsholt,1530,84,59,DK,55.81479,12.40545 30900,Stenløse,1530,84,59,DK,55.76828,12.19723 30930,Taastrup,1530,84,59,DK,55.65006,12.3016 30946,Tårnby,1530,84,59,DK,55.6303,12.60035 30947,Tårnby Kommune,1530,84,59,DK,55.60391,12.59599 30944,Trørød,1530,84,59,DK,55.83946,12.54432 30957,Vallensbæk,1530,84,59,DK,55.62199,12.38511 30958,Vallensbæk Kommune,1530,84,59,DK,55.63128,12.37369 30960,Vanløse,1530,84,59,DK,55.68361,12.48713 30988,Værløse,1530,84,59,DK,55.78251,12.36856 30967,Veksø,1530,84,59,DK,55.75473,12.23837 30580,Allingåbro,1531,82,59,DK,56.46432,10.31957 30993,Århus,1531,82,59,DK,56.15674,10.21076 30994,Århus Kommune,1531,82,59,DK,56.16317,10.16897 30585,Assentoft,1531,82,59,DK,56.4421,10.1517 30587,Auning,1531,82,59,DK,56.43079,10.37818 30588,Avlum,1531,82,59,DK,56.26539,8.79256 30591,Beder,1531,82,59,DK,56.06025,10.21179 30596,Bjerringbro,1531,82,59,DK,56.37797,9.66065 30600,Bording Kirkeby,1531,82,59,DK,56.16871,9.24384 30604,Brande,1531,82,59,DK,55.94316,9.12798 30609,Brædstrup,1531,82,59,DK,55.97153,9.61129 30626,Ebeltoft,1531,82,59,DK,56.19442,10.6821 30639,Favrskov Kommune,1531,82,59,DK,56.31667,9.94 30647,Framlev,1531,82,59,DK,56.15664,10.01318 30663,Galten,1531,82,59,DK,56.15902,9.91691 30669,Gjellerup,1531,82,59,DK,56.14616,9.05467 30675,Grenaa,1531,82,59,DK,56.41578,10.87825 30688,Hadsten,1531,82,59,DK,56.32819,10.04931 30692,Hammel,1531,82,59,DK,56.25762,9.86316 30693,Hammerum,1531,82,59,DK,56.13361,9.06121 30695,Harboøre,1531,82,59,DK,56.61752,8.18069 30698,Hedensted,1531,82,59,DK,55.77043,9.7011 30699,Hedensted Kommune,1531,82,59,DK,55.7968,9.744 30705,Herning,1531,82,59,DK,56.13615,8.97662 30706,Herning Kommune,1531,82,59,DK,56.14997,8.89712 30709,Hinnerup,1531,82,59,DK,56.26608,10.06299 30712,Hjortshøj,1531,82,59,DK,56.24811,10.26533 30719,Holstebro,1531,82,59,DK,56.36009,8.61607 30720,Holstebro Kommune,1531,82,59,DK,56.35916,8.59631 30723,Hornslet,1531,82,59,DK,56.3155,10.32041 30724,Hornsyld,1531,82,59,DK,55.75621,9.85643 30725,Horsens,1531,82,59,DK,55.86066,9.85034 30726,Horsens Kommune,1531,82,59,DK,55.9274,9.77377 30738,Hørning,1531,82,59,DK,56.08701,10.03716 30730,Hvide Sande,1531,82,59,DK,55.99866,8.12605 30743,Ikast,1531,82,59,DK,56.13883,9.15768 30744,Ikast-Brande Kommune,1531,82,59,DK,55.98333,9.21667 30749,Juelsminde,1531,82,59,DK,55.70876,10.01668 30755,Karup,1531,82,59,DK,56.30673,9.16835 30758,Kibæk,1531,82,59,DK,56.0317,8.85697 30760,Kjellerup,1531,82,59,DK,56.28581,9.43528 30765,Kolt,1531,82,59,DK,56.10845,10.06986 30775,Langå,1531,82,59,DK,56.39026,9.89486 30778,Lemvig,1531,82,59,DK,56.54856,8.31019 30779,Lemvig Kommune,1531,82,59,DK,56.49136,8.29927 30781,Lind,1531,82,59,DK,56.106,8.97915 30790,Løgten,1531,82,59,DK,56.27459,10.31181 30787,Lystrup,1531,82,59,DK,56.2375,10.23778 30794,Malling,1531,82,59,DK,56.03632,10.19632 30804,Mårslet,1531,82,59,DK,56.0669,10.16112 30813,Norddjurs Kommune,1531,82,59,DK,56.44124,10.7666 30827,Odder,1531,82,59,DK,55.97313,10.153 30828,Odder Kommune,1531,82,59,DK,55.92967,10.15304 30838,Randers,1531,82,59,DK,56.4607,10.03639 30839,Randers Kommune,1531,82,59,DK,56.51561,10.06901 30843,Ringkøbing,1531,82,59,DK,56.09006,8.24402 30844,Ringkøbing-Skjern Kommune,1531,82,59,DK,56.01,8.39667 30860,Rønde,1531,82,59,DK,56.30145,10.47505 30851,Ry,1531,82,59,DK,56.09038,9.76505 30852,Ryomgård,1531,82,59,DK,56.3843,10.50295 30863,Sabro,1531,82,59,DK,56.21333,10.03441 30865,Samsø Kommune,1531,82,59,DK,55.85245,10.60045 30867,Silkeborg,1531,82,59,DK,56.1697,9.54508 30868,Silkeborg Kommune,1531,82,59,DK,56.17495,9.54666 30872,Skanderborg,1531,82,59,DK,56.03434,9.93177 30873,Skanderborg Kommune,1531,82,59,DK,56.07956,9.89868 30875,Skive,1531,82,59,DK,56.56699,9.02707 30876,Skive Kommune,1531,82,59,DK,56.64478,8.9766 30877,Skjern,1531,82,59,DK,55.95,8.5 30878,Skovby,1531,82,59,DK,56.15672,9.94523 30886,Snejbjerg,1531,82,59,DK,56.13291,8.90353 30888,Solbjerg,1531,82,59,DK,56.04271,10.08631 30925,Søften,1531,82,59,DK,56.23801,10.0851 30894,Spentrup,1531,82,59,DK,56.53703,10.03792 30897,Stavtrup,1531,82,59,DK,56.13124,10.11987 30903,Stilling,1531,82,59,DK,56.06224,9.98822 30904,Stoholm,1531,82,59,DK,56.48454,9.14617 30909,Struer,1531,82,59,DK,56.49205,8.59397 30910,Struer Kommune,1531,82,59,DK,56.46667,8.58333 30915,Sunds,1531,82,59,DK,56.20743,9.01386 30917,Svejbæk,1531,82,59,DK,56.13255,9.63289 30923,Syddjurs Kommune,1531,82,59,DK,56.3125,10.52083 30931,Tarm,1531,82,59,DK,55.90861,8.53041 30936,Thyborøn,1531,82,59,DK,56.69846,8.21238 30952,Tørring,1531,82,59,DK,55.85,9.48333 30942,Tranbjerg,1531,82,59,DK,56.09519,10.13605 30943,Trige,1531,82,59,DK,56.25291,10.1484 30953,Ulfborg,1531,82,59,DK,56.26725,8.32167 30955,Ulstrup,1531,82,59,DK,56.38994,9.79354 30972,Viborg,1531,82,59,DK,56.45319,9.40201 30973,Viborg Kommune,1531,82,59,DK,56.45,9.36667 30975,Videbæk,1531,82,59,DK,56.0876,8.62852 30976,Vildbjerg,1531,82,59,DK,56.2,8.76667 30978,Vinderup,1531,82,59,DK,56.48176,8.77991 30981,Virklund,1531,82,59,DK,56.13218,9.55582 30575,Aalborg,1532,81,59,DK,57.048,9.9187 30576,Aars,1532,81,59,DK,56.80399,9.51441 30989,Åbybro,1532,81,59,DK,57.16249,9.72996 30991,Ålborg Kommune,1532,81,59,DK,57.0,9.95 30992,Ålestrup,1532,81,59,DK,56.6947,9.49336 30581,Arden,1532,81,59,DK,56.76899,9.86184 30608,Brovst,1532,81,59,DK,57.0975,9.52264 30611,Brønderslev,1532,81,59,DK,57.27021,9.94102 30612,Brønderslev Kommune,1532,81,59,DK,57.23506,10.10061 30624,Dronninglund,1532,81,59,DK,57.16035,10.29287 30637,Farsø,1532,81,59,DK,56.77276,9.33925 30644,Fjerritslev,1532,81,59,DK,57.08822,9.26622 30655,Frederikshavn,1532,81,59,DK,57.44073,10.53661 30656,Frederikshavn Kommune,1532,81,59,DK,57.43347,10.42507 30660,Frejlev,1532,81,59,DK,57.00623,9.81711 30667,Gistrup,1532,81,59,DK,56.9943,9.99085 30689,Hadsund,1532,81,59,DK,56.71482,10.11682 30690,Hals,1532,81,59,DK,56.99609,10.30807 30694,Hanstholm,1532,81,59,DK,57.11667,8.61667 30710,Hirtshals,1532,81,59,DK,57.58812,9.95922 30711,Hjallerup,1532,81,59,DK,57.16466,10.14571 30713,Hjørring,1532,81,59,DK,57.46417,9.98229 30714,Hjørring Kommune,1532,81,59,DK,57.45682,10.05859 30715,Hobro,1532,81,59,DK,56.64306,9.79029 30729,Hurup,1532,81,59,DK,56.74944,8.41953 30747,Jammerbugt Kommune,1532,81,59,DK,57.14583,9.5625 30769,Kås,1532,81,59,DK,57.19774,9.67173 30761,Klarup,1532,81,59,DK,57.01194,10.05617 30788,Læso Kommune,1532,81,59,DK,57.26774,11.02265 30789,Løgstør,1532,81,59,DK,56.96245,9.2583 30793,Løkken,1532,81,59,DK,57.37047,9.71466 30795,Mariager,1532,81,59,DK,56.64985,9.97515 30796,Mariagerfjord Kommune,1532,81,59,DK,56.69722,9.84722 30801,Morsø Kommune,1532,81,59,DK,56.79622,8.73272 30809,Nibe,1532,81,59,DK,56.9815,9.63917 30826,Nørresundby,1532,81,59,DK,57.05877,9.92284 30818,Nykøbing Mors,1532,81,59,DK,56.79334,8.85282 30836,Pandrup,1532,81,59,DK,57.22147,9.67569 30840,Rebild Kommune,1532,81,59,DK,56.80556,9.77778 30924,Sæby,1532,81,59,DK,57.33188,10.52251 30869,Sindal,1532,81,59,DK,57.47117,10.20312 30871,Skagen,1532,81,59,DK,57.72093,10.58394 30881,Skørping,1532,81,59,DK,56.83626,9.89255 30906,Storvorde,1532,81,59,DK,57.00392,10.10125 30913,Støvring,1532,81,59,DK,56.88536,9.83839 30907,Strandby,1532,81,59,DK,57.4915,10.49609 30920,Svenstrup,1532,81,59,DK,56.9723,9.84806 30948,Tårs,1532,81,59,DK,57.38333,10.11667 30933,Thisted,1532,81,59,DK,56.95523,8.69491 30934,Thisted Kommune,1532,81,59,DK,57.00397,8.61834 30956,Vadum,1532,81,59,DK,57.1179,9.857 30968,Vestbjerg,1532,81,59,DK,57.13166,9.95942 30969,Vester Hassing,1532,81,59,DK,57.06767,10.12558 30971,Vesthimmerland Kommune,1532,81,59,DK,56.8,9.37083 30983,Vodskov,1532,81,59,DK,57.10854,10.02215 30987,Vrå,1532,81,59,DK,57.3537,9.94176 30573,Aabenraa,1529,83,59,DK,55.04434,9.41741 30574,Aabenraa Kommune,1529,83,59,DK,54.9898,9.31282 30995,Årslev,1529,83,59,DK,55.30353,10.46428 30996,Årup,1529,83,59,DK,55.37315,10.04131 30583,Assens,1529,83,59,DK,55.27023,9.90081 30584,Assens Kommune,1529,83,59,DK,55.29958,10.07952 30586,Augustenborg,1529,83,59,DK,54.95201,9.87216 30997,Ærø Kommune,1529,83,59,DK,54.85833,10.43333 30998,Ærøskøbing,1529,83,59,DK,54.88803,10.41117 30592,Bellinge,1529,83,59,DK,55.33535,10.32045 30593,Billund,1529,83,59,DK,55.73349,9.10785 30594,Billund Kommune,1529,83,59,DK,55.73079,8.96844 30599,Bogense,1529,83,59,DK,55.56691,10.08863 30615,Børkop,1529,83,59,DK,55.64195,9.64958 30603,Bramming,1529,83,59,DK,55.46946,8.70007 30605,Brejning,1529,83,59,DK,55.66594,9.67217 30606,Brenderup,1529,83,59,DK,55.48407,9.97908 30607,Broager,1529,83,59,DK,54.8894,9.67465 30613,Brørup,1529,83,59,DK,55.48194,9.01756 30614,Bullerup,1529,83,59,DK,55.42686,10.47137 30617,Christiansfeld,1529,83,59,DK,55.35817,9.48701 30625,Dybbøl,1529,83,59,DK,54.91079,9.73601 30628,Egtved,1529,83,59,DK,55.61613,9.30763 30629,Ejby,1529,83,59,DK,55.4301,9.92973 30631,Esbjerg,1529,83,59,DK,55.47028,8.45187 30632,Esbjerg Kommune,1529,83,59,DK,55.46893,8.46222 30634,Faaborg,1529,83,59,DK,55.0951,10.24226 30635,Faaborg-Midtfyn Kommune,1529,83,59,DK,55.22667,10.40667 30636,Fanø Kommune,1529,83,59,DK,55.41667,8.41667 30650,Fredericia,1529,83,59,DK,55.56568,9.75257 30651,Fredericia Kommune,1529,83,59,DK,55.57271,9.69489 30668,Give,1529,83,59,DK,55.84523,9.23769 30671,Glamsbjerg,1529,83,59,DK,55.27237,10.10483 30674,Gram,1529,83,59,DK,55.28948,9.04913 30680,Gråsten,1529,83,59,DK,54.91918,9.59523 30679,Grindsted,1529,83,59,DK,55.75726,8.9275 30682,Guderup,1529,83,59,DK,54.98978,9.87174 30686,Haderslev,1529,83,59,DK,55.24943,9.48771 30687,Haderslev Kommune,1529,83,59,DK,55.24441,9.32261 30733,Hårby,1529,83,59,DK,55.22357,10.12268 30721,Holsted,1529,83,59,DK,55.51086,8.91872 30735,Højby,1529,83,59,DK,55.33177,10.43725 30741,Høruphav,1529,83,59,DK,54.91017,9.89872 30748,Jelling,1529,83,59,DK,55.75588,9.4258 30756,Kerteminde,1529,83,59,DK,55.44903,10.65769 30757,Kerteminde Kommune,1529,83,59,DK,55.45498,10.6222 30763,Kolding,1529,83,59,DK,55.4904,9.47216 30764,Kolding Kommune,1529,83,59,DK,55.45006,9.45807 30768,Kruså,1529,83,59,DK,54.85097,9.40129 30773,Langeland Kommune,1529,83,59,DK,54.9,10.77222 30774,Langeskov,1529,83,59,DK,55.35655,10.58447 30791,Løgumkloster,1529,83,59,DK,55.05941,8.95508 30792,Løjt Kirkeby,1529,83,59,DK,55.08959,9.46084 30784,Lunderskov,1529,83,59,DK,55.48375,9.29917 30798,Marstal,1529,83,59,DK,54.85621,10.51726 30799,Middelfart,1529,83,59,DK,55.50591,9.73054 30800,Middelfart Kommune,1529,83,59,DK,55.45782,9.881 30802,Munkebo,1529,83,59,DK,55.45553,10.55433 30806,Neder Holluf,1529,83,59,DK,55.36451,10.44824 30811,Nordborg,1529,83,59,DK,55.05732,9.7408 30812,Nordby,1529,83,59,DK,55.44603,8.39786 30814,Nordfyns Kommune,1529,83,59,DK,55.52222,10.22222 30825,Nørre Åby,1529,83,59,DK,55.46107,9.8794 30815,Nyborg,1529,83,59,DK,55.31274,10.78964 30816,Nyborg Kommune,1529,83,59,DK,55.29473,10.7031 30829,Odense,1529,83,59,DK,55.39594,10.38831 30830,Odense Kommune,1529,83,59,DK,55.3957,10.37761 30832,Oksbøl,1529,83,59,DK,55.6268,8.28757 30834,Otterup,1529,83,59,DK,55.51527,10.39756 30999,Ølgod,1529,83,59,DK,55.80682,8.62859 30835,Padborg,1529,83,59,DK,54.82657,9.36247 30841,Ribe,1529,83,59,DK,55.33051,8.76966 30842,Ringe,1529,83,59,DK,55.23828,10.4786 30855,Rødding,1529,83,59,DK,55.36569,9.06316 30856,Rødekro,1529,83,59,DK,55.07076,9.33531 30850,Rudkøbing,1529,83,59,DK,54.93639,10.71019 30866,Seden,1529,83,59,DK,55.42648,10.44265 30870,Skaerbaek,1529,83,59,DK,55.15735,8.76901 30887,Snoghøj,1529,83,59,DK,55.52253,9.72125 30926,Sønder Bjert,1529,83,59,DK,55.45272,9.56741 30927,Sønderborg,1529,83,59,DK,54.90896,9.78917 30928,Sønderborg Kommune,1529,83,59,DK,54.91667,9.8 30929,Søndersø,1529,83,59,DK,55.48526,10.2554 30895,Starup,1529,83,59,DK,55.24097,9.53503 30902,Stige,1529,83,59,DK,55.43941,10.4094 30908,Strib,1529,83,59,DK,55.54021,9.76748 30918,Svendborg,1529,83,59,DK,55.05982,10.60677 30919,Svendborg Kommune,1529,83,59,DK,55.0841,10.61391 30932,Taulov,1529,83,59,DK,55.54582,9.61553 30935,Thurø By,1529,83,59,DK,55.0474,10.66385 30937,Tinglev,1529,83,59,DK,54.93788,9.25547 30938,Tjæreborg,1529,83,59,DK,55.46457,8.57968 30939,Toftlund,1529,83,59,DK,55.18858,9.06925 30940,Tommerup,1529,83,59,DK,55.31952,10.20659 30941,Tommerup Stationsby,1529,83,59,DK,55.34535,10.17594 30950,Tønder,1529,83,59,DK,54.93306,8.86674 30951,Tønder Kommune,1529,83,59,DK,55.07304,8.87214 30954,Ullerslev,1529,83,59,DK,55.36172,10.6519 30959,Vamdrup,1529,83,59,DK,55.42764,9.28435 30961,Varde,1529,83,59,DK,55.62112,8.48069 30962,Varde Kommune,1529,83,59,DK,55.61667,8.5 30963,Vejen,1529,83,59,DK,55.48117,9.13795 30964,Vejen Kommune,1529,83,59,DK,55.46312,9.05004 30965,Vejle,1529,83,59,DK,55.70927,9.5357 30966,Vejle Kommune,1529,83,59,DK,55.74874,9.40421 30970,Vester-Skerninge,1529,83,59,DK,55.07322,10.45536 30977,Vindeby,1529,83,59,DK,55.04489,10.61309 30982,Vissenbjerg,1529,83,59,DK,55.38482,10.13784 30984,Vojens,1529,83,59,DK,55.24639,9.30603 30582,Asnæs,1528,85,59,DK,55.81229,11.50129 30597,Bjæverskov,1528,85,59,DK,55.45756,12.03651 30602,Borup,1528,85,59,DK,55.49472,11.97584 30621,Dianalund,1528,85,59,DK,55.53133,11.4925 30630,Ejby,1528,85,59,DK,55.4858,12.08171 30640,Faxe,1528,85,59,DK,55.25561,12.11926 30641,Faxe Kommune,1528,85,59,DK,55.29444,12.06111 30642,Faxe Ladeplads,1528,85,59,DK,55.21981,12.17013 30643,Fensmark,1528,85,59,DK,55.27919,11.80382 30646,Forlev,1528,85,59,DK,55.37445,11.25966 30653,Frederiksberg,1528,85,59,DK,55.41618,11.56934 30661,Fuglebjerg,1528,85,59,DK,55.30604,11.54766 30685,Gørlev,1528,85,59,DK,55.53926,11.22708 30676,Greve,1528,85,59,DK,55.58333,12.3 30677,Greve Kommune,1528,85,59,DK,55.5877,12.2506 30683,Guldborgsund Kommune,1528,85,59,DK,54.76944,11.83611 30684,Gundsømagle,1528,85,59,DK,55.73565,12.15158 30734,Hårlev,1528,85,59,DK,55.34936,12.23382 30696,Haslev,1528,85,59,DK,55.32346,11.96389 30697,Havdrup,1528,85,59,DK,55.54481,12.12392 30716,Holbæk,1528,85,59,DK,55.7175,11.71279 30717,Holbæk Kommune,1528,85,59,DK,55.65919,11.62049 30718,Holeby,1528,85,59,DK,54.71148,11.46416 30737,Høng,1528,85,59,DK,55.50736,11.28873 30742,Hørve,1528,85,59,DK,55.75292,11.45298 30750,Jyderup,1528,85,59,DK,55.66399,11.42029 30751,Jyllinge,1528,85,59,DK,55.75295,12.10315 30753,Kalundborg,1528,85,59,DK,55.67954,11.08864 30754,Kalundborg Kommune,1528,85,59,DK,55.63545,11.19993 30759,Kirke Hvalsø,1528,85,59,DK,55.5917,11.86253 30767,Korsør,1528,85,59,DK,55.32993,11.13857 30771,Køge,1528,85,59,DK,55.45802,12.18214 30772,Køge Kommune,1528,85,59,DK,55.45668,12.07332 30776,Lejre,1528,85,59,DK,55.60461,11.97477 30777,Lejre Kommune,1528,85,59,DK,55.63375,11.92234 30783,Lolland Kommune,1528,85,59,DK,54.80238,11.29524 30797,Maribo,1528,85,59,DK,54.77662,11.50017 30805,Nakskov,1528,85,59,DK,54.83038,11.13567 30821,Næstved,1528,85,59,DK,55.22992,11.76092 30822,Næstved Kommune,1528,85,59,DK,55.25855,11.74615 30807,Neder Vindinge,1528,85,59,DK,55.03211,11.88356 30824,Nørre Alslev,1528,85,59,DK,54.89784,11.88414 30817,Nykøbing Falster,1528,85,59,DK,54.76906,11.87425 30819,Nykøbing Sjælland,1528,85,59,DK,55.92491,11.67109 30820,Nyråd,1528,85,59,DK,55.00511,11.9606 30831,Odsherred Kommune,1528,85,59,DK,55.88333,11.59444 30833,Osted,1528,85,59,DK,55.56228,11.95786 31001,Ørslev,1528,85,59,DK,55.04356,11.96792 30837,Præstø,1528,85,59,DK,55.12374,12.04477 30845,Ringsted,1528,85,59,DK,55.4426,11.79011 30846,Ringsted Kommune,1528,85,59,DK,55.44721,11.8172 30847,Roskilde,1528,85,59,DK,55.64152,12.08035 30848,Roskilde Kommune,1528,85,59,DK,55.65,12.1 30853,Rødby,1528,85,59,DK,54.69495,11.38885 30854,Rødbyhavn,1528,85,59,DK,54.65944,11.35504 30859,Rødvig,1528,85,59,DK,55.2554,12.37936 30862,Rønnede,1528,85,59,DK,55.2571,12.02125 30864,Sakskøbing,1528,85,59,DK,54.7997,11.62599 30879,Skælskør,1528,85,59,DK,55.25058,11.29352 30882,Slagelse,1528,85,59,DK,55.40276,11.35459 30883,Slagelse Kommune,1528,85,59,DK,55.34546,11.3339 30889,Solrød,1528,85,59,DK,55.53628,12.1827 30890,Solrød Kommune,1528,85,59,DK,55.53553,12.17337 30891,Solrød Strand,1528,85,59,DK,55.53285,12.22227 30892,Sorø,1528,85,59,DK,55.43184,11.55547 30893,Sorø Kommune,1528,85,59,DK,55.48268,11.55693 30898,Stege,1528,85,59,DK,54.98704,12.28461 30899,Stenlille,1528,85,59,DK,55.53888,11.5912 30901,Stevns Kommune,1528,85,59,DK,55.33373,12.30692 30905,Store Heddinge,1528,85,59,DK,55.30965,12.38885 30911,Strøby Egede,1528,85,59,DK,55.41382,12.24502 30912,Stubbekøbing,1528,85,59,DK,54.88875,12.04102 30914,Sundby,1528,85,59,DK,54.76711,11.84979 30916,Svebølle,1528,85,59,DK,55.65183,11.28658 30921,Svinninge,1528,85,59,DK,55.72111,11.46547 30922,Svogerslev,1528,85,59,DK,55.63423,12.01465 30949,Tølløse,1528,85,59,DK,55.6125,11.77034 30945,Tune,1528,85,59,DK,55.59287,12.16968 30974,Viby,1528,85,59,DK,55.54872,12.02391 30979,Vindinge,1528,85,59,DK,55.62298,12.1387 30980,Vipperød,1528,85,59,DK,55.66768,11.73967 30985,Vordingborg,1528,85,59,DK,55.00801,11.91057 30986,Vordingborg Kommune,1528,85,59,DK,55.01383,12.10008 31595,Anija vald,3567,37,69,EE,59.27644,25.48168 31598,Aruküla,3567,37,69,EE,59.36686,25.07618 31602,Haabneeme,3567,37,69,EE,59.51358,24.82225 31607,Harku,3567,37,69,EE,59.38641,24.57176 31608,Harku vald,3567,37,69,EE,59.39157,24.46206 31613,Jõelähtme vald,3567,37,69,EE,59.43996,25.13535 31618,Jüri,3567,37,69,EE,59.35417,24.89417 31626,Kehra,3567,37,69,EE,59.33611,25.32111 31629,Keila,3567,37,69,EE,59.30361,24.41306 31631,Kiili,3567,37,69,EE,59.30775,24.83776 31632,Kiili vald,3567,37,69,EE,59.29672,24.85292 31640,Kose,3567,37,69,EE,59.46001,24.87824 31644,Kuusalu,3567,37,69,EE,59.44389,25.44139 31647,Laagri,3567,37,69,EE,59.35083,24.61418 31651,Loksa,3567,37,69,EE,59.57639,25.72139 31652,Loksa linn,3567,37,69,EE,59.57844,25.71667 31653,Loo,3567,37,69,EE,59.43123,24.94949 31658,Maardu,3567,37,69,EE,59.46529,24.98215 31659,Maardu linn,3567,37,69,EE,59.46385,24.9735 31676,Paldiski,3567,37,69,EE,59.35667,24.05306 31678,Pringi,3567,37,69,EE,59.53459,24.79726 31688,Raasiku,3567,37,69,EE,59.36639,25.18306 31689,Rae vald,3567,37,69,EE,59.33202,24.93932 31695,Riisipere,3567,37,69,EE,59.11417,24.31056 31698,Rummu,3567,37,69,EE,59.53528,24.79972 31704,Saku,3567,37,69,EE,59.30354,24.66382 31705,Saku vald,3567,37,69,EE,59.28069,24.71649 31706,Saue,3567,37,69,EE,59.32258,24.54967 31707,Saue vald,3567,37,69,EE,59.29255,24.52503 31714,Tabasalu,3567,37,69,EE,59.42607,24.5533 31716,Tallinn,3567,37,69,EE,59.43696,24.75353 31727,Turba,3567,37,69,EE,59.08306,24.225 31734,Vaida,3567,37,69,EE,59.28546,24.97897 31737,Viimsi,3567,37,69,EE,59.50502,24.84807 31738,Viimsi vald,3567,37,69,EE,59.50204,24.84833 31645,Kärdla,3555,39,69,EE,58.99778,22.74917 31610,Iisaku,3569,44,69,EE,59.10139,27.30806 31616,Jõhvi,3569,44,69,EE,59.35917,27.42111 31617,Jõhvi vald,3569,44,69,EE,59.35653,27.39304 31634,Kiviõli,3569,44,69,EE,59.35306,26.97111 31638,Kohtla-Järve,3569,44,69,EE,59.39861,27.27306 31639,Kohtla-Nõmme,3569,44,69,EE,59.35167,27.175 31657,Lüganuse vald,3569,44,69,EE,59.39262,27.07641 31665,Narva,3569,44,69,EE,59.37722,28.19028 31666,Narva-Jõesuu,3569,44,69,EE,59.45889,28.04083 31667,Narva-Jõesuu linn,3569,44,69,EE,59.44127,28.02142 31687,Püssi,3569,44,69,EE,59.36,27.04972 31709,Sillamäe,3569,44,69,EE,59.39697,27.76331 31724,Toila,3569,44,69,EE,59.42127,27.50807 31745,Voka,3569,44,69,EE,59.40776,27.58263 31611,Järva-Jaani,3566,51,69,EE,59.03861,25.88639 31635,Koeru,3566,51,69,EE,58.96306,26.03083 31672,Paide,3566,51,69,EE,58.88556,25.55722 31673,Paide linn,3566,51,69,EE,58.88504,25.56021 31712,Särevere,3566,51,69,EE,58.79,25.42806 31729,Türi,3566,51,69,EE,58.80861,25.4325 31730,Türi vald,3566,51,69,EE,58.74143,25.46443 31614,Jõgeva,3565,49,69,EE,58.74667,26.39389 31615,Jõgeva vald,3565,49,69,EE,58.78732,26.38122 31661,Mustvee,3565,49,69,EE,58.84861,26.93972 31683,Põltsamaa,3565,49,69,EE,58.6525,25.97056 31684,Põltsamaa vald,3565,49,69,EE,58.64067,26.00957 31603,Haapsalu,3568,57,69,EE,58.94306,23.54139 31604,Haapsalu linn,3568,57,69,EE,58.9358,23.53005 31609,Hullo,3568,57,69,EE,58.99004,23.24441 31656,Lääne-Nigula vald,3568,57,69,EE,58.96045,23.74489 31715,Taebla,3568,57,69,EE,58.95389,23.75222 31731,Uuemõisa,3568,57,69,EE,58.93944,23.58944 31746,Vormsi vald,3568,57,69,EE,58.99986,23.23408 31599,Aseri,3564,59,69,EE,59.45056,26.8675 31605,Haljala,3564,59,69,EE,59.43361,26.26139 31606,Haljala vald,3564,59,69,EE,59.45427,26.22015 31619,Kadrina,3564,59,69,EE,59.33472,26.145 31620,Kadrina vald,3564,59,69,EE,59.37463,26.0415 31641,Kunda,3564,59,69,EE,59.49861,26.52611 31675,Pajusti,3564,59,69,EE,59.27444,26.42333 31690,Rakke,3564,59,69,EE,58.98167,26.25444 31691,Rakvere,3564,59,69,EE,59.34639,26.35583 31692,Rakvere vald,3564,59,69,EE,59.32457,26.29757 31713,Sõmeru,3564,59,69,EE,59.36111,26.4375 31717,Tamsalu,3564,59,69,EE,59.15861,26.11528 31718,Tapa,3564,59,69,EE,59.26056,25.95861 31719,Tapa vald,3564,59,69,EE,59.23821,25.84572 31733,Vaiatu,3564,59,69,EE,59.35556,25.99528 31747,Väike-Maarja,3564,59,69,EE,59.12639,26.25 31748,Väike-Maarja vald,3564,59,69,EE,59.06556,26.31417 31742,Vinni,3564,59,69,EE,59.29583,26.43222 31743,Vinni vald,3564,59,69,EE,59.23744,26.62261 31744,Viru-Nigula vald,3564,59,69,EE,59.46387,26.58585 31600,Audru,3562,67,69,EE,58.40861,24.37389 31630,Kihnu vald,3562,67,69,EE,58.13,23.99002 31633,Kilingi-Nõmme,3562,67,69,EE,58.15028,24.96417 31648,Lihula,3562,67,69,EE,58.68139,23.84528 31650,Linaküla,3562,67,69,EE,58.13722,23.97444 31674,Paikuse,3562,67,69,EE,58.37917,24.63444 31680,Pärnu,3562,67,69,EE,58.38588,24.49711 31681,Pärnu linn,3562,67,69,EE,58.37901,24.52784 31682,Pärnu-Jaagupi,3562,67,69,EE,58.61052,24.50689 31703,Saarde vald,3562,67,69,EE,58.13802,24.95564 31708,Sauga,3562,67,69,EE,58.4272,24.49496 31710,Sindi,3562,67,69,EE,58.40056,24.6675 31725,Tootsi,3562,67,69,EE,58.57806,24.7925 31726,Tori vald,3562,67,69,EE,58.48663,24.88961 31732,Uulu,3562,67,69,EE,58.28361,24.58722 31749,Vändra,3562,67,69,EE,58.64806,25.03611 31623,Kanepi,3563,65,69,EE,57.98306,26.75639 31624,Kanepi vald,3563,65,69,EE,57.98058,26.76151 31685,Põlva,3563,65,69,EE,58.06028,27.06944 31686,Põlva vald,3563,65,69,EE,58.08368,26.98242 31699,Räpina,3563,65,69,EE,58.09806,27.46361 31700,Räpina vald,3563,65,69,EE,58.10777,27.3858 31612,Järvakandi,3559,70,69,EE,58.77889,24.82583 31627,Kehtna,3559,70,69,EE,58.93028,24.87806 31628,Kehtna vald,3559,70,69,EE,58.84274,24.89002 31636,Kohila,3559,70,69,EE,59.16806,24.7575 31637,Kohila vald,3559,70,69,EE,59.15283,24.73337 31662,Märjamaa,3559,70,69,EE,58.90389,24.43056 31663,Märjamaa vald,3559,70,69,EE,58.90262,24.39423 31693,Rapla,3559,70,69,EE,59.00722,24.79278 31694,Rapla vald,3559,70,69,EE,59.03309,24.71793 31643,Kuressaare,3561,74,69,EE,58.24806,22.50389 31649,Liiva,3561,74,69,EE,58.60194,23.24694 31660,Muhu vald,3561,74,69,EE,58.58486,23.25609 31670,Orissaare,3561,74,69,EE,58.55917,23.08262 31696,Ruhnu,3561,74,69,EE,57.80028,23.24833 31697,Ruhnu vald,3561,74,69,EE,57.80309,23.2425 31723,Tehumardi,3561,74,69,EE,58.18027,22.24646 31594,Alatskivi,3557,78,69,EE,58.59806,27.13361 31601,Elva,3557,78,69,EE,58.2225,26.42111 31621,Kallaste,3557,78,69,EE,58.66312,27.16164 31622,Kambja vald,3557,78,69,EE,58.20255,26.68996 31646,Kõrveküla,3557,78,69,EE,58.42417,26.78222 31642,Kurepalu,3557,78,69,EE,58.31861,26.84083 31654,Luunja,3557,78,69,EE,58.35583,26.88083 31655,Luunja vald,3557,78,69,EE,58.39178,26.95574 31668,Nõo,3557,78,69,EE,58.27556,26.5375 31669,Nõo vald,3557,78,69,EE,58.24199,26.52499 31677,Peipsiääre vald,3557,78,69,EE,58.51559,27.18444 31679,Puhja,3557,78,69,EE,58.34194,26.31472 31720,Tartu,3557,78,69,EE,58.38062,26.72509 31721,Tartu linn,3557,78,69,EE,58.37498,26.73256 31722,Tartu vald,3557,78,69,EE,58.478,26.74956 31754,Ülenurme,3557,78,69,EE,58.3162,26.72517 31671,Otepää vald,3558,82,69,EE,58.02177,26.45306 31728,Tõrva,3558,82,69,EE,58.00278,25.935 31735,Valga,3558,82,69,EE,57.77781,26.0473 31593,Abja-Paluoja,3556,84,69,EE,58.12528,25.34972 31625,Karksi-Nuia,3556,84,69,EE,58.10333,25.56278 31664,Mõisaküla,3556,84,69,EE,58.09222,25.18639 31711,Suure-Jaani,3556,84,69,EE,58.53611,25.47056 31739,Viiratsi,3556,84,69,EE,58.36,25.63722 31740,Viljandi,3556,84,69,EE,58.36389,25.59 31741,Viljandi vald,3556,84,69,EE,58.36392,25.49103 31751,Võhma,3556,84,69,EE,58.62833,25.54833 31596,Antsla,3560,86,69,EE,57.82556,26.54056 31597,Antsla vald,3560,86,69,EE,57.77738,26.5952 31701,Rõuge,3560,86,69,EE,57.72778,26.90972 31702,Rõuge vald,3560,86,69,EE,57.7278,26.88033 31736,Vana-Antsla,3560,86,69,EE,57.86611,26.53222 31750,Värska,3560,86,69,EE,57.95806,27.63806 31752,Võru,3560,86,69,EE,57.83389,27.01944 31753,Võru vald,3560,86,69,EE,57.86618,26.97418 39132,Äänekoski,1511,08,74,FI,62.6,25.73333 38760,Hankasalmi,1511,08,74,FI,62.38333,26.43333 38809,Jämsä,1511,08,74,FI,61.8642,25.19002 38810,Jämsänkoski,1511,08,74,FI,61.919,25.17011 38801,Joutsa,1511,08,74,FI,61.73333,26.11667 38807,Jyväskylä,1511,08,74,FI,62.24147,25.72088 38823,Kannonkoski,1511,08,74,FI,62.96667,25.25 38831,Karstula,1511,08,74,FI,62.86667,24.78333 38849,Keuruu,1511,08,74,FI,62.26667,24.7 38855,Kinnula,1511,08,74,FI,63.38333,24.95 38862,Kivijärvi,1511,08,74,FI,63.11984,25.07835 38866,Konnevesi,1511,08,74,FI,62.61667,26.31667 38868,Korpilahti,1511,08,74,FI,62.01667,25.55 38878,Kuhmoinen,1511,08,74,FI,61.56667,25.18333 38887,Kyyjärvi,1511,08,74,FI,63.03333,24.56667 38903,Laukaa,1511,08,74,FI,62.41407,25.95194 38907,Leivonmäki,1511,08,74,FI,61.91198,26.12796 38921,Luhanka,1511,08,74,FI,61.79682,25.70457 38939,Multia,1511,08,74,FI,62.41667,24.78333 38942,Muurame,1511,08,74,FI,62.13333,25.66667 38982,Petäjävesi,1511,08,74,FI,62.25,25.2 38985,Pihtipudas,1511,08,74,FI,63.38333,25.56667 39008,Pylkönmäki,1511,08,74,FI,62.66667,24.8 39035,Saarijärvi,1511,08,74,FI,62.70486,25.25396 39066,Säynätsalo,1511,08,74,FI,62.14025,25.76948 39058,Sumiainen,1511,08,74,FI,62.65736,26.04642 39059,Suolahti,1511,08,74,FI,62.56421,25.85363 39079,Toivakka,1511,08,74,FI,62.1,26.08333 39092,Uurainen,1511,08,74,FI,62.5,25.45 39110,Viitasaari,1511,08,74,FI,63.06667,25.86667 38758,Halsua,1494,07,74,FI,63.46667,24.16667 38888,Kälviä,1494,07,74,FI,63.86067,23.45289 38824,Kannus,1494,07,74,FI,63.9,23.9 38838,Kaustinen,1494,07,74,FI,63.54878,23.68845 38864,Kokkola,1494,07,74,FI,63.85414,23.58562 38911,Lestijärvi,1494,07,74,FI,63.53333,24.65 38918,Lohtaja,1494,07,74,FI,64.02472,23.50482 38977,Perho,1494,07,74,FI,63.21667,24.41667 39078,Toholampi,1494,07,74,FI,63.76667,24.25 39088,Ullava,1494,07,74,FI,63.6,24.08333 39106,Veteli,1494,07,74,FI,63.47839,23.78285 38732,Alastaro,1507,19,74,FI,60.95,22.85 38738,Askainen,1507,19,74,FI,60.56667,21.86667 38740,Aura,1507,19,74,FI,60.6471,22.58755 38742,Dragsfjärd,1507,19,74,FI,60.06667,22.48333 38757,Halikko,1507,19,74,FI,60.4,23.08333 38775,Houtskär,1507,19,74,FI,60.22284,21.37218 38790,Iniö,1507,19,74,FI,60.4,21.4 38814,Kaarina,1507,19,74,FI,60.40724,22.36904 38827,Karinainen,1507,19,74,FI,60.66667,22.76667 38851,Kiikala,1507,19,74,FI,60.46667,23.56667 38854,Kimito,1507,19,74,FI,60.16047,22.729 38857,Kisko,1507,19,74,FI,60.23333,23.48333 38884,Kustavi,1507,19,74,FI,60.54529,21.3588 38886,Kuusjoki,1507,19,74,FI,60.51667,23.2 38894,Laitila,1507,19,74,FI,60.87575,21.69765 38909,Lemu,1507,19,74,FI,60.56667,21.96667 38913,Lieto,1507,19,74,FI,60.51032,22.46176 38928,Marttila,1507,19,74,FI,60.58333,22.9 38929,Masku,1507,19,74,FI,60.57082,22.09883 38930,Mellilä,1507,19,74,FI,60.76667,22.95 38934,Merimasku,1507,19,74,FI,60.48333,21.86667 38936,Mietoinen,1507,19,74,FI,60.63333,21.93333 38943,Muurla,1507,19,74,FI,60.35,23.28333 38944,Mynämäki,1507,19,74,FI,60.67915,21.99274 38948,Naantali,1507,19,74,FI,60.46744,22.02428 38949,Nagu,1507,19,74,FI,60.19375,21.90972 38955,Nousiainen,1507,19,74,FI,60.60416,22.07926 38963,Oripää,1507,19,74,FI,60.85,22.68333 38970,Paimio,1507,19,74,FI,60.45671,22.68694 38972,Pargas,1507,19,74,FI,60.30672,22.30097 38978,Perniö,1507,19,74,FI,60.2,23.13333 38980,Pertteli,1507,19,74,FI,60.43333,23.26667 38986,Piikkiö,1507,19,74,FI,60.42481,22.51601 39009,Pöytyä,1507,19,74,FI,60.76667,22.66667 39006,Pyhäranta,1507,19,74,FI,60.95,21.45 39012,Raisio,1507,19,74,FI,60.48592,22.16895 39030,Rusko,1507,19,74,FI,60.53333,22.21667 39032,Rymättylä,1507,19,74,FI,60.37658,21.94184 39037,Salo,1507,19,74,FI,60.38333,23.13333 39065,Särkisalo,1507,19,74,FI,60.11389,22.95 39039,Sauvo,1507,19,74,FI,60.34306,22.69642 39054,Somero,1507,19,74,FI,60.61667,23.53333 39060,Suomusjärvi,1507,19,74,FI,60.35,23.65 39069,Taivassalo,1507,19,74,FI,60.56085,21.61639 39071,Tarvasjoki,1507,19,74,FI,60.58333,22.73333 39081,Turku,1507,19,74,FI,60.45148,22.26869 39093,Uusikaupunki,1507,19,74,FI,60.80043,21.40841 39096,Vahto,1507,19,74,FI,60.6,22.3 39119,Väståboland,1507,19,74,FI,60.29972,22.3004 39118,Västanfjärd,1507,19,74,FI,60.05,22.68333 39102,Vehmaa,1507,19,74,FI,60.68333,21.66667 39104,Velkua,1507,19,74,FI,60.46667,21.66667 39128,Yläne,1507,19,74,FI,60.88333,22.41667 38778,Hyrynsalmi,1496,05,74,FI,64.66667,28.53333 38816,Kajaani,1496,05,74,FI,64.22728,27.72846 38877,Kuhmo,1496,05,74,FI,64.13333,29.51667 38971,Paltamo,1496,05,74,FI,64.41667,27.83333 38999,Puolanka,1496,05,74,FI,64.86667,27.66667 39025,Ristijärvi,1496,05,74,FI,64.5,28.21667 39056,Sotkamo,1496,05,74,FI,64.13333,28.41667 39061,Suomussalmi,1496,05,74,FI,64.88685,28.90778 39094,Vaala,1496,05,74,FI,64.56667,26.83333 39114,Vuokatti,1496,05,74,FI,64.14466,28.28196 39115,Vuolijoki,1496,05,74,FI,64.18538,26.99547 38735,Anjala,1512,09,74,FI,60.68333,26.83333 38744,Elimäki,1512,09,74,FI,60.71667,26.46667 38759,Hamina,1512,09,74,FI,60.56974,27.19794 38784,Iitti,1512,09,74,FI,60.89488,26.33869 38794,Jaala,1512,09,74,FI,61.05251,26.48117 38825,Karhula,1512,09,74,FI,60.52156,26.93125 38872,Kotka,1512,09,74,FI,60.4664,26.94582 38874,Kouvola,1512,09,74,FI,60.86667,26.7 38935,Miehikkälä,1512,09,74,FI,60.66667,27.7 39001,Pyhtää,1512,09,74,FI,60.49349,26.54346 39112,Virojoki,1512,09,74,FI,60.5794,27.70354 38747,Enontekiö,1500,LL,74,FI,68.38573,23.63215 38788,Inari,1500,LL,74,FI,68.90596,27.02881 38793,Ivalo,1500,LL,74,FI,68.65986,27.53891 38841,Kemi,1500,LL,74,FI,65.73641,24.56371 38842,Kemijärvi,1500,LL,74,FI,66.71309,27.43056 38843,Keminmaa,1500,LL,74,FI,65.80158,24.54483 38859,Kittilä,1500,LL,74,FI,67.66474,24.89356 38865,Kolari,1500,LL,74,FI,67.33047,23.77785 38941,Muonio,1500,LL,74,FI,67.95,23.7 38975,Pelkosenniemi,1500,LL,74,FI,67.11083,27.51056 38976,Pello,1500,LL,74,FI,66.77364,23.96255 38994,Posio,1500,LL,74,FI,66.10856,28.17186 39004,Pyhäjärvi,1500,LL,74,FI,67.0701,27.21763 39015,Ranua,1500,LL,74,FI,65.91667,26.53333 39027,Rovaniemi,1500,LL,74,FI,66.5,25.71667 39036,Salla,1500,LL,74,FI,66.83333,28.66667 39043,Savukoski,1500,LL,74,FI,67.2925,28.15806 39050,Simo,1500,LL,74,FI,65.66667,25.05 39052,Sodankylä,1500,LL,74,FI,67.41667,26.6 39075,Tervola,1500,LL,74,FI,66.08333,24.8 39080,Tornio,1500,LL,74,FI,65.84811,24.14662 39091,Utsjoki,1500,LL,74,FI,69.90864,27.02843 39125,Ylitornio,1500,LL,74,FI,66.30893,23.67734 38745,Eno,1504,13,74,FI,62.80511,30.15422 38786,Ilomantsi,1504,13,74,FI,62.67162,30.93276 38798,Joensuu,1504,13,74,FI,62.60118,29.76316 38805,Juuka,1504,13,74,FI,63.23333,29.25 38848,Kesälahti,1504,13,74,FI,61.89752,29.83494 38850,Kiihtelysvaara,1504,13,74,FI,62.49525,30.25081 38858,Kitee,1504,13,74,FI,62.1,30.15 38867,Kontiolahti,1504,13,74,FI,62.76023,29.84711 38912,Lieksa,1504,13,74,FI,63.31667,30.01667 38916,Liperi,1504,13,74,FI,62.53333,29.36667 38957,Nurmes,1504,13,74,FI,63.54205,29.13965 38968,Outokumpu,1504,13,74,FI,62.72685,29.01592 38989,Polvijärvi,1504,13,74,FI,62.85,29.36667 39007,Pyhäselkä,1504,13,74,FI,62.43333,29.96667 39033,Rääkkylä,1504,13,74,FI,62.31667,29.61667 39077,Tohmajärvi,1504,13,74,FI,62.18333,30.38333 39083,Tuupovaara,1504,13,74,FI,62.48372,30.62731 39097,Valtimo,1504,13,74,FI,63.66667,28.8 38733,Alavieska,1505,14,74,FI,64.16667,24.3 38754,Haapajärvi,1505,14,74,FI,63.75,25.33333 38755,Haapavesi,1505,14,74,FI,64.13333,25.36667 38756,Hailuoto,1505,14,74,FI,65.009,24.71385 38765,Haukipudas,1505,14,74,FI,65.17654,25.35233 38772,Himanka,1505,14,74,FI,64.06218,23.65447 38782,Ii,1505,14,74,FI,65.31735,25.3731 38817,Kalajoki,1505,14,74,FI,64.25,23.95 38890,Kärsämäki,1505,14,74,FI,63.96667,25.76667 38844,Kempele,1505,14,74,FI,64.91314,25.50339 38847,Kestilä,1505,14,74,FI,64.35002,26.27921 38852,Kiiminki,1505,14,74,FI,65.13139,25.79744 38879,Kuivaniemi,1505,14,74,FI,65.57847,25.18814 38885,Kuusamo,1505,14,74,FI,65.96667,29.18333 38915,Liminka,1505,14,74,FI,64.80985,25.41545 38922,Lumijoki,1505,14,74,FI,64.83744,25.18607 38932,Merijärvi,1505,14,74,FI,64.3,24.45 38938,Muhos,1505,14,74,FI,64.80798,25.99314 38953,Nivala,1505,14,74,FI,63.91667,24.96667 38965,Oulainen,1505,14,74,FI,64.26667,24.8 38966,Oulu,1505,14,74,FI,65.01236,25.46816 38967,Oulunsalo,1505,14,74,FI,64.93456,25.41121 38987,Piippola,1505,14,74,FI,64.16667,25.96667 38995,Pudasjärvi,1505,14,74,FI,65.38333,26.91667 38997,Pulkkila,1505,14,74,FI,64.26667,25.86667 39003,Pyhäjärvi,1505,14,74,FI,63.66667,25.9 39002,Pyhäjoki,1505,14,74,FI,64.46667,24.23333 39005,Pyhäntä,1505,14,74,FI,64.1,26.31667 39010,Raahe,1505,14,74,FI,64.68333,24.48333 39014,Rantsila,1505,14,74,FI,64.50613,25.66449 39020,Reisjärvi,1505,14,74,FI,63.61667,24.9 39031,Ruukki,1505,14,74,FI,64.66667,25.1 39046,Sievi,1505,14,74,FI,63.9,24.5 39048,Siikajoki,1505,14,74,FI,64.81455,24.75924 39068,Taivalkoski,1505,14,74,FI,65.56667,28.25 39086,Tyrnävä,1505,14,74,FI,64.76469,25.6523 39090,Utajärvi,1505,14,74,FI,64.75,26.38333 39108,Vihanti,1505,14,74,FI,64.48472,24.99157 39121,Yli-Ii,1505,14,74,FI,65.37181,25.8458 39123,Ylikiiminki,1505,14,74,FI,65.08333,26.25 39126,Ylivieska,1505,14,74,FI,64.08333,24.55 38771,Hietalahti,1508,12,74,FI,63.0848,21.61716 38792,Isokyrö,1508,12,74,FI,63.01172,22.33332 38795,Jakobstad,1508,12,74,FI,63.67486,22.70256 38834,Kaskinen,1508,12,74,FI,62.38444,21.22331 38869,Korsholm,1508,12,74,FI,63.11418,21.68216 38870,Korsnäs,1508,12,74,FI,62.78333,21.2 38875,Kristinestad,1508,12,74,FI,62.27429,21.37596 38876,Kronoby,1508,12,74,FI,63.72859,23.03387 38893,Laihia,1508,12,74,FI,62.97609,22.01143 38902,Larsmo,1508,12,74,FI,63.75388,22.74728 38927,Malax,1508,12,74,FI,62.94225,21.57311 38960,Nykarleby,1508,12,74,FI,63.52277,22.53073 38961,Oravais,1508,12,74,FI,63.30135,22.37821 38974,Pedersöre,1508,12,74,FI,63.65,22.68333 39022,Replot,1508,12,74,FI,63.22882,21.41691 39026,Ristinummi,1508,12,74,FI,63.09192,21.72297 39072,Teeriniemi,1508,12,74,FI,63.09705,21.6959 39095,Vaasa,1508,12,74,FI,63.096,21.61577 39117,Vähäkyrö,1508,12,74,FI,63.05635,22.10584 39120,Vörå,1508,12,74,FI,63.13607,22.25223 38736,Artjärvi,1502,16,74,FI,60.74544,26.07084 38737,Asikkala,1502,16,74,FI,61.21667,25.5 38741,Auttoinen,1502,16,74,FI,61.29901,25.08887 38780,Hämeenkoski,1502,16,74,FI,61.02222,25.15417 38763,Hartola,1502,16,74,FI,61.58333,26.01667 38768,Heinola,1502,16,74,FI,61.20564,26.03811 38774,Hollola,1502,16,74,FI,61.05,25.43333 38892,Lahti,1502,16,74,FI,60.98267,25.66151 38951,Nastola,1502,16,74,FI,60.95,25.93333 38962,Orimattila,1502,16,74,FI,60.80487,25.72964 38969,Padasjoki,1502,16,74,FI,61.35,25.28333 39063,Sysmä,1502,16,74,FI,61.5,25.68333 38783,Iisalmi,1506,11,74,FI,63.55915,27.19067 38803,Juankoski,1506,11,74,FI,63.06667,28.35 38815,Kaavi,1506,11,74,FI,62.98333,28.5 38820,Kangaslampi,1506,11,74,FI,62.29563,28.25289 38832,Karttula,1506,11,74,FI,62.8963,26.97045 38839,Keitele,1506,11,74,FI,63.18333,26.36667 38861,Kiuruvesi,1506,11,74,FI,63.65,26.61667 38881,Kuopio,1506,11,74,FI,62.89238,27.67703 38897,Lapinlahti,1506,11,74,FI,63.36667,27.4 38910,Leppävirta,1506,11,74,FI,62.49009,27.78262 38926,Maaninka,1506,11,74,FI,63.15523,27.29939 38952,Nilsiä,1506,11,74,FI,63.20746,28.08222 38984,Pielavesi,1506,11,74,FI,63.23333,26.75 39017,Rautalampi,1506,11,74,FI,62.63333,26.83333 39018,Rautavaara,1506,11,74,FI,63.48333,28.3 39049,Siilinjärvi,1506,11,74,FI,63.08333,27.66667 39055,Sonkajärvi,1506,11,74,FI,63.66667,27.51667 39062,Suonenjoki,1506,11,74,FI,62.61667,27.13333 39074,Tervo,1506,11,74,FI,62.95,26.75 39084,Tuusniemi,1506,11,74,FI,62.81667,28.5 39100,Varkaus,1506,11,74,FI,62.31533,27.873 39101,Varpaisjärvi,1506,11,74,FI,63.35932,27.75506 39103,Vehmersalmi,1506,11,74,FI,62.76101,28.02853 39105,Vesanto,1506,11,74,FI,62.93333,26.41667 39107,Vieremä,1506,11,74,FI,63.75,27.01667 38749,Eura,1501,17,74,FI,61.13333,22.13333 38750,Eurajoki,1501,17,74,FI,61.2,21.73333 38762,Harjavalta,1501,17,74,FI,61.31667,22.13333 38776,Huittinen,1501,17,74,FI,61.18333,22.7 38808,Jämijärvi,1501,17,74,FI,61.81667,22.7 38822,Kankaanpää,1501,17,74,FI,61.8,22.41667 38833,Karvia,1501,17,74,FI,62.13333,22.56667 38860,Kiukainen,1501,17,74,FI,61.21667,22.08333 38863,Kokemäki,1501,17,74,FI,61.25647,22.35643 38891,Köyliö,1501,17,74,FI,61.1191,22.30976 38880,Kullaa,1501,17,74,FI,61.46998,22.16145 38925,Längelmäki,1501,17,74,FI,61.65,22.1 38900,Lappi,1501,17,74,FI,61.1,21.83333 38905,Lavia,1501,17,74,FI,61.6,22.6 38924,Luvia,1501,17,74,FI,61.36375,21.62556 38933,Merikarvia,1501,17,74,FI,61.85839,21.50035 38950,Nakkila,1501,17,74,FI,61.36667,22.0 38954,Noormarkku,1501,17,74,FI,61.59274,21.86846 38990,Pomarkku,1501,17,74,FI,61.69348,22.00862 38991,Pori,1501,17,74,FI,61.48333,21.78333 39016,Rauma,1501,17,74,FI,61.12724,21.51127 39064,Säkylä,1501,17,74,FI,61.03333,22.33333 39047,Siikainen,1501,17,74,FI,61.87703,21.81945 39089,Ulvila,1501,17,74,FI,61.42844,21.87103 39098,Vampula,1501,17,74,FI,61.01667,22.7 38787,Imatra,1497,02,74,FI,61.17185,28.75242 38802,Joutseno,1497,02,74,FI,61.11796,28.50763 38899,Lappeenranta,1497,02,74,FI,61.05871,28.18871 38908,Lemi,1497,02,74,FI,61.06244,27.80571 38923,Luumäki,1497,02,74,FI,60.92618,27.58135 38956,Nuijamaa,1497,02,74,FI,60.96011,28.55104 38973,Parikkala,1497,02,74,FI,61.55,29.5 39019,Rautjärvi,1497,02,74,FI,61.43333,29.35 39028,Ruokolahti,1497,02,74,FI,61.28333,28.83333 39034,Saari,1497,02,74,FI,61.65,29.75 39040,Savitaipale,1497,02,74,FI,61.2,27.7 39067,Taipalsaari,1497,02,74,FI,61.15,28.05 39127,Ylämaa,1497,02,74,FI,60.8,28.0 39130,Ähtäri,1498,03,74,FI,62.55403,24.06186 38730,Alahärmä,1498,03,74,FI,63.23333,22.85 38731,Alajärvi,1498,03,74,FI,63.0,23.81667 38734,Alavus,1498,03,74,FI,62.58333,23.61667 38751,Evijärvi,1498,03,74,FI,63.36667,23.48333 38785,Ilmajoki,1498,03,74,FI,62.73333,22.56667 38791,Isojoki,1498,03,74,FI,62.11319,21.95884 38796,Jalasjärvi,1498,03,74,FI,62.5,22.75 38804,Jurva,1498,03,74,FI,62.68333,21.98333 38826,Karijoki,1498,03,74,FI,62.30851,21.70856 38835,Kauhajoki,1498,03,74,FI,62.43333,22.18333 38836,Kauhava,1498,03,74,FI,63.10299,23.07129 38871,Kortesjärvi,1498,03,74,FI,63.3,23.16667 38882,Kuortane,1498,03,74,FI,62.8,23.5 38883,Kurikka,1498,03,74,FI,62.61667,22.41667 38898,Lappajärvi,1498,03,74,FI,63.2,23.63333 38901,Lapua,1498,03,74,FI,62.96927,23.0088 38906,Lehtimäki,1498,03,74,FI,62.78333,23.91667 38959,Nurmo,1498,03,74,FI,62.8287,22.9099 39044,Seinäjoki,1498,03,74,FI,62.79446,22.82822 39053,Soini,1498,03,74,FI,62.86667,24.21667 39076,Teuva,1498,03,74,FI,62.4819,21.74156 39087,Töysä,1498,03,74,FI,62.62803,23.81828 39111,Vimpeli,1498,03,74,FI,63.16187,23.81922 39122,Ylihärmä,1498,03,74,FI,63.15,22.78333 39124,Ylistaro,1498,03,74,FI,62.93958,22.51306 38746,Enonkoski,1495,04,74,FI,62.08333,28.93333 38766,Haukivuori,1495,04,74,FI,62.01753,27.21906 38769,Heinävesi,1495,04,74,FI,62.43333,28.6 38773,Hirvensalmi,1495,04,74,FI,61.63333,26.8 38811,Jäppilä,1495,04,74,FI,62.37899,27.43372 38800,Joroinen,1495,04,74,FI,62.17823,27.83165 38806,Juva,1495,04,74,FI,61.9,27.85 38821,Kangasniemi,1495,04,74,FI,61.99357,26.64785 38846,Kerimäki,1495,04,74,FI,61.91069,29.28228 38947,Mäntyharju,1495,04,74,FI,61.41667,26.88333 38937,Mikkeli,1495,04,74,FI,61.68857,27.27227 38981,Pertunmaa,1495,04,74,FI,61.5,26.48333 38983,Pieksämäki,1495,04,74,FI,62.3,27.13333 38998,Punkaharju,1495,04,74,FI,61.75883,29.38843 39000,Puumala,1495,04,74,FI,61.52728,28.17495 39013,Rantasalmi,1495,04,74,FI,62.06667,28.3 39024,Ristiina,1495,04,74,FI,61.50579,27.24643 39041,Savonlinna,1495,04,74,FI,61.8699,28.87999 39042,Savonranta,1495,04,74,FI,62.18333,29.2 39057,Sulkava,1495,04,74,FI,61.78691,28.37299 39113,Virtasalmi,1495,04,74,FI,62.12695,27.46276 38752,Forssa,1493,06,74,FI,60.81462,23.62146 38781,Hämeenlinna,1493,06,74,FI,60.99596,24.46434 38764,Hauho,1493,06,74,FI,61.17255,24.56303 38767,Hausjärvi,1493,06,74,FI,60.78333,24.93333 38777,Humppila,1493,06,74,FI,60.93333,23.36667 38797,Janakkala,1493,06,74,FI,60.9,24.6 38799,Jokioinen,1493,06,74,FI,60.80162,23.48004 38819,Kalvola,1493,06,74,FI,61.10081,24.12177 38895,Lammi,1493,06,74,FI,61.08333,25.01667 38919,Loppi,1493,06,74,FI,60.71667,24.45 39021,Renko,1493,06,74,FI,60.89563,24.28785 39023,Riihimäki,1493,06,74,FI,60.73769,24.77726 39070,Tammela,1493,06,74,FI,60.81035,23.76823 39073,Tervakoski,1493,06,74,FI,60.81412,24.62594 39082,Tuulos,1493,06,74,FI,61.15,24.8 39129,Ypäjä,1493,06,74,FI,60.8,23.28333 38739,Askola,1510,18,74,FI,60.53333,25.6 38743,Ekenäs,1510,18,74,FI,59.97359,23.43389 38748,Espoo,1510,18,74,FI,60.2052,24.6522 38753,Gumböle,1510,18,74,FI,60.21948,24.61684 38761,Hanko,1510,18,74,FI,59.83333,22.95 38770,Helsinki,1510,18,74,FI,60.16952,24.93545 38779,Hyvinge,1510,18,74,FI,60.63333,24.86667 38789,Ingå,1510,18,74,FI,60.04587,24.00459 38812,Järvenpää,1510,18,74,FI,60.47369,25.08992 38813,Kaarela,1510,18,74,FI,60.25174,24.88111 38818,Kallio,1510,18,74,FI,60.18427,24.95034 38828,Karis,1510,18,74,FI,60.07178,23.66163 38829,Karjalohja,1510,18,74,FI,60.24015,23.71789 38830,Karkkila,1510,18,74,FI,60.53418,24.20977 38889,Kärkölä,1510,18,74,FI,60.61292,23.94196 38837,Kauniainen,1510,18,74,FI,60.21209,24.72756 38840,Kellokoski,1510,18,74,FI,60.53271,25.10917 38845,Kerava,1510,18,74,FI,60.40338,25.105 38853,Kilo,1510,18,74,FI,60.21746,24.78151 38856,Kirkkonummi,1510,18,74,FI,60.12381,24.43853 38873,Koukkuniemi,1510,18,74,FI,60.15261,24.76467 38896,Lapinjärvi,1510,18,74,FI,60.62443,26.1972 38904,Lauttasaari,1510,18,74,FI,60.15896,24.86797 38914,Liljendal,1510,18,74,FI,60.57346,26.05257 38917,Lohja,1510,18,74,FI,60.24859,24.06534 38920,Lovisa,1510,18,74,FI,60.45659,26.22505 38946,Mäntsälä,1510,18,74,FI,60.63333,25.31667 38931,Mellunkylä,1510,18,74,FI,60.23355,25.09947 38940,Munkkiniemi,1510,18,74,FI,60.19861,24.87772 38945,Myrskylä,1510,18,74,FI,60.66965,25.8475 38958,Nurmijärvi,1510,18,74,FI,60.46407,24.8073 38964,Otaniemi,1510,18,74,FI,60.18395,24.82786 38979,Pernå,1510,18,74,FI,60.44869,26.03187 38988,Pohja,1510,18,74,FI,60.09626,23.52757 38992,Pornainen,1510,18,74,FI,60.47581,25.3749 38993,Porvoo,1510,18,74,FI,60.39233,25.66507 38996,Pukkila,1510,18,74,FI,60.65,25.56667 39011,Raaseporin,1510,18,74,FI,60.00273,23.55499 39029,Ruotsinpyhtää,1510,18,74,FI,60.5268,26.46203 39038,Sammatti,1510,18,74,FI,60.31991,23.82085 39045,Sibbo,1510,18,74,FI,60.37752,25.26906 39051,Siuntio,1510,18,74,FI,60.13862,24.22715 39085,Tuusula,1510,18,74,FI,60.40368,25.02638 39099,Vantaa,1510,18,74,FI,60.29414,25.04099 39109,Vihti,1510,18,74,FI,60.41699,24.31965 39116,Vuosaari,1510,18,74,FI,60.20963,25.14195 39243,Abondance,4798,ARA,75,FR,46.27874,6.72105 39246,Abrest,4798,ARA,75,FR,46.09859,3.44461 39273,Aigueblanche,4798,ARA,75,FR,45.50455,6.50184 39275,Aigueperse,4798,ARA,75,FR,46.02255,3.20228 39285,Aime,4798,ARA,75,FR,45.55559,6.65042 39286,Ainay-le-Château,4798,ARA,75,FR,46.71125,2.69238 39291,Aiton,4798,ARA,75,FR,45.56123,6.25955 39295,Aix-les-Bains,4798,ARA,75,FR,45.69173,5.90863 39301,Alba-la-Romaine,4798,ARA,75,FR,44.55537,4.59846 39302,Albens,4798,ARA,75,FR,45.78786,5.94528 39304,Albertville,4798,ARA,75,FR,45.67452,6.39061 39307,Albigny-sur-Saône,4798,ARA,75,FR,45.86667,4.83333 39309,Alby-sur-Chéran,4798,ARA,75,FR,45.81667,6.01667 39315,Alissas,4798,ARA,75,FR,44.71253,4.62936 39316,Alixan,4798,ARA,75,FR,44.97426,5.0285 39319,Allan,4798,ARA,75,FR,44.49713,4.79068 39320,Allanche,4798,ARA,75,FR,45.22907,2.93449 39333,Allègre,4798,ARA,75,FR,45.19959,3.71174 39325,Allevard,4798,ARA,75,FR,45.39449,6.07519 39326,Allex,4798,ARA,75,FR,44.76765,4.89837 39328,Allières-et-Risset,4798,ARA,75,FR,45.09934,5.67924 39327,Allinges,4798,ARA,75,FR,46.33547,6.4635 39331,Allonzier-la-Caille,4798,ARA,75,FR,46.00117,6.11865 39344,Amancy,4798,ARA,75,FR,46.07294,6.3289 39360,Ambérieu-en-Bugey,4798,ARA,75,FR,45.95932,5.3516 39361,Ambérieux-en-Dombes,4798,ARA,75,FR,45.99894,4.90126 39349,Ambert,4798,ARA,75,FR,45.54944,3.74164 39350,Ambierle,4798,ARA,75,FR,46.10558,3.89323 39358,Ambronay,4798,ARA,75,FR,46.00467,5.36273 39369,Amplepuis,4798,ARA,75,FR,45.9726,4.3303 39370,Ampuis,4798,ARA,75,FR,45.48925,4.81001 39375,Ancône,4798,ARA,75,FR,44.58107,4.72711 39376,Andance,4798,ARA,75,FR,45.24059,4.79916 39377,Andancette,4798,ARA,75,FR,45.24858,4.8086 39391,Andrézieux-Bouthéon,4798,ARA,75,FR,45.52625,4.26021 39414,Annecy,4798,ARA,75,FR,45.90878,6.12565 39415,Annecy-le-Vieux,4798,ARA,75,FR,45.91971,6.14393 39416,Annemasse,4798,ARA,75,FR,46.19439,6.23775 39420,Anneyron,4798,ARA,75,FR,45.2722,4.88626 39423,Annonay,4798,ARA,75,FR,45.23992,4.6707 39428,Anse,4798,ARA,75,FR,45.93553,4.71933 39431,Anthy-sur-Léman,4798,ARA,75,FR,46.35534,6.42735 39440,Aoste,4798,ARA,75,FR,45.59423,5.60712 39441,Aouste-sur-Sye,4798,ARA,75,FR,44.71813,5.05422 39444,Apprieu,4798,ARA,75,FR,45.39591,5.49993 39537,Arâches-la-Frasse,4798,ARA,75,FR,46.04297,6.63145 39448,Arbent,4798,ARA,75,FR,46.29221,5.6789 39460,Archamps,4798,ARA,75,FR,46.13195,6.12551 39471,Arenthon,4798,ARA,75,FR,46.10697,6.33316 39487,Arlanc,4798,ARA,75,FR,45.41389,3.72528 39496,Armoy,4798,ARA,75,FR,46.35079,6.51703 39500,Arnas,4798,ARA,75,FR,46.02361,4.7083 39507,Arpajon-sur-Cère,4798,ARA,75,FR,44.90391,2.45664 39514,Ars-sur-Formans,4798,ARA,75,FR,45.99491,4.81986 39519,Artas,4798,ARA,75,FR,45.53717,5.16352 39520,Artemare,4798,ARA,75,FR,45.87441,5.69366 39522,Arthaz-Pont-Notre-Dame,4798,ARA,75,FR,46.15941,6.26598 39563,Attignat,4798,ARA,75,FR,46.28562,5.16164 39569,Aubenas,4798,ARA,75,FR,44.61975,4.39033 39572,Auberives-sur-Varèze,4798,ARA,75,FR,45.4208,4.81914 39585,Aubière,4798,ARA,75,FR,45.75082,3.11078 39607,Aulnat,4798,ARA,75,FR,45.79929,3.16743 39624,Aurec-sur-Loire,4798,ARA,75,FR,45.36908,4.20161 39630,Aurillac,4798,ARA,75,FR,44.92539,2.43983 39637,Autrans,4798,ARA,75,FR,45.17605,5.54271 39650,Auzat-la-Combelle,4798,ARA,75,FR,45.45224,3.31825 39659,Aveize,4798,ARA,75,FR,45.68243,4.47786 39660,Aveizieux,4798,ARA,75,FR,45.565,4.37071 39663,Avermes,4798,ARA,75,FR,46.58774,3.3072 39685,Aydat,4798,ARA,75,FR,45.66022,2.97316 39690,Ayse,4798,ARA,75,FR,46.08135,6.4455 40409,Bâgé-la-Ville,4798,ARA,75,FR,46.31567,4.94086 39734,Bains,4798,ARA,75,FR,45.00956,3.77503 39744,Balan,4798,ARA,75,FR,45.83416,5.0993 39748,Balbigny,4798,ARA,75,FR,45.81913,4.1903 39751,Ballaison,4798,ARA,75,FR,46.29842,6.32765 39773,Barberaz,4798,ARA,75,FR,45.56179,5.94306 39776,Barby,4798,ARA,75,FR,45.5681,5.97966 39791,Barraux,4798,ARA,75,FR,45.43176,5.97964 39796,Bas-en-Basset,4798,ARA,75,FR,45.30599,4.10912 39800,Bassens,4798,ARA,75,FR,45.57555,5.939 39840,Beauchastel,4798,ARA,75,FR,44.82587,4.80305 39843,Beaucroissant,4798,ARA,75,FR,45.34276,5.47102 39846,Beaufort,4798,ARA,75,FR,45.71915,6.57331 39849,Beaujeu,4798,ARA,75,FR,46.15428,4.58826 39856,Beaulon,4798,ARA,75,FR,46.60156,3.67314 39859,Beaumont,4798,ARA,75,FR,45.75165,3.08294 39870,Beaumont-lès-Valence,4798,ARA,75,FR,44.86203,4.94309 39862,Beaumont-Monteux,4798,ARA,75,FR,45.0198,4.91883 39882,Beaurepaire,4798,ARA,75,FR,45.33658,5.04878 39885,Beausemblant,4798,ARA,75,FR,45.21706,4.83241 39891,Beauvallon,4798,ARA,75,FR,44.85593,4.90756 39892,Beauvoir-de-Marc,4798,ARA,75,FR,45.52009,5.07906 39897,Beauzac,4798,ARA,75,FR,45.25913,4.09874 40421,Béligneux,4798,ARA,75,FR,45.86775,5.12747 39911,Belle-Plagne,4798,ARA,75,FR,45.50932,6.70685 39914,Bellegarde-en-Forez,4798,ARA,75,FR,45.64469,4.29721 39915,Bellegarde-sur-Valserine,4798,ARA,75,FR,46.10787,5.82421 39916,Bellenaves,4798,ARA,75,FR,46.20045,3.07995 39919,Bellerive-sur-Allier,4798,ARA,75,FR,46.11652,3.40406 39921,Bellevaux,4798,ARA,75,FR,46.25875,6.53351 39922,Belleville,4798,ARA,75,FR,46.10867,4.7492 39927,Belley,4798,ARA,75,FR,45.75917,5.68813 39928,Bellignat,4798,ARA,75,FR,46.24237,5.62843 39932,Belmont-de-la-Loire,4798,ARA,75,FR,46.16596,4.34737 39955,Bernin,4798,ARA,75,FR,45.26772,5.86457 39975,Bessay-sur-Allier,4798,ARA,75,FR,46.44199,3.36257 39976,Besse-et-Saint-Anastaise,4798,ARA,75,FR,45.51667,2.93333 39978,Bessenay,4798,ARA,75,FR,45.77661,4.55441 40000,Beynost,4798,ARA,75,FR,45.83569,4.9991 40020,Bilieu,4798,ARA,75,FR,45.44809,5.54268 40021,Billom,4798,ARA,75,FR,45.72267,3.33869 40028,Biol,4798,ARA,75,FR,45.4914,5.3855 40036,Biviers,4798,ARA,75,FR,45.23333,5.8 40042,Blacé,4798,ARA,75,FR,46.03152,4.64448 40056,Blanzat,4798,ARA,75,FR,45.82975,3.07794 40061,Blavozy,4798,ARA,75,FR,45.0572,3.97993 40245,Boëge,4798,ARA,75,FR,46.20711,6.40428 40246,Boën-sur-Lignon,4798,ARA,75,FR,45.75114,4.00725 40117,Bonne,4798,ARA,75,FR,46.17207,6.32443 40118,Bonnefamille,4798,ARA,75,FR,45.59956,5.12489 40126,Bonneville,4798,ARA,75,FR,46.0802,6.40726 40131,Bons-en-Chablais,4798,ARA,75,FR,46.26486,6.37129 40132,Bonson,4798,ARA,75,FR,45.52291,4.2127 40168,Boulieu-lès-Annonay,4798,ARA,75,FR,45.27065,4.66645 40179,Bourbon-l’Archambault,4798,ARA,75,FR,46.58324,3.05652 40187,Bourg-Argental,4798,ARA,75,FR,45.29899,4.5683 40191,Bourg-de-Péage,4798,ARA,75,FR,45.03151,5.04993 40192,Bourg-de-Thizy,4798,ARA,75,FR,46.03371,4.29904 40194,Bourg-en-Bresse,4798,ARA,75,FR,46.20574,5.2258 40196,Bourg-lès-Valence,4798,ARA,75,FR,44.94703,4.89463 40189,Bourg-Saint-Andéol,4798,ARA,75,FR,44.37338,4.64413 40190,Bourg-Saint-Maurice,4798,ARA,75,FR,45.61463,6.76845 40204,Bourgoin-Jallieu,4798,ARA,75,FR,45.58611,5.27361 40210,Bournoncle-Saint-Pierre,4798,ARA,75,FR,45.34351,3.3183 40226,Bouvesse-Quirieu,4798,ARA,75,FR,45.7931,5.41496 40242,Bozel,4798,ARA,75,FR,45.44288,6.64896 40262,Brassac-les-Mines,4798,ARA,75,FR,45.41407,3.329 40363,Brézins,4798,ARA,75,FR,45.35213,5.30539 40330,Brié-et-Angonnes,4798,ARA,75,FR,45.12418,5.78374 40309,Briennon,4798,ARA,75,FR,46.15127,4.0769 40312,Brignais,4798,ARA,75,FR,45.67383,4.75418 40316,Brindas,4798,ARA,75,FR,45.72111,4.69349 40321,Brioude,4798,ARA,75,FR,45.29419,3.38423 40325,Brison-Saint-Innocent,4798,ARA,75,FR,45.7244,5.88895 40328,Brives-Charensac,4798,ARA,75,FR,45.0478,3.92878 40332,Bron,4798,ARA,75,FR,45.73865,4.91303 40337,Broût-Vernet,4798,ARA,75,FR,46.18756,3.27324 40341,Brugheas,4798,ARA,75,FR,46.07676,3.3678 40375,Buellas,4798,ARA,75,FR,46.2111,5.1322 40379,Buis-les-Baronnies,4798,ARA,75,FR,44.27647,5.27187 40383,Bully,4798,ARA,75,FR,45.85113,4.58328 40400,Bussières,4798,ARA,75,FR,45.8357,4.27123 40404,Buxières-les-Mines,4798,ARA,75,FR,46.46807,2.95994 40465,Cailloux-sur-Fontaines,4798,ARA,75,FR,45.85259,4.87473 40477,Caluire-et-Cuire,4798,ARA,75,FR,45.79462,4.8464 40516,Cantal,4798,ARA,75,FR,45.13985,2.64947 41389,Cébazat,4798,ARA,75,FR,45.8314,3.09992 40634,Celles-sur-Durolle,4798,ARA,75,FR,45.85829,3.6354 40636,Cellieu,4798,ARA,75,FR,45.51866,4.54332 41397,Cérilly,4798,ARA,75,FR,46.61791,2.8208 40655,Certines,4798,ARA,75,FR,46.13244,5.26525 40659,Cessieu,4798,ARA,75,FR,45.56371,5.37607 40662,Cessy,4798,ARA,75,FR,46.32032,6.07477 40665,Ceyrat,4798,ARA,75,FR,45.73265,3.06323 40667,Ceyzériat,4798,ARA,75,FR,46.18126,5.31977 40669,Chabeuil,4798,ARA,75,FR,44.89843,5.01438 40931,Châbons,4798,ARA,75,FR,45.44282,5.42542 40671,Chabreloche,4798,ARA,75,FR,45.879,3.69664 40674,Chadrac,4798,ARA,75,FR,45.06181,3.90261 40686,Chalamont,4798,ARA,75,FR,45.99734,5.16865 40688,Chaleins,4798,ARA,75,FR,46.03165,4.80789 40694,Challes-les-Eaux,4798,ARA,75,FR,45.54685,5.98098 40695,Challex,4798,ARA,75,FR,46.18458,5.97639 40700,Chamagnieu,4798,ARA,75,FR,45.68249,5.16947 40701,Chamalières,4798,ARA,75,FR,45.77364,3.06703 40713,Chambéry,4798,ARA,75,FR,45.56628,5.92079 40714,Chambœuf,4798,ARA,75,FR,45.58333,4.31667 40717,Chamonix-Mont-Blanc,4798,ARA,75,FR,45.92375,6.86933 40718,Champ-sur-Drac,4798,ARA,75,FR,45.0694,5.73151 40719,Champagnac,4798,ARA,75,FR,45.3566,2.39942 40721,Champagne-au-Mont-d’Or,4798,ARA,75,FR,45.79475,4.79079 40725,Champagnier,4798,ARA,75,FR,45.11155,5.72716 40732,Champdieu,4798,ARA,75,FR,45.64533,4.04705 40733,Champeix,4798,ARA,75,FR,45.58863,3.12878 40738,Champier,4798,ARA,75,FR,45.4554,5.29237 40749,Champs-sur-Tarentaine-Marchal,4798,ARA,75,FR,45.4,2.56667 40756,Chanas,4798,ARA,75,FR,45.31881,4.81849 40760,Chandon,4798,ARA,75,FR,46.14925,4.21393 40765,Chanonat,4798,ARA,75,FR,45.69299,3.09351 40766,Chanos-Curson,4798,ARA,75,FR,45.06057,4.92381 40769,Chantelle,4798,ARA,75,FR,46.23806,3.15318 40781,Chapareillan,4798,ARA,75,FR,45.46513,5.99171 40782,Chapdes-Beaufort,4798,ARA,75,FR,45.89277,2.86362 40784,Chaponnay,4798,ARA,75,FR,45.62762,4.93615 40785,Chaponost,4798,ARA,75,FR,45.7102,4.74221 40786,Chappes,4798,ARA,75,FR,45.86848,3.22068 40788,Charantonnay,4798,ARA,75,FR,45.53705,5.11005 40789,Charavines,4798,ARA,75,FR,45.42891,5.51492 40790,Charbonnières-les-Bains,4798,ARA,75,FR,45.78053,4.74637 40791,Charbonnières-les-Varennes,4798,ARA,75,FR,45.90786,2.99976 40793,Charentay,4798,ARA,75,FR,46.08897,4.67921 40803,Charlieu,4798,ARA,75,FR,46.16202,4.17228 40804,Charly,4798,ARA,75,FR,45.64887,4.79461 40808,Charmes-sur-Rhône,4798,ARA,75,FR,44.86367,4.83533 40809,Charnay,4798,ARA,75,FR,45.89058,4.66821 40813,Charnècles,4798,ARA,75,FR,45.34398,5.52799 40822,Charvieu-Chavagneux,4798,ARA,75,FR,45.75,5.15 40824,Chassagny,4798,ARA,75,FR,45.6067,4.73214 40825,Chasse-sur-Rhône,4798,ARA,75,FR,45.5785,4.80985 40826,Chasselay,4798,ARA,75,FR,45.8744,4.77237 40829,Chassieu,4798,ARA,75,FR,45.74584,4.97088 40938,Château-Gaillard,4798,ARA,75,FR,45.97239,5.30436 40955,Châteaugay,4798,ARA,75,FR,45.85117,3.08482 40959,Châteauneuf,4798,ARA,75,FR,45.52457,4.64044 40962,Châteauneuf-de-Galaure,4798,ARA,75,FR,45.22977,4.95777 40965,Châteauneuf-du-Rhône,4798,ARA,75,FR,44.48906,4.71706 40973,Châteauneuf-sur-Isère,4798,ARA,75,FR,45.01667,4.93333 40980,Châtel,4798,ARA,75,FR,46.26495,6.8403 40981,Châtel-Guyon,4798,ARA,75,FR,45.92258,3.06423 40991,Châtillon,4798,ARA,75,FR,45.80091,5.84352 40995,Châtillon-en-Michaille,4798,ARA,75,FR,46.1432,5.7995 40997,Châtillon-la-Palud,4798,ARA,75,FR,45.97171,5.2529 40999,Châtillon-sur-Chalaronne,4798,ARA,75,FR,46.11834,4.95656 41001,Châtillon-sur-Cluses,4798,ARA,75,FR,46.08765,6.58041 41007,Châtonnay,4798,ARA,75,FR,45.48734,5.21168 40832,Chatte,4798,ARA,75,FR,45.14248,5.28224 40833,Chatuzange-le-Goubet,4798,ARA,75,FR,45.00359,5.09079 40836,Chaudes-Aigues,4798,ARA,75,FR,44.85455,3.00406 40851,Chauriat,4798,ARA,75,FR,45.75127,3.27895 40857,Chavanay,4798,ARA,75,FR,45.41647,4.72602 40858,Chavanod,4798,ARA,75,FR,45.89005,6.03928 40859,Chavanoz,4798,ARA,75,FR,45.76846,5.18808 40865,Chazelles-sur-Lyon,4798,ARA,75,FR,45.63779,4.3889 40866,Chazey-sur-Ain,4798,ARA,75,FR,45.893,5.25352 40876,Chens-sur-Léman,4798,ARA,75,FR,46.32459,6.27075 40888,Chessy,4798,ARA,75,FR,45.88716,4.62339 40903,Chevry,4798,ARA,75,FR,46.28136,6.03873 40908,Chilly,4798,ARA,75,FR,45.99185,5.95477 40910,Chimilin,4798,ARA,75,FR,45.5749,5.59569 40911,Chindrieux,4798,ARA,75,FR,45.81948,5.85024 40914,Chirens,4798,ARA,75,FR,45.41024,5.55634 40920,Choisy,4798,ARA,75,FR,45.99359,6.05866 40925,Chomérac,4798,ARA,75,FR,44.70752,4.66164 40930,Chuzelles,4798,ARA,75,FR,45.58481,4.87703 41030,Civens,4798,ARA,75,FR,45.77964,4.2517 41033,Civrieux,4798,ARA,75,FR,45.92086,4.88249 41038,Claix,4798,ARA,75,FR,45.11994,5.67292 41073,Clérieux,4798,ARA,75,FR,45.07591,4.95983 41049,Clermont-Ferrand,4798,ARA,75,FR,45.77969,3.08682 41059,Clonas-sur-Varèze,4798,ARA,75,FR,45.41382,4.79077 41064,Cluses,4798,ARA,75,FR,46.06251,6.57497 41081,Cognin,4798,ARA,75,FR,45.55952,5.89113 41082,Cogny,4798,ARA,75,FR,45.98747,4.62475 41086,Coise,4798,ARA,75,FR,45.52822,6.14389 41088,Coligny,4798,ARA,75,FR,46.38252,5.34554 41093,Collonges,4798,ARA,75,FR,46.13819,5.90506 41094,Collonges-sous-Salève,4798,ARA,75,FR,46.1416,6.15372 41098,Colombe,4798,ARA,75,FR,45.40024,5.45441 41109,Combloux,4798,ARA,75,FR,45.8979,6.6442 41113,Combronde,4798,ARA,75,FR,45.98099,3.08807 41117,Commelle,4798,ARA,75,FR,46.00086,4.05794 41118,Commentry,4798,ARA,75,FR,46.28876,2.74163 41122,Communay,4798,ARA,75,FR,45.60442,4.83488 41130,Condat,4798,ARA,75,FR,45.34093,2.75791 41134,Condrieu,4798,ARA,75,FR,45.463,4.76765 41154,Contamine-sur-Arve,4798,ARA,75,FR,46.14223,6.33215 41162,Corbas,4798,ARA,75,FR,45.66798,4.90198 41166,Corbelin,4798,ARA,75,FR,45.60733,5.54261 41175,Cordon,4798,ARA,75,FR,45.92099,6.60536 41176,Corenc,4798,ARA,75,FR,45.21889,5.76497 41186,Cornas,4798,ARA,75,FR,44.96382,4.84839 41192,Cornier,4798,ARA,75,FR,46.09304,6.29895 41213,Coublevie,4798,ARA,75,FR,45.35856,5.61146 41214,Coubon,4798,ARA,75,FR,44.99731,3.91783 41247,Courchevel,4798,ARA,75,FR,45.41538,6.63643 41255,Cournon-d’Auvergne,4798,ARA,75,FR,45.74123,3.19643 41259,Courpière,4798,ARA,75,FR,45.75689,3.54216 41262,Cours-la-Ville,4798,ARA,75,FR,46.1,4.31667 41273,Courzieu,4798,ARA,75,FR,45.7427,4.57084 41282,Coutouvre,4798,ARA,75,FR,46.07303,4.20535 41285,Coux,4798,ARA,75,FR,44.73484,4.62057 41287,Couzon-au-Mont-d’Or,4798,ARA,75,FR,45.84436,4.82883 41295,Cran-Gevrier,4798,ARA,75,FR,45.9,6.1 41297,Cranves-Sales,4798,ARA,75,FR,46.18799,6.29903 41299,Craponne,4798,ARA,75,FR,45.74526,4.72322 41300,Craponne-sur-Arzon,4798,ARA,75,FR,45.33092,3.84817 41347,Crémieu,4798,ARA,75,FR,45.72557,5.24911 41309,Crest,4798,ARA,75,FR,44.72639,5.01517 41313,Creuzier-le-Vieux,4798,ARA,75,FR,46.16253,3.43311 41315,Creys-Mépieu,4798,ARA,75,FR,45.73333,5.48333 41326,Crolles,4798,ARA,75,FR,45.27724,5.87837 41330,Crottet,4798,ARA,75,FR,46.27602,4.89388 41335,Cruas,4798,ARA,75,FR,44.65706,4.76293 41336,Cruet,4798,ARA,75,FR,45.5289,6.0922 41337,Cruseilles,4798,ARA,75,FR,46.0298,6.10831 41355,Cublize,4798,ARA,75,FR,46.0181,4.37738 41370,Cuisiat,4798,ARA,75,FR,46.30021,5.38809 41371,Culhat,4798,ARA,75,FR,45.86259,3.33676 41372,Culoz,4798,ARA,75,FR,45.84886,5.78537 41374,Cunlhat,4798,ARA,75,FR,45.63198,3.55927 41377,Curtin,4798,ARA,75,FR,45.64353,5.48982 41380,Cussac-sur-Loire,4798,ARA,75,FR,44.98807,3.88416 41381,Cusset,4798,ARA,75,FR,46.13452,3.45639 41383,Cusy,4798,ARA,75,FR,45.76603,6.02825 41387,Cuzieu,4798,ARA,75,FR,45.60764,4.25761 41404,Dagneux,4798,ARA,75,FR,45.8514,5.0778 41407,Dallet,4798,ARA,75,FR,45.77047,3.23875 41432,Dardilly,4798,ARA,75,FR,45.80558,4.75319 41442,Davézieux,4798,ARA,75,FR,45.2552,4.70744 41600,Décines-Charpieu,4798,ARA,75,FR,45.76873,4.95883 41452,Denicé,4798,ARA,75,FR,46.00158,4.64555 41608,Département de lAin,4798,ARA,75,FR,46.16667,5.33333 41610,Département de lAllier,4798,ARA,75,FR,46.5,3.0 41611,Département de lArdèche,4798,ARA,75,FR,44.66667,4.33333 41620,Département de lIsère,4798,ARA,75,FR,45.16667,5.83333 41627,Département de la Drôme,4798,ARA,75,FR,44.69971,5.16521 41630,Département de la Loire,4798,ARA,75,FR,45.47169,4.43298 41643,Département du Puy-de-Dôme,4798,ARA,75,FR,45.70549,3.146 41644,Département du Rhône,4798,ARA,75,FR,45.89126,4.53039 41648,Désaignes,4798,ARA,75,FR,44.99466,4.51695 41649,Désertines,4798,ARA,75,FR,46.35456,2.61924 41466,Die,4798,ARA,75,FR,44.7536,5.37033 41499,Diémoz,4798,ARA,75,FR,45.59099,5.08884 41473,Dieulefit,4798,ARA,75,FR,44.52563,5.0618 41485,Dingy-Saint-Clair,4798,ARA,75,FR,45.90664,6.22554 41489,Diou,4798,ARA,75,FR,46.53432,3.74453 41497,Divonne-les-Bains,4798,ARA,75,FR,46.3571,6.13494 41506,Dolomieu,4798,ARA,75,FR,45.6054,5.48571 41511,Domancy,4798,ARA,75,FR,45.91205,6.65271 41512,Domarin,4798,ARA,75,FR,45.58662,5.24599 41526,Domène,4798,ARA,75,FR,45.20289,5.83335 41527,Domérat,4798,ARA,75,FR,46.36036,2.53455 41515,Domessin,4798,ARA,75,FR,45.54739,5.70495 41522,Dompierre-sur-Besbre,4798,ARA,75,FR,46.52214,3.68106 41524,Dompierre-sur-Veyle,4798,ARA,75,FR,46.07108,5.20232 41537,Donzère,4798,ARA,75,FR,44.44246,4.71134 41543,Dortan,4798,ARA,75,FR,46.31973,5.66028 41557,Doussard,4798,ARA,75,FR,45.77512,6.22553 41558,Douvaine,4798,ARA,75,FR,46.30544,6.30375 41563,Doyet,4798,ARA,75,FR,46.33558,2.79718 41580,Drumettaz,4798,ARA,75,FR,45.66136,5.92191 41591,Dunières,4798,ARA,75,FR,45.21558,4.34471 41597,Durtol,4798,ARA,75,FR,45.79621,3.05156 48036,Ébreuil,4798,ARA,75,FR,46.11548,3.08677 48038,Échalas,4798,ARA,75,FR,45.55203,4.71544 48039,Échenevex,4798,ARA,75,FR,46.30923,6.03963 48042,Échirolles,4798,ARA,75,FR,45.14603,5.71441 48056,Écully,4798,ARA,75,FR,45.77437,4.77758 41675,Ennezat,4798,ARA,75,FR,45.89772,3.22348 41682,Entre-Deux-Guiers,4798,ARA,75,FR,45.43061,5.75209 41684,Enval,4798,ARA,75,FR,45.89921,3.04981 48069,Épagny,4798,ARA,75,FR,45.93584,6.08302 48082,Épinouze,4798,ARA,75,FR,45.31003,4.92936 41713,Escoutoux,4798,ARA,75,FR,45.81942,3.56336 41717,Espaly-Saint-Marcel,4798,ARA,75,FR,45.0479,3.86557 41735,Estivareilles,4798,ARA,75,FR,46.42526,2.61872 41736,Estrablin,4798,ARA,75,FR,45.51546,4.96173 41740,Etaux,4798,ARA,75,FR,46.06835,6.29533 48106,Étoile-sur-Rhône,4798,ARA,75,FR,44.83883,4.8905 48109,Étrembières,4798,ARA,75,FR,46.17923,6.22725 41744,Eurre,4798,ARA,75,FR,44.75825,4.98843 48118,Évian-les-Bains,4798,ARA,75,FR,46.40111,6.58793 48120,Évires,4798,ARA,75,FR,46.03783,6.22453 41751,Eybens,4798,ARA,75,FR,45.14771,5.75014 41759,Eyzin-Pinet,4798,ARA,75,FR,45.47377,4.99845 41772,Fareins,4798,ARA,75,FR,46.01913,4.76136 41775,Farnay,4798,ARA,75,FR,45.49622,4.58311 41782,Faverges,4798,ARA,75,FR,45.75116,6.29151 41783,Faverges-de-la-Tour,4798,ARA,75,FR,45.59068,5.52136 41793,Feigères,4798,ARA,75,FR,46.11228,6.07937 41794,Feillens,4798,ARA,75,FR,46.33426,4.89146 42002,Félines,4798,ARA,75,FR,45.31668,4.72836 41801,Ferney-Voltaire,4798,ARA,75,FR,46.25858,6.11063 42008,Féternes,4798,ARA,75,FR,46.35582,6.54829 41814,Feurs,4798,ARA,75,FR,45.73337,4.22755 41816,Feyzin,4798,ARA,75,FR,45.67287,4.85894 41820,Fillinges,4798,ARA,75,FR,46.15944,6.34237 41824,Firminy,4798,ARA,75,FR,45.38956,4.2886 41826,Fitilieu,4798,ARA,75,FR,45.54744,5.56194 41830,Flaviac,4798,ARA,75,FR,44.74777,4.67434 41842,Fleurie,4798,ARA,75,FR,46.19219,4.69747 41843,Fleurieu-sur-Saône,4798,ARA,75,FR,45.86095,4.84633 41866,Foissiat,4798,ARA,75,FR,46.3715,5.17525 41876,Fontaine,4798,ARA,75,FR,45.19275,5.68821 41889,Fontaines-Saint-Martin,4798,ARA,75,FR,45.8442,4.85305 41890,Fontaines-sur-Saône,4798,ARA,75,FR,45.83572,4.8449 41891,Fontanil-Cornillon,4798,ARA,75,FR,45.2528,5.66308 41892,Fontannes,4798,ARA,75,FR,45.30149,3.76366 41944,Fraisses,4798,ARA,75,FR,45.38838,4.26373 41946,Francheleins,4798,ARA,75,FR,46.0744,4.8092 41947,Francheville,4798,ARA,75,FR,45.73637,4.76358 41950,Frangy,4798,ARA,75,FR,46.02,5.9322 41952,Frans,4798,ARA,75,FR,45.99291,4.7782 41967,Froges,4798,ARA,75,FR,45.27377,5.92098 41974,Frontenex,4798,ARA,75,FR,45.63335,6.31168 41977,Frontonas,4798,ARA,75,FR,45.64487,5.19701 42016,Gaillard,4798,ARA,75,FR,46.1853,6.20693 42030,Gannat,4798,ARA,75,FR,46.09987,3.19842 42059,Gelles,4798,ARA,75,FR,45.76947,2.76309 42061,Genas,4798,ARA,75,FR,45.73131,5.00211 42062,Genay,4798,ARA,75,FR,45.89681,4.84091 42297,Génissieux,4798,ARA,75,FR,45.08413,5.08133 42077,Gerzat,4798,ARA,75,FR,45.82581,3.14473 42083,Gex,4798,ARA,75,FR,46.33323,6.05766 42111,Gières,4798,ARA,75,FR,45.17997,5.78935 42095,Gillonnay,4798,ARA,75,FR,45.39251,5.29413 42096,Gilly-sur-Isère,4798,ARA,75,FR,45.65917,6.35096 42108,Givors,4798,ARA,75,FR,45.59063,4.76878 42113,Gleizé,4798,ARA,75,FR,45.98916,4.69708 42123,Goncelin,4798,ARA,75,FR,45.34428,5.97896 42179,Grandris,4798,ARA,75,FR,46.0378,4.47526 42182,Grane,4798,ARA,75,FR,44.73255,4.92203 42197,Grenay,4798,ARA,75,FR,45.66347,5.08031 42200,Grenoble,4798,ARA,75,FR,45.17869,5.71479 42235,Grésy-sur-Aix,4798,ARA,75,FR,45.72311,5.92522 42236,Grésy-sur-Isère,4798,ARA,75,FR,45.59898,6.25358 42237,Grézieu-la-Varenne,4798,ARA,75,FR,45.74736,4.69037 42217,Grièges,4798,ARA,75,FR,46.25619,4.84856 42208,Grignan,4798,ARA,75,FR,44.41967,4.90785 42210,Grignon,4798,ARA,75,FR,45.65122,6.37795 42211,Grigny,4798,ARA,75,FR,45.60843,4.78976 42219,Groissiat,4798,ARA,75,FR,46.22213,5.60775 42220,Groisy,4798,ARA,75,FR,46.01008,6.16983 42229,Gruffy,4798,ARA,75,FR,45.78897,6.05648 42286,Guéreins,4798,ARA,75,FR,46.10346,4.77275 42259,Guilherand-Granges,4798,ARA,75,FR,44.93278,4.87372 42343,Haute-Loire,4798,ARA,75,FR,45.11001,3.8394 42345,Haute-Rivoire,4798,ARA,75,FR,45.71559,4.39633 42346,Haute-Savoie,4798,ARA,75,FR,46.06143,6.45374 42349,Hauterive,4798,ARA,75,FR,46.08834,3.44626 42350,Hauterives,4798,ARA,75,FR,45.25565,5.01904 42352,Hauteville-Lompnes,4798,ARA,75,FR,45.97794,5.60114 42372,Herbeys,4798,ARA,75,FR,45.14012,5.79289 42393,Heyrieux,4798,ARA,75,FR,45.63186,5.06284 42405,Hières-sur-Amby,4798,ARA,75,FR,45.79654,5.29333 42436,Huez,4798,ARA,75,FR,45.0824,6.05878 42443,Huriel,4798,ARA,75,FR,46.37299,2.47679 42493,Irigny,4798,ARA,75,FR,45.67313,4.82243 42505,Issoire,4798,ARA,75,FR,45.54422,3.24901 42519,Izeaux,4798,ARA,75,FR,45.33473,5.42486 42520,Izernore,4798,ARA,75,FR,46.21352,5.552 42522,Jacob-Bellecombette,4798,ARA,75,FR,45.55763,5.91484 42525,Janneyrias,4798,ARA,75,FR,45.75221,5.11277 42531,Jardin,4798,ARA,75,FR,45.49638,4.90847 42535,Jarrie,4798,ARA,75,FR,45.11732,5.75957 42538,Jassans-Riottier,4798,ARA,75,FR,45.98134,4.7614 42539,Jasseron,4798,ARA,75,FR,46.21316,5.32579 42540,Jaujac,4798,ARA,75,FR,44.63695,4.25638 42551,Job,4798,ARA,75,FR,45.61607,3.74542 42555,Jonage,4798,ARA,75,FR,45.79638,5.04664 42561,Jons,4798,ARA,75,FR,45.80823,5.0807 42563,Jonzieux,4798,ARA,75,FR,45.31355,4.36158 42580,Joyeuse,4798,ARA,75,FR,44.47951,4.23778 42588,Jujurieux,4798,ARA,75,FR,46.04122,5.40855 42595,Jussac,4798,ARA,75,FR,44.98764,2.42308 43709,L’Étrat,4798,ARA,75,FR,45.4861,4.37586 43705,L’Isle-d’Abeau,4798,ARA,75,FR,45.6196,5.22466 42631,La Balme-de-Sillingy,4798,ARA,75,FR,45.9689,6.04187 42658,La Bâthie,4798,ARA,75,FR,45.62829,6.449 42659,La Bâtie-Montgascon,4798,ARA,75,FR,45.57745,5.52873 42661,La Bégude-de-Mazenc,4798,ARA,75,FR,44.54298,4.93403 42642,La Biolle,4798,ARA,75,FR,45.75846,5.92866 42645,La Boisse,4798,ARA,75,FR,45.84278,5.03639 42650,La Bourboule,4798,ARA,75,FR,45.58829,2.7392 42654,La Bridoire,4798,ARA,75,FR,45.52504,5.74073 42657,La Buisse,4798,ARA,75,FR,45.34644,5.61435 42676,La Chambre,4798,ARA,75,FR,45.35862,6.29978 42692,La Chapelle-de-la-Tour,4798,ARA,75,FR,45.58484,5.4636 42710,La Clusaz,4798,ARA,75,FR,45.90675,6.43445 42726,La Côte-Saint-André,4798,ARA,75,FR,45.39447,5.25908 42754,La Fouillouse,4798,ARA,75,FR,45.50462,4.31524 42762,La Garde-Adhémar,4798,ARA,75,FR,44.39699,4.75759 42771,La Grand-Croix,4798,ARA,75,FR,45.50383,4.55915 42808,La Monnerie-le-Montel,4798,ARA,75,FR,45.87106,3.6011 42817,La Motte-d’Aveillans,4798,ARA,75,FR,44.96015,5.74409 42815,La Motte-Saint-Martin,4798,ARA,75,FR,44.95131,5.71814 42816,La Motte-Servolex,4798,ARA,75,FR,45.59702,5.86724 42818,La Mulatière,4798,ARA,75,FR,45.72818,4.81213 42819,La Mure,4798,ARA,75,FR,44.90145,5.78874 42820,La Murette,4798,ARA,75,FR,45.37891,5.542 42825,La Pacaudière,4798,ARA,75,FR,46.17879,3.86252 42841,La Ravoire,4798,ARA,75,FR,45.56266,5.95826 42845,La Ricamarie,4798,ARA,75,FR,45.40536,4.36944 42850,La Roche-Blanche,4798,ARA,75,FR,45.70062,3.12629 42856,La Roche-de-Glun,4798,ARA,75,FR,45.01336,4.84488 42858,La Roche-sur-Foron,4798,ARA,75,FR,46.07111,6.3045 42862,La Rochette,4798,ARA,75,FR,45.45758,6.11356 42881,La Séauve-sur-Semène,4798,ARA,75,FR,45.29554,4.25023 42883,La Talaudière,4798,ARA,75,FR,45.47603,4.42607 42885,La Terrasse,4798,ARA,75,FR,45.32052,5.92761 42889,La Tour,4798,ARA,75,FR,46.13312,6.43109 42890,La Tour-de-Salvagny,4798,ARA,75,FR,45.81374,4.7167 42892,La Tour-du-Pin,4798,ARA,75,FR,45.566,5.44487 42893,La Tour-en-Jarez,4798,ARA,75,FR,45.48347,4.39064 42900,La Tronche,4798,ARA,75,FR,45.20507,5.74629 42908,La Verpillière,4798,ARA,75,FR,45.63417,5.1456 42918,La Voulte-sur-Rhône,4798,ARA,75,FR,44.79958,4.77925 42940,Labégude,4798,ARA,75,FR,44.64496,4.36939 42933,Lablachère,4798,ARA,75,FR,44.46355,4.21439 42946,Lachapelle-sous-Aubenas,4798,ARA,75,FR,44.56421,4.36393 42957,Lagnieu,4798,ARA,75,FR,45.90237,5.34399 42972,Laiz,4798,ARA,75,FR,46.25054,4.88955 42974,Lalevade-d’Ardèche,4798,ARA,75,FR,44.6478,4.32303 42984,Lamastre,4798,ARA,75,FR,44.98672,4.57975 42996,Lamure-sur-Azergues,4798,ARA,75,FR,46.06255,4.49195 42998,Lancrans,4798,ARA,75,FR,46.12729,5.83277 43021,Langeac,4798,ARA,75,FR,45.10028,3.4942 43039,Lanobre,4798,ARA,75,FR,45.43889,2.53443 43045,Lans-en-Vercors,4798,ARA,75,FR,45.12852,5.58599 43051,Lantriac,4798,ARA,75,FR,45.0005,4.00444 43058,Lapalisse,4798,ARA,75,FR,46.24835,3.63605 43063,Lapte,4798,ARA,75,FR,45.18593,4.21699 43066,Larajasse,4798,ARA,75,FR,45.61399,4.50113 43070,Larequille,4798,ARA,75,FR,46.25189,2.70163 43071,Largentière,4798,ARA,75,FR,44.54272,4.29342 43078,Laroquebrou,4798,ARA,75,FR,44.96855,2.19158 43080,Larringes,4798,ARA,75,FR,46.36919,6.57125 43100,Laussonne,4798,ARA,75,FR,44.9699,4.05204 43112,Lavault-Sainte-Anne,4798,ARA,75,FR,46.30999,2.60027 43117,Lavilledieu,4798,ARA,75,FR,44.57545,4.45314 43133,Le Bois-dOingt,4798,ARA,75,FR,45.91718,4.58259 43137,Le Bourg-d’Oisans,4798,ARA,75,FR,45.05483,6.03366 43139,Le Bourget-du-Lac,4798,ARA,75,FR,45.65362,5.8549 43145,Le Breuil-sur-Couze,4798,ARA,75,FR,45.4686,3.2631 43159,Le Cendre,4798,ARA,75,FR,45.7224,3.18711 43160,Le Chambon-Feugerolles,4798,ARA,75,FR,45.39145,4.32149 43161,Le Chambon-sur-Lignon,4798,ARA,75,FR,45.06097,4.30241 43163,Le Champ-près-Froges,4798,ARA,75,FR,45.28045,5.93977 43166,Le Cheylard,4798,ARA,75,FR,44.90623,4.42406 43167,Le Cheylas,4798,ARA,75,FR,45.37064,5.99277 43171,Le Coteau,4798,ARA,75,FR,46.01919,4.0923 43174,Le Crest,4798,ARA,75,FR,45.68666,3.12735 43179,Le Donjon,4798,ARA,75,FR,46.35058,3.79269 43194,Le Grand-Bornand,4798,ARA,75,FR,45.94211,6.43077 43196,Le Grand-Lemps,4798,ARA,75,FR,45.39646,5.4201 43202,Le Gua,4798,ARA,75,FR,45.01667,5.61667 43224,Le Mayet-de-Montagne,4798,ARA,75,FR,46.07091,3.66665 43235,Le Monastier-sur-Gazeille,4798,ARA,75,FR,44.93333,4.0 43288,Le Péage-de-Roussillon,4798,ARA,75,FR,45.3738,4.79727 43252,Le Perréon,4798,ARA,75,FR,46.06316,4.60045 43258,Le Pin,4798,ARA,75,FR,45.45582,5.50497 43273,Le Pont-de-Beauvoisin,4798,ARA,75,FR,45.53694,5.67333 43274,Le Pont-de-Claix,4798,ARA,75,FR,45.12321,5.69782 43282,Le Pouzin,4798,ARA,75,FR,44.75173,4.74798 43287,Le Puy-en-Velay,4798,ARA,75,FR,45.04366,3.88523 43299,Le Sappey-en-Chartreuse,4798,ARA,75,FR,45.26235,5.77476 43307,Le Teil,4798,ARA,75,FR,44.54531,4.68223 43322,Le Touvet,4798,ARA,75,FR,45.35909,5.95283 43331,Le Versoud,4798,ARA,75,FR,45.21988,5.86502 43348,Lempdes-sur-Allagnon,4798,ARA,75,FR,45.38333,3.28333 43351,Lent,4798,ARA,75,FR,46.12027,5.19352 43352,Lentigny,4798,ARA,75,FR,45.99391,3.97918 43353,Lentilly,4798,ARA,75,FR,45.81873,4.66304 43355,Les Abrets,4798,ARA,75,FR,45.54466,5.58021 43359,Les Allues,4798,ARA,75,FR,45.43255,6.55558 43361,Les Ancizes,4798,ARA,75,FR,45.92524,2.81265 43369,Les Avenières,4798,ARA,75,FR,45.63632,5.56144 43377,Les Chères,4798,ARA,75,FR,45.8896,4.74261 43380,Les Contamines-Montjoie,4798,ARA,75,FR,45.82164,6.72865 43382,Les Côtes-dArey,4798,ARA,75,FR,45.4564,4.8666 43383,Les Deux Alpes,4798,ARA,75,FR,45.0116,6.12548 43434,Les Échelles,4798,ARA,75,FR,45.44058,5.74866 43390,Les Gets,4798,ARA,75,FR,46.15522,6.66492 43396,Les Houches,4798,ARA,75,FR,45.89267,6.80637 43405,Les Marches,4798,ARA,75,FR,45.50042,6.00381 43406,Les Martres-dArtière,4798,ARA,75,FR,45.83333,3.26667 43424,Les Roches-de-Condrieu,4798,ARA,75,FR,45.45281,4.76718 43433,Les Vans,4798,ARA,75,FR,44.40522,4.13198 43458,Leyment,4798,ARA,75,FR,45.9239,5.29241 43700,Lézigneux,4798,ARA,75,FR,45.56589,4.06542 43461,Lezoux,4798,ARA,75,FR,45.82689,3.37924 43467,Liergues,4798,ARA,75,FR,45.97138,4.66231 43488,Limas,4798,ARA,75,FR,45.97558,4.7055 43494,Limonest,4798,ARA,75,FR,45.83702,4.77188 43511,Lissieu,4798,ARA,75,FR,45.86487,4.74221 43517,Livet-et-Gavet,4798,ARA,75,FR,45.10782,5.93333 43519,Livron-sur-Drôme,4798,ARA,75,FR,44.77689,4.8418 43541,Loire-sur-Rhône,4798,ARA,75,FR,45.55,4.8 43544,Loisin,4798,ARA,75,FR,46.29227,6.3101 43584,Lorette,4798,ARA,75,FR,45.51105,4.58242 43589,Loriol-sur-Drôme,4798,ARA,75,FR,44.74703,4.81719 43622,Lovagny,4798,ARA,75,FR,45.90377,6.03281 43624,Loyettes,4798,ARA,75,FR,45.77663,5.20687 43625,Lozanne,4798,ARA,75,FR,45.85733,4.6807 43633,Lucenay,4798,ARA,75,FR,45.91274,4.70287 43636,Lucinges,4798,ARA,75,FR,46.19181,6.31511 43643,Lugrin,4798,ARA,75,FR,46.40208,6.65283 43646,Lumbin,4798,ARA,75,FR,45.30954,5.91505 43658,Lurcy-Lévis,4798,ARA,75,FR,46.72981,2.93829 43662,Lusigny,4798,ARA,75,FR,46.58776,3.49142 43673,Luzinay,4798,ARA,75,FR,45.58996,4.95891 43677,Lyaud,4798,ARA,75,FR,46.33972,6.52595 43678,Lyon,4798,ARA,75,FR,45.74846,4.84671 43710,Mably,4798,ARA,75,FR,46.06484,4.06014 43715,Maclas,4798,ARA,75,FR,45.36289,4.682 44452,Mâcot-la-Plagne,4798,ARA,75,FR,45.55,6.66667 43720,Magland,4798,ARA,75,FR,46.02064,6.62089 43750,Malataverne,4798,ARA,75,FR,44.48525,4.75326 43761,Malintrat,4798,ARA,75,FR,45.81509,3.18603 43762,Malissard,4798,ARA,75,FR,44.89969,4.95384 43787,Manzat,4798,ARA,75,FR,45.9616,2.9414 43788,Manziat,4798,ARA,75,FR,46.36125,4.9058 43795,Marboz,4798,ARA,75,FR,46.3429,5.25722 43797,Marcellaz-Albanais,4798,ARA,75,FR,45.87546,5.9988 43806,Marcilly-le-Châtel,4798,ARA,75,FR,45.6959,4.03082 43822,Marennes,4798,ARA,75,FR,45.62089,4.91236 43833,Margencel,4798,ARA,75,FR,46.3414,6.41416 43839,Marignier,4798,ARA,75,FR,46.09014,6.50004 43845,Marin,4798,ARA,75,FR,46.37941,6.52559 43847,Maringues,4798,ARA,75,FR,45.92164,3.33029 43852,Marlhes,4798,ARA,75,FR,45.28307,4.39616 43862,Marnaz,4798,ARA,75,FR,46.06356,6.52653 43877,Marsac-en-Livradois,4798,ARA,75,FR,45.47886,3.72783 43880,Marsanne,4798,ARA,75,FR,44.64204,4.87529 43881,Marsat,4798,ARA,75,FR,45.87645,3.08173 43910,Marthod,4798,ARA,75,FR,45.72714,6.40299 43912,Martignat,4798,ARA,75,FR,46.20972,5.61049 43933,Massiac,4798,ARA,75,FR,45.25146,3.19735 43934,Massieux,4798,ARA,75,FR,45.90984,4.83265 43935,Massongy,4798,ARA,75,FR,46.31807,6.33148 43944,Maubec,4798,ARA,75,FR,45.56739,5.26371 43956,Mauriac,4798,ARA,75,FR,45.21899,2.33353 43958,Maurs,4798,ARA,75,FR,44.71065,2.19797 43960,Mauves,4798,ARA,75,FR,45.03833,4.82934 43966,Maxilly-sur-Léman,4798,ARA,75,FR,46.39828,6.63113 43974,Mazet-Saint-Voy,4798,ARA,75,FR,45.04696,4.24414 44454,Méaudre,4798,ARA,75,FR,45.1302,5.52853 43984,Megève,4798,ARA,75,FR,45.85687,6.61775 43989,Meillonnas,4798,ARA,75,FR,46.24367,5.35019 44467,Ménétrol,4798,ARA,75,FR,45.87155,3.12422 44004,Mens,4798,ARA,75,FR,44.81557,5.75146 44006,Menthon-Saint-Bernard,4798,ARA,75,FR,45.85995,6.19552 44011,Mercurol-Veaunes,4798,ARA,75,FR,45.07437,4.89279 44012,Mercury,4798,ARA,75,FR,45.67452,6.33688 44470,Méribel,4798,ARA,75,FR,45.41497,6.565 44477,Méry,4798,ARA,75,FR,45.64139,5.9355 44035,Messeix,4798,ARA,75,FR,45.61702,2.54157 44036,Messery,4798,ARA,75,FR,46.35036,6.29099 44038,Messimy,4798,ARA,75,FR,45.69816,4.67429 44040,Metz,4798,ARA,75,FR,45.93343,6.10973 44053,Meximieux,4798,ARA,75,FR,45.90823,5.1992 44056,Meylan,4798,ARA,75,FR,45.20978,5.77762 44063,Meysse,4798,ARA,75,FR,44.61028,4.72306 44064,Meythet,4798,ARA,75,FR,45.91836,6.09422 44065,Meyzieu,4798,ARA,75,FR,45.76637,5.00277 44066,Mezel,4798,ARA,75,FR,45.75508,3.24225 44492,Mézériat,4798,ARA,75,FR,46.23701,5.04615 44067,Mieussy,4798,ARA,75,FR,46.13369,6.52416 44075,Millery,4798,ARA,75,FR,45.63232,4.78207 44083,Mionnay,4798,ARA,75,FR,45.89824,4.92808 44084,Mions,4798,ARA,75,FR,45.66302,4.95292 44086,Mirabel-aux-Baronnies,4798,ARA,75,FR,44.31002,5.09962 44095,Mirefleurs,4798,ARA,75,FR,45.69319,3.2237 44100,Miribel,4798,ARA,75,FR,45.8258,4.9544 44101,Miribel-les-Échelles,4798,ARA,75,FR,45.43155,5.7081 44105,Misérieux,4798,ARA,75,FR,45.97433,4.8134 44109,Modane,4798,ARA,75,FR,45.20032,6.66871 44111,Moidieu,4798,ARA,75,FR,45.5168,5.00749 44113,Moirans,4798,ARA,75,FR,45.3314,5.55432 44122,Molinet,4798,ARA,75,FR,46.46576,3.93589 44143,Monistrol-sur-Loire,4798,ARA,75,FR,45.29263,4.17233 44145,Monnetier-Mornex,4798,ARA,75,FR,46.1603,6.20667 44160,Mont-de-Lans,4798,ARA,75,FR,45.03626,6.13141 44155,Mont-Dore,4798,ARA,75,FR,45.57641,2.80889 44159,Mont-Saxonnex,4798,ARA,75,FR,46.0508,6.47429 44166,Montagnat,4798,ARA,75,FR,46.16761,5.28791 44168,Montagny,4798,ARA,75,FR,45.62801,4.74778 44171,Montaigut,4798,ARA,75,FR,45.61499,3.44896 44173,Montalieu,4798,ARA,75,FR,45.81245,5.40221 44175,Montanay,4798,ARA,75,FR,45.87908,4.86308 44199,Montbonnot-Saint-Martin,4798,ARA,75,FR,45.22537,5.8017 44200,Montboucher-sur-Jabron,4798,ARA,75,FR,44.5505,4.802 44201,Montbrison,4798,ARA,75,FR,45.60752,4.06525 44334,Montéléger,4798,ARA,75,FR,44.85296,4.93598 44332,Montélier,4798,ARA,75,FR,44.93441,5.03126 44333,Montélimar,4798,ARA,75,FR,44.55468,4.75469 44233,Montfaucon-en-Velay,4798,ARA,75,FR,45.18561,4.31376 44237,Montferrat,4798,ARA,75,FR,45.48481,5.5902 44277,Montluçon,4798,ARA,75,FR,46.34015,2.60254 44276,Montluel,4798,ARA,75,FR,45.8519,5.0578 44281,Montmarault,4798,ARA,75,FR,46.31738,2.95472 44291,Montmélian,4798,ARA,75,FR,45.50509,6.05634 44283,Montmerle-sur-Saône,4798,ARA,75,FR,46.08333,4.76667 44284,Montmeyran,4798,ARA,75,FR,44.83389,4.97181 44295,Montoison,4798,ARA,75,FR,44.79608,4.94118 44325,Montréal-la-Cluse,4798,ARA,75,FR,46.18333,5.58333 44316,Montrevel-en-Bresse,4798,ARA,75,FR,46.33527,5.12269 44320,Montrond-les-Bains,4798,ARA,75,FR,45.64374,4.23752 44321,Montrottier,4798,ARA,75,FR,45.7901,4.4666 44329,Montségur-sur-Lauzon,4798,ARA,75,FR,44.36098,4.85468 44340,Morancé,4798,ARA,75,FR,45.89815,4.70051 44348,Morestel,4798,ARA,75,FR,45.679,5.46479 44361,Mornant,4798,ARA,75,FR,45.61885,4.67231 44377,Morzine,4798,ARA,75,FR,46.18149,6.70664 44394,Moulins,4798,ARA,75,FR,46.56459,3.33243 44405,Mours-Saint-Eusèbe,4798,ARA,75,FR,45.06513,5.05776 44428,Moûtiers,4798,ARA,75,FR,45.48459,6.53146 44415,Mouxy,4798,ARA,75,FR,45.68399,5.93538 44421,Moye,4798,ARA,75,FR,45.87566,5.91289 44425,Mozac,4798,ARA,75,FR,45.89393,3.09512 44439,Murat,4798,ARA,75,FR,45.11011,2.86859 44512,Nantua,4798,ARA,75,FR,46.15343,5.60601 44519,Naucelles,4798,ARA,75,FR,44.95898,2.41884 44695,Néris-les-Bains,4798,ARA,75,FR,46.28688,2.65869 44549,Neuilly-le-Réal,4798,ARA,75,FR,46.46413,3.43197 44555,Neulise,4798,ARA,75,FR,45.89811,4.18134 44558,Neussargues,4798,ARA,75,FR,45.12826,2.97627 44559,Neuvecelle,4798,ARA,75,FR,46.39502,6.61257 44581,Neuvéglise,4798,ARA,75,FR,44.92809,2.98328 44568,Neuville-les-Dames,4798,ARA,75,FR,46.1623,5.00667 44569,Neuville-sur-Ain,4798,ARA,75,FR,46.07144,5.37491 44573,Neuville-sur-Saône,4798,ARA,75,FR,45.87615,4.84099 44574,Neuvy,4798,ARA,75,FR,46.56191,3.29038 44586,Neydens,4798,ARA,75,FR,46.12162,6.10436 44605,Niévroz,4798,ARA,75,FR,45.82576,5.06108 44604,Nivolas-Vermelle,4798,ARA,75,FR,45.55885,5.30578 44620,Nohanent,4798,ARA,75,FR,45.80815,3.05507 44625,Noirétable,4798,ARA,75,FR,45.81671,3.76247 44653,Notre-Dame-de-Mésage,4798,ARA,75,FR,45.06241,5.7588 44665,Novalaise,4798,ARA,75,FR,45.5948,5.77767 44674,Noyarey,4798,ARA,75,FR,45.24421,5.63366 44690,Nyons,4798,ARA,75,FR,44.36082,5.14052 44756,Orcet,4798,ARA,75,FR,45.70355,3.16884 44760,Orcines,4798,ARA,75,FR,45.78246,3.01234 44775,Orléat,4798,ARA,75,FR,45.86059,3.42083 44772,Orliénas,4798,ARA,75,FR,45.65886,4.71832 44781,Ornex,4798,ARA,75,FR,46.2727,6.09982 44801,Ouches,4798,ARA,75,FR,46.01582,3.98828 44807,Oullins,4798,ARA,75,FR,45.71404,4.80755 44819,Oyonnax,4798,ARA,75,FR,46.25917,5.65727 44820,Oytier-Saint-Oblas,4798,ARA,75,FR,45.55757,5.03083 44842,Panissières,4798,ARA,75,FR,45.79185,4.34163 44863,Paslières,4798,ARA,75,FR,45.92889,3.49736 44865,Passy,4798,ARA,75,FR,45.92341,6.69562 44870,Paulhaguet,4798,ARA,75,FR,45.20795,3.51331 44878,Peaugres,4798,ARA,75,FR,45.28651,4.72845 44884,Peillonnex,4798,ARA,75,FR,46.12861,6.37715 45347,Pélussin,4798,ARA,75,FR,45.41951,4.68365 45354,Pérignat-lès-Sarliève,4798,ARA,75,FR,45.73657,3.1396 45355,Pérignat-sur-Allier,4798,ARA,75,FR,45.72843,3.23184 45356,Périgneux,4798,ARA,75,FR,45.44077,4.15569 45361,Péron,4798,ARA,75,FR,46.19053,5.92524 45362,Péronnas,4798,ARA,75,FR,46.18338,5.21052 45364,Pérouges,4798,ARA,75,FR,45.9044,5.17695 44901,Perreux,4798,ARA,75,FR,46.04004,4.12663 44903,Perrignier,4798,ARA,75,FR,46.30558,6.43928 44908,Pers-Jussy,4798,ARA,75,FR,46.10594,6.26955 44912,Peschadoires,4798,ARA,75,FR,45.82622,3.49255 44933,Peyrins,4798,ARA,75,FR,45.09331,5.04513 44950,Pierre-Bénite,4798,ARA,75,FR,45.70359,4.82424 44951,Pierre-Châtel,4798,ARA,75,FR,44.95735,5.77454 44958,Pierrefort,4798,ARA,75,FR,44.92175,2.83811 44959,Pierrelatte,4798,ARA,75,FR,44.37549,4.70314 44975,Pionsat,4798,ARA,75,FR,46.10963,2.69319 45004,Plauzat,4798,ARA,75,FR,45.62157,3.14896 45005,Pleaux,4798,ARA,75,FR,45.13479,2.22652 45135,Poisat,4798,ARA,75,FR,45.15852,5.76051 45137,Poisy,4798,ARA,75,FR,45.92142,6.06356 45141,Polignac,4798,ARA,75,FR,45.0709,3.86031 45144,Polliat,4798,ARA,75,FR,46.24849,5.12658 45145,Pollionnay,4798,ARA,75,FR,45.76459,4.66112 45146,Polminhac,4798,ARA,75,FR,44.95177,2.57751 45152,Pommiers,4798,ARA,75,FR,45.9554,4.69251 45161,Poncin,4798,ARA,75,FR,46.08531,5.4112 45187,Pont-d’Ain,4798,ARA,75,FR,46.05583,5.33974 45178,Pont-de-Chéruy,4798,ARA,75,FR,45.75344,5.17245 45183,Pont-de-Vaux,4798,ARA,75,FR,46.43326,4.94473 45184,Pont-de-Veyle,4798,ARA,75,FR,46.26166,4.88612 45186,Pont-du-Château,4798,ARA,75,FR,45.7983,3.24839 45188,Pont-en-Royans,4798,ARA,75,FR,45.0625,5.34094 45195,Pont-Évêque,4798,ARA,75,FR,45.53217,4.90922 45175,Pont-Salomon,4798,ARA,75,FR,45.33777,4.24781 45204,Pontcharra,4798,ARA,75,FR,45.43588,6.01782 45205,Pontcharra-sur-Turdine,4798,ARA,75,FR,45.87413,4.48989 45221,Porcieu,4798,ARA,75,FR,45.83416,5.40168 45240,Portes-lès-Valence,4798,ARA,75,FR,44.87585,4.87415 45255,Pouilly-lès-Feurs,4798,ARA,75,FR,45.7976,4.23289 45254,Pouilly-les-Nonains,4798,ARA,75,FR,46.04508,3.98247 45256,Pouilly-sous-Charlieu,4798,ARA,75,FR,46.14551,4.11287 45275,Pragoulin,4798,ARA,75,FR,46.05425,3.39346 45280,Praz-sur-Arly,4798,ARA,75,FR,45.83731,6.57259 45305,Précieux,4798,ARA,75,FR,45.58702,4.15152 45311,Prémilhat,4798,ARA,75,FR,46.31341,2.53559 45285,Priay,4798,ARA,75,FR,46.00183,5.28684 45287,Pringy,4798,ARA,75,FR,45.94622,6.12608 45291,Privas,4798,ARA,75,FR,44.735,4.59918 45313,Publier,4798,ARA,75,FR,46.38773,6.54356 45331,Pusignan,4798,ARA,75,FR,45.75558,5.06722 45335,Puy-Guillaume,4798,ARA,75,FR,45.96036,3.47405 45394,Quincié-en-Beaujolais,4798,ARA,75,FR,46.11898,4.61635 45393,Quincieux,4798,ARA,75,FR,45.91374,4.77698 45399,Quinssaines,4798,ARA,75,FR,46.32721,2.5104 45400,Quintenas,4798,ARA,75,FR,45.18892,4.68743 45427,Randan,4798,ARA,75,FR,46.01767,3.35478 45687,Régny,4798,ARA,75,FR,45.99087,4.21655 45448,Reignier-Ésery,4798,ARA,75,FR,46.13333,6.26667 45456,Renage,4798,ARA,75,FR,45.33346,5.48881 45457,Renaison,4798,ARA,75,FR,46.04955,3.9244 45462,Replonges,4798,ARA,75,FR,46.30098,4.88317 45470,Retournac,4798,ARA,75,FR,45.2039,4.0333 45474,Revel,4798,ARA,75,FR,45.18618,5.87208 45476,Reventin-Vaugris,4798,ARA,75,FR,45.46638,4.84244 45481,Reyrieux,4798,ARA,75,FR,45.93577,4.81453 45512,Rillieux-la-Pape,4798,ARA,75,FR,45.81667,4.9 45516,Riom,4798,ARA,75,FR,45.89362,3.11264 45517,Riom-ès-Montagnes,4798,ARA,75,FR,45.28206,2.65973 45520,Riorges,4798,ARA,75,FR,46.04378,4.04255 45521,Riotord,4798,ARA,75,FR,45.23159,4.40208 45526,Rive-de-Gier,4798,ARA,75,FR,45.52755,4.61589 45529,Rives,4798,ARA,75,FR,45.35326,5.50084 45535,Roanne,4798,ARA,75,FR,46.03624,4.06802 45539,Roche,4798,ARA,75,FR,45.58723,5.16223 45540,Roche-la-Molière,4798,ARA,75,FR,45.43088,4.3282 45547,Rochegude,4798,ARA,75,FR,44.24414,4.82719 45548,Rochemaure,4798,ARA,75,FR,44.58747,4.70391 45551,Rochetaillée-sur-Saône,4798,ARA,75,FR,45.85,4.85 45563,Roiffieux,4798,ARA,75,FR,45.22655,4.65441 45569,Romagnat,4798,ARA,75,FR,45.72955,3.10061 45570,Romagnieu,4798,ARA,75,FR,45.57061,5.64096 45574,Romans-sur-Isère,4798,ARA,75,FR,45.0496,5.06602 45602,Rosières,4798,ARA,75,FR,45.13287,3.98826 45639,Roussillon,4798,ARA,75,FR,45.37388,4.81496 45646,Royat,4798,ARA,75,FR,45.76497,3.05013 45647,Roybon,4798,ARA,75,FR,45.25851,5.24502 45653,Rozier-en-Donzy,4798,ARA,75,FR,45.80069,4.27736 45672,Rumilly,4798,ARA,75,FR,45.86116,5.94513 45676,Ruoms,4798,ARA,75,FR,44.45294,4.34202 45681,Ruy,4798,ARA,75,FR,45.5864,5.32143 45702,Sablons,4798,ARA,75,FR,45.32104,4.77449 45716,Sail-sous-Couzan,4798,ARA,75,FR,45.73482,3.96898 45721,Sain-Bel,4798,ARA,75,FR,45.81017,4.59797 45731,Saint-Agrève,4798,ARA,75,FR,45.01003,4.39612 45737,Saint-Alban-de-Roche,4798,ARA,75,FR,45.5949,5.2263 45736,Saint-Alban-Leysse,4798,ARA,75,FR,45.58333,5.95 45748,Saint-Amant-Tallende,4798,ARA,75,FR,45.669,3.10788 45769,Saint-Andéol-le-Château,4798,ARA,75,FR,45.58597,4.69504 45757,Saint-André-de-Corcy,4798,ARA,75,FR,45.9259,4.95166 45763,Saint-André-le-Gaz,4798,ARA,75,FR,45.54546,5.52886 45764,Saint-André-le-Puy,4798,ARA,75,FR,45.64763,4.25887 45768,Saint-André-sur-Vieux-Jonc,4798,ARA,75,FR,46.15855,5.14776 45773,Saint-Antoine-lAbbaye,4798,ARA,75,FR,45.16667,5.21667 45796,Saint-Aupre,4798,ARA,75,FR,45.40296,5.66682 45801,Saint-Baldoph,4798,ARA,75,FR,45.5312,5.95217 45804,Saint-Barthélemy-de-Vals,4798,ARA,75,FR,45.16938,4.8716 45808,Saint-Beauzire,4798,ARA,75,FR,45.84964,3.17947 45835,Saint-Béron,4798,ARA,75,FR,45.50308,5.7279 45815,Saint-Bon-Tarentaise,4798,ARA,75,FR,45.43373,6.63686 45816,Saint-Bonnet-de-Mure,4798,ARA,75,FR,45.69042,5.02912 45818,Saint-Bonnet-le-Château,4798,ARA,75,FR,45.42402,4.06706 45819,Saint-Bonnet-les-Oules,4798,ARA,75,FR,45.54946,4.32522 45820,Saint-Bonnet-près-Riom,4798,ARA,75,FR,45.92972,3.1131 45841,Saint-Cassien,4798,ARA,75,FR,45.3571,5.54793 45843,Saint-Cergues,4798,ARA,75,FR,46.23005,6.31924 45844,Saint-Cernin,4798,ARA,75,FR,45.0585,2.42081 45847,Saint-Chamond,4798,ARA,75,FR,45.4759,4.51294 45850,Saint-Chef,4798,ARA,75,FR,45.63585,5.36465 45852,Saint-Christo-en-Jarez,4798,ARA,75,FR,45.54508,4.48826 45863,Saint-Clair-de-la-Tour,4798,ARA,75,FR,45.57345,5.47741 45864,Saint-Clair-du-Rhône,4798,ARA,75,FR,45.44186,4.77123 45879,Saint-Cyprien,4798,ARA,75,FR,45.5345,4.23428 45882,Saint-Cyr,4798,ARA,75,FR,45.25183,4.73045 45891,Saint-Cyr-sur-le-Rhône,4798,ARA,75,FR,45.51585,4.8525 45888,Saint-Cyr-sur-Menthon,4798,ARA,75,FR,46.27502,4.97246 45895,Saint-Denis-de-Cabanne,4798,ARA,75,FR,46.17249,4.21447 45899,Saint-Denis-en-Bugey,4798,ARA,75,FR,45.94963,5.32773 45903,Saint-Denis-lès-Bourg,4798,ARA,75,FR,46.20217,5.18924 45907,Saint-Didier-de-Formans,4798,ARA,75,FR,45.95969,4.78406 45908,Saint-Didier-de-la-Tour,4798,ARA,75,FR,45.55755,5.48026 45909,Saint-Didier-en-Velay,4798,ARA,75,FR,45.30265,4.27514 45910,Saint-Didier-sous-Riverie,4798,ARA,75,FR,45.59627,4.6065 45911,Saint-Didier-sur-Chalaronne,4798,ARA,75,FR,46.17714,4.81626 46635,Saint-Égrève,4798,ARA,75,FR,45.23313,5.68154 46638,Saint-Éloy-les-Mines,4798,ARA,75,FR,46.16051,2.83379 46641,Saint-Étienne,4798,ARA,75,FR,45.43389,4.39 46645,Saint-Étienne-de-Crossey,4798,ARA,75,FR,45.38027,5.64365 45925,Saint-Etienne-de-Cuines,4798,ARA,75,FR,45.35,6.28333 46646,Saint-Étienne-de-Fontbellon,4798,ARA,75,FR,44.60077,4.38635 46649,Saint-Étienne-de-Saint-Geoirs,4798,ARA,75,FR,45.33909,5.3465 46651,Saint-Étienne-des-Oullières,4798,ARA,75,FR,46.06731,4.64945 46653,Saint-Étienne-du-Bois,4798,ARA,75,FR,46.2899,5.29471 46658,Saint-Étienne-sur-Chalaronne,4798,ARA,75,FR,46.14778,4.87129 45945,Saint-Félicien,4798,ARA,75,FR,45.086,4.62738 45947,Saint-Félix,4798,ARA,75,FR,45.80269,5.97714 45938,Saint-Flour,4798,ARA,75,FR,45.03374,3.09297 45940,Saint-Fons,4798,ARA,75,FR,45.70875,4.85325 45941,Saint-Forgeux,4798,ARA,75,FR,45.85895,4.4748 45943,Saint-François,4798,ARA,75,FR,46.41537,3.90542 45949,Saint-Galmier,4798,ARA,75,FR,45.59787,4.31086 45969,Saint-Genès-Champanelle,4798,ARA,75,FR,45.72037,3.01883 45955,Saint-Genest-Lerpt,4798,ARA,75,FR,45.44347,4.33968 45956,Saint-Genest-Malifaux,4798,ARA,75,FR,45.34064,4.41652 45959,Saint-Genis-Laval,4798,ARA,75,FR,45.69542,4.79316 45962,Saint-Genis-les-Ollières,4798,ARA,75,FR,45.7571,4.72625 45960,Saint-Genis-Pouilly,4798,ARA,75,FR,46.24356,6.02119 45963,Saint-Genix-sur-Guiers,4798,ARA,75,FR,45.59864,5.63559 45970,Saint-Geoire-en-Valdaine,4798,ARA,75,FR,45.45668,5.63515 45973,Saint-Georges-de-Commiers,4798,ARA,75,FR,45.04546,5.70628 45976,Saint-Georges-de-Mons,4798,ARA,75,FR,45.93941,2.83866 45980,Saint-Georges-de-Reneins,4798,ARA,75,FR,46.06185,4.72169 45972,Saint-Georges-Haute-Ville,4798,ARA,75,FR,45.55701,4.09801 45985,Saint-Georges-les-Bains,4798,ARA,75,FR,44.861,4.80924 45987,Saint-Georges-sur-Allier,4798,ARA,75,FR,45.71015,3.24261 46045,Saint-Gérand-le-Puy,4798,ARA,75,FR,46.2579,3.5121 46006,Saint-Germain-des-Fossés,4798,ARA,75,FR,46.20682,3.43374 45995,Saint-Germain-Laprade,4798,ARA,75,FR,45.03862,3.97004 45997,Saint-Germain-Laval,4798,ARA,75,FR,45.83249,4.01444 45998,Saint-Germain-Lembron,4798,ARA,75,FR,45.45793,3.23973 45999,Saint-Germain-Lespinasse,4798,ARA,75,FR,46.10342,3.96503 46000,Saint-Germain-Nuelles,4798,ARA,75,FR,45.85242,4.61182 46026,Saint-Gervais-d’Auvergne,4798,ARA,75,FR,46.02916,2.81901 46029,Saint-Gervais-les-Bains,4798,ARA,75,FR,45.89126,6.71678 46072,Saint-Héand,4798,ARA,75,FR,45.5274,4.37077 46050,Saint-Hilaire,4798,ARA,75,FR,45.3,5.88333 46061,Saint-Hilaire-de-la-Côte,4798,ARA,75,FR,45.39162,5.3159 46064,Saint-Hilaire-du-Rosier,4798,ARA,75,FR,45.09942,5.24946 46074,Saint-Ismier,4798,ARA,75,FR,45.25227,5.83073 46083,Saint-Jean-Bonnefonds,4798,ARA,75,FR,45.45609,4.44223 46112,Saint-Jean-d’Aulps,4798,ARA,75,FR,46.23438,6.65327 46088,Saint-Jean-de-Bournay,4798,ARA,75,FR,45.50093,5.13818 46091,Saint-Jean-de-Gonville,4798,ARA,75,FR,46.21298,5.95047 46095,Saint-Jean-de-Maurienne,4798,ARA,75,FR,45.27534,6.35293 46096,Saint-Jean-de-Moirans,4798,ARA,75,FR,45.34506,5.58536 46098,Saint-Jean-de-Muzols,4798,ARA,75,FR,45.08179,4.81396 46099,Saint-Jean-de-Niost,4798,ARA,75,FR,45.83333,5.21667 46101,Saint-Jean-de-Sixt,4798,ARA,75,FR,45.92312,6.4118 46102,Saint-Jean-de-Soudain,4798,ARA,75,FR,45.5677,5.4288 46114,Saint-Jean-en-Royans,4798,ARA,75,FR,45.01968,5.29223 46117,Saint-Jean-le-Vieux,4798,ARA,75,FR,46.03005,5.38798 46121,Saint-Jean-sur-Veyle,4798,ARA,75,FR,46.25902,4.91712 46123,Saint-Jeoire,4798,ARA,75,FR,46.13733,6.46172 46125,Saint-Jorioz,4798,ARA,75,FR,45.83074,6.15792 46127,Saint-Joseph,4798,ARA,75,FR,45.55757,4.62076 46129,Saint-Joseph-de-Rivière,4798,ARA,75,FR,45.37572,5.69643 46137,Saint-Julien-Chapteuil,4798,ARA,75,FR,45.03486,4.0611 46144,Saint-Julien-en-Genevois,4798,ARA,75,FR,46.14434,6.08256 46145,Saint-Julien-en-Saint-Alban,4798,ARA,75,FR,44.75417,4.69678 46138,Saint-Julien-Molin-Molette,4798,ARA,75,FR,45.32148,4.61692 46154,Saint-Just-Chaleyssin,4798,ARA,75,FR,45.59421,4.99852 46159,Saint-Just-dArdèche,4798,ARA,75,FR,44.3,4.61667 46160,Saint-Just-de-Claix,4798,ARA,75,FR,45.07562,5.28309 46162,Saint-Just-en-Chevalet,4798,ARA,75,FR,45.91477,3.84234 46163,Saint-Just-la-Pendue,4798,ARA,75,FR,45.89423,4.24129 46156,Saint-Just-Malmont,4798,ARA,75,FR,45.33932,4.31275 46157,Saint-Just-Saint-Rambert,4798,ARA,75,FR,45.49973,4.24141 46171,Saint-Lattier,4798,ARA,75,FR,45.08815,5.20352 46176,Saint-Laurent-de-Chamousset,4798,ARA,75,FR,45.73827,4.46415 46177,Saint-Laurent-de-Mure,4798,ARA,75,FR,45.68563,5.04484 46183,Saint-Laurent-du-Pape,4798,ARA,75,FR,44.82328,4.76679 46184,Saint-Laurent-du-Pont,4798,ARA,75,FR,45.3924,5.73312 46187,Saint-Laurent-en-Royans,4798,ARA,75,FR,45.02653,5.32669 46189,Saint-Laurent-sur-Saône,4798,ARA,75,FR,46.30532,4.84119 46219,Saint-Léger-sur-Roanne,4798,ARA,75,FR,46.04174,3.99644 46233,Saint-Mamet-la-Salvetat,4798,ARA,75,FR,44.85813,2.30688 46245,Saint-Marcel-dArdèche,4798,ARA,75,FR,44.32726,4.61769 46246,Saint-Marcel-lès-Annonay,4798,ARA,75,FR,45.28613,4.62616 46247,Saint-Marcel-lès-Sauzet,4798,ARA,75,FR,44.59752,4.80541 46248,Saint-Marcel-lès-Valence,4798,ARA,75,FR,44.97132,4.95316 46250,Saint-Marcellin,4798,ARA,75,FR,45.14914,5.31673 46251,Saint-Marcellin-en-Forez,4798,ARA,75,FR,45.49676,4.17233 46260,Saint-Martin-Bellevue,4798,ARA,75,FR,45.96262,6.15763 46295,Saint-Martin-d’Hères,4798,ARA,75,FR,45.1787,5.76281 46268,Saint-Martin-de-Belleville,4798,ARA,75,FR,45.38175,6.50519 46279,Saint-Martin-de-Valamas,4798,ARA,75,FR,44.93718,4.36865 46287,Saint-Martin-du-Frêne,4798,ARA,75,FR,46.13591,5.55049 46289,Saint-Martin-du-Mont,4798,ARA,75,FR,46.098,5.31706 46298,Saint-Martin-en-Haut,4798,ARA,75,FR,45.65984,4.5618 46299,Saint-Martin-la-Plaine,4798,ARA,75,FR,45.54635,4.59749 46301,Saint-Martin-le-Vinoux,4798,ARA,75,FR,45.20297,5.7163 46313,Saint-Maurice-de-Beynost,4798,ARA,75,FR,45.8344,4.9775 46314,Saint-Maurice-de-Gourdans,4798,ARA,75,FR,45.82248,5.1945 46315,Saint-Maurice-de-Lignon,4798,ARA,75,FR,45.2243,4.1388 46316,Saint-Maurice-en-Gourgois,4798,ARA,75,FR,45.40127,4.18253 46319,Saint-Maurice-sur-Dargoire,4798,ARA,75,FR,45.58224,4.6312 46337,Saint-Michel-de-Maurienne,4798,ARA,75,FR,45.22011,6.46868 46361,Saint-Nazaire-les-Eymes,4798,ARA,75,FR,45.24921,5.85254 46370,Saint-Nizier-sous-Charlieu,4798,ARA,75,FR,46.1529,4.12399 46384,Saint-Ours,4798,ARA,75,FR,45.85024,2.89163 46388,Saint-Pal-de-Mons,4798,ARA,75,FR,45.24634,4.27416 46402,Saint-Paul,4798,ARA,75,FR,45.3984,4.22617 46408,Saint-Paul-de-Varax,4798,ARA,75,FR,46.09692,5.12959 46409,Saint-Paul-de-Varces,4798,ARA,75,FR,45.07175,5.64247 46411,Saint-Paul-des-Landes,4798,ARA,75,FR,44.94356,2.31439 46412,Saint-Paul-en-Chablais,4798,ARA,75,FR,46.37958,6.62483 46414,Saint-Paul-en-Jarez,4798,ARA,75,FR,45.48512,4.57113 46417,Saint-Paul-lès-Romans,4798,ARA,75,FR,45.06725,5.13213 46405,Saint-Paul-Trois-Châteaux,4798,ARA,75,FR,44.34594,4.76356 46419,Saint-Paulien,4798,ARA,75,FR,45.13629,3.8129 46482,Saint-Péray,4798,ARA,75,FR,44.94866,4.8451 46431,Saint-Pierre-de-Bœuf,4798,ARA,75,FR,45.36667,4.75 46432,Saint-Pierre-de-Chandieu,4798,ARA,75,FR,45.64625,5.01481 46448,Saint-Pierre-la-Palud,4798,ARA,75,FR,45.79092,4.61177 46462,Saint-Pourçain-sur-Sioule,4798,ARA,75,FR,46.30748,3.28931 46464,Saint-Priest,4798,ARA,75,FR,45.69651,4.94385 46466,Saint-Priest-en-Jarez,4798,ARA,75,FR,45.4739,4.37678 46468,Saint-Privat,4798,ARA,75,FR,44.62859,4.41489 46486,Saint-Quentin-Fallavier,4798,ARA,75,FR,45.64335,5.11266 46491,Saint-Quentin-sur-Isère,4798,ARA,75,FR,45.27843,5.54463 46493,Saint-Rambert-en-Bugey,4798,ARA,75,FR,45.94734,5.4363 46510,Saint-Rémy-de-Maurienne,4798,ARA,75,FR,45.4,6.26667 46513,Saint-Rémy-en-Rollat,4798,ARA,75,FR,46.1833,3.39106 46516,Saint-Rémy-sur-Durolle,4798,ARA,75,FR,45.88815,3.59257 46496,Saint-Restitut,4798,ARA,75,FR,44.32446,4.79282 46501,Saint-Romain-de-Jalionas,4798,ARA,75,FR,45.75677,5.21741 46502,Saint-Romain-de-Popey,4798,ARA,75,FR,45.84725,4.53118 46503,Saint-Romain-en-Gal,4798,ARA,75,FR,45.53255,4.8619 46504,Saint-Romain-la-Motte,4798,ARA,75,FR,46.0815,3.99076 46505,Saint-Romain-le-Puy,4798,ARA,75,FR,45.55837,4.12296 46507,Saint-Romans,4798,ARA,75,FR,45.11278,5.32239 46521,Saint-Saturnin,4798,ARA,75,FR,45.65956,3.09232 46527,Saint-Sauves-dAuvergne,4798,ARA,75,FR,45.6,2.68333 46529,Saint-Sauveur,4798,ARA,75,FR,45.15335,5.3528 46534,Saint-Sauveur-de-Montagut,4798,ARA,75,FR,44.82142,4.57993 46537,Saint-Sauveur-en-Rue,4798,ARA,75,FR,45.26981,4.49512 46540,Saint-Savin,4798,ARA,75,FR,45.62776,5.30856 46548,Saint-Sernin,4798,ARA,75,FR,44.57147,4.39186 46554,Saint-Siméon-de-Bressieux,4798,ARA,75,FR,45.3385,5.26591 46553,Saint-Simon,4798,ARA,75,FR,44.9632,2.48994 46555,Saint-Sorlin-en-Bugey,4798,ARA,75,FR,45.88576,5.36688 46556,Saint-Sorlin-en-Valloire,4798,ARA,75,FR,45.28774,4.94903 46575,Saint-Symphorien-de-Lay,4798,ARA,75,FR,45.94772,4.21318 46576,Saint-Symphorien-sur-Coise,4798,ARA,75,FR,45.6322,4.45709 46585,Saint-Trivier-de-Courtes,4798,ARA,75,FR,46.4598,5.07762 46586,Saint-Trivier-sur-Moignans,4798,ARA,75,FR,46.07233,4.89721 46594,Saint-Uze,4798,ARA,75,FR,45.18409,4.86 46599,Saint-Vallier,4798,ARA,75,FR,45.17154,4.81758 46624,Saint-Vérand,4798,ARA,75,FR,45.17344,5.33261 46607,Saint-Victor,4798,ARA,75,FR,46.39506,2.60819 46608,Saint-Victor-de-Cessieu,4798,ARA,75,FR,45.54113,5.39098 46613,Saint-Vincent-de-Mercuze,4798,ARA,75,FR,45.37215,5.95424 46629,Saint-Yorre,4798,ARA,75,FR,46.06598,3.4643 46669,Sainte-Colombe,4798,ARA,75,FR,45.52531,4.86664 46671,Sainte-Consorce,4798,ARA,75,FR,45.77585,4.69033 46677,Sainte-Euphémie,4798,ARA,75,FR,45.97101,4.79853 46680,Sainte-Florine,4798,ARA,75,FR,45.40519,3.31732 46686,Sainte-Foy-l’Argentière,4798,ARA,75,FR,45.70823,4.47025 46685,Sainte-Foy-lès-Lyon,4798,ARA,75,FR,45.73375,4.80259 46699,Sainte-Hélène-sur-Isère,4798,ARA,75,FR,45.61434,6.32052 46726,Sainte-Sigolène,4798,ARA,75,FR,45.24329,4.23343 46740,Salagnon,4798,ARA,75,FR,45.66863,5.36325 46741,Salaise-sur-Sanne,4798,ARA,75,FR,45.35126,4.8107 46746,Sales,4798,ARA,75,FR,45.87441,5.95996 46756,Salins-les-Thermes,4798,ARA,75,FR,45.47169,6.53051 46757,Sallanches,4798,ARA,75,FR,45.94423,6.63162 46776,Samoëns,4798,ARA,75,FR,46.08282,6.72647 46791,Sansac-de-Marmiesse,4798,ARA,75,FR,44.88376,2.34768 46810,Sarras,4798,ARA,75,FR,45.18679,4.80004 46825,Sassenage,4798,ARA,75,FR,45.21266,5.6629 46827,Sathonay-Camp,4798,ARA,75,FR,45.82462,4.87453 46828,Sathonay-Village,4798,ARA,75,FR,45.83337,4.87821 46829,Satillieu,4798,ARA,75,FR,45.15041,4.6141 46830,Satolas-et-Bonce,4798,ARA,75,FR,45.69368,5.13032 46836,Saugues,4798,ARA,75,FR,44.96008,3.54737 46838,Saulce-sur-Rhône,4798,ARA,75,FR,44.7043,4.80061 46845,Sault-Brénaz,4798,ARA,75,FR,45.86132,5.39954 46860,Sauverny,4798,ARA,75,FR,46.31514,6.11827 46867,Sauxillanges,4798,ARA,75,FR,45.55109,3.37147 46868,Sauzet,4798,ARA,75,FR,44.60397,4.82091 46870,Savasse,4798,ARA,75,FR,44.60428,4.77653 46875,Savigneux,4798,ARA,75,FR,45.6167,4.0833 46876,Savigny,4798,ARA,75,FR,45.81595,4.5741 46886,Savoie,4798,ARA,75,FR,45.46805,6.48547 46889,Sayat,4798,ARA,75,FR,45.8264,3.0525 46905,Sciez,4798,ARA,75,FR,46.33251,6.38413 46906,Scionzier,4798,ARA,75,FR,46.0601,6.55271 47134,Séez,4798,ARA,75,FR,45.62368,6.80149 47135,Ségny,4798,ARA,75,FR,46.29571,6.07257 46950,Septème,4798,ARA,75,FR,45.55294,5.00596 47147,Sérézin-du-Rhône,4798,ARA,75,FR,45.62871,4.824 46955,Sergy,4798,ARA,75,FR,46.25069,6.00183 46959,Sermérieu,4798,ARA,75,FR,45.66995,5.4111 46961,Serpaize,4798,ARA,75,FR,45.55824,4.91764 46969,Serrières,4798,ARA,75,FR,45.31799,4.76327 46970,Serrières-de-Briord,4798,ARA,75,FR,45.80706,5.44795 46971,Servas,4798,ARA,75,FR,46.13317,5.1651 46981,Sevrier,4798,ARA,75,FR,45.86442,6.1399 46983,Seynod,4798,ARA,75,FR,45.88549,6.08831 46985,Seyssinet-Pariset,4798,ARA,75,FR,45.17675,5.69387 46986,Seyssins,4798,ARA,75,FR,45.16224,5.68673 46987,Seyssuel,4798,ARA,75,FR,45.55826,4.84313 46995,Sillans,4798,ARA,75,FR,45.34261,5.38864 46997,Sillingy,4798,ARA,75,FR,45.94781,6.04415 47001,Simandres,4798,ARA,75,FR,45.61955,4.87314 47022,Solaize,4798,ARA,75,FR,45.6397,4.84038 47029,Solignac-sur-Loire,4798,ARA,75,FR,44.96833,3.88635 47039,Sonnay,4798,ARA,75,FR,45.35809,4.90479 47040,Sonnaz,4798,ARA,75,FR,45.61765,5.91505 47043,Sorbiers,4798,ARA,75,FR,45.49111,4.44163 47060,Soucieu-en-Jarrest,4798,ARA,75,FR,45.67771,4.70379 47082,Sourcieux-les-Mines,4798,ARA,75,FR,45.80606,4.62254 47089,Souvigny,4798,ARA,75,FR,46.5348,3.19205 47091,Soyons,4798,ARA,75,FR,44.88914,4.85026 47124,Sury-le-Comtal,4798,ARA,75,FR,45.53735,4.18573 47127,Suze-la-Rousse,4798,ARA,75,FR,44.28761,4.84161 47157,Tain-l’Hermitage,4798,ARA,75,FR,45.06672,4.8559 47165,Tallende,4798,ARA,75,FR,45.6704,3.1246 47166,Talloires,4798,ARA,75,FR,45.84098,6.21374 47168,Taluyers,4798,ARA,75,FR,45.63973,4.72203 47170,Taninges,4798,ARA,75,FR,46.10883,6.59231 47175,Tarare,4798,ARA,75,FR,45.89614,4.433 47183,Tassin-la-Demi-Lune,4798,ARA,75,FR,45.75499,4.78812 47185,Taulignan,4798,ARA,75,FR,44.44419,4.97057 47199,Tenay,4798,ARA,75,FR,45.91884,5.50797 47200,Tence,4798,ARA,75,FR,45.11423,4.29097 47201,Tencin,4798,ARA,75,FR,45.31105,5.95752 47208,Ternay,4798,ARA,75,FR,45.60234,4.81064 47222,Theizé,4798,ARA,75,FR,45.93963,4.61634 47224,Theys,4798,ARA,75,FR,45.30132,5.99848 47228,Thiers,4798,ARA,75,FR,45.85654,3.54758 47233,Thil,4798,ARA,75,FR,45.81368,5.02323 47242,Thizy-les-Bourgs,4798,ARA,75,FR,46.02995,4.31299 47243,Thoiry,4798,ARA,75,FR,46.23762,5.98111 47245,Thoissey,4798,ARA,75,FR,46.17222,4.80251 47275,Thônes,4798,ARA,75,FR,45.88123,6.32572 47247,Thonon-les-Bains,4798,ARA,75,FR,46.37049,6.47985 47248,Thorens-Glières,4798,ARA,75,FR,45.9951,6.24557 47257,Thuellin,4798,ARA,75,FR,45.63964,5.5084 47258,Thueyts,4798,ARA,75,FR,44.67628,4.22146 47262,Thurins,4798,ARA,75,FR,45.68179,4.64079 47265,Thyez,4798,ARA,75,FR,46.08249,6.53777 47279,Tignes,4798,ARA,75,FR,45.49604,6.92463 47280,Tignieu,4798,ARA,75,FR,45.75164,5.18911 47306,Tossiat,4798,ARA,75,FR,46.13965,5.31158 47310,Toulaud,4798,ARA,75,FR,44.89773,4.81639 47313,Toulon-sur-Allier,4798,ARA,75,FR,46.51845,3.35989 47328,Tournon-sur-Rhône,4798,ARA,75,FR,45.06667,4.83333 47340,Toussieu,4798,ARA,75,FR,45.65443,4.98495 47346,Tramoyes,4798,ARA,75,FR,45.87599,4.96502 47353,Treffort-Cuisiat,4798,ARA,75,FR,46.26667,5.36667 47359,Trept,4798,ARA,75,FR,45.68742,5.31843 47363,Tresserve,4798,ARA,75,FR,45.6761,5.89906 47406,Trévol,4798,ARA,75,FR,46.62924,3.30599 47408,Trévoux,4798,ARA,75,FR,45.94281,4.77143 47412,Tulette,4798,ARA,75,FR,44.28656,4.93122 47414,Tullins,4798,ARA,75,FR,45.30239,5.49077 47424,Ugine,4798,ARA,75,FR,45.75571,6.41503 47427,Unieux,4798,ARA,75,FR,45.40395,4.27094 47429,Upie,4798,ARA,75,FR,44.8025,4.97673 47441,Usson-en-Forez,4798,ARA,75,FR,45.39174,3.94142 47461,Val Thorens,4798,ARA,75,FR,45.29777,6.58377 47465,Val-d’Isère,4798,ARA,75,FR,45.45142,6.97455 47471,Valence,4798,ARA,75,FR,44.9256,4.90956 47475,Valencin,4798,ARA,75,FR,45.61109,5.02935 47486,Valleiry,4798,ARA,75,FR,46.11106,5.97037 47491,Vallières,4798,ARA,75,FR,45.90043,5.93863 47492,Valloire,4798,ARA,75,FR,45.16542,6.42998 47494,Vallon-en-Sully,4798,ARA,75,FR,46.53629,2.60804 47493,Vallon-Pont-d’Arc,4798,ARA,75,FR,44.40685,4.39374 47501,Vals-les-Bains,4798,ARA,75,FR,44.66561,4.36615 47502,Vals-près-le-Puy,4798,ARA,75,FR,45.03155,3.87787 47514,Varennes-sur-Allier,4798,ARA,75,FR,46.31318,3.40147 47533,Vaugneray,4798,ARA,75,FR,45.73791,4.65645 47537,Vaulnaveys-le-Bas,4798,ARA,75,FR,45.1002,5.82532 47538,Vaulnaveys-le-Haut,4798,ARA,75,FR,45.12524,5.81723 47541,Vaulx-en-Velin,4798,ARA,75,FR,45.78693,4.9251 47539,Vaulx-Milieu,4798,ARA,75,FR,45.61329,5.18371 47545,Vaux-en-Bugey,4798,ARA,75,FR,45.92671,5.35141 47552,Veauche,4798,ARA,75,FR,45.56326,4.29192 47556,Veigy,4798,ARA,75,FR,46.26787,6.26304 47567,Vendat,4798,ARA,75,FR,46.16387,3.35366 47926,Vénissieux,4798,ARA,75,FR,45.69706,4.88593 47599,Vergongheon,4798,ARA,75,FR,45.37107,3.31981 47608,Vernaison,4798,ARA,75,FR,45.64781,4.8114 47617,Vernioz,4798,ARA,75,FR,45.42672,4.88267 47620,Vernosc-lès-Annonay,4798,ARA,75,FR,45.21596,4.7131 47625,Vernoux-en-Vivarais,4798,ARA,75,FR,44.89577,4.64524 47634,Versonnex,4798,ARA,75,FR,45.92914,5.92586 47639,Vertaizon,4798,ARA,75,FR,45.76983,3.2865 47649,Vesseaux,4798,ARA,75,FR,44.65152,4.44025 47931,Vétraz-Monthoux,4798,ARA,75,FR,46.1743,6.25852 47651,Veurey-Voroize,4798,ARA,75,FR,45.27268,5.61372 47654,Veyras,4798,ARA,75,FR,44.73518,4.56254 47655,Veyre-Monton,4798,ARA,75,FR,45.66866,3.17144 47656,Veyrier-du-Lac,4798,ARA,75,FR,45.88234,6.17709 47666,Vic-le-Comte,4798,ARA,75,FR,45.64296,3.24607 47668,Vic-sur-Cère,4798,ARA,75,FR,44.98011,2.62505 47670,Vichy,4798,ARA,75,FR,46.12709,3.42577 47675,Vieille-Brioude,4798,ARA,75,FR,45.2647,3.40479 47682,Vienne,4798,ARA,75,FR,45.52569,4.87484 47692,Vif,4798,ARA,75,FR,45.05654,5.67204 47710,Villard-Bonnot,4798,ARA,75,FR,45.2346,5.88323 47711,Villard-de-Lans,4798,ARA,75,FR,45.07156,5.55637 47712,Villargondran,4798,ARA,75,FR,45.26427,6.37668 47713,Villars,4798,ARA,75,FR,45.46785,4.35539 47714,Villars-les-Dombes,4798,ARA,75,FR,46.00208,5.03248 47716,Villaz,4798,ARA,75,FR,45.95127,6.19447 47718,Ville-la-Grand,4798,ARA,75,FR,46.203,6.2501 47719,Ville-sous-Anjou,4798,ARA,75,FR,45.37274,4.85081 47724,Villebois,4798,ARA,75,FR,45.84822,5.4331 47726,Villebret,4798,ARA,75,FR,46.26683,2.63862 47734,Villefontaine,4798,ARA,75,FR,45.61278,5.15058 47738,Villefranche-d’Allier,4798,ARA,75,FR,46.39652,2.85717 47741,Villefranche-sur-Saône,4798,ARA,75,FR,45.98967,4.71961 47751,Villemoirieu,4798,ARA,75,FR,45.71884,5.22586 47759,Villeneuve,4798,ARA,75,FR,46.02096,4.83591 47767,Villeneuve-de-Berg,4798,ARA,75,FR,44.55699,4.50215 47793,Villerest,4798,ARA,75,FR,45.99539,4.03463 47794,Villereversure,4798,ARA,75,FR,46.18521,5.38262 47817,Villette-de-Vienne,4798,ARA,75,FR,45.59049,4.91528 47818,Villeurbanne,4798,ARA,75,FR,45.76601,4.8795 47822,Villevocance,4798,ARA,75,FR,45.22481,4.58827 47836,Villié-Morgon,4798,ARA,75,FR,46.16227,4.68069 47838,Vimines,4798,ARA,75,FR,45.5464,5.86523 47843,Vinay,4798,ARA,75,FR,45.20832,5.40646 47850,Vinsobres,4798,ARA,75,FR,44.33328,5.06204 47853,Violay,4798,ARA,75,FR,45.85335,4.35951 47861,Viriat,4798,ARA,75,FR,46.25484,5.21567 47862,Virieu,4798,ARA,75,FR,45.48404,5.47586 47863,Virieu-le-Grand,4798,ARA,75,FR,45.84766,5.65146 47864,Viriville,4798,ARA,75,FR,45.31579,5.20376 47866,Viry,4798,ARA,75,FR,46.11291,6.03808 47879,Viuz-en-Sallaz,4798,ARA,75,FR,46.14673,6.40781 47880,Viuz-la-Chiésaz,4798,ARA,75,FR,45.81203,6.06645 47882,Viviers,4798,ARA,75,FR,44.4828,4.68895 47883,Viviers-du-Lac,4798,ARA,75,FR,45.65,5.9 47889,Vizille,4798,ARA,75,FR,45.07819,5.77074 47890,Voglans,4798,ARA,75,FR,45.61868,5.88798 47892,Voiron,4798,ARA,75,FR,45.36471,5.5856 47899,Volvic,4798,ARA,75,FR,45.87196,3.03832 47901,Vonnas,4798,ARA,75,FR,46.21727,4.99246 47902,Voreppe,4798,ARA,75,FR,45.29484,5.63192 47903,Vorey,4798,ARA,75,FR,45.18638,3.90991 47905,Vougy,4798,ARA,75,FR,46.10435,4.11771 47912,Vourey,4798,ARA,75,FR,45.3218,5.51931 47913,Vourles,4798,ARA,75,FR,45.65878,4.77325 48002,Ydes,4798,ARA,75,FR,45.34722,2.43727 48003,Yenne,4798,ARA,75,FR,45.7042,5.75795 48009,Youx,4798,ARA,75,FR,46.14467,2.79903 48011,Yssingeaux,4798,ARA,75,FR,45.14282,4.12372 48012,Ytrac,4798,ARA,75,FR,44.912,2.36248 48021,Yzeure,4798,ARA,75,FR,46.56596,3.35446 39267,Ahuy,4825,BFC,75,FR,47.36944,5.02089 39280,Aillant-sur-Tholon,4825,BFC,75,FR,47.87426,3.35049 39281,Aillevillers-et-Lyaumont,4825,BFC,75,FR,47.92033,6.33775 39290,Aiserey,4825,BFC,75,FR,47.17229,5.1626 39373,Ancy-le-Franc,4825,BFC,75,FR,47.77586,4.16361 39379,Andelnans,4825,BFC,75,FR,47.60267,6.86621 39443,Appoigny,4825,BFC,75,FR,47.87467,3.52524 39449,Arbois,4825,BFC,75,FR,46.90311,5.77454 39452,Arbouans,4825,BFC,75,FR,47.49944,6.79505 39454,Arc-et-Senans,4825,BFC,75,FR,47.03127,5.77027 39455,Arc-lès-Gray,4825,BFC,75,FR,47.45701,5.58547 39456,Arc-sur-Tille,4825,BFC,75,FR,47.34349,5.18666 39459,Arcey,4825,BFC,75,FR,47.52258,6.66222 39486,Arinthod,4825,BFC,75,FR,46.39339,5.56616 39501,Arnay-le-Duc,4825,BFC,75,FR,47.13202,4.48595 39598,Audincourt,4825,BFC,75,FR,47.48327,6.85341 39606,Augy,4825,BFC,75,FR,47.7664,3.61051 39639,Autun,4825,BFC,75,FR,46.95104,4.29869 39644,Auxerre,4825,BFC,75,FR,47.7996,3.57033 39646,Auxon-Dessous,4825,BFC,75,FR,47.3,5.95 39647,Auxonne,4825,BFC,75,FR,47.19255,5.38726 39648,Auxy,4825,BFC,75,FR,46.9494,4.4044 39656,Avallon,4825,BFC,75,FR,47.49002,3.90832 39657,Avanne-Aveney,4825,BFC,75,FR,47.2,5.96667 39793,Bart,4825,BFC,75,FR,47.48861,6.7709 39814,Baume-les-Dames,4825,BFC,75,FR,47.35295,6.36117 39817,Bavans,4825,BFC,75,FR,47.48528,6.73324 39820,Bavilliers,4825,BFC,75,FR,47.62235,6.83543 39841,Beaucourt,4825,BFC,75,FR,47.48878,6.92214 39874,Beaune,4825,BFC,75,FR,47.02413,4.83887 39904,Belfort,4825,BFC,75,FR,47.64218,6.85385 39917,Belleneuve,4825,BFC,75,FR,47.36224,5.26393 39971,Besançon,4825,BFC,75,FR,47.24878,6.01815 39984,Bethoncourt,4825,BFC,75,FR,47.53512,6.80504 39989,Beure,4825,BFC,75,FR,47.2069,6.00548 40052,Blamont,4825,BFC,75,FR,47.38513,6.848 40057,Blanzy,4825,BFC,75,FR,46.70012,4.38833 40072,Bléneau,4825,BFC,75,FR,47.7,2.95 40065,Bletterans,4825,BFC,75,FR,46.74673,5.45444 40067,Bligny-lès-Beaune,4825,BFC,75,FR,46.98631,4.8262 40088,Bois-d’Amont,4825,BFC,75,FR,46.5328,6.1375 40178,Bourbon-Lancy,4825,BFC,75,FR,46.62214,3.76953 40211,Bourogne,4825,BFC,75,FR,47.56307,6.91654 40219,Boussières,4825,BFC,75,FR,47.15866,5.90314 40254,Branges,4825,BFC,75,FR,46.64441,5.18465 40270,Brazey-en-Plaine,4825,BFC,75,FR,47.13784,5.21538 40310,Brienon-sur-Armançon,4825,BFC,75,FR,47.99009,3.61628 40405,Buxy,4825,BFC,75,FR,46.71369,4.70427 40642,Cercy-la-Tour,4825,BFC,75,FR,46.86203,3.64652 41400,Cézy,4825,BFC,75,FR,47.99265,3.34067 40670,Chablis,4825,BFC,75,FR,47.81386,3.79835 40675,Chagny,4825,BFC,75,FR,46.90953,4.7519 40696,Challuy,4825,BFC,75,FR,46.94971,3.14807 40698,Chalon-sur-Saône,4825,BFC,75,FR,46.78112,4.85372 40934,Châlonvillars,4825,BFC,75,FR,47.64055,6.78407 40724,Champagney,4825,BFC,75,FR,47.70504,6.68173 40726,Champagnole,4825,BFC,75,FR,46.74452,5.91354 40736,Champforgeuil,4825,BFC,75,FR,46.81857,4.83357 40739,Champignelles,4825,BFC,75,FR,47.78009,3.07457 40741,Champigny,4825,BFC,75,FR,48.31667,3.13333 40745,Champlitte,4825,BFC,75,FR,47.61667,5.51667 40746,Champlitte-la-Ville,4825,BFC,75,FR,47.61333,5.53191 40750,Champs-sur-Yonne,4825,BFC,75,FR,47.73333,3.6 40754,Champvans,4825,BFC,75,FR,47.10466,5.4376 40773,Chantenay-Saint-Imbert,4825,BFC,75,FR,46.73333,3.18333 40792,Charbuy,4825,BFC,75,FR,47.82282,3.46617 40810,Charnay-lès-Mâcon,4825,BFC,75,FR,46.30751,4.78479 40811,Charny,4825,BFC,75,FR,47.88661,3.09583 40814,Charolles,4825,BFC,75,FR,46.43451,4.27527 40815,Charquemont,4825,BFC,75,FR,47.21417,6.8198 40937,Château-Chinon(Ville),4825,BFC,75,FR,47.06667,3.93333 40989,Châtenois-les-Forges,4825,BFC,75,FR,47.55875,6.84871 40990,Châtenoy-le-Royal,4825,BFC,75,FR,46.79797,4.8119 40994,Châtillon-en-Bazois,4825,BFC,75,FR,47.05464,3.65893 40998,Châtillon-le-Duc,4825,BFC,75,FR,47.30486,6.00792 41005,Châtillon-sur-Seine,4825,BFC,75,FR,47.85851,4.57375 40839,Chauffailles,4825,BFC,75,FR,46.20726,4.33932 40840,Chaulgnes,4825,BFC,75,FR,47.12889,3.10348 40852,Chaussin,4825,BFC,75,FR,46.96612,5.40791 40870,Chemaudin,4825,BFC,75,FR,47.22392,5.89419 40878,Chenôve,4825,BFC,75,FR,47.29323,5.00457 40877,Cheny,4825,BFC,75,FR,47.95166,3.5334 41016,Chéroy,4825,BFC,75,FR,48.20076,3.00011 40896,Chevigny-Saint-Sauveur,4825,BFC,75,FR,47.29908,5.13367 41009,Chèvremont,4825,BFC,75,FR,47.62912,6.92056 40919,Choisey,4825,BFC,75,FR,47.06389,5.45911 41027,Ciry-le-Noble,4825,BFC,75,FR,46.60607,4.29869 41037,Clairvaux-les-Lacs,4825,BFC,75,FR,46.57473,5.74825 41040,Clamecy,4825,BFC,75,FR,47.46017,3.5194 41051,Clerval,4825,BFC,75,FR,47.39167,6.49925 41063,Cluny,4825,BFC,75,FR,46.43318,4.65845 41102,Colombier-Fontaine,4825,BFC,75,FR,47.45224,6.6901 41167,Corbenay,4825,BFC,75,FR,47.89275,6.33047 41169,Corbigny,4825,BFC,75,FR,47.25678,3.68285 41199,Corpeau,4825,BFC,75,FR,46.92917,4.75226 41208,Cosne-Cours-sur-Loire,4825,BFC,75,FR,47.41101,2.92528 41216,Couches,4825,BFC,75,FR,46.86667,4.56667 41217,Couchey,4825,BFC,75,FR,47.25991,4.98257 41229,Coulanges-lès-Nevers,4825,BFC,75,FR,47.00509,3.18756 41244,Courcelles-lès-Montbéliard,4825,BFC,75,FR,47.50113,6.78461 41253,Courlon-sur-Yonne,4825,BFC,75,FR,48.33927,3.1666 41275,Cousance,4825,BFC,75,FR,46.53324,5.39214 41280,Couternon,4825,BFC,75,FR,47.33333,5.15 41301,Cravanche,4825,BFC,75,FR,47.65346,6.83197 41353,Crêches-sur-Saône,4825,BFC,75,FR,46.24475,4.78678 41321,Crissey,4825,BFC,75,FR,46.81652,4.88185 41368,Cuiseaux,4825,BFC,75,FR,46.49473,5.38931 41369,Cuisery,4825,BFC,75,FR,46.55696,4.99797 41376,Curgy,4825,BFC,75,FR,46.98714,4.38452 41406,Daix,4825,BFC,75,FR,47.35081,5.00052 41417,Damparis,4825,BFC,75,FR,47.07556,5.41398 41418,Dampierre,4825,BFC,75,FR,47.15498,5.74167 41421,Dampierre-les-Bois,4825,BFC,75,FR,47.50639,6.91279 41422,Dampierre-sur-Salon,4825,BFC,75,FR,47.55719,5.6797 41424,Damprichard,4825,BFC,75,FR,47.24413,6.88121 41427,Danjoutin,4825,BFC,75,FR,47.61822,6.86204 41429,Dannemarie-sur-Crête,4825,BFC,75,FR,47.20488,5.87018 41438,Dasle,4825,BFC,75,FR,47.47843,6.89728 41447,Decize,4825,BFC,75,FR,46.82852,3.46192 41448,Delle,4825,BFC,75,FR,47.50797,6.99975 41449,Demigny,4825,BFC,75,FR,46.93048,4.83381 41623,Département de lYonne,4825,BFC,75,FR,47.91667,3.75 41626,Département de la Côte-dOr,4825,BFC,75,FR,47.5,4.83333 41629,Département de la Haute-Saône,4825,BFC,75,FR,47.67625,6.10066 41632,Département de la Nièvre,4825,BFC,75,FR,47.11695,3.49192 41607,Département de Saône-et-Loire,4825,BFC,75,FR,46.63646,4.58819 41460,Devecey,4825,BFC,75,FR,47.32169,6.019 41476,Diges,4825,BFC,75,FR,47.72862,3.39786 41479,Digoin,4825,BFC,75,FR,46.48124,3.97946 41481,Dijon,4825,BFC,75,FR,47.31667,5.01667 41504,Dole,4825,BFC,75,FR,47.09225,5.48966 41536,Donzy,4825,BFC,75,FR,47.37066,3.12548 41542,Dornes,4825,BFC,75,FR,46.716,3.35343 41547,Doubs,4825,BFC,75,FR,47.19967,6.43487 41565,Dracy-le-Fort,4825,BFC,75,FR,46.7975,4.76215 48040,Échenoz-la-Méline,4825,BFC,75,FR,47.60086,6.13544 48044,École-Valentin,4825,BFC,75,FR,47.26667,5.98333 48055,Écuisses,4825,BFC,75,FR,46.75631,4.53845 48060,Égriselles-le-Bocage,4825,BFC,75,FR,48.12103,3.18233 48075,Épervans,4825,BFC,75,FR,46.75247,4.8993 48077,Épinac,4825,BFC,75,FR,46.98333,4.51667 41725,Essert,4825,BFC,75,FR,47.63342,6.81702 48094,Étalans,4825,BFC,75,FR,47.15125,6.27315 48097,Étang-sur-Arroux,4825,BFC,75,FR,46.8656,4.18988 48115,Étupes,4825,BFC,75,FR,47.50525,6.87075 41749,Exincourt,4825,BFC,75,FR,47.49465,6.83169 41784,Faverney,4825,BFC,75,FR,47.76713,6.10428 42003,Fénay,4825,BFC,75,FR,47.23185,5.06211 41807,Fesches-le-Châtel,4825,BFC,75,FR,47.52415,6.90535 41841,Fleurey-sur-Ouche,4825,BFC,75,FR,47.31182,4.85911 41848,Fleury-la-Vallée,4825,BFC,75,FR,47.86672,3.44908 41857,Flogny-la-Chapelle,4825,BFC,75,FR,47.95,3.86667 41884,Fontaine-lès-Dijon,4825,BFC,75,FR,47.34238,5.02007 41885,Fontaine-lès-Luxeuil,4825,BFC,75,FR,47.85592,6.33482 41888,Fontaines,4825,BFC,75,FR,46.84905,4.77036 41922,Foucherans,4825,BFC,75,FR,47.08094,5.45503 41925,Fougerolles,4825,BFC,75,FR,47.88542,6.40454 41934,Fourchambault,4825,BFC,75,FR,47.01667,3.08333 41942,Frahier-et-Chatebier,4825,BFC,75,FR,47.66667,6.75 41943,Fraisans,4825,BFC,75,FR,47.14857,5.76051 41951,Franois,4825,BFC,75,FR,47.23055,5.92869 41953,Frasne,4825,BFC,75,FR,46.85641,6.1594 41968,Froideconche,4825,BFC,75,FR,47.82121,6.41523 41979,Frotey-lès-Vesoul,4825,BFC,75,FR,47.62078,6.18831 42035,Garchizy,4825,BFC,75,FR,47.04786,3.09625 42295,Génelard,4825,BFC,75,FR,46.58119,4.23619 42066,Genlis,4825,BFC,75,FR,47.24203,5.22415 42074,Gergy,4825,BFC,75,FR,46.87557,4.94527 42082,Gevrey-Chambertin,4825,BFC,75,FR,47.22614,4.96806 42094,Gilley,4825,BFC,75,FR,47.0474,6.48257 42101,Giromagny,4825,BFC,75,FR,47.74272,6.82733 42110,Givry,4825,BFC,75,FR,46.78202,4.74262 42171,Grand-Charmont,4825,BFC,75,FR,47.52674,6.82604 42177,Grandfontaine,4825,BFC,75,FR,47.19763,5.90079 42180,Grandvillars,4825,BFC,75,FR,47.53929,6.971 42192,Gray,4825,BFC,75,FR,47.44575,5.59215 42193,Gray-la-Ville,4825,BFC,75,FR,47.43932,5.57252 42222,Gron,4825,BFC,75,FR,48.15967,3.26345 42288,Guérigny,4825,BFC,75,FR,47.08703,3.20182 42248,Gueugnon,4825,BFC,75,FR,46.60357,4.06286 42275,Gurgy,4825,BFC,75,FR,47.86712,3.56341 42292,Gy,4825,BFC,75,FR,47.40588,5.81226 42353,Hauteville-lès-Dijon,4825,BFC,75,FR,47.36602,4.99375 42457,Héricourt,4825,BFC,75,FR,47.57305,6.76139 42459,Hérimoncourt,4825,BFC,75,FR,47.44284,6.88242 42463,Héry,4825,BFC,75,FR,47.90146,3.62868 42444,Hurigny,4825,BFC,75,FR,46.34722,4.79676 42484,Imphy,4825,BFC,75,FR,46.93619,3.26037 42497,Is-sur-Tille,4825,BFC,75,FR,47.5267,5.10649 42552,Joigny,4825,BFC,75,FR,47.98288,3.40096 42556,Joncherey,4825,BFC,75,FR,47.52895,7.00323 42569,Jougne,4825,BFC,75,FR,46.76291,6.38838 42571,Joux-la-Ville,4825,BFC,75,FR,47.62241,3.86217 42593,Jura,4825,BFC,75,FR,46.73431,5.72349 42596,Jussey,4825,BFC,75,FR,47.82536,5.90193 42691,La Chapelle-de-Guinchay,4825,BFC,75,FR,46.20841,4.76245 42702,La Charité-sur-Loire,4825,BFC,75,FR,47.18333,3.01667 42709,La Clayette,4825,BFC,75,FR,46.29002,4.30422 42711,La Cluse-et-Mijoux,4825,BFC,75,FR,46.88333,6.38333 42796,La Machine,4825,BFC,75,FR,46.89226,3.46426 42814,La Motte-Saint-Jean,4825,BFC,75,FR,46.49594,3.96396 42855,La Roche-Vineuse,4825,BFC,75,FR,46.34524,4.72023 42951,Ladoix-Serrigny,4825,BFC,75,FR,47.06667,4.88333 42982,Lamarche-sur-Saône,4825,BFC,75,FR,47.26946,5.38589 43074,Laroche-Saint-Cydroine,4825,BFC,75,FR,47.96801,3.48467 43110,Lavans-lès-Saint-Claude,4825,BFC,75,FR,46.38484,5.78172 43144,Le Breuil,4825,BFC,75,FR,46.80654,4.46953 43175,Le Creusot,4825,BFC,75,FR,46.80714,4.41632 43298,Le Russey,4825,BFC,75,FR,47.16055,6.72912 43354,Lepuix,4825,BFC,75,FR,47.7605,6.81434 43387,Les Fins,4825,BFC,75,FR,47.07764,6.63002 43389,Les Fourgs,4825,BFC,75,FR,46.83455,6.39953 43426,Les Rousses,4825,BFC,75,FR,46.48412,6.0633 43452,Levier,4825,BFC,75,FR,46.95302,6.12059 43479,Ligny-le-Châtel,4825,BFC,75,FR,47.90022,3.7576 43553,Longchamp,4825,BFC,75,FR,47.25973,5.28694 43554,Longchaumois,4825,BFC,75,FR,46.46228,5.93052 43555,Longecourt-en-Plaine,4825,BFC,75,FR,47.19783,5.14956 43574,Longvic,4825,BFC,75,FR,47.28754,5.06341 43577,Lons-le-Saunier,4825,BFC,75,FR,46.67535,5.55575 43591,Lormes,4825,BFC,75,FR,47.28964,3.81714 43596,Losne,4825,BFC,75,FR,47.0985,5.26216 43603,Louhans,4825,BFC,75,FR,46.62637,5.22468 43634,Lucenay-lès-Aix,4825,BFC,75,FR,46.70274,3.48308 43659,Lure,4825,BFC,75,FR,47.68294,6.49658 43668,Luxeuil-les-Bains,4825,BFC,75,FR,47.8171,6.365 43674,Luzy,4825,BFC,75,FR,46.79011,3.97036 44451,Mâcon,4825,BFC,75,FR,46.31407,4.82823 43724,Magny-Cours,4825,BFC,75,FR,46.88333,3.15 43725,Magny-Vernois,4825,BFC,75,FR,47.66997,6.47545 43982,Maîche,4825,BFC,75,FR,47.2516,6.80309 43735,Maillot,4825,BFC,75,FR,48.17557,3.30784 43753,Malay-le-Grand,4825,BFC,75,FR,48.17589,3.34189 43770,Mamirolle,4825,BFC,75,FR,47.19857,6.15924 43774,Mandeure,4825,BFC,75,FR,47.44921,6.80762 43802,Marcigny,4825,BFC,75,FR,46.27627,4.03957 43808,Marcilly-sur-Tille,4825,BFC,75,FR,47.517,5.12979 43857,Marmagne,4825,BFC,75,FR,46.83666,4.35892 43861,Marnay,4825,BFC,75,FR,47.29088,5.77277 43879,Marsannay-la-Côte,4825,BFC,75,FR,47.27095,4.98895 43925,Marzy,4825,BFC,75,FR,46.98125,3.09352 43938,Mathay,4825,BFC,75,FR,47.43905,6.78487 43941,Matour,4825,BFC,75,FR,46.30654,4.48178 44461,Mélisey,4825,BFC,75,FR,47.75229,6.58014 43996,Mellecey,4825,BFC,75,FR,46.81084,4.72822 44010,Mercurey,4825,BFC,75,FR,46.84035,4.71743 44021,Mervans,4825,BFC,75,FR,46.79923,5.1843 44037,Messigny-et-Vantoux,4825,BFC,75,FR,47.40666,5.01715 44050,Meursault,4825,BFC,75,FR,46.97822,4.76952 44487,Méziré,4825,BFC,75,FR,47.53336,6.92072 44068,Migennes,4825,BFC,75,FR,47.96548,3.51787 44093,Mirebeau-sur-Bèze,4825,BFC,75,FR,47.39828,5.32093 44103,Miserey-Salines,4825,BFC,75,FR,47.28638,5.97387 44114,Moirans-en-Montagne,4825,BFC,75,FR,46.43381,5.72643 44336,Monéteau,4825,BFC,75,FR,47.84923,3.58178 44163,Mont-sous-Vaudrey,4825,BFC,75,FR,46.97874,5.60295 44190,Montbard,4825,BFC,75,FR,47.62294,4.337 44204,Montbéliard,4825,BFC,75,FR,47.50957,6.79823 44206,Montceau-les-Mines,4825,BFC,75,FR,46.66667,4.36667 44207,Montcenis,4825,BFC,75,FR,46.78785,4.38738 44208,Montchanin,4825,BFC,75,FR,46.74964,4.4707 44220,Montenois,4825,BFC,75,FR,47.49222,6.66561 44230,Montfaucon,4825,BFC,75,FR,47.23562,6.08162 44236,Montferrand-le-Château,4825,BFC,75,FR,47.17536,5.91534 44270,Montlebon,4825,BFC,75,FR,47.03778,6.61111 44289,Montmorot,4825,BFC,75,FR,46.67541,5.52283 44302,Montpont-en-Bresse,4825,BFC,75,FR,46.5563,5.16459 44314,Montreux-Château,4825,BFC,75,FR,47.61003,6.99923 44344,Morbier,4825,BFC,75,FR,46.53693,6.01532 44351,Morez,4825,BFC,75,FR,46.5254,6.02589 44364,Morre,4825,BFC,75,FR,47.22595,6.07512 44374,Morteau,4825,BFC,75,FR,47.05784,6.60716 44376,Morvillars,4825,BFC,75,FR,47.54854,6.9345 44383,Mouchard,4825,BFC,75,FR,46.97259,5.79626 44395,Moulins-Engilbert,4825,BFC,75,FR,46.98821,3.81084 44500,Nancray,4825,BFC,75,FR,47.24536,6.18283 44523,Navenne,4825,BFC,75,FR,47.60873,6.16176 44550,Neuilly-lès-Dijon,4825,BFC,75,FR,47.27943,5.10645 44577,Neuvy-Sautour,4825,BFC,75,FR,48.0419,3.79472 44580,Neuvy-sur-Loire,4825,BFC,75,FR,47.52323,2.88333 44583,Nevers,4825,BFC,75,FR,46.98956,3.159 44622,Noidans-lès-Vesoul,4825,BFC,75,FR,47.61299,6.12571 44633,Nolay,4825,BFC,75,FR,46.95202,4.63405 44637,Nommay,4825,BFC,75,FR,47.5378,6.84219 44667,Novillars,4825,BFC,75,FR,47.28465,6.12878 44688,Nuits-Saint-Georges,4825,BFC,75,FR,47.13683,4.949 44718,Offemont,4825,BFC,75,FR,47.66278,6.87764 44757,Orchamps,4825,BFC,75,FR,47.14751,5.65873 44758,Orchamps-Vennes,4825,BFC,75,FR,47.13042,6.52468 44761,Orgelet,4825,BFC,75,FR,46.52096,5.61049 44780,Ornans,4825,BFC,75,FR,47.10749,6.14306 44804,Ouges,4825,BFC,75,FR,47.26164,5.07395 44808,Ouroux-sur-Saône,4825,BFC,75,FR,46.72147,4.95262 44837,Palinges,4825,BFC,75,FR,46.55357,4.21964 44848,Paray-le-Monial,4825,BFC,75,FR,46.45457,4.11584 44858,Paron,4825,BFC,75,FR,48.17888,3.25075 44888,Pelousey,4825,BFC,75,FR,47.27538,5.92263 44900,Perrecy-les-Forges,4825,BFC,75,FR,46.61453,4.2138 44904,Perrigny,4825,BFC,75,FR,46.66744,5.58456 44905,Perrigny-lès-Dijon,4825,BFC,75,FR,47.26648,5.00628 44913,Pesmes,4825,BFC,75,FR,47.28008,5.56698 44917,Petit-Noir,4825,BFC,75,FR,46.93333,5.33333 44952,Pierre-de-Bresse,4825,BFC,75,FR,46.88333,5.25 44957,Pierrefontaine-les-Varans,4825,BFC,75,FR,47.21601,6.5403 44977,Pirey,4825,BFC,75,FR,47.26136,5.96466 44998,Plancher-Bas,4825,BFC,75,FR,47.71977,6.73041 44999,Plancher-les-Mines,4825,BFC,75,FR,47.7615,6.74308 45037,Plombières-lès-Dijon,4825,BFC,75,FR,47.33333,4.96667 45142,Poligny,4825,BFC,75,FR,46.83712,5.70505 45181,Pont-de-Roide,4825,BFC,75,FR,47.38738,6.7684 45193,Pont-sur-Yonne,4825,BFC,75,FR,48.28297,3.20198 45200,Pontailler-sur-Saône,4825,BFC,75,FR,47.30455,5.41479 45201,Pontarlier,4825,BFC,75,FR,46.90347,6.35542 45237,Port-sur-Saône,4825,BFC,75,FR,47.68774,6.05011 45250,Pougues-les-Eaux,4825,BFC,75,FR,47.07518,3.1015 45251,Pouilley-les-Vignes,4825,BFC,75,FR,47.2577,5.93581 45253,Pouilly-en-Auxois,4825,BFC,75,FR,47.26238,4.55583 45257,Pouilly-sur-Loire,4825,BFC,75,FR,47.28377,2.95442 45265,Pourrain,4825,BFC,75,FR,47.75615,3.41193 45309,Prémery,4825,BFC,75,FR,47.16952,3.32743 45290,Prissé,4825,BFC,75,FR,46.3213,4.74469 45330,Pusey,4825,BFC,75,FR,47.65243,6.12615 45380,Quetigny,4825,BFC,75,FR,47.31667,5.11667 45392,Quincey,4825,BFC,75,FR,47.61165,6.18556 45397,Quingey,4825,BFC,75,FR,47.1025,5.88312 45435,Ravières,4825,BFC,75,FR,47.73475,4.22777 45522,Rioz,4825,BFC,75,FR,47.42521,6.06598 45541,Roche-lez-Beaupré,4825,BFC,75,FR,47.28333,6.11667 45576,Romanèche-Thorins,4825,BFC,75,FR,46.18402,4.74242 45578,Romenay,4825,BFC,75,FR,46.50208,5.06904 45583,Ronchamp,4825,BFC,75,FR,47.70063,6.63591 45622,Rougemont,4825,BFC,75,FR,47.48211,6.35574 45623,Rougemont-le-Château,4825,BFC,75,FR,47.73532,6.9669 45631,Roulans,4825,BFC,75,FR,47.31553,6.22901 45649,Roye,4825,BFC,75,FR,47.66995,6.54139 45664,Ruffey-lès-Echirey,4825,BFC,75,FR,47.36667,5.08333 45669,Rully,4825,BFC,75,FR,46.87499,4.74322 45712,Sagy,4825,BFC,75,FR,46.60129,5.31045 45743,Saint-Amand-en-Puisaye,4825,BFC,75,FR,47.52913,3.074 45752,Saint-Amour,4825,BFC,75,FR,46.43638,5.34416 45774,Saint-Apollinaire,4825,BFC,75,FR,47.33333,5.08333 45780,Saint-Aubin,4825,BFC,75,FR,47.03336,5.32666 45809,Saint-Benin-d’Azy,4825,BFC,75,FR,46.99914,3.39267 45813,Saint-Berain-sous-Sanvignes,4825,BFC,75,FR,46.70678,4.29405 45831,Saint-Bris-le-Vineux,4825,BFC,75,FR,47.74396,3.64922 45866,Saint-Claude,4825,BFC,75,FR,46.38679,5.86473 45870,Saint-Clément,4825,BFC,75,FR,48.21724,3.29609 46636,Saint-Éloi,4825,BFC,75,FR,46.97342,3.22228 45928,Saint-Eusèbe,4825,BFC,75,FR,46.71346,4.46203 45929,Saint-Fargeau,4825,BFC,75,FR,47.64133,3.07066 45937,Saint-Florentin,4825,BFC,75,FR,48.00057,3.72489 45957,Saint-Gengoux-le-National,4825,BFC,75,FR,46.61476,4.66261 45988,Saint-Georges-sur-Baulche,4825,BFC,75,FR,47.80039,3.53144 45993,Saint-Germain,4825,BFC,75,FR,47.72496,6.53117 46009,Saint-Germain-du-Bois,4825,BFC,75,FR,46.75287,5.2453 46011,Saint-Germain-du-Plain,4825,BFC,75,FR,46.69938,4.9851 46069,Saint-Hippolyte,4825,BFC,75,FR,47.3188,6.81617 46093,Saint-Jean-de-Losne,4825,BFC,75,FR,47.10247,5.26556 46134,Saint-Julien,4825,BFC,75,FR,47.40029,5.14163 46142,Saint-Julien-du-Sault,4825,BFC,75,FR,48.03188,3.29556 46186,Saint-Laurent-en-Grandvaux,4825,BFC,75,FR,46.58333,5.95 46212,Saint-Léger-des-Vignes,4825,BFC,75,FR,46.84063,3.45488 46218,Saint-Léger-sur-Dheune,4825,BFC,75,FR,46.84548,4.63607 46192,Saint-Leu,4825,BFC,75,FR,46.7306,4.50083 46201,Saint-Loup-sur-Semouse,4825,BFC,75,FR,47.88345,6.2753 46206,Saint-Lupicin,4825,BFC,75,FR,46.40034,5.7922 46243,Saint-Marcel,4825,BFC,75,FR,46.77371,4.89205 46259,Saint-Martin-Belle-Roche,4825,BFC,75,FR,46.38312,4.85539 46291,Saint-Martin-du-Tertre,4825,BFC,75,FR,48.21659,3.26151 46296,Saint-Martin-en-Bresse,4825,BFC,75,FR,46.81725,5.06027 46396,Saint-Parize-le-Châtel,4825,BFC,75,FR,46.85447,3.18267 46449,Saint-Pierre-le-Moûtier,4825,BFC,75,FR,46.79277,3.11657 46508,Saint-Rémy,4825,BFC,75,FR,46.76334,4.83928 46530,Saint-Sauveur,4825,BFC,75,FR,47.8053,6.38583 46549,Saint-Sernin-du-Bois,4825,BFC,75,FR,46.84074,4.43271 46592,Saint-Usage,4825,BFC,75,FR,47.11009,5.26044 46593,Saint-Usuge,4825,BFC,75,FR,46.679,5.25089 46601,Saint-Valérien,4825,BFC,75,FR,48.17805,3.09523 46598,Saint-Vallier,4825,BFC,75,FR,46.64107,4.37107 46619,Saint-Vit,4825,BFC,75,FR,47.18333,5.81667 46628,Saint-Yan,4825,BFC,75,FR,46.41147,4.03876 46730,Sainte-Suzanne,4825,BFC,75,FR,47.50017,6.76775 46742,Salbert,4825,BFC,75,FR,47.66959,6.81269 46755,Salins-les-Bains,4825,BFC,75,FR,46.94663,5.87763 46784,Sancé,4825,BFC,75,FR,46.33926,4.83049 46782,Sancey-le-Grand,4825,BFC,75,FR,47.29489,6.58287 46800,Sanvignes-les-Mines,4825,BFC,75,FR,46.66444,4.29188 46893,Saône,4825,BFC,75,FR,47.22311,6.11682 46826,Sassenay,4825,BFC,75,FR,46.83074,4.92523 46841,Saulieu,4825,BFC,75,FR,47.28023,4.22857 46866,Sauvigny-les-Bois,4825,BFC,75,FR,46.96676,3.2719 46881,Savigny-lès-Beaune,4825,BFC,75,FR,47.06357,4.81821 46896,Scey-sur-Saône-et-Saint-Albin,4825,BFC,75,FR,47.66398,5.97451 46918,Seignelay,4825,BFC,75,FR,47.90542,3.60136 46932,Seloncourt,4825,BFC,75,FR,47.45989,6.85535 46933,Selongey,4825,BFC,75,FR,47.58846,5.18483 46938,Semur-en-Auxois,4825,BFC,75,FR,47.48333,4.33333 46941,Sennecey-le-Grand,4825,BFC,75,FR,46.64137,4.86707 46942,Sennecey-lès-Dijon,4825,BFC,75,FR,47.28984,5.10485 46945,Sens,4825,BFC,75,FR,48.19738,3.28328 46954,Sergines,4825,BFC,75,FR,48.34203,3.26213 46958,Sermoise-sur-Loire,4825,BFC,75,FR,46.95,3.18333 46965,Serre-les-Sapins,4825,BFC,75,FR,47.25,5.93333 46978,Seurre,4825,BFC,75,FR,46.99923,5.15138 46980,Sevrey,4825,BFC,75,FR,46.73825,4.8403 47000,Simandre,4825,BFC,75,FR,46.62364,4.98777 47014,Sochaux,4825,BFC,75,FR,47.50808,6.82748 47049,Sornay,4825,BFC,75,FR,46.63023,5.17999 47061,Soucy,4825,BFC,75,FR,48.24956,3.32385 47156,Taillecourt,4825,BFC,75,FR,47.49521,6.85442 47161,Talant,4825,BFC,75,FR,47.33693,5.00888 47171,Tanlay,4825,BFC,75,FR,47.84488,4.08504 47190,Tavaux,4825,BFC,75,FR,47.03376,5.405 47210,Territoire de Belfort,4825,BFC,75,FR,47.63578,6.88843 47238,Thise,4825,BFC,75,FR,47.28486,6.08127 47250,Thorigny-sur-Oreuse,4825,BFC,75,FR,48.29297,3.40128 47297,Tonnerre,4825,BFC,75,FR,47.85628,3.97369 47300,Torcy,4825,BFC,75,FR,46.76857,4.45333 47307,Toucy,4825,BFC,75,FR,47.73602,3.29502 47314,Toulon-sur-Arroux,4825,BFC,75,FR,46.69345,4.13869 47329,Tournus,4825,BFC,75,FR,46.56758,4.90574 47436,Urzy,4825,BFC,75,FR,47.04877,3.20295 47460,Vaivre-et-Montoille,4825,BFC,75,FR,47.63021,6.10362 47468,Valdahon,4825,BFC,75,FR,47.15,6.35 47469,Valdoie,4825,BFC,75,FR,47.67041,6.84203 47477,Valentigney,4825,BFC,75,FR,47.46388,6.83168 47482,Valfin-lès-Saint-Claude,4825,BFC,75,FR,46.43758,5.85513 47513,Varennes-le-Grand,4825,BFC,75,FR,46.71868,4.86872 47511,Varennes-Saint-Sauveur,4825,BFC,75,FR,46.48226,5.24349 47512,Varennes-Vauzelles,4825,BFC,75,FR,47.01678,3.14037 47519,Varois-et-Chaignot,4825,BFC,75,FR,47.35059,5.12838 47523,Varzy,4825,BFC,75,FR,47.3581,3.38619 47559,Velars-sur-Ouche,4825,BFC,75,FR,47.3196,4.90594 47563,Venarey-les-Laumes,4825,BFC,75,FR,47.54202,4.46022 47586,Venoy,4825,BFC,75,FR,47.80518,3.63695 47592,Vercel-Villedieu-le-Camp,4825,BFC,75,FR,47.18318,6.40082 47595,Verdun-sur-le-Doubs,4825,BFC,75,FR,46.89692,5.02127 47598,Vergigny,4825,BFC,75,FR,47.97059,3.71861 47605,Vermenton,4825,BFC,75,FR,47.66459,3.73501 47930,Véron,4825,BFC,75,FR,48.12853,3.30773 47648,Vesoul,4825,BFC,75,FR,47.62604,6.14251 47689,Vieux-Charmont,4825,BFC,75,FR,47.5219,6.83738 47723,Villeblevin,4825,BFC,75,FR,48.32446,3.08038 47774,Villeneuve-la-Guyard,4825,BFC,75,FR,48.34093,3.06176 47785,Villeneuve-sur-Yonne,4825,BFC,75,FR,48.08247,3.29688 47805,Villers-le-Lac,4825,BFC,75,FR,47.06319,6.66699 47811,Villersexel,4825,BFC,75,FR,47.5507,6.43273 47848,Vinneuf,4825,BFC,75,FR,48.34795,3.14013 47860,Virey-le-Grand,4825,BFC,75,FR,46.83333,4.86667 47877,Vitteaux,4825,BFC,75,FR,47.39732,4.5419 47907,Voujeaucourt,4825,BFC,75,FR,47.47513,6.77431 39254,Acigné,4807,BRE,75,FR,48.13333,-1.53704 39318,Allaire,4807,BRE,75,FR,47.63752,-2.16324 39345,Amanlis,4807,BRE,75,FR,48.00752,-1.47677 39356,Ambon,4807,BRE,75,FR,47.55367,-2.55512 39436,Antrain,4807,BRE,75,FR,48.46031,-1.48354 39485,Argentré-du-Plessis,4807,BRE,75,FR,48.05697,-1.14601 39510,Arradon,4807,BRE,75,FR,47.62709,-2.8215 39534,Arzano,4807,BRE,75,FR,47.90136,-3.44032 39536,Arzon,4807,BRE,75,FR,47.54852,-2.88989 39597,Audierne,4807,BRE,75,FR,48.0164,-4.53838 39604,Augan,4807,BRE,75,FR,47.91943,-2.27905 39623,Auray,4807,BRE,75,FR,47.67025,-2.99183 39703,Baden,4807,BRE,75,FR,47.61734,-2.91987 39716,Baguer-Morvan,4807,BRE,75,FR,48.52531,-1.77332 39717,Baguer-Pican,4807,BRE,75,FR,48.55253,-1.69837 39732,Bain-de-Bretagne,4807,BRE,75,FR,47.84418,-1.68486 39736,Bains-sur-Oust,4807,BRE,75,FR,47.70362,-2.07047 39738,Bais,4807,BRE,75,FR,48.00959,-1.28983 39747,Balazé,4807,BRE,75,FR,48.16797,-1.19157 39760,Bannalec,4807,BRE,75,FR,47.93229,-3.69759 39808,Baud,4807,BRE,75,FR,47.87474,-3.0176 39813,Baulon,4807,BRE,75,FR,47.9859,-1.93114 39834,Bazouges-la-Pérouse,4807,BRE,75,FR,48.42606,-1.57431 39844,Beaucé,4807,BRE,75,FR,48.3389,-1.15804 40415,Bédée,4807,BRE,75,FR,48.17953,-1.94477 40417,Béganne,4807,BRE,75,FR,47.5967,-2.24162 40418,Bégard,4807,BRE,75,FR,48.62754,-3.30067 39900,Beignon,4807,BRE,75,FR,47.972,-2.16933 39910,Belle-Isle-en-Terre,4807,BRE,75,FR,48.54478,-3.395 39937,Belz,4807,BRE,75,FR,47.67506,-3.168 40425,Bénodet,4807,BRE,75,FR,47.87531,-4.1058 39958,Berné,4807,BRE,75,FR,47.9947,-3.39421 39961,Berric,4807,BRE,75,FR,47.63326,-2.5225 39962,Berrien,4807,BRE,75,FR,48.40278,-3.75266 39987,Betton,4807,BRE,75,FR,48.18048,-1.63829 39994,Beuzec-Cap-Sizun,4807,BRE,75,FR,48.07567,-4.512 40016,Bignan,4807,BRE,75,FR,47.87935,-2.77153 40026,Binic,4807,BRE,75,FR,48.60074,-2.82602 40078,Bodilis,4807,BRE,75,FR,48.52978,-4.11567 40082,Bohars,4807,BRE,75,FR,48.42983,-4.51292 40092,Boisgervilly,4807,BRE,75,FR,48.16692,-2.06426 40120,Bonnemain,4807,BRE,75,FR,48.46652,-1.76774 40182,Bourbriac,4807,BRE,75,FR,48.47384,-3.18758 40188,Bourg-Blanc,4807,BRE,75,FR,48.49867,-4.50406 40193,Bourg-des-Comptes,4807,BRE,75,FR,47.92934,-1.74534 40198,Bourgbarré,4807,BRE,75,FR,47.99515,-1.61419 40253,Brandérion,4807,BRE,75,FR,47.79412,-3.19474 40260,Brasparts,4807,BRE,75,FR,48.30167,-3.95516 40354,Bréal-sous-Montfort,4807,BRE,75,FR,48.04876,-1.86438 40357,Brécé,4807,BRE,75,FR,48.10839,-1.48086 40272,Brech,4807,BRE,75,FR,47.72134,-2.99862 40359,Bréhand,4807,BRE,75,FR,48.40333,-2.57412 40279,Brest,4807,BRE,75,FR,48.39029,-4.48628 40280,Breteil,4807,BRE,75,FR,48.14534,-1.89886 40307,Briec,4807,BRE,75,FR,48.10167,-3.99833 40333,Broons,4807,BRE,75,FR,48.31748,-2.25952 40352,Bruz,4807,BRE,75,FR,48.0242,-1.74591 40367,Bubry,4807,BRE,75,FR,47.96336,-3.17108 40452,Caden,4807,BRE,75,FR,47.63124,-2.28704 40471,Callac,4807,BRE,75,FR,48.40292,-3.428 40482,Camaret-sur-Mer,4807,BRE,75,FR,48.27497,-4.59615 40495,Camors,4807,BRE,75,FR,47.84739,-2.99981 40503,Campénéac,4807,BRE,75,FR,47.95733,-2.29277 40504,Cancale,4807,BRE,75,FR,48.67601,-1.85231 40535,Carantec,4807,BRE,75,FR,48.66811,-3.91545 40542,Carentoir,4807,BRE,75,FR,47.81667,-2.13333 40544,Carhaix-Plouguer,4807,BRE,75,FR,48.27594,-3.57326 40550,Carnac,4807,BRE,75,FR,47.58351,-3.07884 40553,Caro,4807,BRE,75,FR,47.86429,-2.31924 40573,Cast,4807,BRE,75,FR,48.15712,-4.13889 40601,Caudan,4807,BRE,75,FR,47.80877,-3.3425 40606,Caulnes,4807,BRE,75,FR,48.28804,-2.15518 40619,Cavan,4807,BRE,75,FR,48.67242,-3.34606 40661,Cesson-Sévigné,4807,BRE,75,FR,48.1212,-1.603 40770,Chanteloup,4807,BRE,75,FR,47.96574,-1.61517 40774,Chantepie,4807,BRE,75,FR,48.08885,-1.61524 40820,Chartres-de-Bretagne,4807,BRE,75,FR,48.03924,-1.70533 40823,Chasné-sur-Illet,4807,BRE,75,FR,48.24247,-1.56138 40951,Châteaubourg,4807,BRE,75,FR,48.11119,-1.40019 40956,Châteaugiron,4807,BRE,75,FR,48.04629,-1.50438 40957,Châteaulin,4807,BRE,75,FR,48.19677,-4.09008 40966,Châteauneuf-d’Ille-et-Vilaine,4807,BRE,75,FR,48.56083,-1.92838 40963,Châteauneuf-du-Faou,4807,BRE,75,FR,48.18755,-3.81789 40996,Châtillon-en-Vendelais,4807,BRE,75,FR,48.22409,-1.17695 41004,Châtillon-sur-Seiche,4807,BRE,75,FR,48.03448,-1.67114 40855,Chavagne,4807,BRE,75,FR,48.05438,-1.78571 40884,Cherrueix,4807,BRE,75,FR,48.60629,-1.70405 40891,Chevaigné,4807,BRE,75,FR,48.21153,-1.62933 41024,Cintré,4807,BRE,75,FR,48.10504,-1.87162 41067,Cléden-Poher,4807,BRE,75,FR,48.23644,-3.66911 41068,Cléder,4807,BRE,75,FR,48.663,-4.102 41069,Cléguer,4807,BRE,75,FR,47.85407,-3.38219 41070,Cléguérec,4807,BRE,75,FR,48.12577,-3.07162 41057,Clohars-Carnoët,4807,BRE,75,FR,47.79606,-3.58502 41058,Clohars-Fouesnant,4807,BRE,75,FR,47.89657,-4.06396 41291,Coësmes,4807,BRE,75,FR,47.88325,-1.44074 41292,Coëtmieux,4807,BRE,75,FR,48.49117,-2.60067 41107,Colpo,4807,BRE,75,FR,47.81778,-2.81002 41110,Combourg,4807,BRE,75,FR,48.41267,-1.74424 41112,Combrit,4807,BRE,75,FR,47.88734,-4.15817 41127,Concarneau,4807,BRE,75,FR,47.87502,-3.92245 41160,Coray,4807,BRE,75,FR,48.05934,-3.83056 41177,Corlay,4807,BRE,75,FR,48.31725,-3.05733 41200,Corps-Nuds,4807,BRE,75,FR,47.97915,-1.58409 41204,Corseul,4807,BRE,75,FR,48.4818,-2.16947 41294,Crach,4807,BRE,75,FR,47.617,-3.0017 41343,Crédin,4807,BRE,75,FR,48.03462,-2.7663 41346,Créhen,4807,BRE,75,FR,48.54546,-2.21307 41314,Crevin,4807,BRE,75,FR,47.93333,-1.66667 41334,Crozon,4807,BRE,75,FR,48.24643,-4.48993 41412,Damgan,4807,BRE,75,FR,47.51799,-2.57698 41431,Daoulas,4807,BRE,75,FR,48.36089,-4.25977 41604,Département dIlle-et-Vilaine,4807,BRE,75,FR,48.16667,-1.5 41635,Département des Côtes-d’Armor,4807,BRE,75,FR,48.34295,-2.78216 41640,Département du Finistère,4807,BRE,75,FR,48.25224,-3.99263 41482,Dinan,4807,BRE,75,FR,48.45551,-2.05019 41483,Dinard,4807,BRE,75,FR,48.63143,-2.06144 41488,Dinéault,4807,BRE,75,FR,48.21922,-4.16411 41486,Dingé,4807,BRE,75,FR,48.35702,-1.71489 41491,Dirinon,4807,BRE,75,FR,48.39775,-4.27017 41503,Dol-de-Bretagne,4807,BRE,75,FR,48.54765,-1.75018 41509,Domagné,4807,BRE,75,FR,48.07081,-1.39291 41510,Domalain,4807,BRE,75,FR,47.99617,-1.2425 41546,Douarnenez,4807,BRE,75,FR,48.09542,-4.32904 41659,Edern,4807,BRE,75,FR,48.1,-3.98333 41663,Elliant,4807,BRE,75,FR,47.99417,-3.88966 41665,Elven,4807,BRE,75,FR,47.7323,-2.58956 41687,Epiniac,4807,BRE,75,FR,48.5,-1.7 41690,Erbrée,4807,BRE,75,FR,48.09745,-1.12479 41692,Ercé-en-Lamée,4807,BRE,75,FR,47.83048,-1.55867 41693,Ercé-près-Liffré,4807,BRE,75,FR,48.25454,-1.5156 41694,Erdeven,4807,BRE,75,FR,47.6421,-3.15706 41695,Ergué-Gabéric,4807,BRE,75,FR,47.99562,-4.02223 41700,Erquy,4807,BRE,75,FR,48.63186,-2.4628 41722,Esquibien,4807,BRE,75,FR,48.02506,-4.56139 48090,Étables-sur-Mer,4807,BRE,75,FR,48.63333,-2.83333 48101,Étel,4807,BRE,75,FR,47.65614,-3.20018 48108,Étrelles,4807,BRE,75,FR,48.06031,-1.19402 48121,Évran,4807,BRE,75,FR,48.37987,-1.98076 42004,Férel,4807,BRE,75,FR,47.48203,-2.34227 41923,Fouesnant,4807,BRE,75,FR,47.89187,-4.01484 41927,Fougères,4807,BRE,75,FR,48.35185,-1.19989 41928,Fouillard,4807,BRE,75,FR,48.1582,-1.57915 41983,Fréhel,4807,BRE,75,FR,48.63333,-2.36667 42057,Gaël,4807,BRE,75,FR,48.13209,-2.22267 42079,Gestel,4807,BRE,75,FR,47.80361,-3.44245 42301,Gévezé,4807,BRE,75,FR,48.21933,-1.78952 42114,Glomel,4807,BRE,75,FR,48.223,-3.39696 42141,Gosné,4807,BRE,75,FR,48.24674,-1.46558 42143,Gouarec,4807,BRE,75,FR,48.22725,-3.17994 42145,Goudelin,4807,BRE,75,FR,48.60375,-3.01842 42146,Gouesnach,4807,BRE,75,FR,47.9104,-4.1145 42147,Gouesnou,4807,BRE,75,FR,48.45267,-4.46456 42161,Gouézec,4807,BRE,75,FR,48.16911,-3.97277 42151,Gourin,4807,BRE,75,FR,48.13866,-3.60755 42162,Goven,4807,BRE,75,FR,48.00638,-1.84629 42232,Grâces,4807,BRE,75,FR,48.55651,-3.18533 42170,Grand-Champ,4807,BRE,75,FR,47.75804,-2.84635 42174,Grand-Fougeray,4807,BRE,75,FR,47.7239,-1.7321 42221,Groix,4807,BRE,75,FR,47.63887,-3.4543 42278,Guégon,4807,BRE,75,FR,47.93707,-2.5645 42281,Guémené-sur-Scorff,4807,BRE,75,FR,48.06667,-3.2 42240,Guengat,4807,BRE,75,FR,48.04193,-4.2047 42283,Guénin,4807,BRE,75,FR,47.90757,-2.97941 42242,Guer,4807,BRE,75,FR,47.90619,-2.12314 42243,Guerlesquin,4807,BRE,75,FR,48.51758,-3.58583 42245,Guern,4807,BRE,75,FR,48.02964,-3.09145 42252,Guichen,4807,BRE,75,FR,47.96762,-1.79534 42253,Guiclan,4807,BRE,75,FR,48.54967,-3.96211 42254,Guidel-Plage,4807,BRE,75,FR,47.76768,-3.5218 42255,Guignen,4807,BRE,75,FR,47.92009,-1.86161 42258,Guilers,4807,BRE,75,FR,48.42545,-4.55801 42260,Guillac,4807,BRE,75,FR,47.91096,-2.46571 42262,Guilliers,4807,BRE,75,FR,48.04286,-2.40562 42263,Guilvinec,4807,BRE,75,FR,47.79861,-4.28111 42264,Guingamp,4807,BRE,75,FR,48.56251,-3.15096 42265,Guipavas,4807,BRE,75,FR,48.43522,-4.39722 42266,Guipel,4807,BRE,75,FR,48.29937,-1.71866 42267,Guipry,4807,BRE,75,FR,47.82637,-1.84218 42269,Guiscriff,4807,BRE,75,FR,48.04944,-3.64356 42271,Guissény,4807,BRE,75,FR,48.63292,-4.40884 42324,Hanvec,4807,BRE,75,FR,48.32692,-4.15951 42449,Hédé-Bazouges,4807,BRE,75,FR,48.3,-1.8 42452,Hénanbihen,4807,BRE,75,FR,48.56072,-2.37602 42368,Hennebont,4807,BRE,75,FR,47.80512,-3.27337 42454,Hénon,4807,BRE,75,FR,48.38433,-2.68334 42370,Henvic,4807,BRE,75,FR,48.63256,-3.92623 42395,Hillion,4807,BRE,75,FR,48.51429,-2.66634 42400,Hirel,4807,BRE,75,FR,48.60502,-1.80224 42466,Hôpital-Camfrout,4807,BRE,75,FR,48.32789,-4.24155 42435,Huelgoat,4807,BRE,75,FR,48.36111,-3.74578 42471,Iffendic,4807,BRE,75,FR,48.12981,-2.03486 42490,Inguiniel,4807,BRE,75,FR,47.97658,-3.28072 42495,Irodouër,4807,BRE,75,FR,48.24932,-1.94959 42496,Irvillac,4807,BRE,75,FR,48.37011,-4.21223 42529,Janzé,4807,BRE,75,FR,47.95915,-1.49829 42544,Javené,4807,BRE,75,FR,48.31933,-1.2163 42564,Josselin,4807,BRE,75,FR,47.9572,-2.54713 42581,Jugon-les-Lacs,4807,BRE,75,FR,48.41667,-2.33333 42608,Kerlouan,4807,BRE,75,FR,48.645,-4.36556 42609,Kernilis,4807,BRE,75,FR,48.57075,-4.418 42610,Kersaint-Plabennec,4807,BRE,75,FR,48.47166,-4.37233 42612,Kervignac,4807,BRE,75,FR,47.76289,-3.23778 42652,La Bouëxière,4807,BRE,75,FR,48.18333,-1.43333 42651,La Boussac,4807,BRE,75,FR,48.5126,-1.66088 42693,La Chapelle-des-Fougeretz,4807,BRE,75,FR,48.17705,-1.73143 42681,La Chapelle-Janson,4807,BRE,75,FR,48.34775,-1.10209 42690,La Chapelle-Thouarault,4807,BRE,75,FR,48.12486,-1.86619 42731,La Dominelais,4807,BRE,75,FR,47.76229,-1.68819 42750,La Forest-Landerneau,4807,BRE,75,FR,48.42589,-4.31578 42751,La Forêt-Fouesnant,4807,BRE,75,FR,47.9101,-3.97858 42757,La Fresnais,4807,BRE,75,FR,48.59478,-1.84186 42760,La Gacilly,4807,BRE,75,FR,47.76562,-2.1322 42770,La Gouesnière,4807,BRE,75,FR,48.60467,-1.894 42775,La Guerche-de-Bretagne,4807,BRE,75,FR,47.94112,-1.22869 42821,La Méaugon,4807,BRE,75,FR,48.49933,-2.8385 42823,La Mézière,4807,BRE,75,FR,48.21829,-1.75514 42812,La Motte,4807,BRE,75,FR,48.23381,-2.73271 42846,La Richardais,4807,BRE,75,FR,48.60641,-2.03639 42852,La Roche-Derrien,4807,BRE,75,FR,48.74627,-3.26142 42853,La Roche-Maurice,4807,BRE,75,FR,48.47455,-4.20211 42899,La Trinité-sur-Mer,4807,BRE,75,FR,47.5868,-3.02994 42919,La Vraie-Croix,4807,BRE,75,FR,47.68954,-2.54274 42970,Laillé,4807,BRE,75,FR,47.97848,-1.71676 42985,Lamballe,4807,BRE,75,FR,48.46762,-2.51436 42993,Lampaul-Guimiliau,4807,BRE,75,FR,48.49156,-4.04144 42994,Lampaul-Plouarzel,4807,BRE,75,FR,48.44727,-4.76045 42997,Lancieux,4807,BRE,75,FR,48.60767,-2.1503 43000,Landaul,4807,BRE,75,FR,47.74785,-3.07694 43015,Landéan,4807,BRE,75,FR,48.41253,-1.15245 43016,Landéda,4807,BRE,75,FR,48.58733,-4.571 43017,Landéhen,4807,BRE,75,FR,48.43022,-2.53999 43001,Landeleau,4807,BRE,75,FR,48.22734,-3.7285 43003,Landerneau,4807,BRE,75,FR,48.45252,-4.25252 43018,Landévant,4807,BRE,75,FR,47.76499,-3.12221 43007,Landivisiau,4807,BRE,75,FR,48.50784,-4.06833 43011,Landrévarzec,4807,BRE,75,FR,48.09177,-4.06044 43013,Landudec,4807,BRE,75,FR,47.99983,-4.33641 43014,Landunvez,4807,BRE,75,FR,48.53466,-4.72545 43019,Lanester,4807,BRE,75,FR,47.76132,-3.33965 43024,Langoat,4807,BRE,75,FR,48.75061,-3.28121 43027,Langon,4807,BRE,75,FR,47.72057,-1.8501 43029,Langonnet,4807,BRE,75,FR,48.10511,-3.49356 43032,Langueux,4807,BRE,75,FR,48.495,-2.7185 43033,Languidic,4807,BRE,75,FR,47.83266,-3.15821 43034,Lanmeur,4807,BRE,75,FR,48.64733,-3.71645 43036,Lannilis,4807,BRE,75,FR,48.57091,-4.52233 43037,Lannion,4807,BRE,75,FR,48.73255,-3.45542 43041,Lanouée,4807,BRE,75,FR,48.00225,-2.58157 43043,Lanrivoaré,4807,BRE,75,FR,48.4731,-4.6387 43044,Lanrodec,4807,BRE,75,FR,48.51622,-3.03122 43048,Lantic,4807,BRE,75,FR,48.60641,-2.882 43052,Lanvallay,4807,BRE,75,FR,48.45543,-2.02803 43054,Lanvénégen,4807,BRE,75,FR,47.99811,-3.54134 43055,Lanvéoc,4807,BRE,75,FR,48.28799,-4.46277 43053,Lanvollon,4807,BRE,75,FR,48.63117,-2.98641 43072,Larmor-Baden,4807,BRE,75,FR,47.58341,-2.8944 43073,Larmor-Plage,4807,BRE,75,FR,47.70646,-3.38339 43088,Lassy,4807,BRE,75,FR,47.97829,-1.8719 43134,Le Bono,4807,BRE,75,FR,47.64129,-2.94902 43170,Le Conquet,4807,BRE,75,FR,48.36053,-4.77086 43182,Le Drennec,4807,BRE,75,FR,48.53475,-4.37008 43183,Le Faou,4807,BRE,75,FR,48.29456,-4.17927 43184,Le Faouët,4807,BRE,75,FR,48.03299,-3.49048 43192,Le Fœil,4807,BRE,75,FR,48.43333,-2.91667 43189,Le Folgoët,4807,BRE,75,FR,48.56359,-4.33641 43233,Le Minihic-sur-Rance,4807,BRE,75,FR,48.57835,-2.00876 43243,Le Palais,4807,BRE,75,FR,47.3459,-3.15488 43253,Le Pertre,4807,BRE,75,FR,48.03373,-1.03735 43293,Le Relecq-Kerhuon,4807,BRE,75,FR,48.40691,-4.39359 43295,Le Rheu,4807,BRE,75,FR,48.10228,-1.79733 43302,Le Sourn,4807,BRE,75,FR,48.04262,-2.9879 43311,Le Theil-de-Bretagne,4807,BRE,75,FR,47.9195,-1.42975 43325,Le Trévoux,4807,BRE,75,FR,47.89478,-3.6408 43333,Le Vieux-Marché,4807,BRE,75,FR,48.6,-3.45 43336,Le Vivier-sur-Mer,4807,BRE,75,FR,48.60169,-1.77303 43682,Lécousse,4807,BRE,75,FR,48.36458,-1.21289 43686,Léhon,4807,BRE,75,FR,48.44432,-2.04578 43375,Les Champs-Géraux,4807,BRE,75,FR,48.41647,-1.97087 43437,Lesneven,4807,BRE,75,FR,48.57233,-4.32133 43696,Lézardrieux,4807,BRE,75,FR,48.7851,-3.10588 43474,Liffré,4807,BRE,75,FR,48.21324,-1.50838 43491,Limerzel,4807,BRE,75,FR,47.63619,-2.35448 43522,Livré-sur-Changeon,4807,BRE,75,FR,48.21937,-1.34438 43528,Locmariaquer,4807,BRE,75,FR,47.56915,-2.94468 43529,Locminé,4807,BRE,75,FR,47.88619,-2.83536 43530,Locmiquélic,4807,BRE,75,FR,47.72499,-3.34153 43531,Locoal-Mendon,4807,BRE,75,FR,47.7052,-3.10796 43534,Locquémeau,4807,BRE,75,FR,48.72474,-3.56275 43533,Locquirec,4807,BRE,75,FR,48.69243,-3.64554 43535,Loctudy,4807,BRE,75,FR,47.83333,-4.16667 43539,Logonna-Daoulas,4807,BRE,75,FR,48.32308,-4.29675 43583,Lopérec,4807,BRE,75,FR,48.27734,-4.04756 43582,Loperhet,4807,BRE,75,FR,48.37725,-4.30608 43587,Lorient,4807,BRE,75,FR,47.74589,-3.36643 43598,Louannec,4807,BRE,75,FR,48.79423,-3.412 43599,Louargat,4807,BRE,75,FR,48.56576,-3.3375 43602,Loudéac,4807,BRE,75,FR,48.17826,-2.75433 43616,Louvigné-de-Bais,4807,BRE,75,FR,48.04898,-1.33091 43617,Louvigné-du-Désert,4807,BRE,75,FR,48.48047,-1.12537 43623,Loyat,4807,BRE,75,FR,47.98933,-2.38344 43645,Luitré,4807,BRE,75,FR,48.28247,-1.11866 43981,Maël-Carhaix,4807,BRE,75,FR,48.28444,-3.42322 43749,Malansac,4807,BRE,75,FR,47.67724,-2.29543 43757,Malestroit,4807,BRE,75,FR,47.80934,-2.38457 43758,Malguénac,4807,BRE,75,FR,48.08008,-3.05248 43914,Martigné-Ferchaud,4807,BRE,75,FR,47.82934,-1.31911 43924,Marzan,4807,BRE,75,FR,47.54069,-2.32466 43940,Matignon,4807,BRE,75,FR,48.59627,-2.29125 43951,Maure-de-Bretagne,4807,BRE,75,FR,47.89239,-1.99104 43957,Mauron,4807,BRE,75,FR,48.08257,-2.28477 43965,Maxent,4807,BRE,75,FR,47.98333,-2.03333 44459,Médréac,4807,BRE,75,FR,48.26703,-2.06618 43988,Meillac,4807,BRE,75,FR,48.41174,-1.81378 43992,Melesse,4807,BRE,75,FR,48.21771,-1.69496 43993,Melgven,4807,BRE,75,FR,47.90626,-3.83518 43994,Mellac,4807,BRE,75,FR,47.90345,-3.57675 43997,Melrand,4807,BRE,75,FR,47.98002,-3.10941 44466,Ménéac,4807,BRE,75,FR,48.13972,-2.46134 44015,Merdrignac,4807,BRE,75,FR,48.19372,-2.41533 44016,Merlevenez,4807,BRE,75,FR,47.73563,-3.23047 44028,Meslan,4807,BRE,75,FR,47.99502,-3.43285 44032,Messac,4807,BRE,75,FR,47.82399,-1.81085 44044,Meucon,4807,BRE,75,FR,47.71648,-2.7617 44072,Milizac,4807,BRE,75,FR,48.46667,-4.56667 44081,Miniac-Morvan,4807,BRE,75,FR,48.51477,-1.89955 44082,Minihy-Tréguier,4807,BRE,75,FR,48.77746,-3.22883 44427,Moëlan-sur-Mer,4807,BRE,75,FR,47.81418,-3.62892 44121,Molac,4807,BRE,75,FR,47.73011,-2.43484 44184,Montauban-de-Bretagne,4807,BRE,75,FR,48.19933,-2.04476 44221,Monterblanc,4807,BRE,75,FR,47.74211,-2.6795 44223,Monterfil,4807,BRE,75,FR,48.06733,-1.97905 44242,Montfort-sur-Meu,4807,BRE,75,FR,48.13542,-1.95201 44245,Montgermont,4807,BRE,75,FR,48.15592,-1.71464 44311,Montreuil-le-Gast,4807,BRE,75,FR,48.24647,-1.72498 44312,Montreuil-sous-Pérouse,4807,BRE,75,FR,48.15176,-1.23946 44313,Montreuil-sur-Ille,4807,BRE,75,FR,48.30788,-1.6688 44345,Morbihan,4807,BRE,75,FR,47.84765,-2.7776 44347,Mordelles,4807,BRE,75,FR,48.07571,-1.84286 44378,Moréac,4807,BRE,75,FR,47.91967,-2.81934 44357,Morlaix,4807,BRE,75,FR,48.57742,-3.82788 44410,Moustoir-Ac,4807,BRE,75,FR,47.85461,-2.83481 44493,Mûr-de-Bretagne,4807,BRE,75,FR,48.2,-2.98333 44450,Muzillac,4807,BRE,75,FR,47.55451,-2.48041 44498,Naizin,4807,BRE,75,FR,47.98993,-2.83287 44556,Neulliac,4807,BRE,75,FR,48.12836,-2.98289 44697,Névez,4807,BRE,75,FR,47.81924,-3.79225 44603,Nivillac,4807,BRE,75,FR,47.53371,-2.28298 44647,Nostang,4807,BRE,75,FR,47.7487,-3.18639 44662,Nouvoitou,4807,BRE,75,FR,48.04105,-1.54714 44669,Noyal-Muzillac,4807,BRE,75,FR,47.59169,-2.45557 44670,Noyal-Pontivy,4807,BRE,75,FR,48.06667,-2.88333 44671,Noyal-sur-Vilaine,4807,BRE,75,FR,48.11219,-1.52333 44766,Orgères,4807,BRE,75,FR,47.99886,-1.66781 44791,Ossé,4807,BRE,75,FR,48.05542,-1.45029 44823,Pabu,4807,BRE,75,FR,48.58608,-3.13608 44825,Pacé,4807,BRE,75,FR,48.14848,-1.77327 44829,Paimpol,4807,BRE,75,FR,48.77841,-3.04375 44830,Paimpont,4807,BRE,75,FR,48.01809,-2.17105 44841,Pancé,4807,BRE,75,FR,47.88181,-1.65953 44854,Parigné,4807,BRE,75,FR,48.42727,-1.1921 45342,Péaule,4807,BRE,75,FR,47.57972,-2.35601 45344,Pédernec,4807,BRE,75,FR,48.59682,-3.26948 44881,Peillac,4807,BRE,75,FR,47.71391,-2.21971 44890,Pencran,4807,BRE,75,FR,48.43333,-4.23333 45348,Pénestin,4807,BRE,75,FR,47.48226,-2.47275 44894,Penvénan,4807,BRE,75,FR,48.81182,-3.2955 44906,Perros-Guirec,4807,BRE,75,FR,48.81454,-3.43963 44976,Pipriac,4807,BRE,75,FR,47.80953,-1.94638 44980,Piré-sur-Seiche,4807,BRE,75,FR,48.00958,-1.42909 44987,Plabennec,4807,BRE,75,FR,48.50244,-4.42656 44990,Plaine-Haute,4807,BRE,75,FR,48.44442,-2.85416 44992,Plaintel,4807,BRE,75,FR,48.40733,-2.81733 45000,Plancoët,4807,BRE,75,FR,48.52199,-2.2354 45001,Planguenoual,4807,BRE,75,FR,48.533,-2.57642 45003,Plaudren,4807,BRE,75,FR,47.77868,-2.69331 45116,Pléchâtel,4807,BRE,75,FR,47.89496,-1.74876 45118,Plédéliac,4807,BRE,75,FR,48.45,-2.38333 45117,Plédran,4807,BRE,75,FR,48.446,-2.74667 45119,Pléguien,4807,BRE,75,FR,48.63525,-2.94001 45120,Pléhédel,4807,BRE,75,FR,48.69645,-3.00833 45006,Pleine-Fougères,4807,BRE,75,FR,48.53308,-1.56534 45121,Plélan-le-Grand,4807,BRE,75,FR,48.00124,-2.09914 45122,Plélan-le-Petit,4807,BRE,75,FR,48.43157,-2.2174 45123,Plélo,4807,BRE,75,FR,48.55534,-2.94634 45124,Plémet,4807,BRE,75,FR,48.17601,-2.59325 45125,Plémy,4807,BRE,75,FR,48.33644,-2.68244 45127,Plénée-Jugon,4807,BRE,75,FR,48.36462,-2.40036 45126,Pléneuf-Val-André,4807,BRE,75,FR,48.593,-2.54675 45007,Plerguer,4807,BRE,75,FR,48.52676,-1.84769 45128,Plérin,4807,BRE,75,FR,48.54249,-2.77983 45008,Plescop,4807,BRE,75,FR,47.69726,-2.8056 45009,Pleslin-Trigavou,4807,BRE,75,FR,48.53333,-2.06667 45010,Plessala,4807,BRE,75,FR,48.27642,-2.61876 45012,Plestan,4807,BRE,75,FR,48.42266,-2.44777 45013,Plestin-les-Grèves,4807,BRE,75,FR,48.65844,-3.63056 45014,Pleubian,4807,BRE,75,FR,48.84267,-3.139 45015,Pleucadeuc,4807,BRE,75,FR,47.75876,-2.37362 45016,Pleudaniel,4807,BRE,75,FR,48.76644,-3.14033 45017,Pleudihen-sur-Rance,4807,BRE,75,FR,48.51667,-1.96667 45018,Pleugriffet,4807,BRE,75,FR,47.98594,-2.68454 45019,Pleugueneuc,4807,BRE,75,FR,48.39735,-1.90301 45021,Pleumeleuc,4807,BRE,75,FR,48.18438,-1.91962 45022,Pleumeur-Bodou,4807,BRE,75,FR,48.76667,-3.51667 45023,Pleumeur-Gautier,4807,BRE,75,FR,48.80044,-3.15578 45024,Pleurtuit,4807,BRE,75,FR,48.57858,-2.05805 45025,Pleuven,4807,BRE,75,FR,47.9,-4.03333 45026,Pleyben,4807,BRE,75,FR,48.23333,-3.96667 45027,Pleyber-Christ,4807,BRE,75,FR,48.5,-3.86667 45028,Plobannalec-Lesconil,4807,BRE,75,FR,47.81667,-4.21667 45030,Ploemel,4807,BRE,75,FR,47.65153,-3.0703 45031,Ploemeur,4807,BRE,75,FR,47.73333,-3.43333 45100,Ploërdut,4807,BRE,75,FR,48.08742,-3.2855 45032,Ploeren,4807,BRE,75,FR,47.65713,-2.86397 45101,Ploërmel,4807,BRE,75,FR,47.93172,-2.39781 45129,Plœuc-sur-Lié,4807,BRE,75,FR,48.35,-2.75 45102,Ploëzal,4807,BRE,75,FR,48.71534,-3.20333 45033,Plogastel-Saint-Germain,4807,BRE,75,FR,47.98333,-4.26667 45034,Plogoff,4807,BRE,75,FR,48.037,-4.66606 45035,Plogonnec,4807,BRE,75,FR,48.08333,-4.18333 45038,Plomelin,4807,BRE,75,FR,47.93333,-4.15 45039,Plomeur,4807,BRE,75,FR,47.83333,-4.28333 45040,Plomodiern,4807,BRE,75,FR,48.18333,-4.23333 45041,Plonéis,4807,BRE,75,FR,48.01667,-4.21667 45042,Plonéour-Lanvern,4807,BRE,75,FR,47.9,-4.28333 45044,Plonévez-du-Faou,4807,BRE,75,FR,48.25,-3.83333 45043,Plonévez-Porzay,4807,BRE,75,FR,48.1,-4.21667 45045,Plouagat,4807,BRE,75,FR,48.53611,-2.99956 45046,Plouaret,4807,BRE,75,FR,48.61667,-3.46667 45047,Plouarzel,4807,BRE,75,FR,48.43333,-4.73333 45048,Plouasne,4807,BRE,75,FR,48.30081,-2.00698 45049,Plouay,4807,BRE,75,FR,47.91444,-3.33384 45050,Ploubalay,4807,BRE,75,FR,48.58109,-2.14069 45051,Ploubazlanec,4807,BRE,75,FR,48.8,-3.03333 45052,Ploubezre,4807,BRE,75,FR,48.7,-3.45 45053,Ploudalmézeau,4807,BRE,75,FR,48.53333,-4.65 45054,Ploudaniel,4807,BRE,75,FR,48.53333,-4.31667 45097,Plouëc-du-Trieux,4807,BRE,75,FR,48.68333,-3.2 45094,Plouédern,4807,BRE,75,FR,48.48333,-4.25 45095,Plouénan,4807,BRE,75,FR,48.63333,-4.0 45098,Plouër-sur-Rance,4807,BRE,75,FR,48.52669,-2.00298 45055,Plouescat,4807,BRE,75,FR,48.66667,-4.16667 45096,Plouézec,4807,BRE,75,FR,48.75122,-2.98467 45056,Plouezoch,4807,BRE,75,FR,48.63333,-3.81667 45057,Ploufragan,4807,BRE,75,FR,48.49141,-2.79458 45058,Plougasnou,4807,BRE,75,FR,48.7,-3.8 45059,Plougastel-Daoulas,4807,BRE,75,FR,48.36667,-4.36667 45060,Plougonvelin,4807,BRE,75,FR,48.34059,-4.71846 45061,Plougonven,4807,BRE,75,FR,48.51667,-3.71667 45062,Plougoulm,4807,BRE,75,FR,48.66667,-4.05 45063,Plougoumelen,4807,BRE,75,FR,47.6507,-2.91716 45064,Plougourvest,4807,BRE,75,FR,48.55,-4.08333 45065,Plougrescant,4807,BRE,75,FR,48.84026,-3.22886 45066,Plouguenast,4807,BRE,75,FR,48.28208,-2.70443 45067,Plouguerneau,4807,BRE,75,FR,48.6,-4.5 45068,Plouguernével,4807,BRE,75,FR,48.2394,-3.25071 45069,Plouguiel,4807,BRE,75,FR,48.79742,-3.23883 45070,Plouguin,4807,BRE,75,FR,48.53333,-4.6 45071,Plouha,4807,BRE,75,FR,48.6765,-2.92842 45072,Plouharnel,4807,BRE,75,FR,47.59804,-3.11274 45073,Plouhinec,4807,BRE,75,FR,48.01667,-4.48333 45074,Plouider,4807,BRE,75,FR,48.61667,-4.3 45075,Plouigneau,4807,BRE,75,FR,48.56667,-3.7 45076,Plouisy,4807,BRE,75,FR,48.57817,-3.18434 45077,Ploumagoar,4807,BRE,75,FR,48.54509,-3.13233 45078,Ploumilliau,4807,BRE,75,FR,48.68333,-3.51667 45079,Ploumoguer,4807,BRE,75,FR,48.4,-4.71667 45080,Plounéour-Ménez,4807,BRE,75,FR,48.45,-3.88333 45081,Plounéour-Trez,4807,BRE,75,FR,48.65,-4.31667 45082,Plounéventer,4807,BRE,75,FR,48.51667,-4.21667 45083,Plounévez-Lochrist,4807,BRE,75,FR,48.61667,-4.21667 45084,Plounévez-Moëdec,4807,BRE,75,FR,48.56667,-3.45 45085,Plounévez-Quintin,4807,BRE,75,FR,48.28333,-3.23333 45086,Plounévézel,4807,BRE,75,FR,48.3,-3.6 45087,Plouray,4807,BRE,75,FR,48.1458,-3.38671 45088,Plourin-lès-Morlaix,4807,BRE,75,FR,48.53333,-3.78333 45089,Plourivo,4807,BRE,75,FR,48.7455,-3.07075 45090,Plouvien,4807,BRE,75,FR,48.53333,-4.45 45091,Plouvorn,4807,BRE,75,FR,48.58333,-4.03333 45092,Plouzané,4807,BRE,75,FR,48.38333,-4.61667 45093,Plouzévédé,4807,BRE,75,FR,48.6,-4.11667 45099,Plozévet,4807,BRE,75,FR,47.98333,-4.41667 45103,Pluduno,4807,BRE,75,FR,48.5311,-2.26848 45104,Pluguffan,4807,BRE,75,FR,47.98333,-4.18333 45105,Pluherlin,4807,BRE,75,FR,47.69632,-2.36349 45106,Plumaugat,4807,BRE,75,FR,48.25479,-2.23843 45107,Plumelec,4807,BRE,75,FR,47.83754,-2.63987 45111,Pluméliau,4807,BRE,75,FR,47.95769,-2.97494 45108,Plumelin,4807,BRE,75,FR,47.86036,-2.88754 45109,Plumergat,4807,BRE,75,FR,47.74134,-2.91501 45110,Plumieux,4807,BRE,75,FR,48.10303,-2.58382 45112,Pluneret,4807,BRE,75,FR,47.67525,-2.95782 45113,Plurien,4807,BRE,75,FR,48.62559,-2.40423 45114,Pluvigner,4807,BRE,75,FR,47.77627,-3.01013 45115,Pluzunet,4807,BRE,75,FR,48.64076,-3.37113 45130,Pocé-les-Bois,4807,BRE,75,FR,48.11626,-1.25168 45148,Pommeret,4807,BRE,75,FR,48.46378,-2.62689 45149,Pommerit-Jaudy,4807,BRE,75,FR,48.73058,-3.24208 45150,Pommerit-le-Vicomte,4807,BRE,75,FR,48.61989,-3.09 45165,Pont-Aven,4807,BRE,75,FR,47.85,-3.75 45166,Pont-Croix,4807,BRE,75,FR,48.04088,-4.48714 45189,Pont-l’Abbé,4807,BRE,75,FR,47.86667,-4.21667 45176,Pont-Scorff,4807,BRE,75,FR,47.83343,-3.40251 45211,Pontivy,4807,BRE,75,FR,48.06862,-2.9628 45217,Pontrieux,4807,BRE,75,FR,48.70111,-3.15967 45222,Pordic,4807,BRE,75,FR,48.57051,-2.81783 45225,Porspoder,4807,BRE,75,FR,48.5,-4.76667 45228,Port-Louis,4807,BRE,75,FR,47.70704,-3.35484 45259,Pouldergat,4807,BRE,75,FR,48.05,-4.33333 45260,Pouldreuzic,4807,BRE,75,FR,47.95,-4.36667 45262,Poullan-sur-Mer,4807,BRE,75,FR,48.08333,-4.41667 45263,Poullaouen,4807,BRE,75,FR,48.33333,-3.65 45277,Prat,4807,BRE,75,FR,48.67677,-3.29707 45293,Priziac,4807,BRE,75,FR,48.06667,-3.41667 45406,Québriac,4807,BRE,75,FR,48.34444,-1.82723 45407,Quédillac,4807,BRE,75,FR,48.24904,-2.14241 45408,Quéménéven,4807,BRE,75,FR,48.11667,-4.11667 45373,Quemper-Guézennec,4807,BRE,75,FR,48.70378,-3.10522 45376,Querrien,4807,BRE,75,FR,47.96667,-3.53333 45378,Quessoy,4807,BRE,75,FR,48.42208,-2.66089 45379,Questembert,4807,BRE,75,FR,47.66296,-2.4522 45409,Quéven,4807,BRE,75,FR,47.78333,-3.41667 45410,Quévert,4807,BRE,75,FR,48.46402,-2.08745 45384,Quiberon,4807,BRE,75,FR,47.48412,-3.11963 45389,Quimper,4807,BRE,75,FR,48.0,-4.1 45390,Quimperlé,4807,BRE,75,FR,47.86667,-3.55 45401,Quintin,4807,BRE,75,FR,48.40342,-2.9105 45403,Quistinic,4807,BRE,75,FR,47.9041,-3.134 45429,Rannée,4807,BRE,75,FR,47.92383,-1.24124 45685,Rédené,4807,BRE,75,FR,47.85,-3.46667 45443,Redon,4807,BRE,75,FR,47.65141,-2.08481 45688,Réguiny,4807,BRE,75,FR,47.97649,-2.74478 45460,Rennes,4807,BRE,75,FR,48.11198,-1.67429 45468,Retiers,4807,BRE,75,FR,47.91392,-1.37967 45488,Riantec,4807,BRE,75,FR,47.71093,-3.31629 45499,Riec-sur-Belon,4807,BRE,75,FR,47.83333,-3.7 45504,Rieux,4807,BRE,75,FR,47.59781,-2.10828 45561,Rohan,4807,BRE,75,FR,48.06833,-2.7512 45572,Romagné,4807,BRE,75,FR,48.34019,-1.27751 45581,Romillé,4807,BRE,75,FR,48.21619,-1.89229 45598,Roscanvel,4807,BRE,75,FR,48.3152,-4.54937 45599,Roscoff,4807,BRE,75,FR,48.72381,-3.98709 45608,Rospez,4807,BRE,75,FR,48.7294,-3.38364 45609,Rosporden,4807,BRE,75,FR,47.96667,-3.83333 45611,Rostrenen,4807,BRE,75,FR,48.23696,-3.31442 45650,Roz-Landrieux,4807,BRE,75,FR,48.54337,-1.81586 45651,Roz-sur-Couesnon,4807,BRE,75,FR,48.58867,-1.59213 45665,Ruffiac,4807,BRE,75,FR,47.81866,-2.28238 45728,Saint-Agathon,4807,BRE,75,FR,48.55867,-3.10525 45734,Saint-Alban,4807,BRE,75,FR,48.5563,-2.54013 45775,Saint-Armel,4807,BRE,75,FR,48.01305,-1.59152 45786,Saint-Aubin-du-Cormier,4807,BRE,75,FR,48.25843,-1.40252 45799,Saint-Avé,4807,BRE,75,FR,47.69085,-2.74648 45802,Saint-Barnabé,4807,BRE,75,FR,48.13712,-2.70483 45822,Saint-Brandan,4807,BRE,75,FR,48.39008,-2.86875 45824,Saint-Briac-sur-Mer,4807,BRE,75,FR,48.62189,-2.13435 45827,Saint-Brice-en-Coglès,4807,BRE,75,FR,48.41157,-1.37019 45830,Saint-Brieuc,4807,BRE,75,FR,48.51513,-2.76838 45833,Saint-Broladre,4807,BRE,75,FR,48.58677,-1.65769 45839,Saint-Caradec,4807,BRE,75,FR,48.19429,-2.84386 45840,Saint-Carreuc,4807,BRE,75,FR,48.39889,-2.73056 45842,Saint-Cast-le-Guildo,4807,BRE,75,FR,48.63028,-2.25777 45876,Saint-Coulomb,4807,BRE,75,FR,48.67465,-1.91092 45906,Saint-Didier,4807,BRE,75,FR,48.09506,-1.37276 45914,Saint-Dolay,4807,BRE,75,FR,47.54476,-2.15466 45915,Saint-Domineuc,4807,BRE,75,FR,48.37191,-1.87544 45916,Saint-Donan,4807,BRE,75,FR,48.46958,-2.88442 45921,Saint-Erblon,4807,BRE,75,FR,48.01895,-1.65162 46656,Saint-Étienne-en-Coglès,4807,BRE,75,FR,48.40172,-1.32812 46659,Saint-Évarzec,4807,BRE,75,FR,47.93333,-4.01667 45979,Saint-Georges-de-Reintembault,4807,BRE,75,FR,48.50744,-1.24328 46014,Saint-Germain-en-Coglès,4807,BRE,75,FR,48.40531,-1.26369 46032,Saint-Gildas-de-Rhuys,4807,BRE,75,FR,47.5006,-2.83825 46035,Saint-Gilles,4807,BRE,75,FR,48.15381,-1.82477 46040,Saint-Gonnery,4807,BRE,75,FR,48.12465,-2.81848 46042,Saint-Grégoire,4807,BRE,75,FR,48.15085,-1.68706 46073,Saint-Hélen,4807,BRE,75,FR,48.47002,-1.95894 46075,Saint-Jacques-de-la-Lande,4807,BRE,75,FR,48.06514,-1.72086 46077,Saint-Jacut-les-Pins,4807,BRE,75,FR,47.68581,-2.21514 46084,Saint-Jean-Brévelay,4807,BRE,75,FR,47.84497,-2.72231 46115,Saint-Jean-la-Poterie,4807,BRE,75,FR,47.63581,-2.1242 46119,Saint-Jean-sur-Couesnon,4807,BRE,75,FR,48.29013,-1.36835 46131,Saint-Jouan-des-Guérets,4807,BRE,75,FR,48.59932,-1.97372 46135,Saint-Julien,4807,BRE,75,FR,48.45142,-2.8125 46152,Saint-Just,4807,BRE,75,FR,47.76581,-1.96096 46205,Saint-Lunaire,4807,BRE,75,FR,48.63811,-2.11392 46229,Saint-Malo,4807,BRE,75,FR,48.6472,-2.00883 46240,Saint-Marc-le-Blanc,4807,BRE,75,FR,48.36498,-1.40938 46284,Saint-Martin-des-Champs,4807,BRE,75,FR,48.58333,-3.83333 46304,Saint-Martin-sur-Oust,4807,BRE,75,FR,47.746,-2.25343 46351,Saint-Médard-sur-Ille,4807,BRE,75,FR,48.27202,-1.65968 46352,Saint-Méen-le-Grand,4807,BRE,75,FR,48.18971,-2.19486 46353,Saint-Méloir-des-Ondes,4807,BRE,75,FR,48.6379,-1.90448 46368,Saint-Nicolas-du-Pélem,4807,BRE,75,FR,48.31222,-3.16465 46371,Saint-Nolff,4807,BRE,75,FR,47.70365,-2.65209 46380,Saint-Ouen-des-Alleux,4807,BRE,75,FR,48.32805,-1.4259 46386,Saint-Pabu,4807,BRE,75,FR,48.56667,-4.6 46477,Saint-Père,4807,BRE,75,FR,48.58727,-1.92413 46422,Saint-Perreux,4807,BRE,75,FR,47.66952,-2.10809 46426,Saint-Philibert,4807,BRE,75,FR,47.58821,-2.99978 46433,Saint-Pierre-de-Plesguen,4807,BRE,75,FR,48.44638,-1.91278 46430,Saint-Pierre-Quiberon,4807,BRE,75,FR,47.52061,-3.13084 46455,Saint-Pol-de-Léon,4807,BRE,75,FR,48.68333,-3.98333 46483,Saint-Quay-Perros,4807,BRE,75,FR,48.78333,-3.45 46484,Saint-Quay-Portrieux,4807,BRE,75,FR,48.64992,-2.83059 46495,Saint-Renan,4807,BRE,75,FR,48.43333,-4.61667 46517,Saint-Samson-sur-Rance,4807,BRE,75,FR,48.49252,-2.02865 46535,Saint-Sauveur-des-Landes,4807,BRE,75,FR,48.34278,-1.31248 46547,Saint-Senoux,4807,BRE,75,FR,47.90552,-1.78819 46565,Saint-Sulpice-la-Forêt,4807,BRE,75,FR,48.21667,-1.57972 46584,Saint-Thégonnec,4807,BRE,75,FR,48.51667,-3.95 46581,Saint-Thonan,4807,BRE,75,FR,48.48333,-4.33333 46582,Saint-Thurial,4807,BRE,75,FR,48.02924,-1.93181 46583,Saint-Thuriau,4807,BRE,75,FR,48.01667,-2.95 46591,Saint-Urbain,4807,BRE,75,FR,48.4,-4.23333 46618,Saint-Vincent-sur-Oust,4807,BRE,75,FR,47.7001,-2.14657 46632,Saint-Yvi,4807,BRE,75,FR,47.96667,-3.93333 46664,Sainte-Anne-dAuray,4807,BRE,75,FR,47.7,-2.95 46698,Sainte-Hélène,4807,BRE,75,FR,47.71976,-3.20359 46707,Sainte-Marie,4807,BRE,75,FR,47.69429,-2.0019 46797,Santec,4807,BRE,75,FR,48.7,-4.03333 46824,Sarzeau,4807,BRE,75,FR,47.52772,-2.76933 46894,Scaër,4807,BRE,75,FR,48.03333,-3.7 47140,Séné,4807,BRE,75,FR,47.619,-2.737 46946,Sens-de-Bretagne,4807,BRE,75,FR,48.33245,-1.53535 47142,Sérent,4807,BRE,75,FR,47.82333,-2.50571 46974,Servon-sur-Vilaine,4807,BRE,75,FR,48.12114,-1.45971 47148,Sévignac,4807,BRE,75,FR,48.33297,-2.33915 46988,Sibiril,4807,BRE,75,FR,48.66667,-4.06667 47011,Sixt-sur-Aff,4807,BRE,75,FR,47.77648,-2.07867 47012,Sizun,4807,BRE,75,FR,48.4,-4.08333 47096,Spézet,4807,BRE,75,FR,48.2,-3.71667 47115,Sulniac,4807,BRE,75,FR,47.67375,-2.57136 47125,Surzur,4807,BRE,75,FR,47.5785,-2.62892 47154,Taden,4807,BRE,75,FR,48.4753,-2.01946 47163,Talensac,4807,BRE,75,FR,48.10847,-1.92829 47186,Taulé,4807,BRE,75,FR,48.6,-3.9 47187,Taupont,4807,BRE,75,FR,47.95961,-2.43933 47195,Telgruc-sur-Mer,4807,BRE,75,FR,48.23333,-4.35 47221,Theix,4807,BRE,75,FR,47.62916,-2.65186 47290,Tinténiac,4807,BRE,75,FR,48.3286,-1.8363 47298,Tonquédec,4807,BRE,75,FR,48.66886,-3.39712 47301,Torcé,4807,BRE,75,FR,48.0612,-1.26708 47390,Trébeurden,4807,BRE,75,FR,48.76667,-3.56667 47391,Trédarzec,4807,BRE,75,FR,48.78583,-3.201 47392,Trédrez-Locquémeau,4807,BRE,75,FR,48.7,-3.56667 47351,Treffiagat,4807,BRE,75,FR,47.81667,-4.26667 47352,Treffléan,4807,BRE,75,FR,47.68163,-2.61287 47393,Trégastel,4807,BRE,75,FR,48.81667,-3.5 47394,Tréguier,4807,BRE,75,FR,48.78333,-3.23333 47395,Trégunc,4807,BRE,75,FR,47.85,-3.85 47400,Trélévern,4807,BRE,75,FR,48.81071,-3.37141 47398,Trélivan,4807,BRE,75,FR,48.43198,-2.11748 47357,Tremblay,4807,BRE,75,FR,48.42216,-1.47555 47404,Tréméven,4807,BRE,75,FR,47.9,-3.53333 47403,Trémuson,4807,BRE,75,FR,48.52325,-2.84833 47360,Tresbœuf,4807,BRE,75,FR,47.88333,-1.55 47409,Trévé,4807,BRE,75,FR,48.21147,-2.79317 47407,Trévou-Tréguignec,4807,BRE,75,FR,48.81869,-3.34132 47504,Vannes,4807,BRE,75,FR,47.6579,-2.75574 47607,Vern-sur-Seiche,4807,BRE,75,FR,48.04514,-1.60057 47657,Vezin-le-Coquet,4807,BRE,75,FR,48.11857,-1.75466 47698,Vignoc,4807,BRE,75,FR,48.24842,-1.78169 47876,Vitré,4807,BRE,75,FR,48.11776,-1.20577 48006,Yffiniac,4807,BRE,75,FR,48.48428,-2.67647 48017,Yvignac-la-Tour,4807,BRE,75,FR,48.35,-2.18333 39237,Abilly,4818,CVL,75,FR,46.93333,0.73333 39244,Abondant,4818,CVL,75,FR,48.7859,1.44006 39279,Aigurande,4818,CVL,75,FR,46.43397,1.83026 39351,Ambillou,4818,CVL,75,FR,47.451,0.4473 39355,Amboise,4818,CVL,75,FR,47.41249,0.98266 39365,Amilly,4818,CVL,75,FR,47.97281,2.77186 39394,Anet,4818,CVL,75,FR,48.85642,1.43981 39467,Ardentes,4818,CVL,75,FR,46.74191,1.83428 39478,Argent-sur-Sauldre,4818,CVL,75,FR,47.55847,2.4441 39483,Argenton-sur-Creuse,4818,CVL,75,FR,46.58997,1.51981 39492,Armenonville-les-Gâtineaux,4818,CVL,75,FR,48.54365,1.6475 39512,Arrou,4818,CVL,75,FR,48.09768,1.12851 39518,Artannes-sur-Indre,4818,CVL,75,FR,47.27451,0.60036 39521,Artenay,4818,CVL,75,FR,48.08246,1.88098 39524,Arthon,4818,CVL,75,FR,46.69361,1.69857 39541,Aschères-le-Marché,4818,CVL,75,FR,48.11008,2.00725 39559,Athée-sur-Cher,4818,CVL,75,FR,47.32023,0.91659 39582,Aubigny-sur-Nère,4818,CVL,75,FR,47.48819,2.43895 39618,Aunay-sous-Auneau,4818,CVL,75,FR,48.4414,1.81094 39620,Auneau,4818,CVL,75,FR,48.46361,1.77263 39636,Authon-du-Perche,4818,CVL,75,FR,48.19615,0.89189 39638,Autry-le-Châtel,4818,CVL,75,FR,47.59886,2.602 39654,Auzouer-en-Touraine,4818,CVL,75,FR,47.5423,0.92067 39675,Avoine,4818,CVL,75,FR,47.20533,0.18253 39677,Avord,4818,CVL,75,FR,47.03514,2.65295 39693,Azay-le-Ferron,4818,CVL,75,FR,46.85097,1.07084 39694,Azay-le-Rideau,4818,CVL,75,FR,47.26405,0.47132 39695,Azay-sur-Cher,4818,CVL,75,FR,47.34966,0.84562 39698,Azé,4818,CVL,75,FR,47.85141,0.99829 39723,Bailleau-l’Évêque,4818,CVL,75,FR,48.4896,1.39665 39722,Bailleau-le-Pin,4818,CVL,75,FR,48.36698,1.32948 39752,Ballan-Miré,4818,CVL,75,FR,47.34057,0.61466 39786,Barjouville,4818,CVL,75,FR,48.41002,1.47639 39809,Baugy,4818,CVL,75,FR,47.08181,2.72848 39811,Baule,4818,CVL,75,FR,47.81084,1.67259 39832,Bazoches-les-Gallerandes,4818,CVL,75,FR,48.1654,2.04319 39848,Beaugency,4818,CVL,75,FR,47.78019,1.62705 39851,Beaulieu-lès-Loches,4818,CVL,75,FR,47.12526,1.01585 39867,Beaumont-en-Véron,4818,CVL,75,FR,47.19397,0.18436 39868,Beaumont-la-Ronce,4818,CVL,75,FR,47.56948,0.67017 39875,Beaune-la-Rolande,4818,CVL,75,FR,48.07124,2.4314 40422,Bélâbre,4818,CVL,75,FR,46.55121,1.15791 39912,Bellegarde,4818,CVL,75,FR,47.98333,2.43333 39924,Belleville-sur-Loire,4818,CVL,75,FR,47.5,2.85 40435,Béville-le-Comte,4818,CVL,75,FR,48.43558,1.71305 40053,Blancafort,4818,CVL,75,FR,47.53219,2.52981 40076,Bléré,4818,CVL,75,FR,47.32738,0.99186 40069,Blois,4818,CVL,75,FR,47.59432,1.32912 40083,Boigny-sur-Bionne,4818,CVL,75,FR,47.93333,2.01667 40091,Boiscommun,4818,CVL,75,FR,48.03576,2.38333 40124,Bonneval,4818,CVL,75,FR,48.18312,1.38524 40129,Bonny-sur-Loire,4818,CVL,75,FR,47.56172,2.83933 40170,Boulleret,4818,CVL,75,FR,47.42419,2.87343 40199,Bourges,4818,CVL,75,FR,47.08333,2.4 40206,Bourgueil,4818,CVL,75,FR,47.28333,0.16612 40237,Bouzy-la-Forêt,4818,CVL,75,FR,47.8512,2.37773 40241,Boynes,4818,CVL,75,FR,48.11822,2.36006 40247,Bracieux,4818,CVL,75,FR,47.54895,1.5412 40267,Bray-en-Val,4818,CVL,75,FR,47.82856,2.36644 40299,Brezolles,4818,CVL,75,FR,48.69033,1.07404 40301,Briare,4818,CVL,75,FR,47.63343,2.7438 40304,Bricy,4818,CVL,75,FR,47.99847,1.77937 40317,Brinon-sur-Sauldre,4818,CVL,75,FR,47.566,2.25647 40334,Brou,4818,CVL,75,FR,48.21719,1.16539 40438,Bû,4818,CVL,75,FR,48.79705,1.49702 40406,Buzançais,4818,CVL,75,FR,46.88877,1.4195 40508,Candé-sur-Beuvron,4818,CVL,75,FR,47.49499,1.25937 40511,Cangey,4818,CVL,75,FR,47.46718,1.06051 40635,Cellettes,4818,CVL,75,FR,47.52758,1.38102 40640,Cepoy,4818,CVL,75,FR,48.04795,2.73782 40643,Cerdon,4818,CVL,75,FR,47.63571,2.36277 40644,Cerelles,4818,CVL,75,FR,47.50168,0.68333 40672,Chabris,4818,CVL,75,FR,47.25343,1.65181 40676,Chaillac,4818,CVL,75,FR,46.43382,1.29889 40678,Chailles,4818,CVL,75,FR,47.5416,1.3122 40683,Chaingy,4818,CVL,75,FR,47.88326,1.77059 40932,Châlette-sur-Loing,4818,CVL,75,FR,48.01337,2.73587 40710,Chambourg-sur-Indre,4818,CVL,75,FR,47.18159,0.96863 40711,Chambray-lès-Tours,4818,CVL,75,FR,47.33537,0.70286 40737,Champhol,4818,CVL,75,FR,48.46813,1.50281 40757,Chanceaux-sur-Choisille,4818,CVL,75,FR,47.47145,0.70539 40762,Changy-les-Bois,4818,CVL,75,FR,47.85793,2.68543 40767,Chanteau,4818,CVL,75,FR,47.96651,1.97129 40778,Chantôme,4818,CVL,75,FR,46.41067,1.5559 40796,Charentilly,4818,CVL,75,FR,47.46981,0.60903 40797,Charenton-du-Cher,4818,CVL,75,FR,46.73007,2.64438 40799,Chargé,4818,CVL,75,FR,47.4327,1.03037 40936,Chârost,4818,CVL,75,FR,46.9939,2.11639 40819,Chartres,4818,CVL,75,FR,48.44685,1.48925 40949,Château-la-Vallière,4818,CVL,75,FR,47.54665,0.32458 40943,Château-Renard,4818,CVL,75,FR,47.93333,2.93333 40944,Château-Renault,4818,CVL,75,FR,47.59188,0.91143 40953,Châteaudun,4818,CVL,75,FR,48.07086,1.33783 40958,Châteaumeillant,4818,CVL,75,FR,46.56219,2.19515 40967,Châteauneuf-en-Thymerais,4818,CVL,75,FR,48.58112,1.24085 40972,Châteauneuf-sur-Cher,4818,CVL,75,FR,46.85778,2.3171 40974,Châteauneuf-sur-Loire,4818,CVL,75,FR,47.86575,2.21903 40978,Châteauroux,4818,CVL,75,FR,46.81248,1.69362 40993,Châtillon-Coligny,4818,CVL,75,FR,47.82266,2.84563 41000,Châtillon-sur-Cher,4818,CVL,75,FR,47.27571,1.49424 41002,Châtillon-sur-Indre,4818,CVL,75,FR,46.98735,1.17218 41008,Châtres-sur-Cher,4818,CVL,75,FR,47.26505,1.90591 40837,Chaudon,4818,CVL,75,FR,48.66276,1.4967 40845,Chaumont-sur-Loire,4818,CVL,75,FR,47.48108,1.18929 40846,Chaumont-sur-Tharonne,4818,CVL,75,FR,47.61039,1.90514 41010,Chécy,4818,CVL,75,FR,47.89402,2.02304 40868,Cheillé,4818,CVL,75,FR,47.26114,0.40553 40880,Cher,4818,CVL,75,FR,47.11304,2.50983 40882,Cherisy,4818,CVL,75,FR,48.75,1.43333 40895,Cheverny,4818,CVL,75,FR,47.50079,1.45951 40898,Chevillon-sur-Huillard,4818,CVL,75,FR,47.96197,2.62601 40899,Chevilly,4818,CVL,75,FR,48.02973,1.87402 40907,Chilleurs-aux-Bois,4818,CVL,75,FR,48.0722,2.1354 40912,Chinon,4818,CVL,75,FR,47.16701,0.24284 40916,Chissay-en-Touraine,4818,CVL,75,FR,47.33747,1.13362 40917,Chitenay,4818,CVL,75,FR,47.49753,1.37139 40928,Chouzé-sur-Loire,4818,CVL,75,FR,47.23673,0.12364 40927,Chouzy-sur-Cisse,4818,CVL,75,FR,47.52576,1.24661 41021,Cinq-Mars-la-Pile,4818,CVL,75,FR,47.34638,0.45873 41032,Civray-de-Touraine,4818,CVL,75,FR,47.33253,1.04952 41075,Cléré-les-Pins,4818,CVL,75,FR,47.4255,0.38963 41074,Cléry-Saint-André,4818,CVL,75,FR,47.82218,1.75091 41055,Clion,4818,CVL,75,FR,46.94085,1.23214 41061,Cloyes-sur-le-Loir,4818,CVL,75,FR,47.99726,1.23711 41062,Cluis,4818,CVL,75,FR,46.54486,1.74933 41156,Contres,4818,CVL,75,FR,47.41754,1.42849 41165,Corbeilles,4818,CVL,75,FR,48.07201,2.5503 41182,Cormeray,4818,CVL,75,FR,47.49195,1.4061 41183,Cormery,4818,CVL,75,FR,47.26812,0.83583 41201,Corquilleroy,4818,CVL,75,FR,48.04212,2.70382 41231,Coullons,4818,CVL,75,FR,47.62105,2.49258 41234,Coulombs,4818,CVL,75,FR,48.65253,1.54646 41240,Cour-Cheverny,4818,CVL,75,FR,47.51033,1.45583 41263,Cours-les-Barres,4818,CVL,75,FR,47.02513,3.03167 41268,Courtenay,4818,CVL,75,FR,48.03901,3.05851 41272,Courville-sur-Eure,4818,CVL,75,FR,48.44899,1.24085 41361,Cuffy,4818,CVL,75,FR,46.96275,3.05238 41403,Dadonville,4818,CVL,75,FR,48.15776,2.2715 41414,Dammarie,4818,CVL,75,FR,48.34314,1.49444 41419,Dampierre-en-Burly,4818,CVL,75,FR,47.76143,2.51962 41437,Darvoy,4818,CVL,75,FR,47.85839,2.10033 41602,Déols,4818,CVL,75,FR,46.82934,1.70428 41603,Département dEure-et-Loir,4818,CVL,75,FR,48.5,1.5 41605,Département dIndre-et-Loire,4818,CVL,75,FR,47.25,0.75 41619,Département de lIndre,4818,CVL,75,FR,46.83333,1.66667 41641,Département du Loir-et-Cher,4818,CVL,75,FR,47.5,1.5 41455,Descartes,4818,CVL,75,FR,46.96667,0.7 41464,Dhuizon,4818,CVL,75,FR,47.58723,1.65809 41533,Donnery,4818,CVL,75,FR,47.91486,2.10299 41538,Dordives,4818,CVL,75,FR,48.14253,2.76775 41548,Douchy,4818,CVL,75,FR,47.94282,3.05392 41574,Dreux,4818,CVL,75,FR,48.73649,1.36566 41577,Droué,4818,CVL,75,FR,48.04023,1.07534 41576,Droue-sur-Drouette,4818,CVL,75,FR,48.60053,1.70113 41582,Dry,4818,CVL,75,FR,47.79612,1.7133 41590,Dun-sur-Auron,4818,CVL,75,FR,46.8849,2.57345 48053,Écueillé,4818,CVL,75,FR,47.08462,1.34668 48062,Éguzon-Chantôme,4818,CVL,75,FR,46.45,1.58333 48074,Épernon,4818,CVL,75,FR,48.61031,1.67218 48076,Épieds-en-Beauce,4818,CVL,75,FR,47.95066,1.61732 41739,Esvres,4818,CVL,75,FR,47.28537,0.78588 41785,Faverolles-sur-Cher,4818,CVL,75,FR,47.31732,1.19045 41787,Fay-aux-Loges,4818,CVL,75,FR,47.92724,2.14012 42006,Férolles,4818,CVL,75,FR,47.83475,2.11113 41849,Fleury-les-Aubrais,4818,CVL,75,FR,47.93328,1.91811 41941,Foëcy,4818,CVL,75,FR,47.17618,2.16257 41873,Fondettes,4818,CVL,75,FR,47.4035,0.59686 41879,Fontaine-la-Guyon,4818,CVL,75,FR,48.4727,1.31417 41903,Fontenay-sur-Loing,4818,CVL,75,FR,48.10365,2.77542 41995,Fussy,4818,CVL,75,FR,47.14372,2.42953 42021,Gallardon,4818,CVL,75,FR,48.52622,1.69307 42046,Garnay,4818,CVL,75,FR,48.70489,1.33706 42051,Gasville-Oisème,4818,CVL,75,FR,48.46973,1.53843 42065,Genillé,4818,CVL,75,FR,47.18333,1.1 42087,Gidy,4818,CVL,75,FR,47.98539,1.83816 42088,Gien,4818,CVL,75,FR,47.69332,2.63094 42112,Gièvres,4818,CVL,75,FR,47.27847,1.66943 42194,Graçay,4818,CVL,75,FR,47.14371,1.84733 42322,Hanches,4818,CVL,75,FR,48.60115,1.65137 42369,Henrichemont,4818,CVL,75,FR,47.30333,2.52458 42371,Herbault,4818,CVL,75,FR,47.60501,1.13934 42384,Herry,4818,CVL,75,FR,47.21667,2.95385 42437,Huismes,4818,CVL,75,FR,47.23319,0.25116 42438,Huisseau-sur-Cosson,4818,CVL,75,FR,47.59335,1.45333 42439,Huisseau-sur-Mauves,4818,CVL,75,FR,47.89319,1.70274 42489,Ingré,4818,CVL,75,FR,47.91995,1.82778 42507,Issoudun,4818,CVL,75,FR,46.94848,1.99362 42527,Janville,4818,CVL,75,FR,48.20284,1.8802 42532,Jargeau,4818,CVL,75,FR,47.86316,2.12648 42579,Joué-lès-Tours,4818,CVL,75,FR,47.35223,0.66905 42568,Jouet-sur-lAubois,4818,CVL,75,FR,47.04562,2.98725 42572,Jouy,4818,CVL,75,FR,48.51005,1.54501 42577,Jouy-le-Potier,4818,CVL,75,FR,47.74553,1.81115 42628,LÎle-Bouchard,4818,CVL,75,FR,47.11667,0.41667 42638,La Bazoche-Gouet,4818,CVL,75,FR,48.13985,0.98163 42671,La Celle-Saint-Avant,4818,CVL,75,FR,47.022,0.60488 42696,La Chapelle-du-Noyer,4818,CVL,75,FR,48.03191,1.30953 42688,La Chapelle-Saint-Mesmin,4818,CVL,75,FR,47.88648,1.8345 42689,La Chapelle-Saint-Ursin,4818,CVL,75,FR,47.06248,2.32447 42701,La Chapelle-sur-Loire,4818,CVL,75,FR,47.25063,0.21887 42707,La Châtre,4818,CVL,75,FR,46.58228,1.98734 42704,La Chaussée-Saint-Victor,4818,CVL,75,FR,47.61621,1.36765 42724,La Croix-en-Touraine,4818,CVL,75,FR,47.34031,0.99024 42739,La Ferté-Imbault,4818,CVL,75,FR,47.38467,1.95344 42742,La Ferté-Saint-Aubin,4818,CVL,75,FR,47.71695,1.93904 42795,La Loupe,4818,CVL,75,FR,48.4732,1.01585 42804,La Membrolle-sur-Choisille,4818,CVL,75,FR,47.43719,0.63163 42847,La Riche,4818,CVL,75,FR,47.38996,0.67072 42912,La Ville-aux-Clercs,4818,CVL,75,FR,47.91835,1.08521 42913,La Ville-aux-Dames,4818,CVL,75,FR,47.39551,0.76837 42952,Ladon,4818,CVL,75,FR,48.00259,2.53724 42969,Lailly-en-Val,4818,CVL,75,FR,47.76962,1.68657 42992,Lamotte-Beuvron,4818,CVL,75,FR,47.602,2.02837 43022,Langeais,4818,CVL,75,FR,47.32587,0.40136 43083,Larçay,4818,CVL,75,FR,47.36649,0.78145 43130,Le Blanc,4818,CVL,75,FR,46.63371,1.06272 43168,Le Châtelet,4818,CVL,75,FR,46.64247,2.28229 43172,Le Coudray,4818,CVL,75,FR,48.42115,1.50057 43198,Le Grand-Pressigny,4818,CVL,75,FR,46.92017,0.8038 43289,Le Pêchereau,4818,CVL,75,FR,46.57677,1.54743 43271,Le Poinçonnet,4818,CVL,75,FR,46.7641,1.7179 43691,Léré,4818,CVL,75,FR,47.46867,2.86981 43358,Les Aix-d’Angillon,4818,CVL,75,FR,47.19652,2.56506 43410,Les Montils,4818,CVL,75,FR,47.49499,1.29775 43680,Lèves,4818,CVL,75,FR,48.47065,1.48194 43451,Levet,4818,CVL,75,FR,46.92605,2.40732 43453,Levroux,4818,CVL,75,FR,46.9786,1.61243 43476,Lignières,4818,CVL,75,FR,46.75152,2.17381 43480,Ligny-le-Ribault,4818,CVL,75,FR,47.68419,1.78153 43482,Ligré,4818,CVL,75,FR,47.11185,0.27562 43483,Ligueil,4818,CVL,75,FR,47.0421,0.81893 43527,Loches,4818,CVL,75,FR,47.12858,0.99522 43542,Loiret,4818,CVL,75,FR,47.93598,2.30173 43595,Lorris,4818,CVL,75,FR,47.8895,2.51478 43610,Loury,4818,CVL,75,FR,47.99944,2.08474 43627,Luant,4818,CVL,75,FR,46.733,1.55793 43675,Luçay-le-Mâle,4818,CVL,75,FR,47.12996,1.44173 43638,Lucé,4818,CVL,75,FR,48.43689,1.46359 43644,Luisant,4818,CVL,75,FR,48.4295,1.47383 43651,Lunay,4818,CVL,75,FR,47.80864,0.91499 43655,Lunery,4818,CVL,75,FR,46.93569,2.26895 43657,Luray,4818,CVL,75,FR,48.72035,1.39889 43669,Luynes,4818,CVL,75,FR,47.38441,0.5547 43739,Maintenon,4818,CVL,75,FR,48.58704,1.57847 43740,Mainvilliers,4818,CVL,75,FR,48.45003,1.45607 43756,Malesherbes,4818,CVL,75,FR,48.29566,2.40935 43786,Manthelan,4818,CVL,75,FR,47.13632,0.79319 43794,Marboué,4818,CVL,75,FR,48.11377,1.3321 43805,Marcilly-en-Villette,4818,CVL,75,FR,47.76505,2.02266 43818,Mardié,4818,CVL,75,FR,47.88617,2.05745 43819,Mareau-aux-Prés,4818,CVL,75,FR,47.86667,1.78333 43829,Mareuil-sur-Cher,4818,CVL,75,FR,47.29314,1.32897 43836,Margon,4818,CVL,75,FR,48.33568,0.83454 43843,Marigny-les-Usages,4818,CVL,75,FR,47.95799,2.01462 43858,Marmagne,4818,CVL,75,FR,47.1,2.28333 43920,Martizay,4818,CVL,75,FR,46.80767,1.04324 43931,Massay,4818,CVL,75,FR,47.15324,1.99334 43976,Mazières-de-Touraine,4818,CVL,75,FR,47.38326,0.42548 43985,Mehun-sur-Yèvre,4818,CVL,75,FR,47.13782,2.21105 44464,Ménestreau-en-Villette,4818,CVL,75,FR,47.69962,2.02333 44000,Menetou-Salon,4818,CVL,75,FR,47.23172,2.48715 44009,Mer,4818,CVL,75,FR,47.70555,1.50621 44469,Méreau,4818,CVL,75,FR,47.16295,2.05086 44039,Mettray,4818,CVL,75,FR,47.45251,0.64939 44047,Meung-sur-Loire,4818,CVL,75,FR,47.83124,1.69582 44488,Mézières-en-Brenne,4818,CVL,75,FR,46.81979,1.21123 44489,Mézières-en-Drouais,4818,CVL,75,FR,48.72413,1.4244 44138,Mondoubleau,4818,CVL,75,FR,47.98061,0.89782 44144,Monnaie,4818,CVL,75,FR,47.50162,0.78872 44162,Mont-près-Chambord,4818,CVL,75,FR,47.56235,1.45712 44179,Montargis,4818,CVL,75,FR,47.99696,2.73261 44193,Montbazon,4818,CVL,75,FR,47.28348,0.69988 44211,Montcresson,4818,CVL,75,FR,47.90561,2.80796 44248,Montgivray,4818,CVL,75,FR,46.60324,1.98162 44254,Montierchaume,4818,CVL,75,FR,46.86362,1.77181 44274,Montlivault,4818,CVL,75,FR,47.63987,1.44487 44275,Montlouis-sur-Loire,4818,CVL,75,FR,47.38845,0.83208 44293,Montoire-sur-le-Loir,4818,CVL,75,FR,47.75316,0.86525 44317,Montrichard,4818,CVL,75,FR,47.3431,1.18653 44327,Monts,4818,CVL,75,FR,47.27723,0.62473 44339,Morancez,4818,CVL,75,FR,48.40051,1.49388 44379,Morée,4818,CVL,75,FR,47.90397,1.23421 44431,Muides-sur-Loire,4818,CVL,75,FR,47.66958,1.52694 44438,Mur-de-Sologne,4818,CVL,75,FR,47.41239,1.60832 44515,Nargis,4818,CVL,75,FR,48.11106,2.75597 44522,Naveil,4818,CVL,75,FR,47.79576,1.03222 44526,Nazelles-Négron,4818,CVL,75,FR,47.43333,0.95 44696,Nérondes,4818,CVL,75,FR,46.99758,2.81834 44554,Neuillé-Pont-Pierre,4818,CVL,75,FR,47.5484,0.54962 44557,Neung-sur-Beuvron,4818,CVL,75,FR,47.53486,1.80514 44565,Neuville-aux-Bois,4818,CVL,75,FR,48.06813,2.05372 44578,Neuvy-le-Roi,4818,CVL,75,FR,47.60386,0.59472 44575,Neuvy-Pailloux,4818,CVL,75,FR,46.88486,1.86152 44576,Neuvy-Saint-Sépulchre,4818,CVL,75,FR,46.59781,1.80601 44579,Neuvy-sur-Barangeon,4818,CVL,75,FR,47.31495,2.25343 44584,Nevoy,4818,CVL,75,FR,47.71591,2.57791 44599,Niherne,4818,CVL,75,FR,46.82768,1.56384 44611,Nogent-le-Phaye,4818,CVL,75,FR,48.44528,1.57777 44612,Nogent-le-Roi,4818,CVL,75,FR,48.64785,1.52933 44613,Nogent-le-Rotrou,4818,CVL,75,FR,48.32157,0.82177 44618,Nogent-sur-Vernisson,4818,CVL,75,FR,47.84603,2.74267 44632,Noizay,4818,CVL,75,FR,47.42188,0.89201 44658,Nouan-le-Fuzelier,4818,CVL,75,FR,47.536,2.03647 44663,Nouzilly,4818,CVL,75,FR,47.54499,0.74623 44679,Noyers-sur-Cher,4818,CVL,75,FR,47.27701,1.4032 44733,Olivet,4818,CVL,75,FR,47.86219,1.8991 44746,Onzain,4818,CVL,75,FR,47.49956,1.17701 44767,Orgères-en-Beauce,4818,CVL,75,FR,48.14636,1.6838 44774,Orléans,4818,CVL,75,FR,47.90289,1.90389 44776,Ormes,4818,CVL,75,FR,47.94152,1.81823 44787,Orval,4818,CVL,75,FR,46.72581,2.47144 44802,Oucques,4818,CVL,75,FR,47.82252,1.29383 44806,Oulins,4818,CVL,75,FR,48.86451,1.47038 44812,Outarville,4818,CVL,75,FR,48.21393,2.02198 44815,Ouzouer-le-Marché,4818,CVL,75,FR,47.91055,1.52607 44816,Ouzouer-sur-Loire,4818,CVL,75,FR,47.76638,2.48038 44817,Ouzouer-sur-Trézée,4818,CVL,75,FR,47.67266,2.808 44844,Pannes,4818,CVL,75,FR,48.01937,2.66755 44860,Parçay-Meslay,4818,CVL,75,FR,47.44195,0.74847 44866,Patay,4818,CVL,75,FR,48.04833,1.695 44907,Perrusson,4818,CVL,75,FR,47.09873,1.01438 44962,Pierres,4818,CVL,75,FR,48.59209,1.56444 44984,Pithiviers,4818,CVL,75,FR,48.17185,2.25185 44985,Pithiviers-le-Vieil,4818,CVL,75,FR,48.16313,2.20922 44989,Plaimpied-Givaudins,4818,CVL,75,FR,46.998,2.45428 45131,Pocé-sur-Cisse,4818,CVL,75,FR,47.4433,0.99142 45134,Poilly-lez-Gien,4818,CVL,75,FR,47.67724,2.59743 45212,Pontlevoy,4818,CVL,75,FR,47.39002,1.25465 45261,Pouligny-Saint-Pierre,4818,CVL,75,FR,46.68095,1.03877 45284,Preuilly-sur-Claise,4818,CVL,75,FR,46.85424,0.92954 45301,Pruniers-en-Sologne,4818,CVL,75,FR,47.31667,1.66667 45320,Puiseaux,4818,CVL,75,FR,48.09234,2.05967 45385,Quiers-sur-Bézonde,4818,CVL,75,FR,47.99615,2.44141 45440,Rebréchien,4818,CVL,75,FR,47.98727,2.04432 45447,Reignac-sur-Indre,4818,CVL,75,FR,47.22662,0.91587 45465,Restigné,4818,CVL,75,FR,47.28224,0.22788 45472,Reugny,4818,CVL,75,FR,47.48208,0.88468 45473,Reuilly,4818,CVL,75,FR,47.08476,2.04305 45487,Rians,4818,CVL,75,FR,47.17875,2.61359 45496,Richelieu,4818,CVL,75,FR,47.01389,0.32406 45543,Rochecorbon,4818,CVL,75,FR,47.41658,0.75521 45582,Romorantin-Lanthenay,4818,CVL,75,FR,47.36667,1.75 45644,Rouziers-de-Touraine,4818,CVL,75,FR,47.5172,0.64848 45706,Saché,4818,CVL,75,FR,47.24707,0.54455 45732,Saint-Aignan,4818,CVL,75,FR,47.26892,1.37614 45741,Saint-Amand-Longpré,4818,CVL,75,FR,47.68333,1.01667 45742,Saint-Amand-Montrond,4818,CVL,75,FR,46.72284,2.50494 45772,Saint-Antoine-du-Rocher,4818,CVL,75,FR,47.49677,0.62997 45783,Saint-Aubin-des-Bois,4818,CVL,75,FR,48.46549,1.35784 45797,Saint-Avertin,4818,CVL,75,FR,47.36357,0.73993 45800,Saint-Ay,4818,CVL,75,FR,47.8589,1.75137 45812,Saint-Benoît-sur-Loire,4818,CVL,75,FR,47.80561,2.31274 45821,Saint-Branchs,4818,CVL,75,FR,47.22655,0.77306 45832,Saint-Brisson-sur-Loire,4818,CVL,75,FR,47.64686,2.68229 45859,Saint-Christophe-sur-le-Nais,4818,CVL,75,FR,47.6172,0.47801 45867,Saint-Claude-de-Diray,4818,CVL,75,FR,47.61651,1.41798 45884,Saint-Cyr-en-Val,4818,CVL,75,FR,47.83182,1.96672 45887,Saint-Cyr-sur-Loire,4818,CVL,75,FR,47.4,0.66667 45900,Saint-Denis-en-Val,4818,CVL,75,FR,47.87321,1.96601 45902,Saint-Denis-les-Ponts,4818,CVL,75,FR,48.06692,1.29764 45917,Saint-Doulchard,4818,CVL,75,FR,47.10371,2.352 45919,Saint-Dyé-sur-Loire,4818,CVL,75,FR,47.65595,1.48847 46637,Saint-Éloy-de-Gy,4818,CVL,75,FR,47.15552,2.34267 46640,Saint-Épain,4818,CVL,75,FR,47.14482,0.53668 46644,Saint-Étienne-de-Chigny,4818,CVL,75,FR,47.38333,0.53333 45936,Saint-Florent-sur-Cher,4818,CVL,75,FR,46.99552,2.25076 45952,Saint-Gaultier,4818,CVL,75,FR,46.63518,1.41289 45989,Saint-Georges-sur-Cher,4818,CVL,75,FR,47.32996,1.13261 45990,Saint-Georges-sur-Eure,4818,CVL,75,FR,48.41869,1.3546 46008,Saint-Germain-des-Prés,4818,CVL,75,FR,47.95384,2.84846 46013,Saint-Germain-du-Puy,4818,CVL,75,FR,47.1,2.48333 46028,Saint-Gervais-la-Forêt,4818,CVL,75,FR,47.56705,1.35493 46053,Saint-Hilaire-Saint-Mesmin,4818,CVL,75,FR,47.86614,1.83351 46089,Saint-Jean-de-Braye,4818,CVL,75,FR,47.91303,1.97705 46105,Saint-Jean-de-la-Ruelle,4818,CVL,75,FR,47.91127,1.86483 46116,Saint-Jean-le-Blanc,4818,CVL,75,FR,47.89327,1.9154 46174,Saint-Laurent-Nouan,4818,CVL,75,FR,47.71667,1.6 46202,Saint-Lubin-des-Joncherets,4818,CVL,75,FR,48.76667,1.21667 46244,Saint-Marcel,4818,CVL,75,FR,46.60193,1.51324 46294,Saint-Martin-d’Auxigny,4818,CVL,75,FR,47.20371,2.41553 46275,Saint-Martin-de-Nigelles,4818,CVL,75,FR,48.61234,1.6092 46300,Saint-Martin-le-Beau,4818,CVL,75,FR,47.35566,0.90953 46303,Saint-Martin-sur-Ocre,4818,CVL,75,FR,47.65942,2.6581 46309,Saint-Maur,4818,CVL,75,FR,46.80657,1.63904 46320,Saint-Maurice-sur-Fessard,4818,CVL,75,FR,47.99231,2.62157 46363,Saint-Nicolas-de-Bourgueil,4818,CVL,75,FR,47.28493,0.12727 46377,Saint-Ouen,4818,CVL,75,FR,47.81404,1.08067 46399,Saint-Paterne-Racan,4818,CVL,75,FR,47.60213,0.48478 46479,Saint-Père-sur-Loire,4818,CVL,75,FR,47.76667,2.36667 46427,Saint-Piat,4818,CVL,75,FR,48.54668,1.58363 46435,Saint-Pierre-des-Corps,4818,CVL,75,FR,47.38623,0.74849 46463,Saint-Prest,4818,CVL,75,FR,48.49107,1.53034 46475,Saint-Pryvé-Saint-Mesmin,4818,CVL,75,FR,47.88177,1.8695 46515,Saint-Rémy-sur-Avre,4818,CVL,75,FR,48.76143,1.24532 46506,Saint-Romain-sur-Cher,4818,CVL,75,FR,47.31877,1.39956 46518,Saint-Satur,4818,CVL,75,FR,47.33914,2.83734 46562,Saint-Sulpice-de-Pommeray,4818,CVL,75,FR,47.6,1.26667 46622,Saint-Viâtre,4818,CVL,75,FR,47.52438,1.93276 46692,Sainte-Geneviève-des-Bois,4818,CVL,75,FR,47.81777,2.81652 46702,Sainte-Lizaigne,4818,CVL,75,FR,47.00695,2.02266 46717,Sainte-Maure-de-Touraine,4818,CVL,75,FR,47.1113,0.62236 46727,Sainte-Solange,4818,CVL,75,FR,47.13628,2.55019 46743,Salbris,4818,CVL,75,FR,47.4242,2.05124 46781,Sancerre,4818,CVL,75,FR,47.32889,2.83447 46783,Sancoins,4818,CVL,75,FR,46.83314,2.92238 46786,Sandillon,4818,CVL,75,FR,47.8451,2.03155 46801,Saran,4818,CVL,75,FR,47.95013,1.87601 46806,Sargé-sur-Braye,4818,CVL,75,FR,47.92352,0.8534 46855,Saussay,4818,CVL,75,FR,48.85571,1.40889 46885,Savigné-sur-Lathan,4818,CVL,75,FR,47.44483,0.32093 46878,Savigny-en-Sancerre,4818,CVL,75,FR,47.44142,2.80953 46879,Savigny-en-Véron,4818,CVL,75,FR,47.20071,0.14457 46882,Savigny-sur-Braye,4818,CVL,75,FR,47.87923,0.80981 46887,Savonnières,4818,CVL,75,FR,47.34769,0.54961 46920,Seigy,4818,CVL,75,FR,47.25688,1.39964 46930,Selles-Saint-Denis,4818,CVL,75,FR,47.38695,1.92295 46931,Selles-sur-Cher,4818,CVL,75,FR,47.27904,1.55387 46936,Semblançay,4818,CVL,75,FR,47.5,0.58333 46937,Semoy,4818,CVL,75,FR,47.93333,1.95 46943,Senonches,4818,CVL,75,FR,48.55999,1.03069 46956,Sermaises,4818,CVL,75,FR,48.2965,2.20546 47017,Soings-en-Sologne,4818,CVL,75,FR,47.41289,1.52452 47041,Sonzay,4818,CVL,75,FR,47.52687,0.46203 47044,Sorel-Moussel,4818,CVL,75,FR,48.83391,1.36699 47047,Sorigny,4818,CVL,75,FR,47.24329,0.6952 47064,Souesmes,4818,CVL,75,FR,47.45638,2.17495 47085,Sours,4818,CVL,75,FR,48.41043,1.59889 47128,Suèvres,4818,CVL,75,FR,47.66655,1.46153 47114,Sully-sur-Loire,4818,CVL,75,FR,47.76372,2.37238 47189,Tauxigny,4818,CVL,75,FR,47.21337,0.83479 47193,Tavers,4818,CVL,75,FR,47.75921,1.61267 47220,Theillay,4818,CVL,75,FR,47.31429,2.04028 47272,Thésée,4818,CVL,75,FR,47.32345,1.30882 47235,Thilouze,4818,CVL,75,FR,47.22415,0.57963 47237,Thiron Gardais,4818,CVL,75,FR,48.31667,0.98333 47281,Tigy,4818,CVL,75,FR,47.79365,2.19767 47327,Tournon-Saint-Martin,4818,CVL,75,FR,46.73423,0.95514 47333,Tours,4818,CVL,75,FR,47.39484,0.70398 47339,Toury,4818,CVL,75,FR,48.19397,1.93484 47350,Traînou,4818,CVL,75,FR,47.97353,2.10399 47405,Tréon,4818,CVL,75,FR,48.67709,1.32668 47374,Triguères,4818,CVL,75,FR,47.93975,2.9857 47384,Trouy,4818,CVL,75,FR,47.01153,2.36018 47388,Truyes,4818,CVL,75,FR,47.27299,0.85179 47428,Unverre,4818,CVL,75,FR,48.19829,1.09207 47479,Valençay,4818,CVL,75,FR,47.16207,1.56852 47525,Vasselay,4818,CVL,75,FR,47.15686,2.38963 47527,Vatan,4818,CVL,75,FR,47.07447,1.8101 47555,Veigné,4818,CVL,75,FR,47.28556,0.74079 47579,Vendœuvres,4818,CVL,75,FR,46.8,1.35 47578,Vendôme,4818,CVL,75,FR,47.79292,1.06556 47585,Vennecy,4818,CVL,75,FR,47.95465,2.05459 47928,Véretz,4818,CVL,75,FR,47.35706,0.80575 47622,Vernou-sur-Brenne,4818,CVL,75,FR,47.41936,0.84757 47624,Vernouillet,4818,CVL,75,FR,48.7209,1.36951 47636,Vert-en-Drouais,4818,CVL,75,FR,48.76029,1.2946 47684,Vienne-en-Val,4818,CVL,75,FR,47.80036,2.1346 47685,Vierzon,4818,CVL,75,FR,47.22186,2.0684 47700,Vignoux-sur-Barangeon,4818,CVL,75,FR,47.20068,2.17258 47708,Villandry,4818,CVL,75,FR,47.34019,0.5105 47721,Villebarou,4818,CVL,75,FR,47.62344,1.32252 47731,Villedieu-sur-Indre,4818,CVL,75,FR,46.84598,1.53975 47732,Villedômer,4818,CVL,75,FR,47.54651,0.88775 47739,Villefranche-sur-Cher,4818,CVL,75,FR,47.3,1.76667 47749,Villemandeur,4818,CVL,75,FR,47.98701,2.71802 47750,Villemeux-sur-Eure,4818,CVL,75,FR,48.67259,1.4647 47831,Villiers-le-Morhier,4818,CVL,75,FR,48.62018,1.56349 47832,Villiers-sur-Loir,4818,CVL,75,FR,47.80507,0.99774 47839,Vimory,4818,CVL,75,FR,47.94786,2.68701 47846,Vineuil,4818,CVL,75,FR,47.5838,1.37601 47871,Vitry-aux-Loges,4818,CVL,75,FR,47.93333,2.26667 47915,Vouvray,4818,CVL,75,FR,47.41087,0.79892 47917,Vouzon,4818,CVL,75,FR,47.64515,2.05609 47918,Voves,4818,CVL,75,FR,48.27138,1.62583 48023,Yèvres,4818,CVL,75,FR,48.21078,1.18717 48022,Yzeures-sur-Creuse,4818,CVL,75,FR,46.78609,0.87166 39256,Afa,4806,COR,75,FR,41.98396,8.79833 39298,Ajaccio,4806,COR,75,FR,41.91886,8.73812 39300,Alata,4806,COR,75,FR,41.97636,8.74208 39308,Albitreccia,4806,COR,75,FR,41.86301,8.94262 39343,Aléria,4806,COR,75,FR,42.10431,9.51265 39442,Appietto,4806,COR,75,FR,42.01426,8.76855 39804,Bastia,4806,COR,75,FR,42.70278,9.45 40018,Biguglia,4806,COR,75,FR,42.62692,9.42018 40114,Bonifacio,4806,COR,75,FR,41.3874,9.15941 40140,Borgo,4806,COR,75,FR,42.55488,9.42636 40252,Brando,4806,COR,75,FR,42.76667,9.45 40470,Calenzana,4806,COR,75,FR,42.50855,8.85538 40479,Calvi,4806,COR,75,FR,42.56604,8.75713 40543,Cargèse,4806,COR,75,FR,42.13629,8.59586 40611,Cauro,4806,COR,75,FR,41.91756,8.9148 40657,Cervione,4806,COR,75,FR,42.32835,9.49343 41205,Corte,4806,COR,75,FR,42.30956,9.14917 41384,Cuttoli-Corticchiato,4806,COR,75,FR,41.98333,8.91667 41625,Département de la Corse-du-Sud,4806,COR,75,FR,41.91667,9.16667 41628,Département de la Haute-Corse,4806,COR,75,FR,42.41667,9.16667 41818,Figari,4806,COR,75,FR,41.48792,9.13013 41994,Furiani,4806,COR,75,FR,42.65847,9.41446 42084,Ghisonaccia,4806,COR,75,FR,42.01582,9.40507 42227,Grosseto-Prugna,4806,COR,75,FR,41.87097,8.96403 42629,LÎle-Rousse,4806,COR,75,FR,42.63371,8.93764 43502,Linguizzetta,4806,COR,75,FR,42.26384,9.47297 43631,Lucciana,4806,COR,75,FR,42.54609,9.41865 43650,Lumio,4806,COR,75,FR,42.57894,8.83373 44252,Monticello,4806,COR,75,FR,42.61705,8.95477 44363,Morosaglia,4806,COR,75,FR,42.43511,9.30009 44732,Oletta,4806,COR,75,FR,42.62991,9.35431 44736,Olmeto,4806,COR,75,FR,41.71724,8.91783 44893,Penta-di-Casinca,4806,COR,75,FR,42.46579,9.45884 44896,Peri,4806,COR,75,FR,42.00345,8.92066 44966,Pietranera,4806,COR,75,FR,42.72338,9.45621 44967,Pietrosella,4806,COR,75,FR,41.83576,8.84573 45245,Porto-Vecchio,4806,COR,75,FR,41.59101,9.27947 45294,Propriano,4806,COR,75,FR,41.6759,8.90412 45300,Prunelli-di-Fiumorbo,4806,COR,75,FR,42.01047,9.32473 45932,Saint-Florent,4806,COR,75,FR,42.6815,9.30396 46778,San-Martino-di-Lota,4806,COR,75,FR,42.73163,9.43966 46779,San-Nicolao,4806,COR,75,FR,42.36993,9.51443 46795,Santa-Lucia-di-Moriani,4806,COR,75,FR,42.38212,9.52242 46796,Santa-Maria-di-Lota,4806,COR,75,FR,42.74783,9.43202 46807,Sari-Solenzara,4806,COR,75,FR,41.83519,9.3747 46817,Sarrola,4806,COR,75,FR,42.02828,8.84241 46823,Sartène,4806,COR,75,FR,41.61667,8.98333 47007,Sisco,4806,COR,75,FR,42.8,9.43333 47588,Ventiseri,4806,COR,75,FR,41.94356,9.33342 47647,Vescovato,4806,COR,75,FR,42.49293,9.43934 48028,Zonza,4806,COR,75,FR,41.74934,9.17082 39245,Abreschviller,4820,GES,75,FR,48.63698,7.09607 39249,Achenheim,4820,GES,75,FR,48.5807,7.62803 39269,Aiglemont,4820,GES,75,FR,49.78031,4.76483 39293,Aix-en-Othe,4820,GES,75,FR,48.22391,3.73425 39312,Algolsheim,4820,GES,75,FR,48.00629,7.55945 39313,Algrange,4820,GES,75,FR,49.36276,6.05094 39336,Alsting,4820,GES,75,FR,49.18175,6.99255 39338,Altkirch,4820,GES,75,FR,47.62417,7.23954 39339,Altorf,4820,GES,75,FR,48.52166,7.52787 39346,Amanvillers,4820,GES,75,FR,49.16784,6.04367 39366,Ammerschwihr,4820,GES,75,FR,48.12548,7.28282 39367,Amnéville,4820,GES,75,FR,49.25671,6.13414 39372,Ancerville,4820,GES,75,FR,48.63574,5.02091 39374,Ancy-sur-Moselle,4820,GES,75,FR,49.05689,6.05775 39384,Andlau,4820,GES,75,FR,48.38607,7.41697 39385,Andolsheim,4820,GES,75,FR,48.06179,7.41637 39400,Angevillers,4820,GES,75,FR,49.38815,6.0443 39426,Anould,4820,GES,75,FR,48.18526,6.94597 39461,Arches,4820,GES,75,FR,48.11856,6.52806 39462,Archettes,4820,GES,75,FR,48.1232,6.53723 39464,Arcis-sur-Aube,4820,GES,75,FR,48.53387,4.14085 39466,Ardennes,4820,GES,75,FR,49.63202,4.65369 39473,Argancy,4820,GES,75,FR,49.19543,6.20157 39515,Ars-sur-Moselle,4820,GES,75,FR,49.07791,6.0742 39517,Art-sur-Meurthe,4820,GES,75,FR,48.6575,6.26708 39545,Aspach,4820,GES,75,FR,47.64234,7.23353 39546,Aspach-le-Bas,4820,GES,75,FR,47.76135,7.15104 39547,Aspach-le-Haut,4820,GES,75,FR,47.77653,7.13145 39564,Attigny,4820,GES,75,FR,49.47846,4.57803 39587,Auboué,4820,GES,75,FR,49.21198,5.97663 39600,Audun-le-Roman,4820,GES,75,FR,49.36977,5.89545 39601,Audun-le-Tiche,4820,GES,75,FR,49.47217,5.9555 39605,Augny,4820,GES,75,FR,49.0611,6.1182 39616,Aumetz,4820,GES,75,FR,49.41787,5.94418 39674,Avize,4820,GES,75,FR,48.97352,4.01438 39683,Ay,4820,GES,75,FR,49.05457,4.00343 39684,Ay-sur-Moselle,4820,GES,75,FR,49.24326,6.20627 39686,Aydoilles,4820,GES,75,FR,48.21026,6.57389 39699,Baccarat,4820,GES,75,FR,48.44984,6.73946 39704,Badonviller,4820,GES,75,FR,48.50116,6.89218 39735,Bains-les-Bains,4820,GES,75,FR,48.00113,6.26492 39737,Bainville-sur-Madon,4820,GES,75,FR,48.58725,6.0958 39743,Balan,4820,GES,75,FR,49.68881,4.96478 39749,Baldersheim,4820,GES,75,FR,47.80136,7.38078 39758,Ban-de-Laveline,4820,GES,75,FR,48.24498,7.06593 39761,Bantzenheim,4820,GES,75,FR,47.82452,7.51445 39765,Bar-le-Duc,4820,GES,75,FR,48.77275,5.16108 39766,Bar-sur-Aube,4820,GES,75,FR,48.23315,4.7064 39767,Bar-sur-Seine,4820,GES,75,FR,48.11295,4.37656 39790,Barr,4820,GES,75,FR,48.40755,7.44873 39794,Bartenheim,4820,GES,75,FR,47.63364,7.47951 39795,Bas-Rhin,4820,GES,75,FR,48.65693,7.56346 39799,Basse-Ham,4820,GES,75,FR,49.38626,6.2418 39805,Batilly,4820,GES,75,FR,49.17372,5.96869 39806,Battenheim,4820,GES,75,FR,47.81999,7.3817 39821,Bayard-sur-Marne,4820,GES,75,FR,48.5541,5.0768 39823,Bayon,4820,GES,75,FR,48.47425,6.31631 39826,Bazancourt,4820,GES,75,FR,49.36562,4.17051 39828,Bazeilles,4820,GES,75,FR,49.6765,4.97752 39899,Behren-lès-Forbach,4820,GES,75,FR,49.16949,6.93933 39923,Belleville,4820,GES,75,FR,48.81817,6.10294 39925,Belleville-sur-Meuse,4820,GES,75,FR,49.17863,5.3719 39939,Benfeld,4820,GES,75,FR,48.37062,7.5937 40424,Béning-lès-Saint-Avold,4820,GES,75,FR,49.13504,6.83902 39941,Bennwihr,4820,GES,75,FR,48.14456,7.32445 39946,Bergheim,4820,GES,75,FR,48.2054,7.36299 39947,Bergholtz,4820,GES,75,FR,47.9167,7.24651 39950,Bernardswiller,4820,GES,75,FR,48.45035,7.46238 39963,Berrwiller,4820,GES,75,FR,47.84984,7.21922 39965,Berstett,4820,GES,75,FR,48.679,7.65721 39969,Bertrange,4820,GES,75,FR,49.31368,6.19208 40431,Bétheny,4820,GES,75,FR,49.28498,4.05495 39985,Betschdorf,4820,GES,75,FR,48.89825,7.90196 39986,Bettancourt-la-Ferrée,4820,GES,75,FR,48.64898,4.96971 40001,Bezannes,4820,GES,75,FR,49.22339,3.98892 40011,Bienville,4820,GES,75,FR,48.57582,5.04579 40013,Biesheim,4820,GES,75,FR,48.04118,7.54474 40014,Biesles,4820,GES,75,FR,48.08597,5.29409 40027,Bining,4820,GES,75,FR,49.03729,7.25273 40031,Bischheim,4820,GES,75,FR,48.61612,7.75343 40032,Bischoffsheim,4820,GES,75,FR,48.48703,7.48967 40033,Bischwiller,4820,GES,75,FR,48.76826,7.85406 40034,Bitche,4820,GES,75,FR,49.05232,7.42992 40035,Bitschwiller-lès-Thann,4820,GES,75,FR,47.82969,7.07911 40043,Blaesheim,4820,GES,75,FR,48.50648,7.60923 40045,Blagny,4820,GES,75,FR,49.62167,5.19194 40073,Blénod-lès-Pont-à-Mousson,4820,GES,75,FR,48.88487,6.04844 40074,Blénod-lès-Toul,4820,GES,75,FR,48.59882,5.83685 40066,Bliesbruck,4820,GES,75,FR,49.11543,7.18112 40068,Blodelsheim,4820,GES,75,FR,47.88538,7.53635 40071,Blotzheim,4820,GES,75,FR,47.6026,7.49654 40439,Bœrsch,4820,GES,75,FR,48.47656,7.43998 40104,Bollwiller,4820,GES,75,FR,47.85832,7.26179 40106,Bologne,4820,GES,75,FR,48.20005,5.14209 40133,Boofzheim,4820,GES,75,FR,48.33186,7.68071 40158,Bouilly,4820,GES,75,FR,48.19674,4.00011 40162,Boulange,4820,GES,75,FR,49.38229,5.95 40163,Boulay-Moselle,4820,GES,75,FR,49.18333,6.5 40169,Bouligny,4820,GES,75,FR,49.29189,5.74248 40176,Boult-sur-Suippe,4820,GES,75,FR,49.37149,4.14632 40180,Bourbonne-les-Bains,4820,GES,75,FR,47.95305,5.74801 40203,Bourgogne,4820,GES,75,FR,49.34962,4.07111 40218,Bousse,4820,GES,75,FR,49.27786,6.19672 40231,Bouxières-aux-Chênes,4820,GES,75,FR,48.77215,6.26152 40232,Bouxières-aux-Dames,4820,GES,75,FR,48.75441,6.16294 40233,Bouxwiller,4820,GES,75,FR,48.82495,7.48117 40236,Bouzonville,4820,GES,75,FR,49.29188,6.53386 40298,Breuschwickersheim,4820,GES,75,FR,48.58007,7.60159 40362,Bréviandes,4820,GES,75,FR,48.25693,4.09531 40308,Brienne-le-Château,4820,GES,75,FR,48.39319,4.52637 40311,Briey,4820,GES,75,FR,49.2492,5.93975 40345,Brumath,4820,GES,75,FR,48.73398,7.71095 40347,Brunstatt,4820,GES,75,FR,47.72131,7.32009 40348,Bruyères,4820,GES,75,FR,48.20709,6.71845 40371,Buchères,4820,GES,75,FR,48.23508,4.1131 40377,Buhl,4820,GES,75,FR,47.92806,7.18719 40380,Bulgnéville,4820,GES,75,FR,48.20694,5.8343 40389,Burnhaupt-le-Bas,4820,GES,75,FR,47.71764,7.16148 40390,Burnhaupt-le-Haut,4820,GES,75,FR,47.73162,7.14437 40396,Bussang,4820,GES,75,FR,47.88449,6.85272 40545,Carignan,4820,GES,75,FR,49.63159,5.16796 40548,Carling,4820,GES,75,FR,49.16635,6.71563 40565,Carspach,4820,GES,75,FR,47.61608,7.21018 40599,Cattenom,4820,GES,75,FR,49.40627,6.24297 40650,Cernay,4820,GES,75,FR,47.8097,7.17699 40652,Cernay-lès-Reims,4820,GES,75,FR,49.26375,4.10216 40687,Chalampé,4820,GES,75,FR,47.82019,7.54113 40690,Chaligny,4820,GES,75,FR,48.62422,6.08262 40691,Chalindrey,4820,GES,75,FR,47.80308,5.42797 40933,Châlons-en-Champagne,4820,GES,75,FR,48.95393,4.36724 40704,Chamarandes-Choignes,4820,GES,75,FR,48.08333,5.15 40734,Champenoux,4820,GES,75,FR,48.74257,6.3483 40740,Champigneulles,4820,GES,75,FR,48.73404,6.16181 40759,Chancenay,4820,GES,75,FR,48.67001,4.98715 40768,Chanteheux,4820,GES,75,FR,48.59722,6.52783 40777,Chantraine,4820,GES,75,FR,48.17157,6.43538 40780,Chaource,4820,GES,75,FR,48.05915,4.13738 40802,Charleville-Mézières,4820,GES,75,FR,49.7685,4.72487 40806,Charmes,4820,GES,75,FR,48.3722,6.29117 40942,Château-Porcien,4820,GES,75,FR,49.5274,4.24533 40945,Château-Salins,4820,GES,75,FR,48.81885,6.51455 40979,Châteauvillain,4820,GES,75,FR,48.03655,4.91823 40982,Châtel-Saint-Germain,4820,GES,75,FR,49.12255,6.08006 40983,Châtel-sur-Moselle,4820,GES,75,FR,48.3143,6.39403 40988,Châtenois,4820,GES,75,FR,48.27201,7.40109 41003,Châtillon-sur-Marne,4820,GES,75,FR,49.10048,3.76023 40843,Chaumont,4820,GES,75,FR,48.11121,5.14134 40860,Chavelot,4820,GES,75,FR,48.23459,6.43809 40862,Chavigny,4820,GES,75,FR,48.62899,6.12317 40873,Cheniménil,4820,GES,75,FR,48.1388,6.60346 40897,Chevillon,4820,GES,75,FR,48.52869,5.13086 41026,Cirey-sur-Vezouze,4820,GES,75,FR,48.58093,6.94573 41050,Clermont-en-Argonne,4820,GES,75,FR,49.10711,5.07002 41060,Clouange,4820,GES,75,FR,49.2624,6.09723 41077,Cocheren,4820,GES,75,FR,49.14384,6.85649 41096,Colmar,4820,GES,75,FR,48.08078,7.35584 41101,Colombey-les-Belles,4820,GES,75,FR,48.5292,5.89451 41121,Commercy,4820,GES,75,FR,48.76128,5.59067 41123,Compertrix,4820,GES,75,FR,48.94179,4.34631 41143,Conflans-en-Jarnisy,4820,GES,75,FR,49.16725,5.85515 41149,Connantre,4820,GES,75,FR,48.72657,3.92403 41157,Contrexéville,4820,GES,75,FR,48.18424,5.89572 41171,Corcieux,4820,GES,75,FR,48.17236,6.88148 41184,Cormicy,4820,GES,75,FR,49.37071,3.89595 41185,Cormontreuil,4820,GES,75,FR,49.21667,4.05 41195,Cornimont,4820,GES,75,FR,47.95998,6.83038 41196,Corny-sur-Moselle,4820,GES,75,FR,49.03557,6.06084 41209,Cosnes,4820,GES,75,FR,49.51964,5.7121 41242,Courcelles-Chaussy,4820,GES,75,FR,49.1094,6.40153 41250,Courcy,4820,GES,75,FR,49.32361,4.00257 41270,Courtisols,4820,GES,75,FR,48.9867,4.517 41345,Créhange,4820,GES,75,FR,49.05897,6.58178 41305,Creney-près-Troyes,4820,GES,75,FR,48.33333,4.13333 41312,Creutzwald,4820,GES,75,FR,49.20531,6.69668 41338,Crusnes,4820,GES,75,FR,49.43406,5.91557 41382,Custines,4820,GES,75,FR,48.79127,6.14461 41401,Dabo,4820,GES,75,FR,48.65373,7.23611 41402,Dachstein,4820,GES,75,FR,48.56127,7.53233 41409,Dambach-la-Ville,4820,GES,75,FR,48.32379,7.42547 41410,Damelevières,4820,GES,75,FR,48.5593,6.38453 41411,Damery,4820,GES,75,FR,49.07238,3.88036 41428,Dannemarie,4820,GES,75,FR,47.63034,7.11903 41434,Darney,4820,GES,75,FR,48.0866,6.04917 41435,Darnieulles,4820,GES,75,FR,48.1995,6.34929 41439,Dauendorf,4820,GES,75,FR,48.82987,7.65532 41613,Département de lAube,4820,GES,75,FR,48.25,4.08333 41456,Dessenheim,4820,GES,75,FR,47.97767,7.48891 41458,Dettwiller,4820,GES,75,FR,48.75415,7.46633 41461,Deville,4820,GES,75,FR,49.87893,4.7061 41462,Deyvillers,4820,GES,75,FR,48.20013,6.51533 41465,Didenheim,4820,GES,75,FR,47.71866,7.30157 41467,Diebling,4820,GES,75,FR,49.10966,6.93974 41468,Diemeringen,4820,GES,75,FR,48.94013,7.18839 41470,Diesen,4820,GES,75,FR,49.17818,6.67798 41471,Dietwiller,4820,GES,75,FR,47.69278,7.403 41472,Dieue-sur-Meuse,4820,GES,75,FR,49.072,5.42248 41474,Dieulouard,4820,GES,75,FR,48.84137,6.06782 41475,Dieuze,4820,GES,75,FR,48.81263,6.7178 41484,Dingsheim,4820,GES,75,FR,48.63053,7.66932 41487,Dinsheim-sur-Bruche,4820,GES,75,FR,48.54258,7.42727 41493,Distroff,4820,GES,75,FR,49.33295,6.26662 41498,Dizy,4820,GES,75,FR,49.06667,3.96667 41500,Docelles,4820,GES,75,FR,48.14475,6.61289 41501,Dogneville,4820,GES,75,FR,48.22251,6.45944 41508,Dom-le-Mesnil,4820,GES,75,FR,49.69012,4.80363 41514,Dombasle-sur-Meurthe,4820,GES,75,FR,48.61861,6.35538 41517,Domgermain,4820,GES,75,FR,48.64276,5.82957 41518,Dommartin-lès-Remiremont,4820,GES,75,FR,47.99902,6.64048 41519,Dommartin-lès-Toul,4820,GES,75,FR,48.66949,5.91005 41529,Donchery,4820,GES,75,FR,49.69584,4.87417 41530,Doncourt-lès-Conflans,4820,GES,75,FR,49.1425,5.93368 41540,Dorlisheim,4820,GES,75,FR,48.52485,7.48624 41541,Dormans,4820,GES,75,FR,49.07392,3.63819 41544,Dossenheim-sur-Zinsel,4820,GES,75,FR,48.8059,7.40273 41552,Doulaincourt-Saucourt,4820,GES,75,FR,48.31667,5.2 41561,Douzy,4820,GES,75,FR,49.6708,5.04156 41579,Drulingen,4820,GES,75,FR,48.86804,7.18956 41581,Drusenheim,4820,GES,75,FR,48.76207,7.95326 41587,Dugny-sur-Meuse,4820,GES,75,FR,49.10953,5.3855 41593,Duppigheim,4820,GES,75,FR,48.52866,7.59421 41595,Durrenbach,4820,GES,75,FR,48.89681,7.76769 41599,Duttlenheim,4820,GES,75,FR,48.52553,7.56572 41654,Ebersheim,4820,GES,75,FR,48.30438,7.49903 41655,Eckbolsheim,4820,GES,75,FR,48.58075,7.68768 41656,Eckwersheim,4820,GES,75,FR,48.68167,7.69687 48052,Écrouves,4820,GES,75,FR,48.67986,5.84267 41660,Eguisheim,4820,GES,75,FR,48.0428,7.30617 41661,Einville-au-Jard,4820,GES,75,FR,48.65569,6.48447 48065,Éloyes,4820,GES,75,FR,48.09793,6.60653 41668,Enchenberg,4820,GES,75,FR,49.01354,7.33868 41671,Ennery,4820,GES,75,FR,49.22619,6.21778 41676,Ensisheim,4820,GES,75,FR,47.86584,7.35052 41680,Entrange,4820,GES,75,FR,49.413,6.10501 41683,Entzheim,4820,GES,75,FR,48.53424,7.63772 48073,Épernay,4820,GES,75,FR,49.04,3.95922 41686,Epfig,4820,GES,75,FR,48.35933,7.46427 48078,Épinal,4820,GES,75,FR,48.18324,6.45304 41697,Ernolsheim-Bruche,4820,GES,75,FR,48.56531,7.56503 41702,Erstein,4820,GES,75,FR,48.42373,7.66262 41703,Ervy-le-Châtel,4820,GES,75,FR,48.04116,3.90988 41709,Eschau,4820,GES,75,FR,48.48897,7.71644 41710,Eschbach,4820,GES,75,FR,48.87465,7.73609 41711,Eschentzwiller,4820,GES,75,FR,47.7127,7.39773 41726,Essey-lès-Nancy,4820,GES,75,FR,48.705,6.22691 41731,Esternay,4820,GES,75,FR,48.73232,3.56159 41734,Estissac,4820,GES,75,FR,48.2692,3.80515 48092,Étain,4820,GES,75,FR,49.21259,5.64022 48104,Étival-Clairefontaine,4820,GES,75,FR,48.36519,6.86118 41741,Etzling,4820,GES,75,FR,49.17943,6.95864 41743,Eulmont,4820,GES,75,FR,48.75026,6.22731 41745,Eurville-Bienville,4820,GES,75,FR,48.58333,5.03333 41746,Euville,4820,GES,75,FR,48.7503,5.62603 41763,Fagnières,4820,GES,75,FR,48.96385,4.31692 41764,Fains-Véel,4820,GES,75,FR,48.78333,5.13333 41766,Falck,4820,GES,75,FR,49.22695,6.63373 41770,Fameck,4820,GES,75,FR,49.29895,6.10915 41777,Farébersviller,4820,GES,75,FR,49.11898,6.86914 41776,Farschviller,4820,GES,75,FR,49.09406,6.89517 41778,Faulquemont,4820,GES,75,FR,49.0491,6.59732 41779,Faulx,4820,GES,75,FR,48.79266,6.19554 41790,Fayl-Billot,4820,GES,75,FR,47.78199,5.59917 41791,Fegersheim,4820,GES,75,FR,48.49016,7.68107 41795,Fellering,4820,GES,75,FR,47.89659,6.98552 41997,Fère-Champenoise,4820,GES,75,FR,48.75431,3.99069 41804,Ferrette,4820,GES,75,FR,47.49436,7.31372 41808,Fessenheim,4820,GES,75,FR,47.91565,7.53499 41825,Fismes,4820,GES,75,FR,49.30773,3.68607 41831,Flavigny-sur-Moselle,4820,GES,75,FR,48.56567,6.18878 41834,Flaxlanden,4820,GES,75,FR,47.69547,7.31484 41846,Fleury,4820,GES,75,FR,49.04181,6.19329 41865,Fléville-devant-Nancy,4820,GES,75,FR,48.62495,6.20325 41856,Flize,4820,GES,75,FR,49.69875,4.77171 41858,Floing,4820,GES,75,FR,49.72216,4.92947 41861,Florange,4820,GES,75,FR,49.32373,6.1212 41869,Folkling,4820,GES,75,FR,49.14756,6.89482 41871,Folschviller,4820,GES,75,FR,49.07732,6.68358 41906,Fontoy,4820,GES,75,FR,49.35597,5.9925 41908,Forbach,4820,GES,75,FR,49.18848,6.89255 41918,Fortschwihr,4820,GES,75,FR,48.08825,7.4505 41924,Foug,4820,GES,75,FR,48.68385,5.78735 41945,Fraize,4820,GES,75,FR,48.1866,6.99787 41986,Fréland,4820,GES,75,FR,48.17215,7.19167 41961,Fresse-sur-Moselle,4820,GES,75,FR,47.87589,6.78589 41964,Freyming-Merlebach,4820,GES,75,FR,49.15,6.78333 41965,Frignicourt,4820,GES,75,FR,48.69966,4.59153 41970,Fromelennes,4820,GES,75,FR,50.12333,4.85952 41971,Froncles,4820,GES,75,FR,48.29756,5.14586 41980,Frouard,4820,GES,75,FR,48.75994,6.13036 41991,Fumay,4820,GES,75,FR,49.99132,4.70771 41993,Furdenheim,4820,GES,75,FR,48.61129,7.561 42026,Gambsheim,4820,GES,75,FR,48.69209,7.88286 42028,Gandrange,4820,GES,75,FR,49.27133,6.12536 42058,Geispolsheim,4820,GES,75,FR,48.51603,7.64825 42299,Gérardmer,4820,GES,75,FR,48.07346,6.87787 42072,Gerbéviller,4820,GES,75,FR,48.49618,6.51075 42076,Gerstheim,4820,GES,75,FR,48.38215,7.70395 42078,Gespunsart,4820,GES,75,FR,49.82143,4.82926 42081,Geudertheim,4820,GES,75,FR,48.72415,7.75188 42100,Giraumont,4820,GES,75,FR,49.17076,5.91448 42107,Givet,4820,GES,75,FR,50.13796,4.82545 42302,Gœrsdorf,4820,GES,75,FR,48.95,7.76667 42117,Goetzenbruck,4820,GES,75,FR,48.97778,7.3796 42119,Golbey,4820,GES,75,FR,48.19764,6.43966 42126,Gondrecourt-le-Château,4820,GES,75,FR,48.51366,5.51058 42127,Gondreville,4820,GES,75,FR,48.69373,5.96467 42135,Gorcy,4820,GES,75,FR,49.53487,5.68487 42139,Gorze,4820,GES,75,FR,49.05236,6.00072 42183,Granges-sur-Vologne,4820,GES,75,FR,48.14517,6.79095 42199,Grendelbruch,4820,GES,75,FR,48.49272,7.32239 42201,Gresswiller,4820,GES,75,FR,48.53542,7.43251 42205,Gries,4820,GES,75,FR,48.7537,7.81403 42206,Griesheim-près-Molsheim,4820,GES,75,FR,48.50296,7.53027 42207,Griesheim-sur-Souffel,4820,GES,75,FR,48.63591,7.66923 42223,Gros-Réderching,4820,GES,75,FR,49.06835,7.21914 42224,Grosbliederstroff,4820,GES,75,FR,49.15808,7.02413 42239,Guebwiller,4820,GES,75,FR,47.91667,7.2 42279,Guémar,4820,GES,75,FR,48.18869,7.39706 42282,Guénange,4820,GES,75,FR,49.29945,6.20535 42249,Gueux,4820,GES,75,FR,49.25048,3.91024 42250,Guewenheim,4820,GES,75,FR,47.75283,7.09253 42273,Gumbrechtshoffen,4820,GES,75,FR,48.9058,7.62915 42274,Gundershoffen,4820,GES,75,FR,48.90648,7.66096 42305,Habsheim,4820,GES,75,FR,47.72975,7.41801 42306,Hadol,4820,GES,75,FR,48.08983,6.47662 42307,Hagenthal-le-Bas,4820,GES,75,FR,47.52497,7.47783 42309,Hagondange,4820,GES,75,FR,49.24879,6.16374 42310,Haguenau,4820,GES,75,FR,48.81557,7.79051 42318,Ham-sous-Varsberg,4820,GES,75,FR,49.18014,6.64702 42319,Hambach,4820,GES,75,FR,49.05942,7.0353 42323,Hangenbieten,4820,GES,75,FR,48.55985,7.61464 42329,Hargarten-aux-Mines,4820,GES,75,FR,49.22436,6.61459 42335,Hatten,4820,GES,75,FR,48.90123,7.97968 42337,Haucourt,4820,GES,75,FR,49.48982,5.80361 42340,Haut-Rhin,4820,GES,75,FR,47.87603,7.2719 42344,Haute-Marne,4820,GES,75,FR,48.12019,5.24038 42360,Hayange,4820,GES,75,FR,49.32881,6.06278 42361,Haybes,4820,GES,75,FR,50.00458,4.70496 42450,Hégenheim,4820,GES,75,FR,47.56299,7.52401 42363,Heillecourt,4820,GES,75,FR,48.65049,6.19512 42364,Heimsbrunn,4820,GES,75,FR,47.72669,7.22699 42374,Herbitzheim,4820,GES,75,FR,49.01541,7.08188 42381,Hermonville,4820,GES,75,FR,49.33655,3.91011 42382,Herrlisheim,4820,GES,75,FR,48.73049,7.90535 42383,Herrlisheim-près-Colmar,4820,GES,75,FR,48.01835,7.32668 42385,Herserange,4820,GES,75,FR,49.52047,5.78994 42465,Hésingue,4820,GES,75,FR,47.57818,7.51911 42389,Hettange-Grande,4820,GES,75,FR,49.4065,6.15233 42396,Hilsenheim,4820,GES,75,FR,48.28761,7.56348 42397,Hindisheim,4820,GES,75,FR,48.46837,7.63859 42401,Hirsingue,4820,GES,75,FR,47.58768,7.25299 42403,Hirtzbach,4820,GES,75,FR,47.59839,7.22222 42404,Hirtzfelden,4820,GES,75,FR,47.91131,7.4461 42406,Hochfelden,4820,GES,75,FR,48.75738,7.56769 42407,Hochstatt,4820,GES,75,FR,47.70389,7.2765 42467,Hœnheim,4820,GES,75,FR,48.62224,7.75549 42468,Hœrdt,4820,GES,75,FR,48.7,7.78333 42409,Holtzheim,4820,GES,75,FR,48.5582,7.64434 42410,Holtzwihr,4820,GES,75,FR,48.11288,7.4208 42411,Holving,4820,GES,75,FR,49.01162,6.96556 42414,Hombourg-Haut,4820,GES,75,FR,49.12819,6.77066 42415,Homécourt,4820,GES,75,FR,49.22071,5.99242 42418,Horbourg-Wihr,4820,GES,75,FR,48.08106,7.3938 42425,Houdemont,4820,GES,75,FR,48.64407,6.17579 42433,Houssen,4820,GES,75,FR,48.12579,7.37735 42441,Hundling,4820,GES,75,FR,49.1086,6.97989 42442,Huningue,4820,GES,75,FR,47.60477,7.57782 42445,Husseren-Wesserling,4820,GES,75,FR,47.88351,6.98994 42446,Hussigny-Godbrange,4820,GES,75,FR,49.49437,5.86677 42447,Huttenheim,4820,GES,75,FR,48.35864,7.57833 42473,Igney,4820,GES,75,FR,48.27358,6.39664 42477,Illange,4820,GES,75,FR,49.32617,6.17953 42480,Illfurth,4820,GES,75,FR,47.6741,7.26607 42482,Illkirch-Graffenstaden,4820,GES,75,FR,48.52894,7.71523 42483,Illzach,4820,GES,75,FR,47.7742,7.35175 42487,Ingersheim,4820,GES,75,FR,48.09803,7.30308 42491,Ingwiller,4820,GES,75,FR,48.87284,7.4798 42492,Innenheim,4820,GES,75,FR,48.49659,7.57439 42494,Irmstett,4820,GES,75,FR,48.58801,7.47837 42504,Issenheim,4820,GES,75,FR,47.90357,7.25235 42513,Ittenheim,4820,GES,75,FR,48.60508,7.59372 42534,Jarny,4820,GES,75,FR,49.15873,5.8764 42536,Jarville-la-Malgrange,4820,GES,75,FR,48.66697,6.20269 42546,Jeanménil,4820,GES,75,FR,48.3356,6.68769 42547,Jebsheim,4820,GES,75,FR,48.12375,7.47578 42603,Jœuf,4820,GES,75,FR,49.23333,6.01667 42553,Joinville,4820,GES,75,FR,48.44363,5.14144 42557,Jonchery-sur-Vesle,4820,GES,75,FR,49.28952,3.81345 42567,Joudreville,4820,GES,75,FR,49.29145,5.77903 42573,Jouy-aux-Arches,4820,GES,75,FR,49.06148,6.07925 42604,Kaltenhouse,4820,GES,75,FR,48.7911,7.83217 42605,Kaysersberg,4820,GES,75,FR,48.13803,7.26385 42623,Kédange-sur-Canner,4820,GES,75,FR,49.30887,6.33805 42606,Kembs,4820,GES,75,FR,47.68948,7.50323 42607,Kerbach,4820,GES,75,FR,49.16682,6.96549 42611,Kertzfeld,4820,GES,75,FR,48.3799,7.56816 42613,Keskastel,4820,GES,75,FR,48.97132,7.04412 42615,Kilstett,4820,GES,75,FR,48.676,7.85471 42616,Kingersheim,4820,GES,75,FR,47.791,7.32647 42617,Kintzheim,4820,GES,75,FR,48.2548,7.39491 42618,Knutange,4820,GES,75,FR,49.33895,6.03898 42624,Kœnigsmacker,4820,GES,75,FR,49.4,6.28333 42619,Krautergersheim,4820,GES,75,FR,48.47634,7.56718 42620,Kruth,4820,GES,75,FR,47.93101,6.96467 42621,Kunheim,4820,GES,75,FR,48.07657,7.53489 42622,Kuntzig,4820,GES,75,FR,49.34731,6.2371 42653,La Bresse,4820,GES,75,FR,47.99974,6.86499 42655,La Broque,4820,GES,75,FR,48.47298,7.21639 42687,La Chapelle-Saint-Luc,4820,GES,75,FR,48.31734,4.03988 42756,La Francheville,4820,GES,75,FR,49.72923,4.71273 42849,La Rivière-de-Corps,4820,GES,75,FR,48.2884,4.01947 42920,La Wantzenau,4820,GES,75,FR,48.65786,7.83068 42921,Labaroche,4820,GES,75,FR,48.11076,7.19244 42938,Labry,4820,GES,75,FR,49.17289,5.88087 42981,Lamarche,4820,GES,75,FR,48.06967,5.78141 42995,Lampertheim,4820,GES,75,FR,48.65149,7.69876 43010,Landres,4820,GES,75,FR,49.32044,5.8006 43012,Landser,4820,GES,75,FR,47.68501,7.38998 43020,Laneuveville-devant-Nancy,4820,GES,75,FR,48.65659,6.22658 43030,Langres,4820,GES,75,FR,47.86263,5.33308 43062,Lapoutroie,4820,GES,75,FR,48.15398,7.16714 43101,Lautenbach,4820,GES,75,FR,47.94055,7.15768 43102,Lautenbachzell,4820,GES,75,FR,47.94124,7.14643 43103,Lauterbourg,4820,GES,75,FR,48.97515,8.17846 43121,Laxou,4820,GES,75,FR,48.68372,6.14929 43122,Lay-Saint-Christophe,4820,GES,75,FR,48.74926,6.19735 43124,Le Ban Saint-Martin,4820,GES,75,FR,49.1225,6.15111 43240,Le Ménil,4820,GES,75,FR,47.90477,6.78209 43231,Le Mesnil-sur-Oger,4820,GES,75,FR,48.94708,4.02263 43303,Le Syndicat,4820,GES,75,FR,48.01733,6.68436 43313,Le Thillot,4820,GES,75,FR,47.87941,6.76279 43315,Le Tholy,4820,GES,75,FR,48.08229,6.74351 43345,Lembach,4820,GES,75,FR,49.00362,7.78986 43346,Lemberg,4820,GES,75,FR,49.00199,7.37889 43689,Lérouville,4820,GES,75,FR,48.79261,5.54063 43388,Les Forges,4820,GES,75,FR,48.17747,6.38846 43394,Les Hautes-Rivières,4820,GES,75,FR,49.88595,4.84186 43415,Les Noës-près-Troyes,4820,GES,75,FR,48.30358,4.04552 43423,Les Riceys,4820,GES,75,FR,47.9939,4.36986 43455,Lexy,4820,GES,75,FR,49.49996,5.72985 43457,Leymen,4820,GES,75,FR,47.49632,7.48517 43524,Lièpvre,4820,GES,75,FR,48.27166,7.28229 43473,Liffol-le-Grand,4820,GES,75,FR,48.31771,5.58125 43477,Ligny-en-Barrois,4820,GES,75,FR,48.68861,5.32543 43501,Lingolsheim,4820,GES,75,FR,48.55752,7.68253 43506,Lipsheim,4820,GES,75,FR,48.49164,7.66751 43515,Liverdun,4820,GES,75,FR,48.74973,6.06372 43546,Loivre,4820,GES,75,FR,49.34619,3.97978 43556,Longeville-en-Barrois,4820,GES,75,FR,48.74242,5.20905 43557,Longeville-lès-Metz,4820,GES,75,FR,49.11403,6.13612 43558,Longeville-lès-Saint-Avold,4820,GES,75,FR,49.11689,6.64327 43562,Longlaville,4820,GES,75,FR,49.53443,5.80048 43573,Longuyon,4820,GES,75,FR,49.44181,5.60508 43575,Longwy,4820,GES,75,FR,49.5217,5.76192 43593,Lorquin,4820,GES,75,FR,48.67102,6.99915 43641,Ludres,4820,GES,75,FR,48.62032,6.16747 43648,Lumes,4820,GES,75,FR,49.73461,4.78616 43656,Lunéville,4820,GES,75,FR,48.59273,6.49383 43663,Lusigny-sur-Barse,4820,GES,75,FR,48.25451,4.26891 43666,Lutterbach,4820,GES,75,FR,47.75976,7.28032 43667,Lutzelhouse,4820,GES,75,FR,48.52114,7.287 43713,Macheren,4820,GES,75,FR,49.10019,6.77763 43718,Magenta,4820,GES,75,FR,49.04899,3.96882 43731,Maidières,4820,GES,75,FR,48.89961,6.04005 43736,Mailly-le-Camp,4820,GES,75,FR,48.66526,4.21303 43746,Maizières-la-Grande-Paroisse,4820,GES,75,FR,48.51012,3.78573 43747,Maizières-lès-Metz,4820,GES,75,FR,49.21335,6.15956 43767,Malzéville,4820,GES,75,FR,48.71235,6.18468 43772,Mancieulles,4820,GES,75,FR,49.28231,5.89612 43779,Manom,4820,GES,75,FR,49.37092,6.18345 43790,Marange-Silvange,4820,GES,75,FR,49.20822,6.10426 43793,Marbache,4820,GES,75,FR,48.79867,6.106 43810,Marckolsheim,4820,GES,75,FR,48.16471,7.544 43817,Mardeuil,4820,GES,75,FR,49.05393,3.93 43826,Mareuil-le-Port,4820,GES,75,FR,49.08179,3.76011 43828,Mareuil-sur-Ay,4820,GES,75,FR,49.04581,4.03587 43842,Marigny-le-Châtel,4820,GES,75,FR,48.40291,3.73588 43849,Marlenheim,4820,GES,75,FR,48.62134,7.49096 43854,Marly,4820,GES,75,FR,49.06382,6.15427 43860,Marmoutier,4820,GES,75,FR,48.69005,7.38195 43863,Marne,4820,GES,75,FR,48.99116,4.25966 43928,Masevaux,4820,GES,75,FR,47.77671,6.99683 43942,Matzenheim,4820,GES,75,FR,48.3945,7.62185 43967,Maxéville,4820,GES,75,FR,48.71324,6.16658 44456,Mécleuves,4820,GES,75,FR,49.04429,6.27051 43990,Meistratzheim,4820,GES,75,FR,48.44853,7.5435 44014,Mercy-le-Bas,4820,GES,75,FR,49.38935,5.75599 44481,Méréville,4820,GES,75,FR,48.59113,6.15106 44019,Merten,4820,GES,75,FR,49.24903,6.66465 44020,Mertzwiller,4820,GES,75,FR,48.86558,7.68136 44026,Merxheim,4820,GES,75,FR,47.91128,7.29492 44479,Méry-sur-Seine,4820,GES,75,FR,48.50937,3.89129 44034,Messein,4820,GES,75,FR,48.6118,6.13959 44041,Metz,4820,GES,75,FR,49.11911,6.17269 44042,Metzeral,4820,GES,75,FR,48.01217,7.07091 44043,Metzervisse,4820,GES,75,FR,49.31476,6.28277 44051,Meurthe-et-Moselle,4820,GES,75,FR,48.65082,6.1566 44052,Meuse,4820,GES,75,FR,48.97176,5.36371 44054,Mexy,4820,GES,75,FR,49.50072,5.78078 44055,Meyenheim,4820,GES,75,FR,47.91364,7.3556 44094,Mirecourt,4820,GES,75,FR,48.30089,6.13282 44107,Mittelhausbergen,4820,GES,75,FR,48.61436,7.69009 44126,Molsheim,4820,GES,75,FR,48.54042,7.49199 44127,Mommenheim,4820,GES,75,FR,48.75782,7.64494 44135,Mondelange,4820,GES,75,FR,49.26145,6.16503 44151,Monswiller,4820,GES,75,FR,48.75511,7.37732 44157,Mont-Saint-Martin,4820,GES,75,FR,49.54363,5.78337 44188,Montauville,4820,GES,75,FR,48.90111,6.02359 44203,Montbronn,4820,GES,75,FR,48.99243,7.31075 44213,Montcy-Notre-Dame,4820,GES,75,FR,49.77507,4.74245 44250,Monthermé,4820,GES,75,FR,49.88465,4.73013 44253,Montier-en-Der,4820,GES,75,FR,48.47823,4.77073 44262,Montigny-lès-Metz,4820,GES,75,FR,49.0956,6.15271 44290,Montmédy,4820,GES,75,FR,49.52096,5.36835 44285,Montmirail,4820,GES,75,FR,48.87214,3.53797 44294,Montois-la-Montagne,4820,GES,75,FR,49.2168,6.02137 44337,Moosch,4820,GES,75,FR,47.86035,7.0487 44352,Morhange,4820,GES,75,FR,48.92359,6.64163 44366,Morsbach,4820,GES,75,FR,49.16806,6.8719 44367,Morschwiller-le-Bas,4820,GES,75,FR,47.73615,7.26954 44380,Moselle,4820,GES,75,FR,49.04177,6.58355 44396,Moulins-lès-Metz,4820,GES,75,FR,49.10434,6.10832 44402,Mourmelon-le-Grand,4820,GES,75,FR,49.13256,4.3642 44412,Moutiers,4820,GES,75,FR,49.23302,5.96553 44419,Mouzon,4820,GES,75,FR,49.60706,5.07569 44422,Moyenmoutier,4820,GES,75,FR,48.3773,6.90047 44423,Moyeuvre-Grande,4820,GES,75,FR,49.25294,6.04467 44432,Muizon,4820,GES,75,FR,49.27499,3.89083 44433,Mulhouse,4820,GES,75,FR,47.75205,7.32866 44435,Munchhouse,4820,GES,75,FR,47.8693,7.45233 44436,Mundolsheim,4820,GES,75,FR,48.64215,7.71378 44437,Munster,4820,GES,75,FR,48.04048,7.13933 44446,Mussig,4820,GES,75,FR,48.22993,7.51963 44447,Mussy-sur-Seine,4820,GES,75,FR,47.97791,4.49743 44448,Muttersholtz,4820,GES,75,FR,48.26761,7.53567 44449,Mutzig,4820,GES,75,FR,48.53974,7.45594 44501,Nancy,4820,GES,75,FR,48.68439,6.18496 44538,Neuf-Brisach,4820,GES,75,FR,48.01783,7.52795 44540,Neufchâteau,4820,GES,75,FR,48.35557,5.69602 44539,Neufchef,4820,GES,75,FR,49.31678,6.02416 44543,Neufgrange,4820,GES,75,FR,49.07679,7.06526 44544,Neufmanil,4820,GES,75,FR,49.81096,4.79673 44560,Neuves-Maisons,4820,GES,75,FR,48.61811,6.10544 44582,Neuwiller-lès-Saverne,4820,GES,75,FR,48.82506,7.40513 44588,Niderviller,4820,GES,75,FR,48.71294,7.10627 44589,Niederbronn-les-Bains,4820,GES,75,FR,48.95165,7.64271 44590,Niederhaslach,4820,GES,75,FR,48.54264,7.34282 44591,Niederhausbergen,4820,GES,75,FR,48.624,7.7021 44592,Niedernai,4820,GES,75,FR,48.45101,7.51635 44593,Niederschaeffolsheim,4820,GES,75,FR,48.77241,7.73862 44600,Nilvange,4820,GES,75,FR,49.34224,6.04964 44610,Nogent-le-Bas,4820,GES,75,FR,48.01974,5.33323 44617,Nogent-sur-Seine,4820,GES,75,FR,48.49372,3.50262 44635,Nomeny,4820,GES,75,FR,48.88977,6.22635 44636,Nomexy,4820,GES,75,FR,48.30741,6.38572 44641,Nordhouse,4820,GES,75,FR,48.44833,7.67326 44644,Norroy-lès-Pont-à-Mousson,4820,GES,75,FR,48.93495,6.03078 44661,Nouvion-sur-Meuse,4820,GES,75,FR,49.69949,4.79562 44664,Nouzonville,4820,GES,75,FR,49.81369,4.74736 44668,Novéant-sur-Moselle,4820,GES,75,FR,49.02366,6.04795 44702,Obenheim,4820,GES,75,FR,48.35975,7.692 44703,Oberbronn,4820,GES,75,FR,48.9402,7.607 44704,Oberhaslach,4820,GES,75,FR,48.55039,7.33213 44705,Oberhausbergen,4820,GES,75,FR,48.60607,7.68846 44706,Oberhergheim,4820,GES,75,FR,47.96668,7.39516 44707,Oberhoffen-sur-Moder,4820,GES,75,FR,48.78366,7.86347 44708,Obermodern-Zutzendorf,4820,GES,75,FR,48.85,7.53333 44709,Obernai,4820,GES,75,FR,48.46313,7.481 44710,Oberschaeffolsheim,4820,GES,75,FR,48.58643,7.65018 44714,Oderen,4820,GES,75,FR,47.91036,6.97463 44716,Oermingen,4820,GES,75,FR,49.00043,7.129 48128,Œting,4820,GES,75,FR,49.17291,6.91472 44719,Offenheim,4820,GES,75,FR,48.63208,7.61668 44723,Ohlungen,4820,GES,75,FR,48.81352,7.70225 44755,Orbey,4820,GES,75,FR,48.12651,7.16455 44793,Ostheim,4820,GES,75,FR,48.15995,7.36976 44795,Ostwald,4820,GES,75,FR,48.54369,7.71099 44797,Ottange,4820,GES,75,FR,49.44307,6.01988 44798,Otterswiller,4820,GES,75,FR,48.72568,7.37878 44799,Ottmarsheim,4820,GES,75,FR,47.78802,7.50777 44800,Ottrott,4820,GES,75,FR,48.45642,7.42556 44826,Pagny-sur-Moselle,4820,GES,75,FR,48.98365,6.02069 44852,Pargny-sur-Saulx,4820,GES,75,FR,48.76866,4.83758 44875,Payns,4820,GES,75,FR,48.38255,3.97755 44889,Peltre,4820,GES,75,FR,49.0748,6.22721 44918,Petit-Réderching,4820,GES,75,FR,49.05494,7.3064 44920,Petite-Rosselle,4820,GES,75,FR,49.21177,6.85607 44937,Pfaffenheim,4820,GES,75,FR,47.98567,7.28928 44938,Pfaffenhoffen,4820,GES,75,FR,48.8422,7.60714 44939,Pfastatt,4820,GES,75,FR,47.76915,7.30295 44940,Pfetterhouse,4820,GES,75,FR,47.50128,7.16598 44941,Pfulgriesheim,4820,GES,75,FR,48.64403,7.67086 44943,Phalsbourg,4820,GES,75,FR,48.76771,7.2582 44948,Piennes,4820,GES,75,FR,49.30964,5.78009 44961,Pierrepont,4820,GES,75,FR,49.41646,5.70908 44964,Pierrevillers,4820,GES,75,FR,49.22468,6.10337 44965,Pierry,4820,GES,75,FR,49.02024,3.94071 44971,Piney,4820,GES,75,FR,48.36366,4.33325 44991,Plainfaing,4820,GES,75,FR,48.17284,7.01539 45002,Plappeville,4820,GES,75,FR,49.13019,6.12471 45029,Plobsheim,4820,GES,75,FR,48.46979,7.72442 45036,Plombières-les-Bains,4820,GES,75,FR,47.96337,6.45758 45155,Pompey,4820,GES,75,FR,48.76876,6.12639 45197,Pont-à-Mousson,4820,GES,75,FR,48.90702,6.05635 45172,Pont-Saint-Vincent,4820,GES,75,FR,48.60519,6.0985 45173,Pont-Sainte-Marie,4820,GES,75,FR,48.31848,4.09447 45209,Pontfaverger-Moronvilliers,4820,GES,75,FR,49.29702,4.31657 45219,Porcelette,4820,GES,75,FR,49.15657,6.65513 45226,Port à Binson,4820,GES,75,FR,49.08202,3.75989 45243,Portieux,4820,GES,75,FR,48.34466,6.34465 45267,Pouru-Saint-Remy,4820,GES,75,FR,49.68333,5.08333 45269,Pouxeux,4820,GES,75,FR,48.10621,6.57299 45292,Prix-lès-Mézières,4820,GES,75,FR,49.75549,4.69113 45327,Pulligny,4820,GES,75,FR,48.53893,6.14426 45328,Pulnoy,4820,GES,75,FR,48.70343,6.25765 45329,Pulversheim,4820,GES,75,FR,47.83753,7.30119 45416,Raedersheim,4820,GES,75,FR,47.88895,7.28222 45422,Rambervillers,4820,GES,75,FR,48.3424,6.6358 45424,Ramonchamp,4820,GES,75,FR,47.89429,6.74171 45432,Raon-aux-Bois,4820,GES,75,FR,48.05686,6.52098 45686,Réding,4820,GES,75,FR,48.75177,7.10747 45689,Réguisheim,4820,GES,75,FR,47.89563,7.35288 45691,Réhon,4820,GES,75,FR,49.49878,5.75497 45444,Reichshoffen,4820,GES,75,FR,48.93287,7.66561 45445,Reichstett,4820,GES,75,FR,48.64856,7.75455 45450,Reims,4820,GES,75,FR,49.26526,4.02853 45451,Reiningue,4820,GES,75,FR,47.75215,7.23327 45693,Rémelfing,4820,GES,75,FR,49.08947,7.0882 45694,Rémilly,4820,GES,75,FR,49.01359,6.39219 45452,Remiremont,4820,GES,75,FR,48.01754,6.5882 45461,Renwez,4820,GES,75,FR,49.83839,4.60334 45467,Rethel,4820,GES,75,FR,49.50979,4.3674 45469,Retonfey,4820,GES,75,FR,49.13648,6.30634 45477,Revigny-sur-Ornain,4820,GES,75,FR,48.83016,4.98558 45478,Revin,4820,GES,75,FR,49.94039,4.63503 45483,Rhinau,4820,GES,75,FR,48.32017,7.70527 45490,Ribeauvillé,4820,GES,75,FR,48.1951,7.31938 45493,Richardménil,4820,GES,75,FR,48.59334,6.16917 45497,Richemont,4820,GES,75,FR,49.27723,6.16372 45498,Richwiller,4820,GES,75,FR,47.77995,7.28067 45500,Riedisheim,4820,GES,75,FR,47.74847,7.36716 45513,Rilly-la-Montagne,4820,GES,75,FR,49.16553,4.04568 45514,Rimogne,4820,GES,75,FR,49.84075,4.53941 45523,Riquewihr,4820,GES,75,FR,48.16672,7.29707 45534,Rixheim,4820,GES,75,FR,47.7497,7.40203 45553,Rocroi,4820,GES,75,FR,49.9261,4.5222 45556,Roeschwoog,4820,GES,75,FR,48.82676,8.03684 45562,Rohrbach-lès-Bitche,4820,GES,75,FR,49.04424,7.26759 45567,Rolampont,4820,GES,75,FR,47.94951,5.2856 45575,Romanswiller,4820,GES,75,FR,48.64556,7.40762 45577,Rombas,4820,GES,75,FR,49.24946,6.09398 45580,Romilly-sur-Seine,4820,GES,75,FR,48.51085,3.72634 45600,Rosenau,4820,GES,75,FR,47.63688,7.53598 45601,Rosheim,4820,GES,75,FR,48.4971,7.47105 45603,Rosières-aux-Salines,4820,GES,75,FR,48.59301,6.33199 45605,Rosières-près-Troyes,4820,GES,75,FR,48.26182,4.07396 45610,Rosselange,4820,GES,75,FR,49.2578,6.0689 45613,Rothau,4820,GES,75,FR,48.45687,7.20772 45619,Rouffach,4820,GES,75,FR,47.95786,7.30016 45626,Rouhling,4820,GES,75,FR,49.13888,7.00446 45655,Rozérieulles,4820,GES,75,FR,49.10668,6.08198 45661,Ruelisheim,4820,GES,75,FR,47.82405,7.35744 45671,Rumersheim-le-Haut,4820,GES,75,FR,47.85124,7.52079 45677,Rupt-sur-Moselle,4820,GES,75,FR,47.92271,6.66291 45678,Rurange-lès-Thionville,4820,GES,75,FR,49.27599,6.23184 45679,Russ,4820,GES,75,FR,48.496,7.25911 45680,Russange,4820,GES,75,FR,49.48283,5.95204 45750,Saint-Amarin,4820,GES,75,FR,47.87494,7.0294 45753,Saint-Amé,4820,GES,75,FR,48.02388,6.66416 45765,Saint-André-les-Vergers,4820,GES,75,FR,48.28527,4.0521 45798,Saint-Avold,4820,GES,75,FR,49.10465,6.70402 45826,Saint-Brice-Courcelles,4820,GES,75,FR,49.26667,3.98333 45913,Saint-Dié-des-Vosges,4820,GES,75,FR,48.28333,6.95 45912,Saint-Dizier,4820,GES,75,FR,48.63773,4.94892 46657,Saint-Étienne-lès-Remiremont,4820,GES,75,FR,48.02287,6.60868 45994,Saint-Germain,4820,GES,75,FR,48.25736,4.03264 46068,Saint-Hippolyte,4820,GES,75,FR,48.23156,7.37121 46148,Saint-Julien-lès-Metz,4820,GES,75,FR,49.13288,6.2024 46147,Saint-Julien-les-Villas,4820,GES,75,FR,48.27127,4.09901 46158,Saint-Just-Sauvage,4820,GES,75,FR,48.55478,3.78449 46172,Saint-Laurent,4820,GES,75,FR,49.76449,4.77193 46223,Saint-Léonard,4820,GES,75,FR,48.21638,6.94355 46196,Saint-Louis,4820,GES,75,FR,47.59206,7.55923 46209,Saint-Lyé,4820,GES,75,FR,48.36502,3.999 46321,Saint-Maurice-sur-Moselle,4820,GES,75,FR,47.85889,6.82477 46323,Saint-Max,4820,GES,75,FR,48.70426,6.20686 46328,Saint-Memmie,4820,GES,75,FR,48.95247,4.38409 46330,Saint-Menges,4820,GES,75,FR,49.73873,4.92628 46340,Saint-Michel-sur-Meurthe,4820,GES,75,FR,48.32219,6.89024 46342,Saint-Mihiel,4820,GES,75,FR,48.88746,5.55099 46356,Saint-Nabord,4820,GES,75,FR,48.05171,6.58248 46364,Saint-Nicolas-de-Port,4820,GES,75,FR,48.62857,6.29668 46397,Saint-Parres-aux-Tertres,4820,GES,75,FR,48.2978,4.11752 46461,Saint-Pouange,4820,GES,75,FR,48.22656,4.03979 46471,Saint-Privat-la-Montagne,4820,GES,75,FR,49.18768,6.03874 46672,Sainte-Croix-aux-Mines,4820,GES,75,FR,48.26249,7.22739 46673,Sainte-Croix-en-Plaine,4820,GES,75,FR,48.00876,7.38556 46704,Sainte-Marguerite,4820,GES,75,FR,48.26735,6.98439 46710,Sainte-Marie-aux-Chênes,4820,GES,75,FR,49.19262,6.0015 46711,Sainte-Marie-aux-Mines,4820,GES,75,FR,48.24649,7.18385 46716,Sainte-Maure,4820,GES,75,FR,48.34729,4.05962 46719,Sainte-Menehould,4820,GES,75,FR,49.09008,4.89733 46725,Sainte-Savine,4820,GES,75,FR,48.29637,4.04642 46739,Saizerais,4820,GES,75,FR,48.7925,6.0447 46785,Sand,4820,GES,75,FR,48.38319,7.61233 46809,Sarralbe,4820,GES,75,FR,48.99858,7.03074 46811,Sarre-Union,4820,GES,75,FR,48.93818,7.09373 46812,Sarrebourg,4820,GES,75,FR,48.73558,7.0572 46813,Sarreguemines,4820,GES,75,FR,49.10995,7.06747 46814,Sarreinsming,4820,GES,75,FR,49.09121,7.11053 46815,Sarrewerden,4820,GES,75,FR,48.92261,7.08412 46818,Sarry,4820,GES,75,FR,48.91852,4.40621 46839,Saulcy-sur-Meurthe,4820,GES,75,FR,48.23758,6.96443 46842,Saulnes,4820,GES,75,FR,49.53189,5.8213 46843,Saulny,4820,GES,75,FR,49.1577,6.10929 46846,Sault-lès-Rethel,4820,GES,75,FR,49.4998,4.36227 46849,Saulxures-lès-Nancy,4820,GES,75,FR,48.68872,6.24353 46850,Saulxures-sur-Moselotte,4820,GES,75,FR,47.94894,6.7704 46853,Sausheim,4820,GES,75,FR,47.78711,7.37267 46874,Saverne,4820,GES,75,FR,48.74164,7.36221 46897,Scherwiller,4820,GES,75,FR,48.28713,7.42135 46898,Schiltigheim,4820,GES,75,FR,48.60749,7.74931 46899,Schirmeck,4820,GES,75,FR,48.48313,7.22004 46900,Schirrhein,4820,GES,75,FR,48.80161,7.90588 46901,Schnersheim,4820,GES,75,FR,48.65741,7.56701 46904,Schœneck,4820,GES,75,FR,49.21667,6.91667 46902,Schweighouse-sur-Moder,4820,GES,75,FR,48.82009,7.7281 46903,Schwindratzheim,4820,GES,75,FR,48.75582,7.59898 46908,Scy-Chazelles,4820,GES,75,FR,49.1134,6.1147 46913,Sedan,4820,GES,75,FR,49.70187,4.94028 46916,Seichamps,4820,GES,75,FR,48.71492,6.26139 46928,Seingbouse,4820,GES,75,FR,49.11341,6.83186 47136,Sélestat,4820,GES,75,FR,48.26195,7.4489 46934,Seltz,4820,GES,75,FR,48.8952,8.10757 46944,Senones,4820,GES,75,FR,48.39475,6.97818 46947,Sentheim,4820,GES,75,FR,47.7556,7.05305 46975,Serémange-Erzange,4820,GES,75,FR,49.32062,6.09092 46957,Sermaize-les-Bains,4820,GES,75,FR,48.78507,4.91169 46976,Sessenheim,4820,GES,75,FR,48.79652,7.98719 47151,Sézanne,4820,GES,75,FR,48.72047,3.72339 46989,Sierck-les-Bains,4820,GES,75,FR,49.43942,6.35816 46990,Sierentz,4820,GES,75,FR,47.65834,7.45387 46993,Signy-le-Petit,4820,GES,75,FR,49.90277,4.2799 46994,Sigolsheim,4820,GES,75,FR,48.13493,7.2998 46996,Sillery,4820,GES,75,FR,49.19822,4.13244 47026,Solgne,4820,GES,75,FR,48.96543,6.29429 47059,Soucht,4820,GES,75,FR,48.95902,7.33434 47065,Souffelweyersheim,4820,GES,75,FR,48.6354,7.74141 47066,Soufflenheim,4820,GES,75,FR,48.83026,7.96268 47074,Soultz-Haut-Rhin,4820,GES,75,FR,47.88849,7.2286 47075,Soultz-sous-Forêts,4820,GES,75,FR,48.93693,7.8811 47076,Soultzeren,4820,GES,75,FR,48.06394,7.10233 47077,Soultzmatt,4820,GES,75,FR,47.96188,7.23759 47093,Spicheren,4820,GES,75,FR,49.19252,6.96611 47097,Staffelfelden,4820,GES,75,FR,47.82647,7.25235 47103,Steinbach,4820,GES,75,FR,47.8214,7.15279 47104,Steinbourg,4820,GES,75,FR,48.77028,7.41354 47105,Stenay,4820,GES,75,FR,49.49489,5.18606 47106,Still,4820,GES,75,FR,48.54982,7.40444 47107,Stiring-Wendel,4820,GES,75,FR,49.20198,6.9317 47108,Stosswihr,4820,GES,75,FR,48.05389,7.09964 47109,Stotzheim,4820,GES,75,FR,48.37868,7.49235 47110,Strasbourg,4820,GES,75,FR,48.58392,7.74553 47113,Suippes,4820,GES,75,FR,49.12886,4.53446 47117,Sundhoffen,4820,GES,75,FR,48.04263,7.4132 47118,Sundhouse,4820,GES,75,FR,48.2511,7.60427 47119,Surbourg,4820,GES,75,FR,48.91009,7.84716 47158,Taintrux,4820,GES,75,FR,48.24944,6.89963 47159,Taissy,4820,GES,75,FR,49.21509,4.09406 47160,Talange,4820,GES,75,FR,49.23577,6.17167 47204,Tenteling,4820,GES,75,FR,49.12544,6.93751 47211,Terville,4820,GES,75,FR,49.34668,6.13346 47214,Teting-sur-Nied,4820,GES,75,FR,49.05704,6.66294 47217,Thann,4820,GES,75,FR,47.80789,7.10301 47219,Thaon-les-Vosges,4820,GES,75,FR,48.25,6.41667 47266,Théding,4820,GES,75,FR,49.12847,6.8922 47231,Thierville-sur-Meuse,4820,GES,75,FR,49.1705,5.35266 47232,Thil,4820,GES,75,FR,49.473,5.90821 47234,Thilay,4820,GES,75,FR,49.87345,4.80772 47236,Thionville,4820,GES,75,FR,49.35994,6.16044 47289,Tinqueux,4820,GES,75,FR,49.25,3.98333 47293,Tomblaine,4820,GES,75,FR,48.68378,6.2162 47309,Toul,4820,GES,75,FR,48.68075,5.89115 47326,Tournes,4820,GES,75,FR,49.797,4.63856 47334,Tours-sur-Marne,4820,GES,75,FR,49.04873,4.1206 47402,Trémery,4820,GES,75,FR,49.2461,6.22369 47362,Tressange,4820,GES,75,FR,49.40271,5.98084 47372,Trieux,4820,GES,75,FR,49.32462,5.93049 47380,Tronville-en-Barrois,4820,GES,75,FR,48.71977,5.27808 47385,Troyes,4820,GES,75,FR,48.30073,4.08524 47386,Truchtersheim,4820,GES,75,FR,48.66313,7.60752 47410,Tucquegnieux,4820,GES,75,FR,49.3101,5.89448 47415,Turckheim,4820,GES,75,FR,48.08748,7.27707 47419,Uberach,4820,GES,75,FR,48.8499,7.62934 47422,Uckange,4820,GES,75,FR,49.30304,6.1492 47423,Uffholtz,4820,GES,75,FR,47.82082,7.17785 47426,Ungersheim,4820,GES,75,FR,47.87848,7.30797 47431,Uriménil,4820,GES,75,FR,48.10079,6.40046 47432,Urmatt,4820,GES,75,FR,48.52752,7.32565 47443,Uxegney,4820,GES,75,FR,48.19652,6.36971 47446,Uzemain,4820,GES,75,FR,48.08572,6.34443 47450,Vacon,4820,GES,75,FR,48.66865,5.60024 47453,Vagney,4820,GES,75,FR,48.00629,6.7174 47463,Val-de-Meuse,4820,GES,75,FR,48.0,5.5 47481,Valff,4820,GES,75,FR,48.4214,7.52058 47488,Valleroy,4820,GES,75,FR,49.20944,5.93703 47496,Valmont,4820,GES,75,FR,49.0843,6.69781 47503,Vandœuvre-lès-Nancy,4820,GES,75,FR,48.65,6.18333 47508,Varangéville,4820,GES,75,FR,48.63675,6.31875 47529,Vaucouleurs,4820,GES,75,FR,48.60313,5.66659 47553,Vecoux,4820,GES,75,FR,47.97797,6.63651 47557,Velaine-en-Haye,4820,GES,75,FR,48.6999,6.02754 47558,Velaines,4820,GES,75,FR,48.6988,5.30483 47570,Vendenheim,4820,GES,75,FR,48.66948,7.70983 47572,Vendeuvre-sur-Barse,4820,GES,75,FR,48.23786,4.46905 47593,Verdun,4820,GES,75,FR,49.15964,5.3829 47626,Verny,4820,GES,75,FR,49.00677,6.2035 47629,Verrières,4820,GES,75,FR,48.23334,4.14893 47643,Vertus,4820,GES,75,FR,48.90609,4.00216 47645,Verzenay,4820,GES,75,FR,49.15918,4.14543 47646,Verzy,4820,GES,75,FR,49.14576,4.16409 47932,Vézelise,4820,GES,75,FR,48.48748,6.08825 47669,Vic-sur-Seille,4820,GES,75,FR,48.78195,6.53079 47691,Vieux-Thann,4820,GES,75,FR,47.804,7.12067 47695,Vigneulles-lès-Hattonchâtel,4820,GES,75,FR,48.98152,5.70464 47699,Vignot,4820,GES,75,FR,48.77418,5.60904 47702,Vigy,4820,GES,75,FR,49.20443,6.29906 47706,Village-Neuf,4820,GES,75,FR,47.60682,7.56964 47837,Villé,4820,GES,75,FR,48.3427,7.3026 47720,Ville-sous-la-Ferté,4820,GES,75,FR,48.1206,4.78957 47757,Villenauxe-la-Grande,4820,GES,75,FR,48.58333,3.55 47804,Villers-la-Montagne,4820,GES,75,FR,49.47175,5.82522 47806,Villers-lès-Nancy,4820,GES,75,FR,48.67333,6.15283 47802,Villers-Semeuse,4820,GES,75,FR,49.74201,4.74697 47812,Villerupt,4820,GES,75,FR,49.46715,5.93202 47824,Villey-Saint-Étienne,4820,GES,75,FR,48.73254,5.97851 47827,Villiers-en-Lieu,4820,GES,75,FR,48.66785,4.89755 47845,Vincey,4820,GES,75,FR,48.33749,6.33134 47858,Vireux-Molhain,4820,GES,75,FR,50.07874,4.72426 47859,Vireux-Wallerand,4820,GES,75,FR,50.08196,4.73017 47873,Vitry-le-François,4820,GES,75,FR,48.72472,4.58439 47874,Vitry-sur-Orne,4820,GES,75,FR,49.26595,6.11074 47878,Vittel,4820,GES,75,FR,48.20085,5.94843 47881,Vivier-au-Court,4820,GES,75,FR,49.73326,4.82939 47891,Void-Vacon,4820,GES,75,FR,48.68333,5.61667 47895,Volgelsheim,4820,GES,75,FR,48.01462,7.55456 47896,Volmerange-les-Mines,4820,GES,75,FR,49.44326,6.08062 47898,Volstroff,4820,GES,75,FR,49.31135,6.25976 47904,Vosges,4820,GES,75,FR,48.19161,6.40533 47916,Vouziers,4820,GES,75,FR,49.39791,4.7012 47920,Vrigne-aux-Bois,4820,GES,75,FR,49.73716,4.85567 47937,Walbourg,4820,GES,75,FR,48.88628,7.78828 47938,Waldighofen,4820,GES,75,FR,47.55045,7.31512 47941,Walscheid,4820,GES,75,FR,48.65308,7.14998 47944,Wangenbourg-Engenthal,4820,GES,75,FR,48.62805,7.30471 47945,Warcq,4820,GES,75,FR,49.77517,4.68175 47950,Warmeriville,4820,GES,75,FR,49.35227,4.21882 47952,Wasselonne,4820,GES,75,FR,48.63779,7.44506 47954,Wassy,4820,GES,75,FR,48.49811,4.94775 47958,Wattwiller,4820,GES,75,FR,47.83649,7.17785 47963,Weitbruch,4820,GES,75,FR,48.75455,7.77935 47965,Westhoffen,4820,GES,75,FR,48.60352,7.44289 47966,Wettolsheim,4820,GES,75,FR,48.05755,7.29844 47967,Weyersheim,4820,GES,75,FR,48.71622,7.80127 47968,Widensolen,4820,GES,75,FR,48.06377,7.48015 47969,Wiesviller,4820,GES,75,FR,49.08095,7.16415 47971,Wihr-au-Val,4820,GES,75,FR,48.05196,7.20493 47973,Willerwald,4820,GES,75,FR,49.02481,7.03726 47976,Wimmenau,4820,GES,75,FR,48.91217,7.42189 47977,Wingen-sur-Moder,4820,GES,75,FR,48.919,7.37955 47978,Wingersheim,4820,GES,75,FR,48.72149,7.63464 47981,Wintzenheim,4820,GES,75,FR,48.07269,7.29072 47982,Wisches,4820,GES,75,FR,48.50881,7.26814 47984,Wissembourg,4820,GES,75,FR,49.03708,7.94548 47986,Witry-lès-Reims,4820,GES,75,FR,49.29162,4.11921 47987,Wittelsheim,4820,GES,75,FR,47.80947,7.24154 47988,Wittenheim,4820,GES,75,FR,47.8109,7.32756 47989,Wittisheim,4820,GES,75,FR,48.26451,7.58683 47991,Woerth,4820,GES,75,FR,48.93953,7.74279 47993,Woippy,4820,GES,75,FR,49.15111,6.15132 47994,Wolfgantzen,4820,GES,75,FR,48.02805,7.5004 47995,Wolfisheim,4820,GES,75,FR,48.58723,7.66708 47997,Woustviller,4820,GES,75,FR,49.07636,7.00487 47998,Xertigny,4820,GES,75,FR,48.04394,6.40836 47999,Xonrupt-Longemer,4820,GES,75,FR,48.08223,6.92944 48013,Yutz,4820,GES,75,FR,49.35571,6.1926 48026,Zillisheim,4820,GES,75,FR,47.69604,7.29736 48027,Zimmersheim,4820,GES,75,FR,47.72079,7.38847 39235,Abbeville,4828,HDF,75,FR,50.10521,1.83547 39238,Ablain-Saint-Nazaire,4828,HDF,75,FR,50.3932,2.7088 39247,Abscon,4828,HDF,75,FR,50.33333,3.3 39250,Achicourt,4828,HDF,75,FR,50.27429,2.75779 39251,Achiet-le-Grand,4828,HDF,75,FR,50.13067,2.78119 39260,Agnetz,4828,HDF,75,FR,49.38118,2.38621 39261,Agny,4828,HDF,75,FR,50.25914,2.76002 39282,Ailly-sur-Noye,4828,HDF,75,FR,49.75707,2.36367 39283,Ailly-sur-Somme,4828,HDF,75,FR,49.92886,2.19615 39287,Airaines,4828,HDF,75,FR,49.96826,1.94266 39288,Aire-sur-la-Lys,4828,HDF,75,FR,50.63871,2.39876 39292,Aix-Noulette,4828,HDF,75,FR,50.42568,2.70554 39303,Albert,4828,HDF,75,FR,50.00091,2.65096 39324,Allennes-les-Marais,4828,HDF,75,FR,50.53754,2.95361 39329,Allonne,4828,HDF,75,FR,49.40863,2.11427 39332,Allouagne,4828,HDF,75,FR,50.53167,2.51194 39352,Amblainville,4828,HDF,75,FR,49.20443,2.12242 39353,Ambleny,4828,HDF,75,FR,49.38079,3.18447 39354,Ambleteuse,4828,HDF,75,FR,50.80729,1.60388 39364,Amiens,4828,HDF,75,FR,49.9,2.3 39381,Andeville,4828,HDF,75,FR,49.26078,2.16427 39387,Andres,4828,HDF,75,FR,50.86556,1.92094 39401,Angicourt,4828,HDF,75,FR,49.31175,2.50419 39406,Angres,4828,HDF,75,FR,50.40572,2.76054 39408,Angy,4828,HDF,75,FR,49.32975,2.32854 39409,Anhiers,4828,HDF,75,FR,50.40737,3.15512 39411,Aniche,4828,HDF,75,FR,50.32995,3.25346 39412,Anizy-le-Château,4828,HDF,75,FR,49.50678,3.45119 39413,Annay,4828,HDF,75,FR,50.46303,2.88122 39417,Annequin,4828,HDF,75,FR,50.50525,2.72019 39421,Annezin,4828,HDF,75,FR,50.53192,2.61785 39422,Annoeullin,4828,HDF,75,FR,50.52925,2.9318 39425,Anor,4828,HDF,75,FR,49.98999,4.10049 39427,Ansauvillers,4828,HDF,75,FR,49.56523,2.38742 39430,Anstaing,4828,HDF,75,FR,50.60473,3.19079 39438,Anzin,4828,HDF,75,FR,50.37201,3.50387 39439,Anzin-Saint-Aubin,4828,HDF,75,FR,50.31313,2.74732 39469,Ardres,4828,HDF,75,FR,50.85786,1.98168 39490,Arleux,4828,HDF,75,FR,50.28037,3.10448 39491,Armbouts-Cappel,4828,HDF,75,FR,50.97682,2.35352 39493,Armentières,4828,HDF,75,FR,50.68568,2.88214 39504,Arnèke,4828,HDF,75,FR,50.83219,2.40943 39508,Arques,4828,HDF,75,FR,50.73375,2.30237 39511,Arras,4828,HDF,75,FR,50.29301,2.78186 39530,Artres,4828,HDF,75,FR,50.29482,3.54013 39556,Athies-sous-Laon,4828,HDF,75,FR,49.57369,3.68417 39561,Attiches,4828,HDF,75,FR,50.5222,3.06222 39562,Attichy,4828,HDF,75,FR,49.41121,3.04949 39570,Auberchicourt,4828,HDF,75,FR,50.33333,3.23333 39573,Aubers,4828,HDF,75,FR,50.59543,2.82666 39580,Aubigny-au-Bac,4828,HDF,75,FR,50.2637,3.16448 39581,Aubigny-en-Artois,4828,HDF,75,FR,50.35,2.58333 39588,Aubry-du-Hainaut,4828,HDF,75,FR,50.36667,3.46667 39590,Auby,4828,HDF,75,FR,50.41457,3.05396 39593,Auchel,4828,HDF,75,FR,50.50345,2.47346 39595,Auchy-lès-Hesdin,4828,HDF,75,FR,50.40114,2.10145 39594,Auchy-les-Mines,4828,HDF,75,FR,50.51349,2.78283 39599,Audruicq,4828,HDF,75,FR,50.87795,2.07975 39611,Aulnois-sous-Laon,4828,HDF,75,FR,49.61429,3.60547 39612,Aulnoy-lez-Valenciennes,4828,HDF,75,FR,50.33333,3.53333 39613,Aulnoye-Aymeries,4828,HDF,75,FR,50.20141,3.83844 39614,Ault,4828,HDF,75,FR,50.10404,1.45 39621,Auneuil,4828,HDF,75,FR,49.37026,1.99712 39645,Auxi-le-Château,4828,HDF,75,FR,50.23101,2.11593 39661,Avelin,4828,HDF,75,FR,50.53968,3.08222 39664,Avesnelles,4828,HDF,75,FR,50.11782,3.94674 39665,Avesnes-le-Comte,4828,HDF,75,FR,50.27767,2.52957 39666,Avesnes-le-Sec,4828,HDF,75,FR,50.251,3.37768 39667,Avesnes-les-Aubert,4828,HDF,75,FR,50.2,3.38333 39671,Avilly-Saint-Léonard,4828,HDF,75,FR,49.19449,2.54148 39672,Avion,4828,HDF,75,FR,50.41038,2.83053 39679,Avrechy,4828,HDF,75,FR,49.44796,2.4271 39700,Bachant,4828,HDF,75,FR,50.2154,3.86835 39701,Bachy,4828,HDF,75,FR,50.55079,3.25976 39725,Bailleul,4828,HDF,75,FR,50.73592,2.73594 39726,Bailleul-Sir-Berthoult,4828,HDF,75,FR,50.33752,2.85129 39727,Bailleul-sur-Thérain,4828,HDF,75,FR,49.38526,2.22279 39728,Bailleval,4828,HDF,75,FR,49.34605,2.45695 39733,Baincthun,4828,HDF,75,FR,50.70994,1.68075 39740,Baisieux,4828,HDF,75,FR,50.60841,3.25251 39742,Balagny-sur-Thérain,4828,HDF,75,FR,49.29605,2.33645 39764,Bapaume,4828,HDF,75,FR,50.10379,2.84966 39787,Barlin,4828,HDF,75,FR,50.45238,2.61955 39816,Bauvin,4828,HDF,75,FR,50.51714,2.89404 39818,Bavay,4828,HDF,75,FR,50.29828,3.79372 39837,Beaucamps-le-Vieux,4828,HDF,75,FR,49.84642,1.78272 39839,Beauchamps,4828,HDF,75,FR,50.01202,1.51764 39858,Beaumetz-lès-Loges,4828,HDF,75,FR,50.23897,2.65818 39879,Beauquesne,4828,HDF,75,FR,50.08526,2.39276 39880,Beaurains,4828,HDF,75,FR,50.26599,2.79467 39881,Beaurainville,4828,HDF,75,FR,50.42432,1.89938 39884,Beaurevoir,4828,HDF,75,FR,49.99714,3.30855 39888,Beautor,4828,HDF,75,FR,49.65214,3.34475 39889,Beauvais,4828,HDF,75,FR,49.43333,2.08333 39890,Beauval,4828,HDF,75,FR,50.10789,2.33269 39895,Beauvois-en-Cambrésis,4828,HDF,75,FR,50.13735,3.3787 39908,Bellaing,4828,HDF,75,FR,50.36811,3.42515 39920,Belleu,4828,HDF,75,FR,49.35917,3.33556 39943,Berck,4828,HDF,75,FR,50.4,1.6 39944,Berck-Plage,4828,HDF,75,FR,50.40704,1.56446 39948,Bergues,4828,HDF,75,FR,50.96882,2.43242 39949,Berlaimont,4828,HDF,75,FR,50.20155,3.81343 39951,Bernaville,4828,HDF,75,FR,50.13232,2.163 39966,Bersée,4828,HDF,75,FR,50.47978,3.14765 39967,Berteaucourt-les-Dames,4828,HDF,75,FR,50.04697,2.1575 39968,Berthecourt,4828,HDF,75,FR,49.35097,2.22471 39970,Bertry,4828,HDF,75,FR,50.08718,3.44298 40430,Béthencourt-sur-Mer,4828,HDF,75,FR,50.07756,1.50348 40432,Béthisy-Saint-Martin,4828,HDF,75,FR,49.2948,2.81743 40433,Béthisy-Saint-Pierre,4828,HDF,75,FR,49.30482,2.79636 40434,Béthune,4828,HDF,75,FR,50.52965,2.64003 39988,Betz,4828,HDF,75,FR,49.15558,2.95584 39992,Beuvrages,4828,HDF,75,FR,50.38414,3.4942 39993,Beuvry,4828,HDF,75,FR,50.51674,2.68541 40004,Biache-Saint-Vaast,4828,HDF,75,FR,50.30869,2.94777 40012,Bierne,4828,HDF,75,FR,50.96232,2.40963 40022,Billy-Berclau,4828,HDF,75,FR,50.51783,2.86613 40023,Billy-Montigny,4828,HDF,75,FR,50.41711,2.90286 40024,Billy-sur-Aisne,4828,HDF,75,FR,49.35632,3.38357 40047,Blaincourt-lès-Précy,4828,HDF,75,FR,49.23333,2.35 40058,Blaringhem,4828,HDF,75,FR,50.6911,2.40321 40064,Blendecques,4828,HDF,75,FR,50.71843,2.28601 40075,Blérancourt,4828,HDF,75,FR,49.51667,3.15 40080,Boeschepe,4828,HDF,75,FR,50.8,2.7 40081,Bohain-en-Vermandois,4828,HDF,75,FR,49.9873,3.453 40085,Bois-Grenier,4828,HDF,75,FR,50.64985,2.87409 40103,Bollezeele,4828,HDF,75,FR,50.86687,2.34751 40112,Bondues,4828,HDF,75,FR,50.70196,3.09497 40135,Boran-sur-Oise,4828,HDF,75,FR,49.16715,2.35803 40142,Bornel,4828,HDF,75,FR,49.1982,2.20912 40151,Bouchain,4828,HDF,75,FR,50.28519,3.31491 40238,Boué,4828,HDF,75,FR,50.01141,3.69608 40174,Boulogne-sur-Mer,4828,HDF,75,FR,50.72571,1.61392 40181,Bourbourg,4828,HDF,75,FR,50.94783,2.19576 40200,Bourghelles,4828,HDF,75,FR,50.56501,3.24447 40208,Bourlon,4828,HDF,75,FR,50.17692,3.11425 40214,Bousbecque,4828,HDF,75,FR,50.77123,3.08459 40215,Bousies,4828,HDF,75,FR,50.15097,3.61752 40220,Boussois,4828,HDF,75,FR,50.28907,4.04117 40225,Bouttencourt,4828,HDF,75,FR,49.93725,1.63431 40227,Bouvignies,4828,HDF,75,FR,50.43627,3.24361 40228,Bouvigny-Boyeffles,4828,HDF,75,FR,50.42146,2.67209 40239,Boves,4828,HDF,75,FR,49.84645,2.39605 40249,Braine,4828,HDF,75,FR,49.34261,3.53262 40259,Brasles,4828,HDF,75,FR,49.0481,3.43 40266,Bray-Dunes,4828,HDF,75,FR,51.07786,2.51673 40269,Bray-sur-Somme,4828,HDF,75,FR,49.94085,2.71847 40271,Brebières,4828,HDF,75,FR,50.33333,3.01667 40365,Brêmes,4828,HDF,75,FR,50.85483,1.97687 40274,Brenouille,4828,HDF,75,FR,49.30551,2.54437 40276,Bresles,4828,HDF,75,FR,49.41044,2.25024 40283,Breteuil,4828,HDF,75,FR,49.63357,2.29509 40293,Breuil-le-Sec,4828,HDF,75,FR,49.37135,2.45084 40294,Breuil-le-Vert,4828,HDF,75,FR,49.36176,2.43633 40336,Brouckerque,4828,HDF,75,FR,50.95476,2.29378 40338,Bruay-la-Buissière,4828,HDF,75,FR,50.48333,2.55 40339,Bruay-sur-l’Escaut,4828,HDF,75,FR,50.39918,3.54379 40344,Bruille-lez-Marchiennes,4828,HDF,75,FR,50.36068,3.24424 40343,Bruille-Saint-Amand,4828,HDF,75,FR,50.46605,3.50013 40349,Bruyères-et-Montbérault,4828,HDF,75,FR,49.52535,3.66369 40372,Bucquoy,4828,HDF,75,FR,50.13973,2.71036 40373,Bucy-le-Long,4828,HDF,75,FR,49.39072,3.39582 40378,Buironfosse,4828,HDF,75,FR,49.96659,3.83587 40384,Bully-les-Mines,4828,HDF,75,FR,50.4438,2.72703 40385,Burbure,4828,HDF,75,FR,50.53663,2.46897 40392,Bury,4828,HDF,75,FR,49.31307,2.34401 40393,Busigny,4828,HDF,75,FR,50.03424,3.46713 40394,Busnes,4828,HDF,75,FR,50.58781,2.51827 40630,Caëstre,4828,HDF,75,FR,50.75838,2.60274 40460,Cagny,4828,HDF,75,FR,49.86217,2.34266 40469,Calais,4828,HDF,75,FR,50.95194,1.85635 40475,Calonne-Ricouart,4828,HDF,75,FR,50.48504,2.47335 40476,Calonne-sur-la-Lys,4828,HDF,75,FR,50.62292,2.61664 40486,Camblain-Châtelain,4828,HDF,75,FR,50.48355,2.45521 40489,Cambrai,4828,HDF,75,FR,50.17596,3.23472 40491,Cambronne-lès-Clermont,4828,HDF,75,FR,49.33022,2.39928 40492,Cambronne-lès-Ribécourt,4828,HDF,75,FR,49.50711,2.89797 40493,Camiers,4828,HDF,75,FR,50.57153,1.61325 40494,Camon,4828,HDF,75,FR,49.88764,2.34486 40496,Campagne-lès-Hesdin,4828,HDF,75,FR,50.39724,1.87494 40499,Camphin-en-Carembault,4828,HDF,75,FR,50.51196,2.9871 40500,Camphin-en-Pévèle,4828,HDF,75,FR,50.59561,3.26082 40521,Cantin,4828,HDF,75,FR,50.30885,3.12765 40529,Capinghem,4828,HDF,75,FR,50.64551,2.96193 40530,Cappelle-en-Pévèle,4828,HDF,75,FR,50.51011,3.17133 40531,Cappelle-la-Grande,4828,HDF,75,FR,50.99979,2.35848 40547,Carlepont,4828,HDF,75,FR,49.51438,3.02327 40566,Cartignies,4828,HDF,75,FR,50.0929,3.84473 40567,Carvin,4828,HDF,75,FR,50.49235,2.95815 40569,Cassel,4828,HDF,75,FR,50.80109,2.48527 40598,Catenoy,4828,HDF,75,FR,49.36824,2.51054 40600,Cauchy-à-la-Tour,4828,HDF,75,FR,50.50394,2.44606 40604,Caudry,4828,HDF,75,FR,50.1249,3.41186 40605,Cauffry,4828,HDF,75,FR,49.31978,2.44581 40614,Cauvigny,4828,HDF,75,FR,49.3018,2.24844 40622,Cayeux-sur-Mer,4828,HDF,75,FR,50.182,1.494 40702,Chamant,4828,HDF,75,FR,49.2199,2.61176 40706,Chambly,4828,HDF,75,FR,49.16667,2.25 40775,Chantilly,4828,HDF,75,FR,49.19461,2.47124 40805,Charly-sur-Marne,4828,HDF,75,FR,48.97749,3.28464 40807,Charmes,4828,HDF,75,FR,49.65345,3.37857 40946,Château-Thierry,4828,HDF,75,FR,49.04636,3.40304 40841,Chaulnes,4828,HDF,75,FR,49.81699,2.80064 40844,Chaumont-en-Vexin,4828,HDF,75,FR,49.26595,1.88597 40849,Chauny,4828,HDF,75,FR,49.61514,3.21857 41012,Chépy,4828,HDF,75,FR,50.06361,1.64694 41015,Chéreng,4828,HDF,75,FR,50.61059,3.20666 40902,Chevrières,4828,HDF,75,FR,49.34645,2.68219 41017,Chézy-sur-Marne,4828,HDF,75,FR,48.98881,3.36786 40906,Chierry,4828,HDF,75,FR,49.0394,3.42976 40915,Chiry-Ourscamp,4828,HDF,75,FR,49.54378,2.94721 40918,Chocques,4828,HDF,75,FR,50.54084,2.57193 40921,Choisy-au-Bac,4828,HDF,75,FR,49.43777,2.87739 41022,Cinqueux,4828,HDF,75,FR,49.31739,2.52997 41025,Cires-lès-Mello,4828,HDF,75,FR,49.27242,2.3584 41036,Clairoix,4828,HDF,75,FR,49.44264,2.84628 41044,Clary,4828,HDF,75,FR,50.07789,3.39943 41047,Clermont,4828,HDF,75,FR,49.37897,2.41258 41085,Coincy,4828,HDF,75,FR,49.16036,3.42202 41089,Colleret,4828,HDF,75,FR,50.25693,4.08083 41116,Comines,4828,HDF,75,FR,50.7615,3.01063 41124,Compiègne,4828,HDF,75,FR,49.41794,2.82606 41141,Condé-sur-l’Escaut,4828,HDF,75,FR,50.45436,3.58884 41132,Condette,4828,HDF,75,FR,50.65817,1.63386 41158,Conty,4828,HDF,75,FR,49.741,2.1512 41159,Coquelles,4828,HDF,75,FR,50.93461,1.7988 41163,Corbehem,4828,HDF,75,FR,50.33141,3.04995 41168,Corbie,4828,HDF,75,FR,49.90672,2.50682 41218,Coucy-le-Château-Auffrique,4828,HDF,75,FR,49.52083,3.32381 41219,Coudekerque-Branche,4828,HDF,75,FR,51.02288,2.39359 41220,Coudekerque-Village,4828,HDF,75,FR,51.0,2.41667 41222,Coudun,4828,HDF,75,FR,49.46146,2.81248 41232,Coulogne,4828,HDF,75,FR,50.92463,1.88137 41243,Courcelles-lès-Lens,4828,HDF,75,FR,50.41667,3.01667 41246,Courchelettes,4828,HDF,75,FR,50.34043,3.05938 41254,Courmelles,4828,HDF,75,FR,49.34595,3.31215 41260,Courrières,4828,HDF,75,FR,50.45701,2.94725 41276,Cousolre,4828,HDF,75,FR,50.24607,4.14941 41281,Coutiches,4828,HDF,75,FR,50.4552,3.20384 41284,Couvron-et-Aumencourt,4828,HDF,75,FR,49.64476,3.51857 41289,Coye-la-Forêt,4828,HDF,75,FR,49.14233,2.47038 41341,Crécy-en-Ponthieu,4828,HDF,75,FR,50.25193,1.88085 41342,Crécy-sur-Serre,4828,HDF,75,FR,49.69594,3.62453 41302,Creil,4828,HDF,75,FR,49.25672,2.48477 41349,Crépy,4828,HDF,75,FR,49.6,3.51667 41350,Crépy-en-Valois,4828,HDF,75,FR,49.23359,2.88807 41306,Crespin,4828,HDF,75,FR,50.4211,3.66137 41339,Crèvecœur-le-Grand,4828,HDF,75,FR,49.6,2.08333 41352,Crézancy,4828,HDF,75,FR,49.04833,3.51047 41320,Crisolles,4828,HDF,75,FR,49.6225,3.01451 41322,Croisilles,4828,HDF,75,FR,50.19978,2.87935 41325,Croix,4828,HDF,75,FR,50.67846,3.1493 41331,Crouy,4828,HDF,75,FR,49.40274,3.35834 41332,Crouy-en-Thelle,4828,HDF,75,FR,49.21487,2.32146 41357,Cucq,4828,HDF,75,FR,50.47733,1.62018 41360,Cuffies,4828,HDF,75,FR,49.40358,3.32119 41365,Cuinchy,4828,HDF,75,FR,50.5175,2.7488 41366,Cuincy,4828,HDF,75,FR,50.37933,3.05301 41367,Cuise-la-Motte,4828,HDF,75,FR,49.38642,3.00588 41375,Curgies,4828,HDF,75,FR,50.32975,3.60299 41388,Cysoing,4828,HDF,75,FR,50.56939,3.21627 41405,Dainville,4828,HDF,75,FR,50.28097,2.72603 41430,Dannes,4828,HDF,75,FR,50.58799,1.61381 41433,Dargnies,4828,HDF,75,FR,50.04144,1.52526 41446,Dechy,4828,HDF,75,FR,50.35,3.11667 41450,Denain,4828,HDF,75,FR,50.3293,3.3943 41609,Département de lAisne,4828,HDF,75,FR,49.5,3.5 41621,Département de lOise,4828,HDF,75,FR,49.5,2.5 41457,Desvres,4828,HDF,75,FR,50.66884,1.83478 41463,Deûlémont,4828,HDF,75,FR,50.73333,2.95 41496,Divion,4828,HDF,75,FR,50.47169,2.50546 41502,Doingt,4828,HDF,75,FR,49.92113,2.96766 41513,Domart-en-Ponthieu,4828,HDF,75,FR,50.07437,2.12596 41528,Don,4828,HDF,75,FR,50.54912,2.91817 41545,Douai,4828,HDF,75,FR,50.37069,3.07922 41549,Douchy-les-Mines,4828,HDF,75,FR,50.3008,3.3927 41553,Doullens,4828,HDF,75,FR,50.15724,2.34019 41555,Dourges,4828,HDF,75,FR,50.43636,2.98589 41560,Douvrin,4828,HDF,75,FR,50.50916,2.83053 41572,Dreslincourt,4828,HDF,75,FR,49.52809,2.92699 41573,Dreuil-lès-Amiens,4828,HDF,75,FR,49.91483,2.22893 41575,Drocourt,4828,HDF,75,FR,50.39002,2.92425 41588,Duisans,4828,HDF,75,FR,50.30633,2.68653 41592,Dunkerque,4828,HDF,75,FR,51.03297,2.377 41598,Dury,4828,HDF,75,FR,49.84731,2.2707 48037,Écaillon,4828,HDF,75,FR,50.35034,3.21664 48049,Écourt-Saint-Quentin,4828,HDF,75,FR,50.25226,3.07331 41657,Ecques,4828,HDF,75,FR,50.66998,2.28633 48064,Éleu-dit-Leauwette,4828,HDF,75,FR,50.42147,2.81079 48067,Émerchicourt,4828,HDF,75,FR,50.30786,3.24537 41667,Emmerin,4828,HDF,75,FR,50.59475,3.00124 41670,Englefontaine,4828,HDF,75,FR,50.19091,3.64401 41673,Ennetières-en-Weppes,4828,HDF,75,FR,50.6353,2.94012 41674,Ennevelin,4828,HDF,75,FR,50.54121,3.12972 48071,Épehy,4828,HDF,75,FR,50.0,3.13333 48072,Éperlecques,4828,HDF,75,FR,50.80566,2.15207 41688,Eppeville,4828,HDF,75,FR,49.74069,3.05114 48088,Équihen-Plage,4828,HDF,75,FR,50.67557,1.57225 41691,Ercuis,4828,HDF,75,FR,49.23465,2.30407 41699,Erquinghem-Lys,4828,HDF,75,FR,50.67601,2.84505 41701,Erre,4828,HDF,75,FR,50.36252,3.31561 41706,Escaudain,4828,HDF,75,FR,50.33315,3.3443 41707,Escaudœuvres,4828,HDF,75,FR,50.2,3.26667 41708,Escautpont,4828,HDF,75,FR,50.41875,3.55341 41712,Esches,4828,HDF,75,FR,49.22086,2.16595 41723,Esquéhéries,4828,HDF,75,FR,49.98391,3.74743 41720,Esquelbecq,4828,HDF,75,FR,50.88694,2.43215 41721,Esquerdes,4828,HDF,75,FR,50.70414,2.18851 41724,Essars,4828,HDF,75,FR,50.54868,2.6662 41727,Essigny-le-Grand,4828,HDF,75,FR,49.77865,3.27774 41728,Essômes-sur-Marne,4828,HDF,75,FR,49.02881,3.37571 41730,Estaires,4828,HDF,75,FR,50.64574,2.72782 41732,Estevelles,4828,HDF,75,FR,50.47653,2.90928 41737,Estrées,4828,HDF,75,FR,50.30079,3.0698 41738,Estrées-Saint-Denis,4828,HDF,75,FR,49.42602,2.64293 48096,Étampes-sur-Marne,4828,HDF,75,FR,49.03464,3.41893 48098,Étaples,4828,HDF,75,FR,50.52194,1.63319 48107,Étreillers,4828,HDF,75,FR,49.83059,3.16029 48111,Étreux,4828,HDF,75,FR,49.98333,3.65 48119,Évin-Malmaison,4828,HDF,75,FR,50.43923,3.03139 41762,Faches-Thumesnil,4828,HDF,75,FR,50.58333,3.06667 41769,Famars,4828,HDF,75,FR,50.31743,3.51945 41771,Fampoux,4828,HDF,75,FR,50.30173,2.8731 41780,Faumont,4828,HDF,75,FR,50.46017,3.13713 42000,Féchain,4828,HDF,75,FR,50.26638,3.21024 41792,Feignies,4828,HDF,75,FR,50.29806,3.91534 41797,Fenain,4828,HDF,75,FR,50.36667,3.3 41998,Fère-en-Tardenois,4828,HDF,75,FR,49.2,3.51667 42005,Férin,4828,HDF,75,FR,50.32732,3.07415 41802,Ferques,4828,HDF,75,FR,50.83002,1.75994 41805,Ferrière-la-Grande,4828,HDF,75,FR,50.25521,3.99288 41809,Festubert,4828,HDF,75,FR,50.5425,2.73593 41811,Feuchy,4828,HDF,75,FR,50.29439,2.84335 41812,Feuquières,4828,HDF,75,FR,49.64677,1.84784 41813,Feuquières-en-Vimeu,4828,HDF,75,FR,50.05982,1.60465 41827,Fitz-James,4828,HDF,75,FR,49.39113,2.4307 41833,Flavy-le-Martel,4828,HDF,75,FR,49.71299,3.1915 41837,Flers-en-Escrebieux,4828,HDF,75,FR,50.3979,3.06038 41838,Flesselles,4828,HDF,75,FR,50.00202,2.26119 41840,Fleurbaix,4828,HDF,75,FR,50.65061,2.83305 41844,Fleurines,4828,HDF,75,FR,49.25901,2.58385 41853,Flines-lès-Mortagne,4828,HDF,75,FR,50.50281,3.46495 41852,Flines-lez-Raches,4828,HDF,75,FR,50.41667,3.18333 41855,Flixecourt,4828,HDF,75,FR,50.01465,2.08095 41868,Folembray,4828,HDF,75,FR,49.54334,3.29119 41878,Fontaine-au-Pire,4828,HDF,75,FR,50.1325,3.37667 41877,Fontaine-Notre-Dame,4828,HDF,75,FR,50.16681,3.15812 41911,Forest-sur-Marque,4828,HDF,75,FR,50.63341,3.18939 41914,Formerie,4828,HDF,75,FR,49.64928,1.73106 41916,Fort-Mahon-Plage,4828,HDF,75,FR,50.33955,1.55984 41917,Fort-Mardyck,4828,HDF,75,FR,51.02899,2.30724 41930,Fouquereuil,4828,HDF,75,FR,50.51885,2.60024 41931,Fouquières-lès-Béthune,4828,HDF,75,FR,50.51534,2.60999 41932,Fouquières-lès-Lens,4828,HDF,75,FR,50.42842,2.91321 41935,Fourmies,4828,HDF,75,FR,50.01532,4.04784 41936,Fournes-en-Weppes,4828,HDF,75,FR,50.58497,2.88793 41955,Frelinghien,4828,HDF,75,FR,50.71667,2.93333 41959,Fresnes-sur-Escaut,4828,HDF,75,FR,50.43382,3.57752 41960,Fresnoy-le-Grand,4828,HDF,75,FR,49.94757,3.41841 41962,Fressenneville,4828,HDF,75,FR,50.06838,1.57816 41988,Fréthun,4828,HDF,75,FR,50.91729,1.82505 41963,Fretin,4828,HDF,75,FR,50.55745,3.13668 41989,Frévent,4828,HDF,75,FR,50.27608,2.28725 41966,Friville-Escarbotin,4828,HDF,75,FR,50.08602,1.5456 41982,Fruges,4828,HDF,75,FR,50.51501,2.13292 42024,Gamaches,4828,HDF,75,FR,49.98615,1.55624 42053,Gauchy,4828,HDF,75,FR,49.82765,3.27371 42063,Genech,4828,HDF,75,FR,50.53122,3.21651 42085,Ghyvelde,4828,HDF,75,FR,51.05275,2.52642 42106,Givenchy-en-Gohelle,4828,HDF,75,FR,50.3908,2.7732 42116,Godewaersvelde,4828,HDF,75,FR,50.79399,2.64456 42303,Gœulzin,4828,HDF,75,FR,50.31667,3.1 42118,Goincourt,4828,HDF,75,FR,49.42614,2.03621 42122,Gommegnies,4828,HDF,75,FR,50.27155,3.70625 42125,Gondecourt,4828,HDF,75,FR,50.54469,2.98378 42131,Gonnehem,4828,HDF,75,FR,50.56061,2.57277 42140,Gosnay,4828,HDF,75,FR,50.50622,2.58904 42156,Gouvieux,4828,HDF,75,FR,49.18705,2.41439 42158,Gouy-sous-Bellonne,4828,HDF,75,FR,50.31139,3.05657 42159,Gouzeaucourt,4828,HDF,75,FR,50.05606,3.12351 42173,Grand-Fort-Philippe,4828,HDF,75,FR,50.99961,2.10784 42176,Grande-Synthe,4828,HDF,75,FR,51.0154,2.29975 42178,Grandfresnoy,4828,HDF,75,FR,49.37218,2.65216 42181,Grandvilliers,4828,HDF,75,FR,49.66547,1.94088 42189,Gravelines,4828,HDF,75,FR,50.98651,2.12807 42198,Grenay,4828,HDF,75,FR,50.44962,2.75168 42218,Groffliers,4828,HDF,75,FR,50.38444,1.61474 42231,Gruson,4828,HDF,75,FR,50.59583,3.20777 42238,Guarbecque,4828,HDF,75,FR,50.61162,2.48895 42247,Guesnain,4828,HDF,75,FR,50.35,3.15 42257,Guignicourt,4828,HDF,75,FR,49.43714,3.96755 42290,Guînes,4828,HDF,75,FR,50.86708,1.87025 42268,Guiscard,4828,HDF,75,FR,49.6566,3.05127 42270,Guise,4828,HDF,75,FR,49.90055,3.62801 42311,Haillicourt,4828,HDF,75,FR,50.47519,2.57458 42312,Haisnes,4828,HDF,75,FR,50.50776,2.79416 42313,Hallencourt,4828,HDF,75,FR,49.99201,1.87649 42314,Hallennes-lez-Haubourdin,4828,HDF,75,FR,50.61667,2.96667 42315,Hallines,4828,HDF,75,FR,50.71087,2.22629 42316,Halluin,4828,HDF,75,FR,50.78628,3.12611 42317,Ham,4828,HDF,75,FR,49.74721,3.07301 42321,Hames-Boucres,4828,HDF,75,FR,50.88178,1.84338 42325,Harbonnières,4828,HDF,75,FR,49.84958,2.66812 42326,Hardinghen,4828,HDF,75,FR,50.80414,1.82122 42330,Harly,4828,HDF,75,FR,49.83766,3.31001 42331,Harnes,4828,HDF,75,FR,50.44643,2.90481 42332,Hasnon,4828,HDF,75,FR,50.42472,3.38657 42334,Haspres,4828,HDF,75,FR,50.25829,3.41695 42336,Haubourdin,4828,HDF,75,FR,50.60826,2.99143 42338,Haulchin,4828,HDF,75,FR,50.3172,3.43599 42339,Haussy,4828,HDF,75,FR,50.2183,3.47683 42354,Hautmont,4828,HDF,75,FR,50.25077,3.92143 42358,Haveluy,4828,HDF,75,FR,50.35289,3.40389 42359,Haverskerque,4828,HDF,75,FR,50.64089,2.54162 42362,Hazebrouck,4828,HDF,75,FR,50.72374,2.53729 42451,Hélesmes,4828,HDF,75,FR,50.37036,3.35918 42365,Helfaut,4828,HDF,75,FR,50.69783,2.24234 42366,Hem,4828,HDF,75,FR,50.65256,3.18681 42453,Hénin-Beaumont,4828,HDF,75,FR,50.41359,2.96485 42376,Hergnies,4828,HDF,75,FR,50.47287,3.52612 42460,Hérin,4828,HDF,75,FR,50.35557,3.45309 42377,Herlies,4828,HDF,75,FR,50.57753,2.85285 42379,Hermes,4828,HDF,75,FR,49.36032,2.24461 42380,Hermies,4828,HDF,75,FR,50.11126,3.04202 42386,Hersin-Coupigny,4828,HDF,75,FR,50.44796,2.6494 42387,Herzeele,4828,HDF,75,FR,50.88584,2.5351 42388,Hesdin,4828,HDF,75,FR,50.37349,2.0382 42392,Heuringhem,4828,HDF,75,FR,50.69638,2.28333 42398,Hinges,4828,HDF,75,FR,50.56674,2.6216 42402,Hirson,4828,HDF,75,FR,49.92262,4.08259 42408,Holnon,4828,HDF,75,FR,49.86086,3.21509 42412,Hombleux,4828,HDF,75,FR,49.73942,2.98574 42413,Homblières,4828,HDF,75,FR,49.85031,3.36456 42416,Hondschoote,4828,HDF,75,FR,50.978,2.58372 42419,Hordain,4828,HDF,75,FR,50.26306,3.31358 42421,Hornaing,4828,HDF,75,FR,50.36835,3.33707 42422,Hornoy-le-Bourg,4828,HDF,75,FR,49.85,1.9 42423,Houdain,4828,HDF,75,FR,50.4504,2.53777 42429,Houplin-Ancoisne,4828,HDF,75,FR,50.56284,3.00251 42430,Houplines,4828,HDF,75,FR,50.69499,2.91518 42434,Hoymille,4828,HDF,75,FR,50.97187,2.44738 42440,Hulluch,4828,HDF,75,FR,50.48961,2.81232 42481,Illies,4828,HDF,75,FR,50.56144,2.83011 42498,Isbergues,4828,HDF,75,FR,50.62328,2.45902 42503,Isques,4828,HDF,75,FR,50.67391,1.65445 42511,Itancourt,4828,HDF,75,FR,49.80664,3.34427 42518,Iwuy,4828,HDF,75,FR,50.233,3.32058 42543,Jaux,4828,HDF,75,FR,49.3912,2.77809 42549,Jenlain,4828,HDF,75,FR,50.31164,3.62872 42550,Jeumont,4828,HDF,75,FR,50.29658,4.10108 42597,Jussy,4828,HDF,75,FR,49.71984,3.2327 42614,Killem,4828,HDF,75,FR,50.95779,2.56068 42635,La Bassée,4828,HDF,75,FR,50.53424,2.8062 42667,La Capelle,4828,HDF,75,FR,49.96667,3.91667 42668,La Capelle-lès-Boulogne,4828,HDF,75,FR,50.73302,1.70147 42697,La Chapelle-en-Serval,4828,HDF,75,FR,49.12842,2.53405 42719,La Couture,4828,HDF,75,FR,50.58212,2.7071 42759,La Fère,4828,HDF,75,FR,49.66286,3.36631 42741,La Ferté-Milon,4828,HDF,75,FR,49.17453,3.12885 42745,La Flamengrie,4828,HDF,75,FR,50.00175,3.92081 42769,La Gorgue,4828,HDF,75,FR,50.6379,2.71502 42793,La Longueville,4828,HDF,75,FR,50.28939,3.85672 42797,La Madeleine,4828,HDF,75,FR,50.64603,3.07585 42877,La Sentinelle,4828,HDF,75,FR,50.35115,3.48425 42932,Labeuvrière,4828,HDF,75,FR,50.51915,2.56268 42934,Laboissière-en-Thelle,4828,HDF,75,FR,49.29329,2.1615 42936,Labourse,4828,HDF,75,FR,50.49883,2.68121 42945,Lachapelle-aux-Pots,4828,HDF,75,FR,49.44905,1.90228 42948,Lacroix-Saint-Ouen,4828,HDF,75,FR,49.35685,2.78803 42958,Lagny-le-Sec,4828,HDF,75,FR,49.08744,2.74502 42967,Laigneville,4828,HDF,75,FR,49.29149,2.44581 42976,Lallaing,4828,HDF,75,FR,50.39012,3.16949 42986,Lambersart,4828,HDF,75,FR,50.65,3.03333 42988,Lambres-lez-Douai,4828,HDF,75,FR,50.35,3.06667 42990,Lamorlaye,4828,HDF,75,FR,49.16246,2.44687 42999,Landas,4828,HDF,75,FR,50.47269,3.30367 43009,Landrecies,4828,HDF,75,FR,50.12499,3.69171 43038,Lannoy,4828,HDF,75,FR,50.66674,3.21012 43057,Laon,4828,HDF,75,FR,49.5631,3.62714 43064,Lapugnoy,4828,HDF,75,FR,50.51635,2.5346 43087,Lassigny,4828,HDF,75,FR,49.58828,2.84289 43105,Lauwin-Planque,4828,HDF,75,FR,50.39024,3.0451 43115,Laventie,4828,HDF,75,FR,50.62818,2.77076 43177,Le Crotoy,4828,HDF,75,FR,50.216,1.625 43181,Le Doulieu,4828,HDF,75,FR,50.68194,2.71741 43228,Le Mesnil-en-Thelle,4828,HDF,75,FR,49.1783,2.28573 43232,Le Meux,4828,HDF,75,FR,49.36718,2.74374 43242,Le Nouvion-en-Thiérache,4828,HDF,75,FR,50.01625,3.78509 43263,Le Plessis-Belleville,4828,HDF,75,FR,49.09501,2.75614 43265,Le Plessis-Brion,4828,HDF,75,FR,49.46419,2.89096 43278,Le Portel,4828,HDF,75,FR,50.70559,1.57574 43290,Le Quesnoy,4828,HDF,75,FR,50.24797,3.63656 43321,Le Touquet-Paris-Plage,4828,HDF,75,FR,50.52432,1.58571 43338,Lecelles,4828,HDF,75,FR,50.46779,3.40096 43681,Lécluse,4828,HDF,75,FR,50.27671,3.04045 43341,Leers,4828,HDF,75,FR,50.68217,3.24429 43342,Leffrinckoucke,4828,HDF,75,FR,51.03457,2.46452 43343,Leforest,4828,HDF,75,FR,50.43866,3.0648 43350,Lens,4828,HDF,75,FR,50.43302,2.82791 43357,Les Ageux,4828,HDF,75,FR,49.31667,2.6 43367,Les Attaques,4828,HDF,75,FR,50.90962,1.92961 43441,Lesquin,4828,HDF,75,FR,50.58232,3.119 43444,Lestrem,4828,HDF,75,FR,50.61987,2.68646 43448,Leval,4828,HDF,75,FR,50.18106,3.83093 43454,Lewarde,4828,HDF,75,FR,50.34173,3.16782 43460,Lezennes,4828,HDF,75,FR,50.61553,3.11354 43463,Liancourt,4828,HDF,75,FR,49.33034,2.46595 43464,Libercourt,4828,HDF,75,FR,50.48322,3.01584 43466,Licques,4828,HDF,75,FR,50.78416,1.93844 43468,Liesse-Notre-Dame,4828,HDF,75,FR,49.61667,3.8 43469,Lieu-Saint-Amand,4828,HDF,75,FR,50.27318,3.34624 43525,Liévin,4828,HDF,75,FR,50.4198,2.78068 43478,Ligny-en-Cambrésis,4828,HDF,75,FR,50.10123,3.37841 43485,Lille,4828,HDF,75,FR,50.63297,3.05858 43487,Lillers,4828,HDF,75,FR,50.56345,2.48042 43503,Linselles,4828,HDF,75,FR,50.73708,3.07878 43532,Locon,4828,HDF,75,FR,50.57029,2.66629 43545,Loison-sous-Lens,4828,HDF,75,FR,50.43796,2.85322 43549,Lomme,4828,HDF,75,FR,50.64358,2.98715 43550,Lompret,4828,HDF,75,FR,50.66931,2.98968 43560,Longfossé,4828,HDF,75,FR,50.65217,1.80693 43567,Longpré-les-Corps-Saints,4828,HDF,75,FR,50.01239,1.99287 43568,Longueau,4828,HDF,75,FR,49.87226,2.3588 43569,Longueil-Annel,4828,HDF,75,FR,49.46908,2.86464 43570,Longueil-Sainte-Marie,4828,HDF,75,FR,49.35723,2.71844 43571,Longuenesse,4828,HDF,75,FR,50.73395,2.2352 43578,Looberghe,4828,HDF,75,FR,50.91694,2.27439 43579,Loon-Plage,4828,HDF,75,FR,50.99647,2.2177 43580,Loos,4828,HDF,75,FR,50.60982,3.01874 43581,Loos-en-Gohelle,4828,HDF,75,FR,50.45786,2.79215 43585,Lorgies,4828,HDF,75,FR,50.5688,2.79034 43590,Lormaison,4828,HDF,75,FR,49.25647,2.10575 43607,Lourches,4828,HDF,75,FR,50.31354,3.35258 43619,Louvroil,4828,HDF,75,FR,50.26427,3.96272 43626,Lozinghem,4828,HDF,75,FR,50.51554,2.50209 43647,Lumbres,4828,HDF,75,FR,50.70693,2.12081 43679,Lys-lez-Lannoy,4828,HDF,75,FR,50.66667,3.21667 43732,Maignelay-Montigny,4828,HDF,75,FR,49.55,2.51667 43738,Maing,4828,HDF,75,FR,50.30791,3.48447 43742,Maisnil-lès-Ruitz,4828,HDF,75,FR,50.45342,2.58992 43769,Mametz,4828,HDF,75,FR,50.63485,2.32478 43800,Marchiennes,4828,HDF,75,FR,50.4,3.28333 43809,Marck,4828,HDF,75,FR,50.94897,1.94328 43811,Marcoing,4828,HDF,75,FR,50.1211,3.17321 43812,Marconne,4828,HDF,75,FR,50.37143,2.04669 43813,Marconnelle,4828,HDF,75,FR,50.37588,2.01108 43816,Marcq-en-Barœul,4828,HDF,75,FR,50.66667,3.08333 43824,Maretz,4828,HDF,75,FR,50.0453,3.41808 43831,Mareuil-sur-Ourcq,4828,HDF,75,FR,49.13752,3.07822 43835,Margny-lès-Compiègne,4828,HDF,75,FR,49.42559,2.81806 43848,Marle,4828,HDF,75,FR,49.74006,3.7706 43851,Marles-les-Mines,4828,HDF,75,FR,50.50478,2.50882 43853,Marly,4828,HDF,75,FR,50.34556,3.54959 43927,Marœuil,4828,HDF,75,FR,50.32519,2.70504 43865,Maroilles,4828,HDF,75,FR,50.13508,3.76132 43870,Marpent,4828,HDF,75,FR,50.29252,4.07936 43872,Marquette-en-Ostrevant,4828,HDF,75,FR,50.28333,3.26667 43873,Marquette-lez-Lille,4828,HDF,75,FR,50.67628,3.06613 43874,Marquillies,4828,HDF,75,FR,50.55577,2.87067 43875,Marquion,4828,HDF,75,FR,50.21126,3.08719 43876,Marquise,4828,HDF,75,FR,50.81294,1.70786 43929,Masnières,4828,HDF,75,FR,50.11489,3.20889 43930,Masny,4828,HDF,75,FR,50.34797,3.20165 43945,Maubeuge,4828,HDF,75,FR,50.27875,3.97267 43975,Mazingarbe,4828,HDF,75,FR,50.47109,2.71544 44455,Méaulte,4828,HDF,75,FR,49.98167,2.66121 44471,Méricourt,4828,HDF,75,FR,50.40116,2.86246 44474,Mérignies,4828,HDF,75,FR,50.50609,3.11043 44017,Merlimont,4828,HDF,75,FR,50.4559,1.61315 44018,Mers-les-Bains,4828,HDF,75,FR,50.06538,1.3881 44476,Méru,4828,HDF,75,FR,49.23333,2.13333 44023,Merville,4828,HDF,75,FR,50.64329,2.64125 44484,Méteren,4828,HDF,75,FR,50.73333,2.7 44048,Meurchin,4828,HDF,75,FR,50.49831,2.89318 44077,Milly-sur-Thérain,4828,HDF,75,FR,49.5024,1.99605 44110,Mogneville,4828,HDF,75,FR,49.31535,2.4717 44117,Moislains,4828,HDF,75,FR,49.9882,2.96404 44129,Monchecourt,4828,HDF,75,FR,50.30413,3.21029 44130,Monchy-Saint-Éloi,4828,HDF,75,FR,49.29042,2.46739 44148,Mons-en-Barœul,4828,HDF,75,FR,50.63333,3.11667 44149,Mons-en-Pévèle,4828,HDF,75,FR,50.47926,3.09767 44154,Mont-Bernanchon,4828,HDF,75,FR,50.58333,2.58333 44158,Mont-Saint-Éloi,4828,HDF,75,FR,50.35105,2.69249 44182,Montataire,4828,HDF,75,FR,49.259,2.43777 44209,Montcornet,4828,HDF,75,FR,49.69526,4.01667 44214,Montdidier,4828,HDF,75,FR,49.648,2.56991 44225,Montescourt-Lizerolles,4828,HDF,75,FR,49.73828,3.25736 44258,Montigny-en-Gohelle,4828,HDF,75,FR,50.4254,2.93902 44259,Montigny-en-Ostrevent,4828,HDF,75,FR,50.36667,3.18333 44278,Montmacq,4828,HDF,75,FR,49.48181,2.90257 44308,Montreuil,4828,HDF,75,FR,50.46374,1.76348 44310,Montreuil-aux-Lions,4828,HDF,75,FR,49.02124,3.19543 44343,Morbecque,4828,HDF,75,FR,50.69365,2.51787 44350,Moreuil,4828,HDF,75,FR,49.77457,2.48273 44353,Morienval,4828,HDF,75,FR,49.2977,2.92078 44369,Mortagne-du-Nord,4828,HDF,75,FR,50.50352,3.45352 44384,Mouchin,4828,HDF,75,FR,50.51639,3.29627 44414,Mouvaux,4828,HDF,75,FR,50.69944,3.13429 44416,Mouy,4828,HDF,75,FR,49.31535,2.31954 44509,Nanteuil-le-Haudouin,4828,HDF,75,FR,49.14082,2.81142 44513,Naours,4828,HDF,75,FR,50.03682,2.27691 44532,Nesle,4828,HDF,75,FR,49.75888,2.91133 44533,Nesles,4828,HDF,75,FR,50.62588,1.65641 44534,Nesles-la-Montagne,4828,HDF,75,FR,49.01964,3.42607 44537,Neuf-Berquin,4828,HDF,75,FR,50.66065,2.67213 44541,Neufchâtel-Hardelot,4828,HDF,75,FR,50.62018,1.64223 44548,Neuilly-en-Thelle,4828,HDF,75,FR,49.22445,2.28525 44547,Neuilly-Saint-Front,4828,HDF,75,FR,49.17012,3.26393 44551,Neuilly-sous-Clermont,4828,HDF,75,FR,49.34437,2.4103 44567,Neuville-en-Ferrain,4828,HDF,75,FR,50.74839,3.15676 44563,Neuville-Saint-Rémy,4828,HDF,75,FR,50.18618,3.22404 44564,Neuville-Saint-Vaast,4828,HDF,75,FR,50.35756,2.76261 44570,Neuville-sur-Escaut,4828,HDF,75,FR,50.3,3.35 44594,Nieppe,4828,HDF,75,FR,50.70425,2.83506 44607,Noailles,4828,HDF,75,FR,49.32866,2.20024 44701,Nœux-les-Mines,4828,HDF,75,FR,50.48333,2.66667 44614,Nogent-l’Artaud,4828,HDF,75,FR,48.9656,3.32178 44616,Nogent-sur-Oise,4828,HDF,75,FR,49.27158,2.47074 44619,Nogentel,4828,HDF,75,FR,49.0175,3.4025 44634,Nomain,4828,HDF,75,FR,50.49857,3.24991 44640,Nord,4828,HDF,75,FR,50.33333,3.36197 44643,Norrent-Fontes,4828,HDF,75,FR,50.58333,2.4 44646,Nortkerque,4828,HDF,75,FR,50.87519,2.02464 44660,Nouvion,4828,HDF,75,FR,50.2,1.78333 44675,Noyelles-Godault,4828,HDF,75,FR,50.41753,2.99306 44676,Noyelles-lès-Vermelles,4828,HDF,75,FR,50.49001,2.72628 44677,Noyelles-sous-Lens,4828,HDF,75,FR,50.43084,2.87221 44680,Noyon,4828,HDF,75,FR,49.58333,3.0 44722,Ognes,4828,HDF,75,FR,49.61244,3.1934 44724,Oignies,4828,HDF,75,FR,50.46331,2.99376 44726,Oisemont,4828,HDF,75,FR,49.95587,1.76703 44730,Oisy-le-Verger,4828,HDF,75,FR,50.25047,3.1233 44740,Omissy,4828,HDF,75,FR,49.8776,3.31235 44744,Onnaing,4828,HDF,75,FR,50.38584,3.59963 44745,Ons-en-Bray,4828,HDF,75,FR,49.41631,1.92302 44759,Orchies,4828,HDF,75,FR,50.46667,3.23333 44769,Origny-en-Thiérache,4828,HDF,75,FR,49.89327,4.01644 44768,Origny-Sainte-Benoite,4828,HDF,75,FR,49.83333,3.5 44782,Orry-la-Ville,4828,HDF,75,FR,49.13345,2.51139 44794,Ostricourt,4828,HDF,75,FR,50.45145,3.03417 44813,Outreau,4828,HDF,75,FR,50.70535,1.5897 44818,Oye-Plage,4828,HDF,75,FR,50.97713,2.04276 44862,Pas-de-Calais,4828,HDF,75,FR,50.4828,2.28664 44864,Pasly,4828,HDF,75,FR,49.40167,3.29631 44880,Pecquencourt,4828,HDF,75,FR,50.3785,3.21277 44891,Pendé,4828,HDF,75,FR,50.16055,1.58541 45350,Pérenchies,4828,HDF,75,FR,50.67013,2.97024 44897,Pernes,4828,HDF,75,FR,50.48437,2.41253 45363,Péronne,4828,HDF,75,FR,49.93218,2.9363 45365,Péroy-les-Gombries,4828,HDF,75,FR,49.16248,2.84556 44919,Petite-Forêt,4828,HDF,75,FR,50.36667,3.48333 44942,Phalempin,4828,HDF,75,FR,50.51691,3.01584 44947,Picquigny,4828,HDF,75,FR,49.94413,2.14376 44956,Pierrefonds,4828,HDF,75,FR,49.34878,2.9779 44972,Pinon,4828,HDF,75,FR,49.48916,3.44703 44988,Plailly,4828,HDF,75,FR,49.10288,2.58549 45139,Poix-de-Picardie,4828,HDF,75,FR,49.78333,1.98333 45140,Poix-du-Nord,4828,HDF,75,FR,50.18927,3.60956 45160,Ponchon,4828,HDF,75,FR,49.34652,2.19677 45196,Pont-à-Marcq,4828,HDF,75,FR,50.52213,3.11441 45198,Pont-à-Vendin,4828,HDF,75,FR,50.47358,2.88884 45180,Pont-de-Metz,4828,HDF,75,FR,49.8782,2.24266 45168,Pont-Remy,4828,HDF,75,FR,50.05,1.91667 45174,Pont-Sainte-Maxence,4828,HDF,75,FR,49.30168,2.60467 45192,Pont-sur-Sambre,4828,HDF,75,FR,50.22195,3.84693 45216,Pontpoint,4828,HDF,75,FR,49.3,2.65 45258,Poulainville,4828,HDF,75,FR,49.94745,2.31373 45307,Précy-sur-Oise,4828,HDF,75,FR,49.20779,2.37266 45310,Prémesques,4828,HDF,75,FR,50.65572,2.95162 45312,Préseau,4828,HDF,75,FR,50.31122,3.57434 45295,Prouvy,4828,HDF,75,FR,50.31793,3.45096 45296,Proville,4828,HDF,75,FR,50.16137,3.20629 45297,Provin,4828,HDF,75,FR,50.5143,2.90794 45371,Quaëdypre,4828,HDF,75,FR,50.93527,2.45445 45370,Quarouble,4828,HDF,75,FR,50.38634,3.62306 45374,Quend,4828,HDF,75,FR,50.31584,1.63609 45377,Quesnoy-sur-Deûle,4828,HDF,75,FR,50.71359,2.99996 45383,Quevauvillers,4828,HDF,75,FR,49.82376,2.08431 45404,Quiévrechain,4828,HDF,75,FR,50.39172,3.66815 45405,Quiévy,4828,HDF,75,FR,50.16804,3.42834 45682,Râches,4828,HDF,75,FR,50.41706,3.13635 45413,Racquinghem,4828,HDF,75,FR,50.69245,2.35736 45414,Radinghem-en-Weppes,4828,HDF,75,FR,50.61884,2.90924 45418,Raillencourt-Sainte-Olle,4828,HDF,75,FR,50.18333,3.16667 45419,Raimbeaucourt,4828,HDF,75,FR,50.43466,3.09333 45420,Raismes,4828,HDF,75,FR,50.38333,3.48333 45426,Ranchicourt,4828,HDF,75,FR,50.43559,2.5569 45428,Rang-du-Fliers,4828,HDF,75,FR,50.41708,1.64431 45430,Rantigny,4828,HDF,75,FR,49.32758,2.44244 45434,Ravenel,4828,HDF,75,FR,49.51523,2.50192 45441,Recquignies,4828,HDF,75,FR,50.28396,4.03722 45455,Remy,4828,HDF,75,FR,49.43333,2.71667 45459,Renescure,4828,HDF,75,FR,50.72754,2.36801 45464,Ressons-sur-Matz,4828,HDF,75,FR,49.53858,2.74416 45471,Rety,4828,HDF,75,FR,50.8,1.76667 45479,Rexpoëde,4828,HDF,75,FR,50.93926,2.53914 45491,Ribemont,4828,HDF,75,FR,49.7954,3.45893 45494,Richebourg,4828,HDF,75,FR,50.58333,2.73333 45495,Richebourg-lAvoué,4828,HDF,75,FR,50.56999,2.74884 45501,Rieulay,4828,HDF,75,FR,50.37856,3.25284 45505,Rieux,4828,HDF,75,FR,49.3,2.51667 45508,Rieux-en-Cambrésis,4828,HDF,75,FR,50.20069,3.35232 45515,Rinxent,4828,HDF,75,FR,50.80714,1.72899 45528,Rivery,4828,HDF,75,FR,49.90328,2.32235 45531,Rivière,4828,HDF,75,FR,50.23316,2.692 45536,Robecq,4828,HDF,75,FR,50.59608,2.56262 45697,Rœulx,4828,HDF,75,FR,50.3,3.33333 45698,Rœux,4828,HDF,75,FR,50.29526,2.90073 45564,Roisel,4828,HDF,75,FR,49.94768,3.09973 45585,Ronchin,4828,HDF,75,FR,50.59883,3.09056 45586,Roncq,4828,HDF,75,FR,50.7533,3.12131 45587,Roost-Warendin,4828,HDF,75,FR,50.4192,3.10374 45595,Roquetoire,4828,HDF,75,FR,50.67029,2.34307 45604,Rosières-en-Santerre,4828,HDF,75,FR,49.81433,2.70095 45612,Rosult,4828,HDF,75,FR,50.45888,3.35902 45616,Roubaix,4828,HDF,75,FR,50.69421,3.17456 45635,Rousies,4828,HDF,75,FR,50.27346,4.00382 45642,Rouvroy,4828,HDF,75,FR,50.39247,2.90396 45648,Roye,4828,HDF,75,FR,49.70038,2.78959 45654,Rozoy-sur-Serre,4828,HDF,75,FR,49.70956,4.12902 45659,Rue,4828,HDF,75,FR,50.2715,1.67163 45668,Ruitz,4828,HDF,75,FR,50.46643,2.58876 45670,Rumegies,4828,HDF,75,FR,50.48877,3.35131 45673,Rumilly-en-Cambrésis,4828,HDF,75,FR,50.12691,3.21874 45674,Ruminghem,4828,HDF,75,FR,50.85922,2.15838 45709,Sacy-le-Grand,4828,HDF,75,FR,49.35479,2.54461 45717,Sailly-Flibeaucourt,4828,HDF,75,FR,50.18419,1.7718 45718,Sailly-Labourse,4828,HDF,75,FR,50.5012,2.69708 45719,Sailly-lez-Lannoy,4828,HDF,75,FR,50.65,3.21667 45720,Sailly-sur-la-Lys,4828,HDF,75,FR,50.6582,2.76872 45722,Sainghin-en-Mélantois,4828,HDF,75,FR,50.58836,3.16619 45723,Sainghin-en-Weppes,4828,HDF,75,FR,50.56407,2.89804 45724,Sains-du-Nord,4828,HDF,75,FR,50.09377,4.00898 45725,Sains-en-Amiénois,4828,HDF,75,FR,49.81716,2.31862 45726,Sains-en-Gohelle,4828,HDF,75,FR,50.44512,2.68301 45744,Saint-Amand-les-Eaux,4828,HDF,75,FR,50.44718,3.43076 45766,Saint-André-lez-Lille,4828,HDF,75,FR,50.66667,3.05 45779,Saint-Aubert,4828,HDF,75,FR,50.20805,3.41727 45787,Saint-Aubin-en-Bray,4828,HDF,75,FR,49.42051,1.87782 45878,Saint-Crépin-Ibouvillers,4828,HDF,75,FR,49.26283,2.07793 45922,Saint-Erme-Outre-et-Ramecourt,4828,HDF,75,FR,49.51464,3.8406 46642,Saint-Étienne-au-Mont,4828,HDF,75,FR,50.67794,1.63084 45939,Saint-Folquin,4828,HDF,75,FR,50.94473,2.12433 46023,Saint-Germer-de-Fly,4828,HDF,75,FR,49.44281,1.77986 46039,Saint-Gobain,4828,HDF,75,FR,49.59572,3.3775 46066,Saint-Hilaire-lez-Cambrai,4828,HDF,75,FR,50.18419,3.41327 46079,Saint-Jans-Cappel,4828,HDF,75,FR,50.76387,2.72227 46130,Saint-Josse,4828,HDF,75,FR,50.46801,1.6618 46161,Saint-Just-en-Chaussée,4828,HDF,75,FR,49.50503,2.43285 46173,Saint-Laurent-Blangy,4828,HDF,75,FR,50.29446,2.80698 46216,Saint-Léger-lès-Domart,4828,HDF,75,FR,50.05208,2.14067 46221,Saint-Léonard,4828,HDF,75,FR,50.69058,1.62536 46267,Saint-Martin-au-Laërt,4828,HDF,75,FR,50.75179,2.24051 46261,Saint-Martin-Boulogne,4828,HDF,75,FR,50.72691,1.61864 46264,Saint-Martin-Longueau,4828,HDF,75,FR,49.34281,2.60276 46324,Saint-Maximin,4828,HDF,75,FR,49.22182,2.45359 46334,Saint-Michel,4828,HDF,75,FR,49.91952,4.13278 46362,Saint-Nicolas,4828,HDF,75,FR,50.30413,2.77939 46373,Saint-Omer,4828,HDF,75,FR,50.74834,2.26091 46374,Saint-Omer-en-Chaussée,4828,HDF,75,FR,49.53142,2.00335 46378,Saint-Ouen,4828,HDF,75,FR,50.03819,2.12088 46401,Saint-Paul,4828,HDF,75,FR,49.42962,2.00755 46456,Saint-Pol-sur-Mer,4828,HDF,75,FR,51.03116,2.33983 46457,Saint-Pol-sur-Ternoise,4828,HDF,75,FR,50.38113,2.33407 46476,Saint-Python,4828,HDF,75,FR,50.19001,3.48027 46485,Saint-Quentin,4828,HDF,75,FR,49.84889,3.28757 46497,Saint-Riquier,4828,HDF,75,FR,50.13235,1.94755 46525,Saint-Saulve,4828,HDF,75,FR,50.37141,3.55612 46528,Saint-Sauveur,4828,HDF,75,FR,49.31857,2.78321 46557,Saint-Souplet,4828,HDF,75,FR,50.05639,3.53179 46559,Saint-Sulpice,4828,HDF,75,FR,49.35049,2.12314 46572,Saint-Sylvestre-Cappel,4828,HDF,75,FR,50.77625,2.55622 46597,Saint-Valery-sur-Somme,4828,HDF,75,FR,50.18333,1.63333 46604,Saint-Venant,4828,HDF,75,FR,50.61955,2.53946 46667,Sainte-Catherine,4828,HDF,75,FR,50.30757,2.76404 46691,Sainte-Geneviève,4828,HDF,75,FR,49.2892,2.19904 46708,Sainte-Marie-Kerque,4828,HDF,75,FR,50.89917,2.13664 46747,Saleux,4828,HDF,75,FR,49.8563,2.23698 46758,Sallaumines,4828,HDF,75,FR,50.41749,2.86174 46765,Salomé,4828,HDF,75,FR,50.53352,2.84709 46767,Salouël,4828,HDF,75,FR,49.86988,2.2434 46777,Saméon,4828,HDF,75,FR,50.47135,3.33544 46772,Samer,4828,HDF,75,FR,50.6384,1.74628 46787,Sangatte,4828,HDF,75,FR,50.94564,1.75321 46799,Santes,4828,HDF,75,FR,50.59316,2.96289 46819,Sars-Poteries,4828,HDF,75,FR,50.16928,4.02676 46847,Saultain,4828,HDF,75,FR,50.33676,3.57723 46851,Saulzoir,4828,HDF,75,FR,50.24057,3.4443 46888,Savy-Berlette,4828,HDF,75,FR,50.35249,2.56456 46909,Seboncourt,4828,HDF,75,FR,49.95273,3.47586 46910,Sebourg,4828,HDF,75,FR,50.34249,3.64352 46911,Seclin,4828,HDF,75,FR,50.54873,3.02731 46935,Selvigny,4828,HDF,75,FR,50.07971,3.34899 46940,Senlis,4828,HDF,75,FR,49.20724,2.58661 46952,Sequedin,4828,HDF,75,FR,50.62575,2.98276 47143,Sérifontaine,4828,HDF,75,FR,49.3544,1.76873 46962,Serques,4828,HDF,75,FR,50.79338,2.20134 46998,Silly-le-Long,4828,HDF,75,FR,49.10749,2.79226 47003,Sin-le-Noble,4828,HDF,75,FR,50.36159,3.13113 47004,Sinceny,4828,HDF,75,FR,49.59619,3.24679 47008,Sissonne,4828,HDF,75,FR,49.57107,3.89369 47015,Socx,4828,HDF,75,FR,50.93571,2.42422 47018,Soissons,4828,HDF,75,FR,49.38167,3.32361 47024,Solesmes,4828,HDF,75,FR,50.18468,3.49799 47033,Solre-le-Château,4828,HDF,75,FR,50.17432,4.08898 47034,Somain,4828,HDF,75,FR,50.35961,3.28108 47035,Somme,4828,HDF,75,FR,49.93141,2.27639 47038,Songeons,4828,HDF,75,FR,49.54916,1.85361 47058,Souchez,4828,HDF,75,FR,50.39291,2.73984 47094,Spycker,4828,HDF,75,FR,50.96915,2.32184 47099,Steenbecque,4828,HDF,75,FR,50.67421,2.48442 47100,Steene,4828,HDF,75,FR,50.95228,2.36813 47101,Steenvoorde,4828,HDF,75,FR,50.81046,2.58244 47102,Steenwerck,4828,HDF,75,FR,50.70199,2.77829 47167,Talmas,4828,HDF,75,FR,50.03049,2.32554 47184,Tatinghem,4828,HDF,75,FR,50.74317,2.20724 47197,Templemars,4828,HDF,75,FR,50.57387,3.05437 47198,Templeuve-en-Pévèle,4828,HDF,75,FR,50.52336,3.17809 47207,Tergnier,4828,HDF,75,FR,49.65607,3.30107 47417,Téteghem,4828,HDF,75,FR,51.01859,2.44454 47267,Thélus,4828,HDF,75,FR,50.35441,2.80146 47271,Thérouanne,4828,HDF,75,FR,50.63695,2.25838 47226,Thiant,4828,HDF,75,FR,50.3048,3.44796 47230,Thiers-sur-Thève,4828,HDF,75,FR,49.15252,2.57051 47239,Thiverny,4828,HDF,75,FR,49.2518,2.43609 47256,Thourotte,4828,HDF,75,FR,49.47591,2.8821 47260,Thumeries,4828,HDF,75,FR,50.47662,3.055 47261,Thun-Saint-Amand,4828,HDF,75,FR,50.47276,3.45115 47286,Tillé,4828,HDF,75,FR,49.46415,2.11038 47284,Tilloy-lès-Mofflaines,4828,HDF,75,FR,50.27519,2.81456 47287,Tilques,4828,HDF,75,FR,50.77712,2.19948 47308,Toufflers,4828,HDF,75,FR,50.66039,3.23358 47320,Tourcoing,4828,HDF,75,FR,50.72391,3.16117 47325,Tournehem-sur-la-Hem,4828,HDF,75,FR,50.8,2.05 47345,Tracy-le-Mont,4828,HDF,75,FR,49.47225,3.00939 47399,Trélon,4828,HDF,75,FR,50.05805,4.102 47365,Tressin,4828,HDF,75,FR,50.6175,3.19354 47368,Tricot,4828,HDF,75,FR,49.5608,2.58789 47369,Trie-Château,4828,HDF,75,FR,49.2854,1.82129 47376,Trith-Saint-Léger,4828,HDF,75,FR,50.31667,3.48333 47379,Troissereux,4828,HDF,75,FR,49.47998,2.04485 47381,Trosly-Breuil,4828,HDF,75,FR,49.4,2.96667 47425,Ully-Saint-Georges,4828,HDF,75,FR,49.27914,2.28094 47444,Uxem,4828,HDF,75,FR,51.0217,2.48376 47456,Vailly-sur-Aisne,4828,HDF,75,FR,49.40834,3.51631 47474,Valenciennes,4828,HDF,75,FR,50.35909,3.52506 47540,Vaulx-Vraucourt,4828,HDF,75,FR,50.1491,2.9083 47542,Vaumoise,4828,HDF,75,FR,49.23525,2.98077 47569,Vendegies-sur-Écaillon,4828,HDF,75,FR,50.26224,3.51256 47573,Vendeville,4828,HDF,75,FR,50.57693,3.0787 47574,Vendin-le-Vieil,4828,HDF,75,FR,50.47385,2.86674 47575,Vendin-lès-Béthune,4828,HDF,75,FR,50.54012,2.60043 47582,Venette,4828,HDF,75,FR,49.41705,2.80317 47584,Venizel,4828,HDF,75,FR,49.36583,3.39321 47589,Ver-sur-Launette,4828,HDF,75,FR,49.10495,2.68409 47591,Verberie,4828,HDF,75,FR,49.31115,2.7321 47602,Verlinghem,4828,HDF,75,FR,50.68291,2.99907 47603,Vermand,4828,HDF,75,FR,49.8755,3.14959 47604,Vermelles,4828,HDF,75,FR,50.48949,2.74739 47612,Verneuil-en-Halatte,4828,HDF,75,FR,49.27914,2.5241 47628,Verquin,4828,HDF,75,FR,50.5024,2.63888 47641,Verton,4828,HDF,75,FR,50.40234,1.64766 47644,Vervins,4828,HDF,75,FR,49.8351,3.90925 47667,Vic-sur-Aisne,4828,HDF,75,FR,49.40609,3.11223 47671,Vicq,4828,HDF,75,FR,50.40738,3.60348 47677,Vieille-Église,4828,HDF,75,FR,50.92823,2.07671 47686,Viesly,4828,HDF,75,FR,50.15345,3.46236 47687,Vieux-Berquin,4828,HDF,75,FR,50.69489,2.64444 47690,Vieux-Condé,4828,HDF,75,FR,50.45944,3.56738 47694,Vignacourt,4828,HDF,75,FR,50.01236,2.19743 47766,Villeneuve-dAscq,4828,HDF,75,FR,50.61669,3.16664 47778,Villeneuve-les-Sablons,4828,HDF,75,FR,49.23753,2.07782 47764,Villeneuve-Saint-Germain,4828,HDF,75,FR,49.37976,3.35952 47795,Villers-Bocage,4828,HDF,75,FR,49.9981,2.31683 47797,Villers-Bretonneux,4828,HDF,75,FR,49.86844,2.51688 47798,Villers-Cotterêts,4828,HDF,75,FR,49.25311,3.09003 47803,Villers-en-Cauchies,4828,HDF,75,FR,50.22574,3.40362 47799,Villers-Outréaux,4828,HDF,75,FR,50.0359,3.29947 47800,Villers-Pol,4828,HDF,75,FR,50.2846,3.61449 47801,Villers-Saint-Paul,4828,HDF,75,FR,49.28885,2.48968 47807,Villers-sous-Saint-Leu,4828,HDF,75,FR,49.21235,2.39485 47808,Villers-sur-Coudun,4828,HDF,75,FR,49.48308,2.80457 47841,Vimy,4828,HDF,75,FR,50.37243,2.81034 47847,Vineuil-Saint-Firmin,4828,HDF,75,FR,49.20024,2.49567 47852,Violaines,4828,HDF,75,FR,50.5416,2.7886 47868,Viry-Noureuil,4828,HDF,75,FR,49.63214,3.24322 47872,Vitry-en-Artois,4828,HDF,75,FR,50.3266,2.97999 47919,Vred,4828,HDF,75,FR,50.39455,3.23029 47935,Wahagnies,4828,HDF,75,FR,50.48665,3.03448 47936,Wailly,4828,HDF,75,FR,50.52287,2.06792 47939,Walincourt-Selvigny,4828,HDF,75,FR,50.06667,3.33333 47940,Wallers,4828,HDF,75,FR,50.37432,3.39188 47942,Wambrechies,4828,HDF,75,FR,50.68276,3.04784 47943,Wandignies-Hamage,4828,HDF,75,FR,50.39609,3.3145 47946,Wardrecques,4828,HDF,75,FR,50.71108,2.34483 47947,Wargnies-le-Grand,4828,HDF,75,FR,50.30751,3.66038 47948,Warhem,4828,HDF,75,FR,50.97592,2.49303 47949,Warluis,4828,HDF,75,FR,49.38874,2.1422 47951,Wasquehal,4828,HDF,75,FR,50.67043,3.13382 47953,Wassigny,4828,HDF,75,FR,50.01334,3.59988 47955,Watten,4828,HDF,75,FR,50.83685,2.21346 47956,Wattignies,4828,HDF,75,FR,50.58639,3.04394 47957,Wattrelos,4828,HDF,75,FR,50.70118,3.21812 47959,Wavignies,4828,HDF,75,FR,49.54748,2.36032 47960,Wavrechain-sous-Denain,4828,HDF,75,FR,50.33224,3.41252 47961,Wavrin,4828,HDF,75,FR,50.57386,2.9363 47962,Waziers,4828,HDF,75,FR,50.38717,3.1149 47964,Wervicq-Sud,4828,HDF,75,FR,50.7745,3.04207 47970,Wignehies,4828,HDF,75,FR,50.0155,4.00913 47972,Willems,4828,HDF,75,FR,50.63206,3.2384 47974,Wimereux,4828,HDF,75,FR,50.76963,1.61139 47975,Wimille,4828,HDF,75,FR,50.76418,1.63137 47979,Wingles,4828,HDF,75,FR,50.49382,2.855 47980,Winnezeele,4828,HDF,75,FR,50.841,2.55118 47983,Wissant,4828,HDF,75,FR,50.8853,1.66263 47990,Wizernes,4828,HDF,75,FR,50.7117,2.24316 47992,Woincourt,4828,HDF,75,FR,50.0663,1.53676 47996,Wormhout,4828,HDF,75,FR,50.88129,2.46901 48025,Zegerscappel,4828,HDF,75,FR,50.88333,2.4 48029,Zutkerque,4828,HDF,75,FR,50.85303,2.06818 48030,Zuydcoote,4828,HDF,75,FR,51.06096,2.49338 39239,Ableiges,4796,IDF,75,FR,49.08932,1.98154 39240,Ablis,4796,IDF,75,FR,48.5172,1.83624 39242,Ablon-sur-Seine,4796,IDF,75,FR,48.72732,2.42686 39252,Achères,4796,IDF,75,FR,48.96115,2.06882 39253,Achères-la-Forêt,4796,IDF,75,FR,48.35458,2.57035 39311,Alfortville,4796,IDF,75,FR,48.80575,2.4204 39383,Andilly,4796,IDF,75,FR,49.00935,2.3024 39390,Andrésy,4796,IDF,75,FR,48.98235,2.05687 39397,Angerville,4796,IDF,75,FR,48.31354,1.99935 39399,Angervilliers,4796,IDF,75,FR,48.59263,2.06541 39419,Annet-sur-Marne,4796,IDF,75,FR,48.92669,2.71959 39435,Antony,4796,IDF,75,FR,48.75329,2.29668 39451,Arbonne-la-Forêt,4796,IDF,75,FR,48.41405,2.56677 39465,Arcueil,4796,IDF,75,FR,48.79993,2.33256 39481,Argenteuil,4796,IDF,75,FR,48.94788,2.24744 39494,Armentières-en-Brie,4796,IDF,75,FR,48.97775,3.02073 39503,Arnouville,4796,IDF,75,FR,48.98333,2.41667 39506,Arpajon,4796,IDF,75,FR,48.58875,2.24672 39543,Asnières-sur-Oise,4796,IDF,75,FR,49.13369,2.35551 39544,Asnières-sur-Seine,4796,IDF,75,FR,48.91667,2.28333 39557,Athis-Mons,4796,IDF,75,FR,48.70522,2.39147 39560,Attainville,4796,IDF,75,FR,49.05779,2.34497 39571,Aubergenville,4796,IDF,75,FR,48.95996,1.85467 39574,Aubervilliers,4796,IDF,75,FR,48.91667,2.38333 39602,Auffargis,4796,IDF,75,FR,48.70049,1.88696 39609,Aulnay-sous-Bois,4796,IDF,75,FR,48.93814,2.49402 39610,Aulnay-sur-Mauldre,4796,IDF,75,FR,48.9295,1.84113 39640,Auvers-Saint-Georges,4796,IDF,75,FR,48.49276,2.22045 39642,Auvers-sur-Oise,4796,IDF,75,FR,49.07158,2.16978 39676,Avon,4796,IDF,75,FR,48.40219,2.72022 39708,Bagneaux-sur-Loing,4796,IDF,75,FR,48.2331,2.70675 39709,Bagneux,4796,IDF,75,FR,48.79565,2.30796 39711,Bagnolet,4796,IDF,75,FR,48.86667,2.41667 39724,Baillet-en-France,4796,IDF,75,FR,49.06187,2.2988 39729,Bailly,4796,IDF,75,FR,48.84168,2.07673 39730,Bailly-Carrois,4796,IDF,75,FR,48.58029,2.99047 39731,Bailly-Romainvilliers,4796,IDF,75,FR,48.84729,2.82352 39750,Ballainvilliers,4796,IDF,75,FR,48.67481,2.30057 39753,Ballancourt-sur-Essonne,4796,IDF,75,FR,48.52525,2.38604 39775,Barbizon,4796,IDF,75,FR,48.44346,2.60313 39812,Baulne,4796,IDF,75,FR,48.49303,2.3623 39825,Bazainville,4796,IDF,75,FR,48.80435,1.66732 39829,Bazemont,4796,IDF,75,FR,48.92726,1.86651 39838,Beauchamp,4796,IDF,75,FR,49.01667,2.2 39865,Beaumont-du-Gâtinais,4796,IDF,75,FR,48.1386,2.47913 39872,Beaumont-sur-Oise,4796,IDF,75,FR,49.14232,2.28705 39930,Belloy-en-France,4796,IDF,75,FR,49.08837,2.37159 39940,Bennecourt,4796,IDF,75,FR,49.04148,1.55469 39953,Bernes-sur-Oise,4796,IDF,75,FR,49.16128,2.3 39974,Bessancourt,4796,IDF,75,FR,49.03765,2.20936 39999,Beynes,4796,IDF,75,FR,48.85626,1.87261 40002,Bezons,4796,IDF,75,FR,48.92426,2.2128 40040,Bièvres,4796,IDF,75,FR,48.75772,2.21881 40077,Bobigny,4796,IDF,75,FR,48.90982,2.45012 40084,Bois-Colombes,4796,IDF,75,FR,48.91936,2.27485 40089,Bois-d’Arcy,4796,IDF,75,FR,48.79966,2.02325 40090,Bois-le-Roi,4796,IDF,75,FR,48.47348,2.70464 40097,Boissise-le-Roi,4796,IDF,75,FR,48.52479,2.56971 40099,Boissy-le-Châtel,4796,IDF,75,FR,48.82073,3.13651 40100,Boissy-le-Cutté,4796,IDF,75,FR,48.4702,2.28326 40098,Boissy-Saint-Léger,4796,IDF,75,FR,48.75149,2.51163 40101,Boissy-sous-Saint-Yon,4796,IDF,75,FR,48.55379,2.21212 40111,Bondoufle,4796,IDF,75,FR,48.61294,2.37775 40113,Bondy,4796,IDF,75,FR,48.9018,2.48931 40119,Bonnelles,4796,IDF,75,FR,48.61816,2.02922 40123,Bonneuil-sur-Marne,4796,IDF,75,FR,48.7695,2.4793 40128,Bonnières-sur-Seine,4796,IDF,75,FR,49.03525,1.5783 40147,Bouafle,4796,IDF,75,FR,48.96463,1.9012 40153,Bouffémont,4796,IDF,75,FR,49.04377,2.29796 40155,Bougival,4796,IDF,75,FR,48.86223,2.14148 40166,Bouleurs,4796,IDF,75,FR,48.88181,2.90728 40172,Boulogne-Billancourt,4796,IDF,75,FR,48.83545,2.24128 40177,Bouray-sur-Juine,4796,IDF,75,FR,48.51981,2.30001 40195,Bourg-la-Reine,4796,IDF,75,FR,48.77888,2.31781 40212,Bourron-Marlotte,4796,IDF,75,FR,48.34051,2.70041 40221,Boussy-Saint-Antoine,4796,IDF,75,FR,48.69101,2.5306 40224,Boutigny-sur-Essonne,4796,IDF,75,FR,48.43333,2.38333 40268,Bray-sur-Seine,4796,IDF,75,FR,48.41371,3.23852 40360,Brétigny-sur-Orge,4796,IDF,75,FR,48.61135,2.30593 40296,Breuillet,4796,IDF,75,FR,48.57064,2.17424 40361,Bréval,4796,IDF,75,FR,48.94545,1.53309 40306,Brie-Comte-Robert,4796,IDF,75,FR,48.69247,2.6109 40315,Briis-sous-Forges,4796,IDF,75,FR,48.62399,2.12112 40335,Brou-sur-Chantereine,4796,IDF,75,FR,48.88333,2.63333 40346,Brunoy,4796,IDF,75,FR,48.6942,2.49223 40350,Bruyères-le-Châtel,4796,IDF,75,FR,48.58868,2.18991 40351,Bruyères-sur-Oise,4796,IDF,75,FR,49.15756,2.32577 40353,Bry-sur-Marne,4796,IDF,75,FR,48.83811,2.52488 40368,Buc,4796,IDF,75,FR,48.77627,2.12577 40369,Buchelay,4796,IDF,75,FR,48.97926,1.67026 40381,Bullion,4796,IDF,75,FR,48.62285,1.99024 40386,Bures-sur-Yvette,4796,IDF,75,FR,48.69981,2.17064 40401,Bussy-Saint-Georges,4796,IDF,75,FR,48.84099,2.70165 40402,Butry-sur-Oise,4796,IDF,75,FR,49.08837,2.19916 40449,Cachan,4796,IDF,75,FR,48.79632,2.33661 40513,Cannes-Écluse,4796,IDF,75,FR,48.36303,2.98748 40559,Carrières-sous-Poissy,4796,IDF,75,FR,48.94952,2.04068 40560,Carrières-sur-Seine,4796,IDF,75,FR,48.90687,2.1792 41390,Cély,4796,IDF,75,FR,48.45959,2.53245 40646,Cergy,4796,IDF,75,FR,49.03645,2.07613 40647,Cergy-Pontoise,4796,IDF,75,FR,49.03894,2.07805 40651,Cernay-la-Ville,4796,IDF,75,FR,48.67324,1.97422 40653,Cerny,4796,IDF,75,FR,48.47796,2.32815 40660,Cesson,4796,IDF,75,FR,48.56204,2.60816 40680,Chailly-en-Bière,4796,IDF,75,FR,48.46701,2.60785 40681,Chailly-en-Brie,4796,IDF,75,FR,48.79006,3.12453 40689,Chalifert,4796,IDF,75,FR,48.88993,2.77339 40697,Chalo-Saint-Mars,4796,IDF,75,FR,48.42328,2.06491 40703,Chamarande,4796,IDF,75,FR,48.51715,2.2171 40709,Chambourcy,4796,IDF,75,FR,48.90655,2.041 40716,Chamigny,4796,IDF,75,FR,48.97242,3.15165 40722,Champagne-sur-Oise,4796,IDF,75,FR,49.14052,2.24233 40723,Champagne-sur-Seine,4796,IDF,75,FR,48.39794,2.79785 40730,Champcueil,4796,IDF,75,FR,48.51594,2.44674 40742,Champigny-sur-Marne,4796,IDF,75,FR,48.81642,2.49366 40744,Champlan,4796,IDF,75,FR,48.70823,2.27975 40748,Champs-sur-Marne,4796,IDF,75,FR,48.85,2.6 40761,Changis-sur-Marne,4796,IDF,75,FR,48.95816,3.02191 40771,Chanteloup-en-Brie,4796,IDF,75,FR,48.85478,2.73929 40772,Chanteloup-les-Vignes,4796,IDF,75,FR,48.97614,2.03261 40783,Chapet,4796,IDF,75,FR,48.96667,1.93333 40798,Charenton-le-Pont,4796,IDF,75,FR,48.82209,2.41217 40812,Charny,4796,IDF,75,FR,48.97098,2.76121 40818,Chars,4796,IDF,75,FR,49.16032,1.93669 40821,Chartrettes,4796,IDF,75,FR,48.48808,2.70083 40941,Château-Landon,4796,IDF,75,FR,48.14721,2.69754 40954,Châteaufort,4796,IDF,75,FR,48.73584,2.09054 40986,Châtenay-Malabry,4796,IDF,75,FR,48.76507,2.26655 40987,Châtenay-sur-Seine,4796,IDF,75,FR,48.41839,3.09474 40992,Châtillon,4796,IDF,75,FR,48.8024,2.29346 40831,Chatou,4796,IDF,75,FR,48.8898,2.15863 40835,Chauconin-Neufmontiers,4796,IDF,75,FR,48.96667,2.85 40842,Chaumes-en-Brie,4796,IDF,75,FR,48.66853,2.84015 40847,Chaumontel,4796,IDF,75,FR,49.1247,2.43237 40861,Chavenay,4796,IDF,75,FR,48.85437,1.99163 40863,Chaville,4796,IDF,75,FR,48.80565,2.18864 40869,Chelles,4796,IDF,75,FR,48.88109,2.59295 40874,Chennevières-sur-Marne,4796,IDF,75,FR,48.79702,2.54046 40875,Chenoise,4796,IDF,75,FR,48.61462,3.19459 40879,Cheptainville,4796,IDF,75,FR,48.5509,2.27665 40889,Chessy,4796,IDF,75,FR,48.88333,2.76667 40894,Chevannes,4796,IDF,75,FR,48.53259,2.44388 40900,Chevilly-Larue,4796,IDF,75,FR,48.76476,2.3503 40901,Chevreuse,4796,IDF,75,FR,48.70662,2.03329 40904,Chevry-Cossigny,4796,IDF,75,FR,48.72465,2.66106 40909,Chilly-Mazarin,4796,IDF,75,FR,48.71489,2.31638 40922,Choisy-en-Brie,4796,IDF,75,FR,48.75867,3.21705 40923,Choisy-le-Roi,4796,IDF,75,FR,48.76846,2.41874 41039,Clamart,4796,IDF,75,FR,48.80299,2.26692 41046,Claye-Souilly,4796,IDF,75,FR,48.94492,2.68566 41052,Clichy,4796,IDF,75,FR,48.90018,2.30952 41053,Clichy-sous-Bois,4796,IDF,75,FR,48.9102,2.55323 41084,Coignières,4796,IDF,75,FR,48.7501,1.92082 41095,Collégien,4796,IDF,75,FR,48.83571,2.67365 41100,Colombes,4796,IDF,75,FR,48.91882,2.25404 41115,Combs-la-Ville,4796,IDF,75,FR,48.66497,2.56957 41129,Conches-sur-Gondoire,4796,IDF,75,FR,48.85624,2.71783 41135,Condé-Sainte-Libiaire,4796,IDF,75,FR,48.89695,2.83904 41139,Condé-sur-Vesgre,4796,IDF,75,FR,48.74199,1.66069 41142,Conflans-Sainte-Honorine,4796,IDF,75,FR,49.00158,2.09694 41145,Congis-sur-Thérouanne,4796,IDF,75,FR,49.0,2.98333 41164,Corbeil-Essonnes,4796,IDF,75,FR,48.60603,2.48757 41170,Corbreuse,4796,IDF,75,FR,48.50065,1.95913 41180,Cormeilles-en-Parisis,4796,IDF,75,FR,48.97111,2.20491 41212,Coubert,4796,IDF,75,FR,48.67186,2.69733 41215,Coubron,4796,IDF,75,FR,48.91667,2.58333 41226,Couilly-Pont-aux-Dames,4796,IDF,75,FR,48.88473,2.85677 41235,Coulommiers,4796,IDF,75,FR,48.81451,3.08498 41239,Coupvray,4796,IDF,75,FR,48.89289,2.7967 41241,Courbevoie,4796,IDF,75,FR,48.89672,2.25666 41249,Courcouronnes,4796,IDF,75,FR,48.61429,2.40762 41251,Courdimanche,4796,IDF,75,FR,49.03513,2.00096 41258,Courpalay,4796,IDF,75,FR,48.64947,2.96116 41271,Courtry,4796,IDF,75,FR,48.91906,2.60431 41344,Crégy-lès-Meaux,4796,IDF,75,FR,48.97648,2.87483 41307,Crespières,4796,IDF,75,FR,48.88317,1.92151 41351,Créteil,4796,IDF,75,FR,48.79266,2.46569 41323,Croissy-Beaubourg,4796,IDF,75,FR,48.8283,2.66964 41324,Croissy-sur-Seine,4796,IDF,75,FR,48.87925,2.13836 41327,Crosne,4796,IDF,75,FR,48.71921,2.45728 41333,Crouy-sur-Ourcq,4796,IDF,75,FR,49.0898,3.0753 41415,Dammarie-les-Lys,4796,IDF,75,FR,48.51667,2.65 41416,Dammartin-en-Goële,4796,IDF,75,FR,49.05423,2.67777 41420,Dampierre-en-Yvelines,4796,IDF,75,FR,48.7,1.98333 41423,Dampmart,4796,IDF,75,FR,48.88854,2.74095 41616,Département de lEssonne,4796,IDF,75,FR,48.5,2.25 41646,Département du Val-d’Oise,4796,IDF,75,FR,49.07891,2.17673 41459,Deuil-la-Barre,4796,IDF,75,FR,48.97674,2.32722 41521,Domont,4796,IDF,75,FR,49.02782,2.32638 41532,Donnemarie-Dontilly,4796,IDF,75,FR,48.47719,3.13162 41551,Doue,4796,IDF,75,FR,48.86641,3.16269 41554,Dourdan,4796,IDF,75,FR,48.52772,2.01113 41568,Drancy,4796,IDF,75,FR,48.92578,2.44533 41570,Draveil,4796,IDF,75,FR,48.68466,2.41418 41586,Dugny,4796,IDF,75,FR,48.95371,2.41734 41651,Eaubonne,4796,IDF,75,FR,48.99712,2.28249 48047,Écouen,4796,IDF,75,FR,49.02062,2.38309 41658,Ecquevilly,4796,IDF,75,FR,48.95192,1.92338 48054,Écuelles,4796,IDF,75,FR,48.35636,2.82335 48058,Égly,4796,IDF,75,FR,48.57828,2.22417 48059,Égreville,4796,IDF,75,FR,48.17606,2.87278 48063,Élancourt,4796,IDF,75,FR,48.78421,1.9552 48066,Émerainville,4796,IDF,75,FR,48.81276,2.62139 41669,Enghien-les-Bains,4796,IDF,75,FR,48.96667,2.31667 41672,Ennery,4796,IDF,75,FR,49.07505,2.10599 48079,Épinay-sous-Sénart,4796,IDF,75,FR,48.6897,2.51186 48080,Épinay-sur-Orge,4796,IDF,75,FR,48.67338,2.31074 48081,Épinay-sur-Seine,4796,IDF,75,FR,48.9535,2.31514 48085,Épône,4796,IDF,75,FR,48.95476,1.82233 48089,Éragny,4796,IDF,75,FR,49.01667,2.1 41696,Ermont,4796,IDF,75,FR,48.99004,2.25804 41704,Esbly,4796,IDF,75,FR,48.9052,2.81235 48095,Étampes,4796,IDF,75,FR,48.43507,2.16233 48103,Étiolles,4796,IDF,75,FR,48.63248,2.48226 48113,Étréchy,4796,IDF,75,FR,48.49465,2.19489 48125,Évry,4796,IDF,75,FR,48.6328,2.44049 48126,Ézanville,4796,IDF,75,FR,49.02794,2.36787 41773,Faremoutiers,4796,IDF,75,FR,48.79962,2.99607 41786,Favières,4796,IDF,75,FR,48.76324,2.7747 42007,Férolles-Attilly,4796,IDF,75,FR,48.73184,2.63088 41806,Ferrières-en-Brie,4796,IDF,75,FR,48.82352,2.70664 41810,Feucherolles,4796,IDF,75,FR,48.87002,1.97402 41847,Fleury-Mérogis,4796,IDF,75,FR,48.6373,2.36378 41854,Flins-sur-Seine,4796,IDF,75,FR,48.96523,1.87314 41870,Follainville-Dennemont,4796,IDF,75,FR,49.02194,1.71331 41887,Fontainebleau,4796,IDF,75,FR,48.40908,2.70177 41896,Fontenay-aux-Roses,4796,IDF,75,FR,48.79325,2.29275 41897,Fontenay-en-Parisis,4796,IDF,75,FR,49.05371,2.45156 41899,Fontenay-le-Fleury,4796,IDF,75,FR,48.81253,2.04863 41901,Fontenay-lès-Briis,4796,IDF,75,FR,48.61962,2.15276 41902,Fontenay-sous-Bois,4796,IDF,75,FR,48.85442,2.48268 41895,Fontenay-Trésigny,4796,IDF,75,FR,48.70647,2.87047 41912,Forges-les-Bains,4796,IDF,75,FR,48.62942,2.10264 41920,Fosses,4796,IDF,75,FR,49.09808,2.50957 41939,Fourqueux,4796,IDF,75,FR,48.88693,2.06367 41949,Franconville,4796,IDF,75,FR,48.98333,2.23333 41956,Freneuse,4796,IDF,75,FR,49.04832,1.60168 41987,Frépillon,4796,IDF,75,FR,49.05216,2.20528 41958,Fresnes,4796,IDF,75,FR,48.75568,2.32241 41990,Fublaines,4796,IDF,75,FR,48.93816,2.93655 42012,Gagny,4796,IDF,75,FR,48.88333,2.53333 42023,Galluis,4796,IDF,75,FR,48.79657,1.79414 42025,Gambais,4796,IDF,75,FR,48.77351,1.67196 42032,Garancières,4796,IDF,75,FR,48.82271,1.75512 42034,Garches,4796,IDF,75,FR,48.84226,2.18232 42042,Gargenville,4796,IDF,75,FR,48.98802,1.81176 42043,Garges-lès-Gonesse,4796,IDF,75,FR,48.96791,2.39781 42056,Gazeran,4796,IDF,75,FR,48.63264,1.77149 42068,Gennevilliers,4796,IDF,75,FR,48.93333,2.3 42070,Gentilly,4796,IDF,75,FR,48.81294,2.3417 42089,Gif-sur-Yvette,4796,IDF,75,FR,48.68333,2.13333 42120,Gometz-la-Ville,4796,IDF,75,FR,48.67219,2.12868 42121,Gometz-le-Châtel,4796,IDF,75,FR,48.67837,2.13792 42129,Gonesse,4796,IDF,75,FR,48.98693,2.44892 42142,Gouaix,4796,IDF,75,FR,48.48539,3.29336 42153,Gournay-sur-Marne,4796,IDF,75,FR,48.86223,2.58452 42154,Goussainville,4796,IDF,75,FR,49.01367,2.46595 42155,Gouvernes,4796,IDF,75,FR,48.86007,2.69074 42202,Gretz-Armainvilliers,4796,IDF,75,FR,48.7412,2.73105 42204,Grez-sur-Loing,4796,IDF,75,FR,48.31754,2.68848 42212,Grigny,4796,IDF,75,FR,48.65412,2.39343 42216,Grisy-Suisnes,4796,IDF,75,FR,48.68538,2.66781 42226,Groslay,4796,IDF,75,FR,48.98561,2.34736 42285,Guérard,4796,IDF,75,FR,48.82086,2.95969 42244,Guermantes,4796,IDF,75,FR,48.85303,2.70495 42246,Guerville,4796,IDF,75,FR,48.94388,1.73429 42256,Guignes,4796,IDF,75,FR,48.63333,2.8 42276,Guyancourt,4796,IDF,75,FR,48.77334,2.07393 42327,Hardricourt,4796,IDF,75,FR,49.00779,1.89389 42356,Hauts-de-Seine,4796,IDF,75,FR,48.85,2.19293 42375,Herblay,4796,IDF,75,FR,48.98994,2.1699 42458,Héricy,4796,IDF,75,FR,48.44848,2.76445 42424,Houdan,4796,IDF,75,FR,48.79044,1.60007 42426,Houilles,4796,IDF,75,FR,48.92161,2.19263 42474,Igny,4796,IDF,75,FR,48.74437,2.22428 42506,Issou,4796,IDF,75,FR,48.98994,1.79292 42508,Issy-les-Moulineaux,4796,IDF,75,FR,48.82104,2.27718 42514,Itteville,4796,IDF,75,FR,48.51536,2.34377 42517,Ivry-sur-Seine,4796,IDF,75,FR,48.81568,2.38487 42528,Janville-sur-Juine,4796,IDF,75,FR,48.51352,2.27064 42554,Joinville-le-Pont,4796,IDF,75,FR,48.82538,2.47458 42565,Jouarre,4796,IDF,75,FR,48.92661,3.13168 42566,Jouars-Pontchartrain,4796,IDF,75,FR,48.78888,1.89898 42574,Jouy-en-Josas,4796,IDF,75,FR,48.75909,2.16966 42575,Jouy-le-Châtel,4796,IDF,75,FR,48.66651,3.13036 42576,Jouy-le-Moutier,4796,IDF,75,FR,49.01068,2.04028 42578,Jouy-sur-Morin,4796,IDF,75,FR,48.795,3.27238 42587,Juilly,4796,IDF,75,FR,49.01375,2.70563 42601,Juvisy-sur-Orge,4796,IDF,75,FR,48.68333,2.38333 42602,Juziers,4796,IDF,75,FR,48.99137,1.8476 42626,LHaÿ-les-Roses,4796,IDF,75,FR,48.78333,2.33333 43708,L’Étang-la-Ville,4796,IDF,75,FR,48.86954,2.05732 43703,L’Isle-Adam,4796,IDF,75,FR,49.10744,2.22818 42672,La Celle-Saint-Cloud,4796,IDF,75,FR,48.85029,2.14523 42673,La Celle-sur-Morin,4796,IDF,75,FR,48.81146,2.96921 42679,La Chapelle-Gauthier,4796,IDF,75,FR,48.54947,2.89776 42698,La Chapelle-la-Reine,4796,IDF,75,FR,48.31813,2.57152 42699,La Chapelle-sur-Crécy,4796,IDF,75,FR,48.85879,2.92597 42716,La Courneuve,4796,IDF,75,FR,48.92805,2.39627 42728,La Defense,4796,IDF,75,FR,48.89198,2.23881 42736,La Ferté-Alais,4796,IDF,75,FR,48.48306,2.34802 42738,La Ferté-Gaucher,4796,IDF,75,FR,48.7831,3.30678 42743,La Ferté-sous-Jouarre,4796,IDF,75,FR,48.9514,3.12724 42758,La Frette-sur-Seine,4796,IDF,75,FR,48.98057,2.17866 42764,La Garenne-Colombes,4796,IDF,75,FR,48.90472,2.2469 42773,La Grande-Paroisse,4796,IDF,75,FR,48.38682,2.90157 42783,La Houssaye-en-Brie,4796,IDF,75,FR,48.75381,2.86552 42824,La Norville,4796,IDF,75,FR,48.58243,2.2618 42839,La Queue-en-Brie,4796,IDF,75,FR,48.7852,2.58112 42840,La Queue-les-Yvelines,4796,IDF,75,FR,48.8,1.76667 42863,La Rochette,4796,IDF,75,FR,48.50882,2.66357 42910,La Verrière,4796,IDF,75,FR,48.752,1.94649 42914,La Ville-du-Bois,4796,IDF,75,FR,48.65521,2.26833 42959,Lagny-sur-Marne,4796,IDF,75,FR,48.86667,2.71667 43069,Lardy,4796,IDF,75,FR,48.51847,2.2736 43131,Le Blanc-Mesnil,4796,IDF,75,FR,48.93872,2.46138 43138,Le Bourget,4796,IDF,75,FR,48.93405,2.43584 43169,Le Châtelet-en-Brie,4796,IDF,75,FR,48.50695,2.79163 43165,Le Chesnay,4796,IDF,75,FR,48.8222,2.12213 43173,Le Coudray-Montceaux,4796,IDF,75,FR,48.56376,2.50013 43208,Le Kremlin-Bicêtre,4796,IDF,75,FR,48.81471,2.36073 43239,Le Mée-sur-Seine,4796,IDF,75,FR,48.53157,2.62829 43230,Le Mesnil-le-Roi,4796,IDF,75,FR,48.93825,2.12554 43227,Le Mesnil-Saint-Denis,4796,IDF,75,FR,48.74485,1.95594 43247,Le Pecq,4796,IDF,75,FR,48.89317,2.10371 43249,Le Perray-en-Yvelines,4796,IDF,75,FR,48.69441,1.85643 43250,Le Perreux-sur-Marne,4796,IDF,75,FR,48.85,2.5 43257,Le Pin,4796,IDF,75,FR,48.91523,2.62841 43264,Le Plessis-Bouchard,4796,IDF,75,FR,49.0,2.23333 43268,Le Plessis-Pâté,4796,IDF,75,FR,48.61078,2.32318 43269,Le Plessis-Robinson,4796,IDF,75,FR,48.78889,2.27078 43270,Le Plessis-Trévise,4796,IDF,75,FR,48.81074,2.57363 43277,Le Port-Marly,4796,IDF,75,FR,48.89016,2.11139 43284,Le Pré-Saint-Gervais,4796,IDF,75,FR,48.88549,2.40422 43291,Le Raincy,4796,IDF,75,FR,48.89916,2.52298 43312,Le Thillay,4796,IDF,75,FR,49.00659,2.47218 43327,Le Val-Saint-Germain,4796,IDF,75,FR,48.56601,2.06471 43337,Le Vésinet,4796,IDF,75,FR,48.89281,2.13308 43360,Les Alluets-le-Roi,4796,IDF,75,FR,48.91379,1.9181 43378,Les Clayes-sous-Bois,4796,IDF,75,FR,48.82206,1.98677 43386,Les Essarts-le-Roi,4796,IDF,75,FR,48.71673,1.90089 43398,Les Lilas,4796,IDF,75,FR,48.87992,2.42057 43401,Les Loges-en-Josas,4796,IDF,75,FR,48.76377,2.14002 43409,Les Molières,4796,IDF,75,FR,48.67306,2.06959 43412,Les Mureaux,4796,IDF,75,FR,48.99173,1.90972 43418,Les Pavillons-sous-Bois,4796,IDF,75,FR,48.90683,2.50648 43432,Les Ulis,4796,IDF,75,FR,48.68167,2.16944 43692,Lésigny,4796,IDF,75,FR,48.74374,2.61518 43446,Leudeville,4796,IDF,75,FR,48.56591,2.32676 43447,Leuville-sur-Orge,4796,IDF,75,FR,48.6173,2.26685 43449,Levallois-Perret,4796,IDF,75,FR,48.89389,2.28864 43694,Lévis-Saint-Nom,4796,IDF,75,FR,48.71667,1.95 43472,Lieusaint,4796,IDF,75,FR,48.63476,2.54806 43489,Limay,4796,IDF,75,FR,48.99553,1.74081 43490,Limeil-Brévannes,4796,IDF,75,FR,48.7448,2.48705 43492,Limetz-Villez,4796,IDF,75,FR,49.06667,1.55 43495,Limours,4796,IDF,75,FR,48.64625,2.07688 43500,Linas,4796,IDF,75,FR,48.63041,2.26266 43510,Lisses,4796,IDF,75,FR,48.60222,2.42245 43516,Liverdy-en-Brie,4796,IDF,75,FR,48.69987,2.77606 43520,Livry-Gargan,4796,IDF,75,FR,48.9193,2.54305 43521,Livry-sur-Seine,4796,IDF,75,FR,48.51771,2.67879 43523,Lizy-sur-Ourcq,4796,IDF,75,FR,49.02454,3.02178 43538,Lognes,4796,IDF,75,FR,48.83541,2.62998 43561,Longjumeau,4796,IDF,75,FR,48.69503,2.30735 43563,Longnes,4796,IDF,75,FR,48.92002,1.58705 43565,Longperrier,4796,IDF,75,FR,49.04844,2.66571 43566,Longpont-sur-Orge,4796,IDF,75,FR,48.64171,2.29278 43572,Longueville,4796,IDF,75,FR,48.51503,3.24677 43594,Lorrez-le-Bocage-Préaux,4796,IDF,75,FR,48.23333,2.9 43611,Louveciennes,4796,IDF,75,FR,48.86115,2.11463 43618,Louvres,4796,IDF,75,FR,49.0446,2.50479 43649,Lumigny-Nesles-Ormeaux,4796,IDF,75,FR,48.73333,2.95 43671,Luzarches,4796,IDF,75,FR,49.11319,2.4223 43716,Maffliers,4796,IDF,75,FR,49.07758,2.30768 43723,Magnanville,4796,IDF,75,FR,48.96798,1.67842 43726,Magny-en-Vexin,4796,IDF,75,FR,49.15515,1.78669 43728,Magny-le-Hongre,4796,IDF,75,FR,48.86325,2.81546 43729,Magny-les-Hameaux,4796,IDF,75,FR,48.74345,2.06154 43737,Maincy,4796,IDF,75,FR,48.54977,2.70017 43743,Maisons-Alfort,4796,IDF,75,FR,48.81171,2.43945 43744,Maisons-Laffitte,4796,IDF,75,FR,48.95264,2.14521 43745,Maisse,4796,IDF,75,FR,48.39525,2.37902 43748,Malakoff,4796,IDF,75,FR,48.81999,2.29998 43775,Mandres-les-Roses,4796,IDF,75,FR,48.70198,2.54662 43784,Mantes-la-Jolie,4796,IDF,75,FR,48.99048,1.7167 43785,Mantes-la-Ville,4796,IDF,75,FR,48.97374,1.70253 43815,Marcoussis,4796,IDF,75,FR,48.64026,2.23858 43820,Mareil-Marly,4796,IDF,75,FR,48.88213,2.07351 43821,Mareil-sur-Mauldre,4796,IDF,75,FR,48.89521,1.8687 43827,Mareuil-lès-Meaux,4796,IDF,75,FR,48.92648,2.86134 43834,Margency,4796,IDF,75,FR,49.0,2.3 43846,Marines,4796,IDF,75,FR,49.14485,1.98226 43850,Marles-en-Brie,4796,IDF,75,FR,48.72783,2.88003 43855,Marly-la-Ville,4796,IDF,75,FR,49.08201,2.50347 43856,Marly-le-Roi,4796,IDF,75,FR,48.86667,2.08333 43864,Marnes-la-Coquette,4796,IDF,75,FR,48.82732,2.17151 43866,Marolles-en-Hurepoix,4796,IDF,75,FR,48.56232,2.29885 43868,Marolles-sur-Seine,4796,IDF,75,FR,48.38662,3.03562 43923,Mary-sur-Marne,4796,IDF,75,FR,49.01591,3.02788 43936,Massy,4796,IDF,75,FR,48.72692,2.28301 43948,Maule,4796,IDF,75,FR,48.91056,1.85264 43952,Maurecourt,4796,IDF,75,FR,48.99614,2.06155 43955,Maurepas,4796,IDF,75,FR,48.76486,1.92923 43983,Meaux,4796,IDF,75,FR,48.96014,2.87885 44457,Médan,4796,IDF,75,FR,48.95539,1.99494 43998,Melun,4796,IDF,75,FR,48.5457,2.65356 44001,Mennecy,4796,IDF,75,FR,48.56903,2.44384 44008,Menucourt,4796,IDF,75,FR,49.02841,1.98046 44480,Méré,4796,IDF,75,FR,48.78445,1.81247 44482,Méréville,4796,IDF,75,FR,48.31476,2.08609 44472,Mériel,4796,IDF,75,FR,49.07614,2.21054 44478,Méry-sur-Oise,4796,IDF,75,FR,49.05876,2.19113 44045,Meudon,4796,IDF,75,FR,48.81381,2.235 44046,Meulan-en-Yvelines,4796,IDF,75,FR,49.00768,1.90602 44490,Mézières-sur-Seine,4796,IDF,75,FR,48.96128,1.79245 44491,Mézy-sur-Seine,4796,IDF,75,FR,49.0,1.88333 44076,Milly-la-Forêt,4796,IDF,75,FR,48.404,2.47015 44106,Mitry-Mory,4796,IDF,75,FR,48.98333,2.61667 44112,Moigny-sur-École,4796,IDF,75,FR,48.43262,2.45802 44116,Moisenay,4796,IDF,75,FR,48.56266,2.73527 44119,Moisselles,4796,IDF,75,FR,49.05,2.33597 44120,Moissy-Cramayel,4796,IDF,75,FR,48.62605,2.60125 44210,Montcourt-Fromonville,4796,IDF,75,FR,48.30672,2.7046 44222,Montereau-Fault-Yonne,4796,IDF,75,FR,48.38333,2.95 44228,Montesson,4796,IDF,75,FR,48.90924,2.13754 44335,Montévrain,4796,IDF,75,FR,48.87415,2.75114 44235,Montfermeil,4796,IDF,75,FR,48.8982,2.57913 44246,Montgeron,4796,IDF,75,FR,48.70543,2.45039 44251,Monthyon,4796,IDF,75,FR,49.00753,2.8261 44260,Montigny-le-Bretonneux,4796,IDF,75,FR,48.76636,2.03405 44257,Montigny-Lencoup,4796,IDF,75,FR,48.45162,3.06503 44261,Montigny-lès-Cormeilles,4796,IDF,75,FR,48.98201,2.20035 44263,Montigny-sur-Loing,4796,IDF,75,FR,48.33575,2.74423 44271,Montlhéry,4796,IDF,75,FR,48.64004,2.27465 44273,Montlignon,4796,IDF,75,FR,49.00636,2.28705 44279,Montmagny,4796,IDF,75,FR,48.97338,2.34688 44287,Montmorency,4796,IDF,75,FR,48.98826,2.3434 44307,Montreuil,4796,IDF,75,FR,48.86415,2.44322 44322,Montrouge,4796,IDF,75,FR,48.8162,2.31393 44323,Montry,4796,IDF,75,FR,48.88409,2.82915 44328,Montsoult,4796,IDF,75,FR,49.06942,2.31966 44338,Morainvilliers,4796,IDF,75,FR,48.92902,1.93621 44341,Morangis,4796,IDF,75,FR,48.70383,2.33908 44349,Moret-sur-Loing,4796,IDF,75,FR,48.37239,2.81713 44354,Morigny-Champigny,4796,IDF,75,FR,48.44685,2.18351 44358,Mormant,4796,IDF,75,FR,48.60901,2.89025 44365,Morsang-sur-Orge,4796,IDF,75,FR,48.66181,2.35338 44373,Mortcerf,4796,IDF,75,FR,48.78879,2.91692 44403,Mouroux,4796,IDF,75,FR,48.82263,3.03879 44404,Mours,4796,IDF,75,FR,49.13077,2.26761 44408,Moussy-le-Neuf,4796,IDF,75,FR,49.06427,2.60252 44409,Moussy-le-Vieux,4796,IDF,75,FR,49.04712,2.62493 44502,Nandy,4796,IDF,75,FR,48.58301,2.56292 44503,Nangis,4796,IDF,75,FR,48.55535,3.01306 44505,Nanterre,4796,IDF,75,FR,48.89198,2.20675 44510,Nanteuil-lès-Meaux,4796,IDF,75,FR,48.9294,2.89594 44528,Neauphle-le-Château,4796,IDF,75,FR,48.81418,1.90567 44529,Nemours,4796,IDF,75,FR,48.27511,2.69078 44535,Nesles-la-Vallée,4796,IDF,75,FR,49.13202,2.17099 44545,Neufmoutiers-en-Brie,4796,IDF,75,FR,48.76882,2.83156 44546,Neuilly-Plaisance,4796,IDF,75,FR,48.86342,2.506 44552,Neuilly-sur-Marne,4796,IDF,75,FR,48.85373,2.54903 44553,Neuilly-sur-Seine,4796,IDF,75,FR,48.8846,2.26965 44571,Neuville-sur-Oise,4796,IDF,75,FR,49.01667,2.06667 44615,Nogent-sur-Marne,4796,IDF,75,FR,48.83669,2.48255 44626,Noiseau,4796,IDF,75,FR,48.77589,2.54892 44627,Noisiel,4796,IDF,75,FR,48.84868,2.62435 44628,Noisy-le-Grand,4796,IDF,75,FR,48.84979,2.56266 44629,Noisy-le-Roi,4796,IDF,75,FR,48.84445,2.06345 44630,Noisy-le-Sec,4796,IDF,75,FR,48.89148,2.46451 44631,Noisy-sur-École,4796,IDF,75,FR,48.36701,2.50804 44681,Nozay,4796,IDF,75,FR,48.65921,2.24151 44725,Oinville-sur-Montcient,4796,IDF,75,FR,49.02722,1.84928 44729,Oissery,4796,IDF,75,FR,49.07047,2.81819 44734,Ollainville,4796,IDF,75,FR,48.59081,2.21936 44762,Orgerus,4796,IDF,75,FR,48.83851,1.70132 44763,Orgeval,4796,IDF,75,FR,48.92162,1.9779 44773,Orly,4796,IDF,75,FR,48.74792,2.39253 44777,Ormesson-sur-Marne,4796,IDF,75,FR,48.7863,2.54471 44778,Ormoy,4796,IDF,75,FR,48.57489,2.45206 44784,Orsay,4796,IDF,75,FR,48.69572,2.18727 44789,Osny,4796,IDF,75,FR,49.0701,2.06277 44796,Othis,4796,IDF,75,FR,49.07387,2.67502 44821,Ozoir-la-Ferrière,4796,IDF,75,FR,48.76699,2.66871 44822,Ozouer-le-Voulgis,4796,IDF,75,FR,48.66012,2.77409 44832,Palaiseau,4796,IDF,75,FR,48.71828,2.2498 44845,Pantin,4796,IDF,75,FR,48.89437,2.40935 44847,Paray-Vieille-Poste,4796,IDF,75,FR,48.71402,2.36283 44856,Paris,4796,IDF,75,FR,48.8534,2.3486 44857,Parmain,4796,IDF,75,FR,49.11247,2.21487 45358,Périgny,4796,IDF,75,FR,48.69656,2.55537 44909,Persan,4796,IDF,75,FR,49.15335,2.27218 44910,Perthes,4796,IDF,75,FR,48.47821,2.55509 44955,Pierrefitte-sur-Seine,4796,IDF,75,FR,48.96691,2.36104 44960,Pierrelaye,4796,IDF,75,FR,49.0211,2.15481 44995,Plaisir,4796,IDF,75,FR,48.82319,1.9541 45136,Poissy,4796,IDF,75,FR,48.92902,2.04952 45151,Pommeuse,4796,IDF,75,FR,48.81667,3.01667 45158,Pomponne,4796,IDF,75,FR,48.8813,2.68232 45202,Pontault-Combault,4796,IDF,75,FR,48.79813,2.60676 45203,Pontcarré,4796,IDF,75,FR,48.79772,2.70508 45210,Ponthierry,4796,IDF,75,FR,48.53366,2.54419 45213,Pontoise,4796,IDF,75,FR,49.05,2.1 45220,Porcheville,4796,IDF,75,FR,48.97254,1.77973 45283,Presles-en-Brie,4796,IDF,75,FR,48.71527,2.74112 45288,Pringy,4796,IDF,75,FR,48.51815,2.56333 45298,Provins,4796,IDF,75,FR,48.55897,3.29939 45321,Puiseux-en-France,4796,IDF,75,FR,49.05552,2.50035 45332,Pussay,4796,IDF,75,FR,48.34908,1.99182 45334,Puteaux,4796,IDF,75,FR,48.88341,2.23894 45396,Quincy-sous-Sénart,4796,IDF,75,FR,48.67294,2.53419 45395,Quincy-Voisins,4796,IDF,75,FR,48.90114,2.87559 45423,Rambouillet,4796,IDF,75,FR,48.64374,1.82992 45439,Rebais,4796,IDF,75,FR,48.84721,3.23232 45524,Ris-Orangis,4796,IDF,75,FR,48.6511,2.41406 45552,Rocquencourt,4796,IDF,75,FR,48.83783,2.10228 45565,Roissy-en-Brie,4796,IDF,75,FR,48.79159,2.64747 45566,Roissy-en-France,4796,IDF,75,FR,49.00443,2.51703 45573,Romainville,4796,IDF,75,FR,48.8854,2.43482 45606,Rosny-sous-Bois,4796,IDF,75,FR,48.87017,2.4991 45607,Rosny-sur-Seine,4796,IDF,75,FR,48.99808,1.6313 45652,Rozay-en-Brie,4796,IDF,75,FR,48.68333,2.95816 45658,Rubelles,4796,IDF,75,FR,48.55327,2.67593 45660,Rueil-Malmaison,4796,IDF,75,FR,48.8765,2.18967 45675,Rungis,4796,IDF,75,FR,48.74607,2.35275 46891,Saâcy-sur-Marne,4796,IDF,75,FR,48.9621,3.21083 45707,Saclas,4796,IDF,75,FR,48.35845,2.12349 45708,Saclay,4796,IDF,75,FR,48.7326,2.16923 45713,Sagy,4796,IDF,75,FR,49.04988,1.95216 45777,Saint-Arnoult-en-Yvelines,4796,IDF,75,FR,48.57111,1.9395 45793,Saint-Augustin,4796,IDF,75,FR,48.78333,3.03016 45828,Saint-Brice-sous-Forêt,4796,IDF,75,FR,49.00132,2.35361 45860,Saint-Chéron,4796,IDF,75,FR,48.55433,2.12403 45868,Saint-Cloud,4796,IDF,75,FR,48.84598,2.20289 45885,Saint-Cyr-l’École,4796,IDF,75,FR,48.79865,2.06814 45886,Saint-Cyr-sous-Dourdan,4796,IDF,75,FR,48.56667,2.03333 45890,Saint-Cyr-sur-Morin,4796,IDF,75,FR,48.90664,3.18016 45894,Saint-Denis,4796,IDF,75,FR,48.93564,2.35387 45930,Saint-Fargeau-Ponthierry,4796,IDF,75,FR,48.55713,2.5284 46005,Saint-Germain-de-la-Grange,4796,IDF,75,FR,48.83436,1.89884 46015,Saint-Germain-en-Laye,4796,IDF,75,FR,48.89643,2.0904 45996,Saint-Germain-Laval,4796,IDF,75,FR,48.39968,2.99781 46018,Saint-Germain-lès-Arpajon,4796,IDF,75,FR,48.59733,2.26481 46019,Saint-Germain-lès-Corbeil,4796,IDF,75,FR,48.62211,2.48775 46022,Saint-Germain-sur-Morin,4796,IDF,75,FR,48.88257,2.85127 46041,Saint-Gratien,4796,IDF,75,FR,48.9735,2.28729 46118,Saint-Jean-les-Deux-Jumeaux,4796,IDF,75,FR,48.9514,3.01959 46214,Saint-Léger-en-Yvelines,4796,IDF,75,FR,48.72173,1.76638 46193,Saint-Leu-la-Forêt,4796,IDF,75,FR,49.01667,2.25 46234,Saint-Mammès,4796,IDF,75,FR,48.38458,2.81578 46236,Saint-Mandé,4796,IDF,75,FR,48.83864,2.41579 46252,Saint-Mard,4796,IDF,75,FR,49.03701,2.69645 46290,Saint-Martin-du-Tertre,4796,IDF,75,FR,49.10743,2.34533 46310,Saint-Maur-des-Fossés,4796,IDF,75,FR,48.79395,2.49323 46311,Saint-Maurice,4796,IDF,75,FR,48.82182,2.42716 46312,Saint-Maurice-Montcouronne,4796,IDF,75,FR,48.58288,2.12504 46341,Saint-Michel-sur-Orge,4796,IDF,75,FR,48.63479,2.30831 46372,Saint-Nom-la-Bretêche,4796,IDF,75,FR,48.85942,2.02233 46376,Saint-Ouen,4796,IDF,75,FR,48.90654,2.33339 46383,Saint-Ouen-l’Aumône,4796,IDF,75,FR,49.04353,2.12134 46400,Saint-Pathus,4796,IDF,75,FR,49.07136,2.79886 46441,Saint-Pierre-du-Perray,4796,IDF,75,FR,48.61064,2.49429 46451,Saint-Pierre-lès-Nemours,4796,IDF,75,FR,48.26733,2.67966 46472,Saint-Prix,4796,IDF,75,FR,49.01667,2.26667 46489,Saint-Quentin-en-Yvelines,4796,IDF,75,FR,48.77186,2.01891 46514,Saint-Rémy-lès-Chevreuse,4796,IDF,75,FR,48.70708,2.07692 46539,Saint-Sauveur-sur-École,4796,IDF,75,FR,48.4975,2.54711 46558,Saint-Soupplets,4796,IDF,75,FR,49.03866,2.80723 46579,Saint-Thibault-des-Vignes,4796,IDF,75,FR,48.87111,2.68041 46623,Saint-Vrain,4796,IDF,75,FR,48.54302,2.33331 46626,Saint-Witz,4796,IDF,75,FR,49.091,2.57122 46668,Sainte-Colombe,4796,IDF,75,FR,48.53047,3.25517 46693,Sainte-Geneviève-des-Bois,4796,IDF,75,FR,48.64682,2.31965 46736,Saintry-sur-Seine,4796,IDF,75,FR,48.5964,2.49515 46737,Saints,4796,IDF,75,FR,48.76066,3.04645 46754,Salins,4796,IDF,75,FR,48.42156,3.0213 46773,Sammeron,4796,IDF,75,FR,48.94721,3.08333 46774,Samois-sur-Seine,4796,IDF,75,FR,48.45251,2.7504 46775,Samoreau,4796,IDF,75,FR,48.42946,2.75587 46790,Sannois,4796,IDF,75,FR,48.96667,2.25 46798,Santeny,4796,IDF,75,FR,48.7273,2.57346 46803,Sarcelles,4796,IDF,75,FR,48.99739,2.37821 46822,Sartrouville,4796,IDF,75,FR,48.9482,2.19169 46848,Saulx-les-Chartreux,4796,IDF,75,FR,48.69062,2.26727 46880,Savigny-le-Temple,4796,IDF,75,FR,48.57409,2.58287 46883,Savigny-sur-Orge,4796,IDF,75,FR,48.67677,2.34835 46895,Sceaux,4796,IDF,75,FR,48.77644,2.29026 46927,Seine-et-Marne,4796,IDF,75,FR,48.64599,2.95905 46925,Seine-Port,4796,IDF,75,FR,48.55743,2.55316 46926,Seine-Saint-Denis,4796,IDF,75,FR,48.91421,2.47604 46948,Septeuil,4796,IDF,75,FR,48.89245,1.68357 46953,Seraincourt,4796,IDF,75,FR,49.03573,1.86703 46968,Serris,4796,IDF,75,FR,48.84528,2.78611 46973,Servon,4796,IDF,75,FR,48.71662,2.58737 46977,Seugy,4796,IDF,75,FR,49.12182,2.39377 46979,Sevran,4796,IDF,75,FR,48.94472,2.52746 47130,Sèvres,4796,IDF,75,FR,48.82292,2.21757 47016,Soignolles-en-Brie,4796,IDF,75,FR,48.6535,2.69968 47019,Soisy-sous-Montmorency,4796,IDF,75,FR,48.98813,2.30156 47021,Soisy-sur-École,4796,IDF,75,FR,48.47637,2.49301 47020,Soisy-sur-Seine,4796,IDF,75,FR,48.64875,2.45223 47023,Solers,4796,IDF,75,FR,48.65919,2.71617 47037,Sonchamp,4796,IDF,75,FR,48.5759,1.87753 47079,Souppes-sur-Loing,4796,IDF,75,FR,48.18297,2.73521 47084,Sourdun,4796,IDF,75,FR,48.53688,3.352 47098,Stains,4796,IDF,75,FR,48.95,2.38333 47111,Sucy-en-Brie,4796,IDF,75,FR,48.76872,2.53474 47120,Suresnes,4796,IDF,75,FR,48.87143,2.22929 47123,Survilliers,4796,IDF,75,FR,49.09712,2.54449 47153,Tacoignières,4796,IDF,75,FR,48.83619,1.67501 47192,Taverny,4796,IDF,75,FR,49.02542,2.21691 47225,Thiais,4796,IDF,75,FR,48.76496,2.3961 47240,Thiverval-Grignon,4796,IDF,75,FR,48.84964,1.91729 47244,Thoiry,4796,IDF,75,FR,48.86715,1.7976 47246,Thomery,4796,IDF,75,FR,48.40723,2.78852 47249,Thorigny-sur-Marne,4796,IDF,75,FR,48.88689,2.71806 47278,Tigery,4796,IDF,75,FR,48.64257,2.50779 47299,Torcy,4796,IDF,75,FR,48.85064,2.65078 47318,Touquin,4796,IDF,75,FR,48.73498,3.01222 47322,Tournan-en-Brie,4796,IDF,75,FR,48.74146,2.772 47349,Trappes,4796,IDF,75,FR,48.77413,2.01781 47358,Tremblay-en-France,4796,IDF,75,FR,48.94956,2.5684 47371,Triel-sur-Seine,4796,IDF,75,FR,48.97818,2.00743 47375,Trilport,4796,IDF,75,FR,48.95685,2.95076 47437,Us,4796,IDF,75,FR,49.1,1.96667 47457,Vaires-sur-Marne,4796,IDF,75,FR,48.87649,2.63982 47462,Val-de-Marne,4796,IDF,75,FR,48.78149,2.49331 47478,Valenton,4796,IDF,75,FR,48.74527,2.46467 47495,Valmondois,4796,IDF,75,FR,49.0973,2.18996 47505,Vanves,4796,IDF,75,FR,48.82345,2.29025 47510,Varennes-Jarcy,4796,IDF,75,FR,48.67914,2.56152 47516,Varennes-sur-Seine,4796,IDF,75,FR,48.37304,2.92571 47521,Varreddes,4796,IDF,75,FR,49.00305,2.92788 47530,Vaucresson,4796,IDF,75,FR,48.84078,2.15652 47534,Vaugrigneuse,4796,IDF,75,FR,48.60263,2.12218 47535,Vauhallan,4796,IDF,75,FR,48.73354,2.20277 47536,Vaujours,4796,IDF,75,FR,48.93022,2.5711 47543,Vauréal,4796,IDF,75,FR,49.03333,2.03333 47546,Vaux-le-Pénil,4796,IDF,75,FR,48.52803,2.69165 47548,Vaux-sur-Seine,4796,IDF,75,FR,49.01271,1.96942 47924,Vélizy-Villacoublay,4796,IDF,75,FR,48.78198,2.19395 47925,Vémars,4796,IDF,75,FR,49.06942,2.56643 47583,Veneux-les-Sablons,4796,IDF,75,FR,48.37872,2.79499 47614,Verneuil-sur-Seine,4796,IDF,75,FR,48.97388,1.9648 47621,Vernou-la-Celle-sur-Seine,4796,IDF,75,FR,48.38789,2.84718 47623,Vernouillet,4796,IDF,75,FR,48.97146,1.98082 47630,Verrières-le-Buisson,4796,IDF,75,FR,48.74565,2.26796 47632,Versailles,4796,IDF,75,FR,48.80359,2.13424 47637,Vert-le-Grand,4796,IDF,75,FR,48.57172,2.35777 47638,Vert-le-Petit,4796,IDF,75,FR,48.55163,2.36526 47635,Vert-Saint-Denis,4796,IDF,75,FR,48.56818,2.62007 47660,Viarmes,4796,IDF,75,FR,49.13082,2.37074 47697,Vigneux-sur-Seine,4796,IDF,75,FR,48.70291,2.41357 47701,Vigny,4796,IDF,75,FR,49.07902,1.92806 47705,Villabé,4796,IDF,75,FR,48.58949,2.45096 47717,Ville-d’Avray,4796,IDF,75,FR,48.82358,2.19311 47725,Villebon-sur-Yvette,4796,IDF,75,FR,48.70594,2.24019 47727,Villecresnes,4796,IDF,75,FR,48.72002,2.5394 47745,Villejuif,4796,IDF,75,FR,48.7939,2.35992 47746,Villejust,4796,IDF,75,FR,48.68304,2.2361 47752,Villemoisson-sur-Orge,4796,IDF,75,FR,48.66632,2.33657 47754,Villemomble,4796,IDF,75,FR,48.88333,2.5 47773,Villeneuve-la-Garenne,4796,IDF,75,FR,48.93935,2.31478 47776,Villeneuve-le-Comte,4796,IDF,75,FR,48.81413,2.82953 47777,Villeneuve-le-Roi,4796,IDF,75,FR,48.73684,2.40081 47763,Villeneuve-Saint-Georges,4796,IDF,75,FR,48.73219,2.44925 47783,Villeneuve-sur-Bellot,4796,IDF,75,FR,48.86203,3.34143 47786,Villennes-sur-Seine,4796,IDF,75,FR,48.94137,1.99137 47788,Villenoy,4796,IDF,75,FR,48.94112,2.8602 47789,Villeparisis,4796,IDF,75,FR,48.94208,2.61463 47790,Villepinte,4796,IDF,75,FR,48.96203,2.53253 47792,Villepreux,4796,IDF,75,FR,48.82815,1.9976 47815,Villetaneuse,4796,IDF,75,FR,48.95833,2.34167 47819,Villevaudé,4796,IDF,75,FR,48.91751,2.65228 47830,Villiers-le-Bâcle,4796,IDF,75,FR,48.72819,2.11925 47829,Villiers-le-Bel,4796,IDF,75,FR,49.00875,2.39819 47825,Villiers-Saint-Fréderic,4796,IDF,75,FR,48.81667,1.88333 47826,Villiers-Saint-Georges,4796,IDF,75,FR,48.64998,3.40754 47833,Villiers-sur-Marne,4796,IDF,75,FR,48.831,2.54844 47834,Villiers-sur-Morin,4796,IDF,75,FR,48.86099,2.87773 47835,Villiers-sur-Orge,4796,IDF,75,FR,48.65953,2.30002 47844,Vincennes,4796,IDF,75,FR,48.8486,2.43769 47865,Viroflay,4796,IDF,75,FR,48.80078,2.16181 47867,Viry-Châtillon,4796,IDF,75,FR,48.67211,2.39318 47875,Vitry-sur-Seine,4796,IDF,75,FR,48.78716,2.40332 47893,Voisenon,4796,IDF,75,FR,48.5717,2.6648 47894,Voisins-le-Bretonneux,4796,IDF,75,FR,48.75793,2.05137 47908,Voulangis,4796,IDF,75,FR,48.85252,2.89558 47909,Voulx,4796,IDF,75,FR,48.28204,2.96747 47922,Vulaines-sur-Seine,4796,IDF,75,FR,48.43186,2.76476 47985,Wissous,4796,IDF,75,FR,48.73352,2.32338 48004,Yerres,4796,IDF,75,FR,48.71785,2.49338 48014,Yvelines,4796,IDF,75,FR,48.80546,1.85696 39241,Ablon,4804,NOR,75,FR,49.39214,0.29584 39255,Acquigny,4804,NOR,75,FR,49.1735,1.1765 39259,Agneaux,4804,NOR,75,FR,49.11905,-1.1061 39262,Agon-Coutainville,4804,NOR,75,FR,49.04167,-1.575 39310,Alençon,4804,NOR,75,FR,48.43476,0.09311 39317,Alizay,4804,NOR,75,FR,49.32158,1.17854 39362,Amfreville,4804,NOR,75,FR,49.25,-0.23333 39363,Amfreville-la-Mi-Voie,4804,NOR,75,FR,49.40755,1.13871 39393,Andé,4804,NOR,75,FR,49.23163,1.24088 39398,Angerville-l’Orcher,4804,NOR,75,FR,49.58833,0.28191 39477,Argences,4804,NOR,75,FR,49.12635,-0.16644 39479,Argentan,4804,NOR,75,FR,48.74441,-0.02023 39502,Arnières-sur-Iton,4804,NOR,75,FR,48.99678,1.10384 39509,Arques-la-Bataille,4804,NOR,75,FR,49.88122,1.12875 39558,Athis-de-lOrne,4804,NOR,75,FR,48.81667,-0.5 39568,Aube-sur-Rîle,4804,NOR,75,FR,48.7392,0.55161 39575,Aubevoye,4804,NOR,75,FR,49.17097,1.33537 39603,Auffay,4804,NOR,75,FR,49.71881,1.09911 39615,Aumale,4804,NOR,75,FR,49.76985,1.75587 39619,Aunay-sur-Odon,4804,NOR,75,FR,49.02012,-0.63238 39635,Authie,4804,NOR,75,FR,49.20615,-0.43191 39651,Auzebosc,4804,NOR,75,FR,49.59565,0.7285 39673,Aviron,4804,NOR,75,FR,49.05,1.11667 39678,Avranches,4804,NOR,75,FR,48.68436,-1.35686 39702,Bacqueville-en-Caux,4804,NOR,75,FR,49.78761,0.99927 39710,Bagnoles-de-lOrne,4804,NOR,75,FR,48.5572,-0.41383 39781,Barentin,4804,NOR,75,FR,49.54533,0.95515 39782,Barenton,4804,NOR,75,FR,48.60027,-0.83258 39788,Barneville-Carteret,4804,NOR,75,FR,49.38333,-1.75 39789,Barneville-Plage,4804,NOR,75,FR,49.36786,-1.76512 39819,Bavent,4804,NOR,75,FR,49.22996,-0.18675 39822,Bayeux,4804,NOR,75,FR,49.27732,-0.7039 39861,Beaumont-Hague,4804,NOR,75,FR,49.66387,-1.83822 39869,Beaumont-le-Roger,4804,NOR,75,FR,49.07839,0.78081 39902,Belbeuf,4804,NOR,75,FR,49.38766,1.14245 39931,Bellême,4804,NOR,75,FR,48.37329,0.57005 39918,Bellengreville,4804,NOR,75,FR,49.12425,-0.20961 40426,Bénouville,4804,NOR,75,FR,49.24151,-0.28246 39952,Bernay,4804,NOR,75,FR,49.08888,0.59858 39954,Berneval-le-Grand,4804,NOR,75,FR,49.95328,1.18755 39957,Bernières-sur-Mer,4804,NOR,75,FR,49.33057,-0.42299 39990,Beuville,4804,NOR,75,FR,49.24364,-0.32585 39991,Beuvillers,4804,NOR,75,FR,49.12961,0.25492 39995,Beuzeville,4804,NOR,75,FR,49.34483,0.34254 39996,Beuzeville-la-Grenier,4804,NOR,75,FR,49.59157,0.42684 40437,Bézu-Saint-Éloi,4804,NOR,75,FR,49.29524,1.70404 40041,Biéville-Beuville,4804,NOR,75,FR,49.24293,-0.32762 40019,Bihorel,4804,NOR,75,FR,49.45468,1.1223 40048,Blainville-Crevon,4804,NOR,75,FR,49.50395,1.29952 40049,Blainville-sur-Mer,4804,NOR,75,FR,49.06599,-1.5834 40050,Blainville-sur-Orne,4804,NOR,75,FR,49.22913,-0.30061 40054,Blangy-sur-Bresle,4804,NOR,75,FR,49.93211,1.62514 40070,Blonville-sur-Mer,4804,NOR,75,FR,49.33709,0.02709 40086,Bois-Guillaume,4804,NOR,75,FR,49.4602,1.12219 40102,Bolbec,4804,NOR,75,FR,49.57321,0.47339 40134,Boos,4804,NOR,75,FR,49.38849,1.20348 40144,Bosc-le-Hard,4804,NOR,75,FR,49.62734,1.17483 40186,Bourg-Achard,4804,NOR,75,FR,49.35322,0.81623 40205,Bourgtheroulde-Infreville,4804,NOR,75,FR,49.3,0.88333 40207,Bourguébus,4804,NOR,75,FR,49.12187,-0.29786 40213,Bourth,4804,NOR,75,FR,48.76846,0.80911 40229,Bouville,4804,NOR,75,FR,49.56193,0.89514 40355,Bréauté,4804,NOR,75,FR,49.62805,0.40005 40356,Brécey,4804,NOR,75,FR,48.72413,-1.16647 40358,Bréhal,4804,NOR,75,FR,48.89915,-1.51225 40282,Breteuil,4804,NOR,75,FR,48.83333,0.91667 40285,Bretoncelles,4804,NOR,75,FR,48.43122,0.88775 40287,Bretteville,4804,NOR,75,FR,49.6544,-1.52884 40288,Bretteville-du-Grand-Caux,4804,NOR,75,FR,49.66667,0.4 40289,Bretteville-l’Orgueilleuse,4804,NOR,75,FR,49.21189,-0.51428 40290,Bretteville-sur-Laize,4804,NOR,75,FR,49.04466,-0.32639 40291,Bretteville-sur-Odon,4804,NOR,75,FR,49.16627,-0.41662 40297,Breuilpont,4804,NOR,75,FR,48.96398,1.42919 40303,Bricquebec,4804,NOR,75,FR,49.47008,-1.63254 40320,Brionne,4804,NOR,75,FR,49.19553,0.7151 40323,Briouze,4804,NOR,75,FR,48.69848,-0.36806 40329,Brix,4804,NOR,75,FR,49.54512,-1.58012 40331,Broglie,4804,NOR,75,FR,49.00911,0.52915 40370,Buchy,4804,NOR,75,FR,49.58513,1.35852 40374,Bueil,4804,NOR,75,FR,48.93189,1.44257 40382,Bully,4804,NOR,75,FR,49.10155,-0.40825 40445,Cabourg,4804,NOR,75,FR,49.2911,-0.1133 40457,Caen,4804,NOR,75,FR,49.18585,-0.35912 40461,Cagny,4804,NOR,75,FR,49.1458,-0.2563 40462,Cahagnes,4804,NOR,75,FR,49.06631,-0.76869 40466,Cairon,4804,NOR,75,FR,49.24017,-0.45046 40478,Calvados,4804,NOR,75,FR,49.09011,-0.30608 40485,Cambes-en-Plaine,4804,NOR,75,FR,49.23161,-0.3854 40490,Cambremer,4804,NOR,75,FR,49.15192,0.0476 40515,Canon,4804,NOR,75,FR,49.0738,-0.09219 40518,Canteleu,4804,NOR,75,FR,49.44065,1.02459 40522,Cany-Barville,4804,NOR,75,FR,49.78885,0.63704 40541,Carentan,4804,NOR,75,FR,49.30312,-1.24806 40556,Carpiquet,4804,NOR,75,FR,49.18522,-0.44623 40602,Caudebec-en-Caux,4804,NOR,75,FR,49.52577,0.72561 40603,Caudebec-lès-Elbeuf,4804,NOR,75,FR,49.28082,1.02195 40607,Caumont,4804,NOR,75,FR,49.36642,0.89591 40608,Caumont-lÉventé,4804,NOR,75,FR,49.09017,-0.80501 40615,Cauville-sur-Mer,4804,NOR,75,FR,49.6,0.13333 40631,Ceaucé,4804,NOR,75,FR,48.49436,-0.62526 41395,Cérences,4804,NOR,75,FR,48.91667,-1.4347 40648,Cerisy-la-Salle,4804,NOR,75,FR,49.02622,-1.28283 40664,Ceton,4804,NOR,75,FR,48.22631,0.74968 40751,Champsecret,4804,NOR,75,FR,48.60925,-0.55058 40779,Chanu,4804,NOR,75,FR,48.72914,-0.67603 40801,Charleval,4804,NOR,75,FR,49.3729,1.38369 40881,Cherbourg-Octeville,4804,NOR,75,FR,49.63984,-1.61636 40890,Cheux,4804,NOR,75,FR,49.16611,-0.52544 41045,Claville,4804,NOR,75,FR,49.04844,1.01954 41066,Clécy,4804,NOR,75,FR,48.91718,-0.48041 41071,Cléon,4804,NOR,75,FR,49.31235,1.0295 41065,Clères,4804,NOR,75,FR,49.6,1.11667 41054,Clinchamps-sur-Orne,4804,NOR,75,FR,49.07857,-0.40156 41090,Colleville-Montgomery,4804,NOR,75,FR,49.27528,-0.30052 41099,Colombelles,4804,NOR,75,FR,49.2049,-0.29571 41128,Conches-en-Ouche,4804,NOR,75,FR,48.95768,0.94052 41136,Condé-sur-Huisne,4804,NOR,75,FR,48.38103,0.85093 41137,Condé-sur-Noireau,4804,NOR,75,FR,48.84881,-0.55214 41138,Condé-sur-Sarthe,4804,NOR,75,FR,48.43197,0.03398 41140,Condé-sur-Vire,4804,NOR,75,FR,49.05,-1.03333 41179,Cormeilles,4804,NOR,75,FR,49.24803,0.37654 41181,Cormelles-le-Royal,4804,NOR,75,FR,49.15398,-0.33062 41191,Corneville-sur-Risle,4804,NOR,75,FR,49.34128,0.58628 41245,Courcelles-sur-Seine,4804,NOR,75,FR,49.18285,1.36008 41266,Courseulles-sur-Mer,4804,NOR,75,FR,49.33027,-0.45612 41267,Courteilles,4804,NOR,75,FR,48.77495,-0.19942 41278,Coutances,4804,NOR,75,FR,49.04541,-1.44518 41279,Couterne,4804,NOR,75,FR,48.51318,-0.41538 41340,Créances,4804,NOR,75,FR,49.19873,-1.56938 41308,Cresserons,4804,NOR,75,FR,49.28701,-0.35569 41310,Creully,4804,NOR,75,FR,49.28478,-0.53976 41317,Criel-sur-Mer,4804,NOR,75,FR,50.01508,1.31459 41318,Criquebeuf-sur-Seine,4804,NOR,75,FR,49.30563,1.09964 41319,Criquetot-l’Esneval,4804,NOR,75,FR,49.64555,0.26571 41329,Croth,4804,NOR,75,FR,48.84557,1.37861 41385,Cuverville,4804,NOR,75,FR,49.18998,-0.26474 41413,Damigny,4804,NOR,75,FR,48.45,0.06667 41425,Damville,4804,NOR,75,FR,48.8693,1.07458 41436,Darnétal,4804,NOR,75,FR,49.44533,1.15144 41444,Deauville,4804,NOR,75,FR,49.357,0.06995 41601,Démouville,4804,NOR,75,FR,49.18001,-0.26947 41617,Département de lEure,4804,NOR,75,FR,49.16667,1.0 41622,Département de lOrne,4804,NOR,75,FR,48.66667,0.08333 41650,Déville-lès-Rouen,4804,NOR,75,FR,49.46942,1.05214 41469,Dieppe,4804,NOR,75,FR,49.9216,1.07772 41480,Digosville,4804,NOR,75,FR,49.63104,-1.52627 41495,Dives-sur-Mer,4804,NOR,75,FR,49.28176,-0.10125 41516,Domfront,4804,NOR,75,FR,48.59208,-0.64588 41534,Donville-les-Bains,4804,NOR,75,FR,48.84608,-1.58315 41550,Doudeville,4804,NOR,75,FR,49.72268,0.78479 41559,Douvres-la-Délivrande,4804,NOR,75,FR,49.29472,-0.38039 41564,Dozulé,4804,NOR,75,FR,49.23132,-0.04454 41584,Ducey,4804,NOR,75,FR,48.61843,-1.29052 41585,Duclair,4804,NOR,75,FR,49.48385,0.87617 48046,Écouché,4804,NOR,75,FR,48.71751,-0.12409 48051,Écrainville,4804,NOR,75,FR,49.64943,0.32488 41662,Elbeuf,4804,NOR,75,FR,49.28669,1.00288 41685,Envermeu,4804,NOR,75,FR,49.8956,1.26493 48070,Épaignes,4804,NOR,75,FR,49.27945,0.4398 48083,Épouville,4804,NOR,75,FR,49.56349,0.22373 48084,Épron,4804,NOR,75,FR,49.22174,-0.37085 48086,Équemauville,4804,NOR,75,FR,49.39406,0.2076 48087,Équeurdreville-Hainneville,4804,NOR,75,FR,49.64868,-1.65306 41714,Eslettes,4804,NOR,75,FR,49.5482,1.05515 48093,Étainhus,4804,NOR,75,FR,49.56648,0.31285 48102,Éterville,4804,NOR,75,FR,49.14423,-0.42512 48114,Étrépagny,4804,NOR,75,FR,49.30623,1.61139 48110,Étretat,4804,NOR,75,FR,49.70669,0.20523 41742,Eu,4804,NOR,75,FR,50.04606,1.42079 48122,Évrecy,4804,NOR,75,FR,49.09904,-0.50421 48123,Évreux,4804,NOR,75,FR,49.02414,1.15082 48127,Ézy-sur-Eure,4804,NOR,75,FR,48.86667,1.41667 41765,Falaise,4804,NOR,75,FR,48.89217,-0.19527 41781,Fauville-en-Caux,4804,NOR,75,FR,49.65257,0.59197 41999,Fécamp,4804,NOR,75,FR,49.75787,0.37457 41800,Fermanville,4804,NOR,75,FR,49.68673,-1.46284 41828,Flamanville,4804,NOR,75,FR,49.53274,-1.8656 41836,Flers,4804,NOR,75,FR,48.73722,-0.57466 41850,Fleury-sur-Andelle,4804,NOR,75,FR,49.36176,1.35599 41851,Fleury-sur-Orne,4804,NOR,75,FR,49.14851,-0.37508 41886,Fontaine-Étoupefour,4804,NOR,75,FR,49.146,-0.45522 41880,Fontaine-la-Mallet,4804,NOR,75,FR,49.536,0.14625 41881,Fontaine-le-Bourg,4804,NOR,75,FR,49.56451,1.16391 41883,Fontaine-le-Dun,4804,NOR,75,FR,49.81182,0.85095 41894,Fontenay,4804,NOR,75,FR,49.55993,0.18391 41900,Fontenay-le-Marmion,4804,NOR,75,FR,49.09346,-0.35294 41913,Forges-les-Eaux,4804,NOR,75,FR,49.61391,1.54449 41921,Foucarmont,4804,NOR,75,FR,49.84682,1.56899 41948,Francheville,4804,NOR,75,FR,48.78647,0.84962 42010,Gacé,4804,NOR,75,FR,48.79344,0.29624 42017,Gaillefontaine,4804,NOR,75,FR,49.65371,1.61547 42018,Gaillon,4804,NOR,75,FR,49.16104,1.34016 42019,Gainneville,4804,NOR,75,FR,49.51845,0.26164 42040,Garennes-sur-Eure,4804,NOR,75,FR,48.91116,1.43836 42049,Gasny,4804,NOR,75,FR,49.09184,1.60336 42055,Gavray,4804,NOR,75,FR,48.91108,-1.35059 42086,Giberville,4804,NOR,75,FR,49.18158,-0.28386 42105,Gisors,4804,NOR,75,FR,49.28178,1.7801 42115,Goderville,4804,NOR,75,FR,49.64566,0.36593 42132,Gonneville-la-Mallet,4804,NOR,75,FR,49.6395,0.22245 42152,Gournay-en-Bray,4804,NOR,75,FR,49.48285,1.72471 42157,Gouville-sur-Mer,4804,NOR,75,FR,49.09611,-1.57908 42166,Grainville-la-Teinturière,4804,NOR,75,FR,49.74773,0.64048 42167,Grainville-sur-Odon,4804,NOR,75,FR,49.13936,-0.53046 42172,Grand-Couronne,4804,NOR,75,FR,49.35563,1.00647 42175,Grandcamp-Maisy,4804,NOR,75,FR,49.38333,-1.03333 42185,Granville,4804,NOR,75,FR,48.83792,-1.59714 42191,Gravigny,4804,NOR,75,FR,49.0531,1.16962 42228,Gruchet-le-Valasse,4804,NOR,75,FR,49.55466,0.48684 42251,Guichainville,4804,NOR,75,FR,49.00139,1.19305 42320,Hambye,4804,NOR,75,FR,48.94798,-1.26417 42328,Harfleur,4804,NOR,75,FR,49.5066,0.19827 42355,Hautot-sur-Mer,4804,NOR,75,FR,49.89789,1.02884 42357,Hauville,4804,NOR,75,FR,49.39645,0.77232 42455,Hénouville,4804,NOR,75,FR,49.4789,0.96367 42378,Hermanville-sur-Mer,4804,NOR,75,FR,49.28464,-0.31544 42461,Hérouville-Saint-Clair,4804,NOR,75,FR,49.21088,-0.30653 42462,Hérouvillette,4804,NOR,75,FR,49.2213,-0.24348 42390,Heudreville-sur-Eure,4804,NOR,75,FR,49.14089,1.18813 42417,Honfleur,4804,NOR,75,FR,49.41985,0.23294 42427,Houlbec-Cocherel,4804,NOR,75,FR,49.0735,1.36563 42428,Houlgate,4804,NOR,75,FR,49.299,-0.08153 42431,Houppeville,4804,NOR,75,FR,49.51259,1.07962 42472,Ifs,4804,NOR,75,FR,49.14,-0.34899 42476,Igoville,4804,NOR,75,FR,49.3199,1.14832 42485,Incheville,4804,NOR,75,FR,50.01239,1.49438 42499,Isigny-le-Buat,4804,NOR,75,FR,48.61705,-1.16993 42500,Isigny-sur-Mer,4804,NOR,75,FR,49.31604,-1.10384 42502,Isneauville,4804,NOR,75,FR,49.49832,1.15431 42516,Ivry-la-Bataille,4804,NOR,75,FR,48.88333,1.45948 42589,Jullouville,4804,NOR,75,FR,48.77576,-1.56366 42592,Jumièges,4804,NOR,75,FR,49.43324,0.81918 42599,Juvigny-sous-Andaine,4804,NOR,75,FR,48.55194,-0.50878 42648,La Bonneville-sur-Iton,4804,NOR,75,FR,49.0,1.03333 42674,La Cerlangue,4804,NOR,75,FR,49.50592,0.41332 42683,La Chapelle-Réanville,4804,NOR,75,FR,49.09752,1.38209 42720,La Couture-Boussey,4804,NOR,75,FR,48.89581,1.40491 42735,La Ferrière-aux-Étangs,4804,NOR,75,FR,48.66227,-0.51955 42740,La Ferté-Macé,4804,NOR,75,FR,48.58999,-0.358 42744,La Feuillie,4804,NOR,75,FR,49.46415,1.51463 42768,La Glacerie,4804,NOR,75,FR,49.60517,-1.58185 42782,La Haye-du-Puits,4804,NOR,75,FR,49.28973,-1.54324 42780,La Haye-Malherbe,4804,NOR,75,FR,49.22553,1.06774 42781,La Haye-Pesnel,4804,NOR,75,FR,48.79561,-1.39655 42789,La Lande-Patry,4804,NOR,75,FR,48.76202,-0.59876 42798,La Madeleine-de-Nonancourt,4804,NOR,75,FR,48.77298,1.20253 42799,La Mailleraye-sur-Seine,4804,NOR,75,FR,49.48308,0.7703 42800,La Meauffe,4804,NOR,75,FR,49.17643,-1.11119 42844,La Remuée,4804,NOR,75,FR,49.52773,0.40283 42848,La Rivière-Saint-Sauveur,4804,NOR,75,FR,49.40821,0.2703 42874,La Saussaye,4804,NOR,75,FR,49.25936,0.98094 42876,La Selle-la-Forge,4804,NOR,75,FR,48.73295,-0.54103 42907,La Vaupalière,4804,NOR,75,FR,49.48789,0.9963 42911,La Vespière,4804,NOR,75,FR,49.01975,0.4125 43031,Langrune-sur-Mer,4804,NOR,75,FR,49.32346,-0.37346 43042,Lanquetot,4804,NOR,75,FR,49.58527,0.52637 43135,Le Bosc-Roger-en-Roumois,4804,NOR,75,FR,49.28333,0.93333 43199,Le Grand-Quevilly,4804,NOR,75,FR,49.40076,1.04582 43205,Le Havre,4804,NOR,75,FR,49.4938,0.10767 43207,Le Houlme,4804,NOR,75,FR,49.50972,1.03537 43220,Le Manoir,4804,NOR,75,FR,49.31355,1.20455 43226,Le Mesnil-Esnard,4804,NOR,75,FR,49.41319,1.14521 43234,Le Molay-Littry,4804,NOR,75,FR,49.24265,-0.87238 43241,Le Neubourg,4804,NOR,75,FR,49.15048,0.9102 43254,Le Petit-Quevilly,4804,NOR,75,FR,49.41338,1.06155 43308,Le Teilleul,4804,NOR,75,FR,48.53758,-0.87304 43310,Le Theil-Bocage,4804,NOR,75,FR,48.88333,-0.71667 43319,Le Thuit-Signol,4804,NOR,75,FR,49.26487,0.9391 43323,Le Trait,4804,NOR,75,FR,49.46895,0.81634 43324,Le Tréport,4804,NOR,75,FR,50.05979,1.37583 43328,Le Val-Saint-Père,4804,NOR,75,FR,48.66177,-1.37653 43329,Le Vaudreuil,4804,NOR,75,FR,49.25407,1.2096 43690,Léry,4804,NOR,75,FR,49.28585,1.20768 43362,Les Andelys,4804,NOR,75,FR,49.24557,1.41168 43368,Les Authieux-sur-le-Port-Saint-Ouen,4804,NOR,75,FR,49.341,1.13465 43392,Les Grandes-Ventes,4804,NOR,75,FR,49.78544,1.22921 43399,Les Loges,4804,NOR,75,FR,49.6986,0.28403 43400,Les Loges-Marchis,4804,NOR,75,FR,48.54132,-1.08754 43421,Les Pieux,4804,NOR,75,FR,49.51286,-1.80714 43442,Lessay,4804,NOR,75,FR,49.21703,-1.53089 43471,Lieurey,4804,NOR,75,FR,49.23019,0.49879 43486,Lillebonne,4804,NOR,75,FR,49.5203,0.53617 43497,Limésy,4804,NOR,75,FR,49.61271,0.92483 43505,Lion-sur-Mer,4804,NOR,75,FR,49.30018,-0.32157 43508,Lisieux,4804,NOR,75,FR,49.1466,0.22925 43514,Livarot,4804,NOR,75,FR,49.005,0.1502 43551,Londinières,4804,NOR,75,FR,49.83187,1.40232 43564,Longny-au-Perche,4804,NOR,75,FR,48.52984,0.75239 43614,Louviers,4804,NOR,75,FR,49.21667,1.16667 43615,Louvigny,4804,NOR,75,FR,49.15715,-0.39376 43630,Luc-sur-Mer,4804,NOR,75,FR,49.31452,-0.35499 43654,Luneray,4804,NOR,75,FR,49.82795,0.91581 43727,Magny-le-Désert,4804,NOR,75,FR,48.57015,-0.32732 43752,Malaunay,4804,NOR,75,FR,49.5271,1.04292 43771,Manche,4804,NOR,75,FR,49.03822,-1.31865 43789,Manéglise,4804,NOR,75,FR,49.56578,0.25572 43778,Manneville-sur-Risle,4804,NOR,75,FR,49.35173,0.54526 43798,Marcey-les-Grèves,4804,NOR,75,FR,48.69673,-1.39156 43807,Marcilly-sur-Eure,4804,NOR,75,FR,48.82568,1.34741 43840,Marigny,4804,NOR,75,FR,49.09952,-1.24179 43869,Maromme,4804,NOR,75,FR,49.47925,1.02375 43918,Martin-Église,4804,NOR,75,FR,49.90174,1.1412 43919,Martinvast,4804,NOR,75,FR,49.59608,-1.66434 43939,Mathieu,4804,NOR,75,FR,49.25448,-0.37188 43968,May-sur-Orne,4804,NOR,75,FR,49.10107,-0.37471 44465,Ménilles,4804,NOR,75,FR,49.03333,1.36667 44002,Menneval,4804,NOR,75,FR,49.1,0.61667 44025,Merville-Franceville-Plage,4804,NOR,75,FR,49.27218,-0.19616 44030,Mesnières-en-Bray,4804,NOR,75,FR,49.76172,1.38187 44033,Messei,4804,NOR,75,FR,48.71157,-0.53739 44136,Mondeville,4804,NOR,75,FR,49.17497,-0.32238 44156,Mont-Saint-Aignan,4804,NOR,75,FR,49.46307,1.09364 44185,Montaure,4804,NOR,75,FR,49.23417,1.08837 44215,Montebourg,4804,NOR,75,FR,49.48774,-1.38036 44256,Montigny,4804,NOR,75,FR,49.4596,1.00168 44265,Montivilliers,4804,NOR,75,FR,49.54518,0.18769 44280,Montmain,4804,NOR,75,FR,49.40996,1.23742 44282,Montmartin-sur-Mer,4804,NOR,75,FR,48.98861,-1.5253 44368,Mortagne-au-Perche,4804,NOR,75,FR,48.52018,0.54734 44372,Mortain,4804,NOR,75,FR,48.64782,-0.94055 44375,Mortrée,4804,NOR,75,FR,48.63899,0.07909 44385,Mouen,4804,NOR,75,FR,49.14696,-0.48366 44398,Moult,4804,NOR,75,FR,49.11494,-0.16472 44420,Moyaux,4804,NOR,75,FR,49.19511,0.35603 44517,Nassandres,4804,NOR,75,FR,49.12632,0.73597 44527,Neaufles-Saint-Martin,4804,NOR,75,FR,49.2765,1.72794 44542,Neufchâtel-en-Bray,4804,NOR,75,FR,49.73315,1.43956 44699,Néville,4804,NOR,75,FR,49.82472,0.70862 44623,Nointot,4804,NOR,75,FR,49.59822,0.47674 44638,Nonancourt,4804,NOR,75,FR,48.77086,1.19799 44642,Normanville,4804,NOR,75,FR,49.07868,1.15915 44650,Notre-Dame-de-Bondeville,4804,NOR,75,FR,49.48333,1.05 44651,Notre-Dame-de-Gravenchon,4804,NOR,75,FR,49.4894,0.57188 44712,Octeville,4804,NOR,75,FR,49.62612,-1.64349 44713,Octeville-sur-Mer,4804,NOR,75,FR,49.55496,0.1166 44720,Offranville,4804,NOR,75,FR,49.87208,1.04817 44728,Oissel,4804,NOR,75,FR,49.33309,1.09413 44754,Orbec,4804,NOR,75,FR,49.01667,0.41667 44770,Orival,4804,NOR,75,FR,49.72429,1.20512 44805,Ouistreham,4804,NOR,75,FR,49.27566,-0.2591 44810,Ourville-en-Caux,4804,NOR,75,FR,49.72854,0.6046 44824,Pacy-sur-Eure,4804,NOR,75,FR,49.01667,1.38333 44853,Parigny,4804,NOR,75,FR,48.5945,-1.07925 44874,Pavilly,4804,NOR,75,FR,49.56703,0.95445 44895,Percy,4804,NOR,75,FR,48.91714,-1.18916 45352,Périers,4804,NOR,75,FR,49.18667,-1.40762 44902,Perriers-sur-Andelle,4804,NOR,75,FR,49.41487,1.37098 44915,Petit-Couronne,4804,NOR,75,FR,49.38333,1.01667 44921,Petiville,4804,NOR,75,FR,49.46078,0.5874 44946,Picauville,4804,NOR,75,FR,49.3781,-1.40048 44979,Pirou,4804,NOR,75,FR,49.18089,-1.57384 44983,Pissy-Pôville,4804,NOR,75,FR,49.52986,0.99281 45368,Pîtres,4804,NOR,75,FR,49.31667,1.23333 45164,Pont-Audemer,4804,NOR,75,FR,49.35,0.51667 45177,Pont-dOuilly,4804,NOR,75,FR,48.8759,-0.40221 45194,Pont-Écrepin,4804,NOR,75,FR,48.76425,-0.24455 45167,Pont-Hébert,4804,NOR,75,FR,49.16714,-1.13428 45191,Pont-l’Évêque,4804,NOR,75,FR,49.28912,0.19161 45171,Pont-Saint-Pierre,4804,NOR,75,FR,49.33561,1.27601 45215,Pontorson,4804,NOR,75,FR,48.55316,-1.50754 45235,Port-en-Bessin-Huppain,4804,NOR,75,FR,49.3446,-0.75557 45238,Portbail,4804,NOR,75,FR,49.33571,-1.6956 45247,Poses,4804,NOR,75,FR,49.30539,1.24353 45248,Potigny,4804,NOR,75,FR,48.96925,-0.24166 45303,Préaux,4804,NOR,75,FR,49.49136,1.21583 45333,Putanges-Pont-Écrepin,4804,NOR,75,FR,48.76667,-0.25 45375,Querqueville,4804,NOR,75,FR,49.66251,-1.69119 45381,Quettehou,4804,NOR,75,FR,49.59308,-1.30352 45382,Quettreville-sur-Sienne,4804,NOR,75,FR,48.96802,-1.46782 45387,Quillebeuf-sur-Seine,4804,NOR,75,FR,49.46934,0.52793 45391,Quincampoix,4804,NOR,75,FR,49.5271,1.18849 45415,Radon,4804,NOR,75,FR,48.50246,0.10278 45417,Rai,4804,NOR,75,FR,48.75,0.58333 45431,Ranville,4804,NOR,75,FR,49.23071,-0.2556 45692,Rémalard,4804,NOR,75,FR,48.42867,0.77185 45696,Réville,4804,NOR,75,FR,49.61906,-1.25868 45557,Rogerville,4804,NOR,75,FR,49.50296,0.26516 45568,Rolleville,4804,NOR,75,FR,49.58232,0.21177 45571,Romagny,4804,NOR,75,FR,48.63931,-0.96605 45579,Romilly-sur-Andelle,4804,NOR,75,FR,49.3319,1.26127 45584,Roncherolles-sur-le-Vivier,4804,NOR,75,FR,49.46667,1.18333 45614,Rots,4804,NOR,75,FR,49.21235,-0.47319 45617,Rouen,4804,NOR,75,FR,49.44313,1.09932 45633,Roumare,4804,NOR,75,FR,49.51008,0.97422 45641,Routot,4804,NOR,75,FR,49.378,0.73346 45643,Rouxmesnil-Bouteilles,4804,NOR,75,FR,49.90633,1.07976 45666,Rugles,4804,NOR,75,FR,48.82212,0.70979 45714,Sahurs,4804,NOR,75,FR,49.35863,0.94256 45740,Saint-Amand,4804,NOR,75,FR,49.04338,-0.96491 45767,Saint-André-sur-Orne,4804,NOR,75,FR,49.11741,-0.38227 45776,Saint-Arnoult,4804,NOR,75,FR,49.52676,0.67117 45789,Saint-Aubin-lès-Elbeuf,4804,NOR,75,FR,49.3036,1.01056 45781,Saint-Aubin-Routot,4804,NOR,75,FR,49.52341,0.32602 45790,Saint-Aubin-sur-Gaillon,4804,NOR,75,FR,49.14701,1.32914 45791,Saint-Aubin-sur-Mer,4804,NOR,75,FR,49.32787,-0.38696 45792,Saint-Aubin-sur-Scie,4804,NOR,75,FR,49.87162,1.06823 45874,Saint-Contest,4804,NOR,75,FR,49.21401,-0.40221 45904,Saint-Denis-sur-Sarthon,4804,NOR,75,FR,48.4532,-0.0472 45920,Saint-Désir,4804,NOR,75,FR,49.14056,0.21398 46655,Saint-Étienne-du-Rouvray,4804,NOR,75,FR,49.37794,1.10467 45927,Saint-Eustache-la-Forêt,4804,NOR,75,FR,49.55137,0.45599 45950,Saint-Gatien-des-Bois,4804,NOR,75,FR,49.35,0.18333 45982,Saint-Georges-des-Groseillers,4804,NOR,75,FR,48.76993,-0.56768 46010,Saint-Germain-du-Corbéis,4804,NOR,75,FR,48.42215,0.06193 46016,Saint-Germain-la-Blanche-Herbe,4804,NOR,75,FR,49.18327,-0.40426 46020,Saint-Germain-sur-Avre,4804,NOR,75,FR,48.76466,1.26776 46001,Saint-Germain-Village,4804,NOR,75,FR,49.34908,0.50331 46063,Saint-Hilaire-du-Harcouët,4804,NOR,75,FR,48.577,-1.09004 46052,Saint-Hilaire-Petitville,4804,NOR,75,FR,49.3025,-1.21995 46076,Saint-Jacques-sur-Darnétal,4804,NOR,75,FR,49.4398,1.20359 46078,Saint-James,4804,NOR,75,FR,48.5218,-1.32629 46106,Saint-Jean-des-Baisants,4804,NOR,75,FR,49.09371,-0.97289 46107,Saint-Jean-des-Champs,4804,NOR,75,FR,48.828,-1.46487 46109,Saint-Jean-du-Cardonnay,4804,NOR,75,FR,49.50455,1.0114 46132,Saint-Jouin-Bruneval,4804,NOR,75,FR,49.64275,0.164 46153,Saint-Just,4804,NOR,75,FR,49.10852,1.44101 46175,Saint-Laurent-de-Brévedent,4804,NOR,75,FR,49.52564,0.25458 46213,Saint-Léger-du-Bourg-Denis,4804,NOR,75,FR,49.43345,1.15803 46222,Saint-Léonard,4804,NOR,75,FR,49.74252,0.35907 46225,Saint-Lô,4804,NOR,75,FR,49.11624,-1.09031 46237,Saint-Manvieu,4804,NOR,75,FR,49.18067,-0.50211 46238,Saint-Manvieu-Norrey,4804,NOR,75,FR,49.18139,-0.5 46241,Saint-Marcel,4804,NOR,75,FR,49.1,1.45 46269,Saint-Martin-de-Boscherville,4804,NOR,75,FR,49.44377,0.96271 46271,Saint-Martin-de-Fontenay,4804,NOR,75,FR,49.11523,-0.37391 46273,Saint-Martin-de-Landelles,4804,NOR,75,FR,48.5453,-1.1724 46282,Saint-Martin-des-Besaces,4804,NOR,75,FR,49.01091,-0.845 46283,Saint-Martin-des-Champs,4804,NOR,75,FR,48.66841,-1.33393 46288,Saint-Martin-du-Manoir,4804,NOR,75,FR,49.53213,0.23759 46293,Saint-Martin-du-Vivier,4804,NOR,75,FR,49.46667,1.16667 46297,Saint-Martin-en-Campagne,4804,NOR,75,FR,49.95648,1.22233 46265,Saint-Martin-Osmonville,4804,NOR,75,FR,49.63873,1.29952 46369,Saint-Nicolas-d’Aliermont,4804,NOR,75,FR,49.87857,1.22486 46367,Saint-Nicolas-de-la-Taille,4804,NOR,75,FR,49.51085,0.47405 46379,Saint-Ouen-de-Thouberville,4804,NOR,75,FR,49.35726,0.88848 46381,Saint-Ouen-du-Tilleul,4804,NOR,75,FR,49.29723,0.9476 46420,Saint-Paër,4804,NOR,75,FR,49.51452,0.87935 46387,Saint-Pair-sur-Mer,4804,NOR,75,FR,48.81455,-1.56761 46434,Saint-Pierre-de-Varengeville,4804,NOR,75,FR,49.5024,0.93118 46436,Saint-Pierre-des-Fleurs,4804,NOR,75,FR,49.25,0.96667 46442,Saint-Pierre-du-Regard,4804,NOR,75,FR,48.84286,-0.54631 46443,Saint-Pierre-du-Vauvray,4804,NOR,75,FR,49.23208,1.22125 46453,Saint-Pierre-Église,4804,NOR,75,FR,49.66848,-1.40358 46446,Saint-Pierre-en-Val,4804,NOR,75,FR,50.02168,1.44707 46450,Saint-Pierre-lès-Elbeuf,4804,NOR,75,FR,49.27901,1.04305 46452,Saint-Pierre-sur-Dives,4804,NOR,75,FR,49.01667,-0.03333 46454,Saint-Planchers,4804,NOR,75,FR,48.82269,-1.52598 46492,Saint-Quentin-sur-le-Homme,4804,NOR,75,FR,48.64751,-1.31806 46509,Saint-Rémy,4804,NOR,75,FR,48.94007,-0.50344 46500,Saint-Romain-de-Colbosc,4804,NOR,75,FR,49.53093,0.35719 46544,Saint-Saëns,4804,NOR,75,FR,49.67302,1.28525 46538,Saint-Sauveur-le-Vicomte,4804,NOR,75,FR,49.38547,-1.5331 46533,Saint-Sauveur-Lendelin,4804,NOR,75,FR,49.12988,-1.41405 46577,Saint-Sébastien-de-Morsent,4804,NOR,75,FR,49.01096,1.0873 46546,Saint-Senier-sous-Avranches,4804,NOR,75,FR,48.68399,-1.33126 46552,Saint-Sever-Calvados,4804,NOR,75,FR,48.84035,-1.04773 46570,Saint-Sulpice-sur-Risle,4804,NOR,75,FR,48.78063,0.65739 46571,Saint-Sylvain,4804,NOR,75,FR,49.05624,-0.21758 46595,Saint-Vaast-la-Hougue,4804,NOR,75,FR,49.58843,-1.26931 46596,Saint-Valery-en-Caux,4804,NOR,75,FR,49.86667,0.73333 46612,Saint-Vigor-le-Grand,4804,NOR,75,FR,49.28242,-0.68579 46625,Saint-Wandrille-Rançon,4804,NOR,75,FR,49.52658,0.76497 46660,Sainte-Adresse,4804,NOR,75,FR,49.5089,0.08446 46688,Sainte-Gauburge-Sainte-Colombe,4804,NOR,75,FR,48.71722,0.43126 46696,Sainte-Honorine-du-Fay,4804,NOR,75,FR,49.07775,-0.49295 46706,Sainte-Marguerite-sur-Duclair,4804,NOR,75,FR,49.50852,0.84362 46714,Sainte-Marie-des-Champs,4804,NOR,75,FR,49.6212,0.77904 46720,Sainte-Mère-Église,4804,NOR,75,FR,49.41,-1.31726 46789,Sannerville,4804,NOR,75,FR,49.18018,-0.22434 46821,Sartilly,4804,NOR,75,FR,48.75239,-1.45678 47133,Sées,4804,NOR,75,FR,48.60403,0.17244 46924,Seine-Maritime,4804,NOR,75,FR,49.67278,1.12519 46963,Serqueux,4804,NOR,75,FR,49.63202,1.54005 46964,Serquigny,4804,NOR,75,FR,49.10943,0.71016 47027,Soliers,4804,NOR,75,FR,49.1344,-0.29613 47053,Sottevast,4804,NOR,75,FR,49.52374,-1.59169 47054,Sotteville-lès-Rouen,4804,NOR,75,FR,49.40972,1.09005 47083,Sourdeval,4804,NOR,75,FR,48.72312,-0.92223 47122,Surtainville,4804,NOR,75,FR,49.45977,-1.81298 47169,Tancarville,4804,NOR,75,FR,49.4855,0.45765 47213,Tessé-la-Madeleine,4804,NOR,75,FR,48.54963,-0.42521 47212,Tessy-sur-Vire,4804,NOR,75,FR,48.97381,-1.06087 47218,Thaon,4804,NOR,75,FR,49.25796,-0.45605 47227,Thiberville,4804,NOR,75,FR,49.13768,0.45502 47263,Thury-Harcourt,4804,NOR,75,FR,48.98434,-0.47519 47283,Tillières-sur-Avre,4804,NOR,75,FR,48.75585,1.05388 47285,Tilly-sur-Seulles,4804,NOR,75,FR,49.17598,-0.62605 47288,Tinchebray,4804,NOR,75,FR,48.76437,-0.73333 47292,Tollevast,4804,NOR,75,FR,49.57437,-1.62746 47303,Torigni-sur-Vire,4804,NOR,75,FR,49.03702,-0.98214 47418,Tôtes,4804,NOR,75,FR,49.68091,1.04649 47317,Touques,4804,NOR,75,FR,49.34443,0.10218 47321,Tourlaville,4804,NOR,75,FR,49.63829,-1.56639 47330,Tourouvre,4804,NOR,75,FR,48.58951,0.65253 47336,Tourville-la-Rivière,4804,NOR,75,FR,49.32782,1.10551 47337,Tourville-sur-Arques,4804,NOR,75,FR,49.85926,1.10238 47338,Tourville-sur-Odon,4804,NOR,75,FR,49.14154,-0.50128 47341,Toutainville,4804,NOR,75,FR,49.36474,0.46538 47378,Troarn,4804,NOR,75,FR,49.17835,-0.18169 47383,Trouville-sur-Mer,4804,NOR,75,FR,49.3657,0.08041 47387,Trun,4804,NOR,75,FR,48.84268,0.03268 47416,Turretot,4804,NOR,75,FR,49.60923,0.23422 47435,Urville-Nacqueville,4804,NOR,75,FR,49.67444,-1.73664 47464,Val-de-Reuil,4804,NOR,75,FR,49.27385,1.21021 47483,Valframbert,4804,NOR,75,FR,48.46465,0.10828 47490,Valliquerville,4804,NOR,75,FR,49.61385,0.68703 47497,Valognes,4804,NOR,75,FR,49.50881,-1.47047 47509,Varengeville-sur-Mer,4804,NOR,75,FR,49.90475,0.99479 47526,Vassy,4804,NOR,75,FR,48.85381,-0.67485 47532,Vaudry,4804,NOR,75,FR,48.8413,-0.85309 47590,Ver-sur-Mer,4804,NOR,75,FR,49.32987,-0.53118 47613,Verneuil-sur-Avre,4804,NOR,75,FR,48.73949,0.92731 47619,Vernon,4804,NOR,75,FR,49.09292,1.46332 47633,Verson,4804,NOR,75,FR,49.15432,-0.45628 47730,Villedieu-les-Poêles,4804,NOR,75,FR,48.83333,-1.21667 47796,Villers-Bocage,4804,NOR,75,FR,49.0796,-0.65412 47810,Villers-Écalles,4804,NOR,75,FR,49.54136,0.91942 47809,Villers-sur-Mer,4804,NOR,75,FR,49.32264,0.00027 47840,Vimoutiers,4804,NOR,75,FR,48.92772,0.19835 47857,Vire,4804,NOR,75,FR,48.83849,-0.88929 48000,Yainville,4804,NOR,75,FR,49.45371,0.8292 48024,Yébleron,4804,NOR,75,FR,49.63333,0.53746 48005,Yerville,4804,NOR,75,FR,49.6672,0.89594 48008,Ymare,4804,NOR,75,FR,49.3506,1.17938 48010,Yport,4804,NOR,75,FR,49.73716,0.31537 48016,Yvetot,4804,NOR,75,FR,49.61744,0.75814 39248,Abzac,4795,NAQ,75,FR,45.01667,-0.13333 39258,Agen,4795,NAQ,75,FR,44.19991,0.62664 39263,Agonac,4795,NAQ,75,FR,45.29248,0.75025 39264,Ahetze,4795,NAQ,75,FR,43.40432,-1.57191 39266,Ahun,4795,NAQ,75,FR,46.08594,2.04479 39268,Aiffres,4795,NAQ,75,FR,46.29449,-0.42101 39271,Aigre,4795,NAQ,75,FR,45.89377,0.00963 39278,Aiguillon,4795,NAQ,75,FR,44.29893,0.3402 39289,Airvault,4795,NAQ,75,FR,46.82533,-0.13634 39296,Aixe-sur-Vienne,4795,NAQ,75,FR,45.79862,1.13884 39299,Ajain,4795,NAQ,75,FR,46.20635,1.9985 39321,Allassac,4795,NAQ,75,FR,45.2584,1.4755 39347,Ambarès-et-Lagrave,4795,NAQ,75,FR,44.91667,-0.48333 39348,Ambazac,4795,NAQ,75,FR,45.95983,1.40063 39359,Ambès,4795,NAQ,75,FR,45.01127,-0.53219 39368,Amou,4795,NAQ,75,FR,43.59257,-0.74676 39380,Andernos-les-Bains,4795,NAQ,75,FR,44.74572,-1.10355 39382,Andilly,4795,NAQ,75,FR,46.25425,-1.02672 39403,Anglet,4795,NAQ,75,FR,43.47664,-1.51346 39405,Angoulême,4795,NAQ,75,FR,45.65,0.15 39404,Angoulins,4795,NAQ,75,FR,46.10526,-1.10713 39407,Angresse,4795,NAQ,75,FR,43.65809,-1.37191 39418,Annesse-et-Beaulieu,4795,NAQ,75,FR,45.16416,0.57193 39434,Antonne-et-Trigonant,4795,NAQ,75,FR,45.21271,0.83006 39437,Antran,4795,NAQ,75,FR,46.8535,0.54317 39450,Arbonne,4795,NAQ,75,FR,43.43248,-1.55118 39453,Arbus,4795,NAQ,75,FR,43.33333,-0.5 39457,Arcachon,4795,NAQ,75,FR,44.65854,-1.16879 39458,Arcangues,4795,NAQ,75,FR,43.43124,-1.52237 39463,Archigny,4795,NAQ,75,FR,46.67411,0.65372 39468,Ardin,4795,NAQ,75,FR,46.47512,-0.55416 39539,Arès,4795,NAQ,75,FR,44.76667,-1.13333 39472,Arette,4795,NAQ,75,FR,43.1,-0.71667 39480,Argentat,4795,NAQ,75,FR,45.09325,1.93778 39482,Argenton-les-Vallées,4795,NAQ,75,FR,46.98333,-0.45 39498,Arnac-la-Poste,4795,NAQ,75,FR,46.26597,1.37375 39497,Arnac-Pompadour,4795,NAQ,75,FR,45.40975,1.36993 39513,Ars-en-Ré,4795,NAQ,75,FR,46.20555,-1.5272 39516,Arsac,4795,NAQ,75,FR,44.99688,-0.68976 39523,Arthez-de-Béarn,4795,NAQ,75,FR,43.46667,-0.6 39527,Artiguelouve,4795,NAQ,75,FR,43.31667,-0.46667 39528,Artigues-près-Bordeaux,4795,NAQ,75,FR,44.85,-0.51667 39529,Artix,4795,NAQ,75,FR,43.39667,-0.57256 39531,Arudy,4795,NAQ,75,FR,43.1064,-0.43333 39532,Arvert,4795,NAQ,75,FR,45.74486,-1.12573 39533,Arveyres,4795,NAQ,75,FR,44.88333,-0.28333 39540,Ascain,4795,NAQ,75,FR,43.34521,-1.62073 39542,Asnières-sur-Nouère,4795,NAQ,75,FR,45.71667,0.05 39552,Assat,4795,NAQ,75,FR,43.25,-0.3 39553,Asson,4795,NAQ,75,FR,43.15,-0.25 39555,Astaffort,4795,NAQ,75,FR,44.06426,0.65141 39565,Atur,4795,NAQ,75,FR,45.14086,0.74701 39576,Aubie-et-Espessas,4795,NAQ,75,FR,45.01869,-0.40297 39589,Aubusson,4795,NAQ,75,FR,45.95606,2.1676 39596,Audenge,4795,NAQ,75,FR,44.68686,-1.01345 39608,Aulnay,4795,NAQ,75,FR,46.02082,-0.34778 39649,Auzances,4795,NAQ,75,FR,46.02849,2.50042 39655,Availles-Limouzine,4795,NAQ,75,FR,46.12104,0.65558 39658,Avanton,4795,NAQ,75,FR,46.66369,0.30862 39662,Avensan,4795,NAQ,75,FR,45.03444,-0.75568 39687,Ayguemorte-les-Graves,4795,NAQ,75,FR,44.70988,-0.4806 39689,Ayron,4795,NAQ,75,FR,46.66026,0.07545 39691,Aytré,4795,NAQ,75,FR,46.1357,-1.11452 39692,Azay-le-Brûlé,4795,NAQ,75,FR,46.40011,-0.24914 39719,Baignes-Sainte-Radegonde,4795,NAQ,75,FR,45.38333,-0.23333 39757,Balzac,4795,NAQ,75,FR,45.7,0.11667 39769,Barbaste,4795,NAQ,75,FR,44.16905,0.28659 39774,Barbezieux-Saint-Hilaire,4795,NAQ,75,FR,45.47265,-0.15218 39780,Bardos,4795,NAQ,75,FR,43.47392,-1.20347 39792,Barsac,4795,NAQ,75,FR,44.60745,-0.31527 39801,Bassens,4795,NAQ,75,FR,44.90226,-0.51631 39802,Bassillac,4795,NAQ,75,FR,45.19305,0.81528 39803,Bassussarry,4795,NAQ,75,FR,43.44272,-1.51647 39824,Bayonne,4795,NAQ,75,FR,43.49257,-1.47624 39827,Bazas,4795,NAQ,75,FR,44.43202,-0.21327 39853,Beaulieu-sur-Dordogne,4795,NAQ,75,FR,44.97832,1.83834 39860,Beaumont,4795,NAQ,75,FR,46.73773,0.42961 39866,Beaumont-du-Périgord,4795,NAQ,75,FR,44.76662,0.76916 39877,Beaupuy,4795,NAQ,75,FR,44.53549,0.149 39887,Beautiran,4795,NAQ,75,FR,44.70393,-0.45202 39894,Beauvoir-sur-Niort,4795,NAQ,75,FR,46.18017,-0.47178 40416,Bégaar,4795,NAQ,75,FR,43.82363,-0.84904 40410,Bègles,4795,NAQ,75,FR,44.80845,-0.54809 39906,Belin-Béliet,4795,NAQ,75,FR,44.5,-0.78333 39907,Bellac,4795,NAQ,75,FR,46.12209,1.04931 39936,Belvès,4795,NAQ,75,FR,44.77632,1.00588 40427,Bénéjacq,4795,NAQ,75,FR,43.2,-0.21667 40423,Bénesse-Maremne,4795,NAQ,75,FR,43.63678,-1.35773 39942,Benquet,4795,NAQ,75,FR,43.82992,-0.50102 39945,Bergerac,4795,NAQ,75,FR,44.85118,0.482 39964,Berson,4795,NAQ,75,FR,45.10679,-0.58774 40429,Béruges,4795,NAQ,75,FR,46.56738,0.20741 39979,Bessines,4795,NAQ,75,FR,46.30207,-0.51294 39980,Bessines-sur-Gartempe,4795,NAQ,75,FR,46.10799,1.36865 39997,Beychac-et-Caillau,4795,NAQ,75,FR,44.87781,-0.40219 39998,Beynat,4795,NAQ,75,FR,45.12444,1.72323 40005,Biard,4795,NAQ,75,FR,46.57889,0.30812 40006,Biarritz,4795,NAQ,75,FR,43.48012,-1.55558 40008,Bias,4795,NAQ,75,FR,44.41655,0.66977 40009,Bidache,4795,NAQ,75,FR,43.48299,-1.14121 40010,Bidart,4795,NAQ,75,FR,43.4376,-1.59127 40015,Biganos,4795,NAQ,75,FR,44.64504,-0.97367 40017,Bignoux,4795,NAQ,75,FR,46.60008,0.46932 40025,Billère,4795,NAQ,75,FR,43.3,-0.4 40030,Biscarrosse,4795,NAQ,75,FR,44.39454,-1.16721 40038,Bizanos,4795,NAQ,75,FR,43.28333,-0.35 40055,Blanquefort,4795,NAQ,75,FR,44.91248,-0.63663 40062,Blaye,4795,NAQ,75,FR,45.12782,-0.6623 40244,Boé,4795,NAQ,75,FR,44.16007,0.62905 40079,Boeil-Bezing,4795,NAQ,75,FR,43.21667,-0.26667 40093,Boismé,4795,NAQ,75,FR,46.77393,-0.43476 40096,Boisseuil,4795,NAQ,75,FR,45.76977,1.33333 40108,Bon-Encontre,4795,NAQ,75,FR,44.18518,0.66759 40115,Bonnac-la-Côte,4795,NAQ,75,FR,45.94212,1.28417 40116,Bonnat,4795,NAQ,75,FR,46.33333,1.9 40121,Bonnes,4795,NAQ,75,FR,46.60386,0.59791 40122,Bonneuil-Matours,4795,NAQ,75,FR,46.68155,0.57063 40136,Bordeaux,4795,NAQ,75,FR,44.84044,-0.5805 40137,Bordes,4795,NAQ,75,FR,43.23333,-0.28333 40138,Bords,4795,NAQ,75,FR,45.89722,-0.79528 40143,Bort-les-Orgues,4795,NAQ,75,FR,45.3998,2.49579 40145,Bosdarros,4795,NAQ,75,FR,43.21667,-0.36667 40146,Bosmie-lAiguille,4795,NAQ,75,FR,45.75,1.2 40150,Boucau,4795,NAQ,75,FR,43.5277,-1.46556 40159,Bouillé-Loretz,4795,NAQ,75,FR,47.07911,-0.27178 40164,Boulazac,4795,NAQ,75,FR,45.11667,0.75 40167,Bouliac,4795,NAQ,75,FR,44.81724,-0.50248 40183,Bourcefranc-le-Chapus,4795,NAQ,75,FR,45.85,-1.15 40184,Bourg,4795,NAQ,75,FR,45.04062,-0.55893 40197,Bourganeuf,4795,NAQ,75,FR,45.95268,1.7552 40201,Bourgneuf,4795,NAQ,75,FR,46.16766,-1.02141 40216,Boussac,4795,NAQ,75,FR,46.34941,2.21474 40223,Boutiers-Saint-Trojan,4795,NAQ,75,FR,45.71667,-0.3 40240,Boyard-Ville,4795,NAQ,75,FR,45.96717,-1.24289 40255,Branne,4795,NAQ,75,FR,44.83333,-0.18333 40257,Brantôme,4795,NAQ,75,FR,45.36091,0.65398 40263,Braud-et-Saint-Louis,4795,NAQ,75,FR,45.24703,-0.62438 40265,Brax,4795,NAQ,75,FR,44.20277,0.55163 40278,Bressuire,4795,NAQ,75,FR,46.84012,-0.48851 40292,Breuil-Magné,4795,NAQ,75,FR,45.98478,-0.96 40295,Breuillet,4795,NAQ,75,FR,45.69143,-1.05175 40305,Brie,4795,NAQ,75,FR,45.73804,0.24107 40314,Brigueuil,4795,NAQ,75,FR,45.95337,0.86065 40322,Brioux-sur-Boutonne,4795,NAQ,75,FR,46.14171,-0.22182 40324,Briscous,4795,NAQ,75,FR,43.45958,-1.33353 40327,Brive-la-Gaillarde,4795,NAQ,75,FR,45.1589,1.53326 40340,Bruges,4795,NAQ,75,FR,44.87981,-0.61219 40376,Bugeat,4795,NAQ,75,FR,45.59809,1.92727 40387,Burie,4795,NAQ,75,FR,45.77273,-0.42289 40391,Buros,4795,NAQ,75,FR,43.35,-0.3 40395,Bussac-sur-Charente,4795,NAQ,75,FR,45.78333,-0.63333 40397,Bussière-Dunoise,4795,NAQ,75,FR,46.25898,1.76216 40398,Bussière-Galant,4795,NAQ,75,FR,45.62702,1.0364 40399,Bussière-Poitevine,4795,NAQ,75,FR,46.23543,0.9053 40403,Buxerolles,4795,NAQ,75,FR,46.61667,0.48333 40407,Buzet-sur-Baïse,4795,NAQ,75,FR,44.25811,0.29809 40440,Cabanac-et-Villagrains,4795,NAQ,75,FR,44.6,-0.55 40442,Cabariot,4795,NAQ,75,FR,45.92645,-0.85741 40451,Cadaujac,4795,NAQ,75,FR,44.75437,-0.53128 40455,Cadillac,4795,NAQ,75,FR,44.63631,-0.31702 40484,Cambes,4795,NAQ,75,FR,44.73179,-0.46261 40487,Camblanes-et-Meynac,4795,NAQ,75,FR,44.76551,-0.48653 40488,Cambo-les-Bains,4795,NAQ,75,FR,43.35851,-1.40105 40505,Cancon,4795,NAQ,75,FR,44.53543,0.6252 40523,Canéjan,4795,NAQ,75,FR,44.76667,-0.63333 40519,Cantenac,4795,NAQ,75,FR,45.02816,-0.65312 40525,Capbreton,4795,NAQ,75,FR,43.64216,-1.42816 40532,Captieux,4795,NAQ,75,FR,44.2924,-0.26196 40536,Carbon-Blanc,4795,NAQ,75,FR,44.89642,-0.50107 40538,Carcans,4795,NAQ,75,FR,45.07869,-1.04429 40546,Carignan-de-Bordeaux,4795,NAQ,75,FR,44.8,-0.48333 40563,Cars,4795,NAQ,75,FR,45.12917,-0.61952 40564,Carsac-Aillac,4795,NAQ,75,FR,44.83333,1.25 40570,Casseneuil,4795,NAQ,75,FR,44.4431,0.62095 40576,Castelculier,4795,NAQ,75,FR,44.17486,0.69142 40578,Casteljaloux,4795,NAQ,75,FR,44.31762,0.08605 40581,Castelmoron-sur-Lot,4795,NAQ,75,FR,44.3981,0.49572 40586,Castelnau-de-Médoc,4795,NAQ,75,FR,45.02934,-0.79828 40590,Castets,4795,NAQ,75,FR,43.88233,-1.14572 40591,Castets-en-Dorthe,4795,NAQ,75,FR,44.56146,-0.15226 40593,Castillon-la-Bataille,4795,NAQ,75,FR,44.85,-0.03333 40594,Castillonnès,4795,NAQ,75,FR,44.65215,0.59222 40596,Castres-Gironde,4795,NAQ,75,FR,44.69464,-0.44679 40621,Cavignac,4795,NAQ,75,FR,45.10083,-0.38976 40629,Cazères-sur-l’Adour,4795,NAQ,75,FR,43.76154,-0.31546 40632,Celle-Lévescault,4795,NAQ,75,FR,46.42406,0.1881 40633,Celles-sur-Belle,4795,NAQ,75,FR,46.26223,-0.21274 41391,Cénac,4795,NAQ,75,FR,44.78003,-0.45999 41392,Cénac-et-Saint-Julien,4795,NAQ,75,FR,44.79968,1.20535 40638,Cenon,4795,NAQ,75,FR,44.8559,-0.51839 40639,Cenon-sur-Vienne,4795,NAQ,75,FR,46.77426,0.53698 40641,Cercoux,4795,NAQ,75,FR,45.13333,-0.2 40649,Cerizay,4795,NAQ,75,FR,46.82154,-0.66726 41398,Cérons,4795,NAQ,75,FR,44.63572,-0.33351 40663,Cestas,4795,NAQ,75,FR,44.74345,-0.67905 41399,Cézac,4795,NAQ,75,FR,45.09019,-0.41963 40668,Chabanais,4795,NAQ,75,FR,45.87339,0.71763 40679,Chaillevette,4795,NAQ,75,FR,45.7303,-1.0581 40685,Chalais,4795,NAQ,75,FR,45.27338,0.0388 40935,Châlus,4795,NAQ,75,FR,45.6544,0.98011 40705,Chamberet,4795,NAQ,75,FR,45.58345,1.7198 40707,Chambon-sur-Voueize,4795,NAQ,75,FR,46.18938,2.42568 40708,Chamboulive,4795,NAQ,75,FR,45.43215,1.70441 40715,Chameyrat,4795,NAQ,75,FR,45.23407,1.69811 40720,Champagne-Mouton,4795,NAQ,75,FR,45.99078,0.41051 40729,Champcevinel,4795,NAQ,75,FR,45.2163,0.72796 40731,Champdeniers-Saint-Denis,4795,NAQ,75,FR,46.48333,-0.4 40747,Champniers,4795,NAQ,75,FR,45.71451,0.20436 40758,Chancelade,4795,NAQ,75,FR,45.20049,0.67261 40764,Chaniers,4795,NAQ,75,FR,45.71858,-0.55779 40787,Chaptelat,4795,NAQ,75,FR,45.90962,1.26018 40794,Charente,4795,NAQ,75,FR,45.70598,0.18162 40795,Charente-Maritime,4795,NAQ,75,FR,45.75556,-0.71314 40816,Charron,4795,NAQ,75,FR,46.29433,-1.10572 40817,Charroux,4795,NAQ,75,FR,46.1441,0.40354 40827,Chasseneuil-du-Poitou,4795,NAQ,75,FR,46.65112,0.37329 40828,Chasseneuil-sur-Bonnieure,4795,NAQ,75,FR,45.81667,0.45 40830,Chassors,4795,NAQ,75,FR,45.7,-0.21667 40950,Châteaubernard,4795,NAQ,75,FR,45.66667,-0.33333 40968,Châteauneuf-la-Forêt,4795,NAQ,75,FR,45.71436,1.6061 40971,Châteauneuf-sur-Charente,4795,NAQ,75,FR,45.6,-0.05 40976,Châteauponsac,4795,NAQ,75,FR,46.13536,1.27623 40984,Châtelaillon-Plage,4795,NAQ,75,FR,46.0719,-1.08926 40985,Châtellerault,4795,NAQ,75,FR,46.81712,0.54536 41006,Châtillon-sur-Thouet,4795,NAQ,75,FR,46.66176,-0.23489 40848,Chaunay,4795,NAQ,75,FR,46.20759,0.16084 40850,Chauray,4795,NAQ,75,FR,46.35997,-0.37859 40853,Chauvigny,4795,NAQ,75,FR,46.56747,0.64928 40864,Chazelles,4795,NAQ,75,FR,45.64713,0.36748 40867,Chef-Boutonne,4795,NAQ,75,FR,46.10859,-0.07083 41013,Chérac,4795,NAQ,75,FR,45.70456,-0.43859 41014,Chéraute,4795,NAQ,75,FR,43.23096,-0.86831 40883,Chermignac,4795,NAQ,75,FR,45.68578,-0.67349 40886,Cherves-Richemont,4795,NAQ,75,FR,45.74345,-0.35096 40887,Cherveux,4795,NAQ,75,FR,46.41543,-0.35706 40893,Chevanceaux,4795,NAQ,75,FR,45.3,-0.23333 40905,Chiché,4795,NAQ,75,FR,46.79643,-0.3556 41019,Ciboure,4795,NAQ,75,FR,43.38287,-1.676 41028,Ciré-d’Aunis,4795,NAQ,75,FR,46.05544,-0.93056 41029,Cissé,4795,NAQ,75,FR,46.64583,0.2287 41031,Civray,4795,NAQ,75,FR,46.1471,0.29509 41035,Clairac,4795,NAQ,75,FR,44.36011,0.37893 41072,Clérac,4795,NAQ,75,FR,45.18333,-0.21667 41076,Coarraze,4795,NAQ,75,FR,43.16667,-0.23333 41079,Cognac,4795,NAQ,75,FR,45.69583,-0.32916 41080,Cognac-la-Forêt,4795,NAQ,75,FR,45.83333,1.0 41087,Colayrac-Saint-Cirq,4795,NAQ,75,FR,44.22095,0.55061 41104,Colombiers,4795,NAQ,75,FR,46.77158,0.42388 41111,Combrand,4795,NAQ,75,FR,46.86405,-0.68869 41125,Compreignac,4795,NAQ,75,FR,45.99162,1.27561 41131,Condat-sur-Vienne,4795,NAQ,75,FR,45.78648,1.28454 41144,Confolens,4795,NAQ,75,FR,46.01363,0.67231 41178,Corme-Royal,4795,NAQ,75,FR,45.74395,-0.81471 41193,Cornil,4795,NAQ,75,FR,45.21062,1.69173 41202,Corrèze,4795,NAQ,75,FR,45.37244,1.87513 41207,Cosnac,4795,NAQ,75,FR,45.13423,1.58544 41225,Couhé,4795,NAQ,75,FR,46.29911,0.18174 41233,Coulombiers,4795,NAQ,75,FR,46.48324,0.18494 41236,Coulon,4795,NAQ,75,FR,46.32328,-0.58561 41237,Coulonges-sur-l’Autize,4795,NAQ,75,FR,46.48333,-0.59845 41238,Coulounieix-Chamiers,4795,NAQ,75,FR,45.15289,0.68852 41274,Courçon,4795,NAQ,75,FR,46.24389,-0.813 41252,Courlay,4795,NAQ,75,FR,46.77941,-0.56607 41261,Cours-de-Pile,4795,NAQ,75,FR,44.83608,0.54656 41264,Coursac,4795,NAQ,75,FR,45.12881,0.63919 41277,Coussac-Bonneval,4795,NAQ,75,FR,45.51199,1.32261 41283,Coutras,4795,NAQ,75,FR,45.03333,-0.13333 41286,Couzeix,4795,NAQ,75,FR,45.87047,1.23828 41290,Cozes,4795,NAQ,75,FR,45.58375,-0.83178 41348,Créon,4795,NAQ,75,FR,44.77457,-0.348 41311,Creuse,4795,NAQ,75,FR,46.07523,2.05476 41316,Creysse,4795,NAQ,75,FR,44.85474,0.56583 41354,Cublac,4795,NAQ,75,FR,45.14488,1.30609 41356,Cubzac-les-Ponts,4795,NAQ,75,FR,44.97119,-0.44976 41378,Cussac,4795,NAQ,75,FR,45.70666,0.85124 41379,Cussac-Fort-Médoc,4795,NAQ,75,FR,45.11667,-0.73333 41408,Damazan,4795,NAQ,75,FR,44.29068,0.27694 41426,Dangé-Saint-Romain,4795,NAQ,75,FR,46.93333,0.6 41443,Dax,4795,NAQ,75,FR,43.71032,-1.05366 41451,Denguin,4795,NAQ,75,FR,43.36667,-0.5 41624,Département de la Corrèze,4795,NAQ,75,FR,45.34754,1.87319 41636,Département des Deux-Sèvres,4795,NAQ,75,FR,46.53918,-0.30838 41638,Département des Pyrénées-Atlantiques,4795,NAQ,75,FR,43.23587,-0.81642 41642,Département du Lot-et-Garonne,4795,NAQ,75,FR,44.33333,0.5 41477,Dignac,4795,NAQ,75,FR,45.55,0.28333 41490,Dirac,4795,NAQ,75,FR,45.6,0.25 41492,Dissay,4795,NAQ,75,FR,46.70007,0.43311 41507,Dolus-dOléron,4795,NAQ,75,FR,45.91667,-1.26667 41520,Domme,4795,NAQ,75,FR,44.80218,1.21459 41523,Dompierre-sur-Mer,4795,NAQ,75,FR,46.18817,-1.06351 41535,Donzenac,4795,NAQ,75,FR,45.22731,1.524 41539,Dordogne,4795,NAQ,75,FR,45.12735,0.73504 41589,Dun-le-Palestel,4795,NAQ,75,FR,46.3,1.66667 41594,Duras,4795,NAQ,75,FR,44.67618,0.18247 48041,Échillais,4795,NAQ,75,FR,45.90072,-0.95211 48043,Échiré,4795,NAQ,75,FR,46.38748,-0.41511 48050,Écoyeux,4795,NAQ,75,FR,45.82231,-0.50539 48057,Égletons,4795,NAQ,75,FR,45.40637,2.04518 41715,Esnandes,4795,NAQ,75,FR,46.25033,-1.11566 41718,Espelette,4795,NAQ,75,FR,43.34015,-1.44737 41733,Estillac,4795,NAQ,75,FR,44.15766,0.56383 48091,Étagnac,4795,NAQ,75,FR,45.89506,0.77897 48099,Étaules,4795,NAQ,75,FR,45.73407,-1.09918 48100,Étauliers,4795,NAQ,75,FR,45.22582,-0.57243 48116,Évaux-les-Bains,4795,NAQ,75,FR,46.17346,2.48463 41747,Excideuil,4795,NAQ,75,FR,45.33635,1.04754 41748,Exideuil,4795,NAQ,75,FR,45.88639,0.67318 41750,Exireuil,4795,NAQ,75,FR,46.43382,-0.19251 41754,Eymet,4795,NAQ,75,FR,44.66812,0.39961 41755,Eymoutiers,4795,NAQ,75,FR,45.7379,1.74189 41757,Eysines,4795,NAQ,75,FR,44.88352,-0.64686 41758,Eyvigues-et-Eybènes,4795,NAQ,75,FR,44.93333,1.35 41774,Fargues-Saint-Hilaire,4795,NAQ,75,FR,44.82304,-0.44676 41796,Felletin,4795,NAQ,75,FR,45.88333,2.17431 41815,Feytiat,4795,NAQ,75,FR,45.80905,1.33033 41864,Fléac,4795,NAQ,75,FR,45.66667,0.1 41859,Floirac,4795,NAQ,75,FR,44.83238,-0.51411 41882,Fontaine-le-Comte,4795,NAQ,75,FR,46.53217,0.26176 41893,Fontcouverte,4795,NAQ,75,FR,45.76708,-0.58682 41915,Fors,4795,NAQ,75,FR,46.2357,-0.40904 41929,Foulayronnes,4795,NAQ,75,FR,44.24029,0.64516 41933,Fouras,4795,NAQ,75,FR,45.98736,-1.09275 41938,Fourques-sur-Garonne,4795,NAQ,75,FR,44.44798,0.15703 41972,Fronsac,4795,NAQ,75,FR,44.91667,-0.26667 41973,Frontenay-Rohan-Rohan,4795,NAQ,75,FR,46.25276,-0.53833 41992,Fumel,4795,NAQ,75,FR,44.49862,0.96506 42009,Gabarret,4795,NAQ,75,FR,43.98779,0.00978 42015,Gaillan-en-Médoc,4795,NAQ,75,FR,45.32133,-0.95794 42020,Galgon,4795,NAQ,75,FR,44.98333,-0.26667 42027,Gan,4795,NAQ,75,FR,43.23333,-0.38333 42033,Garat,4795,NAQ,75,FR,45.63333,0.26667 42038,Gardonne,4795,NAQ,75,FR,44.83333,0.35 42045,Garlin,4795,NAQ,75,FR,43.55927,-0.27321 42054,Gauriaguet,4795,NAQ,75,FR,45.03904,-0.39191 42060,Gelos,4795,NAQ,75,FR,43.28333,-0.36667 42294,Gémozac,4795,NAQ,75,FR,45.56896,-0.67574 42296,Génissac,4795,NAQ,75,FR,44.85,-0.25 42069,Gensac-la-Pallue,4795,NAQ,75,FR,45.65,-0.25 42071,Ger,4795,NAQ,75,FR,43.25,-0.05 42102,Gironde,4795,NAQ,75,FR,44.69306,-0.414 42103,Gironde-sur-Dropt,4795,NAQ,75,FR,44.58333,-0.08333 42124,Gond-Pontouvre,4795,NAQ,75,FR,45.68333,0.16667 42133,Gontaud-de-Nogaret,4795,NAQ,75,FR,44.45,0.3 42160,Gouzon,4795,NAQ,75,FR,46.19286,2.23876 42164,Gradignan,4795,NAQ,75,FR,44.77262,-0.61393 42196,Grenade-sur-l’Adour,4795,NAQ,75,FR,43.77753,-0.42961 42209,Grignols,4795,NAQ,75,FR,44.38842,-0.04287 42287,Guéret,4795,NAQ,75,FR,46.17234,1.87456 42289,Guéthary,4795,NAQ,75,FR,43.42285,-1.61073 42291,Guîtres,4795,NAQ,75,FR,45.03333,-0.18333 42272,Gujan-Mestras,4795,NAQ,75,FR,44.63333,-1.06667 42304,Habas,4795,NAQ,75,FR,43.5718,-0.92976 42308,Hagetmau,4795,NAQ,75,FR,43.65893,-0.59172 42333,Hasparren,4795,NAQ,75,FR,43.38377,-1.30499 42347,Haute-Vienne,4795,NAQ,75,FR,45.88341,1.21781 42348,Hautefort,4795,NAQ,75,FR,45.25953,1.14879 42367,Hendaye,4795,NAQ,75,FR,43.37172,-1.77382 42391,Heugas,4795,NAQ,75,FR,43.64334,-1.08143 42394,Hiersac,4795,NAQ,75,FR,45.66667,0.0 42399,Hinx,4795,NAQ,75,FR,43.7019,-0.92591 42432,Hourtin,4795,NAQ,75,FR,45.1857,-1.05719 42470,Idron,4795,NAQ,75,FR,43.28333,-0.31667 42475,Igon,4795,NAQ,75,FR,43.16667,-0.23333 42478,Illats,4795,NAQ,75,FR,44.59714,-0.37238 42501,Isle,4795,NAQ,75,FR,45.80272,1.21213 42512,Iteuil,4795,NAQ,75,FR,46.48808,0.31212 42515,Itxassou,4795,NAQ,75,FR,43.32893,-1.40617 42521,Izon,4795,NAQ,75,FR,44.92416,-0.36322 42533,Jarnac,4795,NAQ,75,FR,45.6816,-0.17329 42541,Jaunay-Clan,4795,NAQ,75,FR,46.68453,0.37128 42562,Jonzac,4795,NAQ,75,FR,45.44668,-0.4337 42585,Juillac,4795,NAQ,75,FR,45.31808,1.32257 42591,Jumilhac-le-Grand,4795,NAQ,75,FR,45.49432,1.06339 42594,Jurançon,4795,NAQ,75,FR,43.2883,-0.38694 42686,La Chapelle-Saint-Laurent,4795,NAQ,75,FR,46.74643,-0.47643 42714,La Coquille,4795,NAQ,75,FR,45.54201,0.97675 42715,La Couarde-sur-Mer,4795,NAQ,75,FR,46.19411,-1.42522 42717,La Couronne,4795,NAQ,75,FR,45.61128,0.09948 42718,La Courtine,4795,NAQ,75,FR,45.7,2.26667 42725,La Crèche,4795,NAQ,75,FR,46.36667,-0.3 42747,La Flotte,4795,NAQ,75,FR,46.18771,-1.32815 42749,La Force,4795,NAQ,75,FR,44.86902,0.37541 42752,La Forêt-sur-Sèvre,4795,NAQ,75,FR,46.76905,-0.64964 42784,La Jarne,4795,NAQ,75,FR,46.12773,-1.07259 42785,La Jarrie,4795,NAQ,75,FR,46.12879,-1.00896 42790,La Lande-de-Fronsac,4795,NAQ,75,FR,44.98036,-0.38048 42811,La Mothe-Saint-Héray,4795,NAQ,75,FR,46.35934,-0.11236 42830,La Peyratte,4795,NAQ,75,FR,46.67453,-0.14912 42869,La Réole,4795,NAQ,75,FR,44.58201,-0.03691 42851,La Roche-Chalais,4795,NAQ,75,FR,45.15,0.01667 42854,La Roche-Posay,4795,NAQ,75,FR,46.78654,0.81354 42860,La Rochefoucauld,4795,NAQ,75,FR,45.74048,0.38564 42861,La Rochelle,4795,NAQ,75,FR,46.16667,-1.15 42875,La Sauve,4795,NAQ,75,FR,44.76667,-0.31667 42879,La Souterraine,4795,NAQ,75,FR,46.23714,1.48701 42887,La Teste-de-Buch,4795,NAQ,75,FR,44.62875,-1.14059 42897,La Tremblade,4795,NAQ,75,FR,45.76806,-1.14265 42915,La Villedieu-du-Clain,4795,NAQ,75,FR,46.45559,0.36917 42930,Labatut,4795,NAQ,75,FR,43.55,-0.98333 42931,Labenne,4795,NAQ,75,FR,43.59464,-1.42559 42935,Labouheyre,4795,NAQ,75,FR,44.21297,-0.92062 42941,Lacanau,4795,NAQ,75,FR,44.97779,-1.07621 42950,Ladignac-le-Long,4795,NAQ,75,FR,45.58256,1.11359 42960,Lagor,4795,NAQ,75,FR,43.38333,-0.65 42961,Lagorce,4795,NAQ,75,FR,45.06667,-0.13333 42962,Lagord,4795,NAQ,75,FR,46.18822,-1.15355 42964,Laguenne,4795,NAQ,75,FR,45.24218,1.78135 42966,Lahonce,4795,NAQ,75,FR,43.48248,-1.39101 42975,Lalinde,4795,NAQ,75,FR,44.83621,0.73075 42983,Lamarque,4795,NAQ,75,FR,45.09536,-0.71892 42989,Lamonzie-Saint-Martin,4795,NAQ,75,FR,44.84713,0.39102 42991,Lamothe-Montravel,4795,NAQ,75,FR,44.85,0.03333 43005,Landes,4795,NAQ,75,FR,43.97543,-0.74241 43006,Landiras,4795,NAQ,75,FR,44.56702,-0.41536 43026,Langoiran,4795,NAQ,75,FR,44.70869,-0.39368 43028,Langon,4795,NAQ,75,FR,44.5531,-0.24951 43040,Lanouaille,4795,NAQ,75,FR,45.39517,1.13968 43049,Lanton,4795,NAQ,75,FR,44.70478,-1.03562 43061,Laplume,4795,NAQ,75,FR,44.11292,0.52975 43068,Larche,4795,NAQ,75,FR,45.12048,1.41566 43076,Laroque-Timbaut,4795,NAQ,75,FR,44.28238,0.76274 43079,Larressore,4795,NAQ,75,FR,43.36792,-1.43976 43081,Laruns,4795,NAQ,75,FR,42.98826,-0.42658 43082,Laruscade,4795,NAQ,75,FR,45.11667,-0.33333 43086,Lasseube,4795,NAQ,75,FR,43.23333,-0.48333 43089,Lathus-Saint-Rémy,4795,NAQ,75,FR,46.33333,0.96667 43090,Latillé,4795,NAQ,75,FR,46.61818,0.0763 43092,Latresne,4795,NAQ,75,FR,44.78601,-0.48994 43111,Lavardac,4795,NAQ,75,FR,44.17785,0.29825 43119,Lavoux,4795,NAQ,75,FR,46.59566,0.53012 43123,Layrac,4795,NAQ,75,FR,44.13449,0.66176 43127,Le Barp,4795,NAQ,75,FR,44.60833,-0.76948 43132,Le Bois-Plage-en-Ré,4795,NAQ,75,FR,46.18659,-1.39267 43141,Le Bouscat,4795,NAQ,75,FR,44.866,-0.59411 43148,Le Bugue,4795,NAQ,75,FR,44.91847,0.92714 43149,Le Buisson-de-Cadouin,4795,NAQ,75,FR,44.85,0.91667 43180,Le Dorat,4795,NAQ,75,FR,46.21514,1.08153 43188,Le Fleix,4795,NAQ,75,FR,44.86667,0.25 43195,Le Grand-Bourg,4795,NAQ,75,FR,46.16018,1.64465 43201,Le Gua,4795,NAQ,75,FR,45.72614,-0.94468 43204,Le Haillan,4795,NAQ,75,FR,44.87225,-0.67965 43211,Le Lardin-Saint-Lazare,4795,NAQ,75,FR,45.13333,1.21667 43222,Le Mas-d’Agenais,4795,NAQ,75,FR,44.41033,0.21869 43244,Le Palais-sur-Vienne,4795,NAQ,75,FR,45.8638,1.32207 43246,Le Passage,4795,NAQ,75,FR,44.20143,0.60275 43256,Le Pian-Médoc,4795,NAQ,75,FR,44.95537,-0.66227 43259,Le Pin,4795,NAQ,75,FR,46.86179,-0.6544 43261,Le Pizou,4795,NAQ,75,FR,45.01667,0.06667 43276,Le Porge,4795,NAQ,75,FR,44.87277,-1.08889 43304,Le Taillan-Médoc,4795,NAQ,75,FR,44.90521,-0.6706 43305,Le Tallud,4795,NAQ,75,FR,46.62911,-0.29979 43306,Le Teich,4795,NAQ,75,FR,44.63177,-1.02155 43318,Le Thou,4795,NAQ,75,FR,46.08333,-0.91667 43330,Le Verdon-sur-Mer,4795,NAQ,75,FR,45.5449,-1.06225 43335,Le Vigen,4795,NAQ,75,FR,45.75149,1.28865 43340,Ledeuix,4795,NAQ,75,FR,43.21667,-0.61667 43347,Lembras,4795,NAQ,75,FR,44.88431,0.52657 43349,Lencloître,4795,NAQ,75,FR,46.81622,0.32827 43687,Léognan,4795,NAQ,75,FR,44.73548,-0.59738 43688,Léon,4795,NAQ,75,FR,43.87676,-1.30057 43366,Les Artigues-de-Lussac,4795,NAQ,75,FR,44.96667,-0.15 43435,Les Églisottes-et-Chalaures,4795,NAQ,75,FR,45.09811,-0.03893 43391,Les Gonds,4795,NAQ,75,FR,45.71437,-0.61408 43408,Les Mathes,4795,NAQ,75,FR,45.7139,-1.15497 43417,Les Ormes,4795,NAQ,75,FR,46.97478,0.60484 43419,Les Peintures,4795,NAQ,75,FR,45.06667,-0.1 43436,Lescar,4795,NAQ,75,FR,43.33333,-0.41667 43438,Lesparre-Médoc,4795,NAQ,75,FR,45.30719,-0.93764 43443,Lestelle-Bétharram,4795,NAQ,75,FR,43.13333,-0.21667 43459,Lezay,4795,NAQ,75,FR,46.26437,-0.00925 43465,Libourne,4795,NAQ,75,FR,44.9153,-0.24394 43484,Ligugé,4795,NAQ,75,FR,46.52035,0.32617 43493,Limoges,4795,NAQ,75,FR,45.83153,1.25781 43498,Linards,4795,NAQ,75,FR,45.70083,1.53259 43499,Linars,4795,NAQ,75,FR,45.65,0.08333 43504,Linxe,4795,NAQ,75,FR,43.91984,-1.24619 43512,Listrac-Médoc,4795,NAQ,75,FR,45.0741,-0.79132 43513,Lit-et-Mixe,4795,NAQ,75,FR,44.03308,-1.2533 43576,Lons,4795,NAQ,75,FR,43.31667,-0.4 43592,Lormont,4795,NAQ,75,FR,44.87495,-0.51782 43600,Loubert,4795,NAQ,75,FR,45.91422,0.58617 43601,Loudun,4795,NAQ,75,FR,47.00788,0.08296 43604,Loupiac,4795,NAQ,75,FR,44.61667,-0.3 43613,Louvie-Juzon,4795,NAQ,75,FR,43.08646,-0.41928 43620,Louzy,4795,NAQ,75,FR,47.01201,-0.18537 43628,Lubersac,4795,NAQ,75,FR,45.44474,1.40457 43637,Lucq-de-Béarn,4795,NAQ,75,FR,43.3,-0.66667 43640,Ludon-Médoc,4795,NAQ,75,FR,44.98118,-0.60254 43642,Lugon-et-lÎle-du-Carnay,4795,NAQ,75,FR,44.95556,-0.33611 43661,Lusignan,4795,NAQ,75,FR,46.43598,0.1262 43664,Lussac,4795,NAQ,75,FR,44.95,-0.1 43665,Lussac-les-Châteaux,4795,NAQ,75,FR,46.40327,0.72524 43711,Macau,4795,NAQ,75,FR,45.00679,-0.61821 43719,Magescq,4795,NAQ,75,FR,43.78205,-1.21652 43721,Magnac-Laval,4795,NAQ,75,FR,46.21514,1.16724 43722,Magnac-sur-Touvre,4795,NAQ,75,FR,45.66667,0.23333 43730,Magné,4795,NAQ,75,FR,46.31548,-0.54575 43755,Malemort-sur-Corrèze,4795,NAQ,75,FR,45.17075,1.56393 43781,Mansac,4795,NAQ,75,FR,45.16839,1.38342 43783,Mansle,4795,NAQ,75,FR,45.87526,0.17914 43791,Marans,4795,NAQ,75,FR,46.30811,-0.9945 43796,Marcamps,4795,NAQ,75,FR,45.04045,-0.49275 43799,Marcheprime,4795,NAQ,75,FR,44.69146,-0.85496 43803,Marcillac,4795,NAQ,75,FR,45.2687,-0.52379 43823,Marennes,4795,NAQ,75,FR,45.8228,-1.10546 43825,Mareuil,4795,NAQ,75,FR,45.45,0.45 43832,Margaux,4795,NAQ,75,FR,45.04012,-0.67892 43841,Marigny-Brizay,4795,NAQ,75,FR,46.74622,0.37626 43859,Marmande,4795,NAQ,75,FR,44.50012,0.16526 43907,Marsilly,4795,NAQ,75,FR,46.23027,-1.1384 43911,Martignas-sur-Jalle,4795,NAQ,75,FR,44.84528,-0.7806 43917,Martillac,4795,NAQ,75,FR,44.711,-0.53747 43937,Matha,4795,NAQ,75,FR,45.86823,-0.31849 43949,Mauléon-Licharre,4795,NAQ,75,FR,43.22684,-0.88038 43964,Mauzé-sur-le-Mignon,4795,NAQ,75,FR,46.19516,-0.67032 43963,Mauzé-Thouarsais,4795,NAQ,75,FR,46.97611,-0.27846 43979,Mazères-Lezons,4795,NAQ,75,FR,43.26667,-0.35 44458,Médis,4795,NAQ,75,FR,45.64337,-0.96298 44460,Mées,4795,NAQ,75,FR,43.70452,-1.10952 43986,Meilhan,4795,NAQ,75,FR,43.86436,-0.70587 43987,Meilhan-sur-Garonne,4795,NAQ,75,FR,44.52131,0.03472 43995,Melle,4795,NAQ,75,FR,46.22285,-0.14216 44463,Ménesplet,4795,NAQ,75,FR,45.01667,0.11667 44005,Mensignac,4795,NAQ,75,FR,45.22505,0.56214 44473,Mérignac,4795,NAQ,75,FR,44.83248,-0.63381 44027,Meschers-sur-Gironde,4795,NAQ,75,FR,45.56037,-0.9547 44049,Meursac,4795,NAQ,75,FR,45.6489,-0.80801 44057,Meymac,4795,NAQ,75,FR,45.53583,2.14699 44062,Meyssac,4795,NAQ,75,FR,45.05547,1.67412 44486,Mézin,4795,NAQ,75,FR,44.05668,0.25874 44069,Mignaloux-Beauvoir,4795,NAQ,75,FR,46.54157,0.41538 44070,Migné-Auxances,4795,NAQ,75,FR,46.62745,0.31458 44078,Mimbaste,4795,NAQ,75,FR,43.64887,-0.97383 44080,Mimizan,4795,NAQ,75,FR,44.20057,-1.22886 44085,Mios,4795,NAQ,75,FR,44.60489,-0.93329 44088,Mirambeau,4795,NAQ,75,FR,45.3731,-0.57067 44089,Miramont-de-Guyenne,4795,NAQ,75,FR,44.60157,0.36247 44092,Mirebeau,4795,NAQ,75,FR,46.78743,0.18341 44097,Mirepeix,4795,NAQ,75,FR,43.18333,-0.25 44128,Monbazillac,4795,NAQ,75,FR,44.79374,0.49256 44132,Moncontour,4795,NAQ,75,FR,46.88086,-0.01996 44133,Moncoutant,4795,NAQ,75,FR,46.72547,-0.58797 44140,Monein,4795,NAQ,75,FR,43.33333,-0.58333 44142,Monflanquin,4795,NAQ,75,FR,44.52966,0.76772 44152,Monségur,4795,NAQ,75,FR,44.6504,0.08047 44150,Monsempron-Libos,4795,NAQ,75,FR,44.49004,0.9409 44153,Mont,4795,NAQ,75,FR,43.43333,-0.65 44161,Mont-de-Marsan,4795,NAQ,75,FR,43.89022,-0.49713 44167,Montagne,4795,NAQ,75,FR,44.93333,-0.13333 44174,Montamisé,4795,NAQ,75,FR,46.62181,0.42442 44177,Montardon,4795,NAQ,75,FR,43.36667,-0.35 44187,Montaut,4795,NAQ,75,FR,43.13333,-0.2 44189,Montayral,4795,NAQ,75,FR,44.47513,0.98769 44202,Montbron,4795,NAQ,75,FR,45.66667,0.5 44205,Montcaret,4795,NAQ,75,FR,44.85,0.06667 44219,Montendre,4795,NAQ,75,FR,45.28469,-0.40627 44240,Montfort-en-Chalosse,4795,NAQ,75,FR,43.71124,-0.83947 44249,Montguyon,4795,NAQ,75,FR,45.21667,-0.18333 44255,Montignac,4795,NAQ,75,FR,45.06429,1.16196 44272,Montlieu-la-Garde,4795,NAQ,75,FR,45.25,-0.25 44286,Montmoreau-Saint-Cybard,4795,NAQ,75,FR,45.4,0.13333 44288,Montmorillon,4795,NAQ,75,FR,46.42614,0.8707 44301,Montpon-Ménestérol,4795,NAQ,75,FR,45.0,0.16667 44306,Montrem,4795,NAQ,75,FR,45.13417,0.59029 44331,Montussan,4795,NAQ,75,FR,44.88057,-0.42181 44346,Morcenx,4795,NAQ,75,FR,44.03536,-0.91375 44356,Morlaas,4795,NAQ,75,FR,43.35,-0.26667 44360,Mornac,4795,NAQ,75,FR,45.68333,0.26667 44370,Mortagne-sur-Gironde,4795,NAQ,75,FR,45.48139,-0.78702 44387,Mougon,4795,NAQ,75,FR,46.29561,-0.28659 44388,Mouguerre,4795,NAQ,75,FR,43.46795,-1.41824 44392,Mouleydier,4795,NAQ,75,FR,44.85572,0.59759 44393,Mouliets-et-Villemartin,4795,NAQ,75,FR,44.83333,-0.01667 44397,Moulis-en-Médoc,4795,NAQ,75,FR,45.05938,-0.77033 44399,Mourenx,4795,NAQ,75,FR,43.38333,-0.6 44411,Mouthiers-sur-Boëme,4795,NAQ,75,FR,45.55,0.11667 44430,Mugron,4795,NAQ,75,FR,43.74952,-0.75179 44441,Muron,4795,NAQ,75,FR,46.03444,-0.82867 44445,Mussidan,4795,NAQ,75,FR,45.03542,0.3629 44497,Naintré,4795,NAQ,75,FR,46.76354,0.48683 44507,Nanteuil,4795,NAQ,75,FR,46.41172,-0.17461 44508,Nanteuil-en-Vallée,4795,NAQ,75,FR,46.00089,0.32206 44511,Nantiat,4795,NAQ,75,FR,46.0091,1.17308 44516,Narrosse,4795,NAQ,75,FR,43.70381,-1.00742 44520,Navailles-Angos,4795,NAQ,75,FR,43.41667,-0.33333 44521,Navarrenx,4795,NAQ,75,FR,43.32135,-0.75927 44524,Naves,4795,NAQ,75,FR,45.31395,1.76708 44525,Nay,4795,NAQ,75,FR,43.18333,-0.26667 44694,Nérac,4795,NAQ,75,FR,44.13613,0.33934 44530,Nercillac,4795,NAQ,75,FR,45.71667,-0.25 44531,Nersac,4795,NAQ,75,FR,45.63333,0.05 44561,Neuvic,4795,NAQ,75,FR,45.10033,0.46901 44562,Neuvic-Entier,4795,NAQ,75,FR,45.72206,1.61303 44566,Neuville-de-Poitou,4795,NAQ,75,FR,46.68333,0.25 44585,Nexon,4795,NAQ,75,FR,45.67962,1.18555 44595,Nieul,4795,NAQ,75,FR,45.92668,1.17494 44597,Nieul-lès-Saintes,4795,NAQ,75,FR,45.76021,-0.73137 44598,Nieul-sur-Mer,4795,NAQ,75,FR,46.20583,-1.16449 44601,Niort,4795,NAQ,75,FR,46.32313,-0.45877 44606,Noaillan,4795,NAQ,75,FR,44.48057,-0.3664 44639,Nontron,4795,NAQ,75,FR,45.5295,0.66179 44655,Notre-Dame-de-Sanilhac,4795,NAQ,75,FR,45.12121,0.71157 44657,Nouaillé-Maupertuis,4795,NAQ,75,FR,46.51113,0.41667 44659,Nousty,4795,NAQ,75,FR,43.26667,-0.21667 44685,Nueil-les-Aubiers,4795,NAQ,75,FR,46.93333,-0.58333 44711,Objat,4795,NAQ,75,FR,45.26302,1.40826 44717,Oeyreluy,4795,NAQ,75,FR,43.66876,-1.08276 44721,Ogeu-les-Bains,4795,NAQ,75,FR,43.15,-0.5 44739,Oloron-Sainte-Marie,4795,NAQ,75,FR,43.19441,-0.61069 44742,Ondres,4795,NAQ,75,FR,43.56461,-1.44449 44743,Onesse-Laharie,4795,NAQ,75,FR,44.06146,-1.06984 44750,Oradour-sur-Glane,4795,NAQ,75,FR,45.93405,1.0317 44751,Oradour-sur-Vayres,4795,NAQ,75,FR,45.73286,0.86457 44786,Orthez,4795,NAQ,75,FR,43.48839,-0.77244 44811,Ousse,4795,NAQ,75,FR,43.28333,-0.26667 44827,Paillet,4795,NAQ,75,FR,44.68512,-0.365 44839,Pamproux,4795,NAQ,75,FR,46.39578,-0.05327 44840,Panazol,4795,NAQ,75,FR,45.83465,1.32759 44850,Parempuyre,4795,NAQ,75,FR,44.95038,-0.60453 44851,Parentis-en-Born,4795,NAQ,75,FR,44.35274,-1.07095 44859,Parthenay,4795,NAQ,75,FR,46.64872,-0.24682 44867,Pau,4795,NAQ,75,FR,43.3,-0.36667 44868,Pauillac,4795,NAQ,75,FR,45.19644,-0.74873 44877,Payzac,4795,NAQ,75,FR,45.4,1.21667 44886,Pellegrue,4795,NAQ,75,FR,44.74355,0.07595 45353,Pérignac,4795,NAQ,75,FR,45.62306,-0.46488 45357,Périgny,4795,NAQ,75,FR,46.15519,-1.09822 45359,Périgueux,4795,NAQ,75,FR,45.18333,0.71667 44914,Pessac,4795,NAQ,75,FR,44.81011,-0.64129 44922,Peujard,4795,NAQ,75,FR,45.03619,-0.44096 44926,Peyrat-de-Bellac,4795,NAQ,75,FR,46.14087,1.03661 44927,Peyrat-le-Château,4795,NAQ,75,FR,45.81578,1.77233 44928,Peyrehorade,4795,NAQ,75,FR,43.54886,-1.11574 44932,Peyrilhac,4795,NAQ,75,FR,45.95043,1.13503 44986,Piégut-Pluviers,4795,NAQ,75,FR,45.62297,0.69013 44949,Pierre-Buffière,4795,NAQ,75,FR,45.69193,1.36193 44981,Pissos,4795,NAQ,75,FR,44.30833,-0.77963 45020,Pleumartin,4795,NAQ,75,FR,46.73786,0.769 45132,Podensac,4795,NAQ,75,FR,44.65038,-0.35508 45133,Poey-de-Lescar,4795,NAQ,75,FR,43.35,-0.46667 45138,Poitiers,4795,NAQ,75,FR,46.58333,0.33333 45147,Pomarez,4795,NAQ,75,FR,43.62971,-0.82934 45153,Pompaire,4795,NAQ,75,FR,46.60727,-0.23237 45156,Pompignac,4795,NAQ,75,FR,44.85114,-0.43705 45162,Pons,4795,NAQ,75,FR,45.57988,-0.54783 45185,Pont-du-Casse,4795,NAQ,75,FR,44.22867,0.67924 45190,Pont-l’Abbé-d’Arnoult,4795,NAQ,75,FR,45.82875,-0.87499 45199,Pontacq,4795,NAQ,75,FR,43.18333,-0.11667 45208,Pontenx-les-Forges,4795,NAQ,75,FR,44.24134,-1.12095 45214,Pontonx-sur-lAdour,4795,NAQ,75,FR,43.78783,-0.92508 45234,Port-des-Barques,4795,NAQ,75,FR,45.94763,-1.07795 45231,Port-Sainte-Foy-et-Ponchapt,4795,NAQ,75,FR,44.83333,0.2 45232,Port-Sainte-Marie,4795,NAQ,75,FR,44.25158,0.39134 45242,Portets,4795,NAQ,75,FR,44.69679,-0.42452 45252,Pouillon,4795,NAQ,75,FR,43.6048,-0.99947 45276,Prahecq,4795,NAQ,75,FR,46.25897,-0.34425 45304,Préchac,4795,NAQ,75,FR,44.39883,-0.35387 45281,Preignac,4795,NAQ,75,FR,44.58438,-0.29423 45286,Prigonrieux,4795,NAQ,75,FR,44.85451,0.40275 45317,Pugnac,4795,NAQ,75,FR,45.0819,-0.49618 45319,Puilboreau,4795,NAQ,75,FR,46.1862,-1.11797 45326,Pujols,4795,NAQ,75,FR,44.39424,0.6881 45340,Puymoyen,4795,NAQ,75,FR,45.61667,0.18333 45341,Puyoô,4795,NAQ,75,FR,43.52502,-0.91283 45398,Quinsac,4795,NAQ,75,FR,44.75535,-0.48697 45433,Rauzan,4795,NAQ,75,FR,44.77838,-0.12465 45436,Razac-sur-l’Isle,4795,NAQ,75,FR,45.16332,0.60085 45437,Razès,4795,NAQ,75,FR,46.03219,1.33676 45446,Reignac,4795,NAQ,75,FR,45.23393,-0.50627 45492,Ribérac,4795,NAQ,75,FR,45.25,0.33333 45511,Rilhac-Rancon,4795,NAQ,75,FR,45.9,1.31667 45518,Rion-des-Landes,4795,NAQ,75,FR,43.93449,-0.92388 45519,Rions,4795,NAQ,75,FR,44.66378,-0.35113 45527,Rivedoux-Plage,4795,NAQ,75,FR,46.15854,-1.27093 45532,Rivière-Saas-et-Gourby,4795,NAQ,75,FR,43.6799,-1.14986 45533,Rivières,4795,NAQ,75,FR,45.75295,0.36128 45542,Rochechouart,4795,NAQ,75,FR,45.8229,0.8208 45544,Rochefort,4795,NAQ,75,FR,45.94204,-0.96696 45549,Roches-Prémarie-Andillé,4795,NAQ,75,FR,46.48251,0.37106 45592,Roquefort,4795,NAQ,75,FR,44.035,-0.32323 45621,Rouffignac-Saint-Cernin-de-Reilhac,4795,NAQ,75,FR,45.05,0.96667 45627,Rouillac,4795,NAQ,75,FR,45.77582,-0.0638 45629,Rouillé,4795,NAQ,75,FR,46.42024,0.04073 45632,Roullet-Saint-Estèphe,4795,NAQ,75,FR,45.58333,0.05 45634,Roumazières-Loubert,4795,NAQ,75,FR,45.8869,0.58125 45645,Royan,4795,NAQ,75,FR,45.62846,-1.0281 45662,Ruelle-sur-Touvre,4795,NAQ,75,FR,45.68333,0.23333 45663,Ruffec,4795,NAQ,75,FR,46.02877,0.19821 45700,Sablonceaux,4795,NAQ,75,FR,45.70963,-0.88806 45701,Sablons,4795,NAQ,75,FR,45.03333,-0.18333 45705,Sabres,4795,NAQ,75,FR,44.14896,-0.74123 45710,Sadirac,4795,NAQ,75,FR,44.78179,-0.41334 45729,Saint-Agnant,4795,NAQ,75,FR,45.87354,-0.96119 45730,Saint-Agnant-de-Versillat,4795,NAQ,75,FR,46.278,1.50962 45733,Saint-Aigulin,4795,NAQ,75,FR,45.15735,-0.00863 45745,Saint-Amand-sur-Sèvre,4795,NAQ,75,FR,46.86905,-0.79441 45749,Saint-Amant-de-Boixe,4795,NAQ,75,FR,45.7979,0.13524 45759,Saint-André-de-Seignanx,4795,NAQ,75,FR,43.558,-1.35183 45771,Saint-Antoine-de-Breuilh,4795,NAQ,75,FR,44.83333,0.16667 45778,Saint-Astier,4795,NAQ,75,FR,45.14582,0.52898 45782,Saint-Aubin-de-Médoc,4795,NAQ,75,FR,44.9118,-0.7246 45788,Saint-Aubin-le-Cloud,4795,NAQ,75,FR,46.65308,-0.35258 45794,Saint-Aulaye,4795,NAQ,75,FR,45.2,0.13333 45810,Saint-Benoît,4795,NAQ,75,FR,46.55315,0.3419 45825,Saint-Brice,4795,NAQ,75,FR,45.68333,-0.28333 45829,Saint-Brice-sur-Vienne,4795,NAQ,75,FR,45.87852,0.95594 45838,Saint-Caprais-de-Bordeaux,4795,NAQ,75,FR,44.74786,-0.43192 45855,Saint-Christoly-de-Blaye,4795,NAQ,75,FR,45.13179,-0.5076 45861,Saint-Ciers-d’Abzac,4795,NAQ,75,FR,45.03333,-0.26667 45862,Saint-Ciers-sur-Gironde,4795,NAQ,75,FR,45.28855,-0.60794 45865,Saint-Claud,4795,NAQ,75,FR,45.89526,0.46454 45869,Saint-Clément,4795,NAQ,75,FR,45.3415,1.68507 45880,Saint-Cyprien,4795,NAQ,75,FR,44.86924,1.04156 45898,Saint-Denis-d’Oléron,4795,NAQ,75,FR,46.03496,-1.37867 45897,Saint-Denis-de-Pile,4795,NAQ,75,FR,45.0,-0.2 46639,Saint-Émilion,4795,NAQ,75,FR,44.88333,-0.15 45923,Saint-Estèphe,4795,NAQ,75,FR,45.26252,-0.77237 46643,Saint-Étienne-de-Baïgorry,4795,NAQ,75,FR,43.17533,-1.3467 45953,Saint-Gelais,4795,NAQ,75,FR,46.38234,-0.39084 45954,Saint-Gence,4795,NAQ,75,FR,45.92198,1.13726 45961,Saint-Genis-de-Saintonge,4795,NAQ,75,FR,45.48107,-0.56848 45974,Saint-Georges-de-Didonne,4795,NAQ,75,FR,45.60342,-1.00487 45981,Saint-Georges-des-Coteaux,4795,NAQ,75,FR,45.76667,-0.71667 45984,Saint-Georges-du-Bois,4795,NAQ,75,FR,46.14074,-0.73393 45986,Saint-Georges-lès-Baillargeaux,4795,NAQ,75,FR,46.67017,0.40209 45992,Saint-Geours-de-Maremne,4795,NAQ,75,FR,43.68936,-1.22937 46002,Saint-Germain-de-Lusignan,4795,NAQ,75,FR,45.45011,-0.46147 46003,Saint-Germain-de-Marencennes,4795,NAQ,75,FR,46.07733,-0.79133 46012,Saint-Germain-du-Puch,4795,NAQ,75,FR,44.85,-0.31667 46017,Saint-Germain-les-Belles,4795,NAQ,75,FR,45.61356,1.4949 46024,Saint-Gervais,4795,NAQ,75,FR,45.01583,-0.45238 46030,Saint-Gervais-les-Trois-Clochers,4795,NAQ,75,FR,46.90067,0.40766 46051,Saint-Hilaire,4795,NAQ,75,FR,44.53333,0.71667 46060,Saint-Hilaire-de-Villefranche,4795,NAQ,75,FR,45.85091,-0.52993 46065,Saint-Hilaire-la-Palud,4795,NAQ,75,FR,46.26676,-0.7138 46070,Saint-Hippolyte,4795,NAQ,75,FR,45.91884,-0.89183 46113,Saint-Jean-d’Illac,4795,NAQ,75,FR,44.80869,-0.78565 46092,Saint-Jean-de-Liversay,4795,NAQ,75,FR,46.26894,-0.87385 46094,Saint-Jean-de-Luz,4795,NAQ,75,FR,43.38871,-1.66267 46100,Saint-Jean-de-Sauves,4795,NAQ,75,FR,46.8413,0.09272 46103,Saint-Jean-de-Thouars,4795,NAQ,75,FR,46.96486,-0.21114 46086,Saint-Jean-Pied-de-Port,4795,NAQ,75,FR,43.16363,-1.23738 46133,Saint-Jouvent,4795,NAQ,75,FR,45.9568,1.205 46143,Saint-Julien-en-Born,4795,NAQ,75,FR,44.06311,-1.22445 46149,Saint-Junien,4795,NAQ,75,FR,45.88867,0.90143 46164,Saint-Just-le-Martel,4795,NAQ,75,FR,45.86351,1.38829 46155,Saint-Just-Luzac,4795,NAQ,75,FR,45.8,-1.03333 46179,Saint-Laurent-de-la-Prée,4795,NAQ,75,FR,45.98259,-1.03625 46188,Saint-Laurent-sur-Gorre,4795,NAQ,75,FR,45.77052,0.95859 46210,Saint-Léger-de-Montbrun,4795,NAQ,75,FR,47.0,-0.13333 46220,Saint-Léon-sur-l’Isle,4795,NAQ,75,FR,45.11491,0.50444 46224,Saint-Léonard-de-Noblat,4795,NAQ,75,FR,45.83566,1.49174 46195,Saint-Loubès,4795,NAQ,75,FR,44.91536,-0.42703 46198,Saint-Louis-de-Montferrand,4795,NAQ,75,FR,44.95,-0.53543 46226,Saint-Macaire,4795,NAQ,75,FR,44.56527,-0.22431 46228,Saint-Maixant,4795,NAQ,75,FR,44.57868,-0.2592 46253,Saint-Mariens,4795,NAQ,75,FR,45.11631,-0.40084 46272,Saint-Martin-de-Hinx,4795,NAQ,75,FR,43.58238,-1.26809 46277,Saint-Martin-de-Ré,4795,NAQ,75,FR,46.20311,-1.36726 46278,Saint-Martin-de-Seignanx,4795,NAQ,75,FR,43.54283,-1.38946 46262,Saint-Martin-Lacaussade,4795,NAQ,75,FR,45.14631,-0.6431 46305,Saint-Mathieu,4795,NAQ,75,FR,45.70674,0.75908 46317,Saint-Maurice-la-Clouère,4795,NAQ,75,FR,46.37804,0.41253 46318,Saint-Maurice-la-Souterraine,4795,NAQ,75,FR,46.21388,1.4313 46326,Saint-Maxire,4795,NAQ,75,FR,46.39911,-0.47988 46349,Saint-Médard-d’Eyrans,4795,NAQ,75,FR,44.71667,-0.51667 46347,Saint-Médard-de-Guizières,4795,NAQ,75,FR,45.01667,-0.05 46348,Saint-Médard-de-Mussidan,4795,NAQ,75,FR,45.03333,0.35 46350,Saint-Médard-en-Jalles,4795,NAQ,75,FR,44.89692,-0.72136 46355,Saint-Même-les-Carrières,4795,NAQ,75,FR,45.65,-0.15 46332,Saint-Mexant,4795,NAQ,75,FR,45.28514,1.65799 46333,Saint-Michel,4795,NAQ,75,FR,45.65,0.1 46346,Saint-Morillon,4795,NAQ,75,FR,44.6506,-0.50322 46389,Saint-Palais,4795,NAQ,75,FR,43.32867,-1.03333 46390,Saint-Palais-sur-Mer,4795,NAQ,75,FR,45.64255,-1.0881 46391,Saint-Pantaléon-de-Larche,4795,NAQ,75,FR,45.14122,1.44652 46392,Saint-Pardoux,4795,NAQ,75,FR,46.57155,-0.30542 46393,Saint-Pardoux-Isaac,4795,NAQ,75,FR,44.6119,0.37345 46394,Saint-Pardoux-la-Rivière,4795,NAQ,75,FR,45.49388,0.74651 46403,Saint-Paul,4795,NAQ,75,FR,45.75114,1.43238 46416,Saint-Paul-lès-Dax,4795,NAQ,75,FR,43.72715,-1.05162 46481,Saint-Pée-sur-Nivelle,4795,NAQ,75,FR,43.35564,-1.55013 46421,Saint-Perdon,4795,NAQ,75,FR,43.8656,-0.59069 46444,Saint-Pierre-d’Aurillac,4795,NAQ,75,FR,44.57168,-0.18922 46445,Saint-Pierre-d’Oléron,4795,NAQ,75,FR,45.9443,-1.3063 46438,Saint-Pierre-des-Échaubrognes,4795,NAQ,75,FR,46.98988,-0.74441 46440,Saint-Pierre-du-Mont,4795,NAQ,75,FR,43.88453,-0.52185 46459,Saint-Porchaire,4795,NAQ,75,FR,45.82075,-0.78235 46467,Saint-Priest-sous-Aixe,4795,NAQ,75,FR,45.81667,1.1 46465,Saint-Priest-Taurion,4795,NAQ,75,FR,45.88686,1.40016 46469,Saint-Privat,4795,NAQ,75,FR,45.13831,2.09902 46473,Saint-Projet-Saint-Constant,4795,NAQ,75,FR,45.72802,0.33851 46487,Saint-Quentin-de-Baron,4795,NAQ,75,FR,44.81802,-0.28636 46498,Saint-Rogatien,4795,NAQ,75,FR,46.15,-1.06963 46499,Saint-Romain-de-Benet,4795,NAQ,75,FR,45.6915,-0.84765 46519,Saint-Saturnin,4795,NAQ,75,FR,45.66667,0.05 46526,Saint-Sauvant,4795,NAQ,75,FR,46.35965,0.05634 46532,Saint-Sauveur,4795,NAQ,75,FR,45.20272,-0.83433 46536,Saint-Sauveur-d’Aunis,4795,NAQ,75,FR,46.21716,-0.8858 46541,Saint-Savin,4795,NAQ,75,FR,45.15,-0.45 46542,Saint-Savinien,4795,NAQ,75,FR,45.87711,-0.67919 46545,Saint-Selve,4795,NAQ,75,FR,44.67095,-0.47887 46550,Saint-Seurin-sur-l’Isle,4795,NAQ,75,FR,45.01667,0.0 46551,Saint-Sever,4795,NAQ,75,FR,43.75727,-0.57357 46560,Saint-Sulpice-de-Cognac,4795,NAQ,75,FR,45.75978,-0.38093 46561,Saint-Sulpice-de-Faleyrens,4795,NAQ,75,FR,44.86667,-0.18333 46563,Saint-Sulpice-de-Royan,4795,NAQ,75,FR,45.67035,-1.01252 46564,Saint-Sulpice-et-Cameyrac,4795,NAQ,75,FR,44.91131,-0.39048 46567,Saint-Sulpice-le-Guérétois,4795,NAQ,75,FR,46.20097,1.82826 46568,Saint-Sulpice-les-Feuilles,4795,NAQ,75,FR,46.31868,1.36792 46573,Saint-Sylvestre-sur-Lot,4795,NAQ,75,FR,44.39667,0.80441 46574,Saint-Symphorien,4795,NAQ,75,FR,46.26442,-0.4922 46587,Saint-Trojan-les-Bains,4795,NAQ,75,FR,45.84134,-1.20728 46602,Saint-Varent,4795,NAQ,75,FR,46.88934,-0.2321 46603,Saint-Vaury,4795,NAQ,75,FR,46.20417,1.75654 46605,Saint-Viance,4795,NAQ,75,FR,45.2176,1.45263 46611,Saint-Victurnien,4795,NAQ,75,FR,45.87855,1.01376 46614,Saint-Vincent-de-Paul,4795,NAQ,75,FR,43.74431,-1.00662 46615,Saint-Vincent-de-Tyrosse,4795,NAQ,75,FR,43.66031,-1.30799 46620,Saint-Vite,4795,NAQ,75,FR,44.47133,0.93876 46621,Saint-Vivien-de-Médoc,4795,NAQ,75,FR,45.42695,-1.03377 46627,Saint-Xandre,4795,NAQ,75,FR,46.20444,-1.10267 46630,Saint-Yrieix-la-Perche,4795,NAQ,75,FR,45.51604,1.20569 46631,Saint-Yrieix-sur-Charente,4795,NAQ,75,FR,45.68333,0.11667 46633,Saint-Yzan-de-Soudiac,4795,NAQ,75,FR,45.14118,-0.41078 46666,Sainte-Bazeille,4795,NAQ,75,FR,44.53073,0.0974 46670,Sainte-Colombe-en-Bruilhois,4795,NAQ,75,FR,44.17822,0.51572 46676,Sainte-Eulalie,4795,NAQ,75,FR,44.90667,-0.47417 46687,Sainte-Féréole,4795,NAQ,75,FR,45.22932,1.58248 46678,Sainte-Feyre,4795,NAQ,75,FR,46.139,1.91517 46681,Sainte-Fortunade,4795,NAQ,75,FR,45.20691,1.77117 46684,Sainte-Foy-la-Grande,4795,NAQ,75,FR,44.83333,0.21667 46697,Sainte-Hélène,4795,NAQ,75,FR,44.96667,-0.88333 46701,Sainte-Livrade-sur-Lot,4795,NAQ,75,FR,44.39929,0.5912 46712,Sainte-Marie-de-Gosse,4795,NAQ,75,FR,43.55,-0.23333 46713,Sainte-Marie-de-Ré,4795,NAQ,75,FR,46.15237,-1.31281 46723,Sainte-Radegonde,4795,NAQ,75,FR,46.98333,-0.25 46728,Sainte-Soulle,4795,NAQ,75,FR,46.18847,-1.01607 46731,Sainte-Terre,4795,NAQ,75,FR,44.83333,-0.11667 46733,Sainte-Verge,4795,NAQ,75,FR,47.00818,-0.21033 46734,Saintes,4795,NAQ,75,FR,45.74544,-0.6345 46738,Saivres,4795,NAQ,75,FR,46.43262,-0.23677 46748,Salies-de-Béarn,4795,NAQ,75,FR,43.47422,-0.92448 46750,Salignac,4795,NAQ,75,FR,45.01607,-0.37964 46751,Salignac-Eyvigues,4795,NAQ,75,FR,44.97464,1.32428 46759,Sallebœuf,4795,NAQ,75,FR,44.83333,-0.4 46761,Salles,4795,NAQ,75,FR,44.55,-0.86073 46764,Salles-sur-Mer,4795,NAQ,75,FR,46.10543,-1.05741 46770,Samadet,4795,NAQ,75,FR,43.63761,-0.48785 46788,Sanguinet,4795,NAQ,75,FR,44.4832,-1.07457 46802,Sarbazan,4795,NAQ,75,FR,44.02029,-0.31294 46804,Sare,4795,NAQ,75,FR,43.3126,-1.58012 46808,Sarlat-la-Canéda,4795,NAQ,75,FR,44.88902,1.21656 46832,Saubion,4795,NAQ,75,FR,43.6714,-1.34821 46833,Saubrigues,4795,NAQ,75,FR,43.60989,-1.31381 46834,Saucats,4795,NAQ,75,FR,44.65405,-0.59643 46835,Saugnac-et-Cambran,4795,NAQ,75,FR,43.67098,-0.99495 46837,Saujon,4795,NAQ,75,FR,45.67309,-0.9262 46840,Saulgé,4795,NAQ,75,FR,46.37758,0.87577 46858,Sauvagnon,4795,NAQ,75,FR,43.4,-0.38333 46862,Sauveterre-de-Béarn,4795,NAQ,75,FR,43.4,-0.93333 46863,Sauveterre-de-Guyenne,4795,NAQ,75,FR,44.693,-0.08549 46865,Sauviat-sur-Vige,4795,NAQ,75,FR,45.9072,1.60827 46869,Sauzé-Vaussais,4795,NAQ,75,FR,46.13369,0.10673 46884,Savigné,4795,NAQ,75,FR,46.1595,0.31937 46877,Savigny-Lévescault,4795,NAQ,75,FR,46.53502,0.47719 46907,Scorbé-Clairvaux,4795,NAQ,75,FR,46.81061,0.41369 46912,Secondigny,4795,NAQ,75,FR,46.61024,-0.41679 46914,Segonzac,4795,NAQ,75,FR,45.61667,-0.21667 46919,Seignosse,4795,NAQ,75,FR,43.68774,-1.37 46922,Seilhac,4795,NAQ,75,FR,45.36709,1.7135 46939,Semussac,4795,NAQ,75,FR,45.6,-0.91667 47141,Séreilhac,4795,NAQ,75,FR,45.76843,1.08052 46967,Serres-Castet,4795,NAQ,75,FR,43.38333,-0.35 47131,Sèvres-Anxaumont,4795,NAQ,75,FR,46.57036,0.46603 47006,Sireuil,4795,NAQ,75,FR,45.61667,0.01667 47013,Smarves,4795,NAQ,75,FR,46.51078,0.3498 47028,Solignac,4795,NAQ,75,FR,45.75528,1.27563 47042,Soorts-Hossegor,4795,NAQ,75,FR,43.6649,-1.39717 47045,Sorges,4795,NAQ,75,FR,45.30563,0.87328 47056,Soubise,4795,NAQ,75,FR,45.92395,-1.00938 47068,Soulac-sur-Mer,4795,NAQ,75,FR,45.51068,-1.12524 47078,Soumoulou,4795,NAQ,75,FR,43.26667,-0.18333 47080,Souprosse,4795,NAQ,75,FR,43.78869,-0.71035 47081,Souraïde,4795,NAQ,75,FR,43.34154,-1.47559 47086,Sourzac,4795,NAQ,75,FR,45.04978,0.39598 47087,Soussans,4795,NAQ,75,FR,45.05619,-0.69916 47088,Soustons,4795,NAQ,75,FR,43.75328,-1.3278 47090,Soyaux,4795,NAQ,75,FR,45.65,0.2 47121,Surgères,4795,NAQ,75,FR,46.1082,-0.75148 47152,Tabanac,4795,NAQ,75,FR,44.72059,-0.40513 47162,Talence,4795,NAQ,75,FR,44.80477,-0.59543 47173,Taponnat-Fleurignac,4795,NAQ,75,FR,45.77868,0.40932 47179,Targon,4795,NAQ,75,FR,44.73495,-0.26351 47181,Tarnos,4795,NAQ,75,FR,43.5417,-1.46281 47182,Tartas,4795,NAQ,75,FR,43.83248,-0.80895 47188,Tauriac,4795,NAQ,75,FR,45.04915,-0.50048 47206,Tercé,4795,NAQ,75,FR,46.51667,0.56386 47205,Tercis-les-Bains,4795,NAQ,75,FR,43.67048,-1.10738 47209,Terrasson-Lavilledieu,4795,NAQ,75,FR,45.13011,1.30136 47216,Thairé,4795,NAQ,75,FR,46.07341,-1.0023 47268,Thénac,4795,NAQ,75,FR,45.66705,-0.65345 47269,Thénezay,4795,NAQ,75,FR,46.71879,-0.02883 47223,Thenon,4795,NAQ,75,FR,45.13897,1.07211 47241,Thiviers,4795,NAQ,75,FR,45.41542,0.91963 47251,Thorigné,4795,NAQ,75,FR,46.29149,-0.25122 47254,Thouars,4795,NAQ,75,FR,46.97602,-0.21507 47264,Thuré,4795,NAQ,75,FR,46.83221,0.45797 47291,Tocane-Saint-Apre,4795,NAQ,75,FR,45.25404,0.49682 47294,Tonnay-Boutonne,4795,NAQ,75,FR,45.96815,-0.70847 47295,Tonnay-Charente,4795,NAQ,75,FR,45.949,-0.8935 47296,Tonneins,4795,NAQ,75,FR,44.39206,0.31241 47305,Tosse,4795,NAQ,75,FR,43.68916,-1.33262 47311,Toulenne,4795,NAQ,75,FR,44.55665,-0.26328 47344,Touvre,4795,NAQ,75,FR,45.66667,0.25 47354,Treignac,4795,NAQ,75,FR,45.53696,1.7952 47397,Trélissac,4795,NAQ,75,FR,45.19766,0.78615 47364,Tresses,4795,NAQ,75,FR,44.84781,-0.46296 47377,Trizay,4795,NAQ,75,FR,45.88276,-0.89697 47413,Tulle,4795,NAQ,75,FR,45.26582,1.77233 47430,Urcuit,4795,NAQ,75,FR,43.48594,-1.33668 47433,Urrugne,4795,NAQ,75,FR,43.36361,-1.69921 47434,Urt,4795,NAQ,75,FR,43.49009,-1.29744 47438,Ussac,4795,NAQ,75,FR,45.19389,1.51337 47439,Ussel,4795,NAQ,75,FR,45.54804,2.30917 47440,Usson-du-Poitou,4795,NAQ,75,FR,46.27782,0.52816 47442,Ustaritz,4795,NAQ,75,FR,43.3965,-1.45603 47445,Uzein,4795,NAQ,75,FR,43.4,-0.43333 47447,Uzerche,4795,NAQ,75,FR,45.42462,1.56341 47517,Varetz,4795,NAQ,75,FR,45.19392,1.45063 47522,Vars,4795,NAQ,75,FR,45.76256,0.12478 47524,Vasles,4795,NAQ,75,FR,46.57618,-0.02638 47547,Vaux-sur-Mer,4795,NAQ,75,FR,45.64606,-1.05841 47551,Vayres,4795,NAQ,75,FR,44.9,-0.31667 47923,Vélines,4795,NAQ,75,FR,44.85,0.11667 47568,Vendays-Montalivet,4795,NAQ,75,FR,45.35492,-1.06088 47571,Vendeuvre-du-Poitou,4795,NAQ,75,FR,46.73579,0.30996 47600,Vergt,4795,NAQ,75,FR,45.02695,0.7182 47929,Vérines,4795,NAQ,75,FR,46.19372,-0.96683 47615,Verneuil-sur-Vienne,4795,NAQ,75,FR,45.85524,1.10133 47640,Vertheuil,4795,NAQ,75,FR,45.25,-0.83333 47653,Veyrac,4795,NAQ,75,FR,45.89521,1.105 47659,Vianne,4795,NAQ,75,FR,44.19658,0.32104 47672,Vicq-sur-Breuilh,4795,NAQ,75,FR,45.64661,1.38179 47679,Vielle-Saint-Girons,4795,NAQ,75,FR,43.95,-1.3 47681,Viennay,4795,NAQ,75,FR,46.68711,-0.24641 47683,Vienne,4795,NAQ,75,FR,46.53528,0.45201 47688,Vieux-Boucau-les-Bains,4795,NAQ,75,FR,43.78947,-1.39957 47693,Vigeois,4795,NAQ,75,FR,45.37934,1.51731 47733,Villefagnan,4795,NAQ,75,FR,46.0114,0.07936 47742,Villefranque,4795,NAQ,75,FR,43.43631,-1.45324 47744,Villegouge,4795,NAQ,75,FR,44.96667,-0.3 47758,Villenave-d’Ornon,4795,NAQ,75,FR,44.77327,-0.5442 47768,Villeneuve-de-Marsan,4795,NAQ,75,FR,43.88906,-0.30926 47784,Villeneuve-sur-Lot,4795,NAQ,75,FR,44.40854,0.70415 47813,Villeréal,4795,NAQ,75,FR,44.63631,0.74326 47828,Villiers-en-Plaine,4795,NAQ,75,FR,46.40895,-0.53756 47856,Virazeil,4795,NAQ,75,FR,44.50705,0.22177 47886,Vivonne,4795,NAQ,75,FR,46.42953,0.26443 47934,Vœuil-et-Giget,4795,NAQ,75,FR,45.58333,0.15 47906,Vouillé,4795,NAQ,75,FR,46.64011,0.16778 47910,Vouneuil-sous-Biard,4795,NAQ,75,FR,46.57387,0.26988 47911,Vouneuil-sur-Vienne,4795,NAQ,75,FR,46.71793,0.53936 47914,Voutezac,4795,NAQ,75,FR,45.29214,1.43721 48001,Ychoux,4795,NAQ,75,FR,44.32869,-0.95179 48007,Ygos-Saint-Saturnin,4795,NAQ,75,FR,43.97651,-0.7378 48015,Yves,4795,NAQ,75,FR,46.01922,-1.04833 48018,Yvrac,4795,NAQ,75,FR,44.87786,-0.4587 39236,Abeilhan,4799,OCC,75,FR,43.44925,3.29529 39257,Agde,4799,OCC,75,FR,43.31083,3.47583 39274,Aiguefonde,4799,OCC,75,FR,43.49394,2.31686 39276,Aigues-Mortes,4799,OCC,75,FR,43.56683,4.19068 39277,Aigues-Vives,4799,OCC,75,FR,43.7379,4.18066 39284,Aimargues,4799,OCC,75,FR,43.68448,4.20999 39305,Albi,4799,OCC,75,FR,43.9298,2.148 39306,Albias,4799,OCC,75,FR,44.09049,1.44821 39342,Alénya,4799,OCC,75,FR,42.63875,2.98148 39341,Alès,4799,OCC,75,FR,44.12489,4.08082 39314,Alignan-du-Vent,4799,OCC,75,FR,43.46945,3.34165 39340,Alzonne,4799,OCC,75,FR,43.25338,2.17808 39388,Andrest,4799,OCC,75,FR,43.31998,0.06405 39392,Anduze,4799,OCC,75,FR,44.05409,3.98545 39410,Aniane,4799,OCC,75,FR,43.68448,3.58747 39447,Aramon,4799,OCC,75,FR,43.89174,4.68096 39474,Argelers,4799,OCC,75,FR,42.54714,3.02253 39476,Argelès-Gazost,4799,OCC,75,FR,43.00258,-0.09855 39475,Argeliers,4799,OCC,75,FR,43.31217,2.91046 39488,Arles,4799,OCC,75,FR,42.45654,2.63457 39495,Armissan,4799,OCC,75,FR,43.18778,3.0966 39526,Arthès,4799,OCC,75,FR,43.95745,2.2113 39535,Arzens,4799,OCC,75,FR,43.19838,2.20954 39548,Aspet,4799,OCC,75,FR,43.01457,0.80294 39549,Aspiran,4799,OCC,75,FR,43.56586,3.45031 39551,Assas,4799,OCC,75,FR,43.70278,3.9 39567,Aubais,4799,OCC,75,FR,43.75402,4.14567 39577,Aubiet,4799,OCC,75,FR,43.64631,0.78441 39584,Aubin,4799,OCC,75,FR,44.52809,2.24439 39586,Aubord,4799,OCC,75,FR,43.75827,4.31105 39591,Aucamville,4799,OCC,75,FR,43.6702,1.42808 39592,Auch,4799,OCC,75,FR,43.6454,0.58793 39617,Aumont-Aubrac,4799,OCC,75,FR,44.72205,3.28466 39625,Aureilhan,4799,OCC,75,FR,43.24337,0.09581 39627,Auriac-sur-Vendinelle,4799,OCC,75,FR,43.52416,1.8264 39629,Aurignac,4799,OCC,75,FR,43.21695,0.88176 39632,Aussillon,4799,OCC,75,FR,43.50293,2.36791 39633,Aussonne,4799,OCC,75,FR,43.68162,1.31886 39634,Auterive,4799,OCC,75,FR,43.35103,1.47797 39643,Auvillar,4799,OCC,75,FR,44.06863,0.90192 39652,Auzeville-Tolosane,4799,OCC,75,FR,43.52777,1.4824 39653,Auzielle,4799,OCC,75,FR,43.54165,1.56574 39681,Avèze,4799,OCC,75,FR,43.97116,3.60097 39670,Avignonet-Lauragais,4799,OCC,75,FR,43.36667,1.8 39682,Ax-les-Thermes,4799,OCC,75,FR,42.71968,1.83845 39688,Ayguesvives,4799,OCC,75,FR,43.43636,1.59505 39696,Azille,4799,OCC,75,FR,43.27691,2.65981 39705,Bagard,4799,OCC,75,FR,44.07126,4.05225 39706,Bages,4799,OCC,75,FR,42.60588,2.8935 39707,Bagnac-sur-Célé,4799,OCC,75,FR,44.66667,2.16667 39714,Bagnères-de-Bigorre,4799,OCC,75,FR,43.06416,0.1497 39715,Bagnères-de-Luchon,4799,OCC,75,FR,42.79079,0.59315 39713,Bagnols-sur-Cèze,4799,OCC,75,FR,44.1599,4.61776 39718,Baho,4799,OCC,75,FR,42.7,2.82204 39720,Baillargues,4799,OCC,75,FR,43.66267,4.01681 39741,Baixas,4799,OCC,75,FR,42.74969,2.81002 39745,Balaruc-le-Vieux,4799,OCC,75,FR,43.4614,3.6853 39746,Balaruc-les-Bains,4799,OCC,75,FR,43.4417,3.6778 39756,Balma,4799,OCC,75,FR,43.61111,1.49944 39762,Banyuls de la Marenda,4799,OCC,75,FR,42.48375,3.12897 39763,Banyuls-dels-Aspres,4799,OCC,75,FR,42.56567,2.86667 39768,Baraqueville,4799,OCC,75,FR,44.27655,2.43184 39770,Barbazan-Debat,4799,OCC,75,FR,43.1958,0.1206 39778,Barcelonne-du-Gers,4799,OCC,75,FR,43.7036,-0.23619 39784,Barjac,4799,OCC,75,FR,44.30743,4.35146 39797,Bassan,4799,OCC,75,FR,43.4106,3.25396 39830,Bazet,4799,OCC,75,FR,43.29145,0.06728 39831,Baziège,4799,OCC,75,FR,43.45454,1.61399 39836,Beaucaire,4799,OCC,75,FR,43.80806,4.64417 39850,Beaulieu,4799,OCC,75,FR,43.72861,4.02194 39863,Beaumont-de-Lomagne,4799,OCC,75,FR,43.88285,0.98762 39871,Beaumont-sur-Lèze,4799,OCC,75,FR,43.38095,1.35826 39878,Beaupuy,4799,OCC,75,FR,43.64713,1.55517 39896,Beauvoisin,4799,OCC,75,FR,43.71835,4.32339 39898,Beauzelle,4799,OCC,75,FR,43.66713,1.37518 40412,Bédarieux,4799,OCC,75,FR,43.61553,3.15714 39901,Belberaud,4799,OCC,75,FR,43.50557,1.56725 40420,Bélesta,4799,OCC,75,FR,42.90228,1.93325 39913,Bellegarde,4799,OCC,75,FR,43.75329,4.51654 39933,Belmont-sur-Rance,4799,OCC,75,FR,43.81981,2.75524 39934,Belpech,4799,OCC,75,FR,43.19957,1.75157 40428,Bérat,4799,OCC,75,FR,43.37857,1.17572 39956,Bernis,4799,OCC,75,FR,43.76913,4.28713 39973,Bessan,4799,OCC,75,FR,43.36196,3.42288 39982,Bessèges,4799,OCC,75,FR,44.2923,4.09661 39981,Bessières,4799,OCC,75,FR,43.79861,1.60624 40436,Béziers,4799,OCC,75,FR,43.34122,3.21402 40003,Bezouce,4799,OCC,75,FR,43.88229,4.49072 40007,Biars-sur-Cère,4799,OCC,75,FR,44.92629,1.85403 40037,Bizanet,4799,OCC,75,FR,43.16419,2.87034 40039,Bize-Minervois,4799,OCC,75,FR,43.31656,2.87134 40044,Blagnac,4799,OCC,75,FR,43.63276,1.39399 40060,Blauzac,4799,OCC,75,FR,43.96151,4.3693 40063,Blaye-les-Mines,4799,OCC,75,FR,44.03073,2.13166 40094,Boisseron,4799,OCC,75,FR,43.75795,4.0797 40095,Boisset-et-Gaujac,4799,OCC,75,FR,44.04749,4.00861 40107,Bompas,4799,OCC,75,FR,42.73333,2.93333 40157,Bouillargues,4799,OCC,75,FR,43.79733,4.42853 40161,Boujan-sur-Libron,4799,OCC,75,FR,43.36996,3.24759 40171,Bouloc,4799,OCC,75,FR,43.78163,1.40522 40173,Boulogne-sur-Gesse,4799,OCC,75,FR,43.3,0.65 40222,Bout-du-Pont-de-Larn,4799,OCC,75,FR,43.49738,2.41642 40234,Bouzigues,4799,OCC,75,FR,43.4481,3.65781 40243,Bozouls,4799,OCC,75,FR,44.4705,2.72432 40251,Bram,4799,OCC,75,FR,43.24376,2.11341 40256,Branoux-les-Taillades,4799,OCC,75,FR,44.21941,3.99647 40261,Brassac,4799,OCC,75,FR,43.62959,2.49763 40264,Brax,4799,OCC,75,FR,43.61793,1.23957 40275,Brens,4799,OCC,75,FR,43.88725,1.90716 40277,Bressols,4799,OCC,75,FR,43.96796,1.33839 40281,Bretenoux,4799,OCC,75,FR,44.91468,1.84007 40302,Briatexte,4799,OCC,75,FR,43.75237,1.90879 40342,Bruguières,4799,OCC,75,FR,43.7272,1.40762 40388,Burlats,4799,OCC,75,FR,43.63633,2.31879 40408,Buzet-sur-Tarn,4799,OCC,75,FR,43.77977,1.63301 40444,Cabestany,4799,OCC,75,FR,42.68132,2.94122 40447,Cabrières,4799,OCC,75,FR,43.90389,4.47094 40450,Cadalen,4799,OCC,75,FR,43.84933,1.98089 40458,Cagnac-les-Mines,4799,OCC,75,FR,43.98445,2.14227 40463,Cahors,4799,OCC,75,FR,44.4491,1.43663 40464,Cahuzac-sur-Vère,4799,OCC,75,FR,43.98268,1.91052 40467,Caissargues,4799,OCC,75,FR,43.79509,4.37955 40468,Cajarc,4799,OCC,75,FR,44.48546,1.84261 40474,Calmont,4799,OCC,75,FR,43.28718,1.63031 40480,Calvisson,4799,OCC,75,FR,43.78696,4.19626 40483,Camarès,4799,OCC,75,FR,43.82208,2.88005 40497,Campan,4799,OCC,75,FR,43.01587,0.17846 40502,Campsas,4799,OCC,75,FR,43.89591,1.32677 40506,Candillargues,4799,OCC,75,FR,43.62052,4.06924 40509,Canet,4799,OCC,75,FR,43.22744,2.848 40510,Canet-en-Roussillon,4799,OCC,75,FR,42.7,3.01667 40514,Canohès,4799,OCC,75,FR,42.65461,2.83633 40526,Capdenac-Gare,4799,OCC,75,FR,44.57567,2.08079 40527,Capendu,4799,OCC,75,FR,43.18596,2.55677 40528,Capestang,4799,OCC,75,FR,43.32791,3.04447 40533,Capvern,4799,OCC,75,FR,43.10357,0.31604 40534,Caraman,4799,OCC,75,FR,43.53271,1.76002 40537,Carbonne,4799,OCC,75,FR,43.29857,1.2252 40539,Carcassonne,4799,OCC,75,FR,43.21351,2.35162 40549,Carmaux,4799,OCC,75,FR,44.05099,2.15795 40568,Cassagnes-Bégonhès,4799,OCC,75,FR,44.16893,2.53084 40575,Castanet-Tolosan,4799,OCC,75,FR,43.51591,1.49864 40577,Castelginest,4799,OCC,75,FR,43.69382,1.4344 40580,Castelmaurou,4799,OCC,75,FR,43.67778,1.53222 40583,Castelnau-dEstrétefonds,4799,OCC,75,FR,43.78367,1.35904 40584,Castelnau-de-Guers,4799,OCC,75,FR,43.43398,3.43708 40585,Castelnau-de-Lévis,4799,OCC,75,FR,43.93975,2.08491 40587,Castelnau-le-Lez,4799,OCC,75,FR,43.63333,3.9 40582,Castelnau-Montratier,4799,OCC,75,FR,44.26667,1.36667 40588,Castelnaudary,4799,OCC,75,FR,43.31829,1.95449 40589,Castelsarrasin,4799,OCC,75,FR,44.04022,1.10702 40592,Castillon-du-Gard,4799,OCC,75,FR,43.96457,4.55337 40595,Castres,4799,OCC,75,FR,43.60589,2.23992 40597,Castries,4799,OCC,75,FR,43.67972,3.98222 40610,Caunes-Minervois,4799,OCC,75,FR,43.32555,2.52541 40612,Caussade,4799,OCC,75,FR,44.1608,1.53913 40613,Cauterets,4799,OCC,75,FR,42.88333,-0.11667 40616,Caux,4799,OCC,75,FR,43.50621,3.36709 40620,Caveirac,4799,OCC,75,FR,43.82437,4.26664 40623,Caylus,4799,OCC,75,FR,44.23607,1.77168 40624,Cazaubon,4799,OCC,75,FR,43.93431,-0.06814 40628,Cazères,4799,OCC,75,FR,43.2071,1.08633 40625,Cazes-Mondenard,4799,OCC,75,FR,44.22689,1.20299 40626,Cazilhac,4799,OCC,75,FR,43.18205,2.36085 40627,Cazouls-lès-Béziers,4799,OCC,75,FR,43.39218,3.101 40637,Cendras,4799,OCC,75,FR,44.15,4.06667 41393,Cépet,4799,OCC,75,FR,43.74885,1.43168 40645,Ceret,4799,OCC,75,FR,42.48533,2.74804 40654,Cers,4799,OCC,75,FR,43.32352,3.3045 40656,Cervera de la Marenda,4799,OCC,75,FR,42.44094,3.16518 40658,Cessenon-sur-Orb,4799,OCC,75,FR,43.45011,3.05154 40684,Chalabre,4799,OCC,75,FR,42.98248,2.00538 40755,Chanac,4799,OCC,75,FR,44.46614,3.34327 40913,Chirac,4799,OCC,75,FR,44.52289,3.26652 41023,Cintegabelle,4799,OCC,75,FR,43.31316,1.53333 41034,Claira,4799,OCC,75,FR,42.76036,2.95572 41041,Clapiers,4799,OCC,75,FR,43.65833,3.88917 41042,Clarensac,4799,OCC,75,FR,43.82536,4.22047 41043,Claret,4799,OCC,75,FR,43.86244,3.90522 41078,Codognan,4799,OCC,75,FR,43.73033,4.2212 41091,Collioure,4799,OCC,75,FR,42.52462,3.08235 41103,Colombiers,4799,OCC,75,FR,43.31424,3.13947 41105,Colombiès,4799,OCC,75,FR,44.34414,2.33772 41106,Colomiers,4799,OCC,75,FR,43.61058,1.33467 41108,Combaillaux,4799,OCC,75,FR,43.67191,3.76767 41126,Comps,4799,OCC,75,FR,43.85304,4.60567 41133,Condom,4799,OCC,75,FR,43.95816,0.37199 41147,Congénies,4799,OCC,75,FR,43.76667,4.16667 41150,Connaux,4799,OCC,75,FR,44.08919,4.59387 41153,Conques-sur-Orbiel,4799,OCC,75,FR,43.26667,2.41667 41161,Corbarieu,4799,OCC,75,FR,43.94415,1.36881 41174,Cordes-sur-Ciel,4799,OCC,75,FR,44.06667,1.95 41187,Cornebarrieu,4799,OCC,75,FR,43.64895,1.32407 41188,Corneilhan,4799,OCC,75,FR,43.39957,3.19147 41189,Corneilla-del-Vercol,4799,OCC,75,FR,42.6239,2.95216 41190,Corneilla-la-Rivière,4799,OCC,75,FR,42.69675,2.72962 41224,Coufouleux,4799,OCC,75,FR,43.81713,1.73078 41227,Couiza,4799,OCC,75,FR,42.94198,2.25453 41256,Cournonsec,4799,OCC,75,FR,43.54944,3.70556 41257,Cournonterral,4799,OCC,75,FR,43.55889,3.72 41265,Coursan,4799,OCC,75,FR,43.2337,3.05712 41296,Cransac,4799,OCC,75,FR,44.52411,2.2837 41303,Creissan,4799,OCC,75,FR,43.37524,3.01196 41304,Creissels,4799,OCC,75,FR,44.08588,3.06071 41364,Cugnaux,4799,OCC,75,FR,43.53635,1.34428 41373,Cunac,4799,OCC,75,FR,43.9301,2.21878 41386,Cuxac-Cabardès,4799,OCC,75,FR,43.37087,2.28369 41441,Daux,4799,OCC,75,FR,43.69506,1.26892 41445,Decazeville,4799,OCC,75,FR,44.56045,2.25091 41612,Département de lAriège,4799,OCC,75,FR,43.0,1.5 41614,Département de lAude,4799,OCC,75,FR,43.08333,2.5 41615,Département de lAveyron,4799,OCC,75,FR,44.25,2.5 41618,Département de lHérault,4799,OCC,75,FR,43.66667,3.5 41631,Département de la Lozère,4799,OCC,75,FR,44.5,3.5 41637,Département des Hautes-Pyrénées,4799,OCC,75,FR,43.03686,0.18632 41639,Département des Pyrénées-Orientales,4799,OCC,75,FR,42.60075,2.58889 41645,Département du Tarn-et-Garonne,4799,OCC,75,FR,44.0,1.16667 41556,Dourgne,4799,OCC,75,FR,43.48381,2.13989 41583,Drémil-Lafage,4799,OCC,75,FR,43.59624,1.60117 41578,Druelle,4799,OCC,75,FR,44.36006,2.50505 41652,Eaunes,4799,OCC,75,FR,43.42079,1.35397 41653,Eauze,4799,OCC,75,FR,43.86055,0.10199 48031,el Voló,4799,OCC,75,FR,42.52424,2.83336 41664,Elne,4799,OCC,75,FR,42.60031,2.97146 48032,els Banys dArles,4799,OCC,75,FR,42.47289,2.66916 41681,Entraygues-sur-Truyère,4799,OCC,75,FR,44.64606,2.56745 41705,Escalquens,4799,OCC,75,FR,43.51744,1.55893 41716,Espalion,4799,OCC,75,FR,44.52237,2.76265 41719,Espéraza,4799,OCC,75,FR,42.93225,2.22006 41729,Estagel,4799,OCC,75,FR,42.77314,2.69665 41761,Fabrègues,4799,OCC,75,FR,43.55057,3.77637 41760,Fabrezan,4799,OCC,75,FR,43.13581,2.69814 41799,Fenouillet,4799,OCC,75,FR,43.68041,1.392 41803,Ferrals-les-Corbières,4799,OCC,75,FR,43.15,2.73333 41819,Figeac,4799,OCC,75,FR,44.6088,2.03187 41822,Finhan,4799,OCC,75,FR,43.91335,1.2212 41823,Firmi,4799,OCC,75,FR,44.54106,2.30764 41832,Flavin,4799,OCC,75,FR,44.2889,2.60513 41839,Fleurance,4799,OCC,75,FR,43.84824,0.66302 41845,Fleury,4799,OCC,75,FR,43.23095,3.13745 41860,Florac,4799,OCC,75,FR,44.32632,3.59301 41862,Florensac,4799,OCC,75,FR,43.38301,3.46638 41863,Flourens,4799,OCC,75,FR,43.59273,1.56259 41867,Foix,4799,OCC,75,FR,42.96046,1.60787 41872,Fonbeauzard,4799,OCC,75,FR,43.6783,1.4344 41874,Fonsorbes,4799,OCC,75,FR,43.53524,1.22937 41875,Font-Romeu-Odeillo-Via,4799,OCC,75,FR,42.50552,2.04011 41904,Fontenilles,4799,OCC,75,FR,43.55286,1.19096 41937,Fourques,4799,OCC,75,FR,43.6945,4.60932 41984,Fréjairolles,4799,OCC,75,FR,43.88094,2.23151 41975,Frontignan,4799,OCC,75,FR,43.44848,3.754 41976,Fronton,4799,OCC,75,FR,43.83931,1.38931 41981,Frouzins,4799,OCC,75,FR,43.51482,1.32523 42011,Gagnac-sur-Garonne,4799,OCC,75,FR,43.6999,1.37535 42013,Gaillac,4799,OCC,75,FR,43.9016,1.89686 42014,Gaillac-Toulza,4799,OCC,75,FR,43.25536,1.47141 42022,Gallargues-le-Montueux,4799,OCC,75,FR,43.71667,4.16667 42029,Ganges,4799,OCC,75,FR,43.9338,3.70784 42036,Gard,4799,OCC,75,FR,44.0179,4.28751 42039,Gardouch,4799,OCC,75,FR,43.39096,1.68313 42044,Garidech,4799,OCC,75,FR,43.71076,1.56036 42047,Garons,4799,OCC,75,FR,43.76861,4.42753 42298,Générac,4799,OCC,75,FR,43.7283,4.35 42073,Gerde,4799,OCC,75,FR,43.05567,0.16688 42075,Gers,4799,OCC,75,FR,43.71731,0.45422 42090,Gigean,4799,OCC,75,FR,43.50028,3.71167 42091,Gignac,4799,OCC,75,FR,43.652,3.5509 42097,Gimont,4799,OCC,75,FR,43.62627,0.87655 42099,Ginestas,4799,OCC,75,FR,43.26645,2.87038 42104,Giroussens,4799,OCC,75,FR,43.76199,1.77608 42128,Gondrin,4799,OCC,75,FR,43.88466,0.23737 42144,Goudargues,4799,OCC,75,FR,44.21376,4.46652 42149,Gourdan-Polignan,4799,OCC,75,FR,43.07092,0.57482 42150,Gourdon,4799,OCC,75,FR,44.73742,1.38297 42163,Grabels,4799,OCC,75,FR,43.64797,3.79865 42165,Gragnague,4799,OCC,75,FR,43.68091,1.58461 42168,Gramat,4799,OCC,75,FR,44.78075,1.71957 42187,Gratentour,4799,OCC,75,FR,43.7236,1.43234 42188,Graulhet,4799,OCC,75,FR,43.76688,1.98938 42195,Grenade,4799,OCC,75,FR,43.76667,1.28333 42215,Grisolles,4799,OCC,75,FR,43.8292,1.29673 42230,Gruissan,4799,OCC,75,FR,43.10759,3.08651 42341,Haute-Garonne,4799,OCC,75,FR,43.38724,1.22191 42464,Hérépian,4799,OCC,75,FR,43.593,3.11595 42420,Horgues,4799,OCC,75,FR,43.18865,0.08733 42469,Ibos,4799,OCC,75,FR,43.23333,0.0 42479,Ille-sur-Têt,4799,OCC,75,FR,42.67069,2.62162 42523,Jacou,4799,OCC,75,FR,43.66139,3.91222 42548,Jegun,4799,OCC,75,FR,43.76667,0.46667 42560,Jonquières-Saint-Vincent,4799,OCC,75,FR,43.82809,4.56327 42586,Juillan,4799,OCC,75,FR,43.19937,0.0257 42598,Juvignac,4799,OCC,75,FR,43.61389,3.81056 42627,LUnion,4799,OCC,75,FR,43.66042,1.48264 43706,L’Isle-en-Dodon,4799,OCC,75,FR,43.38428,0.83513 43704,L’Isle-Jourdain,4799,OCC,75,FR,43.61218,1.08219 42634,La Barthe-de-Neste,4799,OCC,75,FR,43.08123,0.38438 42664,La Calmette,4799,OCC,75,FR,43.92283,4.26617 42665,La Canourgue,4799,OCC,75,FR,44.43133,3.21584 42669,La Cavalerie,4799,OCC,75,FR,44.00961,3.1584 42753,La Fouillade,4799,OCC,75,FR,44.23072,2.03989 42772,La Grande-Motte,4799,OCC,75,FR,43.56667,4.08333 48033,la Guingueta dIx,4799,OCC,75,FR,42.43416,1.94391 42794,La Loubière,4799,OCC,75,FR,44.37143,2.66825 42827,La Palme,4799,OCC,75,FR,42.97518,2.99243 48034,la Roca dAlbera,4799,OCC,75,FR,42.5213,2.93374 42871,La Salvetat-Peyralès,4799,OCC,75,FR,44.2194,2.20297 42872,La Salvetat-Saint-Gilles,4799,OCC,75,FR,43.57622,1.27192 42873,La Salvetat-sur-Agout,4799,OCC,75,FR,43.6,2.71667 42891,La Tour-du-Crieu,4799,OCC,75,FR,43.10471,1.65275 42894,La Tour-sur-Orb,4799,OCC,75,FR,43.65186,3.15071 42922,Labarthe-Rivière,4799,OCC,75,FR,43.081,0.67134 42923,Labarthe-sur-Lèze,4799,OCC,75,FR,43.45206,1.39968 42924,Labastide-Beauvoir,4799,OCC,75,FR,43.48148,1.66543 42925,Labastide-Rouairoux,4799,OCC,75,FR,43.47566,2.63929 42926,Labastide-Saint-Georges,4799,OCC,75,FR,43.69962,1.84585 42927,Labastide-Saint-Pierre,4799,OCC,75,FR,43.91769,1.36628 42928,Labastide-Saint-Sernin,4799,OCC,75,FR,43.73743,1.46985 42929,Labastidette,4799,OCC,75,FR,43.45952,1.24525 42939,Labège,4799,OCC,75,FR,43.53039,1.53596 42937,Labruguière,4799,OCC,75,FR,43.53858,2.26392 42942,Lacapelle-Marival,4799,OCC,75,FR,44.72773,1.92465 42943,Lacasse,4799,OCC,75,FR,43.39873,1.26951 42944,Lacaune,4799,OCC,75,FR,43.7066,2.69293 42947,Lacroix-Falgarde,4799,OCC,75,FR,43.49968,1.40985 42949,Lacrouzette,4799,OCC,75,FR,43.6603,2.34838 42953,Lafrançaise,4799,OCC,75,FR,44.12791,1.24141 42954,Lagardelle-sur-Lèze,4799,OCC,75,FR,43.41143,1.3892 42955,Lagarrigue,4799,OCC,75,FR,43.57765,2.27784 42963,Lagrave,4799,OCC,75,FR,43.89734,1.99268 42965,Laguiole,4799,OCC,75,FR,44.68465,2.84666 42971,Laissac,4799,OCC,75,FR,44.38085,2.82154 42973,Lalbenque,4799,OCC,75,FR,44.33929,1.54501 42977,Laloubère,4799,OCC,75,FR,43.2043,0.07296 42978,Lamagistère,4799,OCC,75,FR,44.12488,0.82486 42979,Lamalou-les-Bains,4799,OCC,75,FR,43.59786,3.08052 43023,Langlade,4799,OCC,75,FR,43.80284,4.25232 43025,Langogne,4799,OCC,75,FR,44.72726,3.85539 43035,Lannemezan,4799,OCC,75,FR,43.12517,0.38401 43046,Lansargues,4799,OCC,75,FR,43.65157,4.07495 43047,Lanta,4799,OCC,75,FR,43.56667,1.66667 43060,Lapeyrouse-Fossat,4799,OCC,75,FR,43.69973,1.51049 43075,Laroque,4799,OCC,75,FR,43.9232,3.72397 43077,Laroque-d’Olmes,4799,OCC,75,FR,42.96785,1.86677 43084,Lasalle,4799,OCC,75,FR,44.0453,3.85477 43091,Latour-Bas-Elne,4799,OCC,75,FR,42.60646,3.00201 43093,Lattes,4799,OCC,75,FR,43.56752,3.9046 43094,Laudun-lArdoise,4799,OCC,75,FR,44.1,4.66667 43095,Launac,4799,OCC,75,FR,43.74357,1.18172 43096,Launaguet,4799,OCC,75,FR,43.67818,1.45603 43097,Laure-Minervois,4799,OCC,75,FR,43.27106,2.52031 43098,Laurens,4799,OCC,75,FR,43.52238,3.19714 43104,Lautrec,4799,OCC,75,FR,43.70591,2.13925 43106,Lauzerte,4799,OCC,75,FR,44.25535,1.13817 43108,Laval-Pradel,4799,OCC,75,FR,44.20665,4.06591 43109,Lavalette,4799,OCC,75,FR,43.18428,2.26825 43113,Lavaur,4799,OCC,75,FR,43.69847,1.81858 43114,Lavelanet,4799,OCC,75,FR,42.93127,1.84656 43116,Lavernose-Lacasse,4799,OCC,75,FR,43.397,1.26205 43120,Lavérune,4799,OCC,75,FR,43.58639,3.80611 43118,Lavit,4799,OCC,75,FR,43.95674,0.9201 43126,Le Barcarès,4799,OCC,75,FR,42.78773,3.03656 43142,Le Bousquet-d’Orb,4799,OCC,75,FR,43.69242,3.16746 43151,Le Cailar,4799,OCC,75,FR,43.67923,4.23576 43156,Le Cap dAgde,4799,OCC,75,FR,43.27796,3.51357 43178,Le Crès,4799,OCC,75,FR,43.64807,3.93976 43185,Le Fauga,4799,OCC,75,FR,43.39619,1.29571 43190,Le Fousseret,4799,OCC,75,FR,43.28205,1.06624 43193,Le Garric,4799,OCC,75,FR,44.00932,2.16431 43200,Le Grau-du-Roi,4799,OCC,75,FR,43.53881,4.13559 43206,Le Houga,4799,OCC,75,FR,43.77464,-0.17833 43219,Le Malzieu-Ville,4799,OCC,75,FR,44.85699,3.33302 43236,Le Monastère,4799,OCC,75,FR,44.34165,2.57956 43279,Le Pouget,4799,OCC,75,FR,43.59195,3.52423 43280,Le Poujol-sur-Orb,4799,OCC,75,FR,43.57919,3.06156 43300,Le Sequestre,4799,OCC,75,FR,43.91076,2.11804 43301,Le Soler,4799,OCC,75,FR,42.68101,2.79335 43334,Le Vigan,4799,OCC,75,FR,44.74075,1.43963 43339,Lectoure,4799,OCC,75,FR,43.93464,0.62107 43683,Lédenon,4799,OCC,75,FR,43.91349,4.51444 43684,Lédignan,4799,OCC,75,FR,43.9869,4.10644 43685,Léguevin,4799,OCC,75,FR,43.60028,1.23236 43363,Les Angles,4799,OCC,75,FR,43.95806,4.76342 43403,Les Mages,4799,OCC,75,FR,44.22862,4.16946 43407,Les Matelles,4799,OCC,75,FR,43.72905,3.8136 43428,Les Salles-du-Gardon,4799,OCC,75,FR,44.2079,4.03689 43439,Lespignan,4799,OCC,75,FR,43.27366,3.17224 43440,Lespinasse,4799,OCC,75,FR,43.71206,1.38462 43445,Leucate,4799,OCC,75,FR,42.91056,3.02944 43693,Lévignac,4799,OCC,75,FR,43.66667,1.2 43456,Leyme,4799,OCC,75,FR,44.78622,1.89897 43695,Lézan,4799,OCC,75,FR,44.01667,4.05 43697,Lézat-sur-Lèze,4799,OCC,75,FR,43.27734,1.34686 43698,Lézignan-Corbières,4799,OCC,75,FR,43.19765,2.76142 43699,Lézignan-la-Cèbe,4799,OCC,75,FR,43.49368,3.43708 43462,Lherm,4799,OCC,75,FR,43.43127,1.22239 43470,Lieuran-lès-Béziers,4799,OCC,75,FR,43.4186,3.23719 43475,Lignan-sur-Orb,4799,OCC,75,FR,43.38462,3.16891 43496,Limoux,4799,OCC,75,FR,43.05487,2.22173 43509,Lisle-sur-Tarn,4799,OCC,75,FR,43.85249,1.81099 43518,Livinhac-le-Haut,4799,OCC,75,FR,44.59212,2.23117 43526,Llupia,4799,OCC,75,FR,42.62074,2.76924 43537,Lodève,4799,OCC,75,FR,43.73166,3.31941 43547,Lombez,4799,OCC,75,FR,43.47501,0.91119 43552,Longages,4799,OCC,75,FR,43.35398,1.23905 43597,Lot,4799,OCC,75,FR,44.62703,1.63461 43605,Loupian,4799,OCC,75,FR,43.44886,3.61381 43608,Lourdes,4799,OCC,75,FR,43.1,-0.05 43629,Luc-la-Primaube,4799,OCC,75,FR,44.31439,2.53552 43652,Lunel,4799,OCC,75,FR,43.67778,4.13611 43653,Lunel-Viel,4799,OCC,75,FR,43.6789,4.0925 43670,Luz-Saint-Sauveur,4799,OCC,75,FR,42.87191,-0.00323 43672,Luzech,4799,OCC,75,FR,44.47818,1.28704 43717,Magalas,4799,OCC,75,FR,43.47095,3.22338 43776,Manduel,4799,OCC,75,FR,43.81855,4.47247 43792,Maraussan,4799,OCC,75,FR,43.36895,3.15643 43801,Marciac,4799,OCC,75,FR,43.52321,0.16091 43804,Marcillac-Vallon,4799,OCC,75,FR,44.47464,2.46454 43814,Marcorignan,4799,OCC,75,FR,43.22634,2.92281 43837,Marguerittes,4799,OCC,75,FR,43.8596,4.44517 43871,Marquefave,4799,OCC,75,FR,43.31766,1.24661 43882,Marseillan,4799,OCC,75,FR,43.35618,3.52795 43906,Marsillargues,4799,OCC,75,FR,43.66424,4.17448 43908,Marssac-sur-Tarn,4799,OCC,75,FR,43.91768,2.02921 43909,Martel,4799,OCC,75,FR,44.93667,1.60851 43921,Martres-Tolosane,4799,OCC,75,FR,43.19929,1.01056 43922,Marvejols,4799,OCC,75,FR,44.55378,3.29137 43932,Masseube,4799,OCC,75,FR,43.42984,0.5781 43946,Maubourguet,4799,OCC,75,FR,43.46824,0.03578 43947,Mauguio,4799,OCC,75,FR,43.6181,4.00739 43953,Maureilhan,4799,OCC,75,FR,43.35,3.11667 43954,Maureillas-las-Illas,4799,OCC,75,FR,42.49014,2.80752 43962,Mauvezin,4799,OCC,75,FR,43.73048,0.8781 43971,Mazamet,4799,OCC,75,FR,43.49001,2.37304 43978,Mazères,4799,OCC,75,FR,43.25055,1.67728 43999,Mende,4799,OCC,75,FR,44.51849,3.50372 44013,Mercus-Garrabet,4799,OCC,75,FR,42.8779,1.629 44024,Merville,4799,OCC,75,FR,43.72354,1.29656 44058,Meynes,4799,OCC,75,FR,43.87974,4.55958 44061,Meyrueis,4799,OCC,75,FR,44.17737,3.43083 44453,Mèze,4799,OCC,75,FR,43.42504,3.6059 44108,Miélan,4799,OCC,75,FR,43.43054,0.30794 44071,Milhaud,4799,OCC,75,FR,43.78977,4.31035 44073,Millas,4799,OCC,75,FR,42.69203,2.69508 44074,Millau,4799,OCC,75,FR,44.09774,3.07777 44090,Mirande,4799,OCC,75,FR,43.51481,0.4041 44091,Mirandol-Bourgnounac,4799,OCC,75,FR,44.14273,2.16857 44096,Miremont,4799,OCC,75,FR,43.36995,1.41724 44098,Mirepoix,4799,OCC,75,FR,43.08773,1.8735 44099,Mireval,4799,OCC,75,FR,43.5086,3.8017 44118,Moissac,4799,OCC,75,FR,44.10236,1.0945 44123,Molières,4799,OCC,75,FR,44.19305,1.36318 44124,Molières-sur-Cèze,4799,OCC,75,FR,44.25989,4.15836 44131,Monclar-de-Quercy,4799,OCC,75,FR,43.96554,1.58587 44137,Mondonville,4799,OCC,75,FR,43.67296,1.28592 44141,Monestiés,4799,OCC,75,FR,44.06667,2.1 44147,Mons,4799,OCC,75,FR,43.6124,1.57207 44164,Montady,4799,OCC,75,FR,43.3359,3.1278 44165,Montagnac,4799,OCC,75,FR,43.48087,3.48312 44170,Montaigu-de-Quercy,4799,OCC,75,FR,44.33964,1.0169 44172,Montaigut-sur-Save,4799,OCC,75,FR,43.68947,1.23133 44176,Montans,4799,OCC,75,FR,43.867,1.88568 44178,Montaren-et-Saint-Médiers,4799,OCC,75,FR,44.02869,4.3803 44180,Montarnaud,4799,OCC,75,FR,43.64743,3.6969 44181,Montastruc-la-Conseillère,4799,OCC,75,FR,43.71982,1.59019 44183,Montauban,4799,OCC,75,FR,44.01819,1.36432 44191,Montbazens,4799,OCC,75,FR,44.47807,2.2298 44192,Montbazin,4799,OCC,75,FR,43.51667,3.69667 44194,Montberon,4799,OCC,75,FR,43.71586,1.47968 44196,Montbeton,4799,OCC,75,FR,44.01667,1.3 44198,Montblanc,4799,OCC,75,FR,43.39486,3.36752 44212,Montcuq,4799,OCC,75,FR,44.33838,1.2085 44216,Montech,4799,OCC,75,FR,43.95816,1.23204 44217,Monteils,4799,OCC,75,FR,44.16862,1.57608 44224,Montescot,4799,OCC,75,FR,42.60692,2.93318 44226,Montesquieu-Volvestre,4799,OCC,75,FR,43.20725,1.22862 44227,Montesquiu dAlbera,4799,OCC,75,FR,42.51798,2.88243 44231,Montfaucon,4799,OCC,75,FR,44.07245,4.75504 44239,Montferrier-sur-Lez,4799,OCC,75,FR,43.66742,3.85439 44243,Montfrin,4799,OCC,75,FR,43.87596,4.59959 44244,Montgaillard,4799,OCC,75,FR,42.93333,1.63333 44247,Montgiscard,4799,OCC,75,FR,43.46072,1.56739 44267,Montjoie-en-Couserans,4799,OCC,75,FR,43.0025,1.16 44268,Montjoire,4799,OCC,75,FR,43.76899,1.53362 44269,Montlaur,4799,OCC,75,FR,43.48935,1.56807 44298,Montpellier,4799,OCC,75,FR,43.61092,3.87723 44299,Montpeyroux,4799,OCC,75,FR,43.6959,3.50542 44300,Montpezat-de-Quercy,4799,OCC,75,FR,44.23876,1.47682 44303,Montrabé,4799,OCC,75,FR,43.64477,1.52384 44324,Montréal,4799,OCC,75,FR,43.1998,2.14122 44305,Montredon-Labessonnié,4799,OCC,75,FR,43.71723,2.32454 44326,Montréjeau,4799,OCC,75,FR,43.08555,0.5647 44318,Montricoux,4799,OCC,75,FR,44.07589,1.61946 44319,Montrodat,4799,OCC,75,FR,44.55038,3.32929 44406,Moussac,4799,OCC,75,FR,43.98119,4.22647 44407,Moussan,4799,OCC,75,FR,43.23091,2.95 44424,Moyrazès,4799,OCC,75,FR,44.34204,2.43933 44429,Mudaison,4799,OCC,75,FR,43.63333,4.03333 44440,Muret,4799,OCC,75,FR,43.46027,1.32571 44442,Murviel-lès-Béziers,4799,OCC,75,FR,43.43333,3.13333 44443,Murviel-lès-Montpellier,4799,OCC,75,FR,43.60528,3.7375 44444,Mus,4799,OCC,75,FR,43.73919,4.20257 44495,Nages-et-Solorgues,4799,OCC,75,FR,43.7901,4.23027 44496,Nailloux,4799,OCC,75,FR,43.35718,1.62302 44514,Narbonne,4799,OCC,75,FR,43.18396,3.00141 44518,Naucelle,4799,OCC,75,FR,44.1981,2.3431 44692,Nébian,4799,OCC,75,FR,43.60657,3.43133 44691,Nègrepelisse,4799,OCC,75,FR,44.07436,1.51978 44698,Névian,4799,OCC,75,FR,43.21238,2.90286 44700,Nîmes,4799,OCC,75,FR,43.83378,4.35962 44602,Nissan-lez-Enserune,4799,OCC,75,FR,43.28961,3.12705 44683,Noé,4799,OCC,75,FR,43.35814,1.27709 44609,Nogaro,4799,OCC,75,FR,43.75856,-0.03293 44621,Nohic,4799,OCC,75,FR,43.8897,1.43741 44715,Odos,4799,OCC,75,FR,43.19622,0.05693 44731,Olemps,4799,OCC,75,FR,44.34638,2.5514 44738,Olonzac,4799,OCC,75,FR,43.28294,2.73098 44741,Ondes,4799,OCC,75,FR,43.7825,1.30823 44765,Orgueil,4799,OCC,75,FR,43.90618,1.41071 44771,Orleix,4799,OCC,75,FR,43.27932,0.12033 44779,Ornaisons,4799,OCC,75,FR,43.1804,2.83689 44783,Orsan,4799,OCC,75,FR,44.13106,4.6652 44785,Ortaffa,4799,OCC,75,FR,42.57977,2.92653 44792,Osséja,4799,OCC,75,FR,42.41383,1.98192 44790,Ossun,4799,OCC,75,FR,43.18333,-0.03333 44809,Oursbelille,4799,OCC,75,FR,43.28508,0.03473 44814,Ouveillan,4799,OCC,75,FR,43.28915,2.97124 44833,Palaja,4799,OCC,75,FR,43.17363,2.38462 44835,Palau-del-Vidre,4799,OCC,75,FR,42.57162,2.96033 44836,Palavas-les-Flots,4799,OCC,75,FR,43.52805,3.92705 44838,Pamiers,4799,OCC,75,FR,43.1165,1.61079 44869,Paulhac,4799,OCC,75,FR,43.75639,1.55667 44871,Paulhan,4799,OCC,75,FR,43.53944,3.4576 44873,Pavie,4799,OCC,75,FR,43.60969,0.59143 44876,Payrin-Augmontel,4799,OCC,75,FR,43.5445,2.35406 45343,Péchabou,4799,OCC,75,FR,43.50241,1.50934 44879,Pechbonnieu,4799,OCC,75,FR,43.70242,1.46538 44892,Pennautier,4799,OCC,75,FR,43.24513,2.31892 45349,Pépieux,4799,OCC,75,FR,43.29735,2.67952 45360,Pérols,4799,OCC,75,FR,43.56313,3.95203 44899,Perpignan,4799,OCC,75,FR,42.69764,2.89541 44929,Peyrestortes,4799,OCC,75,FR,42.7548,2.85232 44931,Peyriac-de-Mer,4799,OCC,75,FR,43.0872,2.95831 44930,Peyriac-Minervois,4799,OCC,75,FR,43.29068,2.56613 45366,Pézenas,4799,OCC,75,FR,43.45953,3.42384 44936,Pezens,4799,OCC,75,FR,43.25446,2.26868 45367,Pézilla-la-Rivière,4799,OCC,75,FR,42.69536,2.77115 44944,Pia,4799,OCC,75,FR,42.7449,2.9193 44945,Pibrac,4799,OCC,75,FR,43.62042,1.2854 44954,Pierrefitte-Nestalas,4799,OCC,75,FR,42.96667,-0.06667 44968,Pignan,4799,OCC,75,FR,43.58365,3.75981 44970,Pinet,4799,OCC,75,FR,43.40556,3.51 44973,Pinsaguel,4799,OCC,75,FR,43.5104,1.38831 44993,Plaisance,4799,OCC,75,FR,43.60436,0.04615 44994,Plaisance-du-Touch,4799,OCC,75,FR,43.56566,1.29749 45143,Pollestres,4799,OCC,75,FR,42.642,2.87116 45159,Pomérols,4799,OCC,75,FR,43.39139,3.49944 45154,Pompertuzat,4799,OCC,75,FR,43.49277,1.51531 45157,Pompignan,4799,OCC,75,FR,43.81768,1.31209 45179,Pont-de-Larn,4799,OCC,75,FR,43.50412,2.40786 45182,Pont-de-Salars,4799,OCC,75,FR,44.2808,2.72783 45169,Pont-Saint-Esprit,4799,OCC,75,FR,44.25494,4.64736 45207,Ponteilla,4799,OCC,75,FR,42.62594,2.81335 45236,Port-la-Nouvelle,4799,OCC,75,FR,43.01991,3.04366 45239,Portel-des-Corbières,4799,OCC,75,FR,43.05,2.91667 45241,Portet-sur-Garonne,4799,OCC,75,FR,43.52333,1.40651 45244,Portiragnes,4799,OCC,75,FR,43.3046,3.33365 45246,Portvendres,4799,OCC,75,FR,42.51792,3.10553 45264,Poulx,4799,OCC,75,FR,43.90798,4.41629 45268,Poussan,4799,OCC,75,FR,43.48944,3.67083 45270,Pouzac,4799,OCC,75,FR,43.08606,0.13522 45272,Prades,4799,OCC,75,FR,42.61715,2.42208 45273,Prades-le-Lez,4799,OCC,75,FR,43.69754,3.86463 45274,Pradines,4799,OCC,75,FR,44.48341,1.40105 45278,Prats de Molló,4799,OCC,75,FR,42.40404,2.47928 45279,Prayssac,4799,OCC,75,FR,44.5044,1.18862 45282,Preignan,4799,OCC,75,FR,43.71177,0.62608 45318,Puicheric,4799,OCC,75,FR,43.2238,2.62455 45322,Puissalicon,4799,OCC,75,FR,43.45828,3.2369 45323,Puisserguier,4799,OCC,75,FR,43.36767,3.04047 45324,Pujaudran,4799,OCC,75,FR,43.58954,1.14977 45325,Pujaut,4799,OCC,75,FR,44.00404,4.77575 45336,Puy-l’Évêque,4799,OCC,75,FR,44.50483,1.14015 45337,Puygouzon,4799,OCC,75,FR,43.9,2.16667 45338,Puylaurens,4799,OCC,75,FR,43.57202,2.01227 45369,Quarante,4799,OCC,75,FR,43.34711,2.96228 45386,Quillan,4799,OCC,75,FR,42.87579,2.18176 45402,Quissac,4799,OCC,75,FR,43.91341,3.9992 45411,Rabastens,4799,OCC,75,FR,43.82512,1.72382 45412,Rabastens-de-Bigorre,4799,OCC,75,FR,43.38769,0.15122 45425,Ramonville-Saint-Agne,4799,OCC,75,FR,43.54618,1.47491 45683,Réalmont,4799,OCC,75,FR,43.77754,2.18885 45684,Réalville,4799,OCC,75,FR,44.11452,1.47998 45442,Redessan,4799,OCC,75,FR,43.83117,4.49771 45454,Remoulins,4799,OCC,75,FR,43.93949,4.56799 45695,Réquista,4799,OCC,75,FR,44.03325,2.53554 45466,Restinclières,4799,OCC,75,FR,43.72252,4.03476 45475,Revel,4799,OCC,75,FR,43.45812,2.00469 45480,Reynès,4799,OCC,75,FR,42.47702,2.7068 45484,Ria-Sirach,4799,OCC,75,FR,42.61667,2.4 45489,Ribaute-les-Tavernes,4799,OCC,75,FR,44.03724,4.08046 45502,Rieumes,4799,OCC,75,FR,43.41143,1.11702 45503,Rieupeyroux,4799,OCC,75,FR,44.30799,2.23819 45506,Rieux-Minervois,4799,OCC,75,FR,43.28194,2.58687 45507,Rieux-Volvestre,4799,OCC,75,FR,43.25,1.2 45510,Rignac,4799,OCC,75,FR,44.40853,2.29001 45525,Riscle,4799,OCC,75,FR,43.65633,-0.08607 45530,Rivesaltes,4799,OCC,75,FR,42.76945,2.87239 45545,Rochefort-du-Gard,4799,OCC,75,FR,43.97652,4.69023 45554,Rodez,4799,OCC,75,FR,44.35258,2.57338 45555,Rodilhan,4799,OCC,75,FR,43.82725,4.43088 45591,Roquecourbe,4799,OCC,75,FR,43.66442,2.29264 45594,Roquemaure,4799,OCC,75,FR,44.04944,4.7774 45596,Roquettes,4799,OCC,75,FR,43.49733,1.36848 45620,Rouffiac-Tolosan,4799,OCC,75,FR,43.66576,1.52521 45630,Roujan,4799,OCC,75,FR,43.50489,3.31071 45640,Rousson,4799,OCC,75,FR,44.19136,4.14786 45704,Sabran,4799,OCC,75,FR,44.1504,4.5482 45727,Saint-Affrique,4799,OCC,75,FR,43.95575,2.88915 45735,Saint-Alban,4799,OCC,75,FR,43.6927,1.4102 45738,Saint-Alban-sur-Limagnole,4799,OCC,75,FR,44.781,3.38793 45739,Saint-Alexandre,4799,OCC,75,FR,44.22741,4.62081 45746,Saint-Amans-Soult,4799,OCC,75,FR,43.47697,2.49076 45747,Saint-Amans-Valtoret,4799,OCC,75,FR,43.48071,2.49095 45751,Saint-Ambroix,4799,OCC,75,FR,44.25893,4.19833 45758,Saint-André-de-Sangonis,4799,OCC,75,FR,43.64753,3.50209 45795,Saint-Aunès,4799,OCC,75,FR,43.64083,3.96583 45807,Saint-Bauzille-de-Putois,4799,OCC,75,FR,43.89454,3.7358 45811,Saint-Benoît-de-Carmaux,4799,OCC,75,FR,44.05037,2.12911 45834,Saint-Brès,4799,OCC,75,FR,43.66742,4.03105 45892,Saint-Céré,4799,OCC,75,FR,44.85726,1.89415 45848,Saint-Chaptes,4799,OCC,75,FR,43.97172,4.27812 45851,Saint-Chinian,4799,OCC,75,FR,43.42238,2.94643 45853,Saint-Christol,4799,OCC,75,FR,43.72805,4.07991 45854,Saint-Christol-lès-Alès,4799,OCC,75,FR,44.08256,4.07506 45856,Saint-Christophe-Vallon,4799,OCC,75,FR,44.47072,2.41184 45871,Saint-Clément-de-Rivière,4799,OCC,75,FR,43.68333,3.83333 45881,Saint-Cyprien-Plage,4799,OCC,75,FR,42.63229,3.03333 45918,Saint-Drézéry,4799,OCC,75,FR,43.72991,3.9762 45924,Saint-Estève,4799,OCC,75,FR,42.71175,2.8449 45926,Saint-Etienne-de-Tulmont,4799,OCC,75,FR,44.05,1.46667 45946,Saint-Féliu-d’Avall,4799,OCC,75,FR,42.68117,2.73813 45948,Saint-Félix-Lauragais,4799,OCC,75,FR,43.44863,1.88814 45935,Saint-Florent-sur-Auzonnet,4799,OCC,75,FR,44.24032,4.11252 45951,Saint-Gaudens,4799,OCC,75,FR,43.10809,0.72345 46043,Saint-Gély-du-Fesc,4799,OCC,75,FR,43.69272,3.80492 45964,Saint-Geniès-Bellevue,4799,OCC,75,FR,43.68409,1.48693 45965,Saint-Geniès-de-Comolas,4799,OCC,75,FR,44.06617,4.72157 45966,Saint-Geniès-de-Fontedit,4799,OCC,75,FR,43.46667,3.18333 45967,Saint-Geniès-de-Malgoirès,4799,OCC,75,FR,43.95,4.21667 45968,Saint-Geniès-des-Mourgues,4799,OCC,75,FR,43.6978,4.0361 45958,Saint-Geniez-d’Olt,4799,OCC,75,FR,44.46561,2.97261 46044,Saint-Génis-des-Fontaines,4799,OCC,75,FR,42.54325,2.9206 45975,Saint-Georges-de-Luzençon,4799,OCC,75,FR,44.06471,2.98597 46031,Saint-Gervasy,4799,OCC,75,FR,43.87687,4.46588 46034,Saint-Gilles,4799,OCC,75,FR,43.67656,4.43024 46038,Saint-Girons,4799,OCC,75,FR,42.98491,1.14587 46054,Saint-Hilaire-de-Brethmas,4799,OCC,75,FR,44.08003,4.12478 46067,Saint-Hippolyte,4799,OCC,75,FR,42.7855,2.9662 46071,Saint-Hippolyte-du-Fort,4799,OCC,75,FR,43.96362,3.85572 46081,Saint-Jean,4799,OCC,75,FR,43.6642,1.49941 46090,Saint-Jean-de-Fos,4799,OCC,75,FR,43.701,3.55171 46104,Saint-Jean-de-Védas,4799,OCC,75,FR,43.57759,3.82603 46110,Saint-Jean-du-Falga,4799,OCC,75,FR,43.08647,1.6278 46111,Saint-Jean-du-Gard,4799,OCC,75,FR,44.10523,3.88566 46126,Saint-Jory,4799,OCC,75,FR,43.74146,1.37089 46165,Saint-Juéry,4799,OCC,75,FR,43.95,2.21667 46140,Saint-Julien-de-Peyrolas,4799,OCC,75,FR,44.28837,4.56507 46146,Saint-Julien-les-Rosiers,4799,OCC,75,FR,44.17445,4.10803 46151,Saint-Just,4799,OCC,75,FR,43.65806,4.11472 46170,Saint-Lary-Soulan,4799,OCC,75,FR,42.81713,0.32238 46180,Saint-Laurent-de-la-Salanque,4799,OCC,75,FR,42.7727,2.98998 46181,Saint-Laurent-des-Arbres,4799,OCC,75,FR,44.05493,4.70026 46194,Saint-Lizier,4799,OCC,75,FR,43.00183,1.13686 46200,Saint-Loup-Cammas,4799,OCC,75,FR,43.69767,1.48127 46208,Saint-Lys,4799,OCC,75,FR,43.51127,1.17557 46232,Saint-Mamert-du-Gard,4799,OCC,75,FR,43.88835,4.18725 46249,Saint-Marcel-sur-Aude,4799,OCC,75,FR,43.25,2.93333 46274,Saint-Martin-de-Londres,4799,OCC,75,FR,43.7904,3.73066 46280,Saint-Martin-de-Valgalgues,4799,OCC,75,FR,44.16315,4.08364 46263,Saint-Martin-Lalande,4799,OCC,75,FR,43.29928,2.02004 46306,Saint-Mathieu-de-Tréviers,4799,OCC,75,FR,43.76795,3.85814 46357,Saint-Nauphary,4799,OCC,75,FR,43.96712,1.42549 46359,Saint-Nazaire,4799,OCC,75,FR,42.6679,2.99168 46360,Saint-Nazaire-d’Aude,4799,OCC,75,FR,43.24518,2.89443 46366,Saint-Nicolas-de-la-Grave,4799,OCC,75,FR,44.06417,1.0228 46375,Saint-Orens-de-Gameville,4799,OCC,75,FR,43.55402,1.53411 46395,Saint-Pargoire,4799,OCC,75,FR,43.52766,3.5187 46404,Saint-Paul-Cap-de-Joux,4799,OCC,75,FR,43.64791,1.97559 46406,Saint-Paul-de-Fenouillet,4799,OCC,75,FR,42.80938,2.50374 46407,Saint-Paul-de-Jarrat,4799,OCC,75,FR,42.91404,1.65437 46418,Saint-Paulet-de-Caisson,4799,OCC,75,FR,44.26055,4.59785 46480,Saint-Pé-de-Bigorre,4799,OCC,75,FR,43.10369,-0.15943 46458,Saint-Pons-de-Thomières,4799,OCC,75,FR,43.48333,2.76667 46460,Saint-Porquier,4799,OCC,75,FR,44.00344,1.17932 46470,Saint-Privat-des-Vieux,4799,OCC,75,FR,44.14415,4.12988 46490,Saint-Quentin-la-Poterie,4799,OCC,75,FR,44.04392,4.44432 46531,Saint-Sauveur,4799,OCC,75,FR,43.7483,1.40085 46566,Saint-Sulpice-la-Pointe,4799,OCC,75,FR,43.775,1.68511 46569,Saint-Sulpice-sur-Lèze,4799,OCC,75,FR,43.33076,1.32091 46580,Saint-Thibéry,4799,OCC,75,FR,43.39657,3.41774 46609,Saint-Victor-la-Coste,4799,OCC,75,FR,44.06295,4.64238 46683,Sainte-Foy-de-Peyrolières,4799,OCC,75,FR,43.49262,1.14477 46694,Sainte-Geneviève-sur-Argence,4799,OCC,75,FR,44.80222,2.75954 46709,Sainte-Marie-Plage,4799,OCC,75,FR,42.72498,3.03751 46722,Sainte-Radegonde,4799,OCC,75,FR,44.33743,2.62672 46892,Saïx,4799,OCC,75,FR,43.58333,2.18333 46744,Saleilles,4799,OCC,75,FR,42.65418,2.95309 46749,Salies-du-Salat,4799,OCC,75,FR,43.10074,0.95866 46753,Salindres,4799,OCC,75,FR,44.17174,4.1602 46762,Salles-Curan,4799,OCC,75,FR,44.1822,2.78821 46763,Salles-la-Source,4799,OCC,75,FR,44.43505,2.51283 46768,Salses-le-Château,4799,OCC,75,FR,42.83333,2.91667 46769,Salviac,4799,OCC,75,FR,44.6808,1.26506 46771,Samatan,4799,OCC,75,FR,43.49286,0.92976 46792,Sant Andreu de Sureda,4799,OCC,75,FR,42.55201,2.97129 46793,Sant Joan de Pladecorts,4799,OCC,75,FR,42.51069,2.79091 46794,Sant Llorenç de Cerdans,4799,OCC,75,FR,42.38473,2.6132 46831,Saubens,4799,OCC,75,FR,43.47984,1.35189 46854,Saussan,4799,OCC,75,FR,43.5722,3.775 46859,Sauve,4799,OCC,75,FR,43.9415,3.94903 46861,Sauveterre,4799,OCC,75,FR,44.02282,4.79347 46864,Sauvian,4799,OCC,75,FR,43.29293,3.26024 46873,Saverdun,4799,OCC,75,FR,43.23526,1.57398 46890,Saze,4799,OCC,75,FR,43.9434,4.68096 47132,Sébazac-Concourès,4799,OCC,75,FR,44.40484,2.60324 46921,Seilh,4799,OCC,75,FR,43.69469,1.35509 46929,Seissan,4799,OCC,75,FR,43.49215,0.5925 47137,Sémalens,4799,OCC,75,FR,43.59225,2.11208 47138,Séméac,4799,OCC,75,FR,43.22915,0.10602 46949,Septfonds,4799,OCC,75,FR,44.17813,1.61806 47144,Sérignan,4799,OCC,75,FR,43.27873,3.27712 46960,Sernhac,4799,OCC,75,FR,43.91116,4.55039 46972,Servian,4799,OCC,75,FR,43.42716,3.30032 47129,Sète,4799,OCC,75,FR,43.4028,3.69278 47150,Sévérac-le-Château,4799,OCC,75,FR,44.32429,3.05929 46984,Seysses,4799,OCC,75,FR,43.49801,1.31081 46991,Sigean,4799,OCC,75,FR,43.02777,2.97916 47036,Sommières,4799,OCC,75,FR,43.78534,4.08973 47050,Sorède,4799,OCC,75,FR,42.53069,2.95708 47051,Sorèze,4799,OCC,75,FR,43.45241,2.06799 47055,Soual,4799,OCC,75,FR,43.5553,2.11679 47063,Soues,4799,OCC,75,FR,43.20736,0.09874 47067,Souillac,4799,OCC,75,FR,44.8972,1.47224 47116,Sumène,4799,OCC,75,FR,43.98057,3.71575 47126,Sussargues,4799,OCC,75,FR,43.7125,4.0031 47177,Tarascon-sur-Ariège,4799,OCC,75,FR,42.84545,1.60332 47178,Tarbes,4799,OCC,75,FR,43.23333,0.08333 47180,Tarn,4799,OCC,75,FR,43.7817,2.16317 47191,Tavel,4799,OCC,75,FR,44.0127,4.69835 47215,Teyran,4799,OCC,75,FR,43.68528,3.92889 47273,Théza,4799,OCC,75,FR,42.63797,2.95108 47274,Thézan-lès-Béziers,4799,OCC,75,FR,43.41667,3.16667 47259,Thuir,4799,OCC,75,FR,42.6329,2.75471 47304,Torreilles,4799,OCC,75,FR,42.75433,2.99292 47315,Toulouges,4799,OCC,75,FR,42.66961,2.83008 47316,Toulouse,4799,OCC,75,FR,43.60426,1.44367 47319,Tourbes,4799,OCC,75,FR,43.44615,3.37852 47323,Tournay,4799,OCC,75,FR,43.18438,0.24454 47324,Tournefeuille,4799,OCC,75,FR,43.58872,1.31922 47389,Trèbes,4799,OCC,75,FR,43.21064,2.44165 47361,Tresques,4799,OCC,75,FR,44.10689,4.58739 47370,Trie-sur-Baïse,4799,OCC,75,FR,43.33333,0.36667 47382,Trouillas,4799,OCC,75,FR,42.61089,2.80821 47420,Uchaud,4799,OCC,75,FR,43.75857,4.26843 47448,Uzès,4799,OCC,75,FR,44.01362,4.41529 47452,Vacquiers,4799,OCC,75,FR,43.77667,1.48127 47455,Vailhauquès,4799,OCC,75,FR,43.67159,3.72042 47466,Valady,4799,OCC,75,FR,44.45633,2.42746 47470,Valence,4799,OCC,75,FR,44.10823,0.89101 47472,Valence-d’Albigeois,4799,OCC,75,FR,44.01928,2.40534 47473,Valence-sur-Baïse,4799,OCC,75,FR,43.8827,0.38111 47480,Valergues,4799,OCC,75,FR,43.66824,4.06124 47484,Vallabrègues,4799,OCC,75,FR,43.85307,4.62662 47487,Valleraugue,4799,OCC,75,FR,44.0813,3.64154 47498,Valras-Plage,4799,OCC,75,FR,43.24808,3.29032 47499,Valros,4799,OCC,75,FR,43.41956,3.36506 47518,Varilhes,4799,OCC,75,FR,43.04514,1.62805 47544,Vauvert,4799,OCC,75,FR,43.69529,4.27705 47550,Vayrac,4799,OCC,75,FR,44.95337,1.70358 47566,Vendargues,4799,OCC,75,FR,43.65833,3.97 47577,Vendres,4799,OCC,75,FR,43.26977,3.22341 47927,Vénéjan,4799,OCC,75,FR,44.19729,4.65422 47581,Venerque,4799,OCC,75,FR,43.43457,1.44588 47594,Verdun-sur-Garonne,4799,OCC,75,FR,43.85446,1.23425 47597,Verfeil,4799,OCC,75,FR,43.65781,1.6634 47601,Vergèze,4799,OCC,75,FR,43.74404,4.22109 47610,Vernet,4799,OCC,75,FR,43.43333,1.41667 47611,Vernet-les-Bains,4799,OCC,75,FR,42.54834,2.38717 47616,Verniolle,4799,OCC,75,FR,43.08162,1.64904 47631,Vers-Pont-du-Gard,4799,OCC,75,FR,43.96667,4.53333 47650,Vestric-et-Candiac,4799,OCC,75,FR,43.74061,4.25914 47933,Vézénobres,4799,OCC,75,FR,44.0513,4.13775 47661,Vias,4799,OCC,75,FR,43.31156,3.41774 47664,Vic-en-Bigorre,4799,OCC,75,FR,43.38682,0.05471 47663,Vic-Fezensac,4799,OCC,75,FR,43.77183,0.31368 47665,Vic-la-Gardiole,4799,OCC,75,FR,43.4908,3.7975 47676,Vieille-Toulouse,4799,OCC,75,FR,43.52366,1.4423 47680,Vielmur-sur-Agout,4799,OCC,75,FR,43.61667,2.1 47704,Vilallonga dels Monts,4799,OCC,75,FR,42.52557,2.90434 47715,Villaudric,4799,OCC,75,FR,43.83044,1.43166 47735,Villefranche-dAlbigeois,4799,OCC,75,FR,43.89635,2.33022 47736,Villefranche-de-Lauragais,4799,OCC,75,FR,43.4,1.71694 47737,Villefranche-de-Rouergue,4799,OCC,75,FR,44.35166,2.03702 47743,Villegailhenc,4799,OCC,75,FR,43.26867,2.35469 47748,Villelongue-de-la-Salanque,4799,OCC,75,FR,42.72637,2.9824 47753,Villemolaque,4799,OCC,75,FR,42.58815,2.8389 47755,Villemoustaussou,4799,OCC,75,FR,43.25186,2.36552 47756,Villemur-sur-Tarn,4799,OCC,75,FR,43.86708,1.50281 47761,Villeneuve,4799,OCC,75,FR,44.43333,2.03333 47771,Villeneuve-d’Olmes,4799,OCC,75,FR,42.9061,1.81937 47770,Villeneuve-de-la-Raho,4799,OCC,75,FR,42.63596,2.91651 47769,Villeneuve-de-Rivière,4799,OCC,75,FR,43.12829,0.66351 47772,Villeneuve-la-Comptal,4799,OCC,75,FR,43.28833,1.91773 47775,Villeneuve-la-Rivière,4799,OCC,75,FR,42.69366,2.80294 47779,Villeneuve-lès-Avignon,4799,OCC,75,FR,43.9684,4.7963 47781,Villeneuve-lès-Béziers,4799,OCC,75,FR,43.31517,3.28059 47780,Villeneuve-lès-Bouloc,4799,OCC,75,FR,43.76769,1.42278 47782,Villeneuve-lès-Maguelone,4799,OCC,75,FR,43.53333,3.86667 47765,Villeneuve-Tolosane,4799,OCC,75,FR,43.52316,1.34102 47787,Villenouvelle,4799,OCC,75,FR,43.43581,1.66279 47791,Villepinte,4799,OCC,75,FR,43.28213,2.0876 47816,Villetelle,4799,OCC,75,FR,43.73105,4.13658 47820,Villeveyrac,4799,OCC,75,FR,43.50095,3.60723 47821,Villevieille,4799,OCC,75,FR,43.78795,4.09756 47842,Vinassan,4799,OCC,75,FR,43.20443,3.07463 47851,Vinça,4799,OCC,75,FR,42.64486,2.5283 47884,Viviers-lès-Montagnes,4799,OCC,75,FR,43.55474,2.17672 47885,Viviez,4799,OCC,75,FR,44.55678,2.21649 39234,Abbaretz,4802,PDL,75,FR,47.55314,-1.532 39265,Ahuillé,4802,PDL,75,FR,48.02086,-0.86906 39270,Aigné,4802,PDL,75,FR,48.06471,0.11908 39272,Aigrefeuille-sur-Maine,4802,PDL,75,FR,47.07888,-1.40254 39297,Aizenay,4802,PDL,75,FR,46.74004,-1.60834 39330,Allonnes,4802,PDL,75,FR,47.29338,0.02458 39357,Ambrières-les-Vallées,4802,PDL,75,FR,48.4,-0.63333 39371,Ancenis,4802,PDL,75,FR,47.36667,-1.16667 39378,Andard,4802,PDL,75,FR,47.45659,-0.39752 39386,Andouillé,4802,PDL,75,FR,48.17685,-0.78364 39389,Andrezé,4802,PDL,75,FR,47.17155,-0.95239 39395,Anetz,4802,PDL,75,FR,47.38059,-1.10583 39396,Angers,4802,PDL,75,FR,47.47381,-0.54774 39402,Angles,4802,PDL,75,FR,46.40839,-1.40389 39433,Antigny,4802,PDL,75,FR,46.62095,-0.76988 39445,Apremont,4802,PDL,75,FR,46.7485,-1.74075 39538,Arçonnay,4802,PDL,75,FR,48.39678,0.0862 39484,Argentré,4802,PDL,75,FR,48.08362,-0.6415 39499,Arnage,4802,PDL,75,FR,47.92616,0.18782 39505,Aron,4802,PDL,75,FR,48.298,-0.5598 39525,Arthon-en-Retz,4802,PDL,75,FR,47.11586,-1.9426 39554,Assérac,4802,PDL,75,FR,47.42881,-2.38916 39583,Aubigné-Racan,4802,PDL,75,FR,47.69091,0.2687 39579,Aubigny,4802,PDL,75,FR,46.59653,-1.45364 39641,Auvers-le-Hamon,4802,PDL,75,FR,47.90246,-0.3517 39668,Avessac,4802,PDL,75,FR,47.65324,-1.98961 39680,Avrillé,4802,PDL,75,FR,47.5,-0.58333 39697,Azé,4802,PDL,75,FR,47.8222,-0.68333 39739,Bais,4802,PDL,75,FR,48.2528,-0.36493 39754,Ballon,4802,PDL,75,FR,48.17317,0.23814 39755,Ballots,4802,PDL,75,FR,47.89617,-1.04759 39777,Barbâtre,4802,PDL,75,FR,46.94116,-2.17752 39771,Barbechat,4802,PDL,75,FR,47.2775,-1.28524 39798,Basse-Goulaine,4802,PDL,75,FR,47.21167,-1.46748 39807,Batz-sur-Mer,4802,PDL,75,FR,47.2775,-2.48027 39810,Baugé-en-Anjou,4802,PDL,75,FR,47.54447,-0.10653 39815,Bauné,4802,PDL,75,FR,47.49954,-0.31906 39833,Bazoges-en-Pareds,4802,PDL,75,FR,46.65702,-0.91654 39835,Bazouges-sur-le-Loir,4802,PDL,75,FR,47.68928,-0.16883 39842,Beaucouzé,4802,PDL,75,FR,47.47444,-0.63016 39845,Beaufay,4802,PDL,75,FR,48.14664,0.36224 39847,Beaufort-en-Vallée,4802,PDL,75,FR,47.43965,-0.2189 39852,Beaulieu-sous-la-Roche,4802,PDL,75,FR,46.67647,-1.61129 39854,Beaulieu-sur-Layon,4802,PDL,75,FR,47.31095,-0.58988 39873,Beaumont-sur-Sarthe,4802,PDL,75,FR,48.22772,0.13186 39876,Beaupréau,4802,PDL,75,FR,47.20464,-0.98703 39883,Beaurepaire,4802,PDL,75,FR,46.90977,-1.08928 39893,Beauvoir-sur-Mer,4802,PDL,75,FR,46.91274,-2.04156 40411,Bécon-les-Granits,4802,PDL,75,FR,47.50134,-0.8 40419,Bégrolles-en-Mauges,4802,PDL,75,FR,47.14048,-0.94 39926,Belleville-sur-Vie,4802,PDL,75,FR,46.78369,-1.42905 39929,Belligné,4802,PDL,75,FR,47.46774,-1.0278 39938,Benet,4802,PDL,75,FR,46.36972,-0.59333 39972,Besné,4802,PDL,75,FR,47.4,-2.08976 39983,Bessé-sur-Braye,4802,PDL,75,FR,47.83333,0.75 40046,Blain,4802,PDL,75,FR,47.47655,-1.76285 40051,Blaison-Gohier,4802,PDL,75,FR,47.39951,-0.37723 40087,Bois-de-Cené,4802,PDL,75,FR,46.93689,-1.88656 40110,Bonchamp-lès-Laval,4802,PDL,75,FR,48.07357,-0.7 40130,Bonnétable,4802,PDL,75,FR,48.17908,0.4257 40148,Bouaye,4802,PDL,75,FR,47.14263,-1.69306 40152,Bouchemaine,4802,PDL,75,FR,47.42234,-0.60888 40154,Boufféré,4802,PDL,75,FR,46.96179,-1.33965 40156,Bouguenais,4802,PDL,75,FR,47.17762,-1.62143 40160,Bouin,4802,PDL,75,FR,46.97314,-1.9983 40175,Bouloire,4802,PDL,75,FR,47.97385,0.55009 40185,Bourg de Joué-sur-Erdre,4802,PDL,75,FR,47.49596,-1.42047 40202,Bourgneuf-en-Retz,4802,PDL,75,FR,47.04122,-1.95019 40209,Bournezeau,4802,PDL,75,FR,46.63714,-1.17107 40217,Boussay,4802,PDL,75,FR,47.04476,-1.18476 40230,Bouvron,4802,PDL,75,FR,47.41726,-1.84679 40235,Bouzillé,4802,PDL,75,FR,47.3375,-1.11143 40248,Brain-sur-Allonnes,4802,PDL,75,FR,47.30325,0.06514 40250,Brains,4802,PDL,75,FR,47.1685,-1.7229 40284,Bretignolles-sur-Mer,4802,PDL,75,FR,46.63333,-1.86667 40286,Brette-les-Pins,4802,PDL,75,FR,47.91062,0.33649 40364,Brézé,4802,PDL,75,FR,47.17357,-0.06059 40318,Briollay,4802,PDL,75,FR,47.56478,-0.50681 40319,Brion,4802,PDL,75,FR,47.44121,-0.15616 40326,Brissac-Quincé,4802,PDL,75,FR,47.35575,-0.44924 40366,Brûlon,4802,PDL,75,FR,47.96667,-0.23333 40498,Campbon,4802,PDL,75,FR,47.4131,-1.96857 40507,Candé,4802,PDL,75,FR,47.56158,-1.03619 40520,Cantenay-Épinard,4802,PDL,75,FR,47.53503,-0.56899 40557,Carquefou,4802,PDL,75,FR,47.29821,-1.49024 40572,Casson,4802,PDL,75,FR,47.38761,-1.55654 41394,Cérans-Foulletourte,4802,PDL,75,FR,47.82651,0.07724 40673,Chacé,4802,PDL,75,FR,47.21435,-0.07179 40677,Chailland,4802,PDL,75,FR,48.22516,-0.87387 40682,Chaillé-les-Marais,4802,PDL,75,FR,46.39628,-1.02369 40692,Challans,4802,PDL,75,FR,46.84363,-1.87491 40693,Challes,4802,PDL,75,FR,47.93033,0.41511 40699,Chalonnes-sur-Loire,4802,PDL,75,FR,47.3516,-0.7631 40712,Chambretaud,4802,PDL,75,FR,46.92166,-0.96405 40727,Champagné,4802,PDL,75,FR,48.02185,0.33096 40728,Champagné-les-Marais,4802,PDL,75,FR,46.38081,-1.12112 40735,Champfleur,4802,PDL,75,FR,48.38668,0.12942 40743,Champigné,4802,PDL,75,FR,47.66332,-0.5716 40753,Champtocé-sur-Loire,4802,PDL,75,FR,47.41239,-0.86452 40752,Champtoceaux,4802,PDL,75,FR,47.33476,-1.26131 40763,Changé,4802,PDL,75,FR,48.09918,-0.79292 40776,Chantonnay,4802,PDL,75,FR,46.68702,-1.05024 40948,Château-d’Olonne,4802,PDL,75,FR,46.50382,-1.74097 40947,Château-du-Loir,4802,PDL,75,FR,47.69492,0.41851 40939,Château-Gontier,4802,PDL,75,FR,47.82872,-0.70265 40940,Château-Guibert,4802,PDL,75,FR,46.5811,-1.23656 40952,Châteaubriant,4802,PDL,75,FR,47.71712,-1.37624 40975,Châteauneuf-sur-Sarthe,4802,PDL,75,FR,47.68145,-0.48652 40834,Chauché,4802,PDL,75,FR,46.82963,-1.27178 40838,Chaudron-en-Mauges,4802,PDL,75,FR,47.28809,-0.98547 40854,Chauvé,4802,PDL,75,FR,47.15174,-1.98489 40856,Chavagnes-en-Paillers,4802,PDL,75,FR,46.89167,-1.25214 40871,Chemazé,4802,PDL,75,FR,47.7869,-0.77523 41011,Chéméré,4802,PDL,75,FR,47.11667,-1.91667 40872,Chemillé-Melay,4802,PDL,75,FR,47.21476,-0.72488 41018,Chênehutte-Trèves-Cunault,4802,PDL,75,FR,47.31084,-0.16042 40885,Cherré,4802,PDL,75,FR,48.1729,0.65781 40924,Cholet,4802,PDL,75,FR,47.05905,-0.87953 41048,Clermont-Créans,4802,PDL,75,FR,47.71831,-0.01459 41056,Clisson,4802,PDL,75,FR,47.08714,-1.28286 41293,Coëx,4802,PDL,75,FR,46.69808,-1.75956 41114,Combrée,4802,PDL,75,FR,47.70446,-1.03003 41119,Commequiers,4802,PDL,75,FR,46.76049,-1.83901 41120,Commer,4802,PDL,75,FR,48.23333,-0.61667 41146,Congrier,4802,PDL,75,FR,47.80989,-1.117 41148,Conlie,4802,PDL,75,FR,48.12334,-0.01739 41151,Connerré,4802,PDL,75,FR,48.05698,0.49344 41152,Conquereuil,4802,PDL,75,FR,47.62524,-1.75105 41172,Corcoué-sur-Logne,4802,PDL,75,FR,46.96667,-1.58333 41173,Cordemais,4802,PDL,75,FR,47.29107,-1.87869 41197,Corné,4802,PDL,75,FR,47.47091,-0.34992 41198,Coron,4802,PDL,75,FR,47.12726,-0.64512 41203,Corsept,4802,PDL,75,FR,47.27703,-2.05904 41206,Corzé,4802,PDL,75,FR,47.55956,-0.39062 41210,Cossé-le-Vivien,4802,PDL,75,FR,47.94599,-0.91185 41288,Couëron,4802,PDL,75,FR,47.21508,-1.72171 41223,Couffé,4802,PDL,75,FR,47.3912,-1.29321 41228,Coulaines,4802,PDL,75,FR,48.02409,0.20411 41230,Coulans-sur-Gée,4802,PDL,75,FR,48.0207,0.00974 41248,Courcité,4802,PDL,75,FR,48.30633,-0.24961 41298,Craon,4802,PDL,75,FR,47.84687,-0.94929 41328,Crossac,4802,PDL,75,FR,47.41119,-2.16952 41362,Cugand,4802,PDL,75,FR,47.06318,-1.2527 41440,Daumeray,4802,PDL,75,FR,47.7007,-0.36119 41453,Denée,4802,PDL,75,FR,47.37885,-0.60816 41633,Département de la Vendée,4802,PDL,75,FR,46.64169,-1.30407 41606,Département de Maine-et-Loire,4802,PDL,75,FR,47.5,-0.33333 41454,Derval,4802,PDL,75,FR,47.66724,-1.6699 41494,Distré,4802,PDL,75,FR,47.22281,-0.11071 41505,Dollon,4802,PDL,75,FR,48.03879,0.58686 41525,Dompierre-sur-Yon,4802,PDL,75,FR,46.73857,-1.38463 41531,Donges,4802,PDL,75,FR,47.31824,-2.07538 41562,Doué-la-Fontaine,4802,PDL,75,FR,47.19372,-0.27492 41567,Drain,4802,PDL,75,FR,47.33655,-1.20773 41571,Drefféac,4802,PDL,75,FR,47.47464,-2.05774 41596,Durtal,4802,PDL,75,FR,47.67247,-0.23393 48045,Écommoy,4802,PDL,75,FR,47.82565,0.27422 48048,Écouflant,4802,PDL,75,FR,47.53101,-0.5278 41679,Entrammes,4802,PDL,75,FR,47.99759,-0.71399 41689,Erbray,4802,PDL,75,FR,47.65492,-1.31783 41698,Ernée,4802,PDL,75,FR,48.29764,-0.93143 48105,Étival-lès-le-Mans,4802,PDL,75,FR,47.95,0.08333 48112,Étriché,4802,PDL,75,FR,47.65087,-0.44377 48124,Évron,4802,PDL,75,FR,48.15642,-0.3997 41768,Falleron,4802,PDL,75,FR,46.8816,-1.70208 41788,Fay-de-Bretagne,4802,PDL,75,FR,47.41453,-1.79155 42001,Fégréac,4802,PDL,75,FR,47.58476,-2.0441 41798,Feneu,4802,PDL,75,FR,47.57211,-0.59422 41821,Fillé,4802,PDL,75,FR,47.90011,0.12543 41898,Fontenay-le-Comte,4802,PDL,75,FR,46.4672,-0.80645 41905,Fontevraud-lAbbaye,4802,PDL,75,FR,47.18333,0.05 41926,Fougerolles-du-Plessis,4802,PDL,75,FR,48.47424,-0.97255 41940,Foussais-Payré,4802,PDL,75,FR,46.53333,-0.68333 41954,Freigné,4802,PDL,75,FR,47.54858,-1.12274 41957,Fresnay-sur-Sarthe,4802,PDL,75,FR,48.28199,0.02288 41969,Froidfond,4802,PDL,75,FR,46.86898,-1.7574 41978,Frossay,4802,PDL,75,FR,47.24451,-1.93557 42064,Geneston,4802,PDL,75,FR,47.05639,-1.51139 42067,Gennes,4802,PDL,75,FR,47.3401,-0.23149 42080,Gesté,4802,PDL,75,FR,47.18179,-1.10917 42300,Gétigné,4802,PDL,75,FR,47.0765,-1.2481 42109,Givrand,4802,PDL,75,FR,46.67083,-1.88612 42137,Gorges,4802,PDL,75,FR,47.09917,-1.30024 42138,Gorron,4802,PDL,75,FR,48.41095,-0.81267 42203,Grez-Neuville,4802,PDL,75,FR,47.60288,-0.68193 42225,Grosbreuil,4802,PDL,75,FR,46.53946,-1.61655 42277,Guécélard,4802,PDL,75,FR,47.87751,0.1293 42280,Guémené-Penfao,4802,PDL,75,FR,47.63333,-1.83333 42241,Guenrouet,4802,PDL,75,FR,47.51881,-1.95381 42284,Guérande,4802,PDL,75,FR,47.32911,-2.42829 42342,Haute-Goulaine,4802,PDL,75,FR,47.19905,-1.42941 42373,Herbignac,4802,PDL,75,FR,47.44822,-2.3181 42456,Héric,4802,PDL,75,FR,47.41417,-1.65309 42486,Indre,4802,PDL,75,FR,47.2,-1.66667 42488,Ingrandes,4802,PDL,75,FR,47.405,-0.92336 42509,Issé,4802,PDL,75,FR,47.62419,-1.45152 42524,Jallais,4802,PDL,75,FR,47.19691,-0.86738 42526,Jans,4802,PDL,75,FR,47.62029,-1.61438 42530,Jard-sur-Mer,4802,PDL,75,FR,46.41451,-1.57639 42537,Jarzé,4802,PDL,75,FR,47.55563,-0.23183 42545,Javron-les-Chapelles,4802,PDL,75,FR,48.41797,-0.33742 42582,Juigné,4802,PDL,75,FR,47.71878,-0.39405 42583,Juigné-sur-Loire,4802,PDL,75,FR,47.40741,-0.47682 42584,Juigné-sur-Sarthe,4802,PDL,75,FR,47.86499,-0.28624 42590,Jumelles,4802,PDL,75,FR,47.43511,-0.1037 42600,Juvigné,4802,PDL,75,FR,48.22891,-1.03408 42630,La Baconnière,4802,PDL,75,FR,48.18012,-0.89202 42633,La Barre-de-Monts,4802,PDL,75,FR,46.88059,-2.12168 42637,La Baule-Escoublac,4802,PDL,75,FR,47.29221,-2.36395 42639,La Bazoge,4802,PDL,75,FR,48.09689,0.15534 42640,La Bernardière,4802,PDL,75,FR,47.04952,-1.26587 42641,La Bernerie-en-Retz,4802,PDL,75,FR,47.0804,-2.03642 42644,La Bohalle,4802,PDL,75,FR,47.42095,-0.39723 42646,La Boissière-de-Montaigu,4802,PDL,75,FR,46.95012,-1.19047 42647,La Boissière-des-Landes,4802,PDL,75,FR,46.56398,-1.46172 42656,La Bruffière,4802,PDL,75,FR,47.01492,-1.1973 42675,La Chaize-le-Vicomte,4802,PDL,75,FR,46.67166,-1.29084 42677,La Chapelle-Achard,4802,PDL,75,FR,46.58862,-1.64757 42678,La Chapelle-Basse-Mer,4802,PDL,75,FR,47.27086,-1.33913 42694,La Chapelle-des-Marais,4802,PDL,75,FR,47.44845,-2.23834 42695,La Chapelle-du-Genêt,4802,PDL,75,FR,47.18203,-1.01857 42680,La Chapelle-Heulin,4802,PDL,75,FR,47.17667,-1.34 42682,La Chapelle-Launay,4802,PDL,75,FR,47.37226,-1.97071 42684,La Chapelle-Saint-Aubin,4802,PDL,75,FR,48.03595,0.15624 42685,La Chapelle-Saint-Florent,4802,PDL,75,FR,47.33393,-1.05631 42700,La Chapelle-sur-Erdre,4802,PDL,75,FR,47.29583,-1.55309 42703,La Chartre-sur-le-Loir,4802,PDL,75,FR,47.73117,0.56852 42706,La Châtaigneraie,4802,PDL,75,FR,46.64786,-0.73916 42705,La Chevrolière,4802,PDL,75,FR,47.09124,-1.60973 42727,La Daguenière,4802,PDL,75,FR,47.41934,-0.43128 42734,La Ferrière,4802,PDL,75,FR,46.71453,-1.31417 42737,La Ferté-Bernard,4802,PDL,75,FR,48.18633,0.65357 42748,La Flèche,4802,PDL,75,FR,47.69815,-0.07553 42746,La Flocellière,4802,PDL,75,FR,46.83202,-0.86215 42765,La Garnache,4802,PDL,75,FR,46.89176,-1.83163 42766,La Gaubretière,4802,PDL,75,FR,46.94143,-1.06215 42778,La Génétouze,4802,PDL,75,FR,46.73333,-1.51667 42774,La Grigonnais,4802,PDL,75,FR,47.52724,-1.66781 42777,La Guérinière,4802,PDL,75,FR,46.96667,-2.23333 42776,La Guyonnière,4802,PDL,75,FR,46.96476,-1.25059 42779,La Haie-Fouassière,4802,PDL,75,FR,47.15492,-1.39794 42787,La Jubaudière,4802,PDL,75,FR,47.17202,-0.89215 42788,La Jumellière,4802,PDL,75,FR,47.27976,-0.72952 42791,La Limouzinière,4802,PDL,75,FR,46.99274,-1.59722 42801,La Meignanne,4802,PDL,75,FR,47.517,-0.66861 42802,La Meilleraie-Tillay,4802,PDL,75,FR,46.74059,-0.845 42803,La Meilleraye-de-Bretagne,4802,PDL,75,FR,47.55941,-1.402 42805,La Membrolle-sur-Longuenée,4802,PDL,75,FR,47.55991,-0.67236 42822,La Ménitré,4802,PDL,75,FR,47.4,-0.26667 42806,La Milesse,4802,PDL,75,FR,48.06314,0.13428 42809,La Montagne,4802,PDL,75,FR,47.18651,-1.68272 42810,La Mothe-Achard,4802,PDL,75,FR,46.61586,-1.65938 42831,La Plaine-sur-Mer,4802,PDL,75,FR,47.13619,-2.19182 42832,La Planche,4802,PDL,75,FR,47.01619,-1.43159 42835,La Pommeraie-sur-Sèvre,4802,PDL,75,FR,46.83535,-0.77785 42836,La Pommeraye,4802,PDL,75,FR,47.35562,-0.85892 42837,La Possonnière,4802,PDL,75,FR,47.37485,-0.68539 42838,La Pouëze,4802,PDL,75,FR,47.55357,-0.80928 42842,La Regrippière,4802,PDL,75,FR,47.18167,-1.1762 42843,La Remaudière,4802,PDL,75,FR,47.23762,-1.24358 42859,La Roche-sur-Yon,4802,PDL,75,FR,46.66667,-1.43333 42864,La Romagne,4802,PDL,75,FR,47.06119,-1.02 42870,La Salle-et-Chapelle-Aubry,4802,PDL,75,FR,47.25013,-0.97512 42882,La Séguinière,4802,PDL,75,FR,47.06357,-0.93857 42880,La Suze-sur-Sarthe,4802,PDL,75,FR,47.88753,0.02519 42884,La Tardière,4802,PDL,75,FR,46.66096,-0.73143 42886,La Tessoualle,4802,PDL,75,FR,47.00476,-0.85119 42895,La Tourlandry,4802,PDL,75,FR,47.14375,-0.69688 42896,La Tranche-sur-Mer,4802,PDL,75,FR,46.343,-1.437 42901,La Turballe,4802,PDL,75,FR,47.34686,-2.50734 42906,La Varenne,4802,PDL,75,FR,47.31107,-1.31976 42909,La Verrie,4802,PDL,75,FR,46.96131,-0.99596 42968,Laigné-en-Belin,4802,PDL,75,FR,47.87706,0.22795 43002,Landemont,4802,PDL,75,FR,47.26536,-1.23989 43004,Landeronde,4802,PDL,75,FR,46.65722,-1.56953 43008,Landivy,4802,PDL,75,FR,48.47868,-1.0332 43067,Larchamp,4802,PDL,75,FR,48.36131,-0.999 43085,Lassay-les-Châteaux,4802,PDL,75,FR,48.43835,-0.49758 43107,Laval,4802,PDL,75,FR,48.0732,-0.7634 43129,Le Bignon,4802,PDL,75,FR,47.09722,-1.49167 43136,Le Boupère,4802,PDL,75,FR,46.79595,-0.92654 43140,Le Bourgneuf-la-Forêt,4802,PDL,75,FR,48.16325,-0.96963 43143,Le Breil-sur-Mérize,4802,PDL,75,FR,48.00755,0.47808 43158,Le Cellier,4802,PDL,75,FR,47.31988,-1.34584 43162,Le Champ-Saint-Père,4802,PDL,75,FR,46.50773,-1.34726 43176,Le Croisic,4802,PDL,75,FR,47.29189,-2.5138 43186,Le Fenouiller,4802,PDL,75,FR,46.71901,-1.90175 43187,Le Fief-Sauvin,4802,PDL,75,FR,47.22143,-1.04214 43191,Le Fuilet,4802,PDL,75,FR,47.28345,-1.1131 43203,Le Gâvre,4802,PDL,75,FR,47.52131,-1.74905 43197,Le Grand-Lucé,4802,PDL,75,FR,47.86618,0.46919 43209,Le Landreau,4802,PDL,75,FR,47.20512,-1.30452 43210,Le Langon,4802,PDL,75,FR,46.4385,-0.94767 43213,Le Longeron,4802,PDL,75,FR,47.01845,-1.05763 43214,Le Loroux-Bottereau,4802,PDL,75,FR,47.23763,-1.34952 43215,Le Louroux-Béconnais,4802,PDL,75,FR,47.52211,-0.88663 43216,Le Luart,4802,PDL,75,FR,48.07053,0.58564 43218,Le Lude,4802,PDL,75,FR,47.64648,0.15664 43221,Le Mans,4802,PDL,75,FR,48.00039,0.20471 43223,Le May-sur-Èvre,4802,PDL,75,FR,47.13714,-0.89227 43229,Le Mesnil-en-Vallée,4802,PDL,75,FR,47.36551,-0.93485 43245,Le Pallet,4802,PDL,75,FR,47.13809,-1.33476 43248,Le Pellerin,4802,PDL,75,FR,47.19915,-1.75514 43251,Le Perrier,4802,PDL,75,FR,46.81932,-1.99306 43260,Le Pin-en-Mauges,4802,PDL,75,FR,47.25357,-0.89917 43266,Le Plessis-Grammoire,4802,PDL,75,FR,47.49884,-0.43021 43267,Le Plessis-Macé,4802,PDL,75,FR,47.54304,-0.67436 43272,Le Poiré-sur-Vie,4802,PDL,75,FR,46.76921,-1.50938 43281,Le Pouliguen,4802,PDL,75,FR,47.26973,-2.4278 43285,Le Puy-Notre-Dame,4802,PDL,75,FR,47.12551,-0.23572 43309,Le Temple-de-Bretagne,4802,PDL,75,FR,47.32737,-1.78904 43332,Le Vieil-Baugé,4802,PDL,75,FR,47.53193,-0.11888 43344,Legé,4802,PDL,75,FR,46.88484,-1.60127 43372,Les Brouzils,4802,PDL,75,FR,46.88571,-1.32095 43379,Les Clouzeaux,4802,PDL,75,FR,46.62881,-1.50947 43384,Les Epesses,4802,PDL,75,FR,46.88333,-0.9 43385,Les Essarts,4802,PDL,75,FR,46.7744,-1.22834 43395,Les Herbiers,4802,PDL,75,FR,46.86667,-1.01667 43397,Les Landes-Genusson,4802,PDL,75,FR,46.96667,-1.11667 43402,Les Lucs-sur-Boulogne,4802,PDL,75,FR,46.84478,-1.49445 43404,Les Magnils-Reigniers,4802,PDL,75,FR,46.48333,-1.21667 43411,Les Moutiers-en-Retz,4802,PDL,75,FR,47.06375,-1.999 43422,Les Ponts-de-Cé,4802,PDL,75,FR,47.42315,-0.52477 43425,Les Rosiers-sur-Loire,4802,PDL,75,FR,47.35,-0.21667 43427,Les Sables-d’Olonne,4802,PDL,75,FR,46.49645,-1.78472 43429,Les Sorinières,4802,PDL,75,FR,47.14831,-1.52932 43430,Les Touches,4802,PDL,75,FR,47.44249,-1.43097 43481,Ligné,4802,PDL,75,FR,47.41096,-1.37726 43507,Liré,4802,PDL,75,FR,47.34322,-1.16536 43540,Loire-Atlantique,4802,PDL,75,FR,47.32863,-1.65764 43543,Loiron,4802,PDL,75,FR,48.06667,-0.93333 43548,Lombron,4802,PDL,75,FR,48.07879,0.41869 43559,Longeville-sur-Mer,4802,PDL,75,FR,46.41667,-1.5 43621,Loué,4802,PDL,75,FR,47.99575,-0.1545 43606,Louplande,4802,PDL,75,FR,47.95,-0.05 43612,Louverné,4802,PDL,75,FR,48.12178,-0.71721 43632,Luceau,4802,PDL,75,FR,47.71167,0.39734 43635,Luché-Pringé,4802,PDL,75,FR,47.70326,0.07549 43676,Luçon,4802,PDL,75,FR,46.45773,-1.16512 43660,Lusanger,4802,PDL,75,FR,47.68153,-1.58857 43714,Maché,4802,PDL,75,FR,46.75405,-1.68692 43712,Machecoul,4802,PDL,75,FR,46.99358,-1.82352 43734,Maillezais,4802,PDL,75,FR,46.37267,-0.73963 43741,Maisdon-sur-Sèvre,4802,PDL,75,FR,47.09714,-1.38 43759,Malicorne-sur-Sarthe,4802,PDL,75,FR,47.81317,-0.08152 43766,Malville,4802,PDL,75,FR,47.35905,-1.86227 43768,Mamers,4802,PDL,75,FR,48.34961,0.36937 43782,Mansigné,4802,PDL,75,FR,47.74833,0.13311 43926,Marçon,4802,PDL,75,FR,47.71059,0.51101 43830,Mareuil-sur-Lay-Dissais,4802,PDL,75,FR,46.53333,-1.23333 43844,Marigné-Laillé,4802,PDL,75,FR,47.81765,0.3405 43867,Marolles-les-Braults,4802,PDL,75,FR,48.25271,0.31631 43878,Marsac-sur-Don,4802,PDL,75,FR,47.59648,-1.67952 43913,Martigné-Briand,4802,PDL,75,FR,47.23358,-0.42933 43915,Martigné-sur-Mayenne,4802,PDL,75,FR,48.2,-0.66667 43950,Maulévrier,4802,PDL,75,FR,47.00929,-0.74239 43961,Mauves-sur-Loire,4802,PDL,75,FR,47.29738,-1.38763 43969,Mayenne,4802,PDL,75,FR,48.13494,-0.66667 43970,Mayet,4802,PDL,75,FR,47.75968,0.27468 43980,Mazé,4802,PDL,75,FR,47.45632,-0.27106 43977,Mazières-en-Mauges,4802,PDL,75,FR,47.04536,-0.81702 43991,Melay,4802,PDL,75,FR,47.18333,-0.69429 44022,Mervent,4802,PDL,75,FR,46.52239,-0.75654 44483,Mésanger,4802,PDL,75,FR,47.43131,-1.22798 44029,Meslay-du-Maine,4802,PDL,75,FR,47.95116,-0.55428 44031,Mesquer,4802,PDL,75,FR,47.39919,-2.45986 44485,Mézeray,4802,PDL,75,FR,47.82682,-0.0177 44102,Miré,4802,PDL,75,FR,47.75759,-0.49157 44104,Missillac,4802,PDL,75,FR,47.48155,-2.16 44115,Moisdon-la-Rivière,4802,PDL,75,FR,47.62175,-1.37258 44134,Moncé-en-Belin,4802,PDL,75,FR,47.89442,0.19809 44146,Monnières,4802,PDL,75,FR,47.13301,-1.35317 44169,Montaigu,4802,PDL,75,FR,46.97667,-1.30846 44195,Montbert,4802,PDL,75,FR,47.05613,-1.4889 44197,Montbizot,4802,PDL,75,FR,48.14995,0.18384 44218,Montenay,4802,PDL,75,FR,48.28787,-0.89373 44232,Montfaucon-Montigné,4802,PDL,75,FR,47.1,-1.11667 44241,Montfort-le-Gesnois,4802,PDL,75,FR,48.05,0.41667 44264,Montigné-le-Brillant,4802,PDL,75,FR,48.00872,-0.81488 44266,Montjean-sur-Loire,4802,PDL,75,FR,47.38842,-0.85873 44292,Montoir-de-Bretagne,4802,PDL,75,FR,47.33012,-2.15107 44297,Montournais,4802,PDL,75,FR,46.74191,-0.76464 44309,Montreuil-Bellay,4802,PDL,75,FR,47.13106,-0.15209 44315,Montrevault,4802,PDL,75,FR,47.25965,-1.04679 44330,Montsûrs,4802,PDL,75,FR,48.13604,-0.55413 44342,Morannes,4802,PDL,75,FR,47.74364,-0.41604 44371,Mortagne-sur-Sèvre,4802,PDL,75,FR,46.99203,-0.94738 44382,Mouchamps,4802,PDL,75,FR,46.78131,-1.06179 44389,Mouilleron-en-Pareds,4802,PDL,75,FR,46.6763,-0.8494 44390,Mouilleron-le-Captif,4802,PDL,75,FR,46.71898,-1.45463 44391,Moulay,4802,PDL,75,FR,48.27245,-0.62734 44413,Moutiers-les-Mauxfaits,4802,PDL,75,FR,46.48333,-1.41667 44417,Mouzeil,4802,PDL,75,FR,47.44738,-1.34786 44418,Mouzillon,4802,PDL,75,FR,47.14096,-1.28191 44426,Mozé-sur-Louet,4802,PDL,75,FR,47.35856,-0.55295 44434,Mulsanne,4802,PDL,75,FR,47.91172,0.24938 44494,Mûrs-Erigné,4802,PDL,75,FR,47.4,-0.55 44499,Nalliers,4802,PDL,75,FR,46.47071,-1.02774 44506,Nantes,4802,PDL,75,FR,47.21725,-1.55336 44536,Nesmy,4802,PDL,75,FR,46.59078,-1.40074 44572,Neuville-sur-Sarthe,4802,PDL,75,FR,48.07615,0.19264 44596,Nieul-le-Dolent,4802,PDL,75,FR,46.57379,-1.50808 44624,Noirmoutier-en-l’Île,4802,PDL,75,FR,46.99733,-2.27374 44645,Nort-sur-Erdre,4802,PDL,75,FR,47.43881,-1.49833 44652,Notre-Dame-de-Monts,4802,PDL,75,FR,46.831,-2.131 44654,Notre-Dame-de-Riez,4802,PDL,75,FR,46.74445,-1.90857 44656,Notre-Dame-des-Landes,4802,PDL,75,FR,47.38048,-1.70904 44672,Noyant,4802,PDL,75,FR,47.51048,0.11771 44673,Noyant-la-Gravoyère,4802,PDL,75,FR,47.70348,-0.9573 44678,Noyen-sur-Sarthe,4802,PDL,75,FR,47.87187,-0.09916 44682,Nozay,4802,PDL,75,FR,47.56495,-1.62629 44684,Nuaillé,4802,PDL,75,FR,47.09524,-0.79477 44686,Nueil-sur-Layon,4802,PDL,75,FR,47.11811,-0.36573 44687,Nuillé-sur-Vicoin,4802,PDL,75,FR,47.98556,-0.78351 44689,Nyoiseau,4802,PDL,75,FR,47.71667,-0.91667 44727,Oisseau,4802,PDL,75,FR,48.35559,-0.67148 44737,Olonne-sur-Mer,4802,PDL,75,FR,46.53524,-1.77293 44788,Orvault,4802,PDL,75,FR,47.27095,-1.6219 44803,Oudon,4802,PDL,75,FR,47.34774,-1.285 44828,Paimboeuf,4802,PDL,75,FR,47.28654,-2.03048 44843,Pannecé,4802,PDL,75,FR,47.48583,-1.2394 44861,Parçay-les-Pins,4802,PDL,75,FR,47.43668,0.16312 44849,Parcé-sur-Sarthe,4802,PDL,75,FR,47.84356,-0.20104 44855,Parigné-le-Pôlin,4802,PDL,75,FR,47.84987,0.10705 44872,Paulx,4802,PDL,75,FR,46.96181,-1.7552 44887,Pellouailles-les-Vignes,4802,PDL,75,FR,47.52172,-0.43954 44916,Petit-Mars,4802,PDL,75,FR,47.39512,-1.45262 44978,Piriac-sur-Mer,4802,PDL,75,FR,47.37938,-2.54616 44982,Pissotte,4802,PDL,75,FR,46.49725,-0.80666 45011,Plessé,4802,PDL,75,FR,47.5418,-1.88609 45170,Pont-Saint-Martin,4802,PDL,75,FR,47.12338,-1.58455 45206,Pontchâteau,4802,PDL,75,FR,47.43797,-2.09011 45218,Pontvallain,4802,PDL,75,FR,47.75169,0.19145 45223,Pornic,4802,PDL,75,FR,47.11205,-2.08888 45224,Pornichet,4802,PDL,75,FR,47.26682,-2.33794 45227,Port-Brillet,4802,PDL,75,FR,48.11315,-0.9708 45230,Port-Saint-Père,4802,PDL,75,FR,47.13294,-1.7485 45249,Pouancé,4802,PDL,75,FR,47.74167,-1.17366 45271,Pouzauges,4802,PDL,75,FR,46.77941,-0.83619 45302,Pré-en-Pail,4802,PDL,75,FR,48.45993,-0.19814 45306,Précigné,4802,PDL,75,FR,47.76692,-0.32491 45308,Préfailles,4802,PDL,75,FR,47.12839,-2.21693 45289,Prinquiau,4802,PDL,75,FR,47.36215,-2.00952 45299,Pruillé-le-Chétif,4802,PDL,75,FR,47.99383,0.10677 45372,Quelaines-Saint-Gault,4802,PDL,75,FR,47.93333,-0.8 45388,Quilly,4802,PDL,75,FR,47.46131,-1.95274 45453,Remouillé,4802,PDL,75,FR,47.05587,-1.37682 45458,Renazé,4802,PDL,75,FR,47.7934,-1.05437 45463,Requeil,4802,PDL,75,FR,47.78371,0.16105 45482,Rezé,4802,PDL,75,FR,47.18144,-1.54965 45485,Riaillé,4802,PDL,75,FR,47.51797,-1.29404 45546,Rochefort-sur-Loire,4802,PDL,75,FR,47.35705,-0.65696 45550,Rocheservière,4802,PDL,75,FR,46.93765,-1.51143 45656,Roézé-sur-Sarthe,4802,PDL,75,FR,47.89546,0.06723 45615,Rouans,4802,PDL,75,FR,47.18321,-1.85929 45625,Rougé,4802,PDL,75,FR,47.78367,-1.44763 45628,Rouillon,4802,PDL,75,FR,48.00629,0.13527 45636,Roussay,4802,PDL,75,FR,47.09011,-1.06417 45657,Ruaudin,4802,PDL,75,FR,47.94509,0.2676 45667,Ruillé-sur-Loir,4802,PDL,75,FR,47.75075,0.62058 45703,Sablé-sur-Sarthe,4802,PDL,75,FR,47.83765,-0.33294 45711,Saffré,4802,PDL,75,FR,47.50143,-1.57856 45760,Saint-André-de-la-Marche,4802,PDL,75,FR,47.09952,-0.99441 45762,Saint-André-des-Eaux,4802,PDL,75,FR,47.31461,-2.31105 45756,Saint-André-Treize-Voies,4802,PDL,75,FR,46.93369,-1.41274 45784,Saint-Aubin-des-Châteaux,4802,PDL,75,FR,47.72047,-1.48876 45785,Saint-Aubin-des-Ormeaux,4802,PDL,75,FR,46.99238,-1.04274 45806,Saint-Baudelle,4802,PDL,75,FR,48.28081,-0.63728 45814,Saint-Berthevin,4802,PDL,75,FR,48.06667,-0.83333 45823,Saint-Brevin-les-Pins,4802,PDL,75,FR,47.25,-2.16667 45836,Saint-Calais,4802,PDL,75,FR,47.92211,0.74587 45857,Saint-Christophe-du-Bois,4802,PDL,75,FR,47.03012,-0.94441 45858,Saint-Christophe-du-Ligneron,4802,PDL,75,FR,46.82478,-1.76586 45872,Saint-Clément-de-la-Place,4802,PDL,75,FR,47.52744,-0.74545 45873,Saint-Clément-des-Levées,4802,PDL,75,FR,47.33333,-0.18222 45875,Saint-Cosme-en-Vairais,4802,PDL,75,FR,48.26667,0.46667 45877,Saint-Crespin-sur-Moine,4802,PDL,75,FR,47.09968,-1.18651 45883,Saint-Cyr-en-Bourg,4802,PDL,75,FR,47.1952,-0.06085 45896,Saint-Denis-de-Gastines,4802,PDL,75,FR,48.3421,-0.85869 45901,Saint-Denis-la-Chevasse,4802,PDL,75,FR,46.82273,-1.35749 46647,Saint-Étienne-de-Mer-Morte,4802,PDL,75,FR,46.92848,-1.74272 46648,Saint-Étienne-de-Montluc,4802,PDL,75,FR,47.2769,-1.78072 46652,Saint-Étienne-du-Bois,4802,PDL,75,FR,46.83041,-1.59714 45931,Saint-Fiacre-sur-Maine,4802,PDL,75,FR,47.14255,-1.41714 45933,Saint-Florent-des-Bois,4802,PDL,75,FR,46.59377,-1.3158 45934,Saint-Florent-le-Vieil,4802,PDL,75,FR,47.36069,-1.01515 45942,Saint-Fort,4802,PDL,75,FR,47.79928,-0.72095 45944,Saint-Fulgent,4802,PDL,75,FR,46.85226,-1.17798 45971,Saint-Georges-Buttavent,4802,PDL,75,FR,48.31018,-0.69372 45977,Saint-Georges-de-Montaigu,4802,PDL,75,FR,46.94655,-1.29262 45978,Saint-Georges-de-Pointindoux,4802,PDL,75,FR,46.64462,-1.62204 45983,Saint-Georges-du-Bois,4802,PDL,75,FR,47.97242,0.10113 45991,Saint-Georges-sur-Loire,4802,PDL,75,FR,47.40792,-0.76194 46046,Saint-Géréon,4802,PDL,75,FR,47.36774,-1.20262 46004,Saint-Germain-de-Prinçay,4802,PDL,75,FR,46.72107,-1.02153 46007,Saint-Germain-des-Prés,4802,PDL,75,FR,47.40998,-0.83342 46021,Saint-Germain-sur-Moine,4802,PDL,75,FR,47.11746,-1.12223 46025,Saint-Gervais,4802,PDL,75,FR,46.90174,-2.0021 46027,Saint-Gervais-en-Belin,4802,PDL,75,FR,47.8772,0.2177 46033,Saint-Gildas-des-Bois,4802,PDL,75,FR,47.51622,-2.03659 46036,Saint-Gilles-Croix-de-Vie,4802,PDL,75,FR,46.69761,-1.94561 46048,Saint-Herblain,4802,PDL,75,FR,47.21765,-1.64841 46049,Saint-Herblon,4802,PDL,75,FR,47.40786,-1.09738 46055,Saint-Hilaire-de-Chaléons,4802,PDL,75,FR,47.10196,-1.8669 46056,Saint-Hilaire-de-Clisson,4802,PDL,75,FR,47.06222,-1.30778 46057,Saint-Hilaire-de-Loulay,4802,PDL,75,FR,47.0019,-1.33079 46058,Saint-Hilaire-de-Riez,4802,PDL,75,FR,46.71308,-1.92583 46059,Saint-Hilaire-de-Talmont,4802,PDL,75,FR,46.47002,-1.60359 46062,Saint-Hilaire-des-Loges,4802,PDL,75,FR,46.4719,-0.66393 46080,Saint-Jean,4802,PDL,75,FR,47.24553,-0.38413 46087,Saint-Jean-de-Boiseau,4802,PDL,75,FR,47.19315,-1.7234 46097,Saint-Jean-de-Monts,4802,PDL,75,FR,46.79088,-2.08219 46108,Saint-Jean-des-Mauvrets,4802,PDL,75,FR,47.39857,-0.44929 46120,Saint-Jean-sur-Mayenne,4802,PDL,75,FR,48.13522,-0.75613 46124,Saint-Joachim,4802,PDL,75,FR,47.38349,-2.19239 46139,Saint-Julien-de-Concelles,4802,PDL,75,FR,47.25285,-1.38428 46141,Saint-Julien-des-Landes,4802,PDL,75,FR,46.6394,-1.71381 46168,Saint-Lambert-du-Lattay,4802,PDL,75,FR,47.3025,-0.63321 46169,Saint-Lambert-la-Potherie,4802,PDL,75,FR,47.48289,-0.67789 46178,Saint-Laurent-de-la-Plaine,4802,PDL,75,FR,47.31738,-0.80333 46182,Saint-Laurent-des-Autels,4802,PDL,75,FR,47.28524,-1.18881 46190,Saint-Laurent-sur-Sèvre,4802,PDL,75,FR,46.95809,-0.89392 46211,Saint-Léger-des-Bois,4802,PDL,75,FR,47.46238,-0.70953 46215,Saint-Léger-les-Vignes,4802,PDL,75,FR,47.13587,-1.7306 46217,Saint-Léger-sous-Cholet,4802,PDL,75,FR,47.09405,-0.91024 46203,Saint-Lumine-de-Clisson,4802,PDL,75,FR,47.08413,-1.33524 46204,Saint-Lumine-de-Coutais,4802,PDL,75,FR,47.05399,-1.72777 46207,Saint-Lyphard,4802,PDL,75,FR,47.39822,-2.30642 46227,Saint-Macaire-en-Mauges,4802,PDL,75,FR,47.12357,-0.9912 46230,Saint-Malo-de-Guersac,4802,PDL,75,FR,47.35345,-2.17773 46231,Saint-Malô-du-Bois,4802,PDL,75,FR,46.93333,-0.9 46256,Saint-Mars-d’Outillé,4802,PDL,75,FR,47.87034,0.33221 46254,Saint-Mars-de-Coutais,4802,PDL,75,FR,47.11153,-1.73437 46255,Saint-Mars-du-Désert,4802,PDL,75,FR,47.3656,-1.40678 46257,Saint-Mars-la-Brière,4802,PDL,75,FR,48.03046,0.37319 46258,Saint-Mars-la-Jaille,4802,PDL,75,FR,47.52566,-1.18483 46281,Saint-Martin-de-la-Place,4802,PDL,75,FR,47.31747,-0.14849 46285,Saint-Martin-des-Noyers,4802,PDL,75,FR,46.72226,-1.17727 46286,Saint-Martin-du-Fouilloux,4802,PDL,75,FR,47.4336,-0.70357 46302,Saint-Martin-sous-Mouzeuil,4802,PDL,75,FR,46.45905,-0.98893 46307,Saint-Mathurin,4802,PDL,75,FR,46.56493,-1.71389 46308,Saint-Mathurin-sur-Loire,4802,PDL,75,FR,47.41667,-0.31667 46327,Saint-Melaine-sur-Aubance,4802,PDL,75,FR,47.36667,-0.5 46354,Saint-Même-le-Tenu,4802,PDL,75,FR,47.02005,-1.79459 46331,Saint-Mesmin,4802,PDL,75,FR,46.79369,-0.73262 46335,Saint-Michel-Chef-Chef,4802,PDL,75,FR,47.18072,-2.14869 46338,Saint-Michel-le-Cloucq,4802,PDL,75,FR,46.485,-0.75262 46336,Saint-Michel-Mont-Mercure,4802,PDL,75,FR,46.82941,-0.88298 46345,Saint-Molf,4802,PDL,75,FR,47.39167,-2.42357 46358,Saint-Nazaire,4802,PDL,75,FR,47.27956,-2.20993 46365,Saint-Nicolas-de-Redon,4802,PDL,75,FR,47.64343,-2.06305 46385,Saint-Ouën-des-Toits,4802,PDL,75,FR,48.13333,-0.9 46382,Saint-Ouen-en-Belin,4802,PDL,75,FR,47.83302,0.20924 46398,Saint-Paterne,4802,PDL,75,FR,48.41614,0.11271 46415,Saint-Paul-en-Pareds,4802,PDL,75,FR,46.82214,-0.98977 46478,Saint-Père-en-Retz,4802,PDL,75,FR,47.20559,-2.04095 46423,Saint-Philbert-de-Bouaine,4802,PDL,75,FR,46.98568,-1.52022 46424,Saint-Philbert-de-Grand-Lieu,4802,PDL,75,FR,47.0358,-1.6412 46425,Saint-Philbert-du-Peuple,4802,PDL,75,FR,47.39314,-0.0436 46437,Saint-Pierre-des-Nids,4802,PDL,75,FR,48.39826,-0.09984 46439,Saint-Pierre-du-Chemin,4802,PDL,75,FR,46.69523,-0.70095 46447,Saint-Pierre-la-Cour,4802,PDL,75,FR,48.11258,-1.02496 46429,Saint-Pierre-Montlimart,4802,PDL,75,FR,47.26976,-1.02738 46474,Saint-Prouant,4802,PDL,75,FR,46.75822,-0.95703 46488,Saint-Quentin-en-Mauges,4802,PDL,75,FR,47.2913,-0.91191 46512,Saint-Rémy-en-Mauges,4802,PDL,75,FR,47.27202,-1.07499 46520,Saint-Saturnin,4802,PDL,75,FR,48.05795,0.15218 46524,Saint-Saturnin-sur-Loire,4802,PDL,75,FR,47.39438,-0.43565 46578,Saint-Sébastien-sur-Loire,4802,PDL,75,FR,47.20768,-1.50332 46590,Saint-Urbain,4802,PDL,75,FR,46.87557,-2.00961 46606,Saint-Viaud,4802,PDL,75,FR,47.25619,-2.01833 46616,Saint-Vincent-des-Landes,4802,PDL,75,FR,47.65695,-1.49572 46617,Saint-Vincent-sur-Graon,4802,PDL,75,FR,46.5169,-1.38881 46665,Sainte-Anne-sur-Brivet,4802,PDL,75,FR,47.46071,-2.00415 46674,Sainte-Cécile,4802,PDL,75,FR,46.74286,-1.11429 46679,Sainte-Flaive-des-Loups,4802,PDL,75,FR,46.61303,-1.58082 46682,Sainte-Foy,4802,PDL,75,FR,46.54488,-1.67265 46689,Sainte-Gemme-la-Plaine,4802,PDL,75,FR,46.48286,-1.11321 46690,Sainte-Gemmes-sur-Loire,4802,PDL,75,FR,47.4229,-0.55684 46695,Sainte-Hermine,4802,PDL,75,FR,46.55619,-1.05476 46700,Sainte-Jamme-sur-Sarthe,4802,PDL,75,FR,48.14264,0.16743 46703,Sainte-Luce-sur-Loire,4802,PDL,75,FR,47.25381,-1.4843 46721,Sainte-Pazanne,4802,PDL,75,FR,47.10301,-1.8095 46724,Sainte-Reine-de-Bretagne,4802,PDL,75,FR,47.44131,-2.19238 46729,Sainte-Suzanne,4802,PDL,75,FR,48.09818,-0.35439 46752,Saligny,4802,PDL,75,FR,46.80833,-1.42726 46760,Sallertaine,4802,PDL,75,FR,46.86017,-1.95522 46805,Sargé-lès-le-Mans,4802,PDL,75,FR,48.03333,0.23333 46820,Sarthe,4802,PDL,75,FR,48.00493,0.26516 46852,Saumur,4802,PDL,75,FR,47.25908,-0.07796 46857,Sautron,4802,PDL,75,FR,47.26274,-1.67107 46871,Savenay,4802,PDL,75,FR,47.36072,-1.94215 46872,Savennières,4802,PDL,75,FR,47.38225,-0.65708 46915,Segré,4802,PDL,75,FR,47.68646,-0.87237 46917,Seiches-sur-le-Loir,4802,PDL,75,FR,47.57351,-0.35628 47146,Sérigné,4802,PDL,75,FR,46.50107,-0.84453 47149,Sévérac,4802,PDL,75,FR,47.55008,-2.07496 46999,Sillé-le-Guillaume,4802,PDL,75,FR,48.18266,-0.12642 47005,Sion-les-Mines,4802,PDL,75,FR,47.73476,-1.5919 47025,Solesmes,4802,PDL,75,FR,47.85009,-0.29806 47057,Soucelles,4802,PDL,75,FR,47.56848,-0.41819 47062,Soudan,4802,PDL,75,FR,47.73777,-1.30566 47069,Soulaines-sur-Aubance,4802,PDL,75,FR,47.36381,-0.52265 47070,Soulaire-et-Bourg,4802,PDL,75,FR,47.57896,-0.55232 47071,Soulgé-sur-Ouette,4802,PDL,75,FR,48.06667,-0.56667 47072,Souligné-sous-Ballon,4802,PDL,75,FR,48.13758,0.23572 47073,Soullans,4802,PDL,75,FR,46.79624,-1.90106 47092,Spay,4802,PDL,75,FR,47.92384,0.15258 47112,Sucé-sur-Erdre,4802,PDL,75,FR,47.33333,-1.53333 47194,Teillé,4802,PDL,75,FR,47.4617,-1.2781 47196,Teloché,4802,PDL,75,FR,47.88819,0.27086 47203,Tennie,4802,PDL,75,FR,48.10769,-0.07626 47252,Thorigné-sur-Dué,4802,PDL,75,FR,48.0392,0.53554 47253,Thouarcé,4802,PDL,75,FR,47.26734,-0.50186 47255,Thouaré-sur-Loire,4802,PDL,75,FR,47.26893,-1.43834 47276,Tiercé,4802,PDL,75,FR,47.61587,-0.46609 47277,Tiffauges,4802,PDL,75,FR,47.0108,-1.10999 47282,Tillières,4802,PDL,75,FR,47.14397,-1.16334 47302,Torfou,4802,PDL,75,FR,47.03682,-1.11635 47342,Toutlemonde,4802,PDL,75,FR,47.05488,-0.76548 47343,Touvois,4802,PDL,75,FR,46.90208,-1.68333 47347,Trangé,4802,PDL,75,FR,48.02706,0.11054 47355,Treillières,4802,PDL,75,FR,47.3306,-1.61918 47356,Treize-Septiers,4802,PDL,75,FR,46.98524,-1.22921 47396,Trélazé,4802,PDL,75,FR,47.44565,-0.4654 47401,Trémentines,4802,PDL,75,FR,47.12357,-0.785 47367,Triaize,4802,PDL,75,FR,46.39265,-1.19785 47373,Trignac,4802,PDL,75,FR,47.31809,-2.18895 47411,Tuffé,4802,PDL,75,FR,48.11319,0.51551 47449,Vaas,4802,PDL,75,FR,47.6689,0.31677 47454,Vaiges,4802,PDL,75,FR,48.04025,-0.47513 47458,Vairé,4802,PDL,75,FR,46.60104,-1.75538 47489,Vallet,4802,PDL,75,FR,47.16227,-1.26607 47507,Varades,4802,PDL,75,FR,47.38458,-1.02842 47515,Varennes-sur-Loire,4802,PDL,75,FR,47.23767,0.0535 47520,Varrains,4802,PDL,75,FR,47.22305,-0.06033 47528,Vauchrétien,4802,PDL,75,FR,47.33234,-0.47678 47531,Vaudelnay,4802,PDL,75,FR,47.13813,-0.20677 47549,Vay,4802,PDL,75,FR,47.55466,-1.70095 47562,Venansault,4802,PDL,75,FR,46.68516,-1.51415 47576,Vendrennes,4802,PDL,75,FR,46.82523,-1.12357 47606,Vern-d’Anjou,4802,PDL,75,FR,47.60119,-0.83357 47609,Vernantes,4802,PDL,75,FR,47.3932,0.05304 47618,Vernoil-le-Fourrier,4802,PDL,75,FR,47.38333,0.08333 47642,Vertou,4802,PDL,75,FR,47.16869,-1.46929 47658,Vezins,4802,PDL,75,FR,47.12015,-0.70971 47662,Vibraye,4802,PDL,75,FR,48.05607,0.74171 47678,Vieillevigne,4802,PDL,75,FR,46.97214,-1.43405 47696,Vigneux-de-Bretagne,4802,PDL,75,FR,47.32547,-1.73678 47703,Vihiers,4802,PDL,75,FR,47.14631,-0.53238 47707,Villaines-la-Juhel,4802,PDL,75,FR,48.34416,-0.27734 47722,Villebernier,4802,PDL,75,FR,47.25374,-0.03229 47729,Villedieu-la-Blouère,4802,PDL,75,FR,47.14738,-1.06286 47823,Villevêque,4802,PDL,75,FR,47.56095,-0.42383 47855,Vion,4802,PDL,75,FR,47.81923,-0.23916 47887,Vivy,4802,PDL,75,FR,47.32648,-0.05531 47888,Vix,4802,PDL,75,FR,46.36456,-0.86072 47921,Vue,4802,PDL,75,FR,47.19953,-1.8775 48019,Yvré-le-Pôlin,4802,PDL,75,FR,47.82235,0.15581 48020,Yzernay,4802,PDL,75,FR,47.02229,-0.70295 39294,Aix-en-Provence,4812,PAC,75,FR,43.5283,5.44973 39322,Allauch,4812,PAC,75,FR,43.33573,5.48201 39323,Alleins,4812,PAC,75,FR,43.70387,5.16203 39335,Alpes-de-Haute-Provence,4812,PAC,75,FR,44.09829,6.26537 39334,Alpes-Maritimes,4812,PAC,75,FR,43.91307,7.20436 39337,Althen-des-Paluds,4812,PAC,75,FR,44.00405,4.95861 39424,Annot,4812,PAC,75,FR,43.96528,6.66879 39429,Ansouis,4812,PAC,75,FR,43.73771,5.46356 39432,Antibes,4812,PAC,75,FR,43.58579,7.10831 39446,Apt,4812,PAC,75,FR,43.87638,5.39635 39470,Arenc,4812,PAC,75,FR,43.31583,5.36698 39489,Arles,4812,PAC,75,FR,43.67681,4.63031 39550,Aspremont,4812,PAC,75,FR,43.78342,7.24406 39566,Aubagne,4812,PAC,75,FR,43.29276,5.57067 39578,Aubignan,4812,PAC,75,FR,44.09971,5.02526 39622,Aups,4812,PAC,75,FR,43.62841,6.22477 39626,Aureille,4812,PAC,75,FR,43.70821,4.94728 39628,Auribeau-sur-Siagne,4812,PAC,75,FR,43.60063,6.90992 39631,Auriol,4812,PAC,75,FR,43.37161,5.6341 39669,Avignon,4812,PAC,75,FR,43.94834,4.80892 39712,Bagnols-en-Forêt,4812,PAC,75,FR,43.53752,6.69814 39721,Baille,4812,PAC,75,FR,43.2877,5.39804 39759,Bandol,4812,PAC,75,FR,43.14247,5.74718 39772,Barbentane,4812,PAC,75,FR,43.89939,4.74756 39779,Barcelonnette,4812,PAC,75,FR,44.38691,6.65179 39783,Bargemon,4812,PAC,75,FR,43.61899,6.54957 39785,Barjols,4812,PAC,75,FR,43.55805,6.00752 39855,Beaulieu-sur-Mer,4812,PAC,75,FR,43.70692,7.33135 39857,Beaumes-de-Venise,4812,PAC,75,FR,44.12227,5.03065 39864,Beaumont-de-Pertuis,4812,PAC,75,FR,43.73737,5.68959 39886,Beausoleil,4812,PAC,75,FR,43.74311,7.4225 40413,Bédarrides,4812,PAC,75,FR,44.04022,4.89819 40414,Bédoin,4812,PAC,75,FR,44.12432,5.1804 39903,Belcodène,4812,PAC,75,FR,43.42612,5.58878 39905,Belgentier,4812,PAC,75,FR,43.24535,5.99933 39909,Belle de Mai,4812,PAC,75,FR,43.31184,5.38541 39935,Belsunce,4812,PAC,75,FR,43.29834,5.3766 39959,Berre-lÉtang,4812,PAC,75,FR,43.47809,5.17044 39960,Berre-les-Alpes,4812,PAC,75,FR,43.83052,7.32877 39977,Besse-sur-Issole,4812,PAC,75,FR,43.34892,6.17656 40029,Biot,4812,PAC,75,FR,43.62852,7.0953 40059,Blausasc,4812,PAC,75,FR,43.80572,7.36477 40105,Bollène,4812,PAC,75,FR,44.28124,4.74891 40109,Bon-Secours,4812,PAC,75,FR,43.31923,5.38426 40125,Bonneveine,4812,PAC,75,FR,43.25,5.38333 40127,Bonnieux,4812,PAC,75,FR,43.82396,5.30759 40139,Borel,4812,PAC,75,FR,43.36486,5.36681 40141,Bormes-les-Mimosas,4812,PAC,75,FR,43.15169,6.3422 40149,Bouc-Bel-Air,4812,PAC,75,FR,43.45217,5.413 40165,Boulbon,4812,PAC,75,FR,43.86232,4.69391 40258,Bras,4812,PAC,75,FR,43.47163,5.95486 40273,Breil-sur-Roya,4812,PAC,75,FR,43.93755,7.51472 40300,Briançon,4812,PAC,75,FR,44.89978,6.64201 40313,Brignoles,4812,PAC,75,FR,43.4058,6.06172 40441,Cabannes,4812,PAC,75,FR,43.86015,4.95192 40443,Cabasse,4812,PAC,75,FR,43.42646,6.21917 40448,Cabriès,4812,PAC,75,FR,43.44127,5.37884 40446,Cabris,4812,PAC,75,FR,43.65617,6.87358 40453,Cadenet,4812,PAC,75,FR,43.735,5.37339 40454,Caderousse,4812,PAC,75,FR,44.10327,4.75672 40456,Cadolive,4812,PAC,75,FR,43.39694,5.54526 40459,Cagnes-sur-Mer,4812,PAC,75,FR,43.66352,7.1479 40472,Callas,4812,PAC,75,FR,43.59284,6.5384 40473,Callian,4812,PAC,75,FR,43.6221,6.75269 40481,Camaret-sur-Aigues,4812,PAC,75,FR,44.16375,4.8731 40501,Camps-la-Source,4812,PAC,75,FR,43.38626,6.09607 40512,Cannes,4812,PAC,75,FR,43.55135,7.01275 40517,Cantaron,4812,PAC,75,FR,43.76203,7.31756 40524,Cap-d’Ail,4812,PAC,75,FR,43.72126,7.40556 40540,Carcès,4812,PAC,75,FR,43.47585,6.18257 40551,Carnoules,4812,PAC,75,FR,43.30187,6.18733 40552,Carnoux-en-Provence,4812,PAC,75,FR,43.25639,5.56444 40554,Caromb,4812,PAC,75,FR,44.11106,5.10738 40555,Carpentras,4812,PAC,75,FR,44.05507,5.04813 40558,Carqueiranne,4812,PAC,75,FR,43.09495,6.07349 40561,Carros,4812,PAC,75,FR,43.79246,7.18745 40562,Carry-le-Rouet,4812,PAC,75,FR,43.33139,5.15237 40571,Cassis,4812,PAC,75,FR,43.21571,5.53855 40574,Castagniers,4812,PAC,75,FR,43.79134,7.23162 40579,Castellane,4812,PAC,75,FR,43.84707,6.51283 40609,Caumont-sur-Durance,4812,PAC,75,FR,43.89356,4.94745 40617,Cavaillon,4812,PAC,75,FR,43.83125,5.03586 40618,Cavalaire-sur-Mer,4812,PAC,75,FR,43.17261,6.52959 41396,Céreste,4812,PAC,75,FR,43.8558,5.58685 40666,Ceyreste,4812,PAC,75,FR,43.21352,5.62946 40800,Charleval,4812,PAC,75,FR,43.71864,5.24546 40961,Châteauneuf-de-Gadagne,4812,PAC,75,FR,43.92683,4.94453 40964,Châteauneuf-du-Pape,4812,PAC,75,FR,44.05638,4.83244 40960,Châteauneuf-Grasse,4812,PAC,75,FR,43.66667,6.98333 40969,Châteauneuf-le-Rouge,4812,PAC,75,FR,43.48936,5.56921 40970,Châteauneuf-les-Martigues,4812,PAC,75,FR,43.38383,5.16403 40977,Châteaurenard,4812,PAC,75,FR,43.88169,4.85493 40892,Cheval-Blanc,4812,PAC,75,FR,43.80189,5.06229 40926,Chorges,4812,PAC,75,FR,44.54879,6.27727 40929,Chutes-Lavie,4812,PAC,75,FR,43.31017,5.39464 41020,Cinq Avenues,4812,PAC,75,FR,43.30375,5.39761 41083,Cogolin,4812,PAC,75,FR,43.25294,6.52981 41092,Collobrières,4812,PAC,75,FR,43.23718,6.30901 41097,Colomars,4812,PAC,75,FR,43.7632,7.22191 41155,Contes,4812,PAC,75,FR,43.81278,7.31444 41194,Cornillon-Confoux,4812,PAC,75,FR,43.56267,5.07162 41211,Cotignac,4812,PAC,75,FR,43.52876,6.14955 41221,Coudoux,4812,PAC,75,FR,43.558,5.24889 41269,Courthézon,4812,PAC,75,FR,44.0876,4.88407 41358,Cucuron,4812,PAC,75,FR,43.77298,5.43858 41359,Cuers,4812,PAC,75,FR,43.23754,6.07178 41363,Cuges-les-Pins,4812,PAC,75,FR,43.27607,5.69955 41634,Département des Bouches-du-Rhône,4812,PAC,75,FR,43.52366,5.4245 41647,Département du Vaucluse,4812,PAC,75,FR,44.0,5.16667 41478,Digne-les-Bains,4812,PAC,75,FR,44.09252,6.23199 41566,Draguignan,4812,PAC,75,FR,43.53692,6.46458 41569,Drap,4812,PAC,75,FR,43.75508,7.32152 48061,Éguilles,4812,PAC,75,FR,43.56867,5.35575 41666,Embrun,4812,PAC,75,FR,44.56387,6.49526 41677,Ensuès-la-Redonne,4812,PAC,75,FR,43.35464,5.20357 41678,Entraigues-sur-la-Sorgue,4812,PAC,75,FR,44.0032,4.92657 48068,Éoures,4812,PAC,75,FR,43.30045,5.52193 48117,Évenos,4812,PAC,75,FR,43.16365,5.84628 41752,Eygalières,4812,PAC,75,FR,43.76099,4.94968 41753,Eyguières,4812,PAC,75,FR,43.69481,5.03131 41756,Eyragues,4812,PAC,75,FR,43.84103,4.84231 48035,Èze,4812,PAC,75,FR,43.72799,7.36194 41767,Falicon,4812,PAC,75,FR,43.74861,7.27856 41789,Fayence,4812,PAC,75,FR,43.6257,6.69531 41817,Figanières,4812,PAC,75,FR,43.56882,6.49722 41829,Flassans-sur-Issole,4812,PAC,75,FR,43.36856,6.22154 41835,Flayosc,4812,PAC,75,FR,43.53396,6.3966 41907,Fontvieille,4812,PAC,75,FR,43.72806,4.70953 41909,Forcalqueiret,4812,PAC,75,FR,43.33618,6.08346 41910,Forcalquier,4812,PAC,75,FR,43.95927,5.77945 41919,Fos-sur-Mer,4812,PAC,75,FR,43.43774,4.94457 41985,Fréjus,4812,PAC,75,FR,43.43325,6.73555 41996,Fuveau,4812,PAC,75,FR,43.45578,5.56149 42031,Gap,4812,PAC,75,FR,44.55858,6.07868 42037,Gardanne,4812,PAC,75,FR,43.45491,5.46913 42048,Garéoult,4812,PAC,75,FR,43.32833,6.04616 42041,Gargas,4812,PAC,75,FR,43.90196,5.35814 42050,Gassin,4812,PAC,75,FR,43.22882,6.58549 42052,Gattières,4812,PAC,75,FR,43.75951,7.17574 42293,Gémenos,4812,PAC,75,FR,43.29751,5.62843 42092,Gignac-la-Nerthe,4812,PAC,75,FR,43.39287,5.23586 42093,Gilette,4812,PAC,75,FR,43.84976,7.16346 42098,Ginasservis,4812,PAC,75,FR,43.67088,5.84911 42130,Gonfaron,4812,PAC,75,FR,43.32036,6.28929 42134,Gorbio,4812,PAC,75,FR,43.78678,7.44375 42136,Gordes,4812,PAC,75,FR,43.9129,5.19892 42148,Goult,4812,PAC,75,FR,43.86297,5.2439 42169,Grambois,4812,PAC,75,FR,43.76233,5.5886 42184,Grans,4812,PAC,75,FR,43.60862,5.0629 42186,Grasse,4812,PAC,75,FR,43.65783,6.92537 42190,Graveson,4812,PAC,75,FR,43.85051,4.77361 42233,Gréasque,4812,PAC,75,FR,43.4331,5.54449 42234,Gréoux-les-Bains,4812,PAC,75,FR,43.75844,5.88351 42213,Grillon,4812,PAC,75,FR,44.39508,4.92954 42214,Grimaud,4812,PAC,75,FR,43.27329,6.52171 42261,Guillestre,4812,PAC,75,FR,44.6595,6.64948 42351,Hautes-Alpes,4812,PAC,75,FR,44.68055,6.28969 42448,Hyères,4812,PAC,75,FR,43.12038,6.12857 42510,Istres,4812,PAC,75,FR,43.51345,4.98747 42542,Jausiers,4812,PAC,75,FR,44.41705,6.72947 42558,Jonquerettes,4812,PAC,75,FR,43.94655,4.93286 42559,Jonquières,4812,PAC,75,FR,44.11603,4.89989 42570,Jouques,4812,PAC,75,FR,43.6371,5.63672 42625,LEstaque,4812,PAC,75,FR,43.36385,5.30854 43701,L’Escale,4812,PAC,75,FR,44.08162,6.02379 43702,L’Escarène,4812,PAC,75,FR,43.83492,7.35542 43707,L’Isle-sur-la-Sorgue,4812,PAC,75,FR,43.91971,5.05141 42632,La Barasse,4812,PAC,75,FR,43.28433,5.48664 42636,La Bastide-des-Jourdans,4812,PAC,75,FR,43.78531,5.63446 42660,La Bâtie-Neuve,4812,PAC,75,FR,44.5668,6.19587 42643,La Blancarde,4812,PAC,75,FR,43.30047,5.40563 42649,La Bouilladisse,4812,PAC,75,FR,43.39619,5.59307 42662,La Cabucelle,4812,PAC,75,FR,43.33189,5.36111 42663,La Calade,4812,PAC,75,FR,43.33895,5.35111 42666,La Capelette,4812,PAC,75,FR,43.28086,5.406 42670,La Celle,4812,PAC,75,FR,43.39523,6.0375 42708,La Ciotat,4812,PAC,75,FR,43.17476,5.60449 42712,La Colle-sur-Loup,4812,PAC,75,FR,43.68648,7.10376 42713,La Conception,4812,PAC,75,FR,43.29174,5.39391 42721,La Crau,4812,PAC,75,FR,43.14962,6.07399 42722,La Croix-Rouge,4812,PAC,75,FR,43.33329,5.45403 42723,La Croix-Valmer,4812,PAC,75,FR,43.20755,6.56796 42729,La Delorme,4812,PAC,75,FR,43.34405,5.37251 42730,La Destrousse,4812,PAC,75,FR,43.37505,5.6056 42732,La Fare-les-Oliviers,4812,PAC,75,FR,43.55104,5.1943 42733,La Farlède,4812,PAC,75,FR,43.16866,6.04323 42755,La Fourragère,4812,PAC,75,FR,43.30382,5.43138 42761,La Garde,4812,PAC,75,FR,43.12468,6.01033 42763,La Garde-Freinet,4812,PAC,75,FR,43.3171,6.46946 42767,La Gaude,4812,PAC,75,FR,43.72209,7.15296 42786,La Joliette,4812,PAC,75,FR,43.30485,5.36654 42792,La Londe-les-Maures,4812,PAC,75,FR,43.13839,6.23362 42807,La Millère,4812,PAC,75,FR,43.28128,5.49804 42813,La Motte,4812,PAC,75,FR,43.49403,6.53519 42826,La Page,4812,PAC,75,FR,43.26627,5.37377 42828,La Panouse,4812,PAC,75,FR,43.25576,5.42963 42829,La Penne-sur-Huveaune,4812,PAC,75,FR,43.28208,5.51642 42833,La Pointe Rouge,4812,PAC,75,FR,43.23853,5.37679 42834,La Pomme,4812,PAC,75,FR,43.28987,5.44153 42857,La Roche-des-Arnauds,4812,PAC,75,FR,44.56188,5.95541 42865,La Roque-d’Anthéron,4812,PAC,75,FR,43.71544,5.30973 42866,La Roquebrussanne,4812,PAC,75,FR,43.3403,5.97603 42867,La Roquette-sur-Siagne,4812,PAC,75,FR,43.59873,6.95671 42868,La Rose,4812,PAC,75,FR,43.32889,5.42859 42878,La Seyne-sur-Mer,4812,PAC,75,FR,43.10322,5.87816 42888,La Timone,4812,PAC,75,FR,43.28847,5.41447 42898,La Trinité,4812,PAC,75,FR,43.7405,7.314 42902,La Turbie,4812,PAC,75,FR,43.7454,7.40046 42903,La Valbarelle,4812,PAC,75,FR,43.28494,5.45387 42904,La Valentine,4812,PAC,75,FR,43.29757,5.48432 42905,La Valette-du-Var,4812,PAC,75,FR,43.13763,5.98317 42916,La Villette,4812,PAC,75,FR,43.31181,5.37391 42917,La Viste,4812,PAC,75,FR,43.35936,5.35649 42956,Lagnes,4812,PAC,75,FR,43.89348,5.11454 42980,Lamanon,4812,PAC,75,FR,43.69979,5.08871 42987,Lambesc,4812,PAC,75,FR,43.65382,5.26211 43056,Lançon-Provence,4812,PAC,75,FR,43.59266,5.12789 43050,Lantosque,4812,PAC,75,FR,43.97446,7.31174 43059,Lapalud,4812,PAC,75,FR,44.3078,4.68946 43065,Laragne-Montéglin,4812,PAC,75,FR,44.31667,5.81667 43099,Lauris,4812,PAC,75,FR,43.74716,5.31346 43125,Le Bar-sur-Loup,4812,PAC,75,FR,43.7,6.98333 43128,Le Beausset,4812,PAC,75,FR,43.19822,5.80267 43146,Le Broc,4812,PAC,75,FR,43.80878,7.16882 43147,Le Brusquet,4812,PAC,75,FR,44.16126,6.30925 43150,Le Cabot,4812,PAC,75,FR,43.25884,5.41729 43152,Le Camas,4812,PAC,75,FR,43.29469,5.39415 43153,Le Canet,4812,PAC,75,FR,43.32611,5.3723 43154,Le Cannet,4812,PAC,75,FR,43.57662,7.01912 43155,Le Cannet-des-Maures,4812,PAC,75,FR,43.39236,6.33966 43157,Le Castellet,4812,PAC,75,FR,43.20291,5.77657 43164,Le Chapitre,4812,PAC,75,FR,43.30053,5.38433 43212,Le Lavandou,4812,PAC,75,FR,43.137,6.366 43217,Le Luc,4812,PAC,75,FR,43.39453,6.31253 43225,Le Merlan,4812,PAC,75,FR,43.33875,5.40773 43237,Le Monêtier-les-Bains,4812,PAC,75,FR,44.97604,6.50898 43238,Le Muy,4812,PAC,75,FR,43.4728,6.56637 43255,Le Pharo,4812,PAC,75,FR,43.2914,5.35829 43262,Le Plan-de-la-Tour,4812,PAC,75,FR,43.33333,6.55 43275,Le Pontet,4812,PAC,75,FR,43.96119,4.86008 43283,Le Pradet,4812,PAC,75,FR,43.10545,6.0235 43286,Le Puy-Sainte-Réparade,4812,PAC,75,FR,43.66393,5.43493 43292,Le Redon,4812,PAC,75,FR,43.24604,5.42889 43294,Le Revest-les-Eaux,4812,PAC,75,FR,43.17612,5.92667 43296,Le Rouret,4812,PAC,75,FR,43.67873,7.01521 43297,Le Rove,4812,PAC,75,FR,43.36987,5.25112 43314,Le Tholonet,4812,PAC,75,FR,43.52176,5.51115 43316,Le Thor,4812,PAC,75,FR,43.92943,4.99543 43317,Le Thoronet,4812,PAC,75,FR,43.45174,6.30391 43320,Le Tignet,4812,PAC,75,FR,43.63979,6.84625 43326,Le Val,4812,PAC,75,FR,43.43928,6.07335 43356,Les Accates,4812,PAC,75,FR,43.29989,5.49726 43364,Les Arcs,4812,PAC,75,FR,43.46328,6.47876 43365,Les Arnavaux,4812,PAC,75,FR,43.33506,5.37969 43370,Les Aygalades,4812,PAC,75,FR,43.35711,5.37116 43371,Les Baumettes,4812,PAC,75,FR,43.22641,5.41642 43373,Les Caillols,4812,PAC,75,FR,43.30221,5.44811 43374,Les Camoins,4812,PAC,75,FR,43.30607,5.51745 43376,Les Chartreux,4812,PAC,75,FR,43.31112,5.4048 43381,Les Crottes,4812,PAC,75,FR,43.32302,5.36809 43393,Les Grands Carmes,4812,PAC,75,FR,43.30038,5.37275 43413,Les Médecins,4812,PAC,75,FR,43.35417,5.45483 43414,Les Mées,4812,PAC,75,FR,44.02961,5.97635 43416,Les Olives,4812,PAC,75,FR,43.32393,5.4584 43420,Les Pennes-Mirabeau,4812,PAC,75,FR,43.41012,5.30838 43431,Les Trois-Lucs,4812,PAC,75,FR,43.31371,5.46248 43450,Levens,4812,PAC,75,FR,43.85948,7.22583 43536,Lodi,4812,PAC,75,FR,43.28663,5.38882 43586,Lorgues,4812,PAC,75,FR,43.49325,6.3615 43588,Loriol-du-Comtat,4812,PAC,75,FR,44.07653,5.00065 43609,Lourmarin,4812,PAC,75,FR,43.76385,5.36264 43639,Lucéram,4812,PAC,75,FR,43.88293,7.35988 43733,Maillane,4812,PAC,75,FR,43.83289,4.78209 43751,Malaucène,4812,PAC,75,FR,44.17393,5.13213 43754,Malemort-du-Comtat,4812,PAC,75,FR,44.02096,5.15961 43760,Malijai,4812,PAC,75,FR,44.046,6.03041 43763,Mallemoisson,4812,PAC,75,FR,44.04687,6.12557 43764,Mallemort,4812,PAC,75,FR,43.73172,5.17945 43765,Malpassé,4812,PAC,75,FR,43.3217,5.41551 43773,Mandelieu-la-Napoule,4812,PAC,75,FR,43.54577,6.93734 43777,Mane,4812,PAC,75,FR,43.93795,5.76718 43780,Manosque,4812,PAC,75,FR,43.82883,5.78688 43838,Marignane,4812,PAC,75,FR,43.41727,5.21462 43883,Marseille,4812,PAC,75,FR,43.29695,5.38107 43884,Marseille 01,4812,PAC,75,FR,43.29814,5.38407 43885,Marseille 02,4812,PAC,75,FR,43.29664,5.37034 43886,Marseille 03,4812,PAC,75,FR,43.30257,5.37583 43887,Marseille 04,4812,PAC,75,FR,43.30213,5.40141 43888,Marseille 05,4812,PAC,75,FR,43.29551,5.40055 43889,Marseille 06,4812,PAC,75,FR,43.28764,5.37918 43890,Marseille 07,4812,PAC,75,FR,43.28289,5.36021 43891,Marseille 08,4812,PAC,75,FR,43.27083,5.3821 43892,Marseille 09,4812,PAC,75,FR,43.25433,5.4057 43893,Marseille 10,4812,PAC,75,FR,43.27889,5.41523 43894,Marseille 11,4812,PAC,75,FR,43.2907,5.4384 43895,Marseille 12,4812,PAC,75,FR,43.29614,5.43617 43896,Marseille 13,4812,PAC,75,FR,43.31856,5.40836 43897,Marseille 14,4812,PAC,75,FR,43.34447,5.38004 43898,Marseille 15,4812,PAC,75,FR,43.37224,5.35386 43899,Marseille 16,4812,PAC,75,FR,43.35982,5.33421 43900,Marseille Bompard,4812,PAC,75,FR,43.2812,5.36081 43901,Marseille Endoume,4812,PAC,75,FR,43.2832,5.35159 43902,Marseille Prefecture,4812,PAC,75,FR,43.29092,5.37901 43903,Marseille Roucas-Blanc,4812,PAC,75,FR,43.27652,5.36519 43904,Marseille Saint-Victor,4812,PAC,75,FR,43.28955,5.36845 43905,Marseille Vauban,4812,PAC,75,FR,43.28408,5.3754 43916,Martigues,4812,PAC,75,FR,43.40735,5.05526 43943,Maubec,4812,PAC,75,FR,43.84379,5.13919 43959,Maussane-les-Alpilles,4812,PAC,75,FR,43.72236,4.80497 43972,Mazan,4812,PAC,75,FR,44.05696,5.1268 43973,Mazargues,4812,PAC,75,FR,43.24622,5.39788 44462,Ménerbes,4812,PAC,75,FR,43.83242,5.20597 44003,Menpenti,4812,PAC,75,FR,43.28198,5.39607 44007,Menton,4812,PAC,75,FR,43.77649,7.50435 44468,Méounes-lès-Montrieux,4812,PAC,75,FR,43.28102,5.96986 44475,Mérindol,4812,PAC,75,FR,43.75516,5.20357 44059,Meyrargues,4812,PAC,75,FR,43.63677,5.52679 44060,Meyreuil,4812,PAC,75,FR,43.4878,5.49574 44079,Mimet,4812,PAC,75,FR,43.41427,5.50579 44087,Miramas,4812,PAC,75,FR,43.58508,5.00268 44125,Mollégès,4812,PAC,75,FR,43.80703,4.94934 44139,Mondragon,4812,PAC,75,FR,44.23831,4.71286 44186,Montauroux,4812,PAC,75,FR,43.61823,6.76528 44229,Monteux,4812,PAC,75,FR,44.03618,4.9963 44234,Montfavet,4812,PAC,75,FR,43.93335,4.87342 44238,Montferrat,4812,PAC,75,FR,43.61196,6.48093 44296,Montolivet,4812,PAC,75,FR,43.31715,5.4235 44304,Montredon,4812,PAC,75,FR,43.24016,5.36629 44355,Morières-lès-Avignon,4812,PAC,75,FR,43.9403,4.9011 44359,Mormoiron,4812,PAC,75,FR,44.0681,5.18312 44362,Mornas,4812,PAC,75,FR,44.20242,4.72763 44381,Mouans-Sartoux,4812,PAC,75,FR,43.62101,6.97139 44386,Mougins,4812,PAC,75,FR,43.60068,6.99523 44400,Mouret,4812,PAC,75,FR,43.36126,5.43006 44401,Mouriès,4812,PAC,75,FR,43.68997,4.87089 44504,Nans-les-Pins,4812,PAC,75,FR,43.37066,5.78189 44693,Néoules,4812,PAC,75,FR,43.30844,6.00798 44587,Nice,4812,PAC,75,FR,43.70313,7.26608 44608,Noailles,4812,PAC,75,FR,43.29604,5.37959 44649,Notre-Dame du Mont,4812,PAC,75,FR,43.29293,5.38203 44648,Notre-Dame Limite,4812,PAC,75,FR,43.38165,5.36269 44666,Noves,4812,PAC,75,FR,43.87736,4.90248 44735,Ollioules,4812,PAC,75,FR,43.1399,5.84766 44749,Opéra,4812,PAC,75,FR,43.29401,5.3761 44747,Opio,4812,PAC,75,FR,43.66862,6.98212 44748,Oppède le Vieux,4812,PAC,75,FR,43.82844,5.16132 44752,Oraison,4812,PAC,75,FR,43.91726,5.91836 44753,Orange,4812,PAC,75,FR,44.13806,4.81025 44764,Orgon,4812,PAC,75,FR,43.79108,5.03869 44831,Palais de Justice,4812,PAC,75,FR,43.28657,5.37603 44834,Palama,4812,PAC,75,FR,43.36566,5.44427 44846,Paradou,4812,PAC,75,FR,43.71699,4.78604 45345,Pégomas,4812,PAC,75,FR,43.59662,6.93211 44882,Peille,4812,PAC,75,FR,43.80296,7.40191 44883,Peillon,4812,PAC,75,FR,43.77861,7.38278 44885,Peipin,4812,PAC,75,FR,44.13778,5.95722 45346,Pélissanne,4812,PAC,75,FR,43.6326,5.1522 45351,Périer,4812,PAC,75,FR,43.27755,5.37925 44898,Pernes-les-Fontaines,4812,PAC,75,FR,43.99802,5.05906 44911,Pertuis,4812,PAC,75,FR,43.69415,5.50291 44923,Peymeinade,4812,PAC,75,FR,43.64244,6.87583 44924,Peynier,4812,PAC,75,FR,43.44837,5.64139 44925,Peypin,4812,PAC,75,FR,43.38503,5.57788 44934,Peyrolles-en-Provence,4812,PAC,75,FR,43.64545,5.58492 44935,Peyruis,4812,PAC,75,FR,44.0288,5.94032 44953,Pierrefeu-du-Var,4812,PAC,75,FR,43.22411,6.14536 44963,Pierrevert,4812,PAC,75,FR,43.81137,5.74958 44969,Pignans,4812,PAC,75,FR,43.30071,6.2265 44974,Piolenc,4812,PAC,75,FR,44.17765,4.76157 44996,Plan-dAups-Sainte-Baume,4812,PAC,75,FR,43.33333,5.71667 44997,Plan-de-Cuques,4812,PAC,75,FR,43.34753,5.46398 45163,Pont de Vivaux,4812,PAC,75,FR,43.27604,5.41586 45233,Port-de-Bouc,4812,PAC,75,FR,43.40657,4.9809 45229,Port-Saint-Louis-du-Rhône,4812,PAC,75,FR,43.38734,4.82609 45266,Pourrières,4812,PAC,75,FR,43.50611,5.73452 45316,Puget-sur-Argens,4812,PAC,75,FR,43.45576,6.68519 45314,Puget-Théniers,4812,PAC,75,FR,43.95598,6.89378 45315,Puget-Ville,4812,PAC,75,FR,43.28958,6.13612 45339,Puyloubier,4812,PAC,75,FR,43.52522,5.6765 45421,Ramatuelle,4812,PAC,75,FR,43.21599,6.61156 45690,Régusse,4812,PAC,75,FR,43.6554,6.13186 45449,Reillanne,4812,PAC,75,FR,43.87899,5.65919 45486,Rians,4812,PAC,75,FR,43.60691,5.75696 45509,Riez,4812,PAC,75,FR,43.8181,6.09268 45537,Robion,4812,PAC,75,FR,43.84697,5.11017 45538,Rocbaron,4812,PAC,75,FR,43.30904,6.07941 45558,Rognac,4812,PAC,75,FR,43.48761,5.23387 45559,Rognes,4812,PAC,75,FR,43.66378,5.34733 45560,Rognonas,4812,PAC,75,FR,43.89993,4.80369 45588,Roquebillière,4812,PAC,75,FR,44.01203,7.30727 45589,Roquebrune-Cap-Martin,4812,PAC,75,FR,43.76408,7.48207 45590,Roquebrune-sur-Argens,4812,PAC,75,FR,43.44313,6.63772 45593,Roquefort-la-Bédoule,4812,PAC,75,FR,43.24883,5.59015 45597,Roquevaire,4812,PAC,75,FR,43.35021,5.60414 45618,Rouet,4812,PAC,75,FR,43.27808,5.39158 45624,Rougiers,4812,PAC,75,FR,43.39233,5.85112 45637,Rousset,4812,PAC,75,FR,43.48307,5.61959 45638,Roussillon,4812,PAC,75,FR,43.90239,5.29274 45699,Sablet,4812,PAC,75,FR,44.19265,5.00566 45715,Saignon,4812,PAC,75,FR,43.86308,5.42838 45754,Saint-Andiol,4812,PAC,75,FR,43.83484,4.94453 45755,Saint-André,4812,PAC,75,FR,43.3563,5.34335 45761,Saint-André-de-la-Roche,4812,PAC,75,FR,43.73333,7.28333 45770,Saint-Antoine,4812,PAC,75,FR,43.37087,5.35888 45803,Saint-Barnabé,4812,PAC,75,FR,43.3,5.41667 45805,Saint-Barthélémy,4812,PAC,75,FR,43.33105,5.40241 45817,Saint-Bonnet-en-Champsaur,4812,PAC,75,FR,44.68333,6.08333 45837,Saint-Cannat,4812,PAC,75,FR,43.62132,5.2981 45893,Saint-Cézaire-sur-Siagne,4812,PAC,75,FR,43.65015,6.79219 45845,Saint-Chaffrey,4812,PAC,75,FR,44.92555,6.60768 45846,Saint-Chamas,4812,PAC,75,FR,43.55048,5.03501 45849,Saint-Charles,4812,PAC,75,FR,43.30199,5.38405 45889,Saint-Cyr-sur-Mer,4812,PAC,75,FR,43.18048,5.7012 45905,Saint-Didier,4812,PAC,75,FR,44.00424,5.11053 46650,Saint-Étienne-de-Tinée,4812,PAC,75,FR,44.25643,6.92499 46654,Saint-Étienne-du-Grès,4812,PAC,75,FR,43.78045,4.72534 46037,Saint-Giniez,4812,PAC,75,FR,43.26946,5.38566 46047,Saint-Henri,4812,PAC,75,FR,43.36151,5.33069 46082,Saint-Jean du Désert,4812,PAC,75,FR,43.29331,5.42134 46085,Saint-Jean-Cap-Ferrat,4812,PAC,75,FR,43.68843,7.33361 46122,Saint-Jeannet,4812,PAC,75,FR,43.74718,7.14299 46166,Saint-Jérôme,4812,PAC,75,FR,43.33404,5.41733 46128,Saint-Joseph,4812,PAC,75,FR,43.34617,5.37976 46136,Saint-Julien,4812,PAC,75,FR,43.31334,5.44935 46150,Saint-Just,4812,PAC,75,FR,43.317,5.40587 46167,Saint-Lambert,4812,PAC,75,FR,43.28606,5.36 46185,Saint-Laurent-du-Var,4812,PAC,75,FR,43.67323,7.19 46191,Saint-Lazare,4812,PAC,75,FR,43.30545,5.37443 46197,Saint-Louis,4812,PAC,75,FR,43.34809,5.35463 46199,Saint-Loup,4812,PAC,75,FR,43.27766,5.43133 46235,Saint-Mandrier-sur-Mer,4812,PAC,75,FR,43.078,5.929 46239,Saint-Marc-Jaumegarde,4812,PAC,75,FR,43.54718,5.5228 46242,Saint-Marcel,4812,PAC,75,FR,43.28745,5.46604 46270,Saint-Martin-de-Crau,4812,PAC,75,FR,43.63955,4.8127 46276,Saint-Martin-de-Queyrières,4812,PAC,75,FR,44.82319,6.57901 46292,Saint-Martin-du-Var,4812,PAC,75,FR,43.81846,7.19062 46266,Saint-Martin-Vésubie,4812,PAC,75,FR,44.06892,7.25583 46322,Saint-Mauront,4812,PAC,75,FR,43.31552,5.37538 46325,Saint-Maximin-la-Sainte-Baume,4812,PAC,75,FR,43.44813,5.86081 46329,Saint-Menet,4812,PAC,75,FR,43.28997,5.50427 46339,Saint-Michel-l’Observatoire,4812,PAC,75,FR,43.90977,5.71584 46343,Saint-Mitre,4812,PAC,75,FR,43.3464,5.42274 46344,Saint-Mitre-les-Remparts,4812,PAC,75,FR,43.45503,5.01429 46410,Saint-Paul-de-Vence,4812,PAC,75,FR,43.7,7.11667 46413,Saint-Paul-en-Forêt,4812,PAC,75,FR,43.56709,6.69206 46428,Saint-Pierre,4812,PAC,75,FR,43.29282,5.40682 46494,Saint-Raphaël,4812,PAC,75,FR,43.42332,6.7735 46511,Saint-Rémy-de-Provence,4812,PAC,75,FR,43.78848,4.83167 46522,Saint-Saturnin-lès-Apt,4812,PAC,75,FR,43.93333,5.38333 46523,Saint-Saturnin-lès-Avignon,4812,PAC,75,FR,43.95501,4.92548 46543,Saint-Savournin,4812,PAC,75,FR,43.40848,5.5269 46588,Saint-Tronc,4812,PAC,75,FR,43.27093,5.42285 46589,Saint-Tropez,4812,PAC,75,FR,43.26764,6.64049 46600,Saint-Vallier-de-Thiey,4812,PAC,75,FR,43.69841,6.84779 46610,Saint-Victoret,4812,PAC,75,FR,43.41957,5.23396 46634,Saint-Zacharie,4812,PAC,75,FR,43.38521,5.70808 46661,Sainte-Agnès,4812,PAC,75,FR,43.80054,7.4615 46662,Sainte-Anastasie-sur-Issole,4812,PAC,75,FR,43.34266,6.12493 46663,Sainte-Anne,4812,PAC,75,FR,43.2572,5.39377 46675,Sainte-Cécile-les-Vignes,4812,PAC,75,FR,44.24542,4.88613 46705,Sainte-Marguerite,4812,PAC,75,FR,43.26196,5.40125 46715,Sainte-Marthe,4812,PAC,75,FR,43.33449,5.39112 46718,Sainte-Maxime,4812,PAC,75,FR,43.30907,6.63849 46732,Sainte-Tulle,4812,PAC,75,FR,43.78619,5.76513 46735,Saintes-Maries-de-la-Mer,4812,PAC,75,FR,43.45214,4.42913 46745,Salernes,4812,PAC,75,FR,43.5635,6.23386 46766,Salon-de-Provence,4812,PAC,75,FR,43.64229,5.09478 46780,Sanary-sur-Mer,4812,PAC,75,FR,43.11985,5.80155 46816,Sarrians,4812,PAC,75,FR,44.08312,4.97111 46844,Sault,4812,PAC,75,FR,44.08968,5.40836 46856,Sausset-les-Pins,4812,PAC,75,FR,43.33136,5.10431 46923,Seillans,4812,PAC,75,FR,43.63623,6.64332 47139,Sénas,4812,PAC,75,FR,43.74375,5.078 46951,Septèmes-les-Vallons,4812,PAC,75,FR,43.39834,5.36596 47145,Sérignan-du-Comtat,4812,PAC,75,FR,44.18915,4.84379 46966,Serres,4812,PAC,75,FR,44.42753,5.71458 46982,Seyne-les-Alpes,4812,PAC,75,FR,44.35042,6.35634 46992,Signes,4812,PAC,75,FR,43.2908,5.86284 47002,Simiane-Collongue,4812,PAC,75,FR,43.43067,5.43454 47009,Sisteron,4812,PAC,75,FR,44.19002,5.94643 47010,Six-Fours-les-Plages,4812,PAC,75,FR,43.09174,5.82465 47030,Solliès-Pont,4812,PAC,75,FR,43.19009,6.04115 47031,Solliès-Toucas,4812,PAC,75,FR,43.20579,6.02485 47032,Solliès-Ville,4812,PAC,75,FR,43.18256,6.03849 47046,Sorgues,4812,PAC,75,FR,44.01023,4.87381 47048,Sormiou,4812,PAC,75,FR,43.20959,5.41872 47052,Sospel,4812,PAC,75,FR,43.87792,7.44788 47095,Spéracèdes,4812,PAC,75,FR,43.6485,6.85889 47155,Taillades,4812,PAC,75,FR,43.83762,5.08951 47164,Tallard,4812,PAC,75,FR,44.462,6.05205 47172,Tanneron,4812,PAC,75,FR,43.59057,6.87541 47174,Taradeau,4812,PAC,75,FR,43.45444,6.42729 47176,Tarascon,4812,PAC,75,FR,43.80583,4.66028 47202,Tende,4812,PAC,75,FR,44.08752,7.59366 47270,Théoule-sur-Mer,4812,PAC,75,FR,43.5078,6.9408 47229,Thiers,4812,PAC,75,FR,43.29748,5.38198 47312,Toulon,4812,PAC,75,FR,43.12442,5.92836 47331,Tourrette-Levens,4812,PAC,75,FR,43.7864,7.27598 47332,Tourrettes-sur-Loup,4812,PAC,75,FR,43.71569,7.05892 47335,Tourves,4812,PAC,75,FR,43.40803,5.92392 47348,Trans-en-Provence,4812,PAC,75,FR,43.50326,6.48641 47366,Trets,4812,PAC,75,FR,43.44818,5.68328 47421,Uchaux,4812,PAC,75,FR,44.21667,4.8 47451,Vacqueyras,4812,PAC,75,FR,44.13835,4.98332 47459,Vaison-la-Romaine,4812,PAC,75,FR,44.23896,5.07461 47467,Valbonne,4812,PAC,75,FR,43.63292,6.99911 47476,Valensole,4812,PAC,75,FR,43.83766,5.98392 47485,Vallauris,4812,PAC,75,FR,43.57803,7.05451 47500,Valréas,4812,PAC,75,FR,44.3849,4.99125 47506,Var,4812,PAC,75,FR,43.4586,6.29145 47554,Vedène,4812,PAC,75,FR,43.97744,4.90428 47560,Velaux,4812,PAC,75,FR,43.52839,5.25661 47561,Velleron,4812,PAC,75,FR,43.95742,5.02936 47564,Venasque,4812,PAC,75,FR,43.99595,5.14666 47565,Vence,4812,PAC,75,FR,43.72254,7.11183 47580,Venelles,4812,PAC,75,FR,43.59859,5.47977 47587,Ventabren,4812,PAC,75,FR,43.53847,5.29541 47596,Verduron,4812,PAC,75,FR,43.37063,5.34513 47627,Vernègues,4812,PAC,75,FR,43.68575,5.17156 47652,Veynes,4812,PAC,75,FR,44.53406,5.82321 47673,Vidauban,4812,PAC,75,FR,43.42721,6.43185 47674,Vieille Chapelle,4812,PAC,75,FR,43.24963,5.38048 47709,Villar-Saint-Pancrace,4812,PAC,75,FR,44.87318,6.62669 47728,Villecroze,4812,PAC,75,FR,43.58223,6.27587 47740,Villefranche-sur-Mer,4812,PAC,75,FR,43.70392,7.31088 47747,Villelaure,4812,PAC,75,FR,43.71075,5.43422 47760,Villeneuve,4812,PAC,75,FR,44.94488,6.56545 47762,Villeneuve-Loubet,4812,PAC,75,FR,43.6579,7.12233 47814,Villes-sur-Auzon,4812,PAC,75,FR,44.05669,5.2343 47849,Vinon-sur-Verdon,4812,PAC,75,FR,43.72484,5.81168 47854,Violès,4812,PAC,75,FR,44.16176,4.95483 47869,Visan,4812,PAC,75,FR,44.31468,4.95033 47870,Vitrolles,4812,PAC,75,FR,43.46,5.24861 47897,Volonne,4812,PAC,75,FR,44.11039,6.01424 47900,Volx,4812,PAC,75,FR,43.87787,5.84148 23461,Aach,3006,BW,82,DE,47.8424,8.85384 23464,Aalen,3006,BW,82,DE,48.83777,10.0933 23469,Abstatt,3006,BW,82,DE,49.0682,9.2907 23471,Abtsgmünd,3006,BW,82,DE,48.89503,10.00172 23472,Achern,3006,BW,82,DE,48.63115,8.07607 23475,Achstetten,3006,BW,82,DE,48.25886,9.89748 23477,Adelberg,3006,BW,82,DE,48.76227,9.59991 23480,Adelmannsfelden,3006,BW,82,DE,48.95476,10.00466 23482,Adelsheim,3006,BW,82,DE,49.4015,9.3925 23495,Affalterbach,3006,BW,82,DE,48.92267,9.32362 23498,Aglasterhausen,3006,BW,82,DE,49.35694,8.98694 23517,Aichelberg,3006,BW,82,DE,48.63557,9.56373 23519,Aichhalden,3006,BW,82,DE,48.26719,8.40233 23520,Aichstetten,3006,BW,82,DE,47.89295,10.07837 23523,Aidlingen,3006,BW,82,DE,48.67849,8.89524 23528,Aitrach,3006,BW,82,DE,47.93333,10.08333 23532,Albbruck,3006,BW,82,DE,47.59077,8.12954 23534,Albershausen,3006,BW,82,DE,48.69136,9.56493 23541,Albstadt,3006,BW,82,DE,48.21644,9.02596 23544,Aldingen,3006,BW,82,DE,48.1,8.7 23548,Alfdorf,3006,BW,82,DE,48.84385,9.71857 23557,Allensbach,3006,BW,82,DE,47.71536,9.07145 23561,Allmendingen,3006,BW,82,DE,48.33052,9.72419 23562,Allmersbach im Tal,3006,BW,82,DE,48.90659,9.46815 23566,Alpirsbach,3006,BW,82,DE,48.34507,8.40197 23582,Altbach,3006,BW,82,DE,48.72268,9.38078 23584,Altdorf,3006,BW,82,DE,48.63112,8.99626 23612,Altenriet,3006,BW,82,DE,48.5914,9.22186 23615,Altensteig,3006,BW,82,DE,48.58649,8.60395 23619,Altes Lager,3006,BW,82,DE,48.41755,9.53606 23623,Althengstett,3006,BW,82,DE,48.72325,8.79434 23624,Althütte,3006,BW,82,DE,48.91565,9.56984 23628,Altlußheim,3006,BW,82,DE,49.30167,8.49917 23634,Altshausen,3006,BW,82,DE,47.93333,9.53333 23650,Amstetten,3006,BW,82,DE,48.57876,9.87388 23651,Amtzell,3006,BW,82,DE,47.7,9.75 23710,Aspach,3006,BW,82,DE,48.96667,9.4 23711,Asperg,3006,BW,82,DE,48.90525,9.13502 23712,Assamstadt,3006,BW,82,DE,49.42806,9.68611 23713,Asselfingen,3006,BW,82,DE,48.52959,10.19166 23717,Attenweiler,3006,BW,82,DE,48.13333,9.7 23720,Au,3006,BW,82,DE,47.95,7.83333 23721,Au am Rhein,3006,BW,82,DE,48.95,8.23333 23730,Auggen,3006,BW,82,DE,47.78333,7.6 23738,Aulendorf,3006,BW,82,DE,47.95083,9.63745 23758,Backnang,3006,BW,82,DE,48.94743,9.43718 23763,Bad Bellingen,3006,BW,82,DE,47.73147,7.55756 23779,Bad Buchau,3006,BW,82,DE,48.06231,9.61244 23781,Bad Ditzenbach,3006,BW,82,DE,48.5883,9.70393 23787,Bad Dürrheim,3006,BW,82,DE,48.02093,8.53056 23805,Bad Herrenalb,3006,BW,82,DE,48.79787,8.43617 23830,Bad Liebenzell,3006,BW,82,DE,48.77427,8.72971 23835,Bad Mergentheim,3006,BW,82,DE,49.4925,9.77361 23847,Bad Peterstal-Griesbach,3006,BW,82,DE,48.43333,8.21667 23849,Bad Rappenau,3006,BW,82,DE,49.23848,9.1018 23851,Bad Rippoldsau-Schapbach,3006,BW,82,DE,48.42883,8.32584 23874,Bad Säckingen,3006,BW,82,DE,47.55371,7.94612 23863,Bad Schussenried,3006,BW,82,DE,48.00468,9.65741 23876,Bad Teinach-Zavelstein,3006,BW,82,DE,48.69051,8.69285 23891,Bad Überkingen,3006,BW,82,DE,48.59991,9.79586 23879,Bad Urach,3006,BW,82,DE,48.49107,9.40009 23881,Bad Waldsee,3006,BW,82,DE,47.92027,9.7549 23883,Bad Wildbad,3006,BW,82,DE,48.75071,8.5504 23886,Bad Wimpfen,3006,BW,82,DE,49.22971,9.15648 23888,Bad Wurzach,3006,BW,82,DE,47.90799,9.89686 23895,Baden-Baden,3006,BW,82,DE,48.7606,8.23975 23897,Badenweiler,3006,BW,82,DE,47.80223,7.67236 23899,Bahlingen,3006,BW,82,DE,48.12064,7.73982 23902,Baienfurt,3006,BW,82,DE,47.82857,9.65157 23904,Baiersbronn,3006,BW,82,DE,48.50318,8.37699 23906,Baindt,3006,BW,82,DE,47.85,9.66667 23910,Balingen,3006,BW,82,DE,48.27525,8.85464 23913,Baltmannsweiler,3006,BW,82,DE,48.74215,9.4494 23915,Balzfeld,3006,BW,82,DE,49.26892,8.78919 23919,Bammental,3006,BW,82,DE,49.35611,8.77944 23945,Bartholomä,3006,BW,82,DE,48.7535,9.98752 23995,Beilstein,3006,BW,82,DE,49.0414,9.3137 23996,Beimerstetten,3006,BW,82,DE,48.48333,9.98333 24006,Bempflingen,3006,BW,82,DE,48.57178,9.26834 24014,Benningen am Neckar,3006,BW,82,DE,48.94672,9.24212 24030,Bergatreute,3006,BW,82,DE,47.85,9.75 24038,Berghaupten,3006,BW,82,DE,48.40602,7.98672 24040,Berghülen,3006,BW,82,DE,48.46399,9.7611 24052,Berkheim,3006,BW,82,DE,48.04263,10.08227 24058,Bermatingen,3006,BW,82,DE,47.73333,9.35 24059,Bernau,3006,BW,82,DE,47.80018,8.0383 24072,Bernstadt,3006,BW,82,DE,48.49957,10.02575 24078,Besigheim,3006,BW,82,DE,48.99797,9.14268 24088,Beuren,3006,BW,82,DE,48.56927,9.40406 24095,Biberach,3006,BW,82,DE,48.61008,8.27704 24096,Biberach an der Riß,3006,BW,82,DE,48.09345,9.79053 24114,Bietigheim,3006,BW,82,DE,48.90919,8.25202 24115,Bietigheim-Bissingen,3006,BW,82,DE,48.94407,9.11755 24118,Billigheim,3006,BW,82,DE,49.34861,9.25389 24121,Binau,3006,BW,82,DE,49.36833,9.05806 24123,Bingen,3006,BW,82,DE,48.11127,9.27238 24128,Binzen,3006,BW,82,DE,47.63333,7.61667 24130,Birenbach,3006,BW,82,DE,48.74732,9.66115 24134,Birkenfeld,3006,BW,82,DE,48.86667,8.63333 24152,Bischweier,3006,BW,82,DE,48.83766,8.28412 24153,Bisingen,3006,BW,82,DE,48.31012,8.91738 24158,Bissingen an der Teck,3006,BW,82,DE,48.59915,9.49146 24161,Bitz,3006,BW,82,DE,48.244,9.09144 24173,Blaubeuren,3006,BW,82,DE,48.41215,9.78427 24174,Blaufelden,3006,BW,82,DE,49.29778,9.97389 24187,Blumberg,3006,BW,82,DE,47.84058,8.53329 24462,Böbingen an der Rems,3006,BW,82,DE,48.81955,9.9213 24463,Böblingen,3006,BW,82,DE,48.68212,9.01171 24203,Bodelshausen,3006,BW,82,DE,48.38886,8.97703 24210,Bodman-Ludwigshafen,3006,BW,82,DE,47.81817,9.0554 24211,Bodnegg,3006,BW,82,DE,47.71014,9.68841 24467,Böhmenkirch,3006,BW,82,DE,48.68333,9.93333 24222,Bolheim,3006,BW,82,DE,48.63141,10.14995 24223,Boll,3006,BW,82,DE,48.64357,9.61295 24226,Bollschweil,3006,BW,82,DE,47.92143,7.78986 24229,Bondorf,3006,BW,82,DE,48.52064,8.83704 24232,Bonndorf,3006,BW,82,DE,47.81863,8.34139 24470,Bönnigheim,3006,BW,82,DE,49.04018,9.09386 24236,Bopfingen,3006,BW,82,DE,48.85847,10.35417 24476,Börtlingen,3006,BW,82,DE,48.75376,9.63181 24481,Bösingen,3006,BW,82,DE,48.23333,8.55 24483,Böttingen,3006,BW,82,DE,48.1,8.8 24484,Bötzingen,3006,BW,82,DE,48.07642,7.72485 24268,Boxberg,3006,BW,82,DE,49.47965,9.64006 24271,Brackenheim,3006,BW,82,DE,49.07787,9.06601 24364,Bräunlingen,3006,BW,82,DE,47.92957,8.44806 24289,Braunsbach,3006,BW,82,DE,49.19917,9.79056 24302,Breisach am Rhein,3006,BW,82,DE,48.03279,7.58294 24314,Breitnau,3006,BW,82,DE,47.93333,8.08333 24325,Bretten,3006,BW,82,DE,49.03685,8.70745 24327,Bretzfeld,3006,BW,82,DE,49.17944,9.43833 24351,Bruchsal,3006,BW,82,DE,49.12426,8.59804 24371,Brühl,3006,BW,82,DE,49.39722,8.53361 24377,Bubsheim,3006,BW,82,DE,48.11667,8.83333 24380,Buch am Ahorn,3006,BW,82,DE,49.53909,9.5556 24386,Buchen in Odenwald,3006,BW,82,DE,49.52416,9.32293 24387,Buchenbach,3006,BW,82,DE,47.96138,8.00909 24400,Buggingen,3006,BW,82,DE,47.8475,7.63799 24495,Bühl,3006,BW,82,DE,48.69676,8.13523 24496,Bühlertal,3006,BW,82,DE,48.68569,8.18876 24497,Bühlertann,3006,BW,82,DE,49.04167,9.90861 24498,Bühlerzell,3006,BW,82,DE,49.00333,9.92056 24429,Burgrieden,3006,BW,82,DE,48.23333,9.93333 24434,Burgstetten,3006,BW,82,DE,48.92805,9.37239 24443,Burladingen,3006,BW,82,DE,48.29111,9.11286 24505,Büsingen,3006,BW,82,DE,47.69638,8.68759 24519,Calw,3006,BW,82,DE,48.71419,8.74031 24540,Cleebronn,3006,BW,82,DE,49.045,9.03694 24557,Crailsheim,3006,BW,82,DE,49.13444,10.07193 24559,Creglingen,3006,BW,82,DE,49.46937,10.03119 24585,Daisendorf,3006,BW,82,DE,47.71265,9.26783 24604,Dauchingen,3006,BW,82,DE,48.08993,8.55011 24607,Deckenpfronn,3006,BW,82,DE,48.65128,8.82417 24611,Deggingen,3006,BW,82,DE,48.5971,9.71891 24614,Deilingen,3006,BW,82,DE,48.1741,8.78533 24620,Deißlingen,3006,BW,82,DE,48.1123,8.60736 24619,Deizisau,3006,BW,82,DE,48.7122,9.3861 24630,Denkendorf,3006,BW,82,DE,48.69555,9.31675 24631,Denkingen,3006,BW,82,DE,48.1111,8.7382 24635,Denzlingen,3006,BW,82,DE,48.06667,7.88333 24649,Dettenhausen,3006,BW,82,DE,48.60758,9.10041 24650,Dettighofen,3006,BW,82,DE,47.62333,8.48512 24651,Dettingen,3006,BW,82,DE,48.26246,9.72161 24652,Dettingen an der Erms,3006,BW,82,DE,48.53077,9.34458 24653,Dettingen unter Teck,3006,BW,82,DE,48.61667,9.45 24668,Dielheim,3006,BW,82,DE,49.28417,8.73806 24677,Dietenheim,3006,BW,82,DE,48.21072,10.07163 24683,Dietingen,3006,BW,82,DE,48.2048,8.64864 24704,Dischingen,3006,BW,82,DE,48.7,10.36667 24710,Ditzingen,3006,BW,82,DE,48.82672,9.06703 24712,Dobel,3006,BW,82,DE,48.8,8.5 24717,Dogern,3006,BW,82,DE,47.60952,8.16713 24729,Donaueschingen,3006,BW,82,DE,47.95514,8.49707 24733,Donzdorf,3006,BW,82,DE,48.68544,9.81053 24739,Dormettingen,3006,BW,82,DE,48.23688,8.77327 24742,Dornhan,3006,BW,82,DE,48.35008,8.50901 24743,Dornstadt,3006,BW,82,DE,48.46697,9.94434 24744,Dornstetten,3006,BW,82,DE,48.47198,8.49817 24803,Dörzbach,3006,BW,82,DE,49.38355,9.70732 24749,Dossenheim,3006,BW,82,DE,49.45028,8.67472 24750,Dotternhausen,3006,BW,82,DE,48.22848,8.79228 24782,Dunningen,3006,BW,82,DE,48.21242,8.50619 24785,Durbach,3006,BW,82,DE,48.49352,8.01736 24809,Dürbheim,3006,BW,82,DE,48.05623,8.79344 24786,Durlangen,3006,BW,82,DE,48.85632,9.79654 24811,Dürmentingen,3006,BW,82,DE,48.11667,9.53333 24787,Durmersheim,3006,BW,82,DE,48.93333,8.26667 24812,Dürnau,3006,BW,82,DE,48.64079,9.63544 24789,Dußlingen,3006,BW,82,DE,48.45357,9.05552 24824,Ebenweiler,3006,BW,82,DE,47.9,9.51667 24825,Eberbach,3006,BW,82,DE,49.4668,8.99016 24826,Eberdingen,3006,BW,82,DE,48.87942,8.96502 24828,Eberhardzell,3006,BW,82,DE,48.0,9.81667 24833,Ebersbach an der Fils,3006,BW,82,DE,48.716,9.5236 24834,Ebersbach-Musbach,3006,BW,82,DE,47.96667,9.58333 24838,Eberstadt,3006,BW,82,DE,49.18028,9.32111 24841,Ebhausen,3006,BW,82,DE,48.58333,8.68333 24843,Ebringen,3006,BW,82,DE,47.9578,7.77652 24861,Edingen-Neckarhausen,3006,BW,82,DE,49.45722,8.60639 24864,Efringen-Kirchen,3006,BW,82,DE,47.65,7.56667 24867,Egenhausen,3006,BW,82,DE,48.56667,8.61667 24873,Eggenstein-Leopoldshafen,3006,BW,82,DE,49.09006,8.39879 24878,Eggingen,3006,BW,82,DE,47.7,8.4 24888,Ehingen,3006,BW,82,DE,48.28259,9.72749 24891,Ehningen,3006,BW,82,DE,48.65882,8.94124 24905,Eichstetten,3006,BW,82,DE,48.09427,7.74244 24911,Eigeltingen,3006,BW,82,DE,47.85802,8.89784 24916,Eimeldingen,3006,BW,82,DE,47.63333,7.6 24925,Eisenbach,3006,BW,82,DE,47.96117,8.26802 24931,Eisingen,3006,BW,82,DE,48.95,8.66667 24934,Eislingen,3006,BW,82,DE,48.69515,9.70676 24947,Ellenberg,3006,BW,82,DE,49.01667,10.21667 24953,Ellhofen,3006,BW,82,DE,49.14667,9.32194 24956,Ellwangen,3006,BW,82,DE,48.96164,10.13173 24979,Elzach,3006,BW,82,DE,48.17247,8.06992 24988,Emmendingen,3006,BW,82,DE,48.12096,7.85359 24991,Emmingen-Liptingen,3006,BW,82,DE,47.93333,8.88333 24992,Empfingen,3006,BW,82,DE,48.39258,8.71036 24999,Endingen,3006,BW,82,DE,48.14221,7.70049 25002,Engelsbrand,3006,BW,82,DE,48.83333,8.65 25005,Engen,3006,BW,82,DE,47.85534,8.77342 25007,Eningen unter Achalm,3006,BW,82,DE,48.48686,9.25946 25011,Ennetach,3006,BW,82,DE,48.05238,9.3201 25015,Enzklösterle,3006,BW,82,DE,48.66638,8.47083 25016,Epfenbach,3006,BW,82,DE,49.33917,8.90778 25017,Epfendorf,3006,BW,82,DE,48.25,8.6 25019,Eppelheim,3006,BW,82,DE,49.4019,8.63644 25024,Eppingen,3006,BW,82,DE,49.13645,8.91229 25028,Erbach,3006,BW,82,DE,48.32841,9.88752 25033,Erdmannhausen,3006,BW,82,DE,48.94256,9.29615 25044,Eriskirch,3006,BW,82,DE,47.62479,9.54197 25046,Erkenbrechtsweiler,3006,BW,82,DE,48.55656,9.43211 25057,Erlenbach,3006,BW,82,DE,49.1725,9.26833 25059,Erlenmoos,3006,BW,82,DE,48.0653,9.97567 25061,Erligheim,3006,BW,82,DE,49.0225,9.09722 25066,Erolzheim,3006,BW,82,DE,48.09001,10.073 25069,Ersingen,3006,BW,82,DE,48.2926,9.8551 25070,Ertingen,3006,BW,82,DE,48.1,9.46667 25074,Eschach,3006,BW,82,DE,48.88832,9.86999 25079,Eschelbronn,3006,BW,82,DE,49.31944,8.86528 25080,Eschenbach,3006,BW,82,DE,48.65264,9.67037 25099,Essingen,3006,BW,82,DE,48.80859,10.02773 25101,Esslingen,3006,BW,82,DE,48.73961,9.30473 25106,Ettenheim,3006,BW,82,DE,48.25696,7.81247 25107,Ettlingen,3006,BW,82,DE,48.94094,8.40763 25118,Eutingen an der Enz,3006,BW,82,DE,48.91246,8.74898 25127,Fahrenbach,3006,BW,82,DE,49.43139,9.15056 25153,Feldberg,3006,BW,82,DE,47.77435,7.64142 25159,Fellbach,3006,BW,82,DE,48.80912,9.27697 25168,Fichtenberg,3006,BW,82,DE,48.98601,9.71199 25170,Filderstadt,3006,BW,82,DE,48.65698,9.22049 25181,Fischerbach,3006,BW,82,DE,48.28687,8.10959 25188,Flein,3006,BW,82,DE,49.10306,9.21083 25203,Forbach,3006,BW,82,DE,48.68333,8.35 25205,Forchheim,3006,BW,82,DE,48.16667,7.7 25206,Forchtenberg,3006,BW,82,DE,49.28867,9.56026 25208,Forst,3006,BW,82,DE,49.15861,8.58083 25239,Freiberg am Neckar,3006,BW,82,DE,48.93196,9.2024 25240,Freiburg,3006,BW,82,DE,47.9959,7.85222 25242,Freiburg Region,3006,BW,82,DE,48.16667,8.33333 25258,Freudenberg,3006,BW,82,DE,49.75349,9.32748 25260,Freudenstadt,3006,BW,82,DE,48.46695,8.41371 25261,Freudental,3006,BW,82,DE,49.00972,9.05917 25266,Frickenhausen,3006,BW,82,DE,48.59353,9.36005 25267,Frickingen,3006,BW,82,DE,47.81438,9.27349 25268,Fridingen an der Donau,3006,BW,82,DE,48.01955,8.92322 25276,Friedenweiler,3006,BW,82,DE,47.91778,8.25627 25288,Friedrichshafen,3006,BW,82,DE,47.65689,9.47554 25301,Friolzheim,3006,BW,82,DE,48.83333,8.83333 25302,Frittlingen,3006,BW,82,DE,48.12709,8.70774 25307,Fronreute,3006,BW,82,DE,47.87053,9.56944 25329,Fürstenberg,3006,BW,82,DE,47.67895,9.15535 25319,Furtwangen,3006,BW,82,DE,48.05156,8.20715 25345,Gaggenau,3006,BW,82,DE,48.8,8.33333 25346,Gaiberg,3006,BW,82,DE,49.36639,8.74972 25347,Gaienhofen,3006,BW,82,DE,47.68333,8.98333 25348,Gaildorf,3006,BW,82,DE,49.00027,9.76953 25349,Gailingen,3006,BW,82,DE,47.69711,8.75567 25354,Gammelshausen,3006,BW,82,DE,48.64023,9.65072 25355,Gammertingen,3006,BW,82,DE,48.2524,9.22349 25774,Gärtringen,3006,BW,82,DE,48.64176,8.90073 25387,Gechingen,3006,BW,82,DE,48.69527,8.82915 25405,Geisingen,3006,BW,82,DE,47.92504,8.65002 25407,Geislingen,3006,BW,82,DE,48.28768,8.81241 25408,Geislingen an der Steige,3006,BW,82,DE,48.62423,9.82736 25420,Gemmingen,3006,BW,82,DE,49.15639,8.98194 25421,Gemmrigheim,3006,BW,82,DE,49.02833,9.15556 25426,Gengenbach,3006,BW,82,DE,48.40476,8.01433 25436,Gerabronn,3006,BW,82,DE,48.97071,9.91986 25444,Gerlingen,3006,BW,82,DE,48.79954,9.06316 25449,Gernsbach,3006,BW,82,DE,48.77034,8.34306 25462,Gerstetten,3006,BW,82,DE,48.62254,10.01984 25484,Giengen an der Brenz,3006,BW,82,DE,48.62219,10.24312 25494,Gingen an der Fils,3006,BW,82,DE,48.65979,9.78092 25507,Glatten,3006,BW,82,DE,48.44246,8.51116 25776,Göggingen,3006,BW,82,DE,48.86123,9.88398 25537,Gomadingen,3006,BW,82,DE,48.3998,9.39065 25538,Gomaringen,3006,BW,82,DE,48.45349,9.09582 25541,Gondelsheim,3006,BW,82,DE,49.05917,8.65833 25779,Göppingen,3006,BW,82,DE,48.70354,9.65209 25784,Görwihl,3006,BW,82,DE,47.64275,8.07482 25546,Gosheim,3006,BW,82,DE,48.1343,8.75426 25550,Gottenheim,3006,BW,82,DE,48.05,7.73333 25553,Gottmadingen,3006,BW,82,DE,47.73511,8.77687 25556,Graben-Neudorf,3006,BW,82,DE,49.16695,8.49243 25557,Grabenstetten,3006,BW,82,DE,48.52397,9.46155 25563,Grafenau,3006,BW,82,DE,48.71427,8.91219 25565,Grafenhausen,3006,BW,82,DE,48.28427,7.76678 25588,Greffern,3006,BW,82,DE,48.75205,8.00515 25599,Grenzach-Wyhlen,3006,BW,82,DE,47.55,7.68333 25654,Großbettlingen,3006,BW,82,DE,48.59052,9.30782 25657,Großbottwar,3006,BW,82,DE,49.00147,9.29348 25617,Grosselfingen,3006,BW,82,DE,48.33229,8.88704 25671,Großerlach,3006,BW,82,DE,49.05368,9.51356 25700,Großrinderfeld,3006,BW,82,DE,49.66536,9.73356 25718,Gruibingen,3006,BW,82,DE,48.59483,9.64389 25742,Grünkraut,3006,BW,82,DE,47.74417,9.65588 25743,Grünsfeld,3006,BW,82,DE,49.60949,9.74725 25746,Gschwend,3006,BW,82,DE,48.93333,9.74436 25792,Güglingen,3006,BW,82,DE,49.06642,9.00175 25754,Gundelfingen,3006,BW,82,DE,48.04246,7.8657 25756,Gundelsheim,3006,BW,82,DE,49.2833,9.16037 25764,Gutach,3006,BW,82,DE,48.24844,8.21293 25765,Gutach im Breisgau,3006,BW,82,DE,48.11667,7.98333 25801,Gütenbach,3006,BW,82,DE,48.05,8.15 25769,Gutenzell-Hürbel,3006,BW,82,DE,48.11667,9.98333 25824,Hagnau,3006,BW,82,DE,47.67666,9.31787 25831,Haigerloch,3006,BW,82,DE,48.36614,8.80357 25840,Haiterbach,3006,BW,82,DE,48.52066,8.64435 25865,Hambrücken,3006,BW,82,DE,49.19,8.54056 25900,Hardheim,3006,BW,82,DE,49.61194,9.47194 25901,Hardt,3006,BW,82,DE,48.18333,8.41667 25916,Hartheim,3006,BW,82,DE,47.93333,7.63333 25921,Hasel,3006,BW,82,DE,47.65342,7.8972 25928,Haslach,3006,BW,82,DE,48.56531,8.05658 25965,Haßmersheim,3006,BW,82,DE,49.3,9.15 25937,Hattenhofen,3006,BW,82,DE,48.66648,9.57456 25949,Hausach,3006,BW,82,DE,48.28426,8.17602 25952,Hausen,3006,BW,82,DE,47.68128,7.83986 26297,Häusern,3006,BW,82,DE,47.75,8.16667 25960,Hayingen,3006,BW,82,DE,48.27531,9.4776 25968,Hechingen,3006,BW,82,DE,48.35149,8.96317 25971,Heddesheim,3006,BW,82,DE,49.50556,8.60361 25982,Heidelberg,3006,BW,82,DE,49.40768,8.69079 25987,Heidenheim an der Brenz,3006,BW,82,DE,48.67798,10.15162 25994,Heilbronn,3006,BW,82,DE,49.13995,9.22054 25995,Heiligenberg,3006,BW,82,DE,47.82094,9.3128 26003,Heiligkreuzsteinach,3006,BW,82,DE,49.48333,8.795 26010,Heimsheim,3006,BW,82,DE,48.80656,8.86744 26014,Heiningen,3006,BW,82,DE,48.66177,9.64977 26019,Heitersheim,3006,BW,82,DE,47.87468,7.65721 26031,Helmstadt-Bargen,3006,BW,82,DE,49.31427,8.99712 26041,Hemmingen,3006,BW,82,DE,48.86667,9.03333 26044,Hemsbach,3006,BW,82,DE,49.59075,8.64779 26057,Herbertingen,3006,BW,82,DE,48.06667,9.43333 26058,Herbolzheim,3006,BW,82,DE,48.21884,7.77746 26060,Herbrechtingen,3006,BW,82,DE,48.62173,10.176 26065,Herdwangen-Schönach,3006,BW,82,DE,47.85,9.2 26076,Hermaringen,3006,BW,82,DE,48.59544,10.26065 26086,Herrenberg,3006,BW,82,DE,48.59523,8.86648 26088,Herrischried,3006,BW,82,DE,47.66667,8.0 26106,Hessigheim,3006,BW,82,DE,48.99407,9.18629 26112,Hettingen,3006,BW,82,DE,48.21601,9.23169 26117,Heubach,3006,BW,82,DE,48.79267,9.9337 26120,Heuchlingen,3006,BW,82,DE,48.85215,9.94391 26138,Hildrizhausen,3006,BW,82,DE,48.62423,8.96605 26150,Hilzingen,3006,BW,82,DE,47.76667,8.78333 26158,Hinterzarten,3006,BW,82,DE,47.90276,8.10701 26160,Hirrlingen,3006,BW,82,DE,48.41245,8.88742 26164,Hirschberg an der Bergstraße,3006,BW,82,DE,49.5071,8.65693 26173,Hochdorf,3006,BW,82,DE,48.0256,9.78778 26299,Höchenschwand,3006,BW,82,DE,47.73333,8.16667 26182,Hockenheim,3006,BW,82,DE,49.32334,8.55194 26306,Höfen an der Enz,3006,BW,82,DE,48.8,8.58333 26191,Hofstetten,3006,BW,82,DE,48.25846,8.06595 26193,Hohberg,3006,BW,82,DE,48.3227,7.89972 26216,Hohentengen,3006,BW,82,DE,47.57005,8.4325 26242,Holzgerlingen,3006,BW,82,DE,48.63969,9.01149 26247,Holzmaden,3006,BW,82,DE,48.63333,9.51667 26315,Höpfingen,3006,BW,82,DE,49.6025,9.42861 26256,Horb am Neckar,3006,BW,82,DE,48.44423,8.6913 26257,Horben,3006,BW,82,DE,47.93333,7.86667 26260,Horgenzell,3006,BW,82,DE,47.80534,9.49727 26266,Hornberg,3006,BW,82,DE,48.21068,8.23275 26271,Horrenberg,3006,BW,82,DE,49.2804,8.78087 26331,Hüffenhardt,3006,BW,82,DE,49.29194,9.08167 26332,Hüfingen,3006,BW,82,DE,47.92543,8.48831 26333,Hügelsheim,3006,BW,82,DE,48.8,8.11667 26334,Hülben,3006,BW,82,DE,48.51982,9.4079 26344,Hüttisheim,3006,BW,82,DE,48.27965,9.94246 26345,Hüttlingen,3006,BW,82,DE,48.89266,10.10064 26353,Iffezheim,3006,BW,82,DE,48.82167,8.1431 26357,Igersheim,3006,BW,82,DE,49.49444,9.81694 26359,Iggingen,3006,BW,82,DE,48.83167,9.87894 26361,Ihringen,3006,BW,82,DE,48.04303,7.6476 26366,Illerrieden,3006,BW,82,DE,48.27017,10.05155 26368,Illingen,3006,BW,82,DE,48.95616,8.92459 26370,Illmensee,3006,BW,82,DE,47.86229,9.37235 26376,Ilsfeld,3006,BW,82,DE,49.05548,9.24598 26377,Ilshofen,3006,BW,82,DE,49.17015,9.91825 26378,Ilvesheim,3006,BW,82,DE,49.47404,8.5674 26380,Immendingen,3006,BW,82,DE,47.93333,8.73333 26383,Immenstaad am Bodensee,3006,BW,82,DE,47.66667,9.36667 26388,Ingelfingen,3006,BW,82,DE,49.30028,9.65303 26391,Ingoldingen,3006,BW,82,DE,48.02552,9.74195 26399,Inzigkofen,3006,BW,82,DE,48.07034,9.17998 26400,Inzlingen,3006,BW,82,DE,47.58851,7.69094 26416,Isny,3006,BW,82,DE,47.6926,10.03857 26417,Ispringen,3006,BW,82,DE,48.91667,8.66667 26421,Ittlingen,3006,BW,82,DE,49.19083,8.93083 26425,Jagsthausen,3006,BW,82,DE,49.31056,9.46833 26426,Jagstzell,3006,BW,82,DE,49.03055,10.09751 26446,Jestetten,3006,BW,82,DE,47.65,8.56667 26466,Jöhlingen,3006,BW,82,DE,49.03218,8.5735 26463,Jungingen,3006,BW,82,DE,48.32787,9.04095 26481,Kaisersbach,3006,BW,82,DE,48.93023,9.63898 26506,Kandern,3006,BW,82,DE,47.71393,7.66237 26508,Kappel-Grafenhausen,3006,BW,82,DE,48.28382,7.76605 26510,Kappelrodeck,3006,BW,82,DE,48.59182,8.11692 26514,Karlsdorf-Neuthard,3006,BW,82,DE,49.13472,8.53028 26520,Karlsruhe,3006,BW,82,DE,49.00937,8.40444 26521,Karlsruhe Region,3006,BW,82,DE,49.0,8.66667 26551,Kehl,3006,BW,82,DE,48.57297,7.81523 26571,Kenzingen,3006,BW,82,DE,48.1963,7.76974 26575,Ketsch,3006,BW,82,DE,49.36778,8.53111 26587,Kieselbronn,3006,BW,82,DE,48.93333,8.75 26592,Kippenheim,3006,BW,82,DE,48.29564,7.8251 26594,Kirchardt,3006,BW,82,DE,49.205,8.99167 26598,Kirchberg an der Iller,3006,BW,82,DE,48.13333,10.08333 26599,Kirchberg an der Jagst,3006,BW,82,DE,49.20056,9.98226 26600,Kirchberg an der Murr,3006,BW,82,DE,48.94297,9.34083 26603,Kirchdorf,3006,BW,82,DE,48.07667,10.12629 26612,Kirchentellinsfurt,3006,BW,82,DE,48.53315,9.14732 26621,Kirchheim am Neckar,3006,BW,82,DE,49.045,9.14222 26622,Kirchheim am Ries,3006,BW,82,DE,48.87922,10.40028 26625,Kirchheim unter Teck,3006,BW,82,DE,48.64683,9.45378 26639,Kirchzarten,3006,BW,82,DE,47.96667,7.95 26654,Kißlegg,3006,BW,82,DE,47.78894,9.88383 26688,Klingenstein,3006,BW,82,DE,48.41849,9.90812 26703,Knittlingen,3006,BW,82,DE,49.02487,8.75606 26709,Kohlberg,3006,BW,82,DE,48.55845,9.33576 26711,Kolbingen,3006,BW,82,DE,48.05227,8.88957 26819,Köngen,3006,BW,82,DE,48.68333,9.36667 26821,Königheim,3006,BW,82,DE,49.62028,9.59583 26823,Königsbach-Stein,3006,BW,82,DE,48.96585,8.60573 26824,Königsbronn,3006,BW,82,DE,48.74317,10.11193 26831,Königsfeld im Schwarzwald,3006,BW,82,DE,48.13814,8.41973 26718,Konstanz,3006,BW,82,DE,47.66033,9.17582 26721,Korb,3006,BW,82,DE,48.84303,9.36258 26724,Korntal,3006,BW,82,DE,48.83218,9.1214 26725,Kornwestheim,3006,BW,82,DE,48.86158,9.18569 26735,Kraichtal,3006,BW,82,DE,49.14623,8.73276 26741,Krauchenwies,3006,BW,82,DE,48.01651,9.24757 26744,Krautheim,3006,BW,82,DE,49.38789,9.63553 26752,Kressbronn am Bodensee,3006,BW,82,DE,47.5976,9.59707 26768,Kronau,3006,BW,82,DE,49.2225,8.63111 26789,Kuchen,3006,BW,82,DE,48.63583,9.79989 26853,Külsheim,3006,BW,82,DE,49.66942,9.52361 26856,Künzelsau,3006,BW,82,DE,49.2818,9.68352 26799,Kupferzell,3006,BW,82,DE,49.22778,9.69 26800,Kuppenheim,3006,BW,82,DE,48.82794,8.25417 26859,Kürnbach,3006,BW,82,DE,49.0775,8.84556 26807,Kusterdingen,3006,BW,82,DE,48.52291,9.11977 26872,Ladenburg,3006,BW,82,DE,49.47307,8.60896 26876,Lahr,3006,BW,82,DE,48.34042,7.86886 26877,Laichingen,3006,BW,82,DE,48.48939,9.68612 26905,Langenargen,3006,BW,82,DE,47.59858,9.54163 26906,Langenau,3006,BW,82,DE,48.49616,10.11849 26912,Langenbrettach,3006,BW,82,DE,49.22601,9.41842 26913,Langenburg,3006,BW,82,DE,49.25401,9.85673 26916,Langenenslingen,3006,BW,82,DE,48.14851,9.37765 26960,Lauchheim,3006,BW,82,DE,48.87135,10.24222 26961,Lauchringen,3006,BW,82,DE,47.62699,8.31442 26963,Lauda-Königshofen,3006,BW,82,DE,49.56526,9.70816 26965,Laudenbach,3006,BW,82,DE,49.61333,8.65389 26970,Lauf,3006,BW,82,DE,48.65,8.13333 26975,Laufenburg,3006,BW,82,DE,47.56512,8.06045 26976,Lauffen am Neckar,3006,BW,82,DE,49.0734,9.14567 26979,Laupheim,3006,BW,82,DE,48.22786,9.87874 26981,Lautenbach,3006,BW,82,DE,48.48185,8.02732 26985,Lauterbach/Schwarzwald,3006,BW,82,DE,48.22999,8.3424 27012,Lehrensteinsfeld,3006,BW,82,DE,49.13111,9.32722 27014,Leibertingen,3006,BW,82,DE,48.04263,9.01308 27020,Leimen,3006,BW,82,DE,49.34737,8.68733 27024,Leinfelden-Echterdingen,3006,BW,82,DE,48.69406,9.16809 27025,Leingarten,3006,BW,82,DE,49.14639,9.11694 27026,Leinzell,3006,BW,82,DE,48.84941,9.8775 27047,Lenningen,3006,BW,82,DE,48.55048,9.47674 27051,Lenzkirch,3006,BW,82,DE,47.86832,8.20211 27053,Leonberg,3006,BW,82,DE,48.8,9.01667 27065,Leutenbach,3006,BW,82,DE,48.88791,9.39267 27070,Leutkirch,3006,BW,82,DE,47.82672,10.0205 27076,Lichtenau,3006,BW,82,DE,48.72607,8.00486 27116,Linkenheim-Hochstetten,3006,BW,82,DE,49.13197,8.41244 27124,Lobbach,3006,BW,82,DE,49.37519,8.88884 27190,Löchgau,3006,BW,82,DE,49.00361,9.10639 27129,Loffenau,3006,BW,82,DE,48.77214,8.38463 27193,Löffingen,3006,BW,82,DE,47.88405,8.34384 27147,Lonsee,3006,BW,82,DE,48.5434,9.91999 27148,Lorch,3006,BW,82,DE,48.79833,9.6914 27197,Lörrach,3006,BW,82,DE,47.61497,7.66457 27157,Loßburg,3006,BW,82,DE,48.4,8.45 27154,Lottstetten,3006,BW,82,DE,47.63333,8.56667 27199,Löwenstein,3006,BW,82,DE,49.09558,9.38 27163,Ludwigsburg,3006,BW,82,DE,48.89731,9.19161 27231,Magstadt,3006,BW,82,DE,48.74471,8.96675 27232,Mahlberg,3006,BW,82,DE,48.28639,7.81411 27240,Mainhardt,3006,BW,82,DE,49.07611,9.55639 27256,Malsch,3006,BW,82,DE,49.24722,8.68278 27259,Malterdingen,3006,BW,82,DE,48.15719,7.78608 27265,Mannheim,3006,BW,82,DE,49.4891,8.46694 27269,Marbach am Neckar,3006,BW,82,DE,48.93964,9.25995 27283,Markdorf,3006,BW,82,DE,47.71916,9.39028 27286,Markgröningen,3006,BW,82,DE,48.90493,9.08059 27337,Maselheim,3006,BW,82,DE,48.13333,9.88333 27338,Massenbachhausen,3006,BW,82,DE,49.17778,9.04333 27342,Mauer,3006,BW,82,DE,49.34083,8.80028 27345,Maulbronn,3006,BW,82,DE,48.99958,8.80337 27346,Maulburg,3006,BW,82,DE,47.64631,7.7821 27356,Meckenbeuren,3006,BW,82,DE,47.7,9.56667 27359,Meckesheim,3006,BW,82,DE,49.32167,8.81944 27369,Meersburg,3006,BW,82,DE,47.69419,9.27113 27379,Mehrstetten,3006,BW,82,DE,48.37609,9.566 27388,Meißenheim,3006,BW,82,DE,48.41035,7.77266 27406,Mengen,3006,BW,82,DE,48.04951,9.33005 27416,Merdingen,3006,BW,82,DE,48.01667,7.68333 27421,Merklingen,3006,BW,82,DE,48.51135,9.75496 27429,Merzhausen,3006,BW,82,DE,47.96667,7.83333 27449,Meßkirch,3006,BW,82,DE,47.99457,9.11479 27450,Meßstetten,3006,BW,82,DE,48.18317,8.96565 27444,Metzingen,3006,BW,82,DE,48.53695,9.2833 27452,Michelbach an der Bilz,3006,BW,82,DE,49.07028,9.7625 27453,Michelfeld,3006,BW,82,DE,49.0975,9.67861 27463,Mietingen,3006,BW,82,DE,48.18333,9.9 27480,Mittelbiberach,3006,BW,82,DE,48.08333,9.75 27485,Mittelschöntal,3006,BW,82,DE,48.94615,9.3952 27556,Möckmühl,3006,BW,82,DE,49.3249,9.35837 27558,Mögglingen,3006,BW,82,DE,48.8232,9.9625 27559,Möglingen,3006,BW,82,DE,48.88741,9.12694 27573,Mönchweiler,3006,BW,82,DE,48.1004,8.42219 27575,Mönsheim,3006,BW,82,DE,48.86667,8.86667 27517,Moos,3006,BW,82,DE,47.72439,8.93479 27528,Mosbach,3006,BW,82,DE,49.35357,9.15106 27579,Mössingen,3006,BW,82,DE,48.40567,9.05419 27582,Mötzingen,3006,BW,82,DE,48.5332,8.77447 27531,Mudau,3006,BW,82,DE,49.53444,9.20444 27533,Muggensturm,3006,BW,82,DE,48.86667,8.28333 27589,Mühlacker,3006,BW,82,DE,48.94754,8.83675 27595,Mühlenbach,3006,BW,82,DE,48.25,8.11667 27598,Mühlhausen,3006,BW,82,DE,49.24861,8.72667 27599,Mühlhausen-Ehingen,3006,BW,82,DE,47.81102,8.81224 27600,Mühlheim am Bach,3006,BW,82,DE,48.37863,8.69735 27602,Mühlingen,3006,BW,82,DE,47.91667,9.01667 27537,Mulfingen,3006,BW,82,DE,49.34028,9.80083 27606,Müllheim,3006,BW,82,DE,47.8082,7.63035 27538,Mundelsheim,3006,BW,82,DE,49.00083,9.20778 27539,Munderkingen,3006,BW,82,DE,48.23568,9.64398 27619,Münsingen,3006,BW,82,DE,48.41126,9.49704 27627,Münstertal/Schwarzwald,3006,BW,82,DE,47.85472,7.78417 27544,Murg,3006,BW,82,DE,47.55492,8.02182 27546,Murr,3006,BW,82,DE,48.96207,9.25924 27547,Murrhardt,3006,BW,82,DE,48.98191,9.57047 27549,Mutlangen,3006,BW,82,DE,48.82588,9.79714 27635,Nagold,3006,BW,82,DE,48.5498,8.72366 27646,Nattheim,3006,BW,82,DE,48.69963,10.24209 27658,Neckarbischofsheim,3006,BW,82,DE,49.29625,8.9638 27659,Neckargemünd,3006,BW,82,DE,49.38899,8.7959 27660,Neckargerach,3006,BW,82,DE,49.4,9.06667 27662,Neckarsulm,3006,BW,82,DE,49.18912,9.22527 27663,Neckartailfingen,3006,BW,82,DE,48.61172,9.26371 27664,Neckartenzlingen,3006,BW,82,DE,48.58981,9.23478 27665,Neckarwestheim,3006,BW,82,DE,49.04694,9.19 27666,Neckarzimmern,3006,BW,82,DE,49.31917,9.13278 27668,Nehren,3006,BW,82,DE,48.43097,9.0699 27669,Neidenstein,3006,BW,82,DE,49.31667,8.88472 27670,Neidlingen,3006,BW,82,DE,48.57865,9.56454 27672,Nellingen,3006,BW,82,DE,48.54196,9.79053 27678,Neresheim,3006,BW,82,DE,48.75511,10.33041 27705,Neubulach,3006,BW,82,DE,48.66092,8.69611 27711,Neudenau,3006,BW,82,DE,49.29181,9.26975 27718,Neuenbürg,3006,BW,82,DE,48.84516,8.59574 27717,Neuenburg am Rhein,3006,BW,82,DE,47.81431,7.56005 27727,Neuenstadt am Kocher,3006,BW,82,DE,49.23498,9.33215 27728,Neuenstein,3006,BW,82,DE,49.2049,9.58 27733,Neuffen,3006,BW,82,DE,48.5546,9.3755 27734,Neufra,3006,BW,82,DE,48.1288,9.47554 27746,Neuhausen,3006,BW,82,DE,48.7926,8.77649 27747,Neuhausen auf den Fildern,3006,BW,82,DE,48.68333,9.28333 27757,Neukirch,3006,BW,82,DE,47.65738,9.70333 27766,Neuler,3006,BW,82,DE,48.92803,10.06888 27768,Neulußheim,3006,BW,82,DE,49.29806,8.51833 27778,Neunkirchen,3006,BW,82,DE,49.38694,9.01056 27813,Neuweiler,3006,BW,82,DE,48.66667,8.6 27844,Niedereschach,3006,BW,82,DE,48.13333,8.53333 27863,Niedernhall,3006,BW,82,DE,49.29516,9.61604 27875,Niederstetten,3006,BW,82,DE,49.4,9.91944 27876,Niederstotzingen,3006,BW,82,DE,48.54127,10.23505 27880,Niederwangen,3006,BW,82,DE,47.67192,9.7988 27888,Niefern-Öschelbronn,3006,BW,82,DE,48.91667,8.78333 27921,Nordheim,3006,BW,82,DE,49.10861,9.12778 27926,Nordrach,3006,BW,82,DE,48.4,8.08333 27938,Notzingen,3006,BW,82,DE,48.67076,9.45721 27940,Nufringen,3006,BW,82,DE,48.62253,8.89009 27955,Nürtingen,3006,BW,82,DE,48.62565,9.34203 27944,Nußloch,3006,BW,82,DE,49.32389,8.69556 27968,Oberboihingen,3006,BW,82,DE,48.65,9.36667 27971,Oberderdingen,3006,BW,82,DE,49.06556,8.80306 27973,Oberdischingen,3006,BW,82,DE,48.3,9.83333 27983,Oberharmersbach,3006,BW,82,DE,48.37358,8.12542 27986,Oberhausen-Rheinhausen,3006,BW,82,DE,49.27389,8.47167 27988,Oberjettingen,3006,BW,82,DE,48.57468,8.77636 27989,Oberkirch,3006,BW,82,DE,48.53241,8.07864 27990,Oberkochen,3006,BW,82,DE,48.78379,10.10519 27995,Obermarchtal,3006,BW,82,DE,48.23279,9.57235 28004,Oberndorf,3006,BW,82,DE,48.2905,8.57221 28008,Obernheim,3006,BW,82,DE,48.16297,8.86113 28020,Oberreichenbach,3006,BW,82,DE,48.73333,8.66667 28022,Oberried,3006,BW,82,DE,47.93333,7.95 28024,Oberriexingen,3006,BW,82,DE,48.92652,9.02701 28025,Oberrot,3006,BW,82,DE,49.01444,9.66722 28026,Oberrotweil,3006,BW,82,DE,48.0899,7.63601 28036,Obersontheim,3006,BW,82,DE,49.05667,9.89917 28037,Oberstadion,3006,BW,82,DE,48.18596,9.69241 28040,Oberstenfeld,3006,BW,82,DE,49.02611,9.32083 28045,Oberteuringen,3006,BW,82,DE,47.72409,9.46979 28056,Oberwolfach,3006,BW,82,DE,48.31667,8.21667 28060,Obrigheim,3006,BW,82,DE,49.35194,9.09083 28063,Ochsenhausen,3006,BW,82,DE,48.07029,9.9503 28075,Oedheim,3006,BW,82,DE,49.24028,9.25333 28085,Offenau,3006,BW,82,DE,49.24583,9.16056 28090,Offenburg,3006,BW,82,DE,48.47377,7.94495 28094,Ofterdingen,3006,BW,82,DE,48.41667,9.03333 28096,Oftersheim,3006,BW,82,DE,49.36528,8.58306 28097,Ohlsbach,3006,BW,82,DE,48.43222,7.99384 28100,Ohmden,3006,BW,82,DE,48.64599,9.52698 30545,Öhningen,3006,BW,82,DE,47.66186,8.88674 30546,Öhringen,3006,BW,82,DE,49.19884,9.5072 30547,Ölbronn-Dürrn,3006,BW,82,DE,48.96667,8.75 30548,Öpfingen,3006,BW,82,DE,48.28636,9.80259 28118,Oppenau,3006,BW,82,DE,48.47332,8.1597 28120,Oppenweiler,3006,BW,82,DE,48.9827,9.4585 28129,Orsingen-Nenzingen,3006,BW,82,DE,47.84272,8.95909 28131,Ortenberg,3006,BW,82,DE,48.45158,7.97178 28144,Ostelsheim,3006,BW,82,DE,48.72633,8.84816 28148,Osterburken,3006,BW,82,DE,49.42997,9.42252 28160,Ostfildern,3006,BW,82,DE,48.72704,9.24954 28164,Ostrach,3006,BW,82,DE,47.95,9.38333 30549,Östringen,3006,BW,82,DE,49.21911,8.71192 30550,Ötigheim,3006,BW,82,DE,48.89085,8.23442 30551,Ötisheim,3006,BW,82,DE,48.96667,8.8 28177,Ottenbach,3006,BW,82,DE,48.73649,9.74844 28180,Ottenhofen,3006,BW,82,DE,48.7356,8.12981 28192,Ottersweier,3006,BW,82,DE,48.67022,8.11323 28201,Owen,3006,BW,82,DE,48.58742,9.44978 28202,Owingen,3006,BW,82,DE,47.80967,9.17173 28272,Pfaffenhofen,3006,BW,82,DE,49.06444,8.97639 28276,Pfaffenweiler,3006,BW,82,DE,47.93333,7.75 28280,Pfalzgrafenweiler,3006,BW,82,DE,48.5265,8.56582 28284,Pfedelbach,3006,BW,82,DE,49.17806,9.505 28289,Pforzheim,3006,BW,82,DE,48.88436,8.69892 28291,Pfronstetten,3006,BW,82,DE,48.27641,9.35995 28293,Pfullendorf,3006,BW,82,DE,47.9261,9.2578 28294,Pfullingen,3006,BW,82,DE,48.46458,9.22796 28296,Philippsburg,3006,BW,82,DE,49.2317,8.46074 28313,Plankstadt,3006,BW,82,DE,49.39444,8.59611 28320,Pleidelsheim,3006,BW,82,DE,48.9592,9.20311 28327,Pliezhausen,3006,BW,82,DE,48.55934,9.20749 28328,Plochingen,3006,BW,82,DE,48.71067,9.41949 28335,Plüderhausen,3006,BW,82,DE,48.79875,9.59587 28448,Radolfzell,3006,BW,82,DE,47.74194,8.97098 28463,Rammingen,3006,BW,82,DE,48.51814,10.17197 28470,Rangendingen,3006,BW,82,DE,48.38168,8.8894 28479,Rastatt,3006,BW,82,DE,48.85851,8.20965 28495,Rauenberg,3006,BW,82,DE,49.26943,8.70344 28498,Ravensburg,3006,BW,82,DE,47.78198,9.61062 28500,Rechberghausen,3006,BW,82,DE,48.7308,9.64419 28524,Regierungsbezirk Stuttgart,3006,BW,82,DE,49.08333,9.66667 28536,Reichartshausen,3006,BW,82,DE,49.355,8.94528 28538,Reichenau,3006,BW,82,DE,47.68885,9.06355 28541,Reichenbach an der Fils,3006,BW,82,DE,48.71011,9.46429 28553,Reilingen,3006,BW,82,DE,49.29833,8.56417 28578,Renchen,3006,BW,82,DE,48.5885,8.01321 28583,Renningen,3006,BW,82,DE,48.76974,8.93871 28596,Reutlingen,3006,BW,82,DE,48.49144,9.20427 28604,Rheinau,3006,BW,82,DE,48.66602,7.93659 28611,Rheinfelden,3006,BW,82,DE,47.56013,7.78715 28613,Rheinstetten,3006,BW,82,DE,48.9685,8.30704 28623,Rickenbach,3006,BW,82,DE,47.61895,7.97873 28634,Riederich,3006,BW,82,DE,48.56029,9.26883 28636,Riedlingen,3006,BW,82,DE,48.15455,9.47558 28638,Riegel,3006,BW,82,DE,48.15111,7.74915 28642,Rielasingen-Worblingen,3006,BW,82,DE,47.73465,8.84013 28651,Rietheim-Weilheim,3006,BW,82,DE,48.01667,8.76667 28663,Ringsheim,3006,BW,82,DE,48.24765,7.77823 28692,Rohrdorf,3006,BW,82,DE,48.56667,8.7 28694,Roigheim,3006,BW,82,DE,49.36472,9.34 28705,Rosenberg,3006,BW,82,DE,49.01892,10.0296 28706,Rosenfeld,3006,BW,82,DE,48.28639,8.72357 28716,Rot,3006,BW,82,DE,47.92278,9.10485 28717,Rot am See,3006,BW,82,DE,49.25,10.01667 28731,Rottenacker,3006,BW,82,DE,48.23485,9.68956 28734,Rottenburg,3006,BW,82,DE,48.47629,8.93528 28739,Rottweil,3006,BW,82,DE,48.16783,8.62719 28750,Rudersberg,3006,BW,82,DE,48.88515,9.52927 28807,Rümmingen,3006,BW,82,DE,47.6412,7.64198 28767,Ruppertshofen,3006,BW,82,DE,48.88275,9.81506 28770,Rust,3006,BW,82,DE,48.26667,7.73333 28771,Rutesheim,3006,BW,82,DE,48.80808,8.94536 28824,Sachsenheim,3006,BW,82,DE,48.96,9.06472 28830,Salach,3006,BW,82,DE,48.69198,9.73715 28833,Salem,3006,BW,82,DE,47.76258,9.29031 28856,Sandhausen,3006,BW,82,DE,49.34278,8.65917 28862,Sankt Blasien,3006,BW,82,DE,47.76252,8.12714 28866,Sankt Georgen im Schwarzwald,3006,BW,82,DE,48.12716,8.33513 28870,Sankt Johann,3006,BW,82,DE,48.45397,9.34396 28874,Sankt Leon-Rot,3006,BW,82,DE,49.26593,8.61803 28879,Sankt Märgen,3006,BW,82,DE,48.00805,8.09283 28880,Sankt Peter,3006,BW,82,DE,48.01475,8.03294 28886,Sasbach,3006,BW,82,DE,48.63971,8.09375 28887,Sasbachwalden,3006,BW,82,DE,48.61667,8.13333 28893,Satteldorf,3006,BW,82,DE,49.16953,10.07957 28896,Sauldorf,3006,BW,82,DE,47.94371,9.10833 28897,Saulgau,3006,BW,82,DE,48.01676,9.50064 28908,Schallstadt,3006,BW,82,DE,47.95855,7.75755 28917,Schechingen,3006,BW,82,DE,48.87341,9.91744 28919,Scheer,3006,BW,82,DE,48.07292,9.29486 28925,Schelklingen,3006,BW,82,DE,48.37575,9.73273 28930,Schenkenzell,3006,BW,82,DE,48.31202,8.37212 28949,Schiltach,3006,BW,82,DE,48.28932,8.34169 28960,Schlaitdorf,3006,BW,82,DE,48.60431,9.22268 28964,Schlat,3006,BW,82,DE,48.65321,9.70625 28976,Schliengen,3006,BW,82,DE,47.75698,7.57645 28977,Schlier,3006,BW,82,DE,47.77004,9.67354 28978,Schlierbach,3006,BW,82,DE,48.67362,9.51811 28983,Schluchsee,3006,BW,82,DE,47.81667,8.18333 29010,Schnürpflingen,3006,BW,82,DE,48.2728,9.99292 29103,Schömberg,3006,BW,82,DE,48.78713,8.64495 29013,Schonach im Schwarzwald,3006,BW,82,DE,48.14229,8.20289 29104,Schönaich,3006,BW,82,DE,48.65871,9.06012 29106,Schönau,3006,BW,82,DE,49.43665,8.8088 29108,Schönau im Schwarzwald,3006,BW,82,DE,47.78623,7.89445 29133,Schönwald,3006,BW,82,DE,48.10549,8.20387 29019,Schopfheim,3006,BW,82,DE,47.65105,7.82089 29021,Schopfloch,3006,BW,82,DE,48.45477,8.55131 29024,Schorndorf,3006,BW,82,DE,48.80537,9.52721 29028,Schramberg,3006,BW,82,DE,48.22399,8.38583 29031,Schriesheim,3006,BW,82,DE,49.47372,8.6636 29033,Schrozberg,3006,BW,82,DE,49.34528,9.97944 29036,Schuttertal,3006,BW,82,DE,48.26667,7.95 29037,Schutterwald,3006,BW,82,DE,48.45,7.88333 29095,Schwäbisch Gmünd,3006,BW,82,DE,48.79947,9.79809 29096,Schwäbisch Hall,3006,BW,82,DE,49.11127,9.73908 29047,Schwaigern,3006,BW,82,DE,49.14494,9.05525 29048,Schwaikheim,3006,BW,82,DE,48.87733,9.34958 29056,Schwanau,3006,BW,82,DE,48.36669,7.76244 29065,Schwarzach,3006,BW,82,DE,48.74738,8.03738 29086,Schwendi,3006,BW,82,DE,48.17424,9.97541 29088,Schwenningen,3006,BW,82,DE,48.1,9.0 29092,Schwetzingen,3006,BW,82,DE,49.38217,8.5823 29093,Schwieberdingen,3006,BW,82,DE,48.87644,9.07439 29097,Schwörstadt,3006,BW,82,DE,47.59314,7.8784 29141,Seckach,3006,BW,82,DE,49.44222,9.33417 29143,Seebach,3006,BW,82,DE,48.57621,8.17048 29148,Seedorf,3006,BW,82,DE,48.24908,8.48993 29157,Seelbach,3006,BW,82,DE,48.31055,7.94069 29175,Seitingen-Oberflacht,3006,BW,82,DE,48.01667,8.71667 29196,Sersheim,3006,BW,82,DE,48.96667,9.01667 29201,Sexau,3006,BW,82,DE,48.10209,7.90757 29206,Sickenhausen,3006,BW,82,DE,48.53252,9.18114 29212,Siegelsbach,3006,BW,82,DE,49.26972,9.08972 29226,Sigmaringen,3006,BW,82,DE,48.08829,9.23033 29227,Sigmaringendorf,3006,BW,82,DE,48.06586,9.26208 29236,Simmersfeld,3006,BW,82,DE,48.61667,8.51667 29238,Simmozheim,3006,BW,82,DE,48.75127,8.81142 29239,Sindelfingen,3006,BW,82,DE,48.7,9.01667 29241,Singen,3006,BW,82,DE,47.75935,8.8403 29245,Sinsheim,3006,BW,82,DE,49.2529,8.87867 29246,Sinzheim,3006,BW,82,DE,48.76667,8.16667 29250,Sipplingen,3006,BW,82,DE,47.79678,9.09737 29493,Sölden,3006,BW,82,DE,47.93333,7.81667 29277,Sontheim an der Brenz,3006,BW,82,DE,48.55235,10.29097 29284,Spaichingen,3006,BW,82,DE,48.07477,8.73508 29291,Spechbach,3006,BW,82,DE,49.34639,8.88333 29301,Spiegelberg,3006,BW,82,DE,49.04083,9.44444 29305,Spraitbach,3006,BW,82,DE,48.88065,9.76217 29334,Staig,3006,BW,82,DE,48.29998,9.99138 29345,Staufen,3006,BW,82,DE,47.75686,8.21078 29352,Stegen,3006,BW,82,DE,47.98333,7.96667 29360,Steinach,3006,BW,82,DE,48.3,8.05 29369,Steinen,3006,BW,82,DE,47.64446,7.73914 29370,Steinenbronn,3006,BW,82,DE,48.66667,9.11667 29381,Steinheim am Albuch,3006,BW,82,DE,48.6909,10.06382 29382,Steinheim am der Murr,3006,BW,82,DE,48.96821,9.27708 29389,Steinmauern,3006,BW,82,DE,48.90095,8.19692 29394,Steißlingen,3006,BW,82,DE,47.8,8.93333 29402,Sternenfels,3006,BW,82,DE,49.05139,8.85083 29405,Stetten am Kalten Markt,3006,BW,82,DE,48.12419,9.07775 29409,Stimpfach,3006,BW,82,DE,49.06135,10.09274 29410,Stockach,3006,BW,82,DE,47.85105,9.0091 29450,Stödtlen,3006,BW,82,DE,49.0,10.3 29432,Straßberg,3006,BW,82,DE,48.17805,9.09059 29455,Stühlingen,3006,BW,82,DE,47.7458,8.44813 29444,Stuttgart,3006,BW,82,DE,48.78232,9.17702 29445,Stuttgart Feuerbach,3006,BW,82,DE,48.80867,9.15719 29446,Stuttgart Mühlhausen,3006,BW,82,DE,48.84232,9.23028 29447,Stuttgart-Ost,3006,BW,82,DE,48.78363,9.21032 29466,Sulz am Neckar,3006,BW,82,DE,48.36241,8.63309 29470,Sulzbach an der Murr,3006,BW,82,DE,49.00303,9.5003 29473,Sulzburg,3006,BW,82,DE,47.84116,7.70777 29477,Sulzfeld,3006,BW,82,DE,49.10472,8.85583 29509,Süßen,3006,BW,82,DE,48.67934,9.75534 29698,Täferrot,3006,BW,82,DE,48.84972,9.83824 29514,Talheim,3006,BW,82,DE,49.08333,9.19306 29516,Tamm,3006,BW,82,DE,48.91988,9.11556 29525,Tannhausen,3006,BW,82,DE,48.9787,10.36129 29526,Tannheim,3006,BW,82,DE,48.0,10.08333 29533,Tauberbischofsheim,3006,BW,82,DE,49.62472,9.66278 29557,Tengen,3006,BW,82,DE,47.82128,8.66117 29558,Teningen,3006,BW,82,DE,48.12952,7.81205 29559,Tennenbronn,3006,BW,82,DE,48.19041,8.35176 29565,Tettnang,3006,BW,82,DE,47.66857,9.59132 29610,Tiefenbronn,3006,BW,82,DE,48.82398,8.80129 29619,Titisee-Neustadt,3006,BW,82,DE,47.92104,8.19063 29627,Todtmoos,3006,BW,82,DE,47.74014,8.00183 29628,Todtnau,3006,BW,82,DE,47.82941,7.9438 29664,Triberg,3006,BW,82,DE,48.13175,8.23317 29676,Trochtelfingen,3006,BW,82,DE,48.30843,9.24491 29681,Trossingen,3006,BW,82,DE,48.07667,8.64409 29704,Tübingen,3006,BW,82,DE,48.52266,9.05222 29705,Tübingen Region,3006,BW,82,DE,48.16667,9.5 29690,Tuningen,3006,BW,82,DE,48.03333,8.6 29694,Tuttlingen,3006,BW,82,DE,47.98464,8.8177 30555,Überlingen,3006,BW,82,DE,47.76977,9.17136 29712,Ubstadt-Weiher,3006,BW,82,DE,49.16296,8.63165 29733,Uhingen,3006,BW,82,DE,48.70475,9.5857 29734,Uhldingen-Mühlhofen,3006,BW,82,DE,47.73333,9.25 30559,Ühlingen-Birkendorf,3006,BW,82,DE,47.71667,8.31667 29737,Ulm,3006,BW,82,DE,48.39841,9.99155 29740,Umkirch,3006,BW,82,DE,48.03333,7.76667 29742,Ummendorf,3006,BW,82,DE,48.06667,9.83333 29747,Unlingen,3006,BW,82,DE,48.16734,9.52219 29757,Untereisesheim,3006,BW,82,DE,49.21111,9.20194 29758,Unterensingen,3006,BW,82,DE,48.65452,9.35799 29761,Untergruppenbach,3006,BW,82,DE,49.0894,9.27516 29763,Unterhausen,3006,BW,82,DE,48.4298,9.25504 29764,Unterjettingen,3006,BW,82,DE,48.5623,8.78445 29765,Unterkirnach,3006,BW,82,DE,48.07946,8.36575 29766,Unterkrozingen,3006,BW,82,DE,47.91933,7.69045 29772,Untermünkheim,3006,BW,82,DE,49.15255,9.73384 29775,Unterreichenbach,3006,BW,82,DE,48.82496,8.70885 29778,Unterschneidheim,3006,BW,82,DE,48.93333,10.36667 29790,Urbach,3006,BW,82,DE,48.8168,9.5769 29804,Uttenweiler,3006,BW,82,DE,48.15,9.61667 29810,Vaihingen an der Enz,3006,BW,82,DE,48.93563,8.96045 29828,Vellberg,3006,BW,82,DE,49.0843,9.87914 29835,Veringenstadt,3006,BW,82,DE,48.18515,9.21079 29852,Villingen-Schwenningen,3006,BW,82,DE,48.06226,8.49358 29853,Villingendorf,3006,BW,82,DE,48.2,8.58333 29866,Vogt,3006,BW,82,DE,47.76667,9.76667 29868,Vogtsburg,3006,BW,82,DE,48.09688,7.64185 29888,Vöhrenbach,3006,BW,82,DE,48.05,8.3 29889,Vöhringen,3006,BW,82,DE,48.33446,8.66392 29874,Volkertshausen,3006,BW,82,DE,47.81667,8.86667 29894,Vörstetten,3006,BW,82,DE,48.06667,7.85 29916,Waghäusel,3006,BW,82,DE,49.24991,8.51257 29922,Waiblingen,3006,BW,82,DE,48.83241,9.31641 29923,Waibstadt,3006,BW,82,DE,49.29505,8.91771 29928,Wain,3006,BW,82,DE,48.18904,10.0209 29932,Wald,3006,BW,82,DE,47.93333,9.16667 29940,Waldburg,3006,BW,82,DE,47.7571,9.71342 29945,Waldenbuch,3006,BW,82,DE,48.6383,9.13256 29947,Waldenburg,3006,BW,82,DE,49.18468,9.63994 29954,Waldkirch,3006,BW,82,DE,48.09585,7.96371 29963,Waldshut-Tiengen,3006,BW,82,DE,47.62323,8.21717 29965,Waldstetten,3006,BW,82,DE,48.76615,9.82135 29968,Walheim,3006,BW,82,DE,49.01417,9.15111 29972,Walldorf,3006,BW,82,DE,49.30637,8.64236 29973,Walldürn,3006,BW,82,DE,49.58358,9.36642 29985,Wallhausen,3006,BW,82,DE,49.21042,10.06219 30004,Wangen,3006,BW,82,DE,47.6895,9.83247 30009,Wannweil,3006,BW,82,DE,48.51667,9.15 30026,Warthausen,3006,BW,82,DE,48.12863,9.79749 30437,Wäschenbeuren,3006,BW,82,DE,48.75991,9.68735 30059,Wehingen,3006,BW,82,DE,48.14533,8.79151 30061,Wehr,3006,BW,82,DE,47.62983,7.90423 30071,Weidenstetten,3006,BW,82,DE,48.5525,9.9961 30079,Weikersheim,3006,BW,82,DE,49.47866,9.89977 30081,Weil am Rhein,3006,BW,82,DE,47.59331,7.62082 30082,Weil der Stadt,3006,BW,82,DE,48.74953,8.87176 30083,Weil im Schönbuch,3006,BW,82,DE,48.6227,9.06355 30092,Weilheim,3006,BW,82,DE,47.66667,8.23333 30093,Weilheim an der Teck,3006,BW,82,DE,48.61572,9.53751 30100,Weingarten,3006,BW,82,DE,49.05457,8.52678 30101,Weinheim,3006,BW,82,DE,49.54887,8.66697 30102,Weinsberg,3006,BW,82,DE,49.15127,9.28762 30104,Weinstadt-Endersbach,3006,BW,82,DE,48.81311,9.36387 30108,Weisenbach,3006,BW,82,DE,48.72757,8.35378 30112,Weissach,3006,BW,82,DE,48.84687,8.92828 30122,Weißbach,3006,BW,82,DE,49.29717,9.59531 30113,Weisweil,3006,BW,82,DE,48.19939,7.67713 30144,Wellendingen,3006,BW,82,DE,48.14745,8.70375 30149,Welzheim,3006,BW,82,DE,48.87675,9.63434 30158,Wendlingen am Neckar,3006,BW,82,DE,48.67124,9.37632 30166,Werbach,3006,BW,82,DE,49.67083,9.63944 30178,Wernau,3006,BW,82,DE,48.69306,9.41533 30188,Wertheim,3006,BW,82,DE,49.759,9.50852 30208,Westerheim,3006,BW,82,DE,48.51511,9.62424 30216,Westerstetten,3006,BW,82,DE,48.51916,9.95494 30218,Westhausen,3006,BW,82,DE,48.88333,10.18333 30237,Widdern,3006,BW,82,DE,49.31825,9.42209 30251,Wiernsheim,3006,BW,82,DE,48.88333,8.85 30257,Wiesenbach,3006,BW,82,DE,49.36139,8.80361 30260,Wiesensteig,3006,BW,82,DE,48.56127,9.6254 30264,Wiesloch,3006,BW,82,DE,49.29504,8.69846 30273,Wildberg,3006,BW,82,DE,48.62336,8.74518 30283,Wilhelmsdorf,3006,BW,82,DE,47.86612,9.42621 30285,Wilhelmsfeld,3006,BW,82,DE,49.47056,8.75361 30298,Willstätt,3006,BW,82,DE,48.54071,7.89314 30308,Wimsheim,3006,BW,82,DE,48.85,8.83333 30326,Winnenden,3006,BW,82,DE,48.87563,9.39819 30330,Winterbach,3006,BW,82,DE,48.79918,9.47914 30334,Winterlingen,3006,BW,82,DE,48.18333,9.11667 30364,Wittnau,3006,BW,82,DE,47.95,7.81667 30374,Wolfach,3006,BW,82,DE,48.29319,8.2158 30375,Wolfegg,3006,BW,82,DE,47.8203,9.79491 30386,Wolfschlugen,3006,BW,82,DE,48.65,9.28333 30397,Wolpertshausen,3006,BW,82,DE,49.1675,9.84472 30398,Wolpertswende,3006,BW,82,DE,47.89471,9.61202 30445,Wört,3006,BW,82,DE,49.03047,10.27239 30452,Wössingen,3006,BW,82,DE,49.01205,8.60754 30422,Wurmberg,3006,BW,82,DE,48.86667,8.81667 30423,Wurmlingen,3006,BW,82,DE,48.0,8.78333 30460,Wüstenrot,3006,BW,82,DE,49.08083,9.46056 30433,Wutöschingen,3006,BW,82,DE,47.66019,8.36755 30434,Wyhl,3006,BW,82,DE,48.16617,7.64917 30463,Zaberfeld,3006,BW,82,DE,49.05611,8.92694 30466,Zaisenhausen,3006,BW,82,DE,49.10667,8.81278 30484,Zell,3006,BW,82,DE,48.69235,8.06301 30487,Zell im Wiesental,3006,BW,82,DE,47.70555,7.85248 30488,Zell unter Aichelberg,3006,BW,82,DE,48.64882,9.57137 30508,Zimmern ob Rottweil,3006,BW,82,DE,48.1666,8.59436 30530,Zuzenhausen,3006,BW,82,DE,49.29636,8.82254 30532,Zweiflingen,3006,BW,82,DE,49.25639,9.51806 30535,Zwiefalten,3006,BW,82,DE,48.23396,9.46232 23466,Abenberg,3009,BY,82,DE,49.24282,10.96401 23467,Abensberg,3009,BY,82,DE,48.81684,11.8498 23468,Absberg,3009,BY,82,DE,49.14438,10.88101 23474,Achslach,3009,BY,82,DE,48.97171,12.93511 23481,Adelsdorf,3009,BY,82,DE,49.47022,10.68522 23483,Adelshofen,3009,BY,82,DE,48.18333,11.11667 23484,Adelsried,3009,BY,82,DE,48.42465,10.71828 23485,Adelzhausen,3009,BY,82,DE,48.35671,11.13851 23491,Adlkofen,3009,BY,82,DE,48.55,12.26667 23496,Affing,3009,BY,82,DE,48.46667,10.98333 23499,Aham,3009,BY,82,DE,48.34821,12.16156 23509,Aholfing,3009,BY,82,DE,48.94283,12.46857 23510,Aholming,3009,BY,82,DE,48.73542,12.90997 23511,Ahorn,3009,BY,82,DE,50.23762,10.95417 23516,Aichach,3009,BY,82,DE,48.45755,11.13413 23518,Aichen,3009,BY,82,DE,48.22898,10.53949 23521,Aidenbach,3009,BY,82,DE,48.57028,13.09 23522,Aidhausen,3009,BY,82,DE,50.15,10.43333 23524,Aiglsbach,3009,BY,82,DE,48.69211,11.70831 23525,Aindling,3009,BY,82,DE,48.5136,10.95315 23526,Ainring,3009,BY,82,DE,47.81311,12.94048 23527,Aislingen,3009,BY,82,DE,48.50648,10.45778 23529,Aitrang,3009,BY,82,DE,47.81667,10.53333 23531,Albaching,3009,BY,82,DE,48.11011,12.11074 23536,Albertshofen,3009,BY,82,DE,49.76667,10.16667 23543,Aldersbach,3009,BY,82,DE,48.58972,13.08971 23545,Alerheim,3009,BY,82,DE,48.85,10.61667 23546,Alesheim,3009,BY,82,DE,49.04648,10.86496 23547,Aletshausen,3009,BY,82,DE,48.19859,10.38877 23550,Alfeld,3009,BY,82,DE,49.43333,11.55 23558,Allersberg,3009,BY,82,DE,49.25132,11.23659 23559,Allershausen,3009,BY,82,DE,48.43333,11.6 23560,Alling,3009,BY,82,DE,48.14034,11.30144 23583,Altdorf,3009,BY,82,DE,49.3856,11.3573 23587,Alteglofsheim,3009,BY,82,DE,48.91667,12.2 23595,Altenbuch,3009,BY,82,DE,49.82861,9.40139 23599,Altendorf,3009,BY,82,DE,50.08424,11.16786 23607,Altenkunstadt,3009,BY,82,DE,50.12504,11.2503 23608,Altenmarkt,3009,BY,82,DE,47.7796,12.1356 23610,Altenmünster,3009,BY,82,DE,48.46495,10.59065 23614,Altenstadt,3009,BY,82,DE,48.1603,10.11437 23616,Altenthann,3009,BY,82,DE,49.1,12.3 23618,Alterhofen,3009,BY,82,DE,48.84659,12.62012 23620,Altfraunhofen,3009,BY,82,DE,48.45,12.16667 23622,Althegnenberg,3009,BY,82,DE,48.23333,11.06667 23630,Altomünster,3009,BY,82,DE,48.38767,11.25691 23639,Altötting,3009,BY,82,DE,48.22533,12.67665 23638,Altusried,3009,BY,82,DE,47.8041,10.21429 23641,Alzenau in Unterfranken,3009,BY,82,DE,50.0888,9.06455 23643,Amberg,3009,BY,82,DE,49.44287,11.86267 23645,Amendingen,3009,BY,82,DE,48.00302,10.17918 23646,Amerang,3009,BY,82,DE,47.99139,12.30795 23647,Ammerndorf,3009,BY,82,DE,49.42335,10.85011 23648,Ammerthal,3009,BY,82,DE,49.44123,11.76181 23649,Ampfing,3009,BY,82,DE,48.254,12.41515 23653,Andechs,3009,BY,82,DE,47.97464,11.18279 23666,Ansbach,3009,BY,82,DE,49.30481,10.5931 23667,Antdorf,3009,BY,82,DE,47.75133,11.30845 23668,Anzing,3009,BY,82,DE,48.15171,11.8533 23672,Apfeldorf,3009,BY,82,DE,47.9,10.93333 23679,Arberg,3009,BY,82,DE,49.14428,10.61722 23681,Aresing,3009,BY,82,DE,48.27704,12.60538 23684,Arnbruck,3009,BY,82,DE,49.13012,12.9982 23687,Arnschwang,3009,BY,82,DE,49.27663,12.81595 23689,Arnstein,3009,BY,82,DE,49.97767,9.96983 23690,Arnstorf,3009,BY,82,DE,48.5584,12.81674 23692,Arrach,3009,BY,82,DE,49.19149,12.99387 23697,Arzberg,3009,BY,82,DE,50.05774,12.18676 23700,Asbach-Bäumenheim,3009,BY,82,DE,48.68333,10.81667 23701,Ascha,3009,BY,82,DE,49.0,12.63333 23702,Aschaffenburg,3009,BY,82,DE,49.97704,9.15214 23703,Aschau am Inn,3009,BY,82,DE,48.19845,12.35003 23704,Aschau im Chiemgau,3009,BY,82,DE,47.77689,12.32297 23708,Aschheim,3009,BY,82,DE,48.17112,11.71675 23749,Aßling,3009,BY,82,DE,47.99297,12.00643 23715,Attenhofen,3009,BY,82,DE,48.65072,11.8485 23716,Attenkirchen,3009,BY,82,DE,48.50526,11.76011 23718,Atting,3009,BY,82,DE,48.89412,12.48776 23722,Au in der Hallertau,3009,BY,82,DE,48.55838,11.74138 23723,Aub,3009,BY,82,DE,49.55267,10.0653 23725,Auerbach,3009,BY,82,DE,48.80353,13.09952 23728,Aufhausen,3009,BY,82,DE,48.87205,12.2821 23729,Aufseß,3009,BY,82,DE,49.8837,11.22692 23731,Augsburg,3009,BY,82,DE,48.37154,10.89851 23735,Auhausen,3009,BY,82,DE,49.0079,10.6224 23740,Aura im Sinngrund,3009,BY,82,DE,50.17819,9.57547 23743,Außernzell,3009,BY,82,DE,48.72409,13.20291 23745,Aying,3009,BY,82,DE,47.9701,11.77752 23747,Aystetten,3009,BY,82,DE,48.40556,10.77742 23751,Baar-Ebenhausen,3009,BY,82,DE,48.67065,11.46983 23752,Babenhausen,3009,BY,82,DE,48.14497,10.25325 23754,Babensham,3009,BY,82,DE,48.08333,12.26667 23755,Bach,3009,BY,82,DE,49.4,12.38333 23757,Bachhagel,3009,BY,82,DE,48.63217,10.32045 24458,Bächingen an der Brenz,3009,BY,82,DE,48.54627,10.31281 23759,Bad Abbach,3009,BY,82,DE,48.93754,12.04494 23760,Bad Aibling,3009,BY,82,DE,47.8638,12.01055 23761,Bad Alexandersbad,3009,BY,82,DE,50.01667,12.01667 23769,Bad Berneck im Fichtelgebirge,3009,BY,82,DE,50.04564,11.67238 23772,Bad Birnbach,3009,BY,82,DE,48.44489,13.09103 23774,Bad Bocklet,3009,BY,82,DE,50.26648,10.07902 23778,Bad Brückenau,3009,BY,82,DE,50.30853,9.78985 23792,Bad Endorf,3009,BY,82,DE,47.90901,12.29795 23795,Bad Feilnbach,3009,BY,82,DE,47.77331,12.00973 23799,Bad Füssing,3009,BY,82,DE,48.351,13.312 23801,Bad Griesbach,3009,BY,82,DE,48.45181,13.19329 23804,Bad Heilbrunn,3009,BY,82,DE,47.74671,11.45934 23813,Bad Kissingen,3009,BY,82,DE,50.20228,10.07784 23816,Bad Kohlgrub,3009,BY,82,DE,47.66667,11.05 23819,Bad Königshofen im Grabfeld,3009,BY,82,DE,50.30082,10.46887 23843,Bad Neustadt an der Saale,3009,BY,82,DE,50.32174,10.20673 23850,Bad Reichenhall,3009,BY,82,DE,47.72947,12.87819 23870,Bad Staffelstein,3009,BY,82,DE,50.10199,11.00128 23871,Bad Steben,3009,BY,82,DE,50.36648,11.64438 23878,Bad Tölz,3009,BY,82,DE,47.76111,11.5589 23882,Bad Wiessee,3009,BY,82,DE,47.71667,11.71667 23887,Bad Windsheim,3009,BY,82,DE,49.50274,10.41539 23889,Bad Wörishofen,3009,BY,82,DE,48.00674,10.59666 23903,Baierbrunn,3009,BY,82,DE,48.0203,11.48689 23905,Baiersdorf,3009,BY,82,DE,49.65807,11.03594 23907,Baisweil,3009,BY,82,DE,47.94439,10.54007 23916,Balzhausen,3009,BY,82,DE,48.24228,10.49366 23917,Bamberg,3009,BY,82,DE,49.89873,10.90067 23924,Barbing,3009,BY,82,DE,49.0,12.2 24460,Bärnau,3009,BY,82,DE,49.81079,12.43318 23954,Bastheim,3009,BY,82,DE,50.4008,10.20372 23957,Baudenbach,3009,BY,82,DE,49.62512,10.53598 23960,Baunach,3009,BY,82,DE,49.98592,10.85179 23966,Bayerbach,3009,BY,82,DE,48.7045,12.2975 23967,Bayerisch Eisenstein,3009,BY,82,DE,49.11667,13.2 23968,Bayerisch Gmain,3009,BY,82,DE,47.71667,12.9 23969,Bayreuth,3009,BY,82,DE,49.94782,11.57893 23970,Bayrischzell,3009,BY,82,DE,47.6744,12.01449 23975,Bechtsrieth,3009,BY,82,DE,49.64487,12.20997 24002,Bellenberg,3009,BY,82,DE,48.25726,10.09094 24009,Benediktbeuern,3009,BY,82,DE,47.70624,11.41522 24013,Benningen,3009,BY,82,DE,47.96667,10.21667 24022,Beratzhausen,3009,BY,82,DE,49.09517,11.8097 24023,Berching,3009,BY,82,DE,49.10695,11.44138 24024,Berchtesgaden,3009,BY,82,DE,47.63236,13.00187 24025,Berg,3009,BY,82,DE,49.81417,12.14161 24027,Berg im Gau,3009,BY,82,DE,48.63333,11.25 24035,Bergen,3009,BY,82,DE,47.80837,12.58982 24043,Bergkirchen,3009,BY,82,DE,48.25671,11.36488 24044,Berglern,3009,BY,82,DE,48.38407,11.93012 24046,Bergrheinfeld,3009,BY,82,DE,50.01028,10.18089 24048,Bergtheim,3009,BY,82,DE,49.9,10.06667 24060,Bernau am Chiemsee,3009,BY,82,DE,47.81167,12.37566 24062,Bernbeuren,3009,BY,82,DE,47.73696,10.77707 24064,Berngau,3009,BY,82,DE,49.25,11.4 24065,Bernhardswald,3009,BY,82,DE,49.09123,12.24744 24068,Bernried,3009,BY,82,DE,48.91667,12.88333 24085,Betzigau,3009,BY,82,DE,47.73333,10.38333 24089,Beutelsbach,3009,BY,82,DE,48.55,13.11667 24097,Biberbach,3009,BY,82,DE,48.51778,10.81139 24099,Biburg,3009,BY,82,DE,48.79066,11.85726 24100,Bichl,3009,BY,82,DE,47.7201,11.41231 24102,Bidingen,3009,BY,82,DE,47.82974,10.72623 24103,Biebelried,3009,BY,82,DE,49.76667,10.08333 24113,Biessenhofen,3009,BY,82,DE,47.83057,10.64022 24122,Bindlach,3009,BY,82,DE,49.98167,11.61389 24127,Binswangen,3009,BY,82,DE,48.55798,10.64249 24136,Birkenfeld,3009,BY,82,DE,49.85861,9.69556 24142,Bischberg,3009,BY,82,DE,49.91087,10.83212 24143,Bischbrunn,3009,BY,82,DE,49.87028,9.48917 24146,Bischofsgrün,3009,BY,82,DE,50.05122,11.79997 24148,Bischofsheim an der Rhön,3009,BY,82,DE,50.40239,10.00751 24149,Bischofsmais,3009,BY,82,DE,48.91796,13.08184 24151,Bischofswiesen,3009,BY,82,DE,47.63115,12.98305 24157,Bissingen,3009,BY,82,DE,48.71694,10.61766 24162,Blaibach,3009,BY,82,DE,49.16667,12.81667 24163,Blaichach,3009,BY,82,DE,47.54208,10.25846 24164,Blankenbach,3009,BY,82,DE,50.06667,9.23333 24183,Blindheim,3009,BY,82,DE,48.63138,10.61992 24461,Böbing,3009,BY,82,DE,47.75562,10.98877 24190,Bobingen,3009,BY,82,DE,48.27091,10.8339 24464,Böbrach,3009,BY,82,DE,48.93322,12.88304 24201,Bockhorn,3009,BY,82,DE,48.31471,11.98694 24206,Bodenkirchen,3009,BY,82,DE,48.38333,12.38333 24207,Bodenmais,3009,BY,82,DE,49.06667,13.1 24209,Bodenwöhr,3009,BY,82,DE,49.27082,12.30146 24212,Bodolz,3009,BY,82,DE,47.56667,9.66667 24214,Bogen,3009,BY,82,DE,48.91122,12.68955 24215,Bogenhausen,3009,BY,82,DE,48.15221,11.61585 24227,Bolsterlang,3009,BY,82,DE,47.46667,10.23333 24233,Bonstetten,3009,BY,82,DE,48.44002,10.70532 24234,Boos,3009,BY,82,DE,48.07521,10.19523 24277,Brand,3009,BY,82,DE,49.95972,11.91072 24283,Brannenburg,3009,BY,82,DE,47.73996,12.09166 24303,Breitbrunn,3009,BY,82,DE,48.0432,12.15431 24306,Breitenberg,3009,BY,82,DE,48.70439,13.79333 24307,Breitenbrunn,3009,BY,82,DE,49.36388,12.02013 24311,Breitengüßbach,3009,BY,82,DE,49.97209,10.88591 24312,Breitenthal,3009,BY,82,DE,48.23782,10.29951 24323,Brennberg,3009,BY,82,DE,49.06667,12.4 24353,Bruck,3009,BY,82,DE,48.02116,11.90781 24354,Bruck in der Oberpfalz,3009,BY,82,DE,49.24927,12.3071 24355,Bruckberg,3009,BY,82,DE,48.52244,11.99448 24356,Bruckmühl,3009,BY,82,DE,47.87859,11.91098 24359,Brunn,3009,BY,82,DE,49.23632,12.19156 24360,Brunnen,3009,BY,82,DE,48.22956,10.97332 24361,Brunnthal,3009,BY,82,DE,48.00652,11.68405 24375,Bubenreuth,3009,BY,82,DE,49.62745,11.01723 24376,Bubesheim,3009,BY,82,DE,48.43333,10.25 24378,Buch,3009,BY,82,DE,48.22479,10.18055 24381,Buch am Buchrain,3009,BY,82,DE,48.2151,11.99509 24383,Buchbach,3009,BY,82,DE,48.31231,12.27343 24384,Buchbrunn,3009,BY,82,DE,49.75981,10.13686 24385,Buchdorf,3009,BY,82,DE,48.78333,10.83333 24487,Büchenbach,3009,BY,82,DE,49.26778,11.05889 24388,Buchenberg,3009,BY,82,DE,47.69593,10.23927 24489,Büchlberg,3009,BY,82,DE,48.67112,13.521 24394,Buchloe,3009,BY,82,DE,48.03719,10.72548 24395,Buckenhof,3009,BY,82,DE,49.59324,11.05044 24411,Burgau,3009,BY,82,DE,48.43159,10.40989 24412,Burgberg,3009,BY,82,DE,47.53657,10.28883 24413,Burgbernheim,3009,BY,82,DE,49.45103,10.32385 24416,Burgebrach,3009,BY,82,DE,49.82832,10.74338 24417,Burggen,3009,BY,82,DE,47.77689,10.81724 24418,Burghaslach,3009,BY,82,DE,49.73313,10.6007 24420,Burghausen,3009,BY,82,DE,48.16925,12.83139 24421,Burgheim,3009,BY,82,DE,48.70035,11.01599 24422,Burgkirchen an der Alz,3009,BY,82,DE,48.16753,12.7325 24423,Burgkunstadt,3009,BY,82,DE,50.14093,11.25205 24424,Burglauer,3009,BY,82,DE,50.27645,10.17939 24425,Burglengenfeld,3009,BY,82,DE,49.20379,12.04452 24427,Burgoberbach,3009,BY,82,DE,49.23333,10.58333 24428,Burgpreppach,3009,BY,82,DE,50.14149,10.64977 24430,Burgsalach,3009,BY,82,DE,49.03316,11.09766 24432,Burgsinn,3009,BY,82,DE,50.14968,9.65119 24503,Bürgstadt,3009,BY,82,DE,49.71476,9.26916 24436,Burgthann,3009,BY,82,DE,49.35202,11.31154 24438,Burgwindheim,3009,BY,82,DE,49.82733,10.59631 24439,Burk,3009,BY,82,DE,49.13318,10.47891 24440,Burkardroth,3009,BY,82,DE,50.27125,9.99162 24446,Burtenbach,3009,BY,82,DE,48.34051,10.4528 24451,Buttenheim,3009,BY,82,DE,49.80365,11.03002 24452,Buttenwiesen,3009,BY,82,DE,48.6,10.71667 24508,Bütthard,3009,BY,82,DE,49.59913,9.87987 24456,Buxheim,3009,BY,82,DE,48.0,10.13333 24512,Cadolzburg,3009,BY,82,DE,49.4573,10.85329 24529,Cham,3009,BY,82,DE,49.22565,12.65501 24530,Chamerau,3009,BY,82,DE,49.2,12.75 24534,Chieming,3009,BY,82,DE,47.89258,12.54012 24536,Chostlarn,3009,BY,82,DE,48.37144,13.12064 24544,Coburg,3009,BY,82,DE,50.25937,10.96384 24550,Colmberg,3009,BY,82,DE,49.3548,10.41157 24562,Creußen,3009,BY,82,DE,49.84495,11.62683 24574,Dachau,3009,BY,82,DE,48.26,11.43402 24598,Dasing,3009,BY,82,DE,48.38482,11.04667 24610,Deggendorf,3009,BY,82,DE,48.84085,12.96068 24615,Deining,3009,BY,82,DE,49.22556,11.53968 24616,Deiningen,3009,BY,82,DE,48.86667,10.56667 24618,Deisenhausen,3009,BY,82,DE,48.25554,10.32698 24632,Denklingen,3009,BY,82,DE,47.91667,10.85 24634,Dentlein am Forst,3009,BY,82,DE,49.14772,10.42309 24648,Dettelbach,3009,BY,82,DE,49.80295,10.16519 24656,Deuerling,3009,BY,82,DE,49.0372,11.91045 24663,Diebach,3009,BY,82,DE,49.30912,10.19188 24666,Diedorf,3009,BY,82,DE,48.3532,10.78206 24676,Diespeck,3009,BY,82,DE,49.6,10.63333 24688,Dießen am Ammersee,3009,BY,82,DE,47.95085,11.10306 24678,Dietenhofen,3009,BY,82,DE,49.39997,10.68975 24679,Dietersburg,3009,BY,82,DE,48.49249,12.92499 24680,Dietersheim,3009,BY,82,DE,49.55631,10.54074 24681,Dieterskirchen,3009,BY,82,DE,49.41667,12.41667 24682,Dietfurt,3009,BY,82,DE,49.03578,11.58624 24684,Dietmannsried,3009,BY,82,DE,47.80787,10.28948 24685,Dietramszell,3009,BY,82,DE,47.84871,11.5953 24691,Dillingen an der Donau,3009,BY,82,DE,48.58153,10.49527 24693,Dingolfing,3009,BY,82,DE,48.64244,12.49283 24694,Dingolshausen,3009,BY,82,DE,49.9071,10.39032 24695,Dinkelsbühl,3009,BY,82,DE,49.06942,10.31985 24696,Dinkelscherben,3009,BY,82,DE,48.34826,10.58893 24702,Dirlewang,3009,BY,82,DE,48.00195,10.50306 24707,Dittelbrunn,3009,BY,82,DE,50.07212,10.21974 24709,Dittenheim,3009,BY,82,DE,49.05536,10.79201 24794,Döhlau,3009,BY,82,DE,50.28333,11.95 24724,Dombühl,3009,BY,82,DE,49.25349,10.28542 24730,Donaustauf,3009,BY,82,DE,49.03258,12.20459 24731,Donauwörth,3009,BY,82,DE,48.71804,10.7793 24732,Donnersdorf,3009,BY,82,DE,49.96667,10.41667 24735,Dorfen,3009,BY,82,DE,48.27037,12.16056 24737,Dorfprozelten,3009,BY,82,DE,49.78056,9.38028 24740,Dormitz,3009,BY,82,DE,49.59786,11.11765 24751,Drachselsried,3009,BY,82,DE,49.10759,13.01185 24778,Duggendorf,3009,BY,82,DE,49.11667,11.91667 24784,Durach,3009,BY,82,DE,47.6944,10.34449 24814,Dürrlauingen,3009,BY,82,DE,48.46666,10.4286 24816,Dürrwangen,3009,BY,82,DE,49.10778,10.385 24821,Ebelsbach,3009,BY,82,DE,49.98572,10.67442 24823,Ebensfeld,3009,BY,82,DE,50.0664,10.95835 24829,Ebermannsdorf,3009,BY,82,DE,49.39375,11.93582 24830,Ebermannstadt,3009,BY,82,DE,49.78154,11.18168 24835,Ebersberg,3009,BY,82,DE,48.0771,11.97063 24837,Ebersdorf,3009,BY,82,DE,50.32898,11.15266 24842,Ebnath,3009,BY,82,DE,49.95,11.93333 24846,Eching,3009,BY,82,DE,48.3,11.61667 24850,Eckersdorf,3009,BY,82,DE,50.02874,11.39611 24853,Edelsfeld,3009,BY,82,DE,49.57644,11.69589 24856,Ederheim,3009,BY,82,DE,48.80827,10.46609 24863,Effeltrich,3009,BY,82,DE,49.65929,11.09319 24868,Egenhofen,3009,BY,82,DE,48.28333,11.16667 24870,Egg an der Günz,3009,BY,82,DE,48.08714,10.28495 24872,Eggenfelden,3009,BY,82,DE,48.40509,12.75752 24874,Eggenthal,3009,BY,82,DE,47.91667,10.51667 24879,Egglham,3009,BY,82,DE,48.52902,13.05402 24880,Egglkofen,3009,BY,82,DE,48.4,12.45 24881,Eggolsheim,3009,BY,82,DE,49.76961,11.05701 24882,Eggstätt,3009,BY,82,DE,47.92698,12.37919 24883,Eging,3009,BY,82,DE,48.46328,12.18957 24884,Egling,3009,BY,82,DE,47.92316,11.50517 24885,Egloffstein,3009,BY,82,DE,49.70182,11.25749 24886,Egmating,3009,BY,82,DE,48.00405,11.79528 24887,Ehekirchen,3009,BY,82,DE,48.63333,11.1 24889,Ehingen,3009,BY,82,DE,48.6,10.8 24896,Eibelstadt,3009,BY,82,DE,49.72392,9.99962 24898,Eichenau,3009,BY,82,DE,48.16667,11.31667 24900,Eichenbühl,3009,BY,82,DE,49.70556,9.32917 24901,Eichendorf,3009,BY,82,DE,48.63266,12.85586 24902,Eichenried,3009,BY,82,DE,48.27748,11.78206 24906,Eichstätt,3009,BY,82,DE,48.88854,11.19675 24923,Eiselfing,3009,BY,82,DE,48.04114,12.24272 24928,Eisenburg,3009,BY,82,DE,48.01404,10.2087 24932,Eisingen,3009,BY,82,DE,49.75972,9.83111 24938,Eitting,3009,BY,82,DE,48.35957,11.8911 24943,Elfershausen,3009,BY,82,DE,50.14743,9.96151 24952,Ellgau,3009,BY,82,DE,48.6,10.86667 24954,Ellingen,3009,BY,82,DE,49.06076,10.96783 24957,Ellzee,3009,BY,82,DE,48.33971,10.31891 24965,Elsendorf,3009,BY,82,DE,48.70757,11.80982 24966,Elsenfeld,3009,BY,82,DE,49.84289,9.16355 24975,Eltmann,3009,BY,82,DE,49.97148,10.66712 24983,Emersacker,3009,BY,82,DE,48.48965,10.6738 24990,Emmering,3009,BY,82,DE,48.18333,11.28333 24995,Emskirchen,3009,BY,82,DE,49.55282,10.71278 24998,Emtmannsberg,3009,BY,82,DE,49.89231,11.64466 25001,Engelsberg,3009,BY,82,DE,48.11631,12.54267 25004,Engelthal,3009,BY,82,DE,49.47181,11.39943 25013,Ensdorf,3009,BY,82,DE,49.34062,11.93587 25025,Eppishausen,3009,BY,82,DE,48.16667,10.51667 25029,Erbendorf,3009,BY,82,DE,49.83983,12.04593 25032,Erding,3009,BY,82,DE,48.30603,11.90686 25034,Erdweg,3009,BY,82,DE,48.3318,11.30339 25035,Eresing,3009,BY,82,DE,48.087,11.02388 25040,Ergersheim,3009,BY,82,DE,49.51667,10.33333 25041,Ergolding,3009,BY,82,DE,48.57654,12.17102 25042,Ergoldsbach,3009,BY,82,DE,48.69263,12.20442 25043,Ering,3009,BY,82,DE,48.29921,13.15029 25048,Erkheim,3009,BY,82,DE,48.0373,10.3357 25051,Erlabrunn,3009,BY,82,DE,49.85972,9.84417 25052,Erlangen,3009,BY,82,DE,49.59099,11.00783 25055,Erlbach,3009,BY,82,DE,48.3,12.78333 25056,Erlenbach,3009,BY,82,DE,49.97857,9.64459 25058,Erlenbach am Main,3009,BY,82,DE,49.80341,9.16311 25064,Ernsgaden,3009,BY,82,DE,48.73333,11.58333 25075,Eschau,3009,BY,82,DE,49.81889,9.2592 25081,Eschenlohe,3009,BY,82,DE,48.01731,12.03012 25083,Eschlkam,3009,BY,82,DE,49.29883,12.91573 25087,Eslarn,3009,BY,82,DE,49.58345,12.52156 25093,Esselbach,3009,BY,82,DE,49.85528,9.52583 25096,Essenbach,3009,BY,82,DE,48.61332,12.21833 25098,Essing,3009,BY,82,DE,48.93467,11.78972 25102,Estenfeld,3009,BY,82,DE,49.82896,10.00588 25109,Ettringen,3009,BY,82,DE,48.1,10.65 25111,Etzelwang,3009,BY,82,DE,49.5276,11.58603 25112,Etzenricht,3009,BY,82,DE,49.63333,12.1 25113,Euerbach,3009,BY,82,DE,50.06199,10.13695 25114,Euerdorf,3009,BY,82,DE,50.14853,10.02331 25115,Eurasburg,3009,BY,82,DE,47.85389,11.40587 25119,Eußenheim,3009,BY,82,DE,49.98589,9.80899 25129,Fahrenzhausen,3009,BY,82,DE,48.35317,11.55521 25132,Falkenberg,3009,BY,82,DE,48.46154,12.73049 25135,Falkenfels,3009,BY,82,DE,49.00415,12.5948 25140,Falkenstein,3009,BY,82,DE,49.0975,12.48802 25142,Farchant,3009,BY,82,DE,47.53036,11.11151 25145,Faulbach,3009,BY,82,DE,49.78528,9.44417 25151,Feilitzsch,3009,BY,82,DE,50.36667,11.93333 25152,Feldafing,3009,BY,82,DE,47.94602,11.29326 25155,Feldkirchen,3009,BY,82,DE,48.14811,11.731 25156,Feldkirchen-Westerham,3009,BY,82,DE,47.90748,11.84266 25160,Fellheim,3009,BY,82,DE,48.0728,10.15224 25165,Feucht,3009,BY,82,DE,49.37597,11.21433 25166,Feuchtwangen,3009,BY,82,DE,49.16287,10.3385 25167,Fichtelberg,3009,BY,82,DE,50.00288,11.85425 25173,Finningen,3009,BY,82,DE,48.65452,10.49864 25174,Finsing,3009,BY,82,DE,48.21615,11.82412 25178,Fischach,3009,BY,82,DE,48.29047,10.65592 25180,Fischbachau,3009,BY,82,DE,47.71952,11.95081 25182,Flachslanden,3009,BY,82,DE,49.39845,10.51323 25184,Fladungen,3009,BY,82,DE,50.52054,10.14581 25193,Flintsbach,3009,BY,82,DE,47.72576,12.12419 25198,Floß,3009,BY,82,DE,49.72395,12.27593 25197,Flossenbürg,3009,BY,82,DE,49.73333,12.35 25204,Forchheim,3009,BY,82,DE,49.71754,11.05877 25209,Forstinning,3009,BY,82,DE,48.16866,11.91244 25211,Frammersbach,3009,BY,82,DE,50.06468,9.46888 25220,Frankenwinheim,3009,BY,82,DE,49.88733,10.31432 25226,Frasdorf,3009,BY,82,DE,47.80376,12.28512 25227,Frauenau,3009,BY,82,DE,48.98895,13.30067 25228,Fraueneuharting,3009,BY,82,DE,48.03873,12.0478 25232,Fraunberg,3009,BY,82,DE,48.36667,12.0 25246,Freihung,3009,BY,82,DE,49.62134,11.90817 25247,Freilassing,3009,BY,82,DE,47.84085,12.98114 25251,Freising,3009,BY,82,DE,48.40351,11.74876 25253,Fremdingen,3009,BY,82,DE,48.97241,10.45754 25254,Frensdorf,3009,BY,82,DE,49.81667,10.86667 25257,Freudenberg,3009,BY,82,DE,49.48333,11.98333 25263,Freystadt,3009,BY,82,DE,49.20007,11.33032 25264,Freyung,3009,BY,82,DE,48.80952,13.54768 25265,Frickenhausen,3009,BY,82,DE,49.67089,10.09268 25269,Fridolfing,3009,BY,82,DE,47.99773,12.82628 25270,Friedberg,3009,BY,82,DE,48.35693,10.98461 25275,Friedenfels,3009,BY,82,DE,49.8826,12.10124 25299,Friesenried,3009,BY,82,DE,47.87477,10.53464 25308,Frontenhausen,3009,BY,82,DE,48.54628,12.53118 25312,Fuchsmühl,3009,BY,82,DE,49.92265,12.14582 25313,Fuchsstadt,3009,BY,82,DE,50.10825,9.9337 25324,Fünfstetten,3009,BY,82,DE,48.83215,10.7654 25330,Fürsteneck,3009,BY,82,DE,48.71667,13.46667 25331,Fürstenfeldbruck,3009,BY,82,DE,48.17904,11.2547 25333,Fürstenstein,3009,BY,82,DE,48.71667,13.33333 25335,Fürstenzell,3009,BY,82,DE,48.52163,13.31749 25317,Furth,3009,BY,82,DE,48.40616,12.38121 25318,Furth im Wald,3009,BY,82,DE,49.30955,12.84156 25339,Füssen,3009,BY,82,DE,47.57143,10.70171 25341,Gablingen,3009,BY,82,DE,48.45,10.81667 25342,Gachenbach,3009,BY,82,DE,48.5,11.23333 25344,Gadheim,3009,BY,82,DE,49.84584,9.90566 25350,Gaimersheim,3009,BY,82,DE,48.80705,11.36801 25351,Gaißach,3009,BY,82,DE,47.75,11.58333 25353,Gammelsdorf,3009,BY,82,DE,48.55,11.95 25358,Gangkofen,3009,BY,82,DE,48.43701,12.56419 25362,Garching an der Alz,3009,BY,82,DE,48.13451,12.58152 25363,Garching bei München,3009,BY,82,DE,48.24896,11.65101 25367,Garmisch-Partenkirchen,3009,BY,82,DE,47.49209,11.09576 25369,Gars,3009,BY,82,DE,48.15386,12.27767 25377,Gattendorf,3009,BY,82,DE,50.32207,11.99776 25382,Gaukönigshofen,3009,BY,82,DE,49.63333,10.0 25383,Gauting,3009,BY,82,DE,48.06919,11.37703 25386,Gebsattel,3009,BY,82,DE,49.35,10.2 25391,Gefrees,3009,BY,82,DE,50.09538,11.73772 25395,Geiersthal,3009,BY,82,DE,49.04569,12.98171 25398,Geiselbach,3009,BY,82,DE,50.12329,9.19664 25399,Geiselhöring,3009,BY,82,DE,48.82505,12.39649 25400,Geiselwind,3009,BY,82,DE,49.77356,10.47063 25401,Geisenfeld,3009,BY,82,DE,48.68426,11.61233 25402,Geisenhausen,3009,BY,82,DE,48.47609,12.25817 25413,Geldersheim,3009,BY,82,DE,50.04286,10.15609 25417,Geltendorf,3009,BY,82,DE,48.11737,11.03216 25423,Gemünden am Main,3009,BY,82,DE,50.04946,9.70593 25425,Genderkingen,3009,BY,82,DE,48.7,10.88333 25429,Georgenberg,3009,BY,82,DE,49.70297,12.42082 25430,Georgensgmünd,3009,BY,82,DE,49.18972,11.01667 25437,Gerach,3009,BY,82,DE,50.03333,10.8 25438,Gerbrunn,3009,BY,82,DE,49.77528,9.99361 25441,Geretsried,3009,BY,82,DE,47.85775,11.48054 25442,Gerhardshofen,3009,BY,82,DE,49.63123,10.69133 25445,Germering,3009,BY,82,DE,48.13392,11.3765 25451,Geroldsgrün,3009,BY,82,DE,50.33333,11.6 25452,Geroldshausen,3009,BY,82,DE,49.68361,9.90222 25453,Gerolfingen,3009,BY,82,DE,49.0534,10.51151 25454,Gerolsbach,3009,BY,82,DE,48.49283,11.36149 25457,Gerolzhofen,3009,BY,82,DE,49.90025,10.34832 25463,Gersthofen,3009,BY,82,DE,48.42432,10.87273 25467,Gerzen,3009,BY,82,DE,48.50706,12.42686 25470,Gesees,3009,BY,82,DE,50.03207,11.66623 25472,Geslau,3009,BY,82,DE,49.36643,10.31528 25473,Gessertshausen,3009,BY,82,DE,48.32904,10.73278 25474,Gestratz,3009,BY,82,DE,47.65,9.98333 25480,Giebelstadt,3009,BY,82,DE,49.65308,9.94441 25489,Gilching,3009,BY,82,DE,48.10755,11.2936 25504,Glashütten,3009,BY,82,DE,49.88739,11.4487 25506,Glattbach,3009,BY,82,DE,50.0,9.15 25515,Glonn,3009,BY,82,DE,47.98751,11.86721 25518,Glött,3009,BY,82,DE,48.5,10.48333 25521,Gmund am Tegernsee,3009,BY,82,DE,47.75119,11.7381 25526,Gochsheim,3009,BY,82,DE,50.01667,10.28333 25528,Goldbach,3009,BY,82,DE,49.99951,9.1844 25533,Goldkronach,3009,BY,82,DE,50.01086,11.6875 25780,Görisried,3009,BY,82,DE,47.70668,10.51015 25787,Gössenheim,3009,BY,82,DE,50.01667,9.78333 25790,Gößweinstein,3009,BY,82,DE,49.76898,11.33841 25551,Gotteszell,3009,BY,82,DE,48.96667,12.96667 25552,Gottfrieding,3009,BY,82,DE,48.63737,12.53561 25555,Graben,3009,BY,82,DE,48.18732,10.82222 25558,Grabenstätt,3009,BY,82,DE,47.84531,12.5433 25720,Gräfelfing,3009,BY,82,DE,48.11878,11.42939 25562,Grafenau,3009,BY,82,DE,48.85768,13.3974 25721,Gräfenberg,3009,BY,82,DE,49.64426,11.24971 25722,Gräfendorf,3009,BY,82,DE,50.12267,9.7405 25564,Grafengehaig,3009,BY,82,DE,50.2031,11.59358 25566,Grafenrheinfeld,3009,BY,82,DE,50.0,10.2 25567,Grafenwiesen,3009,BY,82,DE,49.2,12.88333 25568,Grafenwöhr,3009,BY,82,DE,49.71728,11.90645 25570,Grafing bei München,3009,BY,82,DE,48.04596,11.96797 25571,Grafrath,3009,BY,82,DE,48.11667,11.16667 25572,Grainau,3009,BY,82,DE,47.47614,11.02405 25573,Grainet,3009,BY,82,DE,48.8,13.65 25579,Grasbrunn,3009,BY,82,DE,48.07905,11.74361 25581,Grassau,3009,BY,82,DE,47.78099,12.45359 25582,Grattersdorf,3009,BY,82,DE,48.80364,13.15372 25587,Greding,3009,BY,82,DE,49.04699,11.35703 25590,Greifenberg,3009,BY,82,DE,48.07062,11.08349 25593,Greiling,3009,BY,82,DE,47.76667,11.61667 25598,Gremsdorf,3009,BY,82,DE,49.69506,10.83218 25601,Grettstadt,3009,BY,82,DE,49.98333,10.31667 25603,Greußenheim,3009,BY,82,DE,49.81667,9.76667 25609,Griesstätt,3009,BY,82,DE,47.99403,12.17727 25727,Gröbenzell,3009,BY,82,DE,48.2,11.36667 25648,Großaitingen,3009,BY,82,DE,48.22753,10.77948 25651,Großbardorf,3009,BY,82,DE,50.26667,10.36667 25660,Großeibstadt,3009,BY,82,DE,50.30102,10.4098 25668,Großenseebach,3009,BY,82,DE,49.63251,10.87483 25673,Großhabersdorf,3009,BY,82,DE,49.4,10.78333 25677,Großheirath,3009,BY,82,DE,50.17603,10.9505 25679,Großheubach,3009,BY,82,DE,49.72834,9.2228 25682,Großkarolinenfeld,3009,BY,82,DE,47.89102,12.08101 25688,Großlangheim,3009,BY,82,DE,49.7562,10.24065 25696,Großostheim,3009,BY,82,DE,49.91985,9.07596 25699,Großreuth bei Schweinau,3009,BY,82,DE,49.43449,11.02273 25711,Großwallstadt,3009,BY,82,DE,49.87936,9.15338 25712,Großweil,3009,BY,82,DE,47.67598,11.30108 25716,Grub,3009,BY,82,DE,50.10285,11.92904 25737,Grünenbach,3009,BY,82,DE,47.62864,10.00843 25745,Grünwald,3009,BY,82,DE,48.03947,11.5232 25747,Gstadt am Chiemsee,3009,BY,82,DE,47.88453,12.41813 25755,Gundelfingen,3009,BY,82,DE,48.55347,10.37223 25757,Gundelsheim,3009,BY,82,DE,49.93708,10.9199 25759,Gundremmingen,3009,BY,82,DE,48.5,10.4 25794,Güntersleben,3009,BY,82,DE,49.86972,9.905 25796,Günzach,3009,BY,82,DE,47.82491,10.43547 25797,Günzburg,3009,BY,82,DE,48.45599,10.27695 25761,Gunzenhausen,3009,BY,82,DE,49.11663,10.75971 25768,Gutenstetten,3009,BY,82,DE,49.61667,10.63333 25804,Haag an der Amper,3009,BY,82,DE,48.4584,11.82796 25805,Haag in Oberbayern,3009,BY,82,DE,48.16196,12.17942 25807,Haar,3009,BY,82,DE,48.10881,11.72653 25808,Haarbach,3009,BY,82,DE,48.5,13.15 25809,Habach,3009,BY,82,DE,47.73333,11.28333 25814,Hafenlohr,3009,BY,82,DE,49.86944,9.60222 25816,Hagelstadt,3009,BY,82,DE,48.9,12.21667 25822,Hagenbüchach,3009,BY,82,DE,49.53333,10.76667 25825,Hahnbach,3009,BY,82,DE,49.53389,11.80302 25828,Haibach,3009,BY,82,DE,49.96444,9.20722 25829,Haidmühle,3009,BY,82,DE,48.82565,13.77649 25832,Haimhausen,3009,BY,82,DE,48.31545,11.55453 25833,Haiming,3009,BY,82,DE,48.21667,12.9 25839,Hainsfarth,3009,BY,82,DE,48.95839,10.62491 25845,Halblech,3009,BY,82,DE,47.63155,10.82024 25847,Haldenwang,3009,BY,82,DE,47.8,10.35 25849,Halfing,3009,BY,82,DE,47.95197,12.27525 25850,Hallbergmoos,3009,BY,82,DE,48.32747,11.75142 25856,Hallerndorf,3009,BY,82,DE,49.75909,10.97946 25857,Hallstadt,3009,BY,82,DE,49.92901,10.87539 25876,Hammelburg,3009,BY,82,DE,50.11633,9.89143 25895,Happurg,3009,BY,82,DE,49.49372,11.47119 25898,Harburg,3009,BY,82,DE,48.78674,10.68927 25906,Harsdorf,3009,BY,82,DE,50.03333,11.56667 25912,Hartenstein,3009,BY,82,DE,49.6,11.51667 25923,Haselbach,3009,BY,82,DE,48.64564,13.38956 25929,Hasloch,3009,BY,82,DE,49.79194,9.49361 25962,Haßfurt,3009,BY,82,DE,50.03521,10.5156 25936,Hattenhofen,3009,BY,82,DE,48.22231,11.11551 25946,Haundorf,3009,BY,82,DE,49.17598,10.77124 25947,Haunsheim,3009,BY,82,DE,48.59977,10.37401 25950,Hausen,3009,BY,82,DE,48.85953,12.0063 25953,Hausham,3009,BY,82,DE,47.7466,11.84069 25955,Hauzenberg,3009,BY,82,DE,48.64957,13.62645 25959,Hawangen,3009,BY,82,DE,47.96667,10.26667 25966,Hebertsfelden,3009,BY,82,DE,48.40596,12.82259 25967,Hebertshausen,3009,BY,82,DE,48.28959,11.46526 25981,Heideck,3009,BY,82,DE,49.13365,11.12726 25986,Heidenheim,3009,BY,82,DE,49.01719,10.74347 25991,Heigenbrücken,3009,BY,82,DE,50.0282,9.37116 26001,Heiligenstadt,3009,BY,82,DE,49.86303,11.17185 26004,Heilsbronn,3009,BY,82,DE,49.33572,10.78741 26007,Heimbuchenthal,3009,BY,82,DE,49.88917,9.29556 26008,Heimenkirch,3009,BY,82,DE,47.62959,9.90304 26009,Heimertingen,3009,BY,82,DE,48.03333,10.15 26029,Helmbrechts,3009,BY,82,DE,50.23557,11.71589 26030,Helmstadt,3009,BY,82,DE,49.7618,9.70803 26036,Hemau,3009,BY,82,DE,49.05399,11.78195 26039,Hemhofen,3009,BY,82,DE,49.68333,10.93333 26047,Hendungen,3009,BY,82,DE,50.39462,10.35204 26048,Henfenfeld,3009,BY,82,DE,49.49846,11.39059 26049,Hengersberg,3009,BY,82,DE,48.77255,13.05485 26066,Heretsried,3009,BY,82,DE,48.45972,10.73601 26069,Hergensweiler,3009,BY,82,DE,47.61667,9.78333 26084,Heroldsbach,3009,BY,82,DE,49.69342,10.99882 26085,Heroldsberg,3009,BY,82,DE,49.53247,11.15551 26087,Herrieden,3009,BY,82,DE,49.23779,10.5035 26089,Herrngiersdorf,3009,BY,82,DE,48.78863,12.072 26091,Herrsching am Ammersee,3009,BY,82,DE,47.99888,11.17679 26092,Hersbruck,3009,BY,82,DE,49.51083,11.43151 26102,Herzogenaurach,3009,BY,82,DE,49.56798,10.88565 26128,Heßdorf,3009,BY,82,DE,49.62728,10.91002 26111,Hettenshausen,3009,BY,82,DE,48.5,11.5 26113,Hettstadt,3009,BY,82,DE,49.79944,9.815 26116,Hetzles,3009,BY,82,DE,49.63333,11.13333 26124,Heustreu,3009,BY,82,DE,50.35485,10.26069 26141,Hilgertshausen-Tandern,3009,BY,82,DE,48.4296,11.35428 26146,Hilpoltstein,3009,BY,82,DE,49.19047,11.1906 26147,Hiltenfingen,3009,BY,82,DE,48.16085,10.7175 26149,Hiltpoltstein,3009,BY,82,DE,49.66075,11.32272 26152,Himmelkron,3009,BY,82,DE,50.06667,11.6 26154,Himmelstadt,3009,BY,82,DE,49.92389,9.80167 26156,Hinterschmiding,3009,BY,82,DE,48.82337,13.60369 26161,Hirschaid,3009,BY,82,DE,49.81789,10.98918 26162,Hirschau,3009,BY,82,DE,49.54396,11.94617 26163,Hirschbach,3009,BY,82,DE,49.55,11.53333 26298,Höchberg,3009,BY,82,DE,49.78446,9.88223 26300,Höchheim,3009,BY,82,DE,50.36667,10.45 26180,Hochstadt am Main,3009,BY,82,DE,50.15009,11.17116 26302,Höchstadt an der Aisch,3009,BY,82,DE,49.70617,10.81329 26303,Höchstädt an der Donau,3009,BY,82,DE,48.61124,10.56816 26304,Höchstädt bei Thiersheim,3009,BY,82,DE,50.10157,12.08711 26185,Hof,3009,BY,82,DE,50.31297,11.91261 26189,Hofheim in Unterfranken,3009,BY,82,DE,50.13675,10.52321 26190,Hofkirchen,3009,BY,82,DE,48.67805,13.11917 26192,Hofstetten,3009,BY,82,DE,48.00847,10.97114 26197,Hohenau,3009,BY,82,DE,48.84983,13.48825 26198,Hohenberg an der Eger,3009,BY,82,DE,50.09501,12.22008 26200,Hohenbrunn,3009,BY,82,DE,48.04785,11.70224 26201,Hohenburg,3009,BY,82,DE,49.29507,11.79906 26204,Hohenfels,3009,BY,82,DE,49.20397,11.84841 26205,Hohenfurch,3009,BY,82,DE,47.85,10.9 26207,Hohenkammer,3009,BY,82,DE,48.42406,11.52522 26310,Höhenkirchen-Siegertsbrunn,3009,BY,82,DE,48.01932,11.71906 26210,Hohenlinden,3009,BY,82,DE,48.15612,11.99458 26213,Hohenpeißenberg,3009,BY,82,DE,47.8,11.0 26214,Hohenpolding,3009,BY,82,DE,48.38333,12.13333 26217,Hohenthann,3009,BY,82,DE,48.66115,12.09251 26220,Hohenwarth,3009,BY,82,DE,49.2,12.93333 26231,Hollenbach,3009,BY,82,DE,48.48333,11.06667 26234,Hollfeld,3009,BY,82,DE,49.93793,11.29153 26236,Hollstadt,3009,BY,82,DE,50.35,10.3 26243,Holzgünz,3009,BY,82,DE,48.02503,10.25901 26245,Holzheim,3009,BY,82,DE,48.51422,10.53057 26246,Holzkirchen,3009,BY,82,DE,47.87663,11.70181 26254,Hopferau,3009,BY,82,DE,47.61667,10.63333 26259,Horgau,3009,BY,82,DE,48.39507,10.68283 26318,Hörgertshausen,3009,BY,82,DE,48.55,11.86667 26322,Hösbach,3009,BY,82,DE,50.00646,9.20765 26323,Höslwang,3009,BY,82,DE,47.95378,12.32915 26325,Höttingen,3009,BY,82,DE,49.06262,11.0053 26281,Huglfing,3009,BY,82,DE,47.76667,11.16667 26282,Huisheim,3009,BY,82,DE,48.8251,10.70331 26285,Hunderdorf,3009,BY,82,DE,48.89162,12.67382 26287,Hunding,3009,BY,82,DE,48.84227,13.17681 26290,Hurlach,3009,BY,82,DE,48.11838,10.81115 26293,Hutthurm,3009,BY,82,DE,48.67276,13.47146 26347,Ichenhausen,3009,BY,82,DE,48.37119,10.30706 26349,Icking,3009,BY,82,DE,47.95,11.43333 26352,Iffeldorf,3009,BY,82,DE,47.76667,11.31667 26356,Igensdorf,3009,BY,82,DE,49.62322,11.23137 26358,Iggensbach,3009,BY,82,DE,48.73014,13.14229 26362,Ihrlerstein,3009,BY,82,DE,48.93333,11.86667 26367,Illertissen,3009,BY,82,DE,48.22336,10.10347 26371,Illschwang,3009,BY,82,DE,49.45,11.68333 26373,Ilmmünster,3009,BY,82,DE,48.48333,11.5 26382,Immenreuth,3009,BY,82,DE,49.9,11.86667 26384,Immenstadt im Allgäu,3009,BY,82,DE,47.55996,10.21394 26386,Inchenhofen,3009,BY,82,DE,48.51288,11.11458 26392,Ingolstadt,3009,BY,82,DE,48.76508,11.42372 26393,Innernzell,3009,BY,82,DE,48.8515,13.27539 26394,Inning am Ammersee,3009,BY,82,DE,48.07636,11.15232 26395,Inning am Holz,3009,BY,82,DE,48.34687,12.07506 26397,Insingen,3009,BY,82,DE,49.3,10.16667 26398,Inzell,3009,BY,82,DE,47.76302,12.75146 26401,Iphofen,3009,BY,82,DE,49.70239,10.26037 26402,Ippesheim,3009,BY,82,DE,49.60214,10.22552 26403,Ipsheim,3009,BY,82,DE,49.5275,10.48176 26404,Irchenrieth,3009,BY,82,DE,49.62286,12.22495 26405,Irlbach,3009,BY,82,DE,48.84128,12.75135 26408,Irschenberg,3009,BY,82,DE,47.83333,11.91667 26409,Irsee,3009,BY,82,DE,47.90815,10.57177 26411,Isen,3009,BY,82,DE,48.21203,12.05672 26415,Ismaning,3009,BY,82,DE,48.23333,11.68333 26429,Jandelsbrunn,3009,BY,82,DE,48.73333,13.7 26436,Jengen,3009,BY,82,DE,47.99934,10.72575 26442,Jesenwang,3009,BY,82,DE,48.16667,11.13333 26447,Jettingen-Scheppach,3009,BY,82,DE,48.3896,10.4381 26448,Jetzendorf,3009,BY,82,DE,48.43333,11.41667 26454,Johannesberg,3009,BY,82,DE,50.03159,9.14252 26456,Johanniskirchen,3009,BY,82,DE,48.53333,12.95 26462,Julbach,3009,BY,82,DE,48.2543,12.95793 26479,Kahl am Main,3009,BY,82,DE,50.06981,9.00553 26484,Kaisheim,3009,BY,82,DE,48.76751,10.79639 26487,Kalchreuth,3009,BY,82,DE,49.55785,11.1335 26493,Kallmünz,3009,BY,82,DE,49.16094,11.96051 26501,Kammerstein,3009,BY,82,DE,49.29317,10.97277 26512,Karbach,3009,BY,82,DE,49.86701,9.63806 26515,Karlsfeld,3009,BY,82,DE,48.22697,11.47573 26518,Karlshuld,3009,BY,82,DE,48.6819,11.28503 26519,Karlskron,3009,BY,82,DE,48.68333,11.41667 26522,Karlstadt,3009,BY,82,DE,49.96034,9.77239 26524,Karsbach,3009,BY,82,DE,50.04091,9.78534 26529,Kasendorf,3009,BY,82,DE,50.03665,11.35203 26533,Kastl,3009,BY,82,DE,49.3696,11.68261 26542,Kaufbeuren,3009,BY,82,DE,47.88238,10.62192 26543,Kaufering,3009,BY,82,DE,48.09121,10.87913 26556,Kelheim,3009,BY,82,DE,48.91725,11.88618 26561,Kellmünz,3009,BY,82,DE,48.12159,10.12811 26564,Kemmern,3009,BY,82,DE,49.95486,10.87784 26565,Kemnath,3009,BY,82,DE,49.87007,11.89077 26569,Kempten (Allgäu),3009,BY,82,DE,47.72674,10.31389 26577,Kettershausen,3009,BY,82,DE,48.18333,10.26667 26583,Kiefersfelden,3009,BY,82,DE,47.61409,12.19096 26585,Kienberg,3009,BY,82,DE,48.03481,12.4633 26593,Kirchanschöring,3009,BY,82,DE,47.95303,12.83435 26597,Kirchberg,3009,BY,82,DE,48.90006,13.182 26602,Kirchdorf,3009,BY,82,DE,48.45942,11.65438 26605,Kirchdorf am Inn,3009,BY,82,DE,48.24755,12.98453 26606,Kirchdorf im Wald,3009,BY,82,DE,48.91048,13.26614 26607,Kirchehrenbach,3009,BY,82,DE,49.73333,11.15 26609,Kirchenlamitz,3009,BY,82,DE,50.1519,11.94831 26610,Kirchenpingarten,3009,BY,82,DE,49.93333,11.78333 26611,Kirchensittenbach,3009,BY,82,DE,49.55601,11.42226 26613,Kirchenthumbach,3009,BY,82,DE,49.74866,11.72542 26616,Kirchham,3009,BY,82,DE,48.34638,13.26719 26617,Kirchhaslach,3009,BY,82,DE,48.1504,10.31015 26619,Kirchheim,3009,BY,82,DE,48.1749,10.47461 26624,Kirchheim bei München,3009,BY,82,DE,48.17656,11.75563 26628,Kirchlauter,3009,BY,82,DE,50.0443,10.71776 26631,Kirchroth,3009,BY,82,DE,48.95,12.55 26633,Kirchseeon,3009,BY,82,DE,48.07143,11.88875 26637,Kirchweidach,3009,BY,82,DE,48.08575,12.6453 26640,Kirchzell,3009,BY,82,DE,49.618,9.17785 26649,Kissing,3009,BY,82,DE,48.30375,10.97088 26650,Kist,3009,BY,82,DE,49.74278,9.84389 26652,Kitzingen,3009,BY,82,DE,49.73973,10.15072 26668,Kleinaitingen,3009,BY,82,DE,48.2185,10.86923 26672,Kleinheubach,3009,BY,82,DE,49.72109,9.21346 26673,Kleinkahl,3009,BY,82,DE,50.11667,9.26667 26674,Kleinlangheim,3009,BY,82,DE,49.77087,10.2843 26677,Kleinostheim,3009,BY,82,DE,50.0,9.06667 26678,Kleinrinderfeld,3009,BY,82,DE,49.70028,9.84472 26679,Kleinsendelbach,3009,BY,82,DE,49.59558,11.15773 26680,Kleinwallstadt,3009,BY,82,DE,49.87464,9.16927 26686,Klingenberg am Main,3009,BY,82,DE,49.78507,9.18025 26694,Klosterlechfeld,3009,BY,82,DE,48.15586,10.82986 26701,Knetzgau,3009,BY,82,DE,49.98333,10.55 26706,Kochel,3009,BY,82,DE,47.65926,11.36827 26812,Köditz,3009,BY,82,DE,50.33333,11.85 26813,Ködnitz,3009,BY,82,DE,50.1,11.53333 26814,Köfering,3009,BY,82,DE,48.93333,12.2 26708,Kohlberg,3009,BY,82,DE,49.59121,12.01948 26710,Kolbermoor,3009,BY,82,DE,47.84965,12.06696 26712,Kolitzheim,3009,BY,82,DE,49.91667,10.23333 26715,Kollnburg,3009,BY,82,DE,49.04664,12.86121 26825,Königsbrunn,3009,BY,82,DE,48.27506,10.89178 26827,Königsdorf,3009,BY,82,DE,47.81546,11.48063 26830,Königsfeld,3009,BY,82,DE,49.94603,11.1652 26835,Königstein,3009,BY,82,DE,49.60854,11.63143 26717,Konradsreuth,3009,BY,82,DE,50.26667,11.85 26720,Konzell,3009,BY,82,DE,49.0724,12.71114 26731,Kottgeisering,3009,BY,82,DE,48.11667,11.13333 26848,Kötzting,3009,BY,82,DE,49.17649,12.85515 26734,Kraiburg am Inn,3009,BY,82,DE,48.18191,12.43073 26736,Krailling,3009,BY,82,DE,48.1,11.4 26754,Kreut,3009,BY,82,DE,47.79868,11.48312 26758,Kreuzwertheim,3009,BY,82,DE,49.76818,9.51819 26765,Krombach,3009,BY,82,DE,50.08319,9.20609 26767,Kronach,3009,BY,82,DE,50.23963,11.33308 26771,Kronburg,3009,BY,82,DE,47.90432,10.1572 26778,Krumbach,3009,BY,82,DE,48.24182,10.3632 26779,Krummennaab,3009,BY,82,DE,49.83333,12.1 26787,Krün,3009,BY,82,DE,47.50515,11.27924 26791,Kueps Oberfranken,3009,BY,82,DE,50.19265,11.27599 26849,Kühbach,3009,BY,82,DE,48.49101,11.18691 26793,Kulmain,3009,BY,82,DE,49.9,11.9 26794,Kulmbach,3009,BY,82,DE,50.10068,11.45032 26795,Kumhausen,3009,BY,82,DE,48.50938,12.15637 26854,Kümmersbruck,3009,BY,82,DE,49.41917,11.88833 26797,Kunreuth,3009,BY,82,DE,50.23321,11.53119 26857,Künzing,3009,BY,82,DE,48.66667,13.08333 26798,Kupferberg,3009,BY,82,DE,50.1396,11.57762 26858,Kürnach,3009,BY,82,DE,49.85,10.03333 26809,Kutzenhausen,3009,BY,82,DE,48.34202,10.69459 26865,Laberweinting,3009,BY,82,DE,48.8,12.31667 26867,Lachen,3009,BY,82,DE,47.9459,10.23943 26879,Lalling,3009,BY,82,DE,48.84525,13.14008 26880,Lam,3009,BY,82,DE,49.19665,13.05051 26884,Lamerdingen,3009,BY,82,DE,48.09195,10.73982 26889,Landau an der Isar,3009,BY,82,DE,48.67249,12.69316 26894,Landsberg am Lech,3009,BY,82,DE,48.04819,10.88282 26895,Landsberied,3009,BY,82,DE,48.16667,11.16667 26897,Landshut,3009,BY,82,DE,48.52961,12.16179 26904,Langenaltheim,3009,BY,82,DE,48.89318,10.93107 26907,Langenbach,3009,BY,82,DE,48.43333,11.85 26917,Langenfeld,3009,BY,82,DE,49.61667,10.51667 26924,Langenmosen,3009,BY,82,DE,48.60658,11.21378 26925,Langenneufnach,3009,BY,82,DE,48.26667,10.6 26927,Langenpreising,3009,BY,82,DE,48.42569,11.97217 26929,Langensendelbach,3009,BY,82,DE,49.64051,11.07104 26932,Langenzenn,3009,BY,82,DE,49.49463,10.7923 26934,Langerringen,3009,BY,82,DE,48.1459,10.75894 26937,Langfurth,3009,BY,82,DE,49.10112,10.45359 26940,Langquaid,3009,BY,82,DE,48.82318,12.05134 26946,Langweid,3009,BY,82,DE,48.49095,10.8531 26950,Lappersdorf,3009,BY,82,DE,49.04694,12.0913 26957,Lauben,3009,BY,82,DE,48.05928,10.29014 26964,Laudenbach,3009,BY,82,DE,49.74583,9.17611 26971,Lauf an der Pegnitz,3009,BY,82,DE,49.51386,11.28247 26972,Laufach,3009,BY,82,DE,50.01667,9.3 26974,Laufen,3009,BY,82,DE,47.93568,12.92856 26977,Laugna,3009,BY,82,DE,48.53333,10.7 26978,Lauingen,3009,BY,82,DE,48.56775,10.42706 26983,Lauter,3009,BY,82,DE,49.97317,10.78842 26987,Lauterhofen,3009,BY,82,DE,49.3684,11.60294 26989,Lautertal,3009,BY,82,DE,50.33333,10.96667 26990,Lautrach,3009,BY,82,DE,47.89805,10.11806 26996,Lechbruck,3009,BY,82,DE,47.70162,10.79493 27004,Legau,3009,BY,82,DE,47.85628,10.12981 27010,Lehrberg,3009,BY,82,DE,49.34568,10.51101 27015,Leiblfing,3009,BY,82,DE,48.77565,12.51793 27017,Leidersbach,3009,BY,82,DE,49.90139,9.22167 27022,Leinburg,3009,BY,82,DE,49.45167,11.31 27027,Leipheim,3009,BY,82,DE,48.45004,10.22278 27038,Lengdorf,3009,BY,82,DE,48.25737,12.04973 27042,Lengenwang,3009,BY,82,DE,47.7,10.6 27045,Lenggries,3009,BY,82,DE,47.68333,11.56667 27052,Leonberg,3009,BY,82,DE,49.94708,12.2852 27060,Leuchtenberg,3009,BY,82,DE,49.59737,12.2584 27063,Leupoldsgrün,3009,BY,82,DE,50.3,11.8 27064,Leutenbach,3009,BY,82,DE,49.7095,11.17224 27068,Leutershausen,3009,BY,82,DE,49.29869,10.41189 27077,Lichtenau,3009,BY,82,DE,49.15979,10.37935 27079,Lichtenberg,3009,BY,82,DE,50.38335,11.67624 27081,Lichtenfels,3009,BY,82,DE,50.14567,11.05928 27102,Lindau,3009,BY,82,DE,47.54612,9.68431 27105,Lindberg,3009,BY,82,DE,49.0368,13.25423 27123,Litzendorf,3009,BY,82,DE,49.91444,11.01028 27130,Lohberg,3009,BY,82,DE,49.17604,13.10549 27136,Lohr am Main,3009,BY,82,DE,49.98922,9.57223 27139,Loiching,3009,BY,82,DE,48.61667,12.43333 27145,Lonnerstadt,3009,BY,82,DE,49.69882,10.76711 27155,Lower Bavaria,3009,BY,82,DE,48.75,12.83333 27167,Ludwigsstadt,3009,BY,82,DE,50.48605,11.38734 27171,Luhe-Wildenau,3009,BY,82,DE,49.58367,12.14921 27177,Lupburg,3009,BY,82,DE,49.1551,11.7564 27553,Mähring,3009,BY,82,DE,49.91095,12.52448 27234,Maierhöfen,3009,BY,82,DE,47.65,10.05 27235,Maihingen,3009,BY,82,DE,48.92745,10.49867 27237,Mainaschaff,3009,BY,82,DE,49.98167,9.09 27238,Mainbernheim,3009,BY,82,DE,49.70794,10.219 27239,Mainburg,3009,BY,82,DE,48.64182,11.78093 27241,Mainleus,3009,BY,82,DE,50.09987,11.37664 27242,Mainstockheim,3009,BY,82,DE,49.77156,10.14807 27246,Maisach,3009,BY,82,DE,48.21667,11.26667 27247,Maitenbeth,3009,BY,82,DE,48.15053,12.09335 27250,Malching,3009,BY,82,DE,48.31226,13.18746 27253,Malgersdorf,3009,BY,82,DE,48.53333,12.75 27254,Mallersdorf-Pfaffenberg,3009,BY,82,DE,48.76637,12.23096 27261,Mammendorf,3009,BY,82,DE,48.20836,11.16326 27262,Mamming,3009,BY,82,DE,48.65174,12.60784 27263,Manching,3009,BY,82,DE,48.71656,11.49393 27268,Mantel,3009,BY,82,DE,49.65412,12.04074 27271,Margetshöchheim,3009,BY,82,DE,49.8375,9.86389 27272,Mariaposching,3009,BY,82,DE,48.83333,12.8 27288,Marklkofen,3009,BY,82,DE,48.55,12.56667 27293,Markt Berolzheim,3009,BY,82,DE,49.00955,10.84473 27294,Markt Bibart,3009,BY,82,DE,49.64787,10.42492 27295,Markt Einersheim,3009,BY,82,DE,49.68663,10.29155 27296,Markt Erlbach,3009,BY,82,DE,49.49367,10.65265 27297,Markt Indersdorf,3009,BY,82,DE,48.36058,11.37789 27298,Markt Nordheim,3009,BY,82,DE,49.59095,10.35564 27299,Markt Rettenbach,3009,BY,82,DE,47.94733,10.39608 27300,Markt Schwaben,3009,BY,82,DE,48.18949,11.8691 27301,Markt Taschendorf,3009,BY,82,DE,49.70111,10.55557 27302,Markt Wald,3009,BY,82,DE,48.1368,10.58198 27303,Marktbergel,3009,BY,82,DE,49.44156,10.36355 27304,Marktbreit,3009,BY,82,DE,49.66541,10.14811 27305,Marktgraitz,3009,BY,82,DE,50.18358,11.19441 27306,Marktheidenfeld,3009,BY,82,DE,49.8454,9.60359 27307,Marktl,3009,BY,82,DE,48.25516,12.8447 27308,Marktleugast,3009,BY,82,DE,50.17306,11.63389 27309,Marktleuthen,3009,BY,82,DE,50.13007,12.00226 27310,Marktoberdorf,3009,BY,82,DE,47.77964,10.61713 27311,Marktoffingen,3009,BY,82,DE,48.92566,10.47078 27312,Marktredwitz,3009,BY,82,DE,50.00443,12.08593 27313,Marktrodach,3009,BY,82,DE,50.25,11.38333 27314,Marktschellenberg,3009,BY,82,DE,47.69657,13.0434 27315,Marktschorgast,3009,BY,82,DE,50.09475,11.65465 27316,Marktsteft,3009,BY,82,DE,49.69606,10.13626 27317,Marktzeuln,3009,BY,82,DE,50.16673,11.16692 27319,Marloffstein,3009,BY,82,DE,49.61794,11.06323 27322,Maroldsweisach,3009,BY,82,DE,50.19578,10.66003 27324,Marquartstein,3009,BY,82,DE,47.75857,12.46219 27330,Martinsheim,3009,BY,82,DE,49.6235,10.14879 27333,Marxheim,3009,BY,82,DE,48.74153,10.94504 27335,Marzling,3009,BY,82,DE,48.40904,11.79382 27352,Maßbach,3009,BY,82,DE,50.18321,10.27522 27340,Massing,3009,BY,82,DE,48.39118,12.60947 27343,Mauern,3009,BY,82,DE,48.51667,11.9 27344,Mauerstetten,3009,BY,82,DE,47.89358,10.67127 27347,Mauth,3009,BY,82,DE,48.88972,13.58459 27349,Maxhütte-Haidhof,3009,BY,82,DE,49.19963,12.09229 27363,Medlingen,3009,BY,82,DE,48.57027,10.31608 27364,Meeder,3009,BY,82,DE,50.32118,10.90697 27372,Mehlmeisel,3009,BY,82,DE,49.97421,11.862 27377,Mehring,3009,BY,82,DE,48.18333,12.78333 27386,Meitingen,3009,BY,82,DE,48.54586,10.85179 27397,Mellrichstadt,3009,BY,82,DE,50.42849,10.30334 27401,Memmelsdorf,3009,BY,82,DE,49.93012,10.95921 27402,Memmingen,3009,BY,82,DE,47.98372,10.18527 27403,Memmingerberg,3009,BY,82,DE,47.98803,10.22295 27410,Mengkofen,3009,BY,82,DE,48.71894,12.44047 27414,Merching,3009,BY,82,DE,48.24594,10.9853 27418,Mering,3009,BY,82,DE,48.2656,10.98461 27420,Merkendorf,3009,BY,82,DE,49.20361,10.70416 27424,Mertingen,3009,BY,82,DE,48.65695,10.80557 27433,Mespelbrunn,3009,BY,82,DE,49.91444,9.29194 27437,Metten,3009,BY,82,DE,48.85512,12.91554 27440,Mettenheim,3009,BY,82,DE,48.26667,12.46667 27451,Michelau,3009,BY,82,DE,50.16233,11.11207 27454,Michelsneukirchen,3009,BY,82,DE,49.12291,12.55284 27457,Mickhausen,3009,BY,82,DE,48.24171,10.64026 27461,Miesbach,3009,BY,82,DE,47.78903,11.83382 27468,Miltach,3009,BY,82,DE,49.16196,12.76843 27469,Miltenberg,3009,BY,82,DE,49.70452,9.26725 27471,Mindelheim,3009,BY,82,DE,48.04578,10.49222 27474,Mintraching,3009,BY,82,DE,48.95357,12.24209 27476,Missen-Wilhams,3009,BY,82,DE,47.6,10.11667 27477,Mistelgau,3009,BY,82,DE,49.9126,11.46586 27481,Mitteleschenbach,3009,BY,82,DE,49.21186,10.79784 27484,Mittelneufnach,3009,BY,82,DE,48.17642,10.59754 27486,Mittelstetten,3009,BY,82,DE,48.25,11.1 27488,Mittenwald,3009,BY,82,DE,47.4422,11.26187 27490,Mitterfels,3009,BY,82,DE,48.97633,12.67848 27491,Mitterskirchen,3009,BY,82,DE,48.35,12.73333 27492,Mitterteich,3009,BY,82,DE,49.95141,12.24206 27494,Mitwitz,3009,BY,82,DE,50.25111,11.20818 27557,Mödingen,3009,BY,82,DE,48.64327,10.43173 27562,Möhrendorf,3009,BY,82,DE,49.63333,11.0 27565,Mömbris,3009,BY,82,DE,50.06921,9.16371 27566,Mömlingen,3009,BY,82,DE,49.85972,9.08333 27567,Mönchberg,3009,BY,82,DE,49.79326,9.26858 27571,Mönchsdeggingen,3009,BY,82,DE,48.77605,10.58043 27572,Mönchsroth,3009,BY,82,DE,49.01851,10.35856 27508,Monheim,3009,BY,82,DE,48.84389,10.85834 27515,Moorenweis,3009,BY,82,DE,48.15561,11.07851 27518,Moosach,3009,BY,82,DE,48.03213,11.8751 27519,Moosbach,3009,BY,82,DE,49.58909,12.41036 27520,Moosburg,3009,BY,82,DE,48.47089,11.93811 27521,Moosinning,3009,BY,82,DE,48.27708,11.84446 27522,Moosthenning,3009,BY,82,DE,48.67659,12.49737 27529,Motten,3009,BY,82,DE,50.39561,9.77251 27580,Möttingen,3009,BY,82,DE,48.80924,10.59022 27581,Mötzing,3009,BY,82,DE,48.8935,12.37361 27593,Mühldorf,3009,BY,82,DE,48.2467,12.52155 27597,Mühlhausen,3009,BY,82,DE,49.75443,10.77563 27534,Muhr am See,3009,BY,82,DE,49.15445,10.71845 27609,Münchberg,3009,BY,82,DE,50.18952,11.78823 27613,Münchsmünster,3009,BY,82,DE,48.76667,11.68333 27614,Münchsteinach,3009,BY,82,DE,49.63937,10.59502 27540,Munich,3009,BY,82,DE,48.13743,11.57549 27617,Münnerstadt,3009,BY,82,DE,50.24636,10.20187 27542,Munningen,3009,BY,82,DE,48.91667,10.6 27618,Münsing,3009,BY,82,DE,47.9,11.36667 27622,Münster,3009,BY,82,DE,48.22904,10.63623 27625,Münsterhausen,3009,BY,82,DE,48.30973,10.455 27545,Murnau am Staffelsee,3009,BY,82,DE,47.68085,11.20125 27630,Nabburg,3009,BY,82,DE,49.45347,12.17996 27634,Nagel,3009,BY,82,DE,49.98333,11.91667 27638,Naila,3009,BY,82,DE,50.33034,11.70463 27641,Nandlstadt,3009,BY,82,DE,48.53644,11.8073 27674,Nennslingen,3009,BY,82,DE,49.04709,11.13052 27679,Nersingen,3009,BY,82,DE,48.42829,10.12356 27682,Nesselwang,3009,BY,82,DE,47.62342,10.50243 27695,Neu-Ulm,3009,BY,82,DE,48.39279,10.01112 27696,Neualbenreuth,3009,BY,82,DE,49.98037,12.44373 27698,Neubeuern,3009,BY,82,DE,47.77368,12.14002 27699,Neubiberg,3009,BY,82,DE,48.0771,11.65812 27701,Neubrunn,3009,BY,82,DE,49.73088,9.67161 27707,Neuburg,3009,BY,82,DE,48.50654,13.44718 27709,Neuburg an der Donau,3009,BY,82,DE,48.73218,11.18709 27714,Neudrossenfeld,3009,BY,82,DE,50.01667,11.5 27719,Neuendettelsau,3009,BY,82,DE,49.28333,10.78333 27724,Neuenmarkt,3009,BY,82,DE,50.09193,11.58033 27731,Neufahrn,3009,BY,82,DE,48.25587,12.44078 27732,Neufahrn bei Freising,3009,BY,82,DE,48.31588,11.66316 27735,Neufraunhofen,3009,BY,82,DE,48.4,12.21667 27740,Neuhaus am Inn,3009,BY,82,DE,48.46086,13.42083 27743,Neuhaus an der Pegnitz,3009,BY,82,DE,49.62799,11.55066 27749,Neuhof an der Zenn,3009,BY,82,DE,49.4569,10.64548 27752,Neuhütten,3009,BY,82,DE,50.0,9.41667 27759,Neukirchen,3009,BY,82,DE,49.26015,12.96921 27763,Neukirchen-Balbini,3009,BY,82,DE,49.29101,12.43643 27771,Neumarkt in der Oberpfalz,3009,BY,82,DE,49.28028,11.46278 27772,Neumarkt-Sankt Veit,3009,BY,82,DE,48.36051,12.50723 27775,Neunburg vorm Wald,3009,BY,82,DE,49.34782,12.38621 27781,Neunkirchen am Brand,3009,BY,82,DE,49.61204,11.12967 27782,Neunkirchen am Main,3009,BY,82,DE,49.923,11.64793 27783,Neunkirchen am Sand,3009,BY,82,DE,49.52464,11.31955 27817,Neuötting,3009,BY,82,DE,48.24102,12.68998 27785,Neureichenau,3009,BY,82,DE,48.74861,13.74699 27786,Neuried,3009,BY,82,DE,48.09322,11.46561 27789,Neuschönau,3009,BY,82,DE,48.88419,13.47576 27790,Neusitz,3009,BY,82,DE,49.37185,10.22559 27791,Neusorg,3009,BY,82,DE,49.93333,11.96667 27797,Neustadt am Main,3009,BY,82,DE,49.93021,9.56808 27800,Neustadt an der Aisch,3009,BY,82,DE,49.57953,10.61126 27801,Neustadt an der Donau,3009,BY,82,DE,48.80705,11.76952 27803,Neustadt an der Waldnaab,3009,BY,82,DE,49.73287,12.17773 27804,Neustadt bei Coburg,3009,BY,82,DE,50.32975,11.12058 27811,Neutraubling,3009,BY,82,DE,48.98737,12.201 27829,Niederaichbach,3009,BY,82,DE,48.6,12.31667 27830,Niederalteich,3009,BY,82,DE,48.76564,13.02412 27833,Niederbergkirchen,3009,BY,82,DE,48.31667,12.5 27848,Niederfüllbach,3009,BY,82,DE,50.22002,10.99086 27856,Niederlauer,3009,BY,82,DE,50.29411,10.17712 27859,Niedermurach,3009,BY,82,DE,49.44999,12.3761 27860,Niedernberg,3009,BY,82,DE,49.91222,9.13694 27868,Niederrieden,3009,BY,82,DE,48.0576,10.18321 27872,Niederschönenfeld,3009,BY,82,DE,48.71667,10.93333 27878,Niedertaufkirchen,3009,BY,82,DE,48.33333,12.55 27879,Niederviehbach,3009,BY,82,DE,48.61667,12.38333 27881,Niederwerrn,3009,BY,82,DE,50.06149,10.1827 27884,Niederwinkling,3009,BY,82,DE,48.88333,12.8 27904,Nittenau,3009,BY,82,DE,49.19425,12.26741 27905,Nittendorf,3009,BY,82,DE,49.02459,11.96126 27909,Nonnenhorn,3009,BY,82,DE,47.57386,9.61038 27913,Nordendorf,3009,BY,82,DE,48.59478,10.83183 27917,Nordhalben,3009,BY,82,DE,50.37411,11.50992 27920,Nordheim,3009,BY,82,DE,49.8587,10.18545 27946,Nördlingen,3009,BY,82,DE,48.85122,10.48868 27951,Nüdlingen,3009,BY,82,DE,50.22063,10.12296 27954,Nürnberg,3009,BY,82,DE,49.45421,11.07752 27942,Nußdorf,3009,BY,82,DE,47.90564,12.59608 27943,Nußdorf am Inn,3009,BY,82,DE,47.74232,12.15611 27962,Oberammergau,3009,BY,82,DE,47.59812,11.06692 27963,Oberasbach,3009,BY,82,DE,49.42275,10.95766 27964,Oberaudorf,3009,BY,82,DE,47.64822,12.17242 27966,Oberbergkirchen,3009,BY,82,DE,48.3,12.38333 27970,Oberdachstetten,3009,BY,82,DE,49.41667,10.43333 27972,Oberding,3009,BY,82,DE,48.31667,11.85 27976,Oberelsbach,3009,BY,82,DE,50.44118,10.11692 27978,Obergriesbach,3009,BY,82,DE,48.42305,11.0685 27980,Obergünzburg,3009,BY,82,DE,47.84545,10.41821 27981,Oberhaching,3009,BY,82,DE,48.02455,11.59744 27982,Oberhaid,3009,BY,82,DE,50.12614,11.80514 27984,Oberhausen,3009,BY,82,DE,48.72201,11.11151 27991,Oberkotzau,3009,BY,82,DE,50.26236,11.93484 27992,Oberleichtersbach,3009,BY,82,DE,50.28333,9.8 27998,Obermeitingen,3009,BY,82,DE,48.14685,10.80626 27999,Obermichelbach,3009,BY,82,DE,49.53117,10.90891 28002,Obernbreit,3009,BY,82,DE,49.65863,10.16424 28003,Obernburg am Main,3009,BY,82,DE,49.83577,9.13101 28006,Oberndorf,3009,BY,82,DE,48.66918,10.86749 28011,Obernzell,3009,BY,82,DE,48.55485,13.63729 28012,Obernzenn,3009,BY,82,DE,49.45193,10.4667 28013,Oberostendorf,3009,BY,82,DE,47.9436,10.7427 28015,Oberottmarshausen,3009,BY,82,DE,48.23716,10.85754 28016,Oberpframmern,3009,BY,82,DE,48.02202,11.81331 28017,Oberpleichfeld,3009,BY,82,DE,49.87694,10.08682 28018,Oberpöring,3009,BY,82,DE,48.70178,12.82482 28019,Oberreichenbach,3009,BY,82,DE,49.58946,10.76892 28021,Oberreute,3009,BY,82,DE,47.56303,9.94449 28023,Oberrieden,3009,BY,82,DE,48.08886,10.42611 28028,Oberscheinfeld,3009,BY,82,DE,49.70829,10.43418 28029,Oberschleißheim,3009,BY,82,DE,48.25,11.56667 28030,Oberschneiding,3009,BY,82,DE,48.79573,12.642 28031,Oberschwarzach,3009,BY,82,DE,49.86051,10.40999 28032,Oberschweinbach,3009,BY,82,DE,48.23817,11.15571 28035,Obersinn,3009,BY,82,DE,50.20875,9.61545 28042,Obersöchering,3009,BY,82,DE,47.73333,11.21667 28038,Oberstaufen,3009,BY,82,DE,47.55568,10.02245 28039,Oberstdorf,3009,BY,82,DE,47.40724,10.27939 28041,Oberstreu,3009,BY,82,DE,50.40338,10.28775 28043,Obersüßbach,3009,BY,82,DE,48.61667,11.95 28044,Obertaufkirchen,3009,BY,82,DE,48.26046,12.27904 28047,Oberthulba,3009,BY,82,DE,50.19904,9.95882 28048,Obertraubling,3009,BY,82,DE,48.96667,12.16667 28049,Obertrubach,3009,BY,82,DE,49.7,11.35 28052,Oberviechtach,3009,BY,82,DE,49.45809,12.41669 28059,Obing,3009,BY,82,DE,48.00049,12.40528 28062,Ochsenfurt,3009,BY,82,DE,49.66429,10.06227 28068,Odelzhausen,3009,BY,82,DE,48.30889,11.19889 28081,Oerlenbach,3009,BY,82,DE,50.15,10.13333 28083,Oettingen in Bayern,3009,BY,82,DE,48.95274,10.60465 28089,Offenberg,3009,BY,82,DE,48.86195,12.86293 28091,Offenhausen,3009,BY,82,DE,49.44971,11.41316 28092,Offingen,3009,BY,82,DE,48.48258,10.36249 28095,Ofterschwang,3009,BY,82,DE,47.5,10.23333 28099,Ohlstadt,3009,BY,82,DE,47.63333,11.23333 28104,Olching,3009,BY,82,DE,48.2,11.33333 28115,Opfenbach,3009,BY,82,DE,47.63333,9.83333 28127,Ornbau,3009,BY,82,DE,49.17623,10.65797 28132,Ortenburg,3009,BY,82,DE,48.54597,13.2225 28152,Osterhofen,3009,BY,82,DE,48.7,13.02221 28162,Ostheim vor der Rhön,3009,BY,82,DE,50.45996,10.23057 28179,Ottenhofen,3009,BY,82,DE,48.21667,11.88333 28182,Ottensoos,3009,BY,82,DE,49.50949,11.34158 28187,Otterfing,3009,BY,82,DE,47.90898,11.67546 28194,Ottobeuren,3009,BY,82,DE,47.9413,10.29971 28195,Ottobrunn,3009,BY,82,DE,48.06489,11.66327 28198,Otzing,3009,BY,82,DE,48.76134,12.80877 28204,Oy-Mittelberg,3009,BY,82,DE,47.63333,10.43333 28412,Pähl,3009,BY,82,DE,47.9,11.18333 28211,Painten,3009,BY,82,DE,48.99731,11.81947 28212,Palling,3009,BY,82,DE,48.00204,12.63702 28220,Pappenheim,3009,BY,82,DE,48.93383,10.97431 28223,Parkstein,3009,BY,82,DE,49.72921,12.06755 28224,Parkstetten,3009,BY,82,DE,48.91667,12.6 28226,Parsberg,3009,BY,82,DE,49.16074,11.71834 28228,Partenstein,3009,BY,82,DE,50.04176,9.51991 28230,Pasing,3009,BY,82,DE,48.14146,11.45599 28231,Passau,3009,BY,82,DE,48.5665,13.43122 28232,Pastetten,3009,BY,82,DE,48.19911,11.94368 28233,Patersdorf,3009,BY,82,DE,49.01667,12.98333 28237,Paunzhausen,3009,BY,82,DE,48.47486,11.56463 28239,Pechbrunn,3009,BY,82,DE,49.96667,12.16667 28241,Pegnitz,3009,BY,82,DE,49.75216,11.54187 28246,Peißenberg,3009,BY,82,DE,47.80466,11.0699 28243,Peiting,3009,BY,82,DE,47.79549,10.92951 28250,Pemfling,3009,BY,82,DE,49.26667,12.61667 28254,Pentling,3009,BY,82,DE,48.98343,12.0587 28255,Penzberg,3009,BY,82,DE,47.75293,11.377 28256,Penzing,3009,BY,82,DE,48.07481,10.92745 28258,Perach,3009,BY,82,DE,48.26667,12.76667 28259,Perkam,3009,BY,82,DE,48.85528,12.43979 28261,Perlesreut,3009,BY,82,DE,48.78181,13.4384 28262,Petersaurach,3009,BY,82,DE,49.3,10.75 28263,Petersdorf,3009,BY,82,DE,48.51667,11.03333 28266,Petershausen,3009,BY,82,DE,48.40967,11.47056 28267,Pettendorf,3009,BY,82,DE,49.35475,12.35926 28268,Petting,3009,BY,82,DE,47.91232,12.81512 28269,Pettstadt,3009,BY,82,DE,49.82996,10.92839 28271,Pfaffenhausen,3009,BY,82,DE,48.11878,10.45504 28273,Pfaffenhofen,3009,BY,82,DE,48.39334,11.20563 28274,Pfaffenhofen an der Ilm,3009,BY,82,DE,48.53053,11.505 28275,Pfaffenhofen an der Roth,3009,BY,82,DE,48.35454,10.16184 28277,Pfaffing,3009,BY,82,DE,48.05456,12.10917 28279,Pfakofen,3009,BY,82,DE,48.85822,12.22744 28281,Pfarrkirchen,3009,BY,82,DE,48.43205,12.93812 28282,Pfarrweisach,3009,BY,82,DE,50.15,10.73333 28283,Pfatter,3009,BY,82,DE,48.96309,12.38254 28286,Pfeffenhausen,3009,BY,82,DE,48.66466,11.96594 28287,Pfofeld,3009,BY,82,DE,49.1059,10.83664 28288,Pforzen,3009,BY,82,DE,47.92997,10.61357 28290,Pfreimd,3009,BY,82,DE,49.49114,12.18069 28292,Pfronten,3009,BY,82,DE,47.5822,10.54962 28298,Piding,3009,BY,82,DE,47.76667,12.91667 28299,Pielenhofen,3009,BY,82,DE,49.07235,11.95699 28302,Pilsach,3009,BY,82,DE,49.32137,11.50311 28303,Pilsting,3009,BY,82,DE,48.70116,12.65105 28306,Pinzberg,3009,BY,82,DE,49.68971,11.10207 28307,Pirk,3009,BY,82,DE,49.63333,12.16667 28310,Pittenhart,3009,BY,82,DE,47.97724,12.38997 28312,Planegg,3009,BY,82,DE,48.10672,11.42483 28316,Plattling,3009,BY,82,DE,48.77866,12.87509 28321,Pleinfeld,3009,BY,82,DE,49.10473,10.98194 28322,Pleiskirchen,3009,BY,82,DE,48.30713,12.59832 28325,Pleystein,3009,BY,82,DE,49.64907,12.40631 28326,Pliening,3009,BY,82,DE,48.19556,11.80069 28334,Plößberg,3009,BY,82,DE,49.91977,11.86883 28338,Pocking,3009,BY,82,DE,48.40149,13.31315 28340,Poing,3009,BY,82,DE,48.17004,11.81863 28346,Polling,3009,BY,82,DE,48.21667,12.56667 28347,Polsingen,3009,BY,82,DE,48.92067,10.7115 28348,Pommelsbrunn,3009,BY,82,DE,49.50437,11.51101 28349,Pommersfelden,3009,BY,82,DE,49.76667,10.81667 28352,Poppenhausen,3009,BY,82,DE,50.09999,10.14244 28354,Poppenricht,3009,BY,82,DE,49.47557,11.79778 28418,Pörnbach,3009,BY,82,DE,48.61667,11.46667 28359,Postau,3009,BY,82,DE,48.65,12.33333 28360,Postbauer-Heng,3009,BY,82,DE,49.30528,11.35722 28361,Postmünster,3009,BY,82,DE,48.41667,12.9 28363,Pottenstein,3009,BY,82,DE,49.77131,11.40784 28419,Pöttmes,3009,BY,82,DE,48.58383,11.08762 28366,Poxdorf,3009,BY,82,DE,49.93642,11.12211 28368,Prackenbach,3009,BY,82,DE,49.09543,12.82614 28370,Prebitz,3009,BY,82,DE,49.83333,11.68333 28376,Pressath,3009,BY,82,DE,49.76859,11.93972 28377,Presseck,3009,BY,82,DE,50.22804,11.55508 28378,Pressig,3009,BY,82,DE,50.35245,11.30969 28380,Pretzfeld,3009,BY,82,DE,49.75454,11.1743 28385,Prichsenstadt,3009,BY,82,DE,49.81933,10.34773 28386,Prien am Chiemsee,3009,BY,82,DE,47.85602,12.34623 28387,Priesendorf,3009,BY,82,DE,49.9075,10.71183 28391,Prittriching,3009,BY,82,DE,48.20074,10.92801 28397,Prosselsheim,3009,BY,82,DE,49.86309,10.12666 28398,Prutting,3009,BY,82,DE,47.89321,12.20238 28421,Püchersreuth,3009,BY,82,DE,49.75,12.23333 28401,Puchheim,3009,BY,82,DE,48.15,11.35 28404,Pullach im Isartal,3009,BY,82,DE,48.06122,11.52148 28405,Pullenreuth,3009,BY,82,DE,49.93333,12.0 28422,Pürgen,3009,BY,82,DE,48.02472,10.92213 28406,Puschendorf,3009,BY,82,DE,49.52398,10.83192 28410,Putzbrunn,3009,BY,82,DE,48.07579,11.71572 28411,Pyrbaum,3009,BY,82,DE,49.29622,11.28655 28453,Rain,3009,BY,82,DE,48.69029,10.91611 28455,Raisting,3009,BY,82,DE,47.91667,11.1 28456,Raitenbuch,3009,BY,82,DE,49.01468,11.12486 28460,Ramerberg,3009,BY,82,DE,48.01806,12.14513 28464,Ramsau,3009,BY,82,DE,48.17277,12.22957 28468,Ramsthal,3009,BY,82,DE,50.14039,10.06777 28469,Randersacker,3009,BY,82,DE,49.76021,9.98277 28473,Rannungen,3009,BY,82,DE,50.16537,10.20484 28488,Rattelsdorf,3009,BY,82,DE,50.01502,10.88857 28489,Rattenberg,3009,BY,82,DE,49.08612,12.74912 28490,Rattiszell,3009,BY,82,DE,49.02573,12.65924 28493,Raubling,3009,BY,82,DE,47.7905,12.11088 28503,Rechtenbach,3009,BY,82,DE,49.98306,9.50833 28504,Rechtmehring,3009,BY,82,DE,48.11667,12.16667 28508,Rednitzhembach,3009,BY,82,DE,49.30095,11.07997 28509,Redwitz an der Rodach,3009,BY,82,DE,50.17323,11.20833 28512,Regen,3009,BY,82,DE,48.9719,13.12824 28513,Regensburg,3009,BY,82,DE,49.01513,12.10161 28514,Regenstauf,3009,BY,82,DE,49.12014,12.13027 28522,Regierungsbezirk Mittelfranken,3009,BY,82,DE,49.33333,10.83333 28525,Regierungsbezirk Unterfranken,3009,BY,82,DE,50.0,10.0 28527,Regnitzlosau,3009,BY,82,DE,50.3,12.05 28528,Rehau,3009,BY,82,DE,50.24921,12.03422 28533,Rehling,3009,BY,82,DE,48.48333,10.93333 28539,Reichenbach,3009,BY,82,DE,49.18333,12.35 28544,Reichenberg,3009,BY,82,DE,49.73193,9.91478 28545,Reichenschwand,3009,BY,82,DE,49.51384,11.37274 28547,Reichersbeuern,3009,BY,82,DE,47.76667,11.63333 28548,Reichertshausen,3009,BY,82,DE,47.89882,11.55843 28549,Reichertsheim,3009,BY,82,DE,48.2,12.28333 28550,Reichertshofen,3009,BY,82,DE,48.65775,11.46612 28551,Reichling,3009,BY,82,DE,47.9228,10.92847 28554,Reimlingen,3009,BY,82,DE,48.81667,10.51667 28560,Reinhausen,3009,BY,82,DE,49.03092,12.11329 28567,Reisbach,3009,BY,82,DE,48.57008,12.62799 28568,Reischach,3009,BY,82,DE,48.29073,12.7262 28570,Reit im Winkl,3009,BY,82,DE,47.67729,12.47086 28574,Remlingen,3009,BY,82,DE,49.80477,9.69484 28582,Rennertshofen,3009,BY,82,DE,48.75943,11.04544 28584,Rentweinsdorf,3009,BY,82,DE,50.06342,10.79922 28590,Rettenbach,3009,BY,82,DE,49.06667,12.45 28591,Rettenberg,3009,BY,82,DE,47.57428,10.29173 28592,Retzstadt,3009,BY,82,DE,49.9125,9.88194 28593,Reut,3009,BY,82,DE,48.5917,13.12332 28595,Reuth,3009,BY,82,DE,49.99052,11.6948 28626,Ried,3009,BY,82,DE,48.47698,11.2606 28629,Rieden,3009,BY,82,DE,49.32361,11.94205 28630,Rieden an der Kötz,3009,BY,82,DE,48.38499,10.25711 28631,Riedenberg,3009,BY,82,DE,50.31993,9.861 28632,Riedenburg,3009,BY,82,DE,48.96383,11.6888 28635,Riedering,3009,BY,82,DE,47.83874,12.20778 28640,Riegsee,3009,BY,82,DE,47.69867,11.23391 28643,Rieneck,3009,BY,82,DE,50.09349,9.64797 28656,Rimbach,3009,BY,82,DE,49.23333,12.88333 28657,Rimpar,3009,BY,82,DE,49.85692,9.95705 28659,Rimsting,3009,BY,82,DE,47.88078,12.33713 28660,Rinchnach,3009,BY,82,DE,48.94956,13.20102 28661,Ringelai,3009,BY,82,DE,48.81336,13.4713 28776,Rödelsee,3009,BY,82,DE,49.7284,10.2436 28674,Roden,3009,BY,82,DE,49.89556,9.62639 28777,Rödental,3009,BY,82,DE,50.29516,11.04122 28680,Roding,3009,BY,82,DE,49.19426,12.51956 28780,Röfingen,3009,BY,82,DE,48.42442,10.44268 28683,Roggenburg,3009,BY,82,DE,48.27588,10.23136 28687,Rohr,3009,BY,82,DE,48.76768,11.97152 28689,Rohrbach,3009,BY,82,DE,48.28933,12.55603 28691,Rohrdorf,3009,BY,82,DE,47.79713,12.1701 28693,Rohrenfels,3009,BY,82,DE,48.68654,11.15619 28781,Röhrmoos,3009,BY,82,DE,48.32966,11.44672 28782,Röhrnbach,3009,BY,82,DE,48.73859,13.52271 28784,Röllbach,3009,BY,82,DE,49.77306,9.24611 28700,Ronsberg,3009,BY,82,DE,47.8958,10.41571 28707,Rosenheim,3009,BY,82,DE,47.85637,12.12247 28786,Röslau,3009,BY,82,DE,50.08333,11.98333 28714,Rossbach,3009,BY,82,DE,48.58333,12.95 28742,Roßhaupten,3009,BY,82,DE,48.42943,10.46911 28746,Roßtal,3009,BY,82,DE,49.39567,10.88848 28720,Roth,3009,BY,82,DE,49.24762,11.09111 28790,Röthenbach,3009,BY,82,DE,47.62303,9.97387 28791,Röthenbach an der Pegnitz,3009,BY,82,DE,49.48301,11.24116 28723,Rothenbuch,3009,BY,82,DE,49.96528,9.39389 28725,Rothenburg ob der Tauber,3009,BY,82,DE,49.37885,10.18711 28727,Rothenfels,3009,BY,82,DE,49.89135,9.5926 28792,Röthlein,3009,BY,82,DE,49.98333,10.21667 28729,Rott,3009,BY,82,DE,47.92008,12.08771 28730,Rottach-Egern,3009,BY,82,DE,47.68966,11.77065 28793,Röttenbach,3009,BY,82,DE,49.66429,10.92607 28733,Rottenbuch,3009,BY,82,DE,47.73333,10.96667 28735,Rottenburg an der Laaber,3009,BY,82,DE,48.70233,12.02717 28736,Rottendorf,3009,BY,82,DE,49.7923,10.02593 28737,Rotthalmünster,3009,BY,82,DE,48.35825,13.20162 28794,Röttingen,3009,BY,82,DE,49.50969,9.97082 28795,Rötz,3009,BY,82,DE,49.34316,12.52963 28798,Rückersdorf,3009,BY,82,DE,49.49757,11.24751 28748,Rudelzhausen,3009,BY,82,DE,48.6,11.76667 28749,Ruderatshofen,3009,BY,82,DE,47.81667,10.58333 28751,Ruderting,3009,BY,82,DE,48.65,13.41667 28754,Rugendorf,3009,BY,82,DE,50.2,11.46667 28803,Rügland,3009,BY,82,DE,49.4,10.58333 28757,Ruhmannsfelden,3009,BY,82,DE,48.98327,12.98347 28758,Ruhpolding,3009,BY,82,DE,47.76667,12.65 28759,Ruhstorf,3009,BY,82,DE,48.53976,12.68305 28763,Runding,3009,BY,82,DE,49.21513,12.76208 28812,Saal,3009,BY,82,DE,48.90099,11.93196 28813,Saal an der Saale,3009,BY,82,DE,50.31673,10.35769 28821,Sachsen,3009,BY,82,DE,49.28999,10.65971 28825,Sachsenkam,3009,BY,82,DE,47.80543,11.64396 28829,Sailauf,3009,BY,82,DE,50.02461,9.25932 28831,Salching,3009,BY,82,DE,48.81047,12.57043 28832,Saldenburg,3009,BY,82,DE,48.7731,13.35586 28834,Salgen,3009,BY,82,DE,48.13069,10.4789 28837,Salz,3009,BY,82,DE,50.30842,10.21205 28845,Salzweg,3009,BY,82,DE,48.61667,13.48333 28846,Samerberg,3009,BY,82,DE,47.77654,12.19139 28849,Sand,3009,BY,82,DE,49.98585,10.5862 28851,Sandberg,3009,BY,82,DE,50.34824,10.00814 28864,Sankt Englmar,3009,BY,82,DE,49.00298,12.82658 28875,Sankt Leonhard am Wonneberg,3009,BY,82,DE,47.91533,12.71926 28884,Sankt Wolfgang,3009,BY,82,DE,48.21667,12.13333 28895,Sauerlach,3009,BY,82,DE,47.97171,11.65383 28898,Saulgrub,3009,BY,82,DE,47.66643,11.02469 29098,Schäftlarn,3009,BY,82,DE,47.99027,11.45591 28914,Schauenstein,3009,BY,82,DE,50.27826,11.74169 28915,Schaufling,3009,BY,82,DE,48.85,13.06667 28916,Schechen,3009,BY,82,DE,47.92911,12.12393 28922,Scheidegg,3009,BY,82,DE,47.58141,9.84829 28923,Scheinfeld,3009,BY,82,DE,49.66931,10.46554 28935,Scherstetten,3009,BY,82,DE,48.18032,10.64005 28939,Scheßlitz,3009,BY,82,DE,49.97568,11.03299 28937,Scheuring,3009,BY,82,DE,48.16769,10.89569 28938,Scheyern,3009,BY,82,DE,48.5,11.46667 28941,Schierling,3009,BY,82,DE,48.83422,12.13946 28948,Schillingsfürst,3009,BY,82,DE,49.28775,10.26276 28950,Schiltberg,3009,BY,82,DE,48.46293,11.24876 28953,Schirmitz,3009,BY,82,DE,49.65,12.16667 28954,Schirnding,3009,BY,82,DE,50.08205,12.22742 28965,Schleching,3009,BY,82,DE,47.72098,12.39481 28967,Schlehdorf,3009,BY,82,DE,47.65795,11.31494 28979,Schliersee,3009,BY,82,DE,47.73621,11.85936 28985,Schlüsselfeld,3009,BY,82,DE,49.75621,10.61873 28991,Schmidgaden,3009,BY,82,DE,49.4234,12.09247 28992,Schmidmühlen,3009,BY,82,DE,49.26898,11.92429 28993,Schmiechen,3009,BY,82,DE,48.21667,10.96667 29000,Schnaitsee,3009,BY,82,DE,48.06667,12.36667 29001,Schnaittach,3009,BY,82,DE,49.55958,11.34328 29002,Schnaittenbach,3009,BY,82,DE,49.54692,12.00184 29003,Schneckenlohe,3009,BY,82,DE,50.21184,11.19395 29007,Schneizlreuth,3009,BY,82,DE,47.68333,12.8 29008,Schnelldorf,3009,BY,82,DE,49.2,10.18333 29100,Schöfweg,3009,BY,82,DE,48.83882,13.22861 29101,Schöllkrippen,3009,BY,82,DE,50.08545,9.24697 29102,Schöllnach,3009,BY,82,DE,48.75412,13.17781 29105,Schönau,3009,BY,82,DE,48.48333,12.85 29107,Schönau am Königssee,3009,BY,82,DE,47.60055,12.98704 29014,Schondorf am Ammersee,3009,BY,82,DE,48.05296,11.09138 29015,Schondra,3009,BY,82,DE,50.26814,9.86277 29016,Schongau,3009,BY,82,DE,47.8124,10.89664 29124,Schöngeising,3009,BY,82,DE,48.14135,11.20399 29129,Schönsee,3009,BY,82,DE,49.5103,12.54763 29017,Schonstett,3009,BY,82,DE,47.98333,12.25 29131,Schönthal,3009,BY,82,DE,49.35,12.6 29018,Schonungen,3009,BY,82,DE,50.05008,10.30809 29132,Schönwald,3009,BY,82,DE,50.1997,12.08503 29020,Schopfloch,3009,BY,82,DE,49.11917,10.30774 29023,Schorndorf,3009,BY,82,DE,49.16041,12.59316 29032,Schrobenhausen,3009,BY,82,DE,48.56067,11.26071 29039,Schwabach,3009,BY,82,DE,49.33047,11.02346 29041,Schwabhausen,3009,BY,82,DE,48.40157,11.35729 29042,Schwabmünchen,3009,BY,82,DE,48.17928,10.75675 29043,Schwabsoien,3009,BY,82,DE,47.83333,10.83333 29046,Schwaig,3009,BY,82,DE,49.46955,11.20064 29057,Schwandorf in Bayern,3009,BY,82,DE,49.32534,12.1098 29060,Schwanfeld,3009,BY,82,DE,49.92166,10.13866 29061,Schwangau,3009,BY,82,DE,47.57722,10.73416 29066,Schwarzach,3009,BY,82,DE,48.91567,12.81143 29067,Schwarzenbach,3009,BY,82,DE,49.83876,12.38005 29068,Schwarzenbach an der Saale,3009,BY,82,DE,50.22279,11.93504 29072,Schwarzenbruck,3009,BY,82,DE,49.35778,11.24333 29073,Schwarzenfeld,3009,BY,82,DE,49.38774,12.13484 29075,Schwarzhofen,3009,BY,82,DE,49.37749,12.3449 29076,Schwebheim,3009,BY,82,DE,49.99036,10.24776 29083,Schweinfurt,3009,BY,82,DE,50.04937,10.22175 29084,Schweitenkirchen,3009,BY,82,DE,48.50333,11.60451 29087,Schwenningen,3009,BY,82,DE,48.65,10.65 29094,Schwindegg,3009,BY,82,DE,48.27155,12.25978 29150,Seefeld,3009,BY,82,DE,48.03505,11.21395 29151,Seeg,3009,BY,82,DE,47.65,10.6 29153,Seehausen am Staffelsee,3009,BY,82,DE,47.68928,11.18498 29162,Seeon-Seebruck,3009,BY,82,DE,47.96667,12.46667 29164,Seeshaupt,3009,BY,82,DE,47.82468,11.30219 29174,Seinsheim,3009,BY,82,DE,49.64073,10.22038 29176,Selb,3009,BY,82,DE,50.17058,12.13054 29177,Selbitz,3009,BY,82,DE,50.31702,11.75019 29188,Senden,3009,BY,82,DE,48.32441,10.04442 29192,Sengenthal,3009,BY,82,DE,49.23333,11.46667 29194,Sennfeld,3009,BY,82,DE,50.03895,10.25986 29204,Seßlach,3009,BY,82,DE,50.18969,10.84197 29198,Seubersdorf,3009,BY,82,DE,49.16212,11.62714 29199,Seukendorf,3009,BY,82,DE,49.48844,10.87999 29202,Seybothenreuth,3009,BY,82,DE,49.89372,11.70531 29214,Siegenburg,3009,BY,82,DE,48.75421,11.84831 29215,Siegsdorf,3009,BY,82,DE,47.82278,12.64277 29217,Sielenbach,3009,BY,82,DE,48.4,11.16667 29228,Sigmarszell,3009,BY,82,DE,47.58333,9.76667 29231,Simbach,3009,BY,82,DE,48.56606,12.73888 29232,Simbach am Inn,3009,BY,82,DE,48.26548,13.02309 29233,Simmelsdorf,3009,BY,82,DE,49.59775,11.33901 29240,Sindelsdorf,3009,BY,82,DE,47.72458,11.33295 29248,Sinzing,3009,BY,82,DE,49.0,12.03333 29489,Söchtenau,3009,BY,82,DE,47.93118,12.22959 29261,Solnhofen,3009,BY,82,DE,48.89582,10.9956 29264,Sommerach,3009,BY,82,DE,49.82923,10.20792 29265,Sommerhausen,3009,BY,82,DE,49.70361,10.02605 29266,Sommerkahl,3009,BY,82,DE,50.06961,9.25676 29269,Sondheim vor der Rhön,3009,BY,82,DE,50.4651,10.15675 29272,Sonnefeld,3009,BY,82,DE,50.21667,11.13333 29273,Sonnen,3009,BY,82,DE,48.68333,13.71667 29276,Sontheim,3009,BY,82,DE,48.00704,10.35461 29278,Sonthofen,3009,BY,82,DE,47.51821,10.28262 29282,Soyen,3009,BY,82,DE,48.10808,12.21006 29285,Spalt,3009,BY,82,DE,49.17553,10.92453 29288,Spardorf,3009,BY,82,DE,49.60854,11.05585 29289,Sparneck,3009,BY,82,DE,50.16214,11.84349 29293,Speichersdorf,3009,BY,82,DE,49.87133,11.78123 29294,Speinshart,3009,BY,82,DE,49.79002,11.81949 29300,Spiegelau,3009,BY,82,DE,48.91517,13.36229 29316,Stadelhofen,3009,BY,82,DE,50.00317,11.19757 29320,Stadtbergen,3009,BY,82,DE,48.36641,10.84636 29324,Stadtlauringen,3009,BY,82,DE,50.18708,10.36164 29328,Stadtprozelten,3009,BY,82,DE,49.78466,9.41184 29331,Stadtsteinach,3009,BY,82,DE,50.16433,11.50349 29335,Stallwang,3009,BY,82,DE,48.55838,12.23108 29336,Stammbach,3009,BY,82,DE,50.14551,11.69129 29337,Stammham,3009,BY,82,DE,48.29604,11.86961 29338,Stamsried,3009,BY,82,DE,49.26755,12.53051 29341,Starnberg,3009,BY,82,DE,48.00193,11.34416 29343,Staudach-Egerndach,3009,BY,82,DE,47.78333,12.48333 29351,Stegaurach,3009,BY,82,DE,49.86543,10.84385 29357,Stein,3009,BY,82,DE,49.41581,11.01599 29359,Steinach,3009,BY,82,DE,48.95417,12.60709 29364,Steinbach,3009,BY,82,DE,50.15328,11.65055 29371,Steinfeld,3009,BY,82,DE,49.95278,9.66944 29375,Steingaden,3009,BY,82,DE,47.7,10.86667 29380,Steinheim,3009,BY,82,DE,48.01473,10.16081 29385,Steinhöring,3009,BY,82,DE,48.08679,12.0314 29388,Steinkirchen,3009,BY,82,DE,48.38333,12.08333 29390,Steinsfeld,3009,BY,82,DE,49.41667,10.21667 29393,Steinwiesen,3009,BY,82,DE,50.29444,11.46295 29399,Stephanskirchen,3009,BY,82,DE,47.85389,12.1856 29400,Stephansposching,3009,BY,82,DE,48.81667,12.8 29404,Stetten,3009,BY,82,DE,48.02382,10.44474 29406,Stettfeld,3009,BY,82,DE,49.9709,10.7217 29408,Stiefenhofen,3009,BY,82,DE,47.5932,10.00365 29412,Stockheim,3009,BY,82,DE,50.30639,11.28172 29413,Stockstadt am Main,3009,BY,82,DE,49.97005,9.07153 29451,Störnstein,3009,BY,82,DE,49.73232,12.20547 29452,Stötten am Auerberg,3009,BY,82,DE,47.73871,10.68881 29453,Stöttwang,3009,BY,82,DE,47.88333,10.71667 29433,Straßkirchen,3009,BY,82,DE,48.83071,12.72105 29434,Straßlach-Dingharting,3009,BY,82,DE,48.00491,11.5141 29428,Straubing,3009,BY,82,DE,48.88126,12.57385 29437,Strullendorf,3009,BY,82,DE,49.84429,10.97208 29441,Stubenberg,3009,BY,82,DE,48.31667,13.08333 29443,Stulln,3009,BY,82,DE,49.41667,12.13333 29461,Sugenheim,3009,BY,82,DE,49.60276,10.43563 29469,Sulzbach am Main,3009,BY,82,DE,49.91149,9.15315 29471,Sulzbach-Rosenberg,3009,BY,82,DE,49.50126,11.74598 29472,Sulzberg,3009,BY,82,DE,47.66033,10.34991 29474,Sulzdorf,3009,BY,82,DE,49.65002,9.90389 29475,Sulzemoos,3009,BY,82,DE,48.29107,11.26356 29476,Sulzfeld,3009,BY,82,DE,50.25972,10.40525 29478,Sulzfeld am Main,3009,BY,82,DE,49.70694,10.13248 29479,Sulzheim,3009,BY,82,DE,49.95,10.33333 29504,Sünching,3009,BY,82,DE,48.87855,12.35129 29482,Surberg,3009,BY,82,DE,47.86667,12.7 29485,Swabia,3009,BY,82,DE,48.33333,10.5 29511,Tacherting,3009,BY,82,DE,48.07825,12.57008 29512,Taching am See,3009,BY,82,DE,47.95942,12.72933 29513,Tagmersheim,3009,BY,82,DE,48.81667,10.96667 29521,Tann,3009,BY,82,DE,48.31463,12.89301 29699,Tännesberg,3009,BY,82,DE,49.53182,12.32765 29527,Tapfheim,3009,BY,82,DE,48.67322,10.68377 29536,Taufkirchen,3009,BY,82,DE,48.0486,11.61701 29544,Tegernheim,3009,BY,82,DE,49.02394,12.17303 29545,Tegernsee,3009,BY,82,DE,47.7123,11.7582 29548,Teisendorf,3009,BY,82,DE,47.84921,12.81919 29549,Teising,3009,BY,82,DE,48.22721,12.61137 29550,Teisnach,3009,BY,82,DE,49.04114,12.98784 29563,Tettau,3009,BY,82,DE,50.46979,11.25888 29564,Tettenweis,3009,BY,82,DE,48.44281,13.26955 29566,Teublitz,3009,BY,82,DE,49.22289,12.08727 29569,Teugn,3009,BY,82,DE,48.89299,12.01175 29570,Teunz,3009,BY,82,DE,49.48333,12.38333 29572,Teuschnitz,3009,BY,82,DE,50.39839,11.38235 29581,Thalmassing,3009,BY,82,DE,48.91167,12.155 29583,Thannhausen,3009,BY,82,DE,48.28334,10.46917 29584,Thanstein,3009,BY,82,DE,49.38333,12.46667 29587,Theilheim,3009,BY,82,DE,49.75403,10.03056 29588,Theisseil,3009,BY,82,DE,49.69034,12.22744 29593,Thierhaupten,3009,BY,82,DE,48.56531,10.90862 29594,Thiersheim,3009,BY,82,DE,50.07609,12.1265 29595,Thierstein,3009,BY,82,DE,50.10643,12.10203 29601,Thundorf in Unterfranken,3009,BY,82,DE,50.20097,10.31906 29605,Thüngen,3009,BY,82,DE,49.9414,9.8586 29606,Thüngersheim,3009,BY,82,DE,49.87833,9.84917 29602,Thurmansbang,3009,BY,82,DE,48.76627,13.3155 29603,Thurnau,3009,BY,82,DE,50.02542,11.39348 29604,Thyrnau,3009,BY,82,DE,48.61667,13.53333 29609,Tiefenbach,3009,BY,82,DE,48.5,12.1 29618,Tirschenreuth,3009,BY,82,DE,49.88263,12.33112 29620,Tittling,3009,BY,82,DE,48.72619,13.38221 29621,Tittmoning,3009,BY,82,DE,48.06164,12.7676 29626,Todtenweis,3009,BY,82,DE,48.51712,10.92856 29700,Töging am Inn,3009,BY,82,DE,48.26018,12.5846 29703,Töpen,3009,BY,82,DE,50.39067,11.87329 29637,Trabitz,3009,BY,82,DE,49.8,11.9 29638,Train,3009,BY,82,DE,48.73333,11.83333 29639,Traitsching,3009,BY,82,DE,49.15,12.65 29641,Trappstadt,3009,BY,82,DE,50.3188,10.56995 29643,Traunreut,3009,BY,82,DE,47.96269,12.59231 29644,Traunstein,3009,BY,82,DE,47.86825,12.64335 29645,Trausnitz,3009,BY,82,DE,49.52114,12.26249 29646,Trautskirchen,3009,BY,82,DE,49.4581,10.59361 29650,Trebgast,3009,BY,82,DE,50.06667,11.55 29655,Treffelstein,3009,BY,82,DE,49.42246,12.61574 29661,Treuchtlingen,3009,BY,82,DE,48.95473,10.90833 29670,Triftern,3009,BY,82,DE,48.39468,13.00627 29677,Trogen,3009,BY,82,DE,50.36667,11.95 29686,Tröstau,3009,BY,82,DE,50.01667,11.95 29682,Trostberg an der Alz,3009,BY,82,DE,48.02802,12.55804 29684,Trunkelsberg,3009,BY,82,DE,48.0,10.21667 29689,Tuchenbach,3009,BY,82,DE,49.52794,10.85973 29691,Tuntenhausen,3009,BY,82,DE,47.93509,12.01518 29707,Türkenfeld,3009,BY,82,DE,48.10531,11.08303 29708,Türkheim,3009,BY,82,DE,48.06401,10.64156 29692,Tussenhausen,3009,BY,82,DE,48.10218,10.56069 29711,Tüßling,3009,BY,82,DE,48.21218,12.59954 29695,Tutzing,3009,BY,82,DE,47.90938,11.2803 29697,Tyrlaching,3009,BY,82,DE,48.06667,12.66667 30556,Übersee,3009,BY,82,DE,47.81667,12.48333 30557,Üchtelhausen,3009,BY,82,DE,50.09184,10.26861 29721,Uehlfeld,3009,BY,82,DE,49.67085,10.72017 29728,Uettingen,3009,BY,82,DE,49.79472,9.73056 29730,Uffenheim,3009,BY,82,DE,49.54415,10.23286 29731,Uffing,3009,BY,82,DE,47.71378,11.15034 29745,Ungerhausen,3009,BY,82,DE,48.00566,10.26672 29752,Unterammergau,3009,BY,82,DE,47.61658,11.02718 29755,Unterdießen,3009,BY,82,DE,47.98333,10.83333 29754,Unterdietfurt,3009,BY,82,DE,48.38333,12.66667 29756,Unteregg,3009,BY,82,DE,47.96667,10.46667 29759,Unterföhring,3009,BY,82,DE,48.19253,11.64293 29760,Untergriesbach,3009,BY,82,DE,48.57434,13.66725 29762,Unterhaching,3009,BY,82,DE,48.06598,11.61564 29767,Unterleinleiter,3009,BY,82,DE,49.82303,11.18906 29770,Untermeitingen,3009,BY,82,DE,48.16082,10.80694 29771,Untermerzbach,3009,BY,82,DE,50.12754,10.85634 29773,Unterneukirchen,3009,BY,82,DE,48.16667,12.61667 29774,Unterpleichfeld,3009,BY,82,DE,49.86886,10.04399 29776,Unterreit,3009,BY,82,DE,48.11667,12.33333 29777,Unterschleißheim,3009,BY,82,DE,48.28038,11.57684 29779,Untersiemau,3009,BY,82,DE,50.19415,10.97448 29780,Untersteinach,3009,BY,82,DE,50.13333,11.51667 29781,Unterthingau,3009,BY,82,DE,47.77155,10.50446 29783,Unterwössen,3009,BY,82,DE,47.73333,12.46667 29784,Untrasried,3009,BY,82,DE,47.83333,10.38333 29786,Upper Bavaria,3009,BY,82,DE,48.0,11.0 29787,Upper Franconia,3009,BY,82,DE,49.83333,11.33333 29788,Upper Palatinate,3009,BY,82,DE,49.5,12.0 29794,Ursberg,3009,BY,82,DE,48.26428,10.44594 29795,Ursensollen,3009,BY,82,DE,49.40204,11.75503 29796,Urspringen,3009,BY,82,DE,49.90166,9.67123 29800,Ustersbach,3009,BY,82,DE,48.31667,10.65 29803,Uttenreuth,3009,BY,82,DE,49.59675,11.07216 29805,Utting am Ammersee,3009,BY,82,DE,48.02608,11.08612 29808,Vachendorf,3009,BY,82,DE,47.84256,12.60606 29809,Vagen,3009,BY,82,DE,47.8741,11.88446 29812,Valley,3009,BY,82,DE,47.8931,11.77915 29815,Vaterstetten,3009,BY,82,DE,48.10537,11.76825 29821,Veitsbronn,3009,BY,82,DE,49.51239,10.88797 29822,Veitshöchheim,3009,BY,82,DE,49.83278,9.88167 29824,Velburg,3009,BY,82,DE,49.23212,11.6716 29825,Velden,3009,BY,82,DE,48.36632,12.25596 29838,Vestenbergsgreuth,3009,BY,82,DE,49.68764,10.65157 29842,Viechtach,3009,BY,82,DE,49.08001,12.88566 29845,Viereth-Trunstadt,3009,BY,82,DE,49.92222,10.77716 29846,Vierkirchen,3009,BY,82,DE,48.36667,11.46667 29850,Vilgertshofen,3009,BY,82,DE,47.95,10.91667 29851,Villenbach,3009,BY,82,DE,48.50887,10.61468 29855,Vilsbiburg,3009,BY,82,DE,48.45296,12.35604 29856,Vilseck,3009,BY,82,DE,49.6148,11.80261 29857,Vilsheim,3009,BY,82,DE,48.44882,12.10686 29858,Vilshofen,3009,BY,82,DE,48.62695,13.19222 29867,Vogtareuth,3009,BY,82,DE,47.94694,12.18126 29869,Vohburg an der Donau,3009,BY,82,DE,48.76977,11.61845 29870,Vohenstrauß,3009,BY,82,DE,49.62383,12.33808 29890,Vöhringen,3009,BY,82,DE,48.27839,10.08236 29872,Volkach,3009,BY,82,DE,49.86352,10.22813 29873,Volkenschwand,3009,BY,82,DE,48.6,11.88333 29880,Vorbach,3009,BY,82,DE,49.82136,11.73625 29882,Vorra,3009,BY,82,DE,49.55718,11.49419 29897,Waakirchen,3009,BY,82,DE,47.7725,11.67315 29898,Waal,3009,BY,82,DE,47.99679,10.77786 29902,Wachenroth,3009,BY,82,DE,49.75185,10.71335 29908,Wackersberg,3009,BY,82,DE,47.73333,11.55 29909,Wackersdorf,3009,BY,82,DE,49.31667,12.18333 29913,Waffenbrunn,3009,BY,82,DE,49.26667,12.66667 29917,Waging am See,3009,BY,82,DE,47.93414,12.73392 29924,Waidhaus,3009,BY,82,DE,49.64218,12.49523 29925,Waidhofen,3009,BY,82,DE,48.57681,11.33537 29927,Waigolshausen,3009,BY,82,DE,49.9643,10.12001 29929,Waischenfeld,3009,BY,82,DE,49.84645,11.3481 29931,Wald,3009,BY,82,DE,49.15,12.35 29935,Waldaschaff,3009,BY,82,DE,49.97528,9.30194 29937,Waldbrunn,3009,BY,82,DE,49.75861,9.80361 29942,Waldbüttelbrunn,3009,BY,82,DE,49.78833,9.84667 29948,Walderbach,3009,BY,82,DE,49.18333,12.38333 29949,Waldershof,3009,BY,82,DE,49.98144,12.06291 29956,Waldkirchen,3009,BY,82,DE,48.7327,13.60082 29957,Waldkraiburg,3009,BY,82,DE,48.20854,12.39893 29959,Waldmünchen,3009,BY,82,DE,49.37804,12.70905 29961,Waldsassen,3009,BY,82,DE,50.00167,12.30434 29966,Waldstetten,3009,BY,82,DE,48.34815,10.29385 29967,Waldthurn,3009,BY,82,DE,49.67221,12.32919 29970,Walkertshofen,3009,BY,82,DE,48.22613,10.58836 29975,Wallenfels,3009,BY,82,DE,50.2685,11.47058 29978,Wallerfing,3009,BY,82,DE,48.68416,12.88035 29979,Wallersdorf,3009,BY,82,DE,48.73767,12.74744 29980,Wallerstein,3009,BY,82,DE,48.88741,10.47591 29982,Wallgau,3009,BY,82,DE,47.51667,11.28333 29990,Walpertskirchen,3009,BY,82,DE,48.2584,11.97527 29992,Walsdorf,3009,BY,82,DE,49.86667,10.78333 29994,Waltenhofen,3009,BY,82,DE,47.67319,10.30703 30002,Wang,3009,BY,82,DE,48.49549,11.93641 30018,Warmensteinach,3009,BY,82,DE,49.99348,11.77866 30021,Warngau,3009,BY,82,DE,47.83217,11.72173 30024,Wartenberg,3009,BY,82,DE,48.40597,11.98865 30027,Wartmannsroth,3009,BY,82,DE,50.16667,9.78333 30032,Wasserburg,3009,BY,82,DE,48.44105,10.2693 30033,Wasserburg am Inn,3009,BY,82,DE,48.0525,12.22341 30036,Wasserlosen,3009,BY,82,DE,50.09476,10.03017 30037,Wassertrüdingen,3009,BY,82,DE,49.04328,10.59906 30044,Wechingen,3009,BY,82,DE,48.89229,10.61331 30058,Wegscheid,3009,BY,82,DE,48.60136,13.78733 30063,Wehringen,3009,BY,82,DE,48.25,10.8 30065,Weibersbrunn,3009,BY,82,DE,49.93083,9.36611 30066,Weichering,3009,BY,82,DE,48.71713,11.32141 30067,Weichs,3009,BY,82,DE,48.38333,11.41667 30069,Weiden,3009,BY,82,DE,49.67682,12.15613 30070,Weidenbach,3009,BY,82,DE,49.19817,10.64489 30073,Weidhausen bei Coburg,3009,BY,82,DE,50.20354,11.14006 30074,Weiding,3009,BY,82,DE,49.26282,12.76311 30075,Weigendorf,3009,BY,82,DE,49.49773,11.56869 30076,Weihenzell,3009,BY,82,DE,49.35,10.61667 30077,Weiherhammer,3009,BY,82,DE,49.63333,12.06667 30078,Weihmichl,3009,BY,82,DE,48.6,12.05 30080,Weil,3009,BY,82,DE,48.11717,10.92161 30084,Weilbach,3009,BY,82,DE,49.66812,9.21639 30087,Weiler-Simmerberg,3009,BY,82,DE,47.58261,9.91352 30089,Weilersbach,3009,BY,82,DE,49.75,11.11667 30091,Weilheim,3009,BY,82,DE,47.84147,11.15484 30095,Weiltingen,3009,BY,82,DE,49.03878,10.45052 30109,Weisendorf,3009,BY,82,DE,49.62283,10.82531 30111,Weismain,3009,BY,82,DE,50.08512,11.24024 30123,Weißdorf,3009,BY,82,DE,50.18333,11.85 30128,Weißenbrunn,3009,BY,82,DE,50.2,11.35 30129,Weißenburg in Bayern,3009,BY,82,DE,49.03095,10.97221 30131,Weißenhorn,3009,BY,82,DE,48.30501,10.16047 30132,Weißenohe,3009,BY,82,DE,49.63089,11.25369 30133,Weißensberg,3009,BY,82,DE,47.5813,9.72586 30136,Weißenstadt,3009,BY,82,DE,50.10217,11.88849 30119,Weitnau,3009,BY,82,DE,47.64171,10.12732 30120,Weitramsdorf,3009,BY,82,DE,50.256,10.87989 30141,Welden,3009,BY,82,DE,48.45505,10.66086 30151,Wemding,3009,BY,82,DE,48.87461,10.72452 30154,Wendelstein,3009,BY,82,DE,49.3523,11.15069 30161,Weng,3009,BY,82,DE,48.65866,12.36927 30164,Wenzenbach,3009,BY,82,DE,49.07561,12.19954 30179,Wernberg-Köblitz,3009,BY,82,DE,49.53931,12.1613 30181,Werneck,3009,BY,82,DE,49.98201,10.09884 30187,Wertach,3009,BY,82,DE,47.60301,10.40966 30190,Wertingen,3009,BY,82,DE,48.56314,10.68149 30235,Weßling,3009,BY,82,DE,48.07452,11.2482 30198,Wessobrunn,3009,BY,82,DE,47.87407,11.02461 30201,Westendorf,3009,BY,82,DE,47.93333,10.71667 30209,Westerheim,3009,BY,82,DE,48.01667,10.3 30220,Westheim,3009,BY,82,DE,49.0,10.66667 30229,Wetzendorf,3009,BY,82,DE,49.47056,11.04148 30232,Weyarn,3009,BY,82,DE,47.85838,11.79923 30241,Wiedergeltingen,3009,BY,82,DE,48.03946,10.67406 30253,Wiesau,3009,BY,82,DE,49.90817,12.18889 30255,Wiesen,3009,BY,82,DE,50.11667,9.36667 30259,Wiesenfelden,3009,BY,82,DE,49.04066,12.54008 30261,Wiesent,3009,BY,82,DE,49.01667,12.38333 30262,Wiesenthau,3009,BY,82,DE,49.71326,11.13564 30263,Wiesentheid,3009,BY,82,DE,49.79451,10.34509 30266,Wiesthal,3009,BY,82,DE,50.03333,9.43333 30271,Wiggensbach,3009,BY,82,DE,47.74781,10.22987 30272,Wilburgstetten,3009,BY,82,DE,49.02427,10.39505 30275,Wildenberg,3009,BY,82,DE,48.72981,11.89845 30279,Wildflecken,3009,BY,82,DE,50.37764,9.91092 30280,Wildpoldsried,3009,BY,82,DE,47.76667,10.4 30281,Wildsteig,3009,BY,82,DE,47.70145,10.93753 30284,Wilhelmsdorf,3009,BY,82,DE,49.56419,10.73716 30289,Wilhelmsthal,3009,BY,82,DE,50.31113,11.37278 30290,Wilhermsdorf,3009,BY,82,DE,49.48308,10.71555 30292,Willanzheim,3009,BY,82,DE,49.68011,10.23248 30297,Willmering,3009,BY,82,DE,49.25,12.66667 30310,Windach,3009,BY,82,DE,48.06667,11.03333 30311,Windberg,3009,BY,82,DE,48.94285,12.7462 30313,Windelsbach,3009,BY,82,DE,49.4,10.3 30318,Windischeschenbach,3009,BY,82,DE,49.80108,12.1571 30320,Windsbach,3009,BY,82,DE,49.24786,10.82651 30323,Winhöring,3009,BY,82,DE,48.26667,12.65 30324,Winkelhaid,3009,BY,82,DE,49.38963,11.29888 30325,Winklarn,3009,BY,82,DE,49.42688,12.47986 30332,Winterhausen,3009,BY,82,DE,49.70683,10.01661 30336,Winzer,3009,BY,82,DE,48.72285,13.07751 30337,Wipfeld,3009,BY,82,DE,49.91667,10.16667 30343,Wirsberg,3009,BY,82,DE,50.10572,11.60515 30348,Wittelshofen,3009,BY,82,DE,49.06121,10.48121 30360,Wittislingen,3009,BY,82,DE,48.61917,10.41722 30369,Witzmannsberg,3009,BY,82,DE,48.62224,13.49444 30379,Wolfersdorf,3009,BY,82,DE,48.47937,11.70949 30380,Wolferstadt,3009,BY,82,DE,48.90352,10.78129 30381,Wolfertschwenden,3009,BY,82,DE,47.8935,10.26715 30383,Wolframs-Eschenbach,3009,BY,82,DE,49.22675,10.72769 30384,Wolfratshausen,3009,BY,82,DE,47.91289,11.42166 30387,Wolfsegg,3009,BY,82,DE,49.10731,11.9781 30393,Wollbach,3009,BY,82,DE,50.36667,10.23333 30396,Wolnzach,3009,BY,82,DE,48.6038,11.62568 30402,Wonfurt,3009,BY,82,DE,50.01667,10.46667 30403,Wonsees,3009,BY,82,DE,49.97614,11.30047 30405,Woringen,3009,BY,82,DE,47.91667,10.2 30446,Wörth,3009,BY,82,DE,48.24531,11.90214 30447,Wörth am Main,3009,BY,82,DE,49.7972,9.15389 30449,Wörth an der Donau,3009,BY,82,DE,49.00093,12.40539 30450,Wörth an der Isar,3009,BY,82,DE,48.623,12.33944 30451,Wörthsee,3009,BY,82,DE,48.0725,11.20175 30453,Wülfershausen,3009,BY,82,DE,50.33201,10.34084 30418,Wunsiedel,3009,BY,82,DE,50.03923,12.00342 30421,Wurmannsquick,3009,BY,82,DE,48.35334,12.78603 30424,Wurmsham,3009,BY,82,DE,48.35,12.33333 30459,Würzburg,3009,BY,82,DE,49.79391,9.95121 30464,Zachenberg,3009,BY,82,DE,48.96667,13.0 30467,Zandt,3009,BY,82,DE,49.15,12.73333 30468,Zangberg,3009,BY,82,DE,48.2748,12.42311 30469,Zapfendorf,3009,BY,82,DE,50.01783,10.93243 30476,Zeil,3009,BY,82,DE,50.00986,10.5947 30477,Zeilarn,3009,BY,82,DE,48.30003,12.8426 30480,Zeitlarn,3009,BY,82,DE,49.07848,12.11174 30481,Zeitlofs,3009,BY,82,DE,50.26189,9.67243 30485,Zell am Main,3009,BY,82,DE,49.81214,9.86962 30486,Zell im Fichtelgebirge,3009,BY,82,DE,50.13532,11.82266 30490,Zellingen,3009,BY,82,DE,49.89737,9.81746 30493,Zenting,3009,BY,82,DE,48.79128,13.25968 30502,Ziemetshausen,3009,BY,82,DE,48.29244,10.53503 30504,Ziertheim,3009,BY,82,DE,48.65244,10.39882 30511,Zirndorf,3009,BY,82,DE,49.4424,10.95414 30513,Zolling,3009,BY,82,DE,48.45,11.76667 30515,Zorneding,3009,BY,82,DE,48.08433,11.82446 30528,Zusamaltheim,3009,BY,82,DE,48.53104,10.63562 30529,Zusmarshausen,3009,BY,82,DE,48.40014,10.59917 30536,Zwiesel,3009,BY,82,DE,49.01693,13.23765 23490,Adlershof,3010,BE,82,DE,52.43548,13.54825 23579,Alt-Hohenschönhausen,3010,BE,82,DE,52.54608,13.5013 23581,Alt-Treptow,3010,BE,82,DE,52.48863,13.4586 23621,Altglienicke,3010,BE,82,DE,52.41116,13.5355 23959,Baumschulenweg,3010,BE,82,DE,52.46583,13.48523 24053,Berlin,3010,BE,82,DE,52.52437,13.41053 24054,Berlin Köpenick,3010,BE,82,DE,52.44254,13.58228 24055,Berlin Treptow,3010,BE,82,DE,52.49376,13.44469 24111,Biesdorf,3010,BE,82,DE,52.50906,13.5534 24165,Blankenburg,3010,BE,82,DE,52.59293,13.45516 24167,Blankenfelde,3010,BE,82,DE,52.61863,13.39057 24217,Bohnsdorf,3010,BE,82,DE,52.39434,13.57339 24338,Britz,3010,BE,82,DE,52.44293,13.43388 24379,Buch,3010,BE,82,DE,52.6347,13.49679 24397,Buckow,3010,BE,82,DE,52.432,13.46018 24531,Charlottenburg,3010,BE,82,DE,52.51667,13.28333 24532,Charlottenburg-Nord,3010,BE,82,DE,52.53048,13.29371 24578,Dahlem,3010,BE,82,DE,52.4581,13.28702 25134,Falkenberg,3010,BE,82,DE,52.568,13.54597 25136,Falkenhagener Feld,3010,BE,82,DE,52.55191,13.16802 25163,Fennpfuhl,3010,BE,82,DE,52.52921,13.47267 25225,Französisch Buchholz,3010,BE,82,DE,52.60242,13.43019 25274,Friedenau,3010,BE,82,DE,52.47133,13.32813 25287,Friedrichsfelde,3010,BE,82,DE,52.50575,13.50812 25289,Friedrichshagen,3010,BE,82,DE,52.45052,13.62463 25290,Friedrichshain,3010,BE,82,DE,52.51559,13.45482 25305,Frohnau,3010,BE,82,DE,52.63336,13.29024 25376,Gatow,3010,BE,82,DE,52.48324,13.18285 25475,Gesundbrunnen,3010,BE,82,DE,52.55035,13.39139 25616,Gropiusstadt,3010,BE,82,DE,52.425,13.46667 25734,Grünau,3010,BE,82,DE,52.41642,13.58039 25719,Grunewald,3010,BE,82,DE,52.48338,13.26586 25841,Hakenfelde,3010,BE,82,DE,52.55877,13.20831 25848,Halensee,3010,BE,82,DE,52.49005,13.29602 25892,Hansaviertel,3010,BE,82,DE,52.51853,13.34178 25926,Haselhorst,3010,BE,82,DE,52.54409,13.23743 26000,Heiligensee,3010,BE,82,DE,52.61449,13.24501 26013,Heinersdorf,3010,BE,82,DE,52.57173,13.43757 26026,Hellersdorf,3010,BE,82,DE,52.53319,13.6088 26082,Hermsdorf,3010,BE,82,DE,52.61421,13.30587 26457,Johannisthal,3010,BE,82,DE,52.44653,13.5066 26517,Karlshorst,3010,BE,82,DE,52.48419,13.53185 26523,Karow,3010,BE,82,DE,52.60904,13.48117 26545,Kaulsdorf,3010,BE,82,DE,52.51732,13.58871 26655,Kladow,3010,BE,82,DE,52.45423,13.14445 26716,Konradshöhe,3010,BE,82,DE,52.58535,13.22758 26842,Köpenick,3010,BE,82,DE,52.4455,13.57455 26756,Kreuzberg,3010,BE,82,DE,52.49973,13.40338 26948,Lankwitz,3010,BE,82,DE,52.43623,13.3459 27078,Lichtenberg,3010,BE,82,DE,52.51395,13.49975 27082,Lichtenrade,3010,BE,82,DE,52.39844,13.40637 27085,Lichterfelde,3010,BE,82,DE,52.4333,13.30762 27201,Lübars,3010,BE,82,DE,52.61591,13.3535 27233,Mahlsdorf,3010,BE,82,DE,52.50935,13.61373 27274,Mariendorf,3010,BE,82,DE,52.4378,13.38109 27275,Marienfelde,3010,BE,82,DE,52.41868,13.36723 27554,Märkisches Viertel,3010,BE,82,DE,52.59841,13.35766 27334,Marzahn,3010,BE,82,DE,52.54525,13.56983 27478,Mitte,3010,BE,82,DE,52.52003,13.40489 27496,Moabit,3010,BE,82,DE,52.52635,13.33903 27587,Müggelheim,3010,BE,82,DE,52.41137,13.66403 27693,Neu-Hohenschönhausen,3010,BE,82,DE,52.56681,13.51255 27765,Neukölln,3010,BE,82,DE,52.47719,13.43126 27873,Niederschöneweide,3010,BE,82,DE,52.45564,13.51554 27874,Niederschönhausen,3010,BE,82,DE,52.58483,13.40272 27899,Nikolassee,3010,BE,82,DE,52.4344,13.20095 28034,Oberschöneweide,3010,BE,82,DE,52.46106,13.52108 28216,Pankow,3010,BE,82,DE,52.56926,13.40186 28330,Plänterwald,3010,BE,82,DE,52.48106,13.47276 28375,Prenzlauer Berg,3010,BE,82,DE,52.53878,13.42443 28452,Rahnsdorf,3010,BE,82,DE,52.44115,13.68708 28562,Reinickendorf,3010,BE,82,DE,52.56667,13.33333 28710,Rosenthal,3010,BE,82,DE,52.59976,13.37774 28753,Rudow,3010,BE,82,DE,52.42407,13.48529 28762,Rummelsburg,3010,BE,82,DE,52.50146,13.4934 28989,Schmargendorf,3010,BE,82,DE,52.47517,13.29071 28998,Schmöckwitz,3010,BE,82,DE,52.37513,13.64948 29116,Schöneberg,3010,BE,82,DE,52.46667,13.35 29218,Siemensstadt,3010,BE,82,DE,52.54053,13.26294 29286,Spandau,3010,BE,82,DE,52.5511,13.19921 29313,Staaken,3010,BE,82,DE,52.53661,13.15057 29329,Stadtrandsiedlung Malchow,3010,BE,82,DE,52.58295,13.47811 29353,Steglitz,3010,BE,82,DE,52.45606,13.332 29543,Tegel,3010,BE,82,DE,52.57601,13.29389 29555,Tempelhof,3010,BE,82,DE,52.46667,13.4 29612,Tiergarten,3010,BE,82,DE,52.51667,13.36667 29926,Waidmannslust,3010,BE,82,DE,52.60691,13.31968 30008,Wannsee,3010,BE,82,DE,52.41915,13.15531 30025,Wartenberg,3010,BE,82,DE,52.5752,13.51559 30048,Wedding,3010,BE,82,DE,52.54734,13.35594 30134,Weißensee,3010,BE,82,DE,52.55632,13.46649 30200,Westend,3010,BE,82,DE,52.51708,13.27636 30287,Wilhelmsruh,3010,BE,82,DE,52.5871,13.36855 30288,Wilhelmstadt,3010,BE,82,DE,52.52462,13.17707 30299,Wilmersdorf,3010,BE,82,DE,52.48333,13.31667 30350,Wittenau,3010,BE,82,DE,52.59319,13.32127 30475,Zehlendorf,3010,BE,82,DE,52.43333,13.25 23577,Alt Tucheband,3013,BB,82,DE,52.53732,14.51225 23585,Altdöbern,3013,BB,82,DE,51.65,14.03333 23626,Altlandsberg,3013,BB,82,DE,52.56503,13.72815 23655,Angermünde,3013,BB,82,DE,53.01499,13.99924 23764,Bad Belzig,3013,BB,82,DE,52.14184,12.59272 23798,Bad Freienwalde,3013,BB,82,DE,52.7873,14.0304 23829,Bad Liebenwerda,3013,BB,82,DE,51.51826,13.39459 23853,Bad Saarow,3013,BB,82,DE,52.28333,14.06667 23885,Bad Wilsnack,3013,BB,82,DE,52.95607,11.94903 23947,Baruth,3013,BB,82,DE,52.04468,13.5027 23983,Beelitz,3013,BB,82,DE,52.23812,12.9714 23987,Beeskow,3013,BB,82,DE,52.17291,14.24597 24017,Bensdorf,3013,BB,82,DE,52.41667,12.33333 24050,Berkenbrück,3013,BB,82,DE,52.35,14.15 24061,Bernau bei Berlin,3013,BB,82,DE,52.67982,13.58708 24079,Bestensee,3013,BB,82,DE,52.23978,13.63732 24112,Biesenthal,3013,BB,82,DE,52.76616,13.64416 24138,Birkenwerder,3013,BB,82,DE,52.68333,13.28333 24181,Bliesdorf,3013,BB,82,DE,52.69298,14.15949 24246,Borkheide,3013,BB,82,DE,52.21667,12.85 24248,Borkwalde,3013,BB,82,DE,52.25,12.83333 24280,Brandenburg an der Havel,3013,BB,82,DE,52.41667,12.55 24293,Breddin,3013,BB,82,DE,52.8856,12.22366 24297,Breese,3013,BB,82,DE,53.0,11.8 24331,Brieselang,3013,BB,82,DE,52.58333,13.0 24332,Briesen,3013,BB,82,DE,52.34383,14.27804 24333,Brieskow-Finkenheerd,3013,BB,82,DE,52.25387,14.57285 24337,Britz,3013,BB,82,DE,52.88726,13.81119 24365,Brück,3013,BB,82,DE,52.19766,12.76868 24374,Brüssow,3013,BB,82,DE,53.39971,14.12533 24396,Buckow,3013,BB,82,DE,52.5661,14.07429 24406,Burg,3013,BB,82,DE,51.83448,14.14856 24513,Calau,3013,BB,82,DE,51.74402,13.95329 24525,Casekow,3013,BB,82,DE,53.21117,14.20824 24535,Chorin,3013,BB,82,DE,52.90197,13.87153 24556,Cottbus,3013,BB,82,DE,51.75769,14.32888 24564,Crinitz,3013,BB,82,DE,51.73333,13.76667 24583,Dahme,3013,BB,82,DE,51.87008,13.42743 24587,Dallgow-Döberitz,3013,BB,82,DE,52.54269,13.05837 24713,Doberlug-Kirchhain,3013,BB,82,DE,51.62578,13.56232 24758,Drebkau,3013,BB,82,DE,51.65412,14.22316 24759,Dreetz,3013,BB,82,DE,52.80297,12.45961 24839,Eberswalde,3013,BB,82,DE,52.83492,13.81951 24907,Eichwalde,3013,BB,82,DE,52.36667,13.61667 24929,Eisenhüttenstadt,3013,BB,82,DE,52.15,14.65 24972,Elsterwerda,3013,BB,82,DE,51.46043,13.52001 25049,Erkner,3013,BB,82,DE,52.42,13.75437 25133,Falkenberg,3013,BB,82,DE,51.58557,13.24347 25138,Falkensee,3013,BB,82,DE,52.56014,13.0927 25149,Fehrbellin,3013,BB,82,DE,52.8135,12.7644 25169,Fichtenwalde,3013,BB,82,DE,52.28038,12.88349 25176,Finsterwalde,3013,BB,82,DE,51.63388,13.70662 25207,Forst,3013,BB,82,DE,51.73544,14.63971 25221,Frankfurt (Oder),3013,BB,82,DE,52.34714,14.55062 25282,Friedland,3013,BB,82,DE,52.10493,14.26399 25297,Friesack,3013,BB,82,DE,52.73764,12.57969 25328,Fürstenberg,3013,BB,82,DE,53.18427,13.14442 25334,Fürstenwalde,3013,BB,82,DE,52.36067,14.06185 25373,Gartz,3013,BB,82,DE,53.20829,14.39226 25465,Gerswalde,3013,BB,82,DE,53.16988,13.74853 25512,Glienicke,3013,BB,82,DE,52.63353,13.32564 25536,Golßen,3013,BB,82,DE,51.97204,13.60115 25535,Golzow,3013,BB,82,DE,52.27617,12.60052 25786,Görzke,3013,BB,82,DE,52.17179,12.37506 25575,Gramzow,3013,BB,82,DE,53.21246,14.00748 25577,Gransee,3013,BB,82,DE,53.00704,13.1575 25730,Gröden,3013,BB,82,DE,51.4,13.56667 25627,Groß Köris,3013,BB,82,DE,52.16587,13.65935 25625,Groß Kreutz,3013,BB,82,DE,52.40281,12.7794 25629,Groß Lindow,3013,BB,82,DE,52.23333,14.53333 25634,Groß Pankow,3013,BB,82,DE,53.11952,12.04975 25653,Großbeeren,3013,BB,82,DE,52.35862,13.30994 25684,Großkmehlen,3013,BB,82,DE,51.37901,13.72501 25703,Großräschen,3013,BB,82,DE,51.5876,14.01093 25710,Großthiemig,3013,BB,82,DE,51.38333,13.66667 25714,Großwoltersdorf,3013,BB,82,DE,53.06667,13.1 25741,Grünheide,3013,BB,82,DE,52.42343,13.81324 25748,Guben,3013,BB,82,DE,51.94987,14.71447 25753,Gumtow,3013,BB,82,DE,52.98333,12.25 25842,Halbe,3013,BB,82,DE,52.11667,13.7 25996,Heiligengrabe,3013,BB,82,DE,53.14461,12.36254 26051,Hennigsdorf,3013,BB,82,DE,52.63598,13.20419 26098,Herzberg,3013,BB,82,DE,51.68692,13.22016 26166,Hirschfeld,3013,BB,82,DE,51.38333,13.61667 26195,Hohen Neuendorf,3013,BB,82,DE,52.67631,13.27775 26199,Hohenbocka,3013,BB,82,DE,51.43099,14.00982 26208,Hohenleipisch,3013,BB,82,DE,51.5,13.55 26424,Jacobsdorf,3013,BB,82,DE,52.33333,14.35 26464,Jänschwalde,3013,BB,82,DE,51.86066,14.49813 26452,Joachimsthal,3013,BB,82,DE,52.97945,13.74493 26476,Jüterbog,3013,BB,82,DE,51.99607,13.07979 26526,Karstädt,3013,BB,82,DE,53.16215,11.74242 26579,Ketzin,3013,BB,82,DE,52.47809,12.8453 26675,Kleinmachnow,3013,BB,82,DE,52.40786,13.22514 26693,Kloster Lehnin,3013,BB,82,DE,52.32039,12.7432 26713,Kolkwitz,3013,BB,82,DE,51.75,14.25 26822,Königs Wusterhausen,3013,BB,82,DE,52.30141,13.633 26749,Kremmen,3013,BB,82,DE,52.76216,13.02515 26811,Kyritz,3013,BB,82,DE,52.94212,12.39704 26959,Lauchhammer,3013,BB,82,DE,51.48813,13.76623 26995,Lebus,3013,BB,82,DE,52.42719,14.53235 26998,Leegebruch,3013,BB,82,DE,52.7234,13.19304 27050,Lenzen,3013,BB,82,DE,53.09176,11.47453 27055,Letschin,3013,BB,82,DE,52.64379,14.36007 27089,Liebenwalde,3013,BB,82,DE,52.87125,13.39465 27090,Lieberose,3013,BB,82,DE,51.98491,14.29987 27112,Lindow,3013,BB,82,DE,52.96689,12.98498 27203,Lübben,3013,BB,82,DE,51.93814,13.88826 27204,Lübbenau,3013,BB,82,DE,51.86217,13.95168 27160,Luckau,3013,BB,82,DE,51.85245,13.70735 27161,Luckenwalde,3013,BB,82,DE,52.09029,13.16772 27164,Ludwigsfelde,3013,BB,82,DE,52.30322,13.25405 27182,Lychen,3013,BB,82,DE,53.21242,13.31483 27266,Manschnow,3013,BB,82,DE,52.5499,14.55332 27281,Marienwerder,3013,BB,82,DE,52.84208,13.59927 27391,Melchow,3013,BB,82,DE,52.77613,13.70647 27448,Meyenburg,3013,BB,82,DE,53.04524,14.23691 27456,Michendorf,3013,BB,82,DE,52.31352,13.02996 27467,Milmersdorf,3013,BB,82,DE,53.11185,13.6415 27489,Mittenwalde,3013,BB,82,DE,52.26007,13.53945 27495,Mixdorf,3013,BB,82,DE,52.2,14.4 27592,Mühlberg,3013,BB,82,DE,51.43453,13.22177 27607,Müllrose,3013,BB,82,DE,52.24736,14.41794 27610,Müncheberg,3013,BB,82,DE,52.50704,14.13716 27647,Nauen,3013,BB,82,DE,52.60701,12.87374 27673,Nennhausen,3013,BB,82,DE,52.6,12.5 27691,Neu Zauche,3013,BB,82,DE,51.92757,14.08812 27720,Neuenhagen,3013,BB,82,DE,52.52985,13.68914 27737,Neuhardenberg,3013,BB,82,DE,52.59601,14.23768 27767,Neulewin,3013,BB,82,DE,52.72434,14.27922 27787,Neuruppin,3013,BB,82,DE,52.92815,12.80311 27812,Neutrebbin,3013,BB,82,DE,52.66482,14.22802 27816,Neuzelle,3013,BB,82,DE,52.09016,14.64804 27849,Niedergörsdorf,3013,BB,82,DE,51.97943,12.98541 27891,Niemegk,3013,BB,82,DE,52.07388,12.68947 28070,Oderberg,3013,BB,82,DE,52.86571,14.04508 28124,Oranienburg,3013,BB,82,DE,52.75577,13.24197 28133,Ortrand,3013,BB,82,DE,51.37505,13.75982 28235,Paulinenaue,3013,BB,82,DE,52.67701,12.71067 28244,Peitz,3013,BB,82,DE,51.85841,14.41138 28260,Perleberg,3013,BB,82,DE,53.07583,11.85739 28265,Petershagen,3013,BB,82,DE,52.52078,13.78748 28315,Plattenburg,3013,BB,82,DE,52.95919,12.02951 28323,Plessa,3013,BB,82,DE,51.46667,13.61667 28339,Podelzig,3013,BB,82,DE,52.47175,14.53465 28362,Potsdam,3013,BB,82,DE,52.39886,13.06566 28373,Premnitz,3013,BB,82,DE,52.53184,12.34845 28374,Prenzlau,3013,BB,82,DE,53.31625,13.86261 28392,Pritzwalk,3013,BB,82,DE,53.14945,12.17405 28399,Prötzel,3013,BB,82,DE,52.63723,13.98783 28409,Putlitz,3013,BB,82,DE,53.24899,12.04179 28471,Rangsdorf,3013,BB,82,DE,52.29126,13.41946 28485,Rathenow,3013,BB,82,DE,52.60659,12.33696 28494,Rauen,3013,BB,82,DE,52.33227,14.02797 28532,Rehfelde,3013,BB,82,DE,52.53417,13.90884 28546,Reichenwalde,3013,BB,82,DE,52.26667,14.0 28612,Rheinsberg,3013,BB,82,DE,53.09972,12.89885 28617,Rhinow,3013,BB,82,DE,52.75094,12.34194 28654,Rietz Neuendorf,3013,BB,82,DE,52.22758,14.17463 28712,Roskow,3013,BB,82,DE,52.47237,12.71886 28799,Rückersdorf,3013,BB,82,DE,51.56955,13.57226 28802,Rüdnitz,3013,BB,82,DE,52.72137,13.62502 28756,Ruhland,3013,BB,82,DE,51.45755,13.86643 28835,Sallgast,3013,BB,82,DE,51.5887,13.84861 28929,Schenkendöbern,3013,BB,82,DE,51.95723,14.63541 28951,Schipkau,3013,BB,82,DE,51.51766,13.89738 28975,Schlieben,3013,BB,82,DE,51.72379,13.38304 29113,Schönborn,3013,BB,82,DE,51.60016,13.48967 29119,Schönefeld,3013,BB,82,DE,52.38897,13.50374 29120,Schöneiche,3013,BB,82,DE,52.47286,13.69226 29122,Schönewalde,3013,BB,82,DE,51.67901,13.60247 29035,Schulzendorf,3013,BB,82,DE,52.35818,13.59842 29074,Schwarzheide,3013,BB,82,DE,51.47671,13.85559 29078,Schwedt (Oder),3013,BB,82,DE,53.05963,14.28154 29160,Seelow,3013,BB,82,DE,52.53392,14.38128 29191,Senftenberg,3013,BB,82,DE,51.52517,14.00164 29274,Sonnewalde,3013,BB,82,DE,51.69223,13.6473 29297,Sperenberg,3013,BB,82,DE,52.14113,13.365 29307,Spreenhagen,3013,BB,82,DE,52.34325,13.87663 29333,Stahnsdorf,3013,BB,82,DE,52.38333,13.21667 29384,Steinhöfel,3013,BB,82,DE,52.4,14.16667 29421,Storkow,3013,BB,82,DE,52.25662,13.93337 29429,Straupitz,3013,BB,82,DE,51.91357,14.12275 29430,Strausberg,3013,BB,82,DE,52.57859,13.88741 29535,Tauche,3013,BB,82,DE,52.15,14.16667 29554,Teltow,3013,BB,82,DE,52.4031,13.26014 29556,Templin,3013,BB,82,DE,53.11865,13.5022 29571,Teupitz,3013,BB,82,DE,52.12967,13.6196 29648,Trebbin,3013,BB,82,DE,52.21675,13.22496 29663,Treuenbrietzen,3013,BB,82,DE,52.09754,12.87258 29687,Tschernitz,3013,BB,82,DE,51.58333,14.61667 29718,Uebigau,3013,BB,82,DE,51.59415,13.29983 29831,Velten,3013,BB,82,DE,52.69149,13.17533 29839,Vetschau,3013,BB,82,DE,51.78638,14.07941 29964,Waldsieversdorf,3013,BB,82,DE,52.54221,14.07022 29999,Wandlitz,3013,BB,82,DE,52.74196,13.45799 30107,Weisen,3013,BB,82,DE,53.02518,11.7871 30150,Welzow,3013,BB,82,DE,51.58381,14.17082 30157,Wendisch Rietz,3013,BB,82,DE,52.21613,14.00845 30167,Werben,3013,BB,82,DE,51.81667,14.18333 30170,Werder,3013,BB,82,DE,52.37874,12.934 30173,Werftpfuhl,3013,BB,82,DE,52.66014,13.79351 30183,Werneuchen,3013,BB,82,DE,52.63275,13.73437 30256,Wiesenau,3013,BB,82,DE,52.23071,14.59107 30258,Wiesenburg,3013,BB,82,DE,52.11456,12.45534 30352,Wittenberge,3013,BB,82,DE,53.00543,11.75032 30366,Wittstock,3013,BB,82,DE,53.16118,12.48287 30400,Woltersdorf,3013,BB,82,DE,52.45554,13.74986 30411,Wriezen,3013,BB,82,DE,52.72091,14.13425 30427,Wusterhausen,3013,BB,82,DE,52.8912,12.46021 30429,Wustermark,3013,BB,82,DE,52.55,12.95 30430,Wusterwitz,3013,BB,82,DE,52.36666,12.38488 30474,Zehdenick,3013,BB,82,DE,52.97852,13.33165 30499,Zeuthen,3013,BB,82,DE,52.34803,13.62174 30505,Ziesar,3013,BB,82,DE,52.26616,12.28997 30507,Ziltendorf,3013,BB,82,DE,52.20608,14.62411 30517,Zossen,3013,BB,82,DE,52.216,13.44909 24320,Bremen,3014,HB,82,DE,53.07516,8.80777 24321,Bremerhaven,3014,HB,82,DE,53.55021,8.57673 24426,Burglesum,3014,HB,82,DE,53.16532,8.68873 29819,Vegesack,3014,HB,82,DE,53.16667,8.61667 23574,Alsterdorf,3016,HH,82,DE,53.61083,10.01306 23631,Altona,3016,HH,82,DE,53.55,9.93333 23936,Barmbek-Nord,3016,HH,82,DE,53.6052,10.03988 24032,Bergedorf,3016,HH,82,DE,53.48462,10.22904 24047,Bergstedt,3016,HH,82,DE,53.67111,10.12694 24241,Borgfelde,3016,HH,82,DE,53.55475,10.03447 24788,Duvenstedt,3016,HH,82,DE,53.70806,10.10444 24910,Eidelstedt,3016,HH,82,DE,53.60697,9.90538 24919,Eimsbüttel,3016,HH,82,DE,53.57416,9.95679 25143,Farmsen-Berne,3016,HH,82,DE,53.60639,10.11972 25314,Fuhlsbüttel,3016,HH,82,DE,53.63459,10.01608 25866,Hamburg,3016,HH,82,DE,53.57532,10.01534 25867,Hamburg-Altstadt,3016,HH,82,DE,53.55,10.0 25868,Hamburg-Mitte,3016,HH,82,DE,53.55,10.01667 25869,Hamburg-Nord,3016,HH,82,DE,53.58935,9.984 25877,Hammerbrook,3016,HH,82,DE,53.54527,10.03042 25897,Harburg,3016,HH,82,DE,53.46057,9.98388 26284,Hummelsbüttel,3016,HH,82,DE,53.64773,10.04149 26670,Kleiner Grasbrook,3016,HH,82,DE,53.53111,9.99361 26922,Langenhorn,3016,HH,82,DE,53.66667,10.01667 27036,Lemsahl-Mellingstedt,3016,HH,82,DE,53.68998,10.09648 27178,Lurup,3016,HH,82,DE,53.59266,9.87697 27280,Marienthal,3016,HH,82,DE,53.56667,10.08333 27793,Neustadt,3016,HH,82,DE,53.55196,9.98558 28098,Ohlsdorf,3016,HH,82,DE,53.62594,10.03145 28181,Ottensen,3016,HH,82,DE,53.55,9.91667 28351,Poppenbüttel,3016,HH,82,DE,53.65917,10.08472 28726,Rothenburgsort,3016,HH,82,DE,53.535,10.04082 28888,Sasel,3016,HH,82,DE,53.65385,10.11184 29311,St. Georg,3016,HH,82,DE,53.55513,10.01231 29312,St. Pauli,3016,HH,82,DE,53.557,9.964 29354,Steilshoop,3016,HH,82,DE,53.61028,10.05917 29396,Stellingen,3016,HH,82,DE,53.5922,9.9287 30000,Wandsbek,3016,HH,82,DE,53.58334,10.08305 30145,Wellingsbüttel,3016,HH,82,DE,53.64104,10.0798 30333,Winterhude,3016,HH,82,DE,53.6,10.0 30370,Wohldorf-Ohlstedt,3016,HH,82,DE,53.69282,10.13117 23540,Albshausen,3018,HE,82,DE,50.54431,8.43784 23554,Alheim,3018,HE,82,DE,51.03333,9.66667 23555,Allendorf,3018,HE,82,DE,51.02995,8.67232 23556,Allendorf an der Lahn,3018,HE,82,DE,50.55109,8.62008 23567,Alsbach-Hähnlein,3018,HE,82,DE,49.73861,8.59583 23571,Alsfeld,3018,HE,82,DE,50.75185,9.27082 23588,Alten Buseck,3018,HE,82,DE,50.62218,8.75322 23613,Altenstadt,3018,HE,82,DE,50.28747,8.94373 23652,Amöneburg,3018,HE,82,DE,50.79595,8.9233 23748,Aßlar,3018,HE,82,DE,50.59163,8.46273 23753,Babenhausen,3018,HE,82,DE,49.96519,8.95129 23762,Bad Arolsen,3018,HE,82,DE,51.37982,9.01445 23780,Bad Camberg,3018,HE,82,DE,50.29695,8.26896 23791,Bad Endbach,3018,HE,82,DE,50.75,8.5 23806,Bad Hersfeld,3018,HE,82,DE,50.87197,9.70891 23808,Bad Homburg vor der Höhe,3018,HE,82,DE,50.22683,8.61816 23812,Bad Karlshafen,3018,HE,82,DE,51.64263,9.45477 23818,Bad König,3018,HE,82,DE,49.7432,9.0075 23840,Bad Nauheim,3018,HE,82,DE,50.36463,8.73859 23846,Bad Orb,3018,HE,82,DE,50.22788,9.34782 23856,Bad Salzschlirf,3018,HE,82,DE,50.62388,9.50815 23864,Bad Schwalbach,3018,HE,82,DE,50.14196,8.06964 23867,Bad Soden am Taunus,3018,HE,82,DE,50.1408,8.50449 23868,Bad Soden-Salmünster,3018,HE,82,DE,50.27574,9.36705 23869,Bad Sooden-Allendorf,3018,HE,82,DE,51.27092,9.97483 23880,Bad Vilbel,3018,HE,82,DE,50.17866,8.73756 23884,Bad Wildungen,3018,HE,82,DE,51.11963,9.12475 23956,Battenberg,3018,HE,82,DE,51.01391,8.64603 23961,Baunatal,3018,HE,82,DE,51.25182,9.40747 23971,Bebra,3018,HE,82,DE,50.97445,9.79562 23984,Beerfelden,3018,HE,82,DE,49.56858,8.97444 24019,Bensheim,3018,HE,82,DE,49.68369,8.61839 24074,Berstadt,3018,HE,82,DE,50.42606,8.86621 24086,Beuern,3018,HE,82,DE,50.62745,8.82108 24098,Biblis,3018,HE,82,DE,49.69167,8.45861 24101,Bickenbach,3018,HE,82,DE,49.75917,8.6175 24104,Biebesheim,3018,HE,82,DE,49.78088,8.46696 24105,Biedenkopf,3018,HE,82,DE,50.91125,8.53016 24133,Birkenau,3018,HE,82,DE,49.5625,8.70694 24141,Birstein,3018,HE,82,DE,50.35,9.3 24144,Bischoffen,3018,HE,82,DE,50.7,8.45 24147,Bischofsheim,3018,HE,82,DE,49.99389,8.36722 24245,Borken,3018,HE,82,DE,51.04501,9.2844 24287,Braunfels,3018,HE,82,DE,50.51545,8.38918 24300,Breidenbach,3018,HE,82,DE,50.88734,8.45748 24304,Breitenbach,3018,HE,82,DE,50.95655,9.78285 24315,Breitscheid,3018,HE,82,DE,50.68507,8.1912 24324,Brensbach,3018,HE,82,DE,49.77389,8.88444 24328,Breuna,3018,HE,82,DE,51.41575,9.185 24346,Bromskirchen,3018,HE,82,DE,51.09363,8.6264 24349,Bruchköbel,3018,HE,82,DE,50.17853,8.92315 24494,Büdingen,3018,HE,82,DE,50.29013,9.1114 24419,Burghaun,3018,HE,82,DE,50.69684,9.72453 24433,Burgsolms,3018,HE,82,DE,50.54191,8.40411 24504,Bürstadt,3018,HE,82,DE,49.64266,8.45936 24507,Büttelborn,3018,HE,82,DE,49.90333,8.52333 24455,Butzbach,3018,HE,82,DE,50.43395,8.67122 24516,Calden,3018,HE,82,DE,51.40943,9.40189 24571,Cölbe,3018,HE,82,DE,50.85098,8.78092 24553,Cornberg,3018,HE,82,DE,51.0416,9.86051 24597,Darmstadt,3018,HE,82,DE,49.87167,8.65027 24612,Dehrn,3018,HE,82,DE,50.42049,8.09846 24665,Dieburg,3018,HE,82,DE,49.89738,8.84613 24686,Dietzenbach,3018,HE,82,DE,50.00976,8.77783 24689,Dillenburg,3018,HE,82,DE,50.74114,8.28699 24700,Dipperz,3018,HE,82,DE,50.54333,9.79586 24760,Dreieich,3018,HE,82,DE,50.01997,8.69611 24769,Driedorf,3018,HE,82,DE,50.63333,8.18333 24847,Echzell,3018,HE,82,DE,50.38888,8.88605 24866,Egelsbach,3018,HE,82,DE,49.96792,8.66341 24894,Ehringshausen,3018,HE,82,DE,50.6,8.38333 24903,Eichenzell,3018,HE,82,DE,50.49536,9.69672 24921,Einhausen,3018,HE,82,DE,49.67667,8.54833 24936,Eiterfeld,3018,HE,82,DE,50.76667,9.8 24976,Eltville,3018,HE,82,DE,50.02858,8.11754 24978,Elz,3018,HE,82,DE,50.41667,8.03333 25023,Eppertshausen,3018,HE,82,DE,49.95056,8.85389 25026,Eppstein,3018,HE,82,DE,50.14277,8.39231 25027,Erbach,3018,HE,82,DE,49.66148,8.99402 25060,Erlensee,3018,HE,82,DE,50.16304,8.97823 25073,Erzhausen,3018,HE,82,DE,49.95528,8.6475 25076,Eschborn,3018,HE,82,DE,50.14328,8.57111 25084,Eschwege,3018,HE,82,DE,51.18386,10.05329 25090,Espenau,3018,HE,82,DE,51.39664,9.47021 25162,Felsberg,3018,HE,82,DE,51.13763,9.42139 25191,Flieden,3018,HE,82,DE,50.42389,9.5666 25200,Flörsheim,3018,HE,82,DE,50.01311,8.42779 25196,Florstadt,3018,HE,82,DE,50.31667,8.86667 25212,Frankenau,3018,HE,82,DE,51.09269,8.93447 25213,Frankenberg,3018,HE,82,DE,51.0589,8.80077 25222,Frankfurt am Main,3018,HE,82,DE,50.11552,8.68417 25310,Fränkisch-Crumbach,3018,HE,82,DE,49.74611,8.85861 25244,Freiensteinau,3018,HE,82,DE,50.42509,9.40267 25271,Friedberg,3018,HE,82,DE,50.33739,8.75591 25279,Friedewald,3018,HE,82,DE,50.88333,9.86667 25286,Friedrichsdorf,3018,HE,82,DE,50.24962,8.64281 25295,Frielendorf,3018,HE,82,DE,50.97073,9.32269 25303,Fritzlar,3018,HE,82,DE,51.13181,9.27557 25306,Fronhausen,3018,HE,82,DE,50.7,8.7 25315,Fulda,3018,HE,82,DE,50.55162,9.67518 25316,Fuldatal,3018,HE,82,DE,51.38333,9.56667 25336,Fürth,3018,HE,82,DE,49.65083,8.78472 25352,Gallus,3018,HE,82,DE,50.10038,8.6295 25388,Gedern,3018,HE,82,DE,50.42482,9.1984 25403,Geisenheim,3018,HE,82,DE,49.9847,7.96835 25415,Gelnhausen,3018,HE,82,DE,50.20164,9.18742 25424,Gemünden an der Wohra,3018,HE,82,DE,50.97401,8.96946 25450,Gernsheim,3018,HE,82,DE,49.75305,8.48859 25459,Gersfeld,3018,HE,82,DE,50.45138,9.91422 25487,Gießen,3018,HE,82,DE,50.58727,8.67554 25491,Gilserberg,3018,HE,82,DE,50.95,9.06667 25496,Ginsheim-Gustavsburg,3018,HE,82,DE,49.9711,8.34532 25500,Gladenbach,3018,HE,82,DE,50.76847,8.58085 25505,Glashütten,3018,HE,82,DE,50.21667,8.4 25509,Glauburg,3018,HE,82,DE,50.31667,9.0 25726,Grävenwiesbach,3018,HE,82,DE,50.39024,8.4569 25583,Grebenau,3018,HE,82,DE,50.74242,9.47307 25584,Grebenhain,3018,HE,82,DE,50.48924,9.33855 25585,Grebenstein,3018,HE,82,DE,51.44648,9.4125 25591,Greifenstein,3018,HE,82,DE,50.61667,8.3 25608,Griesheim,3018,HE,82,DE,49.86085,8.5725 25643,Groß-Bieberau,3018,HE,82,DE,49.80064,8.8243 25644,Groß-Gerau,3018,HE,82,DE,49.92139,8.48255 25645,Groß-Rohrheim,3018,HE,82,DE,49.72111,8.48278 25646,Groß-Umstadt,3018,HE,82,DE,49.86899,8.9321 25647,Groß-Zimmern,3018,HE,82,DE,49.8741,8.82898 25649,Großalmerode,3018,HE,82,DE,51.25858,9.7845 25666,Großenlüder,3018,HE,82,DE,50.5925,9.54231 25686,Großkrotzenburg,3018,HE,82,DE,50.08333,8.98333 25736,Grünberg,3018,HE,82,DE,50.59403,8.95866 25749,Gudensberg,3018,HE,82,DE,51.17706,9.36748 25771,Guxhagen,3018,HE,82,DE,51.2,9.48333 25812,Hadamar,3018,HE,82,DE,50.44593,8.04253 25830,Haiger,3018,HE,82,DE,50.74162,8.20778 25834,Hain-Gründau,3018,HE,82,DE,50.24284,9.14287 25836,Haina,3018,HE,82,DE,51.02774,8.97441 25879,Hammersbach,3018,HE,82,DE,50.21667,8.98333 25882,Hanau am Main,3018,HE,82,DE,50.13423,8.91418 25938,Hattersheim,3018,HE,82,DE,50.07854,8.47552 25944,Hatzfeld,3018,HE,82,DE,50.99334,8.5457 26034,Helsa,3018,HE,82,DE,51.25981,9.68872 26055,Heppenheim an der Bergstrasse,3018,HE,82,DE,49.64145,8.63206 26059,Herborn,3018,HE,82,DE,50.68135,8.30369 26062,Herbstein,3018,HE,82,DE,50.56105,9.34592 26072,Heringen,3018,HE,82,DE,50.88798,10.00717 26074,Herleshausen,3018,HE,82,DE,51.00629,10.16731 26107,Hessisch Lichtenau,3018,HE,82,DE,51.19954,9.71857 26118,Heuchelheim,3018,HE,82,DE,50.58333,8.63333 26123,Heusenstamm,3018,HE,82,DE,50.05553,8.80076 26136,Hilders,3018,HE,82,DE,50.5719,10.00297 26168,Hirschhorn,3018,HE,82,DE,49.44566,8.89594 26169,Hirzenhain,3018,HE,82,DE,50.4,9.13333 26176,Hochheim am Main,3018,HE,82,DE,50.01436,8.35218 26301,Höchst im Odenwald,3018,HE,82,DE,49.79972,8.99944 26186,Hofbieber,3018,HE,82,DE,50.58629,9.83534 26187,Hofgeismar,3018,HE,82,DE,51.49607,9.385 26188,Hofheim am Taunus,3018,HE,82,DE,50.09019,8.4493 26314,Höingen,3018,HE,82,DE,50.7191,8.91961 26251,Homberg,3018,HE,82,DE,50.73108,8.99644 26319,Hörnsheim,3018,HE,82,DE,50.51828,8.62976 26275,Hosenfeld,3018,HE,82,DE,50.50502,9.47966 26337,Hünfeld,3018,HE,82,DE,50.67966,9.76727 26289,Hungen,3018,HE,82,DE,50.47368,8.89326 26351,Idstein,3018,HE,82,DE,50.21773,8.26679 26381,Immenhausen,3018,HE,82,DE,51.42763,9.48017 26441,Jesberg,3018,HE,82,DE,51.0,9.15 26513,Karben,3018,HE,82,DE,50.23019,8.77155 26531,Kassel,3018,HE,82,DE,51.31667,9.5 26544,Kaufungen,3018,HE,82,DE,51.28111,9.61861 26550,Kefenrod,3018,HE,82,DE,50.34475,9.21141 26557,Kelkheim (Taunus),3018,HE,82,DE,50.13703,8.4502 26562,Kelsterbach,3018,HE,82,DE,50.06135,8.52916 26582,Kiedrich,3018,HE,82,DE,50.03965,8.08531 26615,Kirchhain,3018,HE,82,DE,50.8272,8.92806 26620,Kirchheim,3018,HE,82,DE,50.83333,9.56667 26646,Kirtorf,3018,HE,82,DE,50.76942,9.10389 26836,Königstein im Taunus,3018,HE,82,DE,50.17943,8.47132 26722,Korbach,3018,HE,82,DE,51.27561,8.873 26843,Körle,3018,HE,82,DE,51.16667,9.51667 26763,Kriftel,3018,HE,82,DE,50.08408,8.46977 26769,Kronberg,3018,HE,82,DE,50.18424,8.5232 26770,Kronberg Tal,3018,HE,82,DE,50.17929,8.5037 26855,Künzell,3018,HE,82,DE,50.5442,9.71792 26885,Lampertheim,3018,HE,82,DE,49.59786,8.4725 26902,Langen,3018,HE,82,DE,49.98955,8.66852 26928,Langenselbold,3018,HE,82,DE,50.17657,9.04003 26938,Langgöns,3018,HE,82,DE,50.5,8.66667 26955,Laubach,3018,HE,82,DE,50.54196,8.99034 26973,Laufdorf,3018,HE,82,DE,50.51605,8.45982 26984,Lauterbach,3018,HE,82,DE,50.63558,9.39777 26988,Lautertal,3018,HE,82,DE,50.58333,9.28333 27061,Leun,3018,HE,82,DE,50.55129,8.35836 27073,Lich,3018,HE,82,DE,50.52085,8.81567 27086,Liebenau,3018,HE,82,DE,51.49699,9.28207 27092,Liederbach,3018,HE,82,DE,50.12221,8.49397 27099,Limburg an der Lahn,3018,HE,82,DE,50.3836,8.0503 27108,Lindenfels,3018,HE,82,DE,49.68369,8.78151 27132,Lohfelden,3018,HE,82,DE,51.26667,9.53333 27194,Löhnberg,3018,HE,82,DE,50.51299,8.27202 27137,Lohra,3018,HE,82,DE,50.73333,8.63333 27141,Lollar,3018,HE,82,DE,50.64652,8.70495 27149,Lorsch,3018,HE,82,DE,49.65,8.56667 27224,Lützelbach,3018,HE,82,DE,49.74233,8.76687 27243,Maintal,3018,HE,82,DE,50.15,8.83333 27258,Malsfeld,3018,HE,82,DE,51.09083,9.53889 27270,Marburg an der Lahn,3018,HE,82,DE,50.80904,8.77069 27329,Martinhagen,3018,HE,82,DE,51.28688,9.28611 27389,Melbach,3018,HE,82,DE,50.37908,8.80926 27400,Melsungen,3018,HE,82,DE,51.13029,9.55236 27409,Mengerskirchen,3018,HE,82,DE,50.56392,8.15555 27417,Merenberg,3018,HE,82,DE,50.50707,8.19194 27419,Merkenbach,3018,HE,82,DE,50.65626,8.29513 27434,Messel,3018,HE,82,DE,49.93833,8.74056 27455,Michelstadt,3018,HE,82,DE,49.67569,9.00373 27487,Mittenaar,3018,HE,82,DE,50.7,8.38333 27576,Mörfelden-Walldorf,3018,HE,82,DE,49.99472,8.58361 27577,Mörlenbach,3018,HE,82,DE,49.59917,8.73472 27601,Mühlheim am Main,3018,HE,82,DE,50.11667,8.83333 27612,Münchhausen,3018,HE,82,DE,50.96081,8.71837 27620,Münster,3018,HE,82,DE,49.92278,8.86778 27628,Münzenberg,3018,HE,82,DE,50.45346,8.7743 27650,Naumburg,3018,HE,82,DE,51.24816,9.16569 27661,Neckarsteinach,3018,HE,82,DE,49.40735,8.84342 27675,Nentershausen,3018,HE,82,DE,51.01667,9.93333 27688,Neu Isenburg,3018,HE,82,DE,50.04832,8.69406 27692,Neu-Anspach,3018,HE,82,DE,50.31667,8.5 27729,Neuental,3018,HE,82,DE,51.0,9.21667 27748,Neuhof,3018,HE,82,DE,50.45313,9.6175 27761,Neukirchen,3018,HE,82,DE,50.86906,9.34655 27795,Neustadt (Hessen),3018,HE,82,DE,50.85,9.11667 27821,Nidda,3018,HE,82,DE,50.4133,9.00638 27822,Nidderau,3018,HE,82,DE,50.23805,8.86704 27825,Niedenstein,3018,HE,82,DE,51.23342,9.31029 27826,Nieder-Gründau,3018,HE,82,DE,50.21097,9.10801 27832,Niederaula,3018,HE,82,DE,50.8,9.6 27834,Niederbiel,3018,HE,82,DE,50.55505,8.39845 27838,Niederdorfelden,3018,HE,82,DE,50.19415,8.80005 27853,Niederklein,3018,HE,82,DE,50.794,8.99694 27864,Niedernhausen,3018,HE,82,DE,50.16307,8.31338 27867,Niederrad,3018,HE,82,DE,50.08309,8.62852 27958,Ober-Mörlen,3018,HE,82,DE,50.3735,8.69087 27960,Ober-Ramstadt,3018,HE,82,DE,49.83078,8.74887 27965,Oberaula,3018,HE,82,DE,50.85,9.46667 27967,Oberbiel,3018,HE,82,DE,50.5532,8.42797 28050,Obertshausen,3018,HE,82,DE,50.07139,8.85123 28051,Oberursel,3018,HE,82,DE,50.20731,8.57747 28086,Offenbach,3018,HE,82,DE,50.10061,8.76647 28130,Ortenberg,3018,HE,82,DE,50.35584,9.05602 28196,Ottrau,3018,HE,82,DE,50.80599,9.38575 28295,Pfungstadt,3018,HE,82,DE,49.80557,8.60307 28297,Philippsthal,3018,HE,82,DE,50.83948,10.00906 28353,Poppenhausen,3018,HE,82,DE,50.48793,9.86795 28437,Rabenau,3018,HE,82,DE,50.67753,8.86425 28475,Ranstadt,3018,HE,82,DE,50.35739,8.98375 28478,Rasdorf,3018,HE,82,DE,50.71667,9.9 28496,Raunheim,3018,HE,82,DE,50.0132,8.45253 28497,Rauschenberg,3018,HE,82,DE,50.88329,8.91864 28517,Regierungsbezirk Darmstadt,3018,HE,82,DE,50.0,8.75 28519,Regierungsbezirk Gießen,3018,HE,82,DE,50.69806,8.76861 28520,Regierungsbezirk Kassel,3018,HE,82,DE,51.08333,9.4 28537,Reichelsheim,3018,HE,82,DE,49.71211,8.83896 28558,Reinhardshausen,3018,HE,82,DE,51.11166,9.07514 28561,Reinheim,3018,HE,82,DE,49.82923,8.83572 28569,Reiskirchen,3018,HE,82,DE,50.6,8.83333 28637,Riedstadt,3018,HE,82,DE,49.83411,8.49621 28655,Rimbach,3018,HE,82,DE,49.625,8.76306 28671,Rockenberg,3018,HE,82,DE,50.4305,8.73688 28676,Rodenbach,3018,HE,82,DE,50.15,9.03333 28679,Rodgau,3018,HE,82,DE,50.02627,8.88588 28697,Romrod,3018,HE,82,DE,50.71341,9.2201 28701,Ronshausen,3018,HE,82,DE,50.95,9.85 28702,Rosbach vor der Höhe,3018,HE,82,DE,50.30332,8.68976 28709,Rosenthal,3018,HE,82,DE,50.97439,8.86736 28741,Roßdorf,3018,HE,82,DE,49.85972,8.76167 28719,Rotenburg an der Fulda,3018,HE,82,DE,50.99556,9.72838 28722,Rothenberg,3018,HE,82,DE,49.49917,8.91917 28801,Rüdesheim am Rhein,3018,HE,82,DE,49.9789,7.92442 28764,Runkel,3018,HE,82,DE,50.40574,8.15457 28809,Rüsselsheim,3018,HE,82,DE,49.98955,8.42251 28823,Sachsenhausen,3018,HE,82,DE,51.24338,9.00973 28901,Schaafheim,3018,HE,82,DE,49.92417,9.00944 28931,Schenklengsfeld,3018,HE,82,DE,50.81667,9.85 28963,Schlangenbad,3018,HE,82,DE,50.09322,8.10312 28980,Schlitz,3018,HE,82,DE,50.67416,9.56102 28984,Schlüchtern,3018,HE,82,DE,50.34891,9.52532 28997,Schmitten,3018,HE,82,DE,50.26667,8.45 29099,Schöffengrund,3018,HE,82,DE,50.49345,8.47183 29027,Schotten,3018,HE,82,DE,50.50346,9.12516 29030,Schrecksbach,3018,HE,82,DE,50.83333,9.28333 29050,Schwalbach,3018,HE,82,DE,50.49672,8.46943 29051,Schwalbach am Taunus,3018,HE,82,DE,50.15,8.53333 29053,Schwalmstadt,3018,HE,82,DE,50.93333,9.21667 29055,Schwalmtal,3018,HE,82,DE,50.68333,9.21667 29071,Schwarzenborn,3018,HE,82,DE,50.90977,9.44658 29155,Seeheim-Jugenheim,3018,HE,82,DE,49.765,8.65194 29179,Seligenstadt,3018,HE,82,DE,50.0432,8.97394 29185,Selters,3018,HE,82,DE,50.51681,8.28953 29243,Sinn,3018,HE,82,DE,50.65,8.33333 29490,Södel,3018,HE,82,DE,50.39382,8.80474 29260,Solms,3018,HE,82,DE,50.5362,8.40704 29279,Sontra,3018,HE,82,DE,51.07171,9.93558 29287,Spangenberg,3018,HE,82,DE,51.11644,9.6627 29319,Stadtallendorf,3018,HE,82,DE,50.82261,9.01294 29346,Staufenberg,3018,HE,82,DE,50.66197,8.73158 29350,Steeden,3018,HE,82,DE,50.41539,8.12748 29362,Steinau an der Straße,3018,HE,82,DE,50.31401,9.46335 29365,Steinbach am Taunus,3018,HE,82,DE,50.16774,8.57278 29414,Stockstadt am Rhein,3018,HE,82,DE,49.80944,8.47278 29468,Sulzbach,3018,HE,82,DE,50.13396,8.52797 29520,Tann,3018,HE,82,DE,50.64284,10.02385 29537,Taunusstein,3018,HE,82,DE,50.14993,8.15206 29653,Trebur,3018,HE,82,DE,49.92639,8.40732 29660,Trendelburg,3018,HE,82,DE,51.57408,9.42095 29715,Udenhausen,3018,HE,82,DE,51.46385,9.46335 29739,Ulrichstein,3018,HE,82,DE,50.5755,9.19272 29751,Unter-Abtsteinach,3018,HE,82,DE,49.52711,8.78679 29798,Usingen,3018,HE,82,DE,50.33554,8.53688 29829,Vellmar,3018,HE,82,DE,51.35806,9.47974 29848,Viernheim,3018,HE,82,DE,49.54033,8.5782 29854,Villmar,3018,HE,82,DE,50.39287,8.1931 29887,Vöhl,3018,HE,82,DE,51.20565,8.9451 29875,Volkmarsen,3018,HE,82,DE,51.40895,9.11814 29899,Wabern,3018,HE,82,DE,51.1,9.35 30436,Wächtersbach,3018,HE,82,DE,50.25511,9.29564 29933,Wald-Michelbach,3018,HE,82,DE,49.57,8.83167 29938,Waldbrunn,3018,HE,82,DE,50.51875,8.10812 29943,Waldeck,3018,HE,82,DE,51.20618,9.06286 29944,Waldems,3018,HE,82,DE,50.25,8.33333 29953,Waldkappel,3018,HE,82,DE,51.14462,9.87695 29988,Walluf,3018,HE,82,DE,50.04003,8.15545 30001,Wanfried,3018,HE,82,DE,51.18207,10.17283 30062,Wehrheim,3018,HE,82,DE,50.3,8.56667 30085,Weilburg,3018,HE,82,DE,50.48438,8.26249 30094,Weilmünster,3018,HE,82,DE,50.43143,8.37673 30097,Weinbach,3018,HE,82,DE,50.43843,8.29133 30118,Weiterstadt,3018,HE,82,DE,49.9039,8.58874 30224,Wetter,3018,HE,82,DE,50.90254,8.72366 30230,Wetzlar,3018,HE,82,DE,50.56109,8.50495 30254,Wiesbaden,3018,HE,82,DE,50.08258,8.24932 30295,Willingen,3018,HE,82,DE,51.29418,8.6091 30296,Willingshausen,3018,HE,82,DE,50.85,9.2 30367,Witzenhausen,3018,HE,82,DE,51.34103,9.8554 30372,Wohnbach,3018,HE,82,DE,50.42864,8.82923 30439,Wölfersheim,3018,HE,82,DE,50.4,8.81667 30382,Wolfhagen,3018,HE,82,DE,51.32611,9.17015 30503,Zierenberg,3018,HE,82,DE,51.36948,9.30164 30537,Zwingenberg,3018,HE,82,DE,49.72389,8.61084 23465,Abbesbüttel,3008,NI,82,DE,52.35233,10.55649 23473,Achim,3008,NI,82,DE,53.01416,9.0263 23478,Adelebsen,3008,NI,82,DE,51.58272,9.75461 23479,Adelheidsdorf,3008,NI,82,DE,52.56404,10.06039 23487,Adenbüttel,3008,NI,82,DE,52.37984,10.45079 23488,Adendorf,3008,NI,82,DE,53.28189,10.43787 23489,Adenstedt,3008,NI,82,DE,51.99852,9.93516 23494,Aerzen,3008,NI,82,DE,52.04953,9.25856 23497,Agathenburg,3008,NI,82,DE,53.56065,9.5318 23501,Ahausen,3008,NI,82,DE,53.06667,9.31667 23503,Ahlden,3008,NI,82,DE,52.75968,9.55115 23505,Ahlerstedt,3008,NI,82,DE,53.4,9.45 23507,Ahnsbeck,3008,NI,82,DE,52.61071,10.28534 23508,Ahnsen,3008,NI,82,DE,52.25466,9.10089 23515,Ahsen-Oetzen,3008,NI,82,DE,52.95868,9.07933 23549,Alfeld,3008,NI,82,DE,51.98382,9.81989 23551,Alfhausen,3008,NI,82,DE,52.5,7.95 23553,Algermissen,3008,NI,82,DE,52.25332,9.96915 23578,Alt Wallmoden,3008,NI,82,DE,52.01933,10.30294 23591,Altenau,3008,NI,82,DE,51.80113,10.44148 23609,Altenmedingen,3008,NI,82,DE,53.1305,10.60163 23644,Amelinghausen,3008,NI,82,DE,53.12397,10.21274 23660,Ankum,3008,NI,82,DE,52.55,7.88333 23669,Apelern,3008,NI,82,DE,52.28979,9.3358 23670,Apen,3008,NI,82,DE,53.21667,7.8 23671,Apensen,3008,NI,82,DE,53.43333,9.61667 23676,Appel,3008,NI,82,DE,53.3906,9.74565 23691,Arpke,3008,NI,82,DE,52.38597,10.10047 23694,Artlenburg,3008,NI,82,DE,53.37182,10.48793 23709,Asendorf,3008,NI,82,DE,52.77219,9.00489 23727,Auf der Horst,3008,NI,82,DE,52.41943,9.60248 23734,Auhagen,3008,NI,82,DE,52.39828,9.29194 23741,Aurich,3008,NI,82,DE,53.46919,7.48232 23744,Axstedt,3008,NI,82,DE,53.35466,8.77485 23765,Bad Bentheim,3008,NI,82,DE,52.30066,7.15763 23770,Bad Bevensen,3008,NI,82,DE,53.07923,10.58129 23788,Bad Eilsen,3008,NI,82,DE,52.24215,9.09822 23793,Bad Essen,3008,NI,82,DE,52.31667,8.33333 23794,Bad Fallingbostel,3008,NI,82,DE,52.86641,9.69558 23800,Bad Gandersheim,3008,NI,82,DE,51.87167,10.02537 23802,Bad Grund,3008,NI,82,DE,51.81021,10.23694 23803,Bad Harzburg,3008,NI,82,DE,51.88268,10.56157 23811,Bad Iburg,3008,NI,82,DE,52.1549,8.04216 23823,Bad Laer,3008,NI,82,DE,52.1,8.08333 23827,Bad Lauterberg im Harz,3008,NI,82,DE,51.63272,10.47031 23837,Bad Münder am Deister,3008,NI,82,DE,52.19551,9.46421 23841,Bad Nenndorf,3008,NI,82,DE,52.33703,9.37904 23848,Bad Pyrmont,3008,NI,82,DE,51.98589,9.25246 23852,Bad Rothenfelde,3008,NI,82,DE,52.11667,8.16667 23854,Bad Sachsa,3008,NI,82,DE,51.59499,10.55546 23855,Bad Salzdetfurth,3008,NI,82,DE,52.05777,10.0058 23890,Bad Zwischenahn,3008,NI,82,DE,53.18333,8.0 23892,Badbergen,3008,NI,82,DE,52.63333,7.98333 23893,Baddeckenstedt,3008,NI,82,DE,52.08333,10.23333 23896,Badenhausen,3008,NI,82,DE,51.76996,10.20493 23900,Bahrdorf,3008,NI,82,DE,52.38587,11.0004 23901,Bahrenborstel,3008,NI,82,DE,52.57009,8.80863 23908,Bakum,3008,NI,82,DE,52.74118,8.19546 23909,Balge,3008,NI,82,DE,52.71667,9.16667 23911,Balje,3008,NI,82,DE,53.83333,9.13333 23922,Banteln,3008,NI,82,DE,52.06667,9.75 23927,Bardowick,3008,NI,82,DE,53.29354,10.38811 23928,Barenburg,3008,NI,82,DE,52.61953,8.79999 23929,Barendorf,3008,NI,82,DE,53.22896,10.52158 23931,Bargstedt,3008,NI,82,DE,53.46667,9.45 23938,Barnstorf,3008,NI,82,DE,52.71009,8.50256 23942,Barsinghausen,3008,NI,82,DE,52.3,9.45 23950,Barßel,3008,NI,82,DE,53.16981,7.75012 23946,Barum,3008,NI,82,DE,53.35,10.4 23948,Barver,3008,NI,82,DE,52.62066,8.59251 23949,Barwedel,3008,NI,82,DE,52.52192,10.77488 23951,Basdahl,3008,NI,82,DE,53.44502,9.00025 23953,Bassum,3008,NI,82,DE,52.85059,8.72791 23964,Bawinkel,3008,NI,82,DE,52.6,7.4 23976,Beckdorf,3008,NI,82,DE,53.41667,9.61667 23977,Beckedorf,3008,NI,82,DE,52.35,9.31667 23981,Beedenbostel,3008,NI,82,DE,52.64288,10.25907 23988,Beesten,3008,NI,82,DE,52.43333,7.5 23991,Bei der Höhne,3008,NI,82,DE,53.51351,9.11191 24004,Belm,3008,NI,82,DE,52.3,8.13333 24007,Bendestorf,3008,NI,82,DE,53.33583,9.96154 24031,Berge,3008,NI,82,DE,52.62326,7.7455 24033,Bergen,3008,NI,82,DE,52.80837,9.96374 24036,Bergen an der Dumme,3008,NI,82,DE,52.89109,10.95629 24073,Bersenbrück,3008,NI,82,DE,52.5516,7.94836 24077,Berumbur,3008,NI,82,DE,53.6,7.31667 24081,Betheln,3008,NI,82,DE,52.11431,9.79397 24084,Betzendorf,3008,NI,82,DE,53.1375,10.31273 24090,Bevenrode,3008,NI,82,DE,52.34026,10.57743 24091,Bevern,3008,NI,82,DE,51.85826,9.49408 24092,Beverstedt,3008,NI,82,DE,53.43413,8.81915 24109,Bienenbüttel,3008,NI,82,DE,53.14157,10.48679 24120,Bilshausen,3008,NI,82,DE,51.62974,10.15859 24125,Binnen,3008,NI,82,DE,52.61667,9.13333 24129,Bippen,3008,NI,82,DE,52.58333,7.73333 24155,Bispingen,3008,NI,82,DE,53.08312,9.99772 24156,Bissendorf,3008,NI,82,DE,52.23333,8.16667 24175,Bleckede,3008,NI,82,DE,53.28972,10.73372 24179,Blender,3008,NI,82,DE,52.91667,9.13333 24180,Bliedersdorf,3008,NI,82,DE,53.48333,9.56667 24185,Blomberg,3008,NI,82,DE,53.57678,7.55824 24198,Bockenem,3008,NI,82,DE,52.00993,10.13197 24200,Bockhorn,3008,NI,82,DE,53.4,8.01667 24202,Bockhorst,3008,NI,82,DE,53.03296,7.57576 24204,Bodenfelde,3008,NI,82,DE,51.64044,9.55569 24208,Bodenwerder,3008,NI,82,DE,51.97156,9.51931 24213,Boffzen,3008,NI,82,DE,51.75,9.38333 24216,Bohmte,3008,NI,82,DE,52.36667,8.31667 24219,Bokel,3008,NI,82,DE,53.39326,8.76803 24228,Bomlitz,3008,NI,82,DE,52.9,9.65 24472,Börger,3008,NI,82,DE,52.91211,7.53576 24247,Borkum,3008,NI,82,DE,53.58094,6.69153 24477,Börßum,3008,NI,82,DE,52.06921,10.58431 24258,Borstel,3008,NI,82,DE,52.67034,8.96896 24479,Bösel,3008,NI,82,DE,53.0,7.95 24482,Bötersen,3008,NI,82,DE,53.13333,9.31667 24262,Bothel,3008,NI,82,DE,53.06667,9.5 24266,Bovenden,3008,NI,82,DE,51.58836,9.9222 24270,Brackel,3008,NI,82,DE,53.29974,10.0486 24273,Brake (Unterweser),3008,NI,82,DE,53.33333,8.48333 24275,Bramsche,3008,NI,82,DE,52.40881,7.97288 24276,Bramstedt,3008,NI,82,DE,53.36603,8.69005 24288,Braunlage,3008,NI,82,DE,51.72651,10.6109 24291,Braunschweig,3008,NI,82,DE,52.26594,10.52673 24294,Breddorf,3008,NI,82,DE,53.29262,9.08089 24322,Bremervörde,3008,NI,82,DE,53.48458,9.14306 24334,Brietlingen,3008,NI,82,DE,53.33333,10.45 24339,Brockel,3008,NI,82,DE,53.1,9.51667 24340,Brockum,3008,NI,82,DE,52.46667,8.41667 24345,Brome,3008,NI,82,DE,52.60019,10.93754 24348,Bruchhausen-Vilsen,3008,NI,82,DE,52.82931,8.99066 24370,Brüggen,3008,NI,82,DE,52.0425,9.7745 24392,Buchholz,3008,NI,82,DE,53.00884,9.56287 24393,Buchholz in der Nordheide,3008,NI,82,DE,53.32641,9.86812 24490,Bückeburg,3008,NI,82,DE,52.26065,9.04939 24491,Bücken,3008,NI,82,DE,52.77876,9.13371 24492,Büddenstedt,3008,NI,82,DE,52.17035,11.01877 24499,Bühren,3008,NI,82,DE,52.80629,8.2188 24402,Bunde,3008,NI,82,DE,53.18333,7.26667 24415,Burgdorf,3008,NI,82,DE,52.44628,10.0064 24449,Butjadingen,3008,NI,82,DE,53.54722,8.335 24457,Buxtehude,3008,NI,82,DE,53.46716,9.68636 24511,Cadenberge,3008,NI,82,DE,53.76926,9.06269 24515,Calberlah,3008,NI,82,DE,52.42074,10.62326 24521,Cappeln,3008,NI,82,DE,52.81085,8.11474 24528,Celle,3008,NI,82,DE,52.62264,10.08047 24538,Clausthal-Zellerfeld,3008,NI,82,DE,51.80949,10.33821 24541,Clenze,3008,NI,82,DE,52.93729,10.9575 24543,Cloppenburg,3008,NI,82,DE,52.84754,8.045 24552,Coppenbrügge,3008,NI,82,DE,52.11852,9.5487 24560,Cremlingen,3008,NI,82,DE,52.25,10.65 24570,Cuxhaven,3008,NI,82,DE,53.87176,8.69087 24580,Dahlenburg,3008,NI,82,DE,53.18767,10.7365 24588,Damme,3008,NI,82,DE,52.52157,8.19793 24591,Danndorf,3008,NI,82,DE,52.42472,10.91286 24592,Dannenberg,3008,NI,82,DE,53.0967,11.09001 24599,Dassel,3008,NI,82,DE,51.80179,9.68904 24608,Dedelstorf,3008,NI,82,DE,52.7,10.5 24609,Deensen,3008,NI,82,DE,51.86053,9.59322 24617,Deinste,3008,NI,82,DE,53.52903,9.44376 24625,Delligsen,3008,NI,82,DE,51.9412,9.80272 24626,Delmenhorst,3008,NI,82,DE,53.0511,8.63091 24642,Dersum,3008,NI,82,DE,52.96112,7.27394 24644,Destedt,3008,NI,82,DE,52.23801,10.71063 24645,Detern,3008,NI,82,DE,53.20927,7.67395 24646,Detmerode,3008,NI,82,DE,52.39016,10.7448 24654,Dettum,3008,NI,82,DE,52.17246,10.66807 24658,Deutsch Evern,3008,NI,82,DE,53.2,10.43333 24662,Didderse,3008,NI,82,DE,52.38042,10.40294 24667,Diekholzen,3008,NI,82,DE,52.09617,9.91945 24670,Diepholz,3008,NI,82,DE,52.60783,8.37005 24697,Dinklage,3008,NI,82,DE,52.66223,8.1244 24705,Dissen,3008,NI,82,DE,52.11591,8.19956 24720,Dohren,3008,NI,82,DE,52.65,7.58333 24721,Dollbergen,3008,NI,82,DE,52.40671,10.18098 24722,Dollern,3008,NI,82,DE,53.53333,9.55 24745,Dornum,3008,NI,82,DE,53.64648,7.42957 24800,Dörpen,3008,NI,82,DE,52.96469,7.32273 24748,Dorum,3008,NI,82,DE,53.6879,8.56734 24802,Dörverden,3008,NI,82,DE,52.85,9.23333 24804,Dötlingen,3008,NI,82,DE,52.93333,8.38333 24752,Drage,3008,NI,82,DE,53.41667,10.26667 24753,Drakenburg,3008,NI,82,DE,52.68689,9.21083 24754,Drangstedt,3008,NI,82,DE,53.61359,8.75576 24755,Dransfeld,3008,NI,82,DE,51.4991,9.76179 24767,Drentwede,3008,NI,82,DE,52.74388,8.56504 24770,Drochtersen,3008,NI,82,DE,53.71015,9.38463 24777,Duderstadt,3008,NI,82,DE,51.51312,10.25951 24779,Duingen,3008,NI,82,DE,52.00449,9.69578 24808,Dünsen,3008,NI,82,DE,52.92749,8.64191 24783,Dunum,3008,NI,82,DE,53.6,7.65 24827,Ebergötzen,3008,NI,82,DE,51.57096,10.10632 24836,Ebersdorf,3008,NI,82,DE,53.52514,9.04897 24844,Ebstorf,3008,NI,82,DE,53.02785,10.41839 24845,Echem,3008,NI,82,DE,53.33333,10.53333 24854,Edemissen,3008,NI,82,DE,52.38702,10.2614 24859,Edewecht,3008,NI,82,DE,53.12699,7.98406 24869,Egestorf,3008,NI,82,DE,52.28568,9.51676 24875,Eggermühlen,3008,NI,82,DE,52.56667,7.81667 24892,Ehrenburg,3008,NI,82,DE,52.75,8.7 24909,Eicklingen,3008,NI,82,DE,52.55037,10.18439 24915,Eime,3008,NI,82,DE,52.07449,9.72118 24917,Eimen,3008,NI,82,DE,51.88333,9.78333 24918,Eimke,3008,NI,82,DE,52.96601,10.31324 24920,Einbeck,3008,NI,82,DE,51.82018,9.86961 24922,Eisdorf am Harz,3008,NI,82,DE,51.76152,10.17591 24939,Elbe,3008,NI,82,DE,52.08333,10.28333 24942,Eldingen,3008,NI,82,DE,52.68333,10.33333 24962,Elsdorf,3008,NI,82,DE,53.2412,9.35056 24967,Elsfleth,3008,NI,82,DE,53.23748,8.45664 24980,Elze,3008,NI,82,DE,52.12263,9.73595 24981,Embsen,3008,NI,82,DE,53.17606,10.34625 24982,Emden,3008,NI,82,DE,53.36745,7.20778 24985,Emlichheim,3008,NI,82,DE,52.61667,6.85 24993,Emsbüren,3008,NI,82,DE,52.4,7.3 24996,Emstek,3008,NI,82,DE,52.83333,8.15 24997,Emtinghausen,3008,NI,82,DE,52.93333,8.96667 25000,Engeln,3008,NI,82,DE,52.79363,8.91815 25047,Erkerode,3008,NI,82,DE,52.20485,10.70982 25078,Eschede,3008,NI,82,DE,52.73494,10.2354 25082,Eschershausen,3008,NI,82,DE,51.92664,9.64282 25086,Esens,3008,NI,82,DE,53.64866,7.61267 25092,Essel,3008,NI,82,DE,52.69131,9.64141 25094,Essen,3008,NI,82,DE,52.72258,7.9371 25103,Esterwegen,3008,NI,82,DE,52.99288,7.63327 25105,Estorf,3008,NI,82,DE,52.5885,9.14147 25121,Evessen,3008,NI,82,DE,52.18888,10.71081 25122,Eydelstedt,3008,NI,82,DE,52.69241,8.54668 25123,Eyendorf,3008,NI,82,DE,53.2,10.15 25124,Eystrup,3008,NI,82,DE,52.77935,9.21315 25146,Faßberg,3008,NI,82,DE,52.9,10.16667 25147,Fedderwarden,3008,NI,82,DE,53.56142,8.04371 25171,Filsum,3008,NI,82,DE,53.24213,7.62785 25177,Fintel,3008,NI,82,DE,53.17188,9.66969 25201,Flöthe,3008,NI,82,DE,52.08333,10.48333 25236,Freden,3008,NI,82,DE,51.92771,9.8935 25241,Freiburg,3008,NI,82,DE,53.82529,9.28803 25255,Freren,3008,NI,82,DE,52.487,7.54313 25272,Friedeburg,3008,NI,82,DE,53.45,7.83333 25283,Friedland,3008,NI,82,DE,51.41917,9.91762 25300,Friesoythe,3008,NI,82,DE,53.0226,7.85764 25326,Fürstenau,3008,NI,82,DE,52.51667,7.6767 25327,Fürstenberg,3008,NI,82,DE,51.73333,9.4 25356,Ganderkesee,3008,NI,82,DE,53.03333,8.53333 25360,Garbsen,3008,NI,82,DE,52.41371,9.5899 25361,Garbsen-Mitte,3008,NI,82,DE,52.42659,9.60383 25366,Garlstorf,3008,NI,82,DE,53.23728,10.10137 25368,Garrel,3008,NI,82,DE,52.95,8.01667 25370,Garstedt,3008,NI,82,DE,53.28467,10.16137 25372,Gartow,3008,NI,82,DE,53.0247,11.462 25389,Geeste,3008,NI,82,DE,52.6,7.26667 25392,Gehrde,3008,NI,82,DE,52.57684,8.00342 25393,Gehrden,3008,NI,82,DE,52.31362,9.60033 25419,Gemeinde Friedland,3008,NI,82,DE,51.41667,9.93333 25432,Georgsdorf,3008,NI,82,DE,52.56667,7.08333 25433,Georgsmarienhütte,3008,NI,82,DE,52.20296,8.0448 25440,Gerdau,3008,NI,82,DE,52.96667,10.41667 25461,Gersten,3008,NI,82,DE,52.58333,7.51667 25481,Gieboldehausen,3008,NI,82,DE,51.60962,10.21619 25486,Giesen,3008,NI,82,DE,52.19716,9.8989 25488,Gifhorn,3008,NI,82,DE,52.47774,10.5511 25492,Gilten,3008,NI,82,DE,52.7,9.58333 25498,Gittelde,3008,NI,82,DE,51.7984,10.1878 25502,Glandorf,3008,NI,82,DE,52.08474,7.99944 25522,Gnarrenburg,3008,NI,82,DE,53.38333,9.0 25532,Goldenstedt,3008,NI,82,DE,52.78833,8.43201 25534,Golmbach,3008,NI,82,DE,51.9,9.55 25547,Goslar,3008,NI,82,DE,51.90425,10.42766 25788,Göttingen,3008,NI,82,DE,51.53443,9.93228 25569,Grafhorst,3008,NI,82,DE,52.44482,10.94513 25578,Grasberg,3008,NI,82,DE,53.18333,8.98333 25580,Grasleben,3008,NI,82,DE,52.30638,11.01465 25615,Gronau,3008,NI,82,DE,52.0846,9.77678 25623,Groß Ippener,3008,NI,82,DE,52.96667,8.61667 25631,Groß Munzel,3008,NI,82,DE,52.36554,9.47828 25633,Groß Oesingen,3008,NI,82,DE,52.64761,10.46366 25640,Groß Twülpstedt,3008,NI,82,DE,52.37361,10.91929 25665,Großenkneten,3008,NI,82,DE,52.94377,8.25323 25672,Großgoltern,3008,NI,82,DE,52.33261,9.50111 25738,Grünendeich,3008,NI,82,DE,53.56952,9.61218 25750,Guderhandviertel,3008,NI,82,DE,53.54919,9.6096 25772,Gyhum,3008,NI,82,DE,53.21667,9.31667 25815,Hage,3008,NI,82,DE,53.60274,7.28527 25817,Hagen,3008,NI,82,DE,52.19629,7.98041 25819,Hagen im Bremischen,3008,NI,82,DE,53.35707,8.64341 25821,Hagenburg,3008,NI,82,DE,52.43367,9.32473 25843,Halbemond,3008,NI,82,DE,53.5671,7.29038 25852,Halle,3008,NI,82,DE,51.99122,9.56532 25864,Hambergen,3008,NI,82,DE,53.30826,8.8252 25870,Hambühren,3008,NI,82,DE,52.63333,9.98333 25872,Hameln,3008,NI,82,DE,52.10397,9.35623 25875,Hammah,3008,NI,82,DE,53.61667,9.36667 25883,Handeloh,3008,NI,82,DE,53.24563,9.83923 25885,Handorf,3008,NI,82,DE,53.34084,10.34652 26296,Hänigsen,3008,NI,82,DE,52.48425,10.09129 25889,Hankensbüttel,3008,NI,82,DE,52.73333,10.6 25890,Hannover,3008,NI,82,DE,52.37052,9.73322 25891,Hannoversch Münden,3008,NI,82,DE,51.41505,9.65046 25893,Hanstedt,3008,NI,82,DE,53.26667,10.01667 25894,Hanstedt Eins,3008,NI,82,DE,53.04642,10.37444 25899,Hardegsen,3008,NI,82,DE,51.65227,9.8305 25902,Haren,3008,NI,82,DE,52.79262,7.24142 25904,Harpstedt,3008,NI,82,DE,52.90942,8.58962 25907,Harsefeld,3008,NI,82,DE,53.45399,9.50297 25910,Harsum,3008,NI,82,DE,52.21045,9.96486 25920,Hasbergen,3008,NI,82,DE,52.23754,7.96114 25927,Haselünne,3008,NI,82,DE,52.67412,7.4846 25961,Haßbergen,3008,NI,82,DE,52.73333,9.23333 25931,Hassel,3008,NI,82,DE,52.69688,8.83198 25933,Hassendorf,3008,NI,82,DE,53.10859,9.26482 25934,Haste,3008,NI,82,DE,52.38105,9.3928 25935,Hatten,3008,NI,82,DE,53.05,8.38333 25941,Hattorf,3008,NI,82,DE,51.65035,10.23681 25957,Haverlah,3008,NI,82,DE,52.06667,10.16667 25969,Hechthausen,3008,NI,82,DE,53.64041,9.23942 25973,Heede,3008,NI,82,DE,52.99205,7.2983 25975,Heemsen,3008,NI,82,DE,52.7,9.26667 25976,Heere,3008,NI,82,DE,52.06667,10.25 25977,Heeslingen,3008,NI,82,DE,53.31667,9.33333 25978,Heeßen,3008,NI,82,DE,52.23211,9.09642 25979,Hehlen,3008,NI,82,DE,51.98858,9.47004 25984,Heidenau,3008,NI,82,DE,53.31667,9.66667 26011,Heinade,3008,NI,82,DE,51.83333,9.63333 26012,Heinböckel,3008,NI,82,DE,53.57457,9.32644 26016,Heinsen,3008,NI,82,DE,52.06257,9.66316 26028,Hellwege,3008,NI,82,DE,53.07346,9.23566 26032,Helmstedt,3008,NI,82,DE,52.2279,11.00985 26033,Helpsen,3008,NI,82,DE,52.31131,9.11676 26040,Hemmingen,3008,NI,82,DE,52.31425,9.72359 26043,Hemmoor,3008,NI,82,DE,53.68702,9.15492 26045,Hemsbünde,3008,NI,82,DE,53.08998,9.47261 26046,Hemslingen,3008,NI,82,DE,53.08333,9.6 26056,Hepstedt,3008,NI,82,DE,53.25874,9.08209 26075,Hermannsburg,3008,NI,82,DE,52.83254,10.08957 26099,Herzberg am Harz,3008,NI,82,DE,51.65546,10.33938 26101,Herzlake,3008,NI,82,DE,52.6853,7.59946 26104,Hesel,3008,NI,82,DE,53.3,7.6 26105,Hespe,3008,NI,82,DE,52.32999,9.10818 26108,Hessisch Oldendorf,3008,NI,82,DE,52.17269,9.24913 26122,Heuerßen,3008,NI,82,DE,52.32946,9.27718 26127,Heyersum,3008,NI,82,DE,52.15678,9.81265 26137,Hildesheim,3008,NI,82,DE,52.15077,9.95112 26139,Hilgermissen,3008,NI,82,DE,52.85,9.16667 26143,Hillerse,3008,NI,82,DE,51.68558,9.94973 26148,Hilter,3008,NI,82,DE,52.13573,8.14715 26151,Himbergen,3008,NI,82,DE,53.09418,10.72909 26153,Himmelpforten,3008,NI,82,DE,53.61413,9.30516 26155,Hinte,3008,NI,82,DE,53.41667,7.18333 26159,Hipstedt,3008,NI,82,DE,53.48333,8.96667 26170,Hitzacker,3008,NI,82,DE,53.15254,11.04418 26183,Hodenhagen,3008,NI,82,DE,52.76506,9.59495 26206,Hohenhameln,3008,NI,82,DE,52.25755,10.06416 26225,Hohnhorst,3008,NI,82,DE,52.36942,9.37168 26228,Holdorf,3008,NI,82,DE,52.58333,8.11667 26229,Holle,3008,NI,82,DE,52.08721,10.16012 26232,Hollenstedt,3008,NI,82,DE,53.36667,9.71667 26238,Holtland,3008,NI,82,DE,53.28333,7.58333 26248,Holzminden,3008,NI,82,DE,51.82798,9.4455 26253,Hoogstede,3008,NI,82,DE,52.58333,6.95 26316,Hörden,3008,NI,82,DE,51.66835,10.28372 26267,Hornburg,3008,NI,82,DE,52.03095,10.6049 26268,Horneburg,3008,NI,82,DE,53.50672,9.57546 26273,Horstedt,3008,NI,82,DE,53.18333,9.23333 26276,Hoya,3008,NI,82,DE,52.80781,9.14028 26279,Hude,3008,NI,82,DE,53.10766,8.46322 26280,Huede,3008,NI,82,DE,52.49588,8.35804 26336,Hülsede,3008,NI,82,DE,52.24951,9.36147 26291,Husum,3008,NI,82,DE,52.56667,9.25 26360,Ihlienworth,3008,NI,82,DE,53.73333,8.91667 26374,Ilsede,3008,NI,82,DE,52.2634,10.19922 26412,Isenbüttel,3008,NI,82,DE,52.43333,10.58333 26414,Isernhagen Farster Bauerschaft,3008,NI,82,DE,52.47093,9.84179 26420,Itterbeck,3008,NI,82,DE,52.50618,6.80354 26428,Jameln,3008,NI,82,DE,53.05,11.08333 26433,Jembke,3008,NI,82,DE,52.5,10.76667 26434,Jemgum,3008,NI,82,DE,53.26667,7.38333 26440,Jerxheim,3008,NI,82,DE,52.08172,10.89844 26445,Jesteburg,3008,NI,82,DE,53.30966,9.95262 26450,Jever,3008,NI,82,DE,53.57368,7.89806 26458,Jork,3008,NI,82,DE,53.53198,9.68076 26472,Jühnde,3008,NI,82,DE,51.46667,9.8 26461,Juist,3008,NI,82,DE,53.67787,6.99575 26485,Kakenstorf,3008,NI,82,DE,53.30317,9.76289 26488,Kalefeld,3008,NI,82,DE,51.8,10.03333 26536,Katlenburg-Lindau,3008,NI,82,DE,51.68333,10.1 26576,Kettenkamp,3008,NI,82,DE,52.58333,7.83333 26601,Kirchbrak,3008,NI,82,DE,51.96585,9.5751 26604,Kirchdorf,3008,NI,82,DE,52.59523,8.8349 26614,Kirchgellersen,3008,NI,82,DE,53.23333,10.3 26630,Kirchlinteln,3008,NI,82,DE,52.94236,9.31811 26632,Kirchseelte,3008,NI,82,DE,52.95,8.68333 26634,Kirchtimke,3008,NI,82,DE,53.25,9.15 26636,Kirchwalsede,3008,NI,82,DE,53.01667,9.4 26648,Kissenbrück,3008,NI,82,DE,52.10956,10.58996 26658,Klein Berßen,3008,NI,82,DE,52.76797,7.46182 26659,Klein Gusborn,3008,NI,82,DE,53.08331,11.19323 26665,Klein Schwülper,3008,NI,82,DE,52.34153,10.42903 26697,Kluse,3008,NI,82,DE,52.93633,7.34093 26833,Königslutter am Elm,3008,NI,82,DE,52.25116,10.81683 26745,Krebeck,3008,NI,82,DE,51.58333,10.11667 26747,Kreiensen,3008,NI,82,DE,51.85363,9.96481 26851,Kührstedt,3008,NI,82,DE,53.57747,8.80091 26861,Küsten,3008,NI,82,DE,52.97779,11.0624 26808,Kutenholz,3008,NI,82,DE,53.48152,9.32118 26863,Laar,3008,NI,82,DE,52.35581,8.25388 26864,Laatzen,3008,NI,82,DE,52.31506,9.79739 26869,Lachendorf,3008,NI,82,DE,52.61667,10.25 27184,Lähden,3008,NI,82,DE,52.74547,7.57036 26887,Lamspringe,3008,NI,82,DE,51.96071,10.01105 26888,Lamstedt,3008,NI,82,DE,53.63333,9.1 26891,Landesbergen,3008,NI,82,DE,52.55598,9.12505 26892,Landolfshausen,3008,NI,82,DE,51.53333,10.1 26901,Langelsheim,3008,NI,82,DE,51.93789,10.33264 26903,Langen,3008,NI,82,DE,53.60554,8.59509 26919,Langenhagen,3008,NI,82,DE,52.44758,9.73741 26933,Langeoog,3008,NI,82,DE,53.75,7.48333 26939,Langlingen,3008,NI,82,DE,52.55593,10.28291 26945,Langwedel,3008,NI,82,DE,52.97864,9.18542 26953,Lastrup,3008,NI,82,DE,52.79468,7.86715 26954,Lathen,3008,NI,82,DE,52.86667,7.31667 26966,Lauenau,3008,NI,82,DE,52.27393,9.36928 26967,Lauenbrück,3008,NI,82,DE,53.2,9.56667 26969,Lauenhagen,3008,NI,82,DE,52.35547,9.20637 26999,Leer,3008,NI,82,DE,53.23157,7.461 27000,Leese,3008,NI,82,DE,52.5,9.11667 27001,Leezdorf,3008,NI,82,DE,53.55,7.3 27011,Lehre,3008,NI,82,DE,52.33333,10.66667 27013,Lehrte,3008,NI,82,DE,52.37193,9.97919 27018,Leiferde,3008,NI,82,DE,52.20445,10.50842 27034,Lemförde,3008,NI,82,DE,52.46557,8.37621 27037,Lemwerder,3008,NI,82,DE,53.16667,8.61667 27039,Lengede,3008,NI,82,DE,52.20487,10.30775 27043,Lengerich,3008,NI,82,DE,52.55381,7.53164 27087,Liebenau,3008,NI,82,DE,52.60362,9.09719 27088,Liebenburg,3008,NI,82,DE,52.02176,10.43169 27096,Lilienthal,3008,NI,82,DE,53.14193,8.90338 27110,Lindhorst,3008,NI,82,DE,52.35789,9.28319 27113,Lindwedel,3008,NI,82,DE,52.60784,9.68737 27114,Lingen,3008,NI,82,DE,52.52143,7.31845 27118,Lintig,3008,NI,82,DE,53.60341,8.87876 27135,Lohne,3008,NI,82,DE,52.66625,8.2375 27196,Löningen,3008,NI,82,DE,52.73678,7.75809 27150,Lorup,3008,NI,82,DE,52.92495,7.64339 27156,Loxstedt,3008,NI,82,DE,53.46667,8.65 27210,Lüchow,3008,NI,82,DE,52.96811,11.15397 27212,Lüder,3008,NI,82,DE,52.80878,10.66609 27215,Lüdersfeld,3008,NI,82,DE,52.35993,9.25422 27170,Luhden,3008,NI,82,DE,52.22538,9.09256 27218,Lüneburg,3008,NI,82,DE,53.2509,10.41409 27175,Lunestedt,3008,NI,82,DE,53.43621,8.75193 27220,Lünne,3008,NI,82,DE,52.42958,7.42653 27180,Lutter am Barenberge,3008,NI,82,DE,51.98943,10.2693 27276,Marienhafe,3008,NI,82,DE,53.52274,7.27306 27279,Mariental,3008,NI,82,DE,52.27593,10.98371 27289,Marklohe,3008,NI,82,DE,52.66857,9.14219 27326,Marschacht,3008,NI,82,DE,53.4152,10.37524 27328,Martfeld,3008,NI,82,DE,52.87572,9.06081 27332,Marxen,3008,NI,82,DE,53.31211,10.00415 27366,Meerbeck,3008,NI,82,DE,52.34174,9.15067 27368,Meerdorf,3008,NI,82,DE,52.34583,10.31745 27381,Meinersen,3008,NI,82,DE,52.47436,10.35247 27390,Melbeck,3008,NI,82,DE,53.18333,10.4 27393,Melle,3008,NI,82,DE,52.20197,8.33826 27396,Mellinghausen,3008,NI,82,DE,52.70697,8.89704 27411,Menslage,3008,NI,82,DE,52.68333,7.81667 27413,Meppen,3008,NI,82,DE,52.69064,7.29097 27428,Merzen,3008,NI,82,DE,52.48333,7.83333 27435,Messingen,3008,NI,82,DE,52.46667,7.46667 27458,Midlum,3008,NI,82,DE,53.73135,8.61695 27479,Mittegroßefehn,3008,NI,82,DE,53.39165,7.56602 27503,Moisburg,3008,NI,82,DE,53.4062,9.6988 27504,Molbergen,3008,NI,82,DE,52.85805,7.92548 27524,Moringen,3008,NI,82,DE,51.69915,9.87107 27527,Morsum,3008,NI,82,DE,52.95347,9.07962 27585,Müden,3008,NI,82,DE,52.52771,10.36011 27543,Munster,3008,NI,82,DE,52.98569,10.08756 27637,Nahrendorf,3008,NI,82,DE,53.17389,10.81381 27687,Neu Darchau,3008,NI,82,DE,53.22901,10.88529 27690,Neu Wulmstorf,3008,NI,82,DE,53.46667,9.8 27710,Neubörger,3008,NI,82,DE,52.95815,7.44839 27703,Neubrück,3008,NI,82,DE,52.37088,10.41761 27721,Neuenkirchen,3008,NI,82,DE,52.13778,8.38835 27738,Neuharlingersiel,3008,NI,82,DE,53.69993,7.70288 27742,Neuhaus an der Oste,3008,NI,82,DE,53.80043,9.03348 27754,Neukamperfehn,3008,NI,82,DE,53.33642,7.56189 27799,Neustadt am Rübenberge,3008,NI,82,DE,52.50462,9.45871 27855,Niederlangen,3008,NI,82,DE,52.85712,7.28199 27865,Niedernwöhren,3008,NI,82,DE,52.35214,9.14788 27892,Nienburg,3008,NI,82,DE,52.6461,9.22086 27895,Nienstädt,3008,NI,82,DE,52.29242,9.1644 27911,Norddeich,3008,NI,82,DE,53.61349,7.16043 27912,Norden,3008,NI,82,DE,53.59552,7.20639 27914,Nordenham,3008,NI,82,DE,53.4861,8.48093 27915,Norderney,3008,NI,82,DE,53.70828,7.15819 27922,Nordholz,3008,NI,82,DE,53.78448,8.61354 27923,Nordhorn,3008,NI,82,DE,52.43081,7.06833 27925,Nordleda,3008,NI,82,DE,53.76667,8.83333 27927,Nordstemmen,3008,NI,82,DE,52.16196,9.7835 27947,Nörten-Hardenberg,3008,NI,82,DE,51.62878,9.93593 27930,Northeim,3008,NI,82,DE,51.70662,9.99997 27931,Nortmoor,3008,NI,82,DE,53.24608,7.57178 27933,Nortrup,3008,NI,82,DE,52.61503,7.86072 27936,Nottensdorf,3008,NI,82,DE,53.48333,9.6 28005,Oberndorf,3008,NI,82,DE,53.75,9.15 28007,Obernfeld,3008,NI,82,DE,51.55,10.23333 28010,Obernkirchen,3008,NI,82,DE,52.2721,9.12912 28074,Oederquart,3008,NI,82,DE,53.80267,9.2368 28080,Oerel,3008,NI,82,DE,53.48333,9.05 28105,Oldenburg,3008,NI,82,DE,53.14118,8.21467 28108,Oldendorf,3008,NI,82,DE,53.1558,10.21431 28139,Osloß,3008,NI,82,DE,52.46925,10.68011 28140,Osnabrück,3008,NI,82,DE,52.27264,8.0498 28143,Osteel,3008,NI,82,DE,53.54417,7.254 28145,Osten,3008,NI,82,DE,53.7,9.2 28149,Ostercappeln,3008,NI,82,DE,52.35,8.23333 28153,Osterholz-Scharmbeck,3008,NI,82,DE,53.22698,8.79528 28156,Osterode am Harz,3008,NI,82,DE,51.72686,10.25089 28166,Ostrhauderfehn,3008,NI,82,DE,53.13333,7.61667 28183,Ottenstein,3008,NI,82,DE,51.94707,9.407 28184,Otter,3008,NI,82,DE,53.24015,9.74247 28188,Otterndorf,3008,NI,82,DE,53.80908,8.90068 28189,Ottersberg,3008,NI,82,DE,53.1099,9.14408 28199,Ovelgönne,3008,NI,82,DE,53.34189,8.42179 28205,Oyten,3008,NI,82,DE,53.05,9.01667 28218,Papenburg,3008,NI,82,DE,53.07738,7.40444 28225,Parsau,3008,NI,82,DE,52.53471,10.8902 28234,Pattensen,3008,NI,82,DE,52.26448,9.76436 28242,Peine,3008,NI,82,DE,52.31928,10.2352 28253,Pennigsehl,3008,NI,82,DE,52.64181,9.0263 28343,Polle,3008,NI,82,DE,51.89871,9.40386 28345,Pollhagen,3008,NI,82,DE,52.38529,9.18813 28424,Quakenbrück,3008,NI,82,DE,52.67502,7.94983 28439,Radbruch,3008,NI,82,DE,53.31667,10.28333 28440,Raddestorf,3008,NI,82,DE,52.45,8.96667 28480,Rastede,3008,NI,82,DE,53.25,8.2 28505,Rechtsupweg,3008,NI,82,DE,53.53333,7.33333 28511,Reeßum,3008,NI,82,DE,53.13333,9.21667 28515,Regesbostel,3008,NI,82,DE,53.38333,9.65 28529,Rehburg-Loccum,3008,NI,82,DE,52.46952,9.19957 28530,Rehden,3008,NI,82,DE,52.61024,8.48093 28566,Reinstorf,3008,NI,82,DE,53.23445,10.57323 28573,Remlingen,3008,NI,82,DE,52.11367,10.67408 28585,Reppenstedt,3008,NI,82,DE,53.25,10.35 28587,Rethem,3008,NI,82,DE,52.78621,9.37862 28588,Rethen,3008,NI,82,DE,52.37707,10.47855 28598,Rhade,3008,NI,82,DE,53.32872,9.1135 28602,Rhede,3008,NI,82,DE,53.0602,7.27127 28603,Rheden,3008,NI,82,DE,52.05784,9.78714 28619,Rhumspringe,3008,NI,82,DE,51.58333,10.3 28620,Ribbesbüttel,3008,NI,82,DE,52.43435,10.50997 28627,Riede,3008,NI,82,DE,52.96667,8.95 28648,Rieste,3008,NI,82,DE,52.48333,8.01667 28664,Rinteln,3008,NI,82,DE,52.18604,9.07917 28667,Ritterhude,3008,NI,82,DE,53.18289,8.7355 28677,Rodenberg,3008,NI,82,DE,52.31152,9.3564 28783,Röhrsen,3008,NI,82,DE,52.71078,9.23139 28699,Ronnenberg,3008,NI,82,DE,52.31939,9.65544 28703,Rosche,3008,NI,82,DE,52.98663,10.75184 28704,Rosdorf,3008,NI,82,DE,51.5,9.9 28718,Rotenburg,3008,NI,82,DE,53.11125,9.41082 28788,Rötgesbüttel,3008,NI,82,DE,52.41667,10.53333 28804,Rühen,3008,NI,82,DE,52.4856,10.88642 28761,Rullstorf,3008,NI,82,DE,53.28645,10.52972 28822,Sachsenhagen,3008,NI,82,DE,52.39734,9.26791 28838,Salzbergen,3008,NI,82,DE,52.33333,7.35 28839,Salzgitter,3008,NI,82,DE,52.15705,10.4154 28840,Salzhausen,3008,NI,82,DE,53.22339,10.16981 28841,Salzhemmendorf,3008,NI,82,DE,52.067,9.5872 28852,Sande,3008,NI,82,DE,53.50489,8.01418 28857,Sandstedt,3008,NI,82,DE,53.35981,8.52137 28860,Sankt Andreasberg,3008,NI,82,DE,51.71004,10.51867 28885,Sarstedt,3008,NI,82,DE,52.23495,9.85411 28890,Sassenburg,3008,NI,82,DE,52.51667,10.63333 28894,Sauensiek,3008,NI,82,DE,53.38333,9.6 28909,Schapen,3008,NI,82,DE,52.4,7.56667 28912,Scharnebeck,3008,NI,82,DE,53.29237,10.50188 28918,Scheden,3008,NI,82,DE,51.45,9.73333 28920,Scheeßel,3008,NI,82,DE,53.16667,9.48333 28926,Schellerten,3008,NI,82,DE,52.1853,10.10227 28942,Schiffdorf,3008,NI,82,DE,53.53333,8.65 28946,Schillig,3008,NI,82,DE,53.70378,8.0217 28958,Schladen,3008,NI,82,DE,52.02218,10.53967 29005,Schnega,3008,NI,82,DE,52.8913,10.89226 29009,Schneverdingen,3008,NI,82,DE,53.11685,9.79524 29127,Schöningen,3008,NI,82,DE,52.13802,10.96745 29135,Schöppenstedt,3008,NI,82,DE,52.14308,10.7745 29026,Schortens,3008,NI,82,DE,53.53333,7.95 29138,Schüttorf,3008,NI,82,DE,52.32281,7.22176 29045,Schwaförden,3008,NI,82,DE,52.73775,8.83026 29059,Schwanewede,3008,NI,82,DE,53.23333,8.6 29062,Schwarme,3008,NI,82,DE,52.9,9.01667 29063,Schwarmstedt,3008,NI,82,DE,52.67794,9.61767 29147,Seeburg,3008,NI,82,DE,51.56667,10.15 29161,Seelze,3008,NI,82,DE,52.39635,9.59727 29163,Seesen,3008,NI,82,DE,51.89095,10.17847 29165,Seevetal,3008,NI,82,DE,53.4,9.96667 29166,Seggebruch,3008,NI,82,DE,52.3005,9.09462 29167,Sehlde,3008,NI,82,DE,52.03887,10.26569 29168,Sehlem,3008,NI,82,DE,52.01236,9.97593 29170,Sehnde,3008,NI,82,DE,52.31394,9.9682 29183,Selsingen,3008,NI,82,DE,53.37329,9.21289 29200,Seulingen,3008,NI,82,DE,51.54129,10.16263 29205,Sibbesse,3008,NI,82,DE,52.05,9.9 29207,Sickte,3008,NI,82,DE,52.21847,10.6424 29209,Siedenburg,3008,NI,82,DE,52.69293,8.93961 29230,Sillenstede,3008,NI,82,DE,53.57437,7.985 29251,Sittensen,3008,NI,82,DE,53.27615,9.50429 29253,Soderstorf,3008,NI,82,DE,53.14275,10.14807 29491,Sögel,3008,NI,82,DE,52.85,7.51667 29492,Söhlde,3008,NI,82,DE,52.18898,10.23239 29262,Soltau,3008,NI,82,DE,52.98638,9.84338 29263,Soltendieck,3008,NI,82,DE,52.87369,10.76162 29281,Sottrum,3008,NI,82,DE,53.11667,9.23333 29295,Spelle,3008,NI,82,DE,52.36667,7.46667 29306,Sprakensehl,3008,NI,82,DE,52.76668,10.49177 29309,Springe,3008,NI,82,DE,52.20845,9.55416 29314,Stade,3008,NI,82,DE,53.59337,9.47629 29317,Stadensen,3008,NI,82,DE,52.87571,10.55619 29321,Stadthagen,3008,NI,82,DE,52.32333,9.20311 29327,Stadtoldendorf,3008,NI,82,DE,51.88242,9.6265 29348,Stedesdorf,3008,NI,82,DE,53.63333,7.66667 29355,Steimbke,3008,NI,82,DE,52.65483,9.39091 29373,Steinfeld,3008,NI,82,DE,52.58596,8.21417 29383,Steinhorst,3008,NI,82,DE,52.68333,10.4 29387,Steinkirchen,3008,NI,82,DE,53.56601,9.61111 29395,Stelle,3008,NI,82,DE,53.38416,10.11138 29407,Steyerberg,3008,NI,82,DE,52.57017,9.02423 29449,Stöckse,3008,NI,82,DE,52.64067,9.34027 29420,Stolzenau,3008,NI,82,DE,52.51667,9.06667 29442,Stuhr,3008,NI,82,DE,53.03333,8.75 29458,Suddendorf,3008,NI,82,DE,52.30096,7.22572 29459,Suderburg,3008,NI,82,DE,52.89586,10.45141 29498,Südergellersen,3008,NI,82,DE,53.21667,10.3 29460,Sudwalde,3008,NI,82,DE,52.79337,8.83611 29463,Suhlendorf,3008,NI,82,DE,52.93333,10.76667 29465,Sulingen,3008,NI,82,DE,52.68373,8.80949 29506,Süpplingen,3008,NI,82,DE,52.22811,10.90393 29483,Surwold,3008,NI,82,DE,52.978,7.51534 29508,Süstedt,3008,NI,82,DE,52.86165,8.92213 29484,Sustrum,3008,NI,82,DE,52.91667,7.28333 29486,Syke,3008,NI,82,DE,52.91345,8.82209 29528,Tappenbeck,3008,NI,82,DE,52.47055,10.74068 29529,Tarmstedt,3008,NI,82,DE,53.22505,9.07763 29560,Tespe,3008,NI,82,DE,53.3964,10.41084 29586,Thedinghausen,3008,NI,82,DE,52.96667,9.01667 29597,Thomasburg,3008,NI,82,DE,53.23333,10.66667 29599,Thuine,3008,NI,82,DE,52.5,7.48333 29608,Tiddische,3008,NI,82,DE,52.51667,10.8 29631,Toppenstedt,3008,NI,82,DE,53.2643,10.11451 29635,Tostedt,3008,NI,82,DE,53.28333,9.71667 29706,Tülau,3008,NI,82,DE,52.57578,10.87818 29696,Twistringen,3008,NI,82,DE,52.79926,8.64163 29713,Uchte,3008,NI,82,DE,52.49975,8.90928 29722,Uehrde,3008,NI,82,DE,52.09902,10.76523 29723,Uelsen,3008,NI,82,DE,52.5,6.88333 29725,Uelzen,3008,NI,82,DE,52.96572,10.56111 29729,Uetze,3008,NI,82,DE,52.46511,10.20467 29743,Ummern,3008,NI,82,DE,52.59111,10.43195 29768,Unterlüß,3008,NI,82,DE,52.83471,10.29685 29785,Upgant-Schott,3008,NI,82,DE,53.51667,7.28333 29799,Uslar,3008,NI,82,DE,51.6569,9.63501 29802,Uthlede,3008,NI,82,DE,53.31119,8.57861 29813,Varel,3008,NI,82,DE,53.39693,8.13621 29814,Varrel,3008,NI,82,DE,52.6215,8.7331 29816,Vechelde,3008,NI,82,DE,52.26038,10.36491 29817,Vechta,3008,NI,82,DE,52.72632,8.28598 29830,Velpke,3008,NI,82,DE,52.40797,10.93637 29832,Veltheim,3008,NI,82,DE,52.21874,10.68327 29834,Verden,3008,NI,82,DE,52.92343,9.23491 29843,Vienenburg,3008,NI,82,DE,51.95242,10.56374 29860,Visbek,3008,NI,82,DE,52.83333,8.31667 29861,Visselhövede,3008,NI,82,DE,52.98546,9.58265 29886,Vögelsen,3008,NI,82,DE,53.27447,10.35372 29877,Vollersode,3008,NI,82,DE,53.33333,8.91667 29878,Voltlage,3008,NI,82,DE,52.43333,7.75 29881,Vordorf,3008,NI,82,DE,52.36522,10.52035 29883,Vorwerk,3008,NI,82,DE,53.18333,9.15 29885,Vrees,3008,NI,82,DE,52.88333,7.76667 29896,Waake,3008,NI,82,DE,51.55637,10.05713 29914,Wagenfeld,3008,NI,82,DE,52.55,8.58333 29915,Wagenhoff,3008,NI,82,DE,52.55233,10.52337 29921,Wahrenholz,3008,NI,82,DE,52.61667,10.6 29930,Walchum,3008,NI,82,DE,52.92717,7.28325 29969,Walkenried,3008,NI,82,DE,51.58333,10.61667 29976,Wallenhorst,3008,NI,82,DE,52.35,8.01667 29993,Walsrode,3008,NI,82,DE,52.86147,9.5926 30005,Wangerooge,3008,NI,82,DE,53.79002,7.89938 30007,Wanna,3008,NI,82,DE,53.75,8.8 30013,Wardenburg,3008,NI,82,DE,53.06667,8.2 30019,Warmsen,3008,NI,82,DE,52.45695,8.84949 30029,Wasbüttel,3008,NI,82,DE,52.41331,10.59357 30039,Wathlingen,3008,NI,82,DE,52.5369,10.15069 30051,Weener,3008,NI,82,DE,53.16332,7.35052 30142,Welle,3008,NI,82,DE,53.23985,9.80178 30152,Wendeburg,3008,NI,82,DE,52.32957,10.39255 30156,Wendisch Evern,3008,NI,82,DE,53.21667,10.46667 30162,Wennigsen,3008,NI,82,DE,52.27404,9.57287 30165,Wenzendorf,3008,NI,82,DE,53.34948,9.77234 30175,Werlte,3008,NI,82,DE,52.85,7.68333 30186,Werpeloh,3008,NI,82,DE,52.87207,7.50831 30194,Wesendorf,3008,NI,82,DE,52.6,10.53333 30199,Weste,3008,NI,82,DE,53.05943,10.70283 30206,Westergellersen,3008,NI,82,DE,53.23333,10.25 30210,Westerholt,3008,NI,82,DE,53.6,7.45 30215,Westerstede,3008,NI,82,DE,53.25682,7.92737 30217,Westhagen,3008,NI,82,DE,52.40425,10.73939 30223,Wetschen,3008,NI,82,DE,52.61295,8.44883 30234,Weyhausen,3008,NI,82,DE,52.46208,10.71699 30238,Wieda,3008,NI,82,DE,51.634,10.58704 30240,Wiedensahl,3008,NI,82,DE,52.38385,9.12019 30244,Wiefelstede,3008,NI,82,DE,53.25,8.11667 30249,Wienhausen,3008,NI,82,DE,52.58021,10.18862 30250,Wieren,3008,NI,82,DE,52.88529,10.65871 30265,Wiesmoor,3008,NI,82,DE,53.41667,7.73333 30267,Wietmarschen,3008,NI,82,DE,52.51806,7.13408 30268,Wietze,3008,NI,82,DE,52.65,9.83333 30269,Wietzen,3008,NI,82,DE,52.71667,9.08333 30270,Wietzendorf,3008,NI,82,DE,52.91667,9.98333 30274,Wildemann,3008,NI,82,DE,51.8281,10.28152 30278,Wildeshausen,3008,NI,82,DE,52.89446,8.43375 30286,Wilhelmshaven,3008,NI,82,DE,53.52998,8.11253 30302,Wilstedt,3008,NI,82,DE,53.19493,9.09595 30304,Wilsum,3008,NI,82,DE,52.53333,6.85 30317,Windhausen,3008,NI,82,DE,51.78544,10.21218 30322,Wingst,3008,NI,82,DE,53.73572,9.08054 30329,Winsen,3008,NI,82,DE,53.35753,10.21282 30341,Wirdum,3008,NI,82,DE,53.47667,7.20594 30344,Wischhafen,3008,NI,82,DE,53.78333,9.31667 30347,Wistedt,3008,NI,82,DE,53.26667,9.68333 30359,Wittingen,3008,NI,82,DE,52.72694,10.73613 30362,Wittmar,3008,NI,82,DE,52.12969,10.64 30363,Wittmund,3008,NI,82,DE,53.57674,7.77839 30365,Wittorf,3008,NI,82,DE,53.33333,10.38333 30377,Wolfenbüttel,3008,NI,82,DE,52.16442,10.54095 30385,Wolfsburg,3008,NI,82,DE,52.42452,10.7815 30442,Wölpinghausen,3008,NI,82,DE,52.41667,9.23333 30399,Wolsdorf,3008,NI,82,DE,52.19098,10.93878 30401,Woltersdorf,3008,NI,82,DE,52.95,11.21667 30407,Worpswede,3008,NI,82,DE,53.21667,8.93333 30408,Wremen,3008,NI,82,DE,53.65,8.51667 30409,Wrestedt,3008,NI,82,DE,52.90435,10.57494 30410,Wriedel,3008,NI,82,DE,53.0313,10.29848 30414,Wulfsen,3008,NI,82,DE,53.3,10.15 30415,Wulften,3008,NI,82,DE,51.65999,10.17437 30417,Wulsbüttel,3008,NI,82,DE,53.31667,8.66667 30419,Wunstorf,3008,NI,82,DE,52.42377,9.43585 30432,Wustrow,3008,NI,82,DE,52.9237,11.12846 30496,Zernien,3008,NI,82,DE,53.06845,10.88325 30497,Zetel,3008,NI,82,DE,53.41667,7.98333 30500,Zeven,3008,NI,82,DE,53.29657,9.27685 30514,Zorge,3008,NI,82,DE,51.63333,10.63333 23492,Admannshagen-Bargeshagen,3007,MV,82,DE,54.13038,11.99915 23502,Ahlbeck,3007,MV,82,DE,53.66972,14.18622 23576,Alt Meteln,3007,MV,82,DE,53.74709,11.34056 23580,Alt-Sanitz,3007,MV,82,DE,53.81363,13.58786 23586,Altefähr,3007,MV,82,DE,54.32994,13.12643 23604,Altenkirchen,3007,MV,82,DE,54.63624,13.34332 23611,Altenpleen,3007,MV,82,DE,54.35456,12.9564 23617,Altentreptow,3007,MV,82,DE,53.69416,13.26504 23635,Altstadt,3007,MV,82,DE,53.62805,11.41582 23659,Anklam,3007,MV,82,DE,53.85637,13.68965 23782,Bad Doberan,3007,MV,82,DE,54.10712,11.90051 23814,Bad Kleinen,3007,MV,82,DE,53.77134,11.47165 23875,Bad Sülze,3007,MV,82,DE,54.11084,12.66054 23923,Banzkow,3007,MV,82,DE,53.52497,11.52306 23943,Bartenshagen-Parkentin,3007,MV,82,DE,54.08116,11.97849 23944,Barth,3007,MV,82,DE,54.36346,12.72491 23955,Bastorf,3007,MV,82,DE,54.12566,11.69695 24020,Bentwisch,3007,MV,82,DE,54.11503,12.20465 24021,Bentzin,3007,MV,82,DE,53.94608,13.2732 24037,Bergen auf Rügen,3007,MV,82,DE,54.41823,13.43349 24066,Bernitt,3007,MV,82,DE,53.90403,11.88669 24108,Biendorf,3007,MV,82,DE,54.0752,11.70127 24172,Blankensee,3007,MV,82,DE,53.4039,13.26836 24186,Blowatz,3007,MV,82,DE,53.98972,11.5336 24191,Bobitz,3007,MV,82,DE,53.8045,11.35914 24218,Boizenburg,3007,MV,82,DE,53.38153,10.72375 24473,Börgerende-Rethwisch,3007,MV,82,DE,54.14177,11.92528 24249,Born,3007,MV,82,DE,54.38536,12.53051 24256,Borrentin,3007,MV,82,DE,53.80968,12.96718 24282,Brandshagen,3007,MV,82,DE,54.23945,13.16917 24341,Broderstorf,3007,MV,82,DE,54.08114,12.2635 24367,Brüel,3007,MV,82,DE,53.73719,11.71471 24358,Brunn,3007,MV,82,DE,53.67076,13.37032 24373,Brüsewitz,3007,MV,82,DE,53.67588,11.24379 24408,Burg Stargard,3007,MV,82,DE,53.49582,13.31122 24444,Burow,3007,MV,82,DE,53.77372,13.27318 24510,Bützow,3007,MV,82,DE,53.84832,11.98256 24522,Carlow,3007,MV,82,DE,53.75861,10.93789 24524,Carpin,3007,MV,82,DE,53.35691,13.24328 24565,Crivitz,3007,MV,82,DE,53.57316,11.65194 24573,Dabel,3007,MV,82,DE,53.66112,11.90025 24595,Dargun,3007,MV,82,DE,53.9009,12.85014 24601,Dassow,3007,MV,82,DE,53.91096,10.97551 24627,Demen,3007,MV,82,DE,53.62967,11.76639 24629,Demmin,3007,MV,82,DE,53.90762,13.03142 24641,Dersekow,3007,MV,82,DE,54.04583,13.29243 24672,Dierkow-Neu,3007,MV,82,DE,54.10571,12.16753 24673,Dierkow-West,3007,MV,82,DE,54.10608,12.15041 24711,Dobbertin,3007,MV,82,DE,53.62306,12.07466 24798,Dömitz,3007,MV,82,DE,53.1408,11.25017 24728,Domsühl,3007,MV,82,DE,53.48723,11.77099 24756,Dranske,3007,MV,82,DE,54.63118,13.22831 24774,Ducherow,3007,MV,82,DE,53.76436,13.78216 24806,Dümmer,3007,MV,82,DE,53.57629,11.20497 24781,Dummerstorf,3007,MV,82,DE,54.01484,12.22821 24877,Eggesin,3007,MV,82,DE,53.67973,14.07992 24941,Eldena,3007,MV,82,DE,53.23191,11.41804 24959,Elmenhorst,3007,MV,82,DE,54.15583,12.01084 25157,Feldstadt,3007,MV,82,DE,53.62331,11.40673 25164,Ferdinandshof,3007,MV,82,DE,53.66124,13.88724 25224,Franzburg,3007,MV,82,DE,54.18501,12.8821 25281,Friedland,3007,MV,82,DE,53.67028,13.554 25343,Gadebusch,3007,MV,82,DE,53.70137,11.11676 25773,Gägelow,3007,MV,82,DE,53.68558,11.89639 25374,Garz,3007,MV,82,DE,54.31843,13.35125 25411,Gelbensande,3007,MV,82,DE,54.20272,12.30168 25483,Gielow,3007,MV,82,DE,53.69756,12.74521 25495,Gingst,3007,MV,82,DE,54.45654,13.25737 25516,Glowe,3007,MV,82,DE,54.56911,13.4655 25523,Gnoien,3007,MV,82,DE,53.9687,12.71099 25531,Goldberg,3007,MV,82,DE,53.58878,12.08855 25782,Görmin,3007,MV,82,DE,53.99092,13.27054 25559,Grabow,3007,MV,82,DE,53.27966,11.56502 25560,Grabowhöfe,3007,MV,82,DE,53.56865,12.59482 25574,Gramkow,3007,MV,82,DE,53.92092,11.3174 25592,Greifswald,3007,MV,82,DE,54.09311,13.38786 25606,Grevesmühlen,3007,MV,82,DE,53.86337,11.1916 25611,Grimmen,3007,MV,82,DE,54.11215,13.04051 25624,Groß Kiesow,3007,MV,82,DE,54.01261,13.47851 25628,Groß Laasch,3007,MV,82,DE,53.34646,11.54919 25630,Groß Miltzow,3007,MV,82,DE,53.53565,13.59354 25632,Groß Nemerow,3007,MV,82,DE,53.47342,13.22482 25642,Groß Wokern,3007,MV,82,DE,53.75135,12.49249 25800,Güstrow,3007,MV,82,DE,53.7972,12.17337 25803,Gützkow,3007,MV,82,DE,53.72432,13.10664 25823,Hagenow,3007,MV,82,DE,53.43134,11.19159 26131,Hiddensee,3007,MV,82,DE,54.56689,13.10411 26270,Hornstorf,3007,MV,82,DE,53.90994,11.53214 26430,Jarmen,3007,MV,82,DE,53.92385,13.34032 26432,Jatznick,3007,MV,82,DE,53.57951,13.93955 26468,Jördenstorf,3007,MV,82,DE,53.87823,12.61619 26475,Jürgenshagen,3007,MV,82,DE,53.95417,11.89665 26491,Kalkhorst,3007,MV,82,DE,53.97012,11.04469 26516,Karlshagen,3007,MV,82,DE,54.11107,13.83193 26547,Kavelstorf,3007,MV,82,DE,54.00596,12.19082 26566,Kemnitz,3007,MV,82,DE,54.07723,13.53528 26574,Kessin,3007,MV,82,DE,53.72928,13.30773 26663,Klein Rogahn,3007,MV,82,DE,53.60534,11.34579 26690,Klink,3007,MV,82,DE,53.47758,12.62131 26700,Klütz,3007,MV,82,DE,53.9647,11.16367 26728,Koserow,3007,MV,82,DE,54.05189,14.00197 26737,Krakow am See,3007,MV,82,DE,53.65163,12.27034 26738,Kramerhof,3007,MV,82,DE,54.35366,13.05412 26764,Kritzmow,3007,MV,82,DE,54.05237,12.05311 26783,Kröpelin,3007,MV,82,DE,54.06963,11.79473 26785,Kröslin,3007,MV,82,DE,54.11662,13.75067 26862,Laage,3007,MV,82,DE,53.9256,12.34694 26878,Lalendorf,3007,MV,82,DE,53.75774,12.38983 26882,Lambrechtshagen,3007,MV,82,DE,54.10208,12.01645 26947,Lankow,3007,MV,82,DE,53.64983,11.36913 26952,Lassan,3007,MV,82,DE,53.94874,13.85219 27003,Leezen,3007,MV,82,DE,53.66265,11.49874 27072,Lewenberg,3007,MV,82,DE,53.64591,11.40767 27191,Löcknitz,3007,MV,82,DE,53.28694,11.78108 27128,Loddin,3007,MV,82,DE,54.02252,14.00754 27140,Loitz,3007,MV,82,DE,53.44205,13.38802 27158,Lubmin,3007,MV,82,DE,54.13509,13.61687 27206,Lübow,3007,MV,82,DE,53.85256,11.5244 27207,Lübstorf,3007,MV,82,DE,53.72561,11.41471 27208,Lübtheen,3007,MV,82,DE,53.30118,11.08368 27209,Lübz,3007,MV,82,DE,53.46261,12.02917 27214,Lüdersdorf,3007,MV,82,DE,53.86835,11.74902 27166,Ludwigslust,3007,MV,82,DE,53.32917,11.49714 27226,Lützow,3007,MV,82,DE,53.65345,11.17582 27249,Malchin,3007,MV,82,DE,53.7399,12.76539 27251,Malchow,3007,MV,82,DE,53.47477,12.4221 27255,Malliß,3007,MV,82,DE,53.21132,11.32716 27320,Marlow,3007,MV,82,DE,54.15439,12.57261 27360,Mecklenburg,3007,MV,82,DE,53.8427,11.4633 27432,Mesekenhagen,3007,MV,82,DE,54.14846,13.31843 27475,Mirow,3007,MV,82,DE,53.5051,11.50294 27563,Möllenhagen,3007,MV,82,DE,53.52388,12.92868 27570,Mönchhagen,3007,MV,82,DE,54.15146,12.2167 27588,Mühl Rosin,3007,MV,82,DE,53.76383,12.21388 27594,Mühlen Eichsen,3007,MV,82,DE,53.75775,11.25006 27689,Neu Kaliß,3007,MV,82,DE,53.17466,11.29446 27700,Neubrandenburg,3007,MV,82,DE,53.56414,13.27532 27704,Neubukow,3007,MV,82,DE,54.03177,11.67391 27706,Neuburg,3007,MV,82,DE,53.40677,11.91742 27722,Neuenkirchen,3007,MV,82,DE,53.59729,13.36942 27753,Neukalen,3007,MV,82,DE,53.82275,12.79015 27764,Neukloster,3007,MV,82,DE,53.86548,11.68512 27773,Neumühle,3007,MV,82,DE,53.63171,11.37085 27807,Neustadt-Glewe,3007,MV,82,DE,53.37846,11.59264 27810,Neustrelitz,3007,MV,82,DE,53.3613,13.07292 27818,Neverin,3007,MV,82,DE,53.62067,13.3366 27894,Nienhagen,3007,MV,82,DE,54.14869,12.17434 27896,Niepars,3007,MV,82,DE,54.31447,12.92447 27935,Nostorf,3007,MV,82,DE,53.40656,10.65408 28168,Ostseebad Binz,3007,MV,82,DE,54.39995,13.61052 28169,Ostseebad Boltenhagen,3007,MV,82,DE,53.98779,11.20193 28170,Ostseebad Dierhagen,3007,MV,82,DE,54.29243,12.35799 28171,Ostseebad Göhren,3007,MV,82,DE,54.3414,13.73823 28172,Ostseebad Kühlungsborn,3007,MV,82,DE,54.15035,11.75994 28173,Ostseebad Prerow,3007,MV,82,DE,54.44469,12.57677 28174,Ostseebad Sellin,3007,MV,82,DE,54.37846,13.69394 28175,Ostseebad Zinnowitz,3007,MV,82,DE,54.07668,13.91127 28214,Pampow,3007,MV,82,DE,53.75513,12.60815 28219,Papendorf,3007,MV,82,DE,54.03523,12.13263 28222,Parchim,3007,MV,82,DE,53.42631,11.84875 28229,Pasewalk,3007,MV,82,DE,53.50627,13.98997 28236,Paulsstadt,3007,MV,82,DE,53.63283,11.40372 28252,Penkun,3007,MV,82,DE,53.29695,14.23616 28257,Penzlin,3007,MV,82,DE,53.504,13.08407 28305,Pinnow,3007,MV,82,DE,53.60164,11.54577 28314,Plate,3007,MV,82,DE,53.55145,11.50927 28317,Plau am See,3007,MV,82,DE,53.45821,12.26246 28358,Poseritz,3007,MV,82,DE,54.29811,13.27492 28372,Preetz,3007,MV,82,DE,54.35017,12.98936 28395,Prohn,3007,MV,82,DE,54.36901,13.02369 28408,Putbus,3007,MV,82,DE,54.35511,13.47634 28435,Raben Steinfeld,3007,MV,82,DE,53.60141,11.50487 28459,Rambin,3007,MV,82,DE,54.35566,13.20445 28482,Rastow,3007,MV,82,DE,53.45709,11.43145 28502,Rechlin,3007,MV,82,DE,53.33549,12.72543 28534,Rehna,3007,MV,82,DE,53.77877,11.04929 28556,Reinberg,3007,MV,82,DE,53.67484,13.14417 28586,Retgendorf,3007,MV,82,DE,53.72922,11.50359 28589,Retschow,3007,MV,82,DE,54.04552,11.8778 28621,Ribnitz-Damgarten,3007,MV,82,DE,54.2422,12.45666 28622,Richtenberg,3007,MV,82,DE,54.20131,12.89409 28773,Röbel,3007,MV,82,DE,53.37555,12.60372 28684,Roggendorf,3007,MV,82,DE,53.69292,11.0144 28685,Roggentin,3007,MV,82,DE,54.0707,12.20424 28708,Rosenow,3007,MV,82,DE,53.62966,13.03849 28715,Rostock,3007,MV,82,DE,54.0887,12.14049 28796,Rövershagen,3007,MV,82,DE,54.17668,12.24276 28811,Saal,3007,MV,82,DE,54.31051,12.49935 28828,Sagard,3007,MV,82,DE,54.52556,13.55387 28848,Samtens,3007,MV,82,DE,54.35481,13.29311 28900,Saßnitz,3007,MV,82,DE,54.5157,13.64451 28891,Satow-Oberhagen,3007,MV,82,DE,53.99545,11.88466 28924,Schelfstadt,3007,MV,82,DE,53.63382,11.41711 28959,Schlagsdorf,3007,MV,82,DE,53.73363,10.82556 29038,Schwaan,3007,MV,82,DE,53.94047,12.10715 29090,Schwerin,3007,MV,82,DE,53.62937,11.41316 29144,Seebad Bansin,3007,MV,82,DE,53.97102,14.14147 29145,Seebad Heringsdorf,3007,MV,82,DE,53.95379,14.16852 29154,Seeheilbad Graal-Müritz,3007,MV,82,DE,54.25124,12.25139 29156,Seehof,3007,MV,82,DE,53.69249,11.43256 29169,Sehlen,3007,MV,82,DE,54.37971,13.38907 29180,Sellin,3007,MV,82,DE,53.88495,11.6079 29182,Selmsdorf,3007,MV,82,DE,53.88224,10.85997 29225,Siggelkow,3007,MV,82,DE,53.38742,11.93802 29304,Spornitz,3007,MV,82,DE,53.40749,11.71864 29448,Stäbelow,3007,MV,82,DE,54.04119,12.02336 29377,Steinhagen,3007,MV,82,DE,54.22616,12.98867 29401,Sternberg,3007,MV,82,DE,53.71236,11.82678 29424,Stralendorf,3007,MV,82,DE,53.57498,11.30356 29425,Stralsund,3007,MV,82,DE,54.30911,13.0818 29427,Strasburg,3007,MV,82,DE,53.5103,13.74513 29464,Sukow,3007,MV,82,DE,53.54428,11.56194 29503,Sülstorf,3007,MV,82,DE,53.50931,11.37463 29530,Tarnow,3007,MV,82,DE,53.77941,12.01785 29561,Tessin,3007,MV,82,DE,54.02764,12.46519 29562,Teterow,3007,MV,82,DE,53.77545,12.57487 29633,Torgelow,3007,MV,82,DE,53.63415,14.01346 29665,Tribsees,3007,MV,82,DE,54.09556,12.75683 29671,Trinwillershagen,3007,MV,82,DE,54.25048,12.62312 29679,Trollenhagen,3007,MV,82,DE,53.60706,13.29103 29693,Tutow,3007,MV,82,DE,53.91566,13.24814 29719,Ueckermünde,3007,MV,82,DE,53.73795,14.04473 29797,Usedom,3007,MV,82,DE,53.87537,13.92394 29827,Velgast,3007,MV,82,DE,54.27204,12.81075 29844,Viereck,3007,MV,82,DE,53.54898,14.04001 29907,Wackerow,3007,MV,82,DE,53.67683,12.98164 30014,Wardow,3007,MV,82,DE,53.93054,12.40818 30015,Waren,3007,MV,82,DE,53.5204,12.67985 30017,Warin,3007,MV,82,DE,53.80026,11.70504 30020,Warnemünde,3007,MV,82,DE,54.1767,12.08402 30022,Warnow,3007,MV,82,DE,53.7858,11.88106 30042,Wattmannshagen,3007,MV,82,DE,53.7759,12.40701 30116,Weitenhagen,3007,MV,82,DE,54.05372,13.40998 30159,Wendorf,3007,MV,82,DE,54.2554,13.07682 30171,Werdervorstadt,3007,MV,82,DE,53.63909,11.42767 30193,Wesenberg,3007,MV,82,DE,53.2803,12.96936 30222,Weststadt,3007,MV,82,DE,53.63472,11.39565 30247,Wiek,3007,MV,82,DE,54.62,13.28914 30345,Wismar,3007,MV,82,DE,53.89314,11.45286 30353,Wittenburg,3007,MV,82,DE,53.50599,11.08049 30354,Wittenförden,3007,MV,82,DE,53.62917,11.32982 30355,Wittenhagen,3007,MV,82,DE,54.18379,13.07133 30373,Woldegk,3007,MV,82,DE,53.46058,13.58356 30389,Wolgast,3007,MV,82,DE,54.05275,13.77201 30416,Wulkenzin,3007,MV,82,DE,53.54445,13.16921 30428,Wusterhusen,3007,MV,82,DE,54.11312,13.61608 30431,Wustrow,3007,MV,82,DE,53.47765,13.15569 30472,Zarrendorf,3007,MV,82,DE,54.23689,13.10094 30473,Zarrentin,3007,MV,82,DE,53.55075,10.9155 30506,Ziesendorf,3007,MV,82,DE,53.99433,12.03933 30509,Zingst,3007,MV,82,DE,54.43572,12.6888 30527,Zurow,3007,MV,82,DE,53.86429,11.61434 30544,Züssow,3007,MV,82,DE,53.97709,13.54855 23463,Aachen,3017,NW,82,DE,50.77664,6.08342 23500,Ahaus,3017,NW,82,DE,52.07936,7.01344 23504,Ahlen,3017,NW,82,DE,51.76338,7.8887 23542,Aldenhoven,3017,NW,82,DE,50.9,6.28333 23552,Alfter,3017,NW,82,DE,50.73333,7.01667 23564,Alpen,3017,NW,82,DE,51.58333,6.51667 23568,Alsdorf,3017,NW,82,DE,50.87673,6.16399 23589,Altena,3017,NW,82,DE,51.29472,7.67337 23592,Altenbeken,3017,NW,82,DE,51.76455,8.94201 23594,Altenberge,3017,NW,82,DE,52.05,7.46667 23597,Altenbüren,3017,NW,82,DE,51.38634,8.50584 23636,Altstadt Nord,3017,NW,82,DE,50.93893,6.95752 23637,Altstadt Sud,3017,NW,82,DE,50.93331,6.95954 23665,Anröchte,3017,NW,82,DE,51.56667,8.33333 23686,Arnsberg,3017,NW,82,DE,51.38333,8.08333 23705,Ascheberg,3017,NW,82,DE,51.78333,7.61667 23714,Attendorn,3017,NW,82,DE,51.12645,7.90333 23732,Augustdorf,3017,NW,82,DE,51.90944,8.73173 23768,Bad Berleburg,3017,NW,82,DE,51.05224,8.39227 23783,Bad Driburg,3017,NW,82,DE,51.73297,9.01969 23797,Bad Fredeburg,3017,NW,82,DE,51.1893,8.30978 23807,Bad Holzhausen,3017,NW,82,DE,52.28971,8.53954 23809,Bad Honnef,3017,NW,82,DE,50.64336,7.2278 23822,Bad Laasphe,3017,NW,82,DE,50.93139,8.42502 23831,Bad Lippspringe,3017,NW,82,DE,51.78333,8.81683 23834,Bad Meinberg,3017,NW,82,DE,51.89588,8.98313 23839,Bad Münstereifel,3017,NW,82,DE,50.55667,6.76424 23844,Bad Oeynhausen,3017,NW,82,DE,52.20699,8.80365 23857,Bad Salzuflen,3017,NW,82,DE,52.0862,8.74434 23859,Bad Sassendorf,3017,NW,82,DE,51.58333,8.16667 23898,Baesweiler,3017,NW,82,DE,50.90964,6.18874 23914,Balve,3017,NW,82,DE,51.3315,7.86424 23918,Bamenohl,3017,NW,82,DE,51.16527,7.98412 23940,Barntrup,3017,NW,82,DE,51.99038,9.11642 23965,Bayenthal,3017,NW,82,DE,50.91218,6.96799 23979,Beckum,3017,NW,82,DE,51.75571,8.04075 23980,Bedburg,3017,NW,82,DE,50.99258,6.57128 23982,Beelen,3017,NW,82,DE,51.92906,8.11117 24039,Bergheim,3017,NW,82,DE,50.95572,6.63986 24041,Bergisch Gladbach,3017,NW,82,DE,50.9856,7.13298 24042,Bergkamen,3017,NW,82,DE,51.61633,7.64451 24045,Bergneustadt,3017,NW,82,DE,51.02496,7.65599 24080,Bestwig,3017,NW,82,DE,51.36081,8.40082 24093,Beverungen,3017,NW,82,DE,51.66801,9.37417 24107,Bielefeld,3017,NW,82,DE,52.03333,8.53333 24116,Bilderstoeckchen,3017,NW,82,DE,50.96983,6.92997 24117,Billerbeck,3017,NW,82,DE,51.97829,7.29261 24131,Birgte,3017,NW,82,DE,52.2479,7.64833 24169,Blankenheim,3017,NW,82,DE,50.43333,6.65 24184,Blomberg,3017,NW,82,DE,51.94331,9.09067 24192,Bocholt,3017,NW,82,DE,51.83879,6.61531 24193,Bochum,3017,NW,82,DE,51.48165,7.21648 24194,Bochum-Hordel,3017,NW,82,DE,51.50168,7.1756 24469,Bönen,3017,NW,82,DE,51.6,7.76667 24231,Bonn,3017,NW,82,DE,50.73438,7.09549 24240,Borgentreich,3017,NW,82,DE,51.56917,9.24113 24242,Borgholzhausen,3017,NW,82,DE,52.10343,8.30211 24244,Borken,3017,NW,82,DE,51.84382,6.85774 24253,Bornheim,3017,NW,82,DE,50.76313,6.99089 24263,Bottrop,3017,NW,82,DE,51.52392,6.9285 24274,Brakel,3017,NW,82,DE,51.7175,9.18596 24292,Breckerfeld,3017,NW,82,DE,51.25926,7.46807 24335,Brilon,3017,NW,82,DE,51.39462,8.57146 24369,Brüggen,3017,NW,82,DE,51.24053,6.18376 24372,Brühl,3017,NW,82,DE,50.82928,6.90499 24389,Buchforst,3017,NW,82,DE,50.95093,7.00579 24390,Buchheim,3017,NW,82,DE,50.95152,7.02093 24500,Bünde,3017,NW,82,DE,52.19837,8.58644 24405,Burbach,3017,NW,82,DE,50.75105,8.07939 24501,Büren,3017,NW,82,DE,51.55109,8.55956 24445,Burscheid,3017,NW,82,DE,51.08468,7.11393 24526,Castrop-Rauxel,3017,NW,82,DE,51.55657,7.31155 24547,Coesfeld,3017,NW,82,DE,51.94349,7.16809 24577,Dahlem,3017,NW,82,DE,50.38607,6.54768 24602,Datteln,3017,NW,82,DE,51.65598,7.3453 24621,Delbrück,3017,NW,82,DE,51.76503,8.56223 24647,Detmold,3017,NW,82,DE,51.93855,8.87318 24659,Deutz,3017,NW,82,DE,50.93463,6.97495 24698,Dinslaken,3017,NW,82,DE,51.56227,6.7434 24799,Dörentrup,3017,NW,82,DE,52.04109,9.00278 24738,Dormagen,3017,NW,82,DE,51.09683,6.83167 24746,Dorsten,3017,NW,82,DE,51.66166,6.96514 24747,Dortmund,3017,NW,82,DE,51.51494,7.466 24761,Dreierwalde,3017,NW,82,DE,52.33194,7.50333 24766,Drensteinfurt,3017,NW,82,DE,51.79535,7.73815 24771,Drolshagen,3017,NW,82,DE,51.02358,7.77355 24780,Duisburg,3017,NW,82,DE,51.43247,6.76516 24805,Dülmen,3017,NW,82,DE,51.83149,7.28075 24810,Düren,3017,NW,82,DE,50.80434,6.49299 24817,Düsseldorf,3017,NW,82,DE,51.22172,6.77616 24818,Düsseldorf District,3017,NW,82,DE,51.4,6.6 24819,Düsseldorf-Pempelfort,3017,NW,82,DE,51.23812,6.78678 24912,Eil,3017,NW,82,DE,50.89362,7.07967 24937,Eitorf,3017,NW,82,DE,50.76667,7.45 24963,Elsdorf,3017,NW,82,DE,50.93739,6.56828 24989,Emmerich,3017,NW,82,DE,51.83933,6.24792 24994,Emsdetten,3017,NW,82,DE,52.1734,7.52781 25003,Engelskirchen,3017,NW,82,DE,50.98854,7.41391 25006,Enger,3017,NW,82,DE,52.14063,8.55772 25010,Ennepetal,3017,NW,82,DE,51.29848,7.3629 25012,Ennigerloh,3017,NW,82,DE,51.83843,8.03093 25037,Erftstadt,3017,NW,82,DE,50.81481,6.79387 25045,Erkelenz,3017,NW,82,DE,51.07947,6.31531 25050,Erkrath,3017,NW,82,DE,51.22235,6.90831 25063,Erndtebrück,3017,NW,82,DE,50.98927,8.25288 25071,Erwitte,3017,NW,82,DE,51.6127,8.3384 25085,Eschweiler,3017,NW,82,DE,50.81854,6.27184 25088,Eslohe,3017,NW,82,DE,51.25369,8.16949 25089,Espelkamp,3017,NW,82,DE,52.38251,8.62127 25095,Essen,3017,NW,82,DE,51.45657,7.01228 25116,Euskirchen,3017,NW,82,DE,50.66057,6.78722 25120,Everswinkel,3017,NW,82,DE,51.92595,7.8469 25172,Finnentrop,3017,NW,82,DE,51.168,7.973 25234,Frechen,3017,NW,82,DE,50.91485,6.8118 25256,Freudenberg,3017,NW,82,DE,50.89741,7.87415 25311,Fröndenberg,3017,NW,82,DE,51.47563,7.76946 25357,Gangelt,3017,NW,82,DE,50.99247,5.99802 25396,Geilenkirchen,3017,NW,82,DE,50.96745,6.11763 25412,Geldern,3017,NW,82,DE,51.51908,6.32363 25416,Gelsenkirchen,3017,NW,82,DE,51.50508,7.09654 25468,Gescher,3017,NW,82,DE,51.954,7.00481 25471,Geseke,3017,NW,82,DE,51.64091,8.5109 25478,Gevelsberg,3017,NW,82,DE,51.31971,7.3392 25499,Gladbeck,3017,NW,82,DE,51.57077,6.98593 25525,Goch,3017,NW,82,DE,51.67873,6.15895 25589,Grefrath,3017,NW,82,DE,51.3363,6.34072 25596,Gremberghoven,3017,NW,82,DE,50.90152,7.06129 25604,Greven,3017,NW,82,DE,52.09364,7.59396 25605,Grevenbroich,3017,NW,82,DE,51.09102,6.5827 25614,Gronau,3017,NW,82,DE,52.21099,7.02238 25752,Gummersbach,3017,NW,82,DE,51.02608,7.56473 25802,Gütersloh,3017,NW,82,DE,51.90693,8.37853 25806,Haan,3017,NW,82,DE,51.19382,7.0133 25818,Hagen,3017,NW,82,DE,51.36081,7.47168 25851,Halle,3017,NW,82,DE,52.06007,8.36083 25855,Hallenberg,3017,NW,82,DE,51.11115,8.62008 25861,Haltern am See,3017,NW,82,DE,51.74297,7.18163 25862,Halver,3017,NW,82,DE,51.18612,7.49817 25873,Hamm,3017,NW,82,DE,51.68033,7.82089 25880,Hamminkeln,3017,NW,82,DE,51.73262,6.59031 25908,Harsewinkel,3017,NW,82,DE,51.96224,8.22766 25940,Hattingen,3017,NW,82,DE,51.39894,7.18557 25958,Havixbeck,3017,NW,82,DE,51.98333,7.41667 25974,Heek,3017,NW,82,DE,52.11667,7.1 25983,Heiden,3017,NW,82,DE,51.83333,6.93333 25998,Heiligenhaus,3017,NW,82,DE,51.32662,6.97106 26005,Heimbach,3017,NW,82,DE,50.63693,6.46896 26015,Heinsberg,3017,NW,82,DE,51.06358,6.0998 26025,Hellenthal,3017,NW,82,DE,50.48333,6.43333 26038,Hemer,3017,NW,82,DE,51.38707,7.77019 26050,Hennef,3017,NW,82,DE,50.77555,7.28308 26063,Herdecke,3017,NW,82,DE,51.39999,7.43584 26067,Herford,3017,NW,82,DE,52.11457,8.67343 26083,Herne,3017,NW,82,DE,51.5388,7.22572 26094,Herscheid,3017,NW,82,DE,51.17901,7.74355 26096,Herten,3017,NW,82,DE,51.59638,7.14387 26103,Herzogenrath,3017,NW,82,DE,50.86874,6.09317 26130,Hiddenhausen,3017,NW,82,DE,52.16667,8.61667 26133,Hilchenbach,3017,NW,82,DE,50.99687,8.11062 26135,Hilden,3017,NW,82,DE,51.16818,6.93093 26142,Hille,3017,NW,82,DE,52.33333,8.75 26175,Hochfeld,3017,NW,82,DE,51.41943,6.75462 26309,Höhenberg,3017,NW,82,DE,50.93323,7.04138 26250,Holzwickede,3017,NW,82,DE,51.5,7.63333 26258,Hordel,3017,NW,82,DE,51.49784,7.1762 26264,Horn,3017,NW,82,DE,51.87151,8.9451 26321,Hörstel,3017,NW,82,DE,52.29763,7.58382 26274,Horstmar,3017,NW,82,DE,52.08098,7.30539 26326,Hövelhof,3017,NW,82,DE,51.81667,8.65 26327,Höxter,3017,NW,82,DE,51.77501,9.38155 26328,Hückelhoven,3017,NW,82,DE,51.0555,6.22658 26329,Hückeswagen,3017,NW,82,DE,51.14979,7.34471 26335,Hüllhorst,3017,NW,82,DE,52.28333,8.66667 26283,Humboldtkolonie,3017,NW,82,DE,50.93182,6.99469 26338,Hünxe,3017,NW,82,DE,51.63405,6.69741 26339,Hürtgenwald,3017,NW,82,DE,50.71667,6.36667 26340,Hürth,3017,NW,82,DE,50.87079,6.86761 26346,Ibbenbüren,3017,NW,82,DE,52.27964,7.71457 26387,Inden,3017,NW,82,DE,50.84306,6.36004 26413,Iserlohn,3017,NW,82,DE,51.37547,7.70281 26418,Isselburg,3017,NW,82,DE,51.83232,6.46428 26419,Issum,3017,NW,82,DE,51.53333,6.43333 26470,Jüchen,3017,NW,82,DE,51.1,6.5 26473,Jülich,3017,NW,82,DE,50.92149,6.36267 26477,Kaarst,3017,NW,82,DE,51.22929,6.61883 26489,Kalk,3017,NW,82,DE,50.94013,7.00605 26490,Kalkar,3017,NW,82,DE,51.73907,6.29101 26492,Kall,3017,NW,82,DE,50.54223,6.56297 26499,Kamen,3017,NW,82,DE,51.59231,7.6638 26503,Kamp-Lintfort,3017,NW,82,DE,51.50467,6.54587 26567,Kempen,3017,NW,82,DE,51.36432,6.41858 26572,Kerpen,3017,NW,82,DE,50.86991,6.69691 26580,Kevelaer,3017,NW,82,DE,51.58243,6.24603 26586,Kierspe,3017,NW,82,DE,51.13403,7.59075 26627,Kirchhundem,3017,NW,82,DE,51.08556,8.08893 26629,Kirchlengern,3017,NW,82,DE,52.2,8.63333 26662,Klein Reken,3017,NW,82,DE,51.7871,7.04367 26683,Kleve,3017,NW,82,DE,51.78826,6.13865 26818,Köln,3017,NW,82,DE,50.93333,6.95 26839,Königswinter,3017,NW,82,DE,50.68376,7.18675 26726,Korschenbroich,3017,NW,82,DE,51.19139,6.51352 26739,Kranenburg,3017,NW,82,DE,51.78333,6.01667 26746,Krefeld,3017,NW,82,DE,51.33645,6.55381 26755,Kreuzau,3017,NW,82,DE,50.74699,6.49069 26757,Kreuztal,3017,NW,82,DE,50.96775,7.98848 26860,Kürten,3017,NW,82,DE,51.05,7.26667 26870,Ladbergen,3017,NW,82,DE,52.13333,7.75 26873,Laer,3017,NW,82,DE,52.05555,7.35775 26874,Lage,3017,NW,82,DE,51.99223,8.79301 26909,Langenberg,3017,NW,82,DE,51.77206,8.31809 26918,Langenfeld,3017,NW,82,DE,51.10821,6.94831 26935,Langerwehe,3017,NW,82,DE,50.81667,6.35 26949,Lanstrop,3017,NW,82,DE,51.57504,7.56752 27005,Legden,3017,NW,82,DE,52.03333,7.1 27016,Leichlingen,3017,NW,82,DE,51.10628,7.01873 27035,Lemgo,3017,NW,82,DE,52.02786,8.89901 27044,Lengerich,3017,NW,82,DE,52.18661,7.86043 27046,Lennestadt,3017,NW,82,DE,51.11721,8.06707 27054,Leopoldshöhe,3017,NW,82,DE,52.01246,8.69834 27071,Leverkusen,3017,NW,82,DE,51.0303,6.98432 27075,Lichtenau,3017,NW,82,DE,51.61707,8.89665 27093,Lienen,3017,NW,82,DE,52.15,7.98333 27111,Lindlar,3017,NW,82,DE,51.01959,7.37758 27117,Linnich,3017,NW,82,DE,50.98002,6.27049 27120,Lippstadt,3017,NW,82,DE,51.67369,8.34482 27133,Lohmar,3017,NW,82,DE,50.83868,7.21399 27195,Löhne,3017,NW,82,DE,52.18848,8.6922 27153,Lotte,3017,NW,82,DE,52.28333,7.91667 27202,Lübbecke,3017,NW,82,DE,52.30699,8.61423 27211,Lüdenscheid,3017,NW,82,DE,51.21977,7.6273 27216,Lüdinghausen,3017,NW,82,DE,51.7683,7.44379 27217,Lügde,3017,NW,82,DE,51.95828,9.24706 27219,Lünen,3017,NW,82,DE,51.61634,7.52872 27277,Marienheide,3017,NW,82,DE,51.08317,7.53087 27318,Marl,3017,NW,82,DE,51.65671,7.09038 27325,Marsberg,3017,NW,82,DE,51.46171,8.84949 27354,Mechernich,3017,NW,82,DE,50.59304,6.65224 27358,Meckenheim,3017,NW,82,DE,50.62388,7.02942 27362,Medebach,3017,NW,82,DE,51.19713,8.70635 27367,Meerbusch,3017,NW,82,DE,51.25268,6.68807 27375,Mehrhoog,3017,NW,82,DE,51.73826,6.51164 27380,Meiderich,3017,NW,82,DE,51.46667,6.76667 27382,Meinerzhagen,3017,NW,82,DE,51.1074,7.64838 27404,Menden,3017,NW,82,DE,51.44337,7.77825 27407,Mengenich,3017,NW,82,DE,50.9785,6.86737 27431,Meschede,3017,NW,82,DE,51.3502,8.28332 27436,Metelen,3017,NW,82,DE,52.14434,7.2127 27441,Mettingen,3017,NW,82,DE,52.31667,7.78333 27443,Mettmann,3017,NW,82,DE,51.2504,6.97536 27472,Minden,3017,NW,82,DE,52.28953,8.91455 27499,Moers,3017,NW,82,DE,51.45342,6.6326 27561,Möhnesee,3017,NW,82,DE,51.5,8.13333 27568,Mönchengladbach,3017,NW,82,DE,51.18539,6.44172 27509,Monheim am Rhein,3017,NW,82,DE,51.09162,6.89217 27510,Monschau,3017,NW,82,DE,50.55462,6.24001 27526,Morsbach,3017,NW,82,DE,50.86665,7.72787 27530,Much,3017,NW,82,DE,50.90383,7.40306 27604,Mülheim,3017,NW,82,DE,51.43218,6.87967 27621,Münster,3017,NW,82,DE,51.96236,7.62571 27631,Nachrodt-Wiblingwerde,3017,NW,82,DE,51.31667,7.61667 27683,Netphen,3017,NW,82,DE,50.91667,8.1 27684,Nettersheim,3017,NW,82,DE,50.49372,6.62896 27685,Nettetal,3017,NW,82,DE,51.31667,6.28333 27694,Neu-Pattern,3017,NW,82,DE,50.88854,6.27688 27702,Neubrück,3017,NW,82,DE,51.13434,6.63857 27716,Neuehrenfeld,3017,NW,82,DE,50.95753,6.93611 27723,Neuenkirchen,3017,NW,82,DE,52.24472,7.37183 27725,Neuenrade,3017,NW,82,DE,51.28278,7.7825 27779,Neunkirchen,3017,NW,82,DE,50.8,8.0 27792,Neuss,3017,NW,82,DE,51.19807,6.68504 27808,Neustadt/Nord,3017,NW,82,DE,50.949,6.9479 27809,Neustadt/Süd,3017,NW,82,DE,50.92509,6.94762 27823,Nideggen,3017,NW,82,DE,50.69268,6.48437 27850,Niederkassel,3017,NW,82,DE,50.81503,7.03777 27854,Niederkrüchten,3017,NW,82,DE,51.2,6.21667 27857,Niedermerz,3017,NW,82,DE,50.88151,6.26651 27885,Niederzier,3017,NW,82,DE,50.88333,6.46667 27889,Nieheim,3017,NW,82,DE,51.80499,9.11302 27901,Nippes,3017,NW,82,DE,50.96545,6.95314 27924,Nordkirchen,3017,NW,82,DE,51.73827,7.52197 27928,Nordwalde,3017,NW,82,DE,52.08333,7.48333 27949,Nörvenich,3017,NW,82,DE,50.80604,6.63952 27937,Nottuln,3017,NW,82,DE,51.93333,7.35 27952,Nümbrecht,3017,NW,82,DE,50.90427,7.54063 27985,Oberhausen,3017,NW,82,DE,51.47805,6.8625 28001,Obernbeck,3017,NW,82,DE,52.20178,8.70404 28065,Ochtrup,3017,NW,82,DE,52.20802,7.18988 28069,Odenthal,3017,NW,82,DE,51.03333,7.11667 28076,Oelde,3017,NW,82,DE,51.8289,8.14724 28079,Oer-Erkenschwick,3017,NW,82,DE,51.64198,7.26451 28082,Oerlinghausen,3017,NW,82,DE,51.95453,8.6622 28111,Olfen,3017,NW,82,DE,51.70787,7.37893 28112,Olpe,3017,NW,82,DE,51.02899,7.85139 28113,Olsberg,3017,NW,82,DE,51.35613,8.48899 28116,Opladen,3017,NW,82,DE,51.06863,7.00387 28141,Ossendorf,3017,NW,82,DE,50.97059,6.90628 28142,Ostbevern,3017,NW,82,DE,52.04018,7.84229 28161,Ostheim,3017,NW,82,DE,50.93117,7.04412 28200,Overath,3017,NW,82,DE,50.93275,7.28389 28209,Paderborn,3017,NW,82,DE,51.71905,8.75439 28264,Petershagen,3017,NW,82,DE,52.37513,8.96538 28324,Plettenberg,3017,NW,82,DE,51.20949,7.87261 28342,Poll,3017,NW,82,DE,50.91256,6.99057 28356,Porta Westfalica,3017,NW,82,DE,52.22961,8.91612 28357,Porz am Rhein,3017,NW,82,DE,50.88637,7.0583 28384,Preußisch Oldendorf,3017,NW,82,DE,52.30589,8.49341 28403,Pulheim,3017,NW,82,DE,50.99965,6.80632 28445,Radevormwald,3017,NW,82,DE,51.20219,7.36027 28449,Raesfeld,3017,NW,82,DE,51.76667,6.85 28451,Rahden,3017,NW,82,DE,52.43367,8.61263 28484,Rath,3017,NW,82,DE,50.92379,7.0927 28487,Ratingen,3017,NW,82,DE,51.29724,6.84929 28506,Recke,3017,NW,82,DE,52.36885,7.72116 28507,Recklinghausen,3017,NW,82,DE,51.61379,7.19738 28510,Rees,3017,NW,82,DE,51.76263,6.39778 28516,Regierungsbezirk Arnsberg,3017,NW,82,DE,51.32967,8.0071 28518,Regierungsbezirk Detmold,3017,NW,82,DE,51.9666,8.78333 28521,Regierungsbezirk Köln,3017,NW,82,DE,50.78333,6.8666 28523,Regierungsbezirk Münster,3017,NW,82,DE,51.9666,7.4333 28576,Remscheid,3017,NW,82,DE,51.17983,7.1925 28600,Rheda-Wiedenbrück,3017,NW,82,DE,51.84967,8.30017 28601,Rhede,3017,NW,82,DE,51.83537,6.69602 28605,Rheinbach,3017,NW,82,DE,50.62562,6.94911 28606,Rheinberg,3017,NW,82,DE,51.54649,6.59525 28610,Rheine,3017,NW,82,DE,52.28509,7.44055 28616,Rheurdt,3017,NW,82,DE,51.46667,6.46667 28641,Riehl,3017,NW,82,DE,50.96686,6.97572 28650,Rietberg,3017,NW,82,DE,51.80924,8.42841 28779,Rödinghausen,3017,NW,82,DE,52.25,8.48333 28682,Roetgen,3017,NW,82,DE,50.65,6.2 28696,Rommerskirchen,3017,NW,82,DE,51.03333,6.68333 28787,Rösrath,3017,NW,82,DE,50.89559,7.18175 28769,Ruppichteroth,3017,NW,82,DE,50.84367,7.48409 28810,Rüthen,3017,NW,82,DE,51.4909,8.43596 28826,Saerbeck,3017,NW,82,DE,52.17372,7.63395 28842,Salzkotten,3017,NW,82,DE,51.6717,8.60092 28861,Sankt Augustin,3017,NW,82,DE,50.77538,7.197 28889,Sassenberg,3017,NW,82,DE,51.99223,8.04068 28907,Schalksmühle,3017,NW,82,DE,51.2412,7.5279 28932,Schermbeck,3017,NW,82,DE,51.68333,6.86667 28940,Schieder-Schwalenberg,3017,NW,82,DE,51.87713,9.19538 28962,Schlangen,3017,NW,82,DE,51.80978,8.84605 28969,Schleiden,3017,NW,82,DE,50.52896,6.47692 28988,Schmallenberg,3017,NW,82,DE,51.15473,8.28505 29136,Schöppingen,3017,NW,82,DE,52.1,7.23333 29054,Schwalmtal,3017,NW,82,DE,51.21667,6.26667 29085,Schwelm,3017,NW,82,DE,51.28635,7.29388 29091,Schwerte,3017,NW,82,DE,51.44387,7.5675 29181,Selm,3017,NW,82,DE,51.69689,7.46809 29189,Senden,3017,NW,82,DE,51.85645,7.48327 29190,Sendenhorst,3017,NW,82,DE,51.84303,7.82996 29211,Siegburg,3017,NW,82,DE,50.80019,7.20769 29213,Siegen,3017,NW,82,DE,50.87481,8.02431 29220,Siersdorf,3017,NW,82,DE,50.89827,6.22684 29234,Simmerath,3017,NW,82,DE,50.6,6.3 29244,Sinnersdorf,3017,NW,82,DE,51.02445,6.81787 29254,Soest,3017,NW,82,DE,51.57558,8.10619 29258,Solingen,3017,NW,82,DE,51.17343,7.0845 29275,Sonsbeck,3017,NW,82,DE,51.60741,6.37916 29296,Spenge,3017,NW,82,DE,52.14021,8.48475 29310,Sprockhövel,3017,NW,82,DE,51.34669,7.24343 29326,Stadtlohn,3017,NW,82,DE,51.99399,6.91918 29374,Steinfurt,3017,NW,82,DE,52.15045,7.33664 29376,Steinhagen,3017,NW,82,DE,52.0,8.4 29379,Steinheim,3017,NW,82,DE,51.87066,9.09136 29416,Stolberg,3017,NW,82,DE,50.77368,6.22595 29422,Stoßdorf,3017,NW,82,DE,50.78248,7.25126 29423,Straelen,3017,NW,82,DE,51.4419,6.26639 29501,Südlohn,3017,NW,82,DE,51.93333,6.86667 29481,Sundern,3017,NW,82,DE,51.3281,8.00369 29542,Tecklenburg,3017,NW,82,DE,52.21957,7.81357 29552,Telgte,3017,NW,82,DE,51.97995,7.78293 29622,Titz,3017,NW,82,DE,51.00619,6.42477 29701,Tönisvorst,3017,NW,82,DE,51.32092,6.49412 29678,Troisdorf,3017,NW,82,DE,50.80901,7.14968 29709,Türnich,3017,NW,82,DE,50.85892,6.75535 30553,Übach-Palenberg,3017,NW,82,DE,50.91775,6.12336 29720,Uedem,3017,NW,82,DE,51.6652,6.27371 29748,Unna,3017,NW,82,DE,51.53795,7.68969 29823,Velbert,3017,NW,82,DE,51.33537,7.04348 29826,Velen,3017,NW,82,DE,51.89447,6.98807 29836,Verl,3017,NW,82,DE,51.88333,8.51667 29837,Versmold,3017,NW,82,DE,52.04009,8.15272 29841,Vettweiß,3017,NW,82,DE,50.73333,6.6 29849,Viersen,3017,NW,82,DE,51.25435,6.39441 29863,Vlotho,3017,NW,82,DE,52.1653,8.85996 29865,Voerde,3017,NW,82,DE,51.59703,6.6863 29884,Vreden,3017,NW,82,DE,52.03792,6.828 29903,Wachtberg,3017,NW,82,DE,50.63333,7.1 29904,Wachtendonk,3017,NW,82,DE,51.40916,6.33894 29911,Wadersloh,3017,NW,82,DE,51.73333,8.25 29920,Wahn-Heide,3017,NW,82,DE,50.85891,7.10662 29939,Waldbröl,3017,NW,82,DE,50.87576,7.61688 29950,Waldfeucht,3017,NW,82,DE,51.0661,5.98815 29996,Waltrop,3017,NW,82,DE,51.62125,7.40238 30012,Warburg,3017,NW,82,DE,51.49011,9.14641 30016,Warendorf,3017,NW,82,DE,51.95109,7.98756 30023,Warstein,3017,NW,82,DE,51.44488,8.34851 30031,Wassenberg,3017,NW,82,DE,51.10009,6.15484 30053,Weeze,3017,NW,82,DE,51.62678,6.19792 30056,Wegberg,3017,NW,82,DE,51.14221,6.28436 30090,Weilerswist,3017,NW,82,DE,50.75292,6.84585 30148,Welver,3017,NW,82,DE,51.61667,7.96667 30155,Wenden,3017,NW,82,DE,50.96667,7.86667 30172,Werdohl,3017,NW,82,DE,51.26011,7.76608 30174,Werl,3017,NW,82,DE,51.55493,7.91403 30176,Wermelskirchen,3017,NW,82,DE,51.1397,7.21583 30180,Werne,3017,NW,82,DE,51.66446,7.63421 30189,Werther,3017,NW,82,DE,52.07771,8.41793 30191,Wesel,3017,NW,82,DE,51.6669,6.62037 30196,Wesseling,3017,NW,82,DE,50.82709,6.9747 30212,Westerkappeln,3017,NW,82,DE,52.31667,7.88333 30225,Wetter (Ruhr),3017,NW,82,DE,51.38747,7.39277 30228,Wettringen,3017,NW,82,DE,52.20939,7.31895 30236,Wickede,3017,NW,82,DE,51.4964,7.86587 30246,Wiehl,3017,NW,82,DE,50.9495,7.55062 30293,Willebadessen,3017,NW,82,DE,51.62564,9.03694 30294,Willich,3017,NW,82,DE,51.26371,6.54734 30300,Wilnsdorf,3017,NW,82,DE,50.81667,8.1 30331,Winterberg,3017,NW,82,DE,51.19248,8.53468 30339,Wipperfürth,3017,NW,82,DE,51.1161,7.39865 30349,Witten,3017,NW,82,DE,51.44362,7.35258 30454,Wülfrath,3017,NW,82,DE,51.28195,7.03821 30456,Wünnenberg,3017,NW,82,DE,51.52002,8.69934 30420,Wuppertal,3017,NW,82,DE,51.25627,7.14816 30458,Würselen,3017,NW,82,DE,50.81809,6.1347 30461,Xanten,3017,NW,82,DE,51.65877,6.45297 30526,Zulpich,3017,NW,82,DE,50.69447,6.65414 23462,Aach,3019,RP,82,DE,49.78333,6.6 23486,Adenau,3019,RP,82,DE,50.38238,6.93291 23512,Ahrbrück,3019,RP,82,DE,50.48225,6.98804 23535,Albersweiler,3019,RP,82,DE,49.21917,8.03 23538,Albig,3019,RP,82,DE,49.77361,8.12139 23539,Albisheim,3019,RP,82,DE,49.64941,8.09442 23565,Alpenrod,3019,RP,82,DE,50.63333,7.86667 23569,Alsdorf,3019,RP,82,DE,50.77736,7.88562 23570,Alsenz,3019,RP,82,DE,49.71667,7.81667 23572,Alsheim,3019,RP,82,DE,49.76806,8.34028 23590,Altenahr,3019,RP,82,DE,50.51694,6.99206 23598,Altendiez,3019,RP,82,DE,50.36667,7.98333 23601,Altenglan,3019,RP,82,DE,49.55,7.46667 23605,Altenkirchen,3019,RP,82,DE,50.68594,7.64176 23627,Altleiningen,3019,RP,82,DE,49.5075,8.07333 23632,Altrich,3019,RP,82,DE,49.95701,6.91217 23633,Altrip,3019,RP,82,DE,49.43556,8.49472 23642,Alzey,3019,RP,82,DE,49.74657,8.11513 23654,Andernach,3019,RP,82,DE,50.43109,7.40425 23658,Anhausen,3019,RP,82,DE,50.5,7.55 23663,Annweiler am Trifels,3019,RP,82,DE,49.20613,7.97527 23678,Appenheim,3019,RP,82,DE,49.93,8.03333 23682,Argenthal,3019,RP,82,DE,49.96667,7.6 23683,Armsheim,3019,RP,82,DE,49.80972,8.05667 23695,Arzbach,3019,RP,82,DE,50.37902,7.74948 23698,Arzfeld,3019,RP,82,DE,50.08957,6.27069 23699,Asbach,3019,RP,82,DE,50.66667,7.41667 23746,Ayl,3019,RP,82,DE,49.63333,6.55 23756,Bacharach,3019,RP,82,DE,50.05725,7.76948 23766,Bad Bergzabern,3019,RP,82,DE,49.10245,8.00092 23777,Bad Breisig,3019,RP,82,DE,50.50523,7.28861 23785,Bad Dürkheim,3019,RP,82,DE,49.4618,8.17236 23790,Bad Ems,3019,RP,82,DE,50.33544,7.71369 23810,Bad Hönningen,3019,RP,82,DE,50.51689,7.31195 23817,Bad Kreuznach,3019,RP,82,DE,49.8414,7.86713 23833,Bad Marienberg,3019,RP,82,DE,50.64947,7.94958 23838,Bad Münster am Stein-Ebernburg,3019,RP,82,DE,49.81159,7.84523 23842,Bad Neuenahr-Ahrweiler,3019,RP,82,DE,50.54322,7.1113 23894,Badem,3019,RP,82,DE,50.0,6.61667 23920,Bann,3019,RP,82,DE,49.38333,7.61667 23952,Bassenheim,3019,RP,82,DE,50.3582,7.45961 23958,Baumholder,3019,RP,82,DE,49.61738,7.33381 23962,Bausendorf,3019,RP,82,DE,50.01667,7.0 23972,Bechhofen,3019,RP,82,DE,49.35,7.4 23973,Bechtheim,3019,RP,82,DE,49.72778,8.29222 23974,Bechtolsheim,3019,RP,82,DE,49.80417,8.19389 23997,Beindersheim,3019,RP,82,DE,49.56056,8.31944 24000,Bell,3019,RP,82,DE,50.06139,7.41515 24003,Bellheim,3019,RP,82,DE,49.19833,8.27944 24005,Beltheim,3019,RP,82,DE,50.10606,7.46208 24008,Bendorf,3019,RP,82,DE,50.42289,7.57924 24026,Berg,3019,RP,82,DE,48.98403,8.20232 24067,Bernkastel-Kues,3019,RP,82,DE,49.91602,7.07664 24082,Bettingen,3019,RP,82,DE,49.94211,6.4016 24083,Betzdorf,3019,RP,82,DE,50.79094,7.87189 24119,Billigheim-Ingenheim,3019,RP,82,DE,49.13667,8.09056 24124,Bingen am Rhein,3019,RP,82,DE,49.96675,7.8992 24126,Binsfeld,3019,RP,82,DE,49.96667,6.71667 24132,Birken-Honigsessen,3019,RP,82,DE,50.81667,7.73333 24135,Birkenfeld,3019,RP,82,DE,49.65245,7.16668 24137,Birkenheide,3019,RP,82,DE,49.48139,8.26194 24139,Birlenbach,3019,RP,82,DE,50.35815,8.00273 24140,Birresborn,3019,RP,82,DE,50.18333,6.63333 24159,Bitburg,3019,RP,82,DE,49.96794,6.52734 24171,Blankenrath,3019,RP,82,DE,50.03898,7.30214 24176,Bleialf,3019,RP,82,DE,50.23333,6.28333 24189,Bobenheim-Roxheim,3019,RP,82,DE,49.5875,8.35778 24197,Bockenau,3019,RP,82,DE,49.83333,7.68333 24199,Bockenheim,3019,RP,82,DE,49.60669,8.18486 24205,Bodenheim,3019,RP,82,DE,49.93528,8.32 24465,Böhl-Iggelheim,3019,RP,82,DE,49.38056,8.30389 24221,Bolanden,3019,RP,82,DE,49.63917,8.01194 24224,Bollendorf,3019,RP,82,DE,49.85268,6.35795 24230,Bonefeld,3019,RP,82,DE,50.52388,7.48932 24237,Boppard,3019,RP,82,DE,50.23085,7.58992 24252,Bornheim,3019,RP,82,DE,49.2225,8.16333 24255,Bornich,3019,RP,82,DE,50.12687,7.7658 24269,Brachbach,3019,RP,82,DE,50.81667,7.93333 24285,Braubach,3019,RP,82,DE,50.2736,7.64508 24286,Brauneberg,3019,RP,82,DE,49.90583,6.98127 24316,Breitscheidt,3019,RP,82,DE,50.75,7.65 24326,Bretzenheim,3019,RP,82,DE,49.87796,7.89653 24329,Brey,3019,RP,82,DE,50.27253,7.62645 24330,Briedel,3019,RP,82,DE,50.01667,7.15 24342,Brohl-Lützing,3019,RP,82,DE,50.48296,7.32908 24350,Bruchmühlbach-Miesau,3019,RP,82,DE,49.38333,7.43333 24352,Bruchweiler-Bärenbach,3019,RP,82,DE,49.11667,7.8 24366,Brücken,3019,RP,82,DE,49.43174,7.35998 24363,Bruttig-Fankel,3019,RP,82,DE,50.13333,7.23333 24485,Büchel,3019,RP,82,DE,50.17289,7.08318 24488,Büchenbeuren,3019,RP,82,DE,49.92097,7.27999 24398,Budenheim,3019,RP,82,DE,50.01667,8.16667 24401,Bullay,3019,RP,82,DE,50.05448,7.1373 24403,Bundenbach,3019,RP,82,DE,49.8428,7.37826 24404,Bundenthal,3019,RP,82,DE,49.09549,7.80839 24414,Burgbrohl,3019,RP,82,DE,50.45463,7.2772 24431,Burgschwalbach,3019,RP,82,DE,50.28333,8.08333 24448,Busenberg,3019,RP,82,DE,49.13024,7.8293 24523,Carlsberg,3019,RP,82,DE,49.50389,8.04167 24537,Clausen,3019,RP,82,DE,49.26075,7.6773 24545,Cochem,3019,RP,82,DE,50.14511,7.16379 24551,Contwig,3019,RP,82,DE,49.25,7.43333 24572,Daaden,3019,RP,82,DE,50.73333,7.96667 24575,Dachsenhausen,3019,RP,82,DE,50.25415,7.72725 24584,Dahn,3019,RP,82,DE,49.15098,7.77843 24586,Dalheim,3019,RP,82,DE,49.82667,8.29528 24594,Dannstadt-Schauernheim,3019,RP,82,DE,49.44028,8.30861 24603,Dattenberg,3019,RP,82,DE,50.55362,7.29393 24605,Daun,3019,RP,82,DE,50.19716,6.82942 24606,Dausenau,3019,RP,82,DE,50.33333,7.76667 24613,Deidesheim,3019,RP,82,DE,49.40782,8.18445 24624,Dellfeld,3019,RP,82,DE,49.23397,7.47399 24638,Dernau,3019,RP,82,DE,50.53333,7.05 24639,Dernbach,3019,RP,82,DE,50.45551,7.79003 24640,Derschen,3019,RP,82,DE,50.71667,7.98333 24661,Dexheim,3019,RP,82,DE,49.84722,8.31667 24664,Dieblich,3019,RP,82,DE,50.31396,7.47185 24669,Dienheim,3019,RP,82,DE,49.83722,8.34972 24671,Dierdorf,3019,RP,82,DE,50.54647,7.65271 24687,Diez,3019,RP,82,DE,50.37419,8.00735 24703,Dirmstein,3019,RP,82,DE,49.56333,8.24472 24708,Dittelsheim-Heßloch,3019,RP,82,DE,49.74389,8.23694 24726,Dommershausen,3019,RP,82,DE,50.15,7.4 24801,Dörrenbach,3019,RP,82,DE,49.08972,7.9614 24762,Dreikirchen,3019,RP,82,DE,50.43333,7.95 24763,Dreis,3019,RP,82,DE,49.9409,6.81845 24764,Dreisen,3019,RP,82,DE,49.60333,8.01056 24775,Dudeldorf,3019,RP,82,DE,49.97494,6.63724 24776,Dudenhofen,3019,RP,82,DE,49.31861,8.38861 24807,Düngenheim,3019,RP,82,DE,50.26062,7.16523 24831,Ebernhahn,3019,RP,82,DE,50.47278,7.77 24840,Ebertsheim,3019,RP,82,DE,49.56833,8.10861 24855,Edenkoben,3019,RP,82,DE,49.28393,8.12714 24858,Edesheim,3019,RP,82,DE,49.26333,8.135 24860,Ediger-Eller,3019,RP,82,DE,50.11667,7.15 24890,Ehlscheid,3019,RP,82,DE,50.51448,7.46655 24927,Eisenberg,3019,RP,82,DE,49.55859,8.07199 24935,Eitelborn,3019,RP,82,DE,50.37806,7.72333 24945,Elkenroth,3019,RP,82,DE,50.73333,7.88333 24951,Ellerstadt,3019,RP,82,DE,49.46167,8.25944 24961,Elmstein,3019,RP,82,DE,49.36667,7.93333 24987,Emmelshausen,3019,RP,82,DE,50.15484,7.55185 25008,Enkenbach-Alsenborn,3019,RP,82,DE,49.48333,7.9 25009,Enkirch,3019,RP,82,DE,49.98434,7.12997 25020,Eppelsheim,3019,RP,82,DE,49.70556,8.16528 25021,Eppenbrunn,3019,RP,82,DE,49.11667,7.56667 25030,Erbes-Büdesheim,3019,RP,82,DE,49.75444,8.03139 25039,Erfweiler,3019,RP,82,DE,49.15712,7.81231 25067,Erpel,3019,RP,82,DE,50.58333,7.23333 25068,Erpolzheim,3019,RP,82,DE,49.48917,8.22472 25097,Essenheim,3019,RP,82,DE,49.93056,8.15556 25100,Essingen,3019,RP,82,DE,49.23583,8.17472 25104,Esthal,3019,RP,82,DE,49.38333,7.98333 25108,Ettringen,3019,RP,82,DE,50.35,7.21667 25110,Etzbach,3019,RP,82,DE,50.77831,7.688 25125,Fachbach,3019,RP,82,DE,50.33333,7.68333 25130,Faid,3019,RP,82,DE,50.14454,7.11951 25150,Feilbingert,3019,RP,82,DE,49.76667,7.8 25158,Fell,3019,RP,82,DE,49.76667,6.78333 25179,Fischbach,3019,RP,82,DE,49.08771,7.7116 25183,Flacht,3019,RP,82,DE,50.34528,8.05028 25185,Flammersfeld,3019,RP,82,DE,50.64711,7.52713 25194,Flomborn,3019,RP,82,DE,49.69056,8.14917 25195,Flonheim,3019,RP,82,DE,49.785,8.04 25321,Föhren,3019,RP,82,DE,49.85929,6.7648 25210,Framersheim,3019,RP,82,DE,49.75806,8.17417 25217,Frankenstein,3019,RP,82,DE,49.44015,7.97744 25218,Frankenthal,3019,RP,82,DE,49.53414,8.35357 25235,Freckenfeld,3019,RP,82,DE,49.065,8.11389 25237,Frei-Laubersheim,3019,RP,82,DE,49.8,7.9 25248,Freinsheim,3019,RP,82,DE,49.50649,8.21186 25249,Freisbach,3019,RP,82,DE,49.27167,8.27194 25259,Freudenburg,3019,RP,82,DE,49.54348,6.53292 25273,Friedelsheim,3019,RP,82,DE,49.44694,8.22306 25280,Friedewald,3019,RP,82,DE,50.71106,7.9604 25298,Friesenhagen,3019,RP,82,DE,50.90377,7.80961 25325,Fürfeld,3019,RP,82,DE,49.77737,7.89264 25338,Fürthen,3019,RP,82,DE,50.78333,7.66667 25320,Fußgönheim,3019,RP,82,DE,49.46111,8.29222 25371,Gartenstadt,3019,RP,82,DE,49.45937,8.40377 25378,Gau-Algesheim,3019,RP,82,DE,49.95669,8.01569 25379,Gau-Bickelheim,3019,RP,82,DE,49.83528,8.02056 25380,Gau-Bischofsheim,3019,RP,82,DE,49.91583,8.27278 25381,Gau-Odernheim,3019,RP,82,DE,49.78472,8.19417 25385,Gebhardshain,3019,RP,82,DE,50.75,7.81667 25422,Gemünden,3019,RP,82,DE,49.89444,7.4775 25427,Gensingen,3019,RP,82,DE,49.9,7.93333 25446,Germersheim,3019,RP,82,DE,49.22306,8.36389 25455,Gerolsheim,3019,RP,82,DE,49.54778,8.26389 25456,Gerolstein,3019,RP,82,DE,50.22224,6.65984 25490,Gillenfeld,3019,RP,82,DE,50.1279,6.90383 25493,Gimbsheim,3019,RP,82,DE,49.77778,8.375 25497,Girod,3019,RP,82,DE,50.45,7.91667 25501,Glan-Münchweiler,3019,RP,82,DE,49.47222,7.44204 25777,Göllheim,3019,RP,82,DE,49.595,8.05083 25540,Gommersheim,3019,RP,82,DE,49.29111,8.26583 25542,Gondershausen,3019,RP,82,DE,50.15,7.5 25778,Gönnheim,3019,RP,82,DE,49.44806,8.23861 25548,Gossersweiler-Stein,3019,RP,82,DE,49.15,7.93333 25594,Greimerath,3019,RP,82,DE,49.56155,6.68374 25607,Gries,3019,RP,82,DE,49.41667,7.4 25613,Grolsheim,3019,RP,82,DE,49.90834,7.91599 25680,Großholbach,3019,RP,82,DE,50.45,7.88333 25681,Großkarlbach,3019,RP,82,DE,49.53833,8.22472 25690,Großlittgen,3019,RP,82,DE,50.02787,6.79865 25691,Großmaischeid,3019,RP,82,DE,50.5,7.63333 25694,Großniedesheim,3019,RP,82,DE,49.57528,8.31222 25744,Grünstadt,3019,RP,82,DE,49.56302,8.16279 25791,Gückingen,3019,RP,82,DE,50.39091,8.00726 25758,Gundersheim,3019,RP,82,DE,49.69611,8.2025 25760,Guntersblum,3019,RP,82,DE,49.7975,8.34556 25762,Gusenburg,3019,RP,82,DE,49.63333,6.9 25763,Gusterath,3019,RP,82,DE,49.7,6.71667 25766,Gutenberg,3019,RP,82,DE,49.88333,7.8 25810,Hachenburg,3019,RP,82,DE,50.65998,7.82276 25811,Hackenheim,3019,RP,82,DE,49.82524,7.89907 25820,Hagenbach,3019,RP,82,DE,49.01734,8.25024 25826,Hahnheim,3019,RP,82,DE,49.86083,8.23694 25827,Hahnstätten,3019,RP,82,DE,50.3,8.06667 25859,Halsenbach,3019,RP,82,DE,50.17174,7.55673 25874,Hamm,3019,RP,82,DE,50.76531,7.67761 25888,Hanhofen,3019,RP,82,DE,49.31667,8.34083 25903,Hargesheim,3019,RP,82,DE,49.8623,7.82881 25915,Harthausen,3019,RP,82,DE,49.29417,8.345 25918,Harxheim,3019,RP,82,DE,49.90528,8.26417 25964,Haßloch,3019,RP,82,DE,49.36278,8.25806 25939,Hattert,3019,RP,82,DE,50.66667,7.76667 25943,Hatzenbühl,3019,RP,82,DE,49.11111,8.24528 25945,Hauenstein,3019,RP,82,DE,49.19211,7.85492 25948,Hauptstuhl,3019,RP,82,DE,49.4,7.48333 25951,Hausen,3019,RP,82,DE,50.54242,7.40703 25988,Heidesheim,3019,RP,82,DE,49.58247,8.19537 25999,Heiligenroth,3019,RP,82,DE,50.45,7.86667 26006,Heimbach,3019,RP,82,DE,50.45,7.53333 26018,Heistenbach,3019,RP,82,DE,50.37933,7.98629 26022,Helferskirchen,3019,RP,82,DE,50.51028,7.81184 26024,Hellenhahn-Schellenberg,3019,RP,82,DE,50.61278,8.02639 26035,Heltersberg,3019,RP,82,DE,49.31667,7.71667 26053,Hennweiler,3019,RP,82,DE,49.81667,7.43333 26064,Herdorf,3019,RP,82,DE,50.77704,7.95366 26068,Herforst,3019,RP,82,DE,49.95,6.7 26077,Hermersberg,3019,RP,82,DE,49.31667,7.63333 26078,Hermeskeil,3019,RP,82,DE,49.65528,6.94407 26095,Herschweiler-Pettersheim,3019,RP,82,DE,49.48333,7.35 26097,Herxheim am Berg,3019,RP,82,DE,49.50917,8.17917 26129,Heßheim,3019,RP,82,DE,49.54583,8.30778 26110,Hettenleidelheim,3019,RP,82,DE,49.53556,8.07361 26115,Hetzerath,3019,RP,82,DE,49.88333,6.81667 26119,Heuchelheim bei Frankenthal,3019,RP,82,DE,49.56306,8.29083 26140,Hilgert,3019,RP,82,DE,50.45634,7.68735 26144,Hillesheim,3019,RP,82,DE,50.29177,6.66963 26145,Hillscheid,3019,RP,82,DE,50.40639,7.69861 26157,Hinterweidenthal,3019,RP,82,DE,49.2,7.75 26174,Hochdorf-Assenheim,3019,RP,82,DE,49.41944,8.28167 26178,Hochspeyer,3019,RP,82,DE,49.44207,7.89504 26179,Hochstadt,3019,RP,82,DE,49.2475,8.20889 26181,Hochstetten-Dhaun,3019,RP,82,DE,49.8,7.5 26184,Hof,3019,RP,82,DE,50.66667,8.01667 26307,Höheinöd,3019,RP,82,DE,49.28966,7.60673 26308,Höheischweiler,3019,RP,82,DE,49.23333,7.55 26311,Höhn,3019,RP,82,DE,50.61667,7.98333 26313,Höhr-Grenzhausen,3019,RP,82,DE,50.43474,7.66903 26233,Holler,3019,RP,82,DE,50.41667,7.83333 26240,Holzappel,3019,RP,82,DE,50.35,7.9 26244,Holzhausen an der Haide,3019,RP,82,DE,50.21855,7.90973 26255,Hoppstädten-Weiersbach,3019,RP,82,DE,49.61667,7.2 26317,Hördt,3019,RP,82,DE,49.16583,8.32639 26261,Horhausen,3019,RP,82,DE,50.58745,7.53028 26265,Hornbach,3019,RP,82,DE,49.18778,7.36883 26330,Hüffelsheim,3019,RP,82,DE,49.81667,7.8 26288,Hundsangen,3019,RP,82,DE,50.45,7.98333 26342,Hütschenhausen,3019,RP,82,DE,49.41667,7.48333 26350,Idar-Oberstein,3019,RP,82,DE,49.71443,7.30776 26355,Igel,3019,RP,82,DE,49.71033,6.55498 26364,Ilbesheim,3019,RP,82,DE,49.18277,8.05363 26385,Imsbach,3019,RP,82,DE,49.58333,7.88333 26389,Ingelheim am Rhein,3019,RP,82,DE,49.97078,8.05883 26396,Insheim,3019,RP,82,DE,49.15806,8.14722 26406,Irrel,3019,RP,82,DE,49.84539,6.45705 26407,Irsch,3019,RP,82,DE,49.7262,6.69806 26453,Jockgrim,3019,RP,82,DE,49.09288,8.27468 26460,Jugenheim,3019,RP,82,DE,49.89362,8.08468 26474,Jünkerath,3019,RP,82,DE,50.34412,6.58138 26478,Kadenbach,3019,RP,82,DE,50.38333,7.73333 26482,Kaisersesch,3019,RP,82,DE,50.23148,7.13864 26483,Kaiserslautern,3019,RP,82,DE,49.443,7.77161 26494,Kallstadt,3019,RP,82,DE,49.49083,8.17611 26495,Kaltenengers,3019,RP,82,DE,50.41667,7.55 26502,Kamp-Bornhofen,3019,RP,82,DE,50.22282,7.62364 26505,Kandel,3019,RP,82,DE,49.08277,8.1972 26511,Kapsweyer,3019,RP,82,DE,49.04389,8.02167 26527,Kasbach-Ohlenberg,3019,RP,82,DE,50.58333,7.26667 26528,Kasel,3019,RP,82,DE,49.7617,6.73222 26532,Kastellaun,3019,RP,82,DE,50.06922,7.44154 26537,Katzenelnbogen,3019,RP,82,DE,50.26745,7.97322 26539,Katzweiler,3019,RP,82,DE,49.5,7.7 26540,Katzwinkel,3019,RP,82,DE,50.8147,7.82236 26541,Kaub,3019,RP,82,DE,50.08831,7.76069 26552,Kehrig,3019,RP,82,DE,50.28333,7.21667 26554,Kelberg,3019,RP,82,DE,50.29164,6.9195 26558,Kell,3019,RP,82,DE,49.63425,6.8239 26568,Kempenich,3019,RP,82,DE,50.42024,7.11698 26570,Kenn,3019,RP,82,DE,49.8,6.71667 26573,Kerzenheim,3019,RP,82,DE,49.57639,8.05972 26578,Kettig,3019,RP,82,DE,50.4,7.46667 26589,Kindenheim,3019,RP,82,DE,49.61111,8.16417 26590,Kinderbeuern,3019,RP,82,DE,50.00935,7.02355 26591,Kindsbach,3019,RP,82,DE,49.41667,7.61667 26596,Kirchberg,3019,RP,82,DE,49.94395,7.407 26608,Kirchen,3019,RP,82,DE,50.80849,7.88634 26623,Kirchheim an der Weinstraße,3019,RP,82,DE,49.53722,8.18083 26626,Kirchheimbolanden,3019,RP,82,DE,49.66249,8.01513 26635,Kirchwald,3019,RP,82,DE,50.36667,7.15 26642,Kirn,3019,RP,82,DE,49.78912,7.45765 26643,Kirrweiler,3019,RP,82,DE,49.30124,8.16288 26645,Kirschweiler,3019,RP,82,DE,49.75,7.25 26657,Klausen,3019,RP,82,DE,49.9,6.88333 26667,Klein-Winternheim,3019,RP,82,DE,49.93833,8.21194 26676,Kleinmaischeid,3019,RP,82,DE,50.51345,7.6083 26687,Klingenmünster,3019,RP,82,DE,49.14056,8.01861 26696,Klotten,3019,RP,82,DE,50.16667,7.2 26699,Klüsserath,3019,RP,82,DE,49.845,6.85086 26702,Knittelsheim,3019,RP,82,DE,49.19167,8.25139 26704,Kobern-Gondorf,3019,RP,82,DE,50.3023,7.45612 26705,Koblenz,3019,RP,82,DE,50.35357,7.57883 26815,Kölbingen,3019,RP,82,DE,50.55,7.93333 26820,Köngernheim,3019,RP,82,DE,49.84583,8.24667 26719,Konz,3019,RP,82,DE,49.70045,6.57652 26723,Kordel,3019,RP,82,DE,49.83333,6.63333 26845,Körperich,3019,RP,82,DE,49.92449,6.25973 26730,Kottenheim,3019,RP,82,DE,50.35,7.25 26732,Kottweiler-Schwanden,3019,RP,82,DE,49.48333,7.53333 26759,Krickenbach,3019,RP,82,DE,49.36667,7.66667 26762,Kriegsfeld,3019,RP,82,DE,49.70992,7.91687 26786,Kröv,3019,RP,82,DE,49.98333,7.08333 26777,Kruft,3019,RP,82,DE,50.38333,7.33333 26792,Kuhardt,3019,RP,82,DE,49.14583,8.31444 26805,Kusel,3019,RP,82,DE,49.53772,7.40472 26810,Kyllburg,3019,RP,82,DE,50.03864,6.59478 26868,Lachen-Speyerdorf,3019,RP,82,DE,49.33049,8.19983 26875,Lahnstein,3019,RP,82,DE,50.3,7.61667 26881,Lambrecht,3019,RP,82,DE,49.37055,8.07264 26883,Lambsheim,3019,RP,82,DE,49.51361,8.28778 26890,Landau in der Pfalz,3019,RP,82,DE,49.19844,8.11692 26896,Landscheid,3019,RP,82,DE,49.98333,6.76667 26898,Landstuhl,3019,RP,82,DE,49.41306,7.57021 26908,Langenbach bei Marienberg,3019,RP,82,DE,50.63806,7.94787 26920,Langenhahn,3019,RP,82,DE,50.58333,7.91667 26923,Langenlonsheim,3019,RP,82,DE,49.9,7.9 26942,Langsur,3019,RP,82,DE,49.72442,6.49906 26956,Laubach,3019,RP,82,DE,50.23277,7.07333 26986,Lauterecken,3019,RP,82,DE,49.64993,7.59265 27008,Lehmen,3019,RP,82,DE,50.28333,7.45 27021,Leimersheim,3019,RP,82,DE,49.12421,8.34531 27031,Leiwen,3019,RP,82,DE,49.81667,6.88333 27033,Lemberg,3019,RP,82,DE,49.17309,7.65111 27059,Leubsdorf,3019,RP,82,DE,50.55,7.3 27069,Leutesdorf,3019,RP,82,DE,50.45,7.38333 27094,Lieser,3019,RP,82,DE,49.91667,7.01667 27100,Limburgerhof,3019,RP,82,DE,49.42444,8.39194 27106,Linden,3019,RP,82,DE,49.35,7.65 27107,Lindenberg,3019,RP,82,DE,49.38028,8.09861 27115,Lingenfeld,3019,RP,82,DE,49.25389,8.33861 27119,Linz am Rhein,3019,RP,82,DE,50.56884,7.28445 27121,Lissendorf,3019,RP,82,DE,50.31667,6.6 27192,Löf,3019,RP,82,DE,50.23333,7.43333 27143,Longkamp,3019,RP,82,DE,49.89044,7.11764 27144,Longuich,3019,RP,82,DE,49.80841,6.76832 27146,Lonnig,3019,RP,82,DE,50.31002,7.40509 27198,Lörzweiler,3019,RP,82,DE,49.89833,8.29472 27165,Ludwigshafen am Rhein,3019,RP,82,DE,49.48121,8.44641 27179,Lustadt,3019,RP,82,DE,49.24476,8.27407 27181,Lutzerath,3019,RP,82,DE,50.12695,7.0074 27228,Mackenbach,3019,RP,82,DE,49.46667,7.58333 27236,Maikammer,3019,RP,82,DE,49.30528,8.13167 27244,Mainz,3019,RP,82,DE,49.98419,8.2791 27248,Malborn,3019,RP,82,DE,49.71667,6.98333 27260,Mammelzen,3019,RP,82,DE,50.7,7.66667 27264,Manderscheid,3019,RP,82,DE,50.09672,6.80981 27278,Marienrachdorf,3019,RP,82,DE,50.55,7.71667 27282,Maring-Noviand,3019,RP,82,DE,49.93333,7.0 27321,Marnheim,3019,RP,82,DE,49.63278,8.04 27331,Martinshöhe,3019,RP,82,DE,49.36667,7.48333 27336,Masburg,3019,RP,82,DE,50.24065,7.11736 27353,Maßweiler,3019,RP,82,DE,49.26667,7.53333 27341,Mastershausen,3019,RP,82,DE,50.06667,7.35 27348,Maxdorf,3019,RP,82,DE,49.48806,8.29167 27350,Maxsain,3019,RP,82,DE,50.54316,7.78512 27351,Mayen,3019,RP,82,DE,50.32797,7.22277 27357,Meckenheim,3019,RP,82,DE,49.40444,8.23917 27361,Meddersheim,3019,RP,82,DE,49.77636,7.61708 27370,Mehlbach,3019,RP,82,DE,49.51667,7.71667 27371,Mehlingen,3019,RP,82,DE,49.49136,7.85467 27374,Mehren,3019,RP,82,DE,50.18333,6.88333 27376,Mehring,3019,RP,82,DE,49.8,6.83333 27384,Meisenheim,3019,RP,82,DE,49.70721,7.66765 27398,Melsbach,3019,RP,82,DE,50.48333,7.48333 27405,Mendig,3019,RP,82,DE,50.36667,7.28333 27423,Mertesdorf,3019,RP,82,DE,49.77212,6.7329 27425,Mertloch,3019,RP,82,DE,50.26948,7.30814 27426,Merxheim,3019,RP,82,DE,49.79297,7.5601 27427,Merzalben,3019,RP,82,DE,49.24467,7.73077 27438,Mettendorf,3019,RP,82,DE,49.94784,6.33003 27439,Mettenheim,3019,RP,82,DE,49.74,8.32583 27445,Meudt,3019,RP,82,DE,50.49889,7.895 27459,Miehlen,3019,RP,82,DE,50.22574,7.83196 27473,Minfeld,3019,RP,82,DE,49.07167,8.14528 27483,Mittelhof,3019,RP,82,DE,50.77517,7.80466 27500,Mogendorf,3019,RP,82,DE,50.49444,7.75972 27507,Mommenheim,3019,RP,82,DE,49.88028,8.265 27511,Monsheim,3019,RP,82,DE,49.63722,8.21194 27512,Montabaur,3019,RP,82,DE,50.43588,7.8232 27513,Monzelfeld,3019,RP,82,DE,49.89237,7.07318 27514,Monzingen,3019,RP,82,DE,49.79763,7.59284 27523,Morbach,3019,RP,82,DE,49.80772,7.12714 27532,Mudersbach,3019,RP,82,DE,50.82515,7.94347 27605,Mülheim-Kärlich,3019,RP,82,DE,50.3851,7.4989 27615,Münchweiler an der Alsenz,3019,RP,82,DE,49.55,7.88333 27616,Münchweiler an der Rodalbe,3019,RP,82,DE,49.21798,7.70295 27623,Münster-Sarmsheim,3019,RP,82,DE,49.94341,7.89426 27626,Münstermaifeld,3019,RP,82,DE,50.24638,7.36208 27629,Müschenbach,3019,RP,82,DE,50.68333,7.78333 27550,Mutterstadt,3019,RP,82,DE,49.44139,8.35611 27633,Nackenheim,3019,RP,82,DE,49.91528,8.33889 27642,Nanzdietschweiler,3019,RP,82,DE,49.45,7.45 27644,Nassau,3019,RP,82,DE,50.31453,7.80025 27645,Nastätten,3019,RP,82,DE,50.19883,7.85892 27653,Nauort,3019,RP,82,DE,50.46667,7.63333 27654,Nauroth,3019,RP,82,DE,50.69927,7.87543 27676,Nentershausen,3019,RP,82,DE,50.41667,7.93333 27708,Neuburg,3019,RP,82,DE,48.98933,8.24715 27730,Neuerburg,3019,RP,82,DE,50.00102,6.94828 27751,Neuhäusel,3019,RP,82,DE,50.3836,7.7096 27750,Neuhofen,3019,RP,82,DE,49.42778,8.42472 27769,Neumagen-Dhron,3019,RP,82,DE,49.85553,6.89777 27777,Neunkhausen,3019,RP,82,DE,50.70722,7.90278 27784,Neupotz,3019,RP,82,DE,49.11778,8.31944 27794,Neustadt,3019,RP,82,DE,49.35009,8.13886 27814,Neuwied,3019,RP,82,DE,50.4336,7.47057 27819,Newel,3019,RP,82,DE,49.8124,6.58304 27820,Nickenich,3019,RP,82,DE,50.41421,7.32728 27827,Nieder-Ingelheim,3019,RP,82,DE,49.97756,8.07246 27828,Nieder-Olm,3019,RP,82,DE,49.91166,8.20533 27835,Niederbreitbach,3019,RP,82,DE,50.53051,7.42099 27840,Niederdreisbach,3019,RP,82,DE,50.74955,7.92352 27841,Niederdürenbach,3019,RP,82,DE,50.45,7.18333 27842,Niederelbert,3019,RP,82,DE,50.40775,7.8099 27843,Niedererbach,3019,RP,82,DE,50.4261,7.97425 27845,Niederfell,3019,RP,82,DE,50.28333,7.46667 27846,Niederfischbach,3019,RP,82,DE,50.85,7.86667 27851,Niederkirchen,3019,RP,82,DE,49.58333,7.7 27852,Niederkirchen bei Deidesheim,3019,RP,82,DE,49.415,8.21 27858,Niedermohr,3019,RP,82,DE,49.45899,7.46955 27862,Niederneisen,3019,RP,82,DE,50.33333,8.05 27882,Niederwerth,3019,RP,82,DE,50.4,7.61667 27887,Niederzissen,3019,RP,82,DE,50.45876,7.2181 27897,Nierstein,3019,RP,82,DE,49.87003,8.33647 27902,Nister,3019,RP,82,DE,50.67583,7.83833 27903,Nittel,3019,RP,82,DE,49.65,6.45 27929,Norheim,3019,RP,82,DE,49.81091,7.81478 27948,Nörtershausen,3019,RP,82,DE,50.21667,7.48333 27957,Ober-Flörsheim,3019,RP,82,DE,49.68306,8.15528 27959,Ober-Olm,3019,RP,82,DE,49.93722,8.18889 27961,Ober-Saulheim,3019,RP,82,DE,49.86376,8.13526 27975,Oberelbert,3019,RP,82,DE,50.39167,7.81722 27977,Oberfell,3019,RP,82,DE,50.26038,7.44461 28000,Obermoschel,3019,RP,82,DE,49.72797,7.77266 28009,Obernheim-Kirchenarnbach,3019,RP,82,DE,49.35,7.58333 28014,Oberotterbach,3019,RP,82,DE,49.07044,7.96955 28054,Oberwesel,3019,RP,82,DE,50.10777,7.72522 28057,Oberzissen,3019,RP,82,DE,50.45,7.2 28061,Obrigheim,3019,RP,82,DE,49.59161,8.20483 28064,Ochtendung,3019,RP,82,DE,50.35,7.38333 28066,Ockenfels,3019,RP,82,DE,50.5761,7.27535 28067,Ockenheim,3019,RP,82,DE,49.94371,7.97127 28071,Odernheim,3019,RP,82,DE,49.76511,7.70427 28087,Offenbach an der Queich,3019,RP,82,DE,49.19546,8.19779 28088,Offenbach-Hundheim,3019,RP,82,DE,49.61729,7.55117 28093,Offstein,3019,RP,82,DE,49.60611,8.23806 28114,Olsbrücken,3019,RP,82,DE,49.53884,7.65857 28119,Oppenheim,3019,RP,82,DE,49.8547,8.35974 28125,Orenhofen,3019,RP,82,DE,49.9,6.65 28134,Osann-Monzel,3019,RP,82,DE,49.91667,6.95 28135,Osburg,3019,RP,82,DE,49.71667,6.78333 28158,Osterspai,3019,RP,82,DE,50.24453,7.61227 28163,Osthofen,3019,RP,82,DE,49.70382,8.32419 28185,Otterbach,3019,RP,82,DE,49.48554,7.7345 28186,Otterberg,3019,RP,82,DE,49.50301,7.76995 28190,Ottersheim,3019,RP,82,DE,49.19129,8.23176 28191,Otterstadt,3019,RP,82,DE,49.37222,8.44778 30552,Ötzingen,3019,RP,82,DE,50.5,7.83333 28213,Palzem,3019,RP,82,DE,49.56667,6.36667 28227,Partenheim,3019,RP,82,DE,49.88389,8.08222 28247,Pellingen,3019,RP,82,DE,49.67552,6.67085 28249,Pelm,3019,RP,82,DE,50.23188,6.69076 28270,Pfaffen-Schwabenheim,3019,RP,82,DE,49.85,7.95 28285,Pfeffelbach,3019,RP,82,DE,49.53948,7.32768 28300,Piesport,3019,RP,82,DE,49.8864,6.91649 28308,Pirmasens,3019,RP,82,DE,49.20145,7.60529 28311,Plaidt,3019,RP,82,DE,50.3926,7.39251 28329,Pluwig,3019,RP,82,DE,49.68976,6.71239 28341,Polch,3019,RP,82,DE,50.29973,7.31315 28364,Pottum,3019,RP,82,DE,50.6,8.0 28367,Pracht,3019,RP,82,DE,50.76031,7.64871 28400,Prüm,3019,RP,82,DE,50.20785,6.42019 28402,Puderbach,3019,RP,82,DE,50.6,7.61667 28427,Queidersbach,3019,RP,82,DE,49.36667,7.63333 28457,Ralingen,3019,RP,82,DE,49.81667,6.5 28458,Ramberg,3019,RP,82,DE,49.26028,8.00833 28461,Rammelsbach,3019,RP,82,DE,49.5417,7.44392 28465,Ramsen,3019,RP,82,DE,49.53694,8.01333 28467,Ramstein-Miesenbach,3019,RP,82,DE,49.44452,7.55533 28474,Ransbach-Baumbach,3019,RP,82,DE,50.46496,7.7283 28492,Raubach,3019,RP,82,DE,50.57489,7.62496 28531,Rehe,3019,RP,82,DE,50.63333,8.11667 28542,Reichenbach-Steegen,3019,RP,82,DE,49.5,7.55 28552,Reil,3019,RP,82,DE,50.01667,7.11667 28565,Reinsfeld,3019,RP,82,DE,49.68333,6.88333 28572,Remagen,3019,RP,82,DE,50.57879,7.22703 28580,Rengsdorf,3019,RP,82,DE,50.5,7.5 28581,Rennerod,3019,RP,82,DE,50.6082,8.06697 28599,Rhaunen,3019,RP,82,DE,49.8638,7.34198 28609,Rheinböllen,3019,RP,82,DE,50.01127,7.67249 28607,Rheinbreitbach,3019,RP,82,DE,50.61667,7.23333 28608,Rheinbrohl,3019,RP,82,DE,50.5,7.33333 28614,Rheinzabern,3019,RP,82,DE,49.11806,8.27806 28615,Rhens,3019,RP,82,DE,50.28125,7.6175 28618,Rhodt unter Rietburg,3019,RP,82,DE,49.26972,8.10778 28628,Rieden,3019,RP,82,DE,50.4,7.18333 28646,Rieschweiler-Mühlbach,3019,RP,82,DE,49.23333,7.5 28658,Rimschweiler,3019,RP,82,DE,49.2188,7.37571 28665,Riol,3019,RP,82,DE,49.79301,6.79211 28668,Rittersdorf,3019,RP,82,DE,50.0,6.5 28672,Rockenhausen,3019,RP,82,DE,49.62974,7.82134 28673,Rodalben,3019,RP,82,DE,49.2394,7.63962 28675,Rodenbach,3019,RP,82,DE,49.57414,8.10695 28778,Rödersheim-Gronau,3019,RP,82,DE,49.43,8.26139 28690,Rohrbach,3019,RP,82,DE,49.13667,8.12861 28721,Roth,3019,RP,82,DE,50.7623,7.70016 28740,Roxheim,3019,RP,82,DE,49.86374,7.8098 28800,Rüdesheim,3019,RP,82,DE,49.84546,7.81452 28805,Rülzheim,3019,RP,82,DE,49.15312,8.29287 28806,Rümmelsheim,3019,RP,82,DE,49.93307,7.85977 28765,Ruppach-Goldhausen,3019,RP,82,DE,50.46667,7.88333 28766,Ruppertsberg,3019,RP,82,DE,49.40028,8.19611 28768,Ruppertsweiler,3019,RP,82,DE,49.19707,7.68957 28817,Saarburg,3019,RP,82,DE,49.60641,6.54365 28827,Saffig,3019,RP,82,DE,50.38333,7.41667 28836,Salmtal,3019,RP,82,DE,49.93333,6.85 28867,Sankt Goar,3019,RP,82,DE,50.14878,7.7072 28868,Sankt Goarshausen,3019,RP,82,DE,50.15839,7.71374 28871,Sankt Julian,3019,RP,82,DE,49.61667,7.51667 28872,Sankt Katharinen,3019,RP,82,DE,50.58333,7.38333 28877,Sankt Martin,3019,RP,82,DE,49.30028,8.10528 28882,Sankt Sebastian,3019,RP,82,DE,50.41077,7.56175 28936,Scheuerfeld,3019,RP,82,DE,50.78736,7.84128 28943,Schifferstadt,3019,RP,82,DE,49.38417,8.3775 28947,Schillingen,3019,RP,82,DE,49.63333,6.78333 29118,Schönecken,3019,RP,82,DE,50.15909,6.4682 29121,Schönenberg-Kübelberg,3019,RP,82,DE,49.4074,7.37233 29022,Schopp,3019,RP,82,DE,49.35,7.68333 29025,Schornsheim,3019,RP,82,DE,49.84583,8.175 29040,Schwabenheim,3019,RP,82,DE,49.92879,8.09525 29077,Schwedelbach,3019,RP,82,DE,49.49557,7.59366 29079,Schwegenheim,3019,RP,82,DE,49.27,8.32861 29080,Schweich,3019,RP,82,DE,49.82215,6.75256 29081,Schweigen-Rechtenbach,3019,RP,82,DE,49.05314,7.95638 29140,Seck,3019,RP,82,DE,50.57722,8.04972 29171,Seibersbach,3019,RP,82,DE,49.96667,7.71667 29184,Selters,3019,RP,82,DE,50.53253,7.75577 29186,Selzen,3019,RP,82,DE,49.86056,8.25528 29187,Sembach,3019,RP,82,DE,49.51177,7.86661 29195,Serrig,3019,RP,82,DE,49.57519,6.57454 29208,Siebeldingen,3019,RP,82,DE,49.20889,8.05139 29210,Siefersheim,3019,RP,82,DE,49.8,7.95 29221,Siershahn,3019,RP,82,DE,50.48639,7.77972 29235,Simmern,3019,RP,82,DE,49.98198,7.52351 29237,Simmertal,3019,RP,82,DE,49.80981,7.52282 29242,Singhofen,3019,RP,82,DE,50.2744,7.83333 29247,Sinzig,3019,RP,82,DE,50.54384,7.24639 29249,Sippersfeld,3019,RP,82,DE,49.55,7.93333 29257,Sohren,3019,RP,82,DE,49.93333,7.31667 29495,Sörgenloch,3019,RP,82,DE,49.88306,8.20111 29283,Spabrücken,3019,RP,82,DE,49.9,7.71667 29290,Spay,3019,RP,82,DE,50.25881,7.64839 29292,Speicher,3019,RP,82,DE,49.93333,6.63333 29299,Speyer,3019,RP,82,DE,49.32083,8.43111 29303,Spiesheim,3019,RP,82,DE,49.81028,8.1275 29308,Sprendlingen,3019,RP,82,DE,49.86667,7.98333 29315,Stadecken-Elsheim,3019,RP,82,DE,49.91222,8.12528 29323,Stadtkyll,3019,RP,82,DE,50.35,6.53333 29344,Staudernheim,3019,RP,82,DE,49.77675,7.6889 29356,Steimel,3019,RP,82,DE,50.61667,7.63333 29372,Steinfeld,3019,RP,82,DE,49.04833,8.03694 29391,Steinweiler,3019,RP,82,DE,49.12111,8.14139 29392,Steinwenden,3019,RP,82,DE,49.45708,7.52726 29397,Stelzenberg,3019,RP,82,DE,49.37756,7.73814 29436,Stromberg,3019,RP,82,DE,50.45779,7.60041 29480,Sulzheim,3019,RP,82,DE,49.84306,8.09167 29541,Tawern,3019,RP,82,DE,49.66667,6.51667 29576,Thaleischweiler-Fröschen,3019,RP,82,DE,49.26667,7.58333 29577,Thalfang,3019,RP,82,DE,49.75,7.0 29598,Thomm,3019,RP,82,DE,49.7414,6.80492 29607,Thür,3019,RP,82,DE,50.35692,7.27689 29636,Traben-Trarbach,3019,RP,82,DE,49.95076,7.11562 29642,Trassem,3019,RP,82,DE,49.57849,6.5254 29654,Trechtingshausen,3019,RP,82,DE,50.01031,7.84709 29658,Treis-Karden,3019,RP,82,DE,50.17174,7.30218 29668,Trier,3019,RP,82,DE,49.75565,6.63935 29669,Trierweiler,3019,RP,82,DE,49.76231,6.55987 29672,Trippstadt,3019,RP,82,DE,49.35935,7.7748 29675,Trittenheim,3019,RP,82,DE,49.82471,6.89929 29683,Trulben,3019,RP,82,DE,49.13916,7.5437 29716,Udenheim,3019,RP,82,DE,49.86472,8.17167 30558,Üdersdorf,3019,RP,82,DE,50.15,6.8 29724,Uelversheim,3019,RP,82,DE,49.81,8.28861 29738,Ulmen,3019,RP,82,DE,50.20943,6.97941 29744,Undenheim,3019,RP,82,DE,49.83806,8.21889 29746,Unkel,3019,RP,82,DE,50.59653,7.21888 29749,Unnau,3019,RP,82,DE,50.64881,7.90827 29791,Urbach-Überdorf,3019,RP,82,DE,50.5569,7.58695 29792,Urbar,3019,RP,82,DE,50.38333,7.63333 29793,Urmitz,3019,RP,82,DE,50.41667,7.51667 30560,Üxheim,3019,RP,82,DE,50.35,6.75 29811,Vallendar,3019,RP,82,DE,50.39586,7.62427 29840,Vettelschoß,3019,RP,82,DE,50.61667,7.35 29859,Vinningen,3019,RP,82,DE,49.15635,7.55191 29879,Volxheim,3019,RP,82,DE,49.81667,7.93333 29901,Wachenheim,3019,RP,82,DE,49.44045,8.18041 29906,Wackernheim,3019,RP,82,DE,49.97444,8.11667 29934,Waldalgesheim,3019,RP,82,DE,49.95,7.83333 29941,Waldböckelheim,3019,RP,82,DE,49.81667,7.71667 29936,Waldbreitbach,3019,RP,82,DE,50.55,7.41667 29951,Waldfischbach-Burgalben,3019,RP,82,DE,49.28333,7.66667 29958,Waldmohr,3019,RP,82,DE,49.38333,7.33333 29960,Waldrach,3019,RP,82,DE,49.74623,6.74543 29962,Waldsee,3019,RP,82,DE,49.39528,8.44028 29981,Wallertheim,3019,RP,82,DE,49.83556,8.05139 29984,Wallhausen,3019,RP,82,DE,49.88333,7.76667 29986,Wallmenroth,3019,RP,82,DE,50.8,7.83333 29987,Wallmerod,3019,RP,82,DE,50.48333,7.95 30030,Wassenach,3019,RP,82,DE,50.43333,7.28333 30035,Wasserliesch,3019,RP,82,DE,49.70739,6.53944 30041,Wattenheim,3019,RP,82,DE,49.52167,8.06167 30043,Waxweiler,3019,RP,82,DE,50.09257,6.36299 30060,Wehr,3019,RP,82,DE,50.41667,7.21667 30064,Weibern,3019,RP,82,DE,50.40808,7.14669 30072,Weidenthal,3019,RP,82,DE,49.41667,8.0 30086,Weiler,3019,RP,82,DE,49.95696,7.86484 30088,Weilerbach,3019,RP,82,DE,49.48333,7.63333 30099,Weingarten,3019,RP,82,DE,49.25946,8.2862 30103,Weinsheim,3019,RP,82,DE,49.83333,7.76667 30106,Weisel,3019,RP,82,DE,50.11667,7.8 30137,Weißenthurm,3019,RP,82,DE,50.41719,7.45072 30114,Weitefeld,3019,RP,82,DE,50.72541,7.92805 30117,Weitersburg,3019,RP,82,DE,50.41667,7.6 30146,Welschbillig,3019,RP,82,DE,49.85,6.56667 30153,Wendelsheim,3019,RP,82,DE,49.76667,8.0 30182,Wernersberg,3019,RP,82,DE,49.19062,7.92756 30192,Weselberg,3019,RP,82,DE,49.33662,7.6078 30204,Westerburg,3019,RP,82,DE,50.55938,7.97482 30219,Westheim,3019,RP,82,DE,49.2464,8.32357 30221,Westhofen,3019,RP,82,DE,49.70444,8.24806 30233,Weyerbusch,3019,RP,82,DE,50.71667,7.55 30282,Wilgartswiesen,3019,RP,82,DE,49.20891,7.87346 30306,Wiltingen,3019,RP,82,DE,49.65919,6.59255 30309,Wincheringen,3019,RP,82,DE,49.60904,6.42597 30314,Winden,3019,RP,82,DE,49.09778,8.11694 30315,Windesheim,3019,RP,82,DE,49.9,7.81667 30316,Windhagen,3019,RP,82,DE,50.64121,7.35352 30327,Winningen,3019,RP,82,DE,50.31667,7.51667 30328,Winnweiler,3019,RP,82,DE,49.56667,7.85 30342,Wirges,3019,RP,82,DE,50.47195,7.79844 30346,Wissen,3019,RP,82,DE,50.77915,7.73466 30361,Wittlich,3019,RP,82,DE,49.98596,6.89308 30388,Wolfstein,3019,RP,82,DE,49.58411,7.60496 30390,Wolken,3019,RP,82,DE,50.33333,7.46667 30441,Wöllstein,3019,RP,82,DE,49.81667,7.96667 30406,Worms,3019,RP,82,DE,49.63278,8.35916 30444,Wörrstadt,3019,RP,82,DE,49.84861,8.12417 30448,Wörth am Rhein,3019,RP,82,DE,49.04888,8.25959 30478,Zeiskam,3019,RP,82,DE,49.23278,8.24722 30483,Zell,3019,RP,82,DE,50.02918,7.18232 30491,Zeltingen-Rachtig,3019,RP,82,DE,49.95,7.01667 30492,Zemmer,3019,RP,82,DE,49.9,6.7 30495,Zerf,3019,RP,82,DE,49.6,6.68333 30516,Zornheim,3019,RP,82,DE,49.89,8.22472 30531,Zweibrücken,3019,RP,82,DE,49.24686,7.36977 23978,Beckingen,3020,SL,82,DE,49.4,6.7 24094,Bexbach,3020,SL,82,DE,49.34615,7.25527 24182,Blieskastel,3020,SL,82,DE,49.23724,7.25617 24264,Bous,3020,SL,82,DE,49.27732,6.80131 24336,Britten,3020,SL,82,DE,49.52061,6.67651 24690,Dillingen,3020,SL,82,DE,49.35557,6.72781 25014,Ensdorf,3020,SL,82,DE,49.3,6.78333 25018,Eppelborn,3020,SL,82,DE,49.4,6.96667 25250,Freisen,3020,SL,82,DE,49.55,7.25 25294,Friedrichsthal,3020,SL,82,DE,49.32786,7.09622 25332,Fürstenhausen,3020,SL,82,DE,49.24075,6.86817 25460,Gersheim,3020,SL,82,DE,49.15,7.2 25701,Großrosseln,3020,SL,82,DE,49.20296,6.84148 25887,Hangard,3020,SL,82,DE,49.3826,7.21046 25990,Heidstock,3020,SL,82,DE,49.25571,6.88156 26125,Heusweiler,3020,SL,82,DE,49.33632,6.93036 26252,Homburg,3020,SL,82,DE,49.32637,7.33867 26369,Illingen,3020,SL,82,DE,49.37362,7.04758 26641,Kirkel,3020,SL,82,DE,49.28333,7.23333 26669,Kleinblittersdorf,3020,SL,82,DE,49.1578,7.03734 26994,Lebach,3020,SL,82,DE,49.41122,6.90988 27151,Losheim,3020,SL,82,DE,49.5099,6.74549 27162,Ludweiler-Warndt,3020,SL,82,DE,49.22074,6.81195 27173,Luisenthal,3020,SL,82,DE,49.24932,6.90057 27245,Mainzweiler,3020,SL,82,DE,49.41714,7.11804 27323,Marpingen,3020,SL,82,DE,49.45228,7.0582 27415,Merchweiler,3020,SL,82,DE,49.35,7.05 27430,Merzig,3020,SL,82,DE,49.44331,6.63874 27442,Mettlach,3020,SL,82,DE,49.49489,6.58562 27639,Nalbach,3020,SL,82,DE,49.38333,6.78333 27640,Namborn,3020,SL,82,DE,49.52166,7.1407 27780,Neunkirchen,3020,SL,82,DE,49.34449,7.18045 27907,Nohfelden,3020,SL,82,DE,49.58693,7.14283 27910,Nonnweiler,3020,SL,82,DE,49.60762,6.96986 28046,Oberthal,3020,SL,82,DE,49.51257,7.08382 28128,Orscholz,3020,SL,82,DE,49.50593,6.52502 28197,Ottweiler,3020,SL,82,DE,49.40133,7.16424 28423,Püttlingen,3020,SL,82,DE,49.2855,6.88723 28433,Quierschied,3020,SL,82,DE,49.31667,7.05 28639,Riegelsberg,3020,SL,82,DE,49.3,6.93333 28775,Röchling-Höhe,3020,SL,82,DE,49.27102,6.83457 28816,Saarbrücken,3020,SL,82,DE,49.23262,7.00982 28818,Saarhölzbach,3020,SL,82,DE,49.51585,6.60742 28819,Saarlouis,3020,SL,82,DE,49.31366,6.75154 28820,Saarwellingen,3020,SL,82,DE,49.3543,6.80487 28869,Sankt Ingbert,3020,SL,82,DE,49.27697,7.11672 28883,Sankt Wendel,3020,SL,82,DE,49.46633,7.16814 28944,Schiffweiler,3020,SL,82,DE,49.36667,7.13333 28990,Schmelz,3020,SL,82,DE,49.43333,6.85 29049,Schwalbach,3020,SL,82,DE,49.3,6.81667 29302,Spiesen-Elversberg,3020,SL,82,DE,49.31667,7.13333 29467,Sulzbach,3020,SL,82,DE,49.29882,7.05696 29596,Tholey,3020,SL,82,DE,49.48374,7.03691 30554,Überherrn,3020,SL,82,DE,49.24187,6.6984 29892,Völklingen,3020,SL,82,DE,49.25162,6.85873 29910,Wadern,3020,SL,82,DE,49.54122,6.88774 29912,Wadgassen,3020,SL,82,DE,49.26667,6.78333 29977,Wallerfangen,3020,SL,82,DE,49.32749,6.71102 30110,Weiskirchen,3020,SL,82,DE,49.55,6.81667 30115,Weiten,3020,SL,82,DE,49.53011,6.54064 23493,Adorf,3021,SN,82,DE,50.32011,12.25986 23537,Albertstadt,3021,SN,82,DE,51.08333,13.76667 23593,Altenberg,3021,SN,82,DE,50.76556,13.75334 23629,Altmittweida,3021,SN,82,DE,50.96667,12.95 23661,Annaberg-Buchholz,3021,SN,82,DE,50.57953,13.00627 23696,Arzberg,3021,SN,82,DE,51.52887,13.12565 23724,Aue,3021,SN,82,DE,50.59034,12.70657 23726,Auerbach,3021,SN,82,DE,50.51155,12.40083 23733,Augustusburg,3021,SN,82,DE,50.81192,13.10197 23775,Bad Brambach,3021,SN,82,DE,50.21667,12.31667 23784,Bad Düben,3021,SN,82,DE,51.59174,12.58492 23789,Bad Elster,3021,SN,82,DE,50.28192,12.2343 23826,Bad Lausick,3021,SN,82,DE,51.14495,12.64449 23836,Bad Muskau,3021,SN,82,DE,51.55051,14.7124 23860,Bad Schandau,3021,SN,82,DE,50.91743,14.15494 23861,Bad Schlema,3021,SN,82,DE,50.60257,12.67288 23921,Bannewitz,3021,SN,82,DE,50.99291,13.71712 24459,Bärenstein,3021,SN,82,DE,50.5,13.03333 23963,Bautzen,3021,SN,82,DE,51.18035,14.43494 23992,Beierfeld,3021,SN,82,DE,50.56529,12.79049 23993,Beiersdorf,3021,SN,82,DE,51.07405,14.53828 23994,Beilrode,3021,SN,82,DE,51.56667,13.06667 23998,Belgern,3021,SN,82,DE,51.48263,13.12382 23999,Belgershain,3021,SN,82,DE,51.23333,12.55 24012,Bennewitz,3021,SN,82,DE,51.36074,12.71376 24034,Bergen,3021,SN,82,DE,50.471,12.27448 24069,Bernsbach,3021,SN,82,DE,50.57624,12.76751 24070,Bernsdorf,3021,SN,82,DE,51.3735,14.06886 24071,Bernstadt,3021,SN,82,DE,51.04736,14.82784 24075,Berthelsdorf,3021,SN,82,DE,51.04679,14.22197 24076,Bertsdorf-Hörnitz,3021,SN,82,DE,50.88593,14.73696 24150,Bischofswerda,3021,SN,82,DE,51.12771,14.17974 24195,Bockau,3021,SN,82,DE,50.54209,12.68639 24196,Bockelwitz,3021,SN,82,DE,51.19942,12.95618 24466,Böhlen,3021,SN,82,DE,51.20061,12.38622 24250,Borna,3021,SN,82,DE,51.12416,12.49639 24474,Börnichen,3021,SN,82,DE,50.7501,13.14075 24257,Borsdorf,3021,SN,82,DE,51.35,12.53333 24260,Borstendorf,3021,SN,82,DE,50.77323,13.17918 24480,Bösenbrunn,3021,SN,82,DE,50.39703,12.09998 24267,Boxberg,3021,SN,82,DE,51.40373,14.57598 24278,Brand-Erbisdorf,3021,SN,82,DE,50.86643,13.32285 24281,Brandis,3021,SN,82,DE,51.33597,12.61024 24308,Breitenbrunn,3021,SN,82,DE,50.47553,12.76649 24435,Burgstädt,3021,SN,82,DE,50.91333,12.806 24441,Burkau,3021,SN,82,DE,51.17579,14.17329 24442,Burkhardtsdorf,3021,SN,82,DE,50.73333,12.91667 24517,Callenberg,3021,SN,82,DE,50.85,12.63333 24527,Cavertitz,3021,SN,82,DE,51.38333,13.13333 24533,Chemnitz,3021,SN,82,DE,50.8357,12.92922 24539,Claußnitz,3021,SN,82,DE,50.93333,12.88333 24549,Colditz,3021,SN,82,DE,51.12821,12.80295 24554,Coswig,3021,SN,82,DE,51.13204,13.58312 24563,Crimmitschau,3021,SN,82,DE,50.81644,12.39045 24566,Crostau,3021,SN,82,DE,51.08462,14.45589 24567,Crostwitz,3021,SN,82,DE,51.23832,14.24338 24568,Crottendorf,3021,SN,82,DE,50.51667,12.95 24569,Cunewalde,3021,SN,82,DE,51.1,14.51667 24579,Dahlen,3021,SN,82,DE,51.36495,12.99881 24623,Delitzsch,3021,SN,82,DE,51.52546,12.34284 24628,Demitz-Thumitz,3021,SN,82,DE,51.14149,14.24719 24633,Dennheritz,3021,SN,82,DE,50.81412,12.46519 24660,Deutzen,3021,SN,82,DE,51.11217,12.42541 24701,Dippoldiswalde,3021,SN,82,DE,50.89621,13.66905 24792,Döbeln,3021,SN,82,DE,51.1221,13.11027 24793,Döbernitz,3021,SN,82,DE,51.51241,12.34753 24714,Doberschütz,3021,SN,82,DE,51.4987,12.74792 24718,Dohma,3021,SN,82,DE,50.91667,13.93333 24719,Dohna,3021,SN,82,DE,50.95621,13.85839 24727,Dommitzsch,3021,SN,82,DE,51.64071,12.8794 24734,Dorfchemnitz,3021,SN,82,DE,50.66363,12.83651 24736,Dorfhain,3021,SN,82,DE,50.93333,13.56667 24757,Drebach,3021,SN,82,DE,50.67583,13.0162 24768,Dresden,3021,SN,82,DE,51.05089,13.73832 24813,Dürrhennersdorf,3021,SN,82,DE,51.04863,14.60383 24815,Dürrröhrsdorf,3021,SN,82,DE,51.03395,13.99718 24832,Ebersbach,3021,SN,82,DE,51.00762,14.58621 24893,Ehrenfriedersdorf,3021,SN,82,DE,50.64934,12.97009 24895,Eibau,3021,SN,82,DE,50.98272,14.66214 24897,Eibenstock,3021,SN,82,DE,50.49431,12.59978 24904,Eichigt,3021,SN,82,DE,50.35,12.16667 24913,Eilenburg,3021,SN,82,DE,51.45984,12.63338 24946,Ellefeld,3021,SN,82,DE,50.48367,12.3888 24968,Elsnig,3021,SN,82,DE,51.61024,12.92833 24970,Elsterberg,3021,SN,82,DE,50.60841,12.16787 24971,Elstertrebnitz,3021,SN,82,DE,51.15,12.23333 24973,Elstra,3021,SN,82,DE,51.22172,14.13201 24974,Elterlein,3021,SN,82,DE,50.57663,12.86836 25022,Eppendorf,3021,SN,82,DE,50.8,13.23333 25053,Erlau,3021,SN,82,DE,51.00938,12.94549 25054,Erlbach,3021,SN,82,DE,50.31667,12.36667 25091,Espenhain,3021,SN,82,DE,51.18926,12.47885 25131,Falkenau,3021,SN,82,DE,50.85559,13.11718 25137,Falkenhain,3021,SN,82,DE,51.39888,12.87083 25139,Falkenstein,3021,SN,82,DE,50.47788,12.37129 25199,Flöha,3021,SN,82,DE,50.85613,13.07407 25214,Frankenberg,3021,SN,82,DE,50.91297,13.04011 25216,Frankenstein,3021,SN,82,DE,50.90064,13.20933 25219,Frankenthal,3021,SN,82,DE,51.13129,14.10893 25230,Frauenstein,3021,SN,82,DE,50.80279,13.5379 25233,Fraureuth,3021,SN,82,DE,50.7,12.35 25238,Freiberg,3021,SN,82,DE,50.91089,13.33881 25252,Freital,3021,SN,82,DE,51.00166,13.6488 25277,Friedersdorf,3021,SN,82,DE,51.02416,14.56246 25304,Frohburg,3021,SN,82,DE,51.05719,12.55746 25340,Gablenz,3021,SN,82,DE,51.53333,14.66667 25404,Geising,3021,SN,82,DE,50.75742,13.79278 25410,Geithain,3021,SN,82,DE,51.05528,12.69674 25414,Gelenau,3021,SN,82,DE,50.71151,12.96666 25443,Geringswalde,3021,SN,82,DE,51.07677,12.90725 25458,Gersdorf,3021,SN,82,DE,51.1122,12.93889 25479,Geyer,3021,SN,82,DE,50.62632,12.92074 25503,Glashütte,3021,SN,82,DE,50.85196,13.77977 25508,Glaubitz,3021,SN,82,DE,51.32498,13.37817 25510,Glauchau,3021,SN,82,DE,50.81987,12.54493 25775,Göda,3021,SN,82,DE,51.178,14.31951 25781,Görlitz,3021,SN,82,DE,51.15518,14.98853 25543,Gornau,3021,SN,82,DE,50.75901,13.03731 25544,Gornsdorf,3021,SN,82,DE,50.7,12.88333 25610,Grimma,3021,SN,82,DE,51.23367,12.71959 25612,Groitzsch,3021,SN,82,DE,51.15536,12.28279 25621,Groß Düben,3021,SN,82,DE,51.56667,14.56667 25650,Großbardau,3021,SN,82,DE,51.20419,12.69848 25656,Großbothen,3021,SN,82,DE,51.18784,12.75101 25659,Großdubrau,3021,SN,82,DE,51.25422,14.45897 25664,Großenhain,3021,SN,82,DE,51.28951,13.5335 25675,Großharthau,3021,SN,82,DE,51.10694,14.09911 25676,Großhartmannsdorf,3021,SN,82,DE,50.8,13.33333 25678,Großhennersdorf,3021,SN,82,DE,50.98597,14.78776 25689,Großlehna,3021,SN,82,DE,51.30687,12.1719 25693,Großnaundorf,3021,SN,82,DE,51.2,13.93333 25695,Großolbersdorf,3021,SN,82,DE,50.7,13.08333 25698,Großpösna,3021,SN,82,DE,51.26667,12.5 25697,Großpostwitz,3021,SN,82,DE,51.12083,14.44065 25704,Großröhrsdorf,3021,SN,82,DE,51.14528,14.01917 25705,Großrückerswalde,3021,SN,82,DE,50.63333,13.11667 25706,Großschirma,3021,SN,82,DE,50.96602,13.2859 25708,Großschönau,3021,SN,82,DE,50.9,14.68333 25707,Großschweidnitz,3021,SN,82,DE,51.06939,14.64297 25713,Großweitzschen,3021,SN,82,DE,51.15845,13.04517 25735,Grünbach,3021,SN,82,DE,50.44995,12.36186 25739,Grünhain,3021,SN,82,DE,50.58019,12.80695 25740,Grünhainichen,3021,SN,82,DE,50.7672,13.15366 25770,Guttau,3021,SN,82,DE,51.25904,14.56132 26295,Hähnichen,3021,SN,82,DE,51.3654,14.86098 25837,Hainewalde,3021,SN,82,DE,50.91014,14.70387 25838,Hainichen,3021,SN,82,DE,50.97044,13.12287 25858,Halsbrücke,3021,SN,82,DE,50.95,13.35 25878,Hammerbrücke,3021,SN,82,DE,50.43504,12.415 25913,Hartenstein,3021,SN,82,DE,50.66236,12.66966 25914,Hartha,3021,SN,82,DE,51.09863,12.97391 25917,Hartmannsdorf,3021,SN,82,DE,50.75804,12.42687 25924,Haselbachtal,3021,SN,82,DE,51.2357,14.02576 25954,Hauswalde,3021,SN,82,DE,51.15212,14.0863 25985,Heidenau,3021,SN,82,DE,50.97221,13.86741 26081,Hermsdorf,3021,SN,82,DE,50.92338,13.7348 26090,Herrnhut,3021,SN,82,DE,51.01624,14.74381 26132,Hilbersdorf,3021,SN,82,DE,50.854,12.94776 26165,Hirschfeld,3021,SN,82,DE,50.62453,12.45722 26167,Hirschfelde,3021,SN,82,DE,50.94437,14.8851 26177,Hochkirch,3021,SN,82,DE,51.14898,14.57063 26305,Höckendorf,3021,SN,82,DE,51.22423,13.90935 26194,Hohburg,3021,SN,82,DE,51.41168,12.80508 26215,Hohenstein-Ernstthal,3021,SN,82,DE,50.80064,12.71287 26224,Hohndorf,3021,SN,82,DE,50.74044,12.68058 26226,Hohnstein,3021,SN,82,DE,50.97991,14.11408 26262,Horka,3021,SN,82,DE,51.26342,14.25523 26263,Hormersdorf,3021,SN,82,DE,50.67406,12.88194 26277,Hoyerswerda,3021,SN,82,DE,51.43787,14.23549 26427,Jahnsdorf,3021,SN,82,DE,50.74509,12.85414 26443,Jesewitz,3021,SN,82,DE,51.42276,12.56312 26455,Johanngeorgenstadt,3021,SN,82,DE,50.43254,12.7114 26467,Jöhstadt,3021,SN,82,DE,50.51229,13.0946 26500,Kamenz,3021,SN,82,DE,51.26798,14.09374 26595,Kirchberg,3021,SN,82,DE,50.6219,12.52449 26644,Kirschau,3021,SN,82,DE,51.09317,14.4284 26651,Kitzen,3021,SN,82,DE,51.22172,12.22349 26653,Kitzscher,3021,SN,82,DE,51.16444,12.5526 26689,Klingenthal,3021,SN,82,DE,50.35963,12.46463 26691,Klipphausen,3021,SN,82,DE,51.06841,13.51374 26692,Klitten,3021,SN,82,DE,51.35109,14.60526 26707,Kodersdorf,3021,SN,82,DE,51.24272,14.89336 26826,Königsbrück,3021,SN,82,DE,51.26451,13.9054 26829,Königsfeld,3021,SN,82,DE,51.06667,12.75 26832,Königshain,3021,SN,82,DE,51.18333,14.86667 26834,Königstein,3021,SN,82,DE,50.9157,14.07186 26837,Königswalde,3021,SN,82,DE,50.55,13.05 26838,Königswartha,3021,SN,82,DE,51.31028,14.32797 26729,Kossa,3021,SN,82,DE,51.61707,12.68197 26742,Krauschwitz,3021,SN,82,DE,51.52153,14.71211 26748,Kreischa,3021,SN,82,DE,50.94534,13.75514 26761,Kriebstein,3021,SN,82,DE,51.05,13.01667 26776,Krostitz,3021,SN,82,DE,51.46208,12.4536 26788,Kubschütz,3021,SN,82,DE,51.16667,14.5 26801,Kurort Gohrisch,3021,SN,82,DE,50.91234,14.10687 26802,Kurort Jonsdorf,3021,SN,82,DE,50.85751,14.70922 26803,Kurort Oberwiesenthal,3021,SN,82,DE,50.41943,12.96836 26804,Kurort Oybin,3021,SN,82,DE,50.84105,14.74124 26886,Lampertswalde,3021,SN,82,DE,51.31108,13.67694 26910,Langenbernsdorf,3021,SN,82,DE,50.75583,12.32669 26991,Laußig,3021,SN,82,DE,51.54676,12.6293 26992,Laußnitz,3021,SN,82,DE,51.25,13.88333 26982,Lauter,3021,SN,82,DE,50.56264,12.73513 26993,Lawalde,3021,SN,82,DE,51.08333,14.6 27028,Leipzig,3021,SN,82,DE,51.33962,12.37129 27029,Leisnig,3021,SN,82,DE,51.15743,12.9279 27040,Lengefeld,3021,SN,82,DE,50.71911,13.1929 27041,Lengenfeld,3021,SN,82,DE,50.5694,12.36408 27057,Leubnitz,3021,SN,82,DE,50.72313,12.3566 27058,Leubsdorf,3021,SN,82,DE,50.8,13.16667 27067,Leutersdorf,3021,SN,82,DE,50.95,14.65 27080,Lichtenberg,3021,SN,82,DE,50.83492,13.42478 27083,Lichtenstein,3021,SN,82,DE,50.75659,12.63025 27084,Lichtentanne,3021,SN,82,DE,50.69255,12.42585 27091,Liebstadt,3021,SN,82,DE,50.86417,13.85694 27097,Limbach,3021,SN,82,DE,50.58333,12.25 27098,Limbach-Oberfrohna,3021,SN,82,DE,50.85882,12.76165 27185,Löbau,3021,SN,82,DE,51.09954,14.66738 27189,Löbnitz,3021,SN,82,DE,51.59238,12.46347 27125,Lobstädt,3021,SN,82,DE,51.13361,12.44861 27134,Lohmen,3021,SN,82,DE,50.98831,14.00268 27138,Lohsa,3021,SN,82,DE,51.38333,14.4 27142,Lommatzsch,3021,SN,82,DE,51.19537,13.30917 27200,Lößnitz,3021,SN,82,DE,50.62181,12.73147 27169,Lugau,3021,SN,82,DE,50.73843,12.74861 27176,Lunzenau,3021,SN,82,DE,50.96269,12.75594 27227,Machern,3021,SN,82,DE,51.36667,12.63333 27257,Malschwitz,3021,SN,82,DE,51.23759,14.52163 27273,Marienberg,3021,SN,82,DE,50.65051,13.16122 27284,Markersbach,3021,SN,82,DE,50.53545,12.86149 27285,Markersdorf,3021,SN,82,DE,51.13333,14.88333 27287,Markkleeberg,3021,SN,82,DE,51.2755,12.36906 27290,Markneukirchen,3021,SN,82,DE,50.31144,12.32951 27291,Markranstädt,3021,SN,82,DE,51.30146,12.2202 27365,Meerane,3021,SN,82,DE,50.84688,12.46473 27373,Mehltheuer,3021,SN,82,DE,50.5453,12.037 27385,Meissen,3021,SN,82,DE,51.16158,13.4737 27465,Mildenau,3021,SN,82,DE,50.58689,13.07263 27482,Mittelherwigsdorf,3021,SN,82,DE,50.91667,14.76667 27493,Mittweida,3021,SN,82,DE,50.98622,12.97537 27497,Mochau,3021,SN,82,DE,51.13333,13.18333 27498,Mockrehna,3021,SN,82,DE,51.50757,12.81418 27525,Moritzburg,3021,SN,82,DE,51.15922,13.68021 27584,Mücka,3021,SN,82,DE,51.31667,14.7 27586,Mügeln,3021,SN,82,DE,51.23619,13.04567 27591,Mühlau,3021,SN,82,DE,50.9,12.76667 27603,Mühltroff,3021,SN,82,DE,50.53919,11.92828 27535,Mulda,3021,SN,82,DE,50.80789,13.41477 27608,Mülsen,3021,SN,82,DE,50.75,12.56667 27551,Mutzschen,3021,SN,82,DE,51.26159,12.89125 27552,Mylau,3021,SN,82,DE,50.61861,12.26535 27643,Narsdorf,3021,SN,82,DE,51.01667,12.71667 27651,Naundorf,3021,SN,82,DE,51.25718,13.1081 27652,Naunhof,3021,SN,82,DE,51.2777,12.58827 27655,Nauwalde,3021,SN,82,DE,51.41837,13.40974 27656,Nebelschütz,3021,SN,82,DE,51.26227,14.15849 27677,Nerchau,3021,SN,82,DE,51.27094,12.78912 27680,Neschwitz,3021,SN,82,DE,51.27056,14.329 27686,Netzschkau,3021,SN,82,DE,50.61411,12.24382 27726,Neuensalz,3021,SN,82,DE,50.5,12.21667 27736,Neugersdorf,3021,SN,82,DE,50.97729,14.60881 27745,Neuhausen,3021,SN,82,DE,50.67647,13.4675 27755,Neukieritzsch,3021,SN,82,DE,51.14995,12.4109 27756,Neukirch,3021,SN,82,DE,51.28333,13.98333 27758,Neukirch/Lausitz,3021,SN,82,DE,51.09727,14.30789 27762,Neukirchen,3021,SN,82,DE,50.77955,12.86755 27770,Neumark,3021,SN,82,DE,50.6601,12.35619 27788,Neusalza-Spremberg,3021,SN,82,DE,51.03945,14.5356 27806,Neustadt in Sachsen,3021,SN,82,DE,51.02844,14.21785 27796,Neustadt Vogtland,3021,SN,82,DE,50.461,12.33224 27831,Niederau,3021,SN,82,DE,51.1773,13.54563 27836,Niedercunnersdorf,3021,SN,82,DE,51.05398,14.6583 27837,Niederdorf,3021,SN,82,DE,50.72623,12.78587 27847,Niederfrohna,3021,SN,82,DE,50.9,12.71667 27871,Niederschöna,3021,SN,82,DE,50.96671,13.4191 27877,Niederstriegis,3021,SN,82,DE,51.08243,13.14925 27883,Niederwiesa,3021,SN,82,DE,50.86667,13.01667 27898,Niesky,3021,SN,82,DE,51.29241,14.82107 27934,Nossen,3021,SN,82,DE,51.05798,13.29652 27953,Nünchritz,3021,SN,82,DE,51.29993,13.38555 27969,Obercunnersdorf,3021,SN,82,DE,50.91711,13.56015 27979,Obergurig,3021,SN,82,DE,51.13294,14.40488 27993,Oberlichtenau,3021,SN,82,DE,51.21875,13.98992 27994,Oberlungwitz,3021,SN,82,DE,50.7823,12.70789 28033,Oberschöna,3021,SN,82,DE,50.89759,13.25379 28055,Oberwiera,3021,SN,82,DE,50.88913,12.54415 28073,Oederan,3021,SN,82,DE,50.86064,13.17164 28078,Oelsnitz,3021,SN,82,DE,50.4147,12.1695 28101,Ohorn,3021,SN,82,DE,51.17199,14.04669 28102,Olbernhau,3021,SN,82,DE,50.6587,13.3425 28103,Olbersdorf,3021,SN,82,DE,50.87304,14.77035 28117,Oppach,3021,SN,82,DE,51.06667,14.5 28136,Oschatz,3021,SN,82,DE,51.30001,13.10984 28206,Oßling,3021,SN,82,DE,51.35999,14.16567 28165,Ostrau,3021,SN,82,DE,51.20639,12.88421 28167,Ostritz,3021,SN,82,DE,51.01451,14.93059 28178,Ottendorf-Okrilla,3021,SN,82,DE,51.18333,13.83333 28193,Otterwisch,3021,SN,82,DE,51.2,12.61667 28217,Panschwitz-Kuckau,3021,SN,82,DE,51.23395,14.19791 28238,Pausa,3021,SN,82,DE,50.58172,11.99732 28240,Pegau,3021,SN,82,DE,51.16715,12.25144 28251,Penig,3021,SN,82,DE,50.93336,12.70422 28278,Pfaffroda,3021,SN,82,DE,50.86134,12.51497 28309,Pirna,3021,SN,82,DE,50.95843,13.93702 28319,Plauen,3021,SN,82,DE,50.4973,12.13782 28336,Pobershau,3021,SN,82,DE,50.64079,13.21776 28337,Pockau,3021,SN,82,DE,50.7,13.23333 28414,Pöhl,3021,SN,82,DE,50.39311,12.32908 28415,Pöhla,3021,SN,82,DE,50.51143,12.81889 28355,Porschdorf,3021,SN,82,DE,50.9418,14.12687 28383,Pretzschendorf,3021,SN,82,DE,50.87385,13.52499 28388,Priestewitz,3021,SN,82,DE,51.25,13.51667 28407,Puschwitz,3021,SN,82,DE,51.25501,14.30111 28434,Quitzdorf,3021,SN,82,DE,51.28333,14.76667 28436,Rabenau,3021,SN,82,DE,50.96484,13.64305 28772,Räckelwitz,3021,SN,82,DE,51.25,14.23333 28438,Rackwitz,3021,SN,82,DE,51.43333,12.38333 28441,Radeberg,3021,SN,82,DE,51.11112,13.91199 28442,Radebeul,3021,SN,82,DE,51.10654,13.66047 28443,Radeburg,3021,SN,82,DE,51.21516,13.7281 28446,Radibor,3021,SN,82,DE,51.24481,14.39842 28462,Rammenau,3021,SN,82,DE,51.15,14.13333 28477,Raschau,3021,SN,82,DE,50.53127,12.83312 28486,Rathmannsdorf,3021,SN,82,DE,50.92993,14.14224 28501,Rechenberg-Bienenmühle,3021,SN,82,DE,50.73777,13.53502 28526,Regis-Breitingen,3021,SN,82,DE,51.08883,12.43841 28540,Reichenbach,3021,SN,82,DE,51.14144,14.8027 28543,Reichenbach/Vogtland,3021,SN,82,DE,50.62279,12.30344 28559,Reinhardtsgrimma,3021,SN,82,DE,50.8927,13.75534 28563,Reinsberg,3021,SN,82,DE,51.00823,13.36542 28564,Reinsdorf,3021,SN,82,DE,50.69775,12.55555 28577,Remse,3021,SN,82,DE,50.85,12.56667 28594,Reuth,3021,SN,82,DE,50.61667,12.21667 28645,Riesa,3021,SN,82,DE,51.30777,13.29168 28653,Rietschen,3021,SN,82,DE,51.4,14.78333 28669,Rittersgrün,3021,SN,82,DE,50.48031,12.79336 28670,Rochlitz,3021,SN,82,DE,51.05007,12.79754 28678,Rodewisch,3021,SN,82,DE,50.53083,12.41329 28713,Rossau,3021,SN,82,DE,51.0,13.06667 28747,Roßwein,3021,SN,82,DE,51.06589,13.18308 28789,Rötha,3021,SN,82,DE,51.19783,12.41447 28724,Rothenburg,3021,SN,82,DE,51.334,14.96874 28863,Sankt Egidien,3021,SN,82,DE,50.78617,12.62395 28899,Sayda,3021,SN,82,DE,50.71123,13.42172 28911,Scharfenstein,3021,SN,82,DE,50.70405,13.05654 28921,Scheibenberg,3021,SN,82,DE,50.54023,12.91215 28945,Schildau,3021,SN,82,DE,51.45721,12.93024 28952,Schirgiswalde,3021,SN,82,DE,51.07641,14.42834 28955,Schkeuditz,3021,SN,82,DE,51.39678,12.22141 28966,Schlegel,3021,SN,82,DE,50.97775,14.87686 28970,Schleife,3021,SN,82,DE,51.53333,14.53333 28973,Schlettau,3021,SN,82,DE,50.55882,12.95269 28994,Schmiedeberg,3021,SN,82,DE,50.83644,13.67622 29004,Schneeberg,3021,SN,82,DE,50.59465,12.64139 29109,Schönau-Berzdorf,3021,SN,82,DE,51.06402,14.88402 29110,Schönbach,3021,SN,82,DE,51.06667,14.56667 29112,Schönberg,3021,SN,82,DE,50.86752,12.49126 29117,Schöneck,3021,SN,82,DE,50.39052,12.32731 29123,Schönfeld,3021,SN,82,DE,51.3,13.7 29126,Schönheide,3021,SN,82,DE,50.50458,12.52158 29070,Schwarzenberg,3021,SN,82,DE,50.53791,12.78522 29089,Schwepnitz,3021,SN,82,DE,51.32809,13.95772 29139,Sebnitz,3021,SN,82,DE,50.9754,14.27579 29159,Seelitz,3021,SN,82,DE,51.03333,12.81667 29172,Seiffen,3021,SN,82,DE,50.65,13.45 29173,Seifhennersdorf,3021,SN,82,DE,50.93492,14.60194 29255,Sohland,3021,SN,82,DE,51.04089,14.41897 29256,Sohland am Rotstein,3021,SN,82,DE,51.11643,14.78372 29280,Sosa,3021,SN,82,DE,50.49917,12.6512 29318,Stadt Wehlen,3021,SN,82,DE,50.95821,14.03091 29342,Stauchitz,3021,SN,82,DE,51.2435,13.21437 29358,Steina,3021,SN,82,DE,51.2,14.05 29386,Steinigtwolmsdorf,3021,SN,82,DE,51.06314,14.3454 29417,Stollberg,3021,SN,82,DE,50.70999,12.78034 29419,Stolpen,3021,SN,82,DE,51.04901,14.07943 29435,Strehla,3021,SN,82,DE,51.35248,13.2266 29438,Struppen,3021,SN,82,DE,50.93333,14.01667 29456,Stützengrün,3021,SN,82,DE,50.53333,12.53333 29488,Syrau,3021,SN,82,DE,50.54297,12.07933 29523,Tannenberg,3021,SN,82,DE,50.60738,12.93798 29524,Tannenbergsthal,3021,SN,82,DE,50.43665,12.45754 29534,Taucha,3021,SN,82,DE,51.38333,12.48333 29538,Taura,3021,SN,82,DE,50.91667,12.85 29539,Tauscha,3021,SN,82,DE,51.26667,13.8 29579,Thalheim,3021,SN,82,DE,50.70077,12.84996 29580,Thallwitz,3021,SN,82,DE,51.43333,12.68333 29585,Tharandt,3021,SN,82,DE,50.98525,13.58035 29591,Theuma,3021,SN,82,DE,50.47007,12.22195 29592,Thiendorf,3021,SN,82,DE,51.29375,13.74124 29600,Thum,3021,SN,82,DE,50.67081,12.95091 29617,Tirpersdorf,3021,SN,82,DE,50.43333,12.25 29632,Torgau,3021,SN,82,DE,51.56016,12.99617 29649,Trebendorf,3021,SN,82,DE,51.53333,14.56667 29652,Trebsen,3021,SN,82,DE,51.28898,12.75496 29662,Treuen,3021,SN,82,DE,50.54247,12.30339 29666,Triebel,3021,SN,82,DE,50.37153,12.12118 29680,Trossin,3021,SN,82,DE,51.61667,12.81667 29735,Uhyst,3021,SN,82,DE,51.36469,14.506 29833,Venusberg,3021,SN,82,DE,50.69918,13.01854 29900,Wachau,3021,SN,82,DE,51.16172,13.90651 29946,Waldenburg,3021,SN,82,DE,50.87653,12.59919 29952,Waldheim,3021,SN,82,DE,51.07282,13.02004 29955,Waldkirchen,3021,SN,82,DE,50.59667,12.37994 30045,Wechselburg,3021,SN,82,DE,51.00214,12.77661 30098,Weinböhla,3021,SN,82,DE,51.16667,13.56667 30105,Weischlitz,3021,SN,82,DE,50.45,12.06667 30124,Weißenberg,3021,SN,82,DE,51.19644,14.65874 30126,Weißenborn,3021,SN,82,DE,50.73952,12.47051 30138,Weißig,3021,SN,82,DE,51.29192,13.44117 30139,Weißkeißel,3021,SN,82,DE,51.49405,14.71515 30140,Weißwasser,3021,SN,82,DE,51.50403,14.64017 30168,Werda,3021,SN,82,DE,50.43811,12.30473 30169,Werdau,3021,SN,82,DE,50.73604,12.37534 30177,Wermsdorf,3021,SN,82,DE,51.28333,12.95 30239,Wiedemar,3021,SN,82,DE,51.46667,12.2 30243,Wiednitz,3021,SN,82,DE,51.38608,14.02683 30252,Wiesa,3021,SN,82,DE,50.61114,13.01377 30276,Wildenfels,3021,SN,82,DE,50.66784,12.60886 30277,Wildenhain,3021,SN,82,DE,51.3076,13.47678 30291,Wilkau-Haßlau,3021,SN,82,DE,50.67504,12.51482 30301,Wilsdruff,3021,SN,82,DE,51.05199,13.53657 30305,Wilthen,3021,SN,82,DE,51.09745,14.3929 30357,Wittgensdorf,3021,SN,82,DE,50.88316,12.87031 30358,Wittichenau,3021,SN,82,DE,51.38496,14.24403 30391,Wolkenstein,3021,SN,82,DE,50.65552,13.07132 30455,Wülknitz,3021,SN,82,DE,51.36667,13.4 30426,Wurzen,3021,SN,82,DE,51.3707,12.73939 30462,Zabeltitz,3021,SN,82,DE,51.35147,13.50462 30479,Zeithain,3021,SN,82,DE,51.33356,13.33809 30510,Zinna,3021,SN,82,DE,51.5679,12.95354 30512,Zittau,3021,SN,82,DE,50.89772,14.80764 30541,Zöblitz,3021,SN,82,DE,50.65912,13.22981 30518,Zschadrass,3021,SN,82,DE,51.13828,12.81848 30519,Zschepplin,3021,SN,82,DE,51.5,12.6 30522,Zschopau,3021,SN,82,DE,50.74818,13.07691 30523,Zschorlau,3021,SN,82,DE,50.56667,12.65 30525,Zschortau,3021,SN,82,DE,51.4793,12.35893 30533,Zwenkau,3021,SN,82,DE,51.21872,12.33008 30534,Zwickau,3021,SN,82,DE,50.72724,12.48839 30538,Zwochau,3021,SN,82,DE,51.46467,12.26844 30540,Zwönitz,3021,SN,82,DE,50.63027,12.80999 30539,Zwota,3021,SN,82,DE,50.35103,12.42241 23470,Abtsdorf,3011,ST,82,DE,51.88984,12.72526 23506,Ahlsdorf,3011,ST,82,DE,51.54543,11.46655 23530,Aken,3011,ST,82,DE,51.85274,12.04461 23563,Allstedt,3011,ST,82,DE,51.40379,11.38689 23573,Alsleben,3011,ST,82,DE,51.70161,11.67648 23656,Angern,3011,ST,82,DE,52.35,11.73333 23657,Angersdorf,3011,ST,82,DE,51.46025,11.90705 23662,Annaburg,3011,ST,82,DE,51.73298,13.04729 23675,Apollensdorf,3011,ST,82,DE,51.87634,12.55012 23685,Arneburg,3011,ST,82,DE,52.67565,12.00514 23707,Aschersleben,3011,ST,82,DE,51.75742,11.46084 23719,Atzendorf,3011,ST,82,DE,51.91954,11.59906 23742,Ausleben,3011,ST,82,DE,52.09049,11.11192 23750,Baalberge,3011,ST,82,DE,51.76469,11.7988 23771,Bad Bibra,3011,ST,82,DE,51.20796,11.58517 23786,Bad Dürrenberg,3011,ST,82,DE,51.29545,12.06583 23820,Bad Kösen,3011,ST,82,DE,51.13431,11.72203 23825,Bad Lauchstädt,3011,ST,82,DE,51.38652,11.86956 23862,Bad Schmiedeberg,3011,ST,82,DE,51.68516,12.73483 23872,Bad Suderode,3011,ST,82,DE,51.73333,11.11667 23912,Ballenstedt,3011,ST,82,DE,51.719,11.23265 23925,Barby,3011,ST,82,DE,51.96711,11.88261 23935,Barleben,3011,ST,82,DE,52.20193,11.6177 23939,Barnstädt,3011,ST,82,DE,51.34401,11.63735 23985,Beesenlaublingen,3011,ST,82,DE,51.71274,11.69729 23986,Beesenstedt,3011,ST,82,DE,51.56828,11.73323 23989,Beetzendorf,3011,ST,82,DE,52.70226,11.0889 24001,Belleben,3011,ST,82,DE,51.67499,11.6342 24010,Benndorf,3011,ST,82,DE,51.57035,11.4929 24011,Benneckenstein,3011,ST,82,DE,51.66823,10.71716 24015,Bennstedt,3011,ST,82,DE,51.48201,11.8262 24016,Bennungen,3011,ST,82,DE,51.46085,11.11816 24028,Berga,3011,ST,82,DE,51.45561,11.0071 24049,Bergwitz,3011,ST,82,DE,51.79479,12.58954 24063,Bernburg,3011,ST,82,DE,51.79464,11.7401 24087,Beuna,3011,ST,82,DE,51.31667,11.95 24106,Biederitz,3011,ST,82,DE,52.15,11.71667 24110,Biere,3011,ST,82,DE,51.97431,11.65443 24154,Bismark,3011,ST,82,DE,52.66195,11.55638 24160,Bitterfeld-Wolfen,3011,ST,82,DE,51.62355,12.32395 24166,Blankenburg,3011,ST,82,DE,51.79025,10.95509 24170,Blankenheim,3011,ST,82,DE,51.50717,11.42878 24188,Bobbau,3011,ST,82,DE,51.68747,12.27253 24251,Borne,3011,ST,82,DE,51.94881,11.55865 24284,Braschwitz,3011,ST,82,DE,51.52284,12.05867 24290,Braunsbedra,3011,ST,82,DE,51.28602,11.88987 24299,Brehna,3011,ST,82,DE,51.5579,12.21276 24357,Brumby,3011,ST,82,DE,51.89635,11.71751 24410,Burg bei Magdeburg,3011,ST,82,DE,52.27152,11.85493 24437,Burgwerben,3011,ST,82,DE,51.2227,11.98396 24514,Calbe,3011,ST,82,DE,51.90668,11.77478 24518,Calvörde,3011,ST,82,DE,52.39551,11.29463 24546,Cochstedt,3011,ST,82,DE,51.88247,11.41085 24548,Colbitz,3011,ST,82,DE,52.31708,11.60534 24555,Coswig,3011,ST,82,DE,51.88618,12.45009 24581,Dahlenwarsleben,3011,ST,82,DE,52.19519,11.53736 24596,Darlingerode,3011,ST,82,DE,51.84712,10.73097 24636,Derenburg,3011,ST,82,DE,51.87086,10.91029 24643,Dessau,3011,ST,82,DE,51.83864,12.24555 24655,Deuben,3011,ST,82,DE,51.10968,12.07259 24674,Diesdorf,3011,ST,82,DE,52.13075,11.56483 24675,Dieskau,3011,ST,82,DE,51.43553,12.04035 24706,Ditfurt,3011,ST,82,DE,51.83333,11.2 24716,Dobien,3011,ST,82,DE,51.90519,12.61068 24795,Dölbau,3011,ST,82,DE,51.46701,12.05735 24796,Döllnitz,3011,ST,82,DE,51.40777,12.02831 24725,Domersleben,3011,ST,82,DE,52.09199,11.43757 24772,Droyßig,3011,ST,82,DE,51.04247,12.0259 24773,Drübeck,3011,ST,82,DE,51.8582,10.71839 24822,Ebendorf,3011,ST,82,DE,52.18551,11.57478 24848,Eckartsberga,3011,ST,82,DE,51.1238,11.56045 24852,Edderitz,3011,ST,82,DE,51.69933,11.93712 24857,Edersleben,3011,ST,82,DE,51.41667,11.28333 24865,Egeln,3011,ST,82,DE,51.94384,11.43265 24876,Eggersdorf,3011,ST,82,DE,51.97621,11.70971 24899,Eichenbarleben,3011,ST,82,DE,52.16688,11.40125 24908,Eickendorf,3011,ST,82,DE,51.94765,11.67538 24914,Eilsleben,3011,ST,82,DE,52.14708,11.21035 24933,Eisleben Lutherstadt,3011,ST,82,DE,51.52754,11.54835 24940,Elbingerode,3011,ST,82,DE,51.77039,10.80557 24969,Elster,3011,ST,82,DE,51.83011,12.82424 25031,Erdeborn,3011,ST,82,DE,51.47554,11.63487 25062,Ermlitz,3011,ST,82,DE,51.39182,12.15946 25072,Erxleben,3011,ST,82,DE,52.21812,11.24245 25144,Farnstädt,3011,ST,82,DE,51.43333,11.56667 25186,Flechtingen,3011,ST,82,DE,52.33083,11.24176 25190,Flessau,3011,ST,82,DE,52.75996,11.67093 25322,Förderstedt,3011,ST,82,DE,51.89717,11.63349 25223,Frankleben,3011,ST,82,DE,51.31144,11.92932 25262,Freyburg,3011,ST,82,DE,51.21362,11.76804 25278,Friedersdorf,3011,ST,82,DE,51.64809,12.36555 25285,Friedrichsbrunn,3011,ST,82,DE,51.69028,11.03737 25292,Friedrichstadt,3011,ST,82,DE,51.88751,12.66947 25309,Frose,3011,ST,82,DE,51.79581,11.37914 25364,Gardelegen,3011,ST,82,DE,52.5252,11.39523 25375,Gatersleben,3011,ST,82,DE,51.82215,11.28661 25428,Genthin,3011,ST,82,DE,52.40668,12.1592 25439,Gerbstedt,3011,ST,82,DE,51.63281,11.62669 25447,Gernrode,3011,ST,82,DE,51.72575,11.13876 25466,Gerwisch,3011,ST,82,DE,52.17662,11.73972 25477,Geusa,3011,ST,82,DE,51.33914,11.94382 25485,Giersleben,3011,ST,82,DE,51.76667,11.56667 25514,Glindenberg,3011,ST,82,DE,52.23857,11.68361 25517,Glöthe,3011,ST,82,DE,51.91,11.67471 25530,Goldbeck,3011,ST,82,DE,52.71695,11.8606 25539,Gommern,3011,ST,82,DE,52.07391,11.82297 25785,Görzig,3011,ST,82,DE,51.66381,11.99759 25545,Goseck,3011,ST,82,DE,51.2,11.86667 25724,Gräfenhainichen,3011,ST,82,DE,51.72892,12.45651 25576,Granschütz,3011,ST,82,DE,51.18431,12.05149 25600,Greppin,3011,ST,82,DE,51.64682,12.30066 25728,Gröbers,3011,ST,82,DE,51.4305,12.11623 25729,Gröbzig,3011,ST,82,DE,51.68226,11.87453 25732,Gröningen,3011,ST,82,DE,51.93744,11.21601 25619,Groß Ammensleben,3011,ST,82,DE,52.23279,11.52195 25620,Groß Börnecke,3011,ST,82,DE,51.88468,11.47032 25635,Groß Quenstedt,3011,ST,82,DE,51.93333,11.11667 25637,Groß Rodensleben,3011,ST,82,DE,52.12139,11.38367 25638,Groß Rosenburg,3011,ST,82,DE,51.91696,11.89184 25639,Groß Santersleben,3011,ST,82,DE,52.19143,11.45486 25683,Großkayna,3011,ST,82,DE,51.29068,11.93269 25685,Großkorbetha,3011,ST,82,DE,51.26002,12.03012 25687,Großkugel,3011,ST,82,DE,51.41728,12.14641 25715,Großörner,3011,ST,82,DE,51.61527,11.4898 25795,Günthersdorf,3011,ST,82,DE,51.3457,12.17175 25798,Güsten,3011,ST,82,DE,51.79637,11.61246 25767,Gutenberg,3011,ST,82,DE,51.5471,11.97181 25813,Hadmersleben,3011,ST,82,DE,51.99275,11.30283 25844,Halberstadt,3011,ST,82,DE,51.89562,11.05622 25846,Haldensleben I,3011,ST,82,DE,52.28906,11.40982 25853,Halle (Saale),3011,ST,82,DE,51.48158,11.97947 25854,Halle Neustadt,3011,ST,82,DE,51.47924,11.91605 25896,Harbke,3011,ST,82,DE,52.18877,11.04624 25909,Harsleben,3011,ST,82,DE,51.86667,11.1 25919,Harzgerode,3011,ST,82,DE,51.64189,11.1433 25932,Hasselfelde,3011,ST,82,DE,51.69051,10.85373 25956,Havelberg,3011,ST,82,DE,52.83088,12.07552 25970,Hecklingen,3011,ST,82,DE,51.84705,11.53416 25972,Hedersleben,3011,ST,82,DE,51.54891,11.64983 26020,Helbra,3011,ST,82,DE,51.55,11.5 26070,Hergisdorf,3011,ST,82,DE,51.53333,11.48333 26080,Hermsdorf,3011,ST,82,DE,52.1874,11.47556 26114,Hettstedt,3011,ST,82,DE,51.6503,11.51146 26121,Heudeber,3011,ST,82,DE,51.90245,10.84321 26202,Hohendodeleben,3011,ST,82,DE,52.10412,11.50473 26212,Hohenmölsen,3011,ST,82,DE,51.15769,12.1 26218,Hohenthurm,3011,ST,82,DE,51.51807,12.09749 26219,Hohenwarsleben,3011,ST,82,DE,52.17898,11.49994 26221,Hohenwarthe,3011,ST,82,DE,52.22968,11.71528 26312,Höhnstedt,3011,ST,82,DE,51.50268,11.73844 26230,Holleben,3011,ST,82,DE,51.44047,11.89915 26241,Holzdorf,3011,ST,82,DE,51.77873,13.12756 26249,Holzweißig,3011,ST,82,DE,51.59819,12.30842 26269,Hornhausen,3011,ST,82,DE,52.0451,11.17104 26324,Hötensleben,3011,ST,82,DE,52.11974,11.02238 26278,Hoym,3011,ST,82,DE,51.78292,11.31244 26343,Hüttenrode,3011,ST,82,DE,51.7688,10.90384 26294,Huy-Neinstedt,3011,ST,82,DE,51.96585,10.91457 26363,Ilberstedt,3011,ST,82,DE,51.8,11.66667 26375,Ilsenburg,3011,ST,82,DE,51.86695,10.67817 26410,Irxleben,3011,ST,82,DE,52.16689,11.48064 26465,Jävenitz,3011,ST,82,DE,52.5241,11.49909 26437,Jerichow,3011,ST,82,DE,52.50049,12.02383 26444,Jessen,3011,ST,82,DE,51.79337,12.95762 26451,Jeßnitz,3011,ST,82,DE,51.68307,12.29992 26486,Kalbe,3011,ST,82,DE,52.65656,11.38456 26525,Karsdorf,3011,ST,82,DE,51.27134,11.65775 26549,Kayna,3011,ST,82,DE,50.99414,12.2371 26555,Kelbra,3011,ST,82,DE,51.43528,11.04143 26563,Kemberg,3011,ST,82,DE,51.77189,12.63227 26666,Klein Wanzleben,3011,ST,82,DE,52.07005,11.36594 26684,Klieken,3011,ST,82,DE,51.88806,12.3707 26685,Klietz,3011,ST,82,DE,52.66835,12.06812 26695,Klostermansfeld,3011,ST,82,DE,51.58333,11.5 26698,Klötze,3011,ST,82,DE,52.62725,11.16424 26841,Könnern,3011,ST,82,DE,51.6712,11.77068 26846,Köthen,3011,ST,82,DE,51.75185,11.97093 26847,Kötzschau,3011,ST,82,DE,51.31244,12.13044 26753,Kretzschau,3011,ST,82,DE,51.05,12.06667 26774,Kroppenstedt,3011,ST,82,DE,51.94211,11.30841 26775,Kropstädt,3011,ST,82,DE,51.96307,12.7455 26781,Krumpa,3011,ST,82,DE,51.29724,11.84412 26806,Kusey,3011,ST,82,DE,52.57987,11.09056 26893,Landsberg,3011,ST,82,DE,51.52698,12.16076 26900,Langeln,3011,ST,82,DE,51.91188,10.79436 26911,Langenbogen,3011,ST,82,DE,51.483,11.77786 26914,Langendorf,3011,ST,82,DE,51.17972,11.9614 26915,Langeneichstädt,3011,ST,82,DE,51.34537,11.7433 26930,Langenstein,3011,ST,82,DE,51.85551,10.98822 26958,Laucha,3011,ST,82,DE,51.22422,11.67988 27032,Leißling,3011,ST,82,DE,51.1826,11.90954 27030,Leitzkau,3011,ST,82,DE,52.05818,11.95203 27056,Letzlingen,3011,ST,82,DE,52.44615,11.48518 27062,Leuna,3011,ST,82,DE,51.31783,12.01589 27095,Lieskau,3011,ST,82,DE,51.50395,11.86208 27103,Lindau,3011,ST,82,DE,52.03751,12.10788 27186,Löbejün,3011,ST,82,DE,51.63533,11.90106 27187,Löberitz,3011,ST,82,DE,51.65393,12.14655 27126,Loburg,3011,ST,82,DE,52.11509,12.0784 27127,Lochau,3011,ST,82,DE,51.39738,12.05303 27152,Lostau,3011,ST,82,DE,52.20871,11.73795 27213,Lüderitz,3011,ST,82,DE,52.50912,11.74301 27168,Luftkurort Arendsee,3011,ST,82,DE,52.88073,11.48621 27225,Lützen,3011,ST,82,DE,51.25671,12.14164 27230,Magdeburg,3011,ST,82,DE,52.12773,11.62916 27267,Mansfeld,3011,ST,82,DE,51.59234,11.45223 27378,Mehringen,3011,ST,82,DE,51.72663,11.51264 27387,Meitzendorf,3011,ST,82,DE,52.21308,11.56174 27422,Merseburg,3011,ST,82,DE,51.35478,11.98923 27462,Mieste,3011,ST,82,DE,52.48226,11.2064 27555,Möckern,3011,ST,82,DE,52.14099,11.95203 27560,Möhlau,3011,ST,82,DE,51.73126,12.35282 27578,Möser,3011,ST,82,DE,52.21397,11.79279 27583,Mücheln,3011,ST,82,DE,51.29688,11.80759 27590,Mühlanger,3011,ST,82,DE,51.85,12.75 27536,Muldenstein,3011,ST,82,DE,51.67192,12.34548 27548,Muschwitz,3011,ST,82,DE,51.19296,12.12065 27632,Nachterstedt,3011,ST,82,DE,51.80081,11.33489 27648,Nauendorf,3011,ST,82,DE,51.60178,11.88525 27649,Naumburg,3011,ST,82,DE,51.14987,11.80979 27657,Nebra,3011,ST,82,DE,51.2881,11.57749 27671,Neinstedt,3011,ST,82,DE,51.7495,11.08721 27681,Nessa,3011,ST,82,DE,51.14565,12.00874 27715,Neue Neustadt,3011,ST,82,DE,52.15,11.63333 27776,Neundorf,3011,ST,82,DE,51.8208,11.57484 27861,Niederndodeleben,3011,ST,82,DE,52.13416,11.50085 27890,Niemberg,3011,ST,82,DE,51.55035,12.09089 27893,Nienburg/Saale,3011,ST,82,DE,51.83747,11.76979 27939,Nudersdorf,3011,ST,82,DE,51.93025,12.59554 28027,Oberröblingen,3011,ST,82,DE,51.43705,11.3075 28058,Obhausen,3011,ST,82,DE,51.39172,11.65312 28072,Oebisfelde,3011,ST,82,DE,52.43421,10.98786 28121,Oppin,3011,ST,82,DE,51.55136,12.03274 28123,Oranienbaum,3011,ST,82,DE,51.7986,12.40583 28137,Oschersleben,3011,ST,82,DE,52.03039,11.22898 28147,Osterburg,3011,ST,82,DE,52.78721,11.75297 28150,Osterfeld,3011,ST,82,DE,51.08014,11.93047 28151,Osterhausen,3011,ST,82,DE,51.45417,11.50456 28154,Osternienburg,3011,ST,82,DE,51.79384,12.02616 28155,Osternienburger Land,3011,ST,82,DE,51.8,12.01667 28159,Osterwieck,3011,ST,82,DE,51.9699,10.71042 28245,Peißen,3011,ST,82,DE,51.74347,11.75756 28301,Piesteritz,3011,ST,82,DE,51.86956,12.59835 28332,Plötzkau,3011,ST,82,DE,51.75,11.68333 28333,Plötzky,3011,ST,82,DE,52.05207,11.80202 28344,Polleben,3011,ST,82,DE,51.57966,11.59931 28365,Pouch,3011,ST,82,DE,51.62324,12.40133 28369,Pratau,3011,ST,82,DE,51.84226,12.64373 28379,Prettin,3011,ST,82,DE,51.66077,12.92353 28381,Pretzier,3011,ST,82,DE,52.83224,11.26105 28382,Pretzsch,3011,ST,82,DE,51.71466,12.80663 28390,Prittitz,3011,ST,82,DE,51.14996,11.9302 28426,Quedlinburg,3011,ST,82,DE,51.78843,11.15006 28428,Queis,3011,ST,82,DE,51.47626,12.13455 28429,Quellendorf,3011,ST,82,DE,51.74916,12.12796 28430,Querfurt,3011,ST,82,DE,51.38124,11.60047 28444,Radegast,3011,ST,82,DE,51.65654,12.09485 28447,Radis,3011,ST,82,DE,51.75226,12.51453 28450,Raguhn,3011,ST,82,DE,51.71167,12.27531 28466,Ramsin,3011,ST,82,DE,51.61095,12.23812 28499,Raßnitz,3011,ST,82,DE,51.39085,12.09406 28535,Reichardtswerben,3011,ST,82,DE,51.24851,11.95349 28597,Reußen,3011,ST,82,DE,51.50109,12.13044 28633,Rieder,3011,ST,82,DE,51.73333,11.16667 28649,Riestedt,3011,ST,82,DE,51.49496,11.36023 28774,Röblingen am See,3011,ST,82,DE,51.45944,11.68231 28681,Rodleben,3011,ST,82,DE,51.89607,12.20061 28686,Rogätz,3011,ST,82,DE,52.31667,11.76667 28695,Roitzsch,3011,ST,82,DE,51.57526,12.26331 28743,Roßla,3011,ST,82,DE,51.46331,11.07576 28744,Roßlau,3011,ST,82,DE,51.88736,12.24192 28738,Rottleberode,3011,ST,82,DE,51.51636,10.94658 28797,Rübeland,3011,ST,82,DE,51.75591,10.8466 28843,Salzmünde,3011,ST,82,DE,51.52662,11.8265 28844,Salzwedel,3011,ST,82,DE,52.85435,11.1525 28847,Samswegen,3011,ST,82,DE,52.26059,11.56174 28850,Sandau,3011,ST,82,DE,52.78968,12.04582 28853,Sandersdorf,3011,ST,82,DE,51.62841,12.26492 28854,Sandersleben,3011,ST,82,DE,51.67745,11.56795 28858,Sangerhausen,3011,ST,82,DE,51.47221,11.29533 28905,Schafstädt,3011,ST,82,DE,51.38131,11.77302 28933,Schermen,3011,ST,82,DE,52.23206,11.81382 28956,Schkopau,3011,ST,82,DE,51.39186,11.95224 28961,Schlaitz,3011,ST,82,DE,51.65871,12.42839 29006,Schneidlingen,3011,ST,82,DE,51.89454,11.44487 29012,Schochwitz,3011,ST,82,DE,51.53174,11.75485 29114,Schönburg,3011,ST,82,DE,51.16667,11.86667 29115,Schönebeck,3011,ST,82,DE,52.01682,11.7307 29125,Schönhausen,3011,ST,82,DE,52.58076,12.03923 29029,Schraplau,3011,ST,82,DE,51.4375,11.66823 29058,Schwanebeck,3011,ST,82,DE,51.9679,11.12393 29152,Seehausen,3011,ST,82,DE,52.88872,11.75236 29193,Sennewitz,3011,ST,82,DE,51.54326,11.95218 29203,Seyda,3011,ST,82,DE,51.88163,12.90812 29222,Siersleben,3011,ST,82,DE,51.60411,11.54334 29267,Sommersdorf,3011,ST,82,DE,52.16667,11.08333 29298,Spergau,3011,ST,82,DE,51.29347,12.02292 29339,Stapelburg,3011,ST,82,DE,51.90075,10.6624 29347,Staßfurt,3011,ST,82,DE,51.85186,11.58508 29349,Stedten,3011,ST,82,DE,51.44308,11.69291 29398,Stendal,3011,ST,82,DE,52.6069,11.85867 29415,Stolberg,3011,ST,82,DE,51.57426,10.95582 29454,Stößen,3011,ST,82,DE,51.1144,11.92405 29440,Ströbeck,3011,ST,82,DE,51.91406,10.94445 29505,Süplingen,3011,ST,82,DE,52.28759,11.3245 29517,Tangerhütte,3011,ST,82,DE,52.4353,11.80724 29518,Tangermünde,3011,ST,82,DE,52.54463,11.97647 29546,Teicha,3011,ST,82,DE,51.55887,11.95482 29567,Teuchel,3011,ST,82,DE,51.88842,12.64587 29568,Teuchern,3011,ST,82,DE,51.12094,12.0241 29573,Teutschenthal,3011,ST,82,DE,51.45,11.8 29575,Thale,3011,ST,82,DE,51.74861,11.041 29578,Thalheim,3011,ST,82,DE,51.65268,12.22756 29589,Theißen,3011,ST,82,DE,51.08748,12.10659 29615,Timmenrode,3011,ST,82,DE,51.77113,11.00624 29630,Tollwitz,3011,ST,82,DE,51.28601,12.09733 29651,Trebitz,3011,ST,82,DE,51.58615,11.91965 29688,Tucheim,3011,ST,82,DE,52.28923,12.18423 29714,Uchtspringe,3011,ST,82,DE,52.54011,11.59959 29726,Uenglingen,3011,ST,82,DE,52.61797,11.80893 29732,Uftrungen,3011,ST,82,DE,51.49859,10.98066 29736,Uichteritz,3011,ST,82,DE,51.20652,11.92215 29741,Ummendorf,3011,ST,82,DE,52.15645,11.18151 29750,Unseburg,3011,ST,82,DE,51.93284,11.51281 29818,Veckenstedt,3011,ST,82,DE,51.90113,10.73203 29864,Vockerode,3011,ST,82,DE,51.84698,12.35208 29876,Volkstedt,3011,ST,82,DE,51.56267,11.55658 29893,Völpke,3011,ST,82,DE,52.13865,11.09877 29918,Wahlitz,3011,ST,82,DE,52.10376,11.77947 29974,Wallendorf,3011,ST,82,DE,51.35983,12.07537 29983,Wallhausen,3011,ST,82,DE,51.46117,11.2076 29989,Wallwitz,3011,ST,82,DE,51.58029,11.92888 30010,Wansleben,3011,ST,82,DE,51.46034,11.75135 30011,Wanzleben,3011,ST,82,DE,52.06087,11.4408 30034,Wasserleben,3011,ST,82,DE,51.92089,10.7567 30047,Weddersleben,3011,ST,82,DE,51.76533,11.08531 30054,Wefensleben,3011,ST,82,DE,52.18319,11.16074 30055,Weferlingen,3011,ST,82,DE,52.31205,11.05791 30057,Wegeleben,3011,ST,82,DE,51.88376,11.17347 30121,Weißandt-Gölzau,3011,ST,82,DE,51.6707,12.07338 30130,Weißenfels,3011,ST,82,DE,51.20148,11.96843 30143,Wellen,3011,ST,82,DE,52.14518,11.44106 30147,Welsleben,3011,ST,82,DE,52.00304,11.63851 30184,Wernigerode,3011,ST,82,DE,51.83652,10.78216 30205,Westeregeln,3011,ST,82,DE,51.96328,11.39265 30207,Westerhausen,3011,ST,82,DE,51.80566,11.05631 30226,Wetterzeube,3011,ST,82,DE,51.0,12.01667 30227,Wettin,3011,ST,82,DE,51.58604,11.8063 30242,Wiederstedt,3011,ST,82,DE,51.66526,11.52723 30307,Wimmelburg,3011,ST,82,DE,51.52069,11.50696 30340,Wippra,3011,ST,82,DE,51.573,11.27498 30351,Wittenberg,3011,ST,82,DE,51.8661,12.64973 30376,Wolfen,3011,ST,82,DE,51.66122,12.26873 30378,Wolferode,3011,ST,82,DE,51.5065,11.51299 30394,Wolmirsleben,3011,ST,82,DE,51.95,11.48333 30395,Wolmirstedt,3011,ST,82,DE,52.24856,11.62945 30443,Wörlitz,3011,ST,82,DE,51.84172,12.42116 30413,Wulfen,3011,ST,82,DE,51.81938,11.93063 30465,Zahna,3011,ST,82,DE,51.9141,12.78561 30470,Zappendorf,3011,ST,82,DE,51.51024,11.79514 30482,Zeitz,3011,ST,82,DE,51.04962,12.1369 30494,Zerbst,3011,ST,82,DE,51.9662,12.08517 30501,Zielitz,3011,ST,82,DE,52.28958,11.67572 30542,Zörbig,3011,ST,82,DE,51.62894,12.1174 30543,Zöschen,3011,ST,82,DE,51.35802,12.11652 30520,Zscherben,3011,ST,82,DE,51.46709,11.87058 30521,Zscherndorf,3011,ST,82,DE,51.61087,12.26755 30524,Zschornewitz,3011,ST,82,DE,51.71585,12.39998 23476,Achtrup,3005,SH,82,DE,54.79053,9.02848 23514,Ahrensbök,3005,SH,82,DE,54.00862,10.57434 23513,Ahrensburg,3005,SH,82,DE,53.67515,10.22593 23533,Albersdorf,3005,SH,82,DE,54.15,9.28333 23575,Alt Duvenstedt,3005,SH,82,DE,54.36667,9.65 23603,Altenholz,3005,SH,82,DE,54.4,10.13333 23606,Altenkrempe,3005,SH,82,DE,54.13333,10.83333 23640,Alveslohe,3005,SH,82,DE,53.78333,9.91667 23677,Appen,3005,SH,82,DE,53.65813,9.74582 23706,Ascheberg,3005,SH,82,DE,54.15027,10.34552 23736,Aukrug,3005,SH,82,DE,54.08333,9.78333 23776,Bad Bramstedt,3005,SH,82,DE,53.9183,9.88424 23845,Bad Oldesloe,3005,SH,82,DE,53.81167,10.37417 23865,Bad Schwartau,3005,SH,82,DE,53.91887,10.69691 23866,Bad Segeberg,3005,SH,82,DE,53.94313,10.30215 23930,Bargfeld-Stegen,3005,SH,82,DE,53.76778,10.1875 23932,Bargteheide,3005,SH,82,DE,53.72856,10.26695 23933,Bark,3005,SH,82,DE,53.91146,10.17949 23934,Barkelsby,3005,SH,82,DE,54.5,9.83333 23937,Barmstedt,3005,SH,82,DE,53.79209,9.76739 23941,Barsbüttel,3005,SH,82,DE,53.56667,10.16667 24051,Berkenthin,3005,SH,82,DE,53.73333,10.65 24178,Blekendorf,3005,SH,82,DE,54.28211,10.6582 24220,Bokholt-Hanredder,3005,SH,82,DE,53.78808,9.73586 24225,Bollingstedt,3005,SH,82,DE,54.59229,9.41738 24468,Bönebüttel,3005,SH,82,DE,54.08333,10.06667 24471,Bönningstedt,3005,SH,82,DE,53.66667,9.91667 24235,Boostedt,3005,SH,82,DE,54.01667,10.03333 24238,Bordelum,3005,SH,82,DE,54.63333,8.93333 24239,Bordesholm,3005,SH,82,DE,54.17611,10.03146 24243,Borgstedt,3005,SH,82,DE,54.33268,9.70954 24254,Bornhöved,3005,SH,82,DE,54.06667,10.23333 24475,Börnsen,3005,SH,82,DE,53.4762,10.2816 24259,Borstel-Hohenraden,3005,SH,82,DE,53.68333,9.81667 24261,Bosau,3005,SH,82,DE,54.09787,10.4357 24478,Bösdorf,3005,SH,82,DE,54.15,10.48333 24265,Bovenau,3005,SH,82,DE,54.33333,9.83333 24279,Brande-Hörnerkirchen,3005,SH,82,DE,53.85,9.71667 24295,Bredenbek,3005,SH,82,DE,54.32247,9.87293 24296,Bredstedt,3005,SH,82,DE,54.61868,8.96441 24301,Breiholz,3005,SH,82,DE,54.20554,9.52371 24309,Breitenburg,3005,SH,82,DE,53.90572,9.57041 24310,Breitenfelde,3005,SH,82,DE,53.60592,10.63339 24318,Brekendorf,3005,SH,82,DE,54.4212,9.6335 24319,Breklum,3005,SH,82,DE,54.6,8.98333 24343,Brokdorf,3005,SH,82,DE,53.8638,9.32314 24344,Brokstedt,3005,SH,82,DE,53.98333,9.81667 24368,Brügge,3005,SH,82,DE,54.17578,10.06913 24362,Brunsbüttel,3005,SH,82,DE,53.89504,9.10484 24486,Büchen,3005,SH,82,DE,53.48008,10.6176 24391,Buchholz,3005,SH,82,DE,53.98829,9.22362 24493,Büdelsdorf,3005,SH,82,DE,54.31844,9.67295 24407,Burg,3005,SH,82,DE,53.99708,9.25891 24409,Burg auf Fehmarn,3005,SH,82,DE,54.43333,11.2 24447,Busdorf,3005,SH,82,DE,54.10345,10.08242 24506,Büsum,3005,SH,82,DE,54.13398,8.85756 24790,Dägeling,3005,SH,82,DE,53.88333,9.53333 24582,Dahme,3005,SH,82,DE,54.21667,11.08333 24589,Damp,3005,SH,82,DE,54.58469,10.01785 24791,Dänischenhagen,3005,SH,82,DE,54.42775,10.12596 24593,Dannewerk,3005,SH,82,DE,54.48333,9.5 24600,Dassendorf,3005,SH,82,DE,53.49532,10.35987 24622,Delingsdorf,3005,SH,82,DE,53.7,10.25 24715,Dobersdorf,3005,SH,82,DE,54.31893,10.28011 24723,Dollerup,3005,SH,82,DE,54.77798,9.67981 24765,Drelsdorf,3005,SH,82,DE,54.60548,9.04449 24849,Eckernförde,3005,SH,82,DE,54.46854,9.83824 24851,Eddelak,3005,SH,82,DE,53.95,9.15 24871,Eggebek,3005,SH,82,DE,54.61667,9.36667 24948,Ellerau,3005,SH,82,DE,53.75,9.91667 24949,Ellerbek,3005,SH,82,DE,53.65817,9.86991 24950,Ellerhoop,3005,SH,82,DE,53.72603,9.76933 24958,Elmenhorst,3005,SH,82,DE,53.76667,10.26667 24960,Elmshorn,3005,SH,82,DE,53.75396,9.65339 24964,Elsdorf-Westermühlen,3005,SH,82,DE,54.26667,9.51667 24984,Emkendorf,3005,SH,82,DE,54.26667,9.85 24986,Emmelsbüll-Horsbüll,3005,SH,82,DE,54.81667,8.7 25036,Erfde,3005,SH,82,DE,54.3,9.31667 25077,Escheburg,3005,SH,82,DE,53.46667,10.31667 25117,Eutin,3005,SH,82,DE,54.14054,10.60751 25126,Fahrdorf,3005,SH,82,DE,54.5,9.6 25128,Fahrenkrug,3005,SH,82,DE,53.95,10.25 25148,Fehmarn,3005,SH,82,DE,54.4378,11.19352 25154,Felde,3005,SH,82,DE,54.3,9.93333 25161,Felm,3005,SH,82,DE,54.41667,10.05 25187,Fleckeby,3005,SH,82,DE,54.48333,9.7 25189,Flensburg,3005,SH,82,DE,54.78431,9.43961 25192,Flintbek,3005,SH,82,DE,54.25,10.06667 25202,Fockbek,3005,SH,82,DE,54.3,9.6 25245,Freienwill,3005,SH,82,DE,54.72752,9.49414 25291,Friedrichskoog,3005,SH,82,DE,54.01667,8.91667 25293,Friedrichstadt,3005,SH,82,DE,54.37566,9.08672 25365,Garding,3005,SH,82,DE,54.33056,8.78056 25390,Geesthacht,3005,SH,82,DE,53.43575,10.3779 25418,Gelting,3005,SH,82,DE,54.75,9.9 25476,Gettorf,3005,SH,82,DE,54.4,9.98333 25482,Giekau,3005,SH,82,DE,54.31667,10.51667 25513,Glinde,3005,SH,82,DE,53.5441,10.20048 25519,Glücksburg,3005,SH,82,DE,54.83522,9.54853 25520,Glückstadt,3005,SH,82,DE,53.78893,9.42576 25524,Gnutz,3005,SH,82,DE,54.13333,9.81667 25527,Goel,3005,SH,82,DE,54.2835,10.94036 25586,Grebin,3005,SH,82,DE,54.2,10.5 25597,Gremersdorf,3005,SH,82,DE,54.33333,10.93333 25731,Grömitz,3005,SH,82,DE,54.15,10.96667 25733,Grönwohld,3005,SH,82,DE,53.64162,10.40784 25622,Groß Grönau,3005,SH,82,DE,53.8,10.75 25626,Groß Kummerfeld,3005,SH,82,DE,54.05,10.08333 25636,Groß Rheide,3005,SH,82,DE,54.44154,9.43508 25641,Groß Wittensee,3005,SH,82,DE,54.4,9.76667 25661,Großenaspe,3005,SH,82,DE,53.98333,9.96667 25618,Grossenbrode,3005,SH,82,DE,54.38333,11.08333 25667,Großensee,3005,SH,82,DE,53.61263,10.33961 25670,Großenwiehe,3005,SH,82,DE,54.7,9.25 25674,Großhansdorf,3005,SH,82,DE,53.66667,10.28333 25709,Großsolt,3005,SH,82,DE,54.7,9.51667 25717,Grube,3005,SH,82,DE,54.23333,11.03333 25751,Gudow,3005,SH,82,DE,53.55556,10.77021 25793,Gülzow,3005,SH,82,DE,53.45,10.5 25799,Güster,3005,SH,82,DE,53.53851,10.67607 25860,Halstenbek,3005,SH,82,DE,53.63333,9.85 25863,Hamberge,3005,SH,82,DE,53.83333,10.58333 25871,Hamdorf,3005,SH,82,DE,54.22522,9.51866 25881,Hammoor,3005,SH,82,DE,53.71378,10.322 25884,Handewitt,3005,SH,82,DE,54.76667,9.33333 25886,Hanerau-Hademarschen,3005,SH,82,DE,54.13333,9.41667 25905,Harrislee,3005,SH,82,DE,54.8,9.38333 25911,Hartenholm,3005,SH,82,DE,53.89856,10.05953 25922,Haselau,3005,SH,82,DE,53.66181,9.6201 25925,Haseldorf,3005,SH,82,DE,53.6378,9.59151 25930,Hasloh,3005,SH,82,DE,53.69471,9.91682 25942,Hattstedt,3005,SH,82,DE,54.53333,9.03333 25980,Heide,3005,SH,82,DE,54.19579,9.0988 25989,Heidgraben,3005,SH,82,DE,53.70787,9.68099 25992,Heikendorf,3005,SH,82,DE,54.36667,10.2 25997,Heiligenhafen,3005,SH,82,DE,54.36964,10.98022 26002,Heiligenstedten,3005,SH,82,DE,53.93264,9.47462 26017,Heist,3005,SH,82,DE,53.65,9.65 26023,Helgoland,3005,SH,82,DE,54.18143,7.8863 26037,Hemdingen,3005,SH,82,DE,53.76667,9.83333 26042,Hemmingstedt,3005,SH,82,DE,54.15,9.06667 26052,Hennstedt,3005,SH,82,DE,54.28333,9.16667 26054,Henstedt-Ulzburg,3005,SH,82,DE,53.805,9.97452 26073,Heringsdorf,3005,SH,82,DE,54.301,11.00658 26100,Herzhorn,3005,SH,82,DE,53.78333,9.48333 26109,Hetlingen,3005,SH,82,DE,53.60712,9.63718 26171,Hitzhusen,3005,SH,82,DE,53.92397,9.85262 26172,Hochdonn,3005,SH,82,DE,54.02663,9.27624 26196,Hohenaspe,3005,SH,82,DE,53.98898,9.52774 26203,Hohenfelde,3005,SH,82,DE,54.36667,10.5 26211,Hohenlockstedt,3005,SH,82,DE,53.96667,9.61667 26222,Hohenwestedt,3005,SH,82,DE,54.08886,9.65359 26223,Hohn,3005,SH,82,DE,54.3,9.5 26227,Hoisdorf,3005,SH,82,DE,53.65,10.31667 26235,Hollingstedt,3005,SH,82,DE,54.45934,9.33695 26237,Holm,3005,SH,82,DE,53.61667,9.66667 26239,Holtsee,3005,SH,82,DE,54.4,9.85 26272,Horst,3005,SH,82,DE,53.81195,9.62307 26341,Hürup,3005,SH,82,DE,54.75,9.53333 26292,Husum,3005,SH,82,DE,54.4858,9.05239 26422,Itzehoe,3005,SH,82,DE,53.92099,9.51529 26423,Itzstedt,3005,SH,82,DE,53.808,10.15797 26431,Jarplund-Weding,3005,SH,82,DE,54.73714,9.41813 26438,Jerrishoe,3005,SH,82,DE,54.6567,9.36918 26439,Jersbek,3005,SH,82,DE,53.73333,10.21667 26449,Jevenstedt,3005,SH,82,DE,54.23333,9.66667 26469,Jübek,3005,SH,82,DE,54.55709,9.39773 26496,Kaltenkirchen,3005,SH,82,DE,53.83292,9.9581 26509,Kappeln,3005,SH,82,DE,54.66122,9.9313 26530,Kasseedorf,3005,SH,82,DE,54.16667,10.71667 26534,Kastorf,3005,SH,82,DE,53.74569,10.56723 26548,Kayhude,3005,SH,82,DE,53.75629,10.13232 26553,Keitum,3005,SH,82,DE,54.89333,8.37083 26559,Kellenhusen,3005,SH,82,DE,54.19338,11.06165 26560,Kellinghusen,3005,SH,82,DE,53.95202,9.71959 26581,Kiebitzreihe,3005,SH,82,DE,53.78333,9.61667 26584,Kiel,3005,SH,82,DE,54.32133,10.13489 26647,Kisdorf,3005,SH,82,DE,53.81667,10.01667 26656,Klausdorf,3005,SH,82,DE,54.30899,10.21372 26660,Klein Nordende,3005,SH,82,DE,53.72219,9.65424 26661,Klein Offenseth-Sparrieshoop,3005,SH,82,DE,53.79748,9.68653 26664,Klein Rönnau,3005,SH,82,DE,53.96667,10.31667 26714,Kollmar,3005,SH,82,DE,53.72936,9.4788 26817,Kölln-Reisiek,3005,SH,82,DE,53.75748,9.69772 26727,Kosel,3005,SH,82,DE,54.5058,9.75653 26750,Krempe,3005,SH,82,DE,53.83694,9.48831 26751,Kremperheide,3005,SH,82,DE,53.88721,9.47809 26772,Kronshagen,3005,SH,82,DE,54.33333,10.08333 26773,Kropp,3005,SH,82,DE,54.41667,9.51667 26784,Kröppelshagen-Fahrendorf,3005,SH,82,DE,53.48979,10.31697 26780,Krummesse,3005,SH,82,DE,53.78333,10.65 26790,Kuddewörde,3005,SH,82,DE,53.58333,10.4 26796,Kummerfeld,3005,SH,82,DE,53.69262,9.79099 26866,Laboe,3005,SH,82,DE,54.4,10.21667 26871,Ladelund,3005,SH,82,DE,54.84084,9.02135 27183,Lägerdorf,3005,SH,82,DE,53.88333,9.58333 26899,Langballig,3005,SH,82,DE,54.8,9.63333 26921,Langenhorn,3005,SH,82,DE,54.66667,8.91667 26941,Langstedt,3005,SH,82,DE,54.61667,9.38333 26944,Langwedel,3005,SH,82,DE,54.21033,9.92761 26951,Lasbek,3005,SH,82,DE,53.73333,10.36667 26968,Lauenburg,3005,SH,82,DE,53.37199,10.55654 26997,Leck,3005,SH,82,DE,54.76667,8.98333 27002,Leezen,3005,SH,82,DE,53.86667,10.25 27006,Lehe,3005,SH,82,DE,54.34143,9.02374 27009,Lehmkuhlen,3005,SH,82,DE,54.23333,10.36667 27048,Lensahn,3005,SH,82,DE,54.21652,10.88326 27049,Lentföhrden,3005,SH,82,DE,53.86667,9.88333 27101,Linau,3005,SH,82,DE,53.64446,10.46853 27104,Lindau,3005,SH,82,DE,54.38333,9.9 27109,Lindewitt,3005,SH,82,DE,54.7,9.2 27122,List,3005,SH,82,DE,55.01917,8.43132 27131,Lohe-Rickelshof,3005,SH,82,DE,54.18803,9.07066 27205,Lübeck,3005,SH,82,DE,53.86893,10.68729 27174,Lunden,3005,SH,82,DE,54.33131,9.02523 27221,Lürschau,3005,SH,82,DE,54.55,9.5 27222,Lütjenburg,3005,SH,82,DE,54.29188,10.58945 27223,Lütjensee,3005,SH,82,DE,53.65,10.36667 27252,Malente,3005,SH,82,DE,54.17226,10.55968 27327,Martensrade,3005,SH,82,DE,54.28333,10.4 27392,Meldorf,3005,SH,82,DE,54.09182,9.0687 27399,Melsdorf,3005,SH,82,DE,54.31667,10.03333 27460,Mielkendorf,3005,SH,82,DE,54.28333,10.05 27466,Mildstedt,3005,SH,82,DE,54.46667,9.1 27502,Mohrkirch,3005,SH,82,DE,54.66667,9.71667 27505,Molfsee,3005,SH,82,DE,54.26667,10.06667 27564,Mölln,3005,SH,82,DE,53.61702,10.68742 27574,Mönkeberg,3005,SH,82,DE,54.35,10.18333 27516,Moorrege,3005,SH,82,DE,53.66667,9.66667 27541,Munkbrarup,3005,SH,82,DE,54.8,9.56667 27624,Münsterdorf,3005,SH,82,DE,53.90232,9.54123 27636,Nahe,3005,SH,82,DE,53.8,10.13333 27667,Negernbötel,3005,SH,82,DE,53.98333,10.25 27697,Neuberend,3005,SH,82,DE,54.55,9.53333 27713,Neudorf-Bornstein,3005,SH,82,DE,54.43333,9.95 27760,Neukirchen,3005,SH,82,DE,54.21465,10.55381 27774,Neumünster,3005,SH,82,DE,54.07477,9.98195 27805,Neustadt in Holstein,3005,SH,82,DE,54.10707,10.8145 27815,Neuwittenbek,3005,SH,82,DE,54.36667,10.01667 27824,Niebüll,3005,SH,82,DE,54.78663,8.82854 27900,Nindorf,3005,SH,82,DE,54.08333,9.11667 27916,Norderstedt,3005,SH,82,DE,53.6859,9.98041 27918,Nordhastedt,3005,SH,82,DE,54.16667,9.18333 27932,Nortorf,3005,SH,82,DE,54.16738,9.85437 27950,Nübbel,3005,SH,82,DE,54.26667,9.61667 27941,Nusse,3005,SH,82,DE,53.65654,10.58391 27956,Nützen,3005,SH,82,DE,53.86667,9.91667 28077,Oelixdorf,3005,SH,82,DE,53.92738,9.56383 28084,Oeversee,3005,SH,82,DE,54.7,9.43333 28106,Oldenburg in Holstein,3005,SH,82,DE,54.29576,10.90156 28107,Oldendorf,3005,SH,82,DE,53.95341,9.45858 28109,Oldenswort,3005,SH,82,DE,54.37243,8.93996 28138,Osdorf,3005,SH,82,DE,54.43333,10.01667 28146,Ostenfeld,3005,SH,82,DE,54.464,9.2343 28157,Osterrönfeld,3005,SH,82,DE,54.29013,9.699 28176,Oststeinbek,3005,SH,82,DE,53.54321,10.16939 28203,Owschlag,3005,SH,82,DE,54.39336,9.59243 28208,Padenstedt,3005,SH,82,DE,54.05,9.91667 28210,Pahlen,3005,SH,82,DE,54.26667,9.3 28215,Panker,3005,SH,82,DE,54.33333,10.56667 28248,Pellworm,3005,SH,82,DE,54.5161,8.64512 28304,Pinneberg,3005,SH,82,DE,53.66732,9.78936 28331,Plön,3005,SH,82,DE,54.16241,10.42333 28416,Pölitz,3005,SH,82,DE,53.77303,10.38276 28371,Preetz,3005,SH,82,DE,54.2354,10.27795 28389,Prisdorf,3005,SH,82,DE,53.68333,9.75 28393,Probsteierhagen,3005,SH,82,DE,54.36153,10.28772 28396,Pronstorf,3005,SH,82,DE,53.95,10.46667 28425,Quarnbek,3005,SH,82,DE,54.33333,9.98333 28431,Quern,3005,SH,82,DE,54.75,9.71667 28432,Quickborn,3005,SH,82,DE,53.72831,9.90934 28454,Raisdorf,3005,SH,82,DE,54.28127,10.24915 28476,Rantrum,3005,SH,82,DE,54.44062,9.12872 28483,Ratekau,3005,SH,82,DE,53.95,10.73333 28491,Ratzeburg,3005,SH,82,DE,53.69965,10.77256 28555,Reinbek,3005,SH,82,DE,53.51703,10.2488 28557,Reinfeld,3005,SH,82,DE,53.83184,10.49126 28571,Rellingen,3005,SH,82,DE,53.65,9.81667 28579,Rendsburg,3005,SH,82,DE,54.30663,9.66313 28624,Rickert,3005,SH,82,DE,54.33333,9.66667 28625,Rickling,3005,SH,82,DE,54.01667,10.16667 28644,Riepsdorf,3005,SH,82,DE,54.22611,10.97242 28647,Rieseby,3005,SH,82,DE,54.5414,9.81689 28666,Risum-Lindholm,3005,SH,82,DE,54.75802,8.86906 28760,Ruhwinkel,3005,SH,82,DE,54.1,10.21667 28808,Rümpel,3005,SH,82,DE,53.78333,10.35 28855,Sandesneben,3005,SH,82,DE,53.68333,10.5 28859,Sankelmark,3005,SH,82,DE,54.71803,9.42344 28876,Sankt Margarethen,3005,SH,82,DE,53.89199,9.25301 28878,Sankt Michaelisdonn,3005,SH,82,DE,53.98333,9.11667 28881,Sankt Peter-Ording,3005,SH,82,DE,54.30363,8.64138 28892,Satrup,3005,SH,82,DE,54.69237,9.60549 28902,Schaalby,3005,SH,82,DE,54.55,9.63333 28903,Schacht-Audorf,3005,SH,82,DE,54.31282,9.71586 28904,Schafflund,3005,SH,82,DE,54.75845,9.18329 28910,Scharbeutz,3005,SH,82,DE,54.03333,10.75 28913,Schashagen,3005,SH,82,DE,54.13333,10.88333 28927,Schellhorn,3005,SH,82,DE,54.22952,10.29402 28928,Schenefeld,3005,SH,82,DE,54.05,9.48333 28972,Schleswig,3005,SH,82,DE,54.52156,9.5586 28986,Schmalfeld,3005,SH,82,DE,53.88333,9.96667 29011,Schobüll,3005,SH,82,DE,54.5092,9.00621 29111,Schönberg,3005,SH,82,DE,53.68319,10.42671 29128,Schönkirchen,3005,SH,82,DE,54.33333,10.23333 29134,Schönwalde am Bungsberg,3005,SH,82,DE,54.18333,10.75 29034,Schuby,3005,SH,82,DE,54.51667,9.48333 29137,Schülp,3005,SH,82,DE,54.25896,9.63034 29044,Schwabstedt,3005,SH,82,DE,54.39705,9.18646 29069,Schwarzenbek,3005,SH,82,DE,53.50303,10.48055 29149,Seedorf,3005,SH,82,DE,54.05,10.41667 29178,Selent,3005,SH,82,DE,54.28893,10.42702 29197,Seth,3005,SH,82,DE,53.84718,10.17421 29216,Siek,3005,SH,82,DE,53.63333,10.3 29219,Sierksdorf,3005,SH,82,DE,54.06667,10.76667 29223,Sievershütten,3005,SH,82,DE,53.84238,10.11216 29224,Sieverstedt,3005,SH,82,DE,54.64145,9.46949 29229,Silberstedt,3005,SH,82,DE,54.51667,9.38333 29496,Sörup,3005,SH,82,DE,54.71667,9.66667 29332,Stadum,3005,SH,82,DE,54.73333,9.05 29340,Stapelfeld,3005,SH,82,DE,53.6,10.21667 29367,Steinberg,3005,SH,82,DE,54.76667,9.78333 29368,Steinbergkirche,3005,SH,82,DE,54.75463,9.76069 29403,Sterup,3005,SH,82,DE,54.7265,9.73572 29411,Stockelsdorf,3005,SH,82,DE,53.8922,10.64713 29418,Stolpe,3005,SH,82,DE,54.13333,10.21667 29426,Strande,3005,SH,82,DE,54.43333,10.16667 29439,Struvenhütten,3005,SH,82,DE,53.86667,10.05 29497,Süderbrarup,3005,SH,82,DE,54.63333,9.78333 29499,Süderlügum,3005,SH,82,DE,54.87391,8.91111 29500,Süderstapel,3005,SH,82,DE,54.34967,9.21907 29502,Sülfeld,3005,SH,82,DE,53.8,10.23333 29507,Süsel,3005,SH,82,DE,54.08135,10.70172 29487,Sylt-Ost,3005,SH,82,DE,54.8611,8.41141 29519,Tangstedt,3005,SH,82,DE,53.73333,10.08333 29531,Tarp,3005,SH,82,DE,54.66667,9.4 29532,Tating,3005,SH,82,DE,54.32607,8.70802 29553,Tellingstedt,3005,SH,82,DE,54.21667,9.28333 29613,Timmaspe,3005,SH,82,DE,54.13967,9.8943 29614,Timmendorfer Strand,3005,SH,82,DE,53.9953,10.77676 29616,Tinnum,3005,SH,82,DE,54.89932,8.33476 29623,Todenbüttel,3005,SH,82,DE,54.13333,9.55 29624,Todendorf,3005,SH,82,DE,53.69461,10.34781 29625,Todesfelde,3005,SH,82,DE,53.9,10.18333 29629,Tolk,3005,SH,82,DE,54.57987,9.63844 29702,Tönning,3005,SH,82,DE,54.31879,8.94234 29634,Tornesch,3005,SH,82,DE,53.7,9.71667 29640,Trappenkamp,3005,SH,82,DE,54.03988,10.21496 29647,Travemünde,3005,SH,82,DE,53.96304,10.8709 29657,Treia,3005,SH,82,DE,54.5,9.31667 29659,Tremsbüttel,3005,SH,82,DE,53.74384,10.31024 29674,Trittau,3005,SH,82,DE,53.61667,10.4 29710,Tüttendorf,3005,SH,82,DE,54.4,10.0 29727,Uetersen,3005,SH,82,DE,53.68769,9.66394 29806,Vaale,3005,SH,82,DE,54.0,9.38333 29862,Viöl,3005,SH,82,DE,54.56667,9.18333 29895,Waabs,3005,SH,82,DE,54.53333,9.98333 29905,Wacken,3005,SH,82,DE,54.02078,9.37597 29919,Wahlstedt,3005,SH,82,DE,53.95161,10.20626 29998,Wanderup,3005,SH,82,DE,54.68333,9.33333 30003,Wangels,3005,SH,82,DE,54.26667,10.76667 30006,Wankendorf,3005,SH,82,DE,54.11224,10.20546 30028,Wasbek,3005,SH,82,DE,54.07427,9.89738 30040,Wattenbek,3005,SH,82,DE,54.16667,10.05 30046,Weddelbrook,3005,SH,82,DE,53.9,9.83333 30049,Weddingstedt,3005,SH,82,DE,54.23428,9.09103 30050,Wedel,3005,SH,82,DE,53.58374,9.69835 30052,Wees,3005,SH,82,DE,54.80621,9.51695 30160,Wendtorf,3005,SH,82,DE,54.41212,10.28952 30163,Wentorf bei Hamburg,3005,SH,82,DE,53.5,10.25 30195,Wesselburen,3005,SH,82,DE,54.21217,8.92419 30197,Wesseln,3005,SH,82,DE,54.20985,9.07644 30202,Westensee,3005,SH,82,DE,54.27452,9.89584 30203,Wester-Ohrstedt,3005,SH,82,DE,54.50796,9.18574 30211,Westerhorn,3005,SH,82,DE,53.85711,9.67959 30213,Westerland,3005,SH,82,DE,54.9079,8.30326 30214,Westerrönfeld,3005,SH,82,DE,54.28333,9.65 30231,Wewelsfleth,3005,SH,82,DE,53.85,9.4 30248,Wiemersdorf,3005,SH,82,DE,53.95815,9.90297 30303,Wilster,3005,SH,82,DE,53.92253,9.37465 30312,Windeby,3005,SH,82,DE,54.46667,9.81667 30368,Witzhave,3005,SH,82,DE,53.56667,10.33333 30371,Wohltorf,3005,SH,82,DE,53.51667,10.28333 30438,Wöhrden,3005,SH,82,DE,54.16667,9.0 30412,Wrist,3005,SH,82,DE,53.93333,9.76667 30435,Wyk auf Föhr,3005,SH,82,DE,54.6914,8.56702 30471,Zarpen,3005,SH,82,DE,53.86667,10.51667 23596,Altenburg,3015,TH,82,DE,50.98763,12.43684 23600,Altenfeld,3015,TH,82,DE,50.56667,10.96667 23602,Altengottern,3015,TH,82,DE,51.16395,10.58093 23625,Altkirchen,3015,TH,82,DE,50.93333,12.35 23664,Anrode,3015,TH,82,DE,51.26667,10.33333 23673,Apfelstädt,3015,TH,82,DE,50.90157,10.88977 23674,Apolda,3015,TH,82,DE,51.02624,11.51638 23680,Arenshausen,3015,TH,82,DE,51.37613,9.9687 23688,Arnstadt,3015,TH,82,DE,50.84048,10.95198 23693,Artern,3015,TH,82,DE,51.36431,11.29167 23737,Auleben,3015,TH,82,DE,51.4264,10.92968 23739,Auma,3015,TH,82,DE,50.70044,11.89958 23767,Bad Berka,3015,TH,82,DE,50.89982,11.28245 23773,Bad Blankenburg,3015,TH,82,DE,50.68189,11.27369 23796,Bad Frankenhausen,3015,TH,82,DE,51.35609,11.09977 23815,Bad Klosterlausnitz,3015,TH,82,DE,50.91667,11.86667 23821,Bad Köstritz,3015,TH,82,DE,50.93032,12.01005 23824,Bad Langensalza,3015,TH,82,DE,51.10771,10.646 23828,Bad Liebenstein,3015,TH,82,DE,50.81569,10.35123 23832,Bad Lobenstein,3015,TH,82,DE,50.45223,11.6393 23858,Bad Salzungen,3015,TH,82,DE,50.81342,10.2361 23873,Bad Sulza,3015,TH,82,DE,51.08929,11.62474 23877,Bad Tennstedt,3015,TH,82,DE,51.15447,10.83873 23926,Barchfeld,3015,TH,82,DE,50.82872,11.17955 23990,Behringen,3015,TH,82,DE,50.77283,11.01403 24018,Benshausen,3015,TH,82,DE,50.65,10.6 24029,Berga,3015,TH,82,DE,50.75184,12.16445 24056,Berlingerode,3015,TH,82,DE,51.45775,10.2384 24057,Berlstedt,3015,TH,82,DE,51.06142,11.24288 24145,Bischofferode,3015,TH,82,DE,51.49656,10.44396 24168,Blankenhain,3015,TH,82,DE,50.85993,11.3439 24177,Bleicherode,3015,TH,82,DE,51.44026,10.57202 24272,Brahmenau,3015,TH,82,DE,50.92359,12.15886 24298,Brehme,3015,TH,82,DE,51.49421,10.35908 24305,Breitenbach,3015,TH,82,DE,50.68895,10.49148 24313,Breitenworbis,3015,TH,82,DE,51.41267,10.4282 24317,Breitungen,3015,TH,82,DE,50.76355,10.32724 24347,Brotterode,3015,TH,82,DE,50.82412,10.44446 24382,Bucha,3015,TH,82,DE,50.88333,11.51667 24399,Bufleben,3015,TH,82,DE,51.0,10.73333 24502,Bürgel,3015,TH,82,DE,50.94217,11.75635 24450,Buttelstedt,3015,TH,82,DE,51.0765,11.34353 24453,Buttlar,3015,TH,82,DE,50.7577,9.95277 24454,Buttstädt,3015,TH,82,DE,51.12227,11.41721 24509,Büttstedt,3015,TH,82,DE,51.25972,10.30636 24520,Camburg,3015,TH,82,DE,51.05524,11.70967 24542,Clingen,3015,TH,82,DE,51.23206,10.93281 24558,Crawinkel,3015,TH,82,DE,50.78333,10.78333 24561,Creuzburg,3015,TH,82,DE,51.05288,10.2475 24576,Dachwig,3015,TH,82,DE,51.0777,10.85479 24590,Dankmarshausen,3015,TH,82,DE,50.92527,10.01601 24637,Dermbach,3015,TH,82,DE,50.71383,10.11839 24657,Deuna,3015,TH,82,DE,51.3545,10.47439 24692,Dingelstädt,3015,TH,82,DE,51.31529,10.3174 24699,Dippach,3015,TH,82,DE,50.91959,10.04236 24797,Döllstädt,3015,TH,82,DE,51.08333,10.81667 24741,Dorndorf,3015,TH,82,DE,50.83472,10.08921 24820,Ebeleben,3015,TH,82,DE,51.28283,10.72999 24862,Effelder,3015,TH,82,DE,51.23948,10.24778 24924,Eisenach,3015,TH,82,DE,50.9807,10.31522 24926,Eisenberg,3015,TH,82,DE,50.9686,11.90207 24930,Eisfeld,3015,TH,82,DE,50.42648,10.90695 24944,Elgersburg,3015,TH,82,DE,50.70603,10.8531 24955,Ellrich,3015,TH,82,DE,51.58656,10.66326 24977,Elxleben,3015,TH,82,DE,51.05,10.95 25038,Erfurt,3015,TH,82,DE,50.9787,11.03283 25065,Ernstroda,3015,TH,82,DE,50.86484,10.62056 25141,Fambach,3015,TH,82,DE,50.73333,10.36667 25175,Finsterbergen,3015,TH,82,DE,50.83464,10.58916 25323,Föritz,3015,TH,82,DE,50.34174,11.2318 25215,Frankenheim,3015,TH,82,DE,50.54452,10.06828 25229,Frauenprießnitz,3015,TH,82,DE,51.01667,11.73333 25231,Frauenwald,3015,TH,82,DE,50.5843,10.85841 25243,Freienbessingen,3015,TH,82,DE,51.23333,10.76667 25284,Friedrichroda,3015,TH,82,DE,50.85754,10.56507 25296,Friemar,3015,TH,82,DE,50.97702,10.78851 25359,Gangloffsömmern,3015,TH,82,DE,51.1894,10.94332 25384,Gebesee,3015,TH,82,DE,51.11488,10.93455 25394,Gehren,3015,TH,82,DE,50.64852,11.00471 25397,Geisa,3015,TH,82,DE,50.71465,9.95075 25406,Geisleden,3015,TH,82,DE,51.35,10.2 25409,Geismar,3015,TH,82,DE,51.23169,10.16548 25431,Georgenthal,3015,TH,82,DE,50.83205,10.66266 25434,Gera,3015,TH,82,DE,50.88029,12.08187 25435,Geraberg,3015,TH,82,DE,50.71594,10.83737 25448,Gernrode,3015,TH,82,DE,51.4,10.4 25464,Gerstungen,3015,TH,82,DE,50.96667,10.06667 25469,Geschwenda,3015,TH,82,DE,50.73178,10.8254 25511,Gleichamberg,3015,TH,82,DE,50.37068,10.59822 25529,Goldbach,3015,TH,82,DE,51.04566,11.43289 25783,Görsbach,3015,TH,82,DE,51.46224,10.93706 25789,Gößnitz,3015,TH,82,DE,50.88902,12.43292 25554,Goßwitz,3015,TH,82,DE,50.63536,11.47737 25549,Gotha,3015,TH,82,DE,50.94823,10.70193 25561,Grabsleben,3015,TH,82,DE,50.93633,10.83508 25723,Gräfenhain,3015,TH,82,DE,50.81667,10.7 25725,Gräfenroda,3015,TH,82,DE,50.74781,10.81063 25595,Greiz,3015,TH,82,DE,50.65778,12.19918 25602,Greußen,3015,TH,82,DE,51.22964,10.94422 25652,Großbartloff,3015,TH,82,DE,51.25,10.21667 25655,Großbodungen,3015,TH,82,DE,51.47572,10.48104 25658,Großbreitenbach,3015,TH,82,DE,50.58335,11.00955 25662,Großenehrich,3015,TH,82,DE,51.24838,10.83458 25663,Großengottern,3015,TH,82,DE,51.14821,10.56232 25669,Großenstein,3015,TH,82,DE,50.9,12.2 25692,Großmonra,3015,TH,82,DE,51.21299,11.29578 25702,Großrudestedt,3015,TH,82,DE,51.09305,11.09977 25835,Haina,3015,TH,82,DE,50.98971,10.51774 25963,Haßleben,3015,TH,82,DE,51.10878,10.99637 25993,Heilbad Heiligenstadt,3015,TH,82,DE,51.37819,10.13744 26021,Heldrungen,3015,TH,82,DE,51.30208,11.21816 26027,Hellingen,3015,TH,82,DE,50.25,10.68333 26061,Herbsleben,3015,TH,82,DE,51.11667,10.83333 26071,Heringen,3015,TH,82,DE,51.44705,10.87612 26079,Hermsdorf,3015,TH,82,DE,50.89694,11.85549 26093,Herschdorf,3015,TH,82,DE,50.71168,11.53736 26126,Heyerode,3015,TH,82,DE,51.16439,10.32009 26134,Hildburghausen,3015,TH,82,DE,50.42553,10.73184 26209,Hohenleuben,3015,TH,82,DE,50.71128,12.05427 26320,Hörselgau,3015,TH,82,DE,50.91988,10.58444 26286,Hundeshagen,3015,TH,82,DE,51.43333,10.28333 26348,Ichtershausen,3015,TH,82,DE,50.87602,10.97028 26354,Ifta,3015,TH,82,DE,51.06667,10.18333 26365,Ilfeld,3015,TH,82,DE,51.5757,10.78469 26372,Ilmenau,3015,TH,82,DE,50.68322,10.91858 26379,Immelborn,3015,TH,82,DE,50.79229,10.27812 26390,Ingersleben,3015,TH,82,DE,50.92167,10.93646 26435,Jena,3015,TH,82,DE,50.92878,11.5899 26471,Jüchsen,3015,TH,82,DE,50.47993,10.50183 26459,Judenbach,3015,TH,82,DE,50.39591,11.22099 26480,Kahla,3015,TH,82,DE,50.80651,11.58516 26497,Kaltennordheim,3015,TH,82,DE,50.62649,10.15915 26498,Kaltenwestheim,3015,TH,82,DE,50.60991,10.11692 26504,Kamsdorf,3015,TH,82,DE,50.64312,11.45401 26507,Kannawurf,3015,TH,82,DE,51.26667,11.13333 26535,Katharinenberg,3015,TH,82,DE,51.18137,10.26084 26538,Katzhütte,3015,TH,82,DE,50.55191,11.05293 26546,Kaulsdorf,3015,TH,82,DE,50.6167,11.43295 26588,Kindelbrück,3015,TH,82,DE,51.26171,11.08999 26618,Kirchheim,3015,TH,82,DE,50.88333,11.01667 26638,Kirchworbis,3015,TH,82,DE,51.41122,10.39625 26671,Kleinfurra,3015,TH,82,DE,51.41556,10.76454 26681,Kleinwenden,3015,TH,82,DE,51.41611,10.65902 26682,Klettbach,3015,TH,82,DE,50.91667,11.15 26816,Kölleda,3015,TH,82,DE,51.18745,11.24488 26828,Königsee,3015,TH,82,DE,50.66143,11.09748 26840,Könitz,3015,TH,82,DE,50.64979,11.48809 26844,Körner,3015,TH,82,DE,51.23126,10.58878 26733,Kraftsdorf,3015,TH,82,DE,50.87574,11.92944 26740,Kranichfeld,3015,TH,82,DE,50.85446,11.20057 26743,Krauthausen,3015,TH,82,DE,51.01667,10.26667 26760,Kriebitzsch,3015,TH,82,DE,51.02347,12.33318 26782,Krölpa,3015,TH,82,DE,50.67743,11.53848 26766,Kromsdorf,3015,TH,82,DE,51.0,11.36667 26850,Kühndorf,3015,TH,82,DE,50.6086,10.4894 26852,Küllstedt,3015,TH,82,DE,51.27582,10.2804 26926,Langenorla,3015,TH,82,DE,50.74067,11.58023 26931,Langenwetzendorf,3015,TH,82,DE,50.67884,12.09407 26936,Langewiesen,3015,TH,82,DE,50.67252,10.97102 26943,Langula,3015,TH,82,DE,51.15001,10.4167 26962,Lauchröden,3015,TH,82,DE,50.99371,10.15694 26980,Lauscha,3015,TH,82,DE,50.47687,11.15962 27007,Lehesten,3015,TH,82,DE,50.98333,11.58333 27019,Leimbach,3015,TH,82,DE,50.81667,10.2 27023,Leinefelde-Worbis,3015,TH,82,DE,51.38796,10.3262 27066,Leutenberg,3015,TH,82,DE,50.56354,11.45619 27074,Lichte,3015,TH,82,DE,50.51667,11.18333 27188,Löbichau,3015,TH,82,DE,50.89383,12.26366 27159,Lucka,3015,TH,82,DE,51.09727,12.33336 27172,Luisenthal,3015,TH,82,DE,50.78333,10.73333 27229,Magdala,3015,TH,82,DE,50.90698,11.44801 27292,Marksuhl,3015,TH,82,DE,50.91667,10.2 27339,Masserberg,3015,TH,82,DE,50.51981,10.97087 27355,Mechterstädt,3015,TH,82,DE,50.94201,10.5238 27383,Meiningen,3015,TH,82,DE,50.56787,10.41521 27394,Mellenbach-Glasbach,3015,TH,82,DE,50.61667,11.1 27395,Mellingen,3015,TH,82,DE,50.94123,11.3964 27408,Mengersgereuth-Hämmern,3015,TH,82,DE,50.3973,11.11649 27412,Menteroda,3015,TH,82,DE,51.30763,10.56323 27446,Meuselbach,3015,TH,82,DE,50.57152,11.09143 27447,Meuselwitz,3015,TH,82,DE,51.04315,12.29935 27464,Mihla,3015,TH,82,DE,51.07617,10.33175 27470,Milz,3015,TH,82,DE,50.3776,10.53757 27501,Mohlsdorf,3015,TH,82,DE,50.66974,12.26519 27506,Molschleben,3015,TH,82,DE,51.0,10.78333 27569,Mönchenholzhausen,3015,TH,82,DE,50.96667,11.15 27596,Mühlhausen,3015,TH,82,DE,51.20896,10.45275 27611,Münchenbernsdorf,3015,TH,82,DE,50.82114,11.93226 27712,Neudietendorf,3015,TH,82,DE,50.9125,10.91346 27739,Neuhaus,3015,TH,82,DE,50.68333,10.93333 27741,Neuhaus am Rennweg,3015,TH,82,DE,50.51006,11.13787 27744,Neuhaus-Schierschnitz,3015,TH,82,DE,50.31237,11.24019 27798,Neustadt am Rennsteig,3015,TH,82,DE,50.58333,10.93333 27802,Neustadt an der Orla,3015,TH,82,DE,50.7364,11.74619 27839,Niederdorla,3015,TH,82,DE,51.16025,10.4482 27866,Niederorschel,3015,TH,82,DE,51.37222,10.42372 27869,Niederroßla,3015,TH,82,DE,51.03333,11.48333 27870,Niedersachswerfen,3015,TH,82,DE,51.55062,10.76594 27886,Niederzimmern,3015,TH,82,DE,51.00476,11.19028 27945,Nöbdenitz,3015,TH,82,DE,50.86667,12.28333 27906,Nobitz,3015,TH,82,DE,50.97621,12.48605 27908,Nohra,3015,TH,82,DE,50.96136,11.25971 27919,Nordhausen,3015,TH,82,DE,51.5018,10.7957 27974,Oberdorla,3015,TH,82,DE,51.16585,10.42163 27987,Oberhof,3015,TH,82,DE,50.70435,10.72716 27996,Obermaßfeld-Grimmenthal,3015,TH,82,DE,50.52898,10.43963 27997,Obermehler,3015,TH,82,DE,51.26996,10.59754 28053,Oberweißbach,3015,TH,82,DE,50.58231,11.14382 28110,Oldisleben,3015,TH,82,DE,51.30975,11.17112 28122,Oppurg,3015,TH,82,DE,50.71065,11.65289 28126,Orlamünde,3015,TH,82,DE,50.77486,11.51929 28207,Oßmanstedt,3015,TH,82,DE,51.01815,11.42746 28221,Pappenheim,3015,TH,82,DE,50.79631,10.47489 28318,Plaue,3015,TH,82,DE,50.77835,10.89969 28417,Pölzig,3015,TH,82,DE,50.95,12.2 28350,Ponitz,3015,TH,82,DE,50.85762,12.42309 28420,Pößneck,3015,TH,82,DE,50.69358,11.59229 28394,Probstzella,3015,TH,82,DE,50.53333,11.38333 28472,Ranis,3015,TH,82,DE,50.66132,11.56912 28481,Rastenberg,3015,TH,82,DE,51.17496,11.42029 28575,Remptendorf,3015,TH,82,DE,50.53333,11.65 28652,Riethnordhausen,3015,TH,82,DE,51.08333,11.0 28662,Ringleben,3015,TH,82,DE,51.36667,11.21667 28688,Rohr,3015,TH,82,DE,50.57644,10.49725 28785,Römhild,3015,TH,82,DE,50.39639,10.53889 28698,Ronneburg,3015,TH,82,DE,50.8634,12.18666 28711,Rositz,3015,TH,82,DE,51.01728,12.36354 28745,Roßleben,3015,TH,82,DE,51.29886,11.43435 28728,Rothenstein,3015,TH,82,DE,50.85,11.6 28732,Rottenbach,3015,TH,82,DE,50.68782,11.16674 28752,Rudolstadt,3015,TH,82,DE,50.72043,11.34046 28755,Ruhla,3015,TH,82,DE,50.89296,10.36573 28814,Saalfeld,3015,TH,82,DE,50.64826,11.36536 28815,Saara,3015,TH,82,DE,50.93284,12.42096 28865,Sankt Gangloff,3015,TH,82,DE,50.85522,11.89446 28873,Sankt Kilian,3015,TH,82,DE,50.52749,10.76301 28906,Schalkau,3015,TH,82,DE,50.39536,11.00732 28934,Schernberg,3015,TH,82,DE,51.32774,10.76928 28957,Schkölen,3015,TH,82,DE,51.04166,11.82141 28968,Schleid,3015,TH,82,DE,50.7,9.96667 28971,Schleiz,3015,TH,82,DE,50.57866,11.81024 28974,Schleusingen,3015,TH,82,DE,50.51076,10.75658 28982,Schloßvippach,3015,TH,82,DE,51.10499,11.14512 28981,Schlotheim,3015,TH,82,DE,51.24643,10.65842 28987,Schmalkalden,3015,TH,82,DE,50.72136,10.44386 28995,Schmiedefeld,3015,TH,82,DE,50.53333,11.21667 28996,Schmiedefeld am Rennsteig,3015,TH,82,DE,50.60863,10.81284 28999,Schmölln,3015,TH,82,DE,50.89678,12.35339 29130,Schönstedt,3015,TH,82,DE,51.12,10.57743 29052,Schwallungen,3015,TH,82,DE,50.6926,10.35706 29064,Schwarza,3015,TH,82,DE,50.85386,11.32433 29082,Schweina,3015,TH,82,DE,50.82502,10.33788 29142,Seebach,3015,TH,82,DE,51.16506,10.51428 29146,Seebergen,3015,TH,82,DE,50.92077,10.7992 29158,Seelingstädt,3015,TH,82,DE,50.77266,12.24361 29252,Sitzendorf,3015,TH,82,DE,50.63182,11.17215 29259,Sollstedt,3015,TH,82,DE,51.30976,10.4881 29494,Sömmerda,3015,TH,82,DE,51.15914,11.11524 29268,Sondershausen,3015,TH,82,DE,51.36973,10.87011 29270,Sonneberg,3015,TH,82,DE,50.3592,11.17463 29271,Sonneborn,3015,TH,82,DE,50.9927,10.59173 29322,Stadtilm,3015,TH,82,DE,50.77596,11.08262 29325,Stadtlengsfeld,3015,TH,82,DE,50.78329,10.12918 29330,Stadtroda,3015,TH,82,DE,50.85684,11.72677 29361,Steinach,3015,TH,82,DE,50.43129,11.15909 29363,Steinbach,3015,TH,82,DE,50.83321,10.36393 29366,Steinbach-Hallenberg,3015,TH,82,DE,50.69624,10.56541 29378,Steinheid,3015,TH,82,DE,50.46538,11.08265 29431,Straußfurt,3015,TH,82,DE,51.16667,10.98333 29457,Stützerbach,3015,TH,82,DE,50.63333,10.86667 29462,Suhl,3015,TH,82,DE,50.60911,10.69401 29510,Tabarz,3015,TH,82,DE,50.87529,10.51607 29515,Tambach-Dietharz,3015,TH,82,DE,50.79245,10.61568 29522,Tanna,3015,TH,82,DE,50.4946,11.85725 29540,Tautenhain,3015,TH,82,DE,50.9247,11.91945 29547,Teichwolframsdorf,3015,TH,82,DE,50.72093,12.24689 29551,Teistungen,3015,TH,82,DE,51.46667,10.26667 29574,Thal,3015,TH,82,DE,50.91684,10.39209 29590,Themar,3015,TH,82,DE,50.50465,10.61536 29611,Tiefenort,3015,TH,82,DE,50.83946,10.16604 29656,Treffurt,3015,TH,82,DE,51.13691,10.23361 29667,Triebes,3015,TH,82,DE,50.68489,12.02042 29673,Triptis,3015,TH,82,DE,50.73567,11.87015 29685,Trusetal,3015,TH,82,DE,50.78333,10.41667 29717,Uder,3015,TH,82,DE,51.36243,10.0721 29753,Unterbreizbach,3015,TH,82,DE,50.81667,9.98333 29769,Untermaßfeld,3015,TH,82,DE,50.53333,10.41667 29782,Unterwellenborn,3015,TH,82,DE,50.65,11.43333 29789,Urbach,3015,TH,82,DE,51.29468,10.6054 29801,Uthleben,3015,TH,82,DE,51.44912,10.838 29807,Vacha,3015,TH,82,DE,50.8279,10.02185 29820,Veilsdorf,3015,TH,82,DE,50.40876,10.80947 29847,Viernau,3015,TH,82,DE,50.66225,10.55778 29871,Voigtstedt,3015,TH,82,DE,51.39169,11.30888 29891,Völkershausen,3015,TH,82,DE,50.8,10.05 29971,Walldorf,3015,TH,82,DE,50.61667,10.38333 29991,Walschleben,3015,TH,82,DE,51.06667,10.93333 29995,Waltershausen,3015,TH,82,DE,50.89827,10.55791 29997,Wandersleben,3015,TH,82,DE,50.89946,10.84959 30038,Wasungen,3015,TH,82,DE,50.6619,10.36947 30068,Weida,3015,TH,82,DE,50.77449,12.06028 30096,Weimar,3015,TH,82,DE,50.9803,11.32903 30125,Weißenborn,3015,TH,82,DE,50.92393,11.87947 30127,Weißenborn-Lüderode,3015,TH,82,DE,51.5319,10.41889 30135,Weißensee,3015,TH,82,DE,51.19989,11.06914 30185,Wernshausen,3015,TH,82,DE,50.72404,10.35086 30245,Wiehe,3015,TH,82,DE,51.26586,11.41282 30319,Windischleuba,3015,TH,82,DE,51.01556,12.46914 30321,Wingerode,3015,TH,82,DE,51.39032,10.23954 30335,Wintersdorf,3015,TH,82,DE,51.0532,12.35445 30338,Wipperdorf,3015,TH,82,DE,51.4556,10.64388 30356,Witterda,3015,TH,82,DE,51.03615,10.89028 30440,Wölfis,3015,TH,82,DE,50.80825,10.77905 30392,Wolkramshausen,3015,TH,82,DE,51.42185,10.73815 30404,Worbis,3015,TH,82,DE,51.41997,10.3633 30457,Wünschendorf,3015,TH,82,DE,50.79662,12.09824 30425,Wurzbach,3015,TH,82,DE,50.46357,11.53779 30489,Zella-Mehlis,3015,TH,82,DE,50.65642,10.66046 30498,Zeulenroda,3015,TH,82,DE,50.65278,11.98377 52399,Acharnés,2122,I,85,GR,38.08333,23.73333 52402,Aegina,2122,I,85,GR,37.74667,23.4275 52403,Afidnés,2122,I,85,GR,38.20332,23.83982 52406,Aghios Panteleímon,2122,I,85,GR,38.11643,23.98182 52420,Agía Marína,2122,I,85,GR,37.82036,23.84424 52421,Agía Paraskeví,2122,I,85,GR,38.01667,23.83333 52426,Agía Varvára,2122,I,85,GR,37.98938,23.66011 53370,Ágioi Anárgyroi,2122,I,85,GR,38.03013,23.72379 52407,Agios Dimitrios,2122,I,85,GR,37.93333,23.73333 52408,Agios Dimítrios Kropiás,2122,I,85,GR,37.80612,23.85793 52410,Agios Ioannis Rentis,2122,I,85,GR,37.96491,23.66511 53385,Ágios Stéfanos,2122,I,85,GR,38.14657,23.85608 52433,Aiánteio,2122,I,85,GR,37.92135,23.45877 52430,Aigáleo,2122,I,85,GR,37.98333,23.68333 53387,Álimos,2122,I,85,GR,37.91033,23.72361 52454,Ampelákia,2122,I,85,GR,37.95055,23.52803 52478,Anávyssos,2122,I,85,GR,37.73414,23.94389 53394,Áno Liósia,2122,I,85,GR,38.08333,23.7 52468,Anoixi,2122,I,85,GR,38.13267,23.85874 52470,Anthoúsa,2122,I,85,GR,38.02544,23.87617 52487,Argithéa,2122,I,85,GR,37.97506,23.88556 52490,Argyroúpoli,2122,I,85,GR,37.90594,23.75035 52500,Artémida,2122,I,85,GR,37.96727,23.99684 52508,Asprópyrgos,2122,I,85,GR,38.06134,23.58971 52515,Athens,2122,I,85,GR,37.98376,23.72784 52518,Avlónas,2122,I,85,GR,38.25149,23.69554 53409,Áyioi Apóstoloi,2122,I,85,GR,38.29169,23.91011 52532,Chaïdári,2122,I,85,GR,38.01135,23.66597 52534,Cholargós,2122,I,85,GR,38.0,23.8 52549,Dhafní,2122,I,85,GR,37.95002,23.73437 52552,Dhráfi,2122,I,85,GR,38.02375,23.90788 52557,Dióni,2122,I,85,GR,38.02328,23.93286 52558,Diónysos,2122,I,85,GR,38.10458,23.87938 52561,Drapetsóna,2122,I,85,GR,37.94988,23.62309 52563,Drosiá,2122,I,85,GR,38.11977,23.86428 52575,Ekáli,2122,I,85,GR,38.11035,23.83505 52577,Elefsína,2122,I,85,GR,38.04135,23.54295 52581,Ellinikó,2122,I,85,GR,37.89013,23.74406 52591,Erythrés,2122,I,85,GR,38.21741,23.32234 52604,Filothéi,2122,I,85,GR,38.02524,23.78257 52613,Fylí,2122,I,85,GR,38.10235,23.66901 52624,Galatás,2122,I,85,GR,37.49618,23.44886 52627,Galátsi,2122,I,85,GR,38.01667,23.75 52653,Gérakas,2122,I,85,GR,38.02277,23.8576 52638,Glyfáda,2122,I,85,GR,37.86289,23.75802 52644,Grammatikó,2122,I,85,GR,38.20251,23.96504 53421,Ílion,2122,I,85,GR,38.03333,23.7 52662,Ilioúpoli,2122,I,85,GR,37.93149,23.76779 52665,Irákleio,2122,I,85,GR,38.05282,23.76523 52674,Kaisarianí,2122,I,85,GR,37.9634,23.76523 52802,Kálamos,2122,I,85,GR,38.28447,23.86308 52681,Kallithéa,2122,I,85,GR,37.95,23.7 52695,Kalývia Thorikoú,2122,I,85,GR,37.83894,23.92505 52697,Kamaterón,2122,I,85,GR,38.05586,23.70515 52705,Kapandríti,2122,I,85,GR,38.21579,23.87938 52714,Karellás,2122,I,85,GR,37.93445,23.86484 52817,Káto Soúlion,2122,I,85,GR,38.16803,24.01628 52742,Keratéa,2122,I,85,GR,37.80585,23.9774 52741,Keratsíni,2122,I,85,GR,37.9625,23.61972 52744,Khalándrion,2122,I,85,GR,38.02369,23.80068 52743,Khalkoútsion,2122,I,85,GR,38.33263,23.73188 52746,Kifisiá,2122,I,85,GR,38.07438,23.81106 52749,Kinéta,2122,I,85,GR,37.96843,23.21351 52750,Kipséli,2122,I,85,GR,38.00288,23.73755 52824,Kítsi,2122,I,85,GR,37.85181,23.84068 52769,Koropí,2122,I,85,GR,37.89886,23.87181 52770,Korydallós,2122,I,85,GR,37.98468,23.64711 52779,Kouvarás,2122,I,85,GR,37.82711,23.96715 52790,Kryonéri,2122,I,85,GR,38.13712,23.83055 52799,Kypséli,2122,I,85,GR,37.76021,23.45448 52830,Kýthira,2122,I,85,GR,36.14955,22.98979 52877,Lávrio,2122,I,85,GR,37.71445,24.05647 52844,Leondárion,2122,I,85,GR,37.987,23.85518 52856,Limín Mesoyaías,2122,I,85,GR,37.89108,24.00307 52871,Lykóvrysi,2122,I,85,GR,38.06933,23.78223 52885,Magoúla,2122,I,85,GR,38.07989,23.52108 52955,Mándra,2122,I,85,GR,38.06667,23.5 52898,Marathónas,2122,I,85,GR,38.15317,23.96278 52899,Markópoulo,2122,I,85,GR,37.88333,23.93333 52900,Markópoulo Oropoú,2122,I,85,GR,38.2898,23.82475 52902,Maroúsi,2122,I,85,GR,38.05,23.8 52911,Megalochóri,2122,I,85,GR,37.71051,23.34659 52956,Mégara,2122,I,85,GR,37.99471,23.34324 52922,Melíssia,2122,I,85,GR,38.05,23.83333 52931,Metamórfosi,2122,I,85,GR,38.06576,23.76356 52943,Moskháton,2122,I,85,GR,37.94789,23.6788 53004,Néa Chalkidóna,2122,I,85,GR,38.0271,23.73051 53005,Néa Erythraía,2122,I,85,GR,38.0927,23.82223 53006,Néa Filadélfeia,2122,I,85,GR,38.03491,23.73811 53009,Néa Ionía,2122,I,85,GR,38.0357,23.75733 53022,Néa Mákri,2122,I,85,GR,38.08733,23.97642 53024,Néa Palátia,2122,I,85,GR,38.31942,23.79649 53025,Néa Pentéli,2122,I,85,GR,38.06059,23.85926 53030,Néa Péramos,2122,I,85,GR,38.00647,23.42348 53034,Néa Smýrni,2122,I,85,GR,37.94504,23.71416 53045,Néo Psychikó,2122,I,85,GR,38.00624,23.78373 52970,Neos Voutzás,2122,I,85,GR,38.04312,23.97749 53054,Níkaia,2122,I,85,GR,37.96667,23.65 53065,Oropós,2122,I,85,GR,38.30326,23.75549 53070,Paianía,2122,I,85,GR,37.95527,23.85443 53076,Palaiá Fókaia,2122,I,85,GR,37.71998,23.94792 53077,Palaió Fáliro,2122,I,85,GR,37.92812,23.70105 53084,Pallíni,2122,I,85,GR,38.00514,23.88302 53089,Papágou,2122,I,85,GR,37.98642,23.79347 53171,Péfki,2122,I,85,GR,38.06019,23.79264 53107,Pentéli,2122,I,85,GR,38.05,23.86667 53175,Pérama,2122,I,85,GR,37.96775,23.5721 53112,Peristéri,2122,I,85,GR,38.01539,23.69187 53119,Petroúpolis,2122,I,85,GR,38.04187,23.68494 53122,Pikérmi,2122,I,85,GR,38.00161,23.94075 53123,Piraeus,2122,I,85,GR,37.94203,23.64619 53132,Polydéndri,2122,I,85,GR,38.216,23.86806 53180,Póros,2122,I,85,GR,37.49944,23.45361 53155,Psychikó,2122,I,85,GR,38.01324,23.77223 53186,Rafína,2122,I,85,GR,38.01812,24.00599 53197,Rodópoli,2122,I,85,GR,38.11669,23.87572 53204,Salamína,2122,I,85,GR,37.96427,23.49649 53207,Saronída,2122,I,85,GR,37.74809,23.91059 53211,Selínia,2122,I,85,GR,37.9332,23.53147 53226,Skála Oropoú,2122,I,85,GR,38.31964,23.78763 53220,Skarmagkás,2122,I,85,GR,38.01133,23.60303 53242,Spáta,2122,I,85,GR,37.96163,23.91514 53243,Spétses,2122,I,85,GR,37.26191,23.15943 53245,Stamáta,2122,I,85,GR,38.12546,23.88038 53300,Távros,2122,I,85,GR,37.97064,23.69043 53280,Thrakomakedónes,2122,I,85,GR,38.12964,23.75751 53340,Vári,2122,I,85,GR,37.8332,23.80311 53308,Varnávas,2122,I,85,GR,38.22358,23.92307 53311,Varybóbi,2122,I,85,GR,38.12723,23.78729 53316,Vathý,2122,I,85,GR,37.7642,23.48011 53344,Vília,2122,I,85,GR,38.16716,23.33659 53325,Vlycháda,2122,I,85,GR,38.02734,23.43663 53331,Voúla,2122,I,85,GR,37.84221,23.77651 53329,Vouliagméni,2122,I,85,GR,37.81423,23.77892 53334,Vraná,2122,I,85,GR,38.12497,23.95198 53335,Vrilissia,2122,I,85,GR,38.03381,23.82962 53347,Výronas,2122,I,85,GR,37.96105,23.753 53424,Ýdra,2122,I,85,GR,37.34976,23.4656 53355,Ymittos,2122,I,85,GR,37.95342,23.74897 53360,Zefyri,2122,I,85,GR,38.06647,23.71701 53363,Zográfos,2122,I,85,GR,37.97574,23.76911 52404,Afrátion,2128,H,85,GR,38.45212,23.68775 52423,Agía Triáda,2128,H,85,GR,38.35505,22.90881 53376,Ágios Geórgios,2128,H,85,GR,38.39343,22.93189 52429,Aidipsós,2128,H,85,GR,38.87924,23.04691 52434,Akraifnía,2128,H,85,GR,38.45663,23.22093 52446,Alíartos,2128,H,85,GR,38.36667,23.1 52444,Alivéri,2128,H,85,GR,38.41667,24.03333 52457,Amárynthos,2128,H,85,GR,38.393,23.88492 52450,Amfíkleia,2128,H,85,GR,38.63912,22.59171 53389,Ámfissa,2128,H,85,GR,38.52813,22.37713 52471,Anthíli,2128,H,85,GR,38.85,22.47906 52472,Antikyra,2128,H,85,GR,38.38333,22.63333 52501,Aráchova,2128,H,85,GR,38.47958,22.5835 53401,Árma,2128,H,85,GR,38.35121,23.48599 52504,Asopía,2128,H,85,GR,38.29882,23.50189 52514,Atalánti,2128,H,85,GR,38.65111,22.99917 53412,Áyios Konstandínos,2128,H,85,GR,38.75612,22.85757 53413,Áyios Nikólaos,2128,H,85,GR,38.42051,23.64772 53414,Áyios Thomás,2128,H,85,GR,38.27717,23.58906 52524,Chairóneia,2128,H,85,GR,38.49551,22.84424 52528,Chalkída,2128,H,85,GR,38.46354,23.60284 52547,Delphi,2128,H,85,GR,38.47942,22.49357 52551,Dhrosiá,2128,H,85,GR,38.48413,23.54774 52568,Dílesi,2128,H,85,GR,38.33762,23.67077 52570,Dístomo,2128,H,85,GR,38.42892,22.66728 52559,Domokós,2128,H,85,GR,39.12722,22.30028 52560,Domvraína,2128,H,85,GR,38.253,22.98211 52583,Eláteia,2128,H,85,GR,38.6277,22.76492 52593,Erétria,2128,H,85,GR,38.40097,23.8022 52615,Fáros,2128,H,85,GR,38.39959,23.62275 52619,Fílla,2128,H,85,GR,38.44177,23.68306 52625,Galaxídhion,2128,H,85,GR,38.38067,22.38001 52668,Istiaía,2128,H,85,GR,38.9552,23.1521 52671,Itéa,2128,H,85,GR,38.43201,22.42443 52673,Kainoúryion,2128,H,85,GR,38.79283,22.7247 52700,Kaména Voúrla,2128,H,85,GR,38.77844,22.78573 52706,Kaparéllion,2128,H,85,GR,38.23697,23.21411 52716,Karpenísi,2128,H,85,GR,38.91218,21.79836 52804,Kárystos,2128,H,85,GR,38.01333,24.41611 52727,Kastélla,2128,H,85,GR,38.57048,23.63131 52818,Káto Tithoréa,2128,H,85,GR,38.60751,22.71348 52740,Kerasochóri,2128,H,85,GR,39.00556,21.63778 52821,Kírra,2128,H,85,GR,38.42944,22.44443 52827,Kými,2128,H,85,GR,38.63477,24.10287 52800,Kyriáki,2128,H,85,GR,38.35365,22.78841 52837,Lamía,2128,H,85,GR,38.9,22.43333 52849,Lianokládhion,2128,H,85,GR,38.91655,22.30336 52851,Lidoríki,2128,H,85,GR,38.52389,22.19972 52880,Límni,2128,H,85,GR,38.76667,23.31667 52860,Livadeiá,2128,H,85,GR,38.43616,22.87665 52862,Livanátes,2128,H,85,GR,38.711,23.0503 52864,Loukísia,2128,H,85,GR,38.47946,23.44796 52865,Loutrá Aidhipsoú,2128,H,85,GR,38.85695,23.04739 52883,Magoúla,2128,H,85,GR,38.41178,23.82128 52887,Makrakómi,2128,H,85,GR,38.9415,22.11535 52892,Malakónta,2128,H,85,GR,38.4,23.76667 52893,Malesína,2128,H,85,GR,38.62225,23.2337 52897,Mantoúdi,2128,H,85,GR,38.79808,23.47967 52901,Marmárion,2128,H,85,GR,38.04839,24.32039 52903,Martínon,2128,H,85,GR,38.56817,23.21458 52958,Mólos,2128,H,85,GR,38.80998,22.64544 52952,Mytikas,2128,H,85,GR,38.44373,23.65365 53003,Néa Artáki,2128,H,85,GR,38.52027,23.63296 53016,Néa Lámpsakos,2128,H,85,GR,38.43729,23.62824 53035,Néa Stíra,2128,H,85,GR,38.17935,24.20842 53049,Néon Monastírion,2128,H,85,GR,39.23988,22.27465 52982,Nomós Evrytanías,2128,H,85,GR,39.0,21.66667 52983,Nomós Fokídos,2128,H,85,GR,38.5,22.25 53057,Oinófyta,2128,H,85,GR,38.31163,23.64 53058,Omvriakí,2128,H,85,GR,39.10118,22.27106 53060,Orchomenós,2128,H,85,GR,38.4929,22.97962 53061,Oreoí,2128,H,85,GR,38.95034,23.09191 53068,Oxílithos,2128,H,85,GR,38.57988,24.11184 53092,Paralía Avlídhos,2128,H,85,GR,38.38002,23.62842 53103,Pelasgía,2128,H,85,GR,38.94813,22.8398 53129,Pláka Dílesi,2128,H,85,GR,38.3495,23.65056 53131,Politiká,2128,H,85,GR,38.59673,23.54457 53144,Prokópi,2128,H,85,GR,38.73402,23.4906 53154,Psachná,2128,H,85,GR,38.57852,23.64326 53193,Rodhítsa,2128,H,85,GR,38.88829,22.4641 53198,Roviés,2128,H,85,GR,38.80971,23.23073 53209,Schimatári,2128,H,85,GR,38.35,23.58333 53229,Skýros,2128,H,85,GR,38.90417,24.56306 53239,Spercheiáda,2128,H,85,GR,38.90656,22.12792 53249,Stavrós,2128,H,85,GR,38.89641,22.37082 53252,Steíri,2128,H,85,GR,38.40831,22.71162 53255,Stylída,2128,H,85,GR,38.91667,22.61667 53276,Thespiés,2128,H,85,GR,38.303,23.15016 53285,Thívai,2128,H,85,GR,38.325,23.31889 53338,Vágia,2128,H,85,GR,38.31748,23.17752 53314,Vasilikón,2128,H,85,GR,38.42586,23.67189 53315,Vathí,2128,H,85,GR,38.4049,23.60332 53354,Yimnón,2128,H,85,GR,38.44048,23.884 53367,Ádendro,2125,B,85,GR,40.67131,22.60466 53368,Áfytos,2125,B,85,GR,40.09915,23.4367 52422,Agía Paraskeví,2125,B,85,GR,40.4815,23.04863 52425,Agía Triáda,2125,B,85,GR,40.50003,22.87351 53369,Ágio Pnévma,2125,B,85,GR,41.10142,23.67992 53374,Ágios Athanásios,2125,B,85,GR,40.71598,22.72841 53377,Ágios Geórgios,2125,B,85,GR,40.60215,22.1943 53378,Ágios Loukás,2125,B,85,GR,40.71799,22.29545 53381,Ágios Nikólaos,2125,B,85,GR,40.24926,23.69616 53382,Ágios Pávlos,2125,B,85,GR,40.64075,22.96039 53383,Ágios Pétros,2125,B,85,GR,40.86725,22.58298 53384,Ágios Spyrídon,2125,B,85,GR,40.20778,22.44311 53386,Ágios Vasíleios,2125,B,85,GR,40.66424,23.11373 52411,Agkathiá,2125,B,85,GR,40.55535,22.47083 52431,Aigínio,2125,B,85,GR,40.50139,22.54 52436,Akrolímni,2125,B,85,GR,40.6802,22.2645 52441,Alexándreia,2125,B,85,GR,40.62667,22.44417 52443,Alistráti,2125,B,85,GR,41.06443,23.95751 52453,Ampeleíes,2125,B,85,GR,40.83417,22.38767 52455,Ampelókipoi,2125,B,85,GR,40.65304,22.92624 52461,Anatolikó,2125,B,85,GR,40.66152,22.7119 52465,Angelochóri,2125,B,85,GR,40.67862,22.19933 53397,Ápsalos,2125,B,85,GR,40.8924,22.05709 52481,Aravissós,2125,B,85,GR,40.84352,22.30178 52492,Aridaía,2125,B,85,GR,40.97306,22.05639 52496,Arnaía,2125,B,85,GR,40.48652,23.59537 53402,Árnissa,2125,B,85,GR,40.79555,21.83577 52498,Arsénio,2125,B,85,GR,40.71412,22.15923 52503,Askós,2125,B,85,GR,40.75105,23.38721 52506,Asproválta,2125,B,85,GR,40.73049,23.7118 53404,Ássiros,2125,B,85,GR,40.82143,23.03008 52511,Asvestochóri,2125,B,85,GR,40.64125,23.02528 53407,Áthyra,2125,B,85,GR,40.82615,22.59279 52519,Axioúpoli,2125,B,85,GR,40.98582,22.54165 52520,Axós,2125,B,85,GR,40.80223,22.36158 52529,Chalástra,2125,B,85,GR,40.62643,22.73291 52526,Chalkidóna,2125,B,85,GR,40.73184,22.59992 52531,Charopó,2125,B,85,GR,41.26031,23.37279 52536,Chortiátis,2125,B,85,GR,40.60954,23.10014 52540,Chrysó,2125,B,85,GR,41.05806,23.65108 52537,Chrysochórafa,2125,B,85,GR,41.18097,23.23551 52553,Diavatá,2125,B,85,GR,40.68744,22.85799 52554,Diavatós,2125,B,85,GR,40.54606,22.26686 52569,Díon,2125,B,85,GR,40.17169,22.48463 52562,Dravískos,2125,B,85,GR,40.92393,23.87119 52564,Drymós,2125,B,85,GR,40.78099,22.95889 53416,Édessa,2125,B,85,GR,40.8026,22.04751 52572,Efkarpía,2125,B,85,GR,40.68797,22.95348 52573,Eirinoúpoli,2125,B,85,GR,40.67806,22.19278 52586,Epanomí,2125,B,85,GR,40.42614,22.92782 52587,Episkopí,2125,B,85,GR,40.68748,22.1364 53419,Évosmos,2125,B,85,GR,40.67056,22.90833 52594,Evropós,2125,B,85,GR,40.89703,22.55277 52597,Exaplátanos,2125,B,85,GR,40.97643,22.12958 52618,Fíliro,2125,B,85,GR,40.69151,23.0046 52621,Galatádes,2125,B,85,GR,40.7559,22.28062 52626,Galátista,2125,B,85,GR,40.4682,23.28015 52649,Gázoros,2125,B,85,GR,41.02557,23.77574 52651,Géfyra,2125,B,85,GR,40.73253,22.69359 52634,Gerakaroú,2125,B,85,GR,40.62666,23.21566 52637,Giannitsá,2125,B,85,GR,40.79194,22.4075 52639,Gouménissa,2125,B,85,GR,40.94604,22.44974 52658,Ierissós,2125,B,85,GR,40.39748,23.87505 52664,Irákleia,2125,B,85,GR,41.18217,23.28243 52687,Kalá Déndra,2125,B,85,GR,41.09941,23.42396 52675,Kalamariá,2125,B,85,GR,40.5825,22.95028 52689,Kalí,2125,B,85,GR,40.81931,22.17761 52682,Kallithéa,2125,B,85,GR,40.07374,23.44637 52685,Kalochóri,2125,B,85,GR,40.64189,22.85734 52693,Kalýves Polygýrou,2125,B,85,GR,40.28659,23.39033 52694,Kalývia,2125,B,85,GR,40.75508,22.21753 52698,Kampánis,2125,B,85,GR,40.88951,22.91682 52711,Kardiá,2125,B,85,GR,40.46909,22.99378 52721,Karítsa,2125,B,85,GR,40.18745,22.48171 52719,Karyótissa,2125,B,85,GR,40.76915,22.31331 52722,Kassándreia,2125,B,85,GR,40.04835,23.41362 52730,Kateríni,2125,B,85,GR,40.26956,22.50608 52810,Káto Kamíla,2125,B,85,GR,41.02119,23.48336 52812,Káto Lipochóri,2125,B,85,GR,40.75754,22.17962 52814,Káto Miliá,2125,B,85,GR,40.25403,22.34342 52816,Káto Scholári,2125,B,85,GR,40.42906,23.02978 52734,Kavallári,2125,B,85,GR,40.71539,23.04588 52747,Kilkís,2125,B,85,GR,40.99302,22.87433 52823,Kítros,2125,B,85,GR,40.37399,22.57862 52752,Kleidí,2125,B,85,GR,40.56632,22.59033 52782,Koímisi,2125,B,85,GR,41.21282,23.30035 52758,Kolchikón,2125,B,85,GR,40.75662,23.13377 52759,Kolindrós,2125,B,85,GR,40.47888,22.48319 52764,Kontariótissa,2125,B,85,GR,40.22754,22.461 52767,Kopanós,2125,B,85,GR,40.63382,22.12893 52768,Korinós,2125,B,85,GR,40.31659,22.58817 52771,Koryfí,2125,B,85,GR,40.60286,22.50681 52775,Koufália,2125,B,85,GR,40.77778,22.57194 52776,Kouloúra,2125,B,85,GR,40.54652,22.31795 52786,Krithiá,2125,B,85,GR,40.84184,22.98292 52794,Krýa Vrýsi,2125,B,85,GR,40.68738,22.30516 52828,Kýmina,2125,B,85,GR,40.61354,22.69278 52832,Lagkadás,2125,B,85,GR,40.75,23.06667 52833,Lagyná,2125,B,85,GR,40.72351,23.0042 52872,Lákkoma,2125,B,85,GR,40.39139,23.05578 52843,Lefkónas,2125,B,85,GR,41.10029,23.49658 52847,Leptokaryá,2125,B,85,GR,40.06032,22.5612 52850,Lianovérgi,2125,B,85,GR,40.63526,22.5082 52858,Lití,2125,B,85,GR,40.74533,22.97982 52859,Litóchoro,2125,B,85,GR,40.10056,22.49778 52881,Lófos,2125,B,85,GR,40.24395,22.38033 52868,Loutráki,2125,B,85,GR,40.97116,21.94659 52869,Loutrós,2125,B,85,GR,40.58873,22.39976 52888,Makrochóri,2125,B,85,GR,40.55125,22.24955 52891,Makrýgialos,2125,B,85,GR,40.41551,22.60392 52954,Mándalo,2125,B,85,GR,40.85677,22.21264 52904,Marína,2125,B,85,GR,40.692,22.10099 52908,Mavrothálassa,2125,B,85,GR,40.89427,23.75048 52909,Mavrovoúni,2125,B,85,GR,40.78243,22.15629 52915,Megáli Panagía,2125,B,85,GR,40.44505,23.67999 52920,Melíki,2125,B,85,GR,40.51685,22.39599 52921,Melíssi,2125,B,85,GR,40.77406,22.35304 52919,Melissochóri,2125,B,85,GR,40.76796,22.92858 52924,Meneméni,2125,B,85,GR,40.65829,22.89712 52927,Mesiméri,2125,B,85,GR,40.41344,23.0075 52934,Mikró Monastíri,2125,B,85,GR,40.7043,22.54112 52937,Mitroúsi,2125,B,85,GR,41.07041,23.46064 52996,Náousa,2125,B,85,GR,40.62944,22.06806 53002,Néa Apollonía,2125,B,85,GR,40.62558,23.44074 53042,Néa Éfesos,2125,B,85,GR,40.22923,22.49811 53007,Néa Flogitá,2125,B,85,GR,40.26108,23.22107 53008,Néa Fókaia,2125,B,85,GR,40.13333,23.39754 53012,Néa Kallikráteia,2125,B,85,GR,40.31312,23.06343 53017,Néa Magnisía,2125,B,85,GR,40.68785,22.84582 53023,Néa Málgara,2125,B,85,GR,40.60985,22.68196 53019,Néa Mesimvría,2125,B,85,GR,40.75158,22.76904 53020,Néa Michanióna,2125,B,85,GR,40.46371,22.8617 53021,Néa Moudhaniá,2125,B,85,GR,40.2439,23.28484 53029,Néa Pélla,2125,B,85,GR,40.76516,22.49173 53026,Néa Plágia,2125,B,85,GR,40.26537,23.20376 53027,Néa Poteídaia,2125,B,85,GR,40.19409,23.32832 53028,Néa Potídhaia,2125,B,85,GR,40.19428,23.32874 53032,Néa Róda,2125,B,85,GR,40.38119,23.92374 53036,Néa Sánta,2125,B,85,GR,40.84084,22.92163 53037,Néa Tríglia,2125,B,85,GR,40.30575,23.2066 53039,Néa Vrasná,2125,B,85,GR,40.70592,23.6985 53041,Néa Zíchni,2125,B,85,GR,41.03204,23.8287 52961,Neapoli,2125,B,85,GR,40.6532,22.94156 53043,Néo Agionéri,2125,B,85,GR,40.80826,22.70733 53044,Néo Petrítsi,2125,B,85,GR,41.27459,23.29381 53046,Néo Rýsi,2125,B,85,GR,40.49605,22.98794 53047,Néo Soúli,2125,B,85,GR,41.09397,23.64376 52966,Neochóri,2125,B,85,GR,41.05231,23.57997 52963,Neochoroúda,2125,B,85,GR,40.73817,22.87557 53048,Néoi Epivátes,2125,B,85,GR,40.49863,22.91192 53050,Néos Marmarás,2125,B,85,GR,40.0961,23.78323 53051,Néos Mylótopos,2125,B,85,GR,40.81872,22.35489 53053,Néos Skopós,2125,B,85,GR,41.0239,23.60927 52975,Nigríta,2125,B,85,GR,40.90528,23.49944 53055,Níkiti,2125,B,85,GR,40.22204,23.66837 52977,Nisí,2125,B,85,GR,40.6361,22.38884 52981,Nomós Chalkidikís,2125,B,85,GR,40.41667,23.5 52990,Nomós Péllis,2125,B,85,GR,40.83333,22.25 52992,Nomós Thessaloníkis,2125,B,85,GR,40.66667,23.0 53423,Ólynthos,2125,B,85,GR,40.29147,23.34205 53059,Oraiókastro,2125,B,85,GR,40.73083,22.91722 53063,Ormýlia,2125,B,85,GR,40.29451,23.54332 53066,Ouranoupolis,2125,B,85,GR,40.33333,23.98333 53082,Palaífyto,2125,B,85,GR,40.78283,22.27388 53072,Palaiochóri,2125,B,85,GR,40.49186,23.64928 53073,Palaiokómi,2125,B,85,GR,40.87068,23.90121 53086,Panórama,2125,B,85,GR,40.58779,23.0315 53091,Paralía,2125,B,85,GR,40.2671,22.59615 53100,Patrída,2125,B,85,GR,40.56071,22.18545 53170,Péfka,2125,B,85,GR,40.65806,22.99378 53102,Pefkochóri,2125,B,85,GR,39.98784,23.61219 53172,Pélla,2125,B,85,GR,40.76169,22.52637 53106,Pentálofos,2125,B,85,GR,40.74296,22.85256 53105,Pentaplátano,2125,B,85,GR,40.81902,22.41903 53110,Peraía,2125,B,85,GR,40.49874,22.92617 53116,Perístasi,2125,B,85,GR,40.27443,22.54164 53111,Peristerá,2125,B,85,GR,40.54881,23.1654 53125,Plagiári,2125,B,85,GR,40.47276,22.9579 53128,Platý,2125,B,85,GR,40.64241,22.53458 53134,Políchni,2125,B,85,GR,40.66671,22.94881 53135,Polýgyros,2125,B,85,GR,40.37704,23.44135 53133,Polykárpi,2125,B,85,GR,40.92598,22.01634 53136,Polýkastro,2125,B,85,GR,40.99444,22.56909 53137,Pontisméno,2125,B,85,GR,41.20885,23.28325 53139,Portariá,2125,B,85,GR,40.28405,23.29549 53151,Próchoma,2125,B,85,GR,40.79826,22.66659 53143,Profítis Ilías,2125,B,85,GR,40.81373,22.16166 53152,Prómachoi,2125,B,85,GR,41.02517,22.00437 53153,Próti,2125,B,85,GR,40.94411,24.00118 53146,Provatás,2125,B,85,GR,41.06825,23.3903 53158,Pylaía,2125,B,85,GR,40.59918,22.98613 53188,Ritíni,2125,B,85,GR,40.28835,22.28361 53189,Rizári,2125,B,85,GR,40.78373,22.088 53190,Rizó,2125,B,85,GR,40.73331,22.13674 53191,Rizómata,2125,B,85,GR,40.35061,22.21079 53195,Rodolívos,2125,B,85,GR,40.92055,23.97489 53265,Sárti,2125,B,85,GR,40.09369,23.97859 53268,Sérres,2125,B,85,GR,41.08499,23.54757 53212,Sevastianá,2125,B,85,GR,40.76874,22.12346 53213,Sfendámi,2125,B,85,GR,40.41307,22.54677 53214,Sidirókastro,2125,B,85,GR,41.23499,23.38899 53270,Símantra,2125,B,85,GR,40.34563,23.31026 53271,Síndos,2125,B,85,GR,40.67045,22.80545 53222,Skotoússa,2125,B,85,GR,41.12844,23.38174 53223,Skoútari,2125,B,85,GR,41.01871,23.51971 53228,Skýdra,2125,B,85,GR,40.76722,22.15194 53231,Sochós,2125,B,85,GR,40.81788,23.35546 53234,Sosándra,2125,B,85,GR,40.99894,22.03254 53236,Sourotí,2125,B,85,GR,40.47274,23.09197 53246,Stathmós Mourión,2125,B,85,GR,41.26378,22.83855 53250,Stavrós,2125,B,85,GR,40.66498,23.70015 53247,Stavroúpoli,2125,B,85,GR,40.66944,22.93806 53253,Stratónion,2125,B,85,GR,40.51406,23.82471 53254,Strymonikó,2125,B,85,GR,41.04144,23.31487 53257,Svorónos,2125,B,85,GR,40.26805,22.46366 53259,Sykiá,2125,B,85,GR,40.03874,23.94046 53260,Sykiés,2125,B,85,GR,40.64944,22.95083 53275,Terpní,2125,B,85,GR,40.91643,23.48137 53283,Thérmi,2125,B,85,GR,40.54712,23.01967 53278,Thessaloníki,2125,B,85,GR,40.64361,22.93086 53289,Triandría,2125,B,85,GR,40.615,22.9762 53290,Tríkala,2125,B,85,GR,40.59814,22.55733 53293,Trílofos,2125,B,85,GR,40.46898,22.9718 53305,Valteró,2125,B,85,GR,41.17927,23.32022 53306,Vamvakófyto,2125,B,85,GR,41.17916,23.39602 53312,Vasiliká,2125,B,85,GR,40.47966,23.13695 53317,Vathýlakkos,2125,B,85,GR,40.76942,22.7088 53320,Vergína,2125,B,85,GR,40.48654,22.31735 53343,Véroia,2125,B,85,GR,40.52437,22.20242 53336,Vrontoú,2125,B,85,GR,40.19356,22.43203 53348,Xilópolis,2125,B,85,GR,40.92713,23.17944 52599,Farkadóna,2124,22,85,GR,39.6,22.06667 52617,Fíki,2124,22,85,GR,39.51602,21.65556 52655,Gómfoi,2124,22,85,GR,39.46413,21.69342 52647,Grizáno,2124,22,85,GR,39.63192,22.05258 52678,Kalampáka,2124,22,85,GR,39.70444,21.62694 52725,Kastráki,2124,22,85,GR,39.71692,21.61865 52913,Megála Kalývia,2124,22,85,GR,39.49693,21.78802 52910,Megalochóri,2124,22,85,GR,39.55982,21.84195 53056,Oichalía,2124,22,85,GR,39.60827,21.97996 53074,Palaiomonástiro,2124,22,85,GR,39.46269,21.65793 53080,Palaiópyrgos,2124,22,85,GR,39.60845,21.8172 53121,Pigí,2124,22,85,GR,39.51061,21.70103 53182,Pýli,2124,22,85,GR,39.45806,21.61889 53160,Pyrgetós,2124,22,85,GR,39.55276,21.74846 53202,Rízoma,2124,22,85,GR,39.66432,21.73541 53274,Taxiárches,2124,22,85,GR,39.57565,21.89245 53291,Tríkala,2124,22,85,GR,39.55493,21.76837 53313,Vasilikí,2124,22,85,GR,39.63984,21.70448 53366,Zárkos,2124,22,85,GR,39.6086,22.12336 52415,Agía Foteiní,2109,M,85,GR,35.25459,24.63495 52416,Agía Galíni,2109,M,85,GR,35.09707,24.68818 52418,Agía Marína,2109,M,85,GR,35.51778,23.92675 52427,Agía Varvára,2109,M,85,GR,35.13715,25.00131 53371,Ágioi Déka,2109,M,85,GR,35.06667,24.96667 53380,Ágios Nikólaos,2109,M,85,GR,35.19106,25.71524 52467,Ano Arhanes,2109,M,85,GR,35.23333,25.16667 52480,Anógeia,2109,M,85,GR,35.29084,24.88412 52493,Arkalochóri,2109,M,85,GR,35.14634,25.26538 52512,Asímion,2109,M,85,GR,35.04321,25.09277 52517,Atsipópoulo,2109,M,85,GR,35.35253,24.43378 52530,Chaniá,2109,M,85,GR,35.51124,24.02921 52544,Chóra Sfakíon,2109,M,85,GR,35.20176,24.13711 52546,Darátsos,2109,M,85,GR,35.49955,23.97488 52582,Eloúnda,2109,M,85,GR,35.265,25.72127 52623,Galatás,2109,M,85,GR,35.49864,23.96341 52648,Gázi,2109,M,85,GR,35.32531,25.06694 52633,Georgioupolis,2109,M,85,GR,35.36225,24.26013 52636,Geráni,2109,M,85,GR,35.51721,23.87818 52654,Gérgeri,2109,M,85,GR,35.13281,24.94963 52641,Goúrnes,2109,M,85,GR,35.32626,25.2774 52642,Gra Liyiá,2109,M,85,GR,35.01467,25.69127 52659,Ierápetra,2109,M,85,GR,35.01186,25.74234 52666,Irákleion,2109,M,85,GR,35.32787,25.14341 52692,Kalýves,2109,M,85,GR,35.45046,24.17507 52728,Kastélli,2109,M,85,GR,35.20902,25.33773 52726,Kastrí,2109,M,85,GR,34.8346,24.08572 52806,Káto Asítai,2109,M,85,GR,35.20271,24.99827 52809,Káto Goúves,2109,M,85,GR,35.32934,25.31353 52738,Kentrí,2109,M,85,GR,35.03258,25.7528 52822,Kíssamos,2109,M,85,GR,35.49459,23.65375 52756,Kokkíni Cháni,2109,M,85,GR,35.32827,25.2581 52760,Kolympári,2109,M,85,GR,35.54115,23.77995 52787,Kritsá,2109,M,85,GR,35.15821,25.64459 52789,Krousón,2109,M,85,GR,35.23062,24.98291 52855,Limín Khersonísou,2109,M,85,GR,35.32297,25.39275 52953,Mália,2109,M,85,GR,35.28367,25.46262 52948,Moíres,2109,M,85,GR,35.05143,24.8733 52939,Mokhós,2109,M,85,GR,35.26342,25.42305 52944,Mourniés,2109,M,85,GR,35.48228,24.01253 52946,Mouzourás,2109,M,85,GR,35.53885,24.15554 52999,Néa Alikarnassós,2109,M,85,GR,35.33977,25.15895 53000,Néa Anatolí,2109,M,85,GR,35.0092,25.6617 52973,Neápoli,2109,M,85,GR,35.25627,25.60415 52971,Nerokoúros,2109,M,85,GR,35.47587,24.03995 52986,Nomós Irakleíou,2109,M,85,GR,35.32969,25.12985 52991,Nomós Rethýmnis,2109,M,85,GR,35.25,24.58333 53079,Palaióchora,2109,M,85,GR,35.23128,23.68185 53083,Palekastro,2109,M,85,GR,35.19793,26.25429 53163,Pánormos,2109,M,85,GR,35.41815,24.69091 53176,Pérama,2109,M,85,GR,35.3703,24.70345 53114,Perivólia,2109,M,85,GR,35.48491,23.99421 53124,Pithári,2109,M,85,GR,35.51672,24.08653 53142,Profítis Ilías,2109,M,85,GR,35.20555,25.09985 53185,Pýrgos,2109,M,85,GR,35.00611,25.15191 53187,Rethymno,2109,M,85,GR,35.36555,24.48232 53210,Schísma Eloúndas,2109,M,85,GR,35.25757,25.72796 53272,Sísion,2109,M,85,GR,35.3077,25.52021 53217,Sitia,2109,M,85,GR,35.20783,26.10467 53219,Skalánion,2109,M,85,GR,35.28262,25.18684 53237,Soúda,2109,M,85,GR,35.48717,24.07344 53244,Stalís,2109,M,85,GR,35.29257,25.43292 53281,Thrapsanón,2109,M,85,GR,35.18798,25.28091 53302,Tílisos,2109,M,85,GR,35.29607,25.01587 53296,Tsikalariá,2109,M,85,GR,35.47623,24.06274 53299,Tympáki,2109,M,85,GR,35.07286,24.76851 53321,Violí Charáki,2109,M,85,GR,35.35864,24.43857 53337,Vrýses,2109,M,85,GR,35.37585,24.20109 53359,Zarós,2109,M,85,GR,35.1303,24.90412 53364,Zonianá,2109,M,85,GR,35.29502,24.82944 53375,Ágios Athanásios,2120,A2,85,GR,41.07463,24.24545 52440,Alexandroupoli,2120,A2,85,GR,40.84995,25.87644 52456,Amygdaleónas,2120,A2,85,GR,40.96346,24.36007 53398,Áratos,2120,A2,85,GR,41.08139,25.55186 52502,Arísvi,2120,A2,85,GR,41.07,25.59041 52497,Arrianá,2120,A2,85,GR,41.08131,25.69494 53408,Ávato,2120,A2,85,GR,40.96279,24.80441 52535,Choristí,2120,A2,85,GR,41.13056,24.20843 52538,Chrysochóri,2120,A2,85,GR,40.93328,24.71088 52539,Chrysoúpolis,2120,A2,85,GR,40.98556,24.69389 52555,Didymóteicho,2120,A2,85,GR,41.34806,26.49611 52565,Dráma,2120,A2,85,GR,41.15283,24.1473 52571,Echínos,2120,A2,85,GR,41.27558,24.97237 52576,Elaiochóri,2120,A2,85,GR,40.8203,24.24373 52579,Eleftherés,2120,A2,85,GR,40.84666,24.25431 52578,Eleftheroúpolis,2120,A2,85,GR,40.91389,24.25139 53418,Évlalo,2120,A2,85,GR,40.98333,24.8 52616,Féres,2120,A2,85,GR,40.89305,26.17234 52603,Fillýra,2120,A2,85,GR,41.11667,25.63333 52610,Fotolívos,2120,A2,85,GR,41.06013,24.04724 52612,Fteliá,2120,A2,85,GR,41.08266,24.18968 52632,Genisséa,2120,A2,85,GR,41.06165,24.96248 53420,Íasmos,2120,A2,85,GR,41.12747,25.18573 52661,Iliokentima,2120,A2,85,GR,40.94931,24.78859 52679,Kalampáki,2120,A2,85,GR,41.05,24.18333 52690,Kalí Vrýsi,2120,A2,85,GR,41.14653,23.90667 52683,Kallífytos,2120,A2,85,GR,41.1728,24.21527 52691,Kalós Agrós,2120,A2,85,GR,41.10543,24.0857 52696,Kamariótissa,2120,A2,85,GR,40.47501,25.47456 52723,Kastaniés,2120,A2,85,GR,41.64551,26.47676 52815,Káto Nevrokópi,2120,A2,85,GR,41.35,23.86667 52735,Kavála,2120,A2,85,GR,40.93959,24.40687 52737,Kavýli,2120,A2,85,GR,41.56225,26.5147 52739,Keramotí,2120,A2,85,GR,40.85591,24.70595 52748,Kimméria,2120,A2,85,GR,41.14788,24.93869 52755,Kokkinóchoma,2120,A2,85,GR,40.9269,24.30805 52762,Komotiní,2120,A2,85,GR,41.11917,25.40535 52785,Krinídes,2120,A2,85,GR,41.01396,24.29647 52798,Kyprínos,2120,A2,85,GR,41.57542,26.22905 52829,Kýria,2120,A2,85,GR,41.099,24.28915 52834,Lagós,2120,A2,85,GR,41.45102,26.46067 52876,Lávara,2120,A2,85,GR,41.26957,26.38522 52853,Limenária,2120,A2,85,GR,40.62741,24.5765 52882,Lýkeio,2120,A2,85,GR,41.06413,25.6857 52935,Mikrópolis,2120,A2,85,GR,41.19351,23.8157 52959,Mýki,2120,A2,85,GR,41.24384,24.92084 53011,Néa Iraklítsa,2120,A2,85,GR,40.86442,24.3165 53013,Néa Karváli,2120,A2,85,GR,40.96148,24.51132 53014,Néa Karyá,2120,A2,85,GR,40.90621,24.70726 53031,Néa Péramos,2120,A2,85,GR,40.83854,24.3013 53040,Néa Výssa,2120,A2,85,GR,41.58449,26.54318 52967,Neochóri,2120,A2,85,GR,41.51131,26.4574 52976,Nikísiani,2120,A2,85,GR,40.94739,24.14311 53062,Orestiáda,2120,A2,85,GR,41.50306,26.52972 53161,Páchni,2120,A2,85,GR,41.30506,24.89438 53078,Palaió Tsiflíki,2120,A2,85,GR,40.90495,24.35083 53071,Palaiochóri,2120,A2,85,GR,40.94338,24.17747 53093,Paralía Ofryníou,2120,A2,85,GR,40.76663,23.90039 53096,Paranésti,2120,A2,85,GR,41.26667,24.5 53173,Péplos,2120,A2,85,GR,40.95755,26.26577 53117,Peteinós,2120,A2,85,GR,41.10056,24.89847 53118,Petrochóri,2120,A2,85,GR,41.08742,24.84092 53120,Petroússa,2120,A2,85,GR,41.1947,24.01731 53140,Potamiá,2120,A2,85,GR,40.71633,24.72859 53150,Prínos,2120,A2,85,GR,40.7409,24.57787 53145,Prosotsáni,2120,A2,85,GR,41.18333,23.96667 53201,Rízia,2120,A2,85,GR,41.6249,26.42771 53205,Samothráki,2120,A2,85,GR,40.47333,25.52222 53264,Sápes,2120,A2,85,GR,41.02861,25.69306 53266,Sélero,2120,A2,85,GR,41.13382,24.99408 53216,Sitagroí,2120,A2,85,GR,41.11067,24.02755 53230,Smínthi,2120,A2,85,GR,41.23333,24.86667 53235,Souflí,2120,A2,85,GR,41.19194,26.29944 53282,Thásos,2120,A2,85,GR,40.77806,24.70944 53298,Tycheró,2120,A2,85,GR,41.02878,26.29455 53345,Vólakas,2120,A2,85,GR,41.31661,24.00215 53353,Xánthi,2120,A2,85,GR,41.13488,24.888 53350,Xiropótamos,2120,A2,85,GR,41.19206,24.10385 53351,Xylaganí,2120,A2,85,GR,40.97437,25.42022 53365,Zygós,2120,A2,85,GR,41.0132,24.38132 52417,Agía Kyriakí,2110,D,85,GR,39.52264,20.88358 52462,Anatolí,2110,D,85,GR,39.63531,20.86578 52479,Anéza,2110,D,85,GR,39.08658,20.923 53390,Áno Kalentíni,2110,D,85,GR,39.25,21.18528 53403,Árta,2110,D,85,GR,39.16014,20.98561 52507,Asprángeloi,2110,D,85,GR,39.82328,20.72862 52527,Chalkiádes,2110,D,85,GR,39.15981,20.93292 52574,Eksochí,2110,D,85,GR,39.68744,20.8224 52580,Eleoúsa,2110,D,85,GR,39.15278,20.96214 52602,Filiátes,2110,D,85,GR,39.60111,20.31194 52601,Filippiáda,2110,D,85,GR,39.20472,20.88222 52643,Graikochóri,2110,D,85,GR,39.49789,20.27608 52645,Grammenítsa,2110,D,85,GR,39.18444,20.97933 52660,Igoumenítsa,2110,D,85,GR,39.50342,20.26728 52663,Ioánnina,2110,D,85,GR,39.66486,20.85189 52677,Kalamiá,2110,D,85,GR,39.16528,20.93206 52686,Kalpáki,2110,D,85,GR,39.88778,20.62389 52701,Kanaláki,2110,D,85,GR,39.23361,20.6 52708,Kardamítsia,2110,D,85,GR,39.67816,20.81956 52733,Katsikás,2110,D,85,GR,39.62281,20.88758 52763,Kompóti,2110,D,85,GR,39.10255,21.08389 52825,Kónitsa,2110,D,85,GR,40.04861,20.75667 52774,Kostakioí,2110,D,85,GR,39.13672,20.95761 52777,Koutselió,2110,D,85,GR,39.58808,20.91197 52870,Loúros,2110,D,85,GR,39.166,20.75608 52933,Metsovo,2110,D,85,GR,39.76944,21.18222 53033,Néa Seléfkeia,2110,D,85,GR,39.52461,20.25519 52965,Neochóri,2110,D,85,GR,39.07025,21.01892 52964,Neochorópoulo,2110,D,85,GR,39.62553,20.83558 53052,Néos Oropós,2110,D,85,GR,39.15064,20.73636 52985,Nomós Ioannínon,2110,D,85,GR,39.75,20.66667 53088,Pappadátes,2110,D,85,GR,39.31444,20.79314 53095,Paramythiá,2110,D,85,GR,39.47111,20.51111 53097,Parapótamos,2110,D,85,GR,39.54858,20.32436 53165,Párga,2110,D,85,GR,39.28572,20.40044 53101,Pediní,2110,D,85,GR,39.59994,20.84261 53174,Pérama,2110,D,85,GR,39.69331,20.84656 53177,Pérdika,2110,D,85,GR,39.36967,20.30419 53178,Péta,2110,D,85,GR,39.16667,21.03472 53127,Platariá,2110,D,85,GR,39.45044,20.27781 53148,Prámanta,2110,D,85,GR,39.52306,21.10139 53149,Préveza,2110,D,85,GR,38.95617,20.7505 53196,Rodotópi,2110,D,85,GR,39.70822,20.72656 53248,Stavráki,2110,D,85,GR,39.65614,20.81806 53277,Thesprotikó,2110,D,85,GR,39.25114,20.78528 53295,Tsiflikópoulo,2110,D,85,GR,39.65624,20.83882 53328,Voulgaréli,2110,D,85,GR,39.37194,21.18333 53330,Vounoplagiá,2110,D,85,GR,39.69161,20.78597 52400,Acharávi,2131,F,85,GR,39.7936,19.81736 52409,Agios Georgis,2131,F,85,GR,39.72363,19.69969 53379,Ágios Matthaíos,2131,F,85,GR,39.49506,19.87336 52439,Alepoú,2131,F,85,GR,39.61594,19.89564 52448,Ambelókipoi,2131,F,85,GR,37.75809,20.87248 52489,Argostólion,2131,F,85,GR,38.18109,20.48903 52545,Corfu,2131,F,85,GR,39.62069,19.91975 52650,Gáïos,2131,F,85,GR,39.19722,20.18556 52631,Gaïtánion,2131,F,85,GR,37.79134,20.87407 52669,Itháki,2131,F,85,GR,38.36421,20.71848 52703,Kanáli,2131,F,85,GR,39.60556,19.8925 52729,Katastárion,2131,F,85,GR,37.83012,20.75755 52765,Kontokáli,2131,F,85,GR,39.64436,19.85194 52796,Kynopiástes,2131,F,85,GR,39.56785,19.88362 52840,Lefkada,2131,F,85,GR,38.75,20.66667 52842,Lefkímmi,2131,F,85,GR,39.42336,20.07094 52857,Lithakiá,2131,F,85,GR,37.71935,20.83013 52863,Lixoúri,2131,F,85,GR,38.20133,20.43706 52945,Mouzaki,2131,F,85,GR,37.73565,20.82291 52987,Nomós Kerkýras,2131,F,85,GR,39.66667,19.75 52993,Nomós Zakýnthou,2131,F,85,GR,37.75,20.75 53109,Perama,2131,F,85,GR,39.58289,19.9122 53113,Perivóli,2131,F,85,GR,39.41936,20.01469 53179,Póros,2131,F,85,GR,38.15369,20.7712 53141,Potamós,2131,F,85,GR,39.6242,19.87826 53263,Sámi,2131,F,85,GR,38.25081,20.64686 53304,Valsamáta,2131,F,85,GR,38.176,20.58392 53307,Vanáton,2131,F,85,GR,37.79446,20.85188 53322,Virós,2131,F,85,GR,39.5834,19.8827 53358,Zakynthos,2131,F,85,GR,37.78022,20.89555 52424,Agía Triáda,2127,23,85,GR,39.46361,21.89848 52412,Agnanteró,2127,23,85,GR,39.48586,21.84789 52477,Anávra,2127,23,85,GR,39.18996,22.09308 52469,Anthiró,2127,23,85,GR,39.34722,21.45833 52499,Artesianó,2127,23,85,GR,39.40194,21.89649 52670,Itéa,2127,23,85,GR,39.45669,22.16577 52680,Kallifóni,2127,23,85,GR,39.27712,21.96128 52684,Kallíthiro,2127,23,85,GR,39.28099,21.90491 52713,Kardítsa,2127,23,85,GR,39.36485,21.92191 52710,Karditsomagoúla,2127,23,85,GR,39.39061,21.9233 52717,Karpochóri,2127,23,85,GR,39.33575,22.01129 52884,Magoúla,2127,23,85,GR,39.45395,21.80351 52889,Makrychóri,2127,23,85,GR,39.43978,21.96582 52907,Mavrommáti,2127,23,85,GR,39.42386,21.69379 52938,Mitrópoli,2127,23,85,GR,39.33933,21.83751 52942,Morfovoúni,2127,23,85,GR,39.3525,21.75 52947,Mouzáki,2127,23,85,GR,39.42972,21.66361 53081,Palamás,2127,23,85,GR,39.46667,22.08333 53147,Proástio,2127,23,85,GR,39.48682,21.90288 53233,Sofádes,2127,23,85,GR,39.33333,22.1 52413,Agriá,2104,24,85,GR,39.34078,23.01258 53388,Álli Meriá,2104,24,85,GR,39.37039,22.9835 52445,Almyrós,2104,24,85,GR,39.18222,22.75944 52459,Anakasiá,2104,24,85,GR,39.38112,22.97484 53393,Áno Lekhónia,2104,24,85,GR,39.32763,23.05395 52486,Argalastí,2104,24,85,GR,39.22627,23.21868 52595,Evxinoúpolis,2104,24,85,GR,39.18414,22.73831 52704,Kanália,2104,24,85,GR,39.49928,22.88589 52811,Káto Lekhónia,2104,24,85,GR,39.33091,23.03957 53001,Néa Anchiálos,2104,24,85,GR,39.28015,22.81819 53010,Néa Ionía,2104,24,85,GR,39.37904,22.92752 53099,Patitírion,2104,24,85,GR,39.14657,23.86494 53138,Portariá,2104,24,85,GR,39.3895,22.99948 53156,Pteleós,2104,24,85,GR,39.05261,22.95271 53192,Rizómylos,2104,24,85,GR,39.42763,22.74717 53221,Skiáthos,2104,24,85,GR,39.16227,23.49089 53227,Skópelos,2104,24,85,GR,39.12144,23.72686 53238,Soúrpi,2104,24,85,GR,39.10319,22.89789 53251,Stefanovíkeio,2104,24,85,GR,39.46354,22.74198 53292,Tríkeri,2104,24,85,GR,39.10114,23.07669 53318,Velestíno,2104,24,85,GR,39.38181,22.74616 53327,Volos,2104,24,85,GR,39.36103,22.94248 53357,Zagorá,2104,24,85,GR,39.45,23.1 53372,Ágioi Theódoroi,2119,J,85,GR,37.92736,23.14221 53373,Ágios Andréas,2119,J,85,GR,37.34519,22.76466 52485,Arfará,2119,J,85,GR,37.15619,22.04485 53399,Árgos,2119,J,85,GR,37.63333,22.73333 52491,Aria,2119,J,85,GR,37.57372,22.83539 53400,Áris,2119,J,85,GR,37.0992,22.00443 52494,Arkhaía Kórinthos,2119,J,85,GR,37.90953,22.88353 52513,Asíni,2119,J,85,GR,37.54431,22.86435 52505,Asopós,2119,J,85,GR,36.72986,22.85455 53405,Ássos,2119,J,85,GR,37.93955,22.82223 53406,Ástros,2119,J,85,GR,37.40395,22.72118 52516,Athíkia,2119,J,85,GR,37.81675,22.92939 52521,Ayía Triás,2119,J,85,GR,37.63707,22.80504 53410,Áyios Adhrianós,2119,J,85,GR,37.59975,22.8456 53415,Áyios Vasílios,2119,J,85,GR,37.79763,22.79727 52543,Chóra,2119,J,85,GR,37.05106,21.7169 52567,Dídyma,2119,J,85,GR,37.4625,23.17183 52556,Dimitsána,2119,J,85,GR,37.59524,22.04025 52566,Drépanon,2119,J,85,GR,37.53888,22.89323 52589,Ermióni,2119,J,85,GR,37.38492,23.24686 52596,Examília,2119,J,85,GR,37.89736,22.92832 52600,Filiatrá,2119,J,85,GR,37.15637,21.58532 52628,Gargaliánoi,2119,J,85,GR,37.06518,21.63809 52652,Géfyra,2119,J,85,GR,36.68715,23.03509 52635,Geráki,2119,J,85,GR,36.99227,22.70663 52656,Gýtheio,2119,J,85,GR,36.755,22.56417 52667,Isthmía,2119,J,85,GR,37.91356,23.0046 52676,Kalamata,2119,J,85,GR,37.03913,22.11265 52709,Kardamýli,2119,J,85,GR,36.88778,22.23317 52718,Karyés,2119,J,85,GR,37.29119,22.50066 52807,Káto Dhiminió,2119,J,85,GR,38.0249,22.73294 52808,Káto Glykóvrysi,2119,J,85,GR,36.82791,22.77732 52745,Khiliomódhi,2119,J,85,GR,37.81016,22.86972 52751,Kiáto,2119,J,85,GR,38.01321,22.74839 52754,Koilás,2119,J,85,GR,37.4123,23.12553 52757,Kokkónion,2119,J,85,GR,37.97061,22.78018 52766,Kopanáki,2119,J,85,GR,37.28913,21.81854 52826,Kórinthos,2119,J,85,GR,37.94007,22.9513 52772,Koróni,2119,J,85,GR,36.79526,21.95794 52778,Koutsopódi,2119,J,85,GR,37.68426,22.71355 52783,Kranídi,2119,J,85,GR,37.37974,23.15969 52788,Krokeés,2119,J,85,GR,36.88297,22.54683 52797,Kyparissía,2119,J,85,GR,37.25111,21.67361 52801,Kyrás Vrýsi,2119,J,85,GR,37.91295,22.98651 52838,Langádhia,2119,J,85,GR,37.68186,22.03002 52879,Lékhaio,2119,J,85,GR,37.93279,22.85002 52845,Leonídio,2119,J,85,GR,37.16679,22.85773 52848,Levídion,2119,J,85,GR,37.68269,22.29586 52852,Ligourión,2119,J,85,GR,37.61233,23.03773 52866,Loutrá Oraías Elénis,2119,J,85,GR,37.86466,22.99614 52867,Loutráki,2119,J,85,GR,37.9783,22.97781 52886,Magoúla,2119,J,85,GR,37.08007,22.40469 52912,Megalópoli,2119,J,85,GR,37.40111,22.14222 52918,Meligalás,2119,J,85,GR,37.21667,21.96667 52930,Messíni,2119,J,85,GR,37.05111,22.00778 52932,Methóni,2119,J,85,GR,36.81973,21.70486 52940,Moláoi,2119,J,85,GR,36.80757,22.85132 52949,Moúlki,2119,J,85,GR,37.99319,22.72531 52995,Náfplio,2119,J,85,GR,37.56863,22.80691 53015,Néa Kíos,2119,J,85,GR,37.59023,22.74342 53038,Néa Tírins,2119,J,85,GR,37.60793,22.81996 52962,Neméa,2119,J,85,GR,37.82068,22.66102 52980,Nomós Arkadías,2119,J,85,GR,37.58333,22.25 53075,Palaiá Epídavros,2119,J,85,GR,37.63847,23.15609 53094,Paralía Vérgas,2119,J,85,GR,37.00708,22.15676 53167,Pásion,2119,J,85,GR,38.01294,22.72814 53108,Perachóra,2119,J,85,GR,38.03021,22.94902 53115,Periyiáli,2119,J,85,GR,37.94041,22.83946 53181,Pórto Chéli,2119,J,85,GR,37.32786,23.14384 53183,Pýlos,2119,J,85,GR,36.91298,21.6965 53215,Sikyón,2119,J,85,GR,37.9823,22.72462 53225,Skála,2119,J,85,GR,36.85,22.66667 53232,Sofikón,2119,J,85,GR,37.79412,23.05204 53241,Spárti,2119,J,85,GR,37.07446,22.43009 53240,Sperchógeia,2119,J,85,GR,37.07405,22.06248 53258,Sykiá,2119,J,85,GR,36.76398,22.94302 53279,Thouría,2119,J,85,GR,37.08356,22.04891 53286,Tolón,2119,J,85,GR,37.52021,22.8586 53287,Traganón,2119,J,85,GR,37.89789,21.31245 53294,Trípoli,2119,J,85,GR,37.50889,22.37944 53342,Vélo,2119,J,85,GR,37.9761,22.75985 53323,Vlachiótis,2119,J,85,GR,36.86094,22.70831 53324,Vlachópoulo,2119,J,85,GR,37.03186,21.79158 53326,Vokhaïkó,2119,J,85,GR,37.94843,22.79203 53333,Vrakháti,2119,J,85,GR,37.95895,22.80573 53352,Xylókastro,2119,J,85,GR,38.07762,22.63166 53361,Zevgolateió,2119,J,85,GR,37.93333,22.8 52401,Adámas,2118,L,85,GR,36.72506,24.44685 52405,Afántou,2118,L,85,GR,36.29354,28.16225 52419,Agía Marína,2118,L,85,GR,37.1543,26.85162 52452,Amorgós,2118,L,85,GR,36.83175,25.89821 52476,Anáfi,2118,L,85,GR,36.35,25.76667 52464,Andros,2118,L,85,GR,37.83333,24.93333 53395,Áno Merá,2118,L,85,GR,37.44904,25.39095 53396,Áno Sýros,2118,L,85,GR,37.44997,24.93562 52473,Antimácheia,2118,L,85,GR,36.80888,27.09764 52475,Antíparos,2118,L,85,GR,37.0394,25.08258 52484,Archángelos,2118,L,85,GR,36.21492,28.11487 52510,Astypálaia,2118,L,85,GR,36.55,26.35 52541,Chálki,2118,L,85,GR,36.22243,27.61191 53417,Émponas,2118,L,85,GR,36.22683,27.85645 52584,Emporeío,2118,L,85,GR,36.35816,25.44615 52590,Ermoúpolis,2118,L,85,GR,37.44466,24.9429 52598,Faliraki,2118,L,85,GR,36.33981,28.19942 52606,Filótion,2118,L,85,GR,37.05167,25.49829 52607,Firá,2118,L,85,GR,36.42107,25.43087 52609,Folégandros,2118,L,85,GR,36.62794,24.92021 52611,Fry,2118,L,85,GR,35.41623,26.92328 52657,Ialysós,2118,L,85,GR,36.41352,28.15516 53422,Íos,2118,L,85,GR,36.73333,25.28333 52803,Kálymnos,2118,L,85,GR,36.9503,26.98388 52712,Kardámaina,2118,L,85,GR,36.78305,27.14289 52715,Karpathos,2118,L,85,GR,35.50701,27.21322 52819,Kéfalos,2118,L,85,GR,36.74507,26.95961 52820,Kímolos,2118,L,85,GR,36.79368,24.57577 52773,Kos,2118,L,85,GR,36.89295,27.28768 52784,Kremastí,2118,L,85,GR,36.40981,28.1192 52831,Kýthnos,2118,L,85,GR,37.41237,24.43068 52836,Lakkí,2118,L,85,GR,37.13344,26.85237 52875,Lárdos,2118,L,85,GR,36.09419,28.01565 52894,Mandráki,2118,L,85,GR,36.61139,27.13333 52916,Megálo Chorió,2118,L,85,GR,37.4582,26.97272 52917,Megísti,2118,L,85,GR,36.14889,29.59361 52926,Mesariá,2118,L,85,GR,36.39893,25.44807 52957,Mílos,2118,L,85,GR,36.74536,24.4265 52950,Mykonos,2118,L,85,GR,37.44529,25.32872 52997,Náousa,2118,L,85,GR,37.12181,25.24014 52998,Náxos,2118,L,85,GR,37.10556,25.37639 52989,Nomós Kykládon,2118,L,85,GR,37.41667,24.91667 53069,Oía,2118,L,85,GR,36.4626,25.37637 53064,Ornós,2118,L,85,GR,37.42391,25.32248 53164,Pánormos,2118,L,85,GR,36.97156,26.93727 53166,Páros,2118,L,85,GR,37.08333,25.15 53168,Pátmos,2118,L,85,GR,37.30895,26.54723 53159,Pylí,2118,L,85,GR,36.84472,27.15932 53203,Ródos,2118,L,85,GR,36.43556,28.22199 53267,Sérifos,2118,L,85,GR,37.15397,24.50614 53224,Skála,2118,L,85,GR,37.32218,26.543 53273,Sými,2118,L,85,GR,36.61547,27.83619 53303,Tínos,2118,L,85,GR,37.53753,25.16343 53341,Vári,2118,L,85,GR,37.39859,24.94904 53362,Zipári,2118,L,85,GR,36.87696,27.20532 52414,Agrínio,2096,G,85,GR,38.62139,21.40778 52522,Aígio,2096,G,85,GR,38.24861,22.08194 52432,Aitolikó,2096,G,85,GR,38.43704,21.35358 52523,Aíyira,2096,G,85,GR,38.14846,22.35426 52437,Akráta,2096,G,85,GR,38.15469,22.3183 52438,Aktaío,2096,G,85,GR,38.30444,21.7944 52442,Alfeioúsa,2096,G,85,GR,37.64019,21.5375 52447,Amaliáda,2096,G,85,GR,37.79842,21.35068 52449,Amfilochía,2096,G,85,GR,38.85944,21.16639 52463,Andravída,2096,G,85,GR,37.90588,21.26936 52466,Angelókastro,2096,G,85,GR,38.56585,21.29631 53391,Áno Kastrítsi,2096,G,85,GR,38.27228,21.836 52474,Antirrio,2096,G,85,GR,38.33014,21.76413 52482,Archaía Olympía,2096,G,85,GR,37.64788,21.6271 52483,Archontochóri,2096,G,85,GR,38.70053,21.03896 52495,Arkoúdi,2096,G,85,GR,37.84681,21.11022 52509,Astakós,2096,G,85,GR,38.53556,21.08135 53411,Áyios Konstandínos,2096,G,85,GR,38.63337,21.3995 52525,Chalandrítsa,2096,G,85,GR,38.10843,21.78349 52542,Chávari,2096,G,85,GR,37.84842,21.38403 52550,Dhokímion,2096,G,85,GR,38.61352,21.38072 52588,Epitálio,2096,G,85,GR,37.62675,21.49528 52614,Fyteíes,2096,G,85,GR,38.69524,21.18467 52622,Galatás,2096,G,85,GR,38.35742,21.56222 52629,Gastoúni,2096,G,85,GR,37.85,21.25 52630,Gavaloú,2096,G,85,GR,38.52903,21.53226 52640,Goúmero,2096,G,85,GR,37.76236,21.61853 52672,Kainoúryion,2096,G,85,GR,38.60453,21.48776 52688,Kalávryta,2096,G,85,GR,38.03222,22.1125 52699,Kamárai,2096,G,85,GR,38.29881,21.99892 52702,Kandíla,2096,G,85,GR,38.70564,20.94749 52720,Karátoula,2096,G,85,GR,37.73564,21.53578 52707,Kardamás,2096,G,85,GR,37.76729,21.33946 52805,Káto Achaḯa,2096,G,85,GR,38.15,21.55 52813,Káto Mazaráki,2096,G,85,GR,38.07035,21.65097 52731,Katochí,2096,G,85,GR,38.41237,21.25258 52732,Katoúna,2096,G,85,GR,38.78547,21.11417 52736,Kavásila,2096,G,85,GR,37.87581,21.26422 52791,Kréstena,2096,G,85,GR,37.59193,21.62034 52792,Kríkellos,2096,G,85,GR,38.94532,21.1791 52795,Kyllíni,2096,G,85,GR,37.93542,21.14503 52873,Lálas,2096,G,85,GR,37.70936,21.72117 52874,Lápas,2096,G,85,GR,38.09755,21.41861 52839,Lechainá,2096,G,85,GR,37.93333,21.26667 52846,Lepenoú,2096,G,85,GR,38.70839,21.2897 52854,Limnokhórion,2096,G,85,GR,38.14115,21.48047 52890,Makrísia,2096,G,85,GR,37.60957,21.60509 52896,Manoláda,2096,G,85,GR,38.04708,21.34814 52905,Mataránga,2096,G,85,GR,38.52359,21.47325 52914,Megáli Khóra,2096,G,85,GR,38.64629,21.37309 52925,Menídi,2096,G,85,GR,39.04213,21.11875 52928,Mesolóngi,2096,G,85,GR,38.37138,21.43151 52936,Mindilóglion,2096,G,85,GR,38.18387,21.70133 52941,Monastiráki,2096,G,85,GR,38.85053,20.94458 52951,Myrsíni,2096,G,85,GR,37.92117,21.237 52994,Náfpaktos,2096,G,85,GR,38.39167,21.8275 53018,Néa Manoláda,2096,G,85,GR,38.05378,21.38189 52974,Neápolis,2096,G,85,GR,38.67144,21.36274 52968,Neochóri,2096,G,85,GR,37.90794,21.20392 52969,Neochórion,2096,G,85,GR,38.40847,21.27511 52978,Nomós Achaḯas,2096,G,85,GR,38.0,22.0 52979,Nomós Aitolías kai Akarnanías,2096,G,85,GR,38.5,21.5 52984,Nomós Ileías,2096,G,85,GR,37.75,21.58333 53067,Ovriá,2096,G,85,GR,38.18866,21.72903 53162,Pálairos,2096,G,85,GR,38.783,20.88183 53085,Panaitólion,2096,G,85,GR,38.58316,21.44729 53087,Pappadhátai,2096,G,85,GR,38.52816,21.45016 53090,Paralía,2096,G,85,GR,38.19833,21.70263 53098,Paravóla,2096,G,85,GR,38.61472,21.52046 53169,Pátra,2096,G,85,GR,38.24444,21.73444 53104,Pelópi,2096,G,85,GR,37.67444,21.59344 53130,Plátanos,2096,G,85,GR,37.66731,21.61108 53184,Pýrgos,2096,G,85,GR,37.67513,21.44102 53200,Río,2096,G,85,GR,38.29558,21.78504 53194,Rododáfni,2096,G,85,GR,38.26976,22.04875 53199,Royítika,2096,G,85,GR,38.18268,21.68414 53206,Sardínia,2096,G,85,GR,38.89003,21.20619 53208,Savália,2096,G,85,GR,37.82158,21.29425 53256,Stános,2096,G,85,GR,38.80453,21.17461 53261,Sylivainiótika,2096,G,85,GR,38.16139,22.33156 53262,Synoikismós Chavaríou,2096,G,85,GR,37.85575,21.38789 53301,Témeni,2096,G,85,GR,38.23707,22.12533 53284,Thérmo,2096,G,85,GR,38.57358,21.66628 53288,Triandaíika,2096,G,85,GR,38.6553,21.38315 53339,Várda,2096,G,85,GR,38.03058,21.36506 53309,Vartholomió,2096,G,85,GR,37.86219,21.20575 53310,Varvásaina,2096,G,85,GR,37.67106,21.49886 53346,Vónitsa,2096,G,85,GR,38.91639,20.88639 53332,Vrachnaíika,2096,G,85,GR,38.16253,21.66693 53356,Zacháro,2096,G,85,GR,37.48333,21.65 52428,Aianí,2108,C,85,GR,40.16381,21.81945 52435,Akriní,2108,C,85,GR,40.43492,21.90609 52451,Ammochóri,2108,C,85,GR,40.78203,21.48458 52458,Amýntaio,2108,C,85,GR,40.68967,21.67974 52460,Anaráchi,2108,C,85,GR,40.49234,21.57279 53392,Áno Kómi,2108,C,85,GR,40.2266,21.82827 52488,Argos Orestiko,2108,C,85,GR,40.45354,21.25889 52533,Chlói,2108,C,85,GR,40.53918,21.25923 52548,Deskáti,2108,C,85,GR,39.92422,21.81031 52585,Empório,2108,C,85,GR,40.48866,21.55768 52592,Erátyra,2108,C,85,GR,40.34253,21.51333 52605,Filótas,2108,C,85,GR,40.6252,21.70851 52608,Flórina,2108,C,85,GR,40.78197,21.40981 52620,Galatiní,2108,C,85,GR,40.31966,21.55148 52646,Grevená,2108,C,85,GR,40.08452,21.42744 52724,Kastoria,2108,C,85,GR,40.52165,21.26341 52753,Kleítos,2108,C,85,GR,40.4314,21.85806 52781,Koíla,2108,C,85,GR,40.33055,21.79102 52761,Komniná,2108,C,85,GR,40.59057,21.77671 52780,Kozáni,2108,C,85,GR,40.30069,21.78896 52793,Krókos,2108,C,85,GR,40.26349,21.8176 52835,Laimós,2108,C,85,GR,40.83628,21.14061 52878,Léchovo,2108,C,85,GR,40.58442,21.49218 52861,Livaderó,2108,C,85,GR,40.03455,21.94279 52895,Maniákoi,2108,C,85,GR,40.50064,21.24446 52906,Mavrochóri,2108,C,85,GR,40.51224,21.32038 52923,Melíti,2108,C,85,GR,40.83434,21.58426 52929,Mesopotamía,2108,C,85,GR,40.50252,21.1611 52960,Nea Lava,2108,C,85,GR,40.19048,22.0132 52972,Nestório,2108,C,85,GR,40.41278,21.06222 52988,Nomós Kozánis,2108,C,85,GR,40.33333,21.71667 53126,Platanórevma,2108,C,85,GR,40.20083,22.02488 53157,Ptolemaḯda,2108,C,85,GR,40.51472,21.67861 53269,Sérvia,2108,C,85,GR,40.17972,21.99444 53218,Siátista,2108,C,85,GR,40.26194,21.54417 53297,Tsotíli,2108,C,85,GR,40.26147,21.32533 53319,Velventós,2108,C,85,GR,40.25532,22.07543 53349,Xinó Neró,2108,C,85,GR,40.69028,21.62324 56141,Ágasegyháza,1048,BK,99,HU,46.84025,19.45208 55180,Akasztó,1048,BK,99,HU,46.69167,19.20423 55191,Apostag,1048,BK,99,HU,46.88208,18.9621 55287,Bácsalmás,1048,BK,99,HU,46.12648,19.3326 55288,Bácsalmási Járás,1048,BK,99,HU,46.10167,19.33063 55289,Bácsbokod,1048,BK,99,HU,46.125,19.15621 55203,Baja,1048,BK,99,HU,46.18299,18.95307 55204,Bajai Járás,1048,BK,99,HU,46.14507,19.01359 55225,Ballószög,1048,BK,99,HU,46.86216,19.57092 55295,Bátya,1048,BK,99,HU,46.488,18.95419 55283,Bugac,1048,BK,99,HU,46.68704,19.68074 55347,Császártöltés,1048,BK,99,HU,46.42194,19.18361 55348,Csávoly,1048,BK,99,HU,46.18917,19.14667 55331,Csengőd,1048,BK,99,HU,46.71543,19.26802 55386,Dávod,1048,BK,99,HU,45.995,18.91722 55377,Dunapataj,1048,BK,99,HU,46.644,18.99632 55381,Dunavecse,1048,BK,99,HU,46.91478,18.97127 55383,Dusnok,1048,BK,99,HU,46.39085,18.96296 56147,Érsekcsanád,1048,BK,99,HU,46.25352,18.98457 55424,Felsőszentiván,1048,BK,99,HU,46.19713,19.18686 55439,Fülöpjakab,1048,BK,99,HU,46.74221,19.72132 55440,Fülöpszállás,1048,BK,99,HU,46.82075,19.23748 55446,Gara,1048,BK,99,HU,46.03194,19.04278 55493,Hajós,1048,BK,99,HU,46.39861,19.12056 55499,Harta,1048,BK,99,HU,46.69758,19.0311 55504,Helvécia,1048,BK,99,HU,46.83661,19.62251 55505,Hercegszántó,1048,BK,99,HU,45.95,18.93917 55531,Izsák,1048,BK,99,HU,46.80454,19.35172 55535,Jánoshalma,1048,BK,99,HU,46.29861,19.32583 55536,Jánoshalmai Járás,1048,BK,99,HU,46.28283,19.31742 55552,Jászszentlászló,1048,BK,99,HU,46.56685,19.76065 55558,Kalocsa,1048,BK,99,HU,46.52981,18.97283 55559,Kalocsai Járás,1048,BK,99,HU,46.55646,19.04211 55574,Katymár,1048,BK,99,HU,46.03398,19.20935 55578,Kecel,1048,BK,99,HU,46.52528,19.25194 55579,Kecskemét,1048,BK,99,HU,46.90618,19.69128 55580,Kecskeméti Járás,1048,BK,99,HU,46.88283,19.58701 55581,Kelebia,1048,BK,99,HU,46.1968,19.61659 55587,Kerekegyháza,1048,BK,99,HU,46.93722,19.47806 55602,Kiskőrös,1048,BK,99,HU,46.62139,19.28528 55603,Kiskőrösi Járás,1048,BK,99,HU,46.63309,19.33726 55594,Kiskunfélegyháza,1048,BK,99,HU,46.71213,19.84458 55595,Kiskunfélegyházi Járás,1048,BK,99,HU,46.65721,19.77006 55596,Kiskunhalas,1048,BK,99,HU,46.43402,19.48479 55597,Kiskunhalasi Járás,1048,BK,99,HU,46.35832,19.53067 55599,Kiskunmajsa,1048,BK,99,HU,46.49028,19.74 55600,Kiskunmajsai Járás,1048,BK,99,HU,46.49608,19.72316 55608,Kisszállás,1048,BK,99,HU,46.28009,19.48954 55626,Kunfehértó,1048,BK,99,HU,46.36091,19.41454 55630,Kunszentmiklós,1048,BK,99,HU,47.02699,19.12575 55631,Kunszentmiklósi Járás,1048,BK,99,HU,46.9481,19.15563 55654,Lajosmizse,1048,BK,99,HU,47.02133,19.56171 55655,Lakitelek,1048,BK,99,HU,46.87601,19.99504 55672,Madaras,1048,BK,99,HU,46.0587,19.26121 55731,Mélykút,1048,BK,99,HU,46.21509,19.38102 55741,Nagybaracska,1048,BK,99,HU,46.04248,18.9059 55765,Nemesnádudvar,1048,BK,99,HU,46.34051,19.05115 55768,Nyárlőrinc,1048,BK,99,HU,46.86017,19.87836 55799,Orgovány,1048,BK,99,HU,46.75087,19.47259 55840,Pálmonostora,1048,BK,99,HU,46.62417,19.95156 55903,Solt,1048,BK,99,HU,46.80101,19.00098 55904,Soltvadkert,1048,BK,99,HU,46.57889,19.39389 55997,Sükösd,1048,BK,99,HU,46.28181,18.99524 55913,Szabadszállás,1048,BK,99,HU,46.87575,19.22324 55917,Szalkszentmárton,1048,BK,99,HU,46.97565,19.01178 55919,Szank,1048,BK,99,HU,46.55713,19.66103 55942,Szentkirály,1048,BK,99,HU,46.91892,19.91846 56016,Tass,1048,BK,99,HU,47.02095,19.02988 56072,Tázlár,1048,BK,99,HU,46.54824,19.51436 56021,Tiszaalpár,1048,BK,99,HU,46.81279,19.99841 56035,Tiszakécske,1048,BK,99,HU,46.93261,20.10349 56036,Tiszakécskei Járás,1048,BK,99,HU,46.86013,19.97298 56055,Tompa,1048,BK,99,HU,46.20605,19.5391 56111,Városföld,1048,BK,99,HU,46.81674,19.75668 56091,Vaskút,1048,BK,99,HU,46.10782,18.98514 55238,Beremend,1055,BA,99,HU,45.79108,18.43263 55304,Bóly,1055,BA,99,HU,45.96722,18.51833 55305,Bólyi Járás,1055,BA,99,HU,45.98075,18.48449 55310,Bükkösd,1055,BA,99,HU,46.10751,17.9882 55378,Dunaszekcső,1055,BA,99,HU,46.0874,18.7587 55497,Harkány,1055,BA,99,HU,45.85002,18.23668 55502,Hegyháti Járás,1055,BA,99,HU,46.27247,18.13758 55512,Hidas,1055,BA,99,HU,46.2568,18.4954 55516,Hosszúhetény,1055,BA,99,HU,46.16414,18.35077 55618,Komló,1055,BA,99,HU,46.19278,18.26494 55619,Komlói Járás,1055,BA,99,HU,46.22019,18.2862 55625,Kozármisleny,1055,BA,99,HU,46.02967,18.2921 55667,Lánycsók,1055,BA,99,HU,46.00543,18.62526 55719,Mágocs,1055,BA,99,HU,46.34998,18.2324 55684,Mecseknádasd,1055,BA,99,HU,46.22468,18.47076 55708,Mohács,1055,BA,99,HU,45.9902,18.68621 55709,Mohácsi Járás,1055,BA,99,HU,46.02004,18.68 55850,Pécs,1055,BA,99,HU,46.08333,18.23333 55851,Pécsi Járás,1055,BA,99,HU,46.0799,18.25253 55852,Pécsvárad,1055,BA,99,HU,46.16033,18.42321 55853,Pécsváradi Járás,1055,BA,99,HU,46.16782,18.45456 55812,Pellérd,1055,BA,99,HU,46.03438,18.15403 55993,Sásd,1055,BA,99,HU,46.2552,18.10776 55894,Sellye,1055,BA,99,HU,45.87247,17.84711 55895,Sellyei Járás,1055,BA,99,HU,45.86955,17.89827 55897,Siklós,1055,BA,99,HU,45.85499,18.29752 55898,Siklósi Járás,1055,BA,99,HU,45.84981,18.31052 55970,Szászvár,1055,BA,99,HU,46.27673,18.37566 55944,Szentlőrinc,1055,BA,99,HU,46.04016,17.98719 55945,Szentlőrinci Járás,1055,BA,99,HU,46.04694,18.01528 55954,Szigetvár,1055,BA,99,HU,46.04865,17.80554 55955,Szigetvári Járás,1055,BA,99,HU,46.07336,17.80391 56089,Vajszló,1055,BA,99,HU,45.85957,17.98406 56102,Villány,1055,BA,99,HU,45.86889,18.45389 55233,Battonya,1060,BE,99,HU,46.28333,21.01667 55296,Békés,1060,BE,99,HU,46.76667,21.13333 55297,Békéscsaba,1060,BE,99,HU,46.68333,21.1 55298,Békéscsabai Járás,1060,BE,99,HU,46.68133,21.07413 55299,Békési Járás,1060,BE,99,HU,46.83317,21.1 55301,Békéssámson,1060,BE,99,HU,46.41667,20.63333 55300,Békésszentandrás,1060,BE,99,HU,46.86667,20.48333 55259,Bucsa,1060,BE,99,HU,47.2,21.0 55325,Csanádapáca,1060,BE,99,HU,46.55,20.88333 55342,Csorvás,1060,BE,99,HU,46.63333,20.83333 55389,Dévaványa,1060,BE,99,HU,47.03333,20.96667 55364,Doboz,1060,BE,99,HU,46.73333,21.25 55366,Dombegyház,1060,BE,99,HU,46.33333,21.13333 55402,Elek,1060,BE,99,HU,46.53333,21.25 55443,Füzesgyarmat,1060,BE,99,HU,47.1,21.21667 55470,Gádoros,1060,BE,99,HU,46.66667,20.6 55451,Gyomaendrőd,1060,BE,99,HU,46.93333,20.83333 55452,Gyomaendrődi Járás,1060,BE,99,HU,46.98216,20.84851 55453,Gyula,1060,BE,99,HU,46.65,21.28333 55455,Gyulai Járás,1060,BE,99,HU,46.58626,21.22454 55573,Kaszaper,1060,BE,99,HU,46.46667,20.83333 55642,Kétegyháza,1060,BE,99,HU,46.53333,21.18333 55591,Kevermes,1060,BE,99,HU,46.41667,21.18333 55622,Kondoros,1060,BE,99,HU,46.76667,20.8 55649,Körösladány,1060,BE,99,HU,46.96667,21.08333 55650,Köröstarcsa,1060,BE,99,HU,46.88333,21.03333 55634,Kunágota,1060,BE,99,HU,46.43333,21.05 55670,Lőkösháza,1060,BE,99,HU,46.43333,21.23333 55675,Magyarbánhegyes,1060,BE,99,HU,46.45,20.96667 55685,Medgyesegyháza,1060,BE,99,HU,46.5,21.03333 55730,Méhkerék,1060,BE,99,HU,46.78333,21.45 55688,Mezőberény,1060,BE,99,HU,46.81667,21.03333 55692,Mezőhegyes,1060,BE,99,HU,46.31667,20.81667 55694,Mezőkovácsháza,1060,BE,99,HU,46.4,20.91667 55695,Mezőkovácsházai Járás,1060,BE,99,HU,46.40888,21.00318 55762,Nagyszénás,1060,BE,99,HU,46.68333,20.66667 55796,Okány,1060,BE,99,HU,46.9,21.35 55800,Orosháza,1060,BE,99,HU,46.56667,20.66667 55801,Orosházi Járás,1060,BE,99,HU,46.56355,20.73357 55833,Pusztaföldvár,1060,BE,99,HU,46.53333,20.8 55891,Sarkad,1060,BE,99,HU,46.75,21.38333 55892,Sarkadi Járás,1060,BE,99,HU,46.86154,21.44875 55912,Szabadkígyós,1060,BE,99,HU,46.61667,21.1 55921,Szarvas,1060,BE,99,HU,46.86667,20.55 55922,Szarvasi Járás,1060,BE,99,HU,46.82891,20.63707 55927,Szeghalmi Járás,1060,BE,99,HU,47.0,21.17 55928,Szeghalom,1060,BE,99,HU,47.03333,21.16667 56078,Tótkomlós,1060,BE,99,HU,46.41667,20.73333 56162,Újkígyós,1060,BE,99,HU,46.58333,21.03333 56117,Vésztő,1060,BE,99,HU,46.91667,21.26667 55170,Abaújszántó,1058,BZ,99,HU,48.28333,21.2 55186,Alsózsolca,1058,BZ,99,HU,48.06982,20.88046 55194,Arló,1058,BZ,99,HU,48.18333,20.26667 55195,Arnót,1058,BZ,99,HU,48.13058,20.85832 55196,Aszaló,1058,BZ,99,HU,48.21667,20.96667 55235,Bekecs,1058,BZ,99,HU,48.15,21.18333 55311,Bőcs,1058,BZ,99,HU,48.05,20.96667 55252,Bogács,1058,BZ,99,HU,47.9,20.53333 55254,Boldva,1058,BZ,99,HU,48.21667,20.8 55258,Borsodnádasd,1058,BZ,99,HU,48.11667,20.25 55321,Cigánd,1058,BZ,99,HU,48.25561,21.89195 55322,Cigándi Járás,1058,BZ,99,HU,48.30338,21.87651 55396,Edelény,1058,BZ,99,HU,48.3,20.73333 55397,Edelényi Járás,1058,BZ,99,HU,48.40864,20.77506 55404,Emőd,1058,BZ,99,HU,47.93333,20.81667 55405,Encs,1058,BZ,99,HU,48.33333,21.13333 55407,Encsi Járás,1058,BZ,99,HU,48.39948,21.08169 55416,Farkaslyuk,1058,BZ,99,HU,48.18333,20.31667 55426,Felsőzsolca,1058,BZ,99,HU,48.1,20.86667 55448,Gesztely,1058,BZ,99,HU,48.1,20.96667 55477,Gönc,1058,BZ,99,HU,48.46667,21.28333 55478,Gönci Járás,1058,BZ,99,HU,48.39948,21.28307 55494,Halmaj,1058,BZ,99,HU,48.25,21.0 55498,Harsány,1058,BZ,99,HU,47.96667,20.75 55503,Hejőbába,1058,BZ,99,HU,47.9,20.95 55508,Hernádnémeti,1058,BZ,99,HU,48.06667,20.98333 55532,Izsófalva,1058,BZ,99,HU,48.3,20.66667 55540,Járdánháza,1058,BZ,99,HU,48.15,20.25 55569,Karcsa,1058,BZ,99,HU,48.3113,21.80537 55575,Kazincbarcika,1058,BZ,99,HU,48.25,20.63333 55576,Kazincbarcikai Járás,1058,BZ,99,HU,48.26371,20.57978 55718,Mád,1058,BZ,99,HU,48.19442,21.28208 55720,Mályi,1058,BZ,99,HU,48.01667,20.83333 55686,Megyaszó,1058,BZ,99,HU,48.18333,21.05 55689,Mezőcsát,1058,BZ,99,HU,47.81667,20.91667 55690,Mezőcsáti Járás,1058,BZ,99,HU,47.79841,20.91693 55693,Mezőkeresztes,1058,BZ,99,HU,47.83333,20.7 55696,Mezőkövesd,1058,BZ,99,HU,47.81667,20.58333 55697,Mezőkövesdi Járás,1058,BZ,99,HU,47.84876,20.63623 55701,Mezőzombor,1058,BZ,99,HU,48.15,21.26667 55705,Miskolc,1058,BZ,99,HU,48.1,20.78333 55706,Miskolci Járás,1058,BZ,99,HU,48.08675,20.77353 55710,Monok,1058,BZ,99,HU,48.21102,21.15052 55737,Múcsony,1058,BZ,99,HU,48.26667,20.68333 55769,Nyékládháza,1058,BZ,99,HU,47.98333,20.83333 55797,Olaszliszka,1058,BZ,99,HU,48.25,21.43333 55798,Onga,1058,BZ,99,HU,48.11667,20.91667 56151,Ónod,1058,BZ,99,HU,48.0,20.91667 56154,Ózd,1058,BZ,99,HU,48.21667,20.3 56155,Ózdi Járás,1058,BZ,99,HU,48.18133,20.24874 55832,Prügy,1058,BZ,99,HU,48.08333,21.25 55837,Putnok,1058,BZ,99,HU,48.3,20.43333 55838,Putnoki Járás,1058,BZ,99,HU,48.33694,20.46384 55864,Ricse,1058,BZ,99,HU,48.32565,21.97069 55867,Rudabánya,1058,BZ,99,HU,48.38333,20.63333 55882,Sajóbábony,1058,BZ,99,HU,48.16667,20.73333 55883,Sajókaza,1058,BZ,99,HU,48.28333,20.58333 55884,Sajólád,1058,BZ,99,HU,48.05,20.9 55888,Sajóörös,1058,BZ,99,HU,47.95,21.03333 55885,Sajószentpéter,1058,BZ,99,HU,48.21667,20.71667 55886,Sajószöged,1058,BZ,99,HU,47.95,21.0 55887,Sajóvámos,1058,BZ,99,HU,48.18171,20.83149 55979,Sály,1058,BZ,99,HU,47.95,20.66667 55986,Sárospatak,1058,BZ,99,HU,48.3245,21.57383 55987,Sárospataki Járás,1058,BZ,99,HU,48.29575,21.52716 55994,Sátoraljaújhely,1058,BZ,99,HU,48.39492,21.65871 55995,Sátoraljaújhelyi Járás,1058,BZ,99,HU,48.45898,21.54394 55933,Szendrő,1058,BZ,99,HU,48.4,20.73333 55941,Szentistván,1058,BZ,99,HU,47.76667,20.66667 55948,Szerencs,1058,BZ,99,HU,48.15993,21.2097 55949,Szerencsi Járás,1058,BZ,99,HU,48.14929,21.16865 55958,Szikszó,1058,BZ,99,HU,48.2,20.93333 55959,Szikszói Járás,1058,BZ,99,HU,48.30032,20.95507 55961,Szirmabesenyő,1058,BZ,99,HU,48.15,20.8 56005,Taktaharkány,1058,BZ,99,HU,48.08333,21.13333 56006,Taktaszada,1058,BZ,99,HU,48.11667,21.18333 56062,Tállya,1058,BZ,99,HU,48.23333,21.23333 56012,Tarcal,1058,BZ,99,HU,48.13333,21.35 56033,Tiszakarád,1058,BZ,99,HU,48.2,21.71667 56034,Tiszakeszi,1058,BZ,99,HU,47.78333,21.0 56038,Tiszalúc,1058,BZ,99,HU,48.03774,21.07261 56048,Tiszaújváros,1058,BZ,99,HU,47.93333,21.08333 56049,Tiszaújvárosi Járás,1058,BZ,99,HU,47.92656,20.99321 56050,Tokaj,1058,BZ,99,HU,48.11667,21.41667 56051,Tokaji Járás,1058,BZ,99,HU,48.14014,21.37002 56052,Tolcsva,1058,BZ,99,HU,48.28333,21.45 55263,Budapest,1064,BU,99,HU,47.49835,19.04045 55264,Budapest I. kerület,1064,BU,99,HU,47.49705,19.03961 55265,Budapest II. kerület,1064,BU,99,HU,47.51984,19.02218 55266,Budapest III. kerület,1064,BU,99,HU,47.54157,19.04501 55267,Budapest IV. kerület,1064,BU,99,HU,47.56182,19.08909 55268,Budapest VI. kerület,1064,BU,99,HU,47.50369,19.06583 55269,Budapest VIII. kerület,1064,BU,99,HU,47.48919,19.07012 55270,Budapest X. kerület,1064,BU,99,HU,47.4791,19.15835 55271,Budapest XI. kerület,1064,BU,99,HU,47.47603,19.03605 55272,Budapest XII. kerület,1064,BU,99,HU,47.49192,19.01493 55273,Budapest XIII. kerület,1064,BU,99,HU,47.52978,19.08068 55274,Budapest XV. kerület,1064,BU,99,HU,47.56263,19.11681 55275,Budapest XVI. kerület,1064,BU,99,HU,47.51482,19.17028 55276,Budapest XVII. kerület,1064,BU,99,HU,47.47997,19.25388 55277,Budapest XVIII. kerület,1064,BU,99,HU,47.44417,19.17595 55278,Budapest XX. kerület,1064,BU,99,HU,47.43674,19.10093 55279,Budapest XXI. kerület,1064,BU,99,HU,47.43047,19.07098 55280,Budapest XXII. kerület,1064,BU,99,HU,47.42698,19.04016 55281,Budapest XXIII. kerület,1064,BU,99,HU,47.39788,19.11492 55413,Erzsébetváros,1064,BU,99,HU,47.50207,19.07218 55554,Józsefváros,1064,BU,99,HU,47.48938,19.07292 55607,Kispest,1064,BU,99,HU,47.4515,19.14017 56133,Zugló,1064,BU,99,HU,47.51758,19.10549 55184,Algyő,1031,CS,99,HU,46.33472,20.20849 55192,Apátfalva,1031,CS,99,HU,46.16667,20.58333 56143,Ásotthalom,1031,CS,99,HU,46.19875,19.78334 55207,Baks,1031,CS,99,HU,46.54297,20.10213 55228,Balástya,1031,CS,99,HU,46.42277,20.00816 55257,Bordány,1031,CS,99,HU,46.31843,19.92306 55326,Csanádpalota,1031,CS,99,HU,46.25,20.73333 55324,Csanytelek,1031,CS,99,HU,46.59501,20.12342 55328,Csengele,1031,CS,99,HU,46.54234,19.86358 55337,Csongrád,1031,CS,99,HU,46.71332,20.14241 55338,Csongrádi Járás,1031,CS,99,HU,46.66146,20.08792 55359,Deszk,1031,CS,99,HU,46.21802,20.24322 55365,Domaszék,1031,CS,99,HU,46.24917,20.01111 55434,Fábiánsebestyén,1031,CS,99,HU,46.68333,20.46667 55438,Földeák,1031,CS,99,HU,46.31667,20.5 55432,Forráskút,1031,CS,99,HU,46.36528,19.90973 55521,Hódmezővásárhely,1031,CS,99,HU,46.41667,20.33333 55522,Hódmezővásárhelyi Járás,1031,CS,99,HU,46.43301,20.37598 55610,Kistelek,1031,CS,99,HU,46.4725,19.97972 55611,Kisteleki Járás,1031,CS,99,HU,46.48835,19.99568 55614,Kiszombor,1031,CS,99,HU,46.18333,20.43333 55677,Makó,1031,CS,99,HU,46.21667,20.48333 55678,Makói Járás,1031,CS,99,HU,46.26698,20.542 55681,Maroslele,1031,CS,99,HU,46.26667,20.35 55704,Mindszent,1031,CS,99,HU,46.52362,20.19038 55734,Mórahalmi Járás,1031,CS,99,HU,46.2684,19.82256 55735,Mórahalom,1031,CS,99,HU,46.21806,19.8851 56152,Ópusztaszer,1031,CS,99,HU,46.48592,20.08722 55835,Pusztaszer,1031,CS,99,HU,46.55083,19.98823 55881,Röszke,1031,CS,99,HU,46.18796,20.03372 55868,Ruzsa,1031,CS,99,HU,46.28806,19.74714 55980,Sándorfalva,1031,CS,99,HU,46.36087,20.09889 55923,Szatymaz,1031,CS,99,HU,46.34306,20.0402 55925,Szeged,1031,CS,99,HU,46.253,20.14824 55926,Szegedi Járás,1031,CS,99,HU,46.29536,20.13758 55929,Szegvár,1031,CS,99,HU,46.5874,20.22408 55976,Székkutas,1031,CS,99,HU,46.5,20.53333 55936,Szentes,1031,CS,99,HU,46.65834,20.2608 55937,Szentesi Járás,1031,CS,99,HU,46.66005,20.37314 56081,Tömörkény,1031,CS,99,HU,46.61716,20.04357 56167,Üllés,1031,CS,99,HU,46.33611,19.84454 56136,Zákányszék,1031,CS,99,HU,46.27453,19.88975 56130,Zsombó,1031,CS,99,HU,46.32566,19.97464 55168,Aba,1044,FE,99,HU,47.02907,18.52172 55175,Adony,1044,FE,99,HU,47.1194,18.86493 55181,Alap,1044,FE,99,HU,46.79915,18.68938 55205,Bakonycsernye,1044,FE,99,HU,47.32395,18.07509 55229,Baracs,1044,FE,99,HU,46.88202,18.90658 55230,Baracska,1044,FE,99,HU,47.28225,18.75853 55246,Bicske,1044,FE,99,HU,47.48419,18.64404 55247,Bicskei Járás,1044,FE,99,HU,47.4338,18.56757 55250,Bodajk,1044,FE,99,HU,47.32352,18.23312 55314,Cece,1044,FE,99,HU,46.77056,18.62826 55345,Csákvár,1044,FE,99,HU,47.39184,18.46501 55387,Dég,1044,FE,99,HU,46.86807,18.45042 56139,dunaújváros,1044,FE,99,HU,46.96737,18.93288 55382,Dunaújvárosi Járás,1044,FE,99,HU,47.02801,18.82997 55403,Előszállás,1044,FE,99,HU,46.83094,18.83481 55408,Enying,1044,FE,99,HU,46.93046,18.24202 55409,Enyingi Járás,1044,FE,99,HU,46.8724,18.30975 55410,Ercsi,1044,FE,99,HU,47.25194,18.89623 55414,Etyek,1044,FE,99,HU,47.44794,18.75328 55422,Fehérvárcsurgó,1044,FE,99,HU,47.29349,18.2646 55471,Gárdony,1044,FE,99,HU,47.20942,18.63607 55472,Gárdonyi Járás,1044,FE,99,HU,47.22785,18.63622 55530,Iváncsa,1044,FE,99,HU,47.1567,18.8203 55638,Káloz,1044,FE,99,HU,46.95464,18.48259 55640,Kápolnásnyék,1044,FE,99,HU,47.24004,18.67564 55593,Kincsesbánya,1044,FE,99,HU,47.26444,18.2779 55604,Kisláng,1044,FE,99,HU,46.95744,18.38813 55653,Lajoskomárom,1044,FE,99,HU,46.84201,18.33763 55659,Lepsény,1044,FE,99,HU,46.99036,18.24357 55665,Lovasberény,1044,FE,99,HU,47.30997,18.55177 55722,Mány,1044,FE,99,HU,47.53352,18.65627 55682,Martonvásár,1044,FE,99,HU,47.31601,18.79045 55683,Martonvásári Járás,1044,FE,99,HU,47.2904,18.79945 55691,Mezőfalva,1044,FE,99,HU,46.93184,18.77177 55698,Mezőszilas,1044,FE,99,HU,46.81109,18.47789 55733,Mór,1044,FE,99,HU,47.37787,18.20353 55736,Móri Járás,1044,FE,99,HU,47.34685,18.19838 55839,Pákozd,1044,FE,99,HU,47.21369,18.53306 55848,Pázmánd,1044,FE,99,HU,47.28755,18.65356 55814,Perkáta,1044,FE,99,HU,47.04701,18.78734 55828,Polgárdi,1044,FE,99,HU,47.06099,18.302 55834,Pusztaszabolcs,1044,FE,99,HU,47.13718,18.76704 55836,Pusztavám,1044,FE,99,HU,47.42948,18.22648 55870,Rácalmás,1044,FE,99,HU,47.02263,18.94056 55871,Ráckeresztúr,1044,FE,99,HU,47.2736,18.83343 55981,Sárbogárd,1044,FE,99,HU,46.88692,18.62041 55982,Sárbogárdi Járás,1044,FE,99,HU,46.84036,18.60723 55983,Sárkeresztúr,1044,FE,99,HU,47.0054,18.54391 55985,Sárosd,1044,FE,99,HU,47.04273,18.64357 55989,Sárszentmihály,1044,FE,99,HU,47.15321,18.33879 55896,Seregélyes,1044,FE,99,HU,47.1105,18.565 55908,Soponya,1044,FE,99,HU,47.01485,18.45343 55911,Szabadbattyán,1044,FE,99,HU,47.11902,18.36823 55969,Szárliget,1044,FE,99,HU,47.51581,18.4948 55974,Székesfehérvár,1044,FE,99,HU,47.18995,18.41034 55975,Székesfehérvári Járás,1044,FE,99,HU,47.16531,18.41349 56108,Vál,1044,FE,99,HU,47.36264,18.67931 56096,Velence,1044,FE,99,HU,47.23855,18.65484 56137,Zámoly,1044,FE,99,HU,47.31667,18.4081 55171,Abda,1042,GS,99,HU,47.69464,17.54489 56142,Ágfalva,1042,GS,99,HU,47.68991,16.51658 56144,Ásványráró,1042,GS,99,HU,47.82733,17.49418 55206,Bakonyszentlászló,1042,GS,99,HU,47.38901,17.80321 55236,Beled,1042,GS,99,HU,47.46594,17.09294 55312,Bőny,1042,GS,99,HU,47.65,17.86977 55313,Bősárkány,1042,GS,99,HU,47.68821,17.25 55340,Csorna,1042,GS,99,HU,47.61155,17.25012 55341,Csornai Járás,1042,GS,99,HU,47.58403,17.26041 55418,Farád,1042,GS,99,HU,47.60633,17.20024 55427,Fertőd,1042,GS,99,HU,47.62173,16.87088 55428,Fertőrákos,1042,GS,99,HU,47.72017,16.6504 55429,Fertőszentmiklós,1042,GS,99,HU,47.58996,16.87517 55466,Győr,1042,GS,99,HU,47.68333,17.63512 55467,Győri Járás,1042,GS,99,HU,47.67273,17.67936 55468,Győrszemere,1042,GS,99,HU,47.55256,17.56356 55469,Győrújbarát,1042,GS,99,HU,47.60643,17.64875 55495,Halászi,1042,GS,99,HU,47.8893,17.32615 55539,Jánossomorja,1042,GS,99,HU,47.78621,17.13603 55563,Kapuvár,1042,GS,99,HU,47.59224,17.02886 55564,Kapuvári Járás,1042,GS,99,HU,47.56705,17.04056 55592,Kimle,1042,GS,99,HU,47.81726,17.36642 55645,Kóny,1042,GS,99,HU,47.63053,17.35717 55668,Lébény,1042,GS,99,HU,47.73574,17.39076 55702,Mihályi,1042,GS,99,HU,47.51384,17.09507 55714,Mosonmagyaróvár,1042,GS,99,HU,47.86789,17.26994 55715,Mosonmagyaróvári Járás,1042,GS,99,HU,47.85767,17.28212 55716,Mosonszentmiklós,1042,GS,99,HU,47.72778,17.42784 55742,Nagycenk,1042,GS,99,HU,47.60435,16.69732 55793,Nyúl,1042,GS,99,HU,47.59047,17.68904 56159,Öttevény,1042,GS,99,HU,47.71946,17.48474 55808,Pannonhalma,1042,GS,99,HU,47.54946,17.75535 55809,Pannonhalmi Járás,1042,GS,99,HU,47.45571,17.81335 55854,Pér,1042,GS,99,HU,47.61153,17.80632 55869,Rábapatona,1042,GS,99,HU,47.63224,17.48004 55861,Rajka,1042,GS,99,HU,47.99643,17.19821 55909,Sopron,1042,GS,99,HU,47.68501,16.59049 55910,Soproni Járás,1042,GS,99,HU,47.60385,16.75654 55920,Szany,1042,GS,99,HU,47.46423,17.30402 56074,Tét,1042,GS,99,HU,47.51922,17.50802 56075,Téti Járás,1042,GS,99,HU,47.51515,17.51612 56080,Töltéstava,1042,GS,99,HU,47.62609,17.73376 55202,Bagamér,1063,HB,99,HU,47.44882,21.989 55226,Balmazújváros,1063,HB,99,HU,47.61667,21.35 55227,Balmazújvárosi Járás,1063,HB,99,HU,47.6184,21.14882 55290,Báránd,1063,HB,99,HU,47.3,21.23333 55239,Berettyóújfalu,1063,HB,99,HU,47.21667,21.55 55240,Berettyóújfalui Járás,1063,HB,99,HU,47.14109,21.55233 55248,Biharkeresztes,1063,HB,99,HU,47.13333,21.71667 55249,Biharnagybajom,1063,HB,99,HU,47.21667,21.23333 55349,Csökmő,1063,HB,99,HU,47.03333,21.3 55353,Debrecen,1063,HB,99,HU,47.53333,21.63333 55354,Debreceni Járás,1063,HB,99,HU,47.52706,21.66869 55357,Derecske,1063,HB,99,HU,47.35,21.56667 55358,Derecskei Járás,1063,HB,99,HU,47.38194,21.74836 55393,Ebes,1063,HB,99,HU,47.46667,21.5 55401,Egyek,1063,HB,99,HU,47.63333,20.9 55437,Földes,1063,HB,99,HU,47.3,21.36667 55479,Görbeháza,1063,HB,99,HU,47.83333,21.23333 55480,Hadjúszoboszlói Járás,1063,HB,99,HU,47.4811,21.31 55481,Hajdúbagos,1063,HB,99,HU,47.39295,21.66551 55482,Hajdúböszörmény,1063,HB,99,HU,47.66667,21.51667 55483,Hajdúböszörményi Járás,1063,HB,99,HU,47.74,21.5 55484,Hajdúdorog,1063,HB,99,HU,47.81667,21.5 55485,Hajdúhadház,1063,HB,99,HU,47.68333,21.66667 55486,Hajdúhadházi Járás,1063,HB,99,HU,47.67,21.7 55487,Hajdúnánás,1063,HB,99,HU,47.85,21.43333 55488,Hajdúnánási Járás,1063,HB,99,HU,47.8335,21.25256 55491,Hajdúsámson,1063,HB,99,HU,47.6,21.76667 55489,Hajdúszoboszló,1063,HB,99,HU,47.45,21.4 55490,Hajdúszovát,1063,HB,99,HU,47.38333,21.48333 55515,Hortobágy,1063,HB,99,HU,47.58278,21.15108 55517,Hosszúpályi,1063,HB,99,HU,47.39303,21.7328 55555,Kaba,1063,HB,99,HU,47.35,21.28333 55621,Komádi,1063,HB,99,HU,47.0,21.5 55623,Konyár,1063,HB,99,HU,47.31667,21.66667 55669,Létavértes,1063,HB,99,HU,47.38333,21.9 55703,Mikepércs,1063,HB,99,HU,47.45,21.63333 55713,Monostorpályi,1063,HB,99,HU,47.4,21.78333 55794,Nádudvar,1063,HB,99,HU,47.41667,21.16667 55760,Nagyrábé,1063,HB,99,HU,47.2,21.33333 55792,Nyírábrány,1063,HB,99,HU,47.55311,22.02401 55770,Nyíracsád,1063,HB,99,HU,47.6033,21.97208 55771,Nyíradony,1063,HB,99,HU,47.69746,21.91878 55772,Nyíradonyi Járás,1063,HB,99,HU,47.57873,22.01381 55787,Nyírmártonfalva,1063,HB,99,HU,47.58333,21.9 55826,Pocsaj,1063,HB,99,HU,47.28333,21.81667 55827,Polgár,1063,HB,99,HU,47.86667,21.11667 55859,Püspökladány,1063,HB,99,HU,47.31667,21.11667 55860,Püspökladányi Járás,1063,HB,99,HU,47.31279,21.21177 55992,Sáránd,1063,HB,99,HU,47.4,21.63333 55988,Sárrétudvari,1063,HB,99,HU,47.23333,21.2 56073,Téglás,1063,HB,99,HU,47.71667,21.68333 56026,Tiszacsege,1063,HB,99,HU,47.7,21.0 56110,Vámospércs,1063,HB,99,HU,47.53333,21.9 55169,Abasár,1040,HE,99,HU,47.79705,20.00324 55176,Adács,1040,HE,99,HU,47.6921,19.97696 55188,Andornaktálya,1040,HE,99,HU,47.85,20.41667 55190,Apc,1040,HE,99,HU,47.79419,19.69429 55302,Bélapátfalva,1040,HE,99,HU,48.05,20.36667 55303,Bélapátfalvai Járás,1040,HE,99,HU,48.06386,20.36163 55244,Besenyőtelek,1040,HE,99,HU,47.7,20.43333 55253,Boldog,1040,HE,99,HU,47.60285,19.68839 55346,Csány,1040,HE,99,HU,47.64829,19.82972 55371,Domoszló,1040,HE,99,HU,47.83333,20.11667 55395,Ecséd,1040,HE,99,HU,47.73267,19.76696 55398,Eger,1040,HE,99,HU,47.90265,20.37329 55399,Egerszalók,1040,HE,99,HU,47.86667,20.33333 55400,Egri Járás,1040,HE,99,HU,47.92961,20.37383 55412,Erdőtelek,1040,HE,99,HU,47.68333,20.31667 55425,Felsőtárkány,1040,HE,99,HU,47.96667,20.41667 55441,Füzesabony,1040,HE,99,HU,47.75,20.41667 55442,Füzesabonyi Járás,1040,HE,99,HU,47.72671,20.42875 55459,Gyöngyös,1040,HE,99,HU,47.78257,19.928 55460,Gyöngyöshalász,1040,HE,99,HU,47.74161,19.92876 55461,Gyöngyösi Járás,1040,HE,99,HU,47.79079,19.9543 55462,Gyöngyöspata,1040,HE,99,HU,47.81505,19.78925 55463,Gyöngyössolymos,1040,HE,99,HU,47.81724,19.93619 55464,Gyöngyöstarján,1040,HE,99,HU,47.81369,19.86724 55500,Hatvan,1040,HE,99,HU,47.66667,19.68333 55501,Hatvani Járás,1040,HE,99,HU,47.69468,19.72852 55509,Heréd,1040,HE,99,HU,47.70638,19.63314 55510,Heves,1040,HE,99,HU,47.6,20.28333 55511,Hevesi Járás,1040,HE,99,HU,47.61535,20.31739 55514,Hort,1040,HE,99,HU,47.69081,19.7893 55635,Kál,1040,HE,99,HU,47.73333,20.26667 55571,Karácsond,1040,HE,99,HU,47.72962,20.03076 55586,Kerecsend,1040,HE,99,HU,47.8,20.35 55601,Kisköre,1040,HE,99,HU,47.5,20.5 55620,Kompolt,1040,HE,99,HU,47.73333,20.25 55671,Lőrinci,1040,HE,99,HU,47.73295,19.67867 55676,Maklár,1040,HE,99,HU,47.8,20.41667 55724,Mátraderecske,1040,HE,99,HU,47.95,20.08333 55761,Nagyréde,1040,HE,99,HU,47.76543,19.84819 55802,Ostoros,1040,HE,99,HU,47.86667,20.43333 55810,Parád,1040,HE,99,HU,47.92323,20.02972 55811,Parádsasvár,1040,HE,99,HU,47.9126,19.97709 55856,Pétervására,1040,HE,99,HU,48.01667,20.1 55857,Pétervásárai Járás,1040,HE,99,HU,48.00589,20.09466 55816,Petőfibánya,1040,HE,99,HU,47.7696,19.69988 55831,Poroszló,1040,HE,99,HU,47.65,20.66667 55863,Recsk,1040,HE,99,HU,47.93333,20.11667 55880,Rózsaszentmárton,1040,HE,99,HU,47.782,19.7421 55900,Sirok,1040,HE,99,HU,47.93333,20.2 55957,Szihalom,1040,HE,99,HU,47.76667,20.48333 55960,Szilvásvárad,1040,HE,99,HU,48.1,20.4 56013,Tarnalelesz,1040,HE,99,HU,48.05,20.18333 56014,Tarnaörs,1040,HE,99,HU,47.59499,20.05254 56040,Tiszanána,1040,HE,99,HU,47.56667,20.53333 56109,Vámosgyörk,1040,HE,99,HU,47.68429,19.92924 56098,Verpelét,1040,HE,99,HU,47.85,20.23333 56119,Zagyvaszántó,1040,HE,99,HU,47.77703,19.67092 55173,Abádszalók,1043,JN,99,HU,47.46667,20.6 55182,Alattyán,1043,JN,99,HU,47.42705,20.04219 55243,Besenyszög,1043,JN,99,HU,47.3,20.26667 55320,Cibakháza,1043,JN,99,HU,46.95976,20.19753 55333,Cserkeszőlő,1043,JN,99,HU,46.8632,20.18701 55419,Fegyvernek,1043,JN,99,HU,47.26667,20.53333 55537,Jánoshida,1043,JN,99,HU,47.38333,20.06667 55541,Jászalsószentgyörgy,1043,JN,99,HU,47.36667,20.1 55542,Jászapáti,1043,JN,99,HU,47.51667,20.15 55543,Jászapáti Járás,1043,JN,99,HU,47.46126,20.06567 55553,Jászárokszállás,1043,JN,99,HU,47.64238,19.98038 55544,Jászberény,1043,JN,99,HU,47.5,19.91667 55545,Jászberényi Járás,1043,JN,99,HU,47.565,19.86887 55546,Jászdózsa,1043,JN,99,HU,47.5661,20.01534 55547,Jászjákóhalma,1043,JN,99,HU,47.52038,19.99086 55549,Jászkisér,1043,JN,99,HU,47.45,20.21667 55550,Jászladány,1043,JN,99,HU,47.36667,20.16667 55551,Jászszentandrás,1043,JN,99,HU,47.58333,20.18333 55567,Karcag,1043,JN,99,HU,47.31667,20.93333 55568,Karcagi Járás,1043,JN,99,HU,47.28583,20.84218 55584,Kenderes,1043,JN,99,HU,47.25,20.68333 55585,Kengyel,1043,JN,99,HU,47.08333,20.33333 55615,Kisújszállás,1043,JN,99,HU,47.21667,20.76667 55627,Kunhegyes,1043,JN,99,HU,47.36667,20.63333 55628,Kunhegyesi Járás,1043,JN,99,HU,47.40329,20.59199 55629,Kunmadaras,1043,JN,99,HU,47.43333,20.8 55632,Kunszentmárton,1043,JN,99,HU,46.83916,20.28879 55633,Kunszentmártoni Járás,1043,JN,99,HU,46.87698,20.25179 55699,Mezőtúr,1043,JN,99,HU,47.0,20.63333 55700,Mezőtúri Járás,1043,JN,99,HU,47.02495,20.59046 56156,Öcsöd,1043,JN,99,HU,46.9,20.4 55874,Rákóczifalva,1043,JN,99,HU,47.08333,20.23333 55875,Rákócziújfalu,1043,JN,99,HU,47.06667,20.26667 55915,Szajol,1043,JN,99,HU,47.18333,20.3 55932,Szelevény,1043,JN,99,HU,46.80259,20.20283 55964,Szolnok,1043,JN,99,HU,47.18333,20.2 55965,Szolnoki Járás,1043,JN,99,HU,47.2248,20.19839 56025,Tiszabő,1043,JN,99,HU,47.3,20.48333 56024,Tiszabura,1043,JN,99,HU,47.45,20.46667 56030,Tiszaföldvár,1043,JN,99,HU,46.98333,20.25 56031,Tiszafüred,1043,JN,99,HU,47.61667,20.76667 56032,Tiszafüredi Járás,1043,JN,99,HU,47.53907,20.78879 56041,Tiszapüspöki,1043,JN,99,HU,47.21667,20.31667 56042,Tiszaroff,1043,JN,99,HU,47.4,20.45 56045,Tiszasüly,1043,JN,99,HU,47.38333,20.4 56043,Tiszaszentimre,1043,JN,99,HU,47.48333,20.73333 56044,Tiszaszőlős,1043,JN,99,HU,47.55707,20.71949 56084,Törökszentmiklós,1043,JN,99,HU,47.18333,20.41667 56085,Törökszentmiklósi Járás,1043,JN,99,HU,47.18209,20.44859 56077,Tószeg,1043,JN,99,HU,47.1,20.15 56086,Túrkeve,1043,JN,99,HU,47.1,20.75 56164,Újszász,1043,JN,99,HU,47.3,20.08333 56118,Zagyvarékas,1043,JN,99,HU,47.26667,20.13333 55210,Balassagyarmat,1051,NO,99,HU,48.07296,19.29614 55211,Balassagyarmati Járás,1051,NO,99,HU,48.01657,19.30594 55293,Bátonyterenye,1051,NO,99,HU,47.96962,19.84076 55294,Bátonyterenyei Járás,1051,NO,99,HU,47.97691,19.87345 55237,Bercel,1051,NO,99,HU,47.87057,19.40715 55286,Buják,1051,NO,99,HU,47.88352,19.54381 55363,Diósjenő,1051,NO,99,HU,47.93968,19.04317 56148,Érsekvadkert,1051,NO,99,HU,47.99619,19.20231 55518,Héhalom,1051,NO,99,HU,47.78017,19.58519 55533,Jobbágyi,1051,NO,99,HU,47.83238,19.67762 55565,Karancskeszi,1051,NO,99,HU,48.16353,19.69686 55566,Karancslapujtő,1051,NO,99,HU,48.15,19.73333 55577,Kazár,1051,NO,99,HU,48.04952,19.86143 55725,Mátranovák,1051,NO,99,HU,48.03809,19.98257 55726,Mátraterenye,1051,NO,99,HU,48.03267,19.94762 55727,Mátraverebély,1051,NO,99,HU,47.97421,19.78049 55759,Nagyoroszi,1051,NO,99,HU,48.00503,19.0905 55807,Palotás,1051,NO,99,HU,47.79528,19.59618 55844,Pásztó,1051,NO,99,HU,47.92019,19.69829 55845,Pásztói Járás,1051,NO,99,HU,47.87012,19.60648 55877,Rétság,1051,NO,99,HU,47.92816,19.1372 55878,Rétsági Járás,1051,NO,99,HU,47.91741,19.16101 55865,Rimóc,1051,NO,99,HU,48.03695,19.5301 55866,Romhány,1051,NO,99,HU,47.92618,19.25723 55889,Salgótarján,1051,NO,99,HU,48.09872,19.80303 55890,Salgótarjáni Járás,1051,NO,99,HU,48.10048,19.81548 55907,Somoskőújfalu,1051,NO,99,HU,48.16374,19.82303 55972,Szécsény,1051,NO,99,HU,48.08057,19.52019 55973,Szécsényi Járás,1051,NO,99,HU,48.07301,19.55156 55968,Szurdokpüspöki,1051,NO,99,HU,47.85923,19.69218 56011,Tar,1051,NO,99,HU,47.95371,19.7461 55172,Abony,1059,PE,99,HU,47.1899,20.00476 55174,Acsa,1059,PE,99,HU,47.79425,19.38795 55183,Albertirsa,1059,PE,99,HU,47.24315,19.61686 55185,Alsónémedi,1059,PE,99,HU,47.31524,19.15843 55197,Aszód,1059,PE,99,HU,47.65174,19.4785 55198,Aszódi Járás,1059,PE,99,HU,47.64738,19.5424 55201,Bag,1059,PE,99,HU,47.63333,19.48333 55245,Biatorbágy,1059,PE,99,HU,47.4706,18.81892 55260,Budakalász,1059,PE,99,HU,47.61667,19.05 55261,Budakeszi,1059,PE,99,HU,47.51083,18.92717 55262,Budakeszi Járás,1059,PE,99,HU,47.49788,18.8498 55282,Budaörs,1059,PE,99,HU,47.46181,18.95845 55284,Bugyi,1059,PE,99,HU,47.22748,19.14664 55315,Cegléd,1059,PE,99,HU,47.17266,19.79952 55316,Ceglédbercel,1059,PE,99,HU,47.2237,19.66828 55317,Ceglédi Járás,1059,PE,99,HU,47.2,19.82463 55327,Csemő,1059,PE,99,HU,47.11799,19.69092 55336,Csobánka,1059,PE,99,HU,47.64637,18.96189 55350,Csömör,1059,PE,99,HU,47.55,19.23333 55351,Dabas,1059,PE,99,HU,47.18594,19.31091 55352,Dabasi Járás,1059,PE,99,HU,47.19,19.33 55384,Dánszentmiklós,1059,PE,99,HU,47.21486,19.54695 55385,Dány,1059,PE,99,HU,47.52,19.544 55388,Délegyháza,1059,PE,99,HU,47.24135,19.09019 55362,Diósd,1059,PE,99,HU,47.4095,18.94898 55370,Domony,1059,PE,99,HU,47.65552,19.43229 55392,Dömsöd,1059,PE,99,HU,47.09005,19.01106 55372,Dunabogdány,1059,PE,99,HU,47.79052,19.04125 55374,Dunaharaszti,1059,PE,99,HU,47.3545,19.09822 55375,Dunakeszi,1059,PE,99,HU,47.63641,19.13864 55376,Dunakeszi Járás,1059,PE,99,HU,47.63365,19.16254 55380,Dunavarsány,1059,PE,99,HU,47.27859,19.06617 55394,Ecser,1059,PE,99,HU,47.44389,19.3245 56145,Érd,1059,PE,99,HU,47.39489,18.91361 56146,Érdi Járás,1059,PE,99,HU,47.356,18.90167 55411,Erdőkertes,1059,PE,99,HU,47.67261,19.30786 55417,Farmos,1059,PE,99,HU,47.36067,19.84619 55423,Felsőpakony,1059,PE,99,HU,47.34329,19.23698 55433,Forrópuszta,1059,PE,99,HU,47.45504,19.66001 55436,Fót,1059,PE,99,HU,47.6177,19.1887 55444,Galgahévíz,1059,PE,99,HU,47.61667,19.56667 55445,Galgamácsa,1059,PE,99,HU,47.69562,19.38724 55474,Göd,1059,PE,99,HU,47.68324,19.13417 55475,Gödöllő,1059,PE,99,HU,47.59657,19.35515 55476,Gödöllői Járás,1059,PE,99,HU,47.55127,19.39595 55449,Gomba,1059,PE,99,HU,47.37095,19.53057 55456,Gyál,1059,PE,99,HU,47.38449,19.2214 55457,Gyáli Járás,1059,PE,99,HU,47.36821,19.27543 55458,Gyömrő,1059,PE,99,HU,47.42733,19.40133 55496,Halásztelek,1059,PE,99,HU,47.36173,18.98119 55507,Hernád,1059,PE,99,HU,47.16238,19.43295 55520,Hévízgyörk,1059,PE,99,HU,47.63333,19.51667 55526,Iklad,1059,PE,99,HU,47.66533,19.4361 55527,Inárcs,1059,PE,99,HU,47.262,19.327 55529,Isaszeg,1059,PE,99,HU,47.53011,19.40205 55548,Jászkarajenő,1059,PE,99,HU,47.05,20.06667 55557,Kakucs,1059,PE,99,HU,47.242,19.36467 55570,Kartal,1059,PE,99,HU,47.67133,19.542 55588,Kerepes,1059,PE,99,HU,47.56008,19.28289 55598,Kiskunlacháza,1059,PE,99,HU,47.18839,19.0093 55606,Kismaros,1059,PE,99,HU,47.83742,19.00463 55609,Kistarcsa,1059,PE,99,HU,47.54757,19.26247 55617,Kocsér,1059,PE,99,HU,47.00165,19.92067 55644,Kóka,1059,PE,99,HU,47.48552,19.57876 55624,Kosd,1059,PE,99,HU,47.80791,19.17821 55663,Leányfalu,1059,PE,99,HU,47.71778,19.08585 55674,Maglód,1059,PE,99,HU,47.44258,19.36438 55687,Mende,1059,PE,99,HU,47.43133,19.45628 55707,Mogyoród,1059,PE,99,HU,47.59748,19.2407 55711,Monor,1059,PE,99,HU,47.35133,19.44733 55712,Monori Járás,1059,PE,99,HU,47.3499,19.4768 55753,Nagykáta,1059,PE,99,HU,47.41514,19.7441 55754,Nagykátai Járás,1059,PE,99,HU,47.39109,19.7392 55755,Nagykőrös,1059,PE,99,HU,47.03419,19.77857 55756,Nagykőrösi Járás,1059,PE,99,HU,47.03563,19.79259 55750,Nagykovácsi,1059,PE,99,HU,47.65,19.01667 55757,Nagymaros,1059,PE,99,HU,47.7928,18.95984 55763,Nagytarcsa,1059,PE,99,HU,47.53128,19.28343 55767,Nyáregyháza,1059,PE,99,HU,47.26175,19.50146 56149,Ócsa,1059,PE,99,HU,47.29986,19.23057 56171,Őrbottyán,1059,PE,99,HU,47.68711,19.28239 56158,Örkény,1059,PE,99,HU,47.12991,19.43324 55841,Pánd,1059,PE,99,HU,47.35333,19.63571 55847,Páty,1059,PE,99,HU,47.51709,18.82851 55849,Pécel,1059,PE,99,HU,47.48962,19.34162 55813,Perbál,1059,PE,99,HU,47.58957,18.76099 55855,Péteri,1059,PE,99,HU,47.39104,19.40981 55817,Pilis,1059,PE,99,HU,47.28904,19.54848 55818,Pilisborosjenő,1059,PE,99,HU,47.60744,18.99322 55819,Piliscsaba,1059,PE,99,HU,47.63417,18.82886 55822,Pilisszántó,1059,PE,99,HU,47.66909,18.88762 55820,Pilisszentiván,1059,PE,99,HU,47.60964,18.8994 55821,Pilisszentkereszt,1059,PE,99,HU,47.69143,18.90503 55823,Pilisvörösvár,1059,PE,99,HU,47.61386,18.90893 55824,Pilisvörösvári Járás,1059,PE,99,HU,47.60925,18.86658 55829,Pomáz,1059,PE,99,HU,47.64227,19.02784 55872,Ráckeve,1059,PE,99,HU,47.16095,18.94478 55873,Ráckevei Járás,1059,PE,99,HU,47.15158,19.01456 55905,Solymár,1059,PE,99,HU,47.59246,18.93212 55996,Sóskút,1059,PE,99,HU,47.40665,18.82247 55998,Sülysáp,1059,PE,99,HU,47.45206,19.53369 55914,Szada,1059,PE,99,HU,47.63333,19.31667 55971,Százhalombatta,1059,PE,99,HU,47.32949,18.93878 55934,Szentendre,1059,PE,99,HU,47.66943,19.07561 55935,Szentendrei Járás,1059,PE,99,HU,47.71146,19.02524 55946,Szentlőrinckáta,1059,PE,99,HU,47.51947,19.75286 55947,Szentmártonkáta,1059,PE,99,HU,47.45419,19.70143 55950,Szigetcsép,1059,PE,99,HU,47.26492,18.97048 55951,Szigethalom,1059,PE,99,HU,47.32228,19.00262 55952,Szigetszentmiklós,1059,PE,99,HU,47.34382,19.04335 55953,Szigetszentmiklósi Járás,1059,PE,99,HU,47.30566,19.02829 55956,Szigetújfalu,1059,PE,99,HU,47.23417,18.92746 55962,Szob,1059,PE,99,HU,47.81921,18.8702 55963,Szobi Járás,1059,PE,99,HU,47.93419,18.85438 55977,Sződ,1059,PE,99,HU,47.72439,19.17046 55978,Sződliget,1059,PE,99,HU,47.73259,19.14749 56061,Táborfalva,1059,PE,99,HU,47.09942,19.47837 56003,Tahitótfalu,1059,PE,99,HU,47.75,19.1 56004,Taksony,1059,PE,99,HU,47.32968,19.06695 56063,Tápióbicske,1059,PE,99,HU,47.36096,19.68609 56064,Tápiógyörgye,1059,PE,99,HU,47.33505,19.95276 56069,Tápióság,1059,PE,99,HU,47.402,19.63047 56065,Tápiószecső,1059,PE,99,HU,47.45,19.60923 56066,Tápiószele,1059,PE,99,HU,47.33609,19.87724 56067,Tápiószentmárton,1059,PE,99,HU,47.3399,19.74648 56068,Tápiószőlős,1059,PE,99,HU,47.30248,19.85133 56071,Tárnok,1059,PE,99,HU,47.37327,18.84579 56018,Telki,1059,PE,99,HU,47.54791,18.82816 56076,Tóalmás,1059,PE,99,HU,47.50782,19.66657 56079,Tököl,1059,PE,99,HU,47.32178,18.96249 56083,Törökbálint,1059,PE,99,HU,47.42931,18.91356 56082,Törtel,1059,PE,99,HU,47.12209,19.93714 56058,Tura,1059,PE,99,HU,47.60924,19.60279 56161,Újhartyán,1059,PE,99,HU,47.21981,19.38638 56163,Újszilvás,1059,PE,99,HU,47.27477,19.92477 56168,Üllő,1059,PE,99,HU,47.38771,19.35533 56165,Úri,1059,PE,99,HU,47.41429,19.52762 56169,Üröm,1059,PE,99,HU,47.59674,19.01583 56105,Vác,1059,PE,99,HU,47.77591,19.13612 56106,Váci Járás,1059,PE,99,HU,47.78316,19.23882 56107,Vácszentlászló,1059,PE,99,HU,47.574,19.53771 56090,Valkó,1059,PE,99,HU,47.56391,19.51267 56094,Vecsés,1059,PE,99,HU,47.40705,19.28648 56095,Vecsési Járás,1059,PE,99,HU,47.42923,19.30136 56097,Veresegyház,1059,PE,99,HU,47.6459,19.29536 56099,Verőce,1059,PE,99,HU,47.82468,19.03484 56103,Visegrád,1059,PE,99,HU,47.78526,18.9709 56132,Zsámbék,1059,PE,99,HU,47.54814,18.72011 56131,Zsámbok,1059,PE,99,HU,47.54381,19.61048 56140,Ádánd,1035,SO,99,HU,46.85931,18.16442 55199,Babócsa,1035,SO,99,HU,46.04155,17.34332 55214,Balatonberény,1035,SO,99,HU,46.70701,17.32013 55215,Balatonboglár,1035,SO,99,HU,46.77525,17.64415 55216,Balatonfenyves,1035,SO,99,HU,46.71542,17.49223 55217,Balatonföldvár,1035,SO,99,HU,46.85255,17.88123 55221,Balatonlelle,1035,SO,99,HU,46.78318,17.69498 55222,Balatonszabadi,1035,SO,99,HU,46.89397,18.13737 55223,Balatonszárszó,1035,SO,99,HU,46.82946,17.82426 55231,Barcs,1035,SO,99,HU,45.96,17.45861 55232,Barcsi Járás,1035,SO,99,HU,46.03687,17.47434 55242,Berzence,1035,SO,99,HU,46.20907,17.1481 55306,Böhönye,1035,SO,99,HU,46.41345,17.38037 55343,Csurgó,1035,SO,99,HU,46.25314,17.1006 55344,Csurgói Járás,1035,SO,99,HU,46.29502,17.10021 55430,Fonyód,1035,SO,99,HU,46.75552,17.57945 55431,Fonyódi Járás,1035,SO,99,HU,46.67289,17.7 55556,Kadarkút,1035,SO,99,HU,46.23623,17.62014 55560,Kaposmérő,1035,SO,99,HU,46.36167,17.704 55561,Kaposvár,1035,SO,99,HU,46.36667,17.8 55562,Kaposvári Járás,1035,SO,99,HU,46.39791,17.7699 55572,Karád,1035,SO,99,HU,46.69076,17.84136 55643,Kéthely,1035,SO,99,HU,46.64605,17.39362 55666,Lábod,1035,SO,99,HU,46.20535,17.45419 55656,Lengyeltóti,1035,SO,99,HU,46.67013,17.64398 55679,Marcali,1035,SO,99,HU,46.58498,17.41196 55680,Marcali Járás,1035,SO,99,HU,46.54382,17.39203 55738,Nagyatád,1035,SO,99,HU,46.22961,17.35788 55739,Nagyatádi Járás,1035,SO,99,HU,46.252,17.3752 55740,Nagybajom,1035,SO,99,HU,46.39232,17.51147 55893,Segesd,1035,SO,99,HU,46.34142,17.35132 55901,Siófok,1035,SO,99,HU,46.90413,18.058 55902,Siófoki Járás,1035,SO,99,HU,46.8506,17.99625 55906,Somogyvár,1035,SO,99,HU,46.5814,17.66289 56001,Tab,1035,SO,99,HU,46.73135,18.03201 56002,Tabi Járás,1035,SO,99,HU,46.68037,18.0056 56017,Taszár,1035,SO,99,HU,46.37467,17.90594 56126,Zamárdi,1035,SO,99,HU,46.88488,17.95366 55177,Ajak,1045,SZ,99,HU,48.17664,22.06273 55187,Anarcs,1045,SZ,99,HU,48.17642,22.11167 55189,Apagy,1045,SZ,99,HU,47.96431,21.93539 55193,Aranyosapáti,1045,SZ,99,HU,48.20595,22.25916 55208,Baktalórántháza,1045,SZ,99,HU,48.0,22.08333 55209,Baktalórántházai Járás,1045,SZ,99,HU,48.00436,22.02449 55224,Balkány,1045,SZ,99,HU,47.77066,21.86314 55307,Bököny,1045,SZ,99,HU,47.73333,21.75 55285,Buj,1045,SZ,99,HU,48.1,21.65 55329,Csenger,1045,SZ,99,HU,47.83582,22.68096 55330,Csengeri Járás,1045,SZ,99,HU,47.83045,22.5981 55356,Demecser,1045,SZ,99,HU,48.11648,21.92624 55391,Döge,1045,SZ,99,HU,48.26246,22.06339 55367,Dombrád,1045,SZ,99,HU,48.23333,21.93333 55406,Encsencs,1045,SZ,99,HU,47.73333,22.11667 55420,Fehérgyarmat,1045,SZ,99,HU,47.98333,22.51667 55421,Fehérgyarmati Járás,1045,SZ,99,HU,48.00436,22.63014 55435,Fényeslitke,1045,SZ,99,HU,48.27133,22.10009 55473,Gégény,1045,SZ,99,HU,48.15,21.95 55454,Gyulaháza,1045,SZ,99,HU,48.13333,22.11667 55513,Hodász,1045,SZ,99,HU,47.91834,22.20153 55524,Ibrány,1045,SZ,99,HU,48.12329,21.70953 55525,Ibrányi Járás,1045,SZ,99,HU,48.12794,21.69344 55636,Kállósemjén,1045,SZ,99,HU,47.86081,21.93929 55637,Kálmánháza,1045,SZ,99,HU,47.88333,21.58333 55639,Kántorjánosi,1045,SZ,99,HU,47.93333,22.15 55641,Kék,1045,SZ,99,HU,48.11667,21.88333 55582,Kemecse,1045,SZ,99,HU,48.07532,21.80625 55583,Kemecsei Járás,1045,SZ,99,HU,48.10048,21.88414 55605,Kisléta,1045,SZ,99,HU,47.84244,22.00393 55612,Kisvárda,1045,SZ,99,HU,48.21667,22.08333 55613,Kisvárdai Járás,1045,SZ,99,HU,48.221,22.06415 55616,Kocsord,1045,SZ,99,HU,47.93912,22.38333 55646,Kótaj,1045,SZ,99,HU,48.05,21.71667 55662,Levelek,1045,SZ,99,HU,47.96282,21.98537 55721,Mándok,1045,SZ,99,HU,48.32149,22.19107 55723,Máriapócs,1045,SZ,99,HU,47.88303,22.02501 55728,Mátészalka,1045,SZ,99,HU,47.95528,22.32348 55729,Mátészalkai Járás,1045,SZ,99,HU,47.92961,22.31892 55732,Mérk,1045,SZ,99,HU,47.78824,22.38038 55743,Nagycserkesz,1045,SZ,99,HU,47.96667,21.53333 55744,Nagydobos,1045,SZ,99,HU,48.05759,22.30423 55746,Nagyecsed,1045,SZ,99,HU,47.86547,22.39159 55747,Nagyhalász,1045,SZ,99,HU,48.13266,21.76104 55751,Nagykálló,1045,SZ,99,HU,47.87491,21.84082 55752,Nagykállói Járás,1045,SZ,99,HU,47.79994,21.84753 55764,Napkor,1045,SZ,99,HU,47.93797,21.86763 55775,Nyírbátor,1045,SZ,99,HU,47.83333,22.13333 55776,Nyírbátori Járás,1045,SZ,99,HU,47.77553,22.11755 55777,Nyírbéltek,1045,SZ,99,HU,47.7,22.13333 55774,Nyírbogát,1045,SZ,99,HU,47.8034,22.06561 55773,Nyírbogdány,1045,SZ,99,HU,48.05723,21.88242 55778,Nyírcsaholy,1045,SZ,99,HU,47.90383,22.3363 55779,Nyíregyháza,1045,SZ,99,HU,47.95539,21.71671 55780,Nyíregyházi Járás,1045,SZ,99,HU,47.97691,21.64463 55781,Nyírgyulaj,1045,SZ,99,HU,47.88622,22.09781 55782,Nyírkarász,1045,SZ,99,HU,48.09477,22.10463 55783,Nyírlugos,1045,SZ,99,HU,47.69315,22.04476 55784,Nyírmada,1045,SZ,99,HU,48.06667,22.2 55785,Nyírmeggyes,1045,SZ,99,HU,47.91667,22.26667 55786,Nyírmihálydi,1045,SZ,99,HU,47.73976,21.96445 55788,Nyírpazony,1045,SZ,99,HU,47.98333,21.8 55789,Nyírtass,1045,SZ,99,HU,48.11667,22.03333 55790,Nyírtelek,1045,SZ,99,HU,48.01667,21.63333 55791,Nyírvasvári,1045,SZ,99,HU,47.81667,22.18683 56150,Ófehértó,1045,SZ,99,HU,47.93333,22.05 56157,Ököritófülpös,1045,SZ,99,HU,47.91862,22.5081 56153,Ópályi,1045,SZ,99,HU,47.99771,22.32617 55846,Pátroha,1045,SZ,99,HU,48.16667,22.0 55815,Petneháza,1045,SZ,99,HU,48.06084,22.07485 55830,Porcsalma,1045,SZ,99,HU,47.88333,22.56667 55862,Rakamaz,1045,SZ,99,HU,48.12372,21.46429 55916,Szakoly,1045,SZ,99,HU,47.76667,21.91667 55918,Szamosszeg,1045,SZ,99,HU,48.04561,22.36582 56015,Tarpa,1045,SZ,99,HU,48.1048,22.53744 56022,Tiszabercel,1045,SZ,99,HU,48.15,21.65 56023,Tiszabezdéd,1045,SZ,99,HU,48.36667,22.15 56027,Tiszadada,1045,SZ,99,HU,48.03333,21.25 56028,Tiszadob,1045,SZ,99,HU,48.01667,21.16667 56029,Tiszaeszlár,1045,SZ,99,HU,48.05,21.46667 56037,Tiszalök,1045,SZ,99,HU,48.01667,21.38333 56039,Tiszanagyfalu,1045,SZ,99,HU,48.1,21.48333 56046,Tiszavasvári,1045,SZ,99,HU,47.96667,21.35 56047,Tiszavasvári Járás,1045,SZ,99,HU,47.98606,21.36545 56056,Tornyospálca,1045,SZ,99,HU,48.26667,22.18333 56057,Tunyogmatolcs,1045,SZ,99,HU,47.96667,22.46667 56059,Tuzsér,1045,SZ,99,HU,48.34407,22.11762 56060,Tyukod,1045,SZ,99,HU,47.85378,22.5633 56160,Újfehértó,1045,SZ,99,HU,47.8,21.68333 56088,Vaja,1045,SZ,99,HU,48.00574,22.16761 56114,Vásárosnamény,1045,SZ,99,HU,48.12542,22.31325 56115,Vásárosnaményi Járás,1045,SZ,99,HU,48.17981,22.35859 56134,Záhony,1045,SZ,99,HU,48.40906,22.17614 56135,Záhonyi Járás,1045,SZ,99,HU,48.34914,22.18925 55291,Báta,1038,TO,99,HU,46.12864,18.77027 55292,Bátaszék,1038,TO,99,HU,46.19373,18.72307 55251,Bogyiszló,1038,TO,99,HU,46.38638,18.82962 55308,Bölcske,1038,TO,99,HU,46.74102,18.96736 55255,Bonyhád,1038,TO,99,HU,46.29921,18.53024 55256,Bonyhádi Járás,1038,TO,99,HU,46.33998,18.49739 55355,Decs,1038,TO,99,HU,46.28428,18.76 55390,Döbrököz,1038,TO,99,HU,46.42178,18.23953 55368,Dombóvár,1038,TO,99,HU,46.37657,18.13696 55369,Dombóvári Járás,1038,TO,99,HU,46.45592,18.19076 55373,Dunaföldvár,1038,TO,99,HU,46.80713,18.92763 55379,Dunaszentgyörgy,1038,TO,99,HU,46.52852,18.81771 55415,Fadd,1038,TO,99,HU,46.46476,18.81925 55465,Gyönk,1038,TO,99,HU,46.55603,18.47694 55523,Hőgyész,1038,TO,99,HU,46.49697,18.41841 55528,Iregszemcse,1038,TO,99,HU,46.69286,18.18581 55673,Madocsa,1038,TO,99,HU,46.6879,18.95791 55745,Nagydorog,1038,TO,99,HU,46.62749,18.65565 55758,Nagymányok,1038,TO,99,HU,46.27911,18.45489 55795,Németkér,1038,TO,99,HU,46.71637,18.76311 56170,Őcsény,1038,TO,99,HU,46.3137,18.75749 55803,Ozora,1038,TO,99,HU,46.75133,18.4001 55805,Paks,1038,TO,99,HU,46.6221,18.85569 55806,Paksi Járás,1038,TO,99,HU,46.66035,18.78572 55825,Pincehely,1038,TO,99,HU,46.68095,18.43935 55899,Simontornya,1038,TO,99,HU,46.75462,18.5549 55924,Szedres,1038,TO,99,HU,46.47551,18.68305 55930,Szekszárd,1038,TO,99,HU,46.35014,18.70905 55931,Szekszárdi Járás,1038,TO,99,HU,46.33998,18.67893 55940,Szentgálpuszta,1038,TO,99,HU,46.37479,18.62601 56007,Tamási,1038,TO,99,HU,46.63333,18.28333 56008,Tamási Járás,1038,TO,99,HU,46.65424,18.35857 56019,Tengelic,1038,TO,99,HU,46.52878,18.71117 56053,Tolna,1038,TO,99,HU,46.42677,18.78248 56054,Tolnai Járás,1038,TO,99,HU,46.42541,18.82691 56129,Zomba,1038,TO,99,HU,46.41084,18.56577 55309,Bük,1039,VA,99,HU,47.38486,16.75065 55318,Celldömölk,1039,VA,99,HU,47.25713,17.15027 55319,Celldömölki Járás,1039,VA,99,HU,47.25001,17.13209 55332,Csepreg,1039,VA,99,HU,47.40098,16.70881 55447,Gencsapáti,1039,VA,99,HU,47.28496,16.59575 55534,Ják,1039,VA,99,HU,47.14249,16.58148 55538,Jánosháza,1039,VA,99,HU,47.11937,17.16503 55647,Körmend,1039,VA,99,HU,47.01096,16.60596 55648,Körmendi Járás,1039,VA,99,HU,46.92164,16.53291 55651,Kőszeg,1039,VA,99,HU,47.38922,16.541 55652,Kőszegi Járás,1039,VA,99,HU,47.375,16.6565 55876,Répcelak,1039,VA,99,HU,47.42105,17.01795 55990,Sárvár,1039,VA,99,HU,47.25395,16.93525 55991,Sárvári Járás,1039,VA,99,HU,47.23868,16.93299 55938,Szentgotthárd,1039,VA,99,HU,46.95261,16.27358 55939,Szentgotthárdi Járás,1039,VA,99,HU,46.93674,16.30362 55966,Szombathely,1039,VA,99,HU,47.23088,16.62155 55967,Szombathelyi Járás,1039,VA,99,HU,47.21037,16.63954 56070,Táplánszentkereszt,1039,VA,99,HU,47.19496,16.69613 56092,Vasvár,1039,VA,99,HU,47.04928,16.79954 56093,Vasvári Járás,1039,VA,99,HU,47.03487,16.85939 56116,Vép,1039,VA,99,HU,47.23041,16.72248 55178,Ajka,1054,VE,99,HU,47.10196,17.55892 55179,Ajkai Járás,1054,VE,99,HU,47.07988,17.56375 55200,Badacsonytomaj,1054,VE,99,HU,46.80711,17.51385 55212,Balatonalmádi,1054,VE,99,HU,47.03526,18.02076 55213,Balatonalmádi Járás,1054,VE,99,HU,47.04174,18.09617 55218,Balatonfüred,1054,VE,99,HU,46.96188,17.87187 55219,Balatonfüredi Járás,1054,VE,99,HU,46.93952,17.79411 55220,Balatonkenese,1054,VE,99,HU,47.04019,18.10671 55241,Berhida,1054,VE,99,HU,47.11131,18.12948 55323,Csabrendek,1054,VE,99,HU,47.01356,17.29108 55335,Csetény,1054,VE,99,HU,47.31806,17.99208 55339,Csopak,1054,VE,99,HU,46.97709,17.91819 55360,Devecser,1054,VE,99,HU,47.10316,17.43802 55361,Devecseri Járás,1054,VE,99,HU,47.16836,17.32271 55492,Hajmáskér,1054,VE,99,HU,47.14513,18.01964 55506,Herend,1054,VE,99,HU,47.13333,17.75 55664,Litér,1054,VE,99,HU,47.10104,18.00454 55766,Nemesvámos,1054,VE,99,HU,47.05514,17.87477 56172,Ősi,1054,VE,99,HU,47.14722,18.18833 55842,Pápa,1054,VE,99,HU,47.33004,17.4674 55843,Pápai Járás,1054,VE,99,HU,47.33769,17.49663 55858,Pétfürdő,1054,VE,99,HU,47.16667,18.11667 55879,Révfülöp,1054,VE,99,HU,46.82573,17.61967 55999,Sümeg,1054,VE,99,HU,46.97703,17.28209 56000,Sümegi Járás,1054,VE,99,HU,47.02648,17.26779 55943,Szentkirályszabadja,1054,VE,99,HU,47.0576,17.97052 56009,Tapolca,1054,VE,99,HU,46.88152,17.44117 56010,Tapolcai Járás,1054,VE,99,HU,46.89833,17.4951 56020,Tihany,1054,VE,99,HU,46.91369,17.88918 56166,Úrkút,1054,VE,99,HU,47.08505,17.64393 56112,Várpalota,1054,VE,99,HU,47.19936,18.13954 56113,Várpalotai Járás,1054,VE,99,HU,47.18514,18.12211 56100,Veszprém,1054,VE,99,HU,47.09327,17.91149 56101,Veszprémi Járás,1054,VE,99,HU,47.09666,17.82157 56138,Zánka,1054,VE,99,HU,46.87146,17.68473 56127,Zirc,1054,VE,99,HU,47.26362,17.87373 56128,Zirci Járás,1054,VE,99,HU,47.28583,17.88412 55234,Becsehely,1046,ZA,99,HU,46.44755,16.7771 55334,Cserszegtomaj,1046,ZA,99,HU,46.80165,17.22096 55450,Gyenesdiás,1046,ZA,99,HU,46.77058,17.2866 55519,Hévíz,1046,ZA,99,HU,46.79031,17.18408 55589,Keszthely,1046,ZA,99,HU,46.76812,17.24317 55590,Keszthelyi Járás,1046,ZA,99,HU,46.78356,17.22381 55657,Lenti,1046,ZA,99,HU,46.62403,16.53863 55658,Lenti Járás,1046,ZA,99,HU,46.65649,16.57443 55660,Letenye,1046,ZA,99,HU,46.43301,16.72583 55661,Letenyei Járás,1046,ZA,99,HU,46.50552,16.76503 55717,Murakeresztúr,1046,ZA,99,HU,46.36422,16.88177 55748,Nagykanizsa,1046,ZA,99,HU,46.45347,16.99104 55749,Nagykanizsai Járás,1046,ZA,99,HU,46.51873,17.04433 55804,Pacsa,1046,ZA,99,HU,46.71981,17.01401 55984,Sármellék,1046,ZA,99,HU,46.71221,17.16865 56087,Türje,1046,ZA,99,HU,46.98366,17.10742 56104,Vonyarcvashegy,1046,ZA,99,HU,46.75742,17.31172 56120,Zalaegerszeg,1046,ZA,99,HU,46.84,16.84389 56121,Zalaegerszegi Járás,1046,ZA,99,HU,46.8,16.83 56122,Zalakomár,1046,ZA,99,HU,46.53795,17.18094 56123,Zalalövő,1046,ZA,99,HU,46.84802,16.5875 56124,Zalaszentgrót,1046,ZA,99,HU,46.94474,17.07925 56125,Zalaszentgróti Járás,1046,ZA,99,HU,46.9207,17.10095 135228,Álftanes,3431,1,100,IS,64.1,-22.01667 135181,Garðabær,3431,1,100,IS,64.08865,-21.92298 135186,Hafnarfjörður,3431,1,100,IS,64.0671,-21.93774 135196,Kjósarhreppur,3431,1,100,IS,64.30644,-21.49919 135197,Kópavogur,3431,1,100,IS,64.11234,-21.91298 135200,Mosfellsbaer,3431,1,100,IS,64.15,-21.65 135201,Mosfellsbær,3431,1,100,IS,64.16667,-21.7 135206,Reykjavík,3431,1,100,IS,64.13548,-21.89541 135211,Seltjarnarnes,3431,1,100,IS,64.15309,-21.99499 135166,Borgarfjarðarhreppur,3433,7,100,IS,65.43401,-13.82933 135168,Breiðdalshreppur,3433,7,100,IS,64.83333,-14.25 135172,Egilsstaðir,3433,7,100,IS,65.26687,-14.39485 135173,Eskifjörður,3433,7,100,IS,65.07306,-14.01525 135177,Fjarðabyggð,3433,7,100,IS,65.08333,-14.0 135179,Fljótsdalshérað,3433,7,100,IS,65.2502,-15.37211 135178,Fljótsdalshreppur,3433,7,100,IS,64.85275,-15.2568 135191,Höfn,3433,7,100,IS,64.25388,-15.21212 135203,Neskaupstaður,3433,7,100,IS,65.14819,-13.68368 135207,Reyðarfjörður,3433,7,100,IS,65.03164,-14.21832 135163,Akureyri,3437,6,100,IS,65.68353,-18.0878 135170,Dalvík,3437,6,100,IS,65.97018,-18.52861 135171,Dalvíkurbyggð,3437,6,100,IS,65.87318,-18.60844 135175,Eyjafjarðarsveit,3437,6,100,IS,65.33333,-18.16667 135176,Fjallabyggð,3437,6,100,IS,66.05962,-18.7822 135185,Grýtubakkahreppur,3437,6,100,IS,65.98333,-18.11667 135192,Hörgársveit,3437,6,100,IS,65.64828,-18.49599 135194,Húsavík,3437,6,100,IS,66.04148,-17.33834 135198,Langanesbyggð,3437,6,100,IS,66.05186,-15.18969 135199,Laugar,3437,6,100,IS,65.72159,-17.37352 135212,Siglufjörður,3437,6,100,IS,66.15198,-18.90815 135217,Skútustaðahreppur,3437,6,100,IS,65.17177,-16.7789 135221,Svalbarðsstrandarhreppur,3437,6,100,IS,65.74138,-18.03513 135223,Tjörneshreppur,3437,6,100,IS,66.11667,-17.2 135233,Þingeyjarsveit,3437,6,100,IS,65.37229,-17.59927 135161,Akrahreppur,3435,5,100,IS,65.35505,-18.79572 135193,Húnaþing Vestra,3435,5,100,IS,65.25,-20.91667 135209,Sauðárkrókur,3435,5,100,IS,65.74611,-19.63944 135214,Skagabyggð,3435,5,100,IS,65.95,-20.25 135222,Sveitarfélagið Skagafjörður,3435,5,100,IS,65.50018,-19.44566 135182,Garður,3430,2,100,IS,64.06558,-22.64656 135183,Grindavík,3430,2,100,IS,63.83849,-22.43931 135195,Keflavík,3430,2,100,IS,64.00492,-22.56242 135205,Reykjanesbær,3430,2,100,IS,63.99813,-22.56111 135208,Sandgerði,3430,2,100,IS,64.03762,-22.70799 135227,Vogar,3430,2,100,IS,63.9816,-22.38473 135229,Ásahreppur,3434,8,100,IS,63.87589,-20.59484 135164,Bláskógabyggð,3434,8,100,IS,64.41667,-20.33333 135180,Flóahreppur,3434,8,100,IS,63.89569,-20.80159 135184,Grímsnes- og Grafningshreppur,3434,8,100,IS,64.08533,-20.9671 135188,Hrunamannahreppur,3434,8,100,IS,64.40944,-19.72237 135190,Hveragerði,3434,8,100,IS,64.00039,-21.18602 135202,Mýrdalshreppur,3434,8,100,IS,63.5,-19.0 135210,Selfoss,3434,8,100,IS,63.93311,-20.99712 135213,Skaftárhreppur,3434,8,100,IS,63.95948,-18.14491 135215,Skeiða- og Gnúpverjahreppur,3434,8,100,IS,64.34738,-19.37757 135225,Vestmannaeyjabær,3434,8,100,IS,63.43877,-20.269 135226,Vestmannaeyjar,3434,8,100,IS,63.44273,-20.27339 135234,Þorlákshöfn,3434,8,100,IS,63.85591,-21.38337 135162,Akranes,3436,3,100,IS,64.32179,-22.0749 135165,Borgarbyggð,3436,3,100,IS,64.71446,-21.23788 135167,Borgarnes,3436,3,100,IS,64.53834,-21.92064 135169,Dalabyggð,3436,3,100,IS,65.10121,-21.72871 135174,Eyja- og Miklaholtshreppur,3436,3,100,IS,64.85846,-22.54557 135187,Helgafellssveit,3436,3,100,IS,64.99069,-22.78948 135189,Hvalfjarðarsveit,3436,3,100,IS,64.44265,-21.61086 135232,Ólafsvík,3436,3,100,IS,64.89429,-23.70918 135216,Skorradalshreppur,3436,3,100,IS,64.51667,-21.5 135218,Snæfellsbær,3436,3,100,IS,64.86667,-23.5 135220,Stykkishólmur,3436,3,100,IS,65.07537,-22.72977 135230,Ísafjarðarbær,3432,4,100,IS,66.07586,-23.12794 135231,Ísafjörður,3432,4,100,IS,66.07475,-23.13498 135204,Reykhólahreppur,3432,4,100,IS,65.6099,-22.33324 135219,Strandabyggð,3432,4,100,IS,65.77455,-21.95725 135224,Tálknafjarðarhreppur,3432,4,100,IS,65.61667,-23.88333 57082,Athenry,1087,C,105,IE,53.29639,-8.74306 57092,Ballaghaderreen,1087,C,105,IE,53.9,-8.58333 57093,Ballina,1087,C,105,IE,54.11667,-9.16667 57095,Ballinasloe,1087,C,105,IE,53.3275,-8.21944 57097,Ballinrobe,1087,C,105,IE,53.63333,-9.23333 57099,Ballisodare,1087,C,105,IE,54.2111,-8.50865 57107,Ballyhaunis,1087,C,105,IE,53.76667,-8.76667 57111,Ballymote,1087,C,105,IE,54.08333,-8.51667 57121,Bearna,1087,C,105,IE,53.25194,-9.14972 57123,Belmullet,1087,C,105,IE,54.225,-9.99083 57132,Boyle,1087,C,105,IE,53.96667,-8.3 57147,Carrick-on-Shannon,1087,C,105,IE,53.94694,-8.09 57153,Castlebar,1087,C,105,IE,53.85,-9.3 57164,Castlerea,1087,C,105,IE,53.76667,-8.5 57176,Claregalway,1087,C,105,IE,53.33861,-8.945 57177,Claremorris,1087,C,105,IE,53.71667,-9.0 57178,Clifden,1087,C,105,IE,53.48907,-10.0191 57187,Collooney,1087,C,105,IE,54.18333,-8.5 57197,County Galway,1087,C,105,IE,53.33333,-9.0 57198,County Leitrim,1087,C,105,IE,54.11667,-8.0 57204,Crossmolina,1087,C,105,IE,54.1,-9.31667 57253,Foxford,1087,C,105,IE,53.9807,-9.11551 57255,Gaillimh,1087,C,105,IE,53.27194,-9.04889 57256,Galway City,1087,C,105,IE,53.2877,-9.05004 57259,Gort,1087,C,105,IE,53.06639,-8.81667 57267,Inishcrone,1087,C,105,IE,54.21591,-9.09197 57291,Kiltamagh,1087,C,105,IE,53.85,-9.0 57293,Kinlough,1087,C,105,IE,54.45,-8.28333 57310,Loughrea,1087,C,105,IE,53.19694,-8.56694 57318,Manorhamilton,1087,C,105,IE,54.30639,-8.17611 57321,Mayo County,1087,C,105,IE,53.9,-9.25 57337,Moycullen,1087,C,105,IE,53.33783,-9.18002 57356,Oranmore,1087,C,105,IE,53.26833,-8.92 57357,Oughterard,1087,C,105,IE,53.41667,-9.33333 57366,Portumna,1087,C,105,IE,53.08917,-8.21889 57385,Roscommon,1087,C,105,IE,53.75,-8.25 57400,Sligo,1087,C,105,IE,54.25,-8.66667 57404,Strandhill,1087,C,105,IE,54.27194,-8.59333 57406,Swinford,1087,C,105,IE,53.95,-8.95 57416,Tobercurry,1087,C,105,IE,54.05,-8.73333 57421,Tuam,1087,C,105,IE,53.51667,-8.85 57430,Westport,1087,C,105,IE,53.8,-9.51667 57063,Abbeyleix,1073,L,105,IE,52.91331,-7.34456 57068,An Iarmhí,1073,L,105,IE,53.5,-7.5 57069,An Longfort,1073,L,105,IE,53.66667,-7.75 57070,An Mhí,1073,L,105,IE,53.66667,-6.66667 57071,An Muileann gCearr,1073,L,105,IE,53.53333,-7.35 57072,An Ros,1073,L,105,IE,53.52424,-6.10497 57074,Ardee,1073,L,105,IE,53.85972,-6.54056 57076,Arklow,1073,L,105,IE,52.79306,-6.14139 57077,Artane,1073,L,105,IE,53.38712,-6.2138 57078,Ashbourne,1073,L,105,IE,53.51163,-6.39821 57079,Ashford,1073,L,105,IE,53.00833,-6.11139 57081,Athboy,1073,L,105,IE,53.62327,-6.91434 57083,Athgarvan,1073,L,105,IE,53.15229,-6.78173 57084,Athlone,1073,L,105,IE,53.43333,-7.95 57085,Athy,1073,L,105,IE,52.99139,-6.98028 57086,Aughrim,1073,L,105,IE,52.85333,-6.3275 57087,Bagenalstown,1073,L,105,IE,52.70031,-6.96181 57089,Balally,1073,L,105,IE,53.27504,-6.23594 57090,Balbriggan,1073,L,105,IE,53.60846,-6.1831 57091,Baldoyle,1073,L,105,IE,53.39972,-6.12583 57096,Ballinroad,1073,L,105,IE,52.51789,-6.40619 57098,Ballinteer,1073,L,105,IE,53.27409,-6.25397 57100,Ballivor,1073,L,105,IE,53.53167,-6.96111 57101,Ballyboden,1073,L,105,IE,53.28056,-6.31639 57105,Ballyfermot,1073,L,105,IE,53.34283,-6.3548 57106,Ballygerry,1073,L,105,IE,52.24917,-6.35739 57109,Ballylinan,1073,L,105,IE,52.94497,-7.04073 57110,Ballymahon,1073,L,105,IE,53.56667,-7.76667 57112,Ballymun,1073,L,105,IE,53.39807,-6.26693 57113,Ballyragget,1073,L,105,IE,52.78889,-7.33028 57115,Balrothery,1073,L,105,IE,53.58828,-6.18728 57116,Baltinglass,1073,L,105,IE,52.93722,-6.70917 57117,Banagher,1073,L,105,IE,53.18861,-7.98667 57120,Bayside,1073,L,105,IE,53.38895,-6.14041 57122,Beaumont,1073,L,105,IE,53.38721,-6.22713 57125,Birr,1073,L,105,IE,53.09139,-7.91333 57126,Blackrock,1073,L,105,IE,53.3015,-6.1778 57127,Blanchardstown,1073,L,105,IE,53.38806,-6.37556 57129,Blessington,1073,L,105,IE,53.17,-6.5325 57130,Bonnybrook,1073,L,105,IE,53.39835,-6.20749 57131,Booterstown,1073,L,105,IE,53.30447,-6.19985 57133,Bray,1073,L,105,IE,53.20278,-6.09833 57134,Bunclody,1073,L,105,IE,52.6553,-6.65359 57137,Cabinteely,1073,L,105,IE,53.26973,-6.16058 57138,Cabra,1073,L,105,IE,53.36694,-6.29444 57142,Callan,1073,L,105,IE,52.545,-7.39111 57143,Carlingford,1073,L,105,IE,54.04,-6.18833 57144,Carlow,1073,L,105,IE,52.84083,-6.92611 57146,Carnew,1073,L,105,IE,52.70806,-6.49444 57154,Castlebellingham,1073,L,105,IE,53.90083,-6.39028 57156,Castlebridge,1073,L,105,IE,52.38639,-6.44944 57157,Castlecomer,1073,L,105,IE,52.80611,-7.21056 57159,Castledermot,1073,L,105,IE,52.90889,-6.84222 57161,Castleknock,1073,L,105,IE,53.37483,-6.36336 57163,Castlepollard,1073,L,105,IE,53.67935,-7.29736 57165,Castletown,1073,L,105,IE,52.72306,-6.18944 57167,Celbridge,1073,L,105,IE,53.34165,-6.54419 57168,Chapelizod,1073,L,105,IE,53.34846,-6.34301 57169,Charlesland,1073,L,105,IE,53.12771,-6.06347 57170,Cherry Orchard,1073,L,105,IE,53.33605,-6.37799 57171,Cherryville,1073,L,105,IE,53.15694,-6.96667 57174,Clane,1073,L,105,IE,53.29139,-6.68917 57175,Clara,1073,L,105,IE,53.3425,-7.61389 57179,Clogherhead,1073,L,105,IE,53.79361,-6.2375 57181,Clondalkin,1073,L,105,IE,53.32444,-6.39722 57183,Clonskeagh,1073,L,105,IE,53.31467,-6.23148 57188,Confey,1073,L,105,IE,53.37923,-6.49052 57190,Coolock,1073,L,105,IE,53.3887,-6.19998 57194,County Carlow,1073,L,105,IE,52.66667,-6.83333 57201,Courtown,1073,L,105,IE,52.64424,-6.22899 57205,Crumlin,1073,L,105,IE,53.32154,-6.31439 57206,Daingean,1073,L,105,IE,53.29611,-7.28944 57207,Dalkey,1073,L,105,IE,53.27833,-6.10028 57208,Darndale,1073,L,105,IE,53.39948,-6.18886 57209,Derrinturn,1073,L,105,IE,53.34167,-6.94111 57213,Dollymount,1073,L,105,IE,53.36489,-6.18032 57214,Donabate,1073,L,105,IE,53.48722,-6.15194 57215,Donaghmede,1073,L,105,IE,53.39845,-6.16179 57217,Donnybrook,1073,L,105,IE,53.31375,-6.22274 57218,Donnycarney,1073,L,105,IE,53.3735,-6.20976 57219,Drogheda,1073,L,105,IE,53.71889,-6.34778 57220,Droichead Nua,1073,L,105,IE,53.18194,-6.79667 57221,Dromiskin,1073,L,105,IE,53.92538,-6.40292 57222,Drumcondra,1073,L,105,IE,53.37058,-6.25298 57223,Dublin,1073,L,105,IE,53.33306,-6.24889 57224,Dublin City,1073,L,105,IE,53.35512,-6.24922 57225,Duleek,1073,L,105,IE,53.65667,-6.41917 57236,Dún Laoghaire,1073,L,105,IE,53.29395,-6.13586 57237,Dún Laoghaire-Rathdown,1073,L,105,IE,53.29436,-6.13489 57226,Dunboyne,1073,L,105,IE,53.41901,-6.47375 57227,Dundalk,1073,L,105,IE,54.0,-6.41667 57228,Dundrum,1073,L,105,IE,53.29067,-6.25714 57231,Dunleer,1073,L,105,IE,53.835,-6.39611 57235,Dunshaughlin,1073,L,105,IE,53.5125,-6.54 57238,Eadestown,1073,L,105,IE,53.20278,-6.57806 57239,Edenderry,1073,L,105,IE,53.33948,-7.04752 57240,Edgeworthstown,1073,L,105,IE,53.7,-7.61667 57241,Enfield,1073,L,105,IE,53.41419,-6.83229 57243,Enniscorthy,1073,L,105,IE,52.50083,-6.55778 57244,Enniskerry,1073,L,105,IE,53.1925,-6.16917 57245,Fairview,1073,L,105,IE,53.36597,-6.23985 57246,Ferbane,1073,L,105,IE,53.26944,-7.82694 57248,Ferns,1073,L,105,IE,52.58833,-6.49972 57250,Fingal County,1073,L,105,IE,53.45909,-6.21942 57251,Finglas,1073,L,105,IE,53.38917,-6.29694 57252,Firhouse,1073,L,105,IE,53.28167,-6.33917 57254,Foxrock,1073,L,105,IE,53.26667,-6.17417 57257,Glasnevin,1073,L,105,IE,53.37851,-6.28028 57258,Gorey,1073,L,105,IE,52.67472,-6.2925 57260,Graiguenamanagh,1073,L,105,IE,52.54028,-6.95472 57261,Granard,1073,L,105,IE,53.77928,-7.49429 57262,Greenhills,1073,L,105,IE,53.33467,-6.30302 57263,Greystones,1073,L,105,IE,53.14083,-6.06306 57265,Hartstown,1073,L,105,IE,53.39306,-6.42694 57266,Howth,1073,L,105,IE,53.38778,-6.06528 57268,Jobstown,1073,L,105,IE,53.27866,-6.40803 57269,Johnstown,1073,L,105,IE,53.23833,-6.62222 57271,Kells,1073,L,105,IE,53.72639,-6.87917 57273,Kentstown,1073,L,105,IE,53.62754,-6.52674 57274,Kilbeggan,1073,L,105,IE,53.36944,-7.50333 57275,Kilcock,1073,L,105,IE,53.40222,-6.67083 57276,Kilcoole,1073,L,105,IE,53.10278,-6.065 57277,Kilcullen,1073,L,105,IE,53.13028,-6.74444 57278,Kildare,1073,L,105,IE,53.16667,-6.75 57279,Kilkenny,1073,L,105,IE,52.58333,-7.25 57280,Kill,1073,L,105,IE,53.25139,-6.59167 57282,Killester,1073,L,105,IE,53.37322,-6.20431 57286,Kilmacanoge,1073,L,105,IE,53.16722,-6.13361 57288,Kilpedder,1073,L,105,IE,53.10917,-6.10667 57289,Kilquade,1073,L,105,IE,53.09743,-6.08411 57294,Kinnegad,1073,L,105,IE,53.45222,-7.09972 57296,Kinsealy-Drinan,1073,L,105,IE,53.44395,-6.20334 57297,Knocklyon,1073,L,105,IE,53.2803,-6.3313 57298,Lanesborough,1073,L,105,IE,53.66667,-7.98333 57299,Laois,1073,L,105,IE,53.0,-7.4 57300,Laytown,1073,L,105,IE,53.68194,-6.23917 57302,Leixlip,1073,L,105,IE,53.36583,-6.49556 57305,Little Bray,1073,L,105,IE,53.20444,-6.12083 57306,Loch Garman,1073,L,105,IE,52.5,-6.66667 57307,Longford,1073,L,105,IE,53.72536,-7.79823 57308,Longwood,1073,L,105,IE,53.45389,-6.92194 57309,Loughlinstown,1073,L,105,IE,53.24389,-6.13306 57314,Lú,1073,L,105,IE,53.83333,-6.5 57311,Lucan,1073,L,105,IE,53.35736,-6.44859 57313,Lusk,1073,L,105,IE,53.52743,-6.16423 57316,Malahide,1073,L,105,IE,53.45083,-6.15444 57319,Marino,1073,L,105,IE,53.37022,-6.23646 57320,Maynooth,1073,L,105,IE,53.385,-6.59361 57324,Milltown,1073,L,105,IE,53.31301,-6.2453 57326,Moate,1073,L,105,IE,53.39389,-7.71722 57328,Monasterevin,1073,L,105,IE,53.14056,-7.06639 57329,Monkstown,1073,L,105,IE,53.29308,-6.15312 57330,Mooncoin,1073,L,105,IE,52.28944,-7.24833 57331,Moone,1073,L,105,IE,52.97556,-6.815 57333,Mount Merrion,1073,L,105,IE,53.30008,-6.21504 57334,Mountmellick,1073,L,105,IE,53.11361,-7.32 57335,Mountrath,1073,L,105,IE,52.99889,-7.47278 57341,Naas,1073,L,105,IE,53.21583,-6.66694 57342,Navan,1073,L,105,IE,53.65278,-6.68139 57345,New Ross,1073,L,105,IE,52.39667,-6.93667 57346,Newcastle,1073,L,105,IE,53.30111,-6.50222 57351,Newtown Trim,1073,L,105,IE,53.55611,-6.77 57352,Newtownmountkennedy,1073,L,105,IE,53.09052,-6.11149 57353,Old Kilcullen,1073,L,105,IE,53.10639,-6.76528 57354,Oldbawn,1073,L,105,IE,53.27556,-6.3675 57355,Oldcastle,1073,L,105,IE,53.76648,-7.16284 57358,Palmerstown,1073,L,105,IE,53.35019,-6.37778 57360,Piltown,1073,L,105,IE,52.35333,-7.34028 57361,Portarlington,1073,L,105,IE,53.16222,-7.19111 57362,Portlaoise,1073,L,105,IE,53.03441,-7.29979 57364,Portmarnock,1073,L,105,IE,53.42306,-6.1375 57365,Portraine,1073,L,105,IE,53.49667,-6.11111 57367,Prosperous,1073,L,105,IE,53.29028,-6.75389 57368,Raheny,1073,L,105,IE,53.38681,-6.18067 57371,Rathangan,1073,L,105,IE,53.22139,-6.995 57372,Rathcoole,1073,L,105,IE,53.28278,-6.47278 57374,Rathdowney,1073,L,105,IE,52.85472,-7.58028 57375,Rathdrum,1073,L,105,IE,52.92639,-6.23556 57376,Rathgar,1073,L,105,IE,53.31457,-6.275 57378,Rathmines,1073,L,105,IE,53.32028,-6.26333 57379,Rathnew,1073,L,105,IE,52.99056,-6.08528 57380,Rathwire,1073,L,105,IE,53.50767,-7.1351 57381,Ratoath,1073,L,105,IE,53.50806,-6.4625 57382,Rialto,1073,L,105,IE,53.33625,-6.29718 57383,Ringsend,1073,L,105,IE,53.34194,-6.22639 57384,Rochfortbridge,1073,L,105,IE,53.41417,-7.29611 57387,Rosslare,1073,L,105,IE,52.27583,-6.38444 57389,Saggart,1073,L,105,IE,53.28028,-6.44444 57390,Sallins,1073,L,105,IE,53.24889,-6.66611 57391,Sallynoggin,1073,L,105,IE,53.27917,-6.14058 57392,Sandyford,1073,L,105,IE,53.2747,-6.2253 57393,Sandymount,1073,L,105,IE,53.32815,-6.22224 57394,Shankill,1073,L,105,IE,53.22611,-6.12444 57397,Skerries,1073,L,105,IE,53.58278,-6.10833 57399,Slane,1073,L,105,IE,53.71,-6.54333 57401,South Dublin,1073,L,105,IE,53.28595,-6.37739 57402,Stamullin,1073,L,105,IE,53.62889,-6.26833 57403,Stradbally,1073,L,105,IE,53.01556,-7.15278 57405,Sutton,1073,L,105,IE,53.38947,-6.11059 57407,Swords,1073,L,105,IE,53.45972,-6.21806 57408,Tallaght,1073,L,105,IE,53.2859,-6.37344 57410,Templeogue,1073,L,105,IE,53.29528,-6.30889 57411,Terenure,1073,L,105,IE,53.30972,-6.28528 57412,Termonfeckin,1073,L,105,IE,53.76333,-6.26778 57413,Thomastown,1073,L,105,IE,52.52667,-7.13722 57419,Trim,1073,L,105,IE,53.555,-6.79167 57422,Tullamore,1073,L,105,IE,53.27389,-7.48889 57423,Tullow,1073,L,105,IE,52.80028,-6.73694 57424,Tullyallen,1073,L,105,IE,53.73611,-6.42278 57425,Uíbh Fhailí,1073,L,105,IE,53.25,-7.5 57426,Valleymount,1073,L,105,IE,53.10389,-6.55361 57432,Wicklow,1073,L,105,IE,53.0,-6.41667 57062,Abbeyfeale,1080,M,105,IE,52.38139,-9.3025 57064,Adare,1080,M,105,IE,52.56194,-8.79556 57065,Aghada,1080,M,105,IE,51.83917,-8.21222 57067,An Clár,1080,M,105,IE,52.83333,-9.0 57073,Annacotty,1080,M,105,IE,52.66768,-8.53121 57075,Ardnacrusha,1080,M,105,IE,52.70908,-8.61431 57080,Askeaton,1080,M,105,IE,52.59972,-8.97556 57094,Ballina,1080,M,105,IE,52.80778,-8.43556 57103,Ballybunnion,1080,M,105,IE,52.51108,-9.67097 57118,Bandon,1080,M,105,IE,51.74694,-8.7425 57119,Bantry,1080,M,105,IE,51.68333,-9.45 57128,Blarney,1080,M,105,IE,51.93333,-8.56667 57139,Caherconlish,1080,M,105,IE,52.59361,-8.47028 57140,Cahersiveen,1080,M,105,IE,51.94861,-10.22222 57141,Cahir,1080,M,105,IE,52.37694,-7.92167 57148,Carrick-on-Suir,1080,M,105,IE,52.34917,-7.41306 57150,Carrigaline,1080,M,105,IE,51.81167,-8.39861 57151,Carrigtwohill,1080,M,105,IE,51.90833,-8.26333 57152,Cashel,1080,M,105,IE,52.51583,-7.88556 57158,Castleconnell,1080,M,105,IE,52.71389,-8.49944 57160,Castleisland,1080,M,105,IE,52.23333,-9.46667 57162,Castlemartyr,1080,M,105,IE,51.91028,-8.05389 57172,Ciarraí,1080,M,105,IE,52.16667,-9.75 57173,Cill Airne,1080,M,105,IE,52.0598,-9.50858 57180,Clonakilty,1080,M,105,IE,51.62306,-8.87056 57184,Cloyne,1080,M,105,IE,51.86278,-8.12444 57185,Cluain Meala,1080,M,105,IE,52.355,-7.70389 57186,Cobh,1080,M,105,IE,51.85046,-8.2948 57192,Cork,1080,M,105,IE,51.89797,-8.47061 57193,Cork City,1080,M,105,IE,51.89755,-8.46773 57195,County Cork,1080,M,105,IE,51.96667,-8.58333 57200,County Tipperary,1080,M,105,IE,52.66667,-7.83333 57202,Croom,1080,M,105,IE,52.51944,-8.71778 57203,Crosshaven,1080,M,105,IE,51.79833,-8.30083 57210,Derry,1080,M,105,IE,51.58666,-9.05026 57212,Dingle,1080,M,105,IE,52.14083,-10.26889 57229,Dungarvan,1080,M,105,IE,52.08806,-7.62528 57233,Dunmanway,1080,M,105,IE,51.71667,-9.11667 57234,Dunmore East,1080,M,105,IE,52.15108,-6.99872 57242,Ennis,1080,M,105,IE,52.84361,-8.98639 57247,Fermoy,1080,M,105,IE,52.13583,-8.27583 57249,Fethard,1080,M,105,IE,52.46722,-7.69111 57270,Kanturk,1080,M,105,IE,52.16667,-8.9 57272,Kenmare,1080,M,105,IE,51.88333,-9.58333 57281,Killaloe,1080,M,105,IE,52.80667,-8.44361 57283,Killorglin,1080,M,105,IE,52.1,-9.78333 57284,Killumney,1080,M,105,IE,51.87243,-8.64781 57287,Kilmallock,1080,M,105,IE,52.4,-8.57722 57290,Kilrush,1080,M,105,IE,52.63972,-9.48333 57295,Kinsale,1080,M,105,IE,51.7075,-8.53056 57304,Listowel,1080,M,105,IE,52.44639,-9.485 57312,Luimneach,1080,M,105,IE,52.66472,-8.62306 57315,Macroom,1080,M,105,IE,51.90663,-8.96968 57317,Mallow,1080,M,105,IE,52.13333,-8.63333 57322,Midleton,1080,M,105,IE,51.91526,-8.18052 57323,Millstreet,1080,M,105,IE,52.05935,-9.06031 57325,Mitchelstown,1080,M,105,IE,52.26583,-8.26806 57332,Moroe,1080,M,105,IE,52.65111,-8.39611 57338,Moyross,1080,M,105,IE,52.68198,-8.63955 57343,Nenagh,1080,M,105,IE,52.86194,-8.19667 57344,Nenagh Bridge,1080,M,105,IE,52.88167,-8.19583 57347,Newcastle West,1080,M,105,IE,52.44917,-9.06111 57348,Newmarket on Fergus,1080,M,105,IE,52.76,-8.89556 57349,Newport,1080,M,105,IE,52.71111,-8.40972 57359,Passage West,1080,M,105,IE,51.87389,-8.34444 57363,Portlaw,1080,M,105,IE,52.28833,-7.32056 57388,Ráth Luirc,1080,M,105,IE,52.35,-8.68333 57373,Rathcormac,1080,M,105,IE,52.07694,-8.28194 57377,Rathkeale,1080,M,105,IE,52.52444,-8.93806 57386,Roscrea,1080,M,105,IE,52.95111,-7.80167 57395,Shannon,1080,M,105,IE,52.70389,-8.86417 57396,Sixmilebridge,1080,M,105,IE,52.74139,-8.77417 57398,Skibbereen,1080,M,105,IE,51.55,-9.26667 57409,Templemore,1080,M,105,IE,52.79472,-7.83389 57414,Thurles,1080,M,105,IE,52.68194,-7.80222 57415,Tipperary,1080,M,105,IE,52.47333,-8.15583 57417,Tower,1080,M,105,IE,51.92599,-8.60747 57420,Trá Mhór,1080,M,105,IE,52.16235,-7.15244 57418,Tralee,1080,M,105,IE,52.27042,-9.70264 57428,Waterford,1080,M,105,IE,52.25833,-7.11194 57429,Watergrasshill,1080,M,105,IE,52.01139,-8.34417 57431,Whitegate,1080,M,105,IE,51.83056,-8.22972 57433,Youghal,1080,M,105,IE,51.95,-7.85056 57066,An Cabhán,1086,U,105,IE,53.91667,-7.25 57088,Bailieborough,1086,U,105,IE,53.91667,-6.96667 57102,Ballybofey,1086,U,105,IE,54.8,-7.78333 57104,Ballyconnell,1086,U,105,IE,54.11667,-7.58333 57108,Ballyjamesduff,1086,U,105,IE,53.86528,-7.20278 57114,Ballyshannon,1086,U,105,IE,54.5,-8.18333 57124,Belturbet,1086,U,105,IE,54.1,-7.45 57135,Buncrana,1086,U,105,IE,55.13333,-7.45 57136,Bundoran,1086,U,105,IE,54.47782,-8.28094 57145,Carndonagh,1086,U,105,IE,55.25,-7.26667 57149,Carrickmacross,1086,U,105,IE,53.97278,-6.71889 57155,Castleblayney,1086,U,105,IE,54.11667,-6.73333 57166,Cavan,1086,U,105,IE,53.99083,-7.36056 57182,Clones,1086,U,105,IE,54.18333,-7.23333 57189,Convoy,1086,U,105,IE,54.86083,-7.66556 57191,Cootehill,1086,U,105,IE,54.0725,-7.08194 57196,County Donegal,1086,U,105,IE,54.91667,-8.0 57199,County Monaghan,1086,U,105,IE,54.25,-7.0 57211,Derrybeg,1086,U,105,IE,55.08333,-8.28944 57216,Donegal,1086,U,105,IE,54.65378,-8.11134 57230,Dungloe,1086,U,105,IE,54.95111,-8.35917 57232,Dunlewy,1086,U,105,IE,55.01667,-8.1 57264,Gweedore,1086,U,105,IE,55.05028,-8.23194 57285,Killybegs,1086,U,105,IE,54.63333,-8.45 57292,Kingscourt,1086,U,105,IE,53.90806,-6.80556 57301,Leifear,1086,U,105,IE,54.83194,-7.48361 57303,Letterkenny,1086,U,105,IE,54.95,-7.73333 57327,Monaghan,1086,U,105,IE,54.25,-6.96667 57336,Moville,1086,U,105,IE,55.19153,-7.03873 57339,Muff,1086,U,105,IE,55.06667,-7.26667 57340,Mullagh,1086,U,105,IE,53.81306,-6.95139 57350,Newtown Cunningham,1086,U,105,IE,54.99639,-7.51917 57369,Ramelton,1086,U,105,IE,55.03673,-7.64923 57370,Raphoe,1086,U,105,IE,54.87472,-7.59833 57427,Virginia,1086,U,105,IE,53.83389,-7.07556 135240,Abbateggio,1679,65,107,IT,42.22421,14.01001 135250,Acciano,1679,65,107,IT,42.17677,13.71783 135325,Aielli,1679,65,107,IT,42.08146,13.59113 135342,Alanno,1679,65,107,IT,42.29552,13.97084 135347,Alba Adriatica,1679,65,107,IT,42.83176,13.9259 135400,Alfedena,1679,65,107,IT,41.73545,14.035 135440,Altino,1679,65,107,IT,42.09954,14.33267 135477,Ancarano,1679,65,107,IT,42.83767,13.74662 135523,Anversa degli Abruzzi,1679,65,107,IT,41.99478,13.80379 135565,Archi,1679,65,107,IT,42.09135,14.3827 135597,Ari,1679,65,107,IT,42.28967,14.25856 135602,Arielli,1679,65,107,IT,42.26003,14.31004 135638,Arsita,1679,65,107,IT,42.50266,13.78516 135672,Ateleta,1679,65,107,IT,41.85435,14.19806 135675,Atessa,1679,65,107,IT,42.07018,14.45049 135679,Atri,1679,65,107,IT,42.57642,13.98899 135704,Avezzano,1679,65,107,IT,42.02896,13.42641 135795,Balsorano,1679,65,107,IT,41.80982,13.5598 135796,Balsorano Nuovo,1679,65,107,IT,41.80881,13.56069 135826,Barberi,1679,65,107,IT,42.44072,14.04268 135847,Barete,1679,65,107,IT,42.45009,13.28061 135858,Barisciano,1679,65,107,IT,42.32465,13.59036 135870,Barrea,1679,65,107,IT,41.75543,13.99095 135881,Basciano,1679,65,107,IT,42.59639,13.73561 135938,Bellante,1679,65,107,IT,42.74421,13.80234 135939,Bellante Stazione,1679,65,107,IT,42.7065,13.83953 136062,Bisegna,1679,65,107,IT,41.92113,13.7576 136063,Bisenti,1679,65,107,IT,42.52883,13.7995 136108,Bolognano,1679,65,107,IT,42.21814,13.96011 136119,Bomba,1679,65,107,IT,42.03343,14.36656 136189,Borgo Santa Maria Immacolata,1679,65,107,IT,42.61172,14.04553 136227,Borrello,1679,65,107,IT,41.9173,14.30535 136343,Brittoli,1679,65,107,IT,42.31518,13.86026 136385,Bucchianico,1679,65,107,IT,42.30368,14.18377 136397,Bugnara,1679,65,107,IT,42.02383,13.86141 136430,Bussi sul Tirino,1679,65,107,IT,42.21321,13.82511 136470,Cagnano Amiterno,1679,65,107,IT,42.45744,13.22789 136494,Calascio,1679,65,107,IT,42.32595,13.69699 136625,Campli,1679,65,107,IT,42.72679,13.68692 136635,Campo di Giove,1679,65,107,IT,42.01013,14.03941 136683,Campotosto,1679,65,107,IT,42.55884,13.36799 136716,Canistro Inferiore,1679,65,107,IT,41.94101,13.41194 136731,Canosa Sannita,1679,65,107,IT,42.29629,14.30514 136736,Cansano,1679,65,107,IT,42.0035,14.01341 136752,Canzano,1679,65,107,IT,42.64564,13.8041 136765,Capestrano,1679,65,107,IT,42.26807,13.76779 136771,Capistrello,1679,65,107,IT,41.97223,13.39616 136774,Capitignano,1679,65,107,IT,42.52041,13.30122 136786,Caporciano,1679,65,107,IT,42.25001,13.67455 136790,Cappadocia,1679,65,107,IT,42.00755,13.27806 136794,Cappelle sul Tavo,1679,65,107,IT,42.47709,14.10735 136831,Caramanico Terme,1679,65,107,IT,42.15593,14.0048 136835,Carapelle Calvisio,1679,65,107,IT,42.29908,13.68643 136920,Carpineto della Nora,1679,65,107,IT,42.33365,13.86062 136919,Carpineto Sinello,1679,65,107,IT,42.01044,14.50418 136936,Carsoli,1679,65,107,IT,42.09882,13.08856 136945,Carunchio,1679,65,107,IT,41.91761,14.52683 136954,Casacanditella,1679,65,107,IT,42.24643,14.2004 136961,Casalanguida,1679,65,107,IT,42.03752,14.49613 136965,Casalbordino-Miracoli,1679,65,107,IT,42.15354,14.59912 136995,Casalincontrada,1679,65,107,IT,42.29744,14.13511 137083,Casoli,1679,65,107,IT,42.61723,13.9791 137133,Castel Castagna,1679,65,107,IT,42.54294,13.7164 137165,Castel del Monte,1679,65,107,IT,42.36544,13.72592 137169,Castel di Ieri,1679,65,107,IT,42.11353,13.742 137173,Castel di Sangro,1679,65,107,IT,41.78392,14.10653 137136,Castel Frentano,1679,65,107,IT,42.19875,14.35643 137205,Castelguidone,1679,65,107,IT,41.82258,14.52286 137210,Castellafiume,1679,65,107,IT,41.98913,13.3344 137211,Castellalto,1679,65,107,IT,42.67705,13.82101 137242,Castelli,1679,65,107,IT,42.48476,13.71201 137295,Castelnuovo Vomano,1679,65,107,IT,42.62933,13.85003 137321,Castelvecchio Calvisio,1679,65,107,IT,42.31134,13.6872 137322,Castelvecchio Subequo,1679,65,107,IT,42.12881,13.72868 137347,Castiglione a Casauria,1679,65,107,IT,42.23601,13.89832 137342,Castiglione Messer Marino,1679,65,107,IT,41.86833,14.44996 137343,Castiglione Messer Raimondo,1679,65,107,IT,42.53194,13.87953 137360,Castilenti,1679,65,107,IT,42.53334,13.9171 137395,Catignano,1679,65,107,IT,42.34697,13.9519 137462,Celano,1679,65,107,IT,42.08077,13.517 137465,Celenza sul Trigno,1679,65,107,IT,41.87198,14.57893 137479,Cellino Attanasio,1679,65,107,IT,42.58574,13.8605 137505,Cepagatti,1679,65,107,IT,42.36506,14.07424 137525,Cerchio,1679,65,107,IT,42.06357,13.60006 137555,Cermignano,1679,65,107,IT,42.59131,13.7954 137560,Cerratina,1679,65,107,IT,42.39007,14.10338 137672,Chieti,1679,65,107,IT,42.34827,14.16494 137772,Città SantAngelo,1679,65,107,IT,42.51254,14.06203 137787,Civita dAntino,1679,65,107,IT,41.88629,13.47215 137789,Civitaluparella,1679,65,107,IT,41.9449,14.30135 137793,Civitaquana,1679,65,107,IT,42.32578,13.90012 137795,Civitella Alfedena,1679,65,107,IT,41.76533,13.94271 137796,Civitella Casanova,1679,65,107,IT,42.36391,13.88514 137802,Civitella del Tronto,1679,65,107,IT,42.77298,13.67626 137798,Civitella Messer Raimondo,1679,65,107,IT,42.08893,14.21701 137799,Civitella Roveto,1679,65,107,IT,41.91329,13.42396 137826,Cocullo,1679,65,107,IT,42.03283,13.775 137857,Collarmele,1679,65,107,IT,42.06031,13.6267 137876,Collecorvino,1679,65,107,IT,42.46024,14.01564 137877,Colledara,1679,65,107,IT,42.53918,13.67556 137878,Colledimacine,1679,65,107,IT,42.0037,14.20079 137879,Colledimezzo,1679,65,107,IT,41.98606,14.3869 137884,Collelongo,1679,65,107,IT,41.88659,13.5838 137889,Collepietro,1679,65,107,IT,42.22089,13.78101 137890,Colleranesco,1679,65,107,IT,42.72112,13.93732 137911,Cologna Spiaggia,1679,65,107,IT,42.72152,13.98311 137923,Colonnella,1679,65,107,IT,42.8723,13.86987 137941,Cominio,1679,65,107,IT,42.31248,13.4325 137980,Controguerra,1679,65,107,IT,42.85398,13.81775 137989,Coppito,1679,65,107,IT,42.3673,13.34358 138008,Corfinio,1679,65,107,IT,42.12149,13.8394 138044,Corropoli,1679,65,107,IT,42.8272,13.83471 138069,Cortino,1679,65,107,IT,42.62186,13.50774 138072,Corvara,1679,65,107,IT,42.27511,13.87363 138129,Crecchio,1679,65,107,IT,42.29778,14.32656 138163,Crognaleto,1679,65,107,IT,42.58771,13.4889 138186,Cugnoli,1679,65,107,IT,42.30692,13.9349 138195,Cupello,1679,65,107,IT,42.06936,14.67054 138277,Dogliola,1679,65,107,IT,41.94238,14.63507 138351,Elice,1679,65,107,IT,42.52279,13.97071 138422,Fallo,1679,65,107,IT,41.93833,14.32362 138434,Fano Adriano,1679,65,107,IT,42.5523,13.53764 138437,Fara Filiorum Petri,1679,65,107,IT,42.24152,14.18026 138441,Fara San Martino,1679,65,107,IT,42.09248,14.20896 138447,Farindola,1679,65,107,IT,42.44292,13.82137 138527,Filetto,1679,65,107,IT,42.22931,14.24501 138607,Fonte Umano-San Martino Alta,1679,65,107,IT,42.52084,14.1076 138609,Fontecchio,1679,65,107,IT,42.23027,13.60613 138667,Fossa,1679,65,107,IT,42.29273,13.48779 138669,Fossacesia,1679,65,107,IT,42.24198,14.48339 138690,Fraine,1679,65,107,IT,41.90624,14.48788 138696,Francavilla al Mare,1679,65,107,IT,42.42158,14.28217 138730,Fresagrandinaria,1679,65,107,IT,41.979,14.66211 138736,Frisa,1679,65,107,IT,42.26572,14.37625 138755,Furci,1679,65,107,IT,42.00746,14.58802 138781,Gagliano Aterno,1679,65,107,IT,42.12598,13.70023 138832,Gamberale,1679,65,107,IT,41.90529,14.20845 138926,Gessopalena,1679,65,107,IT,42.05521,14.27367 138970,Gioia dei Marsi,1679,65,107,IT,41.95697,13.69057 138985,Gissi,1679,65,107,IT,42.01803,14.54484 138991,Giuliano Teatino,1679,65,107,IT,42.3122,14.28082 138993,Giulianova,1679,65,107,IT,42.75381,13.9665 139031,Goriano Sicoli,1679,65,107,IT,42.08011,13.77459 139163,Guardiagrele,1679,65,107,IT,42.19406,14.21939 139181,Guilmi,1679,65,107,IT,41.99653,14.47882 139201,Imposte,1679,65,107,IT,42.68634,13.52829 139212,Introdacqua,1679,65,107,IT,42.00968,13.89779 139245,Isola del Gran Sasso dItalia,1679,65,107,IT,42.50324,13.65721 139285,LAquila,1679,65,107,IT,42.35055,13.39954 139341,Lama dei Peligni,1679,65,107,IT,42.04214,14.18678 139354,Lanciano,1679,65,107,IT,42.22718,14.39024 139431,Lecce Nei Marsi,1679,65,107,IT,41.93436,13.6843 139451,Lentella,1679,65,107,IT,41.99576,14.67692 139479,Lettomanoppello,1679,65,107,IT,42.24336,14.03843 139480,Lettopalena,1679,65,107,IT,42.00251,14.15652 139538,Liscia,1679,65,107,IT,41.95524,14.55532 139610,Loreto Aprutino,1679,65,107,IT,42.43104,13.98057 139638,Luco dei Marsi,1679,65,107,IT,41.95925,13.47349 139639,Lucoli,1679,65,107,IT,42.29093,13.33799 139725,Magliano DeMarsi,1679,65,107,IT,42.09153,13.36379 139802,Manoppello,1679,65,107,IT,42.25918,14.06024 139803,Manoppello Scalo,1679,65,107,IT,42.30762,14.05363 139895,Marina di San Vito,1679,65,107,IT,42.30514,14.44844 139897,Marina di Vasto,1679,65,107,IT,42.09373,14.72683 139936,Martinsicuro,1679,65,107,IT,42.88031,13.91326 139975,Massa dAlbe-Corona,1679,65,107,IT,42.10723,13.39429 140132,Miglianico,1679,65,107,IT,42.35773,14.29179 140214,Molina Aterno,1679,65,107,IT,42.14903,13.7354 140350,Montazzoli,1679,65,107,IT,41.94887,14.43069 140389,Montebello di Bertona,1679,65,107,IT,42.41686,13.87119 140390,Montebello sul Sangro,1679,65,107,IT,41.98663,14.32402 140436,Monteferrante,1679,65,107,IT,41.95396,14.38856 140438,Montefino,1679,65,107,IT,42.54551,13.88479 140465,Montelapiano,1679,65,107,IT,41.96267,14.34212 140504,Montenerodomo,1679,65,107,IT,41.97682,14.25177 140505,Monteodorisio,1679,65,107,IT,42.08485,14.65386 140514,Montereale,1679,65,107,IT,42.52332,13.24585 140541,Montesilvano Marina,1679,65,107,IT,42.5114,14.14507 140557,Monticchio,1679,65,107,IT,42.32035,13.46382 140586,Montorio al Vomano,1679,65,107,IT,42.58123,13.63715 140620,Morino,1679,65,107,IT,41.86442,13.457 140634,Morro dOro,1679,65,107,IT,42.66291,13.92129 140646,Mosciano SantAngelo,1679,65,107,IT,42.747,13.88891 140647,Moscufo,1679,65,107,IT,42.42713,14.05434 140671,Mozzagrogna,1679,65,107,IT,42.21267,14.44258 140731,Navelli,1679,65,107,IT,42.23721,13.72961 140743,Nepezzano,1679,65,107,IT,42.68994,13.7565 140745,Nereto,1679,65,107,IT,42.81548,13.81989 140746,Nerito,1679,65,107,IT,42.54763,13.47759 140780,Nocciano,1679,65,107,IT,42.33366,13.98571 140811,Notaresco,1679,65,107,IT,42.65742,13.89491 140842,Nucleo Industriale di Bazzano,1679,65,107,IT,42.33623,13.46755 140874,Ofena,1679,65,107,IT,42.32536,13.75864 140932,Opi,1679,65,107,IT,41.77838,13.82932 140952,Oricola,1679,65,107,IT,42.04922,13.03939 140975,Orsogna,1679,65,107,IT,42.22344,14.28085 140987,Ortona,1679,65,107,IT,42.35087,14.40342 140988,Ortona dei Marsi,1679,65,107,IT,41.9982,13.72909 140990,Ortucchio,1679,65,107,IT,41.95525,13.64651 141058,Ovindoli,1679,65,107,IT,42.13765,13.51603 141070,Pacentro,1679,65,107,IT,42.05043,13.99151 141095,Paganica-Tempera,1679,65,107,IT,42.35715,13.47138 58205,Pagliare,1679,65,107,IT,42.64372,13.95171 58209,Paglieta,1679,65,107,IT,42.16139,14.50306 58238,Palena,1679,65,107,IT,41.98353,14.13696 58260,Palmoli,1679,65,107,IT,41.93944,14.58142 58264,Palombaro,1679,65,107,IT,42.12323,14.22989 58403,Penna SantAndrea,1679,65,107,IT,42.59403,13.77215 58406,Pennadomo,1679,65,107,IT,42.00394,14.32338 58407,Pennapiedimonte,1679,65,107,IT,42.15563,14.19432 58408,Penne,1679,65,107,IT,42.45474,13.92754 58411,Perano,1679,65,107,IT,42.1046,14.39581 58420,Pereto,1679,65,107,IT,42.05821,13.10231 58450,Pescara,1679,65,107,IT,42.4584,14.20283 58452,Pescasseroli,1679,65,107,IT,41.80343,13.78707 58459,Pescina,1679,65,107,IT,42.02351,13.65116 58461,Pescocostanzo,1679,65,107,IT,41.88722,14.06614 58466,Pescosansonesco Nuovo,1679,65,107,IT,42.25524,13.8848 58493,Pettorano sul Gizio,1679,65,107,IT,41.97326,13.96001 58523,Pianella,1679,65,107,IT,42.39918,14.04781 58548,Pianola,1679,65,107,IT,42.32341,13.40394 58554,Pianura Vomano,1679,65,107,IT,42.63028,13.91548 58579,Picciano,1679,65,107,IT,42.47525,13.9899 58607,Pietracamela,1679,65,107,IT,42.52344,13.55431 58612,Pietraferrazzana,1679,65,107,IT,41.96943,14.37451 58619,Pietranico,1679,65,107,IT,42.27565,13.91077 58677,Pineto,1679,65,107,IT,42.60879,14.06639 58727,Pizzoferrato,1679,65,107,IT,41.92244,14.23632 58728,Pizzoli,1679,65,107,IT,42.43603,13.29886 58759,Poggio Picenze,1679,65,107,IT,42.32061,13.54036 58768,Poggiofiorito,1679,65,107,IT,42.25414,14.32082 58802,Pollutri,1679,65,107,IT,42.13784,14.59172 58900,Popoli,1679,65,107,IT,42.16866,13.82997 59015,Prata dAnsidonia,1679,65,107,IT,42.27793,13.6083 59033,Pratola Peligna,1679,65,107,IT,42.09701,13.87467 59069,Pretoro,1679,65,107,IT,42.21923,14.14248 59070,Preturo,1679,65,107,IT,42.37808,13.29633 59072,Prezza,1679,65,107,IT,42.05789,13.83592 59087,Progetto Case Bazzano,1679,65,107,IT,42.33643,13.4441 59088,Progetto Case Coppito 3,1679,65,107,IT,42.36981,13.31973 59089,Progetto Case Sassa Nsi,1679,65,107,IT,42.3656,13.31509 59106,Provincia dell Aquila,1679,65,107,IT,42.08333,13.66667 59124,Provincia di Chieti,1679,65,107,IT,42.11667,14.35 59160,Provincia di Pescara,1679,65,107,IT,42.33333,13.95 59179,Provincia di Teramo,1679,65,107,IT,42.65,13.68333 59212,Quadri,1679,65,107,IT,41.92402,14.28768 59270,Raiano,1679,65,107,IT,42.10158,13.81386 59285,Rapino,1679,65,107,IT,42.20931,14.18493 59399,Ripa Teatina,1679,65,107,IT,42.36603,14.24441 59439,Rivisondoli,1679,65,107,IT,41.87023,14.06671 59483,Rocca di Botte,1679,65,107,IT,42.03102,13.07185 59484,Rocca di Cambio,1679,65,107,IT,42.23755,13.48906 59487,Rocca di Mezzo,1679,65,107,IT,42.20441,13.5184 59473,Rocca Pia,1679,65,107,IT,41.93429,13.97726 59478,Rocca San Giovanni,1679,65,107,IT,42.24604,14.46162 59494,Roccacasale,1679,65,107,IT,42.12249,13.88758 59510,Roccamorice,1679,65,107,IT,42.21274,14.02531 59516,Roccaraso,1679,65,107,IT,41.84872,14.07846 59518,Roccascalegna,1679,65,107,IT,42.06212,14.30802 59524,Roccaspinalveti-Santa Giusta,1679,65,107,IT,41.94233,14.47092 59531,Roccavivi,1679,65,107,IT,41.81214,13.53662 59567,Roio del Sangro,1679,65,107,IT,41.91153,14.37382 59629,Rosciano,1679,65,107,IT,42.32227,14.04555 59634,Rosello,1679,65,107,IT,41.90116,14.34919 59637,Roseto degli Abruzzi,1679,65,107,IT,42.67164,14.01481 59772,Salino,1679,65,107,IT,42.78571,13.914 59777,Salle,1679,65,107,IT,42.17756,13.96091 59792,Salvo Marina,1679,65,107,IT,42.07037,14.76597 59806,Sambuceto,1679,65,107,IT,42.42168,14.18747 59831,San Benedetto dei Marsi,1679,65,107,IT,42.0076,13.62381 59833,San Benedetto in Perillis,1679,65,107,IT,42.18377,13.76996 59849,San Buono,1679,65,107,IT,41.9814,14.56818 59892,San Demetrio Ne Vestini,1679,65,107,IT,42.28963,13.55519 59986,San Giovanni Lipioni,1679,65,107,IT,41.84383,14.56271 60072,San Martino Bassa,1679,65,107,IT,42.51827,14.13045 60097,San Martino sulla Marrucina,1679,65,107,IT,42.22419,14.21577 60148,San Nicolò a Tordino,1679,65,107,IT,42.69648,13.79708 60153,San Panfilo dOcre,1679,65,107,IT,42.28616,13.47518 60203,San Pio delle Camere,1679,65,107,IT,42.28423,13.6557 60222,San Rocco,1679,65,107,IT,42.24294,14.12891 60234,San Salvo,1679,65,107,IT,42.04413,14.73335 60259,San Valentino in Abruzzo Citeriore,1679,65,107,IT,42.23304,13.98561 60269,San Vincenzo Valle Roveto,1679,65,107,IT,41.84452,13.53566 60275,San Vito Chietino,1679,65,107,IT,42.29014,14.4427 60391,SantEgidio alla Vibrata,1679,65,107,IT,42.81705,13.72164 60400,SantEufemia a Maiella,1679,65,107,IT,42.12613,14.02651 60403,SantEusanio del Sangro,1679,65,107,IT,42.16908,14.32776 60402,SantEusanio Forconese,1679,65,107,IT,42.28951,13.52425 60407,SantOmero,1679,65,107,IT,42.79011,13.78906 60463,Santa Maria Imbaro,1679,65,107,IT,42.21999,14.45027 60494,Santa Teresa,1679,65,107,IT,42.42753,14.15816 60504,Sante Marie,1679,65,107,IT,42.10369,13.20163 60524,Santo Stefano di Sessanio,1679,65,107,IT,42.34339,13.64477 60565,Sassa,1679,65,107,IT,42.35204,13.29924 60601,Scafa,1679,65,107,IT,42.26575,13.99665 60622,Scanno,1679,65,107,IT,41.90442,13.87961 60639,Scerne,1679,65,107,IT,42.64754,14.03791 60640,Scerni,1679,65,107,IT,42.10418,14.57428 60643,Schiavi di Abruzzo,1679,65,107,IT,41.81311,14.48655 60662,Scontrone,1679,65,107,IT,41.74681,14.0388 60665,Scoppito,1679,65,107,IT,42.36948,13.25936 60670,Scurcola Marsicana,1679,65,107,IT,42.06313,13.33919 60676,Secinaro,1679,65,107,IT,42.15062,13.68145 60704,Selva,1679,65,107,IT,42.11442,14.34425 60765,Serramonacesca,1679,65,107,IT,42.24795,14.09297 60857,Silvi,1679,65,107,IT,42.54984,14.11759 61027,Spoltore,1679,65,107,IT,42.45501,14.13988 61116,Sulmona,1679,65,107,IT,42.04945,13.92578 61142,Tagliacozzo,1679,65,107,IT,42.06933,13.25469 61163,Taranta Peligna,1679,65,107,IT,42.02052,14.17103 61217,Teramo,1679,65,107,IT,42.66123,13.69901 61280,Tione degli Abruzzi,1679,65,107,IT,42.20393,13.6357 61293,Tocco da Casauria,1679,65,107,IT,42.21203,13.91547 61301,Tollo,1679,65,107,IT,42.34542,14.3236 61317,Torano Nuovo,1679,65,107,IT,42.82305,13.77729 61330,Torino di Sangro,1679,65,107,IT,42.191,14.54272 61334,Tornareccio,1679,65,107,IT,42.03763,14.41525 61336,Tornimparte,1679,65,107,IT,42.29007,13.30092 61368,Torre de Passeri,1679,65,107,IT,42.24324,13.9333 61380,Torrebruna,1679,65,107,IT,41.86742,14.54148 61392,Torrevecchia,1679,65,107,IT,42.38274,14.21331 61399,Torricella,1679,65,107,IT,42.65904,13.65719 61401,Torricella Peligna,1679,65,107,IT,42.02397,14.25854 61416,Tortoreto,1679,65,107,IT,42.80371,13.91346 61417,Tortoreto Lido,1679,65,107,IT,42.79956,13.94205 61424,Tossicia,1679,65,107,IT,42.54472,13.64595 61444,Trasacco,1679,65,107,IT,41.95742,13.5327 61473,Treglio,1679,65,107,IT,42.26184,14.42315 61563,Tufillo,1679,65,107,IT,41.91685,14.62558 61578,Turrivalignani,1679,65,107,IT,42.26296,14.02852 61626,Vacri,1679,65,107,IT,42.29764,14.22901 61686,Valle Castellana,1679,65,107,IT,42.73614,13.49709 61704,Vallecupa,1679,65,107,IT,42.25366,13.57467 61781,Vasto,1679,65,107,IT,42.1115,14.70649 61922,Vicoli,1679,65,107,IT,42.34095,13.89688 61988,Villa Caldari,1679,65,107,IT,42.29566,14.36157 61992,Villa Celiera,1679,65,107,IT,42.38184,13.8586 62003,Villa Lempa,1679,65,107,IT,42.79345,13.64433 62012,Villa Raspa,1679,65,107,IT,42.45542,14.18457 62015,Villa Rosa,1679,65,107,IT,42.85059,13.92015 62022,Villa SantAngelo,1679,65,107,IT,42.27043,13.5371 62025,Villa Santa Lucia degli Abruzzi,1679,65,107,IT,42.33286,13.77792 62026,Villa Santa Maria,1679,65,107,IT,41.9513,14.35148 62071,Villagrande,1679,65,107,IT,42.29533,13.29999 62075,Villalago,1679,65,107,IT,41.93514,13.83868 62078,Villalfonsina,1679,65,107,IT,42.16038,14.56932 62080,Villamagna,1679,65,107,IT,42.32984,14.23689 62093,Villanova,1679,65,107,IT,42.38251,14.12338 62145,Villavallelonga,1679,65,107,IT,41.87104,13.62088 62151,Villetta Barrea,1679,65,107,IT,41.77646,13.93892 62186,Vittorito,1679,65,107,IT,42.12703,13.8167 135416,Allein,1716,23,107,IT,45.80723,7.27262 135511,Antagnod,1716,23,107,IT,45.81484,7.68931 135516,Antey-Saint-Andrè,1716,23,107,IT,45.80603,7.58666 135530,Aosta,1716,23,107,IT,45.73764,7.31722 135618,Arnad,1716,23,107,IT,45.64726,7.71701 135645,Arvier,1716,23,107,IT,45.70205,7.16267 135712,Avise,1716,23,107,IT,45.70886,7.1399 135716,Ayas,1716,23,107,IT,45.81506,7.68911 135717,Aymavilles,1716,23,107,IT,45.7013,7.24683 135838,Bard,1716,23,107,IT,45.60936,7.74491 135997,Berriat,1716,23,107,IT,45.70729,7.67617 136055,Bionaz,1716,23,107,IT,45.87356,7.4231 136378,Brusson,1716,23,107,IT,45.75926,7.72899 137627,Challand-Saint-Anselme,1716,23,107,IT,45.71456,7.73451 137628,Challand-Saint-Victor,1716,23,107,IT,45.69046,7.70471 137629,Chambave,1716,23,107,IT,45.74426,7.54931 137630,Chamois,1716,23,107,IT,45.83886,7.61871 137631,Champdepraz,1716,23,107,IT,45.68526,7.65681 137632,Champorcher,1716,23,107,IT,45.62376,7.62151 137633,Charvensod,1716,23,107,IT,45.72025,7.32433 137634,Chatillon,1716,23,107,IT,45.74991,7.61668 137635,Chef-Lieu,1716,23,107,IT,45.75091,7.35372 137841,Cogne,1716,23,107,IT,45.60742,7.35803 138115,Courmayeur,1716,23,107,IT,45.79659,6.96893 138301,Donnas,1716,23,107,IT,45.60286,7.77491 138321,Doues,1716,23,107,IT,45.81916,7.306 138355,Emarese,1716,23,107,IT,45.72489,7.68976 138388,Etroubles,1716,23,107,IT,45.82082,7.23137 138765,Fénis,1716,23,107,IT,45.73469,7.49544 138591,Fontainemore,1716,23,107,IT,45.64746,7.85952 138771,Gaby,1716,23,107,IT,45.713,7.88224 138960,Gignod,1716,23,107,IT,45.77996,7.2964 139063,Grand Brissogne,1716,23,107,IT,45.72566,7.3926 139089,Gressan,1716,23,107,IT,45.7205,7.29311 139090,Gressoney-La-Trinitè,1716,23,107,IT,45.82967,7.82321 139091,Gressoney-Saint-Jean,1716,23,107,IT,45.77272,7.82802 139187,Hone,1716,23,107,IT,45.61356,7.73851 139211,Introd,1716,23,107,IT,45.69306,7.1824 139262,Issime,1716,23,107,IT,45.68546,7.85411 139264,Issogne,1716,23,107,IT,45.65496,7.68571 139283,Jovencan,1716,23,107,IT,45.71486,7.2726 139290,La Cretaz-Roisan,1716,23,107,IT,45.78396,7.3131 139294,La Magdeleine,1716,23,107,IT,45.80996,7.61871 139299,La Place,1716,23,107,IT,45.65414,7.68414 139303,La Salle,1716,23,107,IT,45.74497,7.07295 139306,La Thuile,1716,23,107,IT,45.71366,6.95099 139383,Lassolaz,1716,23,107,IT,45.73851,7.58883 139514,Lillianes,1716,23,107,IT,45.62948,7.84126 140288,Mongnod,1716,23,107,IT,45.80549,7.56806 140337,Montan-Angelin-Arensod,1716,23,107,IT,45.7282,7.27647 140576,Montjovet,1716,23,107,IT,45.70796,7.67411 140613,Morgex,1716,23,107,IT,45.75664,7.04123 140860,Nus,1716,23,107,IT,45.74026,7.4666 140907,Ollomont,1716,23,107,IT,45.84976,7.3106 141060,Oyace,1716,23,107,IT,45.85116,7.383 58293,Paquier,1716,23,107,IT,45.87879,7.62575 58430,Perloz,1716,23,107,IT,45.61386,7.80811 58476,Petit Fenis,1716,23,107,IT,45.75115,7.46391 58732,Plan dIntrod,1716,23,107,IT,45.69203,7.18328 58796,Pollein,1716,23,107,IT,45.7278,7.35146 58827,Pont-Bozet,1716,23,107,IT,45.60726,7.68641 58829,Pont-Saint-Martin,1716,23,107,IT,45.59536,7.79451 58881,Pontey,1716,23,107,IT,45.73886,7.58831 59193,Prè Saint Didier,1716,23,107,IT,45.76416,6.98579 59225,Quart,1716,23,107,IT,45.74096,7.4152 59244,Quincod,1716,23,107,IT,45.71513,7.73495 59350,Rhemes-Notre-Dame,1716,23,107,IT,45.56965,7.1187 59351,Rhemes-Saint-Georges,1716,23,107,IT,45.65226,7.1544 59727,Saint Marcel,1716,23,107,IT,45.73146,7.4482 59728,Saint Maurice,1716,23,107,IT,45.71771,7.25547 59729,Saint-Christophe,1716,23,107,IT,45.75406,7.3472 59730,Saint-Denis,1716,23,107,IT,45.75256,7.55531 59731,Saint-Nicolas,1716,23,107,IT,45.71656,7.1667 59732,Saint-Oyen,1716,23,107,IT,45.82439,7.21372 59733,Saint-Pierre,1716,23,107,IT,45.71153,7.22683 59734,Saint-Rhémy,1716,23,107,IT,45.83553,7.18393 59735,Saint-Vincent,1716,23,107,IT,45.75082,7.64815 60030,San Leonardo,1716,23,107,IT,45.82366,7.1814 61328,Torgnon,1716,23,107,IT,45.80616,7.5698 61677,Valgrisenche,1716,23,107,IT,45.63036,7.064 61694,Valle dAosta,1716,23,107,IT,45.76667,7.41667 61735,Valpelline,1716,23,107,IT,45.82486,7.3255 61738,Valsavarenche,1716,23,107,IT,45.59186,7.21 61744,Valtournenche,1716,23,107,IT,45.87607,7.6243 61865,Verrayes,1716,23,107,IT,45.76326,7.5346 61866,Verres,1716,23,107,IT,45.66656,7.68911 62045,Villa-Nabian,1716,23,107,IT,45.6897,7.7047 62074,Villair-Amerique,1716,23,107,IT,45.74793,7.38982 62147,Ville Sur Sarre,1716,23,107,IT,45.73339,7.25857 62148,Villefranche,1716,23,107,IT,45.74064,7.41598 62149,Villeneuve,1716,23,107,IT,45.70201,7.20682 135247,Accadia,1688,75,107,IT,41.15768,15.331 135272,Acquarica del Capo,1688,75,107,IT,39.90979,18.2468 135281,Acquaviva delle Fonti,1688,75,107,IT,40.89704,16.8433 135286,Adelfia,1688,75,107,IT,41.0033,16.87208 135365,Alberobello,1688,75,107,IT,40.78448,17.23618 135366,Alberona,1688,75,107,IT,41.43225,15.12304 135397,Alessano,1688,75,107,IT,39.89381,18.33221 135398,Alezio,1688,75,107,IT,40.06226,18.05712 135418,Alliste,1688,75,107,IT,39.94803,18.08971 135430,Altamura,1688,75,107,IT,40.82664,16.54952 135486,Andrano,1688,75,107,IT,39.98546,18.38232 135491,Andria,1688,75,107,IT,41.23117,16.29797 135525,Anzano di Puglia,1688,75,107,IT,41.12162,15.28688 135540,Apricena,1688,75,107,IT,41.78629,15.44394 135549,Aradeo,1688,75,107,IT,40.12921,18.12951 135621,Arnesano,1688,75,107,IT,40.33679,18.09145 135656,Ascoli Satriano,1688,75,107,IT,41.20365,15.56646 135703,Avetrana,1688,75,107,IT,40.3507,17.7326 135771,Bagnolo del Salento,1688,75,107,IT,40.14908,18.35208 135853,Bari,1688,75,107,IT,40.93333,16.66667 135860,Barletta,1688,75,107,IT,41.31429,16.28165 136043,Biccari,1688,75,107,IT,41.39736,15.19644 136053,Binetto,1688,75,107,IT,41.02343,16.70988 136061,Bisceglie,1688,75,107,IT,41.24264,16.50104 136067,Bitetto,1688,75,107,IT,41.04146,16.74806 136068,Bitonto,1688,75,107,IT,41.11006,16.69086 136069,Bitritto,1688,75,107,IT,41.04336,16.82682 136153,Borgagne,1688,75,107,IT,40.24108,18.37661 136257,Botrugno,1688,75,107,IT,40.06359,18.32254 136272,Bovino,1688,75,107,IT,41.24916,15.33948 136334,Brindisi,1688,75,107,IT,40.63215,17.93607 136471,Cagnano Varano,1688,75,107,IT,41.82832,15.77203 136528,Calimera,1688,75,107,IT,40.24948,18.27982 136616,Campi Salentina,1688,75,107,IT,40.39747,18.02141 136697,Candela,1688,75,107,IT,41.13601,15.51537 136727,Cannole,1688,75,107,IT,40.16592,18.36456 136732,Canosa di Puglia,1688,75,107,IT,41.21954,16.06768 136769,Capirro,1688,75,107,IT,41.25403,16.42242 136804,Caprarica di Lecce,1688,75,107,IT,40.2606,18.24426 136826,Capurso,1688,75,107,IT,41.04598,16.92168 136834,Carapelle,1688,75,107,IT,41.36365,15.69384 136884,Carlantino,1688,75,107,IT,41.59388,14.97681 136891,Carmiano,1688,75,107,IT,40.34404,18.04195 136903,Carosino,1688,75,107,IT,40.46538,17.39857 136904,Carovigno,1688,75,107,IT,40.70626,17.65847 136915,Carpignano Salentino,1688,75,107,IT,40.19537,18.33826 136921,Carpino,1688,75,107,IT,41.8445,15.85712 136996,Casalini,1688,75,107,IT,40.73777,17.47062 137003,Casalnuovo Monterotaro,1688,75,107,IT,41.61942,15.10411 137011,Casalvecchio di Puglia,1688,75,107,IT,41.5947,15.10999 137016,Casamassella,1688,75,107,IT,40.11424,18.451 137017,Casamassima,1688,75,107,IT,40.95653,16.92075 137030,Casarano,1688,75,107,IT,40.01131,18.16237 137101,Cassano delle Murge,1688,75,107,IT,40.89112,16.76531 137215,Castellana,1688,75,107,IT,40.88643,17.16549 137217,Castellaneta,1688,75,107,IT,40.62794,16.9329 137267,Castelluccio dei Sauri,1688,75,107,IT,41.3046,15.47561 137266,Castelluccio Valmaggiore,1688,75,107,IT,41.3429,15.19944 137298,Castelnuovo della Daunia,1688,75,107,IT,41.58139,15.11796 137338,Castiglione,1688,75,107,IT,39.98333,18.35 137372,Castri di Lecce,1688,75,107,IT,40.2736,18.2624 137373,Castrignano De Greci,1688,75,107,IT,40.17342,18.29643 137374,Castrignano del Capo,1688,75,107,IT,39.8328,18.35087 137376,Castro,1688,75,107,IT,40.00702,18.42573 137382,Castromediano,1688,75,107,IT,40.32803,18.17877 137418,Cavallino,1688,75,107,IT,40.3102,18.20221 137461,Ceglie Messapica,1688,75,107,IT,40.6462,17.51661 137464,Celenza Valfortore,1688,75,107,IT,41.56048,14.97898 137469,Cellamare,1688,75,107,IT,41.01969,16.92741 137476,Celle di San Vito,1688,75,107,IT,41.32593,15.18104 137480,Cellino San Marco,1688,75,107,IT,40.47133,17.96427 137544,Cerfignano,1688,75,107,IT,40.06107,18.44291 137550,Cerignola,1688,75,107,IT,41.26523,15.89559 137673,Chieuti,1688,75,107,IT,41.84486,15.16681 137763,Cisternino,1688,75,107,IT,40.74326,17.42587 137885,Collemeto,1688,75,107,IT,40.20885,18.10285 137887,Collepasso,1688,75,107,IT,40.07115,18.16222 137983,Conversano,1688,75,107,IT,40.96836,17.11329 137986,Copertino,1688,75,107,IT,40.26821,18.0543 137991,Corato,1688,75,107,IT,41.15171,16.41143 138014,Corigliano dOtranto,1688,75,107,IT,40.15925,18.25598 138047,Corsano,1688,75,107,IT,39.88911,18.36747 138119,Cozzana,1688,75,107,IT,40.92025,17.22259 138157,Crispiano,1688,75,107,IT,40.60379,17.2329 138206,Cursi,1688,75,107,IT,40.14847,18.31605 138219,Cutrofiano,1688,75,107,IT,40.12616,18.2026 138244,Deliceto,1688,75,107,IT,41.22289,15.38447 138249,Depressa,1688,75,107,IT,39.95908,18.36174 138270,Diso,1688,75,107,IT,40.00915,18.39144 138371,Erchie,1688,75,107,IT,40.43609,17.7361 138404,Faeto,1688,75,107,IT,41.32489,15.16045 138407,Faggiano,1688,75,107,IT,40.41616,17.38861 138454,Fasano,1688,75,107,IT,40.83625,17.36007 138473,Felline,1688,75,107,IT,39.93651,18.11822 138572,Foggia,1688,75,107,IT,41.45845,15.55188 138687,Fragagnano,1688,75,107,IT,40.4302,17.47553 138694,Francavilla Fontana,1688,75,107,IT,40.53123,17.58522 138783,Gagliano del Capo,1688,75,107,IT,39.84323,18.36962 138795,Galatina,1688,75,107,IT,40.17416,18.17032 138796,Galatone,1688,75,107,IT,40.14673,18.06937 138813,Gallipoli,1688,75,107,IT,40.05594,17.99088 138823,Galugnano,1688,75,107,IT,40.25601,18.21473 138891,Gemini,1688,75,107,IT,39.91134,18.18742 138966,Ginosa,1688,75,107,IT,40.5769,16.75655 138971,Gioia del Colle,1688,75,107,IT,40.79968,16.92298 138975,Giorgilorio,1688,75,107,IT,40.38683,18.14873 138979,Giovinazzo,1688,75,107,IT,41.185,16.67054 138987,Giuggianello,1688,75,107,IT,40.09383,18.36894 138996,Giurdignano,1688,75,107,IT,40.12367,18.43155 139083,Gravina in Puglia,1688,75,107,IT,40.81748,16.41915 139121,Grottaglie,1688,75,107,IT,40.53694,17.43723 139139,Grumo Appula,1688,75,107,IT,41.01089,16.70844 139144,Guagnano,1688,75,107,IT,40.40123,17.94902 139230,Ischitella,1688,75,107,IT,41.90434,15.89945 139255,Isole Tremiti,1688,75,107,IT,42.12085,15.50424 139300,La Rosa,1688,75,107,IT,40.60674,17.95207 139345,Lamie,1688,75,107,IT,41.03364,16.87559 139346,Lamie di Olimpie-Selva,1688,75,107,IT,40.81714,17.33478 139388,Laterza,1688,75,107,IT,40.62881,16.79947 139389,Latiano,1688,75,107,IT,40.55052,17.71856 139430,Lecce,1688,75,107,IT,40.35481,18.17244 139458,Leporano,1688,75,107,IT,40.38218,17.33426 139459,Leporano Marina,1688,75,107,IT,40.3786,17.3096 139460,Lequile,1688,75,107,IT,40.30583,18.14022 139469,Lesina,1688,75,107,IT,41.86125,15.35322 139481,Leuca,1688,75,107,IT,39.79949,18.35815 139486,Leverano,1688,75,107,IT,40.28852,17.9965 139554,Lizzanello,1688,75,107,IT,40.30475,18.22283 139555,Lizzano,1688,75,107,IT,40.39301,17.44571 139565,Locorotondo,1688,75,107,IT,40.75661,17.32392 139616,Loseto,1688,75,107,IT,41.04214,16.84917 139631,Lucera,1688,75,107,IT,41.5055,15.3391 139641,Lucugnano,1688,75,107,IT,39.9349,18.32174 139722,Magliano,1688,75,107,IT,40.3374,18.06287 139731,Maglie,1688,75,107,IT,40.12069,18.29797 139791,Manduria,1688,75,107,IT,40.39899,17.63726 139796,Manfredonia,1688,75,107,IT,41.63065,15.91876 139863,Margherita di Savoia,1688,75,107,IT,41.37174,16.15275 139886,Marina di Ginosa,1688,75,107,IT,40.42833,16.88003 139901,Mariotto,1688,75,107,IT,41.05028,16.56142 139902,Marittima,1688,75,107,IT,39.99609,18.39895 139926,Martano,1688,75,107,IT,40.20205,18.30193 139932,Martignano,1688,75,107,IT,40.23821,18.25602 139933,Martina Franca,1688,75,107,IT,40.70355,17.33814 139942,Maruggio,1688,75,107,IT,40.32054,17.57052 139977,Massafra,1688,75,107,IT,40.58618,17.11635 139994,Materdomini,1688,75,107,IT,40.65571,17.95949 139997,Matino,1688,75,107,IT,40.03083,18.1363 140001,Mattinata,1688,75,107,IT,41.71112,16.05087 140041,Melendugno,1688,75,107,IT,40.27252,18.33798 140049,Melissano,1688,75,107,IT,39.97315,18.12113 140056,Melpignano,1688,75,107,IT,40.15624,18.29194 140085,Merine,1688,75,107,IT,40.33418,18.22383 140091,Mesagne,1688,75,107,IT,40.55851,17.80774 140131,Miggiano,1688,75,107,IT,39.9618,18.31119 140160,Minervino di Lecce,1688,75,107,IT,40.09025,18.42139 140159,Minervino Murge,1688,75,107,IT,41.08264,16.07861 140192,Modugno,1688,75,107,IT,41.08433,16.78342 140209,Mola di Bari,1688,75,107,IT,41.05997,17.09001 140213,Molfetta,1688,75,107,IT,41.20036,16.59905 140296,Monopoli,1688,75,107,IT,40.94918,17.29717 140315,Montalbano,1688,75,107,IT,40.77827,17.48157 140379,Monte SantAngelo,1688,75,107,IT,41.7053,15.96068 140462,Monteiasi,1688,75,107,IT,40.49992,17.3826 140471,Monteleone di Puglia,1688,75,107,IT,41.16711,15.25822 140491,Montemesola,1688,75,107,IT,40.5676,17.33665 140508,Monteparano,1688,75,107,IT,40.44335,17.41308 140520,Monteroni di Lecce,1688,75,107,IT,40.31929,18.09163 140530,Montesano Salentino,1688,75,107,IT,39.97544,18.32277 140533,Montesardo,1688,75,107,IT,39.87572,18.33967 140555,Monti dArena-Bosco Caggione,1688,75,107,IT,40.3551,17.36432 140604,Morciano di Leuca,1688,75,107,IT,39.84719,18.31089 140659,Motta Montecorvino,1688,75,107,IT,41.50743,15.11414 140670,Mottola,1688,75,107,IT,40.6389,17.03432 140693,Muro Leccese,1688,75,107,IT,40.10286,18.33674 140718,Nardò,1688,75,107,IT,40.17953,18.03174 140754,Neviano,1688,75,107,IT,40.1065,18.11517 140788,Noci,1688,75,107,IT,40.79356,17.12681 140789,Nociglia,1688,75,107,IT,40.03804,18.32757 140795,Noha,1688,75,107,IT,40.15323,18.16569 140796,Noicattaro,1688,75,107,IT,41.03449,16.98963 140840,Novoli,1688,75,107,IT,40.37673,18.04757 140946,Ordona,1688,75,107,IT,41.31501,15.62832 140951,Oria,1688,75,107,IT,40.49999,17.6428 140972,Orsara di Puglia,1688,75,107,IT,41.28163,15.26765 140977,Orta Nova,1688,75,107,IT,41.32879,15.70994 140983,Ortelle,1688,75,107,IT,40.03371,18.39125 141044,Ostuni,1688,75,107,IT,40.72913,17.57675 141045,Otranto,1688,75,107,IT,40.14789,18.48682 58219,Palagianello,1688,75,107,IT,40.60851,16.97802 58220,Palagiano,1688,75,107,IT,40.57762,17.03812 58256,Palmariggi,1688,75,107,IT,40.13099,18.37863 58261,Palo del Colle,1688,75,107,IT,41.05562,16.70321 58262,Palombaio,1688,75,107,IT,41.07036,16.60962 58282,Panni,1688,75,107,IT,41.22082,15.2756 58289,Paolo VI,1688,75,107,IT,40.52218,17.27401 58295,Parabita,1688,75,107,IT,40.05139,18.12651 58300,Parco Scizzo-Parchitello,1688,75,107,IT,41.07457,16.99329 58351,Patù,1688,75,107,IT,39.84078,18.33784 58455,Peschici,1688,75,107,IT,41.94521,16.01612 58500,Pezze di Greco,1688,75,107,IT,40.81004,17.41333 58617,Pietramontecorvino,1688,75,107,IT,41.54228,15.12894 58709,Pisignano,1688,75,107,IT,40.3047,18.27155 58748,Poggiardo,1688,75,107,IT,40.05315,18.37819 58755,Poggio Imperiale,1688,75,107,IT,41.82503,15.3668 58771,Poggiorsini,1688,75,107,IT,40.91403,16.25605 58790,Polignano a Mare,1688,75,107,IT,40.99221,17.22149 58926,Porto Cesareo,1688,75,107,IT,40.26228,17.89896 59067,Presicce,1688,75,107,IT,39.90055,18.26282 59112,Provincia di Barletta - Andria - Trani,1688,75,107,IT,41.25097,16.17599 59118,Provincia di Brindisi,1688,75,107,IT,40.58333,17.66667 59131,Provincia di Foggia,1688,75,107,IT,41.45,15.53333 59141,Provincia di Lecce,1688,75,107,IT,40.21667,18.16667 59178,Provincia di Taranto,1688,75,107,IT,40.61667,17.25 59203,Pulsano,1688,75,107,IT,40.38109,17.35612 59209,Putignano,1688,75,107,IT,40.85106,17.1219 59233,Quasano,1688,75,107,IT,40.96724,16.57354 59255,Racale,1688,75,107,IT,39.96086,18.09154 59378,Rignano Garganico,1688,75,107,IT,41.67934,15.58835 59500,Roccaforzata,1688,75,107,IT,40.437,17.38986 59541,Rocchetta SantAntonio,1688,75,107,IT,41.10326,15.45993 59553,Rodi Garganico,1688,75,107,IT,41.92745,15.88217 59636,Roseto Valfortore,1688,75,107,IT,41.37544,15.09824 59696,Ruffano,1688,75,107,IT,39.98195,18.24974 59705,Rutigliano,1688,75,107,IT,41.00997,17.00558 59709,Ruvo di Puglia,1688,75,107,IT,41.11758,16.48421 59767,Salice Salentino,1688,75,107,IT,40.38485,17.96134 59789,Salve,1688,75,107,IT,39.86111,18.29493 59810,Sammichele di Bari,1688,75,107,IT,40.88711,16.94919 59859,San Cassiano,1688,75,107,IT,40.05631,18.33392 59864,San Cesario di Lecce,1688,75,107,IT,40.30221,18.16098 59894,San Donaci,1688,75,107,IT,40.44853,17.92252 59898,San Donato di Lecce,1688,75,107,IT,40.26728,18.18256 59915,San Ferdinando di Puglia,1688,75,107,IT,41.30263,16.07046 59956,San Giorgio Ionico,1688,75,107,IT,40.45796,17.38034 59988,San Giovanni Rotondo,1688,75,107,IT,41.70643,15.7277 60065,San Marco in Lamis,1688,75,107,IT,41.7121,15.63825 60066,San Marco la Catola,1688,75,107,IT,41.52483,15.00594 60099,San Marzano di San Giuseppe,1688,75,107,IT,40.45455,17.50351 60119,San Michele Salentino,1688,75,107,IT,40.63163,17.63254 60152,San Pancrazio Salentino,1688,75,107,IT,40.418,17.83419 60156,San Paolo,1688,75,107,IT,41.12476,16.79258 60161,San Paolo di Civitate,1688,75,107,IT,41.73893,15.2608 60201,San Pietro in Lama,1688,75,107,IT,40.30711,18.12787 60184,San Pietro Vernotico,1688,75,107,IT,40.4889,17.99752 60244,San Severo,1688,75,107,IT,41.68564,15.38148 60282,San Vito dei Normanni,1688,75,107,IT,40.65642,17.70814 60298,Sanarica,1688,75,107,IT,40.08908,18.34803 60311,Sannicandro di Bari,1688,75,107,IT,41.00047,16.79714 60310,Sannicandro Garganico,1688,75,107,IT,41.83844,15.56535 60312,Sannicola,1688,75,107,IT,40.09244,18.06765 60324,SantAgata di Puglia,1688,75,107,IT,41.15127,15.37968 60418,Santa Cesarea Terme,1688,75,107,IT,40.03607,18.45542 60506,Santeramo in Colle,1688,75,107,IT,40.79236,16.75873 60583,Sava,1688,75,107,IT,40.40203,17.55267 60667,Scorrano,1688,75,107,IT,40.09018,18.29993 60677,Seclì,1688,75,107,IT,40.11897,18.10931 60758,Serracapriola,1688,75,107,IT,41.80912,15.16098 60766,Serrano,1688,75,107,IT,40.18438,18.35156 60896,Sogliano Cavour,1688,75,107,IT,40.14827,18.19741 60916,Soleto,1688,75,107,IT,40.18781,18.2063 60994,Specchia,1688,75,107,IT,39.93913,18.29784 61014,Spinazzola,1688,75,107,IT,40.96399,16.09111 61028,Spongano,1688,75,107,IT,40.01782,18.36563 61036,Squinzano,1688,75,107,IT,40.43513,18.04086 61049,Statte,1688,75,107,IT,40.52856,17.20122 61067,Sternatia,1688,75,107,IT,40.22022,18.22748 61079,Stornara,1688,75,107,IT,41.28672,15.77003 61080,Stornarella,1688,75,107,IT,41.25591,15.73023 61103,Strudà,1688,75,107,IT,40.31991,18.28176 61123,Supersano,1688,75,107,IT,40.01655,18.24205 61125,Surano,1688,75,107,IT,40.02818,18.34591 61126,Surbo,1688,75,107,IT,40.39383,18.13456 61165,Taranto,1688,75,107,IT,40.46438,17.24707 61177,Taurisano,1688,75,107,IT,39.95746,18.21498 61193,Taviano,1688,75,107,IT,39.98224,18.08151 61225,Terlizzi,1688,75,107,IT,41.12905,16.54536 61276,Tiggiano,1688,75,107,IT,39.90284,18.36501 61321,Torchiarolo,1688,75,107,IT,40.48349,18.05122 61331,Toritto,1688,75,107,IT,40.99774,16.67945 61361,Torre San Giovanni,1688,75,107,IT,39.89001,18.11159 61363,Torre Santa Susanna,1688,75,107,IT,40.46762,17.73864 61384,Torremaggiore,1688,75,107,IT,41.68894,15.29408 61400,Torricella,1688,75,107,IT,40.35509,17.49846 61437,Trani,1688,75,107,IT,41.27733,16.41011 61489,Trepuzzi,1688,75,107,IT,40.40535,18.07625 61519,Tricase,1688,75,107,IT,39.93018,18.35421 61525,Triggiano,1688,75,107,IT,41.06549,16.92501 61528,Trinitapoli,1688,75,107,IT,41.35654,16.08924 61549,Troia,1688,75,107,IT,41.36428,15.3173 61566,Tuglie,1688,75,107,IT,40.07346,18.09872 61574,Turi,1688,75,107,IT,40.91657,17.02038 61582,Tuturano,1688,75,107,IT,40.54474,17.94754 61588,Ugento,1688,75,107,IT,39.92724,18.15832 61591,Uggiano la Chiesa,1688,75,107,IT,40.10091,18.44872 61590,Uggiano Montefusco,1688,75,107,IT,40.38612,17.6046 61665,Valenzano,1688,75,107,IT,41.04376,16.88491 61796,Veglie,1688,75,107,IT,40.33474,17.96238 61858,Vernole,1688,75,107,IT,40.28834,18.30165 61918,Vico del Gargano,1688,75,107,IT,41.89661,15.95682 61933,Vieste,1688,75,107,IT,41.88209,16.17139 61955,Vignacastrisi,1688,75,107,IT,40.01604,18.40704 61990,Villa Castelli,1688,75,107,IT,40.58293,17.47468 62181,Vitigliano,1688,75,107,IT,40.03951,18.4117 62220,Volturara Appula,1688,75,107,IT,41.49603,15.05224 62222,Volturino,1688,75,107,IT,41.47723,15.12424 62237,Zapponeta,1688,75,107,IT,41.4571,15.95615 62269,Zollino,1688,75,107,IT,40.20581,18.24774 135245,Abriola,1706,77,107,IT,40.50748,15.8131 135249,Accettura,1706,77,107,IT,40.49102,16.15798 135253,Acerenza,1706,77,107,IT,40.79386,15.93808 135354,Albano di Lucania,1706,77,107,IT,40.58614,16.03712 135407,Aliano,1706,77,107,IT,40.31359,16.22984 135526,Anzi,1706,77,107,IT,40.51662,15.92457 135614,Armento,1706,77,107,IT,40.3066,16.0655 135673,Atella,1706,77,107,IT,40.87855,15.65226 135709,Avigliano,1706,77,107,IT,40.73291,15.72004 135797,Balvano,1706,77,107,IT,40.64953,15.51345 135806,Banzi,1706,77,107,IT,40.86063,16.00976 135810,Baragiano,1706,77,107,IT,40.68001,15.59398 135857,Barile,1706,77,107,IT,40.94327,15.67167 135934,Bella,1706,77,107,IT,40.76059,15.54101 135992,Bernalda,1706,77,107,IT,40.41261,16.68919 136329,Brienza,1706,77,107,IT,40.47751,15.62927 136335,Brindisi Montagna,1706,77,107,IT,40.60952,15.93977 136504,Calciano,1706,77,107,IT,40.58802,16.19238 136553,Calvello,1706,77,107,IT,40.47482,15.85092 136556,Calvera,1706,77,107,IT,40.14871,16.14362 136667,Campomaggiore,1706,77,107,IT,40.5659,16.0725 136694,Cancellara,1706,77,107,IT,40.73068,15.9247 136850,Carbone,1706,77,107,IT,40.14227,16.08846 137203,Castelgrande,1706,77,107,IT,40.78639,15.43109 137264,Castelluccio Inferiore,1706,77,107,IT,40.00151,15.98149 137265,Castelluccio Superiore,1706,77,107,IT,40.01003,15.97184 137273,Castelmezzano,1706,77,107,IT,40.52832,16.04585 137313,Castelsaraceno,1706,77,107,IT,40.16213,15.99281 137384,Castronuovo di SantAndrea,1706,77,107,IT,40.18903,16.18559 137577,Cersosimo,1706,77,107,IT,40.04703,16.35059 137655,Chiaromonte,1706,77,107,IT,40.12323,16.2144 137747,Cirigliano,1706,77,107,IT,40.39376,16.17194 137910,Colobraro,1706,77,107,IT,40.18841,16.4248 138019,Corleto Perticara,1706,77,107,IT,40.38214,16.03917 138121,Craco-SantAngelo,1706,77,107,IT,40.37992,16.43708 138364,Episcopia,1706,77,107,IT,40.07481,16.09818 138445,Fardella,1706,77,107,IT,40.11381,16.16978 138488,Ferrandina,1706,77,107,IT,40.50084,16.45258 138529,Filiano,1706,77,107,IT,40.81042,15.70984 138624,Forenza,1706,77,107,IT,40.86041,15.85457 138699,Francavilla in Sinni,1706,77,107,IT,40.08142,16.20417 138809,Gallicchio,1706,77,107,IT,40.29232,16.13561 138843,Garaguso,1706,77,107,IT,40.54866,16.22827 138903,Genzano di Lucania,1706,77,107,IT,40.84589,16.03124 138963,Ginestra,1706,77,107,IT,40.93092,15.73497 139029,Gorgoglione,1706,77,107,IT,40.39532,16.14456 139072,Grassano,1706,77,107,IT,40.63457,16.27792 139130,Grottole,1706,77,107,IT,40.60333,16.37831 139137,Grumento Nova,1706,77,107,IT,40.28281,15.88877 139160,Guardia Perticara,1706,77,107,IT,40.36167,16.09845 139223,Irsina,1706,77,107,IT,40.75015,16.23816 139295,La Martella,1706,77,107,IT,40.66251,16.53551 139327,Lagonegro,1706,77,107,IT,40.12785,15.76212 139393,Latronico,1706,77,107,IT,40.08909,16.00947 139400,Laurenzana,1706,77,107,IT,40.45908,15.97075 139401,Lauria,1706,77,107,IT,40.04702,15.83812 139410,Lavello,1706,77,107,IT,41.04769,15.78915 139501,Lido,1706,77,107,IT,40.19128,16.70692 139832,Maratea,1706,77,107,IT,39.99932,15.71539 139855,Marconia,1706,77,107,IT,40.36355,16.68823 139922,Marsico Nuovo,1706,77,107,IT,40.42359,15.73462 139923,Marsicovetere,1706,77,107,IT,40.37591,15.82569 139954,Maschito,1706,77,107,IT,40.90892,15.82946 139993,Matera,1706,77,107,IT,40.66599,16.60463 140043,Melfi,1706,77,107,IT,40.99571,15.65578 140138,Miglionico,1706,77,107,IT,40.56763,16.49964 140183,Missanello,1706,77,107,IT,40.28311,16.1665 140228,Moliterno,1706,77,107,IT,40.24394,15.86544 140318,Montalbano Jonico,1706,77,107,IT,40.28591,16.5696 140495,Montemilone,1706,77,107,IT,41.02742,15.96661 140499,Montemurro,1706,77,107,IT,40.29765,15.99182 140534,Montescaglioso,1706,77,107,IT,40.55024,16.66541 140694,Muro Lucano,1706,77,107,IT,40.75379,15.48808 140741,Nemoli,1706,77,107,IT,40.06765,15.79962 140790,Noepoli,1706,77,107,IT,40.08705,16.32834 140816,Nova Siri,1706,77,107,IT,40.14823,16.53976 140817,Nova Siri Scalo,1706,77,107,IT,40.13177,16.63593 140902,Oliveto Lucano,1706,77,107,IT,40.53554,16.18547 140934,Oppido Lucano,1706,77,107,IT,40.76174,15.98818 58231,Palazzo San Gervasio,1706,77,107,IT,40.93156,15.98149 58343,Paterno,1706,77,107,IT,40.37507,15.7351 58463,Pescopagano,1706,77,107,IT,40.83494,15.39946 58580,Picerno,1706,77,107,IT,40.63975,15.64232 58614,Pietragalla,1706,77,107,IT,40.74572,15.87398 58621,Pietrapertosa,1706,77,107,IT,40.51731,16.06244 58663,Pignola,1706,77,107,IT,40.57412,15.78295 58713,Pisticci,1706,77,107,IT,40.39017,16.55919 58789,Policoro,1706,77,107,IT,40.2128,16.67795 58810,Pomarico,1706,77,107,IT,40.52804,16.52708 58965,Potenza,1706,77,107,IT,40.64175,15.80794 59149,Provincia di Matera,1706,77,107,IT,40.5,16.41667 59164,Provincia di Potenza,1706,77,107,IT,40.46442,15.89938 59287,Rapolla,1706,77,107,IT,40.97499,15.67201 59288,Rapone,1706,77,107,IT,40.8471,15.49818 59397,Rionero in Vulture,1706,77,107,IT,40.92328,15.6711 59402,Ripacandida,1706,77,107,IT,40.91256,15.72597 59436,Rivello,1706,77,107,IT,40.07821,15.75798 59511,Roccanova,1706,77,107,IT,40.2125,16.20429 59659,Rotonda,1706,77,107,IT,39.95215,16.03904 59660,Rotondella,1706,77,107,IT,40.17136,16.52491 59703,Ruoti,1706,77,107,IT,40.7166,15.68369 59708,Ruvo del Monte,1706,77,107,IT,40.84951,15.54217 59746,Salandra,1706,77,107,IT,40.52668,16.32037 59848,San Brancato,1706,77,107,IT,40.25822,16.25661 59866,San Chirico Nuovo,1706,77,107,IT,40.67764,16.07892 59867,San Chirico Raparo,1706,77,107,IT,40.19242,16.07618 59880,San Costantino Albanese,1706,77,107,IT,40.03679,16.30475 59905,San Fele,1706,77,107,IT,40.81647,15.54043 59957,San Giorgio Lucano,1706,77,107,IT,40.11132,16.3893 60081,San Martino dAgri,1706,77,107,IT,40.23913,16.05216 60107,San Mauro Forte,1706,77,107,IT,40.48333,16.25155 60157,San Paolo Albanese,1706,77,107,IT,40.03567,16.33498 60242,San Severino Lucano,1706,77,107,IT,40.02021,16.1386 60372,SantAngelo le Fratte,1706,77,107,IT,40.5449,15.56156 60387,SantArcangelo,1706,77,107,IT,40.24852,16.27046 60542,Sarconi,1706,77,107,IT,40.248,15.88837 60573,Sasso di Castalda,1706,77,107,IT,40.48525,15.67569 60579,Satriano di Lucania,1706,77,107,IT,40.54296,15.64024 60598,Savoia di Lucania,1706,77,107,IT,40.56949,15.55132 60611,Scalo di Baragiano,1706,77,107,IT,40.695,15.57508 60626,Scanzano Jonico,1706,77,107,IT,40.25085,16.69824 60726,Senise,1706,77,107,IT,40.14616,16.28867 61024,Spinoso,1706,77,107,IT,40.26921,15.96658 61072,Stigliano,1706,77,107,IT,40.40237,16.22983 61198,Teana,1706,77,107,IT,40.12586,16.15281 61242,Terranova di Pollino,1706,77,107,IT,39.97765,16.29583 61287,Tito,1706,77,107,IT,40.5837,15.67621 61303,Tolve,1706,77,107,IT,40.69422,16.01627 61435,Tramutola,1706,77,107,IT,40.31858,15.78753 61467,Trecchina,1706,77,107,IT,40.02611,15.77585 61518,Tricarico,1706,77,107,IT,40.61458,16.14259 61544,Trivigno,1706,77,107,IT,40.58015,15.98857 61579,Tursi,1706,77,107,IT,40.24651,16.4714 61634,Vaglio Basilicata,1706,77,107,IT,40.66643,15.91434 61739,Valsinni,1706,77,107,IT,40.17098,16.44388 61823,Venosa,1706,77,107,IT,40.96283,15.81285 61934,Vietri di Potenza,1706,77,107,IT,40.60027,15.50787 61945,Viggianello,1706,77,107,IT,39.97227,16.08521 61946,Viggiano,1706,77,107,IT,40.34213,15.89964 62033,Villa dAgri,1706,77,107,IT,40.35426,15.8277 62270,Zona 179,1706,77,107,IT,41.00313,15.61868 135251,Acconia,1703,78,107,IT,38.83585,16.2653 135265,Acquaformosa,1703,78,107,IT,39.72278,16.09096 135271,Acquappesa,1703,78,107,IT,39.49573,15.95419 135273,Acquaro,1703,78,107,IT,38.55729,16.18781 135284,Acri,1703,78,107,IT,39.49624,16.38635 135295,Africo Nuovo,1703,78,107,IT,38.05067,16.1332 135296,Africo Vecchio,1703,78,107,IT,38.06667,15.98333 135309,Agnana Calabra,1703,78,107,IT,38.30206,16.22718 135326,Aiello Calabro,1703,78,107,IT,39.11785,16.16539 135329,Aieta,1703,78,107,IT,39.9278,15.82348 135369,Albi,1703,78,107,IT,39.02456,16.59721 135374,Albidona,1703,78,107,IT,39.92332,16.47237 135395,Alessandria del Carretto,1703,78,107,IT,39.95874,16.37963 135439,Altilia,1703,78,107,IT,39.13049,16.25269 135445,Altomonte,1703,78,107,IT,39.699,16.12999 135458,Amantea,1703,78,107,IT,39.12658,16.07512 135460,Amaroni,1703,78,107,IT,38.79424,16.44809 135462,Amato,1703,78,107,IT,38.38333,16.13333 135469,Amendolara,1703,78,107,IT,39.95162,16.58293 135471,Amica,1703,78,107,IT,39.60085,16.66694 135480,Andali,1703,78,107,IT,39.01281,16.76926 135489,Andreotta,1703,78,107,IT,39.3075,16.2177 135509,Anoia Inferiore,1703,78,107,IT,38.43618,16.0794 135510,Anoia Superiore,1703,78,107,IT,38.43144,16.0974 135520,Antonimina,1703,78,107,IT,38.27298,16.14824 135541,Aprigliano,1703,78,107,IT,39.24228,16.34046 135560,Arcavacata,1703,78,107,IT,39.35846,16.20844 135582,Ardore,1703,78,107,IT,38.19173,16.16734 135583,Ardore Marina,1703,78,107,IT,38.16667,16.2 135585,Arena,1703,78,107,IT,38.56235,16.2106 135596,Argusto,1703,78,107,IT,38.68051,16.43627 135742,Badolato,1703,78,107,IT,38.56868,16.52461 135743,Badolato Marina,1703,78,107,IT,38.57613,16.56527 135744,Bagaladi,1703,78,107,IT,38.0256,15.82152 135749,Bagnara Calabra,1703,78,107,IT,38.28778,15.80591 135863,Barone,1703,78,107,IT,38.85225,16.63927 135926,Belcastro,1703,78,107,IT,39.01799,16.78641 135951,Belmonte Calabro,1703,78,107,IT,39.16398,16.08215 135958,Belsito,1703,78,107,IT,39.17685,16.28745 135963,Belvedere Marittimo,1703,78,107,IT,39.6193,15.8622 135965,Belvedere Spinello,1703,78,107,IT,39.20674,16.89233 135973,Benestare,1703,78,107,IT,38.18487,16.139 136029,Bianchi,1703,78,107,IT,39.10058,16.41018 136030,Bianco,1703,78,107,IT,38.0917,16.15159 136064,Bisignano,1703,78,107,IT,39.50727,16.28106 136076,Bivongi,1703,78,107,IT,38.48328,16.45251 136088,Bocchigliero,1703,78,107,IT,39.4193,16.75057 136138,Bonifati,1703,78,107,IT,39.58595,15.90163 136156,Borgata Marina,1703,78,107,IT,39.97136,16.62091 136166,Borgia,1703,78,107,IT,38.82627,16.5077 136256,Botricello,1703,78,107,IT,38.92997,16.85801 136264,Bova,1703,78,107,IT,37.99507,15.9319 136265,Bova Marina,1703,78,107,IT,37.93503,15.91736 136266,Bovalino,1703,78,107,IT,38.15376,16.17232 136267,Bovalino Superiore,1703,78,107,IT,38.16905,16.15849 136285,Brancaleone,1703,78,107,IT,37.96297,16.1004 136286,Brancaleone-Marina,1703,78,107,IT,37.96667,16.1 136325,Briatico,1703,78,107,IT,38.72254,16.02737 136347,Brognaturo,1703,78,107,IT,38.60128,16.3414 136380,Bruzzano Zeffirio,1703,78,107,IT,38.01327,16.0826 136408,Buonvicino,1703,78,107,IT,39.68877,15.884 136452,Caccuri,1703,78,107,IT,39.22562,16.77767 136491,Calanna,1703,78,107,IT,38.18457,15.72293 136536,Caloppezzati,1703,78,107,IT,39.5612,16.8018 136538,Caloveto,1703,78,107,IT,39.50656,16.76065 136563,Calvisi,1703,78,107,IT,39.12739,16.3059 136589,Camini,1703,78,107,IT,38.43179,16.48321 136607,Campana,1703,78,107,IT,39.4136,16.8222 136627,Campo Calabro,1703,78,107,IT,38.21607,15.65919 136673,Campora San Giovanni,1703,78,107,IT,39.06798,16.09566 136705,Candidoni,1703,78,107,IT,38.50548,16.0863 136717,Canna,1703,78,107,IT,40.09484,16.50378 136728,Canolo,1703,78,107,IT,38.31497,16.1999 136749,Cantinella,1703,78,107,IT,39.66458,16.44912 136770,Capistrano,1703,78,107,IT,38.69131,16.28935 136777,Capo Rizzuto,1703,78,107,IT,38.90412,17.09872 136827,Caraffa del Bianco,1703,78,107,IT,38.09259,16.08766 136828,Caraffa di Catanzaro,1703,78,107,IT,38.88194,16.48675 136860,Cardeto,1703,78,107,IT,38.0844,15.76577 136861,Cardinale,1703,78,107,IT,38.65379,16.38715 136868,Careri,1703,78,107,IT,38.17741,16.11614 136872,Carfizzi,1703,78,107,IT,39.30771,16.97447 136874,Cariati,1703,78,107,IT,39.49627,16.95495 136889,Carlopoli,1703,78,107,IT,39.05406,16.45455 136898,Carolei,1703,78,107,IT,39.25472,16.21979 136907,Carpanzano,1703,78,107,IT,39.14817,16.30451 136952,Casabona,1703,78,107,IT,39.24951,16.95446 137069,Casignana,1703,78,107,IT,38.10187,16.0899 137081,Casole Bruzio,1703,78,107,IT,39.28384,16.33193 137095,Cassano Allo Ionio,1703,78,107,IT,39.78142,16.32738 137316,Castelsilano,1703,78,107,IT,39.2691,16.76741 137340,Castiglione Cosentino,1703,78,107,IT,39.35271,16.28821 137381,Castrolibero,1703,78,107,IT,39.31002,16.19453 137388,Castroregio,1703,78,107,IT,39.9922,16.47846 137389,Castrovillari,1703,78,107,IT,39.81632,16.20183 137392,Catanzaro,1703,78,107,IT,38.88247,16.60086 137398,Caulonia,1703,78,107,IT,38.38171,16.40951 137399,Caulonia Marina,1703,78,107,IT,38.34679,16.46353 137404,Cava-Cuculera Nobile,1703,78,107,IT,38.89383,16.62226 137440,Cavoni-Ginestreto,1703,78,107,IT,39.45212,16.26267 137466,Celico,1703,78,107,IT,39.31009,16.33989 137470,Cellara,1703,78,107,IT,39.21849,16.3348 137485,Cenadi,1703,78,107,IT,38.71934,16.41582 137500,Centrache,1703,78,107,IT,38.72872,16.43101 137512,Ceramida-Pellegrina,1703,78,107,IT,38.29667,15.82572 137524,Cerchiara di Calabria,1703,78,107,IT,39.85978,16.38368 137534,Cerenzia,1703,78,107,IT,39.24554,16.78758 137551,Cerisano,1703,78,107,IT,39.27715,16.17654 137581,Cerva,1703,78,107,IT,39.02397,16.74538 137592,Cervicati,1703,78,107,IT,39.54237,16.12682 137599,Cerzeto,1703,78,107,IT,39.50789,16.11603 137617,Cessaniti,1703,78,107,IT,38.66395,16.02959 137623,Cetraro,1703,78,107,IT,39.5166,15.94158 137624,Cetraro Marina,1703,78,107,IT,39.51701,15.9346 137653,Chiaravalle Centrale,1703,78,107,IT,38.67936,16.40864 137708,Cicala,1703,78,107,IT,39.02219,16.4861 137725,Ciminà,1703,78,107,IT,38.24618,16.14023 137737,Cinque Frondi,1703,78,107,IT,38.41618,16.0842 137750,Cirò,1703,78,107,IT,39.38297,17.06377 137751,Cirò Marina,1703,78,107,IT,39.36876,17.12477 137766,Cittadella del Capo,1703,78,107,IT,39.55932,15.87602 137768,Cittanova,1703,78,107,IT,38.35431,16.07898 137785,Civita,1703,78,107,IT,39.82804,16.31337 137812,Cleto,1703,78,107,IT,39.09019,16.15839 137927,Colosimi,1703,78,107,IT,39.11911,16.39909 137963,Condofuri,1703,78,107,IT,38.00447,15.8577 137969,Conflenti,1703,78,107,IT,39.07169,16.2845 138012,Corigliano Calabro,1703,78,107,IT,39.59553,16.51907 138013,Corigliano Scalo,1703,78,107,IT,39.62713,16.51368 138051,Cortale,1703,78,107,IT,38.84009,16.4096 138078,Cosenza,1703,78,107,IT,39.2989,16.25307 138082,Cosoleto,1703,78,107,IT,38.27483,15.92814 138112,Cotronei,1703,78,107,IT,39.15935,16.77688 138154,Crichi,1703,78,107,IT,38.95296,16.64178 138165,Cropalati,1703,78,107,IT,39.51673,16.72674 138166,Cropani,1703,78,107,IT,38.9669,16.78022 138167,Cropani Marina,1703,78,107,IT,38.92376,16.8108 138168,Crosia,1703,78,107,IT,39.56822,16.77126 138170,Crotone,1703,78,107,IT,39.08077,17.12764 138174,Crucoli,1703,78,107,IT,39.42713,17.00281 138202,Curinga,1703,78,107,IT,38.82811,16.31344 138218,Cutro,1703,78,107,IT,39.03484,16.98658 138230,Dasà,1703,78,107,IT,38.56514,16.19521 138233,Davoli,1703,78,107,IT,38.64904,16.48764 138238,Decollatura,1703,78,107,IT,39.04645,16.35753 138243,Delianuova,1703,78,107,IT,38.23587,15.91714 138259,Diamante,1703,78,107,IT,39.6807,15.82168 138268,Dinami,1703,78,107,IT,38.53136,16.14461 138269,Dipignano,1703,78,107,IT,39.23869,16.25184 138287,Domanico,1703,78,107,IT,39.21693,16.20721 138302,Donnici Inferiore,1703,78,107,IT,39.2502,16.29307 138307,Doria,1703,78,107,IT,39.73042,16.35597 138327,Drapia,1703,78,107,IT,38.66612,15.91122 138395,Fabrizia,1703,78,107,IT,38.48989,16.29832 138396,Fabrizio,1703,78,107,IT,39.63939,16.55666 138408,Fagnano Castello,1703,78,107,IT,39.5716,16.06253 138415,Falconara Albanese,1703,78,107,IT,39.27524,16.08819 138419,Falerna,1703,78,107,IT,39.00298,16.17151 138420,Falerna Scalo,1703,78,107,IT,38.97285,16.15294 138485,Feroleto Antico,1703,78,107,IT,38.96239,16.3878 138486,Feroleto della Chiesa,1703,78,107,IT,38.46609,16.07012 138498,Ferruzzano,1703,78,107,IT,38.03699,16.08918 138520,Figline Vegliaturo,1703,78,107,IT,39.22519,16.3303 138522,Filadelfia,1703,78,107,IT,38.78468,16.292 138524,Filandari,1703,78,107,IT,38.61508,16.0314 138532,Filogaso,1703,78,107,IT,38.68287,16.22584 138544,Firmo,1703,78,107,IT,39.72208,16.16344 138549,Fiumara,1703,78,107,IT,38.21267,15.69369 138552,Fiumefreddo Bruzio,1703,78,107,IT,39.23568,16.07056 138625,Foresta,1703,78,107,IT,39.09939,16.81287 138675,Fossato Ionico-Fossatello-San Luca Marcelluzzo,1703,78,107,IT,38.01065,15.76302 138676,Fossato Serralta,1703,78,107,IT,38.99629,16.5796 138692,Francavilla Angitola,1703,78,107,IT,38.78016,16.27228 138695,Francavilla Marittima,1703,78,107,IT,39.8161,16.39499 138702,Francica,1703,78,107,IT,38.61697,16.10007 138709,Frascineto,1703,78,107,IT,39.83382,16.26378 138760,Fuscaldo,1703,78,107,IT,39.41421,16.02839 138784,Gagliato,1703,78,107,IT,38.67578,16.46061 138797,Galatro,1703,78,107,IT,38.46067,16.1084 138864,Gasperina,1703,78,107,IT,38.74039,16.50666 138907,Gerace,1703,78,107,IT,38.27137,16.2207 138919,Gerocarne,1703,78,107,IT,38.58767,16.21818 138956,Giffone,1703,78,107,IT,38.43957,16.14898 138962,Gimigliano,1703,78,107,IT,38.97338,16.53165 138969,Gioia Tauro,1703,78,107,IT,38.4251,15.8975 138972,Gioiosa Ionica,1703,78,107,IT,38.32723,16.30407 138983,Girifalco,1703,78,107,IT,38.82594,16.42688 139003,Gizzeria,1703,78,107,IT,38.98025,16.20671 139101,Grimaldi,1703,78,107,IT,39.14111,16.23511 139104,Grisolia,1703,78,107,IT,39.72538,15.85605 139128,Grotteria,1703,78,107,IT,38.36509,16.26522 139156,Guardavalle,1703,78,107,IT,38.5051,16.50669 139157,Guardavalle Marina,1703,78,107,IT,38.47957,16.57656 139161,Guardia Piemontese,1703,78,107,IT,39.46572,15.9997 139225,Isca Marina,1703,78,107,IT,38.60341,16.55733 139226,Isca sullo Ionio,1703,78,107,IT,38.60103,16.5201 139250,Isola di Capo Rizzuto,1703,78,107,IT,38.95844,17.09242 139273,Jacurso,1703,78,107,IT,38.84649,16.3798 139280,Jonadi,1703,78,107,IT,38.62988,16.061 139281,Joppolo,1703,78,107,IT,38.58338,15.89709 139320,Laganadi,1703,78,107,IT,38.17391,15.74133 139326,Lago,1703,78,107,IT,39.17068,16.14825 139333,Laino Borgo,1703,78,107,IT,39.9543,15.97348 139334,Laino Castello-Nuovo Centro,1703,78,107,IT,39.9363,15.97658 139344,Lamezia Terme,1703,78,107,IT,38.96255,16.30938 139369,Lappano,1703,78,107,IT,39.31964,16.31143 139394,Lattarico,1703,78,107,IT,39.45105,16.127 139398,Laureana di Borrello,1703,78,107,IT,38.49215,16.08429 139403,Laurignano,1703,78,107,IT,39.27915,16.24232 139421,Lazzaro,1703,78,107,IT,37.97276,15.66511 139425,Le Castella,1703,78,107,IT,38.9101,17.02216 139517,Limbadi-Caroni,1703,78,107,IT,38.55902,15.96441 139566,Locri,1703,78,107,IT,38.23868,16.25957 139597,Longobardi,1703,78,107,IT,39.21059,16.07464 139598,Longobucco,1703,78,107,IT,39.4483,16.6105 139661,Lungro,1703,78,107,IT,39.73772,16.12586 139685,Luzzi,1703,78,107,IT,39.44799,16.2873 139721,Magisano,1703,78,107,IT,39.01339,16.6279 139745,Maida,1703,78,107,IT,38.85884,16.36277 139747,Maierà,1703,78,107,IT,39.71655,15.85012 139746,Maierato,1703,78,107,IT,38.71111,16.17532 139767,Malito,1703,78,107,IT,39.15775,16.24677 139778,Malvito,1703,78,107,IT,39.60105,16.05341 139780,Mammola,1703,78,107,IT,38.36262,16.23871 139785,Mandatoriccio,1703,78,107,IT,39.46675,16.8342 139798,Mangone,1703,78,107,IT,39.20437,16.33262 139823,Marano Marchesato,1703,78,107,IT,39.31274,16.17354 139824,Marano Principato,1703,78,107,IT,39.29782,16.1743 139836,Marcedusa,1703,78,107,IT,39.02675,16.83612 139839,Marcellina,1703,78,107,IT,39.76578,15.82311 139840,Marcellinara,1703,78,107,IT,38.92574,16.48757 139872,Marina,1703,78,107,IT,39.93857,16.60585 139884,Marina di Davoli,1703,78,107,IT,38.66361,16.54825 139885,Marina di Fuscaldo,1703,78,107,IT,39.42418,16.00694 139887,Marina di Gioiosa Ionica,1703,78,107,IT,38.30159,16.33148 139896,Marina di Schiavonea,1703,78,107,IT,39.65,16.53333 139912,Maropati,1703,78,107,IT,38.44178,16.0975 139928,Martelli-Laganosa,1703,78,107,IT,38.6793,16.53549 139937,Martirano,1703,78,107,IT,39.08119,16.24829 139938,Martirano Lombardo,1703,78,107,IT,39.07469,16.232 139940,Martone,1703,78,107,IT,38.35353,16.288 139948,Marzi,1703,78,107,IT,39.17063,16.30705 140046,Melicuccà,1703,78,107,IT,38.30311,15.88153 140045,Melicucco,1703,78,107,IT,38.43298,16.05748 140048,Melissa,1703,78,107,IT,39.30953,17.02968 140052,Melito di Porto Salvo,1703,78,107,IT,37.92629,15.7499 140063,Mendicino,1703,78,107,IT,39.26282,16.19452 140096,Mesoraca,1703,78,107,IT,39.07948,16.78808 140097,Messignadi,1703,78,107,IT,38.29964,15.99642 140137,Miglierina,1703,78,107,IT,38.9506,16.47233 140147,Mileto,1703,78,107,IT,38.6078,16.06751 140176,Mirto,1703,78,107,IT,39.60069,16.7739 140230,Molochio,1703,78,107,IT,38.30789,16.03141 140250,Monasterace,1703,78,107,IT,38.45318,16.55163 140251,Monasterace Marina,1703,78,107,IT,38.43489,16.57025 140285,Mongiana,1703,78,107,IT,38.51477,16.3194 140290,Mongrassano,1703,78,107,IT,39.52644,16.11225 140334,Montalto Uffugo,1703,78,107,IT,39.40331,16.15534 140349,Montauro,1703,78,107,IT,38.74927,16.51226 140387,Montebello Jonico,1703,78,107,IT,37.98277,15.758 140454,Montegiordano,1703,78,107,IT,40.04301,16.53439 140506,Montepaone,1703,78,107,IT,38.72222,16.49795 140507,Montepaone Lido,1703,78,107,IT,38.72951,16.54241 140523,Monterosso Calabro,1703,78,107,IT,38.71746,16.29066 140597,Morano Calabro,1703,78,107,IT,39.84138,16.13837 140623,Mormanno,1703,78,107,IT,39.8934,15.99175 140650,Mosorrofa,1703,78,107,IT,38.095,15.71259 140660,Motta San Giovanni,1703,78,107,IT,38.01027,15.71262 140662,Motta Santa Lucia,1703,78,107,IT,39.09122,16.29313 140666,Mottafollone,1703,78,107,IT,39.6485,16.06451 140717,Nardodipace,1703,78,107,IT,38.47418,16.34295 140725,Natile Nuovo,1703,78,107,IT,38.18583,16.08527 140761,Nicastro,1703,78,107,IT,38.97089,16.31285 140766,Nicotera,1703,78,107,IT,38.54915,15.93584 140779,Nocara,1703,78,107,IT,40.09941,16.48189 140783,Nocera Scalo,1703,78,107,IT,39.01576,16.1204 140785,Nocera Terinese,1703,78,107,IT,39.03474,16.16737 140899,Olivadi,1703,78,107,IT,38.72558,16.4237 140935,Oppido Mamertina,1703,78,107,IT,38.29337,15.9839 140958,Oriolo,1703,78,107,IT,40.0532,16.44663 140976,Orsomarso,1703,78,107,IT,39.7991,15.90748 58207,Pagliarelle,1703,78,107,IT,39.14017,16.75101 58239,Palermiti,1703,78,107,IT,38.74868,16.4522 58246,Palizzi,1703,78,107,IT,37.96667,15.9867 58247,Palizzi Marina,1703,78,107,IT,37.91995,15.97927 58248,Pallagorio,1703,78,107,IT,39.30764,16.90816 58258,Palmi,1703,78,107,IT,38.35943,15.85155 58268,Paludi,1703,78,107,IT,39.52943,16.67963 58277,Panettieri,1703,78,107,IT,39.06007,16.45375 58280,Pannaconi,1703,78,107,IT,38.69291,16.04411 58287,Paola,1703,78,107,IT,39.36313,16.03691 58290,Papanice,1703,78,107,IT,39.07077,17.02721 58291,Papasidero,1703,78,107,IT,39.87159,15.90581 58297,Paravati,1703,78,107,IT,38.5902,16.05815 58302,Parenti,1703,78,107,IT,39.16071,16.4114 58305,Parghelia,1703,78,107,IT,38.68189,15.92075 58344,Paterno Calabro,1703,78,107,IT,39.22849,16.26489 58361,Pavigliana,1703,78,107,IT,38.10721,15.72108 58366,Pazzano,1703,78,107,IT,38.47612,16.45107 58372,Pedace-Perito,1703,78,107,IT,39.27639,16.33639 58383,Pedivigliano,1703,78,107,IT,39.11034,16.30486 58392,Pellaro,1703,78,107,IT,38.01667,15.65 58410,Pentone,1703,78,107,IT,38.98579,16.5825 58432,Pernocari-Presinaci,1703,78,107,IT,38.61184,16.00463 58474,Petilia Policastro,1703,78,107,IT,39.11293,16.78167 58485,Petrizzi,1703,78,107,IT,38.70179,16.47187 58486,Petronà,1703,78,107,IT,39.0437,16.75796 58520,Piane Crati,1703,78,107,IT,39.23472,16.32313 58549,Pianopoli,1703,78,107,IT,38.95246,16.38863 58613,Pietrafitta,1703,78,107,IT,39.26103,16.3394 58620,Pietrapaola,1703,78,107,IT,39.48701,16.81597 58708,Piscopio,1703,78,107,IT,38.66361,16.11101 58726,Pizzo,1703,78,107,IT,38.75259,16.18696 58730,Pizzoni,1703,78,107,IT,38.62286,16.24876 58731,Placanica,1703,78,107,IT,38.41078,16.45274 58733,Plataci,1703,78,107,IT,39.90042,16.43272 58734,Platania,1703,78,107,IT,39.0062,16.32194 58735,Platì,1703,78,107,IT,38.22149,16.0453 58787,Polia,1703,78,107,IT,38.75118,16.3122 58793,Polistena,1703,78,107,IT,38.40544,16.0733 58921,Portigliola,1703,78,107,IT,38.22712,16.20287 58998,Praia a Mare,1703,78,107,IT,39.8941,15.78421 59123,Provincia di Catanzaro,1703,78,107,IT,38.91667,16.43333 59126,Provincia di Cosenza,1703,78,107,IT,39.55697,16.35491 59128,Provincia di Crotone,1703,78,107,IT,39.12007,17.08134 59167,Provincia di Reggio Calabria,1703,78,107,IT,38.31667,16.08333 59188,Provincia di Vibo-Valentia,1703,78,107,IT,38.69958,16.12741 59239,Quattromiglia,1703,78,107,IT,39.34474,16.23802 59320,Reggio Calabria,1703,78,107,IT,38.11047,15.66129 59332,Rende,1703,78,107,IT,39.33154,16.18041 59353,Riace,1703,78,107,IT,38.41828,16.48121 59354,Riace Marina,1703,78,107,IT,38.39186,16.53033 59362,Ricadi,1703,78,107,IT,38.62517,15.86674 59445,Rizziconi,1703,78,107,IT,38.40994,15.95974 59488,Rocca di Neto,1703,78,107,IT,39.18292,17.00764 59470,Rocca Imperiale,1703,78,107,IT,40.11014,16.57822 59471,Rocca Imperiale Marina,1703,78,107,IT,40.09962,16.61336 59491,Roccabernarda,1703,78,107,IT,39.13276,16.86082 59499,Roccaforte del Greco,1703,78,107,IT,38.04751,15.89198 59532,Roccella Ionica,1703,78,107,IT,38.32117,16.39689 59534,Roccelletta,1703,78,107,IT,38.81126,16.5982 59558,Roggiano Gravina,1703,78,107,IT,39.61786,16.16173 59560,Roghudi,1703,78,107,IT,37.92499,15.76537 59561,Rogliano,1703,78,107,IT,39.17841,16.31709 59581,Rombiolo,1703,78,107,IT,38.59535,16.00237 59624,Rosario,1703,78,107,IT,39.29104,16.23125 59625,Rosarno,1703,78,107,IT,38.48717,15.97956 59632,Rose,1703,78,107,IT,39.39932,16.29446 59635,Roseto Capo Spulico,1703,78,107,IT,39.98643,16.60363 59647,Rossano,1703,78,107,IT,39.57622,16.63447 59648,Rossano Stazione,1703,78,107,IT,39.59855,16.63485 59654,Rota Greca,1703,78,107,IT,39.46703,16.11412 59686,Rovito,1703,78,107,IT,39.30636,16.31746 59771,Saline Ioniche,1703,78,107,IT,37.93957,15.71943 59801,Sambiase,1703,78,107,IT,38.96667,16.28333 59811,Samo,1703,78,107,IT,38.07399,16.05933 59823,San Basile,1703,78,107,IT,39.8096,16.16328 59829,San Benedetto Ullano,1703,78,107,IT,39.4271,16.12379 59850,San Calogero,1703,78,107,IT,38.57447,16.01933 59856,San Carlo-Condofuri Marina,1703,78,107,IT,37.93324,15.87166 59879,San Cosmo Albanese,1703,78,107,IT,39.58363,16.41469 59881,San Costantino Calabro,1703,78,107,IT,38.63283,16.07571 59891,San Demetrio Corone,1703,78,107,IT,39.5699,16.36149 59899,San Donato di Ninea,1703,78,107,IT,39.71156,16.04742 59913,San Ferdinando,1703,78,107,IT,38.48403,15.91877 59918,San Fili,1703,78,107,IT,39.33971,16.14448 59925,San Floro,1703,78,107,IT,38.83799,16.5187 59954,San Giorgio Albanese,1703,78,107,IT,39.5823,16.45349 59959,San Giorgio Morgeto,1703,78,107,IT,38.3919,16.0879 59995,San Giovanni di Gerace,1703,78,107,IT,38.36508,16.2777 59997,San Giovanni in Fiore,1703,78,107,IT,39.25446,16.69699 60022,San Gregorio dIppona,1703,78,107,IT,38.64528,16.10356 60036,San Lorenzo,1703,78,107,IT,38.01097,15.8344 60040,San Lorenzo Bellizzi,1703,78,107,IT,39.88867,16.33029 60045,San Lorenzo del Vallo,1703,78,107,IT,39.66739,16.29866 60050,San Luca,1703,78,107,IT,38.14672,16.06625 60051,San Lucido,1703,78,107,IT,39.31012,16.05317 60055,San Mango dAquino,1703,78,107,IT,39.06036,16.19224 60061,San Marco Argentano,1703,78,107,IT,39.55725,16.12452 60067,San Martino,1703,78,107,IT,38.36157,15.97634 60085,San Martino di Finita,1703,78,107,IT,39.48988,16.10968 60108,San Mauro Marchesato,1703,78,107,IT,39.10559,16.92561 60134,San Nico,1703,78,107,IT,39.66906,16.43182 60136,San Nicola,1703,78,107,IT,38.21199,15.69381 60137,San Nicola Arcella,1703,78,107,IT,39.84341,15.78634 60140,San Nicola da Crissa,1703,78,107,IT,38.66354,16.28592 60141,San Nicola dellAlto,1703,78,107,IT,39.29094,16.97179 60144,San Nicolò,1703,78,107,IT,38.63426,15.85147 60186,San Pietro a Maida,1703,78,107,IT,38.84731,16.34116 60173,San Pietro Apostolo,1703,78,107,IT,39.00413,16.46783 60192,San Pietro di Caridà,1703,78,107,IT,38.52368,16.1353 60195,San Pietro in Amantea,1703,78,107,IT,39.13658,16.11243 60200,San Pietro in Guarano,1703,78,107,IT,39.34164,16.31304 60214,San Procopio,1703,78,107,IT,38.28214,15.89083 60221,San Roberto,1703,78,107,IT,38.21114,15.73594 60247,San Sostene,1703,78,107,IT,38.63733,16.48751 60248,San Sosti,1703,78,107,IT,39.65879,16.02958 60270,San Vincenzo la Costa,1703,78,107,IT,39.36544,16.1511 60278,San Vito Sullo Ionio,1703,78,107,IT,38.70749,16.40862 60306,Sangineto,1703,78,107,IT,39.60553,15.91481 60321,SantAgata del Bianco,1703,78,107,IT,38.09242,16.08251 60322,SantAgata di Esaro,1703,78,107,IT,39.62235,15.98295 60335,SantAlessio in Aspromonte,1703,78,107,IT,38.1722,15.7573 60344,SantAndrea Apostolo dello Ionio,1703,78,107,IT,38.62165,16.53048 60346,SantAndrea Ionio Marina,1703,78,107,IT,38.62001,16.54927 60396,SantElia,1703,78,107,IT,38.95788,16.58521 60401,SantEufemia dAspromonte,1703,78,107,IT,38.26314,15.85669 60405,SantIlario dello Ionio,1703,78,107,IT,38.21914,16.19517 60409,SantOnofrio,1703,78,107,IT,38.69752,16.14755 60414,Santa Caterina Albanese,1703,78,107,IT,39.5859,16.07039 60416,Santa Caterina dello Ionio,1703,78,107,IT,38.53324,16.52176 60417,Santa Caterina dello Ionio Marina,1703,78,107,IT,38.52736,16.57071 60424,Santa Cristina dAspromonte,1703,78,107,IT,38.2548,15.96996 60431,Santa Domenica,1703,78,107,IT,38.6622,15.86289 60432,Santa Domenica Talao,1703,78,107,IT,39.81875,15.8538 60435,Santa Eufemia Lamezia,1703,78,107,IT,38.91982,16.25221 60473,Santa Maria del Cedro,1703,78,107,IT,39.7462,15.83638 60490,Santa Severina,1703,78,107,IT,39.1477,16.91112 60492,Santa Sofia dEpiro,1703,78,107,IT,39.54597,16.32815 60511,Santo Stefano,1703,78,107,IT,39.34734,16.19898 60523,Santo Stefano di Rogliano,1703,78,107,IT,39.19223,16.32079 60525,Santo Stefano in Aspromonte,1703,78,107,IT,38.16909,15.78983 60539,Saracena,1703,78,107,IT,39.77862,16.15913 60559,Sartano,1703,78,107,IT,39.51169,16.17915 60578,Satriano,1703,78,107,IT,38.6664,16.4797 60585,Savelli,1703,78,107,IT,39.31278,16.77642 60605,Scala Coeli,1703,78,107,IT,39.44824,16.88658 60607,Scalea,1703,78,107,IT,39.80605,15.79635 60615,Scandale,1703,78,107,IT,39.12339,16.96185 60629,Scarcelli,1703,78,107,IT,39.4,16.01667 60654,Scido,1703,78,107,IT,38.24439,15.93251 60655,Scilla,1703,78,107,IT,38.25201,15.71837 60701,Sellia,1703,78,107,IT,38.98206,16.6307 60702,Sellia Marina,1703,78,107,IT,38.88599,16.74931 60715,Seminara,1703,78,107,IT,38.33603,15.87025 60755,Serra dAiello,1703,78,107,IT,39.09004,16.12612 60750,Serra Pedace,1703,78,107,IT,39.27898,16.34557 60752,Serra San Bruno,1703,78,107,IT,38.57474,16.32622 60769,Serrastretta,1703,78,107,IT,39.01319,16.4163 60770,Serrata,1703,78,107,IT,38.51288,16.1007 60785,Sersale,1703,78,107,IT,39.01013,16.7296 60811,Settimo,1703,78,107,IT,39.39158,16.23998 60817,Settingiano,1703,78,107,IT,38.91139,16.5139 60835,Siano,1703,78,107,IT,38.91547,16.60224 60838,Sibari,1703,78,107,IT,39.74733,16.4551 60842,Siderno,1703,78,107,IT,38.26993,16.29607 60861,Simbario,1703,78,107,IT,38.61157,16.33597 60870,Sinopoli,1703,78,107,IT,38.26342,15.8771 60949,Sorbo San Basile,1703,78,107,IT,39.01939,16.5691 60958,Sorianello,1703,78,107,IT,38.59415,16.23212 60959,Soriano Calabro,1703,78,107,IT,38.60038,16.22205 60977,Soverato Marina,1703,78,107,IT,38.68498,16.54991 60978,Soverato Superiore,1703,78,107,IT,38.68993,16.53391 60980,Soveria Mannelli,1703,78,107,IT,39.07784,16.37708 60981,Soveria Simeri,1703,78,107,IT,38.94986,16.67854 60989,Spadola,1703,78,107,IT,38.60378,16.337 61001,Spezzano Albanese,1703,78,107,IT,39.66854,16.30939 61003,Spezzano della Sila,1703,78,107,IT,39.30033,16.33923 61002,Spezzano Piccolo,1703,78,107,IT,39.2901,16.34211 61012,Spilinga,1703,78,107,IT,38.62825,15.90572 61034,Squillace,1703,78,107,IT,38.78091,16.51175 61035,Squillace Lido,1703,78,107,IT,38.77781,16.57007 61042,Staiti,1703,78,107,IT,37.99989,16.03341 61043,Staletti,1703,78,107,IT,38.76428,16.53932 61053,Stazione Montalto-Coretto,1703,78,107,IT,39.4072,16.24313 61060,Stefanaconi,1703,78,107,IT,38.67788,16.1242 61074,Stignano,1703,78,107,IT,38.41705,16.47011 61075,Stilo,1703,78,107,IT,38.47628,16.46746 61099,Strongoli,1703,78,107,IT,39.26576,17.05413 61127,Surdo,1703,78,107,IT,39.32752,16.20139 61168,Tarsia,1703,78,107,IT,39.62311,16.27337 61176,Taurianova,1703,78,107,IT,38.35525,16.01306 61184,Taverna,1703,78,107,IT,39.022,16.58081 61240,Terranova da Sibari,1703,78,107,IT,39.65548,16.33979 61239,Terranova Sappo Minulio,1703,78,107,IT,38.32175,16.00747 61247,Terravecchia,1703,78,107,IT,39.46594,16.94623 61284,Tiriolo,1703,78,107,IT,38.94069,16.51046 61289,Tivolille Pasquali-Merenzata,1703,78,107,IT,39.27953,16.20738 61316,Torano Castello,1703,78,107,IT,39.50396,16.16103 61375,Torre di Ruggiero,1703,78,107,IT,38.65293,16.37211 61355,Torre Melissa,1703,78,107,IT,39.31013,17.1066 61390,Torretta,1703,78,107,IT,39.45358,17.03632 61413,Tortora,1703,78,107,IT,39.9413,15.80518 61414,Tortora Marina,1703,78,107,IT,39.92293,15.76943 61462,Trebisacce,1703,78,107,IT,39.87128,16.5342 61481,Trenta,1703,78,107,IT,39.28541,16.32093 61552,Tronca,1703,78,107,IT,39.24617,17.10582 61556,Tropea,1703,78,107,IT,38.67449,15.89505 61598,Umbriatico,1703,78,107,IT,39.35336,16.91798 61622,Vaccarizzo Albanese,1703,78,107,IT,39.5854,16.43289 61632,Vadue,1703,78,107,IT,39.2806,16.22875 61707,Vallefiorita,1703,78,107,IT,38.77638,16.461 61709,Vallelonga,1703,78,107,IT,38.64742,16.29659 61763,Varapodio,1703,78,107,IT,38.31633,15.98347 61785,Vazzano,1703,78,107,IT,38.63288,16.248 61835,Verbicaro,1703,78,107,IT,39.76076,15.9073 61877,Verzino,1703,78,107,IT,39.31325,16.85613 61907,Vibo Valentia,1703,78,107,IT,38.67618,16.10094 62017,Villa San Giovanni,1703,78,107,IT,38.21991,15.63689 62117,Villapiana,1703,78,107,IT,39.84573,16.45528 62118,Villapiana Lido,1703,78,107,IT,39.81203,16.4882 62227,Weather Station,1703,78,107,IT,37.96136,16.0997 62228,Zaccanopoli,1703,78,107,IT,38.66548,15.92874 62230,Zagarise,1703,78,107,IT,38.99985,16.6642 62233,Zambrone,1703,78,107,IT,38.69878,15.98982 62285,Zumpano,1703,78,107,IT,39.31053,16.29269 62287,Zungri,1703,78,107,IT,38.65668,15.98409 135254,Acerno,1669,72,107,IT,40.73771,15.05695 135255,Acerra,1669,72,107,IT,40.94477,14.3714 135294,Afragola,1669,72,107,IT,40.92298,14.30935 135298,Agerola,1669,72,107,IT,40.63771,14.53884 135319,Agropoli,1669,72,107,IT,40.34923,14.99067 135328,Aiello del Sabato,1669,72,107,IT,40.88847,14.82123 135330,Ailano,1669,72,107,IT,41.39001,14.20536 135334,Airola,1669,72,107,IT,41.05871,14.55924 135350,Albanella,1669,72,107,IT,40.47943,15.11454 135399,Alfano,1669,72,107,IT,40.17687,15.4245 135411,Alife,1669,72,107,IT,41.32612,14.33403 135432,Altavilla Irpina,1669,72,107,IT,41.00619,14.78093 135435,Altavilla Silentina,1669,72,107,IT,40.53012,15.13153 135448,Alvignano,1669,72,107,IT,41.24427,14.33671 135456,Amalfi,1669,72,107,IT,40.6349,14.60238 135472,Amodio-Massariola,1669,72,107,IT,40.88872,14.09091 135473,Amorosi,1669,72,107,IT,41.20273,14.46598 135475,Anacapri,1669,72,107,IT,40.5517,14.21225 135490,Andretta-Mattinella,1669,72,107,IT,40.93742,15.32485 135500,Angri,1669,72,107,IT,40.73815,14.5707 135508,Annunziata,1669,72,107,IT,41.121,14.36518 135515,Antessano,1669,72,107,IT,40.73293,14.77744 135532,Apice Vecchio,1669,72,107,IT,41.12012,14.93104 135534,Apollosa,1669,72,107,IT,41.09156,14.69625 135543,Aquara,1669,72,107,IT,40.44391,15.25386 135546,Aquilonia,1669,72,107,IT,40.98688,15.4751 135587,Arenella,1669,72,107,IT,40.85734,14.2228 135599,Ariano,1669,72,107,IT,40.65668,15.02481 135600,Ariano Irpino-Martiri,1669,72,107,IT,41.16024,15.10625 135603,Arienzo,1669,72,107,IT,41.02734,14.4977 135606,Ariola,1669,72,107,IT,40.62795,15.43453 135623,Arola-Preazzano,1669,72,107,IT,40.63333,14.43333 135626,Arpaia,1669,72,107,IT,41.03678,14.55175 135627,Arpaise,1669,72,107,IT,41.02977,14.74387 135629,Arpino,1669,72,107,IT,40.88882,14.32015 135649,Arzano,1669,72,107,IT,40.90959,14.26519 135653,Ascea,1669,72,107,IT,40.14082,15.18583 135674,Atena Lucana,1669,72,107,IT,40.45464,15.55633 135678,Atrani,1669,72,107,IT,40.63617,14.60933 135680,Atripalda,1669,72,107,IT,40.91867,14.82721 135686,Auletta,1669,72,107,IT,40.56116,15.42313 135699,Avella,1669,72,107,IT,40.95995,14.60087 135700,Avellino,1669,72,107,IT,40.91494,14.79103 135702,Aversa,1669,72,107,IT,40.97259,14.20745 135715,Avvocata,1669,72,107,IT,40.85432,14.24325 135729,Bacoli,1669,72,107,IT,40.79672,14.07349 135762,Bagnoli,1669,72,107,IT,40.81322,14.16807 135763,Bagnoli Irpino,1669,72,107,IT,40.83103,15.07173 135777,Baia,1669,72,107,IT,41.30366,14.25016 135778,Baiano,1669,72,107,IT,40.95142,14.6165 135805,Banzano,1669,72,107,IT,40.84338,14.80182 135812,Barano dIschia,1669,72,107,IT,40.71472,13.92522 135865,Baronissi,1669,72,107,IT,40.74817,14.7738 135867,Barra,1669,72,107,IT,40.84255,14.31849 135883,Baselice,1669,72,107,IT,41.39296,14.97363 135909,Battipaglia,1669,72,107,IT,40.60861,14.98209 135945,Bellizzi,1669,72,107,IT,40.61981,14.94685 135947,Bellona,1669,72,107,IT,41.16052,14.23313 135948,Bellosguardo,1669,72,107,IT,40.42222,15.31219 135959,Beltiglio-San Giovanni,1669,72,107,IT,41.06239,14.75273 135976,Benevento,1669,72,107,IT,41.1307,14.77816 136058,Bisaccia,1669,72,107,IT,41.00923,15.37699 136059,Bisaccia Nuova,1669,72,107,IT,41.0096,15.35546 136071,Bivio Mortola,1669,72,107,IT,41.39557,13.89663 136073,Bivio Santa Cecilia,1669,72,107,IT,40.52224,15.00018 136134,Bonea,1669,72,107,IT,41.07312,14.61683 136139,Bonito,1669,72,107,IT,41.09857,15.00071 136170,Borgo,1669,72,107,IT,40.84022,14.78364 136247,Boscoreale,1669,72,107,IT,40.77274,14.48118 136248,Boscotrecase,1669,72,107,IT,40.77296,14.46185 136282,Bracigliano,1669,72,107,IT,40.8188,14.70772 136322,Brezza,1669,72,107,IT,41.11073,14.11201 136375,Brusciano,1669,72,107,IT,40.92237,14.42386 136386,Bucciano,1669,72,107,IT,41.07756,14.56898 136388,Buccino,1669,72,107,IT,40.6367,15.38116 136405,Buonabitacolo,1669,72,107,IT,40.26855,15.62119 136406,Buonalbergo,1669,72,107,IT,41.22236,14.97799 136466,Caggiano,1669,72,107,IT,40.5624,15.49629 136474,Caianello,1669,72,107,IT,41.30509,14.08516 136475,Caiazzo,1669,72,107,IT,41.18435,14.35946 136481,Cairano,1669,72,107,IT,40.89552,15.37069 136484,Caivano,1669,72,107,IT,40.95753,14.30591 136486,Calabritto,1669,72,107,IT,40.78342,15.22285 136529,Calitri,1669,72,107,IT,40.92569,15.40393 136551,Calvanico,1669,72,107,IT,40.77616,14.82697 136557,Calvi,1669,72,107,IT,41.07162,14.86524 136558,Calvi Risorta,1669,72,107,IT,41.21598,14.13092 136564,Calvizzano,1669,72,107,IT,40.90782,14.18581 136585,Camerota,1669,72,107,IT,40.03262,15.37048 136586,Camigliano,1669,72,107,IT,41.18116,14.20978 136599,Campagna,1669,72,107,IT,40.66661,15.10638 136608,Campanarello,1669,72,107,IT,41.04717,14.91418 136658,Campolattaro,1669,72,107,IT,41.28693,14.73043 136661,Campoli del Monte Taburno,1669,72,107,IT,41.13074,14.64649 136672,Campora,1669,72,107,IT,40.30541,15.29236 136680,Camposano,1669,72,107,IT,40.95242,14.52991 136695,Cancello-Arnone,1669,72,107,IT,41.0734,14.02542 136703,Candida,1669,72,107,IT,40.94148,14.8723 136718,Cannalonga,1669,72,107,IT,40.24461,15.29325 136756,Capaccio,1669,72,107,IT,40.42435,15.07981 136757,Capaccio Scalo,1669,72,107,IT,40.45531,15.00891 136766,Capezzano Inferiore,1669,72,107,IT,40.70067,14.77301 136767,Capezzano-Cologna,1669,72,107,IT,40.71518,14.77364 136775,Capitignano,1669,72,107,IT,40.71851,14.90465 136782,Capodrise,1669,72,107,IT,41.04268,14.30607 136787,Caposele,1669,72,107,IT,40.81553,15.22337 136809,Capri,1669,72,107,IT,40.55073,14.24263 136816,Capriati A Volturno,1669,72,107,IT,41.46801,14.14602 136818,Capriglia,1669,72,107,IT,40.73216,14.76035 136819,Capriglia Irpina,1669,72,107,IT,40.96032,14.77724 136825,Capua,1669,72,107,IT,41.10519,14.21269 136832,Carano,1669,72,107,IT,41.20526,13.90972 136847,Carbonara di Nola,1669,72,107,IT,40.87441,14.57884 136862,Cardito,1669,72,107,IT,40.9459,14.29952 136875,Carife,1669,72,107,IT,41.02667,15.21044 136876,Carifi-Torello-Priscoli,1669,72,107,IT,40.79136,14.73212 136879,Carinaro,1669,72,107,IT,40.98291,14.21963 136881,Carinola,1669,72,107,IT,41.18775,13.9824 136956,Casagiove,1669,72,107,IT,41.07124,14.31163 136960,Casal di Principe,1669,72,107,IT,41.00996,14.13013 136959,Casal Velino,1669,72,107,IT,40.19034,15.11137 136966,Casalbore,1669,72,107,IT,41.23373,15.00752 136968,Casalbuono,1669,72,107,IT,40.21425,15.68717 136971,Casalduni,1669,72,107,IT,41.2608,14.69532 136972,Casale,1669,72,107,IT,41.21972,14.00231 136987,Casaletto Spartano,1669,72,107,IT,40.15134,15.62058 136994,Casali-San Potito,1669,72,107,IT,40.7639,14.67501 137004,Casalnuovo di Napoli,1669,72,107,IT,40.90969,14.34205 137009,Casaluce,1669,72,107,IT,40.99785,14.19671 137015,Casamarciano,1669,72,107,IT,40.93191,14.55324 137018,Casamicciola Terme,1669,72,107,IT,40.74661,13.91202 137019,Casandrino,1669,72,107,IT,40.92845,14.24744 137021,Casanova,1669,72,107,IT,41.19254,13.96344 137026,Casapesenna,1669,72,107,IT,40.99151,14.13613 137029,Casapulla,1669,72,107,IT,41.07665,14.28927 137031,Casarea,1669,72,107,IT,40.88828,14.36349 137041,Casavatore,1669,72,107,IT,40.89921,14.27663 137044,Cascano,1669,72,107,IT,41.23232,13.96927 137063,Caselle in Pittari,1669,72,107,IT,40.17319,15.54311 137065,Caserta,1669,72,107,IT,41.07262,14.33231 137077,Casola,1669,72,107,IT,41.09513,14.38172 137079,Casola di Napoli,1669,72,107,IT,40.6978,14.53006 137089,Casoria,1669,72,107,IT,40.90751,14.293 137096,Cassano Irpino,1669,72,107,IT,40.87042,15.02595 137129,Castel Baronia,1669,72,107,IT,41.04832,15.18884 137132,Castel Campagnano,1669,72,107,IT,41.1824,14.453 137174,Castel di Sasso,1669,72,107,IT,41.19242,14.27773 137146,Castel Morrone,1669,72,107,IT,41.12102,14.35473 137150,Castel San Giorgio,1669,72,107,IT,40.78198,14.7009 137152,Castel San Lorenzo,1669,72,107,IT,40.41979,15.22523 137161,Castel Volturno,1669,72,107,IT,41.03288,13.94354 137185,Castelcivita,1669,72,107,IT,40.49367,15.23354 137196,Castelfranci,1669,72,107,IT,40.93066,15.04331 137201,Castelfranco in Miscano,1669,72,107,IT,41.30072,15.08607 137213,Castellammare di Stabia,1669,72,107,IT,40.70211,14.48685 137257,Castello del Matese,1669,72,107,IT,41.36672,14.37773 137261,Castello di Cisterna,1669,72,107,IT,40.91594,14.41117 137288,Castelnuovo Cilento,1669,72,107,IT,40.21846,15.17802 137300,Castelnuovo di Conza,1669,72,107,IT,40.82062,15.31875 137305,Castelpagano,1669,72,107,IT,41.40177,14.80711 137309,Castelpoto,1669,72,107,IT,41.14066,14.70069 137324,Castelvenere,1669,72,107,IT,41.23445,14.5475 137327,Castelvetere in Val Fortore,1669,72,107,IT,41.44257,14.94118 137328,Castelvetere sul Calore,1669,72,107,IT,40.9298,14.9864 137352,Castiglione del Genovesi,1669,72,107,IT,40.72367,14.84796 137400,Cautano,1669,72,107,IT,41.15009,14.64425 137401,Cava Dè Tirreni,1669,72,107,IT,40.69954,14.70773 137475,Celle di Bulgheria,1669,72,107,IT,40.0954,15.40324 137482,Cellole,1669,72,107,IT,41.20338,13.85332 137499,Centola,1669,72,107,IT,40.0698,15.31191 137503,Centro Urbano,1669,72,107,IT,40.81986,15.31953 137508,Ceppaloni,1669,72,107,IT,41.04523,14.76102 137517,Ceraso,1669,72,107,IT,40.1943,15.25606 137528,Cercola,1669,72,107,IT,40.86043,14.35733 137566,Cerreto Sannita,1669,72,107,IT,41.28296,14.56147 137595,Cervinara,1669,72,107,IT,41.02042,14.61444 137596,Cervino,1669,72,107,IT,41.04001,14.42403 137600,Cesa,1669,72,107,IT,40.96287,14.23081 137613,Cesinali,1669,72,107,IT,40.89711,14.82774 137620,Cetara,1669,72,107,IT,40.64756,14.70091 137638,Chiaia,1669,72,107,IT,40.83255,14.22677 137639,Chiaiano,1669,72,107,IT,40.88101,14.20759 137642,Chianche,1669,72,107,IT,41.04632,14.78904 137693,Chiusano di San Domenico,1669,72,107,IT,40.93312,14.91634 137709,Cicciano,1669,72,107,IT,40.96402,14.53487 137710,Cicerale,1669,72,107,IT,40.34404,15.12959 137726,Cimitile,1669,72,107,IT,40.94231,14.52558 137743,Ciorlano,1669,72,107,IT,41.45022,14.15832 137746,Circello,1669,72,107,IT,41.35455,14.8091 137864,Colle Sannita,1669,72,107,IT,41.36374,14.8345 137902,Colliano,1669,72,107,IT,40.72293,15.28969 137944,Comiziano,1669,72,107,IT,40.95163,14.55124 137954,Conca dei Marini,1669,72,107,IT,40.61754,14.57311 137955,Conca della Campania,1669,72,107,IT,41.33174,13.99142 137979,Contrada,1669,72,107,IT,40.86811,14.77747 137981,Controne,1669,72,107,IT,40.51018,15.20404 137982,Contursi Terme,1669,72,107,IT,40.65026,15.24163 137985,Coperchia,1669,72,107,IT,40.72005,14.76654 137993,Corbara,1669,72,107,IT,40.72278,14.59187 138018,Corleto Monforte,1669,72,107,IT,40.43756,15.38013 138114,Country Park,1669,72,107,IT,40.88234,14.07786 138155,Crispano,1669,72,107,IT,40.95251,14.28993 138179,Cuccaro Vetere,1669,72,107,IT,40.16404,15.30677 138209,Curti,1669,72,107,IT,41.07616,14.28039 138212,Cusano Mutri,1669,72,107,IT,41.33624,14.51013 138290,Domicella,1669,72,107,IT,40.88019,14.58716 138325,Dragonea,1669,72,107,IT,40.67917,14.71094 138326,Dragoni,1669,72,107,IT,41.27619,14.30368 138340,Dugenta,1669,72,107,IT,41.13468,14.45353 138345,Durazzano,1669,72,107,IT,41.06286,14.44947 138348,Eboli,1669,72,107,IT,40.61747,15.05693 138372,Ercolano,1669,72,107,IT,40.80783,14.35012 138411,Faiano,1669,72,107,IT,40.66254,14.90244 138412,Faicchio,1669,72,107,IT,41.27816,14.4774 138414,Falciano del Massico,1669,72,107,IT,41.16271,13.94812 138444,Faraldo-Nocelleto,1669,72,107,IT,40.77992,14.76363 138470,Felitto,1669,72,107,IT,40.37351,15.24306 138545,Fisciano,1669,72,107,IT,40.77175,14.79454 138567,Flumeri,1669,72,107,IT,41.07623,15.15072 138573,Foglianise,1669,72,107,IT,41.16127,14.67112 138579,Foiano di Val Fortore,1669,72,107,IT,41.35283,14.97635 138595,Fontanarosa,1669,72,107,IT,41.01812,15.02055 138611,Fontegreca,1669,72,107,IT,41.45653,14.18385 138620,Forchia,1669,72,107,IT,41.03144,14.53573 138629,Forino,1669,72,107,IT,40.85829,14.73254 138630,Forio,1669,72,107,IT,40.73757,13.86003 138638,Formicola,1669,72,107,IT,41.21084,14.23462 138688,Fragneto LAbate,1669,72,107,IT,41.2558,14.78382 138689,Fragneto Monforte,1669,72,107,IT,41.24634,14.76342 138701,Franche,1669,72,107,IT,40.67175,14.52139 138705,Francolise,1669,72,107,IT,41.18501,14.05672 138718,Frasso Telesino,1669,72,107,IT,41.15682,14.52783 138722,Frattamaggiore,1669,72,107,IT,40.9414,14.27588 138723,Frattaminore,1669,72,107,IT,40.9558,14.27201 138733,Frigento,1669,72,107,IT,41.01103,15.10026 138734,Frignano,1669,72,107,IT,40.99811,14.17913 138752,Fuorigrotta,1669,72,107,IT,40.83333,14.2 138753,Fuorni,1669,72,107,IT,40.64063,14.84925 138758,Furore,1669,72,107,IT,40.62061,14.54904 138764,Futani,1669,72,107,IT,40.15156,15.32366 138816,Gallo,1669,72,107,IT,41.46499,14.22519 138817,Gallo Matese,1669,72,107,IT,41.46452,14.22502 138820,Galluccio,1669,72,107,IT,41.35232,13.95372 138928,Gesualdo,1669,72,107,IT,41.00554,15.07262 138942,Giano Vetusto,1669,72,107,IT,41.20272,14.19342 138957,Giffoni Valle Piana,1669,72,107,IT,40.71811,14.94235 138965,Ginestra degli Schiavoni,1669,72,107,IT,41.27992,15.04374 138967,Gioi,1669,72,107,IT,40.2897,15.21806 138968,Gioia Sannitica,1669,72,107,IT,41.29965,14.44381 138988,Giugliano in Campania,1669,72,107,IT,40.92849,14.20197 138995,Giungano,1669,72,107,IT,40.3945,15.10792 139056,Gragnano,1669,72,107,IT,40.68907,14.52036 139084,Grazzanise,1669,72,107,IT,41.0897,14.09878 139086,Greci,1669,72,107,IT,41.25182,15.16915 139096,Gricignano di Aversa,1669,72,107,IT,40.97973,14.23087 139122,Grottaminarda,1669,72,107,IT,41.06972,15.05894 139129,Grottola,1669,72,107,IT,41.31708,14.04121 139131,Grottolella,1669,72,107,IT,40.97144,14.78894 139140,Grumo Nevano,1669,72,107,IT,40.93591,14.25983 139159,Guardia Lombardi,1669,72,107,IT,40.95177,15.20878 139162,Guardia Sanframondi,1669,72,107,IT,41.2564,14.59851 139227,Ischia,1669,72,107,IT,40.73793,13.94862 139228,Ischia Porto,1669,72,107,IT,40.73913,13.951 139258,Ispani,1669,72,107,IT,40.0873,15.55827 139313,Lacco Ameno,1669,72,107,IT,40.74901,13.88718 139314,Lacedonia,1669,72,107,IT,41.05022,15.42169 139355,Lancusi-Penta-Bolano,1669,72,107,IT,40.76125,14.78524 139364,Lanzara,1669,72,107,IT,40.77473,14.67619 139368,Lapio,1669,72,107,IT,40.98293,14.9465 139396,Laura,1669,72,107,IT,40.4322,14.98886 139397,Laureana Cilento,1669,72,107,IT,40.3011,15.03876 139404,Laurino,1669,72,107,IT,40.33915,15.3381 139405,Laurito,1669,72,107,IT,40.16915,15.40741 139406,Lauro,1669,72,107,IT,40.87972,14.63013 139415,Laviano,1669,72,107,IT,40.78619,15.30791 139476,Letino,1669,72,107,IT,41.45302,14.25542 139478,Lettere,1669,72,107,IT,40.70491,14.54494 139492,Liberi,1669,72,107,IT,41.22648,14.28985 139497,Licinella-Torre di Paestum,1669,72,107,IT,40.40656,14.99764 139499,Licusati,1669,72,107,IT,40.0541,15.36437 139516,Limatola,1669,72,107,IT,41.14012,14.39437 139532,Lioni,1669,72,107,IT,40.88083,15.18335 139546,Liveri,1669,72,107,IT,40.90406,14.56536 139662,Luogosano,1669,72,107,IT,40.98643,14.99206 139670,Lusciano,1669,72,107,IT,40.97001,14.19043 139679,Lustra,1669,72,107,IT,40.2883,15.06826 139683,Luzzano,1669,72,107,IT,41.06818,14.53611 139690,Macchia,1669,72,107,IT,40.65353,14.97879 139694,Maccoli-Perrillo,1669,72,107,IT,41.08762,14.80585 139697,Macerata Campania,1669,72,107,IT,41.06327,14.2775 139706,Maddaloni,1669,72,107,IT,41.03578,14.3823 139728,Magliano Vetere,1669,72,107,IT,40.34701,15.23666 139749,Maiori,1669,72,107,IT,40.64848,14.6407 139759,Malche-Santa Croce-Serroni,1669,72,107,IT,40.70925,14.90668 139801,Manocalzati,1669,72,107,IT,40.94151,14.84767 139827,Marano di Napoli,1669,72,107,IT,40.8971,14.18824 139847,Marcianise,1669,72,107,IT,41.03064,14.29868 139870,Mariglianella,1669,72,107,IT,40.92962,14.43703 139871,Marigliano,1669,72,107,IT,40.9248,14.45612 139878,Marina di Camerota,1669,72,107,IT,40.00356,15.36717 139882,Marina di Casal Velino,1669,72,107,IT,40.17665,15.12218 139944,Marzanello,1669,72,107,IT,41.31447,14.11611 139946,Marzano Appio,1669,72,107,IT,41.31772,14.04502 139947,Marzano di Nola,1669,72,107,IT,40.90141,14.58359 139976,Massa di Somma,1669,72,107,IT,40.84551,14.37513 139972,Massa Lubrense,1669,72,107,IT,40.60937,14.37202 139985,Masseria Vecchia Ovest,1669,72,107,IT,40.88966,14.06573 139996,Matinella,1669,72,107,IT,40.50158,15.06692 140051,Melito di Napoli,1669,72,107,IT,40.91948,14.23104 140050,Melito Irpino,1669,72,107,IT,41.10312,15.05235 140053,Melizzano,1669,72,107,IT,41.16181,14.50554 140076,Mercato,1669,72,107,IT,40.71612,14.9401 140077,Mercato San Severino,1669,72,107,IT,40.78468,14.75369 140081,Mercogliano,1669,72,107,IT,40.92157,14.74491 140101,Meta,1669,72,107,IT,40.64081,14.41582 140127,Miano,1669,72,107,IT,40.88816,14.25339 140141,Mignano Monte Lungo,1669,72,107,IT,41.40592,13.98552 140161,Minori,1669,72,107,IT,40.6503,14.62684 140167,Mirabella Eclano,1669,72,107,IT,41.04496,15.00022 140202,Moiano,1669,72,107,IT,41.07968,14.54431 140207,Moio della Civitella-Pellare,1669,72,107,IT,40.2471,15.26886 140216,Molinara,1669,72,107,IT,41.29728,14.90867 140276,Mondragone,1669,72,107,IT,41.11399,13.89157 140313,Montaguto,1669,72,107,IT,41.24873,15.24845 140343,Montano Antilia,1669,72,107,IT,40.16264,15.36315 140385,Monte di Procida,1669,72,107,IT,40.79809,14.05023 140369,Monte San Giacomo,1669,72,107,IT,40.34411,15.54221 140395,Montecalvario,1669,72,107,IT,40.84436,14.24555 140396,Montecalvo Irpino,1669,72,107,IT,41.19616,15.03446 140420,Montecorice,1669,72,107,IT,40.23444,14.98504 140421,Montecorvino Pugliano,1669,72,107,IT,40.67921,14.94475 140422,Montecorvino Rovella,1669,72,107,IT,40.6918,14.97862 140426,Montedecoro,1669,72,107,IT,41.02772,14.41774 140429,Montefalcione,1669,72,107,IT,40.96173,14.88312 140432,Montefalcone di Val Fortore,1669,72,107,IT,41.3243,15.00898 140443,Monteforte Cilento,1669,72,107,IT,40.36481,15.19486 140444,Monteforte Irpino,1669,72,107,IT,40.90246,14.744 140448,Montefredane,1669,72,107,IT,40.95978,14.81374 140449,Montefusco,1669,72,107,IT,41.03691,14.85498 140476,Montella,1669,72,107,IT,40.84372,15.01785 140487,Montemarano,1669,72,107,IT,40.91414,14.99766 140494,Montemiletto,1669,72,107,IT,41.01168,14.90034 140529,Monterusciello,1669,72,107,IT,40.86874,14.08276 140531,Montesano sulla Marcellana,1669,72,107,IT,40.2761,15.7039 140532,Montesarchio,1669,72,107,IT,41.06227,14.64096 140549,Monteverde,1669,72,107,IT,40.99858,15.53361 140558,Monticelli,1669,72,107,IT,40.65,15.01667 140587,Montoro Superiore,1669,72,107,IT,40.81699,14.79841 140606,Morcone,1669,72,107,IT,41.34269,14.66889 140618,Morigerati,1669,72,107,IT,40.14056,15.55508 140631,Morra de Sanctis,1669,72,107,IT,40.92902,15.24285 140645,Moschiano,1669,72,107,IT,40.87311,14.65594 140679,Mugnano del Cardinale,1669,72,107,IT,40.94248,14.6361 140680,Mugnano di Napoli,1669,72,107,IT,40.90936,14.20984 140697,Musci,1669,72,107,IT,40.87861,14.366 140713,Naples,1669,72,107,IT,40.85216,14.26811 140714,Napoli,1669,72,107,IT,40.88333,14.41667 140781,Nocelleto,1669,72,107,IT,41.17067,14.01565 140782,Nocera Inferiore,1669,72,107,IT,40.7454,14.64542 140784,Nocera Superiore,1669,72,107,IT,40.74248,14.67447 140797,Nola,1669,72,107,IT,40.92606,14.52816 140836,Novi Velia,1669,72,107,IT,40.22262,15.286 140850,Nuova Conza della Campania,1669,72,107,IT,40.8586,15.33645 140861,Nusco,1669,72,107,IT,40.8882,15.09185 140883,Ogliastro Cilento,1669,72,107,IT,40.35113,15.04638 140891,Olevano sul Tusciano,1669,72,107,IT,40.65721,15.02305 140901,Oliveto Citra,1669,72,107,IT,40.69039,15.23346 140919,Omignano,1669,72,107,IT,40.24932,15.08406 140968,Orria,1669,72,107,IT,40.29971,15.17116 140979,Orta di Atella,1669,72,107,IT,40.96441,14.26854 141020,Ospedaletto dAlpinolo,1669,72,107,IT,40.93906,14.74652 141048,Ottati,1669,72,107,IT,40.46291,15.31526 141050,Ottaviano,1669,72,107,IT,40.85193,14.47826 141088,Padula,1669,72,107,IT,40.33901,15.65634 141090,Paduli,1669,72,107,IT,41.16793,14.88688 141094,Pagani,1669,72,107,IT,40.74199,14.61448 58208,Pagliarone,1669,72,107,IT,40.63006,14.91325 58214,Pago del Vallo di Lauro,1669,72,107,IT,40.89721,14.60764 58213,Pago Veiano,1669,72,107,IT,41.24243,14.86497 58245,Palinuro,1669,72,107,IT,40.03681,15.28812 58253,Palma Campania,1669,72,107,IT,40.86608,14.5517 58265,Palomonte,1669,72,107,IT,40.66251,15.29186 58281,Pannarano,1669,72,107,IT,41.01082,14.70293 58288,Paolisi,1669,72,107,IT,41.03731,14.57918 58303,Parete,1669,72,107,IT,40.95891,14.16193 58311,Parolise,1669,72,107,IT,40.93045,14.88172 58321,Pascarola,1669,72,107,IT,40.97643,14.305 58332,Passo di Mirabella-Pianopantano,1669,72,107,IT,41.05468,15.01649 58339,Pastorano,1669,72,107,IT,41.18082,14.19823 58345,Paternopoli,1669,72,107,IT,40.97268,15.03242 58357,Paupisi,1669,72,107,IT,41.19662,14.66457 58395,Pellezzano,1669,72,107,IT,40.72521,14.75744 58400,Pendino,1669,72,107,IT,40.84708,14.26321 58418,Perdifumo,1669,72,107,IT,40.26694,15.01652 58426,Perito,1669,72,107,IT,40.29854,15.14746 58444,Pertosa,1669,72,107,IT,40.54346,15.45009 58460,Pesco Sannita,1669,72,107,IT,41.23273,14.81122 58475,Petina,1669,72,107,IT,40.53211,15.37346 58488,Petruro Irpino,1669,72,107,IT,41.03192,14.79754 58498,Pezzano-Filetta,1669,72,107,IT,40.69773,14.86971 58506,Piaggine,1669,72,107,IT,40.34498,15.37777 58515,Piana di Monte Verna,1669,72,107,IT,41.16712,14.33373 58536,Pianillo,1669,72,107,IT,40.63416,14.54922 58537,Piano,1669,72,107,IT,40.8205,14.76005 58545,Piano di Sorrento,1669,72,107,IT,40.62806,14.41729 58553,Pianura,1669,72,107,IT,40.85907,14.17314 58570,Piazza del Galdo-SantAngelo,1669,72,107,IT,40.7739,14.71696 58571,Piazza di Pandola,1669,72,107,IT,40.80748,14.7718 58568,Piazza Roma,1669,72,107,IT,40.70434,14.543 58572,Piazza-Tralia-Pendolo,1669,72,107,IT,40.67351,14.50455 58574,Piazzola,1669,72,107,IT,40.87265,14.50016 58576,Piazzolla,1669,72,107,IT,40.88964,14.51579 58588,Piedimonte,1669,72,107,IT,41.18886,13.89856 58590,Piedimonte Matese,1669,72,107,IT,41.35082,14.36803 58596,Piegolelle-San Bartolomeo,1669,72,107,IT,40.68583,14.82312 58611,Pietradefusi,1669,72,107,IT,41.04316,14.88415 58616,Pietramelara,1669,72,107,IT,41.27086,14.18711 58624,Pietraroja,1669,72,107,IT,41.34782,14.54963 58626,Pietrastornina,1669,72,107,IT,40.99535,14.71833 58627,Pietravairano,1669,72,107,IT,41.32522,14.16592 58628,Pietre,1669,72,107,IT,40.70048,14.61993 58629,Pietrelcina,1669,72,107,IT,41.19942,14.84414 58662,Pignataro Maggiore,1669,72,107,IT,41.19006,14.16978 58670,Pimonte,1669,72,107,IT,40.67361,14.50984 58706,Piscinola,1669,72,107,IT,40.89299,14.23394 58707,Pisciotta,1669,72,107,IT,40.1089,15.23456 58769,Poggiomarino,1669,72,107,IT,40.80114,14.54066 58770,Poggioreale,1669,72,107,IT,40.86543,14.28877 58788,Policastro Bussentino,1669,72,107,IT,40.07511,15.52165 58795,Polla,1669,72,107,IT,40.51433,15.49715 58797,Pollena Trocchia,1669,72,107,IT,40.85134,14.37911 58799,Pollica,1669,72,107,IT,40.1907,15.05716 58807,Polvica,1669,72,107,IT,40.69484,14.64019 58816,Pomigliano dArco,1669,72,107,IT,40.90975,14.38316 58817,Pompei,1669,72,107,IT,40.74574,14.49698 58832,Ponte,1669,72,107,IT,41.21554,14.69826 58863,Pontecagnano,1669,72,107,IT,40.64448,14.87628 58871,Pontelandolfo,1669,72,107,IT,41.29231,14.68956 58873,Pontelatone,1669,72,107,IT,41.1946,14.24814 58885,Ponticelli,1669,72,107,IT,40.8542,14.33038 58917,Portici,1669,72,107,IT,40.81563,14.33716 58918,Portico di Caserta,1669,72,107,IT,41.05562,14.28022 58922,Porto,1669,72,107,IT,40.84395,14.25724 58954,Posillipo,1669,72,107,IT,40.81279,14.20001 58956,Positano,1669,72,107,IT,40.62829,14.48427 58962,Postiglione,1669,72,107,IT,40.55901,15.23236 58981,Pozzillo,1669,72,107,IT,41.20337,14.1953 58989,Pozzuoli,1669,72,107,IT,40.84394,14.0952 58999,Praiano,1669,72,107,IT,40.61213,14.52461 59017,Prata di Principato Ultra,1669,72,107,IT,40.98626,14.83803 59014,Prata Sannita Centro,1669,72,107,IT,41.43282,14.20272 59019,Pratella,1669,72,107,IT,41.40579,14.17913 59030,Prato Perillo,1669,72,107,IT,40.3969,15.52503 59034,Pratola Serra,1669,72,107,IT,40.98655,14.85149 59035,Pratole,1669,72,107,IT,40.6258,14.92565 59062,Prepezzano,1669,72,107,IT,40.72754,14.89123 59065,Presenzano,1669,72,107,IT,41.37823,14.09162 59076,Prignano Cilento,1669,72,107,IT,40.33335,15.06739 59086,Procida,1669,72,107,IT,40.75636,14.01457 59111,Provincia di Avellino,1669,72,107,IT,40.98333,15.15 59114,Provincia di Benevento,1669,72,107,IT,41.21792,14.7464 59122,Provincia di Caserta,1669,72,107,IT,41.23333,14.16667 59172,Provincia di Salerno,1669,72,107,IT,40.45,15.26667 59196,Puglianello,1669,72,107,IT,41.22179,14.45023 59197,Pugliano,1669,72,107,IT,40.67876,14.94543 59211,Quadrelle,1669,72,107,IT,40.94851,14.63934 59213,Quadrivio,1669,72,107,IT,40.62494,15.10353 59215,Qualiano,1669,72,107,IT,40.91899,14.15352 59228,Quarto,1669,72,107,IT,40.87822,14.14352 59245,Quindici,1669,72,107,IT,40.86497,14.64663 59298,Ravello,1669,72,107,IT,40.64932,14.61167 59302,Raviscanina,1669,72,107,IT,41.3709,14.24335 59309,Recale,1669,72,107,IT,41.05702,14.3027 59325,Reino,1669,72,107,IT,41.29219,14.82347 59339,Rettifilo-Vannullo,1669,72,107,IT,40.45125,15.02794 59358,Riardo,1669,72,107,IT,41.26197,14.15045 59370,Ricigliano,1669,72,107,IT,40.66803,15.4779 59477,Rocca San Felice,1669,72,107,IT,40.95014,15.16656 59490,Roccabascerana,1669,72,107,IT,41.01842,14.71684 59495,Roccadaspide,1669,72,107,IT,40.42333,15.19118 59503,Roccagloriosa,1669,72,107,IT,40.10628,15.43642 59509,Roccamonfina,1669,72,107,IT,41.28683,13.97905 59514,Roccapiemonte,1669,72,107,IT,40.76009,14.69089 59515,Roccarainola,1669,72,107,IT,40.9725,14.54283 59517,Roccaromana,1669,72,107,IT,41.2736,14.2219 59535,Rocchetta,1669,72,107,IT,41.23716,14.15765 59556,Rofrano,1669,72,107,IT,40.21277,15.42848 59631,Roscigno,1669,72,107,IT,40.39997,15.34585 59661,Rotondi,1669,72,107,IT,41.03293,14.59548 59706,Rutino,1669,72,107,IT,40.30072,15.07328 59707,Ruviano,1669,72,107,IT,41.21063,14.40983 59717,Sacco,1669,72,107,IT,40.37671,15.37783 59738,Sala,1669,72,107,IT,40.85536,14.87343 59743,Sala Consilina,1669,72,107,IT,40.40134,15.5914 59759,Salento,1669,72,107,IT,40.24913,15.18938 59762,Salerno,1669,72,107,IT,40.67545,14.79328 59775,Salitto-Valle,1669,72,107,IT,40.67412,15.02241 59791,Salvitelle,1669,72,107,IT,40.59064,15.4576 59793,Salza Irpina,1669,72,107,IT,40.91893,14.88996 59822,San Bartolomeo in Galdo,1669,72,107,IT,41.41595,15.01709 59854,San Carlo AllArena,1669,72,107,IT,40.86511,14.26291 59861,San Castrese,1669,72,107,IT,41.25862,13.86541 59871,San Cipriano dAversa,1669,72,107,IT,40.99881,14.13173 59869,San Cipriano Picentino,1669,72,107,IT,40.72008,14.87195 59875,San Clemente,1669,72,107,IT,41.34027,13.95597 59908,San Felice A Cancello,1669,72,107,IT,41.01702,14.48736 59914,San Ferdinando,1669,72,107,IT,40.83342,14.24751 59935,San Gennaro Vesuviano,1669,72,107,IT,40.86226,14.52414 59952,San Giorgio,1669,72,107,IT,41.27065,14.31278 59963,San Giorgio a Cremano,1669,72,107,IT,40.83261,14.34162 59966,San Giorgio del Sannio,1669,72,107,IT,41.06844,14.85322 59976,San Giorgio la Molara,1669,72,107,IT,41.27667,14.93099 59981,San Giovanni A Piro,1669,72,107,IT,40.0515,15.4462 59991,San Giovanni a Teduccio,1669,72,107,IT,40.83808,14.30606 60011,San Giuseppe,1669,72,107,IT,40.84507,14.2517 60013,San Giuseppe Vesuviano,1669,72,107,IT,40.8356,14.50487 60020,San Gregorio Magno,1669,72,107,IT,40.65992,15.39914 60021,San Gregorio Matese,1669,72,107,IT,41.38556,14.37217 60033,San Leucio del Sannio-Cavuoti,1669,72,107,IT,41.07442,14.75744 60035,San Lorenzello,1669,72,107,IT,41.27602,14.54173 60038,San Lorenzo,1669,72,107,IT,40.75405,14.58974 60042,San Lorenzo Maggiore,1669,72,107,IT,41.24885,14.62438 60052,San Lupo,1669,72,107,IT,41.26148,14.63528 60054,San Mango Piemonte,1669,72,107,IT,40.70024,14.83919 60056,San Mango sul Calore,1669,72,107,IT,40.9589,14.97251 60057,San Marcellino,1669,72,107,IT,40.99001,14.17583 60060,San Marco,1669,72,107,IT,40.2674,14.93897 60064,San Marco dei Cavoti,1669,72,107,IT,41.30881,14.87924 60062,San Marco Evangelista,1669,72,107,IT,41.03702,14.33979 60076,San Martino Sannita,1669,72,107,IT,41.06546,14.83492 60078,San Martino Valle Caudina,1669,72,107,IT,41.02764,14.66446 60100,San Marzano sul Sarno,1669,72,107,IT,40.77801,14.58006 60106,San Mauro Cilento,1669,72,107,IT,40.22628,15.04476 60113,San Mauro la Bruca,1669,72,107,IT,40.12246,15.29109 60116,San Michele,1669,72,107,IT,40.62023,14.55018 60125,San Michele di Serino,1669,72,107,IT,40.87562,14.85464 60130,San Nazzaro,1669,72,107,IT,41.05172,14.85724 60138,San Nicola Baronia,1669,72,107,IT,41.05808,15.20006 60142,San Nicola la Strada,1669,72,107,IT,41.05237,14.33334 60139,San Nicola Manfredi,1669,72,107,IT,41.0751,14.8243 60158,San Paolo Bel Sito,1669,72,107,IT,40.91354,14.54862 60172,San Pietro,1669,72,107,IT,40.82398,14.78476 60187,San Pietro a Patierno,1669,72,107,IT,40.88566,14.29008 60189,San Pietro al Tanagro,1669,72,107,IT,40.45488,15.48692 60179,San Pietro Infine,1669,72,107,IT,41.44552,13.96029 60211,San Potito Sannitico,1669,72,107,IT,41.33698,14.39185 60212,San Potito Ultra,1669,72,107,IT,40.92796,14.87124 60213,San Prisco,1669,72,107,IT,41.08592,14.27675 60229,San Rufo,1669,72,107,IT,40.43451,15.46366 60232,San Salvatore Telesino,1669,72,107,IT,41.23537,14.49832 60237,San Sebastiano al Vesuvio,1669,72,107,IT,40.84344,14.36428 60246,San Sossio Baronia,1669,72,107,IT,41.07081,15.20122 60251,San Tammaro,1669,72,107,IT,41.07588,14.23105 60258,San Valentino Torio,1669,72,107,IT,40.79109,14.60333 60271,San Vitaliano,1669,72,107,IT,40.92442,14.47463 60320,SantAgata deGoti,1669,72,107,IT,41.08932,14.49743 60325,SantAgata sui Due Golfi,1669,72,107,IT,40.60565,14.37402 60327,SantAgnello,1669,72,107,IT,40.62942,14.39957 60340,SantAnastasia,1669,72,107,IT,40.86842,14.40196 60348,SantAndrea di Conza,1669,72,107,IT,40.84482,15.36965 60350,SantAndrea-Pizzone-Ciamprisco,1669,72,107,IT,41.15,14.03333 60352,SantAngelo,1669,72,107,IT,40.69841,13.89316 60353,SantAngelo A Cupolo,1669,72,107,IT,41.06912,14.80374 60354,SantAngelo A Fasanella,1669,72,107,IT,40.45724,15.34091 60355,SantAngelo A Scala,1669,72,107,IT,40.97465,14.74041 60356,SantAngelo AllEsca,1669,72,107,IT,41.00662,14.99305 60362,SantAngelo dAlife,1669,72,107,IT,41.36119,14.26125 60363,SantAngelo dei Lombardi,1669,72,107,IT,40.92937,15.17535 60367,SantAngelo in Formis,1669,72,107,IT,41.11667,14.25 60376,SantAntimo,1669,72,107,IT,40.94223,14.23476 60380,SantAntonio,1669,72,107,IT,40.63626,14.89845 60383,SantAntonio Abate,1669,72,107,IT,40.72152,14.54021 60388,SantArcangelo Trimonte,1669,72,107,IT,41.16901,14.93883 60389,SantArpino,1669,72,107,IT,40.95716,14.25075 60390,SantArsenio,1669,72,107,IT,40.47109,15.48401 60392,SantEgidio del Monte Albino,1669,72,107,IT,40.73871,14.59454 60394,SantElena Irpina,1669,72,107,IT,41.03741,14.88931 60428,Santa Croce del Sannio,1669,72,107,IT,41.38793,14.73229 60445,Santa Lucia,1669,72,107,IT,41.30409,14.07937 60449,Santa Lucia di Serino,1669,72,107,IT,40.87042,14.87594 60455,Santa Maria,1669,72,107,IT,40.29782,14.95214 60457,Santa Maria A Vico,1669,72,107,IT,41.02611,14.46515 60459,Santa Maria Capua Vetere,1669,72,107,IT,41.08156,14.25342 60464,Santa Maria La Carità,1669,72,107,IT,40.71611,14.50984 60479,Santa Maria la Fossa,1669,72,107,IT,41.09171,14.12822 60482,Santa Marina,1669,72,107,IT,40.1052,15.54153 60488,Santa Paolina,1669,72,107,IT,41.02202,14.8463 60493,Santa Tecla-Castelpagano,1669,72,107,IT,40.67353,14.91806 60519,Santo Stefano del Sole,1669,72,107,IT,40.89414,14.86674 60528,Santomenna,1669,72,107,IT,40.80685,15.32639 60532,Sanza,1669,72,107,IT,40.24389,15.55416 60538,Sapri,1669,72,107,IT,40.07464,15.63212 60554,Sarno,1669,72,107,IT,40.80748,14.62151 60567,Sassano,1669,72,107,IT,40.3403,15.56555 60571,Sassinoro,1669,72,107,IT,41.37472,14.66453 60586,Saviano,1669,72,107,IT,40.90507,14.50498 60588,Savignano Irpino,1669,72,107,IT,41.22698,15.17933 60602,Scafati,1669,72,107,IT,40.7602,14.53723 60604,Scala,1669,72,107,IT,40.65665,14.60761 60610,Scalo Romagnano al Monte,1669,72,107,IT,40.61031,15.44768 60613,Scampia,1669,72,107,IT,40.90347,14.23736 60614,Scampitella,1669,72,107,IT,41.09252,15.29995 60631,Scario,1669,72,107,IT,40.06207,15.47421 60658,Scisciano,1669,72,107,IT,40.90663,14.47451 60678,Secondigliano,1669,72,107,IT,40.9,14.26667 60722,Senerchia,1669,72,107,IT,40.74133,15.20502 60742,Serino,1669,72,107,IT,40.85481,14.87224 60764,Serramezzana,1669,72,107,IT,40.2446,15.03246 60768,Serrara Fontana,1669,72,107,IT,40.71475,13.89593 60778,Serre,1669,72,107,IT,40.58251,15.18555 60788,Sessa Aurunca,1669,72,107,IT,41.23987,13.92966 60789,Sessa Cilento,1669,72,107,IT,40.2592,15.07576 60836,Siano,1669,72,107,IT,40.80207,14.69334 60839,Sicignano degli Alburni,1669,72,107,IT,40.55882,15.3056 60872,Sirignano,1669,72,107,IT,40.94969,14.62935 60892,Soccavo,1669,72,107,IT,40.8455,14.19262 60921,Solofra,1669,72,107,IT,40.83343,14.83705 60923,Solopaca,1669,72,107,IT,41.19535,14.54767 60929,Somma Vesuviana,1669,72,107,IT,40.87329,14.43865 60950,Sorbo Serpico,1669,72,107,IT,40.91685,14.88709 60966,Sorrento,1669,72,107,IT,40.62678,14.37771 60990,Sparanise,1669,72,107,IT,41.18788,14.09628 60993,Spartimento,1669,72,107,IT,40.89105,14.47236 60999,Sperone,1669,72,107,IT,40.95251,14.60524 61048,Starza Vecchia,1669,72,107,IT,40.89035,14.40138 61062,Stella,1669,72,107,IT,40.86027,14.25223 61063,Stella Cilento,1669,72,107,IT,40.2318,15.09286 61078,Stio,1669,72,107,IT,40.3102,15.25153 61096,Striano,1669,72,107,IT,40.81543,14.57534 61105,Sturno,1669,72,107,IT,41.02217,15.11248 61110,Succivo,1669,72,107,IT,40.96801,14.25563 61120,Summonte,1669,72,107,IT,40.94874,14.74458 61174,Taurano,1669,72,107,IT,40.88444,14.63427 61175,Taurasi,1669,72,107,IT,41.0108,14.9598 61199,Teano,1669,72,107,IT,41.25132,14.06652 61201,Teggiano-Macchiaroli,1669,72,107,IT,40.37921,15.54046 61205,Telese,1669,72,107,IT,41.21752,14.52681 61216,Teora,1669,72,107,IT,40.85282,15.25335 61255,Terzigno,1669,72,107,IT,40.804,14.49309 61269,Teverola,1669,72,107,IT,40.99561,14.20763 61292,Tocco Caudio,1669,72,107,IT,41.12587,14.63422 61315,Tora,1669,72,107,IT,41.33987,14.02399 61320,Torchiara,1669,72,107,IT,40.32162,15.0537 61322,Torchiati,1669,72,107,IT,40.81837,14.80165 61324,Torella dei Lombardi,1669,72,107,IT,40.93731,15.10784 61326,Torelli-Torrette,1669,72,107,IT,40.90777,14.75184 61341,Torraca,1669,72,107,IT,40.11099,15.63632 61347,Torre Annunziata,1669,72,107,IT,40.75337,14.45251 61353,Torre Caracciolo,1669,72,107,IT,40.87551,14.17859 61371,Torre del Greco,1669,72,107,IT,40.78931,14.36806 61377,Torre le Nocelle,1669,72,107,IT,41.02312,14.90934 61357,Torre Orsaia,1669,72,107,IT,40.13277,15.4725 61381,Torrecuso,1669,72,107,IT,41.18582,14.68126 61391,Torretta-Scalzapecora,1669,72,107,IT,40.91015,14.13456 61408,Torrioni,1669,72,107,IT,41.0341,14.81351 61415,Tortorella,1669,72,107,IT,40.14236,15.60625 61432,Tramonti,1669,72,107,IT,40.69154,14.6449 61464,Trecase,1669,72,107,IT,40.76941,14.43773 61482,Trentinara,1669,72,107,IT,40.39998,15.11545 61484,Trentola-Ducenta,1669,72,107,IT,40.97517,14.1749 61493,Trescine,1669,72,107,IT,41.02256,14.62039 61503,Trevico,1669,72,107,IT,41.04808,15.23292 61564,Tufino,1669,72,107,IT,40.95586,14.56568 61565,Tufo,1669,72,107,IT,41.01262,14.81784 61641,Vairano-Patenora,1669,72,107,IT,41.33702,14.13112 61683,Vallata,1669,72,107,IT,41.04019,15.25383 61684,Valle Agricola,1669,72,107,IT,41.42477,14.25584 61695,Valle dellAngelo,1669,72,107,IT,40.34381,15.36846 61698,Valle di Maddaloni,1669,72,107,IT,41.07946,14.41788 61716,Vallesaccarda,1669,72,107,IT,41.06312,15.25205 61724,Vallo della Lucania,1669,72,107,IT,40.22786,15.26635 61745,Valva,1669,72,107,IT,40.73871,15.26805 61824,Venticano,1669,72,107,IT,41.04722,14.91194 61908,Vibonati,1669,72,107,IT,40.09921,15.58357 61912,Vicaria,1669,72,107,IT,40.86151,14.27328 61917,Vico Equense,1669,72,107,IT,40.65977,14.43386 61935,Vietri sul Mare,1669,72,107,IT,40.6702,14.72661 62040,Villa di Briano,1669,72,107,IT,41.00001,14.16073 62004,Villa Literno,1669,72,107,IT,41.00942,14.07612 62081,Villamaina,1669,72,107,IT,40.97144,15.08855 62086,Villammare,1669,72,107,IT,40.07747,15.59401 62108,Villanova del Battista,1669,72,107,IT,41.11897,15.15839 62129,Villaricca,1669,72,107,IT,40.92006,14.19339 62172,Visciano,1669,72,107,IT,40.9238,14.58237 62188,Vitulano,1669,72,107,IT,41.17419,14.64821 62189,Vitulazio,1669,72,107,IT,41.16302,14.21341 62206,Volla,1669,72,107,IT,40.87363,14.34085 62221,Volturara Irpina,1669,72,107,IT,40.88293,14.91801 62224,Vomero,1669,72,107,IT,40.84282,14.23075 62272,Zona Industriale,1669,72,107,IT,40.84788,14.28355 62286,Zungoli,1669,72,107,IT,41.12766,15.20255 62288,Zuni,1669,72,107,IT,41.21722,14.13082 135297,Agazzano,1773,45,107,IT,44.94726,9.51875 135359,Albareto,1773,45,107,IT,44.44692,9.70228 135364,Alberi,1773,45,107,IT,44.74837,10.33045 135377,Albinea,1773,45,107,IT,44.62859,10.61024 135403,Alfonsine,1773,45,107,IT,44.50768,12.03743 135428,Alseno,1773,45,107,IT,44.89759,9.96405 135437,Altedo,1773,45,107,IT,44.67057,11.49019 135529,Anzola dellEmilia,1773,45,107,IT,44.54197,11.20548 135563,Arceto,1773,45,107,IT,44.61762,10.72461 135592,Argelato,1773,45,107,IT,44.64009,11.34359 135593,Argenta,1773,45,107,IT,44.61397,11.83547 135594,Argine,1773,45,107,IT,44.77494,10.63432 135745,Baganzola,1773,45,107,IT,44.85513,10.30706 135746,Baggiovara,1773,45,107,IT,44.60416,10.86256 135748,Bagnacavallo,1773,45,107,IT,44.41402,11.97813 135750,Bagnara di Romagna,1773,45,107,IT,44.3893,11.82726 135753,Bagnarola,1773,45,107,IT,44.16232,12.3428 135759,Bagno,1773,45,107,IT,44.65545,10.75881 135773,Bagnolo in Piano,1773,45,107,IT,44.76437,10.67358 135780,Baiso,1773,45,107,IT,44.49668,10.60083 135830,Barbiano,1773,45,107,IT,44.3895,11.8865 135837,Barco,1773,45,107,IT,44.68833,10.49582 135840,Bardi,1773,45,107,IT,44.63138,9.72907 135856,Baricella,1773,45,107,IT,44.6482,11.538 135889,Basilicagoiano,1773,45,107,IT,44.70545,10.40457 135890,Basilicanova,1773,45,107,IT,44.69804,10.35231 135904,Bastiglia,1773,45,107,IT,44.72697,10.9986 135915,Bazzano,1773,45,107,IT,44.50176,11.08675 135920,Bedonia,1773,45,107,IT,44.504,9.63489 135940,Bellaria-Igea Marina,1773,45,107,IT,44.14255,12.47154 135978,Bentivoglio,1773,45,107,IT,44.6369,11.41737 135981,Berceto,1773,45,107,IT,44.50899,9.99104 135996,Berra,1773,45,107,IT,44.97656,11.97727 136000,Bertinoro,1773,45,107,IT,44.14874,12.1365 136006,Berzantina,1773,45,107,IT,44.15786,10.98083 136014,Besenzone,1773,45,107,IT,44.98689,9.95604 136018,Bettola,1773,45,107,IT,44.77826,9.60857 136038,Bibbiano,1773,45,107,IT,44.66292,10.47391 136085,Bobbio,1773,45,107,IT,44.76832,9.38415 136107,Bologna,1773,45,107,IT,44.46667,11.43333 136122,Bomporto,1773,45,107,IT,44.73389,11.03667 136129,Bondeno,1773,45,107,IT,44.88944,11.41542 136144,Bora Bassa,1773,45,107,IT,44.04636,12.18066 136150,Bore,1773,45,107,IT,44.71866,9.79207 136151,Borello,1773,45,107,IT,44.05846,12.17993 136152,Boretto,1773,45,107,IT,44.90157,10.55147 136165,Borghi,1773,45,107,IT,44.03223,12.35618 136192,Borgo Tossignano,1773,45,107,IT,44.28233,11.59659 136193,Borgo Val di Taro,1773,45,107,IT,44.48899,9.76906 136211,Borgonovo Valtidone,1773,45,107,IT,45.01436,9.44346 136212,Borgonuovo,1773,45,107,IT,44.43557,11.27069 136234,Borzano,1773,45,107,IT,44.6036,10.63675 136244,Bosco Mesola,1773,45,107,IT,44.87639,12.23139 136313,Brescello,1773,45,107,IT,44.89531,10.51269 136341,Brisighella,1773,45,107,IT,44.22228,11.77358 136381,Bubano,1773,45,107,IT,44.41341,11.78231 136393,Budrio,1773,45,107,IT,44.53745,11.53439 136419,Busana,1773,45,107,IT,44.36886,10.32339 136429,Busseto,1773,45,107,IT,44.9794,10.04331 138222,Cà Dè Fabbri,1773,45,107,IT,44.61962,11.45503 136447,Ca di Sola,1773,45,107,IT,44.52986,10.95448 136463,Cadè-Gaida,1773,45,107,IT,44.7385,10.5158 136454,Cadelbosco di Sopra,1773,45,107,IT,44.76573,10.59898 136455,Cadelbosco di Sotto,1773,45,107,IT,44.80141,10.61578 136499,Calcara,1773,45,107,IT,44.54696,11.13366 136513,Calderara di Reno,1773,45,107,IT,44.56307,11.27111 136514,Calderino,1773,45,107,IT,44.45774,11.19927 136521,Calendasco,1773,45,107,IT,45.08659,9.59647 136524,Calerno,1773,45,107,IT,44.74875,10.48603 136525,Calestano,1773,45,107,IT,44.60224,10.12363 136588,Caminata,1773,45,107,IT,44.91036,9.30816 136605,Campagnola Emilia,1773,45,107,IT,44.83925,10.76507 136611,Campegine,1773,45,107,IT,44.78085,10.52836 136657,Campogalliano,1773,45,107,IT,44.68874,10.84705 136681,Camposanto,1773,45,107,IT,44.79009,11.14049 136685,Camugnano,1773,45,107,IT,44.1711,11.08828 136755,Caorso,1773,45,107,IT,45.04911,9.87457 136803,Caprara,1773,45,107,IT,44.77521,10.51158 136906,Carpaneto Piacentino,1773,45,107,IT,44.91355,9.78703 136913,Carpi Centro,1773,45,107,IT,44.78237,10.8777 136917,Carpineti,1773,45,107,IT,44.45574,10.5178 136973,Casale,1773,45,107,IT,44.91665,10.43169 136981,Casalecchio di Reno,1773,45,107,IT,44.47563,11.27495 136990,Casalfiumanese,1773,45,107,IT,44.29686,11.62402 136991,Casalgrande,1773,45,107,IT,44.58466,10.7355 137070,Casina,1773,45,107,IT,44.50982,10.49951 137078,Casola Valsenio,1773,45,107,IT,44.22443,11.62487 137131,Castel Bolognese,1773,45,107,IT,44.31981,11.79903 137162,Castel dAiano,1773,45,107,IT,44.27751,11.00097 137167,Castel del Rio,1773,45,107,IT,44.21346,11.50409 137168,Castel di Casio,1773,45,107,IT,44.16276,11.03505 137142,Castel Guelfo di Bologna,1773,45,107,IT,44.43166,11.67591 137144,Castel Maggiore,1773,45,107,IT,44.57707,11.36071 137151,Castel San Giovanni,1773,45,107,IT,45.06014,9.43784 137155,Castel San Pietro Terme,1773,45,107,IT,44.39854,11.58546 137189,Casteldelci,1773,45,107,IT,43.79116,12.15514 137197,Castelfranco Emilia,1773,45,107,IT,44.59445,11.04979 137207,CastellArquato,1773,45,107,IT,44.85451,9.87326 137222,Castellarano,1773,45,107,IT,44.51825,10.73727 137229,Castelletto,1773,45,107,IT,44.44015,11.06478 137256,Castello dArgile,1773,45,107,IT,44.67797,11.29715 137279,Castelnovo di Sotto,1773,45,107,IT,44.81253,10.56694 137280,Castelnovo neMonti,1773,45,107,IT,44.43556,10.40329 137293,Castelnuovo Rangone,1773,45,107,IT,44.54935,10.9335 137331,Castelvetro di Modena,1773,45,107,IT,44.50422,10.94666 137330,Castelvetro Piacentino,1773,45,107,IT,45.10223,9.99041 137333,Castenaso,1773,45,107,IT,44.51398,11.46842 137351,Castiglione dei Pepoli,1773,45,107,IT,44.1428,11.16028 137378,Castrocaro Terme e Terra del Sole,1773,45,107,IT,44.18676,11.96068 137396,Cattolica,1773,45,107,IT,43.96182,12.73631 137429,Cavazzona,1773,45,107,IT,44.57326,11.11903 137436,Cavezzo,1773,45,107,IT,44.835,11.0289 137442,Cavriago,1773,45,107,IT,44.69457,10.52591 137497,Cento,1773,45,107,IT,44.73099,11.28716 137518,Cerasolo,1773,45,107,IT,43.98805,12.52988 137549,Cerignale,1773,45,107,IT,44.67785,9.35077 137591,Cervia,1773,45,107,IT,44.26204,12.34812 137611,Cesena,1773,45,107,IT,44.1391,12.24315 137612,Cesenatico,1773,45,107,IT,44.19987,12.3991 137704,Ciano dEnza,1773,45,107,IT,44.59982,10.4104 137803,Civitella di Romagna,1773,45,107,IT,44.00785,11.94398 137806,Classe,1773,45,107,IT,44.37955,12.23654 137823,Coccanile-Cesta,1773,45,107,IT,44.91667,11.86667 137828,Codemondo-Quaresimo,1773,45,107,IT,44.69082,10.55098 137831,Codigoro,1773,45,107,IT,44.83093,12.11073 137832,Codisotto,1773,45,107,IT,44.98278,10.7275 137851,Coli,1773,45,107,IT,44.74582,9.41468 137854,Collagna,1773,45,107,IT,44.34694,10.2735 137875,Collecchio,1773,45,107,IT,44.75197,10.2154 137918,Colombaro,1773,45,107,IT,44.55153,10.89628 137926,Colorno,1773,45,107,IT,44.92572,10.37361 137934,Comacchio,1773,45,107,IT,44.69478,12.18194 137948,Compiano,1773,45,107,IT,44.49605,9.66207 137952,Cona,1773,45,107,IT,44.80583,11.7069 137960,Concordia sulla Secchia,1773,45,107,IT,44.91258,10.98802 137971,Consandolo,1773,45,107,IT,44.65606,11.77524 137974,Conselice,1773,45,107,IT,44.51163,11.82848 137988,Copparo,1773,45,107,IT,44.89263,11.82287 137997,Corcagnano,1773,45,107,IT,44.72103,10.30271 138011,Coriano,1773,45,107,IT,43.96907,12.60055 138032,Corniglio,1773,45,107,IT,44.47425,10.09009 138037,Corpo Reno,1773,45,107,IT,44.75591,11.30794 138038,Corpolò,1773,45,107,IT,44.01905,12.45266 138039,Correggio,1773,45,107,IT,44.76737,10.78345 138060,Cortemaggiore,1773,45,107,IT,44.99185,9.92844 138111,Cotignola,1773,45,107,IT,44.38572,11.93852 138144,Crespellano,1773,45,107,IT,44.51196,11.13224 138152,Crevalcore,1773,45,107,IT,44.71966,11.14765 138213,Cusercoli,1773,45,107,IT,44.04514,12.0074 138235,Decima,1773,45,107,IT,44.71045,11.22978 138275,Dodici Morelli,1773,45,107,IT,44.79234,11.29124 138316,Dosso,1773,45,107,IT,44.76806,11.33938 138322,Dovadola,1773,45,107,IT,44.12211,11.88707 138324,Dozza,1773,45,107,IT,44.36195,11.63547 138392,Fabbrico,1773,45,107,IT,44.87214,10.80893 138403,Faenza,1773,45,107,IT,44.29007,11.87948 138429,Fanano,1773,45,107,IT,44.21245,10.7966 138448,Farini,1773,45,107,IT,44.71266,9.56887 138466,Felegara,1773,45,107,IT,44.72187,10.11273 138468,Felina,1773,45,107,IT,44.45478,10.46067 138469,Felino,1773,45,107,IT,44.69902,10.23828 138472,Fellegara,1773,45,107,IT,44.61052,10.697 138489,Ferrara,1773,45,107,IT,44.83804,11.62057 138496,Ferriere,1773,45,107,IT,44.64385,9.49657 138507,Fidenza,1773,45,107,IT,44.86694,10.06039 138535,Finale Emilia,1773,45,107,IT,44.83373,11.29378 138539,Fiorano,1773,45,107,IT,44.53889,10.81166 138542,Fiorenzuola dArda,1773,45,107,IT,44.92435,9.91329 138547,Fiumalbo-Dogana,1773,45,107,IT,44.17925,10.6472 138548,Fiumana,1773,45,107,IT,44.14325,11.98719 138575,Fogliano,1773,45,107,IT,44.64751,10.64505 138577,Fognano,1773,45,107,IT,44.20509,11.73782 138597,Fontanelice,1773,45,107,IT,44.25932,11.55852 138600,Fontanellato,1773,45,107,IT,44.88187,10.17631 138613,Fontevivo,1773,45,107,IT,44.85942,10.17281 138619,Forche,1773,45,107,IT,44.63646,10.57316 138632,Forlì,1773,45,107,IT,44.22177,12.04144 138631,Forlimpopoli,1773,45,107,IT,44.19107,12.12873 138637,Formica,1773,45,107,IT,44.46838,11.01337 138640,Formigine,1773,45,107,IT,44.57268,10.84737 138642,Formignana,1773,45,107,IT,44.8423,11.85935 138644,Fornace Zarattini,1773,45,107,IT,44.41667,12.13333 138660,Fornovo di Taro,1773,45,107,IT,44.69465,10.10178 138668,Fossa,1773,45,107,IT,44.92304,11.02356 138679,Fosso Ghiaia,1773,45,107,IT,44.35525,12.2543 138680,Fossoli,1773,45,107,IT,44.8216,10.88977 138704,Francolino,1773,45,107,IT,44.89662,11.65701 138716,Frassinoro,1773,45,107,IT,44.29451,10.57117 138720,Fratta Terme,1773,45,107,IT,44.14157,12.10213 138761,Fusignano,1773,45,107,IT,44.46656,11.95636 138778,Gaggio,1773,45,107,IT,44.63458,11.01334 138779,Gaggio Montano,1773,45,107,IT,44.19583,10.93518 138786,Gaiano,1773,45,107,IT,44.72391,10.17267 138789,Gaibanella-SantEdigio,1773,45,107,IT,44.76667,11.65 138799,Galeata,1773,45,107,IT,43.99607,11.91057 138814,Gallo,1773,45,107,IT,44.73144,11.55284 138833,Gambettola,1773,45,107,IT,44.11748,12.33705 138866,Gatteo a Mare,1773,45,107,IT,44.17069,12.43549 138867,Gatteo-SantAngelo,1773,45,107,IT,44.11194,12.39139 138886,Gazzola,1773,45,107,IT,44.96006,9.54896 138892,Gemmano,1773,45,107,IT,43.90393,12.58091 139006,Glorie,1773,45,107,IT,44.46994,12.07707 139009,Godo,1773,45,107,IT,44.39173,12.07495 139039,Goro,1773,45,107,IT,44.8515,12.29651 139041,Gorzano,1773,45,107,IT,44.51626,10.87983 139044,Gossolengo,1773,45,107,IT,45.00248,9.61799 139057,Gragnano Trebbiense,1773,45,107,IT,45.01225,9.57139 139060,Granarolo,1773,45,107,IT,44.35859,11.93459 139061,Granarolo dellEmilia e Viadagola,1773,45,107,IT,44.55327,11.44291 139105,Grizzana,1773,45,107,IT,44.25806,11.15557 139106,Grizzana Morandi,1773,45,107,IT,44.2582,11.15288 139114,Gropparello,1773,45,107,IT,44.83354,9.72801 139148,Gualtieri,1773,45,107,IT,44.89736,10.6286 139169,Guastalla,1773,45,107,IT,44.91172,10.66186 139180,Guiglia,1773,45,107,IT,44.42432,10.96125 139199,Imola,1773,45,107,IT,44.35916,11.7132 139279,Jolanda di Savoia,1773,45,107,IT,44.88319,11.9791 139302,La Saletta-Tamara,1773,45,107,IT,44.88151,11.77236 139328,Lagosanto,1773,45,107,IT,44.76282,12.14005 139339,Lama,1773,45,107,IT,44.30726,10.7306 139358,Langhirano,1773,45,107,IT,44.61913,10.26652 139414,Lavezzola,1773,45,107,IT,44.56099,11.87557 139453,Lentigione-Sorbolo a Mane,1773,45,107,IT,44.86667,10.48333 139468,Lesignano deBagni,1773,45,107,IT,44.64346,10.30039 139502,Lido Adriano,1773,45,107,IT,44.41673,12.30552 139503,Lido degli Estensi,1773,45,107,IT,44.66639,12.25 139508,Lido di Pomposa-Lido degli Scacchi,1773,45,107,IT,44.70667,12.23611 139512,Ligonchio,1773,45,107,IT,44.31635,10.34224 139520,Limidi,1773,45,107,IT,44.76427,10.92002 139556,Lizzano in Belvedere,1773,45,107,IT,44.16135,10.89408 139576,Loiano,1773,45,107,IT,44.26806,11.32841 139589,Longara,1773,45,107,IT,44.5711,11.30386 139592,Longastrino,1773,45,107,IT,44.58848,12.00982 139596,Longiano,1773,45,107,IT,44.07446,12.3297 139644,Lugagnano Val dArda,1773,45,107,IT,44.82304,9.82828 139648,Lugo,1773,45,107,IT,44.42137,11.91094 139684,Luzzara,1773,45,107,IT,44.95925,10.68953 139709,Madonna DellAlbero,1773,45,107,IT,44.38115,12.20044 139742,Magreta,1773,45,107,IT,44.6,10.8 139755,Malalbergo,1773,45,107,IT,44.71867,11.53221 139814,Manzolino,1773,45,107,IT,44.59577,11.09982 139819,Maranello,1773,45,107,IT,44.53101,10.86888 139829,Marano sul Panaro,1773,45,107,IT,44.45924,10.96879 139894,Marina di Ravenna,1773,45,107,IT,44.48625,12.28087 139873,Marina Romea,1773,45,107,IT,44.51494,12.27113 139917,Marsaglia,1773,45,107,IT,44.71228,9.38353 139943,Marzabotto,1773,45,107,IT,44.34297,11.20593 139961,Masi-Torello,1773,45,107,IT,44.79458,11.80182 139969,Massa Finalese,1773,45,107,IT,44.8524,11.21429 139970,Massa Fiscaglia,1773,45,107,IT,44.80983,12.00746 139971,Massa Lombarda,1773,45,107,IT,44.44703,11.82095 139983,Massenzatico,1773,45,107,IT,44.73477,10.69736 140019,Medesano,1773,45,107,IT,44.75824,10.13794 140020,Medicina-Buda,1773,45,107,IT,44.47867,11.63812 140025,Medolla,1773,45,107,IT,44.84667,11.0676 140037,Meldola,1773,45,107,IT,44.12775,12.0626 140078,Mercato Saraceno,1773,45,107,IT,43.96274,12.19638 140095,Mesola,1773,45,107,IT,44.91831,12.23121 140112,Mezzano,1773,45,107,IT,44.46625,12.08632 140114,Mezzano Inferiore,1773,45,107,IT,44.91291,10.45838 140119,Mezzogoro,1773,45,107,IT,44.90256,12.09925 140121,Mezzolara,1773,45,107,IT,44.58917,11.56492 140133,Migliarina,1773,45,107,IT,44.81042,10.836 140135,Migliarino,1773,45,107,IT,44.76993,11.93304 140136,Migliaro,1773,45,107,IT,44.79916,11.9744 140144,Milano Marittima,1773,45,107,IT,44.27409,12.35172 140158,Minerbio,1773,45,107,IT,44.61811,11.47257 140169,Mirabello,1773,45,107,IT,44.82295,11.45669 140174,Mirandola,1773,45,107,IT,44.88515,11.06902 140178,Misano Adriatico,1773,45,107,IT,43.97714,12.69805 140188,Modena,1773,45,107,IT,44.64783,10.92539 140190,Modigliana,1773,45,107,IT,44.15954,11.79286 140217,Molinella,1773,45,107,IT,44.61758,11.66719 140223,Molino del Pallone,1773,45,107,IT,44.10028,10.96135 140267,Monchio delle Corti,1773,45,107,IT,44.41172,10.1237 140272,Mondaino,1773,45,107,IT,43.85796,12.66845 140284,Monghidoro,1773,45,107,IT,44.22327,11.32331 140316,Montalbano,1773,45,107,IT,43.95879,12.71646 140327,Montale,1773,45,107,IT,44.56923,10.90771 140356,Monte Colombo,1773,45,107,IT,43.92016,12.55235 140370,Monte San Giovanni,1773,45,107,IT,44.42014,11.1717 140407,Montecavolo,1773,45,107,IT,44.63275,10.54264 140410,Montecchio Emilia,1773,45,107,IT,44.69937,10.45211 140416,Montechiarugolo,1773,45,107,IT,44.69261,10.42128 140425,Montecreto,1773,45,107,IT,44.24596,10.7176 140439,Montefiore Conca,1773,45,107,IT,43.88916,12.61145 140441,Montefiorino,1773,45,107,IT,44.35382,10.62375 140457,Montegridolfo,1773,45,107,IT,43.85826,12.68995 140516,Monterenzio,1773,45,107,IT,44.32632,11.40446 140538,Montescudo,1773,45,107,IT,43.91753,12.54083 140539,Montese,1773,45,107,IT,44.26993,10.94545 140556,Montiano,1773,45,107,IT,44.08232,12.30455 140562,Monticelli dOngina,1773,45,107,IT,45.08851,9.93424 140561,Monticelli Terme,1773,45,107,IT,44.72881,10.39444 140596,Monzuno,1773,45,107,IT,44.27825,11.26684 140605,Morciano di Romagna,1773,45,107,IT,43.9144,12.65104 140607,Mordano,1773,45,107,IT,44.39696,11.80763 140612,Morfasso,1773,45,107,IT,44.7227,9.70221 140683,Mulino,1773,45,107,IT,44.49257,11.04667 140755,Neviano degli Arduini,1773,45,107,IT,44.58344,10.31638 140758,Nibbiano,1773,45,107,IT,44.90506,9.32826 140773,Niviano,1773,45,107,IT,44.94027,9.62878 140787,Noceto,1773,45,107,IT,44.80953,10.1773 140802,Nonantola,1773,45,107,IT,44.67785,11.03785 140818,Novafeltria,1773,45,107,IT,43.89486,12.28894 140829,Novellara,1773,45,107,IT,44.84488,10.72745 140837,Novi di Modena,1773,45,107,IT,44.88974,10.90027 141017,Ospedaletto,1773,45,107,IT,43.9838,12.57056 141031,Ostellato,1773,45,107,IT,44.74556,11.94276 141035,Osteria Grande,1773,45,107,IT,44.42845,11.5218 141037,Osteria Nuova,1773,45,107,IT,44.58457,11.23739 141053,Ottone,1773,45,107,IT,44.62325,9.33267 141065,Ozzano dellEmilia,1773,45,107,IT,44.44427,11.47552 141064,Ozzano Taro,1773,45,107,IT,44.70969,10.14086 141091,Padulle,1773,45,107,IT,44.62945,11.27738 58218,Palagano,1773,45,107,IT,44.32152,10.6466 58223,Palanzano,1773,45,107,IT,44.43629,10.194 58279,Panighina,1773,45,107,IT,44.17162,12.16324 58307,Parma,1773,45,107,IT,44.79935,10.32618 58365,Pavullo nel Frignano,1773,45,107,IT,44.33352,10.83544 58371,Pecorara,1773,45,107,IT,44.87582,9.38387 58393,Pellegrino Parmense,1773,45,107,IT,44.7295,9.9324 58405,Pennabilli,1773,45,107,IT,43.81746,12.26708 58502,Piacenza,1773,45,107,IT,45.05242,9.69342 58525,Pianello Val Tidone,1773,45,107,IT,44.94666,9.40516 58533,Piangipane,1773,45,107,IT,44.42198,12.09066 58550,Pianoro,1773,45,107,IT,44.38893,11.34262 58610,Pietracuta,1773,45,107,IT,43.954,12.37138 58650,Pieve di Cento,1773,45,107,IT,44.71293,11.30922 58658,Pievepelago,1773,45,107,IT,44.20475,10.6166 58668,Pilastro,1773,45,107,IT,44.68254,10.28879 58671,Pinarella,1773,45,107,IT,44.24167,12.37111 58699,Piozzano,1773,45,107,IT,44.92533,9.49559 58710,Pisignano,1773,45,107,IT,44.23787,12.26841 58720,Piumazzo,1773,45,107,IT,44.54631,11.06727 58724,Pizzano,1773,45,107,IT,44.355,11.41499 58745,Podenzano,1773,45,107,IT,44.95484,9.68315 58751,Poggio Berni,1773,45,107,IT,44.02639,12.40944 58760,Poggio Renatico,1773,45,107,IT,44.76581,11.48695 58785,Polesine Parmense,1773,45,107,IT,45.01682,10.09015 58791,Polinago,1773,45,107,IT,44.34502,10.72597 58852,Ponte dellOlio,1773,45,107,IT,44.86762,9.64433 58853,Ponte della Venturina,1773,45,107,IT,44.13042,10.99113 58846,Ponte Ronca,1773,45,107,IT,44.50166,11.18973 58850,Ponte Taro,1773,45,107,IT,44.82872,10.21037 58870,Pontegradella,1773,45,107,IT,44.83813,11.6628 58872,Pontelangorino,1773,45,107,IT,44.86087,12.14864 58875,Pontenure,1773,45,107,IT,44.99821,9.79139 58884,Ponticella,1773,45,107,IT,44.45446,11.37851 58909,Porotto-Cassama,1773,45,107,IT,44.85,11.55 58911,Porporano,1773,45,107,IT,44.75266,10.35054 58912,Porretta Terme,1773,45,107,IT,44.16325,10.97432 58919,Portico di Romagna,1773,45,107,IT,44.02657,11.78133 58920,Portico e San Benedetto,1773,45,107,IT,44.02646,11.78153 58927,Porto Corsini,1773,45,107,IT,44.4941,12.27875 58930,Porto Fuori,1773,45,107,IT,44.40557,12.25218 58931,Porto Garibaldi,1773,45,107,IT,44.68123,12.23678 58947,Portomaggiore,1773,45,107,IT,44.69763,11.8076 58970,Poviglio,1773,45,107,IT,44.84227,10.53936 58973,Pozza,1773,45,107,IT,44.52641,10.89234 59022,Praticello,1773,45,107,IT,44.80436,10.4731 59024,Pratissolo,1773,45,107,IT,44.60416,10.674 59027,Prato,1773,45,107,IT,44.71589,10.74797 59043,Predappio,1773,45,107,IT,44.10316,11.98413 59057,Premilcuore,1773,45,107,IT,43.98084,11.78193 59075,Prignano,1773,45,107,IT,44.4379,10.69118 59077,Prignano sulla Secchia,1773,45,107,IT,44.43836,10.6919 59090,Progresso,1773,45,107,IT,44.56892,11.3642 59130,Provincia di Ferrara,1773,45,107,IT,44.8,11.83333 59132,Provincia di Forlì-Cesena,1773,45,107,IT,44.08333,12.03333 59150,Provincia di Modena,1773,45,107,IT,44.5,10.9 59156,Provincia di Parma,1773,45,107,IT,44.7,10.08333 59161,Provincia di Piacenza,1773,45,107,IT,44.88333,9.58333 59166,Provincia di Ravenna,1773,45,107,IT,44.41667,11.98333 59168,Provincia di Reggio Emilia,1773,45,107,IT,44.61667,10.61667 59170,Provincia di Rimini,1773,45,107,IT,44.02405,12.51858 59199,Puianello,1773,45,107,IT,44.6263,10.5642 59201,Pulce,1773,45,107,IT,44.44909,11.41153 59205,Punta Marina,1773,45,107,IT,44.44272,12.29089 59217,Quarantoli,1773,45,107,IT,44.91954,11.10324 59226,Quartesana,1773,45,107,IT,44.8049,11.73873 59229,Quarto Inferiore,1773,45,107,IT,44.5309,11.41679 59236,Quattro Castella,1773,45,107,IT,44.63496,10.47429 59273,Ramiola,1773,45,107,IT,44.70055,10.0911 59274,Ramiseto,1773,45,107,IT,44.41284,10.27689 59291,Rastignano-Carteria di Sesto,1773,45,107,IT,44.43623,11.35695 59296,Ravarino,1773,45,107,IT,44.72475,11.09588 59299,Ravenna,1773,45,107,IT,44.41344,12.20121 59321,Reggio nellEmilia,1773,45,107,IT,44.69825,10.63125 59322,Reggiolo,1773,45,107,IT,44.91824,10.81016 59331,Renazzo,1773,45,107,IT,44.76527,11.28605 59355,Riale,1773,45,107,IT,44.48333,11.23333 59366,Riccione,1773,45,107,IT,43.99942,12.65689 59367,Riccò,1773,45,107,IT,44.7005,10.12095 59385,Rimini,1773,45,107,IT,44.05755,12.56528 59387,Rio Saliceto,1773,45,107,IT,44.81147,10.80414 59393,Riolo Terme,1773,45,107,IT,44.27609,11.72722 59394,Riolunato,1773,45,107,IT,44.23102,10.6531 59433,Rivazzurra,1773,45,107,IT,44.04186,12.60894 59437,Rivergaro,1773,45,107,IT,44.915,9.60443 59446,Ro,1773,45,107,IT,44.94695,11.76006 59476,Rocca San Casciano,1773,45,107,IT,44.05871,11.84274 59492,Roccabianca,1773,45,107,IT,45.00772,10.21824 59569,Rolo,1773,45,107,IT,44.88482,10.85961 59607,Roncocesi,1773,45,107,IT,44.73843,10.57816 59609,Roncofreddo,1773,45,107,IT,44.04222,12.30083 59610,Roncofreddo-Santa Paola,1773,45,107,IT,44.04251,12.31523 59656,Roteglia,1773,45,107,IT,44.48417,10.68832 59664,Rottofreno,1773,45,107,IT,45.05527,9.55007 59671,Roveleto,1773,45,107,IT,44.96332,9.8539 59678,Rovereto,1773,45,107,IT,44.83381,10.95157 59692,Rubiera,1773,45,107,IT,44.65158,10.7794 59704,Russi,1773,45,107,IT,44.37645,12.03335 59737,Sala,1773,45,107,IT,44.15638,12.3834 59739,Sala Baganza,1773,45,107,IT,44.71563,10.22622 59741,Sala Bolognese,1773,45,107,IT,44.61387,11.25669 59780,Salsomaggiore Terme,1773,45,107,IT,44.81592,9.98637 59783,Saludecio,1773,45,107,IT,43.8754,12.66118 59787,Salvaterra,1773,45,107,IT,44.59925,10.7686 59797,Sam Marino,1773,45,107,IT,44.80738,10.91438 59818,San Bartolomeo,1773,45,107,IT,44.67402,10.53941 59819,San Bartolomeo In Bosco,1773,45,107,IT,44.73094,11.63573 59830,San Benedetto Val di Sambro,1773,45,107,IT,44.21405,11.23567 59837,San Biagio,1773,45,107,IT,44.58695,11.86918 59853,San Carlo,1773,45,107,IT,44.80361,11.40999 59865,San Cesario sul Panaro,1773,45,107,IT,44.56352,11.03508 59874,San Clemente,1773,45,107,IT,43.93269,12.62707 59884,San Damaso,1773,45,107,IT,44.60102,10.97373 59912,San Felice sul Panaro,1773,45,107,IT,44.83671,11.13791 59929,San Gabriele-Mondonuovo,1773,45,107,IT,44.66667,11.58333 59973,San Giorgio di Piano,1773,45,107,IT,44.64724,11.37446 59960,San Giorgio Piacentino,1773,45,107,IT,44.95198,9.73773 59999,San Giovanni in Marignano,1773,45,107,IT,43.93989,12.71166 60000,San Giovanni in Persiceto,1773,45,107,IT,44.63838,11.18419 60003,San Giovanni-San Bernardino,1773,45,107,IT,44.79297,9.60871 60009,San Giuseppe,1773,45,107,IT,44.72202,12.21712 60027,San Lazzaro,1773,45,107,IT,44.4705,11.40851 60028,San Leo,1773,45,107,IT,43.89637,12.3446 60068,San Martino,1773,45,107,IT,44.77794,11.58751 60082,San Martino dei Mulini,1773,45,107,IT,44.03182,12.46396 60088,San Martino in Argine,1773,45,107,IT,44.58876,11.6065 60094,San Martino in Rio,1773,45,107,IT,44.73368,10.7849 60111,San Mauro a Mare,1773,45,107,IT,44.16367,12.44631 60109,San Mauro Pascoli,1773,45,107,IT,44.1089,12.41953 60122,San Michele dei Mucchietti,1773,45,107,IT,44.50847,10.74726 60120,San Michele Tiorre,1773,45,107,IT,44.6853,10.26317 60146,San Nicolò,1773,45,107,IT,45.05685,9.6054 60150,San Pancrazio,1773,45,107,IT,44.3581,12.07852 60169,San Piero in Bagno,1773,45,107,IT,43.85793,11.97716 60176,San Pietro Capofiume,1773,45,107,IT,44.6504,11.64802 60197,San Pietro in Casale,1773,45,107,IT,44.70079,11.40492 60198,San Pietro in Cerro,1773,45,107,IT,45.02137,9.94987 60178,San Pietro In Vincoli,1773,45,107,IT,44.30051,12.14556 60204,San Polo,1773,45,107,IT,44.97868,9.7407 60205,San Polo dEnza,1773,45,107,IT,44.6269,10.42667 60210,San Possidonio,1773,45,107,IT,44.87402,10.98087 60215,San Prospero,1773,45,107,IT,44.78967,11.0221 60240,San Secondo Parmense,1773,45,107,IT,44.92218,10.23038 60260,San Venanzio,1773,45,107,IT,44.74517,11.43727 60268,San Vincenzo,1773,45,107,IT,44.73878,11.43668 60274,San Vito,1773,45,107,IT,44.55822,10.97432 60315,SantAgata Bolognese,1773,45,107,IT,44.66016,11.13292 60316,SantAgata Feltria,1773,45,107,IT,43.86282,12.2069 60326,SantAgata sul Santerno,1773,45,107,IT,44.44351,11.86112 60328,SantAgostino,1773,45,107,IT,44.79218,11.38522 60330,SantAlberto,1773,45,107,IT,44.53822,12.16191 60342,SantAndrea,1773,45,107,IT,44.03328,12.41893 60349,SantAndrea in Casale,1773,45,107,IT,43.93333,12.65 60382,SantAntonio,1773,45,107,IT,44.36586,10.83646 60404,SantIlario dEnza,1773,45,107,IT,44.7589,10.44737 60427,Santa Croce Scuole,1773,45,107,IT,44.76281,10.84944 60441,Santa Giustina,1773,45,107,IT,44.06778,12.485 60460,Santa Maria Codifiume,1773,45,107,IT,44.66424,11.65099 60468,Santa Maria Nuova,1773,45,107,IT,44.2,12.19389 60486,Santa Monica-Cella,1773,45,107,IT,43.95765,12.68846 60491,Santa Sofia,1773,45,107,IT,43.94724,11.90867 60499,Santa Vittoria,1773,45,107,IT,44.85483,10.63348 60503,Santarcangelo,1773,45,107,IT,44.06326,12.44657 60507,Santerno,1773,45,107,IT,44.43697,12.05533 60527,Santo Stefano-Carraie,1773,45,107,IT,44.31525,12.18573 60549,Sarmato,1773,45,107,IT,45.05679,9.49683 60558,Sarsina,1773,45,107,IT,43.91981,12.14255 60572,Sasso Marconi,1773,45,107,IT,44.40064,11.25177 60577,Sassuolo,1773,45,107,IT,44.5432,10.7848 60584,Savarna-Conventello,1773,45,107,IT,44.50717,12.10621 60589,Savignano sul Panaro,1773,45,107,IT,44.48036,11.0351 60590,Savignano sul Rubicone,1773,45,107,IT,44.09009,12.39935 60591,Savigno,1773,45,107,IT,44.39186,11.07481 60593,Savio,1773,45,107,IT,44.31139,12.29472 60616,Scandiano,1773,45,107,IT,44.5983,10.69558 60668,Scortichino,1773,45,107,IT,44.88333,11.33333 60675,Secchiano,1773,45,107,IT,43.92399,12.31615 60757,Serra di Maiolo,1773,45,107,IT,43.87304,12.31129 60763,Serramazzoni,1773,45,107,IT,44.42735,10.79055 60771,Serravalle,1773,45,107,IT,44.96532,12.04664 60798,Sesto Imolese,1773,45,107,IT,44.45952,11.72919 60802,Sestola,1773,45,107,IT,44.22994,10.77349 60880,Sissa,1773,45,107,IT,44.95927,10.26058 60897,Sogliano al Rubicone,1773,45,107,IT,44.005,12.30122 60902,Solara,1773,45,107,IT,44.77163,11.09287 60905,Solarolo,1773,45,107,IT,44.35892,11.84661 60918,Soliera,1773,45,107,IT,44.73387,10.92177 60919,Solignano,1773,45,107,IT,44.61306,9.97548 60920,Solignano Nuovo,1773,45,107,IT,44.52746,10.92626 60946,Soragna,1773,45,107,IT,44.92686,10.12013 60948,Sorbara,1773,45,107,IT,44.74808,11.00731 60951,Sorbolo,1773,45,107,IT,44.84587,10.44375 61010,Spilamberto,1773,45,107,IT,44.53273,11.01697 61054,Stazione Valmozzola,1773,45,107,IT,44.57879,9.9429 61151,Talamello,1773,45,107,IT,43.90566,12.28484 61160,Taneto,1773,45,107,IT,44.77202,10.45563 61221,Terenzo,1773,45,107,IT,44.61048,10.08956 61290,Tizzano Val Parma,1773,45,107,IT,44.51931,10.19819 61291,Toano,1773,45,107,IT,44.37601,10.56311 61338,Tornolo,1773,45,107,IT,44.48524,9.62744 61397,Torriana,1773,45,107,IT,43.98485,12.38541 61406,Torrile,1773,45,107,IT,44.92522,10.32381 61422,Toscanella,1773,45,107,IT,44.38248,11.63965 61443,Trarivi,1773,45,107,IT,43.93672,12.544 61453,Traversetolo,1773,45,107,IT,44.64244,10.38036 61456,Travo,1773,45,107,IT,44.86321,9.5443 61461,Trebbo,1773,45,107,IT,44.55629,11.31901 61463,Trecasali,1773,45,107,IT,44.93747,10.27279 61470,Tredozio,1773,45,107,IT,44.07958,11.7414 61496,Tresigallo-Final di Rero,1773,45,107,IT,44.81598,11.89472 61629,Vado,1773,45,107,IT,44.31689,11.25851 61762,Varano De Melegari,1773,45,107,IT,44.68806,10.01148 61774,Varsi,1773,45,107,IT,44.66274,9.84879 61794,Veggia-Villalunga,1773,45,107,IT,44.5607,10.75621 61820,Venezzano,1773,45,107,IT,44.68333,11.33333 61827,Ventoso,1773,45,107,IT,44.58621,10.68767 61846,Vergato,1773,45,107,IT,44.28232,11.10953 61847,Verghereto,1773,45,107,IT,43.7945,12.0052 61854,Vernasca,1773,45,107,IT,44.79867,9.83054 61873,Verucchio,1773,45,107,IT,43.98171,12.42317 61891,Vetto,1773,45,107,IT,44.48407,10.33882 61896,Vezzano sul Crostolo,1773,45,107,IT,44.60241,10.54469 61904,Viano,1773,45,107,IT,44.54516,10.62435 61920,Vicofertile,1773,45,107,IT,44.78557,10.262 61939,Vigarano Mainarda,1773,45,107,IT,44.84079,11.49354 61940,Vigarano Pieve,1773,45,107,IT,44.86126,11.5095 61943,Vigatto,1773,45,107,IT,44.71999,10.33037 61961,Vignola,1773,45,107,IT,44.48383,11.01096 61973,Vigolzone,1773,45,107,IT,44.91394,9.66852 61998,Villa Fontana,1773,45,107,IT,44.49455,11.60885 62005,Villa Minozzo,1773,45,107,IT,44.3648,10.46545 62030,Villa Verucchio,1773,45,107,IT,44.0051,12.43575 62089,Villanova,1773,45,107,IT,45.02597,9.99865 62132,Villarotta,1773,45,107,IT,44.92517,10.74382 62202,Voghiera,1773,45,107,IT,44.75558,11.75182 62217,Voltana,1773,45,107,IT,44.54109,11.93533 62249,Zerba,1773,45,107,IT,44.66551,9.28795 62257,Ziano Piacentino,1773,45,107,IT,44.9998,9.39486 62259,Zibello,1773,45,107,IT,45.01847,10.12968 62264,Zocca,1773,45,107,IT,44.34566,10.99308 62267,Zola Predosa,1773,45,107,IT,44.48967,11.21831 135327,Aiello del Friuli,1756,36,107,IT,45.87276,13.36038 135459,Amaro,1756,36,107,IT,46.37367,13.09368 135474,Ampezzo,1756,36,107,IT,46.41459,12.79634 135488,Andreis,1756,36,107,IT,46.20146,12.61448 135493,Anduins,1756,36,107,IT,46.23311,12.95829 135545,Aquileia,1756,36,107,IT,45.7683,13.36779 135552,Arba,1756,36,107,IT,46.14611,12.79009 135641,Arta Terme,1756,36,107,IT,46.48021,13.0204 135642,Artegna,1756,36,107,IT,46.23929,13.15399 135650,Arzene,1756,36,107,IT,45.99965,12.85034 135682,Attimis,1756,36,107,IT,46.19022,13.31127 135691,Aurisina,1756,36,107,IT,45.74968,13.67345 135705,Aviano,1756,36,107,IT,46.07056,12.59472 135706,Aviano-Castello,1756,36,107,IT,46.06759,12.58324 135721,Azzano Decimo,1756,36,107,IT,45.90937,12.6642 135752,Bagnaria Arsa,1756,36,107,IT,45.88383,13.28562 135754,Bagnarola,1756,36,107,IT,45.8669,12.85886 135836,Barcis,1756,36,107,IT,46.19071,12.56068 135877,Basaldella,1756,36,107,IT,46.02527,13.21718 135887,Basiliano,1756,36,107,IT,46.01417,13.07 135888,Basiliano-Vissandone,1756,36,107,IT,46.02278,13.09306 135923,Begliano,1756,36,107,IT,45.81984,13.46586 136001,Bertiolo,1756,36,107,IT,45.94463,13.05606 136044,Bicinicco,1756,36,107,IT,45.93211,13.253 136147,Bordano,1756,36,107,IT,46.31528,13.10529 136316,Bressa,1756,36,107,IT,46.03446,13.14724 136365,Brugnera,1756,36,107,IT,45.89947,12.54178 136391,Budoia,1756,36,107,IT,46.04453,12.53429 136399,Buia,1756,36,107,IT,46.21222,13.11691 136441,Buttrio,1756,36,107,IT,46.01098,13.33354 136591,Camino al Tagliamento,1756,36,107,IT,45.92767,12.94489 136655,Campoformido,1756,36,107,IT,46.01952,13.1575 136664,Campolongo al Torre,1756,36,107,IT,45.86389,13.39667 136665,Campolongo al Torre-Cavenzano,1756,36,107,IT,45.86306,13.38944 136710,Caneva,1756,36,107,IT,45.97078,12.45261 136824,Capriva del Friuli,1756,36,107,IT,45.94093,13.51422 136887,Carlino,1756,36,107,IT,45.80321,13.18874 137034,Casarsa della Delizia,1756,36,107,IT,45.95091,12.8425 137093,Cassacco,1756,36,107,IT,46.17345,13.19236 137366,Castions,1756,36,107,IT,45.97218,12.79961 137367,Castions di Strada,1756,36,107,IT,45.91247,13.18167 137426,Cavasso Nuovo,1756,36,107,IT,46.19441,12.77193 137428,Cavazzo Carnico,1756,36,107,IT,46.36793,13.04075 137439,Cavolano-Schiavoi,1756,36,107,IT,45.93333,12.5 137452,Cecchini,1756,36,107,IT,45.86551,12.6222 137527,Cercivento,1756,36,107,IT,46.52745,12.99219 137594,Cervignano del Friuli,1756,36,107,IT,45.82082,13.33929 137658,Chiaulis,1756,36,107,IT,46.38877,12.99155 137679,Chions,1756,36,107,IT,45.84546,12.71232 137680,Chiopris,1756,36,107,IT,45.92667,13.40417 137690,Chiusaforte,1756,36,107,IT,46.40663,13.30552 137727,Cimolais,1756,36,107,IT,46.289,12.43792 137782,Cividale del Friuli,1756,36,107,IT,46.09019,13.42861 137807,Claut,1756,36,107,IT,46.26855,12.5144 137808,Clauzetto,1756,36,107,IT,46.22931,12.91662 137814,Clodig,1756,36,107,IT,46.1562,13.59399 137837,Codroipo,1756,36,107,IT,45.96469,12.97985 137906,Colloredo di Monte Albano,1756,36,107,IT,46.16472,13.13861 137907,Colloredo di Monte Albano-Lauzzana,1756,36,107,IT,46.15861,13.12278 137908,Colloredo di Prato,1756,36,107,IT,46.05124,13.14394 137930,Colugna,1756,36,107,IT,46.091,13.20282 137938,Comeglians,1756,36,107,IT,46.51614,12.86619 138001,Cordenons,1756,36,107,IT,45.9836,12.70038 138003,Cordovado,1756,36,107,IT,45.84425,12.88537 138021,Cormons,1756,36,107,IT,45.95531,13.46683 138034,Corno di Rosazzo,1756,36,107,IT,45.9911,13.44368 138077,Coseano,1756,36,107,IT,46.09636,13.02028 138123,Cras,1756,36,107,IT,46.17403,13.62287 138266,Dignano,1756,36,107,IT,46.08392,12.94009 138274,Doberdò del Lago,1756,36,107,IT,45.84444,13.53908 138278,Dogna,1756,36,107,IT,46.44793,13.31502 138282,Dolegna del Collio,1756,36,107,IT,46.03094,13.47885 138284,Dolina,1756,36,107,IT,45.6008,13.85929 138291,Domio,1756,36,107,IT,45.61049,13.83103 138341,Duino,1756,36,107,IT,45.77342,13.60436 138359,Enemonzo-Quinis,1756,36,107,IT,46.40833,12.87944 138376,Erto,1756,36,107,IT,46.2764,12.37149 138399,Faedis,1756,36,107,IT,46.14931,13.34463 138405,Fagagna,1756,36,107,IT,46.10698,13.09361 138432,Fanna,1756,36,107,IT,46.18455,12.75161 138452,Farra dIsonzo,1756,36,107,IT,45.90802,13.51654 138550,Fiume Veneto,1756,36,107,IT,45.92865,12.73811 138554,Fiumicello,1756,36,107,IT,45.79202,13.40964 138559,Flaibano,1756,36,107,IT,46.05837,12.98424 138574,Fogliano,1756,36,107,IT,45.86556,13.48222 138628,Forgaria nel Friuli,1756,36,107,IT,46.22036,12.9747 138653,Forni Avoltri,1756,36,107,IT,46.58615,12.7751 138654,Forni di Sopra,1756,36,107,IT,46.42028,12.58312 138655,Forni di Sotto,1756,36,107,IT,46.39379,12.6721 138737,Frisanco,1756,36,107,IT,46.21246,12.72626 138893,Gemona,1756,36,107,IT,46.27405,13.12237 139016,Gonars,1756,36,107,IT,45.8974,13.24402 139032,Gorizia,1756,36,107,IT,45.94088,13.62167 139050,Gradisca dIsonzo,1756,36,107,IT,45.8925,13.50167 139051,Grado,1756,36,107,IT,45.67774,13.40323 139070,Granvilla,1756,36,107,IT,46.56755,12.68933 139188,Ialmicco,1756,36,107,IT,45.91333,13.34611 139236,Isola,1756,36,107,IT,46.25573,13.17906 139392,Latisana,1756,36,107,IT,45.76859,13.00618 139395,Lauco,1756,36,107,IT,46.42397,12.93222 139407,Lauzacco,1756,36,107,IT,45.98134,13.28024 139474,Lestans,1756,36,107,IT,46.15793,12.88872 139475,Lestizza,1756,36,107,IT,45.95656,13.14221 139511,Lignano Sabbiadoro,1756,36,107,IT,45.6759,13.11727 139513,Ligosullo,1756,36,107,IT,46.54008,13.07547 139674,Lusevera,1756,36,107,IT,46.27529,13.26922 139738,Magnano in Riviera,1756,36,107,IT,46.22369,13.19483 139753,Majano,1756,36,107,IT,46.18752,13.06162 139757,Malborghetto,1756,36,107,IT,46.50679,13.43946 139800,Maniago,1756,36,107,IT,46.16644,12.70602 139812,Manzano,1756,36,107,IT,45.98843,13.37674 139822,Marano Lagunare,1756,36,107,IT,45.76353,13.16733 139868,Mariano del Friuli,1756,36,107,IT,45.91509,13.45947 139924,Marsure,1756,36,107,IT,46.09403,12.59528 139930,Martignacco,1756,36,107,IT,46.09313,13.13973 140018,Medea,1756,36,107,IT,45.91751,13.42444 140022,Mediis,1756,36,107,IT,46.40336,12.82341 140027,Meduno,1756,36,107,IT,46.21518,12.79932 140082,Mereto di Tomba,1756,36,107,IT,46.05128,13.04432 140089,Merso di Sopra,1756,36,107,IT,46.12389,13.52806 140196,Moggio di Sotto,1756,36,107,IT,46.40651,13.19507 140195,Moggio Udinese,1756,36,107,IT,46.41083,13.20139 140204,Moimacco,1756,36,107,IT,46.09145,13.3727 140279,Monfalcone,1756,36,107,IT,45.80463,13.53292 140500,Montenars,1756,36,107,IT,46.25111,13.16944 140515,Montereale Valcellina,1756,36,107,IT,46.1511,12.64771 140600,Moraro,1756,36,107,IT,45.92971,13.49575 140637,Morsano,1756,36,107,IT,45.85969,12.92769 140640,Mortegliano,1756,36,107,IT,45.94553,13.17255 140642,Moruzzo,1756,36,107,IT,46.11967,13.124 140651,Mossa,1756,36,107,IT,45.93674,13.54933 140677,Muggia,1756,36,107,IT,45.60419,13.76754 140707,Muzzana del Turgnano,1756,36,107,IT,45.81799,13.12751 140770,Nimis,1756,36,107,IT,46.20659,13.26777 140942,Orcenico Inferiore,1756,36,107,IT,45.94977,12.76452 140973,Orsaria,1756,36,107,IT,46.03862,13.38247 141013,Osoppo,1756,36,107,IT,46.25536,13.08453 141056,Ovaro,1756,36,107,IT,46.48409,12.86704 58210,Pagnacco,1756,36,107,IT,46.11462,13.18377 58235,Palazzolo dello Stella,1756,36,107,IT,45.79823,13.08776 58255,Palmanova,1756,36,107,IT,45.9054,13.30998 58267,Paludea,1756,36,107,IT,46.1995,12.90344 58269,Paluzza,1756,36,107,IT,46.53202,13.01586 58322,Pasian di Prato,1756,36,107,IT,46.04667,13.1878 58323,Pasiano,1756,36,107,IT,45.84972,12.62722 58334,Passons,1756,36,107,IT,46.06889,13.18917 58353,Paularo,1756,36,107,IT,46.53101,13.11886 58360,Pavia di Udine,1756,36,107,IT,45.99502,13.30367 58415,Percoto,1756,36,107,IT,45.97471,13.32304 58440,Pertegada,1756,36,107,IT,45.72179,13.04379 58599,Pieria-Prato Carnico,1756,36,107,IT,46.52037,12.80328 58600,Pieris,1756,36,107,IT,45.81243,13.44917 58682,Pinzano al Tagliamento,1756,36,107,IT,46.18216,12.94433 58743,Pocenia,1756,36,107,IT,45.8357,13.10145 58783,Polcenigo,1756,36,107,IT,46.03822,12.50321 58862,Pontebba,1756,36,107,IT,46.5054,13.30622 58905,Porcia,1756,36,107,IT,45.96301,12.61642 58906,Pordenone,1756,36,107,IT,45.95689,12.66051 58910,Porpetto,1756,36,107,IT,45.857,13.21703 58972,Povoletto,1756,36,107,IT,46.11568,13.29171 58992,Pozzuolo del Friuli,1756,36,107,IT,45.98517,13.19724 58994,Pradamano,1756,36,107,IT,46.03391,13.30223 59016,Prata di Pordenone,1756,36,107,IT,45.89441,12.58843 59025,Prato,1756,36,107,IT,46.37364,13.30659 59029,Prato Carnico,1756,36,107,IT,46.52049,12.80886 59037,Pravisdomini,1756,36,107,IT,45.81972,12.69478 59041,Precenicco,1756,36,107,IT,45.79694,13.07554 59053,Premariacco,1756,36,107,IT,46.06145,13.39461 59060,Preone,1756,36,107,IT,46.39411,12.86645 59063,Prepotto,1756,36,107,IT,46.04522,13.47921 59092,Prosecco-Contovello,1756,36,107,IT,45.70807,13.73376 59135,Provincia di Gorizia,1756,36,107,IT,45.86548,13.50195 59163,Provincia di Pordenone,1756,36,107,IT,46.10182,12.69002 59182,Provincia di Trieste,1756,36,107,IT,45.713,13.76116 59183,Provincia di Udine,1756,36,107,IT,46.16408,13.17794 59198,Puia-Villanova,1756,36,107,IT,45.86222,12.57139 59202,Pulfero,1756,36,107,IT,46.17376,13.48363 59277,Ramuscello,1756,36,107,IT,45.88105,12.8846 59294,Rauscedo-Domanins,1756,36,107,IT,46.04083,12.82472 59297,Ravascletto,1756,36,107,IT,46.52504,12.92138 59300,Raveo,1756,36,107,IT,46.43392,12.87165 59306,Reana del Roiale,1756,36,107,IT,46.13733,13.2232 59307,Reana del Rojale,1756,36,107,IT,46.14322,13.24653 59327,Remanzacco,1756,36,107,IT,46.08535,13.32358 59336,Resiutta,1756,36,107,IT,46.39371,13.21796 59380,Rigolato,1756,36,107,IT,46.55393,12.84619 59435,Rive dArcano,1756,36,107,IT,46.12722,13.03222 59438,Rivignano,1756,36,107,IT,45.87575,13.0419 59547,Rodeano,1756,36,107,IT,46.11085,13.0111 59580,Romans dIsonzo,1756,36,107,IT,45.88816,13.44187 59596,Ronchi dei Legionari,1756,36,107,IT,45.82735,13.50417 59598,Ronchis,1756,36,107,IT,45.80792,12.99545 59623,Rosa,1756,36,107,IT,45.93056,12.87083 59677,Roveredo in Piano,1756,36,107,IT,46.00847,12.61938 59693,Ruda,1756,36,107,IT,45.83986,13.40177 59720,Sacile,1756,36,107,IT,45.95412,12.50274 59725,Sagrado,1756,36,107,IT,45.87393,13.48418 59852,San Canzian dIsonzo,1756,36,107,IT,45.7975,13.46639 59889,San Daniele del Friuli,1756,36,107,IT,46.15714,13.00726 59923,San Floriano del Collio,1756,36,107,IT,45.98088,13.58875 59941,San Giacomo,1756,36,107,IT,46.17311,12.98344 59967,San Giorgio della Richinvelda,1756,36,107,IT,46.04778,12.86867 59971,San Giorgio di Nogaro,1756,36,107,IT,45.82745,13.21088 59978,San Giovanni,1756,36,107,IT,46.02104,12.51556 59992,San Giovanni al Natisone,1756,36,107,IT,45.97079,13.40182 60029,San Leonardo,1756,36,107,IT,46.11913,13.53085 60041,San Lorenzo Isontino,1756,36,107,IT,45.9302,13.52517 60080,San Martino al Tagliamento,1756,36,107,IT,46.01697,12.86989 60165,San Pier dIsonzo,1756,36,107,IT,45.84452,13.46764 60188,San Pietro al Natisone,1756,36,107,IT,46.11444,13.48296 60218,San Quirino,1756,36,107,IT,46.03411,12.67846 60257,San Valentino,1756,36,107,IT,45.79039,13.41236 60280,San Vito al Tagliamento,1756,36,107,IT,45.9168,12.85945 60281,San Vito al Torre,1756,36,107,IT,45.89587,13.37588 60283,San Vito di Fagagna,1756,36,107,IT,46.09103,13.06569 60425,Santa Croce,1756,36,107,IT,45.73472,13.69278 60480,Santa Maria la Longa,1756,36,107,IT,45.93403,13.28911 60537,Sappada,1756,36,107,IT,46.56663,12.68421 60580,Sauris di Sotto,1756,36,107,IT,46.46624,12.70852 60596,Savogna,1756,36,107,IT,46.15846,13.53089 60597,Savogna dIsonzo,1756,36,107,IT,45.90894,13.57936 60680,Sedegliano,1756,36,107,IT,46.01396,12.97734 60734,Sequals,1756,36,107,IT,46.16385,12.83037 60800,Sesto al Reghena,1756,36,107,IT,45.84938,12.81295 60821,Sevegliano,1756,36,107,IT,45.88749,13.30541 60831,Sgonico,1756,36,107,IT,45.73583,13.74708 60881,Sistiana-Visogliano,1756,36,107,IT,45.77237,13.63824 60975,Sottoselva,1756,36,107,IT,45.91134,13.32416 61011,Spilimbergo,1756,36,107,IT,46.11345,12.89241 61047,Staranzano,1756,36,107,IT,45.80233,13.50226 61091,Stregna,1756,36,107,IT,46.12689,13.57761 61134,Sutrio,1756,36,107,IT,46.51206,12.99325 61150,Taipana,1756,36,107,IT,46.24911,13.3415 61156,Talmassons,1756,36,107,IT,45.9281,13.12199 61158,Tamai,1756,36,107,IT,45.92427,12.57187 61166,Tarcento,1756,36,107,IT,46.21251,13.21514 61170,Tarvisio,1756,36,107,IT,46.50567,13.58689 61178,Tavagnacco,1756,36,107,IT,46.10976,13.22251 61215,Teor,1756,36,107,IT,45.85416,13.05608 61257,Terzo dAquileia,1756,36,107,IT,45.79994,13.34177 61302,Tolmezzo,1756,36,107,IT,46.39996,13.02051 61378,Torreano,1756,36,107,IT,46.12786,13.42933 61421,Torviscosa,1756,36,107,IT,45.82337,13.2805 61433,Tramonti di Sopra,1756,36,107,IT,46.31023,12.78994 61434,Tramonti di Sotto,1756,36,107,IT,46.28475,12.79644 61445,Trasaghis,1756,36,107,IT,46.28164,13.07545 61455,Travesio,1756,36,107,IT,46.19667,12.8674 61487,Treppo Carnico,1756,36,107,IT,46.53323,13.04292 61488,Treppo Grande,1756,36,107,IT,46.19988,13.1535 61521,Tricesimo,1756,36,107,IT,46.16058,13.21566 61524,Trieste,1756,36,107,IT,45.64953,13.77678 61543,Trivignano Udinese,1756,36,107,IT,45.94601,13.34019 61577,Turriaco,1756,36,107,IT,45.82119,13.44369 61587,Udine,1756,36,107,IT,46.0693,13.23715 61642,Vajont,1756,36,107,IT,46.14534,12.69647 61746,Valvasone,1756,36,107,IT,45.99331,12.86659 61772,Varmo,1756,36,107,IT,45.8863,12.99005 61830,Venzone,1756,36,107,IT,46.33031,13.13825 61976,Vigonovo-Fontanafredda,1756,36,107,IT,45.98927,12.54707 62007,Villa Opicina,1756,36,107,IT,45.6878,13.78861 62027,Villa Santina,1756,36,107,IT,46.41368,12.92445 62031,Villa Vicentina,1756,36,107,IT,45.81378,13.39332 62090,Villanova,1756,36,107,IT,46.13226,12.97084 62150,Villesse,1756,36,107,IT,45.86526,13.4438 62155,Villotta,1756,36,107,IT,45.86336,12.75418 62173,Visco,1756,36,107,IT,45.89194,13.34861 62190,Vivaro,1756,36,107,IT,46.07656,12.77912 62268,Zolla,1756,36,107,IT,45.71698,13.81038 62274,Zoppola,1756,36,107,IT,45.96624,12.76828 62282,Zugliano-Terenzano-Cargnacco,1756,36,107,IT,46.0075,13.21694 62283,Zuglio,1756,36,107,IT,46.4583,13.02589 135252,Accumoli,1678,62,107,IT,42.69476,13.24761 135261,Acilia-Castel Fusano-Ostia Antica,1678,62,107,IT,41.76337,12.33078 135264,Acquafondata,1678,62,107,IT,41.54282,13.95281 135270,Acquapendente,1678,62,107,IT,42.74259,11.86827 135285,Acuto,1678,62,107,IT,41.79107,13.17446 135293,Affile,1678,62,107,IT,41.88435,13.09853 135313,Agosta,1678,62,107,IT,41.98133,13.03499 135345,Alatri,1678,62,107,IT,41.73187,13.3412 135351,Albano Laziale,1678,62,107,IT,41.72748,12.659 135386,Albuccione,1678,62,107,IT,41.95245,12.69873 135419,Allumiere,1678,62,107,IT,42.15751,11.90361 135449,Alvito,1678,62,107,IT,41.69002,13.74795 135461,Amaseno,1678,62,107,IT,41.46705,13.33457 135463,Amatrice,1678,62,107,IT,42.62664,13.29509 135476,Anagni,1678,62,107,IT,41.7435,13.15542 135502,Anguillara Sabazia,1678,62,107,IT,42.0792,12.28368 135504,Anitrella-Chiaiamari,1678,62,107,IT,41.63825,13.54835 135517,Anticoli Corrado,1678,62,107,IT,42.00801,12.99049 135521,Antrodoco,1678,62,107,IT,42.41498,13.07673 135527,Anzio,1678,62,107,IT,41.45263,12.62157 135542,Aprilia,1678,62,107,IT,41.59452,12.65419 135547,Aquino,1678,62,107,IT,41.49388,13.7052 135548,Ara Nova,1678,62,107,IT,41.933,12.2398 135561,Arce,1678,62,107,IT,41.57787,13.58571 135566,Arci-Empolitana,1678,62,107,IT,41.94766,12.82502 135568,Arcinazzo Romano,1678,62,107,IT,41.87972,13.11439 135578,Ardea,1678,62,107,IT,41.60742,12.54158 135584,Area Produttiva,1678,62,107,IT,41.68211,12.50697 135601,Ariccia,1678,62,107,IT,41.72063,12.6723 135610,Arlena di Castro,1678,62,107,IT,42.46559,11.8209 135615,Armetta,1678,62,107,IT,41.8128,12.68782 135619,Arnara,1678,62,107,IT,41.58452,13.3884 135628,Arpino,1678,62,107,IT,41.64705,13.61155 135640,Arsoli,1678,62,107,IT,42.04158,13.01606 135643,Artena,1678,62,107,IT,41.74126,12.90667 135657,Ascrea,1678,62,107,IT,42.19763,12.99457 135676,Atina,1678,62,107,IT,41.62004,13.79905 135677,Atina Inferiore,1678,62,107,IT,41.62705,13.79258 135689,Aurelia,1678,62,107,IT,42.1391,11.78713 135694,Ausonia,1678,62,107,IT,41.35808,13.74983 135758,Bagni di Tivoli,1678,62,107,IT,41.95,12.71667 135775,Bagnoregio,1678,62,107,IT,42.62845,12.08969 135820,Barbarano Romano,1678,62,107,IT,42.24908,12.06774 135894,Bassano in Teverina,1678,62,107,IT,42.46444,12.30752 135892,Bassano Romano,1678,62,107,IT,42.22228,12.18785 135895,Bassiano,1678,62,107,IT,41.55154,13.02732 135935,Bella Farnia,1678,62,107,IT,41.3678,12.97602 135942,Bellegra,1678,62,107,IT,41.88166,13.02861 135952,Belmonte Castello,1678,62,107,IT,41.57742,13.81581 135956,Belmonte in Sabina,1678,62,107,IT,42.31482,12.89178 136074,Bivio di Capanelle,1678,62,107,IT,42.11962,12.59395 136072,Bivio San Polo,1678,62,107,IT,41.97418,12.82993 136080,Blera,1678,62,107,IT,42.27293,12.03016 136113,Bolsena,1678,62,107,IT,42.64326,11.98514 136118,Bomarzo,1678,62,107,IT,42.48273,12.25037 136145,Borbona,1678,62,107,IT,42.50939,13.13206 136172,Borgo Grappa,1678,62,107,IT,41.40212,12.96053 136173,Borgo Hermada,1678,62,107,IT,41.30559,13.17235 136174,Borgo Lotti,1678,62,107,IT,41.76414,12.555 136178,Borgo Podgora,1678,62,107,IT,41.51462,12.85383 136180,Borgo Sabotino-Foce Verde,1678,62,107,IT,41.41667,12.83333 136186,Borgo San Michele,1678,62,107,IT,41.43828,12.97351 136195,Borgo Velino,1678,62,107,IT,42.40508,13.0565 136216,Borgorose,1678,62,107,IT,42.19077,13.23282 136271,Boville Ernica,1678,62,107,IT,41.64252,13.4727 136281,Bracciano,1678,62,107,IT,42.10271,12.16565 136345,Broccostella,1678,62,107,IT,41.69972,13.63531 136480,Caira,1678,62,107,IT,41.53333,13.81667 136500,Calcata Nuova,1678,62,107,IT,42.21952,12.42617 136581,Camerata Nuova,1678,62,107,IT,42.018,13.1097 136587,Camilleri-Vallelata,1678,62,107,IT,41.59848,12.61738 136601,Campagnano di Roma,1678,62,107,IT,42.1357,12.37358 136634,Campo di Carne,1678,62,107,IT,41.55265,12.64114 136628,Campo Jemini,1678,62,107,IT,41.62716,12.51258 136630,Campo Limpido-Favale,1678,62,107,IT,41.96732,12.77016 136646,Campodimele,1678,62,107,IT,41.38822,13.53081 136659,Campoleone,1678,62,107,IT,41.6457,12.64826 136660,Campoli Appennino,1678,62,107,IT,41.73539,13.68326 136688,Canale Monterano,1678,62,107,IT,42.13598,12.10284 136709,Canepina,1678,62,107,IT,42.38315,12.23179 136714,Canino,1678,62,107,IT,42.46592,11.75294 136739,Cantalice,1678,62,107,IT,42.46458,12.90461 136743,Cantalupo in Sabina,1678,62,107,IT,42.30689,12.64513 136747,Canterano,1678,62,107,IT,41.94322,13.03809 136763,Capena,1678,62,107,IT,42.14247,12.54513 136781,Capodimonte,1678,62,107,IT,42.5478,11.90657 136801,Capranica,1678,62,107,IT,42.25849,12.17278 136802,Capranica Prenestina,1678,62,107,IT,41.86285,12.95077 136805,Caprarola,1678,62,107,IT,42.32308,12.23848 136844,Carbognano,1678,62,107,IT,42.33024,12.26457 136855,Carchitti,1678,62,107,IT,41.78688,12.82955 136918,Carpineto Romano,1678,62,107,IT,41.6047,13.0841 136926,Carrara-Pontenuovo,1678,62,107,IT,41.54045,12.95468 136937,Cartiera-Stazione,1678,62,107,IT,41.65642,13.24086 136958,Casal Palocco,1678,62,107,IT,41.74845,12.34726 136962,Casalattico,1678,62,107,IT,41.62213,13.72563 136963,Casalazzara,1678,62,107,IT,41.62299,12.57634 136993,Casali,1678,62,107,IT,41.37812,13.75479 137012,Casalvieri,1678,62,107,IT,41.63329,13.71363 137025,Casape,1678,62,107,IT,41.90702,12.88579 137028,Casaprota,1678,62,107,IT,42.25177,12.80428 137054,Case Campoli-Panetta,1678,62,107,IT,41.67296,13.4717 137091,Casperia,1678,62,107,IT,42.33869,12.67017 137112,Cassino,1678,62,107,IT,41.48581,13.82835 137134,Castel Chiodato,1678,62,107,IT,42.05617,12.69764 137175,Castel di Tora,1678,62,107,IT,42.21392,12.97073 137137,Castel Fusano,1678,62,107,IT,41.74717,12.3119 137139,Castel Gandolfo,1678,62,107,IT,41.74875,12.64975 137143,Castel Madama,1678,62,107,IT,41.9735,12.86782 137154,Castel San Pietro Romano,1678,62,107,IT,41.84572,12.89489 137157,Castel SantAngelo,1678,62,107,IT,42.39373,13.02738 137158,Castel SantElia,1678,62,107,IT,42.25112,12.37032 137195,Castelforte,1678,62,107,IT,41.29392,13.83061 137250,Castelliri,1678,62,107,IT,41.67764,13.53978 137271,Castelmassimo,1678,62,107,IT,41.66389,13.38063 137301,Castelnuovo di Farfa,1678,62,107,IT,42.23193,12.74308 137303,Castelnuovo di Porto,1678,62,107,IT,42.1228,12.51043 137292,Castelnuovo Parano,1678,62,107,IT,41.37912,13.75621 137358,Castiglione in Teverina,1678,62,107,IT,42.65076,12.20305 137377,Castro dei Volsci,1678,62,107,IT,41.50822,13.4063 137379,Castrocielo,1678,62,107,IT,41.52736,13.69588 137430,Cave,1678,62,107,IT,41.81682,12.94055 137450,Ceccano,1678,62,107,IT,41.57236,13.32901 137451,Cecchina,1678,62,107,IT,41.70161,12.64972 137477,Celleno,1678,62,107,IT,42.56039,12.12442 137478,Cellere,1678,62,107,IT,42.51024,11.77079 137510,Ceprano,1678,62,107,IT,41.54572,13.51473 137559,Cerquotti-Madonna del Piano,1678,62,107,IT,41.64194,13.21316 137565,Cerreto Laziale,1678,62,107,IT,41.94332,12.98169 137582,Cervara di Roma,1678,62,107,IT,41.98822,13.06799 137584,Cervaro,1678,62,107,IT,41.48278,13.90218 137590,Cerveteri,1678,62,107,IT,41.9908,12.09082 137604,Cesano,1678,62,107,IT,42.07375,12.33711 137701,Ciampino,1678,62,107,IT,41.80064,12.60158 137711,Ciciliano,1678,62,107,IT,41.9599,12.94163 137730,Cineto Romano,1678,62,107,IT,42.05014,12.9608 137762,Cisterna di Latina,1678,62,107,IT,41.5908,12.82808 137776,Città metropolitana di Roma Capitale,1678,62,107,IT,41.96667,12.66667 137767,Cittaducale,1678,62,107,IT,42.38664,12.95497 137769,Cittareale,1678,62,107,IT,42.61624,13.15788 137786,Civita Castellana,1678,62,107,IT,42.29304,12.40885 137794,Civitavecchia,1678,62,107,IT,42.09325,11.79674 137801,Civitella dAgliano,1678,62,107,IT,42.60296,12.18624 137800,Civitella San Paolo,1678,62,107,IT,42.19935,12.57455 137849,Coldragone,1678,62,107,IT,41.55458,13.60399 137856,Collalto Sabino,1678,62,107,IT,42.13522,13.04841 137860,Colle Campano-Scrima,1678,62,107,IT,41.62364,13.46336 137870,Colle del Pino,1678,62,107,IT,41.74246,12.49644 137871,Colle di Fuori,1678,62,107,IT,41.80091,12.80683 137872,Colle di Tora,1678,62,107,IT,42.20809,12.94746 137862,Colle Mainello,1678,62,107,IT,41.86975,12.78767 137863,Colle San Magno,1678,62,107,IT,41.55019,13.69485 137866,Colle Spina,1678,62,107,IT,41.78205,12.84723 137868,Colle Verde,1678,62,107,IT,41.97694,12.61855 137880,Colleferro,1678,62,107,IT,41.72722,13.00481 137881,Collefontana-Fontana Liri Inferiore,1678,62,107,IT,41.61166,13.54945 137882,Collegiove,1678,62,107,IT,42.17506,13.03844 137886,Collepardo,1678,62,107,IT,41.76417,13.36846 137896,Collevecchio,1678,62,107,IT,42.33368,12.55329 137897,Colleverde II,1678,62,107,IT,41.97533,12.63191 137900,Colli di Enea,1678,62,107,IT,41.65554,12.49035 137901,Colli sul Velino,1678,62,107,IT,42.49828,12.78153 137922,Colonna,1678,62,107,IT,41.83454,12.75495 137929,Colubro,1678,62,107,IT,41.73506,12.86726 137956,Concerviano,1678,62,107,IT,42.32214,12.98534 137968,Configni,1678,62,107,IT,42.42543,12.64431 137978,Contigliano,1678,62,107,IT,42.41058,12.77202 137998,Corchiano,1678,62,107,IT,42.34495,12.35688 138000,Corcolle,1678,62,107,IT,41.90421,12.73654 138007,Coreno Ausonio,1678,62,107,IT,41.34735,13.77648 138010,Cori,1678,62,107,IT,41.64358,12.91121 138074,Corvaro,1678,62,107,IT,42.20538,13.26496 138107,Costaroni,1678,62,107,IT,42.07819,12.53712 138113,Cottanello,1678,62,107,IT,42.40811,12.68592 138150,Cretone,1678,62,107,IT,42.07116,12.70365 138384,Esperia,1678,62,107,IT,41.38237,13.68491 138394,Fabrica di Roma,1678,62,107,IT,42.33444,12.29873 138418,Faleria,1678,62,107,IT,42.2258,12.44518 138425,Falvaterra,1678,62,107,IT,41.50438,13.52341 138443,Fara in Sabina,1678,62,107,IT,42.20807,12.7296 138449,Farnese,1678,62,107,IT,42.54926,11.72638 138480,Ferentino,1678,62,107,IT,41.69119,13.2562 138499,Fiamignano,1678,62,107,IT,42.26546,13.12413 138501,Fiano Romano,1678,62,107,IT,42.15538,12.59467 138521,Filacciano,1678,62,107,IT,42.25445,12.5988 138526,Filettino,1678,62,107,IT,41.89131,13.32531 138546,Fiuggi,1678,62,107,IT,41.7978,13.22386 138555,Fiumicino-Isola Sacra,1678,62,107,IT,41.77093,12.23662 138571,Focene,1678,62,107,IT,41.81367,12.21354 138588,Fondi,1678,62,107,IT,41.35787,13.42718 138610,Fontechiari,1678,62,107,IT,41.66788,13.67504 138617,Forano,1678,62,107,IT,42.29768,12.59469 138635,Formello,1678,62,107,IT,42.06246,12.39435 138636,Formia,1678,62,107,IT,41.25632,13.60888 138678,Fossignano,1678,62,107,IT,41.59226,12.56333 138708,Frascati,1678,62,107,IT,41.8091,12.67942 138717,Frasso Sabino,1678,62,107,IT,42.22927,12.80658 138728,Fregene,1678,62,107,IT,41.85051,12.19671 138741,Frosinone,1678,62,107,IT,41.63976,13.34109 138750,Fumone,1678,62,107,IT,41.73461,13.27015 138774,Gaeta,1678,62,107,IT,41.21408,13.57082 138802,Gallese,1678,62,107,IT,42.37376,12.39646 138808,Gallicano nel Lazio,1678,62,107,IT,41.86433,12.83543 138811,Gallinaro,1678,62,107,IT,41.65502,13.79799 138877,Gavignano,1678,62,107,IT,41.69891,13.05032 138895,Genazzano,1678,62,107,IT,41.82807,12.97196 138897,Genio Civile,1678,62,107,IT,41.54807,12.69161 138904,Genzano di Roma,1678,62,107,IT,41.70706,12.68904 138909,Gerano,1678,62,107,IT,41.93474,12.99034 138981,Girardi-Bellavista-Terrazze,1678,62,107,IT,42.10266,12.5796 138990,Giulianello,1678,62,107,IT,41.6861,12.87917 138992,Giuliano di Roma,1678,62,107,IT,41.53933,13.28028 139026,Gorga,1678,62,107,IT,41.65468,13.10663 139052,Gradoli,1678,62,107,IT,42.64502,11.8558 139054,Graffignano,1678,62,107,IT,42.57539,12.20121 139120,Grottaferrata,1678,62,107,IT,41.78664,12.67144 139127,Grotte di Castro,1678,62,107,IT,42.67567,11.86908 139126,Grotte Santo Stefano,1678,62,107,IT,42.51691,12.17226 139143,Grunuovo-Campomaggiore San Luca,1678,62,107,IT,41.27228,13.80684 139152,Guarcino,1678,62,107,IT,41.79917,13.31439 139178,Guidonia,1678,62,107,IT,41.99232,12.71876 139179,Guidonia Montecelio,1678,62,107,IT,41.99362,12.72238 139229,Ischia di Castro,1678,62,107,IT,42.5442,11.75759 139246,Isola del Liri,1678,62,107,IT,41.68678,13.59679 139268,Itri,1678,62,107,IT,41.29034,13.53 139275,Jenne,1678,62,107,IT,41.88882,13.16959 139286,La Botte,1678,62,107,IT,41.98176,12.76775 139291,La Forma,1678,62,107,IT,41.83449,13.09092 139296,La Massimina-Casal Lumbroso,1678,62,107,IT,41.87332,12.35694 139310,Labico,1678,62,107,IT,41.7926,12.87127 139311,Labro,1678,62,107,IT,42.52603,12.80068 139318,Ladispoli,1678,62,107,IT,41.95068,12.075 139322,Laghetto,1678,62,107,IT,41.96734,12.65609 139361,Lanuvio,1678,62,107,IT,41.67297,12.69403 139375,Lariano,1678,62,107,IT,41.71847,12.82868 139386,Latera,1678,62,107,IT,42.62922,11.82922 139390,Latina,1678,62,107,IT,41.46614,12.9043 139391,Latina Scalo,1678,62,107,IT,41.53157,12.94567 139417,Lavinio,1678,62,107,IT,41.5035,12.58973 139426,Le Forna,1678,62,107,IT,40.92475,12.96896 139429,Le Rughe,1678,62,107,IT,42.06885,12.37624 139448,Lenola,1678,62,107,IT,41.40485,13.45934 139456,Leonessa,1678,62,107,IT,42.56855,12.95996 139496,Licenza,1678,62,107,IT,42.07413,12.90008 139504,Lido dei Pini,1678,62,107,IT,41.5366,12.58976 139507,Lido di Ostia,1678,62,107,IT,41.73212,12.27654 139524,Limiti di Greccio,1678,62,107,IT,42.45329,12.76955 139599,Longone Sabino,1678,62,107,IT,42.2726,12.96653 139628,Lubriano,1678,62,107,IT,42.63623,12.10876 139688,Maccarese,1678,62,107,IT,41.87696,12.21975 139699,Macere,1678,62,107,IT,41.74873,12.85835 139713,Maenza,1678,62,107,IT,41.52402,13.18344 139726,Magliano Romano,1678,62,107,IT,42.1575,12.43662 139727,Magliano Sabina,1678,62,107,IT,42.36568,12.4852 139786,Mandela,1678,62,107,IT,42.02795,12.92089 139808,Mantiglia di Ardea,1678,62,107,IT,41.67685,12.61453 139813,Manziana,1678,62,107,IT,42.12998,12.12537 139821,Marano Equo,1678,62,107,IT,41.99535,13.01501 139830,Maranola-Trivio,1678,62,107,IT,41.28522,13.62777 139838,Marcellina,1678,62,107,IT,42.02436,12.80445 139841,Marcetelli,1678,62,107,IT,42.22663,13.04589 139853,Marco Simone,1678,62,107,IT,41.95544,12.64775 139877,Marina di Ardea-Tor San Lorenzo,1678,62,107,IT,41.55439,12.54115 139883,Marina di Cerveteri,1678,62,107,IT,41.97997,12.05295 139874,Marina San Nicola,1678,62,107,IT,41.93102,12.12024 139900,Marino,1678,62,107,IT,41.76984,12.65917 139925,Marta,1678,62,107,IT,42.53318,11.92423 140006,Mazzano Romano,1678,62,107,IT,42.20597,12.39554 140065,Mentana,1678,62,107,IT,42.03539,12.64413 140130,Micigliano,1678,62,107,IT,42.45203,13.05318 140162,Minturno,1678,62,107,IT,41.26294,13.74583 140212,Molella,1678,62,107,IT,41.26009,13.06221 140246,Mompeo,1678,62,107,IT,42.2478,12.7513 140336,Montalto di Castro,1678,62,107,IT,42.34983,11.60788 140348,Montasola,1678,62,107,IT,42.38495,12.68127 140353,Monte Caminetto,1678,62,107,IT,42.0665,12.47358 140362,Monte Migliore La Selvotta,1678,62,107,IT,41.7206,12.50206 140364,Monte Porzio Catone,1678,62,107,IT,41.81585,12.71432 140367,Monte Romano,1678,62,107,IT,42.26745,11.89658 140368,Monte San Biagio,1678,62,107,IT,41.3536,13.35184 140371,Monte San Giovanni Campano,1678,62,107,IT,41.6431,13.51088 140372,Monte San Giovanni in Sabina,1678,62,107,IT,42.32703,12.77858 140374,Monte San Marino,1678,62,107,IT,41.712,13.31199 140394,Montebuono,1678,62,107,IT,42.3677,12.59721 140413,Montecelio,1678,62,107,IT,42.02067,12.74354 140419,Montecompatri,1678,62,107,IT,41.80892,12.73778 140437,Montefiascone,1678,62,107,IT,42.54255,12.03192 140442,Monteflavio,1678,62,107,IT,42.10935,12.83076 140464,Montelanico,1678,62,107,IT,41.65069,13.04027 140466,Montelarco,1678,62,107,IT,42.16339,12.48398 140468,Monteleone Sabino,1678,62,107,IT,42.23267,12.85828 140475,Montelibretti,1678,62,107,IT,42.13553,12.73868 140501,Montenero Sabino,1678,62,107,IT,42.28123,12.81358 140521,Monterosi,1678,62,107,IT,42.19698,12.30842 140526,Monterotondo,1678,62,107,IT,42.05159,12.61969 140581,Montopoli in Sabina,1678,62,107,IT,42.24593,12.69208 140585,Montorio Romano,1678,62,107,IT,42.13738,12.80404 140617,Moricone,1678,62,107,IT,42.11661,12.77234 140622,Morlupo,1678,62,107,IT,42.15002,12.50306 140629,Morolo,1678,62,107,IT,41.63838,13.19809 140632,Morro Reatino,1678,62,107,IT,42.52226,12.83449 140733,Nazzano,1678,62,107,IT,42.23018,12.5944 140740,Nemi,1678,62,107,IT,41.72185,12.71809 140744,Nepi,1678,62,107,IT,42.24221,12.34355 140747,Nerola,1678,62,107,IT,42.16011,12.78529 140750,Nespolo,1678,62,107,IT,42.15671,13.06938 140753,Nettuno,1678,62,107,IT,41.45794,12.66393 140808,Norma,1678,62,107,IT,41.58643,12.97073 140889,Olevano Romano,1678,62,107,IT,41.85869,13.03601 140920,Onano,1678,62,107,IT,42.69104,11.81552 140959,Oriolo Romano,1678,62,107,IT,42.16261,12.13859 140981,Orte,1678,62,107,IT,42.46117,12.38635 140982,Orte Scalo,1678,62,107,IT,42.43483,12.40783 140995,Orvinio,1678,62,107,IT,42.13039,12.93762 141036,Osteria Nuova,1678,62,107,IT,42.03721,12.30924 58202,Paganico Sabino,1678,62,107,IT,42.18963,12.99689 58241,Palestrina,1678,62,107,IT,41.83274,12.88178 58243,Paliano,1678,62,107,IT,41.77975,13.07661 58263,Palombara Sabina,1678,62,107,IT,42.06909,12.76684 58299,Parco Leonardo,1678,62,107,IT,41.80035,12.30028 58335,Passoscuro,1678,62,107,IT,41.90209,12.15723 58337,Pastena,1678,62,107,IT,41.46842,13.49111 58348,Patrica,1678,62,107,IT,41.59085,13.24363 58362,Pavona,1678,62,107,IT,41.72629,12.61642 58401,Penitro,1678,62,107,IT,41.27328,13.69262 58414,Percile,1678,62,107,IT,42.09497,12.91048 58458,Pescia Romana,1678,62,107,IT,42.39963,11.49651 58465,Pescorocchiano,1678,62,107,IT,42.20623,13.14715 58467,Pescosolido,1678,62,107,IT,41.74864,13.6569 58479,Petrella Salto,1678,62,107,IT,42.29405,13.06794 58551,Piansano,1678,62,107,IT,42.52449,11.82978 58581,Picinisco,1678,62,107,IT,41.64568,13.86791 58582,Pico,1678,62,107,IT,41.45025,13.55894 58591,Piedimonte San Germano,1678,62,107,IT,41.49796,13.75017 58592,Piedimonte San Germano Alta,1678,62,107,IT,41.50446,13.74909 58659,Piglio,1678,62,107,IT,41.83006,13.1333 58661,Pignataro Interamna,1678,62,107,IT,41.43922,13.78621 58712,Pisoniano,1678,62,107,IT,41.90816,12.95794 58746,Pofi,1678,62,107,IT,41.56542,13.4146 58752,Poggio Bustone,1678,62,107,IT,42.5033,12.88524 58753,Poggio Catino,1678,62,107,IT,42.2942,12.69838 58754,Poggio Ellera,1678,62,107,IT,42.1138,12.37174 58756,Poggio Mirteto,1678,62,107,IT,42.26763,12.68837 58757,Poggio Moiano,1678,62,107,IT,42.20411,12.88136 58758,Poggio Nativo,1678,62,107,IT,42.21783,12.79691 58762,Poggio San Lorenzo,1678,62,107,IT,42.25174,12.84343 58786,Poli,1678,62,107,IT,41.88913,12.89037 58815,Pomezia,1678,62,107,IT,41.66931,12.50124 58840,Ponte Galeria-La Pisana,1678,62,107,IT,41.84634,12.33925 58866,Pontecorvo,1678,62,107,IT,41.45861,13.66618 58888,Pontinia,1678,62,107,IT,41.41097,13.04259 58892,Ponton dellElce,1678,62,107,IT,42.0227,12.23505 58894,Ponza,1678,62,107,IT,40.89541,12.95889 58897,Ponzano Romano,1678,62,107,IT,42.25693,12.57047 58958,Posta,1678,62,107,IT,42.52562,13.09723 58959,Posta Fibreno,1678,62,107,IT,41.69189,13.68013 58975,Pozzaglia Sabino,1678,62,107,IT,42.15863,12.96428 59032,Prato di Coppola,1678,62,107,IT,41.4175,12.88157 59083,Priverno,1678,62,107,IT,41.47047,13.17867 59085,Proceno,1678,62,107,IT,42.75745,11.829 59094,Prossedi,1678,62,107,IT,41.51674,13.261 59133,Provincia di Frosinone,1678,62,107,IT,41.61667,13.45 59140,Provincia di Latina,1678,62,107,IT,41.45,13.1 59169,Provincia di Rieti,1678,62,107,IT,42.39133,12.95072 59190,Provincia di Viterbo,1678,62,107,IT,42.41667,12.08333 59324,Regolelli,1678,62,107,IT,42.29315,12.35131 59357,Riano,1678,62,107,IT,42.09347,12.51462 59374,Rieti,1678,62,107,IT,42.40476,12.85735 59377,Rignano Flaminio,1678,62,107,IT,42.2055,12.48068 59391,Riofreddo,1678,62,107,IT,42.05875,12.99661 59411,Ripi,1678,62,107,IT,41.61366,13.424 59440,Rivodutri,1678,62,107,IT,42.51684,12.85595 59466,Rocca Canterano,1678,62,107,IT,41.95652,13.02179 59482,Rocca dArce,1678,62,107,IT,41.58712,13.58511 59486,Rocca di Cave,1678,62,107,IT,41.84589,12.94509 59489,Rocca di Papa,1678,62,107,IT,41.7658,12.70188 59472,Rocca Massima,1678,62,107,IT,41.67907,12.92116 59475,Rocca Priora,1678,62,107,IT,41.76585,12.76577 59479,Rocca Santo Stefano,1678,62,107,IT,41.91052,13.02379 59480,Rocca Sinibalda,1678,62,107,IT,42.27215,12.92469 59502,Roccagiovine,1678,62,107,IT,42.05069,12.89925 59504,Roccagorga,1678,62,107,IT,41.52511,13.1551 59512,Roccantica,1678,62,107,IT,42.32073,12.69398 59519,Roccasecca,1678,62,107,IT,41.55132,13.66711 59521,Roccasecca dei Volsci,1678,62,107,IT,41.47852,13.2128 59520,Roccasecca Stazione,1678,62,107,IT,41.53333,13.65 59566,Roiate,1678,62,107,IT,41.87332,13.06627 59582,Rome,1678,62,107,IT,41.89193,12.51133 59599,Ronciglione,1678,62,107,IT,42.28899,12.21479 59684,Roviano,1678,62,107,IT,42.02643,12.9939 59711,Sabaudia,1678,62,107,IT,41.30025,13.02815 59721,Sacrofano,1678,62,107,IT,42.10457,12.44781 59774,Salisano,1678,62,107,IT,42.25947,12.74774 59807,Sambuci,1678,62,107,IT,41.98536,12.93817 59817,San Bartolomeo,1678,62,107,IT,41.48265,13.85747 59842,San Biagio Saracinisco,1678,62,107,IT,41.61322,13.92758 59863,San Cesareo,1678,62,107,IT,41.82113,12.80447 59897,San Donato Val di Comino,1678,62,107,IT,41.70726,13.8122 59909,San Felice Circeo,1678,62,107,IT,41.23716,13.09416 59964,San Giorgio a Liri,1678,62,107,IT,41.40584,13.75979 59985,San Giovanni Incarico,1678,62,107,IT,41.50001,13.55864 60002,San Giovanni-Patoni,1678,62,107,IT,41.77223,13.2751 60014,San Giuseppe le Prata-Cotropagno,1678,62,107,IT,41.67788,13.39664 60023,San Gregorio da Sassola,1678,62,107,IT,41.91881,12.87447 60043,San Lorenzo Nuovo,1678,62,107,IT,42.68626,11.90718 60079,San Martino al Cimino,1678,62,107,IT,42.36978,12.12515 60206,San Polo dei Cavalieri,1678,62,107,IT,42.01037,12.83989 60277,San Vito Romano,1678,62,107,IT,41.88001,12.97793 60288,San Vittore del Lazio,1678,62,107,IT,41.46212,13.93367 60339,SantAmbrogio sul Garigliano,1678,62,107,IT,41.39423,13.86891 60347,SantAndrea del Garigliano,1678,62,107,IT,41.36868,13.84198 60371,SantAngelo in Villa-Giglio,1678,62,107,IT,41.66217,13.42871 60361,SantAngelo Romano,1678,62,107,IT,42.0357,12.71342 60385,SantApollinare,1678,62,107,IT,41.40176,13.82992 60397,SantElia Fiumerapido,1678,62,107,IT,41.53304,13.86268 60410,SantOreste,1678,62,107,IT,42.23298,12.51507 60446,Santa Lucia,1678,62,107,IT,41.9824,12.65625 60484,Santa Marinella,1678,62,107,IT,42.03425,11.85416 60489,Santa Rufina,1678,62,107,IT,42.40897,12.91843 60509,Santi Cosma e Damiano,1678,62,107,IT,41.30091,13.81565 60529,Santopadre,1678,62,107,IT,41.60193,13.63548 60540,Saracinesco,1678,62,107,IT,42.00332,12.95329 60566,Sassacci,1678,62,107,IT,42.32342,12.44108 60620,Scandriglia,1678,62,107,IT,42.16128,12.84096 60689,Segni,1678,62,107,IT,41.68893,13.01934 60694,Selcetta,1678,62,107,IT,41.76529,12.47533 60695,Selci,1678,62,107,IT,42.30293,12.62135 60745,Sermoneta,1678,62,107,IT,41.54919,12.98481 60783,Serrone,1678,62,107,IT,41.84212,13.09519 60807,Settefrati,1678,62,107,IT,41.67045,13.8507 60808,Setteville,1678,62,107,IT,41.94375,12.65122 60824,Sezze,1678,62,107,IT,41.50032,13.06176 60825,Sezze Scalo,1678,62,107,IT,41.49701,13.04257 60832,Sgurgola,1678,62,107,IT,41.66897,13.15009 60941,Sonnino,1678,62,107,IT,41.41673,13.24592 60944,Sora,1678,62,107,IT,41.71829,13.61356 60960,Soriano nel Cimino,1678,62,107,IT,42.4182,12.23414 60998,Sperlonga,1678,62,107,IT,41.25897,13.43302 61008,Spigno Saturnia Inferiore,1678,62,107,IT,41.31146,13.73685 61009,Spigno Saturnia Superiore,1678,62,107,IT,41.31425,13.70888 61076,Stimigliano,1678,62,107,IT,42.30103,12.56337 61089,Strangolagalli,1678,62,107,IT,41.59992,13.49228 61109,Subiaco,1678,62,107,IT,41.92619,13.08906 61124,Supino,1678,62,107,IT,41.62135,13.23452 61133,Sutri,1678,62,107,IT,42.24596,12.21715 61162,Tarano,1678,62,107,IT,42.35593,12.59497 61167,Tarquinia,1678,62,107,IT,42.25419,11.75657 61200,Tecchiena,1678,62,107,IT,41.68822,13.34538 61219,Terelle,1678,62,107,IT,41.55212,13.77841 61235,Terracina,1678,62,107,IT,41.29174,13.24359 61262,Tessennano,1678,62,107,IT,42.47803,11.79101 61288,Tivoli,1678,62,107,IT,41.95952,12.8016 61296,Toffia,1678,62,107,IT,42.213,12.755 61299,Tolfa,1678,62,107,IT,42.15023,11.93216 61314,Tor Lupara,1678,62,107,IT,41.99771,12.61814 61351,Torre Caietani,1678,62,107,IT,41.78672,13.2652 61396,Torri in Sabina,1678,62,107,IT,42.35057,12.64157 61398,Torrice,1678,62,107,IT,41.63374,13.40375 61404,Torricella in Sabina,1678,62,107,IT,42.26252,12.8717 61409,Torrita Tiberina,1678,62,107,IT,42.23821,12.61633 61419,Torvaianica,1678,62,107,IT,41.62112,12.46197 61420,Torvaianica Alta,1678,62,107,IT,41.63162,12.49765 61429,Tragliatella Campitello,1678,62,107,IT,42.01334,12.252 61502,Trevi nel Lazio,1678,62,107,IT,41.86258,13.24793 61506,Trevignano Romano,1678,62,107,IT,42.1602,12.23775 61541,Trivigliano,1678,62,107,IT,41.77572,13.2723 61570,Turania,1678,62,107,IT,42.13517,13.00983 61581,Tuscania,1678,62,107,IT,42.41889,11.86846 61625,Vacone,1678,62,107,IT,42.381,12.64504 61648,Valcanneto,1678,62,107,IT,41.95078,12.15734 61662,Valentano,1678,62,107,IT,42.56377,11.82748 61688,Valle Martella,1678,62,107,IT,41.87827,12.74677 61693,Valle Santa,1678,62,107,IT,41.94532,12.31971 61702,Vallecorsa,1678,62,107,IT,41.44351,13.40634 61711,Vallemaio,1678,62,107,IT,41.36628,13.80839 61712,Vallepietra,1678,62,107,IT,41.92552,13.23127 61713,Vallerano,1678,62,107,IT,42.38331,12.26144 61715,Vallerotonda,1678,62,107,IT,41.55135,13.91372 61721,Vallinfreda,1678,62,107,IT,42.08485,12.99595 61732,Valmontone,1678,62,107,IT,41.77323,12.91856 61765,Varco Sabino,1678,62,107,IT,42.24016,13.02052 61778,Vasanello,1678,62,107,IT,42.41507,12.34767 61798,Vejano,1678,62,107,IT,42.21905,12.09398 61802,Velletri,1678,62,107,IT,41.68573,12.77753 61828,Ventotene,1678,62,107,IT,40.79404,13.42777 61862,Veroli,1678,62,107,IT,41.69433,13.41664 61890,Vetralla,1678,62,107,IT,42.31787,12.07323 61909,Vicalvi,1678,62,107,IT,41.67809,13.70813 61919,Vico nel Lazio,1678,62,107,IT,41.77822,13.34279 61926,Vicovaro,1678,62,107,IT,42.01924,12.90001 61958,Vignanello,1678,62,107,IT,42.37879,12.27845 61984,Villa Adriana,1678,62,107,IT,41.95499,12.77216 62002,Villa Latina,1678,62,107,IT,41.61522,13.83591 62018,Villa San Giovanni in Tuscia,1678,62,107,IT,42.27882,12.05346 62024,Villa Santa Lucia,1678,62,107,IT,41.51217,13.76929 62028,Villa Santo Stefano,1678,62,107,IT,41.51683,13.31046 62077,Villalba,1678,62,107,IT,41.95387,12.72938 62095,Villanova,1678,62,107,IT,41.96357,12.75633 62179,Viterbo,1678,62,107,IT,42.41937,12.1056 62180,Viticuso,1678,62,107,IT,41.52475,13.97027 62182,Vitinia,1678,62,107,IT,41.79124,12.4081 62183,Vitorchiano,1678,62,107,IT,42.46565,12.17151 62191,Vivaro Romano,1678,62,107,IT,42.10095,13.00589 62231,Zagarolo,1678,62,107,IT,41.84159,12.8154 62248,Zepponami,1678,62,107,IT,42.52518,12.05411 135335,Airole,1768,42,107,IT,43.87092,7.55414 135344,Alassio,1768,42,107,IT,44.00393,8.16713 135362,Albenga,1768,42,107,IT,44.04997,8.21829 135381,Albisola Marina,1768,42,107,IT,44.33079,8.5096 135382,Albisola Superiore,1768,42,107,IT,44.33889,8.51046 135431,Altare,1768,42,107,IT,44.33566,8.33411 135467,Ameglia,1768,42,107,IT,44.07089,9.966 135484,Andora,1768,42,107,IT,43.95514,8.14121 135539,Apricale,1768,42,107,IT,43.88033,7.65993 135544,Aquila di Arroscia,1768,42,107,IT,44.08593,8.00525 135571,Arcola,1768,42,107,IT,44.11778,9.91175 135588,Arenzano,1768,42,107,IT,44.40521,8.68315 135616,Armo,1768,42,107,IT,44.08773,7.91545 135620,Arnasco,1768,42,107,IT,44.07823,8.10745 135690,Aurigo,1768,42,107,IT,43.98281,7.92342 135697,Avegno,1768,42,107,IT,44.38285,9.15797 135732,Badalucco,1768,42,107,IT,43.91683,7.84584 135781,Bajardo,1768,42,107,IT,43.90402,7.72534 135788,Balestrino,1768,42,107,IT,44.12426,8.17064 135841,Bardineto,1768,42,107,IT,44.18972,8.13529 135849,Bargagli,1768,42,107,IT,44.4475,9.09372 135989,Bergeggi,1768,42,107,IT,44.24833,8.44402 136025,Beverino,1768,42,107,IT,44.19766,9.78537 136090,Bocco,1768,42,107,IT,44.35111,9.30333 136096,Bogliasco,1768,42,107,IT,44.3807,9.06926 136098,Boissano,1768,42,107,IT,44.13583,8.22155 136101,Bolano,1768,42,107,IT,44.1877,9.89488 136124,Bonassola,1768,42,107,IT,44.18323,9.58422 136148,Bordighera,1768,42,107,IT,43.78064,7.66451 136161,Borghetto dArroscia,1768,42,107,IT,44.05672,7.98076 136163,Borghetto di Vara,1768,42,107,IT,44.22368,9.72118 136160,Borghetto Santo Spirito,1768,42,107,IT,44.11187,8.24129 136168,Borgio,1768,42,107,IT,44.15906,8.30832 136200,Borgo di Ranzo,1768,42,107,IT,44.05963,8.01495 136171,Borgo Fornari-Pieve,1768,42,107,IT,44.58933,8.93671 136208,Borgomaro,1768,42,107,IT,43.9753,7.94408 136219,Bormida,1768,42,107,IT,44.27813,8.23235 136220,Bormida-Genepro,1768,42,107,IT,44.39051,8.19952 136235,Borzonasca,1768,42,107,IT,44.42002,9.38851 136364,Brugnato,1768,42,107,IT,44.23671,9.72496 136418,Busalla,1768,42,107,IT,44.5706,8.94545 136483,Cairo Montenotte,1768,42,107,IT,44.3979,8.27775 136527,Calice al Cornoviglio,1768,42,107,IT,44.24326,9.83671 136526,Calice Ligure,1768,42,107,IT,44.20493,8.29535 136530,Calizzano,1768,42,107,IT,44.23612,8.11817 136597,Camogli,1768,42,107,IT,44.34945,9.15487 136629,Campo Ligure,1768,42,107,IT,44.53658,8.69896 136643,Campochiesa,1768,42,107,IT,44.07069,8.19712 136670,Campomorone,1768,42,107,IT,44.50954,8.88502 136676,Camporosso,1768,42,107,IT,43.8131,7.62829 136836,Carasco,1768,42,107,IT,44.34975,9.34567 136843,Caravonica,1768,42,107,IT,43.99303,7.95805 136853,Carcare,1768,42,107,IT,44.35465,8.29039 136908,Carpasio,1768,42,107,IT,43.96024,7.86631 136928,Carro,1768,42,107,IT,44.27215,9.60888 136929,Carrodano,1768,42,107,IT,44.24155,9.65578 137020,Casano-Dogana-Isola,1768,42,107,IT,44.07565,10.03381 137023,Casanova Lerrone,1768,42,107,IT,44.03213,8.04715 137035,Casarza Ligure,1768,42,107,IT,44.27188,9.44704 137042,Casavecchia,1768,42,107,IT,44.52756,8.62157 137058,Casella,1768,42,107,IT,44.53523,9.0008 137160,Castel Vittorio,1768,42,107,IT,43.92752,7.67471 137181,Castelbianco,1768,42,107,IT,44.11423,8.07515 137223,Castellaro,1768,42,107,IT,43.86436,7.86881 137290,Castelnuovo Magra,1768,42,107,IT,44.09957,10.01715 137323,Castelvecchio di Rocca Barbena,1768,42,107,IT,44.12983,8.11665 137339,Castiglione,1768,42,107,IT,44.27539,9.51687 137474,Celle Ligure,1768,42,107,IT,44.34509,8.54685 137493,Cengio Alto,1768,42,107,IT,44.38443,8.19758 137506,Ceparana-Carpena,1768,42,107,IT,44.16667,9.88333 137513,Ceranesi,1768,42,107,IT,44.50563,8.89343 137546,Ceriale,1768,42,107,IT,44.09128,8.22893 137547,Ceriana,1768,42,107,IT,43.88091,7.77476 137597,Cervo,1768,42,107,IT,43.92572,8.11529 137614,Cesio,1768,42,107,IT,44.00803,7.97515 137659,Chiavari,1768,42,107,IT,44.31771,9.32241 137665,Chiesa,1768,42,107,IT,44.07787,8.10891 137666,Chiesa Nuova,1768,42,107,IT,44.36976,9.31161 137691,Chiusanico,1768,42,107,IT,43.97303,7.99185 137694,Chiusavecchia,1768,42,107,IT,43.96726,7.98443 137707,Cicagna,1768,42,107,IT,44.40714,9.23917 137745,Cipressa,1768,42,107,IT,43.85205,7.93144 137753,Cisano,1768,42,107,IT,44.08565,8.14829 137779,Civezza,1768,42,107,IT,43.87982,7.95165 137842,Cogoleto,1768,42,107,IT,44.38996,8.64692 137845,Cogorno,1768,42,107,IT,44.32074,9.37117 137921,Colombiera-Molicciara,1768,42,107,IT,44.0875,10.01037 137972,Conscenti,1768,42,107,IT,44.34491,9.39537 138006,Coreglia Ligure,1768,42,107,IT,44.38775,9.26097 138080,Cosio di Arroscia,1768,42,107,IT,44.07743,7.83244 138086,Cosseria,1768,42,107,IT,44.36774,8.23485 138106,Costarainera,1768,42,107,IT,43.85477,7.94106 138159,Crocefieschi,1768,42,107,IT,44.58077,9.0236 138231,Davagna,1768,42,107,IT,44.46585,9.08666 138239,Dego,1768,42,107,IT,44.44455,8.30761 138240,Deiva Marina,1768,42,107,IT,44.21931,9.52064 138260,Diano Arentino,1768,42,107,IT,43.94962,8.04155 138261,Diano Castello,1768,42,107,IT,43.92423,8.06602 138262,Diano Marina,1768,42,107,IT,43.91088,8.08029 138263,Diano San Pietro,1768,42,107,IT,43.92953,8.07249 138279,Dolceacqua,1768,42,107,IT,43.84975,7.62373 138280,Dolcedo,1768,42,107,IT,43.90735,7.94943 138375,Erli,1768,42,107,IT,44.13719,8.1043 138455,Fascia,1768,42,107,IT,44.58255,9.22136 138458,Favale di Malvaro,1768,42,107,IT,44.45163,9.26 138464,Feglino,1768,42,107,IT,44.21849,8.32436 138487,Ferrada,1768,42,107,IT,44.42008,9.21016 138497,Ferriere,1768,42,107,IT,44.44302,9.13675 138536,Finale Ligure,1768,42,107,IT,44.16952,8.3436 138604,Fontanigorda,1768,42,107,IT,44.5454,9.30548 138691,Framura,1768,42,107,IT,44.20946,9.55399 138860,Garlenda,1768,42,107,IT,44.03325,8.09546 138899,Genoa,1768,42,107,IT,44.40478,8.94439 138999,Giustenice,1768,42,107,IT,44.17293,8.24305 139001,Giusvalla,1768,42,107,IT,44.44794,8.39415 139040,Gorreto,1768,42,107,IT,44.60485,9.29126 139200,Imperia,1768,42,107,IT,43.88917,8.03933 139243,Isola del Cantone,1768,42,107,IT,44.64783,8.95746 139253,Isolabona,1768,42,107,IT,43.88076,7.63993 139257,Isoverde,1768,42,107,IT,44.52941,8.86049 139305,La Spezia,1768,42,107,IT,44.103,9.82375 139330,Laigueglia,1768,42,107,IT,43.9759,8.15823 139408,Lavagna,1768,42,107,IT,44.3062,9.35383 139427,Le Grazie,1768,42,107,IT,44.06699,9.83392 139440,Leivi,1768,42,107,IT,44.35344,9.31074 139464,Lerici,1768,42,107,IT,44.07587,9.91121 139483,Levanto,1768,42,107,IT,44.17424,9.6167 139557,Loano,1768,42,107,IT,44.12777,8.25743 139615,Lorsica,1768,42,107,IT,44.43415,9.27677 139633,Lucinasco,1768,42,107,IT,43.96602,7.96005 139732,Magliolo,1768,42,107,IT,44.19253,8.24935 139752,Maissana,1768,42,107,IT,44.33675,9.53588 139768,Mallare,1768,42,107,IT,44.28934,8.29695 139795,Manesseno,1768,42,107,IT,44.47816,8.92784 139876,Marina di Andora,1768,42,107,IT,43.95353,8.1546 139965,Masone,1768,42,107,IT,44.50162,8.71891 139988,Massimino,1768,42,107,IT,44.29953,8.07134 140038,Mele,1768,42,107,IT,44.44573,8.74889 140062,Mendatica,1768,42,107,IT,44.07713,7.80564 140110,Mezzanego,1768,42,107,IT,44.38275,9.37667 140140,Mignanego,1768,42,107,IT,44.52748,8.91412 140152,Millesimo,1768,42,107,IT,44.36695,8.20354 140164,Mioglia,1768,42,107,IT,44.49214,8.41435 140187,Moconesi,1768,42,107,IT,44.42065,9.20977 140219,Molini,1768,42,107,IT,43.92594,7.93835 140220,Molini di Triora,1768,42,107,IT,43.98905,7.77463 140221,Molino Vecchio-Scapitola-Baio,1768,42,107,IT,44.55555,9.06816 140226,Molino-Pera,1768,42,107,IT,44.48803,8.30899 140277,Moneglia,1768,42,107,IT,44.23905,9.49081 140332,Montalto Ligure,1768,42,107,IT,43.92868,7.84491 140393,Montebruno,1768,42,107,IT,44.52577,9.24831 140460,Montegrosso Pian Latte,1768,42,107,IT,44.06631,7.81602 140525,Monterosso al Mare,1768,42,107,IT,44.14666,9.65494 140578,Montoggio,1768,42,107,IT,44.51699,9.04923 140690,Murialdo,1768,42,107,IT,44.31693,8.16815 140723,Nasino-Borgo,1768,42,107,IT,44.11363,8.03205 140737,Neirone,1768,42,107,IT,44.45482,9.19133 140799,Noli,1768,42,107,IT,44.20608,8.41458 140903,Olivetta San Michele,1768,42,107,IT,43.87872,7.51504 140929,Onzo,1768,42,107,IT,44.07013,8.05225 140945,Orco Feglino,1768,42,107,IT,44.22023,8.32455 140948,Orero,1768,42,107,IT,44.40835,9.26707 140989,Ortovero,1768,42,107,IT,44.05385,8.0995 141004,Osiglia,1768,42,107,IT,44.28145,8.20096 141014,Ospedaletti,1768,42,107,IT,43.80221,7.7183 141038,Osteria dei Cacciatori-Stella,1768,42,107,IT,44.43044,8.4712 141084,Padivarma,1768,42,107,IT,44.19648,9.76753 58251,Pallare,1768,42,107,IT,44.3277,8.27864 58379,Pedemonte,1768,42,107,IT,44.50307,8.92614 58425,Perinaldo,1768,42,107,IT,43.86689,7.67194 58511,Piana Battolla,1768,42,107,IT,44.19322,9.85345 58512,Piana Crixia,1768,42,107,IT,44.48504,8.30805 58538,Piano,1768,42,107,IT,44.3168,8.16639 58543,Piano di Follo,1768,42,107,IT,44.16375,9.86188 58578,Piccarello,1768,42,107,IT,44.48392,8.96595 58601,Pietra Ligure,1768,42,107,IT,44.1492,8.28206 58606,Pietrabruna,1768,42,107,IT,43.88927,7.90319 58654,Pieve di Teco,1768,42,107,IT,44.04706,7.91564 58655,Pieve di Zignago,1768,42,107,IT,44.2779,9.74573 58636,Pieve Ligure,1768,42,107,IT,44.37494,9.0941 58660,Pigna,1768,42,107,IT,43.93205,7.66123 58664,Pignone,1768,42,107,IT,44.1778,9.72327 58717,Pitelli,1768,42,107,IT,44.09458,9.8849 58740,Plodio,1768,42,107,IT,44.35394,8.24725 58818,Pompeiana,1768,42,107,IT,43.85297,7.88836 58868,Pontedassio,1768,42,107,IT,43.9383,8.01464 58889,Pontinvrea,1768,42,107,IT,44.44205,8.43623 58908,Pornassio,1768,42,107,IT,44.07053,7.86954 58945,Portofino,1768,42,107,IT,44.30349,9.20942 58950,Portovenere,1768,42,107,IT,44.05083,9.83431 59021,Prati,1768,42,107,IT,44.3829,9.37567 59051,Prelà Castello,1768,42,107,IT,43.94006,7.94409 59091,Propata,1768,42,107,IT,44.56487,9.18587 59134,Provincia di Genova,1768,42,107,IT,44.5,9.06667 59137,Provincia di Imperia,1768,42,107,IT,43.96667,7.78333 59139,Provincia di La Spezia,1768,42,107,IT,44.25,9.7 59174,Provincia di Savona,1768,42,107,IT,44.3,8.26667 59242,Quiliano,1768,42,107,IT,44.29215,8.41406 59284,Rapallo,1768,42,107,IT,44.3496,9.22796 59311,Recco,1768,42,107,IT,44.36227,9.14354 59348,Rezzo,1768,42,107,IT,44.02101,7.87199 59349,Rezzoaglio,1768,42,107,IT,44.52625,9.38827 59356,Rialto,1768,42,107,IT,44.22653,8.26135 59368,Riccò del Golfo,1768,42,107,IT,44.1541,9.76414 59395,Riomaggiore,1768,42,107,IT,44.09979,9.73869 59416,Riva Ligure,1768,42,107,IT,43.83883,7.87935 59528,Roccavignale,1768,42,107,IT,44.36124,8.19055 59544,Rocchetta di Vara,1768,42,107,IT,44.25059,9.75791 59538,Rocchetta Nervina,1768,42,107,IT,43.88988,7.60071 59587,Romito Magra,1768,42,107,IT,44.09838,9.9318 59605,Ronco Scrivia,1768,42,107,IT,44.61357,8.95042 59614,Rondanina,1768,42,107,IT,44.56325,9.21806 59650,Rossi,1768,42,107,IT,44.00029,8.05884 59651,Rossiglione,1768,42,107,IT,44.56358,8.66956 59670,Rovegno,1768,42,107,IT,44.57675,9.27917 59821,San Bartolomeo al Mare,1768,42,107,IT,43.92312,8.10482 59843,San Biagio della Cima,1768,42,107,IT,43.81784,7.65133 59904,San Fedele-Lusignano,1768,42,107,IT,44.04559,8.18078 59980,San Giovanni,1768,42,107,IT,44.39367,8.49701 60039,San Lorenzo,1768,42,107,IT,44.17302,8.24424 60044,San Lorenzo al Mare,1768,42,107,IT,43.85378,7.96406 60190,San Pietro dOlba,1768,42,107,IT,44.48762,8.58951 60220,San Remo,1768,42,107,IT,43.81725,7.7772 60230,San Salvatore,1768,42,107,IT,44.33098,9.35479 60255,San Terenzo,1768,42,107,IT,44.08543,9.89662 60451,Santa Margherita Ligure,1768,42,107,IT,44.33456,9.21204 60485,Santa Marta,1768,42,107,IT,44.50401,8.89268 60517,Santo Stefano al Mare,1768,42,107,IT,43.83855,7.89728 60518,Santo Stefano dAveto,1768,42,107,IT,44.54677,9.45325 60522,Santo Stefano di Magra,1768,42,107,IT,44.14891,9.92185 60563,Sarzana,1768,42,107,IT,44.11178,9.9622 60569,Sassello,1768,42,107,IT,44.48036,8.49375 60592,Savignone,1768,42,107,IT,44.56435,8.98726 60599,Savona,1768,42,107,IT,44.30905,8.47715 60651,Sciarborasca,1768,42,107,IT,44.40182,8.61541 60674,Seborga,1768,42,107,IT,43.8273,7.69585 60751,Serra Riccò,1768,42,107,IT,44.51071,8.93806 60792,Sesta Godano,1768,42,107,IT,44.29375,9.67535 60803,Sestri Levante,1768,42,107,IT,44.27317,9.39683 60912,Soldano,1768,42,107,IT,43.82954,7.65627 60957,Sori,1768,42,107,IT,44.37301,9.1047 61031,Spotorno,1768,42,107,IT,44.22638,8.41647 61057,Stazione-Fornola,1768,42,107,IT,44.12984,9.89159 61064,Stellanello,1768,42,107,IT,43.99993,8.06025 61140,Taggia,1768,42,107,IT,43.84612,7.85223 61259,Terzorio,1768,42,107,IT,43.85232,7.89835 61264,Testico,1768,42,107,IT,44.00553,8.02639 61277,Tiglieto,1768,42,107,IT,44.52324,8.61925 61297,Toirano,1768,42,107,IT,44.12732,8.20725 61405,Torriglia,1768,42,107,IT,44.51755,9.15811 61425,Tovo San Giacomo,1768,42,107,IT,44.17593,8.27045 61517,Tribogna,1768,42,107,IT,44.41655,9.19557 61533,Triora,1768,42,107,IT,43.99309,7.76369 61603,Urbe,1768,42,107,IT,44.48714,8.58615 61610,Uscio,1768,42,107,IT,44.41233,9.16227 61630,Vado Centro,1768,42,107,IT,44.26857,8.43225 61631,Vado Ligure,1768,42,107,IT,44.26913,8.43375 61699,Valle di Vado,1768,42,107,IT,44.26183,8.41397 61701,Vallebona,1768,42,107,IT,43.8122,7.66535 61703,Vallecrosia,1768,42,107,IT,43.78671,7.63902 61708,Valleggia,1768,42,107,IT,44.2808,8.42967 61749,Valzemola,1768,42,107,IT,44.36393,8.17376 61764,Varazze,1768,42,107,IT,44.36412,8.5963 61770,Varese Ligure,1768,42,107,IT,44.37687,9.59372 61779,Vasia,1768,42,107,IT,43.93268,7.95389 61813,Vendone,1768,42,107,IT,44.07693,8.07115 61825,Ventimiglia,1768,42,107,IT,43.78956,7.60872 61856,Vernazza,1768,42,107,IT,44.13501,9.68346 61884,Vessalico,1768,42,107,IT,44.04559,7.96013 61895,Vezzano Ligure,1768,42,107,IT,44.14144,9.88692 61897,Vezzi Portio,1768,42,107,IT,44.22933,8.36505 61997,Villa Faraldi,1768,42,107,IT,43.96843,8.08965 62055,Villafranca,1768,42,107,IT,44.03297,8.10525 62105,Villanova dAlbenga,1768,42,107,IT,44.04725,8.14336 62198,Vobbia,1768,42,107,IT,44.60125,9.03866 62263,Zoagli,1768,42,107,IT,44.33668,9.2668 62279,Zuccarello,1768,42,107,IT,44.10973,8.11814 135236,Abbadia Cerreto,1705,25,107,IT,45.31217,9.59416 135237,Abbadia Lariana,1705,25,107,IT,45.89947,9.33518 135241,Abbazia,1705,25,107,IT,45.748,9.84205 135243,Abbiategrasso,1705,25,107,IT,45.39821,8.91678 135266,Acquafredda,1705,25,107,IT,45.30697,10.41343 135268,Acquanegra Cremonese,1705,25,107,IT,45.16864,9.89074 135269,Acquanegra sul Chiese,1705,25,107,IT,45.16404,10.43323 135288,Adrara San Martino,1705,25,107,IT,45.70228,9.94896 135289,Adrara San Rocco,1705,25,107,IT,45.71578,9.95906 135291,Adro,1705,25,107,IT,45.62059,9.96159 135308,Agnadello,1705,25,107,IT,45.44516,9.55408 135311,Agnosine,1705,25,107,IT,45.64969,10.35267 135314,Agra,1705,25,107,IT,46.03668,8.76833 135316,Agrate Brianza,1705,25,107,IT,45.57431,9.34793 135322,Aicurzio,1705,25,107,IT,45.63998,9.41495 135336,Airuno,1705,25,107,IT,45.75352,9.42765 135340,Alagna,1705,25,107,IT,45.16917,8.88947 135349,Albairate,1705,25,107,IT,45.41957,8.93744 135352,Albano SantAlessandro,1705,25,107,IT,45.68762,9.76651 135356,Albaredo,1705,25,107,IT,46.10293,9.59046 135357,Albaredo Arnaboldi,1705,25,107,IT,45.10666,9.24296 135361,Albavilla,1705,25,107,IT,45.80038,9.18504 135367,Albese Con Cassano,1705,25,107,IT,45.79488,9.16364 135373,Albiate,1705,25,107,IT,45.65537,9.25035 135375,Albignano,1705,25,107,IT,45.50054,9.49299 135379,Albino,1705,25,107,IT,45.76444,9.79904 135380,Albiolo,1705,25,107,IT,45.80558,8.93924 135383,Albizzate,1705,25,107,IT,45.72698,8.80312 135384,Albonese,1705,25,107,IT,45.29285,8.70615 135385,Albosaggia,1705,25,107,IT,46.14749,9.85405 135388,Albuzzano,1705,25,107,IT,45.18719,9.27383 135401,Alfianello,1705,25,107,IT,45.26698,10.14817 135405,Algua,1705,25,107,IT,45.82584,9.72225 135423,Almè,1705,25,107,IT,45.73883,9.61558 135420,Almenno San Bartolomeo,1705,25,107,IT,45.73912,9.58082 135421,Almenno San Salvatore,1705,25,107,IT,45.74971,9.59699 135429,Alserio,1705,25,107,IT,45.77888,9.20014 135450,Alzano Lombardo,1705,25,107,IT,45.73681,9.72638 135452,Alzate Brianza,1705,25,107,IT,45.76978,9.18204 135464,Ambivere,1705,25,107,IT,45.71958,9.55015 135482,Andalo Valtellino,1705,25,107,IT,46.13599,9.47384 135495,Anfo,1705,25,107,IT,45.76575,10.49382 135496,Angera,1705,25,107,IT,45.77555,8.57861 135499,Angolo Terme,1705,25,107,IT,45.89168,10.14963 135505,Annicco,1705,25,107,IT,45.24344,9.87905 135507,Annone di Brianza,1705,25,107,IT,45.80216,9.33119 135512,Antegnate,1705,25,107,IT,45.48648,9.79146 135524,Anzano del Parco,1705,25,107,IT,45.77006,9.19752 135535,Appiano Gentile,1705,25,107,IT,45.73499,8.98103 135538,Aprica,1705,25,107,IT,46.1522,10.14884 135562,Arcene,1705,25,107,IT,45.57717,9.61461 135569,Arcisate,1705,25,107,IT,45.85578,8.86823 135573,Arconate,1705,25,107,IT,45.54134,8.84891 135574,Arcore,1705,25,107,IT,45.62675,9.32454 135579,Ardenno,1705,25,107,IT,46.16714,9.64729 135580,Ardesio,1705,25,107,IT,45.93613,9.9295 135581,Ardole San Marino,1705,25,107,IT,45.15633,10.10546 135586,Arena Po,1705,25,107,IT,45.09427,9.36312 135589,Arese,1705,25,107,IT,45.55048,9.07741 135591,Argegno,1705,25,107,IT,45.94218,9.12635 135609,Arlate,1705,25,107,IT,45.72363,9.44242 135612,Arluno,1705,25,107,IT,45.50344,8.94222 135625,Arosio,1705,25,107,IT,45.71933,9.20816 135636,Arsago Seprio,1705,25,107,IT,45.68764,8.73509 135644,Artogne,1705,25,107,IT,45.85437,10.16646 135647,Arzago dAdda,1705,25,107,IT,45.48137,9.56415 135661,Asola,1705,25,107,IT,45.22018,10.41214 135664,Assago,1705,25,107,IT,45.40887,9.12565 135667,Asso,1705,25,107,IT,45.86061,9.2673 135692,Aurogna,1705,25,107,IT,46.17147,9.35536 135701,Averara,1705,25,107,IT,45.98847,9.6316 135707,Aviatico,1705,25,107,IT,45.79758,9.77145 135719,Azzanello,1705,25,107,IT,45.31312,9.91973 135720,Azzano,1705,25,107,IT,45.98096,9.20284 135722,Azzano Mella,1705,25,107,IT,45.45458,10.11717 135723,Azzano San Paolo,1705,25,107,IT,45.65798,9.67305 135725,Azzate,1705,25,107,IT,45.77803,8.79414 135726,Azzio,1705,25,107,IT,45.88468,8.70853 135727,Azzone,1705,25,107,IT,45.97903,10.11284 135731,Badalasco,1705,25,107,IT,45.54217,9.55494 135736,Badia Pavese,1705,25,107,IT,45.12087,9.46866 135740,Badile,1705,25,107,IT,45.35061,9.12705 135751,Bagnaria,1705,25,107,IT,44.82726,9.12256 135756,Bagnatica,1705,25,107,IT,45.66088,9.78106 135767,Bagnolo Cremasco,1705,25,107,IT,45.36117,9.61296 135768,Bagnolo Mella,1705,25,107,IT,45.42765,10.18638 135770,Bagnolo San Vito,1705,25,107,IT,45.08892,10.87747 135776,Bagolino,1705,25,107,IT,45.82519,10.46183 135789,Ballabio,1705,25,107,IT,45.89629,9.42294 135809,Baraggia,1705,25,107,IT,45.85516,8.90885 135813,Baranzate,1705,25,107,IT,45.52717,9.11724 135814,Barasso,1705,25,107,IT,45.84048,8.75683 135824,Barbariga,1705,25,107,IT,45.40508,10.05437 135825,Barbata,1705,25,107,IT,45.47498,9.77736 135829,Barbianello,1705,25,107,IT,45.07571,9.20602 135839,Bardello,1705,25,107,IT,45.83597,8.69683 135844,Bareggio,1705,25,107,IT,45.47927,8.99789 135850,Bargano,1705,25,107,IT,45.24031,9.44689 135852,Barghe,1705,25,107,IT,45.67833,10.40775 135855,Bariano,1705,25,107,IT,45.51258,9.70366 135859,Barlassina,1705,25,107,IT,45.65558,9.12878 135861,Barni,1705,25,107,IT,45.91111,9.26592 135873,Barzago,1705,25,107,IT,45.75548,9.31424 135874,Barzana,1705,25,107,IT,45.7334,9.56842 135875,Barzanò,1705,25,107,IT,45.73257,9.3136 135876,Barzio,1705,25,107,IT,45.94349,9.46694 135879,Bascapè,1705,25,107,IT,45.30598,9.31397 135884,Basiano,1705,25,107,IT,45.58248,9.46325 135886,Basiglio,1705,25,107,IT,45.35917,9.15855 135891,Bassano Bresciano,1705,25,107,IT,45.32827,10.12869 135903,Bastida de Dossi,1705,25,107,IT,45.03976,8.92155 135902,Bastida Pancarana,1705,25,107,IT,45.08606,9.08515 135906,Battaglione-Bagnara,1705,25,107,IT,45.11638,10.06726 135910,Battuda,1705,25,107,IT,45.27466,9.07805 135917,Bedero,1705,25,107,IT,45.97776,8.71852 135918,Bedero Valcuvia,1705,25,107,IT,45.91088,8.79553 135919,Bedizzole,1705,25,107,IT,45.51038,10.42327 135921,Bedulita,1705,25,107,IT,45.79138,9.55165 135929,Belforte,1705,25,107,IT,45.08097,10.56156 135932,Belgioioso,1705,25,107,IT,45.15933,9.31347 135936,Bellagio,1705,25,107,IT,45.98772,9.26182 135937,Bellano,1705,25,107,IT,46.04426,9.30734 135943,Bellinzago Lombardo,1705,25,107,IT,45.54207,9.44595 135950,Bellusco,1705,25,107,IT,45.61958,9.41905 135970,Bema,1705,25,107,IT,46.10819,9.56414 135971,Bene Lario,1705,25,107,IT,46.02898,9.18414 135979,Berbenno,1705,25,107,IT,45.81478,9.57105 135980,Berbenno di Valtellina,1705,25,107,IT,46.16641,9.74734 135983,Beregazzo,1705,25,107,IT,45.77019,8.95869 135984,Beregazzo con Figliaro,1705,25,107,IT,45.78068,8.94414 135985,Bereguardo,1705,25,107,IT,45.25706,9.02735 135987,Bergamo,1705,25,107,IT,45.69601,9.66721 135991,Berlingo,1705,25,107,IT,45.50281,10.03436 135993,Bernareggio,1705,25,107,IT,45.64778,9.40505 135994,Bernate Ticino,1705,25,107,IT,45.47873,8.81834 136003,Bertonico,1705,25,107,IT,45.23307,9.66806 136007,Berzo,1705,25,107,IT,46.09287,10.33303 136008,Berzo Inferiore,1705,25,107,IT,45.93027,10.27696 136009,Berzo San Fermo,1705,25,107,IT,45.71938,9.90316 136010,Besana in Brianza,1705,25,107,IT,45.70235,9.2947 136011,Besano,1705,25,107,IT,45.88949,8.89068 136012,Besate,1705,25,107,IT,45.31296,8.96964 136015,Besnate,1705,25,107,IT,45.69858,8.76734 136016,Besozzo,1705,25,107,IT,45.84889,8.66517 136019,Bettola,1705,25,107,IT,45.33173,9.0208 136020,Bettola-Zeloforomagno,1705,25,107,IT,45.4308,9.3087 136032,Biandronno,1705,25,107,IT,45.81281,8.70882 136033,Bianzano,1705,25,107,IT,45.77309,9.91816 136034,Bianzone,1705,25,107,IT,46.18665,10.10934 136036,Biassono,1705,25,107,IT,45.62864,9.27124 136047,Bienno,1705,25,107,IT,45.93526,10.29232 136051,Binago,1705,25,107,IT,45.78218,8.92234 136052,Binasco,1705,25,107,IT,45.33102,9.0944 136056,Bione,1705,25,107,IT,45.67279,10.33887 136066,Bisuschio,1705,25,107,IT,45.87148,8.86843 136077,Bizzarone,1705,25,107,IT,45.83428,8.94274 136079,Blello,1705,25,107,IT,45.83778,9.57105 136081,Blessagno,1705,25,107,IT,45.95908,9.09754 136082,Blevio,1705,25,107,IT,45.84218,9.10514 136092,Bodio,1705,25,107,IT,45.78989,8.75146 136093,Bodio Lomnago,1705,25,107,IT,45.78867,8.75083 136095,Boffalora dAdda,1705,25,107,IT,45.35851,9.49628 136094,Boffalora Sopra Ticino,1705,25,107,IT,45.46735,8.83095 136103,Bolgare,1705,25,107,IT,45.63242,9.81412 136104,Bolladello-Peveranza,1705,25,107,IT,45.68649,8.84517 136105,Bollate,1705,25,107,IT,45.54647,9.12054 136114,Boltiere,1705,25,107,IT,45.60088,9.57845 136125,Bonate Sopra,1705,25,107,IT,45.68179,9.55956 136126,Bonate Sotto,1705,25,107,IT,45.66818,9.55865 136130,Bondeno,1705,25,107,IT,44.93569,10.86035 136131,Bondione,1705,25,107,IT,46.03541,10.00832 136136,Bonemerse,1705,25,107,IT,45.11367,10.07747 136149,Bordolano,1705,25,107,IT,45.2917,9.98731 136154,Borgarello,1705,25,107,IT,45.24066,9.14055 136159,Borghetto Lodigiano,1705,25,107,IT,45.21326,9.49946 136201,Borgo di Terzo,1705,25,107,IT,45.72078,9.89096 136179,Borgo Priolo,1705,25,107,IT,44.96632,9.14835 136182,Borgo San Giacomo,1705,25,107,IT,45.34798,9.96817 136183,Borgo San Giovanni,1705,25,107,IT,45.27787,9.43496 136187,Borgo San Siro,1705,25,107,IT,45.23506,8.91334 136202,Borgoforte,1705,25,107,IT,45.05185,10.75018 136204,Borgofranco sul Po,1705,25,107,IT,45.04658,11.2093 136214,Borgoratto Mormorolo,1705,25,107,IT,44.92889,9.19402 136217,Borgosatollo,1705,25,107,IT,45.4769,10.2403 136221,Bormio,1705,25,107,IT,46.46717,10.37008 136222,Bornasco,1705,25,107,IT,45.26657,9.21795 136223,Bornato,1705,25,107,IT,45.59368,10.0409 136224,Borno,1705,25,107,IT,45.94748,10.20243 136238,Boschetto,1705,25,107,IT,45.16591,10.02656 136242,Bosco Ex Parmigiano,1705,25,107,IT,45.10697,10.0387 136252,Bosisio Parini,1705,25,107,IT,45.80075,9.29 136253,Bosnasco,1705,25,107,IT,45.064,9.35692 136254,Bossico,1705,25,107,IT,45.82839,10.04506 136258,Botta,1705,25,107,IT,45.83222,9.53257 136259,Bottanuco,1705,25,107,IT,45.63931,9.50903 136261,Botticino,1705,25,107,IT,45.52972,10.31085 136268,Bovegno,1705,25,107,IT,45.79121,10.27012 136270,Bovezzo,1705,25,107,IT,45.58998,10.24184 136273,Bovisio-Masciago,1705,25,107,IT,45.61019,9.15301 136277,Bozzolo,1705,25,107,IT,45.10324,10.47988 136279,Bracca,1705,25,107,IT,45.82267,9.70784 136287,Brandico,1705,25,107,IT,45.45418,10.05267 136289,Branzi,1705,25,107,IT,46.00249,9.75935 136290,Braone,1705,25,107,IT,45.99011,10.34178 136291,Brebbia,1705,25,107,IT,45.82983,8.65042 136293,Bregano,1705,25,107,IT,45.82578,8.68773 136295,Bregnano,1705,25,107,IT,45.69778,9.05934 136298,Brembate,1705,25,107,IT,45.60468,9.5548 136299,Brembate di Sopra,1705,25,107,IT,45.71668,9.57945 136300,Brembilla,1705,25,107,IT,45.82154,9.59679 136301,Brembio,1705,25,107,IT,45.21234,9.57244 136302,Breme,1705,25,107,IT,45.12756,8.62564 136304,Brenna,1705,25,107,IT,45.74338,9.18657 136306,Brenno Useria,1705,25,107,IT,45.86148,8.87801 136307,Breno,1705,25,107,IT,45.95889,10.30648 136308,Brenta,1705,25,107,IT,45.89418,8.68373 136314,Brescia,1705,25,107,IT,45.53558,10.21472 136317,Bressana,1705,25,107,IT,45.07807,9.13119 136320,Bresso,1705,25,107,IT,45.53792,9.18921 136323,Brezzo di Bedero,1705,25,107,IT,45.97838,8.71743 136328,Brienno,1705,25,107,IT,45.91175,9.13142 136333,Brignano Gera dAdda,1705,25,107,IT,45.54324,9.64424 136336,Brinzio,1705,25,107,IT,45.88914,8.78683 136338,Brione,1705,25,107,IT,45.64228,10.14846 136340,Briosco,1705,25,107,IT,45.71008,9.24064 136342,Brissago-Valtravaglia,1705,25,107,IT,45.94921,8.7459 136344,Brivio,1705,25,107,IT,45.73725,9.44249 136351,Brongio,1705,25,107,IT,45.76535,9.31251 136352,Broni,1705,25,107,IT,45.06394,9.25993 136360,Brozzo,1705,25,107,IT,45.72019,10.23092 136362,Brugherio,1705,25,107,IT,45.55301,9.29907 136367,Brumano,1705,25,107,IT,45.85463,9.50064 136369,Brunate,1705,25,107,IT,45.82096,9.09869 136370,Brunello,1705,25,107,IT,45.76497,8.79533 136373,Brusaporto,1705,25,107,IT,45.6714,9.76041 136376,Brusimpiano,1705,25,107,IT,45.94468,8.88953 136382,Bubbiano,1705,25,107,IT,45.32727,9.01455 136387,Buccinasco,1705,25,107,IT,45.40703,9.1083 136394,Buffalora-Bettole,1705,25,107,IT,45.49681,10.27518 136396,Buglio in Monte,1705,25,107,IT,46.18336,9.67542 136398,Buguggiate,1705,25,107,IT,45.78227,8.81063 136400,Bulciago,1705,25,107,IT,45.75058,9.28534 136401,Bulgarograsso,1705,25,107,IT,45.74708,9.00644 136402,Bulgorello,1705,25,107,IT,45.72433,9.05524 136409,Burago di Molgora,1705,25,107,IT,45.59648,9.38165 136422,Buscate,1705,25,107,IT,45.54353,8.81297 136424,Buscoldo,1705,25,107,IT,45.0943,10.69581 136426,Busnago,1705,25,107,IT,45.61648,9.46375 136428,Bussero,1705,25,107,IT,45.53407,9.37205 136434,Busto Arsizio,1705,25,107,IT,45.61128,8.84914 136435,Busto Garolfo,1705,25,107,IT,45.54809,8.88298 136445,Ca dAndrea,1705,25,107,IT,45.11957,10.27748 136449,Cabiate,1705,25,107,IT,45.67418,9.17374 136453,Cadegliano-Viconago,1705,25,107,IT,45.95948,8.84343 136456,Cadenabbia,1705,25,107,IT,45.98861,9.23615 136461,Cadorago-Caslino al Piano,1705,25,107,IT,45.72728,9.03784 136462,Cadrezzate,1705,25,107,IT,45.79927,8.64333 136469,Caglio,1705,25,107,IT,45.87146,9.23719 136472,Cagno,1705,25,107,IT,45.81108,8.91733 136478,Caino,1705,25,107,IT,45.60939,10.31317 136479,Caiolo,1705,25,107,IT,46.14999,9.81455 136482,Cairate,1705,25,107,IT,45.6875,8.86807 136502,Calchera-Frontale,1705,25,107,IT,45.83415,9.51155 136506,Calcinate,1705,25,107,IT,45.61975,9.79843 136507,Calcinato,1705,25,107,IT,45.45739,10.40949 136509,Calcio,1705,25,107,IT,45.50826,9.84902 136510,Calco,1705,25,107,IT,45.72418,9.41255 136523,Caleppio,1705,25,107,IT,45.43436,9.3825 136565,Calò,1705,25,107,IT,45.67908,9.26309 136535,Calolziocorte,1705,25,107,IT,45.79538,9.43765 136539,Calozzo,1705,25,107,IT,46.10055,9.27531 136548,Calusco dAdda,1705,25,107,IT,45.68841,9.47109 136550,Calvagese della Riviera,1705,25,107,IT,45.53922,10.44605 136552,Calvatone,1705,25,107,IT,45.12697,10.44057 136555,Calvenzano,1705,25,107,IT,45.49621,9.59953 136560,Calvignano,1705,25,107,IT,44.98306,9.16876 136561,Calvignasco,1705,25,107,IT,45.32597,9.02775 136562,Calvisano,1705,25,107,IT,45.34529,10.34266 136568,Camairago,1705,25,107,IT,45.20527,9.72746 136572,Cambiago,1705,25,107,IT,45.58035,9.43528 136580,Camerata Cornello,1705,25,107,IT,45.89956,9.65569 136592,Camisano,1705,25,107,IT,45.44484,9.74526 136595,Camnago-Boscone,1705,25,107,IT,45.80472,8.97934 136598,Camoneone,1705,25,107,IT,45.78547,9.5691 136604,Campagnola Cremasca,1705,25,107,IT,45.39847,9.66946 136610,Camparada,1705,25,107,IT,45.65489,9.32328 136622,Campione,1705,25,107,IT,45.96818,8.97181 136623,Campitello,1705,25,107,IT,45.0875,10.60632 136648,Campodolcino,1705,25,107,IT,46.4029,9.35185 136653,Campofiorenzo-California,1705,25,107,IT,45.66768,9.31708 136682,Campospinoso,1705,25,107,IT,45.09403,9.24585 136701,Candia Lomellina,1705,25,107,IT,45.1767,8.5955 136707,Canegrate,1705,25,107,IT,45.56825,8.92689 136722,Canneto,1705,25,107,IT,45.05116,9.28101 136723,Canneto Pavese,1705,25,107,IT,45.05046,9.27876 136724,Canneto sullOglio,1705,25,107,IT,45.15163,10.38282 136729,Canonica,1705,25,107,IT,45.65587,9.28749 136730,Canonica dAdda,1705,25,107,IT,45.57568,9.54165 136734,Canova-San Zeno,1705,25,107,IT,45.72116,9.4003 136741,Cantalupo,1705,25,107,IT,45.57813,8.98261 136746,Cantello,1705,25,107,IT,45.82248,8.89593 136751,Cantù,1705,25,107,IT,45.74096,9.13084 136753,Canzo,1705,25,107,IT,45.84867,9.27063 136764,Capergnanica,1705,25,107,IT,45.33869,9.64475 136768,Capiago-Intimiano-Olmeda,1705,25,107,IT,45.76898,9.12764 136779,Capo di Ponte,1705,25,107,IT,46.03,10.34283 136785,Caponago,1705,25,107,IT,45.56647,9.37585 136789,Capovalle,1705,25,107,IT,45.75339,10.54447 136791,Cappella Cantone,1705,25,107,IT,45.24657,9.83826 136793,Cappella de Picenardi,1705,25,107,IT,45.15857,10.22998 136795,Cappelletta,1705,25,107,IT,45.10514,10.77847 136800,Capralba,1705,25,107,IT,45.44352,9.64417 136812,Capriano,1705,25,107,IT,45.72298,9.25526 136813,Capriano del Colle,1705,25,107,IT,45.47478,10.13227 136815,Capriate San Gervasio,1705,25,107,IT,45.61281,9.52974 136821,Caprino,1705,25,107,IT,45.74903,9.49235 136823,Capriolo,1705,25,107,IT,45.63333,9.93189 136838,Carate Brianza,1705,25,107,IT,45.67574,9.23723 136839,Carate Urio,1705,25,107,IT,45.87178,9.12214 136840,Caravaggio,1705,25,107,IT,45.49627,9.64165 136841,Caravate,1705,25,107,IT,45.87862,8.65431 136846,Carbonara al Ticino,1705,25,107,IT,45.16374,9.0649 136848,Carbonara di Po,1705,25,107,IT,45.03537,11.22923 136849,Carbonate,1705,25,107,IT,45.68507,8.93814 136858,Cardano al Campo,1705,25,107,IT,45.64887,8.76933 136866,Carenno,1705,25,107,IT,45.80155,9.46301 136878,Carimate,1705,25,107,IT,45.70659,9.10751 136885,Carlazzo,1705,25,107,IT,46.04222,9.16498 136894,Carnago,1705,25,107,IT,45.72207,8.83423 136895,Carnate,1705,25,107,IT,45.64843,9.37813 136896,Carobbio,1705,25,107,IT,45.66424,9.83027 136897,Carobbio degli Angeli,1705,25,107,IT,45.66518,9.82916 136899,Carona,1705,25,107,IT,46.02149,9.78494 136901,Caronno Pertusella,1705,25,107,IT,45.59777,9.04634 136902,Caronno Varesino,1705,25,107,IT,45.73577,8.83173 136910,Carpenedolo,1705,25,107,IT,45.36169,10.43124 136914,Carpiano,1705,25,107,IT,45.34027,9.27401 136943,Carugate,1705,25,107,IT,45.54983,9.34044 136944,Carugo,1705,25,107,IT,45.70848,9.19684 136946,Carvico,1705,25,107,IT,45.70193,9.4858 136947,Carzago Riviera,1705,25,107,IT,45.5244,10.46052 136949,Casa Ponte,1705,25,107,IT,44.87777,9.16509 136969,Casalbuttano,1705,25,107,IT,45.25187,9.96167 136975,Casale Cremasco,1705,25,107,IT,45.43187,9.71416 136976,Casale Litta,1705,25,107,IT,45.76787,8.74133 136985,Casaletto Ceredano,1705,25,107,IT,45.31831,9.61701 136989,Casaletto di Sopra,1705,25,107,IT,45.41918,9.78256 136986,Casaletto Lodigiano,1705,25,107,IT,45.29337,9.36194 136988,Casaletto Vaprio,1705,25,107,IT,45.40817,9.62876 136998,Casalmaggiore,1705,25,107,IT,44.98981,10.42055 136999,Casalmaiocco,1705,25,107,IT,45.35238,9.37088 137000,Casalmorano,1705,25,107,IT,45.28766,9.8986 137001,Casalmoro,1705,25,107,IT,45.26115,10.41118 137005,Casaloldo,1705,25,107,IT,45.25436,10.47691 137006,Casalpusterlengo,1705,25,107,IT,45.17921,9.64834 137007,Casalromano,1705,25,107,IT,45.19808,10.3664 137014,Casalzuigno,1705,25,107,IT,45.90508,8.70883 137024,Casanova Lonati,1705,25,107,IT,45.09446,9.21345 137032,Casargo,1705,25,107,IT,46.0395,9.38717 137033,Casarile,1705,25,107,IT,45.31683,9.10383 137037,Casasco Intelvi,1705,25,107,IT,45.94368,9.07574 137038,Casate,1705,25,107,IT,45.49203,8.82776 137039,Casatenovo,1705,25,107,IT,45.69514,9.31338 137040,Casatisma,1705,25,107,IT,45.04569,9.13099 137043,Casazza,1705,25,107,IT,45.74855,9.90627 137046,Casciago,1705,25,107,IT,45.83248,8.78333 137049,Cascina Elisa,1705,25,107,IT,45.60425,8.79978 137053,Casco,1705,25,107,IT,45.71078,9.82483 137055,Case Nuove,1705,25,107,IT,45.60998,10.39416 137056,Casei,1705,25,107,IT,45.00756,8.92675 137060,Caselle Landi,1705,25,107,IT,45.10257,9.79557 137061,Caselle Lurani,1705,25,107,IT,45.28044,9.36016 137064,Caseo,1705,25,107,IT,44.94369,9.27504 137073,Casirate dAdda,1705,25,107,IT,45.49535,9.56932 137074,Caslino dErba,1705,25,107,IT,45.83899,9.22554 137075,Casnate Con Bernate,1705,25,107,IT,45.75628,9.07264 137076,Casnigo,1705,25,107,IT,45.81307,9.86878 137084,Casone,1705,25,107,IT,45.49818,8.87635 137086,Casorate Primo,1705,25,107,IT,45.31142,9.01703 137087,Casorate Sempione,1705,25,107,IT,45.67079,8.74513 137088,Casorezzo,1705,25,107,IT,45.52265,8.90186 137092,Caspoggio,1705,25,107,IT,46.26424,9.86165 137094,Cassago Brianza,1705,25,107,IT,45.73808,9.29344 137100,Cassano dAdda,1705,25,107,IT,45.52637,9.51528 137097,Cassano Magnago,1705,25,107,IT,45.67206,8.82691 137099,Cassano Valcuvia,1705,25,107,IT,45.93238,8.76843 137104,Cassiglio,1705,25,107,IT,45.96679,9.61215 137107,Cassina de Pecchi,1705,25,107,IT,45.51637,9.35975 137105,Cassina Rizzardi,1705,25,107,IT,45.75228,9.02454 137106,Cassina Valsassina,1705,25,107,IT,45.93209,9.47894 137111,Cassinetta di Lugagnano,1705,25,107,IT,45.42247,8.90604 137113,Cassino dAlberi,1705,25,107,IT,45.39208,9.3909 137115,Cassolnovo,1705,25,107,IT,45.36106,8.8123 137124,Castana,1705,25,107,IT,45.02676,9.27246 137126,Castano Primo,1705,25,107,IT,45.55175,8.77562 137127,Casteggio,1705,25,107,IT,45.01396,9.12528 137128,Castegnato,1705,25,107,IT,45.56129,10.11449 137163,Castel dArio,1705,25,107,IT,45.18798,10.97449 137138,Castel Gabbiano,1705,25,107,IT,45.46847,9.71765 137141,Castel Goffredo,1705,25,107,IT,45.29403,10.473 137145,Castel Mella,1705,25,107,IT,45.49913,10.14553 137149,Castel Rozzone,1705,25,107,IT,45.55228,9.61985 137177,Castelbelforte,1705,25,107,IT,45.21208,10.89249 137186,Castelcovati,1705,25,107,IT,45.50198,9.94596 137191,Casteldidone,1705,25,107,IT,45.07068,10.40581 137219,Castellanza,1705,25,107,IT,45.61079,8.89616 137226,Castelleone,1705,25,107,IT,45.29579,9.76091 137230,Castelletto,1705,25,107,IT,45.3315,10.23335 137241,Castelletto di Branduzzo,1705,25,107,IT,45.06936,9.09845 137235,Castelletto Po,1705,25,107,IT,45.06903,9.10056 137243,Castelli Calepio,1705,25,107,IT,45.61316,9.8854 137251,Castello,1705,25,107,IT,45.56954,10.50861 137252,Castello Cabiaglio,1705,25,107,IT,45.89358,8.75763 137255,Castello dAgogna,1705,25,107,IT,45.23456,8.68714 137258,Castello dellAcqua,1705,25,107,IT,46.14549,10.01582 137260,Castello di Brianza,1705,25,107,IT,45.75928,9.34535 137263,Castellucchio,1705,25,107,IT,45.15038,10.64875 137269,Castelmarte,1705,25,107,IT,45.83238,9.23304 137276,Castelnovetto,1705,25,107,IT,45.25438,8.61142 137284,Castelnuovo Bocca dAdda,1705,25,107,IT,45.11147,9.86359 137286,Castelnuovo Bozzente,1705,25,107,IT,45.76458,8.94354 137315,Castelseprio,1705,25,107,IT,45.71372,8.86161 137320,Castelveccana,1705,25,107,IT,45.94798,8.66633 137325,Castelverde,1705,25,107,IT,45.18753,9.99693 137332,Castelvisconti,1705,25,107,IT,45.30537,9.94107 137334,Castenedolo,1705,25,107,IT,45.4743,10.29131 137348,Castiglione dAdda,1705,25,107,IT,45.21702,9.69279 137349,Castiglione dIntelvi,1705,25,107,IT,45.95751,9.08987 137355,Castiglione delle Stiviere,1705,25,107,IT,45.3902,10.48619 137344,Castiglione Olona,1705,25,107,IT,45.75256,8.87278 137363,Castione,1705,25,107,IT,46.17287,9.80032 137364,Castione Andevenno,1705,25,107,IT,46.17279,9.80025 137365,Castione della Presolana,1705,25,107,IT,45.91471,10.0554 137368,Castiraga Vidardo,1705,25,107,IT,45.25727,9.40456 137369,Casto,1705,25,107,IT,45.69489,10.32117 137371,Castrezzato,1705,25,107,IT,45.51128,9.98086 137375,Castro,1705,25,107,IT,45.80378,10.0659 137383,Castronno,1705,25,107,IT,45.74793,8.81442 137390,Cataeggio,1705,25,107,IT,46.21447,9.63781 137402,Cava Manara,1705,25,107,IT,45.14014,9.10774 137405,Cavacurta,1705,25,107,IT,45.18977,9.74186 137414,Cavallasca,1705,25,107,IT,45.80958,9.03284 137422,Cavargna,1705,25,107,IT,46.09068,9.11205 137423,Cavaria Con Premezzo,1705,25,107,IT,45.69247,8.80299 137433,Cavenago dAdda,1705,25,107,IT,45.28253,9.59872 137434,Cavenago di Brianza,1705,25,107,IT,45.58297,9.41261 137435,Cavernago,1705,25,107,IT,45.62528,9.76556 137443,Cavriana,1705,25,107,IT,45.34766,10.59598 137445,Cazzago Brabbia,1705,25,107,IT,45.79588,8.73483 137446,Cazzago San Martino-Calino,1705,25,107,IT,45.58434,10.02328 137448,Cazzano SantAndrea,1705,25,107,IT,45.81118,9.88493 137453,Cecima,1705,25,107,IT,44.85066,9.08036 137455,Cedegolo,1705,25,107,IT,46.07398,10.35141 137456,Cedessano,1705,25,107,IT,45.68858,10.43395 137457,Cedrasco,1705,25,107,IT,46.14932,9.76803 137467,Cella Dati,1705,25,107,IT,45.09527,10.22148 137472,Cellatica,1705,25,107,IT,45.58198,10.18017 137488,Cenate di Sotto,1705,25,107,IT,45.69898,9.82636 137487,Cenate Sopra,1705,25,107,IT,45.71298,9.82216 137491,Cene,1705,25,107,IT,45.78062,9.82657 137507,Cepina,1705,25,107,IT,46.43609,10.35713 137515,Cerano dIntelvi,1705,25,107,IT,45.94447,9.08767 137516,Ceranova,1705,25,107,IT,45.26027,9.24315 137526,Cercino,1705,25,107,IT,46.15809,9.50814 137533,Cerello-Battuello,1705,25,107,IT,45.44716,8.93105 137537,Ceresara,1705,25,107,IT,45.26228,10.56958 137538,Cerese,1705,25,107,IT,45.11814,10.78877 137542,Cerete Alto,1705,25,107,IT,45.86729,9.99466 137543,Ceretto Lomellina,1705,25,107,IT,45.24496,8.67244 137545,Cergnago,1705,25,107,IT,45.19826,8.77164 137548,Ceriano Laghetto,1705,25,107,IT,45.62928,9.08017 137552,Cerlongo,1705,25,107,IT,45.27862,10.64985 137553,Cermenate,1705,25,107,IT,45.70198,9.08361 137556,Cernobbio,1705,25,107,IT,45.84307,9.07194 137557,Cernusco Lombardone,1705,25,107,IT,45.69088,9.39925 137558,Cernusco sul Naviglio,1705,25,107,IT,45.52526,9.33297 137575,Cerro al Lambro,1705,25,107,IT,45.32997,9.33905 137572,Cerro Maggiore,1705,25,107,IT,45.59366,8.95428 137580,Certosa di Pavia,1705,25,107,IT,45.2542,9.1329 137587,Cerveno,1705,25,107,IT,46.00176,10.3283 137589,Cervesina,1705,25,107,IT,45.06054,9.01676 137593,Cervignano dAdda,1705,25,107,IT,45.37387,9.42405 137602,Cesana Brianza,1705,25,107,IT,45.81678,9.29954 137605,Cesano Boscone,1705,25,107,IT,45.44207,9.09445 137606,Cesano Maderno,1705,25,107,IT,45.62915,9.15189 137610,Cesate,1705,25,107,IT,45.59587,9.07574 137621,Ceto,1705,25,107,IT,46.00259,10.35196 137626,Cevo,1705,25,107,IT,46.08089,10.36952 137652,Chiaravalle,1705,25,107,IT,45.41731,9.23985 137654,Chiari,1705,25,107,IT,45.53763,9.92699 137660,Chiavenna,1705,25,107,IT,46.32063,9.39816 137664,Chiesa,1705,25,107,IT,45.69011,9.91282 137668,Chiesa in Valmalenco,1705,25,107,IT,46.26715,9.84905 137674,Chieve,1705,25,107,IT,45.34047,9.61646 137676,Chignolo dIsola,1705,25,107,IT,45.66758,9.52765 137675,Chignolo Po,1705,25,107,IT,45.14817,9.48156 137682,Chiuduno,1705,25,107,IT,45.65068,9.84946 137685,Chiuro,1705,25,107,IT,46.16722,9.98584 137712,Cicognolo,1705,25,107,IT,45.16762,10.19407 137717,Cigognola,1705,25,107,IT,45.03276,9.24486 137718,Cigole,1705,25,107,IT,45.3076,10.18977 137719,Cilavegna,1705,25,107,IT,45.31067,8.74469 137721,Cimbergo,1705,25,107,IT,46.0241,10.36566 137722,Cimbro,1705,25,107,IT,45.7357,8.7205 137731,Cingia de Botti,1705,25,107,IT,45.08507,10.27548 137734,Cinisello Balsamo,1705,25,107,IT,45.55823,9.21495 137736,Cino,1705,25,107,IT,46.15843,9.48534 137748,Cirimido,1705,25,107,IT,45.69978,9.01254 137754,Cisano Bergamasco,1705,25,107,IT,45.742,9.47146 137755,Ciserano,1705,25,107,IT,45.58792,9.60115 137756,Cislago,1705,25,107,IT,45.65928,8.97272 137757,Cisliano,1705,25,107,IT,45.44371,8.98695 137775,Città metropolitana di Milano,1705,25,107,IT,45.45186,9.14586 137770,Cittiglio,1705,25,107,IT,45.89587,8.66551 137777,Civate,1705,25,107,IT,45.82808,9.34294 137778,Civesio,1705,25,107,IT,45.39556,9.2668 137784,Cividate al Piano,1705,25,107,IT,45.55465,9.83024 137783,Cividate Camuno,1705,25,107,IT,45.94087,10.2661 137805,Cizzago-Comezzano,1705,25,107,IT,45.4688,9.95816 137813,Clivio,1705,25,107,IT,45.86278,8.93083 137816,Clusane,1705,25,107,IT,45.66247,10.00005 137817,Clusone,1705,25,107,IT,45.88663,9.94646 137822,Coccaglio,1705,25,107,IT,45.56399,9.97224 137825,Cocquio,1705,25,107,IT,45.86288,8.68823 137830,Codevilla,1705,25,107,IT,44.96353,9.05773 137834,Codogna-Cardano,1705,25,107,IT,46.02769,9.20992 137835,Codogno,1705,25,107,IT,45.16187,9.70216 137840,Cogliate,1705,25,107,IT,45.64597,9.07884 137850,Colere,1705,25,107,IT,45.97522,10.08356 137852,Colico Piano,1705,25,107,IT,46.13205,9.37714 137853,Colla-Muggiasca,1705,25,107,IT,45.98343,9.62277 137859,Colle Brianza,1705,25,107,IT,45.76238,9.36435 137874,Collebeato,1705,25,107,IT,45.58118,10.21017 137904,Collio,1705,25,107,IT,45.81088,10.33511 137913,Cologna-Caraverio,1705,25,107,IT,45.75611,9.34579 137914,Cologne,1705,25,107,IT,45.57862,9.9418 137916,Cologno al Serio,1705,25,107,IT,45.57604,9.70892 137915,Cologno Monzese,1705,25,107,IT,45.53004,9.27795 137919,Colombaro-Timoline,1705,25,107,IT,45.64405,9.99413 137924,Colonno,1705,25,107,IT,45.95768,9.15294 137925,Colorina,1705,25,107,IT,46.15369,9.72935 137928,Colturano,1705,25,107,IT,45.38151,9.33443 137931,Colzate,1705,25,107,IT,45.81719,9.85615 137933,Comabbio,1705,25,107,IT,45.77359,8.67833 137936,Comazzo,1705,25,107,IT,45.4419,9.46278 137939,Comerio,1705,25,107,IT,45.84191,8.74207 137945,Commessaggio,1705,25,107,IT,45.03754,10.54535 137947,Como,1705,25,107,IT,45.80819,9.0832 137950,Comun Nuovo,1705,25,107,IT,45.62291,9.662 137957,Concesio,1705,25,107,IT,45.60518,10.21697 137961,Concorezzo,1705,25,107,IT,45.58854,9.33393 137967,Confienza,1705,25,107,IT,45.33148,8.55886 137976,Consiglio di Rumo,1705,25,107,IT,46.14299,9.29334 137987,Copiano,1705,25,107,IT,45.1975,9.32462 137990,Corana,1705,25,107,IT,45.06289,8.96952 137994,Corbetta,1705,25,107,IT,45.46723,8.91867 138009,Corgeno,1705,25,107,IT,45.74588,8.68797 138020,Cormano,1705,25,107,IT,45.54917,9.15964 138022,Corna Imagna,1705,25,107,IT,45.83068,9.54485 138024,Cornalba,1705,25,107,IT,45.84927,9.74593 138025,Cornale,1705,25,107,IT,45.04344,8.91096 138026,Cornaredo,1705,25,107,IT,45.50128,9.02681 138027,Cornate dAdda,1705,25,107,IT,45.62811,9.47378 138031,Corneno-Galliano-Carella Mariaga,1705,25,107,IT,45.81667,9.26667 138033,Corno Giovine,1705,25,107,IT,45.13415,9.75766 138035,Cornovecchio,1705,25,107,IT,45.13667,9.79937 138040,Correzzana,1705,25,107,IT,45.66658,9.30755 138042,Corrido,1705,25,107,IT,46.04758,9.13554 138048,Corsico,1705,25,107,IT,45.43099,9.11093 138057,Corte de Cortesi,1705,25,107,IT,45.27265,10.00738 138058,Corte de Cortesi con Cignone,1705,25,107,IT,45.27317,10.00787 138059,Corte de Frati,1705,25,107,IT,45.21847,10.10187 138056,Corte Franca,1705,25,107,IT,45.62998,9.98846 138062,Corteno Golgi,1705,25,107,IT,46.1662,10.24346 138063,Cortenova,1705,25,107,IT,46.00029,9.38454 138064,Cortenuova,1705,25,107,IT,45.53898,9.78786 138065,Corteolona,1705,25,107,IT,45.15787,9.37215 138075,Corvino San Quirico,1705,25,107,IT,45.01086,9.16245 138076,Corzano,1705,25,107,IT,45.44378,10.00737 138079,Cosio Valtellino,1705,25,107,IT,46.13509,9.55164 138097,Costa de Nobili,1705,25,107,IT,45.13217,9.37886 138098,Costa di Mezzate,1705,25,107,IT,45.66278,9.79556 138100,Costa di Serina,1705,25,107,IT,45.83268,9.74165 138091,Costa Lambro,1705,25,107,IT,45.68531,9.24728 138092,Costa Masnaga,1705,25,107,IT,45.76963,9.27632 138093,Costa SantAbramo,1705,25,107,IT,45.16667,9.96667 138094,Costa Valle Imagna,1705,25,107,IT,45.8028,9.50413 138096,Costa Volpino,1705,25,107,IT,45.82768,10.10076 138101,Costa-Barco,1705,25,107,IT,45.58337,10.03907 138117,Covo,1705,25,107,IT,45.49906,9.77068 138120,Cozzo,1705,25,107,IT,45.19213,8.61112 138122,Crandola Valsassina,1705,25,107,IT,46.02329,9.37914 138130,Credaro,1705,25,107,IT,45.66058,9.93106 138131,Credera,1705,25,107,IT,45.30301,9.65498 138132,Crema,1705,25,107,IT,45.36264,9.68176 138133,Cremella,1705,25,107,IT,45.73858,9.30064 138134,Cremenaga,1705,25,107,IT,45.98938,8.80333 138135,Cremeno,1705,25,107,IT,45.93492,9.47099 138136,Cremia,1705,25,107,IT,46.08649,9.27114 138138,Cremona,1705,25,107,IT,45.13325,10.02129 138139,Cremosano,1705,25,107,IT,45.39467,9.63826 138145,Crespiatica,1705,25,107,IT,45.35136,9.57659 138164,Crone,1705,25,107,IT,45.73741,10.47503 138169,Crosio della Valle,1705,25,107,IT,45.75997,8.77043 138171,Crotta dAdda,1705,25,107,IT,45.15888,9.85684 138175,Crugnola,1705,25,107,IT,45.72955,8.74525 138176,Cuasso al Monte,1705,25,107,IT,45.91478,8.87923 138177,Cuasso al Piano,1705,25,107,IT,45.89454,8.87951 138180,Cucciago,1705,25,107,IT,45.73928,9.09294 138183,Cuggiono,1705,25,107,IT,45.50683,8.8155 138184,Cugliate-Fabiasco,1705,25,107,IT,45.94568,8.81863 138188,Cumignano sul Naviglio,1705,25,107,IT,45.35459,9.83621 138189,Cunardo,1705,25,107,IT,45.93428,8.80773 138191,Cunettone-Villa,1705,25,107,IT,45.58789,10.51756 138198,Cura Carpignano,1705,25,107,IT,45.21247,9.25565 138201,Curiglia,1705,25,107,IT,46.06065,8.80484 138204,Curno,1705,25,107,IT,45.68876,9.60872 138210,Cusago,1705,25,107,IT,45.44997,9.03744 138211,Cusano,1705,25,107,IT,45.55187,9.18373 138214,Cusino,1705,25,107,IT,46.07489,9.15264 138215,Cusio,1705,25,107,IT,45.99089,9.60175 138220,Cuveglio,1705,25,107,IT,45.90608,8.73333 138221,Cuvio,1705,25,107,IT,45.89618,8.73413 138224,Dairago,1705,25,107,IT,45.5658,8.86265 138225,Dalmine,1705,25,107,IT,45.64933,9.60617 138229,Darfo Boario Terme,1705,25,107,IT,45.8915,10.18879 138232,Daverio,1705,25,107,IT,45.77797,8.77343 138234,Dazio,1705,25,107,IT,46.16129,9.60064 138241,Delebio,1705,25,107,IT,46.13648,9.46157 138245,Dello,1705,25,107,IT,45.41916,10.07621 138251,Derovere,1705,25,107,IT,45.10997,10.24798 138253,Dervio,1705,25,107,IT,46.07696,9.30659 138256,Desenzano del Garda,1705,25,107,IT,45.47127,10.53559 138257,Desio,1705,25,107,IT,45.61831,9.20249 138272,Dizzasco-Biazzeno,1705,25,107,IT,45.94378,9.09974 138286,Dolzago,1705,25,107,IT,45.76698,9.33934 138288,Domaso,1705,25,107,IT,46.15284,9.3315 138298,Dongo,1705,25,107,IT,46.12999,9.28169 138308,Dorio,1705,25,107,IT,46.1002,9.31883 138310,Dorno,1705,25,107,IT,45.15352,8.95076 138313,Dosimo,1705,25,107,IT,45.18469,10.10362 138314,Dosolo,1705,25,107,IT,44.95259,10.6355 138315,Dossena,1705,25,107,IT,45.88029,9.69675 138317,Dosso del Liro,1705,25,107,IT,46.16399,9.27294 138318,Dosso-Ville,1705,25,107,IT,45.75251,10.27397 138323,Dovera,1705,25,107,IT,45.36428,9.54445 138329,Dresano,1705,25,107,IT,45.37297,9.35785 138330,Drizzona,1705,25,107,IT,45.14217,10.35028 138337,Dubino,1705,25,107,IT,46.16705,9.43049 138342,Dumenza,1705,25,107,IT,46.02088,8.78674 138343,Duno,1705,25,107,IT,45.91398,8.73763 138344,Duomo,1705,25,107,IT,45.5324,10.02118 138349,Edolo,1705,25,107,IT,46.17799,10.33322 138353,Ello,1705,25,107,IT,45.78568,9.36534 138357,Endine,1705,25,107,IT,45.7898,9.97561 138362,Entratico,1705,25,107,IT,45.70778,9.87316 138365,Era,1705,25,107,IT,46.24422,9.39515 138367,Erba,1705,25,107,IT,45.8088,9.22609 138369,Erbusco,1705,25,107,IT,45.59868,9.97186 138373,Eremo,1705,25,107,IT,45.13119,10.74271 138378,Erve,1705,25,107,IT,45.82158,9.45285 138382,Esine,1705,25,107,IT,45.92515,10.25102 138383,Esino Lario,1705,25,107,IT,45.99437,9.33399 138401,Faedo Valtellino,1705,25,107,IT,46.15299,9.90605 138406,Faggeto Lario,1705,25,107,IT,45.85878,9.15894 138409,Fagnano Olona-Bergoro,1705,25,107,IT,45.66977,8.85994 138424,Faloppio,1705,25,107,IT,45.80968,8.96434 138435,Fantasina,1705,25,107,IT,45.57325,10.1779 138438,Fara Gera dAdda,1705,25,107,IT,45.55656,9.53656 138440,Fara Olivana,1705,25,107,IT,45.49508,9.74906 138474,Felonica,1705,25,107,IT,44.97898,11.3537 138476,Fenegrò,1705,25,107,IT,45.70157,8.99964 138484,Ferno,1705,25,107,IT,45.61496,8.75695 138493,Ferrera di Varese,1705,25,107,IT,45.93278,8.78913 138492,Ferrera Erbognone,1705,25,107,IT,45.11456,8.86454 138510,Fiesco,1705,25,107,IT,45.33737,9.77786 138512,Fiesse,1705,25,107,IT,45.23207,10.32417 138516,Figino,1705,25,107,IT,45.49261,9.07779 138517,Figino Serenza,1705,25,107,IT,45.71048,9.13114 138518,Figliaro,1705,25,107,IT,45.77992,8.94466 138523,Filago,1705,25,107,IT,45.63758,9.55635 138530,Filighera,1705,25,107,IT,45.17496,9.31646 138538,Fino del Monte,1705,25,107,IT,45.89269,9.99406 138537,Fino Mornasco,1705,25,107,IT,45.7429,9.04996 138541,Fiorano al Serio,1705,25,107,IT,45.80018,9.84276 138557,Fizzonasco,1705,25,107,IT,45.37241,9.19066 138562,Flero,1705,25,107,IT,45.48254,10.17694 138585,Folzano,1705,25,107,IT,45.49587,10.2065 138586,Fombio,1705,25,107,IT,45.14126,9.68043 138596,Fontane-Zurane-Gresine,1705,25,107,IT,45.63336,10.0472 138598,Fontanella,1705,25,107,IT,45.46903,9.80248 138612,Fonteno,1705,25,107,IT,45.75859,10.01856 138616,Foppolo,1705,25,107,IT,46.04297,9.75775 138621,Forcola,1705,25,107,IT,46.15859,9.66034 138626,Foresto Sparso,1705,25,107,IT,45.69088,9.92006 138639,Formigara,1705,25,107,IT,45.22307,9.77076 138649,Fornaci,1705,25,107,IT,45.19872,9.67794 138659,Fornovo San Giovanni,1705,25,107,IT,45.49742,9.67739 138663,Fortunago,1705,25,107,IT,44.9216,9.18471 138707,Frascarolo,1705,25,107,IT,45.04666,8.68204 138747,Fuipiano Valle Imagna,1705,25,107,IT,45.85428,9.52845 138754,Furato,1705,25,107,IT,45.51468,8.88063 138762,Fusine,1705,25,107,IT,46.14949,9.74975 138767,Gabbioneta,1705,25,107,IT,45.21627,10.22027 138772,Gadesco-Pieve Delmona,1705,25,107,IT,45.15767,10.11567 138776,Gaggiano,1705,25,107,IT,45.40484,9.03488 138777,Gaggino,1705,25,107,IT,45.80787,8.96427 138798,Galbiate,1705,25,107,IT,45.81635,9.37902 138800,Galgagnano,1705,25,107,IT,45.35797,9.44535 138801,Gallarate,1705,25,107,IT,45.66019,8.79164 138805,Galliate Lombardo,1705,25,107,IT,45.78487,8.77043 138806,Galliavola,1705,25,107,IT,45.09756,8.81885 138818,Gallo-Tre Re-Mezzana Corti,1705,25,107,IT,45.12563,9.12227 138826,Gambara,1705,25,107,IT,45.25366,10.29434 138827,Gambarana,1705,25,107,IT,45.02874,8.76282 138834,Gambolò,1705,25,107,IT,45.26209,8.8582 138837,Gandellino,1705,25,107,IT,45.99109,9.94615 138838,Gandino,1705,25,107,IT,45.81088,9.89767 138839,Gandosso,1705,25,107,IT,45.65888,9.88886 138841,Ganna,1705,25,107,IT,45.90212,8.82606 138846,Garbagnate,1705,25,107,IT,45.77027,9.29848 138847,Garbagnate Milanese,1705,25,107,IT,45.57438,9.07537 138848,Garbagnate Monastero,1705,25,107,IT,45.77338,9.30144 138850,Gardola,1705,25,107,IT,45.7418,10.71871 138851,Gardone Riviera,1705,25,107,IT,45.62396,10.56682 138852,Gardone Val Trompia,1705,25,107,IT,45.69137,10.18635 138856,Gargnano,1705,25,107,IT,45.68586,10.65869 138858,Garlasco,1705,25,107,IT,45.1954,8.92314 138859,Garlate,1705,25,107,IT,45.81208,9.39964 138862,Garzeno,1705,25,107,IT,46.13409,9.24964 138870,Gavardo-Sopraponte,1705,25,107,IT,45.58939,10.44257 138871,Gavarno Rinnovata,1705,25,107,IT,45.72454,9.76318 138872,Gavarno-Tribulina,1705,25,107,IT,45.71734,9.77512 138875,Gaverina Terme,1705,25,107,IT,45.75578,9.88666 138878,Gavirate,1705,25,107,IT,45.83707,8.72619 138881,Gazoldo degli Ippoliti,1705,25,107,IT,45.19999,10.57839 138882,Gazzada Schianno,1705,25,107,IT,45.78017,8.83344 138883,Gazzaniga,1705,25,107,IT,45.79339,9.82976 138885,Gazzo,1705,25,107,IT,45.17968,10.89706 138888,Gazzuolo,1705,25,107,IT,45.06238,10.57161 138894,Gemonio,1705,25,107,IT,45.87878,8.67478 138898,Genivolta,1705,25,107,IT,45.33257,9.87726 138905,Genzone,1705,25,107,IT,45.17962,9.34829 138906,Gera Lario,1705,25,107,IT,46.17003,9.36736 138913,Gerenzago,1705,25,107,IT,45.20633,9.36137 138914,Gerenzano,1705,25,107,IT,45.63967,9.00104 138918,Germignaga,1705,25,107,IT,45.99128,8.72403 138920,Gerola Alta,1705,25,107,IT,46.06003,9.55025 138921,Geromina,1705,25,107,IT,45.53645,9.5754 138922,Gerosa,1705,25,107,IT,45.8498,9.57161 138923,Gerre de Caprioli,1705,25,107,IT,45.09042,10.05085 138925,Gessate,1705,25,107,IT,45.54838,9.43775 138929,Ghedi,1705,25,107,IT,45.40204,10.27681 138931,Ghiaie,1705,25,107,IT,45.68205,9.58121 138935,Ghisalba,1705,25,107,IT,45.59354,9.75765 138941,Gianico,1705,25,107,IT,45.86559,10.17486 138977,Giovenzano,1705,25,107,IT,45.27322,9.11605 138984,Gironico al Piano,1705,25,107,IT,45.80138,9.00314 138997,Giussago,1705,25,107,IT,45.28417,9.13996 138998,Giussano,1705,25,107,IT,45.70004,9.2089 139008,Godiasco,1705,25,107,IT,44.89645,9.05667 139011,Goito,1705,25,107,IT,45.25076,10.66121 139012,Golasecca,1705,25,107,IT,45.69821,8.66112 139013,Golferenzo,1705,25,107,IT,44.96106,9.30596 139015,Gombito,1705,25,107,IT,45.26187,9.72856 139024,Gonzaga,1705,25,107,IT,44.95193,10.81913 139025,Gordona,1705,25,107,IT,46.29176,9.367 139030,Gorgonzola,1705,25,107,IT,45.53069,9.40531 139033,Gorla Maggiore,1705,25,107,IT,45.66388,8.89537 139034,Gorla Minore,1705,25,107,IT,45.64117,8.90264 139035,Gorlago,1705,25,107,IT,45.67408,9.82296 139036,Gorle,1705,25,107,IT,45.70127,9.71382 139037,Gornate Olona,1705,25,107,IT,45.74157,8.85994 139038,Gorno,1705,25,107,IT,45.86249,9.84155 139046,Gottolengo,1705,25,107,IT,45.29278,10.26855 139053,Graffignana,1705,25,107,IT,45.20647,9.45436 139064,Grandate,1705,25,107,IT,45.76715,9.05349 139065,Grandola ed Uniti,1705,25,107,IT,46.02488,9.21274 139068,Grantola,1705,25,107,IT,45.94918,8.77433 139074,Grassobbio,1705,25,107,IT,45.65688,9.72565 139075,Gratacasolo,1705,25,107,IT,45.82897,10.12918 139078,Gravedona-San Gregorio,1705,25,107,IT,46.14639,9.30094 139079,Gravellona,1705,25,107,IT,45.32766,8.76414 139093,Grezzago,1705,25,107,IT,45.59108,9.49725 139095,Griante,1705,25,107,IT,45.99528,9.23554 139097,Grignano,1705,25,107,IT,45.61819,9.54235 139108,Gromlongo,1705,25,107,IT,45.72895,9.54097 139109,Gromo,1705,25,107,IT,45.9619,9.92637 139111,Grone,1705,25,107,IT,45.72722,9.90885 139112,Grontardo,1705,25,107,IT,45.20136,10.1515 139113,Gropello Cairoli,1705,25,107,IT,45.17707,8.99353 139116,Grosio,1705,25,107,IT,46.2997,10.27572 139117,Grosotto,1705,25,107,IT,46.28196,10.25908 139135,Grumello Cremonese,1705,25,107,IT,45.19415,9.86443 139136,Grumello del Monte,1705,25,107,IT,45.63535,9.87526 139151,Guanzate,1705,25,107,IT,45.72758,9.01984 139155,Guardamiglio,1705,25,107,IT,45.10742,9.68481 139174,Gudo Visconti,1705,25,107,IT,45.37407,9.00014 139176,Guidizzolo,1705,25,107,IT,45.32056,10.57801 139182,Guinzano,1705,25,107,IT,45.25678,9.15869 139185,Gussago,1705,25,107,IT,45.58358,10.15717 139186,Gussola,1705,25,107,IT,45.01165,10.34894 139189,Idro,1705,25,107,IT,45.73609,10.47337 139197,Imbersago,1705,25,107,IT,45.70588,9.44445 139203,Inarzo,1705,25,107,IT,45.78578,8.73563 139206,Incudine,1705,25,107,IT,46.2203,10.35876 139207,Induno Olona,1705,25,107,IT,45.84571,8.84056 139210,Introbio,1705,25,107,IT,45.97387,9.44998 139213,Introzzo,1705,25,107,IT,46.08119,9.34094 139214,Inverigo,1705,25,107,IT,45.73795,9.21836 139215,Inverno,1705,25,107,IT,45.19859,9.38429 139216,Inverno e Monteleone,1705,25,107,IT,45.19787,9.38526 139218,Inveruno,1705,25,107,IT,45.51399,8.84954 139220,Inzago,1705,25,107,IT,45.53991,9.48343 139222,Irma,1705,25,107,IT,45.77129,10.28457 139231,Iseo,1705,25,107,IT,45.65883,10.05024 139251,Isola di Fondra,1705,25,107,IT,45.97859,9.74735 139238,Isola Dovarese,1705,25,107,IT,45.17292,10.30879 139254,Isolaccia,1705,25,107,IT,46.48901,10.29405 139256,Isorella,1705,25,107,IT,45.30912,10.32281 139260,Ispra,1705,25,107,IT,45.8148,8.61294 139263,Isso,1705,25,107,IT,45.47678,9.75866 139272,Izano,1705,25,107,IT,45.35552,9.75138 139276,Jerago Con Orago,1705,25,107,IT,45.70467,8.79593 139312,Lacchiarella,1705,25,107,IT,45.3229,9.13777 139324,Laglio,1705,25,107,IT,45.88056,9.13697 139331,Lainate,1705,25,107,IT,45.57176,9.02681 139332,Laino,1705,25,107,IT,45.98448,9.07544 139338,Lallio,1705,25,107,IT,45.66283,9.62887 139342,Lambrinia,1705,25,107,IT,45.15831,9.5275 139343,Lambrugo,1705,25,107,IT,45.75878,9.23954 139357,Landriano,1705,25,107,IT,45.31155,9.26046 139359,Langosco,1705,25,107,IT,45.21453,8.56372 139363,Lanzada,1705,25,107,IT,46.2693,9.86925 139366,Lanzo dIntelvi,1705,25,107,IT,45.97943,9.02166 139373,Lardirago,1705,25,107,IT,45.23572,9.23272 139382,Lasnigo,1705,25,107,IT,45.88198,9.26644 139411,Lavena Ponte Tresa,1705,25,107,IT,45.9671,8.85725 139412,Laveno,1705,25,107,IT,45.90888,8.62036 139413,Lavenone,1705,25,107,IT,45.73853,10.4393 139419,Laxolo,1705,25,107,IT,45.80871,9.59983 139422,Lazzate,1705,25,107,IT,45.67207,9.08424 139432,Lecco,1705,25,107,IT,45.85589,9.39704 139433,Leffe,1705,25,107,IT,45.79793,9.88426 139434,Leggiuno,1705,25,107,IT,45.87588,8.62063 139436,Legnano,1705,25,107,IT,45.59788,8.91506 139442,Lemna,1705,25,107,IT,45.85808,9.15986 139445,Lenna,1705,25,107,IT,45.94273,9.67876 139446,Lenno,1705,25,107,IT,45.97298,9.19084 139447,Leno,1705,25,107,IT,45.3693,10.21675 139450,Lentate sul Seveso,1705,25,107,IT,45.67637,9.11774 139470,Lesmo,1705,25,107,IT,45.64858,9.30735 139484,Levata,1705,25,107,IT,45.12518,10.76794 139485,Levate,1705,25,107,IT,45.62518,9.62415 139490,Lezzeno,1705,25,107,IT,45.94411,9.18488 139509,Lierna,1705,25,107,IT,45.95818,9.30513 139518,Limbiate,1705,25,107,IT,45.59951,9.12509 139521,Limido Comasco,1705,25,107,IT,45.68917,8.97984 139526,Limone sul Garda,1705,25,107,IT,45.8145,10.79278 139528,Linarolo,1705,25,107,IT,45.16236,9.26995 139529,Linate,1705,25,107,IT,45.44701,9.27229 139534,Lipomo,1705,25,107,IT,45.79288,9.12024 139535,Lirio,1705,25,107,IT,44.99446,9.25656 139536,Lisanza,1705,25,107,IT,45.73926,8.59852 139537,Liscate,1705,25,107,IT,45.48316,9.4103 139543,Lissone,1705,25,107,IT,45.61236,9.23985 139547,Livigno,1705,25,107,IT,46.5363,10.13348 139550,Livo,1705,25,107,IT,46.16849,9.30414 139553,Livraga,1705,25,107,IT,45.19227,9.54646 139562,Locate di Triulzi,1705,25,107,IT,45.35691,9.22516 139561,Locate Varesino,1705,25,107,IT,45.68969,8.92992 139563,Locatello,1705,25,107,IT,45.83518,9.53405 139568,Lodetto,1705,25,107,IT,45.55099,10.03175 139569,Lodi,1705,25,107,IT,45.30989,9.50085 139570,Lodi Vecchio,1705,25,107,IT,45.30422,9.4176 139572,Lodrino,1705,25,107,IT,45.71969,10.27767 139575,Lograto,1705,25,107,IT,45.48458,10.05664 139578,Lomagna,1705,25,107,IT,45.6664,9.37654 139579,Lomazzo,1705,25,107,IT,45.6967,9.03427 139582,Lomello,1705,25,107,IT,45.12001,8.79612 139584,Lonate Ceppino,1705,25,107,IT,45.70863,8.87936 139585,Lonate Pozzolo,1705,25,107,IT,45.59213,8.75194 139586,Lonato,1705,25,107,IT,45.46079,10.47732 139593,Longhena,1705,25,107,IT,45.43768,10.05967 139600,Longone al Segrino,1705,25,107,IT,45.81428,9.25144 139617,Losine,1705,25,107,IT,45.98349,10.31616 139619,Lovere,1705,25,107,IT,45.81379,10.06995 139620,Lovero,1705,25,107,IT,46.2314,10.22856 139621,Lozio,1705,25,107,IT,45.98569,10.26096 139622,Lozza,1705,25,107,IT,45.77567,8.85773 139634,Lucino,1705,25,107,IT,45.7835,9.0434 139635,Lucino-Rodano,1705,25,107,IT,45.47607,9.35315 139642,Ludriano,1705,25,107,IT,45.44846,9.93276 139651,Luino,1705,25,107,IT,46.00185,8.74512 139652,Luisago,1705,25,107,IT,45.76288,9.03544 139655,Lumezzane,1705,25,107,IT,45.64789,10.26487 139659,Lunetta-Frassino,1705,25,107,IT,45.16016,10.82059 139660,Lungavilla,1705,25,107,IT,45.04151,9.07842 139666,Lurago dErba,1705,25,107,IT,45.75097,9.21817 139665,Lurago Marinone,1705,25,107,IT,45.70482,8.9833 139667,Lurano,1705,25,107,IT,45.56568,9.64016 139669,Lurate Caccivio,1705,25,107,IT,45.76701,8.99897 139681,Luvinate,1705,25,107,IT,45.83958,8.77193 139682,Luzzana,1705,25,107,IT,45.7153,9.88105 139687,Maccagno,1705,25,107,IT,46.04357,8.73413 139689,Maccastorna,1705,25,107,IT,45.14667,9.85457 139700,Macherio,1705,25,107,IT,45.63974,9.27394 139702,Maclodio,1705,25,107,IT,45.47778,10.04217 139707,Madignano,1705,25,107,IT,45.34515,9.72271 139708,Madone,1705,25,107,IT,45.65028,9.55015 139716,Magasa,1705,25,107,IT,45.78139,10.61597 139717,Magenta,1705,25,107,IT,45.46456,8.88453 139719,Magherno,1705,25,107,IT,45.22357,9.32935 139735,Magnacavallo,1705,25,107,IT,45.00646,11.18326 139736,Magnago,1705,25,107,IT,45.5792,8.80245 139739,Magno,1705,25,107,IT,45.70665,10.19937 139741,Magreglio,1705,25,107,IT,45.92098,9.26264 139750,Mairago,1705,25,107,IT,45.25177,9.57836 139751,Mairano,1705,25,107,IT,45.44802,10.07977 139754,Malagnino,1705,25,107,IT,45.13477,10.11477 139756,Malavicina,1705,25,107,IT,45.29912,10.78677 139760,Malegno,1705,25,107,IT,45.95079,10.27406 139761,Maleo,1705,25,107,IT,45.16633,9.76241 139765,Malgesso,1705,25,107,IT,45.82787,8.67553 139766,Malgrate,1705,25,107,IT,45.84891,9.3763 139771,Malnate,1705,25,107,IT,45.79377,8.88104 139773,Malonno,1705,25,107,IT,46.12168,10.31841 139788,Mandello del Lario,1705,25,107,IT,45.92199,9.31974 139792,Manera,1705,25,107,IT,45.67346,9.04058 139793,Manerba del Garda,1705,25,107,IT,45.54988,10.55228 139794,Manerbio,1705,25,107,IT,45.3539,10.13803 139806,Mantegazza,1705,25,107,IT,45.50946,8.97321 139807,Mantello,1705,25,107,IT,46.15249,9.48894 139811,Mantova,1705,25,107,IT,45.16031,10.79784 139815,Mapello,1705,25,107,IT,45.71259,9.55443 139834,Marcallo,1705,25,107,IT,45.48327,8.87194 139835,Marcaria,1705,25,107,IT,45.12225,10.53278 139842,Marcheno,1705,25,107,IT,45.70649,10.21449 139844,Marchirolo,1705,25,107,IT,45.94788,8.83343 139850,Marcignago,1705,25,107,IT,45.25306,9.07935 139860,Maresso,1705,25,107,IT,45.68755,9.35593 139865,Margno,1705,25,107,IT,46.03099,9.38164 139866,Mariana Mantovana,1705,25,107,IT,45.19288,10.48688 139867,Mariano Comense,1705,25,107,IT,45.69651,9.1818 139905,Marmentino,1705,25,107,IT,45.75499,10.28467 139906,Marmirolo,1705,25,107,IT,45.21928,10.75609 139908,Marnate,1705,25,107,IT,45.62855,8.90916 139911,Marone,1705,25,107,IT,45.73719,10.09579 139931,Martignana di Po,1705,25,107,IT,45.01107,10.37978 139934,Martinengo,1705,25,107,IT,45.57216,9.7675 139941,Marudo,1705,25,107,IT,45.25297,9.37716 139945,Marzano,1705,25,107,IT,45.24797,9.29505 139949,Marzio,1705,25,107,IT,45.93818,8.85813 139951,Masate,1705,25,107,IT,45.56708,9.46415 139955,Masciago Primo,1705,25,107,IT,45.91778,8.78113 139963,Maslianico,1705,25,107,IT,45.84301,9.04836 139978,Massalengo-Motta Vigana,1705,25,107,IT,45.26497,9.49016 140005,Mazzano,1705,25,107,IT,45.52008,10.35387 140012,Mazzo di Valtellina,1705,25,107,IT,46.25736,10.25534 140016,Meda,1705,25,107,IT,45.66121,9.15337 140017,Mede,1705,25,107,IT,45.09678,8.73679 140021,Mediglia,1705,25,107,IT,45.39537,9.33165 140023,Medolago,1705,25,107,IT,45.67129,9.49807 140024,Medole,1705,25,107,IT,45.32588,10.51357 140040,Melegnano,1705,25,107,IT,45.35781,9.3236 140042,Meleti,1705,25,107,IT,45.11967,9.83568 140055,Mello,1705,25,107,IT,46.1549,9.54734 140058,Melzo,1705,25,107,IT,45.4981,9.42043 140059,Menaggio,1705,25,107,IT,46.02075,9.23907 140060,Menarola,1705,25,107,IT,46.29929,9.36124 140061,Menconico,1705,25,107,IT,44.79656,9.27946 140069,Merate,1705,25,107,IT,45.68858,9.4208 140070,Mercallo,1705,25,107,IT,45.74791,8.66998 140087,Merlino,1705,25,107,IT,45.43337,9.42985 140088,Merone,1705,25,107,IT,45.78718,9.24404 140092,Mese,1705,25,107,IT,46.3036,9.37769 140093,Mesenzana,1705,25,107,IT,45.95158,8.76453 140094,Mesero,1705,25,107,IT,45.50227,8.85544 140104,Mezzago,1705,25,107,IT,45.62898,9.44485 140106,Mezzana Bigli,1705,25,107,IT,45.05988,8.84728 140108,Mezzana Rabattone,1705,25,107,IT,45.09488,9.03247 140111,Mezzanino,1705,25,107,IT,45.12489,9.20497 140115,Mezzate,1705,25,107,IT,45.44385,9.29452 140116,Mezzegra,1705,25,107,IT,45.98168,9.20514 140122,Mezzoldo,1705,25,107,IT,46.01259,9.66555 140142,Milan,1705,25,107,IT,45.46427,9.18951 140151,Millepini,1705,25,107,IT,45.46967,9.33763 140154,Milzano,1705,25,107,IT,45.27358,10.19927 140172,Miradolo Terme,1705,25,107,IT,45.17094,9.44442 140179,Misano di Gera dAdda,1705,25,107,IT,45.46946,9.62129 140181,Misinto,1705,25,107,IT,45.66142,9.08129 140182,Missaglia,1705,25,107,IT,45.70656,9.33471 140194,Moggio,1705,25,107,IT,45.93239,9.48623 140197,Moglia,1705,25,107,IT,44.93561,10.91463 140206,Moio de Calvi,1705,25,107,IT,45.95179,9.70075 140218,Molinetto,1705,25,107,IT,45.49409,10.35888 140231,Molteno,1705,25,107,IT,45.77819,9.30386 140232,Moltrasio,1705,25,107,IT,45.85998,9.09844 140239,Mombelli,1705,25,107,IT,44.86866,9.23436 140243,Mombretto,1705,25,107,IT,45.4239,9.36506 140256,Monasterolo,1705,25,107,IT,45.76327,9.93138 140258,Monasterolo del Castello,1705,25,107,IT,45.76319,9.93166 140270,Moncucco,1705,25,107,IT,45.31032,9.0392 140293,Moniga del Garda,1705,25,107,IT,45.52665,10.53728 140295,Monno,1705,25,107,IT,46.21225,10.34012 140309,Montagna in Valtellina,1705,25,107,IT,46.17849,9.90295 140333,Montalto Pavese,1705,25,107,IT,44.97802,9.21232 140338,Montanara,1705,25,107,IT,45.13531,10.71879 140340,Montanaso Lombardo,1705,25,107,IT,45.33522,9.46551 140342,Montano,1705,25,107,IT,45.79423,9.02218 140344,Montano Lucino,1705,25,107,IT,45.78378,9.04244 140351,Monte,1705,25,107,IT,45.71489,8.82222 140357,Monte Cremasco,1705,25,107,IT,45.37224,9.57288 140361,Monte Marenzo,1705,25,107,IT,45.77213,9.45476 140386,Montebello,1705,25,107,IT,44.99994,9.10263 140397,Montecalvo Versiggia,1705,25,107,IT,44.97206,9.28536 140458,Montegrino Valtravaglia,1705,25,107,IT,45.97398,8.76743 140477,Montello,1705,25,107,IT,45.67208,9.80566 140492,Montemezzo,1705,25,107,IT,46.17879,9.37094 140535,Montescano,1705,25,107,IT,45.03196,9.28366 140540,Montesegale,1705,25,107,IT,44.90696,9.12636 140542,Montesolaro,1705,25,107,IT,45.721,9.1176 140548,Montevecchia,1705,25,107,IT,45.70548,9.38085 140559,Monticelli Brusati,1705,25,107,IT,45.63478,10.10026 140560,Monticelli Pavese,1705,25,107,IT,45.11107,9.51276 140564,Monticello,1705,25,107,IT,45.71244,9.31481 140565,Monticello Brianza,1705,25,107,IT,45.70948,9.31564 140569,Montichiari,1705,25,107,IT,45.41317,10.39799 140575,Montirone,1705,25,107,IT,45.44638,10.22877 140577,Montodine,1705,25,107,IT,45.28419,9.7091 140582,Montorfano,1705,25,107,IT,45.78638,9.14374 140592,Montù Beccaria,1705,25,107,IT,45.03633,9.31268 140593,Monvalle,1705,25,107,IT,45.8581,8.63088 140594,Monza,1705,25,107,IT,45.58005,9.27246 140595,Monzambano,1705,25,107,IT,45.38534,10.69331 140601,Morazzone,1705,25,107,IT,45.76447,8.82813 140602,Morbegno,1705,25,107,IT,46.1372,9.57415 140608,Morengo,1705,25,107,IT,45.53148,9.70586 140619,Morimondo,1705,25,107,IT,45.35381,8.95626 140624,Mornago,1705,25,107,IT,45.74516,8.75046 140626,Mornico,1705,25,107,IT,45.01062,9.20926 140628,Mornico al Serio,1705,25,107,IT,45.59138,9.80926 140627,Mornico Losana,1705,25,107,IT,45.01016,9.20616 140639,Mortara,1705,25,107,IT,45.2494,8.73302 140641,Morterone,1705,25,107,IT,45.8748,9.48233 140643,Moscazzano,1705,25,107,IT,45.29358,9.68135 140656,Motta Baluffi,1705,25,107,IT,45.05569,10.25855 140663,Motta Visconti,1705,25,107,IT,45.28774,8.99254 140668,Motteggiana,1705,25,107,IT,45.03307,10.76269 140669,Mottella,1705,25,107,IT,45.16382,10.84436 140672,Mozzanica,1705,25,107,IT,45.4768,9.68849 140673,Mozzate,1705,25,107,IT,45.67473,8.95644 140675,Mozzo,1705,25,107,IT,45.69868,9.60865 140678,Muggiò,1705,25,107,IT,45.58878,9.22784 140681,Mulazzano,1705,25,107,IT,45.37237,9.39765 140684,Mura,1705,25,107,IT,45.71307,10.34204 140698,Muscoline,1705,25,107,IT,45.56249,10.46187 140702,Musso,1705,25,107,IT,46.11295,9.27379 140706,Muzza di Cornegliano Laudense,1705,25,107,IT,45.28462,9.47166 140727,Nava,1705,25,107,IT,45.76219,9.36308 140728,Nave,1705,25,107,IT,45.5848,10.27947 140730,Navedano,1705,25,107,IT,45.75524,9.0947 140736,Negrone,1705,25,107,IT,45.71028,9.75811 140739,Nembro,1705,25,107,IT,45.74411,9.76127 140749,Nerviano,1705,25,107,IT,45.55343,8.9792 140751,Nesso,1705,25,107,IT,45.91238,9.15674 140757,Niardo,1705,25,107,IT,45.97599,10.33326 140760,Nibionno,1705,25,107,IT,45.74648,9.26894 140764,Nicorvo,1705,25,107,IT,45.28566,8.66794 140769,Nigoline-Bonomelli,1705,25,107,IT,45.62908,9.98682 140778,Nobile-Monguzzo,1705,25,107,IT,45.78018,9.23024 140809,Nosadello,1705,25,107,IT,45.40268,9.53047 140810,Nosate,1705,25,107,IT,45.55074,8.72509 140814,Nova Milanese,1705,25,107,IT,45.58882,9.19792 140819,Novagli,1705,25,107,IT,45.38688,10.43874 140824,Novate Mezzola,1705,25,107,IT,46.21939,9.44971 140825,Novate Milanese,1705,25,107,IT,45.5305,9.13954 140827,Novedrate,1705,25,107,IT,45.69808,9.12074 140828,Novegro-Tregarezzo-San Felice,1705,25,107,IT,45.46778,9.28122 140834,Noverasco-Sporting Mirasole,1705,25,107,IT,45.39544,9.21427 140838,Noviglio,1705,25,107,IT,45.35907,9.05215 140862,Nuvolento,1705,25,107,IT,45.54599,10.38809 140863,Nuvolera,1705,25,107,IT,45.53218,10.36917 140865,Occagno,1705,25,107,IT,45.92901,9.0987 140873,Odolo,1705,25,107,IT,45.6455,10.38309 140876,Offanengo,1705,25,107,IT,45.37887,9.74236 140878,Offlaga,1705,25,107,IT,45.38526,10.11736 140880,Oggiona-Santo Stefano,1705,25,107,IT,45.70427,8.81653 140881,Oggiono,1705,25,107,IT,45.79133,9.34815 140890,Olevano di Lomellina,1705,25,107,IT,45.21322,8.7175 140892,Olgiate Comasco,1705,25,107,IT,45.78436,8.96816 140893,Olgiate Molgora,1705,25,107,IT,45.73028,9.40335 140894,Olgiate Olona,1705,25,107,IT,45.63706,8.88147 140895,Olginate,1705,25,107,IT,45.79126,9.41869 140898,Oliva Gessi,1705,25,107,IT,45.00597,9.17317 140909,Olmeneta,1705,25,107,IT,45.2354,10.02318 140911,Olmo al Brembo,1705,25,107,IT,45.97006,9.65034 140913,Oltre Il Colle,1705,25,107,IT,45.88949,9.76925 140914,Oltressenda Alta,1705,25,107,IT,45.91519,9.94486 140915,Oltrona di San Mamette,1705,25,107,IT,45.75578,8.97673 140917,Ome,1705,25,107,IT,45.62728,10.12137 140923,Oneta,1705,25,107,IT,45.87149,9.81935 140927,Ono San Pietro,1705,25,107,IT,46.01689,10.32836 140928,Onore,1705,25,107,IT,45.89159,10.01076 140931,Opera,1705,25,107,IT,45.37355,9.21084 140953,Origgio,1705,25,107,IT,45.59676,9.01645 140954,Orino,1705,25,107,IT,45.88148,8.71563 140957,Orio al Serio,1705,25,107,IT,45.6749,9.69083 140956,Orio Litta,1705,25,107,IT,45.16244,9.55447 140963,Ornago,1705,25,107,IT,45.59987,9.42099 140965,Ornica,1705,25,107,IT,45.98892,9.57848 140974,Orsenigo,1705,25,107,IT,45.77839,9.17963 140997,Orzinuovi,1705,25,107,IT,45.40191,9.92319 140998,Orzivecchi,1705,25,107,IT,45.42058,9.96326 141005,Osigo,1705,25,107,IT,45.87532,9.29559 141009,Osio Sopra,1705,25,107,IT,45.62908,9.58465 141010,Osio Sotto,1705,25,107,IT,45.61608,9.58905 141011,Osmate,1705,25,107,IT,45.78867,8.65523 141012,Osnago,1705,25,107,IT,45.67548,9.39192 141019,Ospedaletto Lodigiano,1705,25,107,IT,45.16877,9.57866 141023,Ospitaletto,1705,25,107,IT,45.55221,10.07562 141024,Ossago Lodigiano,1705,25,107,IT,45.2421,9.5372 141027,Ossimo Superiore,1705,25,107,IT,45.94619,10.23056 141028,Ossona,1705,25,107,IT,45.50708,8.89314 141029,Ossuccio,1705,25,107,IT,45.96958,9.17974 141032,Osteno,1705,25,107,IT,46.00668,9.08385 141033,Osteno-Claino,1705,25,107,IT,46.00367,9.08741 141040,Ostiano,1705,25,107,IT,45.2226,10.2545 141041,Ostiglia,1705,25,107,IT,45.06978,11.13499 141052,Ottobiano,1705,25,107,IT,45.15418,8.83198 141066,Ozzero,1705,25,107,IT,45.36775,8.9244 141073,Padenghe sul Garda,1705,25,107,IT,45.50787,10.51857 141081,Paderno dAdda,1705,25,107,IT,45.67879,9.44491 141078,Paderno Dugnano,1705,25,107,IT,45.56899,9.16483 141079,Paderno Franciacorta,1705,25,107,IT,45.58687,10.07975 141080,Paderno Ponchielli,1705,25,107,IT,45.23797,9.92876 58203,Pagazzano,1705,25,107,IT,45.53428,9.67116 58212,Pagnona,1705,25,107,IT,46.05969,9.40274 58215,Paisco Loveno,1705,25,107,IT,46.0791,10.29256 58216,Paitone,1705,25,107,IT,45.55208,10.40227 58217,Paladina,1705,25,107,IT,45.73068,9.60585 58226,Palazzago,1705,25,107,IT,45.75298,9.53365 58230,Palazzo Pignano,1705,25,107,IT,45.39007,9.56956 58236,Palazzolo sullOglio,1705,25,107,IT,45.59665,9.88688 58242,Palestro,1705,25,107,IT,45.30302,8.5332 58244,Palidano,1705,25,107,IT,44.97203,10.77943 58266,Palosco,1705,25,107,IT,45.58928,9.83646 58274,Pancarana,1705,25,107,IT,45.07523,9.05109 58276,Pandino,1705,25,107,IT,45.40559,9.55218 58285,Pantigliate,1705,25,107,IT,45.43526,9.3522 58294,Parabiago,1705,25,107,IT,45.56034,8.94545 58296,Paratico,1705,25,107,IT,45.65879,9.95792 58320,Parè,1705,25,107,IT,45.81088,9.00874 58306,Parlasco,1705,25,107,IT,46.01789,9.34494 58308,Parmezzana Calzana,1705,25,107,IT,45.6335,10.0954 58313,Parona,1705,25,107,IT,45.28165,8.75055 58315,Parre,1705,25,107,IT,45.87459,9.89086 58319,Parzanica,1705,25,107,IT,45.73873,10.03518 58324,Paspardo,1705,25,107,IT,46.03225,10.36879 58329,Passirana,1705,25,107,IT,45.54792,9.04412 58330,Passirano,1705,25,107,IT,45.59673,10.06986 58342,Pasturo,1705,25,107,IT,45.95168,9.44414 58356,Paullo,1705,25,107,IT,45.41834,9.40042 58359,Pavia,1705,25,107,IT,45.19205,9.15917 58364,Pavone del Mella,1705,25,107,IT,45.30147,10.20984 58382,Pedesina,1705,25,107,IT,46.08189,9.54944 58384,Pedrengo,1705,25,107,IT,45.69598,9.73495 58386,Peglio,1705,25,107,IT,46.16039,9.29474 58387,Pegognaga,1705,25,107,IT,44.99456,10.85967 58389,Peia,1705,25,107,IT,45.79949,9.89926 58396,Pellio Intelvi,1705,25,107,IT,45.97988,9.05864 58419,Perego,1705,25,107,IT,45.73758,9.36295 58427,Perledo,1705,25,107,IT,46.01529,9.2956 58435,Pero,1705,25,107,IT,45.51017,9.08704 58439,Persico Dosimo,1705,25,107,IT,45.18587,10.10517 58442,Pertica Alta,1705,25,107,IT,45.74239,10.34417 58443,Pertica Bassa,1705,25,107,IT,45.75339,10.37247 58451,Pescarolo,1705,25,107,IT,45.19387,10.18647 58453,Pescate,1705,25,107,IT,45.83348,9.39395 58469,Pessano Con Bornago,1705,25,107,IT,45.54937,9.38145 58470,Pessina Cremonese,1705,25,107,IT,45.18505,10.24815 58499,Pezzaze,1705,25,107,IT,45.77629,10.23597 58504,Piadena,1705,25,107,IT,45.12859,10.37101 58507,Piamborno,1705,25,107,IT,45.91969,10.22526 58508,Pian Camuno,1705,25,107,IT,45.84186,10.14181 58516,Pianazzo,1705,25,107,IT,46.42815,9.3442 58527,Pianello del Lario,1705,25,107,IT,46.10279,9.27694 58528,Pianengo,1705,25,107,IT,45.40217,9.69476 58532,Piangaiano,1705,25,107,IT,45.78877,9.99461 58534,Pianico,1705,25,107,IT,45.80989,10.04306 58552,Piantedo,1705,25,107,IT,46.13663,9.4277 58555,Piario,1705,25,107,IT,45.89649,9.92726 58557,Piateda Centro,1705,25,107,IT,46.1596,9.93495 58561,Piazza,1705,25,107,IT,45.58725,10.15526 58566,Piazza Brembana,1705,25,107,IT,45.94769,9.6733 58567,Piazza Caduti,1705,25,107,IT,45.70513,9.50251 58573,Piazzatorre,1705,25,107,IT,45.99273,9.68942 58577,Piazzolo,1705,25,107,IT,45.97979,9.67055 58598,Pieranica,1705,25,107,IT,45.42617,9.61026 58603,Pietra de Giorgi,1705,25,107,IT,45.02136,9.23036 58630,Pieve,1705,25,107,IT,45.77273,10.75913 58632,Pieve Albignola,1705,25,107,IT,45.11316,8.95999 58646,Pieve dOlmi,1705,25,107,IT,45.08957,10.12368 58647,Pieve del Cairo,1705,25,107,IT,45.0492,8.80322 58651,Pieve di Coriano,1705,25,107,IT,45.03388,11.1078 58633,Pieve Emanuele,1705,25,107,IT,45.35052,9.20268 58634,Pieve Fissiraga,1705,25,107,IT,45.26327,9.45836 58637,Pieve Porto Morone,1705,25,107,IT,45.10979,9.44019 58638,Pieve San Giacomo,1705,25,107,IT,45.13204,10.18775 58657,Pievedizio,1705,25,107,IT,45.46062,10.08771 58665,Pigra,1705,25,107,IT,45.95735,9.12649 58672,Pinarolo Po,1705,25,107,IT,45.06986,9.16725 58680,Pino sulla Sponda del Lago Maggiore,1705,25,107,IT,46.10078,8.73873 58688,Pioltello,1705,25,107,IT,45.50147,9.33053 58711,Pisogne,1705,25,107,IT,45.80777,10.11023 58719,Piubega,1705,25,107,IT,45.22677,10.53195 58721,Piuro,1705,25,107,IT,46.32979,9.42064 58723,Pizzale,1705,25,107,IT,45.03856,9.04995 58725,Pizzighettone,1705,25,107,IT,45.1869,9.78781 58737,Plesio,1705,25,107,IT,46.04742,9.22882 58741,Poasco-Sorigherio,1705,25,107,IT,45.4031,9.23092 58761,Poggio Rusco,1705,25,107,IT,44.96693,11.10419 58772,Poggiridenti Alto,1705,25,107,IT,46.1748,9.92605 58773,Poggiridenti Piano,1705,25,107,IT,46.16991,9.92671 58774,Pogliano Milanese,1705,25,107,IT,45.53786,8.99403 58775,Pognana Lario,1705,25,107,IT,45.88044,9.15762 58776,Pognano,1705,25,107,IT,45.58638,9.63996 58782,Polaveno,1705,25,107,IT,45.66148,10.12396 58804,Polpenazze del Garda,1705,25,107,IT,45.55118,10.50488 58814,Pometo,1705,25,107,IT,44.92788,9.27348 58819,Pompiano,1705,25,107,IT,45.43116,9.9891 58820,Pomponesco,1705,25,107,IT,44.93118,10.59402 58822,Poncarale,1705,25,107,IT,45.46089,10.17976 58824,Ponna Superiore,1705,25,107,IT,45.98957,9.09406 58837,Ponte Caffaro,1705,25,107,IT,45.82078,10.52707 58838,Ponte Cingoli,1705,25,107,IT,45.59751,10.10687 58856,Ponte di Legno,1705,25,107,IT,46.25896,10.51048 58859,Ponte in Valtellina,1705,25,107,IT,46.175,9.97785 58842,Ponte Lambro,1705,25,107,IT,45.82539,9.22455 58843,Ponte Nizza,1705,25,107,IT,44.85188,9.09739 58844,Ponte Nossa,1705,25,107,IT,45.86611,9.88364 58847,Ponte San Marco,1705,25,107,IT,45.47686,10.41315 58849,Ponte San Pietro,1705,25,107,IT,45.70596,9.5905 58876,Ponteranica,1705,25,107,IT,45.73248,9.65175 58880,Pontevico,1705,25,107,IT,45.27315,10.09248 58883,Ponti sul Mincio,1705,25,107,IT,45.41208,10.68508 58887,Pontida,1705,25,107,IT,45.73129,9.51141 58890,Pontirolo Nuovo,1705,25,107,IT,45.56918,9.56935 58891,Pontoglio,1705,25,107,IT,45.56938,9.85346 58907,Porlezza,1705,25,107,IT,46.03714,9.12921 58914,Portalbera,1705,25,107,IT,45.09789,9.31774 58924,Porto Ceresio,1705,25,107,IT,45.91285,8.89684 58941,Porto dAdda,1705,25,107,IT,45.66241,9.47563 58939,Porto Valtravaglia,1705,25,107,IT,45.96088,8.68109 58961,Postalesio,1705,25,107,IT,46.17379,9.77659 58976,Pozzaglio,1705,25,107,IT,45.19999,10.05345 58977,Pozzaglio ed Uniti,1705,25,107,IT,45.20027,10.05057 58982,Pozzo dAdda,1705,25,107,IT,45.57258,9.50295 58984,Pozzolengo,1705,25,107,IT,45.40515,10.6304 58991,Pozzuolo Martesana,1705,25,107,IT,45.51398,9.45625 58993,Pradalunga,1705,25,107,IT,45.74588,9.78225 59000,Pralboino,1705,25,107,IT,45.2672,10.21839 59012,Prata Camportaccio,1705,25,107,IT,46.30719,9.39524 59013,Prata Centro,1705,25,107,IT,46.30847,9.39625 59046,Predore,1705,25,107,IT,45.68085,10.01271 59049,Pregnana Milanese,1705,25,107,IT,45.51597,9.00704 59050,Pregola,1705,25,107,IT,44.75069,9.28223 59052,Premana,1705,25,107,IT,46.05245,9.42129 59055,Premenugo,1705,25,107,IT,45.4679,9.38458 59058,Premolo,1705,25,107,IT,45.87019,9.87466 59064,Preseglie,1705,25,107,IT,45.66829,10.39677 59066,Presezzo,1705,25,107,IT,45.69208,9.57035 59071,Prevalle,1705,25,107,IT,45.55138,10.42207 59078,Primaluna,1705,25,107,IT,45.98379,9.43764 59093,Proserpio,1705,25,107,IT,45.82828,9.24554 59095,Prosto,1705,25,107,IT,46.32946,9.42094 59097,Provaglio dIseo,1705,25,107,IT,45.63538,10.04466 59096,Provaglio Val Sabbia,1705,25,107,IT,45.68879,10.43397 59099,Provezze,1705,25,107,IT,45.63139,10.07287 59115,Provincia di Bergamo,1705,25,107,IT,45.83333,9.8 59117,Provincia di Brescia,1705,25,107,IT,45.70648,10.33562 59125,Provincia di Como,1705,25,107,IT,45.91249,9.15744 59127,Provincia di Cremona,1705,25,107,IT,45.23333,9.93333 59142,Provincia di Lecco,1705,25,107,IT,45.85397,9.39001 59144,Provincia di Lodi,1705,25,107,IT,45.29638,9.52858 59147,Provincia di Mantova,1705,25,107,IT,45.16667,10.78333 59151,Provincia di Monza e della Brianza,1705,25,107,IT,45.59674,9.21616 59157,Provincia di Pavia,1705,25,107,IT,45.11667,9.13333 59177,Provincia di Sondrio,1705,25,107,IT,46.21108,9.94907 59184,Provincia di Varese,1705,25,107,IT,45.8,8.8 59194,Puegnago sul Garda,1705,25,107,IT,45.56679,10.50977 59195,Puginate,1705,25,107,IT,45.71095,9.05772 59204,Pumenengo,1705,25,107,IT,45.48002,9.86775 59207,Pusiano,1705,25,107,IT,45.81478,9.28217 59227,Quartiano,1705,25,107,IT,45.358,9.4176 59238,Quattro Strade,1705,25,107,IT,45.6955,9.37681 59246,Quingentole,1705,25,107,IT,45.03801,11.04575 59247,Quintano,1705,25,107,IT,45.42047,9.61856 59251,Quinzano dOglio,1705,25,107,IT,45.3143,10.00785 59252,Quistello,1705,25,107,IT,45.00794,10.98377 59265,Raffa,1705,25,107,IT,45.57047,10.52962 59276,Ramponio Verna,1705,25,107,IT,45.99698,9.06633 59278,Rancio Valcuvia,1705,25,107,IT,45.91594,8.77157 59279,Ranco,1705,25,107,IT,45.79733,8.57105 59281,Ranica,1705,25,107,IT,45.72328,9.71335 59282,Ranzanico,1705,25,107,IT,45.78839,9.93506 59293,Rasura,1705,25,107,IT,46.10059,9.55274 59304,Rea,1705,25,107,IT,45.11336,9.15465 59314,Redavalle,1705,25,107,IT,45.03796,9.20225 59315,Redondesco,1705,25,107,IT,45.16638,10.51228 59323,Regoledo,1705,25,107,IT,46.13319,9.54597 59328,Remedello,1705,25,107,IT,45.27838,10.37198 59329,Remedello di Sopra,1705,25,107,IT,45.27873,10.37109 59330,Renate,1705,25,107,IT,45.72438,9.27994 59335,Rescaldina,1705,25,107,IT,45.62002,8.94878 59338,Retorbido,1705,25,107,IT,44.9498,9.0368 59341,Revere,1705,25,107,IT,45.05207,11.13059 59346,Rezzago,1705,25,107,IT,45.86673,9.24863 59347,Rezzato,1705,25,107,IT,45.51182,10.31731 59352,Rho,1705,25,107,IT,45.53245,9.0402 59369,Ricengo,1705,25,107,IT,45.40567,9.72396 59398,Riozzo,1705,25,107,IT,45.34622,9.32168 59404,Ripalta Arpina,1705,25,107,IT,45.30187,9.72896 59405,Ripalta Guerina,1705,25,107,IT,45.30607,9.70396 59406,Ripalta Nuova,1705,25,107,IT,45.33203,9.69244 59420,Riva di Solto,1705,25,107,IT,45.77418,10.03941 59426,Rivanazzano,1705,25,107,IT,44.92908,9.01368 59430,Rivarolo del Re,1705,25,107,IT,45.03116,10.47253 59429,Rivarolo Mantovano,1705,25,107,IT,45.07272,10.43713 59443,Rivolta dAdda,1705,25,107,IT,45.46962,9.51251 59455,Robbiate,1705,25,107,IT,45.68829,9.43712 59456,Robbio,1705,25,107,IT,45.28901,8.59289 59457,Robecchetto Con Induno,1705,25,107,IT,45.52848,8.77068 59459,Robecco dOglio,1705,25,107,IT,45.25851,10.07718 59458,Robecco Pavese,1705,25,107,IT,45.04836,9.15015 59460,Robecco sul Naviglio,1705,25,107,IT,45.43662,8.88573 59501,Roccafranca,1705,25,107,IT,45.46405,9.9126 59551,Rodengo-Saiano,1705,25,107,IT,45.59958,10.10717 59552,Rodero,1705,25,107,IT,45.82398,8.91523 59554,Rodigo,1705,25,107,IT,45.19912,10.62527 59688,Roè,1705,25,107,IT,45.62576,10.4996 59689,Roè Volciano,1705,25,107,IT,45.61199,10.48857 59557,Rogeno,1705,25,107,IT,45.78238,9.27404 59559,Roggione,1705,25,107,IT,45.18378,9.80739 59562,Rognano,1705,25,107,IT,45.28847,9.09025 59563,Rogno,1705,25,107,IT,45.85659,10.13216 59564,Rogolo,1705,25,107,IT,46.13721,9.48528 59565,Rogoredo-Valaperta-Rimoldo,1705,25,107,IT,45.67695,9.33277 59572,Romagnese,1705,25,107,IT,44.84131,9.3281 59575,Romanengo,1705,25,107,IT,45.37815,9.78777 59576,Romano Banco,1705,25,107,IT,45.42309,9.10707 59579,Romano di Lombardia,1705,25,107,IT,45.52081,9.7544 59588,Ronago,1705,25,107,IT,45.83228,8.98364 59590,Roncadelle,1705,25,107,IT,45.52718,10.15407 59592,Roncaro,1705,25,107,IT,45.22817,9.27545 59594,Roncello,1705,25,107,IT,45.60238,9.45495 59600,Ronco,1705,25,107,IT,45.52668,9.35921 59603,Ronco Briantino,1705,25,107,IT,45.66628,9.40535 59606,Roncobello,1705,25,107,IT,45.95569,9.75235 59608,Roncoferraro,1705,25,107,IT,45.13812,10.9421 59611,Roncola,1705,25,107,IT,45.76868,9.56065 59626,Rosasco,1705,25,107,IT,45.25031,8.5793 59627,Rosate,1705,25,107,IT,45.34965,9.01659 59655,Rota dImagna,1705,25,107,IT,45.83088,9.51225 59662,Rotta,1705,25,107,IT,45.16242,9.14564 59667,Rovagnate,1705,25,107,IT,45.73692,9.37111 59669,Rovato,1705,25,107,IT,45.56342,10.00213 59672,Rovellasca,1705,25,107,IT,45.66664,9.04884 59673,Rovello Porro,1705,25,107,IT,45.6521,9.0394 59674,Roverbella,1705,25,107,IT,45.26659,10.77047 59682,Rovescala,1705,25,107,IT,45.00696,9.34586 59683,Rovetta,1705,25,107,IT,45.89178,9.98212 59687,Rozzano,1705,25,107,IT,45.38193,9.1559 59694,Rudiano,1705,25,107,IT,45.48952,9.88606 59701,Ruino,1705,25,107,IT,44.91145,9.27553 59713,Sabbio Chiese,1705,25,107,IT,45.65589,10.42193 59715,Sabbioneta,1705,25,107,IT,44.99787,10.48848 59716,Sacca,1705,25,107,IT,45.89953,10.22008 59736,Sairano,1705,25,107,IT,45.13672,9.05162 59745,Sala al Barro,1705,25,107,IT,45.82057,9.3622 59742,Sala Comacina,1705,25,107,IT,45.96418,9.16604 59755,Sale Marasino,1705,25,107,IT,45.70638,10.11216 59761,Salerano sul Lambro,1705,25,107,IT,45.29657,9.38515 59768,Salice Terme,1705,25,107,IT,44.9151,9.0263 59796,Salò,1705,25,107,IT,45.60685,10.5205 59782,Saltrio,1705,25,107,IT,45.87347,8.92436 59790,Salvirola,1705,25,107,IT,45.3563,9.77924 59798,Samarate,1705,25,107,IT,45.6241,8.78507 59812,Samolaco,1705,25,107,IT,46.24249,9.39404 59820,San Bartolomeo Val Cavargna,1705,25,107,IT,46.08349,9.14913 59825,San Bassano,1705,25,107,IT,45.24378,9.80954 59828,San Benedetto Po,1705,25,107,IT,45.04612,10.93367 59838,San Biagio,1705,25,107,IT,45.09942,10.84728 59847,San Bovio-San Felice,1705,25,107,IT,45.46282,9.31263 59860,San Cassiano,1705,25,107,IT,46.27697,9.39743 59870,San Cipriano Po,1705,25,107,IT,45.10909,9.28089 59877,San Colombano al Lambro,1705,25,107,IT,45.18322,9.49028 59886,San Damiano al Colle,1705,25,107,IT,45.02713,9.3486 59888,San Daniele Po,1705,25,107,IT,45.06727,10.17637 59896,San Donato Milanese,1705,25,107,IT,45.41047,9.26838 59902,San Fedele Intelvi,1705,25,107,IT,45.96768,9.08074 59903,San Fedele Superiore,1705,25,107,IT,45.96667,9.06667 59906,San Felice,1705,25,107,IT,45.14301,10.07373 59910,San Felice del Benaco,1705,25,107,IT,45.58276,10.5538 59916,San Fermo della Battaglia,1705,25,107,IT,45.80868,9.04744 59921,San Fiorano,1705,25,107,IT,45.13815,9.72063 59934,San Genesio ed Uniti,1705,25,107,IT,45.23414,9.17997 59939,San Gervasio Bresciano,1705,25,107,IT,45.30774,10.14652 59942,San Giacomo,1705,25,107,IT,45.59379,10.47689 59947,San Giacomo delle Segnate,1705,25,107,IT,44.97418,11.03434 59944,San Giacomo Filippo,1705,25,107,IT,46.33769,9.37124 59970,San Giorgio di Lomellina,1705,25,107,IT,45.17486,8.79014 59962,San Giorgio Su Legnano,1705,25,107,IT,45.57377,8.91374 59982,San Giovanni Bianco,1705,25,107,IT,45.87342,9.6542 59994,San Giovanni del Dosso,1705,25,107,IT,44.96627,11.08114 59996,San Giovanni in Croce,1705,25,107,IT,45.07396,10.37315 60004,San Giuliano Milanese,1705,25,107,IT,45.39402,9.29109 60046,San Lorenzo di Rovetta,1705,25,107,IT,45.87971,9.97537 60053,San Mamete,1705,25,107,IT,46.02505,9.05364 60075,San Martino DallArgine,1705,25,107,IT,45.09715,10.51766 60083,San Martino del Lago,1705,25,107,IT,45.07243,10.31568 60084,San Martino della Battaglia,1705,25,107,IT,45.43832,10.60053 60095,San Martino in Strada,1705,25,107,IT,45.27497,9.52636 60077,San Martino Siccomario,1705,25,107,IT,45.1634,9.14062 60126,San Michele-San Giorgio,1705,25,107,IT,45.69594,9.05856 60132,San Nazzaro Val Cavargna,1705,25,107,IT,46.08939,9.12743 60145,San Nicolò,1705,25,107,IT,46.46299,10.40998 60154,San Paolo,1705,25,107,IT,45.37249,10.02397 60160,San Paolo dArgon,1705,25,107,IT,45.68838,9.80226 60163,San Pellegrino Terme,1705,25,107,IT,45.83443,9.66753 60225,San Rocco,1705,25,107,IT,45.00945,9.16191 60226,San Rocco al Porto,1705,25,107,IT,45.08197,9.69717 60235,San Sebastiano,1705,25,107,IT,45.65192,10.25681 60245,San Siro,1705,25,107,IT,46.06573,9.26877 60265,San Vigilio,1705,25,107,IT,45.60808,10.19442 60286,San Vittore,1705,25,107,IT,46.30799,9.3831 60287,San Vittore Olona,1705,25,107,IT,45.58577,8.94134 60291,San Zeno Naviglio,1705,25,107,IT,45.49258,10.21847 60294,San Zenone,1705,25,107,IT,45.64169,10.14685 60295,San Zenone al Lambro,1705,25,107,IT,45.32681,9.35598 60296,San Zenone al Po,1705,25,107,IT,45.10856,9.36176 60305,Sangiano,1705,25,107,IT,45.87508,8.63333 60309,Sannazzaro de Burgondi,1705,25,107,IT,45.10226,8.90635 60319,SantAgata Martesana,1705,25,107,IT,45.5222,9.38382 60333,SantAlessio Con Vialone,1705,25,107,IT,45.22237,9.22605 60358,SantAngelo Lodigiano,1705,25,107,IT,45.23526,9.40651 60359,SantAngelo Lomellina,1705,25,107,IT,45.24663,8.64317 60379,SantAntonio,1705,25,107,IT,46.4611,10.41738 60408,SantOmobono Terme,1705,25,107,IT,45.80838,9.53625 60413,Santa Brigida,1705,25,107,IT,45.98489,9.62115 60419,Santa Corinna,1705,25,107,IT,45.34018,9.08878 60421,Santa Cristina,1705,25,107,IT,45.15756,9.39976 60438,Santa Giuletta,1705,25,107,IT,45.03397,9.18126 60450,Santa Margherita,1705,25,107,IT,45.63391,9.23013 60454,Santa Margherita di Staffora,1705,25,107,IT,44.77154,9.24006 60472,Santa Maria dei Sabbioni,1705,25,107,IT,45.24386,9.83927 60475,Santa Maria della Versa,1705,25,107,IT,44.98757,9.29976 60462,Santa Maria Hoè,1705,25,107,IT,45.74428,9.37445 60513,Santo Stefano Lodigiano,1705,25,107,IT,45.11857,9.73527 60516,Santo Stefano Ticino,1705,25,107,IT,45.48635,8.91582 60548,Sarezzo,1705,25,107,IT,45.66067,10.1969 60553,Sarnico,1705,25,107,IT,45.67099,9.96152 60556,Saronno,1705,25,107,IT,45.62513,9.03517 60561,Sartirana Lomellina,1705,25,107,IT,45.11352,8.66711 60594,Saviore,1705,25,107,IT,46.08049,10.39823 60606,Scaldasole,1705,25,107,IT,45.12495,8.91029 60618,Scandolara Ravara,1705,25,107,IT,45.05309,10.30215 60619,Scandolara Ripa dOglio,1705,25,107,IT,45.22171,10.15717 60621,Scannabue-Cascine Capri,1705,25,107,IT,45.39306,9.59302 60623,Scano al Brembo,1705,25,107,IT,45.71858,9.60905 60627,Scanzorosciate,1705,25,107,IT,45.71078,9.73505 60645,Schignano,1705,25,107,IT,45.92978,9.10214 60646,Schilpario,1705,25,107,IT,46.00874,10.15534 60648,Schivenoglia,1705,25,107,IT,44.99498,11.073 60679,Secugnago,1705,25,107,IT,45.23132,9.59394 60684,Sedriano,1705,25,107,IT,45.49105,8.97161 60685,Sedrina,1705,25,107,IT,45.78067,9.62362 60691,Segrate,1705,25,107,IT,45.49185,9.29812 60698,Selino Basso,1705,25,107,IT,45.81029,9.53495 60700,Sellero,1705,25,107,IT,46.05145,10.34764 60712,Selvino,1705,25,107,IT,45.78525,9.75292 60714,Semiana,1705,25,107,IT,45.13737,8.72973 60718,Senago,1705,25,107,IT,45.57562,9.1262 60723,Seniga,1705,25,107,IT,45.24479,10.17759 60727,Senna Comasco,1705,25,107,IT,45.76298,9.11104 60728,Senna Lodigiana,1705,25,107,IT,45.15023,9.59379 60737,Seregno,1705,25,107,IT,45.65002,9.20548 60739,Sergnano,1705,25,107,IT,45.42755,9.70122 60740,Seriate,1705,25,107,IT,45.68532,9.72487 60741,Serina,1705,25,107,IT,45.87071,9.73102 60743,Serle,1705,25,107,IT,45.56137,10.36821 60744,Sermide,1705,25,107,IT,45.00349,11.2929 60747,Sernio,1705,25,107,IT,46.2242,10.20526 60749,Serone,1705,25,107,IT,46.15627,9.58171 60776,Serravalle a Po,1705,25,107,IT,45.06638,11.0818 60795,Sesto Calende,1705,25,107,IT,45.72608,8.63397 60801,Sesto ed Uniti,1705,25,107,IT,45.17647,9.91407 60799,Sesto San Giovanni,1705,25,107,IT,45.53329,9.22585 60806,Settala,1705,25,107,IT,45.45357,9.38715 60812,Settimo Milanese,1705,25,107,IT,45.47771,9.05574 60822,Seveso,1705,25,107,IT,45.6467,9.14296 60855,Silvano Pietra,1705,25,107,IT,45.03923,8.94637 60874,Sirmione,1705,25,107,IT,45.49744,10.60507 60876,Sirone,1705,25,107,IT,45.77268,9.32214 60878,Sirta,1705,25,107,IT,46.15823,9.66109 60879,Sirtori,1705,25,107,IT,45.73658,9.33085 60884,Siviano,1705,25,107,IT,45.71487,10.08026 60885,Siziano,1705,25,107,IT,45.31606,9.20357 60891,Soave,1705,25,107,IT,45.19509,10.72365 60899,Soiano,1705,25,107,IT,45.52778,10.51267 60904,Solaro,1705,25,107,IT,44.8799,9.17315 60906,Solarolo,1705,25,107,IT,45.55047,10.55489 60907,Solarolo Rainerio,1705,25,107,IT,45.08126,10.35711 60909,Solbiate,1705,25,107,IT,45.78968,8.93314 60910,Solbiate Arno,1705,25,107,IT,45.7196,8.81372 60911,Solbiate Olona,1705,25,107,IT,45.65028,8.88198 60917,Solferino,1705,25,107,IT,45.37236,10.56648 60924,Solto Collina,1705,25,107,IT,45.7823,10.02638 60925,Solza,1705,25,107,IT,45.67868,9.49075 60926,Somaglia,1705,25,107,IT,45.14947,9.63346 60928,Somma Lombardo,1705,25,107,IT,45.68213,8.70759 60934,Sommo,1705,25,107,IT,45.13316,9.08655 60936,Soncino,1705,25,107,IT,45.40033,9.86845 60937,Sondalo,1705,25,107,IT,46.32983,10.3269 60938,Sondrio,1705,25,107,IT,46.16852,9.87134 60939,Songavazzo,1705,25,107,IT,45.87949,9.98956 60940,Sonico,1705,25,107,IT,46.1664,10.35071 60953,Sordio,1705,25,107,IT,45.34217,9.36385 60954,Soresina,1705,25,107,IT,45.28819,9.85862 60961,Sorico,1705,25,107,IT,46.17259,9.38404 60963,Sorisole,1705,25,107,IT,45.7314,9.63715 60964,Sormano,1705,25,107,IT,45.87803,9.24582 60969,Sospiro,1705,25,107,IT,45.10762,10.15853 60973,Sotto il Monte Giovanni XXIII,1705,25,107,IT,45.70568,9.50345 60974,Sottocastello,1705,25,107,IT,45.6672,10.39416 60979,Sovere,1705,25,107,IT,45.81188,10.03438 60984,Sovico,1705,25,107,IT,45.64598,9.26275 61000,Spessa,1705,25,107,IT,45.11356,9.34856 61013,Spinadesco,1705,25,107,IT,45.14917,9.92637 61016,Spineda,1705,25,107,IT,45.0614,10.51165 61022,Spino dAdda,1705,25,107,IT,45.40086,9.48674 61023,Spinone al Lago,1705,25,107,IT,45.76476,9.92157 61025,Spirano,1705,25,107,IT,45.58144,9.66863 61033,Spriana,1705,25,107,IT,46.2203,9.86425 61041,Stagno Lombardo,1705,25,107,IT,45.07459,10.0889 61059,Stazzona,1705,25,107,IT,46.13879,9.27524 61068,Stezzano,1705,25,107,IT,45.64968,9.65192 61086,Stradella,1705,25,107,IT,45.07445,9.30169 61090,Stravignino,1705,25,107,IT,45.77469,10.23838 61102,Strozza,1705,25,107,IT,45.77294,9.57886 61107,Suardi,1705,25,107,IT,45.03247,8.74127 61111,Sueglio,1705,25,107,IT,46.08579,9.33374 61113,Suello,1705,25,107,IT,45.81678,9.31154 61114,Suisio,1705,25,107,IT,45.65708,9.50225 61115,Sulbiate,1705,25,107,IT,45.64047,9.42762 61117,Sulzano,1705,25,107,IT,45.68732,10.09988 61118,Sumirago,1705,25,107,IT,45.73651,8.78356 61130,Susella,1705,25,107,IT,44.91267,9.09651 61131,Sustinente,1705,25,107,IT,45.07096,11.02178 61136,Suzzara,1705,25,107,IT,44.99242,10.74407 61137,Tabiago-Cibrone,1705,25,107,IT,45.75639,9.26684 61138,Taceno,1705,25,107,IT,46.02253,9.364 61148,Taino,1705,25,107,IT,45.76249,8.61654 61152,Talamona,1705,25,107,IT,46.13849,9.61294 61154,Taleggio,1705,25,107,IT,45.89339,9.56485 61169,Tartano,1705,25,107,IT,46.10554,9.67864 61182,Tavazzano,1705,25,107,IT,45.32783,9.40473 61190,Tavernerio,1705,25,107,IT,45.80068,9.14054 61191,Tavernola Bergamasca,1705,25,107,IT,45.70846,10.04454 61192,Tavernole,1705,25,107,IT,45.74618,10.23952 61202,Teglio,1705,25,107,IT,46.17235,10.06399 61206,Telgate,1705,25,107,IT,45.62792,9.84912 61211,Temù,1705,25,107,IT,46.25022,10.46592 61230,Ternate,1705,25,107,IT,45.78673,8.69931 61233,Terno dIsola,1705,25,107,IT,45.68548,9.53095 61241,Terranova dei Passerini,1705,25,107,IT,45.21527,9.66186 61248,Terraverde-Corte Palasio,1705,25,107,IT,45.31552,9.56162 61274,Ticengo,1705,25,107,IT,45.36927,9.82766 61282,Tirano,1705,25,107,IT,46.21482,10.16335 61318,Torbole Casaglia,1705,25,107,IT,45.51279,10.117 61323,Torchione-Moia,1705,25,107,IT,46.15486,9.85996 61332,Torlino Vimercati,1705,25,107,IT,45.41747,9.59476 61335,Tornata,1705,25,107,IT,45.10437,10.43078 61337,Torno,1705,25,107,IT,45.85593,9.11707 61343,Torrazza Coste,1705,25,107,IT,44.9782,9.07613 61345,Torrazza dei Mandelli,1705,25,107,IT,45.56629,9.39921 61348,Torre Beretti,1705,25,107,IT,45.05996,8.67094 61349,Torre Boldone,1705,25,107,IT,45.71725,9.70792 61364,Torre dArese,1705,25,107,IT,45.24277,9.31735 61365,Torre dIsola,1705,25,107,IT,45.21796,9.07651 61366,Torre de Busi,1705,25,107,IT,45.77408,9.48025 61367,Torre de Negri,1705,25,107,IT,45.14966,9.33456 61369,Torre de Picenardi,1705,25,107,IT,45.14317,10.28803 61370,Torre de Roveri,1705,25,107,IT,45.69718,9.76326 61373,Torre del Mangano,1705,25,107,IT,45.25208,9.13042 61376,Torre di Santa Maria,1705,25,107,IT,46.23356,9.85228 61358,Torre Pallavicina,1705,25,107,IT,45.44638,9.87706 61393,Torrevecchia Pia,1705,25,107,IT,45.28197,9.29635 61403,Torricella del Pizzo,1705,25,107,IT,45.02023,10.29497 61402,Torricella Verzate,1705,25,107,IT,45.01996,9.17356 61423,Toscolano Maderno,1705,25,107,IT,45.63977,10.6076 61426,Tovo di SantAgata,1705,25,107,IT,46.24505,10.2467 61428,Tradate,1705,25,107,IT,45.70843,8.90763 61439,Traona,1705,25,107,IT,46.14737,9.53256 61449,Travacò Siccomario,1705,25,107,IT,45.14906,9.15965 61450,Travagliato,1705,25,107,IT,45.52391,10.08013 61451,Travedona Monate,1705,25,107,IT,45.80427,8.67143 61460,Trebbio,1705,25,107,IT,45.71289,10.46137 61468,Trecella,1705,25,107,IT,45.51498,9.47905 61471,Tregasio,1705,25,107,IT,45.67771,9.28806 61477,Tremenico,1705,25,107,IT,46.07592,9.36602 61479,Tremezzo,1705,25,107,IT,45.98423,9.21613 61485,Trenzano,1705,25,107,IT,45.47728,10.01066 61494,Trescore Balneario,1705,25,107,IT,45.69409,9.84173 61495,Trescore Cremasco,1705,25,107,IT,45.40298,9.62278 61497,Tresivio,1705,25,107,IT,46.17569,9.94255 61504,Treviglio,1705,25,107,IT,45.52081,9.59102 61508,Treviolo,1705,25,107,IT,45.67368,9.61195 61510,Trezzano Rosa,1705,25,107,IT,45.58228,9.48567 61511,Trezzano sul Naviglio,1705,25,107,IT,45.42212,9.06342 61513,Trezzo sullAdda,1705,25,107,IT,45.60523,9.51417 61514,Trezzone,1705,25,107,IT,46.17159,9.35184 61516,Tribiano,1705,25,107,IT,45.41323,9.37693 61526,Triginto,1705,25,107,IT,45.40223,9.32512 61527,Trigolo,1705,25,107,IT,45.32997,9.81415 61538,Triuggio,1705,25,107,IT,45.66144,9.26691 61545,Trivolzio,1705,25,107,IT,45.25846,9.04275 61551,Tromello,1705,25,107,IT,45.2089,8.87054 61554,Tronzano Lago Maggiore,1705,25,107,IT,46.08871,8.7331 61558,Trovo,1705,25,107,IT,45.28296,9.03545 61559,Truccazzano,1705,25,107,IT,45.48455,9.4695 61571,Turano Lodigiano,1705,25,107,IT,45.24785,9.62221 61572,Turate,1705,25,107,IT,45.65727,9.00424 61573,Turbigo,1705,25,107,IT,45.53076,8.73671 61583,Ubiale,1705,25,107,IT,45.7835,9.6165 61584,Ubiale Clanezzo,1705,25,107,IT,45.78368,9.61935 61585,Uboldo,1705,25,107,IT,45.61527,9.00394 61592,Uggiate Trevano,1705,25,107,IT,45.82338,8.95964 61599,Urago dOglio,1705,25,107,IT,45.51598,9.86966 61606,Urgnano,1705,25,107,IT,45.59943,9.69473 61613,Usmate-Velate,1705,25,107,IT,45.64798,9.36245 61638,Vaiano Cremasco,1705,25,107,IT,45.37133,9.58793 61640,Vailate,1705,25,107,IT,45.46231,9.60326 61643,Val Masino,1705,25,107,IT,46.21519,9.63804 61644,Val Rezzo,1705,25,107,IT,46.07268,9.11183 61647,Valbrona,1705,25,107,IT,45.87738,9.29884 61656,Valdisotto,1705,25,107,IT,46.43441,10.35695 61660,Valeggio,1705,25,107,IT,45.15065,8.86132 61667,Valera Fratta,1705,25,107,IT,45.25717,9.33615 61671,Valganna,1705,25,107,IT,45.90228,8.82333 61674,Valgoglio,1705,25,107,IT,45.97489,9.91355 61676,Valgreghentino,1705,25,107,IT,45.77928,9.41345 61679,VallAlta,1705,25,107,IT,45.76116,9.8264 61687,Valle Lomellina,1705,25,107,IT,45.15096,8.66957 61690,Valle Salimbene,1705,25,107,IT,45.17196,9.23445 61718,Valleve,1705,25,107,IT,46.02819,9.74375 61722,Vallio Terme,1705,25,107,IT,45.60979,10.39737 61730,Valmadrera-Caserta,1705,25,107,IT,45.84628,9.35824 61733,Valmorea,1705,25,107,IT,45.81518,8.93064 61734,Valnegra,1705,25,107,IT,45.94909,9.68935 61743,Valtorta,1705,25,107,IT,45.97685,9.53478 61748,Valvestino,1705,25,107,IT,45.76069,10.59547 61753,Vanzaghello,1705,25,107,IT,45.57964,8.78234 61754,Vanzago,1705,25,107,IT,45.52566,8.99097 61757,Vaprio dAdda,1705,25,107,IT,45.5764,9.52407 61761,Varano Borghi,1705,25,107,IT,45.77407,8.70403 61766,Varedo,1705,25,107,IT,45.59761,9.16323 61768,Varenna,1705,25,107,IT,46.01078,9.28465 61769,Varese,1705,25,107,IT,45.82058,8.82511 61775,Varzi,1705,25,107,IT,44.82297,9.19762 61780,Vassena,1705,25,107,IT,45.92998,9.28399 61789,Vedano al Lambro,1705,25,107,IT,45.60878,9.26785 61788,Vedano Olona,1705,25,107,IT,45.7757,8.88771 61790,Veddasca,1705,25,107,IT,46.07058,8.79873 61792,Vedeseta,1705,25,107,IT,45.89102,9.53927 61793,Veduggio Con Colzano,1705,25,107,IT,45.73388,9.27024 61799,Velasca,1705,25,107,IT,45.63165,9.35519 61800,Veleso,1705,25,107,IT,45.90875,9.1809 61801,Velezzo Lomellina,1705,25,107,IT,45.16336,8.73724 61803,Vellezzo Bellini,1705,25,107,IT,45.26948,9.10088 61814,Vendrogno,1705,25,107,IT,46.03439,9.32944 61816,Venegono Inferiore,1705,25,107,IT,45.73569,8.89545 61817,Venegono Superiore,1705,25,107,IT,45.75246,8.89734 61821,Veniano,1705,25,107,IT,45.71629,8.98501 61833,Verano Brianza,1705,25,107,IT,45.68868,9.22454 61836,Vercana,1705,25,107,IT,46.15949,9.33514 61837,Verceia,1705,25,107,IT,46.19869,9.45474 61839,Vercurago,1705,25,107,IT,45.80943,9.42211 61840,Verdellino,1705,25,107,IT,45.60108,9.60805 61841,Verdello,1705,25,107,IT,45.60372,9.62852 61842,Verderio Inferiore,1705,25,107,IT,45.66558,9.43345 61843,Verderio Superiore,1705,25,107,IT,45.66778,9.44035 61845,Vergano-Villa,1705,25,107,IT,45.79416,9.3746 61848,Vergiate,1705,25,107,IT,45.7221,8.6953 61851,Vermezzo,1705,25,107,IT,45.39627,8.97904 61855,Vernate,1705,25,107,IT,45.31589,9.06045 61859,Verolanuova,1705,25,107,IT,45.32834,10.07857 61860,Verolavecchia,1705,25,107,IT,45.32862,10.05493 61867,Verretto,1705,25,107,IT,45.03976,9.11315 61869,Verrua Po,1705,25,107,IT,45.10686,9.17535 61871,Vertemate Con Minoprio,1705,25,107,IT,45.72518,9.073 61872,Vertova,1705,25,107,IT,45.81,9.84944 61875,Vervio,1705,25,107,IT,46.25285,10.24056 61881,Vescovato,1705,25,107,IT,45.17419,10.16451 61887,Vestone,1705,25,107,IT,45.70783,10.39611 61888,Vestreno,1705,25,107,IT,46.08329,9.32484 61893,Vezza dOglio,1705,25,107,IT,46.23867,10.39825 61899,Viadana,1705,25,107,IT,44.93553,10.51898 61900,Viadanica,1705,25,107,IT,45.68468,9.96146 61924,Vicomoscano,1705,25,107,IT,44.97476,10.45045 61927,Vidalengo,1705,25,107,IT,45.52235,9.64128 61928,Vidardo,1705,25,107,IT,45.25667,9.40241 61930,Vidigulfo,1705,25,107,IT,45.29245,9.23498 61938,Viganò,1705,25,107,IT,45.72468,9.32494 61937,Vigano San Martino,1705,25,107,IT,45.72608,9.89616 61944,Vigevano,1705,25,107,IT,45.31407,8.85437 61947,Viggiù,1705,25,107,IT,45.87096,8.90861 61948,Vighignolo,1705,25,107,IT,45.49542,9.04308 61949,Vighizzolo,1705,25,107,IT,45.43524,10.35507 61953,Vigliano-Bettolino,1705,25,107,IT,45.43272,9.34422 61959,Vignate,1705,25,107,IT,45.49939,9.37719 61962,Vignola,1705,25,107,IT,46.08815,9.27456 61971,Vigolo,1705,25,107,IT,45.71642,10.02634 61978,Vigonzone,1705,25,107,IT,45.2735,9.3098 61980,VillAlbese,1705,25,107,IT,45.79684,9.18859 61981,Villa,1705,25,107,IT,46.2039,10.13385 61987,Villa Biscossi,1705,25,107,IT,45.09066,8.78715 61989,Villa Carcina,1705,25,107,IT,45.63329,10.19556 61995,Villa Cortese,1705,25,107,IT,45.56666,8.88712 62032,Villa dAdda,1705,25,107,IT,45.71398,9.46165 62034,Villa dAlmè,1705,25,107,IT,45.74843,9.61702 62036,Villa dOgna,1705,25,107,IT,45.90469,9.93085 62037,Villa dOneta,1705,25,107,IT,45.87074,9.81929 62041,Villa di Chiavenna,1705,25,107,IT,46.33069,9.48114 62042,Villa di Serio,1705,25,107,IT,45.7226,9.73522 61999,Villa Fornace,1705,25,107,IT,44.97194,9.25215 62000,Villa Guardia,1705,25,107,IT,45.77505,9.02321 62008,Villa Pedergnano,1705,25,107,IT,45.58528,9.99381 62010,Villa Poma,1705,25,107,IT,45.00238,11.1145 62013,Villa Raverio,1705,25,107,IT,45.69189,9.26239 62049,Villachiara,1705,25,107,IT,45.35445,9.93081 62069,Villaggio del Sole,1705,25,107,IT,45.61398,9.10725 62067,Villaggio Residenziale,1705,25,107,IT,45.52826,9.46737 62094,Villanova,1705,25,107,IT,45.64027,9.39187 62106,Villanova dArdenghi,1705,25,107,IT,45.17049,9.04078 62110,Villanova del Sillaro,1705,25,107,IT,45.23797,9.48186 62113,Villanterio,1705,25,107,IT,45.2178,9.361 62114,Villanuova,1705,25,107,IT,45.44245,9.8669 62115,Villanuova sul Clisi,1705,25,107,IT,45.59938,10.45275 62119,Villapinta,1705,25,107,IT,46.17508,9.6795 62134,Villasanta,1705,25,107,IT,45.60634,9.30797 62140,Villassio,1705,25,107,IT,45.86313,9.84466 62153,Villimpenta,1705,25,107,IT,45.14111,11.0317 62154,Villongo,1705,25,107,IT,45.66939,9.93076 62156,Vilminore,1705,25,107,IT,45.99795,10.09531 62157,Vilminore di Scalve,1705,25,107,IT,45.99819,10.09376 62158,Vimercate,1705,25,107,IT,45.61545,9.36801 62159,Vimodrone,1705,25,107,IT,45.51461,9.28772 62167,Vione,1705,25,107,IT,46.24808,10.44842 62170,Visano,1705,25,107,IT,45.31684,10.37092 62176,Vistarino,1705,25,107,IT,45.21077,9.30825 62187,Vittuone,1705,25,107,IT,45.48792,8.95141 62194,Vizzola Ticino,1705,25,107,IT,45.62615,8.69651 62195,Vizzolo Predabissi,1705,25,107,IT,45.35587,9.34815 62197,Vobarno,1705,25,107,IT,45.64153,10.49866 62201,Voghera,1705,25,107,IT,44.99151,9.01175 62207,Volongo,1705,25,107,IT,45.21155,10.30242 62209,Volpara,1705,25,107,IT,44.95379,9.2975 62213,Volta Mantovana,1705,25,107,IT,45.32192,10.65891 62219,Voltido,1705,25,107,IT,45.11197,10.33298 62234,Zandobbio,1705,25,107,IT,45.68613,9.85785 62235,Zanica,1705,25,107,IT,45.64088,9.68566 62238,Zavattarello,1705,25,107,IT,44.86766,9.26662 62239,Zeccone,1705,25,107,IT,45.25787,9.20115 62242,Zelbio,1705,25,107,IT,45.90458,9.18054 62243,Zelo Buon Persico,1705,25,107,IT,45.4117,9.43171 62244,Zelo Surrigone,1705,25,107,IT,45.38767,8.98504 62245,Zeme,1705,25,107,IT,45.19686,8.66733 62246,Zenevredo,1705,25,107,IT,45.05391,9.32667 62250,Zerbo,1705,25,107,IT,45.11046,9.39606 62251,Zerbolò,1705,25,107,IT,45.20676,9.01441 62260,Zibido San Giacomo,1705,25,107,IT,45.36041,9.11119 62262,Zinasco Vecchio,1705,25,107,IT,45.12836,9.02975 62265,Zoccorino-Vergo,1705,25,107,IT,45.69735,9.25377 62266,Zogno,1705,25,107,IT,45.79378,9.65992 62273,Zone,1705,25,107,IT,45.76339,10.11586 62276,Zorlesco,1705,25,107,IT,45.20035,9.61603 135267,Acqualagna,1670,57,107,IT,43.62606,12.67596 135274,Acquasanta Terme,1670,57,107,IT,42.77084,13.41418 135278,Acquaviva Picena,1670,57,107,IT,42.94037,13.82227 135320,Agugliano,1670,57,107,IT,43.54368,13.38574 135438,Altidona,1670,57,107,IT,43.10787,13.79617 135457,Amandola,1670,57,107,IT,42.97826,13.35453 135479,Ancona,1670,57,107,IT,43.5942,13.50337 135531,Apecchio,1670,57,107,IT,43.55914,12.42163 135533,Apiro,1670,57,107,IT,43.3929,13.13045 135536,Appignano,1670,57,107,IT,43.36276,13.34768 135537,Appignano del Tronto,1670,57,107,IT,42.89805,13.6622 135564,Arcevia,1670,57,107,IT,43.50177,12.945 135631,Arquata del Tronto,1670,57,107,IT,42.7717,13.29389 135655,Ascoli Piceno,1670,57,107,IT,42.85351,13.57395 135684,Auditore,1670,57,107,IT,43.82124,12.57165 135798,Balzo,1670,57,107,IT,42.84199,13.33234 135819,Barbara,1670,57,107,IT,43.58036,13.02736 135835,Barchi,1670,57,107,IT,43.6728,12.92823 135928,Belforte,1670,57,107,IT,43.71676,12.37575 135931,Belforte del Chienti,1670,57,107,IT,43.16426,13.24323 135946,Bellocchi,1670,57,107,IT,43.79564,13.00565 135954,Belmonte Piceno,1670,57,107,IT,43.09175,13.53938 135964,Belvedere Ostrense,1670,57,107,IT,43.57896,13.16724 136111,Bolognola,1670,57,107,IT,42.99319,13.2268 136158,Borghetto,1670,57,107,IT,43.598,13.29205 136175,Borgo Massano,1670,57,107,IT,43.82495,12.67961 136177,Borgo Pace,1670,57,107,IT,43.65808,12.29317 136188,Borgo Santa Maria,1670,57,107,IT,43.87582,12.80235 136190,Borgo Stazione,1670,57,107,IT,43.28461,13.6442 136260,Bottega,1670,57,107,IT,43.84523,12.74999 136467,Cagli,1670,57,107,IT,43.54771,12.65229 136508,Calcinelli,1670,57,107,IT,43.75398,12.91959 136512,Caldarola,1670,57,107,IT,43.14282,13.22367 136577,Camerano,1670,57,107,IT,43.52774,13.55257 136582,Camerata Picena,1670,57,107,IT,43.57758,13.35196 136584,Camerino,1670,57,107,IT,43.13866,13.06785 136621,Campiglione,1670,57,107,IT,43.1763,13.67043 136641,Campocavallo,1670,57,107,IT,43.4612,13.49679 136652,Campofilone,1670,57,107,IT,43.081,13.82153 136678,Camporotondo di Fiastrone,1670,57,107,IT,43.13203,13.26632 136692,Canavaccio,1670,57,107,IT,43.69376,12.69863 136748,Cantiano,1670,57,107,IT,43.47082,12.62868 136780,Capodarco,1670,57,107,IT,43.18985,13.75935 136796,Cappone,1670,57,107,IT,43.83071,12.74458 136837,Carassai,1670,57,107,IT,43.03303,13.68761 136909,Carpegna,1670,57,107,IT,43.7811,12.33543 136940,Cartoceto,1670,57,107,IT,43.76566,12.88346 137050,Cascinare,1670,57,107,IT,43.26434,13.71181 137067,Casette dEte,1670,57,107,IT,43.25385,13.68319 137066,Casette Verdini,1670,57,107,IT,43.25104,13.40156 137071,Casine,1670,57,107,IT,43.63165,13.14425 137072,Casinina,1670,57,107,IT,43.81667,12.58333 137171,Castel di Lama,1670,57,107,IT,42.86435,13.71929 137178,Castelbellino,1670,57,107,IT,43.48676,13.14467 137192,Castelfidardo,1670,57,107,IT,43.45916,13.55044 137227,Castelleone di Suasa,1670,57,107,IT,43.60816,12.97796 137308,Castelplanio,1670,57,107,IT,43.4942,13.0818 137310,Castelraimondo,1670,57,107,IT,43.20853,13.05486 137312,Castelsantangelo sul Nera,1670,57,107,IT,42.89379,13.15462 137359,Castignano,1670,57,107,IT,42.93935,13.62514 137370,Castorano,1670,57,107,IT,42.89779,13.72967 137496,Centinarola,1670,57,107,IT,43.83117,12.98962 137498,Centobuchi,1670,57,107,IT,42.89521,13.84809 137568,Cerreto dEsi,1670,57,107,IT,43.31668,12.98771 137618,Cessapalombo,1670,57,107,IT,43.10825,13.25758 137651,Chiaravalle,1670,57,107,IT,43.60114,13.32511 137732,Cingoli,1670,57,107,IT,43.37573,13.20787 137790,Civitanova Alta,1670,57,107,IT,43.31619,13.67978 137791,Civitanova Marche,1670,57,107,IT,43.30491,13.72068 137848,Colbordolo,1670,57,107,IT,43.82006,12.72105 137899,Colli del Tronto,1670,57,107,IT,42.8769,13.74745 137909,Colmurano,1670,57,107,IT,43.16485,13.35908 137951,Comunanza,1670,57,107,IT,42.95719,13.41341 138015,Corinaldo,1670,57,107,IT,43.64107,13.06004 138043,Corridonia,1670,57,107,IT,43.24677,13.5069 138087,Cossignano,1670,57,107,IT,42.98355,13.69026 138181,Cuccurano,1670,57,107,IT,43.79311,12.95927 138196,Cupra Marittima,1670,57,107,IT,43.01905,13.86171 138197,Cupramontana,1670,57,107,IT,43.44975,13.11312 138379,Esanatoglia,1670,57,107,IT,43.25248,12.9493 138393,Fabriano,1670,57,107,IT,43.33941,12.90327 138416,Falconara Marittima,1670,57,107,IT,43.62558,13.39954 138421,Falerone,1670,57,107,IT,43.10429,13.47189 138430,Fanano,1670,57,107,IT,43.94296,12.74828 138433,Fano,1670,57,107,IT,43.84052,13.01665 138478,Fenile,1670,57,107,IT,43.84126,12.96747 138482,Fermignano,1670,57,107,IT,43.69311,12.65437 138483,Fermo,1670,57,107,IT,43.16296,13.72274 138533,Filottrano,1670,57,107,IT,43.43553,13.35141 138581,Folignano,1670,57,107,IT,42.8207,13.63273 138618,Force,1670,57,107,IT,42.96095,13.48768 138681,Fossombrone,1670,57,107,IT,43.69017,12.81173 138697,Francavilla dEte,1670,57,107,IT,43.18837,13.54033 138724,Fratte Rosa,1670,57,107,IT,43.63346,12.90236 138739,Frontino,1670,57,107,IT,43.76456,12.37675 138740,Frontone,1670,57,107,IT,43.51478,12.73791 138770,Gabicce Mare,1670,57,107,IT,43.96471,12.75641 138785,Gagliole,1670,57,107,IT,43.23812,13.06782 138815,Gallo,1670,57,107,IT,43.78636,12.71334 138896,Genga,1670,57,107,IT,43.43032,12.93549 139049,Gradara,1670,57,107,IT,43.93858,12.76965 139123,Grottammare,1670,57,107,IT,42.98182,13.86765 139124,Grottazzolina,1670,57,107,IT,43.1188,13.60691 139145,Gualdo,1670,57,107,IT,43.06585,13.34328 139247,Isola del Piano,1670,57,107,IT,43.73776,12.78406 139278,Jesi,1670,57,107,IT,43.52142,13.24368 139367,Lapedona,1670,57,107,IT,43.1092,13.77063 139428,Le Grazie di Ancona,1670,57,107,IT,43.60081,13.51529 139505,Lido di Fermo,1670,57,107,IT,43.20556,13.78467 139609,Loreto,1670,57,107,IT,43.43617,13.61232 139611,Loreto Stazione,1670,57,107,IT,43.44792,13.62016 139614,Loro Piceno,1670,57,107,IT,43.16442,13.41162 139640,Lucrezia,1670,57,107,IT,43.7731,12.93995 139658,Lunano,1670,57,107,IT,43.73214,12.44326 139696,Macerata,1670,57,107,IT,43.29789,13.45293 139698,Macerata Feltria,1670,57,107,IT,43.80285,12.44204 139701,Macine-Borgo Loreto,1670,57,107,IT,43.48611,13.08725 139729,Magliano di Tenna,1670,57,107,IT,43.13795,13.58718 139748,Maiolati Spontini,1670,57,107,IT,43.4764,13.11991 139775,Maltignano,1670,57,107,IT,42.83225,13.68799 139837,Marcelli,1670,57,107,IT,43.49204,13.62545 139875,Marina di Altidona,1670,57,107,IT,43.10602,13.83454 139890,Marina di Montemarciano,1670,57,107,IT,43.65063,13.3364 139914,Marotta,1670,57,107,IT,43.76397,13.14772 139921,Marsia,1670,57,107,IT,42.8603,13.47619 139967,Massa,1670,57,107,IT,43.18803,12.93142 139968,Massa Fermana,1670,57,107,IT,43.14691,13.47597 139986,Massignano,1670,57,107,IT,43.05062,13.79798 139992,Matelica,1670,57,107,IT,43.25788,13.0075 140071,Mercatale,1670,57,107,IT,43.78276,12.48478 140074,Mercatello sul Metauro,1670,57,107,IT,43.64677,12.33619 140075,Mercatino Conca,1670,57,107,IT,43.87016,12.49115 140079,Mercato Vecchio,1670,57,107,IT,43.80421,12.37653 140083,Mergo,1670,57,107,IT,43.4735,13.03509 140198,Mogliano,1670,57,107,IT,43.1875,13.49123 140203,Moie,1670,57,107,IT,43.50366,13.13275 140236,Mombaroccio,1670,57,107,IT,43.79506,12.85476 140273,Mondavio,1670,57,107,IT,43.67468,12.96601 140274,Mondolfo,1670,57,107,IT,43.74529,13.10229 140298,Monsampietro Morico,1670,57,107,IT,43.06775,13.55568 140299,Monsampolo del Tronto,1670,57,107,IT,42.89749,13.79349 140300,Monsano,1670,57,107,IT,43.56221,13.25186 140335,Montalto delle Marche,1670,57,107,IT,42.98964,13.6082 140345,Montappone,1670,57,107,IT,43.13617,13.46932 140355,Monte Cerignone,1670,57,107,IT,43.83983,12.41427 140358,Monte Giberto,1670,57,107,IT,43.09092,13.63133 140360,Monte Grimano Terme,1670,57,107,IT,43.86766,12.47125 140363,Monte Porzio,1670,57,107,IT,43.69116,13.04686 140365,Monte Rinaldo,1670,57,107,IT,43.02825,13.58198 140366,Monte Roberto,1670,57,107,IT,43.48056,13.13797 140373,Monte San Giusto,1670,57,107,IT,43.23565,13.59316 140375,Monte San Martino,1670,57,107,IT,43.03219,13.44033 140376,Monte San Pietrangeli,1670,57,107,IT,43.18959,13.57718 140378,Monte San Vito,1670,57,107,IT,43.60056,13.26817 140381,Monte Urano,1670,57,107,IT,43.19039,13.6618 140382,Monte Vidon Combatte,1670,57,107,IT,43.04895,13.63119 140383,Monte Vidon Corrado,1670,57,107,IT,43.12087,13.48931 140398,Montecalvo in Foglia,1670,57,107,IT,43.81099,12.63161 140401,Montecarotto,1670,57,107,IT,43.52828,13.06656 140402,Montecassiano,1670,57,107,IT,43.36518,13.4395 140417,Monteciccardo,1670,57,107,IT,43.82415,12.80344 140423,Montecosaro,1670,57,107,IT,43.31619,13.63762 140427,Montedinove,1670,57,107,IT,42.97262,13.58972 140431,Montefalcone Appennino,1670,57,107,IT,42.99005,13.45688 140434,Montefano,1670,57,107,IT,43.40982,13.4369 140435,Montefelcino,1670,57,107,IT,43.73476,12.83396 140440,Montefiore dellAso,1670,57,107,IT,43.05276,13.75518 140446,Montefortino,1670,57,107,IT,42.94351,13.34417 140455,Montegiorgio,1670,57,107,IT,43.12988,13.53925 140456,Montegranaro,1670,57,107,IT,43.23099,13.63047 140463,Montelabbate,1670,57,107,IT,43.84732,12.78763 140470,Monteleone di Fermo,1670,57,107,IT,43.04785,13.52948 140479,Montelparo,1670,57,107,IT,43.01755,13.53698 140482,Montelupone,1670,57,107,IT,43.3427,13.57074 140484,Montemaggiore al Metauro,1670,57,107,IT,43.73666,12.94536 140488,Montemarciano,1670,57,107,IT,43.63847,13.30801 140497,Montemonaco,1670,57,107,IT,42.89871,13.33018 140509,Monteprandone,1670,57,107,IT,42.9205,13.8391 140512,Monterado,1670,57,107,IT,43.69686,13.09056 140528,Monterubbiano,1670,57,107,IT,43.0856,13.71911 140573,Montignano-Marzocca,1670,57,107,IT,43.67451,13.29093 140589,Montottone,1670,57,107,IT,43.06205,13.59009 140610,Moresco,1670,57,107,IT,43.08666,13.73041 140633,Morro dAlba,1670,57,107,IT,43.6,13.21331 140636,Morrovalle,1670,57,107,IT,43.3183,13.59535 140676,Muccia,1670,57,107,IT,43.08232,13.04323 140847,Numana,1670,57,107,IT,43.51136,13.62118 140875,Offagna,1670,57,107,IT,43.52588,13.44076 140877,Offida,1670,57,107,IT,42.93499,13.69773 140944,Orciano di Pesaro,1670,57,107,IT,43.68938,12.97206 140984,Ortezzano,1670,57,107,IT,43.03042,13.60531 141007,Osimo,1670,57,107,IT,43.48539,13.48222 141034,Osteria,1670,57,107,IT,43.5495,13.02188 141042,Ostra,1670,57,107,IT,43.61611,13.15849 141043,Ostra Vetere,1670,57,107,IT,43.60336,13.0615 141083,Padiglione,1670,57,107,IT,43.469,13.46261 58206,Pagliare,1670,57,107,IT,42.86906,13.76906 58259,Palmiano,1670,57,107,IT,42.89946,13.45937 58333,Passo di Treia,1670,57,107,IT,43.28647,13.33246 58331,Passo Ripe,1670,57,107,IT,43.65567,13.12196 58376,Pedaso,1670,57,107,IT,43.09839,13.84083 58385,Peglio,1670,57,107,IT,43.69646,12.49785 58402,Penna San Giovanni,1670,57,107,IT,43.05608,13.42539 58424,Pergola,1670,57,107,IT,43.55485,12.83633 58447,Pesaro,1670,57,107,IT,43.90921,12.9164 58481,Petriano,1670,57,107,IT,43.77935,12.73214 58483,Petriolo,1670,57,107,IT,43.22141,13.46173 58484,Petritoli,1670,57,107,IT,43.06809,13.66385 58505,Piagge,1670,57,107,IT,43.73381,12.96851 58518,Piandimeleto,1670,57,107,IT,43.7232,12.40855 58519,Piane,1670,57,107,IT,43.09703,13.49502 58521,Piane di Montegiorgio,1670,57,107,IT,43.11587,13.56669 58522,Piane di Morro,1670,57,107,IT,42.82317,13.653 58524,Pianello,1670,57,107,IT,43.6262,13.13068 58526,Pianello Vallesina,1670,57,107,IT,43.48817,13.16188 58559,Piattoni-Villa SantAntonio,1670,57,107,IT,42.8663,13.7112 58584,Pie del Colle,1670,57,107,IT,43.02984,13.17535 58585,Pie del Sasso,1670,57,107,IT,42.99429,12.99889 58594,Piediripa,1670,57,107,IT,43.27751,13.48712 58604,Pietra la Croce,1670,57,107,IT,43.60224,13.53887 58641,Pieve Torina,1670,57,107,IT,43.04299,13.04769 58656,Pievebovigliana,1670,57,107,IT,43.06287,13.08375 58681,Pinocchio di Ancona,1670,57,107,IT,43.58986,13.49413 58684,Piobbico,1670,57,107,IT,43.58819,12.50962 58693,Pioraco,1670,57,107,IT,43.18074,12.97676 58763,Poggio San Marcello,1670,57,107,IT,43.51116,13.07367 58764,Poggio San Vicino,1670,57,107,IT,43.37466,13.07964 58798,Pollenza,1670,57,107,IT,43.26595,13.34788 58806,Polverigi,1670,57,107,IT,43.52876,13.38294 58898,Ponzano di Fermo,1670,57,107,IT,43.1039,13.65979 58932,Porto Potenza Picena,1670,57,107,IT,43.35751,13.69746 58933,Porto Recanati,1670,57,107,IT,43.43296,13.66165 58934,Porto San Giorgio,1670,57,107,IT,43.17784,13.79411 58935,Porto SantElpidio,1670,57,107,IT,43.25297,13.7597 58953,Posatora,1670,57,107,IT,43.59917,13.48984 58966,Potenza Picena,1670,57,107,IT,43.36635,13.62249 59101,Province of Fermo,1670,57,107,IT,43.16537,13.72424 59108,Provincia di Ancona,1670,57,107,IT,43.55,13.16667 59109,Provincia di Ascoli Piceno,1670,57,107,IT,42.88443,13.55306 59146,Provincia di Macerata,1670,57,107,IT,43.2,13.16667 59159,Provincia di Pesaro e Urbino,1670,57,107,IT,43.66667,12.63333 59283,Rapagnano,1670,57,107,IT,43.15985,13.58873 59310,Recanati,1670,57,107,IT,43.40381,13.55379 59388,Rio Salso-Case Bernardi,1670,57,107,IT,43.83439,12.69031 59408,Ripatransone,1670,57,107,IT,43.00015,13.76203 59409,Ripe,1670,57,107,IT,43.66906,13.10586 59410,Ripe San Ginesio,1670,57,107,IT,43.14202,13.36724 59630,Rosciano,1670,57,107,IT,43.8162,12.99992 59644,Rosora,1670,57,107,IT,43.48336,13.06819 59657,Rotella,1670,57,107,IT,42.95435,13.55849 59781,Saltara,1670,57,107,IT,43.75252,12.89853 59832,San Benedetto del Tronto,1670,57,107,IT,42.9568,13.87676 59840,San Biagio,1670,57,107,IT,43.51597,13.49643 59882,San Costanzo,1670,57,107,IT,43.7672,13.07306 59950,San Ginesio,1670,57,107,IT,43.10752,13.32121 59972,San Giorgio di Pesaro,1670,57,107,IT,43.72248,12.97969 60049,San Lorenzo in Campo,1670,57,107,IT,43.60149,12.94398 60058,San Marcello,1670,57,107,IT,43.57526,13.20827 60115,San Michele,1670,57,107,IT,43.66218,12.99797 60162,San Paolo di Jesi,1670,57,107,IT,43.45456,13.17277 60243,San Severino Marche,1670,57,107,IT,43.23028,13.1799 60256,San Tommaso Tre Archi,1670,57,107,IT,43.22771,13.77503 60289,San Vittoria in Matenano,1670,57,107,IT,43.01975,13.49618 60368,SantAngelo in Lizzola,1670,57,107,IT,43.82696,12.80076 60369,SantAngelo in Pontano,1670,57,107,IT,43.0978,13.3969 60370,SantAngelo in Vado,1670,57,107,IT,43.66526,12.41757 60399,SantElpidio a Mare,1670,57,107,IT,43.23024,13.68819 60406,SantIppolito,1670,57,107,IT,43.67972,12.87581 60458,Santa Maria Apparente,1670,57,107,IT,43.29661,13.69223 60469,Santa Maria Nuova,1670,57,107,IT,43.49164,13.3237 60552,Sarnano,1670,57,107,IT,43.03475,13.29818 60574,Sassocorvaro,1670,57,107,IT,43.78266,12.4991 60575,Sassofeltrio,1670,57,107,IT,43.89212,12.50974 60576,Sassoferrato,1670,57,107,IT,43.43109,12.8566 60686,Sefro,1670,57,107,IT,43.14743,12.94859 60724,Senigallia,1670,57,107,IT,43.71626,13.20882 60756,Serra de Conti,1670,57,107,IT,43.54196,13.03566 60753,Serra San Quirico,1670,57,107,IT,43.44637,13.02266 60754,Serra SantAbbondio,1670,57,107,IT,43.49155,12.77409 60767,Serrapetrona,1670,57,107,IT,43.17671,13.18981 60777,Serravalle di Chienti,1670,57,107,IT,43.07185,12.95217 60784,Serrungarina,1670,57,107,IT,43.74666,12.87486 60786,Servigliano,1670,57,107,IT,43.07993,13.49268 60829,Sforzacosta,1670,57,107,IT,43.25676,13.42284 60875,Sirolo,1670,57,107,IT,43.52246,13.61498 60889,Smerillo,1670,57,107,IT,43.00515,13.44498 61019,Spinetoli,1670,57,107,IT,42.88984,13.76497 61039,Staffolo,1670,57,107,IT,43.43326,13.18487 61051,Stazione,1670,57,107,IT,43.50046,13.15149 61061,Stella,1670,57,107,IT,42.88698,13.80948 61084,Strada,1670,57,107,IT,43.40337,13.22077 61188,Tavernelle,1670,57,107,IT,43.73203,12.88349 61196,Tavoleto,1670,57,107,IT,43.84402,12.59418 61197,Tavullia,1670,57,107,IT,43.89791,12.75108 61298,Tolentino,1670,57,107,IT,43.20918,13.28524 61362,Torre San Patrizio,1670,57,107,IT,43.18311,13.61113 61459,Trebbio,1670,57,107,IT,43.03685,13.15394 61475,Treia,1670,57,107,IT,43.3085,13.31036 61547,Trodica,1670,57,107,IT,43.27458,13.59369 61557,Troviggiano,1670,57,107,IT,43.37868,13.25022 61602,Urbania,1670,57,107,IT,43.66832,12.52093 61604,Urbino,1670,57,107,IT,43.72621,12.63633 61605,Urbisaglia,1670,57,107,IT,43.19304,13.37474 61700,Valle e Castello,1670,57,107,IT,43.0374,13.08742 61810,Venarotta,1670,57,107,IT,42.88266,13.49157 61991,Villa Ceccolini,1670,57,107,IT,43.86481,12.83605 62006,Villa Musone,1670,57,107,IT,43.44624,13.60312 62009,Villa Pigna,1670,57,107,IT,42.83324,13.63446 62011,Villa Potenza,1670,57,107,IT,43.32149,13.42649 62016,Villa San Filippo,1670,57,107,IT,43.25981,13.59337 62019,Villa San Giuseppe,1670,57,107,IT,42.86862,13.74481 62070,Villagrande,1670,57,107,IT,43.84136,12.35994 62092,Villanova,1670,57,107,IT,43.73926,12.93529 62175,Visso,1670,57,107,IT,42.93351,13.08051 62271,Zona Industriale,1670,57,107,IT,43.26155,13.48834 135277,Acquaviva Collecroce,1695,67,107,IT,41.86624,14.74733 135280,Acquaviva dIsernia,1695,67,107,IT,41.67132,14.1477 135310,Agnone,1695,67,107,IT,41.81043,14.37524 135764,Bagnoli del Trigno,1695,67,107,IT,41.70217,14.45861 135811,Baranello,1695,67,107,IT,41.52722,14.558 135955,Belmonte del Sannio,1695,67,107,IT,41.82352,14.42333 136099,Bojano,1695,67,107,IT,41.4853,14.47075 136135,Bonefro,1695,67,107,IT,41.70507,14.93439 136431,Busso,1695,67,107,IT,41.55413,14.56103 136638,Campobasso,1695,67,107,IT,41.55947,14.66737 136642,Campochiaro,1695,67,107,IT,41.44827,14.50828 136647,Campodipietra,1695,67,107,IT,41.5574,14.74445 136662,Campolieto,1695,67,107,IT,41.63336,14.76694 136668,Campomarino,1695,67,107,IT,41.95692,15.03546 136744,Cantalupo nel Sannio,1695,67,107,IT,41.52182,14.39292 136797,Capracotta,1695,67,107,IT,41.83326,14.26581 136905,Carovilli,1695,67,107,IT,41.71348,14.29403 136922,Carpinone,1695,67,107,IT,41.59003,14.32436 136953,Casacalenda,1695,67,107,IT,41.73824,14.84734 136970,Casalciprano,1695,67,107,IT,41.58037,14.52835 137164,Castel del Giudice,1695,67,107,IT,41.85488,14.23155 137156,Castel San Vincenzo,1695,67,107,IT,41.65543,14.06178 137182,Castelbottaccio,1695,67,107,IT,41.75329,14.70616 137249,Castellino del Biferno,1695,67,107,IT,41.7016,14.73179 137272,Castelmauro,1695,67,107,IT,41.82846,14.71066 137306,Castelpetroso,1695,67,107,IT,41.56027,14.34637 137307,Castelpizzuto,1695,67,107,IT,41.52128,14.29205 137326,Castelverrino,1695,67,107,IT,41.76713,14.39756 137386,Castropignano,1695,67,107,IT,41.61788,14.55856 137521,Cercemaggiore,1695,67,107,IT,41.4613,14.72402 137523,Cercepiccola,1695,67,107,IT,41.45982,14.66487 137576,Cerro al Volturno,1695,67,107,IT,41.65418,14.10321 137657,Chiauci,1695,67,107,IT,41.67791,14.38393 137788,Civitacampomarano,1695,67,107,IT,41.78032,14.68919 137792,Civitanova del Sannio,1695,67,107,IT,41.66829,14.40285 137869,Colle dAnchise,1695,67,107,IT,41.50986,14.51873 137895,Colletorto,1695,67,107,IT,41.66165,14.96773 137898,Colli a Volturno,1695,67,107,IT,41.60039,14.10301 137953,Conca Casale,1695,67,107,IT,41.49512,14.00682 138346,Duronia,1695,67,107,IT,41.65786,14.46015 138491,Ferrazzano,1695,67,107,IT,41.53033,14.67223 138531,Filignano,1695,67,107,IT,41.54578,14.05757 138633,Forlì del Sannio,1695,67,107,IT,41.69593,14.17952 138652,Fornelli,1695,67,107,IT,41.60678,14.14041 138672,Fossalto,1695,67,107,IT,41.67293,14.54573 138742,Frosolone,1695,67,107,IT,41.60006,14.44578 138830,Gambatesa,1695,67,107,IT,41.50861,14.9124 138961,Gildone,1695,67,107,IT,41.50901,14.7402 139164,Guardialfiera,1695,67,107,IT,41.80423,14.79293 139165,Guardiaregia,1695,67,107,IT,41.43436,14.54344 139175,Guglionesi,1695,67,107,IT,41.92093,14.916 139233,Isernia,1695,67,107,IT,41.59603,14.23399 139274,Jelsi,1695,67,107,IT,41.51704,14.7979 139376,Larino,1695,67,107,IT,41.80449,14.91843 139527,Limosano,1695,67,107,IT,41.67554,14.6223 139588,Longano,1695,67,107,IT,41.52199,14.24665 139636,Lucito,1695,67,107,IT,41.73193,14.68723 139664,Lupara,1695,67,107,IT,41.76141,14.7339 139692,Macchia dIsernia,1695,67,107,IT,41.56057,14.17015 139691,Macchia Valfortore,1695,67,107,IT,41.59487,14.91238 139693,Macchiagodena,1695,67,107,IT,41.55899,14.41049 139715,Mafalda,1695,67,107,IT,41.94308,14.7161 139998,Matrice,1695,67,107,IT,41.61878,14.70977 140155,Mimosa-Poggio Verde-Nuova Comunità,1695,67,107,IT,41.53871,14.66879 140171,Mirabello Sannitico,1695,67,107,IT,41.51628,14.67315 140173,Miranda,1695,67,107,IT,41.64434,14.24643 140227,Molise,1695,67,107,IT,41.63147,14.49252 140248,Monacilioni,1695,67,107,IT,41.61077,14.81 140307,Montagano,1695,67,107,IT,41.64538,14.67405 140346,Montaquila,1695,67,107,IT,41.56502,14.11333 140418,Montecilfone,1695,67,107,IT,41.90163,14.8368 140433,Montefalcone nel Sannio,1695,67,107,IT,41.86663,14.63823 140478,Montelongo,1695,67,107,IT,41.73705,14.95034 140496,Montemitro,1695,67,107,IT,41.88813,14.64666 140503,Montenero di Bisaccia,1695,67,107,IT,41.96437,14.78103 140502,Montenero Val Cocchiara,1695,67,107,IT,41.71683,14.06941 140518,Monteroduni,1695,67,107,IT,41.5224,14.17641 140584,Montorio Nei Frentani,1695,67,107,IT,41.75884,14.93314 140635,Morrone del Sannio,1695,67,107,IT,41.71107,14.78087 140938,Oratino,1695,67,107,IT,41.58598,14.59463 58224,Palata,1695,67,107,IT,41.8879,14.78778 58454,Pesche,1695,67,107,IT,41.60552,14.2762 58462,Pescolanciano,1695,67,107,IT,41.67972,14.33658 58464,Pescopennataro,1695,67,107,IT,41.87777,14.29398 58473,Petacciato,1695,67,107,IT,42.00827,14.86026 58480,Petrella Tifernina,1695,67,107,IT,41.69135,14.69751 58492,Pettoranello del Molise,1695,67,107,IT,41.57331,14.27839 58605,Pietrabbondante,1695,67,107,IT,41.74527,14.3848 58608,Pietracatella,1695,67,107,IT,41.58064,14.87298 58609,Pietracupa,1695,67,107,IT,41.68253,14.51933 58729,Pizzone,1695,67,107,IT,41.67332,14.03666 58765,Poggio Sannita,1695,67,107,IT,41.77939,14.41485 58943,Portocannone,1695,67,107,IT,41.91441,15.00845 58980,Pozzilli,1695,67,107,IT,41.51142,14.06252 59121,Provincia di Campobasso,1695,67,107,IT,41.7007,14.75848 59138,Provincia di Isernia,1695,67,107,IT,41.66667,14.25 59191,Provvidenti,1695,67,107,IT,41.71795,14.82349 59365,Riccia,1695,67,107,IT,41.48314,14.83181 59396,Rionero Sannitico,1695,67,107,IT,41.71219,14.13917 59401,Ripabottoni,1695,67,107,IT,41.68996,14.80866 59403,Ripalimosani,1695,67,107,IT,41.61064,14.66306 59507,Roccamandolfi,1695,67,107,IT,41.49583,14.35217 59522,Roccasicura,1695,67,107,IT,41.69676,14.23065 59530,Roccavivara,1695,67,107,IT,41.83336,14.60013 59543,Rocchetta a Volturno,1695,67,107,IT,41.62582,14.08902 59539,Rocchetta Nuova,1695,67,107,IT,41.62375,14.08574 59658,Rotello,1695,67,107,IT,41.74776,15.00608 59753,Salcito,1695,67,107,IT,41.7464,14.51085 59845,San Biase,1695,67,107,IT,41.71526,14.59049 59911,San Felice del Molise,1695,67,107,IT,41.89,14.70088 59946,San Giacomo degli Schiavoni,1695,67,107,IT,41.96234,14.94481 59998,San Giovanni in Galdo,1695,67,107,IT,41.5911,14.75202 60007,San Giuliano del Sannio,1695,67,107,IT,41.45752,14.64169 60008,San Giuliano di Puglia,1695,67,107,IT,41.68796,14.96231 60093,San Martino in Pensilis,1695,67,107,IT,41.87814,15.01824 60101,San Massimo,1695,67,107,IT,41.49292,14.41023 60174,San Pietro Avellana,1695,67,107,IT,41.78886,14.18323 60208,San Polomatese,1695,67,107,IT,41.45932,14.49343 60314,SantAgapito,1695,67,107,IT,41.54372,14.22204 60364,SantAngelo del Pesco,1695,67,107,IT,41.88193,14.25354 60357,SantAngelo Limosano,1695,67,107,IT,41.69266,14.60346 60395,SantElena Sannita,1695,67,107,IT,41.57525,14.4707 60398,SantElia a Pianisi,1695,67,107,IT,41.62043,14.87523 60429,Santa Croce di Magliano,1695,67,107,IT,41.71223,14.98732 60474,Santa Maria del Molise,1695,67,107,IT,41.55285,14.36762 60628,Scapoli,1695,67,107,IT,41.61447,14.05929 60732,Sepino,1695,67,107,IT,41.40782,14.61938 60791,Sessano del Molise,1695,67,107,IT,41.63926,14.32779 60796,Sesto Campano,1695,67,107,IT,41.42042,14.07782 61017,Spinete,1695,67,107,IT,41.54431,14.48743 61183,Tavenna,1695,67,107,IT,41.90898,14.76176 61185,Taverna Ravindola,1695,67,107,IT,41.52283,14.12591 61229,Termoli,1695,67,107,IT,41.99994,14.99389 61325,Torella del Sannio,1695,67,107,IT,41.63878,14.52031 61339,Toro,1695,67,107,IT,41.57313,14.76183 61539,Trivento,1695,67,107,IT,41.77004,14.54613 61562,Tufara,1695,67,107,IT,41.48203,14.94654 61608,Ururi,1695,67,107,IT,41.81518,15.01611 61782,Vastogirardi,1695,67,107,IT,41.7746,14.25844 61808,Venafro,1695,67,107,IT,41.48275,14.04773 62161,Vinchiaturo,1695,67,107,IT,41.49282,14.592 135248,Acceglio,1702,21,107,IT,44.47463,6.99092 135283,Acqui Terme,1702,21,107,IT,44.67552,8.46934 135303,Agliano,1702,21,107,IT,44.79164,8.25124 135304,Agliano Terme,1702,21,107,IT,44.79025,8.25044 135306,Agliè,1702,21,107,IT,45.368,7.768 135315,Agrate,1702,21,107,IT,45.6754,8.56065 135317,Agrate Conturbia,1702,21,107,IT,45.67547,8.55973 135331,Ailoche,1702,21,107,IT,45.69812,8.22133 135332,Airali,1702,21,107,IT,44.8167,7.25157 135333,Airasca,1702,21,107,IT,44.91719,7.48322 135337,Aisone,1702,21,107,IT,44.31392,7.21963 135339,Ala di Stura,1702,21,107,IT,45.31492,7.30345 135341,Alagna Valsesia,1702,21,107,IT,45.85182,7.93752 135346,Alba,1702,21,107,IT,44.6999,8.0347 135353,Albano Vercellese,1702,21,107,IT,45.42616,8.38093 135360,Albaretto della Torre,1702,21,107,IT,44.59624,8.06464 135363,Albera Ligure,1702,21,107,IT,44.70159,9.0672 135372,Albiano dIvrea,1702,21,107,IT,45.43424,7.94789 135387,Albugnano,1702,21,107,IT,45.07755,7.97113 135394,Alessandria,1702,21,107,IT,44.90924,8.61007 135402,Alfiano Natta,1702,21,107,IT,45.0486,8.2073 135408,Alice Bel Colle,1702,21,107,IT,44.72605,8.45074 135409,Alice Castello,1702,21,107,IT,45.3686,8.0732 135410,Alice Superiore,1702,21,107,IT,45.46066,7.77922 135422,Almese-Rivera,1702,21,107,IT,45.11915,7.40111 135425,Alpette,1702,21,107,IT,45.40917,7.57795 135426,Alpignano,1702,21,107,IT,45.09346,7.52392 135434,Altavilla Monferrato,1702,21,107,IT,44.99355,8.37594 135443,Alto,1702,21,107,IT,44.10863,8.00215 135451,Alzano Scrivia,1702,21,107,IT,45.01806,8.88065 135470,Ameno,1702,21,107,IT,45.78897,8.44 135483,Andezeno,1702,21,107,IT,45.03376,7.86607 135485,Andorno Cacciorna,1702,21,107,IT,45.61054,8.05589 135487,Andrate,1702,21,107,IT,45.52633,7.88145 135501,Angrogna,1702,21,107,IT,44.84354,7.22422 135518,Antignano,1702,21,107,IT,44.84535,8.13494 135522,Antronapiana,1702,21,107,IT,46.06091,8.11519 135528,Anzola dOssola,1702,21,107,IT,45.98897,8.34531 135551,Aramengo,1702,21,107,IT,45.10085,8.00003 135557,Arborio,1702,21,107,IT,45.49586,8.38755 135595,Arguello,1702,21,107,IT,44.58274,8.11084 135604,Arignano,1702,21,107,IT,45.03966,7.90189 135608,Arizzano,1702,21,107,IT,45.95738,8.58292 135613,Armeno,1702,21,107,IT,45.82078,8.44557 135622,Arola,1702,21,107,IT,45.80867,8.35808 135624,Arona,1702,21,107,IT,45.7589,8.55715 135630,Arquata Scrivia,1702,21,107,IT,44.6883,8.88682 135660,Asigliano Vercellese,1702,21,107,IT,45.26146,8.40853 135670,Asti,1702,21,107,IT,44.90162,8.20751 135688,Aurano,1702,21,107,IT,46.00038,8.58822 135708,Avigliana,1702,21,107,IT,45.07978,7.39647 135714,Avolasca,1702,21,107,IT,44.80315,8.96545 135718,Azeglio,1702,21,107,IT,45.42283,7.99222 135724,Azzano dAsti,1702,21,107,IT,44.87345,8.26684 135728,Baceno,1702,21,107,IT,46.26062,8.31874 135755,Bagnasco,1702,21,107,IT,44.30412,8.04522 135769,Bagnolo Piemonte,1702,21,107,IT,44.76034,7.31392 135779,Bairo,1702,21,107,IT,45.38606,7.75532 135782,Balangero,1702,21,107,IT,45.26988,7.51884 135783,Baldichieri dAsti,1702,21,107,IT,44.90595,8.09163 135784,Baldissero Canavese,1702,21,107,IT,45.41026,7.74422 135786,Baldissero dAlba,1702,21,107,IT,44.76184,7.90863 135785,Baldissero Torinese,1702,21,107,IT,45.06837,7.81274 135792,Balme,1702,21,107,IT,45.30192,7.21937 135793,Balmuccia,1702,21,107,IT,45.81878,8.1408 135794,Balocco,1702,21,107,IT,45.45589,8.28068 135799,Balzola,1702,21,107,IT,45.18358,8.40277 135802,Banchette,1702,21,107,IT,45.45356,7.85632 135803,Bandito,1702,21,107,IT,44.72282,7.82403 135804,Bannio,1702,21,107,IT,45.98397,8.14611 135816,Baratte,1702,21,107,IT,45.1116,7.23643 135818,Barbania,1702,21,107,IT,45.29143,7.6345 135823,Barbaresco,1702,21,107,IT,44.72324,8.08194 135843,Bardonecchia,1702,21,107,IT,45.07462,6.69888 135845,Barengo,1702,21,107,IT,45.57597,8.51403 135851,Barge,1702,21,107,IT,44.72786,7.32283 135862,Barolo,1702,21,107,IT,44.61094,7.94284 135864,Barone Canavese,1702,21,107,IT,45.32576,7.87342 135866,Barquedo,1702,21,107,IT,45.74283,8.4963 135878,Basaluzzo,1702,21,107,IT,44.76885,8.70485 135896,Bassignana,1702,21,107,IT,45.0011,8.73291 135900,Bastia Mondovì,1702,21,107,IT,44.44194,7.89444 135908,Battifollo,1702,21,107,IT,44.31983,8.01094 135914,Baveno,1702,21,107,IT,45.90818,8.50033 135922,Bee,1702,21,107,IT,45.96328,8.57542 135924,Beinasco,1702,21,107,IT,45.02472,7.58564 135925,Beinette,1702,21,107,IT,44.36394,7.64464 135930,Belforte Monferrato,1702,21,107,IT,44.62505,8.66125 135933,Belgirate,1702,21,107,IT,45.84123,8.57064 135944,Bellinzago Novarese,1702,21,107,IT,45.56877,8.64323 135962,Belvedere Langhe,1702,21,107,IT,44.49361,7.97387 135967,Belveglio,1702,21,107,IT,44.83012,8.32864 135972,Bene Vagienna,1702,21,107,IT,44.54268,7.82726 135975,Benevello,1702,21,107,IT,44.62981,8.10507 135977,Benna,1702,21,107,IT,45.51528,8.12409 135986,Bergamasco,1702,21,107,IT,44.82725,8.45474 135990,Bergolo,1702,21,107,IT,44.54784,8.18314 135995,Bernezzo,1702,21,107,IT,44.38533,7.43633 135998,Bersezio,1702,21,107,IT,44.38031,6.96885 136004,Berzano di San Pietro,1702,21,107,IT,45.09418,7.95352 136005,Berzano di Tortona,1702,21,107,IT,44.87666,8.95108 136023,Beura,1702,21,107,IT,46.07964,8.29826 136031,Biandrate,1702,21,107,IT,45.45271,8.46402 136035,Bianzè,1702,21,107,IT,45.30751,8.12202 136041,Bibiana,1702,21,107,IT,44.79894,7.28822 136046,Biella,1702,21,107,IT,45.56304,8.05796 136054,Bioglio-Portula-Andrè,1702,21,107,IT,45.61516,8.13602 136065,Bistagno,1702,21,107,IT,44.66059,8.37163 136086,Bobbio Pellice,1702,21,107,IT,44.80854,7.11691 136087,Boca,1702,21,107,IT,45.67897,8.40873 136089,Boccioleto,1702,21,107,IT,45.83047,8.11282 136097,Bogogno,1702,21,107,IT,45.66307,8.53473 136106,Bollengo,1702,21,107,IT,45.47162,7.94133 136116,Bolzano Novarese,1702,21,107,IT,45.76266,8.44248 136143,Bonvicino,1702,21,107,IT,44.50354,8.01754 136155,Borgaro Torinese,1702,21,107,IT,45.15122,7.65543 136162,Borghetto di Borbera,1702,21,107,IT,44.72945,8.94346 136167,Borgiallo,1702,21,107,IT,45.41758,7.66984 136169,Borgo,1702,21,107,IT,44.70887,7.96222 136199,Borgo dAle,1702,21,107,IT,45.34958,8.05198 136176,Borgo Melano,1702,21,107,IT,45.01578,7.57656 136181,Borgo San Dalmazzo,1702,21,107,IT,44.33785,7.4931 136185,Borgo San Martino,1702,21,107,IT,45.09259,8.52373 136191,Borgo Ticino,1702,21,107,IT,45.68931,8.60448 136196,Borgo Vercelli,1702,21,107,IT,45.3568,8.4646 136203,Borgofranco dIvrea,1702,21,107,IT,45.51636,7.85865 136205,Borgolavezzaro,1702,21,107,IT,45.31918,8.69931 136206,Borgomale,1702,21,107,IT,44.62034,8.13224 136207,Borgomanero,1702,21,107,IT,45.69873,8.4623 136209,Borgomasino,1702,21,107,IT,45.36205,7.98811 136210,Borgone Susa,1702,21,107,IT,45.12334,7.23641 136213,Borgoratto Alessandrino,1702,21,107,IT,44.83625,8.53854 136218,Borgosesia,1702,21,107,IT,45.72045,8.27466 136228,Borriana,1702,21,107,IT,45.50781,8.0386 136243,Bosco Marengo,1702,21,107,IT,44.82373,8.68008 136246,Bosconero,1702,21,107,IT,45.2663,7.76578 136250,Bosia,1702,21,107,IT,44.60244,8.14734 136251,Bosio,1702,21,107,IT,44.64975,8.79285 136255,Bossolasco,1702,21,107,IT,44.52818,8.04993 136269,Boves,1702,21,107,IT,44.32985,7.54733 136276,Bozzole,1702,21,107,IT,45.06934,8.60561 136278,Bra,1702,21,107,IT,44.69776,7.85128 136288,Brandizzo,1702,21,107,IT,45.17706,7.83581 136297,Breia,1702,21,107,IT,45.76497,8.30552 136312,Breo,1702,21,107,IT,44.39865,7.81903 136324,Briaglia,1702,21,107,IT,44.39583,7.87574 136326,Bricco di Neive,1702,21,107,IT,44.71159,8.13409 136327,Bricherasio,1702,21,107,IT,44.82328,7.303 136330,Briga Alta,1702,21,107,IT,44.08273,7.74944 136331,Briga Novarese,1702,21,107,IT,45.72931,8.45586 136332,Brignano,1702,21,107,IT,44.81457,9.04005 136337,Briona,1702,21,107,IT,45.54247,8.47973 136350,Brondello,1702,21,107,IT,44.60073,7.40592 136355,Brossasco,1702,21,107,IT,44.56778,7.36454 136356,Brosso,1702,21,107,IT,45.4918,7.80225 136357,Brovello,1702,21,107,IT,45.84246,8.53189 136358,Brovello-Carpugnino,1702,21,107,IT,45.84247,8.53173 136359,Brozolo,1702,21,107,IT,45.11695,8.07193 136366,Bruino,1702,21,107,IT,45.01506,7.47754 136372,Bruno,1702,21,107,IT,44.79262,8.43973 136374,Brusasco,1702,21,107,IT,45.15499,8.06107 136377,Brusnengo,1702,21,107,IT,45.59011,8.25219 136379,Bruzolo,1702,21,107,IT,45.14093,7.19463 136383,Bubbio,1702,21,107,IT,44.66344,8.29514 136414,Buriasco,1702,21,107,IT,44.87222,7.412 136415,Burolo,1702,21,107,IT,45.48116,7.93392 136416,Buronzo,1702,21,107,IT,45.48018,8.26628 136420,Busano,1702,21,107,IT,45.33137,7.65727 136421,Busca,1702,21,107,IT,44.51625,7.47662 136433,Bussoleno,1702,21,107,IT,45.1397,7.14432 136439,Buttigliera Alta,1702,21,107,IT,45.06836,7.43254 136440,Buttigliera dAsti,1702,21,107,IT,45.02175,7.95103 136448,Cabella Ligure,1702,21,107,IT,44.67491,9.09607 136465,Cafasse,1702,21,107,IT,45.24865,7.51882 136488,Calamandrana,1702,21,107,IT,44.73767,8.33726 136492,Calasca-Castiglione,1702,21,107,IT,46.02081,8.21451 136531,Callabiana - Chiesa,1702,21,107,IT,45.63137,8.09722 136532,Calliano,1702,21,107,IT,45.00798,8.25661 136537,Calosso,1702,21,107,IT,44.73994,8.22714 136545,Caltignaga,1702,21,107,IT,45.52088,8.58616 136549,Caluso,1702,21,107,IT,45.30466,7.89101 136566,Camagna Monferrato,1702,21,107,IT,45.01765,8.42974 136570,Camandona,1702,21,107,IT,45.64417,8.09972 136573,Cambiano,1702,21,107,IT,44.97113,7.77447 136574,Cambiasca,1702,21,107,IT,45.96238,8.54462 136575,Camburzano,1702,21,107,IT,45.54393,8.00226 136576,Camerana,1702,21,107,IT,44.42404,8.14144 136578,Camerano,1702,21,107,IT,44.99118,8.08965 136579,Camerano Casasco,1702,21,107,IT,44.99165,8.09103 136583,Cameri,1702,21,107,IT,45.50159,8.66245 136590,Camino,1702,21,107,IT,45.15723,8.29376 136596,Camo,1702,21,107,IT,44.69504,8.19434 136613,Campertogno,1702,21,107,IT,45.79877,8.03212 136617,Campiglia Cervo,1702,21,107,IT,45.6629,7.99967 136620,Campiglione,1702,21,107,IT,44.80284,7.32422 136669,Campomolino,1702,21,107,IT,44.40883,7.21192 136687,Canale,1702,21,107,IT,44.79532,7.99373 136698,Candelo,1702,21,107,IT,45.54093,8.10659 136700,Candia Canavese,1702,21,107,IT,45.32734,7.88429 136706,Candiolo,1702,21,107,IT,44.95858,7.59812 136708,Canelli,1702,21,107,IT,44.72084,8.29282 136715,Canischio,1702,21,107,IT,45.37485,7.59621 136720,Cannero Riviera,1702,21,107,IT,46.022,8.67933 136726,Cannobio,1702,21,107,IT,46.06233,8.69628 136733,Canosio,1702,21,107,IT,44.45583,7.08272 136740,Cantalupa,1702,21,107,IT,44.94594,7.33032 136742,Cantalupo Ligure,1702,21,107,IT,44.71811,9.04575 136745,Cantarana,1702,21,107,IT,44.90245,8.02753 136750,Cantoira,1702,21,107,IT,45.34014,7.3845 136806,Caprauna,1702,21,107,IT,44.11603,7.95495 136808,Caprezzo,1702,21,107,IT,45.98198,8.56282 136814,Capriata dOrba,1702,21,107,IT,44.72785,8.69085 136817,Caprie,1702,21,107,IT,45.11944,7.33294 136820,Capriglio,1702,21,107,IT,45.00355,8.00893 136829,Caraglio,1702,21,107,IT,44.41725,7.43281 136830,Caramagna Piemonte,1702,21,107,IT,44.78224,7.73943 136842,Caravino,1702,21,107,IT,45.3995,7.9602 136845,Carbonara Scrivia,1702,21,107,IT,44.84915,8.86975 136856,Carcoforo,1702,21,107,IT,45.90858,8.04967 136863,Cardè,1702,21,107,IT,44.74444,7.47762 136865,Carema,1702,21,107,IT,45.58401,7.80879 136867,Carentino,1702,21,107,IT,44.82885,8.47134 136869,Caresana,1702,21,107,IT,45.22142,8.5048 136870,Caresanablot,1702,21,107,IT,45.35736,8.39203 136871,Carezzano Maggiore,1702,21,107,IT,44.80705,8.90055 136877,Carignano,1702,21,107,IT,44.90599,7.67253 136882,Carisio,1702,21,107,IT,45.41017,8.19962 136890,Carmagnola,1702,21,107,IT,44.84963,7.72032 136911,Carpeneto,1702,21,107,IT,44.67835,8.60555 136916,Carpignano Sesia,1702,21,107,IT,45.53341,8.41734 136927,Carrega Ligure,1702,21,107,IT,44.61879,9.17564 136930,Carrosio,1702,21,107,IT,44.65776,8.83126 136935,Carrù,1702,21,107,IT,44.47967,7.87236 136939,Cartignano,1702,21,107,IT,44.47833,7.28573 136941,Cartosio,1702,21,107,IT,44.59024,8.42065 136957,Casal Cermelli,1702,21,107,IT,44.83495,8.62495 136964,Casalbeltrame,1702,21,107,IT,45.43806,8.46653 136967,Casalborgone,1702,21,107,IT,45.13045,7.94043 136974,Casale Corte Cerro,1702,21,107,IT,45.91545,8.41407 136978,Casale Monferrato,1702,21,107,IT,45.13338,8.4525 136982,Casaleggio Boiro,1702,21,107,IT,44.63355,8.73045 136983,Casaleggio Novara,1702,21,107,IT,45.48793,8.49307 136992,Casalgrasso,1702,21,107,IT,44.81834,7.62498 136997,Casalino,1702,21,107,IT,45.35836,8.52393 137002,Casalnoceto,1702,21,107,IT,44.91326,8.98376 137013,Casalvolone,1702,21,107,IT,45.39966,8.46472 137022,Casanova Elvo,1702,21,107,IT,45.4002,8.29413 137027,Casapinta,1702,21,107,IT,45.61566,8.19592 137036,Casasco,1702,21,107,IT,44.82734,9.00565 137052,Cascinette dIvrea,1702,21,107,IT,45.48016,7.90562 137057,Caselette,1702,21,107,IT,45.10975,7.48582 137062,Caselle Torinese,1702,21,107,IT,45.17458,7.6429 137090,Casorzo,1702,21,107,IT,45.02165,8.33843 137098,Cassano Spinola,1702,21,107,IT,44.76557,8.86228 137108,Cassinasco,1702,21,107,IT,44.68977,8.30345 137109,Cassine,1702,21,107,IT,44.75166,8.52872 137110,Cassinelle-Concentrico,1702,21,107,IT,44.60154,8.56345 137118,Castagneto Po,1702,21,107,IT,45.15854,7.88639 137119,Castagnito,1702,21,107,IT,44.75472,8.03195 137123,Castagnole delle Lanze,1702,21,107,IT,44.74988,8.14966 137121,Castagnole Monferrato,1702,21,107,IT,44.95864,8.30507 137122,Castagnole Piemonte,1702,21,107,IT,44.89814,7.56612 137130,Castel Boglione,1702,21,107,IT,44.72195,8.37994 137148,Castel Rocchero,1702,21,107,IT,44.71835,8.41534 137184,Castelceriolo,1702,21,107,IT,44.91723,8.69384 137190,Casteldelfino,1702,21,107,IT,44.59002,7.07026 137206,CastellAlfero,1702,21,107,IT,44.98505,8.22309 137214,Castellamonte,1702,21,107,IT,45.38267,7.70886 137218,Castellania,1702,21,107,IT,44.79845,8.93035 137220,Castellar,1702,21,107,IT,44.62123,7.43743 137221,Castellar Guidobono,1702,21,107,IT,44.90483,8.94835 137224,Castellazzo Bormida,1702,21,107,IT,44.84353,8.579 137225,Castellazzo Novarese,1702,21,107,IT,45.51337,8.48693 137228,Castellero,1702,21,107,IT,44.92535,8.07383 137231,Castelletto Cervo,1702,21,107,IT,45.52136,8.22542 137239,Castelletto dErro,1702,21,107,IT,44.62597,8.39442 137240,Castelletto dOrba,1702,21,107,IT,44.68455,8.70395 137232,Castelletto Merli,1702,21,107,IT,45.07395,8.24013 137233,Castelletto Molina,1702,21,107,IT,44.75125,8.43324 137234,Castelletto Monferrato,1702,21,107,IT,44.98115,8.56454 137236,Castelletto Sopra Ticino,1702,21,107,IT,45.72002,8.63362 137237,Castelletto Stura,1702,21,107,IT,44.44383,7.63923 137238,Castelletto Uzzone,1702,21,107,IT,44.49527,8.18772 137247,Castellinaldo,1702,21,107,IT,44.77484,8.02974 137248,Castellino Tanaro,1702,21,107,IT,44.42784,7.98124 137259,Castello di Annone,1702,21,107,IT,44.87944,8.31701 137282,Castelnuovo Belbo,1702,21,107,IT,44.8011,8.41236 137285,Castelnuovo Bormida,1702,21,107,IT,44.74236,8.5506 137287,Castelnuovo Calcea,1702,21,107,IT,44.78688,8.28421 137299,Castelnuovo di Ceva,1702,21,107,IT,44.35363,8.12894 137289,Castelnuovo Don Bosco,1702,21,107,IT,45.04077,7.96389 137291,Castelnuovo Nigra,1702,21,107,IT,45.43816,7.69461 137294,Castelnuovo Scrivia,1702,21,107,IT,44.97932,8.88246 137317,Castelspina,1702,21,107,IT,44.80615,8.58315 137341,Castiglione Falletto,1702,21,107,IT,44.62254,7.97534 137345,Castiglione Tinella,1702,21,107,IT,44.72534,8.19014 137346,Castiglione Torinese,1702,21,107,IT,45.11905,7.80712 137361,Castino,1702,21,107,IT,44.61784,8.18244 137409,Cavaglià,1702,21,107,IT,45.40602,8.09163 137406,Cavaglietto,1702,21,107,IT,45.60217,8.50213 137407,Cavaglio DAgogna,1702,21,107,IT,45.61317,8.48613 137408,Cavaglio-Spoccia,1702,21,107,IT,46.07108,8.63072 137410,Cavagnolo,1702,21,107,IT,45.15175,8.04903 137415,Cavallerleone,1702,21,107,IT,44.74014,7.66393 137416,Cavallermaggiore,1702,21,107,IT,44.70639,7.68693 137420,Cavallirio,1702,21,107,IT,45.66227,8.39694 137427,Cavatore,1702,21,107,IT,44.63099,8.45276 137441,Cavour,1702,21,107,IT,44.79286,7.37438 137468,Cella Monte,1702,21,107,IT,45.07405,8.39154 137471,Cellarengo,1702,21,107,IT,44.86435,7.94533 137473,Celle Enomondo,1702,21,107,IT,44.85685,8.12373 137481,Cellio,1702,21,107,IT,45.75505,8.31185 137495,Centallo,1702,21,107,IT,44.50153,7.58783 137509,Ceppo Morelli,1702,21,107,IT,45.97114,8.06688 137514,Cerano,1702,21,107,IT,45.40915,8.78351 137522,Cercenasco,1702,21,107,IT,44.86204,7.49822 137535,Ceres,1702,21,107,IT,45.31336,7.38961 137536,Ceresane-Curanuova,1702,21,107,IT,45.52435,8.00708 137539,Cereseto,1702,21,107,IT,45.08685,8.31817 137540,Ceresole Alba,1702,21,107,IT,44.79974,7.82243 137541,Ceresole Reale,1702,21,107,IT,45.43235,7.23506 137561,Cerreto Castello,1702,21,107,IT,45.56446,8.16082 137567,Cerreto dAsti,1702,21,107,IT,45.05215,8.03513 137562,Cerreto Grue,1702,21,107,IT,44.84255,8.93035 137564,Cerreto Langhe,1702,21,107,IT,44.57484,8.09794 137570,Cerrina,1702,21,107,IT,45.12135,8.21383 137571,Cerrione,1702,21,107,IT,45.46933,8.0684 137573,Cerro Tanaro,1702,21,107,IT,44.87335,8.35874 137585,Cervasca,1702,21,107,IT,44.38093,7.47123 137586,Cervatto,1702,21,107,IT,45.88297,8.16232 137588,Cervere,1702,21,107,IT,44.63428,7.78884 137603,Cesana Torinese,1702,21,107,IT,44.9534,6.79199 137607,Cesara,1702,21,107,IT,45.83379,8.36777 137619,Cessole,1702,21,107,IT,44.64877,8.24438 137625,Ceva,1702,21,107,IT,44.38505,8.02769 137636,Cherasco,1702,21,107,IT,44.64345,7.85818 137640,Chialamberto,1702,21,107,IT,45.36295,7.34363 137647,Chianocco,1702,21,107,IT,45.14854,7.16981 137661,Chiaverano,1702,21,107,IT,45.49886,7.90262 137663,Chieri,1702,21,107,IT,45.01054,7.82133 137667,Chiesa di Macra,1702,21,107,IT,44.48283,7.18062 137669,Chiesanuova,1702,21,107,IT,45.41745,7.65552 137678,Chiomonte,1702,21,107,IT,45.11909,6.9842 137688,Chiusa di Pesio,1702,21,107,IT,44.32588,7.67431 137689,Chiusa di San Michele,1702,21,107,IT,45.10424,7.32711 137692,Chiusano dAsti,1702,21,107,IT,44.98665,8.11853 137699,Chivasso,1702,21,107,IT,45.19093,7.88981 137714,Ciconio,1702,21,107,IT,45.33025,7.75852 137715,Cigliano,1702,21,107,IT,45.30804,8.02316 137716,Cigliè,1702,21,107,IT,44.43653,7.92654 137729,Cinaglio,1702,21,107,IT,44.97525,8.10003 137738,Cintano,1702,21,107,IT,45.42812,7.68827 137742,Cinzano,1702,21,107,IT,45.09528,7.92427 137749,Ciriè,1702,21,107,IT,45.23486,7.60125 137760,Cissone,1702,21,107,IT,44.56314,8.03044 137761,Cisterna dAsti,1702,21,107,IT,44.82525,8.00076 137781,Civiasco,1702,21,107,IT,45.80786,8.29386 137809,Clavesana,1702,21,107,IT,44.48334,7.91084 137810,Claviere,1702,21,107,IT,44.93922,6.75213 137818,Coassolo,1702,21,107,IT,45.29838,7.46136 137819,Coassolo Torinese,1702,21,107,IT,45.29775,7.46041 137820,Coazze,1702,21,107,IT,45.05181,7.30063 137821,Coazzolo,1702,21,107,IT,44.72824,8.14514 137824,Cocconato,1702,21,107,IT,45.08642,8.04019 137839,Coggiola,1702,21,107,IT,45.6864,8.18252 137847,Colazza,1702,21,107,IT,45.79257,8.50033 137883,Collegno,1702,21,107,IT,45.07873,7.56735 137891,Colleretto Castelnuovo,1702,21,107,IT,45.42236,7.67981 137892,Colleretto Giacosa,1702,21,107,IT,45.43286,7.79852 137905,Collobiano,1702,21,107,IT,45.39665,8.3475 137940,Comignago,1702,21,107,IT,45.71487,8.56403 137964,Condove,1702,21,107,IT,45.11591,7.30859 137970,Coniolo Bricco,1702,21,107,IT,45.14816,8.37093 137984,Conzano,1702,21,107,IT,45.02009,8.45554 138016,Corio,1702,21,107,IT,45.31222,7.53351 138030,Corneliano dAlba,1702,21,107,IT,44.73614,7.95723 138049,Corsione,1702,21,107,IT,45.00095,8.14523 138052,Cortandone,1702,21,107,IT,44.95915,8.05843 138053,Cortanze,1702,21,107,IT,45.01404,8.08879 138054,Cortazzone,1702,21,107,IT,44.97915,8.06123 138061,Cortemilia,1702,21,107,IT,44.58044,8.19367 138066,Cortiglione,1702,21,107,IT,44.82225,8.35796 138083,Cossano Belbo,1702,21,107,IT,44.66884,8.19864 138084,Cossano Canavese,1702,21,107,IT,45.38776,7.99152 138085,Cossato,1702,21,107,IT,45.57032,8.18471 138088,Cossogno,1702,21,107,IT,45.96408,8.50962 138090,Cossombrato,1702,21,107,IT,44.98976,8.13897 138095,Costa Vescovato,1702,21,107,IT,44.81615,8.92695 138105,Costanzana,1702,21,107,IT,45.23742,8.36943 138109,Costigliole dAsti,1702,21,107,IT,44.78517,8.18405 138110,Costiglione Saluzzo,1702,21,107,IT,44.56453,7.48543 138124,Crava,1702,21,107,IT,44.43001,7.74493 138125,Cravagliana,1702,21,107,IT,45.84827,8.20182 138126,Cravanzana,1702,21,107,IT,44.57448,8.12731 138127,Craveggia,1702,21,107,IT,46.14124,8.48907 138137,Cremolino,1702,21,107,IT,44.63674,8.58584 138141,Crescentino,1702,21,107,IT,45.19941,8.08635 138148,Cressa,1702,21,107,IT,45.64762,8.50942 138151,Crevacuore,1702,21,107,IT,45.68548,8.24404 138153,Crevoladossola,1702,21,107,IT,46.14858,8.29742 138158,Crissolo,1702,21,107,IT,44.69953,7.15602 138162,Crodo,1702,21,107,IT,46.21726,8.32238 138172,Crova,1702,21,107,IT,45.33066,8.21083 138178,Cuccaro Monferrato,1702,21,107,IT,44.99365,8.45754 138182,Cuceglio,1702,21,107,IT,45.35853,7.81588 138187,Cumiana,1702,21,107,IT,44.97629,7.37761 138190,Cuneo,1702,21,107,IT,44.39071,7.54828 138193,Cunico,1702,21,107,IT,45.0405,8.09554 138194,Cuorgnè,1702,21,107,IT,45.39341,7.65015 138200,Cureggio,1702,21,107,IT,45.67487,8.45973 138203,Curino,1702,21,107,IT,45.62717,8.23622 138207,Cursolo,1702,21,107,IT,46.09858,8.56822 138246,Demonte,1702,21,107,IT,44.31646,7.29808 138247,Denice,1702,21,107,IT,44.59884,8.33315 138250,Dernice,1702,21,107,IT,44.7666,9.05001 138254,Desana,1702,21,107,IT,45.26915,8.35777 138264,Diano dAlba,1702,21,107,IT,44.65294,8.02704 138271,Divignano,1702,21,107,IT,45.66247,8.59987 138276,Dogliani,1702,21,107,IT,44.53326,7.9451 138292,Domodossola,1702,21,107,IT,46.1165,8.29313 138297,Donato,1702,21,107,IT,45.52626,7.90962 138309,Dormelletto,1702,21,107,IT,45.73627,8.56663 138312,Dorzano,1702,21,107,IT,45.42606,8.09852 138332,Dronero,1702,21,107,IT,44.46476,7.36242 138333,Drubiaglio-Grangia,1702,21,107,IT,45.09552,7.4194 138334,Druento,1702,21,107,IT,45.13306,7.57512 138335,Druogno,1702,21,107,IT,46.13421,8.43276 138347,Dusino,1702,21,107,IT,44.92566,7.97165 138361,Entracque,1702,21,107,IT,44.24028,7.39847 138363,Envie,1702,21,107,IT,44.6821,7.37206 138390,Exilles,1702,21,107,IT,45.09754,6.9292 138423,Falmenta,1702,21,107,IT,46.07309,8.58944 138439,Fara Novarese,1702,21,107,IT,45.5544,8.45664 138446,Farigliano,1702,21,107,IT,44.51204,7.91424 138457,Faule,1702,21,107,IT,44.80624,7.58512 138460,Favari-Avatanei,1702,21,107,IT,44.91235,7.7995 138463,Favria,1702,21,107,IT,45.33099,7.68834 138465,Feisoglio,1702,21,107,IT,44.54374,8.10494 138467,Feletto,1702,21,107,IT,45.30336,7.74481 138471,Felizzano,1702,21,107,IT,44.89935,8.43584 138477,Fenestrelle,1702,21,107,IT,45.03594,7.04941 138494,Ferrere,1702,21,107,IT,44.87605,7.99421 138495,Ferriera,1702,21,107,IT,45.08382,7.43017 138500,Fiano,1702,21,107,IT,45.21631,7.52603 138540,Fiorano Canavese,1702,21,107,IT,45.46776,7.83372 138561,Fleccia-Chianavasso,1702,21,107,IT,44.9467,7.21474 138570,Fobello,1702,21,107,IT,45.89002,8.15799 138576,Foglizzo,1702,21,107,IT,45.27361,7.82087 138599,Fontanella-Ozino,1702,21,107,IT,45.61963,8.16927 138602,Fontaneto DAgogna,1702,21,107,IT,45.64347,8.47879 138603,Fontanetto Po,1702,21,107,IT,45.19436,8.19206 138605,Fontanile,1702,21,107,IT,44.75295,8.42134 138634,Formazza,1702,21,107,IT,46.37689,8.42571 138641,Formigliana,1702,21,107,IT,45.42926,8.29193 138648,Fornaci,1702,21,107,IT,45.02816,7.59869 138656,Forno Canavese,1702,21,107,IT,45.34287,7.58951 138674,Fossano,1702,21,107,IT,44.55077,7.71922 138684,Frabosa Soprana,1702,21,107,IT,44.29094,7.80353 138685,Frabosa Sottana,1702,21,107,IT,44.30233,7.79754 138686,Fraconalto,1702,21,107,IT,44.59105,8.87846 138693,Francavilla Bisio,1702,21,107,IT,44.73465,8.73125 138706,Frascaro,1702,21,107,IT,44.82575,8.53127 138712,Frassinello Monferrato,1702,21,107,IT,45.03322,8.38666 138713,Frassineto Po,1702,21,107,IT,45.13271,8.53525 138714,Frassinetto,1702,21,107,IT,45.43834,7.60886 138715,Frassino,1702,21,107,IT,44.57211,7.27536 138726,Frazione Chiesa,1702,21,107,IT,45.69405,8.21228 138732,Fresonara,1702,21,107,IT,44.78295,8.68615 138735,Frinco,1702,21,107,IT,45.00405,8.17193 138738,Front,1702,21,107,IT,45.27941,7.66425 138743,Frossasco,1702,21,107,IT,44.92176,7.37125 138744,Frugarolo,1702,21,107,IT,44.83924,8.68165 138745,Fubine,1702,21,107,IT,44.96305,8.42814 138766,Gabbio-Cereda-Ramate,1702,21,107,IT,45.90959,8.42113 138769,Gabiano,1702,21,107,IT,45.15714,8.19469 138780,Gaglianico,1702,21,107,IT,45.53718,8.07839 138790,Gaiola,1702,21,107,IT,44.33554,7.40896 138804,Galliate,1702,21,107,IT,45.47942,8.69815 138825,Gamalero,1702,21,107,IT,44.8085,8.54116 138828,Gambasca,1702,21,107,IT,44.6295,7.34686 138842,Garadassi,1702,21,107,IT,44.75429,9.15393 138844,Garbagna,1702,21,107,IT,44.78045,8.99786 138845,Garbagna Novarese,1702,21,107,IT,45.38876,8.66124 138853,Garessio,1702,21,107,IT,44.20705,8.01778 138854,Gargallo,1702,21,107,IT,45.72877,8.42533 138857,Garino,1702,21,107,IT,44.97325,7.61728 138863,Garzigliana,1702,21,107,IT,44.83724,7.37442 138865,Gassino Torinese,1702,21,107,IT,45.12907,7.82934 138868,Gattico,1702,21,107,IT,45.70717,8.52003 138869,Gattinara,1702,21,107,IT,45.61309,8.36463 138873,Gavazzana,1702,21,107,IT,44.77585,8.88595 138876,Gavi,1702,21,107,IT,44.68627,8.80717 138900,Genola,1702,21,107,IT,44.59053,7.66114 138910,Gerbido,1702,21,107,IT,45.04449,7.61408 138911,Gerbole,1702,21,107,IT,45.00115,7.5067 138912,Gerbole-Zucche,1702,21,107,IT,44.98605,7.51671 138916,Germagnano,1702,21,107,IT,45.26317,7.46886 138917,Germagno,1702,21,107,IT,45.89257,8.38772 138930,Ghemme,1702,21,107,IT,45.59863,8.42013 138932,Ghiare-Madonna,1702,21,107,IT,44.8077,8.37404 138933,Ghiffa,1702,21,107,IT,45.95298,8.6043 138936,Ghislarengo,1702,21,107,IT,45.52856,8.38514 138939,Giaglione,1702,21,107,IT,45.13919,7.01534 138947,Giarole,1702,21,107,IT,45.06148,8.5673 138952,Giaveno,1702,21,107,IT,45.04435,7.34722 138955,Gifflenga,1702,21,107,IT,45.49306,8.23223 138959,Gignese,1702,21,107,IT,45.86396,8.50943 139002,Givoletto,1702,21,107,IT,45.16225,7.49642 139023,Gonte,1702,21,107,IT,45.99519,8.64982 139042,Gorzegno,1702,21,107,IT,44.51236,8.1348 139045,Gottasecca,1702,21,107,IT,44.46014,8.16754 139047,Govone,1702,21,107,IT,44.80445,8.09404 139048,Gozzano,1702,21,107,IT,45.74273,8.43659 139055,Graglia,1702,21,107,IT,45.558,7.97899 139059,Grana,1702,21,107,IT,44.99835,8.29944 139067,Granozzo con Monticello,1702,21,107,IT,45.36016,8.57334 139080,Gravellona Toce,1702,21,107,IT,45.92859,8.43209 139081,Gravere,1702,21,107,IT,45.12534,7.01751 139085,Grazzano Badoglio,1702,21,107,IT,45.03996,8.31105 139087,Greggio,1702,21,107,IT,45.45148,8.38494 139088,Gremiasco,1702,21,107,IT,44.79625,9.10686 139099,Grignasco,1702,21,107,IT,45.67982,8.34442 139102,Grinzane Cavour,1702,21,107,IT,44.65334,7.99504 139107,Grognardo,1702,21,107,IT,44.63034,8.49265 139110,Grondona,1702,21,107,IT,44.69645,8.96546 139115,Groscavallo,1702,21,107,IT,45.36805,7.25801 139119,Grosso,1702,21,107,IT,45.25645,7.55732 139134,Grugliasco,1702,21,107,IT,45.06516,7.57954 139154,Guardabosone,1702,21,107,IT,45.70187,8.24932 139167,Guarene,1702,21,107,IT,44.74004,8.03514 139172,Guazzora,1702,21,107,IT,45.01392,8.84822 139183,Gurro,1702,21,107,IT,46.08498,8.56772 139192,Igliano,1702,21,107,IT,44.44294,8.01334 139204,Incisa Scapaccino,1702,21,107,IT,44.80805,8.37584 139208,Ingria,1702,21,107,IT,45.4665,7.57119 139209,Intragna,1702,21,107,IT,45.99468,8.57392 139217,Inverso Pinasca,1702,21,107,IT,44.94564,7.21841 139219,Invorio,1702,21,107,IT,45.75679,8.48741 139224,Isasca,1702,21,107,IT,44.58763,7.38162 139242,Isola dAsti,1702,21,107,IT,44.83315,8.18024 139240,Isola SantAntonio,1702,21,107,IT,45.03019,8.84928 139252,Isolabella,1702,21,107,IT,44.90645,7.90903 139261,Issiglio,1702,21,107,IT,45.44626,7.75322 139271,Ivrea,1702,21,107,IT,45.46723,7.87617 139289,La Cassa,1702,21,107,IT,45.18035,7.51632 139292,La Loggia,1702,21,107,IT,44.95495,7.66864 139297,La Morra,1702,21,107,IT,44.6379,7.93078 139309,La Villa,1702,21,107,IT,45.26713,7.43109 139325,Lagnasco,1702,21,107,IT,44.62504,7.55483 139351,Lamporo,1702,21,107,IT,45.23092,8.09846 139356,Landiona,1702,21,107,IT,45.49703,8.42224 139362,Lanvario,1702,21,107,IT,45.6397,8.19856 139365,Lanzo Torinese,1702,21,107,IT,45.27657,7.48235 139402,Lauriano,1702,21,107,IT,45.15989,7.99474 139439,Leini,1702,21,107,IT,45.18275,7.71422 139441,Lemie,1702,21,107,IT,45.22866,7.29248 139449,Lenta,1702,21,107,IT,45.55691,8.38402 139461,Lequio Berria,1702,21,107,IT,44.60584,8.09814 139462,Lequio Tanaro,1702,21,107,IT,44.55994,7.88214 139465,Lerma,1702,21,107,IT,44.63577,8.71323 139466,Lesa,1702,21,107,IT,45.82066,8.55964 139467,Lesegno,1702,21,107,IT,44.4011,7.96943 139471,Lesna,1702,21,107,IT,45.05418,7.62031 139472,Lessolo,1702,21,107,IT,45.47794,7.81576 139473,Lessona,1702,21,107,IT,45.58693,8.19433 139487,Levice,1702,21,107,IT,44.53824,8.15504 139489,Levone,1702,21,107,IT,45.31665,7.60632 139510,Lignana,1702,21,107,IT,45.28606,8.34393 139525,Limone Piemonte,1702,21,107,IT,44.20091,7.57861 139542,Lisio,1702,21,107,IT,44.30713,7.97874 139544,Litta Parodi-Cascinagrossa,1702,21,107,IT,44.87336,8.71246 139545,Livera,1702,21,107,IT,45.61239,8.10571 139552,Livorno Ferraris,1702,21,107,IT,45.28271,8.0778 139558,Loazzolo,1702,21,107,IT,44.66904,8.25844 139559,Locana,1702,21,107,IT,45.41419,7.45712 139580,Lombardore,1702,21,107,IT,45.2358,7.73703 139581,Lombriasco,1702,21,107,IT,44.84094,7.63593 139602,Loranzè,1702,21,107,IT,45.44269,7.81328 139605,Loreglia,1702,21,107,IT,45.90687,8.37132 139625,Lozzolo,1702,21,107,IT,45.61894,8.32284 139626,Lu,1702,21,107,IT,45.00184,8.48561 139646,Lugnacco,1702,21,107,IT,45.44506,7.78212 139654,Lumellogno,1702,21,107,IT,45.40801,8.58787 139672,Luserna,1702,21,107,IT,44.80745,7.24579 139673,Lusernetta,1702,21,107,IT,44.80314,7.24672 139677,Lusigliè,1702,21,107,IT,45.31845,7.76462 139695,Macello,1702,21,107,IT,44.85114,7.39802 139704,Macra,1702,21,107,IT,44.50013,7.17952 139705,Macugnaga,1702,21,107,IT,45.96929,7.96783 139710,Madonna del Sasso,1702,21,107,IT,45.79217,8.36952 139718,Maggiora,1702,21,107,IT,45.68937,8.42233 139723,Magliano Alfieri,1702,21,107,IT,44.76924,8.07014 139724,Magliano Alpi,1702,21,107,IT,44.45808,7.81926 139733,Maglione,1702,21,107,IT,45.34666,8.01332 139734,Maglione-Crosa,1702,21,107,IT,45.60297,8.14937 139737,Magnano,1702,21,107,IT,45.46336,8.00302 139762,Malesco,1702,21,107,IT,46.128,8.49801 139777,Malvicino,1702,21,107,IT,44.55934,8.41315 139787,Mandello Vitta,1702,21,107,IT,45.49567,8.45983 139790,Mandrogne,1702,21,107,IT,44.86308,8.74676 139797,Mango,1702,21,107,IT,44.68812,8.14922 139805,Manta,1702,21,107,IT,44.61583,7.48703 139816,Mappano,1702,21,107,IT,45.14833,7.70778 139825,Marano Ticino,1702,21,107,IT,45.62783,8.63155 139831,Maranzana,1702,21,107,IT,44.76035,8.47845 139857,Marene,1702,21,107,IT,44.66113,7.73436 139859,Marentino,1702,21,107,IT,45.05368,7.87609 139861,Maretto,1702,21,107,IT,44.94485,8.03413 139862,Margarita,1702,21,107,IT,44.40343,7.68493 139907,Marmora,1702,21,107,IT,44.45833,7.09402 139909,Marocchi,1702,21,107,IT,44.94201,7.81888 139918,Marsaglia,1702,21,107,IT,44.45284,7.97994 139935,Martiniana Po,1702,21,107,IT,44.62723,7.36282 139957,Masera,1702,21,107,IT,46.13888,8.32526 139962,Masio,1702,21,107,IT,44.86965,8.40774 139981,Massazza,1702,21,107,IT,45.49183,8.16495 139982,Massello,1702,21,107,IT,44.95874,7.05671 139984,Masserano,1702,21,107,IT,45.59536,8.22197 139989,Massino Visconti,1702,21,107,IT,45.82417,8.54133 139990,Massiola,1702,21,107,IT,45.91247,8.32012 139995,Mathi,1702,21,107,IT,45.25515,7.54202 140000,Mattie,1702,21,107,IT,45.11814,7.11511 140010,Mazze,1702,21,107,IT,45.30025,7.93272 140014,Meana di Susa,1702,21,107,IT,45.12204,7.06471 140032,Meina,1702,21,107,IT,45.79123,8.53761 140036,Melazzo,1702,21,107,IT,44.64394,8.42495 140054,Melle,1702,21,107,IT,44.56197,7.31948 140067,Merana,1702,21,107,IT,44.51884,8.29824 140080,Mercenasco,1702,21,107,IT,45.36002,7.88013 140084,Mergozzo,1702,21,107,IT,45.96229,8.45403 140103,Meugliano,1702,21,107,IT,45.49026,7.77942 140107,Mezzana Mortigliengo,1702,21,107,IT,45.62657,8.18952 140117,Mezzenile,1702,21,107,IT,45.29485,7.39561 140124,Mezzomerico,1702,21,107,IT,45.61991,8.60616 140125,Miagliano,1702,21,107,IT,45.61346,8.04472 140128,Miasino,1702,21,107,IT,45.80197,8.42972 140129,Miazzina,1702,21,107,IT,45.97566,8.52308 140143,Milanere,1702,21,107,IT,45.10436,7.43373 140170,Mirabello Monferrato,1702,21,107,IT,45.03496,8.52385 140186,Moasca,1702,21,107,IT,44.76355,8.27834 140208,Moiola,1702,21,107,IT,44.32113,7.38973 140210,Molare,1702,21,107,IT,44.61807,8.5996 140222,Molino dei Torti,1702,21,107,IT,45.02426,8.89365 140229,Mollia,1702,21,107,IT,45.81667,8.03031 140234,Mombaldone,1702,21,107,IT,44.57025,8.33302 140235,Mombarcaro,1702,21,107,IT,44.46764,8.08824 140237,Mombaruzzo,1702,21,107,IT,44.77145,8.44824 140238,Mombasiglio,1702,21,107,IT,44.36663,7.96794 140241,Mombello di Torino,1702,21,107,IT,45.04575,7.92083 140240,Mombello Monferrato,1702,21,107,IT,45.13285,8.25033 140242,Mombercelli,1702,21,107,IT,44.81785,8.29474 140244,Momo,1702,21,107,IT,45.57424,8.5539 140245,Mompantero,1702,21,107,IT,45.14744,7.04301 140247,Momperone,1702,21,107,IT,44.83845,9.03425 140249,Monale,1702,21,107,IT,44.93755,8.07243 140252,Monastero Bormida,1702,21,107,IT,44.64854,8.32664 140253,Monastero di Lanzo,1702,21,107,IT,45.30185,7.43971 140254,Monastero di Vasco,1702,21,107,IT,44.34033,7.82264 140255,Monasterolo,1702,21,107,IT,45.23549,7.50821 140257,Monasterolo Casotto,1702,21,107,IT,44.32823,7.94324 140259,Monasterolo di Savigliano,1702,21,107,IT,44.68634,7.61953 140262,Moncalieri,1702,21,107,IT,44.9994,7.68236 140263,Moncalvo,1702,21,107,IT,45.05057,8.26277 140264,Moncenisio,1702,21,107,IT,45.20404,6.98461 140265,Moncestino,1702,21,107,IT,45.15465,8.16143 140266,Monchiero Borgonuovo,1702,21,107,IT,44.57054,7.92024 140269,Moncrivello,1702,21,107,IT,45.33236,7.99552 140271,Moncucco Torinese,1702,21,107,IT,45.06738,7.93246 140275,Mondovì,1702,21,107,IT,44.39603,7.81764 140278,Monesiglio,1702,21,107,IT,44.4655,8.11915 140281,Monforte dAlba,1702,21,107,IT,44.58271,7.96793 140283,Mongardino,1702,21,107,IT,44.84915,8.21906 140286,Mongiardino Ligure,1702,21,107,IT,44.63443,9.06462 140289,Mongrando,1702,21,107,IT,45.52826,8.00712 140294,Monleale,1702,21,107,IT,44.88435,8.97395 140591,Montà,1702,21,107,IT,44.81474,7.95477 140304,Montabone,1702,21,107,IT,44.69875,8.39064 140305,Montacuto,1702,21,107,IT,44.76645,9.10496 140306,Montafia,1702,21,107,IT,44.98925,8.02463 140320,Montaldeo,1702,21,107,IT,44.66715,8.73015 140321,Montaldo Bormida,1702,21,107,IT,44.68265,8.58785 140325,Montaldo di Mondovì,1702,21,107,IT,44.32173,7.86714 140322,Montaldo Roero,1702,21,107,IT,44.76834,7.92483 140323,Montaldo Scarampi,1702,21,107,IT,44.83035,8.25904 140324,Montaldo Torinese,1702,21,107,IT,45.06535,7.85023 140328,Montalenghe,1702,21,107,IT,45.33666,7.83794 140331,Montalto Dora,1702,21,107,IT,45.48993,7.86253 140339,Montanaro,1702,21,107,IT,45.23274,7.85492 140341,Montanera,1702,21,107,IT,44.46223,7.66563 140347,Montariolo,1702,21,107,IT,44.99575,8.77539 140403,Montecastello,1702,21,107,IT,44.94945,8.68575 140414,Montechiaro dAcqui,1702,21,107,IT,44.59444,8.37865 140415,Montechiaro dAsti,1702,21,107,IT,45.00701,8.11286 140424,Montecrestese,1702,21,107,IT,46.16448,8.32621 140453,Montegioco,1702,21,107,IT,44.84205,8.96275 140459,Montegrosso,1702,21,107,IT,44.82065,8.23754 140474,Montelera,1702,21,107,IT,45.15429,7.4429 140480,Montelupo Albese,1702,21,107,IT,44.62151,8.0472 140485,Montemagno,1702,21,107,IT,44.98305,8.32534 140486,Montemale di Cuneo,1702,21,107,IT,44.43743,7.37533 140489,Montemarzino,1702,21,107,IT,44.84835,8.99365 140524,Monterosso Grana,1702,21,107,IT,44.40823,7.32293 140536,Montescheno,1702,21,107,IT,46.06658,8.23192 140545,Monteu da Po,1702,21,107,IT,45.15031,8.01428 140544,Monteu Roero,1702,21,107,IT,44.78059,7.93383 140552,Montezemolo,1702,21,107,IT,44.37703,8.14114 140567,Monticello dAlba,1702,21,107,IT,44.71894,7.94263 140572,Montiglio,1702,21,107,IT,45.06462,8.09878 140598,Morano sul Po,1702,21,107,IT,45.16621,8.36674 140599,Moransengo,1702,21,107,IT,45.11485,8.02523 140603,Morbello,1702,21,107,IT,44.60504,8.51075 140611,Moretta,1702,21,107,IT,44.76137,7.53632 140621,Moriondo Torinese,1702,21,107,IT,45.03853,7.94086 140625,Mornese,1702,21,107,IT,44.63925,8.75615 140630,Morozzo,1702,21,107,IT,44.42277,7.71006 140638,Morsasco,1702,21,107,IT,44.66535,8.55085 140653,Mosso,1702,21,107,IT,45.65007,8.13762 140654,Mosso Santa Maria,1702,21,107,IT,45.64958,8.13682 140658,Motta Dè Conti,1702,21,107,IT,45.19356,8.52094 140667,Mottalciata,1702,21,107,IT,45.50019,8.21065 140687,Murazzano,1702,21,107,IT,44.47334,8.01938 140689,Murello,1702,21,107,IT,44.75214,7.60093 140691,Murisengo,1702,21,107,IT,45.08165,8.13554 140705,Mussotto,1702,21,107,IT,44.71766,8.03404 140708,Muzzano,1702,21,107,IT,45.56076,7.98892 140722,Narzole,1702,21,107,IT,44.59441,7.86765 140734,Nebbiuno,1702,21,107,IT,45.80774,8.52593 140738,Neive-Borgonovo,1702,21,107,IT,44.72397,8.1178 140752,Netro,1702,21,107,IT,45.54004,7.94695 140756,Neviglie,1702,21,107,IT,44.69194,8.11684 140759,Nibbiola,1702,21,107,IT,45.37236,8.65674 140762,Nichelino,1702,21,107,IT,45.00031,7.65305 140767,Niella Belbo,1702,21,107,IT,44.51275,8.08036 140768,Niella Tanaro,1702,21,107,IT,44.40573,7.92794 140774,Nizza Monferrato,1702,21,107,IT,44.77416,8.35784 140777,Noasca,1702,21,107,IT,45.45332,7.31494 140798,Nole,1702,21,107,IT,45.24159,7.56983 140800,Nomaglio,1702,21,107,IT,45.53616,7.86032 140803,None,1702,21,107,IT,44.93645,7.54015 140804,Nonio,1702,21,107,IT,45.84577,8.37752 140821,Novalesa,1702,21,107,IT,45.19065,7.01416 140822,Novara,1702,21,107,IT,45.44694,8.62118 140830,Novello,1702,21,107,IT,44.58882,7.92587 140835,Novi Ligure,1702,21,107,IT,44.76246,8.787 140841,Nucetto,1702,21,107,IT,44.33963,8.0596 140866,Occhieppo Inferiore,1702,21,107,IT,45.55006,8.02102 140867,Occhieppo Superiore,1702,21,107,IT,45.564,8.00618 140869,Occimiano,1702,21,107,IT,45.05991,8.50666 140870,Odalengo Grande,1702,21,107,IT,45.10922,8.16748 140871,Odalengo Piccolo,1702,21,107,IT,45.07165,8.20603 140879,Oggebbio,1702,21,107,IT,45.99088,8.64663 140882,Oglianico,1702,21,107,IT,45.34154,7.69196 140885,Olcenengo,1702,21,107,IT,45.36346,8.30983 140886,Oldenico,1702,21,107,IT,45.40276,8.38103 140887,Oleggio,1702,21,107,IT,45.59674,8.64213 140888,Oleggio Castello,1702,21,107,IT,45.74887,8.52713 140904,Olivola,1702,21,107,IT,45.03725,8.36784 140910,Olmo Gentile,1702,21,107,IT,44.58574,8.24694 140918,Omegna,1702,21,107,IT,45.88002,8.40665 140922,Oncino,1702,21,107,IT,44.67683,7.19032 140939,Orbassano,1702,21,107,IT,45.00547,7.53813 140955,Orio Canavese,1702,21,107,IT,45.32883,7.85991 140961,Ormea,1702,21,107,IT,44.15586,7.92811 140964,Ornavasso,1702,21,107,IT,45.96795,8.41584 140971,Orsara Bormida,1702,21,107,IT,44.69015,8.56275 140978,Orta San Giulio,1702,21,107,IT,45.79727,8.41437 140999,Osasco,1702,21,107,IT,44.84944,7.34302 141000,Osasio,1702,21,107,IT,44.87144,7.60802 141030,Ostana,1702,21,107,IT,44.69263,7.18942 141051,Ottiglio,1702,21,107,IT,45.05426,8.3398 141054,Oulx,1702,21,107,IT,45.03641,6.83372 141055,Ovada,1702,21,107,IT,44.63727,8.64196 141057,Oviglio,1702,21,107,IT,44.86125,8.48774 141061,Ozegna,1702,21,107,IT,45.34801,7.74503 141063,Ozzano Monferrato,1702,21,107,IT,45.10592,8.37238 141075,Paderna,1702,21,107,IT,44.82148,8.89088 141092,Paesana,1702,21,107,IT,44.68332,7.27571 58211,Pagno,1702,21,107,IT,44.61173,7.42572 58229,Palazzo Canavese,1702,21,107,IT,45.45962,7.97776 58234,Palazzolo Vercellese,1702,21,107,IT,45.18554,8.23302 58249,Pallanza-Intra-Suna,1702,21,107,IT,45.93778,8.57088 58250,Pallanzeno,1702,21,107,IT,46.04202,8.25949 58272,Pamparato,1702,21,107,IT,44.27666,7.91432 58273,Pancalieri,1702,21,107,IT,44.83344,7.58592 58301,Parella,1702,21,107,IT,45.43018,7.79128 58304,Pareto,1702,21,107,IT,44.51644,8.38185 58309,Parodi Ligure,1702,21,107,IT,44.66975,8.75865 58310,Paroldo,1702,21,107,IT,44.43204,8.07244 58318,Paruzzaro,1702,21,107,IT,45.74818,8.51486 58327,Passerano Marmorito,1702,21,107,IT,45.05585,8.01873 58336,Pasta,1702,21,107,IT,45.01131,7.55243 58341,Pasturana,1702,21,107,IT,44.75085,8.74925 58358,Pavarolo,1702,21,107,IT,45.06665,7.83943 58363,Pavone Canavese,1702,21,107,IT,45.44193,7.85294 58368,Pecco,1702,21,107,IT,45.45206,7.77742 58369,Pecetto,1702,21,107,IT,45.0176,7.75107 58370,Pecetto di Valenza,1702,21,107,IT,44.98904,8.66996 58391,Pella,1702,21,107,IT,45.79722,8.38444 58399,Penango,1702,21,107,IT,45.03295,8.25174 58428,Perletto,1702,21,107,IT,44.59934,8.21304 58429,Perlo,1702,21,107,IT,44.33183,8.08554 58431,Pernate,1702,21,107,IT,45.45958,8.67845 58436,Perosa Argentina,1702,21,107,IT,44.95909,7.19167 58437,Perosa Canavese,1702,21,107,IT,45.39706,7.83082 58438,Perrero,1702,21,107,IT,44.93849,7.11263 58441,Pertengo,1702,21,107,IT,45.23606,8.41651 58445,Pertusio,1702,21,107,IT,45.35565,7.64152 58471,Pessinetto,1702,21,107,IT,45.28675,7.41531 58472,Pessione,1702,21,107,IT,44.96504,7.84115 58489,Pettenasco,1702,21,107,IT,45.81657,8.40702 58490,Pettinengo,1702,21,107,IT,45.61306,8.10422 58495,Peveragno,1702,21,107,IT,44.3206,7.61859 58497,Pezzana,1702,21,107,IT,45.26152,8.48396 58501,Pezzolo Valle Uzzone,1702,21,107,IT,44.53874,8.19394 58513,Piana San Raffaele,1702,21,107,IT,45.1529,7.85013 58529,Pianezza,1702,21,107,IT,45.1042,7.55003 58531,Pianfei,1702,21,107,IT,44.37203,7.71143 58546,Piano-Molini dIsola,1702,21,107,IT,44.83194,8.18073 58556,Piasco,1702,21,107,IT,44.56106,7.4442 58558,Piatto,1702,21,107,IT,45.58986,8.13532 58564,Piazza,1702,21,107,IT,44.38597,7.83163 58586,Piea,1702,21,107,IT,45.02706,8.07146 58587,Piedicavallo,1702,21,107,IT,45.68986,7.95482 58593,Piedimulera,1702,21,107,IT,46.02408,8.25897 58602,Pietra Marazzi,1702,21,107,IT,44.94265,8.66854 58623,Pietraporzio,1702,21,107,IT,44.34352,7.03433 58642,Pieve Vergonte,1702,21,107,IT,46.01298,8.26082 58667,Pila,1702,21,107,IT,45.76997,8.08122 58673,Pinasca-Dubbione,1702,21,107,IT,44.94264,7.22912 58675,Pinerolo,1702,21,107,IT,44.88534,7.33135 58679,Pino dAsti,1702,21,107,IT,45.05745,7.98623 58678,Pino Torinese,1702,21,107,IT,45.03955,7.77712 58686,Piobesi dAlba,1702,21,107,IT,44.73444,7.97937 58685,Piobesi Torinese,1702,21,107,IT,44.76667,7.61667 58687,Piode,1702,21,107,IT,45.77059,8.05265 58694,Piossasco,1702,21,107,IT,44.98802,7.4601 58698,Piovà Massaia,1702,21,107,IT,45.05515,8.05013 58697,Piovera,1702,21,107,IT,44.95845,8.73595 58700,Piozzo,1702,21,107,IT,44.51384,7.89254 58703,Pisano,1702,21,107,IT,45.79567,8.51487 58704,Piscina,1702,21,107,IT,44.91874,7.42532 58722,Piverone,1702,21,107,IT,45.44557,8.00745 58738,Pleyne,1702,21,107,IT,44.58063,7.01712 58742,Pocapaglia,1702,21,107,IT,44.71524,7.88293 58777,Pogno,1702,21,107,IT,45.75806,8.38559 58781,Poirino,1702,21,107,IT,44.92047,7.84465 58801,Pollone,1702,21,107,IT,45.57976,8.00592 58803,Polonghera,1702,21,107,IT,44.80234,7.59572 58809,Pomaretto,1702,21,107,IT,45.15194,8.04661 58811,Pomaro Monferrato,1702,21,107,IT,45.06246,8.59604 58813,Pombia,1702,21,107,IT,45.6555,8.62846 58823,Ponderano,1702,21,107,IT,45.53846,8.05592 58828,Pont-Canavese,1702,21,107,IT,45.42138,7.60024 58865,Pontechianale,1702,21,107,IT,44.62123,7.03002 58867,Pontecurone,1702,21,107,IT,44.9588,8.93289 58879,Pontestura,1702,21,107,IT,45.14245,8.33324 58882,Ponti,1702,21,107,IT,44.62847,8.36461 58896,Ponzano Monferrato,1702,21,107,IT,45.08485,8.26553 58899,Ponzone,1702,21,107,IT,44.58814,8.45935 58913,Portacomaro,1702,21,107,IT,44.95665,8.25804 58915,Porte,1702,21,107,IT,44.88714,7.26982 58951,Portula,1702,21,107,IT,45.67512,8.17244 58964,Postua,1702,21,107,IT,45.71355,8.22853 58983,Pozzol Groppo,1702,21,107,IT,44.87806,9.02985 58986,Pozzolo Formigaro,1702,21,107,IT,44.79925,8.78364 58996,Pradleves,1702,21,107,IT,44.41786,7.28146 58997,Pragelato-Ruà,1702,21,107,IT,45.01364,6.94161 59001,Prali,1702,21,107,IT,44.88944,7.05131 59002,Pralormo,1702,21,107,IT,44.85976,7.9044 59003,Pralungo,1702,21,107,IT,45.58999,8.03976 59006,Pramollo,1702,21,107,IT,44.90814,7.19071 59007,Prarolo,1702,21,107,IT,45.28149,8.47784 59008,Prarostino,1702,21,107,IT,44.86634,7.26762 59009,Prasco,1702,21,107,IT,44.63938,8.55167 59010,Prascorsano,1702,21,107,IT,45.36721,7.61727 59023,Pratiglione,1702,21,107,IT,45.35275,7.59602 59031,Prato Sesia,1702,21,107,IT,45.65067,8.37293 59038,Pray,1702,21,107,IT,45.67508,8.20951 59039,Prazzo Superiore,1702,21,107,IT,44.48297,7.05468 59047,Predosa,1702,21,107,IT,44.75049,8.65568 59054,Premeno,1702,21,107,IT,45.97818,8.59587 59056,Premia,1702,21,107,IT,46.26807,8.3383 59059,Premosello-Chiovenda,1702,21,107,IT,46.0038,8.32973 59074,Priero,1702,21,107,IT,44.37604,8.09334 59079,Priocca,1702,21,107,IT,44.78624,8.06424 59080,Priola,1702,21,107,IT,44.24478,8.02149 59107,Provincia di Alessandria,1702,21,107,IT,44.81667,8.7 59110,Provincia di Asti,1702,21,107,IT,44.91667,8.16667 59116,Provincia di Biella,1702,21,107,IT,45.58713,8.08594 59129,Provincia di Cuneo,1702,21,107,IT,44.51667,7.56667 59152,Provincia di Novara,1702,21,107,IT,45.58533,8.57781 59186,Provincia di Vercelli,1702,21,107,IT,45.33188,8.41415 59104,Provincia Verbano-Cusio-Ossola,1702,21,107,IT,45.93333,8.55 59192,Prunetto,1702,21,107,IT,44.48894,8.14374 59214,Quagliuzzo,1702,21,107,IT,45.42654,7.78101 59216,Quaranti,1702,21,107,IT,44.75095,8.44914 59219,Quaregna,1702,21,107,IT,45.58116,8.16372 59220,Quargnento,1702,21,107,IT,44.94566,8.48821 59221,Quarna Sopra,1702,21,107,IT,45.87307,8.37355 59222,Quarna Sotto,1702,21,107,IT,45.86917,8.36332 59223,Quarona,1702,21,107,IT,45.76044,8.26749 59234,Quassolo,1702,21,107,IT,45.52294,7.83305 59235,Quattordio,1702,21,107,IT,44.89877,8.40495 59243,Quincinetto,1702,21,107,IT,45.56157,7.80834 59248,Quinto Vercellese,1702,21,107,IT,45.3792,8.3621 59257,Racconigi,1702,21,107,IT,44.76598,7.67893 59289,Rassa,1702,21,107,IT,45.76821,8.01208 59303,Re,1702,21,107,IT,46.13148,8.54569 59308,Reano,1702,21,107,IT,45.05217,7.42779 59312,Recetto,1702,21,107,IT,45.45965,8.43503 59316,Refrancore,1702,21,107,IT,44.93635,8.34084 59340,Revello,1702,21,107,IT,44.65451,7.39026 59342,Revigliasco,1702,21,107,IT,45.01589,7.73306 59343,Revigliasco dAsti,1702,21,107,IT,44.85755,8.16044 59361,Ribordone,1702,21,107,IT,45.43255,7.50231 59363,Ricaldone,1702,21,107,IT,44.73235,8.46814 59364,Ricca,1702,21,107,IT,44.66127,8.04527 59376,Rifreddo,1702,21,107,IT,44.65073,7.34642 59382,Rima,1702,21,107,IT,45.88542,7.99864 59383,Rimasco,1702,21,107,IT,45.86025,8.06412 59384,Rimella,1702,21,107,IT,45.90807,8.18222 59414,Rittana,1702,21,107,IT,44.35103,7.39843 59415,Riva,1702,21,107,IT,44.89252,7.38189 59417,Riva Presso Chieri,1702,21,107,IT,44.98338,7.87313 59418,Riva Valdobbia,1702,21,107,IT,45.83097,7.95661 59421,Rivalba,1702,21,107,IT,45.11669,7.88811 59423,Rivalta Bormida,1702,21,107,IT,44.70975,8.55175 59424,Rivalta di Torino,1702,21,107,IT,45.03268,7.52042 59427,Rivara,1702,21,107,IT,45.33042,7.649 59428,Rivarolo Canavese,1702,21,107,IT,45.32829,7.7211 59431,Rivarone,1702,21,107,IT,44.97686,8.71565 59432,Rivarossa,1702,21,107,IT,45.24954,7.71953 59434,Rive,1702,21,107,IT,45.21364,8.41701 59441,Rivoli,1702,21,107,IT,45.07073,7.51465 59448,Roapiana,1702,21,107,IT,44.34079,7.82329 59449,Roaschia,1702,21,107,IT,44.27023,7.45573 59450,Roascio,1702,21,107,IT,44.41714,8.02234 59451,Roasio,1702,21,107,IT,45.60457,8.28482 59452,Roata Rossi,1702,21,107,IT,44.44383,7.52572 59453,Roatto,1702,21,107,IT,44.95205,8.02693 59454,Robassomero,1702,21,107,IT,45.19841,7.56754 59462,Robella,1702,21,107,IT,45.10165,8.10193 59463,Robilante,1702,21,107,IT,44.29288,7.51367 59464,Roburent,1702,21,107,IT,44.30633,7.89224 59465,Rocca Canavese,1702,21,107,IT,45.3087,7.57875 59467,Rocca Cigliè,1702,21,107,IT,44.44523,7.95094 59481,Rocca dArazzo,1702,21,107,IT,44.87205,8.28464 59468,Rocca De Baldi,1702,21,107,IT,44.42363,7.76114 59469,Rocca Grimalda,1702,21,107,IT,44.67145,8.64845 59493,Roccabruna,1702,21,107,IT,44.47453,7.34373 59497,Roccaforte Ligure,1702,21,107,IT,44.6778,9.028 59498,Roccaforte Mondovì,1702,21,107,IT,44.31721,7.74426 59523,Roccasparvera,1702,21,107,IT,44.34213,7.44153 59527,Roccaverano,1702,21,107,IT,44.59224,8.27214 59529,Roccavione,1702,21,107,IT,44.31355,7.47845 59536,Rocchetta Belbo,1702,21,107,IT,44.63604,8.17534 59537,Rocchetta Ligure,1702,21,107,IT,44.70655,9.05046 59540,Rocchetta Palafea,1702,21,107,IT,44.70744,8.34534 59542,Rocchetta Tanaro,1702,21,107,IT,44.85865,8.34564 59545,Roddi,1702,21,107,IT,44.67964,7.97544 59546,Roddino,1702,21,107,IT,44.57384,8.01914 59548,Rodello,1702,21,107,IT,44.62854,8.05684 59568,Roletto,1702,21,107,IT,44.92444,7.33232 59571,Romagnano Sesia,1702,21,107,IT,45.63279,8.38697 59577,Romano Canavese,1702,21,107,IT,45.39925,7.86885 59584,Romentino,1702,21,107,IT,45.46296,8.71811 59602,Ronco Biellese,1702,21,107,IT,45.57846,8.09072 59604,Ronco Canavese,1702,21,107,IT,45.50081,7.54702 59615,Rondissone,1702,21,107,IT,45.2463,7.96426 59616,Ronsecco,1702,21,107,IT,45.25284,8.27749 59620,Roppolo,1702,21,107,IT,45.42056,8.06972 59622,Rorà,1702,21,107,IT,44.79214,7.19902 59621,Roreto,1702,21,107,IT,44.66932,7.83423 59628,Rosazza,1702,21,107,IT,45.67576,7.97712 59640,Rosignano Monferrato,1702,21,107,IT,45.08055,8.39974 59645,Rossa,1702,21,107,IT,45.83327,8.12432 59646,Rossana,1702,21,107,IT,44.5447,7.43193 59652,Rosta,1702,21,107,IT,45.06795,7.46512 59666,Roure,1702,21,107,IT,45.00214,7.13161 59668,Rovasenda,1702,21,107,IT,45.53866,8.31592 59691,Rubiana,1702,21,107,IT,45.13622,7.38439 59695,Rueglio,1702,21,107,IT,45.46826,7.75462 59697,Ruffia,1702,21,107,IT,44.70598,7.60391 59712,Sabbia,1702,21,107,IT,45.8572,8.2358 59724,Sagliano Micca,1702,21,107,IT,45.62576,8.04332 59740,Sala Biellese,1702,21,107,IT,45.50856,7.958 59744,Sala Monferrato,1702,21,107,IT,45.07546,8.36119 59749,Salasco,1702,21,107,IT,45.32556,8.26423 59750,Salassa,1702,21,107,IT,45.36175,7.68297 59751,Salbertrand,1702,21,107,IT,45.0735,6.88744 59754,Sale,1702,21,107,IT,44.97932,8.80963 59757,Sale delle Langhe,1702,21,107,IT,44.39523,8.08014 59756,Sale San Giovanni,1702,21,107,IT,44.39914,8.07794 59760,Salerano Canavese,1702,21,107,IT,45.45806,7.85112 59766,Sali Vercellese,1702,21,107,IT,45.30986,8.32893 59769,Saliceto,1702,21,107,IT,44.41334,8.16864 59778,Salmour,1702,21,107,IT,44.57556,7.79148 59784,Saluggia,1702,21,107,IT,45.23687,8.0146 59785,Salussola,1702,21,107,IT,45.44666,8.111 59786,Saluzzo,1702,21,107,IT,44.64671,7.49309 59794,Salza di Pinerolo,1702,21,107,IT,44.94004,7.05241 59808,Sambuco,1702,21,107,IT,44.3351,7.07878 59813,Samone,1702,21,107,IT,45.44914,7.84198 59815,Sampeyre,1702,21,107,IT,44.57846,7.19039 59827,San Benedetto Belbo,1702,21,107,IT,44.49014,8.05784 59834,San Benigno Canavese,1702,21,107,IT,45.22617,7.78427 59835,San Bernardino Verbano,1702,21,107,IT,45.95638,8.51922 59855,San Carlo Canavese,1702,21,107,IT,45.24455,7.60572 59876,San Colombano Belmonte,1702,21,107,IT,45.38225,7.62101 59883,San Cristoforo,1702,21,107,IT,44.69304,8.74939 59887,San Damiano dAsti,1702,21,107,IT,44.83344,8.06353 59885,San Damiano Macra,1702,21,107,IT,44.48848,7.25606 59890,San Defendente,1702,21,107,IT,44.39088,7.49091 59893,San Didero,1702,21,107,IT,45.13544,7.21301 59927,San Francesco al Campo,1702,21,107,IT,45.22732,7.65479 59936,San Germano Chisone,1702,21,107,IT,44.90204,7.23662 59937,San Germano Vercellese,1702,21,107,IT,45.3509,8.24717 59945,San Giacomo Vercellese,1702,21,107,IT,45.49816,8.32673 59948,San Gillio,1702,21,107,IT,45.1405,7.53285 59953,San Giorgio,1702,21,107,IT,45.10778,8.41421 59955,San Giorgio Canavese,1702,21,107,IT,45.33557,7.79823 59958,San Giorgio Monferrato,1702,21,107,IT,45.10735,8.41614 59961,San Giorgio Scarampi,1702,21,107,IT,44.61094,8.24244 59977,San Giorio,1702,21,107,IT,45.12752,7.17683 60006,San Giuliano Vecchio,1702,21,107,IT,44.88902,8.76057 60010,San Giuseppe,1702,21,107,IT,45.14701,7.04271 60017,San Giusto Canavese,1702,21,107,IT,45.31535,7.81001 60037,San Lorenzo,1702,21,107,IT,46.1272,8.20065 60071,San Martino Alfieri,1702,21,107,IT,44.81795,8.10994 60074,San Martino Canavese,1702,21,107,IT,45.39453,7.81622 60098,San Marzano Oliveto,1702,21,107,IT,44.75445,8.29534 60102,San Maurizio,1702,21,107,IT,45.21705,7.63052 60103,San Maurizio DOpaglio,1702,21,107,IT,45.77299,8.39599 60110,San Mauro Torinese,1702,21,107,IT,45.10359,7.76803 60118,San Michele Mondovì,1702,21,107,IT,44.37595,7.90829 60131,San Nazzaro Sesia,1702,21,107,IT,45.43804,8.42498 60159,San Paolo Solbrito,1702,21,107,IT,44.95065,7.97073 60180,San Pietro Mosezzo,1702,21,107,IT,45.45455,8.5445 60182,San Pietro Val Lemina,1702,21,107,IT,44.90654,7.31092 60209,San Ponso,1702,21,107,IT,45.35101,7.67111 60219,San Raffaele Cimena,1702,21,107,IT,45.14665,7.84932 60223,San Rocco,1702,21,107,IT,44.39653,7.4723 60231,San Salvatore Monferrato,1702,21,107,IT,44.99489,8.56639 60236,San Sebastiano Curone,1702,21,107,IT,44.78633,9.06446 60238,San Sebastiano da Po,1702,21,107,IT,45.16755,7.95723 60241,San Secondo di Pinerolo,1702,21,107,IT,44.86644,7.29842 60299,Sandigliano,1702,21,107,IT,45.52204,8.0766 60303,Sanfrè,1702,21,107,IT,44.7518,7.80289 60302,Sanfront,1702,21,107,IT,44.64698,7.32243 60304,Sangano,1702,21,107,IT,45.02508,7.44987 60317,SantAgata Fossili,1702,21,107,IT,44.78475,8.92115 60329,SantAlbano Stura,1702,21,107,IT,44.50759,7.72282 60337,SantAmbrogio di Torino,1702,21,107,IT,45.09622,7.366 60378,SantAntonino di Susa,1702,21,107,IT,45.10763,7.27333 60381,SantAntonio,1702,21,107,IT,44.75887,8.06996 60466,Santa Maria Maggiore,1702,21,107,IT,46.13683,8.46108 60500,Santa Vittoria dAlba,1702,21,107,IT,44.69864,7.93733 60505,Santena,1702,21,107,IT,44.94624,7.77303 60508,Santhià,1702,21,107,IT,45.36795,8.17012 60510,Santino,1702,21,107,IT,45.95606,8.51914 60512,Santo Stefano Belbo,1702,21,107,IT,44.71023,8.23269 60515,Santo Stefano Roero,1702,21,107,IT,44.78844,7.94093 60544,Sardigliano,1702,21,107,IT,44.7524,8.89575 60547,Sarezzano,1702,21,107,IT,44.86878,8.91237 60581,Sauze dOulx,1702,21,107,IT,45.02659,6.86074 60582,Sauze di Cesana,1702,21,107,IT,44.94058,6.85988 60587,Savigliano,1702,21,107,IT,44.64808,7.65677 60600,Savonera,1702,21,107,IT,45.11368,7.61506 60603,Scagnello,1702,21,107,IT,44.33333,7.98644 60608,Scalenghe,1702,21,107,IT,44.8899,7.49423 60634,Scarmagno,1702,21,107,IT,45.38492,7.8411 60635,Scarnafigi,1702,21,107,IT,44.67944,7.56513 60657,Sciolze,1702,21,107,IT,45.09453,7.87818 60663,Scopa,1702,21,107,IT,45.79297,8.11402 60664,Scopello,1702,21,107,IT,45.77369,8.09435 60672,Scurzolengo,1702,21,107,IT,44.96485,8.27914 60711,Selve Marcone,1702,21,107,IT,45.61976,8.08742 60733,Seppiana,1702,21,107,IT,46.05828,8.21661 60748,Serole,1702,21,107,IT,44.55404,8.25974 60760,Serralunga dAlba,1702,21,107,IT,44.61004,7.99944 60761,Serralunga di Crea,1702,21,107,IT,45.1011,8.28069 60772,Serravalle Langhe,1702,21,107,IT,44.55995,8.05944 60774,Serravalle Scrivia,1702,21,107,IT,44.72277,8.85635 60775,Serravalle Sesia,1702,21,107,IT,45.68485,8.3085 60779,Serre,1702,21,107,IT,44.54033,7.09032 60790,Sessame,1702,21,107,IT,44.67064,8.33684 60804,Sestriere,1702,21,107,IT,44.95864,6.87751 60809,Settime,1702,21,107,IT,44.96175,8.11433 60813,Settimo Rottaro,1702,21,107,IT,45.40776,7.99352 60815,Settimo Torinese,1702,21,107,IT,45.13925,7.77008 60816,Settimo Vittone,1702,21,107,IT,45.54929,7.83328 60823,Sezzadio,1702,21,107,IT,44.78485,8.57255 60854,Sillavengo,1702,21,107,IT,45.52067,8.44103 60856,Silvano dOrba,1702,21,107,IT,44.6858,8.67182 60867,Sinio,1702,21,107,IT,44.60034,8.01994 60886,Sizzano,1702,21,107,IT,45.57663,8.43613 60898,Soglio,1702,21,107,IT,44.99625,8.07843 60914,Solero,1702,21,107,IT,44.91835,8.50754 60922,Solonghello,1702,21,107,IT,45.12905,8.28323 60927,Somano,1702,21,107,IT,44.53534,8.00784 60932,Sommariva del Bosco,1702,21,107,IT,44.77257,7.78177 60931,Sommariva Perno,1702,21,107,IT,44.74564,7.90063 60943,Soprana,1702,21,107,IT,45.63947,8.19892 60952,Sordevolo,1702,21,107,IT,45.57346,7.97342 60962,Soriso,1702,21,107,IT,45.74037,8.40953 60972,Sostegno,1702,21,107,IT,45.65287,8.26982 60987,Sozzago,1702,21,107,IT,45.39832,8.72271 60991,Sparone,1702,21,107,IT,45.41442,7.54516 61007,Spigno Monferrato,1702,21,107,IT,44.54314,8.33395 61018,Spineto Scrivia,1702,21,107,IT,44.83735,8.87375 61020,Spinetta Marengo,1702,21,107,IT,44.88554,8.6775 61038,Staffa,1702,21,107,IT,45.96855,7.96708 61058,Stazzano,1702,21,107,IT,44.72728,8.86846 61087,Strambinello,1702,21,107,IT,45.42306,7.76992 61088,Strambino,1702,21,107,IT,45.3799,7.88967 61093,Stresa,1702,21,107,IT,45.88158,8.53834 61095,Strevi,1702,21,107,IT,44.69985,8.5247 61100,Stroppiana,1702,21,107,IT,45.23037,8.45461 61101,Stroppo,1702,21,107,IT,44.50653,7.12652 61122,Suno,1702,21,107,IT,45.63137,8.54437 61128,Susa,1702,21,107,IT,45.13677,7.05809 61143,Tagliaferro,1702,21,107,IT,44.9785,7.6643 61146,Tagliolo Monferrato,1702,21,107,IT,44.63835,8.66585 61164,Tarantasca,1702,21,107,IT,44.49322,7.54459 61172,Tassarolo,1702,21,107,IT,44.72811,8.77164 61179,Tavagnasco,1702,21,107,IT,45.54448,7.82293 61194,Tavigliano,1702,21,107,IT,45.62206,8.05172 61218,Terdobbiate,1702,21,107,IT,45.37588,8.69458 61231,Ternengo,1702,21,107,IT,45.58896,8.11372 61253,Terruggia,1702,21,107,IT,45.08199,8.44428 61256,Terzo,1702,21,107,IT,44.67045,8.42164 61266,Tetti Neirotti,1702,21,107,IT,45.05338,7.54077 61267,Tettorosso,1702,21,107,IT,44.47284,7.34291 61275,Ticineto,1702,21,107,IT,45.09627,8.55315 61278,Tigliole,1702,21,107,IT,44.88625,8.07663 61294,Toceno,1702,21,107,IT,46.14468,8.46902 61300,Tollegno,1702,21,107,IT,45.59077,8.05089 61308,Tonco,1702,21,107,IT,45.02344,8.18942 61309,Tonengo,1702,21,107,IT,45.11765,8.00213 61310,Tonengo-Casale,1702,21,107,IT,45.28609,7.93964 61329,Torino,1702,21,107,IT,45.13333,7.36667 61333,Tornaco,1702,21,107,IT,45.35651,8.71745 61344,Torrazza Piemonte,1702,21,107,IT,45.21535,7.97673 61346,Torrazzo,1702,21,107,IT,45.49874,7.95428 61350,Torre Bormida,1702,21,107,IT,44.56274,8.15444 61352,Torre Canavese,1702,21,107,IT,45.39206,7.75982 61356,Torre Mondovì,1702,21,107,IT,44.35283,7.89964 61359,Torre Pellice,1702,21,107,IT,44.82102,7.21672 61360,Torre San Giorgio,1702,21,107,IT,44.73574,7.52813 61388,Torresina,1702,21,107,IT,44.43364,8.03674 61407,Torrion Quartara,1702,21,107,IT,45.41819,8.61472 61412,Tortona,1702,21,107,IT,44.89784,8.86374 61436,Trana,1702,21,107,IT,45.03862,7.421 61442,Trarego,1702,21,107,IT,46.03435,8.66998 61446,Trasquera,1702,21,107,IT,46.21338,8.21271 61448,Trausella,1702,21,107,IT,45.48996,7.76312 61452,Traversella,1702,21,107,IT,45.50907,7.74938 61454,Traves,1702,21,107,IT,45.26795,7.43081 61466,Trecate,1702,21,107,IT,45.43399,8.7364 61476,Treiso,1702,21,107,IT,44.68974,8.08814 61507,Treville,1702,21,107,IT,45.09685,8.35954 61512,Trezzo Tinella,1702,21,107,IT,44.67704,8.10754 61520,Tricerro,1702,21,107,IT,45.2357,8.32746 61529,Trinità,1702,21,107,IT,44.5073,7.75637 61532,Trino,1702,21,107,IT,45.19538,8.29621 61536,Trisobbio,1702,21,107,IT,44.66063,8.58621 61540,Trivero-Prativero-Ponzone,1702,21,107,IT,45.66047,8.17402 61548,Trofarello,1702,21,107,IT,44.98238,7.74688 61553,Trontano,1702,21,107,IT,46.12248,8.33322 61555,Tronzano Vercellese,1702,21,107,IT,45.34226,8.17368 61575,Turin,1702,21,107,IT,45.07049,7.68682 61617,Usseaux,1702,21,107,IT,45.04894,7.02851 61618,Usseglio,1702,21,107,IT,45.23274,7.21993 61624,Vaccheria,1702,21,107,IT,44.727,8.04295 61635,Vaglio Serra,1702,21,107,IT,44.79635,8.33894 61639,Vaie,1702,21,107,IT,45.10234,7.28941 61645,Val della Torre,1702,21,107,IT,45.15515,7.44501 61652,Valdengo,1702,21,107,IT,45.56706,8.13832 61654,Valdieri,1702,21,107,IT,44.27763,7.39763 61659,Valduggia,1702,21,107,IT,45.72722,8.3273 61663,Valentino,1702,21,107,IT,45.15558,8.09391 61664,Valenza,1702,21,107,IT,45.01242,8.64379 61669,Valfenera,1702,21,107,IT,44.90175,7.96433 61673,Valgioie,1702,21,107,IT,45.064,7.34927 61675,Valgrana,1702,21,107,IT,44.41181,7.38068 61681,Vallanzengo,1702,21,107,IT,45.60327,8.15042 61689,Valle Mosso,1702,21,107,IT,45.63069,8.14764 61691,Valle San Bartolomeo,1702,21,107,IT,44.95017,8.6404 61692,Valle San Nicolao,1702,21,107,IT,45.60706,8.14102 61723,Vallo Torinese,1702,21,107,IT,45.22355,7.49632 61726,Valloriate,1702,21,107,IT,44.33763,7.37393 61728,Valmacca,1702,21,107,IT,45.10101,8.58382 61729,Valmadonna,1702,21,107,IT,44.97444,8.61146 61731,Valmala,1702,21,107,IT,44.54423,7.34603 61736,Valperga,1702,21,107,IT,45.37004,7.66124 61737,Valprato Soana,1702,21,107,IT,45.52166,7.54948 61741,Valstrona,1702,21,107,IT,45.90767,8.34322 61755,Vanzone,1702,21,107,IT,45.97785,8.10826 61756,Vaprio DAgogna,1702,21,107,IT,45.60322,8.55402 61759,Varallo,1702,21,107,IT,45.81383,8.25814 61760,Varallo Pombia,1702,21,107,IT,45.66784,8.6285 61771,Varisella,1702,21,107,IT,45.20835,7.48381 61776,Varzo,1702,21,107,IT,46.20736,8.25267 61784,Vauda Canavese Superiore,1702,21,107,IT,45.27947,7.61945 61797,Veglio,1702,21,107,IT,45.64057,8.11412 61809,Venaria Reale,1702,21,107,IT,45.12597,7.63136 61811,Venasca,1702,21,107,IT,44.56134,7.39698 61812,Venaus,1702,21,107,IT,45.1571,7.0107 61834,Verbania,1702,21,107,IT,45.92136,8.55183 61838,Vercelli,1702,21,107,IT,45.32163,8.41989 61844,Verduno,1702,21,107,IT,44.66614,7.93074 61849,Vergnasco,1702,21,107,IT,45.48803,8.08553 61853,Vernante,1702,21,107,IT,44.24447,7.53455 61861,Verolengo,1702,21,107,IT,45.1904,7.97126 61868,Verrone,1702,21,107,IT,45.50824,8.11514 61870,Verrua Savoia,1702,21,107,IT,45.15675,8.09223 61874,Veruno,1702,21,107,IT,45.68887,8.52863 61878,Verzuolo,1702,21,107,IT,44.59279,7.48164 61882,Vesime,1702,21,107,IT,44.63535,8.22683 61883,Vespolate,1702,21,107,IT,45.34953,8.66878 61886,Vestignè,1702,21,107,IT,45.38655,7.95336 61892,Vezza dAlba,1702,21,107,IT,44.76274,8.00793 61902,Viale,1702,21,107,IT,45.00015,8.04993 61903,Vialfrè,1702,21,107,IT,45.38076,7.81822 61906,Viarigi,1702,21,107,IT,44.98055,8.35714 61916,Vico Canavese,1702,21,107,IT,45.49342,7.77887 61921,Vicoforte,1702,21,107,IT,44.36393,7.86264 61923,Vicolungo,1702,21,107,IT,45.47522,8.46124 61932,Vidracco,1702,21,107,IT,45.43066,7.75742 61936,Viganella,1702,21,107,IT,46.05173,8.19374 61951,Vigliano Biellese,1702,21,107,IT,45.56317,8.10509 61952,Vigliano dAsti,1702,21,107,IT,44.83405,8.22914 61956,Vignale Monferrato,1702,21,107,IT,45.00996,8.39703 61963,Vignole Borbera,1702,21,107,IT,44.70819,8.89026 61965,Vignolo,1702,21,107,IT,44.36364,7.47208 61966,Vignone,1702,21,107,IT,45.96118,8.56372 61974,Vigone,1702,21,107,IT,44.84236,7.49774 61979,Viguzzolo,1702,21,107,IT,44.90567,8.91968 61982,Villa,1702,21,107,IT,44.74606,7.90066 62038,Villa del Bosco,1702,21,107,IT,45.61669,8.27776 62021,Villa San Secondo,1702,21,107,IT,45.00513,8.13462 62044,Villa-Borgo,1702,21,107,IT,44.69865,7.93486 62051,Villadeati,1702,21,107,IT,45.07225,8.16793 62053,Villadossola,1702,21,107,IT,46.0708,8.26709 62054,Villafalletto,1702,21,107,IT,44.54624,7.54069 62060,Villafranca dAsti,1702,21,107,IT,44.91539,8.02658 62057,Villafranca Piemonte,1702,21,107,IT,44.78824,7.50788 62079,Villalvernia,1702,21,107,IT,44.81387,8.85532 62085,Villamiroglio,1702,21,107,IT,45.13455,8.17103 62096,Villanova Biellese,1702,21,107,IT,45.48156,8.19432 62097,Villanova Canavese,1702,21,107,IT,45.24355,7.55212 62107,Villanova dAsti,1702,21,107,IT,44.94299,7.93671 62099,Villanova Mondovì,1702,21,107,IT,44.34804,7.76752 62100,Villanova Monferrato,1702,21,107,IT,45.18111,8.47813 62102,Villanova Solaro,1702,21,107,IT,44.72994,7.57443 62121,Villar Dora,1702,21,107,IT,45.11465,7.38352 62122,Villar Focchiardo,1702,21,107,IT,45.11244,7.23841 62123,Villar Pellice,1702,21,107,IT,44.80893,7.15978 62124,Villar Perosa,1702,21,107,IT,44.91849,7.24821 62125,Villar San Costanzo,1702,21,107,IT,44.48473,7.38223 62126,Villarbasse,1702,21,107,IT,45.04514,7.46842 62127,Villarboit,1702,21,107,IT,45.43775,8.33694 62128,Villareggia,1702,21,107,IT,45.30885,7.97724 62130,Villaromagnano,1702,21,107,IT,44.84965,8.88775 62141,Villastellone,1702,21,107,IT,44.92201,7.7436 62142,Villata,1702,21,107,IT,45.3865,8.43279 62152,Villette,1702,21,107,IT,46.13188,8.53422 62160,Vinadio,1702,21,107,IT,44.30759,7.17628 62162,Vinchio,1702,21,107,IT,44.81095,8.32094 62164,Vinovo,1702,21,107,IT,44.94674,7.63252 62165,Vinzaglio,1702,21,107,IT,45.32309,8.51979 62166,Viola,1702,21,107,IT,44.29081,7.96491 62169,Virle Piemonte,1702,21,107,IT,44.86369,7.57033 62171,Vische,1702,21,107,IT,45.33566,7.94482 62174,Visone,1702,21,107,IT,44.66184,8.50075 62177,Vistrorio,1702,21,107,IT,45.44147,7.76781 62196,Viù,1702,21,107,IT,45.23785,7.37333 62192,Viverone,1702,21,107,IT,45.42726,8.04942 62199,Vocca,1702,21,107,IT,45.83269,8.1958 62203,Vogogna,1702,21,107,IT,46.01002,8.29137 62210,Volpedo,1702,21,107,IT,44.88887,8.98615 62211,Volpeglino,1702,21,107,IT,44.89296,8.95945 62212,Volpiano,1702,21,107,IT,45.1994,7.77546 62214,Voltaggio,1702,21,107,IT,44.62095,8.84274 62223,Volvera,1702,21,107,IT,44.95484,7.51142 62225,Vottignasco,1702,21,107,IT,44.56413,7.57913 62261,Zimone,1702,21,107,IT,45.44912,8.03734 62278,Zubiena,1702,21,107,IT,45.49266,7.99552 62284,Zumaglia,1702,21,107,IT,45.59386,8.08942 135239,Abbasanta,1715,88,107,IT,40.12812,8.8176 135299,Aggius,1715,88,107,IT,40.92995,9.06517 135305,Aglientu,1715,88,107,IT,41.07906,9.11267 135323,Aidomaggiore,1715,88,107,IT,40.17147,8.85679 135453,Alà dei Sardi,1715,88,107,IT,40.65007,9.32783 135348,Albagiara,1715,88,107,IT,39.78724,8.86184 135393,Ales,1715,88,107,IT,39.7683,8.8152 135404,Alghero,1715,88,107,IT,40.55969,8.31953 135414,Allai,1715,88,107,IT,39.95701,8.86354 135494,Anela,1715,88,107,IT,40.44176,9.05743 135553,Arbatax,1715,88,107,IT,39.93444,9.70556 135556,Arborea,1715,88,107,IT,39.77276,8.58129 135558,Arbus,1715,88,107,IT,39.52616,8.5997 135576,Ardara,1715,88,107,IT,40.6214,8.80987 135577,Ardauli,1715,88,107,IT,40.08436,8.91228 135607,Aritzo,1715,88,107,IT,39.95903,9.19265 135617,Armungia,1715,88,107,IT,39.52154,9.38066 135646,Arzachena,1715,88,107,IT,41.0762,9.39055 135648,Arzana,1715,88,107,IT,39.91742,9.52766 135665,Assemini,1715,88,107,IT,39.29123,8.99879 135668,Assolo,1715,88,107,IT,39.80915,8.91932 135671,Asuni,1715,88,107,IT,39.87101,8.94603 135683,Atzara,1715,88,107,IT,39.99249,9.07616 135695,Austis,1715,88,107,IT,40.07122,9.08878 135730,Bacu Abis,1715,88,107,IT,39.24301,8.46491 135733,Badesi,1715,88,107,IT,40.9646,8.88235 135790,Ballao,1715,88,107,IT,39.54919,9.36178 135800,Banari,1715,88,107,IT,40.57056,8.70052 135801,Bancali,1715,88,107,IT,40.73549,8.46328 135808,Baradili,1715,88,107,IT,39.72189,8.89731 135815,Baratili San Pietro,1715,88,107,IT,39.9922,8.55586 135846,Baressa,1715,88,107,IT,39.71308,8.87459 135854,Bari Sardo,1715,88,107,IT,39.84135,9.64606 135869,Barrali,1715,88,107,IT,39.47532,9.10204 135872,Barumini,1715,88,107,IT,39.70215,9.00338 135912,Bauladu,1715,88,107,IT,40.02055,8.67192 135913,Baunei,1715,88,107,IT,40.03132,9.66374 135969,Belvì,1715,88,107,IT,39.96181,9.18419 135974,Benetutti,1715,88,107,IT,40.45689,9.16754 135982,Berchidda,1715,88,107,IT,40.78476,9.1651 136017,Bessude,1715,88,107,IT,40.55449,8.72753 136045,Bidonì,1715,88,107,IT,40.11305,8.93643 136057,Birori,1715,88,107,IT,40.26593,8.8157 136070,Bitti,1715,88,107,IT,40.47956,9.38403 136112,Bolotana,1715,88,107,IT,40.3244,8.96109 136123,Bonarcado,1715,88,107,IT,40.09836,8.65534 136140,Bonnanaro,1715,88,107,IT,40.53265,8.76389 136141,Bono,1715,88,107,IT,40.41387,9.03187 136142,Bonorva,1715,88,107,IT,40.41839,8.76831 136225,Boroneddu,1715,88,107,IT,40.11262,8.87023 136226,Borore,1715,88,107,IT,40.21576,8.80365 136230,Bortigali,1715,88,107,IT,40.28268,8.83946 136231,Bortigiadas,1715,88,107,IT,40.89167,9.04352 136233,Borutta,1715,88,107,IT,40.52236,8.74352 136236,Bosa,1715,88,107,IT,40.29927,8.49827 136262,Bottidda,1715,88,107,IT,40.39242,9.01039 136390,Buddusò,1715,88,107,IT,40.57723,9.25839 136392,Budoni,1715,88,107,IT,40.70467,9.70384 136395,Buggerru,1715,88,107,IT,39.39831,8.40186 136403,Bultei,1715,88,107,IT,40.4572,9.06367 136404,Bulzi,1715,88,107,IT,40.84666,8.83026 136411,Burcei,1715,88,107,IT,39.34379,9.36027 136413,Burgos,1715,88,107,IT,40.39081,8.99558 136417,Busachi,1715,88,107,IT,40.03422,8.88848 136450,Cabras,1715,88,107,IT,39.92871,8.53242 136468,Cagliari,1715,88,107,IT,39.23054,9.11917 136485,Cala Gonone,1715,88,107,IT,40.28086,9.62971 136490,Calangianus,1715,88,107,IT,40.92027,9.19343 136495,Calasetta,1715,88,107,IT,39.10697,8.36803 136788,Capoterra,1715,88,107,IT,39.1752,8.97199 136852,Carbonia,1715,88,107,IT,39.16465,8.5213 136859,Cardedu,1715,88,107,IT,39.79714,9.62652 136873,Cargeghe,1715,88,107,IT,40.66894,8.61521 136888,Carloforte,1715,88,107,IT,39.14081,8.3039 137314,Castelsardo,1715,88,107,IT,40.91256,8.71453 137335,Castiadas,1715,88,107,IT,39.23704,9.49975 137637,Cheremule,1715,88,107,IT,40.50455,8.72582 137649,Chiaramonti,1715,88,107,IT,40.74829,8.82114 137827,Codaruina,1715,88,107,IT,40.92847,8.82398 137838,Codrongianos,1715,88,107,IT,40.65603,8.6814 137903,Collinas,1715,88,107,IT,39.64059,8.83955 138070,Cortoghiana,1715,88,107,IT,39.21177,8.46548 138089,Cossoine,1715,88,107,IT,40.43068,8.71578 138185,Cuglieri,1715,88,107,IT,40.18804,8.56806 138199,Curcuris,1715,88,107,IT,39.74625,8.83154 138236,Decimomannu,1715,88,107,IT,39.31033,8.96964 138237,Decimoputzu,1715,88,107,IT,39.33522,8.9144 138258,Desulo,1715,88,107,IT,40.01462,9.23061 138283,Dolianova,1715,88,107,IT,39.37791,9.17697 138293,Domus de Maria,1715,88,107,IT,38.94451,8.8625 138294,Domusnovas,1715,88,107,IT,39.32404,8.64921 138299,Donigala Fenugheddu,1715,88,107,IT,39.93501,8.57311 138304,Donorì,1715,88,107,IT,39.43182,9.12674 138306,Dorgali,1715,88,107,IT,40.29221,9.58702 138336,Dualchi,1715,88,107,IT,40.22935,8.89723 138352,Elini,1715,88,107,IT,39.89952,9.53198 138354,Elmas,1715,88,107,IT,39.26878,9.05021 138377,Erula,1715,88,107,IT,40.79244,8.94418 138380,Escalaplano,1715,88,107,IT,39.62574,9.3535 138381,Escolca,1715,88,107,IT,39.69861,9.12139 138385,Esporlatu,1715,88,107,IT,40.38456,8.98983 138387,Esterzili,1715,88,107,IT,39.78041,9.28357 138566,Florinas,1715,88,107,IT,40.649,8.66548 138568,Fluminimaggiore,1715,88,107,IT,39.43878,8.49758 138569,Flussio,1715,88,107,IT,40.26545,8.5381 138590,Fonni,1715,88,107,IT,40.11932,9.25347 138623,Fordongianus,1715,88,107,IT,39.99436,8.81019 138759,Furtei,1715,88,107,IT,39.56253,8.94773 138773,Gadoni,1715,88,107,IT,39.91388,9.1856 138792,Gairo SantElena,1715,88,107,IT,39.84972,9.50472 138822,Galtellì,1715,88,107,IT,40.38451,9.61241 138879,Gavoi,1715,88,107,IT,40.1613,9.19462 138901,Genoni,1715,88,107,IT,39.79361,9.00797 138902,Genuri,1715,88,107,IT,39.74327,8.92407 138915,Gergei,1715,88,107,IT,39.69878,9.09965 138924,Gesico,1715,88,107,IT,39.61636,9.10665 138927,Gesturi,1715,88,107,IT,39.73237,9.02077 138934,Ghilarza,1715,88,107,IT,40.12119,8.83612 138950,Giave,1715,88,107,IT,40.45224,8.75175 138954,Giba,1715,88,107,IT,39.07151,8.6358 138982,Girasole,1715,88,107,IT,39.95205,9.66098 139014,Golfo Aranci,1715,88,107,IT,40.98333,9.63333 139017,Goni,1715,88,107,IT,39.57906,9.28519 139018,Gonnesa,1715,88,107,IT,39.26535,8.47038 139019,Gonnoscodina,1715,88,107,IT,39.69962,8.83598 139020,Gonnosfanadiga,1715,88,107,IT,39.49426,8.662 139021,Gonnosnò,1715,88,107,IT,39.76104,8.87135 139022,Gonnostramatza,1715,88,107,IT,39.68306,8.83283 139150,Guamaggiore,1715,88,107,IT,39.56849,9.07391 139168,Guasila,1715,88,107,IT,39.5598,9.04404 139184,Guspini,1715,88,107,IT,39.53954,8.63502 139191,Iglesias,1715,88,107,IT,39.3092,8.5372 139194,Ilbono,1715,88,107,IT,39.89258,9.54582 139196,Illorai,1715,88,107,IT,40.35271,9.0017 139221,Irgoli,1715,88,107,IT,40.40999,9.63135 139234,Isili,1715,88,107,IT,39.73952,9.11114 139269,Ittireddu,1715,88,107,IT,40.54398,8.90118 139270,Ittiri,1715,88,107,IT,40.59151,8.56976 139277,Jerzu,1715,88,107,IT,39.79289,9.51785 139287,La Caletta,1715,88,107,IT,40.60988,9.75062 139293,La Maddalena,1715,88,107,IT,39.14429,9.01223 139316,Laconi,1715,88,107,IT,39.85325,9.05196 139319,Laerru,1715,88,107,IT,40.81705,8.8365 139360,Lanusei,1715,88,107,IT,39.87927,9.54022 139377,Las Plassas,1715,88,107,IT,39.67979,8.98442 139438,Lei,1715,88,107,IT,40.30641,8.91858 139491,Li Punti-San Giovanni,1715,88,107,IT,40.76338,8.489 139564,Loceri,1715,88,107,IT,39.85816,9.58368 139567,Loculi,1715,88,107,IT,40.40696,9.61056 139574,Lodè,1715,88,107,IT,40.59137,9.53873 139571,Lodine,1715,88,107,IT,40.14926,9.21873 139577,Loiri Porto San Paolo,1715,88,107,IT,40.84262,9.4982 139618,Lotzorai,1715,88,107,IT,39.9694,9.6635 139627,Lu Bagnu,1715,88,107,IT,40.90184,8.68555 139653,Lula,1715,88,107,IT,40.47048,9.48684 139657,Lunamatrona,1715,88,107,IT,39.64943,8.89966 139663,Luogosanto,1715,88,107,IT,41.04681,9.20553 139668,Luras,1715,88,107,IT,40.93643,9.1748 139703,Macomer,1715,88,107,IT,40.26233,8.76733 139740,Magomadas,1715,88,107,IT,40.26321,8.52327 139781,Mamoiada,1715,88,107,IT,40.21487,9.28189 139784,Mandas,1715,88,107,IT,39.65514,9.12955 139817,Mara,1715,88,107,IT,40.41019,8.63664 139818,Maracalagonis,1715,88,107,IT,39.28574,9.22874 139916,Marrubiu,1715,88,107,IT,39.75124,8.63766 139939,Martis,1715,88,107,IT,40.77804,8.80897 139950,Masainas,1715,88,107,IT,39.04993,8.62924 139991,Masullas,1715,88,107,IT,39.70044,8.78371 140013,Meana Sardo,1715,88,107,IT,39.94467,9.07355 140148,Milis,1715,88,107,IT,40.05045,8.63702 140191,Modolo,1715,88,107,IT,40.27535,8.53002 140200,Mogorella,1715,88,107,IT,39.86447,8.85913 140201,Mogoro,1715,88,107,IT,39.68415,8.77661 140261,Monastir,1715,88,107,IT,39.3836,9.04445 140302,Monserrato,1715,88,107,IT,39.25642,9.1444 140467,Monteleone Rocca Doria,1715,88,107,IT,40.47206,8.56071 140553,Monti,1715,88,107,IT,40.80715,9.32553 140590,Montresta,1715,88,107,IT,40.37365,8.49962 140609,Mores,1715,88,107,IT,40.54745,8.83302 140614,Morgongiori,1715,88,107,IT,39.7463,8.77041 140686,Muravera,1715,88,107,IT,39.41972,9.57471 140695,Muros,1715,88,107,IT,40.67902,8.6178 140699,Musei,1715,88,107,IT,39.30232,8.66613 140715,Narbolia,1715,88,107,IT,40.04784,8.57552 140716,Narcao,1715,88,107,IT,39.1675,8.675 140742,Neoneli,1715,88,107,IT,40.06475,8.94673 140805,Noragugume,1715,88,107,IT,40.22443,8.92012 140806,Norbello,1715,88,107,IT,40.13475,8.83203 140843,Nughedu San Nicolò,1715,88,107,IT,40.55736,9.02142 140844,Nughedu Santa Vittoria,1715,88,107,IT,40.10135,8.95247 140845,Nule,1715,88,107,IT,40.46266,9.19076 140846,Nulvi,1715,88,107,IT,40.78447,8.74358 140849,Nuoro,1715,88,107,IT,40.31991,9.32568 140853,Nurachi,1715,88,107,IT,39.97451,8.53965 140854,Nuragus,1715,88,107,IT,39.77771,9.03724 140855,Nurallao,1715,88,107,IT,39.78908,9.07802 140856,Nuraminis,1715,88,107,IT,39.44258,9.01395 140857,Nuraxinieddu,1715,88,107,IT,39.93843,8.5991 140858,Nureci,1715,88,107,IT,39.82329,8.97484 140859,Nurri,1715,88,107,IT,39.71122,9.2299 140864,Nuxis,1715,88,107,IT,39.15456,8.73953 140884,Olbia,1715,88,107,IT,40.92337,9.49802 140896,Olia Speciosa,1715,88,107,IT,39.27806,9.525 140897,Oliena,1715,88,107,IT,40.27617,9.40193 140905,Ollastra,1715,88,107,IT,39.95095,8.73423 140906,Ollolai,1715,88,107,IT,40.16805,9.17776 140908,Olmedo,1715,88,107,IT,40.65156,8.38021 140916,Olzai,1715,88,107,IT,40.18238,9.14679 140921,Onanì,1715,88,107,IT,40.48536,9.44324 140924,Onifai,1715,88,107,IT,40.40694,9.65005 140925,Oniferi,1715,88,107,IT,40.27196,9.17033 140937,Orani,1715,88,107,IT,40.252,9.18149 140950,Orgosolo,1715,88,107,IT,40.2053,9.35445 140960,Oristano,1715,88,107,IT,39.9036,8.59257 140966,Orosei,1715,88,107,IT,40.37826,9.69248 140967,Orotelli,1715,88,107,IT,40.30663,9.1215 140969,Orroli,1715,88,107,IT,39.69237,9.24995 140980,Ortacesus,1715,88,107,IT,39.53904,9.08695 140991,Ortueri,1715,88,107,IT,40.03545,8.98591 140992,Orune,1715,88,107,IT,40.40786,9.36963 141002,Oschiri,1715,88,107,IT,40.71977,9.10102 141003,Osidda,1715,88,107,IT,40.52368,9.22053 141006,Osilo,1715,88,107,IT,40.74349,8.67113 141008,Osini,1715,88,107,IT,39.82257,9.4964 141026,Ossi,1715,88,107,IT,40.67483,8.59254 141047,Ottana,1715,88,107,IT,40.23402,9.04459 141049,Ottava,1715,88,107,IT,40.78525,8.47543 141059,Ovodda,1715,88,107,IT,40.09525,9.16103 141062,Ozieri,1715,88,107,IT,40.5863,9.0034 141067,Pabillonis,1715,88,107,IT,39.59228,8.72143 141086,Padria,1715,88,107,IT,40.39635,8.62992 141087,Padru,1715,88,107,IT,40.76619,9.521 58225,Palau,1715,88,107,IT,41.17936,9.3819 58257,Palmas Arborea,1715,88,107,IT,39.8767,8.64391 58349,Pattada,1715,88,107,IT,40.58067,9.11129 58352,Pau,1715,88,107,IT,39.79167,8.80222 58354,Pauli Arbarei,1715,88,107,IT,39.66183,8.92212 58355,Paulilatino,1715,88,107,IT,40.0847,8.76449 58416,Perdasdefogu,1715,88,107,IT,39.67959,9.44082 58417,Perdaxius,1715,88,107,IT,39.16028,8.61083 58421,Perfugas,1715,88,107,IT,40.83231,8.88354 58669,Pimentel,1715,88,107,IT,39.48718,9.06516 58705,Piscinas,1715,88,107,IT,39.07435,8.66634 58739,Ploaghe,1715,88,107,IT,40.67068,8.74962 58766,Poggio dei Pini,1715,88,107,IT,39.14717,8.97139 58821,Pompu,1715,88,107,IT,39.72518,8.7964 58925,Porto Cervo,1715,88,107,IT,41.14063,9.53267 58938,Porto Torres,1715,88,107,IT,40.83375,8.40531 58949,Portoscuso,1715,88,107,IT,39.20739,8.38086 58952,Posada,1715,88,107,IT,40.63203,9.71904 58987,Pozzomaggiore,1715,88,107,IT,40.39767,8.65931 59119,Provincia di Cagliari,1715,88,107,IT,39.24502,9.09119 59153,Provincia di Nuoro,1715,88,107,IT,40.21397,9.37095 59154,Provincia di Oristano,1715,88,107,IT,40.01682,8.73131 59173,Provincia di Sassari,1715,88,107,IT,40.77014,8.75885 59200,Pula,1715,88,107,IT,39.00727,9.00223 59208,Putifigari,1715,88,107,IT,40.56145,8.46063 59231,Quartu SantElena,1715,88,107,IT,39.22935,9.25004 59232,Quartucciu,1715,88,107,IT,39.25262,9.17764 59392,Riola Sardo,1715,88,107,IT,39.99361,8.54127 59574,Romana,1715,88,107,IT,40.48439,8.58571 59700,Ruinas,1715,88,107,IT,39.90631,8.89705 59722,Sadali,1715,88,107,IT,39.81456,9.27246 59723,Sagama,1715,88,107,IT,40.26155,8.57752 59799,Samassi,1715,88,107,IT,39.48208,8.90538 59800,Samatzai,1715,88,107,IT,39.48297,9.03466 59816,Samugheo,1715,88,107,IT,39.94854,8.94152 59824,San Basilio,1715,88,107,IT,39.53785,9.19753 59930,San Gavino Monreale,1715,88,107,IT,39.55008,8.79065 59989,San Giovanni Suergiu,1715,88,107,IT,39.10955,8.52039 60135,San Nicola,1715,88,107,IT,40.61055,8.98841 60149,San Nicolò dArcidano,1715,88,107,IT,39.68417,8.64361 60143,San NicoloGerrei,1715,88,107,IT,39.49833,9.30611 60249,San Sperate,1715,88,107,IT,39.35758,9.00814 60253,San Teodoro,1715,88,107,IT,40.77354,9.66929 60264,San Vero Milis,1715,88,107,IT,40.01377,8.59833 60272,San Vito,1715,88,107,IT,39.44142,9.54065 60308,Sanluri,1715,88,107,IT,39.56176,8.89969 60345,SantAndrea Frius,1715,88,107,IT,39.47917,9.17 60374,SantAnna Arresi,1715,88,107,IT,39.00618,8.64236 60377,SantAntioco,1715,88,107,IT,39.07017,8.45243 60384,SantAntonio di Gallura,1715,88,107,IT,40.99146,9.30153 60439,Santa Giusta,1715,88,107,IT,39.8807,8.60916 60461,Santa Maria Coghinas,1715,88,107,IT,40.90423,8.86383 60467,Santa Maria Navarrese,1715,88,107,IT,39.99029,9.68398 60495,Santa Teresa Gallura,1715,88,107,IT,41.23859,9.18873 60501,Santadi,1715,88,107,IT,39.09356,8.71259 60531,Santu Lussurgiu,1715,88,107,IT,40.1411,8.65539 60543,Sardara,1715,88,107,IT,39.61465,8.82088 60557,Sarroch,1715,88,107,IT,39.06577,9.00937 60562,Sarule,1715,88,107,IT,40.22796,9.16644 60568,Sassari,1715,88,107,IT,40.72586,8.55552 60624,Scano di Montiferro,1715,88,107,IT,40.21525,8.58692 60682,Sedilo,1715,88,107,IT,40.17292,8.91993 60683,Sedini,1715,88,107,IT,40.85277,8.8167 60687,Segariu,1715,88,107,IT,39.56403,8.98163 60693,Selargius,1715,88,107,IT,39.25779,9.16323 60697,Selegas,1715,88,107,IT,39.5678,9.10348 60713,Semestene,1715,88,107,IT,40.39846,8.72542 60721,Seneghe,1715,88,107,IT,40.08128,8.61353 60725,Senis,1715,88,107,IT,39.82318,8.93916 60729,Sennariolo,1715,88,107,IT,40.21235,8.55572 60730,Sennori,1715,88,107,IT,40.7878,8.59285 60731,Senorbì,1715,88,107,IT,39.53341,9.13168 60736,Serdiana,1715,88,107,IT,39.37457,9.15851 60762,Serramanna,1715,88,107,IT,39.42335,8.92243 60781,Serrenti,1715,88,107,IT,39.49277,8.97659 60782,Serri,1715,88,107,IT,39.7015,9.1449 60805,Sestu,1715,88,107,IT,39.29846,9.09248 60814,Settimo San Pietro,1715,88,107,IT,39.2911,9.1857 60818,Setzu,1715,88,107,IT,39.72306,8.93972 60819,Seui,1715,88,107,IT,39.83908,9.32347 60820,Seulo,1715,88,107,IT,39.86955,9.23606 60833,Siamaggiore,1715,88,107,IT,39.94966,8.63461 60834,Siamanna,1715,88,107,IT,39.91936,8.76185 60837,Siapiccia,1715,88,107,IT,39.92765,8.7627 60841,Siddi,1715,88,107,IT,39.67255,8.88815 60848,Silanus,1715,88,107,IT,40.28709,8.89199 60858,Silì,1715,88,107,IT,39.91789,8.62194 60850,Siligo,1715,88,107,IT,40.57483,8.72835 60851,Siliqua,1715,88,107,IT,39.301,8.80584 60852,Silius,1715,88,107,IT,39.51695,9.2936 60859,Simala,1715,88,107,IT,39.72099,8.82802 60860,Simaxis,1715,88,107,IT,39.92995,8.68979 60864,Sindia,1715,88,107,IT,40.29518,8.65707 60865,Sini,1715,88,107,IT,39.75353,8.90486 60868,Siniscola,1715,88,107,IT,40.57344,9.69695 60869,Sinnai,1715,88,107,IT,39.30286,9.20283 60873,Siris,1715,88,107,IT,39.71228,8.77507 60882,Siurgus Donigala,1715,88,107,IT,39.59961,9.18746 60895,Soddì,1715,88,107,IT,40.12991,8.87798 60901,Solanas,1715,88,107,IT,39.93031,8.5534 60908,Solarussa,1715,88,107,IT,39.95499,8.67393 60913,Soleminis,1715,88,107,IT,39.3476,9.18127 60955,Sorgono,1715,88,107,IT,40.02595,9.10203 60965,Sorradile,1715,88,107,IT,40.10634,8.93236 60967,Sorso,1715,88,107,IT,40.79949,8.5757 61077,Stintino,1715,88,107,IT,40.95201,8.21978 61106,Su Planu,1715,88,107,IT,39.25487,9.1066 61112,Suelli,1715,88,107,IT,39.56257,9.13245 61121,Suni,1715,88,107,IT,40.28085,8.54942 61139,Tadasuni,1715,88,107,IT,40.10995,8.88353 61153,Talana,1715,88,107,IT,40.04157,9.49554 61207,Telti,1715,88,107,IT,40.87575,9.35328 61210,Tempio Pausania,1715,88,107,IT,40.90068,9.10456 61222,Tergu,1715,88,107,IT,40.86652,8.71467 61238,Terralba,1715,88,107,IT,39.72056,8.63504 61254,Tertenia,1715,88,107,IT,39.69518,9.57878 61265,Teti,1715,88,107,IT,40.09737,9.11923 61268,Teulada,1715,88,107,IT,38.96658,8.77149 61272,Thiesi,1715,88,107,IT,40.52398,8.72001 61273,Tiana,1715,88,107,IT,40.06746,9.14817 61279,Tinnura,1715,88,107,IT,40.26916,8.54815 61286,Tissi,1715,88,107,IT,40.67832,8.56127 61307,Tonara,1715,88,107,IT,40.02465,9.17204 61340,Torpè,1715,88,107,IT,40.6278,9.67916 61342,Torralba,1715,88,107,IT,40.51296,8.76532 61411,Tortolì,1715,88,107,IT,39.92626,9.65569 61430,Tramatza,1715,88,107,IT,40.00292,8.64944 61447,Tratalias,1715,88,107,IT,39.10347,8.57858 61498,Tresnuraghes,1715,88,107,IT,40.25235,8.52092 61523,Triei,1715,88,107,IT,40.03498,9.63995 61530,Trinità dAgultu,1715,88,107,IT,40.98589,8.91377 61531,Trinità dAgultu e Vignola,1715,88,107,IT,40.98377,8.91562 61567,Tuili,1715,88,107,IT,39.71477,8.9602 61568,Tula,1715,88,107,IT,40.73246,8.98392 61576,Turri,1715,88,107,IT,39.70476,8.91656 61596,Ulà Tirso,1715,88,107,IT,40.0457,8.90326 61593,Ulassai,1715,88,107,IT,39.81033,9.49962 61600,Uras,1715,88,107,IT,39.69799,8.70143 61607,Uri,1715,88,107,IT,40.63841,8.48881 61609,Urzulei,1715,88,107,IT,40.09284,9.508 61611,Usellus,1715,88,107,IT,39.80833,8.85167 61612,Usini,1715,88,107,IT,40.66416,8.53919 61614,Ussana,1715,88,107,IT,39.39374,9.07496 61615,Ussaramanna,1715,88,107,IT,39.6925,8.9085 61616,Ussassai,1715,88,107,IT,39.80998,9.39508 61620,Uta,1715,88,107,IT,39.29186,8.95234 61706,Valledoria,1715,88,107,IT,40.92867,8.82321 61714,Vallermosa,1715,88,107,IT,39.36389,8.79556 61929,Viddalba,1715,88,107,IT,40.91259,8.89009 62020,Villa San Pietro,1715,88,107,IT,39.03554,8.99695 62023,Villa SantAntonio,1715,88,107,IT,39.85915,8.90153 62029,Villa Verde,1715,88,107,IT,39.79551,8.82114 62050,Villacidro,1715,88,107,IT,39.45734,8.74105 62072,Villagrande Strisaili,1715,88,107,IT,39.95929,9.50943 62082,Villamar,1715,88,107,IT,39.61884,8.95877 62084,Villamassargia,1715,88,107,IT,39.27484,8.6411 62101,Villanova Monteleone,1715,88,107,IT,40.50264,8.47115 62103,Villanova Truschedu,1715,88,107,IT,39.98842,8.75177 62104,Villanova Tulo,1715,88,107,IT,39.77995,9.21424 62111,Villanovaforru,1715,88,107,IT,39.63196,8.86979 62112,Villanovafranca,1715,88,107,IT,39.64442,9.00244 62116,Villaperuccio,1715,88,107,IT,39.11183,8.67004 62120,Villaputzu,1715,88,107,IT,39.44058,9.57564 62133,Villasalto,1715,88,107,IT,39.49209,9.39023 62136,Villasimius,1715,88,107,IT,39.14481,9.51823 62138,Villasor,1715,88,107,IT,39.3813,8.9427 62139,Villaspeciosa,1715,88,107,IT,39.31142,8.92584 62144,Villaurbana,1715,88,107,IT,39.88505,8.77831 62240,Zeddiani,1715,88,107,IT,39.98898,8.5958 62252,Zerfaliu,1715,88,107,IT,39.96088,8.70971 135246,Acate,1709,82,107,IT,37.02318,14.49302 135256,Aci Bonaccorsi,1709,82,107,IT,37.5964,15.10724 135257,Aci Castello,1709,82,107,IT,37.55564,15.14535 135258,Aci Catena,1709,82,107,IT,37.60614,15.14165 135259,Aci SantAntonio,1709,82,107,IT,37.60499,15.12294 135260,Aci Trezza,1709,82,107,IT,37.56385,15.16136 135262,Acireale,1709,82,107,IT,37.60886,15.16577 135263,Acitrezza,1709,82,107,IT,37.5596,15.1599 135279,Acquaviva Platani,1709,82,107,IT,37.57174,13.70156 135282,Acquedolci,1709,82,107,IT,38.05708,14.5855 135287,Adrano,1709,82,107,IT,37.66358,14.83283 135300,Agira,1709,82,107,IT,37.6558,14.51972 135302,Agliandroni-Paternella,1709,82,107,IT,38.1328,13.06884 135318,Agrigento,1709,82,107,IT,37.45,13.5 135324,Aidone,1709,82,107,IT,37.41468,14.44542 135389,Alcamo,1709,82,107,IT,37.9779,12.96473 135390,Alcara Li Fusi,1709,82,107,IT,38.02143,14.70142 135396,Alessandria della Rocca,1709,82,107,IT,37.56767,13.45343 135454,Alì,1709,82,107,IT,38.02678,15.4191 135455,Alì Terme,1709,82,107,IT,38.00506,15.42269 135406,Alia,1709,82,107,IT,37.77867,13.71391 135412,Alimena,1709,82,107,IT,37.6931,14.11369 135413,Aliminusa,1709,82,107,IT,37.86395,13.78126 135433,Altavilla Milicia,1709,82,107,IT,38.038,13.54947 135444,Altofonte,1709,82,107,IT,38.04298,13.29434 135519,Antillo,1709,82,107,IT,37.97937,15.24029 135550,Aragona,1709,82,107,IT,37.39904,13.61974 135669,Assoro,1709,82,107,IT,37.6221,14.4181 135685,Augusta,1709,82,107,IT,37.24065,15.22121 135713,Avola,1709,82,107,IT,36.9084,15.13937 135747,Bagheria,1709,82,107,IT,38.07892,13.51237 135787,Balestrate,1709,82,107,IT,38.05125,13.00724 135834,Barcellona Pozzo di Gotto,1709,82,107,IT,38.14772,15.21469 135868,Barrafranca,1709,82,107,IT,37.3785,14.2027 135885,Basicò,1709,82,107,IT,38.06077,15.06263 135911,Baucina,1709,82,107,IT,37.92521,13.53636 135953,Belmonte Mezzagno,1709,82,107,IT,38.04653,13.39207 135957,Belpasso,1709,82,107,IT,37.59192,14.97985 135960,Belvedere,1709,82,107,IT,37.08839,15.21314 135966,Belvedere-Piano Tavola,1709,82,107,IT,37.52955,14.98786 136028,Biancavilla,1709,82,107,IT,37.64442,14.86685 136060,Bisacquino,1709,82,107,IT,37.70352,13.26051 136075,Bivona,1709,82,107,IT,37.61797,13.43895 136083,Blufi,1709,82,107,IT,37.75205,14.07296 136110,Bolognetta,1709,82,107,IT,37.9712,13.45627 136120,Bompensiere,1709,82,107,IT,37.4724,13.7814 136121,Bompietro,1709,82,107,IT,37.74394,14.0947 136157,Borgetto,1709,82,107,IT,38.04664,13.14071 136349,Brolo,1709,82,107,IT,38.15623,14.82799 136353,Bronte,1709,82,107,IT,37.78863,14.83377 136361,Brucoli,1709,82,107,IT,37.28191,15.18836 136384,Buccheri,1709,82,107,IT,37.12494,14.85222 136412,Burgio,1709,82,107,IT,37.60094,13.28826 136423,Buscemi,1709,82,107,IT,37.08604,14.88499 136425,Buseto Palizzolo,1709,82,107,IT,38.00339,12.70911 136436,Butera,1709,82,107,IT,37.191,14.18232 136451,Caccamo,1709,82,107,IT,37.93357,13.66808 136489,Calamonaci,1709,82,107,IT,37.52566,13.29053 136493,Calascibetta,1709,82,107,IT,37.59024,14.2718 136496,Calatabiano,1709,82,107,IT,37.82049,15.23069 136497,Calatafimi,1709,82,107,IT,37.9144,12.86364 136540,Caltabellotta,1709,82,107,IT,37.57543,13.21632 136541,Caltagirone,1709,82,107,IT,37.23785,14.51551 136543,Caltanissetta,1709,82,107,IT,37.49025,14.06216 136544,Caltavuturo,1709,82,107,IT,37.8204,13.89158 136571,Camastra,1709,82,107,IT,37.2538,13.79211 136594,Cammarata,1709,82,107,IT,37.63361,13.62722 136609,Campanella-Gianforma,1709,82,107,IT,36.9263,14.8336 136639,Campobello di Licata,1709,82,107,IT,37.25759,13.91811 136640,Campobello di Mazara,1709,82,107,IT,37.63464,12.74946 136650,Campofelice di Fitalia,1709,82,107,IT,37.82686,13.48572 136651,Campofelice di Roccella,1709,82,107,IT,37.9927,13.87648 136654,Campofiorito,1709,82,107,IT,37.75374,13.26875 136656,Campofranco,1709,82,107,IT,37.51208,13.71213 136674,Camporeale,1709,82,107,IT,37.88612,13.10107 136677,Camporotondo Etneo,1709,82,107,IT,37.56565,15.00319 136690,Canalicchio,1709,82,107,IT,37.54097,15.09645 136712,Canicattì,1709,82,107,IT,37.35842,13.84786 136711,Canicattini Bagni,1709,82,107,IT,37.03171,15.06388 136721,Canneto,1709,82,107,IT,38.49505,14.96037 136725,Cannizzaro-Favara,1709,82,107,IT,38.06163,13.27167 136758,Capaci,1709,82,107,IT,38.17107,13.2393 136776,Capizzi,1709,82,107,IT,37.84788,14.47976 136778,Capo dOrlando,1709,82,107,IT,38.14262,14.73292 136810,Capri Leone,1709,82,107,IT,38.08682,14.72959 136880,Carini,1709,82,107,IT,38.1324,13.18274 136886,Carlentini,1709,82,107,IT,37.28071,15.0102 136900,Caronia,1709,82,107,IT,38.02381,14.44142 136931,Carrozziere,1709,82,107,IT,37.0376,15.27195 136932,Carruba,1709,82,107,IT,37.69062,15.18815 136933,Carrubazza-Motta,1709,82,107,IT,37.55323,15.10819 136950,Casa Santa,1709,82,107,IT,38.02514,12.5484 137010,Casalvecchio Siculo,1709,82,107,IT,37.9585,15.32371 137102,Cassaro,1709,82,107,IT,37.10571,14.94697 137103,Cassibile,1709,82,107,IT,36.97862,15.20061 137125,Castanea delle Furie,1709,82,107,IT,38.26165,15.52178 137170,Castel di Judica,1709,82,107,IT,37.49475,14.64744 137172,Castel di Lucio,1709,82,107,IT,37.88698,14.31116 137183,Castelbuono,1709,82,107,IT,37.9253,14.08665 137188,Casteldaccia,1709,82,107,IT,38.05121,13.53041 137209,CastellUmberto,1709,82,107,IT,38.08626,14.80686 137212,Castellammare del Golfo,1709,82,107,IT,38.02653,12.88183 137216,Castellana Sicula,1709,82,107,IT,37.78686,14.03906 137268,Castelluzzo,1709,82,107,IT,38.10096,12.73599 137275,Castelmola,1709,82,107,IT,37.85829,15.27713 137318,Casteltermini,1709,82,107,IT,37.53874,13.64601 137329,Castelvetrano,1709,82,107,IT,37.68081,12.79194 137357,Castiglione di Sicilia,1709,82,107,IT,37.8815,15.12156 137380,Castrofilippo,1709,82,107,IT,37.35046,13.75001 137385,Castronuovo di Sicilia,1709,82,107,IT,37.67894,13.60346 137387,Castroreale,1709,82,107,IT,38.09857,15.21012 137391,Catania,1709,82,107,IT,37.47169,14.84731 137394,Catenanuova,1709,82,107,IT,37.56876,14.69076 137397,Cattolica Eraclea,1709,82,107,IT,37.44069,13.39265 137403,Cava dAliga,1709,82,107,IT,36.72964,14.69031 137458,Cefalà Diana,1709,82,107,IT,37.91565,13.46325 137459,Cefalù,1709,82,107,IT,38.03856,14.02285 137504,Centuripe,1709,82,107,IT,37.62336,14.74049 137511,Cerami,1709,82,107,IT,37.80953,14.5066 137529,Cerda,1709,82,107,IT,37.90578,13.81496 137598,Cerza,1709,82,107,IT,37.54297,15.1051 137609,Cesarò,1709,82,107,IT,37.84476,14.71308 137643,Chianchitta-Pallio,1709,82,107,IT,37.82108,15.25317 137644,Chianchitta-Trappitello,1709,82,107,IT,37.82984,15.25077 137648,Chiaramonte Gulfi,1709,82,107,IT,37.0305,14.70302 137687,Chiusa Sclafani,1709,82,107,IT,37.67692,13.27074 137700,Ciaculli,1709,82,107,IT,38.0753,13.40719 137702,Cianciana,1709,82,107,IT,37.51896,13.43349 137705,Ciavolo,1709,82,107,IT,37.77943,12.53774 137724,Ciminna,1709,82,107,IT,37.89765,13.55966 137735,Cinisi,1709,82,107,IT,38.16082,13.10099 137771,Città Giardino,1709,82,107,IT,37.10444,15.21172 137894,Collesano,1709,82,107,IT,37.91809,13.93702 137942,Comiso,1709,82,107,IT,36.94893,14.60731 137943,Comitini,1709,82,107,IT,37.40735,13.6453 137965,Condrò,1709,82,107,IT,38.17375,15.3266 137977,Contessa Entellina,1709,82,107,IT,37.73005,13.18425 138017,Corleone,1709,82,107,IT,37.81338,13.3017 138216,Custonaci,1709,82,107,IT,38.07931,12.68571 138242,Delia,1709,82,107,IT,37.35796,13.92867 138300,Donnalucata,1709,82,107,IT,36.76117,14.64022 138360,Enna,1709,82,107,IT,37.58333,14.43333 138374,Erice,1709,82,107,IT,38.03785,12.58778 138389,Evangelisti-Rubino,1709,82,107,IT,37.98412,15.17324 138417,Falcone,1709,82,107,IT,38.11698,15.07965 138450,Faro Superiore,1709,82,107,IT,38.26794,15.58268 138459,Favara,1709,82,107,IT,37.31754,13.66226 138462,Favignana,1709,82,107,IT,37.92951,12.32958 138481,Ferla,1709,82,107,IT,37.11978,14.93881 138503,Ficarazzi,1709,82,107,IT,38.09229,13.4639 138505,Ficarra,1709,82,107,IT,38.10849,14.8299 138534,Finale,1709,82,107,IT,38.01891,14.16151 138551,Fiumedinisi,1709,82,107,IT,38.02596,15.38099 138553,Fiumefreddo Sicilia,1709,82,107,IT,37.79146,15.20919 138564,Floresta,1709,82,107,IT,37.98779,14.91096 138565,Floridia,1709,82,107,IT,37.08343,15.15332 138587,Fondachelli-Fantina,1709,82,107,IT,37.98476,15.17519 138664,Forza dAgrò,1709,82,107,IT,37.91539,15.33409 138698,Francavilla di Sicilia,1709,82,107,IT,37.90197,15.13821 138703,Francofonte,1709,82,107,IT,37.22477,14.87488 138727,Frazzanò,1709,82,107,IT,38.07202,14.74407 138748,Fulgatore-Torretta,1709,82,107,IT,37.94977,12.69303 138756,Furci Siculo,1709,82,107,IT,37.96159,15.37763 138757,Furnari,1709,82,107,IT,38.10436,15.12358 138775,Gaggi,1709,82,107,IT,37.85995,15.22126 138782,Gagliano Castelferrato,1709,82,107,IT,37.70967,14.53524 138794,Galati Mamertino,1709,82,107,IT,38.03176,14.77145 138819,Gallodoro,1709,82,107,IT,37.90206,15.29359 138840,Gangi,1709,82,107,IT,37.79565,14.20437 138889,Gela,1709,82,107,IT,37.07381,14.24038 138908,Geraci Siculo,1709,82,107,IT,37.85901,14.15333 138937,Giacalone,1709,82,107,IT,38.03276,13.23695 138940,Giammoro,1709,82,107,IT,38.20372,15.30666 138944,Giardina Gallotti,1709,82,107,IT,37.35073,13.52272 138945,Giardinello,1709,82,107,IT,38.08706,13.15648 138946,Giardini-Naxos,1709,82,107,IT,37.82755,15.26713 138948,Giarratana,1709,82,107,IT,37.04741,14.79454 138949,Giarre,1709,82,107,IT,37.7244,15.18165 138973,Gioiosa Marea,1709,82,107,IT,38.17373,14.89932 138989,Giuliana,1709,82,107,IT,37.6728,13.23737 139004,Gliaca,1709,82,107,IT,38.16317,14.84768 139010,Godrano,1709,82,107,IT,37.9031,13.42823 139058,Grammichele,1709,82,107,IT,37.21326,14.63311 139066,Graniti,1709,82,107,IT,37.88986,15.22459 139076,Gratteri,1709,82,107,IT,37.96607,13.97314 139082,Gravina di Catania,1709,82,107,IT,37.56085,15.06292 139125,Grotte,1709,82,107,IT,37.40346,13.69889 139149,Gualtieri Sicaminò,1709,82,107,IT,38.16267,15.31699 139177,Guidomandri Marina,1709,82,107,IT,38.04528,15.46303 139235,Isnello,1709,82,107,IT,37.94324,14.00724 139249,Isola delle Femmine,1709,82,107,IT,38.19123,13.24691 139259,Ispica,1709,82,107,IT,36.78622,14.9053 139267,Itala,1709,82,107,IT,38.05144,15.43706 139282,Joppolo Giancaxio,1709,82,107,IT,37.38681,13.55586 139284,Kamma,1709,82,107,IT,36.79701,12.03617 139349,Lampedusa,1709,82,107,IT,35.50142,12.60964 139372,Larderia,1709,82,107,IT,38.14101,15.50287 139379,Lascari,1709,82,107,IT,38.00067,13.94053 139416,Lavinaio-Monterosso,1709,82,107,IT,37.64097,15.10462 139444,Leni,1709,82,107,IT,38.55534,14.82497 139454,Lentini,1709,82,107,IT,37.28556,14.99737 139457,Leonforte,1709,82,107,IT,37.64197,14.39766 139463,Lercara Friddi,1709,82,107,IT,37.74657,13.60391 139477,Letojanni,1709,82,107,IT,37.8805,15.30735 139493,Librizzi,1709,82,107,IT,38.09719,14.95909 139494,Licata,1709,82,107,IT,37.10267,13.93972 139498,Licodia Eubea,1709,82,107,IT,37.15674,14.70555 139522,Limina,1709,82,107,IT,37.94076,15.27119 139530,Linera,1709,82,107,IT,37.6638,15.13653 139531,Linguaglossa,1709,82,107,IT,37.84243,15.13774 139533,Lipari,1709,82,107,IT,38.46743,14.95398 139595,Longi,1709,82,107,IT,38.02617,14.75306 139630,Lucca Sicula,1709,82,107,IT,37.57783,13.30579 139763,Maletto,1709,82,107,IT,37.82914,14.86403 139764,Malfa,1709,82,107,IT,38.5773,14.83598 139776,Malvagna,1709,82,107,IT,37.91752,15.05548 139783,Mandanici,1709,82,107,IT,38.00356,15.31669 139799,Maniace,1709,82,107,IT,37.88306,14.79808 139833,Marausa,1709,82,107,IT,37.94166,12.50948 139869,Marianopoli,1709,82,107,IT,37.5984,13.9152 139880,Marina di Caronia,1709,82,107,IT,38.03545,14.44182 139893,Marina di Ragusa,1709,82,107,IT,36.78575,14.55474 139898,Marinella,1709,82,107,IT,37.59475,12.84434 139899,Marineo,1709,82,107,IT,37.95185,13.41781 139919,Marsala,1709,82,107,IT,37.7992,12.4367 139952,Mascali,1709,82,107,IT,37.75794,15.19662 139953,Mascalucia,1709,82,107,IT,37.57465,15.04964 140002,Maugeri,1709,82,107,IT,37.58608,15.11785 140004,Mazara del Vallo,1709,82,107,IT,37.65535,12.58986 140003,Mazara II,1709,82,107,IT,37.68146,12.60074 140007,Mazzarino,1709,82,107,IT,37.30188,14.20959 140009,Mazzarrà SantAndrea,1709,82,107,IT,38.08969,15.13535 140008,Mazzarrone,1709,82,107,IT,37.08834,14.56128 140044,Melia,1709,82,107,IT,37.90384,15.27499 140047,Melilli,1709,82,107,IT,37.17821,15.1302 140064,Menfi,1709,82,107,IT,37.60409,12.96889 140090,Merì,1709,82,107,IT,38.1663,15.2497 140098,Messina,1709,82,107,IT,38.05,14.86667 140120,Mezzojuso,1709,82,107,IT,37.86509,13.46509 140145,Milazzo,1709,82,107,IT,38.22008,15.24023 140146,Milena,1709,82,107,IT,37.47133,13.73613 140150,Militello in Val di Catania,1709,82,107,IT,37.27594,14.79342 140149,Militello Rosmarino,1709,82,107,IT,38.04575,14.67584 140153,Milo,1709,82,107,IT,37.7245,15.11554 140156,Mineo,1709,82,107,IT,37.26494,14.69381 140168,Mirabella Imbaccari,1709,82,107,IT,37.32702,14.44605 140177,Mirto,1709,82,107,IT,38.08439,14.74609 140180,Misilmeri,1709,82,107,IT,38.03183,13.44795 140184,Misterbianco,1709,82,107,IT,37.51803,15.00913 140185,Mistretta,1709,82,107,IT,37.92823,14.3578 140189,Modica,1709,82,107,IT,36.85868,14.75966 140205,Moio Alcantara,1709,82,107,IT,37.90056,15.05072 140280,Monforte San Giorgio,1709,82,107,IT,38.15733,15.38132 140287,Mongiuffi Melia,1709,82,107,IT,37.90336,15.27539 140297,Monreale,1709,82,107,IT,38.08125,13.28947 140311,Montagnareale,1709,82,107,IT,38.13216,14.94658 140317,Montalbano Elicona,1709,82,107,IT,38.0236,15.01393 140329,Montallegro,1709,82,107,IT,37.39121,13.35179 140428,Montedoro,1709,82,107,IT,37.45431,13.81684 140473,Montelepre,1709,82,107,IT,38.09026,13.17518 140483,Montemaggiore Belsito,1709,82,107,IT,37.84818,13.76206 140522,Monterosso Almo,1709,82,107,IT,37.08884,14.76498 140546,Montevago,1709,82,107,IT,37.70224,12.98584 140657,Motta Camastra,1709,82,107,IT,37.89431,15.17008 140664,Motta dAffermo,1709,82,107,IT,37.98096,14.30337 140661,Motta SantAnastasia,1709,82,107,IT,37.51205,14.96628 140704,Mussomeli,1709,82,107,IT,37.58067,13.75214 140721,Naro,1709,82,107,IT,37.29248,13.79337 140724,Naso,1709,82,107,IT,38.12215,14.78702 140763,Nicolosi,1709,82,107,IT,37.62148,15.02785 140765,Nicosia,1709,82,107,IT,37.74747,14.39218 140771,Niscemi,1709,82,107,IT,37.14649,14.39381 140772,Nissoria,1709,82,107,IT,37.6541,14.4481 140775,Nizza di Sicilia,1709,82,107,IT,37.99081,15.40956 140812,Noto,1709,82,107,IT,36.89244,15.06977 140823,Novara di Sicilia,1709,82,107,IT,38.01538,15.13134 140848,Nunziata,1709,82,107,IT,37.75858,15.17058 140851,Nuova Gibellina,1709,82,107,IT,37.80704,12.86954 140852,Nuovo Centro Urbano Poggioreale,1709,82,107,IT,37.76404,13.03594 140900,Oliveri,1709,82,107,IT,38.12515,15.06068 141068,Pace del Mela,1709,82,107,IT,38.17997,15.30629 141069,Paceco,1709,82,107,IT,37.98026,12.55766 141071,Pachino,1709,82,107,IT,36.71522,15.09019 58204,Pagliara,1709,82,107,IT,37.98546,15.35969 58221,Palagonia,1709,82,107,IT,37.32955,14.74474 58228,Palazzo Adriano,1709,82,107,IT,37.68066,13.37941 58232,Palazzolo,1709,82,107,IT,37.56224,14.92987 58233,Palazzolo Acreide,1709,82,107,IT,37.06261,14.90593 58240,Palermo,1709,82,107,IT,37.81667,13.58333 58254,Palma di Montechiaro,1709,82,107,IT,37.19066,13.76603 58284,Pantelleria,1709,82,107,IT,36.82836,11.94611 58316,Partanna,1709,82,107,IT,37.7268,12.88917 58317,Partinico,1709,82,107,IT,38.04657,13.11785 58338,Pasteria-Lapide,1709,82,107,IT,37.81012,15.22818 58346,Paternò,1709,82,107,IT,37.56675,14.90254 58350,Patti,1709,82,107,IT,38.14736,14.96409 58373,Pedagaggi,1709,82,107,IT,37.19182,14.93654 58374,Pedalino,1709,82,107,IT,37.0232,14.58116 58375,Pedara,1709,82,107,IT,37.62386,15.05672 58409,Pennisi,1709,82,107,IT,37.64945,15.12385 58477,Petralia Soprana,1709,82,107,IT,37.80064,14.10813 58478,Petralia Sottana,1709,82,107,IT,37.80919,14.09293 58487,Petrosino,1709,82,107,IT,37.71271,12.49964 58491,Pettineo,1709,82,107,IT,37.96793,14.29118 58514,Piana degli Albanesi,1709,82,107,IT,37.99372,13.28464 58540,Piano dei Geli,1709,82,107,IT,38.09919,13.27478 58539,Piano Maglio-Blandino,1709,82,107,IT,38.05793,13.30909 58547,Pianoconte,1709,82,107,IT,38.47432,14.92857 58565,Piazza Armerina,1709,82,107,IT,37.38417,14.36921 58589,Piedimonte Etneo,1709,82,107,IT,37.80677,15.17516 58622,Pietraperzia,1709,82,107,IT,37.41852,14.13739 58692,Pioppo,1709,82,107,IT,38.05,13.23333 58701,Piraino,1709,82,107,IT,38.16127,14.861 58794,Polizzi Generosa,1709,82,107,IT,37.81159,14.00268 58800,Pollina,1709,82,107,IT,37.99309,14.14586 58916,Portella di Mare,1709,82,107,IT,38.07304,13.46199 58928,Porto Empedocle,1709,82,107,IT,37.28942,13.52494 58948,Portopalo di Capo Passero,1709,82,107,IT,36.68219,15.13378 58979,Pozzallo,1709,82,107,IT,36.73028,14.84672 59081,Priolo Gargallo,1709,82,107,IT,37.15512,15.18248 59084,Prizzi,1709,82,107,IT,37.72088,13.43435 59120,Provincia di Caltanissetta,1709,82,107,IT,37.37448,14.06421 59176,Provincia di Siracusa,1709,82,107,IT,37.08805,15.27924 59256,Racalmuto,1709,82,107,IT,37.40498,13.72995 59258,Raccuja,1709,82,107,IT,38.05583,14.91044 59262,Raddusa,1709,82,107,IT,37.47529,14.53521 59266,Raffadali,1709,82,107,IT,37.40214,13.53175 59267,Ragalna,1709,82,107,IT,37.63455,14.94698 59269,Ragusa,1709,82,107,IT,36.91667,14.6 59272,Ramacca,1709,82,107,IT,37.38616,14.69241 59280,Randazzo,1709,82,107,IT,37.87736,14.95012 59295,Ravanusa,1709,82,107,IT,37.26659,13.96834 59305,Realmonte,1709,82,107,IT,37.30847,13.46429 59318,Regalbuto,1709,82,107,IT,37.65195,14.63915 59326,Reitano,1709,82,107,IT,37.97198,14.34418 59337,Resuttano,1709,82,107,IT,37.67865,14.02946 59359,Ribera,1709,82,107,IT,37.49773,13.26676 59373,Riesi,1709,82,107,IT,37.28079,14.08317 59381,Rilievo,1709,82,107,IT,37.91638,12.54058 59412,Riposto,1709,82,107,IT,37.73183,15.20576 59485,Rocca di Capri Leone,1709,82,107,IT,38.10677,14.71032 59496,Roccafiorita,1709,82,107,IT,37.93086,15.26739 59506,Roccalumera,1709,82,107,IT,37.97554,15.39439 59508,Roccamena,1709,82,107,IT,37.83824,13.15513 59513,Roccapalumba,1709,82,107,IT,37.80825,13.63671 59526,Roccavaldina,1709,82,107,IT,38.18296,15.37402 59533,Roccella Valdemone,1709,82,107,IT,37.93289,15.00997 59555,Rodì,1709,82,107,IT,38.10823,15.16933 59585,Rometta,1709,82,107,IT,38.17007,15.41429 59586,Rometta Marea,1709,82,107,IT,38.23264,15.40955 59643,Rosolini,1709,82,107,IT,36.82145,14.95132 59747,Salaparuta,1709,82,107,IT,37.75694,13.00981 59758,Salemi,1709,82,107,IT,37.82199,12.80506 59805,Sambuca di Sicilia,1709,82,107,IT,37.65294,13.11462 59841,San Biagio Platani,1709,82,107,IT,37.50927,13.52844 59862,San Cataldo,1709,82,107,IT,37.48412,13.98542 59868,San Cipirello,1709,82,107,IT,37.96067,13.17732 59873,San Ciro-Ulmi-Filci,1709,82,107,IT,37.83328,12.78229 59878,San Cono,1709,82,107,IT,37.28992,14.36709 59919,San Filippo del Mela,1709,82,107,IT,38.17007,15.27338 59928,San Fratello,1709,82,107,IT,38.01556,14.59818 59951,San Giorgio,1709,82,107,IT,38.16834,14.94825 59979,San Giovanni,1709,82,107,IT,37.73538,15.15887 59983,San Giovanni Gemini,1709,82,107,IT,37.62785,13.64357 60001,San Giovanni la Punta,1709,82,107,IT,37.5769,15.09371 60012,San Giuseppe Jato,1709,82,107,IT,37.97331,13.18889 60024,San Gregorio di Catania,1709,82,107,IT,37.56764,15.1112 60032,San Leone Mosè,1709,82,107,IT,37.26497,13.58434 60063,San Marco dAlunzio,1709,82,107,IT,38.07261,14.70093 60105,San Mauro Castelverde,1709,82,107,IT,37.91478,14.18961 60123,San Michele di Ganzaria,1709,82,107,IT,37.28042,14.42633 60164,San Pier Niceto,1709,82,107,IT,38.1605,15.34982 60167,San Piero Patti,1709,82,107,IT,38.05214,14.96816 60177,San Pietro Clarenza,1709,82,107,IT,37.56885,15.02289 60233,San Salvatore di Fitalia,1709,82,107,IT,38.06841,14.77799 60252,San Teodoro,1709,82,107,IT,37.84797,14.69878 60276,San Vito Lo Capo,1709,82,107,IT,38.17395,12.73599 60323,SantAgata di Militello,1709,82,107,IT,38.06838,14.636 60318,SantAgata Li Battiati,1709,82,107,IT,37.55745,15.07999 60334,SantAlessio Siculo,1709,82,107,IT,37.92516,15.34968 60336,SantAlfio,1709,82,107,IT,37.74393,15.13952 60365,SantAngelo di Brolo,1709,82,107,IT,38.11518,14.88403 60360,SantAngelo Muxaro,1709,82,107,IT,37.48014,13.54554 60415,Santa Caterina Villarmosa,1709,82,107,IT,37.59034,14.03554 60422,Santa Cristina Gela,1709,82,107,IT,37.98514,13.32747 60426,Santa Croce Camerina,1709,82,107,IT,36.82842,14.52538 60433,Santa Domenica Vittoria,1709,82,107,IT,37.91624,14.96288 60434,Santa Elisabetta,1709,82,107,IT,37.43171,13.55386 60437,Santa Flavia,1709,82,107,IT,38.10448,13.5334 60447,Santa Lucia del Mela,1709,82,107,IT,38.14408,15.28055 60453,Santa Margherita di Belice,1709,82,107,IT,37.69281,13.01584 60476,Santa Maria di Licodia,1709,82,107,IT,37.61684,14.89337 60481,Santa Maria la Stella,1709,82,107,IT,37.62349,15.12071 60483,Santa Marina Salina,1709,82,107,IT,38.56117,14.87077 60487,Santa Ninfa,1709,82,107,IT,37.77042,12.87744 60496,Santa Teresa di Riva,1709,82,107,IT,37.94635,15.36671 60498,Santa Venerina,1709,82,107,IT,37.69103,15.1388 60521,Santo Stefano di Camastra,1709,82,107,IT,38.01295,14.35142 60514,Santo Stefano Quisquina,1709,82,107,IT,37.62606,13.48976 60535,Saponara,1709,82,107,IT,38.19241,15.43442 60536,Saponara Marittima,1709,82,107,IT,38.23121,15.42621 60564,Sasi,1709,82,107,IT,37.90217,12.88788 60595,Savoca,1709,82,107,IT,37.95326,15.34009 60609,Scaletta Zanclea,1709,82,107,IT,38.04796,15.46769 60649,Sciacca,1709,82,107,IT,37.50693,13.08399 60650,Sciara,1709,82,107,IT,37.91511,13.76177 60653,Scicli,1709,82,107,IT,36.79014,14.7028 60656,Scillato,1709,82,107,IT,37.85778,13.90632 60659,Sclafani Bagni,1709,82,107,IT,37.82175,13.85476 60660,Scoglitti,1709,82,107,IT,36.89424,14.43355 60666,Scordia,1709,82,107,IT,37.29548,14.84058 60759,Serradifalco,1709,82,107,IT,37.45384,13.88046 60826,Sfaranda,1709,82,107,IT,38.05815,14.83147 60827,Sferracavallo,1709,82,107,IT,38.2,13.28333 60840,Siculiana,1709,82,107,IT,37.33515,13.42432 60862,Sinagra,1709,82,107,IT,38.08191,14.85009 60871,Siracusa,1709,82,107,IT,37.07542,15.28664 60903,Solarino,1709,82,107,IT,37.10136,15.11988 60933,Sommatino,1709,82,107,IT,37.33471,13.99739 60968,Sortino,1709,82,107,IT,37.15881,15.02998 60988,Spadafora,1709,82,107,IT,38.22349,15.38178 60992,Sparta,1709,82,107,IT,38.29371,15.53503 60997,Sperlinga,1709,82,107,IT,37.76653,14.35075 61132,Sutera,1709,82,107,IT,37.52493,13.73274 61161,Taormina,1709,82,107,IT,37.85358,15.28851 61226,Terme,1709,82,107,IT,38.13586,15.15658 61228,Termini Imerese,1709,82,107,IT,37.98225,13.69729 61245,Terrasini,1709,82,107,IT,38.14621,13.08319 61312,Tonnara di Bonagia,1709,82,107,IT,38.06309,12.59434 61313,Tonnarella,1709,82,107,IT,38.12539,15.11348 61354,Torre Colonna-Sperone,1709,82,107,IT,38.02986,13.57377 61383,Torregrotta,1709,82,107,IT,38.20262,15.3501 61386,Torrenova,1709,82,107,IT,38.09246,14.67917 61389,Torretta,1709,82,107,IT,38.13036,13.23549 61418,Tortorici,1709,82,107,IT,38.02973,14.82212 61427,Trabia,1709,82,107,IT,38.0042,13.63393 61440,Trapani,1709,82,107,IT,37.83333,12.66667 61441,Trappeto,1709,82,107,IT,38.06875,13.03794 61457,Tre Fontane,1709,82,107,IT,37.56989,12.72423 61465,Trecastagni,1709,82,107,IT,37.61543,15.07796 61478,Tremestieri Etneo,1709,82,107,IT,37.56494,15.07863 61534,Tripi,1709,82,107,IT,38.04673,15.0967 61535,Triscina,1709,82,107,IT,37.58717,12.78912 61550,Troina,1709,82,107,IT,37.78437,14.59605 61580,Tusa,1709,82,107,IT,37.98385,14.23606 61586,Ucria,1709,82,107,IT,38.04624,14.88087 61619,Ustica,1709,82,107,IT,38.70985,13.19293 61653,Valderice,1709,82,107,IT,38.04005,12.61505 61655,Valdina,1709,82,107,IT,38.19351,15.3698 61678,Valguarnera Caropepe,1709,82,107,IT,37.49527,14.39025 61705,Valledolmo,1709,82,107,IT,37.74703,13.82811 61710,Vallelunga Pratameno,1709,82,107,IT,37.68205,13.83156 61747,Valverde,1709,82,107,IT,37.57695,15.12419 61750,Vambolieri,1709,82,107,IT,37.57417,15.16019 61818,Venetico Marina,1709,82,107,IT,38.21928,15.36648 61819,Venetico Superiore,1709,82,107,IT,38.19307,15.38119 61826,Ventimiglia di Sicilia,1709,82,107,IT,37.92361,13.56768 61901,Viagrande,1709,82,107,IT,37.61032,15.09794 61911,Vicari,1709,82,107,IT,37.82371,13.56889 61954,Vigliatore 2,1709,82,107,IT,38.12221,15.13066 61993,Villa Ciambra,1709,82,107,IT,38.06129,13.32 62047,Villabate,1709,82,107,IT,38.07789,13.44275 62058,Villafranca Sicula,1709,82,107,IT,37.58761,13.29048 62059,Villafranca Tirrena,1709,82,107,IT,38.23952,15.43885 62063,Villafrati,1709,82,107,IT,37.90646,13.48486 62068,Villaggio del Pino-Le Ginestre,1709,82,107,IT,37.58292,15.00377 62076,Villalba,1709,82,107,IT,37.65457,13.84452 62131,Villarosa,1709,82,107,IT,37.58753,14.17089 62135,Villaseta,1709,82,107,IT,37.29877,13.55919 62137,Villasmundo,1709,82,107,IT,37.25132,15.09087 62178,Vita,1709,82,107,IT,37.86886,12.82755 62184,Vittoria,1709,82,107,IT,36.95151,14.52788 62193,Vizzini,1709,82,107,IT,37.16188,14.75712 62229,Zafferana Etnea,1709,82,107,IT,37.67895,15.10432 135338,Ala,1725,32,107,IT,45.76072,11.00458 135370,Albiano,1725,32,107,IT,46.14451,11.19459 135391,Aldeno,1725,32,107,IT,45.97758,11.09276 135392,Aldino,1725,32,107,IT,46.36581,11.35508 135465,Amblar,1725,32,107,IT,46.39541,11.14677 135481,Andalo,1725,32,107,IT,46.16649,11.00432 135492,Andriano,1725,32,107,IT,46.51762,11.23137 135514,Anterivo,1725,32,107,IT,46.2781,11.36665 135570,Arco,1725,32,107,IT,45.91772,10.88672 135698,Avelengo,1725,32,107,IT,46.64557,11.22419 135711,Avio,1725,32,107,IT,45.73396,10.93938 135734,Badia,1725,32,107,IT,46.60816,11.8963 135831,Barbiano - Barbian,1725,32,107,IT,46.60332,11.52138 135882,Baselga di Pinè,1725,32,107,IT,46.1325,11.24648 135999,Bersone,1725,32,107,IT,45.9444,10.63317 136013,Besenello,1725,32,107,IT,45.94356,11.10908 136048,Bieno,1725,32,107,IT,46.08151,11.55609 136078,Bleggio Superiore,1725,32,107,IT,46.0248,10.83837 136091,Bocenago,1725,32,107,IT,46.11858,10.75884 136102,Bolbeno,1725,32,107,IT,46.0326,10.73787 136109,Bolognano-Vignole,1725,32,107,IT,45.91196,10.90497 136115,Bolzano,1725,32,107,IT,46.71667,11.5 136132,Bondo,1725,32,107,IT,46.0003,10.69197 136133,Bondone,1725,32,107,IT,45.80649,10.55027 136194,Borgo Valsugana,1725,32,107,IT,46.05119,11.45756 136249,Bosentino-Migazzone,1725,32,107,IT,46.0018,11.22318 136284,Braies,1725,32,107,IT,46.72023,12.13339 136296,Breguzzo,1725,32,107,IT,46.00679,10.69761 136305,Brennero - Brenner,1725,32,107,IT,46.93813,11.44247 136310,Brentonico,1725,32,107,IT,45.8191,10.95508 136315,Bresimo,1725,32,107,IT,46.41181,10.96817 136318,Bressanone,1725,32,107,IT,46.71503,11.65598 136321,Brez,1725,32,107,IT,46.4322,11.10578 136339,Brione,1725,32,107,IT,45.89488,10.58975 136354,Bronzolo,1725,32,107,IT,46.40346,11.32078 136371,Brunico,1725,32,107,IT,46.79942,11.93429 136457,Caderzone Terme,1725,32,107,IT,46.12945,10.75619 136458,Cadine,1725,32,107,IT,46.0896,11.06847 136459,Cadipietra,1725,32,107,IT,46.99576,11.98026 136473,Cagnò,1725,32,107,IT,46.39431,11.04117 136476,Caines,1725,32,107,IT,46.69794,11.17122 136477,Caines - Kuens,1725,32,107,IT,46.70002,11.16987 136498,Calavino,1725,32,107,IT,46.04606,10.98402 136501,Calceranica al Lago,1725,32,107,IT,46.0046,11.24368 136511,Caldaro sulla Strada del Vino,1725,32,107,IT,46.41326,11.24616 136515,Caldes,1725,32,107,IT,46.36686,10.94037 136520,Caldonazzo,1725,32,107,IT,45.99367,11.26426 136533,Calliano,1725,32,107,IT,45.93299,11.09503 136624,Campitello di Fassa,1725,32,107,IT,46.47579,11.7411 136636,Campo di Trens,1725,32,107,IT,46.87412,11.48605 136633,Campo Tures,1725,32,107,IT,46.90844,11.96036 136645,Campodenno,1725,32,107,IT,46.25791,11.03317 136686,Canal San Bovo,1725,32,107,IT,46.15667,11.72998 136693,Canazei,1725,32,107,IT,46.47627,11.76929 136811,Capriana,1725,32,107,IT,46.26281,11.33801 136833,Carano,1725,32,107,IT,46.29151,11.43978 136857,Cardano,1725,32,107,IT,46.49336,11.39295 136883,Carisolo,1725,32,107,IT,46.1688,10.75887 136948,Carzano,1725,32,107,IT,46.07091,11.49379 137135,Castel Condino,1725,32,107,IT,45.91439,10.60277 137179,Castelbello,1725,32,107,IT,46.62885,10.90719 137180,Castelbello-Ciardes - Kastelbell-Tschars,1725,32,107,IT,46.62832,10.90666 137194,Castelfondo,1725,32,107,IT,46.45623,11.11785 137253,Castello Molina di Fiemme,1725,32,107,IT,46.28241,11.43348 137254,Castello Tesino,1725,32,107,IT,46.06302,11.63247 137281,Castelnuovo,1725,32,107,IT,46.05412,11.48916 137311,Castelrotto,1725,32,107,IT,46.56662,11.56098 137413,Cavalese,1725,32,107,IT,46.29048,11.45862 137421,Cavareno,1725,32,107,IT,46.4078,11.13934 137431,Cavedago,1725,32,107,IT,46.18486,11.03277 137432,Cavedine,1725,32,107,IT,45.9952,10.97358 137438,Cavizzana,1725,32,107,IT,46.36721,10.95817 137484,Cembra,1725,32,107,IT,46.17489,11.22174 137494,Centa San Nicolò,1725,32,107,IT,45.9693,11.23238 137502,Centrale,1725,32,107,IT,46.16118,11.30293 137554,Cermes,1725,32,107,IT,46.63277,11.14696 137579,Certosa,1725,32,107,IT,46.7045,10.91088 137662,Chienes,1725,32,107,IT,46.8068,11.84002 137686,Chiusa,1725,32,107,IT,46.64001,11.56573 137723,Cimego,1725,32,107,IT,45.9119,10.61337 137728,Cimoneri,1725,32,107,IT,45.98426,11.07155 137739,Cinte Tesino,1725,32,107,IT,46.05726,11.61435 137752,Cis,1725,32,107,IT,46.39841,11.00327 137780,Civezzano,1725,32,107,IT,46.09133,11.18468 137811,Cles,1725,32,107,IT,46.36294,11.03276 137815,Cloz,1725,32,107,IT,46.4162,11.08589 137844,Cogolo,1725,32,107,IT,46.35252,10.69282 137855,Collalbo,1725,32,107,IT,46.53988,11.45933 137861,Colle Isarco,1725,32,107,IT,46.93857,11.44245 137946,Commezzadura,1725,32,107,IT,46.32171,10.83957 137962,Condino,1725,32,107,IT,45.88167,10.59366 138004,Coredo,1725,32,107,IT,46.34906,11.09001 138023,Cornaiano,1725,32,107,IT,46.46329,11.28115 138028,Cornedo AllIsarco,1725,32,107,IT,46.4899,11.40647 138050,Cortaccia sulla Strada del Vino,1725,32,107,IT,46.31401,11.22388 138068,Cortina sulla Strada del Vino,1725,32,107,IT,46.26941,11.22188 138073,Corvara in Badia,1725,32,107,IT,46.55037,11.87342 138116,Covelo,1725,32,107,IT,45.97919,11.06971 138149,Creto,1725,32,107,IT,45.9411,10.64027 138173,Croviana,1725,32,107,IT,46.3448,10.90313 138192,Cunevo,1725,32,107,IT,46.28641,11.03457 138205,Curon Venosta,1725,32,107,IT,46.80832,10.54265 138223,Daiano,1725,32,107,IT,46.30161,11.44908 138226,Dambel,1725,32,107,IT,46.40471,11.09307 138228,Daone,1725,32,107,IT,45.9472,10.62107 138248,Denno,1725,32,107,IT,46.27424,11.04913 138267,Dimaro,1725,32,107,IT,46.32573,10.87342 138273,Dobbiaco,1725,32,107,IT,46.72878,12.22225 138295,Don,1725,32,107,IT,46.38931,11.13647 138311,Dorsino,1725,32,107,IT,46.0727,10.89737 138328,Drena,1725,32,107,IT,45.96926,10.9454 138331,Dro,1725,32,107,IT,45.96121,10.91201 138350,Egna,1725,32,107,IT,46.31777,11.27337 138400,Faedo,1725,32,107,IT,46.19241,11.16128 138410,Fai della Paganella,1725,32,107,IT,46.17801,11.0695 138426,Falzes,1725,32,107,IT,46.81359,11.88308 138461,Faver,1725,32,107,IT,46.18131,11.23728 138502,Fiavè,1725,32,107,IT,46.00457,10.84225 138558,Fiè Allo Sciliar,1725,32,107,IT,46.51672,11.50128 138508,Fiera di Primiero,1725,32,107,IT,46.17621,11.82879 138509,Fierozzo,1725,32,107,IT,46.11131,11.31848 138560,Flavon,1725,32,107,IT,46.29809,11.02993 138580,Folgaria,1725,32,107,IT,45.91543,11.1682 138589,Fondo,1725,32,107,IT,46.4388,11.13723 138592,Fontana Nuova-Bevia,1725,32,107,IT,46.41159,10.96843 138643,Fornace,1725,32,107,IT,46.11805,11.20751 138662,Fortezza,1725,32,107,IT,46.78963,11.60998 138710,Frassilongo,1725,32,107,IT,46.08991,11.29718 138725,Fraviano,1725,32,107,IT,46.29691,10.69197 138751,Funes - Villnoess,1725,32,107,IT,46.64282,11.67828 138793,Gais,1725,32,107,IT,46.83658,11.94931 138836,Ganda,1725,32,107,IT,46.55459,10.78042 138855,Gargazzone,1725,32,107,IT,46.58456,11.20156 138861,Garniga Nuova,1725,32,107,IT,46.0031,11.08738 138974,Gionghi-Cappella,1725,32,107,IT,45.9368,11.27478 138980,Giovo,1725,32,107,IT,46.15581,11.15278 139000,Giustino,1725,32,107,IT,46.1513,10.76777 139005,Glorenza,1725,32,107,IT,46.67105,10.55684 139077,Grauno,1725,32,107,IT,46.23032,11.29847 139100,Grigno,1725,32,107,IT,46.01569,11.63563 139138,Grumes,1725,32,107,IT,46.22117,11.29346 139198,Imer,1725,32,107,IT,46.14931,11.78919 139232,Isera,1725,32,107,IT,45.8876,11.00918 139307,La Valle - Wengen,1725,32,107,IT,46.65763,11.92399 139315,Laces,1725,32,107,IT,46.61641,10.85726 139321,Laghetti,1725,32,107,IT,46.27473,11.24011 139329,Lagundo,1725,32,107,IT,46.68113,11.12572 139335,Laion,1725,32,107,IT,46.60809,11.56559 139336,Laives,1725,32,107,IT,46.42679,11.33841 139352,Lana,1725,32,107,IT,46.61209,11.15653 139371,Lardaro,1725,32,107,IT,45.96946,10.66126 139378,Lasa,1725,32,107,IT,46.61783,10.69777 139380,Lases,1725,32,107,IT,46.1456,11.21932 139381,Lasino,1725,32,107,IT,46.0242,10.98357 139399,Lauregno,1725,32,107,IT,46.45431,11.06177 139418,Lavis,1725,32,107,IT,46.14131,11.10931 139455,Leone-Santa Elisabetta,1725,32,107,IT,46.73166,11.64944 139488,Levico Terme,1725,32,107,IT,46.01217,11.30427 139541,Lisignago,1725,32,107,IT,46.16061,11.18768 139549,Livo,1725,32,107,IT,46.40471,11.01927 139573,Lodrone-Darzo,1725,32,107,IT,45.82962,10.5356 139583,Lona-Lases,1725,32,107,IT,46.14421,11.21958 139671,Luserna,1725,32,107,IT,45.9226,11.32289 139678,Luson - Luesen,1725,32,107,IT,46.74623,11.76098 139712,Madrano-Canzolino,1725,32,107,IT,46.0844,11.21736 139743,Magrè sulla Strada del Vino,1725,32,107,IT,46.28791,11.21068 139779,Malè,1725,32,107,IT,46.35356,10.91246 139769,Malles Venosta,1725,32,107,IT,46.68791,10.54655 139774,Malosco,1725,32,107,IT,46.43611,11.14627 139852,Marco,1725,32,107,IT,45.84258,11.00925 139903,Marlengo,1725,32,107,IT,46.65262,11.14546 139987,Massimeno,1725,32,107,IT,46.1407,10.77317 139999,Mattarello,1725,32,107,IT,46.00865,11.12984 140011,Mazzin,1725,32,107,IT,46.45742,11.70018 140015,Meano,1725,32,107,IT,46.12457,11.11761 140031,Meiern,1725,32,107,IT,46.56503,10.7827 140057,Meltina,1725,32,107,IT,46.58744,11.25487 140068,Merano,1725,32,107,IT,46.66817,11.15953 140105,Mezzana,1725,32,107,IT,46.31671,10.80007 140113,Mezzano,1725,32,107,IT,46.15393,11.80876 140118,Mezzocorona,1725,32,107,IT,46.21159,11.12253 140123,Mezzolombardo,1725,32,107,IT,46.20774,11.09636 140165,Miola di Pinè,1725,32,107,IT,46.12668,11.2485 140193,Moena,1725,32,107,IT,46.37655,11.65941 140215,Molina di Ledro,1725,32,107,IT,45.87095,10.77408 140233,Molveno,1725,32,107,IT,46.14238,10.963 140268,Monclassico,1725,32,107,IT,46.3341,10.88604 140291,Monguelfo,1725,32,107,IT,46.75774,12.10556 140308,Montagna,1725,32,107,IT,46.33033,11.30027 140312,Montagne,1725,32,107,IT,46.0585,10.75127 140615,Mori,1725,32,107,IT,45.85187,10.98052 140644,Moscheri,1725,32,107,IT,45.86875,11.07383 140649,Moso in Passiria,1725,32,107,IT,46.83154,11.16708 140709,Mühlen in Taufers,1725,32,107,IT,46.89926,11.94317 140710,Nago-Torbole,1725,32,107,IT,45.87594,10.89106 140711,Nalles,1725,32,107,IT,46.54341,11.20625 140712,Nanno,1725,32,107,IT,46.31481,11.04747 140726,Naturno,1725,32,107,IT,46.64801,11.00129 140729,Nave San Rocco,1725,32,107,IT,46.16771,11.10508 140732,Naz-Sciaves - Natz-Schabs,1725,32,107,IT,46.76883,11.66558 140792,Nogaredo,1725,32,107,IT,45.913,11.02388 140801,Nomi,1725,32,107,IT,45.92923,11.07198 140813,Nova Levante,1725,32,107,IT,46.42899,11.53942 140815,Nova Ponente,1725,32,107,IT,46.41404,11.42523 140820,Novaledo,1725,32,107,IT,46.0234,11.36607 140936,Ora,1725,32,107,IT,46.34687,11.29747 140986,Ortisei,1725,32,107,IT,46.57603,11.67176 141015,Ospedaletto,1725,32,107,IT,46.04286,11.55439 141025,Ossana,1725,32,107,IT,46.30651,10.73757 141074,Padergnone,1725,32,107,IT,46.05982,10.98478 58271,Palù del Fersina,1725,32,107,IT,46.12951,11.35088 58275,Panchià,1725,32,107,IT,46.28648,11.54061 58298,Parcines,1725,32,107,IT,46.68422,11.07337 58397,Pellizzano,1725,32,107,IT,46.3098,10.7579 58398,Pelugo,1725,32,107,IT,46.0885,10.72387 58413,Perca,1725,32,107,IT,46.79343,11.98339 58423,Pergine Valsugana,1725,32,107,IT,46.06434,11.23758 58563,Piazza,1725,32,107,IT,45.87705,11.15809 58618,Pietramurata,1725,32,107,IT,46.02033,10.94316 58648,Pieve di Bono,1725,32,107,IT,45.9422,10.64027 58652,Pieve di Ledro,1725,32,107,IT,45.88848,10.73124 58640,Pieve Tesino,1725,32,107,IT,46.0682,11.61122 58676,Pineta,1725,32,107,IT,46.43994,11.34727 58683,Pinzolo,1725,32,107,IT,46.15976,10.76376 58736,Plaus,1725,32,107,IT,46.65623,11.04178 58812,Pomarolo,1725,32,107,IT,45.9281,11.04308 58835,Ponte Arche,1725,32,107,IT,46.03526,10.8732 58841,Ponte Gardena,1725,32,107,IT,46.59712,11.53088 58960,Postal,1725,32,107,IT,46.60949,11.19313 58971,Povo,1725,32,107,IT,46.06698,11.15503 58974,Pozza di Fassa,1725,32,107,IT,46.42806,11.68711 59011,Praso,1725,32,107,IT,45.95,10.63627 59020,Prati,1725,32,107,IT,46.90003,11.46507 59028,Prato Allo Stelvio,1725,32,107,IT,46.61901,10.59136 59044,Predazzo,1725,32,107,IT,46.3114,11.5996 59045,Predoi,1725,32,107,IT,47.04031,12.10663 59061,Preore,1725,32,107,IT,46.04663,10.75969 59073,Prezzo,1725,32,107,IT,45.9347,10.63297 59098,Proves - Proveis,1725,32,107,IT,46.47661,11.02247 59105,Provincia autonoma di Trento,1725,32,107,IT,46.06966,11.12177 59253,Rabbi Fonti,1725,32,107,IT,46.39886,10.84951 59254,Rablà,1725,32,107,IT,46.67044,11.06458 59259,Racines,1725,32,107,IT,46.86667,11.3 59260,Racines - Ratschings,1725,32,107,IT,46.88183,11.37827 59268,Ragoli,1725,32,107,IT,46.05423,10.77855 59292,Rasun Anterselva - Rasen-Antholz,1725,32,107,IT,46.77853,12.04729 59301,Ravina,1725,32,107,IT,46.03944,11.11215 59333,Renon - Ritten,1725,32,107,IT,46.54152,11.45728 59345,Revò,1725,32,107,IT,46.39226,11.05808 59371,Ried,1725,32,107,IT,46.92993,11.52414 59375,Rifiano,1725,32,107,IT,46.70287,11.18057 59389,Rio di Pusteria,1725,32,107,IT,46.79658,11.66754 59413,Riscone,1725,32,107,IT,46.77685,11.95149 59419,Riva del Garda,1725,32,107,IT,45.88577,10.84117 59549,Rodengo,1725,32,107,IT,46.8,11.7 59550,Rodengo - Rodeneck,1725,32,107,IT,46.77953,11.69048 59570,Romagnano,1725,32,107,IT,46.01807,11.10563 59573,Romallo,1725,32,107,IT,46.39721,11.06617 59583,Romeno,1725,32,107,IT,46.39452,11.1192 59593,Roncegno,1725,32,107,IT,46.04934,11.40824 59595,Ronchi Valsugana,1725,32,107,IT,46.06841,11.43519 59612,Roncone,1725,32,107,IT,45.9827,10.66817 59618,Ronzo-Chienis,1725,32,107,IT,45.8896,10.95008 59619,Ronzone,1725,32,107,IT,46.42437,11.15275 59681,Roverè della Luna,1725,32,107,IT,46.25008,11.17233 59679,Rovereto,1725,32,107,IT,45.8904,11.04053 59698,Ruffrè,1725,32,107,IT,46.41481,11.17777 59702,Rumo,1725,32,107,IT,46.44141,11.01857 59714,Sabbionara,1725,32,107,IT,45.74152,10.9574 59726,Sagron Mis,1725,32,107,IT,46.19471,11.9432 59779,Salorno,1725,32,107,IT,46.24062,11.21192 59814,Samone,1725,32,107,IT,46.08161,11.52259 59836,San Bernardo,1725,32,107,IT,46.40088,10.84445 59851,San Candido,1725,32,107,IT,46.7324,12.27855 59907,San Felice,1725,32,107,IT,46.49429,11.13022 59932,San Genesio,1725,32,107,IT,46.658,11.92456 59933,San Genesio Atesino,1725,32,107,IT,46.5346,11.32971 59943,San Giacomo,1725,32,107,IT,46.45624,11.33365 60031,San Leonardo in Passiria,1725,32,107,IT,46.81282,11.24577 60047,San Lorenzo di Sebato,1725,32,107,IT,46.78514,11.90812 60048,San Lorenzo in Banale,1725,32,107,IT,46.0766,10.90847 60069,San Martino,1725,32,107,IT,46.81097,12.22684 60089,San Martino in Badia,1725,32,107,IT,46.68153,11.89809 60092,San Martino in Passiria,1725,32,107,IT,46.78392,11.22727 60114,San Michele,1725,32,107,IT,46.45472,11.26178 60117,San Michele AllAdige,1725,32,107,IT,46.18967,11.13212 60151,San Pancrazio,1725,32,107,IT,46.586,11.08571 60155,San Paolo,1725,32,107,IT,46.47207,11.26021 60170,San Pietro,1725,32,107,IT,46.64133,11.68277 60266,San Vigilio,1725,32,107,IT,46.69884,11.93104 60411,SantOrsola,1725,32,107,IT,46.10901,11.30201 60412,SantOrsola Terme,1725,32,107,IT,46.10881,11.30238 60423,Santa Cristina Valgardena,1725,32,107,IT,46.56299,11.73216 60497,Santa Valburga,1725,32,107,IT,46.55,11.0 60533,Sanzeno,1725,32,107,IT,46.36614,11.07559 60546,Sarentino,1725,32,107,IT,46.64121,11.35411 60555,Sarnonico,1725,32,107,IT,46.41941,11.14177 60637,Scena,1725,32,107,IT,46.6884,11.18855 60638,Scena - Schenna,1725,32,107,IT,46.69012,11.18627 60652,Sciaves,1725,32,107,IT,46.76859,11.66607 60671,Scurelle,1725,32,107,IT,46.06451,11.50569 60690,Segonzano,1725,32,107,IT,46.19021,11.25988 60703,Selva,1725,32,107,IT,46.55472,11.76038 60705,Selva dei Molini,1725,32,107,IT,46.89031,11.85832 60719,Senale,1725,32,107,IT,46.51077,11.11012 60720,Senales,1725,32,107,IT,46.70602,10.90846 60794,Sesto,1725,32,107,IT,46.70216,12.34962 60830,Sfruz,1725,32,107,IT,46.33961,11.12377 60847,Silandro,1725,32,107,IT,46.62831,10.76809 60866,Sinigo,1725,32,107,IT,46.63488,11.17926 60877,Siror,1725,32,107,IT,46.18784,11.83116 60883,Siusi,1725,32,107,IT,46.54133,11.55868 60887,Sluderno,1725,32,107,IT,46.66524,10.58345 60888,Smarano,1725,32,107,IT,46.34311,11.10977 60942,Soprabolzano,1725,32,107,IT,46.52899,11.40408 60945,Soraga,1725,32,107,IT,46.39462,11.66619 60976,Sover,1725,32,107,IT,46.22171,11.31568 60996,Spera,1725,32,107,IT,46.07031,11.50899 61005,Spiazzo,1725,32,107,IT,46.1036,10.73937 61029,Spormaggiore,1725,32,107,IT,46.21853,11.04805 61030,Sporminore,1725,32,107,IT,46.23692,11.02919 61045,Stanghe,1725,32,107,IT,46.88219,11.37764 61065,Stelvio,1725,32,107,IT,46.59767,10.5458 61066,Stenico,1725,32,107,IT,46.05124,10.85562 61081,Storo,1725,32,107,IT,45.84925,10.58022 61092,Strembo,1725,32,107,IT,46.1203,10.75087 61097,Strigno,1725,32,107,IT,46.0669,11.52224 61149,Taio,1725,32,107,IT,46.32139,11.06624 61173,Tassullo,1725,32,107,IT,46.34298,11.04539 61208,Telve,1725,32,107,IT,46.07011,11.48022 61209,Telve di Sopra,1725,32,107,IT,46.07131,11.47179 61213,Tenna,1725,32,107,IT,46.0157,11.26428 61214,Tenno,1725,32,107,IT,45.91937,10.8316 61220,Terento,1725,32,107,IT,46.82992,11.78288 61223,Terlago,1725,32,107,IT,46.09737,11.04505 61224,Terlano,1725,32,107,IT,46.53216,11.24689 61227,Termeno,1725,32,107,IT,46.34151,11.24228 61237,Terragnolo,1725,32,107,IT,45.8783,11.15468 61250,Terres,1725,32,107,IT,46.30991,11.02307 61258,Terzolas,1725,32,107,IT,46.36111,10.92587 61260,Tesero,1725,32,107,IT,46.29184,11.50946 61261,Tesimo,1725,32,107,IT,46.56542,11.16937 61281,Tione di Trento,1725,32,107,IT,46.0355,10.72679 61283,Tires,1725,32,107,IT,46.46817,11.52704 61285,Tirolo,1725,32,107,IT,46.69102,11.15427 61306,Tonadico,1725,32,107,IT,46.18111,11.83939 61319,Torcegno,1725,32,107,IT,46.07431,11.44979 61431,Trambileno,1725,32,107,IT,45.8689,11.07338 61438,Transacqua,1725,32,107,IT,46.17367,11.83279 61483,Trento,1725,32,107,IT,46.06787,11.12108 61491,Tres,1725,32,107,IT,46.32179,11.09654 61546,Trodena,1725,32,107,IT,46.32181,11.34982 61560,Tubre,1725,32,107,IT,46.64403,10.46328 61561,Tuenno,1725,32,107,IT,46.32844,11.02306 61595,Ultimo - Ulten,1725,32,107,IT,46.54832,11.00417 61628,Vadena,1725,32,107,IT,46.41361,11.30498 61649,Valda,1725,32,107,IT,46.20721,11.26488 61651,Valdaora di Mezzo,1725,32,107,IT,46.76027,12.02951 61670,Valfloriana,1725,32,107,IT,46.24971,11.34308 61682,Vallarsa,1725,32,107,IT,45.7828,11.11788 61685,Valle Aurina - Ahrntal,1725,32,107,IT,46.99623,11.97988 61697,Valle di Casies - Gsies,1725,32,107,IT,46.76833,12.17939 61751,Vandoies - Vintl,1725,32,107,IT,46.81513,11.72068 61752,Vandoies di Sotto,1725,32,107,IT,46.816,11.72183 61767,Varena,1725,32,107,IT,46.30671,11.45828 61773,Varna,1725,32,107,IT,46.73901,11.63749 61783,Vattaro,1725,32,107,IT,45.99388,11.21792 61807,Velturno,1725,32,107,IT,46.66705,11.59712 61831,Verano,1725,32,107,IT,46.60442,11.22565 61832,Verano - Voeran,1725,32,107,IT,46.60472,11.22607 61850,Verla,1725,32,107,IT,46.15793,11.15331 61852,Vermiglio,1725,32,107,IT,46.29691,10.69136 61876,Vervò,1725,32,107,IT,46.30989,11.11972 61894,Vezzano,1725,32,107,IT,46.07867,10.99735 61960,Vignola,1725,32,107,IT,46.04436,11.27738 61968,Vigo di Fassa,1725,32,107,IT,46.41898,11.67418 61969,Vigo di Ton,1725,32,107,IT,46.26531,11.08798 61972,Vigolo Vattaro,1725,32,107,IT,46.00523,11.1979 61983,Villa,1725,32,107,IT,46.74591,11.76243 62001,Villa Lagarina,1725,32,107,IT,45.91843,11.03303 62014,Villa Rendena,1725,32,107,IT,46.0627,10.7125 62043,Villa-Agnedo,1725,32,107,IT,46.05421,11.52839 62046,Villabassa,1725,32,107,IT,46.73781,12.17266 62087,Villandro,1725,32,107,IT,46.63086,11.53808 62088,Villandro - Villanders,1725,32,107,IT,46.63082,11.53708 62168,Vipiteno,1725,32,107,IT,46.89313,11.42961 62204,Volano,1725,32,107,IT,45.91718,11.06351 62232,Zambana,1725,32,107,IT,46.1517,11.09618 62258,Ziano di Fiemme,1725,32,107,IT,46.28572,11.56496 62280,Zuclo,1725,32,107,IT,46.0343,10.75107 135238,Abbadia San Salvatore,1664,52,107,IT,42.8812,11.6722 135244,Abetone,1664,52,107,IT,44.14595,10.66407 135276,Acquaviva,1664,52,107,IT,43.11566,11.86249 135301,Agliana,1664,52,107,IT,43.90246,11.00531 135371,Albiano Magra,1664,52,107,IT,44.17574,9.91619 135378,Albinia,1664,52,107,IT,42.50278,11.21027 135446,Altopascio,1664,52,107,IT,43.81618,10.67668 135466,Ambra,1664,52,107,IT,43.41465,11.60291 135478,Anchione,1664,52,107,IT,43.82612,10.75844 135497,Anghiari,1664,52,107,IT,43.54104,12.05832 135513,Antella,1664,52,107,IT,43.72774,11.32233 135554,Arbia,1664,52,107,IT,43.29342,11.40978 135567,Arcidosso,1664,52,107,IT,42.87162,11.53599 135590,Arezzo,1664,52,107,IT,43.46276,11.88068 135654,Asciano,1664,52,107,IT,43.23232,11.56655 135687,Aulla,1664,52,107,IT,44.20632,9.97853 135696,Avane,1664,52,107,IT,43.79049,10.40982 135739,Badia al Pino,1664,52,107,IT,43.40424,11.77228 135738,Badia Tedalda,1664,52,107,IT,43.70887,12.18425 135757,Bagni di Lucca,1664,52,107,IT,44.00513,10.5531 135761,Bagno a Ripoli,1664,52,107,IT,43.75115,11.32252 135760,Bagno Roselle,1664,52,107,IT,42.81114,11.13859 135774,Bagnone,1664,52,107,IT,44.31494,9.99507 135817,Barba,1664,52,107,IT,43.88291,10.97608 135822,Barbarasco,1664,52,107,IT,44.2415,9.94571 135828,Barberino di Mugello,1664,52,107,IT,43.9993,11.23676 135827,Barberino Val dElsa,1664,52,107,IT,43.53987,11.17178 135848,Barga,1664,52,107,IT,44.0731,10.47789 135907,Battifolle-Ruscello-Poggiola,1664,52,107,IT,43.45,11.8 135941,Bellavista,1664,52,107,IT,43.44197,11.16051 135968,Belverde,1664,52,107,IT,43.3482,11.30763 136021,Bettolle,1664,52,107,IT,43.20676,11.80365 136039,Bibbiena,1664,52,107,IT,43.69876,11.81474 136040,Bibbona,1664,52,107,IT,43.26822,10.5951 136049,Bientina,1664,52,107,IT,43.70826,10.62116 136164,Borghetto-Melara,1664,52,107,IT,44.09852,9.99073 136197,Borgo a Buggiano,1664,52,107,IT,43.87522,10.73482 136198,Borgo a Mozzano,1664,52,107,IT,43.97946,10.54489 136184,Borgo San Lorenzo,1664,52,107,IT,43.95548,11.38561 136280,Braccagni,1664,52,107,IT,42.87285,11.07266 136389,Bucine,1664,52,107,IT,43.47685,11.61399 136407,Buonconvento,1664,52,107,IT,43.13314,11.48363 136437,Buti,1664,52,107,IT,43.72857,10.5845 136503,Calci,1664,52,107,IT,43.72597,10.51791 136505,Calcinaia,1664,52,107,IT,43.68352,10.61653 136518,Caldine,1664,52,107,IT,43.82834,11.30442 136522,Calenzano,1664,52,107,IT,43.85447,11.16608 136567,Camaiore,1664,52,107,IT,43.94265,10.29754 136602,Campagnatico,1664,52,107,IT,42.88283,11.27394 136615,Campi Bisenzio,1664,52,107,IT,43.8245,11.13027 136618,Campiglia Marittima,1664,52,107,IT,43.06001,10.61453 136626,Campo,1664,52,107,IT,43.70811,10.47703 136637,Campo nellElba,1664,52,107,IT,42.74802,10.23332 136632,Campo Tizzoro,1664,52,107,IT,44.03994,10.85237 136675,Camporgiano,1664,52,107,IT,44.15927,10.333 136684,Camucia-Monsigliolo,1664,52,107,IT,43.25926,11.97114 136737,Cantagallo,1664,52,107,IT,44.02205,11.07971 136738,Cantagrillo-Casalguidi,1664,52,107,IT,43.86937,10.91386 136759,Capalbio,1664,52,107,IT,42.45342,11.42175 136760,Capanne-Prato-Cinquale,1664,52,107,IT,43.9972,10.15636 136761,Capannoli,1664,52,107,IT,43.58856,10.67328 136762,Capannori,1664,52,107,IT,43.84171,10.57271 136783,Capoliveri,1664,52,107,IT,42.74569,10.37753 136784,Capolona,1664,52,107,IT,43.56685,11.86374 136799,Capraia e Limite,1664,52,107,IT,43.74535,10.98342 136798,Capraia Isola,1664,52,107,IT,43.05064,9.84298 136807,Caprese Michelangelo,1664,52,107,IT,43.64031,11.98546 136864,Careggine,1664,52,107,IT,44.11995,10.3254 136892,Carmignano,1664,52,107,IT,43.81027,11.01494 136923,Carraia,1664,52,107,IT,43.89534,11.1819 136924,Carrara,1664,52,107,IT,44.07926,10.09789 136977,Casale Marittimo,1664,52,107,IT,43.29727,10.61658 137047,Casciana Terme,1664,52,107,IT,43.52668,10.61812 137048,Cascina,1664,52,107,IT,43.67557,10.55494 137051,Cascine-La Croce,1664,52,107,IT,43.72885,10.61471 137080,Casola in Lunigiana,1664,52,107,IT,44.20045,10.17679 137082,Casole dElsa,1664,52,107,IT,43.34115,11.04794 137117,Castagneto Carducci,1664,52,107,IT,43.16073,10.61092 137166,Castel del Piano,1664,52,107,IT,42.89228,11.53903 137153,Castel San Niccolò,1664,52,107,IT,43.74445,11.70913 137193,Castelfiorentino,1664,52,107,IT,43.60963,10.96772 137199,Castelfranco di Sopra,1664,52,107,IT,43.62156,11.55885 137200,Castelfranco di Sotto,1664,52,107,IT,43.70368,10.7463 137208,CastellAzzara,1664,52,107,IT,42.77275,11.69794 137246,Castellina in Chianti,1664,52,107,IT,43.46438,11.2895 137244,Castellina Marittima,1664,52,107,IT,43.41301,10.57594 137245,Castellina Scalo,1664,52,107,IT,43.40476,11.20908 137283,Castelnuovo Berardenga,1664,52,107,IT,43.34548,11.50039 137296,Castelnuovo dei Sabbioni,1664,52,107,IT,43.54093,11.45234 137302,Castelnuovo di Garfagnana,1664,52,107,IT,44.1126,10.40518 137304,Castelnuovo di Val di Cecina,1664,52,107,IT,43.21148,10.90413 137336,Castiglion Fibocchi,1664,52,107,IT,43.52742,11.76151 137337,Castiglion Fiorentino,1664,52,107,IT,43.34308,11.91995 137350,Castiglione dOrcia,1664,52,107,IT,43.0046,11.61451 137354,Castiglione della Pescaia,1664,52,107,IT,42.76854,10.87746 137356,Castiglione di Garfagnana,1664,52,107,IT,44.15248,10.41212 137393,Catena,1664,52,107,IT,43.84254,11.01658 137417,Cavallina,1664,52,107,IT,43.98353,11.23147 137444,Cavriglia-Monastero,1664,52,107,IT,43.52025,11.48693 137454,Cecina,1664,52,107,IT,43.30621,10.51729 137486,Cenaia,1664,52,107,IT,43.60637,10.53571 137519,Cerbaia,1664,52,107,IT,43.68519,11.12889 137563,Cerreto Guidi,1664,52,107,IT,43.75851,10.88191 137578,Certaldo,1664,52,107,IT,43.54768,11.03924 137601,Cesa,1664,52,107,IT,43.31624,11.81262 137622,Cetona,1664,52,107,IT,42.96655,11.90268 137645,Chianciano Terme,1664,52,107,IT,43.04181,11.81205 137646,Chianni,1664,52,107,IT,43.48153,10.64133 137656,Chiassa-Tregozzano,1664,52,107,IT,43.51251,11.89134 137670,Chiesina Uzzanese,1664,52,107,IT,43.83891,10.72044 137671,Chiesino-Collodi,1664,52,107,IT,43.67954,10.61106 137681,Chitignano,1664,52,107,IT,43.66163,11.88135 137695,Chiusdino,1664,52,107,IT,43.15454,11.0831 137696,Chiusi,1664,52,107,IT,43.01418,11.94791 137698,Chiusi della Verna,1664,52,107,IT,43.69745,11.93504 137697,Chiusi Scalo,1664,52,107,IT,42.99613,11.95412 137733,Cinigiano,1664,52,107,IT,42.89059,11.39196 137741,Cintolese,1664,52,107,IT,43.84606,10.82644 137804,Civitella in Val di Chiana,1664,52,107,IT,43.41731,11.7229 137797,Civitella Marittima,1664,52,107,IT,42.99408,11.28116 137873,Colle di Val dElsa,1664,52,107,IT,43.42107,11.12739 137893,Collesalvetti,1664,52,107,IT,43.59073,10.47523 137935,Comano,1664,52,107,IT,44.29335,10.13109 137937,Comeana,1664,52,107,IT,43.79334,11.05825 137949,Compiobbi,1664,52,107,IT,43.78485,11.35909 138005,Coreglia Antelminelli,1664,52,107,IT,44.06278,10.52426 138046,Corsanico-Bargecchia,1664,52,107,IT,43.90828,10.30621 138071,Cortona,1664,52,107,IT,43.27467,11.98533 138146,Crespina,1664,52,107,IT,43.57304,10.56431 138217,Cutigliano,1664,52,107,IT,44.10059,10.75617 138265,Dicomano,1664,52,107,IT,43.89267,11.52182 138303,Donoratico,1664,52,107,IT,43.16927,10.56744 138356,Empoli,1664,52,107,IT,43.71795,10.94758 138391,Fabbriche di Vallico,1664,52,107,IT,43.99765,10.4279 138402,Faella,1664,52,107,IT,43.62652,11.51844 138456,Fauglia,1664,52,107,IT,43.5711,10.51383 138511,Fiesole,1664,52,107,IT,43.80455,11.29487 138519,Figline Valdarno,1664,52,107,IT,43.61995,11.47191 138525,Filattiera,1664,52,107,IT,44.33005,9.93308 138528,Filettole,1664,52,107,IT,43.81307,10.40239 138543,Firenzuola,1664,52,107,IT,44.11968,11.38185 138556,Fivizzano,1664,52,107,IT,44.23784,10.1265 138563,Florence,1664,52,107,IT,43.77925,11.24626 138578,Foiano della Chiana,1664,52,107,IT,43.25318,11.81647 138584,Follonica,1664,52,107,IT,42.92779,10.76451 138593,Fontana delle Monache,1664,52,107,IT,44.11386,10.27943 138608,Fonteblanda,1664,52,107,IT,42.56463,11.17325 138622,Forcoli,1664,52,107,IT,43.60374,10.70514 138645,Fornacelle,1664,52,107,IT,43.92377,11.03525 138646,Fornacette,1664,52,107,IT,43.67023,10.58512 138650,Fornaci di Barga,1664,52,107,IT,44.04899,10.47111 138661,Forte dei Marmi,1664,52,107,IT,43.96388,10.17478 138665,Fosciandora,1664,52,107,IT,44.11495,10.4585 138666,Fosdinovo,1664,52,107,IT,44.1332,10.01778 138746,Fucecchio,1664,52,107,IT,43.73292,10.79749 138768,Gabella,1664,52,107,IT,43.7236,10.49726 138791,Gaiole in Chianti,1664,52,107,IT,43.46697,11.43386 138803,Galliano,1664,52,107,IT,44.01725,11.29353 138807,Gallicano,1664,52,107,IT,44.05833,10.44209 138829,Gambassi Terme,1664,52,107,IT,43.53576,10.95161 138880,Gavorrano,1664,52,107,IT,42.92526,10.90681 138890,Gello,1664,52,107,IT,43.75402,10.42386 138958,Giglio Castello,1664,52,107,IT,42.36486,10.9014 138964,Ginestra Fiorentina,1664,52,107,IT,43.70939,11.07384 138978,Giovi-Ponte alla Chiassa,1664,52,107,IT,43.52634,11.86558 138994,Giuncugnano,1664,52,107,IT,44.21055,10.24719 139073,Grassina Ponte a Ema,1664,52,107,IT,43.73333,11.3 139092,Greve in Chianti,1664,52,107,IT,43.58514,11.31712 139118,Grosseto,1664,52,107,IT,42.76296,11.10941 139166,Guardistallo,1664,52,107,IT,43.31408,10.62944 139170,Guasticce,1664,52,107,IT,43.59805,10.40865 139171,Guazzino,1664,52,107,IT,43.21276,11.78209 139193,Il Romito,1664,52,107,IT,43.64908,10.64538 139202,Impruneta,1664,52,107,IT,43.68453,11.25434 139205,Incisa in Val dArno,1664,52,107,IT,43.6548,11.44901 139237,Isola DArbia,1664,52,107,IT,43.25864,11.37866 139244,Isola del Giglio,1664,52,107,IT,42.35791,10.90724 139265,Istia DOmbrone-Le Stiacciole,1664,52,107,IT,42.78243,11.1882 139288,La California,1664,52,107,IT,43.26938,10.54313 139298,La Pieve-Molino,1664,52,107,IT,43.73725,11.62033 139301,La Rotta,1664,52,107,IT,43.6585,10.67837 139337,Lajatico,1664,52,107,IT,43.47457,10.72844 139350,Lamporecchio,1664,52,107,IT,43.80742,10.87733 139370,Larciano,1664,52,107,IT,43.83365,10.89001 139374,Lari,1664,52,107,IT,43.56606,10.59211 139385,Lastra a Signa,1664,52,107,IT,43.76998,11.11271 139387,Laterina,1664,52,107,IT,43.50193,11.71737 139423,Lazzeretto,1664,52,107,IT,43.78305,10.86054 139424,Le Casine-Perignano-Spinelli,1664,52,107,IT,43.6,10.58333 139495,Licciana Nardi,1664,52,107,IT,44.26472,10.03725 139523,Limite,1664,52,107,IT,43.7445,10.97996 139551,Livorno,1664,52,107,IT,43.54427,10.32615 139587,Londa,1664,52,107,IT,43.86344,11.56425 139607,Lorenzana,1664,52,107,IT,43.53533,10.53477 139613,Loro Ciuffenna,1664,52,107,IT,43.58827,11.62885 139629,Lucca,1664,52,107,IT,43.84369,10.50447 139632,Lucignano,1664,52,107,IT,43.27259,11.74599 139637,Luco Mugello,1664,52,107,IT,44.00032,11.39611 139711,Madonna dellAcqua,1664,52,107,IT,43.74264,10.37513 139730,Magliano in Toscana,1664,52,107,IT,42.59802,11.29234 139770,Malmantile,1664,52,107,IT,43.74717,11.07285 139782,Manciano,1664,52,107,IT,42.58875,11.51806 139810,Mantignano-Ugnano,1664,52,107,IT,43.782,11.16958 139845,Marciana,1664,52,107,IT,42.79301,10.1687 139846,Marciana Marina,1664,52,107,IT,42.80256,10.19488 139848,Marciano,1664,52,107,IT,43.30651,11.79171 139849,Marciano della Chiana,1664,52,107,IT,43.30494,11.78644 139851,Marcignana,1664,52,107,IT,43.7183,10.88436 139864,Margine Coperta-Traversagna,1664,52,107,IT,43.87977,10.75733 139879,Marina di Campo,1664,52,107,IT,42.7426,10.23428 139881,Marina di Carrara,1664,52,107,IT,44.03837,10.04142 139888,Marina di Grosseto,1664,52,107,IT,42.71908,10.98138 139889,Marina di Massa,1664,52,107,IT,44.0038,10.10674 139891,Marina di Pisa,1664,52,107,IT,43.66667,10.26667 139892,Marina di Pisa-Tirrenia-Calambrone,1664,52,107,IT,43.62719,10.29204 139904,Marliana,1664,52,107,IT,43.93385,10.77021 139915,Marradi,1664,52,107,IT,44.07353,11.61092 139929,Marti,1664,52,107,IT,43.65453,10.74058 139966,Massa,1664,52,107,IT,43.90925,10.74441 139973,Massa Marittima,1664,52,107,IT,43.04779,10.89293 139980,Massarosa,1664,52,107,IT,43.86638,10.34458 140072,Mercatale,1664,52,107,IT,43.63677,11.2279 140073,Mercatale-San Quirico,1664,52,107,IT,44.04426,11.15163 140102,Metato,1664,52,107,IT,43.77352,10.37106 140134,Migliarino,1664,52,107,IT,43.76589,10.33951 140163,Minucciano,1664,52,107,IT,44.17,10.20807 140211,Molazzana,1664,52,107,IT,44.07175,10.4178 140224,Molino del Piano,1664,52,107,IT,43.81098,11.39992 140303,Monsummano Terme,1664,52,107,IT,43.8672,10.81295 140314,Montaione,1664,52,107,IT,43.55144,10.91371 140319,Montalcino,1664,52,107,IT,43.05397,11.48853 140326,Montale,1664,52,107,IT,43.93486,11.01655 140330,Montalto,1664,52,107,IT,43.49912,11.6638 140352,Monte Argentario,1664,52,107,IT,42.43452,11.11954 140377,Monte San Savino,1664,52,107,IT,43.33213,11.72663 140392,Montebonello,1664,52,107,IT,43.83027,11.48655 140399,Montecalvoli,1664,52,107,IT,43.68576,10.66508 140400,Montecarlo,1664,52,107,IT,43.85218,10.66742 140405,Montecatini Val di Cecina,1664,52,107,IT,43.39234,10.74904 140406,Montecatini-Terme,1664,52,107,IT,43.88153,10.7723 140481,Montelupo Fiorentino,1664,52,107,IT,43.72958,11.00997 140493,Montemignaio,1664,52,107,IT,43.73985,11.61883 140498,Montemurlo,1664,52,107,IT,43.92686,11.03718 140510,Montepulciano,1664,52,107,IT,43.09998,11.78704 140511,Montepulciano Stazione,1664,52,107,IT,43.1352,11.85545 140513,Monterchi,1664,52,107,IT,43.48733,12.11054 140517,Monteriggioni,1664,52,107,IT,43.38994,11.22323 140519,Monteroni dArbia,1664,52,107,IT,43.22968,11.42228 140527,Monterotondo Marittimo,1664,52,107,IT,43.14556,10.85591 140537,Montescudaio,1664,52,107,IT,43.32603,10.62602 140543,Montespertoli,1664,52,107,IT,43.6426,11.07331 140547,Montevarchi,1664,52,107,IT,43.5252,11.57238 140550,Monteverdi Marittimo,1664,52,107,IT,43.17787,10.71133 140554,Monti,1664,52,107,IT,44.24864,10.00854 140570,Monticiano,1664,52,107,IT,43.13965,11.1771 140571,Montieri,1664,52,107,IT,43.13113,11.01663 140574,Montignoso,1664,52,107,IT,44.02405,10.17259 140580,Montopoli,1664,52,107,IT,43.67354,10.74951 140682,Mulazzo,1664,52,107,IT,44.31564,9.89101 140692,Murlo,1664,52,107,IT,43.16114,11.38794 140940,Orbetello,1664,52,107,IT,42.44158,11.2214 140941,Orbetello Scalo,1664,52,107,IT,42.44866,11.24936 140943,Orciano Pisano,1664,52,107,IT,43.49444,10.51151 140947,Orentano,1664,52,107,IT,43.77907,10.65939 140985,Ortignano Raggiolo,1664,52,107,IT,43.67995,11.74883 140996,Orzignano,1664,52,107,IT,43.77408,10.42382 58222,Palaia,1664,52,107,IT,43.60567,10.7702 58237,Palazzuolo sul Senio,1664,52,107,IT,44.11298,11.5427 58252,Pallerone,1664,52,107,IT,44.20485,10.00279 58286,Panzano in Chianti,1664,52,107,IT,43.54422,11.31438 58347,Patigno,1664,52,107,IT,44.35316,9.76297 58367,Peccioli,1664,52,107,IT,43.54963,10.7172 58390,Pelago,1664,52,107,IT,43.77255,11.50148 58422,Pergine Valdarno,1664,52,107,IT,43.47028,11.68552 58448,Pescaglia,1664,52,107,IT,43.96517,10.41292 58457,Pescia,1664,52,107,IT,43.8871,10.68849 58509,Pian di Mugnone,1664,52,107,IT,43.8181,11.29585 58510,Pian di Scò,1664,52,107,IT,43.64195,11.54523 58517,Piancastagnaio,1664,52,107,IT,42.85067,11.69014 58541,Piano di Conca,1664,52,107,IT,43.89413,10.29493 58542,Piano di Coreglia-Ghivizzano,1664,52,107,IT,44.03333,10.51667 58544,Piano di Mommio,1664,52,107,IT,43.90954,10.27435 58569,Piazza al Serchio-San Michele,1664,52,107,IT,44.18455,10.29689 58597,Pienza,1664,52,107,IT,43.07873,11.67671 58625,Pietrasanta,1664,52,107,IT,43.95952,10.22784 58643,Pieve a Nievole,1664,52,107,IT,43.88119,10.7999 58644,Pieve al Toppo,1664,52,107,IT,43.40761,11.79686 58635,Pieve Fosciana,1664,52,107,IT,44.13067,10.40952 58639,Pieve Santo Stefano,1664,52,107,IT,43.67145,12.04124 58689,Piombino,1664,52,107,IT,42.92554,10.52585 58702,Pisa,1664,52,107,IT,43.70853,10.4036 58714,Pistoia,1664,52,107,IT,43.93064,10.92365 58716,Piteglio,1664,52,107,IT,44.0279,10.76571 58718,Pitigliano,1664,52,107,IT,42.63582,11.67462 58744,Podenzana,1664,52,107,IT,44.20625,9.94199 58747,Poggetto,1664,52,107,IT,43.8279,11.03847 58749,Poggibonsi,1664,52,107,IT,43.47064,11.14804 58750,Poggio A Caiano,1664,52,107,IT,43.81378,11.05186 58808,Pomarance,1664,52,107,IT,43.29592,10.87223 58825,Ponsacco,1664,52,107,IT,43.62307,10.62661 58830,Pontasserchio,1664,52,107,IT,43.77953,10.41673 58831,Pontassieve,1664,52,107,IT,43.77477,11.43109 58833,Ponte A Elsa,1664,52,107,IT,43.68907,10.89281 58851,Ponte a Poppi,1664,52,107,IT,43.73171,11.76663 58834,Ponte A Tressa,1664,52,107,IT,43.25158,11.39514 58836,Ponte Buggianese,1664,52,107,IT,43.84599,10.74789 58869,Pontedera,1664,52,107,IT,43.66141,10.63067 58878,Pontestazzemese,1664,52,107,IT,43.99665,10.29439 58886,Ponticino,1664,52,107,IT,43.48012,11.71622 58893,Pontremoli,1664,52,107,IT,44.37515,9.87888 58901,Poppi,1664,52,107,IT,43.72123,11.76642 58903,Porcari,1664,52,107,IT,43.84152,10.61632 58923,Porto Azzurro,1664,52,107,IT,42.76754,10.39723 58929,Porto Ercole,1664,52,107,IT,42.40171,11.20523 58936,Porto Santo Stefano,1664,52,107,IT,42.43825,11.11542 58944,Portoferraio,1664,52,107,IT,42.81233,10.31297 58978,Pozzale-Case Nuove,1664,52,107,IT,43.69584,10.95651 59018,Pratantico-Indicatore,1664,52,107,IT,43.48071,11.80531 59026,Prato,1664,52,107,IT,43.8805,11.09699 59036,Pratovecchio,1664,52,107,IT,43.78685,11.72353 59100,Province of Arezzo,1664,52,107,IT,43.53333,11.83333 59102,Province of Florence,1664,52,107,IT,43.83333,11.33333 59103,Province of Pisa,1664,52,107,IT,43.41667,10.71667 59136,Provincia di Grosseto,1664,52,107,IT,42.83333,11.25 59143,Provincia di Livorno,1664,52,107,IT,43.23333,10.58333 59145,Provincia di Lucca,1664,52,107,IT,44.03333,10.45 59148,Provincia di Massa-Carrara,1664,52,107,IT,44.25,10.05 59162,Provincia di Pistoia,1664,52,107,IT,43.96667,10.83333 59165,Provincia di Prato,1664,52,107,IT,43.88046,11.09686 59175,Provincia di Siena,1664,52,107,IT,43.21667,11.4 59218,Quarata,1664,52,107,IT,43.49859,11.82742 59224,Quarrata,1664,52,107,IT,43.84837,10.97888 59237,Quattro Strade,1664,52,107,IT,43.74148,11.0807 59240,Quercianella,1664,52,107,IT,43.45959,10.36757 59261,Radda in Chianti,1664,52,107,IT,43.4854,11.37437 59263,Radicofani,1664,52,107,IT,42.89618,11.76839 59264,Radicondoli,1664,52,107,IT,43.26047,11.04582 59286,Rapolano Terme,1664,52,107,IT,43.29498,11.60264 59290,Rassina,1664,52,107,IT,43.64737,11.83632 59319,Reggello,1664,52,107,IT,43.67967,11.52976 59360,Ribolla,1664,52,107,IT,42.97087,11.03555 59379,Rignano sullArno,1664,52,107,IT,43.72145,11.45183 59386,Rio Marina,1664,52,107,IT,42.81395,10.426 59390,Rio nellElba,1664,52,107,IT,42.81169,10.40085 59400,Ripa-Pozzi-Querceta-Ponterosso,1664,52,107,IT,43.97806,10.20372 59407,Riparbella,1664,52,107,IT,43.36417,10.59799 59505,Roccalbegna,1664,52,107,IT,42.7863,11.50788 59525,Roccastrada,1664,52,107,IT,43.00888,11.16762 59617,Ronta,1664,52,107,IT,44.0031,11.42894 59638,Rosia,1664,52,107,IT,43.24611,11.22176 59639,Rosignano Marittimo,1664,52,107,IT,43.40686,10.47231 59641,Rosignano Solvay-Castiglioncello,1664,52,107,IT,43.38946,10.43615 59699,Rufina,1664,52,107,IT,43.82396,11.48673 59710,S.P. in Palazzi,1664,52,107,IT,43.32776,10.50881 59770,Saline,1664,52,107,IT,43.36185,10.81354 59803,Sambuca,1664,52,107,IT,43.57344,11.21407 59804,Sambuca Pistoiese,1664,52,107,IT,44.10435,10.99961 59857,San Casciano dei Bagni,1664,52,107,IT,42.87008,11.87656 59858,San Casciano in Val di Pesa,1664,52,107,IT,43.65975,11.18494 59872,San Cipriano-S.Barbara-Centinale,1664,52,107,IT,43.56863,11.48467 59895,San Donato,1664,52,107,IT,43.70298,10.78754 59900,San Donnino,1664,52,107,IT,43.79547,11.14654 59926,San Francesco,1664,52,107,IT,43.77483,11.44842 59949,San Gimignano,1664,52,107,IT,43.4738,11.02975 59993,San Giovanni dAsso,1664,52,107,IT,43.15334,11.58938 59990,San Giovanni Valdarno,1664,52,107,IT,43.56757,11.52987 60005,San Giuliano Terme,1664,52,107,IT,43.76372,10.43856 60016,San Giustino Valdarno,1664,52,107,IT,43.55269,11.70497 60018,San Godenzo,1664,52,107,IT,43.92504,11.61982 60026,San Jacopo al Girone,1664,52,107,IT,43.76956,11.34032 60059,San Marcello Pistoiese,1664,52,107,IT,44.05583,10.79366 60091,San Martino in Freddana-Monsagrati,1664,52,107,IT,43.90921,10.43778 60104,San Mauro,1664,52,107,IT,43.79418,11.12499 60127,San Miniato,1664,52,107,IT,43.67954,10.84975 60128,San Miniato Basso,1664,52,107,IT,43.69332,10.84119 60166,San Pierino,1664,52,107,IT,43.71423,10.81374 60168,San Piero a Sieve,1664,52,107,IT,43.96251,11.32426 60175,San Pietro Belvedere,1664,52,107,IT,43.57011,10.66604 60217,San Quirico dOrcia,1664,52,107,IT,43.05782,11.60525 60224,San Rocco,1664,52,107,IT,43.82316,10.86121 60227,San Romano,1664,52,107,IT,43.68922,10.769 60228,San Romano in Garfagnana,1664,52,107,IT,44.16945,10.3469 60267,San Vincenzo,1664,52,107,IT,43.09061,10.54246 60285,San Vito-Cerreto,1664,52,107,IT,44.023,10.17212 60313,Sansepolcro,1664,52,107,IT,43.57258,12.13858 60332,SantAlbino,1664,52,107,IT,43.07098,11.80684 60430,Santa Croce sullArno,1664,52,107,IT,43.71709,10.77242 60436,Santa Fiora,1664,52,107,IT,42.83129,11.58474 60443,Santa Luce,1664,52,107,IT,43.47143,10.56269 60444,Santa Lucia,1664,52,107,IT,43.88296,10.70307 60470,Santa Maria a Monte,1664,52,107,IT,43.70793,10.69196 60560,Sarteano,1664,52,107,IT,42.99193,11.86472 60570,Sassetta,1664,52,107,IT,43.12874,10.64359 60617,Scandicci,1664,52,107,IT,43.75423,11.18794 60625,Scansano,1664,52,107,IT,42.68779,11.32975 60632,Scarlino,1664,52,107,IT,42.90799,10.85148 60633,Scarlino Scalo,1664,52,107,IT,42.93992,10.83766 60636,Scarperia,1664,52,107,IT,43.99357,11.35415 60673,Seano,1664,52,107,IT,43.83035,11.02122 60688,Seggiano,1664,52,107,IT,42.92897,11.55736 60709,Selvatelle,1664,52,107,IT,43.56281,10.69091 60717,Semproniano,1664,52,107,IT,42.72923,11.54134 60735,Seravezza,1664,52,107,IT,43.99471,10.2272 60773,Serravalle Pistoiese,1664,52,107,IT,43.90605,10.83271 60780,Serre di Rapolano,1664,52,107,IT,43.25658,11.61655 60793,Sestino,1664,52,107,IT,43.70966,12.29785 60797,Sesto Fiorentino,1664,52,107,IT,43.83193,11.19924 60843,Sieci,1664,52,107,IT,43.78847,11.39445 60844,Siena,1664,52,107,IT,43.31822,11.33064 60846,Signa,1664,52,107,IT,43.7942,11.1036 60853,Sillano,1664,52,107,IT,44.22298,10.30235 60863,Sinalunga,1664,52,107,IT,43.21492,11.74507 60894,Soci,1664,52,107,IT,43.72821,11.81096 60947,Sorano,1664,52,107,IT,42.68118,11.71943 60983,Sovicille,1664,52,107,IT,43.28033,11.22828 61004,Spianate,1664,52,107,IT,43.81075,10.7151 61006,Spicchio-Sovigliana,1664,52,107,IT,43.73016,10.93921 61037,Stabbia,1664,52,107,IT,43.78266,10.83475 61040,Staggia,1664,52,107,IT,43.42182,11.18364 61050,Stazione,1664,52,107,IT,43.9146,11.01414 61052,Stazione Masotti,1664,52,107,IT,43.90984,10.85386 61069,Stia,1664,52,107,IT,43.79877,11.70894 61070,Stiava,1664,52,107,IT,43.8972,10.31798 61083,Strada,1664,52,107,IT,43.74452,11.71007 61085,Strada in Chianti,1664,52,107,IT,43.65874,11.29678 61094,Strettoia,1664,52,107,IT,43.98987,10.19357 61108,Subbiano,1664,52,107,IT,43.57815,11.8714 61135,Suvereto,1664,52,107,IT,43.07669,10.6774 61155,Talla,1664,52,107,IT,43.60185,11.78714 61180,Tavarnelle Val di Pesa,1664,52,107,IT,43.56184,11.17152 61181,Tavarnuzze,1664,52,107,IT,43.71019,11.21721 61186,Taverne DArbia,1664,52,107,IT,43.2949,11.39483 61204,Tegoleto,1664,52,107,IT,43.39458,11.7853 61234,Terontola,1664,52,107,IT,43.21009,12.01113 61243,Terranuova Bracciolini,1664,52,107,IT,43.55081,11.58075 61244,Terrarossa,1664,52,107,IT,44.23362,9.9611 61251,Terricciola,1664,52,107,IT,43.52505,10.67961 61372,Torre del Lago Puccini,1664,52,107,IT,43.82887,10.28912 61385,Torrenieri,1664,52,107,IT,43.08566,11.54839 61410,Torrita di Siena,1664,52,107,IT,43.17245,11.78376 61472,Treggiaia,1664,52,107,IT,43.62305,10.67325 61490,Trequanda,1664,52,107,IT,43.18749,11.66818 61492,Tresana,1664,52,107,IT,44.25425,9.91288 61589,Uggia-Pazzera-Bizzarrino,1664,52,107,IT,43.83434,10.83154 61594,Uliveto Terme,1664,52,107,IT,43.69609,10.51728 61621,Uzzano,1664,52,107,IT,43.89728,10.70403 61623,Vacchereccia,1664,52,107,IT,43.56099,11.50131 61627,Vada,1664,52,107,IT,43.35264,10.45564 61633,Vaglia,1664,52,107,IT,43.9107,11.27997 61637,Vaiano,1664,52,107,IT,43.96792,11.12374 61646,Val di Cava,1664,52,107,IT,43.63832,10.64896 61658,Valdottavo,1664,52,107,IT,43.94187,10.48115 61666,Valenzatico,1664,52,107,IT,43.8668,10.96497 61787,Vecchiano-Nodica,1664,52,107,IT,43.78334,10.3844 61829,Venturina,1664,52,107,IT,43.02883,10.60147 61857,Vernio,1664,52,107,IT,44.04755,11.15052 61879,Vescovado,1664,52,107,IT,43.16953,11.39198 61905,Viareggio,1664,52,107,IT,43.86693,10.2502 61910,Vicarello,1664,52,107,IT,43.61238,10.46515 61913,Vicchio,1664,52,107,IT,43.93413,11.46004 61915,Viciomaggio,1664,52,107,IT,43.43218,11.77323 61925,Vicopisano,1664,52,107,IT,43.69305,10.58359 61957,Vignale Riotorto,1664,52,107,IT,42.97998,10.68471 61964,Vignole-Olmi,1664,52,107,IT,43.86696,10.99045 61986,Villa Basilica,1664,52,107,IT,43.92572,10.64518 61994,Villa Collemandina,1664,52,107,IT,44.15855,10.3976 62062,Villafranca in Lunigiana,1664,52,107,IT,44.29844,9.95347 62163,Vinci,1664,52,107,IT,43.78133,10.92365 62218,Volterra,1664,52,107,IT,43.40251,10.86152 62253,Zeri,1664,52,107,IT,44.35375,9.76318 135275,Acquasparta,1683,55,107,IT,42.68915,12.54275 135417,Allerona,1683,55,107,IT,42.81174,11.97451 135447,Alviano,1683,55,107,IT,42.59084,12.29775 135468,Amelia,1683,55,107,IT,42.55177,12.42076 135635,Arrone,1683,55,107,IT,42.58266,12.76714 135666,Assisi,1683,55,107,IT,43.06671,12.62109 135681,Attigliano,1683,55,107,IT,42.51505,12.29455 135710,Avigliano Umbro,1683,55,107,IT,42.65303,12.42571 135880,Baschi,1683,55,107,IT,42.67324,12.21762 135898,Bastardo,1683,55,107,IT,42.87144,12.55943 135901,Bastia umbra,1683,55,107,IT,43.06425,12.54612 136022,Bettona,1683,55,107,IT,43.01124,12.48698 136024,Bevagna,1683,55,107,IT,42.93748,12.61488 136368,Bruna,1683,55,107,IT,42.82071,12.68851 136559,Calvi dellUmbria,1683,55,107,IT,42.40421,12.56771 136612,Campello sul Clitunno,1683,55,107,IT,42.82685,12.76931 136719,Cannara,1683,55,107,IT,42.9954,12.58202 136772,Capitan Loreto,1683,55,107,IT,43.01731,12.6475 136951,Casa del Diavolo,1683,55,107,IT,43.18762,12.44923 137045,Cascia,1683,55,107,IT,42.7179,13.01697 137140,Castel Giorgio,1683,55,107,IT,42.70697,11.97717 137147,Castel Ritaldi,1683,55,107,IT,42.82247,12.6742 137159,Castel Viscardo,1683,55,107,IT,42.75359,12.00072 137319,Casteltodino,1683,55,107,IT,42.66667,12.5 137353,Castiglione del Lago,1683,55,107,IT,43.12457,12.03982 137520,Cerbara,1683,55,107,IT,43.49913,12.21113 137569,Cerreto di Spoleto,1683,55,107,IT,42.82188,12.92032 137683,Chiugiana-La Commenda,1683,55,107,IT,43.09823,12.30818 137713,Ciconia,1683,55,107,IT,42.73356,12.134 137744,Cipolleto,1683,55,107,IT,43.32393,12.57688 137764,Citerna,1683,55,107,IT,43.49882,12.11376 137773,Città della Pieve,1683,55,107,IT,42.95934,12.00696 137774,Città di Castello,1683,55,107,IT,43.46556,12.2375 137858,Collazzone,1683,55,107,IT,42.90147,12.43582 137888,Collepepe,1683,55,107,IT,42.91548,12.39486 137920,Colombella,1683,55,107,IT,43.15262,12.48239 137999,Corciano,1683,55,107,IT,43.12821,12.28684 138103,Costacciaro,1683,55,107,IT,43.35866,12.71262 138104,Costano,1683,55,107,IT,43.0442,12.5341 138252,Deruta,1683,55,107,IT,42.98465,12.4176 138397,Fabro,1683,55,107,IT,42.87267,12.0154 138398,Fabro Scalo,1683,55,107,IT,42.87605,12.04624 138479,Ferentillo,1683,55,107,IT,42.62027,12.78726 138506,Ficulle,1683,55,107,IT,42.83194,12.06801 138582,Foligno,1683,55,107,IT,42.95488,12.70268 138614,Fontignano,1683,55,107,IT,43.02436,12.1919 138658,Fornole,1683,55,107,IT,42.54218,12.45576 138677,Fossato di Vico,1683,55,107,IT,43.29644,12.76121 138721,Fratta Todina,1683,55,107,IT,42.85684,12.36366 138943,Giano dellUmbria,1683,55,107,IT,42.83384,12.57777 138976,Giove,1683,55,107,IT,42.50988,12.33015 139146,Gualdo Cattaneo,1683,55,107,IT,42.91228,12.55666 139147,Gualdo Tadino,1683,55,107,IT,43.22941,12.77862 139158,Guardea,1683,55,107,IT,42.6237,12.29928 139173,Gubbio,1683,55,107,IT,43.34996,12.57309 139317,Lacugnano,1683,55,107,IT,43.09475,12.3315 139539,Lisciano Niccone,1683,55,107,IT,43.24684,12.14305 139647,Lugnano in Teverina,1683,55,107,IT,42.57592,12.33336 139720,Magione,1683,55,107,IT,43.14179,12.21169 139809,Mantignana,1683,55,107,IT,43.15992,12.28855 139920,Marsciano,1683,55,107,IT,42.92093,12.35066 139974,Massa Martana,1683,55,107,IT,42.77312,12.52579 140028,Meggiano,1683,55,107,IT,42.75474,12.86379 140354,Monte Castello di Vibio,1683,55,107,IT,42.8404,12.3524 140359,Monte Grimano,1683,55,107,IT,43.46667,12.46667 140380,Monte Santa Maria Tiberina,1683,55,107,IT,43.43688,12.1622 140404,Montecastrilli,1683,55,107,IT,42.65087,12.48811 140409,Montecchio,1683,55,107,IT,42.66234,12.28803 140430,Montefalco,1683,55,107,IT,42.89084,12.64827 140447,Montefranco,1683,55,107,IT,42.59835,12.76376 140450,Montegabbione,1683,55,107,IT,42.91973,12.09212 140469,Monteleone dOrvieto,1683,55,107,IT,42.92171,12.05347 140472,Monteleone di Spoleto,1683,55,107,IT,42.65046,12.95158 140579,Montone,1683,55,107,IT,43.36078,12.32346 140719,Narni,1683,55,107,IT,42.51956,12.52758 140720,Narni Scalo,1683,55,107,IT,42.5362,12.5168 140786,Nocera Umbra,1683,55,107,IT,43.114,12.78925 140807,Norcia,1683,55,107,IT,42.79105,13.096 140993,Orvieto,1683,55,107,IT,42.71924,12.11249 140994,Orvieto Scalo,1683,55,107,IT,42.72088,12.13402 141001,Oscano,1683,55,107,IT,43.15863,12.33776 141021,Ospedalicchio,1683,55,107,IT,43.07812,12.50074 141039,Osteria del Gatto,1683,55,107,IT,43.28504,12.74504 141046,Otricoli,1683,55,107,IT,42.42079,12.47737 141072,Paciano,1683,55,107,IT,43.02288,12.06788 141089,Padule-San Marco,1683,55,107,IT,43.3288,12.60942 58227,Palazzo,1683,55,107,IT,43.09708,12.56436 58278,Panicale,1683,55,107,IT,43.0283,12.09993 58283,Pantalla,1683,55,107,IT,42.87287,12.39861 58314,Parrano,1683,55,107,IT,42.86624,12.11026 58325,Passaggio,1683,55,107,IT,43.02239,12.50781 58328,Passignano sul Trasimeno,1683,55,107,IT,43.19043,12.13535 58404,Penna in Teverina,1683,55,107,IT,42.49342,12.35845 58446,Perugia,1683,55,107,IT,43.1122,12.38878 58482,Petrignano,1683,55,107,IT,43.10269,12.53239 58595,Piegaro,1683,55,107,IT,42.96596,12.08409 58615,Pietralunga,1683,55,107,IT,43.43609,12.42921 58666,Pila,1683,55,107,IT,43.05329,12.32857 58715,Pistrino,1683,55,107,IT,43.50966,12.15181 58767,Poggiodomo,1683,55,107,IT,42.71237,12.93251 58792,Polino,1683,55,107,IT,42.58423,12.84437 58839,Ponte Felcino,1683,55,107,IT,43.13049,12.44914 58845,Ponte Pattoli,1683,55,107,IT,43.17807,12.42842 58877,Ponterio-Pian di Porto,1683,55,107,IT,42.80769,12.41024 58902,Porano,1683,55,107,IT,42.68099,12.10331 58990,Pozzuolo,1683,55,107,IT,43.12165,11.95599 59042,Preci,1683,55,107,IT,42.88069,13.03747 59158,Provincia di Perugia,1683,55,107,IT,43.05,12.55 59180,Provincia di Terni,1683,55,107,IT,42.68333,12.31667 59444,Rivotorto,1683,55,107,IT,43.04406,12.62069 59931,San Gemini,1683,55,107,IT,42.61378,12.54528 59940,San Giacomo,1683,55,107,IT,42.79387,12.75243 60015,San Giustino,1683,55,107,IT,43.5466,12.17528 60090,San Martino in Campo,1683,55,107,IT,43.03608,12.40265 60096,San Martino in Trignano,1683,55,107,IT,42.74125,12.66836 60133,San Niccolò di Celle,1683,55,107,IT,43.01667,12.38333 60239,San Secondo,1683,55,107,IT,43.40468,12.23389 60254,San Terenziano,1683,55,107,IT,42.86731,12.47319 60261,San Venanzo,1683,55,107,IT,42.86886,12.26853 60341,SantAnatolia di Narco,1683,55,107,IT,42.73319,12.83576 60471,Santa Maria degli Angeli,1683,55,107,IT,43.05691,12.57497 60641,Scheggia,1683,55,107,IT,43.40364,12.66584 60642,Scheggino,1683,55,107,IT,42.71304,12.83007 60696,Selci-Lama,1683,55,107,IT,43.51719,12.21293 60699,Sellano,1683,55,107,IT,42.88735,12.92311 60716,Semonte-Casamorcia,1683,55,107,IT,43.36826,12.53064 60828,Sferracavallo,1683,55,107,IT,42.72631,12.09569 60845,Sigillo,1683,55,107,IT,43.33111,12.74059 60995,Spello,1683,55,107,IT,42.99231,12.66632 61026,Spoleto,1683,55,107,IT,42.74071,12.73899 61055,Stazione di Allerona,1683,55,107,IT,42.7855,12.03726 61056,Stazione di Padule,1683,55,107,IT,43.30766,12.61557 61098,Stroncone,1683,55,107,IT,42.51196,12.6477 61187,Tavernelle,1683,55,107,IT,43.00333,12.1452 61232,Terni,1683,55,107,IT,42.56335,12.64329 61295,Todi,1683,55,107,IT,42.77881,12.41202 61327,Torgiano,1683,55,107,IT,43.02761,12.44015 61499,Trestina,1683,55,107,IT,43.36597,12.23701 61501,Trevi,1683,55,107,IT,42.87769,12.74938 61569,Tuoro sul Trasimeno,1683,55,107,IT,43.20654,12.07465 61597,Umbertide,1683,55,107,IT,43.30341,12.33749 61668,Valfabbrica,1683,55,107,IT,43.15784,12.60202 61742,Valtopina,1683,55,107,IT,43.05674,12.75307 61898,Via Lippia,1683,55,107,IT,43.08611,12.48106 135235,Abano Terme,1753,34,107,IT,45.35753,11.78725 135242,Abbazia Pisani,1753,34,107,IT,45.6127,11.85429 135290,Adria,1753,34,107,IT,45.05445,12.05599 135292,Affi,1753,34,107,IT,45.55297,10.7864 135307,Agna,1753,34,107,IT,45.17051,11.95625 135312,Agordo,1753,34,107,IT,46.28201,12.03608 135321,Agugliaro,1753,34,107,IT,45.3251,11.58496 135343,Alano di Piave,1753,34,107,IT,45.90681,11.9084 135355,Albaredo,1753,34,107,IT,45.66725,12.01095 135358,Albaredo dAdige,1753,34,107,IT,45.31859,11.27843 135368,Albettone,1753,34,107,IT,45.35811,11.5843 135376,Albignasego,1753,34,107,IT,45.34705,11.86781 135415,Alleghe,1753,34,107,IT,46.40718,12.02336 135424,Alonte,1753,34,107,IT,45.36589,11.4271 135427,Alpo,1753,34,107,IT,45.37687,10.91979 135436,Altavilla Vicentina,1753,34,107,IT,45.51329,11.46877 135441,Altissimo,1753,34,107,IT,45.61429,11.25189 135442,Altivole,1753,34,107,IT,45.7537,11.9562 135498,Angiari,1753,34,107,IT,45.22318,11.2768 135503,Anguillara Veneta,1753,34,107,IT,45.14249,11.88461 135506,Annone Veneto,1753,34,107,IT,45.78965,12.68646 135555,Arbizzano-Santa Maria,1753,34,107,IT,45.49489,10.93831 135559,Arcade,1753,34,107,IT,45.78428,12.21972 135572,Arcole,1753,34,107,IT,45.36125,11.2875 135575,Arcugnano-Torri,1753,34,107,IT,45.49579,11.5477 135598,Ariano,1753,34,107,IT,44.94604,12.12448 135605,Arino,1753,34,107,IT,45.43854,12.05443 135611,Arlesega,1753,34,107,IT,45.46126,11.71942 135632,Arquà Petrarca,1753,34,107,IT,45.26911,11.72045 135633,Arquà Polesine,1753,34,107,IT,45.01008,11.73981 135634,Arre,1753,34,107,IT,45.21748,11.92858 135639,Arsiè,1753,34,107,IT,45.98211,11.75794 135637,Arsiero,1753,34,107,IT,45.80422,11.35582 135651,Arzergrande,1753,34,107,IT,45.27278,12.0484 135652,Arzignano,1753,34,107,IT,45.52027,11.33446 135658,Asiago,1753,34,107,IT,45.87588,11.51223 135659,Asigliano Veneto,1753,34,107,IT,45.30469,11.4464 135662,Asolo,1753,34,107,IT,45.78854,11.91701 135663,Asparetto,1753,34,107,IT,45.21991,11.18263 135693,Auronzo,1753,34,107,IT,46.5592,12.42456 135735,Badia Calavena,1753,34,107,IT,45.56463,11.15197 135737,Badia Polesine,1753,34,107,IT,45.09508,11.49443 135741,Badoere,1753,34,107,IT,45.6342,12.08518 135765,Bagnoli di Sopra,1753,34,107,IT,45.18667,11.88433 135766,Bagnolo,1753,34,107,IT,45.27238,10.89081 135772,Bagnolo di Po,1753,34,107,IT,45.01548,11.50091 135791,Ballò,1753,34,107,IT,45.45581,12.07124 135807,Baone,1753,34,107,IT,45.24174,11.68463 135821,Barbarano Vicentino,1753,34,107,IT,45.40912,11.54342 135832,Barbisano,1753,34,107,IT,45.88224,12.18632 135833,Barbona,1753,34,107,IT,45.10339,11.70486 135842,Bardolino,1753,34,107,IT,45.54114,10.73298 135871,Baruchella,1753,34,107,IT,45.06601,11.45208 135893,Bassano del Grappa,1753,34,107,IT,45.76656,11.72739 135897,Bassone,1753,34,107,IT,45.4511,10.89449 135899,Bastia,1753,34,107,IT,45.38609,11.65196 135905,Battaglia Terme,1753,34,107,IT,45.28531,11.78375 135916,Beccacivetta-Azzano,1753,34,107,IT,45.37435,10.96133 135927,Belfiore,1753,34,107,IT,45.38189,11.21085 135949,Belluno,1753,34,107,IT,46.14262,12.2156 135961,Belvedere,1753,34,107,IT,45.69001,11.7718 135988,Bergantino,1753,34,107,IT,45.06145,11.25237 136002,Bertipaglia,1753,34,107,IT,45.31594,11.88547 136026,Bevilacqua,1753,34,107,IT,45.23249,11.39496 136027,Biancade,1753,34,107,IT,45.64867,12.35753 136037,Bibano,1753,34,107,IT,45.90751,12.43266 136042,Bibione,1753,34,107,IT,45.63565,13.03616 136050,Bigolino,1753,34,107,IT,45.86669,12.01693 136084,Boara Pisani,1753,34,107,IT,45.10809,11.78271 136100,Bojon-Lova,1753,34,107,IT,45.33981,12.08282 136117,Bolzano Vicentino,1753,34,107,IT,45.60221,11.62198 136127,Bonavicina,1753,34,107,IT,45.24426,11.18419 136128,Bonavigo,1753,34,107,IT,45.25831,11.27944 136137,Bonferraro,1753,34,107,IT,45.1838,11.01201 136146,Borca,1753,34,107,IT,46.43452,12.2223 136215,Borgoricco-San Michele delle Badesse-SantEufemia,1753,34,107,IT,45.5352,11.94111 136229,Borso del Grappa,1753,34,107,IT,45.81025,11.77367 136232,Bortolot,1753,34,107,IT,46.38608,12.17371 136237,Bosaro,1753,34,107,IT,44.99878,11.76471 136239,Boschi SantAnna,1753,34,107,IT,45.21768,11.3562 136240,Bosco,1753,34,107,IT,45.44337,11.7953 136241,Bosco Chiesanuova,1753,34,107,IT,45.62103,11.03224 136245,Boscochiaro,1753,34,107,IT,45.13658,12.12182 136263,Bottrighe,1753,34,107,IT,45.02552,12.08236 136274,Bovolenta,1753,34,107,IT,45.26892,11.93576 136275,Bovolone,1753,34,107,IT,45.26142,11.11786 136283,Braglia,1753,34,107,IT,44.98446,12.03377 136292,Breda,1753,34,107,IT,45.7225,12.33083 136294,Breganze,1753,34,107,IT,45.70489,11.56074 136303,Brendola,1753,34,107,IT,45.47849,11.43947 136309,Brentino Belluno,1753,34,107,IT,45.65689,10.89368 136311,Brenzone,1753,34,107,IT,45.69989,10.76058 136319,Bressanvido,1753,34,107,IT,45.64651,11.63437 136346,Brogliano,1753,34,107,IT,45.58919,11.36549 136348,Brognoligo-Costalunga,1753,34,107,IT,45.44869,11.29379 136363,Brugine,1753,34,107,IT,45.29696,11.992 136410,Burano,1753,34,107,IT,45.48548,12.41696 136427,Buso,1753,34,107,IT,45.06491,11.84772 136432,Bussolengo,1753,34,107,IT,45.46903,10.85371 136438,Buttapietra,1753,34,107,IT,45.3411,10.99915 136446,Ca degli Oppi,1753,34,107,IT,45.2955,11.13029 136442,Ca Rainati,1753,34,107,IT,45.75764,11.85113 136443,Ca Savio,1753,34,107,IT,45.45375,12.45729 136444,Ca Tiepolo,1753,34,107,IT,44.94861,12.33917 136460,Cadoneghe,1753,34,107,IT,45.44282,11.92749 136464,Caerano di San Marco,1753,34,107,IT,45.7816,11.99851 136487,Calalzo di Cadore,1753,34,107,IT,46.44643,12.38176 136516,Caldierino-Rota,1753,34,107,IT,45.41616,11.15696 136517,Caldiero,1753,34,107,IT,45.41439,11.17739 136519,Caldogno-Rettorgole-Cresole,1753,34,107,IT,45.6078,11.5028 136534,Calmasino,1753,34,107,IT,45.52099,10.75206 136542,Caltana,1753,34,107,IT,45.48278,12.03002 136546,Calto,1753,34,107,IT,44.99072,11.35854 136547,Caltrano,1753,34,107,IT,45.77346,11.4557 136554,Calvene,1753,34,107,IT,45.76615,11.51146 136569,Camalò,1753,34,107,IT,45.75324,12.17165 136593,Camisano Vicentino,1753,34,107,IT,45.52156,11.70817 136600,Campagna Lupia,1753,34,107,IT,45.35381,12.09727 136603,Campagnola,1753,34,107,IT,45.27866,11.99902 136606,Campalto,1753,34,107,IT,45.48062,12.28747 136614,Campese,1753,34,107,IT,45.8058,11.71289 136619,Campiglia dei Berici,1753,34,107,IT,45.33546,11.5421 136631,Campo San Martino,1753,34,107,IT,45.54868,11.82809 136644,Campodarsego,1753,34,107,IT,45.49815,11.92194 136649,Campodoro,1753,34,107,IT,45.48947,11.75268 136663,Campolongo Maggiore Liettoli,1753,34,107,IT,45.33944,12.02417 136666,Campolongo sul Brenta,1753,34,107,IT,45.8271,11.7008 136671,Camponogara,1753,34,107,IT,45.37954,12.08638 136679,Camposampiero,1753,34,107,IT,45.56368,11.93534 136689,Canale dAgordo,1753,34,107,IT,46.35693,11.91429 136691,Canaro,1753,34,107,IT,44.93394,11.67541 136696,Canda,1753,34,107,IT,45.03608,11.50331 136699,Candelù,1753,34,107,IT,45.73499,12.37224 136702,Candiana,1753,34,107,IT,45.22184,11.99256 136704,Candide,1753,34,107,IT,46.58913,12.51476 136713,Caniezza,1753,34,107,IT,45.85274,11.899 136735,Canove di Roana,1753,34,107,IT,45.8635,11.4735 136754,Caorle,1753,34,107,IT,45.59656,12.8758 136773,Capitello,1753,34,107,IT,45.20792,11.14014 136792,Cappella Maggiore,1753,34,107,IT,45.97222,12.35855 136822,Caprino Veronese,1753,34,107,IT,45.60489,10.79518 136851,Carbonera,1753,34,107,IT,45.69182,12.28255 136854,Carceri,1753,34,107,IT,45.19508,11.62115 136893,Carmignano di Brenta,1753,34,107,IT,45.62578,11.70599 136912,Carpesica,1753,34,107,IT,45.95335,12.29126 136925,Carrara San Giorgio,1753,34,107,IT,45.29259,11.81841 136934,Carrè,1753,34,107,IT,45.7488,11.45779 136938,Cartigliano,1753,34,107,IT,45.713,11.6956 136942,Cartura,1753,34,107,IT,45.26839,11.85681 136955,Casacorba,1753,34,107,IT,45.65944,12.03889 136979,Casale di Scodosia,1753,34,107,IT,45.19225,11.47442 136980,Casale sul Sile,1753,34,107,IT,45.59638,12.32655 136984,Casaleone,1753,34,107,IT,45.16821,11.19401 137008,Casalserugo,1753,34,107,IT,45.31549,11.91232 137059,Caselle,1753,34,107,IT,45.74965,11.98004 137068,Casier,1753,34,107,IT,45.64229,12.29328 137085,Casoni,1753,34,107,IT,45.75943,11.81045 137114,Cassola,1753,34,107,IT,45.7336,11.7994 137116,Castagnaro,1753,34,107,IT,45.11795,11.40911 137120,Castagnole,1753,34,107,IT,45.68852,12.1826 137176,Castelbaldo,1753,34,107,IT,45.12226,11.45517 137187,Castelcucco,1753,34,107,IT,45.83024,11.88296 137198,Castelfranco Veneto,1753,34,107,IT,45.67146,11.92755 137202,Castelgomberto,1753,34,107,IT,45.58267,11.39007 137204,Castelguglielmo,1753,34,107,IT,45.02539,11.5369 137262,Castello di Godego,1753,34,107,IT,45.6927,11.87998 137270,Castelmassa,1753,34,107,IT,45.01826,11.31505 137274,Castelminio,1753,34,107,IT,45.64493,11.98734 137277,Castelnovo,1753,34,107,IT,45.61557,11.45938 137278,Castelnovo Bariano,1753,34,107,IT,45.02738,11.2876 137297,Castelnuovo del Garda,1753,34,107,IT,45.43878,10.75978 137362,Castion,1753,34,107,IT,46.12147,12.23507 137411,Cavajon Veronese,1753,34,107,IT,45.54009,10.77048 137412,Cavalcaselle,1753,34,107,IT,45.43695,10.72652 137419,Cavallino,1753,34,107,IT,45.47456,12.54855 137424,Cavarzere,1753,34,107,IT,45.13518,12.08453 137425,Cavaso del Tomba,1753,34,107,IT,45.86071,11.8984 137437,Cavino,1753,34,107,IT,45.51709,11.88466 137447,Cazzago-Ex Polo,1753,34,107,IT,45.44159,12.07406 137449,Cazzano di Tramigna,1753,34,107,IT,45.47309,11.20289 137460,Ceggia,1753,34,107,IT,45.687,12.64228 137463,Celat-San Tomaso Agordino,1753,34,107,IT,46.38072,11.97439 137483,Cellore,1753,34,107,IT,45.48646,11.17831 137489,Cencenighe Agordino,1753,34,107,IT,46.35184,11.96823 137490,Cendon,1753,34,107,IT,45.63804,12.32505 137492,Ceneselli,1753,34,107,IT,45.01377,11.36936 137501,Centrale,1753,34,107,IT,45.72737,11.48031 137530,Cerea,1753,34,107,IT,45.18936,11.21661 137531,Cereda-Cozza Cornedo,1753,34,107,IT,45.60181,11.3674 137532,Ceregnano,1753,34,107,IT,45.04811,11.86792 137574,Cerro Veronese,1753,34,107,IT,45.57449,11.04159 137583,Cervarese Santa Croce,1753,34,107,IT,45.42439,11.6879 137608,Cesarolo,1753,34,107,IT,45.71884,13.01555 137615,Cesiomaggiore,1753,34,107,IT,46.08675,11.98539 137616,Cessalto,1753,34,107,IT,45.71356,12.61302 137641,Chiampo,1753,34,107,IT,45.54746,11.28285 137650,Chiarano,1753,34,107,IT,45.72959,12.57166 137677,Chioggia,1753,34,107,IT,45.21857,12.27774 137684,Chiuppano,1753,34,107,IT,45.763,11.45777 137703,Ciano,1753,34,107,IT,45.82389,12.05417 137706,Cibiana,1753,34,107,IT,46.38856,12.28658 137720,Cimadolmo,1753,34,107,IT,45.78524,12.3651 137740,Cinto Caomaggiore,1753,34,107,IT,45.82758,12.78126 137758,Cismon del Grappa,1753,34,107,IT,45.92026,11.72816 137759,Cison di Valmarino,1753,34,107,IT,45.96694,12.14267 137765,Cittadella,1753,34,107,IT,45.64523,11.78453 137829,Codevigo,1753,34,107,IT,45.26628,12.09961 137833,Codiverno,1753,34,107,IT,45.47583,11.94556 137836,Codognè,1753,34,107,IT,45.86047,12.41284 137843,Cogollo del Cengio,1753,34,107,IT,45.78397,11.42527 137846,Col San Martino,1753,34,107,IT,45.9002,12.11575 137932,Colà,1753,34,107,IT,45.47428,10.74257 137865,Colle Santa Lucia,1753,34,107,IT,46.44852,12.01399 137867,Colle Umberto,1753,34,107,IT,45.94238,12.34228 137912,Cologna Veneta,1753,34,107,IT,45.30777,11.38032 137917,Colognola ai Colli,1753,34,107,IT,45.43369,11.18429 137958,Conco,1753,34,107,IT,45.80043,11.60962 137959,Concordia Sagittaria,1753,34,107,IT,45.76118,12.82362 137966,Conegliano,1753,34,107,IT,45.88805,12.30201 137973,Conscio,1753,34,107,IT,45.61701,12.28219 137975,Conselve,1753,34,107,IT,45.23154,11.87498 137992,Corbanese,1753,34,107,IT,45.9457,12.24027 137995,Corbola,1753,34,107,IT,45.00272,12.08567 137996,Corbolone,1753,34,107,IT,45.74962,12.66969 138002,Cordignano,1753,34,107,IT,45.94936,12.41567 138029,Cornedo Vicentino,1753,34,107,IT,45.61626,11.33225 138036,Cornuda,1753,34,107,IT,45.83152,12.00598 138041,Correzzola,1753,34,107,IT,45.23548,12.06739 138045,Corrubbio,1753,34,107,IT,45.48685,10.90359 138055,Corte,1753,34,107,IT,45.30835,12.07174 138067,Cortina dAmpezzo,1753,34,107,IT,46.5369,12.13903 138081,Cosniga-Zoppè,1753,34,107,IT,45.8875,12.36028 138099,Costa di Rovigo,1753,34,107,IT,45.05181,11.6956 138102,Costabissara,1753,34,107,IT,45.58252,11.48529 138108,Costermano,1753,34,107,IT,45.58606,10.739 138118,Covolo-Levada,1753,34,107,IT,45.84828,12.00515 138128,Creazzo,1753,34,107,IT,45.53154,11.47789 138140,Crepaldo,1753,34,107,IT,45.59495,12.69655 138142,Crespadoro,1753,34,107,IT,45.62019,11.22589 138143,Crespano del Grappa,1753,34,107,IT,45.82793,11.83358 138147,Crespino,1753,34,107,IT,44.98527,11.88958 138156,Crispi Cavour,1753,34,107,IT,45.5819,11.50113 138160,Crocetta del Montello,1753,34,107,IT,45.83667,12.03361 138161,Crocetta-Nogarè,1753,34,107,IT,45.82707,12.03013 138208,Curtarolo,1753,34,107,IT,45.52366,11.83691 138227,Danta,1753,34,107,IT,46.567,12.52055 138255,Dese,1753,34,107,IT,45.52962,12.30363 138281,Dolcè,1753,34,107,IT,45.60069,10.85248 138285,Dolo,1753,34,107,IT,45.42528,12.08429 138289,Domegge di Cadore,1753,34,107,IT,46.45666,12.40724 138296,Don,1753,34,107,IT,46.22144,11.95598 138305,Donzella,1753,34,107,IT,44.93047,12.33119 138319,Dossobuono,1753,34,107,IT,45.39333,10.91054 138320,Dosson,1753,34,107,IT,45.63605,12.25409 138338,Due Carrare,1753,34,107,IT,45.29151,11.82402 138339,Dueville,1753,34,107,IT,45.63556,11.55135 138358,Enego,1753,34,107,IT,45.94161,11.7055 138366,Eraclea,1753,34,107,IT,45.57766,12.6732 138370,Erbè,1753,34,107,IT,45.24231,10.97135 138368,Erbezzo,1753,34,107,IT,45.6396,11.00057 138386,Este,1753,34,107,IT,45.22338,11.66379 138413,Falcade Alto,1753,34,107,IT,46.35549,11.85712 138427,Falzè di Piave,1753,34,107,IT,45.86796,12.17891 138428,Falzè-Signoressa,1753,34,107,IT,45.75028,12.10722 138431,Fane,1753,34,107,IT,45.57904,10.96425 138436,Fanzolo,1753,34,107,IT,45.71218,11.99023 138442,Fara Vicentino,1753,34,107,IT,45.74369,11.54529 138451,Farra dAlpago,1753,34,107,IT,46.12079,12.35876 138453,Farra di Soligo,1753,34,107,IT,45.90528,12.12444 138475,Feltre,1753,34,107,IT,46.02085,11.90031 138490,Ferrara di Monte Baldo,1753,34,107,IT,45.67408,10.85911 138504,Ficarolo,1753,34,107,IT,44.95425,11.43662 138513,Fiesso,1753,34,107,IT,45.41954,12.03378 138515,Fiesso dArtico,1753,34,107,IT,45.42139,12.02944 138514,Fiesso Umbertiano,1753,34,107,IT,44.96072,11.60576 138583,Follina,1753,34,107,IT,45.95352,12.11985 138594,Fontanafredda,1753,34,107,IT,45.29159,11.66172 138601,Fontanelle,1753,34,107,IT,45.83345,12.46625 138606,Fontaniva,1753,34,107,IT,45.63516,11.75381 138615,Fonzaso,1753,34,107,IT,46.0164,11.79897 138627,Forette,1753,34,107,IT,45.34221,10.9446 138647,Fornaci,1753,34,107,IT,45.6517,12.43738 138651,Fornase,1753,34,107,IT,45.47586,12.16273 138657,Forno di Zoldo,1753,34,107,IT,46.3501,12.17913 138670,Fossalta di Piave,1753,34,107,IT,45.64497,12.50902 138671,Fossalta di Portogruaro,1753,34,107,IT,45.79329,12.90998 138673,Fossalunga,1753,34,107,IT,45.6916,12.0532 138682,Fossò,1753,34,107,IT,45.3858,12.04627 138683,Foza,1753,34,107,IT,45.89703,11.63053 138700,Francenigo,1753,34,107,IT,45.90799,12.50347 138711,Frassinelle Polesine,1753,34,107,IT,44.99518,11.69881 138719,Fratta Polesine,1753,34,107,IT,45.02819,11.64265 138729,Fregona,1753,34,107,IT,46.00795,12.33864 138731,Frescada,1753,34,107,IT,45.62878,12.23671 138749,Fumane,1753,34,107,IT,45.5416,10.88548 138763,Fusine,1753,34,107,IT,46.37589,12.12547 138787,Gaiarine,1753,34,107,IT,45.88083,12.48142 138788,Gaiba,1753,34,107,IT,44.94573,11.48087 138810,Galliera Veneta,1753,34,107,IT,45.6675,11.82217 138812,Gallio,1753,34,107,IT,45.88506,11.53417 138821,Galta,1753,34,107,IT,45.39095,12.0234 138824,Galzignano,1753,34,107,IT,45.30798,11.73134 138831,Gambellara,1753,34,107,IT,45.45979,11.34009 138835,Gambugliano,1753,34,107,IT,45.58799,11.43859 138849,Garda,1753,34,107,IT,45.57889,10.71763 138874,Gavello,1753,34,107,IT,45.02469,11.91368 138884,Gazzo,1753,34,107,IT,45.58241,11.70724 138887,Gazzolo-Volpino,1753,34,107,IT,45.37536,11.31319 138938,Giacciano con Baruchella,1753,34,107,IT,45.06718,11.4504 138951,Giavenale,1753,34,107,IT,45.70006,11.40002 138953,Giavera del Montello,1753,34,107,IT,45.79374,12.16667 138986,Giudecca,1753,34,107,IT,45.42477,12.32906 139007,Godega,1753,34,107,IT,45.92859,12.39687 139027,Gorgo al Monticano,1753,34,107,IT,45.79139,12.55 139028,Gorgo della Chiesa,1753,34,107,IT,45.78747,12.5627 139043,Gosaldo,1753,34,107,IT,46.22142,11.9557 139062,Grancona,1753,34,107,IT,45.42189,11.4516 139069,Grantorto,1753,34,107,IT,45.60268,11.73175 139071,Granze,1753,34,107,IT,45.15649,11.71471 139094,Grezzana,1753,34,107,IT,45.52272,11.01743 139098,Grignano Polesine,1753,34,107,IT,45.0435,11.74682 139103,Grisignano di Zocco,1753,34,107,IT,45.48681,11.70794 139132,Gruaro,1753,34,107,IT,45.83472,12.84111 139133,Gruaro-Bagnara,1753,34,107,IT,45.84167,12.85111 139142,Grumolo delle Abbadesse,1753,34,107,IT,45.51692,11.67198 139141,Grumolo Pedemonte,1753,34,107,IT,45.7243,11.49236 139153,Guarda Veneta,1753,34,107,IT,44.98188,11.80178 139190,Iesolo,1753,34,107,IT,45.53311,12.64475 139195,Illasi,1753,34,107,IT,45.46663,11.18165 139248,Isola della Scala,1753,34,107,IT,45.26943,11.00824 139239,Isola Rizza,1753,34,107,IT,45.29228,11.199 139241,Isola Vicentina,1753,34,107,IT,45.6293,11.44608 139266,Istrana,1753,34,107,IT,45.67691,12.10119 139304,La Salute di Livenza,1753,34,107,IT,45.65366,12.80131 139308,La Valle Agordina,1753,34,107,IT,46.28198,12.06844 139323,Laghi,1753,34,107,IT,45.8245,11.27249 139340,Lama Pezzoli,1753,34,107,IT,45.04357,11.90942 139347,Lamon,1753,34,107,IT,46.04717,11.74991 139348,Lamosano,1753,34,107,IT,46.17276,12.38691 139353,Lancenigo-Villorba,1753,34,107,IT,45.71289,12.25697 139384,Lastebasse,1753,34,107,IT,45.9151,11.27389 139409,Lavagno,1753,34,107,IT,45.43869,11.13409 139420,Lazise,1753,34,107,IT,45.50499,10.73923 139435,Legnago,1753,34,107,IT,45.19365,11.30227 139437,Legnaro,1753,34,107,IT,45.34238,11.96482 139443,Lendinara,1753,34,107,IT,45.08301,11.60318 139452,Lentiai,1753,34,107,IT,46.04504,12.02053 139482,Levada,1753,34,107,IT,45.73442,12.47128 139500,Lido,1753,34,107,IT,45.4105,12.36649 139506,Lido di Jesolo,1753,34,107,IT,45.50694,12.64694 139515,Limana,1753,34,107,IT,46.10039,12.18552 139519,Limena,1753,34,107,IT,45.46948,11.84574 139540,Lisiera,1753,34,107,IT,45.57848,11.61178 139548,Livinallongo del Col di Lana,1753,34,107,IT,46.48162,11.95399 139560,Locara,1753,34,107,IT,45.41207,11.33262 139590,Longare,1753,34,107,IT,45.47726,11.60696 139591,Longarone,1753,34,107,IT,46.26579,12.29992 139594,Longhi,1753,34,107,IT,45.90744,11.31132 139601,Lonigo,1753,34,107,IT,45.38576,11.38402 139603,Loreggia,1753,34,107,IT,45.59733,11.94769 139604,Loreggiola,1753,34,107,IT,45.60892,11.91899 139606,Lorenzago di Cadore,1753,34,107,IT,46.47954,12.45984 139608,Loreo,1753,34,107,IT,45.06213,12.18812 139612,Loria Bessica,1753,34,107,IT,45.73,11.8654 139623,Lozzo Atestino,1753,34,107,IT,45.29384,11.60495 139624,Lozzo di Cadore,1753,34,107,IT,46.48644,12.44493 139643,Lugagnano,1753,34,107,IT,45.43327,10.88402 139645,Lughignano,1753,34,107,IT,45.62533,12.32478 139649,Lugo di Vicenza,1753,34,107,IT,45.7455,11.52869 139650,Lugugnana,1753,34,107,IT,45.73277,12.95958 139656,Lumignano,1753,34,107,IT,45.45968,11.58786 139675,Lusia,1753,34,107,IT,45.09848,11.66511 139676,Lusiana,1753,34,107,IT,45.78428,11.57478 139680,Lutrano,1753,34,107,IT,45.81415,12.47316 139686,Maccacari,1753,34,107,IT,45.14276,11.13499 139714,Maerne,1753,34,107,IT,45.52313,12.15477 139744,Magugnano,1753,34,107,IT,45.70084,10.76229 139758,Malcesine,1753,34,107,IT,45.7614,10.80863 139772,Malo,1753,34,107,IT,45.6591,11.41601 139789,Mandriola-SantAgostino,1753,34,107,IT,45.36926,11.85101 139804,Mansuè,1753,34,107,IT,45.82118,12.5351 139820,Marano,1753,34,107,IT,45.46345,12.11715 139828,Marano di Valpolicella,1753,34,107,IT,45.55637,10.91622 139826,Marano Vicentino,1753,34,107,IT,45.696,11.43237 139843,Marchesino-Bovo,1753,34,107,IT,45.36667,11.0 139854,Marcon-Gaggio-Colmello,1753,34,107,IT,45.56444,12.29889 139856,Mardimago,1753,34,107,IT,45.10703,11.83744 139858,Mareno di Piave,1753,34,107,IT,45.84572,12.33703 139910,Marola,1753,34,107,IT,45.53994,11.62593 139913,Marostica,1753,34,107,IT,45.74541,11.66237 139927,Martellago,1753,34,107,IT,45.54383,12.16363 139956,Maser,1753,34,107,IT,45.8074,11.975 139959,Maserà di Padova,1753,34,107,IT,45.31827,11.86543 139958,Maserada sul Piave,1753,34,107,IT,45.75195,12.31773 139960,Masi,1753,34,107,IT,45.10888,11.48921 139964,Mason Vicentino,1753,34,107,IT,45.7186,11.6068 139979,Massanzago-Ca Baglioni-San Dono,1753,34,107,IT,45.5563,12.00731 140026,Meduna di Livenza,1753,34,107,IT,45.8172,12.62828 140029,Megliadino San Fidenzio,1753,34,107,IT,45.21739,11.516 140030,Megliadino San Vitale,1753,34,107,IT,45.19577,11.52402 140033,Mejaniga,1753,34,107,IT,45.45768,11.90644 140034,Mel,1753,34,107,IT,46.06379,12.09 140035,Melara,1753,34,107,IT,45.06421,11.20117 140039,Meledo,1753,34,107,IT,45.43821,11.4156 140066,Meolo,1753,34,107,IT,45.6197,12.45236 140086,Merlara,1753,34,107,IT,45.167,11.44504 140099,Mestre,1753,34,107,IT,45.49167,12.24538 140100,Mestrino,1753,34,107,IT,45.44139,11.75931 140109,Mezzane di Sotto,1753,34,107,IT,45.48199,11.12729 140126,Miane,1753,34,107,IT,45.94341,12.09246 140139,Mignagola,1753,34,107,IT,45.68868,12.32154 140157,Minerbe,1753,34,107,IT,45.23198,11.35249 140166,Mira Taglio,1753,34,107,IT,45.4346,12.12942 140175,Mirano,1753,34,107,IT,45.49458,12.10775 140199,Mogliano Veneto,1753,34,107,IT,45.55594,12.24294 140225,Molino-Mozzi-Bittarelli,1753,34,107,IT,45.61254,11.235 140260,Monastier di Treviso,1753,34,107,IT,45.65778,12.4175 140282,Monfumo,1753,34,107,IT,45.8308,11.9203 140292,Moniego,1753,34,107,IT,45.56126,12.08705 140301,Monselice,1753,34,107,IT,45.239,11.74984 140310,Montagnana,1753,34,107,IT,45.23229,11.46483 140384,Monte di Malo,1753,34,107,IT,45.66011,11.36127 140388,Montebello Vicentino,1753,34,107,IT,45.45919,11.38272 140391,Montebelluna,1753,34,107,IT,45.77504,12.04904 140408,Montecchia di Crosara,1753,34,107,IT,45.4819,11.25438 140411,Montecchio Maggiore-Alte Ceccato,1753,34,107,IT,45.50369,11.412 140412,Montecchio Precalcino,1753,34,107,IT,45.6657,11.5636 140445,Monteforte dAlpone,1753,34,107,IT,45.42013,11.28446 140451,Montegalda,1753,34,107,IT,45.44609,11.675 140452,Montegaldella,1753,34,107,IT,45.43717,11.67022 140461,Montegrotto Terme,1753,34,107,IT,45.33119,11.78634 140490,Montemerlo,1753,34,107,IT,45.38033,11.70815 140551,Monteviale,1753,34,107,IT,45.5592,11.45715 140563,Monticelli-Fontana,1753,34,107,IT,45.42965,11.13729 140566,Monticello Conte Otto,1753,34,107,IT,45.59784,11.57234 140568,Monticello di Fara,1753,34,107,IT,45.42896,11.39042 140583,Montorio,1753,34,107,IT,45.45826,11.06589 140588,Montorso Vicentino,1753,34,107,IT,45.49089,11.36019 140616,Moriago della Battaglia,1753,34,107,IT,45.86589,12.10077 140648,Mosnigo,1753,34,107,IT,45.86303,12.07852 140652,Mossano,1753,34,107,IT,45.41951,11.55382 140655,Motta,1753,34,107,IT,45.5954,11.49798 140665,Motta di Livenza,1753,34,107,IT,45.77552,12.60411 140674,Mozzecane,1753,34,107,IT,45.30763,10.81554 140685,Murano,1753,34,107,IT,45.45857,12.35683 140688,Mure,1753,34,107,IT,45.73419,11.61065 140696,Musano,1753,34,107,IT,45.72646,12.11785 140700,Musestre,1753,34,107,IT,45.58864,12.37249 140701,Musile di Piave,1753,34,107,IT,45.62057,12.54177 140703,Mussolente,1753,34,107,IT,45.7792,11.8062 140735,Negrar,1753,34,107,IT,45.52918,10.93899 140748,Nervesa della Battaglia,1753,34,107,IT,45.81232,12.19837 140776,Noale,1753,34,107,IT,45.54596,12.06445 140791,Nogara,1753,34,107,IT,45.18109,11.06008 140793,Nogarole Rocca,1753,34,107,IT,45.29027,10.88342 140794,Nogarole Vicentino,1753,34,107,IT,45.56019,11.28829 140826,Nove,1753,34,107,IT,45.72159,11.67833 140831,Noventa,1753,34,107,IT,45.41429,11.95101 140833,Noventa di Piave,1753,34,107,IT,45.65981,12.53322 140832,Noventa Vicentina,1753,34,107,IT,45.29438,11.54843 140839,Novoledo,1753,34,107,IT,45.64647,11.50952 140868,Occhiobello,1753,34,107,IT,44.9224,11.58139 140872,Oderzo,1753,34,107,IT,45.78114,12.49442 140912,Oltre Brenta,1753,34,107,IT,45.41207,11.99803 140930,Onè,1753,34,107,IT,45.78374,11.87404 140926,Onigo,1753,34,107,IT,45.85701,11.99073 140933,Oppeano,1753,34,107,IT,45.30331,11.18005 140949,Orgiano,1753,34,107,IT,45.33366,11.45953 140962,Ormelle,1753,34,107,IT,45.7778,12.42429 140970,Orsago,1753,34,107,IT,45.92965,12.42712 141016,Ospedaletto,1753,34,107,IT,45.66194,12.07884 141018,Ospedaletto Euganeo,1753,34,107,IT,45.21842,11.60345 141022,Ospitale di Cadore,1753,34,107,IT,46.32808,12.32263 141076,Padernello,1753,34,107,IT,45.68152,12.12685 141077,Paderno,1753,34,107,IT,45.82791,11.85605 141082,Paderno del Grappa,1753,34,107,IT,45.8286,11.8577 141085,Padova,1753,34,107,IT,45.40797,11.88586 141093,Paese,1753,34,107,IT,45.67417,12.16389 58270,Palù,1753,34,107,IT,45.32473,11.15635 58292,Papozze,1753,34,107,IT,44.98578,12.03092 58312,Parona,1753,34,107,IT,45.47882,10.94414 58326,Passarella,1753,34,107,IT,45.59436,12.60537 58340,Pastrengo,1753,34,107,IT,45.49588,10.79897 58377,Pedavena,1753,34,107,IT,46.03951,11.8831 58378,Pedemonte,1753,34,107,IT,45.9084,11.30859 58380,Pederiva,1753,34,107,IT,45.42254,11.46568 58381,Pederobba,1753,34,107,IT,45.87567,11.94977 58388,Pegolotte,1753,34,107,IT,45.19178,12.03791 58394,Pellestrina,1753,34,107,IT,45.27716,12.30238 58412,Perarolo di Cadore,1753,34,107,IT,46.39383,12.35636 58433,Pernumia,1753,34,107,IT,45.25899,11.78721 58434,Pero,1753,34,107,IT,45.70635,12.34867 58449,Pescantina,1753,34,107,IT,45.48548,10.86796 58456,Peschiera del Garda,1753,34,107,IT,45.43912,10.68614 58468,Peseggia-Gardigiano,1753,34,107,IT,45.56167,12.17944 58494,Pettorazza Grimani,1753,34,107,IT,45.13585,11.98779 58496,Pezzan,1753,34,107,IT,45.69341,12.09616 58503,Piacenza dAdige,1753,34,107,IT,45.12749,11.54333 58530,Pianezze,1753,34,107,IT,45.74141,11.627 58535,Pianiga,1753,34,107,IT,45.45708,12.00762 58560,Piavon,1753,34,107,IT,45.76429,12.52673 58562,Piazza,1753,34,107,IT,45.21585,11.14244 58575,Piazzola sul Brenta,1753,34,107,IT,45.53845,11.78437 58583,Pie Falcade,1753,34,107,IT,46.3566,11.87207 58631,Pieve,1753,34,107,IT,45.53924,11.8293 58645,Pieve dAlpago,1753,34,107,IT,46.16658,12.35344 58649,Pieve di Cadore,1753,34,107,IT,46.42466,12.36416 58653,Pieve di Soligo,1753,34,107,IT,45.89836,12.17128 58674,Pincara,1753,34,107,IT,45.00064,11.62101 58690,Piombino Dese,1753,34,107,IT,45.60964,11.99416 58691,Pionca,1753,34,107,IT,45.46591,11.96232 58695,Piove di Sacco-Piovega,1753,34,107,IT,45.29665,12.03683 58696,Piovene Rocchette,1753,34,107,IT,45.75601,11.43273 58778,Poiana Maggiore,1753,34,107,IT,45.29039,11.5025 58779,Poianella,1753,34,107,IT,45.63041,11.62853 58780,Poiano,1753,34,107,IT,45.47029,11.01875 58784,Polesella,1753,34,107,IT,44.96457,11.74887 58805,Polverara,1753,34,107,IT,45.30945,11.95474 58826,Ponso,1753,34,107,IT,45.18232,11.57933 58854,Ponte di Barbarano,1753,34,107,IT,45.39206,11.57847 58855,Ponte di Castegnero,1753,34,107,IT,45.43672,11.60069 58857,Ponte di Nanto,1753,34,107,IT,45.42427,11.594 58858,Ponte di Piave,1753,34,107,IT,45.71904,12.46186 58860,Ponte nelle Alpi,1753,34,107,IT,46.18083,12.28333 58861,Ponte nelle Alpi-Polpet,1753,34,107,IT,46.18833,12.27833 58848,Ponte San Nicolò,1753,34,107,IT,45.36718,11.92341 58864,Pontecchio Polesine,1753,34,107,IT,45.0202,11.81321 58874,Pontelongo,1753,34,107,IT,45.2459,12.02582 58895,Ponzano,1753,34,107,IT,45.71541,12.20444 58904,Porcellengo,1753,34,107,IT,45.70613,12.14225 58937,Porto Tolle,1753,34,107,IT,44.94969,12.32453 58940,Porto Viro,1753,34,107,IT,45.02678,12.21754 58942,Portobuffolè,1753,34,107,IT,45.85665,12.53761 58946,Portogruaro,1753,34,107,IT,45.78071,12.84052 58955,Posina,1753,34,107,IT,45.79106,11.26244 58957,Possagno,1753,34,107,IT,45.84795,11.88467 58963,Postioma,1753,34,107,IT,45.71753,12.15218 58967,Pove del Grappa,1753,34,107,IT,45.7982,11.7299 58968,Povegliano,1753,34,107,IT,45.75947,12.20944 58969,Povegliano Veronese,1753,34,107,IT,45.3473,10.88056 58985,Pozzoleone,1753,34,107,IT,45.64965,11.67098 58988,Pozzonovo,1753,34,107,IT,45.19629,11.79171 58995,Pradelle,1753,34,107,IT,45.28315,10.87083 59004,Pramaggiore,1753,34,107,IT,45.815,12.73889 59005,Pramaggiore Blessaglia,1753,34,107,IT,45.80528,12.725 59040,Preara-Moraro-Levà Nord,1753,34,107,IT,45.67996,11.54286 59048,Preganziol,1753,34,107,IT,45.60139,12.23722 59068,Pressana,1753,34,107,IT,45.28258,11.40724 59082,Priula-Colfosco,1753,34,107,IT,45.81998,12.25847 59113,Provincia di Belluno,1753,34,107,IT,46.25,12.13333 59155,Provincia di Padova,1753,34,107,IT,45.35,11.81667 59171,Provincia di Rovigo,1753,34,107,IT,45.03333,11.83333 59181,Provincia di Treviso,1753,34,107,IT,45.83333,12.21667 59185,Provincia di Venezia,1753,34,107,IT,45.44045,12.32632 59187,Provincia di Verona,1753,34,107,IT,45.41667,11.03333 59189,Provincia di Vicenza,1753,34,107,IT,45.66667,11.45 59206,Puos dAlpago,1753,34,107,IT,46.14154,12.36176 59210,Quaderni,1753,34,107,IT,45.32915,10.78951 59230,Quarto dAltino,1753,34,107,IT,45.57944,12.37333 59241,Quero,1753,34,107,IT,45.92094,11.93151 59250,Quinto di Treviso,1753,34,107,IT,45.64351,12.16509 59249,Quinto Vicentino,1753,34,107,IT,45.57534,11.62815 59271,Raldon,1753,34,107,IT,45.34921,11.03786 59275,Ramon,1753,34,107,IT,45.71386,11.86828 59313,Recoaro Terme,1753,34,107,IT,45.70373,11.22216 59317,Refrontolo,1753,34,107,IT,45.92305,12.20865 59334,Resana,1753,34,107,IT,45.63535,11.95472 59344,Revine,1753,34,107,IT,45.99935,12.25561 59372,Riese Pio X,1753,34,107,IT,45.72858,11.91801 59422,Rivalta,1753,34,107,IT,45.65714,10.89336 59425,Rivamonte Agordino,1753,34,107,IT,46.25226,12.02303 59442,Rivoli Veronese,1753,34,107,IT,45.57249,10.81178 59447,Roana,1753,34,107,IT,45.87696,11.45274 59461,Robegano,1753,34,107,IT,45.54253,12.11924 59474,Rocca Pietore,1753,34,107,IT,46.43392,11.97679 59578,Romano dEzzelino,1753,34,107,IT,45.77902,11.76657 59613,Roncà,1753,34,107,IT,45.47987,11.29323 59589,Roncade,1753,34,107,IT,45.62165,12.37643 59591,Roncanova,1753,34,107,IT,45.14318,11.10349 59597,Ronchi di Campanile,1753,34,107,IT,45.4579,11.77483 59601,Ronco AllAdige,1753,34,107,IT,45.33647,11.23658 59653,Rosà,1753,34,107,IT,45.70198,11.76141 59633,Rosegaferro,1753,34,107,IT,45.34361,10.80854 59642,Rosolina,1753,34,107,IT,45.07674,12.22977 59649,Rossano Veneto,1753,34,107,IT,45.70308,11.80369 59663,Rottanova,1753,34,107,IT,45.14361,12.01849 59665,Rotzo,1753,34,107,IT,45.8619,11.39619 59675,Roverchiara,1753,34,107,IT,45.26799,11.2451 59680,Roverè Veronese,1753,34,107,IT,45.59329,11.06999 59676,Roveredo di Guà,1753,34,107,IT,45.27309,11.4442 59685,Rovigo,1753,34,107,IT,45.06982,11.79022 59690,Rubano,1753,34,107,IT,45.42514,11.79146 59718,Saccolongo,1753,34,107,IT,45.40152,11.74863 59719,Sachet,1753,34,107,IT,46.36982,11.93129 59748,Salara,1753,34,107,IT,44.98586,11.42655 59752,Salcedo,1753,34,107,IT,45.75783,11.56621 59763,Saletto,1753,34,107,IT,45.22889,11.5378 59764,Saletto-San Bartolomeo,1753,34,107,IT,45.72639,12.39556 59765,Salgareda,1753,34,107,IT,45.705,12.48833 59773,Salionze,1753,34,107,IT,45.40493,10.72259 59776,Salizzole,1753,34,107,IT,45.24004,11.0954 59788,Salvatronda,1753,34,107,IT,45.67425,11.97709 59795,Salzano,1753,34,107,IT,45.52221,12.10151 59802,Sambruson,1753,34,107,IT,45.41039,12.10311 59809,Sambughe,1753,34,107,IT,45.59401,12.21824 59826,San Bellino,1753,34,107,IT,45.02943,11.59222 59839,San Biagio,1753,34,107,IT,45.37518,11.73713 59844,San Biagio di Callalta,1753,34,107,IT,45.68361,12.37722 59846,San Bonifacio,1753,34,107,IT,45.39595,11.27352 59901,San Donà di Piave,1753,34,107,IT,45.63019,12.5681 59917,San Fidenzio,1753,34,107,IT,45.21622,11.51802 59920,San Fior di Sopra,1753,34,107,IT,45.92219,12.36137 59922,San Floriano,1753,34,107,IT,45.51796,10.90817 59924,San Floriano-Olmi,1753,34,107,IT,45.67349,12.33039 59938,San Germano dei Berici,1753,34,107,IT,45.40179,11.4713 59965,San Giorgio al Tagliamento-Pozzi,1753,34,107,IT,45.79639,12.96361 59968,San Giorgio delle Pertiche,1753,34,107,IT,45.541,11.89401 59969,San Giorgio di Livenza,1753,34,107,IT,45.6533,12.79692 59974,San Giorgio in Bosco,1753,34,107,IT,45.58863,11.80736 59975,San Giorgio in Salici,1753,34,107,IT,45.42676,10.78906 59984,San Giovanni Ilarione,1753,34,107,IT,45.51927,11.23707 59987,San Giovanni Lupatoto,1753,34,107,IT,45.38193,11.04474 60019,San Gregorio,1753,34,107,IT,45.34286,11.29933 60025,San Gregorio nelle Alpi,1753,34,107,IT,46.10391,12.0267 60034,San Liberale,1753,34,107,IT,45.54778,12.34139 60070,San Martino,1753,34,107,IT,45.90807,12.34132 60073,San Martino Buon Albergo,1753,34,107,IT,45.42083,11.09562 60086,San Martino di Lupari,1753,34,107,IT,45.65128,11.86004 60087,San Martino di Venezze,1753,34,107,IT,45.12532,11.87018 60112,San Mauro di Saline,1753,34,107,IT,45.56452,11.11234 60121,San Michele al Tagliamento,1753,34,107,IT,45.76435,12.99494 60124,San Michele di Piave,1753,34,107,IT,45.79667,12.34634 60129,San Nazario,1753,34,107,IT,45.83982,11.68893 60147,San Nicolò Comelico,1753,34,107,IT,46.58253,12.5273 60171,San Pietro,1753,34,107,IT,45.44209,11.12968 60191,San Pietro di Cadore,1753,34,107,IT,46.5719,12.5869 60193,San Pietro di Feletto,1753,34,107,IT,45.91391,12.25101 60194,San Pietro di Morubio,1753,34,107,IT,45.24248,11.227 60196,San Pietro in Cariano,1753,34,107,IT,45.51751,10.88624 60199,San Pietro in Gu,1753,34,107,IT,45.60879,11.67355 60202,San Pietro in Volta,1753,34,107,IT,45.31542,12.31518 60181,San Pietro Mussolino,1753,34,107,IT,45.58359,11.2593 60183,San Pietro Valdastico,1753,34,107,IT,45.8867,11.36159 60185,San Pietro Viminario,1753,34,107,IT,45.24501,11.82049 60207,San Polo di Piave,1753,34,107,IT,45.78969,12.39287 60216,San Quirico,1753,34,107,IT,45.67685,11.2726 60250,San Stino di Livenza,1753,34,107,IT,45.72559,12.68971 60262,San Vendemiano,1753,34,107,IT,45.88732,12.35164 60263,San Vendemiano-Fossamerlo,1753,34,107,IT,45.8918,12.32992 60273,San Vito,1753,34,107,IT,45.75514,11.91553 60279,San Vito al Mantico,1753,34,107,IT,45.47163,10.89243 60284,San Vito di Leguzzano,1753,34,107,IT,45.68494,11.38872 60290,San Zeno,1753,34,107,IT,45.63381,10.73046 60292,San Zeno di Montagna,1753,34,107,IT,45.63749,10.73218 60293,San Zeno-San Giuseppe,1753,34,107,IT,45.75727,11.76208 60297,San Zenone degli Ezzelini,1753,34,107,IT,45.7804,11.8372 60301,Sandrà,1753,34,107,IT,45.46067,10.78686 60300,Sandrigo,1753,34,107,IT,45.66083,11.58921 60307,Sanguinetto,1753,34,107,IT,45.18567,11.14412 60331,SantAlberto,1753,34,107,IT,45.61306,12.13472 60338,SantAmbrogio di Valpollicella,1753,34,107,IT,45.52089,10.83618 60343,SantAndrea,1753,34,107,IT,45.64664,11.89639 60351,SantAngelo,1753,34,107,IT,45.52031,12.01862 60366,SantAngelo di Piove di Sacco,1753,34,107,IT,45.31735,12.00941 60373,SantAnna,1753,34,107,IT,45.1661,12.27355 60375,SantAnna dAlfaedo,1753,34,107,IT,45.62719,10.95168 60386,SantApollinare,1753,34,107,IT,45.04115,11.82533 60393,SantElena,1753,34,107,IT,45.18744,11.71169 60420,Santa Cristina,1753,34,107,IT,45.6435,12.13903 60440,Santa Giustina,1753,34,107,IT,46.08118,12.03822 60442,Santa Giustina in Colle,1753,34,107,IT,45.57506,11.90039 60448,Santa Lucia di Piave,1753,34,107,IT,45.86159,12.2939 60452,Santa Margherita dAdige,1753,34,107,IT,45.2121,11.55759 60456,Santa Maria,1753,34,107,IT,45.99115,12.22992 60477,Santa Maria di Non,1753,34,107,IT,45.51322,11.85364 60478,Santa Maria di Sala,1753,34,107,IT,45.50699,12.03565 60465,Santa Maria Maddalena,1753,34,107,IT,44.90231,11.60663 60502,Santandrà,1753,34,107,IT,45.74778,12.20111 60520,Santo Stefano di Cadore,1753,34,107,IT,46.55827,12.54956 60526,Santo Stefano-Bonaldo,1753,34,107,IT,45.36718,11.33199 60530,Santorso,1753,34,107,IT,45.73383,11.38785 60534,Saonara,1753,34,107,IT,45.36529,11.98481 60541,Sarcedo,1753,34,107,IT,45.70134,11.52963 60545,Sarego,1753,34,107,IT,45.40769,11.4019 60550,Sarmede,1753,34,107,IT,45.97625,12.38581 60551,Sarmeola,1753,34,107,IT,45.424,11.81674 60612,Scaltenigo,1753,34,107,IT,45.4712,12.08106 60630,Scardovari,1753,34,107,IT,44.89765,12.45462 60644,Schiavon,1753,34,107,IT,45.69654,11.64573 60647,Schio,1753,34,107,IT,45.71262,11.35671 60661,Scomigo,1753,34,107,IT,45.94255,12.32014 60669,Scorzè,1753,34,107,IT,45.57405,12.11156 60681,Sedico,1753,34,107,IT,46.10563,12.0933 60692,Segusino,1753,34,107,IT,45.91701,11.9556 60706,Selva del Montello,1753,34,107,IT,45.78835,12.1435 60707,Selva di Cadore,1753,34,107,IT,46.45028,12.05694 60708,Selva di Progno,1753,34,107,IT,45.61139,11.13799 60710,Selvazzano Dentro,1753,34,107,IT,45.38764,11.79232 60738,Seren del Grappa,1753,34,107,IT,45.99594,11.85624 60746,Sernaglia della Battaglia,1753,34,107,IT,45.87147,12.13302 60787,Servo,1753,34,107,IT,46.05844,11.78657 60810,Settimo,1753,34,107,IT,45.47929,10.9091 60849,Silea,1753,34,107,IT,45.65444,12.29701 60890,Soave,1753,34,107,IT,45.41955,11.24594 60893,Soccher-Paiane-Casan-Arsie,1753,34,107,IT,46.1812,12.31001 60900,Solagna,1753,34,107,IT,45.81951,11.71787 60915,Solesino,1753,34,107,IT,45.17922,11.74647 60930,Sommacampagna,1753,34,107,IT,45.40528,10.84382 60935,Sona,1753,34,107,IT,45.43271,10.8399 60956,Sorgà,1753,34,107,IT,45.21328,10.97989 60970,Sospirolo,1753,34,107,IT,46.14134,12.07365 60971,Sossano,1753,34,107,IT,45.35754,11.50819 60982,Soverzene,1753,34,107,IT,46.20331,12.30301 60985,Sovizzo,1753,34,107,IT,45.52669,11.4461 60986,Sovramonte,1753,34,107,IT,46.05861,11.7866 61015,Spinea-Orgnano,1753,34,107,IT,45.49107,12.155 61021,Spinimbecco,1753,34,107,IT,45.14398,11.37202 61032,Spresiano,1753,34,107,IT,45.77908,12.25628 61044,Stallavena-Lugo,1753,34,107,IT,45.56289,10.99669 61046,Stanghella,1753,34,107,IT,45.13509,11.75741 61071,Stienta,1753,34,107,IT,44.9397,11.54375 61073,Stigliano,1753,34,107,IT,45.52362,12.04377 61082,Stra,1753,34,107,IT,45.41123,12.01418 61104,Strà-Montanara-Pieve,1753,34,107,IT,45.42367,11.15749 61119,Summaga,1753,34,107,IT,45.77406,12.79792 61129,Susegana,1753,34,107,IT,45.85604,12.25741 61141,Taggì,1753,34,107,IT,45.4607,11.81865 61144,Taglio,1753,34,107,IT,45.02222,12.21083 61145,Taglio di Po,1753,34,107,IT,45.00189,12.21386 61147,Taibon Agordino,1753,34,107,IT,46.29838,12.01312 61157,Talponada,1753,34,107,IT,45.70351,12.49053 61159,Tambre,1753,34,107,IT,46.12632,12.41941 61171,Tarzo,1753,34,107,IT,45.97711,12.22917 61189,Tavernelle,1753,34,107,IT,45.51498,11.4486 61195,Tavo,1753,34,107,IT,45.50066,11.86079 61203,Teglio Veneto,1753,34,107,IT,45.81637,12.88414 61212,Tencarola,1753,34,107,IT,45.3949,11.80919 61236,Terradura,1753,34,107,IT,45.3229,11.82425 61246,Terrassa Padovana,1753,34,107,IT,45.24409,11.90271 61249,Terrazzo,1753,34,107,IT,45.1726,11.39485 61252,Terrossa,1753,34,107,IT,45.4634,11.3186 61263,Tessera,1753,34,107,IT,45.50241,12.32632 61270,Tezze,1753,34,107,IT,45.69011,11.70672 61271,Thiene,1753,34,107,IT,45.7088,11.47959 61304,Tombelle,1753,34,107,IT,45.39845,11.98213 61305,Tombolo,1753,34,107,IT,45.63916,11.82435 61311,Tonezza del Cimone,1753,34,107,IT,45.85889,11.34592 61374,Torre di Mosto,1753,34,107,IT,45.68629,12.70027 61379,Torrebelvicino,1753,34,107,IT,45.71583,11.31869 61382,Torreglia,1753,34,107,IT,45.33617,11.73608 61387,Torreselle,1753,34,107,IT,45.63026,12.0225 61394,Torri del Benaco,1753,34,107,IT,45.61013,10.68669 61395,Torri di Quartesolo,1753,34,107,IT,45.51901,11.62469 61458,Trebaseleghe,1753,34,107,IT,45.59295,12.04392 61469,Trecenta,1753,34,107,IT,45.02937,11.45931 61474,Tregnago,1753,34,107,IT,45.51397,11.16421 61480,Tremignon,1753,34,107,IT,45.52076,11.80577 61486,Treponti,1753,34,107,IT,45.36727,11.70905 61500,Trevenzuolo,1753,34,107,IT,45.26974,10.93386 61505,Trevignano,1753,34,107,IT,45.7367,12.06719 61509,Treviso,1753,34,107,IT,45.66673,12.2416 61515,Tribano,1753,34,107,IT,45.20912,11.83639 61522,Trichiana,1753,34,107,IT,46.0813,12.14091 61537,Trissino,1753,34,107,IT,45.55994,11.37678 61542,Trivignano,1753,34,107,IT,45.53197,12.18687 61601,Urbana,1753,34,107,IT,45.19278,11.4449 61636,Vago,1753,34,107,IT,45.41986,11.1302 61650,Valdagno,1753,34,107,IT,45.64498,11.29886 61657,Valdobbiadene,1753,34,107,IT,45.89689,11.98245 61661,Valeggio sul Mincio,1753,34,107,IT,45.35333,10.73635 61672,Valgatara,1753,34,107,IT,45.53467,10.91191 61727,Vallà,1753,34,107,IT,45.70711,11.93271 61680,Vallada Agordina,1753,34,107,IT,46.36442,11.93399 61696,Valle di Cadore,1753,34,107,IT,46.41806,12.33431 61717,Vallese,1753,34,107,IT,45.32827,11.08608 61719,Valli,1753,34,107,IT,45.22342,12.1899 61720,Valli del Pasubio,1753,34,107,IT,45.7403,11.26354 61725,Vallonga,1753,34,107,IT,45.27248,12.0786 61740,Valstagna,1753,34,107,IT,45.85108,11.66642 61758,Varago,1753,34,107,IT,45.73726,12.31083 61777,Vas,1753,34,107,IT,45.93804,11.93579 61786,Vazzola,1753,34,107,IT,45.83511,12.40851 61791,Vedelago,1753,34,107,IT,45.68722,12.01853 61795,Veggiano,1753,34,107,IT,45.44719,11.7128 61804,Velo,1753,34,107,IT,45.78983,11.36725 61806,Velo dAstico,1753,34,107,IT,45.7884,11.36769 61805,Velo Veronese,1753,34,107,IT,45.60669,11.09519 61815,Venegazzù,1753,34,107,IT,45.77934,12.09148 61822,Venice,1753,34,107,IT,45.43713,12.33265 61863,Verona,1753,34,107,IT,45.4299,10.98444 61864,Veronella,1753,34,107,IT,45.32378,11.32582 61880,Vescovana,1753,34,107,IT,45.13422,11.71261 61885,Vestenanova,1753,34,107,IT,45.57421,11.22868 61889,Veternigo,1753,34,107,IT,45.51765,12.05793 61914,Vicenza,1753,34,107,IT,45.54672,11.5475 61931,Vidor,1753,34,107,IT,45.86659,12.04517 61941,Vigardolo,1753,34,107,IT,45.60599,11.58856 61942,Vigasio,1753,34,107,IT,45.3178,10.94371 61950,Vighizzolo dEste,1753,34,107,IT,45.17629,11.62471 61967,Vigo di Cadore,1753,34,107,IT,46.49904,12.47111 61970,Vigodarzere,1753,34,107,IT,45.45751,11.88555 61975,Vigonovo,1753,34,107,IT,45.38691,12.00642 61977,Vigonza,1753,34,107,IT,45.43484,11.97465 61985,Villa Bartolomea,1753,34,107,IT,45.15461,11.3538 62035,Villa dAsolo,1753,34,107,IT,45.77193,11.89981 62039,Villa del Conte,1753,34,107,IT,45.58475,11.85942 61996,Villa Estense,1753,34,107,IT,45.17465,11.67022 62048,Villabruna-Umin,1753,34,107,IT,46.05675,11.927 62052,Villadose,1753,34,107,IT,45.07219,11.89899 62061,Villafranca di Verona,1753,34,107,IT,45.35405,10.84462 62056,Villafranca Padovana,1753,34,107,IT,45.49189,11.7935 62064,Villaga,1753,34,107,IT,45.40273,11.53468 62065,Villaganzerla,1753,34,107,IT,45.43612,11.61859 62066,Villaggio Montegrappa,1753,34,107,IT,45.54643,11.61428 62073,Villaguattera,1753,34,107,IT,45.44409,11.81767 62083,Villamarzana,1753,34,107,IT,45.01457,11.69225 62091,Villanova,1753,34,107,IT,45.4889,11.97471 62109,Villanova del Ghebbo Canton,1753,34,107,IT,45.05933,11.64314 62098,Villanova Marchesana,1753,34,107,IT,44.99231,11.96675 62143,Villatora,1753,34,107,IT,45.38768,11.96736 62146,Villaverla,1753,34,107,IT,45.64939,11.49176 62185,Vittorio Veneto,1753,34,107,IT,45.98026,12.30065 62226,Vò,1753,34,107,IT,45.32829,11.6415 62200,Vodo,1753,34,107,IT,46.41921,12.24557 62205,Volargne,1753,34,107,IT,45.53684,10.8182 62208,Volpago del Montello,1753,34,107,IT,45.7777,12.11857 62215,Voltago,1753,34,107,IT,46.27252,12.0064 62216,Voltago Agordino,1753,34,107,IT,46.27139,12.00574 62236,Zanè,1753,34,107,IT,45.722,11.44932 62241,Zelarino,1753,34,107,IT,45.51508,12.2079 62247,Zenson di Piave,1753,34,107,IT,45.67971,12.48913 62254,Zermeghedo,1753,34,107,IT,45.47585,11.37438 62255,Zero Branco,1753,34,107,IT,45.59952,12.16381 62256,Zevio,1753,34,107,IT,45.37209,11.12929 62275,Zoppè di Cadore,1753,34,107,IT,46.38583,12.17368 62277,Zovencedo,1753,34,107,IT,45.42893,11.50387 62281,Zugliano,1753,34,107,IT,45.7298,11.52399 66868,Aglona,4445,001,120,LV,56.13274,27.00682 66870,Aizkraukle,4472,002,120,LV,56.60477,25.25534 66871,Aizpute,4496,003,120,LV,56.72108,21.60156 66872,Aknīste,4499,004,120,LV,56.16152,25.74783 66873,Aloja,4484,005,120,LV,57.76723,24.87743 66966,Staicele,4484,005,120,LV,57.83579,24.74706 66874,Alsunga,4485,006,120,LV,56.98194,21.55938 66875,Alūksne,4487,007,120,LV,57.42162,27.04662 66876,Ape,4457,009,120,LV,57.53928,26.69291 66877,Auce,4481,010,120,LV,56.45981,22.90169 66940,Piņķi,4427,012,120,LV,56.94189,23.91365 66878,Baldone,4482,013,120,LV,56.74451,24.40078 66880,Baltinava,4498,014,120,LV,56.94394,27.64401 66881,Balvi,4505,015,120,LV,57.1313,27.26583 66882,Bauska,4465,016,120,LV,56.40794,24.19443 66931,Mūrmuiža,4471,017,120,LV,57.47312,25.49174 66884,Brocēni,4468,018,120,LV,56.6789,22.56945 66885,Carnikava,4454,020,120,LV,57.12935,24.28423 66888,Cēsis,4469,022,120,LV,57.31188,25.27456 66886,Cesvaine,4414,021,120,LV,56.96754,26.30764 66887,Cibla,4410,023,120,LV,56.5498,27.8837 66889,Dagda,4504,024,120,LV,56.09512,27.53723 66891,Daugavpils,4492,025,120,LV,55.88333,26.53333 66892,Dobele,4437,026,120,LV,56.62372,23.2751 66893,Dundaga,4428,027,120,LV,57.50498,22.35041 66920,Lieģi,4458,028,120,LV,56.58173,21.33399 66965,Smārde,4448,029,120,LV,56.9542,23.33736 66990,Ērgļi,4444,030,120,LV,56.89752,25.63668 66895,Garkalne,4510,031,120,LV,57.04486,24.41951 66896,Grobiņa,4470,032,120,LV,56.53521,21.16782 66897,Gulbene,4400,033,120,LV,57.17767,26.75291 66898,Iecava,4441,034,120,LV,56.59766,24.20763 66899,Ikšķile,4511,035,120,LV,56.83399,24.49679 66900,Ilūkste,4399,036,120,LV,55.97754,26.29655 66901,Inčukalns,4449,037,120,LV,57.09867,24.6863 66979,Vangaži,4449,037,120,LV,57.09358,24.54468 66904,Jaunjelgava,4475,038,120,LV,56.61319,25.08316 66905,Jaunpils,4489,040,120,LV,56.73137,23.01247 66908,Jēkabpils,4438,042,120,LV,56.49903,25.85735 66914,Krustpils,4438,042,120,LV,56.51068,25.86117 66906,Jelgava,4500,JEL,120,LV,56.65,23.71278 66973,Tīreļi,4424,041,120,LV,56.83991,23.58902 66909,Jūrmala,4446,JUR,120,LV,56.968,23.77038 66910,Kandava,4420,043,120,LV,57.04087,22.77466 66917,Kārsava,4453,044,120,LV,56.78405,27.68829 66991,Ķegums,4412,051,120,LV,56.7451,24.72439 66879,Baloži,4435,052,120,LV,56.87643,24.11825 66992,Ķekava,4435,052,120,LV,56.82662,24.23 66912,Kocēni,4495,045,120,LV,57.52057,25.33821 66913,Koknese,4452,046,120,LV,56.65163,25.43637 66915,Krāslava,4474,047,120,LV,55.89514,27.16799 66916,Kuldīga,4490,050,120,LV,56.97399,21.95721 66918,Lielvārde,4512,053,120,LV,56.72066,24.80743 66911,Karosta,4460,LPX,120,LV,56.55128,21.01287 66919,Liepāja,4460,LPX,120,LV,56.50474,21.01085 66924,Līgatne,4488,055,120,LV,57.23429,25.04059 66921,Limbaži,4418,054,120,LV,57.51287,24.71941 66925,Līvāni,4401,056,120,LV,56.35431,26.17579 66922,Lubāna,4419,057,120,LV,56.90425,26.71606 66923,Ludza,4501,058,120,LV,56.53958,27.71891 66926,Madona,4433,059,120,LV,56.85329,26.21698 66929,Mālpils,4461,061,120,LV,57.0101,24.95783 66930,Mārupe,4450,062,120,LV,56.90544,24.05113 66927,Mazsalaca,4513,060,120,LV,57.86329,25.05475 66932,Naukšēni,4398,064,120,LV,57.88349,25.45609 66933,Nereta,4432,065,120,LV,56.20279,25.30752 66934,Nīca,4436,066,120,LV,56.34601,21.06401 66907,Jumprava,4416,067,120,LV,56.67613,24.9721 66935,Ogre,4416,067,120,LV,56.8162,24.61401 66936,Olaine,4417,068,120,LV,56.79472,23.9358 66937,Ozolnieki,4442,069,120,LV,56.68986,23.7761 66967,Stalbe,4507,070,120,LV,57.37065,25.03106 66944,Pāvilosta,4467,071,120,LV,56.88791,21.18593 66945,Pļaviņas,4405,072,120,LV,56.6178,25.72552 66902,Jaunaglona,4483,073,120,LV,56.16066,27.00714 66941,Preiļi,4483,073,120,LV,56.29444,26.72459 66942,Priekule,4429,074,120,LV,56.44679,21.58968 66943,Priekuļi,4506,075,120,LV,57.315,25.36147 66946,Rauna,4479,076,120,LV,57.33173,25.60947 66953,Rēzekne,4509,REZ,120,LV,56.51028,27.34 66947,Riebiņi,4502,078,120,LV,56.3428,26.79995 66883,Bolderaja,4491,RIX,120,LV,57.03132,24.05571 66890,Daugavgrīva,4491,RIX,120,LV,57.04315,24.03613 66903,Jaunciems,4491,RIX,120,LV,57.0391,24.17413 66928,Mežaparks,4491,RIX,120,LV,57.00008,24.15997 66948,Riga,4491,RIX,120,LV,56.946,24.10589 66949,Roja,4440,079,120,LV,57.50146,22.80881 66950,Ropaži,4493,080,120,LV,56.9747,24.63295 66951,Rucava,4503,081,120,LV,56.16314,21.16156 66952,Rugāji,4423,082,120,LV,57.00325,27.13371 66954,Rūjiena,4426,084,120,LV,57.89752,25.33155 66938,Pilsrundāle,4404,083,120,LV,56.41812,24.01625 66869,Ainaži,4396,086,120,LV,57.86348,24.35853 66956,Salacgrīva,4396,086,120,LV,57.75312,24.35895 66957,Salaspils,4402,087,120,LV,56.86014,24.36544 66958,Saldus,4439,088,120,LV,56.66363,22.48807 66959,Saulkrasti,4443,089,120,LV,57.26224,24.41471 66894,Engure,4408,090,120,LV,57.16061,23.22527 66971,Tukums,4408,090,120,LV,56.96764,23.15554 66961,Sigulda,4476,091,120,LV,57.15375,24.85953 66963,Skrīveri,4415,092,120,LV,56.645,25.12058 66962,Skrunda,4447,093,120,LV,56.67749,22.01649 66964,Smiltene,4462,094,120,LV,57.42444,25.90164 66974,Ulbroka,4478,095,120,LV,56.9363,24.30387 66960,Seda,4494,096,120,LV,57.65042,25.75089 66969,Strenči,4494,096,120,LV,57.62574,25.68535 66955,Sabile,4459,097,120,LV,57.04577,22.57261 66968,Stende,4459,097,120,LV,57.14497,22.53482 66970,Talsi,4459,097,120,LV,57.24562,22.58137 66976,Valdemārpils,4459,097,120,LV,57.37068,22.59188 66972,Tērvete,4480,098,120,LV,56.47989,23.38895 66988,Zelmeņi,4480,098,120,LV,56.45167,23.35194 66975,Vaiņode,4508,100,120,LV,56.41848,21.85405 66977,Valka,4425,101,120,LV,57.7752,26.01013 66978,Valmiera,4473,VMR,120,LV,57.54108,25.42751 66980,Varakļāni,4431,102,120,LV,56.60826,26.75377 66983,Vecvārkava,4406,103,120,LV,56.19838,26.50811 66981,Vecpiebalga,4466,104,120,LV,57.0609,25.81624 66982,Vecumnieki,4397,105,120,LV,56.60608,24.52232 66984,Ventspils,4421,VEN,120,LV,57.38988,21.57288 66939,Piltene,4403,106,120,LV,57.22426,21.67439 66985,Viesīte,4456,107,120,LV,56.34751,25.55514 66986,Viļaka,4477,108,120,LV,57.18458,27.6722 66987,Viļāni,4486,109,120,LV,56.55253,26.92449 66989,Zilupe,4430,110,120,LV,56.38616,28.12165 66437,Balzers,458,01,125,LI,47.06665,9.50251 66438,Eschen,451,02,125,LI,47.21071,9.52223 66439,Gamprin,457,03,125,LI,47.22038,9.50935 66440,Mauren,455,04,125,LI,47.21805,9.5442 66441,Planken,454,05,125,LI,47.18516,9.54437 66442,Ruggell,453,06,125,LI,47.23799,9.5254 66443,Schaan,450,07,125,LI,47.16498,9.50867 66444,Schellenberg,449,08,125,LI,47.23123,9.54678 66445,Triesen,459,09,125,LI,47.10752,9.52815 66446,Triesenberg,456,10,125,LI,47.11815,9.54197 66447,Vaduz,452,11,125,LI,47.14151,9.52154 66581,Alytus,1605,02,126,LT,54.39635,24.04142 66592,Daugai,1605,02,126,LT,54.36667,24.33333 66593,Druskininkai,1605,02,126,LT,54.01573,23.98703 66630,Lazdijai,1605,02,126,LT,54.23333,23.51667 66678,Simnas,1605,02,126,LT,54.382,23.646 66694,Varėna,1605,02,126,LT,54.21667,24.56667 66695,Veisiejai,1605,02,126,LT,54.1011,23.69614 66576,Akademija (Kaunas),1580,15,126,LT,54.8964,23.82411 66579,Aleksotas,1580,15,126,LT,54.88037,23.90842 66584,Ariogala,1580,15,126,LT,55.262,23.477 66588,Birštonas,1580,15,126,LT,54.61667,24.03333 66591,Dainava (Kaunas),1580,15,126,LT,54.91525,23.96831 66595,Eiguliai,1580,15,126,LT,54.93133,23.93243 66598,Ežerėlis,1580,15,126,LT,54.88315,23.60396 66601,Garliava,1580,15,126,LT,54.82139,23.8713 66605,Jieznas,1580,15,126,LT,54.59937,24.17593 66606,Jonava,1580,15,126,LT,55.08333,24.28333 66611,Kaišiadorys,1580,15,126,LT,54.86667,24.45 66614,Karmėlava,1580,15,126,LT,54.97055,24.06182 66615,Kaunas,1580,15,126,LT,54.90272,23.90961 66629,Kėdainiai,1580,15,126,LT,55.28333,23.96667 66624,Kulautuva,1580,15,126,LT,54.94212,23.64218 66636,Mastaiciai,1580,15,126,LT,54.81998,23.84462 66661,Prienai,1580,15,126,LT,54.63333,23.95 66664,Ramučiai,1580,15,126,LT,54.9483,24.0305 66666,Raseiniai,1580,15,126,LT,55.36667,23.11667 66674,Sargėnai,1580,15,126,LT,54.94933,23.88316 66714,Šilainiai,1580,15,126,LT,54.92911,23.88599 66701,Vilkija,1580,15,126,LT,55.04609,23.58552 66723,Žiežmariai,1580,15,126,LT,54.80725,24.44073 66600,Gargždai,1604,21,126,LT,55.70951,21.39441 66620,Klaipėda,1604,21,126,LT,55.71667,21.11667 66622,Kretinga,1604,21,126,LT,55.8888,21.24448 66644,Neringa,1604,21,126,LT,55.36667,21.06667 66645,Nida,1604,21,126,LT,55.3086,20.99651 66650,Palanga,1604,21,126,LT,55.9175,21.06861 66660,Priekulė,1604,21,126,LT,55.55427,21.31903 66670,Rusnė,1604,21,126,LT,55.2982,21.3712 66673,Salantai,1604,21,126,LT,56.0565,21.5689 66677,Silute,1604,21,126,LT,55.34889,21.48306 66681,Skuodas,1604,21,126,LT,56.26667,21.53333 66718,Šventoji,1604,21,126,LT,56.0261,21.08411 66722,Žemaičių Naumiestis,1604,21,126,LT,55.35941,21.70364 66602,Gelgaudiškis,1610,25,126,LT,55.07688,22.97699 66612,Kalvarija,1610,25,126,LT,54.417,23.223 66613,Kalvarija Municipality,1610,25,126,LT,54.41468,23.22484 66617,Kazlų Rūda,1610,25,126,LT,54.749,23.49 66618,Kazlų Rūda Municipality,1610,25,126,LT,54.74751,23.49272 66623,Kudirkos Naumiestis,1610,25,126,LT,54.77353,22.86138 66628,Kybartai,1610,25,126,LT,54.63858,22.76316 66634,Marijampolė,1610,25,126,LT,54.55991,23.35412 66635,Marijampolė Municipality,1610,25,126,LT,54.56667,23.35 66672,Sakiai,1610,25,126,LT,54.95,23.05 66699,Vilkaviskis,1610,25,126,LT,54.65167,23.03222 66700,Vilkaviškis District Municipality,1610,25,126,LT,54.65,23.03333 66705,Virbalis,1610,25,126,LT,54.62858,22.82272 66587,Birzai,1614,33,126,LT,56.2,24.75 66608,Juodupė,1614,33,126,LT,56.087,25.607 66625,Kupiskis,1614,33,126,LT,55.84027,24.97976 66646,Obeliai,1614,33,126,LT,55.96895,25.15648 66651,Panevėžys,1614,33,126,LT,55.73333,24.35 66652,Panevėžys City,1614,33,126,LT,55.736,24.34347 66653,Panevėžys District Municipality,1614,33,126,LT,55.73301,24.37609 66654,Pasvalys,1614,33,126,LT,56.06667,24.4 66665,Ramygala,1614,33,126,LT,55.514,24.3 66669,Rokiškis,1614,33,126,LT,55.96667,25.58333 66692,Vabalninkas,1614,33,126,LT,55.98151,24.74828 66577,Akmenė,1609,43,126,LT,56.25,22.75 66607,Joniškis,1609,43,126,LT,56.23333,23.61667 66619,Kelmė,1609,43,126,LT,55.63333,22.93333 66627,Kuršėnai,1609,43,126,LT,56.00318,22.93662 66633,Linkuva,1609,43,126,LT,56.08596,23.97061 66642,Naujoji Akmene,1609,43,126,LT,56.31667,22.9 66649,Pakruojis,1609,43,126,LT,55.96667,23.86667 66662,Radviliskis,1609,43,126,LT,55.81667,23.53333 66710,Šeduva,1609,43,126,LT,55.7493,23.7561 66712,Šiauliai,1609,43,126,LT,55.93333,23.31667 66688,Tytuvėnėliai,1609,43,126,LT,55.62345,23.17162 66696,Venta,1609,43,126,LT,56.19162,22.69528 66721,Žagarė,1609,43,126,LT,56.36149,23.25094 66590,Būgai,1573,TA,126,LT,55.41387,22.60894 66609,Jurbarkas,1573,TA,126,LT,55.10859,22.79885 66648,Pagėgiai,1573,TA,126,LT,55.134,21.90446 66715,Šilalė,1573,TA,126,LT,55.46667,22.2 66683,Taurage,1573,TA,126,LT,55.25222,22.28972 66637,Mazeikiai,1608,51,126,LT,56.31667,22.33333 66657,Plateliai,1608,51,126,LT,56.04657,21.81615 66658,Plunge,1608,51,126,LT,55.91139,21.84417 66668,Rietavas,1608,51,126,LT,55.72375,21.93266 66675,Seda,1608,51,126,LT,56.16854,22.09071 66685,Telsiai,1608,51,126,LT,55.98139,22.24722 66693,Varniai,1608,51,126,LT,55.74435,22.37251 66697,Viekšniai,1608,51,126,LT,56.23598,22.51667 66582,Anyksciai,1621,UT,126,LT,55.52557,25.10264 66594,Dūkštas,1621,UT,126,LT,55.522,26.321 66604,Ignalina,1621,UT,126,LT,55.35,26.16667 66639,Moletai,1621,UT,126,LT,55.23333,25.41667 66691,Utena,1621,UT,126,LT,55.49764,25.59918 66706,Visaginas,1621,UT,126,LT,55.6,26.41667 66707,Zarasai,1621,UT,126,LT,55.73333,26.25 66585,Aukstadvaris,1606,57,126,LT,54.57946,24.52683 66586,Baltoji Vokė,1606,57,126,LT,54.60002,25.19318 66596,Eišiškės,1606,57,126,LT,54.17414,24.99917 66597,Elektrėnai,1606,57,126,LT,54.78544,24.66302 66599,Fabijoniškės,1606,57,126,LT,54.73333,25.24167 66603,Grigiškės,1606,57,126,LT,54.68333,25.08333 66610,Justiniškės,1606,57,126,LT,54.71664,25.2174 66631,Lazdynai,1606,57,126,LT,54.66815,25.20684 66632,Lentvaris,1606,57,126,LT,54.64364,25.05162 66641,Naujamiestis,1606,57,126,LT,54.67951,25.26855 66643,Nemenčinė,1606,57,126,LT,54.84776,25.46992 66647,Pabradė,1606,57,126,LT,54.981,25.761 66655,Pašilaičiai,1606,57,126,LT,54.73429,25.21912 66656,Pilaitė,1606,57,126,LT,54.69981,25.18393 66667,Rasos,1606,57,126,LT,54.67877,25.31173 66671,Rūdiškės,1606,57,126,LT,54.51609,24.83084 66709,Šalčininkai,1606,57,126,LT,54.3,25.38333 66676,Senieji Trakai,1606,57,126,LT,54.609,24.98 66711,Šeškinė,1606,57,126,LT,54.70972,25.25053 66679,Sirvintos,1606,57,126,LT,55.05,24.95 66680,Skaidiškės,1606,57,126,LT,54.61398,25.39573 66720,Švenčionėliai,1606,57,126,LT,55.16163,26.00177 66682,Svencionys,1606,57,126,LT,55.15,26.16667 66687,Trakai,1606,57,126,LT,54.63783,24.93433 66689,Ukmerge,1606,57,126,LT,55.25,24.75 66698,Vievis,1606,57,126,LT,54.76667,24.8 66702,Vilkpėdė,1606,57,126,LT,54.66969,25.2477 66703,Vilnius,1606,57,126,LT,54.68916,25.2798 66704,Vilnius District Municipality,1606,57,126,LT,54.73333,25.38333 66726,Bascharage,1518,CA,127,LU,49.56727,5.9073 66745,Bridel,1518,CA,127,LU,49.65579,6.07999 66747,Capellen,1518,CA,127,LU,49.645,5.99083 66748,Clemency,1518,CA,127,LU,49.59667,5.87583 66759,Dippach,1518,CA,127,LU,49.58701,5.9833 66762,Eischen,1518,CA,127,LU,49.68556,5.87861 66773,Garnich,1518,CA,127,LU,49.61667,5.9525 66778,Hautcharage,1518,CA,127,LU,49.57499,5.9097 66783,Hobscheid,1518,CA,127,LU,49.68861,5.91472 66793,Käerjeng,1518,CA,127,LU,49.58311,5.89892 66788,Kehlen,1518,CA,127,LU,49.66833,6.03583 66791,Koerich,1518,CA,127,LU,49.67,5.95 66792,Kopstal,1518,CA,127,LU,49.66444,6.07306 66802,Mamer,1518,CA,127,LU,49.6275,6.02333 66839,Schouweiler,1518,CA,127,LU,49.5825,5.95639 66842,Septfontaines,1518,CA,127,LU,49.70111,5.96722 66845,Steinfort,1518,CA,127,LU,49.66139,5.91917 66749,Clervaux,1521,CL,127,LU,50.05472,6.03139 66784,Hosingen,1521,CL,127,LU,50.01218,6.09089 66819,Parc Hosingen,1521,CL,127,LU,49.99744,6.09067 66849,Troisvierges,1521,CL,127,LU,50.12111,6.00028 66862,Weiswampach,1521,CL,127,LU,50.13722,6.075 66865,Wincrange,1521,CL,127,LU,50.05333,5.91917 66737,Bettendorf,1513,DI,127,LU,49.87667,6.21806 66743,Bourscheid,1513,DI,127,LU,49.90862,6.0675 66752,Commune de la Vallée de l’Ernz,1513,DI,127,LU,49.82149,6.21746 66757,Diekirch,1513,DI,127,LU,49.86778,6.15583 66764,Erpeldange,1513,DI,127,LU,49.86472,6.11472 66767,Ettelbruck,1513,DI,127,LU,49.8475,6.10417 66769,Feulen,1513,DI,127,LU,49.85,6.01667 66804,Medernach,1513,DI,127,LU,49.80955,6.21521 66807,Mertzig,1513,DI,127,LU,49.83389,6.0075 66815,Niederfeulen,1513,DI,127,LU,49.85556,6.04722 66826,Reisdorf,1513,DI,127,LU,49.86861,6.26778 66837,Schieren,1513,DI,127,LU,49.83056,6.09861 66859,Warken,1513,DI,127,LU,49.85918,6.08415 66728,Beaufort,1515,EC,127,LU,49.83583,6.29167 66729,Bech,1515,EC,127,LU,49.7526,6.36379 66732,Berdorf,1515,EC,127,LU,49.82051,6.34945 66753,Consdorf,1515,EC,127,LU,49.78018,6.3395 66761,Echternach,1515,EC,127,LU,49.81212,6.41846 66808,Mompach,1515,EC,127,LU,49.74611,6.465 66831,Rosport,1515,EC,127,LU,49.8047,6.50532 66856,Waldbillig,1515,EC,127,LU,49.79636,6.28431 66725,Aspelt,1517,ES,127,LU,49.52278,6.22472 66731,Belvaux,1517,ES,127,LU,49.51014,5.92414 66733,Bergem,1517,ES,127,LU,49.525,6.04222 66736,Bettembourg,1517,ES,127,LU,49.51861,6.10278 66755,Crauthem,1517,ES,127,LU,49.53556,6.14694 66758,Differdange,1517,ES,127,LU,49.52417,5.89139 66760,Dudelange,1517,ES,127,LU,49.48056,6.0875 66765,Esch-sur-Alzette,1517,ES,127,LU,49.49583,5.98056 66772,Frisange,1517,ES,127,LU,49.51616,6.18858 66787,Kayl,1517,ES,127,LU,49.48917,6.03972 66795,Lamadelaine,1517,ES,127,LU,49.54639,5.85639 66798,Leudelange,1517,ES,127,LU,49.56833,6.06528 66809,Mondercange,1517,ES,127,LU,49.53306,5.98833 66814,Niedercorn,1517,ES,127,LU,49.53611,5.89306 66817,Obercorn,1517,ES,127,LU,49.51361,5.89611 66822,Pétange,1517,ES,127,LU,49.55833,5.88056 66820,Pontpierre,1517,ES,127,LU,49.53639,6.02944 66824,Reckange-sur-Mess,1517,ES,127,LU,49.5625,6.00889 66828,Rodange,1517,ES,127,LU,49.54639,5.84083 66829,Roeser,1517,ES,127,LU,49.53721,6.14629 66832,Rumelange,1517,ES,127,LU,49.45964,6.03089 66835,Sanem,1517,ES,127,LU,49.54806,5.92889 66838,Schifflange,1517,ES,127,LU,49.50639,6.01278 66843,Soleuvre,1517,ES,127,LU,49.52148,5.93781 66851,Tétange,1517,ES,127,LU,49.47583,6.04222 66738,Betzdorf,1525,GR,127,LU,49.68333,6.35 66740,Biwer,1525,GR,127,LU,49.70605,6.37201 66771,Flaxweiler,1525,GR,127,LU,49.66602,6.34321 66775,Gonderange,1525,GR,127,LU,49.69537,6.24577 66776,Grevenmacher,1525,GR,127,LU,49.67751,6.44022 66786,Junglinster,1525,GR,127,LU,49.70722,6.25306 66803,Manternach,1525,GR,127,LU,49.70278,6.42639 66806,Mertert,1525,GR,127,LU,49.70261,6.47966 66860,Wasserbillig,1525,GR,127,LU,49.71534,6.49861 66867,Wormeldange,1525,GR,127,LU,49.61114,6.40546 66724,Alzingen,1527,LU,127,LU,49.565,6.16361 66746,Béreldange,1527,LU,127,LU,49.65507,6.11874 66734,Bertrange,1527,LU,127,LU,49.61111,6.05 66754,Contern,1527,LU,127,LU,49.58194,6.22667 66768,Fentange,1527,LU,127,LU,49.56278,6.15389 66780,Heisdorf,1527,LU,127,LU,49.67207,6.14202 66781,Helmsange,1527,LU,127,LU,49.65278,6.14139 66782,Hesperange,1527,LU,127,LU,49.56806,6.15139 66785,Itzig,1527,LU,127,LU,49.58769,6.17065 66790,Kirchberg,1527,LU,127,LU,49.62389,6.14944 66801,Luxembourg,1527,LU,127,LU,49.61167,6.13 66811,Moutfort,1527,LU,127,LU,49.58528,6.25556 66812,Müllendorf,1527,LU,127,LU,49.68028,6.13 66813,Niederanven,1527,LU,127,LU,49.65196,6.26199 66818,Olm,1527,LU,127,LU,49.65722,6.00028 66834,Sandweiler,1527,LU,127,LU,49.61471,6.22221 66840,Schrassig,1527,LU,127,LU,49.61014,6.25903 66841,Schuttrange,1527,LU,127,LU,49.62056,6.26861 66846,Steinsel,1527,LU,127,LU,49.67694,6.12389 66847,Strassen,1527,LU,127,LU,49.62056,6.07333 66858,Walferdange,1527,LU,127,LU,49.66321,6.13224 66861,Weiler-la-Tour,1527,LU,127,LU,49.54083,6.20083 66739,Bissen,1522,ME,127,LU,49.78733,6.0654 66741,Boevange-sur-Attert,1522,ME,127,LU,49.77256,6.01532 66750,Colmar,1522,ME,127,LU,49.81028,6.09722 66770,Fischbach,1522,ME,127,LU,49.746,6.18702 66779,Heffingen,1522,ME,127,LU,49.76907,6.24049 66796,Larochette,1522,ME,127,LU,49.78362,6.21891 66799,Lintgen,1522,ME,127,LU,49.72243,6.13016 66800,Lorentzweiler,1522,ME,127,LU,49.70131,6.14234 66805,Mersch,1522,ME,127,LU,49.74889,6.10611 66816,Nommern,1522,ME,127,LU,49.78694,6.17472 66830,Rollingen,1522,ME,127,LU,49.74167,6.11444 66850,Tuntange,1522,ME,127,LU,49.71778,6.01028 66730,Beckerich,1516,RD,127,LU,49.73056,5.88722 66735,Bettborn,1516,RD,127,LU,49.79528,5.94111 66751,Commune de Préizerdaul,1516,RD,127,LU,49.80114,5.93299 66763,Ell,1516,RD,127,LU,49.76389,5.85722 66777,Grosbous,1516,RD,127,LU,49.82778,5.96722 66823,Rambrouch,1516,RD,127,LU,49.83083,5.845 66825,Redange-sur-Attert,1516,RD,127,LU,49.76437,5.88997 66833,Saeul,1516,RD,127,LU,49.72722,5.98639 66852,Useldange,1516,RD,127,LU,49.76972,5.98222 66854,Vichten,1516,RD,127,LU,49.80306,6.0 66855,Wahl,1516,RD,127,LU,49.83667,5.90639 66744,Bous,1519,RM,127,LU,49.55389,6.32917 66756,Dalheim,1519,RM,127,LU,49.54083,6.25972 66797,Lenningen,1519,RM,127,LU,49.59861,6.36806 66810,Mondorf-les-Bains,1519,RM,127,LU,49.505,6.28111 66827,Remich,1519,RM,127,LU,49.545,6.36694 66836,Schengen,1519,RM,127,LU,49.47,6.362 66844,Stadtbredimus,1519,RM,127,LU,49.56278,6.36444 66857,Waldbredimus,1519,RM,127,LU,49.55676,6.28789 66821,Putscheid,1523,VD,127,LU,49.96083,6.14306 66848,Tandel,1523,VD,127,LU,49.8975,6.18333 66853,Vianden,1523,VD,127,LU,49.935,6.20889 66727,Bavigne,1526,WI,127,LU,49.92194,5.84944 66742,Boulaide,1526,WI,127,LU,49.88778,5.81639 66766,Esch-sur-Sûre,1526,WI,127,LU,49.91139,5.93639 66774,Goesdorf,1526,WI,127,LU,49.92131,5.96601 66789,Kiischpelt,1526,WI,127,LU,49.97835,6.0076 66794,Lac de la Haute-Sûre,1526,WI,127,LU,49.91667,5.83333 66863,Wiltz,1526,WI,127,LU,49.96547,5.9339 66864,Wilwerwiltz,1526,WI,127,LU,49.98889,5.99917 66866,Winseler,1526,WI,127,LU,49.96778,5.89028 67574,Арачиново,656,02,129,MK,42.02639,21.56194 67390,Berovo,716,03,129,MK,41.70306,22.85778 67519,Rusinovo,716,03,129,MK,41.68728,22.80849 67556,Vladimirovo,716,03,129,MK,41.71,22.79278 67391,Bistrica,679,04,129,MK,40.97892,21.3658 67392,Bitola,679,04,129,MK,41.03143,21.33474 67403,Capari,679,04,129,MK,41.05656,21.17884 67420,Dolno Orizari,679,04,129,MK,41.05028,21.37944 67430,Gorno Orizari,679,04,129,MK,41.05188,21.34548 67464,Kukurečani,679,04,129,MK,41.09562,21.32454 67472,Logovardi,679,04,129,MK,41.03096,21.40967 67394,Bogdanci,649,05,129,MK,41.20306,22.57556 67534,Stojakovo,649,05,129,MK,41.15556,22.5775 67396,Bogovinje,721,06,129,MK,41.92361,20.91361 67421,Dolno Palčište,721,06,129,MK,41.96859,20.92899 67434,Gradec,721,06,129,MK,41.89611,20.90417 67447,Kamenjane,721,06,129,MK,41.94568,20.92894 67398,Bosilovo,652,07,129,MK,41.44056,22.72778 67441,Ilovica,652,07,129,MK,41.47224,22.8048 67523,Sekirnik,652,07,129,MK,41.43999,22.79536 67399,Brvenica,660,08,129,MK,41.96722,20.98083 67568,Čelopek,660,08,129,MK,41.93167,21.01333 67439,Gurgurnica,660,08,129,MK,41.84508,21.10538 67483,Miletino,660,08,129,MK,41.90753,21.01601 67401,Butel,694,09,129,MK,42.03083,21.44667 67512,Radishani,694,09,129,MK,42.06111,21.44778 67566,Čair,704,79,129,MK,42.01528,21.44111 67395,Bogomila,676,80,129,MK,41.59306,21.47167 67567,Čaška,676,80,129,MK,41.65056,21.66222 67405,Centar Župa,720,78,129,MK,41.47849,20.55945 67569,Češinovo,644,81,129,MK,41.87148,22.28961 67494,Oblesevo,644,81,129,MK,41.88333,22.33389 67582,Чучер - Сандево,715,82,129,MK,42.10361,21.38222 67388,Belčišta,645,22,129,MK,41.30278,20.83028 67481,Mešeišta,645,22,129,MK,41.23814,20.77414 67408,Delcevo,695,23,129,MK,41.96722,22.76944 67410,Demir Hisar,687,25,129,MK,41.22097,21.20302 67528,Slepče,687,25,129,MK,41.23333,21.175 67529,Sopotnica,687,25,129,MK,41.29594,21.15357 67411,Demir Kapija,655,24,129,MK,41.40613,22.24631 67533,Star Dojran,697,26,129,MK,41.18647,22.7203 67407,Crnilište,675,27,129,MK,41.53025,21.41416 67412,Desovo,675,27,129,MK,41.46278,21.49111 67418,Dolneni,675,27,129,MK,41.42579,21.45402 67468,Lažani,675,27,129,MK,41.44222,21.31583 67572,Žitoše,675,27,129,MK,41.41991,21.29078 67406,Cresevo,707,17,129,MK,42.05083,21.50972 67427,Gevgelija,648,18,129,MK,41.14166,22.50141 67484,Miravci,648,18,129,MK,41.30925,22.43641 67428,Gjorče Petro,722,29,129,MK,42.00778,21.35306 67404,Cegrane,693,19,129,MK,41.83889,20.97583 67417,Dolna Banjica,693,19,129,MK,41.78611,20.90611 67426,Forino,693,19,129,MK,41.82334,20.96174 67433,Gostivar,693,19,129,MK,41.79601,20.90819 67531,Srbinovo,693,19,129,MK,41.70586,20.95859 67560,Vrutok,693,19,129,MK,41.76861,20.83917 67436,Gradsko,708,20,129,MK,41.5775,21.94278 67397,Bojane,684,85,129,MK,42.00009,21.19265 67423,Dračevo,684,85,129,MK,41.93667,21.52167 67471,Ljubin,684,85,129,MK,42.00139,21.30917 67521,Saraj,684,85,129,MK,42.0,21.32778 67546,Usje,684,85,129,MK,41.95871,21.45835 67440,Ilinden,690,34,129,MK,41.99451,21.58002 67446,Kadino,690,34,129,MK,41.96889,21.60139 67478,Marino,690,34,129,MK,41.98776,21.59148 67482,Miladinovci,690,34,129,MK,41.98029,21.64982 67575,Идризово,690,34,129,MK,41.96083,21.57556 67573,Јурумлери,690,34,129,MK,41.96722,21.55694 67445,Jegunovce,678,35,129,MK,42.07238,21.12367 67559,Vratnica,678,35,129,MK,42.14333,21.11694 67449,Karbinci,674,37,129,MK,41.81758,22.23529 67526,Skopje,681,38,129,MK,41.99646,21.43141 67450,Kavadarci,713,36,129,MK,41.43306,22.01194 67550,Vataša,713,36,129,MK,41.41694,22.01889 67424,Drugovo,688,40,129,MK,41.4849,20.92636 67452,Kičevo,688,40,129,MK,41.51267,20.95886 67530,Srbica,688,40,129,MK,41.58672,21.03027 67535,Strelci,688,40,129,MK,41.54046,21.00563 67545,Tuin,688,40,129,MK,41.61944,21.04528 67557,Vraneštica,688,40,129,MK,41.44496,21.02683 67561,Zajas,688,40,129,MK,41.60722,20.93833 67451,Kisela Voda,686,39,129,MK,41.94889,21.50278 67453,Kochani,723,42,129,MK,41.91639,22.41278 67501,Orizari,723,42,129,MK,41.92262,22.44628 67455,Konče,665,41,129,MK,41.49511,22.38359 67458,Kratovo,641,43,129,MK,42.07838,22.1807 67459,Kriva Palanka,677,44,129,MK,42.20088,22.33244 67460,Krivogashtani,647,45,129,MK,41.33611,21.33306 67495,Obršani,647,45,129,MK,41.28168,21.3615 67576,Клечовце,647,45,129,MK,42.11611,21.85722 67402,Bučin,714,46,129,MK,41.27377,21.31692 67461,Krusevo,714,46,129,MK,41.36889,21.24889 67387,Bedinje,683,47,129,MK,42.14167,21.69639 67465,Kumanovo,683,47,129,MK,42.13222,21.71444 67516,Romanovci,683,47,129,MK,42.09472,21.69306 67443,Izvor,659,48,129,MK,42.20322,21.57812 67469,Lipkovo,659,48,129,MK,42.15639,21.58528 67473,Lojane,659,48,129,MK,42.23276,21.6655 67480,Matejce,659,48,129,MK,42.12556,21.59778 67502,Otlja,659,48,129,MK,42.14315,21.58675 67547,Vaksince,659,48,129,MK,42.20611,21.66306 67579,Слупчане,659,48,129,MK,42.17333,21.62778 67474,Lozovo,705,49,129,MK,41.78389,21.90556 67476,Makedonska Kamenica,701,51,129,MK,42.02079,22.5876 67477,Makedonski Brod,692,52,129,MK,41.51361,21.21528 67520,Samokov,692,52,129,MK,41.68331,21.14625 67518,Rostusa,669,50,129,MK,41.61,20.6 67389,Beranci,653,53,129,MK,41.15969,21.35963 67416,Dobruševo,653,53,129,MK,41.16861,21.4825 67422,Dolno Srpci,653,53,129,MK,41.1748,21.36464 67486,Mogila,653,53,129,MK,41.10833,21.37861 67490,Negotino,664,54,129,MK,41.48456,22.09056 67492,Novaci,696,55,129,MK,41.04197,21.45866 67493,Novo Selo,718,56,129,MK,41.41486,22.88164 67540,Sušica,718,56,129,MK,41.43982,22.83676 67456,Kosel,699,58,129,MK,41.17444,20.83556 67496,Ohrid,699,58,129,MK,41.11722,20.80194 67497,Ohrid Opština,699,58,129,MK,41.16667,20.83333 67503,Pehčevo,685,60,129,MK,41.76226,22.88921 67532,Sredno Konjare,698,59,129,MK,41.95743,21.71494 67577,Петровец,698,59,129,MK,41.93889,21.615 67470,Lisičani,670,61,129,MK,41.46139,21.05444 67506,Plasnica,670,61,129,MK,41.46722,21.12306 67448,Kanatlarci,666,62,129,MK,41.21028,21.50333 67479,Markov Grad,666,62,129,MK,41.35722,21.5325 67509,Prilep,666,62,129,MK,41.34514,21.55504 67544,Topolčani,666,62,129,MK,41.22772,21.43113 67510,Probishtip,646,63,129,MK,42.00306,22.17861 67564,Zletovo,646,63,129,MK,41.98861,22.23611 67499,Oraovica,709,64,129,MK,41.62583,22.51333 67507,Podareš,709,64,129,MK,41.61389,22.54222 67514,Radovis,709,64,129,MK,41.63833,22.46472 67578,Ранковце,717,65,129,MK,42.16964,22.11617 67437,Grnčari,712,66,129,MK,41.01722,21.05333 67444,Jankovec,712,66,129,MK,41.11028,21.01139 67457,Krani,712,66,129,MK,40.93934,21.10911 67515,Resen,712,66,129,MK,41.08934,21.01092 67517,Rosoman,691,67,129,MK,41.51671,21.94585 67400,Bukovik,667,68,129,MK,41.96833,21.23694 67438,Grčec,667,68,129,MK,41.98806,21.33028 67454,Kondovo,667,68,129,MK,42.01167,21.31361 67462,Krušopek,667,68,129,MK,41.97833,21.35444 67580,Сопиште,719,70,129,MK,41.95472,21.4275 67581,Старо Нагоричане,643,71,129,MK,42.19806,21.82861 67525,Shtip,661,83,129,MK,41.74583,22.19583 67409,Delogožda,700,72,129,MK,41.25728,20.7218 67466,Labunista,700,72,129,MK,41.26861,20.59611 67475,Lukovo,700,72,129,MK,41.35339,20.60637 67485,Mislesevo,700,72,129,MK,41.185,20.70861 67498,Oktisi,700,72,129,MK,41.2325,20.60722 67513,Radolista,700,72,129,MK,41.16417,20.62333 67537,Struga,700,72,129,MK,41.17799,20.67784 67552,Velesta,700,72,129,MK,41.24083,20.64389 67463,Kuklis,710,73,129,MK,41.40528,22.66528 67488,Murtino,710,73,129,MK,41.41537,22.72589 67538,Strumica,710,73,129,MK,41.4375,22.64333 67553,Veljusa,710,73,129,MK,41.47611,22.5675 67386,Batinci,711,74,129,MK,41.91909,21.47978 67419,Dolno Količani,711,74,129,MK,41.88639,21.48556 67487,Morani,711,74,129,MK,41.90978,21.54997 67539,Studeničane,711,74,129,MK,41.92208,21.53483 67571,Šuto Orizare,680,84,129,MK,42.04,21.425 67432,Gorobinci,640,69,129,MK,41.87507,21.87599 67541,Sveti Nikole,640,69,129,MK,41.86956,21.95274 67491,Nerašte,654,75,129,MK,42.10711,21.1081 67500,Orashac,654,75,129,MK,42.0625,21.79972 67511,Pršovce,654,75,129,MK,42.08336,21.05994 67527,Slatino,654,75,129,MK,42.06784,21.03902 67542,Tearce,654,75,129,MK,42.07666,21.0531 67415,Dobrošte,663,76,129,MK,42.10333,21.07778 67425,Džepčište,663,76,129,MK,42.03287,20.99817 67429,Golema Rečica,663,76,129,MK,41.98803,20.94517 67505,Pirok,663,76,129,MK,41.91083,20.91056 67508,Poroj,663,76,129,MK,42.02913,20.99266 67524,Selce,663,76,129,MK,42.03482,20.94035 67570,Šipkovica,663,76,129,MK,42.035,20.91556 67543,Tetovo,663,76,129,MK,42.00973,20.97155 67504,Pirava,671,10,129,MK,41.32042,22.53047 67548,Valandovo,671,10,129,MK,41.31744,22.56002 67549,Vasilevo,658,11,129,MK,41.47408,22.64301 67431,Gorno Orizari,651,13,129,MK,41.68583,21.73475 67442,Ivankovci,651,13,129,MK,41.84889,21.82028 67551,Veles,651,13,129,MK,41.71556,21.77556 67554,Vevčani,662,12,129,MK,41.24056,20.59333 67393,Blatec,672,14,129,MK,41.83668,22.57909 67435,Gradec,672,14,129,MK,41.85068,22.51132 67555,Vinica,672,14,129,MK,41.88278,22.50917 67414,Dobri Dol,689,16,129,MK,41.8652,20.89009 67489,Negotino,689,16,129,MK,41.87792,20.88389 67558,Vrapčište,689,16,129,MK,41.83439,20.88563 67562,Zelenikovo,706,32,129,MK,41.88413,21.58848 67413,Dobarce,668,30,129,MK,41.9553,21.08875 67467,Larce,668,30,129,MK,41.93319,21.12628 67522,Sedlarevo,668,30,129,MK,41.88306,21.1275 67536,Strimnica,668,30,129,MK,41.96719,21.03598 67563,Zelino,668,30,129,MK,41.98028,21.06417 67565,Zrnovci,673,33,129,MK,41.85417,22.44444 67758,Attard,110,01,135,MT,35.88972,14.4425 67759,Balzan,108,02,135,MT,35.90028,14.455 67817,Vittoriosa,107,03,135,MT,35.89222,14.51833 67760,Birkirkara,97,04,135,MT,35.89722,14.46111 67761,Birżebbuġa,88,05,135,MT,35.82583,14.52694 67762,Cospicua,138,06,135,MT,35.88556,14.5275 67763,Dingli,117,07,135,MT,35.86139,14.38222 67764,Fgura,129,08,135,MT,35.87028,14.51333 67765,Floriana,84,09,135,MT,35.89583,14.50833 67766,Fontana,134,10,135,MT,36.0375,14.23611 67768,Għajnsielem,130,13,135,MT,36.02639,14.285 67772,Hal Gharghur,130,13,135,MT,35.92409,14.45118 67770,Għaxaq,120,15,135,MT,35.84889,14.51667 67767,Gudja,106,16,135,MT,35.84917,14.50306 67771,Gżira,124,17,135,MT,35.90583,14.48806 67769,Għarb,113,12,135,MT,36.06,14.20889 67821,Ħamrun,105,18,135,MT,35.88472,14.48444 67781,L-Iklin,93,19,135,MT,35.90414,14.45415 67777,Imġarr,99,21,135,MT,35.92056,14.36639 67791,Mġarr,99,21,135,MT,36.02528,14.295 67789,Mqabba,91,22,135,MT,35.84763,14.46824 67775,Imsida,82,23,135,MT,35.8925,14.48278 67780,Kirkop,82,23,135,MT,35.84222,14.48528 67776,Imtarfa,126,24,135,MT,35.89333,14.39889 67782,Lija,126,24,135,MT,35.90056,14.44639 67783,Luqa,77,25,135,MT,35.85889,14.48861 67809,Senglea,77,25,135,MT,35.8875,14.51694 67778,Kalkara,128,26,135,MT,35.88917,14.53278 67779,Kerċem,137,27,135,MT,36.04194,14.22667 67785,Marsaskala,137,27,135,MT,35.8622,14.56701 67786,Marsaxlokk,78,28,135,MT,35.84194,14.54306 67784,Marsa,109,31,135,MT,35.87917,14.49528 67787,Mellieħa,96,34,135,MT,35.95639,14.36222 67790,Munxar,132,36,135,MT,36.03,14.23333 67792,Nadur,133,37,135,MT,36.03778,14.29417 67793,Naxxar,112,38,135,MT,35.91361,14.44361 67794,Paola,115,39,135,MT,35.87306,14.49889 67795,Pembroke,125,40,135,MT,35.93056,14.47639 67796,Pietà,127,41,135,MT,35.89472,14.495 67797,Qala,79,42,135,MT,36.03611,14.30944 67798,Qormi,119,43,135,MT,35.87601,14.472 67799,Qrendi,111,44,135,MT,35.83472,14.45833 67803,San Lawrenz,87,50,135,MT,36.05556,14.20361 67805,San Ġiljan,75,49,135,MT,35.91839,14.48977 67804,San Pawl il-Baħar,116,52,135,MT,35.95064,14.41561 67806,Sannat,116,52,135,MT,36.02444,14.24278 67808,Santa Venera,94,53,135,MT,35.89083,14.47417 67774,Imdina,136,20,135,MT,35.88694,14.4025 67810,Siġġiewi,98,55,135,MT,35.85556,14.43639 67811,Sliema,104,56,135,MT,35.9125,14.50194 67801,Saint John,100,48,135,MT,35.90556,14.47611 67788,Mosta,139,51,135,MT,35.90917,14.42556 67802,Saint Lucia,139,51,135,MT,36.04306,14.21722 67807,Santa Luċija,139,51,135,MT,35.86278,14.5075 67812,Swieqi,86,57,135,MT,35.9225,14.48 67814,Ta’ Xbiex,122,58,135,MT,35.89917,14.49444 67813,Tarxien,103,59,135,MT,35.86583,14.515 67815,Valletta,95,60,135,MT,35.89972,14.51472 67800,Rabat,101,45,135,MT,35.88152,14.39872 67816,Victoria,101,45,135,MT,36.04444,14.23972 67818,Xagħra,114,61,135,MT,36.05,14.26444 67819,Xewkija,121,62,135,MT,36.03278,14.25806 67820,Xgħajra,81,63,135,MT,35.88556,14.5475 67822,Żabbar,123,64,135,MT,35.87611,14.535 67773,Haz-Zebbug,85,65,135,MT,35.87194,14.44111 67823,Żebbuġ,80,66,135,MT,36.07222,14.23583 67824,Żejtun,135,67,135,MT,35.85583,14.53306 67825,Żurrieq,76,68,135,MT,35.83111,14.47417 67271,Anenii Noi,4368,AN,144,MD,46.87839,29.23483 67337,Varniţa,4368,AN,144,MD,46.86606,29.46636 67280,Bălţi,4393,BA,144,MD,47.76314,27.92932 67272,Basarabeasca,4379,BS,144,MD,46.3317,28.96365 67273,Bender,4362,BD,144,MD,46.83156,29.47769 67276,Briceni,4375,BR,144,MD,48.36289,27.07787 67281,Cahul,4391,CA,144,MD,45.90425,28.19929 67305,Giurgiuleşti,4391,CA,144,MD,45.48167,28.19722 67294,Călăraşi,4366,CL,144,MD,47.2556,28.30987 67283,Cantemir,4380,CT,144,MD,46.27743,28.2027 67310,Iargara,4380,CT,144,MD,46.4252,28.42676 67339,Vişniovca,4380,CT,144,MD,46.3326,28.44797 67295,Căuşeni,4365,CS,144,MD,46.63674,29.41114 67286,Chiţcani,4365,CS,144,MD,46.78296,29.61682 67285,Chisinau,4373,CU,144,MD,47.00556,28.8575 67288,Ciorescu,4373,CU,144,MD,47.13,28.88937 67292,Cricova,4373,CU,144,MD,47.13835,28.86156 67327,Sîngera,4373,CU,144,MD,46.91557,28.96673 67326,Stăuceni,4373,CU,144,MD,47.09643,28.86791 67336,Vadul lui Vodă,4373,CU,144,MD,47.09009,29.0757 67338,Vatra,4373,CU,144,MD,47.0746,28.73685 67287,Cimişlia,4360,CM,144,MD,46.52685,28.76441 67293,Criuleni,4390,CR,144,MD,47.21307,29.15926 67277,Briceni,4384,DO,144,MD,48.35628,27.70293 67298,Donduşeni,4384,DO,144,MD,48.24268,27.6101 67299,Drochia,4392,DR,144,MD,48.03555,27.81293 67289,Cocieri,4383,DU,144,MD,47.3017,29.11755 67335,Ustia,4383,DU,144,MD,47.25524,29.12406 67301,Edineţ,4387,ED,144,MD,48.17215,27.30337 67303,Fălești,4381,FA,144,MD,47.57667,27.71264 67302,Floreşti,4370,FL,144,MD,47.89137,28.29312 67304,Ghindești,4370,FL,144,MD,47.85482,28.37679 67313,Mărculeşti,4370,FL,144,MD,47.86897,28.24109 67279,Bugeac,4385,GA,144,MD,46.36554,28.6625 67284,Ceadîr-Lunga,4385,GA,144,MD,46.06169,28.83078 67290,Comrat,4385,GA,144,MD,46.29456,28.6565 67340,Vulcăneşti,4385,GA,144,MD,45.68492,28.40613 67306,Glodeni,4367,GL,144,MD,47.77513,27.51891 67296,Dancu,4382,HI,144,MD,46.75818,28.20716 67308,Hînceşti,4382,HI,144,MD,46.83047,28.59064 67309,Ialoveni,4369,IA,144,MD,46.94346,28.78233 67314,Nisporeni,4363,NI,144,MD,47.08159,28.17138 67315,Ocniţa,4389,OC,144,MD,48.38274,27.43805 67317,Otaci,4389,OC,144,MD,48.43285,27.79912 67316,Orhei,4361,OR,144,MD,47.38494,28.82446 67319,Rezina,4394,RE,144,MD,47.74928,28.96583 67322,Saharna,4394,RE,144,MD,47.69107,28.97458 67321,Rîşcani,4376,RI,144,MD,47.94792,27.56376 67274,Bilicenii Vechi,4364,SI,144,MD,47.6558,28.04734 67275,Biruinţa,4364,SI,144,MD,47.81353,28.07004 67328,Sîngerei,4364,SI,144,MD,47.63632,28.14296 67341,Şoldăneşti,4388,SD,144,MD,47.81608,28.79718 67324,Soroca,4374,SO,144,MD,48.15659,28.28489 67342,Ştefan Vodă,4378,SV,144,MD,46.51287,29.66193 67278,Bucovăţ,4377,ST,144,MD,47.19064,28.45802 67325,Strășeni,4377,ST,144,MD,47.14216,28.60774 67329,Taraclia,4372,TA,144,MD,45.90273,28.66816 67333,Tvardița,4372,TA,144,MD,46.14826,28.96491 67312,Mîndreşti,4371,TE,144,MD,47.50525,28.27687 67330,Teleneşti,4371,TE,144,MD,47.5011,28.36536 67282,Camenca,4395,SN,144,MD,48.03233,28.69899 67291,Crasnoe,4395,SN,144,MD,46.64844,29.80403 67297,Dnestrovsc,4395,SN,144,MD,46.6164,29.91926 67300,Dubăsari,4395,SN,144,MD,47.26562,29.16667 67307,Hryhoriopol,4395,SN,144,MD,47.15413,29.30008 67311,Maiac,4395,SN,144,MD,47.23727,29.38498 67318,Pervomaisc,4395,SN,144,MD,46.73253,29.9617 67320,Rîbniţa,4395,SN,144,MD,47.76817,29.01 67323,Slobozia,4395,SN,144,MD,46.72927,29.70446 67331,Tiraspol,4395,SN,144,MD,46.84274,29.62909 67332,Tiraspolul Nou,4395,SN,144,MD,46.82874,29.52174 67334,Ungheni,4386,UN,144,MD,47.21079,27.80047 67343,Andrijevica,23,01,147,ME,42.73389,19.79194 67344,Bar,13,02,147,ME,42.09306,19.10028 67369,Stari Bar,13,02,147,ME,42.097,19.136 67375,Šušanj,13,02,147,ME,42.11556,19.08833 67370,Sutomore,13,02,147,ME,42.14278,19.04667 67345,Berane,21,03,147,ME,42.8425,19.87333 67346,Bijelo Polje,25,04,147,ME,43.03834,19.74758 67347,Budva,30,05,147,ME,42.28639,18.84 67360,Petrovac na Moru,30,05,147,ME,42.20556,18.9425 67349,Danilovgrad,14,07,147,ME,42.55384,19.14608 67368,Spuž,14,07,147,ME,42.515,19.195 67353,Gusinje,24,22,147,ME,42.56194,19.83389 67354,Kolašin,31,09,147,ME,42.82229,19.51653 67350,Dobrota,26,10,147,ME,42.45417,18.76833 67355,Kotor,26,10,147,ME,42.42067,18.76825 67365,Prčanj,26,10,147,ME,42.4575,18.74222 67366,Risan,26,10,147,ME,42.515,18.69556 67358,Mojkovac,22,11,147,ME,42.96044,19.5833 67359,Nikšić,17,12,147,ME,42.7731,18.94446 67348,Cetinje,28,06,147,ME,42.39063,18.91417 67361,Plav,19,13,147,ME,42.59694,19.94556 67362,Pljevlja,20,14,147,ME,43.3567,19.35843 67363,Plužine,16,15,147,ME,43.15278,18.83944 67351,Golubovci,27,16,147,ME,42.335,19.23111 67352,Goričani,27,16,147,ME,42.33222,19.21194 67356,Mataguži,27,16,147,ME,42.32361,19.27278 67357,Mojanovići,27,16,147,ME,42.34167,19.22139 67364,Podgorica,27,16,147,ME,42.44111,19.26361 67372,Tuzi,27,16,147,ME,42.36556,19.33139 67367,Rožaje,15,17,147,ME,42.83299,20.16652 67374,Šavnik,18,18,147,ME,42.95639,19.09667 67371,Tivat,29,19,147,ME,42.43639,18.69611 67373,Ulcinj,33,20,147,ME,41.92936,19.22436 67376,Žabljak,32,21,147,ME,43.15423,19.12325 77306,Aalden,2613,DR,156,NL,52.79,6.71806 77344,Angelslo,2613,DR,156,NL,52.7809,6.92645 77349,Annen,2613,DR,156,NL,53.0575,6.71944 77357,Assen,2613,DR,156,NL,52.99667,6.5625 77376,Ballast,2613,DR,156,NL,52.67218,6.73299 77380,Barger-Oosterveld,2613,DR,156,NL,52.77,6.95833 77381,Bargeres,2613,DR,156,NL,52.76152,6.88145 77395,Beilen,2613,DR,156,NL,52.86333,6.51389 77456,Borger,2613,DR,156,NL,52.92333,6.79306 77519,Coevorden,2613,DR,156,NL,52.66103,6.74046 77528,Dalen,2613,DR,156,NL,52.69917,6.75556 77552,De Loo,2613,DR,156,NL,52.67167,6.73967 77563,De Wijk,2613,DR,156,NL,52.67333,6.29028 77581,Diever,2613,DR,156,NL,52.85417,6.31806 77620,Dwingeloo,2613,DR,156,NL,52.83417,6.36944 77628,Eelde,2613,DR,156,NL,53.13583,6.5625 77634,Eext,2613,DR,156,NL,53.0175,6.73472 77653,Emmen,2613,DR,156,NL,52.77917,6.90694 77654,Emmer-Compascuum,2613,DR,156,NL,52.81167,7.04722 77655,Emmer-Erfscheidenveen,2613,DR,156,NL,52.80667,6.98889 77656,Emmerhout,2613,DR,156,NL,52.78755,6.93881 77657,Emmermeer,2613,DR,156,NL,52.80071,6.89315 77658,Emmerschans,2613,DR,156,NL,52.80083,6.93889 77671,Exloo,2613,DR,156,NL,52.8825,6.86389 77684,Gasselte,2613,DR,156,NL,52.97167,6.79444 77685,Gasselternijveen,2613,DR,156,NL,52.98833,6.85278 77696,Gemeente Aa en Hunze,2613,DR,156,NL,53.00445,6.74908 77714,Gemeente Assen,2613,DR,156,NL,52.99635,6.55255 77735,Gemeente Borger-Odoorn,2613,DR,156,NL,52.90501,6.88042 77750,Gemeente Coevorden,2613,DR,156,NL,52.74344,6.72487 77758,Gemeente De Wolden,2613,DR,156,NL,52.70102,6.37277 77783,Gemeente Emmen,2613,DR,156,NL,52.75243,6.95938 77831,Gemeente Hoogeveen,2613,DR,156,NL,52.7182,6.51803 77871,Gemeente Meppel,2613,DR,156,NL,52.70885,6.19727 77874,Gemeente Midden-Drenthe,2613,DR,156,NL,52.86716,6.5384 77887,Gemeente Noordenveld,2613,DR,156,NL,53.11494,6.44622 77958,Gemeente Tynaarlo,2613,DR,156,NL,53.10417,6.60271 77991,Gemeente Westerveld,2613,DR,156,NL,52.827,6.2906 78031,Gieten,2613,DR,156,NL,53.005,6.76389 78104,Havelte,2613,DR,156,NL,52.76941,6.24015 78181,Hoogeveen,2613,DR,156,NL,52.7225,6.47639 78235,Klazienaveen,2613,DR,156,NL,52.72417,6.99028 78241,Koekange,2613,DR,156,NL,52.69917,6.31667 78255,Krakeel,2613,DR,156,NL,52.72339,6.51146 78354,Marsdijk,2613,DR,156,NL,53.01766,6.58527 78381,Meppel,2613,DR,156,NL,52.69583,6.19444 78431,Nieuw-Buinen,2613,DR,156,NL,52.9625,6.95 78432,Nieuw-Dordrecht,2613,DR,156,NL,52.74833,6.96806 78436,Nieuw-Roden,2613,DR,156,NL,53.13167,6.39722 78463,Noordbarge,2613,DR,156,NL,52.77237,6.88713 78473,Norg,2613,DR,156,NL,53.06667,6.45833 78484,Odoorn,2613,DR,156,NL,52.84917,6.85139 78516,Oosterhesselen,2613,DR,156,NL,52.75417,6.72222 78581,Paterswolde,2613,DR,156,NL,53.145,6.56528 78583,Peelo,2613,DR,156,NL,53.01719,6.56208 78585,Peize,2613,DR,156,NL,53.14667,6.49722 78633,Roden,2613,DR,156,NL,53.1375,6.42083 78636,Rolde,2613,DR,156,NL,52.98417,6.64861 78648,Ruinen,2613,DR,156,NL,52.7625,6.35417 78649,Ruinerwold,2613,DR,156,NL,52.72333,6.24861 78679,Schoonebeek,2613,DR,156,NL,52.6625,6.88472 78681,Schoonoord,2613,DR,156,NL,52.84583,6.75556 78709,Sleen,2613,DR,156,NL,52.77167,6.80278 78796,Tweede Exloërmond,2613,DR,156,NL,52.90917,6.93333 78802,Tynaarlo,2613,DR,156,NL,53.0775,6.61667 78809,Uffelte,2613,DR,156,NL,52.79,6.28056 78832,Valthe,2613,DR,156,NL,52.84583,6.89444 78833,Valthermond,2613,DR,156,NL,52.88167,6.9625 78838,Veenoord,2613,DR,156,NL,52.71087,6.84869 78857,Vledder,2613,DR,156,NL,52.85583,6.20833 78885,Vries,2613,DR,156,NL,53.07417,6.57778 78917,Weiteveen,2613,DR,156,NL,52.6725,6.9875 78935,Westerbork,2613,DR,156,NL,52.85,6.60833 78943,Westlaren,2613,DR,156,NL,53.0848,6.66469 78976,Wolfsbos,2613,DR,156,NL,52.71734,6.49881 79028,Zuidlaren,2613,DR,156,NL,53.09417,6.68194 77327,Almere Stad,2619,FL,156,NL,52.37025,5.21413 77427,Biddinghuizen,2619,FL,156,NL,52.455,5.69306 77612,Dronten,2619,FL,156,NL,52.525,5.71806 77652,Emmeloord,2619,FL,156,NL,52.71083,5.74861 77661,Ens,2619,FL,156,NL,52.63667,5.82778 77704,Gemeente Almere,2619,FL,156,NL,52.36861,5.2375 77773,Gemeente Dronten,2619,FL,156,NL,52.5,5.71667 77855,Gemeente Lelystad,2619,FL,156,NL,52.47542,5.43811 77888,Gemeente Noordoostpolder,2619,FL,156,NL,52.71703,5.77248 77963,Gemeente Urk,2619,FL,156,NL,52.66585,5.62371 78008,Gemeente Zeewolde,2619,FL,156,NL,52.3442,5.45904 78288,Lelystad,2619,FL,156,NL,52.50833,5.475 78819,Urk,2619,FL,156,NL,52.6625,5.60139 79002,Zeewolde,2619,FL,156,NL,52.33,5.54167 77321,Akkrum,2622,FR,156,NL,53.05024,5.83087 77323,Aldeboarn,2622,FR,156,NL,53.05,5.9 77324,Aldlân-Oost,2622,FR,156,NL,53.1886,5.82825 77351,Appelscha,2622,FR,156,NL,52.95526,6.35053 77359,Augustinusga,2622,FR,156,NL,53.21785,6.1617 77373,Bakhuizen,2622,FR,156,NL,52.86975,5.45926 77374,Bakkeveen,2622,FR,156,NL,53.08072,6.25671 77375,Balk,2622,FR,156,NL,52.89756,5.57964 77394,Beetsterzwaag,2622,FR,156,NL,53.05914,6.07711 77420,Berltsum,2622,FR,156,NL,53.2437,5.65101 77431,Bilgaard,2622,FR,156,NL,53.21551,5.79574 77452,Bolsward,2622,FR,156,NL,53.06555,5.53176 77453,Boornbergum,2622,FR,156,NL,53.08284,6.04578 77487,Broeksterwâld,2622,FR,156,NL,53.27466,5.99648 77501,Buitenpost,2622,FR,156,NL,53.25166,6.14483 77505,Burdaard,2622,FR,156,NL,53.29421,5.87897 77507,Burgum,2622,FR,156,NL,53.19243,5.99009 77510,Camminghaburen,2622,FR,156,NL,53.20973,5.84318 77530,Damwâld,2622,FR,156,NL,53.29046,5.99785 77535,De Domp,2622,FR,156,NL,53.03113,5.67716 77537,De Drait,2622,FR,156,NL,53.09743,6.06791 77538,De Fryske Marren,2622,FR,156,NL,52.96906,5.77246 77541,De Greiden,2622,FR,156,NL,52.9496,5.91366 77548,De Knipe,2622,FR,156,NL,52.96829,5.97116 77561,De Westereen,2622,FR,156,NL,53.25731,6.0363 77588,Dokkum,2622,FR,156,NL,53.32224,5.99697 77593,Donkerbroek,2622,FR,156,NL,53.01734,6.23927 77602,Drachten,2622,FR,156,NL,53.11254,6.0989 77603,Drachtstercompagnie,2622,FR,156,NL,53.13462,6.14153 77610,Drogeham,2622,FR,156,NL,53.20213,6.11183 77611,Dronryp,2622,FR,156,NL,53.2,5.65 77621,Eastermar,2622,FR,156,NL,53.17466,6.05999 77622,Echtenerbrug,2622,FR,156,NL,52.87141,5.82147 77673,Feanwâlden,2622,FR,156,NL,53.23558,5.98832 77675,Ferwert,2622,FR,156,NL,53.33784,5.82533 77678,Franeker,2622,FR,156,NL,53.18546,5.54123 77683,Garyp,2622,FR,156,NL,53.16667,5.96667 77699,Gemeente Achtkarspelen,2622,FR,156,NL,53.21167,6.13776 77707,Gemeente Ameland,2622,FR,156,NL,53.45024,5.78277 77755,Gemeente Dantumadiel,2622,FR,156,NL,53.29113,5.99545 77809,Gemeente Harlingen,2622,FR,156,NL,53.17525,5.41806 77814,Gemeente Heerenveen,2622,FR,156,NL,52.9422,6.0441 77851,Gemeente Leeuwarden,2622,FR,156,NL,53.18602,5.81111 77900,Gemeente Ooststellingwerf,2622,FR,156,NL,52.98264,6.27515 77903,Gemeente Opsterland,2622,FR,156,NL,53.04849,6.12128 77932,Gemeente Schiermonnikoog,2622,FR,156,NL,53.48707,6.22917 77939,Gemeente Smallingerland,2622,FR,156,NL,53.11667,6.03333 77950,Gemeente Terschelling,2622,FR,156,NL,53.4,5.35 77959,Gemeente Tytsjerksteradiel,2622,FR,156,NL,53.19966,5.95802 77976,Gemeente Vlieland,2622,FR,156,NL,53.2532,4.95071 77994,Gemeente Weststellingwerf,2622,FR,156,NL,52.87647,6.01998 78042,Gorredijk,2622,FR,156,NL,53.00659,6.06402 78047,Goutum,2622,FR,156,NL,53.17734,5.8037 78068,Grou,2622,FR,156,NL,53.09456,5.83745 78073,Gytsjerk,2622,FR,156,NL,53.24293,5.89502 78086,Hallum,2622,FR,156,NL,53.30657,5.78379 78095,Harkema,2622,FR,156,NL,53.18333,6.13333 78097,Harlingen,2622,FR,156,NL,53.17477,5.42244 78103,Haulerwijk,2622,FR,156,NL,53.06468,6.33453 78106,Heechterp,2622,FR,156,NL,53.20963,5.8225 78107,Heeg,2622,FR,156,NL,52.9686,5.61075 78114,Heerenveen,2622,FR,156,NL,52.95929,5.91854 78162,Hoek,2622,FR,156,NL,53.20455,5.80192 78170,Hollum,2622,FR,156,NL,53.4394,5.63805 78172,Holwerd,2622,FR,156,NL,53.36815,5.90073 78193,Huizum,2622,FR,156,NL,53.1917,5.81119 78198,Hurdegaryp,2622,FR,156,NL,53.21333,5.94137 78200,IJlst,2622,FR,156,NL,53.01009,5.62312 78206,Jirnsum,2622,FR,156,NL,53.07753,5.79254 78207,Joure,2622,FR,156,NL,52.9657,5.80301 78208,Jubbega,2622,FR,156,NL,53.00396,6.12183 78243,Kollum,2622,FR,156,NL,53.27695,6.15293 78244,Kollumerzwaag,2622,FR,156,NL,53.26224,6.07544 78247,Kootstertille,2622,FR,156,NL,53.21261,6.09209 78254,Koudum,2622,FR,156,NL,52.91551,5.44834 78272,Langweer,2622,FR,156,NL,52.95836,5.72173 78283,Leeuwarden,2622,FR,156,NL,53.20139,5.80859 78289,Lemmer,2622,FR,156,NL,52.84618,5.70912 78343,Makkum,2622,FR,156,NL,53.05458,5.40231 78347,Mantgum,2622,FR,156,NL,53.12865,5.71924 78353,Marrum,2622,FR,156,NL,53.32277,5.80198 78355,Marsum,2622,FR,156,NL,53.2105,5.72637 78380,Menaam,2622,FR,156,NL,53.21797,5.66124 78403,Minnertsga,2622,FR,156,NL,53.25104,5.59513 78427,Nes,2622,FR,156,NL,53.44502,5.774 78442,Nieuwehorne,2622,FR,156,NL,52.95113,6.06342 78460,Noardburgum,2622,FR,156,NL,53.22135,6.00523 78472,Noordwolde,2622,FR,156,NL,52.88964,6.14153 78486,Oentsjerk,2622,FR,156,NL,53.25,5.9 78493,Oldeberkoop,2622,FR,156,NL,52.93788,6.13089 78507,Oost-Vlieland,2622,FR,156,NL,53.29703,5.07431 78524,Oosterwolde,2622,FR,156,NL,52.99164,6.29096 78533,Opeinde,2622,FR,156,NL,53.1341,6.05656 78539,Oppenhuizen,2622,FR,156,NL,53.01194,5.69495 78542,Oranjewoud,2622,FR,156,NL,52.94579,5.95038 78560,Oudega,2622,FR,156,NL,53.12504,5.99888 78561,Oudehaske,2622,FR,156,NL,52.95709,5.87095 78562,Oudemirdum,2622,FR,156,NL,52.85019,5.53544 78566,Oudeschoot,2622,FR,156,NL,52.93343,5.95579 78643,Rottevalle,2622,FR,156,NL,53.14523,6.10411 78661,Scharnegoutum,2622,FR,156,NL,53.06051,5.67822 78670,Schiermonnikoog,2622,FR,156,NL,53.48025,6.15209 78689,Sexbierum,2622,FR,156,NL,53.21823,5.48402 78694,Sint Annaparochie,2622,FR,156,NL,53.2762,5.65727 78696,Sint Jacobiparochie,2622,FR,156,NL,53.27291,5.60354 78700,Sint Nicolaasga,2622,FR,156,NL,52.92293,5.74242 78707,Sintjohannesga,2622,FR,156,NL,52.93157,5.85588 78717,Sneek,2622,FR,156,NL,53.03297,5.6589 78741,Stadsfenne,2622,FR,156,NL,53.03987,5.67844 78759,Stiens,2622,FR,156,NL,53.26234,5.75769 78766,Sûdwest Fryslân,2622,FR,156,NL,53.01056,5.5258 78765,Surhuisterveen,2622,FR,156,NL,53.18477,6.17031 78773,Ternaard,2622,FR,156,NL,53.38203,5.96523 78785,Tijnje,2622,FR,156,NL,53.03058,5.99193 78787,Tinga,2622,FR,156,NL,53.02064,5.64575 78799,Twijzel,2622,FR,156,NL,53.23152,6.08952 78800,Twijzelerheide,2622,FR,156,NL,53.24015,6.04591 78803,Tytsjerk,2622,FR,156,NL,53.21343,5.90961 78804,Tzummarum,2622,FR,156,NL,53.23733,5.54612 78818,Ureterp,2622,FR,156,NL,53.09244,6.16718 78890,Waadhoeke,2622,FR,156,NL,53.18947,5.50793 78905,Warga,2622,FR,156,NL,53.15145,5.84404 78930,West-Terschelling,2622,FR,156,NL,53.35911,5.21482 78932,Westeinde,2622,FR,156,NL,53.20853,5.76812 78957,Wijnjewoude,2622,FR,156,NL,53.05814,6.2047 78966,Wirdum,2622,FR,156,NL,53.14893,5.80387 78970,Witmarsum,2622,FR,156,NL,53.10452,5.46902 78978,Wolvega,2622,FR,156,NL,52.87545,5.99691 78979,Wommels,2622,FR,156,NL,53.10883,5.58749 78982,Workum,2622,FR,156,NL,52.97969,5.4471 78987,Woudsend,2622,FR,156,NL,52.94357,5.62843 79026,Zuiderburen,2622,FR,156,NL,53.1734,5.84271 77300,s-Heerenberg,2611,GE,156,NL,51.8767,6.25877 77309,Aalst,2611,GE,156,NL,51.7825,5.12778 77310,Aalten,2611,GE,156,NL,51.925,6.58056 77319,Afferden,2611,GE,156,NL,51.88,5.63472 77331,Alverna,2611,GE,156,NL,51.80417,5.75972 77337,Ammerzoden,2611,GE,156,NL,51.74917,5.22083 77343,Andelst,2611,GE,156,NL,51.90833,5.72917 77345,Angeren,2611,GE,156,NL,51.91583,5.95833 77346,Angerlo,2611,GE,156,NL,51.99583,6.13472 77348,Anklaar,2611,GE,156,NL,52.23111,5.98497 77350,Apeldoorn,2611,GE,156,NL,52.21,5.96944 77356,Arnhem,2611,GE,156,NL,51.98,5.91111 77369,Babberich,2611,GE,156,NL,51.9075,6.11111 77372,Bakenberg,2611,GE,156,NL,52.00511,5.8771 77382,Barneveld,2611,GE,156,NL,52.14,5.58472 77388,Beek gem Montferland,2611,GE,156,NL,51.90667,6.1875 77389,Beekbergen,2611,GE,156,NL,52.16,5.96389 77392,Beesd,2611,GE,156,NL,51.8875,5.19167 77399,Beltrum,2611,GE,156,NL,52.06667,6.56389 77400,Bemmel,2611,GE,156,NL,51.89167,5.89861 77402,Bennekom,2611,GE,156,NL,51.99833,5.67639 77405,Berg en Bos,2611,GE,156,NL,52.22009,5.9334 77406,Berg en Dal,2611,GE,156,NL,51.82167,5.91667 77409,Bergharen,2611,GE,156,NL,51.85083,5.66944 77415,Berkelland,2611,GE,156,NL,52.10606,6.56748 77424,Beuningen,2611,GE,156,NL,51.86083,5.76667 77425,Beusichem,2611,GE,156,NL,51.95,5.29167 77433,Binnenstad,2611,GE,156,NL,52.21304,5.95957 77454,Borculo,2611,GE,156,NL,52.11583,6.52222 77470,Brakel,2611,GE,156,NL,51.8175,5.09028 77471,Brakkenstein,2611,GE,156,NL,51.81324,5.86539 77474,Bredevoort,2611,GE,156,NL,51.94167,6.62083 77475,Bredeweg,2611,GE,156,NL,51.76019,5.94189 77481,Brinkhorst,2611,GE,156,NL,52.21302,5.95167 77489,Bruchem,2611,GE,156,NL,51.78667,5.23611 77492,Brummelhof,2611,GE,156,NL,52.20503,5.96789 77493,Brummen,2611,GE,156,NL,52.09,6.15556 77506,Burgemeesterswijk,2611,GE,156,NL,51.98943,5.89597 77522,Componistenkwartier,2611,GE,156,NL,52.18977,5.96609 77523,Corlaer,2611,GE,156,NL,52.21639,5.46535 77527,Culemborg,2611,GE,156,NL,51.955,5.22778 77534,De Bouwhof,2611,GE,156,NL,52.18546,5.94704 77543,De Haven,2611,GE,156,NL,52.21045,5.97407 77545,De Heeze,2611,GE,156,NL,52.20061,5.95365 77554,De Mheen,2611,GE,156,NL,52.21954,5.99141 77564,Deest,2611,GE,156,NL,51.89,5.66667 77565,Deil,2611,GE,156,NL,51.88417,5.24306 77579,Dieren,2611,GE,156,NL,52.0525,6.1 77586,Doesburg,2611,GE,156,NL,52.0125,6.13889 77587,Doetinchem,2611,GE,156,NL,51.965,6.28889 77596,Doornenburg,2611,GE,156,NL,51.89,6.0 77597,Doornspijk,2611,GE,156,NL,52.41833,5.81806 77598,Doornsteeg,2611,GE,156,NL,52.23,5.45417 77599,Doorwerth,2611,GE,156,NL,51.97917,5.79722 77606,Driehuizen,2611,GE,156,NL,52.20879,5.94442 77607,Driel,2611,GE,156,NL,51.95917,5.81389 77613,Drumpt,2611,GE,156,NL,51.897,5.41043 77614,Druten,2611,GE,156,NL,51.88833,5.60556 77617,Duiven,2611,GE,156,NL,51.94667,6.01389 77625,Ede,2611,GE,156,NL,52.03333,5.65833 77626,Ederveen,2611,GE,156,NL,52.06333,5.57778 77627,Eefde,2611,GE,156,NL,52.16667,6.225 77630,Eerbeek,2611,GE,156,NL,52.105,6.05833 77639,Eibergen,2611,GE,156,NL,52.1,6.64861 77645,Elburg,2611,GE,156,NL,52.4475,5.84306 77646,Elden,2611,GE,156,NL,51.95833,5.88194 77647,Ellecom,2611,GE,156,NL,52.0325,6.0875 77650,Elspeet,2611,GE,156,NL,52.29167,5.78889 77651,Elst,2611,GE,156,NL,51.91917,5.84167 77659,Emst,2611,GE,156,NL,52.31583,5.97361 77664,Epe,2611,GE,156,NL,52.3475,5.98333 77665,Epse,2611,GE,156,NL,52.225,6.2 77666,Ermelo,2611,GE,156,NL,52.29833,5.62222 77670,Etten,2611,GE,156,NL,51.91667,6.33611 77681,Gameren,2611,GE,156,NL,51.80083,5.20417 77682,Garderen,2611,GE,156,NL,52.23083,5.71389 77689,Geitenkamp,2611,GE,156,NL,52.00379,5.93862 77690,Geldermalsen,2611,GE,156,NL,51.88083,5.28889 77691,Geldermalsen-West,2611,GE,156,NL,51.87968,5.28015 77698,Gemeente Aalten,2611,GE,156,NL,51.9242,6.56574 77711,Gemeente Apeldoorn,2611,GE,156,NL,52.18722,5.91969 77713,Gemeente Arnhem,2611,GE,156,NL,52.00113,5.89641 77719,Gemeente Barneveld,2611,GE,156,NL,52.1688,5.63985 77723,Gemeente Berg en Dal,2611,GE,156,NL,51.78412,5.92968 77729,Gemeente Beuningen,2611,GE,156,NL,51.8595,5.74362 77742,Gemeente Bronckhorst,2611,GE,156,NL,52.04401,6.30378 77743,Gemeente Brummen,2611,GE,156,NL,52.11063,6.11791 77747,Gemeente Buren,2611,GE,156,NL,51.90901,5.33403 77753,Gemeente Culemborg,2611,GE,156,NL,51.94465,5.20946 77767,Gemeente Doesburg,2611,GE,156,NL,52.01935,6.14855 77768,Gemeente Doetinchem,2611,GE,156,NL,51.96216,6.27955 77774,Gemeente Druten,2611,GE,156,NL,51.87184,5.61322 77775,Gemeente Duiven,2611,GE,156,NL,51.9474,6.0172 77778,Gemeente Ede,2611,GE,156,NL,52.08118,5.7449 77782,Gemeente Elburg,2611,GE,156,NL,52.41487,5.84868 77786,Gemeente Epe,2611,GE,156,NL,52.33394,5.96175 77787,Gemeente Ermelo,2611,GE,156,NL,52.28826,5.65538 77807,Gemeente Harderwijk,2611,GE,156,NL,52.3454,5.63948 77810,Gemeente Hattem,2611,GE,156,NL,52.47566,6.05195 77813,Gemeente Heerde,2611,GE,156,NL,52.38833,6.03889 77824,Gemeente Heumen,2611,GE,156,NL,51.77438,5.81312 77858,Gemeente Lingewaard,2611,GE,156,NL,51.89558,5.94577 77860,Gemeente Lochem,2611,GE,156,NL,52.18478,6.337 77865,Gemeente Maasdriel,2611,GE,156,NL,51.77337,5.29711 77877,Gemeente Montferland,2611,GE,156,NL,51.91925,6.21333 77880,Gemeente Neder-Betuwe,2611,GE,156,NL,51.91442,5.57147 77884,Gemeente Nijkerk,2611,GE,156,NL,52.217,5.483 77885,Gemeente Nijmegen,2611,GE,156,NL,51.84168,5.83813 77891,Gemeente Nunspeet,2611,GE,156,NL,52.33524,5.78771 77895,Gemeente Oldebroek,2611,GE,156,NL,52.44502,5.90086 77907,Gemeente Overbetuwe,2611,GE,156,NL,51.91843,5.78686 77913,Gemeente Putten,2611,GE,156,NL,52.24438,5.57827 77916,Gemeente Renkum,2611,GE,156,NL,51.99036,5.78723 77919,Gemeente Rheden,2611,GE,156,NL,52.03386,6.04547 77927,Gemeente Rozendaal,2611,GE,156,NL,52.03913,5.97268 77930,Gemeente Scherpenzeel,2611,GE,156,NL,52.08773,5.48698 77954,Gemeente Tiel,2611,GE,156,NL,51.88463,5.40429 77980,Gemeente Voorst,2611,GE,156,NL,52.22965,6.09992 77985,Gemeente Wageningen,2611,GE,156,NL,51.96876,5.66675 77990,Gemeente West Maas en Waal,2611,GE,156,NL,51.84494,5.51074 77992,Gemeente Westervoort,2611,GE,156,NL,51.95949,5.97435 77997,Gemeente Wijchen,2611,GE,156,NL,51.81884,5.69862 78000,Gemeente Winterswijk,2611,GE,156,NL,51.97226,6.72544 78006,Gemeente Zaltbommel,2611,GE,156,NL,51.7868,5.15254 78010,Gemeente Zevenaar,2611,GE,156,NL,51.95376,6.07727 78015,Gemeente Zutphen,2611,GE,156,NL,52.13145,6.23132 78022,Gendringen,2611,GE,156,NL,51.87333,6.37639 78023,Gendt,2611,GE,156,NL,51.8775,5.97083 78027,Giesbeek,2611,GE,156,NL,51.99333,6.06667 78043,Gorssel,2611,GE,156,NL,52.20167,6.20139 78061,Groesbeek,2611,GE,156,NL,51.77667,5.93611 78062,Groessen,2611,GE,156,NL,51.93167,6.02639 78069,Gulden Bodem,2611,GE,156,NL,51.99428,5.8908 78074,Haaften,2611,GE,156,NL,51.81583,5.21111 78076,Haalderen,2611,GE,156,NL,51.8875,5.92917 78092,Harderwijk,2611,GE,156,NL,52.34167,5.62083 78098,Harskamp,2611,GE,156,NL,52.13,5.75278 78100,Hatert,2611,GE,156,NL,51.80635,5.83057 78101,Hattem,2611,GE,156,NL,52.475,6.06389 78102,Hattemerbroek,2611,GE,156,NL,52.47417,6.02222 78105,Hedel,2611,GE,156,NL,51.74802,5.26134 78109,Heelsum,2611,GE,156,NL,51.98417,5.75833 78113,Heerde,2611,GE,156,NL,52.38723,6.04016 78115,Heerewaarden,2611,GE,156,NL,51.81769,5.393 78120,Hees,2611,GE,156,NL,51.84136,5.82846 78141,Hengelo,2611,GE,156,NL,52.05083,6.30972 78143,Hengstdal,2611,GE,156,NL,51.83333,5.88333 78148,Herwijnen,2611,GE,156,NL,51.82667,5.12917 78149,Het Loo,2611,GE,156,NL,52.2339,5.95275 78151,Heteren,2611,GE,156,NL,51.95667,5.75556 78153,Heumen,2611,GE,156,NL,51.765,5.84444 78183,Hoogkamp,2611,GE,156,NL,51.9963,5.88026 78188,Horssen,2611,GE,156,NL,51.85583,5.60972 78196,Hummelo,2611,GE,156,NL,52.00417,6.23333 78197,Hunnerberg,2611,GE,156,NL,51.84209,5.87876 78204,Ingen,2611,GE,156,NL,51.95917,5.48472 78221,Keijenborg,2611,GE,156,NL,52.02917,6.29444 78225,Kerkdriel,2611,GE,156,NL,51.77167,5.33472 78229,Kerschoten,2611,GE,156,NL,52.23333,5.96667 78231,Kesteren,2611,GE,156,NL,51.935,5.56944 78248,Kootwijkerbroek,2611,GE,156,NL,52.15083,5.66944 78273,Laren,2611,GE,156,NL,52.19417,6.36528 78282,Leesten,2611,GE,156,NL,52.1279,6.23217 78290,Lent,2611,GE,156,NL,51.86167,5.86667 78295,Leuth,2611,GE,156,NL,51.83917,5.99167 78297,Lichtenvoorde,2611,GE,156,NL,51.98667,6.56667 78299,Lienden,2611,GE,156,NL,51.94833,5.51806 78309,Lindenholt,2611,GE,156,NL,51.8327,5.7934 78315,Lobith,2611,GE,156,NL,51.8625,6.11806 78316,Lochem,2611,GE,156,NL,52.15917,6.41111 78317,Loenen,2611,GE,156,NL,52.1175,6.01944 78327,Lunteren,2611,GE,156,NL,52.085,5.62222 78345,Malburgen West,2611,GE,156,NL,51.96811,5.89743 78357,Matendonk,2611,GE,156,NL,52.19766,6.01115 78358,Matendreef,2611,GE,156,NL,52.19993,5.98592 78359,Matengaarde,2611,GE,156,NL,52.19793,5.9957 78360,Matenhoeve,2611,GE,156,NL,52.19056,6.01338 78361,Matenhorst,2611,GE,156,NL,52.20482,5.99304 78362,Matenveld,2611,GE,156,NL,52.18767,5.99879 78363,Maurik,2611,GE,156,NL,51.96083,5.42222 78386,Meteren,2611,GE,156,NL,51.865,5.28333 78420,Nederhemert,2611,GE,156,NL,51.76518,5.16817 78421,Nederhemert-Noord,2611,GE,156,NL,51.76322,5.17305 78423,Nederwoud,2611,GE,156,NL,52.10083,5.57083 78424,Neede,2611,GE,156,NL,52.13417,6.61389 78452,Nijkerk,2611,GE,156,NL,52.22,5.48611 78453,Nijkerkerveen,2611,GE,156,NL,52.195,5.46667 78454,Nijmegen,2611,GE,156,NL,51.8425,5.85278 78476,Nunspeet,2611,GE,156,NL,52.37917,5.78611 78481,Ochten,2611,GE,156,NL,51.91,5.56944 78494,Oldebroek,2611,GE,156,NL,52.445,5.90139 78505,Ooij,2611,GE,156,NL,51.85465,5.93915 78506,Oost Gelre,2611,GE,156,NL,52.00425,6.54958 78513,Oostendorp,2611,GE,156,NL,52.44722,5.85443 78514,Oosterbeek,2611,GE,156,NL,51.98583,5.84583 78520,Oosterhout,2611,GE,156,NL,51.88,5.82639 78531,Ooy,2611,GE,156,NL,51.91917,6.05833 78532,Ooyerhoek,2611,GE,156,NL,52.12838,6.22307 78534,Ophemert,2611,GE,156,NL,51.845,5.3875 78535,Opheusden,2611,GE,156,NL,51.93167,5.63194 78537,Opijnen,2611,GE,156,NL,51.82917,5.29861 78543,Orden,2611,GE,156,NL,52.20113,5.93417 78549,Otterlo,2611,GE,156,NL,52.1,5.77222 78557,Oude IJsselstreek,2611,GE,156,NL,51.89963,6.38078 78569,Overasselt,2611,GE,156,NL,51.76,5.78889 78576,Pannerden,2611,GE,156,NL,51.89083,6.03889 78598,Puiflijk,2611,GE,156,NL,51.87833,5.59028 78602,Putten,2611,GE,156,NL,52.25917,5.60694 78614,Renkum,2611,GE,156,NL,51.97667,5.73333 78618,Rheden,2611,GE,156,NL,52.005,6.02917 78631,Rivierenkwartier,2611,GE,156,NL,52.18914,5.97665 78639,Rossum,2611,GE,156,NL,51.80083,5.33333 78645,Rozendaal,2611,GE,156,NL,52.00583,5.9625 78650,Ruurlo,2611,GE,156,NL,52.08833,6.45 78666,Scherpenzeel,2611,GE,156,NL,52.08,5.48889 78692,Silvolde,2611,GE,156,NL,51.90917,6.3875 78716,Sluisoord,2611,GE,156,NL,52.22291,5.98145 78724,Spainkbos,2611,GE,156,NL,52.22228,5.94738 78735,Sprengenbos,2611,GE,156,NL,52.21902,5.94163 78736,Sprengenweg-Noord,2611,GE,156,NL,52.21839,5.95068 78737,Sprenkelaar,2611,GE,156,NL,52.22512,5.99922 78739,Staatsliedenkwartier,2611,GE,156,NL,52.19951,5.97691 78749,Steenderen,2611,GE,156,NL,52.06417,6.1875 78753,Stegeslag,2611,GE,156,NL,51.94151,6.06194 78757,Sterrenberg,2611,GE,156,NL,51.9935,5.88387 78770,Terborg,2611,GE,156,NL,51.92,6.35417 78775,Terschuur,2611,GE,156,NL,52.165,5.51667 78777,Terwolde,2611,GE,156,NL,52.28333,6.1 78783,Tiel,2611,GE,156,NL,51.88667,5.42917 78789,Tolkamer,2611,GE,156,NL,51.855,6.10278 78791,Tricht,2611,GE,156,NL,51.89083,5.26806 78798,Twello,2611,GE,156,NL,52.23667,6.10278 78806,Uddel,2611,GE,156,NL,52.25917,5.78056 78810,Ugchelen,2611,GE,156,NL,52.18464,5.93177 78825,Vaassen,2611,GE,156,NL,52.28583,5.96667 78826,Valburg,2611,GE,156,NL,51.91167,5.79028 78827,Valendries,2611,GE,156,NL,51.80658,5.73445 78834,Varsseveld,2611,GE,156,NL,51.94333,6.45833 78842,Velp,2611,GE,156,NL,51.995,5.97361 78867,Vogelkwartier,2611,GE,156,NL,52.19777,5.96721 78877,Voorst,2611,GE,156,NL,52.17,6.14167 78878,Voorthuizen,2611,GE,156,NL,52.18667,5.60556 78879,Vorden,2611,GE,156,NL,52.105,6.30972 78881,Vredenburg,2611,GE,156,NL,51.95355,5.90284 78889,Vuren,2611,GE,156,NL,51.825,5.04583 78894,Waardenburg,2611,GE,156,NL,51.8325,5.25694 78900,Wageningen,2611,GE,156,NL,51.97,5.66667 78903,Wapenveld,2611,GE,156,NL,52.42917,6.07361 78907,Warnsveld,2611,GE,156,NL,52.1375,6.23056 78918,Wekerom,2611,GE,156,NL,52.1125,5.71389 78920,Welgelegen,2611,GE,156,NL,52.21397,5.97643 78928,West Betuwe,2611,GE,156,NL,51.86158,5.20935 78933,Westeneng,2611,GE,156,NL,52.1275,5.71528 78934,Westenenk,2611,GE,156,NL,52.19624,5.95656 78939,Westervoort,2611,GE,156,NL,51.95583,5.97222 78950,Wijchen,2611,GE,156,NL,51.80917,5.725 78962,Winkewijert,2611,GE,156,NL,52.19082,5.95794 78965,Winterswijk,2611,GE,156,NL,51.9725,6.71944 78967,Wisch,2611,GE,156,NL,51.92648,6.41705 78975,Wolfheze,2611,GE,156,NL,52.00333,5.79028 78985,Woudhuis,2611,GE,156,NL,52.21323,6.01124 78996,Zaltbommel,2611,GE,156,NL,51.81,5.24444 78999,Zeddam,2611,GE,156,NL,51.90333,6.25972 79006,Zelhem,2611,GE,156,NL,52.00667,6.34861 79008,Zetten,2611,GE,156,NL,51.92833,5.71389 79009,Zevenaar,2611,GE,156,NL,51.93,6.07083 79012,Zevenhuizen,2611,GE,156,NL,52.21816,5.97841 79015,Zoelen,2611,GE,156,NL,51.9125,5.40278 79019,Zonnemaat,2611,GE,156,NL,51.93115,6.06235 79030,Zuilichem,2611,GE,156,NL,51.80917,5.13611 79032,Zutphen,2611,GE,156,NL,52.13833,6.20139 77318,Aduard,2617,GR,156,NL,53.25667,6.45972 77352,Appingedam,2617,GR,156,NL,53.32167,6.85833 77370,Baflo,2617,GR,156,NL,53.3625,6.51389 77384,Bedum,2617,GR,156,NL,53.30083,6.60278 77398,Bellingwolde,2617,GR,156,NL,53.11583,7.16528 77441,Blijham,2617,GR,156,NL,53.10917,7.07639 77517,Coendersborg,2617,GR,156,NL,53.1941,6.58944 77562,De Wijert,2617,GR,156,NL,53.1945,6.57117 77569,Delfzijl,2617,GR,156,NL,53.33,6.91806 77629,Eenrum,2617,GR,156,NL,53.3625,6.45833 77635,Eexta,2617,GR,156,NL,53.16386,6.98344 77672,Farmsum,2617,GR,156,NL,53.32167,6.92639 77694,Gemeente Oldambt,2617,GR,156,NL,53.16859,7.04224 77712,Gemeente Appingedam,2617,GR,156,NL,53.31926,6.84864 77760,Gemeente Delfzijl,2617,GR,156,NL,53.30019,6.93129 77800,Gemeente Groningen,2617,GR,156,NL,53.22369,6.56479 77863,Gemeente Loppersum,2617,GR,156,NL,53.33849,6.72149 77910,Gemeente Pekela,2617,GR,156,NL,53.05969,6.9651 77943,Gemeente Stadskanaal,2617,GR,156,NL,53.00005,6.98906 77968,Gemeente Veendam,2617,GR,156,NL,53.08951,6.87923 78035,Glimmen,2617,GR,156,NL,53.13917,6.62917 78056,Grijpskerk,2617,GR,156,NL,53.2625,6.30833 78063,Groningen,2617,GR,156,NL,53.21917,6.56667 78067,Grootegast,2617,GR,156,NL,53.2125,6.27361 78093,Haren,2617,GR,156,NL,53.17209,6.60931 78096,Harkstede,2617,GR,156,NL,53.21333,6.69861 78129,Heiligerlee,2617,GR,156,NL,53.15667,7.00972 78136,Helpman,2617,GR,156,NL,53.19794,6.57978 78182,Hoogezand,2617,GR,156,NL,53.16167,6.76111 78250,Korrewegwijk,2617,GR,156,NL,53.23235,6.56804 78276,Leek,2617,GR,156,NL,53.1625,6.37639 78278,Leens,2617,GR,156,NL,53.36,6.37917 78322,Loppersum,2617,GR,156,NL,53.33167,6.74722 78356,Marum,2617,GR,156,NL,53.14417,6.2625 78366,Meeden,2617,GR,156,NL,53.14,6.92639 78392,Middelstum,2617,GR,156,NL,53.34667,6.64167 78393,Midden-Groningen,2617,GR,156,NL,53.15113,6.83313 78396,Midwolda,2617,GR,156,NL,53.195,7.01389 78428,Niekerk,2617,GR,156,NL,53.225,6.35278 78439,Nieuwe Pekela,2617,GR,156,NL,53.07917,6.96528 78447,Nieuwolda,2617,GR,156,NL,53.24417,6.975 78464,Noordbroek,2617,GR,156,NL,53.195,6.87361 78469,Noordhorn,2617,GR,156,NL,53.26167,6.39583 78480,Obergum,2617,GR,156,NL,53.33333,6.51667 78495,Oldehove,2617,GR,156,NL,53.30333,6.39583 78499,Ommelanderwijk,2617,GR,156,NL,53.08917,6.90556 78503,Onstwedde,2617,GR,156,NL,53.035,7.04028 78518,Oosterhoogebrug,2617,GR,156,NL,53.22892,6.60141 78523,Oosterpark,2617,GR,156,NL,53.2237,6.5853 78558,Oude Pekela,2617,GR,156,NL,53.10417,7.00972 78612,Reitdiep,2617,GR,156,NL,53.24252,6.51957 78652,Sappemeer,2617,GR,156,NL,53.16417,6.79028 78662,Scheemda,2617,GR,156,NL,53.17333,6.97222 78673,Schildwolde,2617,GR,156,NL,53.23327,6.81566 78685,Sellingen,2617,GR,156,NL,52.94583,7.15139 78686,Selwerd,2617,GR,156,NL,53.2352,6.5545 78691,Siddeburen,2617,GR,156,NL,53.25,6.86806 78712,Slochteren,2617,GR,156,NL,53.22078,6.80547 78732,Spijk,2617,GR,156,NL,53.39,6.8375 78742,Stadskanaal,2617,GR,156,NL,52.98947,6.9504 78768,Ten Boer,2617,GR,156,NL,53.27583,6.69444 78769,Ter Apel,2617,GR,156,NL,52.87667,7.05972 78793,Tuikwerd,2617,GR,156,NL,53.31667,6.9 78813,Uithuizen,2617,GR,156,NL,53.4075,6.67083 78814,Uithuizermeeden,2617,GR,156,NL,53.41417,6.72361 78816,Ulrum,2617,GR,156,NL,53.35917,6.33333 78821,Usquert,2617,GR,156,NL,53.4025,6.61111 78836,Veendam,2617,GR,156,NL,53.10667,6.87917 78856,Vlagtwedde,2617,GR,156,NL,53.0275,7.10833 78899,Wagenborgen,2617,GR,156,NL,53.25583,6.93333 78904,Warffum,2617,GR,156,NL,53.3925,6.55833 78938,Westerlee,2617,GR,156,NL,53.14583,6.9875 78940,Westerwolde,2617,GR,156,NL,53.028,7.15671 78958,Wildervank,2617,GR,156,NL,53.08083,6.8625 78963,Winschoten,2617,GR,156,NL,53.14417,7.03472 78964,Winsum,2617,GR,156,NL,53.33,6.52083 79021,Zoutkamp,2617,GR,156,NL,53.33917,6.30417 79025,Zuidbroek,2617,GR,156,NL,53.16333,6.86111 79027,Zuidhorn,2617,GR,156,NL,53.24667,6.40278 77316,Abdissenbosch,2615,LI,156,NL,50.91667,6.03333 77332,Amby,2615,LI,156,NL,50.86215,5.73226 77333,America,2615,LI,156,NL,51.43667,5.97917 77339,Amstenrade,2615,LI,156,NL,50.93917,5.92361 77353,Arcen,2615,LI,156,NL,51.47667,6.18056 77367,Baarlo,2615,LI,156,NL,51.33083,6.09444 77378,Banholt,2615,LI,156,NL,50.79,5.80833 77385,Beegden,2615,LI,156,NL,51.18917,5.91944 77387,Beek,2615,LI,156,NL,50.94083,5.79722 77391,Beersdal,2615,LI,156,NL,50.90597,5.9644 77393,Beesel,2615,LI,156,NL,51.26833,6.03889 77397,Belfort,2615,LI,156,NL,50.84698,5.65991 77404,Berg,2615,LI,156,NL,50.86167,5.78333 77413,Beringe,2615,LI,156,NL,51.33667,5.94861 77429,Biesland,2615,LI,156,NL,50.8411,5.67573 77438,Bleijerheide,2615,LI,156,NL,50.85538,6.06789 77442,Blitterswijck,2615,LI,156,NL,51.53083,6.10833 77447,Bocholtz,2615,LI,156,NL,50.81833,6.00556 77457,Borgharen,2615,LI,156,NL,50.8775,5.6875 77458,Born,2615,LI,156,NL,51.03167,5.80972 77468,Brabander,2615,LI,156,NL,51.53583,5.96806 77469,Brachterbeek,2615,LI,156,NL,51.14694,5.90446 77484,Broekhem,2615,LI,156,NL,50.87119,5.82069 77486,Broeksittard,2615,LI,156,NL,51.0029,5.89511 77491,Brukske,2615,LI,156,NL,51.52101,5.9927 77495,Brunssum,2615,LI,156,NL,50.94667,5.97083 77496,Buchten,2615,LI,156,NL,51.04333,5.80972 77500,Budschop,2615,LI,156,NL,51.28511,5.75898 77502,Bunde,2615,LI,156,NL,50.89667,5.73194 77516,Chevremont,2615,LI,156,NL,50.87554,6.05981 77544,De Heeg,2615,LI,156,NL,50.82454,5.72309 77585,Doenrade,2615,LI,156,NL,50.9675,5.90694 77636,Egchel,2615,LI,156,NL,51.31417,5.97222 77640,Eijsden,2615,LI,156,NL,50.78,5.7177 77641,Eijsden-Margraten,2615,LI,156,NL,50.8009,5.77408 77643,Einighausen,2615,LI,156,NL,51.00167,5.82778 77649,Elsloo,2615,LI,156,NL,50.94917,5.77083 77693,Geleen,2615,LI,156,NL,50.97417,5.82917 77720,Gemeente Beek,2615,LI,156,NL,50.93237,5.80587 77722,Gemeente Beesel,2615,LI,156,NL,51.27016,6.06771 77724,Gemeente Bergen,2615,LI,156,NL,51.57717,6.09014 77744,Gemeente Brunssum,2615,LI,156,NL,50.94451,5.97618 77776,Gemeente Echt-Susteren,2615,LI,156,NL,51.1,5.86667 77792,Gemeente Gennep,2615,LI,156,NL,51.70063,5.98447 77816,Gemeente Heerlen,2615,LI,156,NL,50.88777,5.97407 77833,Gemeente Horst aan de Maas,2615,LI,156,NL,51.45931,6.10254 77842,Gemeente Kerkrade,2615,LI,156,NL,50.87337,6.04876 77856,Gemeente Leudal,2615,LI,156,NL,51.24371,5.89815 77866,Gemeente Maasgouw,2615,LI,156,NL,51.15426,5.87712 77868,Gemeente Maastricht,2615,LI,156,NL,50.85,5.7 77870,Gemeente Meerssen,2615,LI,156,NL,50.89518,5.75711 77879,Gemeente Mook en Middelaar,2615,LI,156,NL,51.74777,5.902 77881,Gemeente Nederweert,2615,LI,156,NL,51.28813,5.77157 77909,Gemeente Peel en Maas,2615,LI,156,NL,51.32353,5.97261 77924,Gemeente Roerdalen,2615,LI,156,NL,51.13492,6.03542 77925,Gemeente Roermond,2615,LI,156,NL,51.19999,6.009 77933,Gemeente Simpelveld,2615,LI,156,NL,50.82901,5.9841 77936,Gemeente Sittard-Geleen,2615,LI,156,NL,51.01074,5.82288 77948,Gemeente Stein,2615,LI,156,NL,50.97358,5.76126 77966,Gemeente Vaals,2615,LI,156,NL,50.77848,5.97674 77973,Gemeente Venlo,2615,LI,156,NL,51.39277,6.16041 77974,Gemeente Venray,2615,LI,156,NL,51.51412,5.95927 77978,Gemeente Voerendaal,2615,LI,156,NL,50.87117,5.91495 77988,Gemeente Weert,2615,LI,156,NL,51.23418,5.69067 78024,Gennep,2615,LI,156,NL,51.69833,5.97361 78049,Gracht,2615,LI,156,NL,50.85175,6.02793 78051,Grashoek,2615,LI,156,NL,51.36083,5.94306 78054,Grevenbicht,2615,LI,156,NL,51.03833,5.775 78064,Gronsveld,2615,LI,156,NL,50.81083,5.73056 78070,Gulpen,2615,LI,156,NL,50.81583,5.88889 78071,Gulpen-Wittem,2615,LI,156,NL,50.81374,5.89296 78072,Guttecoven,2615,LI,156,NL,51.015,5.81806 78078,Haanrade,2615,LI,156,NL,50.87981,6.07411 78084,Haelen,2615,LI,156,NL,51.23583,5.95694 78108,Heel,2615,LI,156,NL,51.17917,5.89444 78112,Heer,2615,LI,156,NL,50.83836,5.72989 78119,Heerlen,2615,LI,156,NL,50.88365,5.98154 78125,Hegelsom,2615,LI,156,NL,51.43917,6.03889 78126,Heide,2615,LI,156,NL,51.06833,5.87222 78127,Heijen,2615,LI,156,NL,51.675,5.98056 78132,Heksenberg,2615,LI,156,NL,50.92068,5.97373 78133,Helden,2615,LI,156,NL,51.31917,6.0 78145,Herkenbosch,2615,LI,156,NL,51.15333,6.06389 78147,Herten,2615,LI,156,NL,51.18083,5.9625 78152,Heugem,2615,LI,156,NL,50.82791,5.70774 78156,Heythuysen,2615,LI,156,NL,51.25,5.89861 78164,Hoensbroek,2615,LI,156,NL,50.92387,5.92528 78171,Holtum,2615,LI,156,NL,51.0475,5.82222 78173,Holz,2615,LI,156,NL,50.86415,6.07424 78187,Hopel,2615,LI,156,NL,50.89245,6.05046 78190,Houthem,2615,LI,156,NL,50.8725,5.79306 78194,Hulsberg,2615,LI,156,NL,50.88917,5.85556 78199,Husken,2615,LI,156,NL,50.89567,5.95648 78209,Kaalheide,2615,LI,156,NL,50.86505,6.03643 78211,Kakert,2615,LI,156,NL,50.90414,6.00463 78220,Keent,2615,LI,156,NL,51.24218,5.70079 78222,Kelpen-Oler,2615,LI,156,NL,51.21817,5.82602 78224,Kerensheide,2615,LI,156,NL,50.9721,5.77666 78228,Kerkrade,2615,LI,156,NL,50.86583,6.0625 78230,Kessel,2615,LI,156,NL,51.29167,6.05417 78238,Klimmen,2615,LI,156,NL,50.87583,5.88056 78245,Koningsbosch,2615,LI,156,NL,51.05167,5.95833 78246,Koningslust,2615,LI,156,NL,51.3575,5.99306 78259,Kruisberg,2615,LI,156,NL,50.94234,5.96519 78262,Kunrade,2615,LI,156,NL,50.87769,5.93107 78267,Landgraaf,2615,LI,156,NL,50.91333,6.05722 78275,Lauradorp,2615,LI,156,NL,50.91229,6.04591 78284,Leeuwen,2615,LI,156,NL,51.21032,5.99862 78292,Leuken,2615,LI,156,NL,51.25288,5.7346 78293,Leunen,2615,LI,156,NL,51.51,5.97917 78296,Lichtenberg,2615,LI,156,NL,50.9022,6.02523 78305,Limbricht,2615,LI,156,NL,51.01167,5.8375 78306,Limmel,2615,LI,156,NL,50.86718,5.70719 78308,Lindenheuvel,2615,LI,156,NL,50.98509,5.81667 78310,Linne,2615,LI,156,NL,51.155,5.93889 78324,Lottum,2615,LI,156,NL,51.46167,6.16111 78334,Maasbracht,2615,LI,156,NL,51.13929,5.88627 78335,Maasbree,2615,LI,156,NL,51.3575,6.04861 78340,Maastricht,2615,LI,156,NL,50.84833,5.68889 78344,Malberg,2615,LI,156,NL,50.86244,5.65419 78348,Margraten,2615,LI,156,NL,50.82083,5.82083 78350,Mariarade,2615,LI,156,NL,50.92906,5.92738 78364,Mechelen,2615,LI,156,NL,50.79583,5.92639 78368,Meerlo,2615,LI,156,NL,51.51333,6.08472 78369,Meerssen,2615,LI,156,NL,50.8875,5.75 78371,Meezenbroek,2615,LI,156,NL,50.8968,5.99051 78374,Meijel,2615,LI,156,NL,51.34417,5.88472 78376,Melderslo,2615,LI,156,NL,51.46167,6.08611 78377,Melick,2615,LI,156,NL,51.15917,6.01667 78383,Merkelbeek,2615,LI,156,NL,50.95389,5.94069 78384,Merselo,2615,LI,156,NL,51.53,5.92778 78385,Merum,2615,LI,156,NL,51.17333,5.95972 78402,Milsbeek,2615,LI,156,NL,51.725,5.94861 78405,Moesel,2615,LI,156,NL,51.23828,5.71778 78410,Montfort,2615,LI,156,NL,51.12583,5.94861 78411,Mook,2615,LI,156,NL,51.7525,5.88194 78414,Munstergeleen,2615,LI,156,NL,50.975,5.86389 78422,Nederweert,2615,LI,156,NL,51.28583,5.74861 78425,Neerbeek,2615,LI,156,NL,50.95,5.81528 78435,Nieuw-Lotbroek,2615,LI,156,NL,50.91283,5.92798 78438,Nieuwdorp,2615,LI,156,NL,50.96216,5.77297 78477,Nuth,2615,LI,156,NL,50.9175,5.88611 78478,Obbicht,2615,LI,156,NL,51.02833,5.78056 78488,Offenbeek,2615,LI,156,NL,51.28225,6.095 78489,Oirlo,2615,LI,156,NL,51.51167,6.0375 78490,Oirsbeek,2615,LI,156,NL,50.95083,5.90833 78528,Oostrum,2615,LI,156,NL,51.52917,6.01667 78536,Ophoven,2615,LI,156,NL,50.99036,5.85868 78545,Ospel,2615,LI,156,NL,51.2975,5.78472 78550,Ottersum,2615,LI,156,NL,51.70333,5.98333 78553,Oud-Caberg,2615,LI,156,NL,50.86539,5.66444 78571,Overhoven,2615,LI,156,NL,51.00869,5.86628 78577,Panningen,2615,LI,156,NL,51.32667,5.97917 78580,Passart,2615,LI,156,NL,50.92389,5.94674 78584,Peij,2615,LI,156,NL,51.09417,5.89583 78594,Posterholt,2615,LI,156,NL,51.12333,6.03472 78595,Pottenberg,2615,LI,156,NL,50.85135,5.65668 78600,Puth,2615,LI,156,NL,50.95417,5.87361 78617,Reuver,2615,LI,156,NL,51.28417,6.07778 78635,Roermond,2615,LI,156,NL,51.19417,5.9875 78638,Roosteren,2615,LI,156,NL,51.08333,5.81806 78641,Rothem,2615,LI,156,NL,50.87667,5.73889 78660,Scharn,2615,LI,156,NL,50.85,5.73333 78672,Schilberg,2615,LI,156,NL,51.09917,5.88611 78674,Schimmert,2615,LI,156,NL,50.90667,5.82361 78675,Schinnen,2615,LI,156,NL,50.94333,5.88889 78676,Schinveld,2615,LI,156,NL,50.96917,5.97917 78688,Sevenum,2615,LI,156,NL,51.4125,6.0375 78690,Sibbe,2615,LI,156,NL,50.84417,5.82639 78693,Simpelveld,2615,LI,156,NL,50.83417,5.98194 78698,Sint Joost,2615,LI,156,NL,51.1175,5.89861 78701,Sint Odiliënberg,2615,LI,156,NL,51.14333,6.0 78708,Sittard,2615,LI,156,NL,50.99833,5.86944 78727,Spaubeek,2615,LI,156,NL,50.94,5.84306 78730,Spekholzerheide,2615,LI,156,NL,50.85559,6.02471 78740,Stadbroek,2615,LI,156,NL,51.00187,5.87656 78754,Stein,2615,LI,156,NL,50.96917,5.76667 78762,Stramproy,2615,LI,156,NL,51.19417,5.71944 78767,Tegelen,2615,LI,156,NL,51.34417,6.13611 78776,Terwinselen,2615,LI,156,NL,50.86659,6.02471 78782,Thorn,2615,LI,156,NL,51.16167,5.84167 78784,Tienray,2615,LI,156,NL,51.495,6.09306 78805,Ubachsberg,2615,LI,156,NL,50.85333,5.94861 78815,Ulestraten,2615,LI,156,NL,50.90583,5.78194 78820,Urmond,2615,LI,156,NL,50.99083,5.77222 78823,Vaals,2615,LI,156,NL,50.77083,6.01806 78829,Valkenburg,2615,LI,156,NL,50.86523,5.83205 78830,Valkenburg aan de Geul,2615,LI,156,NL,50.85711,5.83489 78844,Veltum,2615,LI,156,NL,51.51954,5.96032 78847,Venlo,2615,LI,156,NL,51.37,6.16806 78848,Venray,2615,LI,156,NL,51.525,5.975 78852,Vijlen,2615,LI,156,NL,50.78833,5.96528 78863,Vlodrop,2615,LI,156,NL,51.13333,6.07639 78865,Voerendaal,2615,LI,156,NL,50.88327,5.92978 78884,Vrieheide,2615,LI,156,NL,50.92192,5.96701 78902,Wanssum,2615,LI,156,NL,51.53583,6.07639 78912,Waubach,2615,LI,156,NL,50.91833,6.05 78914,Weert,2615,LI,156,NL,51.25167,5.70694 78921,Well,2615,LI,156,NL,51.55,6.08889 78922,Wellerlooi,2615,LI,156,NL,51.53417,6.13611 78927,Wessem,2615,LI,156,NL,51.15954,5.88146 78955,Wijlre,2615,LI,156,NL,50.83333,5.89583 78956,Wijnandsrade,2615,LI,156,NL,50.90583,5.88333 78974,Wolder,2615,LI,156,NL,50.83752,5.65938 78991,Ysselsteyn,2615,LI,156,NL,51.49,5.89722 77297,s Gravenmoer,2623,NB,156,NL,51.65594,4.94076 77301,s-Hertogenbosch,2623,NB,156,NL,51.69917,5.30417 77302,t Hofke,2623,NB,156,NL,51.44943,5.51926 77305,Aalburg,2623,NB,156,NL,51.75482,5.13156 77308,Aalst,2623,NB,156,NL,51.39667,5.47778 77312,Aarle-Rixtel,2623,NB,156,NL,51.50976,5.63839 77315,Abcoven,2623,NB,156,NL,51.5275,5.08333 77320,Akert,2623,NB,156,NL,51.41407,5.5596 77328,Almkerk,2623,NB,156,NL,51.77083,4.95972 77329,Alphen,2623,NB,156,NL,51.48167,4.95833 77342,Andel,2623,NB,156,NL,51.78333,5.05833 77358,Asten,2623,NB,156,NL,51.40417,5.74861 77365,Baardwijk,2623,NB,156,NL,51.69246,5.09628 77366,Baarle-Nassau,2623,NB,156,NL,51.4475,4.92917 77371,Bakel,2623,NB,156,NL,51.50333,5.74028 77383,Bavel,2623,NB,156,NL,51.56583,4.83056 77386,Beek,2623,NB,156,NL,51.5289,5.63382 77390,Beers,2623,NB,156,NL,51.72583,5.82778 77396,Belcrum,2623,NB,156,NL,51.59911,4.76994 77407,Bergeijk,2623,NB,156,NL,51.30182,5.33946 77408,Bergen op Zoom,2623,NB,156,NL,51.495,4.29167 77410,Berghem,2623,NB,156,NL,51.76991,5.56827 77419,Berlicum,2623,NB,156,NL,51.6775,5.4 77421,Besoijen,2623,NB,156,NL,51.68333,5.05 77422,Best,2623,NB,156,NL,51.5075,5.39028 77423,Besterd,2623,NB,156,NL,51.5638,5.08658 77428,Biesdonk,2623,NB,156,NL,51.60613,4.78515 77434,Bitswijk,2623,NB,156,NL,51.6687,5.60921 77435,Blaarthem,2623,NB,156,NL,51.42501,5.45784 77436,Bladel,2623,NB,156,NL,51.36833,5.22083 77450,Boekel,2623,NB,156,NL,51.60333,5.675 77464,Bosschenhoofd,2623,NB,156,NL,51.56083,4.54028 77466,Boxmeer,2623,NB,156,NL,51.64667,5.94722 77467,Boxtel,2623,NB,156,NL,51.59083,5.32917 77472,Brand,2623,NB,156,NL,51.45839,5.62427 77473,Breda,2623,NB,156,NL,51.58656,4.77596 77478,Breugel,2623,NB,156,NL,51.5175,5.51111 77485,Broekhoven,2623,NB,156,NL,51.54801,5.09175 77497,Budel,2623,NB,156,NL,51.27167,5.575 77498,Budel-Dorplein,2623,NB,156,NL,51.23667,5.5875 77499,Budel-Schoot,2623,NB,156,NL,51.2475,5.56528 77515,Chaam,2623,NB,156,NL,51.50583,4.86111 77518,Coevering,2623,NB,156,NL,51.41742,5.57463 77525,Cranendonck,2623,NB,156,NL,51.30417,5.58889 77526,Cuijk,2623,NB,156,NL,51.73083,5.87917 77533,De Blaak,2623,NB,156,NL,51.54626,5.04465 77536,De Doornakkers,2623,NB,156,NL,51.43844,5.50887 77550,De Kruiskamp,2623,NB,156,NL,51.69978,5.26032 77557,De Reit,2623,NB,156,NL,51.56038,5.04932 77559,De Rompert,2623,NB,156,NL,51.71667,5.31667 77571,Den Dungen,2623,NB,156,NL,51.665,5.37222 77575,Deuteren,2623,NB,156,NL,51.68667,5.26667 77580,Diessen,2623,NB,156,NL,51.47583,5.175 77582,Dinteloord,2623,NB,156,NL,51.635,4.36944 77590,Dommelen,2623,NB,156,NL,51.34624,5.43394 77591,Dongen,2623,NB,156,NL,51.62667,4.93889 77592,Donk,2623,NB,156,NL,51.53843,5.62914 77594,Doonheide,2623,NB,156,NL,51.56667,5.69444 77601,Dorst,2623,NB,156,NL,51.59,4.85694 77619,Duizel,2623,NB,156,NL,51.36833,5.29722 77623,Eckart,2623,NB,156,NL,51.4732,5.49449 77631,Eerde,2623,NB,156,NL,51.60417,5.49861 77632,Eerschot,2623,NB,156,NL,51.56833,5.47361 77633,Eersel,2623,NB,156,NL,51.3575,5.31806 77642,Eindhoven,2623,NB,156,NL,51.44083,5.47778 77644,Ekenrooi,2623,NB,156,NL,51.39656,5.48624 77648,Elshout,2623,NB,156,NL,51.70083,5.14167 77663,Enschot,2623,NB,156,NL,51.57846,5.13885 77667,Erp,2623,NB,156,NL,51.6,5.60694 77668,Esch,2623,NB,156,NL,51.61083,5.29028 77676,Fijnaart,2623,NB,156,NL,51.6375,4.46944 77680,Gageldonk,2623,NB,156,NL,51.60167,4.73889 77686,Geenhoven,2623,NB,156,NL,51.35935,5.46021 77687,Geertruidenberg,2623,NB,156,NL,51.70167,4.85694 77688,Geffen,2623,NB,156,NL,51.74,5.46389 77692,Geldrop,2623,NB,156,NL,51.42167,5.55972 77695,Gemeente s-Hertogenbosch,2623,NB,156,NL,51.68267,5.30056 77706,Gemeente Alphen-Chaam,2623,NB,156,NL,51.50341,4.88013 77715,Gemeente Asten,2623,NB,156,NL,51.39231,5.7791 77716,Gemeente Baarle-Nassau,2623,NB,156,NL,51.43544,4.9118 77726,Gemeente Bergen op Zoom,2623,NB,156,NL,51.50451,4.29108 77727,Gemeente Bernheze,2623,NB,156,NL,51.68556,5.52378 77728,Gemeente Best,2623,NB,156,NL,51.5,5.38333 77731,Gemeente Bladel,2623,NB,156,NL,51.35,5.21667 77734,Gemeente Boekel,2623,NB,156,NL,51.60489,5.69357 77738,Gemeente Boxmeer,2623,NB,156,NL,51.63333,5.95 77739,Gemeente Boxtel,2623,NB,156,NL,51.58472,5.32654 77740,Gemeente Breda,2623,NB,156,NL,51.5779,4.76039 77751,Gemeente Cranendonck,2623,NB,156,NL,51.27746,5.58373 77752,Gemeente Cuijk,2623,NB,156,NL,51.71739,5.85773 77763,Gemeente Deurne,2623,NB,156,NL,51.43701,5.82245 77769,Gemeente Dongen,2623,NB,156,NL,51.63754,4.95361 77772,Gemeente Drimmelen,2623,NB,156,NL,51.66667,4.78333 77780,Gemeente Eersel,2623,NB,156,NL,51.39579,5.31956 77781,Gemeente Eindhoven,2623,NB,156,NL,51.45037,5.45279 77788,Gemeente Etten-Leur,2623,NB,156,NL,51.57711,4.64253 77789,Gemeente Geertruidenberg,2623,NB,156,NL,51.69634,4.87836 77790,Gemeente Geldrop-Mierlo,2623,NB,156,NL,51.43372,5.59926 77791,Gemeente Gemert-Bakel,2623,NB,156,NL,51.52554,5.72802 77793,Gemeente Gilze en Rijen,2623,NB,156,NL,51.55656,4.91253 77796,Gemeente Goirle,2623,NB,156,NL,51.50875,5.03381 77799,Gemeente Grave,2623,NB,156,NL,51.7397,5.74366 77802,Gemeente Haaren,2623,NB,156,NL,51.61831,5.22779 77805,Gemeente Halderberge,2623,NB,156,NL,51.58925,4.50597 77817,Gemeente Heeze-Leende,2623,NB,156,NL,51.36404,5.5587 77821,Gemeente Helmond,2623,NB,156,NL,51.47968,5.65559 77825,Gemeente Heusden,2623,NB,156,NL,51.69975,5.16598 77827,Gemeente Hilvarenbeek,2623,NB,156,NL,51.47772,5.14778 77845,Gemeente Laarbeek,2623,NB,156,NL,51.52643,5.61283 77846,Gemeente Landerd,2623,NB,156,NL,51.71151,5.6658 77861,Gemeente Loon op Zand,2623,NB,156,NL,51.63782,5.0486 77875,Gemeente Mill en Sint Hubert,2623,NB,156,NL,51.68712,5.77077 77876,Gemeente Moerdijk,2623,NB,156,NL,51.63933,4.56379 77890,Gemeente Nuenen Gerwen en Nederwetten,2623,NB,156,NL,51.46667,5.53333 77893,Gemeente Oirschot,2623,NB,156,NL,51.49062,5.28959 77894,Gemeente Oisterwijk,2623,NB,156,NL,51.55289,5.20188 77899,Gemeente Oosterhout,2623,NB,156,NL,51.63435,4.86399 77904,Gemeente Oss,2623,NB,156,NL,51.78103,5.58111 77918,Gemeente Reusel-De Mierden,2623,NB,156,NL,51.38047,5.1579 77928,Gemeente Rucphen,2623,NB,156,NL,51.52357,4.56586 77934,Gemeente Sint Anthonis,2623,NB,156,NL,51.61826,5.84354 77935,Gemeente Sint-Michielsgestel,2623,NB,156,NL,51.66076,5.37851 77941,Gemeente Someren,2623,NB,156,NL,51.38233,5.71049 77942,Gemeente Son en Breugel,2623,NB,156,NL,51.5097,5.49934 77946,Gemeente Steenbergen,2623,NB,156,NL,51.60081,4.32077 77955,Gemeente Tilburg,2623,NB,156,NL,51.57787,5.06555 77960,Gemeente Uden,2623,NB,156,NL,51.65682,5.61258 77967,Gemeente Valkenswaard,2623,NB,156,NL,51.32575,5.45323 77971,Gemeente Veldhoven,2623,NB,156,NL,51.41253,5.38052 77981,Gemeente Vught,2623,NB,156,NL,51.65822,5.26746 77982,Gemeente Waalre,2623,NB,156,NL,51.38757,5.4638 77983,Gemeente Waalwijk,2623,NB,156,NL,51.6897,5.01721 78001,Gemeente Woensdrecht,2623,NB,156,NL,51.40948,4.33512 78014,Gemeente Zundert,2623,NB,156,NL,51.47352,4.6418 78019,Gemert,2623,NB,156,NL,51.55583,5.69028 78020,Gemonde,2623,NB,156,NL,51.61833,5.35694 78021,Genderen,2623,NB,156,NL,51.73583,5.0875 78025,Genoenhuis,2623,NB,156,NL,51.40917,5.53889 78026,Gerwen,2623,NB,156,NL,51.49,5.5625 78028,Giessen,2623,NB,156,NL,51.79,5.03056 78033,Gilze,2623,NB,156,NL,51.54417,4.94028 78034,Ginneken,2623,NB,156,NL,51.56593,4.7931 78038,Goirle,2623,NB,156,NL,51.52083,5.06667 78052,Grasrijk,2623,NB,156,NL,51.43916,5.41544 78053,Grave,2623,NB,156,NL,51.75902,5.73882 78059,Groenewoud,2623,NB,156,NL,51.5386,5.09028 78079,Haaren,2623,NB,156,NL,51.6025,5.22222 78082,Haarsteeg,2623,NB,156,NL,51.71167,5.19861 78087,Halsteren,2623,NB,156,NL,51.52834,4.26785 78088,Handel,2623,NB,156,NL,51.58,5.70972 78089,Hapert,2623,NB,156,NL,51.36833,5.25694 78090,Haps,2623,NB,156,NL,51.68917,5.86111 78118,Heerle,2623,NB,156,NL,51.51917,4.35972 78121,Heesch,2623,NB,156,NL,51.73362,5.52672 78122,Heesterakker,2623,NB,156,NL,51.4861,5.49681 78123,Heeswijk-Dinther,2623,NB,156,NL,51.65083,5.475 78124,Heeze,2623,NB,156,NL,51.3828,5.57145 78135,Helmond,2623,NB,156,NL,51.48167,5.66111 78137,Helvoirt,2623,NB,156,NL,51.63167,5.23056 78146,Herpen,2623,NB,156,NL,51.77167,5.64167 78154,Heusden,2623,NB,156,NL,51.38417,5.76389 78155,Heusdenhout,2623,NB,156,NL,51.58811,4.8193 78158,Hilvarenbeek,2623,NB,156,NL,51.48583,5.1375 78165,Hoeven,2623,NB,156,NL,51.57917,4.58333 78168,Hoge Vucht,2623,NB,156,NL,51.60794,4.7915 78177,Hooge Mierde,2623,NB,156,NL,51.3875,5.12917 78178,Hooge Zwaluwe,2623,NB,156,NL,51.6875,4.74444 78179,Hoogeloon,2623,NB,156,NL,51.3975,5.26806 78180,Hoogerheide,2623,NB,156,NL,51.42417,4.325 78191,Huijbergen,2623,NB,156,NL,51.4325,4.37639 78205,Jagershoef,2623,NB,156,NL,51.4733,5.4672 78212,Kalsdonk,2623,NB,156,NL,51.53973,4.47111 78237,Klein-Zundert,2623,NB,156,NL,51.48083,4.65417 78240,Klundert,2623,NB,156,NL,51.665,4.53472 78252,Korvel,2623,NB,156,NL,51.54954,5.07079 78258,Krooswijk,2623,NB,156,NL,51.64665,4.59203 78260,Kruisland,2623,NB,156,NL,51.56917,4.40972 78264,Lage Mierde,2623,NB,156,NL,51.40583,5.14722 78265,Lakerlopen,2623,NB,156,NL,51.43791,5.50106 78270,Langenboom,2623,NB,156,NL,51.70417,5.73056 78277,Leende,2623,NB,156,NL,51.35083,5.55417 78281,Leest,2623,NB,156,NL,51.60983,5.54312 78291,Lepelstraat,2623,NB,156,NL,51.54833,4.27639 78298,Liempde,2623,NB,156,NL,51.56917,5.37222 78300,Lierop,2623,NB,156,NL,51.41917,5.67917 78301,Lieshout,2623,NB,156,NL,51.52036,5.59479 78302,Liessel,2623,NB,156,NL,51.41333,5.82083 78304,Lievendaal,2623,NB,156,NL,51.44219,5.43405 78314,Lith,2623,NB,156,NL,51.80583,5.43889 78319,Loon op Zand,2623,NB,156,NL,51.6275,5.075 78320,Loosbroek,2623,NB,156,NL,51.67833,5.50694 78325,Loven,2623,NB,156,NL,51.5648,5.09748 78329,Luyksgestel,2623,NB,156,NL,51.28917,5.32361 78330,Maarheeze,2623,NB,156,NL,51.31167,5.61667 78337,Maaskantje,2623,NB,156,NL,51.65833,5.37083 78341,Made,2623,NB,156,NL,51.67667,4.79306 78349,Mariahout,2623,NB,156,NL,51.54083,5.57222 78367,Meerhoven,2623,NB,156,NL,51.44267,5.41102 78370,Meerveldhoven,2623,NB,156,NL,51.41705,5.41618 78372,Megen,2623,NB,156,NL,51.82167,5.5625 78373,Meierijstad,2623,NB,156,NL,51.59968,5.50278 78379,Melle,2623,NB,156,NL,51.66244,5.63367 78387,Middelbeers,2623,NB,156,NL,51.46667,5.25 78390,Middelrode,2623,NB,156,NL,51.66417,5.41944 78398,Mierlo,2623,NB,156,NL,51.44,5.61944 78401,Milheeze,2623,NB,156,NL,51.50167,5.77917 78404,Moerdijk,2623,NB,156,NL,51.70167,4.62639 78406,Molenhoek,2623,NB,156,NL,51.71113,5.36809 78415,Muschberg en Geestenberg,2623,NB,156,NL,51.44384,5.52329 78418,Naastenbest,2623,NB,156,NL,51.50484,5.38579 78426,Neerkant,2623,NB,156,NL,51.36833,5.86667 78437,Nieuw-Vossemeer,2623,NB,156,NL,51.59,4.21806 78446,Nieuwkuijk,2623,NB,156,NL,51.69,5.18194 78455,Nijnsel,2623,NB,156,NL,51.55083,5.48333 78457,Nispen,2623,NB,156,NL,51.48331,4.46131 78459,Nistelrode,2623,NB,156,NL,51.70417,5.5625 78467,Noordgeest,2623,NB,156,NL,51.50917,4.27917 78468,Noordhoek,2623,NB,156,NL,51.6425,4.53194 78474,Nuenen,2623,NB,156,NL,51.47,5.55278 78483,Odiliapeel,2623,NB,156,NL,51.64333,5.70556 78487,Oerle,2623,NB,156,NL,51.42255,5.37163 78491,Oirschot,2623,NB,156,NL,51.505,5.31389 78492,Oisterwijk,2623,NB,156,NL,51.57917,5.18889 78510,Oosteind,2623,NB,156,NL,51.64418,4.89784 78512,Oostelbeers,2623,NB,156,NL,51.47171,5.26897 78519,Oosterhout,2623,NB,156,NL,51.645,4.85972 78544,Orthen,2623,NB,156,NL,51.70613,5.30468 78546,Oss,2623,NB,156,NL,51.765,5.51806 78547,Ossendrecht,2623,NB,156,NL,51.39417,4.32639 78551,Oud Gastel,2623,NB,156,NL,51.58667,4.45972 78572,Overloon,2623,NB,156,NL,51.57167,5.94722 78596,Princenhage,2623,NB,156,NL,51.57632,4.73906 78597,Prinsenbeek,2623,NB,156,NL,51.59833,4.7125 78601,Putte,2623,NB,156,NL,51.36,4.39583 78603,Quirijnstok,2623,NB,156,NL,51.5843,5.0981 78605,Raam,2623,NB,156,NL,51.65967,5.63637 78606,Raamsdonk,2623,NB,156,NL,51.6875,4.90833 78607,Raamsdonksveer,2623,NB,156,NL,51.69667,4.87361 78609,Ravenstein,2623,NB,156,NL,51.79667,5.65 78610,Reek,2623,NB,156,NL,51.74583,5.68194 78616,Reusel,2623,NB,156,NL,51.3625,5.16528 78622,Riethoven,2623,NB,156,NL,51.35417,5.3875 78623,Rijen,2623,NB,156,NL,51.59083,4.91944 78627,Rijsbergen,2623,NB,156,NL,51.5175,4.69722 78629,Rijswijk,2623,NB,156,NL,51.7975,5.025 78637,Roosendaal,2623,NB,156,NL,51.53083,4.46528 78646,Rucphen,2623,NB,156,NL,51.53167,4.55833 78651,Salderes,2623,NB,156,NL,51.51505,5.38991 78657,Schaijk,2623,NB,156,NL,51.74583,5.63194 78671,Schijndel,2623,NB,156,NL,51.6225,5.43194 78684,Schutsboom,2623,NB,156,NL,51.46152,5.6226 78695,Sint Anthonis,2623,NB,156,NL,51.62667,5.88194 78704,Sint Willebrord,2623,NB,156,NL,51.54833,4.58889 78705,Sint-Michielsgestel,2623,NB,156,NL,51.64167,5.35278 78706,Sint-Oedenrode,2623,NB,156,NL,51.5675,5.45972 78718,Soerendonk,2623,NB,156,NL,51.30083,5.575 78721,Someren,2623,NB,156,NL,51.385,5.71111 78722,Someren-Eind,2623,NB,156,NL,51.3575,5.73333 78723,Son,2623,NB,156,NL,51.51136,5.49282 78729,Speelheide,2623,NB,156,NL,51.50607,5.40519 78738,Sprundel,2623,NB,156,NL,51.5375,4.59722 78743,Stampersgat,2623,NB,156,NL,51.61333,4.44444 78744,Standdaarbuiten,2623,NB,156,NL,51.61333,4.51389 78748,Steenbergen,2623,NB,156,NL,51.58417,4.31944 78750,Steensel,2623,NB,156,NL,51.37667,5.35278 78756,Stepekolk,2623,NB,156,NL,51.455,5.61251 78772,Terheijden,2623,NB,156,NL,51.64333,4.75417 78778,Teteringen,2623,NB,156,NL,51.60917,4.82083 78780,Theereheide,2623,NB,156,NL,51.63843,5.33729 78786,Tilburg,2623,NB,156,NL,51.55551,5.0913 78788,Tivoli,2623,NB,156,NL,51.42069,5.50818 78790,Tongelre,2623,NB,156,NL,51.44889,5.51978 78807,Uden,2623,NB,156,NL,51.66083,5.61944 78808,Udenhout,2623,NB,156,NL,51.60917,5.14306 78817,Ulvenhout,2623,NB,156,NL,51.54907,4.79931 78824,Vaartbroek,2623,NB,156,NL,51.47954,5.49806 78831,Valkenswaard,2623,NB,156,NL,51.35083,5.45972 78835,Veen,2623,NB,156,NL,51.7775,5.10833 78839,Veghel,2623,NB,156,NL,51.61667,5.54861 78840,Veldhoven,2623,NB,156,NL,51.41833,5.40278 78845,Ven,2623,NB,156,NL,51.64,5.55 78846,Venhorst,2623,NB,156,NL,51.60833,5.7375 78853,Villapark,2623,NB,156,NL,51.44144,5.49385 78859,Vliedberg,2623,NB,156,NL,51.68961,5.19031 78860,Vlierden,2623,NB,156,NL,51.445,5.75833 78864,Vlokhoven,2623,NB,156,NL,51.46667,5.48333 78869,Voldijn,2623,NB,156,NL,51.40052,5.47196 78871,Volkel,2623,NB,156,NL,51.6425,5.65417 78880,Vorstenbosch,2623,NB,156,NL,51.6525,5.55 78888,Vught,2623,NB,156,NL,51.65333,5.2875 78891,Waalre,2623,NB,156,NL,51.38667,5.44444 78892,Waalwijk,2623,NB,156,NL,51.6825,5.07083 78898,Wagenberg,2623,NB,156,NL,51.665,4.74861 78901,Wanroij,2623,NB,156,NL,51.6575,5.81806 78908,Waspik,2623,NB,156,NL,51.68667,4.94444 78911,Waterdonken,2623,NB,156,NL,51.60959,4.80452 78919,Welberg,2623,NB,156,NL,51.57667,4.33056 78924,Werkendam,2623,NB,156,NL,51.81,4.89444 78926,Wernhout,2623,NB,156,NL,51.455,4.64167 78937,Westerhoven,2623,NB,156,NL,51.3325,5.39583 78949,Wijbosch,2623,NB,156,NL,51.61667,5.46806 78959,Wilhelminadorp,2623,NB,156,NL,51.49742,5.39223 78968,Wisselaar,2623,NB,156,NL,51.61285,4.78444 78971,Woensdrecht,2623,NB,156,NL,51.42897,4.30355 78972,Woenselse Heide,2623,NB,156,NL,51.48333,5.46667 78986,Woudrichem,2623,NB,156,NL,51.815,5.00139 78988,Wouw,2623,NB,156,NL,51.52167,4.39028 78997,Zandberg,2623,NB,156,NL,51.57333,4.78472 79000,Zeeland,2623,NB,156,NL,51.6975,5.67639 79001,Zeelst,2623,NB,156,NL,51.42421,5.41566 79003,Zegge,2623,NB,156,NL,51.55667,4.51806 79004,Zeilberg,2623,NB,156,NL,51.45469,5.81878 79007,Zesgehuchten,2623,NB,156,NL,51.41667,5.55 79010,Zevenbergschen Hoek,2623,NB,156,NL,51.6725,4.67917 79014,Zijtaart,2623,NB,156,NL,51.5925,5.54167 79018,Zonderwijk,2623,NB,156,NL,51.41141,5.39361 79031,Zundert,2623,NB,156,NL,51.47167,4.65556 77303,t Zand,2612,NH,156,NL,52.83667,4.75556 77307,Aalsmeer,2612,NH,156,NL,52.25917,4.75972 77313,Abbekerk,2612,NH,156,NL,52.73167,5.01806 77325,Alkmaar,2612,NH,156,NL,52.63167,4.74861 77338,Amstelveen,2612,NH,156,NL,52.30083,4.86389 77340,Amsterdam,2612,NH,156,NL,52.37403,4.88969 77341,Amsterdam-Zuidoost,2612,NH,156,NL,52.3075,4.97222 77347,Ankeveense Rade,2612,NH,156,NL,52.25891,5.1016 77361,Avenhorn,2612,NH,156,NL,52.6175,4.95139 77377,Bangert,2612,NH,156,NL,52.73582,5.1801 77401,Bennebroek,2612,NH,156,NL,52.32083,4.59861 77417,Berkhout,2612,NH,156,NL,52.64083,5.00139 77426,Beverwijk,2612,NH,156,NL,52.48333,4.65694 77430,Bijvanck,2612,NH,156,NL,52.28585,5.26534 77437,Blaricum,2612,NH,156,NL,52.2725,5.24167 77443,Bloemendaal,2612,NH,156,NL,52.4025,4.62222 77476,Breezand,2612,NH,156,NL,52.89,4.80417 77482,Broek in Waterland,2612,NH,156,NL,52.43417,4.99583 77483,Broek op Langedijk,2612,NH,156,NL,52.67417,4.80556 77508,Bussum,2612,NH,156,NL,52.27333,5.16111 77509,Callantsoog,2612,NH,156,NL,52.84,4.69583 77514,Castricum,2612,NH,156,NL,52.54833,4.66944 77521,Commandeurs,2612,NH,156,NL,52.50902,4.65843 77539,De Glip,2612,NH,156,NL,52.33083,4.61111 77540,De Goorn,2612,NH,156,NL,52.62583,4.94722 77549,De Koog,2612,NH,156,NL,53.0975,4.76111 77553,De Maer,2612,NH,156,NL,52.51901,4.68171 77555,De Noord,2612,NH,156,NL,52.7075,4.85139 77558,De Rijp,2612,NH,156,NL,52.55667,4.84583 77570,Den Burg,2612,NH,156,NL,53.05417,4.79722 77573,Den Helder,2612,NH,156,NL,52.95988,4.75933 77574,Den Oever,2612,NH,156,NL,52.93353,5.03079 77577,Diemen,2612,NH,156,NL,52.33964,4.96256 77583,Dirkshorn,2612,NH,156,NL,52.75,4.775 77609,Driemond,2612,NH,156,NL,52.30583,5.01667 77618,Duivendrecht,2612,NH,156,NL,52.32941,4.93964 77624,Edam,2612,NH,156,NL,52.51215,5.04805 77637,Egmond aan Zee,2612,NH,156,NL,52.6204,4.62705 77638,Egmond-Binnen,2612,NH,156,NL,52.59583,4.65556 77660,Enkhuizen,2612,NH,156,NL,52.70333,5.29167 77697,Gemeente Aalsmeer,2612,NH,156,NL,52.26406,4.76532 77702,Gemeente Alkmaar,2612,NH,156,NL,52.6289,4.74403 77709,Gemeente Amstelveen,2612,NH,156,NL,52.2984,4.85767 77710,Gemeente Amsterdam,2612,NH,156,NL,52.37302,4.89856 77721,Gemeente Beemster,2612,NH,156,NL,52.55402,4.9181 77725,Gemeente Bergen,2612,NH,156,NL,52.65783,4.6761 77730,Gemeente Beverwijk,2612,NH,156,NL,52.48273,4.65468 77732,Gemeente Blaricum,2612,NH,156,NL,52.28548,5.2683 77733,Gemeente Bloemendaal,2612,NH,156,NL,52.3623,4.58968 77749,Gemeente Castricum,2612,NH,156,NL,52.55577,4.68945 77762,Gemeente Den Helder,2612,NH,156,NL,52.92366,4.75793 77765,Gemeente Diemen,2612,NH,156,NL,52.34163,4.96805 77771,Gemeente Drechterland,2612,NH,156,NL,52.66454,5.16569 77777,Gemeente Edam-Volendam,2612,NH,156,NL,52.50556,5.0592 77784,Gemeente Enkhuizen,2612,NH,156,NL,52.71653,5.27615 77803,Gemeente Haarlem,2612,NH,156,NL,52.38074,4.644 77804,Gemeente Haarlemmermeer,2612,NH,156,NL,52.30623,4.68418 77811,Gemeente Heemskerk,2612,NH,156,NL,52.50945,4.65386 77812,Gemeente Heemstede,2612,NH,156,NL,52.34719,4.61838 77815,Gemeente Heerhugowaard,2612,NH,156,NL,52.6821,4.84363 77818,Gemeente Heiloo,2612,NH,156,NL,52.60122,4.70945 77828,Gemeente Hilversum,2612,NH,156,NL,52.22252,5.16789 77830,Gemeente Hollands Kroon,2612,NH,156,NL,52.84882,4.90711 77832,Gemeente Hoorn,2612,NH,156,NL,52.64312,5.05779 77835,Gemeente Huizen,2612,NH,156,NL,52.29664,5.24132 77843,Gemeente Koggenland,2612,NH,156,NL,52.64163,4.94909 77847,Gemeente Landsmeer,2612,NH,156,NL,52.431,4.9157 77848,Gemeente Langedijk,2612,NH,156,NL,52.69151,4.78659 77850,Gemeente Laren,2612,NH,156,NL,52.24518,5.21701 77869,Gemeente Medemblik,2612,NH,156,NL,52.72496,5.12204 77901,Gemeente Oostzaan,2612,NH,156,NL,52.4378,4.87604 77902,Gemeente Opmeer,2612,NH,156,NL,52.71468,4.95334 77905,Gemeente Ouder-Amstel,2612,NH,156,NL,52.30659,4.91432 77912,Gemeente Purmerend,2612,NH,156,NL,52.50515,4.95243 77929,Gemeente Schagen,2612,NH,156,NL,52.78823,4.79965 77945,Gemeente Stede Broec,2612,NH,156,NL,52.69617,5.22389 77951,Gemeente Texel,2612,NH,156,NL,53.07883,4.81166 77961,Gemeente Uitgeest,2612,NH,156,NL,52.52855,4.71176 77962,Gemeente Uithoorn,2612,NH,156,NL,52.23999,4.83072 77972,Gemeente Velsen,2612,NH,156,NL,52.45182,4.63211 77987,Gemeente Waterland,2612,NH,156,NL,52.4376,5.01371 77989,Gemeente Weesp,2612,NH,156,NL,52.30575,5.04152 77998,Gemeente Wijdemeren,2612,NH,156,NL,52.22756,5.08445 78003,Gemeente Wormerland,2612,NH,156,NL,52.497,4.83364 78005,Gemeente Zaanstad,2612,NH,156,NL,52.45308,4.81253 78007,Gemeente Zandvoort,2612,NH,156,NL,52.35769,4.54388 78039,Gooise Meren,2612,NH,156,NL,52.29735,5.13371 78081,Haarlem,2612,NH,156,NL,52.38084,4.63683 78085,Halfweg,2612,NH,156,NL,52.3825,4.75417 78094,Harenkarspel,2612,NH,156,NL,52.73416,4.77682 78110,Heemskerk,2612,NH,156,NL,52.51108,4.67165 78111,Heemstede,2612,NH,156,NL,52.34992,4.62301 78116,Heerhugowaard,2612,NH,156,NL,52.67144,4.84862 78130,Heiloo,2612,NH,156,NL,52.60252,4.68815 78138,Hem,2612,NH,156,NL,52.66083,5.18333 78144,Hensbroek,2612,NH,156,NL,52.65833,4.88472 78159,Hilversum,2612,NH,156,NL,52.22333,5.17639 78160,Hilversumse Meent,2612,NH,156,NL,52.27115,5.13729 78161,Hippolytushoef,2612,NH,156,NL,52.9075,4.9625 78166,Hofgeest,2612,NH,156,NL,52.44333,4.65833 78175,Hoofddorp,2612,NH,156,NL,52.3025,4.68889 78185,Hoogwoud,2612,NH,156,NL,52.71583,4.93889 78186,Hoorn,2612,NH,156,NL,52.6425,5.05972 78192,Huizen,2612,NH,156,NL,52.29917,5.24167 78203,Ilpendam,2612,NH,156,NL,52.46333,4.95 78210,Kadoelen,2612,NH,156,NL,52.4175,4.90561 78227,Kerkelanden,2612,NH,156,NL,52.21755,5.13575 78251,Kortenhoef,2612,NH,156,NL,52.23917,5.10694 78261,Kudelstaart,2612,NH,156,NL,52.23417,4.75139 78268,Landsmeer,2612,NH,156,NL,52.43083,4.91528 78269,Langeheit,2612,NH,156,NL,52.492,4.75849 78274,Laren,2612,NH,156,NL,52.25667,5.22778 78307,Limmen,2612,NH,156,NL,52.56917,4.69444 78313,Lisserbroek,2612,NH,156,NL,52.25667,4.57222 78328,Lutjebroek,2612,NH,156,NL,52.6975,5.20417 78352,Marken,2612,NH,156,NL,52.45833,5.10278 78365,Medemblik,2612,NH,156,NL,52.77167,5.10556 78394,Middenbeemster,2612,NH,156,NL,52.54917,4.9125 78395,Middenmeer,2612,NH,156,NL,52.80667,4.99861 78397,Midwoud,2612,NH,156,NL,52.71667,5.075 78407,Monnickendam,2612,NH,156,NL,52.45833,5.0375 78412,Muiden,2612,NH,156,NL,52.33,5.06944 78413,Muiderberg,2612,NH,156,NL,52.32583,5.12083 78417,Naarden,2612,NH,156,NL,52.29583,5.1625 78434,Nieuw-Loosdrecht,2612,NH,156,NL,52.19917,5.13889 78440,Nieuwe-Niedorp,2612,NH,156,NL,52.74,4.89861 78462,Noord-Scharwoude,2612,NH,156,NL,52.69833,4.81111 78479,Obdam,2612,NH,156,NL,52.67583,4.90694 78502,Onderdijk,2612,NH,156,NL,52.74333,5.1375 78511,Oosteinde,2612,NH,156,NL,52.27917,4.79583 78515,Oosterblokker,2612,NH,156,NL,52.66917,5.11806 78525,Oosterzij,2612,NH,156,NL,52.585,4.70556 78526,Oosthuizen,2612,NH,156,NL,52.5725,4.99583 78538,Opmeer,2612,NH,156,NL,52.70667,4.94444 78540,Opperdoes,2612,NH,156,NL,52.75915,5.07534 78554,Oud-Loosdrecht,2612,NH,156,NL,52.20667,5.08056 78563,Ouderkerk aan de Amstel,2612,NH,156,NL,52.29504,4.90746 78565,Oudeschild,2612,NH,156,NL,53.03917,4.84722 78568,Oudkarspel,2612,NH,156,NL,52.71583,4.80556 78574,Overveen,2612,NH,156,NL,52.39167,4.61389 78588,Petten,2612,NH,156,NL,52.76667,4.66111 78599,Purmerend,2612,NH,156,NL,52.505,4.95972 78655,Schagen,2612,NH,156,NL,52.7875,4.79861 78656,Schagerbrug,2612,NH,156,NL,52.8025,4.75833 78664,Schermerhorn,2612,NH,156,NL,52.60083,4.89167 78702,Sint Pancras,2612,NH,156,NL,52.66,4.78333 78713,Slootdorp,2612,NH,156,NL,52.8425,4.97222 78731,Spierdijk,2612,NH,156,NL,52.65083,4.94306 78761,Stompetoren,2612,NH,156,NL,52.61333,4.82083 78801,Twisk,2612,NH,156,NL,52.74083,5.05278 78811,Uitgeest,2612,NH,156,NL,52.52917,4.70972 78812,Uithoorn,2612,NH,156,NL,52.2375,4.82639 78843,Velsen-Zuid,2612,NH,156,NL,52.46,4.65 78851,Vijfhuizen,2612,NH,156,NL,52.35083,4.67778 78866,Vogelenzang,2612,NH,156,NL,52.31917,4.57778 78870,Volendam,2612,NH,156,NL,52.495,5.07083 78896,Waarland,2612,NH,156,NL,52.72667,4.83194 78910,Waterakkers,2612,NH,156,NL,52.5044,4.65608 78915,Weesp,2612,NH,156,NL,52.3075,5.04167 78945,Westwoud,2612,NH,156,NL,52.685,5.13472 78947,Wieringerwaard,2612,NH,156,NL,52.83583,4.86528 78948,Wieringerwerf,2612,NH,156,NL,52.85083,5.02639 78951,Wijdenes,2612,NH,156,NL,52.635,5.15694 78953,Wijk aan Zee,2612,NH,156,NL,52.4936,4.59409 78961,Winkel,2612,NH,156,NL,52.75417,4.90278 78993,Zaandam,2612,NH,156,NL,52.43854,4.82643 78994,Zaandijk,2612,NH,156,NL,52.47494,4.80686 78995,Zaanstad,2612,NH,156,NL,52.45313,4.81356 78998,Zandvoort,2612,NH,156,NL,52.37125,4.53306 79024,Zuid-Scharwoude,2612,NH,156,NL,52.68667,4.80833 79033,Zwaagdijk-Oost,2612,NH,156,NL,52.7075,5.14028 79034,Zwaanshoek,2612,NH,156,NL,52.3125,4.61667 77326,Almelo,2618,OV,156,NL,52.35667,6.6625 77363,Baalder,2618,OV,156,NL,52.58579,6.65299 77418,Berkum,2618,OV,156,NL,52.52395,6.13655 77446,Blokzijl,2618,OV,156,NL,52.72667,5.96111 77455,Borgele,2618,OV,156,NL,52.2763,6.14926 77459,Borne,2618,OV,156,NL,52.30136,6.7482 77462,Boskamp,2618,OV,156,NL,52.33083,6.12778 77494,Brunnepe,2618,OV,156,NL,52.56185,5.90343 77529,Dalfsen,2618,OV,156,NL,52.51167,6.25694 77546,De Hoven,2618,OV,156,NL,52.24901,6.14367 77566,Delden,2618,OV,156,NL,52.26,6.71111 77572,Den Ham,2618,OV,156,NL,52.46583,6.49583 77576,Deventer,2618,OV,156,NL,52.255,6.16389 77578,Diepenheim,2618,OV,156,NL,52.2,6.55556 77662,Enschede,2618,OV,156,NL,52.21833,6.89583 77677,Flevowijk,2618,OV,156,NL,52.54583,5.91338 77679,Frankhuis,2618,OV,156,NL,52.525,6.06806 77703,Gemeente Almelo,2618,OV,156,NL,52.34463,6.65942 77736,Gemeente Borne,2618,OV,156,NL,52.3112,6.74404 77754,Gemeente Dalfsen,2618,OV,156,NL,52.52461,6.27214 77764,Gemeente Deventer,2618,OV,156,NL,52.26927,6.23795 77766,Gemeente Dinkelland,2618,OV,156,NL,52.37108,6.89294 77785,Gemeente Enschede,2618,OV,156,NL,52.21909,6.88041 77801,Gemeente Haaksbergen,2618,OV,156,NL,52.15514,6.75404 77806,Gemeente Hardenberg,2618,OV,156,NL,52.59312,6.53476 77819,Gemeente Hellendoorn,2618,OV,156,NL,52.39022,6.46434 77823,Gemeente Hengelo,2618,OV,156,NL,52.2591,6.77876 77829,Gemeente Hof van Twente,2618,OV,156,NL,52.24341,6.59749 77839,Gemeente Kampen,2618,OV,156,NL,52.56181,5.91535 77864,Gemeente Losser,2618,OV,156,NL,52.29819,7.00106 77896,Gemeente Oldenzaal,2618,OV,156,NL,52.3075,6.9075 77897,Gemeente Olst-Wijhe,2618,OV,156,NL,52.35734,6.13481 77898,Gemeente Ommen,2618,OV,156,NL,52.51659,6.45631 77914,Gemeente Raalte,2618,OV,156,NL,52.40299,6.28773 77922,Gemeente Rijssen-Holten,2618,OV,156,NL,52.29,6.42515 77944,Gemeente Staphorst,2618,OV,156,NL,52.63241,6.20737 77947,Gemeente Steenwijkerland,2618,OV,156,NL,52.75587,6.04028 77956,Gemeente Tubbergen,2618,OV,156,NL,52.40451,6.78241 77957,Gemeente Twenterand,2618,OV,156,NL,52.44974,6.56122 77996,Gemeente Wierden,2618,OV,156,NL,52.34247,6.55795 78016,Gemeente Zwartewaterland,2618,OV,156,NL,52.6024,6.07402 78018,Gemeente Zwolle,2618,OV,156,NL,52.51264,6.09359 78032,Giethoorn,2618,OV,156,NL,52.74,6.07917 78040,Goor,2618,OV,156,NL,52.23333,6.58611 78050,Grafhorst,2618,OV,156,NL,52.5825,5.93333 78075,Haaksbergen,2618,OV,156,NL,52.15667,6.73889 78080,Haarle,2618,OV,156,NL,52.35917,6.38056 78091,Hardenberg,2618,OV,156,NL,52.57583,6.61944 78099,Hasselt,2618,OV,156,NL,52.59267,6.09527 78131,Heino,2618,OV,156,NL,52.43661,6.23282 78140,Hengelo,2618,OV,156,NL,52.26583,6.79306 78142,Hengevelde,2618,OV,156,NL,52.19917,6.63611 78150,Het Oostrik,2618,OV,156,NL,52.25,6.21667 78213,Kampen,2618,OV,156,NL,52.555,5.91111 78236,Klein Driene,2618,OV,156,NL,52.26935,6.81613 78323,Losser,2618,OV,156,NL,52.26083,7.00417 78342,Magele,2618,OV,156,NL,52.46917,6.52083 78351,Markelo,2618,OV,156,NL,52.235,6.49861 78375,Mekkelholt,2618,OV,156,NL,52.23645,6.89058 78448,Nieuwoord,2618,OV,156,NL,52.46667,6.55 78456,Nijrees,2618,OV,156,NL,52.335,6.66389 78496,Oldemarkt,2618,OV,156,NL,52.82083,5.975 78497,Oldenzaal,2618,OV,156,NL,52.31333,6.92917 78498,Olst,2618,OV,156,NL,52.3375,6.10972 78500,Ommen,2618,OV,156,NL,52.52083,6.42083 78517,Oosterholt,2618,OV,156,NL,52.55917,5.95556 78522,Oostermeenthe,2618,OV,156,NL,52.79319,6.13138 78530,Ootmarsum,2618,OV,156,NL,52.40833,6.90139 78582,Pathmos,2618,OV,156,NL,52.21397,6.87555 78589,Pierik,2618,OV,156,NL,52.50141,6.1117 78604,Raalte,2618,OV,156,NL,52.38583,6.275 78640,Rossum,2618,OV,156,NL,52.35167,6.92222 78658,Schalkhaar,2618,OV,156,NL,52.26833,6.19444 78697,Sint Jansklooster,2618,OV,156,NL,52.6775,6.00556 78745,Staphorst,2618,OV,156,NL,52.645,6.21111 78751,Steenwijk,2618,OV,156,NL,52.7875,6.12083 78752,Steenwijkerwold,2618,OV,156,NL,52.80417,6.06389 78792,Tubbergen,2618,OV,156,NL,52.4075,6.78472 78795,Tuk,2618,OV,156,NL,52.79667,6.09444 78797,Twekkelerveld,2618,OV,156,NL,52.23064,6.86004 78872,Vollenhove,2618,OV,156,NL,52.68083,5.95417 78886,Vriezenveen,2618,OV,156,NL,52.40833,6.62222 78887,Vroomshoop,2618,OV,156,NL,52.46083,6.56528 78936,Westerhaar-Vriezenveensewijk,2618,OV,156,NL,52.45583,6.62361 78946,Wierden,2618,OV,156,NL,52.35917,6.59306 78952,Wijhe,2618,OV,156,NL,52.38667,6.13472 78980,Woolde,2618,OV,156,NL,52.2721,6.75891 78981,Wooldrik,2618,OV,156,NL,52.21667,6.91667 79023,Zuid-Berghuizen,2618,OV,156,NL,52.30083,6.93333 79036,Zwolle,2618,OV,156,NL,52.5125,6.09444 77298,s-Gravenland,2614,ZH,156,NL,51.92336,4.55315 77299,s-Gravenzande,2614,ZH,156,NL,52.00167,4.16528 77317,Adegeest,2614,ZH,156,NL,52.13621,4.45249 77322,Alblasserdam,2614,ZH,156,NL,51.86583,4.66111 77330,Alphen aan den Rijn,2614,ZH,156,NL,52.12917,4.65546 77336,Ammerstol,2614,ZH,156,NL,51.9275,4.80833 77354,Arkel,2614,ZH,156,NL,51.86417,4.99444 77379,Barendrecht,2614,ZH,156,NL,51.85667,4.53472 77403,Benthuizen,2614,ZH,156,NL,52.0775,4.54444 77411,Bergschenhoek,2614,ZH,156,NL,51.99,4.49861 77412,Bergstoep,2614,ZH,156,NL,51.9225,4.78472 77414,Berkel en Rodenrijs,2614,ZH,156,NL,51.99313,4.47865 77416,Berkenwoude,2614,ZH,156,NL,51.945,4.70694 77432,Binnenhof,2614,ZH,156,NL,52.16418,4.53644 77439,Bleiswijk,2614,ZH,156,NL,52.01083,4.53194 77440,Bleskensgraaf,2614,ZH,156,NL,51.8725,4.78333 77444,Bloemendaal,2614,ZH,156,NL,52.02878,4.6944 77445,Bloemhof,2614,ZH,156,NL,51.89723,4.49943 77448,Bodegraven,2614,ZH,156,NL,52.0825,4.75 77449,Bodegraven-Reeuwijk,2614,ZH,156,NL,52.06541,4.76634 77451,Bolnes,2614,ZH,156,NL,51.895,4.57917 77463,Boskoop,2614,ZH,156,NL,52.075,4.65556 77465,Boven-Hardinxveld,2614,ZH,156,NL,51.82333,4.88194 77480,Brielle,2614,ZH,156,NL,51.90167,4.1625 77511,Capelle aan den IJssel,2614,ZH,156,NL,51.92917,4.57778 77512,Capelle-West,2614,ZH,156,NL,51.91667,4.56667 77513,Carnisse,2614,ZH,156,NL,51.88932,4.47758 77547,De Kieviet,2614,ZH,156,NL,52.12333,4.35839 77551,De Lier,2614,ZH,156,NL,51.975,4.24861 77556,De Peulen,2614,ZH,156,NL,51.82362,4.82165 77567,Delfshaven,2614,ZH,156,NL,51.90488,4.45315 77568,Delft,2614,ZH,156,NL,52.00667,4.35556 77584,Dirksland,2614,ZH,156,NL,51.74917,4.1 77600,Dordrecht,2614,ZH,156,NL,51.81,4.67361 77605,Driebruggen,2614,ZH,156,NL,52.04417,4.8 77608,Driemanspolder,2614,ZH,156,NL,52.05176,4.48504 77615,Duindorp,2614,ZH,156,NL,52.09078,4.26038 77616,Duinzigt,2614,ZH,156,NL,52.10485,4.32494 77669,Essesteijn,2614,ZH,156,NL,52.08534,4.37263 77674,Feijenoord,2614,ZH,156,NL,51.91169,4.50645 77700,Gemeente Alblasserdam,2614,ZH,156,NL,51.85985,4.66321 77701,Gemeente Albrandswaard,2614,ZH,156,NL,51.85792,4.40833 77705,Gemeente Alphen aan den Rijn,2614,ZH,156,NL,52.12974,4.68892 77718,Gemeente Barendrecht,2614,ZH,156,NL,51.84974,4.5254 77741,Gemeente Brielle,2614,ZH,156,NL,51.88819,4.18481 77748,Gemeente Capelle aan den IJssel,2614,ZH,156,NL,51.93567,4.57819 77759,Gemeente Delft,2614,ZH,156,NL,51.99968,4.36405 77761,Gemeente Den Haag,2614,ZH,156,NL,52.06866,4.28635 77770,Gemeente Dordrecht,2614,ZH,156,NL,51.79901,4.74159 77794,Gemeente Goeree-Overflakkee,2614,ZH,156,NL,51.75351,4.11264 77797,Gemeente Gorinchem,2614,ZH,156,NL,51.83873,4.97713 77798,Gemeente Gouda,2614,ZH,156,NL,52.01917,4.7079 77808,Gemeente Hardinxveld-Giessendam,2614,ZH,156,NL,51.82594,4.86428 77820,Gemeente Hellevoetsluis,2614,ZH,156,NL,51.83333,4.13333 77822,Gemeente Hendrik-Ido-Ambacht,2614,ZH,156,NL,51.84273,4.63975 77826,Gemeente Hillegom,2614,ZH,156,NL,52.29616,4.57822 77838,Gemeente Kaag en Braassem,2614,ZH,156,NL,52.19393,4.65516 77841,Gemeente Katwijk,2614,ZH,156,NL,52.19029,4.42129 77844,Gemeente Krimpen aan den IJssel,2614,ZH,156,NL,51.91458,4.58819 77849,Gemeente Lansingerland,2614,ZH,156,NL,52.00389,4.51088 77852,Gemeente Leiden,2614,ZH,156,NL,52.15274,4.4836 77853,Gemeente Leiderdorp,2614,ZH,156,NL,52.15707,4.54318 77854,Gemeente Leidschendam-Voorburg,2614,ZH,156,NL,52.07833,4.40139 77859,Gemeente Lisse,2614,ZH,156,NL,52.25601,4.54526 77867,Gemeente Maassluis,2614,ZH,156,NL,51.92332,4.24722 77873,Gemeente Midden-Delfland,2614,ZH,156,NL,51.96528,4.30525 77883,Gemeente Nieuwkoop,2614,ZH,156,NL,52.17198,4.78006 77889,Gemeente Noordwijk,2614,ZH,156,NL,52.26953,4.46354 77892,Gemeente Oegstgeest,2614,ZH,156,NL,52.18256,4.46676 77908,Gemeente Papendrecht,2614,ZH,156,NL,51.83175,4.69125 77911,Gemeente Pijnacker-Nootdorp,2614,ZH,156,NL,52.02615,4.41944 77921,Gemeente Ridderkerk,2614,ZH,156,NL,51.86969,4.59785 77923,Gemeente Rijswijk,2614,ZH,156,NL,52.0349,4.32785 77926,Gemeente Rotterdam,2614,ZH,156,NL,51.88246,4.28784 77931,Gemeente Schiedam,2614,ZH,156,NL,51.9265,4.38675 77937,Gemeente Sliedrecht,2614,ZH,156,NL,51.82999,4.77191 77952,Gemeente Teylingen,2614,ZH,156,NL,52.21556,4.50648 77975,Gemeente Vlaardingen,2614,ZH,156,NL,51.91754,4.3257 77979,Gemeente Voorschoten,2614,ZH,156,NL,52.12533,4.44014 77984,Gemeente Waddinxveen,2614,ZH,156,NL,52.04247,4.64486 77986,Gemeente Wassenaar,2614,ZH,156,NL,52.13791,4.37546 77993,Gemeente Westland,2614,ZH,156,NL,51.99671,4.22729 77995,Gemeente Westvoorne,2614,ZH,156,NL,51.89308,4.08922 78011,Gemeente Zoetermeer,2614,ZH,156,NL,52.05954,4.48832 78012,Gemeente Zoeterwoude,2614,ZH,156,NL,52.1141,4.51142 78013,Gemeente Zuidplas,2614,ZH,156,NL,52.01574,4.61048 78017,Gemeente Zwijndrecht,2614,ZH,156,NL,51.82399,4.61258 78029,Giessenburg,2614,ZH,156,NL,51.85083,4.89028 78030,Giessendam,2614,ZH,156,NL,51.83257,4.83583 78036,Goedereede,2614,ZH,156,NL,51.8175,3.98056 78041,Gorinchem,2614,ZH,156,NL,51.83652,4.97243 78044,Gouda,2614,ZH,156,NL,52.01667,4.70833 78045,Gouderak,2614,ZH,156,NL,51.98417,4.67778 78046,Goudswaard,2614,ZH,156,NL,51.79417,4.27639 78048,Gouwsluis,2614,ZH,156,NL,52.11943,4.66899 78060,Groenswaard,2614,ZH,156,NL,52.05154,4.64541 78065,Groot IJsselmonde,2614,ZH,156,NL,51.88264,4.54937 78066,Groot-Ammers,2614,ZH,156,NL,51.92333,4.82361 78083,Haastrecht,2614,ZH,156,NL,52.00074,4.77639 78117,Heerjansdam,2614,ZH,156,NL,51.83583,4.56389 78128,Heijplaat,2614,ZH,156,NL,51.89333,4.42083 78134,Hellevoetsluis,2614,ZH,156,NL,51.83333,4.13333 78139,Hendrik-Ido-Ambacht,2614,ZH,156,NL,51.84417,4.63889 78157,Hillegom,2614,ZH,156,NL,52.29083,4.58333 78163,Hoek van Holland,2614,ZH,156,NL,51.9775,4.13333 78167,Hoge Mors,2614,ZH,156,NL,52.15616,4.46025 78174,Honselersdijk,2614,ZH,156,NL,52.00665,4.22441 78176,Hoogblokland,2614,ZH,156,NL,51.875,4.97639 78184,Hoogmade,2614,ZH,156,NL,52.16917,4.58194 78216,Katendrecht,2614,ZH,156,NL,51.90074,4.48254 78218,Katwijk aan den Rijn,2614,ZH,156,NL,52.19417,4.42222 78217,Katwijk aan Zee,2614,ZH,156,NL,52.20333,4.39861 78226,Kerkehout,2614,ZH,156,NL,52.11018,4.37957 78232,Kijkduin,2614,ZH,156,NL,52.06765,4.22188 78233,Klaaswaal,2614,ZH,156,NL,51.77,4.44583 78249,Kop van Zuid,2614,ZH,156,NL,51.90553,4.48706 78256,Krimpen aan den IJssel,2614,ZH,156,NL,51.91667,4.60278 78257,Krimpenerwaard,2614,ZH,156,NL,51.98171,4.77828 78263,Kwintsheul,2614,ZH,156,NL,52.01333,4.25556 78285,Leiden,2614,ZH,156,NL,52.15833,4.49306 78286,Leiderdorp,2614,ZH,156,NL,52.15833,4.52917 78287,Leimuiden,2614,ZH,156,NL,52.22417,4.66944 78303,Liesveld,2614,ZH,156,NL,51.9325,4.83194 78312,Lisse,2614,ZH,156,NL,52.26,4.55694 78318,Lombardijen,2614,ZH,156,NL,51.8738,4.52192 78336,Maasdijk,2614,ZH,156,NL,51.95917,4.21389 78338,Maasland,2614,ZH,156,NL,51.93417,4.27222 78339,Maassluis,2614,ZH,156,NL,51.92333,4.25 78382,Merenwijk,2614,ZH,156,NL,52.17655,4.50885 78389,Middelharnis,2614,ZH,156,NL,51.7575,4.16528 78391,Middelsluis,2614,ZH,156,NL,51.7425,4.44167 78400,Mijnsheerenland,2614,ZH,156,NL,51.79667,4.4875 78408,Monster,2614,ZH,156,NL,52.02583,4.175 78416,Naaldwijk,2614,ZH,156,NL,51.99417,4.20972 78419,Neder-Hardinxveld,2614,ZH,156,NL,51.82879,4.85489 78430,Nieuw-Beijerland,2614,ZH,156,NL,51.8125,4.34306 78433,Nieuw-Lekkerland,2614,ZH,156,NL,51.88915,4.68653 78443,Nieuwenhoorn,2614,ZH,156,NL,51.85417,4.14306 78445,Nieuwkoop,2614,ZH,156,NL,52.15083,4.77639 78449,Nieuwpoort,2614,ZH,156,NL,51.93583,4.86806 78450,Nieuwveen,2614,ZH,156,NL,52.19667,4.75694 78458,Nissewaard,2614,ZH,156,NL,51.83716,4.2754 78461,Noord-Hofland,2614,ZH,156,NL,52.14059,4.45864 78465,Noordeinde,2614,ZH,156,NL,52.01667,4.48333 78466,Noordeloos,2614,ZH,156,NL,51.90333,4.94167 78470,Noordwijk-Binnen,2614,ZH,156,NL,52.234,4.44474 78471,Noordwijkerhout,2614,ZH,156,NL,52.26167,4.49306 78475,Numansdorp,2614,ZH,156,NL,51.73167,4.4375 78485,Oegstgeest,2614,ZH,156,NL,52.18,4.46944 78501,Ommoord,2614,ZH,156,NL,51.95951,4.54533 78509,Oostdorp,2614,ZH,156,NL,52.14994,4.39319 78529,Oostvoorne,2614,ZH,156,NL,51.9125,4.09861 78541,Oranjewijk,2614,ZH,156,NL,52.04922,4.65374 78552,Oud-Beijerland,2614,ZH,156,NL,51.82417,4.4125 78556,Ouddorp,2614,ZH,156,NL,51.81167,3.93472 78559,Oude Wetering,2614,ZH,156,NL,52.21417,4.64444 78564,Ouderkerk aan den IJssel,2614,ZH,156,NL,51.93417,4.63611 78573,Overschie,2614,ZH,156,NL,51.93863,4.42766 78575,Palenstein,2614,ZH,156,NL,52.05579,4.50869 78578,Papendrecht,2614,ZH,156,NL,51.83167,4.6875 78579,Papenveer,2614,ZH,156,NL,52.185,4.725 78586,Pendrecht,2614,ZH,156,NL,51.87152,4.46901 78587,Pernis,2614,ZH,156,NL,51.88833,4.38889 78590,Piershil,2614,ZH,156,NL,51.79333,4.31389 78591,Pijnacker,2614,ZH,156,NL,52.01954,4.42946 78592,Poeldijk,2614,ZH,156,NL,52.02417,4.21944 78611,Reeuwijk,2614,ZH,156,NL,52.04667,4.725 78620,Rhoon,2614,ZH,156,NL,51.8575,4.42222 78621,Ridderkerk,2614,ZH,156,NL,51.8725,4.60278 78624,Rijnsaterwoude,2614,ZH,156,NL,52.19583,4.67083 78625,Rijnsburg,2614,ZH,156,NL,52.19,4.44167 78626,Rijpwetering,2614,ZH,156,NL,52.1925,4.58333 78628,Rijsoord,2614,ZH,156,NL,51.85083,4.59583 78630,Rijswijk,2614,ZH,156,NL,52.03634,4.32501 78632,Rockanje,2614,ZH,156,NL,51.87167,4.07083 78634,Roelofarendsveen,2614,ZH,156,NL,52.20333,4.63333 78642,Rotterdam,2614,ZH,156,NL,51.9225,4.47917 78644,Rozenburg,2614,ZH,156,NL,51.90417,4.24861 78647,Rugge,2614,ZH,156,NL,51.89921,4.15231 78654,Sassenheim,2614,ZH,156,NL,52.225,4.52222 78663,Schelluinen,2614,ZH,156,NL,51.84333,4.92639 78667,Scheveningen,2614,ZH,156,NL,52.10461,4.27557 78668,Schiebroek,2614,ZH,156,NL,51.95838,4.47124 78669,Schiedam,2614,ZH,156,NL,51.91917,4.38889 78677,Schipluiden,2614,ZH,156,NL,51.97583,4.31389 78680,Schoonhoven,2614,ZH,156,NL,51.9475,4.84861 78710,Sliedrecht,2614,ZH,156,NL,51.82083,4.77639 78711,Slikkerveer,2614,ZH,156,NL,51.88531,4.60494 78726,Spangen,2614,ZH,156,NL,51.91688,4.43539 78733,Spijkenisse,2614,ZH,156,NL,51.845,4.32917 78734,Spoorwijk,2614,ZH,156,NL,52.05347,4.31339 78746,Statenkwartier,2614,ZH,156,NL,52.09311,4.27577 78755,Stein,2614,ZH,156,NL,52.00333,4.78194 78760,Stolwijk,2614,ZH,156,NL,51.9725,4.77361 78763,Strijen,2614,ZH,156,NL,51.74521,4.55083 78764,Strijp,2614,ZH,156,NL,52.03083,4.30139 78771,Terbregge,2614,ZH,156,NL,51.95328,4.51537 78779,The Hague,2614,ZH,156,NL,52.07667,4.29861 78794,Tuindorp,2614,ZH,156,NL,51.93032,4.3784 78828,Valkenburg,2614,ZH,156,NL,52.18,4.43194 78850,Vierpolders,2614,ZH,156,NL,51.87917,4.17917 78855,Vlaardingen,2614,ZH,156,NL,51.9125,4.34167 78861,Vlietwijk,2614,ZH,156,NL,52.12436,4.45736 78868,Vogelwijk,2614,ZH,156,NL,52.07631,4.2479 78873,Vondelwijk,2614,ZH,156,NL,52.05497,4.65314 78874,Voorburg,2614,ZH,156,NL,52.07417,4.35972 78875,Voorhout,2614,ZH,156,NL,52.22167,4.48472 78876,Voorschoten,2614,ZH,156,NL,52.1275,4.44861 78883,Vreewijk,2614,ZH,156,NL,51.88428,4.51967 78895,Waarder,2614,ZH,156,NL,52.06083,4.82083 78897,Waddinxveen,2614,ZH,156,NL,52.045,4.65139 78906,Warmond,2614,ZH,156,NL,52.19667,4.50278 78909,Wassenaar,2614,ZH,156,NL,52.14583,4.40278 78913,Weerestein,2614,ZH,156,NL,52.30381,4.58861 78916,Weijpoort,2614,ZH,156,NL,52.08167,4.80278 78944,Westmaas,2614,ZH,156,NL,51.78667,4.475 78983,Woubrugge,2614,ZH,156,NL,52.17,4.63611 78990,Ypenburg,2614,ZH,156,NL,52.04098,4.36981 79011,Zevenhoven,2614,ZH,156,NL,52.18167,4.77917 79016,Zoetermeer,2614,ZH,156,NL,52.0575,4.49306 79017,Zoeterwoude-Dorp,2614,ZH,156,NL,52.12,4.49583 79022,Zuid-Beijerland,2614,ZH,156,NL,51.75083,4.36806 79029,Zuidwijk,2614,ZH,156,NL,51.87532,4.48514 79035,Zwijndrecht,2614,ZH,156,NL,51.8175,4.63333 77314,Abcoude,2610,UT,156,NL,52.2725,4.96944 77334,Amerongen,2610,UT,156,NL,52.0025,5.45972 77335,Amersfoort,2610,UT,156,NL,52.155,5.3875 77360,Austerlitz,2610,UT,156,NL,52.08,5.31528 77364,Baambrugge,2610,UT,156,NL,52.24583,4.98889 77368,Baarn,2610,UT,156,NL,52.21167,5.2875 77461,Bosch en Duin,2610,UT,156,NL,52.11667,5.24167 77479,Breukelen,2610,UT,156,NL,52.17417,5.00139 77503,Bunnik,2610,UT,156,NL,52.06667,5.19861 77504,Bunschoten,2610,UT,156,NL,52.24304,5.37884 77524,Cothen,2610,UT,156,NL,51.99667,5.30833 77532,De Bilt,2610,UT,156,NL,52.11,5.18056 77542,De Hagen,2610,UT,156,NL,51.99381,5.10263 77560,De Uithof,2610,UT,156,NL,52.08526,5.17456 77595,Doorn,2610,UT,156,NL,52.03343,5.34571 77604,Driebergen-Rijsenburg,2610,UT,156,NL,52.05333,5.28056 77708,Gemeente Amersfoort,2610,UT,156,NL,52.17375,5.38954 77717,Gemeente Baarn,2610,UT,156,NL,52.20602,5.27144 77745,Gemeente Bunnik,2610,UT,156,NL,52.04228,5.21664 77746,Gemeente Bunschoten,2610,UT,156,NL,52.24249,5.35837 77756,Gemeente De Bilt,2610,UT,156,NL,52.14137,5.16828 77757,Gemeente De Ronde Venen,2610,UT,156,NL,52.21515,4.90123 77779,Gemeente Eemnes,2610,UT,156,NL,52.25253,5.28391 77834,Gemeente Houten,2610,UT,156,NL,52.02683,5.16941 77837,Gemeente IJsselstein,2610,UT,156,NL,52.02912,5.02868 77857,Gemeente Leusden,2610,UT,156,NL,52.12418,5.41245 77862,Gemeente Lopik,2610,UT,156,NL,51.98991,4.94851 77878,Gemeente Montfoort,2610,UT,156,NL,52.04767,4.94844 77882,Gemeente Nieuwegein,2610,UT,156,NL,52.02843,5.09539 77906,Gemeente Oudewater,2610,UT,156,NL,52.0284,4.86243 77917,Gemeente Renswoude,2610,UT,156,NL,52.07294,5.53352 77920,Gemeente Rhenen,2610,UT,156,NL,51.96151,5.57058 77940,Gemeente Soest,2610,UT,156,NL,52.15636,5.29854 77964,Gemeente Utrecht,2610,UT,156,NL,52.09675,5.03708 77965,Gemeente Utrechtse Heuvelrug,2610,UT,156,NL,52.03486,5.35738 77969,Gemeente Veenendaal,2610,UT,156,NL,52.02459,5.55562 77999,Gemeente Wijk bij Duurstede,2610,UT,156,NL,51.97452,5.33661 78002,Gemeente Woerden,2610,UT,156,NL,52.10675,4.90066 78004,Gemeente Woudenberg,2610,UT,156,NL,52.08055,5.3981 78009,Gemeente Zeist,2610,UT,156,NL,52.08847,5.23275 78058,Groenekan,2610,UT,156,NL,52.12333,5.15278 78169,Hollandsche Rading,2610,UT,156,NL,52.175,5.17778 78189,Houten,2610,UT,156,NL,52.02833,5.16806 78201,IJsselstein,2610,UT,156,NL,52.02,5.04306 78219,Kedichem,2610,UT,156,NL,51.86,5.05 78223,Kerckebosch,2610,UT,156,NL,52.07844,5.26584 78271,Langenoord,2610,UT,156,NL,52.18768,5.38034 78279,Leerdam,2610,UT,156,NL,51.89333,5.09167 78280,Leersum,2610,UT,156,NL,52.01167,5.42778 78294,Leusden,2610,UT,156,NL,52.1325,5.43194 78311,Linschoten,2610,UT,156,NL,52.0625,4.91528 78321,Lopik,2610,UT,156,NL,51.9725,4.94861 78326,Lunetten,2610,UT,156,NL,52.06178,5.13474 78331,Maarn,2610,UT,156,NL,52.06417,5.37083 78332,Maarssen,2610,UT,156,NL,52.13917,5.04167 78333,Maartensdijk,2610,UT,156,NL,52.155,5.175 78399,Mijdrecht,2610,UT,156,NL,52.20667,4.8625 78409,Montfoort,2610,UT,156,NL,52.04583,4.95278 78441,Nieuwegein,2610,UT,156,NL,52.02917,5.08056 78451,Nijenheim,2610,UT,156,NL,52.08689,5.21852 78482,Odijk,2610,UT,156,NL,52.0525,5.23611 78504,Oog in Al,2610,UT,156,NL,52.08636,5.0847 78567,Oudewater,2610,UT,156,NL,52.025,4.86806 78570,Overberg,2610,UT,156,NL,52.04,5.49444 78608,Randenbroek,2610,UT,156,NL,52.14863,5.4012 78615,Renswoude,2610,UT,156,NL,52.07333,5.54028 78619,Rhenen,2610,UT,156,NL,51.95917,5.56806 78682,Schoonrewoerd,2610,UT,156,NL,51.92083,5.11667 78719,Soest,2610,UT,156,NL,52.17333,5.29167 78720,Soestdijk,2610,UT,156,NL,52.19083,5.28472 78725,Spakenburg,2610,UT,156,NL,52.25,5.36667 78728,Spechtenkamp,2610,UT,156,NL,52.13926,5.01758 78758,Stichtse Vecht,2610,UT,156,NL,52.17679,5.01259 78822,Utrecht,2610,UT,156,NL,52.09083,5.12222 78837,Veenendaal,2610,UT,156,NL,52.02863,5.55891 78841,Veldhuizen,2610,UT,156,NL,52.07537,5.01234 78849,Vianen,2610,UT,156,NL,51.9925,5.09167 78854,Vinkeveen,2610,UT,156,NL,52.21507,4.93372 78858,Vleuten,2610,UT,156,NL,52.10583,5.01528 78882,Vreeswijk,2610,UT,156,NL,52.01088,5.09285 78925,Werkhoven,2610,UT,156,NL,52.025,5.24444 78954,Wijk bij Duurstede,2610,UT,156,NL,51.97417,5.34167 78960,Wilnis,2610,UT,156,NL,52.19667,4.89722 78973,Woerden,2610,UT,156,NL,52.085,4.88333 78984,Woudenberg,2610,UT,156,NL,52.08083,5.41667 79005,Zeist,2610,UT,156,NL,52.09,5.23333 77304,Aagtekerke,2620,ZE,156,NL,51.54667,3.50972 77311,Aardenburg,2620,ZE,156,NL,51.27333,3.44722 77355,Arnemuiden,2620,ZE,156,NL,51.50167,3.675 77362,Axel,2620,ZE,156,NL,51.26667,3.90833 77460,Borssele,2620,ZE,156,NL,51.42333,3.73472 77477,Breskens,2620,ZE,156,NL,51.39583,3.55556 77488,Brouwershaven,2620,ZE,156,NL,51.72667,3.9125 77490,Bruinisse,2620,ZE,156,NL,51.66167,4.09444 77520,Colijnsplaat,2620,ZE,156,NL,51.59917,3.84861 77531,Dauwendaele,2620,ZE,156,NL,51.49299,3.62624 77589,Domburg,2620,ZE,156,NL,51.56333,3.49583 77737,Gemeente Borsele,2620,ZE,156,NL,51.44191,3.81127 77795,Gemeente Goes,2620,ZE,156,NL,51.515,3.83949 77836,Gemeente Hulst,2620,ZE,156,NL,51.31897,4.0869 77840,Gemeente Kapelle,2620,ZE,156,NL,51.48223,3.96524 77872,Gemeente Middelburg,2620,ZE,156,NL,51.49719,3.65459 77886,Gemeente Noord-Beveland,2620,ZE,156,NL,51.57226,3.78353 77915,Gemeente Reimerswaal,2620,ZE,156,NL,51.4204,4.13169 77938,Gemeente Sluis,2620,ZE,156,NL,51.3349,3.51974 77949,Gemeente Terneuzen,2620,ZE,156,NL,51.2855,3.82817 77953,Gemeente Tholen,2620,ZE,156,NL,51.58336,4.13373 77970,Gemeente Veere,2620,ZE,156,NL,51.53902,3.55688 77977,Gemeente Vlissingen,2620,ZE,156,NL,51.45914,3.62325 78037,Goes,2620,ZE,156,NL,51.50417,3.88889 78055,Griffioen,2620,ZE,156,NL,51.50548,3.59598 78057,Grijpskerke,2620,ZE,156,NL,51.53417,3.56111 78077,Haamstede,2620,ZE,156,NL,51.69682,3.74299 78195,Hulst,2620,ZE,156,NL,51.28,4.05278 78202,IJzendijke,2620,ZE,156,NL,51.32167,3.61667 78214,Kamperland,2620,ZE,156,NL,51.57167,3.70417 78215,Kapelle,2620,ZE,156,NL,51.48627,3.95804 78234,Klarenbeek,2620,ZE,156,NL,51.50964,3.61132 78239,Kloetinge,2620,ZE,156,NL,51.49833,3.91528 78242,Koewacht,2620,ZE,156,NL,51.22833,3.97361 78253,Koudekerke,2620,ZE,156,NL,51.48167,3.55417 78266,Lammerenburg,2620,ZE,156,NL,51.46667,3.55833 78346,Malta,2620,ZE,156,NL,51.65,3.93333 78378,Meliskerke,2620,ZE,156,NL,51.51417,3.50972 78388,Middelburg,2620,ZE,156,NL,51.5,3.61389 78429,Nieuw- en Sint Joosland,2620,ZE,156,NL,51.48333,3.65694 78444,Nieuwerkerk,2620,ZE,156,NL,51.65083,4.00139 78508,Oostburg,2620,ZE,156,NL,51.32583,3.4875 78521,Oosterland,2620,ZE,156,NL,51.65,4.03611 78527,Oostkapelle,2620,ZE,156,NL,51.56667,3.55139 78548,Othene,2620,ZE,156,NL,51.33083,3.85972 78555,Oud-Vossemeer,2620,ZE,156,NL,51.57083,4.19861 78593,Poortvliet,2620,ZE,156,NL,51.54417,4.14306 78613,Renesse,2620,ZE,156,NL,51.7325,3.775 78653,Sas van Gent,2620,ZE,156,NL,51.2275,3.79861 78659,Scharendijke,2620,ZE,156,NL,51.73583,3.84306 78665,Scherpenisse,2620,ZE,156,NL,51.54667,4.10556 78678,Schoondijke,2620,ZE,156,NL,51.35417,3.55556 78683,Schouwen-Duiveland,2620,ZE,156,NL,51.69294,3.88676 78687,Serooskerke,2620,ZE,156,NL,51.54833,3.59444 78699,Sint Laurens,2620,ZE,156,NL,51.5275,3.60278 78703,Sint Philipsland,2620,ZE,156,NL,51.61667,4.16528 78714,Sluis,2620,ZE,156,NL,51.30833,3.38611 78715,Sluiskil,2620,ZE,156,NL,51.27833,3.83611 78747,Stavenisse,2620,ZE,156,NL,51.5875,4.0125 78774,Terneuzen,2620,ZE,156,NL,51.33583,3.82778 78781,Tholen,2620,ZE,156,NL,51.53167,4.22083 78862,Vlissingen,2620,ZE,156,NL,51.4425,3.57361 78893,Waarde,2620,ZE,156,NL,51.4175,4.06806 78923,Wemeldinge,2620,ZE,156,NL,51.51833,3.99722 78929,West-Souburg,2620,ZE,156,NL,51.46417,3.59167 78931,Westdorpe,2620,ZE,156,NL,51.2325,3.82639 78941,Westerzicht,2620,ZE,156,NL,51.46252,3.58687 78942,Westkapelle,2620,ZE,156,NL,51.52917,3.44028 78969,Wissenkerke,2620,ZE,156,NL,51.585,3.74722 78977,Wolphaartsdijk,2620,ZE,156,NL,51.53167,3.81944 78989,Yerseke,2620,ZE,156,NL,51.4925,4.05 78992,Zaamslag,2620,ZE,156,NL,51.3125,3.9125 79013,Zierikzee,2620,ZE,156,NL,51.65,3.91944 79020,Zoutelande,2620,ZE,156,NL,51.50167,3.48472 79681,Åneby,1017,02,165,NO,60.08926,10.86998 79684,Årnes,1017,02,165,NO,60.12237,11.47005 79687,Ås,1017,02,165,NO,59.66366,10.79101 79044,Ask,1017,02,165,NO,60.07131,11.0362 79045,Asker,1017,02,165,NO,59.83734,10.43595 79051,Auli,1017,02,165,NO,60.0345,11.36046 79054,Aurskog-Høland,1017,02,165,NO,59.88321,11.56491 79055,Aursmoen,1017,02,165,NO,59.92763,11.44275 79094,Bærum,1017,02,165,NO,59.88996,10.52649 79073,Billingstad,1017,02,165,NO,59.87548,10.4823 79078,Bjørkelangen,1017,02,165,NO,59.88357,11.56396 79080,Blakstad,1017,02,165,NO,59.8191,10.4645 79106,Drøbak,1017,02,165,NO,59.66333,10.62975 79115,Eidsvoll,1017,02,165,NO,60.32893,11.26119 79123,Enebakk,1017,02,165,NO,59.76452,11.14492 79132,Fagerstrand,1017,02,165,NO,59.73746,10.59404 79137,Fet,1017,02,165,NO,59.92216,11.16778 79138,Fetsund,1017,02,165,NO,59.92463,11.15711 79145,Fjellfoten,1017,02,165,NO,60.08967,11.47222 79148,Flateby,1017,02,165,NO,59.82951,11.15345 79161,Frogn,1017,02,165,NO,59.66665,10.63566 79162,Frogner,1017,02,165,NO,60.02463,11.10284 79178,Gjerdrum,1017,02,165,NO,60.07159,11.03597 79239,Hurdal,1017,02,165,NO,60.43518,11.06707 79256,Jessheim,1017,02,165,NO,60.14151,11.17515 79276,Kløfta,1017,02,165,NO,60.07407,11.13805 79310,Leirsund,1017,02,165,NO,59.99682,11.08746 79324,Lillestrøm,1017,02,165,NO,59.95597,11.04918 79346,Lørenskog,1017,02,165,NO,59.93209,10.96079 79340,Lysaker,1017,02,165,NO,59.90994,10.63545 79355,Maura,1017,02,165,NO,60.2583,11.03192 79385,Nannestad,1017,02,165,NO,60.21707,11.012 79389,Nes,1017,02,165,NO,60.12252,11.4657 79392,Neskollen,1017,02,165,NO,60.12159,11.33926 79394,Nesodden,1017,02,165,NO,59.8422,10.6494 79395,Nesoddtangen,1017,02,165,NO,59.86244,10.66308 79399,Nittedal,1017,02,165,NO,60.04278,10.88167 79420,Oppegård,1017,02,165,NO,59.81149,10.79712 79464,Råholt,1017,02,165,NO,60.27513,11.17901 79465,Rælingen,1017,02,165,NO,59.92626,11.06527 79458,Rotnes,1017,02,165,NO,60.05707,10.86135 79506,Skedsmo,1017,02,165,NO,59.95448,11.03952 79507,Ski,1017,02,165,NO,59.72049,10.83882 79522,Skui,1017,02,165,NO,59.92746,10.4475 79586,Sørum,1017,02,165,NO,59.98709,11.24019 79587,Sørumsand,1017,02,165,NO,59.98621,11.24154 79621,Ullensaker,1017,02,165,NO,60.14401,11.17441 79642,Vestby,1017,02,165,NO,59.60228,10.74807 79677,Ål,1011,06,165,NO,60.63028,8.56115 79685,Åros,1011,06,165,NO,59.7061,10.51092 79104,Drammen,1011,06,165,NO,59.74389,10.20449 79153,Flå,1011,06,165,NO,60.4291,9.46611 79150,Flesberg,1011,06,165,NO,59.83283,9.58308 79174,Geilo,1011,06,165,NO,60.53369,8.20539 79184,Gol,1011,06,165,NO,60.69953,8.95024 79217,Hemsedal,1011,06,165,NO,60.86114,8.56537 79227,Hol,1011,06,165,NO,60.61528,8.30194 79228,Hole,1011,06,165,NO,60.08017,10.2784 79247,Hønefoss,1011,06,165,NO,60.16804,10.25647 79240,Hurum,1011,06,165,NO,59.61401,10.45763 79242,Hvittingfoss,1011,06,165,NO,59.48572,10.01173 79281,Kongsberg,1011,06,165,NO,59.66516,9.64653 79289,Krødsherad,1011,06,165,NO,60.17944,9.62124 79320,Lier,1011,06,165,NO,59.78663,10.2459 79368,Modum,1011,06,165,NO,59.97346,10.00468 79388,Nedre Eiker,1011,06,165,NO,59.75023,10.00736 79390,Nes,1011,06,165,NO,60.56804,9.10169 79391,Nesbyen,1011,06,165,NO,60.56809,9.10274 79411,Nore og Uvdal,1011,06,165,NO,60.26706,8.94635 79412,Noresund,1011,06,165,NO,60.17985,9.62411 79700,Øvre Eiker,1011,06,165,NO,59.77111,9.9084 79432,Prestfoss,1011,06,165,NO,60.04343,9.6352 79451,Ringerike,1011,06,165,NO,60.16018,10.2566 79456,Rollag,1011,06,165,NO,59.98413,9.29489 79471,Røyken,1011,06,165,NO,59.74019,10.41321 79574,Sætre,1011,06,165,NO,59.68129,10.52749 79497,Sigdal,1011,06,165,NO,60.04592,9.63673 79515,Skoger,1011,06,165,NO,59.71327,10.25356 79597,Tofte,1011,06,165,NO,59.54275,10.56138 79604,Tranby,1011,06,165,NO,59.8085,10.26114 79653,Vikersund,1011,06,165,NO,59.96838,9.99107 79039,Alta,1016,20,165,NO,69.97675,23.29634 79672,Ávanuorri,1016,20,165,NO,70.99634,24.66217 79093,Båtsfjord,1016,20,165,NO,70.63428,29.7175 79072,Berlevåg,1016,20,165,NO,70.85778,29.08636 79079,Bjørnevatn,1016,20,165,NO,69.66745,29.98722 79170,Gamvik,1016,20,165,NO,71.04107,27.85144 79203,Hammerfest,1016,20,165,NO,70.66257,23.68295 79209,Hasvik,1016,20,165,NO,70.59164,22.30272 79233,Honningsvåg,1016,20,165,NO,70.98209,25.97037 79299,Kárášjohka,1016,20,165,NO,69.47187,25.51122 79264,Karasjok,1016,20,165,NO,69.47224,25.51885 79268,Kautokeino,1016,20,165,NO,69.01151,23.04151 79270,Kirkenes,1016,20,165,NO,69.72706,30.04578 79272,Kjøllefjord,1016,20,165,NO,70.94574,27.3465 79290,Kvalsund,1016,20,165,NO,70.4991,23.97393 79301,Lakselv,1016,20,165,NO,70.05133,24.97182 79307,Lebesby,1016,20,165,NO,70.94535,27.35134 79329,Loppa,1016,20,165,NO,70.23952,22.35136 79381,Måsøy,1016,20,165,NO,70.99654,24.66146 79356,Mehamn,1016,20,165,NO,71.04137,27.85133 79396,Nesseby,1016,20,165,NO,69.88541,28.43368 79407,Nordkapp,1016,20,165,NO,70.97808,25.97473 79691,Øksfjord,1016,20,165,NO,70.23936,22.3507 79429,Porsanger,1016,20,165,NO,70.05214,24.95592 79462,Rypefjord,1016,20,165,NO,70.64126,23.67213 79582,Sør-Varanger,1016,20,165,NO,69.72859,30.04264 79588,Tana,1016,20,165,NO,70.19976,28.18494 79628,Vadsø,1016,20,165,NO,70.07412,29.74922 79633,Vardø,1016,20,165,NO,70.3704,31.10866 79040,Alvdal,1019,04,165,NO,62.10854,10.63483 79679,Åmot,1019,04,165,NO,61.13199,11.37328 79690,Åsnes,1019,04,165,NO,60.61363,12.012 79089,Brumunddal,1019,04,165,NO,60.88095,10.93948 79114,Eidskog,1019,04,165,NO,59.98556,12.12502 79122,Elverum,1019,04,165,NO,60.88159,11.56314 79124,Engerdal,1019,04,165,NO,61.75774,11.95966 79154,Folldal,1019,04,165,NO,62.13329,9.9971 79192,Grue,1019,04,165,NO,60.45133,12.05489 79201,Hamar,1019,04,165,NO,60.7945,11.06798 79254,Innbygda,1019,04,165,NO,61.31484,12.26374 79271,Kirkenær,1019,04,165,NO,60.4579,12.05855 79282,Kongsvinger,1019,04,165,NO,60.19117,11.99916 79284,Koppang,1019,04,165,NO,61.57219,11.04659 79347,Løten,1019,04,165,NO,60.81771,11.34373 79369,Moelv,1019,04,165,NO,60.93333,10.7 79404,Nord-Odal,1019,04,165,NO,60.39195,11.54151 79422,Os,1019,04,165,NO,62.49536,11.22807 79444,Rena,1019,04,165,NO,61.13222,11.37156 79445,Rendalen,1019,04,165,NO,61.89004,11.07694 79452,Ringsaker,1019,04,165,NO,60.88216,10.9503 79477,Sand,1019,04,165,NO,60.3922,11.5403 79504,Skarnes,1019,04,165,NO,60.25391,11.68485 79519,Skotterud,1019,04,165,NO,59.98281,12.12825 79581,Sør-Odal,1019,04,165,NO,60.25455,11.68246 79535,Spetalen,1019,04,165,NO,60.18333,11.9 79537,Stange,1019,04,165,NO,60.71576,11.19069 79547,Stor-Elvdal,1019,04,165,NO,61.57198,11.04759 79599,Tolga,1019,04,165,NO,62.40984,10.9977 79610,Trysil,1019,04,165,NO,61.31549,12.26422 79615,Tynset,1019,04,165,NO,62.27387,10.77626 79667,Våler,1019,04,165,NO,60.67845,11.83314 79675,Ågotnes,1023,12,165,NO,60.40306,5.01927 79048,Askøy,1023,12,165,NO,60.40916,5.22599 79056,Austevoll,1023,12,165,NO,60.09578,5.22722 79057,Austrheim,1023,12,165,NO,60.77742,4.93227 79069,Bergen,1023,12,165,NO,60.392,5.328 79097,Bømlo,1023,12,165,NO,59.79384,5.17624 79098,Dale,1023,12,165,NO,60.58639,5.81888 79112,Eidfjord,1023,12,165,NO,60.46741,7.06971 79119,Eikelandsosen,1023,12,165,NO,60.24175,5.74433 79125,Espeland,1023,12,165,NO,60.38249,5.4657 79126,Etne,1023,12,165,NO,59.66472,5.93438 79136,Fedje,1023,12,165,NO,60.77873,4.71965 79142,Fitjar,1023,12,165,NO,59.91742,5.31637 79144,Fjell,1023,12,165,NO,60.36267,5.12194 79160,Frekhaug,1023,12,165,NO,60.51321,5.24252 79166,Fusa,1023,12,165,NO,60.24072,5.74458 79187,Granvin,1023,12,165,NO,60.52629,6.72178 79198,Hagavik,1023,12,165,NO,60.18076,5.40146 79243,Hylkje,1023,12,165,NO,60.51028,5.35444 79252,Indre Arna,1023,12,165,NO,60.41768,5.47087 79258,Jondal,1023,12,165,NO,60.2762,6.25257 79269,Kinsarvik,1023,12,165,NO,60.37567,6.71948 79277,Knappskog,1023,12,165,NO,60.37906,5.05602 79279,Knarvik,1023,12,165,NO,60.5453,5.28208 79291,Kvam,1023,12,165,NO,60.36977,6.14344 79293,Kvinnherad,1023,12,165,NO,59.98421,6.01227 79311,Leirvik,1023,12,165,NO,59.77977,5.50051 79326,Lindås,1023,12,165,NO,60.5491,5.28559 79328,Lonevåg,1023,12,165,NO,60.52556,5.49563 79351,Manger,1023,12,165,NO,60.64145,5.04136 79354,Masfjorden,1023,12,165,NO,60.79947,5.30035 79357,Meland,1023,12,165,NO,60.51777,5.24063 79367,Modalen,1023,12,165,NO,60.81735,5.8079 79376,Mosterhamn,1023,12,165,NO,59.69919,5.38585 79413,Norheimsund,1023,12,165,NO,60.37089,6.14562 79417,Odda,1023,12,165,NO,60.06697,6.54541 79423,Os,1023,12,165,NO,60.18547,5.46962 79426,Osterøy,1023,12,165,NO,60.52389,5.50551 79702,Øygarden,1023,12,165,NO,60.59041,4.8389 79703,Øystese,1023,12,165,NO,60.38825,6.19251 79434,Radøy,1023,12,165,NO,60.64187,5.0411 79457,Rosendal,1023,12,165,NO,59.98589,6.01157 79459,Rubbestadneset,1023,12,165,NO,59.81559,5.26822 79473,Sagvåg,1023,12,165,NO,59.78139,5.38996 79476,Samnanger,1023,12,165,NO,60.37745,5.76219 79485,Sandsli,1023,12,165,NO,60.30323,5.28554 79517,Skogsvågen,1023,12,165,NO,60.25512,5.10161 79548,Stord,1023,12,165,NO,59.78092,5.4998 79550,Storebø,1023,12,165,NO,60.09485,5.22705 79558,Straume,1023,12,165,NO,60.36131,5.12199 79564,Sund,1023,12,165,NO,60.27019,5.07225 79568,Sveio,1023,12,165,NO,59.54303,5.3541 79572,Syfteland,1023,12,165,NO,60.23803,5.45285 79617,Tysnes,1023,12,165,NO,60.04076,5.53129 79622,Ullensvang,1023,12,165,NO,60.37501,6.72073 79626,Ulvik,1023,12,165,NO,60.56719,6.91871 79629,Vaksdal,1023,12,165,NO,60.5903,5.82272 79662,Voss,1023,12,165,NO,60.6278,6.41831 79670,Ytre Arna,1023,12,165,NO,60.46175,5.43265 79671,Ytrebygda,1023,12,165,NO,60.30504,5.28236 79678,Ålesund,1020,15,165,NO,62.47225,6.15492 79680,Åndalsnes,1020,15,165,NO,62.56749,7.68709 79050,Aukra,1020,15,165,NO,62.805,6.88722 79052,Aure,1020,15,165,NO,63.2675,8.52778 79058,Averøy,1020,15,165,NO,63.05344,7.63265 79066,Batnfjordsøra,1020,15,165,NO,62.89463,7.67251 79086,Brattvåg,1020,15,165,NO,62.59991,6.44426 79111,Eide,1020,15,165,NO,62.9157,7.44496 79116,Eidsvåg,1020,15,165,NO,62.77656,8.0655 79121,Elnesvågen,1020,15,165,NO,62.85426,7.13769 79164,Fræna,1020,15,165,NO,62.85375,7.1538 79176,Giske,1020,15,165,NO,62.5007,6.13472 79177,Gjemnes,1020,15,165,NO,62.89379,7.67714 79200,Halsa,1020,15,165,NO,63.11855,8.31536 79205,Haram,1020,15,165,NO,62.59898,6.44483 79207,Hareid,1020,15,165,NO,62.36742,6.02114 79221,Herøy,1020,15,165,NO,62.33333,5.63598 79225,Hjelset,1020,15,165,NO,62.7805,7.49277 79234,Hopen,1020,15,165,NO,63.46539,8.01437 79288,Kristiansund,1020,15,165,NO,63.11152,7.73198 79303,Larsnes,1020,15,165,NO,62.20282,5.57729 79364,Midsund,1020,15,165,NO,62.67614,6.67776 79372,Molde,1020,15,165,NO,62.73807,7.15882 79397,Nesset,1020,15,165,NO,62.77619,8.06623 79405,Norddal,1020,15,165,NO,62.2991,7.26145 79410,Nordstranda,1020,15,165,NO,62.51384,6.13166 79697,Ørskog,1020,15,165,NO,62.4845,6.82025 79698,Ørsta,1020,15,165,NO,62.19937,6.13084 79440,Rauma,1020,15,165,NO,62.5681,7.68612 79448,Rensvik,1020,15,165,NO,63.09843,7.82026 79481,Sande,1020,15,165,NO,62.20455,5.57971 79486,Sandøy,1020,15,165,NO,62.78167,6.46875 79501,Sjøholt,1020,15,165,NO,62.48263,6.81376 79514,Skodje,1020,15,165,NO,62.50306,6.69817 79525,Smøla,1020,15,165,NO,63.46526,8.01814 79542,Steinshamn,1020,15,165,NO,62.78389,6.47065 79549,Stordal,1020,15,165,NO,62.38214,6.98708 79556,Stranda,1020,15,165,NO,62.31132,6.93115 79562,Sula,1020,15,165,NO,62.44447,6.21229 79565,Sunndal,1020,15,165,NO,62.67464,8.56188 79566,Sunndalsøra,1020,15,165,NO,62.67519,8.56327 79567,Surnadal,1020,15,165,NO,62.97533,8.7249 79573,Sykkylven,1020,15,165,NO,62.38962,6.57825 79593,Tingvoll,1020,15,165,NO,62.91194,8.20673 79600,Tomra,1020,15,165,NO,62.58118,6.93106 79623,Ulstein,1020,15,165,NO,62.34423,5.85241 79624,Ulsteinvik,1020,15,165,NO,62.34317,5.84869 79625,Ulsteinvik weather pws station,1020,15,165,NO,62.34338,5.84385 79632,Vanylven,1020,15,165,NO,62.10003,5.55827 79635,Vatne,1020,15,165,NO,62.55826,6.61708 79644,Vestnes,1020,15,165,NO,62.6213,7.08966 79660,Volda,1020,15,165,NO,62.14678,6.068 79038,Alstahaug,1025,18,165,NO,65.97556,12.56836 79041,Andenes,1025,18,165,NO,69.31428,16.11939 79042,Andøy,1025,18,165,NO,69.08033,15.77637 79061,Ballangen,1025,18,165,NO,68.34365,16.83317 79067,Beiarn,1025,18,165,NO,67.00725,14.57304 79074,Bindal,1025,18,165,NO,65.0878,12.37747 79076,Bjerkvik,1025,18,165,NO,68.54917,17.55709 79081,Bodø,1025,18,165,NO,67.28325,14.38319 79082,Bogen,1025,18,165,NO,68.52647,16.9928 79096,Bø,1025,18,165,NO,68.68823,14.47899 79091,Brønnøy,1025,18,165,NO,65.46786,12.20626 79092,Brønnøysund,1025,18,165,NO,65.47487,12.21285 79108,Dønna,1025,18,165,NO,66.10606,12.48189 79128,Evenes,1025,18,165,NO,68.52334,17.00888 79130,Evjen,1025,18,165,NO,68.26667,13.73333 79135,Fauske,1025,18,165,NO,67.25963,15.3941 79146,Flakstad,1025,18,165,NO,68.09292,13.2331 79175,Gildeskål,1025,18,165,NO,67.03394,14.02582 79181,Gladstad,1025,18,165,NO,65.67683,11.96218 79182,Glomfjord,1025,18,165,NO,66.81663,13.94404 79186,Grane,1025,18,165,NO,65.53865,13.38499 79189,Gravdal,1025,18,165,NO,68.11832,13.55339 79197,Hadsel,1025,18,165,NO,68.56328,14.90835 79202,Hamarøy,1025,18,165,NO,68.08381,15.61671 79210,Hattfjelldal,1025,18,165,NO,65.59765,13.98948 79213,Hauknes,1025,18,165,NO,66.28333,14.06667 79215,Hemnes,1025,18,165,NO,66.07712,13.8135 79216,Hemnesberget,1025,18,165,NO,66.22489,13.61643 79220,Herøy,1025,18,165,NO,65.98427,12.28916 79255,Inndyr,1025,18,165,NO,67.03353,14.02663 79263,Kabelvåg,1025,18,165,NO,68.21066,14.47554 79273,Kjøpsvik,1025,18,165,NO,68.09696,16.37416 79285,Korgen,1025,18,165,NO,66.07662,13.8216 79309,Leirfjord,1025,18,165,NO,66.06348,12.93667 79313,Leknes,1025,18,165,NO,68.14746,13.61151 79314,Leland,1025,18,165,NO,66.06406,12.94325 79343,Løding,1025,18,165,NO,67.30055,14.73852 79344,Lødingen,1025,18,165,NO,68.40998,15.99012 79345,Løpsmarka,1025,18,165,NO,67.31343,14.44934 79334,Lurøy,1025,18,165,NO,66.41887,12.84248 79358,Melbu,1025,18,165,NO,68.50246,14.79962 79362,Meløy,1025,18,165,NO,66.87204,13.70763 79366,Mo i Rana,1025,18,165,NO,66.31278,14.14278 79373,Mosjøen,1025,18,165,NO,65.83599,13.19076 79374,Moskenes,1025,18,165,NO,67.93467,13.09109 79377,Myre,1025,18,165,NO,68.914,15.07843 79386,Narvik,1025,18,165,NO,68.43896,17.42775 79393,Nesna,1025,18,165,NO,66.19796,13.02229 79692,Øksnes,1025,18,165,NO,68.91463,15.08703 79696,Ørnes,1025,18,165,NO,66.86878,13.70579 79436,Rana,1025,18,165,NO,66.31122,14.13996 79442,Reine,1025,18,165,NO,67.93249,13.08955 79455,Rognan,1025,18,165,NO,67.10021,15.39086 79466,Rødøy,1025,18,165,NO,66.71195,13.2853 79470,Røst,1025,18,165,NO,67.51727,12.11564 79475,Saltdal,1025,18,165,NO,67.10144,15.39458 79484,Sandnessjøen,1025,18,165,NO,66.02166,12.63158 79534,Sortland,1025,18,165,NO,68.69618,15.41174 79577,Sømna,1025,18,165,NO,65.31379,12.16729 79583,Sørfold,1025,18,165,NO,67.34803,15.59445 79584,Sørland,1025,18,165,NO,67.66564,12.69784 79540,Steigen,1025,18,165,NO,67.77625,15.01621 79546,Stokmarknes,1025,18,165,NO,68.56462,14.91075 79557,Straume,1025,18,165,NO,68.6888,14.47205 79560,Straumen,1025,18,165,NO,67.34769,15.60493 79571,Svolvær,1025,18,165,NO,68.23417,14.56834 79591,Terråk,1025,18,165,NO,65.087,12.37148 79595,Tjeldsund,1025,18,165,NO,68.55557,16.36172 79611,Træna,1025,18,165,NO,66.50159,12.09645 79607,Trofors,1025,18,165,NO,65.53335,13.40631 79616,Tysfjord,1025,18,165,NO,68.09772,16.37591 79663,Vågan,1025,18,165,NO,68.2322,14.56226 79669,Værøy,1025,18,165,NO,67.66374,12.69337 79637,Vefsn,1025,18,165,NO,65.84109,13.20024 79638,Vega,1025,18,165,NO,65.67539,11.96456 79647,Vestvågøy,1025,18,165,NO,68.1483,13.61119 79648,Vevelstad,1025,18,165,NO,65.70002,12.43921 79651,Vik,1025,18,165,NO,65.31254,12.16734 79059,Bagn,1009,05,165,NO,60.82249,9.55207 79101,Dokka,1009,05,165,NO,60.835,10.07362 79102,Dombås,1009,05,165,NO,62.07554,9.12785 79103,Dovre,1009,05,165,NO,61.98582,9.24947 79127,Etnedal,1009,05,165,NO,60.88872,9.64031 79131,Fagernes,1009,05,165,NO,60.98584,9.23236 79157,Fossbergom,1009,05,165,NO,61.83772,8.56842 79173,Gausdal,1009,05,165,NO,61.22685,10.22145 79180,Gjøvik,1009,05,165,NO,60.79472,10.69287 79185,Gran,1009,05,165,NO,60.39293,10.56045 79191,Grua,1009,05,165,NO,60.25701,10.66222 79237,Hov,1009,05,165,NO,60.6987,10.35193 79238,Hundorp,1009,05,165,NO,61.55523,9.94069 79257,Jevnaker,1009,05,165,NO,60.2406,10.38587 79315,Lena,1009,05,165,NO,60.67391,10.81317 79318,Lesja,1009,05,165,NO,62.11785,8.86262 79323,Lillehammer,1009,05,165,NO,61.11464,10.46743 79327,Lom,1009,05,165,NO,61.83639,8.56811 79333,Lunner,1009,05,165,NO,60.29462,10.6086 79402,Nord-Aurdal,1009,05,165,NO,60.98531,9.23661 79403,Nord-Fron,1009,05,165,NO,61.59556,9.7483 79408,Nordre Land,1009,05,165,NO,60.83471,10.07543 79427,Otta,1009,05,165,NO,61.7712,9.53529 79699,Østre Toten,1009,05,165,NO,60.67659,10.81997 79701,Øyer,1009,05,165,NO,61.26495,10.41297 79704,Øystre Slidre,1009,05,165,NO,61.13377,9.07872 79439,Raufoss,1009,05,165,NO,60.72604,10.6133 79443,Reinsvoll,1009,05,165,NO,60.67977,10.62175 79450,Ringebu,1009,05,165,NO,61.5298,10.1418 79490,Sel,1009,05,165,NO,61.77278,9.53415 79512,Skjåk,1009,05,165,NO,61.88349,8.2649 79520,Skreia,1009,05,165,NO,60.65257,10.93564 79578,Søndre Land,1009,05,165,NO,60.69944,10.35086 79579,Sør-Aurdal,1009,05,165,NO,60.82242,9.54836 79580,Sør-Fron,1009,05,165,NO,61.55652,9.93949 79606,Tretten,1009,05,165,NO,61.31423,10.30066 79665,Vågå,1009,05,165,NO,61.87565,9.09572 79666,Vågåmo,1009,05,165,NO,61.87505,9.09671 79630,Vang,1009,05,165,NO,61.12564,8.57167 79645,Vestre Slidre,1009,05,165,NO,61.08842,8.98196 79646,Vestre Toten,1009,05,165,NO,60.72593,10.60764 79659,Vinstra,1009,05,165,NO,61.59496,9.75134 79425,Oslo,1007,03,165,NO,59.91273,10.74609 79502,Sjølyststranda,1007,03,165,NO,59.92105,10.68017 79043,Aremark,1022,01,165,NO,59.22198,11.69582 79046,Askim,1022,01,165,NO,59.58464,11.16084 79113,Eidsberg,1022,01,165,NO,59.55148,11.33587 79158,Fossby,1022,01,165,NO,59.22218,11.69928 79159,Fredrikstad,1022,01,165,NO,59.21759,10.93787 79199,Halden,1022,01,165,NO,59.12258,11.38709 79226,Hobøl,1022,01,165,NO,59.62252,10.94979 79241,Hvaler,1022,01,165,NO,59.02809,11.0311 79265,Karlshus,1022,01,165,NO,59.35195,10.87226 79278,Knappstad,1022,01,165,NO,59.62424,11.03274 79302,Larkollen,1022,01,165,NO,59.33196,10.66687 79317,Lervik,1022,01,165,NO,59.27119,10.7461 79352,Marker,1022,01,165,NO,59.47952,11.65917 79375,Moss,1022,01,165,NO,59.43436,10.65968 79378,Mysen,1022,01,165,NO,59.55354,11.32578 79694,Ørje,1022,01,165,NO,59.48023,11.66016 79463,Råde,1022,01,165,NO,59.35162,10.87135 79435,Rakkestad,1022,01,165,NO,59.42822,11.3435 79467,Rømskog,1022,01,165,NO,59.74968,11.81122 79460,Rygge,1022,01,165,NO,59.40629,10.69298 79461,Ryggebyen,1022,01,165,NO,59.375,10.75 79487,Sarpsborg,1022,01,165,NO,59.28148,11.11167 79509,Skiptvet,1022,01,165,NO,59.47751,11.16171 79513,Skjærhalden,1022,01,165,NO,59.02526,11.03685 79510,Skjeberg,1022,01,165,NO,59.21148,11.19025 79536,Spydeberg,1022,01,165,NO,59.62028,11.08069 79601,Tomter,1022,01,165,NO,59.6591,10.99487 79612,Trøgstad,1022,01,165,NO,59.64016,11.3189 79668,Våler,1022,01,165,NO,59.4887,10.86551 79676,Åkrehamn,1021,11,165,NO,59.26053,5.18689 79075,Bjerkreim,1021,11,165,NO,58.6305,6.0813 79083,Bokn,1021,11,165,NO,59.23062,5.43524 79090,Bryne,1021,11,165,NO,58.73536,5.64766 79109,Egersund,1021,11,165,NO,58.45133,5.9997 79117,Eigersund,1021,11,165,NO,58.45236,6.00314 79118,Eike,1021,11,165,NO,59.39833,5.36389 79141,Finnøy,1021,11,165,NO,59.17117,5.87398 79155,Forsand,1021,11,165,NO,58.89929,6.09642 79179,Gjesdal,1021,11,165,NO,58.76478,5.855 79245,Hå,1021,11,165,NO,58.6161,5.64497 79211,Hauge i Dalane,1021,11,165,NO,58.34361,6.28121 79212,Haugesund,1021,11,165,NO,59.41015,5.27551 79224,Hjelmeland,1021,11,165,NO,59.23668,6.17912 79232,Hommersåk,1021,11,165,NO,58.92556,5.85104 79262,Jørpeland,1021,11,165,NO,59.02251,6.04078 79259,Judaberg,1021,11,165,NO,59.17204,5.87617 79267,Karmøy,1021,11,165,NO,59.28079,5.30529 79274,Klepp,1021,11,165,NO,58.77655,5.63009 79283,Kopervik,1021,11,165,NO,59.28354,5.30669 79295,Kvitsøy,1021,11,165,NO,59.06471,5.40537 79330,Lund,1021,11,165,NO,58.45715,6.54871 79336,Lyefjell,1021,11,165,NO,58.73539,5.73615 79371,Moi,1021,11,165,NO,58.45674,6.55184 79415,Nærbø,1021,11,165,NO,58.66546,5.63788 79693,Ølen,1021,11,165,NO,59.60437,5.80799 79437,Randaberg,1021,11,165,NO,58.9987,5.62055 79447,Rennesøy,1021,11,165,NO,59.09899,5.69966 79483,Sandnes,1021,11,165,NO,58.8476,5.72855 79488,Sauda,1021,11,165,NO,59.65067,6.35312 79575,Sæveland,1021,11,165,NO,59.26667,5.2 79521,Skudeneshavn,1021,11,165,NO,59.14856,5.25687 79530,Sokndal,1021,11,165,NO,58.34256,6.29425 79531,Sola,1021,11,165,NO,58.88806,5.64728 79538,Stavanger,1021,11,165,NO,58.96941,5.72856 79555,Strand,1021,11,165,NO,59.02353,6.04343 79563,Suldal,1021,11,165,NO,59.48571,6.25222 79589,Tananger,1021,11,165,NO,58.93618,5.5741 79590,Tau,1021,11,165,NO,59.06481,5.9225 79592,Time,1021,11,165,NO,58.73636,5.65297 79618,Tysvær,1021,11,165,NO,59.42159,5.44781 79627,Utsira,1021,11,165,NO,59.30565,4.88621 79634,Varhaug,1021,11,165,NO,58.6181,5.65702 79636,Vedavågen,1021,11,165,NO,59.29483,5.21874 79650,Vigrestad,1021,11,165,NO,58.57103,5.68182 79654,Vikeså,1021,11,165,NO,58.63759,6.09133 79655,Vikevåg,1021,11,165,NO,59.09754,5.6979 79657,Vindafjord,1021,11,165,NO,59.60543,5.80784 79661,Vormedal,1021,11,165,NO,59.35607,5.31962 79682,Årdal,1018,14,165,NO,61.23639,7.70204 79683,Årdalstangen,1018,14,165,NO,61.23581,7.7037 79047,Askvoll,1018,14,165,NO,61.3485,5.05318 79053,Aurland,1018,14,165,NO,60.90556,7.18734 79060,Balestrand,1018,14,165,NO,61.20809,6.53551 79088,Bremanger,1018,14,165,NO,61.76862,5.28907 79099,Dale,1018,14,165,NO,61.36353,5.40036 79110,Eid,1018,14,165,NO,61.90684,5.99321 79120,Eivindvik,1018,14,165,NO,60.98133,5.07497 79133,Farnes,1018,14,165,NO,61.3085,7.79694 79143,Fjaler,1018,14,165,NO,61.36383,5.39808 79151,Flora,1018,14,165,NO,61.59994,5.03144 79152,Florø,1018,14,165,NO,61.59957,5.0328 79169,Førde,1018,14,165,NO,61.45045,5.85397 79171,Gaular,1018,14,165,NO,61.32564,5.79523 79172,Gaupne,1018,14,165,NO,61.40472,7.29458 79183,Gloppen,1018,14,165,NO,61.77728,6.21561 79194,Gulen,1018,14,165,NO,60.98192,5.07408 79206,Hardbakke,1018,14,165,NO,61.07562,4.84111 79218,Hermansverk,1018,14,165,NO,61.18461,6.85016 79235,Hornindal,1018,14,165,NO,61.96925,6.52249 79248,Høyanger,1018,14,165,NO,61.2188,6.07308 79244,Hyllestad,1018,14,165,NO,61.17036,5.29614 79261,Jølster,1018,14,165,NO,61.56923,6.48351 79341,Lærdal,1018,14,165,NO,61.09842,7.48101 79342,Lærdalsøyri,1018,14,165,NO,61.10001,7.47374 79308,Leikanger,1018,14,165,NO,61.18556,6.82199 79335,Luster,1018,14,165,NO,61.4031,7.29793 79380,Måløy,1018,14,165,NO,61.93535,5.11362 79387,Naustdal,1018,14,165,NO,61.51034,5.71719 79406,Nordfjordeid,1018,14,165,NO,61.9122,5.98557 79478,Sandane,1018,14,165,NO,61.77277,6.21496 79479,Sande,1018,14,165,NO,61.32511,5.79773 79492,Selje,1018,14,165,NO,62.04263,5.34449 79529,Sogndal,1018,14,165,NO,61.23144,7.10301 79532,Solund,1018,14,165,NO,61.07394,4.83876 79561,Stryn,1018,14,165,NO,61.90406,6.724 79569,Svelgen,1018,14,165,NO,61.76976,5.29544 79664,Vågsøy,1018,14,165,NO,61.93544,5.11402 79652,Vik,1018,14,165,NO,61.08863,6.58512 79063,Bamble,1024,08,165,NO,59.00146,9.74573 79095,Bø,1024,08,165,NO,59.41281,9.06618 79100,Dalen,1024,08,165,NO,59.44499,8.00492 79105,Drangedal,1024,08,165,NO,59.09655,9.0596 79167,Fyresdal,1024,08,165,NO,59.18651,8.08953 79196,Gvarv,1024,08,165,NO,59.38767,9.1724 79219,Herre,1024,08,165,NO,59.10351,9.56195 79223,Hjartdal,1024,08,165,NO,59.61276,8.94942 79286,Kragerø,1024,08,165,NO,58.86792,9.41099 79294,Kviteseid,1024,08,165,NO,59.40194,8.49459 79332,Lunde,1024,08,165,NO,59.29832,9.10268 79398,Nissedal,1024,08,165,NO,59.01958,8.52127 79401,Nome,1024,08,165,NO,59.28136,9.25678 79414,Notodden,1024,08,165,NO,59.55992,9.26046 79430,Porsgrunn,1024,08,165,NO,59.1419,9.6568 79431,Prestestranda,1024,08,165,NO,59.09773,9.05866 79453,Rjukan,1024,08,165,NO,59.87891,8.59411 79489,Sauherad,1024,08,165,NO,59.39642,9.2491 79493,Seljord,1024,08,165,NO,59.48274,8.62672 79498,Siljan,1024,08,165,NO,59.28251,9.73368 79508,Skien,1024,08,165,NO,59.20748,9.61052 79594,Tinn,1024,08,165,NO,59.83486,9.13528 79598,Tokke,1024,08,165,NO,59.44569,8.01388 79620,Ulefoss,1024,08,165,NO,59.28245,9.26548 79658,Vinje,1024,08,165,NO,59.56924,7.98896 79062,Balsfjord,1015,19,165,NO,69.24024,19.22653 79064,Bardu,1015,19,165,NO,68.86058,18.35052 79068,Berg,1015,19,165,NO,69.44444,17.2995 79084,Borkenes,1015,19,165,NO,68.77261,16.17115 79107,Dyrøy,1015,19,165,NO,69.09154,17.69094 79129,Evenskjer,1015,19,165,NO,68.58283,16.57203 79140,Finnsnes,1015,19,165,NO,69.22959,17.98114 79188,Gratangen,1015,19,165,NO,68.69273,17.53186 79193,Gryllefjord,1015,19,165,NO,69.36304,17.05284 79204,Hansnes,1015,19,165,NO,69.96701,19.62752 79208,Harstad,1015,19,165,NO,68.79896,16.5293 79250,Ibestad,1015,19,165,NO,68.77866,17.17661 79300,Kåfjord,1015,19,165,NO,69.604,20.53456 79266,Karlsøy,1015,19,165,NO,69.96185,19.61811 79296,Kvæfjord,1015,19,165,NO,68.77201,16.17294 79297,Kvænangen,1015,19,165,NO,69.9389,22.04935 79306,Lavangen,1015,19,165,NO,68.74722,17.80558 79316,Lenvik,1015,19,165,NO,69.23111,17.98739 79338,Lyngen,1015,19,165,NO,69.57621,20.21702 79339,Lyngseidet,1015,19,165,NO,69.57629,20.21887 79379,Målselv,1015,19,165,NO,69.12389,18.61498 79370,Moen,1015,19,165,NO,69.13043,18.61226 79409,Nordreisa,1015,19,165,NO,69.76825,21.02569 79418,Olderdalen,1015,19,165,NO,69.60407,20.53272 79474,Salangen,1015,19,165,NO,68.87669,17.83375 79496,Setermoen,1015,19,165,NO,68.86099,18.34857 79503,Sjøvegan,1015,19,165,NO,68.87363,17.84706 79524,Skånland,1015,19,165,NO,68.58378,16.57305 79511,Skjervøy,1015,19,165,NO,70.03379,20.97365 79585,Sørreisa,1015,19,165,NO,69.14697,18.15629 79551,Storfjord,1015,19,165,NO,69.2686,19.96089 79552,Storslett,1015,19,165,NO,69.76783,21.02466 79553,Storsteinnes,1015,19,165,NO,69.24081,19.23437 79603,Torsken,1015,19,165,NO,69.36184,17.05384 79605,Tranøy,1015,19,165,NO,69.17022,17.7348 79608,Tromsø,1015,19,165,NO,69.64961,18.95702 79673,Å i Åfjord,1006,50,165,NO,63.96068,10.22468 79674,Åfjord,1006,50,165,NO,63.96196,10.22587 79037,Agdenes,1006,50,165,NO,63.50575,9.82623 79071,Berkåk,1006,50,165,NO,62.82496,10.01177 79077,Bjugn,1006,50,165,NO,63.76522,9.8094 79085,Botngård,1006,50,165,NO,63.76484,9.80863 79087,Brekstad,1006,50,165,NO,63.68697,9.66541 79139,Fillan,1006,50,165,NO,63.60638,8.96961 79147,Flatanger,1006,50,165,NO,64.41282,11.03285 79156,Fosnes,1006,50,165,NO,64.6591,11.26535 79163,Frosta,1006,50,165,NO,63.5891,10.7423 79165,Frøya,1006,50,165,NO,63.73005,8.82426 79190,Grong,1006,50,165,NO,64.46397,12.31114 79214,Hemne,1006,50,165,NO,63.29095,9.08893 79222,Hitra,1006,50,165,NO,63.54528,8.78029 79230,Holtålen,1006,50,165,NO,62.84318,11.29284 79231,Hommelvik,1006,50,165,NO,63.41083,10.79424 79249,Høylandet,1006,50,165,NO,64.62759,12.30041 79251,Inderøy,1006,50,165,NO,63.87826,11.28424 79253,Indre Fosen,1006,50,165,NO,63.58897,9.95847 79275,Klæbu,1006,50,165,NO,63.3006,10.48188 79280,Kolvereid,1006,50,165,NO,64.86549,11.60465 79298,Kyrksæterøra,1006,50,165,NO,63.29057,9.08909 79305,Lauvsnes,1006,50,165,NO,64.50061,10.89396 79312,Leka,1006,50,165,NO,65.09244,11.70513 79319,Levanger,1006,50,165,NO,63.74585,11.29991 79321,Lierne,1006,50,165,NO,64.46413,13.59249 79331,Lundamo,1006,50,165,NO,63.15216,10.28555 79348,Malm,1006,50,165,NO,64.07534,11.22398 79349,Malvik,1006,50,165,NO,63.41057,10.79382 79359,Meldal,1006,50,165,NO,63.04598,9.71088 79360,Melhus,1006,50,165,NO,63.28755,10.27686 79363,Meråker,1006,50,165,NO,63.41423,11.74558 79365,Midtre Gauldal,1006,50,165,NO,63.03902,10.28701 79382,Namdalseid,1006,50,165,NO,64.10843,10.91862 79383,Namsos,1006,50,165,NO,64.47842,11.54182 79384,Namsskogan,1006,50,165,NO,64.92597,13.15932 79416,Nærøy,1006,50,165,NO,64.86298,11.60505 79419,Oppdal,1006,50,165,NO,62.59495,9.68761 79421,Orkdal,1006,50,165,NO,63.29989,9.84365 79424,Osen,1006,50,165,NO,64.29875,10.51284 79428,Overhalla,1006,50,165,NO,64.4938,11.94753 79695,Ørland,1006,50,165,NO,63.68574,9.66633 79433,Raarvihke - Røyrvik,1006,50,165,NO,64.8838,13.5631 79438,Ranemsletta,1006,50,165,NO,64.49447,11.94912 79446,Rennebu,1006,50,165,NO,62.82864,10.00487 79449,Rindal,1006,50,165,NO,63.05511,9.21274 79454,Roan,1006,50,165,NO,64.17281,10.22511 79468,Røros,1006,50,165,NO,62.57562,11.3873 79469,Rørvik,1006,50,165,NO,64.86185,11.23969 79472,Røyrvik,1006,50,165,NO,64.88394,13.56256 79491,Selbu,1006,50,165,NO,63.2177,11.03938 79500,Sistranda,1006,50,165,NO,63.72523,8.83318 79505,Skaun,1006,50,165,NO,63.32386,10.06745 79516,Skogn,1006,50,165,NO,63.70374,11.19262 79527,Snåase,1006,50,165,NO,64.2457,12.37779 79528,Snåase - Snåsa,1006,50,165,NO,64.24606,12.38294 79526,Snillfjord,1006,50,165,NO,63.39973,9.50194 79541,Steinkjer,1006,50,165,NO,64.19303,11.38505 79543,Stjørdal,1006,50,165,NO,63.56699,11.0273 79544,Stjørdalshalsen,1006,50,165,NO,63.4681,10.92618 79559,Straumen,1006,50,165,NO,63.87163,11.29617 79609,Trondheim,1006,50,165,NO,63.42811,10.39687 79614,Tydal,1006,50,165,NO,63.04477,11.65038 79640,Verdal,1006,50,165,NO,63.90023,11.72724 79641,Verran,1006,50,165,NO,64.071,11.21795 79656,Vikna,1006,50,165,NO,64.86362,11.24198 79688,Åseral,1014,10,165,NO,58.6173,7.41118 79049,Audnedal,1014,10,165,NO,58.28378,7.35487 79134,Farsund,1014,10,165,NO,58.09538,6.80403 79149,Flekkefjord,1014,10,165,NO,58.29791,6.66345 79246,Hægebostad,1014,10,165,NO,58.37572,7.21973 79260,Justvik,1014,10,165,NO,58.19691,8.03107 79287,Kristiansand,1014,10,165,NO,58.14642,7.99687 79292,Kvinesdal,1014,10,165,NO,58.23894,6.71445 79322,Liknes,1014,10,165,NO,58.31216,6.9618 79325,Lindesnes,1014,10,165,NO,58.08435,7.30162 79337,Lyngdal,1014,10,165,NO,58.13829,7.06836 79350,Mandal,1014,10,165,NO,58.02633,7.45014 79353,Marnardal,1014,10,165,NO,58.19802,7.52802 79400,Nodeland,1014,10,165,NO,58.15517,7.83576 79499,Sirdal,1014,10,165,NO,58.6651,6.71585 79523,Skålevik,1014,10,165,NO,58.07955,8.01602 79533,Songdalen,1014,10,165,NO,58.15273,7.83677 79576,Søgne,1014,10,165,NO,58.09663,7.81491 79554,Strai,1014,10,165,NO,58.1893,7.92826 79602,Tonstad,1014,10,165,NO,58.66263,6.71694 79613,Tveit,1014,10,165,NO,58.23366,8.12199 79631,Vanse,1014,10,165,NO,58.09812,6.69184 79639,Vennesla,1014,10,165,NO,58.34271,7.97596 79643,Vestbygd,1014,10,165,NO,58.09991,6.58696 79649,Vigeland,1014,10,165,NO,58.08437,7.30497 79686,Årøysund,1008,07,165,NO,59.18321,10.45743 79689,Åsgårdstrand,1008,07,165,NO,59.34938,10.46948 79065,Barkåker,1008,07,165,NO,59.31859,10.38963 79070,Berger,1008,07,165,NO,59.54994,10.38641 79168,Færder,1008,07,165,NO,59.22791,10.4153 79195,Gullhaug,1008,07,165,NO,59.5013,10.25224 79229,Holmestrand,1008,07,165,NO,59.48976,10.31515 79236,Horten,1008,07,165,NO,59.41547,10.48527 79304,Larvik,1008,07,165,NO,59.05234,10.02701 79361,Melsomvik,1008,07,165,NO,59.22394,10.33616 79441,Re,1008,07,165,NO,59.35056,10.24763 79480,Sande,1008,07,165,NO,59.59362,10.20757 79482,Sandefjord,1008,07,165,NO,59.12881,10.21971 79494,Selvik,1008,07,165,NO,59.56645,10.26004 79495,Sem,1008,07,165,NO,59.2823,10.33004 79518,Skoppum,1008,07,165,NO,59.38613,10.41077 79539,Stavern,1008,07,165,NO,59.0,10.03333 79545,Stokke,1008,07,165,NO,59.22255,10.30055 79570,Svelvik,1008,07,165,NO,59.60677,10.40225 79596,Tjøme,1008,07,165,NO,59.1109,10.3933 79619,Tønsberg,1008,07,165,NO,59.26754,10.40762 85788,Babiak,1634,WP,176,PL,52.3453,18.66663 85805,Baranów,1634,WP,176,PL,51.26342,18.0047 85803,Baranowo,1634,WP,176,PL,52.43525,16.78631 85847,Białośliwie,1634,WP,176,PL,53.10461,17.12533 85881,Blizanów,1634,WP,176,PL,51.90372,18.01003 85903,Bojanowo,1634,WP,176,PL,51.70749,16.74827 85904,Bojanowo Stare,1634,WP,176,PL,51.99302,16.58369 85919,Borek Wielkopolski,1634,WP,176,PL,51.91674,17.24133 85934,Bralin,1634,WP,176,PL,51.28581,17.90325 85939,Brdów,1634,WP,176,PL,52.3539,18.7298 85941,Brenno,1634,WP,176,PL,51.92257,16.21488 85944,Brodnica,1634,WP,176,PL,52.14123,16.89096 85952,Broniszewice,1634,WP,176,PL,51.96696,17.81648 85954,Brudzew,1634,WP,176,PL,52.09949,18.60432 85984,Budzyń,1634,WP,176,PL,52.88954,16.98812 85988,Buk,1634,WP,176,PL,52.35532,16.51958 86041,Chocz,1634,WP,176,PL,51.97642,17.86995 86047,Chodów,1634,WP,176,PL,52.24961,19.01218 86046,Chodzież,1634,WP,176,PL,52.99505,16.9198 86063,Chrzypsko Wielkie,1634,WP,176,PL,52.62817,16.22852 86099,Czajków,1634,WP,176,PL,51.49197,18.32726 86102,Czapury,1634,WP,176,PL,52.31719,16.91268 86111,Czarnków,1634,WP,176,PL,52.90214,16.56413 86125,Czempiń,1634,WP,176,PL,52.14404,16.76408 86128,Czermin,1634,WP,176,PL,51.95008,17.74957 86134,Czerniejewo,1634,WP,176,PL,52.4264,17.48925 86143,Czerwonak,1634,WP,176,PL,52.46459,16.98169 86234,Dąbie,1634,WP,176,PL,52.08668,18.8225 86156,Damasławek,1634,WP,176,PL,52.83979,17.50062 86159,Daszewice,1634,WP,176,PL,52.30002,16.95723 86169,Dobra,1634,WP,176,PL,51.91664,18.61556 86178,Dobrzyca,1634,WP,176,PL,51.86663,17.60336 86182,Dolsk,1634,WP,176,PL,51.9818,17.06273 86188,Dominowo,1634,WP,176,PL,52.29158,17.35754 86189,Dopiewo,1634,WP,176,PL,52.35726,16.67562 86191,Doruchów,1634,WP,176,PL,51.41719,18.07697 86194,Drawsko,1634,WP,176,PL,52.85421,16.03125 86208,Duszniki,1634,WP,176,PL,52.44691,16.40602 86304,Gizałki,1634,WP,176,PL,52.04267,17.76936 86313,Gniezno,1634,WP,176,PL,52.53481,17.58259 86328,Golina,1634,WP,176,PL,52.24315,18.09268 86354,Gołańcz,1634,WP,176,PL,52.94326,17.29995 86357,Gołuchów,1634,WP,176,PL,51.85036,17.9314 86340,Gorzyce Wielkie,1634,WP,176,PL,51.63725,17.72953 86347,Gostyń,1634,WP,176,PL,51.88247,17.01225 86369,Grabów nad Prosną,1634,WP,176,PL,51.50596,18.11929 86372,Granowo,1634,WP,176,PL,52.22244,16.52859 86374,Grodziec,1634,WP,176,PL,52.03855,18.05972 86376,Grodzisk Wielkopolski,1634,WP,176,PL,52.22762,16.36534 86394,Grzegorzew,1634,WP,176,PL,52.20177,18.73409 86483,Jabłonna,1634,WP,176,PL,52.20598,16.20741 86496,Janków Przygodzki,1634,WP,176,PL,51.59808,17.78824 86505,Jaraczewo,1634,WP,176,PL,51.96854,17.29707 86509,Jarocin,1634,WP,176,PL,51.97266,17.50256 86522,Jastrowie,1634,WP,176,PL,53.42048,16.81756 86573,Jutrosin,1634,WP,176,PL,51.65009,17.16957 86580,Kaczory,1634,WP,176,PL,53.10348,16.88169 86586,Kalisz,1634,WP,176,PL,51.76109,18.09102 86593,Kamieniec,1634,WP,176,PL,52.16614,16.46164 86622,Kawęczyn,1634,WP,176,PL,51.90923,18.53102 86625,Kazimierz Biskupi,1634,WP,176,PL,52.311,18.16581 86630,Kaźmierz,1634,WP,176,PL,52.51309,16.58403 86856,Kępno,1634,WP,176,PL,51.2784,17.98908 86641,Kiszkowo,1634,WP,176,PL,52.58871,17.2663 86643,Kleczew,1634,WP,176,PL,52.37057,18.17714 86647,Kleszczewo,1634,WP,176,PL,52.33377,17.17163 86861,Kłecko,1634,WP,176,PL,52.63181,17.43075 86865,Kłodawa,1634,WP,176,PL,52.25447,18.91352 86663,Kobyla Góra,1634,WP,176,PL,51.37923,17.83811 86666,Kobylin,1634,WP,176,PL,51.71645,17.22682 86667,Kobylnica,1634,WP,176,PL,52.44597,17.07644 86740,Kołaczkowo,1634,WP,176,PL,52.21739,17.62413 86745,Koło,1634,WP,176,PL,52.20024,18.63865 86686,Komorniki,1634,WP,176,PL,52.3387,16.81063 86689,Konary,1634,WP,176,PL,51.6569,17.04185 86693,Konin,1634,WP,176,PL,52.22338,18.25121 86851,Kórnik,1634,WP,176,PL,52.24772,17.08949 86752,Kościan,1634,WP,176,PL,52.08829,16.64866 86754,Kościelec,1634,WP,176,PL,52.17425,18.57067 86714,Kostrzyn,1634,WP,176,PL,52.39847,17.22811 86723,Kotlin,1634,WP,176,PL,51.91913,17.64825 86758,Koźmin Wielkopolski,1634,WP,176,PL,51.82712,17.45391 86759,Koźminek,1634,WP,176,PL,51.79874,18.33893 86762,Krajenka,1634,WP,176,PL,53.29759,16.99079 86765,Kramsk,1634,WP,176,PL,52.26469,18.42407 86775,Kraszewice,1634,WP,176,PL,51.51868,18.21997 86779,Krobia,1634,WP,176,PL,51.77405,16.98237 86783,Krosno,1634,WP,176,PL,52.22357,16.83251 86785,Krotoszyn,1634,WP,176,PL,51.69868,17.43738 86806,Krzemieniewo,1634,WP,176,PL,51.85905,16.83354 86814,Krzykosy,1634,WP,176,PL,52.11041,17.37411 86820,Krzywiń,1634,WP,176,PL,51.96296,16.81985 86821,Krzyż Wielkopolski,1634,WP,176,PL,52.88097,16.01116 86829,Książ Wielkopolski,1634,WP,176,PL,52.06167,17.23952 86845,Kuślin,1634,WP,176,PL,52.36386,16.31538 86850,Kwilcz,1634,WP,176,PL,52.55506,16.08562 86976,Lądek,1634,WP,176,PL,52.20929,17.92994 86883,Leszno,1634,WP,176,PL,51.84034,16.57494 86898,Licheń Stary,1634,WP,176,PL,52.31226,18.35515 86910,Lipka,1634,WP,176,PL,53.49601,17.25085 86918,Lipno,1634,WP,176,PL,51.91722,16.56708 86927,Lisków,1634,WP,176,PL,51.83313,18.39789 86933,Lubasz,1634,WP,176,PL,52.85213,16.52344 86956,Luboń,1634,WP,176,PL,52.34705,16.89267 86973,Lwówek,1634,WP,176,PL,52.44798,16.18106 88820,Łęka Opatowska,1634,WP,176,PL,51.21231,18.1071 88781,Łobżenica,1634,WP,176,PL,53.26244,17.25574 88801,Łubowo,1634,WP,176,PL,52.51168,17.45333 86985,Malanów,1634,WP,176,PL,51.95358,18.39128 86992,Margonin,1634,WP,176,PL,52.97335,17.09464 87015,Miasteczko Krajeńskie,1634,WP,176,PL,53.09784,17.00478 87029,Miedzichowo,1634,WP,176,PL,52.37581,15.95876 87061,Międzychód,1634,WP,176,PL,52.59882,15.89696 87034,Miejska Górka,1634,WP,176,PL,51.65573,16.95826 87036,Mieleszyn,1634,WP,176,PL,52.66868,17.49779 87041,Mieścisko,1634,WP,176,PL,52.74357,17.33213 87045,Mikstat,1634,WP,176,PL,51.53236,17.97378 87074,Miłosław,1634,WP,176,PL,52.20318,17.48955 87094,Mosina,1634,WP,176,PL,52.24543,16.84709 87113,Murowana Goślina,1634,WP,176,PL,52.57463,17.00933 87144,Nekla,1634,WP,176,PL,52.36496,17.41329 87151,Niechanowo,1634,WP,176,PL,52.46527,17.67812 87188,Nowe Miasto nad Wartą,1634,WP,176,PL,52.09007,17.41114 87191,Nowe Skalmierzyce,1634,WP,176,PL,51.71038,17.99337 87208,Nowy Tomyśl,1634,WP,176,PL,52.3195,16.12844 87216,Oborniki,1634,WP,176,PL,52.64739,16.81406 87221,Obrzycko,1634,WP,176,PL,52.70338,16.52807 87228,Odolanów,1634,WP,176,PL,51.57419,17.67434 87234,Okonek,1634,WP,176,PL,53.53618,16.85158 87252,Olszówka,1634,WP,176,PL,52.1903,18.86258 87254,Opalenica,1634,WP,176,PL,52.30887,16.41278 87257,Opatów,1634,WP,176,PL,51.21463,18.14615 87259,Opatówek,1634,WP,176,PL,51.73989,18.21653 87265,Orchowo,1634,WP,176,PL,52.50938,18.01578 87279,Osieczna,1634,WP,176,PL,51.9042,16.67862 87289,Osiek Mały,1634,WP,176,PL,52.2763,18.60234 87290,Osiek nad Notecią,1634,WP,176,PL,53.1203,17.29102 87297,Ostroróg,1634,WP,176,PL,52.6265,16.44988 87311,Ostrów Wielkopolski,1634,WP,176,PL,51.65501,17.80686 87301,Ostrowite,1634,WP,176,PL,52.38199,18.0447 87306,Ostrzeszów,1634,WP,176,PL,51.4264,17.93355 87336,Pakosław,1634,WP,176,PL,51.61438,17.05793 87340,Pamiątkowo,1634,WP,176,PL,52.55334,16.68094 87362,Pecna,1634,WP,176,PL,52.18333,16.8 87861,Pępowo,1634,WP,176,PL,51.76569,17.12661 87364,Perzów,1634,WP,176,PL,51.27625,17.8097 87371,Piaski,1634,WP,176,PL,51.88497,17.07293 87403,Piła,1634,WP,176,PL,53.15145,16.73782 87406,Pleszew,1634,WP,176,PL,51.89636,17.78549 87407,Plewiska,1634,WP,176,PL,52.36706,16.80985 87409,Pniewy,1634,WP,176,PL,52.50943,16.25668 87410,Pobiedziska,1634,WP,176,PL,52.47753,17.28767 87420,Pogorzela,1634,WP,176,PL,51.8222,17.23017 87775,Połajewo,1634,WP,176,PL,52.79923,16.73347 87440,Poniec,1634,WP,176,PL,51.76343,16.80867 87484,Powiat chodzieski,1634,WP,176,PL,52.95289,17.01545 87490,Powiat czarnkowsko-trzcianecki,1634,WP,176,PL,52.92885,16.34673 87504,Powiat gnieźnieński,1634,WP,176,PL,52.55359,17.5714 87510,Powiat gostyński,1634,WP,176,PL,51.8368,17.03471 87514,Powiat grodziski,1634,WP,176,PL,52.16038,16.33566 87527,Powiat jarociński,1634,WP,176,PL,52.00901,17.45497 87533,Powiat kaliski,1634,WP,176,PL,51.78921,18.20809 87560,Powiat kępiński,1634,WP,176,PL,51.24852,17.95934 87542,Powiat kolski,1634,WP,176,PL,52.24446,18.78096 87544,Powiat koniński,1634,WP,176,PL,52.25965,18.29616 87548,Powiat kościański,1634,WP,176,PL,52.06616,16.71514 87554,Powiat krotoszyński,1634,WP,176,PL,51.74174,17.42125 87567,Powiat leszczyński,1634,WP,176,PL,51.8501,16.5012 87587,Powiat międzychodzki,1634,WP,176,PL,52.60187,16.05741 87607,Powiat nowotomyski,1634,WP,176,PL,52.34837,16.15849 87609,Powiat obornicki,1634,WP,176,PL,52.71705,16.85437 87621,Powiat ostrowski,1634,WP,176,PL,51.60798,17.8503 87623,Powiat ostrzeszowski,1634,WP,176,PL,51.43768,18.04334 87632,Powiat pilski,1634,WP,176,PL,53.15753,16.91465 87636,Powiat pleszewski,1634,WP,176,PL,51.92526,17.7785 87640,Powiat poznański,1634,WP,176,PL,52.32443,16.86539 87660,Powiat rawicki,1634,WP,176,PL,51.64507,16.94944 87699,Powiat słupecki,1634,WP,176,PL,52.31422,17.90822 87757,Powiat średzki,1634,WP,176,PL,52.1801,17.30686 87758,Powiat śremski,1634,WP,176,PL,52.06149,17.05853 87691,Powiat szamotulski,1634,WP,176,PL,52.58391,16.37726 87711,Powiat turecki,1634,WP,176,PL,51.99581,18.49301 87730,Powiat wągrowiecki,1634,WP,176,PL,52.80805,17.21077 87721,Powiat wolsztyński,1634,WP,176,PL,52.08791,16.14983 87725,Powiat wrzesiński,1634,WP,176,PL,52.24091,17.59019 87746,Powiat złotowski,1634,WP,176,PL,53.41261,16.91516 87770,Powidz,1634,WP,176,PL,52.41362,17.91926 87774,Poznań,1634,WP,176,PL,52.40692,16.92993 87807,Przedecz,1634,WP,176,PL,52.3344,18.89915 87813,Przemęt,1634,WP,176,PL,52.00808,16.30114 87824,Przygodzice,1634,WP,176,PL,51.59195,17.82412 87825,Przykona,1634,WP,176,PL,51.98171,18.61247 87850,Puszczykowo,1634,WP,176,PL,52.2857,16.84925 87858,Pyzdry,1634,WP,176,PL,52.17056,17.69005 87909,Rakoniewice,1634,WP,176,PL,52.13906,16.27346 87914,Raszków,1634,WP,176,PL,51.71828,17.72571 87919,Rawicz,1634,WP,176,PL,51.60946,16.85852 87943,Rogalinek,1634,WP,176,PL,52.24945,16.89989 87946,Rogoźno,1634,WP,176,PL,52.75226,16.99049 87957,Rokietnica,1634,WP,176,PL,52.51245,16.7457 87964,Rozdrażew,1634,WP,176,PL,51.78218,17.50491 87999,Rychtal,1634,WP,176,PL,51.14533,17.85132 88000,Rychwał,1634,WP,176,PL,52.07149,18.1651 88002,Ryczywół,1634,WP,176,PL,52.81324,16.83114 88005,Rydzyna,1634,WP,176,PL,51.78651,16.66761 88028,Rzgów Pierwszy,1634,WP,176,PL,52.15134,18.04976 88065,Siedlec,1634,WP,176,PL,52.13781,16.00279 88088,Sieraków,1634,WP,176,PL,52.65134,16.08047 88090,Sieroszewice,1634,WP,176,PL,51.63347,17.972 88096,Skalmierzyce,1634,WP,176,PL,51.70097,17.96333 88109,Skoki,1634,WP,176,PL,52.67222,17.16107 88119,Skulsk,1634,WP,176,PL,52.482,18.33112 88832,Ślesin,1634,WP,176,PL,52.37039,18.30644 88347,Słupca,1634,WP,176,PL,52.28733,17.87192 88350,Słupia pod Kępnem,1634,WP,176,PL,51.23924,18.04255 88834,Śmigiel,1634,WP,176,PL,52.01339,16.52704 88835,Śmiłowo,1634,WP,176,PL,53.13647,16.92075 88146,Sompolno,1634,WP,176,PL,52.38832,18.50282 88159,Sośnie,1634,WP,176,PL,51.47315,17.63383 88837,Śrem,1634,WP,176,PL,52.08868,17.01508 88838,Środa Wielkopolska,1634,WP,176,PL,52.22843,17.27617 88187,Stare Miasto,1634,WP,176,PL,52.17972,18.21499 88201,Stawiszyn,1634,WP,176,PL,51.91786,18.11171 88243,Stęszew,1634,WP,176,PL,52.2837,16.70085 88222,Strzałkowo,1634,WP,176,PL,52.30701,17.81811 88254,Suchy Las,1634,WP,176,PL,52.47308,16.87745 88260,Sulmierzyce,1634,WP,176,PL,51.60594,17.53053 88275,Swarzędz,1634,WP,176,PL,52.41289,17.08503 88864,Święciechowa,1634,WP,176,PL,51.85503,16.49805 88281,Sypniewo,1634,WP,176,PL,53.46823,16.60583 88285,Szamocin,1634,WP,176,PL,53.02795,17.12653 88286,Szamotuły,1634,WP,176,PL,52.61201,16.57794 88321,Szydłowo,1634,WP,176,PL,53.16212,16.61171 88367,Tarnówka,1634,WP,176,PL,53.34174,16.85273 88363,Tarnowo Podgórne,1634,WP,176,PL,52.46642,16.66326 88396,Trzcianka,1634,WP,176,PL,53.04063,16.45629 88399,Trzcinica,1634,WP,176,PL,51.16707,18.00453 88411,Trzemeszno,1634,WP,176,PL,52.56139,17.82311 88422,Tuliszków,1634,WP,176,PL,52.07658,18.29549 88424,Turek,1634,WP,176,PL,52.01548,18.50055 88452,Ujście,1634,WP,176,PL,53.05339,16.73201 88633,Wągrowiec,1634,WP,176,PL,52.80842,17.19961 88476,Wapno,1634,WP,176,PL,52.90804,17.47504 88499,Wieleń,1634,WP,176,PL,52.89461,16.17136 88501,Wielichowo,1634,WP,176,PL,52.11573,16.3518 88518,Wierzbinek,1634,WP,176,PL,52.44026,18.51085 88529,Wijewo,1634,WP,176,PL,51.91627,16.18552 88533,Wilczogóra,1634,WP,176,PL,52.47348,18.16744 88536,Wilczyn,1634,WP,176,PL,52.48816,18.16126 88539,Wilkowice,1634,WP,176,PL,51.88513,16.53417 88549,Witaszyce,1634,WP,176,PL,51.94151,17.56182 88551,Witkowo,1634,WP,176,PL,52.43964,17.77264 88647,Władysławów,1634,WP,176,PL,52.10313,18.47626 88653,Włoszakowice,1634,WP,176,PL,51.92754,16.36456 88597,Wolsztyn,1634,WP,176,PL,52.11552,16.11712 88605,Wronki,1634,WP,176,PL,52.71051,16.38044 88606,Września,1634,WP,176,PL,52.32512,17.56519 88614,Wyrzysk,1634,WP,176,PL,53.153,17.26802 88617,Wysoka,1634,WP,176,PL,53.18091,17.08353 88672,Zagórów,1634,WP,176,PL,52.16835,17.89561 88679,Zakrzewo,1634,WP,176,PL,53.41186,17.15472 88693,Zaniemyśl,1634,WP,176,PL,52.15561,17.16228 88715,Zbąszyń,1634,WP,176,PL,52.2509,15.9252 88716,Zduny,1634,WP,176,PL,51.6458,17.37694 88880,Żelazków,1634,WP,176,PL,51.85418,18.1743 88884,Żerków,1634,WP,176,PL,52.06877,17.56349 88746,Złotniki,1634,WP,176,PL,52.49407,16.84496 88751,Złotów,1634,WP,176,PL,53.36346,17.04082 85781,Aleksandrów Kujawski,1625,KP,176,PL,52.87659,18.69345 85808,Barcin,1625,KP,176,PL,52.86607,17.94625 85812,Bartniczka,1625,KP,176,PL,53.24776,19.60433 85814,Baruchowo,1625,KP,176,PL,52.49412,19.26496 85839,Białe Błota,1625,KP,176,PL,53.09516,17.91621 85889,Bobrowniki,1625,KP,176,PL,52.78086,18.96026 85891,Bobrowo,1625,KP,176,PL,53.28549,19.27053 85917,Boniewo,1625,KP,176,PL,52.46532,18.89116 85943,Brodnica,1625,KP,176,PL,53.25967,19.39653 85966,Brześć Kujawski,1625,KP,176,PL,52.60532,18.90173 85971,Brzozie,1625,KP,176,PL,53.32554,19.60485 85973,Brzuze,1625,KP,176,PL,53.05458,19.26195 85989,Bukowiec,1625,KP,176,PL,53.43383,18.24048 85999,Bydgoszcz,1625,KP,176,PL,53.1235,18.00762 86007,Bytoń,1625,KP,176,PL,52.55757,18.59522 86021,Cekcyn,1625,KP,176,PL,53.57294,18.01123 86031,Chełmno,1625,KP,176,PL,53.34855,18.4251 86032,Chełmża,1625,KP,176,PL,53.18463,18.60466 86038,Choceń,1625,KP,176,PL,52.48618,19.01339 86044,Chodecz,1625,KP,176,PL,52.40513,19.02759 86058,Chrostkowo,1625,KP,176,PL,52.94378,19.25328 86078,Ciechocin,1625,KP,176,PL,53.05581,18.92635 86079,Ciechocinek,1625,KP,176,PL,52.87908,18.79505 86136,Czerniewice,1625,KP,176,PL,52.51157,19.08694 86137,Czernikowo,1625,KP,176,PL,52.94688,18.93803 86237,Dąbrowa,1625,KP,176,PL,52.74668,17.94342 86239,Dąbrowa Chełmińska,1625,KP,176,PL,53.17518,18.30537 86254,Dębowa Łąka,1625,KP,176,PL,53.25541,19.09595 86171,Dobre,1625,KP,176,PL,52.68398,18.57762 86180,Dobrzyń nad Wisłą,1625,KP,176,PL,52.63814,19.31875 86203,Drzycim,1625,KP,176,PL,53.5052,18.3094 86266,Fabianki,1625,KP,176,PL,52.71929,19.10943 86272,Fordon,1625,KP,176,PL,53.14821,18.17036 86424,Gąsawa,1625,KP,176,PL,52.76757,17.75579 86312,Gniewkowo,1625,KP,176,PL,52.89461,18.40785 86329,Golub-Dobrzyń,1625,KP,176,PL,53.11087,19.05381 86419,Górzno,1625,KP,176,PL,53.19779,19.64317 86344,Gostycyn,1625,KP,176,PL,53.49014,17.80978 86386,Grudziądz,1625,KP,176,PL,53.48411,18.75366 86388,Gruta,1625,KP,176,PL,53.45315,18.957 86459,Inowrocław,1625,KP,176,PL,52.79886,18.26387 86469,Izbica Kujawska,1625,KP,176,PL,52.42073,18.7627 86485,Jabłonowo Pomorskie,1625,KP,176,PL,53.39137,19.15509 86493,Janikowo,1625,KP,176,PL,52.75328,18.11328 86501,Janowiec Wielkopolski,1625,KP,176,PL,52.75583,17.48981 86558,Jeżewo,1625,KP,176,PL,53.51061,18.49437 86555,Jeziora Wielkie,1625,KP,176,PL,52.53043,18.26803 86600,Kamień Krajeński,1625,KP,176,PL,53.53352,17.52019 86631,Kcynia,1625,KP,176,PL,52.99192,17.4883 86857,Kęsowo,1625,KP,176,PL,53.55872,17.7158 86639,Kikół,1625,KP,176,PL,52.90994,19.12016 86705,Koronowo,1625,KP,176,PL,53.3137,17.93698 86725,Kowal,1625,KP,176,PL,52.53019,19.14767 86730,Kowalewo Pomorskie,1625,KP,176,PL,53.15432,18.89868 86793,Kruszwica,1625,KP,176,PL,52.67562,18.33131 86917,Lipno,1625,KP,176,PL,52.84436,19.17852 86924,Lisewo,1625,KP,176,PL,53.2958,18.68714 86929,Lniano,1625,KP,176,PL,53.52801,18.21267 86931,Lubanie,1625,KP,176,PL,52.74689,18.9194 86939,Lubicz Dolny,1625,KP,176,PL,53.03151,18.74559 86940,Lubicz Górny,1625,KP,176,PL,53.02686,18.771 86943,Lubień Kujawski,1625,KP,176,PL,52.40574,19.1644 86941,Lubiewo,1625,KP,176,PL,53.46542,18.02994 86957,Lubraniec,1625,KP,176,PL,52.54178,18.83254 88755,Łabiszyn,1625,KP,176,PL,52.9521,17.91971 88769,Łasin,1625,KP,176,PL,53.51794,19.08832 88796,Łubianka,1625,KP,176,PL,53.13864,18.48115 88808,Łysomice,1625,KP,176,PL,53.08629,18.62002 87086,Mogilno,1625,KP,176,PL,52.65806,17.95578 87101,Mrocza,1625,KP,176,PL,53.24313,17.60405 87135,Nakło nad Notecią,1625,KP,176,PL,53.14214,17.60181 87168,Nieszawa,1625,KP,176,PL,52.83452,18.89921 87179,Nowa Wieś Wielka,1625,KP,176,PL,52.97159,18.09036 87180,Nowe,1625,KP,176,PL,53.64906,18.72716 87219,Obrowo,1625,KP,176,PL,52.97149,18.87863 87276,Osie,1625,KP,176,PL,53.59918,18.34373 87294,Osięciny,1625,KP,176,PL,52.62926,18.72208 87285,Osiek,1625,KP,176,PL,52.92629,18.80765 87292,Osielsko,1625,KP,176,PL,53.18505,18.08418 87300,Ostrowite,1625,KP,176,PL,53.06917,19.29337 87338,Pakość,1625,KP,176,PL,52.80178,18.0853 87393,Piotrków Kujawski,1625,KP,176,PL,52.55111,18.49905 87868,Płużnica,1625,KP,176,PL,53.29672,18.77692 87457,Powiat aleksandrowski,1625,KP,176,PL,52.78465,18.7193 87473,Powiat brodnicki,1625,KP,176,PL,53.26982,19.42279 87479,Powiat bydgoski,1625,KP,176,PL,53.19029,18.03808 87482,Powiat chełmiński,1625,KP,176,PL,53.30056,18.50396 87506,Powiat golubsko-dobrzyński,1625,KP,176,PL,53.09922,18.99209 87515,Powiat grudziądzki,1625,KP,176,PL,53.47146,18.9162 87524,Powiat inowrocławski,1625,KP,176,PL,52.76463,18.29671 87571,Powiat lipnowski,1625,KP,176,PL,52.81573,19.21704 87590,Powiat mogileński,1625,KP,176,PL,52.6616,18.07424 87597,Powiat nakielski,1625,KP,176,PL,53.0948,17.58988 87658,Powiat radziejowski,1625,KP,176,PL,52.62358,18.52964 87665,Powiat rypiński,1625,KP,176,PL,53.06613,19.40975 87696,Powiat sępoleński,1625,KP,176,PL,53.44263,17.50895 87763,Powiat świecki,1625,KP,176,PL,53.48128,18.41163 87708,Powiat toruński,1625,KP,176,PL,52.98255,18.83331 87710,Powiat tucholski,1625,KP,176,PL,53.58146,17.93967 87729,Powiat wąbrzeski,1625,KP,176,PL,53.28267,18.92649 87733,Powiat włocławski,1625,KP,176,PL,52.55662,19.05157 87766,Powiat żniński,1625,KP,176,PL,52.82255,17.73743 87797,Pruszcz,1625,KP,176,PL,53.33021,18.19894 87874,Raciążek,1625,KP,176,PL,52.8565,18.81334 87885,Radomin,1625,KP,176,PL,53.0867,19.19415 87898,Radziejów,1625,KP,176,PL,52.62481,18.52771 87903,Radzyń Chełmiński,1625,KP,176,PL,53.38509,18.93725 87944,Rogowo,1625,KP,176,PL,52.72449,17.65117 87952,Rogóźno,1625,KP,176,PL,53.53587,18.92859 88012,Rypin,1625,KP,176,PL,53.06603,19.40941 88040,Sadki,1625,KP,176,PL,53.16036,17.44912 88333,Sępólno Krajeńskie,1625,KP,176,PL,53.45198,17.53169 88060,Sicienko,1625,KP,176,PL,53.20387,17.80051 88124,Skępe,1625,KP,176,PL,52.86798,19.35604 88115,Skrwilno,1625,KP,176,PL,53.01607,19.62364 88831,Ślesin,1625,KP,176,PL,53.16514,17.70258 88833,Śliwice,1625,KP,176,PL,53.70875,18.1737 88142,Solec Kujawski,1625,KP,176,PL,53.08371,18.22572 88160,Sośno,1625,KP,176,PL,53.38922,17.68713 88232,Strzelno,1625,KP,176,PL,52.62789,18.17246 88847,Świecie,1625,KP,176,PL,53.40953,18.44742 88848,Świecie nad Osą,1625,KP,176,PL,53.444,19.10171 88849,Świedziebnia,1625,KP,176,PL,53.15207,19.55463 88850,Świekatowo,1625,KP,176,PL,53.41864,18.09731 88280,Sypniewo,1625,KP,176,PL,53.36981,17.3269 88317,Szubin,1625,KP,176,PL,53.00967,17.74 88444,Tłuchowo,1625,KP,176,PL,52.74715,19.46563 88383,Topólka,1625,KP,176,PL,52.50327,18.71246 88384,Toruń,1625,KP,176,PL,53.01375,18.59814 88417,Tuchola,1625,KP,176,PL,53.58792,17.85905 88456,Unisław,1625,KP,176,PL,53.21241,18.38622 88631,Wąbrzeźno,1625,KP,176,PL,53.27989,18.94773 88471,Waganiec,1625,KP,176,PL,52.8012,18.87589 88634,Wąpielsk,1625,KP,176,PL,53.13761,19.27792 88478,Warlubie,1625,KP,176,PL,53.58751,18.63444 88557,Więcbork,1625,KP,176,PL,53.35384,17.49064 88500,Wielgie,1625,KP,176,PL,52.74076,19.2635 88504,Wielka Nieszawka,1625,KP,176,PL,52.99619,18.50973 88524,Wierzchosławice,1625,KP,176,PL,52.86923,18.35609 88649,Włocławek,1625,KP,176,PL,52.64817,19.0678 88713,Zbójno,1625,KP,176,PL,53.00848,19.1575 88741,Zławieś Wielka,1625,KP,176,PL,53.09562,18.32897 88748,Złotniki Kujawskie,1625,KP,176,PL,52.89943,18.14564 88888,Żnin,1625,KP,176,PL,52.84958,17.71992 85783,Alwernia,1635,MA,176,PL,50.06056,19.53953 85785,Andrychów,1635,MA,176,PL,49.85497,19.33834 85790,Babice,1635,MA,176,PL,50.05565,19.19955 85794,Bachowice,1635,MA,176,PL,49.95812,19.49369 85795,Balice,1635,MA,176,PL,50.08799,19.79462 85797,Balin,1635,MA,176,PL,50.16799,19.3834 85815,Barwałd Górny,1635,MA,176,PL,49.86211,19.61746 85816,Barwałd Średni,1635,MA,176,PL,49.86632,19.5936 86010,Bębło,1635,MA,176,PL,50.18053,19.78741 86011,Bęczarka,1635,MA,176,PL,49.87793,19.86723 85840,Białka,1635,MA,176,PL,49.69306,19.67033 85841,Białka Tatrzańska,1635,MA,176,PL,49.38975,20.10507 85849,Biały Dunajec,1635,MA,176,PL,49.3738,20.00898 85851,Biecz,1635,MA,176,PL,49.73596,21.26301 85869,Bieńkówka,1635,MA,176,PL,49.776,19.77179 85871,Binarowa,1635,MA,176,PL,49.75621,21.22816 85873,Biskupice Radłowskie,1635,MA,176,PL,50.12069,20.85943 85885,Bobowa,1635,MA,176,PL,49.70866,20.94767 85892,Bochnia,1635,MA,176,PL,49.96905,20.43028 85908,Bolechowice,1635,MA,176,PL,50.14831,19.79273 85916,Bolęcin,1635,MA,176,PL,50.1175,19.48116 85910,Bolesław,1635,MA,176,PL,50.29729,19.48073 85918,Borek,1635,MA,176,PL,50.01778,20.53087 85930,Borzęcin,1635,MA,176,PL,50.0654,20.71103 85931,Borzęta,1635,MA,176,PL,49.86228,19.97924 85949,Brodła,1635,MA,176,PL,50.04331,19.58879 85946,Brody,1635,MA,176,PL,49.86742,19.69746 85977,Brzączowice,1635,MA,176,PL,49.87478,20.03709 85960,Brzesko,1635,MA,176,PL,49.96911,20.60606 85961,Brzeszcze,1635,MA,176,PL,49.98203,19.15157 85962,Brzezinka,1635,MA,176,PL,50.04237,19.1902 85968,Brzeźnica,1635,MA,176,PL,49.96497,19.61952 85986,Budzów,1635,MA,176,PL,49.77622,19.67274 85990,Bukowina Tatrzańska,1635,MA,176,PL,49.34302,20.10807 85991,Bukowno,1635,MA,176,PL,50.26474,19.45962 85994,Bulowice,1635,MA,176,PL,49.8765,19.28873 86000,Bystra,1635,MA,176,PL,49.64796,19.77994 86029,Chełmek,1635,MA,176,PL,50.10163,19.24801 86030,Chełmiec,1635,MA,176,PL,49.63051,20.66425 86043,Chocznia,1635,MA,176,PL,49.87417,19.45438 86062,Chrzanów,1635,MA,176,PL,50.13546,19.40203 86071,Chyżne,1635,MA,176,PL,49.42672,19.66956 86094,Ciężkowice,1635,MA,176,PL,49.78575,20.97324 86107,Czarna Góra,1635,MA,176,PL,49.37662,20.13047 86112,Czarnochowice,1635,MA,176,PL,50.00471,20.0679 86118,Czarny Dunajec,1635,MA,176,PL,49.43663,19.85161 86121,Czchów,1635,MA,176,PL,49.83726,20.68056 86133,Czernichów,1635,MA,176,PL,49.9892,19.68115 86147,Czułów,1635,MA,176,PL,50.05956,19.70106 86241,Dąbrowa Tarnowska,1635,MA,176,PL,50.17462,20.98633 86251,Dębno,1635,MA,176,PL,49.96701,20.71979 86164,Dobczyce,1635,MA,176,PL,49.88109,20.08936 86167,Dobra,1635,MA,176,PL,49.71793,20.25347 86226,Dziewin,1635,MA,176,PL,50.07554,20.45491 86269,Filipowice,1635,MA,176,PL,50.15573,19.56579 86277,Frydman,1635,MA,176,PL,49.44927,20.22961 86278,Frydrychowice,1635,MA,176,PL,49.90481,19.41936 86293,Gdów,1635,MA,176,PL,49.90818,20.19879 86295,Giebułtów,1635,MA,176,PL,50.14556,19.87856 86298,Gierałtowice,1635,MA,176,PL,49.94426,19.3907 86426,Głogoczów,1635,MA,176,PL,49.89452,19.8741 86315,Gnojnik,1635,MA,176,PL,49.89397,20.60863 86333,Gorenice,1635,MA,176,PL,50.208,19.62038 86334,Gorlice,1635,MA,176,PL,49.65563,21.16035 86402,Gręboszów,1635,MA,176,PL,50.24501,20.77669 86379,Grojec,1635,MA,176,PL,49.98147,19.23792 86381,Gromnik,1635,MA,176,PL,49.83843,20.96123 86387,Gruszów Wielki,1635,MA,176,PL,50.19163,21.03144 86389,Grybów,1635,MA,176,PL,49.62439,20.94797 86393,Grzechynia,1635,MA,176,PL,49.7136,19.64561 86443,Harbutowice,1635,MA,176,PL,49.81235,19.78045 86461,Inwałd,1635,MA,176,PL,49.86355,19.39276 86465,Iwkowa,1635,MA,176,PL,49.81716,20.59018 86471,Izdebnik,1635,MA,176,PL,49.87218,19.76801 86480,Jabłonka,1635,MA,176,PL,49.47968,19.6937 86487,Jadowniki,1635,MA,176,PL,49.95884,20.64434 86488,Jadowniki Mokre,1635,MA,176,PL,50.16546,20.72845 86497,Janowice,1635,MA,176,PL,49.89154,20.86081 86510,Jaroszowice,1635,MA,176,PL,49.86267,19.51962 86517,Jasień,1635,MA,176,PL,49.96988,20.5719 86513,Jasienica,1635,MA,176,PL,49.82281,19.84191 86526,Jastrzębia,1635,MA,176,PL,49.79733,20.88089 86533,Jawornik,1635,MA,176,PL,49.8558,19.89315 86554,Jerzmanowice,1635,MA,176,PL,50.21267,19.74672 86564,Jodłówka,1635,MA,176,PL,49.99295,20.54821 86565,Jodłówka-Wałki,1635,MA,176,PL,50.04992,21.13332 86568,Jordanów,1635,MA,176,PL,49.64935,19.82981 86571,Juszczyn,1635,MA,176,PL,49.6929,19.69128 86588,Kalwaria Zebrzydowska,1635,MA,176,PL,49.86759,19.6772 86599,Kamień,1635,MA,176,PL,50.01215,19.58536 86590,Kamienica,1635,MA,176,PL,49.57533,20.34505 86604,Kamionka Wielka,1635,MA,176,PL,49.56848,20.82364 86619,Kasina Wielka,1635,MA,176,PL,49.72969,20.13554 86620,Kaszów,1635,MA,176,PL,50.03884,19.71934 86859,Kęty,1635,MA,176,PL,49.88214,19.22333 86642,Klecza Dolna,1635,MA,176,PL,49.88291,19.53764 86649,Klikuszowa,1635,MA,176,PL,49.5193,19.9849 86651,Klimontów,1635,MA,176,PL,50.22843,20.3199 86654,Klucze,1635,MA,176,PL,50.33565,19.56236 86656,Kluszkowce,1635,MA,176,PL,49.451,20.30179 86860,Kłaj,1635,MA,176,PL,49.99246,20.29904 86664,Kobylanka,1635,MA,176,PL,49.66891,21.22293 86675,Kokotów,1635,MA,176,PL,50.01254,20.07829 86709,Korzenna,1635,MA,176,PL,49.68635,20.84355 86755,Kościelisko,1635,MA,176,PL,49.29073,19.88929 86718,Koszyce,1635,MA,176,PL,49.97226,20.94166 86719,Koszyce Wielkie,1635,MA,176,PL,49.98076,20.94552 86739,Kozłów,1635,MA,176,PL,50.48394,20.02456 86763,Kraków,1635,MA,176,PL,50.07262,19.9325 86787,Krościenko nad Dunajcem,1635,MA,176,PL,49.44081,20.42624 86788,Krośnica,1635,MA,176,PL,49.44787,20.33956 86795,Krynica-Zdrój,1635,MA,176,PL,49.42225,20.95942 86799,Kryspinów,1635,MA,176,PL,50.0438,19.79822 86801,Krzczonów,1635,MA,176,PL,49.73813,19.91821 86827,Krzęcin,1635,MA,176,PL,49.94316,19.74157 86804,Krzeczów,1635,MA,176,PL,49.98876,20.48779 86812,Krzeszów,1635,MA,176,PL,49.75915,19.48915 86808,Krzeszowice,1635,MA,176,PL,50.14248,19.63223 86816,Krzyszkowice,1635,MA,176,PL,49.88346,19.92285 86817,Krzywaczka,1635,MA,176,PL,49.89353,19.83221 86836,Kuków,1635,MA,176,PL,49.73252,19.48485 86848,Kwaczała,1635,MA,176,PL,50.06408,19.49215 86868,Lachowice,1635,MA,176,PL,49.71555,19.47455 86870,Lanckorona,1635,MA,176,PL,49.84496,19.71578 86871,Lasek,1635,MA,176,PL,49.50883,19.98078 86872,Laskowa,1635,MA,176,PL,49.76147,20.45045 86887,Leńcze,1635,MA,176,PL,49.89895,19.73539 86891,Leśnica,1635,MA,176,PL,49.40092,20.06001 86896,Libertów,1635,MA,176,PL,49.97242,19.89461 86897,Libiąż,1635,MA,176,PL,50.10396,19.31568 86902,Limanowa,1635,MA,176,PL,49.70594,20.42204 86908,Lipinki,1635,MA,176,PL,49.67296,21.29288 86913,Lipnica Mała,1635,MA,176,PL,49.51507,19.63497 86914,Lipnica Wielka,1635,MA,176,PL,49.70489,20.86844 86915,Lipnik,1635,MA,176,PL,49.78902,20.08455 86926,Lisia Góra,1635,MA,176,PL,50.08039,21.04397 86928,Liszki,1635,MA,176,PL,50.03884,19.76835 86942,Lubień,1635,MA,176,PL,49.71921,19.97847 86952,Lubomierz,1635,MA,176,PL,49.60854,20.20214 86965,Ludźmierz,1635,MA,176,PL,49.46656,19.9825 86966,Luszowice,1635,MA,176,PL,50.17415,19.40426 88756,Łabowa,1635,MA,176,PL,49.52766,20.85497 88812,Łącko,1635,MA,176,PL,49.55757,20.43586 88813,Łączany,1635,MA,176,PL,49.98407,19.57867 88765,Łapanów,1635,MA,176,PL,49.86538,20.29149 88766,Łapczyca,1635,MA,176,PL,49.95994,20.38445 88767,Łapsze Niżne,1635,MA,176,PL,49.39807,20.24343 88828,Łętownia,1635,MA,176,PL,49.69745,19.87109 88790,Łopuszna,1635,MA,176,PL,49.47281,20.13021 88794,Łososina Dolna,1635,MA,176,PL,49.74977,20.63129 88802,Łukowa,1635,MA,176,PL,50.093,20.97548 88804,Łukowica,1635,MA,176,PL,49.6111,20.48289 88806,Łużna,1635,MA,176,PL,49.71288,21.04637 86984,Maków Podhalański,1635,MA,176,PL,49.73008,19.67711 86988,Malec,1635,MA,176,PL,49.92106,19.2453 86990,Maniowy,1635,MA,176,PL,49.45976,20.26454 87002,Maszkienice,1635,MA,176,PL,49.9892,20.68657 87125,Mędrzechów,1635,MA,176,PL,50.28221,20.94749 87126,Mętków,1635,MA,176,PL,50.05251,19.37525 87020,Michałowice,1635,MA,176,PL,50.15898,19.98044 87026,Miechów,1635,MA,176,PL,50.35648,20.02788 87027,Miechów Charsznica,1635,MA,176,PL,50.39599,19.95031 87067,Miękinia,1635,MA,176,PL,50.15557,19.60871 87077,Mników,1635,MA,176,PL,50.06044,19.72595 87082,Modlnica,1635,MA,176,PL,50.12958,19.86461 87083,Modlniczka,1635,MA,176,PL,50.11739,19.8553 87085,Mogilany,1635,MA,176,PL,49.9389,19.88972 87098,Moszczenica,1635,MA,176,PL,49.73668,21.09238 87109,Mszana Dolna,1635,MA,176,PL,49.67432,20.07992 87110,Mszana Górna,1635,MA,176,PL,49.66202,20.09734 87115,Muszyna,1635,MA,176,PL,49.35661,20.89718 87122,Myślachowice,1635,MA,176,PL,50.18514,19.48116 87123,Myślenice,1635,MA,176,PL,49.83383,19.9383 87137,Naprawa,1635,MA,176,PL,49.64657,19.87916 87142,Nawojowa,1635,MA,176,PL,49.56686,20.73927 87145,Nidek,1635,MA,176,PL,49.90492,19.32461 87154,Niedomice,1635,MA,176,PL,50.10737,20.89548 87156,Niedzica,1635,MA,176,PL,49.41008,20.30273 87159,Niedźwiedź,1635,MA,176,PL,49.621,20.07794 87167,Niepołomice,1635,MA,176,PL,50.04066,20.22257 87172,Nowa Góra,1635,MA,176,PL,50.17305,19.5912 87177,Nowa Wieś,1635,MA,176,PL,49.90746,19.21646 87181,Nowe Brzesko,1635,MA,176,PL,50.13222,20.37663 87206,Nowy Sącz,1635,MA,176,PL,49.62177,20.69705 87207,Nowy Targ,1635,MA,176,PL,49.47783,20.03228 87209,Nowy Wiśnicz,1635,MA,176,PL,49.91465,20.46109 87225,Ochojno,1635,MA,176,PL,49.95255,19.97452 87227,Ochotnica Dolna,1635,MA,176,PL,49.52682,20.34265 87233,Okocim,1635,MA,176,PL,49.9489,20.6016 87237,Olesno,1635,MA,176,PL,50.20152,20.92578 87242,Olkusz,1635,MA,176,PL,50.2813,19.56503 87243,Olszana,1635,MA,176,PL,49.56748,20.52126 87251,Olszówka,1635,MA,176,PL,49.61455,20.02885 87323,Ołpiny,1635,MA,176,PL,49.80686,21.20464 87278,Osieczany,1635,MA,176,PL,49.84252,19.98207 87284,Osiek,1635,MA,176,PL,50.24353,19.60047 87291,Osielec,1635,MA,176,PL,49.68079,19.78243 87314,Ostrężnica,1635,MA,176,PL,50.19262,19.57077 87302,Ostrowsko,1635,MA,176,PL,49.47616,20.10052 87325,Oświęcim,1635,MA,176,PL,50.03437,19.21037 87339,Palcza,1635,MA,176,PL,49.80454,19.74389 87354,Pawlikowice,1635,MA,176,PL,49.9531,20.05486 87361,Pcim,1635,MA,176,PL,49.75166,19.97108 87375,Piekary,1635,MA,176,PL,50.02495,19.79616 87377,Piekielnik,1635,MA,176,PL,49.47688,19.7681 87400,Piwniczna-Zdrój,1635,MA,176,PL,49.44056,20.71423 87408,Pleśna,1635,MA,176,PL,49.92642,20.94526 87863,Płaza,1635,MA,176,PL,50.09988,19.46451 87415,Podegrodzie,1635,MA,176,PL,49.57688,20.58855 87419,Podłęże,1635,MA,176,PL,50.01458,20.16781 87418,Podwilk,1635,MA,176,PL,49.5476,19.73874 87424,Pogórska Wola,1635,MA,176,PL,50.01855,21.15795 87421,Pogorzyce,1635,MA,176,PL,50.10186,19.42228 87431,Polanka Wielka,1635,MA,176,PL,49.98501,19.32615 87441,Ponikiew,1635,MA,176,PL,49.83311,19.46571 87447,Porąbka Uszewska,1635,MA,176,PL,49.9426,20.69052 87448,Poręba,1635,MA,176,PL,49.79645,20.01718 87450,Poręba Spytkowska,1635,MA,176,PL,49.93995,20.55405 87451,Poręba Wielka,1635,MA,176,PL,50.01116,19.28375 87445,Poronin,1635,MA,176,PL,49.33781,20.00291 87470,Powiat bocheński,1635,MA,176,PL,49.96911,20.43078 87474,Powiat brzeski,1635,MA,176,PL,49.9717,20.60572 87487,Powiat chrzanowski,1635,MA,176,PL,50.13565,19.40434 87496,Powiat dąbrowski,1635,MA,176,PL,50.17572,20.97895 87507,Powiat gorlicki,1635,MA,176,PL,49.66452,21.16842 87550,Powiat krakowski,1635,MA,176,PL,50.14347,19.91409 87570,Powiat limanowski,1635,MA,176,PL,49.70761,20.42444 87583,Powiat miechowski,1635,MA,176,PL,50.35715,20.0329 87594,Powiat myślenicki,1635,MA,176,PL,49.83394,19.94482 87605,Powiat nowosądecki,1635,MA,176,PL,49.63467,20.69824 87606,Powiat nowotarski,1635,MA,176,PL,49.47663,20.04305 87613,Powiat olkuski,1635,MA,176,PL,50.27932,19.55772 87627,Powiat oświęcimski,1635,MA,176,PL,50.03796,19.22771 87641,Powiat proszowicki,1635,MA,176,PL,50.19241,20.28413 87689,Powiat suski,1635,MA,176,PL,49.74462,19.59103 87703,Powiat tarnowski,1635,MA,176,PL,50.05449,20.90527 87704,Powiat tatrzański,1635,MA,176,PL,49.3042,19.948 87712,Powiat wadowicki,1635,MA,176,PL,49.89032,19.48374 87717,Powiat wielicki,1635,MA,176,PL,49.9857,20.05494 87792,Proszowice,1635,MA,176,PL,50.19275,20.28909 87802,Przecieszyn,1635,MA,176,PL,49.97838,19.17046 87803,Przeciszów,1635,MA,176,PL,50.00647,19.37576 87809,Przeginia,1635,MA,176,PL,50.23831,19.68853 87820,Przyborów,1635,MA,176,PL,50.03035,20.66279 87830,Przytkowice,1635,MA,176,PL,49.91785,19.6857 87840,Psary,1635,MA,176,PL,50.17242,19.52953 87869,Raba Wyżna,1635,MA,176,PL,49.56681,19.87967 87870,Rabka-Zdrój,1635,MA,176,PL,49.60889,19.96654 87877,Racławice,1635,MA,176,PL,50.19344,19.67686 88036,Rączna,1635,MA,176,PL,50.00984,19.76784 87880,Radgoszcz,1635,MA,176,PL,50.2058,21.11315 87905,Radłów,1635,MA,176,PL,50.08419,20.84967 87883,Radocza,1635,MA,176,PL,49.91774,19.47498 87900,Radziszów,1635,MA,176,PL,49.93531,19.81522 87908,Rajsko,1635,MA,176,PL,50.01193,19.19294 87924,Regulice,1635,MA,176,PL,50.08314,19.52785 87942,Roczyny,1635,MA,176,PL,49.8537,19.31568 87953,Rokiciny,1635,MA,176,PL,49.57243,19.92302 87960,Ropa,1635,MA,176,PL,49.59146,21.04431 87973,Rudawa,1635,MA,176,PL,50.12151,19.71239 87980,Rudnik,1635,MA,176,PL,49.85243,19.8474 87989,Rusocice,1635,MA,176,PL,49.99604,19.60648 88003,Ryczów,1635,MA,176,PL,49.98103,19.55017 88006,Ryglice,1635,MA,176,PL,49.87887,21.13748 88013,Rytro,1635,MA,176,PL,49.48904,20.66631 88031,Rząska,1635,MA,176,PL,50.09713,19.84509 88021,Rzepiennik Strzyżewski,1635,MA,176,PL,49.80542,21.03599 88023,Rzeszotary,1635,MA,176,PL,49.94625,19.9728 88026,Rzezawa,1635,MA,176,PL,49.98997,20.51508 88029,Rzozów,1635,MA,176,PL,49.95398,19.79668 88030,Rzyki,1635,MA,176,PL,49.81129,19.39619 88047,Sanka,1635,MA,176,PL,50.06871,19.64596 88326,Sąspów,1635,MA,176,PL,50.22887,19.77007 88330,Sękowa,1635,MA,176,PL,49.62217,21.19769 88061,Sidzina,1635,MA,176,PL,49.59146,19.71119 88067,Siedliska,1635,MA,176,PL,49.87163,20.99625 88073,Siemiechów,1635,MA,176,PL,49.85359,20.90595 88078,Sieniawa,1635,MA,176,PL,49.53947,19.93014 88084,Siepraw,1635,MA,176,PL,49.91437,19.95864 88086,Sieradza,1635,MA,176,PL,50.13499,20.92947 88105,Skała,1635,MA,176,PL,50.23052,19.85363 88102,Skawica,1635,MA,176,PL,49.67718,19.62321 88103,Skawina,1635,MA,176,PL,49.97524,19.82869 88104,Skawinki,1635,MA,176,PL,49.82281,19.71256 88110,Skomielna Czarna,1635,MA,176,PL,49.72709,19.83633 88116,Skrzydlna,1635,MA,176,PL,49.75343,20.18618 88117,Skrzyszów,1635,MA,176,PL,49.99373,21.06139 88341,Słomniki,1635,MA,176,PL,50.24012,20.08224 88342,Słopnice,1635,MA,176,PL,49.68496,20.34325 88351,Słupiec,1635,MA,176,PL,50.32787,21.19374 88128,Smęgorzów,1635,MA,176,PL,50.22843,21.00414 88151,Sosnowice,1635,MA,176,PL,49.93995,19.71514 88162,Spytkowice,1635,MA,176,PL,49.99671,19.51103 88166,Stanisław Dolny,1635,MA,176,PL,49.9047,19.65334 88167,Stanisław Górny,1635,MA,176,PL,49.91155,19.62931 88168,Stanisławice,1635,MA,176,PL,49.9855,20.35123 88194,Stary Sącz,1635,MA,176,PL,49.56364,20.63496 88196,Stary Wiśnicz,1635,MA,176,PL,49.92548,20.48641 88216,Stronie,1635,MA,176,PL,49.83056,19.67497 88237,Stróża,1635,MA,176,PL,49.79628,19.92379 88220,Stryszawa,1635,MA,176,PL,49.71327,19.52185 88221,Stryszów,1635,MA,176,PL,49.82569,19.61763 88248,Sucha Beskidzka,1635,MA,176,PL,49.74188,19.59429 88262,Sulęcin,1635,MA,176,PL,52.44429,15.11676 88271,Sułkowice,1635,MA,176,PL,49.84053,19.80097 88272,Sułoszowa,1635,MA,176,PL,50.26789,19.73282 88863,Świątniki Górne,1635,MA,176,PL,49.93429,19.95364 88284,Szaflary,1635,MA,176,PL,49.42655,20.02713 88287,Szarów,1635,MA,176,PL,49.99505,20.2696 88290,Szczawnica,1635,MA,176,PL,49.42437,20.48487 88299,Szczucin,1635,MA,176,PL,50.30957,21.07444 88301,Szczurowa,1635,MA,176,PL,50.11915,20.6361 88309,Szerzyny,1635,MA,176,PL,49.80919,21.2467 88323,Szynwałd,1635,MA,176,PL,49.96767,21.12293 88355,Targanice,1635,MA,176,PL,49.80575,19.32444 88356,Targowisko,1635,MA,176,PL,49.98473,20.29346 88365,Tarnów,1635,MA,176,PL,50.01381,20.98698 88361,Tarnowiec,1635,MA,176,PL,49.98164,20.98655 88372,Tenczynek,1635,MA,176,PL,50.11986,19.61308 88376,Tokarnia,1635,MA,176,PL,49.7272,19.87161 88378,Tomaszkowice,1635,MA,176,PL,49.97918,20.09966 88381,Tomice,1635,MA,176,PL,49.89773,19.48357 88382,Toporzysko,1635,MA,176,PL,49.62495,19.80226 88414,Trąbki,1635,MA,176,PL,49.96226,20.1424 88395,Trzciana,1635,MA,176,PL,49.84485,20.37415 88407,Trzebinia,1635,MA,176,PL,50.15931,19.46966 88410,Trzebunia,1635,MA,176,PL,49.79146,19.84715 88412,Trzemeśnia,1635,MA,176,PL,49.82752,20.02207 88419,Tuchów,1635,MA,176,PL,49.89485,21.05407 88439,Tylicz,1635,MA,176,PL,49.39598,21.02368 88440,Tymbark,1635,MA,176,PL,49.72859,20.32539 88467,Uście Gorlickie,1635,MA,176,PL,49.52192,21.13821 88469,Wadowice,1635,MA,176,PL,49.88335,19.49292 88472,Waksmund,1635,MA,176,PL,49.48207,20.07563 88486,Wawrzeńczyce,1635,MA,176,PL,50.11012,20.31612 88640,Węglówka,1635,MA,176,PL,49.73424,20.08575 88644,Węgrzce Wielkie,1635,MA,176,PL,50.01491,20.11082 88502,Wieliczka,1635,MA,176,PL,49.98738,20.06473 88505,Wielka Wieś,1635,MA,176,PL,49.93631,20.82304 88514,Wieprz,1635,MA,176,PL,49.89093,19.35688 88523,Wierzchosławice,1635,MA,176,PL,50.02478,20.85677 88528,Wietrzychowice,1635,MA,176,PL,50.19097,20.76502 88563,Wiśniowa,1635,MA,176,PL,49.7878,20.11502 88548,Witanowice,1635,MA,176,PL,49.91796,19.52579 88550,Witkowice,1635,MA,176,PL,49.90746,19.27963 88652,Włosienica,1635,MA,176,PL,50.01822,19.31671 88577,Wojnicz,1635,MA,176,PL,49.958,20.83785 88582,Wola Batorska,1635,MA,176,PL,50.05262,20.26617 88583,Wola Dębińska,1635,MA,176,PL,49.98214,20.68777 88584,Wola Filipowska,1635,MA,176,PL,50.13433,19.58013 88587,Wola Radziszowska,1635,MA,176,PL,49.90558,19.78827 88591,Wola Zabierzowska,1635,MA,176,PL,50.07257,20.33217 88594,Wolbrom,1635,MA,176,PL,50.37957,19.75831 88600,Wołowice,1635,MA,176,PL,49.98876,19.7263 88602,Woźniki,1635,MA,176,PL,49.93774,19.49078 88607,Wrząsowice,1635,MA,176,PL,49.95862,19.94654 88616,Wysoka,1635,MA,176,PL,49.90713,19.60356 88655,Zabierzów,1635,MA,176,PL,50.11425,19.79788 88656,Zabierzów Bocheński,1635,MA,176,PL,50.06821,20.31896 88871,Żabno,1635,MA,176,PL,50.13334,20.88615 88657,Zaborze,1635,MA,176,PL,50.02175,19.24067 88668,Zagórnik,1635,MA,176,PL,49.8371,19.37868 88670,Zagórze,1635,MA,176,PL,50.09449,19.40357 88673,Zakliczyn,1635,MA,176,PL,49.85589,20.80935 88675,Zakopane,1635,MA,176,PL,49.29899,19.94885 88680,Zakrzów,1635,MA,176,PL,49.82558,19.64973 88683,Zalas,1635,MA,176,PL,50.08033,19.62132 88874,Żarki,1635,MA,176,PL,50.08259,19.35199 88698,Zarzecze,1635,MA,176,PL,50.36715,19.69591 88699,Zator,1635,MA,176,PL,49.99604,19.43799 88706,Zawoja,1635,MA,176,PL,49.64396,19.54227 88720,Zebrzydowice,1635,MA,176,PL,49.89032,19.67291 88879,Żegocina,1635,MA,176,PL,49.81395,20.41964 88723,Zembrzyce,1635,MA,176,PL,49.77517,19.6012 88730,Zielonki,1635,MA,176,PL,50.12091,19.92156 88745,Złota,1635,MA,176,PL,49.88059,20.69326 88733,Zubrzyca Dolna,1635,MA,176,PL,49.52688,19.67342 88734,Zubrzyca Górna,1635,MA,176,PL,49.56174,19.64973 88896,Żurowa,1635,MA,176,PL,49.82636,21.16894 85810,Bardo,1629,DS,176,PL,50.50589,16.73986 85853,Bielany Wrocławskie,1629,DS,176,PL,51.0361,16.9677 85854,Bielawa,1629,DS,176,PL,50.69075,16.623 85866,Bierutów,1629,DS,176,PL,51.12443,17.54607 85875,Biskupin,1629,DS,176,PL,51.10097,17.10442 85895,Bogatynia,1629,DS,176,PL,50.90747,14.95634 85899,Boguszów-Gorce,1629,DS,176,PL,50.75514,16.20494 85911,Bolesławiec,1629,DS,176,PL,51.26418,15.5697 85914,Bolków,1629,DS,176,PL,50.92203,16.10111 85932,Bozkow,1629,DS,176,PL,50.51315,16.57528 85959,Brzeg Dolny,1629,DS,176,PL,51.27299,16.70815 85985,Budzów,1629,DS,176,PL,50.59337,16.71038 86002,Bystrzyca,1629,DS,176,PL,50.96048,17.39702 86003,Bystrzyca Kłodzka,1629,DS,176,PL,50.30179,16.64231 86039,Chocianów,1629,DS,176,PL,51.41867,15.90172 86050,Chojnów,1629,DS,176,PL,51.27373,15.93661 86080,Ciechów,1629,DS,176,PL,51.13218,16.56773 86084,Cieplice Śląskie Zdrój,1629,DS,176,PL,50.86545,15.68367 86085,Ciepłowody,1629,DS,176,PL,50.67477,16.90871 86087,Cieszków,1629,DS,176,PL,51.63104,17.35726 86117,Czarny Bór,1629,DS,176,PL,50.77083,16.1305 86129,Czernica,1629,DS,176,PL,51.04609,17.2451 86235,Dąbie,1629,DS,176,PL,51.10573,17.08108 86261,Długołęka,1629,DS,176,PL,51.17902,17.19137 86174,Dobroszyce,1629,DS,176,PL,51.26776,17.34205 86209,Duszniki-Zdrój,1629,DS,176,PL,50.40327,16.39091 86215,Dziadowa Kłoda,1629,DS,176,PL,51.23543,17.70919 86227,Dziećmorowice,1629,DS,176,PL,50.76947,16.35212 86225,Dzierżoniów,1629,DS,176,PL,50.7282,16.65141 86423,Gądów Mały,1629,DS,176,PL,51.11853,16.98596 86288,Gaworzyce,1629,DS,176,PL,51.62773,15.88198 86427,Głogów,1629,DS,176,PL,51.66361,16.0845 86435,Głuszyca,1629,DS,176,PL,50.68743,16.37173 86436,Głuszyca Górna,1629,DS,176,PL,50.66606,16.37585 86309,Gniechowice,1629,DS,176,PL,50.98804,16.83363 86408,Góra,1629,DS,176,PL,51.66638,16.53494 86363,Grabiszyn,1629,DS,176,PL,51.09369,16.97819 86364,Grabiszynek,1629,DS,176,PL,51.08703,16.98629 86401,Grębocice,1629,DS,176,PL,51.59909,16.16741 86380,Gromadka,1629,DS,176,PL,51.36063,15.76452 86392,Gryfów Śląski,1629,DS,176,PL,51.03081,15.42017 86447,Henryków,1629,DS,176,PL,50.65327,17.01027 86499,Janowice Wielkie,1629,DS,176,PL,50.87569,15.92322 86507,Jarnołtów-Jerzmanowo,1629,DS,176,PL,51.12163,16.86621 86531,Jawor,1629,DS,176,PL,51.05132,16.19347 86537,Jaworzyna Śląska,1629,DS,176,PL,50.9134,16.43241 86541,Jedlina-Zdrój,1629,DS,176,PL,50.72005,16.34645 86548,Jelcz,1629,DS,176,PL,51.02102,17.32095 86549,Jelcz Laskowice,1629,DS,176,PL,51.02134,17.31649 86550,Jelenia Góra,1629,DS,176,PL,50.89973,15.72899 86561,Jeżów Sudecki,1629,DS,176,PL,50.93507,15.74306 86569,Jordanów Śląski,1629,DS,176,PL,50.86421,16.86873 86570,Jugów,1629,DS,176,PL,50.62758,16.51812 86594,Kamieniec Wrocławski,1629,DS,176,PL,51.07182,17.18193 86595,Kamieniec Ząbkowicki,1629,DS,176,PL,50.52541,16.87921 86596,Kamienna Góra,1629,DS,176,PL,50.78314,16.03037 86618,Karłowice,1629,DS,176,PL,51.14132,17.05212 86615,Karpacz,1629,DS,176,PL,50.77669,15.75594 86852,Kąty Wrocławskie,1629,DS,176,PL,51.03098,16.76767 86636,Kiełczów,1629,DS,176,PL,51.13999,17.17798 86866,Kłodzko,1629,DS,176,PL,50.43488,16.66145 86661,Kobierzyce,1629,DS,176,PL,50.97054,16.93508 86722,Kotla,1629,DS,176,PL,51.74542,16.03575 86729,Kowale-Popiele,1629,DS,176,PL,51.1309,17.10175 86731,Kowary,1629,DS,176,PL,50.79313,15.83559 86733,Kozanów,1629,DS,176,PL,51.14447,16.96937 86789,Krośnice,1629,DS,176,PL,51.47641,17.35917 86811,Krzeszów,1629,DS,176,PL,50.73434,16.06991 86813,Krzyki,1629,DS,176,PL,51.07085,16.99475 86831,Księże Małe-Księże Wielkie,1629,DS,176,PL,51.07293,17.08881 86835,Kudowa-Zdrój,1629,DS,176,PL,50.44297,16.24397 86837,Kunice,1629,DS,176,PL,51.22231,16.24809 86977,Lądek-Zdrój,1629,DS,176,PL,50.34371,16.87946 86877,Legnica,1629,DS,176,PL,51.21006,16.1619 86878,Legnickie Pole,1629,DS,176,PL,51.14419,16.24208 86889,Leśna,1629,DS,176,PL,51.02431,15.26413 86893,Leśnica-Ratyń-Pustki,1629,DS,176,PL,51.14228,16.84773 86886,Lewin Kłodzki,1629,DS,176,PL,50.40559,16.29101 86936,Lubań,1629,DS,176,PL,51.12014,15.28768 86935,Lubawka,1629,DS,176,PL,50.70456,16.00026 86944,Lubin,1629,DS,176,PL,51.40089,16.20149 86953,Lubomierz,1629,DS,176,PL,51.01278,15.50969 86963,Ludwikowice Kłodzkie,1629,DS,176,PL,50.62464,16.46052 86974,Lwówek Śląski,1629,DS,176,PL,51.11074,15.58582 88758,Łagiewniki,1629,DS,176,PL,50.79088,16.84457 88760,Łagów,1629,DS,176,PL,51.15835,15.04372 86987,Malczyce,1629,DS,176,PL,51.22038,16.49365 86991,Marciszów,1629,DS,176,PL,50.8447,16.02116 86998,Marszowice,1629,DS,176,PL,51.17198,16.88441 87011,Maślice Małe,1629,DS,176,PL,51.14937,16.94191 87012,Maślice Wielkie,1629,DS,176,PL,51.16333,16.92837 87060,Międzybórz,1629,DS,176,PL,51.39626,17.6661 87063,Międzylesie,1629,DS,176,PL,50.14778,16.66712 87068,Miękinia,1629,DS,176,PL,51.18844,16.73595 87038,Mieroszów,1629,DS,176,PL,50.66589,16.18883 87050,Milicz,1629,DS,176,PL,51.5277,17.27137 87071,Miłkowice,1629,DS,176,PL,51.25601,16.07231 87053,Mirków,1629,DS,176,PL,51.16105,17.17026 87056,Mirsk,1629,DS,176,PL,50.97054,15.38567 87103,Mrozów,1629,DS,176,PL,51.18817,16.78831 87120,Mysłakowice,1629,DS,176,PL,50.84123,15.77894 87163,Niemcza,1629,DS,176,PL,50.72007,16.83573 87173,Nowa Ruda,1629,DS,176,PL,50.58008,16.50164 87195,Nowogrodziec,1629,DS,176,PL,51.19543,15.39854 87217,Oborniki Śląskie,1629,DS,176,PL,51.30137,16.91465 87241,Oleśnica,1629,DS,176,PL,51.21338,17.38986 87245,Olszanica,1629,DS,176,PL,51.20672,15.8004 87250,Olszyna,1629,DS,176,PL,51.0671,15.37228 87322,Oława,1629,DS,176,PL,50.9466,17.2926 87280,Osiedle Henrykowskie,1629,DS,176,PL,51.08999,17.05289 87281,Osiedle Kosmonautów,1629,DS,176,PL,51.12753,16.96186 87286,Osiek,1629,DS,176,PL,51.36717,16.2338 87298,Ostroszowice,1629,DS,176,PL,50.64576,16.63965 87348,Partynice,1629,DS,176,PL,51.06798,17.01394 87352,Paszowice,1629,DS,176,PL,51.01078,16.15273 87358,Pawłowice-Kłokoczyce,1629,DS,176,PL,51.16495,17.09822 87373,Piechowice,1629,DS,176,PL,50.84963,15.59887 87386,Pieńsk,1629,DS,176,PL,51.249,15.04685 87383,Pieszyce,1629,DS,176,PL,50.71287,16.58232 87389,Pilczyce,1629,DS,176,PL,51.13704,16.95752 87404,Piława Górna,1629,DS,176,PL,50.68357,16.74359 87396,Pisarzowice,1629,DS,176,PL,51.14479,15.23057 87416,Podgórzyn,1629,DS,176,PL,50.83261,15.68161 87430,Polanica-Zdrój,1629,DS,176,PL,50.40373,16.51271 87436,Polkowice,1629,DS,176,PL,51.50391,16.07261 87782,Poświętne,1629,DS,176,PL,51.15702,17.02904 87471,Powiat bolesławiecki,1629,DS,176,PL,51.32174,15.53215 87495,Powiat dzierżoniowski,1629,DS,176,PL,50.73506,16.69192 87520,Powiat głogowski,1629,DS,176,PL,51.67132,16.09486 87519,Powiat górowski,1629,DS,176,PL,51.63666,16.54815 87530,Powiat jaworski,1629,DS,176,PL,51.03967,16.16364 87531,Powiat jeleniogórski,1629,DS,176,PL,50.89654,15.63835 87534,Powiat kamiennogórski,1629,DS,176,PL,50.75603,16.00471 87563,Powiat kłodzki,1629,DS,176,PL,50.38882,16.61185 87565,Powiat legnicki,1629,DS,176,PL,51.24113,16.10744 87575,Powiat lubański,1629,DS,176,PL,51.04506,15.27739 87577,Powiat lubiński,1629,DS,176,PL,51.44172,16.24318 87579,Powiat lwówecki,1629,DS,176,PL,51.01559,15.52144 87586,Powiat milicki,1629,DS,176,PL,51.50792,17.28292 87612,Powiat oleśnicki,1629,DS,176,PL,51.25458,17.51679 87626,Powiat oławski,1629,DS,176,PL,50.96062,17.30601 87639,Powiat polkowicki,1629,DS,176,PL,51.49982,16.01528 87756,Powiat średzki,1629,DS,176,PL,51.12628,16.61904 87686,Powiat strzeliński,1629,DS,176,PL,50.76688,17.10629 87759,Powiat świdnicki,1629,DS,176,PL,50.87051,16.43043 87709,Powiat trzebnicki,1629,DS,176,PL,51.37195,17.04989 87714,Powiat wałbrzyski,1629,DS,176,PL,50.7534,16.19865 87723,Powiat wołowski,1629,DS,176,PL,51.37202,16.61399 87724,Powiat wrocławski,1629,DS,176,PL,51.04278,16.97115 87744,Powiat ząbkowicki,1629,DS,176,PL,50.55669,16.87221 87741,Powiat zgorzelecki,1629,DS,176,PL,51.16297,15.07863 87745,Powiat złotoryjski,1629,DS,176,PL,51.09129,15.87948 87771,Powstańców Śląskich Wschód,1629,DS,176,PL,51.09164,17.0247 87772,Powstańców Śląskich Zachód-Centrum Południow,1629,DS,176,PL,51.09607,17.0177 87784,Pracze Odrzańskie-Janówek,1629,DS,176,PL,51.1878,16.90824 87789,Prochowice,1629,DS,176,PL,51.27307,16.36532 87796,Prusice,1629,DS,176,PL,51.37116,16.96025 87811,Przemków,1629,DS,176,PL,51.5253,15.79441 87815,Przeworno,1629,DS,176,PL,50.68629,17.16588 87839,Psary,1629,DS,176,PL,51.18712,17.03173 87841,Psie Pole Południe-Kiełczów,1629,DS,176,PL,51.14783,17.12744 87881,Radków,1629,DS,176,PL,50.50426,16.40061 87892,Radwanice,1629,DS,176,PL,51.05413,17.10932 87917,Ratowice,1629,DS,176,PL,51.03308,17.27205 87925,Rejon alei Kromera,1629,DS,176,PL,51.13375,17.07107 87926,Rejon placu Grunwaldzkiego,1629,DS,176,PL,51.11669,17.06126 87927,Rejon placu Świętego Macieja,1629,DS,176,PL,51.12056,17.03761 87928,Rejon ulicy Borowskiej-Południe,1629,DS,176,PL,51.0766,17.02582 87929,Rejon ulicy Klęczkowskiej,1629,DS,176,PL,51.1297,17.03376 87930,Rejon ulicy Mieleckiej,1629,DS,176,PL,51.09145,17.00207 87931,Rejon ulicy Saperów,1629,DS,176,PL,51.08614,17.0005 87932,Rejon ulicy Traugutta,1629,DS,176,PL,51.10247,17.04827 88034,Różanka-Polanka,1629,DS,176,PL,51.14344,17.01987 87975,Rudna,1629,DS,176,PL,51.50981,16.26363 88829,Ścinawa,1629,DS,176,PL,51.41626,16.4251 88331,Sępolno,1629,DS,176,PL,51.10995,17.102 88063,Siechnice,1629,DS,176,PL,51.03384,17.14743 88070,Siekierczyn,1629,DS,176,PL,51.12217,15.19375 88125,Smolec,1629,DS,176,PL,51.07322,16.88221 88133,Sobótka,1629,DS,176,PL,50.89992,16.74441 88155,Sołtysowice,1629,DS,176,PL,51.15282,17.07103 88154,Sosnówka,1629,DS,176,PL,50.8183,15.72315 88839,Środa Śląska,1629,DS,176,PL,51.16406,16.59508 88164,Stabłowice,1629,DS,176,PL,51.15375,16.9002 88172,Stanowice,1629,DS,176,PL,50.93106,16.37426 88175,Stara Kamienica,1629,DS,176,PL,50.91602,15.57286 88182,Stare Bogaczowice,1629,DS,176,PL,50.84752,16.19308 88208,Stoszowice,1629,DS,176,PL,50.59986,16.73896 88209,Strachocin-Wojnów,1629,DS,176,PL,51.10486,17.15073 88217,Stronie Śląskie,1629,DS,176,PL,50.29554,16.87397 88224,Strzegom,1629,DS,176,PL,50.96264,16.35006 88231,Strzelin,1629,DS,176,PL,50.78157,17.06477 88259,Sulików,1629,DS,176,PL,51.07624,15.06792 88274,Sułów,1629,DS,176,PL,51.49966,17.16811 88842,Świdnica,1629,DS,176,PL,50.84378,16.48859 88845,Świebodzice,1629,DS,176,PL,50.85974,16.31966 88851,Świeradów-Zdrój,1629,DS,176,PL,50.9092,15.34309 88857,Świerzawa,1629,DS,176,PL,51.01375,15.89516 88865,Święta Katarzyna,1629,DS,176,PL,51.02596,17.11464 88277,Swojczyce,1629,DS,176,PL,51.11567,17.12535 88278,Syców,1629,DS,176,PL,51.30814,17.71979 88291,Szczawno-Zdrój,1629,DS,176,PL,50.80352,16.25655 88296,Szczepanów,1629,DS,176,PL,51.19796,16.61064 88304,Szczytna,1629,DS,176,PL,50.41343,16.44743 88310,Szklarska Poręba,1629,DS,176,PL,50.82567,15.52274 88408,Trzebnica,1629,DS,176,PL,51.31076,17.06331 88432,Twardogóra,1629,DS,176,PL,51.36487,17.46878 88441,Tyniec Mały,1629,DS,176,PL,51.01948,16.91998 88446,Uciechów,1629,DS,176,PL,50.75487,16.68175 88447,Udanin,1629,DS,176,PL,51.0374,16.45469 88475,Walim,1629,DS,176,PL,50.69749,16.44482 88487,Wałbrzych,1629,DS,176,PL,50.77141,16.28432 88636,Wąsosz,1629,DS,176,PL,51.56224,16.69059 88639,Węgliniec,1629,DS,176,PL,51.28753,15.22894 88556,Wiązów,1629,DS,176,PL,50.81399,17.20214 88495,Widawa-Lipa Piotrowska-Polanowice,1629,DS,176,PL,51.17093,17.02164 88521,Wierzbno,1629,DS,176,PL,50.93674,17.17961 88535,Wilczyce,1629,DS,176,PL,51.12944,17.15472 88543,Wilków,1629,DS,176,PL,51.09212,15.92824 88559,Wińsko,1629,DS,176,PL,51.47032,16.6139 88565,Wleń,1629,DS,176,PL,51.01635,15.67474 88575,Wojcieszów,1629,DS,176,PL,50.95194,15.92185 88578,Wojszyce,1629,DS,176,PL,51.05837,17.04513 88601,Wołów,1629,DS,176,PL,51.33656,16.64429 88604,Wrocław,1629,DS,176,PL,51.1081,17.03859 88739,Ząbkowice Śląskie,1629,DS,176,PL,50.58969,16.81239 88664,Zacisze,1629,DS,176,PL,51.12303,17.07465 88667,Zagrodno,1629,DS,176,PL,51.19134,15.86533 88681,Zakrzów,1629,DS,176,PL,51.16624,17.13688 88686,Zalesie i Stadion,1629,DS,176,PL,51.1197,17.09194 88878,Żarów,1629,DS,176,PL,50.94116,16.49466 88886,Żerniki Wrocławskie,1629,DS,176,PL,51.03308,17.05662 88725,Zgorzelec,1629,DS,176,PL,51.14942,15.00835 88726,Zgorzelisko,1629,DS,176,PL,51.13833,17.13365 88731,Ziębice,1629,DS,176,PL,50.60122,17.04065 88747,Złotniki,1629,DS,176,PL,51.13769,16.88923 88749,Złotoryja,1629,DS,176,PL,51.12637,15.91979 88750,Złoty Stok,1629,DS,176,PL,50.44472,16.87586 88887,Żmigród,1629,DS,176,PL,51.46672,16.90564 88902,Żórawina,1629,DS,176,PL,50.9808,17.03671 85775,Abramów,1638,LU,176,PL,51.45647,22.31521 85776,Adamów,1638,LU,176,PL,51.74335,22.26414 85779,Aleksandrów,1638,LU,176,PL,50.4663,22.89225 85786,Annopol,1638,LU,176,PL,50.88551,21.85678 85804,Baranów,1638,LU,176,PL,51.55786,22.13625 85818,Batorz,1638,LU,176,PL,50.8505,22.49313 85831,Bełżec,1638,LU,176,PL,50.38453,23.43839 85832,Bełżyce,1638,LU,176,PL,51.17415,22.28027 85836,Biała Podlaska,1638,LU,176,PL,52.03238,23.11652 85878,Biłgoraj,1638,LU,176,PL,50.54114,22.72204 85876,Biszcza,1638,LU,176,PL,50.40146,22.65063 85920,Borki,1638,LU,176,PL,51.72161,22.52129 85928,Borzechów,1638,LU,176,PL,51.09258,22.28414 85997,Bychawa,1638,LU,176,PL,51.01608,22.53296 86027,Chełm,1638,LU,176,PL,51.14312,23.4716 86045,Chodel,1638,LU,176,PL,51.11177,22.13269 86061,Chrzanów,1638,LU,176,PL,50.77256,22.60351 86097,Cyców,1638,LU,176,PL,51.29928,23.14124 86124,Czemierniki,1638,LU,176,PL,51.67298,22.63887 86248,Dęblin,1638,LU,176,PL,51.55912,21.84829 86253,Dębowa Kłoda,1638,LU,176,PL,51.59446,23.0064 86192,Dołhobyczów,1638,LU,176,PL,50.58591,24.03594 86190,Dorohusk,1638,LU,176,PL,51.15475,23.80325 86196,Drelów,1638,LU,176,PL,51.91219,22.87165 86205,Dubienka,1638,LU,176,PL,51.04862,23.89252 86232,Dzwola,1638,LU,176,PL,50.69657,22.56729 86267,Fajsławice,1638,LU,176,PL,51.09592,22.96323 86271,Firlej,1638,LU,176,PL,51.55882,22.50841 86273,Frampol,1638,LU,176,PL,50.67159,22.67061 86282,Garbów,1638,LU,176,PL,51.35517,22.32937 86320,Godziszów,1638,LU,176,PL,50.74889,22.49794 86321,Godziszów Pierwszy,1638,LU,176,PL,50.75753,22.48386 86332,Goraj,1638,LU,176,PL,50.72184,22.66651 86337,Gorzków,1638,LU,176,PL,50.94778,23.01267 86360,Gościeradów,1638,LU,176,PL,50.86859,22.00536 86365,Grabowiec,1638,LU,176,PL,50.8209,23.55057 86444,Hańsk,1638,LU,176,PL,51.41286,23.39942 86450,Horodło,1638,LU,176,PL,50.89459,24.03723 86452,Hrubieszów,1638,LU,176,PL,50.80502,23.89251 86468,Izbica,1638,LU,176,PL,50.88728,23.15248 86486,Jabłoń,1638,LU,176,PL,51.72501,23.08743 86481,Jabłonna,1638,LU,176,PL,51.08875,22.59364 86491,Jakubowice Murowane,1638,LU,176,PL,51.26992,22.63415 86503,Janów Lubelski,1638,LU,176,PL,50.70695,22.41039 86504,Janów Podlaski,1638,LU,176,PL,52.19398,23.21218 86500,Janowiec,1638,LU,176,PL,51.32359,21.8894 86506,Jarczów,1638,LU,176,PL,50.42438,23.58576 86521,Jastków,1638,LU,176,PL,51.30411,22.43546 86557,Jeziorzany,1638,LU,176,PL,51.60245,22.27667 86575,Józefów,1638,LU,176,PL,50.48119,23.05404 86577,Józefów nad Wisłą,1638,LU,176,PL,51.04183,21.83018 86603,Kamionka,1638,LU,176,PL,51.47165,22.46275 86610,Karczmiska,1638,LU,176,PL,51.22952,21.98158 86626,Kazimierz Dolny,1638,LU,176,PL,51.31911,21.95502 86863,Kłoczew,1638,LU,176,PL,51.72134,21.96493 86672,Kock,1638,LU,176,PL,51.63997,22.44391 86674,Kodeń,1638,LU,176,PL,51.91171,23.60301 86683,Komarów-Osada,1638,LU,176,PL,50.62888,23.4774 86684,Komarówka Podlaska,1638,LU,176,PL,51.80315,22.94392 86751,Końskowola,1638,LU,176,PL,51.40922,22.05175 86697,Konstantynów,1638,LU,176,PL,52.20746,23.0853 86736,Kozubszczyzna,1638,LU,176,PL,51.22323,22.42747 86776,Kraśniczyn,1638,LU,176,PL,50.93171,23.34929 86777,Kraśnik,1638,LU,176,PL,50.9236,22.22706 86770,Krasnobród,1638,LU,176,PL,50.54551,23.21308 86773,Krasnystaw,1638,LU,176,PL,50.98464,23.1742 86796,Krynice,1638,LU,176,PL,50.5876,23.38157 86802,Krzczonów,1638,LU,176,PL,51.00727,22.71097 86819,Krzywda,1638,LU,176,PL,51.79519,22.19994 86832,Księżomierz,1638,LU,176,PL,50.90855,21.98965 86833,Księżpol,1638,LU,176,PL,50.42323,22.73526 86843,Kurów,1638,LU,176,PL,51.38941,22.18637 86890,Leśna Podlaska,1638,LU,176,PL,52.13317,23.02786 86932,Lubartów,1638,LU,176,PL,51.46026,22.60952 86947,Lublin,1638,LU,176,PL,51.25,22.56667 86962,Lubycza Królewska,1638,LU,176,PL,50.34102,23.51941 86964,Ludwin,1638,LU,176,PL,51.34605,22.90581 88757,Łabunie,1638,LU,176,PL,50.65517,23.3662 88772,Łaszczów,1638,LU,176,PL,50.53332,23.72562 88773,Łaziska,1638,LU,176,PL,51.14226,21.87919 88816,Łęczna,1638,LU,176,PL,51.30121,22.88135 88784,Łomazy,1638,LU,176,PL,51.90435,23.17656 88788,Łopiennik Górny,1638,LU,176,PL,51.0408,23.01833 88805,Łuków,1638,LU,176,PL,51.929,22.37956 88803,Łukowa,1638,LU,176,PL,50.37426,22.94349 86996,Markuszów,1638,LU,176,PL,51.37457,22.25804 87014,Mełgiew,1638,LU,176,PL,51.22519,22.78414 87058,Miączyn,1638,LU,176,PL,50.73825,23.5013 87022,Michałów,1638,LU,176,PL,50.54709,23.60361 87025,Michów,1638,LU,176,PL,51.52573,22.31435 87064,Międzyrzec Podlaski,1638,LU,176,PL,51.9864,22.78248 87046,Milanów,1638,LU,176,PL,51.70374,22.8883 87049,Milejów,1638,LU,176,PL,51.23226,22.92443 87052,Mircze,1638,LU,176,PL,50.65164,23.89604 87081,Modliborzyce,1638,LU,176,PL,50.75416,22.32945 87143,Nałęczów,1638,LU,176,PL,51.28581,22.21539 87155,Niedrzwica Duża,1638,LU,176,PL,51.11462,22.38911 87157,Niedźwiada,1638,LU,176,PL,51.54409,22.6914 87161,Nielisz,1638,LU,176,PL,50.80067,23.04451 87162,Niemce,1638,LU,176,PL,51.36155,22.63939 87193,Nowodwór,1638,LU,176,PL,51.63901,22.10183 87222,Obsza,1638,LU,176,PL,50.3152,22.95688 87263,Opole Lubelskie,1638,LU,176,PL,51.14775,21.96897 87309,Ostrów Lubelski,1638,LU,176,PL,51.49416,22.85287 87313,Ostrówek,1638,LU,176,PL,51.5815,22.61227 87347,Parczew,1638,LU,176,PL,51.64021,22.90057 87370,Piaski,1638,LU,176,PL,51.13892,22.84856 87399,Piszczac,1638,LU,176,PL,51.98118,23.37719 87414,Podedwórze,1638,LU,176,PL,51.68815,23.19961 87428,Pokrówka,1638,LU,176,PL,51.09479,23.46345 87439,Poniatowa,1638,LU,176,PL,51.17983,22.13093 87452,Potok Górny,1638,LU,176,PL,50.38477,22.56188 87453,Potok Wielki,1638,LU,176,PL,50.7915,22.21642 87461,Powiat bialski,1638,LU,176,PL,51.97222,23.15328 87469,Powiat biłgorajski,1638,LU,176,PL,50.58582,22.79513 87483,Powiat chełmski,1638,LU,176,PL,51.15092,23.38165 87523,Powiat hrubieszowski,1638,LU,176,PL,50.70776,23.86307 87526,Powiat janowski,1638,LU,176,PL,50.74558,22.41147 87553,Powiat kraśnicki,1638,LU,176,PL,50.91535,22.14576 87552,Powiat krasnostawski,1638,LU,176,PL,50.98486,23.17514 87574,Powiat lubartowski,1638,LU,176,PL,51.53497,22.60585 87576,Powiat lubelski,1638,LU,176,PL,51.13419,22.46654 87755,Powiat łęczyński,1638,LU,176,PL,51.30429,22.96701 87752,Powiat łukowski,1638,LU,176,PL,51.85365,22.24035 87617,Powiat opolski,1638,LU,176,PL,51.12904,22.00944 87630,Powiat parczewski,1638,LU,176,PL,51.59982,22.99629 87650,Powiat puławski,1638,LU,176,PL,51.41853,22.03752 87659,Powiat radzyński,1638,LU,176,PL,51.78255,22.70758 87664,Powiat rycki,1638,LU,176,PL,51.66219,21.92929 87760,Powiat świdnicki,1638,LU,176,PL,51.1247,22.85397 87706,Powiat tomaszowski,1638,LU,176,PL,50.47825,23.52083 87734,Powiat włodawski,1638,LU,176,PL,51.52267,23.38279 87737,Powiat zamojski,1638,LU,176,PL,50.6916,23.21261 87832,Przytoczno,1638,LU,176,PL,51.61951,22.27135 87846,Puchaczów,1638,LU,176,PL,51.3105,22.9737 87851,Puławy,1638,LU,176,PL,51.41655,21.96939 87871,Rachanie,1638,LU,176,PL,50.53842,23.54688 87879,Radecznica,1638,LU,176,PL,50.75155,22.82976 87904,Radzyń Podlaski,1638,LU,176,PL,51.78333,22.61667 87933,Rejowiec,1638,LU,176,PL,51.09134,23.28192 87934,Rejowiec Fabryczny,1638,LU,176,PL,51.11414,23.24724 87951,Rogóźno,1638,LU,176,PL,50.46417,23.39041 87958,Rokitno,1638,LU,176,PL,52.12142,23.29514 87972,Ruda-Huta,1638,LU,176,PL,51.23666,23.59486 87978,Rudnik,1638,LU,176,PL,50.88035,22.97293 87992,Rybczewice,1638,LU,176,PL,51.02876,22.85053 88008,Ryki,1638,LU,176,PL,51.62574,21.93274 88018,Rzeczyca,1638,LU,176,PL,51.96225,22.74942 88053,Sawin,1638,LU,176,PL,51.27443,23.43375 88056,Serniki,1638,LU,176,PL,51.43716,22.65853 88058,Serokomla,1638,LU,176,PL,51.7007,22.33237 88074,Siemień,1638,LU,176,PL,51.62883,22.77243 88082,Siennica Różana,1638,LU,176,PL,51.00123,23.3226 88094,Sitno,1638,LU,176,PL,50.74944,23.3626 88106,Skierbieszów,1638,LU,176,PL,50.85158,23.35917 88335,Sławatycze,1638,LU,176,PL,51.76338,23.5546 88150,Sosnowica,1638,LU,176,PL,51.52065,23.09215 88153,Sosnówka,1638,LU,176,PL,51.75084,23.33814 88161,Spiczyn,1638,LU,176,PL,51.34128,22.75354 88197,Stary Zamość,1638,LU,176,PL,50.82004,23.17154 88244,Stężyca,1638,LU,176,PL,51.58187,21.77087 88206,Stoczek Łukowski,1638,LU,176,PL,51.96135,21.97137 88234,Strzyżowice,1638,LU,176,PL,51.0483,22.44018 88273,Sułów,1638,LU,176,PL,50.90661,22.36061 88266,Susiec,1638,LU,176,PL,50.41973,23.19626 88843,Świdnik,1638,LU,176,PL,51.21898,22.69621 88288,Szastarka,1638,LU,176,PL,50.85527,22.31971 88292,Szczebrzeszyn,1638,LU,176,PL,50.69499,22.97954 88358,Tarnawatka,1638,LU,176,PL,50.53154,23.3959 88360,Tarnogród,1638,LU,176,PL,50.3609,22.74174 88371,Telatyn,1638,LU,176,PL,50.52712,23.83956 88374,Terespol,1638,LU,176,PL,52.0755,23.61614 88375,Tereszpol,1638,LU,176,PL,50.58373,22.8798 88379,Tomaszów Lubelski,1638,LU,176,PL,50.44767,23.41616 88388,Trawniki,1638,LU,176,PL,51.13633,22.99816 88405,Trzebieszów,1638,LU,176,PL,51.99006,22.55502 88413,Trzydnik Duży,1638,LU,176,PL,50.84887,22.13359 88425,Turobin,1638,LU,176,PL,50.82367,22.74273 88443,Tyszowce,1638,LU,176,PL,50.61699,23.69927 88454,Ulhówek,1638,LU,176,PL,50.44969,23.79956 88466,Ułęż,1638,LU,176,PL,51.59195,22.10741 88459,Urszulin,1638,LU,176,PL,51.3939,23.1948 88461,Urzędów,1638,LU,176,PL,50.99323,22.1426 88468,Uścimów Stary,1638,LU,176,PL,51.46962,22.95516 88637,Wąwolnica,1638,LU,176,PL,51.29467,22.14681 88491,Werbkowice,1638,LU,176,PL,50.75373,23.76411 88540,Wilkołaz,1638,LU,176,PL,51.01473,22.35014 88541,Wilków,1638,LU,176,PL,51.26224,21.87756 88546,Wisznice,1638,LU,176,PL,51.78924,23.20836 88650,Włodawa,1638,LU,176,PL,51.55,23.55 88570,Wohyń,1638,LU,176,PL,51.75642,22.78582 88573,Wojciechów,1638,LU,176,PL,51.23543,22.24551 88574,Wojcieszków,1638,LU,176,PL,51.76922,22.31589 88579,Wojsławice,1638,LU,176,PL,50.91916,23.54602 88589,Wola Sernicka,1638,LU,176,PL,51.44978,22.68351 88590,Wola Uhruska,1638,LU,176,PL,51.32139,23.62627 88621,Wysokie,1638,LU,176,PL,50.91093,22.666 88678,Zakrzew,1638,LU,176,PL,50.89004,22.59115 88682,Zakrzówek,1638,LU,176,PL,50.95124,22.38138 88691,Zamch,1638,LU,176,PL,50.31713,23.02786 88692,Zamość,1638,LU,176,PL,50.72314,23.25196 88903,Żółkiewka,1638,LU,176,PL,50.90991,22.83465 88735,Zwierzyniec,1638,LU,176,PL,50.614,22.97512 88900,Żyrzyn,1638,LU,176,PL,51.49918,22.0917 85791,Babimost,1631,LB,176,PL,52.16488,15.82769 85880,Bledzew,1631,LB,176,PL,52.51711,15.41382 85887,Bobrowice,1631,LB,176,PL,51.9485,15.09058 85896,Bogdaniec,1631,LB,176,PL,52.68897,15.07127 85901,Bojadła,1631,LB,176,PL,51.95321,15.81036 85947,Brody,1631,LB,176,PL,51.79046,14.77335 85979,Brójce,1631,LB,176,PL,52.31745,15.67414 86004,Bytnica,1631,LB,176,PL,52.15066,15.16946 86006,Bytom Odrzański,1631,LB,176,PL,51.73062,15.82362 86096,Cybinka,1631,LB,176,PL,52.19446,14.79567 86139,Czerwieńsk,1631,LB,176,PL,52.01289,15.42317 86233,Dąbie,1631,LB,176,PL,52.01056,15.15221 86162,Deszczno,1631,LB,176,PL,52.66988,15.31975 86165,Dobiegniew,1631,LB,176,PL,52.96947,15.75362 86197,Drezdenko,1631,LB,176,PL,52.83831,15.83079 86342,Gorzów Wielkopolski,1631,LB,176,PL,52.73679,15.22878 86420,Górzyca,1631,LB,176,PL,52.49447,14.65503 86352,Gozdnica,1631,LB,176,PL,51.4363,15.09856 86404,Gubin,1631,LB,176,PL,51.94956,14.72837 86473,Iłowa,1631,LB,176,PL,51.5006,15.1998 86518,Jasień,1631,LB,176,PL,51.75142,15.01419 86553,Jenin,1631,LB,176,PL,52.69647,15.09796 86611,Kargowa,1631,LB,176,PL,52.0714,15.86138 86645,Klenica,1631,LB,176,PL,51.99217,15.78392 86864,Kłodawa,1631,LB,176,PL,52.78595,15.21452 86681,Kolsko,1631,LB,176,PL,51.96146,15.95987 86695,Konotop,1631,LB,176,PL,51.93157,15.90391 86715,Kostrzyn nad Odrą,1631,LB,176,PL,52.58713,14.64953 86760,Kożuchów,1631,LB,176,PL,51.74558,15.59492 86784,Krosno Odrzańskie,1631,LB,176,PL,52.05492,15.09882 86809,Krzeszyce,1631,LB,176,PL,52.58329,15.00707 86838,Kunice Żarskie,1631,LB,176,PL,51.59944,15.16495 86909,Lipinki Łużyckie,1631,LB,176,PL,51.63954,14.99874 86945,Lubiszyn,1631,LB,176,PL,52.78075,14.94793 86949,Lubniewice,1631,LB,176,PL,52.51638,15.25005 86958,Lubrza,1631,LB,176,PL,52.30418,15.44317 86960,Lubsko,1631,LB,176,PL,51.78467,14.97196 88761,Łagów,1631,LB,176,PL,52.33429,15.29769 88826,Łęknica,1631,LB,176,PL,51.54148,14.73584 87009,Małomice,1631,LB,176,PL,51.55597,15.45004 86999,Maszewo,1631,LB,176,PL,52.06896,14.90553 87062,Międzylesie,1631,LB,176,PL,52.14487,15.38283 87065,Międzyrzecz,1631,LB,176,PL,52.44461,15.57801 87175,Nowa Sól,1631,LB,176,PL,51.80333,15.71702 87184,Nowe Miasteczko,1631,LB,176,PL,51.69097,15.73174 87197,Nowogród Bobrzański,1631,LB,176,PL,51.79856,15.2352 87224,Ochla,1631,LB,176,PL,51.87903,15.47132 87324,Ośno Lubuskie,1631,LB,176,PL,52.4536,14.87549 87318,Otyń,1631,LB,176,PL,51.84766,15.71105 87508,Powiat gorzowski,1631,LB,176,PL,52.73863,15.08508 87556,Powiat krośnieński,1631,LB,176,PL,52.00988,14.95209 87588,Powiat międzyrzecki,1631,LB,176,PL,52.49891,15.58284 87604,Powiat nowosolski,1631,LB,176,PL,51.84218,15.72698 87698,Powiat słubicki,1631,LB,176,PL,52.32267,14.78921 87685,Powiat strzelecko-drezdenecki,1631,LB,176,PL,52.9122,15.64061 87688,Powiat sulęciński,1631,LB,176,PL,52.4285,15.04896 87762,Powiat świebodziński,1631,LB,176,PL,52.23799,15.48522 87726,Powiat wschowski,1631,LB,176,PL,51.83019,16.12096 87764,Powiat żagański,1631,LB,176,PL,51.59471,15.42253 87765,Powiat żarski,1631,LB,176,PL,51.62858,14.9617 87742,Powiat zielonogórski,1631,LB,176,PL,51.93326,15.44403 87817,Przewóz,1631,LB,176,PL,51.48053,14.95188 87822,Przyborów,1631,LB,176,PL,51.79991,15.7689 87831,Przytoczna,1631,LB,176,PL,52.57755,15.67878 87842,Pszczew,1631,LB,176,PL,52.47724,15.7816 88022,Rzepin,1631,LB,176,PL,52.3464,14.83227 88050,Santok,1631,LB,176,PL,52.73785,15.41021 88069,Siedlisko,1631,LB,176,PL,51.76864,15.81396 88079,Sieniawa,1631,LB,176,PL,52.36344,15.37768 88080,Sieniawa Żarska,1631,LB,176,PL,51.64007,15.06045 88123,Skąpe,1631,LB,176,PL,52.15292,15.45845 88120,Skwierzyna,1631,LB,176,PL,52.59914,15.50652 88334,Sława,1631,LB,176,PL,51.87623,16.07205 88344,Słońsk,1631,LB,176,PL,52.56345,14.80526 88345,Słubice,1631,LB,176,PL,52.35088,14.56065 88185,Stare Kurowo,1631,LB,176,PL,52.85669,15.67749 88227,Strzelce Krajeńskie,1631,LB,176,PL,52.87726,15.52978 88256,Sulechów,1631,LB,176,PL,52.08362,15.62513 88841,Świdnica,1631,LB,176,PL,51.88836,15.39013 88846,Świebodzin,1631,LB,176,PL,52.24751,15.53355 88289,Szczaniec,1631,LB,176,PL,52.26874,15.6817 88312,Szlichtyngowa,1631,LB,176,PL,51.71222,16.24427 88313,Szprotawa,1631,LB,176,PL,51.56563,15.53664 88385,Torzym,1631,LB,176,PL,52.31331,15.08243 88397,Trzciel,1631,LB,176,PL,52.36504,15.87306 88402,Trzebiechów,1631,LB,176,PL,52.02113,15.7362 88403,Trzebiel,1631,LB,176,PL,51.63496,14.81609 88423,Tuplice,1631,LB,176,PL,51.67639,14.82914 88552,Witnica,1631,LB,176,PL,52.67318,14.89765 88610,Wschowa,1631,LB,176,PL,51.80705,16.31663 88612,Wymiarki,1631,LB,176,PL,51.51109,15.08208 88661,Zabór,1631,LB,176,PL,51.95194,15.71676 88872,Żagań,1631,LB,176,PL,51.61759,15.31486 88877,Żary,1631,LB,176,PL,51.64205,15.13727 88714,Zbąszynek,1631,LB,176,PL,52.24315,15.81654 88728,Zielona Góra,1631,LB,176,PL,51.93768,15.51216 88736,Zwierzyń,1631,LB,176,PL,52.83212,15.56763 85780,Aleksandrów,1636,LD,176,PL,51.27126,19.99005 85782,Aleksandrów Łódzki,1636,LD,176,PL,51.81965,19.30384 85784,Andrespol,1636,LD,176,PL,51.72783,19.64175 86012,Będków,1636,LD,176,PL,51.58763,19.74956 85822,Bedlno,1636,LD,176,PL,52.20829,19.57592 85828,Bełchatów,1636,LD,176,PL,51.36883,19.35671 85837,Biała Rawska,1636,LD,176,PL,51.80779,20.47259 85838,Białaczów,1636,LD,176,PL,51.29815,20.29724 85855,Bielawy,1636,LD,176,PL,52.07539,19.65557 86014,Błaszki,1636,LD,176,PL,51.65163,18.43472 85888,Bobrowniki,1636,LD,176,PL,52.06442,20.01949 85912,Bolesławiec,1636,LD,176,PL,51.19866,18.19147 85913,Bolimów,1636,LD,176,PL,52.07671,20.16352 85980,Brąszewice,1636,LD,176,PL,51.49902,18.44982 85978,Brójce,1636,LD,176,PL,51.66436,19.64802 85964,Brzeziny,1636,LD,176,PL,51.80023,19.75144 85969,Brzeźnio,1636,LD,176,PL,51.494,18.62234 85981,Buczek,1636,LD,176,PL,51.50228,19.16419 85983,Budziszewice,1636,LD,176,PL,51.66739,19.93581 85995,Burzenin,1636,LD,176,PL,51.46077,18.83233 86072,Chąśno,1636,LD,176,PL,52.19535,19.94259 86082,Cielądz,1636,LD,176,PL,51.71576,20.34428 86114,Czarnocin,1636,LD,176,PL,51.59142,19.68158 86116,Czarnożyły,1636,LD,176,PL,51.28533,18.56106 86119,Czastary,1636,LD,176,PL,51.25869,18.31953 86135,Czerniewice,1636,LD,176,PL,51.65419,20.15553 86243,Dąbrowice,1636,LD,176,PL,52.31142,19.08437 86155,Dalików,1636,LD,176,PL,51.88476,19.11904 86160,Daszyna,1636,LD,176,PL,52.15503,19.18153 86262,Dłutów,1636,LD,176,PL,51.55936,19.39198 86163,Dmosin,1636,LD,176,PL,51.92437,19.75934 86175,Dobroń,1636,LD,176,PL,51.63885,19.24539 86184,Domaniewice,1636,LD,176,PL,52.00623,19.80294 86201,Drużbice,1636,LD,176,PL,51.46369,19.39404 86202,Drzewica,1636,LD,176,PL,51.45085,20.47701 86218,Działoszyn,1636,LD,176,PL,51.11699,18.86524 86280,Galewice,1636,LD,176,PL,51.34471,18.25756 86290,Gałków Mały,1636,LD,176,PL,51.72554,19.71359 86294,Gidle,1636,LD,176,PL,50.96199,19.47181 86430,Głowno,1636,LD,176,PL,51.96463,19.71565 86434,Głuchów,1636,LD,176,PL,51.77947,20.07666 86318,Godzianów,1636,LD,176,PL,51.89694,20.03589 86330,Gomunice,1636,LD,176,PL,51.1689,19.49335 86411,Góra Świętej Małgorzaty,1636,LD,176,PL,52.05713,19.31997 86336,Gorzkowice,1636,LD,176,PL,51.21533,19.59626 86348,Goszczanów,1636,LD,176,PL,51.79163,18.5057 86362,Grabica,1636,LD,176,PL,51.47989,19.53137 86368,Grabów,1636,LD,176,PL,52.12717,19.00257 86460,Inowłódz,1636,LD,176,PL,51.52717,20.223 86560,Jeżów,1636,LD,176,PL,51.81376,19.96877 86602,Kamieńsk,1636,LD,176,PL,51.20242,19.49661 86623,Kawęczyn Nowy,1636,LD,176,PL,51.88597,20.24703 86634,Kiernozia,1636,LD,176,PL,52.26858,19.87092 86648,Kleszczów,1636,LD,176,PL,51.22355,19.30418 86652,Klonowa,1636,LD,176,PL,51.41928,18.41815 86655,Kluki,1636,LD,176,PL,51.34187,19.23938 86671,Kocierzew Południowy,1636,LD,176,PL,52.21728,20.01812 86682,Koluszki,1636,LD,176,PL,51.73872,19.81994 86698,Konstantynów Łódzki,1636,LD,176,PL,51.74776,19.32564 86732,Kowiesy,1636,LD,176,PL,51.88942,20.41929 86790,Krośniewice,1636,LD,176,PL,52.25592,19.17037 86823,Krzyżanów,1636,LD,176,PL,52.18409,19.45619 86828,Ksawerów,1636,LD,176,PL,51.68288,19.4028 86844,Kutno,1636,LD,176,PL,52.23064,19.36409 86895,Lgota Wielka,1636,LD,176,PL,51.14904,19.32735 86905,Lipce Reymontowskie,1636,LD,176,PL,51.89863,19.94173 86950,Lubochnia,1636,LD,176,PL,51.60794,20.05391 86968,Lutomiersk,1636,LD,176,PL,51.75376,19.21097 86971,Lututów,1636,LD,176,PL,51.37033,18.4348 88764,Łanięta,1636,LD,176,PL,52.36203,19.28032 88770,Łask,1636,LD,176,PL,51.59056,19.13278 88817,Łęczyca,1636,LD,176,PL,52.05959,19.19972 88825,Łęki Szlacheckie,1636,LD,176,PL,51.18774,19.79796 88810,Łódź,1636,LD,176,PL,51.77058,19.47395 88795,Łowicz,1636,LD,176,PL,52.10714,19.94525 88799,Łubnice,1636,LD,176,PL,51.16406,18.29069 88809,Łyszkowice,1636,LD,176,PL,51.98551,19.90654 86982,Maków,1636,LD,176,PL,51.94696,20.05211 87078,Mniszków,1636,LD,176,PL,51.37017,20.03915 87089,Mokrsko,1636,LD,176,PL,51.17897,18.48879 87099,Moszczenica,1636,LD,176,PL,51.50297,19.71986 87149,Nieborów,1636,LD,176,PL,52.07771,20.06902 87189,Nowe Ostrowy,1636,LD,176,PL,52.30318,19.19217 87261,Opoczno,1636,LD,176,PL,51.37569,20.27827 87264,Oporów,1636,LD,176,PL,52.26448,19.56416 87295,Osjaków,1636,LD,176,PL,51.28946,18.79151 87303,Ostrowy,1636,LD,176,PL,52.30444,19.16565 87328,Ożarów,1636,LD,176,PL,51.14489,18.5111 87321,Ozorków,1636,LD,176,PL,51.96336,19.29139 87330,Pabianice,1636,LD,176,PL,51.66446,19.35473 87335,Pajęczno,1636,LD,176,PL,51.14449,18.99612 87345,Paradyż,1636,LD,176,PL,51.30604,20.11374 87350,Parzęczew,1636,LD,176,PL,51.94855,19.20608 87859,Pątnów,1636,LD,176,PL,51.14403,18.61659 87860,Pęczniew,1636,LD,176,PL,51.80384,18.72311 87401,Piątek,1636,LD,176,PL,52.0689,19.4797 87394,Piotrków Trybunalski,1636,LD,176,PL,51.40547,19.70321 87862,Pławno,1636,LD,176,PL,50.97772,19.45524 87412,Poddębice,1636,LD,176,PL,51.89344,18.9573 87781,Poświętne,1636,LD,176,PL,51.53203,20.36453 87460,Powiat bełchatowski,1636,LD,176,PL,51.36877,19.17791 87476,Powiat brzeziński,1636,LD,176,PL,51.84073,19.83037 87557,Powiat kutnowski,1636,LD,176,PL,52.2514,19.39706 87747,Powiat łaski,1636,LD,176,PL,51.55884,19.03824 87754,Powiat łęczycki,1636,LD,176,PL,52.10611,19.19498 87753,Powiat łódzki wschodni,1636,LD,176,PL,51.68616,19.70098 88752,powiat Łowicki,1636,LD,176,PL,52.10627,19.94606 87616,Powiat opoczyński,1636,LD,176,PL,51.39265,20.1943 87628,Powiat pabianicki,1636,LD,176,PL,51.67743,19.23782 87629,Powiat pajęczański,1636,LD,176,PL,51.14121,19.02749 87633,Powiat piotrkowski,1636,LD,176,PL,51.37816,19.7396 87637,Powiat poddębicki,1636,LD,176,PL,51.89837,18.92132 87657,Powiat radomszczański,1636,LD,176,PL,51.06463,19.63038 87661,Powiat rawski,1636,LD,176,PL,51.76228,20.3853 87672,Powiat sieradzki,1636,LD,176,PL,51.60297,18.60309 87675,Powiat skierniewicki,1636,LD,176,PL,51.94493,20.19367 87707,Powiat tomaszowski,1636,LD,176,PL,51.59667,20.06638 87718,Powiat wieluński,1636,LD,176,PL,51.23261,18.63033 87719,Powiat wieruszowski,1636,LD,176,PL,51.29415,18.31854 87739,Powiat zduńskowolski,1636,LD,176,PL,51.6204,18.95085 87740,Powiat zgierski,1636,LD,176,PL,51.9041,19.48024 87806,Przedbórz,1636,LD,176,PL,51.08789,19.87384 87886,Radomsko,1636,LD,176,PL,51.06713,19.44477 87918,Rawa Mazowiecka,1636,LD,176,PL,51.76437,20.25493 88037,Ręczno,1636,LD,176,PL,51.19026,19.85375 87923,Regnów,1636,LD,176,PL,51.7485,20.38711 87949,Rogów,1636,LD,176,PL,51.81758,19.88654 87954,Rokiciny,1636,LD,176,PL,51.65078,19.80191 87955,Rokiciny-Kolonia,1636,LD,176,PL,51.66468,19.78312 87966,Rozprza,1636,LD,176,PL,51.30266,19.6457 87987,Rusiec,1636,LD,176,PL,51.32444,18.98506 88017,Rzeczyca,1636,LD,176,PL,51.59824,20.29484 88027,Rzgów,1636,LD,176,PL,51.66345,19.49181 88041,Sadkowice,1636,LD,176,PL,51.72517,20.51465 88327,Sędziejowice,1636,LD,176,PL,51.50677,19.02763 88076,Siemkowice,1636,LD,176,PL,51.20194,18.8988 88085,Sieradz,1636,LD,176,PL,51.59584,18.73023 88107,Skierniewice,1636,LD,176,PL,51.95485,20.15837 88111,Skomlin,1636,LD,176,PL,51.17089,18.38699 88338,Sławno,1636,LD,176,PL,51.39273,20.14043 88349,Słupia,1636,LD,176,PL,51.85518,19.96997 88137,Sokolniki,1636,LD,176,PL,51.30738,18.33275 88192,Starowa Góra,1636,LD,176,PL,51.69134,19.48374 88219,Stryków,1636,LD,176,PL,51.90224,19.60536 88226,Strzelce,1636,LD,176,PL,52.31478,19.40701 88229,Strzelce Wielkie,1636,LD,176,PL,51.1394,19.14539 88257,Sulejów,1636,LD,176,PL,51.35436,19.88538 88261,Sulmierzyce,1636,LD,176,PL,51.18456,19.19595 88860,Świnice Warckie,1636,LD,176,PL,52.04072,18.91786 88283,Szadek,1636,LD,176,PL,51.69174,18.97549 88298,Szczerców,1636,LD,176,PL,51.33319,19.10977 88380,Tomaszów Mazowiecki,1636,LD,176,PL,51.53131,20.00855 88429,Tuszyn,1636,LD,176,PL,51.60949,19.53009 88449,Ujazd,1636,LD,176,PL,51.59781,19.92225 88455,Uniejów,1636,LD,176,PL,51.97428,18.79308 88474,Walichnowy,1636,LD,176,PL,51.29579,18.38073 88482,Warta,1636,LD,176,PL,51.71049,18.62483 88483,Wartkowice,1636,LD,176,PL,51.97626,19.0018 88494,Widawa,1636,LD,176,PL,51.43855,18.94421 88511,Wieluń,1636,LD,176,PL,51.22097,18.56964 88515,Wieruszów,1636,LD,176,PL,51.29488,18.15547 88522,Wierzchlas,1636,LD,176,PL,51.20457,18.66543 88553,Witonia,1636,LD,176,PL,52.14655,19.30049 88567,Wodzierady,1636,LD,176,PL,51.71826,19.15123 88586,Wola Krzysztoporska,1636,LD,176,PL,51.34418,19.5809 88595,Wolbórz,1636,LD,176,PL,51.50196,19.83049 88608,Wróblew,1636,LD,176,PL,51.61215,18.61487 88665,Zadzim,1636,LD,176,PL,51.77666,18.84928 88694,Zapolice,1636,LD,176,PL,51.54319,18.88335 88876,Żarnów,1636,LD,176,PL,51.24607,20.17476 88717,Zduńska Wola,1636,LD,176,PL,51.59915,18.93974 88881,Żelechlinek,1636,LD,176,PL,51.71214,20.0346 88722,Zelów,1636,LD,176,PL,51.46452,19.21972 88724,Zgierz,1636,LD,176,PL,51.85561,19.40623 88743,Złoczew,1636,LD,176,PL,51.41719,18.60363 88897,Żychlin,1636,LD,176,PL,52.24404,19.62613 85793,Baboszewo,1637,MZ,176,PL,52.6807,20.25527 85801,Baniocha,1637,MZ,176,PL,52.01653,21.13984 85802,Baranowo,1637,MZ,176,PL,53.17554,21.29803 85824,Bemowo,1637,MZ,176,PL,52.2546,20.90844 85834,Biała,1637,MZ,176,PL,52.60524,19.64956 85843,Białobrzegi,1637,MZ,176,PL,51.64695,20.95041 85846,Białołeka,1637,MZ,176,PL,52.32127,20.97204 85852,Bielany,1637,MZ,176,PL,52.29242,20.93531 85859,Bielsk,1637,MZ,176,PL,52.6718,19.805 85863,Bieniewice,1637,MZ,176,PL,52.18268,20.56306 85870,Bieżuń,1637,MZ,176,PL,52.96107,19.88976 86017,Błędów,1637,MZ,176,PL,51.77767,20.69798 86016,Błonie,1637,MZ,176,PL,52.19849,20.61709 85893,Bodzanów,1637,MZ,176,PL,52.49992,20.02945 85900,Boguty-Pianki,1637,MZ,176,PL,52.7168,22.41546 85921,Borkowice,1637,MZ,176,PL,51.32025,20.68339 85925,Borowie,1637,MZ,176,PL,51.94908,21.7658 85938,Brańszczyk,1637,MZ,176,PL,52.62931,21.58745 85942,Brochów,1637,MZ,176,PL,52.3195,20.26257 85948,Brody-Parcele,1637,MZ,176,PL,52.47797,20.74974 85951,Brok,1637,MZ,176,PL,52.69948,21.85704 85955,Brudzeń Duży,1637,MZ,176,PL,52.66884,19.50399 85957,Brwinów,1637,MZ,176,PL,52.14269,20.71697 85993,Bulkowo,1637,MZ,176,PL,52.54087,20.11889 86020,Cegłów,1637,MZ,176,PL,52.14782,21.73739 86022,Celestynów,1637,MZ,176,PL,52.06093,21.39107 86023,Ceranów,1637,MZ,176,PL,52.63082,22.22826 86033,Chlewiska,1637,MZ,176,PL,51.24376,20.76871 86054,Chorzele,1637,MZ,176,PL,53.26075,20.89728 86057,Chotcza,1637,MZ,176,PL,51.24043,21.77662 86070,Chynów,1637,MZ,176,PL,51.90425,21.08208 86077,Ciechanów,1637,MZ,176,PL,52.88141,20.61996 86083,Ciepielów,1637,MZ,176,PL,51.24838,21.57475 86110,Czarnia,1637,MZ,176,PL,53.35614,21.1952 86131,Czernice Borowe,1637,MZ,176,PL,53.03197,20.71944 86140,Czerwin,1637,MZ,176,PL,52.94905,21.75842 86142,Czerwińsk Nad Wisłą,1637,MZ,176,PL,52.39828,20.3096 86144,Czerwonka,1637,MZ,176,PL,52.89254,21.21494 86244,Dąbrówka,1637,MZ,176,PL,52.48388,21.29794 86246,Dębe Wielkie,1637,MZ,176,PL,52.19961,21.44334 86260,Długosiodło,1637,MZ,176,PL,52.75998,21.59183 86170,Dobre,1637,MZ,176,PL,52.32097,21.67881 86183,Domanice,1637,MZ,176,PL,52.03739,22.17642 86198,Drobin,1637,MZ,176,PL,52.73775,19.98928 86206,Duczki,1637,MZ,176,PL,52.36271,21.29047 86219,Dziekanów Leśny,1637,MZ,176,PL,52.35243,20.85124 86224,Dzierzążnia,1637,MZ,176,PL,52.62811,20.23364 86222,Dzierzgowo,1637,MZ,176,PL,53.15279,20.66322 86422,Gąbin,1637,MZ,176,PL,52.39849,19.73509 86281,Garbatka-Letnisko,1637,MZ,176,PL,51.4832,21.61079 86286,Garwolin,1637,MZ,176,PL,51.89747,21.61466 86425,Gąsocin,1637,MZ,176,PL,52.73754,20.7118 86297,Gielniów,1637,MZ,176,PL,51.40076,20.48126 86306,Glinojeck,1637,MZ,176,PL,52.81983,20.29198 86358,Gołymin-Ośrodek,1637,MZ,176,PL,52.808,20.87325 86410,Góra Kalwaria,1637,MZ,176,PL,51.97653,21.21537 86418,Górzno,1637,MZ,176,PL,51.84681,21.70933 86345,Gostynin,1637,MZ,176,PL,52.42938,19.46194 86349,Goszczyn,1637,MZ,176,PL,51.73187,20.85154 86351,Goworowo,1637,MZ,176,PL,52.90083,21.55578 86421,Gózd,1637,MZ,176,PL,51.37832,21.37914 86353,Gozdowo,1637,MZ,176,PL,52.72455,19.68501 86371,Granica,1637,MZ,176,PL,52.13359,20.80313 86400,Grębków,1637,MZ,176,PL,52.26931,21.90974 86375,Grodzisk Mazowiecki,1637,MZ,176,PL,52.10387,20.6337 86399,Grójec,1637,MZ,176,PL,51.86252,20.86757 86385,Grudusk,1637,MZ,176,PL,53.05845,20.62494 86405,Guzów,1637,MZ,176,PL,52.11626,20.33672 86407,Gzy,1637,MZ,176,PL,52.74045,20.94372 86440,Halinów,1637,MZ,176,PL,52.2288,21.3551 86449,Hornówek,1637,MZ,176,PL,52.28638,20.80793 86475,Iłów,1637,MZ,176,PL,52.33953,20.0273 86476,Iłża,1637,MZ,176,PL,51.16313,21.23979 86467,Izabelin,1637,MZ,176,PL,52.29992,20.81729 86482,Jabłonna,1637,MZ,176,PL,52.37885,20.91745 86484,Jabłonna Lacka,1637,MZ,176,PL,52.47664,22.44228 86489,Jadów,1637,MZ,176,PL,52.47849,21.63199 86492,Jakubów,1637,MZ,176,PL,52.21965,21.68032 86512,Jasienica,1637,MZ,176,PL,52.41415,21.4115 86516,Jasieniec,1637,MZ,176,PL,51.82104,20.94099 86523,Jastrząb,1637,MZ,176,PL,51.24725,20.94758 86525,Jastrzębia,1637,MZ,176,PL,51.49742,21.23709 86542,Jedlińsk,1637,MZ,176,PL,51.514,21.11577 86543,Jedlnia-Letnisko,1637,MZ,176,PL,51.43074,21.33536 86544,Jednorożec,1637,MZ,176,PL,53.14116,21.05161 86566,Joniec,1637,MZ,176,PL,52.60128,20.58177 86574,Józefosław,1637,MZ,176,PL,52.1005,21.04629 86576,Józefów,1637,MZ,176,PL,52.13707,21.23589 86579,Kabaty,1637,MZ,176,PL,52.13012,21.08148 86582,Kadzidło,1637,MZ,176,PL,53.23435,21.46454 86628,Kałuszyn,1637,MZ,176,PL,52.20669,21.80838 86605,Kampinos,1637,MZ,176,PL,52.26837,20.46307 86609,Karczew,1637,MZ,176,PL,52.07655,21.24962 86614,Karniewo,1637,MZ,176,PL,52.837,20.98886 86624,Kazanów,1637,MZ,176,PL,51.27593,21.46737 86637,Kiełpin,1637,MZ,176,PL,52.35796,20.86214 86644,Klembów,1637,MZ,176,PL,52.4065,21.33176 86657,Klwów,1637,MZ,176,PL,51.53448,20.63644 86669,Kobyłka,1637,MZ,176,PL,52.33953,21.19589 86743,Kołbiel,1637,MZ,176,PL,52.06431,21.48153 86687,Komorów,1637,MZ,176,PL,52.1456,20.81566 86696,Konstancin-Jeziorna,1637,MZ,176,PL,52.0938,21.11761 86701,Korczew,1637,MZ,176,PL,52.35327,22.61338 86708,Korytnica,1637,MZ,176,PL,52.41441,21.84949 86721,Kosów Lacki,1637,MZ,176,PL,52.59541,22.14707 86724,Kotuń,1637,MZ,176,PL,52.17643,22.06819 86726,Kowala,1637,MZ,176,PL,51.32503,21.06972 86735,Kozienice,1637,MZ,176,PL,51.58294,21.54779 86768,Krasne,1637,MZ,176,PL,52.92401,20.96732 86772,Krasnosielc,1637,MZ,176,PL,53.03378,21.15735 86815,Krzynowłoga Mała,1637,MZ,176,PL,53.15773,20.78579 86834,Kuczbork-Osada,1637,MZ,176,PL,53.08619,20.04782 86874,Latowicz,1637,MZ,176,PL,52.02636,21.80829 86876,Legionowo,1637,MZ,176,PL,52.40149,20.92664 86882,Leszno,1637,MZ,176,PL,52.25799,20.59121 86884,Lesznowola,1637,MZ,176,PL,52.09095,20.93479 86920,Lipowiec Kościelny,1637,MZ,176,PL,53.10459,20.17639 86922,Lipsko,1637,MZ,176,PL,51.15954,21.64933 86955,Lubowidz,1637,MZ,176,PL,53.11865,19.84594 86967,Lutocin,1637,MZ,176,PL,52.98152,19.76655 88811,Łąck,1637,MZ,176,PL,52.46621,19.61137 88762,Łajski,1637,MZ,176,PL,52.42873,20.94946 88771,Łaskarzew,1637,MZ,176,PL,51.78993,21.59122 88782,Łochów,1637,MZ,176,PL,52.53076,21.68158 88785,Łomianki,1637,MZ,176,PL,52.33413,20.88602 88792,Łosice,1637,MZ,176,PL,52.21129,22.71801 88807,Łyse,1637,MZ,176,PL,53.36443,21.56487 86980,Maciejowice,1637,MZ,176,PL,51.69222,21.55342 86983,Maków Mazowiecki,1637,MZ,176,PL,52.86493,21.10053 87005,Mała Wieś,1637,MZ,176,PL,52.45779,20.10223 87007,Małkinia Górna,1637,MZ,176,PL,52.6922,22.02836 86994,Marki,1637,MZ,176,PL,52.32065,21.10474 87001,Maszewo Duże,1637,MZ,176,PL,52.58026,19.62905 87018,Miastków Kościelny,1637,MZ,176,PL,51.88407,21.82528 87024,Michałów-Reginów,1637,MZ,176,PL,52.41711,20.96595 87019,Michałowice,1637,MZ,176,PL,52.17435,20.88089 87030,Miedzna,1637,MZ,176,PL,52.46778,22.08947 87069,Miętne,1637,MZ,176,PL,51.92135,21.57457 87047,Milanówek,1637,MZ,176,PL,52.11879,20.67155 87075,Mińsk Mazowiecki,1637,MZ,176,PL,52.17935,21.57251 87127,Mława,1637,MZ,176,PL,53.11278,20.3841 87128,Młodzieszyn,1637,MZ,176,PL,52.29945,20.20017 87130,Młynarze,1637,MZ,176,PL,52.95417,21.41141 87080,Mochowo,1637,MZ,176,PL,52.7657,19.55592 87084,Mogielnica,1637,MZ,176,PL,51.69432,20.72227 87087,Mokobody,1637,MZ,176,PL,52.26523,22.11182 87088,Mokotów,1637,MZ,176,PL,52.1934,21.03487 87091,Mordy,1637,MZ,176,PL,52.2116,22.51725 87102,Mrozy,1637,MZ,176,PL,52.01975,20.36702 87111,Mszczonów,1637,MZ,176,PL,51.97415,20.52083 87117,Mysiadło,1637,MZ,176,PL,52.10216,21.01856 87119,Myszyniec,1637,MZ,176,PL,53.38055,21.34961 87131,Nadarzyn,1637,MZ,176,PL,52.09438,20.80776 87140,Naruszewo,1637,MZ,176,PL,52.52687,20.35157 87141,Nasielsk,1637,MZ,176,PL,52.58887,20.80553 87166,Nieporęt,1637,MZ,176,PL,52.43152,21.03212 87182,Nowe Grocholice,1637,MZ,176,PL,52.15924,20.9111 87183,Nowe Lipiny,1637,MZ,176,PL,52.35789,21.27125 87185,Nowe Miasto,1637,MZ,176,PL,52.65691,20.62838 87187,Nowe Miasto nad Pilicą,1637,MZ,176,PL,51.61812,20.57619 87201,Nowy Duninów,1637,MZ,176,PL,52.58271,19.47996 87203,Nowy Dwór Mazowiecki,1637,MZ,176,PL,52.43022,20.71652 87212,Nur,1637,MZ,176,PL,52.66826,22.32207 87220,Obryte,1637,MZ,176,PL,52.71633,21.24945 87226,Ochota,1637,MZ,176,PL,52.22096,20.98526 87230,Odrzywół,1637,MZ,176,PL,51.51953,20.55559 87232,Ojrzeń,1637,MZ,176,PL,52.7657,20.54315 87260,Opinogóra Górna,1637,MZ,176,PL,52.90554,20.71781 87270,Orońsko,1637,MZ,176,PL,51.31339,20.99067 87277,Osieck,1637,MZ,176,PL,51.96653,21.41913 87305,Ostrołęka,1637,MZ,176,PL,53.08621,21.57566 87310,Ostrów Mazowiecka,1637,MZ,176,PL,52.80245,21.89507 87312,Ostrówek,1637,MZ,176,PL,52.5535,21.76014 87316,Otrębusy,1637,MZ,176,PL,52.12843,20.76073 87317,Otwock,1637,MZ,176,PL,52.10577,21.26129 87319,Owczarnia,1637,MZ,176,PL,52.11114,20.70468 87329,Ożarów Mazowiecki,1637,MZ,176,PL,52.21039,20.79716 87332,Pacyna,1637,MZ,176,PL,52.30281,19.70982 87344,Paprotnia,1637,MZ,176,PL,52.20513,20.4232 87349,Parysów,1637,MZ,176,PL,51.97584,21.68006 87368,Piaseczno,1637,MZ,176,PL,52.0814,21.02397 87372,Piastów,1637,MZ,176,PL,52.18435,20.83952 87387,Pilawa,1637,MZ,176,PL,51.95945,21.53089 87392,Pionki,1637,MZ,176,PL,51.47604,21.44995 87864,Płock,1637,MZ,176,PL,52.54682,19.70638 87865,Płoniawy-Bramura,1637,MZ,176,PL,52.9778,21.07178 87867,Płońsk,1637,MZ,176,PL,52.62348,20.37552 87413,Podebłocie,1637,MZ,176,PL,51.64023,21.7442 87417,Podkowa Leśna,1637,MZ,176,PL,52.12237,20.72665 87427,Pokrzywnica,1637,MZ,176,PL,52.62072,21.01925 87435,Policzna,1637,MZ,176,PL,51.45545,21.62684 87438,Pomiechówek,1637,MZ,176,PL,52.47138,20.72923 87780,Poświętne,1637,MZ,176,PL,52.32967,21.42137 87455,Potworów,1637,MZ,176,PL,51.50874,20.72176 87462,Powiat białobrzeski,1637,MZ,176,PL,51.62102,20.94328 87488,Powiat ciechanowski,1637,MZ,176,PL,52.90207,20.57631 87500,Powiat garwoliński,1637,MZ,176,PL,51.82657,21.61615 87509,Powiat gostyniński,1637,MZ,176,PL,52.38988,19.62187 87513,Powiat grodziski,1637,MZ,176,PL,52.06391,20.59408 87518,Powiat grójecki,1637,MZ,176,PL,51.75742,20.83661 87546,Powiat kozienicki,1637,MZ,176,PL,51.63946,21.4958 87564,Powiat legionowski,1637,MZ,176,PL,52.45179,20.94356 87572,Powiat lipski,1637,MZ,176,PL,51.15879,21.56753 87751,Powiat łosicki,1637,MZ,176,PL,52.22363,22.8451 87581,Powiat makowski,1637,MZ,176,PL,52.9477,21.1795 87589,Powiat miński,1637,MZ,176,PL,52.18429,21.60893 87596,Powiat mławski,1637,MZ,176,PL,53.05496,20.37708 87601,Powiat nowodworski,1637,MZ,176,PL,52.46585,20.66405 87622,Powiat ostrołęcki,1637,MZ,176,PL,53.14001,21.50699 87620,Powiat ostrowski,1637,MZ,176,PL,52.79495,22.0325 87625,Powiat otwocki,1637,MZ,176,PL,52.04898,21.37251 87631,Powiat piaseczyński,1637,MZ,176,PL,52.01634,20.98319 87653,Powiat płocki,1637,MZ,176,PL,52.55465,19.7857 87654,Powiat płoński,1637,MZ,176,PL,52.63894,20.3471 87643,Powiat pruszkowski,1637,MZ,176,PL,52.10088,20.80992 87644,Powiat przasnyski,1637,MZ,176,PL,53.1136,20.9394 87647,Powiat przysuski,1637,MZ,176,PL,51.42366,20.65098 87651,Powiat pułtuski,1637,MZ,176,PL,52.67207,21.02401 87656,Powiat radomski,1637,MZ,176,PL,51.33582,21.16193 87670,Powiat siedlecki,1637,MZ,176,PL,52.19186,22.30406 87673,Powiat sierpecki,1637,MZ,176,PL,52.83353,19.71216 87676,Powiat sochaczewski,1637,MZ,176,PL,52.26689,20.21338 87677,Powiat sokołowski,1637,MZ,176,PL,52.49538,22.26897 87695,Powiat szydłowiecki,1637,MZ,176,PL,51.256,20.84256 87713,Powiat warszawski zachodni,1637,MZ,176,PL,52.26838,20.61913 87732,Powiat węgrowski,1637,MZ,176,PL,52.45628,21.87342 87722,Powiat wołomiński,1637,MZ,176,PL,52.40616,21.40121 87728,Powiat wyszkowski,1637,MZ,176,PL,52.65137,21.44537 87767,Powiat żuromiński,1637,MZ,176,PL,53.01658,19.89102 87743,Powiat zwoleński,1637,MZ,176,PL,51.36079,21.59279 87768,Powiat żyrardowski,1637,MZ,176,PL,52.00028,20.43275 87786,Praga Północ,1637,MZ,176,PL,52.25443,21.03472 87785,Praga Południe,1637,MZ,176,PL,52.24424,21.08545 87788,Prażmów,1637,MZ,176,PL,51.9404,20.95479 87790,Promna,1637,MZ,176,PL,51.68006,20.95917 87799,Pruszków,1637,MZ,176,PL,52.17072,20.81214 87800,Przasnysz,1637,MZ,176,PL,53.01907,20.88029 87814,Przesmyki,1637,MZ,176,PL,52.26816,22.58394 87835,Przyłęk,1637,MZ,176,PL,51.30856,21.74744 87828,Przysucha,1637,MZ,176,PL,51.35858,20.62889 87833,Przytyk,1637,MZ,176,PL,51.46567,20.90587 87852,Pułtusk,1637,MZ,176,PL,52.7025,21.08276 87849,Puszcza Mariańska,1637,MZ,176,PL,51.97901,20.35037 87873,Raciąż,1637,MZ,176,PL,52.78152,20.1177 87884,Radom,1637,MZ,176,PL,51.40253,21.14714 87895,Radzanów,1637,MZ,176,PL,52.94238,20.09219 87894,Radzanowo,1637,MZ,176,PL,52.57306,19.89109 87897,Radziejowice,1637,MZ,176,PL,52.00834,20.5477 87902,Radzymin,1637,MZ,176,PL,52.41592,21.18415 87916,Raszyn,1637,MZ,176,PL,52.15603,20.9226 87922,Regimin,1637,MZ,176,PL,52.94166,20.55319 87936,Rembertów,1637,MZ,176,PL,52.26059,21.16355 87937,Repki,1637,MZ,176,PL,52.38555,22.39117 87968,Rościszewo,1637,MZ,176,PL,52.90331,19.77419 88033,Różan,1637,MZ,176,PL,52.88757,21.39105 87988,Rusinów,1637,MZ,176,PL,51.43678,20.58701 87993,Rybie,1637,MZ,176,PL,52.15229,20.93655 87995,Rybno,1637,MZ,176,PL,52.24278,20.10301 88001,Ryczywół,1637,MZ,176,PL,51.69118,21.42197 88032,Rząśnik,1637,MZ,176,PL,52.71332,21.36772 88016,Rzeczniów,1637,MZ,176,PL,51.12804,21.44008 88019,Rzekuń,1637,MZ,176,PL,53.04756,21.62069 88025,Rzewnie,1637,MZ,176,PL,52.83508,21.33682 88039,Sabnie,1637,MZ,176,PL,52.50097,22.30697 88044,Sadowne,1637,MZ,176,PL,52.64124,21.84563 88048,Sanniki,1637,MZ,176,PL,52.33046,19.86766 88051,Sarnaki,1637,MZ,176,PL,52.31504,22.89044 88057,Serock,1637,MZ,176,PL,52.51036,21.0691 88064,Siedlce,1637,MZ,176,PL,52.16772,22.29006 88075,Siemiątkowo,1637,MZ,176,PL,52.8811,20.02893 88081,Siennica,1637,MZ,176,PL,52.09164,21.61921 88083,Sienno,1637,MZ,176,PL,51.08773,21.48325 88091,Sierpc,1637,MZ,176,PL,52.8568,19.66913 88099,Skaryszew,1637,MZ,176,PL,51.31075,21.25233 88122,Skórzec,1637,MZ,176,PL,52.10727,22.13052 88346,Słubice,1637,MZ,176,PL,52.36942,19.93881 88352,Słupno,1637,MZ,176,PL,52.38409,21.15572 88130,Sobienie Jeziory,1637,MZ,176,PL,51.93273,21.30335 88132,Sobolew,1637,MZ,176,PL,51.7366,21.66349 88134,Sochaczew,1637,MZ,176,PL,52.22944,20.23838 88135,Sochocin,1637,MZ,176,PL,52.68715,20.47259 88140,Sokołów Podlaski,1637,MZ,176,PL,52.40677,22.25307 88143,Solec Nad Wisłą,1637,MZ,176,PL,51.13633,21.76563 88156,Sońsk,1637,MZ,176,PL,52.78164,20.69901 88840,Śródmieście,1637,MZ,176,PL,52.22904,21.01644 88169,Stanisławów,1637,MZ,176,PL,52.28937,21.54848 88170,Stanisławów Pierwszy,1637,MZ,176,PL,52.37485,21.05184 88173,Stara Błotnica,1637,MZ,176,PL,51.54676,20.97479 88177,Stara Kornica,1637,MZ,176,PL,52.18183,22.93752 88181,Stare Babice,1637,MZ,176,PL,52.26028,20.83403 88193,Staroźreby,1637,MZ,176,PL,52.63265,19.9855 88204,Sterdyń,1637,MZ,176,PL,52.58026,22.29358 88205,Stoczek,1637,MZ,176,PL,52.54332,21.90013 88211,Strachówka,1637,MZ,176,PL,52.42692,21.635 88215,Stromiec,1637,MZ,176,PL,51.647,21.09229 88225,Strzegowo,1637,MZ,176,PL,52.89394,20.28548 88241,Stupsk,1637,MZ,176,PL,53.02258,20.4368 88247,Sucha,1637,MZ,176,PL,51.61999,20.94887 88252,Suchożebry,1637,MZ,176,PL,52.25948,22.25289 88255,Sulbiny Górne,1637,MZ,176,PL,51.87321,21.63174 88258,Sulejówek,1637,MZ,176,PL,52.25221,21.26902 88270,Sułkowice,1637,MZ,176,PL,51.9231,21.08929 88852,Świercze,1637,MZ,176,PL,52.67055,20.7639 88279,Sypniewo,1637,MZ,176,PL,53.0058,21.3073 88302,Szczutowo,1637,MZ,176,PL,52.94047,19.57438 88306,Szelków,1637,MZ,176,PL,52.83487,21.21769 88314,Szreńsk,1637,MZ,176,PL,53.01277,20.12009 88319,Szydłowiec,1637,MZ,176,PL,51.22823,20.86106 88320,Szydłowo,1637,MZ,176,PL,53.08062,20.45071 88354,Tarczyn,1637,MZ,176,PL,51.98197,20.83394 88357,Targówek,1637,MZ,176,PL,52.29185,21.04845 88370,Tczów,1637,MZ,176,PL,51.326,21.44677 88373,Teresin,1637,MZ,176,PL,52.19887,20.41672 88445,Tłuszcz,1637,MZ,176,PL,52.43058,21.43561 88415,Trąbki,1637,MZ,176,PL,51.94792,21.59929 88387,Trablice,1637,MZ,176,PL,51.35249,21.12877 88389,Trojanów,1637,MZ,176,PL,51.69225,21.81112 88390,Troszyn,1637,MZ,176,PL,53.03115,21.73083 88391,Truskaw,1637,MZ,176,PL,52.30124,20.78244 88457,Ursus,1637,MZ,176,PL,52.19517,20.88419 88458,Ursynów,1637,MZ,176,PL,52.15051,21.05041 88477,Warka,1637,MZ,176,PL,51.7843,21.19091 88480,Warsaw,1637,MZ,176,PL,52.22977,21.01178 88481,Warszawa,1637,MZ,176,PL,52.23547,21.04191 88485,Wawer,1637,MZ,176,PL,52.19656,21.17752 88645,Węgrów,1637,MZ,176,PL,52.39954,22.01634 88493,Wesoła,1637,MZ,176,PL,52.25451,21.22407 88497,Wieczfnia Kościelna,1637,MZ,176,PL,53.19534,20.47637 88503,Wieliszew,1637,MZ,176,PL,52.4513,20.96827 88512,Wieniawa,1637,MZ,176,PL,51.36171,20.79489 88517,Wierzbica,1637,MZ,176,PL,51.2494,21.08259 88520,Wierzbno,1637,MZ,176,PL,52.31008,21.85902 88531,Wilanów,1637,MZ,176,PL,52.16311,21.08748 88537,Wilga,1637,MZ,176,PL,51.85211,21.37751 88544,Winnica,1637,MZ,176,PL,52.64306,20.94114 88545,Wiskitki,1637,MZ,176,PL,52.08831,20.38708 88561,Wiśniew,1637,MZ,176,PL,52.07265,22.29392 88562,Wiśniewo,1637,MZ,176,PL,53.06474,20.34805 88648,Włochy,1637,MZ,176,PL,52.17941,20.94612 88566,Wodynie,1637,MZ,176,PL,52.0404,21.95575 88580,Wola,1637,MZ,176,PL,52.2401,20.98869 88588,Wola Rębkowska,1637,MZ,176,PL,51.90181,21.55818 88593,Wolanów,1637,MZ,176,PL,51.3803,20.97702 88599,Wołomin,1637,MZ,176,PL,52.34006,21.24207 88626,Wyśmierzyce,1637,MZ,176,PL,51.62494,20.81394 88624,Wyszków,1637,MZ,176,PL,52.59278,21.4584 88625,Wyszogród,1637,MZ,176,PL,52.38988,20.19081 88868,Żabia Wola,1637,MZ,176,PL,52.03169,20.69112 88869,Żabieniec,1637,MZ,176,PL,52.05856,21.04817 88738,Ząbki,1637,MZ,176,PL,52.29271,21.10539 88676,Zakroczym,1637,MZ,176,PL,52.43351,20.61207 88677,Zakrzew,1637,MZ,176,PL,51.44095,21.00105 88685,Zalesie Górne,1637,MZ,176,PL,52.02768,21.03659 88707,Załuski,1637,MZ,176,PL,52.51152,20.52864 88700,Zatory,1637,MZ,176,PL,52.59929,21.18258 88703,Zawidz,1637,MZ,176,PL,52.82745,19.87367 88710,Zbuczyn,1637,MZ,176,PL,52.08974,22.43829 88882,Żelechów,1637,MZ,176,PL,51.81051,21.89721 88729,Zielonka,1637,MZ,176,PL,52.30376,21.16018 88889,Żoliborz,1637,MZ,176,PL,52.26896,20.98644 88895,Żuromin,1637,MZ,176,PL,53.06611,19.90894 88737,Zwoleń,1637,MZ,176,PL,51.35542,21.58768 88899,Żyrardów,1637,MZ,176,PL,52.0488,20.44599 85792,Baborów,1622,OP,176,PL,50.1576,17.98513 85833,Biała,1622,OP,176,PL,50.38587,17.66035 85864,Bierawa,1622,OP,176,PL,50.28111,18.24177 85865,Bierdzany,1622,OP,176,PL,50.81852,18.15808 85935,Branice,1622,OP,176,PL,50.05108,17.79399 85958,Brzeg,1622,OP,176,PL,50.86079,17.4674 85998,Byczyna,1622,OP,176,PL,51.11387,18.21413 86037,Chmielowice,1622,OP,176,PL,50.64957,17.86669 86065,Chróścice,1622,OP,176,PL,50.78076,17.81227 86059,Chrościna,1622,OP,176,PL,50.66578,17.81759 86064,Chrząstowice,1622,OP,176,PL,50.66622,18.07294 86089,Cisek,1622,OP,176,PL,50.28232,18.19988 86115,Czarnowąsy,1622,OP,176,PL,50.72858,17.89819 86236,Dąbrowa,1622,OP,176,PL,50.68352,17.74957 86153,Dalachów,1622,OP,176,PL,51.07732,18.5784 86259,Długomiłowice,1622,OP,176,PL,50.28298,18.14873 86173,Dobrodzień,1622,OP,176,PL,50.72874,18.44501 86177,Dobrzeń Wielki,1622,OP,176,PL,50.76844,17.84652 86187,Domaszowice,1622,OP,176,PL,51.0429,17.88875 86221,Dziergowice,1622,OP,176,PL,50.24248,18.28606 86429,Głogówek,1622,OP,176,PL,50.35355,17.86405 86431,Głubczyce,1622,OP,176,PL,50.20086,17.82858 86432,Głuchołazy,1622,OP,176,PL,50.31505,17.38355 86323,Gogolin,1622,OP,176,PL,50.49222,18.01994 86412,Górażdże,1622,OP,176,PL,50.52903,18.01003 86343,Gorzów Śląski,1622,OP,176,PL,51.02871,18.42304 86373,Grodków,1622,OP,176,PL,50.69836,17.38449 86470,Izbicko,1622,OP,176,PL,50.57163,18.15585 86502,Januszkowice,1622,OP,176,PL,50.39189,18.1368 86552,Jemielnica,1622,OP,176,PL,50.54573,18.37807 86591,Kamienica,1622,OP,176,PL,50.45007,16.95396 86597,Kamiennik,1622,OP,176,PL,50.57032,17.14979 86853,Kędzierzyn-Koźle,1622,OP,176,PL,50.34984,18.22606 86635,Kietrz,1622,OP,176,PL,50.08042,18.00432 86653,Kluczbork,1622,OP,176,PL,50.97281,18.21816 86680,Kolonowskie,1622,OP,176,PL,50.65338,18.38493 86688,Komprachcice,1622,OP,176,PL,50.63678,17.82635 86703,Korfantów,1622,OP,176,PL,50.48894,17.59898 86757,Koźle,1622,OP,176,PL,50.3356,18.14332 86766,Krapkowice,1622,OP,176,PL,50.47515,17.96539 86840,Kup,1622,OP,176,PL,50.80659,17.88351 86892,Leśnica,1622,OP,176,PL,50.43083,18.18684 86885,Lewin Brzeski,1622,OP,176,PL,50.7487,17.61688 86959,Lubrza,1622,OP,176,PL,50.33631,17.62636 86961,Lubsza,1622,OP,176,PL,50.91591,17.52173 88815,Łąka Prudnicka,1622,OP,176,PL,50.31061,17.52809 88763,Łambinowice,1622,OP,176,PL,50.53869,17.56096 88793,Łosiów,1622,OP,176,PL,50.79096,17.56594 88797,Łubniany,1622,OP,176,PL,50.78597,18.0011 87097,Moszczanka,1622,OP,176,PL,50.3002,17.49109 87114,Murów,1622,OP,176,PL,50.86307,17.94557 87134,Nakło,1622,OP,176,PL,50.57975,18.11817 87136,Namysłów,1622,OP,176,PL,51.07592,17.72284 87164,Niemodlin,1622,OP,176,PL,50.642,17.61932 87214,Nysa,1622,OP,176,PL,50.47379,17.33437 87238,Olesno,1622,OP,176,PL,50.87698,18.42094 87246,Olszanka,1622,OP,176,PL,50.79514,17.4789 87262,Opole,1622,OP,176,PL,50.67211,17.92533 87315,Otmuchów,1622,OP,176,PL,50.46627,17.17348 87320,Ozimek,1622,OP,176,PL,50.67944,18.2137 87333,Paczków,1622,OP,176,PL,50.46395,17.00658 87337,Pakosławice,1622,OP,176,PL,50.54474,17.36578 87359,Pawłowiczki,1622,OP,176,PL,50.2466,18.04865 87429,Pokój,1622,OP,176,PL,50.90265,17.83751 87437,Polska Cerekiew,1622,OP,176,PL,50.22827,18.12675 87442,Popielów,1622,OP,176,PL,50.82632,17.74378 87475,Powiat brzeski,1622,OP,176,PL,50.7893,17.48499 87521,Powiat głubczycki,1622,OP,176,PL,50.14846,17.83266 87559,Powiat kędzierzyńsko-kozielski,1622,OP,176,PL,50.29384,18.16961 87539,Powiat kluczborski,1622,OP,176,PL,50.98576,18.15258 87551,Powiat krapkowicki,1622,OP,176,PL,50.45263,17.95768 87598,Powiat namysłowski,1622,OP,176,PL,51.01628,17.76304 87608,Powiat nyski,1622,OP,176,PL,50.46054,17.33546 87611,Powiat oleski,1622,OP,176,PL,50.87887,18.46037 87618,Powiat opolski,1622,OP,176,PL,50.73689,17.98462 87642,Powiat prudnicki,1622,OP,176,PL,50.40981,17.73995 87684,Powiat strzelecki,1622,OP,176,PL,50.53057,18.34597 87787,Praszka,1622,OP,176,PL,51.05375,18.45317 87837,Prószków,1622,OP,176,PL,50.5767,17.87143 87795,Prudnik,1622,OP,176,PL,50.32124,17.57461 87878,Racławice Śląskie,1622,OP,176,PL,50.31204,17.77528 87915,Raszowa,1622,OP,176,PL,50.39779,18.17722 87941,Reńska Wieś,1622,OP,176,PL,50.31587,18.12607 87967,Rozwadza,1622,OP,176,PL,50.43493,18.0998 88062,Sidzina,1622,OP,176,PL,50.57375,17.44904 88097,Skarbimierz Osiedle,1622,OP,176,PL,50.84584,17.41865 88112,Skorogoszcz,1622,OP,176,PL,50.75916,17.68198 88113,Skoroszyce,1622,OP,176,PL,50.59648,17.38243 88336,Sławięcice,1622,OP,176,PL,50.37207,18.32176 88228,Strzelce Opolskie,1622,OP,176,PL,50.5107,18.30056 88230,Strzeleczki,1622,OP,176,PL,50.46215,17.85665 88853,Świerczów,1622,OP,176,PL,50.96016,17.7588 88366,Tarnów Opolski,1622,OP,176,PL,50.57631,18.08367 88430,Tułowice,1622,OP,176,PL,50.59577,17.65323 88431,Twardawa,1622,OP,176,PL,50.34349,17.99097 88450,Ujazd,1622,OP,176,PL,50.38938,18.34929 88473,Walce,1622,OP,176,PL,50.37322,18.00427 88643,Węgry,1622,OP,176,PL,50.74319,18.01741 88558,Większyce,1622,OP,176,PL,50.33659,18.10221 88542,Wilków,1622,OP,176,PL,51.10158,17.66284 88598,Wołczyn,1622,OP,176,PL,51.01845,18.04994 88701,Zawadzkie,1622,OP,176,PL,50.60503,18.48467 88719,Zdzieszowice,1622,OP,176,PL,50.42482,18.12349 88740,Zębowice,1622,OP,176,PL,50.7629,18.34434 85777,Adamówka,1626,PK,176,PL,50.25857,22.69595 85778,Albigowa,1626,PK,176,PL,50.01425,22.22414 85789,Babica,1626,PK,176,PL,49.93476,21.87035 85796,Baligród,1626,PK,176,PL,49.3309,22.28566 85806,Baranów Sandomierski,1626,PK,176,PL,50.49912,21.54204 85825,Besko,1626,PK,176,PL,49.58757,21.95292 85842,Białobrzegi,1626,PK,176,PL,50.10252,22.31907 85857,Bieliny,1626,PK,176,PL,50.44237,22.30482 85872,Bircza,1626,PK,176,PL,49.69173,22.47854 85882,Blizne,1626,PK,176,PL,49.75332,21.97351 86015,Błażowa,1626,PK,176,PL,49.88521,22.10037 85898,Boguchwała,1626,PK,176,PL,49.98473,21.94528 85905,Bojanów,1626,PK,176,PL,50.42531,21.95111 85924,Borowa,1626,PK,176,PL,50.38548,21.3515 85967,Brzeźnica,1626,PK,176,PL,50.10065,21.48025 85970,Brzostek,1626,PK,176,PL,49.87954,21.41102 85975,Brzóza Królewska,1626,PK,176,PL,50.23908,22.32559 85976,Brzóza Stadnicka,1626,PK,176,PL,50.19965,22.28233 85972,Brzozów,1626,PK,176,PL,49.69501,22.01926 85974,Brzyska,1626,PK,176,PL,49.82226,21.39004 85992,Bukowsko,1626,PK,176,PL,49.48039,22.06329 86035,Chmielnik,1626,PK,176,PL,49.97386,22.14535 86051,Chorkówka,1626,PK,176,PL,49.64668,21.67156 86068,Chwałowice,1626,PK,176,PL,50.76665,21.88683 86086,Cieszanów,1626,PK,176,PL,50.24564,23.13163 86091,Cisna,1626,PK,176,PL,49.21328,22.32795 86095,Cmolas,1626,PK,176,PL,50.29526,21.74417 86104,Czarna,1626,PK,176,PL,50.06717,21.25614 86120,Czaszyn,1626,PK,176,PL,49.44854,22.2165 86127,Czermin,1626,PK,176,PL,50.33911,21.33356 86146,Czudec,1626,PK,176,PL,49.94487,21.84134 86247,Dębica,1626,PK,176,PL,50.05146,21.41141 86250,Dębno,1626,PK,176,PL,50.19811,22.51837 86257,Dębów,1626,PK,176,PL,50.0449,22.43614 86255,Dębowiec,1626,PK,176,PL,49.68374,21.46068 86258,Długie,1626,PK,176,PL,49.57866,22.04338 86185,Domaradz,1626,PK,176,PL,49.78675,21.94571 86204,Dubiecko,1626,PK,176,PL,49.82608,22.39117 86207,Dukla,1626,PK,176,PL,49.55554,21.68317 86211,Dydnia,1626,PK,176,PL,49.6864,22.17196 86213,Dynów,1626,PK,176,PL,49.81506,22.23388 86229,Dzików Stary,1626,PK,176,PL,50.24699,22.92984 86228,Dzikowiec,1626,PK,176,PL,50.27288,21.84365 86274,Fredropol,1626,PK,176,PL,49.69578,22.74625 86279,Frysztak,1626,PK,176,PL,49.84164,21.60942 86289,Gać,1626,PK,176,PL,50.02693,22.35898 86296,Giedlarowa,1626,PK,176,PL,50.22689,22.40593 86428,Głogów Małopolski,1626,PK,176,PL,50.15122,21.96287 86433,Głuchów,1626,PK,176,PL,50.08171,22.27135 86324,Golcowa,1626,PK,176,PL,49.77162,22.02501 86413,Górki,1626,PK,176,PL,49.64385,22.04304 86335,Gorliczyna,1626,PK,176,PL,50.09217,22.48764 86416,Górno,1626,PK,176,PL,50.28243,22.145 86338,Gorzyce,1626,PK,176,PL,50.12841,22.57926 86366,Grabownica Starzeńska,1626,PK,176,PL,49.65896,22.07754 86403,Grębów,1626,PK,176,PL,50.56536,21.87404 86377,Grodzisko Dolne,1626,PK,176,PL,50.16238,22.46292 86378,Grodzisko Górne,1626,PK,176,PL,50.1869,22.43786 86398,Grzęska,1626,PK,176,PL,50.08303,22.45399 86406,Gwoźnica Górna,1626,PK,176,PL,49.82791,21.99772 86438,Haczów,1626,PK,176,PL,49.66152,21.8979 86441,Handzlówka,1626,PK,176,PL,49.99527,22.22311 86442,Harasiuki,1626,PK,176,PL,50.47515,22.47288 86451,Horyniec-Zdrój,1626,PK,176,PL,50.19152,23.36277 86453,Humniska,1626,PK,176,PL,49.67507,22.05368 86454,Husów,1626,PK,176,PL,49.97971,22.28645 86456,Hyżne,1626,PK,176,PL,49.91769,22.18131 86464,Iwierzyce,1626,PK,176,PL,50.02958,21.75396 86466,Iwonicz-Zdrój,1626,PK,176,PL,49.56319,21.78992 86478,Jabłonica Polska,1626,PK,176,PL,49.69784,21.89961 86479,Jabłonka,1626,PK,176,PL,49.69417,22.11565 86490,Jagiełła,1626,PK,176,PL,50.0946,22.57261 86508,Jarocin,1626,PK,176,PL,50.56459,22.32121 86511,Jarosław,1626,PK,176,PL,50.01623,22.67776 86515,Jasienica Rosielna,1626,PK,176,PL,49.75144,21.94176 86519,Jasionów,1626,PK,176,PL,49.65841,21.97678 86539,Jaśliska,1626,PK,176,PL,49.44229,21.80795 86530,Jasło,1626,PK,176,PL,49.74506,21.47252 86532,Jawornik,1626,PK,176,PL,49.8464,21.89404 86534,Jawornik Polski,1626,PK,176,PL,49.89082,22.28868 86540,Jedlicze,1626,PK,176,PL,49.71749,21.64886 86559,Jeżowe,1626,PK,176,PL,50.37486,22.12749 86562,Jodłowa,1626,PK,176,PL,49.87229,21.27897 86563,Jodłówka,1626,PK,176,PL,49.8943,22.46653 86598,Kamień,1626,PK,176,PL,50.34064,22.13539 86629,Kańczuga,1626,PK,176,PL,49.98346,22.41168 86855,Kępie Żaleszańskie,1626,PK,176,PL,50.63983,21.88133 86632,Kielanówka,1626,PK,176,PL,50.02616,21.92905 86677,Kolbuszowa,1626,PK,176,PL,50.2441,21.7761 86741,Kołaczyce,1626,PK,176,PL,49.80743,21.43407 86685,Komańcza,1626,PK,176,PL,49.33922,22.06166 86747,Kończyce,1626,PK,176,PL,50.42575,22.15376 86692,Konieczkowa,1626,PK,176,PL,49.84208,21.9282 86702,Korczyna,1626,PK,176,PL,49.71555,21.80941 86711,Kosina,1626,PK,176,PL,50.07213,22.32903 86761,Kraczkowa,1626,PK,176,PL,50.03796,22.16801 86764,Kramarzówka,1626,PK,176,PL,49.86034,22.50137 86767,Krasiczyn,1626,PK,176,PL,49.77644,22.65252 86769,Krasne,1626,PK,176,PL,50.05626,22.08638 86778,Krempna,1626,PK,176,PL,49.51128,21.50042 86786,Krościenko Wyżne,1626,PK,176,PL,49.67946,21.82898 86782,Krosno,1626,PK,176,PL,49.68866,21.77058 86803,Krzeczowice,1626,PK,176,PL,49.9892,22.46378 86805,Krzemienica,1626,PK,176,PL,50.0621,22.18054 86810,Krzeszów,1626,PK,176,PL,50.40381,22.34241 86818,Krzywcza,1626,PK,176,PL,49.79894,22.54549 86841,Kuryłówka,1626,PK,176,PL,50.29976,22.46601 86873,Laszki,1626,PK,176,PL,50.0202,22.89997 86875,Lecka,1626,PK,176,PL,49.8786,22.01368 86881,Lesko,1626,PK,176,PL,49.4701,22.33042 86894,Leżajsk,1626,PK,176,PL,50.26257,22.41932 86911,Lipnica,1626,PK,176,PL,50.28939,21.88811 86930,Lubaczów,1626,PK,176,PL,50.157,23.12339 86937,Lubenia,1626,PK,176,PL,49.93078,21.92665 86969,Lutoryż,1626,PK,176,PL,49.96712,21.9124 86970,Lutowiska,1626,PK,176,PL,49.25318,22.69252 88777,Łańcut,1626,PK,176,PL,50.06871,22.22912 88822,Łęki,1626,PK,176,PL,49.80996,21.66023 88823,Łęki Dolne,1626,PK,176,PL,49.97386,21.24739 88824,Łęki Górne,1626,PK,176,PL,49.97386,21.17426 88827,Łętownia,1626,PK,176,PL,50.32481,22.23401 88789,Łopuszka Wielka,1626,PK,176,PL,49.93454,22.39305 86981,Majdan Królewski,1626,PK,176,PL,50.37935,21.74615 86989,Manasterz,1626,PK,176,PL,49.9352,22.34602 86995,Markowa,1626,PK,176,PL,50.02633,22.3316 87013,Medyka,1626,PK,176,PL,49.80526,22.92229 87033,Miejsce Piastowe,1626,PK,176,PL,49.6344,21.78735 87035,Mielec,1626,PK,176,PL,50.28709,21.4239 87054,Mirocin,1626,PK,176,PL,50.04237,22.55596 87139,Narol,1626,PK,176,PL,50.34925,23.32679 87147,Niebieszczany,1626,PK,176,PL,49.50348,22.15651 87148,Niebocko,1626,PK,176,PL,49.67774,22.10484 87150,Niebylec,1626,PK,176,PL,49.85669,21.90348 87152,Niechobrz,1626,PK,176,PL,49.99472,21.87824 87158,Niedźwiada,1626,PK,176,PL,49.98937,21.52162 87165,Nienadowa,1626,PK,176,PL,49.82901,22.42704 87169,Nisko,1626,PK,176,PL,50.51987,22.13968 87170,Niwiska,1626,PK,176,PL,50.22492,21.63036 87171,Nowa Dęba,1626,PK,176,PL,50.42974,21.75078 87174,Nowa Sarzyna,1626,PK,176,PL,50.32086,22.34456 87190,Nowe Sioło,1626,PK,176,PL,50.23194,23.15884 87199,Nowosielce,1626,PK,176,PL,50.05747,22.41056 87200,Nowosielce-Gniewosz,1626,PK,176,PL,49.56842,22.06947 87210,Nowy Żmigród,1626,PK,176,PL,49.60353,21.52376 87211,Nozdrzec,1626,PK,176,PL,49.77323,22.19865 87229,Odrzykoń,1626,PK,176,PL,49.74057,21.74074 87239,Oleszyce,1626,PK,176,PL,50.1675,23.03481 87244,Olszanica,1626,PK,176,PL,49.47741,22.44382 87275,Orły,1626,PK,176,PL,49.87107,22.80298 87272,Orzechówka,1626,PK,176,PL,49.7308,21.94519 87288,Osiek Jasielski,1626,PK,176,PL,49.63784,21.4884 87308,Ostrów,1626,PK,176,PL,49.96812,22.7871 87334,Padew Narodowa,1626,PK,176,PL,50.43947,21.50059 87343,Pantalowice,1626,PK,176,PL,49.9521,22.43563 87356,Pawłosiów,1626,PK,176,PL,49.99533,22.64763 87391,Pilzno,1626,PK,176,PL,49.97883,21.29228 87397,Piskorowice,1626,PK,176,PL,50.23579,22.52867 87433,Polańczyk,1626,PK,176,PL,49.36969,22.42112 87778,Połomia,1626,PK,176,PL,49.90475,21.89198 87444,Poraż,1626,PK,176,PL,49.48597,22.225 87468,Powiat bieszczadzki,1626,PK,176,PL,49.33681,22.64451 87477,Powiat brzozowski,1626,PK,176,PL,49.72759,22.09039 87497,Powiat dębicki,1626,PK,176,PL,49.99923,21.35398 87528,Powiat jarosławski,1626,PK,176,PL,50.02516,22.78238 87529,Powiat jasielski,1626,PK,176,PL,49.64263,21.44637 87540,Powiat kolbuszowski,1626,PK,176,PL,50.31632,21.81315 87555,Powiat krośnieński,1626,PK,176,PL,49.59959,21.76943 87566,Powiat leski,1626,PK,176,PL,49.3197,22.36907 87568,Powiat leżajski,1626,PK,176,PL,50.26159,22.43828 87573,Powiat lubaczowski,1626,PK,176,PL,50.19585,23.17328 87748,Powiat łańcucki,1626,PK,176,PL,50.08659,22.26892 87584,Powiat mielecki,1626,PK,176,PL,50.31387,21.39136 87600,Powiat niżański,1626,PK,176,PL,50.46411,22.27645 87645,Powiat przemyski,1626,PK,176,PL,49.7606,22.67372 87646,Powiat przeworski,1626,PK,176,PL,50.08913,22.53682 87662,Powiat ropczycko-sędziszowski,1626,PK,176,PL,50.04815,21.64385 87666,Powiat rzeszowski,1626,PK,176,PL,50.09944,21.95892 87668,Powiat sanocki,1626,PK,176,PL,49.43001,22.13619 87679,Powiat stalowowolski,1626,PK,176,PL,50.59103,22.05203 87687,Powiat strzyżowski,1626,PK,176,PL,49.87698,21.74949 87701,Powiat tarnobrzeski,1626,PK,176,PL,50.52303,21.71585 87794,Pruchnik,1626,PK,176,PL,49.9062,22.51554 87804,Przecław,1626,PK,176,PL,50.19339,21.48007 87808,Przedmieście Dubieckie,1626,PK,176,PL,49.8371,22.37177 87836,Przędzel,1626,PK,176,PL,50.49465,22.21925 87812,Przemyśl,1626,PK,176,PL,49.78498,22.76728 87816,Przeworsk,1626,PK,176,PL,50.05912,22.49408 87823,Przybyszówka,1626,PK,176,PL,50.04788,21.92579 87857,Pysznica,1626,PK,176,PL,50.56999,22.12913 87876,Racławice,1626,PK,176,PL,50.5137,22.16552 87887,Radomyśl,1626,PK,176,PL,50.68101,21.94365 87888,Radomyśl Wielki,1626,PK,176,PL,50.19693,21.27693 87893,Radymno,1626,PK,176,PL,49.9472,22.82375 87910,Rakszawa,1626,PK,176,PL,50.16051,22.23907 87912,Raniżów,1626,PK,176,PL,50.25873,21.97137 87950,Rogóźno,1626,PK,176,PL,50.07367,22.37486 87956,Rokietnica,1626,PK,176,PL,49.89983,22.64171 87961,Ropczyce,1626,PK,176,PL,50.05229,21.60891 87963,Rozbórz,1626,PK,176,PL,50.05615,22.54686 87976,Rudna Mała,1626,PK,176,PL,50.09889,21.96021 87977,Rudna Wielka,1626,PK,176,PL,50.08799,21.94759 87981,Rudnik nad Sanem,1626,PK,176,PL,50.44152,22.24856 88009,Rymanów,1626,PK,176,PL,49.57649,21.86811 88020,Rzepedź,1626,PK,176,PL,49.36997,22.11174 88024,Rzeszów,1626,PK,176,PL,50.00545,21.98848 88049,Sanok,1626,PK,176,PL,49.55573,22.2056 88329,Sędziszów Małopolski,1626,PK,176,PL,50.07069,21.70062 88066,Siedleczka,1626,PK,176,PL,49.96061,22.37949 88068,Siedliska,1626,PK,176,PL,49.95409,21.94742 88077,Sieniawa,1626,PK,176,PL,50.1779,22.60954 88092,Sietesz,1626,PK,176,PL,49.98622,22.34671 88114,Skołyszyn,1626,PK,176,PL,49.74955,21.33665 88343,Słotowa,1626,PK,176,PL,49.94603,21.29425 88136,Sokolniki,1626,PK,176,PL,50.63803,21.80649 88139,Sokołów Małopolski,1626,PK,176,PL,50.22909,22.11968 88147,Sonina,1626,PK,176,PL,50.06089,22.26551 88157,Sośnica,1626,PK,176,PL,49.90083,22.87469 88165,Stalowa Wola,1626,PK,176,PL,50.58286,22.05334 88178,Stara Wieś,1626,PK,176,PL,49.71505,22.00441 88186,Stare Miasto,1626,PK,176,PL,50.28879,22.42928 88210,Strachocina,1626,PK,176,PL,49.60815,22.08836 88212,Straszydle,1626,PK,176,PL,49.90038,21.98124 88236,Strzyżów,1626,PK,176,PL,49.87074,21.79413 88238,Stubno,1626,PK,176,PL,49.89806,22.95602 88859,Świlcza,1626,PK,176,PL,50.07179,21.89798 88359,Tarnobrzeg,1626,PK,176,PL,50.57304,21.67937 88362,Tarnowiec,1626,PK,176,PL,49.73108,21.57663 88393,Tryńcza,1626,PK,176,PL,50.16087,22.55008 88394,Trzciana,1626,PK,176,PL,50.0719,21.8385 88398,Trzcinica,1626,PK,176,PL,49.74301,21.4175 88409,Trzebownisko,1626,PK,176,PL,50.07829,22.03712 88428,Turze Pole,1626,PK,176,PL,49.66329,22.00476 88437,Tyczyn,1626,PK,176,PL,49.96384,22.03398 88442,Tyrawa Wołoska,1626,PK,176,PL,49.57744,22.36988 88448,Uherce Mineralne,1626,PK,176,PL,49.46455,22.39829 88453,Ulanów,1626,PK,176,PL,50.49031,22.26362 88460,Urzejowice,1626,PK,176,PL,50.01182,22.46189 88465,Ustrzyki Dolne,1626,PK,176,PL,49.4304,22.59381 88470,Wadowice Górne,1626,PK,176,PL,50.26312,21.30215 88492,Wesoła,1626,PK,176,PL,49.79977,22.10029 88555,Wiązownica,1626,PK,176,PL,50.08066,22.70668 88508,Wielkie Oczy,1626,PK,176,PL,50.02357,23.16407 88509,Wielopole Skrzyńskie,1626,PK,176,PL,49.94564,21.61491 88516,Wierzawice,1626,PK,176,PL,50.23623,22.4509 88519,Wierzbna,1626,PK,176,PL,50.03311,22.60128 88564,Wiśniowa,1626,PK,176,PL,49.86897,21.65508 88571,Wojaszówka,1626,PK,176,PL,49.77777,21.67079 88592,Wola Żarczycka,1626,PK,176,PL,50.2912,22.25023 88627,Wólka Niedźwiedzka,1626,PK,176,PL,50.24226,22.18826 88628,Wólka Pełkińska,1626,PK,176,PL,50.09553,22.62342 88629,Wólka Podleśna,1626,PK,176,PL,50.11785,22.11213 88630,Wólka Tanewska,1626,PK,176,PL,50.50005,22.26113 88615,Wysoka,1626,PK,176,PL,50.04474,22.26002 88619,Wysoka Głogowska,1626,PK,176,PL,50.16019,22.02124 88620,Wysoka Strzyżowska,1626,PK,176,PL,49.83056,21.74074 88669,Zagórz,1626,PK,176,PL,49.51457,22.26706 88671,Zagórzyce,1626,PK,176,PL,50.0169,21.67517 88674,Zaklików,1626,PK,176,PL,50.75769,22.10226 88684,Zalesie,1626,PK,176,PL,50.01226,22.53262 88687,Zaleszany,1626,PK,176,PL,50.64799,21.89069 88695,Zarszyn,1626,PK,176,PL,49.58178,22.01283 88696,Zarzecze,1626,PK,176,PL,50.52767,22.19522 88718,Zdziechowice Drugie,1626,PK,176,PL,50.78478,22.10999 88727,Zgłobień,1626,PK,176,PL,50.0127,21.8549 88732,Zmiennica,1626,PK,176,PL,49.67652,21.96596 88891,Żołynia,1626,PK,176,PL,50.162,22.30825 88893,Żurawica,1626,PK,176,PL,49.82348,22.78925 88894,Żurawiczki,1626,PK,176,PL,50.0137,22.49949 88898,Żyraków,1626,PK,176,PL,50.08545,21.39622 85787,Augustów,1632,PD,176,PL,53.84321,22.97979 85845,Białowieża,1632,PD,176,PL,52.7,23.86667 85850,Białystok,1632,PD,176,PL,53.13333,23.16433 85860,Bielsk Podlaski,1632,PD,176,PL,52.76512,23.18647 85933,Boćki,1632,PD,176,PL,52.65155,23.04485 85937,Brańsk,1632,PD,176,PL,52.7444,22.83774 86052,Choroszcz,1632,PD,176,PL,53.14332,22.98889 86076,Ciechanowiec,1632,PD,176,PL,52.67828,22.49815 86105,Czarna Białostocka,1632,PD,176,PL,53.30509,23.28146 86126,Czeremcha,1632,PD,176,PL,52.51667,23.35 86148,Czyżew,1632,PD,176,PL,52.79768,22.31237 86238,Dąbrowa Białostocka,1632,PD,176,PL,53.65364,23.34792 86179,Dobrzyniewo Duże,1632,PD,176,PL,53.20022,23.01129 86200,Drohiczyn,1632,PD,176,PL,52.40011,22.65853 86270,Filipów,1632,PD,176,PL,54.18037,22.62076 86331,Goniadz,1632,PD,176,PL,53.48953,22.73578 86370,Grajewo,1632,PD,176,PL,53.64728,22.45537 86384,Grudki,1632,PD,176,PL,53.09488,23.66848 86439,Hajnówka,1632,PD,176,PL,52.74328,23.58122 86545,Jedwabne,1632,PD,176,PL,53.28554,22.30353 86646,Kleszczele,1632,PD,176,PL,52.57314,23.32539 86659,Knyszyn,1632,PD,176,PL,53.31406,22.91963 86679,Kolno,1632,PD,176,PL,53.41148,21.92905 86771,Krasnopol,1632,PD,176,PL,54.11613,23.20476 86797,Krynki,1632,PD,176,PL,53.26444,23.77304 86847,Kuźnica,1632,PD,176,PL,53.51094,23.64953 86921,Lipsk,1632,PD,176,PL,53.73312,23.40225 88768,Łapy,1632,PD,176,PL,52.9911,22.88422 88786,Łomża,1632,PD,176,PL,53.17806,22.05935 87010,Mały Płock,1632,PD,176,PL,53.30385,22.02836 87021,Michałowo,1632,PD,176,PL,53.03492,23.60996 87048,Milejczyce,1632,PD,176,PL,52.51967,23.13206 87100,Mońki,1632,PD,176,PL,53.40496,22.79791 87138,Narew,1632,PD,176,PL,52.91418,23.51984 87196,Nowogród,1632,PD,176,PL,53.22698,21.8821 87213,Nurzec-Stacja,1632,PD,176,PL,52.46249,23.08571 87266,Orla,1632,PD,176,PL,52.70546,23.33213 87402,Piątnica,1632,PD,176,PL,53.19657,22.09591 87458,Powiat augustowski,1632,PD,176,PL,53.79742,23.14275 87464,Powiat białostocki,1632,PD,176,PL,53.09897,23.59314 87466,Powiat bielski,1632,PD,176,PL,52.74629,23.00669 87512,Powiat grajewski,1632,PD,176,PL,53.55509,22.48995 87522,Powiat hajnowski,1632,PD,176,PL,52.70845,23.55719 87541,Powiat kolneński,1632,PD,176,PL,53.39186,21.93631 87750,Powiat łomżyński,1632,PD,176,PL,53.20686,22.08252 87591,Powiat moniecki,1632,PD,176,PL,53.44561,22.78144 87669,Powiat sejneński,1632,PD,176,PL,54.09561,23.30425 87671,Powiat siemiatycki,1632,PD,176,PL,52.48842,22.88642 87678,Powiat sokólski,1632,PD,176,PL,53.43511,23.41864 87690,Powiat suwalski,1632,PD,176,PL,54.16655,22.81818 87727,Powiat wysokomazowiecki,1632,PD,176,PL,52.86458,22.55541 87736,Powiat zambrowski,1632,PD,176,PL,53.02256,22.28505 87854,Puńsk,1632,PD,176,PL,54.25114,23.18124 87875,Raczki,1632,PD,176,PL,53.98749,22.78487 87901,Radziłów,1632,PD,176,PL,53.40994,22.40988 87907,Rajgród,1632,PD,176,PL,53.73102,22.70515 87974,Rudka,1632,PD,176,PL,52.72439,22.72676 87990,Rutki-Kossaki,1632,PD,176,PL,53.08932,22.44011 88055,Sejny,1632,PD,176,PL,54.10802,23.34698 88072,Siemiatycze,1632,PD,176,PL,52.42719,22.86231 88836,Śniadowo,1632,PD,176,PL,53.03874,21.99077 88141,Sokółka,1632,PD,176,PL,53.40715,23.50228 88138,Sokoły,1632,PD,176,PL,52.99314,22.7005 88200,Stawiski,1632,PD,176,PL,53.37987,22.15462 88251,Suchowola,1632,PD,176,PL,53.57753,23.10596 88264,Supraśl,1632,PD,176,PL,53.20526,23.33934 88265,Suraż,1632,PD,176,PL,52.94908,22.95653 88269,Suwałki,1632,PD,176,PL,54.10272,22.92914 88300,Szczuczyn,1632,PD,176,PL,53.5633,22.28534 88308,Szepietowo,1632,PD,176,PL,52.87032,22.54392 88318,Szumowo,1632,PD,176,PL,52.91884,22.08449 88426,Turośń Kościelna,1632,PD,176,PL,53.01463,23.05532 88438,Tykocin,1632,PD,176,PL,53.20567,22.77457 88484,Wasilków,1632,PD,176,PL,53.19909,23.20776 88635,Wąsosz,1632,PD,176,PL,53.52209,22.31915 88554,Wizna,1632,PD,176,PL,53.19518,22.38241 88622,Wysokie Mazowieckie,1632,PD,176,PL,52.91661,22.51712 88623,Wyszki,1632,PD,176,PL,52.84129,22.98119 88663,Zabłudów,1632,PD,176,PL,53.01442,23.33831 88690,Zambrów,1632,PD,176,PL,52.9855,22.24319 88712,Zbójna,1632,PD,176,PL,53.24293,21.78812 85800,Banino,1624,PM,176,PL,54.39215,18.40622 85886,Bobowo,1624,PM,176,PL,53.88378,18.55681 85902,Bojano,1624,PM,176,PL,54.47123,18.38408 85915,Bolszewo,1624,PM,176,PL,54.61801,18.17585 85929,Borzytuchom,1624,PM,176,PL,54.20021,17.36801 85956,Brusy,1624,PM,176,PL,53.88446,17.71786 86008,Bytów,1624,PM,176,PL,54.17057,17.49187 86018,Cedry Wielkie,1624,PM,176,PL,54.24707,18.84567 86025,Cewice,1624,PM,176,PL,54.43551,17.73485 86074,Chłapowo,1624,PM,176,PL,54.80365,18.37352 86036,Chmielno,1624,PM,176,PL,54.32543,18.0986 86042,Choczewo,1624,PM,176,PL,54.73993,17.89175 86049,Chojnice,1624,PM,176,PL,53.69554,17.55701 86067,Chwaszczyno,1624,PM,176,PL,54.44379,18.41875 86106,Czarna Dąbrówka,1624,PM,176,PL,54.35631,17.56456 86108,Czarna Woda,1624,PM,176,PL,53.84458,18.10006 86109,Czarne,1624,PM,176,PL,53.6842,16.93834 86138,Czersk,1624,PM,176,PL,53.79589,17.97647 86152,Człuchów,1624,PM,176,PL,53.66722,17.35883 86157,Damnica,1624,PM,176,PL,54.50025,17.27154 86249,Dębnica Kaszubska,1624,PM,176,PL,54.37831,17.16116 86161,Debrzno,1624,PM,176,PL,53.53817,17.23643 86220,Dziemiany,1624,PM,176,PL,54.00636,17.76755 86223,Dzierzgoń,1624,PM,176,PL,53.92196,19.34705 86283,Garcz,1624,PM,176,PL,54.3476,18.10169 86285,Gardeja,1624,PM,176,PL,53.61125,18.94687 86291,Gdańsk,1624,PM,176,PL,54.35205,18.64637 86292,Gdynia,1624,PM,176,PL,54.51889,18.53188 86437,Główczyce,1624,PM,176,PL,54.61935,17.3723 86310,Gniew,1624,PM,176,PL,53.83602,18.8231 86311,Gniewino,1624,PM,176,PL,54.71709,18.01663 86314,Gnieżdżewo,1624,PM,176,PL,54.74741,18.37944 86359,Gościcino,1624,PM,176,PL,54.60459,18.15491 86367,Grabowo Kościerskie,1624,PM,176,PL,54.16816,18.14692 86446,Hel,1624,PM,176,PL,54.60814,18.8013 86520,Jastarnia,1624,PM,176,PL,54.6983,18.6773 86527,Jastrzębia Góra,1624,PM,176,PL,54.83135,18.31301 86585,Kaliska,1624,PM,176,PL,53.90535,18.21885 86616,Karsin,1624,PM,176,PL,53.90768,17.92093 86617,Kartuzy,1624,PM,176,PL,54.33424,18.19735 86854,Kępice,1624,PM,176,PL,54.24111,16.88968 86668,Kobylnica,1624,PM,176,PL,54.43975,16.99782 86673,Koczała,1624,PM,176,PL,53.90449,17.06529 86676,Kolbudy,1624,PM,176,PL,54.26989,18.46639 86678,Koleczkowo,1624,PM,176,PL,54.48629,18.34373 86744,Kołczygłowy,1624,PM,176,PL,54.23895,17.23154 86710,Kosakowo,1624,PM,176,PL,54.58927,18.48484 86756,Kościerzyna,1624,PM,176,PL,54.12226,17.98119 86727,Kowale,1624,PM,176,PL,54.30976,18.56149 86781,Krokowa,1624,PM,176,PL,54.77921,18.1616 86794,Krynica Morska,1624,PM,176,PL,54.38051,19.44413 86849,Kwidzyn,1624,PM,176,PL,53.72495,18.93114 86978,Lębork,1624,PM,176,PL,54.53921,17.75012 86903,Linia,1624,PM,176,PL,54.45143,17.93454 86904,Liniewo,1624,PM,176,PL,54.07661,18.22675 86912,Lipnica,1624,PM,176,PL,53.99623,17.40702 86923,Lipusz,1624,PM,176,PL,54.09806,17.78455 86925,Lisewo Malborskie,1624,PM,176,PL,54.09665,18.82928 86938,Lubichowo,1624,PM,176,PL,53.85136,18.39901 86946,Lublewo Gdańskie,1624,PM,176,PL,54.28457,18.50389 86972,Luzino,1624,PM,176,PL,54.56604,18.10907 88778,Łeba,1624,PM,176,PL,54.76099,17.55547 88818,Łęczyce,1624,PM,176,PL,54.59405,17.85931 88819,Łęgowo,1624,PM,176,PL,54.22641,18.64277 86986,Malbork,1624,PM,176,PL,54.03591,19.0266 87017,Miastko,1624,PM,176,PL,54.00283,16.98263 87043,Mikołajki Pomorskie,1624,PM,176,PL,53.85131,19.16574 87073,Miłoradz,1624,PM,176,PL,54.01392,18.91846 87096,Mosty,1624,PM,176,PL,54.61195,18.49634 87104,Mrzezino,1624,PM,176,PL,54.65378,18.43025 87178,Nowa Wieś Lęborska,1624,PM,176,PL,54.55878,17.72756 87202,Nowy Dwór Gdański,1624,PM,176,PL,54.21305,19.11771 87205,Nowy Staw,1624,PM,176,PL,54.13609,19.00909 87267,Orle,1624,PM,176,PL,54.64022,18.17057 87287,Osiek,1624,PM,176,PL,53.72226,18.49051 87296,Ostaszewo,1624,PM,176,PL,54.21256,18.95142 87346,Parchowo,1624,PM,176,PL,54.20658,17.66816 87363,Pelplin,1624,PM,176,PL,53.92834,18.6977 87425,Pogórze,1624,PM,176,PL,54.5644,18.48209 87456,Potęgowo,1624,PM,176,PL,54.48285,17.4862 87480,Powiat bytowski,1624,PM,176,PL,54.15691,17.29147 87485,Powiat chojnicki,1624,PM,176,PL,53.80099,17.71882 87492,Powiat człuchowski,1624,PM,176,PL,53.75112,17.18936 87501,Powiat gdański,1624,PM,176,PL,54.22493,18.58157 87536,Powiat kartuski,1624,PM,176,PL,54.32687,18.08632 87549,Powiat kościerski,1624,PM,176,PL,54.01939,18.004 87558,Powiat kwidzyński,1624,PM,176,PL,53.7469,19.03111 87580,Powiat lęborski,1624,PM,176,PL,54.5683,17.65178 87582,Powiat malborski,1624,PM,176,PL,54.06329,19.04421 87602,Powiat nowodworski,1624,PM,176,PL,54.2873,19.24266 87649,Powiat pucki,1624,PM,176,PL,54.69659,18.36979 87700,Powiat słupski,1624,PM,176,PL,54.42211,17.15917 87682,Powiat starogardzki,1624,PM,176,PL,53.89912,18.39912 87694,Powiat sztumski,1624,PM,176,PL,53.90149,19.22 87705,Powiat tczewski,1624,PM,176,PL,53.91895,18.71916 87716,Powiat wejherowski,1624,PM,176,PL,54.61707,18.04881 87783,Prabuty,1624,PM,176,PL,53.755,19.20547 87798,Pruszcz Gdański,1624,PM,176,PL,54.26217,18.63625 87801,Przechlewo,1624,PM,176,PL,53.79847,17.25205 87818,Przodkowo,1624,PM,176,PL,54.37991,18.2876 87834,Przywidz,1624,PM,176,PL,54.19524,18.32116 87844,Pszczółki,1624,PM,176,PL,54.17304,18.69787 87847,Puck,1624,PM,176,PL,54.7179,18.40841 87921,Reda,1624,PM,176,PL,54.60528,18.34717 87935,Rekowo Dolne,1624,PM,176,PL,54.63133,18.36279 87962,Rotmanka,1624,PM,176,PL,54.27425,18.6038 87986,Rumia,1624,PM,176,PL,54.57092,18.38802 88007,Ryjewo,1624,PM,176,PL,53.84463,18.96077 88015,Rzeczenica,1624,PM,176,PL,53.7579,17.10752 88042,Sadlinki,1624,PM,176,PL,53.66539,18.86807 88087,Sierakowice,1624,PM,176,PL,54.3461,17.89252 88098,Skarszewy,1624,PM,176,PL,54.06911,18.44416 88121,Skórcz,1624,PM,176,PL,53.79436,18.52561 88353,Słupsk,1624,PM,176,PL,54.46405,17.02872 88129,Smętowo Graniczne,1624,PM,176,PL,53.74638,18.68586 88126,Smołdzino,1624,PM,176,PL,54.66318,17.21369 88145,Somonino,1624,PM,176,PL,54.27555,18.19885 88148,Sopot,1624,PM,176,PL,54.4418,18.56003 88176,Stara Kiszewa,1624,PM,176,PL,53.99006,18.16958 88188,Stare Pole,1624,PM,176,PL,54.05667,19.20874 88190,Starogard Gdański,1624,PM,176,PL,53.96396,18.52638 88195,Stary Targ,1624,PM,176,PL,53.92335,19.17003 88202,Stegna,1624,PM,176,PL,54.32684,19.11252 88245,Stężyca,1624,PM,176,PL,54.20593,17.95569 88213,Straszyn,1624,PM,176,PL,54.27214,18.58114 88233,Strzelno,1624,PM,176,PL,54.78564,18.32515 88239,Studzienice,1624,PM,176,PL,54.09262,17.57581 88246,Subkowy,1624,PM,176,PL,54.00227,18.76928 88253,Suchy Dąb,1624,PM,176,PL,54.20809,18.76731 88263,Sulęczyno,1624,PM,176,PL,54.23302,17.7733 88307,Szemud,1624,PM,176,PL,54.48709,18.2228 88311,Szlachta,1624,PM,176,PL,53.76827,18.11367 88315,Sztum,1624,PM,176,PL,53.92077,19.03072 88316,Sztutowo,1624,PM,176,PL,54.32679,19.17921 88369,Tczew,1624,PM,176,PL,54.09242,18.77787 88416,Trąbki Wielkie,1624,PM,176,PL,54.17062,18.54003 88404,Trzebielino,1624,PM,176,PL,54.19996,17.08726 88418,Tuchomie,1624,PM,176,PL,54.11522,17.33634 88462,Ustka,1624,PM,176,PL,54.58048,16.86194 88490,Wejherowo,1624,PM,176,PL,54.60568,18.23559 88507,Wielki Kack,1624,PM,176,PL,54.46754,18.4881 88526,Wierzchucino,1624,PM,176,PL,54.78797,18.00307 88646,Władysławowo,1624,PM,176,PL,54.79086,18.4009 88708,Zblewo,1624,PM,176,PL,53.93366,18.32262 88883,Żelistrzewo,1624,PM,176,PL,54.6777,18.41738 88892,Żukowo,1624,PM,176,PL,54.3422,18.36476 86009,Bąków,1623,SL,176,PL,49.89342,18.71495 85821,Bażanowice,1623,SL,176,PL,49.73791,18.70345 86013,Będzin,1623,SL,176,PL,50.32607,19.12565 85829,Bełk,1623,SL,176,PL,50.13048,18.71667 85830,Bełsznica,1623,SL,176,PL,49.97811,18.36313 85826,Bestwina,1623,SL,176,PL,49.89712,19.05776 85827,Bestwinka,1623,SL,176,PL,49.93272,19.06694 85861,Bielsko-Biala,1623,SL,176,PL,49.82245,19.04686 85862,Bielsko-Biała,1623,SL,176,PL,49.81204,19.03899 85867,Bieruń,1623,SL,176,PL,50.09,19.09291 85879,Blachownia,1623,SL,176,PL,50.78015,18.96389 85890,Bobrowniki,1623,SL,176,PL,50.37985,18.98661 85906,Bojszowy,1623,SL,176,PL,50.0578,19.10145 85907,Bojszowy Nowe,1623,SL,176,PL,50.05284,19.05012 85923,Boronów,1623,SL,176,PL,50.6746,18.90678 85926,Borowno,1623,SL,176,PL,50.93247,19.2738 85927,Borucin,1623,SL,176,PL,50.00763,18.15748 85940,Brenna,1623,SL,176,PL,49.72576,18.90249 85953,Bronów,1623,SL,176,PL,49.87782,18.92103 85965,Brzeziny Śląskie,1623,SL,176,PL,50.35439,18.98129 85982,Buczkowice,1623,SL,176,PL,49.72858,19.06908 85987,Bujaków,1623,SL,176,PL,49.85182,19.19432 86001,Bystra,1623,SL,176,PL,49.76042,19.05973 86005,Bytom,1623,SL,176,PL,50.34802,18.93282 86026,Chałupki,1623,SL,176,PL,49.92559,18.3173 86028,Chełm Śląski,1623,SL,176,PL,50.10825,19.19552 86053,Choroń,1623,SL,176,PL,50.68178,19.26058 86055,Chorzów,1623,SL,176,PL,50.30582,18.9742 86060,Chruszczobród,1623,SL,176,PL,50.4147,19.32718 86069,Chybie,1623,SL,176,PL,49.90249,18.82756 86075,Ciasna,1623,SL,176,PL,50.75427,18.60835 86093,Cięcina,1623,SL,176,PL,49.6022,19.14102 86081,Cielmice,1623,SL,176,PL,50.08826,19.01896 86088,Cieszyn,1623,SL,176,PL,49.75133,18.63213 86090,Cisiec,1623,SL,176,PL,49.59213,19.1054 86092,Cisownica,1623,SL,176,PL,49.72276,18.76207 86098,Cynków,1623,SL,176,PL,50.56203,19.11956 86100,Czaniec,1623,SL,176,PL,49.85071,19.25354 86103,Czarków,1623,SL,176,PL,50.01833,18.90678 86122,Czechowice-Dziedzice,1623,SL,176,PL,49.91342,19.00479 86123,Czeladź,1623,SL,176,PL,50.31542,19.07824 86130,Czernica,1623,SL,176,PL,50.08391,18.40068 86132,Czernichów,1623,SL,176,PL,49.75443,19.20947 86141,Czerwionka-Leszczyny,1623,SL,176,PL,50.15007,18.67762 86150,Częstochowa,1623,SL,176,PL,50.79646,19.12409 86149,Czyżowice,1623,SL,176,PL,49.9849,18.40433 86240,Dąbrowa Górnicza,1623,SL,176,PL,50.33394,19.20479 86242,Dąbrowa Zielona,1623,SL,176,PL,50.84394,19.55652 86256,Dębowiec,1623,SL,176,PL,49.81406,18.72062 86166,Dobieszowice,1623,SL,176,PL,50.39697,19.01304 86199,Drogomyśl,1623,SL,176,PL,49.86964,18.75727 86231,Dzięgielów,1623,SL,176,PL,49.72259,18.70491 86276,Frydek,1623,SL,176,PL,49.99626,19.07278 86284,Gardawice,1623,SL,176,PL,50.11667,18.8 86287,Gaszowice,1623,SL,176,PL,50.10858,18.43042 86299,Gierałtowice,1623,SL,176,PL,50.22486,18.73384 86303,Gilowice,1623,SL,176,PL,49.99505,19.09613 86307,Gliwice,1623,SL,176,PL,50.29761,18.67658 86308,Gniazdów,1623,SL,176,PL,50.59621,19.11132 86317,Goczałkowice Zdrój,1623,SL,176,PL,49.94454,18.96927 86322,Godów,1623,SL,176,PL,49.92481,18.4783 86319,Godziszka,1623,SL,176,PL,49.71288,19.07587 86327,Goleszów,1623,SL,176,PL,49.7358,18.73675 86356,Gołkowice,1623,SL,176,PL,49.91418,18.51419 86409,Góra,1623,SL,176,PL,49.97971,19.10471 86414,Górki Wielkie,1623,SL,176,PL,49.77971,18.83117 86339,Gorzyce,1623,SL,176,PL,49.95945,18.39884 86341,Gorzyczki,1623,SL,176,PL,49.94912,18.4033 86346,Gostyń,1623,SL,176,PL,50.10528,18.88241 86445,Hażlach,1623,SL,176,PL,49.80714,18.65178 86448,Herby,1623,SL,176,PL,50.75318,18.88756 86455,Huta Stara B,1623,SL,176,PL,50.73792,19.13295 86457,Imielin,1623,SL,176,PL,50.14534,19.18599 86462,Istebna,1623,SL,176,PL,49.56319,18.90567 86494,Jankowice,1623,SL,176,PL,50.0009,18.98901 86495,Jankowice Rybnickie,1623,SL,176,PL,50.04479,18.54707 86498,Janowice,1623,SL,176,PL,49.88496,19.09376 86514,Jasienica,1623,SL,176,PL,49.81312,18.92155 86524,Jastrząb,1623,SL,176,PL,50.67019,19.1817 86528,Jastrzębie Zdrój,1623,SL,176,PL,49.95542,18.57479 86529,Jastrzębie-Zdrój,1623,SL,176,PL,49.96063,18.60053 86535,Jaworze,1623,SL,176,PL,49.79351,18.9479 86536,Jaworzno,1623,SL,176,PL,50.20528,19.27498 86538,Jaworzynka,1623,SL,176,PL,49.54019,18.86996 86547,Jejkowice,1623,SL,176,PL,50.10814,18.46767 86551,Jeleśnia,1623,SL,176,PL,49.64246,19.32701 86572,Juszczyna,1623,SL,176,PL,49.62984,19.22032 86581,Kaczyce,1623,SL,176,PL,49.82752,18.59161 86583,Kalej,1623,SL,176,PL,50.83662,18.98429 86584,Kalety,1623,SL,176,PL,50.5627,18.8926 86589,Kamesznica,1623,SL,176,PL,49.56469,19.0212 86592,Kamienica Polska,1623,SL,176,PL,50.6709,19.12265 86606,Kamyk,1623,SL,176,PL,50.90179,19.02875 86608,Kaniów,1623,SL,176,PL,49.94316,19.05098 86621,Katowice,1623,SL,176,PL,50.25841,19.02754 86862,Kłobuck,1623,SL,176,PL,50.90081,18.93674 86867,Kłomnice,1623,SL,176,PL,50.92165,19.35679 86658,Knurów,1623,SL,176,PL,50.21971,18.65067 86660,Kobiernice,1623,SL,176,PL,49.85497,19.21646 86662,Kobiór,1623,SL,176,PL,50.06089,18.93468 86670,Kochanowice,1623,SL,176,PL,50.70548,18.74911 86748,Kończyce Małe,1623,SL,176,PL,49.85824,18.62964 86749,Kończyce Wielkie,1623,SL,176,PL,49.8351,18.64474 86690,Koniaków,1623,SL,176,PL,49.55066,18.9491 86691,Koniecpol,1623,SL,176,PL,50.77468,19.68896 86694,Konopiska,1623,SL,176,PL,50.72695,19.00781 86700,Korbielów,1623,SL,176,PL,49.5682,19.35001 86704,Kornowac,1623,SL,176,PL,50.07179,18.32846 86753,Kościelec,1623,SL,176,PL,50.89713,19.2156 86717,Koszarawa,1623,SL,176,PL,49.64462,19.40083 86720,Koszęcin,1623,SL,176,PL,50.63411,18.8413 86734,Koziegłowy,1623,SL,176,PL,50.60035,19.16299 86737,Kozy,1623,SL,176,PL,49.84756,19.14891 86780,Kroczyce,1623,SL,176,PL,50.56176,19.57 86792,Krupski Młyn,1623,SL,176,PL,50.57337,18.62251 86798,Kryry,1623,SL,176,PL,50.01667,18.80568 86800,Krzanowice,1623,SL,176,PL,50.01822,18.12251 86807,Krzepice,1623,SL,176,PL,50.97059,18.72886 86822,Krzyżanowice,1623,SL,176,PL,49.98247,18.26846 86824,Krzyżowa,1623,SL,176,PL,49.59235,19.34469 86825,Krzyżowice,1623,SL,176,PL,49.98528,18.67281 86830,Książenice,1623,SL,176,PL,50.15524,18.59925 86846,Kuźnia Raciborska,1623,SL,176,PL,50.20058,18.31146 86869,Laliki,1623,SL,176,PL,49.53446,19.00549 86979,Lędziny,1623,SL,176,PL,50.14264,19.13149 86880,Lelów,1623,SL,176,PL,50.68335,19.62562 86888,Leśna,1623,SL,176,PL,49.67041,19.12763 86901,Ligota,1623,SL,176,PL,49.89856,18.9509 86907,Lipie,1623,SL,176,PL,51.01257,18.79658 86919,Lipowa,1623,SL,176,PL,49.67574,19.09398 86948,Lubliniec,1623,SL,176,PL,50.66897,18.6844 86951,Lubomia,1623,SL,176,PL,50.03972,18.3082 86975,Lyski,1623,SL,176,PL,50.11992,18.39146 88774,Łaziska,1623,SL,176,PL,49.9357,18.44707 88775,Łaziska Górne,1623,SL,176,PL,50.14952,18.84215 88776,Łazy,1623,SL,176,PL,50.42769,19.39465 88821,Łękawica,1623,SL,176,PL,49.72209,19.26496 88780,Łobodno,1623,SL,176,PL,50.93079,18.9909 88783,Łodygowice,1623,SL,176,PL,49.72992,19.13939 86997,Markłowice,1623,SL,176,PL,50.01695,18.52098 87004,Mazańcowice,1623,SL,176,PL,49.85802,18.97708 87016,Miasteczko Śląskie,1623,SL,176,PL,50.50262,18.93949 87032,Miedźna,1623,SL,176,PL,49.98225,19.04883 87031,Miedzno,1623,SL,176,PL,50.96994,18.98111 87059,Międzybrodzie Bialskie,1623,SL,176,PL,49.78747,19.19741 87039,Mierzęcice,1623,SL,176,PL,50.44504,19.12934 87044,Mikołów,1623,SL,176,PL,50.17103,18.9041 87051,Milówka,1623,SL,176,PL,49.5554,19.09072 87076,Mnich,1623,SL,176,PL,49.88944,18.80722 87107,Mstów,1623,SL,176,PL,50.82969,19.28547 87108,Mszana,1623,SL,176,PL,49.96939,18.52793 87112,Murcki,1623,SL,176,PL,50.20036,19.04351 87116,Mykanów,1623,SL,176,PL,50.9236,19.2005 87121,Mysłowice,1623,SL,176,PL,50.20745,19.16668 87118,Myszków,1623,SL,176,PL,50.5752,19.32461 87133,Nakło,1623,SL,176,PL,50.4369,18.91056 87215,Nędza,1623,SL,176,PL,50.16112,18.31103 87153,Niedobczyce,1623,SL,176,PL,50.0654,18.49531 87160,Niegowonice,1623,SL,176,PL,50.38909,19.42263 87223,Ochaby,1623,SL,176,PL,49.84252,18.76894 87231,Ogrodzieniec,1623,SL,176,PL,50.45177,19.51987 87247,Olsztyn,1623,SL,176,PL,50.75185,19.26737 87253,Olza,1623,SL,176,PL,49.95393,18.3391 87258,Opatów,1623,SL,176,PL,50.95567,18.81941 87269,Ornontowice,1623,SL,176,PL,50.19377,18.75435 87271,Orzech,1623,SL,176,PL,50.42744,18.92275 87273,Orzesze,1623,SL,176,PL,50.15595,18.77923 87304,Ostrowy nad Okszą,1623,SL,176,PL,50.97799,19.05355 87326,Ożarowice,1623,SL,176,PL,50.46182,19.04317 87341,Paniówki,1623,SL,176,PL,50.23139,18.78104 87342,Panki,1623,SL,176,PL,50.88333,18.7516 87357,Pawłowice,1623,SL,176,PL,49.96127,18.71778 87355,Pawonków,1623,SL,176,PL,50.69499,18.58149 87366,Pewel Ślemieńska,1623,SL,176,PL,49.68968,19.33431 87365,Pewel Wielka,1623,SL,176,PL,49.67457,19.37482 87369,Piasek,1623,SL,176,PL,50.01055,18.94807 87376,Piekary Śląskie,1623,SL,176,PL,50.38017,18.92653 87379,Pielgrzymowice,1623,SL,176,PL,49.90547,18.64886 87382,Pierściec,1623,SL,176,PL,49.83339,18.81409 87384,Pietrowice Wielkie,1623,SL,176,PL,50.08452,18.09148 87385,Pietrzykowice,1623,SL,176,PL,49.69634,19.1599 87388,Pilchowice,1623,SL,176,PL,50.21668,18.56132 87390,Pilica,1623,SL,176,PL,50.46799,19.65729 87395,Pisarzowice,1623,SL,176,PL,49.88363,19.14565 87426,Pogórze,1623,SL,176,PL,49.79961,18.84327 87422,Pogrzebień,1623,SL,176,PL,50.06722,18.29876 87423,Pogwizdów,1623,SL,176,PL,49.80382,18.60106 87779,Połomia,1623,SL,176,PL,49.99185,18.55102 87446,Porąbka,1623,SL,176,PL,49.81716,19.21835 87443,Poraj,1623,SL,176,PL,50.67797,19.21509 87449,Poręba,1623,SL,176,PL,50.48831,19.33903 87454,Potok Złoty,1623,SL,176,PL,50.70676,19.43091 87481,Powiat będziński,1623,SL,176,PL,50.32924,19.10419 87465,Powiat bielski,1623,SL,176,PL,49.76175,19.1066 87467,Powiat bieruńsko-lędziński,1623,SL,176,PL,50.09356,19.1427 87489,Powiat cieszyński,1623,SL,176,PL,49.72628,18.79147 87491,Powiat częstochowski,1623,SL,176,PL,50.84118,19.34045 87503,Powiat gliwicki,1623,SL,176,PL,50.36266,18.58107 87562,Powiat kłobucki,1623,SL,176,PL,50.93274,18.87005 87578,Powiat lubliniecki,1623,SL,176,PL,50.67367,18.79378 87585,Powiat mikołowski,1623,SL,176,PL,50.15133,18.83689 87593,Powiat myszkowski,1623,SL,176,PL,50.60554,19.35125 87648,Powiat pszczyński,1623,SL,176,PL,49.98987,18.88177 87655,Powiat raciborski,1623,SL,176,PL,50.08696,18.26916 87663,Powiat rybnicki,1623,SL,176,PL,50.10385,18.46527 87702,Powiat tarnogórski,1623,SL,176,PL,50.47264,18.86265 87720,Powiat wodzisławski,1623,SL,176,PL,49.99323,18.42504 87738,Powiat zawierciański,1623,SL,176,PL,50.54225,19.61192 87769,Powiat żywiecki,1623,SL,176,PL,49.61145,19.21367 87793,Pruchna,1623,SL,176,PL,49.86527,18.68191 87821,Przyborów,1623,SL,176,PL,49.6215,19.38701 87826,Przyrów,1623,SL,176,PL,50.80051,19.52794 87827,Przystajń,1623,SL,176,PL,50.88495,18.69169 87829,Przyszowice,1623,SL,176,PL,50.24841,18.74594 87838,Psary,1623,SL,176,PL,50.6147,18.96991 87843,Pszczyna,1623,SL,176,PL,49.98037,18.95382 87845,Pszów,1623,SL,176,PL,50.03994,18.39472 87853,Puńców,1623,SL,176,PL,49.71842,18.66157 87856,Pyskowice,1623,SL,176,PL,50.4,18.63333 87872,Racibórz,1623,SL,176,PL,50.09195,18.21928 87882,Radlin,1623,SL,176,PL,50.0502,18.47626 87889,Radostowice,1623,SL,176,PL,50.00311,18.88103 87896,Radziechowy,1623,SL,176,PL,49.64651,19.13115 87899,Radzionków,1623,SL,176,PL,50.40026,18.90232 87906,Rajcza,1623,SL,176,PL,49.50927,19.11278 87913,Raszczyce,1623,SL,176,PL,50.1219,18.29962 88038,Rędziny,1623,SL,176,PL,50.85922,19.2162 87948,Rogów,1623,SL,176,PL,49.99097,18.35077 87945,Rogoźnik,1623,SL,176,PL,50.39106,19.03776 87959,Rokitno Szlacheckie,1623,SL,176,PL,50.43195,19.43293 87971,Ruda Śląska,1623,SL,176,PL,50.2584,18.85632 87979,Rudnik,1623,SL,176,PL,50.12729,18.18598 87982,Rudniki,1623,SL,176,PL,50.52134,19.4313 87983,Rudy,1623,SL,176,PL,50.19003,18.45334 87984,Rudziczka,1623,SL,176,PL,50.03608,18.76225 87985,Rudziniec,1623,SL,176,PL,50.35324,18.40914 87991,Rybarzowice,1623,SL,176,PL,49.72956,19.10162 87994,Rybnik,1623,SL,176,PL,50.09713,18.54179 87997,Rycerka Dolna,1623,SL,176,PL,49.47805,19.06162 87998,Rycerka Górna,1623,SL,176,PL,49.44436,19.01596 88004,Rydułtowy,1623,SL,176,PL,50.05857,18.41703 88325,Sączów,1623,SL,176,PL,50.4352,19.03038 88052,Sarnów,1623,SL,176,PL,50.3738,19.15061 88071,Siemianowice Śląskie,1623,SL,176,PL,50.32738,19.02901 88089,Sieraków Śląski,1623,SL,176,PL,50.8029,18.57548 88093,Siewierz,1623,SL,176,PL,50.46657,19.23028 88108,Skoczów,1623,SL,176,PL,49.80089,18.7877 88118,Skrzyszów,1623,SL,176,PL,49.94873,18.48879 88830,Ślemień,1623,SL,176,PL,49.71826,19.36735 88337,Sławków,1623,SL,176,PL,50.29943,19.38967 88324,Sól,1623,SL,176,PL,49.48764,19.04171 88149,Sopotnia Wielka,1623,SL,176,PL,49.56853,19.28289 88158,Sośnicowice,1623,SL,176,PL,50.27214,18.52982 88152,Sosnowiec,1623,SL,176,PL,50.27119,19.19463 88171,Stanowice,1623,SL,176,PL,50.13037,18.67084 88180,Starcza,1623,SL,176,PL,50.66421,19.0418 88191,Starokrzepice,1623,SL,176,PL,50.94859,18.65341 88218,Strumień,1623,SL,176,PL,49.92103,18.76637 88223,Strzebiń,1623,SL,176,PL,50.61647,18.89794 88235,Strzyżowice,1623,SL,176,PL,50.38725,19.08038 88240,Studzionka,1623,SL,176,PL,49.96232,18.7728 88268,Suszec,1623,SL,176,PL,50.02958,18.7916 88854,Świerklaniec,1623,SL,176,PL,50.44237,18.93734 88855,Świerklany Dolne,1623,SL,176,PL,50.01827,18.57702 88856,Świerklany Górne,1623,SL,176,PL,50.02765,18.5905 88867,Świętochłowice,1623,SL,176,PL,50.29636,18.91726 88861,Świnna,1623,SL,176,PL,49.65802,19.25406 88282,Syrynia,1623,SL,176,PL,50.02004,18.34597 88295,Szczekociny,1623,SL,176,PL,50.62669,19.825 88297,Szczerbice,1623,SL,176,PL,50.09416,18.44896 88303,Szczyrk,1623,SL,176,PL,49.71724,19.03183 88364,Tarnowskie Góry,1623,SL,176,PL,50.44548,18.86147 88386,Toszek,1623,SL,176,PL,50.45442,18.52209 88392,Truskolasy,1623,SL,176,PL,50.86692,18.82705 88406,Trzebinia,1623,SL,176,PL,49.65024,19.22264 88427,Turza Śląska,1623,SL,176,PL,49.97231,18.43781 88433,Tworków,1623,SL,176,PL,50.00559,18.23576 88434,Tworóg,1623,SL,176,PL,50.531,18.71572 88436,Tychy,1623,SL,176,PL,50.13717,18.96641 88451,Ujsoły,1623,SL,176,PL,49.4829,19.13801 88464,Ustroń,1623,SL,176,PL,49.72153,18.80198 88638,Węgierska Górka,1623,SL,176,PL,49.60776,19.11638 88510,Wielowieś,1623,SL,176,PL,50.50966,18.61608 88513,Wieprz,1623,SL,176,PL,49.64746,19.18007 88527,Wieszowa,1623,SL,176,PL,50.38444,18.75924 88530,Wilamowice,1623,SL,176,PL,49.91701,19.15237 88532,Wilcza,1623,SL,176,PL,50.18899,18.59668 88538,Wilkowice,1623,SL,176,PL,49.76282,19.08973 88547,Wisła,1623,SL,176,PL,49.65629,18.8591 88651,Włodowice,1623,SL,176,PL,50.5556,19.45155 88569,Wodzisław Śląski,1623,SL,176,PL,50.00377,18.47205 88576,Wojkowice,1623,SL,176,PL,50.36509,19.03652 88581,Wola,1623,SL,176,PL,50.01745,19.12333 88603,Wożniki,1623,SL,176,PL,50.58934,19.05991 88609,Wręczyca Wielka,1623,SL,176,PL,50.84589,18.92086 88613,Wyry,1623,SL,176,PL,50.13296,18.90052 88618,Wysoka,1623,SL,176,PL,50.42989,19.35368 88662,Zabłocie,1623,SL,176,PL,49.90282,18.78147 88870,Żabnica,1623,SL,176,PL,49.58139,19.15621 88658,Zaborze,1623,SL,176,PL,49.87279,18.8037 88659,Zabrze,1623,SL,176,PL,50.32492,18.78576 88660,Zabrzeg,1623,SL,176,PL,49.91619,18.94292 88689,Zamarski,1623,SL,176,PL,49.78254,18.66972 88873,Żarki,1623,SL,176,PL,50.62518,19.36357 88875,Żarki-Letnisko,1623,SL,176,PL,50.62295,19.27508 88697,Zarzecze,1623,SL,176,PL,49.71932,19.17526 88704,Zawidów,1623,SL,176,PL,51.02546,15.06213 88705,Zawiercie,1623,SL,176,PL,50.48766,19.41679 88709,Zbrosławice,1623,SL,176,PL,50.41612,18.75443 88711,Zbytków,1623,SL,176,PL,49.92288,18.72697 88721,Zebrzydowice,1623,SL,176,PL,49.87793,18.61127 88885,Żernica,1623,SL,176,PL,50.2477,18.61547 88890,Żory,1623,SL,176,PL,50.04523,18.70062 88901,Żywiec,1623,SL,176,PL,49.68529,19.19243 85819,Baćkowice,1630,SK,176,PL,50.79194,21.23211 85820,Bałtów,1630,SK,176,PL,51.01845,21.54385 85823,Bejsce,1630,SK,176,PL,50.23903,20.59834 85858,Bieliny,1630,SK,176,PL,50.84947,20.94149 85883,Bliżyn,1630,SK,176,PL,51.10778,20.75935 85894,Bodzentyn,1630,SK,176,PL,50.94115,20.95719 85897,Bogoria,1630,SK,176,PL,50.65175,21.26 85945,Brody,1630,SK,176,PL,51.02466,21.22147 85963,Brzeziny,1630,SK,176,PL,50.77273,20.57319 85996,Busko-Zdrój,1630,SK,176,PL,50.47078,20.71884 86073,Chęciny,1630,SK,176,PL,50.80021,20.46229 86034,Chmielnik,1630,SK,176,PL,50.6144,20.75206 88754,Ćmielów,1630,SK,176,PL,50.89028,21.51426 86113,Czarnocin,1630,SK,176,PL,50.3408,20.5162 86154,Daleszyce,1630,SK,176,PL,50.80229,20.80791 86186,Domaszowice,1630,SK,176,PL,50.87488,20.68288 86210,Dwikozy,1630,SK,176,PL,50.73613,21.78864 86217,Działoszyce,1630,SK,176,PL,50.36534,20.35226 86268,Fałków,1630,SK,176,PL,51.13606,20.1061 86316,Gnojno,1630,SK,176,PL,50.60263,20.84913 86415,Górno,1630,SK,176,PL,50.84774,20.82501 86350,Gowarczów,1630,SK,176,PL,51.27845,20.43835 86396,Grzybowa Góra,1630,SK,176,PL,51.13326,20.96174 86458,Imielno,1630,SK,176,PL,50.58569,20.44813 86463,Iwaniska,1630,SK,176,PL,50.73146,21.2806 86578,Jędrzejów,1630,SK,176,PL,50.63945,20.30454 86607,Kaniów,1630,SK,176,PL,50.98577,20.66391 86627,Kazimierza Wielka,1630,SK,176,PL,50.26564,20.49358 86633,Kielce,1630,SK,176,PL,50.87033,20.62752 86638,Kije,1630,SK,176,PL,50.60721,20.57121 86650,Klimontów,1630,SK,176,PL,50.65588,21.45587 86750,Końskie,1630,SK,176,PL,51.19166,20.40607 86699,Koprzywnica,1630,SK,176,PL,50.5934,21.5838 86712,Kostomłoty Drugie,1630,SK,176,PL,50.92684,20.56529 86713,Kostomłoty Pierwsze,1630,SK,176,PL,50.92322,20.5949 86774,Krasocin,1630,SK,176,PL,50.88874,20.11863 86839,Kunów,1630,SK,176,PL,50.96156,21.28058 86916,Lipnik,1630,SK,176,PL,50.72977,21.49389 88814,Łączna,1630,SK,176,PL,51.00231,20.79712 88759,Łagów,1630,SK,176,PL,50.77517,21.08431 88787,Łoniów,1630,SK,176,PL,50.56443,21.52599 88791,Łopuszno,1630,SK,176,PL,50.94864,20.25081 88798,Łubnice,1630,SK,176,PL,50.41164,21.15014 87008,Małogoszcz,1630,SK,176,PL,50.81214,20.26407 87003,Masłów,1630,SK,176,PL,50.90065,20.72322 87023,Michałów,1630,SK,176,PL,50.49541,20.46178 87028,Miedziana Góra,1630,SK,176,PL,50.9368,20.55096 87057,Mirzec,1630,SK,176,PL,51.13466,21.0571 87079,Mniów,1630,SK,176,PL,51.01224,20.48427 87090,Morawica,1630,SK,176,PL,50.74678,20.61756 87132,Nagłowice,1630,SK,176,PL,50.67835,20.10661 87176,Nowa Słupia,1630,SK,176,PL,50.86432,21.09049 87204,Nowy Korczyn,1630,SK,176,PL,50.30124,20.80759 87218,Obrazów,1630,SK,176,PL,50.69276,21.65045 87235,Oksa,1630,SK,176,PL,50.72874,20.10086 87240,Oleśnica,1630,SK,176,PL,50.45357,21.06457 87256,Opatów,1630,SK,176,PL,50.80058,21.42538 87255,Opatowiec,1630,SK,176,PL,50.24314,20.72348 87282,Osiedle-Nowiny,1630,SK,176,PL,50.8177,20.54117 87283,Osiek,1630,SK,176,PL,50.51996,21.44192 87299,Ostrowiec Świętokrzyski,1630,SK,176,PL,50.92936,21.38525 87327,Ożarów,1630,SK,176,PL,50.88798,21.66658 87331,Pacanów,1630,SK,176,PL,50.40031,21.04148 87360,Pawłów,1630,SK,176,PL,50.96216,21.12062 87378,Piekoszów,1630,SK,176,PL,50.88035,20.46418 87381,Pierzchnica,1630,SK,176,PL,50.69754,20.75489 87405,Pińczów,1630,SK,176,PL,50.52052,20.52649 87776,Połaniec,1630,SK,176,PL,50.43324,21.2812 87478,Powiat buski,1630,SK,176,PL,50.45583,20.87624 87532,Powiat jędrzejowski,1630,SK,176,PL,50.65676,20.18655 87537,Powiat kazimierski,1630,SK,176,PL,50.28811,20.53368 87538,Powiat kielecki,1630,SK,176,PL,50.80156,20.63322 87543,Powiat konecki,1630,SK,176,PL,51.15145,20.34186 87615,Powiat opatowski,1630,SK,176,PL,50.79639,21.44531 87619,Powiat ostrowiecki,1630,SK,176,PL,50.94232,21.40739 87635,Powiat pińczowski,1630,SK,176,PL,50.49968,20.47253 87667,Powiat sandomierski,1630,SK,176,PL,50.69508,21.609 87674,Powiat skarżyski,1630,SK,176,PL,51.06496,20.79228 87680,Powiat starachowicki,1630,SK,176,PL,51.05365,21.14295 87683,Powiat staszowski,1630,SK,176,PL,50.51737,21.19594 87735,Powiat włoszczowski,1630,SK,176,PL,50.83205,19.97696 87890,Radoszyce,1630,SK,176,PL,51.07392,20.25836 87911,Raków,1630,SK,176,PL,50.67427,21.04517 87947,Rogów,1630,SK,176,PL,51.20414,20.43483 87970,Ruda Maleniecka,1630,SK,176,PL,51.14592,20.22377 88014,Rytwiany,1630,SK,176,PL,50.5292,21.20636 88043,Sadowie,1630,SK,176,PL,50.85261,21.36884 88045,Samborzec,1630,SK,176,PL,50.64663,21.64822 88046,Sandomierz,1630,SK,176,PL,50.68265,21.74898 88054,Secemin,1630,SK,176,PL,50.76676,19.83599 88328,Sędziszów,1630,SK,176,PL,50.5659,20.05563 88095,Skalbmierz,1630,SK,176,PL,50.31993,20.39929 88100,Skarżysko Kościelne,1630,SK,176,PL,51.13822,20.91196 88101,Skarżysko-Kamienna,1630,SK,176,PL,51.11311,20.87162 88348,Słupia,1630,SK,176,PL,50.60073,19.97435 88127,Smyków,1630,SK,176,PL,51.04442,20.40032 88131,Sobków,1630,SK,176,PL,50.69999,20.45062 88144,Solec-Zdrój,1630,SK,176,PL,50.36594,20.88956 88242,Stąporków,1630,SK,176,PL,51.13762,20.57173 88179,Starachowice,1630,SK,176,PL,51.0374,21.07126 88198,Staszów,1630,SK,176,PL,50.56307,21.16593 88207,Stopnica,1630,SK,176,PL,50.44018,20.9378 88214,Strawczyn,1630,SK,176,PL,50.94177,20.42135 88250,Suchedniów,1630,SK,176,PL,51.04776,20.82922 88322,Szydłów,1630,SK,176,PL,50.59114,21.0068 88368,Tarłów,1630,SK,176,PL,51.0016,21.71474 88421,Tuczępy,1630,SK,176,PL,50.51676,20.99187 88632,Wąchock,1630,SK,176,PL,51.07391,21.01243 88489,Waśniów,1630,SK,176,PL,50.89914,21.22301 88506,Wielka Wieś,1630,SK,176,PL,51.07107,20.96655 88534,Wilczyce,1630,SK,176,PL,50.74694,21.65783 88560,Wiślica,1630,SK,176,PL,50.34891,20.67438 88654,Włoszczowa,1630,SK,176,PL,50.85256,19.96593 88568,Wodzisław,1630,SK,176,PL,50.52047,20.1915 88572,Wojciechowice,1630,SK,176,PL,50.84226,21.58942 88585,Wola Jachowa,1630,SK,176,PL,50.84524,20.85814 88666,Zagnańsk,1630,SK,176,PL,50.98037,20.66314 88702,Zawichost,1630,SK,176,PL,50.80743,21.85408 88744,Złota,1630,SK,176,PL,50.3816,20.59361 85799,Banie Mazurskie,1628,WN,176,PL,54.24662,22.03617 85807,Barciany,1628,WN,176,PL,54.21993,21.35347 85809,Barczewo,1628,WN,176,PL,53.83055,20.69112 85813,Bartoszyce,1628,WN,176,PL,54.25354,20.80819 85835,Biała Piska,1628,WN,176,PL,53.61191,22.06321 85874,Biskupiec,1628,WN,176,PL,53.86467,20.95692 85877,Bisztynek,1628,WN,176,PL,54.08633,20.90192 85936,Braniewo,1628,WN,176,PL,54.37971,19.81959 86145,Czerwonka,1628,WN,176,PL,53.91627,20.89685 86245,Dąbrówno,1628,WN,176,PL,53.43408,20.03529 86172,Dobre Miasto,1628,WN,176,PL,53.98668,20.39749 86214,Dywity,1628,WN,176,PL,53.83759,20.47817 86216,Działdowo,1628,WN,176,PL,53.23958,20.17004 86263,Dźwierzuty,1628,WN,176,PL,53.70494,20.96037 86264,Elbląg,1628,WN,176,PL,54.1522,19.40884 86265,Ełk,1628,WN,176,PL,53.82824,22.36469 86275,Frombork,1628,WN,176,PL,54.35766,19.68029 86301,Gierłoż,1628,WN,176,PL,54.08134,21.49551 86300,Gierzwałd,1628,WN,176,PL,53.54128,20.08867 86302,Gietrzwałd,1628,WN,176,PL,53.74617,20.23742 86305,Giżycko,1628,WN,176,PL,54.03811,21.76441 86355,Gołdap,1628,WN,176,PL,54.30631,22.30362 86417,Górowo Iławeckie,1628,WN,176,PL,54.28559,20.48886 86382,Gronowo Elbląskie,1628,WN,176,PL,54.08588,19.30598 86383,Gronowo Górne,1628,WN,176,PL,54.13863,19.45988 86472,Iława,1628,WN,176,PL,53.59601,19.56849 86474,Iłowo -Osada,1628,WN,176,PL,53.16808,20.29295 86546,Jedwabno,1628,WN,176,PL,53.5299,20.72657 86556,Jeziorany,1628,WN,176,PL,53.97578,20.74639 86567,Jonkowo,1628,WN,176,PL,53.82817,20.31054 86858,Kętrzyn,1628,WN,176,PL,54.07676,21.37527 86640,Kisielice,1628,WN,176,PL,53.60855,19.2635 86706,Korsze,1628,WN,176,PL,54.17002,21.13915 86707,Kortowo,1628,WN,176,PL,53.75731,20.4562 86728,Kowale Oleckie,1628,WN,176,PL,54.16354,22.41666 86738,Kozłowo,1628,WN,176,PL,53.30652,20.29098 86791,Kruklanki,1628,WN,176,PL,54.08855,21.92227 86842,Kurzętnik,1628,WN,176,PL,53.39858,19.57858 86879,Lelkowo,1628,WN,176,PL,54.32458,20.2248 86899,Lidzbark,1628,WN,176,PL,53.26283,19.82663 86900,Lidzbark Warmiński,1628,WN,176,PL,54.12588,20.57954 86934,Lubawa,1628,WN,176,PL,53.50428,19.74966 86954,Lubomino,1628,WN,176,PL,54.06684,20.23956 87006,Małdyty,1628,WN,176,PL,53.91981,19.74398 87042,Mikołajki,1628,WN,176,PL,53.80288,21.57011 87070,Miłakowo,1628,WN,176,PL,54.00923,20.07125 87072,Miłomłyn,1628,WN,176,PL,53.76449,19.838 87129,Młynary,1628,WN,176,PL,54.1869,19.72149 87093,Morąg,1628,WN,176,PL,53.91711,19.92602 87106,Mrągowo,1628,WN,176,PL,53.86437,21.30507 87146,Nidzica,1628,WN,176,PL,53.36052,20.42749 87186,Nowe Miasto Lubawskie,1628,WN,176,PL,53.42079,19.59515 87236,Olecko,1628,WN,176,PL,54.03374,22.50704 87248,Olsztyn,1628,WN,176,PL,53.77657,20.46657 87249,Olsztynek,1628,WN,176,PL,53.58374,20.28471 87268,Orneta,1628,WN,176,PL,54.11483,20.13328 87274,Orzysz,1628,WN,176,PL,53.80967,21.94811 87307,Ostróda,1628,WN,176,PL,53.69671,19.96486 87353,Pasłęk,1628,WN,176,PL,54.0616,19.65932 87351,Pasym,1628,WN,176,PL,53.65069,20.79188 87374,Piecki,1628,WN,176,PL,53.75759,21.33914 87380,Pieniężno,1628,WN,176,PL,54.23649,20.12833 87398,Pisz,1628,WN,176,PL,53.62744,21.81253 87459,Powiat bartoszycki,1628,WN,176,PL,54.21253,20.74076 87472,Powiat braniewski,1628,WN,176,PL,54.27782,20.0063 87494,Powiat działdowski,1628,WN,176,PL,53.28883,20.04817 87498,Powiat elbląski,1628,WN,176,PL,54.15928,19.63768 87499,Powiat ełcki,1628,WN,176,PL,53.81673,22.40465 87502,Powiat giżycki,1628,WN,176,PL,54.01808,21.82191 87511,Powiat gołdapski,1628,WN,176,PL,54.2609,22.37192 87525,Powiat iławski,1628,WN,176,PL,53.67477,19.53792 87561,Powiat kętrzyński,1628,WN,176,PL,54.13651,21.31217 87569,Powiat lidzbarski,1628,WN,176,PL,54.10581,20.38045 87592,Powiat mrągowski,1628,WN,176,PL,53.81063,21.39758 87599,Powiat nidzicki,1628,WN,176,PL,53.3724,20.49858 87603,Powiat nowomiejski,1628,WN,176,PL,53.43572,19.54662 87610,Powiat olecki,1628,WN,176,PL,54.05129,22.41695 87614,Powiat olsztyński,1628,WN,176,PL,53.72922,20.56641 87624,Powiat ostródzki,1628,WN,176,PL,53.72906,19.9144 87634,Powiat piski,1628,WN,176,PL,53.68076,21.85723 87693,Powiat szczycieński,1628,WN,176,PL,53.54176,21.07034 87731,Powiat węgorzewski,1628,WN,176,PL,54.20728,21.77861 87773,Pozezdrze,1628,WN,176,PL,54.14147,21.8597 87791,Prostki,1628,WN,176,PL,53.69901,22.43183 87848,Purda,1628,WN,176,PL,53.70844,20.70683 87939,Reszel,1628,WN,176,PL,54.05042,21.14585 87965,Rozogi,1628,WN,176,PL,53.48549,21.36223 87969,Ruciane-Nida,1628,WN,176,PL,53.64161,21.53964 87996,Rybno,1628,WN,176,PL,53.38348,19.93229 88011,Ryn,1628,WN,176,PL,53.9377,21.54642 88332,Sępopol,1628,WN,176,PL,54.26903,21.01453 88163,Srokowo,1628,WN,176,PL,54.21416,21.52282 88184,Stare Juchy,1628,WN,176,PL,53.92198,22.17367 88199,Stawiguda,1628,WN,176,PL,53.6572,20.40041 88267,Susz,1628,WN,176,PL,53.71743,19.33645 88276,Swiętajno,1628,WN,176,PL,54.00151,22.3183 88305,Szczytno,1628,WN,176,PL,53.56259,20.98747 88377,Tolkmicko,1628,WN,176,PL,54.32038,19.52695 88641,Węgorzewo,1628,WN,176,PL,54.21567,21.7372 88498,Wielbark,1628,WN,176,PL,53.39858,20.94629 88611,Wydminy,1628,WN,176,PL,53.98194,22.03239 88688,Zalewo,1628,WN,176,PL,53.84534,19.60519 85798,Banie,1633,ZP,176,PL,53.10031,14.66228 85811,Barlinek,1633,ZP,176,PL,52.99464,15.21864 85817,Barwice,1633,ZP,176,PL,53.7449,16.3553 85844,Białogard,1633,ZP,176,PL,54.00696,15.98751 85848,Biały Bór,1633,ZP,176,PL,53.8967,16.83543 85856,Bielice,1633,ZP,176,PL,53.20022,14.7276 85868,Bierzwnik,1633,ZP,176,PL,53.03567,15.665 85884,Bobolice,1633,ZP,176,PL,53.95508,16.58893 85909,Boleszkowice,1633,ZP,176,PL,52.72493,14.56901 85922,Borne Sulinowo,1633,ZP,176,PL,53.57661,16.53395 85950,Brojce,1633,ZP,176,PL,53.95705,15.35975 86019,Cedynia,1633,ZP,176,PL,52.87931,14.20249 86024,Cerkwica,1633,ZP,176,PL,54.00777,15.10903 86040,Chociwel,1633,ZP,176,PL,53.46696,15.33342 86048,Chojna,1633,ZP,176,PL,52.96389,14.42797 86056,Choszczno,1633,ZP,176,PL,53.16905,15.42054 86101,Czaplinek,1633,ZP,176,PL,53.55775,16.23333 86151,Człopa,1633,ZP,176,PL,53.08856,16.12098 86158,Darłowo,1633,ZP,176,PL,54.42095,16.4107 86252,Dębno,1633,ZP,176,PL,52.73901,14.698 86168,Dobra,1633,ZP,176,PL,53.58625,15.30977 86176,Dobrzany,1633,ZP,176,PL,53.35914,15.42886 86181,Dolice,1633,ZP,176,PL,53.19081,15.20267 86193,Drawno,1633,ZP,176,PL,53.21986,15.75946 86195,Drawsko Pomorskie,1633,ZP,176,PL,53.53056,15.80967 86212,Dygowo,1633,ZP,176,PL,54.13031,15.71993 86230,Dziwnów,1633,ZP,176,PL,54.02819,14.76691 86325,Golczewo,1633,ZP,176,PL,53.82426,14.97847 86326,Goleniów,1633,ZP,176,PL,53.56392,14.82854 86361,Gościno,1633,ZP,176,PL,54.05123,15.65256 86390,Gryfice,1633,ZP,176,PL,53.9165,15.20027 86391,Gryfino,1633,ZP,176,PL,53.25243,14.48831 86395,Grzmiąca,1633,ZP,176,PL,53.83734,16.43512 86397,Grzybowo,1633,ZP,176,PL,54.15892,15.48557 86477,Ińsko,1633,ZP,176,PL,53.43613,15.5502 86587,Kalisz Pomorski,1633,ZP,176,PL,53.29908,15.90631 86601,Kamień Pomorski,1633,ZP,176,PL,53.96849,14.77262 86612,Karlino,1633,ZP,176,PL,54.03515,15.87739 86613,Karnice,1633,ZP,176,PL,54.03001,15.05496 86665,Kobylanka,1633,ZP,176,PL,53.34492,14.87143 86742,Kołbaskowo,1633,ZP,176,PL,53.33641,14.43835 86746,Kołobrzeg,1633,ZP,176,PL,54.17565,15.58342 86716,Koszalin,1633,ZP,176,PL,54.19438,16.17222 86826,Krzęcin,1633,ZP,176,PL,53.0816,15.49008 86906,Lipiany,1633,ZP,176,PL,53.00336,14.96919 88779,Łobez,1633,ZP,176,PL,53.63918,15.62129 88800,Łubowo,1633,ZP,176,PL,53.58634,16.39177 86993,Marianowo,1633,ZP,176,PL,53.38287,15.26645 87000,Maszewo,1633,ZP,176,PL,53.49615,15.06166 87066,Międzyzdroje,1633,ZP,176,PL,53.92921,14.45097 87037,Mielno,1633,ZP,176,PL,54.26086,16.0621 87040,Mieszkowice,1633,ZP,176,PL,52.7873,14.49346 87055,Mirosławiec,1633,ZP,176,PL,53.34071,16.08793 87092,Moryń,1633,ZP,176,PL,52.85769,14.39297 87095,Mosty,1633,ZP,176,PL,53.54796,14.95634 87105,Mrzeżyno,1633,ZP,176,PL,54.14384,15.29142 87124,Myślibórz,1633,ZP,176,PL,52.92382,14.86785 87192,Nowe Warpno,1633,ZP,176,PL,53.72256,14.28961 87194,Nowogard,1633,ZP,176,PL,53.67437,15.1163 87198,Nowogródek Pomorski,1633,ZP,176,PL,52.91149,15.02947 87293,Osina,1633,ZP,176,PL,53.60473,15.0123 87367,Pełczyce,1633,ZP,176,PL,53.04354,15.30447 87866,Płoty,1633,ZP,176,PL,53.80182,15.2667 87411,Pobierowo,1633,ZP,176,PL,54.061,14.93282 87432,Polanów,1633,ZP,176,PL,54.1193,16.68512 87434,Police,1633,ZP,176,PL,53.55214,14.57182 87777,Połczyn-Zdrój,1633,ZP,176,PL,53.76424,16.09574 87463,Powiat białogardzki,1633,ZP,176,PL,53.97686,16.08855 87486,Powiat choszczeński,1633,ZP,176,PL,53.14277,15.62112 87493,Powiat drawski,1633,ZP,176,PL,53.44743,16.02132 87505,Powiat goleniowski,1633,ZP,176,PL,53.61035,14.85421 87516,Powiat gryficki,1633,ZP,176,PL,53.94293,15.19082 87517,Powiat gryfiński,1633,ZP,176,PL,53.02298,14.49912 87535,Powiat kamieński,1633,ZP,176,PL,53.91096,14.7442 87547,Powiat kołobrzeski,1633,ZP,176,PL,54.05013,15.61394 87545,Powiat koszaliński,1633,ZP,176,PL,54.1097,16.30231 87749,Powiat łobeski,1633,ZP,176,PL,53.67294,15.47237 87595,Powiat myśliborski,1633,ZP,176,PL,52.85474,14.88454 87638,Powiat policki,1633,ZP,176,PL,53.53114,14.45104 87652,Powiat pyrzycki,1633,ZP,176,PL,53.12558,14.94045 87697,Powiat sławieński,1633,ZP,176,PL,54.3791,16.53986 87681,Powiat stargardzki,1633,ZP,176,PL,53.3152,15.22684 87761,Powiat świdwiński,1633,ZP,176,PL,53.80758,15.89859 87692,Powiat szczecinecki,1633,ZP,176,PL,53.73766,16.58957 87715,Powiat wałecki,1633,ZP,176,PL,53.23633,16.33851 87805,Przecław,1633,ZP,176,PL,53.37447,14.47251 87810,Przelewice,1633,ZP,176,PL,53.10413,15.07625 87819,Przybiernów,1633,ZP,176,PL,53.7578,14.78529 87855,Pyrzyce,1633,ZP,176,PL,53.1462,14.89257 88035,Rąbino,1633,ZP,176,PL,53.8663,15.94485 87891,Radowo Małe,1633,ZP,176,PL,53.66575,15.44789 87920,Recz,1633,ZP,176,PL,53.25989,15.54713 87938,Resko,1633,ZP,176,PL,53.77307,15.40607 87940,Rewal,1633,ZP,176,PL,54.0812,15.01471 88010,Rymań,1633,ZP,176,PL,53.94391,15.52866 88059,Sianów,1633,ZP,176,PL,54.22646,16.29127 88339,Sławno,1633,ZP,176,PL,54.36276,16.67888 88340,Sławoborze,1633,ZP,176,PL,53.88992,15.70667 88174,Stara Dąbrowa,1633,ZP,176,PL,53.42191,15.14405 88183,Stare Czarnowo,1633,ZP,176,PL,53.27861,14.77906 88189,Stargard,1633,ZP,176,PL,53.33672,15.0499 88203,Stepnica,1633,ZP,176,PL,53.65187,14.62555 88249,Suchań,1633,ZP,176,PL,53.28003,15.32541 88844,Świdwin,1633,ZP,176,PL,53.77464,15.77671 88858,Świerzno,1633,ZP,176,PL,53.96497,14.96544 88862,Świnoujście,1633,ZP,176,PL,53.91053,14.24712 88293,Szczecin,1633,ZP,176,PL,53.42894,14.55302 88294,Szczecinek,1633,ZP,176,PL,53.70791,16.69937 88400,Trzcińsko Zdrój,1633,ZP,176,PL,52.96487,14.60667 88401,Trzebiatów,1633,ZP,176,PL,54.06147,15.26475 88420,Tuczno,1633,ZP,176,PL,53.19374,16.15368 88435,Tychowo,1633,ZP,176,PL,53.92774,16.25771 88463,Ustronie Morskie,1633,ZP,176,PL,54.21517,15.75568 88488,Wałcz,1633,ZP,176,PL,53.27787,16.47122 88479,Warnice,1633,ZP,176,PL,53.25376,14.99402 88642,Węgorzyno,1633,ZP,176,PL,53.54101,15.55964 88496,Widuchowa,1633,ZP,176,PL,53.12693,14.39074 88525,Wierzchowo,1633,ZP,176,PL,53.46013,16.09961 88596,Wolin,1633,ZP,176,PL,53.84214,14.61465 88742,Złocieniec,1633,ZP,176,PL,53.53286,16.01132 89692,Água de Pau,2233,20,177,PT,37.72142,-25.5117 88968,Angra do Heroísmo,2233,20,177,PT,38.65483,-27.21734 88969,Angústias,2233,20,177,PT,38.52547,-28.63132 88994,Arrifes,2233,20,177,PT,37.76667,-25.7 89037,Biscoitos,2233,20,177,PT,38.78333,-27.25 89057,Cabouco,2233,20,177,PT,37.76667,-25.56667 89062,Cais do Pico,2233,20,177,PT,38.52531,-28.32074 89069,Calheta,2233,20,177,PT,38.60186,-28.01792 89070,Calheta de São Jorge,2233,20,177,PT,38.59767,-27.91459 89105,Castelo Branco,2233,20,177,PT,38.52198,-28.71365 89131,Corvo,2233,20,177,PT,39.69771,-31.1055 89163,Fajã de Baixo,2233,20,177,PT,37.75,-25.65 89172,Fenais da Ajuda,2233,20,177,PT,37.85128,-25.32406 89173,Fenais da Luz,2233,20,177,PT,37.8249,-25.64229 89181,Feteira,2233,20,177,PT,38.65429,-27.14995 89187,Fonte Bastardo,2233,20,177,PT,38.69201,-27.07942 89199,Furnas,2233,20,177,PT,37.77567,-25.31035 89223,Horta,2233,20,177,PT,38.53737,-28.62615 89228,Lagoa,2233,20,177,PT,37.74486,-25.57184 89231,Lajes,2233,20,177,PT,38.76352,-27.10336 89232,Lajes das Flores,2233,20,177,PT,39.41619,-31.21725 89233,Lajes do Pico,2233,20,177,PT,38.42797,-28.17402 89267,Madalena,2233,20,177,PT,38.53642,-28.5266 89269,Maia,2233,20,177,PT,37.83247,-25.38976 89333,Mosteiros,2233,20,177,PT,37.89017,-25.81999 89350,Nordeste,2233,20,177,PT,37.82721,-25.22863 89412,Ponta Delgada,2233,20,177,PT,37.7423,-25.67093 89413,Ponta Garça,2233,20,177,PT,37.71667,-25.36667 89427,Porto Judeu,2233,20,177,PT,38.64814,-27.11944 89428,Porto Martins,2233,20,177,PT,38.68146,-27.05835 89434,Povoação,2233,20,177,PT,37.76471,-25.24487 89437,Praia da Vitória,2233,20,177,PT,38.73333,-27.06667 89451,Rabo de Peixe,2233,20,177,PT,37.81022,-25.58263 89460,Relva,2233,20,177,PT,37.75271,-25.71848 89466,Ribeira Grande,2233,20,177,PT,38.51667,-28.7 89467,Ribeira Seca,2233,20,177,PT,37.81667,-25.53333 89469,Ribeirinha,2233,20,177,PT,38.66203,-27.18093 89479,Rosto de Cão,2233,20,177,PT,37.75,-25.65 89494,Santa Bárbara,2233,20,177,PT,38.69608,-27.33907 89502,Santa Cruz da Graciosa,2233,20,177,PT,39.04946,-28.00432 89501,Santa Cruz das Flores,2233,20,177,PT,39.46984,-31.18514 89558,São Bartolomeu,2233,20,177,PT,38.67491,-27.29349 89577,São Mateus,2233,20,177,PT,38.6563,-27.26935 89586,São Roque,2233,20,177,PT,37.75418,-25.64127 89588,São Roque do Pico,2233,20,177,PT,38.51631,-28.30752 89589,São Sebastião,2233,20,177,PT,38.66584,-27.08976 89592,São Vicente,2233,20,177,PT,37.81829,-25.66583 89529,Senhora do Rosário,2233,20,177,PT,37.83333,-25.15 89633,Velas,2233,20,177,PT,38.67995,-28.15155 89673,Vila do Porto,2233,20,177,PT,36.97454,-25.09967 89650,Vila Franca do Campo,2233,20,177,PT,37.71667,-25.43333 88910,Aguada de Cima,2235,01,177,PT,40.52291,-8.427 89695,Águeda,2235,01,177,PT,40.5772,-8.44442 88913,Albergaria-a-Velha,2235,01,177,PT,40.68706,-8.50399 88967,Anadia,2235,01,177,PT,40.43841,-8.43352 88976,Aradas,2235,01,177,PT,40.62084,-8.64195 88980,Arcos,2235,01,177,PT,40.44779,-8.44171 88986,Argoncilhe,2235,01,177,PT,41.02541,-8.53885 88989,Arouca,2235,01,177,PT,40.92658,-8.27251 88993,Arrifana,2235,01,177,PT,40.91565,-8.49657 89001,Avanca,2235,01,177,PT,40.80771,-8.5722 89003,Aveiro,2235,01,177,PT,40.64427,-8.64554 89025,Beduido,2235,01,177,PT,40.76427,-8.5611 89048,Branca,2235,01,177,PT,40.76653,-8.48262 89106,Castelo de Paiva,2235,01,177,PT,41.03353,-8.29822 89129,Cortegaça,2235,01,177,PT,40.94883,-8.6213 89137,Cucujães,2235,01,177,PT,40.87413,-8.50687 89141,Eixo,2235,01,177,PT,40.62758,-8.56922 89147,Esgueira,2235,01,177,PT,40.64899,-8.62943 89148,Esmoriz,2235,01,177,PT,40.95773,-8.62753 89149,Espargo,2235,01,177,PT,40.92462,-8.57495 89150,Espinho,2235,01,177,PT,41.00763,-8.64125 89153,Estarreja,2235,01,177,PT,40.75463,-8.57917 89170,Feira,2235,01,177,PT,40.92535,-8.54277 89185,Fiães,2235,01,177,PT,40.99446,-8.52537 89203,Gafanha da Encarnação,2235,01,177,PT,40.61806,-8.73303 89204,Gafanha da Nazaré,2235,01,177,PT,40.63621,-8.71338 89698,Ílhavo,2235,01,177,PT,40.60188,-8.67021 89234,Lamas,2235,01,177,PT,40.98597,-8.56923 89246,Lobão,2235,01,177,PT,40.98664,-8.48566 89254,Lourosa,2235,01,177,PT,40.9842,-8.55142 89257,Luso,2235,01,177,PT,40.38429,-8.37845 89263,Macieira de Cambra,2235,01,177,PT,40.85939,-8.37338 89287,Mealhada,2235,01,177,PT,40.36273,-8.44781 89298,Milheirós de Poiares,2235,01,177,PT,40.92163,-8.46788 89334,Mosteirô,2235,01,177,PT,40.89843,-8.53196 89338,Murtosa,2235,01,177,PT,40.74301,-8.64023 89349,Nogueira da Regedoura,2235,01,177,PT,41.0053,-8.59195 89355,Oiã,2235,01,177,PT,40.54264,-8.53856 89363,Oliveira de Azemeis,2235,01,177,PT,40.84101,-8.47555 89366,Oliveira do Bairro,2235,01,177,PT,40.50977,-8.56374 89370,Oliveirinha,2235,01,177,PT,40.60715,-8.59198 89374,Ovar,2235,01,177,PT,40.85862,-8.62513 89387,Paços de Brandão,2235,01,177,PT,40.97541,-8.5835 89379,Pampilhosa do Botão,2235,01,177,PT,40.3358,-8.42738 89381,Pardilhó,2235,01,177,PT,40.79925,-8.62598 89473,Rio Meão,2235,01,177,PT,40.95775,-8.57818 89484,Salreu,2235,01,177,PT,40.73971,-8.5572 89492,Sanfins,2235,01,177,PT,40.92979,-8.52563 89493,Sangalhos,2235,01,177,PT,40.48678,-8.46968 89507,Santa Maria da Feira,2235,01,177,PT,40.96043,-8.51545 89564,São João,2235,01,177,PT,40.86802,-8.60672 89565,São João da Madeira,2235,01,177,PT,40.9007,-8.4902 89570,São João de Ver,2235,01,177,PT,40.95527,-8.55117 89587,São Roque,2235,01,177,PT,40.87216,-8.47149 89541,Sever do Vouga,2235,01,177,PT,40.73156,-8.35493 89542,Silvalde,2235,01,177,PT,40.99205,-8.62567 89554,Souto,2235,01,177,PT,40.98496,-8.62185 89619,Vagos,2235,01,177,PT,40.49943,-8.6783 89625,Vale de Cambra,2235,01,177,PT,40.845,-8.36022 89688,Válega,2235,01,177,PT,40.83629,-8.58061 89630,Valongo,2235,01,177,PT,40.61667,-8.45 89645,Vila Chã,2235,01,177,PT,40.86667,-8.46667 88925,Aldeia Nova de São Bento,2230,02,177,PT,37.92603,-7.40804 88944,Aljustrel,2230,02,177,PT,37.87759,-8.16516 88949,Almodôvar,2230,02,177,PT,37.4959,-8.09372 88950,Almograve,2230,02,177,PT,37.65665,-8.79214 88957,Alvito,2230,02,177,PT,38.24653,-8.05038 89020,Barrancos,2230,02,177,PT,38.13446,-6.97604 89027,Beja,2230,02,177,PT,38.01506,-7.86323 89036,Beringel,2230,02,177,PT,38.05656,-7.98427 89039,Boavista dos Pinheiros,2230,02,177,PT,37.58058,-8.66441 89056,Cabeça Gorda,2230,02,177,PT,37.92401,-7.7929 89111,Castro Verde,2230,02,177,PT,37.69828,-8.08581 89136,Cuba,2230,02,177,PT,38.21972,-7.92114 89176,Ferreira do Alentejo,2230,02,177,PT,38.05,-8.03333 89340,Mértola,2230,02,177,PT,37.65918,-7.66434 89299,Minas de São Domingos,2230,02,177,PT,37.67322,-7.49765 89335,Moura,2230,02,177,PT,38.1401,-7.44856 89346,Neves,2230,02,177,PT,38.0227,-7.81344 89352,Odemira,2230,02,177,PT,37.59798,-8.63972 89372,Ourique,2230,02,177,PT,37.69156,-8.31031 89397,Penedo Gordo,2230,02,177,PT,37.98477,-7.91651 89485,Salvada,2230,02,177,PT,37.93771,-7.77448 89572,São Luis,2230,02,177,PT,37.71556,-8.66472 89590,São Teotónio,2230,02,177,PT,37.51282,-8.70708 89533,Serpa,2230,02,177,PT,37.95201,-7.47534 89642,Vidigueira,2230,02,177,PT,38.18448,-7.74469 89658,Vila Nova de Milfontes,2230,02,177,PT,37.72377,-8.78278 89690,Zambujeira do Mar,2230,02,177,PT,37.52799,-8.78483 88909,Adaúfe,2244,03,177,PT,41.58732,-8.39817 88962,Amares,2244,03,177,PT,41.64718,-8.35558 88974,Apúlia,2244,03,177,PT,41.48512,-8.76413 88975,Apúlia e Fão,2244,03,177,PT,41.51194,-8.77288 88979,Arcos,2244,03,177,PT,41.52185,-8.42151 88997,Arões,2244,03,177,PT,41.45553,-8.21419 89004,Aveleda,2244,03,177,PT,41.52113,-8.46682 89018,Barcelos,2244,03,177,PT,41.53174,-8.61843 89019,Barqueiros,2244,03,177,PT,41.49111,-8.73192 89046,Braga,2244,03,177,PT,41.55032,-8.42005 89049,Brito,2244,03,177,PT,41.45821,-8.36103 89055,Cabeceiras de Basto,2244,03,177,PT,41.52079,-7.97198 89064,Caldas das Taipas,2244,03,177,PT,41.48465,-8.3485 89065,Caldas de Vizela,2244,03,177,PT,41.38212,-8.3089 89066,Caldelas,2244,03,177,PT,41.67101,-8.38148 89067,Calendário,2244,03,177,PT,41.40361,-8.52967 89081,Candoso,2244,03,177,PT,41.42768,-8.32166 89114,Celorico de Basto,2244,03,177,PT,41.40278,-8.03346 89120,Chavão,2244,03,177,PT,41.45235,-8.60194 89135,Cristelo,2244,03,177,PT,41.47964,-8.69785 89151,Esporões,2244,03,177,PT,41.51006,-8.41729 89152,Esposende,2244,03,177,PT,41.5361,-8.78201 89160,Fafe,2244,03,177,PT,41.46837,-8.15863 89166,Faria,2244,03,177,PT,41.48298,-8.67152 89179,Ferreiros,2244,03,177,PT,41.35,-8.55 89191,Fradelos,2244,03,177,PT,41.36846,-8.59887 89196,Frossos,2244,03,177,PT,41.5659,-8.45134 89205,Galegos,2244,03,177,PT,41.56268,-8.57204 89207,Gandra,2244,03,177,PT,41.52185,-8.76185 89212,Gondizalves,2244,03,177,PT,41.54158,-8.4557 89216,Gueral,2244,03,177,PT,41.45859,-8.62946 89219,Guimarães,2244,03,177,PT,41.44384,-8.28918 89220,Guisande,2244,03,177,PT,41.48264,-8.44564 89225,Joane,2244,03,177,PT,41.43906,-8.40846 89227,Lago,2244,03,177,PT,41.62148,-8.41258 89248,Lordelo,2244,03,177,PT,41.37411,-8.38016 89264,Macieira de Rates,2244,03,177,PT,41.44092,-8.63426 89279,Marinhas,2244,03,177,PT,41.55906,-8.78297 89280,Mariz,2244,03,177,PT,41.52823,-8.67081 89293,Merelim,2244,03,177,PT,41.58568,-8.46555 89330,Moreira de Conegos,2244,03,177,PT,41.3868,-8.3394 89343,Negreiros,2244,03,177,PT,41.43552,-8.61398 89362,Oliveira,2244,03,177,PT,41.47819,-8.46965 89402,Perelhal,2244,03,177,PT,41.53075,-8.68982 89415,Ponte,2244,03,177,PT,41.47057,-8.3299 89442,Póvoa de Lanhoso,2244,03,177,PT,41.57599,-8.27008 89435,Prado,2244,03,177,PT,41.60246,-8.46297 89453,Real,2244,03,177,PT,41.55841,-8.4433 89458,Refojos de Basto,2244,03,177,PT,41.51318,-7.99517 89461,Rendufe,2244,03,177,PT,41.62898,-8.40858 89464,Riba de Ave,2244,03,177,PT,41.39648,-8.38685 89470,Ribeirão,2244,03,177,PT,41.36081,-8.56774 89477,Ronfe,2244,03,177,PT,41.44146,-8.38412 89490,Sande,2244,03,177,PT,41.7019,-8.39246 89524,Selho,2244,03,177,PT,41.41938,-8.34599 89525,Semelhe,2244,03,177,PT,41.55437,-8.46281 89536,Serzedelo,2244,03,177,PT,41.40128,-8.36888 89537,Serzedo,2244,03,177,PT,41.40502,-8.22926 89598,Tebosa,2244,03,177,PT,41.48253,-8.48399 89601,Terras de Bouro,2244,03,177,PT,41.73914,-8.19109 89618,Urgeses,2244,03,177,PT,41.4272,-8.29796 89689,Várzea,2244,03,177,PT,41.51512,-8.584 89644,Vieira do Minho,2244,03,177,PT,41.63557,-8.13244 89647,Vila Cova,2244,03,177,PT,41.55107,-8.71645 89651,Vila Frescainha,2244,03,177,PT,41.53846,-8.63971 89656,Vila Nova de Famalicão,2244,03,177,PT,41.40797,-8.51978 89665,Vila Seca,2244,03,177,PT,41.50031,-8.68525 89668,Vila Verde,2244,03,177,PT,41.64869,-8.43628 89679,Vilaça,2244,03,177,PT,41.51787,-8.48357 89676,Vilar de Figos,2244,03,177,PT,41.47555,-8.65382 89686,Vizela,2244,03,177,PT,41.37529,-8.2931 88934,Alfândega da Fé,2229,04,177,PT,41.34315,-6.96112 89030,Belver,2229,04,177,PT,41.24696,-7.27594 89047,Bragança Municipality,2229,04,177,PT,41.75608,-6.75535 89094,Carrazeda de Anciães,2229,04,177,PT,41.24247,-7.30721 89095,Carrazeda de Ansiães,2229,04,177,PT,41.23424,-7.31129 89194,Freixo de Espada à Cinta,2229,04,177,PT,41.09033,-6.80648 89260,Macedo de Cavaleiros,2229,04,177,PT,41.55132,-6.93355 89305,Miranda do Douro,2229,04,177,PT,41.49692,-6.27308 89306,Mirandela,2229,04,177,PT,41.50098,-7.19185 89307,Mogadouro,2229,04,177,PT,41.34034,-6.71187 89487,Samil,2229,04,177,PT,41.77632,-6.75698 89526,Sendim,2229,04,177,PT,41.38739,-6.42625 89606,Torre de Moncorvo,2229,04,177,PT,41.17454,-7.05364 89648,Vila Flor,2229,04,177,PT,41.31429,-7.15071 89682,Vimioso,2229,04,177,PT,41.57287,-6.52087 89683,Vinhais,2229,04,177,PT,41.83509,-7.00501 88926,Aldeia de Joanes,2241,05,177,PT,40.13905,-7.51694 89029,Belmonte,2241,05,177,PT,40.36181,-7.35157 89104,Castelo Branco,2241,05,177,PT,39.82219,-7.49087 89133,Covilhã,2241,05,177,PT,40.28106,-7.50504 89198,Fundão,2241,05,177,PT,40.12412,-7.49542 89224,Idanha-A-Nova,2241,05,177,PT,39.92957,-7.2369 89356,Oleiros,2241,05,177,PT,39.94948,-7.88592 89396,Penamacor,2241,05,177,PT,40.15495,-7.17149 89440,Proença-a-Nova,2241,05,177,PT,39.757,-7.92595 89535,Sertã,2241,05,177,PT,39.80205,-8.09589 89599,Teixoso,2241,05,177,PT,40.31448,-7.45759 89670,Vila de Rei,2241,05,177,PT,39.70685,-8.12836 89666,Vila Velha de Ródão,2241,05,177,PT,39.68709,-7.65987 88929,Alfarelos,2246,06,177,PT,40.15057,-8.65326 88938,Alhadas,2246,06,177,PT,40.18607,-8.79057 88972,Ançã,2246,06,177,PT,40.27161,-8.5209 88977,Arazede,2246,06,177,PT,40.28627,-8.64999 88984,Arganil,2246,06,177,PT,40.21826,-8.05403 88998,Assafarge,2246,06,177,PT,40.15895,-8.43167 89050,Buarcos,2246,06,177,PT,40.16604,-8.8768 89088,Cantanhede,2246,06,177,PT,40.36354,-8.60549 89091,Carapinheira,2246,06,177,PT,40.2062,-8.6481 89122,Coimbra,2246,06,177,PT,40.20564,-8.41955 89126,Condeixa-a-Nova,2246,06,177,PT,40.10639,-8.49632 89182,Figueira da Foz,2246,06,177,PT,40.15085,-8.86179 89222,Góis,2246,06,177,PT,40.12535,-8.0834 89238,Lavos,2246,06,177,PT,40.09363,-8.82826 89249,Lorvão,2246,06,177,PT,40.25938,-8.31683 89256,Lousã,2246,06,177,PT,40.11673,-8.24921 89303,Mira,2246,06,177,PT,40.44559,-8.73849 89304,Miranda do Corvo,2246,06,177,PT,40.09318,-8.33261 89325,Montemor-o-Velho,2246,06,177,PT,40.19385,-8.66696 89368,Oliveira do Hospital,2246,06,177,PT,40.35522,-7.86481 89369,Oliveira do Mondego,2246,06,177,PT,40.32305,-8.22367 89378,Pampilhosa da Serra,2246,06,177,PT,40.0462,-7.95182 89393,Penacova,2246,06,177,PT,40.26884,-8.28237 89399,Penela,2246,06,177,PT,40.03333,-8.38333 89410,Poiares,2246,06,177,PT,40.21026,-8.25746 89497,Santa Clara,2246,06,177,PT,40.19985,-8.44018 89516,Santo António dos Olivais,2246,06,177,PT,40.21805,-8.40523 89582,São Pedro de Alva,2246,06,177,PT,40.30044,-8.16623 89552,Soure,2246,06,177,PT,40.05989,-8.62605 89616,Tábua,2246,06,177,PT,40.36207,-8.02936 89596,Tavarede,2246,06,177,PT,40.16692,-8.84568 89603,Tocha,2246,06,177,PT,40.31308,-8.75339 89611,Travanca,2246,06,177,PT,40.32357,-8.18687 89660,Vila Nova de Poiares,2246,06,177,PT,40.22129,-8.24105 88912,Alandroal,2236,07,177,PT,38.62924,-7.36599 88990,Arraiolos,2236,07,177,PT,38.76774,-7.95831 89043,Borba,2236,07,177,PT,38.80553,-7.45465 89157,Estremoz,2236,07,177,PT,38.84996,-7.60117 89697,Évora,2236,07,177,PT,38.56667,-7.9 89324,Montemor-o-Novo,2236,07,177,PT,38.67103,-8.29956 89328,Mora,2236,07,177,PT,38.92174,-8.09972 89336,Mourão,2236,07,177,PT,38.29778,-7.2223 89423,Portel,2236,07,177,PT,38.29385,-7.72762 89457,Redondo,2236,07,177,PT,38.5801,-7.59659 89459,Reguengos de Monsaraz,2236,07,177,PT,38.42529,-7.53494 89635,Vendas Novas,2236,07,177,PT,38.63975,-8.54702 89639,Viana do Alentejo,2236,07,177,PT,38.33645,-8.00011 89669,Vila Viçosa,2236,07,177,PT,38.7879,-7.41852 88914,Albufeira,2239,08,177,PT,37.08819,-8.2503 88919,Alcantarilha,2239,08,177,PT,37.13044,-8.34623 88923,Alcoutim,2239,08,177,PT,37.424,-7.65456 88935,Algoz,2239,08,177,PT,37.16301,-8.30359 88942,Aljezur,2239,08,177,PT,37.31745,-8.80147 88946,Almancil,2239,08,177,PT,37.08686,-8.03074 88954,Altura,2239,08,177,PT,37.1756,-7.50064 88958,Alvor,2239,08,177,PT,37.12994,-8.59174 88988,Armação de Pêra,2239,08,177,PT,37.10256,-8.35695 89035,Bensafrim,2239,08,177,PT,37.15583,-8.7352 89041,Boliqueime,2239,08,177,PT,37.13718,-8.1582 89052,Cabanas de Tavira,2239,08,177,PT,37.13521,-7.60048 89100,Carvoeiro,2239,08,177,PT,37.09736,-8.46846 89110,Castro Marim,2239,08,177,PT,37.25865,-7.50732 89125,Conceição,2239,08,177,PT,37.14789,-7.60426 89158,Estói,2239,08,177,PT,37.09503,-7.89445 89159,Estômbar,2239,08,177,PT,37.14629,-8.48505 89167,Faro,2239,08,177,PT,37.01869,-7.92716 89174,Ferragudo,2239,08,177,PT,37.12474,-8.51915 89178,Ferreiras,2239,08,177,PT,37.12926,-8.23759 89200,Fuzeta,2239,08,177,PT,37.05429,-7.74699 89217,Guia,2239,08,177,PT,37.12959,-8.29963 89229,Lagoa,2239,08,177,PT,37.10505,-8.45974 89230,Lagos,2239,08,177,PT,37.10202,-8.67422 89237,Laranjeiro,2239,08,177,PT,37.06799,-7.8078 89250,Loulé,2239,08,177,PT,37.14399,-8.02345 89259,Luz,2239,08,177,PT,37.09216,-7.70433 89273,Manta Rota,2239,08,177,PT,37.16849,-7.51804 89281,Marmelete,2239,08,177,PT,37.31014,-8.66813 89295,Mexilhoeira Grande,2239,08,177,PT,37.15858,-8.61487 89311,Moncarapacho,2239,08,177,PT,37.0836,-7.78763 89312,Monchique,2239,08,177,PT,37.31664,-8.5834 89321,Monte Gordo,2239,08,177,PT,37.18192,-7.45225 89358,Olhão,2239,08,177,PT,37.04509,-7.81032 89357,Olhos de Água,2239,08,177,PT,37.09024,-8.19168 89375,Paderne,2239,08,177,PT,37.17935,-8.2015 89380,Parchal,2239,08,177,PT,37.13827,-8.51703 89441,Pêra,2239,08,177,PT,37.12296,-8.34115 89421,Porches,2239,08,177,PT,37.12665,-8.40162 89424,Portimão,2239,08,177,PT,37.17544,-8.5842 89446,Quarteira,2239,08,177,PT,37.06946,-8.10064 89482,Sagres,2239,08,177,PT,37.00864,-8.94311 89495,Santa Bárbara de Nexe,2239,08,177,PT,37.10619,-7.96648 89505,Santa Luzia,2239,08,177,PT,37.10224,-7.66202 89559,São Bartolomeu de Messines,2239,08,177,PT,37.25648,-8.28672 89560,São Brás de Alportel,2239,08,177,PT,37.19564,-7.87546 89574,São Marcos da Serra,2239,08,177,PT,37.361,-8.37764 89528,Senhora da Luz,2239,08,177,PT,37.08771,-8.72649 89544,Silves,2239,08,177,PT,37.20343,-8.33472 89597,Tavira,2239,08,177,PT,37.12734,-7.64861 89614,Tunes,2239,08,177,PT,37.16592,-8.25919 89671,Vila do Bispo,2239,08,177,PT,37.08317,-8.91144 89653,Vila Nova De Cacela,2239,08,177,PT,37.17391,-7.53169 89664,Vila Real de Santo António,2239,08,177,PT,37.19232,-7.42538 89674,Vilamoura,2239,08,177,PT,37.08728,-8.11701 143237,Abrigada,4859,09,177,PT,39.14472222,-9.01861111 143297,Açores,4859,09,177,PT,40.645,-7.30527778 143238,Adão,4859,09,177,PT,40.45916667,-7.165 143239,Agualva,4859,09,177,PT,38.77004444,-9.29881111 143760,Águas Belas,4859,09,177,PT,40.37472222,-7.16694444 143240,Aguiar da Beira,4859,09,177,PT,40.81726,-7.54431 143241,Ajuda,4859,09,177,PT,38.7075,-9.19833333 143242,Albardo,4859,09,177,PT,40.51145,-7.13028 143243,Alcabideche,4859,09,177,PT,38.73361111,-9.40916667 143244,Alcains,4859,09,177,PT,39.91540278,-7.46107778 143246,Alcântara,4859,09,177,PT,38.70638889,-9.17416667 143245,Alcoentre,4859,09,177,PT,39.20861111,-8.95944444 143252,Aldeia da Ponte,4859,09,177,PT,40.41348889,-6.86908333 143253,Aldeia da Ribeira,4859,09,177,PT,40.45666667,-6.89777778 143254,Aldeia de Santo António,4859,09,177,PT,40.34305556,-7.13638889 143255,Aldeia do Bispo,4859,09,177,PT,40.32333333,-6.84805556 143247,Aldeia Galega da Merceana,4859,09,177,PT,39.08222222,-9.11194444 143248,Aldeia Gavinha,4859,09,177,PT,39.08444444,-9.09638889 143249,Aldeia Nova Miranda do Douro,4859,09,177,PT,40.72584,-7.42384 143250,Aldeia Velha,4859,09,177,PT,40.34333333,-6.8675 143251,Aldeia Viçosa,4859,09,177,PT,40.57888889,-7.31777778 143256,Aldeias,4859,09,177,PT,40.46861111,-7.59805556 143257,Alenquer,4859,09,177,PT,39.05,-9.01666667 143258,Alfaiates,4859,09,177,PT,40.39111111,-6.91333333 143259,Alfornelos,4859,09,177,PT,38.76333333,-9.20638889 143260,Alfragide,4859,09,177,PT,38.73203,-9.2192 143265,Algés,4859,09,177,PT,38.69949722,-9.22927222 143261,Algodres,4859,09,177,PT,40.9525,-7.05472222 143262,Alguber,4859,09,177,PT,39.27583333,-9.01888889 143263,Algueirão,4859,09,177,PT,38.79764,-9.3437 143264,Algueirão–Mem Martins,4859,09,177,PT,38.79411389,-9.34510833 143266,Alhandra,4859,09,177,PT,38.92732,-9.00864 143267,Almargem,4859,09,177,PT,38.84472222,-9.27305556 143268,Almargem do Bispo,4859,09,177,PT,38.8475,-9.27138889 143269,Almeida,4859,09,177,PT,40.7307,-6.90594 143270,Almendra,4859,09,177,PT,40.99284444,-7.05756944 143271,Almofala,4859,09,177,PT,40.86027778,-6.84861111 143272,Alto do Pina,4859,09,177,PT,38.74027778,-9.12805556 143273,Alvalade,4859,09,177,PT,38.74694444,-9.13611111 143274,Alvendre,4859,09,177,PT,40.585,-7.25833333 143275,Alverca da Beira,4859,09,177,PT,40.70055556,-7.2175 143276,Alverca do Ribatejo,4859,09,177,PT,38.89866111,-9.03947778 143277,Alvoco da Serra,4859,09,177,PT,40.29555556,-7.67027778 143278,Amadora,4859,09,177,PT,38.75,-9.23333333 143279,Ameixoeira,4859,09,177,PT,38.78777778,-9.1525 143280,Amoreira,4859,09,177,PT,40.58805556,-7.01555556 143281,Anjos,4859,09,177,PT,38.72388889,-9.13638889 143282,Apelação,4859,09,177,PT,38.815,-9.13249 143283,Arcozelo,4859,09,177,PT,40.54055556,-7.62722222 143284,Arranhó,4859,09,177,PT,38.95371667,-9.13497778 143285,Arrifana,4859,09,177,PT,40.56972222,-7.21027778 143286,Arruda Dos Vinhos,4859,09,177,PT,38.97172,-9.08807 143287,Atalaia,4859,09,177,PT,40.66,-7.03305556 143288,Aveiras de Baixo,4859,09,177,PT,39.11138889,-8.86916667 143289,Aveiras de Cima,4859,09,177,PT,39.13769444,-8.89995556 143291,Avelãs da Ribeira,4859,09,177,PT,40.67773,-7.21492 143290,Aveloso,4859,09,177,PT,40.93111111,-7.31666667 143292,Azambuja,4859,09,177,PT,39.06666667,-8.86666667 143293,Azambuja (town),4859,09,177,PT,39.07027778,-8.86833333 143294,Azenhas do Mar,4859,09,177,PT,38.84055556,-9.46 143295,Azevo,4859,09,177,PT,40.85166667,-7.13138889 143296,Azueira,4859,09,177,PT,39.00653,-9.27475 143298,Baraçal,4859,09,177,PT,40.39357,-7.08522 143299,Barcarena,4859,09,177,PT,38.7325,-9.28 143300,Barreira,4859,09,177,PT,40.91111111,-7.18638889 143301,Beato,4859,09,177,PT,38.73472222,-9.10583333 143302,Belas,4859,09,177,PT,38.76666667,-9.26666667 143303,Bendada,4859,09,177,PT,40.37083333,-7.25472222 143304,Benespera,4859,09,177,PT,40.44027778,-7.27638889 143305,Benfica,4859,09,177,PT,38.75111111,-9.20222222 143306,Bismula,4859,09,177,PT,40.44694444,-6.96444444 143307,Bobadela,4859,09,177,PT,38.80663,-9.09731 143308,Bouça Cova,4859,09,177,PT,40.70464,-7.2383 143309,Brandoa,4859,09,177,PT,38.76611111,-9.21444444 143310,Bucelas,4859,09,177,PT,38.9,-9.11666667 143311,Buraca,4859,09,177,PT,38.74222222,-9.20944444 143312,Cabanas de Torres,4859,09,177,PT,39.15631,-9.06328 143313,Cabeça,4859,09,177,PT,40.31916667,-7.73527778 143314,Cacem,4859,09,177,PT,38.77042,-9.30809 143315,Cachoeiras,4859,09,177,PT,38.98583333,-9.01638889 143316,Cadafais,4859,09,177,PT,39.00444444,-9.00416667 143317,Cadafaz,4859,09,177,PT,40.58472222,-7.36194444 143318,Cadaval,4859,09,177,PT,39.24621,-9.06738 143319,Calhandriz,4859,09,177,PT,38.925,-9.06777778 143320,Camarate,4859,09,177,PT,38.80358,-9.12809 143321,Campelos,4859,09,177,PT,39.2,-9.23333333 143322,Campo Grande,4859,09,177,PT,38.75694444,-9.15361111 143323,Campolide,4859,09,177,PT,38.72638889,-9.16333333 143324,Caneças,4859,09,177,PT,38.81666667,-9.23333333 143325,Carapito,4859,09,177,PT,40.76759,-7.45447 143326,Carcavelos,4859,09,177,PT,38.6922,-9.33327 143327,Cardosas,4859,09,177,PT,38.97722222,-9.04083333 143328,Carmões,4859,09,177,PT,39.05777778,-9.13416667 143329,Carnaxide,4859,09,177,PT,38.72666667,-9.24166667 143330,Carnicães,4859,09,177,PT,40.73333333,-7.31833333 143331,Carnide,4859,09,177,PT,38.76083333,-9.18361111 143332,Carnota,4859,09,177,PT,39.03361111,-9.07166667 143333,Carragozela,4859,09,177,PT,40.40572,-7.76077 143334,Carrapichana,4859,09,177,PT,40.56194444,-7.48694444 143335,Carregado,4859,09,177,PT,39.02334,-8.9645 143336,Carvalhal,4859,09,177,PT,40.88361111,-7.28361111 143337,Carvoeira,4859,09,177,PT,39.08055556,-9.16222222 143339,Casal de Cambra,4859,09,177,PT,38.80236,-9.23188 143340,Casal de Cinza,4859,09,177,PT,40.54416667,-7.16416667 143338,Casal Vasco,4859,09,177,PT,40.63792,-7.55538 143341,Casas do Soeiro,4859,09,177,PT,40.61888889,-7.40638889 143342,Cascais,4859,09,177,PT,38.69681,-9.42147 143343,Castanheira,4859,09,177,PT,40.57472222,-7.07944444 143344,Castanheira do Ribatejo,4859,09,177,PT,38.98333333,-8.96666667 143345,Casteição,4859,09,177,PT,40.88083333,-7.32583333 143346,Casteleiro,4859,09,177,PT,40.30222222,-7.23166667 143347,Castelo (Lisbon),4859,09,177,PT,38.71361111,-9.13333333 143348,Castelo Bom,4859,09,177,PT,40.62027778,-6.90055556 143349,Castelo Melhor,4859,09,177,PT,41.0275,-7.065 143350,Castelo Rodrigo,4859,09,177,PT,40.87555556,-6.96388889 143351,Cativelos,4859,09,177,PT,40.53083333,-7.68194444 143352,Cavadoude,4859,09,177,PT,40.58472222,-7.28666667 143353,Caxias,4859,09,177,PT,38.7,-9.28333333 143354,Cedovim,4859,09,177,PT,41.03333333,-7.31666667 143355,Celorico da Beira,4859,09,177,PT,40.63333333,-7.4 143356,Cercal,4859,09,177,PT,39.23388889,-8.99833333 143357,Cerdeira,4859,09,177,PT,40.51416667,-7.04666667 143358,Cerejo,4859,09,177,PT,40.72944444,-7.22361111 143359,Charneca,4859,09,177,PT,38.78527778,-9.145 143361,Chãs,4859,09,177,PT,40.98972222,-7.17027778 143360,Cheleiros,4859,09,177,PT,38.88972222,-9.32888889 143362,Codesseiro,4859,09,177,PT,40.65111111,-7.205 143363,Cogula,4859,09,177,PT,40.81277778,-7.26138889 143364,Colares,4859,09,177,PT,38.80206,-9.46305 143365,Coração de Jesus,4859,09,177,PT,38.72416667,-9.145 143366,Coriscada,4859,09,177,PT,40.86197,-7.20372 143367,Cortiçada,4859,09,177,PT,40.765,-7.54222222 143368,Cortiçô,4859,09,177,PT,40.66305556,-7.49472222 143369,Cortiçô da Serra,4859,09,177,PT,40.60124,-7.43426 143370,Coruche,4859,09,177,PT,40.79361111,-7.54083333 143371,Corujeira,4859,09,177,PT,40.50609,-7.32803 143374,Cótimos,4859,09,177,PT,40.8275,-7.23972222 143372,Cruz Quebrada - Dafundo,4859,09,177,PT,38.70611111,-9.25055556 143373,Custoias,4859,09,177,PT,41.10527778,-7.32083333 143375,Damaia,4859,09,177,PT,38.74527778,-9.21833333 143376,Dois Portos,4859,09,177,PT,39.0384,-9.18556 143377,Dornelas,4859,09,177,PT,40.73105,-7.55894 143378,Eirado,4859,09,177,PT,40.77333333,-7.49 143379,Encarnação,4859,09,177,PT,39.03333333,-9.36805556 143380,Enxara do Bispo,4859,09,177,PT,38.99194444,-9.24083333 143381,Ericeira,4859,09,177,PT,38.96277778,-9.41527778 143382,Ervas Tenras,4859,09,177,PT,40.74055556,-7.18611111 143383,Ervedosa,4859,09,177,PT,40.84694444,-7.17611111 143384,Escalhão,4859,09,177,PT,40.94944444,-6.92611111 143385,Estoril,4859,09,177,PT,38.70571,-9.39773 143386,Faia,4859,09,177,PT,40.56055556,-7.31027778 143387,Falagueira,4859,09,177,PT,38.75903,-9.21988 143388,Famalicão,4859,09,177,PT,40.44361111,-7.37722222 143389,Famões,4859,09,177,PT,38.78333333,-9.21666667 143390,Fanhões,4859,09,177,PT,38.88111111,-9.1525 143391,Fernão Joanes,4859,09,177,PT,40.48694444,-7.35527778 143397,Fiães,4859,09,177,PT,40.73305556,-7.37305556 143392,Figueira de Castelo Rodrigo,4859,09,177,PT,40.9,-6.96666667 143393,Figueira do Guincho,4859,09,177,PT,38.75,-9.46666667 143395,Figueiró da Granja,4859,09,177,PT,40.62805556,-7.49916667 143396,Figueiró da Serra,4859,09,177,PT,40.54055556,-7.48888889 143394,Figueiros,4859,09,177,PT,39.27946,-9.05083 143414,Fóios,4859,09,177,PT,40.28666667,-6.8925 143398,Folgosinho,4859,09,177,PT,40.50944444,-7.51388889 143399,Folhadosa,4859,09,177,PT,40.37944444,-7.78472222 143400,Fontanelas,4859,09,177,PT,38.85,-9.43333333 143401,Fonte Longa,4859,09,177,PT,41.01305556,-7.23361111 143402,Forninhos,4859,09,177,PT,40.70472222,-7.55416667 143403,Forno Telheiro,4859,09,177,PT,40.67333333,-7.39777778 143404,Fornos de Algodres,4859,09,177,PT,40.61666667,-7.53333333 143405,Forte da Casa,4859,09,177,PT,38.87391,-9.05216 143406,Freches,4859,09,177,PT,40.73166667,-7.34638889 143407,Freineda,4859,09,177,PT,40.58305556,-6.89111111 143408,Freiria,4859,09,177,PT,39.02739,-9.31995 143409,Freixeda do Torrão,4859,09,177,PT,40.89027778,-7.03222222 143410,Freixedas,4859,09,177,PT,40.69194444,-7.16305556 143411,Freixo,4859,09,177,PT,40.61861111,-7.01027778 143412,Freixo de Numão,4859,09,177,PT,41.06666667,-7.21666667 143413,Frielas,4859,09,177,PT,38.82583333,-9.14444444 143415,Gagos,4859,09,177,PT,40.58388889,-7.11472222 143416,Girabolhos,4859,09,177,PT,40.50944444,-7.73666667 143417,Gonçalo,4859,09,177,PT,40.41666667,-7.35 143418,Gonçalo Bocas,4859,09,177,PT,40.57666667,-7.1775 143419,Gouveia,4859,09,177,PT,40.5,-7.6 143423,Graça,4859,09,177,PT,38.71722222,-9.13083333 143420,Gradil,4859,09,177,PT,38.98222222,-9.28083333 143421,Gradiz,4859,09,177,PT,40.85944444,-7.52861111 143422,Granja,4859,09,177,PT,40.75201,-7.20428 143424,Guarda,4859,09,177,PT,40.53638889,-7.26833333 143425,Guilheiro,4859,09,177,PT,40.89805556,-7.40972222 143426,Horta,4859,09,177,PT,41.06777778,-7.31055556 143427,Igreja Nova,4859,09,177,PT,38.91694444,-9.31944444 143428,Infias,4859,09,177,PT,40.63,-7.53944444 143429,Jarmelo São Miguel,4859,09,177,PT,40.6004,-7.14915 143430,Jarmelo São Pedro,4859,09,177,PT,40.59447,-7.13016 143431,João Antão,4859,09,177,PT,40.46443,-7.2394 143433,Junça,4859,09,177,PT,40.68138889,-6.88555556 143432,Juncais,4859,09,177,PT,40.60944444,-7.5075 143434,Lagarinhos,4859,09,177,PT,40.48583333,-7.66944444 143435,Lajeosa,4859,09,177,PT,40.34353,-6.81621 143436,Lajeosa do Mondego,4859,09,177,PT,40.6275,-7.3375 143437,Lajes,4859,09,177,PT,40.48361111,-7.71638889 143438,Lamas,4859,09,177,PT,39.21114,-9.06151 143439,Lamegal,4859,09,177,PT,40.665,-7.07972222 143440,Lameiras,4859,09,177,PT,40.71138889,-7.10444444 143441,Lapa,4859,09,177,PT,38.71189,-9.16007 143442,Lapa Dos Dinheiros,4859,09,177,PT,40.37888889,-7.70944444 143443,Leomil,4859,09,177,PT,40.63527778,-6.96416667 143444,Linda-a-Velha,4859,09,177,PT,38.71446,-9.2422 143445,Linhares (Celorico da Beira),4859,09,177,PT,40.54083333,-7.46111111 143446,Lisbon,4859,09,177,PT,38.71666667,-9.16666667 143447,Longroiva,4859,09,177,PT,40.98103,-7.20334 143448,Loriga,4859,09,177,PT,40.31666667,-7.68333333 143449,Loures,4859,09,177,PT,38.83333333,-9.16666667 143450,Lourinhã,4859,09,177,PT,39.25,-9.31666667 143451,Lousa,4859,09,177,PT,38.89171,-9.20972 143452,Lumiar,4859,09,177,PT,38.76527778,-9.15861111 143474,Maçainhas,4859,09,177,PT,40.53666667,-7.3025 143475,Maçal do Chão,4859,09,177,PT,40.69171,-7.29178 143453,Maceira,4859,09,177,PT,40.68555556,-7.47166667 143476,Maçussa,4859,09,177,PT,39.19472222,-8.86722222 143454,Madalena,4859,09,177,PT,38.71,-9.13472222 143455,Mafra,4859,09,177,PT,38.93333333,-9.33333333 143456,Malcata,4859,09,177,PT,40.2999,-7.06147 143457,Malhada Sorda,4859,09,177,PT,40.53638889,-6.91444444 143458,Malpartida,4859,09,177,PT,40.76,-6.86666667 143459,Malveira,4859,09,177,PT,38.93059,-9.26165 143460,Mangualde da Serra,4859,09,177,PT,40.46638889,-7.62166667 143461,Manigoto,4859,09,177,PT,40.70833333,-7.07583333 143462,Manique do Intendente,4859,09,177,PT,39.22111111,-8.89361111 143463,Manteigas,4859,09,177,PT,40.4,-7.53333333 143464,Manteigas (São Pedro),4859,09,177,PT,40.36611111,-7.54611111 143465,Marialva,4859,09,177,PT,40.91,-7.23166667 143466,Marmeleiro,4859,09,177,PT,40.46861111,-7.11416667 143467,Marteleira,4859,09,177,PT,39.21305556,-9.28333333 143503,Mártires,4859,09,177,PT,38.70861111,-9.14166667 143468,Marvila,4859,09,177,PT,38.74527778,-9.10416667 143469,Massamá,4859,09,177,PT,38.75564,-9.28427 143470,Mata de Lobos,4859,09,177,PT,40.91691,-6.88804 143471,Matacães,4859,09,177,PT,39.09277778,-9.21222222 143472,Matança,4859,09,177,PT,40.67888889,-7.52888889 143473,Maxial,4859,09,177,PT,39.14301,-9.16898 143477,Meca,4859,09,177,PT,39.08972222,-9.02555556 143504,Mêda,4859,09,177,PT,40.96666667,-7.26666667 143478,Meios,4859,09,177,PT,40.49361111,-7.35916667 143479,Melo,4859,09,177,PT,40.51944444,-7.53361111 143480,Mem Martins,4859,09,177,PT,38.79443,-9.34284 143481,Mercês,4859,09,177,PT,38.71611111,-9.14888889 143482,Mesquitela,4859,09,177,PT,40.58805556,-7.48944444 143483,Milharado,4859,09,177,PT,38.94722222,-9.19916667 143484,Mina,4859,09,177,PT,38.76166667,-9.23611111 143485,Minhocal,4859,09,177,PT,40.68944444,-7.34666667 143486,Mira-Sintra,4859,09,177,PT,38.78417,-9.30148 143487,Miragaia,4859,09,177,PT,39.23583333,-9.265 143488,Miuzela,4859,09,177,PT,40.51055556,-7.005 143489,Mizarela,4859,09,177,PT,40.55746,-7.34107 143490,Moimenta da Serra,4859,09,177,PT,40.47359,-7.63839 143491,Moimentinha,4859,09,177,PT,40.74555556,-7.22777778 143492,Moita,4859,09,177,PT,40.3,-7.1975 143493,Moita dos Ferreiros,4859,09,177,PT,39.24825,-9.22355 143494,Moledo,4859,09,177,PT,39.28388889,-9.25722222 143495,Monte Abraão,4859,09,177,PT,38.7584,-9.26527 143496,Monte Estoril,4859,09,177,PT,38.70636,-9.40595 143497,Monte Redondo,4859,09,177,PT,39.115,-9.20444444 143498,Montelavar,4859,09,177,PT,38.86968,-9.31581 143499,Moreira de Rei,4859,09,177,PT,40.83915,-7.32316 143505,Mós,4859,09,177,PT,41.11306,-7.19717 143500,Moscavide,4859,09,177,PT,38.77929,-9.10222 143501,Murça,4859,09,177,PT,41.10055556,-7.23138889 143502,Muxagata,4859,09,177,PT,41.03611111,-7.15 143506,Nabais,4859,09,177,PT,40.52,-7.55555556 143507,Nave,4859,09,177,PT,40.39821,-6.9603 143508,Nave de Haver,4859,09,177,PT,40.52166667,-6.83416667 143509,Nespereira,4859,09,177,PT,40.51722222,-7.60972222 143510,Nossa Senhora de Fátima,4859,09,177,PT,38.73916667,-9.15083333 143511,Numão,4859,09,177,PT,41.0975,-7.29111111 143512,Odivelas,4859,09,177,PT,38.8,-9.18333333 143513,Odivelas Municipality,4859,09,177,PT,38.79705,-9.19108 143514,Oeiras,4859,09,177,PT,38.69704444,-9.30165278 143515,Oeiras e São Julião da Barra,4859,09,177,PT,38.69722222,-9.30833333 143516,Olhalvo,4859,09,177,PT,39.09861111,-9.06388889 143517,Olival de Basto,4859,09,177,PT,38.79083333,-9.16722222 143518,Olival do Basto,4859,09,177,PT,38.79083333,-9.16611111 143519,Ota,4859,09,177,PT,39.11,-8.98972222 143520,Outeiro da Cabeça,4859,09,177,PT,39.19222222,-9.18222222 143521,Outeiro de Gatos,4859,09,177,PT,40.95222222,-7.30222222 143529,Paço de Arcos,4859,09,177,PT,38.695,-9.29361111 143530,Paços da Serra,4859,09,177,PT,40.45972222,-7.65055556 143522,Painho,4859,09,177,PT,39.30222222,-9.04944444 143523,Pala,4859,09,177,PT,40.76305556,-7.15111111 143524,Palhais,4859,09,177,PT,40.81666667,-7.43 143525,Panoias de Cima,4859,09,177,PT,40.49777778,-7.23277778 143526,Parada,4859,09,177,PT,40.53972222,-7.03777778 143527,Paranhos,4859,09,177,PT,40.48635,-7.79454 143528,Parede,4859,09,177,PT,38.69328,-9.35695 143531,Pega,4859,09,177,PT,40.42861111,-7.14444444 143532,Pena,4859,09,177,PT,38.72138889,-9.14 143533,Pena Lobo,4859,09,177,PT,40.39277778,-7.20388889 143534,Pena Verde,4859,09,177,PT,40.72833333,-7.50527778 143536,Penha de Águia,4859,09,177,PT,40.86636,-7.06814 143535,Penha de França,4859,09,177,PT,38.73,-9.13166667 143558,Pêra do Moço,4859,09,177,PT,40.61305556,-7.20972222 143537,Peral,4859,09,177,PT,39.26166667,-9.07444444 143538,Pereiro,4859,09,177,PT,40.735,-7.01305556 143539,Pereiro de Palhacana,4859,09,177,PT,39.04277778,-9.10888889 143559,Pêro Moniz,4859,09,177,PT,39.22138889,-9.12361111 143540,Pero Pinheiro,4859,09,177,PT,38.8399,-9.32066 143541,Peva,4859,09,177,PT,40.66472222,-6.99083333 143542,Pinhanços,4859,09,177,PT,40.46638889,-7.68305556 143543,Pinheiro,4859,09,177,PT,40.80083333,-7.59833333 143544,Pinhel,4859,09,177,PT,40.78333333,-7.06666667 143560,Pínzio,4859,09,177,PT,40.6025,-7.06527778 143553,Poço do Canto,4859,09,177,PT,40.99944444,-7.26833333 143545,Pomares,4859,09,177,PT,40.64305556,-7.13805556 143546,Ponte do Rol,4859,09,177,PT,39.09277778,-9.31916667 143547,Pontinha,4859,09,177,PT,38.777,-9.20377 143548,Portela,4859,09,177,PT,38.78277778,-9.11111111 143550,Porto da Carne,4859,09,177,PT,40.60527778,-7.29222222 143549,Porto Salvo,4859,09,177,PT,38.71722222,-9.29916667 143551,Pousada,4859,09,177,PT,40.54722222,-7.12611111 143552,Pousafoles do Bispo,4859,09,177,PT,40.41222222,-7.17916667 143561,Póvoa de Santa Iria,4859,09,177,PT,38.86111111,-9.06444444 143562,Póvoa de Santo Adrião,4859,09,177,PT,38.80016,-9.16395 143563,Póvoa do Concelho,4859,09,177,PT,40.75972222,-7.26638889 143554,Prados,4859,09,177,PT,40.56138889,-7.37666667 143555,Prazeres,4859,09,177,PT,38.70888889,-9.16888889 143556,Prior Velho,4859,09,177,PT,38.79194444,-9.12083333 143557,Prova,4859,09,177,PT,40.9125,-7.34194444 143564,Quadrazais,4859,09,177,PT,40.32472222,-6.99833333 143565,Queijas,4859,09,177,PT,38.72236,-9.26593 143566,Queiriz,4859,09,177,PT,40.73596,-7.44999 143567,Queluz,4859,09,177,PT,38.75657,-9.25451 143569,Quintã de Pêro Martins,4859,09,177,PT,40.88194444,-7.08305556 143568,Quintas de São Bartolomeu,4859,09,177,PT,40.37138889,-7.09861111 143570,Rabaçal,4859,09,177,PT,40.8625,-7.24941 143571,Ramada,4859,09,177,PT,38.80361111,-9.19111111 143572,Ramalhal,4859,09,177,PT,39.14472222,-9.23222222 143573,Ramela,4859,09,177,PT,40.47777778,-7.25888889 143574,Ranhados,4859,09,177,PT,40.99527778,-7.32944444 143575,Rapa,4859,09,177,PT,40.58416667,-7.34555556 143576,Rapoula do Côa,4859,09,177,PT,40.42111111,-7.0475 143577,Ratoeira,4859,09,177,PT,40.64027778,-7.35361111 143578,Reboleira,4859,09,177,PT,38.75083333,-9.23027778 143579,Reboleiro,4859,09,177,PT,40.8325,-7.41888889 143580,Rebolosa,4859,09,177,PT,40.42361111,-6.91111111 143581,Reguengo Grande,4859,09,177,PT,39.28722222,-9.21472222 143582,Reigada,4859,09,177,PT,40.80444444,-6.94805556 143583,Rendo,4859,09,177,PT,40.37972222,-7.04444444 143584,Ribafria,4859,09,177,PT,39.06194444,-9.09472222 143585,Ribamar,4859,09,177,PT,39.2025,-9.3325 143586,Ribamondego,4859,09,177,PT,40.56805556,-7.58138889 143587,Ribeira Dos Carinhos,4859,09,177,PT,40.62138889,-7.14222222 143589,Rio de Mel,4859,09,177,PT,40.80777778,-7.39361111 143590,Rio de Mouro,4859,09,177,PT,38.76889,-9.33273 143588,Rio Torto,4859,09,177,PT,40.50916667,-7.65694444 143591,Rochoso,4859,09,177,PT,40.51638889,-7.09333333 143592,Runa,4859,09,177,PT,39.06527778,-9.20888889 143593,Ruvina,4859,09,177,PT,40.415,-7.01055556 143594,Sabugal,4859,09,177,PT,40.35,-7.08333333 143595,Sabugueiro,4859,09,177,PT,40.40194444,-7.63972222 143596,Sacavém,4859,09,177,PT,38.79442,-9.10533 143597,Sacramento,4859,09,177,PT,38.71222222,-9.14 143598,Safurdão,4859,09,177,PT,40.63694444,-7.06888889 143599,Salgueirais,4859,09,177,PT,40.57445,-7.42247 143600,Sameice,4859,09,177,PT,40.43444444,-7.77611111 143601,Sameiro,4859,09,177,PT,40.40916667,-7.49 143602,Sandomil,4859,09,177,PT,40.35805556,-7.78277778 143603,Santa Bárbara,4859,09,177,PT,39.21,-9.31388889 143604,Santa Catarina,4859,09,177,PT,38.71138889,-9.14805556 143605,Santa Comba,4859,09,177,PT,40.45055556,-7.71472222 143606,Santa Engrácia,4859,09,177,PT,38.71916667,-9.11972222 143607,Santa Eufémia,4859,09,177,PT,40.79833333,-7.18083333 143608,Santa Eulália,4859,09,177,PT,40.41439,-7.78717 143609,Santa Iria da Azóia,4859,09,177,PT,38.84629,-9.08748 143610,Santa Iria de Azoia,4859,09,177,PT,38.84638889,-9.08805556 143611,Santa Isabel,4859,09,177,PT,38.71861111,-9.15833333 143612,Santa Justa,4859,09,177,PT,38.71555556,-9.13638889 143613,Santa Maria,4859,09,177,PT,40.42388889,-7.52138889 143614,Santa Maria de Belém,4859,09,177,PT,38.69911,-9.20867 143615,Santa Maria do Castelo e São Miguel,4859,09,177,PT,39.10864,-9.23907 143616,Santa Maria dos Olivais,4859,09,177,PT,38.76989,-9.12073 143617,Santa Maria e São Miguel,4859,09,177,PT,38.80083333,-9.37944444 143618,Santa Marinha,4859,09,177,PT,40.45027778,-7.66333333 143619,Santana da Azinha,4859,09,177,PT,40.47361111,-7.20916667 143620,Santiago,4859,09,177,PT,40.42388889,-7.72916667 143621,Santiago dos Velhos,4859,09,177,PT,38.94166667,-9.10361111 143622,Santo Antão do Tojal,4859,09,177,PT,38.85361111,-9.14305556 143623,Santo António dos Cavaleiros,4859,09,177,PT,38.81166667,-9.16111111 143624,Santo Condestável,4859,09,177,PT,38.71527778,-9.16694444 143625,Santo Estêvão,4859,09,177,PT,39.04222222,-9.01583333 143626,Santo Estêvão das Galés,4859,09,177,PT,38.89008,-9.25066 143627,Santo Isidoro,4859,09,177,PT,38.99361111,-9.39861111 143628,Santo Quintino,4859,09,177,PT,39.00611111,-9.14972222 143629,Santos-o-Velho,4859,09,177,PT,38.70694444,-9.15638889 143653,São Bartolomeu,4859,09,177,PT,39.27511,-9.27885 143654,São Bartolomeu dos Galegos,4859,09,177,PT,39.27583333,-9.27944444 143655,São Brás,4859,09,177,PT,38.7675,-9.23305556 143656,São Cristóvão e São Lourenço,4859,09,177,PT,38.71277778,-9.13555556 143657,São Domingos de Benfica,4859,09,177,PT,38.74361111,-9.17 143658,São Domingos de Rana,4859,09,177,PT,38.70123,-9.3276 143659,São Francisco Xavier,4859,09,177,PT,38.70722222,-9.21722222 143662,São João,4859,09,177,PT,38.72888889,-9.12277778 143664,São João da Talha,4859,09,177,PT,38.82583333,-9.09222222 143665,São João das Lampas,4859,09,177,PT,38.87,-9.42111111 143666,São João de Brito,4859,09,177,PT,38.755,-9.13777778 143667,São João de Deus,4859,09,177,PT,38.74027778,-9.13777778 143663,São João Dos Montes,4859,09,177,PT,38.95166,-9.05449 143660,São Jorge de Arroios,4859,09,177,PT,38.72888889,-9.13888889 143661,São José,4859,09,177,PT,38.71805556,-9.1425 143668,São Julião,4859,09,177,PT,40.48757,-7.59498 143669,São Julião do Tojal,4859,09,177,PT,38.85805556,-9.13555556 143670,São Mamede,4859,09,177,PT,38.72023,-9.15298 143671,São Marcos,4859,09,177,PT,38.75624,-9.29731 143672,São Martinho,4859,09,177,PT,40.44305556,-7.67194444 143673,São Miguel,4859,09,177,PT,38.71111111,-9.12944444 143674,São Miguel da Guarda,4859,09,177,PT,40.55555556,-7.24611111 143675,São Miguel de Alcainça,4859,09,177,PT,38.92111111,-9.29583333 143676,São Nicolau,4859,09,177,PT,38.7075,-9.13666667 143677,São Paio,4859,09,177,PT,40.51527778,-7.58222222 143678,São Paulo,4859,09,177,PT,38.7076,-9.14707 143679,São Pedro,4859,09,177,PT,40.63222222,-7.38138889 143680,São Pedro da Cadeira,4859,09,177,PT,39.06972222,-9.37166667 143681,São Pedro de Penaferrim,4859,09,177,PT,38.76947,-9.38963 143682,São Pedro de Rio Seco,4859,09,177,PT,40.66194444,-6.83916667 143683,São Romão,4859,09,177,PT,40.40194444,-7.71694444 143684,São Sebastião da Pedreira,4859,09,177,PT,38.73083333,-9.14916667 143685,São Vicente,4859,09,177,PT,40.53979,-7.23536 143686,São Vicente de Fora,4859,09,177,PT,38.71583333,-9.12416667 143630,Sapataria,4859,09,177,PT,38.97188,-9.20195 143631,Sazes da Beira,4859,09,177,PT,40.34888889,-7.73527778 143687,Sé,4859,09,177,PT,40.53861111,-7.26916667 143632,Sebadelhe,4859,09,177,PT,41.05222222,-7.26972222 143633,Sebadelhe da Serra,4859,09,177,PT,40.87111111,-7.39833333 143634,Seia,4859,09,177,PT,40.42027778,-7.70333333 143635,Seixas,4859,09,177,PT,41.11196,-7.25251 143636,Seixo do Côa,4859,09,177,PT,40.46305556,-7.02666667 143637,Sequeira,4859,09,177,PT,40.55361111,-7.22583333 143638,Sequeiros,4859,09,177,PT,40.83714,-7.49803 143639,Silveira,4859,09,177,PT,39.11111111,-9.36416667 143640,Sintra,4859,09,177,PT,38.79736111,-9.39041667 143641,Sintra (town),4859,09,177,PT,38.81439,-9.3837 143643,Sobral da Abelheira,4859,09,177,PT,38.99833333,-9.32916667 143644,Sobral da Serra,4859,09,177,PT,40.61916667,-7.27972222 143645,Sobral de Monte Agraço,4859,09,177,PT,39.01666667,-9.15 143642,Sobral Pichorro,4859,09,177,PT,40.69073,-7.45598 143646,Sobralinho,4859,09,177,PT,38.9175,-9.02611111 143647,Socorro,4859,09,177,PT,38.71666667,-9.13444444 143648,Sortelha,4859,09,177,PT,40.33138889,-7.21138889 143649,Souro Pires,4859,09,177,PT,40.745,-7.12472222 143650,Souto,4859,09,177,PT,40.35666667,-6.95833333 143652,Souto de Aguiar da Beira,4859,09,177,PT,40.81075,-7.49244 143651,Souto Maior,4859,09,177,PT,40.79686,-7.3141 143688,Tamanhos,4859,09,177,PT,40.76166667,-7.31555556 143689,Teixeira,4859,09,177,PT,40.25333333,-7.74166667 143690,Terrenho,4859,09,177,PT,40.86611111,-7.35416667 143691,Terrugem,4859,09,177,PT,38.85111111,-9.37472222 143692,Torre do Terrenho,4859,09,177,PT,40.88888889,-7.35944444 143693,Torres,4859,09,177,PT,40.74833333,-7.31916667 143694,Torres Vedras,4859,09,177,PT,39.08333333,-9.26666667 143695,Torrozelo,4859,09,177,PT,40.38611111,-7.76027778 143697,Touça,4859,09,177,PT,41.04722222,-7.23388889 143696,Tourais,4859,09,177,PT,40.47138889,-7.75083333 143698,Trancoso,4859,09,177,PT,40.7833,-7.35 143699,Travancinha,4859,09,177,PT,40.42234,-7.82175 143700,Triana,4859,09,177,PT,39.06988,-8.9866 143701,Trinta,4859,09,177,PT,40.50444444,-7.35527778 143702,Turcifal,4859,09,177,PT,39.03578,-9.26017 143703,Unhos,4859,09,177,PT,38.82583333,-9.12138889 143704,Valbom,4859,09,177,PT,40.78055556,-7.12888889 143705,Valdujo,4859,09,177,PT,40.845,-7.26694444 143707,Vale da Mula,4859,09,177,PT,40.70361111,-6.82361111 143708,Vale de Amoreira,4859,09,177,PT,40.41416667,-7.44138889 143709,Vale de Azares,4859,09,177,PT,40.60492,-7.36421 143710,Vale de Espinho,4859,09,177,PT,40.29694444,-6.95055556 143711,Vale de Estrela,4859,09,177,PT,40.49944444,-7.30777778 143712,Vale do Paraíso,4859,09,177,PT,39.11555556,-8.88583333 143713,Vale do Seixo,4859,09,177,PT,40.79291,-7.27266 143706,Vale Flor,4859,09,177,PT,40.91277778,-7.28222222 143714,Valezim,4859,09,177,PT,40.35889,-7.70831 143715,Valhelhas,4859,09,177,PT,40.40722222,-7.40305556 143716,Valverde,4859,09,177,PT,40.78416667,-7.52194444 143759,Várzea de Meruge,4859,09,177,PT,40.39527778,-7.78361111 143717,Vascoveiro,4859,09,177,PT,40.73416667,-7.06972222 143718,Vela,4859,09,177,PT,40.43585,-7.30369 143719,Velosa,4859,09,177,PT,40.6525,-7.29 143721,Venda do Pinheiro,4859,09,177,PT,38.92527778,-9.23222222 143720,Venda Nova,4859,09,177,PT,38.75422,-9.21452 143722,Venteira,4859,09,177,PT,38.75944444,-9.24111111 143723,Ventosa,4859,09,177,PT,39.12694444,-9.08416667 143724,Vermelha,4859,09,177,PT,39.27277778,-9.10555556 143725,Vermiosa,4859,09,177,PT,40.82722222,-6.8775 143726,Vialonga,4859,09,177,PT,38.87094,-9.06823 143727,Vide,4859,09,177,PT,40.29444444,-7.78416667 143728,Vide Entre Vinhas,4859,09,177,PT,40.59722222,-7.40416667 143729,Videmonte,4859,09,177,PT,40.51388889,-7.39 143730,Vila Boa,4859,09,177,PT,40.38305556,-7.00388889 143731,Vila Boa do Mondego,4859,09,177,PT,40.62694444,-7.43777778 143732,Vila Cortês da Serra,4859,09,177,PT,40.55083333,-7.52944444 143733,Vila Cortês do Mondego,4859,09,177,PT,40.60593,-7.31236 143734,Vila Cova à Coelheira,4859,09,177,PT,40.38333333,-7.73416667 143750,Vila do Touro,4859,09,177,PT,40.41638889,-7.10555556 143735,Vila Fernando,4859,09,177,PT,40.49472222,-7.15444444 143736,Vila Franca da Serra,4859,09,177,PT,40.58722222,-7.53944444 143737,Vila Franca das Naves,4859,09,177,PT,40.72392,-7.26206 143738,Vila Franca de Xira,4859,09,177,PT,38.95,-8.98333333 143739,Vila Franca do Deão,4859,09,177,PT,40.65277778,-7.24222222 143740,Vila Franca do Rosário,4859,09,177,PT,38.97472222,-9.25611111 143741,Vila Garcia,4859,09,177,PT,40.79414,-7.23318 143742,Vila Nova da Rainha,4859,09,177,PT,39.03722222,-8.93361111 143743,Vila Nova de Foz Côa,4859,09,177,PT,41.08333333,-7.13333333 143744,Vila Nova de São Pedro,4859,09,177,PT,39.2198,-8.84037 143745,Vila Nova de Tazem,4859,09,177,PT,40.5025,-7.70305556 143746,Vila Ruiva,4859,09,177,PT,40.56944444,-7.51416667 143747,Vila Soeiro do Chão,4859,09,177,PT,40.61036,-7.48202 143748,Vila Verde,4859,09,177,PT,39.15489,-9.11512 143749,Vila Verde dos Francos,4859,09,177,PT,39.15444444,-9.11333333 143751,Vilar,4859,09,177,PT,39.18671,-9.10687 143755,Vilar de Amargo,4859,09,177,PT,40.94636,-7.00157 143752,Vilar Formoso,4859,09,177,PT,40.61382,-6.83493 143753,Vilar Maior,4859,09,177,PT,40.48473,-6.91999 143754,Vilar Torpim,4859,09,177,PT,40.82555556,-6.95194444 143756,Vilares,4859,09,177,PT,40.72062,-7.28348 143757,Vimeiro,4859,09,177,PT,39.17777778,-9.31777778 143758,Vinhó,4859,09,177,PT,40.49583333,-7.62694444 88905,A dos Francos,2240,10,177,PT,39.32272,-9.04743 88920,Alcobaça,2240,10,177,PT,39.55223,-8.97749 88930,Alfeizerão,2240,10,177,PT,39.49971,-9.10341 88943,Aljubarrota,2240,10,177,PT,39.56715,-8.92925 88955,Alvaiázere,2240,10,177,PT,39.81951,-8.38858 88959,Alvorninha,2240,10,177,PT,39.38224,-9.03674 88964,Amor,2240,10,177,PT,39.80404,-8.85984 88970,Ansião,2240,10,177,PT,39.93424,-8.42045 89000,Atouguia da Baleia,2240,10,177,PT,39.33814,-9.3263 89023,Batalha,2240,10,177,PT,39.66025,-8.82475 89033,Benedita,2240,10,177,PT,39.4247,-8.96996 89042,Bombarral,2240,10,177,PT,39.26723,-9.15795 89063,Caldas da Rainha,2240,10,177,PT,39.40326,-9.13839 89090,Caranguejeira,2240,10,177,PT,39.74619,-8.7074 89102,Castanheira de Pêra,2240,10,177,PT,40.00717,-8.21048 89113,Cela,2240,10,177,PT,39.54075,-9.03449 89164,Famalicão,2240,10,177,PT,39.53642,-9.08308 89180,Ferrel,2240,10,177,PT,39.36398,-9.31541 89184,Figueiró Dos Vinhos,2240,10,177,PT,39.90617,-8.27753 89188,Foz do Arelho,2240,10,177,PT,39.43672,-9.21374 89241,Leiria,2240,10,177,PT,39.74362,-8.80705 89253,Louriçal,2240,10,177,PT,40.0039,-8.73736 89261,Maceira,2240,10,177,PT,39.68853,-8.89423 89277,Marinha Grande,2240,10,177,PT,39.77681,-8.95005 89302,Mira,2240,10,177,PT,39.54315,-8.71505 89322,Monte Real,2240,10,177,PT,39.8521,-8.86349 89323,Monte Redondo,2240,10,177,PT,39.8993,-8.83171 89341,Nadadouro,2240,10,177,PT,39.41927,-9.19091 89342,Nazaré,2240,10,177,PT,39.59965,-9.07162 89699,Óbidos,2240,10,177,PT,39.35854,-9.17603 89385,Pataias,2240,10,177,PT,39.66978,-8.9958 89391,Pedrógão Grande,2240,10,177,PT,39.92682,-8.20093 89400,Peniche,2240,10,177,PT,39.3558,-9.38112 89411,Pombal,2240,10,177,PT,39.90735,-8.66949 89433,Porto de Mós,2240,10,177,PT,39.60191,-8.81839 89483,Salir de Matos,2240,10,177,PT,39.43186,-9.09479 89496,Santa Catarina da Serra,2240,10,177,PT,39.6796,-8.68679 89576,São Martinho do Porto,2240,10,177,PT,39.51444,-9.13111 89534,Serra de El-Rei,2240,10,177,PT,39.33291,-9.26843 89555,Souto da Carpalhosa,2240,10,177,PT,39.84867,-8.83506 89615,Turquel,2240,10,177,PT,39.46411,-8.97743 89622,Valado de Frades,2240,10,177,PT,39.58432,-9.0229 89637,Vestiaria,2240,10,177,PT,39.55271,-8.9979 89641,Vidais,2240,10,177,PT,39.36886,-9.04916 89643,Vieira de Leiria,2240,10,177,PT,39.86945,-8.93238 88904,A dos Cunhados,2228,11,177,PT,39.15237,-9.2972 88908,Abrigada,2228,11,177,PT,39.14416,-9.01853 88915,Alcabideche,2228,11,177,PT,38.73366,-9.40928 88922,Alcoentre,2228,11,177,PT,39.20857,-8.95953 88928,Alenquer,2228,11,177,PT,39.05315,-9.00928 88933,Alfragide,2228,11,177,PT,38.73203,-9.2192 88937,Algés,2228,11,177,PT,38.70245,-9.22936 88936,Algueirão,2228,11,177,PT,38.79764,-9.3437 88939,Alhandra,2228,11,177,PT,38.92732,-9.00864 88947,Almargem,2228,11,177,PT,38.84485,-9.27315 88956,Alvalade,2228,11,177,PT,38.75328,-9.14397 88960,Amadora,2228,11,177,PT,38.75382,-9.23083 88973,Apelação,2228,11,177,PT,38.81387,-9.13225 88991,Arranhó,2228,11,177,PT,38.95378,-9.13465 88996,Arruda dos Vinhos,2228,11,177,PT,38.97172,-9.08807 89002,Aveiras de Cima,2228,11,177,PT,39.13796,-8.89932 89009,Azambuja,2228,11,177,PT,39.07029,-8.86822 89017,Barcarena,2228,11,177,PT,38.73245,-9.28 89024,Beato António,2228,11,177,PT,38.73327,-9.10335 89028,Belas,2228,11,177,PT,38.7767,-9.26353 89034,Benfica,2228,11,177,PT,38.75087,-9.20282 89040,Bobadela,2228,11,177,PT,38.80774,-9.09925 89051,Bucelas,2228,11,177,PT,38.90193,-9.11885 89053,Cabanas de Torres,2228,11,177,PT,39.15581,-9.06588 89059,Cacém,2228,11,177,PT,38.76698,-9.29793 89060,Cadafais,2228,11,177,PT,39.00461,-9.00419 89061,Cadaval,2228,11,177,PT,39.24621,-9.06738 89072,Camarate,2228,11,177,PT,38.80358,-9.12809 89075,Campelos,2228,11,177,PT,39.19678,-9.23519 89083,Caneças,2228,11,177,PT,38.81321,-9.22679 89092,Carcavelos,2228,11,177,PT,38.69105,-9.32215 89093,Carnaxide,2228,11,177,PT,38.72706,-9.24671 89096,Carregado,2228,11,177,PT,39.02362,-8.97692 89101,Cascais,2228,11,177,PT,38.69681,-9.42147 89103,Castanheira do Ribatejo,2228,11,177,PT,38.99298,-8.97346 89112,Caxias,2228,11,177,PT,38.70314,-9.27666 89117,Charneca,2228,11,177,PT,38.78351,-9.14348 89123,Colares,2228,11,177,PT,38.79921,-9.44691 89144,Ericeira,2228,11,177,PT,38.96275,-9.41563 89155,Estoril,2228,11,177,PT,38.70571,-9.39773 89165,Famões,2228,11,177,PT,38.78804,-9.21033 89186,Fontanelas,2228,11,177,PT,38.84806,-9.43942 89244,Linda-a-Velha,2228,11,177,PT,38.71446,-9.2422 89245,Lisbon,2228,11,177,PT,38.72635,-9.14843 89251,Loures,2228,11,177,PT,38.83091,-9.16845 89252,Lourinhã,2228,11,177,PT,39.24745,-9.31194 89268,Mafra,2228,11,177,PT,38.94107,-9.32636 89271,Malveira,2228,11,177,PT,38.93213,-9.25779 89283,Massamá,2228,11,177,PT,38.75279,-9.2811 89288,Meca,2228,11,177,PT,39.08178,-9.03459 89292,Mem Martins,2228,11,177,PT,38.79443,-9.34284 89296,Milharado,2228,11,177,PT,38.94732,-9.19914 89310,Moita dos Ferreiros,2228,11,177,PT,39.24825,-9.22355 89320,Monte Estoril,2228,11,177,PT,38.70636,-9.40595 89332,Moscavide e Portela,2228,11,177,PT,38.77929,-9.10222 89353,Odivelas,2228,11,177,PT,38.79269,-9.1838 89354,Oeiras,2228,11,177,PT,38.71371,-9.26832 89359,Olivais,2228,11,177,PT,38.76994,-9.10674 89361,Olival do Basto,2228,11,177,PT,38.79079,-9.16621 89371,Ota,2228,11,177,PT,39.11199,-8.99105 89386,Paço de Arcos,2228,11,177,PT,38.69569,-9.29143 89382,Parede,2228,11,177,PT,38.69282,-9.35412 89403,Pero Pinheiro,2228,11,177,PT,38.85783,-9.32352 89419,Pontinha,2228,11,177,PT,38.76771,-9.19935 89430,Porto Salvo,2228,11,177,PT,38.72293,-9.30473 89443,Póvoa de Santa Iria,2228,11,177,PT,38.86101,-9.06453 89444,Póvoa de Santo Adrião,2228,11,177,PT,38.8,-9.16667 89439,Prior Velho,2228,11,177,PT,38.79174,-9.12119 89447,Queijas,2228,11,177,PT,38.71925,-9.26255 89448,Queluz,2228,11,177,PT,38.75657,-9.25451 89452,Ramada,2228,11,177,PT,38.80368,-9.1877 89476,Rio de Mouro,2228,11,177,PT,38.76613,-9.32804 89481,Sacavém,2228,11,177,PT,38.79202,-9.10801 89504,Santa Iria da Azóia,2228,11,177,PT,38.8411,-9.09908 89514,Santo Antão do Tojal,2228,11,177,PT,38.85151,-9.13975 89517,Santo Isidoro,2228,11,177,PT,38.99593,-9.3994 89520,Santos-o-Velho,2228,11,177,PT,38.7069,-9.15611 89557,São Bartolomeu,2228,11,177,PT,39.27511,-9.27885 89561,São Domingos de Rana,2228,11,177,PT,38.70194,-9.34083 89567,São João da Talha,2228,11,177,PT,38.82378,-9.09719 89568,São João das Lampas,2228,11,177,PT,38.87376,-9.39842 89571,São João dos Montes,2228,11,177,PT,38.93944,-9.01892 89580,São Pedro da Cadeira,2228,11,177,PT,39.06983,-9.37174 89543,Silveira,2228,11,177,PT,39.1112,-9.3643 89546,Sintra,2228,11,177,PT,38.81439,-9.3837 89548,Sobral de Monte Agraço,2228,11,177,PT,39.01958,-9.15081 89549,Sobralinho,2228,11,177,PT,38.91703,-9.02656 89602,Terrugem,2228,11,177,PT,38.70647,-9.28693 89608,Torres Vedras,2228,11,177,PT,39.09109,-9.2586 89617,Unhos,2228,11,177,PT,38.81958,-9.12007 89634,Venda do Pinheiro,2228,11,177,PT,38.92365,-9.23178 89636,Ventosa,2228,11,177,PT,39.12696,-9.08423 89638,Vialonga,2228,11,177,PT,38.87206,-9.07805 89649,Vila Franca de Xira,2228,11,177,PT,38.92137,-9.0322 89667,Vila Verde,2228,11,177,PT,39.15489,-9.11512 89681,Vimeiro,2228,11,177,PT,39.17768,-9.31702 89693,Água de Pena,2231,30,177,PT,32.70143,-16.77874 88978,Arco da Calheta,2231,30,177,PT,32.71502,-17.14974 89038,Boaventura,2231,30,177,PT,32.81846,-16.97268 89068,Calheta,2231,30,177,PT,32.71667,-17.18333 89071,Camacha,2231,30,177,PT,32.67919,-16.84462 89139,Câmara de Lobos,2231,30,177,PT,32.65043,-16.97718 89074,Campanário,2231,30,177,PT,32.66578,-17.03576 89084,Canhas,2231,30,177,PT,32.69465,-17.09867 89086,Caniçal,2231,30,177,PT,32.73834,-16.73836 89087,Caniço,2231,30,177,PT,32.65078,-16.83749 89138,Curral das Freiras,2231,30,177,PT,32.72029,-16.96993 89156,Estreito da Calheta,2231,30,177,PT,32.73704,-17.18674 89161,Faial,2231,30,177,PT,32.78333,-16.85 89162,Fajã da Ovelha,2231,30,177,PT,32.77457,-17.23412 89197,Funchal,2231,30,177,PT,32.66568,-16.92547 89262,Machico,2231,30,177,PT,32.7162,-16.76758 89351,Nossa Senhora do Monte,2231,30,177,PT,32.66667,-16.9 89414,Ponta do Sol,2231,30,177,PT,32.6798,-17.1 89432,Porto da Cruz,2231,30,177,PT,32.76667,-16.83333 89429,Porto Moniz,2231,30,177,PT,32.86681,-17.16667 89431,Porto Santo,2231,30,177,PT,33.07145,-16.34304 89465,Ribeira Brava,2231,30,177,PT,32.67483,-17.06288 89499,Santa Cruz,2231,30,177,PT,32.68806,-16.79388 89509,Santana,2231,30,177,PT,32.8,-16.88333 89563,São Jorge,2231,30,177,PT,32.81667,-16.9 89575,São Martinho,2231,30,177,PT,32.6448,-16.93843 89585,São Roque,2231,30,177,PT,32.66667,-16.91667 89591,São Vicente,2231,30,177,PT,32.79673,-17.04323 88953,Alter do Chão,2232,12,177,PT,39.23098,-7.7443 88995,Arronches,2232,12,177,PT,39.12242,-7.28619 88999,Atalaia,2232,12,177,PT,39.45551,-7.87295 89008,Avis,2232,12,177,PT,39.06448,-7.8956 89078,Campo Maior,2232,12,177,PT,39.02935,-7.06479 89107,Castelo de Vide,2232,12,177,PT,39.41624,-7.4568 89134,Crato,2232,12,177,PT,39.28657,-7.64408 89142,Elvas,2232,12,177,PT,38.8815,-7.16282 89195,Fronteira,2232,12,177,PT,39.07179,-7.61052 89208,Gavião,2232,12,177,PT,39.44462,-7.89532 89282,Marvão,2232,12,177,PT,39.39377,-7.37663 89314,Monforte,2232,12,177,PT,39.0496,-7.44428 89319,Montargil,2232,12,177,PT,39.07771,-8.17044 89347,Nisa,2232,12,177,PT,39.51828,-7.67496 89418,Ponte de Sor,2232,12,177,PT,39.21441,-8.0542 89422,Portalegre,2232,12,177,PT,39.2974,-7.41538 89513,Santo André,2232,12,177,PT,39.05532,-8.24414 89553,Sousel,2232,12,177,PT,38.96685,-7.71788 89624,Vale da Amoreira,2232,12,177,PT,39.06969,-7.69849 89691,Água Longa,2243,13,177,PT,41.24972,-8.49285 89694,Águas Santas,2243,13,177,PT,41.21017,-8.57599 88911,Aguçadoura,2243,13,177,PT,41.43116,-8.77844 88931,Alfena,2243,13,177,PT,41.23671,-8.52454 88951,Alpendurada,2243,13,177,PT,41.08944,-8.24643 88961,Amarante,2243,13,177,PT,41.27271,-8.08245 88966,Amorim,2243,13,177,PT,41.40503,-8.75046 88971,Anta,2243,13,177,PT,41.26634,-8.62844 88982,Arcozelo,2243,13,177,PT,41.06187,-8.63192 88985,Argivai,2243,13,177,PT,41.37744,-8.72987 89696,Árvore,2243,13,177,PT,41.33922,-8.71806 89005,Aver-o-Mar,2243,13,177,PT,41.40607,-8.77958 89006,Aves,2243,13,177,PT,41.37034,-8.4101 89007,Avintes,2243,13,177,PT,41.10711,-8.55131 89011,Azenha,2243,13,177,PT,41.07651,-8.62468 89013,Baguim do Monte,2243,13,177,PT,41.19203,-8.54118 89014,Baião,2243,13,177,PT,41.16384,-8.03581 89015,Balazar,2243,13,177,PT,41.40435,-8.62386 89016,Baltar,2243,13,177,PT,41.19272,-8.38768 89022,Barrosas,2243,13,177,PT,41.35534,-8.29943 89026,Beiriz de Baixo,2243,13,177,PT,41.39727,-8.72385 89045,Bougado,2243,13,177,PT,41.33979,-8.5518 89077,Campo,2243,13,177,PT,41.18516,-8.46493 89082,Canelas,2243,13,177,PT,41.08333,-8.6 89085,Canidelo,2243,13,177,PT,41.12314,-8.64654 89099,Carvalhosa,2243,13,177,PT,41.30057,-8.3608 89108,Castelões de Cepeda,2243,13,177,PT,41.20265,-8.33516 89145,Ermesinde,2243,13,177,PT,41.21653,-8.55318 89154,Estela,2243,13,177,PT,41.44944,-8.75166 89202,Fânzeres,2243,13,177,PT,41.16754,-8.52981 89171,Felgueiras,2243,13,177,PT,41.34774,-8.20808 89175,Ferreira,2243,13,177,PT,41.26718,-8.34434 89183,Figueiró,2243,13,177,PT,41.29922,-8.16779 89189,Foz do Douro,2243,13,177,PT,41.15119,-8.67125 89190,Foz do Sousa,2243,13,177,PT,41.09668,-8.50184 89192,Frazão,2243,13,177,PT,41.25866,-8.40014 89193,Freamunde,2243,13,177,PT,41.28835,-8.33533 89206,Gandra,2243,13,177,PT,41.20116,-8.43376 89209,Gemunde,2243,13,177,PT,41.26766,-8.64515 89213,Gondomar,2243,13,177,PT,41.12015,-8.49595 89214,Grijó,2243,13,177,PT,41.02836,-8.58017 89218,Guifões,2243,13,177,PT,41.19748,-8.66899 89221,Gulpilhares,2243,13,177,PT,41.08292,-8.62679 89226,Jovim,2243,13,177,PT,41.11102,-8.51903 89239,Lavra,2243,13,177,PT,41.25935,-8.71849 89242,Leça da Palmeira,2243,13,177,PT,41.191,-8.70027 89243,Leça do Bailio,2243,13,177,PT,41.21201,-8.63422 89247,Lordelo,2243,13,177,PT,41.23451,-8.40297 89255,Lousada,2243,13,177,PT,41.28355,-8.27437 89258,Lustosa,2243,13,177,PT,41.34081,-8.31715 89266,Madalena,2243,13,177,PT,41.21616,-8.33451 89270,Maia,2243,13,177,PT,41.24254,-8.60257 89274,Marco de Canaveses,2243,13,177,PT,41.15545,-8.16954 89275,Marco de Canavezes,2243,13,177,PT,41.18389,-8.14864 89276,Margaride,2243,13,177,PT,41.36478,-8.19999 89284,Matosinhos,2243,13,177,PT,41.18207,-8.68908 89289,Meinedo,2243,13,177,PT,41.24827,-8.25807 89291,Melres,2243,13,177,PT,41.06989,-8.40091 89297,Milheirós,2243,13,177,PT,41.21478,-8.58837 89301,Mindelo,2243,13,177,PT,41.31527,-8.72124 89329,Moreira,2243,13,177,PT,41.056,-8.38939 89344,Negrelos,2243,13,177,PT,41.34946,-8.40145 89348,Nogueira,2243,13,177,PT,41.24246,-8.58685 89360,Olival,2243,13,177,PT,41.05024,-8.54416 89367,Oliveira do Douro,2243,13,177,PT,41.12466,-8.58463 89388,Paços de Ferreira,2243,13,177,PT,41.28964,-8.37584 89383,Paredes,2243,13,177,PT,41.20501,-8.37506 89389,Pedroso,2243,13,177,PT,41.41103,-8.74897 89390,Pedrouços,2243,13,177,PT,41.1888,-8.58624 89394,Penafiel,2243,13,177,PT,41.20931,-8.26996 89401,Perafita,2243,13,177,PT,41.18252,-8.2545 89404,Perozinho,2243,13,177,PT,41.06513,-8.58531 89425,Porto,2243,13,177,PT,41.14961,-8.61099 89445,Póvoa de Varzim,2243,13,177,PT,41.38344,-8.76364 89455,Rebordões,2243,13,177,PT,41.35509,-8.42355 89454,Rebordosa,2243,13,177,PT,41.22405,-8.40669 89456,Recarei,2243,13,177,PT,41.15356,-8.41178 89472,Rio Mau,2243,13,177,PT,41.40422,-8.67994 89474,Rio Tinto,2243,13,177,PT,41.17872,-8.55953 89491,Sandim,2243,13,177,PT,41.03508,-8.507 89503,Santa Cruz do Bispo,2243,13,177,PT,41.21462,-8.67406 89518,Santo Izidoro,2243,13,177,PT,41.21083,-8.14224 89519,Santo Tirso,2243,13,177,PT,41.33014,-8.43827 89562,São Félix da Marinha,2243,13,177,PT,41.03555,-8.62259 89573,São Mamede de Infesta,2243,13,177,PT,41.19183,-8.61105 89579,São Miguel do Couto,2243,13,177,PT,41.33167,-8.46185 89581,São Pedro da Cova,2243,13,177,PT,41.14331,-8.50033 89584,São Romão do Coronado,2243,13,177,PT,41.28544,-8.5632 89527,Senhora da Hora,2243,13,177,PT,41.18641,-8.65172 89530,Sermonde,2243,13,177,PT,41.04712,-8.58449 89532,Seroa,2243,13,177,PT,41.26511,-8.42892 89538,Serzedo,2243,13,177,PT,41.05105,-8.61605 89547,Sobrado,2243,13,177,PT,41.21041,-8.45488 89600,Telões,2243,13,177,PT,41.31054,-8.11101 89613,Trofa,2243,13,177,PT,41.30646,-8.5764 89620,Vairão,2243,13,177,PT,41.3329,-8.66657 89621,Valadares,2243,13,177,PT,41.14737,-7.9812 89623,Valbom,2243,13,177,PT,41.12921,-8.56199 89631,Valongo,2243,13,177,PT,41.20797,-8.50086 89672,Vila do Conde,2243,13,177,PT,41.35326,-8.74516 89652,Vila Meã,2243,13,177,PT,41.25116,-8.18397 89655,Vila Nova da Telha,2243,13,177,PT,41.0717,-8.64146 89657,Vila Nova de Gaia,2243,13,177,PT,41.12401,-8.61241 89675,Vilar de Andorinho,2243,13,177,PT,41.10574,-8.58622 89677,Vilar do Paraíso,2243,13,177,PT,41.08974,-8.6211 89678,Vilarinho,2243,13,177,PT,41.35955,-8.33123 89685,Vizela,2243,13,177,PT,41.38242,-8.24887 88906,Abrantes,2238,14,177,PT,39.46667,-8.2 88916,Alcanede,2238,14,177,PT,39.41501,-8.82189 88917,Alcanena,2238,14,177,PT,39.459,-8.66892 88918,Alcanhões,2238,14,177,PT,39.29603,-8.65847 88932,Alferrarede,2238,14,177,PT,39.48333,-8.16667 88948,Almeirim,2238,14,177,PT,39.20837,-8.62635 88952,Alpiarça,2238,14,177,PT,39.25712,-8.58187 88963,Amiães de Baixo,2238,14,177,PT,39.44296,-8.73358 89012,Azinhaga,2238,14,177,PT,39.34877,-8.53005 89031,Bemfica,2238,14,177,PT,39.14325,-8.68717 89032,Benavente,2238,14,177,PT,38.908,-8.76898 89098,Cartaxo,2238,14,177,PT,39.15377,-8.81373 89116,Chamusca,2238,14,177,PT,39.299,-8.39933 89127,Constância,2238,14,177,PT,39.45718,-8.30368 89130,Coruche,2238,14,177,PT,38.9595,-8.52745 89143,Entroncamento,2238,14,177,PT,39.46667,-8.46667 89201,Fátima,2238,14,177,PT,39.62071,-8.65237 89169,Fazendas de Almeirim,2238,14,177,PT,39.17553,-8.56927 89177,Ferreira do Zêzere,2238,14,177,PT,39.72303,-8.31661 89211,Golegã,2238,14,177,PT,39.38683,-8.50591 89285,Mação,2238,14,177,PT,39.59331,-7.99772 89265,Madalena,2238,14,177,PT,39.57133,-8.44635 89278,Marinhais,2238,14,177,PT,39.0473,-8.70236 89300,Minde,2238,14,177,PT,39.51631,-8.68799 89315,Monsanto,2238,14,177,PT,39.46203,-8.7118 89317,Montalvinho,2238,14,177,PT,39.48333,-8.3 89318,Montalvo,2238,14,177,PT,39.48333,-8.3 89373,Ourém,2238,14,177,PT,39.66179,-8.57895 89376,Paialvo,2238,14,177,PT,39.56399,-8.46835 89392,Pego,2238,14,177,PT,39.46146,-8.14955 89408,Pinheiro Grande,2238,14,177,PT,39.39212,-8.4341 89409,Poceirão,2238,14,177,PT,38.83095,-8.79365 89420,Pontével,2238,14,177,PT,39.14945,-8.8388 89438,Praia do Ribatejo,2238,14,177,PT,39.46667,-8.35 89463,Riachos,2238,14,177,PT,39.44472,-8.5142 89471,Rio Maior,2238,14,177,PT,39.34288,-8.93806 89486,Salvaterra de Magos,2238,14,177,PT,39.04482,-8.68903 89488,Samora Correia,2238,14,177,PT,38.93709,-8.87178 89506,Santa Margarida da Coutada,2238,14,177,PT,39.45,-8.31667 89510,Santarém,2238,14,177,PT,39.23333,-8.68333 89578,São Miguel de Rio Torto,2238,14,177,PT,39.43333,-8.21667 89593,São Vicente do Paul,2238,14,177,PT,39.34946,-8.62221 89521,Sardoal,2238,14,177,PT,39.55643,-8.14323 89604,Tomar,2238,14,177,PT,39.60199,-8.40924 89607,Torres Novas,2238,14,177,PT,39.4916,-8.54796 89610,Tramagal,2238,14,177,PT,39.45,-8.25 89626,Vale de Figueira,2238,14,177,PT,39.30569,-8.62876 89627,Vale de Santarém,2238,14,177,PT,39.19052,-8.72735 89646,Vila Chã de Ourique,2238,14,177,PT,39.17219,-8.76658 89654,Vila Nova da Barquinha,2238,14,177,PT,39.46081,-8.43588 88924,Alcácer do Sal,2242,15,177,PT,38.37326,-8.51444 88921,Alcochete,2242,15,177,PT,38.73827,-8.97936 88927,Aldeia de Paio Pires,2242,15,177,PT,38.61667,-9.08333 88940,Alhos Vedros,2242,15,177,PT,38.65486,-9.02368 88945,Almada,2242,15,177,PT,38.67902,-9.1569 88965,Amora,2242,15,177,PT,38.62961,-9.11557 88992,Arrentela,2242,15,177,PT,38.625,-9.10151 89010,Azeitão,2242,15,177,PT,38.51919,-9.0139 89021,Barreiro,2242,15,177,PT,38.66314,-9.0724 89058,Cacilhas,2242,15,177,PT,38.68638,-9.14938 89089,Caparica,2242,15,177,PT,38.66179,-9.20032 89115,Cercal,2242,15,177,PT,37.80129,-8.674 89118,Charneca de Caparica,2242,15,177,PT,38.62032,-9.19426 89124,Comporta,2242,15,177,PT,38.38059,-8.78608 89128,Corroios,2242,15,177,PT,38.64004,-9.1508 89132,Costa de Caparica,2242,15,177,PT,38.64458,-9.23556 89215,Grândola,2242,15,177,PT,38.18999,-8.61197 89236,Laranjeira,2242,15,177,PT,38.65599,-9.15376 89240,Lavradio,2242,15,177,PT,38.66808,-9.05204 89309,Moita,2242,15,177,PT,38.65854,-9.0104 89326,Montijo,2242,15,177,PT,38.7299,-8.69364 89377,Palmela,2242,15,177,PT,38.56902,-8.90126 89406,Piedade,2242,15,177,PT,38.67005,-9.15852 89407,Pinhal Novo,2242,15,177,PT,38.63106,-8.91376 89426,Porto Covo,2242,15,177,PT,37.85256,-8.79018 89436,Pragal,2242,15,177,PT,38.67459,-9.16981 89450,Quinta do Anjo,2242,15,177,PT,38.56753,-8.94228 89449,Quinta Do Conde,2242,15,177,PT,38.56528,-9.04316 89478,Rosairinho,2242,15,177,PT,38.67734,-9.00836 89489,Samouco,2242,15,177,PT,38.72035,-9.00471 89511,Santiago do Cacém,2242,15,177,PT,38.02502,-8.67577 89512,Santo André,2242,15,177,PT,38.06078,-8.7822 89515,Santo António da Charneca,2242,15,177,PT,38.62561,-9.03043 89522,Sarilhos Pequenos,2242,15,177,PT,38.68176,-8.98231 89523,Seixal,2242,15,177,PT,38.61173,-9.10371 89539,Sesimbra,2242,15,177,PT,38.49486,-9.12011 89540,Setúbal,2242,15,177,PT,38.5244,-8.8882 89545,Sines,2242,15,177,PT,37.95622,-8.86979 89550,Sobreda,2242,15,177,PT,38.64961,-9.18977 89609,Trafaria,2242,15,177,PT,38.67222,-9.23268 88981,Arcos de Valdevez,2245,16,177,PT,41.84668,-8.41905 89073,Caminha,2245,16,177,PT,41.84647,-8.80133 89290,Melgaço,2245,16,177,PT,42.08067,-8.24844 89327,Monção,2245,16,177,PT,42.07892,-8.48076 89384,Paredes de Coura,2245,16,177,PT,41.90995,-8.57034 89416,Ponte da Barca,2245,16,177,PT,41.80669,-8.31014 89417,Ponte de Lima,2245,16,177,PT,41.74682,-8.57637 89629,Valença,2245,16,177,PT,42.02821,-8.63388 89640,Viana do Castelo,2245,16,177,PT,41.69371,-8.83456 88941,Alijó,2234,17,177,PT,41.28447,-7.48545 89044,Boticas,2234,17,177,PT,41.68939,-7.66914 89119,Chaves,2234,17,177,PT,41.73961,-7.4503 89168,Favaios,2234,17,177,PT,41.26876,-7.50465 89210,Godim,2234,17,177,PT,41.17104,-7.80303 89294,Mesão Frio,2234,17,177,PT,41.1619,-7.87284 89313,Mondim de Basto,2234,17,177,PT,41.41347,-7.95479 89316,Montalegre,2234,17,177,PT,41.8318,-7.78999 89339,Murça,2234,17,177,PT,41.41825,-7.45121 89405,Peso da Régua,2234,17,177,PT,41.19157,-7.83668 89468,Ribeira de Pena,2234,17,177,PT,41.51021,-7.79673 89480,Sabrosa,2234,17,177,PT,41.26702,-7.57601 89500,Santa Cruz,2234,17,177,PT,41.76007,-7.46834 89508,Santa Marta de Penaguião,2234,17,177,PT,41.20991,-7.78386 89551,Sobreira,2234,17,177,PT,41.52371,-7.80234 89632,Valpaços,2234,17,177,PT,41.62082,-7.33607 89661,Vila Pouca de Aguiar,2234,17,177,PT,41.52079,-7.63671 89663,Vila Real,2234,17,177,PT,41.30021,-7.73985 89680,Vilela,2234,17,177,PT,41.22511,-7.60338 88907,Abraveses,2237,18,177,PT,40.68137,-7.92102 88987,Armamar,2237,18,177,PT,41.09718,-7.68553 89054,Cabanas de Viriato,2237,18,177,PT,40.47662,-7.97445 89076,Campo,2237,18,177,PT,40.71086,-7.91445 89079,Campo de Besteiros,2237,18,177,PT,40.55655,-8.13432 89080,Canas de Senhorim,2237,18,177,PT,40.50012,-7.89874 89097,Carregal do Sal,2237,18,177,PT,40.45007,-7.99819 89109,Castro Daire,2237,18,177,PT,40.92279,-7.93878 89121,Cinfães,2237,18,177,PT,41.03986,-8.11218 89146,Ervedosa do Douro,2237,18,177,PT,41.16626,-7.47305 89235,Lamego,2237,18,177,PT,41.10229,-7.81025 89272,Mangualde,2237,18,177,PT,40.60425,-7.76115 89308,Moimenta da Beira,2237,18,177,PT,40.97134,-7.62959 89331,Mortágua,2237,18,177,PT,40.39434,-8.25811 89345,Nelas,2237,18,177,PT,40.53216,-7.85152 89365,Oliveira de Frades,2237,18,177,PT,40.73357,-8.17481 89395,Penalva do Castelo,2237,18,177,PT,40.66791,-7.66015 89398,Penedono,2237,18,177,PT,40.98875,-7.39386 89462,Resende,2237,18,177,PT,41.07688,-7.95123 89475,Rio de Loba,2237,18,177,PT,40.66596,-7.87781 89498,Santa Comba Dão,2237,18,177,PT,40.40442,-8.1138 89566,São João da Pesqueira,2237,18,177,PT,41.14805,-7.40489 89569,São João de Areias,2237,18,177,PT,40.38722,-8.06783 89583,São Pedro do Sul,2237,18,177,PT,40.80073,-8.09023 89556,Sátão,2237,18,177,PT,40.76246,-7.676 89531,Sernancelhe,2237,18,177,PT,40.92097,-7.51226 89594,Tabuaço,2237,18,177,PT,41.09555,-7.56735 89595,Tarouca,2237,18,177,PT,41.02651,-7.74998 89605,Tondela,2237,18,177,PT,40.54052,-8.1004 89612,Treixedo,2237,18,177,PT,40.43246,-8.09428 89659,Vila Nova de Paiva,2237,18,177,PT,40.8659,-7.76127 89684,Viseu,2237,18,177,PT,40.6745,-7.91721 89687,Vouzela,2237,18,177,PT,40.68944,-8.1136 89874,Abrud,4724,AB,181,RO,46.27406,23.06339 89875,Abrud-Sat,4724,AB,181,RO,46.28166,23.06098 89907,Aiud,4724,AB,181,RO,46.31006,23.72128 89908,Aiudul de Sus,4724,AB,181,RO,46.31653,23.69053 89910,Alba Iulia,4724,AB,181,RO,46.06667,23.58333 89911,Albac,4724,AB,181,RO,46.45246,22.95164 89937,Almaşu Mare,4724,AB,181,RO,46.11014,23.11721 89992,Arieşeni,4724,AB,181,RO,46.47641,22.75741 90006,Avram Iancu,4724,AB,181,RO,46.38333,22.78333 90032,Baia de Arieş,4724,AB,181,RO,46.38045,23.28115 90504,Bălcaciu,4724,AB,181,RO,46.19122,24.06139 90545,Bărăbanț,4724,AB,181,RO,46.0993,23.58487 90109,Berghin,4724,AB,181,RO,46.07782,23.73742 90132,Biia,4724,AB,181,RO,46.23097,24.00461 90143,Bistra,4724,AB,181,RO,46.3782,23.10081 90156,Blaj,4724,AB,181,RO,46.17508,23.91578 90161,Blândiana,4724,AB,181,RO,45.97943,23.38543 90159,Blideşti,4724,AB,181,RO,46.3,23.13333 90344,Bucerdea-Grânoasă,4724,AB,181,RO,46.2,23.83333 90350,Bucium,4724,AB,181,RO,46.26402,23.1791 93791,Câlnic,4724,AB,181,RO,45.88333,23.66667 93796,Câmpeni,4724,AB,181,RO,46.36667,23.05 90614,Cenade,4724,AB,181,RO,46.05,24.01667 90625,Cergău Mare,4724,AB,181,RO,46.09869,23.92284 90626,Cergău Mic,4724,AB,181,RO,46.08333,23.93333 90642,Ceru-Băcăinţi,4724,AB,181,RO,45.98333,23.25 90649,Cetatea de Baltă,4724,AB,181,RO,46.24794,24.17244 90746,Ciugud,4724,AB,181,RO,46.05,23.61667 90750,Ciumbrud,4724,AB,181,RO,46.3081,23.76222 90759,Ciuruleasa,4724,AB,181,RO,46.25,23.03333 90837,Comuna Albac,4724,AB,181,RO,46.45246,22.95027 90857,Comuna Almaşu Mare,4724,AB,181,RO,46.10877,23.12038 90892,Comuna Arieşeni,4724,AB,181,RO,46.47659,22.75535 90905,Comuna Avram Iancu,4724,AB,181,RO,46.38333,22.78333 90968,Comuna Berghin,4724,AB,181,RO,46.07484,23.73768 90995,Comuna Bistra,4724,AB,181,RO,46.37856,23.1015 91005,Comuna Blândiana,4724,AB,181,RO,45.98146,23.38543 91125,Comuna Bucerdea-Grânoasă,4724,AB,181,RO,46.20878,23.85614 91129,Comuna Bucium,4724,AB,181,RO,46.26131,23.15742 91540,Comuna Câlnic,4724,AB,181,RO,45.87305,23.64329 91281,Comuna Cenade,4724,AB,181,RO,46.08045,24.01382 91289,Comuna Cergău,4724,AB,181,RO,46.09314,23.94597 91299,Comuna Ceru-Băcăinţi,4724,AB,181,RO,46.00117,23.26983 91305,Comuna Cetatea de Baltă,4724,AB,181,RO,46.21619,24.16716 91367,Comuna Ciugud,4724,AB,181,RO,46.06526,23.62794 91377,Comuna Ciuruleasa,4724,AB,181,RO,46.24481,23.01644 91516,Comuna Crăciunelu de Jos,4724,AB,181,RO,46.17285,23.83585 91495,Comuna Cricău,4724,AB,181,RO,46.18689,23.55309 91533,Comuna Cut,4724,AB,181,RO,45.93972,23.66719 91601,Comuna Daia Română,4724,AB,181,RO,46.00709,23.66816 91668,Comuna Doştat,4724,AB,181,RO,45.96143,23.83313 91825,Comuna Fărău,4724,AB,181,RO,46.32999,24.04335 91829,Comuna Galda de Jos,4724,AB,181,RO,46.21776,23.56918 91965,Comuna Gârbova,4724,AB,181,RO,45.85277,23.68693 91971,Comuna Gârda de Sus,4724,AB,181,RO,46.46719,22.81519 92014,Comuna Hopârta,4724,AB,181,RO,46.33134,23.9034 92015,Comuna Horea,4724,AB,181,RO,46.50058,22.94915 92066,Comuna Ighiu,4724,AB,181,RO,46.14854,23.51232 93494,Comuna Întregalde,4724,AB,181,RO,46.24908,23.39213 92121,Comuna Jidvei,4724,AB,181,RO,46.23083,24.11475 92176,Comuna Livezile,4724,AB,181,RO,46.37559,23.58563 92183,Comuna Lopadea Nouă,4724,AB,181,RO,46.27782,23.84975 92205,Comuna Lunca Mureşului,4724,AB,181,RO,46.42943,23.93272 92216,Comuna Lupşa,4724,AB,181,RO,46.34891,23.20455 92262,Comuna Meteş,4724,AB,181,RO,46.10543,23.41707 92278,Comuna Mihalţ,4724,AB,181,RO,46.17641,23.73841 92303,Comuna Mirăslău,4724,AB,181,RO,46.3866,23.69329 92317,Comuna Mogoş,4724,AB,181,RO,46.28356,23.31873 92453,Comuna Noşlac,4724,AB,181,RO,46.413,23.97668 92480,Comuna Ocoliş,4724,AB,181,RO,46.49636,23.46581 92487,Comuna Ohaba,4724,AB,181,RO,46.08263,23.80106 92572,Comuna Pianu,4724,AB,181,RO,45.87127,23.49549 92634,Comuna Poiana Vadului,4724,AB,181,RO,46.40457,22.8708 92651,Comuna Ponor,4724,AB,181,RO,46.32065,23.40376 92666,Comuna Poşaga,4724,AB,181,RO,46.45354,23.36115 92842,Comuna Rădeşti,4724,AB,181,RO,46.24931,23.74444 92822,Comuna Râmeţ,4724,AB,181,RO,46.31564,23.52602 92821,Comuna Râmetea,4724,AB,181,RO,46.43815,23.56579 92799,Comuna Roşia de Secaş,4724,AB,181,RO,46.04807,23.85329 92798,Comuna Roşia Montană,4724,AB,181,RO,46.30991,23.08697 93096,Comuna Sălciua,4724,AB,181,RO,46.38261,23.41526 93076,Comuna Sãliştea,4724,AB,181,RO,45.91425,23.41294 93049,Comuna Sâncel,4724,AB,181,RO,46.21176,23.94791 93067,Comuna Sântimbru,4724,AB,181,RO,46.12974,23.66899 93112,Comuna Săsciori,4724,AB,181,RO,45.85629,23.56898 92905,Comuna Scărişoara,4724,AB,181,RO,46.46072,22.88166 93512,Comuna Şibot,4724,AB,181,RO,45.94093,23.32226 92972,Comuna Sohodol,4724,AB,181,RO,46.32748,22.99414 93540,Comuna Şona,4724,AB,181,RO,46.25089,24.00259 93545,Comuna Şpring,4724,AB,181,RO,45.96833,23.73449 93003,Comuna Stremţ,4724,AB,181,RO,46.25606,23.5934 93558,Comuna Şugag,4724,AB,181,RO,45.7478,23.59957 93274,Comuna Unirea,4724,AB,181,RO,46.41948,23.7626 93293,Comuna Vadu Moţilor,4724,AB,181,RO,46.4091,22.95532 93308,Comuna Valea Lungă,4724,AB,181,RO,46.13355,24.0828 93354,Comuna Vidra,4724,AB,181,RO,46.37067,22.92726 93368,Comuna Vinţu de Jos,4724,AB,181,RO,46.02229,23.45647 93751,Crăciunelu de Jos,4724,AB,181,RO,46.18333,23.83333 93717,Cricău,4724,AB,181,RO,46.18333,23.56667 93765,Cugir,4724,AB,181,RO,45.83651,23.36998 93780,Cut,4724,AB,181,RO,45.93972,23.66719 93889,Daia Română,4724,AB,181,RO,46.01667,23.66667 93947,Dobra,4724,AB,181,RO,45.76913,23.64218 94008,Doştat,4724,AB,181,RO,45.96667,23.85 94268,Fărău,4724,AB,181,RO,46.33333,24.01667 94151,Feisa,4724,AB,181,RO,46.22608,24.14492 94157,Feneș,4724,AB,181,RO,46.10431,23.29511 94276,Galda de Jos,4724,AB,181,RO,46.18333,23.61667 94483,Gârbova,4724,AB,181,RO,45.86667,23.73333 94489,Gârda de Sus,4724,AB,181,RO,46.45,22.81667 94556,Hopârta,4724,AB,181,RO,46.32134,23.87244 94557,Horea,4724,AB,181,RO,46.50246,22.95034 94647,Ighiel,4724,AB,181,RO,46.1468,23.47968 94648,Ighiu,4724,AB,181,RO,46.15,23.51667 94671,Intregalde,4724,AB,181,RO,46.25,23.41667 94710,Izvoarele,4724,AB,181,RO,46.17011,23.90377 94733,Jidvei,4724,AB,181,RO,46.21667,24.1 94758,Lancrăm,4724,AB,181,RO,45.98708,23.55665 94823,Livezile,4724,AB,181,RO,46.35,23.63333 94832,Lopadea Nouă,4724,AB,181,RO,46.2909,23.81901 94868,Lunca Mureşului,4724,AB,181,RO,46.43333,23.9 94886,Lupşa,4724,AB,181,RO,46.36667,23.2 94962,Meteş,4724,AB,181,RO,46.1,23.41667 94967,Micești,4724,AB,181,RO,46.10141,23.55573 94985,Mihalţ,4724,AB,181,RO,46.15,23.73333 95025,Mirăslău,4724,AB,181,RO,46.36667,23.71667 95056,Mogoș,4724,AB,181,RO,46.27554,23.28038 95106,Municipiul Aiud,4724,AB,181,RO,46.3044,23.69751 95107,Municipiul Alba Iulia,4724,AB,181,RO,46.06346,23.57494 95114,Municipiul Blaj,4724,AB,181,RO,46.15084,23.91041 95179,Municipiul Sebeş,4724,AB,181,RO,45.94237,23.57681 95358,Noşlac,4724,AB,181,RO,46.4,23.93333 95382,Oarda,4724,AB,181,RO,46.03333,23.56667 95395,Ocna Mureş,4724,AB,181,RO,46.38333,23.85 95402,Ocoliş,4724,AB,181,RO,46.48333,23.46667 95417,Ohaba,4724,AB,181,RO,46.06667,23.78333 95626,Oraş abrud,4724,AB,181,RO,46.27409,23.06129 95456,Oraş Baia de Arieş,4724,AB,181,RO,46.37933,23.29903 95503,Oraş Câmpeni,4724,AB,181,RO,46.38493,23.04553 95501,Oraş Cugir,4724,AB,181,RO,45.81371,23.4074 95556,Oraş Ocna Mureş,4724,AB,181,RO,46.38475,23.8407 95602,Oraş Teiuş,4724,AB,181,RO,46.20959,23.70812 95624,Oraş Zlatna,4724,AB,181,RO,46.13753,23.20215 95750,Petrești,4724,AB,181,RO,45.92102,23.56083 95766,Pianu de Jos,4724,AB,181,RO,45.93528,23.48912 95767,Pianu de Sus,4724,AB,181,RO,45.9,23.48333 95883,Poiana Vadului,4724,AB,181,RO,46.4,22.88333 95896,Poienile-Mogoş,4724,AB,181,RO,46.28333,23.28333 95906,Ponor,4724,AB,181,RO,46.33333,23.41667 95936,Poşaga de Sus,4724,AB,181,RO,46.46667,23.38333 96195,Rădeşti,4724,AB,181,RO,46.26667,23.71667 96214,Războieni-Cetate,4724,AB,181,RO,46.41335,23.87158 96094,Rimetea,4724,AB,181,RO,46.45,23.56667 96129,Roşia de Secaş,4724,AB,181,RO,46.05,23.88333 96136,Roșia Montană,4724,AB,181,RO,46.30669,23.13373 106013,Sălciua de Sus,4724,AB,181,RO,46.4,23.41667 106020,Săliștea,4724,AB,181,RO,45.90744,23.39789 106019,Săliştea-Deal,4724,AB,181,RO,45.9,23.4 96523,Sâncel,4724,AB,181,RO,46.2,23.95 96525,Sâncrai,4724,AB,181,RO,46.29394,23.75209 105979,Sântimbru,4724,AB,181,RO,46.13333,23.65 97114,Șard,4724,AB,181,RO,46.12814,23.5352 106039,Săsciori,4724,AB,181,RO,45.86667,23.58333 96296,Scărişoara,4724,AB,181,RO,46.46667,22.85 96302,Sebeş,4724,AB,181,RO,45.95646,23.571 96303,Sebeșel,4724,AB,181,RO,45.88771,23.56606 97042,Şibot,4724,AB,181,RO,45.95,23.33333 96403,Sohodol,4724,AB,181,RO,46.35581,23.02923 97070,Şona,4724,AB,181,RO,46.21667,24.01667 97076,Şpring,4724,AB,181,RO,45.96667,23.78333 96453,Stremţ,4724,AB,181,RO,46.21667,23.63333 97090,Şugag,4724,AB,181,RO,45.76667,23.63333 106072,Teiuş,4724,AB,181,RO,46.2,23.68333 97137,Țelna,4724,AB,181,RO,46.15902,23.50099 106111,Tiur,4724,AB,181,RO,46.16009,23.88927 96641,Uioara de Jos,4724,AB,181,RO,46.37087,23.83863 96668,Unirea,4724,AB,181,RO,46.40387,23.81314 96698,Vadu Moţilor,4724,AB,181,RO,46.4,22.96667 96729,Valea Lungă Alba Romania,4724,AB,181,RO,46.12592,24.04541 96794,Veseuș,4724,AB,181,RO,46.27456,24.14276 96797,Veza,4724,AB,181,RO,46.16747,23.9247 96808,Vidra,4724,AB,181,RO,46.36758,22.88811 96831,Vinerea,4724,AB,181,RO,45.88632,23.35289 96837,Vințu de Jos,4724,AB,181,RO,45.99462,23.48612 96915,Vurpăr,4724,AB,181,RO,46.0,23.46667 96998,Zlatna,4724,AB,181,RO,46.10633,23.23162 89880,Adea,4739,AR,181,RO,46.55511,21.58433 89902,Agrișu Mare,4739,AR,181,RO,46.27243,21.75558 89935,Almaş,4739,AR,181,RO,46.28333,22.23333 89955,Andrei Șaguna,4739,AR,181,RO,46.2881,21.39175 89970,Apateu,4739,AR,181,RO,46.61667,21.78333 89977,Arad,4739,AR,181,RO,46.18333,21.31667 89980,Archiş,4739,AR,181,RO,46.48333,22.05 90454,Bârsa,4739,AR,181,RO,46.38333,22.06667 90460,Bârzava,4739,AR,181,RO,46.11667,21.98333 90069,Bata,4739,AR,181,RO,46.01667,22.03333 90090,Beliu,4739,AR,181,RO,46.48333,21.98333 90139,Birchiş,4739,AR,181,RO,45.96667,22.16667 90176,Bocsig,4739,AR,181,RO,46.41667,21.95 90279,Brazii,4739,AR,181,RO,46.23333,22.33333 90426,Buteni,4739,AR,181,RO,46.31667,22.11667 90568,Caporal Alexa,4739,AR,181,RO,46.33793,21.58316 93866,Cărand,4739,AR,181,RO,46.45,22.08333 90627,Cermei,4739,AR,181,RO,46.55,21.85 90657,Chereluș,4739,AR,181,RO,46.4686,21.70706 90658,Chesinț,4739,AR,181,RO,46.04973,21.57944 90664,Chier,4739,AR,181,RO,46.34199,21.82488 90683,Chisindia,4739,AR,181,RO,46.28333,22.1 90687,Chişineu-Criş,4739,AR,181,RO,46.52509,21.51844 90704,Cintei,4739,AR,181,RO,46.44434,21.56556 90855,Comuna Almaş,4739,AR,181,RO,46.2848,22.23173 90877,Comuna Apateu,4739,AR,181,RO,46.62598,21.8253 90884,Comuna Archiş,4739,AR,181,RO,46.48333,22.09663 91191,Comuna Bârsa,4739,AR,181,RO,46.3841,22.04459 91197,Comuna Bârzava,4739,AR,181,RO,46.0991,22.06096 90939,Comuna Bata,4739,AR,181,RO,45.99641,22.07805 90954,Comuna Beliu,4739,AR,181,RO,46.52965,21.99566 90992,Comuna Birchiş,4739,AR,181,RO,45.96987,22.16845 91015,Comuna Bocsig,4739,AR,181,RO,46.41893,21.98424 91087,Comuna Brazii,4739,AR,181,RO,46.22177,22.32613 91174,Comuna Buteni,4739,AR,181,RO,46.33119,22.11472 91586,Comuna Cărand,4739,AR,181,RO,46.45551,22.05755 91290,Comuna Cermei,4739,AR,181,RO,46.55433,21.87084 91326,Comuna Chisindia,4739,AR,181,RO,46.26509,22.08572 91412,Comuna Conop,4739,AR,181,RO,46.10401,21.88047 91467,Comuna Covăsinţ,4739,AR,181,RO,46.20571,21.60944 91485,Comuna Craiva,4739,AR,181,RO,46.59969,21.97908 91621,Comuna Dezna,4739,AR,181,RO,46.40997,22.22726 91625,Comuna Dieci,4739,AR,181,RO,46.32071,22.22373 91666,Comuna Dorobanți,4739,AR,181,RO,46.35022,21.24441 91810,Comuna Fântânele,4739,AR,181,RO,46.12441,21.38111 91758,Comuna Felnac,4739,AR,181,RO,46.12223,21.16704 91787,Comuna Frumuşeni,4739,AR,181,RO,46.1018,21.45836 91861,Comuna Ghioroc,4739,AR,181,RO,46.15322,21.59651 91943,Comuna Grăniceri,4739,AR,181,RO,46.50539,21.33672 91957,Comuna Gurahonţ,4739,AR,181,RO,46.2922,22.33506 92039,Comuna Hălmăgel,4739,AR,181,RO,46.27662,22.6318 92038,Comuna Hălmagiu,4739,AR,181,RO,46.27536,22.58183 92046,Comuna Hăşmaş,4739,AR,181,RO,46.52217,22.07003 92067,Comuna Igneşti,4739,AR,181,RO,46.43388,22.18227 92092,Comuna Iratoşu,4739,AR,181,RO,46.29414,21.1875 92173,Comuna Livada,4739,AR,181,RO,46.21924,21.38746 92227,Comuna Macea,4739,AR,181,RO,46.40094,21.33187 92310,Comuna Mişca,4739,AR,181,RO,46.62016,21.65353 92329,Comuna Moneasa,4739,AR,181,RO,46.44443,22.25323 92493,Comuna Olari,4739,AR,181,RO,46.38673,21.54522 92728,Comuna Păuliş,4739,AR,181,RO,46.12506,21.60246 92546,Comuna Peregu Mare,4739,AR,181,RO,46.23377,20.90612 92566,Comuna Petriş,4739,AR,181,RO,46.0677,22.39523 92584,Comuna Pilu,4739,AR,181,RO,46.59727,21.34711 92593,Comuna Pleşcuţa,4739,AR,181,RO,46.28315,22.43178 93496,Comuna Şagu,4739,AR,181,RO,46.04254,21.34239 93118,Comuna Săvârşin,4739,AR,181,RO,46.02527,22.26514 92916,Comuna Secusigiu,4739,AR,181,RO,46.0926,21.00295 93503,Comuna Şeitin,4739,AR,181,RO,46.10858,20.84464 92920,Comuna Seleuş,4739,AR,181,RO,46.37886,21.74875 92921,Comuna Semlac,4739,AR,181,RO,46.1126,20.9321 93508,Comuna Şepreuş,4739,AR,181,RO,46.57125,21.73417 93513,Comuna Şicula,4739,AR,181,RO,46.45723,21.75137 93519,Comuna Şilindia,4739,AR,181,RO,46.33611,21.93488 93520,Comuna Şimand,4739,AR,181,RO,46.424,21.45145 92941,Comuna Sintea Mare,4739,AR,181,RO,46.51684,21.608 93529,Comuna Şiria,4739,AR,181,RO,46.2847,21.65419 93533,Comuna Şiştarovăţ,4739,AR,181,RO,45.98649,21.75589 92968,Comuna Socodor,4739,AR,181,RO,46.5101,21.44128 93535,Comuna Şofronea,4739,AR,181,RO,46.26814,21.29059 93230,Comuna Târnova,4739,AR,181,RO,46.29054,21.80388 93128,Comuna Tauţ,4739,AR,181,RO,46.26383,21.96747 93288,Comuna Ususău,4739,AR,181,RO,46.06781,21.8149 93465,Comuna Vărădia de Mureş,4739,AR,181,RO,46.04619,22.15651 93441,Comuna Vârfurile,4739,AR,181,RO,46.33689,22.51984 93365,Comuna Vinga,4739,AR,181,RO,46.02249,21.15244 93383,Comuna Vladimirescu,4739,AR,181,RO,46.16509,21.40411 93484,Comuna Zăbrani,4739,AR,181,RO,46.0631,21.58529 93485,Comuna Zădăreni,4739,AR,181,RO,46.13077,21.20866 93488,Comuna Zărand,4739,AR,181,RO,46.43911,21.56909 93474,Comuna Zerind,4739,AR,181,RO,46.63087,21.50777 93477,Comuna Zimandu Nou,4739,AR,181,RO,46.27496,21.39162 93592,Conop,4739,AR,181,RO,46.10186,21.8797 93682,Covăsinţ,4739,AR,181,RO,46.2,21.6 93705,Craiva,4739,AR,181,RO,46.58333,21.96667 93776,Curtici,4739,AR,181,RO,46.35,21.3 93782,Cuvin,4739,AR,181,RO,46.17001,21.5936 93932,Dezna,4739,AR,181,RO,46.4,22.25 93936,Dieci,4739,AR,181,RO,46.31667,22.25 93996,Dorgoş,4739,AR,181,RO,46.05,21.83333 94003,Dorobanți,4739,AR,181,RO,46.35022,21.24441 94029,Drauț,4739,AR,181,RO,46.26048,21.80924 94238,Fântânele,4739,AR,181,RO,46.1237,21.3842 94156,Felnac,4739,AR,181,RO,46.11667,21.15 94214,Frumușeni,4739,AR,181,RO,46.10252,21.46167 94281,Galșa,4739,AR,181,RO,46.2881,21.65137 94333,Ghioroc,4739,AR,181,RO,46.15,21.58333 94444,Grăniceri,4739,AR,181,RO,46.51667,21.3 94468,Gurahonţ,4739,AR,181,RO,46.26667,22.35 94470,Gurba,4739,AR,181,RO,46.46756,21.78789 94600,Hălmăgel,4739,AR,181,RO,46.26667,22.61667 94599,Hălmagiu,4739,AR,181,RO,46.26667,22.58333 94610,Hășmaș,4739,AR,181,RO,46.5,22.08333 94561,Horia,4739,AR,181,RO,46.20847,21.46287 94650,Igneşti,4739,AR,181,RO,46.4,22.16667 94667,Ineu,4739,AR,181,RO,46.43372,21.84048 94686,Iratoşu,4739,AR,181,RO,46.31667,21.2 94804,Lipova,4739,AR,181,RO,46.09085,21.69628 94814,Livada,4739,AR,181,RO,46.22284,21.38403 94903,Macea,4739,AR,181,RO,46.38333,21.3 95230,Măderat,4739,AR,181,RO,46.29493,21.71137 94908,Mailat,4739,AR,181,RO,46.04189,21.10702 95264,Mănăștur,4739,AR,181,RO,46.00949,21.13362 95215,Mândruloc,4739,AR,181,RO,46.14863,21.4657 95226,Mâsca,4739,AR,181,RO,46.3,21.68333 95035,Mișca,4739,AR,181,RO,46.6028,21.59998 95068,Moneasa,4739,AR,181,RO,46.45,22.25 95109,Municipiul Arad,4739,AR,181,RO,46.17745,21.31348 95296,Nadab,4739,AR,181,RO,46.48195,21.51178 95297,Nadăș,4739,AR,181,RO,46.2249,21.95036 95367,Nădlac,4739,AR,181,RO,46.16667,20.75 95332,Neudorf,4739,AR,181,RO,46.0696,21.61899 95424,Olari,4739,AR,181,RO,46.38333,21.55 95492,Oraş Chişineu-Criş,4739,AR,181,RO,46.52178,21.51295 95502,Oraş Curtici,4739,AR,181,RO,46.34358,21.31051 95534,Oraş Ineu,4739,AR,181,RO,46.42709,21.84185 95538,Oraş Lipova,4739,AR,181,RO,46.09061,21.69465 95553,Oraş Nãdlac,4739,AR,181,RO,46.16664,20.74871 95575,Oraş Pâncota,4739,AR,181,RO,46.31205,21.70163 95597,Oraş Sântana,4739,AR,181,RO,46.34622,21.50402 95585,Oraş Sebiş,4739,AR,181,RO,46.38771,22.1548 95994,Pâncota,4739,AR,181,RO,46.33333,21.7 96032,Păuliş,4739,AR,181,RO,46.11667,21.58333 95722,Pecica,4739,AR,181,RO,46.16667,21.06667 95725,Peregu Mare,4739,AR,181,RO,46.23333,20.9 95726,Peregu Mic,4739,AR,181,RO,46.25021,20.94885 95753,Petriş,4739,AR,181,RO,46.05,22.38333 95793,Pilu,4739,AR,181,RO,46.56667,21.35 95811,Pleşcuţa,4739,AR,181,RO,46.3,22.43333 96051,Radna,4739,AR,181,RO,46.09444,21.68732 97028,Şagu,4739,AR,181,RO,46.05,21.28333 96521,Sâmbăteni,4739,AR,181,RO,46.1411,21.52689 96532,Sânmartin,4739,AR,181,RO,46.41653,21.34821 96544,Sânpetru German,4739,AR,181,RO,46.11327,21.04932 105976,Sântana,4739,AR,181,RO,46.35,21.5 96254,Satu Mare,4739,AR,181,RO,46.06628,20.95826 106048,Săvârşin,4739,AR,181,RO,46.01667,22.23333 96304,Sebiş,4739,AR,181,RO,46.36667,22.11667 96317,Secusigiu,4739,AR,181,RO,46.08333,20.98333 97034,Şeitin,4739,AR,181,RO,46.1,20.85 96324,Seleuş,4739,AR,181,RO,46.38333,21.71667 96325,Semlac,4739,AR,181,RO,46.11667,20.93333 97116,Șepreuș,4739,AR,181,RO,46.57125,21.73417 97121,Șiclău,4739,AR,181,RO,46.49124,21.36834 97043,Şicula,4739,AR,181,RO,46.43333,21.75 97048,Şilindia,4739,AR,181,RO,46.35,21.91667 97049,Şimand,4739,AR,181,RO,46.43333,21.45 96356,Sintea Mare,4739,AR,181,RO,46.51667,21.6 97058,Şiria,4739,AR,181,RO,46.26667,21.63333 97062,Şiştarovăţ,4739,AR,181,RO,46.01667,21.73333 96396,Socodor,4739,AR,181,RO,46.51667,21.43333 97064,Şofronea,4739,AR,181,RO,46.26667,21.3 96595,Târnova,4739,AR,181,RO,46.31667,21.8 106063,Tauţ,4739,AR,181,RO,46.28333,21.91667 97140,Țipar,4739,AR,181,RO,46.47563,21.63431 96564,Turnu,4739,AR,181,RO,46.25764,21.12657 96691,Ususău,4739,AR,181,RO,46.07063,21.81371 96932,Vânători,4739,AR,181,RO,46.62456,21.67332 96973,Vărădia de Mureş,4739,AR,181,RO,46.01667,22.15 96940,Vârfurile,4739,AR,181,RO,46.31667,22.51667 96832,Vinga,4739,AR,181,RO,46.01667,21.2 96857,Vladimirescu,4739,AR,181,RO,46.16628,21.40102 97009,Zăbrani,4739,AR,181,RO,46.06667,21.55 97010,Zădăreni,4739,AR,181,RO,46.13274,21.21821 97014,Zărand,4739,AR,181,RO,46.4,21.65 96989,Zerind,4739,AR,181,RO,46.61667,21.51667 96993,Zimandu Nou,4739,AR,181,RO,46.28333,21.4 89914,Albeşti,4722,AG,181,RO,45.30955,25.0078 89919,Albeştii Pământeni,4722,AG,181,RO,45.21667,24.66667 89921,Albeștii Ungureni,4722,AG,181,RO,45.22529,24.67254 89923,Albota,4722,AG,181,RO,44.78333,24.85 89924,Albota de Jos,4722,AG,181,RO,44.76667,24.83333 89964,Aninoasa,4722,AG,181,RO,45.18333,24.93333 89985,Arefu,4722,AG,181,RO,45.33333,24.6 89988,Argeșelu,4722,AG,181,RO,44.9274,24.87115 90467,Băbana,4722,AG,181,RO,44.9,24.7 90483,Bădești,4722,AG,181,RO,45.17157,24.86064 90487,Băiculeşti,4722,AG,181,RO,45.06667,24.7 90501,Băjești,4722,AG,181,RO,45.02615,24.94006 90512,Bălileşti,4722,AG,181,RO,45.06667,24.93333 90548,Bărăști,4722,AG,181,RO,45.25369,24.59651 90449,Bârla,4722,AG,181,RO,44.42606,24.77743 90451,Bârlogu,4722,AG,181,RO,44.62658,25.08066 90073,Başcov,4722,AG,181,RO,44.9,24.81667 90086,Beleţi,4722,AG,181,RO,44.9,25.08333 90102,Berevoeşti,4722,AG,181,RO,45.23333,24.91667 90185,Bogaţi,4722,AG,181,RO,44.86667,25.13333 90242,Boteni,4722,AG,181,RO,45.18333,25.11667 90257,Boţeşti,4722,AG,181,RO,45.01667,25.13333 90262,Bradu,4722,AG,181,RO,44.78333,24.9 90326,Brăduleţ,4722,AG,181,RO,45.28333,24.76667 90367,Bucșenești,4722,AG,181,RO,45.30096,24.65841 90368,Bucșenești-Lotași,4722,AG,181,RO,45.01307,24.96845 90378,Budeasa Mică,4722,AG,181,RO,44.95,24.85 90392,Bughea de Jos,4722,AG,181,RO,45.26667,25.0 90394,Bughea de Sus,4722,AG,181,RO,45.29812,25.03284 90434,Buzoeşti,4722,AG,181,RO,44.58333,24.91667 93832,Căldăraru,4722,AG,181,RO,44.45,24.95 93838,Călineşti,4722,AG,181,RO,44.81667,25.05 93800,Câmpulung,4722,AG,181,RO,45.26667,25.05 93864,Căpățânenii Pământeni,4722,AG,181,RO,45.31667,24.65 90571,Capu Piscului,4722,AG,181,RO,45.17999,24.97679 93876,Căteasca,4722,AG,181,RO,44.76667,25.08333 90617,Ceparii Pământeni,4722,AG,181,RO,45.21667,24.56667 90650,Cetăţeni,4722,AG,181,RO,45.2,25.18333 90699,Cicănești,4722,AG,181,RO,45.24601,24.60526 90718,Ciofrângeni,4722,AG,181,RO,45.08333,24.53333 90721,Ciomăgeşti,4722,AG,181,RO,44.83333,24.45 90748,Ciulnița,4722,AG,181,RO,44.78769,25.15388 90784,Cocu,4722,AG,181,RO,44.86667,24.65 90796,Colibași,4722,AG,181,RO,44.93544,24.90905 90844,Comuna Albeștii de Argeș,4722,AG,181,RO,45.21667,24.66667 90845,Comuna Albeștii de Muscel,4722,AG,181,RO,45.31667,25.0 90846,Comuna Albota,4722,AG,181,RO,44.78287,24.81838 90872,Comuna Aninoasa,4722,AG,181,RO,45.20222,24.91206 90888,Comuna Arefu,4722,AG,181,RO,45.33142,24.62944 91199,Comuna Băbana,4722,AG,181,RO,44.87539,24.71918 91206,Comuna Băiculeşti,4722,AG,181,RO,45.06017,24.67331 91217,Comuna Bălileşti,4722,AG,181,RO,45.07981,24.93943 91188,Comuna Bârla,4722,AG,181,RO,44.42636,24.77949 90942,Comuna Başcov,4722,AG,181,RO,44.89295,24.78532 90951,Comuna Beleţi-Negreşti,4722,AG,181,RO,44.94651,25.08603 90963,Comuna Berevoeşti,4722,AG,181,RO,45.25327,24.94292 91020,Comuna Bogaţi,4722,AG,181,RO,44.87344,25.15045 91059,Comuna Boteni,4722,AG,181,RO,45.17937,25.13073 91071,Comuna Boţeşti,4722,AG,181,RO,45.00704,25.14723 91073,Comuna Bradu,4722,AG,181,RO,44.78333,24.9 91115,Comuna Brăduleţ,4722,AG,181,RO,45.27502,24.77372 91144,Comuna Budeasa,4722,AG,181,RO,44.95042,24.80254 91152,Comuna Bughea de Jos,4722,AG,181,RO,45.27404,25.00324 91153,Comuna Bughea de Sus,4722,AG,181,RO,45.29812,25.03284 91180,Comuna Buzoeşti,4722,AG,181,RO,44.60205,24.91856 91570,Comuna Căldăraru,4722,AG,181,RO,44.45395,24.94263 91572,Comuna Călineşti,4722,AG,181,RO,44.8565,25.01968 91592,Comuna Căteasca,4722,AG,181,RO,44.77056,25.03633 91283,Comuna Cepari,4722,AG,181,RO,45.20564,24.53064 91306,Comuna Cetăţeni,4722,AG,181,RO,45.19234,25.20789 91335,Comuna Cicănești,4722,AG,181,RO,45.24577,24.60629 91348,Comuna Ciofrângeni,4722,AG,181,RO,45.10277,24.53704 91352,Comuna Ciomăgeşti,4722,AG,181,RO,44.85656,24.47229 91391,Comuna Cocu,4722,AG,181,RO,44.87429,24.65112 91424,Comuna Corbeni,4722,AG,181,RO,45.29597,24.66207 91425,Comuna Corbi,4722,AG,181,RO,45.25572,24.81611 91475,Comuna Coşeşti,4722,AG,181,RO,45.06431,24.87202 91465,Comuna Cotmeana,4722,AG,181,RO,45.00518,24.62021 91518,Comuna Cuca,4722,AG,181,RO,44.95654,24.50636 91726,Comuna Dâmbovicioara,4722,AG,181,RO,45.43452,25.22737 91743,Comuna Dărmăneşti,4722,AG,181,RO,45.00656,24.90224 91606,Comuna Davideşti,4722,AG,181,RO,45.00694,25.03599 91637,Comuna Dobreşti,4722,AG,181,RO,44.94992,25.11907 91659,Comuna Domneşti,4722,AG,181,RO,45.20562,24.83945 91686,Comuna Drăganu,4722,AG,181,RO,44.93761,24.70301 91676,Comuna Dragoslavele,4722,AG,181,RO,45.33451,25.1701 91888,Comuna Godeni,4722,AG,181,RO,45.22311,24.97842 92032,Comuna Hârseşti,4722,AG,181,RO,44.51091,24.78294 92033,Comuna Hârtieşti,4722,AG,181,RO,45.12629,25.11343 92109,Comuna Izvoru,4722,AG,181,RO,44.49414,25.0647 92152,Comuna Leordeni,4722,AG,181,RO,44.79117,25.16299 92154,Comuna Lereşti,4722,AG,181,RO,45.32789,25.06951 92203,Comuna Lunca Corbului,4722,AG,181,RO,44.68361,24.76056 92399,Comuna Mălureni,4722,AG,181,RO,45.0478,24.77875 92416,Comuna Mărăcineni,4722,AG,181,RO,44.90857,24.87484 92261,Comuna Merișani,4722,AG,181,RO,44.96674,24.74482 92264,Comuna Miceşti,4722,AG,181,RO,44.97367,24.85577 92281,Comuna Mihăeşti,4722,AG,181,RO,45.11563,25.01938 92294,Comuna Mioarele,4722,AG,181,RO,45.23396,25.10045 92302,Comuna Miroşi,4722,AG,181,RO,44.40316,24.9517 92335,Comuna Morărești,4722,AG,181,RO,45.0076,24.56079 92349,Comuna Moşoaia,4722,AG,181,RO,44.83013,24.79957 92345,Comuna Mozăceni,4722,AG,181,RO,44.56366,25.17492 92365,Comuna Mușătești,4722,AG,181,RO,45.21667,24.78333 92430,Comuna Negraşi,4722,AG,181,RO,44.61441,25.12404 92456,Comuna Nucşoara,4722,AG,181,RO,45.33798,24.78943 92468,Comuna Oarja,4722,AG,181,RO,44.7573,24.96935 92582,Comuna Pietroşani,4722,AG,181,RO,45.15375,24.84439 92628,Comuna Poiana Lacului,4722,AG,181,RO,44.81199,24.71296 92637,Comuna Poienarii de Argeş,4722,AG,181,RO,45.06667,24.53333 92638,Comuna Poienarii de Muscel,4722,AG,181,RO,45.21667,25.05 92652,Comuna Popeşti,4722,AG,181,RO,44.44521,25.09114 92673,Comuna Priboieni,4722,AG,181,RO,44.87728,25.0868 92819,Comuna Râca,4722,AG,181,RO,44.44216,25.03671 92851,Comuna Răteşti,4722,AG,181,RO,44.7169,25.15858 92755,Comuna Recea,4722,AG,181,RO,44.54264,25.02738 92776,Comuna Rociu,4722,AG,181,RO,44.66838,25.02014 92806,Comuna Rucăr,4722,AG,181,RO,45.41607,25.17338 93100,Comuna Sălătrucu,4722,AG,181,RO,45.29098,24.52523 93104,Comuna Săpata,4722,AG,181,RO,44.72789,24.7528 92890,Comuna Schitu-Goleşti,4722,AG,181,RO,45.1863,25.00576 92954,Comuna Slobozia,4722,AG,181,RO,44.52197,25.24092 93012,Comuna Stâlpeni,4722,AG,181,RO,45.05665,24.99307 93550,Comuna Ştefan cel Mare,4722,AG,181,RO,44.49197,25.2471 92992,Comuna Stoeneşti,4722,AG,181,RO,45.26432,25.17674 92999,Comuna Stolnici,4722,AG,181,RO,44.58075,24.77335 93559,Comuna Şuici,4722,AG,181,RO,45.24454,24.53621 93041,Comuna Suseni,4722,AG,181,RO,44.70861,24.96437 93133,Comuna Teiu,4722,AG,181,RO,44.64225,25.1411 93151,Comuna Tigveni,4722,AG,181,RO,45.15588,24.55094 93580,Comuna Țițești,4722,AG,181,RO,45.01146,24.97898 93252,Comuna Uda,4722,AG,181,RO,44.87591,24.58582 93267,Comuna Ungheni,4722,AG,181,RO,44.51166,24.95186 93303,Comuna Valea Danului,4722,AG,181,RO,45.18962,24.61959 93306,Comuna Valea Iaşului,4722,AG,181,RO,45.19677,24.70094 93315,Comuna Valea Mare-Pravăţ,4722,AG,181,RO,45.289,25.10567 93338,Comuna Vedea,4722,AG,181,RO,44.77735,24.64677 93391,Comuna Vlădeşti,4722,AG,181,RO,45.14344,24.93634 93418,Comuna Vultureşti,4722,AG,181,RO,45.05999,25.0737 93598,Conțești,4722,AG,181,RO,44.98494,25.01032 93613,Corbeni,4722,AG,181,RO,45.3,24.65 93614,Corbi,4722,AG,181,RO,45.28333,24.8 93644,Cornățel,4722,AG,181,RO,44.57972,24.95487 93691,Coşeşti,4722,AG,181,RO,45.06667,24.86667 93661,Costeşti,4722,AG,181,RO,44.66667,24.88333 93673,Cotenești,4722,AG,181,RO,45.23462,25.18617 93675,Cotmeana,4722,AG,181,RO,44.96667,24.61667 93757,Cuca,4722,AG,181,RO,44.95,24.51667 93774,Curtea de Argeş,4722,AG,181,RO,45.13422,24.67409 94105,Dâmbovicioara,4722,AG,181,RO,45.45,25.23333 94133,Dărmăneşti,4722,AG,181,RO,45.01667,24.9 93898,Davideşti,4722,AG,181,RO,45.01667,25.03333 93955,Dobreşti,4722,AG,181,RO,44.96667,25.13333 93968,Dobrotu,4722,AG,181,RO,45.20633,24.65859 93989,Domneşti,4722,AG,181,RO,45.2,24.83333 94036,Drăganu-Olteni,4722,AG,181,RO,44.93333,24.71667 94039,Drăghici,4722,AG,181,RO,45.12865,25.04508 94021,Dragoslavele,4722,AG,181,RO,45.34801,25.16925 94254,Făgetu,4722,AG,181,RO,44.90616,24.91159 94508,Gălășești,4722,AG,181,RO,44.95593,24.78602 94286,Geamăna,4722,AG,181,RO,44.82005,24.89109 94368,Godeni,4722,AG,181,RO,45.23333,24.98333 94378,Golești,4722,AG,181,RO,44.8397,24.9653 94384,Gorganu,4722,AG,181,RO,44.84241,25.03838 94589,Hârseşti,4722,AG,181,RO,44.53333,24.78333 94590,Hârtieşti,4722,AG,181,RO,45.11667,25.1 94575,Humele,4722,AG,181,RO,44.52612,24.97714 94715,Izvoru,4722,AG,181,RO,44.49414,25.0647 94720,Izvoru de Sus,4722,AG,181,RO,44.81667,24.65 94750,Jugur,4722,AG,181,RO,45.19255,25.08493 94754,Jupânești,4722,AG,181,RO,45.06667,24.85 94902,Lăzărești,4722,AG,181,RO,45.15659,24.9954 94771,Leicești,4722,AG,181,RO,45.09586,24.86108 94779,Leordeni,4722,AG,181,RO,44.78333,25.11667 94781,Lereşti,4722,AG,181,RO,45.33333,25.06667 94818,Livezeni,4722,AG,181,RO,45.03838,24.97676 94864,Lunca Corbului,4722,AG,181,RO,44.68391,24.75855 95254,Mălureni,4722,AG,181,RO,45.1,24.8 95284,Mărăcineni,4722,AG,181,RO,44.9,24.88333 94926,Mareș,4722,AG,181,RO,44.77824,24.79005 95224,Mârţeşti,4722,AG,181,RO,44.71667,24.75 95295,Mățău,4722,AG,181,RO,45.23565,25.08286 94959,Merişani,4722,AG,181,RO,44.9682,24.74327 94965,Miceşti,4722,AG,181,RO,44.95,24.86667 94988,Mihăeşti,4722,AG,181,RO,45.11667,25.0 95011,Mioveni,4722,AG,181,RO,44.95905,24.94198 95024,Miroşi,4722,AG,181,RO,44.41667,24.93333 95075,Morăreşti,4722,AG,181,RO,45.01667,24.56667 95091,Moşoaia,4722,AG,181,RO,44.81667,24.76667 95087,Mozăceni,4722,AG,181,RO,44.56667,25.16667 95132,Municipiul Câmpulung,4722,AG,181,RO,45.26691,25.04419 95129,Municipiul Curtea de Argeș,4722,AG,181,RO,45.1384,24.67512 95169,Municipiul Piteşti,4722,AG,181,RO,44.85782,24.87133 95211,Mușătești,4722,AG,181,RO,45.21651,24.77941 95313,Negraşi,4722,AG,181,RO,44.6,25.11667 95362,Nucşoara,4722,AG,181,RO,45.33333,24.78333 95383,Oarja,4722,AG,181,RO,44.76053,24.97596 95384,Oarja Sat,4722,AG,181,RO,44.76429,24.97141 95412,Oeștii Pământeni,4722,AG,181,RO,45.25241,24.65658 95638,Oraș Costeşti,4722,AG,181,RO,44.66667,24.88333 95642,Oraș Mioveni,4722,AG,181,RO,44.95897,24.94274 95652,Oraș Ştefăneşti,4722,AG,181,RO,44.86667,24.93333 95646,Oraș Topoloveni,4722,AG,181,RO,44.81667,25.08333 96025,Pătuleni,4722,AG,181,RO,44.73247,25.16495 95749,Petrești,4722,AG,181,RO,45.04364,24.88989 95788,Pietroşani,4722,AG,181,RO,45.18333,24.85 95803,Piteşti,4722,AG,181,RO,44.85,24.86667 95875,Poiana Lacului,4722,AG,181,RO,44.81667,24.73333 95886,Poienari,4722,AG,181,RO,45.21667,25.05 95908,Popeşti,4722,AG,181,RO,44.44181,25.10007 95948,Priboieni,4722,AG,181,RO,44.88333,25.08333 95985,Purcăreni,4722,AG,181,RO,44.96847,24.88736 96164,Râca,4722,AG,181,RO,44.43426,25.04333 96046,Racovița,4722,AG,181,RO,44.97081,24.97582 96197,Rădești,4722,AG,181,RO,45.07184,25.00207 96210,Răteşti,4722,AG,181,RO,44.73333,25.13333 96071,Recea,4722,AG,181,RO,44.53333,25.01667 96089,Retevoiești,4722,AG,181,RO,45.14016,24.83797 96098,Rociu,4722,AG,181,RO,44.66667,25.03333 96144,Rucăr,4722,AG,181,RO,45.4,25.16667 106023,Sălătrucu,4722,AG,181,RO,45.33333,24.51667 96274,Schitu-Goleşti,4722,AG,181,RO,45.2,25.0 97118,Șerbănești,4722,AG,181,RO,44.68142,24.99236 97117,Șerboeni,4722,AG,181,RO,44.63818,24.89355 96382,Slănic,4722,AG,181,RO,45.23108,24.89411 96369,Slobozia,4722,AG,181,RO,44.52527,25.24263 96468,Stâlpeni,4722,AG,181,RO,45.05,24.96667 97082,Ştefan cel Mare,4722,AG,181,RO,44.49283,25.24418 97084,Ştefăneşti,4722,AG,181,RO,44.86506,24.94961 96433,Stoeneşti,4722,AG,181,RO,45.25,25.16667 96443,Stolnici,4722,AG,181,RO,44.56667,24.78333 96460,Strâmbeni,4722,AG,181,RO,44.46897,24.97315 96455,Stroești,4722,AG,181,RO,45.12953,24.79418 97091,Şuici,4722,AG,181,RO,45.25,24.53333 96509,Surdulești,4722,AG,181,RO,44.39217,24.95798 96511,Suseni,4722,AG,181,RO,44.71667,24.95 106071,Teiu,4722,AG,181,RO,44.66667,25.1 106096,Tigveni,4722,AG,181,RO,45.13333,24.58333 106108,Titeşti,4722,AG,181,RO,45.01667,25.0 106133,Toplița,4722,AG,181,RO,45.09022,24.73236 106136,Topoloveni,4722,AG,181,RO,44.81667,25.08333 96571,Tutana,4722,AG,181,RO,45.04286,24.65122 96635,Uda,4722,AG,181,RO,44.91667,24.56667 96655,Ungheni,4722,AG,181,RO,44.5,24.96667 96713,Valea Caselor,4722,AG,181,RO,45.35,25.16667 96722,Valea Danului,4722,AG,181,RO,45.18333,24.65 96726,Valea Iaşului,4722,AG,181,RO,45.18333,24.71667 96738,Valea Mare Pravăț,4722,AG,181,RO,45.29171,25.0925 96739,Valea Mare-Podgoria,4722,AG,181,RO,44.88513,24.90613 96745,Valea Popii,4722,AG,181,RO,45.09253,25.0224 96964,Văleni-Podgoria,4722,AG,181,RO,44.85755,24.9893 96782,Vedea,4722,AG,181,RO,44.78333,24.61667 96867,Vlădești,4722,AG,181,RO,45.15,24.91667 96882,Voinești,4722,AG,181,RO,45.30007,25.07225 96899,Vrănești,4722,AG,181,RO,44.84595,25.00716 96912,Vulturești,4722,AG,181,RO,45.06618,25.08347 89904,Agăş,4744,BC,181,RO,46.48333,26.21667 89968,Apa Asău,4744,BC,181,RO,46.48747,26.37888 89982,Ardeoani,4744,BC,181,RO,46.53333,26.6 89993,Arini,4744,BC,181,RO,46.35,27.18333 90002,Asău,4744,BC,181,RO,46.43333,26.4 90025,Bacău,4744,BC,181,RO,46.56718,26.91384 90477,Băcioiu,4744,BC,181,RO,46.31431,27.15745 90040,Balcani,4744,BC,181,RO,46.63333,26.55 90059,Barați,4744,BC,181,RO,46.57569,26.87118 90457,Bârsăneşti,4744,BC,181,RO,46.33333,26.7 90108,Berești,4744,BC,181,RO,46.20329,27.14476 90104,Bereşti-Bistriţa,4744,BC,181,RO,46.71667,26.83333 90106,Bereşti-Tazlău,4744,BC,181,RO,46.46667,26.66667 90119,Berzunţi,4744,BC,181,RO,46.4,26.63333 90133,Bijghir,4744,BC,181,RO,46.60185,27.01859 90164,Blăgeşti,4744,BC,181,RO,46.68333,26.65 90193,Bogdăneşti,4744,BC,181,RO,46.21667,26.68333 90218,Bolătău,4744,BC,181,RO,46.63345,26.40149 90216,Bolovăniș,4744,BC,181,RO,46.61633,26.05263 90341,Brătești,4744,BC,181,RO,46.3254,26.64333 90342,Brătila,4744,BC,181,RO,46.32348,26.77442 90317,Brusturoasa,4744,BC,181,RO,46.51667,26.2 90355,Buciumi,4744,BC,181,RO,46.2023,26.78445 90369,Bucșești,4744,BC,181,RO,46.48381,26.5823 90373,Buda,4744,BC,181,RO,46.67111,26.71953 90396,Buhoci,4744,BC,181,RO,46.56667,27.01667 90397,Buhuşi,4744,BC,181,RO,46.71667,26.7 93829,Căiuți,4744,BC,181,RO,46.18057,26.92571 93828,Căiuţi-Sat,4744,BC,181,RO,46.18333,26.93333 90573,Caraclău,4744,BC,181,RO,46.30696,26.71641 93815,Cârligi,4744,BC,181,RO,46.76583,26.85053 90595,Caşin,4744,BC,181,RO,46.2,26.75 90624,Cerdac,4744,BC,181,RO,46.23794,26.51638 90637,Cernu,4744,BC,181,RO,46.46999,26.58477 90734,Cireșoaia,4744,BC,181,RO,46.24816,26.54929 90745,Ciugheș,4744,BC,181,RO,46.5222,26.1197 90765,Cleja,4744,BC,181,RO,46.41667,26.9 90797,Coloneşti,4744,BC,181,RO,46.56667,27.3 93587,Comăneşti,4744,BC,181,RO,46.42135,26.43645 90834,Comuna Agăş,4744,BC,181,RO,46.46458,26.22962 90886,Comuna Ardeoani,4744,BC,181,RO,46.52183,26.60165 90900,Comuna Asău,4744,BC,181,RO,46.46495,26.37497 90924,Comuna Balcani,4744,BC,181,RO,46.64108,26.54412 91194,Comuna Bârsăneşti,4744,BC,181,RO,46.3329,26.68192 90965,Comuna Bereşti-Bistriţa,4744,BC,181,RO,46.7087,26.85648 90967,Comuna Bereşti-Tazlău,4744,BC,181,RO,46.48302,26.67877 90977,Comuna Berzunţi,4744,BC,181,RO,46.4136,26.62237 91006,Comuna Blăgeşti,4744,BC,181,RO,46.68668,26.64835 91028,Comuna Bogdăneşti,4744,BC,181,RO,46.2179,26.6995 91108,Comuna Brusturoasa,4744,BC,181,RO,46.51898,26.19352 91132,Comuna Buciumi,4744,BC,181,RO,46.21353,26.78584 91154,Comuna Buhoci,4744,BC,181,RO,46.56581,27.00824 91569,Comuna Căiuţi,4744,BC,181,RO,46.17987,26.91633 91379,Comuna Cleja,4744,BC,181,RO,46.40183,26.92104 91400,Comuna Coloneşti,4744,BC,181,RO,46.60471,27.26584 91422,Comuna Corbasca,4744,BC,181,RO,46.29728,27.13675 91482,Comuna Coţofăneşti,4744,BC,181,RO,46.14808,26.98644 91734,Comuna Dămieneşti,4744,BC,181,RO,46.7431,27.00649 91608,Comuna Dealu Morii,4744,BC,181,RO,46.30877,27.29511 91651,Comuna Dofteana,4744,BC,181,RO,46.32282,26.53081 91753,Comuna Faraoani,4744,BC,181,RO,46.43375,26.89835 91762,Comuna Filipeni,4744,BC,181,RO,46.53357,27.19114 91763,Comuna Filipeşti,4744,BC,181,RO,46.76821,26.89338 91979,Comuna Găiceana,4744,BC,181,RO,46.3506,27.22154 91974,Comuna Gârleni,4744,BC,181,RO,46.66251,26.78819 91855,Comuna Ghimeş-Făget,4744,BC,181,RO,46.60483,26.05354 91869,Comuna Gioseni,4744,BC,181,RO,46.42925,26.99239 91886,Comuna Glăvăneşti,4744,BC,181,RO,46.26329,27.38778 91955,Comuna Gura Văii,4744,BC,181,RO,46.27305,26.82312 91994,Comuna Helegiu,4744,BC,181,RO,46.34967,26.7669 91996,Comuna Hemeiuşi,4744,BC,181,RO,46.61927,26.85729 92016,Comuna Horgeşti,4744,BC,181,RO,46.39837,27.05603 92029,Comuna Huruieşti,4744,BC,181,RO,46.25297,27.23828 92097,Comuna Iteşti,4744,BC,181,RO,46.67368,26.85555 92110,Comuna Izvoru Berheciului,4744,BC,181,RO,46.57693,27.22842 92158,Comuna Letea Veche,4744,BC,181,RO,46.54236,26.96869 92167,Comuna Lipova,4744,BC,181,RO,46.72016,27.23238 92175,Comuna Livezi,4744,BC,181,RO,46.39932,26.72438 92195,Comuna Luizi-Cãlugãra,4744,BC,181,RO,46.53604,26.84012 92387,Comuna Măgireşti,4744,BC,181,RO,46.50965,26.53727 92388,Comuna Măgura,4744,BC,181,RO,46.56065,26.839 92369,Comuna Mânăstirea Caşin,4744,BC,181,RO,46.19394,26.72923 92408,Comuna Mărgineni,4744,BC,181,RO,46.59779,26.80505 92336,Comuna Motoşeni,4744,BC,181,RO,46.32779,27.41721 92433,Comuna Negri,4744,BC,181,RO,46.705,26.97216 92442,Comuna Nicolae Bălcescu,4744,BC,181,RO,46.46687,26.88837 92482,Comuna Odobeşti,4744,BC,181,RO,46.66902,27.13224 92490,Comuna Oituz,4744,BC,181,RO,46.19045,26.56043 92500,Comuna Onceşti,4744,BC,181,RO,46.47537,27.25835 92507,Comuna Orbeni,4744,BC,181,RO,46.26934,27.01872 92530,Comuna Palanca,4744,BC,181,RO,46.50647,26.11239 92719,Comuna Pănceşti,4744,BC,181,RO,46.36459,27.11377 92536,Comuna Parava,4744,BC,181,RO,46.30993,26.96787 92705,Comuna Pârgăreşti,4744,BC,181,RO,46.24414,26.65017 92539,Comuna Parincea,4744,BC,181,RO,46.47841,27.12877 92706,Comuna Pârjol,4744,BC,181,RO,46.59014,26.60903 92596,Comuna Plopana,4744,BC,181,RO,46.66549,27.24403 92616,Comuna Podu Turcului,4744,BC,181,RO,46.19703,27.38796 92617,Comuna Poduri,4744,BC,181,RO,46.47888,26.56593 92689,Comuna Prăjeşti,4744,BC,181,RO,46.65469,26.97631 92840,Comuna Răcăciuni,4744,BC,181,RO,46.35011,26.96705 92835,Comuna Răchitoasa,4744,BC,181,RO,46.44772,27.36875 92733,Comuna Racova,4744,BC,181,RO,46.6979,26.78097 92805,Comuna Roşiori,4744,BC,181,RO,46.7262,27.10446 93102,Comuna Sănduleni,4744,BC,181,RO,46.45082,26.74185 93106,Comuna Sărata,4744,BC,181,RO,46.49582,26.86916 92878,Comuna Sascut,4744,BC,181,RO,46.19288,27.09163 93114,Comuna Săuceşti,4744,BC,181,RO,46.65781,26.93368 92894,Comuna Scorţeni,4744,BC,181,RO,46.58037,26.68543 92913,Comuna Secuieni,4744,BC,181,RO,46.65329,27.09674 92974,Comuna Solonţ,4744,BC,181,RO,46.56929,26.53863 93020,Comuna Stănişeşti,4744,BC,181,RO,46.4276,27.31055 93546,Comuna Ştefan Cel Mare,4744,BC,181,RO,46.20645,26.85488 93006,Comuna Strugari,4744,BC,181,RO,46.52715,26.73578 93122,Comuna Tamaşi,4744,BC,181,RO,46.48841,26.99549 93224,Comuna Târgu Trotuş,4744,BC,181,RO,46.26789,26.67587 93247,Comuna Tătărăşti,4744,BC,181,RO,46.22823,27.19631 93187,Comuna Traian,4744,BC,181,RO,46.64706,27.03533 93272,Comuna Ungureni,4744,BC,181,RO,46.54522,27.1068 93282,Comuna Urecheşti,4744,BC,181,RO,46.12425,27.0707 93322,Comuna Valea Seacă,4744,BC,181,RO,46.24851,27.04535 93417,Comuna Vultureni,4744,BC,181,RO,46.41385,27.23668 93473,Comuna Zemeş,4744,BC,181,RO,46.59171,26.43381 93611,Corbasca,4744,BC,181,RO,46.28333,27.16667 93695,Coţofăneşti,4744,BC,181,RO,46.15,26.98333 93678,Cotumba,4744,BC,181,RO,46.49743,26.19112 93760,Cucuieți,4744,BC,181,RO,46.32731,26.55504 94119,Dămieneşti,4744,BC,181,RO,46.73333,26.98333 94120,Dămoc,4744,BC,181,RO,46.46667,26.86667 94131,Dărmăneşti,4744,BC,181,RO,46.36667,26.48333 93905,Dealu Morii,4744,BC,181,RO,46.31667,27.23333 93916,Deleni,4744,BC,181,RO,46.3536,26.77628 93979,Dofteana,4744,BC,181,RO,46.31667,26.51667 94014,Dragomir,4744,BC,181,RO,46.41373,26.63163 94047,Drăgugești,4744,BC,181,RO,46.36796,26.77433 94079,Dumbrava,4744,BC,181,RO,46.30969,26.89087 94252,Făget,4744,BC,181,RO,46.58891,26.05349 94150,Faraoaní,4744,BC,181,RO,46.43333,26.9 94158,Ferestrău-Oituz,4744,BC,181,RO,46.20249,26.57629 94174,Filipeni,4744,BC,181,RO,46.53333,27.18333 94175,Filipeşti,4744,BC,181,RO,46.75,26.88333 94208,Frumoasa,4744,BC,181,RO,46.66298,26.54196 94213,Frumușelu,4744,BC,181,RO,46.27796,27.35203 94230,Fundu Răcăciuni,4744,BC,181,RO,46.35864,26.88987 94500,Găiceana,4744,BC,181,RO,46.33333,27.21667 94274,Galbeni,4744,BC,181,RO,46.45661,26.94664 94492,Gârleni,4744,BC,181,RO,46.66667,26.8 94493,Gârlenii de Sus,4744,BC,181,RO,46.65414,26.79491 94517,Găzărie,4744,BC,181,RO,46.48928,26.51877 94300,Gheorghe Doja,4744,BC,181,RO,46.37831,26.96248 94323,Ghimeș,4744,BC,181,RO,46.56821,26.08886 94322,Ghimeş-Făget,4744,BC,181,RO,46.58333,26.06667 94345,Gioseni,4744,BC,181,RO,46.42925,26.99239 94366,Glăvăneşti,4744,BC,181,RO,46.25,27.38333 94465,Gura Văii,4744,BC,181,RO,46.27234,26.82604 94596,Hăghiac,4744,BC,181,RO,46.312,26.51841 94527,Helegiu,4744,BC,181,RO,46.35,26.75 94529,Hemeiuș,4744,BC,181,RO,46.62643,26.8544 94551,Holt,4744,BC,181,RO,46.57856,26.97499 94559,Horgeşti,4744,BC,181,RO,46.43333,27.06667 94583,Huruiești,4744,BC,181,RO,46.26667,27.25 94694,Iteşti,4744,BC,181,RO,46.65309,26.87256 94716,Izvoru Berheciului,4744,BC,181,RO,46.58333,27.21667 94894,Lăpoș,4744,BC,181,RO,46.39363,26.46245 94761,Larga,4744,BC,181,RO,46.3506,26.53321 94784,Lespezi,4744,BC,181,RO,46.66493,26.76882 94788,Letea Veche,4744,BC,181,RO,46.55,26.95 94796,Lilieci,4744,BC,181,RO,46.62861,26.87176 94803,Lipova,4744,BC,181,RO,46.71667,27.23333 94820,Livezi,4744,BC,181,RO,46.40639,26.73613 94821,Livezi-Vale,4744,BC,181,RO,46.41667,26.73333 94841,Ludași,4744,BC,181,RO,46.61962,26.57926 94848,Luizi-Călugăra,4744,BC,181,RO,46.53333,26.83333 95238,Măgireşti,4744,BC,181,RO,46.51667,26.55 95241,Măgura,4744,BC,181,RO,46.56667,26.85 95218,Mânăstirea Caşin,4744,BC,181,RO,46.15,26.68333 95269,Mărgineni,4744,BC,181,RO,46.5876,26.85095 95271,Mărgineni-Munteni,4744,BC,181,RO,46.6,26.9 95058,Moineşti,4744,BC,181,RO,46.47523,26.48907 95077,Motoşeni,4744,BC,181,RO,46.33333,27.38333 95110,Municipiul Bacãu,4744,BC,181,RO,46.56854,26.91135 95157,Municipiul Moineşti,4744,BC,181,RO,46.47428,26.48804 95162,Municipiul Oneşti,4744,BC,181,RO,46.25,26.75 95319,Negri,4744,BC,181,RO,46.7,26.96667 95338,Nicolae Bălcescu,4744,BC,181,RO,46.46667,26.91667 95408,Odobești,4744,BC,181,RO,46.67608,27.14983 95420,Oituz,4744,BC,181,RO,46.2,26.61667 95436,Onceşti,4744,BC,181,RO,46.46667,27.25 95439,Onesti,4744,BC,181,RO,46.25,26.75 95476,Oraş Buhuşi,4744,BC,181,RO,46.71845,26.69952 95496,Oraş Comãneşti,4744,BC,181,RO,46.42348,26.42796 95513,Oraş Dãrmãneşti,4744,BC,181,RO,46.37559,26.47673 95591,Oraş Slãnic-Moldova,4744,BC,181,RO,46.2232,26.47774 95609,Oraş Târgu Ocna,4744,BC,181,RO,46.27988,26.61129 95667,Orășa,4744,BC,181,RO,46.42225,26.7437 95655,Orbeni,4744,BC,181,RO,46.28333,27.01667 95671,Osebiți,4744,BC,181,RO,46.53839,26.83946 95697,Palanca,4744,BC,181,RO,46.53333,26.11667 96016,Pănceşti,4744,BC,181,RO,46.33333,27.08333 95710,Parava,4744,BC,181,RO,46.3,27.0 95999,Pârgăreşti,4744,BC,181,RO,46.25,26.65 95714,Parincea,4744,BC,181,RO,46.48333,27.1 96000,Pârjol,4744,BC,181,RO,46.58333,26.6 95816,Plopana,4744,BC,181,RO,46.68333,27.21667 95824,Plopu,4744,BC,181,RO,46.39256,26.50268 95851,Podu Turcului,4744,BC,181,RO,46.2,27.38333 95852,Poduri,4744,BC,181,RO,46.46667,26.53333 95866,Poiana,4744,BC,181,RO,46.69819,27.01765 95971,Prăjești,4744,BC,181,RO,46.65469,26.97631 95961,Prohozești,4744,BC,181,RO,46.48155,26.5517 95987,Pustiana,4744,BC,181,RO,46.5899,26.63083 96190,Răcăciuni,4744,BC,181,RO,46.33333,26.98333 96191,Răcăuți,4744,BC,181,RO,46.22476,26.78723 96186,Răchitoasa,4744,BC,181,RO,46.43333,27.36667 96040,Racova,4744,BC,181,RO,46.7,26.75 96133,Roşiori,4744,BC,181,RO,46.71667,27.08333 106025,Sănduleni,4744,BC,181,RO,46.45,26.73333 106030,Sărata,4744,BC,181,RO,46.50249,26.86857 96249,Sascut,4744,BC,181,RO,46.2,27.1 96250,Sascut-Sat,4744,BC,181,RO,46.18727,27.06851 96257,Satu Nou,4744,BC,181,RO,46.24447,26.65343 106043,Săucești,4744,BC,181,RO,46.61853,26.94141 96272,Schitu Frumoasa,4744,BC,181,RO,46.63541,26.48761 96281,Scorţeni,4744,BC,181,RO,46.55,26.65 96287,Scurta,4744,BC,181,RO,46.26133,27.01548 96316,Secuieni,4744,BC,181,RO,46.65,27.1 96383,Slănic-Moldova,4744,BC,181,RO,46.22308,26.47413 96372,Slobozia,4744,BC,181,RO,46.47495,27.31111 96407,Solonţ,4744,BC,181,RO,46.55,26.51667 96410,Somușca,4744,BC,181,RO,46.40147,26.91189 96481,Stănişeşti,4744,BC,181,RO,46.43333,27.3 97077,Ştefan Cel Mare,4744,BC,181,RO,46.20526,26.85488 97131,Ștefan Vodă,4744,BC,181,RO,46.31692,26.5125 96448,Straja,4744,BC,181,RO,46.43989,26.36258 96458,Strugari,4744,BC,181,RO,46.53333,26.71667 106055,Tamaşi,4744,BC,181,RO,46.48333,26.98333 96587,Târgu Ocna,4744,BC,181,RO,46.27899,26.61301 96589,Târgu Trotuş,4744,BC,181,RO,46.26667,26.66667 96622,Tătărăști,4744,BC,181,RO,46.21667,27.2 106149,Traian,4744,BC,181,RO,46.63333,27.03333 96563,Turluianu,4744,BC,181,RO,46.45298,26.64607 96570,Tuta,4744,BC,181,RO,46.25643,26.69103 96661,Ungureni,4744,BC,181,RO,46.52283,27.11186 96676,Urecheşti,4744,BC,181,RO,46.13333,27.08333 96920,Vâlcele,4744,BC,181,RO,46.29801,26.60005 96710,Valea Arinilor,4744,BC,181,RO,46.49793,26.50918 96766,Valea lui Ion,4744,BC,181,RO,46.7035,26.62499 96754,Valea Seacă,4744,BC,181,RO,46.24281,27.04594 96768,Valea Șoșii,4744,BC,181,RO,46.4618,26.54992 96790,Vermești,4744,BC,181,RO,46.42172,26.4766 96793,Verșești,4744,BC,181,RO,46.44904,26.70183 96824,Viișoara,4744,BC,181,RO,46.28325,26.66187 96908,Vultureni,4744,BC,181,RO,46.36667,27.28333 96987,Zemeş,4744,BC,181,RO,46.58333,26.41667 89873,Abram,4723,BH,181,RO,47.31667,22.38333 89876,Abrămuţ,4723,BH,181,RO,47.31667,22.25 89922,Albiș,4723,BH,181,RO,47.39024,22.24528 89930,Aleşd,4723,BH,181,RO,47.06667,22.41667 89939,Alparea,4723,BH,181,RO,47.03054,22.04812 90015,Aştileu,4723,BH,181,RO,47.03333,22.38333 90005,Auşeu,4723,BH,181,RO,47.03333,22.5 90007,Avram Iancu,4723,BH,181,RO,46.66944,21.52417 90039,Balc,4723,BH,181,RO,47.28333,22.53333 90513,Bălnaca,4723,BH,181,RO,46.94384,22.57206 90071,Batăr,4723,BH,181,RO,46.7,21.81667 90083,Beiuş,4723,BH,181,RO,46.66667,22.35 90123,Beznea,4723,BH,181,RO,46.95967,22.61954 90131,Biharia,4723,BH,181,RO,47.15,21.91667 90145,Bistra,4723,BH,181,RO,47.25478,22.42295 90196,Bogei,4723,BH,181,RO,47.2655,22.36079 90203,Boianu Mare,4723,BH,181,RO,47.38333,22.53333 90231,Borod,4723,BH,181,RO,46.98333,22.63333 90237,Borş,4723,BH,181,RO,47.11667,21.81667 90274,Bratca,4723,BH,181,RO,46.93333,22.61667 90316,Brusturi,4723,BH,181,RO,47.15,22.25 90387,Budureasa,4723,BH,181,RO,46.66667,22.5 90388,Buduslău,4723,BH,181,RO,47.4,22.26667 90404,Bulz,4723,BH,181,RO,46.91667,22.68333 90414,Bunteşti,4723,BH,181,RO,46.61667,22.46667 90423,Burzuc,4723,BH,181,RO,47.15552,22.17096 93823,Căbeşti,4723,BH,181,RO,46.76667,22.36667 90560,Cadea,4723,BH,181,RO,47.31185,22.06225 93830,Călacea,4723,BH,181,RO,46.67687,21.93292 93794,Câmpani,4723,BH,181,RO,46.51415,22.52186 93795,Câmpani de Pomezeu,4723,BH,181,RO,46.8,22.31667 93862,Căpâlna,4723,BH,181,RO,46.73333,22.1 93869,Cărpinet,4723,BH,181,RO,46.45,22.48333 90606,Cefa,4723,BH,181,RO,46.91667,21.73333 90611,Ceica,4723,BH,181,RO,46.85,22.18333 90646,Cetariu,4723,BH,181,RO,47.13333,22.01667 90656,Cherechiu,4723,BH,181,RO,47.38333,22.13333 90660,Cheșereu,4723,BH,181,RO,47.42779,22.11416 90661,Cheț,4723,BH,181,RO,47.41943,22.33877 90688,Chişlaz,4723,BH,181,RO,47.28333,22.23333 90751,Ciumeghiu,4723,BH,181,RO,46.73333,21.58333 90760,Ciutelec,4723,BH,181,RO,47.262,22.3869 90778,Cociuba Mare,4723,BH,181,RO,46.73333,22.0 90818,Comuna Abram,4723,BH,181,RO,47.32443,22.42023 90819,Comuna Abrămuţ,4723,BH,181,RO,47.33346,22.25607 90911,Comuna Aştileu,4723,BH,181,RO,47.02217,22.38444 90903,Comuna Auşeu,4723,BH,181,RO,47.04398,22.50835 90904,Comuna Avram Iancu,4723,BH,181,RO,46.66944,21.52417 90923,Comuna Balc,4723,BH,181,RO,47.31135,22.49954 90940,Comuna Batăr,4723,BH,181,RO,46.71431,21.79161 90986,Comuna Biharia,4723,BH,181,RO,47.16001,21.93299 91033,Comuna Boianu Mare,4723,BH,181,RO,47.37481,22.52507 91052,Comuna Borod,4723,BH,181,RO,47.00503,22.60907 91056,Comuna Borş,4723,BH,181,RO,47.13073,21.83139 91082,Comuna Bratca,4723,BH,181,RO,46.91794,22.61825 91106,Comuna Brusturi,4723,BH,181,RO,47.1441,22.26514 91149,Comuna Budureasa,4723,BH,181,RO,46.66968,22.46418 91150,Comuna Buduslău,4723,BH,181,RO,47.39559,22.25387 91159,Comuna Bulz,4723,BH,181,RO,46.8528,22.66659 91168,Comuna Bunteşti,4723,BH,181,RO,46.60703,22.50202 91566,Comuna Căbeşti,4723,BH,181,RO,46.76593,22.37157 91542,Comuna Câmpani,4723,BH,181,RO,46.52443,22.52744 91565,Comuna Cãpâlna,4723,BH,181,RO,46.73682,22.11114 91589,Comuna Cărpinet,4723,BH,181,RO,46.44163,22.48917 91275,Comuna Cefa,4723,BH,181,RO,46.90898,21.6941 91278,Comuna Ceica,4723,BH,181,RO,46.86444,22.18165 91303,Comuna Cetariu,4723,BH,181,RO,47.15015,22.05458 91309,Comuna Cherechiu,4723,BH,181,RO,47.3993,22.1355 91329,Comuna Chişlaz,4723,BH,181,RO,47.26657,22.233 91370,Comuna Ciumeghiu,4723,BH,181,RO,46.71025,21.62604 91387,Comuna Cociuba Mare,4723,BH,181,RO,46.72899,22.03966 91417,Comuna Copăcel,4723,BH,181,RO,46.97234,22.16731 91507,Comuna Criștioru de Jos,4723,BH,181,RO,46.42333,22.56565 91532,Comuna Curăţele,4723,BH,181,RO,46.7031,22.43719 91531,Comuna Curtuişeni,4723,BH,181,RO,47.53247,22.22961 91615,Comuna Derna,4723,BH,181,RO,47.208,22.28821 91628,Comuna Diosig,4723,BH,181,RO,47.29561,21.99354 91635,Comuna Dobreşti,4723,BH,181,RO,46.84465,22.26931 91700,Comuna Drăgăneşti,4723,BH,181,RO,46.63469,22.40824 91687,Comuna Drăgeşti,4723,BH,181,RO,46.90374,22.12533 91766,Comuna Finiş,4723,BH,181,RO,46.64312,22.27621 91839,Comuna Gepiu,4723,BH,181,RO,46.91616,21.78903 91870,Comuna Girişu de Criş,4723,BH,181,RO,47.07118,21.76861 92000,Comuna Hidişelu De Sus,4723,BH,181,RO,46.92893,22.02467 92010,Comuna Holod,4723,BH,181,RO,46.79584,22.11471 92030,Comuna Husasău de Tinca,4723,BH,181,RO,46.84896,21.91914 92080,Comuna Ineu,4723,BH,181,RO,47.09119,22.10816 92226,Comuna Lăzăreni,4723,BH,181,RO,46.85956,22.06685 92142,Comuna Lazuri de Beiuş,4723,BH,181,RO,46.59381,22.39675 92193,Comuna Lugaşu De Jos,4723,BH,181,RO,47.06992,22.32929 92198,Comuna Lunca,4723,BH,181,RO,46.51645,22.45486 92384,Comuna Mădăraş,4723,BH,181,RO,46.84296,21.7208 92386,Comuna Măgeşti,4723,BH,181,RO,47.00929,22.4533 92452,Comuna Nojorid,4723,BH,181,RO,46.97144,21.87747 92495,Comuna Olcea,4723,BH,181,RO,46.6609,21.98452 92525,Comuna Oşorhei,4723,BH,181,RO,47.02748,22.0449 92531,Comuna Paleu,4723,BH,181,RO,47.10762,21.97748 92578,Comuna Pietroasa,4723,BH,181,RO,46.58383,22.63371 92610,Comuna Pocola,4723,BH,181,RO,46.69894,22.29593 92647,Comuna Pomezeu,4723,BH,181,RO,46.79113,22.30018 92653,Comuna Popeşti,4723,BH,181,RO,47.22088,22.41515 92834,Comuna Răbăgani,4723,BH,181,RO,46.75432,22.24302 92763,Comuna Remetea,4723,BH,181,RO,46.72956,22.35276 92771,Comuna Rieni,4723,BH,181,RO,46.56878,22.44508 92795,Comuna Roşia,4723,BH,181,RO,46.79896,22.40529 92803,Comuna Roşiori,4723,BH,181,RO,47.25579,21.96166 93085,Comuna Săcădat,4723,BH,181,RO,47.0471,22.15892 93091,Comuna Sălacea,4723,BH,181,RO,47.44844,22.27208 93092,Comuna Sălard,4723,BH,181,RO,47.23151,22.02068 93046,Comuna Sâmbăta,4723,BH,181,RO,46.79819,22.20489 93054,Comuna Sâniob,4723,BH,181,RO,47.24558,22.12533 93056,Comuna Sânmartin,4723,BH,181,RO,46.99058,21.98565 93061,Comuna Sânnicolau-Român,4723,BH,181,RO,46.96414,21.71886 93066,Comuna Sântandrei,4723,BH,181,RO,47.06498,21.83947 93072,Comuna Sârbi,4723,BH,181,RO,47.1903,22.13789 93521,Comuna Şimian,4723,BH,181,RO,47.46477,22.05881 93527,Comuna Şinteu,4723,BH,181,RO,47.14585,22.50629 93537,Comuna Şoimi,4723,BH,181,RO,46.67063,22.13427 92983,Comuna Spinuş,4723,BH,181,RO,47.20209,22.20217 93561,Comuna Şuncuiuş,4723,BH,181,RO,46.92521,22.53323 93033,Comuna Suplacu de Barcău,4723,BH,181,RO,47.24335,22.49235 93234,Comuna Tãmãşeu,4723,BH,181,RO,47.22096,21.90399 93239,Comuna Tărcaia,4723,BH,181,RO,46.61041,22.36364 93125,Comuna Tarcea,4723,BH,181,RO,47.45767,22.18937 93250,Comuna Tăuteu,4723,BH,181,RO,47.28131,22.35612 93569,Comuna Ţeţchea,4723,BH,181,RO,47.03659,22.29798 93153,Comuna Tileagd,4723,BH,181,RO,47.06556,22.20707 93156,Comuna Tinca,4723,BH,181,RO,46.7631,21.9364 93161,Comuna Toboliu,4723,BH,181,RO,47.04042,21.7032 93203,Comuna Tulca,4723,BH,181,RO,46.78881,21.79763 93255,Comuna Uileacu de Beiuş,4723,BH,181,RO,46.70215,22.22417 93290,Comuna Vadu Crişului,4723,BH,181,RO,46.97192,22.50274 93438,Comuna Vârciorog,4723,BH,181,RO,46.96551,22.29681 93360,Comuna Viişoara,4723,BH,181,RO,47.38333,22.45 93602,Copăcel,4723,BH,181,RO,46.98333,22.16667 93625,Cordău,4723,BH,181,RO,46.95,21.98333 93736,Criştioru de Jos,4723,BH,181,RO,46.41937,22.53457 93755,Cubulcut,4723,BH,181,RO,47.3227,22.18648 93779,Curăţele,4723,BH,181,RO,46.7,22.41667 93778,Curtuișeni,4723,BH,181,RO,47.54633,22.20263 93787,Cuzap,4723,BH,181,RO,47.20288,22.41523 93922,Derna,4723,BH,181,RO,47.2,22.3 93938,Diosig,4723,BH,181,RO,47.3,22.0 93953,Dobreşti,4723,BH,181,RO,46.85,22.3 94059,Drăgăneşti,4723,BH,181,RO,46.61667,22.38333 94037,Drăgeşti,4723,BH,181,RO,46.88333,22.13333 94178,Finiş,4723,BH,181,RO,46.63333,22.31667 94195,Foglaş,4723,BH,181,RO,47.25,22.53333 94199,Forău,4723,BH,181,RO,46.7107,22.20113 94280,Galoșpetreu,4723,BH,181,RO,47.48345,22.2173 94294,Gepiu,4723,BH,181,RO,46.93034,21.79016 94319,Ghighișeni,4723,BH,181,RO,46.55141,22.43148 94332,Ghiorac,4723,BH,181,RO,46.7134,21.68309 94346,Girișu de Criș,4723,BH,181,RO,47.06416,21.76108 94427,Groși,4723,BH,181,RO,47.04525,22.47965 94471,Gurbediu,4723,BH,181,RO,46.79379,21.8648 94535,Hidişelu de Sus,4723,BH,181,RO,46.95,22.05 94550,Holod,4723,BH,181,RO,46.78333,22.13333 94569,Hotar,4723,BH,181,RO,47.01967,22.28515 94584,Husasău de Tinca,4723,BH,181,RO,46.81667,21.91667 94622,Ianoșda,4723,BH,181,RO,46.83791,21.80778 94668,Ineu,4723,BH,181,RO,47.08333,22.11667 94901,Lăzăreni,4723,BH,181,RO,46.86667,22.06667 94767,Lazuri de Beiuş,4723,BH,181,RO,46.58333,22.4 94815,Livada de Bihor,4723,BH,181,RO,47.01039,21.80836 94845,Lugaşu de Jos,4723,BH,181,RO,47.06667,22.35 94854,Lunca,4723,BH,181,RO,46.51667,22.46667 94878,Luncșoara,4723,BH,181,RO,47.03663,22.54213 95234,Mădăraş,4723,BH,181,RO,46.83333,21.68333 95237,Măgeşti,4723,BH,181,RO,47.01667,22.45 94928,Marghita,4723,BH,181,RO,47.35,22.33333 94963,Meziad,4723,BH,181,RO,46.7409,22.42846 94974,Mihai Bravu,4723,BH,181,RO,47.2578,21.93811 95036,Mișca,4723,BH,181,RO,47.26291,22.25914 95112,Municipiul Beiuş,4723,BH,181,RO,46.68074,22.34566 95153,Municipiul Marghita,4723,BH,181,RO,47.34534,22.33452 95163,Municipiul Oradea,4723,BH,181,RO,47.05353,21.93633 95177,Municipiul Salonta,4723,BH,181,RO,46.80283,21.66415 95354,Nojorid,4723,BH,181,RO,46.98333,21.88333 95360,Nucet,4723,BH,181,RO,46.48732,22.5585 95426,Olcea,4723,BH,181,RO,46.68333,21.98333 95445,Oradea,4723,BH,181,RO,47.0458,21.91833 95635,Oraș Aleşd,4723,BH,181,RO,47.08772,22.41384 95552,Oraş Nucet,4723,BH,181,RO,46.48496,22.58901 95598,Oraş Sãcueni,4723,BH,181,RO,47.32996,22.11802 95631,Oraş Ştei,4723,BH,181,RO,46.53767,22.45795 95614,Oraş Valea Lui Mihai,4723,BH,181,RO,47.52099,22.13196 95615,Oraş Vaşcãu,4723,BH,181,RO,46.47493,22.46292 95691,Oșorhei,4723,BH,181,RO,47.03333,22.05 96005,Pădurea Neagră,4723,BH,181,RO,47.16554,22.41323 95701,Paleu,4723,BH,181,RO,47.11531,21.95929 95764,Peștiș,4723,BH,181,RO,47.07252,22.41226 95745,Petreu,4723,BH,181,RO,47.33738,22.29607 95784,Pietroasa,4723,BH,181,RO,46.58333,22.55 95840,Pocola,4723,BH,181,RO,46.68333,22.28333 95902,Pomezeu,4723,BH,181,RO,46.78333,22.28333 95911,Popeşti,4723,BH,181,RO,47.23333,22.41667 96181,Răbăgani,4723,BH,181,RO,46.75,22.23333 96082,Remetea,4723,BH,181,RO,46.73333,22.35 96093,Rieni,4723,BH,181,RO,46.57485,22.44584 96127,Roşia,4723,BH,181,RO,46.8,22.4 96138,Roșiori,4723,BH,181,RO,47.25677,21.95209 105999,Săcădat,4723,BH,181,RO,47.03333,22.15 105997,Săcueni,4723,BH,181,RO,47.35,22.1 106005,Sălacea,4723,BH,181,RO,47.46667,22.31667 106006,Sălard,4723,BH,181,RO,47.21667,22.05 96236,Salonta,4723,BH,181,RO,46.8,21.65 96519,Sâmbăta,4723,BH,181,RO,46.80173,22.20357 96531,Sâniob,4723,BH,181,RO,47.26461,22.12778 96541,Sânnicolau Român,4723,BH,181,RO,46.96101,21.71466 105977,Sântandrei,4723,BH,181,RO,47.06615,21.85352 105980,Sântion,4723,BH,181,RO,47.09634,21.8366 105984,Sârbi,4723,BH,181,RO,47.19315,22.12215 97123,Șilindru,4723,BH,181,RO,47.43725,22.04683 97050,Şimian,4723,BH,181,RO,47.48333,22.1 105987,Sînmartin,4723,BH,181,RO,47.00726,21.97418 97056,Şinteu,4723,BH,181,RO,47.15,22.48333 97066,Şoimi,4723,BH,181,RO,46.68333,22.11667 96416,Spinuş,4723,BH,181,RO,47.2,22.2 97134,Ștei,4723,BH,181,RO,46.53333,22.45 97093,Şuncuiuş,4723,BH,181,RO,46.93333,22.53333 96502,Suplacu de Barcău,4723,BH,181,RO,47.25729,22.53195 106054,Talpoș,4723,BH,181,RO,46.69124,21.80335 96605,Tămașda,4723,BH,181,RO,46.64453,21.55685 96608,Tămășeu,4723,BH,181,RO,47.22116,21.9276 96610,Tărcaia,4723,BH,181,RO,46.63333,22.36667 106059,Tarcea,4723,BH,181,RO,47.45,22.18333 96631,Tășad,4723,BH,181,RO,46.93773,22.12516 96626,Tăut,4723,BH,181,RO,46.7199,21.83845 96627,Tăuteu,4723,BH,181,RO,47.26667,22.33333 106099,Tileagd,4723,BH,181,RO,47.06667,22.2 106103,Tinca,4723,BH,181,RO,46.77529,21.933 106112,Toboliu,4723,BH,181,RO,47.04182,21.71946 106172,Tulca,4723,BH,181,RO,46.78333,21.78333 96640,Uileacu de Beiuș,4723,BH,181,RO,46.68532,22.22148 96695,Vadu Crişului,4723,BH,181,RO,46.98333,22.51667 96767,Valea lui Mihai,4723,BH,181,RO,47.51667,22.15 96936,Vârciorog,4723,BH,181,RO,46.96667,22.3 96977,Vășad,4723,BH,181,RO,47.5186,22.2566 96779,Vaşcău,4723,BH,181,RO,46.46667,22.46667 96823,Viişoara,4723,BH,181,RO,47.38333,22.45 96833,Vintere,4723,BH,181,RO,46.76883,22.14652 96886,Voivozi,4723,BH,181,RO,47.21562,22.39024 89899,Agrieș,4733,BN,181,RO,47.40022,24.13491 89961,Anieș,4733,BN,181,RO,47.41347,24.76853 90080,Beclean,4733,BN,181,RO,47.18333,24.18333 90129,Bichigiu,4733,BN,181,RO,47.42522,24.33893 90147,Bistriţa,4733,BN,181,RO,47.13316,24.50011 90148,Bistriţa Bârgăului,4733,BN,181,RO,47.21667,24.76667 90268,Braniştea,4733,BN,181,RO,47.16667,24.06667 90284,Breaza,4733,BN,181,RO,47.35108,24.0622 90376,Budacu de Jos,4733,BN,181,RO,47.08333,24.51667 90377,Budacu de Sus,4733,BN,181,RO,47.06118,24.65752 90383,Budeşti,4733,BN,181,RO,46.88333,24.25 93827,Căianu Mic,4733,BN,181,RO,47.23333,24.15 90671,Chiochiş,4733,BN,181,RO,46.98333,24.18333 90686,Chiuza,4733,BN,181,RO,47.23333,24.25 90695,Ciceu-Giurgeşti,4733,BN,181,RO,47.25,24.01667 90696,Ciceu-Mihăiești,4733,BN,181,RO,47.18568,23.9748 90735,Cireșoaia,4733,BN,181,RO,47.14265,24.06217 90777,Cociu,4733,BN,181,RO,47.19926,24.23238 90998,Comuna Bistriţa Bârgăului,4733,BN,181,RO,47.19026,24.83429 91077,Comuna Braniştea,4733,BN,181,RO,47.1625,24.07815 91143,Comuna Budacu de Jos,4733,BN,181,RO,47.08214,24.5184 91146,Comuna Budeşti,4733,BN,181,RO,46.83403,24.23802 91568,Comuna Căianu,4733,BN,181,RO,47.25389,24.1344 91317,Comuna Chiochiş,4733,BN,181,RO,46.98381,24.18318 91328,Comuna Chiuza,4733,BN,181,RO,47.24007,24.24001 91331,Comuna Ciceu-Giurgeşti,4733,BN,181,RO,47.26529,24.0038 91332,Comuna Ciceu-Mihăieşti,4733,BN,181,RO,47.21738,23.95696 91472,Comuna Coşbuc,4733,BN,181,RO,47.36544,24.3922 91722,Comuna Dumitra,4733,BN,181,RO,47.21675,24.43434 91724,Comuna Dumitriţa,4733,BN,181,RO,47.06781,24.63503 91755,Comuna Feldru,4733,BN,181,RO,47.27796,24.56415 91827,Comuna Galaţii Bistriţei,4733,BN,181,RO,46.99307,24.42153 92075,Comuna Ilva Mare,4733,BN,181,RO,47.351,24.8963 92076,Comuna Ilva Mică,4733,BN,181,RO,47.3076,24.66035 92131,Comuna Josenii Bârgăului,4733,BN,181,RO,47.21238,24.66351 92143,Comuna Lechinţa,4733,BN,181,RO,47.01983,24.32605 92160,Comuna Leşu,4733,BN,181,RO,47.31077,24.76369 92177,Comuna Livezile,4733,BN,181,RO,47.17744,24.63595 92204,Comuna Lunca Ilvei,4733,BN,181,RO,47.36409,24.97106 92391,Comuna Măgura Ilvei,4733,BN,181,RO,47.36625,24.82185 92395,Comuna Măieru,4733,BN,181,RO,47.40738,24.7568 92412,Comuna Mărişelu,4733,BN,181,RO,47.01066,24.5126 92247,Comuna Matei,4733,BN,181,RO,46.9993,24.26029 92265,Comuna Miceştii de Câmpie,4733,BN,181,RO,46.84309,24.31568 92287,Comuna Milas,4733,BN,181,RO,46.82249,24.43371 92330,Comuna Monor,4733,BN,181,RO,46.95475,24.70106 92436,Comuna Negrileşti,4733,BN,181,RO,47.31054,24.05557 92448,Comuna Nimigea,4733,BN,181,RO,47.24697,24.30623 92458,Comuna Nuşeni,4733,BN,181,RO,47.09063,24.17525 92540,Comuna Parva,4733,BN,181,RO,47.39601,24.54218 92568,Comuna Petru Rareş,4733,BN,181,RO,47.19221,24.00731 92624,Comuna Poiana Ilvei,4733,BN,181,RO,47.35749,24.74104 92686,Comuna Prundu Bârgăului,4733,BN,181,RO,47.22154,24.7245 92854,Comuna Războeni-Cetate,4733,BN,181,RO,47.11072,24.62878 92750,Comuna Rebra,4733,BN,181,RO,47.32588,24.49984 92752,Comuna Rebrişoara,4733,BN,181,RO,47.31994,24.46568 92777,Comuna Rodna,4733,BN,181,RO,47.4514,24.82366 92784,Comuna Romuli,4733,BN,181,RO,47.56247,24.42897 92813,Comuna Runcu Salvei,4733,BN,181,RO,47.34382,24.32529 92868,Comuna Salva,4733,BN,181,RO,47.30586,24.35557 93059,Comuna Sânmihaiu de Câmpie,4733,BN,181,RO,46.8964,24.34323 93499,Comuna Şanţ,4733,BN,181,RO,47.45266,24.91842 93514,Comuna Şieu,4733,BN,181,RO,47.01244,24.62425 93516,Comuna Şieu-Măgheruş,4733,BN,181,RO,47.08975,24.37651 93517,Comuna Şieu-Odorhei,4733,BN,181,RO,47.13288,24.26856 93518,Comuna Şieuţ,4733,BN,181,RO,46.9988,24.67935 92929,Comuna Silivaşu De Câmpie,4733,BN,181,RO,46.78127,24.29155 93526,Comuna Şintereag,4733,BN,181,RO,47.16796,24.31655 92981,Comuna Spermezeu,4733,BN,181,RO,47.3,24.15 93227,Comuna Târlişua,4733,BN,181,RO,47.40584,24.16514 93131,Comuna Teaca,4733,BN,181,RO,46.91151,24.47653 93135,Comuna Telciu,4733,BN,181,RO,47.4507,24.39396 93152,Comuna Tiha Bârgăului,4733,BN,181,RO,47.23676,24.87913 93283,Comuna Uriu,4733,BN,181,RO,47.21202,24.07755 93284,Comuna Urmeniş,4733,BN,181,RO,46.79559,24.35923 93469,Comuna Zagra,4733,BN,181,RO,47.37083,24.26057 93629,Cormaia,4733,BN,181,RO,47.36667,24.68333 93688,Coşbuc,4733,BN,181,RO,47.3654,24.39115 93721,Cristeștii Ciceului,4733,BN,181,RO,47.19326,24.09605 93957,Dobric,4733,BN,181,RO,47.2469,24.12777 94097,Dumitra,4733,BN,181,RO,47.21667,24.48333 94100,Dumitrița,4733,BN,181,RO,47.07143,24.62579 94153,Feldru,4733,BN,181,RO,47.28333,24.6 94216,Frunzi,4733,BN,181,RO,46.9,24.33333 94273,Galaţii Bistriţei,4733,BN,181,RO,46.98333,24.4 94661,Ilva Mare,4733,BN,181,RO,47.36667,24.9 94662,Ilva Mică,4733,BN,181,RO,47.31667,24.66667 94749,Josenii Bârgăului,4733,BN,181,RO,47.21667,24.68333 94768,Lechinţa,4733,BN,181,RO,47.01667,24.35 94790,Leşu,4733,BN,181,RO,47.31667,24.75 94825,Livezile,4733,BN,181,RO,47.18333,24.56667 94865,Lunca Ilvei,4733,BN,181,RO,47.36667,24.98333 94867,Lunca Leșului,4733,BN,181,RO,47.30943,24.77602 95242,Măgura Ilvei,4733,BN,181,RO,47.38333,24.8 95249,Măieru,4733,BN,181,RO,47.4,24.75 95277,Mărişelu,4733,BN,181,RO,47.01667,24.51667 94936,Matei,4733,BN,181,RO,46.98333,24.26667 94966,Miceştii de Câmpie,4733,BN,181,RO,46.86667,24.31667 94999,Mijlocenii Bârgăului,4733,BN,181,RO,47.21592,24.68936 95000,Milaş,4733,BN,181,RO,46.81667,24.43333 95069,Monor,4733,BN,181,RO,46.96667,24.7 95113,Municipiul Bistriţa,4733,BN,181,RO,47.13499,24.49115 95376,Năsăud,4733,BN,181,RO,47.28333,24.4 95322,Negrilești,4733,BN,181,RO,47.27068,24.04936 95328,Nepos,4733,BN,181,RO,47.2775,24.5332 95345,Nimigea de Jos,4733,BN,181,RO,47.25357,24.30084 95346,Nimigea de Sus,4733,BN,181,RO,47.28333,24.31667 95365,Nuşeni,4733,BN,181,RO,47.1,24.2 95401,Ocnița,4733,BN,181,RO,46.86266,24.48677 95460,Oraş Beclean,4733,BN,181,RO,47.16124,24.17385 95554,Oraş Nãsãud,4733,BN,181,RO,47.27491,24.41483 95595,Oraş Sângeorz-Bãi,4733,BN,181,RO,47.3778,24.66979 95715,Parva,4733,BN,181,RO,47.4,24.55 95754,Petriș,4733,BN,181,RO,47.10301,24.62314 95874,Poiana Ilvei,4733,BN,181,RO,47.35749,24.74104 95967,Prundu Bârgăului,4733,BN,181,RO,47.21975,24.74123 96204,Răpănaşu,4733,BN,181,RO,47.38333,24.18333 96064,Rebra,4733,BN,181,RO,47.31667,24.5 96066,Rebrişoara,4733,BN,181,RO,47.28333,24.45 96088,Reteag,4733,BN,181,RO,47.19582,24.01862 96099,Rodna,4733,BN,181,RO,47.41667,24.81667 96108,Romuli,4733,BN,181,RO,47.53333,24.43333 96155,Runcu Salvei,4733,BN,181,RO,47.34382,24.32529 96237,Salva,4733,BN,181,RO,47.3,24.35 96529,Sângeorz-Băi,4733,BN,181,RO,47.3685,24.67212 96536,Sânmihaiu de Câmpie,4733,BN,181,RO,46.89257,24.33589 97113,Șanț,4733,BN,181,RO,47.45,24.9 97044,Şieu,4733,BN,181,RO,47.01667,24.6 97045,Şieu-Măgheruş,4733,BN,181,RO,47.08333,24.38333 97046,Şieu-Odorhei,4733,BN,181,RO,47.15194,24.29159 97047,Şieuţ,4733,BN,181,RO,46.98333,24.65 96338,Silivașu de Câmpie,4733,BN,181,RO,46.78333,24.3 97055,Şintereag,4733,BN,181,RO,47.18333,24.3 96415,Spermezeu,4733,BN,181,RO,47.3,24.15 96513,Susenii Bârgăului,4733,BN,181,RO,47.22311,24.7073 96592,Târlişua,4733,BN,181,RO,47.38333,24.18333 106066,Teaca,4733,BN,181,RO,46.91667,24.51667 106076,Telcișor,4733,BN,181,RO,47.46,24.45158 106075,Telciu,4733,BN,181,RO,47.43333,24.4 106097,Tiha Bârgăului,4733,BN,181,RO,47.23333,24.76667 96560,Tureac,4733,BN,181,RO,47.22967,24.80589 96667,Unirea,4733,BN,181,RO,47.1606,24.53078 96678,Uriu,4733,BN,181,RO,47.2,24.05 96682,Urmeniş,4733,BN,181,RO,46.76667,24.36667 96712,Valea Borcutului,4733,BN,181,RO,47.37483,24.65293 96817,Viile Tecii,4733,BN,181,RO,46.93333,24.48333 96825,Viișoara,4733,BN,181,RO,47.10332,24.44949 96980,Zagra,4733,BN,181,RO,47.33333,24.28333 89889,Adășeni,4740,BT,181,RO,48.0692,26.93789 89909,Alba,4740,BT,181,RO,48.15859,26.47736 89916,Albeşti,4740,BT,181,RO,47.7,27.06667 90009,Avrămeni,4740,BT,181,RO,48.01667,26.95 90035,Bajura,4740,BT,181,RO,48.20119,26.53987 90517,Băluşeni,4740,BT,181,RO,47.66667,26.8 90057,Baranca,4740,BT,181,RO,48.19651,26.47893 90160,Blândeşti,4740,BT,181,RO,47.7,26.86667 90173,Bobulești,4740,BT,181,RO,47.75135,27.22697 90248,Botoşani,4740,BT,181,RO,47.75,26.66667 90328,Brăeşti,4740,BT,181,RO,47.86667,26.45 90296,Brehuiești,4740,BT,181,RO,47.70194,26.54472 90307,Broscăuţi,4740,BT,181,RO,47.95,26.45 90343,Bucecea,4740,BT,181,RO,47.76667,26.43333 90359,Bucovineni,4740,BT,181,RO,47.85,26.33333 93849,Călăraşi,4740,BT,181,RO,47.61667,27.26667 93806,Cândeşti,4740,BT,181,RO,47.93333,26.2 93881,Cătămărești-Deal,4740,BT,181,RO,47.76999,26.59897 90826,Comuna Adăşeni,4740,BT,181,RO,48.06287,26.95205 90839,Comuna Albeşti,4740,BT,181,RO,47.68387,27.08704 90906,Comuna Avrămeni,4740,BT,181,RO,48.02439,26.95734 91220,Comuna Băluşeni,4740,BT,181,RO,47.67758,26.77855 91004,Comuna Blândeşti,4740,BT,181,RO,47.71218,26.89193 91119,Comuna Brăeşti,4740,BT,181,RO,47.84903,26.45715 91102,Comuna Broscăuţi,4740,BT,181,RO,47.95596,26.46648 91576,Comuna Călăraşi,4740,BT,181,RO,47.6034,27.27766 91547,Comuna Cândeşti,4740,BT,181,RO,47.92325,26.2205 91411,Comuna Conceşti,4740,BT,181,RO,48.14676,26.57937 91421,Comuna Copălău,4740,BT,181,RO,47.6112,26.86778 93582,Comună Cordăreni,4740,BT,181,RO,48.0042,26.59106 91433,Comuna Corlăteni,4740,BT,181,RO,47.93121,26.58515 91441,Comuna Corni,4740,BT,181,RO,47.64025,26.60869 91479,Comuna Coşula,4740,BT,181,RO,47.61915,26.78553 91483,Comuna Coţuşca,4740,BT,181,RO,48.12109,26.87179 91497,Comuna Cristeşti,4740,BT,181,RO,47.61482,26.71546 91500,Comuna Cristineşti,4740,BT,181,RO,48.10199,26.36951 91529,Comuna Curteşti,4740,BT,181,RO,47.70275,26.64109 91727,Comuna Dângeni,4740,BT,181,RO,47.84762,26.94817 91616,Comuna Dersca,4740,BT,181,RO,47.98958,26.21496 91627,Comuna Dimăcheni,4740,BT,181,RO,47.91832,26.54362 91646,Comuna Dobârceni,4740,BT,181,RO,47.83289,27.07611 91696,Comuna Drăguşeni,4740,BT,181,RO,48.0329,26.81987 91725,Comuna Durneşti,4740,BT,181,RO,47.76992,27.09406 91788,Comuna Frumuşica,4740,BT,181,RO,47.52602,26.87967 91838,Comuna George Enescu,4740,BT,181,RO,48.03617,26.51437 91901,Comuna Gorbăneşti,4740,BT,181,RO,47.7745,26.88143 92041,Comuna Hăneşti,4740,BT,181,RO,47.91987,27.01151 91993,Comuna Havârna,4740,BT,181,RO,48.05683,26.68314 92001,Comuna Hilişeu-Horia,4740,BT,181,RO,48.01336,26.29685 92003,Comuna Hlipiceni,4740,BT,181,RO,47.60401,27.1708 92026,Comuna Hudeşti,4740,BT,181,RO,48.1528,26.50102 92058,Comuna Ibăneşti,4740,BT,181,RO,48.04435,26.4045 92151,Comuna Leorda,4740,BT,181,RO,47.81862,26.45408 92187,Comuna Lozna,4740,BT,181,RO,47.9441,26.28694 92199,Comuna Lunca,4740,BT,181,RO,47.62751,26.9924 92239,Comuna Manoleasa,4740,BT,181,RO,48.00852,27.07951 92272,Comuna Mihai Eminescu,4740,BT,181,RO,47.76632,26.56267 92283,Comuna Mihăileni,4740,BT,181,RO,47.95552,26.16204 92286,Comuna Mihălăşeni,4740,BT,181,RO,47.87956,27.0962 92291,Comuna Mileanca,4740,BT,181,RO,48.09121,26.72965 92306,Comuna Mitoc,4740,BT,181,RO,48.11288,27.00423 92447,Comuna Nicşeni,4740,BT,181,RO,47.8617,26.66023 92717,Comuna Păltiniş,4740,BT,181,RO,48.23494,26.68555 92649,Comuna Pomârla,4740,BT,181,RO,48.06225,26.3209 92688,Comuna Prăjeni,4740,BT,181,RO,47.49577,27.02386 92838,Comuna Răchiţi,4740,BT,181,RO,47.77282,26.68847 92831,Comuna Rãdãuţi-Prut,4740,BT,181,RO,48.22492,26.81304 92853,Comuna Răuseni,4740,BT,181,RO,47.55941,27.22551 92772,Comuna Ripiceni,4740,BT,181,RO,47.91899,27.13958 92781,Comuna Roma,4740,BT,181,RO,47.84497,26.57084 92786,Comuna Româneşti,4740,BT,181,RO,47.7086,27.23491 92871,Comuna Santa Mare,4740,BT,181,RO,47.63308,27.3026 93507,Comuna Şendriceni,4740,BT,181,RO,47.94657,26.32957 93022,Comuna Stăuceni,4740,BT,181,RO,47.72142,26.77471 93556,Comuna Ştiubieni,4740,BT,181,RO,47.97903,26.7642 93030,Comuna Suharău,4740,BT,181,RO,48.11697,26.44743 93032,Comuna Suliţa,4740,BT,181,RO,47.63723,26.9351 93162,Comuna Todireni,4740,BT,181,RO,47.61386,27.10122 93197,Comuna Truşeşti,4740,BT,181,RO,47.78058,26.98911 93200,Comuna Tudora,4740,BT,181,RO,47.50773,26.63397 93271,Comuna Ungureni,4740,BT,181,RO,47.90384,26.76051 93278,Comuna Unţeni,4740,BT,181,RO,47.81164,26.77886 93450,Comuna Văculeşti,4740,BT,181,RO,47.88229,26.3859 93439,Comuna Vârfu Câmpului,4740,BT,181,RO,47.86108,26.31529 93362,Comuna Viişoara,4740,BT,181,RO,48.16752,26.74267 93385,Comuna Vlădeni,4740,BT,181,RO,47.72216,26.5088 93393,Comuna Vlăsineşti,4740,BT,181,RO,47.93988,26.91901 93405,Comuna Vorniceni,4740,BT,181,RO,47.96004,26.64699 93406,Comuna Vorona,4740,BT,181,RO,47.57859,26.6138 93589,Conceşti,4740,BT,181,RO,48.16667,26.55 93608,Copălău,4740,BT,181,RO,47.61667,26.83333 93624,Cordăreni,4740,BT,181,RO,47.98333,26.58333 93626,Corlăteni,4740,BT,181,RO,47.93333,26.55 93636,Corni,4740,BT,181,RO,47.65,26.58333 93663,Costești,4740,BT,181,RO,47.80032,26.67584 93699,Coșula,4740,BT,181,RO,47.6257,26.77827 93696,Coţuşca,4740,BT,181,RO,48.13333,26.85 93718,Cristeşti,4740,BT,181,RO,47.63333,26.73333 93724,Cristineşti,4740,BT,181,RO,48.1,26.38333 93775,Curteşti,4740,BT,181,RO,47.71667,26.65 94108,Dângeni,4740,BT,181,RO,47.85,26.96667 93894,Darabani,4740,BT,181,RO,48.18333,26.58333 93923,Dersca,4740,BT,181,RO,47.98333,26.2 93937,Dimăcheni,4740,BT,181,RO,47.91139,26.5456 93972,Dobârceni,4740,BT,181,RO,47.81667,27.06667 94002,Dorobanți,4740,BT,181,RO,47.88234,26.64723 94006,Dorohoi,4740,BT,181,RO,47.95,26.4 94010,Dracșani,4740,BT,181,RO,47.62945,26.93029 94049,Drăguşeni,4740,BT,181,RO,48.01667,26.81667 94030,Draxini,4740,BT,181,RO,47.65,26.81667 94093,Dumbrăvița,4740,BT,181,RO,48.019,26.42724 94094,Dumeni,4740,BT,181,RO,48.00724,26.54287 94102,Durneşti,4740,BT,181,RO,47.76667,27.1 94191,Flămânzi,4740,BT,181,RO,47.55,26.86667 94211,Frumuşica,4740,BT,181,RO,47.53333,26.9 94293,George Enescu,4740,BT,181,RO,48.03333,26.48333 94383,Gorbăneşti,4740,BT,181,RO,47.78333,26.85 94603,Hăneşti,4740,BT,181,RO,47.91667,26.98333 94524,Havârna,4740,BT,181,RO,48.06667,26.65 94536,Hilişeu-Horia,4740,BT,181,RO,48.03333,26.25 94538,Hlipiceni,4740,BT,181,RO,47.6,27.15 94571,Hudeşti,4740,BT,181,RO,48.15,26.5 94614,Iacobeni,4740,BT,181,RO,47.86115,26.91304 94632,Ibăneşti,4740,BT,181,RO,48.06667,26.36667 94638,Icușeni,4740,BT,181,RO,47.59269,26.59605 94680,Ionășeni,4740,BT,181,RO,47.73029,26.99329 94745,Joldești,4740,BT,181,RO,47.56004,26.57705 94778,Leorda,4740,BT,181,RO,47.81667,26.45 94836,Lozna,4740,BT,181,RO,47.95144,26.27723 94859,Lunca,4740,BT,181,RO,47.61667,26.98333 95214,Mândrești,4740,BT,181,RO,47.73333,26.48333 94923,Manoleasa,4740,BT,181,RO,47.98333,27.06667 94993,Mihăileni,4740,BT,181,RO,47.96667,26.15 94997,Mihălăşeni,4740,BT,181,RO,47.88333,27.06667 95004,Mileanca,4740,BT,181,RO,48.08333,26.7 95010,Miorcani,4740,BT,181,RO,48.20223,26.85279 95030,Mitoc,4740,BT,181,RO,48.1,27.03333 95037,Mlenăuți,4740,BT,181,RO,48.12663,26.48961 95115,Municipiul Botoşani,4740,BT,181,RO,47.73984,26.67156 95137,Municipiul Dorohoi,4740,BT,181,RO,47.96772,26.41685 95333,Nicolae Bălcescu,4740,BT,181,RO,47.56664,26.89629 95344,Nicşeni,4740,BT,181,RO,47.86667,26.63333 95438,Oneaga,4740,BT,181,RO,47.57626,26.73244 95473,Oraş Bucecea,4740,BT,181,RO,47.77741,26.43966 95507,Oraş Darabani,4740,BT,181,RO,48.17429,26.61519 95518,Oraş Flãmânzi,4740,BT,181,RO,47.56193,26.90381 95600,Oraş Sãveni,4740,BT,181,RO,47.95998,26.86677 95630,Oraş Ştefãneşti,4740,BT,181,RO,47.78834,27.20601 95668,Orășeni-Deal,4740,BT,181,RO,47.67597,26.67671 95664,Oroftiana,4740,BT,181,RO,48.17758,26.34856 96006,Pădureni,4740,BT,181,RO,47.97434,26.31672 96014,Păltiniş,4740,BT,181,RO,48.21667,26.65 95863,Poiana,4740,BT,181,RO,47.60149,26.60826 95904,Pomârla,4740,BT,181,RO,48.06667,26.31667 95970,Prăjeni,4740,BT,181,RO,47.51667,27.01667 96188,Răchiţi,4740,BT,181,RO,47.76667,26.68333 96202,Rădăuți-Prut,4740,BT,181,RO,48.23333,26.8 96194,Rădeni,4740,BT,181,RO,47.51186,26.89249 96212,Răuseni,4740,BT,181,RO,47.56667,27.2 96078,Rediu,4740,BT,181,RO,48.23075,26.77841 96095,Ripiceni,4740,BT,181,RO,47.95,27.13333 96104,Roma,4740,BT,181,RO,47.83333,26.6 96113,Românești,4740,BT,181,RO,47.73141,27.24027 96139,Roșiori,4740,BT,181,RO,47.76095,26.72167 96240,Santa Mare,4740,BT,181,RO,47.61667,27.35 96242,Sarafinești,4740,BT,181,RO,47.61708,26.6074 105985,Sârbi,4740,BT,181,RO,47.94268,26.91818 106046,Săveni,4740,BT,181,RO,47.95,26.86667 97038,Şendriceni,4740,BT,181,RO,47.95171,26.32817 96472,Stâncești,4740,BT,181,RO,47.75,26.6 96483,Stăuceni,4740,BT,181,RO,47.71667,26.75 97133,Ștefănești,4740,BT,181,RO,47.79169,27.20053 97086,Ştefăneşti-Sat,4740,BT,181,RO,47.78333,27.18333 97088,Ştiubieni,4740,BT,181,RO,47.96667,26.78333 96444,Storeşti,4740,BT,181,RO,47.55,26.86667 96464,Străteni,4740,BT,181,RO,47.93677,26.29664 96456,Stroiești,4740,BT,181,RO,47.61042,26.96562 96496,Suharău,4740,BT,181,RO,48.13333,26.41667 96500,Sulița,4740,BT,181,RO,47.65,26.91667 97135,Șupitca,4740,BT,181,RO,47.60941,26.78359 106113,Tocileni,4740,BT,181,RO,47.71104,26.78657 106114,Todireni,4740,BT,181,RO,47.61667,27.11667 106162,Truşeşti,4740,BT,181,RO,47.76667,27.01667 106166,Tudor Vladimirescu,4740,BT,181,RO,47.68635,27.17211 106168,Tudora,4740,BT,181,RO,47.51667,26.63333 96662,Ungureni,4740,BT,181,RO,47.88176,26.79899 96663,Ungureni-Jianu,4740,BT,181,RO,47.88333,26.78333 96671,Unţeni,4740,BT,181,RO,47.8,26.78333 96950,Văculeşti,4740,BT,181,RO,47.88333,26.41667 96938,Vârfu Câmpului,4740,BT,181,RO,47.84566,26.33056 96804,Victoria,4740,BT,181,RO,47.61018,27.1673 96821,Viişoara,4740,BT,181,RO,48.16667,26.73333 96863,Vlădeni,4740,BT,181,RO,47.71667,26.51667 96864,Vlădeni-Deal,4740,BT,181,RO,47.5225,26.87295 96872,Vlăsineşti,4740,BT,181,RO,47.93333,26.88333 96891,Vorniceni,4740,BT,181,RO,47.98333,26.66667 96892,Vorona,4740,BT,181,RO,47.57714,26.63078 96893,Vorona Teodoru,4740,BT,181,RO,47.55,26.6 96999,Zlătunoaia,4740,BT,181,RO,47.65026,27.00743 90042,Baldovinești,4736,BR,181,RO,45.32182,27.91107 90547,Bărăganul,4736,BR,181,RO,44.8,27.51667 90115,Berteştii de Jos,4736,BR,181,RO,44.83333,27.75 90224,Bordei Verde,4736,BR,181,RO,45.08333,27.56667 90334,Brăila,4736,BR,181,RO,45.27152,27.97429 90594,Cazasu,4736,BR,181,RO,45.27172,27.89011 90681,Chiscani,4736,BR,181,RO,45.18333,27.93333 90709,Ciocile,4736,BR,181,RO,44.81667,27.23333 90733,Cireşu,4736,BR,181,RO,44.95,27.35 91243,Comuna Bărăganul,4736,BR,181,RO,44.81068,27.51515 90973,Comuna Berteştii de Jos,4736,BR,181,RO,44.83024,27.72008 91047,Comuna Bordei Verde,4736,BR,181,RO,45.03225,27.57088 91269,Comuna Cazasu,4736,BR,181,RO,45.27172,27.89011 91324,Comuna Chiscani,4736,BR,181,RO,45.2088,27.91776 91342,Comuna Ciocile,4736,BR,181,RO,44.82211,27.2518 91359,Comuna Cireşu,4736,BR,181,RO,44.95368,27.37901 91706,Comuna Dudeşti,4736,BR,181,RO,44.87624,27.44325 91781,Comuna Frecãţei,4736,BR,181,RO,44.85977,28.08422 91828,Comuna Galbenu,4736,BR,181,RO,45.19252,27.16669 91836,Comuna Gemenele,4736,BR,181,RO,45.28931,27.65637 91941,Comuna Grădiştea,4736,BR,181,RO,45.24832,27.38192 91924,Comuna Gropeni,4736,BR,181,RO,45.07328,27.88606 92126,Comuna Jirlău,4736,BR,181,RO,45.15314,27.209 92405,Comuna Măraşu,4736,BR,181,RO,45.00807,27.98062 92422,Comuna Măxineni,4736,BR,181,RO,45.41803,27.6647 92295,Comuna Mircea Vodă,4736,BR,181,RO,45.12889,27.38258 92339,Comuna Movila Miresii,4736,BR,181,RO,45.19574,27.60368 92737,Comuna Racoviţa,4736,BR,181,RO,45.30627,27.4672 92823,Comuna Râmnicelu,4736,BR,181,RO,45.29786,27.51338 92782,Comuna Romanu,4736,BR,181,RO,45.31818,27.74046 92804,Comuna Roşiori,4736,BR,181,RO,44.84097,27.34129 92866,Comuna Salcia Tudor,4736,BR,181,RO,45.4026,27.5038 92893,Comuna Scorţaru Nou,4736,BR,181,RO,45.34905,27.61478 92932,Comuna Siliştea,4736,BR,181,RO,45.35263,27.82592 93015,Comuna Stăncuţa,4736,BR,181,RO,44.88885,27.79614 93038,Comuna Surdila-Găiseanca,4736,BR,181,RO,45.09893,27.33491 93037,Comuna Surdila-Greci,4736,BR,181,RO,45.07288,27.2684 93565,Comuna Şuţeşti,4736,BR,181,RO,45.22101,27.47067 93148,Comuna Tichileşti,4736,BR,181,RO,45.14822,27.89059 93189,Comuna Traian,4736,BR,181,RO,45.15355,27.6917 93199,Comuna Tudor Vladimirescu,4736,BR,181,RO,45.22537,27.75299 93202,Comuna Tufeşti,4736,BR,181,RO,44.98719,27.80256 93264,Comuna Ulmu,4736,BR,181,RO,44.94821,27.29836 93277,Comuna Unirea,4736,BR,181,RO,45.10592,27.77613 93454,Comuna Vădeni,4736,BR,181,RO,45.33745,27.90589 93352,Comuna Victoria,4736,BR,181,RO,44.79568,27.67036 93374,Comuna Vişani,4736,BR,181,RO,45.18495,27.30611 93373,Comuna Viziru,4736,BR,181,RO,45.02027,27.73217 93491,Comuna Zăvoaia,4736,BR,181,RO,44.95276,27.45613 93621,Corbu Nou,4736,BR,181,RO,45.40996,27.59191 93785,Cuza Vodă,4736,BR,181,RO,44.92513,27.73273 93908,Dedulești,4736,BR,181,RO,45.14679,27.38907 94069,Dudeşti,4736,BR,181,RO,44.9,27.43333 94269,Făurei,4736,BR,181,RO,45.08333,27.26667 94205,Frecăţei,4736,BR,181,RO,44.9,28.11667 94275,Galbenu,4736,BR,181,RO,45.21667,27.16667 94289,Gemenele,4736,BR,181,RO,45.28333,27.61667 94440,Grădiştea,4736,BR,181,RO,45.26667,27.38333 94419,Gropeni,4736,BR,181,RO,45.07547,27.87969 94620,Ianca,4736,BR,181,RO,45.13333,27.45 97024,Însurăţei,4736,BR,181,RO,44.91667,27.6 94740,Jirlău,4736,BR,181,RO,45.16667,27.16667 94751,Jugureanu,4736,BR,181,RO,44.94313,27.27878 94756,Lacu Sărat,4736,BR,181,RO,45.21867,27.88764 94759,Lanurile,4736,BR,181,RO,45.04149,27.74916 95265,Măraşu,4736,BR,181,RO,44.85,27.96667 95293,Măxineni,4736,BR,181,RO,45.4,27.63333 94977,Mihai Bravu,4736,BR,181,RO,44.78469,27.72144 95013,Mircea Vodă,4736,BR,181,RO,45.11667,27.38333 95081,Movila Miresii,4736,BR,181,RO,45.21667,27.6 95118,Municipiul Brãila,4736,BR,181,RO,45.2719,27.975 95522,Oraş Fãurei,4736,BR,181,RO,45.08534,27.27155 95533,Oraş Ianca,4736,BR,181,RO,45.11446,27.50205 95627,Oraş Însurãţei,4736,BR,181,RO,44.91928,27.64433 95739,Perișoru,4736,BR,181,RO,45.11268,27.49817 95822,Plopu,4736,BR,181,RO,45.14847,27.51387 96041,Racoviţa,4736,BR,181,RO,45.3,27.45 96168,Râmnicelu,4736,BR,181,RO,45.28333,27.53333 96106,Romanu,4736,BR,181,RO,45.28333,27.73333 96132,Roşiori,4736,BR,181,RO,44.8,27.38333 96234,Salcia Tudor,4736,BR,181,RO,45.36667,27.51667 96279,Scorţaru Nou,4736,BR,181,RO,45.31667,27.6 96283,Scorțaru Vechi,4736,BR,181,RO,45.21886,27.75489 96340,Siliştea,4736,BR,181,RO,45.3,27.85 96417,Spiru Haret,4736,BR,181,RO,44.86715,27.74463 96476,Stăncuţa,4736,BR,181,RO,44.9,27.83333 96507,Surdila-Găiseanca,4736,BR,181,RO,45.06667,27.33333 96506,Surdila-Greci,4736,BR,181,RO,45.06667,27.26667 97097,Şuţeşti,4736,BR,181,RO,45.21667,27.43333 96615,Tătaru,4736,BR,181,RO,44.84482,27.43376 106093,Tichileşti,4736,BR,181,RO,45.11667,27.9 106145,Traian,4736,BR,181,RO,45.18333,27.73333 106164,Tudor Vladimirescu,4736,BR,181,RO,45.21667,27.8 106171,Tufeşti,4736,BR,181,RO,45.05,27.81667 96650,Ulmu,4736,BR,181,RO,44.95,27.31667 96669,Unirea,4736,BR,181,RO,45.11667,27.81667 96680,Urleasca,4736,BR,181,RO,45.13697,27.64736 96954,Vădeni,4736,BR,181,RO,45.36667,27.93333 96719,Valea Cânepii,4736,BR,181,RO,45.08333,27.81667 96806,Victoria,4736,BR,181,RO,44.81667,27.61667 96846,Vişani,4736,BR,181,RO,45.15,27.28333 96844,Viziru,4736,BR,181,RO,45.01667,27.7 97021,Zăvoaia,4736,BR,181,RO,44.95,27.48333 89877,Acriș,4759,BV,181,RO,45.63673,25.99247 89971,Apaţa,4759,BV,181,RO,45.95,25.51667 90004,Augustin,4759,BV,181,RO,46.04613,25.55333 90079,Beclean,4759,BV,181,RO,45.83119,24.9218 90179,Bod,4759,BV,181,RO,45.76667,25.65 90266,Bran,4759,BV,181,RO,45.51667,25.35 90281,Braşov,4759,BV,181,RO,45.64861,25.60613 90386,Budila,4759,BV,181,RO,45.66667,25.8 90409,Buneşti,4759,BV,181,RO,46.1,25.05 90596,Caţa,4759,BV,181,RO,46.08333,25.26667 90703,Cincu,4759,BV,181,RO,45.91667,24.8 90785,Codlea,4759,BV,181,RO,45.7,25.45 90799,Colonia Bod,4759,BV,181,RO,45.75588,25.5996 90805,Comana de Jos,4759,BV,181,RO,45.91375,25.23129 90806,Comana de Sus,4759,BV,181,RO,45.9,25.26667 90878,Comuna Apaţa,4759,BV,181,RO,45.95043,25.53312 90902,Comuna Augustin,4759,BV,181,RO,46.04613,25.55333 90947,Comuna Beclean,4759,BV,181,RO,45.83119,24.92317 91017,Comuna Bod,4759,BV,181,RO,45.75987,25.62077 91076,Comuna Bran,4759,BV,181,RO,45.51412,25.37289 91148,Comuna Budila,4759,BV,181,RO,45.67432,25.80793 91165,Comuna Buneşti,4759,BV,181,RO,46.10042,25.05528 91270,Comuna Caţa,4759,BV,181,RO,46.13174,25.26977 91338,Comuna Cincu,4759,BV,181,RO,45.90712,24.77333 91405,Comuna Comana,4759,BV,181,RO,45.91357,25.2208 91498,Comuna Cristian,4759,BV,181,RO,45.62474,25.48292 91503,Comuna Crizbav,4759,BV,181,RO,45.8207,25.46739 91693,Comuna Drăguş,4759,BV,181,RO,45.76146,24.77906 91718,Comuna Dumbrăviţa,4759,BV,181,RO,45.76667,25.43333 91754,Comuna Feldioara,4759,BV,181,RO,45.82829,25.57459 91798,Comuna Fundata,4759,BV,181,RO,45.44615,25.27775 92037,Comuna Hălchiu,4759,BV,181,RO,45.76743,25.52991 92043,Comuna Hărman,4759,BV,181,RO,45.73727,25.70451 92035,Comuna Hârşeni,4759,BV,181,RO,45.7342,25.02404 92007,Comuna Hoghiz,4759,BV,181,RO,45.96602,25.32168 92008,Comuna Holbav,4759,BV,181,RO,45.65922,25.38744 92013,Comuna Homorod,4759,BV,181,RO,46.0726,25.33464 92119,Comuna Jibert,4759,BV,181,RO,46.00173,25.07355 92171,Comuna Lisa,4759,BV,181,RO,45.7276,24.86876 92376,Comuna Mãieruş,4759,BV,181,RO,45.89358,25.49705 92366,Comuna Mândra,4759,BV,181,RO,45.81219,25.03262 92322,Comuna Moieciu,4759,BV,181,RO,45.48848,25.30962 92511,Comuna Ormeniş,4759,BV,181,RO,46.00473,25.55683 92708,Comuna Pârâu,4759,BV,181,RO,45.85139,25.21584 92630,Comuna Poiana Mărului (Brașov),4759,BV,181,RO,45.60462,25.30927 92671,Comuna Prejmer,4759,BV,181,RO,45.73164,25.78673 92739,Comuna Racoş,4759,BV,181,RO,46.02051,25.39563 92753,Comuna Recea,4759,BV,181,RO,45.74312,24.94086 93047,Comuna Sâmbăta de Sus,4759,BV,181,RO,45.72698,24.81067 93063,Comuna Sânpetru,4759,BV,181,RO,45.71082,25.63678 93511,Comuna Şercaia,4759,BV,181,RO,45.83002,25.14114 93524,Comuna Şinca Nouă,4759,BV,181,RO,45.69667,25.22177 93525,Comuna Şinca Veche,4759,BV,181,RO,45.75892,25.15578 93534,Comuna Şoarş,4759,BV,181,RO,45.92871,24.92764 93240,Comuna Tărlungeni,4759,BV,181,RO,45.64579,25.77368 93138,Comuna Teliu,4759,BV,181,RO,45.69856,25.8559 93149,Comuna Ticuşu Vechi,4759,BV,181,RO,45.92823,25.09346 93251,Comuna Ucea de Jos,4759,BV,181,RO,45.7798,24.68477 93269,Comuna Ungra,4759,BV,181,RO,45.97828,25.21859 93333,Comuna Vama Buzăului,4759,BV,181,RO,45.60258,25.97991 93380,Comuna Viştea de Jos,4759,BV,181,RO,45.77201,24.75237 93395,Comuna Voila,4759,BV,181,RO,45.81815,24.8406 93412,Comuna Vulcan,4759,BV,181,RO,45.6496,25.41671 93723,Cristian,4759,BV,181,RO,45.61667,25.46667 93730,Crivina,4759,BV,181,RO,45.58333,25.98333 93732,Crizbav,4759,BV,181,RO,45.81515,25.46718 93758,Cuciulata,4759,BV,181,RO,45.94389,25.27541 94052,Drăguș,4759,BV,181,RO,45.76146,24.77906 94088,Dumbrăviţa,4759,BV,181,RO,45.76667,25.43333 94256,Făgăraș,4759,BV,181,RO,45.85,24.96667 94152,Feldioara,4759,BV,181,RO,45.81667,25.6 94183,Fișer,4759,BV,181,RO,46.07912,25.15103 94224,Fundata,4759,BV,181,RO,45.45,25.3 94321,Ghimbav,4759,BV,181,RO,45.66667,25.5 94598,Hălchiu,4759,BV,181,RO,45.76667,25.55 94605,Hărman,4759,BV,181,RO,45.71667,25.68333 94593,Hârşeni,4759,BV,181,RO,45.75,25.01667 94547,Hoghiz,4759,BV,181,RO,45.98333,25.3 94548,Holbav,4759,BV,181,RO,45.65922,25.38744 94553,Homorod,4759,BV,181,RO,46.05,25.26667 94728,Jibert,4759,BV,181,RO,46.0,25.06667 94809,Lisa,4759,BV,181,RO,45.71667,24.85 95250,Măieruş,4759,BV,181,RO,45.9,25.53333 95212,Mândra,4759,BV,181,RO,45.81667,25.05 95047,Moeciu de Jos,4759,BV,181,RO,45.48333,25.31667 95057,Moieciu de Jos,4759,BV,181,RO,45.50313,25.33719 95102,Municipiul Codlea,4759,BV,181,RO,45.69944,25.44778 95117,Municipiul Braşov,4759,BV,181,RO,45.65053,25.60913 95142,Municipiul Fãgãraş,4759,BV,181,RO,45.84098,24.97348 95185,Municipiul Sãcele,4759,BV,181,RO,45.61772,25.6989 95524,Oraş Ghimbav,4759,BV,181,RO,45.66397,25.50836 95573,Oraş Predeal,4759,BV,181,RO,45.49679,25.58778 95581,Oraş Râşnov,4759,BV,181,RO,45.59108,25.46393 95580,Oraş Rupea,4759,BV,181,RO,46.05903,25.18717 95617,Oraş Victoria,4759,BV,181,RO,45.72968,24.7028 95625,Oraş Zãrneşti,4759,BV,181,RO,45.5565,25.35205 95662,Ormeniş,4759,BV,181,RO,46.01667,25.55 96002,Pârâu,4759,BV,181,RO,45.85,25.18333 95740,Perșani,4759,BV,181,RO,45.7816,25.21285 95879,Poiana Mărului (Brașov),4759,BV,181,RO,45.6,25.3 95942,Predeal,4759,BV,181,RO,45.5,25.56667 95944,Prejmer,4759,BV,181,RO,45.71667,25.76667 95984,Purcăreni,4759,BV,181,RO,45.64476,25.79129 96048,Racoș,4759,BV,181,RO,46.02524,25.41075 96178,Râşnov,4759,BV,181,RO,45.58333,25.45 96069,Recea,4759,BV,181,RO,45.71334,24.93152 96156,Rupea,4759,BV,181,RO,46.03333,25.21667 105992,Săcele,4759,BV,181,RO,45.61674,25.71101 96520,Sâmbăta de Sus,4759,BV,181,RO,45.76178,24.82053 96543,Sânpetru,4759,BV,181,RO,45.71082,25.63678 97040,Şercaia,4759,BV,181,RO,45.83333,25.13333 97125,Șimon,4759,BV,181,RO,45.48484,25.35664 97126,Șinca Nouă,4759,BV,181,RO,45.69457,25.24348 97054,Şinca Veche,4759,BV,181,RO,45.76667,25.16667 97063,Şoarş,4759,BV,181,RO,45.92859,24.92867 96401,Sohodol,4759,BV,181,RO,45.52829,25.40244 96612,Tărlungeni,4759,BV,181,RO,45.63333,25.75 106081,Teliu,4759,BV,181,RO,45.69856,25.8559 106094,Ticuşu Vechi,4759,BV,181,RO,45.93333,25.1 106119,Tohanu Nou,4759,BV,181,RO,45.55208,25.38622 96549,Tunelu-Teliu,4759,BV,181,RO,45.7,25.85 96632,Ucea de Jos,4759,BV,181,RO,45.7841,24.67097 96633,Ucea de Sus,4759,BV,181,RO,45.75,24.68333 96656,Ungra,4759,BV,181,RO,45.98333,25.26667 96772,Vama Buzăului,4759,BV,181,RO,45.59668,25.99359 96803,Victoria,4759,BV,181,RO,45.72968,24.7028 96839,Viscri,4759,BV,181,RO,46.05522,25.09389 96854,Viștea de Jos,4759,BV,181,RO,45.79582,24.7238 96876,Voila,4759,BV,181,RO,45.81839,24.84215 96900,Vulcan,4759,BV,181,RO,45.63333,25.41667 97016,Zărnești,4759,BV,181,RO,45.56093,25.31787 96997,Zizin,4759,BV,181,RO,45.63697,25.77898 90347,Bucharest,4730,B,181,RO,44.43225,26.10626 96307,Sector 1,4730,B,181,RO,44.49239,26.04831 96308,Sector 2,4730,B,181,RO,44.4528,26.13321 96309,Sector 3,4730,B,181,RO,44.4234,26.16874 96310,Sector 4,4730,B,181,RO,44.37571,26.12085 96311,Sector 5,4730,B,181,RO,44.38808,26.07144 96312,Sector 6,4730,B,181,RO,44.43579,26.01649 89948,Amara,4756,BZ,181,RO,45.24866,27.29244 89949,Amaru,4756,BZ,181,RO,44.93333,26.58333 90469,Băbeni,4756,BZ,181,RO,45.44635,26.97875 90019,Babeţi,4756,BZ,181,RO,45.31667,26.38333 90522,Bălăceanu,4756,BZ,181,RO,45.26667,27.15 90047,Balta Albă,4756,BZ,181,RO,45.30423,27.28557 90462,Bâsca Chiojdului,4756,BZ,181,RO,45.3712,26.18355 90463,Bâsca Rozilei,4756,BZ,181,RO,45.45387,26.33714 90464,Bâscenii de Jos,4756,BZ,181,RO,45.24708,26.32122 90465,Bâscenii de Sus,4756,BZ,181,RO,45.26662,26.27073 90075,Beceni,4756,BZ,181,RO,45.38333,26.78333 90097,Berca,4756,BZ,181,RO,45.28333,26.68333 90142,Bisoca,4756,BZ,181,RO,45.53333,26.7 90165,Blăjani,4756,BZ,181,RO,45.31667,26.81667 90169,Boboc,4756,BZ,181,RO,45.1957,26.98136 90211,Boldu,4756,BZ,181,RO,45.33333,27.23333 90253,Bozioru,4756,BZ,181,RO,45.38333,26.48333 90321,Brădeanu,4756,BZ,181,RO,44.93333,26.85 90330,Brăeşti,4756,BZ,181,RO,45.43333,26.5 90285,Breaza,4756,BZ,181,RO,45.1,26.53333 90374,Buda,4756,BZ,181,RO,45.5,26.9 90421,Burueneşti,4756,BZ,181,RO,45.31667,26.35 90435,Buzău,4756,BZ,181,RO,45.15,26.83333 90558,C.a. Rosetti,4756,BZ,181,RO,45.04622,27.1664 93834,Căldărăști,4756,BZ,181,RO,44.89375,27.034 90566,Calvini,4756,BZ,181,RO,45.25,26.3 93856,Căneşti,4756,BZ,181,RO,45.4,26.6 93865,Căpățânești,4756,BZ,181,RO,45.18333,26.8 90597,Cașoca,4756,BZ,181,RO,45.48914,26.26706 93877,Cătina,4756,BZ,181,RO,45.3,26.25 90638,Cernăteşti,4756,BZ,181,RO,45.26667,26.76667 90668,Chiliile,4756,BZ,181,RO,45.45,26.58333 90674,Chiojdu,4756,BZ,181,RO,45.35,26.2 90701,Cilibia,4756,BZ,181,RO,45.06667,27.06667 90736,Cislău,4756,BZ,181,RO,45.25,26.36667 90776,Cochirleanca,4756,BZ,181,RO,45.21667,27.03333 90802,Colţi,4756,BZ,181,RO,45.38333,26.38333 90863,Comuna Amaru,4756,BZ,181,RO,44.9377,26.59991 91223,Comuna Bălăceanu,4756,BZ,181,RO,45.24656,27.13604 90929,Comuna Balta Albă,4756,BZ,181,RO,45.26376,27.30558 90944,Comuna Beceni,4756,BZ,181,RO,45.38456,26.76978 90959,Comuna Berca,4756,BZ,181,RO,45.30098,26.65989 90994,Comuna Bisoca,4756,BZ,181,RO,45.5434,26.70591 91008,Comuna Blăjani,4756,BZ,181,RO,45.29964,26.81716 91039,Comuna Boldu,4756,BZ,181,RO,45.32267,27.24313 91067,Comuna Bozioru,4756,BZ,181,RO,45.38987,26.4677 91111,Comuna Brădeanu,4756,BZ,181,RO,44.89367,26.86105 91117,Comuna Brăeşti,4756,BZ,181,RO,45.44253,26.49487 91089,Comuna Breaza,4756,BZ,181,RO,45.09183,26.5324 91142,Comuna Buda,4756,BZ,181,RO,45.50907,26.90434 91251,Comuna C.A. Rosetti,4756,BZ,181,RO,45.03678,27.16722 91255,Comuna Calvini,4756,BZ,181,RO,45.24906,26.29982 91582,Comuna Căneşti,4756,BZ,181,RO,45.39711,26.60889 91593,Comuna Cătina,4756,BZ,181,RO,45.28747,26.24479 91296,Comuna Cernăteşti,4756,BZ,181,RO,45.29838,26.7626 91315,Comuna Chiliile,4756,BZ,181,RO,45.44784,26.59441 91320,Comuna Chiojdu,4756,BZ,181,RO,45.36671,26.2184 91336,Comuna Cilibia,4756,BZ,181,RO,45.05219,27.04337 91361,Comuna Cislău,4756,BZ,181,RO,45.22578,26.37954 91386,Comuna Cochirleanca,4756,BZ,181,RO,45.20146,27.01126 91402,Comuna Colţi,4756,BZ,181,RO,45.39105,26.40723 91455,Comuna Costeşti,4756,BZ,181,RO,45.06179,26.77321 91468,Comuna Cozieni,4756,BZ,181,RO,45.3324,26.4941 91773,Comuna Florica,4756,BZ,181,RO,44.90802,26.76627 91981,Comuna Gălbinaşi,4756,BZ,181,RO,45.07439,26.94363 91849,Comuna Gherăseni,4756,BZ,181,RO,45.02443,26.80069 91845,Comuna Ghergheasa,4756,BZ,181,RO,45.28915,27.19182 91882,Comuna Glodeanu-Sărat,4756,BZ,181,RO,44.87601,26.65897 91881,Comuna Glodeanu-Siliştea,4756,BZ,181,RO,44.83956,26.76757 91912,Comuna Greabănu,4756,BZ,181,RO,45.38794,26.96628 91952,Comuna Gura Teghii,4756,BZ,181,RO,45.50703,26.43441 92138,Comuna Largu,4756,BZ,181,RO,44.97448,27.16261 92184,Comuna Lopătari,4756,BZ,181,RO,45.48774,26.55233 92189,Comuna Luciu,4756,BZ,181,RO,44.9751,27.05781 92389,Comuna Măgura,4756,BZ,181,RO,45.26962,26.55104 92367,Comuna Mânzăleşti,4756,BZ,181,RO,45.50414,26.64561 92417,Comuna Mărăcineni,4756,BZ,181,RO,45.18902,26.79393 92409,Comuna Mărgăriteşti,4756,BZ,181,RO,45.43496,26.83619 92255,Comuna Merei,4756,BZ,181,RO,45.13102,26.66127 92285,Comuna Mihăileşti,4756,BZ,181,RO,44.92518,26.6733 92338,Comuna Movila Banului,4756,BZ,181,RO,44.97607,26.70299 92361,Comuna Murgeşti,4756,BZ,181,RO,45.40612,26.88883 92461,Comuna Năeni,4756,BZ,181,RO,45.09968,26.48944 92484,Comuna Odăile,4756,BZ,181,RO,45.38458,26.53966 92528,Comuna Padina,4756,BZ,181,RO,44.87082,27.11566 92720,Comuna Pănătău,4756,BZ,181,RO,45.30516,26.39159 92538,Comuna Pardoşi,4756,BZ,181,RO,45.44989,26.87934 92707,Comuna Pârscov,4756,BZ,181,RO,45.3076,26.55283 92580,Comuna Pietroasele,4756,BZ,181,RO,45.10357,26.59143 92614,Comuna Podgoria,4756,BZ,181,RO,45.45591,27.00626 92667,Comuna Poşta Câlnãu,4756,BZ,181,RO,45.24683,26.86785 92695,Comuna Puieşti,4756,BZ,181,RO,45.39338,27.2085 92738,Comuna Racoviţeni,4756,BZ,181,RO,45.35025,26.89919 92824,Comuna Râmnicelu,4756,BZ,181,RO,45.3784,27.13293 92774,Comuna Robeasca,4756,BZ,181,RO,45.14246,27.14697 92818,Comuna Ruşeţu,4756,BZ,181,RO,44.94214,27.21863 93089,Comuna Săgeata,4756,BZ,181,RO,45.10063,27.02496 93090,Comuna Săhăteni,4756,BZ,181,RO,45.02238,26.56344 93105,Comuna Săpoca,4756,BZ,181,RO,45.2229,26.75175 93108,Comuna Săruleşti,4756,BZ,181,RO,45.48304,26.77864 92896,Comuna Scorţoasa,4756,BZ,181,RO,45.36204,26.66176 92900,Comuna Scutelnici,4756,BZ,181,RO,44.83964,26.93747 92944,Comuna Siriu,4756,BZ,181,RO,45.50872,26.2447 92962,Comuna Smeeni,4756,BZ,181,RO,44.98816,26.91261 93013,Comuna Stâlpu,4756,BZ,181,RO,45.08519,26.70839 93576,Comuna Ţinteşti,4756,BZ,181,RO,45.0728,26.85786 93159,Comuna Tisãu,4756,BZ,181,RO,45.19337,26.57321 93176,Comuna Topliceni,4756,BZ,181,RO,45.44104,26.9821 93261,Comuna Ulmeni,4756,BZ,181,RO,45.06881,26.62364 93273,Comuna Unguriu,4756,BZ,181,RO,45.27963,26.64103 93294,Comuna Vadu Paşii,4756,BZ,181,RO,45.15743,26.88249 93428,Comuna Vâlcelele,4756,BZ,181,RO,45.3443,27.34937 93320,Comuna Valea Râmnicului,4756,BZ,181,RO,45.36174,27.04675 93324,Comuna Valea Sălciei,4756,BZ,181,RO,45.48818,26.82912 93346,Comuna Verneşti,4756,BZ,181,RO,45.20804,26.6965 93367,Comuna Vintilă Vodă,4756,BZ,181,RO,45.45461,26.72385 93369,Comuna Vipereşti,4756,BZ,181,RO,45.24643,26.44527 93489,Comuna Zărneşti,4756,BZ,181,RO,45.30951,26.881 93476,Comuna Ziduri,4756,BZ,181,RO,45.28211,27.05974 93620,Corbu,4756,BZ,181,RO,45.32108,26.24936 93659,Costeşti,4756,BZ,181,RO,45.05,26.76667 93700,Coțatcu,4756,BZ,181,RO,45.46643,27.01486 93684,Cozieni,4756,BZ,181,RO,45.33333,26.48333 94106,Dâmbroca,4756,BZ,181,RO,45.12328,26.95578 94136,Dăscălești,4756,BZ,181,RO,45.40626,27.25039 93909,Dedulești,4756,BZ,181,RO,45.47003,26.96737 94189,Florica,4756,BZ,181,RO,44.90802,26.76627 94228,Fundeni,4756,BZ,181,RO,45.29141,26.88028 94234,Furtunești,4756,BZ,181,RO,45.4594,26.3976 94503,Gălbinaşi,4756,BZ,181,RO,45.08333,26.91667 94515,Găvănești,4756,BZ,181,RO,45.08825,27.06499 94313,Gherăseni,4756,BZ,181,RO,45.02589,26.79128 94305,Ghergheasa,4756,BZ,181,RO,45.26667,27.2 94361,Glodeanu-Sărat,4756,BZ,181,RO,44.86667,26.65 94360,Glodeanu-Siliştea,4756,BZ,181,RO,44.83333,26.8 94442,Grăjdana,4756,BZ,181,RO,45.20865,26.63114 94404,Grebănu,4756,BZ,181,RO,45.38333,26.96667 94405,Greceanca,4756,BZ,181,RO,45.07863,26.54468 94432,Grunji,4756,BZ,181,RO,45.5,26.65 94461,Gura Teghii,4756,BZ,181,RO,45.48333,26.41667 94714,Izvoru,4756,BZ,181,RO,45.19249,26.59154 94719,Izvoru Dulce,4756,BZ,181,RO,45.34178,26.7773 94762,Largu,4756,BZ,181,RO,44.96667,27.15 94799,Limpeziș,4756,BZ,181,RO,44.95357,26.7049 94801,Lipia,4756,BZ,181,RO,45.1397,26.73505 94833,Lopătari,4756,BZ,181,RO,45.48333,26.58333 94838,Luciu,4756,BZ,181,RO,44.96667,27.08333 94858,Lunca,4756,BZ,181,RO,45.00494,27.21335 94866,Lunca Jariștei,4756,BZ,181,RO,45.48231,26.25483 94870,Lunca Priporului,4756,BZ,181,RO,45.43909,26.30869 95240,Măgura,4756,BZ,181,RO,45.26667,26.58333 95216,Mânzăleşti,4756,BZ,181,RO,45.5,26.65 95285,Mărăcineni,4756,BZ,181,RO,45.2,26.8 95274,Mărgăriteşti,4756,BZ,181,RO,45.43333,26.83333 95283,Mărunțișu,4756,BZ,181,RO,45.2861,26.35421 95288,Mătești,4756,BZ,181,RO,45.21339,26.75607 94939,Maxenu,4756,BZ,181,RO,45.05162,26.85498 94950,Merei,4756,BZ,181,RO,45.13333,26.68333 94994,Mihăileşti,4756,BZ,181,RO,44.91667,26.66667 95080,Movila Banului,4756,BZ,181,RO,44.98333,26.68333 95119,Municipiul Buzău,4756,BZ,181,RO,45.15046,26.82136 95174,Municipiul Râmnicu Sãrat,4756,BZ,181,RO,45.38324,27.05162 95207,Murgeşti,4756,BZ,181,RO,45.4,26.88333 95369,Năeni,4756,BZ,181,RO,45.1,26.48333 95325,Nehoiu,4756,BZ,181,RO,45.41667,26.3 95411,Odăile,4756,BZ,181,RO,45.38333,26.55 95551,Oraş Nehoiu,4756,BZ,181,RO,45.41538,26.32089 95576,Oraş Pãtârlagele,4756,BZ,181,RO,45.32035,26.34539 95570,Oraş Pogoanele,4756,BZ,181,RO,44.90555,27.01183 95656,Oreavu,4756,BZ,181,RO,45.36826,27.02301 95694,Padina,4756,BZ,181,RO,44.83333,27.11667 96012,Păltineni,4756,BZ,181,RO,45.39596,26.32334 96018,Pănătău,4756,BZ,181,RO,45.32113,26.39442 95712,Pardoşi,4756,BZ,181,RO,45.36667,26.9 96001,Pârscov,4756,BZ,181,RO,45.28333,26.55 96026,Pătârlagele,4756,BZ,181,RO,45.32081,26.36134 95785,Pietroasele,4756,BZ,181,RO,45.1,26.56667 95787,Pietrosu,4756,BZ,181,RO,45.05928,26.75827 95810,Plevna,4756,BZ,181,RO,45.37815,27.0131 95846,Podgoria,4756,BZ,181,RO,45.41667,27.01667 95855,Pogoanele,4756,BZ,181,RO,44.91667,27.0 95856,Pogonele,4756,BZ,181,RO,45.08645,26.86454 95937,Poşta Câlnău,4756,BZ,181,RO,45.23333,26.85 95934,Potoceni,4756,BZ,181,RO,45.1966,26.77649 95980,Puieștii de Jos,4756,BZ,181,RO,45.40267,27.22013 96045,Racoviţeni,4756,BZ,181,RO,45.36667,26.9 96167,Râmnicelu,4756,BZ,181,RO,45.36381,27.11121 96170,Râmnicu Sărat,4756,BZ,181,RO,45.38333,27.05 96097,Robeasca,4756,BZ,181,RO,45.16667,27.13333 96143,Rubla,4756,BZ,181,RO,45.353,27.07525 96163,Ruşeţu,4756,BZ,181,RO,44.95,27.21667 106003,Săgeata,4756,BZ,181,RO,45.1,26.98333 106004,Săhăteni,4756,BZ,181,RO,45.03333,26.51667 106009,Sălcioara,4756,BZ,181,RO,45.30874,27.17692 106027,Săpoca,4756,BZ,181,RO,45.25,26.75 106034,Săruleşti,4756,BZ,181,RO,45.5,26.75 96282,Scorţoasa,4756,BZ,181,RO,45.36403,26.66116 96289,Scurtești,4756,BZ,181,RO,45.13829,26.90397 96291,Scutelnici,4756,BZ,181,RO,44.85,26.91667 96386,Smeeni,4756,BZ,181,RO,44.98333,26.85 96469,Stâlpu,4756,BZ,181,RO,45.08333,26.71667 96475,Stăncești,4756,BZ,181,RO,45.12665,26.92319 96494,Sudiți,4756,BZ,181,RO,45.2689,26.87183 96599,Tăbărăști,4756,BZ,181,RO,45.07948,26.91943 97108,Ţinteşti,4756,BZ,181,RO,45.06667,26.86667 106131,Topliceni,4756,BZ,181,RO,45.41667,27.0 96645,Ulmeni,4756,BZ,181,RO,45.06667,26.65 96664,Unguriu,4756,BZ,181,RO,45.27933,26.63208 96699,Vadu Paşii,4756,BZ,181,RO,45.16667,26.9 96702,Vadu Sorești,4756,BZ,181,RO,45.315,26.87748 96921,Vâlcele,4756,BZ,181,RO,45.08692,26.63353 96923,Vâlcelele,4756,BZ,181,RO,45.3443,27.34937 96747,Valea Părului,4756,BZ,181,RO,45.36374,26.77706 96750,Valea Râmnicului,4756,BZ,181,RO,45.36395,27.04197 96751,Valea Salciei,4756,BZ,181,RO,45.49622,26.82361 96791,Verneşti,4756,BZ,181,RO,45.21667,26.73333 96836,Vintilă Vodă,4756,BZ,181,RO,45.46667,26.71667 96834,Vintileanca,4756,BZ,181,RO,44.985,26.58005 96838,Vipereşti,4756,BZ,181,RO,45.23333,26.46667 97015,Zărneşti,4756,BZ,181,RO,45.3,26.86667 97017,Zărneștii de Slănic,4756,BZ,181,RO,45.27708,26.75549 96991,Ziduri,4756,BZ,181,RO,45.3,27.08333 97002,Zorești,4756,BZ,181,RO,45.18177,26.70291 89927,Alexandru Odobescu,4732,CL,181,RO,44.26667,27.08333 89975,Aprozi,4732,CL,181,RO,44.26616,26.50213 90085,Belciugatele,4732,CL,181,RO,44.48333,26.43333 90221,Borcea,4732,CL,181,RO,44.33333,27.75 90382,Budeşti,4732,CL,181,RO,44.23472,26.46583 93848,Călăraşi,4732,CL,181,RO,44.2051,27.31356 93874,Căscioarele,4732,CL,181,RO,44.12611,26.46972 90598,Ceacu,4732,CL,181,RO,44.2653,27.25213 90679,Chirnogi,4732,CL,181,RO,44.11667,26.56667 90682,Chiselet,4732,CL,181,RO,44.18333,26.85 90714,Ciocăneşti,4732,CL,181,RO,44.2,27.06667 90779,Coconi,4732,CL,181,RO,44.24769,26.88409 90849,Comuna Alexandru Odobescu,4732,CL,181,RO,44.27254,27.09402 90950,Comuna Belciugatele,4732,CL,181,RO,44.5116,26.44556 91046,Comuna Borcea,4732,CL,181,RO,44.32356,27.71808 91591,Comuna Căscioarele,4732,CL,181,RO,44.12731,26.4696 91322,Comuna Chirnogi,4732,CL,181,RO,44.11064,26.57747 91325,Comuna Chiselet,4732,CL,181,RO,44.16868,26.85603 91345,Comuna Ciocăneşti,4732,CL,181,RO,44.19701,27.0653 91502,Comuna Crivăţ,4732,CL,181,RO,44.19338,26.43846 91527,Comuna Curcani,4732,CL,181,RO,44.20208,26.57632 91535,Comuna Cuza Vodă,4732,CL,181,RO,44.2673,27.27113 91622,Comuna Dichiseni,4732,CL,181,RO,44.23056,27.53466 91660,Comuna Dor Mărunt,4732,CL,181,RO,44.44116,26.99417 91665,Comuna Dorobanţu,4732,CL,181,RO,44.22324,26.95219 91670,Comuna Dragalina,4732,CL,181,RO,44.44479,27.37537 91677,Comuna Dragoş Vodă,4732,CL,181,RO,44.44836,27.15382 91792,Comuna Frăsinet,4732,CL,181,RO,44.30798,26.82463 91786,Comuna Frumuşani,4732,CL,181,RO,44.31716,26.30967 91799,Comuna Fundeni,4732,CL,181,RO,44.38325,26.34968 91980,Comuna Gălbinaşi,4732,CL,181,RO,44.31724,26.41941 91939,Comuna Grădiştea,4732,CL,181,RO,44.21945,27.1616 91959,Comuna Gurbăneşti,4732,CL,181,RO,44.3754,26.69277 92068,Comuna Ileana,4732,CL,181,RO,44.52732,26.68993 92078,Comuna Independenţa,4732,CL,181,RO,44.27922,27.16053 92117,Comuna Jegălia,4732,CL,181,RO,44.29436,27.64286 92144,Comuna Lehliu,4732,CL,181,RO,44.48828,26.82729 92194,Comuna Luica,4732,CL,181,RO,44.24126,26.60071 92217,Comuna Lupşanu,4732,CL,181,RO,44.38075,26.94842 92368,Comuna Mânăstirea,4732,CL,181,RO,44.23953,26.8794 92308,Comuna Mitreni,4732,CL,181,RO,44.16339,26.61454 92315,Comuna Modelu,4732,CL,181,RO,44.19661,27.3896 92425,Comuna Nana,4732,CL,181,RO,44.26771,26.59199 92441,Comuna Nicolae Bălcescu,4732,CL,181,RO,44.44506,26.75839 92556,Comuna Perişoru,4732,CL,181,RO,44.43266,27.50197 92606,Comuna Plătăreşti,4732,CL,181,RO,44.34476,26.38255 92744,Comuna Radovanu,4732,CL,181,RO,44.17671,26.53259 92791,Comuna Roseţi,4732,CL,181,RO,44.21435,27.45085 93109,Comuna Săruleşti,4732,CL,181,RO,44.41289,26.61657 92971,Comuna Sohatu,4732,CL,181,RO,44.35549,26.52161 93539,Comuna Şoldanu,4732,CL,181,RO,44.22675,26.51224 92980,Comuna Spanţov,4732,CL,181,RO,44.1311,26.78896 93547,Comuna Ştefan Cel Mare,4732,CL,181,RO,44.42593,27.63963 93548,Comuna Ştefan Vodă,4732,CL,181,RO,44.33097,27.32505 93233,Comuna Tãmãdãu Mare,4732,CL,181,RO,44.45951,26.57622 93260,Comuna Ulmeni,4732,CL,181,RO,44.14587,26.72793 93265,Comuna Ulmu,4732,CL,181,RO,44.28725,26.91814 93275,Comuna Unirea,4732,CL,181,RO,44.25119,27.58278 93429,Comuna Vâlcelele,4732,CL,181,RO,44.37457,27.16661 93298,Comuna Valea Argovei,4732,CL,181,RO,44.34829,26.7818 93335,Comuna Vasilaţi,4732,CL,181,RO,44.29143,26.42151 93381,Comuna Vlad Ţepeş,4732,CL,181,RO,44.34482,27.08505 93593,Constantin Brâncoveanu,4732,CL,181,RO,44.47842,27.41274 93731,Crivăț,4732,CL,181,RO,44.19338,26.43846 93772,Curcani,4732,CL,181,RO,44.2,26.58333 93784,Cuza Vodă,4732,CL,181,RO,44.26667,27.26667 94103,Dâlga-Gară,4732,CL,181,RO,44.43333,27.05 93933,Dichiseni,4732,CL,181,RO,44.23333,27.53333 93995,Dor Mărunt,4732,CL,181,RO,44.45,26.91667 94001,Dorobanţu,4732,CL,181,RO,44.21667,26.95 94011,Dragalina,4732,CL,181,RO,44.43333,27.31667 94023,Dragoș Vodă,4732,CL,181,RO,44.43333,27.15 94025,Drajna Nouă,4732,CL,181,RO,44.42262,27.38007 94217,Frăsinet,4732,CL,181,RO,44.31667,26.8 94210,Frumuşani,4732,CL,181,RO,44.29611,26.32556 94225,Fundeni,4732,CL,181,RO,44.38333,26.35 94231,Fundulea,4732,CL,181,RO,44.46667,26.51667 94504,Gălbinași,4732,CL,181,RO,44.31724,26.41941 94477,Gâldău,4732,CL,181,RO,44.30544,27.66972 94437,Grădiştea,4732,CL,181,RO,44.23333,27.21667 94472,Gurbăneşti,4732,CL,181,RO,44.38333,26.7 94645,Iezeru,4732,CL,181,RO,44.28617,27.62447 94654,Ileana,4732,CL,181,RO,44.51667,26.66667 94666,Independenţa,4732,CL,181,RO,44.28333,27.15 94725,Jegălia,4732,CL,181,RO,44.3,27.63333 94769,Lehliu,4732,CL,181,RO,44.46667,26.81667 94770,Lehliu-Gară,4732,CL,181,RO,44.43333,26.85 94847,Luica,4732,CL,181,RO,44.23333,26.58333 94887,Lupşanu,4732,CL,181,RO,44.38333,26.9 95217,Mânăstirea,4732,CL,181,RO,44.21667,26.9 94979,Mihai Viteazu,4732,CL,181,RO,44.34864,27.07361 95032,Mitreni,4732,CL,181,RO,44.16667,26.6 95046,Modelu,4732,CL,181,RO,44.19574,27.3872 95134,Municipiul Călăraşi,4732,CL,181,RO,44.2,27.33333 95161,Municipiul Olteniţa,4732,CL,181,RO,44.09204,26.64183 95301,Nana,4732,CL,181,RO,44.26667,26.58333 95307,Negoești,4732,CL,181,RO,44.23065,26.50151 95336,Nicolae Bălcescu,4732,CL,181,RO,44.45,26.76667 95433,Olteniţa,4732,CL,181,RO,44.08333,26.63333 95474,Oraş Budeşti,4732,CL,181,RO,44.24766,26.45099 95520,Oraş Fundulea,4732,CL,181,RO,44.46456,26.49901 95537,Oraş Lehliu Garã,4732,CL,181,RO,44.42178,26.86167 95737,Perişoru,4732,CL,181,RO,44.45,27.55 95834,Plătăreşti,4732,CL,181,RO,44.35,26.36667 95927,Potcoava,4732,CL,181,RO,44.26332,27.13223 95960,Progresu,4732,CL,181,RO,44.35886,26.4611 96055,Radovanu,4732,CL,181,RO,44.2,26.51667 96056,Radu Vodă,4732,CL,181,RO,44.38563,26.92541 96060,Rasa,4732,CL,181,RO,44.21404,27.14717 96217,Răzvani,4732,CL,181,RO,44.42114,26.88092 96118,Roseţi,4732,CL,181,RO,44.21482,27.44848 106028,Săpunari,4732,CL,181,RO,44.50141,26.83665 106033,Săruleşti,4732,CL,181,RO,44.41667,26.65 106035,Sărulești-Gară,4732,CL,181,RO,44.44444,26.6578 96400,Sohatu,4732,CL,181,RO,44.31667,26.5 97068,Şoldanu,4732,CL,181,RO,44.21667,26.51667 96413,Spanţov,4732,CL,181,RO,44.11667,26.78333 96422,Stancea,4732,CL,181,RO,44.1368,26.81226 97132,Ștefan cel Mare,4732,CL,181,RO,44.42639,27.64556 97078,Ştefan Vodă,4732,CL,181,RO,44.31667,27.31667 96501,Sultana,4732,CL,181,RO,44.26062,26.85424 96606,Tămădău Mare,4732,CL,181,RO,44.46667,26.55 96647,Ulmeni,4732,CL,181,RO,44.15,26.71667 96651,Ulmu,4732,CL,181,RO,44.26667,26.91667 96666,Unirea,4732,CL,181,RO,44.26667,27.63333 96922,Vâlcelele,4732,CL,181,RO,44.38834,27.15022 96708,Valea Argovei,4732,CL,181,RO,44.35,26.78333 96749,Valea Roșie,4732,CL,181,RO,44.17755,26.63457 96975,Vărăști,4732,CL,181,RO,44.21244,26.97188 96775,Vasilaţi,4732,CL,181,RO,44.28778,26.4475 96855,Vlad Ţepeş,4732,CL,181,RO,44.35,27.08333 89962,Anina,4753,CS,181,RO,45.07944,21.85694 89995,Armeniş,4753,CS,181,RO,45.2,22.31667 90491,Băile Herculane,4753,CS,181,RO,44.87972,22.4125 90535,Bănia,4753,CS,181,RO,44.89583,22.04472 90555,Băuţar,4753,CS,181,RO,45.51667,22.56667 90113,Berlişte,4753,CS,181,RO,44.98667,21.46306 90117,Berzasca,4753,CS,181,RO,44.64712,21.95428 90118,Berzovia,4753,CS,181,RO,45.42611,21.62806 90178,Bocşa,4753,CS,181,RO,45.37333,21.70917 90217,Bolvașnița,4753,CS,181,RO,45.34558,22.31012 90229,Borlova,4753,CS,181,RO,45.36738,22.352 90254,Bozovici,4753,CS,181,RO,44.93889,22.00167 90292,Brebu,4753,CS,181,RO,45.42028,21.9925 90295,Brebu Nou,4753,CS,181,RO,45.23333,22.13333 90348,Buchin,4753,CS,181,RO,45.36667,22.25 90362,Bucoşniţa,4753,CS,181,RO,45.3,22.26667 90358,Bucova,4753,CS,181,RO,45.50906,22.63731 93792,Câlnic,4753,CS,181,RO,45.33844,21.85754 90575,Caransebeş,4753,CS,181,RO,45.41667,22.21667 90578,Caraşova,4753,CS,181,RO,45.19861,21.87 93867,Cărbunari,4753,CS,181,RO,44.83444,21.74417 90697,Ciclova-Română,4753,CS,181,RO,45.01361,21.71917 90741,Ciuchici,4753,CS,181,RO,44.94139,21.61 90744,Ciudanoviţa,4753,CS,181,RO,45.14472,21.79778 90769,Clocotici,4753,CS,181,RO,45.24495,21.83467 90894,Comuna Armeniş,4753,CS,181,RO,45.21901,22.35198 91233,Comuna Bănia,4753,CS,181,RO,44.872,22.02747 91248,Comuna Băuţar,4753,CS,181,RO,45.53016,22.57848 90971,Comuna Berlişte,4753,CS,181,RO,44.99004,21.4692 90975,Comuna Berzasca,4753,CS,181,RO,44.64845,21.9858 90976,Comuna Berzovia,4753,CS,181,RO,45.40777,21.60233 91043,Comuna Bolvaşniţa,4753,CS,181,RO,45.33634,22.3311 91068,Comuna Bozovici,4753,CS,181,RO,44.97815,21.97965 91092,Comuna Brebu,4753,CS,181,RO,45.40358,22.01842 91094,Comuna Brebu Nou,4753,CS,181,RO,45.23062,22.11809 91127,Comuna Buchin,4753,CS,181,RO,45.34756,22.20877 91137,Comuna Bucoşniţa,4753,CS,181,RO,45.30652,22.26856 91260,Comuna Caraşova,4753,CS,181,RO,45.21545,21.88149 91587,Comuna Cărbunari,4753,CS,181,RO,44.83985,21.74178 91333,Comuna Ciclova Română,4753,CS,181,RO,44.97477,21.71425 91363,Comuna Ciuchici,4753,CS,181,RO,44.93914,21.61419 91366,Comuna Ciudanoviţa,4753,CS,181,RO,45.15308,21.75402 91413,Comuna Constantin Daicoviciu,4753,CS,181,RO,45.51458,22.16374 91418,Comuna Copăcele,4753,CS,181,RO,45.48036,22.0872 91435,Comuna Cornea,4753,CS,181,RO,45.01953,22.31903 91436,Comuna Cornereva,4753,CS,181,RO,45.06968,22.44671 91602,Comuna Dalboşeţ,4753,CS,181,RO,44.84425,21.93495 91649,Comuna Doclin,4753,CS,181,RO,45.3237,21.64622 91652,Comuna Dognecea,4753,CS,181,RO,45.24797,21.72574 91657,Comuna Domaşnea,4753,CS,181,RO,45.07577,22.33693 91747,Comuna Eftimie Murgu,4753,CS,181,RO,44.87744,22.09522 91751,Comuna Ezeriş,4753,CS,181,RO,45.38982,21.91754 91812,Comuna Fârliug,4753,CS,181,RO,45.50025,21.85355 91778,Comuna Forotic,4753,CS,181,RO,45.23159,21.5789 91976,Comuna Gârnic,4753,CS,181,RO,44.75521,21.77168 91879,Comuna Glimboca,4753,CS,181,RO,45.49499,22.32194 91905,Comuna Goruia,4753,CS,181,RO,45.18298,21.77054 91936,Comuna Grădinari,4753,CS,181,RO,45.10488,21.60576 92049,Comuna Iablaniţa,4753,CS,181,RO,44.9748,22.2918 92223,Comuna Lăpuşnicel,4753,CS,181,RO,44.98679,22.2071 92224,Comuna Lăpuşnicu Mare,4753,CS,181,RO,44.88519,21.93321 92209,Comuna Luncaviţa,4753,CS,181,RO,45.0852,22.25352 92214,Comuna Lupac,4753,CS,181,RO,45.25215,21.80835 92241,Comuna Marga,4753,CS,181,RO,45.51489,22.51537 92421,Comuna Măureni,4753,CS,181,RO,45.4317,21.51348 92251,Comuna Mehadia,4753,CS,181,RO,44.95509,22.37181 92252,Comuna Mehadica,4753,CS,181,RO,45.03894,22.26476 92423,Comuna Naidaş,4753,CS,181,RO,44.87584,21.56807 92471,Comuna Obreja,4753,CS,181,RO,45.46873,22.2557 92477,Comuna Ocna De Fier,4753,CS,181,RO,45.34195,21.77503 92711,Comuna Pãltiniş,4753,CS,181,RO,45.40607,22.11233 92559,Comuna Pescari,4753,CS,181,RO,44.67286,21.70092 92644,Comuna Pojejena,4753,CS,181,RO,44.78437,21.53365 92674,Comuna Prigor,4753,CS,181,RO,44.94774,22.12896 92841,Comuna Răcăşdia,4753,CS,181,RO,44.99767,21.58786 92746,Comuna Ramna,4753,CS,181,RO,45.4653,21.72257 92815,Comuna Rusca Montană,4753,CS,181,RO,45.60042,22.43638 92857,Comuna Sacu,4753,CS,181,RO,45.57152,22.11048 92877,Comuna Sasca Montană,4753,CS,181,RO,44.90394,21.70167 92926,Comuna Sicheviţa,4753,CS,181,RO,44.70616,21.8291 92948,Comuna Slatina-Timiş,4753,CS,181,RO,45.26064,22.31807 92969,Comuna Socol,4753,CS,181,RO,44.85334,21.41782 93541,Comuna Şopotu Nou,4753,CS,181,RO,44.7965,21.85135 93229,Comuna Târnova,4753,CS,181,RO,45.33274,21.96849 93141,Comuna Teregova,4753,CS,181,RO,45.14536,22.31192 93150,Comuna Ticvaniu Mare,4753,CS,181,RO,45.15901,21.65596 93175,Comuna Topleţ,4753,CS,181,RO,44.80454,22.39102 93216,Comuna Turnu Rueni,4753,CS,181,RO,45.39767,22.31756 93461,Comuna Văliug,4753,CS,181,RO,45.22643,22.03169 93464,Comuna Vărădia,4753,CS,181,RO,45.07166,21.54036 93345,Comuna Vermeş,4753,CS,181,RO,45.52216,21.62988 93409,Comuna Vrani,4753,CS,181,RO,45.02799,21.48549 93492,Comuna Zăvoi,4753,CS,181,RO,45.49706,22.44346 93480,Comuna Zorlenţu Mare,4753,CS,181,RO,45.46419,21.98155 93594,Constantin Daicoviciu,4753,CS,181,RO,45.55,22.15 93603,Copăcele,4753,CS,181,RO,45.5,22.1 93630,Cornea,4753,CS,181,RO,45.03333,22.31667 93631,Cornereva,4753,CS,181,RO,45.06667,22.41667 93642,Cornuțel,4753,CS,181,RO,45.43489,22.09556 93649,Coronini,4753,CS,181,RO,44.68004,21.68552 93890,Dalboșeț,4753,CS,181,RO,44.86399,21.95854 93975,Doclin,4753,CS,181,RO,45.29694,21.65389 93980,Dognecea,4753,CS,181,RO,45.27417,21.75694 93988,Domaşnea,4753,CS,181,RO,45.08333,22.31667 94139,Eftimie Murgu,4753,CS,181,RO,44.90028,22.09278 94146,Ezeriş,4753,CS,181,RO,45.41083,21.88583 94245,Fârliug,4753,CS,181,RO,45.48833,21.84944 94182,Fizeș,4753,CS,181,RO,45.36403,21.59517 94198,Forotic,4753,CS,181,RO,45.23028,21.5875 94495,Gârnic,4753,CS,181,RO,44.78639,21.79444 94311,Gherteniș,4753,CS,181,RO,45.43315,21.58126 94357,Glimboca,4753,CS,181,RO,45.48333,22.31667 94389,Goruia,4753,CS,181,RO,45.18722,21.77917 94436,Grădinari,4753,CS,181,RO,45.11861,21.59889 94411,Greoni,4753,CS,181,RO,45.08901,21.61731 94613,Iablaniţa,4753,CS,181,RO,44.95028,22.31417 94897,Lăpuşnicel,4753,CS,181,RO,44.98306,22.22694 94898,Lăpuşnicu Mare,4753,CS,181,RO,44.91306,21.94417 94812,Liubcova,4753,CS,181,RO,44.65885,21.89559 94875,Luncaviţa,4753,CS,181,RO,45.08333,22.26667 94883,Lupac,4753,CS,181,RO,45.28,21.81278 94927,Marga,4753,CS,181,RO,45.5,22.51667 95281,Măru,4753,CS,181,RO,45.47586,22.45039 95292,Măureni,4753,CS,181,RO,45.40389,21.5025 94945,Mehadia,4753,CS,181,RO,44.90083,22.36694 94946,Mehadica,4753,CS,181,RO,45.03333,22.26667 95061,Moldova Nouă,4753,CS,181,RO,44.7375,21.66694 95124,Municipiul Caransebeş,4753,CS,181,RO,45.43476,22.20358 95171,Municipiul Reşiţa,4753,CS,181,RO,45.29838,21.91192 95198,Muntele Mic,4753,CS,181,RO,45.38333,22.33333 95298,Naidăș,4753,CS,181,RO,44.88108,21.59061 95387,Obreja,4753,CS,181,RO,45.48333,22.25 95449,Oraş Anina,4753,CS,181,RO,45.07683,21.85213 95483,Oraş Bãile Herculane,4753,CS,181,RO,44.87326,22.41613 95464,Oraş Bocşa,4753,CS,181,RO,45.3757,21.71483 95560,Oraş Oraviţa,4753,CS,181,RO,45.05918,21.70739 95563,Oraş Oţelu Roşu,4753,CS,181,RO,45.51638,22.38135 95446,Oraviţa,4753,CS,181,RO,45.0325,21.68944 95690,Oţelu Roşu,4753,CS,181,RO,45.53333,22.36667 95695,Padina Matei,4753,CS,181,RO,44.75843,21.75067 96013,Păltiniş,4753,CS,181,RO,45.43333,22.15 95757,Petroșnița,4753,CS,181,RO,45.32351,22.2592 95832,Plugova,4753,CS,181,RO,44.9625,22.35864 95897,Pojejena,4753,CS,181,RO,44.77417,21.57917 95951,Prigor,4753,CS,181,RO,44.93833,22.11333 96192,Răcăşdia,4753,CS,181,RO,44.99306,21.61806 96058,Ramna,4753,CS,181,RO,45.43833,21.68833 96091,Reşiţa,4753,CS,181,RO,45.30083,21.88917 96158,Rusca,4753,CS,181,RO,45.14517,22.33859 96159,Rusca Montană,4753,CS,181,RO,45.56741,22.45816 96222,Sacu,4753,CS,181,RO,45.56667,22.11667 96248,Sasca Montană,4753,CS,181,RO,44.88546,21.70915 96334,Sicheviţa,4753,CS,181,RO,44.735,21.84861 96363,Slatina-Timiş,4753,CS,181,RO,45.25,22.28333 96397,Socol,4753,CS,181,RO,44.86083,21.37028 97071,Şopotu Nou,4753,CS,181,RO,44.84194,21.86278 96424,Steierdorf,4753,CS,181,RO,45.06359,21.85216 96596,Târnova,4753,CS,181,RO,45.3425,22.00611 106084,Teregova,4753,CS,181,RO,45.15,22.28333 106095,Ticvaniu Mare,4753,CS,181,RO,45.13528,21.63806 106130,Topleţ,4753,CS,181,RO,44.79722,22.39444 96567,Turnu Ruieni,4753,CS,181,RO,45.3907,22.33557 96711,Valea Bolvașnița,4753,CS,181,RO,44.94602,22.39019 96967,Văliug,4753,CS,181,RO,45.23333,22.03333 96972,Vărădia,4753,CS,181,RO,45.07833,21.54694 96937,Vârciorova,4753,CS,181,RO,45.3271,22.35208 96786,Verendin,4753,CS,181,RO,45.07755,22.23917 96789,Vermeş,4753,CS,181,RO,45.52056,21.65972 96896,Vrani,4753,CS,181,RO,45.03833,21.4925 97022,Zăvoi,4753,CS,181,RO,45.51667,22.41667 97005,Zorlenţu Mare,4753,CS,181,RO,45.45056,21.95611 89894,Aghireșu,4734,CJ,181,RO,46.87209,23.23773 89895,Aghireșu-Fabrici,4734,CJ,181,RO,46.8669,23.27129 89906,Aiton,4734,CJ,181,RO,46.68333,23.73333 89941,Aluniş,4734,CJ,181,RO,47.03333,23.75 89969,Apahida,4734,CJ,181,RO,46.81667,23.75 90014,Aşchileu Dorna,4734,CJ,181,RO,46.98333,23.48333 90022,Baciu,4734,CJ,181,RO,46.8,23.51667 90496,Băişoara,4734,CJ,181,RO,46.58333,23.46667 90091,Beliş,4734,CJ,181,RO,46.65,23.03333 90174,Bobâlna,4734,CJ,181,RO,47.14385,23.64461 90192,Bogdăneşti,4734,CJ,181,RO,46.63333,23.13333 90219,Bonțida,4734,CJ,181,RO,46.9155,23.81475 90239,Borşa,4734,CJ,181,RO,46.93333,23.66667 90430,Buza,4734,CJ,181,RO,46.9,24.15 93825,Căianu,4734,CJ,181,RO,46.7846,23.9185 93826,Căianu Mic,4734,CJ,181,RO,46.78333,23.91667 93851,Călăraşi,4734,CJ,181,RO,46.48333,23.86667 93852,Călăţele,4734,CJ,181,RO,46.76667,23.01667 93854,Cămăraşu,4734,CJ,181,RO,46.78333,24.13333 93797,Câmpia Turzii,4734,CJ,181,RO,46.55,23.88333 93861,Căpuşu Mare,4734,CJ,181,RO,46.78333,23.3 93885,Căşeiu,4734,CJ,181,RO,47.18333,23.86667 93822,Câţcău,4734,CJ,181,RO,47.2,23.78333 93879,Cătina,4734,CJ,181,RO,46.85,24.18333 90602,Ceanu Mare,4734,CJ,181,RO,46.66667,23.95 90669,Chinteni,4734,CJ,181,RO,46.86667,23.53333 90685,Chiuiești,4734,CJ,181,RO,47.29686,23.87553 90740,Ciucea,4734,CJ,181,RO,46.95,22.81667 90758,Ciurila,4734,CJ,181,RO,46.65,23.55 90771,Cluj-Napoca,4734,CJ,181,RO,46.76667,23.6 90790,Cojocna,4734,CJ,181,RO,46.75,23.83333 90830,Comuna Aghireşu,4734,CJ,181,RO,46.87785,23.2532 90836,Comuna Aiton,4734,CJ,181,RO,46.68275,23.71608 90860,Comuna Aluniş,4734,CJ,181,RO,47.05595,23.74365 90876,Comuna Apahida,4734,CJ,181,RO,46.78296,23.74433 90910,Comuna Aşchileu,4734,CJ,181,RO,46.98498,23.48468 90914,Comuna Baciu,4734,CJ,181,RO,46.8201,23.49036 91208,Comuna Băişoara,4734,CJ,181,RO,46.58331,23.39349 90955,Comuna Beliş,4734,CJ,181,RO,46.65246,22.95213 91013,Comuna Bobâlna,4734,CJ,181,RO,47.13319,23.65163 91044,Comuna Bonţida,4734,CJ,181,RO,46.90036,23.82228 91057,Comuna Borşa,4734,CJ,181,RO,46.92402,23.6494 91178,Comuna Buza,4734,CJ,181,RO,46.90492,24.18041 91567,Comuna Căianu,4734,CJ,181,RO,46.8067,23.90883 91578,Comuna Călăraşi,4734,CJ,181,RO,46.49376,23.85359 91579,Comuna Călăţele,4734,CJ,181,RO,46.76282,23.03046 91580,Comuna Cămăraşu,4734,CJ,181,RO,46.78695,24.11369 91564,Comuna Cãpuşu Mare,4734,CJ,181,RO,46.78746,23.23462 91598,Comuna Căşeiu,4734,CJ,181,RO,47.2381,23.86404 91558,Comuna Câţcău,4734,CJ,181,RO,47.23058,23.79331 91594,Comuna Cătina,4734,CJ,181,RO,46.85179,24.16497 91273,Comuna Ceanu Mare,4734,CJ,181,RO,46.65324,23.94586 91316,Comuna Chinteni,4734,CJ,181,RO,46.88822,23.55319 91327,Comuna Chiuieşti,4734,CJ,181,RO,47.32292,23.92016 91362,Comuna Ciucea,4734,CJ,181,RO,46.95981,22.84363 91376,Comuna Ciurila,4734,CJ,181,RO,46.63372,23.53979 91395,Comuna Cojocna,4734,CJ,181,RO,46.72137,23.83949 91438,Comuna Corneşti,4734,CJ,181,RO,47.02811,23.685 91537,Comuna Cuzdrioara,4734,CJ,181,RO,47.18274,23.93248 91731,Comuna Dăbâca,4734,CJ,181,RO,46.96989,23.69456 91756,Comuna Feleacu,4734,CJ,181,RO,46.70345,23.64021 91769,Comuna Fizeşu Gherlii,4734,CJ,181,RO,46.99442,23.94727 91770,Comuna Floreşti,4734,CJ,181,RO,46.73375,23.47861 91780,Comuna Frata,4734,CJ,181,RO,46.69878,24.05385 91967,Comuna Gârbãu,4734,CJ,181,RO,46.84059,23.37049 91835,Comuna Geaca,4734,CJ,181,RO,46.88141,24.06256 91868,Comuna Gilău,4734,CJ,181,RO,46.72607,23.34909 92055,Comuna Iara,4734,CJ,181,RO,46.54268,23.52749 92059,Comuna Iclod,4734,CJ,181,RO,46.99174,23.81618 92112,Comuna Izvoru Crişului,4734,CJ,181,RO,46.84542,23.10025 92120,Comuna Jichişu De Jos,4734,CJ,181,RO,47.12028,23.76788 92132,Comuna Jucu,4734,CJ,181,RO,46.84958,23.80953 92197,Comuna Luna,4734,CJ,181,RO,46.47522,23.94928 92375,Comuna Mãguri-Rãcãtãu,4734,CJ,181,RO,46.63948,23.19485 92371,Comuna Mânăstireni,4734,CJ,181,RO,46.79131,23.09871 92410,Comuna Mărgău,4734,CJ,181,RO,46.75677,22.94429 92411,Comuna Mărişel,4734,CJ,181,RO,46.68422,23.11466 92263,Comuna Mica,4734,CJ,181,RO,47.14436,23.97593 92273,Comuna Mihai Viteazu,4734,CJ,181,RO,46.53477,23.71595 92293,Comuna Mintiu Gherlii,4734,CJ,181,RO,47.07323,23.92731 92314,Comuna Mociu,4734,CJ,181,RO,46.79232,24.02853 92325,Comuna Moldoveneşti,4734,CJ,181,RO,46.4735,23.68905 92431,Comuna Negreni,4734,CJ,181,RO,46.95224,22.75835 92710,Comuna Pãlatca,4734,CJ,181,RO,46.87358,23.98288 92535,Comuna Panticeu,4734,CJ,181,RO,47.04079,23.55639 92564,Comuna Petreştii De Jos,4734,CJ,181,RO,46.58162,23.62191 92602,Comuna Ploscoş,4734,CJ,181,RO,46.66066,23.84322 92640,Comuna Poieni,4734,CJ,181,RO,46.88361,22.86041 92829,Comuna Râșca,4734,CJ,181,RO,46.73082,23.15413 92756,Comuna Recea Cristur,4734,CJ,181,RO,47.12155,23.54554 93074,Comuna Sãcuieu,4734,CJ,181,RO,46.816,22.8601 93050,Comuna Sâncraiu,4734,CJ,181,RO,46.8341,22.99135 93103,Comuna Sănduleşti,4734,CJ,181,RO,46.58887,23.73049 93060,Comuna Sânmărtin,4734,CJ,181,RO,47.00708,24.07336 93062,Comuna Sânpaul,4734,CJ,181,RO,46.89597,23.41731 93119,Comuna Săvădisla,4734,CJ,181,RO,46.6654,23.44808 92925,Comuna Sic,4734,CJ,181,RO,46.93134,23.89615 93023,Comuna Suatu,4734,CJ,181,RO,46.75372,23.9582 93567,Comuna Ţaga,4734,CJ,181,RO,46.951,24.02605 93194,Comuna Tritenii De Jos,4734,CJ,181,RO,46.58735,24.00139 93213,Comuna Tureni,4734,CJ,181,RO,46.63917,23.67684 93270,Comuna Unguraş,4734,CJ,181,RO,47.11667,24.05 93289,Comuna Vad,4734,CJ,181,RO,47.20634,23.71403 93307,Comuna Valea Ierii,4734,CJ,181,RO,46.64086,23.31997 93358,Comuna Viişoara,4734,CJ,181,RO,46.55377,23.93583 93416,Comuna Vultureni,4734,CJ,181,RO,46.95597,23.56762 93605,Copăceni,4734,CJ,181,RO,46.59675,23.73886 93634,Corneşti,4734,CJ,181,RO,47.03333,23.68333 93788,Cuzdrioara,4734,CJ,181,RO,47.16667,23.91667 94115,Dăbâca,4734,CJ,181,RO,46.98333,23.66667 93910,Dej,4734,CJ,181,RO,47.15,23.86667 93931,Dezmir,4734,CJ,181,RO,46.76475,23.72451 94154,Feleacu,4734,CJ,181,RO,46.71667,23.61667 94181,Fizeşu Gherlii,4734,CJ,181,RO,47.01667,23.98333 94185,Floreşti,4734,CJ,181,RO,46.74574,23.49375 94202,Frata,4734,CJ,181,RO,46.7,24.05 94485,Gârbău,4734,CJ,181,RO,46.83305,23.3524 94285,Geaca,4734,CJ,181,RO,46.86667,24.1 94304,Gheorghieni,4734,CJ,181,RO,46.71393,23.68853 94308,Gherla,4734,CJ,181,RO,47.03333,23.91667 94344,Gilău,4734,CJ,181,RO,46.73245,23.36174 94572,Huedin,4734,CJ,181,RO,46.86667,23.05 94624,Iara,4734,CJ,181,RO,46.55,23.51667 94634,Iclod,4734,CJ,181,RO,46.98333,23.8 94718,Izvoru Crişului,4734,CJ,181,RO,46.83333,23.1 94731,Jichişu de Jos,4734,CJ,181,RO,47.11667,23.8 94851,Luna,4734,CJ,181,RO,46.50659,23.91959 94852,Luna de Sus,4734,CJ,181,RO,46.74313,23.43539 94874,Luncani,4734,CJ,181,RO,46.47274,23.95095 95246,Măguri,4734,CJ,181,RO,46.62849,23.10294 95247,Măguri-Răcătău,4734,CJ,181,RO,46.645,23.197 95219,Mânăstireni,4734,CJ,181,RO,46.76667,23.08333 95275,Mărgău,4734,CJ,181,RO,46.75,22.96667 95276,Mărişel,4734,CJ,181,RO,46.65,23.13333 94948,Mera,4734,CJ,181,RO,46.81525,23.45405 94964,Mica,4734,CJ,181,RO,47.13333,23.93333 94980,Mihai Viteazu,4734,CJ,181,RO,46.53333,23.75 95009,Mintiu Gherlii,4734,CJ,181,RO,47.05,23.95 95045,Mociu,4734,CJ,181,RO,46.8,24.03333 95063,Moldoveneşti,4734,CJ,181,RO,46.5,23.65 95130,Municipiul Câmpia Turzii,4734,CJ,181,RO,46.54417,23.88472 95126,Municipiul Cluj-Napoca,4734,CJ,181,RO,46.77791,23.60512 95135,Municipiul Dej,4734,CJ,181,RO,47.12783,23.87504 95146,Municipiul Gherla,4734,CJ,181,RO,47.01431,23.88134 95189,Municipiul Turda,4734,CJ,181,RO,46.57456,23.78574 95314,Negreni,4734,CJ,181,RO,46.95378,22.76347 95347,Nireș,4734,CJ,181,RO,47.11499,23.98092 95394,Ocna Dejului,4734,CJ,181,RO,47.11581,23.85934 95530,Oraş Huedin,4734,CJ,181,RO,46.87204,23.03935 96010,Pădureni,4734,CJ,181,RO,46.59316,24.027 96011,Pălatca,4734,CJ,181,RO,46.85,23.98333 95709,Panticeu,4734,CJ,181,RO,47.03333,23.56667 95748,Petreştii de Jos,4734,CJ,181,RO,46.58333,23.65 95828,Ploscoș,4734,CJ,181,RO,46.64303,23.84663 95891,Poieni,4734,CJ,181,RO,46.9188,22.85826 96179,Râșca,4734,CJ,181,RO,46.73967,23.10625 96205,Răscruci,4734,CJ,181,RO,46.90569,23.7686 96072,Recea Cristur,4734,CJ,181,RO,47.06667,23.53333 96150,Rugășești,4734,CJ,181,RO,47.23147,23.87326 105998,Săcuieu,4734,CJ,181,RO,46.82335,22.88824 96526,Sâncraiu,4734,CJ,181,RO,46.83333,22.98333 106026,Sănduleşti,4734,CJ,181,RO,46.58333,23.71667 96537,Sânmărghita,4734,CJ,181,RO,47.15649,23.99461 96538,Sânmărtin,4734,CJ,181,RO,46.9,23.56667 96539,Sânnicoară,4734,CJ,181,RO,46.7899,23.7257 96542,Sânpaul,4734,CJ,181,RO,46.88333,23.41667 106049,Săvădisla,4734,CJ,181,RO,46.68333,23.45 96333,Sic,4734,CJ,181,RO,46.93333,23.88333 96411,Soporu de Câmpie,4734,CJ,181,RO,46.69618,24.00658 96485,Suatu,4734,CJ,181,RO,46.76667,23.96667 96487,Suceagu,4734,CJ,181,RO,46.78432,23.46511 97099,Ţaga,4734,CJ,181,RO,46.95,24.05 106158,Tritenii de Jos,4734,CJ,181,RO,46.58333,24.0 106159,Tritenii de Sus,4734,CJ,181,RO,46.60544,23.99849 96558,Turda,4734,CJ,181,RO,46.56667,23.78333 96561,Tureni,4734,CJ,181,RO,46.62934,23.7024 96657,Unguraş,4734,CJ,181,RO,47.11667,24.05 96672,Urca,4734,CJ,181,RO,46.54885,23.96187 96694,Vad,4734,CJ,181,RO,47.2,23.75 96704,Vaida-Cămăraș,4734,CJ,181,RO,46.82823,23.94724 96727,Valea Ierii,4734,CJ,181,RO,46.65,23.35 96820,Viişoara,4734,CJ,181,RO,46.55,23.91667 96907,Vultureni,4734,CJ,181,RO,46.96667,23.56667 89872,23 August,4737,CT,181,RO,43.91667,28.58333 89879,Adamclisi,4737,CT,181,RO,44.08333,27.95 89896,Agigea,4737,CT,181,RO,44.09258,28.61079 89917,Albeşti,4737,CT,181,RO,43.8,28.41667 89931,Aliman,4737,CT,181,RO,44.18333,27.85 89950,Amzacea,4737,CT,181,RO,43.95,28.4 90532,Băneasa,4737,CT,181,RO,44.06667,27.7 90546,Bărăganu,4737,CT,181,RO,44.08939,28.4198 90584,Castelu,4737,CT,181,RO,44.25,28.33333 90623,Cerchezu,4737,CT,181,RO,43.81667,28.1 90630,Cernavodă,4737,CT,181,RO,44.33957,28.03273 90678,Chirnogeni,4737,CT,181,RO,43.9,28.23333 90705,Ciobanu,4737,CT,181,RO,44.71759,27.98698 90711,Ciocârlia,4737,CT,181,RO,44.1,28.28333 90712,Ciocârlia de Sus,4737,CT,181,RO,44.11712,28.33402 90775,Cobadin,4737,CT,181,RO,44.08333,28.21667 90787,Cogealac,4737,CT,181,RO,44.55,28.56667 90804,Comana,4737,CT,181,RO,43.9,28.31667 90817,Comuna 23 August,4737,CT,181,RO,43.91938,28.55437 90821,Comuna Adamclisi,4737,CT,181,RO,44.11447,27.9499 90831,Comuna Agigea,4737,CT,181,RO,44.09654,28.62684 90842,Comuna Albeşti,4737,CT,181,RO,43.80863,28.40325 90852,Comuna Aliman,4737,CT,181,RO,44.1843,27.83697 90864,Comuna Amzacea,4737,CT,181,RO,43.95983,28.32122 91242,Comuna Bărăganu,4737,CT,181,RO,44.07931,28.39887 91264,Comuna Castelu,4737,CT,181,RO,44.25846,28.36908 91288,Comuna Cerchezu,4737,CT,181,RO,43.84984,28.08444 91321,Comuna Chirnogeni,4737,CT,181,RO,43.94216,28.22195 91339,Comuna Ciobanu,4737,CT,181,RO,44.71771,27.98904 91344,Comuna Ciocârlia,4737,CT,181,RO,44.11098,28.31161 91384,Comuna Cobadin,4737,CT,181,RO,44.02574,28.16695 91393,Comuna Cogealac,4737,CT,181,RO,44.57661,28.52244 91403,Comuna Comana,4737,CT,181,RO,43.89963,28.35491 91429,Comuna Corbu,4737,CT,181,RO,44.40319,28.67797 91459,Comuna Costineşti,4737,CT,181,RO,43.9478,28.63284 91508,Comuna Crucea,4737,CT,181,RO,44.55046,28.20592 91524,Comuna Cumpăna,4737,CT,181,RO,44.10747,28.51226 91534,Comuna Cuza Voda,4737,CT,181,RO,44.28773,28.31005 91609,Comuna Deleni,4737,CT,181,RO,44.06175,28.02263 93583,Comună Dobromir,4737,CT,181,RO,44.01813,27.83888 91716,Comuna Dumbrăveni,4737,CT,181,RO,43.93127,27.99112 91806,Comuna Fântânele,4737,CT,181,RO,44.61278,28.57655 91975,Comuna Gârliciu,4737,CT,181,RO,44.77933,28.09461 91860,Comuna Ghindăreşti,4737,CT,181,RO,44.6352,28.03193 91935,Comuna Grădina,4737,CT,181,RO,44.52298,28.44846 92017,Comuna Horia,4737,CT,181,RO,44.63551,28.12034 92079,Comuna Independenţa,4737,CT,181,RO,43.9602,28.0629 92081,Comuna Ion Corvin,4737,CT,181,RO,44.10717,27.80268 92094,Comuna Istria,4737,CT,181,RO,44.55487,28.68155 92165,Comuna Limanu,4737,CT,181,RO,43.78024,28.53931 92166,Comuna Lipniţa,4737,CT,181,RO,44.09073,27.56683 92196,Comuna Lumina,4737,CT,181,RO,44.32756,28.54709 92258,Comuna Mereni,4737,CT,181,RO,44.01545,28.33559 92274,Comuna Mihai Viteazu,4737,CT,181,RO,44.63727,28.7046 92277,Comuna Mihail Kogălniceanu,4737,CT,181,RO,44.40479,28.51919 92296,Comuna Mircea Vodă,4737,CT,181,RO,44.30137,28.18647 92440,Comuna Nicolae Bălcescu,4737,CT,181,RO,44.39829,28.35323 92498,Comuna Oltina,4737,CT,181,RO,44.13879,27.64881 92518,Comuna Ostrov,4737,CT,181,RO,44.08152,27.42046 92534,Comuna Pantelimon,4737,CT,181,RO,44.60047,28.36014 92544,Comuna Pecineaga,4737,CT,181,RO,43.88676,28.51012 92570,Comuna Peştera,4737,CT,181,RO,44.18951,28.10722 92607,Comuna Poarta Albă,4737,CT,181,RO,44.21622,28.41904 92748,Comuna Rasova,4737,CT,181,RO,44.25918,27.96962 93082,Comuna Săcele,4737,CT,181,RO,44.48866,28.66382 92867,Comuna Saligny,4737,CT,181,RO,44.28318,28.08929 92873,Comuna Saraiu,4737,CT,181,RO,44.71747,28.14732 92919,Comuna Seimeni,4737,CT,181,RO,44.40184,28.08756 92931,Comuna Siliştea,4737,CT,181,RO,44.42359,28.20967 93225,Comuna Târguşor,4737,CT,181,RO,44.47713,28.38821 93173,Comuna Topalu,4737,CT,181,RO,44.52116,28.07081 93181,Comuna Topraisar,4737,CT,181,RO,44.03126,28.48845 93183,Comuna Tortoman,4737,CT,181,RO,44.34569,28.26562 93220,Comuna Tuzla,4737,CT,181,RO,44.00158,28.63874 93330,Comuna Valu lui Traian,4737,CT,181,RO,44.16386,28.46526 93423,Comuna Vulturu,4737,CT,181,RO,44.64806,28.27294 93595,Constanţa,4737,CT,181,RO,44.18073,28.63432 93618,Corbu,4737,CT,181,RO,44.38333,28.65 93667,Costineşti,4737,CT,181,RO,43.95,28.63333 93741,Crucea,4737,CT,181,RO,44.53333,28.23333 93768,Culmea,4737,CT,181,RO,44.25759,28.46643 93769,Cumpăna,4737,CT,181,RO,44.11667,28.56667 93783,Cuza Vodă,4737,CT,181,RO,44.28773,28.31005 93913,Deleni,4737,CT,181,RO,44.1,28.01667 93962,Dobromir,4737,CT,181,RO,44.01667,27.78333 94004,Dorobanțu,4737,CT,181,RO,44.41035,28.32687 94074,Dulcești,4737,CT,181,RO,43.90506,28.54796 94083,Dumbrăveni,4737,CT,181,RO,43.93333,27.98333 94101,Dunăreni,4737,CT,181,RO,44.20463,27.79058 94137,Eforie Nord,4737,CT,181,RO,44.0653,28.63211 94138,Eforie Sud,4737,CT,181,RO,44.02294,28.64943 94248,Făclia,4737,CT,181,RO,44.28039,28.10583 94239,Fântânele,4737,CT,181,RO,44.61278,28.57655 94494,Gârliciu,4737,CT,181,RO,44.76667,28.08333 94329,Ghindăreşti,4737,CT,181,RO,44.65,28.03333 94433,Grădina,4737,CT,181,RO,44.5552,28.43236 94594,Hârşova,4737,CT,181,RO,44.68555,27.95009 94560,Horia,4737,CT,181,RO,44.63333,28.11667 94664,Independenţa,4737,CT,181,RO,43.96667,28.08333 94673,Ion Corvin,4737,CT,181,RO,44.11667,27.8 94692,Istria,4737,CT,181,RO,44.56667,28.71667 94798,Limanu,4737,CT,181,RO,43.8,28.53333 94802,Lipniţa,4737,CT,181,RO,44.1,27.6 94849,Lumina,4737,CT,181,RO,44.28333,28.56667 94920,Mamaia-Sat,4737,CT,181,RO,44.31159,28.62546 94922,Mangalia,4737,CT,181,RO,43.8,28.58333 94942,Medgidia,4737,CT,181,RO,44.25,28.28333 94952,Mereni,4737,CT,181,RO,44.05,28.36667 94978,Mihai Viteazu,4737,CT,181,RO,44.63333,28.68333 94984,Mihail Kogălniceanu,4737,CT,181,RO,44.36798,28.46 95012,Mircea Vodă,4737,CT,181,RO,44.28333,28.16667 95094,Moșneni,4737,CT,181,RO,43.93487,28.53132 95127,Municipiul Constanţa,4737,CT,181,RO,44.21414,28.61862 95152,Municipiul Mangalia,4737,CT,181,RO,43.85085,28.5978 95154,Municipiul Medgidia,4737,CT,181,RO,44.22795,28.26801 95204,Murfatlar,4737,CT,181,RO,44.18333,28.41667 95377,Năvodari,4737,CT,181,RO,44.31667,28.6 95324,Negru Vodă,4737,CT,181,RO,43.81667,28.2 95337,Nicolae Bălcescu,4737,CT,181,RO,44.38333,28.38333 95348,Nisipari,4737,CT,181,RO,44.25964,28.3984 95364,Nuntași,4737,CT,181,RO,44.53755,28.6488 95434,Oltina,4737,CT,181,RO,44.16667,27.66667 95488,Oraş Bãneasa,4737,CT,181,RO,44.05008,27.7143 95490,Oraş Cernavodã,4737,CT,181,RO,44.34331,28.03694 95514,Oraş Eforie,4737,CT,181,RO,44.04431,28.64529 95532,Oraş Hârşova,4737,CT,181,RO,44.68721,27.94785 95544,Oraş Murfatlar,4737,CT,181,RO,44.1709,28.38185 95555,Oraş Nãvodari,4737,CT,181,RO,44.30511,28.61407 95550,Oraş Negru Vodã,4737,CT,181,RO,43.79534,28.28041 95562,Oraş Ovidiu,4737,CT,181,RO,44.23828,28.5321 95601,Oraş Techirghiol,4737,CT,181,RO,44.05497,28.59539 95676,Ostrov,4737,CT,181,RO,44.11667,27.36667 95686,Ovidiu,4737,CT,181,RO,44.258,28.56083 95700,Palazu Mare,4737,CT,181,RO,44.22902,28.60114 95707,Pantelimon,4737,CT,181,RO,44.54589,28.33094 95708,Pantelimon de Jos,4737,CT,181,RO,44.56667,28.38333 95723,Pecineaga,4737,CT,181,RO,43.9,28.5 95759,Peştera,4737,CT,181,RO,44.18333,28.13333 95769,Piatra,4737,CT,181,RO,44.40492,28.56143 95780,Pietreni,4737,CT,181,RO,44.09609,28.06833 95818,Plopeni,4737,CT,181,RO,43.95089,28.19452 95836,Poarta Albă,4737,CT,181,RO,44.21667,28.4 96061,Rasova,4737,CT,181,RO,44.24616,27.93466 105993,Săcele,4737,CT,181,RO,44.48333,28.65 96235,Saligny,4737,CT,181,RO,44.28111,28.09092 96243,Saraiu,4737,CT,181,RO,44.71667,28.15 96260,Satu Nou,4737,CT,181,RO,44.26918,28.22579 96271,Schitu,4737,CT,181,RO,43.94279,28.62829 96322,Seimeni,4737,CT,181,RO,44.38333,28.06667 96341,Siliştea,4737,CT,181,RO,44.4,28.16667 96348,Siminoc,4737,CT,181,RO,44.16866,28.35277 96590,Târguşor,4737,CT,181,RO,44.45,28.41667 106061,Tariverde,4737,CT,181,RO,44.56268,28.60245 106068,Techirghiol,4737,CT,181,RO,44.05,28.6 106127,Topalu,4737,CT,181,RO,44.54381,28.04575 106139,Topraisar,4737,CT,181,RO,44.01667,28.45 106141,Tortoman,4737,CT,181,RO,44.35,28.21667 96573,Tuzla,4737,CT,181,RO,44.0,28.63333 96721,Valea Dacilor,4737,CT,181,RO,44.19495,28.31776 96769,Valu lui Traian,4737,CT,181,RO,44.16667,28.46667 96815,Viile,4737,CT,181,RO,44.162,27.75769 96828,Viișoara,4737,CT,181,RO,44.07758,28.19424 96913,Vulturu,4737,CT,181,RO,44.65,28.26667 89905,Aita Mare,4754,CV,181,RO,45.96667,25.55 89976,Araci,4754,CV,181,RO,45.81187,25.65482 89981,Arcuș,4754,CV,181,RO,45.90077,25.77673 90058,Baraolt,4754,CV,181,RO,46.07514,25.60029 90060,Barcani,4754,CV,181,RO,45.7,26.08333 90556,Băţanii Mari,4754,CV,181,RO,46.08333,25.68333 90087,Belin,4754,CV,181,RO,45.93333,25.56667 90088,Belin-Vale,4754,CV,181,RO,45.93237,25.60878 90155,Bixad,4754,CV,181,RO,46.1,25.86667 90183,Bodoc,4754,CV,181,RO,45.95,25.85 90233,Boroşneu Mare,4754,CV,181,RO,45.81667,26.0 90327,Brăduţ,4754,CV,181,RO,46.13333,25.61667 90276,Brateş,4754,CV,181,RO,45.83333,26.06667 90304,Breţcu,4754,CV,181,RO,46.05,26.3 93857,Căpeni,4754,CV,181,RO,46.04111,25.57858 90587,Catalina,4754,CV,181,RO,45.96667,26.15 90629,Cernat,4754,CV,181,RO,45.95,26.03333 90663,Chichiş,4754,CV,181,RO,45.78333,25.8 90809,Comandău,4754,CV,181,RO,45.76667,26.26667 90835,Comuna Aita Mare,4754,CV,181,RO,45.97126,25.58824 90885,Comuna Arcuş,4754,CV,181,RO,45.90077,25.77673 90936,Comuna Barcani,4754,CV,181,RO,45.70483,26.06393 91249,Comuna Băţani,4754,CV,181,RO,46.09167,25.7193 90952,Comuna Belin,4754,CV,181,RO,45.93361,25.59126 91001,Comuna Bixad,4754,CV,181,RO,46.10225,25.86344 91019,Comuna Bodoc,4754,CV,181,RO,45.9619,25.84149 91053,Comuna Boroşneu Mare,4754,CV,181,RO,45.8101,26.01568 91116,Comuna Brăduţ,4754,CV,181,RO,46.12574,25.60329 91084,Comuna Brateş,4754,CV,181,RO,45.83992,26.07887 91100,Comuna Breţcu,4754,CV,181,RO,46.04444,26.32887 91266,Comuna Catalina,4754,CV,181,RO,45.93736,26.1225 93581,Comună Cernat,4754,CV,181,RO,45.9665,26.01955 91312,Comuna Chichiş,4754,CV,181,RO,45.76781,25.81378 91406,Comuna Comandău,4754,CV,181,RO,45.76179,26.27776 91603,Comuna Dalnic,4754,CV,181,RO,45.92242,25.98741 91647,Comuna Dobârlău,4754,CV,181,RO,45.7341,25.88112 91750,Comuna Estelnic,4754,CV,181,RO,46.12537,26.20544 91841,Comuna Ghelinţa,4754,CV,181,RO,45.93491,26.22068 91851,Comuna Ghidfalău,4754,CV,181,RO,45.89956,25.86399 92036,Comuna Hăghig,4754,CV,181,RO,45.85362,25.59501 92071,Comuna Ilieni,4754,CV,181,RO,45.80054,25.76436 92149,Comuna Lemnia,4754,CV,181,RO,46.07078,26.27277 92233,Comuna Malnaş,4754,CV,181,RO,46.01995,25.82705 92256,Comuna Mereni,4754,CV,181,RO,46.08496,26.2346 92266,Comuna Micfalău,4754,CV,181,RO,46.05342,25.83737 92311,Comuna Moacşa,4754,CV,181,RO,45.87883,25.9527 92491,Comuna Ojdula,4754,CV,181,RO,45.97871,26.24773 92523,Comuna Ozun,4754,CV,181,RO,45.78331,25.8826 92621,Comuna Poian,4754,CV,181,RO,46.07731,26.17423 92757,Comuna Reci,4754,CV,181,RO,45.81913,25.95552 93070,Comuna Sânzieni,4754,CV,181,RO,46.06458,26.1179 92946,Comuna Sita Buzăului,4754,CV,181,RO,45.61959,26.10621 93214,Comuna Turia,4754,CV,181,RO,46.02927,26.03953 93426,Comuna Vâlcele,4754,CV,181,RO,45.81736,25.67925 93301,Comuna Valea Crişului,4754,CV,181,RO,45.92372,25.78483 93311,Comuna Valea Mare,4754,CV,181,RO,45.76389,26.01435 93442,Comuna Vârghiş,4754,CV,181,RO,46.12737,25.55901 93483,Comuna Zăbala,4754,CV,181,RO,45.89141,26.13251 93468,Comuna Zagon,4754,CV,181,RO,45.77961,26.12897 93680,Covasna,4754,CV,181,RO,45.85,26.18333 93891,Dalnic,4754,CV,181,RO,45.92242,25.98741 93973,Dobârlău,4754,CV,181,RO,45.73333,25.88333 93945,Doboșeni,4754,CV,181,RO,46.12431,25.59347 94145,Estelnic,4754,CV,181,RO,46.10445,26.21262 94170,Filia,4754,CV,181,RO,46.14409,25.6214 94190,Floroaia,4754,CV,181,RO,45.69497,26.01563 94299,Ghelinţa,4754,CV,181,RO,45.95,26.23333 94316,Ghidfalău,4754,CV,181,RO,45.9,25.85 94597,Hăghig,4754,CV,181,RO,45.83333,25.58333 94530,Herculian,4754,CV,181,RO,46.13402,25.70977 94657,Ilieni,4754,CV,181,RO,45.8,25.76667 97026,Întorsura Buzăului,4754,CV,181,RO,45.68333,26.03333 94776,Lemnia,4754,CV,181,RO,46.05,26.26667 94879,Lunga,4754,CV,181,RO,46.01822,26.21208 94913,Malnaş,4754,CV,181,RO,46.01667,25.83333 94951,Mereni,4754,CV,181,RO,46.07924,26.23597 94968,Micfalău,4754,CV,181,RO,46.05342,25.83737 95038,Moacşa,4754,CV,181,RO,45.86667,25.96667 95180,Municipiul Sfântu Gheorghe,4754,CV,181,RO,45.83806,25.7973 95193,Municipiul Târgu Secuiesc,4754,CV,181,RO,46.00589,26.17155 95421,Ojdula,4754,CV,181,RO,45.98333,26.25 95458,Oraş Baraolt,4754,CV,181,RO,46.0625,25.60505 95499,Oraş Covasna,4754,CV,181,RO,45.83527,26.16637 95628,Oraş Întorsura Buzãului,4754,CV,181,RO,45.68539,26.0126 95687,Ozun,4754,CV,181,RO,45.8,25.85 96019,Păpăuți,4754,CV,181,RO,45.78333,26.13333 95859,Poian,4754,CV,181,RO,46.06667,26.15 96073,Reci,4754,CV,181,RO,45.85,25.93333 105982,Sânzieni,4754,CV,181,RO,46.05,26.13333 96330,Sfântu Gheorghe,4754,CV,181,RO,45.86667,25.78333 96360,Sita Buzăului,4754,CV,181,RO,45.65,26.06667 96588,Târgu Secuiesc,4754,CV,181,RO,46.0,26.13333 96562,Turia,4754,CV,181,RO,46.03333,26.05 96918,Vâlcele,4754,CV,181,RO,45.85,25.68333 96717,Valea Crişului,4754,CV,181,RO,45.91667,25.76667 96735,Valea Mare,4754,CV,181,RO,45.76667,26.0 96941,Vârghiş,4754,CV,181,RO,46.13333,25.53333 97008,Zăbala,4754,CV,181,RO,45.9,26.18333 96979,Zagon,4754,CV,181,RO,45.76667,26.11667 89886,Adânca,4745,DB,181,RO,44.9225,25.61005 89966,Aninoasa,4745,DB,181,RO,44.96667,25.43333 90481,Bădeni,4745,DB,181,RO,45.15272,25.40263 90440,Bâldana,4745,DB,181,RO,44.603,25.77836 90509,Băleni Sârbi,4745,DB,181,RO,44.81667,25.63333 90516,Bălteni,4745,DB,181,RO,44.66488,25.69339 90538,Bărbuleţu,4745,DB,181,RO,45.13333,25.3 90122,Bezdead,4745,DB,181,RO,45.15,25.51667 90136,Bilciureşti,4745,DB,181,RO,44.73333,25.8 90335,Brăneşti,4745,DB,181,RO,45.03333,25.41667 90269,Braniştea,4745,DB,181,RO,44.68333,25.58333 90301,Brezoaele,4745,DB,181,RO,44.58333,25.73333 90302,Brezoaia,4745,DB,181,RO,44.55683,25.78527 90312,Broșteni,4745,DB,181,RO,44.72053,25.50935 90354,Buciumeni,4745,DB,181,RO,45.15,25.45 90366,Bucşani,4745,DB,181,RO,44.86667,25.65 90412,Bungetu,4745,DB,181,RO,44.84323,25.53816 90427,Butimanu,4745,DB,181,RO,44.68333,25.9 93808,Cândeşti Vale,4745,DB,181,RO,45.08333,25.21667 93860,Căprioru,4745,DB,181,RO,44.98236,25.28116 90593,Cazaci,4745,DB,181,RO,44.80152,25.55405 90713,Ciocănari,4745,DB,181,RO,44.6977,25.97717 90715,Ciocăneşti,4745,DB,181,RO,44.6,25.85 90789,Cojasca,4745,DB,181,RO,44.71667,25.85 90791,Colacu,4745,DB,181,RO,44.66895,25.75881 90813,Comişani,4745,DB,181,RO,44.88333,25.58333 90874,Comuna Aninoasa,4745,DB,181,RO,44.96863,25.43802 91214,Comuna Băleni Sârbi,4745,DB,181,RO,44.82017,25.64756 91237,Comuna Bărbuleţu,4745,DB,181,RO,45.14196,25.29771 90980,Comuna Bezdead,4745,DB,181,RO,45.13705,25.49476 90989,Comuna Bilciureşti,4745,DB,181,RO,44.7477,25.80621 91122,Comuna Brăneşti,4745,DB,181,RO,45.0343,25.42253 91079,Comuna Braniştea,4745,DB,181,RO,44.68134,25.58387 91099,Comuna Brezoaele,4745,DB,181,RO,44.56647,25.76664 91130,Comuna Buciumeni,4745,DB,181,RO,45.15902,25.46392 91140,Comuna Bucşani,4745,DB,181,RO,44.8527,25.64561 91175,Comuna Butimanu,4745,DB,181,RO,44.6868,25.90535 91548,Comuna Cândeşti Vale,4745,DB,181,RO,45.0666,25.20455 91346,Comuna Ciocăneşti,4745,DB,181,RO,44.62136,25.8449 91385,Comuna Cobia de Sus,4745,DB,181,RO,44.81197,25.33463 91394,Comuna Cojasca,4745,DB,181,RO,44.71855,25.85566 91408,Comuna Comişani,4745,DB,181,RO,44.87528,25.57009 91414,Comuna Conţeşti,4745,DB,181,RO,44.67875,25.6733 91426,Comuna Corbii Mari,4745,DB,181,RO,44.55671,25.4806 91444,Comuna Cornăţelu,4745,DB,181,RO,44.7308,25.6864 91439,Comuna Corneşti,4745,DB,181,RO,44.77121,25.88722 91458,Comuna Costeştii din Vale,4745,DB,181,RO,44.64096,25.50153 91515,Comuna Crângurile,4745,DB,181,RO,44.74277,25.24062 91489,Comuna Crevedia,4745,DB,181,RO,44.59787,25.9226 91745,Comuna Dărmăneşti,4745,DB,181,RO,44.92476,25.76145 91632,Comuna Dobra,4745,DB,181,RO,44.79586,25.71297 91653,Comuna Doiceşti,4745,DB,181,RO,44.99144,25.40073 91671,Comuna Dragodana,4745,DB,181,RO,44.75892,25.38433 91673,Comuna Dragomireşti,4745,DB,181,RO,44.89354,25.36611 91767,Comuna Finta,4745,DB,181,RO,44.7937,25.79926 91883,Comuna Glodeni,4745,DB,181,RO,45.0193,25.45913 91947,Comuna Gura Foii,4745,DB,181,RO,44.75712,25.29852 91949,Comuna Gura Ocniţei,4745,DB,181,RO,44.93449,25.57419 91956,Comuna Gura Şuţii,4745,DB,181,RO,44.76161,25.47575 92027,Comuna Hulubeşti,4745,DB,181,RO,44.84204,25.26253 92047,Comuna I. L. Caragiale,4745,DB,181,RO,44.92189,25.68409 92063,Comuna Iedera,4745,DB,181,RO,45.03333,25.63333 92188,Comuna Lucieni,4745,DB,181,RO,44.84766,25.4199 92190,Comuna Ludeşti,4745,DB,181,RO,44.90396,25.22557 92213,Comuna Lunguleţu,4745,DB,181,RO,44.61601,25.6434 92237,Comuna Malu cu Flori,4745,DB,181,RO,45.15617,25.22589 92403,Comuna Măneşti,4745,DB,181,RO,44.95033,25.30034 92420,Comuna Mătăsaru,4745,DB,181,RO,44.67584,25.44365 92318,Comuna Mogoşani,4745,DB,181,RO,44.68319,25.38774 92332,Comuna Moroeni,4745,DB,181,RO,45.23406,25.44468 92333,Comuna Morteni,4745,DB,181,RO,44.66221,25.25208 92352,Comuna Moţãieni,4745,DB,181,RO,45.10631,25.41045 92445,Comuna Niculeşti,4745,DB,181,RO,44.68664,25.9635 92454,Comuna Nucet,4745,DB,181,RO,44.80328,25.55434 92479,Comuna Ocniţa,4745,DB,181,RO,44.99011,25.55591 92481,Comuna Odobeşti,4745,DB,181,RO,44.59883,25.54082 92557,Comuna Perşinari,4745,DB,181,RO,44.80185,25.4988 92563,Comuna Petreşti,4745,DB,181,RO,44.66761,25.31458 92576,Comuna Pietrari,4745,DB,181,RO,45.10034,25.29356 92583,Comuna Pietroşiţa,4745,DB,181,RO,45.18773,25.42828 92623,Comuna Poiana,4745,DB,181,RO,44.57429,25.67684 92665,Comuna Potlogi,4745,DB,181,RO,44.57362,25.60164 92681,Comuna Produleşti,4745,DB,181,RO,44.70336,25.50466 92690,Comuna Pucheni,4745,DB,181,RO,45.18211,25.26926 92732,Comuna Raciu,4745,DB,181,RO,44.81644,25.4346 92847,Comuna Răscăeţi,4745,DB,181,RO,44.5976,25.25621 92825,Comuna Râu Alb,4745,DB,181,RO,45.1485,25.33714 92833,Comuna Rãzvad,4745,DB,181,RO,44.93588,25.52914 92811,Comuna Runcu,4745,DB,181,RO,45.17702,25.38533 93094,Comuna Sălcioara,4745,DB,181,RO,44.73645,25.57411 93504,Comuna Şelaru,4745,DB,181,RO,44.48705,25.31294 92957,Comuna Slobozia Moara,4745,DB,181,RO,44.59865,25.73126 93544,Comuna Şotânga,4745,DB,181,RO,44.98544,25.38254 93241,Comuna Tărtăşeşti,4745,DB,181,RO,44.57674,25.82134 93244,Comuna Tătărani,4745,DB,181,RO,45.00067,25.27998 93258,Comuna Ulieşti,4745,DB,181,RO,44.6016,25.4077 93262,Comuna Ulmi,4745,DB,181,RO,44.8903,25.44376 93452,Comuna Văcăreşti,4745,DB,181,RO,44.84041,25.51989 93309,Comuna Valea Lungă,4745,DB,181,RO,45.06978,25.56993 93313,Comuna Valea Mare,4745,DB,181,RO,44.79383,25.23292 93460,Comuna Văleni-Dâmboviţa,4745,DB,181,RO,45.17593,25.17678 93440,Comuna Vârfuri,4745,DB,181,RO,45.09555,25.50712 93376,Comuna Vişina,4745,DB,181,RO,44.60194,25.35218 93379,Comuna Vişineşti,4745,DB,181,RO,45.11256,25.56815 93387,Comuna Vlădeni,4745,DB,181,RO,44.8755,25.77318 93398,Comuna Voineşti,4745,DB,181,RO,45.06986,25.26072 93413,Comuna Vulcana Băi,4745,DB,181,RO,45.0791,25.38219 93414,Comuna Vulcana-Pandele,4745,DB,181,RO,45.02165,25.39888 93597,Conțești,4745,DB,181,RO,44.68518,25.63879 93615,Corbii Mari,4745,DB,181,RO,44.55,25.5 93643,Cornăţelu,4745,DB,181,RO,44.75,25.66667 93635,Corneşti,4745,DB,181,RO,44.78333,25.86667 93666,Costeștii din Deal,4745,DB,181,RO,44.68132,25.48938 93662,Costeştii din Vale,4745,DB,181,RO,44.65,25.48333 93749,Crângurile de Sus,4745,DB,181,RO,44.76667,25.23333 93710,Crevedia,4745,DB,181,RO,44.6,25.93333 93738,Croitori,4745,DB,181,RO,44.57512,25.41356 93739,Crovu,4745,DB,181,RO,44.58947,25.53684 94104,Dâmbovicioara,4745,DB,181,RO,44.67569,25.55374 94132,Dărmăneşti,4745,DB,181,RO,44.91667,25.78333 94113,Dârza,4745,DB,181,RO,44.60175,25.94956 93903,Dealu Frumos,4745,DB,181,RO,45.18575,25.41329 93904,Dealu Mare,4745,DB,181,RO,45.16072,25.44871 93907,Decindeni,4745,DB,181,RO,44.91234,25.32607 93948,Dobra,4745,DB,181,RO,44.78333,25.71667 93981,Doiceşti,4745,DB,181,RO,44.98333,25.4 94055,Drăgăești Ungureni,4745,DB,181,RO,44.94557,25.31048 94012,Dragodana,4745,DB,181,RO,44.73333,25.35 94013,Dragodănești,4745,DB,181,RO,45.05552,25.23631 94018,Dragomireşti,4745,DB,181,RO,44.91667,25.33333 94243,Fântânele,4745,DB,181,RO,44.71667,25.86667 94164,Fieni,4745,DB,181,RO,45.13333,25.41667 94166,Fierbinți,4745,DB,181,RO,44.50747,25.2876 94179,Finta Mare,4745,DB,181,RO,44.8,25.8 94496,Găeşti,4745,DB,181,RO,44.71667,25.31667 94288,Gemenea Brătulești,4745,DB,181,RO,45.10839,25.23155 94296,Gheboaia,4745,DB,181,RO,44.80203,25.74875 94297,Gheboieni,4745,DB,181,RO,44.98701,25.3067 94330,Ghinești,4745,DB,181,RO,44.74774,25.553 94336,Ghirdoveni,4745,DB,181,RO,44.94059,25.67368 94359,Glod,4745,DB,181,RO,45.24163,25.44994 94362,Glodeni,4745,DB,181,RO,45.01667,25.46667 94386,Gorgota,4745,DB,181,RO,44.97626,25.50837 94407,Greci,4745,DB,181,RO,44.66132,25.34346 94424,Grozăvești,4745,DB,181,RO,44.56882,25.4536 94449,Gulia,4745,DB,181,RO,44.54687,25.87304 94453,Gura Foii,4745,DB,181,RO,44.75,25.28333 94456,Gura Ocniței,4745,DB,181,RO,44.94166,25.56846 94467,Gura Şuţii,4745,DB,181,RO,44.75,25.51667 94464,Gura Vulcanei,4745,DB,181,RO,45.02442,25.39596 94595,Hăbeni,4745,DB,181,RO,44.85629,25.62873 94573,Hulubeşti,4745,DB,181,RO,44.83333,25.23333 94612,I. L. Caragiale,4745,DB,181,RO,44.90963,25.70251 94626,Iazu,4745,DB,181,RO,44.71764,25.83119 94631,Ibrianu,4745,DB,181,RO,44.77509,25.84375 94641,Iedera de Jos,4745,DB,181,RO,45.03333,25.63333 94642,Iedera de Sus,4745,DB,181,RO,45.04174,25.63084 94679,Ionești,4745,DB,181,RO,44.69374,25.2778 94705,Izvoarele,4745,DB,181,RO,45.03333,25.26667 94889,Lăculețe,4745,DB,181,RO,45.01837,25.43108 94765,Lazuri,4745,DB,181,RO,44.87859,25.54964 94837,Lucieni,4745,DB,181,RO,44.85,25.43333 94842,Ludeşti,4745,DB,181,RO,44.86667,25.23333 94856,Lunca,4745,DB,181,RO,45.20022,25.44351 94882,Lunguleţu,4745,DB,181,RO,44.61667,25.65 94919,Malu cu Flori,4745,DB,181,RO,45.15,25.2 95259,Măneşti,4745,DB,181,RO,44.96667,25.28333 95266,Mărcești,4745,DB,181,RO,44.80537,25.70951 95273,Mărginenii de Sus,4745,DB,181,RO,44.93172,25.75228 95291,Mătăsaru,4745,DB,181,RO,44.71667,25.41667 94938,Mavrodin,4745,DB,181,RO,44.64919,25.71731 94998,Mija,4745,DB,181,RO,44.91356,25.67585 95052,Mogoşani,4745,DB,181,RO,44.68333,25.4 95071,Moreni,4745,DB,181,RO,44.98301,25.64415 95072,Moroeni,4745,DB,181,RO,45.21667,25.43333 95073,Morteni,4745,DB,181,RO,44.66667,25.23333 95097,Moțăieni,4745,DB,181,RO,45.1,25.41667 95158,Municipiul Moreni,4745,DB,181,RO,44.9801,25.64381 95191,Municipiul Târgovişte,4745,DB,181,RO,44.92616,25.45498 95342,Niculești,4745,DB,181,RO,44.68266,25.94221 95359,Nucet,4745,DB,181,RO,44.78333,25.55 95400,Ocniţa,4745,DB,181,RO,44.98333,25.55 95405,Odaia Turcului,4745,DB,181,RO,44.69777,25.45082 95406,Odobeşti,4745,DB,181,RO,44.61667,25.56667 95515,Oraş Fieni,4745,DB,181,RO,45.13054,25.41094 95526,Oraş Gãeşti,4745,DB,181,RO,44.72003,25.3204 95574,Oraş Pucioasa,4745,DB,181,RO,45.0757,25.43335 95582,Oraş Rãcari,4745,DB,181,RO,44.66037,25.74703 95604,Oraş Titu,4745,DB,181,RO,44.65747,25.55549 95741,Perșinari,4745,DB,181,RO,44.80185,25.4988 95746,Petreşti,4745,DB,181,RO,44.65,25.33333 95774,Picior de Munte,4745,DB,181,RO,44.78247,25.39047 95776,Pietrari,4745,DB,181,RO,45.09377,25.29289 95790,Pietroşiţa,4745,DB,181,RO,45.18333,25.43333 95801,Pitaru,4745,DB,181,RO,44.59061,25.58407 95865,Poiana,4745,DB,181,RO,44.56667,25.68333 95933,Potlogi,4745,DB,181,RO,44.55,25.58333 95949,Priboiu,4745,DB,181,RO,45.03006,25.2579 95959,Produleşti,4745,DB,181,RO,44.7,25.5 95972,Pucheni,4745,DB,181,RO,45.18333,25.28333 95975,Pucioasa,4745,DB,181,RO,45.07807,25.43232 96182,Răcari,4745,DB,181,RO,44.63333,25.73333 96039,Raciu,4745,DB,181,RO,44.81791,25.44106 96047,Racovița,4745,DB,181,RO,44.83927,25.62082 96172,Râncăciov,4745,DB,181,RO,44.88872,25.35778 96206,Răscăeți,4745,DB,181,RO,44.59221,25.2699 96174,Râu Alb de Jos,4745,DB,181,RO,45.13653,25.34745 96216,Răzvad,4745,DB,181,RO,44.93333,25.53333 96111,Românești,4745,DB,181,RO,44.56667,25.61667 96153,Runcu,4745,DB,181,RO,45.18333,25.38333 105996,Săcueni,4745,DB,181,RO,44.91077,25.57223 106011,Sălcioara,4745,DB,181,RO,44.71667,25.58333 106016,Sălcuța,4745,DB,181,RO,44.64374,25.58103 106040,Săteni,4745,DB,181,RO,44.97129,25.41683 96266,Scheiu de Jos,4745,DB,181,RO,44.9346,25.19986 96267,Scheiu de Sus,4745,DB,181,RO,44.95602,25.19317 97035,Şelaru,4745,DB,181,RO,44.47667,25.29997 96326,Serdanu,4745,DB,181,RO,44.62732,25.63124 96376,Slobozia Moara,4745,DB,181,RO,44.6,25.71667 97074,Şotânga,4745,DB,181,RO,44.98333,25.36667 96414,Speriețeni,4745,DB,181,RO,44.76611,25.45223 96512,Suseni Socetu,4745,DB,181,RO,44.75618,25.79829 96580,Târgovişte,4745,DB,181,RO,44.92543,25.4567 96613,Tărtăşeşti,4745,DB,181,RO,44.57722,25.81278 96617,Tătărani,4745,DB,181,RO,45.0,25.26667 106074,Teiș,4745,DB,181,RO,44.96285,25.4028 106091,Tețcoiu,4745,DB,181,RO,44.68188,25.43846 106110,Titu,4745,DB,181,RO,44.65,25.53333 96643,Ulieşti,4745,DB,181,RO,44.58333,25.41667 96649,Ulmi,4745,DB,181,RO,44.9,25.5 96658,Ungureni,4745,DB,181,RO,44.57804,25.50006 96686,Urziceanca,4745,DB,181,RO,44.63052,25.8424 96952,Văcăreşti,4745,DB,181,RO,44.85,25.48333 96728,Valea Leurzii,4745,DB,181,RO,45.16186,25.48533 96730,Valea Lungă Ogrea,4745,DB,181,RO,45.05978,25.59024 96731,Valea Lungă-Cricov,4745,DB,181,RO,45.06528,25.58793 96734,Valea Mare,4745,DB,181,RO,44.78333,25.23333 96765,Valea Voievozilor,4745,DB,181,RO,44.93805,25.48518 96963,Văleni-Dâmbovița,4745,DB,181,RO,45.16667,25.18333 96939,Vârfuri,4745,DB,181,RO,45.1,25.51667 96813,Viforâta,4745,DB,181,RO,44.96011,25.45796 96826,Viișoara,4745,DB,181,RO,44.88116,25.4273 96849,Vişina,4745,DB,181,RO,44.58333,25.33333 96851,Vişineşti,4745,DB,181,RO,45.1,25.55 96845,Vizurești,4745,DB,181,RO,44.6404,25.8074 96861,Vlădeni,4745,DB,181,RO,44.8755,25.77318 96871,Vlăsceni,4745,DB,181,RO,44.58522,25.59931 96879,Voineşti,4745,DB,181,RO,45.06667,25.25 96902,Vulcana Băi,4745,DB,181,RO,45.07982,25.38219 96903,Vulcana de Sus,4745,DB,181,RO,45.10125,25.35826 96904,Vulcana-Pandele,4745,DB,181,RO,45.01558,25.39319 97023,Zăvoiu,4745,DB,181,RO,44.66038,25.4035 96992,Zidurile,4745,DB,181,RO,44.58176,25.55458 89890,Afumaţi,4742,DJ,181,RO,44.0,23.46667 89938,Almăj,4742,DJ,181,RO,44.45,23.71667 89952,Amărăştii de Jos,4742,DJ,181,RO,43.95,24.16667 89953,Amărăştii de Sus,4742,DJ,181,RO,43.98333,24.15 89972,Apele Vii,4742,DJ,181,RO,44.06667,24.06667 89987,Argetoaia,4742,DJ,181,RO,44.51667,23.36667 90484,Bădoși,4742,DJ,181,RO,44.14723,23.88974 90494,Băileşti,4742,DJ,181,RO,44.01667,23.35 90442,Bâlta,4742,DJ,181,RO,44.53564,23.47019 90446,Bârca,4742,DJ,181,RO,43.96667,23.61667 90067,Basarabi,4742,DJ,181,RO,44.00561,23.00915 90076,Bechet,4742,DJ,181,RO,43.78188,23.95706 90146,Bistreț,4742,DJ,181,RO,43.9,23.5 90249,Botoşeşti-Paia,4742,DJ,181,RO,44.4,23.26667 90250,Boureni,4742,DJ,181,RO,44.01589,23.43393 90258,Brabeți,4742,DJ,181,RO,43.96098,24.01339 90259,Brabova,4742,DJ,181,RO,44.36667,23.43333 90324,Brădeşti,4742,DJ,181,RO,44.48333,23.63333 90265,Braloştiţa,4742,DJ,181,RO,44.5,23.51667 90277,Bratovoești,4742,DJ,181,RO,44.13333,23.9 90282,Breasta,4742,DJ,181,RO,44.33333,23.68333 90360,Bucovăţ,4742,DJ,181,RO,44.3,23.75 90405,Bulzeşti,4742,DJ,181,RO,44.53333,23.88333 90562,Calafat,4742,DJ,181,RO,43.99069,22.93328 93850,Călăraşi,4742,DJ,181,RO,43.8,24.05 90565,Calopăr,4742,DJ,181,RO,44.16502,23.7606 90577,Caraula,4742,DJ,181,RO,44.18333,23.25 93809,Cârcea,4742,DJ,181,RO,44.26917,23.90007 93817,Cârna,4742,DJ,181,RO,43.88613,23.60153 90581,Carpen,4742,DJ,181,RO,44.33333,23.25 90585,Castranova,4742,DJ,181,RO,44.11667,24.01667 90586,Castrele Traiane,4742,DJ,181,RO,44.22865,23.13921 90589,Catane,4742,DJ,181,RO,43.92671,23.41178 90612,Celaru,4742,DJ,181,RO,44.05,24.13333 90644,Cerăt,4742,DJ,181,RO,44.06667,23.66667 90639,Cernăteşti,4742,DJ,181,RO,44.45,23.43333 90631,Cernele,4742,DJ,181,RO,44.33363,23.7414 90647,Cetate,4742,DJ,181,RO,44.1,23.05 90727,Cioroiași,4742,DJ,181,RO,44.08333,23.45 90755,Ciupercenii Noi,4742,DJ,181,RO,43.90972,22.94833 90756,Ciupercenii Vechi,4742,DJ,181,RO,43.94512,22.89469 90764,Cleanov,4742,DJ,181,RO,44.35288,23.21032 90815,Comoșteni,4742,DJ,181,RO,43.87405,23.86356 90827,Comuna Afumaţi,4742,DJ,181,RO,43.99793,23.44386 90858,Comuna Almãj,4742,DJ,181,RO,44.44093,23.70915 90866,Comuna Amărăştii de Jos,4742,DJ,181,RO,43.92611,24.16076 90867,Comuna Amărăştii de Sus,4742,DJ,181,RO,43.98588,24.16715 90879,Comuna Apele Vii,4742,DJ,181,RO,44.06658,24.06611 90889,Comuna Argetoaia,4742,DJ,181,RO,44.5092,23.37593 91185,Comuna Bârca,4742,DJ,181,RO,43.96954,23.61782 90997,Comuna Bistreţ,4742,DJ,181,RO,43.90162,23.52291 91065,Comuna Botoşeşti-Paia,4742,DJ,181,RO,44.4039,23.26381 91072,Comuna Brabova,4742,DJ,181,RO,44.35864,23.39816 91114,Comuna Brădeşti,4742,DJ,181,RO,44.51766,23.61747 91075,Comuna Braloştiţa,4742,DJ,181,RO,44.50483,23.49123 91085,Comuna Bratovoeşti,4742,DJ,181,RO,44.13725,23.91445 91088,Comuna Breasta,4742,DJ,181,RO,44.34924,23.67073 91136,Comuna Bucovăţ,4742,DJ,181,RO,44.29453,23.69512 91160,Comuna Bulzeşti,4742,DJ,181,RO,44.59126,23.8718 91577,Comuna Călăraşi,4742,DJ,181,RO,43.78416,24.04076 91254,Comuna Calopăru,4742,DJ,181,RO,44.1556,23.75966 91259,Comuna Caraula,4742,DJ,181,RO,44.19287,23.25298 91549,Comuna Cârcea,4742,DJ,181,RO,44.26856,23.89801 91554,Comuna Cârna,4742,DJ,181,RO,43.88613,23.60153 91262,Comuna Carpen,4742,DJ,181,RO,44.34169,23.26059 91265,Comuna Castranova,4742,DJ,181,RO,44.12778,24.0124 91267,Comuna Catane,4742,DJ,181,RO,43.92584,23.41332 91279,Comuna Celaru,4742,DJ,181,RO,44.04192,24.11972 91301,Comuna Cerãt,4742,DJ,181,RO,44.07358,23.67078 91295,Comuna Cernăteşti,4742,DJ,181,RO,44.44315,23.47578 91304,Comuna Cetate,4742,DJ,181,RO,44.09894,23.0637 91355,Comuna Cioroiaşi,4742,DJ,181,RO,44.08624,23.45207 91374,Comuna Ciupercenii Noi,4742,DJ,181,RO,43.92186,22.95877 91477,Comuna Coşoveni,4742,DJ,181,RO,44.24628,23.93612 91480,Comuna Coţofenii din Dos,4742,DJ,181,RO,44.41282,23.64369 91481,Comuna Coţofenii din Faţă,4742,DJ,181,RO,44.45275,23.67053 91741,Comuna Dăneţi,4742,DJ,181,RO,43.9775,24.04015 91617,Comuna Desa,4742,DJ,181,RO,43.87038,23.03236 91629,Comuna Dioşti,4742,DJ,181,RO,44.12923,24.17156 91636,Comuna Dobreşti,4742,DJ,181,RO,43.96771,23.95341 91643,Comuna Dobroteşti,4742,DJ,181,RO,43.96749,24.12835 91692,Comuna Drăgoteşti,4742,DJ,181,RO,44.25774,24.08138 91685,Comuna Drãnic,4742,DJ,181,RO,44.05601,23.84033 91815,Comuna Fãrcaş,4742,DJ,181,RO,44.61267,23.74081 91831,Comuna Galicea Mare,4742,DJ,181,RO,44.09805,23.30967 91832,Comuna Galiciuica,4742,DJ,181,RO,44.10189,23.38921 91963,Comuna Gângiova,4742,DJ,181,RO,43.88621,23.86161 91844,Comuna Gherceşti,4742,DJ,181,RO,44.38567,23.92481 91852,Comuna Ghidici,4742,DJ,181,RO,43.88899,23.19454 91858,Comuna Ghindeni,4742,DJ,181,RO,44.21223,23.92336 91867,Comuna Gighera,4742,DJ,181,RO,43.84806,23.8059 91873,Comuna Giubega,4742,DJ,181,RO,44.12821,23.41164 91877,Comuna Giurgiţa,4742,DJ,181,RO,44.00721,23.6305 91891,Comuna Gogoşu,4742,DJ,181,RO,44.41717,23.37842 91894,Comuna Goicea,4742,DJ,181,RO,43.92623,23.61845 91895,Comuna Goieşti,4742,DJ,181,RO,44.48627,23.75375 91914,Comuna Greceşti,4742,DJ,181,RO,44.45468,23.26394 93493,Comuna Întorsura,4742,DJ,181,RO,44.11226,23.57574 92113,Comuna Işalniţa,4742,DJ,181,RO,44.3939,23.73711 92102,Comuna Izvoare,4742,DJ,181,RO,44.15,23.28333 92159,Comuna Leu,4742,DJ,181,RO,44.17207,24.04971 92168,Comuna Lipovu,4742,DJ,181,RO,44.11342,23.62736 92378,Comuna Măceşu de Jos,4742,DJ,181,RO,43.87966,23.68954 92379,Comuna Măceşu de Sus,4742,DJ,181,RO,43.91667,23.71126 92228,Comuna Maglavit,4742,DJ,181,RO,44.04339,23.09854 92236,Comuna Malu Mare,4742,DJ,181,RO,44.23844,23.8557 92374,Comuna Mârşani,4742,DJ,181,RO,44.01157,24.01919 92253,Comuna Melineşti,4742,DJ,181,RO,44.5631,23.6953 92305,Comuna Mischii,4742,DJ,181,RO,44.42093,23.86238 92353,Comuna Moţăţei,4742,DJ,181,RO,44.08454,23.18856 92360,Comuna Murgaşi,4742,DJ,181,RO,44.54342,23.82994 92428,Comuna Negoi,4742,DJ,181,RO,43.91396,23.37288 92512,Comuna Orodel,4742,DJ,181,RO,44.26414,23.2739 92520,Comuna Ostroveni,4742,DJ,181,RO,43.82121,23.90789 92555,Comuna Perişor,4742,DJ,181,RO,44.15843,23.49214 92575,Comuna Pieleşti,4742,DJ,181,RO,44.35632,23.9757 92588,Comuna Piscu Vechi,4742,DJ,181,RO,43.89938,23.16364 92592,Comuna Pleniţa,4742,DJ,181,RO,44.22532,23.16364 92594,Comuna Pleşoi,4742,DJ,181,RO,44.3538,23.54284 92611,Comuna Podari,4742,DJ,181,RO,44.24394,23.79217 92629,Comuna Poiana Mare,4742,DJ,181,RO,43.9204,23.06271 92670,Comuna Predeşti,4742,DJ,181,RO,44.3464,23.58506 92743,Comuna Radovan,4742,DJ,181,RO,44.17687,23.58518 92749,Comuna Rast,4742,DJ,181,RO,43.88713,23.28409 92775,Comuna Robăneşti,4742,DJ,181,RO,44.30356,24.00582 92780,Comuna Rojişte,4742,DJ,181,RO,44.02515,23.91865 92858,Comuna Sadova,4742,DJ,181,RO,43.88749,23.94622 93097,Comuna Sălcuţa,4742,DJ,181,RO,44.22948,23.45454 92904,Comuna Scăeşti,4742,DJ,181,RO,44.46591,23.54822 92909,Comuna Seaca de Câmp,4742,DJ,181,RO,43.92824,23.19955 92910,Comuna Seaca de Pădure,4742,DJ,181,RO,44.37108,23.32359 92912,Comuna Secu,4742,DJ,181,RO,44.47854,23.29525 92933,Comuna Siliştea Crucii,4742,DJ,181,RO,44.04488,23.48194 93523,Comuna Şimnicu de Sus,4742,DJ,181,RO,44.41283,23.78863 92977,Comuna Sopot,4742,DJ,181,RO,44.39061,23.51252 93232,Comuna Tãlpaş,4742,DJ,181,RO,44.68256,23.74391 93132,Comuna Teasc,4742,DJ,181,RO,44.1782,23.8639 93143,Comuna Terpeziţa,4742,DJ,181,RO,44.30631,23.49202 93145,Comuna Teslui,4742,DJ,181,RO,44.20534,24.15241 93577,Comuna Ţuglui,4742,DJ,181,RO,44.20034,23.82296 93276,Comuna Unirea,4742,DJ,181,RO,44.15811,23.17936 93287,Comuna Urzicuţa,4742,DJ,181,RO,44.01485,23.56956 93323,Comuna Valea Stanciului,4742,DJ,181,RO,43.98333,23.86667 93446,Comuna Vârtop,4742,DJ,181,RO,44.20873,23.34831 93447,Comuna Vârvoru de Jos,4742,DJ,181,RO,44.24458,23.60636 93341,Comuna Vela,4742,DJ,181,RO,44.28526,23.37887 93342,Comuna Verbiţa,4742,DJ,181,RO,44.29305,23.17886 93692,Coşoveni,4742,DJ,181,RO,44.25,23.93333 93694,Coţofenii din Dos,4742,DJ,181,RO,44.43333,23.61667 93701,Coțofenii din Față,4742,DJ,181,RO,44.45971,23.65688 93704,Craiova,4742,DJ,181,RO,44.31667,23.8 94114,Dăbuleni,4742,DJ,181,RO,43.8,24.08333 94129,Dăneţi,4742,DJ,181,RO,43.98333,24.05 93925,Desa,4742,DJ,181,RO,43.86667,23.03333 93939,Dioşti,4742,DJ,181,RO,44.11667,24.18333 93954,Dobreşti,4742,DJ,181,RO,43.96667,23.95 93958,Dobridor,4742,DJ,181,RO,44.11866,23.16969 93966,Dobrotești,4742,DJ,181,RO,43.96141,24.12405 94045,Drăgoteşti,4742,DJ,181,RO,44.25,24.1 94065,Drănic,4742,DJ,181,RO,44.05519,23.84678 94250,Făcăi,4742,DJ,181,RO,44.27356,23.82029 94263,Fărcaș,4742,DJ,181,RO,44.6,23.75 94171,Filiaşi,4742,DJ,181,RO,44.55,23.51667 94203,Fratoștița,4742,DJ,181,RO,44.58671,23.57044 94278,Galicea Mare,4742,DJ,181,RO,44.1,23.3 94279,Galiciuica,4742,DJ,181,RO,44.10324,23.39067 94480,Gângiova,4742,DJ,181,RO,43.9,23.85 94317,Ghidici,4742,DJ,181,RO,43.89103,23.19454 94327,Ghindeni,4742,DJ,181,RO,44.21223,23.92336 94338,Ghizdăvești,4742,DJ,181,RO,44.05757,24.10811 94343,Gighera,4742,DJ,181,RO,43.85,23.8 94349,Giubega,4742,DJ,181,RO,44.1274,23.40757 94354,Giurgiţa,4742,DJ,181,RO,44.01667,23.63333 94373,Gogoşu,4742,DJ,181,RO,44.41667,23.36667 94375,Goicea,4742,DJ,181,RO,43.91667,23.61667 94376,Goiești,4742,DJ,181,RO,44.48333,23.76667 94406,Greceşti,4742,DJ,181,RO,44.45,23.28333 94579,Hunia,4742,DJ,181,RO,44.05532,23.09893 97025,Întorsura,4742,DJ,181,RO,44.11226,23.57574 94721,Işalniţa,4742,DJ,181,RO,44.4,23.73333 94702,Izvoare,4742,DJ,181,RO,44.14773,23.29582 94789,Leu,4742,DJ,181,RO,44.18333,24.0 94805,Lipovu,4742,DJ,181,RO,44.1,23.63333 94827,Lișteava,4742,DJ,181,RO,43.83418,23.92022 95227,Măceşu de Jos,4742,DJ,181,RO,43.88333,23.71667 95228,Măceşu de Sus,4742,DJ,181,RO,43.91667,23.7 94904,Maglavit,4742,DJ,181,RO,44.03333,23.1 94916,Malu Mare,4742,DJ,181,RO,44.24182,23.85321 95223,Mârşani,4742,DJ,181,RO,44.01667,24.01667 94947,Melineşti,4742,DJ,181,RO,44.56667,23.71667 95027,Mischii,4742,DJ,181,RO,44.38333,23.85 95048,Mofleni,4742,DJ,181,RO,44.3022,23.75848 95093,Moţăţei,4742,DJ,181,RO,44.08333,23.2 95121,Municipiul Bãileşti,4742,DJ,181,RO,44.02121,23.34475 95122,Municipiul Calafat,4742,DJ,181,RO,43.98979,22.9313 95128,Municipiul Craiova,4742,DJ,181,RO,44.31943,23.80875 95205,Murgași,4742,DJ,181,RO,44.49968,23.86698 95305,Nedeia,4742,DJ,181,RO,43.84992,23.77643 95308,Negoi,4742,DJ,181,RO,43.91396,23.37288 95310,Negoiești,4742,DJ,181,RO,44.53584,23.7269 95403,Ocolna,4742,DJ,181,RO,43.87917,24.13405 95459,Oraş Bechet,4742,DJ,181,RO,43.78301,23.9587 95512,Oraş Dãbuleni,4742,DJ,181,RO,43.78047,24.08653 95517,Oraş Filiaşi,4742,DJ,181,RO,44.56847,23.55164 95586,Oraş Segarcea,4742,DJ,181,RO,44.09434,23.74197 95663,Orodel,4742,DJ,181,RO,44.23333,23.23333 95678,Ostroveni,4742,DJ,181,RO,43.8,23.9 95692,Padea,4742,DJ,181,RO,44.02128,23.86827 95738,Perișor,4742,DJ,181,RO,44.14331,23.47509 95775,Pieleştí,4742,DJ,181,RO,44.33333,23.95 95798,Piscu Nou,4742,DJ,181,RO,43.924,23.17917 95799,Piscu Sadovei,4742,DJ,181,RO,43.87729,23.93687 95800,Piscu Vechi,4742,DJ,181,RO,43.9,23.16667 95809,Pleniţa,4742,DJ,181,RO,44.21667,23.18333 95813,Pleșoi,4742,DJ,181,RO,44.35077,23.53345 95842,Podari,4742,DJ,181,RO,44.25,23.78333 95876,Poiana Mare,4742,DJ,181,RO,43.91667,23.06667 95918,Popoveni,4742,DJ,181,RO,44.288,23.78208 95940,Prapor,4742,DJ,181,RO,43.94487,24.17475 95941,Preajba,4742,DJ,181,RO,44.26511,23.85024 95943,Predeşti,4742,DJ,181,RO,44.35,23.6 95992,Puțuri,4742,DJ,181,RO,44.13835,24.01017 96183,Răcarii de Sus,4742,DJ,181,RO,44.53539,23.55746 96052,Radomir,4742,DJ,181,RO,44.12115,24.16832 96054,Radovan,4742,DJ,181,RO,44.16667,23.61667 96062,Rast,4742,DJ,181,RO,43.88333,23.28333 96103,Rojiște,4742,DJ,181,RO,44.06683,23.93898 96225,Sadova,4742,DJ,181,RO,43.9,23.95 96233,Salcia,4742,DJ,181,RO,44.48195,23.44645 106014,Sălcuţa,4742,DJ,181,RO,44.25,23.43333 106031,Sărata,4742,DJ,181,RO,43.77436,24.03351 96261,Satu Nou Calopăr,4742,DJ,181,RO,44.16667,23.76667 96295,Scăeşti,4742,DJ,181,RO,44.46667,23.58333 96300,Seaca de Câmp,4742,DJ,181,RO,43.93333,23.21667 96301,Seaca de Pădure,4742,DJ,181,RO,44.36611,23.30587 96313,Secu,4742,DJ,181,RO,44.46667,23.3 96314,Secui,4742,DJ,181,RO,44.19186,23.86319 96319,Segarcea,4742,DJ,181,RO,44.1,23.75 96331,Sfârcea,4742,DJ,181,RO,44.48613,23.54661 96342,Siliştea Crucii,4742,DJ,181,RO,44.03333,23.48333 97053,Şimnicu de Sus,4742,DJ,181,RO,44.38333,23.8 96389,Smârdan,4742,DJ,181,RO,43.93382,22.96592 96412,Sopot,4742,DJ,181,RO,44.41667,23.5 96603,Tălpaș,4742,DJ,181,RO,44.68227,23.74553 106067,Teasc,4742,DJ,181,RO,44.16454,23.86461 106086,Terpeziţa,4742,DJ,181,RO,44.29191,23.50559 106088,Teslui,4742,DJ,181,RO,44.20559,24.15482 97109,Ţuglui,4742,DJ,181,RO,44.18333,23.81667 96670,Unirea,4742,DJ,181,RO,44.15,23.18333 96689,Urzicuţa,4742,DJ,181,RO,44.01667,23.55 96756,Valea Stanciului,4742,DJ,181,RO,43.98333,23.86667 96947,Vârtop,4742,DJ,181,RO,44.20682,23.34869 96948,Vârvoru de Jos,4742,DJ,181,RO,44.24415,23.6079 96784,Vela,4742,DJ,181,RO,44.28333,23.41667 96785,Verbiţa,4742,DJ,181,RO,44.3,23.16667 97012,Zănoaga,4742,DJ,181,RO,44.15511,24.09832 97020,Zăval,4742,DJ,181,RO,43.84717,23.84208 90519,Bălăbănești,4747,GL,181,RO,46.09546,27.72206 90525,Bălăşeşti,4747,GL,181,RO,46.1,27.66667 90508,Băleni,4747,GL,181,RO,45.81667,27.83333 90043,Balintești,4747,GL,181,RO,46.02937,27.92201 90530,Băneasa,4747,GL,181,RO,45.93333,27.93333 90061,Barcea,4747,GL,181,RO,45.75,27.46667 90107,Berești,4747,GL,181,RO,46.1,27.88333 90105,Bereşti-Sat,4747,GL,181,RO,46.1,27.88333 90162,Blânzi,4747,GL,181,RO,45.93575,27.65063 90332,Brăhășești,4747,GL,181,RO,46.03333,27.36667 90331,Brăhăşeştii de Sus,4747,GL,181,RO,46.05,27.35 90270,Braniştea,4747,GL,181,RO,45.45,27.85 90346,Bucești,4747,GL,181,RO,45.6525,27.53008 90353,Buciumeni,4747,GL,181,RO,46.0,27.3 90591,Cavadineşti,4747,GL,181,RO,46.06667,28.01694 90645,Cerţeşti,4747,GL,181,RO,46.01667,27.61667 90675,Chiraftei,4747,GL,181,RO,45.7722,28.02716 90730,Ciorăști,4747,GL,181,RO,46.1138,27.45311 90763,Cișmele,4747,GL,181,RO,45.51634,27.92975 91221,Comuna Bălăbăneşti,4747,GL,181,RO,46.07623,27.75375 91226,Comuna Bălăşeşti,4747,GL,181,RO,46.09003,27.65844 91213,Comuna Băleni,4747,GL,181,RO,45.80942,27.8502 91230,Comuna Băneasa,4747,GL,181,RO,45.93008,27.97963 90937,Comuna Barcea,4747,GL,181,RO,45.74744,27.46265 90966,Comuna Bereşti-Meria,4747,GL,181,RO,46.10362,27.92288 91120,Comuna Brăhăşeşti,4747,GL,181,RO,46.0616,27.36196 91078,Comuna Braniştea,4747,GL,181,RO,45.44141,27.8324 91131,Comuna Buciumeni,4747,GL,181,RO,45.97702,27.31922 91268,Comuna Cavadineşti,4747,GL,181,RO,46.0804,28.01638 91302,Comuna Cerţeşti,4747,GL,181,RO,46.01758,27.62321 91440,Comuna Corni,4747,GL,181,RO,45.86922,27.77693 91445,Comuna Corod,4747,GL,181,RO,45.93693,27.6515 91449,Comuna Cosmeşti,4747,GL,181,RO,45.84926,27.31605 91453,Comuna Costache Negri,4747,GL,181,RO,45.70518,27.72342 91519,Comuna Cuca,4747,GL,181,RO,45.73246,27.89396 91521,Comuna Cudalbi,4747,GL,181,RO,45.77622,27.68604 91536,Comuna Cuza Vodă,4747,GL,181,RO,45.59595,27.79267 91698,Comuna Drăgăneşti,4747,GL,181,RO,45.79281,27.46438 91695,Comuna Drăguşeni,4747,GL,181,RO,46.00203,27.73297 91814,Comuna Fârţăneşti,4747,GL,181,RO,45.79843,27.9695 91777,Comuna Folteşti,4747,GL,181,RO,45.72301,28.06995 91789,Comuna Frumuşiţa,4747,GL,181,RO,45.65593,28.06631 91800,Comuna Fundeni,4747,GL,181,RO,45.56736,27.55104 91853,Comuna Ghidigeni,4747,GL,181,RO,46.03356,27.4921 91893,Comuna Gohor,4747,GL,181,RO,46.01539,27.42653 91922,Comuna Griviţa,4747,GL,181,RO,45.7004,27.64104 92077,Comuna Independenţa,4747,GL,181,RO,45.47466,27.76025 92098,Comuna Iveşti,4747,GL,181,RO,45.66843,27.52467 92129,Comuna Jorăşti,4747,GL,181,RO,45.98544,27.87215 92164,Comuna Lieşti,4747,GL,181,RO,45.62018,27.54132 92418,Comuna Măstăcani,4747,GL,181,RO,45.767,28.04175 92245,Comuna Matca,4747,GL,181,RO,45.85686,27.5366 92340,Comuna Movileni,4747,GL,181,RO,45.76584,27.37587 92356,Comuna Munteni,4747,GL,181,RO,45.91503,27.44242 92462,Comuna Nămoloasa,4747,GL,181,RO,45.52383,27.56307 92434,Comuna Negrileşti,4747,GL,181,RO,45.94768,27.48018 92444,Comuna Nicoreşti,4747,GL,181,RO,45.93603,27.29735 92467,Comuna Oancea,4747,GL,181,RO,45.90648,28.11118 92543,Comuna Pechea,4747,GL,181,RO,45.64303,27.82756 92587,Comuna Piscu,4747,GL,181,RO,45.51681,27.71645 92622,Comuna Poiana,4747,GL,181,RO,45.99554,27.26693 92676,Comuna Priponeşti,4747,GL,181,RO,46.1015,27.43939 92843,Comuna Rădeşti,4747,GL,181,RO,46.08312,27.79606 92760,Comuna Rediu,4747,GL,181,RO,45.72065,27.84647 92903,Comuna Scânteieşti,4747,GL,181,RO,45.68833,28.00432 92885,Comuna Schela,4747,GL,181,RO,45.5181,27.85229 93506,Comuna Şendreni,4747,GL,181,RO,45.4132,27.92253 92956,Comuna Slobozia Conachi,4747,GL,181,RO,45.5643,27.77143 92964,Comuna Smârdan,4747,GL,181,RO,45.49694,27.93554 92963,Comuna Smulţi,4747,GL,181,RO,45.93246,27.75488 93025,Comuna Suceveni,4747,GL,181,RO,45.99495,28.05748 93031,Comuna Suhurlui,4747,GL,181,RO,45.72873,27.82678 93568,Comuna Ţepu,4747,GL,181,RO,45.97734,27.37677 93198,Comuna Tudor Vladimirescu,4747,GL,181,RO,45.56466,27.65075 93206,Comuna Tuluceşti,4747,GL,181,RO,45.59242,28.05239 93266,Comuna Umbrăreşti,4747,GL,181,RO,45.71386,27.45893 93317,Comuna Valea Mãrului,4747,GL,181,RO,45.85934,27.69554 93434,Comuna Vânători,4747,GL,181,RO,45.52597,28.00892 93443,Comuna Vârlezi,4747,GL,181,RO,45.92244,27.82966 93390,Comuna Vlădeşti,4747,GL,181,RO,45.81991,28.08845 93637,Corni,4747,GL,181,RO,45.85,27.76667 93646,Corod,4747,GL,181,RO,45.9,27.61667 93652,Cosmeşti,4747,GL,181,RO,45.87017,27.31115 93654,Cosmeștii-Vale,4747,GL,181,RO,45.86931,27.28771 93657,Costache Negri,4747,GL,181,RO,45.7,27.71667 93754,Crăiești,4747,GL,181,RO,45.94314,27.81136 93756,Cuca,4747,GL,181,RO,45.73333,27.88333 93763,Cudalbi,4747,GL,181,RO,45.78333,27.7 93786,Cuza Vodă,4747,GL,181,RO,45.59595,27.79267 94058,Drăgăneşti,4747,GL,181,RO,45.78333,27.46667 94048,Drăguşeni,4747,GL,181,RO,45.96667,27.75 94242,Fântânele,4747,GL,181,RO,45.70152,28.00354 94246,Fârţăneşti,4747,GL,181,RO,45.81667,27.98333 94197,Folteşti,4747,GL,181,RO,45.75,28.05 94212,Frumuşiţa,4747,GL,181,RO,45.66667,28.06667 94227,Fundeni,4747,GL,181,RO,45.54123,27.54056 94232,Furcenii Noi,4747,GL,181,RO,45.81118,27.33954 94272,Galaţi,4747,GL,181,RO,45.43687,28.05028 94511,Gănești,4747,GL,181,RO,46.0897,27.99337 94318,Ghidigeni,4747,GL,181,RO,46.05,27.5 94374,Gohor,4747,GL,181,RO,46.06667,27.4 94417,Griviţa,4747,GL,181,RO,45.71667,27.65 94523,Hanu Conachi,4747,GL,181,RO,45.5865,27.59481 94665,Independenţa,4747,GL,181,RO,45.48333,27.75 94696,Iveşti,4747,GL,181,RO,45.68333,27.51667 94746,Jorăşti,4747,GL,181,RO,45.98333,27.86667 94795,Lieşti,4747,GL,181,RO,45.61667,27.51667 95213,Mândrești,4747,GL,181,RO,45.88333,27.7 95287,Măstăcani,4747,GL,181,RO,45.78333,28.03333 94934,Matca,4747,GL,181,RO,45.85,27.53333 95076,Moscu,4747,GL,181,RO,45.9026,27.9312 95084,Movileni,4747,GL,181,RO,45.76154,27.37184 95144,Municipiul Galaţi,4747,GL,181,RO,45.44078,28.04118 95186,Municipiul Tecuci,4747,GL,181,RO,45.85155,27.42826 95200,Munteni,4747,GL,181,RO,45.93333,27.43333 95370,Nămoloasa,4747,GL,181,RO,45.5361,27.55226 95371,Nămoloasa-Sat,4747,GL,181,RO,45.53333,27.58333 95323,Negrilești,4747,GL,181,RO,45.95729,27.48085 95341,Nicoreşti,4747,GL,181,RO,45.93223,27.30866 95379,Oancea,4747,GL,181,RO,45.91667,28.1 95404,Odaia Manolache,4747,GL,181,RO,45.54897,27.99057 95462,Oraş Bereşti,4747,GL,181,RO,46.09648,27.88623 95647,Oraș Târgu Bujor,4747,GL,181,RO,45.87398,27.92304 95721,Pechea,4747,GL,181,RO,45.63333,27.8 95797,Piscu,4747,GL,181,RO,45.5,27.73333 95847,Podoleni,4747,GL,181,RO,45.7483,27.44661 95867,Poiana,4747,GL,181,RO,45.99228,27.25609 95953,Priponeşti,4747,GL,181,RO,46.08333,27.43333 96196,Rădești,4747,GL,181,RO,46.07263,27.78936 96079,Rediu,4747,GL,181,RO,45.71667,27.83333 96294,Scânteiești,4747,GL,181,RO,45.68333,27.98333 96268,Schela,4747,GL,181,RO,45.5,27.81667 97037,Şendreni,4747,GL,181,RO,45.4,27.91667 97130,Șivița,4747,GL,181,RO,45.61285,28.05757 96375,Slobozia Conachi,4747,GL,181,RO,45.58333,27.78333 96390,Smârdan,4747,GL,181,RO,45.48333,27.93333 96388,Smulţi,4747,GL,181,RO,45.93333,27.75 96489,Suceveni,4747,GL,181,RO,46.01222,28.01806 96498,Suhurlui,4747,GL,181,RO,45.72873,27.82678 96604,Tălpigi,4747,GL,181,RO,46.00796,27.47247 96581,Târgu Bujor,4747,GL,181,RO,45.86667,27.9 106069,Tecuci,4747,GL,181,RO,45.84973,27.43441 97100,Ţepu,4747,GL,181,RO,45.96667,27.36667 106118,Toflea,4747,GL,181,RO,46.06372,27.33411 106165,Tudor Vladimirescu,4747,GL,181,RO,45.56667,27.65 96547,Tuluceşti,4747,GL,181,RO,45.56667,28.03333 96652,Umbrăreşti,4747,GL,181,RO,45.71667,27.46667 96654,Umbrărești-Deal,4747,GL,181,RO,45.7,27.46667 96659,Ungureni,4747,GL,181,RO,45.91307,27.47 96743,Valea Mărului,4747,GL,181,RO,45.83866,27.69138 96931,Vânători,4747,GL,181,RO,45.53333,28.01667 96942,Vârlezi,4747,GL,181,RO,45.9,27.85 96814,Viile,4747,GL,181,RO,45.80691,27.94748 96865,Vlădeşti,4747,GL,181,RO,45.85,28.08333 89885,Adunații-Copăceni,4726,GR,181,RO,44.25413,26.04929 90439,Bâcu,4726,GR,181,RO,44.48259,25.88904 90531,Băneasa,4726,GR,181,RO,44.04611,26.06417 90213,Bolintin Deal,4726,GR,181,RO,44.45917,25.82111 90214,Bolintin Vale,4726,GR,181,RO,44.44889,25.75778 90339,Brăniștari,4726,GR,181,RO,44.17626,26.05953 90271,Braniștea,4726,GR,181,RO,43.96315,26.03812 90365,Bucşani,4726,GR,181,RO,44.37611,25.65528 90401,Bulbucata,4726,GR,181,RO,44.28333,25.80333 90429,Buturugeni,4726,GR,181,RO,44.36528,25.83528 93845,Călugăreni,4726,GR,181,RO,44.17167,25.99556 93803,Câmpurelu,4726,GR,181,RO,44.23392,26.18719 90582,Cartojani,4726,GR,181,RO,44.43221,25.48994 93873,Căscioarele,4726,GR,181,RO,44.49911,25.63817 90648,Cetatea,4726,GR,181,RO,43.95105,25.9345 90677,Chiriacu,4726,GR,181,RO,44.05036,25.77726 90766,Clejani,4726,GR,181,RO,44.31972,25.69944 90795,Colibaşi,4726,GR,181,RO,44.20222,26.19472 90803,Comana,4726,GR,181,RO,44.17056,26.145 90823,Comuna Adunaţii-Copăceni,4726,GR,181,RO,44.25847,26.06477 91231,Comuna Băneasa,4726,GR,181,RO,44.03785,26.06071 91041,Comuna Bolintin Deal,4726,GR,181,RO,44.44593,25.82301 91141,Comuna Bucşani,4726,GR,181,RO,44.35805,25.65081 91158,Comuna Bulbucata,4726,GR,181,RO,44.29537,25.82284 91177,Comuna Buturugeni,4726,GR,181,RO,44.34661,25.83382 91575,Comuna Călugăreni,4726,GR,181,RO,44.16412,25.99392 91380,Comuna Clejani,4726,GR,181,RO,44.31582,25.7356 91398,Comuna Colibaşi,4726,GR,181,RO,44.21838,26.19239 91404,Comuna Comana,4726,GR,181,RO,44.17965,26.14905 91452,Comuna Cosoba,4726,GR,181,RO,44.52268,25.81903 91490,Comuna Crevedia Mare,4726,GR,181,RO,44.4367,25.6105 91600,Comuna Daia,4726,GR,181,RO,43.99944,25.99228 93585,Comună Floreşti-Stoeneşti,4726,GR,181,RO,44.49152,25.7114 91794,Comuna Frăteşti,4726,GR,181,RO,43.95495,25.96212 91977,Comuna Gãiseni,4726,GR,181,RO,44.51633,25.63261 91987,Comuna Găujani,4726,GR,181,RO,43.73995,25.71079 91856,Comuna Ghimpaţi,4726,GR,181,RO,44.19231,25.7836 91890,Comuna Gogoşari,4726,GR,181,RO,43.86611,25.68497 91909,Comuna Goştinari,4726,GR,181,RO,44.17765,26.23792 91907,Comuna Gostinu,4726,GR,181,RO,43.99738,26.12297 91937,Comuna Grădinari,4726,GR,181,RO,44.39546,25.81702 91913,Comuna Greaca,4726,GR,181,RO,44.12591,26.33371 91998,Comuna Herăşti,4726,GR,181,RO,44.21077,26.36678 92025,Comuna Hotarele,4726,GR,181,RO,44.17536,26.37078 92064,Comuna Iepureşti,4726,GR,181,RO,44.26376,25.8804 92096,Comuna Isvoarele,4726,GR,181,RO,44.16855,26.29673 92103,Comuna Izvoarele,4726,GR,181,RO,44.04869,25.80326 92128,Comuna Joiţa,4726,GR,181,RO,44.49002,25.87205 92157,Comuna Letca Nouă,4726,GR,181,RO,44.23326,25.70941 92235,Comuna Malu,4726,GR,181,RO,43.81518,25.81863 92373,Comuna Mârşa,4726,GR,181,RO,44.37355,25.55974 92270,Comuna Mihai Bravu,4726,GR,181,RO,44.14129,26.05812 92486,Comuna Ogrezeni,4726,GR,181,RO,44.39727,25.77888 92489,Comuna Oinacu,4726,GR,181,RO,43.95609,26.03403 92685,Comuna Prundu,4726,GR,181,RO,44.08334,26.2121 92700,Comuna Putineiu,4726,GR,181,RO,43.90072,25.78225 92850,Comuna Răsuceni,4726,GR,181,RO,44.08416,25.68758 92773,Comuna Roata De Jos,4726,GR,181,RO,44.41388,25.53061 93079,Comuna Săbăreni,4726,GR,181,RO,44.50185,25.8882 92888,Comuna Schitu,4726,GR,181,RO,44.14574,25.8424 92940,Comuna Singureni,4726,GR,181,RO,44.22975,25.95363 92952,Comuna Slobozia,4726,GR,181,RO,43.85671,25.91074 93016,Comuna Stăneşti,4726,GR,181,RO,43.93344,25.87967 92994,Comuna Stoeneşti,4726,GR,181,RO,44.14164,25.89349 93180,Comuna Toporu,4726,GR,181,RO,43.99588,25.64737 93263,Comuna Ulmi,4726,GR,181,RO,44.4934,25.76687 93305,Comuna Valea Dragului,4726,GR,181,RO,44.21135,26.30682 93437,Comuna Vânătorii Mici,4726,GR,181,RO,44.49072,25.56116 93466,Comuna Vărăşti,4726,GR,181,RO,44.24616,26.25221 93339,Comuna Vedea,4726,GR,181,RO,43.78217,25.7886 93600,Copaciu,4726,GR,181,RO,44.18178,25.76921 93656,Cosoba,4726,GR,181,RO,44.52268,25.81903 93711,Crevedia Mare,4726,GR,181,RO,44.42917,25.62556 93761,Cucuruzu,4726,GR,181,RO,44.0802,25.73242 93888,Daia,4726,GR,181,RO,44.0,25.98333 94135,Dărăști-Vlașca,4726,GR,181,RO,44.29401,26.01119 93899,Dealu,4726,GR,181,RO,44.39938,25.64857 93952,Dobreni,4726,GR,181,RO,44.2543,26.21344 94148,Falaștoaca,4726,GR,181,RO,44.19098,26.18475 94187,Florești,4726,GR,181,RO,44.51313,25.69658 94219,Frăteşti,4726,GR,181,RO,43.96667,25.96667 94502,Găiseni,4726,GR,181,RO,44.515,25.64528 94514,Găujani,4726,GR,181,RO,43.73333,25.7 94325,Ghimpați,4726,GR,181,RO,44.19586,25.78336 94353,Giurgiu,4726,GR,181,RO,43.88664,25.9627 94371,Gogoşari,4726,GR,181,RO,43.86667,25.7 94393,Gostinari,4726,GR,181,RO,44.18624,26.22807 94396,Goştinari-Văcăreşti,4726,GR,181,RO,44.18333,26.21667 94394,Gostinu,4726,GR,181,RO,44.0,26.11667 94435,Grădinari,4726,GR,181,RO,44.39222,25.81556 94441,Grădiștea,4726,GR,181,RO,44.21062,26.16547 94402,Greaca,4726,GR,181,RO,44.10944,26.33944 94533,Herăști,4726,GR,181,RO,44.21174,26.35903 94570,Hotarele,4726,GR,181,RO,44.1725,26.37028 94574,Hulubești,4726,GR,181,RO,44.16748,25.94146 94636,Icoana,4726,GR,181,RO,44.49309,25.74623 94643,Iepureşti,4726,GR,181,RO,44.25806,25.88222 94707,Izvoarele,4726,GR,181,RO,44.03389,25.77472 94744,Joiţa,4726,GR,181,RO,44.49417,25.85389 94786,Letca Nouă,4726,GR,181,RO,44.23496,25.74262 94787,Letca Veche,4726,GR,181,RO,44.19911,25.68681 94915,Malu,4726,GR,181,RO,43.81518,25.81863 94918,Malu Spart,4726,GR,181,RO,44.44391,25.71758 95222,Mârşa,4726,GR,181,RO,44.37417,25.55694 94976,Mihai Bravu,4726,GR,181,RO,44.14056,26.06278 94981,Mihai Vodă,4726,GR,181,RO,44.43916,25.81957 94995,Mihăileşti,4726,GR,181,RO,44.32667,25.90833 95003,Milcovățu,4726,GR,181,RO,44.2657,25.69882 95147,Municipiul Giurgiu,4726,GR,181,RO,43.89051,25.96609 95299,Naipu,4726,GR,181,RO,44.15187,25.76175 95356,Novaci,4726,GR,181,RO,44.30109,25.98632 95416,Ogrezeni,4726,GR,181,RO,44.41972,25.76833 95419,Oinacu,4726,GR,181,RO,43.95,26.01667 95466,Oraş Bolintin-Vale,4726,GR,181,RO,44.44356,25.7393 95541,Oraş Mihãileşti,4726,GR,181,RO,44.31666,25.94103 96009,Pădureni,4726,GR,181,RO,44.34576,25.80469 95699,Palanca,4726,GR,181,RO,44.47575,25.72565 95779,Pietrele,4726,GR,181,RO,44.06258,26.12019 95782,Pietrișu,4726,GR,181,RO,43.72508,25.67464 95826,Plopșoru,4726,GR,181,RO,44.0119,25.99306 95913,Popești,4726,GR,181,RO,44.30444,25.9637 95966,Prundu,4726,GR,181,RO,44.09472,26.22694 95978,Puieni,4726,GR,181,RO,44.07675,26.19114 95988,Putineiu,4726,GR,181,RO,43.9,25.73333 96209,Răsuceni,4726,GR,181,RO,44.09167,25.66389 96086,Remuș,4726,GR,181,RO,43.94295,25.98039 96096,Roata de Jos,4726,GR,181,RO,44.41083,25.54333 105989,Săbăreni,4726,GR,181,RO,44.50185,25.8882 96223,Sadina,4726,GR,181,RO,44.41143,25.52953 96270,Schitu,4726,GR,181,RO,44.14083,25.83667 96355,Singureni,4726,GR,181,RO,44.23361,25.94333 96370,Slobozia,4726,GR,181,RO,43.85,25.9 96477,Stăneşti,4726,GR,181,RO,43.91667,25.83333 96435,Stoeneşti,4726,GR,181,RO,44.14444,25.895 96579,Tântava,4726,GR,181,RO,44.41511,25.8245 106138,Toporu,4726,GR,181,RO,44.01056,25.65278 106153,Trestieni,4726,GR,181,RO,44.50449,25.75789 96648,Ulmi,4726,GR,181,RO,44.48667,25.78028 96693,Uzunu,4726,GR,181,RO,44.14716,25.96719 96723,Valea Dragului,4726,GR,181,RO,44.21222,26.30361 96934,Vânătorii Mari,4726,GR,181,RO,44.48898,25.54548 96935,Vânătorii Mici,4726,GR,181,RO,44.49028,25.55889 96974,Vărăşti,4726,GR,181,RO,44.23778,26.24861 96783,Vedea,4726,GR,181,RO,43.78333,25.78333 96811,Vieru,4726,GR,181,RO,43.88787,25.80974 96856,Vlad Țepeș,4726,GR,181,RO,44.13282,26.13355 97003,Zorile,4726,GR,181,RO,44.37864,25.80678 89912,Albeni,4750,GJ,181,RO,45.03333,23.6 89932,Alimpeşti,4750,GJ,181,RO,45.08333,23.8 89954,Andreești,4750,GJ,181,RO,44.78948,23.55099 89963,Aninoasa,4750,GJ,181,RO,44.75,23.48333 89979,Arcani,4750,GJ,181,RO,45.08333,23.13333 90034,Baia de Fier,4750,GJ,181,RO,45.16667,23.76667 90506,Bălcești,4750,GJ,181,RO,45.10516,23.6329 90510,Băleşti,4750,GJ,181,RO,45.01667,23.21667 90441,Bâlta,4750,GJ,181,RO,45.11791,23.1022 90443,Bâlteni,4750,GJ,181,RO,44.86919,23.27311 90541,Bărbăteşti,4750,GJ,181,RO,44.86667,23.5 90094,Bengești,4750,GJ,181,RO,45.06667,23.6 90112,Berleşti,4750,GJ,181,RO,44.91667,23.66667 90208,Bolboşi,4750,GJ,181,RO,44.75,23.21667 90236,Borăscu,4750,GJ,181,RO,44.7,23.28333 90336,Brăneşti,4750,GJ,181,RO,44.65,23.46667 90407,Bumbeşti-Jiu,4750,GJ,181,RO,45.16667,23.4 90424,Bustuchin,4750,GJ,181,RO,44.96667,23.73333 93793,Câlnic,4750,GJ,181,RO,44.95,23.08333 93859,Căpreni,4750,GJ,181,RO,44.75,23.61667 93871,Cărpiniș,4750,GJ,181,RO,45.18407,23.58052 93880,Cătunele,4750,GJ,181,RO,44.86442,22.90707 90605,Ceauru,4750,GJ,181,RO,45.01175,23.20211 90753,Ciuperceni,4750,GJ,181,RO,44.93333,23.01667 90770,Cloșani,4750,GJ,181,RO,45.06897,22.8025 90781,Cocoreni,4750,GJ,181,RO,44.82772,23.31405 90838,Comuna Albeni,4750,GJ,181,RO,45.01363,23.60208 90853,Comuna Alimpeşti,4750,GJ,181,RO,45.10542,23.79651 90873,Comuna Aninoasa,4750,GJ,181,RO,44.74836,23.47372 90883,Comuna Arcani,4750,GJ,181,RO,45.07232,23.14108 90919,Comuna Baia de Fier,4750,GJ,181,RO,45.17402,23.74152 91225,Comuna Bălăneşti,4750,GJ,181,RO,45.09028,23.44674 91216,Comuna Băleşti,4750,GJ,181,RO,45.01898,23.18145 91182,Comuna Bâlteni,4750,GJ,181,RO,44.86667,23.26736 91238,Comuna Bărbăteşti,4750,GJ,181,RO,44.85916,23.5076 90958,Comuna Bengeşti-Ciocadia,4750,GJ,181,RO,45.09845,23.60621 91037,Comuna Bolboşi,4750,GJ,181,RO,44.7374,23.22157 91055,Comuna Borăscu,4750,GJ,181,RO,44.70105,23.26739 91121,Comuna Brăneşti,4750,GJ,181,RO,44.66555,23.47213 91162,Comuna Bumbeşti-Piţic,4750,GJ,181,RO,45.12413,23.70348 91172,Comuna Bustuchin,4750,GJ,181,RO,44.96835,23.70347 91541,Comuna Câlnic,4750,GJ,181,RO,44.94202,23.06292 91584,Comuna Căpreni,4750,GJ,181,RO,44.74439,23.62033 91595,Comuna Cătunele,4750,GJ,181,RO,44.83902,22.92465 91372,Comuna Ciuperceni,4750,GJ,181,RO,44.928,22.99173 91486,Comuna Crasna,4750,GJ,181,RO,45.17065,23.55625 91511,Comuna Crușeț,4750,GJ,181,RO,44.63848,23.67247 91736,Comuna Dănciuleşti,4750,GJ,181,RO,44.77004,23.76023 91739,Comuna Dăneşti,4750,GJ,181,RO,44.96735,23.3439 91691,Comuna Drăgoteşti,4750,GJ,181,RO,44.79957,23.16192 91684,Comuna Drãguţeşti,4750,GJ,181,RO,44.9637,23.2348 91816,Comuna Fãrcãşeşti,4750,GJ,181,RO,44.87069,23.19279 91884,Comuna Glogova,4750,GJ,181,RO,44.91623,22.9081 91889,Comuna Godineşti,4750,GJ,181,RO,44.97634,22.96093 92028,Comuna Hurezani,4750,GJ,181,RO,44.80305,23.63617 92086,Comuna Ioneşti,4750,GJ,181,RO,44.61636,23.42688 92134,Comuna Jupâneşti,4750,GJ,181,RO,44.91241,23.52325 92147,Comuna Leleşti,4750,GJ,181,RO,45.09875,23.19761 92162,Comuna Licurici,4750,GJ,181,RO,44.87544,23.62641 92182,Comuna Logreşti-Moşteni,4750,GJ,181,RO,44.88848,23.71256 92419,Comuna Mătăsari,4750,GJ,181,RO,44.85764,23.06819 92364,Comuna Muşeteşti,4750,GJ,181,RO,45.15231,23.45022 92429,Comuna Negomir,4750,GJ,181,RO,44.78593,23.22744 92527,Comuna Padeş,4750,GJ,181,RO,45.05089,22.80954 92571,Comuna Peştişani,4750,GJ,181,RO,45.07061,23.04902 92600,Comuna Plopşoru,4750,GJ,181,RO,44.73869,23.39053 92646,Comuna Polovragi,4750,GJ,181,RO,45.17196,23.82134 92675,Comuna Prigoria,4750,GJ,181,RO,45.05711,23.68453 92797,Comuna Roşia De Amaradia,4750,GJ,181,RO,45.04419,23.75991 92810,Comuna Runcu,4750,GJ,181,RO,45.12041,23.13974 93083,Comuna Săcelu,4750,GJ,181,RO,45.10648,23.53717 92869,Comuna Samarineşti,4750,GJ,181,RO,44.77152,23.04889 93115,Comuna Săuleşti,4750,GJ,181,RO,44.81247,23.48767 92886,Comuna Schela,4750,GJ,181,RO,45.15883,23.32395 92891,Comuna Scoarţa,4750,GJ,181,RO,45.02872,23.47131 92951,Comuna Slivileşti,4750,GJ,181,RO,44.79198,23.10761 93017,Comuna Stăneşti,4750,GJ,181,RO,45.1305,23.25328 92987,Comuna Stejari,4750,GJ,181,RO,44.77359,23.70567 92997,Comuna Stoina,4750,GJ,181,RO,44.67998,23.64563 93579,Comuna Ţânţăreni,4750,GJ,181,RO,44.61874,23.54285 93137,Comuna Teleşti,4750,GJ,181,RO,44.98175,23.10843 93209,Comuna Turburea,4750,GJ,181,RO,44.68249,23.53171 93210,Comuna Turcineşti,4750,GJ,181,RO,45.12744,23.30333 93279,Comuna Urdari,4750,GJ,181,RO,44.79934,23.296 93456,Comuna Văgiuleşti,4750,GJ,181,RO,44.7298,23.10113 93382,Comuna Vladimir,4750,GJ,181,RO,44.82235,23.5552 93664,Costești,4750,GJ,181,RO,44.73264,23.44491 93681,Covrigi,4750,GJ,181,RO,44.73825,23.14921 93706,Crasna,4750,GJ,181,RO,45.16667,23.5 93744,Crușeț,4750,GJ,181,RO,44.63333,23.66667 94124,Dănciuleşti,4750,GJ,181,RO,44.73333,23.75 94127,Dăneşti,4750,GJ,181,RO,44.96667,23.33333 93960,Dobrița,4750,GJ,181,RO,45.13504,23.17406 94046,Drăgoteşti,4750,GJ,181,RO,44.8,23.16667 94051,Drăguţeşti,4750,GJ,181,RO,44.96667,23.23333 94265,Fărcăşeşti,4750,GJ,181,RO,44.86667,23.2 94188,Florești,4750,GJ,181,RO,44.61918,23.52838 94364,Glogova,4750,GJ,181,RO,44.92806,22.90667 94369,Godineşti,4750,GJ,181,RO,45.0,22.96667 94581,Hurezani,4750,GJ,181,RO,44.8,23.65 94677,Ioneşti,4750,GJ,181,RO,44.61667,23.43333 94753,Jupâneşti,4750,GJ,181,RO,44.9,23.53333 94774,Leleşti,4750,GJ,181,RO,45.1,23.2 94793,Licurici,4750,GJ,181,RO,44.91667,23.61667 94829,Logreşti,4750,GJ,181,RO,44.9,23.7 94830,Logrești Moșteni,4750,GJ,181,RO,44.90663,23.7048 95290,Mătăsari,4750,GJ,181,RO,44.85,23.08333 95078,Motru,4750,GJ,181,RO,44.80333,22.97194 95159,Municipiul Motru,4750,GJ,181,RO,44.81422,22.98229 95192,Municipiul Târgu Jiu,4750,GJ,181,RO,45.05278,23.27708 95210,Muşeteşti,4750,GJ,181,RO,45.15,23.46667 95311,Negomir,4750,GJ,181,RO,44.83333,23.16667 95357,Novaci,4750,GJ,181,RO,45.16462,23.66839 95477,Oraş Bumbeşti-Jiu,4750,GJ,181,RO,45.14429,23.38185 95578,Oraş Rovinari,4750,GJ,181,RO,44.93857,23.15598 95606,Oraş Târgu Cãrbuneşti,4750,GJ,181,RO,44.9655,23.49567 95632,Oraş Ţicleni,4750,GJ,181,RO,44.88344,23.38921 95603,Oraş Tismana,4750,GJ,181,RO,45.04464,22.93803 95605,Oraş Turceni,4750,GJ,181,RO,44.71779,23.35419 95693,Padeş,4750,GJ,181,RO,45.01667,22.85 95763,Peșteana de Jos,4750,GJ,181,RO,44.83333,23.26974 95762,Peșteana Jiu,4750,GJ,181,RO,44.84695,23.30401 95760,Peştişani,4750,GJ,181,RO,45.06667,23.03333 95796,Piscoiu,4750,GJ,181,RO,44.85211,23.75387 95825,Plopşoru,4750,GJ,181,RO,44.78333,23.35 95830,Ploștina,4750,GJ,181,RO,44.82398,22.98791 95839,Pociovaliștea,4750,GJ,181,RO,45.15315,23.64392 95841,Pocruia,4750,GJ,181,RO,45.0447,22.92495 95861,Poiana,4750,GJ,181,RO,44.65174,23.53148 95898,Pojogeni,4750,GJ,181,RO,44.99119,23.48425 95901,Polovragi,4750,GJ,181,RO,45.18333,23.8 95952,Prigoria,4750,GJ,181,RO,45.06667,23.68333 96128,Roşia de Amaradia,4750,GJ,181,RO,45.05,23.75 96122,Rovinari,4750,GJ,181,RO,44.91667,23.18333 96154,Runcu,4750,GJ,181,RO,45.11667,23.13333 105994,Săcelu,4750,GJ,181,RO,45.1,23.53333 96238,Samarineşti,4750,GJ,181,RO,44.75,23.05 96517,Sâmbotin,4750,GJ,181,RO,45.13333,23.33333 106044,Săuleşti,4750,GJ,181,RO,44.8,23.48333 96276,Scoarţa,4750,GJ,181,RO,45.01667,23.45 96367,Slivileşti,4750,GJ,181,RO,44.78333,23.13333 96402,Sohodol,4750,GJ,181,RO,45.05531,22.88194 96478,Stăneşti,4750,GJ,181,RO,45.11667,23.25 96425,Stejari,4750,GJ,181,RO,44.76667,23.68333 96430,Sterpoaia,4750,GJ,181,RO,44.79058,23.43601 96440,Stoina,4750,GJ,181,RO,44.68333,23.63333 97111,Ţânţăreni,4750,GJ,181,RO,44.6,23.48333 96582,Târgu Cărbuneşti,4750,GJ,181,RO,44.95,23.51667 96584,Târgu Jiu,4750,GJ,181,RO,45.05,23.28333 106080,Teleşti,4750,GJ,181,RO,45.0,23.08333 97104,Ţicleni,4750,GJ,181,RO,44.88333,23.4 106107,Tismana,4750,GJ,181,RO,45.05,22.96667 96552,Turburea,4750,GJ,181,RO,44.71667,23.51667 96553,Turceni,4750,GJ,181,RO,44.68333,23.36667 96555,Turcineşti,4750,GJ,181,RO,45.1,23.33333 96673,Urdari,4750,GJ,181,RO,44.8,23.3 96957,Văgiuleşti,4750,GJ,181,RO,44.71667,23.08333 96737,Valea Mare,4750,GJ,181,RO,45.11263,23.08004 96812,Vierșani,4750,GJ,181,RO,44.87875,23.5312 96869,Vlăduleni,4750,GJ,181,RO,44.88857,23.23727 96884,Voiteștii din Vale,4750,GJ,181,RO,45.08746,23.42145 90003,Atid,4749,HR,181,RO,46.45,25.05 90010,Avrămeşti,4749,HR,181,RO,46.33333,25.01667 90493,Băile Tuşnad,4749,HR,181,RO,46.15,25.85 90503,Bălan,4749,HR,181,RO,46.6505,25.80834 90054,Bancu,4749,HR,181,RO,46.30291,25.94422 90134,Bilbor,4749,HR,181,RO,47.05,25.51667 90234,Borsec,4749,HR,181,RO,46.95,25.56667 90323,Brădeşti,4749,HR,181,RO,46.35,25.35 93863,Căpâlniţa,4749,HR,181,RO,46.36667,25.51667 93820,Cârţa,4749,HR,181,RO,46.53333,25.75 90694,Ciceu,4749,HR,181,RO,46.41328,25.78204 90739,Ciucani,4749,HR,181,RO,46.25701,25.94744 90742,Ciucsângeorgiu,4749,HR,181,RO,46.31667,25.95 90749,Ciumani,4749,HR,181,RO,46.68333,25.51667 90901,Comuna Atid,4749,HR,181,RO,46.45844,25.04357 90907,Comuna Avrămeşti,4749,HR,181,RO,46.364,25.03223 90987,Comuna Bilbor,4749,HR,181,RO,47.05615,25.49989 91113,Comuna Brădeşti,4749,HR,181,RO,46.35788,25.35195 91585,Comuna Căpâlniţa,4749,HR,181,RO,46.36047,25.51515 91555,Comuna Cârţa,4749,HR,181,RO,46.54068,25.76275 91330,Comuna Ciceu,4749,HR,181,RO,46.41271,25.76585 91364,Comuna Ciucsângeorgiu,4749,HR,181,RO,46.33942,25.9986 91369,Comuna Ciumani,4749,HR,181,RO,46.67821,25.51825 91430,Comuna Corbu,4749,HR,181,RO,46.99559,25.65696 91448,Comuna Corund,4749,HR,181,RO,46.4806,25.2007 91469,Comuna Cozmeni,4749,HR,181,RO,46.20934,25.94274 91740,Comuna Dăneşti,4749,HR,181,RO,46.51712,25.74989 91728,Comuna Dârjiu,4749,HR,181,RO,46.20378,25.17462 91607,Comuna Dealu,4749,HR,181,RO,46.3707,25.30599 91630,Comuna Ditrău,4749,HR,181,RO,46.84564,25.5274 91757,Comuna Feliceni,4749,HR,181,RO,46.27909,25.2743 91784,Comuna Frumoasa,4749,HR,181,RO,46.44683,25.86759 91983,Comuna Gălăuţaş,4749,HR,181,RO,46.90028,25.39118 92130,Comuna Joseni,4749,HR,181,RO,46.69525,25.46114 92225,Comuna Lăzarea,4749,HR,181,RO,46.76626,25.53875 92148,Comuna Leliceni,4749,HR,181,RO,46.349,25.84911 92192,Comuna Lueta,4749,HR,181,RO,46.28724,25.53719 92206,Comuna Lunca de Jos,4749,HR,181,RO,46.59868,25.96582 92207,Comuna Lunca de Sus,4749,HR,181,RO,46.51853,25.95575 92215,Comuna Lupeni,4749,HR,181,RO,46.39565,25.21905 92383,Comuna Mădăraş,4749,HR,181,RO,46.49472,25.7475 92414,Comuna Mărtiniş,4749,HR,181,RO,46.22996,25.38756 92259,Comuna Mereşti,4749,HR,181,RO,46.23458,25.46099 92282,Comuna Mihăileni,4749,HR,181,RO,46.48874,25.83027 92355,Comuna Mugeni,4749,HR,181,RO,46.26544,25.19498 92476,Comuna Ocland,4749,HR,181,RO,46.16242,25.42557 92712,Comuna Pãuleni-Ciuc,4749,HR,181,RO,46.40073,25.84076 92605,Comuna Plãieşii De Jos,4749,HR,181,RO,46.21626,26.09436 92662,Comuna Porumbeni,4749,HR,181,RO,46.27415,25.12006 92668,Comuna Praid,4749,HR,181,RO,46.54844,25.14717 92740,Comuna Racu,4749,HR,181,RO,46.45397,25.77098 92764,Comuna Remetea,4749,HR,181,RO,46.81908,25.42286 93080,Comuna Săcel,4749,HR,181,RO,46.32872,24.91795 93051,Comuna Sâncrăieni,4749,HR,181,RO,46.30575,25.8459 93052,Comuna Sândominic,4749,HR,181,RO,46.57933,25.79305 93055,Comuna Sânmartin,4749,HR,181,RO,46.26368,25.95348 93065,Comuna Sânsimion,4749,HR,181,RO,46.25015,25.89196 93068,Comuna Sântimbru,4749,HR,181,RO,46.27664,25.81054 93107,Comuna Sărmaş,4749,HR,181,RO,46.8868,25.44289 92880,Comuna Satu Mare,4749,HR,181,RO,46.34082,25.38378 92915,Comuna Secuieni,4749,HR,181,RO,46.27623,24.96946 92927,Comuna Siculeni,4749,HR,181,RO,46.43537,25.75409 92937,Comuna Simoneşti,4749,HR,181,RO,46.35466,25.11325 93024,Comuna Subcetate,4749,HR,181,RO,46.85645,25.40652 93040,Comuna Suseni,4749,HR,181,RO,46.6435,25.56479 93166,Comuna Tomeşti,4749,HR,181,RO,46.55617,25.77922 93204,Comuna Tulgheş,4749,HR,181,RO,46.92544,25.75328 93221,Comuna Tuşnad,4749,HR,181,RO,46.20745,25.90305 93257,Comuna Ulieş,4749,HR,181,RO,46.21153,25.27048 93467,Comuna Vărşag,4749,HR,181,RO,46.53155,25.339 93408,Comuna Voşlãbeni,4749,HR,181,RO,46.63582,25.65282 93475,Comuna Zetea,4749,HR,181,RO,46.46047,25.42823 93619,Corbu,4749,HR,181,RO,46.98333,25.7 93651,Corund,4749,HR,181,RO,46.46667,25.18333 93685,Cozmeni,4749,HR,181,RO,46.22678,25.94209 93727,Cristuru Secuiesc,4749,HR,181,RO,46.28333,25.03333 94128,Dăneşti,4749,HR,181,RO,46.51667,25.75 94109,Dârjiu,4749,HR,181,RO,46.2,25.2 93900,Dealu,4749,HR,181,RO,46.4,25.3 93941,Ditrău,4749,HR,181,RO,46.81667,25.51667 94140,Eliseni,4749,HR,181,RO,46.29235,24.93724 94155,Feliceni,4749,HR,181,RO,46.26667,25.26667 94172,Filiaș,4749,HR,181,RO,46.27075,25.0212 94206,Frumoasa,4749,HR,181,RO,46.45,25.85 94506,Gălăuţaş,4749,HR,181,RO,46.91667,25.43333 94303,Gheorgheni,4749,HR,181,RO,46.72292,25.60055 94545,Hodoșa,4749,HR,181,RO,46.86558,25.4462 94663,Imper,4749,HR,181,RO,46.21667,26.1 94669,Ineu,4749,HR,181,RO,46.5453,25.76357 94748,Joseni,4749,HR,181,RO,46.7,25.5 94900,Lăzarea,4749,HR,181,RO,46.75,25.53333 94775,Leliceni,4749,HR,181,RO,46.34713,25.84782 94844,Lueta,4749,HR,181,RO,46.26667,25.48333 94871,Lunca de Jos,4749,HR,181,RO,46.56667,25.98333 94872,Lunca de Sus,4749,HR,181,RO,46.53333,25.96667 94885,Lupeni,4749,HR,181,RO,46.38333,25.21667 95235,Mădăraș,4749,HR,181,RO,46.49472,25.7475 95280,Mărtiniş,4749,HR,181,RO,46.23333,25.38333 94955,Mereşti,4749,HR,181,RO,46.23333,25.45 94973,Miercurea-Ciuc,4749,HR,181,RO,46.35,25.8 94992,Mihăileni,4749,HR,181,RO,46.46667,25.81667 95028,Misentea,4749,HR,181,RO,46.32714,25.89506 95099,Mugeni,4749,HR,181,RO,46.25,25.21667 95104,Municipiul Topliţa,4749,HR,181,RO,46.93701,25.36052 95145,Municipiul Gheorgheni,4749,HR,181,RO,46.72268,25.59917 95156,Municipiul Miercurea Ciuc,4749,HR,181,RO,46.36091,25.79985 95160,Municipiul Odorheiu Secuiesc,4749,HR,181,RO,46.30646,25.29551 95340,Nicolești,4749,HR,181,RO,46.43918,25.84446 95393,Ocland,4749,HR,181,RO,46.16667,25.41667 95397,Ocna de Jos,4749,HR,181,RO,46.52635,25.12945 95398,Ocna de Sus,4749,HR,181,RO,46.52729,25.15131 95410,Odorheiu Secuiesc,4749,HR,181,RO,46.3,25.3 95485,Oraş Bãile Tuşnad,4749,HR,181,RO,46.14707,25.86013 95486,Oraş Bãlan,4749,HR,181,RO,46.6574,25.80554 95467,Oraş Borsec,4749,HR,181,RO,46.96551,25.56173 95500,Oraş Cristuru Secuiesc,4749,HR,181,RO,46.2839,25.04583 95620,Oraş Vlãhiţa,4749,HR,181,RO,46.37412,25.57625 96028,Păuleni-Ciuc,4749,HR,181,RO,46.4,25.83333 95923,Porumbenii Mari,4749,HR,181,RO,46.27549,25.1362 95938,Praid,4749,HR,181,RO,46.55,25.13333 96049,Racu,4749,HR,181,RO,46.45178,25.7606 96081,Remetea,4749,HR,181,RO,46.78333,25.45 105991,Săcel,4749,HR,181,RO,46.3,24.93333 96524,Sâncrai,4749,HR,181,RO,46.36667,25.31667 96527,Sâncrăieni,4749,HR,181,RO,46.31439,25.83941 96528,Sândominic,4749,HR,181,RO,46.584,25.78028 96533,Sânmartin,4749,HR,181,RO,46.26667,25.93333 96546,Sânsimion,4749,HR,181,RO,46.25,25.88333 105978,Sântimbru,4749,HR,181,RO,46.28126,25.85439 106032,Sărmaş,4749,HR,181,RO,46.88333,25.46667 96255,Satu Mare,4749,HR,181,RO,46.34082,25.38378 96335,Siculeni,4749,HR,181,RO,46.41667,25.75 96349,Simoneşti,4749,HR,181,RO,46.33333,25.1 96486,Subcetate,4749,HR,181,RO,46.85,25.45 96510,Suseni,4749,HR,181,RO,46.66667,25.55 96625,Tăureni,4749,HR,181,RO,46.26667,25.25 106123,Tomești,4749,HR,181,RO,46.55617,25.77922 106174,Tulgheş,4749,HR,181,RO,46.95,25.76667 96574,Tuşnad,4749,HR,181,RO,46.2,25.9 96575,Tușnadu Nou,4749,HR,181,RO,46.19364,25.88757 96707,Vale,4749,HR,181,RO,46.9491,25.37869 96748,Valea Rece,4749,HR,181,RO,46.62082,25.95827 96757,Valea Strâmbă,4749,HR,181,RO,46.69429,25.59956 96976,Vărşag,4749,HR,181,RO,46.51667,25.35 96870,Vlăhiţa,4749,HR,181,RO,46.35,25.51667 96895,Voșlăbeni,4749,HR,181,RO,46.65,25.63333 96988,Zencani,4749,HR,181,RO,46.927,25.33411 96990,Zetea,4749,HR,181,RO,46.38333,25.36667 89965,Aninoasa,4721,HD,181,RO,45.40924,23.31505 90476,Băcia,4721,HD,181,RO,45.8,23.01667 90033,Baia de Criş,4721,HD,181,RO,46.16667,22.71667 90497,Băiţa,4721,HD,181,RO,46.03333,22.9 90051,Balşa,4721,HD,181,RO,46.03333,23.11667 90537,Băniţa,4721,HD,181,RO,45.45,23.26667 90063,Baru,4721,HD,181,RO,45.47218,23.16271 90064,Baru Mic,4721,HD,181,RO,45.46667,23.15 90066,Barza,4721,HD,181,RO,46.1199,22.85695 90553,Bătrâna,4721,HD,181,RO,45.78333,22.58333 90111,Beriu,4721,HD,181,RO,45.78333,23.18333 90167,Blăjeni,4721,HD,181,RO,46.23333,22.9 90255,Boşorod,4721,HD,181,RO,45.68333,23.08333 90260,Brad,4721,HD,181,RO,46.13333,22.78333 90338,Brănişca,4721,HD,181,RO,45.91667,22.78333 90278,Brazi,4721,HD,181,RO,45.48716,22.8404 90298,Bretea Română,4721,HD,181,RO,45.66085,23.01739 90345,Buceş,4721,HD,181,RO,46.18333,22.93333 90351,Bucium-Orlea,4721,HD,181,RO,45.58333,22.96667 90364,Bucureşci,4721,HD,181,RO,46.13333,22.9 90406,Bulzeștii de Sus,4721,HD,181,RO,46.3007,22.76118 90413,Bunila,4721,HD,181,RO,45.7,22.66667 90418,Burjuc,4721,HD,181,RO,45.95,22.48333 93831,Călan,4721,HD,181,RO,45.73333,22.98333 93811,Cârjiţi,4721,HD,181,RO,45.85,22.83333 93875,Căstău,4721,HD,181,RO,45.81465,23.21173 90622,Cerbăl,4721,HD,181,RO,45.78333,22.71667 90640,Certeju de Sus,4721,HD,181,RO,45.96667,22.96667 91205,Comuna Băcia,4721,HD,181,RO,45.80832,23.0253 90918,Comuna Baia de Criş,4721,HD,181,RO,46.18227,22.70027 91209,Comuna Băiţa,4721,HD,181,RO,46.02424,22.89087 90932,Comuna Balşa,4721,HD,181,RO,46.04738,23.06886 91235,Comuna Băniţa,4721,HD,181,RO,45.45636,23.23214 90938,Comuna Baru,4721,HD,181,RO,45.47912,23.15132 91246,Comuna Bătrâna,4721,HD,181,RO,45.80901,22.58859 90970,Comuna Beriu,4721,HD,181,RO,45.76347,23.23126 91010,Comuna Blăjeni,4721,HD,181,RO,46.25491,22.90335 91069,Comuna Boşorod,4721,HD,181,RO,45.63805,23.1299 91124,Comuna Brănişca,4721,HD,181,RO,45.97185,22.76723 91096,Comuna Bretea Română,4721,HD,181,RO,45.66021,23.01665 91126,Comuna Buceş,4721,HD,181,RO,46.1913,22.97718 91139,Comuna Bucureşci,4721,HD,181,RO,46.12392,22.93047 91161,Comuna Bulzeştii De Sus,4721,HD,181,RO,46.29383,22.77766 91167,Comuna Bunila,4721,HD,181,RO,45.69454,22.65763 91170,Comuna Burjuc,4721,HD,181,RO,45.971,22.50164 91550,Comuna Cârjiţi,4721,HD,181,RO,45.84678,22.83467 91287,Comuna Cerbăl,4721,HD,181,RO,45.78603,22.68059 91297,Comuna Certeju de Sus,4721,HD,181,RO,45.97437,22.98863 91505,Comuna Crişcior,4721,HD,181,RO,46.12326,22.8659 91613,Comuna Densuş,4721,HD,181,RO,45.56403,22.77805 91633,Comuna Dobra,4721,HD,181,RO,45.88654,22.58817 91837,Comuna General Berthelot,4721,HD,181,RO,45.61164,22.88795 91840,Comuna Ghelari,4721,HD,181,RO,45.7181,22.77414 91958,Comuna Gurasada,4721,HD,181,RO,45.98515,22.58854 92045,Comuna Hărău,4721,HD,181,RO,45.90555,22.98136 92070,Comuna Ilia,4721,HD,181,RO,45.94059,22.67861 92218,Comuna Lãpugiu De Jos,4721,HD,181,RO,45.89222,22.45747 92146,Comuna Lelese,4721,HD,181,RO,45.73754,22.68923 92202,Comuna Lunca Cernii De Jos,4721,HD,181,RO,45.64302,22.58438 92210,Comuna Luncoiu De Jos,4721,HD,181,RO,46.06807,22.79112 92413,Comuna Mărtineşti,4721,HD,181,RO,45.79278,23.11998 92513,Comuna Orăştioara de Sus,4721,HD,181,RO,45.7015,23.18208 92561,Comuna Pestişu Mic,4721,HD,181,RO,45.80178,22.83551 92693,Comuna Pui,4721,HD,181,RO,45.51086,23.08463 92836,Comuna Răchitova,4721,HD,181,RO,45.60982,22.76739 92747,Comuna Rapoltu Mare,4721,HD,181,RO,45.87904,23.11543 92827,Comuna Râu de Mori,4721,HD,181,RO,45.50717,22.86463 92770,Comuna Ribiţa,4721,HD,181,RO,46.20595,22.79638 92783,Comuna Romos,4721,HD,181,RO,45.82922,23.30902 93075,Comuna Sãlaşu De Sus,4721,HD,181,RO,45.50425,22.97422 93069,Comuna Sântămăria-Orlea,4721,HD,181,RO,45.58333,22.96667 92876,Comuna Sarmizegetusa,4721,HD,181,RO,45.50996,22.76955 93538,Comuna Şoimuş,4721,HD,181,RO,45.94589,22.86298 93139,Comuna Teliucu Inferior,4721,HD,181,RO,45.69866,22.87925 93167,Comuna Tomeşti,4721,HD,181,RO,46.22454,22.67017 93177,Comuna Topliţa,4721,HD,181,RO,45.66897,22.77399 93184,Comuna Toteşti,4721,HD,181,RO,45.57137,22.89023 93212,Comuna Turdaş,4721,HD,181,RO,45.84766,23.13189 93462,Comuna Vălişoara,4721,HD,181,RO,46.02285,22.82527 93337,Comuna Vaţa De Jos,4721,HD,181,RO,46.18432,22.58002 93349,Comuna Veţel,4721,HD,181,RO,45.87424,22.76738 93407,Comuna Vorţa,4721,HD,181,RO,46.03672,22.67226 93471,Comuna Zam,4721,HD,181,RO,46.0458,22.48786 93734,Crişcior,4721,HD,181,RO,46.11667,22.86667 93726,Cristur,4721,HD,181,RO,45.82936,22.94323 93919,Densuş,4721,HD,181,RO,45.58333,22.8 93928,Deva,4721,HD,181,RO,45.88333,22.9 93949,Dobra,4721,HD,181,RO,45.91667,22.56667 94291,General Berthelot,4721,HD,181,RO,45.61667,22.88333 94292,Geoagiu,4721,HD,181,RO,45.91667,23.2 94298,Ghelari,4721,HD,181,RO,45.71667,22.78333 94469,Gurasada,4721,HD,181,RO,45.95483,22.59491 94608,Hărău,4721,HD,181,RO,45.9,22.95 94609,Hărțăgani,4721,HD,181,RO,46.05012,22.92183 94525,Haţeg,4721,HD,181,RO,45.61667,22.95 94578,Hunedoara,4721,HD,181,RO,45.75,22.9 94656,Ilia,4721,HD,181,RO,45.93333,22.65 94689,Iscroni,4721,HD,181,RO,45.37794,23.34201 94743,Jiu-Paroșeni,4721,HD,181,RO,45.36175,23.26044 94895,Lăpugiu de Jos,4721,HD,181,RO,45.88333,22.48333 94773,Lelese,4721,HD,181,RO,45.73333,22.7 94862,Lunca Cernii de Jos,4721,HD,181,RO,45.63333,22.61667 94877,Luncoiu de Jos,4721,HD,181,RO,46.1,22.76667 94884,Lupeni,4721,HD,181,RO,45.36029,23.23832 95279,Mărtineşti,4721,HD,181,RO,45.81667,23.13333 95103,Municipiul Lupeni,4721,HD,181,RO,45.35654,23.22162 95105,Municipiul Vulcan,4721,HD,181,RO,45.37985,23.2748 95116,Municipiul Brad,4721,HD,181,RO,46.14073,22.81284 95136,Municipiul Deva,4721,HD,181,RO,45.84644,22.93123 95148,Municipiul Hunedoara,4721,HD,181,RO,45.76512,22.87538 95164,Municipiul Orãştie,4721,HD,181,RO,45.83841,23.19885 95167,Municipiul Petroşani,4721,HD,181,RO,45.41963,23.35692 95450,Oraş Aninoasa,4721,HD,181,RO,45.39316,23.3302 95504,Oraş Cãlan,4721,HD,181,RO,45.7394,23.01035 95523,Oraş Geoagiu,4721,HD,181,RO,45.94835,23.20022 95528,Oraş Haţeg,4721,HD,181,RO,45.62512,22.92275 95566,Oraş Petrila,4721,HD,181,RO,45.45352,23.43697 95587,Oraş Simeria,4721,HD,181,RO,45.85296,23.00748 95612,Oraş Uricani,4721,HD,181,RO,45.31733,23.08005 95665,Orăştie,4721,HD,181,RO,45.83333,23.2 95666,Orăştioara de Sus,4721,HD,181,RO,45.73333,23.16667 95765,Peștișu Mare,4721,HD,181,RO,45.80192,22.92704 95761,Peştişu Mic,4721,HD,181,RO,45.8,22.88333 95752,Petrila,4721,HD,181,RO,45.45,23.41667 95756,Petroşani,4721,HD,181,RO,45.41667,23.36667 95950,Pricaz,4721,HD,181,RO,45.85929,23.17266 95977,Pui,4721,HD,181,RO,45.51667,23.1 96187,Răchitova,4721,HD,181,RO,45.6,22.75 96059,Rapoltu Mare,4721,HD,181,RO,45.86667,23.06667 96176,Râu de Mori,4721,HD,181,RO,45.48333,22.85 96092,Ribiţa,4721,HD,181,RO,46.18333,22.76667 96107,Romos,4721,HD,181,RO,45.83333,23.28333 106007,Sălaşu de Sus,4721,HD,181,RO,45.51667,22.95 105981,Sântămăria-Orlea,4721,HD,181,RO,45.58874,22.97042 96247,Sarmizegetusa,4721,HD,181,RO,45.51667,22.78333 96346,Simeria,4721,HD,181,RO,45.85,23.01667 97067,Şoimuş,4721,HD,181,RO,45.91667,22.9 106082,Teliucu Inferior,4721,HD,181,RO,45.71667,22.88333 106122,Tomeşti,4721,HD,181,RO,46.21667,22.65 106132,Topliţa,4721,HD,181,RO,45.68333,22.78333 106142,Toteşti,4721,HD,181,RO,45.56667,22.88333 96559,Turdaş,4721,HD,181,RO,45.85,23.11667 96677,Uricani,4721,HD,181,RO,45.33731,23.1524 96968,Vălişoara,4721,HD,181,RO,46.05,22.85 96780,Vaţa de Jos,4721,HD,181,RO,46.18333,22.6 96798,Veţel,4721,HD,181,RO,45.9,22.81667 96894,Vorţa,4721,HD,181,RO,46.01667,22.68333 96901,Vulcan,4721,HD,181,RO,45.38333,23.26667 96983,Zam,4721,HD,181,RO,46.0,22.45 96985,Zdrapți,4721,HD,181,RO,46.15612,22.86954 89887,Adâncata,4743,IL,181,RO,44.76667,26.43333 89915,Albeşti,4743,IL,181,RO,44.53333,27.13333 89929,Alexeni,4743,IL,181,RO,44.68333,26.7 89947,Amara,4743,IL,181,RO,44.61667,27.31667 89959,Andrăşeşti,4743,IL,181,RO,44.56667,27.13333 89996,Armăşeşti,4743,IL,181,RO,44.75,26.58333 90012,Axintele,4743,IL,181,RO,44.6,26.78333 90038,Balaciu,4743,IL,181,RO,44.63333,26.88333 90539,Bărbulești,4743,IL,181,RO,44.72629,26.59929 90542,Bărcăneşti,4743,IL,181,RO,44.63333,26.65 90235,Borănești,4743,IL,181,RO,44.66069,26.60505 90227,Borduşani,4743,IL,181,RO,44.48333,27.9 90313,Broșteni,4743,IL,181,RO,44.67192,26.74787 90363,Bucu,4743,IL,181,RO,44.60532,27.49337 90390,Buești,4743,IL,181,RO,44.54473,27.18729 90403,Buliga,4743,IL,181,RO,44.35731,27.79225 93884,Căzăneşti,4743,IL,181,RO,44.61667,27.01667 90607,Cegani,4743,IL,181,RO,44.46279,27.90175 90710,Ciocârlia,4743,IL,181,RO,44.8,26.66667 90707,Ciochina,4743,IL,181,RO,44.58333,27.06667 90747,Ciulniţa,4743,IL,181,RO,44.53333,27.35 90780,Cocora,4743,IL,181,RO,44.73333,27.05 90794,Colelia,4743,IL,181,RO,44.76112,27.00693 90825,Comuna Adâncata,4743,IL,181,RO,44.76691,26.4301 90840,Comuna Albeşti,4743,IL,181,RO,44.53575,27.12464 90851,Comuna Alexeni,4743,IL,181,RO,44.67966,26.71064 90871,Comuna Andrăşeşti,4743,IL,181,RO,44.57648,27.12438 90895,Comuna Armăşeşti,4743,IL,181,RO,44.76397,26.57999 90909,Comuna Axintele,4743,IL,181,RO,44.58688,26.78809 90922,Comuna Balaciu,4743,IL,181,RO,44.60985,26.88277 91236,Comuna Bărbuleşti,4743,IL,181,RO,44.72629,26.59929 91240,Comuna Bărcăneşti,4743,IL,181,RO,44.63517,26.66786 91054,Comuna Borăneşti,4743,IL,181,RO,44.66355,26.59486 91049,Comuna Borduşani,4743,IL,181,RO,44.47236,27.90315 91138,Comuna Bucu,4743,IL,181,RO,44.60663,27.49432 91151,Comuna Bueşti,4743,IL,181,RO,44.54473,27.18729 91343,Comuna Ciocârlia,4743,IL,181,RO,44.78828,26.67002 91341,Comuna Ciochina,4743,IL,181,RO,44.57524,27.02475 91368,Comuna Ciulniţa,4743,IL,181,RO,44.51976,27.28461 91388,Comuna Cocora,4743,IL,181,RO,44.73752,27.0476 91397,Comuna Colelia,4743,IL,181,RO,44.76112,27.00693 91462,Comuna Cosâmbeşti,4743,IL,181,RO,44.56104,27.45846 91474,Comuna Coşereni,4743,IL,181,RO,44.6854,26.56101 91689,Comuna Drăgoeşti,4743,IL,181,RO,44.58767,26.52057 91680,Comuna Dridu,4743,IL,181,RO,44.70391,26.45311 91818,Comuna Făcăeni,4743,IL,181,RO,44.56878,27.88087 91966,Comuna Gârbovi,4743,IL,181,RO,44.78651,26.7696 91842,Comuna Gheorghe Doja,4743,IL,181,RO,44.61333,27.18388 91843,Comuna Gheorghe Lazăr,4743,IL,181,RO,44.63278,27.45815 91876,Comuna Giurgeni,4743,IL,181,RO,44.74435,27.85638 91917,Comuna Grindu,4743,IL,181,RO,44.77212,26.90952 91921,Comuna Griviţa,4743,IL,181,RO,44.72969,27.32227 91948,Comuna Gura Ialomiţei,4743,IL,181,RO,44.73165,27.74035 92084,Comuna Ion Roată,4743,IL,181,RO,44.66757,26.76803 92124,Comuna Jilavele,4743,IL,181,RO,44.77522,26.52478 92230,Comuna Maia,4743,IL,181,RO,44.73616,26.40151 92238,Comuna Manasia,4743,IL,181,RO,44.70648,26.67346 92406,Comuna Mărculeşti,4743,IL,181,RO,44.56698,27.51562 92276,Comuna Mihail Kogălniceanu,4743,IL,181,RO,44.66216,27.7343 92292,Comuna Miloşeşti,4743,IL,181,RO,44.7582,27.20338 92326,Comuna Moldoveni,4743,IL,181,RO,44.71425,26.51879 92337,Comuna Movila,4743,IL,181,RO,44.53747,27.71771 92343,Comuna Moviliţa,4743,IL,181,RO,44.61784,26.48006 92357,Comuna Munteni Buzău,4743,IL,181,RO,44.63838,26.97288 92485,Comuna Ograda,4743,IL,181,RO,44.61457,27.57047 92551,Comuna Perieţi,4743,IL,181,RO,44.57191,27.26027 92591,Comuna Platoneşti,4743,IL,181,RO,44.60713,27.68637 92845,Comuna Răduleşti,4743,IL,181,RO,44.77609,26.33987 92769,Comuna Reviga,4743,IL,181,RO,44.69251,27.10866 92802,Comuna Roşiori,4743,IL,181,RO,44.61265,26.53496 93095,Comuna Sălcioara,4743,IL,181,RO,44.53755,26.90312 93111,Comuna Sărăţeni,4743,IL,181,RO,44.63422,26.92686 93116,Comuna Săveni,4743,IL,181,RO,44.60868,27.62061 92902,Comuna Scânteia,4743,IL,181,RO,44.73262,27.44334 92923,Comuna Sfântu Gheorghe,4743,IL,181,RO,44.64735,26.84315 92942,Comuna Sinteşti,4743,IL,181,RO,44.5626,26.41162 92953,Comuna Slobozia,4743,IL,181,RO,44.57437,27.38755 92990,Comuna Stelnica,4743,IL,181,RO,44.42585,27.88823 93028,Comuna Sudiţi,4743,IL,181,RO,44.57135,27.58215 93185,Comuna Traian,4743,IL,181,RO,44.7635,27.34337 93300,Comuna Valea Ciorii,4743,IL,181,RO,44.71456,27.53979 93318,Comuna Valea Măcrişului,4743,IL,181,RO,44.73554,26.83515 93386,Comuna Vlădeni,4743,IL,181,RO,44.60652,27.8512 93590,Condeești,4743,IL,181,RO,44.62761,26.69147 93671,Cosâmbeşti,4743,IL,181,RO,44.55929,27.43441 93690,Coşereni,4743,IL,181,RO,44.68333,26.56667 94043,Drăgoești,4743,IL,181,RO,44.56786,26.5395 94042,Drăgoeşti-Snagov,4743,IL,181,RO,44.56667,26.53333 94031,Dridu,4743,IL,181,RO,44.7,26.45 94249,Făcăeni,4743,IL,181,RO,44.56667,27.9 94160,Feteşti,4743,IL,181,RO,44.38333,27.83333 94162,Fetești-Gară,4743,IL,181,RO,44.4196,27.82536 94165,Fierbinţi-Târg,4743,IL,181,RO,44.7,26.35 94167,Fierbinții de Jos,4743,IL,181,RO,44.69523,26.39629 94168,Fierbinții de Sus,4743,IL,181,RO,44.68186,26.402 94484,Gârbovi,4743,IL,181,RO,44.78333,26.76667 94301,Gheorghe Doja,4743,IL,181,RO,44.61622,27.1874 94302,Gheorghe Lazăr,4743,IL,181,RO,44.63333,27.45 94352,Giurgeni,4743,IL,181,RO,44.76667,27.88333 94412,Grindu,4743,IL,181,RO,44.76667,26.91667 94415,Griviţa,4743,IL,181,RO,44.73333,27.28333 94455,Gura Ialomiței,4743,IL,181,RO,44.71608,27.7531 94627,Iazu,4743,IL,181,RO,44.7312,27.42074 94676,Ion Roată,4743,IL,181,RO,44.66667,26.76667 94737,Jilavele,4743,IL,181,RO,44.76667,26.53333 94890,Lăcusteni,4743,IL,181,RO,44.60715,27.67569 94839,Luciu,4743,IL,181,RO,44.74722,27.7276 94907,Maia,4743,IL,181,RO,44.73616,26.40151 94917,Malu Roșu,4743,IL,181,RO,44.78088,26.57945 94921,Manasia,4743,IL,181,RO,44.7,26.66667 95267,Mărculești,4743,IL,181,RO,44.56698,27.51562 94983,Mihail Kogălniceanu,4743,IL,181,RO,44.68333,27.73333 95006,Miloşeşti,4743,IL,181,RO,44.73333,27.23333 95064,Moldoveni,4743,IL,181,RO,44.71425,26.51879 95079,Movila,4743,IL,181,RO,44.55,27.7 95086,Moviliţa,4743,IL,181,RO,44.65,26.48333 95140,Municipiul Feteşti,4743,IL,181,RO,44.38608,27.82483 95194,Municipiul Urziceni,4743,IL,181,RO,44.71842,26.64187 95201,Munteni Buzău,4743,IL,181,RO,44.63333,26.98333 95414,Ograda,4743,IL,181,RO,44.61457,27.57047 95448,Oraş Amara,4743,IL,181,RO,44.61793,27.33411 95506,Oraş Cãzãneşti,4743,IL,181,RO,44.62514,27.01697 95516,Oraş Fierbinţi-Târg,4743,IL,181,RO,44.68292,26.38324 95633,Oraş Ţãndãrei,4743,IL,181,RO,44.64491,27.65196 95717,Patru Frați,4743,IL,181,RO,44.73672,26.47059 95732,Perieţi,4743,IL,181,RO,44.55,27.21667 95806,Platonești,4743,IL,181,RO,44.60712,27.69706 96200,Rădulești,4743,IL,181,RO,44.76667,26.35 96063,Rași,4743,IL,181,RO,44.53534,26.92485 96090,Reviga,4743,IL,181,RO,44.71667,27.1 96140,Roșiori,4743,IL,181,RO,44.61265,26.53496 96123,Rovine,4743,IL,181,RO,44.6954,27.09364 106012,Sălcioara,4743,IL,181,RO,44.53333,26.88333 106037,Sărățeni,4743,IL,181,RO,44.63422,26.92686 106045,Săveni,4743,IL,181,RO,44.6,27.65 96293,Scânteia,4743,IL,181,RO,44.73404,27.46593 96329,Sfântu Gheorghe,4743,IL,181,RO,44.65,26.83333 96353,Sineşti,4743,IL,181,RO,44.56667,26.38333 96373,Slobozia,4743,IL,181,RO,44.5647,27.3633 96387,Smirna,4743,IL,181,RO,44.72405,27.35478 96429,Stelnica,4743,IL,181,RO,44.41667,27.88333 96493,Sudiţi,4743,IL,181,RO,44.58333,27.6 97112,Ţăndărei,4743,IL,181,RO,44.65,27.66667 106144,Traian,4743,IL,181,RO,44.7635,27.34337 96688,Urziceni,4743,IL,181,RO,44.71667,26.63333 96715,Valea Ciorii,4743,IL,181,RO,44.71667,27.56667 96742,Valea Măcrișului,4743,IL,181,RO,44.74379,26.83015 96860,Vlădeni,4743,IL,181,RO,44.61667,27.88333 96858,Vlașca,4743,IL,181,RO,44.39664,27.84865 89926,Alexandru I. Cuza,4735,IS,181,RO,47.13333,26.85 89958,Andrieşeni,4735,IS,181,RO,47.53333,27.28333 89997,Aroneanu,4735,IS,181,RO,47.2,27.6 90480,Bădeni,4735,IS,181,RO,47.40581,26.94898 90052,Balș,4735,IS,181,RO,47.29628,26.97856 90526,Bălţaţi,4735,IS,181,RO,47.21667,27.15 90453,Bârnova,4735,IS,181,RO,47.06667,27.61667 90084,Belceşti,4735,IS,181,RO,47.3,27.08333 90152,Bivolari,4735,IS,181,RO,47.53333,27.43333 90201,Bohotin,4735,IS,181,RO,46.93914,27.97782 90232,Borosoaia,4735,IS,181,RO,47.463,27.09862 90241,Bosia,4735,IS,181,RO,47.21696,27.76707 90251,Boureni,4735,IS,181,RO,47.26497,26.97672 90325,Brădicești,4735,IS,181,RO,46.8481,27.9027 90329,Brăeşti,4735,IS,181,RO,47.15,27.1 90340,Brătești,4735,IS,181,RO,47.19135,26.6858 90289,Breazu,4735,IS,181,RO,47.21343,27.51815 90375,Buda,4735,IS,181,RO,47.40318,26.67835 90389,Budăi,4735,IS,181,RO,47.21773,27.22282 90395,Buhalnița,4735,IS,181,RO,47.37892,26.91547 90425,Butea,4735,IS,181,RO,47.06667,26.91667 90433,Buznea,4735,IS,181,RO,47.19515,27.01572 93812,Cârjoaia,4735,IS,181,RO,47.34032,26.90863 93818,Cârniceni,4735,IS,181,RO,47.33942,27.50508 90618,Cepleniţa,4735,IS,181,RO,47.38333,27.01667 90689,Chișcăreni,4735,IS,181,RO,47.46974,27.19626 90719,Ciohorăni,4735,IS,181,RO,47.1352,26.68955 90728,Ciorteşti,4735,IS,181,RO,46.9,27.83333 90757,Ciurea,4735,IS,181,RO,47.05,27.56667 90773,Coarnele Caprei,4735,IS,181,RO,47.38333,27.1 90788,Cogeasca,4735,IS,181,RO,47.16644,27.38537 90811,Comarna,4735,IS,181,RO,47.05,27.78333 90848,Comuna Alexandru I. Cuza,4735,IS,181,RO,47.14424,26.85449 90870,Comuna Andrieşeni,4735,IS,181,RO,47.51112,27.29502 90896,Comuna Aroneanu,4735,IS,181,RO,47.21584,27.60632 90931,Comuna Balş,4735,IS,181,RO,47.29219,26.96028 91227,Comuna Bălţaţi,4735,IS,181,RO,47.23366,27.11866 91190,Comuna Bârnova,4735,IS,181,RO,47.08669,27.62635 90949,Comuna Belceşti,4735,IS,181,RO,47.30581,27.08747 90999,Comuna Bivolari,4735,IS,181,RO,47.52988,27.42726 91118,Comuna Brăeşti,4735,IS,181,RO,47.16318,27.09031 91173,Comuna Butea,4735,IS,181,RO,47.08386,26.93552 91284,Comuna Cepleniţa,4735,IS,181,RO,47.37581,26.92597 91349,Comuna Ciohorãni,4735,IS,181,RO,47.1352,26.68955 91356,Comuna Ciorteşti,4735,IS,181,RO,46.91766,27.84749 91375,Comuna Ciurea,4735,IS,181,RO,47.0615,27.57572 91382,Comuna Coarnele Caprei,4735,IS,181,RO,47.40195,27.09699 91407,Comuna Comarna,4735,IS,181,RO,47.07004,27.78668 91457,Comuna Costeşti,4735,IS,181,RO,47.24224,26.91751 91461,Comuna Costuleni,4735,IS,181,RO,47.01055,27.85829 91466,Comuna Cotnari,4735,IS,181,RO,47.35813,26.91687 91471,Comuna Cozmeşti,4735,IS,181,RO,46.86032,28.01297 91496,Comuna Cristeşti,4735,IS,181,RO,47.27821,26.58525 91520,Comuna Cucuteni,4735,IS,181,RO,47.27587,26.92807 91599,Comuna Dagâţa,4735,IS,181,RO,46.94469,27.19147 91611,Comuna Deleni,4735,IS,181,RO,47.47458,26.89451 91644,Comuna Dobrovăţ,4735,IS,181,RO,46.96335,27.72245 91655,Comuna Dolheşti,4735,IS,181,RO,46.86958,27.90652 91697,Comuna Drăguşeni,4735,IS,181,RO,46.89432,27.49491 91720,Comuna Dumeşti,4735,IS,181,RO,47.17668,27.3347 91749,Comuna Erbiceni,4735,IS,181,RO,47.25219,27.24756 91807,Comuna Fântânele,4735,IS,181,RO,47.41498,27.18066 91774,Comuna Focuri,4735,IS,181,RO,47.35113,27.202 91899,Comuna Golãieşti,4735,IS,181,RO,47.26355,27.69515 91900,Comuna Gorban,4735,IS,181,RO,46.90059,28.07017 91910,Comuna Grajduri,4735,IS,181,RO,46.97069,27.55569 91925,Comuna Gropniţa,4735,IS,181,RO,47.36874,27.26376 91927,Comuna Grozeşti,4735,IS,181,RO,47.01001,28.02507 92040,Comuna Hălăuceşti,4735,IS,181,RO,47.10593,26.80967 92044,Comuna Hărmăneşti,4735,IS,181,RO,47.27087,26.81322 91995,Comuna Heleşteni,4735,IS,181,RO,47.19295,26.8806 92009,Comuna Holboca,4735,IS,181,RO,47.17512,27.68235 92020,Comuna Horleşti,4735,IS,181,RO,47.11718,27.40856 92083,Comuna Ion Neculce,4735,IS,181,RO,47.20159,27.03221 92089,Comuna Ipatele,4735,IS,181,RO,46.9039,27.43762 92155,Comuna Lespezi,4735,IS,181,RO,47.34957,26.68807 92161,Comuna Leţcani,4735,IS,181,RO,47.18012,27.41296 92211,Comuna Lungani,4735,IS,181,RO,47.17564,27.15749 92382,Comuna Mădârjac,4735,IS,181,RO,47.04094,27.27716 92297,Comuna Mirceşti,4735,IS,181,RO,47.05486,26.83945 92299,Comuna Mironeasa,4735,IS,181,RO,46.99869,27.42519 92300,Comuna Miroslava,4735,IS,181,RO,47.13047,27.51039 92301,Comuna Mirosloveşti,4735,IS,181,RO,47.13966,26.64648 92319,Comuna Mogoşeşti,4735,IS,181,RO,47.042,27.48492 92320,Comuna Mogoşeşti-Siret,4735,IS,181,RO,47.1319,26.77101 92347,Comuna Moşna,4735,IS,181,RO,46.92189,27.95956 92351,Comuna Moţca,4735,IS,181,RO,47.22407,26.61632 92341,Comuna Movileni,4735,IS,181,RO,47.32032,27.38016 92526,Comuna Oţeleni,4735,IS,181,RO,47.08566,27.0273 92604,Comuna Plugari,4735,IS,181,RO,47.47732,27.11577 92654,Comuna Popeşti,4735,IS,181,RO,47.13704,27.26169 92658,Comuna Popricani,4735,IS,181,RO,47.2675,27.52729 92679,Comuna Prisăcani,4735,IS,181,RO,47.07015,27.90795 92680,Comuna Probota,4735,IS,181,RO,47.38792,27.49446 92837,Comuna Răchiţeni,4735,IS,181,RO,47.05163,26.90504 92844,Comuna Răducăneni,4735,IS,181,RO,46.95541,27.97344 92761,Comuna Rediu-Tătar,4735,IS,181,RO,47.23169,27.48747 92787,Comuna Româneşti,4735,IS,181,RO,47.27171,27.35819 92794,Comuna Roşcani,4735,IS,181,RO,47.44259,27.41778 92808,Comuna Ruginoasa,4735,IS,181,RO,47.25259,26.85589 92901,Comuna Scânteia,4735,IS,181,RO,46.92408,27.58855 92884,Comuna Scheia,4735,IS,181,RO,46.9395,27.49765 92889,Comuna Schitu-Duca,4735,IS,181,RO,47.00255,27.76703 92892,Comuna Scobinţi,4735,IS,181,RO,47.40529,26.8985 92939,Comuna Sineşti,4735,IS,181,RO,47.12117,27.18745 93528,Comuna Şipote,4735,IS,181,RO,47.46038,27.22592 92943,Comuna Sireţel,4735,IS,181,RO,47.4184,26.73381 92998,Comuna Stolniceni-Prăjescu,4735,IS,181,RO,47.18563,26.73525 93007,Comuna Strunga,4735,IS,181,RO,47.16021,26.944 93124,Comuna Tansa,4735,IS,181,RO,46.90812,27.24808 93245,Comuna Tătăruşi,4735,IS,181,RO,47.34254,26.5859 93570,Comuna Ţibana,4735,IS,181,RO,46.98685,27.32607 93572,Comuna Ţibăneşti,4735,IS,181,RO,46.91757,27.33547 93574,Comuna Ţigănaşi,4735,IS,181,RO,47.34867,27.45588 93165,Comuna Todireşti,4735,IS,181,RO,47.32137,26.87743 93168,Comuna Tomeşti,4735,IS,181,RO,47.11704,27.70476 93193,Comuna Trifeşti,4735,IS,181,RO,47.44992,27.53175 93578,Comuna Ţuţora,4735,IS,181,RO,47.12578,27.79866 93268,Comuna Ungheni,4735,IS,181,RO,47.20176,27.74664 93310,Comuna Valea Lupului,4735,IS,181,RO,47.1792,27.49965 93321,Comuna Valea Seacă,4735,IS,181,RO,47.2884,26.66455 93432,Comuna Vânãtori,4735,IS,181,RO,47.33379,26.76404 93353,Comuna Victoria,4735,IS,181,RO,47.30749,27.6017 93388,Comuna Vlădeni,4735,IS,181,RO,47.43756,27.3356 93399,Comuna Voineşti,4735,IS,181,RO,47.07509,27.42151 93599,Conțești,4735,IS,181,RO,47.3096,26.65605 93650,Coropceni,4735,IS,181,RO,46.94193,27.8371 93665,Costești,4735,IS,181,RO,47.23428,26.92622 93669,Costuleni,4735,IS,181,RO,47.03333,27.85 93676,Cotnari,4735,IS,181,RO,47.35,26.98333 93679,Covasna,4735,IS,181,RO,47.00255,27.85106 93683,Cozia,4735,IS,181,RO,47.00319,27.89434 93686,Cozmeşti,4735,IS,181,RO,46.88333,27.98333 93719,Cristeşti,4735,IS,181,RO,47.26667,26.56667 93728,Crivești,4735,IS,181,RO,47.3243,26.7824 93742,Crucea,4735,IS,181,RO,47.16567,27.17093 93762,Cucuteni,4735,IS,181,RO,47.28333,26.93333 93887,Dagâţa,4735,IS,181,RO,46.93333,27.18333 93892,Dancu,4735,IS,181,RO,47.15417,27.66623 93915,Deleni,4735,IS,181,RO,47.46667,26.88333 93969,Dobrovăţ,4735,IS,181,RO,46.95,27.7 93983,Dolheşti,4735,IS,181,RO,46.86667,27.9 93993,Domnița,4735,IS,181,RO,47.02091,27.335 94053,Drăgușeni,4735,IS,181,RO,46.90116,27.5126 94076,Dumbrava,4735,IS,181,RO,47.07578,27.55174 94091,Dumbrăvița,4735,IS,181,RO,47.25483,26.84169 94096,Dumeşti,4735,IS,181,RO,47.18333,27.35 94144,Erbiceni,4735,IS,181,RO,47.26667,27.23333 94241,Fântânele,4735,IS,181,RO,47.41498,27.18066 94266,Fărcășeni,4735,IS,181,RO,47.15987,26.89615 94161,Fetești,4735,IS,181,RO,47.40932,26.90885 94192,Focuri,4735,IS,181,RO,47.35,27.21667 94481,Gârbești,4735,IS,181,RO,46.98333,27.3 94363,Glodenii Gândului,4735,IS,181,RO,46.95158,27.29938 94370,Goești,4735,IS,181,RO,47.15654,27.13659 94380,Golăiești,4735,IS,181,RO,47.23333,27.7 94382,Gorban,4735,IS,181,RO,46.87611,28.07889 94391,Goruni,4735,IS,181,RO,47.10389,27.71854 94400,Grajduri,4735,IS,181,RO,46.96667,27.51667 94420,Gropniţa,4735,IS,181,RO,47.35,27.25 94422,Grozeşti,4735,IS,181,RO,46.99083,28.05056 94602,Hălăuceşti,4735,IS,181,RO,47.1,26.8 94588,Hârlău,4735,IS,181,RO,47.43333,26.9 94606,Hărmăneasa,4735,IS,181,RO,47.2,26.86667 94607,Hărmăneștii Vechi,4735,IS,181,RO,47.27732,26.81394 94591,Hârtoape,4735,IS,181,RO,47.32164,26.72459 94526,Heci,4735,IS,181,RO,47.34325,26.66226 94528,Heleșteni,4735,IS,181,RO,47.20303,26.87755 94544,Hodora,4735,IS,181,RO,47.33712,27.0197 94549,Holboca,4735,IS,181,RO,47.15,27.7 94564,Horleşti,4735,IS,181,RO,47.11667,27.36667 94630,Iaşi,4735,IS,181,RO,47.16667,27.6 94628,Iazu Nou,4735,IS,181,RO,47.48272,27.20913 94675,Ion Neculce,4735,IS,181,RO,47.20344,27.05268 94683,Ipatele,4735,IS,181,RO,46.91667,27.41667 94695,Iugani,4735,IS,181,RO,47.04431,26.82891 94706,Izvoarele,4735,IS,181,RO,47.04241,26.9023 94782,Lespezi,4735,IS,181,RO,47.36667,26.7 94791,Leţcani,4735,IS,181,RO,47.18333,27.41667 94810,Liteni,4735,IS,181,RO,47.30169,27.03837 94853,Lunca,4735,IS,181,RO,47.28144,26.73708 94863,Lunca Cetățuii,4735,IS,181,RO,47.0966,27.56319 94880,Lungani,4735,IS,181,RO,47.18333,27.15 95232,Mădârjac,4735,IS,181,RO,47.04994,27.26182 95261,Mănăstirea,4735,IS,181,RO,46.95,27.2 94940,Maxut,4735,IS,181,RO,47.4404,26.89204 95014,Mirceşti,4735,IS,181,RO,47.08333,26.83333 95019,Mironeasa,4735,IS,181,RO,46.96667,27.41667 95021,Miroslava,4735,IS,181,RO,47.15,27.51667 95022,Miroslovești,4735,IS,181,RO,47.15,26.65 95053,Mogoşeşti,4735,IS,181,RO,47.03333,27.53333 95054,Mogoşeşti-Siret,4735,IS,181,RO,47.13333,26.78333 95088,Moşna,4735,IS,181,RO,46.91667,27.95 95092,Moţca,4735,IS,181,RO,47.25,26.61667 95083,Movileni,4735,IS,181,RO,47.31667,27.35 95100,Muncelu de Sus,4735,IS,181,RO,47.12384,26.73518 95150,Municipiul Iaşi,4735,IS,181,RO,47.16184,27.58451 95166,Municipiul Paşcani,4735,IS,181,RO,47.24736,26.71235 95199,Munteni,4735,IS,181,RO,47.3153,27.13839 95531,Oraş Hârlãu,4735,IS,181,RO,47.43153,26.87774 95569,Oraş Podu Iloaiei,4735,IS,181,RO,47.20807,27.26548 95607,Oraş Târgu Frumos,4735,IS,181,RO,47.20788,27.01196 95674,Osoi,4735,IS,181,RO,47.09479,27.80091 95689,Oţeleni,4735,IS,181,RO,47.08333,27.03333 95998,Pârcovaci,4735,IS,181,RO,47.43586,26.85075 95718,Paşcani,4735,IS,181,RO,47.2469,26.72291 96036,Păușești,4735,IS,181,RO,47.1581,27.32594 95730,Perieni,4735,IS,181,RO,47.38469,27.47453 95786,Pietrosu,4735,IS,181,RO,47.34118,26.60817 95831,Plugari,4735,IS,181,RO,47.48333,27.1 95849,Podolenii de Sus,4735,IS,181,RO,46.85716,28.01545 95850,Podu Iloaiei,4735,IS,181,RO,47.21667,27.26667 95862,Poiana,4735,IS,181,RO,47.49299,26.86387 95877,Poiana Mărului,4735,IS,181,RO,47.37951,26.89243 95893,Poienile,4735,IS,181,RO,46.93333,27.18333 95909,Popeşti,4735,IS,181,RO,47.15,27.23333 95919,Popricani,4735,IS,181,RO,47.3,27.51667 95956,Prisăcani,4735,IS,181,RO,47.08333,27.88333 95957,Probota,4735,IS,181,RO,47.38333,27.5 96185,Răchiteni,4735,IS,181,RO,47.05347,26.9173 96199,Răducăneni,4735,IS,181,RO,46.95,27.93333 96213,Războieni,4735,IS,181,RO,47.21754,27.05039 96075,Rediu,4735,IS,181,RO,47.21667,27.5 96110,Româneşti,4735,IS,181,RO,47.28333,27.31667 96134,Roșcani,4735,IS,181,RO,47.45581,27.40021 96148,Ruginoasa,4735,IS,181,RO,47.25,26.85 96259,Satu Nou,4735,IS,181,RO,47.32147,27.09555 96292,Scânteia,4735,IS,181,RO,46.91667,27.56667 96265,Scheia,4735,IS,181,RO,47.11725,26.88153 96273,Schitu-Duca,4735,IS,181,RO,47.03333,27.76667 96277,Scobinţi,4735,IS,181,RO,47.38333,26.93333 96352,Sineşti,4735,IS,181,RO,47.11667,27.18333 97057,Şipote,4735,IS,181,RO,47.46667,27.21667 96359,Sireţel,4735,IS,181,RO,47.4,26.73333 96371,Slobozia,4735,IS,181,RO,47.05758,27.41446 96395,Soci,4735,IS,181,RO,47.18573,26.64446 96399,Sodomeni,4735,IS,181,RO,47.22233,26.68805 96431,Sticlăria,4735,IS,181,RO,47.40115,26.83797 96442,Stolniceni-Prăjescu,4735,IS,181,RO,47.19858,26.7481 96445,Stornești,4735,IS,181,RO,47.11667,27.18333 96459,Strunga,4735,IS,181,RO,47.16667,26.98333 96497,Suhuleț,4735,IS,181,RO,46.90368,27.25849 106050,Tabăra,4735,IS,181,RO,47.57395,27.41213 106058,Tansa,4735,IS,181,RO,46.91667,27.23333 96583,Târgu Frumos,4735,IS,181,RO,47.2,27.0 96620,Tătăruşi,4735,IS,181,RO,47.35,26.6 97101,Ţibana,4735,IS,181,RO,46.98333,27.33333 97103,Ţibăneşti,4735,IS,181,RO,46.91667,27.33333 97106,Ţigănaşi,4735,IS,181,RO,47.33333,27.46667 106115,Todireşti,4735,IS,181,RO,47.31667,26.83333 106121,Tomeşti,4735,IS,181,RO,47.11667,27.68333 106129,Topile,4735,IS,181,RO,47.2634,26.66883 106143,Totoești,4735,IS,181,RO,47.25107,27.28879 106156,Trifeşti,4735,IS,181,RO,47.45,27.51667 97110,Ţuţora,4735,IS,181,RO,47.13333,27.78333 96634,Uda,4735,IS,181,RO,47.33645,26.57165 96732,Valea Lupului,4735,IS,181,RO,47.1792,27.49965 96753,Valea Seacă,4735,IS,181,RO,47.29219,26.66876 96930,Vânători,4735,IS,181,RO,47.23333,27.53333 96792,Verșeni,4735,IS,181,RO,47.11294,26.64341 96805,Victoria,4735,IS,181,RO,47.28333,27.58333 96862,Vlădeni,4735,IS,181,RO,47.41667,27.33333 96881,Voineşti,4735,IS,181,RO,47.06667,27.41667 96978,Zagavia,4735,IS,181,RO,47.41911,26.8979 97001,Zmeu,4735,IS,181,RO,47.19161,27.17917 89871,1 Decembrie,4725,IF,181,RO,44.29083,26.05806 89891,Afumaţi,4725,IF,181,RO,44.51667,26.26667 89943,Alunișu,4725,IF,181,RO,44.33883,26.05837 90521,Bălăceanca,4725,IF,181,RO,44.39249,26.29009 90045,Baloteşti,4725,IF,181,RO,44.61667,26.11667 90099,Berceni,4725,IF,181,RO,44.31417,26.18556 90264,Bragadiru,4725,IF,181,RO,44.37111,25.9775 90337,Brăneşti,4725,IF,181,RO,44.45,26.33333 90352,Buciumeni,4725,IF,181,RO,44.54975,25.96419 90391,Buftea,4725,IF,181,RO,44.56139,25.94889 90416,Buriaș,4725,IF,181,RO,44.73304,25.98053 93824,Căciulați,4725,IF,181,RO,44.62741,26.17255 93833,Căldăraru,4725,IF,181,RO,44.41307,26.26313 93886,Cățelu,4725,IF,181,RO,44.40292,26.21975 90635,Cernica,4725,IF,181,RO,44.41667,26.28333 90662,Chiajna,4725,IF,181,RO,44.46,25.97333 90684,Chitila,4725,IF,181,RO,44.50806,25.98222 90717,Ciofliceni,4725,IF,181,RO,44.68122,26.11923 90720,Ciolpani,4725,IF,181,RO,44.73333,26.08333 90726,Ciorogârla,4725,IF,181,RO,44.4425,25.88333 90767,Clinceni,4725,IF,181,RO,44.37333,25.95472 90816,Comuna 1 Decembrie,4725,IF,181,RO,44.28869,26.06178 90828,Comuna Afumaţi,4725,IF,181,RO,44.52501,26.24943 90927,Comuna Baloteşti,4725,IF,181,RO,44.62026,26.08664 90961,Comuna Berceni,4725,IF,181,RO,44.30887,26.19051 91123,Comuna Brăneşti,4725,IF,181,RO,44.45362,26.34995 91293,Comuna Cernica,4725,IF,181,RO,44.39343,26.28992 91311,Comuna Chiajna,4725,IF,181,RO,44.45499,25.99345 91350,Comuna Ciolpani,4725,IF,181,RO,44.72603,26.10193 91354,Comuna Ciorogârla,4725,IF,181,RO,44.43222,25.87861 91381,Comuna Clinceni,4725,IF,181,RO,44.37639,25.92445 91420,Comuna Copăceni,4725,IF,181,RO,44.26297,26.09374 91423,Comuna Corbeanca,4725,IF,181,RO,44.59671,26.03241 91437,Comuna Cornetu,4725,IF,181,RO,44.34286,25.92489 91746,Comuna Dărăşti-Ilfov,4725,IF,181,RO,44.30912,26.02139 91605,Comuna Dascălu Creaţa,4725,IF,181,RO,44.60008,26.24201 91658,Comuna Domneşti,4725,IF,181,RO,44.39058,25.89492 91675,Comuna Dragomireşti-Vale,4725,IF,181,RO,44.47555,25.93164 91801,Comuna Fundeni-Dobroeşti,4725,IF,181,RO,44.45455,26.18368 91985,Comuna Găneasa,4725,IF,181,RO,44.49447,26.29923 91880,Comuna Glina,4725,IF,181,RO,44.38546,26.24582 91938,Comuna Grădiştea,4725,IF,181,RO,44.66557,26.31448 91931,Comuna Gruiu,4725,IF,181,RO,44.72648,26.22133 92123,Comuna Jilava,4725,IF,181,RO,44.32863,26.07754 92313,Comuna Moara Vlãsiei,4725,IF,181,RO,44.63416,26.18935 92321,Comuna Mogoşoaia,4725,IF,181,RO,44.52903,26.00178 92455,Comuna Nuci,4725,IF,181,RO,44.7091,26.3177 92553,Comuna Periş,4725,IF,181,RO,44.70859,26.01472 92569,Comuna Petrăchioaia,4725,IF,181,RO,44.57953,26.31114 92967,Comuna Snagov,4725,IF,181,RO,44.68481,26.12384 93554,Comuna Ştefãneştii De Jos,4725,IF,181,RO,44.53333,26.18333 93207,Comuna Tunari,4725,IF,181,RO,44.56797,26.13908 93355,Comuna Vidra,4725,IF,181,RO,44.28107,26.1431 93607,Copăceni,4725,IF,181,RO,44.26297,26.09374 93612,Corbeanca,4725,IF,181,RO,44.6,26.05 93633,Cornetu,4725,IF,181,RO,44.34167,25.94083 93714,Crețești,4725,IF,181,RO,44.28238,26.1353 94134,Dărăşti-Ilfov,4725,IF,181,RO,44.30889,26.01833 94112,Dârvari,4725,IF,181,RO,44.42108,25.87989 93897,Dascălu,4725,IF,181,RO,44.6,26.23333 93961,Dobroeşti,4725,IF,181,RO,44.45,26.18333 93991,Domnești,4725,IF,181,RO,44.39919,25.91618 93990,Domneşti-Sârbi,4725,IF,181,RO,44.38333,25.91667 94020,Dragomirești-Deal,4725,IF,181,RO,44.4624,25.94478 94019,Dragomireşti-Vale,4725,IF,181,RO,44.475,25.935 94226,Fundeni,4725,IF,181,RO,44.45892,26.16565 94510,Găneasa,4725,IF,181,RO,44.48333,26.28333 94309,Ghermănești,4725,IF,181,RO,44.68829,26.14962 94358,Glina,4725,IF,181,RO,44.38333,26.25 94438,Grădiştea,4725,IF,181,RO,44.66667,26.28333 94430,Gruiu,4725,IF,181,RO,44.73333,26.23333 94690,Islaz,4725,IF,181,RO,44.46117,26.38724 94736,Jilava,4725,IF,181,RO,44.33333,26.07806 94800,Lipia,4725,IF,181,RO,44.71003,26.26445 95243,Măgurele,4725,IF,181,RO,44.35,26.03333 94958,Merii Petchii,4725,IF,181,RO,44.73532,26.30054 95043,Moara Vlăsiei,4725,IF,181,RO,44.6409,26.20616 95055,Mogoşoaia,4725,IF,181,RO,44.52917,26.0 95361,Nuci,4725,IF,181,RO,44.71667,26.3 95431,Olteni,4725,IF,181,RO,44.39307,25.95021 95469,Oraş Bragadiru,4725,IF,181,RO,44.36998,25.97871 95475,Oraş Buftea,4725,IF,181,RO,44.55475,25.95628 95491,Oraş Chitila,4725,IF,181,RO,44.49053,25.97847 95546,Oraş Mãgurele,4725,IF,181,RO,44.33925,26.01403 95561,Oraş Otopeni,4725,IF,181,RO,44.54217,26.06526 95565,Oraş Pantelimon,4725,IF,181,RO,44.45235,26.20684 95571,Oraş Popeşti Leordeni,4725,IF,181,RO,44.38005,26.17134 95684,Otopeni,4725,IF,181,RO,44.55,26.06667 95706,Pantelimon,4725,IF,181,RO,44.45,26.2 95735,Periş,4725,IF,181,RO,44.68472,26.01389 95758,Petrăchioaia,4725,IF,181,RO,44.58099,26.31269 95802,Piteasca,4725,IF,181,RO,44.49339,26.33025 95912,Popeşti-Leordeni,4725,IF,181,RO,44.38333,26.16667 96142,Roșu,4725,IF,181,RO,44.45025,26.01122 96146,Rudeni,4725,IF,181,RO,44.47242,25.97325 96345,Siliștea Snagovului,4725,IF,181,RO,44.7392,26.17942 96357,Sintești,4725,IF,181,RO,44.30046,26.12126 96393,Snagov,4725,IF,181,RO,44.7,26.18333 97087,Ştefăneştii de Jos,4725,IF,181,RO,44.53333,26.2 106056,Tamași,4725,IF,181,RO,44.58438,26.00724 96578,Tânganu,4725,IF,181,RO,44.40628,26.31262 96548,Tunari,4725,IF,181,RO,44.55,26.15 96943,Vârteju,4725,IF,181,RO,44.35606,25.99183 96809,Vidra,4725,IF,181,RO,44.26056,26.16972 96889,Voluntari,4725,IF,181,RO,44.49002,26.17338 96890,Voluntari City,4725,IF,181,RO,44.49023,26.18439 89984,Ardusat,4760,MM,181,RO,47.65,23.36667 146723,Arduzel,4760,MM,181,RO,47.448045,23.266862 146724,Arieșu de Câmp,4760,MM,181,RO,47.63977,23.398726 146725,Arieșu de Pădure,4760,MM,181,RO,47.586238,23.479106 89994,Ariniş,4760,MM,181,RO,47.5,23.23333 146726,Aspra,4760,MM,181,RO,47.45021,23.638179 146727,Asuaju de Jos,4760,MM,181,RO,47.540519,23.222987 90001,Asuaju de Sus,4760,MM,181,RO,47.56667,23.18333 146728,Baba,4760,MM,181,RO,47.340268,23.745611 90029,Baia Mare,4760,MM,181,RO,47.65729,23.56808 90030,Baia Sprie,4760,MM,181,RO,47.66189,23.69215 90488,Băile Borșa,4760,MM,181,RO,47.68416,24.71391 90500,Băița,4760,MM,181,RO,47.70614,23.49326 90498,Băiţa de sub Codru,4760,MM,181,RO,47.53333,23.15 90495,Băiuţ,4760,MM,181,RO,47.61667,24.0 146742,Bârgău,4760,MM,181,RO,47.683438,23.399712 90455,Bârsana,4760,MM,181,RO,47.81667,24.06667 90550,Băseşti,4760,MM,181,RO,47.48333,23.15 90096,Berbești,4760,MM,181,RO,47.84865,23.93448 146729,Berchez,4760,MM,181,RO,47.518924,23.505693 146730,Berința,4760,MM,181,RO,47.540669,23.676929 90125,Bicaz,4760,MM,181,RO,47.46667,23.03333 90144,Bistra,4760,MM,181,RO,47.86667,24.2 146731,Blidari,4760,MM,181,RO,47.7797,23.613704 146732,Bocicoel,4760,MM,181,RO,47.69861111,24.31916667 90175,Bocicoiu Mare,4760,MM,181,RO,47.96667,24.0 90187,Bogdan Vodă,4760,MM,181,RO,47.69197,24.26605 146733,Boiereni,4760,MM,181,RO,47.388859,23.930483 90205,Boiu Mare,4760,MM,181,RO,47.4,23.58333 146734,Bontăieni,4760,MM,181,RO,47.612215,23.7216 90222,Borcut,4760,MM,181,RO,47.482,23.84071 90238,Borşa,4760,MM,181,RO,47.65527,24.66328 90245,Botiza,4760,MM,181,RO,47.66667,24.15 146735,Bozânta Mare,4760,MM,181,RO,47.639658,23.441655 146736,Bozânta Mică,4760,MM,181,RO,47.636414,23.422357 90290,Breb,4760,MM,181,RO,47.74854,23.90494 146737,Brebeni,4760,MM,181,RO,47.503582,23.781356 146738,Buciumi,4760,MM,181,RO,47.470326,23.489258 90381,Budeşti,4760,MM,181,RO,47.73333,23.95 146741,Bușag,4760,MM,181,RO,47.658715,23.427752 146739,Buteasa,4760,MM,181,RO,47.448303,23.549878 146740,Buzești,4760,MM,181,RO,47.608449,23.354169 93839,Călineşti,4760,MM,181,RO,47.78423,23.96961 93802,Câmpulung la Tisa,4760,MM,181,RO,47.98651,23.77263 146761,Cărbunari,4760,MM,181,RO,47.575156,23.644034 146762,Cărpiniș,4760,MM,181,RO,47.575555,23.703365 146763,Cătălina,4760,MM,181,RO,47.603835,23.544591 90592,Cavnic,4760,MM,181,RO,47.66667,23.86667 90633,Cerneşti,4760,MM,181,RO,47.51667,23.75 146743,Cetățele,4760,MM,181,RO,47.598809,23.73945 146744,Chechiș,4760,MM,181,RO,47.584414,23.603885 90654,Chelința,4760,MM,181,RO,47.45311,23.31799 146745,Chiuzbaia,4760,MM,181,RO,47.699548,23.68056 90698,Cicârlău,4760,MM,181,RO,47.69155,23.4038 146746,Ciocotiș,4760,MM,181,RO,47.55666,23.796499 146747,Ciolt,4760,MM,181,RO,47.483854,23.509443 146748,Ciuta,4760,MM,181,RO,47.447138,22.98833 90774,Coaș,4760,MM,181,RO,47.53957,23.58584 146749,Codru Butesii,4760,MM,181,RO,47.468179,23.601463 90801,Coltău,4760,MM,181,RO,47.59837,23.52459 146750,Colțirea,4760,MM,181,RO,47.609961,23.405197 90887,Comuna Ardusat,4760,MM,181,RO,47.63241,23.39156 90893,Comuna Ariniş,4760,MM,181,RO,47.50757,23.22435 90899,Comuna Asuaju de Sus,4760,MM,181,RO,47.55,23.2 91210,Comuna Băiţa de sub Codru,4760,MM,181,RO,47.53333,23.15 91207,Comuna Băiuţ,4760,MM,181,RO,47.60191,24.0018 91192,Comuna Bârsana,4760,MM,181,RO,47.815,24.05731 91244,Comuna Băseşti,4760,MM,181,RO,47.49608,23.10786 90982,Comuna Bicaz,4760,MM,181,RO,47.46241,23.01474 90996,Comuna Bistra,4760,MM,181,RO,47.8686,24.19291 91014,Comuna Bocicoiu Mare,4760,MM,181,RO,47.94673,24.01121 91022,Comuna Bogdan Vodă,4760,MM,181,RO,47.6948,24.29548 91034,Comuna Boiu Mare,4760,MM,181,RO,47.40202,23.59965 91062,Comuna Botiza,4760,MM,181,RO,47.66818,24.15035 91145,Comuna Budeşti,4760,MM,181,RO,47.74615,23.94569 91571,Comuna Călineşti,4760,MM,181,RO,47.78502,23.97011 91544,Comuna Câmpulung la Tisa,4760,MM,181,RO,47.98651,23.77263 91292,Comuna Cerneşti,4760,MM,181,RO,47.53576,23.78366 91334,Comuna Cicârlău,4760,MM,181,RO,47.70582,23.38142 91383,Comuna Coaş,4760,MM,181,RO,47.51282,23.60046 91401,Comuna Coltãu,4760,MM,181,RO,47.60118,23.5345 91416,Comuna Copalnic Mănăştur,4760,MM,181,RO,47.5225,23.68782 91446,Comuna Coroieni,4760,MM,181,RO,47.36635,23.77764 91526,Comuna Cupşeni,4760,MM,181,RO,47.53255,23.94243 91618,Comuna Deseşti,4760,MM,181,RO,47.77004,23.859 91719,Comuna Dumbrăviţa,4760,MM,181,RO,47.60118,23.65726 91822,Comuna Fărcaşa,4760,MM,181,RO,47.59482,23.34826 91972,Comuna Gârdani,4760,MM,181,RO,47.55135,23.3088 91874,Comuna Giuleşti,4760,MM,181,RO,47.82215,23.92994 91928,Comuna Groşi,4760,MM,181,RO,47.61193,23.58661 91929,Comuna Groşii Ţibleşului,4760,MM,181,RO,47.48983,24.06368 92065,Comuna Ieud,4760,MM,181,RO,47.67739,24.23378 92221,Comuna Lăpuş,4760,MM,181,RO,47.49363,24.00646 92153,Comuna Leordina,4760,MM,181,RO,47.78306,24.26401 92298,Comuna Mireşu Mare,4760,MM,181,RO,47.50011,23.3642 92323,Comuna Moisei,4760,MM,181,RO,47.65612,24.53988 92469,Comuna Oarţa De Jos,4760,MM,181,RO,47.45,23.1 92478,Comuna Ocna Şugatag,4760,MM,181,RO,47.77493,23.91268 92499,Comuna Onceşti,4760,MM,181,RO,47.84814,23.98183 92567,Comuna Petrova,4760,MM,181,RO,47.83003,24.21603 92643,Comuna Poienile de sub Munte,4760,MM,181,RO,47.82371,24.43674 92642,Comuna Poienile Izei,4760,MM,181,RO,47.70309,24.11276 92754,Comuna Recea,4760,MM,181,RO,47.63108,23.4861 92765,Comuna Remetea Chioarului,4760,MM,181,RO,47.52129,23.52891 92767,Comuna Remeţi,4760,MM,181,RO,47.9963,23.58741 92768,Comuna Repedea,4760,MM,181,RO,47.83212,24.40142 92789,Comuna Rona de Jos,4760,MM,181,RO,47.91667,24.01667 92790,Comuna Rona de Sus,4760,MM,181,RO,47.90184,24.03877 92793,Comuna Rozavlea,4760,MM,181,RO,47.73791,24.20116 92817,Comuna Ruşcova,4760,MM,181,RO,47.79289,24.28546 93087,Comuna Săcălăşeni,4760,MM,181,RO,47.57041,23.57207 93081,Comuna Săcel,4760,MM,181,RO,47.6369,24.43508 93098,Comuna Sălsig,4760,MM,181,RO,47.51934,23.3027 93077,Comuna Sãpânţa,4760,MM,181,RO,47.96933,23.69818 93110,Comuna Sărăsău,4760,MM,181,RO,47.95,23.81667 92882,Comuna Satulung,4760,MM,181,RO,47.57189,23.41978 93515,Comuna Şieu,4760,MM,181,RO,47.72462,24.22389 93532,Comuna Şişeşti,4760,MM,181,RO,47.61329,23.74104 93008,Comuna Strâmtura,4760,MM,181,RO,47.75156,24.10267 93027,Comuna Suciu de Sus,4760,MM,181,RO,47.44309,24.04303 93291,Comuna Vadu Izei,4760,MM,181,RO,47.88131,23.96081 93299,Comuna Valea Chioarului,4760,MM,181,RO,47.40706,23.46101 93363,Comuna Vima Micã,4760,MM,181,RO,47.41766,23.68841 93375,Comuna Vişeu de Jos,4760,MM,181,RO,47.7276,24.36306 146751,Copalnic,4760,MM,181,RO,47.520418,23.655627 93601,Copalnic Mănăştur,4760,MM,181,RO,47.5,23.68333 146752,Cornești,4760,MM,181,RO,47.816755,23.968117 146753,Corni,4760,MM,181,RO,47.478318,23.019042 93647,Coroieni,4760,MM,181,RO,47.36667,23.76667 146754,Coruia,4760,MM,181,RO,47.563348,23.59653 146755,Costeni,4760,MM,181,RO,47.537054,23.914646 146756,Coștiui,4760,MM,181,RO,47.879312,24.030317 93752,Crăciunești,4760,MM,181,RO,47.95551,23.98267 93708,Crasna Vișeului,4760,MM,181,RO,47.82869,24.23 146757,Cufoaia,4760,MM,181,RO,47.479244,23.803382 146758,Culcea,4760,MM,181,RO,47.56609,23.555362 93771,Cupşeni,4760,MM,181,RO,47.55,23.93333 146759,Curtuiușu Mare,4760,MM,181,RO,47.427433,23.447772 146760,Curtuiușu Mic,4760,MM,181,RO,47.542993,23.625311 94122,Dămăcușeni,4760,MM,181,RO,47.45709,23.90914 146770,Dănești,4760,MM,181,RO,47.619809,23.732499 146771,Dăneștii Chioarului,4760,MM,181,RO,47.553816,23.344784 146764,Dealu Corbului,4760,MM,181,RO,47.449665,23.685233 146765,Dealu Mare,4760,MM,181,RO,47.360265,23.815206 93926,Deseşti,4760,MM,181,RO,47.76667,23.85 146766,Dobricu Lăpușului,4760,MM,181,RO,47.497484,23.908006 146767,Drăghia,4760,MM,181,RO,47.351663,23.774784 94016,Dragomireşti,4760,MM,181,RO,47.66839,24.29111 146768,Dumbrava,4760,MM,181,RO,47.493248,23.872363 94089,Dumbrăviţa,4760,MM,181,RO,47.6,23.65 146769,Durușa,4760,MM,181,RO,47.412914,23.464734 146779,Fânațe,4760,MM,181,RO,47.534638,23.757919 146780,Fântânele,4760,MM,181,RO,47.411351,23.826 94261,Fărcaşa,4760,MM,181,RO,47.58333,23.33333 146781,Făurești,4760,MM,181,RO,47.563194,23.750049 146772,Ferești,4760,MM,181,RO,47.83055556,23.94916667 146773,Fericea,4760,MM,181,RO,47.406626,23.3937 146774,Fersig,4760,MM,181,RO,47.540493,23.383712 146775,Finteușu Mare,4760,MM,181,RO,47.540006,23.464512 146776,Finteușu Mic,4760,MM,181,RO,47.567788,23.453901 146777,Firiza,4760,MM,181,RO,47.748892,23.604949 146778,Frâncenii Boiului,4760,MM,181,RO,47.399692,23.61791 94490,Gârdani,4760,MM,181,RO,47.55135,23.3088 94350,Giuleşti,4760,MM,181,RO,47.81667,23.93333 146782,Glod,4760,MM,181,RO,47.727118,24.083225 146783,Groape,4760,MM,181,RO,47.44449,23.725301 94425,Groşi,4760,MM,181,RO,47.61667,23.61667 94428,Groșii Țibleșului,4760,MM,181,RO,47.48983,24.06368 146784,Handalu Ilbei,4760,MM,181,RO,47.735498,23.36451 146788,Hărnicești,4760,MM,181,RO,47.782132,23.886589 146785,Hideaga,4760,MM,181,RO,47.591325,23.42202 146786,Hoteni,4760,MM,181,RO,47.771915,23.899933 146787,Hovrila,4760,MM,181,RO,47.459697,23.508422 94617,Iadăra,4760,MM,181,RO,47.47927,23.39893 94623,Iapa,4760,MM,181,RO,47.92513,23.82539 94644,Ieud,4760,MM,181,RO,47.67796,24.23399 94653,Ilba,4760,MM,181,RO,47.7128,23.35765 146789,Inău,4760,MM,181,RO,47.517334,23.824834 146856,Întrerâuri,4760,MM,181,RO,47.486073,23.615087 146790,Izvoarele,4760,MM,181,RO,47.7533848,23.7143951 146791,Jugăstreni,4760,MM,181,RO,47.39527,23.664248 94896,Lăpuş,4760,MM,181,RO,47.5,24.01667 94899,Lăpușel,4760,MM,181,RO,47.6183,23.47913 146792,Larga,4760,MM,181,RO,47.452008,24.105068 146795,Lăschia,4760,MM,181,RO,47.543318,23.732142 146793,Lazu Baciului,4760,MM,181,RO,47.905131,23.920522 94780,Leordina,4760,MM,181,RO,47.78333,24.25 94792,Libotin,4760,MM,181,RO,47.50541,23.96833 146794,Lucăcești,4760,MM,181,RO,47.539956,23.335504 94873,Lunca la Tisa,4760,MM,181,RO,47.95213,24.05216 146800,Măgureni,4760,MM,181,RO,47.486716,23.743535 146801,Mănăstirea,4760,MM,181,RO,47.802992,23.922221 95220,Mânău,4760,MM,181,RO,47.48179,23.26247 94924,Mara,4760,MM,181,RO,47.75552,23.83126 146796,Merișor,4760,MM,181,RO,47.660906,23.410258 146797,Mesteacăn,4760,MM,181,RO,47.381242,23.521777 95016,Mireşu Mare,4760,MM,181,RO,47.5,23.33333 146798,Mocira,4760,MM,181,RO,47.62295,23.52506 146799,Mogoșești,4760,MM,181,RO,47.58681,23.403652 95059,Moisei,4760,MM,181,RO,47.65562,24.54011 146803,Nănești,4760,MM,181,RO,47.83812,24.011049 146802,Negreia,4760,MM,181,RO,47.635388,23.744065 95351,Nistru,4760,MM,181,RO,47.72088,23.45495 95385,Oarţa de Jos,4760,MM,181,RO,47.45827,23.12742 146804,Oarța de Sus,4760,MM,181,RO,47.467933,23.077673 95399,Ocna Şugatag,4760,MM,181,RO,47.78333,23.93333 146805,Ocoliș,4760,MM,181,RO,47.602034,23.579269 146806,Odești,4760,MM,181,RO,47.51595,23.095873 95437,Oncești,4760,MM,181,RO,47.84814,23.98183 146807,Orțița,4760,MM,181,RO,47.46262,23.094275 146808,Peteritea,4760,MM,181,RO,47.422911,23.743684 95755,Petrova,4760,MM,181,RO,47.82981,24.21533 146809,Piatra,4760,MM,181,RO,47.995655,23.538421 146810,Plopiș,4760,MM,181,RO,47.589622,23.772737 146811,Poiana Botizii,4760,MM,181,RO,47.593337,24.025314 95895,Poienile de sub Munte,4760,MM,181,RO,47.81667,24.43333 95894,Poienile Izei,4760,MM,181,RO,47.7,24.11667 146812,Posta,4760,MM,181,RO,47.547813,23.493902 146813,Preluca Nouă,4760,MM,181,RO,47.466972,23.651508 146814,Preluca Veche,4760,MM,181,RO,47.469413,23.707897 146815,Pribilești,4760,MM,181,RO,47.56523,23.373284 146816,Prislop,4760,MM,181,RO,47.411554,23.553394 146824,Răzoare,4760,MM,181,RO,47.444406,23.779432 96070,Recea,4760,MM,181,RO,47.63333,23.51667 146817,Remecioara,4760,MM,181,RO,47.513977,23.55886 96083,Remetea Chioarului,4760,MM,181,RO,47.53333,23.55 96085,Remeţi,4760,MM,181,RO,47.98333,23.63333 146818,Remeți pe Someș,4760,MM,181,RO,47.481435,23.339298 96087,Repedea,4760,MM,181,RO,47.83333,24.4 146819,Rodina,4760,MM,181,RO,47.518268,23.253529 96102,Rogoz,4760,MM,181,RO,47.46749,23.93214 146820,Rohia,4760,MM,181,RO,47.406126,23.85804 146821,Românești,4760,MM,181,RO,47.403363,23.645376 96116,Rona de Jos,4760,MM,181,RO,47.91667,24.01667 96117,Rona de Sus,4760,MM,181,RO,47.9,24.05 96124,Rozavlea,4760,MM,181,RO,47.73333,24.21667 146822,Rus,4760,MM,181,RO,47.612924,23.669383 96160,Ruscova,4760,MM,181,RO,47.79289,24.28546 146823,Rușor,4760,MM,181,RO,47.504405,23.711018 146834,Săbișa,4760,MM,181,RO,47.729462,23.329006 106001,Săcălășeni,4760,MM,181,RO,47.5818,23.56432 105990,Săcel,4760,MM,181,RO,47.63333,24.43333 146835,Săliște,4760,MM,181,RO,47.495957,23.112225 95645,Săliştea de Sus,4760,MM,181,RO,47.66019,24.35336 146836,Sălnița,4760,MM,181,RO,47.41159,23.672189 106021,Sălsig,4760,MM,181,RO,47.53333,23.3 146833,Sâlța,4760,MM,181,RO,47.737407,24.179451 106029,Săpânţa,4760,MM,181,RO,47.96667,23.7 96244,Sarasău,4760,MM,181,RO,47.9551,23.82874 105986,Sârbi,4760,MM,181,RO,47.76184,23.9449 106038,Săsar,4760,MM,181,RO,47.64406,23.49869 96251,Sat-Șugatag,4760,MM,181,RO,47.79796,23.90637 146825,Satu Nou de Jos,4760,MM,181,RO,47.616204,23.5685 146826,Satu Nou de Sus,4760,MM,181,RO,47.638474,23.634765 96262,Satulung,4760,MM,181,RO,47.56667,23.43333 95644,Seini,4760,MM,181,RO,47.75,23.28333 97122,Șieu,4760,MM,181,RO,47.72462,24.22389 95182,Sighetu Marmaţiei,4760,MM,181,RO,47.91914,23.88679 146857,Șindrești,4760,MM,181,RO,47.606595,23.695133 97129,Șisești,4760,MM,181,RO,47.63506,23.70794 146827,Slătioara,4760,MM,181,RO,47.751863,24.0898 95651,Şomcuta Mare,4760,MM,181,RO,47.51667,23.46667 146828,Someș-Uileac,4760,MM,181,RO,47.459182,23.227554 146829,Stejera,4760,MM,181,RO,47.441899,23.424438 146830,Stoiceni,4760,MM,181,RO,47.511213,23.880799 146832,Strâmbu-Băiuț,4760,MM,181,RO,47.598395,23.982574 96461,Strâmtura,4760,MM,181,RO,47.78333,24.13333 146831,Stremț,4760,MM,181,RO,47.491836,23.077103 96491,Suciu de Jos,4760,MM,181,RO,47.44584,23.9825 96492,Suciu de Sus,4760,MM,181,RO,47.43333,24.03333 146858,Șugău,4760,MM,181,RO,47.883627,23.909009 97136,Șurdești,4760,MM,181,RO,47.60215,23.76899 146840,Tămaia,4760,MM,181,RO,47.593535,23.363404 146841,Tămășești,4760,MM,181,RO,47.503434,23.189042 95648,Târgu Lăpuş,4760,MM,181,RO,47.46124,23.85353 96628,Tăuții de Sus,4760,MM,181,RO,47.65665,23.65841 95649,Tăuţii-Măgherăuş,4760,MM,181,RO,47.72129,23.48601 146837,Teceu Mic,4760,MM,181,RO,48.00305,23.580805 146859,Țicău,4760,MM,181,RO,47.445663,23.307228 106106,Tisa,4760,MM,181,RO,47.94844,23.95768 146855,tohat,4760,MM,181,RO,47.494757,23.306691 146838,Trestia,4760,MM,181,RO,47.564744,23.793685 146839,Tulghieș,4760,MM,181,RO,47.50091,23.370814 95611,Ulmeni,4760,MM,181,RO,47.46209,23.27925 146842,Ulmoasa,4760,MM,181,RO,47.732423,23.533241 146843,Unguraș,4760,MM,181,RO,47.629044,23.678933 96660,Ungureni,4760,MM,181,RO,47.54631,23.95241 146844,Urmeniș,4760,MM,181,RO,47.523572,23.19626 146845,Vad,4760,MM,181,RO,47.521458,23.711614 96696,Vadu Izei,4760,MM,181,RO,47.88821,23.93209 96714,Valea Chioarului,4760,MM,181,RO,47.43333,23.48333 146846,Valea Cufundoasă,4760,MM,181,RO,47.940866,23.926789 146847,Valea Hotarului,4760,MM,181,RO,47.931195,23.843626 146848,Valea Neagră,4760,MM,181,RO,47.766318,23.621086 146849,Valea Stejarului,4760,MM,181,RO,47.874414,23.989528 96764,Valea Vișeului,4760,MM,181,RO,47.91203,24.15842 96959,Văleni,4760,MM,181,RO,47.78559,24.01625 146853,Vălenii Lăpușului,4760,MM,181,RO,47.405729,23.785921 96966,Vălenii Șomcutei,4760,MM,181,RO,47.47291,23.45138 146854,Vărai,4760,MM,181,RO,47.386185,23.451076 146850,Vicea,4760,MM,181,RO,47.450948,23.241011 146851,Viile Apei,4760,MM,181,RO,47.781091,23.291035 146852,Vima Mare,4760,MM,181,RO,47.381702,23.708534 96829,Vima Mică,4760,MM,181,RO,47.4,23.71667 96847,Vişeu de Jos,4760,MM,181,RO,47.72558,24.36613 96852,Vișeu de Mijloc,4760,MM,181,RO,47.71562,24.40661 95619,Vişeu De Sus,4760,MM,181,RO,47.71493,24.41707 90438,Bâcleș,4751,MH,181,RO,44.48333,23.13333 90031,Baia de Aramă,4751,MH,181,RO,44.99929,22.80784 90036,Bala,4751,MH,181,RO,44.88389,22.83333 90523,Bălăciţa,4751,MH,181,RO,44.38333,23.13333 90046,Balta,4751,MH,181,RO,44.88694,22.63694 90049,Balta Verde,4751,MH,181,RO,44.34411,22.59878 90444,Bâlvăneşti,4751,MH,181,RO,44.7975,22.68028 90149,Bistrița,4751,MH,181,RO,44.58511,22.78762 90272,Braniștea,4751,MH,181,RO,44.24201,22.97354 90299,Brezniţa Ocol,4751,MH,181,RO,44.66667,22.61833 90300,Brezniţa-Motru,4751,MH,181,RO,44.56667,23.21667 90310,Broşteni,4751,MH,181,RO,44.76083,22.97944 90417,Burila Mare,4751,MH,181,RO,44.45278,22.57361 90428,Butoieşti,4751,MH,181,RO,44.58333,23.36667 93883,Căzăneşti,4751,MH,181,RO,44.72333,22.89056 90634,Cerneți,4751,MH,181,RO,44.63476,22.70931 90708,Ciochiuța,4751,MH,181,RO,44.60306,23.11698 90725,Cioroboreni,4751,MH,181,RO,44.38877,22.76326 90732,Cireşu,4751,MH,181,RO,44.82333,22.53806 90808,Comanda,4751,MH,181,RO,44.64863,23.16413 91181,Comuna Bâcleş,4751,MH,181,RO,44.48031,23.12207 90920,Comuna Bala,4751,MH,181,RO,44.89479,22.83235 91224,Comuna Bălăciţa,4751,MH,181,RO,44.3904,23.12095 90928,Comuna Balta,4751,MH,181,RO,44.90652,22.61789 91183,Comuna Bâlvăneşti,4751,MH,181,RO,44.79756,22.68313 91080,Comuna Braniştea,4751,MH,181,RO,44.23768,22.96793 91097,Comuna Brezniţa Ocol,4751,MH,181,RO,44.69266,22.60992 91098,Comuna Brezniţa-Motru,4751,MH,181,RO,44.55668,23.24187 91103,Comuna Broşteni,4751,MH,181,RO,44.74698,22.99083 91169,Comuna Burila Mare,4751,MH,181,RO,44.47835,22.54915 91176,Comuna Butoieşti,4751,MH,181,RO,44.57037,23.37587 91597,Comuna Căzăneşti,4751,MH,181,RO,44.70475,22.90575 91360,Comuna Cireşu,4751,MH,181,RO,44.81995,22.54058 91431,Comuna Corcova,4751,MH,181,RO,44.67794,23.07843 91434,Comuna Corlăţel,4751,MH,181,RO,44.38101,22.92847 91522,Comuna Cujmir,4751,MH,181,RO,44.19723,22.93125 91730,Comuna Dârvari,4751,MH,181,RO,44.18184,23.06648 91619,Comuna Devesel,4751,MH,181,RO,44.48787,22.67669 91704,Comuna Dubova,4751,MH,181,RO,44.57284,22.18226 91712,Comuna Dumbrava,4751,MH,181,RO,44.52117,23.13564 91752,Comuna Eşelniţa,4751,MH,181,RO,44.69905,22.36577 91772,Comuna Floreşti,4751,MH,181,RO,44.79545,22.90986 91973,Comuna Gârla Mare,4751,MH,181,RO,44.21087,22.77696 91887,Comuna Godeanu,4751,MH,181,RO,44.80808,22.6087 91892,Comuna Gogoşu,4751,MH,181,RO,44.3793,22.57357 91916,Comuna Greci,4751,MH,181,RO,44.57162,23.10745 91926,Comuna Grozeşti,4751,MH,181,RO,44.63649,23.33206 91930,Comuna Gruia,4751,MH,181,RO,44.28593,22.72949 92002,Comuna Hinova,4751,MH,181,RO,44.54565,22.77675 92031,Comuna Husnicioara,4751,MH,181,RO,44.66283,22.83939 92074,Comuna Ilovăt,4751,MH,181,RO,44.81543,22.73749 92073,Comuna Iloviţa,4751,MH,181,RO,44.78026,22.49234 92095,Comuna Isverna,4751,MH,181,RO,44.96572,22.67037 92111,Comuna Izvoru Bârzii,4751,MH,181,RO,44.7083,22.67003 92118,Comuna Jiana,4751,MH,181,RO,44.39156,22.71076 92179,Comuna Livezile,4751,MH,181,RO,44.54482,22.86644 92234,Comuna Malovãţ,4751,MH,181,RO,44.72156,22.74546 92474,Comuna Obârşia De Câmp,4751,MH,181,RO,44.17507,22.97076 92475,Comuna Obârşia-Cloşani,4751,MH,181,RO,45.01667,22.68333 92503,Comuna Oprişor,4751,MH,181,RO,44.30105,23.08646 92529,Comuna Padina,4751,MH,181,RO,44.43776,23.01426 92724,Comuna Pătulele,4751,MH,181,RO,44.34984,22.80368 92612,Comuna Podeni,4751,MH,181,RO,44.89218,22.55503 92650,Comuna Ponoarele,4751,MH,181,RO,44.97347,22.75676 92659,Comuna Poroina Mare,4751,MH,181,RO,44.49516,22.94161 92678,Comuna Pristol,4751,MH,181,RO,44.2208,22.712 92687,Comuna Prunişor,4751,MH,181,RO,44.6003,22.90476 92697,Comuna Punghina,4751,MH,181,RO,44.29534,22.96318 92779,Comuna Rogova,4751,MH,181,RO,44.47076,22.82951 92865,Comuna Salcia,4751,MH,181,RO,44.14124,22.93048 92935,Comuna Simian,4751,MH,181,RO,44.62736,22.74227 92945,Comuna Siseşti,4751,MH,181,RO,44.77146,22.83754 92978,Comuna Sovarna,4751,MH,181,RO,44.84837,22.81235 93014,Comuna Stângăceaua,4751,MH,181,RO,44.60024,23.29263 93043,Comuna Sviniţa,4751,MH,181,RO,44.50013,22.10488 93223,Comuna Tâmna,4751,MH,181,RO,44.56147,23.00793 93433,Comuna Vânători,4751,MH,181,RO,44.24781,22.92979 93431,Comuna Vânjuleţ,4751,MH,181,RO,44.43124,22.80212 93384,Comuna Vlădaia,4751,MH,181,RO,44.36108,23.03758 93403,Comuna Voloiac,4751,MH,181,RO,44.63241,23.05948 93410,Comuna Vrata,4751,MH,181,RO,44.19197,22.84928 93622,Corcova,4751,MH,181,RO,44.7,23.05 93628,Corlăţel,4751,MH,181,RO,44.39861,22.93306 93766,Cujmir,4751,MH,181,RO,44.20667,22.92667 94123,Dănceu,4751,MH,181,RO,44.36416,22.72098 94111,Dârvari,4751,MH,181,RO,44.2,23.05 93929,Devesel,4751,MH,181,RO,44.46889,22.66722 94032,Drobeta-Turnu Severin,4751,MH,181,RO,44.62693,22.65288 94066,Dubova,4751,MH,181,RO,44.61667,22.26667 94068,Dudașu,4751,MH,181,RO,44.65253,22.69683 94082,Dumbrava de Sus,4751,MH,181,RO,44.51667,23.11667 94147,Eşelniţa,4751,MH,181,RO,44.69917,22.36222 94184,Floreşti,4751,MH,181,RO,44.76306,22.94778 94491,Gârla-Mare,4751,MH,181,RO,44.20917,22.775 94290,Gemeni,4751,MH,181,RO,44.17265,23.08251 94367,Godeanu,4751,MH,181,RO,44.80111,22.60861 94372,Gogoşu,4751,MH,181,RO,44.37389,22.59306 94408,Greci,4751,MH,181,RO,44.55,23.11667 94423,Grozeşti,4751,MH,181,RO,44.65,23.31667 94429,Gruia,4751,MH,181,RO,44.2675,22.70472 94466,Gura Văii,4751,MH,181,RO,44.66732,22.55646 94475,Gvardinița,4751,MH,181,RO,44.39505,23.14635 94520,Halânga,4751,MH,181,RO,44.68116,22.69037 94537,Hinova,4751,MH,181,RO,44.54056,22.77694 94585,Husnicioara,4751,MH,181,RO,44.67806,22.8425 94660,Ilovăț,4751,MH,181,RO,44.81197,22.76333 94659,Iloviţa,4751,MH,181,RO,44.75639,22.47278 94693,Isverna,4751,MH,181,RO,44.97972,22.62917 94700,Izimșa,4751,MH,181,RO,44.17819,22.95649 94709,Izvoarele,4751,MH,181,RO,44.30958,22.66348 94717,Izvoru Bârzii,4751,MH,181,RO,44.70667,22.67417 94726,Jiana,4751,MH,181,RO,44.40184,22.71278 94727,Jiana Veche,4751,MH,181,RO,44.39083,22.66861 94732,Jidoștița,4751,MH,181,RO,44.71582,22.59311 94741,Jirov,4751,MH,181,RO,44.67098,23.08693 94822,Livezile,4751,MH,181,RO,44.51222,22.86333 94914,Malovăţ,4751,MH,181,RO,44.70444,22.73111 95138,Municipiul Drobeta-Turnu Severin,4751,MH,181,RO,44.64287,22.60669 95165,Municipiul Orşova,4751,MH,181,RO,44.7252,22.39771 95334,Nicolae Bălcescu,4751,MH,181,RO,44.37427,22.85837 95391,Obârșia de Câmp,4751,MH,181,RO,44.17222,22.98 95390,Obârşia-Cloşani,4751,MH,181,RO,45.01667,22.68333 95443,Oprişor,4751,MH,181,RO,44.28333,23.08333 95454,Oraş Baia De Aramã,4751,MH,181,RO,45.00366,22.80709 95593,Oraş Strehaia,4751,MH,181,RO,44.6236,23.18792 95621,Oraş Vânju Mare,4751,MH,181,RO,44.42326,22.8734 95657,Orevița Mare,4751,MH,181,RO,44.45715,22.91317 95669,Orşova,4751,MH,181,RO,44.72299,22.39619 95680,Ostrovu Mare,4751,MH,181,RO,44.37931,22.51581 95696,Padina Mică,4751,MH,181,RO,44.42722,22.9925 96024,Pătulele,4751,MH,181,RO,44.34528,22.77278 95843,Podeni,4751,MH,181,RO,44.88139,22.54333 95905,Ponoarele,4751,MH,181,RO,44.97389,22.76444 95920,Poroina Mare,4751,MH,181,RO,44.49528,22.93639 95955,Pristol,4751,MH,181,RO,44.22472,22.70917 95968,Prunişor,4751,MH,181,RO,44.60944,22.91528 95982,Punghina,4751,MH,181,RO,44.28194,22.93472 96068,Recea,4751,MH,181,RO,44.31949,22.91659 96101,Rogova,4751,MH,181,RO,44.47167,22.80667 96137,Roșiori,4751,MH,181,RO,44.25633,22.92838 96232,Salcia,4751,MH,181,RO,44.14083,22.92778 97051,Şimian,4751,MH,181,RO,44.61417,22.70722 97061,Şişeşti,4751,MH,181,RO,44.7775,22.83944 97075,Şovarna,4751,MH,181,RO,44.85361,22.7925 96473,Stângăceaua,4751,MH,181,RO,44.60896,23.31273 96449,Strehaia,4751,MH,181,RO,44.61667,23.2 96515,Sviniţa,4751,MH,181,RO,44.49972,22.10611 96577,Tâmna,4751,MH,181,RO,44.56667,23.01667 96928,Vânători,4751,MH,181,RO,44.24278,22.92889 96926,Vânju-Mare,4751,MH,181,RO,44.42528,22.86972 96927,Vânjuleţ,4751,MH,181,RO,44.44111,22.7925 96859,Vlădaia,4751,MH,181,RO,44.35,23.03333 96887,Voloiac,4751,MH,181,RO,44.61667,23.1 96897,Vrata,4751,MH,181,RO,44.19197,22.84928 146225,Abuș,4915,MS,181,RO,46.35,24.38333333 146226,Acățari,4915,MS,181,RO,46.48333333,24.63333333 146230,Adămuș,4915,MS,181,RO,46.3,24.23 146227,Adrian,4915,MS,181,RO,46.782092,24.833242 146228,Adrianu Mare,4915,MS,181,RO,46.493573,24.803244 146229,Adrianu Mic,4915,MS,181,RO,46.500821,24.790514 146231,Agrișteu,4915,MS,181,RO,46.391728,24.683796 146232,Albești,4915,MS,181,RO,46.23,24.85 146233,Aluniș,4915,MS,181,RO,46.9,24.82 146234,Andreneasa,4915,MS,181,RO,46.967843,25.024235 146235,Angofa,4915,MS,181,RO,46.186582,24.78418 146236,Apalina,4915,MS,181,RO,46.752313,24.692755 146237,Apold,4915,MS,181,RO,46.12777778,24.81805556 146238,Archita,4915,MS,181,RO,46.18194444,25.0875 146239,Arșița,4915,MS,181,RO,46.785874,24.998585 146242,Ațintiș,4915,MS,181,RO,46.43,24.1 146240,Aurel Vlaicu,4915,MS,181,RO,46.17787,24.82072 146241,Avrămești,4915,MS,181,RO,46.536208,24.099284 146282,Băgaciu,4915,MS,181,RO,46.27,24.37 146243,Bahnea,4915,MS,181,RO,46.37,24.48 146283,Băița,4915,MS,181,RO,46.836352,24.529997 146284,Băla,4915,MS,181,RO,46.72,24.5 146285,Bălăușeri,4915,MS,181,RO,46.4,24.68333333 146244,Balda,4915,MS,181,RO,46.733528,24.143616 146245,Band,4915,MS,181,RO,46.58333333,24.38333333 146278,Bâra,4915,MS,181,RO,46.572213,24.87262 146286,Bărboși,4915,MS,181,RO,46.580872,24.181935 146287,Bărdești,4915,MS,181,RO,46.594513,24.513094 146279,Bârlibaș,4915,MS,181,RO,46.688965,24.245494 146280,Bârlibășoaia,4915,MS,181,RO,46.293365,24.834955 146281,Bârza,4915,MS,181,RO,46.55,24.13333 146246,Batoș,4915,MS,181,RO,46.88611111,24.65555556 146247,Bedeni,4915,MS,181,RO,46.467606,24.783374 146248,Beica de Jos,4915,MS,181,RO,46.73423,24.79671 146249,Beica de Sus,4915,MS,181,RO,46.737954,24.822701 146250,Bereni,4915,MS,181,RO,46.55,24.86666667 146251,Berghia,4915,MS,181,RO,46.539646,24.429614 146252,Bernadea,4915,MS,181,RO,46.374068,24.458466 146253,Beu,4915,MS,181,RO,46.57393,24.719424 146254,Bezid,4915,MS,181,RO,46.406393,24.922384 146255,Bicașu,4915,MS,181,RO,46.810662,24.956087 146256,Bichiș,4915,MS,181,RO,46.36666667,24.1 146257,Bistra Mureșului,4915,MS,181,RO,46.960932,24.905059 146258,Blidireasa,4915,MS,181,RO,46.763944,25.030651 146259,Bobohalma,4915,MS,181,RO,46.351422,24.23505 146260,Bogata,4915,MS,181,RO,46.456408,24.119617 146261,Boiu,4915,MS,181,RO,46.265703,24.874823 146262,Bolintineni,4915,MS,181,RO,46.492457,24.713093 146263,Bologaia,4915,MS,181,RO,46.636856,24.258768 146264,Bord,4915,MS,181,RO,46.393689,24.22694 146265,Bordoșiu,4915,MS,181,RO,46.396296,24.784141 146266,Borzia,4915,MS,181,RO,46.969742,24.932402 146267,Botei,4915,MS,181,RO,46.639397,24.131978 146268,Botez,4915,MS,181,RO,46.386746,24.024299 146269,Botorca,4915,MS,181,RO,46.282318,24.301573 146270,Bozed,4915,MS,181,RO,46.687357,24.46226 146271,Bozeni,4915,MS,181,RO,46.532124,24.671243 146274,Brădețelu,4915,MS,181,RO,46.755389,25.05171 146273,Brâncovenești,4915,MS,181,RO,46.87,24.77 146272,Breaza,4915,MS,181,RO,46.77,24.63 146275,Budiu Mic,4915,MS,181,RO,46.509206,24.584807 146276,Bujor,4915,MS,181,RO,46.65534,24.173422 146277,Bujor-Hodaie,4915,MS,181,RO,46.644947,24.168328 146345,Căciulata,4915,MS,181,RO,46.715135,24.406023 146346,Căcuciu,4915,MS,181,RO,46.725594,24.849867 146347,Călimănești,4915,MS,181,RO,46.413325,24.732709 146348,Călugăreni,4915,MS,181,RO,46.629819,24.877723 146349,Călușeri,4915,MS,181,RO,46.606373,24.737173 146342,Câmpenița,4915,MS,181,RO,46.651211,24.487338 146343,Câmpu Cetății,4915,MS,181,RO,46.670427,25.013973 146344,Cându,4915,MS,181,RO,46.599177,24.887909 146352,Căpâlna de Sus,4915,MS,181,RO,46.378463,24.43502 146350,Căpeți,4915,MS,181,RO,46.63147,25.07876 146351,Căpușu de Câmpie,4915,MS,181,RO,46.542263,24.314142 146288,Cașva,4915,MS,181,RO,46.781936,24.87788 146289,Cecălaca,4915,MS,181,RO,46.394492,24.040132 146290,Ceie,4915,MS,181,RO,46.464066,24.98427 146291,Cerghid,4915,MS,181,RO,46.414509,24.44602 146292,Cerghizel,4915,MS,181,RO,46.44451,24.446878 146293,Ceuaș,4915,MS,181,RO,46.34277778,24.44305556 146294,Ceuașu de Câmpie,4915,MS,181,RO,46.642932,24.513871 146295,Chendu,4915,MS,181,RO,46.390869,24.73045 146296,Chețani,4915,MS,181,RO,46.47,24.03 146297,Chibed,4915,MS,181,RO,46.52944444,24.96333333 146298,Chiheru de Jos,4915,MS,181,RO,46.687002,24.881636 146299,Chiheru de Sus,4915,MS,181,RO,46.681348,24.903598 146300,Chinari,4915,MS,181,RO,46.605257,24.589691 146301,Chinciuș,4915,MS,181,RO,46.352354,24.183233 146302,Chirileu,4915,MS,181,RO,46.476644,24.382965 146303,Chisălița,4915,MS,181,RO,46.568091,24.314757 146304,Ciba,4915,MS,181,RO,46.479226,24.568063 146305,Cibu,4915,MS,181,RO,46.379038,24.803708 146306,Cinta,4915,MS,181,RO,46.46022,24.551038 146307,Cioarga,4915,MS,181,RO,46.493856,24.072965 146308,Ciobotani,4915,MS,181,RO,46.950376,25.268729 146309,Cipaieni,4915,MS,181,RO,46.532429,24.167261 146310,Cipău,4915,MS,181,RO,46.448757,24.277859 146311,Ciretea,4915,MS,181,RO,46.606236,24.170418 146312,Cirhagău,4915,MS,181,RO,46.660415,24.106868 146313,Ciulea,4915,MS,181,RO,46.666678,24.263552 146314,Ciurgău,4915,MS,181,RO,46.501323,24.105044 146315,Cloașterf,4915,MS,181,RO,46.146553,24.997204 146316,Coasta Grindului,4915,MS,181,RO,46.495498,23.982636 146317,Coasta Mare,4915,MS,181,RO,46.692907,24.36331 146318,Comori,4915,MS,181,RO,46.735803,24.896906 146319,Comuna Coroisânmartin,4915,MS,181,RO,46.40376,24.59766 146320,Comuna Ibănești Pădure,4915,MS,181,RO,46.76302,25.03118 146321,Comuna Rușii Munți,4915,MS,181,RO,46.91988,24.83521 146322,Corbești,4915,MS,181,RO,46.42943,24.590755 146323,Cordoș,4915,MS,181,RO,46.512847,24.023044 146324,Cornești,4915,MS,181,RO,46.29222222,24.21277778 146325,Coroi,4915,MS,181,RO,46.409099,24.633891 146326,Corunca,4915,MS,181,RO,46.51666667,24.61666667 146327,Cotorinau,4915,MS,181,RO,46.723788,24.371662 146328,Cotuș,4915,MS,181,RO,46.575621,24.671699 146329,Cozma,4915,MS,181,RO,46.807072,24.522532 146332,Crăciunești,4915,MS,181,RO,46.4793,24.58234 146333,Crăiești,4915,MS,181,RO,46.29628,24.196748 146331,Criș,4915,MS,181,RO,46.14388889,24.69388889 146330,Cristești,4915,MS,181,RO,46.5,24.48333333 146334,Cucerdea,4915,MS,181,RO,46.40222222,24.26583333 146335,Cuci,4915,MS,181,RO,46.47,24.15 146336,Cuieșd,4915,MS,181,RO,46.601682,24.478116 146337,Culpiu,4915,MS,181,RO,46.639608,24.43258 146338,Cund,4915,MS,181,RO,46.272781,24.512288 146339,Curețe,4915,MS,181,RO,46.741168,24.43177 146340,Curteni,4915,MS,181,RO,46.594361,24.575011 146341,Cuștelnic,4915,MS,181,RO,46.338962,24.311768 146353,Daia,4915,MS,181,RO,46.14444444,24.89861111 146354,Dalu,4915,MS,181,RO,46.545441,24.088828 146374,Dâmbău,4915,MS,181,RO,46.319979,24.23443 146373,Dâmbu,4915,MS,181,RO,46.74256,24.268585 146375,Dămieni,4915,MS,181,RO,46.626122,24.860714 146355,Daneș,4915,MS,181,RO,46.22111111,24.70472222 146376,Dătășeni,4915,MS,181,RO,46.474748,24.174852 146356,Deag,4915,MS,181,RO,46.389185,24.192204 146357,Deaj,4915,MS,181,RO,46.347108,24.402065 146358,Deda,4915,MS,181,RO,46.93333333,24.9 146359,Dedrad,4915,MS,181,RO,46.81666667,24.66666667 146360,Deleni,4915,MS,181,RO,46.263403,24.34119 146361,Dileu Nou,4915,MS,181,RO,46.463265,24.332676 146362,Dileu Vechi,4915,MS,181,RO,46.47109,24.309875 146363,Dobra,4915,MS,181,RO,46.581424,24.237349 146365,Drăculea Bandului,4915,MS,181,RO,46.620417,24.338442 146364,Drojdii,4915,MS,181,RO,46.545966,24.857111 146366,Dubiștea de Pădure,4915,MS,181,RO,46.776791,24.965151 146367,Dulcea,4915,MS,181,RO,46.75769,25.032467 146368,Dumbrava,4915,MS,181,RO,46.942068,24.804914 146369,Dumbrăvioara,4915,MS,181,RO,46.64096,24.637967 146370,Dumitreni,4915,MS,181,RO,46.400926,24.758548 146371,Dumitreștii,4915,MS,181,RO,46.521745,24.787592 146372,După Deal,4915,MS,181,RO,46.517408,24.246296 146377,Ercea,4915,MS,181,RO,46.730814,24.510574 146378,Eremieni,4915,MS,181,RO,46.536419,24.871582 146379,Eremitu,4915,MS,181,RO,46.66666667,24.93333333 146380,Ernei,4915,MS,181,RO,46.6,24.65 146391,Fânațe,4915,MS,181,RO,46.53239,24.215372 146392,Fânațele Mădărașului,4915,MS,181,RO,46.625962,24.362732 146393,Fânațele Socolului,4915,MS,181,RO,46.792987,24.488032 146394,Fântâna Babii,4915,MS,181,RO,46.677422,24.337764 146395,Fântânele,4915,MS,181,RO,46.41666667,24.75 146396,Fărăgău,4915,MS,181,RO,46.77,24.52 146381,Feleag,4915,MS,181,RO,46.2411,25.014188 146382,Filea,4915,MS,181,RO,46.941797,24.883755 146383,Filitelnic,4915,MS,181,RO,46.36694444,24.66611111 146384,Filpișu Mare,4915,MS,181,RO,46.753327,24.587498 146385,Filpișu Mic,4915,MS,181,RO,46.782197,24.601248 146386,Fițcău,4915,MS,181,RO,46.899082,24.870002 146387,Foi,4915,MS,181,RO,46.479961,24.599734 146388,Frunzeni,4915,MS,181,RO,46.814458,24.567969 146390,Fundătura,4915,MS,181,RO,46.54329,24.043574 146389,Fundoaia,4915,MS,181,RO,46.827625,24.90466 146418,Găiești,4915,MS,181,RO,46.425497,24.67088 146420,Gălăoaia,4915,MS,181,RO,46.970867,24.918249 146421,Gălățeni,4915,MS,181,RO,46.473197,24.707854 146419,Gălești,4915,MS,181,RO,46.51666667,24.75 146417,Gâmbuț,4915,MS,181,RO,46.352424,24.065233 146422,Gănești,4915,MS,181,RO,46.33,24.35 146397,Gaura Sângerului,4915,MS,181,RO,46.600317,24.125397 146398,Gheja,4915,MS,181,RO,46.444948,24.061359 146399,Gheorghe Doja,4915,MS,181,RO,46.46666667,24.5 146400,Ghidașteu,4915,MS,181,RO,46.554603,24.268101 146401,Ghindari,4915,MS,181,RO,46.5,24.91666667 146402,Ghinești,4915,MS,181,RO,46.496111,24.866192 146403,Giuluș,4915,MS,181,RO,46.401262,24.311143 146404,Giurgiș,4915,MS,181,RO,46.517059,23.969579 146406,Glăjărie,4915,MS,181,RO,46.83271,24.93285 146405,Glodeni,4915,MS,181,RO,46.65,24.6 146407,Gogan,4915,MS,181,RO,46.304917,24.517119 146408,Goreni,4915,MS,181,RO,46.854581,24.654138 146409,Gornești,4915,MS,181,RO,46.66666667,24.65 146415,Grădini,4915,MS,181,RO,46.614744,24.090343 146414,Grâușorul,4915,MS,181,RO,46.599134,24.830486 146410,Grebenișu de Câmpie,4915,MS,181,RO,46.6,24.3 146411,Grindeni,4915,MS,181,RO,46.500059,23.996923 146412,Groapa Rădăii,4915,MS,181,RO,46.658092,24.234343 146413,Gruișor,4915,MS,181,RO,46.452739,24.61717 146416,Gurghiu,4915,MS,181,RO,46.76666667,24.85 146423,Habic,4915,MS,181,RO,46.70796,24.790601 146431,Hădăreni,4915,MS,181,RO,46.466984,23.983738 146424,Hagău,4915,MS,181,RO,46.716281,24.372861 146432,Hărănglab,4915,MS,181,RO,46.304758,24.415353 146433,Hărțău,4915,MS,181,RO,46.577328,24.478623 146425,Herepea,4915,MS,181,RO,46.330743,24.155157 146426,Herghelia,4915,MS,181,RO,46.63106,24.478188 146427,Hetiur,4915,MS,181,RO,46.26813,24.766801 146428,Hodac,4915,MS,181,RO,46.774477,24.922324 146429,Hodaia,4915,MS,181,RO,46.773676,24.479282 146430,Hodoșa,4915,MS,181,RO,46.63333333,24.81666667 146434,Iara de Mureș,4915,MS,181,RO,46.661484,24.730556 146435,Ibănești-Pădure,4915,MS,181,RO,46.759193,24.983592 146436,Icland,4915,MS,181,RO,46.611969,24.693377 146437,Iclandu Mare,4915,MS,181,RO,46.528104,24.265365 146438,Iclănzel,4915,MS,181,RO,46.53,24.28 146440,Ideciu de Jos,4915,MS,181,RO,46.8,24.75 146441,Idicel-Pădure,4915,MS,181,RO,46.854639,24.857233 146442,Idiciu,4915,MS,181,RO,46.27625,24.46105 146443,Idrifaia,4915,MS,181,RO,46.387584,24.464444 146444,Iernut,4915,MS,181,RO,46.45333333,24.23333333 146445,Iernuțeni,4915,MS,181,RO,46.763866,24.719191 146446,Ihod,4915,MS,181,RO,46.634948,24.798986 146447,Ilieni,4915,MS,181,RO,46.463708,24.530214 146448,Ilieși,4915,MS,181,RO,46.582551,25.128017 146449,Ilioara,4915,MS,181,RO,46.64585,24.747588 146450,Iod,4915,MS,181,RO,46.973368,24.977196 146451,Isla,4915,MS,181,RO,46.624756,24.785637 146453,Iștan-Tău,4915,MS,181,RO,46.650152,24.303104 146454,Iștihaza,4915,MS,181,RO,46.392679,24.105241 146452,Ivănești,4915,MS,181,RO,46.542045,24.676347 146455,Jabenița,4915,MS,181,RO,46.78259,24.793954 146456,Jacodu,4915,MS,181,RO,46.3278,24.8303 146457,Jacu,4915,MS,181,RO,46.321579,24.814065 146478,Lăpușna,4915,MS,181,RO,46.767949,25.215018 146458,Larga,4915,MS,181,RO,46.719711,24.18108 146479,Lăscud,4915,MS,181,RO,46.391821,24.355646 146459,Laslău Mare,4915,MS,181,RO,46.384208,24.540756 146460,Laslău Mic,4915,MS,181,RO,46.36777778,24.555 146480,Lăureni,4915,MS,181,RO,46.54272,24.732928 146461,Lechincioara,4915,MS,181,RO,46.665702,24.420089 146462,Lechința,4915,MS,181,RO,46.473756,24.226535 146463,Lefaia,4915,MS,181,RO,46.74793,24.470418 146464,Leniș,4915,MS,181,RO,46.727929,24.420054 146465,Leordeni,4915,MS,181,RO,46.471077,24.486318 146466,Leorința,4915,MS,181,RO,46.60825,24.229741 146467,Leorința-Șăulia,4915,MS,181,RO,46.618973,24.212209 146468,Lepindea,4915,MS,181,RO,46.328885,24.475459 146469,Linț,4915,MS,181,RO,46.533197,24.002057 146470,Livezeni,4915,MS,181,RO,46.55,24.63333333 146471,Logig,4915,MS,181,RO,46.879456,24.573776 146472,Loțu,4915,MS,181,RO,46.400288,24.896336 146473,Luduș,4915,MS,181,RO,46.47777778,24.09611111 146474,Luieriu,4915,MS,181,RO,46.845478,24.721051 146475,Lunca,4915,MS,181,RO,46.849255,24.575918 146476,Lunca Bradului,4915,MS,181,RO,46.95,25.1 146477,Lunca Mureșului,4915,MS,181,RO,46.874599,24.790733 146508,Măcicășești,4915,MS,181,RO,46.639594,24.235857 146509,Mădăraș,4915,MS,181,RO,46.6,24.43333333 146510,Mădărășeni,4915,MS,181,RO,46.50305556,24.25666667 146511,Măgherani,4915,MS,181,RO,46.56666667,24.9 146512,Măgheruș,4915,MS,181,RO,46.32166667,24.68722222 146481,Maia,4915,MS,181,RO,46.581181,24.848184 146482,Maiad,4915,MS,181,RO,46.51967,24.71485 146483,Maiorești,4915,MS,181,RO,46.907872,24.8106 146513,Mălăești,4915,MS,181,RO,46.627934,24.096748 146484,Maldaoci,4915,MS,181,RO,46.411334,24.039773 146485,Malea,4915,MS,181,RO,46.582689,24.190795 146515,Mărășești,4915,MS,181,RO,46.593022,24.353275 146514,Mărculeni,4915,MS,181,RO,46.597128,24.86524 146516,Mătrici,4915,MS,181,RO,46.652789,24.902564 146486,Merișor,4915,MS,181,RO,46.699214,24.549777 146487,Merișoru,4915,MS,181,RO,46.570262,24.214033 146488,Meștera,4915,MS,181,RO,46.968458,25.192894 146489,Mica,4915,MS,181,RO,46.368046,24.412405 146490,Miercurea Nirajului,4915,MS,181,RO,46.53,24.8 146491,Mihai Viteazu,4915,MS,181,RO,46.155269,25.027881 146492,Miheșu de Câmpie,4915,MS,181,RO,46.68,24.15 146493,Milășel,4915,MS,181,RO,46.742699,24.452499 146494,Mirigioaia,4915,MS,181,RO,46.802047,24.928235 146495,Mitrești,4915,MS,181,RO,46.584493,24.801468 146496,Moara de Jos,4915,MS,181,RO,46.564504,24.091942 146497,Mogoaia,4915,MS,181,RO,46.670271,24.232407 146498,Moișa,4915,MS,181,RO,46.68456,24.528195 146501,Morăreni,4915,MS,181,RO,46.924358,24.831386 146499,Morești,4915,MS,181,RO,46.489378,24.43994 146500,Moruț,4915,MS,181,RO,46.743555,24.199084 146502,Moșuni,4915,MS,181,RO,46.569145,24.743311 146503,Mura Mare,4915,MS,181,RO,46.656966,24.780166 146504,Mura Mică,4915,MS,181,RO,46.649091,24.765238 146505,Mureni,4915,MS,181,RO,46.23041,24.989212 146506,Mureșeni,4915,MS,181,RO,46.523276,24.521608 146507,Murgești,4915,MS,181,RO,46.480879,24.655164 146518,Nadășa,4915,MS,181,RO,46.702747,24.817137 146517,Nadeș,4915,MS,181,RO,46.32138889,24.71916667 146519,Nandra,4915,MS,181,RO,46.383004,24.076637 146520,Nazna,4915,MS,181,RO,46.53552,24.5021 146521,Neagra,4915,MS,181,RO,46.972296,25.146853 146522,Neaua,4915,MS,181,RO,46.48333333,24.83333333 146523,Negrenii de Câmpie,4915,MS,181,RO,46.645612,24.287432 146524,Nicolești,4915,MS,181,RO,46.477055,24.555746 146525,Nima Milășelului,4915,MS,181,RO,46.728387,24.443628 146526,Nima Râciului,4915,MS,181,RO,46.703652,24.443567 146527,Oarba de Mureș,4915,MS,181,RO,46.463254,24.290783 146528,Obârșie,4915,MS,181,RO,46.747816,24.392708 146529,Odrihei,4915,MS,181,RO,46.404585,24.567714 146530,Ogra,4915,MS,181,RO,46.43,24.32 146531,Onuca,4915,MS,181,RO,46.726297,24.581204 146532,Ormeniș,4915,MS,181,RO,46.328526,24.54506 146533,Oroiu,4915,MS,181,RO,46.543092,24.3547 146534,Orosia,4915,MS,181,RO,46.456511,24.140508 146535,Orșova,4915,MS,181,RO,46.751534,24.906428 146536,Ozd,4915,MS,181,RO,46.357269,24.120322 146555,Păcureni,4915,MS,181,RO,46.661855,24.556515 146556,Pădurea,4915,MS,181,RO,46.632982,24.177314 146557,Pădureni,4915,MS,181,RO,46.640532,24.716247 146558,Păingeni,4915,MS,181,RO,46.680033,24.561963 146559,Pănet,4915,MS,181,RO,46.55,24.46666667 146537,Papiu Ilarian,4915,MS,181,RO,46.559321,24.20059 146553,Pârâu Crucii,4915,MS,181,RO,46.708608,24.35673 146554,Pârâu Mare,4915,MS,181,RO,46.763876,25.004242 146560,Păsăreni,4915,MS,181,RO,46.48333333,24.7 146561,Păucișoara,4915,MS,181,RO,46.350889,24.351188 146562,Păuloaia,4915,MS,181,RO,46.804278,24.883581 146538,Periș,4915,MS,181,RO,46.694223,24.663368 146539,Petea,4915,MS,181,RO,46.510387,24.345754 146540,Petelea,4915,MS,181,RO,46.73,24.72 146541,Petrilaca,4915,MS,181,RO,46.411112,24.145945 146542,Petrilaca de Mureș,4915,MS,181,RO,46.689214,24.752985 146543,Pietriș,4915,MS,181,RO,46.935937,24.844078 146544,Pipea,4915,MS,181,RO,46.325235,24.774546 146545,Poarta,4915,MS,181,RO,46.735167,24.561467 146546,Poduri,4915,MS,181,RO,46.634584,24.061072 146547,Pogăceaua,4915,MS,181,RO,46.68,24.3 146548,Poienița,4915,MS,181,RO,46.555623,24.670084 146549,Porumbac,4915,MS,181,RO,46.481103,24.264719 146550,Porumbeni,4915,MS,181,RO,46.63684,24.546804 146551,Pripoare,4915,MS,181,RO,46.524679,24.198444 146552,Pusta,4915,MS,181,RO,46.678123,24.358149 146563,Racameț,4915,MS,181,RO,46.513068,24.240439 146573,Râciu,4915,MS,181,RO,46.68,24.4 146564,Ranta,4915,MS,181,RO,46.484924,24.131495 146574,Râpa de Jos,4915,MS,181,RO,46.940848,24.76608 146575,Răstolița,4915,MS,181,RO,46.98,25.03 146576,Răzoare,4915,MS,181,RO,46.69243,24.19386 146565,Recea,4915,MS,181,RO,46.465006,24.416718 146182,Reghin,4915,MS,181,RO,46.7723877,24.6694561 146566,Remetea,4915,MS,181,RO,46.572943,24.521369 146567,Rigmani,4915,MS,181,RO,46.508988,24.83835 146568,Rora,4915,MS,181,RO,46.226064,24.743328 146571,Roșiori,4915,MS,181,RO,46.514334,24.094756 146569,Roteni,4915,MS,181,RO,46.458749,24.681826 146570,Roua,4915,MS,181,RO,46.382363,24.828906 146572,Rușii-Munți,4915,MS,181,RO,46.91667,24.85 146618,Săbed,4915,MS,181,RO,46.664499,24.446319 146620,Săcădat,4915,MS,181,RO,46.624534,25.06206 146619,Săcalu de Pădure,4915,MS,181,RO,46.883686,24.711337 146621,Săcăreni,4915,MS,181,RO,46.599877,24.697296 146702,Șaeș,4915,MS,181,RO,46.15277778,24.76944444 146622,Sălard,4915,MS,181,RO,46.951456,25.075454 146623,Sălașuri,4915,MS,181,RO,46.375514,24.776067 146624,Sălcud,4915,MS,181,RO,46.407555,24.171407 146598,Sâmbriaș,4915,MS,181,RO,46.661808,24.82884 146599,Sâncraiu de Mureș,4915,MS,181,RO,46.55,24.52 146703,Șandru,4915,MS,181,RO,46.537333,24.210633 146600,Sângeorgiu de Câmpie,4915,MS,181,RO,46.726953,24.296652 146601,Sângeorgiu de Mureș,4915,MS,181,RO,46.576434,24.604207 146602,Sângeorgiu de Pădure,4915,MS,181,RO,46.43027778,24.84166667 146603,Sânger,4915,MS,181,RO,46.55,24.13 146604,Sângeru de Pădure,4915,MS,181,RO,46.640718,24.665063 146605,Sâniacob,4915,MS,181,RO,46.423543,24.131916 146606,Sânișor,4915,MS,181,RO,46.550173,24.700704 146608,Sânmărghita,4915,MS,181,RO,46.481571,24.372332 146609,Sânmărtinu de Câmpie,4915,MS,181,RO,46.728122,24.408433 146607,Sânmihai de Pădure,4915,MS,181,RO,46.728889,24.87474 146610,Sânpaul,4915,MS,181,RO,46.45,24.35 146611,Sânpetru de Câmpie,4915,MS,181,RO,46.72,24.27 146612,Sânsimion,4915,MS,181,RO,46.495494,24.834585 146613,Sântana de Mureș,4915,MS,181,RO,46.57611111,24.55416667 146614,Sântioana,4915,MS,181,RO,46.283675,24.551323 146615,Sântioana de Mureș,4915,MS,181,RO,46.514657,24.457141 146616,Sântu,4915,MS,181,RO,46.80168,24.600744 146617,Sânvăsii,4915,MS,181,RO,46.495734,24.740026 146704,Șapartoc,4915,MS,181,RO,46.23333333,24.85 146627,Sărățeni,4915,MS,181,RO,46.56233333,25.00891667 146705,Șardu Nirajului,4915,MS,181,RO,46.54426,24.752856 146626,Sărmășel,4915,MS,181,RO,46.760625,24.178854 146625,Sărmașu,4915,MS,181,RO,46.75361111,24.16666667 146577,Saschiz,4915,MS,181,RO,46.18333333,24.96666667 146578,Satu Nou,4915,MS,181,RO,46.456813,24.512254 146717,Șăulia,4915,MS,181,RO,46.63,24.22 146718,Șăulița,4915,MS,181,RO,46.662677,24.215054 146719,Șăușa,4915,MS,181,RO,46.503762,24.396146 146579,Scurta,4915,MS,181,RO,46.660658,24.249545 146580,Sebeș,4915,MS,181,RO,46.932022,24.864381 146581,Seleuș,4915,MS,181,RO,46.362803,24.588708 146582,Senereuș,4915,MS,181,RO,46.332315,24.647041 146706,Șerbeni,4915,MS,181,RO,46.714754,24.866479 146583,Seuca,4915,MS,181,RO,46.330606,24.329071 146707,Șeulia de Mureș,4915,MS,181,RO,46.415888,24.247196 146584,Sfântu Gheorghe,4915,MS,181,RO,46.45355,24.265935 146585,Sicele,4915,MS,181,RO,46.694354,24.292038 146586,Sighișoara,4915,MS,181,RO,46.21694444,24.79111111 146708,Șilea Nirajului,4915,MS,181,RO,46.598873,24.923193 146709,Șincai,4915,MS,181,RO,46.66341,24.3764 146710,Șincai-Fânațe,4915,MS,181,RO,46.654941,24.336874 146711,Șoard,4915,MS,181,RO,46.263015,24.926282 146587,Socolu de Câmpie,4915,MS,181,RO,46.791415,24.515753 146712,Șoimuș,4915,MS,181,RO,46.393877,24.587032 146588,Solocma,4915,MS,181,RO,46.475917,24.995259 146589,Solovăstru,4915,MS,181,RO,46.77,24.77 146713,Șomoștelnic,4915,MS,181,RO,46.39175,24.385297 146714,Șoromiclea,4915,MS,181,RO,46.260245,24.7711 146590,Sovata,4915,MS,181,RO,46.59611111,25.07444444 146593,Stânceni,4915,MS,181,RO,46.98,25.23 146715,Ștefanca,4915,MS,181,RO,46.685706,24.231615 146716,Ștefăneaca,4915,MS,181,RO,46.611903,24.110692 146592,Stejărenii,4915,MS,181,RO,46.153672,24.724345 146591,Stejeriș,4915,MS,181,RO,46.478897,24.616421 146594,Sub Pădure,4915,MS,181,RO,46.370137,24.32634 146595,Suplac,4915,MS,181,RO,46.38333333,24.51666667 146596,Suseni,4915,MS,181,RO,46.814371,24.731695 146597,Suveica,4915,MS,181,RO,46.433519,24.716538 146645,Tăblășeni,4915,MS,181,RO,46.517626,24.306669 146642,Tâmpa,4915,MS,181,RO,46.530192,24.766346 146643,Târgu Mureș,4915,MS,181,RO,46.54972222,24.55972222 146644,Târnăveni,4915,MS,181,RO,46.32628,24.2854 146646,Tău,4915,MS,181,RO,46.594416,24.154188 146647,Tăureni,4915,MS,181,RO,46.58333333,24.1 146628,Teleac,4915,MS,181,RO,46.67222222,24.79166667 146720,Țigmandru,4915,MS,181,RO,46.35,24.71666667 146721,Țiptelnic,4915,MS,181,RO,46.584621,24.414228 146629,Tireu,4915,MS,181,RO,46.766608,24.994562 146630,Tirimia,4915,MS,181,RO,46.449273,24.491622 146631,Tirimioara,4915,MS,181,RO,46.454628,24.547894 146632,Tisieu,4915,MS,181,RO,46.765594,25.012583 146633,Titiana,4915,MS,181,RO,46.731689,24.1865 146634,Toaca,4915,MS,181,RO,46.798609,24.965504 146635,Tofalău,4915,MS,181,RO,46.587061,24.657705 146636,Toldal,4915,MS,181,RO,46.705092,24.58155 146637,Tonciu,4915,MS,181,RO,46.780252,24.552013 146722,Țopa,4915,MS,181,RO,46.254447,24.881619 146638,Torba,4915,MS,181,RO,46.547458,24.887584 146639,Trei Sate,4915,MS,181,RO,46.476306,24.897789 146640,Troița,4915,MS,181,RO,46.484423,24.769774 146641,Tușinu,4915,MS,181,RO,46.733312,24.227593 146648,Uila,4915,MS,181,RO,46.93055556,24.61805556 146649,Ulieș,4915,MS,181,RO,46.73348,24.333548 146650,Ungheni,4915,MS,181,RO,46.48583333,24.46083333 146651,Uricea,4915,MS,181,RO,46.783849,24.984073 146652,Urisiu de Jos,4915,MS,181,RO,46.710853,24.89609 146653,Urisiu de Sus,4915,MS,181,RO,46.706223,24.911087 146654,Ursoaia,4915,MS,181,RO,46.549486,24.224713 146690,Vădaș,4915,MS,181,RO,46.455898,24.819394 146655,Vadu,4915,MS,181,RO,46.608122,24.781877 146656,Vaidacuta,4915,MS,181,RO,46.419062,24.526264 146657,Vaideiu,4915,MS,181,RO,46.495342,24.32084 146658,Valea,4915,MS,181,RO,46.563287,24.796914 146659,Valea Albeștiului,4915,MS,181,RO,46.214617,24.848338 146660,Valea Dăii,4915,MS,181,RO,46.225693,24.896124 146661,Valea Frăției,4915,MS,181,RO,46.645049,24.066565 146662,Valea Glodului,4915,MS,181,RO,46.646994,24.084808 146663,Valea Iclandului,4915,MS,181,RO,46.534392,24.253911 146664,Valea Izvoarelor,4915,MS,181,RO,46.438553,24.375974 146665,Valea Largă,4915,MS,181,RO,46.62,24.07 146666,Valea Mare,4915,MS,181,RO,46.637619,24.300194 146667,Valea Pădurii,4915,MS,181,RO,46.619686,24.053702 146668,Valea Rece,4915,MS,181,RO,46.571068,24.336065 146671,Valea Sânmărtinului,4915,MS,181,RO,46.743166,24.337579 146672,Valea Sânpetrului,4915,MS,181,RO,46.622582,24.286661 146676,Valea Șapartocului,4915,MS,181,RO,46.205997,24.848574 146669,Valea Sasului,4915,MS,181,RO,46.822716,24.48454 146670,Valea Seacă,4915,MS,181,RO,46.745365,24.407525 146677,Valea Șurii,4915,MS,181,RO,46.636764,24.052609 146673,Valea Ulieșului,4915,MS,181,RO,46.736567,24.368806 146674,Valea Ungurului,4915,MS,181,RO,46.804992,24.480554 146675,Valea Urieșului,4915,MS,181,RO,46.630046,24.084902 146691,Văleni,4915,MS,181,RO,46.662759,24.271237 146692,Vălenii,4915,MS,181,RO,46.446914,24.647086 146693,Vălenii de Mureș,4915,MS,181,RO,46.892744,24.797926 146694,Vălișoara,4915,MS,181,RO,46.531726,24.199932 146695,Vălureni,4915,MS,181,RO,46.500214,24.546007 146689,Vânători,4915,MS,181,RO,46.241134,24.922594 146696,Vărgata,4915,MS,181,RO,46.56666667,24.8 146697,Vătava,4915,MS,181,RO,46.961093,24.765068 146678,Venchi,4915,MS,181,RO,46.245523,24.743062 146679,Veța,4915,MS,181,RO,46.560073,24.723083 146680,Vețca,4915,MS,181,RO,46.35,24.78333333 146681,Vidrasău,4915,MS,181,RO,46.474834,24.412662 146682,Viforoasa,4915,MS,181,RO,46.431894,24.809816 146683,Viilor,4915,MS,181,RO,46.237558,24.809333 146684,Viișoara,4915,MS,181,RO,46.28,24.6 146685,Vișinelu,4915,MS,181,RO,46.7379,24.1024 146686,Voiniceni,4915,MS,181,RO,46.613718,24.524968 146687,Voivodeni,4915,MS,181,RO,46.7,24.63333333 146688,Vulcan,4915,MS,181,RO,46.148917,24.85367 146698,Zagăr,4915,MS,181,RO,46.35083333,24.61638889 146701,Zăpodea,4915,MS,181,RO,46.54057,24.117512 146699,Zau de Câmpie,4915,MS,181,RO,46.6,24.13 146700,Zimți,4915,MS,181,RO,46.75979,25.049122 89882,Adjudeni,4731,NT,181,RO,47.01408,26.94903 89892,Agapia,4731,NT,181,RO,47.16667,26.28333 90026,Bahna,4731,NT,181,RO,46.78333,26.78333 90527,Bălţăteşti,4731,NT,181,RO,47.11667,26.3 90518,Bălușești,4731,NT,181,RO,46.81591,26.99885 90445,Bâra,4731,NT,181,RO,47.03333,27.05 90543,Bărcăneşti,4731,NT,181,RO,46.71667,26.58333 90448,Bârgăuani,4731,NT,181,RO,46.98333,26.63333 90062,Barticești,4731,NT,181,RO,47.06324,26.79254 90126,Bicaz,4731,NT,181,RO,46.91667,26.06667 90127,Bicaz-Chei,4731,NT,181,RO,46.81667,25.88333 90128,Bicazu Ardelean,4731,NT,181,RO,46.85,25.93333 90151,Bistrița,4731,NT,181,RO,46.94856,26.29598 90170,Boboiești,4731,NT,181,RO,47.2537,26.03749 90180,Bodeşti,4731,NT,181,RO,47.03333,26.41667 90182,Bodeștii de Jos,4731,NT,181,RO,47.02752,26.44483 90198,Boghicea,4731,NT,181,RO,47.05414,27.06935 90220,Borca,4731,NT,181,RO,47.18333,25.76667 90228,Borleşti,4731,NT,181,RO,46.76667,26.48333 90243,Botești,4731,NT,181,RO,47.052,26.74863 90252,Bozieni,4731,NT,181,RO,46.83333,27.15 90315,Brusturi,4731,NT,181,RO,47.28333,26.38333 90384,Budești,4731,NT,181,RO,46.94084,26.71177 90422,Buruienești,4731,NT,181,RO,46.99595,26.97732 93807,Cândeşti,4731,NT,181,RO,46.71667,26.58333 90599,Ceahlău,4731,NT,181,RO,47.05,25.96667 90667,Chilii,4731,NT,181,RO,46.80254,27.03394 90670,Chintinici,4731,NT,181,RO,46.82754,26.49339 90829,Comuna Agapia,4731,NT,181,RO,47.16196,26.29545 90847,Comuna Alexandru Cel Bun,4731,NT,181,RO,46.93988,26.26849 90915,Comuna Bahna,4731,NT,181,RO,46.7786,26.79742 91229,Comuna Bălţăteşti,4731,NT,181,RO,47.13076,26.30187 91184,Comuna Bâra,4731,NT,181,RO,47.01319,27.04016 91187,Comuna Bârgãuani,4731,NT,181,RO,46.97877,26.64589 90983,Comuna Bicaz Chei,4731,NT,181,RO,46.83435,25.87234 90984,Comuna Bicazu Ardelean,4731,NT,181,RO,46.86884,25.9257 91018,Comuna Bodeşti-Precista,4731,NT,181,RO,47.03819,26.4379 91031,Comuna Boghicea,4731,NT,181,RO,47.06025,27.11082 91045,Comuna Borca,4731,NT,181,RO,47.19099,25.7814 91050,Comuna Borleşti,4731,NT,181,RO,46.78934,26.4908 91060,Comuna Boteşti,4731,NT,181,RO,47.06415,26.75969 91066,Comuna Bozieni,4731,NT,181,RO,46.84446,27.15282 91107,Comuna Brusturi-Drăgăneşti,4731,NT,181,RO,47.29579,26.35443 91546,Comuna Cândeşti,4731,NT,181,RO,46.71667,26.58333 91271,Comuna Ceahlău,4731,NT,181,RO,47.04488,25.95955 91432,Comuna Cordun,4731,NT,181,RO,46.9729,26.86265 91460,Comuna Costişa,4731,NT,181,RO,46.75818,26.64623 91517,Comuna Crăcăoani,4731,NT,181,RO,47.09597,26.25865 91735,Comuna Dămuc,4731,NT,181,RO,46.75621,25.89219 91634,Comuna Dobreni,4731,NT,181,RO,46.99482,26.40941 91648,Comuna Dochia,4731,NT,181,RO,46.9174,26.58485 91656,Comuna Doljeşti,4731,NT,181,RO,47.02806,26.97557 91701,Comuna Drăgăneşti,4731,NT,181,RO,47.31204,26.4155 91674,Comuna Dragomireşti,4731,NT,181,RO,47.02798,26.57536 91709,Comuna Dulceşti,4731,NT,181,RO,46.98346,26.78062 91713,Comuna Dumbrava Roşie,4731,NT,181,RO,46.88535,26.44117 91823,Comuna Fărcaşa,4731,NT,181,RO,47.15272,25.8488 91817,Comuna Fãurei,4731,NT,181,RO,46.91528,26.71834 91961,Comuna Gâdinţi,4731,NT,181,RO,46.93708,27.00588 91969,Comuna Gârcina,4731,NT,181,RO,46.99222,26.3282 91848,Comuna Gherăeşti,4731,NT,181,RO,47.0362,26.82009 91859,Comuna Ghindăoani,4731,NT,181,RO,47.10983,26.33909 91872,Comuna Girov,4731,NT,181,RO,46.94918,26.48244 91919,Comuna Grinţieş,4731,NT,181,RO,47.02472,25.87636 91932,Comuna Grumăzeşti,4731,NT,181,RO,47.14727,26.38641 91992,Comuna Hangu,4731,NT,181,RO,47.03525,26.064 92019,Comuna Horia,4731,NT,181,RO,46.90639,26.93891 92061,Comuna Icuseşti,4731,NT,181,RO,46.79894,26.99076 92082,Comuna Ion Creangă,4731,NT,181,RO,46.86069,27.00358 92407,Comuna Mărgineni,4731,NT,181,RO,46.89237,26.65742 92327,Comuna Moldoveni,4731,NT,181,RO,46.82131,26.78791 92432,Comuna Negreşti,4731,NT,181,RO,47.04779,26.35005 92501,Comuna Oniceni,4731,NT,181,RO,46.78926,27.16336 92703,Comuna Pânceşti,4731,NT,181,RO,46.9017,27.16879 92704,Comuna Pângăraţi,4731,NT,181,RO,46.93333,26.15 92722,Comuna Păstrăveni,4731,NT,181,RO,47.1594,26.57615 92565,Comuna Petricani,4731,NT,181,RO,47.15304,26.44114 92574,Comuna Piatra Şoimului,4731,NT,181,RO,46.82443,26.41848 92585,Comuna Pipirig,4731,NT,181,RO,47.228,26.08483 92615,Comuna Podoleni,4731,NT,181,RO,46.81772,26.6328 92633,Comuna Poiana Teiului,4731,NT,181,RO,47.11403,25.92517 92635,Comuna Poienari,4731,NT,181,RO,46.88625,27.11966 92852,Comuna Răuceşti,4731,NT,181,RO,47.26151,26.4117 92832,Comuna Rãzboieni,4731,NT,181,RO,47.07424,26.5615 92759,Comuna Rediu,4731,NT,181,RO,46.75,26.56667 92788,Comuna Români,4731,NT,181,RO,46.80242,26.69945 92809,Comuna Ruginoasa,4731,NT,181,RO,46.97447,26.70674 93078,Comuna Săbăoani,4731,NT,181,RO,47.00187,26.88525 92862,Comuna Sagna,4731,NT,181,RO,46.96806,27.0167 93117,Comuna Săvineşti,4731,NT,181,RO,46.86469,26.484 92914,Comuna Secuieni,4731,NT,181,RO,46.86853,26.81062 93021,Comuna Stăniţa,4731,NT,181,RO,47.01216,27.13704 93551,Comuna Ştefan cel Mare,4731,NT,181,RO,46.98599,26.51293 93237,Comuna Tămăşeni,4731,NT,181,RO,47.00327,26.95087 93126,Comuna Tarcău,4731,NT,181,RO,46.82269,26.16264 93130,Comuna Taşca,4731,NT,181,RO,46.88991,26.01069 93129,Comuna Tazlău,4731,NT,181,RO,46.72098,26.47003 93571,Comuna Ţibucani,4731,NT,181,RO,47.11856,26.5735 93155,Comuna Timişeşti,4731,NT,181,RO,47.22939,26.51982 93192,Comuna Trifeşti,4731,NT,181,RO,46.90906,26.83311 93208,Comuna Tupilaţi,4731,NT,181,RO,47.08147,26.64158 93280,Comuna Urecheni,4731,NT,181,RO,47.17764,26.53424 93327,Comuna Valea Ursului,4731,NT,181,RO,46.79452,27.08166 93458,Comuna Văleni,4731,NT,181,RO,47.02964,26.71532 93436,Comuna Vânători Neamţ,4731,NT,181,RO,47.23534,26.277 93486,Comuna Zăneşti,4731,NT,181,RO,46.82573,26.56213 93623,Cordun,4731,NT,181,RO,46.95,26.86667 93668,Costişa,4731,NT,181,RO,46.75,26.65 93677,Cotu Vameș,4731,NT,181,RO,46.906,26.95535 93753,Crăcăoani,4731,NT,181,RO,47.09836,26.31111 93702,Cracăul Negru,4731,NT,181,RO,47.09363,26.24061 93764,Cuejdiu,4731,NT,181,RO,46.9904,26.29455 93781,Cut,4731,NT,181,RO,46.88258,26.41928 94121,Dămuc,4731,NT,181,RO,46.8,25.9 93951,Dobreni,4731,NT,181,RO,46.98333,26.41667 93974,Dochia,4731,NT,181,RO,46.90731,26.56763 93976,Dodeni,4731,NT,181,RO,46.92587,26.09277 93984,Dolhești,4731,NT,181,RO,47.21189,26.06738 93987,Doljeşti,4731,NT,181,RO,47.03333,26.98333 94063,Drăgănești,4731,NT,181,RO,47.30886,26.40551 94015,Dragomireşti,4731,NT,181,RO,47.01667,26.53333 94073,Dulceşti,4731,NT,181,RO,46.96667,26.76667 94080,Dumbrava,4731,NT,181,RO,47.2162,26.46309 94081,Dumbrava Roşie,4731,NT,181,RO,46.88333,26.43333 94260,Fărcaşa,4731,NT,181,RO,47.16667,25.83333 94270,Făurei,4731,NT,181,RO,46.91667,26.68333 94173,Filioara,4731,NT,181,RO,47.1604,26.2792 94476,Gâdinţi,4731,NT,181,RO,46.93333,27.01667 94487,Gârcina,4731,NT,181,RO,46.97691,26.34573 94312,Gherăeşti,4731,NT,181,RO,47.01667,26.81667 94328,Ghindăoani,4731,NT,181,RO,47.10983,26.33909 94348,Girov,4731,NT,181,RO,46.95,26.51667 94397,Goșmani,4731,NT,181,RO,46.8362,26.71522 94414,Grinţieş,4731,NT,181,RO,47.05,25.86667 94431,Grumăzeşti,4731,NT,181,RO,47.13333,26.36667 94522,Hangu,4731,NT,181,RO,47.05,26.03333 94539,Hlăpești,4731,NT,181,RO,47.03817,26.59842 94541,Hociungi,4731,NT,181,RO,46.81311,26.77596 94563,Horia,4731,NT,181,RO,46.90698,26.91919 94577,Humulești,4731,NT,181,RO,47.19846,26.35273 94637,Icuseşti,4731,NT,181,RO,46.8,26.93333 94674,Ion Creangă,4731,NT,181,RO,46.87029,26.98023 94703,Izvoare,4731,NT,181,RO,46.74699,26.80221 94850,Luminiș,4731,NT,181,RO,46.81332,26.45275 94855,Lunca,4731,NT,181,RO,47.22765,26.29979 95268,Mărgineni,4731,NT,181,RO,46.9,26.63333 94933,Mastacăn,4731,NT,181,RO,46.78918,26.48677 95018,Miron Costin,4731,NT,181,RO,46.9203,26.80567 95066,Moldoveni,4731,NT,181,RO,46.83333,26.76667 95168,Municipiul Piatra-Neamţ,4731,NT,181,RO,46.92336,26.3738 95172,Municipiul Roman,4731,NT,181,RO,46.92973,26.93678 95318,Negrești,4731,NT,181,RO,47.02938,26.37958 95326,Nemțișor,4731,NT,181,RO,47.23962,26.27209 95349,Nisiporești,4731,NT,181,RO,47.0772,26.73791 95380,Oanțu,4731,NT,181,RO,46.9097,26.19887 95413,Oglinzi,4731,NT,181,RO,47.25055,26.35026 95441,Oniceni,4731,NT,181,RO,46.81667,27.15 95463,Oraş Bicaz,4731,NT,181,RO,46.9489,26.07982 95579,Oraş Roznov,4731,NT,181,RO,46.8385,26.51277 95608,Oraş Târgu Neamţ,4731,NT,181,RO,47.19698,26.36414 95993,Pânceşti,4731,NT,181,RO,46.90296,27.15314 95996,Pângărăcior,4731,NT,181,RO,46.93333,26.21667 95995,Pângăraţi,4731,NT,181,RO,46.93333,26.15 96022,Păstrăveni,4731,NT,181,RO,47.16667,26.56667 95751,Petricani,4731,NT,181,RO,47.16667,26.46667 95771,Piatra Neamţ,4731,NT,181,RO,46.91667,26.33333 95773,Piatra Şoimului,4731,NT,181,RO,46.83333,26.43333 95792,Pildești,4731,NT,181,RO,46.99675,26.82558 95794,Pipirig,4731,NT,181,RO,47.25,26.06667 95848,Podoleni,4731,NT,181,RO,46.8,26.61667 95872,Poiana Crăcăoani,4731,NT,181,RO,47.06667,26.31667 95882,Poiana Teiului,4731,NT,181,RO,47.1,25.96667 95885,Poienari,4731,NT,181,RO,46.88777,27.12765 95890,Poieni,4731,NT,181,RO,46.83333,26.35 95900,Poloboc,4731,NT,181,RO,46.76109,26.54975 96193,Rădeni,4731,NT,181,RO,47.1426,26.53703 96211,Răuceşti,4731,NT,181,RO,47.25,26.41667 96215,Războienii de Jos,4731,NT,181,RO,47.06887,26.56374 96076,Rediu,4731,NT,181,RO,46.75598,26.56254 96105,Roman,4731,NT,181,RO,46.92119,26.92646 96115,Români,4731,NT,181,RO,46.78333,26.68333 96120,Rotunda,4731,NT,181,RO,47.0221,26.96266 96125,Roznov,4731,NT,181,RO,46.83333,26.51667 96149,Ruginoasa,4731,NT,181,RO,46.98622,26.70635 96161,Ruseni,4731,NT,181,RO,46.79841,26.53943 105988,Săbăoani,4731,NT,181,RO,47.01667,26.85 96219,Sabasa,4731,NT,181,RO,47.20174,25.8176 96228,Sagna,4731,NT,181,RO,46.98333,27.01667 106047,Săvineşti,4731,NT,181,RO,46.85,26.46667 96315,Secuieni,4731,NT,181,RO,46.85,26.83333 96343,Siliștea,4731,NT,181,RO,46.77781,26.69303 96368,Slobozia,4731,NT,181,RO,46.84892,26.53344 96471,Stânca,4731,NT,181,RO,47.23069,26.13139 96482,Stăniţa,4731,NT,181,RO,47.01667,27.1 97080,Ştefan cel Mare,4731,NT,181,RO,46.98482,26.5107 96427,Stejaru,4731,NT,181,RO,46.91888,26.18023 96607,Tămăşeni,4731,NT,181,RO,46.98333,26.93333 106060,Tarcău,4731,NT,181,RO,46.86667,26.13333 96586,Târgu Neamţ,4731,NT,181,RO,47.2,26.36667 106065,Taşca,4731,NT,181,RO,46.9,26.01667 106064,Tazlău,4731,NT,181,RO,46.71667,26.46667 106077,Telec,4731,NT,181,RO,46.87979,25.87775 97102,Ţibucani,4731,NT,181,RO,47.1,26.53333 106101,Timişeşti,4731,NT,181,RO,47.23333,26.55 97141,Țolici,4731,NT,181,RO,47.1184,26.44841 106134,Topolița,4731,NT,181,RO,47.16787,26.38345 106146,Traian,4731,NT,181,RO,46.83335,26.57655 106155,Trifeşti,4731,NT,181,RO,46.91667,26.81667 96550,Tupilaţi,4731,NT,181,RO,47.06667,26.63333 96674,Urecheni,4731,NT,181,RO,47.16667,26.51667 96955,Vădurele,4731,NT,181,RO,46.72958,26.57173 96709,Valea Arini,4731,NT,181,RO,47.12694,26.29377 96755,Valea Seacă,4731,NT,181,RO,47.13944,26.29956 96761,Valea Ursului,4731,NT,181,RO,46.81667,27.08333 96960,Văleni,4731,NT,181,RO,46.90291,26.38945 96933,Vânători-Neamţ,4731,NT,181,RO,47.2,26.31667 96818,Viişoara,4731,NT,181,RO,46.93333,26.23333 97011,Zăneşti,4731,NT,181,RO,46.81667,26.55 89933,Alimănești,4738,OT,181,RO,44.25693,24.53895 89942,Alunișu,4738,OT,181,RO,44.71667,24.55 90472,Băbiciu,4738,OT,181,RO,44.03333,24.56667 90021,Bacea,4738,OT,181,RO,44.39824,24.63759 90524,Bălănești,4738,OT,181,RO,44.2497,24.48216 90041,Baldovineşti,4738,OT,181,RO,44.38333,24.05 90050,Balş,4738,OT,181,RO,44.35,24.1 90515,Bălteni,4738,OT,181,RO,44.44883,24.53247 90549,Bărăștii de Vede,4738,OT,181,RO,44.71601,24.65919 90065,Barza,4738,OT,181,RO,44.33333,24.78333 90140,Bircii,4738,OT,181,RO,44.51673,24.60324 90168,Bobiceşti,4738,OT,181,RO,44.38333,24.15 90320,Brâncoveni,4738,OT,181,RO,44.31667,24.3 90267,Braneț,4738,OT,181,RO,44.32576,24.17792 90273,Brastavățu,4738,OT,181,RO,43.90634,24.40784 90291,Brebeni,4738,OT,181,RO,44.36667,24.45 90349,Bucinişu,4738,OT,181,RO,43.95,24.25 90437,Bușca,4738,OT,181,RO,44.11166,24.80238 93841,Călinești,4738,OT,181,RO,44.07727,24.68796 93847,Călui,4738,OT,181,RO,44.45297,24.0636 90572,Caracal,4738,OT,181,RO,44.11667,24.35 93816,Cârlogani,4738,OT,181,RO,44.51667,24.15 90590,Catanele,4738,OT,181,RO,44.38199,24.56145 90616,Cepari,4738,OT,181,RO,44.49733,24.17122 90651,Cezieni,4738,OT,181,RO,44.18333,24.26667 90702,Cilieni,4738,OT,181,RO,43.9,24.61667 90798,Coloneşti,4738,OT,181,RO,44.65,24.66667 90807,Comanca,4738,OT,181,RO,44.0779,24.35863 90810,Comani,4738,OT,181,RO,44.18286,24.4916 91201,Comuna Băbiciu,4738,OT,181,RO,44.0323,24.56533 90925,Comuna Baldovineşti,4738,OT,181,RO,44.39195,24.03898 91218,Comuna Bălteni,4738,OT,181,RO,44.44883,24.53247 91198,Comuna Bãrãşti,4738,OT,181,RO,44.70852,24.6447 91196,Comuna Bârza,4738,OT,181,RO,44.32693,24.1599 91011,Comuna Bobiceşti,4738,OT,181,RO,44.39321,24.14215 91110,Comuna Brâncoveni,4738,OT,181,RO,44.31488,24.32941 91081,Comuna Brastavăţu,4738,OT,181,RO,43.91553,24.41135 91091,Comuna Brebeni,4738,OT,181,RO,44.35956,24.4436 91128,Comuna Bucinişu,4738,OT,181,RO,43.94202,24.25463 91562,Comuna Cãlui,4738,OT,181,RO,44.456,24.04953 91553,Comuna Cârlogani,4738,OT,181,RO,44.5199,24.16007 91307,Comuna Cezieni,4738,OT,181,RO,44.18245,24.26846 91337,Comuna Cilieni,4738,OT,181,RO,43.90206,24.6147 91399,Comuna Coloneşti,4738,OT,181,RO,44.62345,24.67666 91428,Comuna Corbu,4738,OT,181,RO,44.45514,24.71639 91463,Comuna Coteana,4738,OT,181,RO,44.30133,24.46638 91512,Comuna Crâmpoia,4738,OT,181,RO,44.30513,24.72742 91525,Comuna Cungrea,4738,OT,181,RO,44.68497,24.39274 91530,Comuna Curtişoara,4738,OT,181,RO,44.48175,24.34214 91737,Comuna Dăneasa,4738,OT,181,RO,44.1139,24.56597 91620,Comuna Deveselu,4738,OT,181,RO,44.06569,24.37351 91638,Comuna Dobreţu,4738,OT,181,RO,44.49164,23.95302 91640,Comuna Dobrosloveni,4738,OT,181,RO,44.17356,24.36558 91641,Comuna Dobroteasa,4738,OT,181,RO,44.77107,24.3281 91645,Comuna Dobrun,4738,OT,181,RO,44.25323,24.23299 91688,Comuna Drăghiceni,4738,OT,181,RO,44.12694,24.25611 91819,Comuna Făgeţelu,4738,OT,181,RO,44.78429,24.54421 91821,Comuna Fălcoiu,4738,OT,181,RO,44.23774,24.37601 91824,Comuna Fărcaşele,4738,OT,181,RO,44.15057,24.43283 91986,Comuna Găneasa,4738,OT,181,RO,44.42129,24.26774 91970,Comuna Gârcov,4738,OT,181,RO,43.77342,24.62709 91988,Comuna Găvăneşti,4738,OT,181,RO,44.41403,24.00867 91857,Comuna Ghimpeţeni,4738,OT,181,RO,44.29002,24.78303 91878,Comuna Giuvărăşti,4738,OT,181,RO,43.79412,24.68729 91906,Comuna Gostavăţu,4738,OT,181,RO,44.08028,24.53283 91933,Comuna Grãdinari,4738,OT,181,RO,44.56736,24.27761 91934,Comuna Grãdinile,4738,OT,181,RO,43.94973,24.39228 91923,Comuna Grojdibodu,4738,OT,181,RO,43.75562,24.26073 91950,Comuna Gura Padinii,4738,OT,181,RO,43.76276,24.3169 92053,Comuna Ianca,4738,OT,181,RO,43.77472,24.19165 92054,Comuna Iancu Jianu,4738,OT,181,RO,44.51807,24.01257 92060,Comuna Icoana,4738,OT,181,RO,44.40682,24.72551 92090,Comuna Ipotesti,4738,OT,181,RO,44.32529,24.40089 92101,Comuna Izbiceni,4738,OT,181,RO,43.82418,24.66415 92104,Comuna Izvoarele,4738,OT,181,RO,44.25958,24.53144 92145,Comuna Leleasca,4738,OT,181,RO,44.75768,24.43708 92415,Comuna Mărunţei,4738,OT,181,RO,44.23679,24.46583 92279,Comuna Mihăeşti,4738,OT,181,RO,44.1187,24.79663 92289,Comuna Milcov,4738,OT,181,RO,44.37396,24.38004 92334,Comuna Morunglav,4738,OT,181,RO,44.47266,24.11686 92342,Comuna Movileni,4738,OT,181,RO,44.38368,24.64075 92443,Comuna Nicolae Titulescu,4738,OT,181,RO,44.27008,24.75897 92473,Comuna Obârşia,4738,OT,181,RO,43.89063,24.32188 92470,Comuna Oboga,4738,OT,181,RO,44.42448,24.08724 92502,Comuna Oporelu,4738,OT,181,RO,44.58682,24.4241 92504,Comuna Optaşi-Mãgura,4738,OT,181,RO,44.57944,24.65183 92509,Comuna Orlea,4738,OT,181,RO,43.7543,24.36775 92515,Comuna Osica de Jos,4738,OT,181,RO,44.238,24.29502 92516,Comuna Osica de Sus,4738,OT,181,RO,44.27268,24.3373 92709,Comuna Pârşcoveni,4738,OT,181,RO,44.29678,24.21836 92552,Comuna Perieţi,4738,OT,181,RO,44.40468,24.55611 92595,Comuna Pleşoiu,4738,OT,181,RO,44.48165,24.24212 92608,Comuna Poboru,4738,OT,181,RO,44.68335,24.48678 92677,Comuna Priseaca,4738,OT,181,RO,44.51206,24.43787 92742,Comuna Radomireşti,4738,OT,181,RO,44.11049,24.67816 92758,Comuna Redea,4738,OT,181,RO,44.04157,24.30677 92792,Comuna Rotunda,4738,OT,181,RO,43.98427,24.31402 92816,Comuna Rusăneşti,4738,OT,181,RO,43.94385,24.59498 93045,Comuna Sâmbureşti,4738,OT,181,RO,44.81131,24.39922 93073,Comuna Sârbii-Măgura,4738,OT,181,RO,44.5273,24.69585 92906,Comuna Scărişoara,4738,OT,181,RO,43.98528,24.58333 92887,Comuna Schitu,4738,OT,181,RO,44.35679,24.55926 92907,Comuna Seaca,4738,OT,181,RO,44.15159,24.76149 93509,Comuna Şerbăneşti,4738,OT,181,RO,44.33607,24.68782 92961,Comuna Slătioara,4738,OT,181,RO,44.41545,24.32082 93542,Comuna Şopârliţa,4738,OT,181,RO,44.27705,24.27743 92982,Comuna Spineni,4738,OT,181,RO,44.71808,24.55897 92984,Comuna Sprâncenata,4738,OT,181,RO,44.0611,24.63984 93549,Comuna Ştefan cel Mare,4738,OT,181,RO,43.81174,24.22262 92991,Comuna Stoeneşti,4738,OT,181,RO,44.11675,24.4972 92995,Comuna Stoicăneşti,4738,OT,181,RO,44.18568,24.64267 93002,Comuna Strejeşti,4738,OT,181,RO,44.52733,24.27036 93010,Comuna Studina,4738,OT,181,RO,43.96784,24.42136 93243,Comuna Tătuleşti,4738,OT,181,RO,44.66386,24.61405 93144,Comuna Teslui,4738,OT,181,RO,44.51316,24.356 93147,Comuna Tia Mare,4738,OT,181,RO,43.86417,24.63883 93174,Comuna Topana,4738,OT,181,RO,44.84319,24.52827 93186,Comuna Traian,4738,OT,181,RO,44.02337,24.45586 93201,Comuna Tufeni,4738,OT,181,RO,44.34718,24.78986 93285,Comuna Urzica,4738,OT,181,RO,43.86055,24.27497 93453,Comuna Vădastra,4738,OT,181,RO,43.86497,24.38069 93455,Comuna Vădăstriţa,4738,OT,181,RO,43.84531,24.34017 93427,Comuna Vâlcele,4738,OT,181,RO,44.28923,24.54968 93312,Comuna Valea Mare,4738,OT,181,RO,44.44188,24.4612 93459,Comuna Văleni,4738,OT,181,RO,44.21882,24.79748 93344,Comuna Verguleasa,4738,OT,181,RO,44.64128,24.34234 93377,Comuna Vişina,4738,OT,181,RO,43.86618,24.45469 93378,Comuna Vişina Nouă,4738,OT,181,RO,43.87434,24.4182 93370,Comuna Vitomireşti,4738,OT,181,RO,44.85194,24.37704 93392,Comuna Vlădila,4738,OT,181,RO,44.00114,24.40993 93396,Comuna Voineasa,4738,OT,181,RO,44.28949,24.15529 93415,Comuna Vulpeni,4738,OT,181,RO,44.45854,23.92718 93419,Comuna Vultureşti,4738,OT,181,RO,44.72993,24.33354 93610,Corabia,4738,OT,181,RO,43.77513,24.50146 93617,Corbu,4738,OT,181,RO,44.48333,24.71667 93672,Coteana,4738,OT,181,RO,44.3,24.46667 93750,Crăciunei,4738,OT,181,RO,44.14575,24.66309 93746,Crâmpoia,4738,OT,181,RO,44.30215,24.74513 93745,Crușovu,4738,OT,181,RO,43.92473,24.41486 93770,Cungrea,4738,OT,181,RO,44.66667,24.38333 93777,Curtişoara,4738,OT,181,RO,44.5,24.33333 94125,Dăneasa,4738,OT,181,RO,44.15,24.56667 93912,Dejești,4738,OT,181,RO,44.83093,24.35648 93930,Deveselu,4738,OT,181,RO,44.06667,24.38333 93943,Doanca,4738,OT,181,RO,43.8487,24.64949 93956,Dobreţu,4738,OT,181,RO,44.5,23.95 93963,Dobrosloveni,4738,OT,181,RO,44.18333,24.36667 93964,Dobroteasa,4738,OT,181,RO,44.78333,24.38333 93967,Dobrotinet,4738,OT,181,RO,44.47957,24.3473 93970,Dobrun,4738,OT,181,RO,44.26667,24.21667 94061,Drăgăneşti-Olt,4738,OT,181,RO,44.16667,24.53333 94038,Drăghiceni,4738,OT,181,RO,44.13333,24.25 94028,Dranovățu,4738,OT,181,RO,44.43619,24.27894 94098,Dumitrești,4738,OT,181,RO,44.6837,24.31628 94255,Făgeţelu,4738,OT,181,RO,44.78333,24.53333 94258,Fălcoiu,4738,OT,181,RO,44.23333,24.36667 94262,Fărcaşele,4738,OT,181,RO,44.15,24.43333 94264,Fărcașu de Jos,4738,OT,181,RO,44.13539,24.45901 94509,Găneasa,4738,OT,181,RO,44.41667,24.28333 94488,Gârcov,4738,OT,181,RO,43.7591,24.61577 94516,Găvănești,4738,OT,181,RO,44.41724,24.01654 94324,Ghimpați,4738,OT,181,RO,44.15359,24.42698 94326,Ghimpețeni,4738,OT,181,RO,44.28101,24.77458 94331,Ghioca,4738,OT,181,RO,44.31667,24.73333 94356,Giuvărăşti,4738,OT,181,RO,43.8,24.7 94392,Gostavăţu,4738,OT,181,RO,44.08333,24.53333 94434,Grădinari,4738,OT,181,RO,44.56667,24.26667 94410,Greci,4738,OT,181,RO,44.33025,24.55923 94418,Grojdibodu,4738,OT,181,RO,43.75,24.26667 94421,Gropșani,4738,OT,181,RO,44.44072,23.97047 94452,Gura Căluiu,4738,OT,181,RO,44.45903,24.03547 94457,Gura Padinii,4738,OT,181,RO,43.75704,24.31615 94619,Ianca,4738,OT,181,RO,43.78333,24.18333 94621,Iancu Jianu,4738,OT,181,RO,44.5,24.03333 94635,Icoana,4738,OT,181,RO,44.41667,24.71667 94685,Ipotești,4738,OT,181,RO,44.32529,24.40089 94699,Izbiceni,4738,OT,181,RO,43.83333,24.65 94704,Izvoarele,4738,OT,181,RO,44.26667,24.51667 94734,Jieni,4738,OT,181,RO,43.95095,24.59349 94772,Leleasca,4738,OT,181,RO,44.78333,24.43333 95270,Mărgineni Slobozia,4738,OT,181,RO,44.53121,24.55675 95282,Mărunţei,4738,OT,181,RO,44.2,24.46667 94989,Mihăeşti,4738,OT,181,RO,44.13333,24.78333 95074,Morunglav,4738,OT,181,RO,44.46667,24.11667 95082,Movileni,4738,OT,181,RO,44.36667,24.65 95123,Municipiul Caracal,4738,OT,181,RO,44.11273,24.35089 95183,Municipiul Slatina,4738,OT,181,RO,44.44276,24.36745 95315,Negreni,4738,OT,181,RO,44.56848,24.59535 95339,Nicolae Titulescu,4738,OT,181,RO,44.3,24.8 95389,Obârşia,4738,OT,181,RO,43.88333,24.33333 95386,Oboga,4738,OT,181,RO,44.41667,24.1 95425,Olari,4738,OT,181,RO,44.30783,24.20857 95442,Oporelu,4738,OT,181,RO,44.6,24.41667 95444,Optaşi,4738,OT,181,RO,44.58333,24.65 95457,Oraş Balş,4738,OT,181,RO,44.36546,24.11321 95498,Oraş Corabia,4738,OT,181,RO,43.80248,24.47028 95510,Oraş Drãgãneşti-Olt,4738,OT,181,RO,44.17618,24.50836 95567,Oraş Piatra-Olt,4738,OT,181,RO,44.3756,24.28332 95572,Oraş Potcoava,4738,OT,181,RO,44.47992,24.64172 95584,Oraş Scorniceşti,4738,OT,181,RO,44.5679,24.55394 95659,Orlea,4738,OT,181,RO,43.75,24.38333 95660,Orlea Nouă,4738,OT,181,RO,43.75522,24.35834 95672,Osica de Jos,4738,OT,181,RO,44.24439,24.27926 95673,Osica de Sus,4738,OT,181,RO,44.25,24.31667 96003,Pârşcoveni,4738,OT,181,RO,44.3,24.23333 95733,Perieţi,4738,OT,181,RO,44.4,24.55 95768,Piatra,4738,OT,181,RO,44.36054,24.29557 95772,Piatra Olt,4738,OT,181,RO,44.36667,24.26667 95812,Pleşoiu,4738,OT,181,RO,44.46667,24.26667 95837,Poboru,4738,OT,181,RO,44.66667,24.5 95928,Potcoava,4738,OT,181,RO,44.48333,24.65 95929,Potcoava Fălcoeni,4738,OT,181,RO,44.49484,24.6165 95930,Potelu,4738,OT,181,RO,43.76577,24.20535 95932,Potlogeni,4738,OT,181,RO,43.87995,24.63092 95954,Priseaca,4738,OT,181,RO,44.51667,24.45 96053,Radomireşti,4738,OT,181,RO,44.11667,24.68333 96074,Redea,4738,OT,181,RO,44.05,24.3 96121,Rotunda,4738,OT,181,RO,43.98333,24.31667 96162,Rusăneşti,4738,OT,181,RO,43.93333,24.6 96518,Sâmbureşti,4738,OT,181,RO,44.8,24.41667 96297,Scărişoara,4738,OT,181,RO,44.0,24.56667 96269,Schitu,4738,OT,181,RO,44.35,24.56667 96278,Scorniceşti,4738,OT,181,RO,44.56667,24.55 96298,Seaca,4738,OT,181,RO,44.16667,24.75 97039,Şerbăneşti,4738,OT,181,RO,44.33333,24.7 96354,Sinești,4738,OT,181,RO,44.46777,24.66585 96361,Slatina,4738,OT,181,RO,44.43333,24.36667 96384,Slătioara,4738,OT,181,RO,44.4,24.31667 96385,Slăveni,4738,OT,181,RO,44.08558,24.52843 97072,Şopârliţa,4738,OT,181,RO,44.28333,24.28333 96418,Sprâncenata,4738,OT,181,RO,44.08333,24.63333 96484,Stăvaru,4738,OT,181,RO,43.86445,24.25902 97079,Ştefan cel Mare,4738,OT,181,RO,43.81124,24.22039 96432,Stoeneşti,4738,OT,181,RO,44.11667,24.5 96438,Stoicăneşti,4738,OT,181,RO,44.18333,24.63333 96450,Strejeşti,4738,OT,181,RO,44.53333,24.26667 96451,Strejeștii de Sus,4738,OT,181,RO,44.54389,24.22772 96465,Studina,4738,OT,181,RO,43.96667,24.41667 96466,Studinița,4738,OT,181,RO,43.97691,24.42668 96616,Tătuleşti,4738,OT,181,RO,44.63333,24.63333 106087,Teslui,4738,OT,181,RO,44.51667,24.36667 106092,Tia Mare,4738,OT,181,RO,43.86667,24.63333 106128,Topana,4738,OT,181,RO,44.81667,24.51667 106150,Traian,4738,OT,181,RO,44.01667,24.45 106170,Tufeni,4738,OT,181,RO,44.36667,24.78333 96683,Ursa,4738,OT,181,RO,43.78783,24.63787 96685,Urzica,4738,OT,181,RO,43.8567,24.28952 96953,Vădastra,4738,OT,181,RO,43.86667,24.36667 96956,Vădăstriţa,4738,OT,181,RO,43.85,24.33333 96919,Vâlcele,4738,OT,181,RO,44.28263,24.54376 96924,Vâlcelele de Sus,4738,OT,181,RO,44.28461,24.55821 96733,Valea Mare,4738,OT,181,RO,44.46667,24.43333 96740,Valea Merilor,4738,OT,181,RO,44.47169,24.65611 96961,Văleni,4738,OT,181,RO,44.23333,24.78333 96788,Verguleasa,4738,OT,181,RO,44.65,24.31667 96850,Vişina,4738,OT,181,RO,43.86667,24.45 96853,Vișina Nouă,4738,OT,181,RO,43.87434,24.4182 96842,Vitănești,4738,OT,181,RO,44.5273,24.69585 96840,Vitomireşti,4738,OT,181,RO,44.86667,24.4 96868,Vlădila,4738,OT,181,RO,44.0,24.4 96878,Voineasa,4738,OT,181,RO,44.28333,24.13333 96906,Vulpeni,4738,OT,181,RO,44.46667,23.91667 96909,Vultureşti,4738,OT,181,RO,44.73333,24.31667 89884,Adunaţi,4729,PH,181,RO,45.13333,25.61667 89920,Albești-Muru,4729,PH,181,RO,44.9444,26.20899 89918,Albeşti-Paleologu,4729,PH,181,RO,44.95,26.21667 89940,Aluniş,4729,PH,181,RO,45.2,25.86667 89974,Apostolache,4729,PH,181,RO,45.13333,26.26667 89991,Ariceștii Zeletin,4729,PH,181,RO,45.22221,26.17957 89990,Ariceştii-Rahtivani,4729,PH,181,RO,44.95,25.83333 90013,Azuga,4729,PH,181,RO,45.45,25.55 90017,Baba Ana,4729,PH,181,RO,44.96667,26.45 90486,Băicoi,4729,PH,181,RO,45.03333,25.85 90048,Balta Doamnei,4729,PH,181,RO,44.75,26.16667 90528,Bălțești,4729,PH,181,RO,45.10965,26.12937 90533,Băneşti,4729,PH,181,RO,45.1,25.76667 90544,Bărcăneşti,4729,PH,181,RO,44.88333,26.05 90552,Bătești,4729,PH,181,RO,44.8483,26.04031 90554,Bătrâni,4729,PH,181,RO,45.31425,26.15091 90098,Berceni,4729,PH,181,RO,44.93333,26.11667 90114,Bertea,4729,PH,181,RO,45.23333,25.86667 90158,Blejoi,4729,PH,181,RO,45.0,26.01667 90171,Bobolia,4729,PH,181,RO,45.09395,25.74259 90209,Boldeşti,4729,PH,181,RO,44.86597,26.54906 90210,Boldeşti-Scăeni,4729,PH,181,RO,45.03333,26.03333 90225,Bordenii Mari,4729,PH,181,RO,45.08951,25.86964 90280,Brazii de Sus,4729,PH,181,RO,44.86667,26.01667 90283,Breaza,4729,PH,181,RO,45.18333,25.66667 90287,Breaza de Jos,4729,PH,181,RO,45.17125,25.67571 90288,Breaza de Sus,4729,PH,181,RO,45.19879,25.65578 90294,Brebu Mânăstirei,4729,PH,181,RO,45.18333,25.76667 90293,Brebu Megieșesc,4729,PH,181,RO,45.16774,25.77474 90357,Bucov,4729,PH,181,RO,44.96667,26.08333 90371,Buda,4729,PH,181,RO,44.82443,26.18522 90393,Bughea de Jos,4729,PH,181,RO,45.17985,26.02044 90436,Buşteni,4729,PH,181,RO,45.4,25.53333 93846,Călugăreni,4729,PH,181,RO,45.08333,26.38333 93798,Câmpina,4729,PH,181,RO,45.12619,25.73496 93868,Cărbuneşti,4729,PH,181,RO,45.23333,26.2 93878,Cătina,4729,PH,181,RO,45.00984,25.78395 90619,Ceptura de Jos,4729,PH,181,RO,45.02088,26.32722 90620,Ceptura de Sus,4729,PH,181,RO,45.01667,26.31667 90621,Ceraşu,4729,PH,181,RO,45.31667,26.03333 90672,Chiojdeanca,4729,PH,181,RO,45.16667,26.26667 90692,Chițorani,4729,PH,181,RO,44.97458,26.11895 90723,Cioranii de Jos,4729,PH,181,RO,44.81667,26.41667 90724,Cioranii de Sus,4729,PH,181,RO,44.83923,26.39473 90772,Coada Izvorului,4729,PH,181,RO,44.85766,25.81851 90782,Cocorăștii Colț,4729,PH,181,RO,44.83425,25.89937 90783,Cocorăștii Mislii,4729,PH,181,RO,45.08528,25.92206 90793,Colceag,4729,PH,181,RO,44.95,26.35 90812,Comarnic,4729,PH,181,RO,45.25,25.63333 90822,Comuna Adunaţi,4729,PH,181,RO,45.18832,25.60181 90843,Comuna Albeşti-Paleologu,4729,PH,181,RO,44.93431,26.23302 90859,Comuna Aluniş,4729,PH,181,RO,45.20105,25.89661 90881,Comuna Apostolache,4729,PH,181,RO,45.12123,26.26537 90890,Comuna Ariceştii Zeletin,4729,PH,181,RO,45.21513,26.16879 90891,Comuna Ariceştii-Rahtivani,4729,PH,181,RO,44.94512,25.86208 90913,Comuna Baba Ana,4729,PH,181,RO,44.97508,26.48588 90930,Comuna Balta Doamnei,4729,PH,181,RO,44.75775,26.19465 91228,Comuna Bălţeşti,4729,PH,181,RO,45.1039,26.1304 91232,Comuna Băneşti,4729,PH,181,RO,45.09491,25.77837 91241,Comuna Bărcăneşti,4729,PH,181,RO,44.87705,26.06672 91247,Comuna Bătrâni,4729,PH,181,RO,45.31425,26.15091 90960,Comuna Berceni,4729,PH,181,RO,44.92376,26.10532 90972,Comuna Bertea,4729,PH,181,RO,45.24083,25.84545 91003,Comuna Blejoi,4729,PH,181,RO,44.98262,26.01881 91038,Comuna Boldeşti-Gradiştea,4729,PH,181,RO,44.87645,26.53482 91086,Comuna Brazi,4729,PH,181,RO,44.85425,26.00323 91093,Comuna Brebu,4729,PH,181,RO,45.19406,25.77737 91134,Comuna Bucov,4729,PH,181,RO,44.98443,26.10303 91574,Comuna Călugăreni,4729,PH,181,RO,45.07998,26.39176 91588,Comuna Cărbuneşti,4729,PH,181,RO,45.2305,26.19703 91285,Comuna Ceptura,4729,PH,181,RO,45.04633,26.31341 91286,Comuna Ceraşu,4729,PH,181,RO,45.3294,26.03874 91318,Comuna Chiojdeanca,4729,PH,181,RO,45.16695,26.27617 91353,Comuna Ciorani,4729,PH,181,RO,44.82997,26.40405 91389,Comuna Cocorãştii Mislii,4729,PH,181,RO,45.08525,25.94139 91390,Comuna Cocorăştii-Colţ,4729,PH,181,RO,44.8378,25.89752 91396,Comuna Colceag,4729,PH,181,RO,44.93743,26.36442 91442,Comuna Cornu,4729,PH,181,RO,45.16336,25.70295 91451,Comuna Cosminele,4729,PH,181,RO,45.166,25.89523 91699,Comuna Drăgăneşti,4729,PH,181,RO,44.82739,26.30273 91679,Comuna Drajna de Sus,4729,PH,181,RO,45.24352,26.07601 91711,Comuna Dumbrava,4729,PH,181,RO,44.86266,26.21463 91714,Comuna Dumbrãveşti,4729,PH,181,RO,45.09234,25.99862 91805,Comuna Fântânele,4729,PH,181,RO,45.02536,26.36398 91764,Comuna Filipeştii de Pădure,4729,PH,181,RO,44.99423,25.73606 91765,Comuna Filipeştii de Târg,4729,PH,181,RO,44.94799,25.79812 91771,Comuna Floreşti,4729,PH,181,RO,45.02718,25.78536 91797,Comuna Fulga,4729,PH,181,RO,44.88905,26.4441 91847,Comuna Gherghiţa,4729,PH,181,RO,44.79902,26.27275 91902,Comuna Gorgota,4729,PH,181,RO,44.78404,26.07726 91903,Comuna Gornet,4729,PH,181,RO,45.13642,26.08054 91904,Comuna Gornet-Cricov,4729,PH,181,RO,45.09016,26.26009 91953,Comuna Gura Vadului,4729,PH,181,RO,45.05357,26.44168 91954,Comuna Gura Vitioarei,4729,PH,181,RO,45.14951,26.03308 92087,Comuna Iordãcheanu,4729,PH,181,RO,45.04671,26.22605 92105,Comuna Izvoarele,4729,PH,181,RO,45.27102,26.00931 92133,Comuna Jugureni,4729,PH,181,RO,45.10156,26.42231 92137,Comuna Lapoş,4729,PH,181,RO,45.15075,26.42796 92170,Comuna Lipăneşti,4729,PH,181,RO,45.05799,26.02213 92392,Comuna Măgurele,4729,PH,181,RO,45.09476,26.04955 92393,Comuna Măgureni,4729,PH,181,RO,45.05203,25.76233 92401,Comuna Măneciu,4729,PH,181,RO,45.33711,25.98547 92402,Comuna Măneşti,4729,PH,181,RO,44.86043,25.83461 92494,Comuna Olari,4729,PH,181,RO,44.79262,26.20498 92714,Comuna Păcureţi,4729,PH,181,RO,45.14696,26.13997 92727,Comuna Păuleşti,4729,PH,181,RO,45.00549,25.96991 92599,Comuna Plopu,4729,PH,181,RO,45.02686,26.14227 92613,Comuna Podenii Noi,4729,PH,181,RO,45.10423,26.19023 92627,Comuna Poiana Câmpina,4729,PH,181,RO,45.12079,25.71905 92636,Comuna Poienarii Burchii,4729,PH,181,RO,44.74995,25.99784 92664,Comuna Poseşti,4729,PH,181,RO,45.27519,26.14944 92669,Comuna Predeal-Sărari,4729,PH,181,RO,45.18891,26.10613 92682,Comuna Proviţa de Jos,4729,PH,181,RO,45.1119,25.67791 92683,Comuna Proviţa de Sus,4729,PH,181,RO,45.13604,25.63454 92691,Comuna Puchenii Mari,4729,PH,181,RO,44.82386,26.07697 92820,Comuna Râfov,4729,PH,181,RO,44.85001,26.20573 92863,Comuna Salcia,4729,PH,181,RO,45.18323,26.326 93093,Comuna Sălciile,4729,PH,181,RO,44.81651,26.49246 93053,Comuna Sângeru,4729,PH,181,RO,45.14325,26.35389 92895,Comuna Scorţeni,4729,PH,181,RO,45.08876,25.84712 92917,Comuna Secăria,4729,PH,181,RO,45.27498,25.68457 93531,Comuna Şirna,4729,PH,181,RO,44.80011,25.94156 93536,Comuna Şoimari,4729,PH,181,RO,45.1694,26.20968 93543,Comuna Şotrile,4729,PH,181,RO,45.21183,25.71909 92986,Comuna Starchiojd,4729,PH,181,RO,45.32851,26.17417 93553,Comuna Ştefeşti,4729,PH,181,RO,45.24234,25.89879 93036,Comuna Surani,4729,PH,181,RO,45.19425,26.17335 93120,Comuna Talea,4729,PH,181,RO,45.22413,25.56381 93226,Comuna Târgşoru Vechi,4729,PH,181,RO,44.87977,25.93082 93242,Comuna Tătaru,4729,PH,181,RO,45.10405,26.3198 93134,Comuna Teişani,4729,PH,181,RO,45.22003,26.01022 93136,Comuna Telega,4729,PH,181,RO,45.1427,25.81441 93157,Comuna Tinosu,4729,PH,181,RO,44.81699,26.00982 93171,Comuna Tomşani,4729,PH,181,RO,44.94941,26.29586 93295,Comuna Vadu Săpat,4729,PH,181,RO,45.04023,26.38868 93430,Comuna Vâlcăneşti,4729,PH,181,RO,45.12377,25.94382 93302,Comuna Valea Călugărească,4729,PH,181,RO,44.95527,26.16122 93304,Comuna Valea Doftanei,4729,PH,181,RO,45.32105,25.72546 93463,Comuna Vărbilău,4729,PH,181,RO,45.16492,25.95984 93591,Conduratu,4729,PH,181,RO,44.97236,26.43365 93627,Corlătești,4729,PH,181,RO,44.91341,26.08726 93640,Cornu de Jos,4729,PH,181,RO,45.15665,25.70452 93641,Cornu de Sus,4729,PH,181,RO,45.16667,25.7 93655,Cosmina de Jos,4729,PH,181,RO,45.15,25.88333 93729,Crivina,4729,PH,181,RO,44.78636,26.05604 94107,Dâmbu,4729,PH,181,RO,45.04533,25.88854 93942,Dițești,4729,PH,181,RO,44.9799,25.72655 93978,Doftana,4729,PH,181,RO,45.15,25.8 94056,Drăgăneasa,4729,PH,181,RO,45.10467,25.68138 94057,Drăgăneşti,4729,PH,181,RO,44.81667,26.3 94026,Drajna de Jos,4729,PH,181,RO,45.21667,26.05 94027,Drajna de Sus,4729,PH,181,RO,45.25709,26.07388 94077,Dumbrava,4729,PH,181,RO,44.88333,26.18333 94087,Dumbrăveşti,4729,PH,181,RO,45.08333,26.0 94253,Făgetu,4729,PH,181,RO,45.13668,26.02018 94240,Fântânele,4729,PH,181,RO,45.007,26.3772 94176,Filipeştii de Pădure,4729,PH,181,RO,45.0,25.75 94177,Filipeştii de Târg,4729,PH,181,RO,44.98333,25.78333 94186,Floreşti,4729,PH,181,RO,45.05,25.78333 94222,Fulga de Jos,4729,PH,181,RO,44.88152,26.44258 94223,Fulga de Sus,4729,PH,181,RO,44.9,26.45 94497,Găgeni,4729,PH,181,RO,45.02164,25.94585 94295,Gheaba,4729,PH,181,RO,45.30916,26.00626 94307,Gherghiţa,4729,PH,181,RO,44.8,26.26667 94335,Ghioșești,4729,PH,181,RO,45.24235,25.62671 94385,Gorgota,4729,PH,181,RO,44.78333,26.08333 94387,Gornet,4729,PH,181,RO,45.11667,26.06667 94388,Gornet-Cricov,4729,PH,181,RO,45.08333,26.26667 94390,Goruna,4729,PH,181,RO,45.08696,25.94202 94399,Gradiștea,4729,PH,181,RO,44.88803,26.5152 94426,Groșani,4729,PH,181,RO,45.24822,25.94795 94450,Gura Beliei,4729,PH,181,RO,45.21064,25.64946 94462,Gura Vadului,4729,PH,181,RO,45.05,26.46667 94463,Gura Viţioarei,4729,PH,181,RO,45.15,26.03333 94555,Homorâciu,4729,PH,181,RO,45.2694,26.01634 94670,Inotești,4729,PH,181,RO,44.96146,26.35782 94681,Iordăcheanu,4729,PH,181,RO,45.04392,26.2392 94712,Izvoarele,4729,PH,181,RO,45.28376,26.00119 94752,Jugureni,4729,PH,181,RO,45.1,26.45 94760,Lapoș,4729,PH,181,RO,45.15197,26.41911 94797,Liliești,4729,PH,181,RO,45.03458,25.88554 94807,Lipăneşti,4729,PH,181,RO,45.05,26.01667 94816,Livadea,4729,PH,181,RO,45.18663,25.92805 94831,Loloiasca,4729,PH,181,RO,44.96808,26.29141 94869,Lunca Prahovei,4729,PH,181,RO,45.04714,25.77161 94905,Magula,4729,PH,181,RO,44.93185,26.30114 95244,Măgurele,4729,PH,181,RO,45.1,26.03333 95245,Măgureni,4729,PH,181,RO,45.06667,25.73333 95257,Măneciu-Ungureni,4729,PH,181,RO,45.31667,25.98333 95258,Măneşti,4729,PH,181,RO,44.86667,25.85 95272,Mărginenii de Jos,4729,PH,181,RO,44.9591,25.75989 94957,Meri,4729,PH,181,RO,44.83366,26.30863 95008,Minieri,4729,PH,181,RO,44.98372,25.76083 95017,Mireșu Mare,4729,PH,181,RO,45.13508,26.37714 95023,Miroslăvești,4729,PH,181,RO,44.80383,26.08689 95029,Mislea,4729,PH,181,RO,45.09668,25.82444 95034,Mizil,4729,PH,181,RO,45.01667,26.45 95044,Moceşti,4729,PH,181,RO,45.05,26.25 95131,Municipiul Câmpina,4729,PH,181,RO,45.12619,25.73496 95170,Municipiul Ploieşti,4729,PH,181,RO,44.94281,26.02116 95306,Nedelea,4729,PH,181,RO,44.97191,25.81647 95309,Negoiești,4729,PH,181,RO,44.87393,25.9816 95392,Ocina de Sus,4729,PH,181,RO,45.2006,25.59882 95415,Ogretin,4729,PH,181,RO,45.26483,26.09169 95423,Olari,4729,PH,181,RO,44.78482,26.21728 95428,Ologeni,4729,PH,181,RO,44.7337,25.95059 95452,Oraş Azuga,4729,PH,181,RO,45.44512,25.55616 95481,Oraş Bãicoi,4729,PH,181,RO,45.0416,25.86964 95465,Oraş Boldeşti-Scãeni,4729,PH,181,RO,45.02458,26.04574 95470,Oraş Breaza,4729,PH,181,RO,45.1871,25.65851 95479,Oraş Buşteni,4729,PH,181,RO,45.4057,25.53969 95495,Oraş Comarnic,4729,PH,181,RO,45.24962,25.63859 95543,Oraş Mizil,4729,PH,181,RO,45.00844,26.4441 95568,Oraş Plopeni,4729,PH,181,RO,45.04406,25.95304 95588,Oraş Sinaia,4729,PH,181,RO,45.34842,25.54937 95590,Oraş Slãnic,4729,PH,181,RO,45.23029,25.94753 95613,Oraş Urlaţi,4729,PH,181,RO,44.99692,26.24377 95622,Oraş Vãlenii De Munte,4729,PH,181,RO,45.18771,26.03885 95679,Ostrovu,4729,PH,181,RO,45.20351,25.90345 96004,Păcureţi,4729,PH,181,RO,45.15,26.13333 95698,Palanca,4729,PH,181,RO,44.81562,26.19995 95705,Pantazi,4729,PH,181,RO,44.93492,26.1402 95713,Parepa-Rușani,4729,PH,181,RO,44.90577,26.35478 96029,Păuleşti,4729,PH,181,RO,45.0,25.98333 95742,Perșunari,4729,PH,181,RO,45.05682,26.44784 95781,Pietriceaua,4729,PH,181,RO,45.2191,25.80859 95791,Pietroșani,4729,PH,181,RO,44.83963,26.10382 95807,Pleașa,4729,PH,181,RO,45.00583,26.07211 95814,Ploieşti,4729,PH,181,RO,44.95,26.01667 95815,Ploieștiori,4729,PH,181,RO,44.98157,26.01795 95819,Plopeni,4729,PH,181,RO,45.06552,25.98114 95823,Plopu,4729,PH,181,RO,45.01667,26.15 95844,Podenii Noi,4729,PH,181,RO,45.11667,26.16667 95845,Podenii Vechi,4729,PH,181,RO,45.08939,26.11584 95864,Poiana,4729,PH,181,RO,45.24536,25.66302 95873,Poiana Câmpina,4729,PH,181,RO,45.13333,25.68333 95870,Poiana Copăceni,4729,PH,181,RO,45.16392,26.06918 95884,Poiana Țapului,4729,PH,181,RO,45.39344,25.54066 95887,Poienarii Apostoli,4729,PH,181,RO,44.77204,26.05388 95888,Poienarii Burchii,4729,PH,181,RO,44.75,26.01667 95915,Popești,4729,PH,181,RO,44.86076,25.99557 95925,Posada,4729,PH,181,RO,45.28714,25.61882 95926,Poseștii-Pământeni,4729,PH,181,RO,45.26667,26.15 95931,Potigrafu,4729,PH,181,RO,44.78504,26.10014 95969,Prăjani,4729,PH,181,RO,45.20422,25.95151 95962,Proviţa de Jos,4729,PH,181,RO,45.11667,25.65 95963,Proviţa de Sus,4729,PH,181,RO,45.13333,25.63333 95973,Puchenii Mari,4729,PH,181,RO,44.81667,26.08333 95974,Puchenii Moșneni,4729,PH,181,RO,44.81213,26.08701 96038,Rachieri,4729,PH,181,RO,44.95438,26.12841 96165,Râfov,4729,PH,181,RO,44.86667,26.13333 96112,Românești,4729,PH,181,RO,44.86667,26.06667 96231,Salcia,4729,PH,181,RO,45.18333,26.33333 106008,Sălciile,4729,PH,181,RO,44.81667,26.48333 96530,Sângeru,4729,PH,181,RO,45.13333,26.35 96275,Schiulești,4729,PH,181,RO,45.28471,25.95403 96280,Scorţeni,4729,PH,181,RO,45.1,25.85 96288,Scurtești,4729,PH,181,RO,45.23759,25.90264 96318,Secăria,4729,PH,181,RO,45.28333,25.68333 96306,Seciu,4729,PH,181,RO,45.03275,26.06474 96350,Sinaia,4729,PH,181,RO,45.35,25.55 97128,Șipotu,4729,PH,181,RO,45.04076,26.01714 97060,Şirna,4729,PH,181,RO,44.8,25.95 96381,Slănic,4729,PH,181,RO,45.25,25.93333 96380,Slon,4729,PH,181,RO,45.35521,26.04189 97065,Şoimari,4729,PH,181,RO,45.18333,26.2 97073,Şotrile,4729,PH,181,RO,45.21667,25.71667 96423,Starchiojd,4729,PH,181,RO,45.31667,26.18333 97083,Ştefeşti,4729,PH,181,RO,45.21667,25.9 96436,Stoenești,4729,PH,181,RO,44.92422,25.85881 96452,Strejnicu,4729,PH,181,RO,44.91676,25.95109 96505,Surani,4729,PH,181,RO,45.2,26.16667 106051,Talea,4729,PH,181,RO,45.22564,25.56433 96591,Târgşoru Vechi,4729,PH,181,RO,44.86667,25.91667 96611,Tăriceni,4729,PH,181,RO,44.79624,25.96958 96618,Tătărani,4729,PH,181,RO,44.89763,26.03509 96614,Tătaru,4729,PH,181,RO,45.1,26.33333 106073,Teişani,4729,PH,181,RO,45.23333,25.98333 106078,Telega,4729,PH,181,RO,45.13333,25.78333 106090,Teșila,4729,PH,181,RO,45.30352,25.72324 106104,Tinosu,4729,PH,181,RO,44.81667,26.01667 97139,Țintea,4729,PH,181,RO,45.03403,25.9046 106126,Tomşani,4729,PH,181,RO,44.95,26.28333 106163,Trăisteni,4729,PH,181,RO,45.33857,25.72767 106169,Tufeni,4729,PH,181,RO,45.0579,25.83976 96679,Urlaţi,4729,PH,181,RO,44.98333,26.23333 96681,Urleta,4729,PH,181,RO,45.08732,25.79354 96700,Vadu Părului,4729,PH,181,RO,44.93132,26.2094 96703,Vadu Săpat,4729,PH,181,RO,45.03973,26.387 96925,Vâlcăneşti,4729,PH,181,RO,45.11667,25.93333 96720,Valea Călugărească,4729,PH,181,RO,44.96667,26.15 96718,Valea Cucului,4729,PH,181,RO,45.06525,26.22793 96724,Valea Dulce,4729,PH,181,RO,45.11428,26.20787 96760,Valea Târsei,4729,PH,181,RO,45.17711,25.63323 96965,Vălenii de Munte,4729,PH,181,RO,45.18333,26.03333 96970,Vărbila,4729,PH,181,RO,45.04654,26.19691 96971,Vărbilău,4729,PH,181,RO,45.18333,25.95 96774,Varnița,4729,PH,181,RO,44.80679,25.9453 89893,Aghireș,4741,SJ,181,RO,47.16164,23.01764 89900,Agrij,4741,SJ,181,RO,47.06685,23.09918 89936,Almaşu,4741,SJ,181,RO,46.94546,23.12965 90468,Băbeni,4741,SJ,181,RO,47.3,23.4 90502,Bălan,4741,SJ,181,RO,47.15599,23.31213 90536,Bănişor,4741,SJ,181,RO,47.10431,22.83731 90093,Benesat,4741,SJ,181,RO,47.41049,23.28904 90172,Bobota,4741,SJ,181,RO,47.38333,22.76667 90177,Bocşa,4741,SJ,181,RO,47.2939,22.91405 90199,Boghiș,4741,SJ,181,RO,47.15512,22.7388 90356,Buciumi,4741,SJ,181,RO,47.03333,23.06667 90567,Camăr,4741,SJ,181,RO,47.3,22.61667 90576,Carastelec,4741,SJ,181,RO,47.3,22.7 90609,Cehei,4741,SJ,181,RO,47.25632,22.77507 90610,Cehu Silvaniei,4741,SJ,181,RO,47.41177,23.17489 90655,Chendrea,4741,SJ,181,RO,47.12236,23.29904 90665,Chieşd,4741,SJ,181,RO,47.38333,22.88333 90762,Cizer,4741,SJ,181,RO,47.06667,22.88333 90832,Comuna Agrij,4741,SJ,181,RO,47.06784,23.09764 90856,Comuna Almaşu,4741,SJ,181,RO,46.95,23.13333 91200,Comuna Băbeni,4741,SJ,181,RO,47.3,23.4 91211,Comuna Bălan,4741,SJ,181,RO,47.15768,23.31187 91234,Comuna Bănişor,4741,SJ,181,RO,47.10215,22.83646 90957,Comuna Benesat,4741,SJ,181,RO,47.41667,23.3 91012,Comuna Bobota,4741,SJ,181,RO,47.38333,22.76667 91016,Comuna Bocşa,4741,SJ,181,RO,47.30332,22.91241 91032,Comuna Boghiş,4741,SJ,181,RO,47.15611,22.72706 91133,Comuna Buciumi,4741,SJ,181,RO,47.03476,23.02546 91256,Comuna Camăr,4741,SJ,181,RO,47.31728,22.62815 91258,Comuna Carastelec,4741,SJ,181,RO,47.30714,22.68062 91277,Comuna Cehu Silvaniei,4741,SJ,181,RO,47.41293,23.1766 91313,Comuna Chieşd,4741,SJ,181,RO,47.36505,22.89296 91378,Comuna Cizer,4741,SJ,181,RO,47.06684,22.88129 91473,Comuna Coşeiu,4741,SJ,181,RO,47.33189,23.01282 91487,Comuna Crasna,4741,SJ,181,RO,47.16191,22.82979 91488,Comuna Creaca,4741,SJ,181,RO,47.1949,23.2276 91506,Comuna Crişeni,4741,SJ,181,RO,47.25028,23.06965 91501,Comuna Cristolţ,4741,SJ,181,RO,47.21231,23.43745 91538,Comuna Cuzăplac,4741,SJ,181,RO,46.94651,23.21895 91639,Comuna Dobrin,4741,SJ,181,RO,47.30812,23.11367 91678,Comuna Dragu,4741,SJ,181,RO,47.03493,23.41089 91761,Comuna Fildu De Jos,4741,SJ,181,RO,46.91837,23.01591 91962,Comuna Gâlgău,4741,SJ,181,RO,47.27667,23.68763 91964,Comuna Gârbou,4741,SJ,181,RO,47.15447,23.43522 91990,Comuna Halmăşd,4741,SJ,181,RO,47.15903,22.59664 91997,Comuna Hereclean,4741,SJ,181,RO,47.26297,23.00704 91999,Comuna Hida,4741,SJ,181,RO,47.07831,23.33841 92021,Comuna Horoatu Crasnei,4741,SJ,181,RO,47.09729,22.92131 92069,Comuna Ileanda,4741,SJ,181,RO,47.34501,23.60827 92088,Comuna Ip,4741,SJ,181,RO,47.22138,22.62406 92156,Comuna Letca,4741,SJ,181,RO,47.34948,23.42865 92186,Comuna Lozna,4741,SJ,181,RO,47.3151,23.48507 92385,Comuna Măerişte,4741,SJ,181,RO,47.29893,22.75444 92240,Comuna Marca,4741,SJ,181,RO,47.23495,22.55089 93586,Comună Meseşenii de Jos,4741,SJ,181,RO,47.14568,22.99133 92304,Comuna Mirşid,4741,SJ,181,RO,47.23132,23.14308 92464,Comuna Năpradea,4741,SJ,181,RO,47.34497,23.31603 92459,Comuna Nuşfalău,4741,SJ,181,RO,47.21355,22.70784 92549,Comuna Pericei,4741,SJ,181,RO,47.24643,22.87644 92598,Comuna Plopiş,4741,SJ,181,RO,47.11425,22.6424 92625,Comuna Poiana Blenchii,4741,SJ,181,RO,47.30626,23.76012 92785,Comuna Românaşi,4741,SJ,181,RO,47.1147,23.17627 92814,Comuna Rus,4741,SJ,181,RO,47.278,23.57813 93044,Comuna Sâg,4741,SJ,181,RO,47.07041,22.78671 93101,Comuna Sălăţig,4741,SJ,181,RO,47.35417,23.15585 93497,Comuna Şamşud,4741,SJ,181,RO,47.33234,22.95373 93057,Comuna Sânmihaiu Almaşului,4741,SJ,181,RO,47.03822,23.21448 93566,Comuna Şărmăşag,4741,SJ,181,RO,47.33342,22.81988 93522,Comuna Şimişna,4741,SJ,181,RO,47.21179,23.61546 92975,Comuna Someş-Odorhei,4741,SJ,181,RO,47.32846,23.22294 93039,Comuna Surduc,4741,SJ,181,RO,47.24433,23.37313 93191,Comuna Treznea,4741,SJ,181,RO,47.09432,23.10166 93297,Comuna Valcãu De Jos,4741,SJ,181,RO,47.1096,22.73662 93448,Comuna Vârşolţ,4741,SJ,181,RO,47.19711,22.94529 93470,Comuna Zalha,4741,SJ,181,RO,47.19786,23.53139 93478,Comuna Zimbor,4741,SJ,181,RO,46.98887,23.29029 93689,Coşeiu,4741,SJ,181,RO,47.31667,22.98333 93707,Crasna,4741,SJ,181,RO,47.16667,22.9 93709,Creaca,4741,SJ,181,RO,47.2,23.25 93735,Crişeni,4741,SJ,181,RO,47.23333,23.05 93725,Cristolţ,4741,SJ,181,RO,47.2,23.43333 93789,Cuzăplac,4741,SJ,181,RO,46.96667,23.2 93911,Deja,4741,SJ,181,RO,47.35537,23.183 93924,Derșida,4741,SJ,181,RO,47.3881,22.8017 93940,Dioșod,4741,SJ,181,RO,47.29238,23.02099 93959,Dobrin,4741,SJ,181,RO,47.28333,23.13333 94024,Dragu,4741,SJ,181,RO,47.01667,23.4 94169,Fildu de Jos,4741,SJ,181,RO,46.93333,23.06667 94478,Gâlgău,4741,SJ,181,RO,47.28183,23.70157 94479,Gâlgău Almaşului,4741,SJ,181,RO,47.2,23.33333 94482,Gârbou,4741,SJ,181,RO,47.15,23.43333 94355,Giurtelecu Șimleului,4741,SJ,181,RO,47.2968,22.79557 94519,Halmăşd,4741,SJ,181,RO,47.15,22.61667 94531,Hereclean,4741,SJ,181,RO,47.25,23.01667 94534,Hida,4741,SJ,181,RO,47.06667,23.28333 94565,Horoatu Crasnei,4741,SJ,181,RO,47.13333,22.88333 94655,Ileanda,4741,SJ,181,RO,47.33333,23.63333 94682,Ip,4741,SJ,181,RO,47.23333,22.65 94730,Jibou,4741,SJ,181,RO,47.25896,23.25651 94785,Letca,4741,SJ,181,RO,47.33333,23.45 94835,Lozna,4741,SJ,181,RO,47.31667,23.46667 95236,Măerişte,4741,SJ,181,RO,47.31667,22.8 94909,Mal,4741,SJ,181,RO,47.06979,22.81441 94925,Marca,4741,SJ,181,RO,47.21667,22.56667 94931,Marin,4741,SJ,181,RO,47.12754,22.81055 94961,Meseşenii de Jos,4741,SJ,181,RO,47.15,22.98333 95026,Mirşid,4741,SJ,181,RO,47.23333,23.13333 95197,Municipiul Zalãu,4741,SJ,181,RO,47.16633,23.0966 95373,Năpradea,4741,SJ,181,RO,47.36667,23.31667 95366,Nuşfalău,4741,SJ,181,RO,47.2,22.73333 95640,Oraș Jibou,4741,SJ,181,RO,47.26001,23.25488 95629,Oraş Şimleu Silvaniei,4741,SJ,181,RO,47.23018,22.7944 95719,Peceiu,4741,SJ,181,RO,47.12415,22.86238 95729,Pericei,4741,SJ,181,RO,47.23333,22.88333 95821,Plopiş,4741,SJ,181,RO,47.13333,22.68333 95868,Poiana Blenchii,4741,SJ,181,RO,47.3,23.75 95986,Pusta,4741,SJ,181,RO,47.24596,22.72374 96109,Românaşi,4741,SJ,181,RO,47.1,23.18333 96157,Rus,4741,SJ,181,RO,47.28333,23.6 96516,Sâg,4741,SJ,181,RO,47.07545,22.78084 106024,Sălăţig,4741,SJ,181,RO,47.36667,23.13333 97029,Şamşud,4741,SJ,181,RO,47.35,22.95 96534,Sânmihaiu Almaşului,4741,SJ,181,RO,47.01667,23.3 97098,Şărmăşag,4741,SJ,181,RO,47.35,22.83333 97124,Șimișna,4741,SJ,181,RO,47.23202,23.6237 97052,Şimleu Silvaniei,4741,SJ,181,RO,47.23333,22.8 96408,Someş-Odorhei,4741,SJ,181,RO,47.31667,23.26667 96474,Stârciu,4741,SJ,181,RO,47.08747,22.91998 96508,Surduc,4741,SJ,181,RO,47.25,23.35 106098,Tihău,4741,SJ,181,RO,47.22724,23.32964 106154,Treznea,4741,SJ,181,RO,47.1,23.11667 96706,Valcău de Jos,4741,SJ,181,RO,47.11667,22.73333 96949,Vârşolţ,4741,SJ,181,RO,47.2,22.93333 96982,Zalău,4741,SJ,181,RO,47.2,23.05 96981,Zalha,4741,SJ,181,RO,47.18333,23.53333 97019,Zăuan,4741,SJ,181,RO,47.22495,22.66328 96994,Zimbor,4741,SJ,181,RO,47.0,23.26667 89878,Acâş,4746,SM,181,RO,47.53333,22.78333 89901,Agriș,4746,SM,181,RO,47.88075,23.0034 89957,Andrid,4746,SM,181,RO,47.51667,22.35 89967,Apa,4746,SM,181,RO,47.76667,23.2 89983,Ardud,4746,SM,181,RO,47.63333,22.88333 90020,Babța,4746,SM,181,RO,47.45778,22.94283 90458,Bârsău de Sus,4746,SM,181,RO,47.6,23.21667 90551,Bătarci,4746,SM,181,RO,48.03333,23.16667 90092,Beltiug,4746,SM,181,RO,47.55,22.85 90116,Berveni,4746,SM,181,RO,47.75,22.46667 90154,Bixad,4746,SM,181,RO,47.93333,23.4 90190,Bogdand,4746,SM,181,RO,47.41667,22.93333 90204,Boinești,4746,SM,181,RO,47.91567,23.35117 90244,Botiz,4746,SM,181,RO,47.83333,22.95 93840,Călineşti-Oaş,4746,SM,181,RO,47.9,23.3 93855,Cămărzana,4746,SM,181,RO,48.0,23.31667 93853,Cămin,4746,SM,181,RO,47.72836,22.47987 93858,Căpleni,4746,SM,181,RO,47.71667,22.5 93872,Cărășeu,4746,SM,181,RO,47.74126,23.09798 90580,Carei,4746,SM,181,RO,47.68333,22.46667 93882,Căuaş,4746,SM,181,RO,47.56667,22.55 90608,Cehal,4746,SM,181,RO,47.38333,22.6 90641,Certeze,4746,SM,181,RO,47.9,23.46667 90700,Cidreag,4746,SM,181,RO,47.98677,22.96395 90752,Ciumești,4746,SM,181,RO,47.66382,22.34069 90820,Comuna Acâş,4746,SM,181,RO,47.53143,22.74106 90833,Comuna Agriş,4746,SM,181,RO,47.87377,23.00343 90869,Comuna Andrid,4746,SM,181,RO,47.5172,22.34688 90875,Comuna Apa,4746,SM,181,RO,47.74934,23.18966 91195,Comuna Bârsău,4746,SM,181,RO,47.59376,23.24257 91245,Comuna Bătarci,4746,SM,181,RO,48.04054,23.14274 90956,Comuna Beltiug,4746,SM,181,RO,47.56523,22.85452 90974,Comuna Berveni,4746,SM,181,RO,47.74896,22.47553 91000,Comuna Bixad,4746,SM,181,RO,47.92031,23.37337 91025,Comuna Bogdand,4746,SM,181,RO,47.41824,22.92868 91061,Comuna Botiz,4746,SM,181,RO,47.83285,22.94865 91559,Comuna Cãlineşti-Oaş,4746,SM,181,RO,47.9034,23.27351 91581,Comuna Cămărzana,4746,SM,181,RO,47.99435,23.30874 91563,Comuna Cãmin,4746,SM,181,RO,47.72836,22.47987 91583,Comuna Căpleni,4746,SM,181,RO,47.70942,22.50637 91596,Comuna Căuaş,4746,SM,181,RO,47.57998,22.55546 91276,Comuna Cehal,4746,SM,181,RO,47.3844,22.59613 91298,Comuna Certeze,4746,SM,181,RO,47.92014,23.4735 91371,Comuna Ciumeşti,4746,SM,181,RO,47.66308,22.33452 91484,Comuna Craidorolţ,4746,SM,181,RO,47.59793,22.69883 91510,Comuna Crucişor,4746,SM,181,RO,47.65949,23.24776 91523,Comuna Culciu,4746,SM,181,RO,47.75246,23.05593 91631,Comuna Doba,4746,SM,181,RO,47.74588,22.68383 91667,Comuna Dorolţ,4746,SM,181,RO,47.84524,22.78642 91776,Comuna Foieni,4746,SM,181,RO,47.7,22.38333 91850,Comuna Gherţa Mică,4746,SM,181,RO,47.93724,23.22169 91989,Comuna Halmeu,4746,SM,181,RO,47.97833,23.05362 92005,Comuna Hodod,4746,SM,181,RO,47.3987,23.04633 92012,Comuna Homoroade,4746,SM,181,RO,47.63896,23.06593 92141,Comuna Lazuri,4746,SM,181,RO,47.89143,22.87213 92250,Comuna Medieşu Aurit,4746,SM,181,RO,47.79451,23.1536 92268,Comuna Micula,4746,SM,181,RO,47.91687,22.93652 92316,Comuna Moftinu,4746,SM,181,RO,47.68333,22.6 92483,Comuna Odoreu,4746,SM,181,RO,47.79427,22.99639 92505,Comuna Oraşu Nou,4746,SM,181,RO,47.8347,23.30211 92713,Comuna Pãuleşti,4746,SM,181,RO,47.74992,22.94743 92562,Comuna Petreşti,4746,SM,181,RO,47.58993,22.35972 92586,Comuna Pir,4746,SM,181,RO,47.4665,22.3938 92590,Comuna Pişcolt,4746,SM,181,RO,47.59761,22.27498 92648,Comuna Pomi,4746,SM,181,RO,47.68071,23.32362 92663,Comuna Porumbeşti,4746,SM,181,RO,47.98491,22.97236 92741,Comuna Racşa,4746,SM,181,RO,47.82068,23.33247 93088,Comuna Săcăşeni,4746,SM,181,RO,47.46964,22.68273 92870,Comuna Sanislău,4746,SM,181,RO,47.63116,22.33109 92872,Comuna Santău,4746,SM,181,RO,47.51152,22.47327 93113,Comuna Săuca,4746,SM,181,RO,47.46041,22.48621 92970,Comuna Socond,4746,SM,181,RO,47.54018,22.98135 93034,Comuna Supur,4746,SM,181,RO,47.45826,22.80767 93127,Comuna Tarna Mare,4746,SM,181,RO,48.08356,23.19491 93231,Comuna Târşolţ,4746,SM,181,RO,47.95,23.35 93140,Comuna Terebeşti,4746,SM,181,RO,47.67823,22.74226 93158,Comuna Tiream,4746,SM,181,RO,47.58553,22.43993 93218,Comuna Turţ,4746,SM,181,RO,47.98018,23.20968 93217,Comuna Turulung,4746,SM,181,RO,47.92351,23.10382 93286,Comuna Urziceni,4746,SM,181,RO,47.73286,22.40181 93329,Comuna Valea Vinului,4746,SM,181,RO,47.69553,23.18488 93331,Comuna Vama,4746,SM,181,RO,47.84354,23.3966 93347,Comuna Vetiş,4746,SM,181,RO,47.79292,22.75623 93357,Comuna Viile Satu Mare,4746,SM,181,RO,47.66667,22.95 93703,Craidorolţ,4746,SM,181,RO,47.61667,22.7 93743,Crucişor,4746,SM,181,RO,47.68333,23.25 93767,Culciu Mic,4746,SM,181,RO,47.76667,23.03333 93893,Dara,4746,SM,181,RO,47.81636,22.75216 93906,Decebal,4746,SM,181,RO,47.7663,22.75603 93944,Doba,4746,SM,181,RO,47.73333,22.71667 93946,Dobra,4746,SM,181,RO,47.49477,22.82762 93994,Domănești,4746,SM,181,RO,47.71071,22.58975 94007,Dorolţ,4746,SM,181,RO,47.85,22.81667 94054,Drăgușeni,4746,SM,181,RO,47.90541,23.0778 94078,Dumbrava,4746,SM,181,RO,47.84418,23.0806 94196,Foieni,4746,SM,181,RO,47.7,22.38333 94315,Gherța Mare,4746,SM,181,RO,47.96884,23.20853 94314,Gherţa Mică,4746,SM,181,RO,47.93333,23.23333 94518,Halmeu,4746,SM,181,RO,47.96667,23.01667 94542,Hodod,4746,SM,181,RO,47.4,23.03333 94554,Homorodu de Jos,4746,SM,181,RO,47.66667,23.08333 94586,Huta Certeze,4746,SM,181,RO,47.92583,23.48715 94672,Iojib,4746,SM,181,RO,47.81617,23.15603 94766,Lazuri,4746,SM,181,RO,47.85,22.86667 94813,Livada,4746,SM,181,RO,47.86667,23.13333 94840,Lucăceni,4746,SM,181,RO,47.74194,22.47819 95233,Mădăras,4746,SM,181,RO,47.68403,22.86554 94944,Medieşu Aurit,4746,SM,181,RO,47.78333,23.15 94970,Micula,4746,SM,181,RO,47.9,22.95 95049,Moftinu Mare,4746,SM,181,RO,47.66667,22.66667 95050,Moftinu Mic,4746,SM,181,RO,47.68669,22.60054 95060,Moișeni,4746,SM,181,RO,47.92798,23.46833 95125,Municipiul Carei,4746,SM,181,RO,47.68203,22.46635 95178,Municipiul Satu Mare,4746,SM,181,RO,47.76514,22.83565 95317,Negreşti-Oaş,4746,SM,181,RO,47.86667,23.43333 95381,Oar,4746,SM,181,RO,47.80569,22.73085 95409,Odoreu,4746,SM,181,RO,47.8,23.0 95636,Oraș Ardud,4746,SM,181,RO,47.63333,22.88333 95641,Oraș Livada,4746,SM,181,RO,47.86667,23.13333 95549,Oraş Negreşti-Oaş,4746,SM,181,RO,47.86801,23.41816 95650,Oraș Tăşnad,4746,SM,181,RO,47.48333,22.58333 95634,Oraşu Nou,4746,SM,181,RO,47.83333,23.28333 96030,Păuleşti,4746,SM,181,RO,47.78333,22.91667 95747,Petreşti,4746,SM,181,RO,47.6,22.36667 95795,Pir,4746,SM,181,RO,47.46667,22.36667 95805,Pişcolt,4746,SM,181,RO,47.58333,22.3 95869,Poiana Codrului,4746,SM,181,RO,47.62667,23.25056 95903,Pomi,4746,SM,181,RO,47.7,23.31667 95924,Porumbești,4746,SM,181,RO,47.98305,22.98076 95935,Potău,4746,SM,181,RO,47.75673,23.1209 96050,Racşa,4746,SM,181,RO,47.82068,23.33247 106002,Săcăşeni,4746,SM,181,RO,47.48333,22.68333 96239,Sanislău,4746,SM,181,RO,47.63333,22.33333 96241,Santău,4746,SM,181,RO,47.51667,22.51667 106036,Sărăuad,4746,SM,181,RO,47.47944,22.62559 106041,Sătmărel,4746,SM,181,RO,47.7347,22.79536 96256,Satu Mare,4746,SM,181,RO,47.79926,22.86255 106042,Săuca,4746,SM,181,RO,47.46667,22.48333 96398,Socond,4746,SM,181,RO,47.56667,22.95 96470,Stâna,4746,SM,181,RO,47.50757,22.96423 96503,Supuru de Jos,4746,SM,181,RO,47.46667,22.8 106062,Tarna Mare,4746,SM,181,RO,48.09175,23.19369 96597,Târşolţ,4746,SM,181,RO,47.95,23.35 96598,Târşolţel,4746,SM,181,RO,47.95,23.35 96630,Tăşnad,4746,SM,181,RO,47.48333,22.58333 106083,Terebeşti,4746,SM,181,RO,47.68333,22.71667 106105,Tiream,4746,SM,181,RO,47.61667,22.46667 106157,Trip,4746,SM,181,RO,47.9245,23.37648 96551,Tur,4746,SM,181,RO,47.88231,23.39045 96569,Turţ,4746,SM,181,RO,47.98333,23.21667 96568,Turulung,4746,SM,181,RO,47.93333,23.08333 96687,Urziceni,4746,SM,181,RO,47.73333,22.4 96752,Valea Seacă,4746,SM,181,RO,48.0808,23.16489 96763,Valea Vinului,4746,SM,181,RO,47.71667,23.18333 96770,Vama,4746,SM,181,RO,47.83333,23.4 96795,Vetiş,4746,SM,181,RO,47.8,22.76667 96816,Viile Satu Mare,4746,SM,181,RO,47.66667,22.95 89903,Agârbiciu,4755,SB,181,RO,46.06764,24.19386 89898,Agnita,4755,SB,181,RO,45.96667,24.61667 89945,Alămor,4755,SB,181,RO,45.93003,23.9937 89934,Alma,4755,SB,181,RO,46.21359,24.48037 89946,Alțâna,4755,SB,181,RO,45.93333,24.46667 89973,Apoldu de Jos,4755,SB,181,RO,45.86667,23.85 89998,Arpaşu de Jos,4755,SB,181,RO,45.78333,24.61667 89999,Arpașu de Sus,4755,SB,181,RO,45.73436,24.61906 90016,Aţel,4755,SB,181,RO,46.15,24.46667 90008,Avrig,4755,SB,181,RO,45.71667,24.38333 90011,Axente Sever,4755,SB,181,RO,46.1,24.21667 90447,Bârghiş,4755,SB,181,RO,45.98333,24.53333 90072,Bazna,4755,SB,181,RO,46.2,24.28333 90130,Biertan,4755,SB,181,RO,46.13333,24.51667 90166,Blăjel,4755,SB,181,RO,46.21667,24.31667 90202,Boian,4755,SB,181,RO,46.20159,24.22862 90207,Boița,4755,SB,181,RO,45.63454,24.26037 90322,Brădeni,4755,SB,181,RO,46.08333,24.83333 90261,Bradu,4755,SB,181,RO,45.72221,24.33234 90275,Brateiu,4755,SB,181,RO,46.16667,24.41667 90314,Bruiu,4755,SB,181,RO,45.86667,24.7 93819,Cârţa,4755,SB,181,RO,45.78333,24.56667 93821,Cârţişoara,4755,SB,181,RO,45.71667,24.58333 90680,Chirpăr,4755,SB,181,RO,45.9,24.6 90737,Cisnădie,4755,SB,181,RO,45.71667,24.15 90854,Comuna Alma,4755,SB,181,RO,46.22726,24.46825 90862,Comuna Alțâna,4755,SB,181,RO,45.95534,24.46144 90880,Comuna Apoldu de Jos,4755,SB,181,RO,45.89598,23.85036 90897,Comuna Arpaşu de Jos,4755,SB,181,RO,45.77314,24.6087 90912,Comuna Aţel,4755,SB,181,RO,46.15465,24.48297 90908,Comuna Axente Sever,4755,SB,181,RO,46.07315,24.22535 91186,Comuna Bârghiş,4755,SB,181,RO,46.01126,24.50431 90941,Comuna Bazna,4755,SB,181,RO,46.21384,24.26438 90985,Comuna Biertan,4755,SB,181,RO,46.12456,24.51945 91009,Comuna Blăjel,4755,SB,181,RO,46.22436,24.34108 91036,Comuna Boiţa,4755,SB,181,RO,45.57905,24.24651 91112,Comuna Brădeni,4755,SB,181,RO,46.06701,24.86289 91083,Comuna Brateiu,4755,SB,181,RO,46.15361,24.42007 91105,Comuna Bruiu,4755,SB,181,RO,45.8635,24.70341 91556,Comuna Cârţa,4755,SB,181,RO,45.80033,24.56371 91557,Comuna Cârţişoara,4755,SB,181,RO,45.72704,24.57985 91323,Comuna Chirpăr,4755,SB,181,RO,45.90545,24.61093 91499,Comuna Cristian,4755,SB,181,RO,45.78444,24.02995 91729,Comuna Dârlos,4755,SB,181,RO,46.20795,24.39737 91951,Comuna Gura Râului,4755,SB,181,RO,45.73012,23.98417 92006,Comuna Hoghilag,4755,SB,181,RO,46.21941,24.61559 92051,Comuna Iacobeni,4755,SB,181,RO,46.0444,24.75456 92125,Comuna Jina,4755,SB,181,RO,45.78593,23.67793 92139,Comuna Laslea,4755,SB,181,RO,46.14966,24.63839 92181,Comuna Loamneş,4755,SB,181,RO,45.95467,24.04197 92191,Comuna Ludoş,4755,SB,181,RO,45.93336,23.9007 92244,Comuna Marpod,4755,SB,181,RO,45.87101,24.51544 92260,Comuna Merghindeal,4755,SB,181,RO,45.97533,24.71324 92269,Comuna Micăsasa,4755,SB,181,RO,46.10607,24.13264 92284,Comuna Mihăileni,4755,SB,181,RO,45.99998,24.36621 92346,Comuna Moşna,4755,SB,181,RO,46.07534,24.42509 92451,Comuna Nocrich,4755,SB,181,RO,45.87075,24.43314 92508,Comuna Orlat,4755,SB,181,RO,45.7555,23.96855 92725,Comuna Păuca,4755,SB,181,RO,46.00209,23.91696 92631,Comuna Poiana Sibiului,4755,SB,181,RO,45.8092,23.73095 92657,Comuna Poplaca,4755,SB,181,RO,45.72815,24.0538 92661,Comuna Porumbacu de Jos,4755,SB,181,RO,45.75078,24.49551 92735,Comuna Racoviţa,4755,SB,181,RO,45.66604,24.35142 92855,Comuna Răşinari,4755,SB,181,RO,45.69761,24.07378 92826,Comuna Râu Sadului,4755,SB,181,RO,45.62401,24.06132 92796,Comuna Roşia,4755,SB,181,RO,45.80385,24.31786 92860,Comuna Sadu,4755,SB,181,RO,45.67199,24.18393 93501,Comuna Şeica Mare,4755,SB,181,RO,45.99998,24.23909 93502,Comuna Şeica Mică,4755,SB,181,RO,46.04202,24.09567 93505,Comuna Şelimbăr,4755,SB,181,RO,45.75141,24.21985 92950,Comuna Slimnic,4755,SB,181,RO,45.94465,24.19777 93562,Comuna Şura Mare,4755,SB,181,RO,45.85917,24.18477 93563,Comuna Şura Mică,4755,SB,181,RO,45.82485,24.0421 93228,Comuna Târnava,4755,SB,181,RO,46.13752,24.29756 93154,Comuna Tilişca,4755,SB,181,RO,45.80131,23.81411 93215,Comuna Turnu Roşu,4755,SB,181,RO,45.64667,24.31762 93328,Comuna Valea Viilor,4755,SB,181,RO,46.07141,24.31223 93424,Comuna Vurpăr,4755,SB,181,RO,45.89672,24.34315 93609,Copşa Mică,4755,SB,181,RO,46.11667,24.25 93722,Cristian,4755,SB,181,RO,45.78333,24.03333 94110,Dârlos,4755,SB,181,RO,46.18333,24.4 94084,Dumbrăveni,4755,SB,181,RO,46.23333,24.56667 94459,Gura Râului,4755,SB,181,RO,45.73333,23.98333 94546,Hoghilag,4755,SB,181,RO,46.23333,24.61667 94616,Iacobeni,4755,SB,181,RO,46.05,24.71667 94649,Ighișu Nou,4755,SB,181,RO,46.11121,24.3492 94739,Jina,4755,SB,181,RO,45.78333,23.68333 94763,Laslea,4755,SB,181,RO,46.21667,24.65 94828,Loamneş,4755,SB,181,RO,45.93333,24.1 94843,Ludoş,4755,SB,181,RO,45.91667,23.9 95256,Mălâncrav,4755,SB,181,RO,46.11003,24.6481 94932,Marpod,4755,SB,181,RO,45.86667,24.5 95225,Mârșa,4755,SB,181,RO,45.70002,24.37046 94943,Mediaş,4755,SB,181,RO,46.16667,24.35 94956,Merghindeal,4755,SB,181,RO,45.96667,24.73333 94971,Micăsasa,4755,SB,181,RO,46.08333,24.11667 94972,Miercurea Sibiului,4755,SB,181,RO,45.88333,23.8 94991,Mihăileni,4755,SB,181,RO,45.98333,24.35 95089,Moşna,4755,SB,181,RO,46.08333,24.4 95155,Municipiul Mediaş,4755,SB,181,RO,46.13663,24.35377 95181,Municipiul Sibiu,4755,SB,181,RO,45.79383,24.13533 95353,Nocrich,4755,SB,181,RO,45.9,24.45 95355,Nou,4755,SB,181,RO,45.83333,24.28333 95396,Ocna Sibiului,4755,SB,181,RO,45.88333,24.05 95447,Oraş Agnita,4755,SB,181,RO,45.98952,24.61458 95451,Oraş Avrig,4755,SB,181,RO,45.73797,24.38713 95494,Oraş Cisnãdie,4755,SB,181,RO,45.70924,24.13284 95497,Oraş Copşa Micã,4755,SB,181,RO,46.11651,24.25517 95511,Oraş Dumbrãveni,4755,SB,181,RO,46.22258,24.55274 95540,Oraş Miercurea Sibiului,4755,SB,181,RO,45.86247,23.79766 95557,Oraş Ocna Sibiului,4755,SB,181,RO,45.88311,24.00095 95599,Oraş Sãlişte,4755,SB,181,RO,45.78967,23.89532 95610,Oraş Tãlmaciu,4755,SB,181,RO,45.66751,24.25357 95658,Orlat,4755,SB,181,RO,45.75,23.96667 96027,Păuca,4755,SB,181,RO,46.01667,23.9 95880,Poiana Sibiului,4755,SB,181,RO,45.8,23.73333 95916,Poplaca,4755,SB,181,RO,45.71667,24.05 95922,Porumbacu de Jos,4755,SB,181,RO,45.75,24.45 96044,Racoviţa,4755,SB,181,RO,45.68333,24.35 96218,Răşinari,4755,SB,181,RO,45.7,24.06667 96175,Râu Sadului,4755,SB,181,RO,45.61667,24.06667 96126,Roşia,4755,SB,181,RO,45.81667,24.31667 96151,Ruja,4755,SB,181,RO,46.01175,24.65048 96226,Sadu,4755,SB,181,RO,45.66667,24.18333 106017,Sălişte,4755,SB,181,RO,45.79633,23.88677 97115,Șaroș pe Târnave,4755,SB,181,RO,46.2,24.55 97041,Şeíca Mare,4755,SB,181,RO,46.01667,24.15 97033,Şeica Mică,4755,SB,181,RO,46.05,24.13333 97036,Şelimbăr,4755,SB,181,RO,45.76667,24.2 96332,Sibiu,4755,SB,181,RO,45.8,24.15 96366,Slimnic,4755,SB,181,RO,45.91667,24.16667 97094,Şura Mare,4755,SB,181,RO,45.85,24.16667 97095,Şura Mică,4755,SB,181,RO,45.83333,24.06667 96602,Tălmăcel,4755,SB,181,RO,45.64712,24.2427 96601,Tălmaciu,4755,SB,181,RO,45.66714,24.26464 96593,Târnava,4755,SB,181,RO,46.13975,24.28926 106100,Tilişca,4755,SB,181,RO,45.8,23.85 96566,Turnu Roşu,4755,SB,181,RO,45.63333,24.3 96762,Valea Viilor,4755,SB,181,RO,46.08333,24.28333 96799,Veștem,4755,SB,181,RO,45.71752,24.23958 96916,Vurpăr,4755,SB,181,RO,45.9,24.35 89888,Adâncata,4720,SV,181,RO,47.73333,26.3 89978,Arbore,4720,SV,181,RO,47.73333,25.93333 89986,Argel,4720,SV,181,RO,47.76136,25.47049 89989,Arghira,4720,SV,181,RO,47.45412,26.4725 90482,Bădeuți,4720,SV,181,RO,47.80277,25.98387 90028,Baia,4720,SV,181,RO,47.41667,26.21667 90499,Băișești,4720,SV,181,RO,47.48024,26.11115 90520,Bălăceana,4720,SV,181,RO,47.64338,26.04764 90507,Bălcăuţi,4720,SV,181,RO,47.89149,26.07279 90534,Bănești,4720,SV,181,RO,47.58946,26.52335 90068,Basarabi,4720,SV,181,RO,47.4537,26.43972 90100,Berchișești,4720,SV,181,RO,47.52306,26.03207 90135,Bilca,4720,SV,181,RO,47.91667,25.75 90153,Bivolărie,4720,SV,181,RO,47.91464,25.65525 90184,Bogata,4720,SV,181,RO,47.40789,26.18655 90191,Bogdăneşti,4720,SV,181,RO,47.36667,26.28333 90230,Boroaia,4720,SV,181,RO,47.35,26.33333 90240,Bosanci,4720,SV,181,RO,47.58333,26.31667 90247,Botoşana,4720,SV,181,RO,47.68333,25.95 90333,Brăiești,4720,SV,181,RO,47.49673,26.07182 90286,Breaza,4720,SV,181,RO,47.61502,25.31816 90305,Brodina,4720,SV,181,RO,47.88333,25.41667 90308,Broşteni,4720,SV,181,RO,47.23333,25.7 90370,Bucșoaia,4720,SV,181,RO,47.53972,25.81118 90379,Budeni,4720,SV,181,RO,47.41383,26.65927 90411,Bunești,4720,SV,181,RO,47.52501,26.28826 90419,Burla,4720,SV,181,RO,47.79033,25.92696 90420,Bursuceni,4720,SV,181,RO,47.65097,26.4753 90559,Cacica,4720,SV,181,RO,47.63333,25.9 90561,Cajvana,4720,SV,181,RO,47.7,25.96667 90563,Calafindeşti,4720,SV,181,RO,47.85,26.11667 93842,Călinești,4720,SV,181,RO,47.80329,26.15345 93801,Câmpulung Moldovenesc,4720,SV,181,RO,47.53333,25.56667 90570,Capu Câmpului,4720,SV,181,RO,47.50822,25.97959 90569,Capu Codrului,4720,SV,181,RO,47.53117,25.98724 93813,Cârlibaba,4720,SV,181,RO,47.58333,25.13333 90716,Ciocănești,4720,SV,181,RO,47.48107,25.27912 90731,Ciprian Porumbescu,4720,SV,181,RO,47.56667,26.06667 90768,Clit,4720,SV,181,RO,47.75396,25.85691 90792,Colacu,4720,SV,181,RO,47.5383,25.37211 93588,Comănești,4720,SV,181,RO,47.66939,25.98836 90824,Comuna Adâncata,4720,SV,181,RO,47.73678,26.30819 90882,Comuna Arbore,4720,SV,181,RO,47.74775,25.90345 90916,Comuna Baia,4720,SV,181,RO,47.41311,26.20278 91222,Comuna Bălăceana,4720,SV,181,RO,47.64338,26.04764 91212,Comuna Bălcăuţi,4720,SV,181,RO,47.90436,26.08665 90962,Comuna Berchişeşti,4720,SV,181,RO,47.5326,26.04276 90988,Comuna Bilca,4720,SV,181,RO,47.91826,25.75457 91026,Comuna Bogdăneşti,4720,SV,181,RO,47.36671,26.27386 91051,Comuna Boroaia,4720,SV,181,RO,47.34226,26.33043 91058,Comuna Bosanci,4720,SV,181,RO,47.57503,26.29582 91064,Comuna Botoşana,4720,SV,181,RO,47.68759,25.94337 91090,Comuna Breaza,4720,SV,181,RO,47.62436,25.33172 91101,Comuna Brodina,4720,SV,181,RO,47.85147,25.39262 91164,Comuna Buneşti,4720,SV,181,RO,47.51793,26.29717 91171,Comuna Burla,4720,SV,181,RO,47.79033,25.92696 91252,Comuna Cacica,4720,SV,181,RO,47.65553,25.86673 91253,Comuna Calafindeşti,4720,SV,181,RO,47.86578,26.11598 91257,Comuna Capu Câmpului,4720,SV,181,RO,47.50822,25.97959 91551,Comuna Cârlibaba,4720,SV,181,RO,47.58546,25.09425 91347,Comuna Ciocăneşti,4720,SV,181,RO,47.50083,25.24673 91358,Comuna Ciprian Porumbescu,4720,SV,181,RO,47.56842,26.06397 91410,Comuna Comăneşti,4720,SV,181,RO,47.66932,25.98661 91443,Comuna Cornu Luncii,4720,SV,181,RO,47.45743,26.14122 91476,Comuna Coşna,4720,SV,181,RO,47.37343,25.16889 91509,Comuna Crucea,4720,SV,181,RO,47.37472,25.59262 91744,Comuna Dărmăneşti,4720,SV,181,RO,47.75967,26.12677 91654,Comuna Dolheşti,4720,SV,181,RO,47.4372,26.52383 91661,Comuna Dorna Cândrenilor,4720,SV,181,RO,47.34594,25.23735 91662,Comuna Dorna-Arini,4720,SV,181,RO,47.35928,25.44383 91663,Comuna Dorneşti,4720,SV,181,RO,47.88982,25.99415 91683,Comuna Drãgoieşti,4720,SV,181,RO,47.53507,26.09178 91694,Comuna Drăguşeni,4720,SV,181,RO,47.3117,26.52284 91715,Comuna Dumbrăveni,4720,SV,181,RO,47.66802,26.40699 91804,Comuna Fântâna Mare,4720,SV,181,RO,47.4,26.3 91809,Comuna Fântânele,4720,SV,181,RO,47.58499,26.52036 91779,Comuna Forăşti,4720,SV,181,RO,47.36386,26.46174 91795,Comuna Frătăuţii Noi,4720,SV,181,RO,47.92568,25.87372 91796,Comuna Frătăuţii Vechi,4720,SV,181,RO,47.90465,25.90303 91785,Comuna Frumosu,4720,SV,181,RO,47.61834,25.63529 91802,Comuna Fundu Moldovei,4720,SV,181,RO,47.55496,25.33346 91982,Comuna Gălăneşti,4720,SV,181,RO,47.91587,25.82894 91942,Comuna Grămeşti,4720,SV,181,RO,47.89744,26.14496 91944,Comuna Grăniceşti,4720,SV,181,RO,47.77658,26.06857 92042,Comuna Hănţeşti,4720,SV,181,RO,47.76696,26.34232 92034,Comuna Hârtop,4720,SV,181,RO,47.49,26.37226 92022,Comuna Horodnic De Jos,4720,SV,181,RO,47.86092,25.83243 92023,Comuna Horodnic De Sus,4720,SV,181,RO,47.83186,25.83687 92024,Comuna Horodniceni,4720,SV,181,RO,47.51356,26.17276 92050,Comuna Iacobeni,4720,SV,181,RO,47.44112,25.32431 92056,Comuna Iaslovăţ,4720,SV,181,RO,47.75862,25.97742 92072,Comuna Ilişeşti,4720,SV,181,RO,47.61665,26.0552 92091,Comuna Ipoteşti,4720,SV,181,RO,47.62828,26.29797 92108,Comuna Izvoarele Sucevei,4720,SV,181,RO,47.75766,25.19406 92398,Comuna Mălini,4720,SV,181,RO,47.40321,26.01485 92370,Comuna Mânăstirea Humorului,4720,SV,181,RO,47.62839,25.82206 92243,Comuna Marginea,4720,SV,181,RO,47.80927,25.82296 92307,Comuna Mitocu Dragomirnei,4720,SV,181,RO,47.73475,26.23992 92312,Comuna Moara,4720,SV,181,RO,47.58038,26.19565 92324,Comuna Moldova Suliţa,4720,SV,181,RO,47.67897,25.25421 92328,Comuna Moldoviţa,4720,SV,181,RO,47.72325,25.50689 92363,Comuna Muşeniţa,4720,SV,181,RO,47.9602,25.9811 92517,Comuna Ostra,4720,SV,181,RO,47.4048,25.75594 92718,Comuna Păltinoasa,4720,SV,181,RO,47.54101,25.97138 92533,Comuna Panaci,4720,SV,181,RO,47.19584,25.43169 92721,Comuna Părteştii de Jos,4720,SV,181,RO,47.62306,25.96689 92723,Comuna Pătrăuţi,4720,SV,181,RO,47.72097,26.18841 92632,Comuna Poiana Stampei,4720,SV,181,RO,47.31118,25.12932 92641,Comuna Poieni-Solca,4720,SV,181,RO,47.68626,25.89374 92645,Comuna Pojorâta,4720,SV,181,RO,47.50476,25.4218 92672,Comuna Preuteşti,4720,SV,181,RO,47.45479,26.42181 92701,Comuna Putna,4720,SV,181,RO,47.88518,25.60374 92846,Comuna Rădăşeni,4720,SV,181,RO,47.48804,26.24924 92828,Comuna Râşca,4720,SV,181,RO,47.36821,26.18987 92859,Comuna Sadova,4720,SV,181,RO,47.54248,25.5038 93500,Comuna Şaru Dornei,4720,SV,181,RO,47.26471,25.33324 92881,Comuna Satu Mare,4720,SV,181,RO,47.82377,26.01339 92883,Comuna Scheia,4720,SV,181,RO,47.6503,26.18094 93510,Comuna Şerbăuţi,4720,SV,181,RO,47.81507,26.14677 92936,Comuna Siminicea,4720,SV,181,RO,47.70926,26.39132 92947,Comuna Slatina,4720,SV,181,RO,47.4363,25.97797 93001,Comuna Straja,4720,SV,181,RO,47.91825,25.55275 93005,Comuna Stroieşti,4720,SV,181,RO,47.61943,26.12741 93011,Comuna Stulpicani,4720,SV,181,RO,47.43327,25.75705 93026,Comuna Suceviţa,4720,SV,181,RO,47.79051,25.74 93164,Comuna Todireşti,4720,SV,181,RO,47.70451,26.07762 93254,Comuna Udeşti,4720,SV,181,RO,47.57154,26.40955 93259,Comuna Ulma,4720,SV,181,RO,47.86322,25.26467 93292,Comuna Vadu Moldovei,4720,SV,181,RO,47.38595,26.40022 93316,Comuna Valea Moldovei,4720,SV,181,RO,47.48067,26.01535 93332,Comuna Vama,4720,SV,181,RO,47.56354,25.69089 93336,Comuna Vatra Moldoviţei,4720,SV,181,RO,47.66396,25.57802 93343,Comuna Vereşti,4720,SV,181,RO,47.625,26.46426 93350,Comuna Vicovu de Jos,4720,SV,181,RO,47.90112,25.72659 93402,Comuna Voitinel,4720,SV,181,RO,47.88366,25.75735 93404,Comuna Volovăţ,4720,SV,181,RO,47.80726,25.89558 93421,Comuna Vultureşti,4720,SV,181,RO,47.52041,26.40961 93472,Comuna Zamostea,4720,SV,181,RO,47.8661,26.20328 93481,Comuna Zvoriştea,4720,SV,181,RO,47.81813,26.28635 93639,Cornu Luncii,4720,SV,181,RO,47.46667,26.15 93645,Corocăiești,4720,SV,181,RO,47.63333,26.48333 93698,Coșna,4720,SV,181,RO,47.37098,25.18133 93670,Costâna,4720,SV,181,RO,47.69265,26.119 93740,Crucea,4720,SV,181,RO,47.35,25.61667 94130,Dărmăneşti,4720,SV,181,RO,47.73333,26.15 93918,Demacușa,4720,SV,181,RO,47.69717,25.50499 93982,Dolhasca,4720,SV,181,RO,47.43333,26.6 93985,Dolheștii Mici,4720,SV,181,RO,47.43633,26.55178 93986,Dolheștii-Mari,4720,SV,181,RO,47.4502,26.51326 93997,Dorna Cândrenilor,4720,SV,181,RO,47.35,25.25 93998,Dorna-Arini,4720,SV,181,RO,47.33832,25.4074 93999,Dorneşti,4720,SV,181,RO,47.87174,26.0043 94044,Drăgoiești,4720,SV,181,RO,47.55,26.08333 94050,Drăguşeni,4720,SV,181,RO,47.28333,26.48333 94085,Dumbrăveni,4720,SV,181,RO,47.65,26.41667 94092,Dumbrăvița,4720,SV,181,RO,47.39845,26.34578 94149,Falcău,4720,SV,181,RO,47.91087,25.46908 94259,Fălticeni,4720,SV,181,RO,47.45,26.3 94235,Fântâna Mare,4720,SV,181,RO,47.41432,26.30015 94236,Fântânele,4720,SV,181,RO,47.57463,26.53277 94200,Forăşti,4720,SV,181,RO,47.35,26.46667 94201,Frasin,4720,SV,181,RO,47.53333,25.8 94220,Frătăuţii Noi,4720,SV,181,RO,47.94257,25.84465 94221,Frătăuţii Vechi,4720,SV,181,RO,47.9,25.88333 94209,Frumosu,4720,SV,181,RO,47.61667,25.65 94229,Fundu Moldovei,4720,SV,181,RO,47.53333,25.4 94501,Găinești,4720,SV,181,RO,47.41968,25.91809 94505,Gălăneşti,4720,SV,181,RO,47.91667,25.8 94443,Grămeşti,4720,SV,181,RO,47.91667,26.15 94445,Grăniceşti,4720,SV,181,RO,47.81667,26.06667 94448,Gulia,4720,SV,181,RO,47.41203,26.60854 94454,Gura Humorului,4720,SV,181,RO,47.55,25.9 94458,Gura Putnei,4720,SV,181,RO,47.89951,25.5951 94604,Hănțești,4720,SV,181,RO,47.75507,26.37366 94592,Hârtop,4720,SV,181,RO,47.49,26.37226 94532,Herla,4720,SV,181,RO,47.44286,26.01254 94566,Horodnic de Jos,4720,SV,181,RO,47.86523,25.81856 94567,Horodnic de Sus,4720,SV,181,RO,47.84012,25.82354 94568,Horodniceni,4720,SV,181,RO,47.53333,26.16667 94576,Humoreni,4720,SV,181,RO,47.66667,25.98333 94582,Hurjuieni,4720,SV,181,RO,47.91667,25.81667 94615,Iacobeni,4720,SV,181,RO,47.43333,25.31667 94625,Iaslovăț,4720,SV,181,RO,47.75862,25.97742 94658,Ilișești,4720,SV,181,RO,47.60878,26.05061 94684,Ipoteşti,4720,SV,181,RO,47.61667,26.28333 94713,Izvoarele Sucevei,4720,SV,181,RO,47.75,25.18333 94893,Lămășeni,4720,SV,181,RO,47.49322,26.22806 94811,Liteni,4720,SV,181,RO,47.56667,26.2 95253,Mălini,4720,SV,181,RO,47.46667,26.08333 95262,Mănăstirea Humorului,4720,SV,181,RO,47.6,25.86667 94930,Marginea,4720,SV,181,RO,47.81667,25.81667 95278,Măriței,4720,SV,181,RO,47.7527,26.14626 95294,Măzănăești,4720,SV,181,RO,47.52795,26.08401 94990,Mihăiești,4720,SV,181,RO,47.51563,26.21734 94986,Mihoveni,4720,SV,181,RO,47.67994,26.1822 95005,Milişăuţi,4720,SV,181,RO,47.78333,26.0 95020,Mironu,4720,SV,181,RO,47.48799,26.00952 95031,Mitocu Dragomirnei,4720,SV,181,RO,47.73333,26.25 95039,Moara Carp,4720,SV,181,RO,47.56667,26.23333 95042,Moara Nica,4720,SV,181,RO,47.60086,26.22262 95062,Moldova Suliţa,4720,SV,181,RO,47.68333,25.25 95067,Moldoviţa,4720,SV,181,RO,47.68333,25.53333 95133,Municipiul Câmpulung Moldovenesc,4720,SV,181,RO,47.52981,25.55975 95143,Municipiul Fãlticeni,4720,SV,181,RO,47.46189,26.31668 95176,Municipiul Rãdãuţi,4720,SV,181,RO,47.8509,25.9157 95184,Municipiul Suceava,4720,SV,181,RO,47.67457,26.28109 95196,Municipiul Vatra Dornei,4720,SV,181,RO,47.34443,25.33391 95209,Muşeniţa,4720,SV,181,RO,47.96667,26.0 95303,Neagra Șarului,4720,SV,181,RO,47.23907,25.32923 95312,Negostina,4720,SV,181,RO,47.92282,26.08209 95320,Negrileasa,4720,SV,181,RO,47.42348,25.81617 95440,Oniceni,4720,SV,181,RO,47.32441,26.46217 95472,Oraş Broşteni,4720,SV,181,RO,47.23673,25.70028 95489,Oraş Cajvana,4720,SV,181,RO,47.71394,25.99186 95509,Oraş Dolhasca,4720,SV,181,RO,47.4179,26.61083 95519,Oraş Frasin,4720,SV,181,RO,47.51236,25.79977 95525,Oraş Gura Humorului,4720,SV,181,RO,47.54191,25.87765 95539,Oraş Liteni,4720,SV,181,RO,47.51068,26.53599 95542,Oraş Milişãuţi,4720,SV,181,RO,47.78361,26.01317 95583,Oraş Salcea,4720,SV,181,RO,47.64509,26.35842 95589,Oraş Siret,4720,SV,181,RO,47.94798,26.06875 95592,Oraş Solca,4720,SV,181,RO,47.70078,25.83488 95616,Oraş Vicovu De Sus,4720,SV,181,RO,47.92071,25.65842 95675,Ostra,4720,SV,181,RO,47.4,25.76667 96015,Păltinoasa,4720,SV,181,RO,47.55,25.95 95703,Panaci,4720,SV,181,RO,47.26667,25.38333 95997,Pâraie,4720,SV,181,RO,47.46299,26.06608 96020,Părhăuți,4720,SV,181,RO,47.71057,26.09012 96021,Părteştii de Jos,4720,SV,181,RO,47.63333,25.96667 96023,Pătrăuţi,4720,SV,181,RO,47.71667,26.2 95835,Plăvălari,4720,SV,181,RO,47.56832,26.35925 95817,Plopeni,4720,SV,181,RO,47.65874,26.33913 95833,Plutonița,4720,SV,181,RO,47.48081,25.79145 95878,Poiana Mărului,4720,SV,181,RO,47.41188,26.04077 95881,Poiana Stampei,4720,SV,181,RO,47.31667,25.13333 95892,Poieni-Solca,4720,SV,181,RO,47.68626,25.89374 95899,Pojorâta,4720,SV,181,RO,47.51667,25.45 95945,Prelipca,4720,SV,181,RO,47.61085,26.35414 95946,Preuteşti,4720,SV,181,RO,47.45,26.41667 95958,Probota,4720,SV,181,RO,47.37584,26.62415 95990,Putna,4720,SV,181,RO,47.86667,25.61667 96203,Rădăşeni,4720,SV,181,RO,47.46667,26.25 96201,Rădăuți,4720,SV,181,RO,47.85,25.91667 96177,Râşca,4720,SV,181,RO,47.36667,26.23333 96135,Roșcani,4720,SV,181,RO,47.53346,26.54909 96119,Rotunda,4720,SV,181,RO,47.48745,26.52466 96224,Sadova,4720,SV,181,RO,47.53333,25.5 96229,Salcea,4720,SV,181,RO,47.65,26.36667 97031,Şaru Dornei,4720,SV,181,RO,47.28333,25.35 96253,Satu Mare,4720,SV,181,RO,47.83333,26.01667 96264,Scheia,4720,SV,181,RO,47.65,26.23333 97119,Șerbănești,4720,SV,181,RO,47.81014,26.31922 97120,Șerbăuți,4720,SV,181,RO,47.82684,26.14009 96347,Siminicea,4720,SV,181,RO,47.7,26.4 96358,Siret,4720,SV,181,RO,47.95,26.06667 96362,Slatina,4720,SV,181,RO,47.45,26.01667 96404,Solca,4720,SV,181,RO,47.7,25.85 96406,Soloneț,4720,SV,181,RO,47.68682,26.03222 96421,Stamate,4720,SV,181,RO,47.60598,26.51698 96447,Straja,4720,SV,181,RO,47.91667,25.55 96462,Strâmtura,4720,SV,181,RO,47.58082,25.68144 96457,Stroiești,4720,SV,181,RO,47.61667,26.13333 96467,Stulpicani,4720,SV,181,RO,47.46667,25.76667 96488,Suceava,4720,SV,181,RO,47.63333,26.25 96490,Suceviţa,4720,SV,181,RO,47.78333,25.71667 97138,Țibeni,4720,SV,181,RO,47.81618,26.02438 106116,Todireşti,4720,SV,181,RO,47.7,26.03333 96638,Udeşti,4720,SV,181,RO,47.56667,26.41667 96644,Ulma,4720,SV,181,RO,47.88333,25.3 96697,Vadu Moldovei,4720,SV,181,RO,47.38333,26.36667 96741,Valea Moldovei,4720,SV,181,RO,47.46667,26.03333 96771,Vama,4720,SV,181,RO,47.56667,25.68333 96969,Văratec,4720,SV,181,RO,47.63988,26.40312 96777,Vatra Dornei,4720,SV,181,RO,47.35,25.36667 96778,Vatra Moldoviţei,4720,SV,181,RO,47.65,25.56667 96787,Vereşti,4720,SV,181,RO,47.6,26.43333 96800,Vicovu de Jos,4720,SV,181,RO,47.9,25.73333 96801,Vicovu de Sus,4720,SV,181,RO,47.93333,25.68333 96875,Voievodeasa,4720,SV,181,RO,47.79953,25.74939 96885,Voitinel,4720,SV,181,RO,47.88366,25.75735 96888,Volovăţ,4720,SV,181,RO,47.81667,25.9 96911,Vultureşti,4720,SV,181,RO,47.51667,26.45 96984,Zamostea,4720,SV,181,RO,47.86667,26.2 97006,Zvoriştea,4720,SV,181,RO,47.83333,26.28333 89925,Alexandria,4728,TR,181,RO,43.98333,25.33333 90473,Băbăiţa,4728,TR,181,RO,44.16667,25.38333 90478,Băcălești,4728,TR,181,RO,44.05997,24.81636 90023,Baciu,4728,TR,181,RO,44.33152,25.44429 90485,Băduleasa,4728,TR,181,RO,43.92286,24.98274 90037,Balaci,4728,TR,181,RO,44.35,24.91667 90529,Băneasa,4728,TR,181,RO,43.93975,24.94997 90466,Bâscoveni,4728,TR,181,RO,44.24444,25.35998 90078,Beciu,4728,TR,181,RO,44.00429,24.66571 90082,Beiu,4728,TR,181,RO,43.87352,25.45548 90121,Beuca,4728,TR,181,RO,44.252,24.96637 90157,Blejeşti,4728,TR,181,RO,44.3,25.46667 90189,Bogdana,4728,TR,181,RO,43.93333,25.08333 90246,Botoroaga,4728,TR,181,RO,44.14833,25.54472 90263,Bragadiru,4728,TR,181,RO,43.76667,25.51667 90318,Brânceni,4728,TR,181,RO,43.88333,25.4 90319,Brâncoveanca,4728,TR,181,RO,43.94075,24.69336 90398,Bujoreni,4728,TR,181,RO,44.11667,25.63333 90400,Bujoru,4728,TR,181,RO,43.71667,25.56667 90431,Buzescu,4728,TR,181,RO,44.01667,25.23333 93837,Călineşti,4728,TR,181,RO,44.08333,25.23333 93843,Călmăţuiu,4728,TR,181,RO,43.96667,24.86667 93844,Călmățuiu de Sus,4728,TR,181,RO,44.02632,24.8123 90564,Calomfirești,4728,TR,181,RO,43.91736,25.35801 90632,Cernetu,4728,TR,181,RO,43.90727,25.45688 90643,Cervenia,4728,TR,181,RO,43.83333,25.46667 90738,Ciuani,4728,TR,181,RO,44.23333,25.65 90754,Ciuperceni,4728,TR,181,RO,43.76667,24.95 91202,Comuna Băbăiţa,4728,TR,181,RO,44.13909,25.39156 90921,Comuna Balaci,4728,TR,181,RO,44.35188,24.90962 90946,Comuna Beciu,4728,TR,181,RO,44.01272,24.66163 90979,Comuna Beuca,4728,TR,181,RO,44.26595,24.97928 91002,Comuna Blejeşti,4728,TR,181,RO,44.30317,25.45269 91024,Comuna Bogdana,4728,TR,181,RO,43.9286,25.08358 91063,Comuna Botoroaga,4728,TR,181,RO,44.14997,25.55171 91074,Comuna Bragadiru,4728,TR,181,RO,43.76059,25.51984 91109,Comuna Brânceni,4728,TR,181,RO,43.87792,25.39711 91156,Comuna Bujoreni,4728,TR,181,RO,44.12054,25.65152 91157,Comuna Bujoru,4728,TR,181,RO,43.71092,25.56315 91179,Comuna Buzescu,4728,TR,181,RO,44.01081,25.22886 91573,Comuna Călineşti,4728,TR,181,RO,44.11002,25.21305 91560,Comuna Cãlmãţuiu,4728,TR,181,RO,43.96083,24.85612 91561,Comuna Cãlmãţuiu De Sus,4728,TR,181,RO,44.04404,24.81582 91300,Comuna Cervenia,4728,TR,181,RO,43.83585,25.4605 91351,Comuna Ciolăneşti,4728,TR,181,RO,44.31372,25.08333 91373,Comuna Ciuperceni,4728,TR,181,RO,43.75115,24.94397 91415,Comuna Conţeşti,4728,TR,181,RO,43.79183,25.4953 91450,Comuna Cosmeşti,4728,TR,181,RO,44.30661,25.38602 91513,Comuna Crângeni,4728,TR,181,RO,44.0137,24.80845 91514,Comuna Crângu,4728,TR,181,RO,43.8449,25.08121 91491,Comuna Crevenicu,4728,TR,181,RO,44.24508,25.57385 91624,Comuna Dideşti,4728,TR,181,RO,44.22331,24.88878 91642,Comuna Dobroteşti,4728,TR,181,RO,44.26466,24.88097 91669,Comuna Dracea,4728,TR,181,RO,43.87177,25.03182 91682,Comuna Drãcşenei,4728,TR,181,RO,44.20715,25.0037 91702,Comuna Drăgăneşti de Vede,4728,TR,181,RO,44.13081,25.0487 91703,Comuna Drăgăneşti-Vlaşca,4728,TR,181,RO,44.09517,25.54848 91808,Comuna Fântânele,4728,TR,181,RO,43.72104,25.29265 91793,Comuna Frăsinet,4728,TR,181,RO,44.18808,25.37818 91783,Comuna Frumoasa,4728,TR,181,RO,43.80298,25.46311 91803,Comuna Furculeşti,4728,TR,181,RO,43.86572,25.1398 91984,Comuna Gălăţeni,4728,TR,181,RO,44.22491,25.36466 91911,Comuna Gratia,4728,TR,181,RO,44.43382,25.44103 92093,Comuna Islaz,4728,TR,181,RO,43.75179,24.74381 92106,Comuna Izvoarele,4728,TR,181,RO,43.82717,25.39459 92172,Comuna Lisa,4728,TR,181,RO,43.7723,25.14919 92180,Comuna Liţa,4728,TR,181,RO,43.79545,24.82157 92200,Comuna Lunca,4728,TR,181,RO,43.85788,24.7861 92390,Comuna Măgura,4728,TR,181,RO,44.04054,25.3959 92396,Comuna Măldăeni,4728,TR,181,RO,44.12658,24.92327 92372,Comuna Mârzãneşti,4728,TR,181,RO,43.93154,25.4623 92248,Comuna Mavrodin,4728,TR,181,RO,44.03559,25.24088 92257,Comuna Mereni,4728,TR,181,RO,44.22879,25.64434 92350,Comuna Moşteni,4728,TR,181,RO,44.19787,25.50854 92426,Comuna Nanov,4728,TR,181,RO,43.99171,25.28894 92466,Comuna Năsturelu,4728,TR,181,RO,43.66634,25.43856 92427,Comuna Necşeşti,4728,TR,181,RO,44.26085,25.13225 92437,Comuna Nenciuleşti,4728,TR,181,RO,44.0386,25.18551 92497,Comuna Olteni,4728,TR,181,RO,44.18976,25.278 92506,Comuna Orbeasca,4728,TR,181,RO,44.11606,25.32708 92547,Comuna Peretu,4728,TR,181,RO,44.04372,25.09285 92573,Comuna Piatra,4728,TR,181,RO,43.81058,25.16777 92581,Comuna Pietroşani,4728,TR,181,RO,43.71364,25.63998 92597,Comuna Plopii Slăviţeşti,4728,TR,181,RO,43.96098,24.68525 92601,Comuna Plosca,4728,TR,181,RO,44.02338,25.1492 92618,Comuna Poeni,4728,TR,181,RO,44.43297,25.33868 92660,Comuna Poroschia,4728,TR,181,RO,43.92887,25.3576 92698,Comuna Purani,4728,TR,181,RO,44.36509,25.41322 92699,Comuna Putineiu,4728,TR,181,RO,43.91429,24.96969 92830,Comuna Rãdoieşti,4728,TR,181,RO,44.14377,25.15357 92848,Comuna Răsmireşti,4728,TR,181,RO,43.99981,25.57118 93084,Comuna Săceni,4728,TR,181,RO,44.2331,25.06073 92861,Comuna Saelele,4728,TR,181,RO,43.85274,24.73838 92864,Comuna Salcia,4728,TR,181,RO,43.94157,24.92663 93071,Comuna Sârbeni,4728,TR,181,RO,44.46667,25.38333 92897,Comuna Scrioaştea,4728,TR,181,RO,44.16453,24.95299 92899,Comuna Scurtu Mare,4728,TR,181,RO,44.35259,25.25895 92908,Comuna Seaca,4728,TR,181,RO,43.74933,25.07423 92918,Comuna Segarcea Vale,4728,TR,181,RO,43.82417,24.81422 92922,Comuna Sfinţeşti,4728,TR,181,RO,44.18824,25.10389 92930,Comuna Siliştea,4728,TR,181,RO,44.37398,25.35104 92934,Comuna Siliștea Gumești,4728,TR,181,RO,44.38028,25.01389 92959,Comuna Slobozia-Mândra,4728,TR,181,RO,43.91576,24.69914 92966,Comuna Smârdioasa,4728,TR,181,RO,43.83939,25.4419 92989,Comuna Stejaru,4728,TR,181,RO,44.17715,24.88208 93000,Comuna Storobăneasa,4728,TR,181,RO,43.87974,25.45622 93029,Comuna Suhaia,4728,TR,181,RO,43.73953,25.25291 93121,Comuna Talpa,4728,TR,181,RO,44.2807,25.30919 93248,Comuna Tătărăştii de Jos,4728,TR,181,RO,44.3696,25.19385 93249,Comuna Tătărăştii de Sus,4728,TR,181,RO,44.40857,25.13146 93575,Comuna Ţigăneşti,4728,TR,181,RO,43.90141,25.37804 93188,Comuna Traian,4728,TR,181,RO,43.7672,25.00494 93195,Comuna Trivalea-Moşteni,4728,TR,181,RO,44.262,25.24082 93196,Comuna Troianul,4728,TR,181,RO,44.00415,25.024 93253,Comuna Uda-Clocociov,4728,TR,181,RO,43.88385,24.71908 93445,Comuna Vârtoape,4728,TR,181,RO,44.19981,25.19797 93340,Comuna Vedea,4728,TR,181,RO,44.09436,25.07495 93359,Comuna Viişoara,4728,TR,181,RO,43.77985,25.1752 93371,Comuna Vităneşti,4728,TR,181,RO,43.99272,25.45246 93482,Comuna Zâmbreasca,4728,TR,181,RO,44.3035,24.99847 93596,Conţeşti,4728,TR,181,RO,43.8,25.48333 93653,Cosmeşti,4728,TR,181,RO,44.3,25.38333 93747,Crângeni,4728,TR,181,RO,44.03333,24.78333 93748,Crângu,4728,TR,181,RO,43.84611,25.0735 93712,Crevenicu,4728,TR,181,RO,44.24083,25.58861 93759,Cucueți,4728,TR,181,RO,44.18432,24.94826 93921,Deparați,4728,TR,181,RO,44.28116,25.22151 93935,Didești,4728,TR,181,RO,44.21667,24.88333 93950,Dobreni,4728,TR,181,RO,44.41667,25.11667 93965,Dobroteşti,4728,TR,181,RO,44.28333,24.88333 94009,Dracea,4728,TR,181,RO,43.84914,25.05194 94034,Drăcşani,4728,TR,181,RO,44.21667,24.98333 94035,Drăcșenei,4728,TR,181,RO,44.22676,24.98542 94060,Drăgăneşti de Vede,4728,TR,181,RO,44.13333,25.05 94062,Drăgăneşti-Vlaşca,4728,TR,181,RO,44.10139,25.59806 94040,Drăghinești,4728,TR,181,RO,44.43093,25.42608 94072,Dudu,4728,TR,181,RO,43.97897,24.67786 94237,Fântânele,4728,TR,181,RO,43.72104,25.29265 94218,Frăsinet,4728,TR,181,RO,44.18038,25.38238 94207,Frumoasa,4728,TR,181,RO,43.8,25.46667 94233,Furculești,4728,TR,181,RO,43.87202,25.14285 94507,Gălăţeni,4728,TR,181,RO,44.21667,25.35 94512,Gărăgău,4728,TR,181,RO,44.23186,25.1892 94401,Gratia,4728,TR,181,RO,44.43333,25.45 94473,Guruieni,4728,TR,181,RO,44.05845,25.39656 94691,Islaz,4728,TR,181,RO,43.72006,24.76436 94711,Izvoarele,4728,TR,181,RO,43.81667,25.38333 94888,Lăceni,4728,TR,181,RO,44.08466,25.3327 94808,Lisa,4728,TR,181,RO,43.8,25.13333 94826,Liţa,4728,TR,181,RO,43.8,24.81667 94860,Lunca,4728,TR,181,RO,43.83333,24.76667 95239,Măgura,4728,TR,181,RO,44.03333,25.4 95251,Măldăeni,4728,TR,181,RO,44.11667,24.93333 95221,Mârzăneşti,4728,TR,181,RO,43.93333,25.46667 94937,Mavrodin,4728,TR,181,RO,44.03333,25.25 94953,Merenii de Jos,4728,TR,181,RO,44.23214,25.64346 94954,Merenii de Sus,4728,TR,181,RO,44.22839,25.62103 94960,Merișani,4728,TR,181,RO,44.2519,24.8755 95065,Moldoveni,4728,TR,181,RO,43.77772,24.72802 95096,Moșteni,4728,TR,181,RO,44.19787,25.50854 95108,Municipiul Alexandria,4728,TR,181,RO,43.96967,25.33272 95173,Municipiul Roșiorii de Vede,4728,TR,181,RO,44.11368,24.98722 95190,Municipiul Turnu Magurele,4728,TR,181,RO,43.74646,24.86893 95302,Nanov,4728,TR,181,RO,44.0,25.3 95375,Năsturelu,4728,TR,181,RO,43.66667,25.46667 95378,Năvodari,4728,TR,181,RO,43.74208,25.0941 95304,Necşeşti,4728,TR,181,RO,44.25,25.15 95327,Nenciulești,4728,TR,181,RO,44.03486,25.20061 95429,Olteanca,4728,TR,181,RO,43.83047,24.79597 95432,Olteni,4728,TR,181,RO,44.18333,25.28333 95618,Oraş Videle,4728,TR,181,RO,44.2766,25.57844 95623,Oraş Zimnicea,4728,TR,181,RO,43.6566,25.36603 95653,Orbeasca de Jos,4728,TR,181,RO,44.12177,25.32952 95654,Orbeasca de Sus,4728,TR,181,RO,44.15,25.31667 95727,Peretu,4728,TR,181,RO,44.05,25.08333 95734,Perii Broșteni,4728,TR,181,RO,44.20336,25.26377 95770,Piatra,4728,TR,181,RO,43.81667,25.16667 95789,Pietroşani,4728,TR,181,RO,43.71383,25.64409 95808,Pleașov,4728,TR,181,RO,43.84971,24.74886 95820,Plopii Slăviţeştí,4728,TR,181,RO,43.96667,24.68333 95827,Plosca,4728,TR,181,RO,44.03333,25.13333 95853,Poeni,4728,TR,181,RO,44.4,25.33333 95860,Poiana,4728,TR,181,RO,43.74192,24.95244 95917,Poporogi,4728,TR,181,RO,44.36667,25.18333 95921,Poroschia,4728,TR,181,RO,43.93333,25.36667 95965,Prundu,4728,TR,181,RO,43.82394,24.69196 95983,Purani,4728,TR,181,RO,43.97989,25.43656 95989,Putineiu,4728,TR,181,RO,43.9,24.96667 96198,Rădoiești-Deal,4728,TR,181,RO,44.15,25.13333 96207,Răsmireşti,4728,TR,181,RO,43.98333,25.55 96141,Roșiorii de Vede,4728,TR,181,RO,44.11667,24.98333 105995,Săceni,4728,TR,181,RO,44.23333,25.06667 96227,Saelele,4728,TR,181,RO,43.85577,24.72789 96230,Salcia,4728,TR,181,RO,43.95,24.91667 105983,Sârbeni,4728,TR,181,RO,44.46667,25.38333 96284,Scrioaştea,4728,TR,181,RO,44.15,24.95 96290,Scurtu Mare,4728,TR,181,RO,44.35,25.26667 96299,Seaca,4728,TR,181,RO,43.75,25.06667 96320,Segarcea Vale,4728,TR,181,RO,43.81667,24.8 96321,Segarcea-Deal,4728,TR,181,RO,43.82548,24.8402 96327,Sfinţeşti,4728,TR,181,RO,44.18333,25.1 96339,Siliştea,4728,TR,181,RO,44.38333,25.35 96344,Siliștea Gumești,4728,TR,181,RO,44.38333,25.0 96379,Slobozia-Mândra,4728,TR,181,RO,43.91667,24.7 96392,Smârdioasa,4728,TR,181,RO,43.85,25.43333 96394,Socetu,4728,TR,181,RO,44.19502,24.85421 96420,Spătărei,4728,TR,181,RO,43.88848,25.1365 96428,Stejaru,4728,TR,181,RO,44.18333,24.88333 96446,Storobăneasa,4728,TR,181,RO,43.88333,25.45 96495,Suhaia,4728,TR,181,RO,43.73333,25.25 106052,Talpa-Ogrăzile,4728,TR,181,RO,44.28726,25.29328 106053,Talpa-Trivalea,4728,TR,181,RO,44.28333,25.28333 96594,Târnava,4728,TR,181,RO,44.1444,25.56347 96623,Tătărăștii de Jos,4728,TR,181,RO,44.37501,25.17721 96624,Tătărăștii de Sus,4728,TR,181,RO,44.40768,25.12192 106070,Tecuci,4728,TR,181,RO,44.34179,24.85966 106079,Teleormanu,4728,TR,181,RO,43.96271,25.45876 97107,Ţigăneşti,4728,TR,181,RO,43.9,25.36667 106148,Traian,4728,TR,181,RO,43.76667,25.0 106160,Trivalea-Moşteni,4728,TR,181,RO,44.26667,25.23333 106161,Troianul,4728,TR,181,RO,44.0,25.0 106167,Tudor Vladimirescu,4728,TR,181,RO,43.94761,24.90616 96565,Turnu Măgurele,4728,TR,181,RO,43.7469,24.86846 96636,Uda-Clocociov,4728,TR,181,RO,43.88791,24.71437 96637,Uda-Paciurea,4728,TR,181,RO,43.87979,24.72379 96639,Udupu,4728,TR,181,RO,44.39657,25.14488 96716,Valea Cireșului,4728,TR,181,RO,44.16699,25.56437 96746,Valea Părului,4728,TR,181,RO,43.91727,25.46589 96945,Vârtoapele de Jos,4728,TR,181,RO,44.18333,25.2 96946,Vârtoapele de Sus,4728,TR,181,RO,44.19182,25.20025 96781,Vedea,4728,TR,181,RO,44.08333,25.06667 96807,Videle,4728,TR,181,RO,44.27806,25.52444 96822,Viişoara,4728,TR,181,RO,43.78333,25.16667 96841,Vităneşti,4728,TR,181,RO,44.0,25.41667 97007,Zâmbreasca,4728,TR,181,RO,44.31667,24.98333 96995,Zimnicea,4728,TR,181,RO,43.65638,25.36454 96996,Zimnicele,4728,TR,181,RO,43.66126,25.41291 90024,Bacova,4748,TM,181,RO,45.6641,21.55238 90044,Balinţ,4748,TM,181,RO,45.8125,21.85361 90055,Banloc,4748,TM,181,RO,45.38742,21.13581 90056,Bara,4748,TM,181,RO,45.89472,21.87194 90452,Bârna,4748,TM,181,RO,45.71667,22.05 90074,Beba Veche,4748,TM,181,RO,46.13333,20.31667 90077,Becicherecu Mic,4748,TM,181,RO,45.82917,21.05139 90089,Belinţ,4748,TM,181,RO,45.755,21.76028 90101,Beregsău Mare,4748,TM,181,RO,45.75921,21.02666 90120,Bethausen,4748,TM,181,RO,45.83306,21.95278 90137,Biled,4748,TM,181,RO,45.88639,20.95889 90141,Birda,4748,TM,181,RO,45.42996,21.34359 90186,Bogda,4748,TM,181,RO,45.97833,21.5725 90212,Boldur,4748,TM,181,RO,45.69417,21.77667 90297,Brestovăț,4748,TM,181,RO,45.87342,21.68201 90361,Bucovăț,4748,TM,181,RO,45.75569,21.38324 90402,Bulgăruș,4748,TM,181,RO,45.91947,20.82219 90432,Buziaş,4748,TM,181,RO,45.64917,21.60361 90574,Carani,4748,TM,181,RO,45.91095,21.15686 93870,Cărpiniş,4748,TM,181,RO,45.78722,20.90417 90613,Cenad,4748,TM,181,RO,46.13333,20.58333 90615,Cenei,4748,TM,181,RO,45.71583,20.90389 90652,Checea,4748,TM,181,RO,45.75298,20.83596 90659,Chevereşu Mare,4748,TM,181,RO,45.66694,21.49083 90690,Chișoda,4748,TM,181,RO,45.7038,21.21437 90693,Ciacova,4748,TM,181,RO,45.50806,21.12861 90800,Colonia Fabricii,4748,TM,181,RO,45.7662,22.31463 90814,Comloşu Mare,4748,TM,181,RO,45.89056,20.62722 90926,Comuna Balinţ,4748,TM,181,RO,45.8229,21.85841 90934,Comuna Banloc,4748,TM,181,RO,45.38603,21.13203 90935,Comuna Bara,4748,TM,181,RO,45.91096,21.9044 91189,Comuna Bârna,4748,TM,181,RO,45.71642,22.0653 90943,Comuna Beba Veche,4748,TM,181,RO,46.13503,20.36289 90945,Comuna Becicherecu Mic,4748,TM,181,RO,45.83475,21.05195 90953,Comuna Belinţ,4748,TM,181,RO,45.77023,21.7755 90978,Comuna Bethausen,4748,TM,181,RO,45.82505,21.96054 90990,Comuna Biled,4748,TM,181,RO,45.8876,20.96214 90993,Comuna Birda,4748,TM,181,RO,45.41265,21.33733 91021,Comuna Bogda,4748,TM,181,RO,45.97025,21.56964 91040,Comuna Boldur,4748,TM,181,RO,45.70016,21.76225 91095,Comuna Brestovăţ,4748,TM,181,RO,45.87818,21.67986 91135,Comuna Bucovăţ,4748,TM,181,RO,45.75309,21.40277 91590,Comuna Cărpiniş,4748,TM,181,RO,45.80603,20.91452 91280,Comuna Cenad,4748,TM,181,RO,46.13371,20.58001 91282,Comuna Cenei,4748,TM,181,RO,45.72608,20.92561 91308,Comuna Checea,4748,TM,181,RO,45.75298,20.83596 91310,Comuna Chevereşu Mare,4748,TM,181,RO,45.6623,21.47888 91409,Comuna Comloşu Mare,4748,TM,181,RO,45.87549,20.62938 91478,Comuna Coşteiu,4748,TM,181,RO,45.75242,21.88756 91494,Comuna Criciova,4748,TM,181,RO,45.64454,22.0626 91528,Comuna Curtea,4748,TM,181,RO,45.84453,22.32658 91604,Comuna Darova,4748,TM,181,RO,45.63081,21.76709 91614,Comuna Denta,4748,TM,181,RO,45.3595,21.28331 91707,Comuna Dudeştii Noi,4748,TM,181,RO,45.83989,21.10215 91708,Comuna Dudeştii Vechi,4748,TM,181,RO,46.08562,20.44521 91710,Comuna Dumbrava,4748,TM,181,RO,45.81746,22.1255 91717,Comuna Dumbrăviţa,4748,TM,181,RO,45.80011,21.24648 91811,Comuna Fârdea,4748,TM,181,RO,45.74895,22.19779 91760,Comuna Fibiş,4748,TM,181,RO,45.9728,21.42355 91775,Comuna Foeni,4748,TM,181,RO,45.48613,20.8781 91834,Comuna Gavojdia,4748,TM,181,RO,45.61284,22.02471 91854,Comuna Ghilad,4748,TM,181,RO,45.46633,21.06467 91863,Comuna Ghiroda,4748,TM,181,RO,45.78494,21.30245 91864,Comuna Ghizela,4748,TM,181,RO,45.82641,21.75048 91865,Comuna Giarmata,4748,TM,181,RO,45.84218,21.28918 91866,Comuna Giera,4748,TM,181,RO,45.4206,20.94696 91871,Comuna Giroc,4748,TM,181,RO,45.7002,21.22641 91875,Comuna Giulvăz,4748,TM,181,RO,45.52522,20.98501 91908,Comuna Gottlob,4748,TM,181,RO,45.93916,20.68384 92062,Comuna Iecea Mare,4748,TM,181,RO,45.85074,20.8931 92114,Comuna Jamu Mare,4748,TM,181,RO,45.26768,21.44318 92116,Comuna Jebel,4748,TM,181,RO,45.5602,21.21805 92150,Comuna Lenauheim,4748,TM,181,RO,45.89042,20.78901 92163,Comuna Liebling,4748,TM,181,RO,45.57121,21.33526 92178,Comuna Livezile,4748,TM,181,RO,45.40994,21.06179 92185,Comuna Lovrin,4748,TM,181,RO,45.96943,20.76953 92404,Comuna Mănăştiur,4748,TM,181,RO,45.86808,22.05329 92242,Comuna Margina,4748,TM,181,RO,45.86159,22.27233 92249,Comuna Maşloc,4748,TM,181,RO,45.99637,21.45484 92331,Comuna Moraviţa,4748,TM,181,RO,45.28025,21.2557 92348,Comuna Moşniţa Nouã,4748,TM,181,RO,45.71397,21.32403 92460,Comuna Nădrag,4748,TM,181,RO,45.65064,22.15383 92450,Comuna Niţchidorf,4748,TM,181,RO,45.57379,21.52266 92488,Comuna Ohaba Lungă,4748,TM,181,RO,45.91812,21.99094 92514,Comuna Orţişoara,4748,TM,181,RO,45.95206,21.2237 92521,Comuna Otelec,4748,TM,181,RO,45.59079,20.85648 92715,Comuna Pădureni,4748,TM,181,RO,45.60039,21.21773 92541,Comuna Parţa,4748,TM,181,RO,45.62888,21.13877 92545,Comuna Peciu Nou,4748,TM,181,RO,45.6207,21.00816 92548,Comuna Periam,4748,TM,181,RO,46.04394,20.87517 92558,Comuna Pesac,4748,TM,181,RO,45.9959,20.83522 92579,Comuna Pietroasa,4748,TM,181,RO,45.82012,22.41805 92589,Comuna Pişchia,4748,TM,181,RO,45.9046,21.40241 92734,Comuna Racoviţa,4748,TM,181,RO,45.70441,21.63935 92766,Comuna Remetea Mare,4748,TM,181,RO,45.81036,21.39893 93086,Comuna Săcălaz,4748,TM,181,RO,45.75681,21.03903 92856,Comuna Sacoşu Turcesc,4748,TM,181,RO,45.63526,21.39828 93495,Comuna Şag,4748,TM,181,RO,45.65184,21.16933 93048,Comuna Sânandrei,4748,TM,181,RO,45.86677,21.18623 93498,Comuna Şandra,4748,TM,181,RO,45.91878,20.87801 93058,Comuna Sânmihaiu Român,4748,TM,181,RO,45.71002,21.08352 93064,Comuna Sânpetru Mare,4748,TM,181,RO,46.07994,20.80148 92874,Comuna Saravale,4748,TM,181,RO,46.06929,20.74085 92879,Comuna Satchinez,4748,TM,181,RO,45.93933,21.07597 92911,Comuna Secaş,4748,TM,181,RO,45.90501,21.80832 93557,Comuna Ştiuca,4748,TM,181,RO,45.56283,21.97988 93142,Comuna Teremia Mare,4748,TM,181,RO,45.95401,20.52908 93169,Comuna Tomeşti,4748,TM,181,RO,45.7667,22.30974 93170,Comuna Tomnatic,4748,TM,181,RO,45.98857,20.66186 93179,Comuna Topolovãţu Mare,4748,TM,181,RO,45.78363,21.63784 93182,Comuna Tormac,4748,TM,181,RO,45.5214,21.47648 93190,Comuna Traian Vuia,4748,TM,181,RO,45.78754,22.04595 93256,Comuna Uivar,4748,TM,181,RO,45.65085,20.90281 93457,Comuna Vălcani,4748,TM,181,RO,46.00357,20.39865 93334,Comuna Variaş,4748,TM,181,RO,46.01491,21.01965 93351,Comuna Victor Vlad Delamarina,4748,TM,181,RO,45.61227,21.87572 93401,Comuna Voiteg,4748,TM,181,RO,45.48472,21.26977 93693,Coşteiu,4748,TM,181,RO,45.74111,21.84917 93716,Criciova,4748,TM,181,RO,45.63333,22.06667 93773,Curtea,4748,TM,181,RO,45.81667,22.3 93895,Darova,4748,TM,181,RO,45.642,21.77333 93896,Darova Nouă,4748,TM,181,RO,45.63333,21.76667 93920,Denta,4748,TM,181,RO,45.35389,21.24917 93927,Deta,4748,TM,181,RO,45.38889,21.22444 94071,Dudeștii Noi,4748,TM,181,RO,45.83989,21.10215 94070,Dudeştii Vechi,4748,TM,181,RO,46.05,20.48333 94075,Dumbrava,4748,TM,181,RO,45.81667,22.11667 94090,Dumbrăviţa,4748,TM,181,RO,45.79694,21.2425 94251,Făget,4748,TM,181,RO,45.85,22.18333 94244,Fârdea,4748,TM,181,RO,45.73333,22.16667 94163,Fibiș,4748,TM,181,RO,45.9728,21.42355 94194,Foeni,4748,TM,181,RO,45.49861,20.87583 94513,Gătaia,4748,TM,181,RO,45.43111,21.43 94284,Gavojdia,4748,TM,181,RO,45.61667,22.01667 94287,Gelu,4748,TM,181,RO,46.00591,21.06002 94320,Ghilad,4748,TM,181,RO,45.46501,21.13824 94337,Ghiroda,4748,TM,181,RO,45.76389,21.30028 94339,Ghizela,4748,TM,181,RO,45.82417,21.73722 94340,Giarmata,4748,TM,181,RO,45.83833,21.31083 94341,Giarmata-Vii,4748,TM,181,RO,45.7996,21.30026 94342,Giera,4748,TM,181,RO,45.40722,20.99222 94347,Giroc,4748,TM,181,RO,45.69417,21.23583 94351,Giulvăz,4748,TM,181,RO,45.54889,20.98444 94395,Gottlob,4748,TM,181,RO,45.936,20.71168 94398,Grabăț,4748,TM,181,RO,45.87861,20.74238 94543,Hodoni,4748,TM,181,RO,45.90646,21.08851 94639,Iecea Mare,4748,TM,181,RO,45.85074,20.8931 94640,Iecea Mică,4748,TM,181,RO,45.82147,20.92322 94652,Igriș,4748,TM,181,RO,46.11313,20.78496 94701,Izvin,4748,TM,181,RO,45.80034,21.46066 94722,Jamu Mare,4748,TM,181,RO,45.25417,21.41694 94724,Jebel,4748,TM,181,RO,45.55556,21.21361 94738,Jimbolia,4748,TM,181,RO,45.79139,20.71722 94777,Lenauheim,4748,TM,181,RO,45.87194,20.79944 94794,Liebling,4748,TM,181,RO,45.5775,21.32167 94824,Livezile,4748,TM,181,RO,45.39026,21.05794 94834,Lovrin,4748,TM,181,RO,45.96806,20.77028 94846,Lugoj,4748,TM,181,RO,45.68861,21.90306 95263,Mănăştiur,4748,TM,181,RO,45.81667,22.06667 94929,Margina,4748,TM,181,RO,45.85841,22.26654 94941,Maşloc,4748,TM,181,RO,45.99806,21.44972 95070,Moraviţa,4748,TM,181,RO,45.25583,21.27028 95090,Moşniţa Nouă,4748,TM,181,RO,45.71722,21.32528 95095,Moșnița Veche,4748,TM,181,RO,45.73549,21.33396 95151,Municipiul Lugoj,4748,TM,181,RO,45.67678,21.95988 95187,Municipiul Timişoara,4748,TM,181,RO,45.75641,21.22974 95368,Nădrag,4748,TM,181,RO,45.65,22.18333 95331,Nerău,4748,TM,181,RO,45.96929,20.5607 95352,Niţchidorf,4748,TM,181,RO,45.58333,21.53333 95418,Ohaba Lungă,4748,TM,181,RO,45.9074,21.98535 95478,Oraş Buziaş,4748,TM,181,RO,45.64035,21.58934 95493,Oraş Ciacova,4748,TM,181,RO,45.53242,21.10558 95508,Oraş Deta,4748,TM,181,RO,45.40518,21.24829 95521,Oraş Fãget,4748,TM,181,RO,45.8577,22.1761 95527,Oraş Gãtaia,4748,TM,181,RO,45.37402,21.40796 95536,Oraş Jimbolia,4748,TM,181,RO,45.79226,20.71997 95577,Oraş Recaş,4748,TM,181,RO,45.82646,21.52629 95596,Oraş Sânnicolau Mare,4748,TM,181,RO,46.07292,20.62281 95670,Orţişoara,4748,TM,181,RO,45.96361,21.19833 95681,Otelec,4748,TM,181,RO,45.61478,20.84952 96008,Pădureni,4748,TM,181,RO,45.60039,21.21773 95716,Parța,4748,TM,181,RO,45.62888,21.13877 95724,Peciu Nou,4748,TM,181,RO,45.60639,21.05778 95728,Periam,4748,TM,181,RO,46.05,20.86667 95743,Pesac,4748,TM,181,RO,45.9959,20.83522 95783,Pietroasa,4748,TM,181,RO,45.83333,22.4 95804,Pişchia,4748,TM,181,RO,45.90306,21.33722 96184,Răchita,4748,TM,181,RO,45.83827,22.10615 96043,Racoviţa,4748,TM,181,RO,45.69833,21.63583 96067,Recaş,4748,TM,181,RO,45.79889,21.50083 96084,Remetea Mare,4748,TM,181,RO,45.77944,21.37611 106000,Săcălaz,4748,TM,181,RO,45.75833,21.11222 96221,Sacoșu Mare,4748,TM,181,RO,45.58503,21.72958 96220,Sacoşu Turcesc,4748,TM,181,RO,45.65194,21.42889 97027,Şag,4748,TM,181,RO,45.64861,21.17556 96522,Sânandrei,4748,TM,181,RO,45.85306,21.16806 97030,Şandra,4748,TM,181,RO,45.925,20.89028 96535,Sânmihaiu Român,4748,TM,181,RO,45.70444,21.08889 96540,Sânnicolau Mare,4748,TM,181,RO,46.08333,20.63333 96545,Sânpetru Mare,4748,TM,181,RO,46.04515,20.81834 96245,Saravale,4748,TM,181,RO,46.06929,20.74085 96252,Satchinez,4748,TM,181,RO,45.9375,21.04056 96285,Sculia,4748,TM,181,RO,45.44429,21.43225 96305,Secaş,4748,TM,181,RO,45.885,21.81917 97089,Ştiuca,4748,TM,181,RO,45.57139,21.97667 106085,Teremia Mare,4748,TM,181,RO,45.93528,20.525 106102,Timişoara,4748,TM,181,RO,45.75372,21.22571 106120,Tomeşti,4748,TM,181,RO,45.78333,22.3 106124,Tomnatic,4748,TM,181,RO,45.98857,20.66186 106137,Topolovăţu Mare,4748,TM,181,RO,45.77389,21.61889 106140,Tormac,4748,TM,181,RO,45.52083,21.49361 106151,Traian Vuia,4748,TM,181,RO,45.8,22.06667 96642,Uivar,4748,TM,181,RO,45.65806,20.90583 96684,Urseni,4748,TM,181,RO,45.69269,21.30993 96692,Utvin,4748,TM,181,RO,45.71298,21.13011 96958,Vălcani,4748,TM,181,RO,46.00357,20.39865 96773,Variaş,4748,TM,181,RO,46.01667,20.95 96802,Victor Vlad Delamarina,4748,TM,181,RO,45.64056,21.89278 96883,Voiteg,4748,TM,181,RO,45.46889,21.23917 89897,Agighiol,4727,TL,181,RO,45.03362,28.87628 90018,Babadag,4727,TL,181,RO,44.9,28.71667 90027,Baia,4727,TL,181,RO,44.71667,28.66667 90081,Beidaud,4727,TL,181,RO,44.71667,28.56667 90124,Beștepe,4727,TL,181,RO,45.09241,29.01478 90557,C.A. Rosetti,4727,TL,181,RO,45.3,29.56667 90579,Carcaliu,4727,TL,181,RO,45.18333,28.15 90583,Casimcea,4727,TL,181,RO,44.73333,28.36667 90588,Cataloi,4727,TL,181,RO,45.09581,28.72856 90600,Ceamurlia de Jos,4727,TL,181,RO,44.73333,28.71667 90601,Ceamurlia de Sus,4727,TL,181,RO,44.76373,28.60881 90604,Ceatalchioi,4727,TL,181,RO,45.28333,28.78333 90628,Cerna,4727,TL,181,RO,45.08333,28.31667 90666,Chilia Veche,4727,TL,181,RO,45.41667,29.28333 90743,Ciucurova,4727,TL,181,RO,44.93333,28.48333 90917,Comuna Baia,4727,TL,181,RO,44.75708,28.64028 90948,Comuna Beidaud,4727,TL,181,RO,44.72132,28.53265 90981,Comuna Beştepe,4727,TL,181,RO,45.11243,29.02425 91250,Comuna C.A. Rosetti,4727,TL,181,RO,45.30207,29.57289 91261,Comuna Carcaliu,4727,TL,181,RO,45.18688,28.1487 91263,Comuna Casimcea,4727,TL,181,RO,44.76276,28.33156 91272,Comuna Ceamurlia de Jos,4727,TL,181,RO,44.73731,28.75115 91274,Comuna Ceatalchioi,4727,TL,181,RO,45.27904,28.78323 91291,Comuna Cerna,4727,TL,181,RO,45.04007,28.31668 91314,Comuna Chilia Veche,4727,TL,181,RO,45.37799,29.21511 91365,Comuna Ciucurova,4727,TL,181,RO,44.91355,28.47111 91504,Comuna Crişan,4727,TL,181,RO,45.16093,29.34258 91732,Comuna Dăeni,4727,TL,181,RO,44.84533,28.13218 91664,Comuna Dorobanţu,4727,TL,181,RO,44.94874,28.30073 91782,Comuna Frecăţei,4727,TL,181,RO,45.11808,28.64492 91915,Comuna Greci,4727,TL,181,RO,45.19132,28.23854 91918,Comuna Grindu,4727,TL,181,RO,45.40829,28.20031 91991,Comuna Hamcearca,4727,TL,181,RO,45.11559,28.39383 92018,Comuna Horia,4727,TL,181,RO,45.03655,28.45947 92048,Comuna I.C.Brãtianu,4727,TL,181,RO,45.40648,28.05332 92107,Comuna Izvoarele,4727,TL,181,RO,45.03932,28.53351 92122,Comuna Jijila,4727,TL,181,RO,45.32554,28.1571 92135,Comuna Jurilovca,4727,TL,181,RO,44.77261,28.86906 92208,Comuna Luncaviţa,4727,TL,181,RO,45.28653,28.30029 92229,Comuna Mahmudia,4727,TL,181,RO,45.08582,29.08775 92232,Comuna Maliuc,4727,TL,181,RO,45.1833,29.04828 92271,Comuna Mihai Bravu,4727,TL,181,RO,44.95974,28.65504 92275,Comuna Mihail Kogălniceanu,4727,TL,181,RO,45.02225,28.72861 92362,Comuna Murighiol,4727,TL,181,RO,45.02504,29.15177 92424,Comuna Nalbant,4727,TL,181,RO,45.04119,28.59827 92446,Comuna Niculiţel,4727,TL,181,RO,45.18251,28.48139 92457,Comuna Nufăru,4727,TL,181,RO,45.14333,28.92452 92519,Comuna Ostrov,4727,TL,181,RO,44.91052,28.1464 92537,Comuna Pardina,4727,TL,181,RO,45.3078,28.95691 92542,Comuna Peceneaga,4727,TL,181,RO,45.00849,28.14872 92875,Comuna Sarichioi,4727,TL,181,RO,44.92129,28.8187 92924,Comuna Sfântu Gheorghe,4727,TL,181,RO,44.89654,29.59357 92949,Comuna Slava Cercheză,4727,TL,181,RO,44.87578,28.58134 92965,Comuna Smârdan,4727,TL,181,RO,45.28462,28.00599 92976,Comuna Somova,4727,TL,181,RO,45.18861,28.65673 92988,Comuna Stejaru,4727,TL,181,RO,44.78528,28.53996 93178,Comuna Topolog,4727,TL,181,RO,44.86083,28.3432 93211,Comuna Turcoaia,4727,TL,181,RO,45.10923,28.18806 93451,Comuna Văcăreni,4727,TL,181,RO,45.32463,28.19504 93319,Comuna Valea Nucarilor,4727,TL,181,RO,45.03206,28.91994 93326,Comuna Valea Teilor,4727,TL,181,RO,45.1115,28.48801 93733,Crişan,4727,TL,181,RO,44.96667,29.46667 94116,Dăeni,4727,TL,181,RO,44.83333,28.11667 94000,Dorobanţu,4727,TL,181,RO,44.95,28.26667 94142,Enisala,4727,TL,181,RO,44.87956,28.81872 94204,Frecăţei,4727,TL,181,RO,45.1,28.66667 94283,Garvăn,4727,TL,181,RO,45.3471,28.16187 94409,Greci,4727,TL,181,RO,45.18333,28.23333 94413,Grindu,4727,TL,181,RO,45.4,28.21667 94521,Hamcearca,4727,TL,181,RO,45.11667,28.36667 94562,Horia,4727,TL,181,RO,45.01667,28.45 94611,I. C. Brătianu,4727,TL,181,RO,45.40581,28.05381 94629,Iazurile,4727,TL,181,RO,45.02162,28.94281 94688,Isaccea,4727,TL,181,RO,45.26667,28.46667 94708,Izvoarele,4727,TL,181,RO,45.03333,28.53333 94735,Jijila,4727,TL,181,RO,45.3,28.15 94755,Jurilovca,4727,TL,181,RO,44.76667,28.86667 94857,Lunca,4727,TL,181,RO,44.73288,28.77495 94876,Luncaviţa,4727,TL,181,RO,45.28333,28.26667 95229,Măcin,4727,TL,181,RO,45.24371,28.13564 94906,Mahmudia,4727,TL,181,RO,45.08333,29.08333 94911,Malcoci,4727,TL,181,RO,45.13851,28.88824 94912,Maliuc,4727,TL,181,RO,45.17678,29.11334 94975,Mihai Bravu,4727,TL,181,RO,44.95,28.65 94982,Mihail Kogălniceanu,4727,TL,181,RO,45.03333,28.73333 95007,Mineri,4727,TL,181,RO,45.16472,28.71573 95188,Municipiul Tulcea,4727,TL,181,RO,45.18325,28.79298 95208,Murighiol,4727,TL,181,RO,45.03333,29.16667 95300,Nalbant,4727,TL,181,RO,45.05,28.61667 95335,Nicolae Bălcescu,4727,TL,181,RO,44.99714,28.58757 95343,Niculiţel,4727,TL,181,RO,45.18333,28.48333 95363,Nufăru,4727,TL,181,RO,45.15,28.91667 95453,Oraş Babadag,4727,TL,181,RO,44.89092,28.71858 95535,Oraş Isaccea,4727,TL,181,RO,45.269,28.40446 95545,Oraş Mãcin,4727,TL,181,RO,45.24736,28.1383 95594,Oraş Sulina,4727,TL,181,RO,45.15608,29.65197 95677,Ostrov,4727,TL,181,RO,44.93333,28.15 95711,Pardina,4727,TL,181,RO,45.3,28.96667 95720,Peceneaga,4727,TL,181,RO,45.01667,28.13333 96037,Rachelu,4727,TL,181,RO,45.28667,28.32349 106010,Sălcioara,4727,TL,181,RO,44.76667,28.88333 96246,Sarichioi,4727,TL,181,RO,44.95,28.85 96328,Sfântu Gheorghe,4727,TL,181,RO,44.896,29.59294 96364,Slava Cercheză,4727,TL,181,RO,44.90128,28.54753 96365,Slava Rusă,4727,TL,181,RO,44.85029,28.60557 96391,Smârdan,4727,TL,181,RO,45.2867,28.00368 96409,Somova,4727,TL,181,RO,45.18333,28.66667 96426,Stejaru,4727,TL,181,RO,44.76667,28.55 96499,Sulina,4727,TL,181,RO,45.15564,29.65403 106135,Topolog,4727,TL,181,RO,44.88333,28.36667 106147,Traian,4727,TL,181,RO,45.02876,28.23518 106173,Tulcea,4727,TL,181,RO,45.1787,28.80501 96556,Turcoaia,4727,TL,181,RO,45.11667,28.18333 96557,Turda,4727,TL,181,RO,44.97501,28.62402 96951,Văcăreni,4727,TL,181,RO,45.32415,28.19512 96744,Valea Nucarilor,4727,TL,181,RO,45.03333,28.93333 96759,Valea Teilor,4727,TL,181,RO,45.1115,28.48801 96986,Zebil,4727,TL,181,RO,44.946,28.76873 89944,Alunu,4757,VL,181,RO,45.01667,23.81667 89951,Amărăşti,4757,VL,181,RO,44.76667,24.15 90470,Băbeni,4757,VL,181,RO,44.96667,24.23333 90471,Băbeni-Oltețu,4757,VL,181,RO,44.61404,23.97798 90490,Băile Govora,4757,VL,181,RO,45.08333,24.18333 90492,Băile Olăneşti,4757,VL,181,RO,45.2,24.23333 90505,Bălceşti,4757,VL,181,RO,44.61667,23.95 90540,Bărbăteşti,4757,VL,181,RO,45.18333,24.11667 90070,Batârăşti,4757,VL,181,RO,44.81667,24.15 90095,Berbeşti,4757,VL,181,RO,44.98333,23.88333 90110,Berislăveşti,4757,VL,181,RO,45.25,24.41667 90150,Bistrița,4757,VL,181,RO,45.18612,24.0401 90181,Bodești,4757,VL,181,RO,45.14167,24.11549 90206,Boişoara,4757,VL,181,RO,45.43333,24.38333 90303,Brezoi,4757,VL,181,RO,45.33797,24.24863 90380,Budeşti,4757,VL,181,RO,45.05,24.38333 90399,Bujoreni,4757,VL,181,RO,45.13333,24.35 90408,Buneşti,4757,VL,181,RO,45.11667,24.18333 93790,Câinenii Mici,4757,VL,181,RO,45.48333,24.3 93835,Călimăneşti,4757,VL,181,RO,45.23333,24.33333 93836,Călina,4757,VL,181,RO,44.70205,24.25439 90636,Cernişoara,4757,VL,181,RO,45.03333,23.98333 90653,Cheia,4757,VL,181,RO,45.18306,24.21666 90861,Comuna Alunu,4757,VL,181,RO,45.00954,23.8176 90865,Comuna Amărăşti,4757,VL,181,RO,44.76107,24.14382 91239,Comuna Bărbăteşti,4757,VL,181,RO,45.14154,24.10933 90969,Comuna Berislăveşti,4757,VL,181,RO,45.26406,24.43785 91035,Comuna Boişoara,4757,VL,181,RO,45.44232,24.37462 91147,Comuna Budeşti,4757,VL,181,RO,45.04714,24.36603 91155,Comuna Bujoreni,4757,VL,181,RO,45.16235,24.36593 91163,Comuna Buneşti,4757,VL,181,RO,45.10202,24.21397 91539,Comuna Câineni,4757,VL,181,RO,45.49499,24.30885 91294,Comuna Cernişoara,4757,VL,181,RO,45.03432,24.00487 91419,Comuna Copăceni,4757,VL,181,RO,44.98223,23.98164 91456,Comuna Costeşti,4757,VL,181,RO,45.16936,24.05813 91492,Comuna Creţeni,4757,VL,181,RO,44.70571,24.18009 91733,Comuna Dăeşti,4757,VL,181,RO,45.18584,24.39337 91742,Comuna Dănicei,4757,VL,181,RO,44.91181,24.44503 91623,Comuna Diculeşti,4757,VL,181,RO,44.60974,23.98795 91690,Comuna Drăgoeşti,4757,VL,181,RO,44.80393,24.294 91813,Comuna Fârtãţeşti,4757,VL,181,RO,44.77577,23.9808 91826,Comuna Făureşti,4757,VL,181,RO,44.57351,24.00871 91791,Comuna Frânceşti-Mânăstireni,4757,VL,181,RO,45.02358,24.16794 91830,Comuna Galicea,4757,VL,181,RO,44.94428,24.29633 91862,Comuna Ghioroiu,4757,VL,181,RO,44.67868,23.8474 91885,Comuna Glăvile,4757,VL,181,RO,44.80423,24.12255 91897,Comuna Goleşti,4757,VL,181,RO,45.1137,24.47395 91940,Comuna Grădiştea,4757,VL,181,RO,44.89929,23.81621 91960,Comuna Guşoeni,4757,VL,181,RO,44.72134,24.12696 92085,Comuna Ioneşti,4757,VL,181,RO,44.85429,24.23134 92219,Comuna Lăcusteni,4757,VL,181,RO,44.70863,23.89214 92220,Comuna Lădeşti,4757,VL,181,RO,44.87014,24.0435 92136,Comuna Laloşu,4757,VL,181,RO,44.53046,24.04689 92222,Comuna Lăpuşata,4757,VL,181,RO,44.92591,24.00976 92174,Comuna Livezi,4757,VL,181,RO,44.837,23.83209 92212,Comuna Lungeşti,4757,VL,181,RO,44.60271,24.17894 92380,Comuna Măciuca,4757,VL,181,RO,44.75807,24.02408 92381,Comuna Mădulari-Beica,4757,VL,181,RO,44.6782,24.10121 92231,Comuna Malaia,4757,VL,181,RO,45.36429,24.04456 92397,Comuna Măldăreşti,4757,VL,181,RO,45.10258,24.00613 92246,Comuna Mateeşti,4757,VL,181,RO,45.06784,23.8549 92280,Comuna Mihăeşti,4757,VL,181,RO,45.03282,24.24501 92288,Comuna Milcoiu,4757,VL,181,RO,45.04046,24.46786 92309,Comuna Mitrofani,4757,VL,181,RO,44.75104,24.20272 92354,Comuna Muereasca,4757,VL,181,RO,45.20364,24.29726 92439,Comuna Nicolae Bãlcescu,4757,VL,181,RO,44.9876,24.4199 92492,Comuna Olanu,4757,VL,181,RO,44.87416,24.29169 92510,Comuna Orleşti,4757,VL,181,RO,44.78125,24.24623 92522,Comuna Oteşani,4757,VL,181,RO,45.04807,24.03989 92730,Comuna Păuşeşti,4757,VL,181,RO,45.07341,24.13552 92731,Comuna Păuşeşti-Măglaşi,4757,VL,181,RO,45.14165,24.24474 92554,Comuna Perişani,4757,VL,181,RO,45.37925,24.40776 92560,Comuna Pesceana,4757,VL,181,RO,44.88169,24.12797 92577,Comuna Pietrari,4757,VL,181,RO,45.11586,24.10242 92656,Comuna Popeşti,4757,VL,181,RO,44.97908,24.11014 92684,Comuna Prundeni,4757,VL,181,RO,44.7346,24.24863 92736,Comuna Racoviţa,4757,VL,181,RO,45.412,24.31792 92778,Comuna Roeşti,4757,VL,181,RO,44.92016,24.07793 92801,Comuna Roşiile,4757,VL,181,RO,44.88537,23.92438 92812,Comuna Runcu,4757,VL,181,RO,45.18685,24.45979 93099,Comuna Sălătrucel,4757,VL,181,RO,45.26684,24.38921 92898,Comuna Scundu,4757,VL,181,RO,44.8488,24.17981 92938,Comuna Sineşti,4757,VL,181,RO,44.93231,23.83951 93530,Comuna Şirineasa,4757,VL,181,RO,44.93871,24.1857 92960,Comuna Slătioara,4757,VL,181,RO,45.12396,23.88581 93018,Comuna Stăneşti,4757,VL,181,RO,44.81359,24.04264 93555,Comuna Ştefăneşti,4757,VL,181,RO,44.60541,24.23338 92993,Comuna Stoeneşti,4757,VL,181,RO,45.14715,24.16337 92996,Comuna Stoileşti,4757,VL,181,RO,44.91463,24.35992 93004,Comuna Stroeşti,4757,VL,181,RO,45.07519,23.92645 93564,Comuna Şuşani,4757,VL,181,RO,44.61009,24.10021 93042,Comuna Suteşti,4757,VL,181,RO,44.67103,24.21893 93146,Comuna Tetoiu,4757,VL,181,RO,44.78374,23.91735 93160,Comuna Titeşti,4757,VL,181,RO,45.41971,24.39323 93172,Comuna Tomşani,4757,VL,181,RO,45.09606,24.0602 93296,Comuna Vaideeni,4757,VL,181,RO,45.17322,23.88622 93314,Comuna Valea Mare,4757,VL,181,RO,44.67374,24.00055 93389,Comuna Vlădeşti,4757,VL,181,RO,45.13574,24.30181 93394,Comuna Voiceşti,4757,VL,181,RO,44.59651,24.2998 93397,Comuna Voineasa,4757,VL,181,RO,45.41128,23.97611 93490,Comuna Zătreni,4757,VL,181,RO,44.77069,23.8432 93604,Copăcelu,4757,VL,181,RO,45.06762,24.31161 93606,Copăceni,4757,VL,181,RO,45.0,23.98333 93697,Coșani,4757,VL,181,RO,45.00788,24.19188 93658,Costeşti,4757,VL,181,RO,45.15,24.06667 93713,Creţeni,4757,VL,181,RO,44.68333,24.18333 94117,Dăeşti,4757,VL,181,RO,44.96667,24.13333 93901,Dealu Aluniș,4757,VL,181,RO,44.98252,23.86749 93902,Dealu Dănicei,4757,VL,181,RO,44.9,24.43333 93934,Diculești,4757,VL,181,RO,44.59351,23.98968 93971,Dobrușa,4757,VL,181,RO,44.62642,24.20779 94064,Drăgăşani,4757,VL,181,RO,44.65,24.26667 94041,Drăgoeşti,4757,VL,181,RO,44.81667,24.3 94267,Fărtăţeşti,4757,VL,181,RO,44.78333,24.0 94271,Făureşti,4757,VL,181,RO,44.56667,24.01667 94277,Galicea,4757,VL,181,RO,44.91667,24.28333 94334,Ghioroiu,4757,VL,181,RO,44.7,23.83333 94365,Glăvile,4757,VL,181,RO,44.81667,24.15 94381,Goranu,4757,VL,181,RO,45.10523,24.38431 94439,Grădiştea,4757,VL,181,RO,44.86667,23.81667 94403,Greblești,4757,VL,181,RO,45.47514,24.31182 94460,Gura Suhașului,4757,VL,181,RO,45.08803,24.29886 94474,Guşoeni,4757,VL,181,RO,44.73333,24.11667 94558,Horezu,4757,VL,181,RO,45.15,24.01667 94651,Igoiu,4757,VL,181,RO,45.04824,23.80835 94678,Ioneşti,4757,VL,181,RO,44.85,24.23333 94729,Jiblea Veche,4757,VL,181,RO,45.2436,24.35163 94891,Lăcusteni,4757,VL,181,RO,44.69544,23.89984 94892,Lădeşti,4757,VL,181,RO,44.88333,24.05 94757,Laloşu,4757,VL,181,RO,44.55,24.01667 94817,Livadia,4757,VL,181,RO,45.20546,24.24192 94819,Livezi,4757,VL,181,RO,44.84029,23.82505 94881,Lungeşti,4757,VL,181,RO,44.56667,24.18333 95231,Mădulari,4757,VL,181,RO,45.03333,24.0 94910,Malaia,4757,VL,181,RO,45.35,24.03333 95252,Măldăreşti,4757,VL,181,RO,45.11667,24.0 95260,Mănăilești,4757,VL,181,RO,45.02464,24.12451 94935,Mateeşti,4757,VL,181,RO,45.06667,23.85 94987,Mihăeşti,4757,VL,181,RO,45.03333,24.25 95001,Milcoiu,4757,VL,181,RO,45.05,24.46667 95033,Mitrofani,4757,VL,181,RO,44.73268,24.2091 95051,Mogești,4757,VL,181,RO,45.11667,23.91667 95098,Muereasca,4757,VL,181,RO,45.18333,24.33333 95139,Municipiul Drãgãşani,4757,VL,181,RO,44.64414,24.24632 95175,Municipiul Râmnicu Vâlcea,4757,VL,181,RO,45.09448,24.35215 95435,Olănești,4757,VL,181,RO,45.18209,24.2599 95422,Olanu,4757,VL,181,RO,44.86667,24.3 95480,Oraş Bãbeni,4757,VL,181,RO,44.97023,24.22555 95482,Oraş Bãile Govora,4757,VL,181,RO,45.08174,24.18246 95484,Oraş Bãile Olãneşti,4757,VL,181,RO,45.20059,24.23416 95487,Oraş Bãlceşti,4757,VL,181,RO,44.62941,23.94052 95461,Oraş Berbeşti,4757,VL,181,RO,44.99915,23.88013 95471,Oraş Brezoi,4757,VL,181,RO,45.35088,24.25681 95505,Oraş Cãlimãneşti,4757,VL,181,RO,45.24252,24.34375 95529,Oraş Horezu,4757,VL,181,RO,45.16962,23.98448 95558,Oraş Ocnele Mari,4757,VL,181,RO,45.08904,24.28162 95661,Orleşti,4757,VL,181,RO,44.8,24.21667 95683,Oteşani,4757,VL,181,RO,45.06667,24.03333 95682,Otetelișu,4757,VL,181,RO,44.63839,23.95917 95685,Oveselu,4757,VL,181,RO,44.75,24.01667 96034,Păuşeşti,4757,VL,181,RO,45.07358,24.13473 96035,Păuşeşti-Măglaşi,4757,VL,181,RO,45.13333,24.25 95736,Perişani,4757,VL,181,RO,45.38333,24.4 95744,Pesceana,4757,VL,181,RO,44.88333,24.15 95777,Pietrari,4757,VL,181,RO,45.1,24.13333 95778,Pietrarii de Sus,4757,VL,181,RO,45.11697,24.09336 95910,Popeşti,4757,VL,181,RO,44.98333,24.1 95939,Prajila,4757,VL,181,RO,45.0827,24.16949 95964,Prundeni,4757,VL,181,RO,44.73333,24.26667 96042,Racoviţa,4757,VL,181,RO,45.41667,24.31667 96166,Râmești,4757,VL,181,RO,44.56667,24.1 96171,Râmnicu Vâlcea,4757,VL,181,RO,45.1,24.36667 96100,Roeşti,4757,VL,181,RO,44.91667,24.08333 96114,Români,4757,VL,181,RO,44.9731,24.20513 96131,Roşiile,4757,VL,181,RO,44.86667,23.93333 96152,Runcu,4757,VL,181,RO,45.16667,24.45 106022,Sălătrucel,4757,VL,181,RO,45.25,24.38333 96286,Scundu,4757,VL,181,RO,44.83333,24.2 96351,Sineşti,4757,VL,181,RO,44.95,23.85 97059,Şirineasa,4757,VL,181,RO,44.93333,24.2 96479,Stănești,4757,VL,181,RO,44.81667,24.05 97085,Ştefăneşti,4757,VL,181,RO,44.61667,24.25 96434,Stoeneşti,4757,VL,181,RO,45.11667,24.16667 96439,Stoileşti,4757,VL,181,RO,44.9,24.38333 96441,Stolniceni,4757,VL,181,RO,45.03948,24.3064 96454,Stroeşti,4757,VL,181,RO,45.08333,23.9 97096,Şuşani,4757,VL,181,RO,44.58333,24.1 96514,Sutești,4757,VL,181,RO,44.66851,24.21476 106089,Tetoiu,4757,VL,181,RO,44.75,23.91667 106109,Titești,4757,VL,181,RO,45.41971,24.39323 106125,Tomşani,4757,VL,181,RO,45.11667,24.05 96554,Turcești,4757,VL,181,RO,45.04023,23.86574 96690,Urși,4757,VL,181,RO,44.99404,24.08895 96705,Vaideeni,4757,VL,181,RO,45.16667,23.93333 96736,Valea Mare,4757,VL,181,RO,44.66667,24.0 96866,Vlădeşti,4757,VL,181,RO,45.11667,24.3 96874,Voiceşti,4757,VL,181,RO,44.6,24.28333 96877,Voineasa,4757,VL,181,RO,45.41667,23.95 97018,Zătreni,4757,VL,181,RO,44.76667,23.85 97000,Zlătărei,4757,VL,181,RO,44.63057,24.25788 89913,Albeşti,4752,VS,181,RO,46.5,27.86667 89928,Alexandru Vlăhuţă,4752,VS,181,RO,46.41667,27.63333 90000,Arsura,4752,VS,181,RO,46.81333,28.02222 90474,Băcani,4752,VS,181,RO,46.33333,27.66667 90475,Băceşti,4752,VS,181,RO,46.85,27.23333 90479,Bădeana,4752,VS,181,RO,46.15,27.58333 90489,Băile Drânceni,4752,VS,181,RO,46.81361,28.10083 90514,Bălteni,4752,VS,181,RO,46.66667,27.61667 90053,Banca,4752,VS,181,RO,46.3,27.8 90450,Bârlad,4752,VS,181,RO,46.23175,27.66907 90461,Bârzești,4752,VS,181,RO,46.75,27.55 90103,Berezeni,4752,VS,181,RO,46.37611,28.14778 90163,Blăgeşti,4752,VS,181,RO,46.13722,28.01306 90188,Bogdana,4752,VS,181,RO,46.52668,27.63278 90194,Bogdănești,4752,VS,181,RO,46.44965,27.72679 90195,Bogdăniţa,4752,VS,181,RO,46.45,27.68333 90256,Boţeşti,4752,VS,181,RO,46.8,27.88333 90306,Brodoc,4752,VS,181,RO,46.6509,27.67669 90372,Buda,4752,VS,181,RO,46.76231,27.42113 90410,Buneşti,4752,VS,181,RO,46.83333,27.96667 93810,Cârja,4752,VS,181,RO,46.14878,28.11012 90676,Chircești,4752,VS,181,RO,46.84629,27.8492 90691,Chițoc,4752,VS,181,RO,46.59545,27.6745 90706,Ciocani,4752,VS,181,RO,46.26044,27.55994 90786,Codăeşti,4752,VS,181,RO,46.86667,27.75 90841,Comuna Albeşti,4752,VS,181,RO,46.4985,27.85167 90850,Comuna Alexandru Vlăhuţă,4752,VS,181,RO,46.44973,27.6242 90898,Comuna Arsura,4752,VS,181,RO,46.79618,28.03896 91203,Comuna Băcani,4752,VS,181,RO,46.33768,27.67905 91204,Comuna Băceşti,4752,VS,181,RO,46.83325,27.23668 91219,Comuna Bălteni,4752,VS,181,RO,46.67554,27.61019 90933,Comuna Banca,4752,VS,181,RO,46.34406,27.82091 90964,Comuna Berezeni,4752,VS,181,RO,46.39654,28.1157 91007,Comuna Blăgeşti,4752,VS,181,RO,46.1413,27.99695 91023,Comuna Bogdana,4752,VS,181,RO,46.55124,27.61516 91027,Comuna Bogdăneşti,4752,VS,181,RO,46.437,27.72015 91029,Comuna Bogdăniţa,4752,VS,181,RO,46.44752,27.67505 91070,Comuna Boţeşti,4752,VS,181,RO,46.7963,27.88467 91166,Comuna Bunești Averești,4752,VS,181,RO,46.7981,27.97722 91340,Comuna Ciocani,4752,VS,181,RO,46.25393,27.56957 91392,Comuna Codăeşti,4752,VS,181,RO,46.88029,27.7536 91447,Comuna Coroieşti,4752,VS,181,RO,46.28891,27.49249 91454,Comuna Costeşti,4752,VS,181,RO,46.47971,27.7636 91470,Comuna Cozmeşti,4752,VS,181,RO,46.73024,27.49753 91493,Comuna Creţeşti,4752,VS,181,RO,46.63508,27.96827 91738,Comuna Dăneşti,4752,VS,181,RO,46.83967,27.65905 91610,Comuna Deleni,4752,VS,181,RO,46.53486,27.75726 91612,Comuna Deleşti,4752,VS,181,RO,46.69163,27.55152 91626,Comuna Dimitrie Cantemir,4752,VS,181,RO,46.52932,28.05059 91650,Comuna Dodeşti,4752,VS,181,RO,46.35165,27.91789 91672,Comuna Dragomireşti,4752,VS,181,RO,46.61861,27.35794 91681,Comuna Drânceni,4752,VS,181,RO,46.79614,28.12092 91705,Comuna Duda Epureni,4752,VS,181,RO,46.72477,28.04647 91721,Comuna Dumeşti,4752,VS,181,RO,46.84347,27.30041 91748,Comuna Epureni,4752,VS,181,RO,46.24228,27.89582 91820,Comuna Fălciu,4752,VS,181,RO,46.2937,28.10324 91759,Comuna Fereşti,4752,VS,181,RO,46.78179,27.70093 91790,Comuna Fruntişeni,4752,VS,181,RO,46.19806,27.77368 91978,Comuna Găgeşti,4752,VS,181,RO,46.33311,27.98026 91968,Comuna Gârceni,4752,VS,181,RO,46.75136,27.27964 91846,Comuna Ghergheşti,4752,VS,181,RO,46.52167,27.52404 91920,Comuna Griviţa,4752,VS,181,RO,46.16827,27.68223 92004,Comuna Hoceni,4752,VS,181,RO,46.54027,27.98196 92052,Comuna Iana,4752,VS,181,RO,46.40438,27.55265 92057,Comuna Ibăneşti,4752,VS,181,RO,46.40507,27.62043 92100,Comuna Ivăneşti,4752,VS,181,RO,46.66216,27.44465 92099,Comuna Iveşti,4752,VS,181,RO,46.19492,27.5367 92140,Comuna Laza,4752,VS,181,RO,46.65239,27.59843 92169,Comuna Lipovăţ,4752,VS,181,RO,46.56352,27.6927 92201,Comuna Lunca Banului,4752,VS,181,RO,46.5664,28.1979 92400,Comuna Măluşteni,4752,VS,181,RO,46.17587,27.91546 92267,Comuna Micleşti,4752,VS,181,RO,46.82203,27.84215 92358,Comuna Muntenii de Jos,4752,VS,181,RO,46.60405,27.76949 92359,Comuna Muntenii de Sus,4752,VS,181,RO,46.69288,27.7632 92496,Comuna Olteneşti,4752,VS,181,RO,46.58438,27.9018 92524,Comuna Oşeşti,4752,VS,181,RO,46.76376,27.44832 92716,Comuna Pădureni,4752,VS,181,RO,46.59285,28.09127 92550,Comuna Perieni,4752,VS,181,RO,46.30407,27.61323 92609,Comuna Pochidia,4752,VS,181,RO,46.05233,27.5845 92619,Comuna Pogana,4752,VS,181,RO,46.33546,27.5536 92620,Comuna Pogoneşti,4752,VS,181,RO,46.14748,27.52665 92639,Comuna Poieneşti,4752,VS,181,RO,46.57978,27.54608 92694,Comuna Puieşti,4752,VS,181,RO,46.44541,27.46214 92696,Comuna Pungeşti,4752,VS,181,RO,46.70274,27.38157 92702,Comuna Puşcaşi,4752,VS,181,RO,46.6253,27.62563 92745,Comuna Rafaila,4752,VS,181,RO,46.80064,27.36236 92751,Comuna Rebricea,4752,VS,181,RO,46.87229,27.5725 92800,Comuna Roşieşti,4752,VS,181,RO,46.45107,27.89202 92973,Comuna Soleşti,4752,VS,181,RO,46.77174,27.80613 93019,Comuna Stănileşti,4752,VS,181,RO,46.6503,28.16151 93552,Comuna Ştefan cel Mare,4752,VS,181,RO,46.71562,27.62941 93560,Comuna Şuletea,4752,VS,181,RO,46.30607,27.90413 93236,Comuna Tăcuta,4752,VS,181,RO,46.9363,27.66505 93123,Comuna Tanacu,4752,VS,181,RO,46.68721,27.82443 93246,Comuna Tătărăni,4752,VS,181,RO,46.70894,27.95602 93163,Comuna Todireşti,4752,VS,181,RO,46.84897,27.38756 93219,Comuna Tutova,4752,VS,181,RO,46.11223,27.57244 93449,Comuna Vãleni,4752,VS,181,RO,46.73091,27.75925 93348,Comuna Vetrişoaia,4752,VS,181,RO,46.45742,28.21799 93361,Comuna Viişoara,4752,VS,181,RO,46.37992,27.8607 93364,Comuna Vinderei,4752,VS,181,RO,46.14349,27.80566 93400,Comuna Voineşti,4752,VS,181,RO,46.55578,27.43315 93420,Comuna Vultureşti,4752,VS,181,RO,46.80254,27.53258 93425,Comuna Vutcani,4752,VS,181,RO,46.44575,27.97366 93487,Comuna Zăpodeni,4752,VS,181,RO,46.76642,27.6416 93479,Comuna Zorleni,4752,VS,181,RO,46.25078,27.73866 93638,Corni-Albești,4752,VS,181,RO,46.51813,27.87171 93648,Coroieşti,4752,VS,181,RO,46.25,27.48333 93660,Costeşti,4752,VS,181,RO,46.5,27.75 93687,Cozmești,4752,VS,181,RO,46.73375,27.50164 93715,Crețești,4752,VS,181,RO,46.63333,27.95 94126,Dăneşti,4752,VS,181,RO,46.85,27.66667 93914,Deleni,4752,VS,181,RO,46.55,27.75 93917,Deleşti,4752,VS,181,RO,46.7,27.55 93977,Dodești,4752,VS,181,RO,46.35455,27.89311 94017,Dragomireşti,4752,VS,181,RO,46.63333,27.35 94033,Drânceni,4752,VS,181,RO,46.80146,28.13264 94067,Duda,4752,VS,181,RO,46.7525,28.03722 94095,Dumeşti,4752,VS,181,RO,46.85,27.28333 94141,Emil Racoviță,4752,VS,181,RO,46.87147,27.67937 94143,Epureni,4752,VS,181,RO,46.70769,28.03829 94257,Fălciu,4752,VS,181,RO,46.29611,28.14083 94247,Fâstâci,4752,VS,181,RO,46.73058,27.44901 94159,Ferești,4752,VS,181,RO,46.78179,27.70093 94215,Fruntișeni,4752,VS,181,RO,46.20634,27.76904 94498,Găgeşti,4752,VS,181,RO,46.33333,27.96667 94486,Gârceni,4752,VS,181,RO,46.76667,27.28333 94306,Ghergheşti,4752,VS,181,RO,46.5,27.51667 94310,Ghermănești,4752,VS,181,RO,46.82998,28.08105 94416,Griviţa,4752,VS,181,RO,46.15,27.65 94447,Gugești,4752,VS,181,RO,46.76342,27.9005 94601,Hălărești,4752,VS,181,RO,46.39447,27.55614 94540,Hoceni,4752,VS,181,RO,46.53917,28.00667 94580,Hurdugi,4752,VS,181,RO,46.50778,28.05472 94587,Huşi,4752,VS,181,RO,46.67361,28.05944 94618,Iana,4752,VS,181,RO,46.38333,27.55 94633,Ibănești,4752,VS,181,RO,46.39482,27.62548 94698,Ivănești,4752,VS,181,RO,46.63481,27.46048 94697,Iveşti,4752,VS,181,RO,46.18333,27.53333 94764,Laza,4752,VS,181,RO,46.65,27.58333 94806,Lipovăţ,4752,VS,181,RO,46.56667,27.7 94861,Lunca Banului,4752,VS,181,RO,46.595,28.16833 95255,Măluşteni,4752,VS,181,RO,46.18333,27.91667 94969,Micleşti,4752,VS,181,RO,46.81667,27.83333 95040,Moara Domnească,4752,VS,181,RO,46.71448,27.7589 95041,Moara Grecilor,4752,VS,181,RO,46.67145,27.74569 95120,Municipiul Bârlad,4752,VS,181,RO,46.22579,27.6707 95149,Municipiul Huşi,4752,VS,181,RO,46.6732,28.05952 95195,Municipiul Vaslui,4752,VS,181,RO,46.64683,27.73872 95202,Muntenii de Jos,4752,VS,181,RO,46.61667,27.76667 95203,Muntenii de Sus,4752,VS,181,RO,46.68968,27.77763 95206,Murgeni,4752,VS,181,RO,46.20444,28.01972 95316,Negreşti,4752,VS,181,RO,46.83333,27.43333 95430,Olteneşti,4752,VS,181,RO,46.58333,27.9 95643,Oraș Murgeni,4752,VS,181,RO,46.2016,28.00424 95548,Oraş Negreşti,4752,VS,181,RO,46.83188,27.4781 95688,Oşeşti,4752,VS,181,RO,46.76667,27.46667 96007,Pădureni,4752,VS,181,RO,46.62192,28.08258 95731,Perieni,4752,VS,181,RO,46.3,27.61667 95838,Pochidia,4752,VS,181,RO,46.04318,27.58746 95854,Pogana,4752,VS,181,RO,46.31667,27.56667 95858,Pogănești,4752,VS,181,RO,46.69237,28.16779 95857,Pogonești,4752,VS,181,RO,46.15229,27.53225 95889,Poieneşti,4752,VS,181,RO,46.61667,27.53333 95907,Popeni,4752,VS,181,RO,46.24667,27.8052 95947,Pribești,4752,VS,181,RO,46.91001,27.79659 95979,Puieşti,4752,VS,181,RO,46.41667,27.5 95981,Pungeşti,4752,VS,181,RO,46.7,27.33333 95991,Pușcași,4752,VS,181,RO,46.62154,27.64503 96057,Rafaila,4752,VS,181,RO,46.80064,27.36236 96173,Rânzești,4752,VS,181,RO,46.22101,28.09468 96180,Râșești,4752,VS,181,RO,46.77219,28.14273 96065,Rebricea,4752,VS,181,RO,46.86667,27.55 96077,Rediu,4752,VS,181,RO,46.63374,27.69439 96130,Roşieşti,4752,VS,181,RO,46.43333,27.88333 96258,Satu Nou,4752,VS,181,RO,46.69608,27.74876 96263,Sauca,4752,VS,181,RO,46.65268,27.60523 96405,Soleşti,4752,VS,181,RO,46.76667,27.78333 96480,Stănileşti,4752,VS,181,RO,46.61833,28.17139 97081,Ştefan cel Mare,4752,VS,181,RO,46.71668,27.62873 97092,Şuletea,4752,VS,181,RO,46.28333,27.9 96600,Tăcuta,4752,VS,181,RO,46.91667,27.68333 106057,Tanacu,4752,VS,181,RO,46.68333,27.81667 96621,Tătărăni,4752,VS,181,RO,46.69422,27.96443 106117,Todireşti,4752,VS,181,RO,46.85,27.36667 106152,Trestiana,4752,VS,181,RO,46.2,27.65 96572,Tutova,4752,VS,181,RO,46.11667,27.55 96725,Valea Grecului,4752,VS,181,RO,46.71985,28.10123 96962,Văleni,4752,VS,181,RO,46.59278,28.0625 96776,Vaslui,4752,VS,181,RO,46.63333,27.73333 96796,Vetrişoaia,4752,VS,181,RO,46.43,28.20833 96819,Viişoara,4752,VS,181,RO,46.38333,27.88333 96830,Vinderei,4752,VS,181,RO,46.15,27.8 96880,Voineşti,4752,VS,181,RO,46.56667,27.41667 96910,Vultureşti,4752,VS,181,RO,46.81667,27.53333 96917,Vutcani,4752,VS,181,RO,46.46667,27.96667 97013,Zăpodeni,4752,VS,181,RO,46.75,27.65 97004,Zorleni,4752,VS,181,RO,46.26667,27.71667 89881,Adjud,4758,VN,181,RO,46.1,27.16667 89883,Adjudu Vechi,4758,VN,181,RO,46.13485,27.18891 89956,Andreiaşu de Jos,4758,VN,181,RO,45.75,26.83333 89960,Anghelești,4758,VN,181,RO,46.07875,27.06459 90511,Băleşti,4758,VN,181,RO,45.43333,27.23333 90456,Bârseşti,4758,VN,181,RO,45.91667,26.73333 90138,Biliești,4758,VN,181,RO,45.72106,27.34879 90197,Bogheşti,4758,VN,181,RO,46.16667,27.4 90200,Bogza,4758,VN,181,RO,45.50798,27.19773 90215,Boloteşti,4758,VN,181,RO,45.83333,27.06667 90223,Bordeasca Veche,4758,VN,181,RO,45.54447,27.3173 90226,Bordeşti,4758,VN,181,RO,45.55,27.05 90309,Broşteni,4758,VN,181,RO,45.75,27.03333 90385,Budești,4758,VN,181,RO,45.62779,27.05669 90415,Burca,4758,VN,181,RO,45.91224,26.94905 93799,Câmpineanca,4758,VN,181,RO,45.71166,27.12832 93804,Câmpuri,4758,VN,181,RO,46.01535,26.78802 93805,Câmpurile de Jos,4758,VN,181,RO,46.01667,26.78333 93814,Cârligele,4758,VN,181,RO,45.68333,27.1 90603,Ceardac,4758,VN,181,RO,45.66967,27.16611 90673,Chiojdeni,4758,VN,181,RO,45.55,26.86667 90722,Ciorani,4758,VN,181,RO,45.98824,27.21614 90729,Ciorăşti,4758,VN,181,RO,45.43333,27.3 90761,Ciușlea,4758,VN,181,RO,45.78761,27.30644 90868,Comuna Andreiaşu de Jos,4758,VN,181,RO,45.73669,26.82752 91215,Comuna Băleşti,4758,VN,181,RO,45.44034,27.23703 91193,Comuna Bârseşti,4758,VN,181,RO,45.90724,26.74716 90991,Comuna Bilieşti,4758,VN,181,RO,45.72106,27.34879 91030,Comuna Bogheşti,4758,VN,181,RO,46.16211,27.41871 91042,Comuna Boloteşti,4758,VN,181,RO,45.84099,27.04117 91048,Comuna Bordeşti,4758,VN,181,RO,45.54715,27.04104 91104,Comuna Broşteni,4758,VN,181,RO,45.76566,27.01305 91543,Comuna Câmpineanca,4758,VN,181,RO,45.70838,27.13191 91545,Comuna Câmpuri,4758,VN,181,RO,46.03618,26.75425 91552,Comuna Cârligele,4758,VN,181,RO,45.67723,27.06031 91319,Comuna Chiojdeni,4758,VN,181,RO,45.56113,26.84389 91357,Comuna Ciorăşti,4758,VN,181,RO,45.43869,27.30952 91427,Comuna Corbiţa,4758,VN,181,RO,46.16325,27.30861 91464,Comuna Coteşti,4758,VN,181,RO,45.63689,27.07546 93584,Comună Dumbrăveni,4758,VN,181,RO,45.55416,27.09037 91723,Comuna Dumitreşti,4758,VN,181,RO,45.57715,26.90728 91768,Comuna Fitioneşti,4758,VN,181,RO,45.96655,27.06953 91833,Comuna Garoafa,4758,VN,181,RO,45.79812,27.2501 91896,Comuna Goleşti,4758,VN,181,RO,45.66603,27.16708 91898,Comuna Gologanu,4758,VN,181,RO,45.60979,27.27091 91945,Comuna Gugeşti,4758,VN,181,RO,45.57982,27.1437 91946,Comuna Gura Caliţei,4758,VN,181,RO,45.61357,26.97284 92011,Comuna Homocea,4758,VN,181,RO,46.15796,27.23108 92115,Comuna Jariştea,4758,VN,181,RO,45.79987,27.04257 92127,Comuna Jitia,4758,VN,181,RO,45.5848,26.74876 92394,Comuna Măicăneşti,4758,VN,181,RO,45.50067,27.46121 92254,Comuna Mera,4758,VN,181,RO,45.77327,26.93423 92290,Comuna Milcovul,4758,VN,181,RO,45.65207,27.25928 92344,Comuna Moviliţa,4758,VN,181,RO,45.9575,27.10487 92463,Comuna Năneşti,4758,VN,181,RO,45.57801,27.49988 92465,Comuna Năruja,4758,VN,181,RO,45.82308,26.76617 92435,Comuna Negrileşti,4758,VN,181,RO,45.93697,26.70635 92438,Comuna Nereju,4758,VN,181,RO,45.70833,26.69794 92449,Comuna Nistoreşti,4758,VN,181,RO,45.81578,26.67728 92472,Comuna Obrejiţa,4758,VN,181,RO,45.50102,27.08974 92532,Comuna Paltin,4758,VN,181,RO,45.77918,26.7477 92726,Comuna Păuleşti,4758,VN,181,RO,45.88712,26.68703 92729,Comuna Păuneşti,4758,VN,181,RO,46.04066,27.10336 92603,Comuna Ploscuţeni,4758,VN,181,RO,46.06103,27.26595 92626,Comuna Poiana Cristei,4758,VN,181,RO,45.66882,26.97125 92655,Comuna Popeşti,4758,VN,181,RO,45.58983,27.0656 92692,Comuna Pufeşti,4758,VN,181,RO,46.01111,27.20901 92839,Comuna Răcoasa,4758,VN,181,RO,45.99786,26.88548 92849,Comuna Răstoaca,4758,VN,181,RO,45.66083,27.28723 92762,Comuna Reghiu,4758,VN,181,RO,45.79672,26.83648 92807,Comuna Rugineşti,4758,VN,181,RO,46.07885,27.11803 92928,Comuna Sihlea,4758,VN,181,RO,45.49398,27.15629 92955,Comuna Slobozia Bradului,4758,VN,181,RO,45.49203,27.03977 92958,Comuna Slobozia-Ciorăşti,4758,VN,181,RO,45.60606,27.21399 92979,Comuna Soveja,4758,VN,181,RO,45.99705,26.65351 92985,Comuna Spulber,4758,VN,181,RO,45.74654,26.73925 93009,Comuna Străoane,4758,VN,181,RO,45.92895,27.04359 93035,Comuna Suraia,4758,VN,181,RO,45.68066,27.38419 93222,Comuna Tâmboeşti,4758,VN,181,RO,45.51792,27.04555 93238,Comuna Tănăsoaia,4758,VN,181,RO,46.10161,27.37982 93235,Comuna Tãtãranu,4758,VN,181,RO,45.51621,27.3093 93573,Comuna Ţifeşti,4758,VN,181,RO,45.85329,27.10387 93205,Comuna Tulnici,4758,VN,181,RO,45.93283,26.60452 93281,Comuna Urecheşti,4758,VN,181,RO,45.60181,27.07141 93325,Comuna Valea Sării,4758,VN,181,RO,45.87892,26.80823 93435,Comuna Vânători,4758,VN,181,RO,45.73875,27.26951 93444,Comuna Vârteşcoiu,4758,VN,181,RO,45.72465,27.06471 93356,Comuna Vidra,4758,VN,181,RO,45.9142,26.90506 93366,Comuna Vintileasca,4758,VN,181,RO,45.6297,26.72608 93372,Comuna Vizantea-Livezi,4758,VN,181,RO,45.96233,26.81347 93411,Comuna Vrâncioaia,4758,VN,181,RO,45.87169,26.70971 93422,Comuna Vulturu,4758,VN,181,RO,45.60783,27.42281 93616,Corbiţa,4758,VN,181,RO,46.15,27.3 93632,Cornetu,4758,VN,181,RO,45.50456,27.05305 93674,Coteşti,4758,VN,181,RO,45.65,27.05 93992,Domnești-Târg,4758,VN,181,RO,46.01667,27.18333 94022,Dragosloveni,4758,VN,181,RO,46.0,26.66667 94086,Dumbrăveni,4758,VN,181,RO,45.53333,27.11667 94099,Dumitrești,4758,VN,181,RO,45.55243,26.92727 94180,Fitioneşti,4758,VN,181,RO,45.98333,27.05 94193,Focșani,4758,VN,181,RO,45.7,27.18333 94499,Găgești,4758,VN,181,RO,45.85598,27.0554 94282,Garoafa,4758,VN,181,RO,45.78333,27.2 94377,Goleşti,4758,VN,181,RO,45.66667,27.13333 94379,Gologanu,4758,VN,181,RO,45.60979,27.27091 94446,Gugeşti,4758,VN,181,RO,45.56667,27.13333 94451,Gura Caliţei,4758,VN,181,RO,45.58333,27.01667 94552,Homocea,4758,VN,181,RO,46.13333,27.23333 94646,Igești,4758,VN,181,RO,45.82043,27.18253 94687,Irești,4758,VN,181,RO,45.92993,26.94393 94723,Jariştea,4758,VN,181,RO,45.78333,27.06667 94742,Jitia,4758,VN,181,RO,45.58333,26.71667 94747,Jorăști,4758,VN,181,RO,45.71477,27.26335 94783,Lespezi,4758,VN,181,RO,46.16027,27.24065 95248,Măicăneşti,4758,VN,181,RO,45.5,27.5 95286,Mărășești,4758,VN,181,RO,45.88333,27.23333 95289,Mătăcina,4758,VN,181,RO,45.88333,26.8 94949,Mera,4758,VN,181,RO,45.76667,26.95 94996,Mihălceni,4758,VN,181,RO,45.44493,27.30466 95002,Milcovul,4758,VN,181,RO,45.65,27.25 95015,Mirceștii Noi,4758,VN,181,RO,45.75072,27.2726 95085,Moviliţa,4758,VN,181,RO,45.95,27.1 95101,Municipiul Adjud,4758,VN,181,RO,46.11464,27.19284 95141,Municipiul Focşani,4758,VN,181,RO,45.69004,27.22774 95372,Năneşti,4758,VN,181,RO,45.55,27.5 95374,Năruja,4758,VN,181,RO,45.83333,26.78333 95321,Negrilești,4758,VN,181,RO,45.93697,26.70635 95329,Nereju,4758,VN,181,RO,45.71667,26.71667 95330,Nereju Mic,4758,VN,181,RO,45.70618,26.69641 95350,Nistoreşti,4758,VN,181,RO,45.83333,26.73333 95388,Obrejița,4758,VN,181,RO,45.50102,27.08974 95407,Odobeşti,4758,VN,181,RO,45.76667,27.05 95427,Oleșești,4758,VN,181,RO,45.84781,27.10097 95547,Oraş Mãrãşeşti,4758,VN,181,RO,45.90446,27.22305 95559,Oraş Odobeşti,4758,VN,181,RO,45.75011,27.08754 95564,Oraş Panciu,4758,VN,181,RO,45.90661,27.09358 95702,Paltin,4758,VN,181,RO,45.78333,26.71667 95704,Panciu,4758,VN,181,RO,45.9,27.08333 96031,Păulești,4758,VN,181,RO,45.89154,26.68914 96033,Păuneşti,4758,VN,181,RO,46.03333,27.1 95829,Ploscuțeni,4758,VN,181,RO,46.07859,27.27032 95871,Poiana Cristei,4758,VN,181,RO,45.65,26.98333 95914,Popești,4758,VN,181,RO,45.59533,27.07916 95976,Pufeşti,4758,VN,181,RO,46.0,27.2 96189,Răcoasa,4758,VN,181,RO,46.0,26.88333 96169,Râmniceni,4758,VN,181,RO,45.51322,27.44843 96208,Răstoaca,4758,VN,181,RO,45.66083,27.28723 96080,Reghiu,4758,VN,181,RO,45.78333,26.83333 96145,Rucăreni,4758,VN,181,RO,45.99438,26.65496 96147,Rugineşti,4758,VN,181,RO,46.06667,27.11667 96337,Sihlea,4758,VN,181,RO,45.5,27.11667 97127,Șindrilari,4758,VN,181,RO,45.79083,26.87947 96374,Slobozia Bradului,4758,VN,181,RO,45.5,27.05 96378,Slobozia-Câmpineanca,4758,VN,181,RO,45.7,27.13333 96377,Slobozia-Ciorăşti,4758,VN,181,RO,45.61667,27.2 96419,Spulber,4758,VN,181,RO,45.75186,26.7608 96463,Străoane,4758,VN,181,RO,45.93333,27.05 96504,Suraia,4758,VN,181,RO,45.68333,27.4 96576,Tâmboeşti,4758,VN,181,RO,45.51667,27.05 96609,Tănăsoaia,4758,VN,181,RO,46.1,27.36667 96619,Tătăranu,4758,VN,181,RO,45.51667,27.31667 97105,Ţifeşti,4758,VN,181,RO,45.85,27.1 106175,Tulnici,4758,VN,181,RO,45.91667,26.66667 96665,Unirea,4758,VN,181,RO,45.7402,27.10741 96675,Urecheşti,4758,VN,181,RO,45.6,27.06667 96701,Vadu Roșca,4758,VN,181,RO,45.63864,27.45716 96758,Valea Sării,4758,VN,181,RO,45.87686,26.79873 96929,Vânători,4758,VN,181,RO,45.73333,27.25 96944,Vârteşcoiu,4758,VN,181,RO,45.73333,27.08333 96810,Vidra,4758,VN,181,RO,45.91667,26.9 96827,Viișoara,4758,VN,181,RO,46.0516,27.09593 96835,Vintileasca,4758,VN,181,RO,45.6,26.73333 96843,Vizantea-Mânăstirească,4758,VN,181,RO,45.98333,26.78333 96873,Voetin,4758,VN,181,RO,45.4437,27.14587 96898,Vrâncioaia,4758,VN,181,RO,45.85,26.73333 96905,Vulcăneasa,4758,VN,181,RO,45.77388,26.90981 96914,Vulturu,4758,VN,181,RO,45.61667,27.41667 97586,Aleysk,1911,ALT,182,RU,52.4926,82.7822 97587,Aleyskiy Rayon,1911,ALT,182,RU,52.41667,82.75 97603,Altayskoye,1911,ALT,182,RU,51.95333,85.3325 97641,Anton’yevka,1911,ALT,182,RU,51.9961,83.974 97726,Aya,1911,ALT,182,RU,51.94532,85.80168 97795,Barnaul,1911,ALT,182,RU,53.36056,83.76361 97796,Barnaul Urban Okrug,1911,ALT,182,RU,53.33087,83.64441 97808,Bastan,1911,ALT,182,RU,51.85889,79.47444 97823,Bayevo,1911,ALT,182,RU,53.27065,80.77921 97827,Bayunovskiye Klyuchi,1911,ALT,182,RU,53.32806,84.18222 97856,Belokurikha,1911,ALT,182,RU,51.9959,84.9896 97868,Beloyarsk,1911,ALT,182,RU,53.4461,83.9048 97905,Berëzovka,1911,ALT,182,RU,52.35111,85.82722 97942,Biysk,1911,ALT,182,RU,52.53639,85.20722 97947,Blagoveshchenka,1911,ALT,182,RU,52.83333,79.86667 97956,Bobrovka,1911,ALT,182,RU,53.18361,83.87639 98036,Borovikha,1911,ALT,182,RU,53.5072,83.8379 98082,Burla,1911,ALT,182,RU,53.3362,78.3301 98102,Bystryanka,1911,ALT,182,RU,52.28611,85.82833 98103,Bystryy Istok,1911,ALT,182,RU,52.371,84.3873 98120,Charyshskoye,1911,ALT,182,RU,51.3978,83.5598 98149,Cheremnoye,1911,ALT,182,RU,53.16972,83.21333 98454,Gal’bshtadt,1911,ALT,182,RU,53.2264,78.9845 98515,Gon’ba,1911,ALT,182,RU,53.4172,83.5747 98537,Gornyak,1911,ALT,182,RU,50.99417,81.46611 98590,Grishkovka,1911,ALT,182,RU,53.1487,78.751 98680,Inya,1911,ALT,182,RU,53.5044,82.6712 98796,Kalmanka,1911,ALT,182,RU,52.89917,83.54333 98797,Kalmanskiy Rayon,1911,ALT,182,RU,53.0,83.5 98824,Kamen’-na-Obi,1911,ALT,182,RU,53.7884,81.3423 98950,Khabarskiy Rayon,1911,ALT,182,RU,53.58333,79.5 98951,Khabary,1911,ALT,182,RU,53.62588,79.5345 99111,Klyuchi,1911,ALT,182,RU,52.25303,79.16868 99231,Kosikha,1911,ALT,182,RU,53.36167,84.58222 99232,Kosikhinskiy Rayon,1911,ALT,182,RU,53.41667,84.58333 99311,Krasnogorskoye,1911,ALT,182,RU,52.2953,86.1979 99333,Krasnoshchekovo,1911,ALT,182,RU,51.67083,82.72889 99379,Krasnyy Yar,1911,ALT,182,RU,52.3575,85.33806 99403,Krutikha,1911,ALT,182,RU,53.9599,81.2093 99437,Kulunda,1911,ALT,182,RU,52.566,78.9385 99438,Kulundinskiy Rayon,1911,ALT,182,RU,52.58333,79.0 99481,Kur’inskiy Rayon,1911,ALT,182,RU,51.41667,82.41667 99484,Kusak,1911,ALT,182,RU,53.2238,78.9337 99523,Kytmanovo,1911,ALT,182,RU,53.4593,85.4479 99556,Lebyazh’ye,1911,ALT,182,RU,53.24361,83.65333 99600,Lesnoye,1911,ALT,182,RU,52.46926,85.25547 99650,Logovskoye,1911,ALT,182,RU,53.4943,84.2016 99655,Loktevskiy Rayon,1911,ALT,182,RU,51.0,81.58333 99757,Malinovoye Ozero,1911,ALT,182,RU,51.67528,79.7825 99765,Malougrenevo,1911,ALT,182,RU,52.5568,85.33908 99779,Mamontovo,1911,ALT,182,RU,52.7055,81.6244 99780,Mamontovskiy Rayon,1911,ALT,182,RU,52.66667,81.75 99805,Martynovo,1911,ALT,182,RU,53.26667,85.88333 99902,Mikhaylovskiy Rayon,1911,ALT,182,RU,51.75,79.66667 99906,Mikhaylovskoye,1911,ALT,182,RU,51.82389,79.71722 100047,Nagornyy,1911,ALT,182,RU,52.7959,83.5498 100053,Nalobikha,1911,ALT,182,RU,53.2009,84.6 100064,Natsional’nyy Rayon Nemetskiy,1911,ALT,182,RU,53.25,79.0 100066,Nauchnyy Gorodok,1911,ALT,182,RU,53.4203,83.521 100135,Nikolayevka,1911,ALT,182,RU,51.92556,79.41583 100214,Novichikha,1911,ALT,182,RU,52.204,81.3877 100215,Novichikhinskiy Rayon,1911,ALT,182,RU,52.16667,81.41667 100216,Novikovo,1911,ALT,182,RU,52.62231,85.96392 100224,Novoaltaysk,1911,ALT,182,RU,53.3917,83.9363 100304,Novosilikatnyy,1911,ALT,182,RU,53.30972,83.62389 100318,Novotyryshkino,1911,ALT,182,RU,52.0833,84.9089 100363,Novyye Zori,1911,ALT,182,RU,53.24778,83.425 100538,Pankrushikha,1911,ALT,182,RU,53.83194,80.34056 100539,Pankrushikhinskiy Rayon,1911,ALT,182,RU,53.83333,80.33333 100573,Pavlovsk,1911,ALT,182,RU,53.31861,82.98222 100582,Pavlovskiy Rayon,1911,ALT,182,RU,53.25,83.0 100620,Pervomayskiy,1911,ALT,182,RU,52.9173,81.6624 100623,Pervomayskiy Rayon,1911,ALT,182,RU,53.41667,84.08333 100628,Pervomayskoye,1911,ALT,182,RU,52.59888,85.25769 100655,Petropavlovskiy Rayon,1911,ALT,182,RU,52.16667,84.25 100656,Petropavlovskoye,1911,ALT,182,RU,52.0712,84.107 100732,Podsosnovo,1911,ALT,182,RU,53.3721,78.9184 100786,Pospelikha,1911,ALT,182,RU,51.95,81.76667 100787,Pospelikhinskiy Rayon,1911,ALT,182,RU,51.83333,81.66667 100954,Rebrikha,1911,ALT,182,RU,53.07333,82.34083 100955,Rebrikhinskiy Rayon,1911,ALT,182,RU,53.0,82.25 100973,Rodino,1911,ALT,182,RU,52.49783,80.20294 100974,Rodinskiy Rayon,1911,ALT,182,RU,52.5,80.33333 100989,Romanovo,1911,ALT,182,RU,52.6182,81.2271 100991,Romanovskiy Rayon,1911,ALT,182,RU,52.58333,81.16667 101019,Rubtsovsk,1911,ALT,182,RU,51.51473,81.20613 101020,Rubtsovskiy Rayon,1911,ALT,182,RU,51.5,81.33333 101101,Sannikovo,1911,ALT,182,RU,53.3448,83.9749 101201,Severka,1911,ALT,182,RU,52.13333,79.28333 101236,Shakhi,1911,ALT,182,RU,53.3361,83.3624 101290,Shelabolikha,1911,ALT,182,RU,53.4131,82.6167 101291,Shelabolikhinskiy Rayon,1911,ALT,182,RU,53.41667,82.25 101324,Shipunovo,1911,ALT,182,RU,52.1582,82.2173 101325,Shipunovskiy Rayon,1911,ALT,182,RU,52.33333,82.08333 101342,Shubenka,1911,ALT,182,RU,52.6551,85.09858 101345,Shul’gin Log,1911,ALT,182,RU,52.16985,85.85573 101367,Sibirskiy,1911,ALT,182,RU,53.5777,83.7577 101399,Slavgorod,1911,ALT,182,RU,52.9978,78.6449 101400,Slavgorodskoye,1911,ALT,182,RU,53.0214,78.6435 101417,Smolenskiy Rayon,1911,ALT,182,RU,52.16667,84.91667 101418,Smolenskoye,1911,ALT,182,RU,52.30447,85.0785 101437,Sokolovo,1911,ALT,182,RU,52.5318,84.7896 101464,Soloneshenskiy Rayon,1911,ALT,182,RU,51.66667,84.5 101465,Soloneshnoye,1911,ALT,182,RU,51.6544,84.3197 101468,Solton,1911,ALT,182,RU,52.8429,86.4787 101469,Soltonskiy Rayon,1911,ALT,182,RU,52.83333,86.5 101478,Sorokino,1911,ALT,182,RU,53.75,84.91667 101518,Sovetskoye,1911,ALT,182,RU,52.28556,85.41424 101550,Srostki,1911,ALT,182,RU,52.4209,85.69923 101551,Stan-Bekhtemir,1911,ALT,182,RU,52.60665,85.62619 101571,Staroaleyskoye,1911,ALT,182,RU,51.00611,82.0 101574,Starobelokurikha,1911,ALT,182,RU,52.05206,85.08765 101608,Staryy Togul,1911,ALT,182,RU,53.4291,85.9006 101636,Stukovo,1911,ALT,182,RU,53.21278,83.33778 101722,Sychëvka,1911,ALT,182,RU,52.0512,84.7788 101739,Tabuny,1911,ALT,182,RU,52.7773,78.7896 101757,Tal’menka,1911,ALT,182,RU,53.8183,83.5677 101758,Tal’menskiy Rayon,1911,ALT,182,RU,53.75,83.41667 101870,Togul,1911,ALT,182,RU,53.467,85.9128 101871,Togul’skiy Rayon,1911,ALT,182,RU,53.66667,86.08333 101893,Topchikha,1911,ALT,182,RU,52.8192,83.1185 101896,Topol’noye,1911,ALT,182,RU,51.5105,84.4813 101924,Troitskoye,1911,ALT,182,RU,52.9822,84.68 101940,Tselinnoye,1911,ALT,182,RU,53.07822,85.65363 102006,Tyumentsevo,1911,ALT,182,RU,53.3224,81.498 102007,Tyumentsevskiy Rayon,1911,ALT,182,RU,53.25,81.5 102038,Uglovskoye,1911,ALT,182,RU,51.3557,80.1942 102117,Ust’-Charyshskaya Pristan’,1911,ALT,182,RU,52.3934,83.6635 102120,Ust’-Isha,1911,ALT,182,RU,52.18201,85.96757 102124,Ust’-Kalmanka,1911,ALT,182,RU,52.1207,83.305 102143,Ust’yanka,1911,ALT,182,RU,53.4527,78.7425 102148,Usyatskoye,1911,ALT,182,RU,52.56806,85.76085 102231,Verkh-Katunskoye,1911,ALT,182,RU,52.45,85.43162 102233,Verkh-Suetka,1911,ALT,182,RU,53.30401,80.04675 102251,Verkhniy Bekhtemir,1911,ALT,182,RU,52.76582,85.91011 102287,Veseloyarsk,1911,ALT,182,RU,51.28737,81.10703 102331,Vlasikha,1911,ALT,182,RU,53.29722,83.57417 102340,Volchikha,1911,ALT,182,RU,52.01356,80.35715 102341,Volchikhinskiy Rayon,1911,ALT,182,RU,52.08333,80.5 102504,Yarovoye,1911,ALT,182,RU,52.9273,78.58 102526,Yegor’yevskiy Rayon,1911,ALT,182,RU,51.75,81.0 102552,Yel’tsovskiy Rayon,1911,ALT,182,RU,53.25,86.41667 102618,Yuzhnyy,1911,ALT,182,RU,53.25417,83.69361 102638,Zalesovo,1911,ALT,182,RU,53.99389,84.74306 102658,Zarinsk,1911,ALT,182,RU,53.7074,84.9493 102659,Zarinskiy Rayon,1911,ALT,182,RU,53.91667,85.33333 102662,Zarya,1911,ALT,182,RU,52.59696,85.1757 102667,Zaton,1911,ALT,182,RU,53.29361,83.80722 102682,Zav’yalovo,1911,ALT,182,RU,52.83805,80.9197 102684,Zav’yalovskiy Rayon,1911,ALT,182,RU,52.91667,81.0 102752,Zmeinogorsk,1911,ALT,182,RU,51.15776,82.19534 102769,Zonal’noye,1911,ALT,182,RU,52.6665,84.9331 102776,Zudilovo,1911,ALT,182,RU,53.4927,83.8937 97548,Aktash,1876,AL,182,RU,50.3,87.73333 97684,Artybash,1876,AL,182,RU,51.79278,87.27611 97876,Belyashi,1876,AL,182,RU,49.709,87.423 98141,Chemal,1876,AL,182,RU,51.41111,86.005 98158,Cherga,1876,AL,182,RU,51.56889,85.5625 98212,Choya,1876,AL,182,RU,52.0108,86.5467 98384,Elekmonar,1876,AL,182,RU,51.45889,85.98778 98529,Gorno-Altaysk,1876,AL,182,RU,51.96056,85.91892 98679,Inya,1876,AL,182,RU,50.45611,86.62667 98684,Iogach,1876,AL,182,RU,51.78167,87.26306 99226,Kosh-Agach,1876,AL,182,RU,49.99273,88.67598 99787,Manzherok,1876,AL,182,RU,51.83028,85.775 99824,Mayma,1876,AL,182,RU,52.01577,85.90963 99825,Mayminskiy Rayon,1876,AL,182,RU,51.83333,86.0 100448,Onguday,1876,AL,182,RU,50.75,86.15 100449,Ongudayskiy Rayon,1876,AL,182,RU,50.66667,86.5 101282,Shebalino,1876,AL,182,RU,51.29167,85.67722 101283,Shebalinskiy Rayon,1876,AL,182,RU,51.33333,85.5 101502,Souzga,1876,AL,182,RU,51.88722,85.84944 101785,Tashanta,1876,AL,182,RU,49.71573,89.19425 101980,Turochak,1876,AL,182,RU,52.2576,87.1224 102127,Ust’-Kan,1876,AL,182,RU,50.9276,84.761 102131,Ust’-Koksa,1876,AL,182,RU,50.2696,85.6108 102132,Ust’-Koksinskiy Rayon,1876,AL,182,RU,50.16667,85.58333 102141,Ust’-Ulagan,1876,AL,182,RU,50.63258,87.96046 97666,Arkhara,1858,AMU,182,RU,49.42447,130.08569 97667,Arkharinskiy Rayon,1858,AMU,182,RU,49.5,130.66667 97853,Belogorsk,1858,AMU,182,RU,50.91644,128.47726 97854,Belogorskiy Rayon,1858,AMU,182,RU,50.75,128.5 97949,Blagoveshchensk,1858,AMU,182,RU,50.27961,127.5405 97950,Blagoveshchenskiy Rayon,1858,AMU,182,RU,50.75,127.5 98079,Bureya,1858,AMU,182,RU,49.81212,129.81278 98080,Bureyskiy Rayon,1858,AMU,182,RU,50.0,130.0 98383,Ekimchan,1858,AMU,182,RU,53.06972,132.94011 98546,Gorod Blagoveshchensk,1858,AMU,182,RU,50.4,127.6 98554,Gorod Raychikhinsk,1858,AMU,182,RU,49.75,129.41667 98733,Ivanovskiy Rayon,1858,AMU,182,RU,50.45611,127.99778 99187,Konstantinovka,1858,AMU,182,RU,49.61876,127.99025 99193,Konstantinovskiy Rayon,1858,AMU,182,RU,49.75,128.16667 99735,Magdagachi,1858,AMU,182,RU,53.45398,125.80932 99736,Magdagachinskiy Rayon,1858,AMU,182,RU,53.33333,126.0 99837,Mazanovskiy Rayon,1858,AMU,182,RU,52.16667,129.5 99904,Mikhaylovskiy Rayon,1858,AMU,182,RU,49.75,128.75 100117,Never,1858,AMU,182,RU,53.97946,124.15777 100232,Novobureyskiy,1858,AMU,182,RU,49.79695,129.87443 100287,Novoraychikhinsk,1858,AMU,182,RU,49.78423,129.59051 100414,Oktyabr’skiy Rayon,1858,AMU,182,RU,50.33333,129.0 100514,Ovsyanka,1858,AMU,182,RU,53.57868,126.89623 100797,Poyarkovo,1858,AMU,182,RU,49.62678,128.65352 100946,Raychikhinsk,1858,AMU,182,RU,49.78998,129.40992 100992,Romnenskiy Rayon,1858,AMU,182,RU,51.0,130.0 100993,Romny,1858,AMU,182,RU,50.7207,129.29122 101150,Selemdzhinskiy Rayon,1858,AMU,182,RU,52.5,132.0 101194,Seryshevo,1858,AMU,182,RU,51.09391,128.38258 101195,Seryshevskiy Rayon,1858,AMU,182,RU,51.16667,128.5 101318,Shimanovsk,1858,AMU,182,RU,52.00575,127.67756 101319,Shimanovskiy Rayon,1858,AMU,182,RU,52.16667,127.5 101330,Shirokiy,1858,AMU,182,RU,49.75907,129.51988 101383,Sivaki,1858,AMU,182,RU,52.6343,126.74777 101392,Skovorodino,1858,AMU,182,RU,53.98473,123.9403 101393,Skovorodinskiy Rayon,1858,AMU,182,RU,53.83333,123.5 101467,Solovjevsk,1858,AMU,182,RU,54.23333,124.43333 101541,Srednebelaya,1858,AMU,182,RU,50.65854,128.00932 101712,Svobodnenskiy Rayon,1858,AMU,182,RU,51.5,127.83333 101714,Svobodnyy,1858,AMU,182,RU,51.37525,128.14097 101744,Takhtamygda,1858,AMU,182,RU,54.11031,123.60802 101746,Talakan,1858,AMU,182,RU,50.26378,130.26755 101749,Taldan,1858,AMU,182,RU,53.68981,124.8149 101763,Tambovka,1858,AMU,182,RU,50.09968,128.05724 101764,Tambovskiy Rayon,1858,AMU,182,RU,50.08333,128.0 101875,Tokur,1858,AMU,182,RU,53.13531,132.88996 101950,Tsiolkovskiy,1858,AMU,182,RU,51.76694,128.11472 101991,Tygda,1858,AMU,182,RU,53.11169,126.32907 101993,Tynda,1858,AMU,182,RU,55.156,124.72479 101994,Tyndinskiy Rayon,1858,AMU,182,RU,55.33333,123.5 102089,Urusha,1858,AMU,182,RU,54.05303,122.88561 102095,Ushumun,1858,AMU,182,RU,52.78633,126.53767 102528,Yekaterinoslavka,1858,AMU,182,RU,50.37344,129.10957 102570,Yerofey Pavlovich,1858,AMU,182,RU,53.96305,121.95805 102673,Zavitinsk,1858,AMU,182,RU,50.11118,129.44156 102674,Zavitinskiy Rayon,1858,AMU,182,RU,50.16667,129.5 102708,Zeya,1858,AMU,182,RU,53.73601,127.257 102709,Zeyskiy Rayon,1858,AMU,182,RU,54.5,128.5 97664,Arkhangel’sk,1849,ARK,182,RU,64.5401,40.5433 97903,Berëznik,1849,ARK,182,RU,62.852,42.7071 98153,Cheremushskiy,1849,ARK,182,RU,61.27306,47.26361 98358,Dvinskoy,1849,ARK,182,RU,62.1519,45.1184 98655,Il’insko-Podomskoye,1849,ARK,182,RU,61.11444,47.97861 98646,Ileza,1849,ARK,182,RU,61.05328,43.90021 98698,Isakogorka,1849,ARK,182,RU,64.446,40.6531 98809,Kamenka,1849,ARK,182,RU,65.8835,44.1272 98879,Kargopol’,1849,ARK,182,RU,61.50359,38.9486 98880,Kargopol’skiy Rayon,1849,ARK,182,RU,61.33333,39.0 98884,Karpogory,1849,ARK,182,RU,64.00189,44.44513 98909,Katunino,1849,ARK,182,RU,64.3862,40.6298 98964,Kharitonovo,1849,ARK,182,RU,61.40092,47.49779 98994,Kholmogorskiy Rayon,1849,ARK,182,RU,64.08333,41.66667 98995,Kholmogory,1849,ARK,182,RU,64.2229,41.656 99088,Kizema,1849,ARK,182,RU,61.11304,44.83017 99126,Kodino,1849,ARK,182,RU,63.71976,39.64465 99197,Konëvo,1849,ARK,182,RU,62.11745,39.33131 99186,Konosha,1849,ARK,182,RU,60.9736,40.257 99221,Koryazhma,1849,ARK,182,RU,61.31433,47.16914 99246,Kotlas,1849,ARK,182,RU,61.25745,46.64963 99247,Kotlasskiy Rayon,1849,ARK,182,RU,61.16667,46.33333 99297,Krasnoborsk,1849,ARK,182,RU,61.55978,45.93396 99435,Kuloy,1849,ARK,182,RU,61.03049,42.49252 99580,Lenskiy Rayon,1849,ARK,182,RU,62.0,48.66667 99588,Leshukonskiy Rayon,1849,ARK,182,RU,65.0,47.0 99589,Leshukonskoye,1849,ARK,182,RU,64.8977,45.7655 99675,Loyga,1849,ARK,182,RU,61.07845,44.6075 99689,Lukovetskiy,1849,ARK,182,RU,64.2956,41.9211 99876,Mezen’,1849,ARK,182,RU,65.8401,44.2542 99875,Mezenskiy Rayon,1849,ARK,182,RU,65.75,44.0 99924,Mirnyy,1849,ARK,182,RU,61.33289,44.53598 100240,Novodvinsk,1849,ARK,182,RU,64.4165,40.8122 100374,Nyandoma,1849,ARK,182,RU,61.6656,40.2013 100375,Nyandomskiy Rayon,1849,ARK,182,RU,62.0,40.66667 100407,Oksovskiy,1849,ARK,182,RU,62.60623,39.89845 100446,Onega,1849,ARK,182,RU,63.90692,38.11112 100447,Onezhskiy Rayon,1849,ARK,182,RU,63.33333,38.0 100675,Pinega,1849,ARK,182,RU,64.69969,43.39016 100677,Pinezhskiy Rayon,1849,ARK,182,RU,64.66667,43.0 100701,Plesetsk,1849,ARK,182,RU,62.70804,40.29159 100734,Podyuga,1849,ARK,182,RU,61.095,40.86472 100834,Primorskiy Rayon,1849,ARK,182,RU,65.0,41.0 100845,Privodino,1849,ARK,182,RU,61.07599,46.50238 100890,Puksoozero,1849,ARK,182,RU,62.5903,40.6066 100972,Rochegda,1849,ARK,182,RU,62.6678,43.4133 101089,Samoded,1849,ARK,182,RU,63.6083,40.5111 101217,Severodvinsk,1849,ARK,182,RU,64.5635,39.8302 101243,Shalakusha,1849,ARK,182,RU,62.22472,40.25389 101256,Shangaly,1849,ARK,182,RU,61.12842,43.33427 101300,Shenkursk,1849,ARK,182,RU,62.1091,42.89595 101301,Shenkurskiy Rayon,1849,ARK,182,RU,62.25,42.41667 101323,Shipitsyno,1849,ARK,182,RU,61.28056,46.52083 101474,Sol’vychegodsk,1849,ARK,182,RU,61.33046,46.91559 101448,Solginskiy,1849,ARK,182,RU,61.05,41.34278 102022,Udimskiy,1849,ARK,182,RU,61.14171,45.91443 102074,Urdoma,1849,ARK,182,RU,61.75335,48.5442 102138,Ust’-Shonosha,1849,ARK,182,RU,61.1531,41.343 102144,Ust’yanskiy Rayon,1849,ARK,182,RU,61.33333,43.66667 102162,Uyemskiy,1849,ARK,182,RU,64.4743,40.8524 102203,Vas’kovo,1849,ARK,182,RU,64.4122,40.4639 102221,Vel’sk,1849,ARK,182,RU,61.07006,42.0983 102222,Vel’skiy Rayon,1849,ARK,182,RU,61.0,42.0 102274,Verkhnyaya Toyma,1849,ARK,182,RU,62.2347,45.0009 102360,Voloshka,1849,ARK,182,RU,61.33139,40.08583 102427,Vychegodskiy,1849,ARK,182,RU,61.24702,46.89842 102462,Yagry,1849,ARK,182,RU,64.59417,39.81028 102494,Yarensk,1849,ARK,182,RU,62.16755,49.09162 102557,Yemetsk,1849,ARK,182,RU,63.47191,41.78023 102558,Yemtsa,1849,ARK,182,RU,63.07337,40.33285 102575,Yertsevo,1849,ARK,182,RU,60.7966,40.086 97530,Akhtubinsk,1866,AST,182,RU,48.27955,46.17217 97531,Akhtubinskiy Rayon,1866,AST,182,RU,48.16667,46.25 97539,Aksarayskiy,1866,AST,182,RU,46.79244,48.01188 97706,Astrakhan,1866,AST,182,RU,46.34968,48.04076 98228,Chyorny Yar,1866,AST,182,RU,48.06242,46.10911 98640,Ikryanoye,1866,AST,182,RU,46.09323,47.73078 98831,Kamyzyak,1866,AST,182,RU,46.10995,48.07364 98849,Kapustin Yar,1866,AST,182,RU,48.58175,45.74481 98867,Karalat,1866,AST,182,RU,45.91555,48.30683 98963,Kharabali,1866,AST,182,RU,47.41958,47.25678 99067,Kirovskiy,1866,AST,182,RU,45.84639,48.12472 99347,Krasnoyarskiy Rayon,1866,AST,182,RU,46.83333,48.25 99377,Krasnyy Yar,1866,AST,182,RU,46.53314,48.34559 99382,Krasnyye Barrikady,1866,AST,182,RU,46.2045,47.8535 99628,Liman,1866,AST,182,RU,45.78457,47.22405 99629,Limanskiy Rayon,1866,AST,182,RU,45.83333,47.25 99792,Marfino,1866,AST,182,RU,46.40852,48.71398 100002,Mumra,1866,AST,182,RU,45.77251,47.65398 100038,Nachalovo,1866,AST,182,RU,46.338,48.20128 100058,Narimanov,1866,AST,182,RU,46.6927,47.8498 100163,Nizhniy Baskunchak,1866,AST,182,RU,48.21978,46.83105 100456,Oranzherei,1866,AST,182,RU,45.84756,47.56635 100752,Poldnëvoye,1866,AST,182,RU,45.85568,47.95241 100849,Privolzhskiy Rayon,1866,AST,182,RU,46.25,48.16667 101129,Sasykoli,1866,AST,182,RU,47.55153,46.99679 101386,Sizyy Bugor,1866,AST,182,RU,46.21343,48.50462 101471,Solyanka,1866,AST,182,RU,46.3889,48.01755 101583,Starokucherganovka,1866,AST,182,RU,46.32476,47.9555 101762,Tambovka,1866,AST,182,RU,47.31528,47.37773 101931,Trudfront,1866,AST,182,RU,45.9346,47.66929 101968,Tumak,1866,AST,182,RU,46.23436,48.50627 102156,Uvary,1866,AST,182,RU,46.04575,48.03558 102250,Verkhniy Baskunchak,1866,AST,182,RU,48.22564,46.72169 102343,Volgo-Kaspiyskiy,1866,AST,182,RU,46.20306,47.91869 102352,Volodarskiy,1866,AST,182,RU,46.40134,48.54093 102472,Yaksatovo,1866,AST,182,RU,46.24343,48.01514 102482,Yandyki,1866,AST,182,RU,45.76913,47.12577 102562,Yenotayevka,1866,AST,182,RU,47.24559,47.02814 102706,Zenzeli,1866,AST,182,RU,45.92407,47.04739 102759,Znamensk,1866,AST,182,RU,48.5842,45.7338 97579,Alekseyevka,1903,BEL,182,RU,50.6309,38.6903 97837,Bekhteyevka,1903,BEL,182,RU,50.80758,37.21789 97848,Belgorod,1903,BEL,182,RU,50.61074,36.58015 97849,Belgorodskiy Rayon,1903,BEL,182,RU,50.5,36.5 97914,Bessonovka,1903,BEL,182,RU,50.52644,36.30107 98028,Borisovka,1903,BEL,182,RU,50.60155,36.01549 98029,Borisovskiy Rayon,1903,BEL,182,RU,50.58333,36.0 98178,Chernyanka,1903,BEL,182,RU,50.94095,37.80693 98179,Chernyanskiy Rayon,1903,BEL,182,RU,51.0,37.91667 98507,Golovchino,1903,BEL,182,RU,50.5341,35.797 98577,Grayvoron,1903,BEL,182,RU,50.4767,35.6773 98578,Grayvoronskiy Rayon,1903,BEL,182,RU,50.5,35.66667 98603,Gubkin,1903,BEL,182,RU,51.28167,37.54583 98647,Ilovka,1903,BEL,182,RU,50.7053,38.637 98739,Ivnya,1903,BEL,182,RU,51.06294,36.13426 98740,Ivnyanskiy Rayon,1903,BEL,182,RU,51.0,36.25 99212,Korocha,1903,BEL,182,RU,50.8132,37.18598 99213,Korochanskiy Rayon,1903,BEL,182,RU,50.83333,37.25 99286,Krasnaya Yaruga,1903,BEL,182,RU,50.80083,35.65833 99288,Krasnenskiy Rayon,1903,BEL,182,RU,50.91667,38.58333 99314,Krasnogvardeyskiy Rayon,1903,BEL,182,RU,50.66667,38.33333 99318,Krasnogvardeyskoye,1903,BEL,182,RU,50.6492,38.4036 99348,Krasnoyaruzhskiy Rayon,1903,BEL,182,RU,50.83333,35.5 99350,Krasnoye,1903,BEL,182,RU,50.9297,38.6817 99643,Livenka,1903,BEL,182,RU,50.4491,38.2959 99810,Maslova Pristan’,1903,BEL,182,RU,50.45758,36.72038 99831,Mayskiy,1903,BEL,182,RU,50.51988,36.45878 100210,Novaya Tavolzhanka,1903,BEL,182,RU,50.35123,36.8298 100276,Novooskol’skiy Rayon,1903,BEL,182,RU,50.75,37.83333 100348,Novyy Oskol,1903,BEL,182,RU,50.7633,37.86402 100857,Prokhorovka,1903,BEL,182,RU,51.03741,36.73252 100858,Prokhorovskiy Rayon,1903,BEL,182,RU,51.00447,36.74875 100864,Proletarskiy,1903,BEL,182,RU,50.79139,35.77306 100911,Pyatnitskoye,1903,BEL,182,RU,50.4233,37.8273 100932,Rakitnoye,1903,BEL,182,RU,50.8389,35.8515 100933,Rakityanskiy Rayon,1903,BEL,182,RU,50.83333,35.91667 100952,Razumnoye,1903,BEL,182,RU,50.53439,36.68462 100984,Rogovatoye,1903,BEL,182,RU,51.23,38.3818 101010,Roven’skiy Rayon,1903,BEL,182,RU,50.0,39.0 101208,Severnyy,1903,BEL,182,RU,50.67704,36.55324 101284,Shebekino,1903,BEL,182,RU,50.40967,36.9136 101285,Shebekinskiy Rayon,1903,BEL,182,RU,50.5,37.0 101390,Skorodnoye,1903,BEL,182,RU,51.07101,37.22756 101607,Staryy Oskol,1903,BEL,182,RU,51.29667,37.84167 101631,Stroitel’,1903,BEL,182,RU,50.78543,36.4831 101883,Tomarovka,1903,BEL,182,RU,50.68338,36.23309 101917,Troitskiy,1903,BEL,182,RU,51.3588,37.5253 102073,Urazovo,1903,BEL,182,RU,50.0836,38.0395 102183,Valuyki,1903,BEL,182,RU,50.2035,38.1067 102184,Valuyskiy Rayon,1903,BEL,182,RU,50.16667,38.0 102299,Veydelevka,1903,BEL,182,RU,50.1521,38.4492 102358,Volokonovka,1903,BEL,182,RU,50.4827,37.8563 102359,Volokonovskiy Rayon,1903,BEL,182,RU,50.5,37.83333 102467,Yakovlevo,1903,BEL,182,RU,50.86033,36.44784 102469,Yakovlevskiy Rayon,1903,BEL,182,RU,50.83333,36.41667 102665,Zasosna,1903,BEL,182,RU,50.6307,38.3965 97606,Altukhovo,1867,BRY,182,RU,52.67559,34.36703 97659,Ardon’,1867,BRY,182,RU,52.73524,32.30857 97882,Belyye Berega,1867,BRY,182,RU,53.20851,34.66405 98051,Brasovskiy Rayon,1867,BRY,182,RU,52.66667,34.75 98060,Bryansk,1867,BRY,182,RU,53.25209,34.37167 98061,Bryanskiy Rayon,1867,BRY,182,RU,53.25,34.41667 98104,Bytosh’,1867,BRY,182,RU,53.81861,34.09116 98226,Churovichi,1867,BRY,182,RU,52.1693,31.9926 98295,Dobrun’,1867,BRY,182,RU,53.18512,34.24625 98345,Dubrovka,1867,BRY,182,RU,53.6907,33.5071 98346,Dubrovskiy Rayon,1867,BRY,182,RU,53.66667,33.41667 98362,Dyat’kovo,1867,BRY,182,RU,53.59782,34.33825 98363,Dyat’kovskiy Rayon,1867,BRY,182,RU,53.66667,34.25 98498,Glinishchevo,1867,BRY,182,RU,53.30416,34.06523 98520,Gordeyevka,1867,BRY,182,RU,52.9569,31.9703 98521,Gordeyevskiy Rayon,1867,BRY,182,RU,52.91667,31.91667 98547,Gorod Bryansk,1867,BRY,182,RU,53.25,34.41667 98550,Gorod Dyat’kovo,1867,BRY,182,RU,53.6,34.35 98729,Ivanovka,1867,BRY,182,RU,53.34694,34.21917 98743,Ivot,1867,BRY,182,RU,53.67556,34.18722 98859,Karachev,1867,BRY,182,RU,53.12292,34.98517 99098,Kletnya,1867,BRY,182,RU,53.38967,33.21714 99099,Kletnyanskiy Rayon,1867,BRY,182,RU,53.33333,33.16667 99101,Klimovo,1867,BRY,182,RU,52.38053,32.19233 99103,Klimovskiy Rayon,1867,BRY,182,RU,52.25,32.16667 99106,Klintsovskiy Rayon,1867,BRY,182,RU,52.75,32.16667 99107,Klintsy,1867,BRY,182,RU,52.76019,32.23935 99130,Kokino,1867,BRY,182,RU,52.4964,34.7808 99131,Kokorevka,1867,BRY,182,RU,52.5874,34.2692 99158,Komarichi,1867,BRY,182,RU,52.4151,34.7905 99159,Komarichskiy Rayon,1867,BRY,182,RU,52.41667,34.75 99223,Korzhovka-Golubovka,1867,BRY,182,RU,52.76742,32.35362 99277,Krasnaya Gora,1867,BRY,182,RU,52.9995,31.6023 99308,Krasnogorskiy Rayon,1867,BRY,182,RU,53.0,31.5 99654,Lokot’,1867,BRY,182,RU,52.565,34.5776 99661,Lopandino,1867,BRY,182,RU,52.4666,34.8163 99719,Lyubokhna,1867,BRY,182,RU,53.50332,34.38847 99720,Lyubovsho,1867,BRY,182,RU,52.9851,31.5422 99887,Mglin,1867,BRY,182,RU,53.05907,32.84753 99888,Mglinskiy Rayon,1867,BRY,182,RU,53.16667,32.83333 100071,Navlinskiy Rayon,1867,BRY,182,RU,52.83333,34.41667 100072,Navlya,1867,BRY,182,RU,52.82544,34.4996 100114,Net’inka,1867,BRY,182,RU,53.34778,34.19111 100337,Novozybkov,1867,BRY,182,RU,52.5396,31.9275 100338,Novozybkovskiy Rayon,1867,BRY,182,RU,52.58333,31.83333 100349,Novyy Ropsk,1867,BRY,182,RU,52.29781,32.31206 100706,Pochep,1867,BRY,182,RU,52.9336,33.4464 100707,Pochepskiy Rayon,1867,BRY,182,RU,52.91667,33.5 100735,Pogar,1867,BRY,182,RU,52.55399,33.25907 100736,Pogarskiy Rayon,1867,BRY,182,RU,52.5,33.25 100907,Putëvka,1867,BRY,182,RU,53.25833,34.28778 100924,Raditsa-Krylovka,1867,BRY,182,RU,53.31712,34.35742 100982,Rognedino,1867,BRY,182,RU,53.80147,33.5576 100983,Rognedinskiy Rayon,1867,BRY,182,RU,53.83333,33.66667 101058,Rzhanitsa,1867,BRY,182,RU,53.42844,33.92297 101063,Sachkovichi,1867,BRY,182,RU,52.3459,32.2246 101161,Sel’tso,1867,BRY,182,RU,53.36831,34.10328 101198,Seshcha,1867,BRY,182,RU,53.7361,33.3387 101224,Sevsk,1867,BRY,182,RU,52.1491,34.4926 101225,Sevskiy Rayon,1867,BRY,182,RU,52.08333,34.41667 101612,Star’,1867,BRY,182,RU,53.62362,34.15183 101577,Starodub,1867,BRY,182,RU,52.58444,32.76333 101578,Starodubskiy Rayon,1867,BRY,182,RU,52.5,32.75 101671,Suponevo,1867,BRY,182,RU,53.20492,34.29597 101673,Surazh,1867,BRY,182,RU,53.01747,32.39178 101674,Surazhskiy Rayon,1867,BRY,182,RU,53.08333,32.41667 101694,Suzëmka,1867,BRY,182,RU,52.31834,34.07899 101692,Suzemskiy Rayon,1867,BRY,182,RU,52.41667,34.16667 101697,Sven’,1867,BRY,182,RU,53.18222,34.55111 101928,Trubchevsk,1867,BRY,182,RU,52.5798,33.7644 101929,Trubchevskiy Rayon,1867,BRY,182,RU,52.58333,33.75 102058,Unecha,1867,BRY,182,RU,52.84591,32.67394 102059,Unechskiy Rayon,1867,BRY,182,RU,52.83333,32.83333 102430,Vygonichi,1867,BRY,182,RU,53.09855,34.06728 102431,Vygonichskiy Rayon,1867,BRY,182,RU,53.08333,34.0 102440,Vyshkov,1867,BRY,182,RU,52.4764,31.6873 102640,Zamishevo,1867,BRY,182,RU,52.5395,32.0129 102686,Zaymishche,1867,BRY,182,RU,52.7264,32.2334 102735,Zhiryatino,1867,BRY,182,RU,53.2228,33.7306 102736,Zhiryatinskiy Rayon,1867,BRY,182,RU,53.25,33.58333 102741,Zhukovka,1867,BRY,182,RU,53.53395,33.72798 102744,Zhukovskiy Rayon,1867,BRY,182,RU,53.5,33.83333 102751,Zlynka,1867,BRY,182,RU,52.4267,31.7378 97499,Achkhoy-Martan,1893,CE,182,RU,43.18997,45.28373 97500,Achkhoy-Martanovskiy Rayon,1893,CE,182,RU,43.08333,45.25 97593,Alkhan-Kala,1893,CE,182,RU,43.25861,45.53917 97594,Alkhan-Yurt,1893,CE,182,RU,43.23179,45.57228 97595,Alkhazurovo,1893,CE,182,RU,43.0639,45.65134 97597,Alleroy,1893,CE,182,RU,43.21711,46.28209 97601,Alpatovo,1893,CE,182,RU,43.7028,45.24154 97662,Argun,1893,CE,182,RU,43.29713,45.87454 97705,Assinovskaya,1893,CE,182,RU,43.24167,45.18194 97725,Avtury,1893,CE,182,RU,43.16345,46.00152 97749,Bachi-Yurt,1893,CE,182,RU,43.22417,46.19423 97787,Bamut,1893,CE,182,RU,43.15986,45.19734 97847,Belgatoy,1893,CE,182,RU,43.18995,45.83082 97886,Benoy-Yurt,1893,CE,182,RU,43.69305,45.05025 98045,Borzoy,1893,CE,182,RU,42.84147,45.62746 98130,Chechen-Aul,1893,CE,182,RU,43.2,45.78889 98196,Chiri-Yurt,1893,CE,182,RU,43.08869,45.74323 98333,Duba-Yurt,1893,CE,182,RU,43.03534,45.73046 98365,Dyshne-Vedeno,1893,CE,182,RU,42.96435,46.11578 98373,Dzhalka,1893,CE,182,RU,43.3186,45.98787 98388,Elin-Yurt,1893,CE,182,RU,43.67306,44.95889 98397,Engel’-Yurt,1893,CE,182,RU,43.32633,46.36048 98473,Gekhi,1893,CE,182,RU,43.16354,45.47238 98484,Germenchuk,1893,CE,182,RU,43.1857,45.921 98485,Gerzel’-Aul,1893,CE,182,RU,43.24728,46.40249 98516,Goragorskiy,1893,CE,182,RU,43.5002,45.08574 98573,Goyty,1893,CE,182,RU,43.16417,45.62278 98582,Grebenskaya,1893,CE,182,RU,43.53086,46.37174 98593,Groznenskiy Rayon,1893,CE,182,RU,43.33333,45.5 98594,Groznyy,1893,CE,182,RU,43.31195,45.68895 98606,Gudermes,1893,CE,182,RU,43.35071,46.10925 98607,Gudermesskiy Rayon,1893,CE,182,RU,43.33333,46.16667 98644,Ilaskhan-Yurt,1893,CE,182,RU,43.2791,46.10229 98702,Ishcherskaya,1893,CE,182,RU,43.71359,45.13371 98707,Ishkhoy-Yurt,1893,CE,182,RU,43.21278,46.38936 98724,Itum-Kali,1893,CE,182,RU,42.73552,45.57574 98725,Itum-Kalinskiy Rayon,1893,CE,182,RU,42.73611,45.5725 98794,Kalinovskaya,1893,CE,182,RU,43.57383,45.5209 98876,Kargalinskaya,1893,CE,182,RU,43.74381,46.47821 98911,Katyr-Yurt,1893,CE,182,RU,43.17164,45.36991 98956,Khambi-Irze,1893,CE,182,RU,43.23502,45.45302 98960,Khankala,1893,CE,182,RU,43.30212,45.75564 99429,Kulary,1893,CE,182,RU,43.23972,45.50417 99456,Kurchaloy,1893,CE,182,RU,43.20184,46.0881 99537,Lakha Nëvre,1893,CE,182,RU,43.62271,45.33969 99541,Lakkha Nëvre,1893,CE,182,RU,43.61033,45.24542 99804,Martan-Chu,1893,CE,182,RU,43.06366,45.56217 99829,Mayrtup,1893,CE,182,RU,43.20348,46.13215 99871,Mesker-Yurt,1893,CE,182,RU,43.25147,45.90716 100041,Nadterechnyy Rayon,1893,CE,182,RU,43.58333,45.25 100067,Naurskaya,1893,CE,182,RU,43.65075,45.31173 100068,Naurskiy Rayon,1893,CE,182,RU,43.66667,45.5 100189,Nogamerzin-Yurt,1893,CE,182,RU,43.65361,44.88889 100356,Novyye Atagi,1893,CE,182,RU,43.13528,45.77306 100365,Nozhay-Yurt,1893,CE,182,RU,43.0929,46.37868 100366,Nozhay-Yurtovskiy Rayon,1893,CE,182,RU,43.08333,46.41667 100516,Oyskhara,1893,CE,182,RU,43.26402,46.24803 100615,Pervomayskaya,1893,CE,182,RU,43.40331,45.52343 100654,Petropavlovskaya,1893,CE,182,RU,43.37944,45.82611 100820,Prigorodnoye,1893,CE,182,RU,43.25303,45.75808 101000,Roshni-Chu,1893,CE,182,RU,43.08954,45.45435 101087,Samashki,1893,CE,182,RU,43.28935,45.29786 101186,Sernovodsk,1893,CE,182,RU,43.31277,45.15969 101196,Serzhen’-Yurt,1893,CE,182,RU,43.12265,45.98583 101227,Shaami-Yurt,1893,CE,182,RU,43.22647,45.38815 101244,Shalazhi,1893,CE,182,RU,43.09476,45.35898 101245,Shali,1893,CE,182,RU,43.14806,45.90194 101246,Shalinskiy Rayon,1893,CE,182,RU,43.16667,45.91667 101269,Shatoy,1893,CE,182,RU,42.87143,45.68865 101365,Shëlkovskaya,1893,CE,182,RU,43.50804,46.34016 101292,Shelkovskiy Rayon,1893,CE,182,RU,43.58333,46.0 101566,Staraya Sunzha,1893,CE,182,RU,43.33542,45.74377 101610,Staryye Atagi,1893,CE,182,RU,43.12028,45.74056 101880,Tolstoy-Yurt,1893,CE,182,RU,43.44548,45.77901 101943,Tsentoroy,1893,CE,182,RU,43.00658,46.22235 101953,Tsotsin-Yurt,1893,CE,182,RU,43.24206,46.00013 102087,Urus-Martan,1893,CE,182,RU,43.13053,45.53791 102088,Urus-Martanovskiy Rayon,1893,CE,182,RU,43.08333,45.58333 102182,Valerik,1893,CE,182,RU,43.17972,45.40806 102208,Vedeno,1893,CE,182,RU,42.96892,46.09611 102209,Vedenskiy Rayon,1893,CE,182,RU,43.0,46.08333 102474,Yalkhoy-Mokhk,1893,CE,182,RU,43.10528,46.19045 102634,Zakan-Yurt,1893,CE,182,RU,43.26224,45.42307 102642,Zandak,1893,CE,182,RU,43.0571,46.45566 102761,Znamenskoye,1893,CE,182,RU,43.67898,45.12867 97513,Agapovka,1845,CHE,182,RU,53.2973,59.1348 97514,Agapovskiy Rayon,1845,CHE,182,RU,53.33333,59.33333 97660,Argayash,1845,CHE,182,RU,55.4888,60.8767 97696,Asha,1845,CHE,182,RU,54.9973,57.2722 97698,Ashinskiy Rayon,1845,CHE,182,RU,55.0,57.5 97756,Bakal,1845,CHE,182,RU,54.9417,58.8083 97832,Bazhovo,1845,CHE,182,RU,55.05955,61.60445 97889,Berdyaush,1845,CHE,182,RU,55.1619,59.1464 97957,Bobrovka,1845,CHE,182,RU,54.047,61.7455 98054,Bredy,1845,CHE,182,RU,52.41528,60.34111 98057,Brodokalmak,1845,CHE,182,RU,55.5748,62.082 98125,Chebarkul’,1845,CHE,182,RU,54.9749,60.3633 98126,Chebarkul’skiy Rayon,1845,CHE,182,RU,54.83333,60.5 98140,Chelyabinsk,1845,CHE,182,RU,55.15402,61.42915 98151,Cheremshanka,1845,CHE,182,RU,56.1192,60.26804 98192,Chesma,1845,CHE,182,RU,53.81111,60.65333 98299,Dolgoderevenskoye,1845,CHE,182,RU,55.34444,61.34444 98421,Fershampenuaz,1845,CHE,182,RU,53.5202,59.8117 98536,Gornyak,1845,CHE,182,RU,55.13446,61.68268 98549,Gorod Chelyabinsk,1845,CHE,182,RU,55.16553,61.41673 98834,Kanashevo,1845,CHE,182,RU,55.2169,62.0634 98853,Karabash,1845,CHE,182,RU,55.4808,60.2157 98887,Kartalinskiy Rayon,1845,CHE,182,RU,53.0,60.5 98888,Kartaly,1845,CHE,182,RU,53.05285,60.64903 98899,Kasli,1845,CHE,182,RU,55.8909,60.7616 98906,Katav-Ivanovsk,1845,CHE,182,RU,54.75306,58.19556 98907,Katav-Ivanovskiy Rayon,1845,CHE,182,RU,54.75,58.25 99092,Kizil’skiy Rayon,1845,CHE,182,RU,52.75,59.41667 99199,Kopeysk,1845,CHE,182,RU,55.11722,61.62823 99207,Korkino,1845,CHE,182,RU,54.8913,61.3969 99257,Koyelga,1845,CHE,182,RU,54.65224,60.9049 99306,Krasnogorskiy,1845,CHE,182,RU,54.6025,61.231 99398,Kropachëvo,1845,CHE,182,RU,55.0112,57.9896 99445,Kunashak,1845,CHE,182,RU,55.7032,61.5498 99483,Kusa,1845,CHE,182,RU,55.33833,59.44056 99521,Kyshtym,1845,CHE,182,RU,55.714,60.5528 99568,Leninsk,1845,CHE,182,RU,54.90306,59.8675 99652,Lokomotivnyy,1845,CHE,182,RU,53.0118,60.5684 99738,Magnitka,1845,CHE,182,RU,55.3475,59.69611 99739,Magnitogorsk,1845,CHE,182,RU,53.41861,59.04722 99883,Mezhevoy,1845,CHE,182,RU,55.17111,58.78139 99889,Miass,1845,CHE,182,RU,55.045,60.10833 99890,Miasskoye,1845,CHE,182,RU,55.2784,61.8905 100020,Muslyumovo,1845,CHE,182,RU,55.6133,61.626 100045,Nagaybakskiy Rayon,1845,CHE,182,RU,53.58333,59.75 100177,Nizhniy Ufaley,1845,CHE,182,RU,55.91528,59.98417 100244,Novogornyy,1845,CHE,182,RU,55.63,60.7919 100306,Novosineglazovskiy,1845,CHE,182,RU,55.03928,61.3768 100376,Nyazepetrovsk,1845,CHE,182,RU,56.05306,59.60278 100377,Nyazepetrovskiy Rayon,1845,CHE,182,RU,56.0,59.58333 100413,Oktyabr’skiy Rayon,1845,CHE,182,RU,54.41667,62.75 100519,Ozersk,1845,CHE,182,RU,55.75556,60.70278 100550,Parizh,1845,CHE,182,RU,53.2974,60.1005 100694,Plast,1845,CHE,182,RU,54.36914,60.81361 100754,Poletayevo,1845,CHE,182,RU,55.0336,61.1138 100789,Potanino,1845,CHE,182,RU,55.1786,61.6222 100999,Roshchino,1845,CHE,182,RU,55.31012,61.26363 101012,Roza,1845,CHE,182,RU,54.9163,61.4586 101118,Sargazy,1845,CHE,182,RU,55.02064,61.24985 101132,Satka,1845,CHE,182,RU,55.0425,59.04 101133,Satkinskiy Rayon,1845,CHE,182,RU,55.0,59.0 101154,Selezyan,1845,CHE,182,RU,54.90583,61.82444 101370,Sim,1845,CHE,182,RU,54.993,57.6982 101423,Snezhinsk,1845,CHE,182,RU,56.085,60.73139 101496,Sosnovskiy Rayon,1845,CHE,182,RU,55.25,61.16667 101581,Starokamyshinsk,1845,CHE,182,RU,55.03912,61.58778 101729,Syrostan,1845,CHE,182,RU,55.0634,59.9002 101803,Tayginka,1845,CHE,182,RU,55.6244,60.5076 101859,Timiryazevskiy,1845,CHE,182,RU,54.92917,60.7625 101935,Trëkhgornyy,1845,CHE,182,RU,54.815,58.45917 101914,Troitsk,1845,CHE,182,RU,54.0979,61.5773 101975,Turgoyak,1845,CHE,182,RU,55.15,60.11833 101999,Tyubuk,1845,CHE,182,RU,56.05521,60.9405 102114,Ust’-Bagaryak,1845,CHE,182,RU,56.13278,61.84722 102129,Ust’-Katav,1845,CHE,182,RU,54.9366,58.1757 102158,Uvel’skiy,1845,CHE,182,RU,54.4446,61.3574 102159,Uvel’skiy Rayon,1845,CHE,182,RU,54.5,61.5 102163,Uyskiy Rayon,1845,CHE,182,RU,54.33333,60.08333 102164,Uyskoye,1845,CHE,182,RU,54.3775,60.00472 102176,Vakhrushevo,1845,CHE,182,RU,55.2317,61.7173 102192,Varna,1845,CHE,182,RU,53.38194,60.97472 102195,Varnenskiy Rayon,1845,CHE,182,RU,53.25,61.08333 102217,Velikopetrovka,1845,CHE,182,RU,53.25042,60.48606 102242,Verkhneural’sk,1845,CHE,182,RU,53.87694,59.21056 102258,Verkhniy Ufaley,1845,CHE,182,RU,56.0556,60.2397 102318,Vishnëvogorsk,1845,CHE,182,RU,55.9913,60.6579 102423,Vyazovaya,1845,CHE,182,RU,54.905,58.35611 102553,Yemanzhelinka,1845,CHE,182,RU,54.801,61.2989 102554,Yemanzhelinsk,1845,CHE,182,RU,54.75472,61.32083 102578,Yetkul’,1845,CHE,182,RU,54.8221,61.588 102601,Yuryuzan’,1845,CHE,182,RU,54.86333,58.42194 102617,Yuzhnoural’sk,1845,CHE,182,RU,54.4418,61.2536 102719,Zheleznodorozhnyy,1845,CHE,182,RU,55.10183,61.54926 102750,Zlatoust,1845,CHE,182,RU,55.17111,59.65083 97618,Anadyr,1859,CHU,182,RU,64.73424,177.5103 97619,Anadyrskiy Rayon,1859,CHU,182,RU,65.0,173.0 97897,Beringovskiy,1859,CHU,182,RU,63.06101,179.35046 97928,Bilibino,1859,CHU,182,RU,68.05464,166.43721 98381,Egvekinot,1859,CHU,182,RU,66.32166,-179.12198 99547,Lavrentiya,1859,CHU,182,RU,65.58604,-171.02082 99664,Lorino,1859,CHU,182,RU,65.50306,-171.70387 100669,Pevek,1859,CHU,182,RU,69.70287,170.29993 100872,Provideniya,1859,CHU,182,RU,64.42289,-173.22641 100873,Providenskiy Rayon,1859,CHU,182,RU,65.25,-175.0 97560,Alatyr’,1914,CU,182,RU,54.8421,46.5813 97559,Alatyrskiy Rayon,1914,CU,182,RU,54.91667,46.75 97590,Alikovo,1914,CU,182,RU,55.73827,46.75493 97591,Alikovskiy Rayon,1914,CU,182,RU,55.75,46.75 97714,Atlashevo,1914,CU,182,RU,56.01235,47.55615 97815,Batyrevo,1914,CU,182,RU,55.0675,47.61111 97816,Batyrevskiy Rayon,1914,CU,182,RU,55.08333,47.5 98070,Buinsk,1914,CU,182,RU,55.195,47.0608 98127,Cheboksarskiy Rayon,1914,CU,182,RU,56.08333,47.25 98128,Cheboksary,1914,CU,182,RU,56.13222,47.25194 98626,Ibresi,1914,CU,182,RU,55.3011,47.038 98627,Ibresinskiy Rayon,1914,CU,182,RU,55.25,47.0 98708,Ishley,1914,CU,182,RU,56.02317,47.05054 98833,Kanash,1914,CU,182,RU,55.50962,47.49127 98835,Kanashskiy Rayon,1914,CU,182,RU,55.5,47.41667 99076,Kirya,1914,CU,182,RU,55.08102,46.86091 99168,Komsomolskoye,1914,CU,182,RU,55.25667,47.54608 99176,Komsomol’skiy Rayon,1914,CU,182,RU,55.25,47.5 99266,Kozlovka,1914,CU,182,RU,55.84284,48.2492 99269,Kozlovskiy Rayon,1914,CU,182,RU,55.83333,48.16667 99294,Krasnoarmeyskiy Rayon,1914,CU,182,RU,55.75,47.16667 99295,Krasnoarmeyskoye,1914,CU,182,RU,55.76813,47.17244 99299,Krasnochetayskiy Rayon,1914,CU,182,RU,55.66667,46.25 99383,Krasnyye Chetai,1914,CU,182,RU,55.68871,46.13865 99424,Kugesi,1914,CU,182,RU,56.02895,47.29255 99796,Mariinskiy Posad,1914,CU,182,RU,56.11497,47.71805 99797,Mariinsko-Posadskiy Rayon,1914,CU,182,RU,55.91667,47.83333 99962,Morgaushi,1914,CU,182,RU,55.9643,46.7743 99963,Morgaushskiy Rayon,1914,CU,182,RU,56.0,46.75 100233,Novocheboksarsk,1914,CU,182,RU,56.11095,47.47755 100361,Novyye Lapsary,1914,CU,182,RU,56.0685,47.2142 100775,Poretskiy Rayon,1914,CU,182,RU,55.16667,46.41667 100776,Poretskoye,1914,CU,182,RU,55.19742,46.32908 101296,Shemursha,1914,CU,182,RU,54.88663,47.51893 101297,Shemurshinskiy Rayon,1914,CU,182,RU,54.91667,47.5 101311,Shikhazany,1914,CU,182,RU,55.56047,47.39297 101346,Shumerlinskiy Rayon,1914,CU,182,RU,55.5,46.5 101347,Shumerlya,1914,CU,182,RU,55.5005,46.41288 101951,Tsivil’sk,1914,CU,182,RU,55.86974,47.47874 101952,Tsivil’skiy Rayon,1914,CU,182,RU,55.83333,47.5 102081,Urmarskiy Rayon,1914,CU,182,RU,55.66667,47.91667 102082,Urmary,1914,CU,182,RU,55.67894,47.94396 102416,Vurnarskiy Rayon,1914,CU,182,RU,55.5,46.91667 102417,Vurnary,1914,CU,182,RU,55.49044,46.96479 102459,Yadrin,1914,CU,182,RU,55.94052,46.20622 102460,Yadrinskiy Rayon,1914,CU,182,RU,55.91667,46.33333 102476,Yal’chikskiy Rayon,1914,CU,182,RU,55.16667,47.91667 102487,Yantikovo,1914,CU,182,RU,55.82158,47.91036 102488,Yantikovskiy Rayon,1914,CU,182,RU,55.5,47.83333 97669,Arkhipovka,1864,IVA,182,RU,56.66292,41.25434 97972,Bogorodskoye,1864,IVA,182,RU,57.04695,41.01354 98352,Dulyapino,1864,IVA,182,RU,57.25783,40.81471 98442,Furmanov,1864,IVA,182,RU,57.25363,41.10849 98461,Gavrilov Posad,1864,IVA,182,RU,56.5593,40.121 98658,Il’inskoye-Khovanskoye,1864,IVA,182,RU,56.9718,39.7684 98731,Ivanovo,1864,IVA,182,RU,56.99719,40.97139 98732,Ivanovskiy Rayon,1864,IVA,182,RU,57.0,41.0 98812,Kamenka,1864,IVA,182,RU,57.39214,41.79383 98826,Kaminskiy,1864,IVA,182,RU,57.15159,41.47318 99048,Kineshemskiy Rayon,1864,IVA,182,RU,57.33333,42.33333 99049,Kineshma,1864,IVA,182,RU,57.43914,42.12894 99083,Kitovo,1864,IVA,182,RU,56.86586,41.28246 99129,Kokhma,1864,IVA,182,RU,56.93487,41.0915 99138,Kolobovo,1864,IVA,182,RU,56.70199,41.34173 99172,Komsomol’sk,1864,IVA,182,RU,57.02913,40.37266 99175,Komsomol’skiy Rayon,1864,IVA,182,RU,57.08333,40.41667 99506,Kuznechikha,1864,IVA,182,RU,57.21607,42.33477 99619,Lezhnevo,1864,IVA,182,RU,56.77508,40.89174 99620,Lezhnevskiy Rayon,1864,IVA,182,RU,56.75,40.91667 99683,Lukh,1864,IVA,182,RU,57.01242,42.25838 99686,Lukhskiy Rayon,1864,IVA,182,RU,57.0,42.41667 99800,Markovo,1864,IVA,182,RU,57.0185,40.49465 100073,Navoloki,1864,IVA,182,RU,57.46572,41.96344 100109,Nerl’,1864,IVA,182,RU,56.66285,40.38931 100220,Novo-Talitsy,1864,IVA,182,RU,57.00392,40.85936 100281,Novopistsovo,1864,IVA,182,RU,57.32177,41.8531 100333,Novoye Leushino,1864,IVA,182,RU,56.80732,40.51443 100359,Novyye Gorki,1864,IVA,182,RU,56.72535,41.06014 100529,Palekh,1864,IVA,182,RU,56.80256,41.85508 100530,Palekhskiy Rayon,1864,IVA,182,RU,56.83333,42.0 100643,Pestyaki,1864,IVA,182,RU,56.7086,42.66954 100644,Pestyakovskiy Rayon,1864,IVA,182,RU,56.58333,42.66667 100663,Petrovskiy,1864,IVA,182,RU,56.6421,40.32026 100685,Pistsovo,1864,IVA,182,RU,57.17904,40.52983 100705,Plës,1864,IVA,182,RU,57.45862,41.51579 100846,Privolzhsk,1864,IVA,182,RU,57.38698,41.28666 100850,Privolzhskiy Rayon,1864,IVA,182,RU,57.33333,41.33333 100885,Puchezh,1864,IVA,182,RU,56.97878,43.16761 100886,Puchezhskiy Rayon,1864,IVA,182,RU,57.0,43.0 100977,Rodniki,1864,IVA,182,RU,57.10513,41.73048 100980,Rodnikovskiy Rayon,1864,IVA,182,RU,57.08333,41.75 101135,Savino,1864,IVA,182,RU,56.59285,41.21814 101137,Savinskiy Rayon,1864,IVA,182,RU,56.58333,41.33333 101360,Shuya,1864,IVA,182,RU,56.84865,41.38833 101362,Shuyskiy Rayon,1864,IVA,182,RU,56.83333,41.5 101568,Staraya Vichuga,1864,IVA,182,RU,57.26833,41.87873 101753,Talitsy,1864,IVA,182,RU,56.52801,42.3323 101847,Teykovo,1864,IVA,182,RU,56.85796,40.53692 101848,Teykovskiy Rayon,1864,IVA,182,RU,56.75,40.5 102240,Verkhnelandekhovskiy Rayon,1864,IVA,182,RU,56.83333,42.58333 102254,Verkhniy Landekh,1864,IVA,182,RU,56.83971,42.5973 102300,Vichuga,1864,IVA,182,RU,57.21276,41.93012 102301,Vichugskiy Rayon,1864,IVA,182,RU,57.25,42.0 102605,Yur’yevets,1864,IVA,182,RU,57.32007,43.1041 102606,Yur’yevetskiy Rayon,1864,IVA,182,RU,57.25,42.83333 102612,Yuzha,1864,IVA,182,RU,56.58306,42.01222 102622,Yuzhskiy Rayon,1864,IVA,182,RU,56.58333,42.0 102652,Zarechnyy,1864,IVA,182,RU,57.46931,42.28431 102678,Zavolzhsk,1864,IVA,182,RU,57.4823,42.13779 102679,Zavolzhskiy Rayon,1864,IVA,182,RU,57.5,42.08333 97615,Amurzet,1835,YEV,182,RU,47.69541,131.09493 97742,Babstovo,1835,YEV,182,RU,48.11853,132.47913 97932,Bira,1835,YEV,182,RU,49.00135,132.46826 97933,Birakan,1835,YEV,182,RU,48.99302,131.72026 97935,Birobidzhan,1835,YEV,182,RU,48.79284,132.92386 97936,Birobidzhanskiy Rayon,1835,YEV,182,RU,48.5,132.75 98760,Izvestkovyy,1835,YEV,182,RU,48.98043,131.55274 98982,Khingansk,1835,YEV,182,RU,49.12821,131.19322 99439,Kul’dur,1835,YEV,182,RU,49.20465,131.6384 99574,Leninskiy Rayon,1835,YEV,182,RU,48.16667,132.25 99578,Leninskoye,1835,YEV,182,RU,47.93501,132.62025 99660,Londoko,1835,YEV,182,RU,49.01805,131.99142 100385,Obluchenskiy Rayon,1835,YEV,182,RU,49.0,132.0 100415,Oktyabr’skiy Rayon,1835,YEV,182,RU,48.16667,131.41667 100813,Priamurskiy,1835,YEV,182,RU,48.52716,134.90359 101411,Smidovich,1835,YEV,182,RU,48.59647,133.80866 101412,Smidovichskiy Rayon,1835,YEV,182,RU,48.5,134.0 102349,Volochayevka Vtoraya,1835,YEV,182,RU,48.56695,134.58232 97571,Aleksandrovskaya,1892,KB,182,RU,43.48333,43.65 97604,Altud,1892,KB,182,RU,43.72194,43.86583 97661,Argudan,1892,KB,182,RU,43.42139,43.91583 97720,Aushiger,1892,KB,182,RU,43.39611,43.73167 97743,Babugent,1892,KB,182,RU,43.27942,43.5502 97762,Baksan,1892,KB,182,RU,43.68806,43.53694 97763,Baksanenok,1892,KB,182,RU,43.68972,43.65472 97764,Baksanskiy Rayon,1892,KB,182,RU,43.75,43.5 97844,Belaya Rechka,1892,KB,182,RU,43.43806,43.535 98099,Bylym,1892,KB,182,RU,43.465,43.03889 98132,Chegem,1892,KB,182,RU,43.28333,43.13333 98133,Chegem Vtoroy,1892,KB,182,RU,43.59583,43.59944 98146,Cherekskiy Rayon,1892,KB,182,RU,43.25,43.5 98272,Deyskoye,1892,KB,182,RU,43.47546,44.16182 98348,Dugulubgey,1892,KB,182,RU,43.6625,43.53694 98390,El’brus,1892,KB,182,RU,43.25771,42.64435 98391,El’brusskiy Rayon,1892,KB,182,RU,43.41667,42.83333 98483,Germenchik,1892,KB,182,RU,43.59389,43.76611 98611,Gundelen,1892,KB,182,RU,43.5975,43.17194 98713,Islamey,1892,KB,182,RU,43.67556,43.455 98777,Kakhun,1892,KB,182,RU,43.54306,43.87639 98811,Kamenka,1892,KB,182,RU,43.53333,43.51667 98817,Kamennomostskoye,1892,KB,182,RU,43.73722,43.05139 98860,Karagach,1892,KB,182,RU,43.80528,43.775 98896,Kashkhatau,1892,KB,182,RU,43.31848,43.60804 98940,Kenzhe,1892,KB,182,RU,43.50167,43.55722 99080,Kishpek,1892,KB,182,RU,43.655,43.64083 99249,Kotlyarevskaya,1892,KB,182,RU,43.57344,44.06134 99413,Kuba-Taba,1892,KB,182,RU,43.77611,43.44278 99524,Kyzburun Pervyy,1892,KB,182,RU,43.65167,43.395 99559,Lechinkay,1892,KB,182,RU,43.56472,43.43278 99590,Leskenskiy rayon,1892,KB,182,RU,43.35556,43.94139 99759,Malka,1892,KB,182,RU,43.80389,43.32417 99834,Mayskiy Rayon,1892,KB,182,RU,43.66667,44.08333 100054,Nal’chik,1892,KB,182,RU,43.49806,43.61889 100061,Nartan,1892,KB,182,RU,43.51083,43.69944 100062,Nartkala,1892,KB,182,RU,43.5575,43.85083 100165,Nizhniy Cherek,1892,KB,182,RU,43.51306,43.91389 100170,Nizhniy Kurkuzhin,1892,KB,182,RU,43.74833,43.34972 100693,Planovskoye,1892,KB,182,RU,43.39846,44.1949 100828,Primalkinskoye,1892,KB,182,RU,43.74667,44.00833 100855,Prokhladnenskiy Rayon,1892,KB,182,RU,43.83333,44.0 100856,Prokhladnyy,1892,KB,182,RU,43.75741,44.0297 100883,Psygansu,1892,KB,182,RU,43.41944,43.79361 101119,Sarmakovo,1892,KB,182,RU,43.74556,43.20028 101248,Shalushka,1892,KB,182,RU,43.5325,43.56611 101446,Soldatskaya,1892,KB,182,RU,43.81806,43.81583 101604,Staryy Cherek,1892,KB,182,RU,43.47139,43.84694 101609,Staryy Urukh,1892,KB,182,RU,43.34041,44.01868 101827,Terek,1892,KB,182,RU,43.48333,44.13611 101838,Terskiy Rayon,1892,KB,182,RU,43.58333,44.25 101840,Terskol,1892,KB,182,RU,43.2568,42.51481 101997,Tyrnyauz,1892,KB,182,RU,43.38278,42.91833 102086,Urukh,1892,KB,182,RU,43.29335,44.02647 102092,Urvan’,1892,KB,182,RU,43.49222,43.76056 102091,Urvanskiy Rayon,1892,KB,182,RU,43.41667,43.91667 102253,Verkhniy Kurkuzhin,1892,KB,182,RU,43.69556,43.27472 102265,Verkhnyaya Balkariya,1892,KB,182,RU,43.12545,43.45687 102373,Vol’nyy Aul,1892,KB,182,RU,43.47861,43.6275 102639,Zalukokoazhe,1892,KB,182,RU,43.90389,43.21556 102687,Zayukovo,1892,KB,182,RU,43.61611,43.33389 102711,Zhankhoteko,1892,KB,182,RU,43.56417,43.21056 102724,Zhemtala,1892,KB,182,RU,43.28408,43.65586 102768,Zol’skiy Rayon,1892,KB,182,RU,43.75,42.91667 97755,Bagrationovsk,1902,KGD,182,RU,54.38714,20.64372 97784,Baltiysk,1902,KGD,182,RU,54.65455,19.90929 97989,Bolshoe Isakovo,1902,KGD,182,RU,54.71774,20.60284 98177,Chernyakhovsk,1902,KGD,182,RU,54.63345,21.81557 98316,Donskoye,1902,KGD,182,RU,54.93842,19.96821 98616,Gur’yevsk,1902,KGD,182,RU,54.77323,20.60521 98618,Gusev,1902,KGD,182,RU,54.59222,22.19972 98624,Gvardeysk,1902,KGD,182,RU,54.64772,21.06513 98787,Kaliningrad,1902,KGD,182,RU,54.70649,20.51095 99013,Khrabrovo,1902,KGD,182,RU,54.89709,20.58035 99356,Krasnoznamensk,1902,KGD,182,RU,54.94222,22.48972 99534,Ladushkin,1902,KGD,182,RU,54.57025,20.17099 99769,Maloye Isakovo,1902,KGD,182,RU,54.73269,20.58413 99777,Mamonovo,1902,KGD,182,RU,54.46427,19.93801 100100,Neman,1902,KGD,182,RU,55.03111,22.02639 100101,Nemanskiy Rayon,1902,KGD,182,RU,54.91667,22.0 100111,Nesterov,1902,KGD,182,RU,54.63056,22.57139 100113,Nesterovskiy Rayon,1902,KGD,182,RU,54.58333,22.58333 100507,Otradnoye,1902,KGD,182,RU,54.94114,20.11397 100524,Ozërsk,1902,KGD,182,RU,54.41056,22.01167 100520,Ozerskiy Rayon,1902,KGD,182,RU,54.41667,22.0 100680,Pionerskiy,1902,KGD,182,RU,54.95083,20.22748 100753,Polessk,1902,KGD,182,RU,54.86205,21.10279 100802,Pravdinsk,1902,KGD,182,RU,54.44289,21.01785 100830,Primorsk,1902,KGD,182,RU,54.73905,20.00553 101402,Slavsk,1902,KGD,182,RU,55.0425,21.67704 101403,Slavskiy Rayon,1902,KGD,182,RU,55.0,21.66667 101504,Sovetsk,1902,KGD,182,RU,55.08392,21.87851 101701,Svetlogorsk,1902,KGD,182,RU,54.93987,20.15479 101705,Svetlyy,1902,KGD,182,RU,54.67501,20.13473 102350,Volochayevskoye,1902,KGD,182,RU,54.70034,20.21966 102456,Vzmorye,1902,KGD,182,RU,54.69606,20.23613 102486,Yantarnyy,1902,KGD,182,RU,54.87102,19.94016 102619,Yuzhnyy,1902,KGD,182,RU,54.54837,20.59843 102699,Zelenogradsk,1902,KGD,182,RU,54.95893,20.47668 102718,Zheleznodorozhnyy,1902,KGD,182,RU,54.36013,21.30597 102758,Znamensk,1902,KGD,182,RU,54.61403,21.22722 97746,Babynino,1844,KLU,182,RU,54.39385,35.77013 97747,Babyninskiy Rayon,1844,KLU,182,RU,54.41667,35.75 97766,Balabanovo,1844,KLU,182,RU,55.18161,36.6606 97801,Baryatino,1844,KLU,182,RU,54.31206,34.52096 97802,Baryatinskiy Rayon,1844,KLU,182,RU,54.33333,34.58333 97866,Belousovo,1844,KLU,182,RU,55.09499,36.6732 97916,Betlitsa,1844,KLU,182,RU,54.00946,33.95875 98040,Borovsk,1844,KLU,182,RU,55.20639,36.48611 98042,Borovskiy Rayon,1844,KLU,182,RU,55.16667,36.5 98268,Deshovki,1844,KLU,182,RU,54.00333,35.78771 98270,Detchino,1844,KLU,182,RU,54.80923,36.3075 98354,Duminichi,1844,KLU,182,RU,53.93446,35.10993 98355,Duminichskiy Rayon,1844,KLU,182,RU,53.91667,35.0 98359,Dvortsy,1844,KLU,182,RU,54.61677,35.9974 98369,Dzerzhinskiy Rayon,1844,KLU,182,RU,54.75,35.75 98422,Ferzikovo,1844,KLU,182,RU,54.51913,36.75671 98423,Ferzikovskiy Rayon,1844,KLU,182,RU,54.58333,36.58333 98755,Iznoski,1844,KLU,182,RU,54.98806,35.31083 98756,Iznoskovskiy rayon,1844,KLU,182,RU,54.99026,35.30961 98802,Kaluga,1844,KLU,182,RU,54.5293,36.27542 99025,Khvastovichi,1844,KLU,182,RU,53.46942,35.09409 99026,Khvastovichskiy Rayon,1844,KLU,182,RU,53.5,35.16667 99060,Kirov,1844,KLU,182,RU,54.06686,34.29955 99072,Kirovskiy Rayon,1844,KLU,182,RU,54.08333,34.41667 99183,Kondrovo,1844,KLU,182,RU,54.80639,35.92778 99260,Kozel’sk,1844,KLU,182,RU,54.03746,35.77159 99261,Kozel’skiy Rayon,1844,KLU,182,RU,54.0,35.83333 99388,Kremenki,1844,KLU,182,RU,54.88626,37.11955 99421,Kudinovo,1844,KLU,182,RU,54.99939,36.25331 99472,Kurovskoye,1844,KLU,182,RU,54.54299,36.00262 99495,Kuybyshevskiy Rayon,1844,KLU,182,RU,54.08333,33.91667 99724,Lyudinovo,1844,KLU,182,RU,53.86639,34.44778 99725,Lyudinovskiy Rayon,1844,KLU,182,RU,53.91667,34.5 99767,Maloyaroslavets,1844,KLU,182,RU,55.01457,36.47185 99768,Maloyaroslavetskiy Rayon,1844,KLU,182,RU,54.91667,36.5 99850,Medyn’,1844,KLU,182,RU,54.96917,35.85861 99849,Medynskiy Rayon,1844,KLU,182,RU,55.08333,35.83333 99869,Meshchovsk,1844,KLU,182,RU,54.32444,35.28083 99870,Meshchovskiy Rayon,1844,KLU,182,RU,54.33333,35.41667 99970,Mosal’sk,1844,KLU,182,RU,54.48806,34.98167 99971,Mosal’skiy Rayon,1844,KLU,182,RU,54.58333,34.83333 99991,Mstikhino,1844,KLU,182,RU,54.55947,36.12777 100027,Myatlevo,1844,KLU,182,RU,54.89693,35.67619 100132,Nikola-Lenivets,1844,KLU,182,RU,54.74943,35.60133 100386,Obninsk,1844,KLU,182,RU,55.09681,36.61006 100601,Peremyshl’,1844,KLU,182,RU,54.26313,36.16063 100602,Peremyshl’skiy Rayon,1844,KLU,182,RU,54.25,36.08333 100756,Polotnyanyy Zavod,1844,KLU,182,RU,54.72139,35.96611 100912,Pyatovskiy,1844,KLU,182,RU,54.68908,36.05634 101178,Seredeyskiy,1844,KLU,182,RU,54.05071,35.23183 101482,Sosenskiy,1844,KLU,182,RU,54.05899,35.96228 101522,Spas-Demensk,1844,KLU,182,RU,54.41222,34.02257 101523,Spas-Demenskiy Rayon,1844,KLU,182,RU,54.41667,34.0 101649,Sukhinichi,1844,KLU,182,RU,54.09989,35.34254 101650,Sukhinichskiy Rayon,1844,KLU,182,RU,54.08333,35.33333 101782,Tarusa,1844,KLU,182,RU,54.72436,37.17272 101783,Tarusskiy Rayon,1844,KLU,182,RU,54.66667,37.0 101908,Tovarkovo,1844,KLU,182,RU,54.67617,35.9386 102054,Ul’yanovskiy Rayon,1844,KLU,182,RU,53.66667,35.66667 102385,Vorotynsk,1844,KLU,182,RU,54.42828,36.04646 102445,Vysokinichi,1844,KLU,182,RU,54.90928,36.93148 102568,Yermolino,1844,KLU,182,RU,55.19489,36.59513 102590,Yukhnov,1844,KLU,182,RU,54.74444,35.22972 102591,Yukhnovskiy Rayon,1844,KLU,182,RU,54.75,35.25 102657,Zarech’ye,1844,KLU,182,RU,53.73078,35.63246 102731,Zhiletovo,1844,KLU,182,RU,54.69216,36.02225 102738,Zhizdra,1844,KLU,182,RU,53.74596,34.73951 102739,Zhizdrinskiy Rayon,1844,KLU,182,RU,53.66667,34.75 102742,Zhukovo,1844,KLU,182,RU,55.03178,36.74402 102745,Zhukovskiy Rayon,1844,KLU,182,RU,55.08333,36.75 97585,Aleutskiy Rayon,1865,KAM,182,RU,55.21667,165.98333 97715,Atlasovo,1865,KAM,182,RU,55.6065,159.64266 98100,Bystrinskiy Rayon,1865,KAM,182,RU,56.0,158.5 98404,Esso,1865,KAM,182,RU,55.92738,158.70708 98863,Karaginsky District,1865,KAM,182,RU,58.0,159.83333 99112,Klyuchi,1865,KAM,182,RU,56.32035,160.84541 99270,Kozyrëvsk,1865,KAM,182,RU,56.0486,159.8715 99914,Mil’kovo,1865,KAM,182,RU,54.6961,158.62067 99915,Mil’kovskiy Rayon,1865,KAM,182,RU,55.0,159.0 100430,Olyutorskiy Rayon,1865,KAM,182,RU,61.0,169.0 100489,Ossora,1865,KAM,182,RU,59.24781,163.07034 100518,Ozernovskiy,1865,KAM,182,RU,51.49604,156.50102 100527,Palana,1865,KAM,182,RU,59.08384,159.9563 100543,Paratunka,1865,KAM,182,RU,52.96202,158.25723 100596,Penzhinskiy Rayon,1865,KAM,182,RU,63.0,167.0 100652,Petropavlovsk-Kamchatsky,1865,KAM,182,RU,53.04444,158.65076 101428,Sobolevskiy Rayon,1865,KAM,182,RU,54.58333,156.5 101849,Tigil’,1865,KAM,182,RU,57.75979,158.68161 101850,Tigil’skiy Rayon,1865,KAM,182,RU,57.76046,158.68687 101856,Tilichiki,1865,KAM,182,RU,60.42795,166.05764 102116,Ust’-Bol’sheretskiy Rayon,1865,KAM,182,RU,52.66667,157.0 102125,Ust’-Kamchatsk Staryy,1865,KAM,182,RU,56.22778,162.47778 102126,Ust’-Kamchatskiy Rayon,1865,KAM,182,RU,56.0,161.0 102308,Vilyuchinsk,1865,KAM,182,RU,52.9311,158.40469 102544,Yelizovo,1865,KAM,182,RU,53.18909,158.38135 102545,Yelizovskiy Rayon,1865,KAM,182,RU,53.66667,159.0 97505,Adyge-Khabl’,1869,KC,182,RU,44.33434,41.93922 97588,Ali-Berdukovskiy,1869,KC,182,RU,43.98952,41.74212 97911,Besleney,1869,KC,182,RU,44.2405,41.7387 98160,Cherkessk,1869,KC,182,RU,44.22333,42.05778 98328,Druzhba,1869,KC,182,RU,44.1953,42.017 98638,Ikon-Khalk,1869,KC,182,RU,44.3051,41.9142 98714,Ispravnaya,1869,KC,182,RU,44.0682,41.6102 98857,Karachayevsk,1869,KC,182,RU,43.77399,41.91419 98858,Karachayevskiy Rayon,1869,KC,182,RU,43.5,42.0 98873,Kardonikskaya,1869,KC,182,RU,43.86577,41.71432 98914,Kavkazskiy,1869,KC,182,RU,44.2672,42.2347 98952,Khabez,1869,KC,182,RU,44.0434,41.772 99366,Krasnyy Kurgan,1869,KC,182,RU,43.94222,42.61083 99443,Kumysh,1869,KC,182,RU,43.88334,41.89323 99458,Kurdzhinovo,1869,KC,182,RU,43.98838,40.95519 99528,Kyzyl-Oktyabr’skiy,1869,KC,182,RU,43.8257,41.78605 99763,Malokarachayevskiy Rayon,1869,KC,182,RU,43.75,42.5 99841,Mednogorskiy,1869,KC,182,RU,43.9178,41.18255 100162,Nizhniy Arkhyz,1869,KC,182,RU,43.67817,41.45977 100344,Novyy Karachay,1869,KC,182,RU,43.82076,41.90322 100460,Ordzhonikidzevskiy,1869,KC,182,RU,43.84233,41.89636 100624,Pervomayskoye,1869,KC,182,RU,43.93847,42.476 100805,Pravokubanskiy,1869,KC,182,RU,43.91721,41.88413 100809,Pregradnaya,1869,KC,182,RU,43.95395,41.1891 100825,Prikubanskiy Rayon,1869,KC,182,RU,44.08333,42.0 100884,Psyzh,1869,KC,182,RU,44.23306,42.01833 101125,Sary-Tyuz,1869,KC,182,RU,43.90181,41.89523 101623,Storozhevaya,1869,KC,182,RU,43.87886,41.45143 101830,Tereze,1869,KC,182,RU,43.93608,42.4434 102014,Uchkeken,1869,KC,182,RU,43.93778,42.51167 102016,Uchkulan,1869,KC,182,RU,43.45705,42.09643 102019,Udarnyy,1869,KC,182,RU,44.34917,42.50528 102119,Ust’-Dzheguta,1869,KC,182,RU,44.0834,41.9763 102689,Zelenchukskaya,1869,KC,182,RU,43.85804,41.5894 97477,Abagur,1897,KEM,182,RU,53.7308,87.2526 97646,Anzhero-Sudzhensk,1897,KEM,182,RU,56.081,86.0285 97685,Artyshta,1897,KEM,182,RU,54.1222,86.2909 97748,Bachatskiy,1897,KEM,182,RU,54.2927,86.1285 97806,Barzas,1897,KEM,182,RU,55.72912,86.32233 97852,Belogorsk,1897,KEM,182,RU,55.01778,88.48972 97867,Belovo,1897,KEM,182,RU,54.4165,86.2976 97907,Berëzovskiy,1897,KEM,182,RU,55.6,86.2 98039,Borovoy,1897,KEM,182,RU,55.43333,86.08333 98199,Chistogorskiy,1897,KEM,182,RU,53.9835,87.3843 98576,Gramoteino,1897,KEM,182,RU,54.5368,86.3839 98617,Gur’yevsk,1897,KEM,182,RU,54.28333,85.93333 98677,Inskoy,1897,KEM,182,RU,54.4297,86.44 98723,Itatskiy,1897,KEM,182,RU,56.07,89.03694 98749,Izhmorskiy,1897,KEM,182,RU,56.19239,86.64161 98799,Kaltan,1897,KEM,182,RU,53.5347,87.2457 98862,Karagayla,1897,KEM,182,RU,54.172,86.5521 98921,Kaz,1897,KEM,182,RU,52.9113,87.3105 98933,Kedrovka,1897,KEM,182,RU,55.53333,86.05 98937,Kemerovo,1897,KEM,182,RU,55.33333,86.08333 99078,Kiselëvsk,1897,KEM,182,RU,53.99,86.6621 99272,Krapivinskiy,1897,KEM,182,RU,54.9992,86.8133 99298,Krasnobrodskiy,1897,KEM,182,RU,54.1581,86.4486 99307,Krasnogorskiy,1897,KEM,182,RU,54.5471,86.281 99352,Krasnoye,1897,KEM,182,RU,54.6068,85.3899 99499,Kuzedeyevo,1897,KEM,182,RU,53.3308,87.2019 99569,Leninsk-Kuznetskiy Rayon,1897,KEM,182,RU,54.66667,86.0 99570,Leninsk-Kuznetsky,1897,KEM,182,RU,54.6567,86.1737 99639,Listvyagi,1897,KEM,182,RU,53.6772,86.951 99795,Mariinsk,1897,KEM,182,RU,56.21389,87.74722 99880,Mezhdurechensk,1897,KEM,182,RU,53.69417,88.06028 100003,Mundybash,1897,KEM,182,RU,53.211,87.2983 100033,Myski,1897,KEM,182,RU,53.709,87.8014 100131,Nikitinskiy,1897,KEM,182,RU,54.5845,86.0115 100257,Novokuznetsk,1897,KEM,182,RU,53.7557,87.1099 100258,Novokuznetskiy Rayon,1897,KEM,182,RU,53.75,87.08333 100279,Novopesterevo,1897,KEM,182,RU,54.4429,85.7401 100487,Osinniki,1897,KEM,182,RU,53.6239,87.3598 100679,Pioner,1897,KEM,182,RU,55.3166,85.9508 100703,Plotnikovo,1897,KEM,182,RU,55.02472,85.94361 100764,Polysayevo,1897,KEM,182,RU,54.6012,86.2459 100842,Pritomskiy,1897,KEM,182,RU,53.7724,87.6082 100859,Prokop’yevsk,1897,KEM,182,RU,53.9059,86.719 100860,Prokop’yevskiy Rayon,1897,KEM,182,RU,54.0,86.66667 100866,Promyshlennaya,1897,KEM,182,RU,54.9159,85.6385 100867,Promyshlennovskiy,1897,KEM,182,RU,55.48333,86.2 101023,Rudnichnyy,1897,KEM,182,RU,56.08469,86.24988 101077,Salair,1897,KEM,182,RU,54.2312,85.7972 101305,Sheregesh,1897,KEM,182,RU,52.9209,87.9869 101490,Sosnovka,1897,KEM,182,RU,53.6676,87.1527 101527,Spassk,1897,KEM,182,RU,52.747,87.7545 101572,Starobachaty,1897,KEM,182,RU,54.2425,86.2072 101590,Staropesterevo,1897,KEM,182,RU,54.5001,86.4094 101684,Suslovo,1897,KEM,182,RU,56.21667,88.11667 101788,Tashtagol,1897,KEM,182,RU,52.7657,87.8894 101789,Tashtagol’skiy Rayon,1897,KEM,182,RU,52.78333,87.88333 101802,Tayga,1897,KEM,182,RU,56.06402,85.62238 101806,Tayzhina,1897,KEM,182,RU,53.6679,87.4362 101815,Temirtau,1897,KEM,182,RU,53.1377,87.4538 101864,Tisul’,1897,KEM,182,RU,55.76173,88.31228 101894,Topki,1897,KEM,182,RU,55.2769,85.6163 101930,Trudarmeyskiy,1897,KEM,182,RU,54.132,86.4098 101990,Tyazhinskiy,1897,KEM,182,RU,56.11607,88.52279 102085,Ursk,1897,KEM,182,RU,54.45417,85.40028 102230,Verkh-Chebula,1897,KEM,182,RU,56.03062,87.62215 102463,Yagunovo,1897,KEM,182,RU,55.24645,86.01097 102464,Yagunovskiy,1897,KEM,182,RU,55.2828,85.978 102510,Yashkino,1897,KEM,182,RU,55.8736,85.4265 102517,Yaya,1897,KEM,182,RU,56.206,86.44 102593,Yurga,1897,KEM,182,RU,55.72306,84.88611 102595,Yurginskiy Rayon,1897,KEM,182,RU,55.75,84.75 102697,Zelenogorskiy,1897,KEM,182,RU,55.03333,87.0 97614,Amursk,1873,KHA,182,RU,50.23685,136.88136 97727,Ayan,1873,KHA,182,RU,56.46314,138.17777 97908,Berëzovyy,1873,KHA,182,RU,51.66897,135.66584 97926,Bikin,1873,KHA,182,RU,46.81293,134.25012 97927,Bikinskiy Rayon,1873,KHA,182,RU,47.0,134.25 97974,Bogorodskoye,1873,KHA,182,RU,52.37397,140.43579 98131,Chegdomyn,1873,KHA,182,RU,51.12853,133.00827 98221,Chumikan,1873,KHA,182,RU,54.71857,135.3163 98253,De-Kastri,1873,KHA,182,RU,51.47543,140.76986 98525,Gorin,1873,KHA,182,RU,51.19861,136.66216 98542,Gornyy,1873,KHA,182,RU,50.76344,136.44951 98665,Imeni Poliny Osipenko,1873,KHA,182,RU,52.4227,136.48692 98948,Khabarovsk,1873,KHA,182,RU,48.48271,135.08379 98949,Khabarovsk Vtoroy,1873,KHA,182,RU,48.43776,135.13329 99004,Khor,1873,KHA,182,RU,47.88696,134.9463 99021,Khurba,1873,KHA,182,RU,50.40657,136.88276 99115,Knyaze-Volkonskoye,1873,KHA,182,RU,48.46547,135.45582 99171,Komsomolsk-on-Amur,1873,KHA,182,RU,50.55034,137.00995 99206,Korfovskiy,1873,KHA,182,RU,48.22259,135.05966 99548,Lazarev,1873,KHA,182,RU,52.22307,141.51265 99585,Lermontovka,1873,KHA,182,RU,47.14795,134.33477 99641,Litovko,1873,KHA,182,RU,49.23754,135.17401 99668,Lososina,1873,KHA,182,RU,48.99652,140.31462 99740,Mago,1873,KHA,182,RU,53.25851,140.18269 99833,Mayskiy,1873,KHA,182,RU,48.99887,140.20976 99936,Mnogovershinnyy,1873,KHA,182,RU,53.93345,139.9274 99996,Mukhen,1873,KHA,182,RU,48.19672,136.12691 100092,Nekrasovka,1873,KHA,182,RU,48.35208,135.23221 100136,Nikolayevsk-on-Amure,1873,KHA,182,RU,53.14657,140.72287 100353,Novyy Urgal,1873,KHA,182,RU,51.07089,132.60075 100403,Okhotsk,1873,KHA,182,RU,59.362,143.21468 101155,Selikhino,1873,KHA,182,RU,50.36832,137.50163 101459,Solnechnyy,1873,KHA,182,RU,50.72367,136.63831 101508,Sovetskaya Gavan’,1873,KHA,182,RU,48.97215,140.28919 101895,Topolëvo,1873,KHA,182,RU,48.50264,135.17611 101996,Tyrma,1873,KHA,182,RU,50.0477,132.15011 102186,Vanino,1873,KHA,182,RU,49.09848,140.25313 102421,Vyazemskiy,1873,KHA,182,RU,47.53757,134.75556 102447,Vysokogornyy,1873,KHA,182,RU,50.09885,139.12284 102671,Zavety Il’icha,1873,KHA,182,RU,49.03737,140.26989 97519,Agirish,1838,KHM,182,RU,61.92472,63.02306 97625,Andra,1838,KHM,182,RU,62.51472,65.88778 97797,Barsovo,1838,KHM,182,RU,61.16667,73.16667 97869,Beloyarskiy,1838,KHM,182,RU,63.71194,66.67222 97906,Berëzovo,1838,KHM,182,RU,63.93806,65.04194 98417,Fedorovskiy,1838,KHM,182,RU,61.6063,73.71415 98531,Gornopravdinsk,1838,KHM,182,RU,60.05,69.9 98635,Igrim,1838,KHM,182,RU,63.1906,64.4162 98750,Izluchinsk,1838,KHM,182,RU,60.97944,76.92421 98962,Khanty-Mansiysk,1838,KHM,182,RU,61.00417,69.00194 99017,Khulimsunt,1838,KHM,182,RU,62.86333,61.64361 99128,Kogalym,1838,KHM,182,RU,62.26537,74.47906 99167,Kommunisticheskiy,1838,KHM,182,RU,61.67889,64.48194 99179,Kondinskoye,1838,KHM,182,RU,59.64806,67.41 99441,Kuminskiy,1838,KHM,182,RU,58.66667,66.56667 99544,Langepas,1838,KHM,182,RU,61.25439,75.2124 99653,Lokosovo,1838,KHM,182,RU,61.13333,74.81667 99705,Lyantor,1838,KHM,182,RU,61.61945,72.15546 99758,Malinovskiy,1838,KHM,182,RU,61.19528,62.83972 99851,Megion,1838,KHM,182,RU,61.0296,76.1136 99881,Mezhdurechenskiy,1838,KHM,182,RU,59.6,65.93333 99968,Mortka,1838,KHM,182,RU,59.33222,66.02139 100088,Nefteyugansk,1838,KHM,182,RU,61.09979,72.60349 100158,Nizhnesortymskiy,1838,KHM,182,RU,62.43965,71.76029 100160,Nizhnevartovsk,1838,KHM,182,RU,60.9344,76.5531 100221,Novoagansk,1838,KHM,182,RU,61.9449,76.6625 100373,Nyagan,1838,KHM,182,RU,62.14056,65.39361 100681,Pionerskiy,1838,KHM,182,RU,61.19472,62.86889 100739,Pokachi,1838,KHM,182,RU,61.71982,75.36827 100798,Poykovskiy,1838,KHM,182,RU,61.23333,73.33333 100836,Priob’ye,1838,KHM,182,RU,62.52056,65.59639 100917,Pyt-Yakh,1838,KHM,182,RU,60.74985,72.85824 100927,Raduzhny,1838,KHM,182,RU,62.09611,77.475 101030,Russkinskiye,1838,KHM,182,RU,62.1538,73.60102 101082,Salym,1838,KHM,182,RU,60.0625,71.47889 101109,Saranpaul’,1838,KHM,182,RU,64.26102,60.90233 101307,Sherkaly,1838,KHM,182,RU,62.75806,65.47528 101375,Singapay,1838,KHM,182,RU,61.15452,72.66072 101452,Solnechniy,1838,KHM,182,RU,61.27944,73.18139 101511,Sovetskiy,1838,KHM,182,RU,61.36139,63.58417 101676,Surgut,1838,KHM,182,RU,61.25,73.41667 102071,Uray,1838,KHM,182,RU,60.13044,64.78896 102588,Yugorsk,1838,KHM,182,RU,61.31226,63.33067 102691,Zelenoborsk,1838,KHM,182,RU,61.47088,64.04344 97508,Afanas’yevskiy Rayon,1890,KIR,182,RU,58.83333,53.25 97653,Arbazh,1890,KIR,182,RU,57.68041,48.30647 97671,Arkul’,1890,KIR,182,RU,57.28085,50.044 97843,Belaya Kholunitsa,1890,KIR,182,RU,58.84,50.85278 97861,Belorechensk,1890,KIR,182,RU,58.77251,52.29357 97973,Bogorodskoye,1890,KIR,182,RU,57.82849,50.74856 98229,Chërnaya Kholunitsa,1890,KIR,182,RU,58.85115,51.71545 98247,Darovskoy,1890,KIR,182,RU,58.76999,47.95642 98263,Dem’yanovo,1890,KIR,182,RU,60.35111,47.08417 98344,Dubrovka,1890,KIR,182,RU,59.22866,51.15578 98412,Falënki,1890,KIR,182,RU,58.36127,51.59461 98413,Falënskiy Rayon,1890,KIR,182,RU,58.33333,51.58333 99037,Kiknur,1890,KIR,182,RU,57.30341,47.20105 99038,Kiknurskiy Rayon,1890,KIR,182,RU,57.33333,47.16667 99041,Kil’mez’,1890,KIR,182,RU,56.94389,51.065 99059,Kirov,1890,KIR,182,RU,58.59665,49.66007 99062,Kirovo-Chepetsk,1890,KIR,182,RU,58.55386,50.03986 99063,Kirovo-Chepetskiy Rayon,1890,KIR,182,RU,58.5,50.0 99073,Kirs,1890,KIR,182,RU,59.33882,52.24467 99233,Kosino,1890,KIR,182,RU,58.41272,51.27819 99239,Kostino,1890,KIR,182,RU,58.90966,53.26907 99244,Kotel’nich,1890,KIR,182,RU,58.3089,48.348 99282,Krasnaya Polyana,1890,KIR,182,RU,56.24204,51.14425 99444,Kumëny,1890,KIR,182,RU,58.10887,49.91614 99543,Lal’sk,1890,KIR,182,RU,60.74146,47.58617 99577,Leninskoye,1890,KIR,182,RU,58.31637,47.08856 99593,Lesnoy,1890,KIR,182,RU,59.781,52.12838 99601,Lesnyye Polyany,1890,KIR,182,RU,59.00314,52.41802 99695,Luza,1890,KIR,182,RU,60.63081,47.25118 99699,Luzskiy Rayon,1890,KIR,182,RU,60.58333,47.25 99704,Lyangasovo,1890,KIR,182,RU,58.51759,49.44718 99760,Malmyzh,1890,KIR,182,RU,56.5205,50.6818 99761,Malmyzhskiy Rayon,1890,KIR,182,RU,56.58333,50.91667 99803,Maromitsa,1890,KIR,182,RU,59.86828,48.01227 99844,Medvedok,1890,KIR,182,RU,57.38913,50.0351 99925,Mirnyy,1890,KIR,182,RU,58.49333,47.65389 100005,Murashi,1890,KIR,182,RU,59.3999,48.9615 100006,Murashinskiy Rayon,1890,KIR,182,RU,59.33333,48.75 100018,Murygino,1890,KIR,182,RU,58.73831,49.45822 100048,Nagorsk,1890,KIR,182,RU,59.31722,50.80778 100049,Nagorskiy Rayon,1890,KIR,182,RU,59.5,50.83333 100099,Nema,1890,KIR,182,RU,57.50675,50.50115 100103,Nemskiy Rayon,1890,KIR,182,RU,57.5,50.66667 100154,Nizhneivkino,1890,KIR,182,RU,58.19398,49.52137 100196,Nolinsk,1890,KIR,182,RU,57.55962,49.93629 100197,Nolinskiy Rayon,1890,KIR,182,RU,57.58333,49.91667 100445,Omutninsk,1890,KIR,182,RU,58.67001,52.1932 100453,Oparino,1890,KIR,182,RU,59.85179,48.27826 100467,Orichevskiy Rayon,1890,KIR,182,RU,58.25,48.75 100468,Orichi,1890,KIR,182,RU,58.40356,49.05719 100470,Orlov,1890,KIR,182,RU,58.53946,48.89173 100475,Orlovskiy Rayon,1890,KIR,182,RU,58.66306,48.74222 100559,Pasegovo,1890,KIR,182,RU,58.50602,49.51383 100635,Peskovka,1890,KIR,182,RU,59.04478,52.36057 100678,Pinyug,1890,KIR,182,RU,60.25095,47.78425 100690,Pizhanka,1890,KIR,182,RU,57.46042,48.542 100691,Pizhanskiy Rayon,1890,KIR,182,RU,57.41667,48.5 100726,Podosinovets,1890,KIR,182,RU,60.27758,47.06587 100727,Podosinovskiy Rayon,1890,KIR,182,RU,60.16667,47.33333 100930,Raduzhnyy,1890,KIR,182,RU,58.49899,49.64347 101022,Rudnichnyy,1890,KIR,182,RU,59.61702,52.47033 101095,Sanchursk,1890,KIR,182,RU,56.94125,47.24987 101096,Sanchurskiy Rayon,1890,KIR,182,RU,57.0,47.33333 101228,Shabalinskiy Rayon,1890,KIR,182,RU,58.33333,46.91667 101409,Slobodskoy,1890,KIR,182,RU,58.73222,50.17722 101410,Slobodskoy Rayon,1890,KIR,182,RU,58.75,50.25 101487,Sosnovka,1890,KIR,182,RU,56.25496,51.28419 101503,Sovetsk,1890,KIR,182,RU,57.58475,48.95844 101513,Sovetskiy Rayon,1890,KIR,182,RU,57.58333,49.0 101521,Sozimskiy,1890,KIR,182,RU,59.74178,52.24821 101629,Strizhi,1890,KIR,182,RU,58.45758,49.28667 101637,Stulovo,1890,KIR,182,RU,58.7225,50.14389 101662,Suna,1890,KIR,182,RU,57.83379,50.05884 101663,Sunskiy Rayon,1890,KIR,182,RU,57.83333,50.0 101696,Svecha,1890,KIR,182,RU,58.27849,47.51636 101704,Svetlopolyansk,1890,KIR,182,RU,59.41836,52.36045 101898,Torfyanoy,1890,KIR,182,RU,58.4916,49.19786 101987,Tuzha,1890,KIR,182,RU,57.60615,47.93597 102060,Uni,1890,KIR,182,RU,57.751,51.4913 102061,Uninskiy Rayon,1890,KIR,182,RU,57.66667,51.5 102094,Urzhum,1890,KIR,182,RU,57.11412,49.99956 102177,Vakhrushi,1890,KIR,182,RU,58.68472,50.02611 102276,Verkhoshizhem’ye,1890,KIR,182,RU,58.01097,49.10384 102398,Vostochnyy,1890,KIR,182,RU,58.78811,52.24513 102420,Vyatskiye Polyany,1890,KIR,182,RU,56.22602,51.06557 102491,Yaransk,1890,KIR,182,RU,57.30331,47.88611 102492,Yaranskiy Rayon,1890,KIR,182,RU,57.16667,48.0 102602,Yur’yanskiy Rayon,1890,KIR,182,RU,59.0,49.25 102777,Zuyevka,1890,KIR,182,RU,58.40503,51.13355 97729,Aykino,1899,KO,182,RU,62.22481,49.99222 97952,Blagoyevo,1899,KO,182,RU,63.4231,47.9646 98037,Borovoy,1899,KO,182,RU,63.23005,52.89031 98410,Ezhva,1899,KO,182,RU,61.81281,50.72834 98678,Inta,1899,KO,182,RU,66.03169,60.16594 98748,Izhma,1899,KO,182,RU,65.00833,53.91128 99116,Knyazhpogostskiy Rayon,1899,KO,182,RU,62.58333,50.91667 99220,Kortkeros,1899,KO,182,RU,61.81056,51.58056 99234,Koslan,1899,KO,182,RU,63.45641,48.89891 99258,Koygorodok,1899,KO,182,RU,60.44498,50.9968 99259,Koygorodskiy Rayon,1899,KO,182,RU,60.41667,51.0 99265,Kozhva,1899,KO,182,RU,65.10727,57.0459 99606,Letka,1899,KO,182,RU,59.60111,49.42321 99878,Mezhdurechensk,1899,KO,182,RU,63.24556,48.55333 99909,Mikun’,1899,KO,182,RU,62.35472,50.07714 99960,Mordino,1899,KO,182,RU,61.35327,51.89574 100174,Nizhniy Odes,1899,KO,182,RU,63.64451,54.85598 100552,Parma,1899,KO,182,RU,66.0,57.7 100587,Pechora,1899,KO,182,RU,65.14717,57.22439 100827,Priluzskiy Rayon,1899,KO,182,RU,60.33333,49.33333 100868,Promyshlennyy,1899,KO,182,RU,67.58333,63.91667 100904,Puteyets,1899,KO,182,RU,65.17157,57.09101 101148,Sedkyrkeshch,1899,KO,182,RU,61.75,50.91667 101343,Shudayag,1899,KO,182,RU,63.52665,53.60582 101371,Sindor,1899,KO,182,RU,62.86286,51.89051 101484,Sosnogorsk,1899,KO,182,RU,63.60229,53.88175 101512,Sovetskiy,1899,KO,182,RU,67.48333,64.41667 101724,Syktyvkar,1899,KO,182,RU,61.664,50.815 101728,Synya,1899,KO,182,RU,65.37185,58.03874 101919,Troitsko-Pechorsk,1899,KO,182,RU,62.70836,56.19643 101920,Troitsko-Pechorskiy Rayon,1899,KO,182,RU,62.66667,56.25 101941,Tsementnozavodskiy,1899,KO,182,RU,67.62834,64.08965 102043,Ukhta,1899,KO,182,RU,63.56705,53.68348 102096,Usinsk,1899,KO,182,RU,65.99389,57.52806 102100,Usogorsk,1899,KO,182,RU,63.41064,48.68722 102110,Ust-Tsilma,1899,KO,182,RU,65.44104,52.14978 102134,Ust’-Kulom,1899,KO,182,RU,61.68636,53.6902 102140,Ust’-Tsilemskiy Rayon,1899,KO,182,RU,65.41667,52.16667 102266,Verkhnyaya Inta,1899,KO,182,RU,65.98115,60.30945 102268,Verkhnyaya Maksakovka,1899,KO,182,RU,61.63504,50.9674 102323,Vizinga,1899,KO,182,RU,61.07493,50.10311 102334,Vodnyy,1899,KO,182,RU,63.50464,53.40947 102376,Vorgashor,1899,KO,182,RU,67.58355,63.79399 102377,Vorkuta,1899,KO,182,RU,67.49884,64.05253 102405,Voyvozh,1899,KO,182,RU,62.89198,54.96346 102415,Vuktyl,1899,KO,182,RU,63.85667,57.30944 102493,Yarega,1899,KO,182,RU,63.43543,53.5765 102559,Yemva,1899,KO,182,RU,62.58999,50.85939 102648,Zapolyarnyy,1899,KO,182,RU,67.49552,63.73275 102690,Zelenets,1899,KO,182,RU,61.88485,50.74892 102726,Zheshart,1899,KO,182,RU,62.07314,49.57335 97642,Antropovo,1910,KOS,182,RU,58.39876,43.00659 97643,Antropovskiy Rayon,1910,KOS,182,RU,58.16667,43.0 97978,Bogovarovo,1910,KOS,182,RU,58.97849,47.02462 98090,Buy,1910,KOS,182,RU,58.48067,41.53699 98093,Buyskiy Rayon,1910,KOS,182,RU,58.5,41.5 98203,Chistyye Bory,1910,KOS,182,RU,58.36472,41.62778 98218,Chukhloma,1910,KOS,182,RU,58.75375,42.68318 98450,Galich,1910,KOS,182,RU,58.37884,42.34633 98451,Galichskiy Rayon,1910,KOS,182,RU,58.33333,42.25 98478,Georgiyevskoye,1910,KOS,182,RU,58.73101,45.02404 98773,Kadyy,1910,KOS,182,RU,57.78704,43.19029 98774,Kadyyskiy Rayon,1910,KOS,182,RU,57.75,43.25 99140,Kologriv,1910,KOS,182,RU,58.82748,44.31777 99235,Kosmynino,1910,KOS,182,RU,57.58183,40.76434 99241,Kostroma,1910,KOS,182,RU,57.76647,40.92686 99242,Kostromskoy Rayon,1910,KOS,182,RU,57.83333,41.0 99332,Krasnosel’skiy Rayon,1910,KOS,182,RU,57.58333,41.33333 99354,Krasnoye-na-Volge,1910,KOS,182,RU,57.51483,41.239 99742,Makar’yev,1910,KOS,182,RU,57.88501,43.8049 99785,Manturovo,1910,KOS,182,RU,58.32889,44.76406 99786,Manturovskiy Rayon,1910,KOS,182,RU,58.25,44.75 100107,Nerekhta,1910,KOS,182,RU,57.45881,40.57471 100108,Nerekhtskiy Rayon,1910,KOS,182,RU,57.41667,40.75 100122,Neya,1910,KOS,182,RU,58.29719,43.86808 100123,Neyskiy Rayon,1910,KOS,182,RU,58.3,43.9 100499,Ostrovskiy Rayon,1910,KOS,182,RU,57.66667,42.25 100500,Ostrovskoye,1910,KOS,182,RU,57.80574,42.24332 100545,Parfen’yevo,1910,KOS,182,RU,58.48396,43.40876 100546,Parfen’yevskiy Rayon,1910,KOS,182,RU,58.66667,43.5 100564,Pavino,1910,KOS,182,RU,59.1139,46.14142 100766,Ponazyrevo,1910,KOS,182,RU,58.35784,46.31421 100767,Ponazyrevskiy Rayon,1910,KOS,182,RU,58.7,46.31667 100915,Pyshchug,1910,KOS,182,RU,58.88726,45.71341 101265,Shar’inskiy Rayon,1910,KOS,182,RU,58.5,45.58333 101266,Shar’ya,1910,KOS,182,RU,58.36909,45.51558 101449,Soligalich,1910,KOS,182,RU,59.0796,42.28526 101450,Soligalichskiy Rayon,1910,KOS,182,RU,59.0,42.25 101642,Sudislavl’,1910,KOS,182,RU,57.88175,41.70829 101643,Sudislavskiy Rayon,1910,KOS,182,RU,57.83333,41.66667 101682,Susanino,1910,KOS,182,RU,58.14881,41.59483 102296,Vetluzhskiy,1910,KOS,182,RU,58.39016,45.46543 102335,Vokhma,1910,KOS,182,RU,58.9303,46.75859 102336,Vokhomskiy Rayon,1910,KOS,182,RU,58.91667,46.58333 102345,Volgorechensk,1910,KOS,182,RU,57.43931,41.15553 97486,Abinsk,1891,KDA,182,RU,44.86803,38.15728 97487,Abinskiy Rayon,1891,KDA,182,RU,44.83402,38.27891 97490,Abrau-Dyurso,1891,KDA,182,RU,44.69973,37.60098 97503,Adler,1891,KDA,182,RU,43.42896,39.92391 97509,Afipskiy,1891,KDA,182,RU,44.90005,38.84265 97520,Agoy,1891,KDA,182,RU,44.1466,39.0373 97521,Agronom,1891,KDA,182,RU,45.14021,39.19484 97529,Akhtanizovskaya,1891,KDA,182,RU,45.32128,37.10071 97534,Akhtyrskiy,1891,KDA,182,RU,44.8546,38.3031 97580,Alekseyevskaya,1891,KDA,182,RU,45.77167,40.15528 97620,Anapa,1891,KDA,182,RU,44.89084,37.3239 97621,Anapskaya,1891,KDA,182,RU,44.89671,37.386 97623,Anastasiyevskaya,1891,KDA,182,RU,45.21576,37.89258 97651,Apsheronsk,1891,KDA,182,RU,44.46472,39.73417 97668,Arkhipo-Osipovka,1891,KDA,182,RU,44.37194,38.52972 97673,Armavir,1891,KDA,182,RU,44.9892,41.1234 97708,Atamanskaya,1891,KDA,182,RU,46.1773,39.6358 97736,Azovskaya,1891,KDA,182,RU,44.79083,38.62639 97814,Baturinskaya,1891,KDA,182,RU,45.79267,39.37065 97840,Belaya Glina,1891,KDA,182,RU,46.07802,40.86651 97862,Belorechensk,1891,KDA,182,RU,44.77127,39.87879 97863,Belorechenskiy Rayon,1891,KDA,182,RU,44.79923,39.72061 97872,Belozërnyy,1891,KDA,182,RU,45.06433,38.67901 97893,Berezanskaya,1891,KDA,182,RU,45.70562,39.59324 97912,Besleneyevskaya,1891,KDA,182,RU,44.231,40.725 97913,Besskorbnaya,1891,KDA,182,RU,44.6447,41.311 97951,Blagovetschenskaya,1891,KDA,182,RU,45.0553,37.13276 98062,Bryukhovetskaya,1891,KDA,182,RU,45.80603,38.99959 98111,Chamlykskaya,1891,KDA,182,RU,44.71583,40.87861 98138,Chelbasskaya,1891,KDA,182,RU,45.97924,39.37186 98173,Chernomorskiy,1891,KDA,182,RU,44.85056,38.49361 98174,Chernoyerkovskaya,1891,KDA,182,RU,45.43306,37.76861 98233,Dagomys,1891,KDA,182,RU,43.66974,39.66863 98277,Dinskaya,1891,KDA,182,RU,45.21516,39.2265 98280,Divnomorskoye,1891,KDA,182,RU,44.5017,38.1342 98283,Dmitriyevskaya,1891,KDA,182,RU,45.65639,40.76528 98289,Dneprovskaya,1891,KDA,182,RU,45.62359,38.80807 98304,Dolzhanskaya,1891,KDA,182,RU,46.63369,37.80246 98360,Dvubratskiy,1891,KDA,182,RU,45.23888,39.80499 98378,Dzhiginka,1891,KDA,182,RU,45.133,37.33825 98379,Dzhubga,1891,KDA,182,RU,44.3211,38.7073 98414,Fastovetskaya,1891,KDA,182,RU,45.91889,40.15889 98466,Gayduk,1891,KDA,182,RU,44.78489,37.7005 98474,Gelendzhik,1891,KDA,182,RU,44.5622,38.0848 98491,Girey,1891,KDA,182,RU,45.4012,40.6587 98494,Glafirovka,1891,KDA,182,RU,46.76378,38.40785 98502,Glubokiy,1891,KDA,182,RU,44.94673,41.01845 98510,Golubitskaya,1891,KDA,182,RU,45.32566,37.2702 98533,Gornoye Loo,1891,KDA,182,RU,43.71294,39.60492 98570,Goryachiy Klyuch,1891,KDA,182,RU,44.63083,39.13 98571,Gostagayevskaya,1891,KDA,182,RU,45.02284,37.50511 98592,Grivenskaya,1891,KDA,182,RU,45.6473,38.17597 98605,Gubskaya,1891,KDA,182,RU,44.31639,40.63583 98609,Gul’kevichi,1891,KDA,182,RU,45.35383,40.69465 98649,Il’ich,1891,KDA,182,RU,45.42488,36.77402 98660,Il’skiy,1891,KDA,182,RU,44.84222,38.56686 98692,Irkliyevskaya,1891,KDA,182,RU,45.85635,39.65381 98765,Kabardinka,1891,KDA,182,RU,44.65139,37.94278 98789,Kalininskaya,1891,KDA,182,RU,45.4844,38.66221 98798,Kalnibolotskaya,1891,KDA,182,RU,46.00583,40.45682 98828,Kamyshevatskaya,1891,KDA,182,RU,46.41316,37.95632 98840,Kanelovskaya,1891,KDA,182,RU,46.5896,39.1944 98841,Kanevskaya,1891,KDA,182,RU,46.0849,38.9596 98913,Kavkazskaya,1891,KDA,182,RU,45.4453,40.6765 98928,Kazanskaya,1891,KDA,182,RU,45.4106,40.4361 98953,Khadyzhensk,1891,KDA,182,RU,44.4258,39.5362 98997,Kholmskiy,1891,KDA,182,RU,44.84694,38.385 99009,Khosta,1891,KDA,182,RU,43.51484,39.86825 99082,Kislyakovskaya,1891,KDA,182,RU,46.4417,39.675 99086,Kiyevskoye,1891,KDA,182,RU,45.03829,37.88829 99185,Konokovo,1891,KDA,182,RU,44.8616,41.3266 99191,Konstantinovskaya,1891,KDA,182,RU,44.83528,40.72694 99195,Kontenko,1891,KDA,182,RU,45.35806,36.83222 99198,Kopanskaya,1891,KDA,182,RU,46.27785,38.47955 99203,Korenovsk,1891,KDA,182,RU,45.46899,39.45136 99222,Korzhevskiy,1891,KDA,182,RU,45.19414,37.71949 99251,Kovalevskoye,1891,KDA,182,RU,45.19417,40.97611 99283,Krasnaya Polyana,1891,KDA,182,RU,43.67952,40.20403 99292,Krasnoarmeyskaya,1891,KDA,182,RU,45.36614,38.21171 99300,Krasnodar,1891,KDA,182,RU,45.04484,38.97603 99351,Krasnoye,1891,KDA,182,RU,46.7373,39.5645 99399,Kropotkin,1891,KDA,182,RU,45.4375,40.57556 99405,Krylovskaya,1891,KDA,182,RU,46.31944,39.97111 99406,Krylovskiy Rayon,1891,KDA,182,RU,46.33333,39.96667 99408,Krymsk,1891,KDA,182,RU,44.92934,37.99117 99409,Krymskiy Rayon,1891,KDA,182,RU,44.90532,37.80526 99415,Kubanskiy,1891,KDA,182,RU,45.92917,40.58056 99417,Kuchugury,1891,KDA,182,RU,45.40702,36.95586 99419,Kudepsta,1891,KDA,182,RU,43.49547,39.89294 99460,Kurganinsk,1891,KDA,182,RU,44.88,40.59861 99485,Kushchëvskaya,1891,KDA,182,RU,46.5599,39.6321 99530,Labinsk,1891,KDA,182,RU,44.63417,40.73556 99533,Ladozhskaya,1891,KDA,182,RU,45.30902,39.93803 99549,Lazarevskoye,1891,KDA,182,RU,43.90886,39.33137 99562,Lenina,1891,KDA,182,RU,46.06667,39.78333 99564,Leningradskaya,1891,KDA,182,RU,46.3214,39.3877 99587,Lermontovo,1891,KDA,182,RU,44.3038,38.7572 99672,Lovlinskaya,1891,KDA,182,RU,45.51611,40.24 99822,Maykopskoye,1891,KDA,182,RU,45.39361,40.76583 99845,Medvedovskaya,1891,KDA,182,RU,45.45151,39.02485 99901,Mikhaylovskaya,1891,KDA,182,RU,44.99472,40.59639 99926,Mirskoy,1891,KDA,182,RU,45.5439,40.3998 99981,Mostovskiy Rayon,1891,KDA,182,RU,44.27503,40.64588 99982,Mostovskoy,1891,KDA,182,RU,44.41222,40.79361 100032,Myskhako,1891,KDA,182,RU,44.65917,37.76611 100081,Nebug,1891,KDA,182,RU,44.1717,39.0026 100083,Neftegorsk,1891,KDA,182,RU,44.3658,39.7078 100093,Nekrasovskaya,1891,KDA,182,RU,45.14468,39.74868 100223,Novoalekseyevskaya,1891,KDA,182,RU,44.81889,40.93389 100229,Novobeysugskaya,1891,KDA,182,RU,45.47195,39.88614 100237,Novoderevyankovskaya,1891,KDA,182,RU,46.32312,38.74724 100238,Novodmitriyevskaya,1891,KDA,182,RU,44.83276,38.87847 100241,Novodzhereliyevskaya,1891,KDA,182,RU,45.77373,38.67227 100252,Novokorsunskaya,1891,KDA,182,RU,45.6408,39.14641 100254,Novokubansk,1891,KDA,182,RU,45.117,41.0267 100255,Novokubanskiy Rayon,1891,KDA,182,RU,45.08798,41.04466 100260,Novolabinskaya,1891,KDA,182,RU,45.10956,39.89399 100263,Novoleushkovskaya,1891,KDA,182,RU,45.9956,39.9921 100265,Novomalorossiyskaya,1891,KDA,182,RU,45.63483,39.89481 100267,Novomikhaylovskiy,1891,KDA,182,RU,44.2626,38.8585 100268,Novominskaya,1891,KDA,182,RU,46.3163,38.9586 100270,Novomyshastovskaya,1891,KDA,182,RU,45.19909,38.58272 100282,Novoplatnirovskaya,1891,KDA,182,RU,46.1065,39.4191 100286,Novopokrovskaya,1891,KDA,182,RU,45.95139,40.70056 100288,Novorossiysk,1891,KDA,182,RU,44.72439,37.76752 100289,Novorozhdestvenskaya,1891,KDA,182,RU,45.86057,39.94968 100299,Novoshcherbinovskaya,1891,KDA,182,RU,46.47669,38.64757 100314,Novotitarovskaya,1891,KDA,182,RU,45.23756,38.98059 100319,Novoukrainskiy,1891,KDA,182,RU,44.8942,38.04886 100320,Novoukrainskoye,1891,KDA,182,RU,45.37833,40.52972 100327,Novovelichkovskaya,1891,KDA,182,RU,45.27638,38.84165 100432,Ol’ginka,1891,KDA,182,RU,44.2075,38.89111 100435,Ol’ginskaya,1891,KDA,182,RU,45.9461,38.54864 100483,Orël-Izumrud,1891,KDA,182,RU,43.46005,39.92377 100504,Otradnaya,1891,KDA,182,RU,44.39333,41.52056 100509,Otrado-Kubanskoye,1891,KDA,182,RU,45.24417,40.84083 100551,Parkovyy,1891,KDA,182,RU,45.83306,40.14556 100562,Pashkovskiy,1891,KDA,182,RU,45.02366,39.10436 100574,Pavlovskaya,1891,KDA,182,RU,46.1377,39.7832 100579,Pavlovskiy Rayon,1891,KDA,182,RU,46.08978,39.7315 100597,Peredovaya,1891,KDA,182,RU,44.11722,41.47556 100603,Perepravnaya,1891,KDA,182,RU,44.3366,40.7849 100610,Pereyaslovskaya,1891,KDA,182,RU,45.84121,39.02379 100653,Petropavlovskaya,1891,KDA,182,RU,45.08189,40.45125 100662,Petrovskaya,1891,KDA,182,RU,45.43139,37.955 100696,Plastunovskaya,1891,KDA,182,RU,45.29432,39.26505 100697,Platnirovskaya,1891,KDA,182,RU,45.39531,39.3842 100773,Poputnaya,1891,KDA,182,RU,44.5125,41.4392 100824,Prikubanskiy,1891,KDA,182,RU,45.0015,41.1795 100835,Primorsko-Akhtarsk,1891,KDA,182,RU,46.0497,38.1747 100854,Prochnookopskaya,1891,KDA,182,RU,45.0666,41.1175 100877,Psebay,1891,KDA,182,RU,44.1234,40.8107 100879,Pshada,1891,KDA,182,RU,44.47,38.3996 100880,Pshekhskaya,1891,KDA,182,RU,44.69597,39.79665 100947,Rayevskaya,1891,KDA,182,RU,44.83571,37.55577 100979,Rodnikovskaya,1891,KDA,182,RU,44.76444,40.66556 100985,Rogovskaya,1891,KDA,182,RU,45.73117,38.7396 101042,Ryazanskaya,1891,KDA,182,RU,44.95528,39.58894 101115,Saratovskaya,1891,KDA,182,RU,44.70752,39.22156 101223,Severskaya,1891,KDA,182,RU,44.85407,38.67686 101229,Shabel’skoye,1891,KDA,182,RU,46.85275,38.47278 101287,Shedok,1891,KDA,182,RU,44.2179,40.8487 101303,Shepsi,1891,KDA,182,RU,44.0355,39.1474 101328,Shirochanka,1891,KDA,182,RU,46.64968,38.39782 101335,Shkurinskaya,1891,KDA,182,RU,46.5858,39.3599 101405,Slavyansk-na-Kubani,1891,KDA,182,RU,45.2558,38.1256 101406,Slavyansky rayon,1891,KDA,182,RU,45.41667,37.75 101416,Smolenskaya,1891,KDA,182,RU,44.78636,38.80333 101429,Sochi,1891,KDA,182,RU,43.59917,39.72569 101439,Sokolovskoye,1891,KDA,182,RU,45.25833,40.67972 101506,Sovetskaya,1891,KDA,182,RU,44.77694,41.17222 101519,Sovkhoznyy,1891,KDA,182,RU,45.29462,38.11384 101540,Spokoynaya,1891,KDA,182,RU,44.2468,41.4015 101564,Staraya Stanitsa,1891,KDA,182,RU,45.0098,41.1512 101576,Staroderevyankovskaya,1891,KDA,182,RU,46.1276,38.9674 101580,Starodzhereliyevskaya,1891,KDA,182,RU,45.47599,38.2968 101582,Starokorsunskaya,1891,KDA,182,RU,45.05727,39.31611 101585,Staroleushkovskaya,1891,KDA,182,RU,45.98666,39.75987 101586,Starominskaya,1891,KDA,182,RU,46.53,39.04972 101587,Staromyshastovskaya,1891,KDA,182,RU,45.34329,39.07608 101588,Staronizhestebliyevskaya,1891,KDA,182,RU,45.38315,38.44304 101594,Staroshcherbinovskaya,1891,KDA,182,RU,46.6311,38.6742 101597,Starotitarovskaya,1891,KDA,182,RU,45.21938,37.15476 101599,Starovelichkovskaya,1891,KDA,182,RU,45.42884,38.73261 101626,Strelka,1891,KDA,182,RU,45.20633,37.2865 101655,Sukko,1891,KDA,182,RU,44.79945,37.42145 101760,Taman’,1891,KDA,182,RU,45.2117,36.71609 101808,Tbilisskaya,1891,KDA,182,RU,45.36333,40.19 101814,Temirgoyevskaya,1891,KDA,182,RU,45.11414,40.28027 101816,Temizhbekskaya,1891,KDA,182,RU,45.44556,40.845 101820,Temruksky rayon,1891,KDA,182,RU,45.25,37.25 101821,Temryuk,1891,KDA,182,RU,45.27055,37.38716 101832,Ternevskaya,1891,KDA,182,RU,45.8513,40.4125 101851,Tikhoretsk,1891,KDA,182,RU,45.85472,40.12528 101852,Tikhoretskiy Rayon,1891,KDA,182,RU,45.73846,40.27549 101858,Timashëvsk,1891,KDA,182,RU,45.61694,38.94528 101915,Troitskaya,1891,KDA,182,RU,45.13493,38.12544 101932,Trudobelikovskiy,1891,KDA,182,RU,45.26853,38.15376 101946,Tsibanobalka,1891,KDA,182,RU,44.98034,37.34384 101957,Tuapse,1891,KDA,182,RU,44.1053,39.0802 101958,Tuapsinskiy Rayon,1891,KDA,182,RU,44.25,39.08333 102023,Udobnaya,1891,KDA,182,RU,44.1932,41.5529 102065,Upornaya,1891,KDA,182,RU,44.3914,41.0196 102103,Uspenskaya,1891,KDA,182,RU,45.76448,41.06696 102104,Uspenskoye,1891,KDA,182,RU,44.8311,41.3927 102135,Ust’-Labinsk,1891,KDA,182,RU,45.21077,39.68914 102187,Vardane,1891,KDA,182,RU,43.73179,39.55428 102188,Varenikovskaya,1891,KDA,182,RU,45.12085,37.64171 102202,Vasyurinskaya,1891,KDA,182,RU,45.11809,39.42399 102219,Velikovechnoye,1891,KDA,182,RU,44.93402,39.75499 102225,Ventsy,1891,KDA,182,RU,45.37639,40.83583 102236,Verkhnebakanskiy,1891,KDA,182,RU,44.84917,37.65722 102313,Vinogradnyy,1891,KDA,182,RU,45.0561,37.32125 102322,Vityazevo,1891,KDA,182,RU,45.0013,37.28211 102328,Vladimirskaya,1891,KDA,182,RU,44.5455,40.7933 102382,Vorontsovka,1891,KDA,182,RU,46.6529,38.0787 102408,Voznesenskaya,1891,KDA,182,RU,44.5527,41.0318 102436,Vyselki,1891,KDA,182,RU,45.58128,39.66409 102437,Vyselkovskiy Rayon,1891,KDA,182,RU,45.66667,39.75 102439,Vyshestebliyevskaya,1891,KDA,182,RU,45.19611,37.01806 102450,Vysokoye,1891,KDA,182,RU,43.46304,39.96701 102500,Yaroslavskaya,1891,KDA,182,RU,44.61056,40.46417 102507,Yasenskaya,1891,KDA,182,RU,46.3592,38.269 102542,Yelizavetinskaya,1891,KDA,182,RU,45.04616,38.79491 102579,Yeysk,1891,KDA,182,RU,46.7055,38.2739 102580,Yeyskoye Ukrepleniye,1891,KDA,182,RU,46.7063,38.6121 102600,Yurovka,1891,KDA,182,RU,45.1147,37.41882 102620,Yuzhnyy,1891,KDA,182,RU,45.0025,40.47472 102670,Zavetnyy,1891,KDA,182,RU,44.9316,41.1373 97481,Aban,1840,KYA,182,RU,56.6787,96.0658 97482,Abanskiy Rayon,1840,KYA,182,RU,56.83333,96.0 97495,Achinsk,1840,KYA,182,RU,56.2694,90.4993 97496,Achinskiy Rayon,1840,KYA,182,RU,56.25,90.5 97517,Aginskoye,1840,KYA,182,RU,55.2586,94.9079 97768,Balakhta,1840,KYA,182,RU,55.38425,91.61872 97769,Balakhtinskiy Rayon,1840,KYA,182,RU,55.5,91.5 97825,Baykit,1840,KYA,182,RU,61.67694,96.37917 97904,Berëzovka,1840,KYA,182,RU,56.03044,93.11164 97896,Berezovskiy rayon,1840,KYA,182,RU,56.03446,93.13866 97934,Birilyusskiy Rayon,1840,KYA,182,RU,57.25,90.75 97976,Bogotol,1840,KYA,182,RU,56.20778,89.53417 97977,Bogotol’skiy Rayon,1840,KYA,182,RU,56.25,89.75 97981,Boguchanskiy Rayon,1840,KYA,182,RU,58.5,97.5 97982,Boguchany,1840,KYA,182,RU,58.38139,97.45306 98004,Bol’shemurtinskiy Rayon,1840,KYA,182,RU,57.0,93.0 98007,Bol’sheuluyskiy Rayon,1840,KYA,182,RU,56.66667,90.75 98020,Bor,1840,KYA,182,RU,61.60111,90.01806 98030,Borodino,1840,KYA,182,RU,55.9061,94.9079 98222,Chunoyar,1840,KYA,182,RU,57.4483,97.3286 98275,Dikson,1840,KYA,182,RU,73.50819,80.52918 98279,Divnogorsk,1840,KYA,182,RU,55.9581,92.3726 98334,Dubinino,1840,KYA,182,RU,55.61917,89.09111 98347,Dudinka,1840,KYA,182,RU,69.40583,86.17778 98370,Dzerzhinskoye,1840,KYA,182,RU,56.83444,95.22833 98407,Evenkiyskiy District,1840,KYA,182,RU,65.0,98.0 98426,Filimonovo,1840,KYA,182,RU,56.20111,95.46111 98628,Idrinskiy Rayon,1840,KYA,182,RU,54.5,92.5 98629,Idrinskoye,1840,KYA,182,RU,54.37083,92.13583 98631,Igarka,1840,KYA,182,RU,67.4655,86.6027 98650,Il’ichevo,1840,KYA,182,RU,53.27889,91.84028 98642,Ilanskiy,1840,KYA,182,RU,56.2325,96.0652 98643,Ilanskiy Rayon,1840,KYA,182,RU,56.0,96.08333 98687,Irbeyskiy Rayon,1840,KYA,182,RU,55.41667,96.0 98688,Irbeyskoye,1840,KYA,182,RU,55.6396,95.4515 98693,Irsha,1840,KYA,182,RU,55.9273,94.7999 98844,Kansk,1840,KYA,182,RU,56.20167,95.7175 98845,Kanskiy Rayon,1840,KYA,182,RU,56.25,95.25 98871,Karatuzskoye,1840,KYA,182,RU,53.60722,92.86667 98920,Kayyerkan,1840,KYA,182,RU,69.37861,87.74389 98922,Kazachinskiy Rayon,1840,KYA,182,RU,57.66667,93.41667 98923,Kazachinskoye,1840,KYA,182,RU,57.7004,93.2809 98936,Kedrovyy,1840,KYA,182,RU,56.28232,91.5376 98972,Khatanga,1840,KYA,182,RU,71.98002,102.47111 99127,Kodinsk,1840,KYA,182,RU,58.60629,99.17398 99230,Koshurnikovo,1840,KYA,182,RU,54.16667,93.3 99321,Krasnokamensk,1840,KYA,182,RU,54.33389,93.25944 99336,Krasnoturansk,1840,KYA,182,RU,54.31861,91.56389 99343,Krasnoyarsk,1840,KYA,182,RU,56.01839,92.86717 99452,Kuragino,1840,KYA,182,RU,53.88785,92.68152 99604,Lesosibirsk,1840,KYA,182,RU,58.23583,92.48278 99783,Manskiy Rayon,1840,KYA,182,RU,55.41667,93.66667 99788,Manzya,1840,KYA,182,RU,58.49222,96.26167 99918,Minusinsk,1840,KYA,182,RU,53.71028,91.6875 99919,Minusinskiy Rayon,1840,KYA,182,RU,53.75,92.0 99983,Motygino,1840,KYA,182,RU,58.18401,94.69339 100075,Nazarovo,1840,KYA,182,RU,56.0104,90.4011 100076,Nazarovskiy Rayon,1840,KYA,182,RU,56.0,90.625 100153,Nizhneingashskiy Rayon,1840,KYA,182,RU,56.25,97.0 100167,Nizhniy Ingash,1840,KYA,182,RU,56.2003,96.5373 100185,Nizhnyaya Poyma,1840,KYA,182,RU,56.1643,97.2065 100198,Norilsk,1840,KYA,182,RU,69.3535,88.2027 100230,Novobirilyussy,1840,KYA,182,RU,56.9526,90.6807 100236,Novochernorechenskiy,1840,KYA,182,RU,56.26658,91.09234 100513,Ovsyanka,1840,KYA,182,RU,55.9583,92.572 100556,Partizanskiy Rayon,1840,KYA,182,RU,55.0,94.16667 100557,Partizanskoye,1840,KYA,182,RU,55.4972,94.3922 100684,Pirovskoye,1840,KYA,182,RU,57.63012,92.26373 100808,Predivinsk,1840,KYA,182,RU,57.0631,93.4374 100945,Rassvet,1840,KYA,182,RU,56.999,91.4724 100949,Razdolinsk,1840,KYA,182,RU,58.42111,94.66583 101140,Sayansk,1840,KYA,182,RU,54.15,91.885 101141,Sayanskiy Rayon,1840,KYA,182,RU,54.75,95.0 101213,Severo-Yeniseyskiy,1840,KYA,182,RU,60.37552,93.03017 101214,Severo-Yeniseyskiy Rayon,1840,KYA,182,RU,60.0,93.25 101247,Shalinskoye,1840,KYA,182,RU,55.7194,93.7589 101263,Sharypovo,1840,KYA,182,RU,55.54028,89.20083 101264,Sharypovskiy Rayon,1840,KYA,182,RU,55.5,89.25 101356,Shushenskiy Rayon,1840,KYA,182,RU,53.41667,91.5 101357,Shushenskoye,1840,KYA,182,RU,53.325,91.93556 101425,Snezhnogorsk,1840,KYA,182,RU,68.09306,87.74 101457,Solnechnyy,1840,KYA,182,RU,56.11583,92.92528 101494,Sosnovoborsk,1840,KYA,182,RU,56.1217,93.3385 101627,Strelka,1840,KYA,182,RU,58.07278,93.03444 101652,Sukhobuzimskoye,1840,KYA,182,RU,56.5,93.27278 101702,Svetlogorsk,1840,KYA,182,RU,66.93762,88.35265 101754,Talnakh,1840,KYA,182,RU,69.4865,88.3972 101767,Tanzybey,1840,KYA,182,RU,53.13265,92.94335 101784,Taseyevo,1840,KYA,182,RU,57.21457,94.89393 101804,Taymyrsky Dolgano-Nenetsky District,1840,KYA,182,RU,72.0,95.0 101846,Teya,1840,KYA,182,RU,60.37202,92.62956 101861,Tinskoy,1840,KYA,182,RU,56.1513,96.9173 101972,Tura,1840,KYA,182,RU,64.27769,100.21849 101982,Turukhansk,1840,KYA,182,RU,65.79479,87.95006 102001,Tyukhtet,1840,KYA,182,RU,56.53939,89.31221 102069,Ural,1840,KYA,182,RU,55.9052,94.7537 102160,Uyar,1840,KYA,182,RU,55.8118,94.3247 102161,Uyarskiy Rayon,1840,KYA,182,RU,55.83333,94.25 102165,Uzhur,1840,KYA,182,RU,55.31246,89.83301 102185,Vanavara,1840,KYA,182,RU,60.34679,102.28434 102555,Yemel’yanovo,1840,KYA,182,RU,56.16776,92.67539 102556,Yemel’yanovskiy Rayon,1840,KYA,182,RU,56.41667,92.75 102560,Yeniseysk,1840,KYA,182,RU,58.44937,92.17968 102561,Yeniseyskiy Rayon,1840,KYA,182,RU,60.0,89.0 102564,Yermakovskoye,1840,KYA,182,RU,53.27545,92.40021 102696,Zelenogorsk,1840,KYA,182,RU,56.1124,94.5985 102703,Zelënyy Bor,1840,KYA,182,RU,53.62178,91.61528 102721,Zheleznogorsk,1840,KYA,182,RU,56.25111,93.53194 102786,Zykovo,1840,KYA,182,RU,55.95503,93.16093 97875,Belozërskoye,1915,KGN,182,RU,55.82139,65.58417 98236,Dalmatovo,1915,KGN,182,RU,56.26,62.9362 98504,Glyadyanskoye,1915,KGN,182,RU,54.9075,65.08833 98639,Ikovka,1915,KGN,182,RU,55.60889,64.9375 98908,Kataysk,1915,KGN,182,RU,56.289,62.5841 98945,Ketovo,1915,KGN,182,RU,55.355,65.32583 99371,Krasnyy Oktyabr’,1915,KGN,182,RU,55.65667,64.81333 99459,Kurgan,1915,KGN,182,RU,55.45,65.33333 99477,Kurtamysh,1915,KGN,182,RU,54.91028,64.43194 99557,Lebyazh’ye,1915,KGN,182,RU,55.26889,66.49472 99558,Lebyazh’yevskiy Rayon,1915,KGN,182,RU,55.33333,66.5 99592,Lesnikovo,1915,KGN,182,RU,55.28222,65.3175 99748,Makushino,1915,KGN,182,RU,55.21028,67.24417 99929,Mishkino,1915,KGN,182,RU,55.33889,63.9175 99944,Mokrousovo,1915,KGN,182,RU,55.81028,66.76528 99945,Mokrousovskiy Rayon,1915,KGN,182,RU,55.75,67.0 100666,Petukhovo,1915,KGN,182,RU,55.06917,67.90194 100758,Polovinnoye,1915,KGN,182,RU,54.79139,65.98639 100870,Prosvet,1915,KGN,182,RU,55.57028,65.0825 101067,Safakulevo,1915,KGN,182,RU,54.9901,62.5442 101068,Safakulevskiy Rayon,1915,KGN,182,RU,54.91667,62.5 101233,Shadrinsk,1915,KGN,182,RU,56.0852,63.6335 101270,Shatrovo,1915,KGN,182,RU,56.5197,64.632 101349,Shumikha,1915,KGN,182,RU,55.22611,63.29611 101351,Shumikhinskiy Rayon,1915,KGN,182,RU,55.25,63.25 101939,Tselinnoye,1915,KGN,182,RU,54.50111,63.67361 102189,Vargashi,1915,KGN,182,RU,55.35556,65.84667 102190,Vargashinskiy Rayon,1915,KGN,182,RU,55.33333,65.91667 102418,Vvedenskoye,1915,KGN,182,RU,55.47426,65.08449 102594,Yurgamysh,1915,KGN,182,RU,55.37454,64.46222 102782,Zverinogolovskoye,1915,KGN,182,RU,54.45397,64.85242 97839,Belaya,1855,KRS,182,RU,51.05444,35.71611 98147,Cheremisinovo,1855,KRS,182,RU,51.8855,37.2646 98148,Cheremisinovskiy Rayon,1855,KRS,182,RU,51.91667,37.16667 98168,Chernitsyno,1855,KRS,182,RU,51.50739,36.05101 98415,Fatezh,1855,KRS,182,RU,52.0891,35.8632 98416,Fatezhskiy Rayon,1855,KRS,182,RU,52.0,35.75 98503,Glushkovo,1855,KRS,182,RU,51.33917,34.63278 98565,Gorshechenskiy Rayon,1855,KRS,182,RU,51.5,38.0 98566,Gorshechnoye,1855,KRS,182,RU,51.5244,38.0365 98727,Ivanino,1855,KRS,182,RU,51.6434,35.5769 98903,Kastorenskiy Rayon,1855,KRS,182,RU,51.75,38.16667 98904,Kastornoye,1855,KRS,182,RU,51.8334,38.1302 99001,Khomutovka,1855,KRS,182,RU,51.9207,34.5619 99068,Kirovskiy,1855,KRS,182,RU,51.41667,36.66667 99196,Konyshevka,1855,KRS,182,RU,51.8418,35.2941 99204,Korenëvo,1855,KRS,182,RU,51.4119,34.908 99410,Kshenskiy,1855,KRS,182,RU,51.84083,37.71361 99457,Kurchatov,1855,KRS,182,RU,51.6601,35.6521 99474,Kursk,1855,KRS,182,RU,51.73733,36.18735 99476,Kurskiy Rayon,1855,KRS,182,RU,51.75,36.16667 99726,L’govskiy,1855,KRS,182,RU,51.63069,35.2775 99727,L’govskiy Rayon,1855,KRS,182,RU,51.58333,35.25 99784,Manturovo,1855,KRS,182,RU,51.4547,37.1282 99846,Medvenskiy Rayon,1855,KRS,182,RU,51.41667,36.11667 99896,Mikhaylovka,1855,KRS,182,RU,52.2317,35.3767 100389,Oboyan’,1855,KRS,182,RU,51.20981,36.27919 100388,Oboyanskiy Rayon,1855,KRS,182,RU,51.25,36.16667 100427,Olym,1855,KRS,182,RU,51.6798,38.1758 100613,Pervoavgustovskiy,1855,KRS,182,RU,52.2264,35.0552 100770,Ponyri Vtoryye,1855,KRS,182,RU,52.27994,36.22461 100841,Pristen’,1855,KRS,182,RU,51.23551,36.69594 100840,Pristenskiy Rayon,1855,KRS,182,RU,51.25,36.75 100875,Pryamitsyno,1855,KRS,182,RU,51.6561,35.9314 101055,Ryl’sk,1855,KRS,182,RU,51.5655,34.6822 101278,Shchigry,1855,KRS,182,RU,51.87555,36.90432 101461,Solntsevo,1855,KRS,182,RU,51.41853,36.7499 101462,Solntsevskiy Rayon,1855,KRS,182,RU,51.5,36.75 101515,Sovetskiy Rayon,1855,KRS,182,RU,51.83333,37.58333 101647,Sudzha,1855,KRS,182,RU,51.1976,35.2726 101857,Tim,1855,KRS,182,RU,51.62222,37.12444 102383,Voroshnëvo,1855,KRS,182,RU,51.65278,36.01722 102720,Zheleznogorsk,1855,KRS,182,RU,52.331,35.3711 102765,Zolotukhino,1855,KRS,182,RU,52.0842,36.37777 102766,Zolotukhinskiy Rayon,1855,KRS,182,RU,52.08333,36.5 97512,Agalatovo,1896,LEN,182,RU,60.2195,30.27388 97528,Akademicheskoe,1896,LEN,182,RU,60.01375,30.39471 97635,Annino,1896,LEN,182,RU,59.77056,30.05611 97835,Begunitsy,1896,LEN,182,RU,59.58552,29.31757 97986,Boksitogorsk,1896,LEN,182,RU,59.47405,33.84853 97987,Boksitogorskiy Rayon,1896,LEN,182,RU,59.5,34.0 97999,Bol’shaya Izhora,1896,LEN,182,RU,59.93796,29.57721 98027,Borisova Griva,1896,LEN,182,RU,60.08936,30.97727 98064,Budogoshch’,1896,LEN,182,RU,59.28158,32.47074 98066,Bugry,1896,LEN,182,RU,60.07121,30.39225 98165,Chernaya Rechka,1896,LEN,182,RU,59.98594,30.30338 98332,Druzhnaya Gorka,1896,LEN,182,RU,59.28018,30.12709 98444,Fëdorovskoye,1896,LEN,182,RU,59.66306,30.53222 98428,Finlyandskiy,1896,LEN,182,RU,59.96824,30.36415 98434,Fornosovo,1896,LEN,182,RU,59.56889,30.55444 98457,Garbolovo,1896,LEN,182,RU,60.34127,30.49551 98460,Gatchina,1896,LEN,182,RU,59.57639,30.12833 98497,Glebychevo,1896,LEN,182,RU,60.43868,28.71826 98519,Gorbunki,1896,LEN,182,RU,59.81307,29.98478 98568,Gorskaya,1896,LEN,182,RU,60.0464,29.97137 98572,Gostilitsy,1896,LEN,182,RU,59.74832,29.62205 98651,Il’ichëvo,1896,LEN,182,RU,60.26808,29.7523 98663,Imeni Morozova,1896,LEN,182,RU,59.97572,31.03762 98667,Imeni Sverdlova,1896,LEN,182,RU,59.79611,30.66583 98716,Issad,1896,LEN,182,RU,60.06743,32.34331 98726,Ivangorod,1896,LEN,182,RU,59.37155,28.21625 98790,Kalininskiy,1896,LEN,182,RU,59.99675,30.3899 98813,Kamenka,1896,LEN,182,RU,60.44639,29.0829 98815,Kamennogorsk,1896,LEN,182,RU,60.95451,29.13391 99022,Khvalovo,1896,LEN,182,RU,59.94774,32.73723 99036,Kikerino,1896,LEN,182,RU,59.46466,29.62729 99050,Kingisepp,1896,LEN,182,RU,59.37331,28.61343 99051,Kingiseppskiy Rayon,1896,LEN,182,RU,59.5,28.5 99052,Kipen’,1896,LEN,182,RU,59.67407,29.84977 99057,Kirishi,1896,LEN,182,RU,59.44712,32.02049 99065,Kirovsk,1896,LEN,182,RU,59.88101,30.99507 99071,Kirovskiy Rayon,1896,LEN,182,RU,59.83333,31.0 99117,Kobrinskoye,1896,LEN,182,RU,59.4225,30.12389 99137,Kolchanovo,1896,LEN,182,RU,60.01647,32.58837 99150,Koltushi,1896,LEN,182,RU,59.92969,30.64465 99164,Kommunar,1896,LEN,182,RU,59.62056,30.39 99200,Kopor’ye,1896,LEN,182,RU,59.71067,29.03488 99211,Korobitsyno,1896,LEN,182,RU,60.51523,29.72437 99360,Krasnyy Bor,1896,LEN,182,RU,59.68194,30.66806 99390,Krestovskiy ostrov,1896,LEN,182,RU,59.97091,30.25789 99469,Kurortnyy,1896,LEN,182,RU,60.16562,29.908 99498,Kuyvozi,1896,LEN,182,RU,60.31931,30.43631 99507,Kuznechnoye,1896,LEN,182,RU,61.1153,29.87535 99555,Lebyazh’ye,1896,LEN,182,RU,59.96124,29.41487 99576,Leninskoye,1896,LEN,182,RU,60.22021,29.84711 99591,Leskolovo,1896,LEN,182,RU,60.26341,30.45462 99603,Lesogorskiy,1896,LEN,182,RU,61.04549,28.92938 99648,Lodeynopol’skiy Rayon,1896,LEN,182,RU,60.5,33.75 99649,Lodeynoye Pole,1896,LEN,182,RU,60.726,33.55306 99658,Lomonosovskiy Rayon,1896,LEN,182,RU,59.89721,29.73994 99680,Luga,1896,LEN,182,RU,58.73722,29.84528 99693,Luppolovo,1896,LEN,182,RU,60.15402,30.28034 99697,Luzhskiy Rayon,1896,LEN,182,RU,58.75,29.75 99712,Lyuban’,1896,LEN,182,RU,59.35,31.21667 99770,Maloye Verevo,1896,LEN,182,RU,59.61361,30.17278 99798,Mariyenburg,1896,LEN,182,RU,59.57139,30.06472 99885,Mga,1896,LEN,182,RU,59.75,31.06667 99893,Michurinskoye,1896,LEN,182,RU,60.5642,29.86232 99989,Mshinskaya,1896,LEN,182,RU,59.015,29.94333 100008,Murino,1896,LEN,182,RU,60.04796,30.45204 100146,Nikol’skoye,1896,LEN,182,RU,59.70056,30.78472 100204,Novaya Ladoga,1896,LEN,182,RU,60.10246,32.30191 100332,Novoye Devyatkino,1896,LEN,182,RU,60.06364,30.48328 100372,Nurma,1896,LEN,182,RU,59.55,31.01667 100434,Ol’gino,1896,LEN,182,RU,59.83702,29.92266 100485,Osel’ki,1896,LEN,182,RU,60.20503,30.49667 100506,Otradnoye,1896,LEN,182,RU,59.7775,30.81806 100553,Parnas,1896,LEN,182,RU,60.06964,30.3487 100560,Pasha,1896,LEN,182,RU,60.39546,33.04308 100569,Pavlovo,1896,LEN,182,RU,59.80861,30.89667 100625,Pervomayskoye,1896,LEN,182,RU,60.35922,29.7424 100671,Pikalëvo,1896,LEN,182,RU,59.51833,34.16639 100729,Podporozh’ye,1896,LEN,182,RU,60.91124,34.17064 100728,Podporozhskiy Rayon,1896,LEN,182,RU,61.0,34.5 100826,Priladozhskiy,1896,LEN,182,RU,59.85,31.48333 100831,Primorsk,1896,LEN,182,RU,60.36593,28.60737 100839,Priozërsk,1896,LEN,182,RU,61.03928,30.12907 100838,Priozersky,1896,LEN,182,RU,61.03901,30.13515 100987,Romanovka,1896,LEN,182,RU,60.0443,30.714 100998,Roshchino,1896,LEN,182,RU,60.25191,29.6085 101013,Rozhdestveno,1896,LEN,182,RU,59.31812,29.94594 101034,Russko-Vysotskoye,1896,LEN,182,RU,59.69963,29.94404 101041,Ryabovo,1896,LEN,182,RU,59.4,31.13333 101047,Rybatskoye,1896,LEN,182,RU,59.8393,30.49873 101091,Sampsonievskiy,1896,LEN,182,RU,59.98499,30.34295 101102,Sapernoye,1896,LEN,182,RU,60.71418,29.95525 101167,Semiozerje,1896,LEN,182,RU,60.32018,29.29705 101193,Sertolovo,1896,LEN,182,RU,60.1444,30.20165 101274,Shcheglovo,1896,LEN,182,RU,60.02839,30.75289 101336,Shlissel’burg,1896,LEN,182,RU,59.9473,31.03845 101377,Sinyavino,1896,LEN,182,RU,59.90781,31.0711 101379,Sista-Palkino,1896,LEN,182,RU,59.80042,28.91049 101385,Siverskiy,1896,LEN,182,RU,59.35444,30.07833 101397,Slantsevskiy Rayon,1896,LEN,182,RU,59.08333,28.25 101398,Slantsy,1896,LEN,182,RU,59.11817,28.09137 101491,Sosnovo,1896,LEN,182,RU,60.55145,30.21441 101498,Sosnovyy Bor,1896,LEN,182,RU,59.8996,29.08574 101509,Sovetskiy,1896,LEN,182,RU,60.53945,28.67756 101556,Staraya,1896,LEN,182,RU,59.92749,30.62765 101561,Staraya Ladoga,1896,LEN,182,RU,59.99872,32.29413 101699,Svetlanovskiy,1896,LEN,182,RU,60.00276,30.33051 101709,Svetogorsk,1896,LEN,182,RU,61.11213,28.86321 101719,Syas’stroy,1896,LEN,182,RU,60.13669,32.56906 101805,Taytsy,1896,LEN,182,RU,59.66444,30.11472 101853,Tikhvin,1896,LEN,182,RU,59.64511,33.52937 101854,Tikhvinskiy Rayon,1896,LEN,182,RU,59.75,33.33333 101874,Toksovo,1896,LEN,182,RU,60.15323,30.51646 101877,Tolmachevo,1896,LEN,182,RU,58.85973,29.91091 101903,Tosnenskiy Rayon,1896,LEN,182,RU,59.41667,31.0 101904,Tosno,1896,LEN,182,RU,59.54,30.8775 102020,Udel’naya,1896,LEN,182,RU,60.01636,30.31815 102053,Ul’yanovka,1896,LEN,182,RU,59.63944,30.76472 102062,Untolovo,1896,LEN,182,RU,60.0122,30.20897 102136,Ust’-Luga,1896,LEN,182,RU,59.66755,28.28713 102200,Vaskelovo,1896,LEN,182,RU,60.39571,30.35419 102207,Vazhiny,1896,LEN,182,RU,60.96444,34.02222 102262,Verkhniye Osel’ki,1896,LEN,182,RU,60.24948,30.44938 102288,Veshchevo,1896,LEN,182,RU,60.73107,29.18305 102312,Vinnitsy,1896,LEN,182,RU,60.62867,34.77302 102320,Vistino,1896,LEN,182,RU,59.77558,28.47708 102346,Volkhov,1896,LEN,182,RU,59.9258,32.33819 102348,Volkhovskiy rayon,1896,LEN,182,RU,59.75,32.5 102361,Volosovo,1896,LEN,182,RU,59.44525,29.48911 102362,Volosovskiy Rayon,1896,LEN,182,RU,59.42105,29.47705 102404,Voyskovitsy,1896,LEN,182,RU,59.53266,29.9362 102411,Voznesen’ye,1896,LEN,182,RU,61.0106,35.47813 102413,Vsevolozhsk,1896,LEN,182,RU,60.01512,30.67314 102414,Vsevolozhskiy Rayon,1896,LEN,182,RU,60.16667,30.5 102426,Vyborg,1896,LEN,182,RU,60.70763,28.75283 102435,Vyritsa,1896,LEN,182,RU,59.40778,30.34806 102451,Vysotsk,1896,LEN,182,RU,60.62879,28.57048 102468,Yakovlevo,1896,LEN,182,RU,60.29409,29.488 102483,Yanino-1,1896,LEN,182,RU,59.94808,30.55914 102498,Yaroslavichi,1896,LEN,182,RU,60.49275,34.50806 102522,Yefimovskiy,1896,LEN,182,RU,59.49639,34.67222 102541,Yelizavetino,1896,LEN,182,RU,59.49173,29.78153 98010,Bol’shoy Khomutets,1889,LIP,182,RU,52.78285,39.87214 98023,Borinskoye,1889,LIP,182,RU,52.4569,39.3713 98116,Chaplygin,1889,LIP,182,RU,53.24319,39.96288 98117,Chaplyginskiy Rayon,1889,LIP,182,RU,53.25,40.0 98244,Dankov,1889,LIP,182,RU,53.25155,39.15553 98245,Dankovskiy Rayon,1889,LIP,182,RU,53.25,39.16667 98291,Dobrinka,1889,LIP,182,RU,52.16528,40.47306 98292,Dobrinskiy Rayon,1889,LIP,182,RU,52.16667,40.5 98293,Dobrovskiy Rayon,1889,LIP,182,RU,52.83333,39.83333 98294,Dobroye,1889,LIP,182,RU,52.8678,39.8109 98301,Dolgorukovo,1889,LIP,182,RU,52.31945,38.34527 98302,Dolgorukovskiy Rayon,1889,LIP,182,RU,52.33333,38.33333 98315,Donskoye,1889,LIP,182,RU,52.6174,38.9738 98596,Gryazi,1889,LIP,182,RU,52.49657,39.93593 98597,Gryazinskiy Rayon,1889,LIP,182,RU,52.5,39.91667 98751,Izmalkovo,1889,LIP,182,RU,52.6887,37.96398 98752,Izmalkovskiy Rayon,1889,LIP,182,RU,52.66667,38.0 98784,Kalikino,1889,LIP,182,RU,52.9493,39.8269 98925,Kazaki,1889,LIP,182,RU,52.62484,38.26488 98932,Kazinka,1889,LIP,182,RU,52.53817,39.82164 98986,Khlevenskiy Rayon,1889,LIP,182,RU,52.16667,39.08333 98987,Khlevnoye,1889,LIP,182,RU,52.19512,39.09316 99289,Krasninskiy Rayon,1889,LIP,182,RU,52.83333,38.75 99349,Krasnoye,1889,LIP,182,RU,52.86449,38.79353 99512,Kuz’minskiye Otverzhki,1889,LIP,182,RU,52.69574,39.47036 99554,Lebedyan’,1889,LIP,182,RU,53.01942,39.16639 99553,Lebedyanskiy Rayon,1889,LIP,182,RU,53.0,39.16667 99609,Lev Tolstoy,1889,LIP,182,RU,53.21344,39.44604 99610,Lev-Tolstovskiy Rayon,1889,LIP,182,RU,53.25,39.5 99632,Lipetsk,1889,LIP,182,RU,52.60311,39.57076 99633,Lipetskiy Rayon,1889,LIP,182,RU,52.58333,39.58333 100664,Petrovskiy,1889,LIP,182,RU,52.24159,40.64976 100700,Plekhanovo,1889,LIP,182,RU,52.63822,39.84729 100819,Prigorodka,1889,LIP,182,RU,52.04472,39.71238 101552,Stanovlyanskiy Rayon,1889,LIP,182,RU,52.83333,38.33333 101553,Stanovoye,1889,LIP,182,RU,52.76384,38.35818 101730,Syrskoye,1889,LIP,182,RU,52.57437,39.4966 101825,Terbunskiy Rayon,1889,LIP,182,RU,52.16667,38.25 101826,Terbuny,1889,LIP,182,RU,52.1493,38.2834 102099,Usman’,1889,LIP,182,RU,52.04662,39.7288 102098,Usmanskiy Rayon,1889,LIP,182,RU,52.0,39.75 102365,Volovo,1889,LIP,182,RU,52.02659,37.8854 102367,Volovskiy Rayon,1889,LIP,182,RU,52.0,37.91667 102538,Yelets,1889,LIP,182,RU,52.62366,38.50169 102539,Yeletskiy Rayon,1889,LIP,182,RU,52.58333,38.5 102626,Zadonsk,1889,LIP,182,RU,52.3904,38.9261 102627,Zadonskiy Rayon,1889,LIP,182,RU,52.41667,38.91667 97672,Arman’,1839,MAG,182,RU,59.66994,150.13164 98349,Dukat,1839,MAG,182,RU,62.57231,155.34988 98409,Evensk,1839,MAG,182,RU,61.91722,159.23348 98552,Gorod Magadan,1839,MAG,182,RU,59.56029,150.79843 98999,Kholodnyy,1839,MAG,182,RU,62.71333,147.91361 99730,Magadan,1839,MAG,182,RU,59.5638,150.80347 100028,Myaundzha,1839,MAG,182,RU,63.04996,147.18438 100439,Ol’skiy Rayon,1839,MAG,182,RU,60.0,153.0 100419,Ola,1839,MAG,182,RU,59.57823,151.29819 100441,Omsukchan,1839,MAG,182,RU,62.51575,155.79038 100442,Omsukchanskiy Rayon,1839,MAG,182,RU,63.0,156.33333 100476,Orotukan,1839,MAG,182,RU,62.26423,151.67153 100528,Palatka,1839,MAG,182,RU,60.10183,150.93433 101226,Seymchan,1839,MAG,182,RU,62.93373,152.39109 101372,Sinegorye,1839,MAG,182,RU,62.08782,150.52162 101435,Sokol,1839,MAG,182,RU,59.91834,150.74956 101542,Srednekanskiy Rayon,1839,MAG,182,RU,64.0,153.5 101685,Susuman,1839,MAG,182,RU,62.78075,148.15396 101748,Talaya,1839,MAG,182,RU,61.37038,152.76878 102068,Uptar,1839,MAG,182,RU,59.89923,150.87376 102137,Ust’-Omchug,1839,MAG,182,RU,61.13336,149.63283 102461,Yagodnoye,1839,MAG,182,RU,62.52406,149.62827 98530,Gornomariyskiy Rayon,1870,ME,182,RU,56.41667,46.75 99039,Kilemarskiy Rayon,1870,ME,182,RU,56.75,46.91667 99040,Kilemary,1870,ME,182,RU,56.77825,46.86594 99271,Koz’modem’yansk,1870,ME,182,RU,56.3419,46.56353 99305,Krasnogorskiy,1870,ME,182,RU,56.1525,48.32583 99500,Kuzhener,1870,ME,182,RU,56.81111,48.91278 99501,Kuzhenerskiy Rayon,1870,ME,182,RU,56.75,49.0 99793,Mari-Turek,1870,ME,182,RU,56.78946,49.62349 99794,Mari-Turekskiy Rayon,1870,ME,182,RU,56.75,49.83333 99842,Medvedevo,1870,ME,182,RU,56.63388,47.80405 99843,Medvedevskiy Rayon,1870,ME,182,RU,56.66667,47.75 99937,Mochalishche,1870,ME,182,RU,56.3306,48.3547 99964,Morki,1870,ME,182,RU,56.43028,48.99472 99965,Morkinskiy Rayon,1870,ME,182,RU,56.5,49.0 100315,Novotor”yal’skiy Rayon,1870,ME,182,RU,57.08333,48.66667 100478,Orshanka,1870,ME,182,RU,56.91607,47.89335 100479,Orshanskiy Rayon,1870,ME,182,RU,56.91667,47.91667 100541,Paran’ga,1870,ME,182,RU,56.70389,49.40472 100542,Paran’ginskiy Rayon,1870,ME,182,RU,56.66667,49.41667 100765,Pomary,1870,ME,182,RU,55.96815,48.35072 100848,Privolzhskiy,1870,ME,182,RU,55.96135,48.41512 101188,Sernur,1870,ME,182,RU,56.93333,49.15361 101189,Sernurskiy Rayon,1870,ME,182,RU,57.0,49.25 101510,Sovetskiy,1870,ME,182,RU,56.75833,48.47611 101514,Sovetskiy Rayon,1870,ME,182,RU,56.66667,48.5 101678,Surok,1870,ME,182,RU,56.44694,48.12139 101683,Suslonger,1870,ME,182,RU,56.31556,48.25306 102306,Vilovatovo,1870,ME,182,RU,56.1724,46.60134 102369,Volzhsk,1870,ME,182,RU,55.86638,48.3594 102371,Volzhskiy Rayon,1870,ME,182,RU,56.08333,48.58333 102581,Yoshkar-Ola,1870,ME,182,RU,56.63877,47.89078 102597,Yurino,1870,ME,182,RU,56.29417,46.30392 102598,Yurinskiy Rayon,1870,ME,182,RU,56.3,46.3 102779,Zvenigovo,1870,ME,182,RU,55.97539,48.01304 102780,Zvenigovskiy Rayon,1870,ME,182,RU,56.25,47.75 97605,Altuf’yevskiy,1901,MOW,182,RU,55.88333,37.58333 97613,Amin’yevo,1901,MOW,182,RU,55.7,37.46667 97634,Annino,1901,MOW,182,RU,55.58333,37.6 97744,Babushkin,1901,MOW,182,RU,55.86931,37.72966 97924,Bibirevo,1901,MOW,182,RU,55.88333,37.6 97938,Biryulëvo,1901,MOW,182,RU,55.58635,37.67781 97971,Bogorodskoye,1901,MOW,182,RU,55.81353,37.71617 98052,Brateyevo,1901,MOW,182,RU,55.63755,37.76438 98190,Cherëmushki,1901,MOW,182,RU,55.66473,37.56135 98185,Chertanovo Yuzhnoye,1901,MOW,182,RU,55.59072,37.59519 98250,Davydkovo,1901,MOW,182,RU,55.71815,37.47271 98514,Gol’yanovo,1901,MOW,182,RU,55.82299,37.81306 98509,Golovinskiy,1901,MOW,182,RU,55.85381,37.49604 98735,Ivanovskoye,1901,MOW,182,RU,55.76667,37.83333 98848,Kapotnya,1901,MOW,182,RU,55.63806,37.79306 99132,Kokoshkino,1901,MOW,182,RU,55.59769,37.1695 99142,Kolomenskoye,1901,MOW,182,RU,55.66667,37.68333 99248,Kotlovka,1901,MOW,182,RU,55.65928,37.60404 99262,Kozeyevo,1901,MOW,182,RU,55.86667,37.61667 99281,Krasnaya Pahra,1901,MOW,182,RU,55.43223,37.26966 99482,Kur’yanovo,1901,MOW,182,RU,55.65,37.7 99511,Kuz’minki,1901,MOW,182,RU,55.7,37.8 99561,Lefortovo,1901,MOW,182,RU,55.76667,37.7 99582,Leonovo,1901,MOW,182,RU,55.85,37.65 99621,Lianozovo,1901,MOW,182,RU,55.89783,37.5868 99622,Likhobory,1901,MOW,182,RU,55.85,37.56667 99529,LMS,1901,MOW,182,RU,55.31425,37.18546 99696,Luzhniki,1901,MOW,182,RU,55.71599,37.55376 99718,Lyublino,1901,MOW,182,RU,55.67738,37.76005 99808,Mar’ino,1901,MOW,182,RU,55.65,37.71667 99817,Matveyevskoye,1901,MOW,182,RU,55.71112,37.47502 99874,Metrogorodok,1901,MOW,182,RU,55.80961,37.78739 99894,Mikhalkovo,1901,MOW,182,RU,55.68333,37.43333 99972,Moscow,1901,MOW,182,RU,55.75222,37.61556 99977,Moskovskiy,1901,MOW,182,RU,55.59911,37.35495 100046,Nagornyy,1901,MOW,182,RU,55.65,37.61667 100091,Nekrasovka,1901,MOW,182,RU,55.69328,37.91148 100147,Nikol’skoye,1901,MOW,182,RU,55.68333,37.48333 100148,Nikulino,1901,MOW,182,RU,55.66943,37.46598 100219,Novo-Peredelkino,1901,MOW,182,RU,55.64528,37.33583 100243,Novogireyevo,1901,MOW,182,RU,55.75378,37.81885 100250,Novokhovrino,1901,MOW,182,RU,55.86667,37.5 100259,Novokuz’minki,1901,MOW,182,RU,55.71667,37.78333 100328,Novovladykino,1901,MOW,182,RU,55.85,37.58333 100358,Novyye Cherëmushki,1901,MOW,182,RU,55.7,37.58333 100360,Novyye Kuz’minki,1901,MOW,182,RU,55.7,37.75 100395,Ochakovo-Matveyevskoye,1901,MOW,182,RU,55.68432,37.44654 100461,Orekhovo-Borisovo,1901,MOW,182,RU,55.61252,37.72639 100462,Orekhovo-Borisovo Severnoye,1901,MOW,182,RU,55.61667,37.68333 100490,Ostankinskiy,1901,MOW,182,RU,55.82957,37.61604 100505,Otradnoye,1901,MOW,182,RU,55.86667,37.6 100750,Pokrovskoye-Streshnëvo,1901,MOW,182,RU,55.80797,37.45814 100812,Presnenskiy,1901,MOW,182,RU,55.75,37.55 100934,Ramenki,1901,MOW,182,RU,55.7,37.5 101005,Rostokino,1901,MOW,182,RU,55.83333,37.66667 101018,Rublëvo,1901,MOW,182,RU,55.78514,37.35481 101043,Ryazanskiy,1901,MOW,182,RU,55.73333,37.76667 101200,Setun’,1901,MOW,182,RU,55.71667,37.41667 101206,Severnyy,1901,MOW,182,RU,55.93583,37.54889 101277,Shcherbinka,1901,MOW,182,RU,55.49972,37.55972 101279,Shchukino,1901,MOW,182,RU,55.8,37.45 101408,Slobodka,1901,MOW,182,RU,55.86667,37.58333 101432,Sokol,1901,MOW,182,RU,55.8,37.51667 101441,Sokol’niki,1901,MOW,182,RU,55.80202,37.67159 101460,Solntsevo,1901,MOW,182,RU,55.63711,37.38115 101630,Strogino,1901,MOW,182,RU,55.81838,37.41224 101710,Sviblovo,1901,MOW,182,RU,55.85,37.63333 101741,Taganskiy,1901,MOW,182,RU,55.73333,37.66667 101812,Tekstil’shchiki,1901,MOW,182,RU,55.70033,37.74271 101879,Tolstopal’tsevo,1901,MOW,182,RU,55.61026,37.21834 101912,Troitsk,1901,MOW,182,RU,55.48498,37.30736 101926,Troparëvo,1901,MOW,182,RU,55.65625,37.48496 101937,Tsaritsyno,1901,MOW,182,RU,55.6254,37.65032 101945,Tsentral’nyy Administrativnyy Okrug,1901,MOW,182,RU,55.74943,37.62371 101995,Tyoply Stan,1901,MOW,182,RU,55.62047,37.49338 102174,Vagonoremont,1901,MOW,182,RU,55.9,37.55 102204,Vatutinki,1901,MOW,182,RU,55.4965,37.32988 102205,Vatutino,1901,MOW,182,RU,55.88441,37.69055 102291,Veshnyaki,1901,MOW,182,RU,55.72393,37.81952 102333,Vnukovo,1901,MOW,182,RU,55.61194,37.29611 102379,Vorob’yovo,1901,MOW,182,RU,55.71667,37.53333 102395,Vostochnoe Degunino,1901,MOW,182,RU,55.8801,37.55758 102397,Vostochnyy,1901,MOW,182,RU,55.81667,37.86667 102432,Vykhino-Zhulebino,1901,MOW,182,RU,55.70196,37.81178 102501,Yaroslavskiy,1901,MOW,182,RU,55.88333,37.71667 102506,Yasenevo,1901,MOW,182,RU,55.60686,37.51991 102629,Zagor’ye,1901,MOW,182,RU,55.57657,37.66709 102641,Zamoskvorech’ye,1901,MOW,182,RU,55.73333,37.63333 102698,Zelenograd,1901,MOW,182,RU,55.9825,37.18139 102746,Zhulebino,1901,MOW,182,RU,55.7,37.85 102784,Zyablikovo,1901,MOW,182,RU,55.61667,37.76667 102791,Zyuzino,1901,MOW,182,RU,55.65608,37.56846 97553,Alabushevo,1882,MOS,182,RU,56.01667,37.15 97578,Alekseyevka,1882,MOS,182,RU,55.63,37.8 97628,Andreyevka,1882,MOS,182,RU,55.98028,37.135 97630,Andreyevskoye,1882,MOS,182,RU,55.55487,37.92566 97636,Annino,1882,MOS,182,RU,55.58316,37.26019 97650,Aprelevka,1882,MOS,182,RU,55.55194,37.0801 97665,Arkhangel’skoye,1882,MOS,182,RU,55.85486,35.32873 97699,Ashitkovo,1882,MOS,182,RU,55.45173,38.59518 97700,Ashukino,1882,MOS,182,RU,56.16667,37.95 97710,Ateptsevo,1882,MOS,182,RU,55.32364,36.75002 97722,Avsyunino,1882,MOS,182,RU,55.56516,39.12324 97723,Avtopoligon,1882,MOS,182,RU,56.34984,37.32296 97760,Bakhchivandzhi,1882,MOS,182,RU,55.88333,38.08333 97765,Baksheyevo,1882,MOS,182,RU,55.7086,39.87666 97773,Balashikha,1882,MOS,182,RU,55.80945,37.95806 97774,Balashikha Urban Okrug,1882,MOS,182,RU,55.83333,38.0 97800,Barvikha,1882,MOS,182,RU,55.74212,37.27926 97803,Barybino,1882,MOS,182,RU,55.26768,37.89333 97858,Beloomut,1882,MOS,182,RU,54.94478,39.33941 97860,Beloozërskiy,1882,MOS,182,RU,55.45978,38.44358 97883,Belyye Stolby,1882,MOS,182,RU,55.33136,37.854 97931,Biorki,1882,MOS,182,RU,55.0528,38.60873 97939,Biryulëvo Zapadnoye,1882,MOS,182,RU,55.58766,37.64282 97970,Bogorodskoye,1882,MOS,182,RU,56.55,37.88333 97988,Bolshiye Vyazëmy,1882,MOS,182,RU,55.62058,36.9762 98000,Bol’shaya Setun’,1882,MOS,182,RU,55.71667,37.41667 98013,Bol’shoye Gryzlovo,1882,MOS,182,RU,54.80033,37.63939 97998,Bolshevo,1882,MOS,182,RU,55.93486,37.83002 98053,Bratovshchina,1882,MOS,182,RU,56.05,37.88333 98058,Bronnitsy,1882,MOS,182,RU,55.42112,38.26188 98063,Budenovetc,1882,MOS,182,RU,56.37975,37.62774 98098,Bykovo,1882,MOS,182,RU,55.63614,38.08027 98121,Chashnikovo,1882,MOS,182,RU,56.03333,37.16667 98135,Chekhov,1882,MOS,182,RU,55.1477,37.47728 98161,Cherkizovo,1882,MOS,182,RU,55.97583,37.7875 98169,Chernogolovka,1882,MOS,182,RU,56.0,38.36667 98187,Cherusti,1882,MOS,182,RU,55.54976,40.01071 98207,Chkalovskiy,1882,MOS,182,RU,55.89534,38.07763 98211,Chornoye,1882,MOS,182,RU,55.74611,38.06889 98224,Chupryakovo,1882,MOS,182,RU,55.55282,36.62721 98243,Danki,1882,MOS,182,RU,54.91806,37.57009 98252,Davydovo,1882,MOS,182,RU,55.60859,38.86109 98255,Dedenëvo,1882,MOS,182,RU,56.24283,37.51769 98257,Dedovsk,1882,MOS,182,RU,55.86861,37.12222 98260,Demikhovo,1882,MOS,182,RU,55.79685,38.88404 98285,Dmitrov,1882,MOS,182,RU,56.34485,37.52041 98287,Dmitrovskiy Pogost,1882,MOS,182,RU,55.31333,39.83358 98288,Dmitrovskiy Rayon,1882,MOS,182,RU,56.35,37.58333 98300,Dolgoprudnyy,1882,MOS,182,RU,55.94958,37.50183 98307,Domodedovo,1882,MOS,182,RU,55.4413,37.75367 98308,Domodedovskiy Rayon,1882,MOS,182,RU,55.41667,37.75 98320,Dorogomilovo,1882,MOS,182,RU,55.75,37.56667 98321,Dorokhovo,1882,MOS,182,RU,55.55056,36.37444 98325,Drezna,1882,MOS,182,RU,55.74208,38.84753 98329,Druzhba,1882,MOS,182,RU,55.88603,37.74267 98337,Dubna,1882,MOS,182,RU,56.73333,37.16667 98343,Dubrovitsy,1882,MOS,182,RU,55.43969,37.4867 98368,Dzerzhinskiy,1882,MOS,182,RU,55.62945,37.85654 98371,Dzerzhinsky,1882,MOS,182,RU,55.62737,37.85803 98385,Elektrogorsk,1882,MOS,182,RU,55.88431,38.7864 98386,Elektrostal’,1882,MOS,182,RU,55.78959,38.44671 98387,Elektrougli,1882,MOS,182,RU,55.72445,38.20908 98418,Fedurnovo,1882,MOS,182,RU,55.75488,38.04696 98424,Fili,1882,MOS,182,RU,55.74819,37.47969 98425,Filimonki,1882,MOS,182,RU,55.55794,37.34719 98431,Firsanovka,1882,MOS,182,RU,55.95361,37.24083 98435,Fosforitnyy,1882,MOS,182,RU,55.32892,38.89509 98439,Fryanovo,1882,MOS,182,RU,56.13333,38.45 98440,Fryazevo,1882,MOS,182,RU,55.73321,38.46458 98441,Fryazino,1882,MOS,182,RU,55.96056,38.04556 98506,Golitsyno,1882,MOS,182,RU,55.60928,36.98212 98527,Gorki Vtoryye,1882,MOS,182,RU,55.72565,37.1635 98528,Gorki-Leninskiye,1882,MOS,182,RU,55.50855,37.77618 98567,Gorshkovo,1882,MOS,182,RU,56.37561,37.4124 98583,Grebnevo,1882,MOS,182,RU,55.95074,38.07973 98625,Gzhel’,1882,MOS,182,RU,55.61008,38.39399 98641,Iksha,1882,MOS,182,RU,56.17204,37.49842 98653,Il’inskiy,1882,MOS,182,RU,55.61902,38.11818 98654,Il’inskiy Pogost,1882,MOS,182,RU,55.47785,38.90906 98657,Il’inskoye,1882,MOS,182,RU,55.24917,37.95805 98668,Imeni Tsyurupy,1882,MOS,182,RU,55.49567,38.65064 98671,Imeni Vorovskogo,1882,MOS,182,RU,55.7319,38.32368 98720,Istra,1882,MOS,182,RU,55.91997,36.86867 98721,Istrinskiy Rayon,1882,MOS,182,RU,55.88333,36.93333 98736,Ivanteyevka,1882,MOS,182,RU,55.97111,37.92083 98754,Izmaylovo,1882,MOS,182,RU,55.78677,37.80165 98763,Kabanovo,1882,MOS,182,RU,55.74815,38.93511 98881,Karinskoye,1882,MOS,182,RU,55.70969,36.68903 98893,Kashira,1882,MOS,182,RU,54.84444,38.16694 98902,Kastanayevo,1882,MOS,182,RU,55.71667,37.5 98942,Kerva,1882,MOS,182,RU,55.61167,39.57665 98980,Khimki,1882,MOS,182,RU,55.89704,37.42969 98981,Khimki Urban Okrug,1882,MOS,182,RU,55.91667,37.41667 99006,Khorlovo,1882,MOS,182,RU,55.3327,38.81365 99008,Khoroshëvo-Mnevniki,1882,MOS,182,RU,55.78363,37.47137 99010,Khotkovo,1882,MOS,182,RU,56.25699,37.99544 99035,Kievskiy,1882,MOS,182,RU,55.42999,36.8666 99102,Klimovsk,1882,MOS,182,RU,55.36352,37.52984 99104,Klin,1882,MOS,182,RU,56.33333,36.73333 99105,Klinskiy Rayon,1882,MOS,182,RU,56.41667,36.83333 99141,Kolomenskiy Rayon,1882,MOS,182,RU,55.08333,38.75 99143,Kolomna,1882,MOS,182,RU,55.07944,38.77833 99152,Kolyubakino,1882,MOS,182,RU,55.668,36.53234 99166,Kommunarka,1882,MOS,182,RU,55.56952,37.48932 99184,Konobeyevo,1882,MOS,182,RU,55.40776,38.66261 99188,Konstantinovo,1882,MOS,182,RU,56.55,38.03333 99201,Koptëvo,1882,MOS,182,RU,55.81667,37.51667 99205,Korenëvo,1882,MOS,182,RU,55.67194,38.00778 99214,Korolev,1882,MOS,182,RU,55.91417,37.82556 99215,Korolyov,1882,MOS,182,RU,55.91732,37.81786 99238,Kostino,1882,MOS,182,RU,56.03333,37.91667 99243,Kostrovo,1882,MOS,182,RU,55.89429,36.69491 99245,Kotel’niki,1882,MOS,182,RU,55.63546,37.8445 99264,Kozhukhovo,1882,MOS,182,RU,55.7,37.66667 99276,Kraskovo,1882,MOS,182,RU,55.64972,37.98778 99285,Krasnaya Poyma,1882,MOS,182,RU,55.00138,39.07997 99291,Krasnoarmeysk,1882,MOS,182,RU,56.1,38.13333 99303,Krasnogorsk,1882,MOS,182,RU,55.82036,37.33017 99309,Krasnogorskiy Rayon,1882,MOS,182,RU,55.83333,37.33333 99355,Krasnozavodsk,1882,MOS,182,RU,56.45,38.21667 99357,Krasnoznamensk,1882,MOS,182,RU,55.59944,37.03861 99374,Krasnyy Tkach,1882,MOS,182,RU,55.4721,39.08017 99386,Kratovo,1882,MOS,182,RU,55.59728,38.17743 99394,Krivtsovo,1882,MOS,182,RU,56.15,36.88333 99416,Kubinka,1882,MOS,182,RU,55.57957,36.70392 99449,Kupavna,1882,MOS,182,RU,55.74576,38.13136 99461,Kurilovo,1882,MOS,182,RU,55.37271,37.37703 99471,Kurovskoye,1882,MOS,182,RU,55.58183,38.91994 99489,Kuskovo,1882,MOS,182,RU,55.73423,37.82616 99728,L’vovskiy,1882,MOS,182,RU,55.31872,37.52337 99573,Leninskiy Rayon,1882,MOS,182,RU,55.41667,37.58333 99575,Leninskiye Gory,1882,MOS,182,RU,55.7,37.56667 99595,Lesnoy,1882,MOS,182,RU,56.06667,37.91667 99597,Lesnoy Gorodok,1882,MOS,182,RU,55.63893,37.20829 99602,Lesnyye Polyany,1882,MOS,182,RU,55.96667,37.86667 99616,Levoberezhnyy,1882,MOS,182,RU,55.85,37.48333 99627,Likino-Dulevo,1882,MOS,182,RU,55.7083,38.9542 99646,Lobnya,1882,MOS,182,RU,56.00972,37.48194 99663,Lopatinskiy,1882,MOS,182,RU,55.34101,38.72366 99666,Losino-Petrovskiy,1882,MOS,182,RU,55.86959,38.20065 99669,Lotoshino,1882,MOS,182,RU,56.23489,35.64273 99670,Lotoshinskiy Rayon,1882,MOS,182,RU,56.25,35.66667 99676,Lozhki,1882,MOS,182,RU,56.09387,37.10873 99681,Lugovaya,1882,MOS,182,RU,56.05,37.48333 99684,Lukhovitsy,1882,MOS,182,RU,54.97661,39.0444 99711,Lytkarino,1882,MOS,182,RU,55.58271,37.90516 99713,Lyuberetskiy Rayon,1882,MOS,182,RU,55.66667,37.91667 99714,Lyubertsy,1882,MOS,182,RU,55.67719,37.89322 99721,Lyubuchany,1882,MOS,182,RU,55.25088,37.54988 99749,Malakhovka,1882,MOS,182,RU,55.64776,38.02486 99750,Malaya Dubna,1882,MOS,182,RU,55.87783,38.95423 99756,Malino,1882,MOS,182,RU,55.11195,38.17384 99772,Malyshevo,1882,MOS,182,RU,55.4945,38.35356 99778,Mamontovka,1882,MOS,182,RU,55.98083,37.81972 99791,Marfino,1882,MOS,182,RU,55.70267,37.38322 99847,Medvezh’i Ozëra,1882,MOS,182,RU,55.86935,37.98613 99856,Melikhovo,1882,MOS,182,RU,55.1144,37.64827 99861,Mendeleyevo,1882,MOS,182,RU,56.03333,37.21667 99868,Meshcherino,1882,MOS,182,RU,55.19567,38.36002 99907,Mikhnëvo,1882,MOS,182,RU,55.12747,37.95451 99908,Mikulino,1882,MOS,182,RU,56.45188,35.60685 99927,Misheronskiy,1882,MOS,182,RU,55.71927,39.73835 99953,Molokovo,1882,MOS,182,RU,55.56186,37.86492 99959,Monino,1882,MOS,182,RU,55.84244,38.19362 99980,Mosrentgen,1882,MOS,182,RU,55.6197,37.46402 99985,Mozhaysk,1882,MOS,182,RU,55.50194,36.02722 99986,Mozhayskiy Rayon,1882,MOS,182,RU,55.5,36.0 100004,Muranovo,1882,MOS,182,RU,56.18333,37.9 100034,Mytishchi,1882,MOS,182,RU,55.91163,37.73076 100035,Mytishchi Urban Okrug,1882,MOS,182,RU,56.0,37.66667 100051,Nakhabino,1882,MOS,182,RU,55.84854,37.17789 100059,Naro-Fominsk,1882,MOS,182,RU,55.38752,36.73307 100074,Nazaryevo,1882,MOS,182,RU,55.67417,37.04028 100094,Nekrasovskiy,1882,MOS,182,RU,56.09349,37.49934 100102,Nemchinovka,1882,MOS,182,RU,55.72288,37.36086 100139,Nikolina Gora,1882,MOS,182,RU,55.73433,37.04364 100191,Noginsk,1882,MOS,182,RU,55.86647,38.4438 100192,Noginsk-9,1882,MOS,182,RU,56.06681,38.50013 100193,Noginskiy Rayon,1882,MOS,182,RU,55.91667,38.41667 100218,Novo-Nikol’skoye,1882,MOS,182,RU,56.56667,37.53333 100246,Novoivanovskoye,1882,MOS,182,RU,55.70381,37.3651 100280,Novopetrovskoye,1882,MOS,182,RU,55.99278,36.47194 100283,Novopodrezkovo,1882,MOS,182,RU,55.93972,37.34417 100307,Novosin’kovo,1882,MOS,182,RU,56.37737,37.32871 100331,Novoye,1882,MOS,182,RU,55.63104,38.92001 100341,Novyy Byt,1882,MOS,182,RU,55.05857,37.61348 100367,Nudol’,1882,MOS,182,RU,56.1,36.51667 100387,Obolensk,1882,MOS,182,RU,54.97741,37.22449 100391,Obukhovo,1882,MOS,182,RU,55.83278,38.2725 100398,Odintsovo,1882,MOS,182,RU,55.67798,37.27773 100399,Odintsovskiy Rayon,1882,MOS,182,RU,55.66667,36.91667 100412,Oktyabr’skiy,1882,MOS,182,RU,55.60806,37.97738 100418,Olyavidovo,1882,MOS,182,RU,56.5033,37.7516 100452,Opalikha,1882,MOS,182,RU,55.82593,37.25278 100463,Orekhovo-Zuyevo,1882,MOS,182,RU,55.80672,38.96178 100464,Orekhovo-Zuyevskiy Rayon,1882,MOS,182,RU,55.75,39.0 100481,Orud’yevo,1882,MOS,182,RU,56.43333,37.53333 100493,Ostashëvo,1882,MOS,182,RU,55.85896,35.86948 100501,Ostrovtsy,1882,MOS,182,RU,55.5875,38.00556 100525,Ozëry,1882,MOS,182,RU,54.85998,38.55062 100521,Ozherel’ye,1882,MOS,182,RU,54.79197,38.26559 100522,Ozyory Urban Okrug,1882,MOS,182,RU,54.83333,38.58333 100575,Pavlovskaya Sloboda,1882,MOS,182,RU,55.81517,37.08246 100577,Pavlovskiy Posad,1882,MOS,182,RU,55.78187,38.65025 100583,Pavshino,1882,MOS,182,RU,55.81667,37.35 100606,Peresvet,1882,MOS,182,RU,56.42302,38.17612 100619,Pervomayskiy,1882,MOS,182,RU,55.06696,38.66489 100632,Peshki,1882,MOS,182,RU,56.13333,37.06667 100634,Peski,1882,MOS,182,RU,55.21626,38.76262 100657,Petrovo-Dal’neye,1882,MOS,182,RU,55.74679,37.17347 100661,Petrovskaya,1882,MOS,182,RU,55.55,37.78333 100683,Pirogovskiy,1882,MOS,182,RU,55.97806,37.73361 100724,Podolsk,1882,MOS,182,RU,55.42419,37.55472 100725,Podosinki,1882,MOS,182,RU,56.20837,37.54741 100772,Popovo,1882,MOS,182,RU,55.07523,37.66727 100788,Posëlok Mar’ino,1882,MOS,182,RU,55.55,37.32 100783,Poselok Turisticheskogo pansionata Klyazminskoe vodohranilische,1882,MOS,182,RU,55.99507,37.67199 100790,Povarovo,1882,MOS,182,RU,56.06667,37.05 100791,Povedniki,1882,MOS,182,RU,55.97,37.6 100803,Pravdinskiy,1882,MOS,182,RU,56.06034,37.86266 100865,Proletarskiy,1882,MOS,182,RU,55.02219,37.39019 100871,Protvino,1882,MOS,182,RU,54.86821,37.21583 100894,Purshevo,1882,MOS,182,RU,55.72124,38.03277 100895,Pushchino,1882,MOS,182,RU,54.83373,37.61138 100898,Pushkino,1882,MOS,182,RU,56.01722,37.86667 100900,Pushkinskiy Rayon,1882,MOS,182,RU,55.98633,37.86122 100925,Radovitskiy,1882,MOS,182,RU,55.1282,39.7956 100926,Radumlya,1882,MOS,182,RU,56.06901,37.14979 100928,Raduzhnyy,1882,MOS,182,RU,55.1368,38.72803 100931,Rakhmanovo,1882,MOS,182,RU,55.74401,38.61124 100935,Ramenskiy Rayon,1882,MOS,182,RU,55.56667,38.23333 100936,Ramenskoye,1882,MOS,182,RU,55.56694,38.23028 100953,Razvilka,1882,MOS,182,RU,55.59209,37.74085 100956,Rechitsy,1882,MOS,182,RU,55.59754,38.47134 100965,Reshetnikovo,1882,MOS,182,RU,56.45,36.56667 100967,Reutov,1882,MOS,182,RU,55.76111,37.8575 100978,Rodniki,1882,MOS,182,RU,55.65204,38.06685 100981,Rogachëvo,1882,MOS,182,RU,56.43333,37.16667 100997,Roshal’,1882,MOS,182,RU,55.66853,39.87488 101014,Rozhdestveno,1882,MOS,182,RU,55.85444,37.04935 101027,Rumyantsevo,1882,MOS,182,RU,55.97278,36.53417 101037,Ruza,1882,MOS,182,RU,55.69898,36.19522 101040,Ruzskiy Rayon,1882,MOS,182,RU,55.7,36.25 101054,Rybnoye,1882,MOS,182,RU,56.41349,37.6218 101059,Rzhavki,1882,MOS,182,RU,56.0,37.25 101081,Saltykovka,1882,MOS,182,RU,55.76679,37.93533 101136,Savinskaya,1882,MOS,182,RU,55.37013,39.99233 101138,Savvinskaya Sloboda,1882,MOS,182,RU,55.72343,36.80347 101160,Selyatino,1882,MOS,182,RU,55.51514,36.97746 101170,Semënovskoye,1882,MOS,182,RU,55.68333,37.55 101168,Semkhoz,1882,MOS,182,RU,56.28333,38.06667 101175,Serebryano-Prudskiy Rayon,1882,MOS,182,RU,54.5,38.66667 101177,Serebryanyye Prudy,1882,MOS,182,RU,54.46923,38.72095 101182,Sergiyev Posad,1882,MOS,182,RU,56.3,38.13333 101183,Sergiyevo-Posadskiy Rayon,1882,MOS,182,RU,56.33333,38.16667 101191,Serpukhov,1882,MOS,182,RU,54.91578,37.41114 101192,Serpukhovskiy Rayon,1882,MOS,182,RU,54.91667,37.41667 101207,Severnyy,1882,MOS,182,RU,56.73333,37.65 101232,Shaburnovo,1882,MOS,182,RU,56.55,37.93333 101237,Shakhovskaya,1882,MOS,182,RU,56.03147,35.50697 101238,Shakhovskoy Rayon,1882,MOS,182,RU,56.00192,35.49537 101272,Shatura,1882,MOS,182,RU,55.57253,39.53682 101273,Shaturtorf,1882,MOS,182,RU,55.56711,39.42129 101275,Shchelkovo,1882,MOS,182,RU,55.92497,37.97218 101281,Shchëlkovskiy Rayon,1882,MOS,182,RU,56.0,38.16667 101299,Shemëtovo,1882,MOS,182,RU,56.52764,38.07518 101306,Sheremet’yevskiy,1882,MOS,182,RU,55.97583,37.49417 101308,Shevlyakovo,1882,MOS,182,RU,56.39733,36.85973 101332,Shishkin Les,1882,MOS,182,RU,55.41057,37.18853 101387,Skhodnya,1882,MOS,182,RU,55.94806,37.29778 101388,Skolkovo,1882,MOS,182,RU,55.68784,37.36836 101391,Skoropuskovskiy,1882,MOS,182,RU,56.36667,38.16667 101422,Snegiri,1882,MOS,182,RU,55.88867,37.02421 101430,Sofrino,1882,MOS,182,RU,56.15,37.93333 101453,Solnechnogorsk,1882,MOS,182,RU,56.18333,36.98333 101454,Solnechnogorskiy Rayon,1882,MOS,182,RU,56.08333,37.08333 101525,Spas-Zaulok,1882,MOS,182,RU,56.48333,36.56667 101560,Staraya Kupavna,1882,MOS,182,RU,55.80799,38.1805 101622,Stolbovaya,1882,MOS,182,RU,55.25021,37.49249 101632,Stromyn’,1882,MOS,182,RU,56.04347,38.48318 101638,Stupino,1882,MOS,182,RU,54.90083,38.07083 101639,Stupinskiy Rayon,1882,MOS,182,RU,54.91667,38.08333 101695,Svatkovo,1882,MOS,182,RU,56.38333,38.21667 101698,Sverdlovskiy,1882,MOS,182,RU,55.90968,38.14978 101723,Sychëvo,1882,MOS,182,RU,55.06196,38.71384 101750,Taldom,1882,MOS,182,RU,56.73333,37.53333 101751,Taldomskiy Rayon,1882,MOS,182,RU,56.75,37.58333 101769,Tarasovka,1882,MOS,182,RU,55.95722,37.84333 101841,Teryayevo,1882,MOS,182,RU,56.16974,36.12545 101884,Tomilino,1882,MOS,182,RU,55.65619,37.94713 101922,Troitskoye,1882,MOS,182,RU,55.3,38.53333 101960,Tuchkovo,1882,MOS,182,RU,55.60111,36.46806 101961,Tugolesskiy Bor,1882,MOS,182,RU,55.55051,39.82422 102021,Udel’naya,1882,MOS,182,RU,55.62536,38.00285 102154,Uvarovka,1882,MOS,182,RU,55.52778,35.60611 102167,Uzunovo,1882,MOS,182,RU,54.53858,38.61734 102227,Verbilki,1882,MOS,182,RU,56.53333,37.6 102229,Vereya,1882,MOS,182,RU,55.34472,36.17194 102302,Vidnoye,1882,MOS,182,RU,55.55239,37.70967 102314,Vinogradovo,1882,MOS,182,RU,56.93333,37.55 102317,Vishnyakovskiye Dachi,1882,MOS,182,RU,55.7647,38.13334 102332,Vniissok,1882,MOS,182,RU,55.65639,37.21194 102353,Volodarskogo,1882,MOS,182,RU,55.50349,37.94174 102356,Volokolamsk,1882,MOS,182,RU,56.03361,35.96944 102357,Volokolamskiy Rayon,1882,MOS,182,RU,56.08886,35.99248 102388,Voskresensk,1882,MOS,182,RU,55.31733,38.65264 102390,Voskresenskiy Rayon,1882,MOS,182,RU,55.33333,38.75 102402,Vostryakovo,1882,MOS,182,RU,55.66667,37.45 102449,Vysokovsk,1882,MOS,182,RU,56.31667,36.55 102465,Yakhroma,1882,MOS,182,RU,56.3,37.48333 102471,Yakovlevskoye,1882,MOS,182,RU,55.44194,37.94806 102477,Yam,1882,MOS,182,RU,55.48785,37.74458 102479,Yamkino,1882,MOS,182,RU,55.92088,38.40417 102497,Yaropolets,1882,MOS,182,RU,56.13333,35.83317 102525,Yegor’yevsk,1882,MOS,182,RU,55.38283,39.03233 102549,Yel’digino,1882,MOS,182,RU,56.11667,37.81667 102569,Yermolino,1882,MOS,182,RU,56.14887,37.49112 102573,Yershovo,1882,MOS,182,RU,55.76911,36.85929 102583,Yubileyny,1882,MOS,182,RU,55.93333,37.83333 102628,Zagoryanskiy,1882,MOS,182,RU,55.9325,37.95806 102649,Zaprudnya,1882,MOS,182,RU,56.56667,37.43333 102650,Zaraysk,1882,MOS,182,RU,54.7605,38.87841 102656,Zarech’ye,1882,MOS,182,RU,55.68667,37.3924 102663,Zarya,1882,MOS,182,RU,55.75533,38.09578 102700,Zelenogradskiy,1882,MOS,182,RU,56.1,37.91667 102715,Zhavoronki,1882,MOS,182,RU,55.64943,37.10101 102717,Zheleznodorozhnyy,1882,MOS,182,RU,55.744,38.01684 102732,Zhilëvo,1882,MOS,182,RU,55.01408,38.01106 102737,Zhitnevo,1882,MOS,182,RU,55.34233,37.91464 102740,Zhukovka,1882,MOS,182,RU,56.48333,37.51667 102743,Zhukovskiy,1882,MOS,182,RU,55.59528,38.12028 102778,Zvenigorod,1882,MOS,182,RU,55.73401,36.85918 97488,Abram Mys,1843,MUR,182,RU,68.97839,33.01926 97511,Afrikanda,1843,MUR,182,RU,67.44289,32.78279 97556,Alakurtti,1843,MUR,182,RU,66.9672,30.34905 97649,Apatity,1843,MUR,182,RU,67.56414,33.4031 98445,Gadzhiyevo,1843,MUR,182,RU,69.25506,33.33616 98837,Kandalaksha,1843,MUR,182,RU,67.162,32.41229 98838,Kandalakshskiy rayon,1843,MUR,182,RU,67.16622,32.44606 99064,Kirovsk,1843,MUR,182,RU,67.61475,33.67274 99156,Kol’skiy Rayon,1843,MUR,182,RU,68.5,32.0 99136,Kola,1843,MUR,182,RU,68.88062,33.01842 99252,Kovdor,1843,MUR,182,RU,67.56616,30.47576 99253,Kovdorskiy Rayon,1843,MUR,182,RU,67.56667,30.4 99673,Lovozero,1843,MUR,182,RU,68.00638,35.01589 99674,Lovozerskiy Rayon,1843,MUR,182,RU,68.0,36.0 99950,Molochnyy,1843,MUR,182,RU,68.85389,33.02046 99957,Monchegorsk,1843,MUR,182,RU,67.93972,32.87389 100009,Murmansk,1843,MUR,182,RU,68.97917,33.09251 100010,Murmashi,1843,MUR,182,RU,68.81542,32.81147 100130,Nikel,1843,MUR,182,RU,69.41285,30.22198 100420,Olenegorsk,1843,MUR,182,RU,68.1432,33.25287 100497,Ostrovnoy,1843,MUR,182,RU,68.05306,39.51306 100584,Pechenga,1843,MUR,182,RU,69.52587,31.17027 100585,Pechengskiy Rayon,1843,MUR,182,RU,69.0,30.0 100762,Polyarnyy,1843,MUR,182,RU,69.19889,33.44778 100763,Polyarnyye Zori,1843,MUR,182,RU,67.36611,32.49806 100796,Poyakonda,1843,MUR,182,RU,66.59428,32.82088 100968,Revda,1843,MUR,182,RU,67.9371,34.56149 101002,Roslyakovo,1843,MUR,182,RU,69.04303,33.19906 101069,Safonovo,1843,MUR,182,RU,69.06043,33.29523 101218,Severomorsk,1843,MUR,182,RU,69.06889,33.41622 101219,Severomorsk-3,1843,MUR,182,RU,68.87862,33.72631 101338,Shonguy,1843,MUR,182,RU,68.75261,33.14595 101424,Snezhnogorsk,1843,MUR,182,RU,69.19333,33.25314 101831,Teribërka,1843,MUR,182,RU,69.16088,35.14527 101839,Terskiy Rayon,1843,MUR,182,RU,66.91667,35.0 102055,Umba,1843,MUR,182,RU,66.68706,34.34291 102241,Verkhnetulomskiy,1843,MUR,182,RU,68.60727,31.79621 102303,Vidyayevo,1843,MUR,182,RU,69.31914,32.80488 102446,Vysokiy,1843,MUR,182,RU,68.13583,33.41917 102645,Zaozërsk,1843,MUR,182,RU,69.40052,32.44761 102647,Zapolyarnyy,1843,MUR,182,RU,69.41541,30.81355 102692,Zelenoborskiy,1843,MUR,182,RU,66.845,32.36222 98710,Iskateley,1836,NEN,182,RU,67.68026,53.15117 100057,Naryan-Mar,1836,NEN,182,RU,67.63869,53.00371 97510,Afonino,1857,NIZ,182,RU,56.26201,44.09503 97691,Ar’ya,1857,NIZ,182,RU,57.49146,45.96691 97655,Ardatov,1857,NIZ,182,RU,55.24205,43.09699 97657,Ardatovskiy Rayon,1857,NIZ,182,RU,55.25,43.08333 97688,Arzamas,1857,NIZ,182,RU,55.39485,43.83992 97689,Arzamasskiy Rayon,1857,NIZ,182,RU,55.33333,43.75 97741,Babino,1857,NIZ,182,RU,56.22564,43.6238 97954,Blizhne-Pesochnoye,1857,NIZ,182,RU,55.3456,42.1015 97968,Bogorodsk,1857,NIZ,182,RU,56.10513,43.51294 97969,Bogorodskiy Rayon,1857,NIZ,182,RU,56.08333,43.5 98003,Bol’sheboldinskiy Rayon,1857,NIZ,182,RU,55.0,45.25 98012,Bol’shoye Boldino,1857,NIZ,182,RU,55.00588,45.31419 98014,Bol’shoye Kozino,1857,NIZ,182,RU,56.40397,43.71424 98015,Bol’shoye Murashkino,1857,NIZ,182,RU,55.78261,44.77541 98019,Bor,1857,NIZ,182,RU,56.35808,44.07477 98021,Bor Urban Okrug,1857,NIZ,182,RU,56.35325,44.0901 98078,Burevestnik,1857,NIZ,182,RU,56.14403,43.78832 98087,Buturlino,1857,NIZ,182,RU,55.56673,44.89738 98175,Chernukha,1857,NIZ,182,RU,55.59739,43.7556 98202,Chistoye,1857,NIZ,182,RU,56.53753,43.00445 98206,Chkalovsk,1857,NIZ,182,RU,56.76776,43.25135 98239,Dal’nekonstantinovskiy Rayon,1857,NIZ,182,RU,55.83333,44.08333 98240,Dal’neye Konstantinovo,1857,NIZ,182,RU,55.81025,44.09595 98278,Diveyevo,1857,NIZ,182,RU,55.04329,43.24178 98322,Doschatoye,1857,NIZ,182,RU,55.3886,42.1032 98367,Dzerzhinsk,1857,NIZ,182,RU,56.24143,43.45539 98436,Frolishchi,1857,NIZ,182,RU,56.42177,42.65187 98448,Gagino,1857,NIZ,182,RU,55.23142,45.03386 98488,Gidrotorf,1857,NIZ,182,RU,56.47562,43.53813 98517,Gorbatov,1857,NIZ,182,RU,56.1311,43.06363 98518,Gorbatovka,1857,NIZ,182,RU,56.25716,43.74577 98558,Gorodets,1857,NIZ,182,RU,56.65493,43.47273 98559,Gorodetskiy Rayon,1857,NIZ,182,RU,56.75,43.75 98585,Gremyachevo,1857,NIZ,182,RU,55.39193,43.02734 98648,Ilyinogorsk,1857,NIZ,182,RU,56.22775,42.95385 98662,Imeni M. I. Kalinina,1857,NIZ,182,RU,56.17926,44.33098 98666,Imeni Stepana Razina,1857,NIZ,182,RU,54.8932,44.29627 99114,Knyaginino,1857,NIZ,182,RU,55.82278,45.03489 99254,Kovernino,1857,NIZ,182,RU,57.12818,43.8135 99279,Krasnaya Gorka,1857,NIZ,182,RU,55.38666,46.10925 99330,Krasnooktyabr’skiy Rayon,1857,NIZ,182,RU,55.33333,45.58333 99381,Krasnyye Baki,1857,NIZ,182,RU,57.131,45.15992 99411,Kstovo,1857,NIZ,182,RU,56.14733,44.19787 99430,Kulebaki,1857,NIZ,182,RU,55.41333,42.5325 99630,Linda,1857,NIZ,182,RU,56.61571,44.09544 99687,Lukino,1857,NIZ,182,RU,56.44183,43.62932 99690,Lukoyanov,1857,NIZ,182,RU,55.02772,44.47865 99691,Lukoyanovskiy Rayon,1857,NIZ,182,RU,55.0,44.5 99707,Lyskovo,1857,NIZ,182,RU,56.03282,45.0422 99999,Mukhtolovo,1857,NIZ,182,RU,55.46751,43.19973 100000,Mulino,1857,NIZ,182,RU,56.28923,42.92005 100070,Navashino,1857,NIZ,182,RU,55.5441,42.1968 100089,Neklyudovo,1857,NIZ,182,RU,56.41421,43.97721 100173,Nizhniy Novgorod,1857,NIZ,182,RU,56.32867,44.00205 100199,Novaya Balakhna,1857,NIZ,182,RU,56.48989,43.60114 100308,Novosmolinskiy,1857,NIZ,182,RU,56.2841,43.05071 100533,Pamyat’ Parizhskoy Kommuny,1857,NIZ,182,RU,56.1048,44.4952 100570,Pavlovo,1857,NIZ,182,RU,55.9686,43.0912 100578,Pavlovskiy Rayon,1857,NIZ,182,RU,56.0,43.0 100609,Perevoz,1857,NIZ,182,RU,55.59613,44.54461 100614,Pervomaysk,1857,NIZ,182,RU,54.8689,43.80272 100616,Pervomayskiy,1857,NIZ,182,RU,56.61474,43.35825 100630,Pervoye Maya,1857,NIZ,182,RU,56.16403,44.71955 100672,Pil’na,1857,NIZ,182,RU,55.55394,45.92194 100673,Pil’ninskiy Rayon,1857,NIZ,182,RU,55.58333,45.91667 100692,Pizhma,1857,NIZ,182,RU,57.86418,47.11714 100708,Pochinki,1857,NIZ,182,RU,54.69875,44.86678 100709,Pochinkovskiy Rayon,1857,NIZ,182,RU,54.66667,44.83333 100723,Podnov’ye,1857,NIZ,182,RU,56.3061,44.09244 100874,Prudy,1857,NIZ,182,RU,57.5738,46.27176 100891,Purekh,1857,NIZ,182,RU,56.64684,43.06772 100914,Pyra,1857,NIZ,182,RU,56.29527,43.35274 100921,Rabotki,1857,NIZ,182,RU,56.04147,44.60265 100964,Reshetikha,1857,NIZ,182,RU,56.21566,43.28802 101122,Sarov,1857,NIZ,182,RU,54.93583,43.32352 101131,Satis,1857,NIZ,182,RU,54.9229,43.22977 101134,Savasleyka,1857,NIZ,182,RU,55.4606,42.3207 101145,Sechenovo,1857,NIZ,182,RU,55.22444,45.89056 101146,Sechenovskiy Rayon,1857,NIZ,182,RU,55.16667,45.91667 101169,Semënov,1857,NIZ,182,RU,56.78749,44.49297 101179,Sergach,1857,NIZ,182,RU,55.53079,45.46611 101180,Sergachskiy Rayon,1857,NIZ,182,RU,55.58333,45.5 101242,Shakhun’ya,1857,NIZ,182,RU,57.67579,46.61136 101259,Sharanga,1857,NIZ,182,RU,57.17749,46.53956 101260,Sharangskiy Rayon,1857,NIZ,182,RU,57.08333,46.41667 101268,Shatki,1857,NIZ,182,RU,55.18874,44.12486 101320,Shimorskoye,1857,NIZ,182,RU,55.3281,42.0256 101380,Sitniki,1857,NIZ,182,RU,56.45529,44.06658 101419,Smolino,1857,NIZ,182,RU,56.27526,43.09109 101443,Sokol’skoye,1857,NIZ,182,RU,57.14122,43.15895 101495,Sosnovskiy Rayon,1857,NIZ,182,RU,55.75,43.25 101497,Sosnovskoye,1857,NIZ,182,RU,55.80549,43.16791 101530,Spasskiy Rayon,1857,NIZ,182,RU,55.83333,45.75 101533,Spasskoye,1857,NIZ,182,RU,55.86048,45.69695 101651,Sukhobezvodnoye,1857,NIZ,182,RU,57.04913,44.88909 101679,Surovatikha,1857,NIZ,182,RU,55.76516,43.89845 101720,Syava,1857,NIZ,182,RU,58.01457,46.32216 101773,Taremskoye,1857,NIZ,182,RU,55.92889,43.04433 101889,Tonkino,1857,NIZ,182,RU,57.37257,46.46294 101891,Tonshayevo,1857,NIZ,182,RU,57.73598,47.01265 101944,Tsentral’nyy,1857,NIZ,182,RU,56.297,42.78869 101969,Tumbotino,1857,NIZ,182,RU,55.99926,43.02359 102072,Urazovka,1857,NIZ,182,RU,55.40126,45.6186 102076,Uren’,1857,NIZ,182,RU,57.45516,45.78522 102168,Vacha,1857,NIZ,182,RU,55.8035,42.7709 102169,Vachskiy Rayon,1857,NIZ,182,RU,55.75,42.75 102170,Vad,1857,NIZ,182,RU,55.53009,44.21137 102178,Vakhtan,1857,NIZ,182,RU,57.96592,46.68886 102193,Varnavino,1857,NIZ,182,RU,57.40351,45.09164 102194,Varnavinskiy Rayon,1857,NIZ,182,RU,57.5,44.91667 102197,Vasil’sursk,1857,NIZ,182,RU,56.13139,46.016 102295,Vetluga,1857,NIZ,182,RU,57.85574,45.78102 102297,Vetluzhskiy,1857,NIZ,182,RU,57.17355,45.12272 102298,Vetluzhskiy Rayon,1857,NIZ,182,RU,57.75,45.58333 102307,Vilya,1857,NIZ,182,RU,55.24556,42.20889 102329,Vladimirskoye,1857,NIZ,182,RU,56.82002,45.11843 102351,Volodarsk,1857,NIZ,182,RU,56.23105,43.18767 102384,Vorotynets,1857,NIZ,182,RU,56.06028,45.8633 102387,Vorsma,1857,NIZ,182,RU,55.99062,43.27249 102389,Voskresenskiy Rayon,1857,NIZ,182,RU,56.75,45.5 102393,Voskresenskoye,1857,NIZ,182,RU,56.83806,45.43167 102410,Voznesenskoye,1857,NIZ,182,RU,54.89,42.75694 102433,Vyksa,1857,NIZ,182,RU,55.3175,42.17444 102455,Vyyezdnoye,1857,NIZ,182,RU,55.38154,43.78638 102586,Yuganets,1857,NIZ,182,RU,56.2508,43.23069 102680,Zavolzh’ye,1857,NIZ,182,RU,56.64051,43.39446 102702,Zelyony Gorod,1857,NIZ,182,RU,56.17833,44.0744 97812,Batetskiy,1834,NGR,182,RU,58.6461,30.30268 97813,Batetskiy Rayon,1834,NGR,182,RU,58.58333,30.5 98034,Borovichi,1834,NGR,182,RU,58.38778,33.91546 98035,Borovichskiy Rayon,1834,NGR,182,RU,58.5,34.0 98214,Chudovo,1834,NGR,182,RU,59.11667,31.68333 98215,Chudovskiy Rayon,1834,NGR,182,RU,59.16667,31.83333 98261,Demyansk,1834,NGR,182,RU,57.64301,32.466 98262,Demyanskiy Rayon,1834,NGR,182,RU,57.58333,32.75 98992,Kholm,1834,NGR,182,RU,59.26667,32.85 98998,Kholmskiy Rayon,1834,NGR,182,RU,57.08333,31.33333 99029,Khvoynaya,1834,NGR,182,RU,58.9,34.53333 99030,Khvoyninskiy Rayon,1834,NGR,182,RU,58.91667,34.5 99301,Krasnofarfornyy,1834,NGR,182,RU,59.1364,31.85023 99387,Krechevitsy,1834,NGR,182,RU,58.61703,31.40101 99389,Krestetskiy Rayon,1834,NGR,182,RU,58.25,32.5 99391,Kresttsy,1834,NGR,182,RU,58.2452,32.51647 99434,Kulotino,1834,NGR,182,RU,58.45,33.38333 99722,Lyubytino,1834,NGR,182,RU,58.81222,33.39222 99723,Lyubytinskiy Rayon,1834,NGR,182,RU,58.83333,33.5 99753,Malaya Vishera,1834,NGR,182,RU,58.84538,32.22218 99766,Malovisherskiy Rayon,1834,NGR,182,RU,58.75,32.5 99789,Marevo,1834,NGR,182,RU,57.31461,32.08045 99790,Marevskiy Rayon,1834,NGR,182,RU,57.33333,32.25 99973,Moshenskoy Rayon,1834,NGR,182,RU,58.5,34.75 99974,Moshenskoye,1834,NGR,182,RU,58.51016,34.59108 100080,Nebolchi,1834,NGR,182,RU,59.12393,33.34537 100213,Novgorodskiy Rayon,1834,NGR,182,RU,58.75,31.25 100416,Okulovka,1834,NGR,182,RU,58.40083,33.29083 100417,Okulovskiy Rayon,1834,NGR,182,RU,58.41667,33.25 100454,Opechenskiy Posad,1834,NGR,182,RU,58.2751,34.11731 100537,Pankovka,1834,NGR,182,RU,58.50004,31.1999 100547,Parfino,1834,NGR,182,RU,57.97306,31.64806 100548,Parfinskiy Rayon,1834,NGR,182,RU,58.0,31.66667 100638,Pestovo,1834,NGR,182,RU,58.59382,35.80244 100639,Pestovskiy Rayon,1834,NGR,182,RU,58.66667,35.66667 100712,Poddor’ye,1834,NGR,182,RU,57.46947,31.11561 100711,Poddorskiy Rayon,1834,NGR,182,RU,57.41667,31.25 100862,Proletariy,1834,NGR,182,RU,58.43423,31.70462 101321,Shimsk,1834,NGR,182,RU,58.21201,30.71269 101322,Shimskiy Rayon,1834,NGR,182,RU,58.21667,30.71667 101473,Sol’tsy,1834,NGR,182,RU,58.12387,30.32377 101447,Soletskiy Rayon,1834,NGR,182,RU,58.08333,30.25 101563,Staraya Russa,1834,NGR,182,RU,57.99439,31.36081 101592,Starorusskiy Rayon,1834,NGR,182,RU,58.0,31.41667 102036,Uglovka,1834,NGR,182,RU,58.23917,33.51083 102151,Utorgosh,1834,NGR,182,RU,58.28127,30.25344 102179,Valday,1834,NGR,182,RU,57.97826,33.24737 102180,Valdayskiy Rayon,1834,NGR,182,RU,57.91667,33.25 102211,Velikiy Novgorod,1834,NGR,182,RU,58.52131,31.27104 102347,Volkhovskiy,1834,NGR,182,RU,58.58,31.31641 102363,Volot,1834,NGR,182,RU,57.92778,30.7025 102364,Volotovskiy Rayon,1834,NGR,182,RU,57.83333,30.66667 102521,Yedrovo,1834,NGR,182,RU,57.91306,33.62028 102660,Zarubino,1834,NGR,182,RU,58.735,33.47556 97527,Akademgorodok,1888,NVS,182,RU,54.8523,83.106 97751,Bagan,1888,NVS,182,RU,54.10014,77.66462 97790,Barabinsk,1888,NVS,182,RU,55.35709,78.35697 97805,Baryshevo,1888,NVS,182,RU,54.9564,83.1822 97888,Berdsk,1888,NVS,182,RU,54.7551,83.0967 97997,Bolotnoye,1888,NVS,182,RU,55.67167,84.39806 98114,Chany,1888,NVS,182,RU,55.31205,76.76468 98154,Cherepanovo,1888,NVS,182,RU,54.2222,83.381 98219,Chulym,1888,NVS,182,RU,55.09972,80.95722 98318,Dorogino,1888,NVS,182,RU,54.3598,83.3198 98342,Dubrovino,1888,NVS,182,RU,55.4718,83.2907 98541,Gornyy,1888,NVS,182,RU,55.1153,83.9059 98711,Iskitim,1888,NVS,182,RU,54.6366,83.3045 98712,Iskitimskiy Rayon,1888,NVS,182,RU,54.66667,83.25 98869,Karasuk,1888,NVS,182,RU,53.73772,78.04026 98878,Kargat,1888,NVS,182,RU,55.19556,80.28111 99119,Kochenëvo,1888,NVS,182,RU,55.0218,82.202 99121,Kochki,1888,NVS,182,RU,54.33583,80.48056 99157,Kol’tsovo,1888,NVS,182,RU,54.9376,83.1825 99153,Kolyvan’,1888,NVS,182,RU,55.3053,82.7391 99329,Krasnoobsk,1888,NVS,182,RU,54.9198,82.9909 99358,Krasnozërskoye,1888,NVS,182,RU,53.98277,79.23735 99392,Krivodanovka,1888,NVS,182,RU,55.0881,82.6551 99422,Kudryashovskiy,1888,NVS,182,RU,55.0974,82.7742 99451,Kupino,1888,NVS,182,RU,54.36635,77.29805 99493,Kuybyshev,1888,NVS,182,RU,55.44753,78.32181 99520,Kyshtovka,1888,NVS,182,RU,56.55498,76.62713 99631,Linëvo,1888,NVS,182,RU,54.4589,83.3764 99640,Listvyanskiy,1888,NVS,182,RU,54.4399,83.4984 99812,Maslyanino,1888,NVS,182,RU,54.34361,84.21111 99813,Maslyaninskiy Rayon,1888,NVS,182,RU,54.5,84.5 99938,Mochishche,1888,NVS,182,RU,55.1586,83.1229 99975,Moshkovo,1888,NVS,182,RU,55.3053,83.6104 99976,Moshkovskiy Rayon,1888,NVS,182,RU,55.3,83.61667 100264,Novolugovoye,1888,NVS,182,RU,54.9792,83.1138 100302,Novosibirsk,1888,NVS,182,RU,55.0415,82.9346 100303,Novosibirskiy Rayon,1888,NVS,182,RU,55.0,83.0 100394,Ob’,1888,NVS,182,RU,54.9872,82.7166 100458,Ordynskiy Rayon,1888,NVS,182,RU,54.33333,81.66667 100459,Ordynskoye,1888,NVS,182,RU,54.3656,81.8994 100757,Polovinnoye,1888,NVS,182,RU,53.75671,79.24327 100861,Prokudskoye,1888,NVS,182,RU,55.0089,82.4574 101066,Sadovyy,1888,NVS,182,RU,55.1361,82.9659 101205,Severnoye,1888,NVS,182,RU,56.34912,78.36189 101209,Severnyy Rayon,1888,NVS,182,RU,56.33333,78.5 101444,Sokur,1888,NVS,182,RU,55.2093,83.319 101555,Stantsionno-Oyashinskiy,1888,NVS,182,RU,55.4664,83.8245 101693,Suzun,1888,NVS,182,RU,53.7841,82.3116 101786,Tashara,1888,NVS,182,RU,55.5195,83.5094 101792,Tatarsk,1888,NVS,182,RU,55.21903,75.98283 101795,Tatarskiy Rayon,1888,NVS,182,RU,55.25,76.0 101869,Toguchin,1888,NVS,182,RU,55.23528,84.38583 101878,Tolmachëvo,1888,NVS,182,RU,54.9824,82.7363 102012,Ubinskoye,1888,NVS,182,RU,55.30675,79.68016 102139,Ust’-Tarka,1888,NVS,182,RU,55.56715,75.705 102224,Vengerovo,1888,NVS,182,RU,55.68485,76.74707 102234,Verkh-Tula,1888,NVS,182,RU,54.8839,82.7762 102496,Yarkovo,1888,NVS,182,RU,54.8056,82.5989 102688,Zdvinsk,1888,NVS,182,RU,54.70206,78.66105 97735,Azovo,1846,OMS,182,RU,54.69972,73.02367 97891,Beregovoy,1846,OMS,182,RU,55.17301,73.21984 98005,Bol’sherech’ye,1846,OMS,182,RU,56.09252,74.62716 98162,Cherlak,1846,OMS,182,RU,54.155,74.8055 98694,Irtyshskiy,1846,OMS,182,RU,54.81426,73.58722 98779,Kalachinsk,1846,OMS,182,RU,55.05286,74.57511 99145,Kolosovka,1846,OMS,182,RU,56.46779,73.61096 99209,Kormilovka,1846,OMS,182,RU,55.00264,74.10281 99342,Krasnoyarka,1846,OMS,182,RU,55.33333,73.11667 99380,Krasnyy Yar,1846,OMS,182,RU,55.24242,72.92635 99402,Krutaya Gorka,1846,OMS,182,RU,55.36493,73.2231 99404,Krutinka,1846,OMS,182,RU,56.0055,71.51131 99698,Luzino,1846,OMS,182,RU,54.94811,73.03531 99717,Lyubinskiy,1846,OMS,182,RU,55.15421,72.69247 100014,Muromtsevo,1846,OMS,182,RU,56.37238,75.24175 100016,Muromtsevskiy Rayon,1846,OMS,182,RU,56.41667,75.5 100079,Nazyvayevsk,1846,OMS,182,RU,55.56975,71.35294 100184,Nizhnyaya Omka,1846,OMS,182,RU,55.43375,74.94256 100272,Novoomskiy,1846,OMS,182,RU,54.84152,73.30174 100326,Novovarshavka,1846,OMS,182,RU,54.1721,74.6946 100397,Odesskoye,1846,OMS,182,RU,54.215,72.9651 100406,Okoneshnikovo,1846,OMS,182,RU,54.83767,75.08343 100440,Omsk,1846,OMS,182,RU,54.99244,73.36859 100566,Pavlogradka,1846,OMS,182,RU,54.2024,73.5592 100759,Poltavka,1846,OMS,182,RU,54.36629,71.76319 101008,Rostovka,1846,OMS,182,RU,55.3842,71.88913 101029,Russkaya Polyana,1846,OMS,182,RU,53.77944,73.88056 101117,Sargatskoye,1846,OMS,182,RU,55.61006,73.49716 101147,Sedel’nikovskiy Rayon,1846,OMS,182,RU,57.0,75.5 101304,Sherbakul’,1846,OMS,182,RU,54.63159,72.39635 101768,Tara,1846,OMS,182,RU,56.89436,74.37096 101801,Tavricheskoye,1846,OMS,182,RU,54.58508,73.6395 101845,Tevriz,1846,OMS,182,RU,57.509,72.4042 101913,Troitsk,1846,OMS,182,RU,55.70128,72.23369 102000,Tyukalinsk,1846,OMS,182,RU,55.87321,72.19673 102121,Ust’-Ishim,1846,OMS,182,RU,57.6935,71.1665 102324,Vkhodnoy,1846,OMS,182,RU,54.95181,73.17108 102763,Znamenskoye,1846,OMS,182,RU,57.12806,73.82821 97485,Abdulino,1886,ORE,182,RU,53.7,53.66667 97501,Adamovka,1886,ORE,182,RU,51.5223,59.9396 97557,Alandskoye,1886,ORE,182,RU,52.22611,59.79389 97695,Asekeyevo,1886,ORE,182,RU,53.57425,52.79724 97877,Belyayevka,1886,ORE,182,RU,51.39742,56.41667 98069,Buguruslan,1886,ORE,182,RU,53.6554,52.442 98096,Buzuluk,1886,ORE,182,RU,52.7807,52.2635 98305,Dombarovskiy,1886,ORE,182,RU,50.7587,59.5386 98396,Energetik,1886,ORE,182,RU,51.7445,58.7934 98465,Gay,1886,ORE,182,RU,51.4666,58.4552 98645,Ilek,1886,ORE,182,RU,51.52709,53.38306 98872,Kardailovo,1886,ORE,182,RU,51.53861,53.90417 99149,Koltubanovskiy,1886,ORE,182,RU,52.9407,52.0269 99312,Krasnogvardeyets,1886,ORE,182,RU,52.6804,52.3635 99323,Krasnokholm,1886,ORE,182,RU,51.59787,54.1567 99345,Krasnoyarskiy,1886,ORE,182,RU,51.965,59.89667 99365,Krasnyy Kommunar,1886,ORE,182,RU,51.96436,55.3668 99467,Kurmanayevka,1886,ORE,182,RU,52.5093,52.0675 99490,Kuvandyk,1886,ORE,182,RU,51.4781,57.3552 99513,Kvarkeno,1886,ORE,182,RU,52.08333,59.725 99514,Kvarkenskiy Rayon,1886,ORE,182,RU,52.16667,59.5 99816,Matveyevka,1886,ORE,182,RU,52.15,56.18333 99840,Mednogorsk,1886,ORE,182,RU,51.4128,57.595 100127,Nezhinka,1886,ORE,182,RU,51.7676,55.3694 100157,Nizhnepavlovka,1886,ORE,182,RU,51.71324,54.80146 100274,Novoorsk,1886,ORE,182,RU,51.381,58.9813 100275,Novoorskiy Rayon,1886,ORE,182,RU,51.5,59.0 100290,Novorudnyy,1886,ORE,182,RU,51.5026,58.1873 100296,Novosergiyevka,1886,ORE,182,RU,52.0934,53.6528 100316,Novotroitsk,1886,ORE,182,RU,51.20301,58.32665 100465,Orenburg,1886,ORE,182,RU,51.7727,55.0988 100480,Orsk,1886,ORE,182,RU,51.20487,58.56685 100608,Perevolotskiy,1886,ORE,182,RU,51.87633,54.19378 100702,Pleshanovo,1886,ORE,182,RU,52.83333,53.48333 100718,Podgorodnyaya Pokrovka,1886,ORE,182,RU,51.82808,54.9874 100821,Prigorodnyy,1886,ORE,182,RU,51.76608,55.26648 101076,Sakmara,1886,ORE,182,RU,51.98438,55.3338 101106,Saraktash,1886,ORE,182,RU,51.78771,56.36091 101107,Saraktashskiy Rayon,1886,ORE,182,RU,51.83333,56.41667 101204,Severnoye,1886,ORE,182,RU,54.09347,52.54393 101262,Sharlyk,1886,ORE,182,RU,52.91667,54.75 101317,Shil’da,1886,ORE,182,RU,51.8143,59.7744 101472,Sol’-Iletsk,1886,ORE,182,RU,51.1631,54.99176 101477,Sorochinsk,1886,ORE,182,RU,52.4338,53.1583 101557,Staraya Akkermanovka,1886,ORE,182,RU,51.24669,58.23908 101708,Svetlyy,1886,ORE,182,RU,50.81833,60.85194 101787,Tashla,1886,ORE,182,RU,51.77157,52.7427 101793,Tatarskaya Kargala,1886,ORE,182,RU,51.94952,55.17314 101906,Totskoye,1886,ORE,182,RU,52.52478,52.76228 102004,Tyul’gan,1886,ORE,182,RU,52.34049,56.16604 102515,Yasnyy,1886,ORE,182,RU,51.0333,59.8742 102540,Yelizavetinka,1886,ORE,182,RU,51.76732,59.74245 97991,Bolkhov,1908,ORL,182,RU,53.44295,36.00546 97992,Bolkhovskiy Rayon,1908,ORL,182,RU,53.41667,36.0 98286,Dmitrovsk-Orlovskiy,1908,ORL,182,RU,52.505,35.1464 98496,Glazunovka,1908,ORL,182,RU,52.50057,36.31997 99002,Khomutovo,1908,ORL,182,RU,52.85386,37.4388 99011,Khotynets,1908,ORL,182,RU,53.1286,35.3966 99148,Kolpny,1908,ORL,182,RU,52.22823,37.03683 99219,Korsakovo,1908,ORL,182,RU,53.26767,37.35689 99287,Krasnaya Zarya,1908,ORL,182,RU,52.7825,37.68056 99396,Kromy,1908,ORL,182,RU,52.68762,35.76665 99644,Livny,1908,ORL,182,RU,52.42534,37.60689 99762,Maloarkhangel’sk,1908,ORL,182,RU,52.40024,36.50332 99992,Mtsensk,1908,ORL,182,RU,53.27657,36.57334 100063,Naryshkino,1908,ORL,182,RU,52.96778,35.72677 100305,Novosil’,1908,ORL,182,RU,52.97387,37.04048 100482,Orël,1908,ORL,182,RU,52.96508,36.07849 100748,Pokrovskoye,1908,ORL,182,RU,52.60968,36.87124 101230,Shablykino,1908,ORL,182,RU,52.85661,35.19637 101483,Soskovo,1908,ORL,182,RU,52.74752,35.38277 101535,Spasskoye-Lutovinovo,1908,ORL,182,RU,53.37012,36.62297 101927,Trosna,1908,ORL,182,RU,52.4446,35.7791 102280,Verkhov’ye,1908,ORL,182,RU,52.81165,37.24215 102442,Vyshneye Dolgoye,1908,ORL,182,RU,52.06302,37.40518 102637,Zalegoshch’,1908,ORL,182,RU,52.8989,36.89093 102755,Zmiyëvka,1908,ORL,182,RU,52.66697,36.37426 102757,Znamenka,1908,ORL,182,RU,52.89789,35.97703 102762,Znamenskoye,1908,ORL,182,RU,53.27869,35.69055 97807,Bashmakovo,1909,PNZ,182,RU,53.21329,43.0342 97838,Bekovo,1909,PNZ,182,RU,52.46632,43.71199 97851,Belinskiy,1909,PNZ,182,RU,52.96474,43.41647 97915,Bessonovka,1909,PNZ,182,RU,53.30968,45.04069 97975,Bogoslovka,1909,PNZ,182,RU,53.20837,44.80133 98106,Chaadayevka,1909,PNZ,182,RU,53.1427,45.9122 98142,Chemodanovka,1909,PNZ,182,RU,53.23162,45.24738 98560,Gorodishche,1909,PNZ,182,RU,53.2775,45.7017 98574,Grabovo,1909,PNZ,182,RU,53.38751,45.06395 98673,Inderka,1909,PNZ,182,RU,53.24846,46.25823 98715,Issa,1909,PNZ,182,RU,53.87049,44.85781 98717,Issinskiy Rayon,1909,PNZ,182,RU,53.83333,45.0 98836,Kanayevka,1909,PNZ,182,RU,53.10783,45.56144 99151,Kolyshley,1909,PNZ,182,RU,52.7005,44.5367 99180,Kondol’,1909,PNZ,182,RU,52.81889,45.05798 99508,Kuznetsk,1909,PNZ,182,RU,53.11675,46.60037 99509,Kuznetskiy Rayon,1909,PNZ,182,RU,53.08333,46.58333 99586,Lermontovo,1909,PNZ,182,RU,52.99277,43.66141 99662,Lopatino,1909,PNZ,182,RU,52.61949,45.81184 99692,Lunino,1909,PNZ,182,RU,53.59176,45.22709 99744,Makhalino,1909,PNZ,182,RU,53.08543,46.22108 99752,Malaya Serdoba,1909,PNZ,182,RU,52.4661,44.9512 99946,Mokshan,1909,PNZ,182,RU,53.4365,44.61322 100060,Narovchat,1909,PNZ,182,RU,53.87654,43.69458 100118,Neverkino,1909,PNZ,182,RU,52.78541,46.74174 100119,Neverkinskiy Rayon,1909,PNZ,182,RU,52.75,46.66667 100144,Nikol’sk,1909,PNZ,182,RU,53.71886,46.07118 100171,Nizhniy Lomov,1909,PNZ,182,RU,53.53041,43.67663 100526,Pachelma,1909,PNZ,182,RU,53.24426,43.35205 100595,Penza,1909,PNZ,182,RU,53.20066,45.00464 100738,Poim,1909,PNZ,182,RU,53.02639,43.18721 100782,Poselki,1909,PNZ,182,RU,53.13236,46.50307 101033,Russkiy Kameshkir,1909,PNZ,182,RU,52.85955,46.08861 101174,Serdobsk,1909,PNZ,182,RU,52.45861,44.21689 101298,Shemysheyka,1909,PNZ,182,RU,52.89196,45.39282 101493,Sosnovoborsk,1909,PNZ,182,RU,53.29066,46.24849 101526,Spassk,1909,PNZ,182,RU,53.92559,43.18394 101547,Srednyaya Yelyuzan’,1909,PNZ,182,RU,53.0241,45.9529 101672,Sura,1909,PNZ,182,RU,53.88786,45.74192 101680,Sursk,1909,PNZ,182,RU,53.07542,45.68461 101759,Tamala,1909,PNZ,182,RU,52.54097,43.25145 102171,Vadinsk,1909,PNZ,182,RU,53.69157,43.05744 102255,Verkhniy Lomov,1909,PNZ,182,RU,53.46778,43.55111 102283,Verkhozim,1909,PNZ,182,RU,52.71221,45.41803 102651,Zarechnyy,1909,PNZ,182,RU,53.20356,45.19227 102664,Zasechnoye,1909,PNZ,182,RU,53.1092,45.07936 102704,Zemetchino,1909,PNZ,182,RU,53.4973,42.61632 97568,Aleksandrovsk,1871,PER,182,RU,59.1581,57.5695 97793,Barda,1871,PER,182,RU,56.9287,55.5962 97895,Berezniki,1871,PER,182,RU,59.4091,56.8204 97900,Bershet’,1871,PER,182,RU,57.7309,56.3783 98122,Chastyye,1871,PER,182,RU,57.28876,54.97278 98123,Chaykovskaya,1871,PER,182,RU,58.1288,55.5352 98124,Chaykovskiy,1871,PER,182,RU,56.76864,54.11484 98145,Cherdyn’,1871,PER,182,RU,60.40295,56.47868 98164,Chermoz,1871,PER,182,RU,58.7813,56.1577 98176,Chernushka,1871,PER,182,RU,56.50722,56.07661 98227,Chusovoy,1871,PER,182,RU,58.3013,57.8131 98296,Dobryanka,1871,PER,182,RU,58.4644,56.4127 98420,Ferma,1871,PER,182,RU,57.9016,56.3064 98427,Filippovka,1871,PER,182,RU,57.4373,57.01934 98432,Foki,1871,PER,182,RU,56.693,54.34985 98437,Froly,1871,PER,182,RU,57.9214,56.2728 98455,Gamovo,1871,PER,182,RU,57.8652,56.1056 98467,Gayny,1871,PER,182,RU,60.30707,54.32412 98534,Gornozavodsk,1871,PER,182,RU,58.37583,58.32111 98586,Gremyachinsk,1871,PER,182,RU,58.5603,57.851 98601,Gubakha,1871,PER,182,RU,58.83862,57.55325 98792,Kalino,1871,PER,182,RU,58.2504,57.6085 98861,Karagay,1871,PER,182,RU,58.26669,54.93678 98941,Kerchevskiy,1871,PER,182,RU,59.9456,56.2959 99087,Kizel,1871,PER,182,RU,59.04709,57.64767 99120,Kochevo,1871,PER,182,RU,59.5974,54.3147 99160,Komarikhinskiy,1871,PER,182,RU,58.0979,57.1163 99182,Kondratovo,1871,PER,182,RU,57.9804,56.1066 99224,Kosa,1871,PER,182,RU,59.9449,54.9895 99322,Krasnokamsk,1871,PER,182,RU,58.0796,55.7552 99340,Krasnovishersk,1871,PER,182,RU,60.40783,57.08199 99423,Kudymkar,1871,PER,182,RU,59.01306,54.65556 99428,Kukushtan,1871,PER,182,RU,57.6464,56.4952 99436,Kultayevo,1871,PER,182,RU,57.8948,55.9378 99446,Kungur,1871,PER,182,RU,57.4368,56.9593 99497,Kuyeda,1871,PER,182,RU,56.4311,55.58861 99645,Lobanovo,1871,PER,182,RU,57.8595,56.3026 99703,Lyamino,1871,PER,182,RU,58.2839,57.725 99710,Lys’va,1871,PER,182,RU,58.10861,57.80528 99823,Maykor,1871,PER,182,RU,59.0047,55.8784 99860,Mendeleyevo,1871,PER,182,RU,58.16976,54.99634 100362,Novyye Lyady,1871,PER,182,RU,58.0552,56.6104 100379,Nyrob,1871,PER,182,RU,60.733,56.72024 100380,Nytva,1871,PER,182,RU,57.9437,55.3396 100396,Ochër,1871,PER,182,RU,57.89035,54.72019 100402,Okhansk,1871,PER,182,RU,57.7203,55.3882 100457,Orda,1871,PER,182,RU,57.19509,56.90908 100484,Osa,1871,PER,182,RU,57.283,55.4589 100511,Overyata,1871,PER,182,RU,58.08417,55.86694 100561,Pashiya,1871,PER,182,RU,58.4324,58.2562 100576,Pavlovskiy,1871,PER,182,RU,57.8424,54.84357 100611,Perm,1871,PER,182,RU,58.01046,56.25017 100751,Polazna,1871,PER,182,RU,58.2922,56.4156 100799,Pozhva,1871,PER,182,RU,59.0912,56.0901 101111,Sarany,1871,PER,182,RU,58.5,58.88333 101124,Sars,1871,PER,182,RU,56.55017,57.13658 101210,Severnyy-Kospashskiy,1871,PER,182,RU,59.0897,57.8039 101239,Shakhta,1871,PER,182,RU,59.0905,57.6575 101331,Shirokovskiy,1871,PER,182,RU,58.8411,57.785 101350,Shumikhinskiy,1871,PER,182,RU,58.7448,57.6926 101382,Siva,1871,PER,182,RU,58.38204,54.38037 101433,Sokol,1871,PER,182,RU,57.9146,56.0456 101451,Solikamsk,1871,PER,182,RU,59.6316,56.7685 101658,Suksun,1871,PER,182,RU,57.1431,57.3949 101725,Sylva,1871,PER,182,RU,58.0327,56.7713 102009,Tëplaya Gora,1871,PER,182,RU,58.52444,59.07278 102032,Ugleural’skiy,1871,PER,182,RU,58.9443,57.5937 102041,Uinskoye,1871,PER,182,RU,56.88174,56.58135 102101,Usol’ye,1871,PER,182,RU,59.4219,56.6862 102123,Ust’-Kachka,1871,PER,182,RU,58.0038,55.6721 102130,Ust’-Kishert’,1871,PER,182,RU,57.3654,57.2495 102228,Vereshchagino,1871,PER,182,RU,58.07894,54.6557 102237,Verkhnechusovskiye Gorodki,1871,PER,182,RU,58.1671,57.1086 102518,Yayva,1871,PER,182,RU,59.3347,57.2592 102547,Yelovo,1871,PER,182,RU,57.05381,54.9207 102584,Yubileynyy,1871,PER,182,RU,58.7794,57.7822 102585,Yug,1871,PER,182,RU,57.7293,56.172 102587,Yugo-Kamskiy,1871,PER,182,RU,57.7026,55.5904 102599,Yurla,1871,PER,182,RU,59.3251,54.3278 102609,Yus’vinskiy Rayon,1871,PER,182,RU,59.08333,55.25 102621,Yuzhnyy-Kospashskiy,1871,PER,182,RU,58.9725,57.759 102783,Zvëzdnyy,1871,PER,182,RU,57.7325,56.31472 102789,Zyukayka,1871,PER,182,RU,58.20416,54.70784 97644,Anuchino,1833,PRI,182,RU,43.96571,133.05846 97645,Anuchinskiy Rayon,1833,PRI,182,RU,44.0,133.0 97678,Arsen’yev,1833,PRI,182,RU,44.15254,133.27791 97686,Artëm,1833,PRI,182,RU,43.3595,132.18887 97789,Barabash,1833,PRI,182,RU,43.19948,131.49185 97946,Blagodatnoye,1833,PRI,182,RU,44.32285,132.0905 98008,Bol’shoy Kamen’,1833,PRI,182,RU,43.11283,132.354 98166,Chernigovka,1833,PRI,182,RU,44.34216,132.56937 98167,Chernigovskiy Rayon,1833,PRI,182,RU,44.33333,132.58333 98182,Chernyshëvka,1833,PRI,182,RU,44.19971,133.13193 98208,Chkalovskoye,1833,PRI,182,RU,44.83808,133.04332 98217,Chuguyevka,1833,PRI,182,RU,44.16652,133.86495 98237,Dalnegorsk,1833,PRI,182,RU,44.55745,135.6209 98238,Dalnerechensk,1833,PRI,182,RU,45.93149,133.73906 98323,Dostoyevka,1833,PRI,182,RU,44.32554,133.48134 98356,Dunay,1833,PRI,182,RU,42.87881,132.33521 98392,Emar,1833,PRI,182,RU,43.20417,132.15643 98433,Fokino,1833,PRI,182,RU,42.97429,132.40574 98532,Gornorechenskiy,1833,PRI,182,RU,44.26555,135.11465 98545,Gornyye Klyuchi,1833,PRI,182,RU,45.24221,133.50601 98580,Grazhdanka,1833,PRI,182,RU,44.2163,133.17706 98730,Ivanovka,1833,PRI,182,RU,43.96879,132.48331 98823,Kamen’-Rybolov,1833,PRI,182,RU,44.7452,132.0465 98814,Kamenka,1833,PRI,182,RU,44.45865,136.01403 98912,Kavalerovo,1833,PRI,182,RU,44.27221,135.05227 98969,Khasanskiy Rayon,1833,PRI,182,RU,42.75,131.0 99007,Khorol’,1833,PRI,182,RU,44.42631,132.07638 99069,Kirovskiy,1833,PRI,182,RU,45.09272,133.50084 99113,Knevichi,1833,PRI,182,RU,43.39975,132.18808 99275,Kraskino,1833,PRI,182,RU,42.71071,130.78126 99331,Krasnorechenskiy,1833,PRI,182,RU,44.62807,135.35262 99550,Lazo,1833,PRI,182,RU,43.38563,133.9061 99551,Lazovskiy Rayon,1833,PRI,182,RU,43.25,134.0 99605,Lesozavodsk,1833,PRI,182,RU,45.47885,133.42825 99635,Lipovtsy,1833,PRI,182,RU,44.20018,131.72373 99642,Livadiya,1833,PRI,182,RU,42.8682,132.67367 99678,Luchegorsk,1833,PRI,182,RU,46.47656,134.19532 99679,Luchki,1833,PRI,182,RU,44.28613,132.25975 99700,Lyalichi,1833,PRI,182,RU,44.07352,132.38991 99898,Mikhaylovka,1833,PRI,182,RU,43.93283,132.00911 99903,Mikhaylovskiy Rayon,1833,PRI,182,RU,44.0,132.0 99935,Mnogoudobnoye,1833,PRI,182,RU,43.46802,132.46675 99955,Monastyrishche,1833,PRI,182,RU,44.19641,132.50223 100040,Nadezhdinskiy Rayon,1833,PRI,182,RU,43.41667,132.0 100052,Nakhodka,1833,PRI,182,RU,42.81384,132.87348 100271,Novonikol’sk,1833,PRI,182,RU,43.85518,131.86257 100285,Novopokrovka,1833,PRI,182,RU,45.85296,134.50035 100298,Novoshakhtinskiy,1833,PRI,182,RU,44.02576,132.16583 100312,Novosysoyevka,1833,PRI,182,RU,44.2347,133.3642 100339,Novyy,1833,PRI,182,RU,43.36438,132.02109 100431,Ol’ga,1833,PRI,182,RU,43.74735,135.2909 100555,Partizansk,1833,PRI,182,RU,43.12165,133.12347 100695,Plastun,1833,PRI,182,RU,44.76077,136.28048 100737,Pogranichnyy,1833,PRI,182,RU,44.4097,131.3778 100743,Pokrovka,1833,PRI,182,RU,43.95331,131.63443 100771,Popova,1833,PRI,182,RU,42.96096,131.72494 100811,Preobrazheniye,1833,PRI,182,RU,42.90117,133.9043 100832,Primorskiy,1833,PRI,182,RU,43.09962,131.58938 100905,Putyatin,1833,PRI,182,RU,42.86179,132.41564 100950,Razdol’noye,1833,PRI,182,RU,43.53894,131.89691 100966,Rettikhovka,1833,PRI,182,RU,44.17038,132.77083 100988,Romanovka,1833,PRI,182,RU,43.23294,132.45714 101021,Rudnaya Pristan’,1833,PRI,182,RU,44.35812,135.81478 101026,Rudnyy,1833,PRI,182,RU,44.27759,134.96106 101031,Russkiy,1833,PRI,182,RU,43.0224,131.8601 101181,Sergeyevka,1833,PRI,182,RU,43.34909,133.35972 101333,Shkotovo,1833,PRI,182,RU,43.32092,132.35433 101334,Shkotovskiy Rayon,1833,PRI,182,RU,43.33333,132.58333 101341,Shtykovo,1833,PRI,182,RU,43.38918,132.36129 101384,Sivakovka,1833,PRI,182,RU,44.47838,132.36718 101404,Slavyanka,1833,PRI,182,RU,42.86413,131.3882 101420,Smolyaninovo,1833,PRI,182,RU,43.28801,132.45586 101528,Spassk-Dal’niy,1833,PRI,182,RU,44.59884,132.82593 101532,Spasskiy Rayon,1833,PRI,182,RU,44.5,133.0 101534,Spasskoye,1833,PRI,182,RU,44.61215,132.80007 101700,Svetlaya,1833,PRI,182,RU,46.54217,138.32973 101800,Tavrichanka,1833,PRI,182,RU,43.32551,131.86264 101833,Terney,1833,PRI,182,RU,45.05278,136.60881 101933,Trudovoye,1833,PRI,182,RU,43.29823,132.06877 102030,Uglekamensk,1833,PRI,182,RU,43.21996,133.23177 102037,Uglovoye,1833,PRI,182,RU,43.32807,132.08832 102105,Ussuriysk,1833,PRI,182,RU,43.80291,131.94578 102327,Vladimiro-Aleksandrovskoye,1833,PRI,182,RU,42.89134,133.07801 102330,Vladivostok,1833,PRI,182,RU,43.10562,131.87353 102372,Vol’no-Nadezhdinskoye,1833,PRI,182,RU,43.37496,131.99675 102338,Volchanets,1833,PRI,182,RU,42.91388,132.76222 102400,Vostok,1833,PRI,182,RU,46.45148,135.82738 102406,Vozdvizhenka,1833,PRI,182,RU,43.89413,131.94589 102412,Vrangel’,1833,PRI,182,RU,42.73021,133.08322 102466,Yakovlevka,1833,PRI,182,RU,44.42588,133.47406 102470,Yakovlevskiy Rayon,1833,PRI,182,RU,44.41667,133.5 102502,Yaroslavskiy,1833,PRI,182,RU,44.18578,132.22862 102530,Yekaterinovka,1833,PRI,182,RU,42.92525,133.04922 102661,Zarubino,1833,PRI,182,RU,42.63257,131.09005 102677,Zavodskoy,1833,PRI,182,RU,43.46242,132.28494 102712,Zharikovo,1833,PRI,182,RU,44.588,131.7277 97919,Bezhanitsy,1863,PSK,182,RU,56.97669,29.89065 98256,Dedovichi,1863,PSK,182,RU,57.55166,29.95018 98290,Dno,1863,PSK,182,RU,57.82772,29.96368 98470,Gdov,1863,PSK,182,RU,58.74424,27.81977 98471,Gdovskiy Rayon,1863,PSK,182,RU,58.75,28.0 98630,Idritsa,1863,PSK,182,RU,56.33157,28.89884 98745,Izborsk,1863,PSK,182,RU,57.70757,27.86291 99302,Krasnogorodsk,1863,PSK,182,RU,56.83568,28.28224 99368,Krasnyy Luch,1863,PSK,182,RU,57.06676,30.09032 99448,Kun’inskiy Rayon,1863,PSK,182,RU,56.25,31.0 99651,Loknya,1863,PSK,182,RU,56.82998,30.14665 100115,Nevel’,1863,PSK,182,RU,56.02094,29.92844 100291,Novorzhev,1863,PSK,182,RU,57.02942,29.33378 100292,Novorzhevskiy Rayon,1863,PSK,182,RU,57.08333,29.41667 100309,Novosokol’nicheskiy Rayon,1863,PSK,182,RU,56.41667,30.0 100310,Novosokol’niki,1863,PSK,182,RU,56.34634,30.15778 100343,Novyy Izborsk,1863,PSK,182,RU,57.77079,27.97306 100455,Opochka,1863,PSK,182,RU,56.71357,28.66388 100496,Ostrov,1863,PSK,182,RU,57.34395,28.35368 100498,Ostrovskiy Rayon,1863,PSK,182,RU,57.25,28.33333 100531,Palkino,1863,PSK,182,RU,57.54089,28.01257 100532,Palkinskiy Rayon,1863,PSK,182,RU,57.5,28.0 100588,Pechorskiy Rayon,1863,PSK,182,RU,57.75,27.75 100589,Pechory,1863,PSK,182,RU,57.81642,27.6119 100704,Plyussa,1863,PSK,182,RU,58.43078,29.36537 100777,Porkhov,1863,PSK,182,RU,57.76502,29.55612 100778,Porkhovskiy Rayon,1863,PSK,182,RU,57.75,29.5 100881,Pskov,1863,PSK,182,RU,57.8136,28.3496 100882,Pskovskiy Rayon,1863,PSK,182,RU,57.75,28.25 100899,Pushkino-Gorskiy Rayon,1863,PSK,182,RU,57.0,28.75 100901,Pushkinskiye Gory,1863,PSK,182,RU,57.02085,28.9103 100902,Pustoshka,1863,PSK,182,RU,56.33547,29.36901 100903,Pustoshkinskiy Rayon,1863,PSK,182,RU,56.41667,29.41667 100918,Pytalovo,1863,PSK,182,RU,57.06791,27.91384 100919,Pytalovskiy Rayon,1863,PSK,182,RU,57.0,28.0 101143,Sebezh,1863,PSK,182,RU,56.28511,28.48187 101144,Sebezhskiy Rayon,1863,PSK,182,RU,56.25,28.5 101197,Serëdka,1863,PSK,182,RU,58.15838,28.18576 101633,Strugi-Krasnyye,1863,PSK,182,RU,58.26754,29.11137 101634,Strugo-Krasnenskiy Rayon,1863,PSK,182,RU,58.33333,29.0 102147,Usvyaty,1863,PSK,182,RU,55.74556,30.75333 102213,Velikiye Luki,1863,PSK,182,RU,56.34,30.54517 102215,Velikolukskiy Rayon,1863,PSK,182,RU,56.5,30.58333 102425,Vybor,1863,PSK,182,RU,57.22716,29.1663 97476,Abadzekhskaya,1852,AD,182,RU,44.39389,40.22139 97506,Adygeysk,1852,AD,182,RU,44.88414,39.19071 97507,Adygeysk Republican Urban Okrug,1852,AD,182,RU,44.8785,39.19167 97871,Beloye,1852,AD,182,RU,45.04832,39.65143 97953,Blechepsin,1852,AD,182,RU,44.82028,40.50028 98309,Dondukovskaya,1852,AD,182,RU,44.8819,40.36271 98395,Enem,1852,AD,182,RU,44.9264,38.90584 98486,Giaginskaya,1852,AD,182,RU,44.86208,40.07195 98487,Giaginskiy Rayon,1852,AD,182,RU,44.83333,40.16667 98816,Kamennomostskiy,1852,AD,182,RU,44.2891,40.188 98961,Khanskaya,1852,AD,182,RU,44.67702,39.9616 98974,Khatukay,1852,AD,182,RU,45.19074,39.6632 98988,Khodz’,1852,AD,182,RU,44.5102,40.7142 99227,Koshekhabl’,1852,AD,182,RU,44.89722,40.51194 99228,Koshekhabl’skiy Rayon,1852,AD,182,RU,44.83333,40.5 99315,Krasnogvardeyskiy Rayon,1852,AD,182,RU,45.08333,39.75 99317,Krasnogvardeyskoye,1852,AD,182,RU,45.1278,39.57246 99503,Kuzhorskaya,1852,AD,182,RU,44.67512,40.31032 99819,Maykop,1852,AD,182,RU,44.60778,40.10583 99820,Maykop Republican Urban Okrug,1852,AD,182,RU,44.611,40.12344 99821,Maykopskiy Rayon,1852,AD,182,RU,44.33333,40.25 100065,Natyrbovo,1852,AD,182,RU,44.73,40.62639 100768,Ponezhukay,1852,AD,182,RU,44.88761,39.38551 101339,Shovgenovskiy,1852,AD,182,RU,45.01028,40.225 101340,Shovgenovskiy Rayon,1852,AD,182,RU,45.0,40.16667 101742,Takhtamukay,1852,AD,182,RU,44.9215,38.99583 101743,Takhtamukayskiy Rayon,1852,AD,182,RU,44.97433,38.80548 101844,Teuchezhskiy Rayon,1852,AD,182,RU,44.91667,39.33333 101867,Tlyustenkhabl’,1852,AD,182,RU,44.982,39.09773 102458,Yablonovskiy,1852,AD,182,RU,44.98901,38.94324 97492,Abzakovo,1854,BA,182,RU,53.82861,58.59333 97493,Abzelilovskiy Rayon,1854,BA,182,RU,53.41667,58.5 97516,Agidel’,1854,BA,182,RU,55.9077,53.9355 97552,Ak”yar,1854,BA,182,RU,51.85905,58.22136 97535,Akhunovo,1854,BA,182,RU,54.2079,59.6017 97538,Aksakovo,1854,BA,182,RU,54.03333,54.15 97610,Al’sheyevskiy Rayon,1854,BA,182,RU,54.0,55.0 97577,Alekseyevka,1854,BA,182,RU,54.85,55.23333 97616,Amzya,1854,BA,182,RU,56.2346,54.385 97692,Asanovo,1854,BA,182,RU,54.89418,55.49083 97702,Askino,1854,BA,182,RU,56.09013,56.57831 97703,Askinskiy Rayon,1854,BA,182,RU,56.08333,56.58333 97721,Avdon,1854,BA,182,RU,54.66667,55.71667 97757,Bakalinskiy Rayon,1854,BA,182,RU,55.16667,53.75 97758,Bakaly,1854,BA,182,RU,55.17889,53.80278 97826,Baymak,1854,BA,182,RU,52.59333,58.3225 97833,Bedeyeva Polyana,1854,BA,182,RU,55.32345,56.38882 97846,Belebey,1854,BA,182,RU,54.11667,54.11667 97864,Beloretsk,1854,BA,182,RU,53.96306,58.39806 97865,Beloretskiy Rayon,1854,BA,182,RU,54.0,58.0 97937,Birsk,1854,BA,182,RU,55.42111,55.54278 97943,Bizhbulyak,1854,BA,182,RU,53.6967,54.2642 97948,Blagoveshchensk,1854,BA,182,RU,55.035,55.97806 98075,Bulgakovo,1854,BA,182,RU,54.4968,55.8843 98077,Burayevo,1854,BA,182,RU,55.84069,55.40834 98081,Buribay,1854,BA,182,RU,51.96167,58.15917 98094,Buzdyak,1854,BA,182,RU,54.58333,54.55 98095,Buzdyakskiy Rayon,1854,BA,182,RU,54.58333,54.5 98137,Chekmagush,1854,BA,182,RU,55.13194,54.65556 98193,Chesnokovka,1854,BA,182,RU,54.61242,55.94575 98198,Chishmy,1854,BA,182,RU,54.57648,55.37642 98249,Davlekanovo,1854,BA,182,RU,54.22145,55.03434 98282,Dmitriyevka,1854,BA,182,RU,54.75,55.33333 98357,Duvan,1854,BA,182,RU,55.69497,57.90237 98366,Dyurtyuli,1854,BA,182,RU,55.49106,54.86883 98443,Fëdorovskiy Rayon,1854,BA,182,RU,53.08333,55.25 98632,Iglino,1854,BA,182,RU,54.83244,56.41264 98682,Inzer,1854,BA,182,RU,54.2167,57.5556 98705,Ishimbay,1854,BA,182,RU,53.45446,56.04149 98722,Isyangulovo,1854,BA,182,RU,52.18584,56.58043 98762,Kabakovo,1854,BA,182,RU,54.5369,56.1517 98800,Kaltasy,1854,BA,182,RU,55.96926,54.80321 98839,Kandry,1854,BA,182,RU,54.56667,54.11667 98864,Karaidel’,1854,BA,182,RU,55.83373,56.90692 98882,Karmaskaly,1854,BA,182,RU,54.3709,56.1837 98975,Khaybullinskiy Rayon,1854,BA,182,RU,52.0,58.25 99054,Kirgiz-Miyaki,1854,BA,182,RU,53.6324,54.7979 99280,Krasnaya Gorka,1854,BA,182,RU,55.19617,56.66727 99324,Krasnokholmskiy,1854,BA,182,RU,55.98729,55.04659 99364,Krasnyy Klyuch,1854,BA,182,RU,55.38625,56.65287 99420,Kudeyevskiy,1854,BA,182,RU,54.87583,56.75667 99440,Kumertau,1854,BA,182,RU,52.76667,55.78333 99487,Kushnarënkovo,1854,BA,182,RU,55.105,55.35083 99659,Lomovka,1854,BA,182,RU,53.91944,58.36722 99737,Maginsk,1854,BA,182,RU,55.76338,56.96583 99818,Mayachnyy,1854,BA,182,RU,52.6839,55.685 99839,Mechetlinskiy Rayon,1854,BA,182,RU,55.91667,58.25 99855,Meleuz,1854,BA,182,RU,52.96467,55.93277 99872,Mesyagutovo,1854,BA,182,RU,55.53028,58.25278 99877,Mezgore,1854,BA,182,RU,54.04976,57.81713 99897,Mikhaylovka,1854,BA,182,RU,54.805,55.89193 99916,Mindyak,1854,BA,182,RU,54.0231,58.7891 99928,Mishkino,1854,BA,182,RU,53.9997,59.1064 99930,Mishkinskiy Rayon,1854,BA,182,RU,55.58333,56.0 99933,Miyakinskiy Rayon,1854,BA,182,RU,53.58333,54.83333 99988,Mrakovo,1854,BA,182,RU,52.71611,56.62444 100017,Mursalimkino,1854,BA,182,RU,55.0379,58.5585 100086,Neftekamsk,1854,BA,182,RU,56.092,54.2661 100140,Nikolo-Berëzovka,1854,BA,182,RU,56.12422,54.15573 100159,Nizhnetroitskiy,1854,BA,182,RU,54.33852,53.68329 100227,Novobelokatay,1854,BA,182,RU,55.7062,58.9549 100369,Nurimanovskiy Rayon,1854,BA,182,RU,54.75,56.66667 100411,Oktyabr’skiy,1854,BA,182,RU,54.48147,53.47103 100567,Pavlovka,1854,BA,182,RU,55.42094,56.55426 100853,Priyutovo,1854,BA,182,RU,53.9,53.93333 100948,Rayevskiy,1854,BA,182,RU,54.0658,54.9468 101078,Salavat,1854,BA,182,RU,53.38365,55.90773 101164,Semiletka,1854,BA,182,RU,55.36028,54.61528 101173,Serafimovskiy,1854,BA,182,RU,54.42408,53.7964 101234,Shafranovo,1854,BA,182,RU,53.96667,54.76667 101258,Sharan,1854,BA,182,RU,54.81667,54.0 101366,Sibay,1854,BA,182,RU,52.71806,58.66583 101573,Starobaltachevo,1854,BA,182,RU,56.0017,55.928 101595,Starosubkhangulovo,1854,BA,182,RU,53.1031,57.4423 101618,Sterlibashevo,1854,BA,182,RU,53.43755,55.2578 101619,Sterlitamak,1854,BA,182,RU,53.62462,55.95015 101640,Subkhankulovo,1854,BA,182,RU,54.55741,53.81153 101822,Temyasovo,1854,BA,182,RU,52.99333,58.10139 101862,Tirlyanskiy,1854,BA,182,RU,54.2109,58.5806 101876,Tolbazy,1854,BA,182,RU,54.02408,55.88248 101959,Tubinskiy,1854,BA,182,RU,52.88917,58.2225 101964,Tukan,1854,BA,182,RU,53.8409,57.4552 101986,Tuymazy,1854,BA,182,RU,54.60666,53.7097 102013,Uchaly,1854,BA,182,RU,54.35806,59.43611 102025,Ufa,1854,BA,182,RU,54.74306,55.96779 102049,Ulu-Telyak,1854,BA,182,RU,54.9157,56.9827 102050,Ulukulevo,1854,BA,182,RU,54.4355,56.3221 102080,Urman,1854,BA,182,RU,54.88314,56.87417 102246,Verkhneyarkeyevo,1854,BA,182,RU,55.45046,54.31455 102249,Verkhniy Avzyan,1854,BA,182,RU,53.52889,57.53722 102261,Verkhniye Kigi,1854,BA,182,RU,55.40833,58.60444 102264,Verkhniye Tatyshly,1854,BA,182,RU,56.29117,55.8575 102394,Voskresenskoye,1854,BA,182,RU,53.12336,56.14664 102480,Yanaul,1854,BA,182,RU,56.2751,54.9338 102481,Yanaul’skiy Rayon,1854,BA,182,RU,56.25,54.91667 102520,Yazykovo,1854,BA,182,RU,55.21988,56.13532 102565,Yermekeyevo,1854,BA,182,RU,54.07614,53.67125 102567,Yermolayevo,1854,BA,182,RU,52.71667,55.8 102592,Yumaguzino,1854,BA,182,RU,52.90412,56.39329 102747,Zilair,1854,BA,182,RU,52.2332,57.4392 102749,Zirgan,1854,BA,182,RU,53.2222,55.9185 97745,Babushkin,1842,BU,182,RU,51.71222,105.86472 97753,Bagdarin,1842,BU,182,RU,54.43333,113.6 97794,Barguzin,1842,BU,182,RU,53.61875,109.63904 97822,Bayangol,1842,BU,182,RU,50.6977,103.4656 97925,Bichura,1842,BU,182,RU,50.58806,107.60222 98011,Bol’shoy Kunaley,1842,BU,182,RU,51.43203,107.6089 98377,Dzhida,1842,BU,182,RU,50.67722,106.18056 98620,Gusinoozyorsk,1842,BU,182,RU,51.28333,106.5 98621,Gusinoye Ozero,1842,BU,182,RU,51.11444,106.26139 98652,Il’inka,1842,BU,182,RU,52.11944,107.27083 98659,Il’ka,1842,BU,182,RU,51.72114,108.52169 98718,Istok,1842,BU,182,RU,52.09528,106.2475 98741,Ivolginsk,1842,BU,182,RU,51.74919,107.28374 98742,Ivolginskiy Rayon,1842,BU,182,RU,51.83333,107.33333 98764,Kabansk,1842,BU,182,RU,52.04861,106.65278 99000,Kholtoson,1842,BU,182,RU,50.2981,103.3097 99003,Khonkholoy,1842,BU,182,RU,51.13186,108.22515 99005,Khorinsk,1842,BU,182,RU,52.16631,109.77626 99031,Kichera,1842,BU,182,RU,55.93874,110.10122 99089,Kizhinga,1842,BU,182,RU,51.8476,109.90795 99418,Kudara-Somon,1842,BU,182,RU,50.15472,107.40139 99478,Kurumkan,1842,BU,182,RU,54.32093,110.30651 99516,Kyakhta,1842,BU,182,RU,50.35737,106.45033 99519,Kyren,1842,BU,182,RU,51.6828,102.1408 99998,Mukhorshibir’,1842,BU,182,RU,51.04986,107.82997 99997,Mukhorshibirskiy Rayon,1842,BU,182,RU,51.08333,107.75 100024,Muyskiy Rayon,1842,BU,182,RU,56.33333,115.0 100069,Naushki,1842,BU,182,RU,50.38278,106.10556 100145,Nikol’sk,1842,BU,182,RU,51.18867,108.32187 100138,Nikolayevskiy,1842,BU,182,RU,51.65526,107.80068 100150,Nizhneangarsk,1842,BU,182,RU,55.79326,109.58029 100175,Nizhniy Sayantuy,1842,BU,182,RU,51.73751,107.51308 100200,Novaya Bryan’,1842,BU,182,RU,51.71699,108.27014 100251,Novokizhinginsk,1842,BU,182,RU,51.6162,109.60265 100351,Novyy Uoyan,1842,BU,182,RU,56.15722,111.70556 100355,Novyy Zagan,1842,BU,182,RU,51.02858,107.76376 100404,Okino-Klyuchi,1842,BU,182,RU,50.59389,107.10944 100405,Okinskiy Rayon,1842,BU,182,RU,52.5,100.5 100451,Onokhoy,1842,BU,182,RU,51.92859,108.06693 100469,Orlik,1842,BU,182,RU,52.5178,99.825 100651,Petropavlovka,1842,BU,182,RU,50.6114,105.3196 100816,Pribaykal’skiy Rayon,1842,BU,182,RU,52.5,108.0 100957,Rechka-Vydrino,1842,BU,182,RU,51.4892,104.8429 101072,Sagan-Nur,1842,BU,182,RU,51.3436,108.4449 101151,Selenduma,1842,BU,182,RU,50.91306,106.24056 101152,Selenginskiy Rayon,1842,BU,182,RU,51.16667,106.33333 101211,Severo-Baykal’skiy Rayon,1842,BU,182,RU,56.0,111.5 101216,Severobaykal’sk,1842,BU,182,RU,55.63695,109.32297 101220,Severomuysk,1842,BU,182,RU,56.14806,113.42667 101257,Sharalday,1842,BU,182,RU,51.02528,107.64487 101434,Sokol,1842,BU,182,RU,51.80036,107.44437 101492,Sosnovo-Ozerskoye,1842,BU,182,RU,52.52466,111.54124 101500,Sotnikovo,1842,BU,182,RU,51.88448,107.4825 101745,Taksimo,1842,BU,182,RU,56.34162,114.90048 101766,Tankhoy,1842,BU,182,RU,51.55683,105.1262 101772,Tarbagatay,1842,BU,182,RU,51.48195,107.36158 101796,Tataurovo,1842,BU,182,RU,52.14182,107.44054 101978,Turka,1842,BU,182,RU,52.9492,108.2217 101983,Turuntayevo,1842,BU,182,RU,52.20203,107.64484 102044,Ulan-Ude,1842,BU,182,RU,51.82721,107.60627 102115,Ust’-Barguzin,1842,BU,182,RU,53.41116,109.03103 102428,Vydrino,1842,BU,182,RU,51.463,104.6425 102630,Zaigrayevo,1842,BU,182,RU,51.83487,108.267 102633,Zakamensk,1842,BU,182,RU,50.3741,103.2863 102655,Zarechnyy,1842,BU,182,RU,51.84928,107.521 102723,Zhemchug,1842,BU,182,RU,51.6861,102.459 97497,Achisu,1850,DA,182,RU,42.65197,47.68282 97502,Adil’-Yangiyurt,1850,DA,182,RU,43.56328,46.58462 97524,Agul’skiy Rayon,1850,DA,182,RU,41.83333,47.58333 97525,Agvali,1850,DA,182,RU,42.53853,46.11967 97532,Akhty,1850,DA,182,RU,41.45968,47.73123 97533,Akhtynskiy Rayon,1850,DA,182,RU,41.33333,47.58333 97536,Akhvakhskiy Rayon,1850,DA,182,RU,42.58333,46.33333 97537,Aknada,1850,DA,182,RU,42.40155,46.17228 97541,Aksay,1850,DA,182,RU,43.37254,46.44497 97550,Akusha,1850,DA,182,RU,42.26885,47.34114 97551,Akushinskiy Rayon,1850,DA,182,RU,42.16667,47.33333 97624,Andi,1850,DA,182,RU,42.78359,46.26171 97639,Ansalta,1850,DA,182,RU,42.68941,46.11782 97697,Ashil’ta,1850,DA,182,RU,42.77042,46.72992 97739,Babayurt,1850,DA,182,RU,43.6002,46.77888 97740,Babayurtovskiy Rayon,1850,DA,182,RU,43.58333,47.0 97786,Bammatyurt,1850,DA,182,RU,43.34576,46.60819 97820,Bavtugay,1850,DA,182,RU,43.16808,46.83415 97850,Belidzhi,1850,DA,182,RU,41.89184,48.41247 97922,Bezhta,1850,DA,182,RU,42.1338,46.12828 98048,Botashyurt,1850,DA,182,RU,43.30801,46.50991 98049,Botayurt,1850,DA,182,RU,43.31865,46.68371 98050,Botlikhskiy Rayon,1850,DA,182,RU,42.75,46.25 98085,Burtunay,1850,DA,182,RU,42.9886,46.63034 98091,Buynaksk,1850,DA,182,RU,42.819,47.1192 98092,Buynakskiy Rayon,1850,DA,182,RU,42.83333,47.16667 98119,Charodinskiy Rayon,1850,DA,182,RU,42.16667,46.75 98195,Chinar,1850,DA,182,RU,42.10798,48.14321 98197,Chirkey,1850,DA,182,RU,42.96131,46.97866 98210,Chontaul,1850,DA,182,RU,43.30481,46.85967 98232,Dagestanskiye Ogni,1850,DA,182,RU,42.11589,48.19204 98234,Dakhadayevskiy Rayon,1850,DA,182,RU,42.08333,47.58333 98265,Derbent,1850,DA,182,RU,42.06779,48.28987 98266,Derbentskiy Rayon,1850,DA,182,RU,42.08333,48.16667 98298,Dokuzparinskiy Rayon,1850,DA,182,RU,42.33333,47.91667 98317,Dorgeli,1850,DA,182,RU,42.667,47.29435 98330,Druzhba,1850,DA,182,RU,42.242,48.00145 98335,Dubki,1850,DA,182,RU,43.02116,46.83746 98364,Dylym,1850,DA,182,RU,43.07099,46.63454 98394,Endirey,1850,DA,182,RU,43.16316,46.65401 98400,Erpeli,1850,DA,182,RU,42.80584,46.97732 98447,Gagatli,1850,DA,182,RU,42.8013,46.29162 98456,Gaptsakh,1850,DA,182,RU,41.45174,47.93027 98472,Gedzhukh,1850,DA,182,RU,42.12786,48.06474 98479,Gereykhanovskoye,1850,DA,182,RU,41.7011,48.28113 98480,Gerga,1850,DA,182,RU,42.34645,47.96333 98481,Gergebil’,1850,DA,182,RU,42.50472,47.06611 98482,Gergebil’skiy Rayon,1850,DA,182,RU,42.5,47.0 98490,Gimry,1850,DA,182,RU,42.75974,46.83959 98602,Gubden,1850,DA,182,RU,42.56808,47.56579 98610,Gumbetovskiy Rayon,1850,DA,182,RU,42.83333,46.5 98613,Gunib,1850,DA,182,RU,42.38758,46.96509 98614,Gunibskiy Rayon,1850,DA,182,RU,42.41667,46.83333 98615,Gurbuki,1850,DA,182,RU,42.61128,47.60067 98691,Irganay,1850,DA,182,RU,42.6465,46.91154 98744,Izberbash,1850,DA,182,RU,42.56955,47.86447 98775,Kafyr-Kumukh,1850,DA,182,RU,42.83754,47.15412 98786,Kalininaul,1850,DA,182,RU,43.07121,46.56679 98854,Karabudakhkent,1850,DA,182,RU,42.7087,47.56735 98855,Karabudakhkentskiy Rayon,1850,DA,182,RU,42.66667,47.5 98868,Karamakhi,1850,DA,182,RU,42.61934,47.26017 98870,Karata,1850,DA,182,RU,42.59486,46.3393 98900,Kaspiysk,1850,DA,182,RU,42.88165,47.63919 98905,Kasumkent,1850,DA,182,RU,41.67725,48.14601 98915,Kayakent,1850,DA,182,RU,42.38736,47.90301 98916,Kayakentskiy Rayon,1850,DA,182,RU,42.33333,47.91667 98919,Kaytagskiy Rayon,1850,DA,182,RU,42.08333,47.83333 98931,Kazbekovskiy Rayon,1850,DA,182,RU,43.0,46.66667 98954,Khadzhalmakhi,1850,DA,182,RU,42.42,47.18206 98955,Khamamatyurt,1850,DA,182,RU,43.60809,46.5006 98970,Khasavyurt,1850,DA,182,RU,43.2509,46.58766 98971,Khasavyurtovskiy Rayon,1850,DA,182,RU,43.33333,46.66667 98976,Khazar,1850,DA,182,RU,41.9974,48.33325 98977,Khebda,1850,DA,182,RU,42.44423,46.55172 98984,Khiv,1850,DA,182,RU,41.75428,47.93063 98985,Khivskiy Rayon,1850,DA,182,RU,41.75,47.91667 99016,Khuchni,1850,DA,182,RU,41.94986,47.94854 99019,Khunzakh,1850,DA,182,RU,42.5424,46.70689 99020,Khunzakhskiy Rayon,1850,DA,182,RU,42.58333,46.66667 99079,Kishcha,1850,DA,182,RU,42.17677,47.58117 99090,Kizilyurt,1850,DA,182,RU,43.1883,46.88511 99091,Kizilyurtovskiy Rayon,1850,DA,182,RU,43.25,46.91667 99094,Kizlyar,1850,DA,182,RU,43.84712,46.71445 99095,Kizlyarskiy Rayon,1850,DA,182,RU,44.0,47.0 99124,Kochubey,1850,DA,182,RU,44.38611,46.5825 99133,Kokrek,1850,DA,182,RU,43.23639,46.72665 99173,Komsomol’skiy,1850,DA,182,RU,43.97833,46.69852 99208,Korkmaskala,1850,DA,182,RU,43.02379,47.29436 99236,Kostek,1850,DA,182,RU,43.34387,46.85411 99414,Kubachi,1850,DA,182,RU,42.08598,47.60338 99432,Kuli,1850,DA,182,RU,42.01845,47.24342 99433,Kulinskiy Rayon,1850,DA,182,RU,42.0,47.25 99442,Kumukh,1850,DA,182,RU,42.17036,47.11606 99453,Kurakh,1850,DA,182,RU,41.58491,47.78306 99454,Kurakhskiy Rayon,1850,DA,182,RU,41.58333,47.75 99464,Kurkent,1850,DA,182,RU,41.71199,48.11531 99480,Kurush,1850,DA,182,RU,41.28413,47.83454 99517,Kyakhulay,1850,DA,182,RU,42.96839,47.48301 99542,Lakskiy Rayon,1850,DA,182,RU,42.16667,47.08333 99563,Leninaul,1850,DA,182,RU,43.09138,46.57434 99565,Leninkent,1850,DA,182,RU,42.96895,47.35202 99612,Levashi,1850,DA,182,RU,42.43036,47.32148 99613,Levashinskiy Rayon,1850,DA,182,RU,42.41667,47.33333 99694,Lutkun,1850,DA,182,RU,41.48084,47.68578 99729,Madzhalis,1850,DA,182,RU,42.12167,47.83333 99732,Magaramkent,1850,DA,182,RU,41.61586,48.34797 99733,Magaramkentskiy Rayon,1850,DA,182,RU,41.66667,48.33333 99743,Makhachkala,1850,DA,182,RU,42.97638,47.50236 99776,Mamedkala,1850,DA,182,RU,42.16757,48.11671 99781,Manas,1850,DA,182,RU,42.72749,47.67846 99782,Manaskent,1850,DA,182,RU,42.7402,47.6914 99891,Miatli,1850,DA,182,RU,43.08173,46.8286 99931,Miskindzha,1850,DA,182,RU,41.42402,47.84669 99994,Mugi,1850,DA,182,RU,42.29944,47.42077 100022,Mutsalaul,1850,DA,182,RU,43.27548,46.73078 100036,Myurego,1850,DA,182,RU,42.41087,47.69304 100161,Nizhneye Kazanishche,1850,DA,182,RU,42.76369,47.16027 100166,Nizhniy Dzhengutay,1850,DA,182,RU,42.70008,47.24488 100190,Nogayskiy Rayon,1850,DA,182,RU,44.5,46.0 100207,Novaya Maka,1850,DA,182,RU,41.77173,48.36149 100242,Novogagatli,1850,DA,182,RU,43.45677,46.48175 100247,Novokayakent,1850,DA,182,RU,42.39368,47.98608 100261,Novolakskiy Rayon,1850,DA,182,RU,43.16667,46.5 100262,Novolakskoye,1850,DA,182,RU,43.11952,46.48281 100342,Novyy Chirkey,1850,DA,182,RU,43.16205,47.05585 100345,Novyy Khushet,1850,DA,182,RU,42.89941,47.5604 100346,Novyy Kostek,1850,DA,182,RU,43.3353,46.82466 100350,Novyy Sulak,1850,DA,182,RU,43.18126,46.8263 100368,Nuradilovo,1850,DA,182,RU,43.28447,46.45763 100544,Paraul,1850,DA,182,RU,42.74193,47.35531 100626,Pervomayskoye,1850,DA,182,RU,43.91904,46.71019 100746,Pokrovskoye,1850,DA,182,RU,43.28872,46.66527 101035,Rutul,1850,DA,182,RU,41.53566,47.42391 101036,Rutul’skiy Rayon,1850,DA,182,RU,41.66667,47.25 101062,Sabnova,1850,DA,182,RU,42.06316,48.25326 101093,Samur,1850,DA,182,RU,41.82527,48.48597 101184,Sergokala,1850,DA,182,RU,42.45468,47.66119 101185,Sergokalinskiy Rayon,1850,DA,182,RU,42.33333,47.58333 101252,Shamil’kala,1850,DA,182,RU,42.68581,46.86393 101253,Shamil’skiy Rayon,1850,DA,182,RU,42.41667,46.5 101254,Shamkhal,1850,DA,182,RU,43.05958,47.33732 101255,Shamkhal-Termen,1850,DA,182,RU,43.03389,47.31053 101381,Siukh,1850,DA,182,RU,42.5999,46.54462 101456,Solnechnoye,1850,DA,182,RU,43.276,46.50697 101659,Sulak,1850,DA,182,RU,43.27342,47.51463 101660,Suleyman-Stal’skiy Rayon,1850,DA,182,RU,41.66667,48.08333 101731,Syrtych,1850,DA,182,RU,41.83388,48.22901 101737,Tabasaranskiy Rayon,1850,DA,182,RU,41.91667,48.0 101775,Tarki,1850,DA,182,RU,42.94423,47.49527 101780,Tarumovka,1850,DA,182,RU,44.07606,46.53613 101781,Tarumovskiy Rayon,1850,DA,182,RU,44.41667,46.66667 101813,Temiraul,1850,DA,182,RU,43.25322,46.8254 101828,Terekli-Mekteb,1850,DA,182,RU,44.1671,45.86975 101865,Tlyarata,1850,DA,182,RU,42.10408,46.3559 101866,Tlyaratinskiy Rayon,1850,DA,182,RU,42.08333,46.41667 101910,Tpig,1850,DA,182,RU,41.78007,47.58896 101954,Tsumadinskiy Rayon,1850,DA,182,RU,42.5,46.08333 101955,Tsuntinskiy Rayon,1850,DA,182,RU,42.16667,46.0 101956,Tsurib,1850,DA,182,RU,42.2368,46.83073 101998,Tyube,1850,DA,182,RU,43.04926,47.30742 102015,Uchkent,1850,DA,182,RU,43.11427,47.08255 102047,Ulluaya,1850,DA,182,RU,42.37377,47.37451 102048,Ullubiyaul,1850,DA,182,RU,42.59689,47.71825 102063,Untsukul’,1850,DA,182,RU,42.71149,46.78663 102064,Untsukul’skiy Rayon,1850,DA,182,RU,42.66667,46.83333 102078,Urkarakh,1850,DA,182,RU,42.16297,47.63068 102079,Urma,1850,DA,182,RU,42.53894,47.28639 102097,Usisha,1850,DA,182,RU,42.25111,47.39278 102146,Usukhchay,1850,DA,182,RU,41.42245,47.91318 102149,Utamysh,1850,DA,182,RU,42.40718,47.75109 102152,Utsmiyurt,1850,DA,182,RU,43.53481,46.46952 102210,Velikent,1850,DA,182,RU,42.18762,48.06366 102248,Verkhneye Kazanishche,1850,DA,182,RU,42.73547,47.1378 102616,Yuzhno-Sukhokumsk,1850,DA,182,RU,44.65811,45.6436 102775,Zubutli-Miatli,1850,DA,182,RU,43.19886,46.81241 97589,Ali-Yurt,1884,IN,182,RU,43.1425,44.8525 97592,Alkhan-Churt,1884,IN,182,RU,43.35194,44.78694 98235,Dalakovo,1884,IN,182,RU,43.23759,44.58964 98374,Dzhayrakh,1884,IN,182,RU,42.82043,44.68139 98375,Dzhayrakhskiy Rayon,1884,IN,182,RU,42.80749,44.9176 98382,Ekazhevo,1884,IN,182,RU,43.21222,44.82306 98449,Galashki,1884,IN,182,RU,43.1174,44.99055 98847,Kantyshevo,1884,IN,182,RU,43.22824,44.63322 98856,Karabulak,1884,IN,182,RU,43.30513,44.89949 99734,Magas,1884,IN,182,RU,43.22257,44.77261 99754,Malgobek,1884,IN,182,RU,43.51118,44.58821 99755,Malgobekskiy Rayon,1884,IN,182,RU,43.5,44.58333 100078,Nazran’,1884,IN,182,RU,43.22597,44.77323 100077,Nazranovskiy Rayon,1884,IN,182,RU,43.25,44.83333 100112,Nesterovskaya,1884,IN,182,RU,43.23861,45.05028 100178,Nizhniye Achaluki,1884,IN,182,RU,43.4028,44.75908 100878,Psedakh,1884,IN,182,RU,43.46722,44.56917 101073,Sagopshi,1884,IN,182,RU,43.48515,44.59063 101605,Staryy Malgobek,1884,IN,182,RU,43.54437,44.59592 101666,Sunzha,1884,IN,182,RU,43.3195,45.04911 101668,Sunzhenskiy Rayon,1884,IN,182,RU,43.33333,45.08333 101677,Surkhakhi,1884,IN,182,RU,43.1875,44.90194 101916,Troitskaya,1884,IN,182,RU,43.30664,44.98395 102260,Verkhniye Achaluki,1884,IN,182,RU,43.34694,44.6975 102409,Voznesenskaya,1884,IN,182,RU,43.54379,44.74614 97680,Arshan’,1883,KL,182,RU,46.2732,44.22 98389,Elista,1883,KL,182,RU,46.30778,44.25583 98562,Gorodoviki,1883,KL,182,RU,46.13528,41.96556 98563,Gorodovikovsk,1883,KL,182,RU,46.08785,41.93353 98636,Iki-Burul,1883,KL,182,RU,45.82083,44.64722 98637,Iki-Burul’skiy Rayon,1883,KL,182,RU,45.83333,44.66667 98901,Kaspiyskiy,1883,KL,182,RU,45.39288,47.37073 99174,Komsomol’skiy,1883,KL,182,RU,45.33,46.0428 99773,Malyye Derbety,1883,KL,182,RU,47.95472,44.68083 100852,Priyutnoye,1883,KL,182,RU,46.10111,43.50722 101065,Sadovoye,1883,KL,182,RU,47.7772,44.5208 101123,Sarpinskiy Rayon,1883,KL,182,RU,47.83333,44.83333 101516,Sovetskoye,1883,KL,182,RU,47.30868,44.52162 101921,Troitskoye,1883,KL,182,RU,46.4206,44.2591 101936,Tsagan Aman,1883,KL,182,RU,47.5639,46.7218 102508,Yashalta,1883,KL,182,RU,46.3395,42.2762 102509,Yashaltinskiy Rayon,1883,KL,182,RU,46.25,42.5 102511,Yashkul’,1883,KL,182,RU,46.1711,45.3435 97857,Belomorsk,1841,KR,182,RU,64.52322,34.7668 98038,Borovoy,1841,KR,182,RU,64.6121,32.24968 98223,Chupa,1841,KR,182,RU,66.27001,33.05486 98405,Essoyla,1841,KR,182,RU,61.86983,33.14901 98492,Girvas,1841,KR,182,RU,62.47962,33.68482 98782,Kalevala,1841,KR,182,RU,65.19873,31.18999 98939,Kem’,1841,KR,182,RU,64.95546,34.57929 98965,Kharlu,1841,KR,182,RU,61.8,30.95 98978,Khelyulya,1841,KR,182,RU,61.749,30.66473 99181,Kondopoga,1841,KR,182,RU,62.20565,34.26138 99240,Kostomuksha,1841,KR,182,RU,64.571,30.57667 99515,Kvartsitnyy,1841,KR,182,RU,61.49321,35.02888 99538,Lakhdenpokh’ya,1841,KR,182,RU,61.51981,30.19917 99560,Ledmozero,1841,KR,182,RU,64.25444,32.02789 99671,Loukhi,1841,KR,182,RU,66.07616,33.04745 99706,Lyaskelya,1841,KR,182,RU,61.76322,31.00616 99814,Matrosy,1841,KR,182,RU,61.78042,33.81283 99848,Medvezh’yegorsk,1841,KR,182,RU,62.91713,34.45689 100023,Muyezerskiy,1841,KR,182,RU,63.95758,31.98738 100042,Nadvoitsy,1841,KR,182,RU,63.86667,34.31667 100424,Olonets,1841,KR,182,RU,60.98475,32.96976 100665,Petrozavodsk,1841,KR,182,RU,61.78491,34.34691 100674,Pindushi,1841,KR,182,RU,62.91519,34.57996 100688,Pitkyaranta,1841,KR,182,RU,61.5734,31.47915 100689,Pitkyarantskiy Rayon,1841,KR,182,RU,61.58333,31.5 100780,Porosozero,1841,KR,182,RU,62.71912,32.72703 100792,Povenets,1841,KR,182,RU,62.8487,34.82621 100837,Prionezhskiy Rayon,1841,KR,182,RU,61.5,34.33333 100876,Pryazha,1841,KR,182,RU,61.69258,33.62159 100888,Pudozh,1841,KR,182,RU,61.80415,36.5277 100908,Pyaozerskiy,1841,KR,182,RU,65.7687,31.08925 100920,Rabocheostrovsk,1841,KR,182,RU,64.98547,34.76611 101028,Ruskeala,1841,KR,182,RU,61.93333,30.58333 101080,Salmi,1841,KR,182,RU,61.36971,31.85185 101149,Segezha,1841,KR,182,RU,63.74147,34.32218 101250,Shal’skiy,1841,KR,182,RU,61.79698,36.0168 101294,Sheltozero,1841,KR,182,RU,61.36667,35.36667 101353,Shun’ga,1841,KR,182,RU,62.60263,34.9468 101361,Shuya,1841,KR,182,RU,61.95251,34.23271 101481,Sortaval’skiy Rayon,1841,KR,182,RU,61.75,30.66667 101480,Sortavala,1841,KR,182,RU,61.71233,30.70953 101656,Sukkozero,1841,KR,182,RU,63.17018,32.34436 101669,Suoyarvi,1841,KR,182,RU,62.08333,32.35 101670,Suoyarvskiy Rayon,1841,KR,182,RU,62.25,32.25 102419,Vyartsilya,1841,KR,182,RU,62.17645,30.69296 102485,Yanis’yarvi,1841,KR,182,RU,61.89127,30.94849 102484,Yanishpole,1841,KR,182,RU,62.11095,34.27013 102608,Yushkozero,1841,KR,182,RU,64.75162,32.10255 97478,Abakan,1877,KK,182,RU,53.71556,91.42917 97479,Abakan Gorod,1877,KK,182,RU,53.71667,91.43333 97484,Abaza,1877,KK,182,RU,52.655,90.09278 97602,Altayskiy Rayon,1877,KK,182,RU,53.5,91.5 97704,Askiz,1877,KK,182,RU,53.13194,90.52639 97880,Belyy Yar,1877,KK,182,RU,53.60389,91.39028 97917,Beya,1877,KK,182,RU,53.05333,90.91389 97941,Biskamzha,1877,KK,182,RU,53.44972,89.52722 97979,Bograd,1877,KK,182,RU,54.23444,90.83278 97980,Bogradskiy Rayon,1877,KK,182,RU,54.33333,91.0 98191,Cherëmushki,1877,KK,182,RU,52.85576,91.41672 98170,Chernogorsk,1877,KK,182,RU,53.82361,91.28417 99165,Kommunar,1877,KK,182,RU,54.34835,89.28297 99827,Mayna,1877,KK,182,RU,53.00639,91.48361 100730,Podsineye,1877,KK,182,RU,53.66583,91.53639 101139,Sayanogorsk,1877,KK,182,RU,53.0875,91.39972 101326,Shira,1877,KK,182,RU,54.49111,89.95306 101479,Sorsk,1877,KK,182,RU,54.00333,90.24667 101790,Tashtyp,1877,KK,182,RU,52.79542,89.89477 101963,Tuim,1877,KK,182,RU,54.33949,89.94586 102113,Ust’-Abakan,1877,KK,182,RU,53.83651,91.39077 102284,Vershina Tei,1877,KK,182,RU,53.26858,89.56008 97654,Ardatov,1898,MO,182,RU,54.84767,46.23878 97656,Ardatovskiy Rayon,1898,MO,182,RU,54.83333,46.25 97709,Atemar,1898,MO,182,RU,54.18097,45.40909 97717,Atyashevo,1898,MO,182,RU,54.56443,46.06905 97718,Atyashevskiy Rayon,1898,MO,182,RU,54.58333,46.08333 97719,Atyur’yevskiy Rayon,1898,MO,182,RU,54.33333,43.41667 97792,Barashevo,1898,MO,182,RU,54.5325,42.87917 98002,Bol’shebereznikovskiy Rayon,1898,MO,182,RU,54.16667,45.83333 98112,Chamzinka,1898,MO,182,RU,54.40188,45.78387 98113,Chamzinskiy Rayon,1898,MO,182,RU,54.41667,45.75 98675,Insar,1898,MO,182,RU,53.86531,44.37382 98676,Insarskiy Rayon,1898,MO,182,RU,53.83333,44.41667 98770,Kadoshkino,1898,MO,182,RU,54.0257,44.4191 98938,Kemlya,1898,MO,182,RU,54.6963,45.2424 99122,Kochkurovo,1898,MO,182,RU,54.03576,45.41845 99123,Kochkurovskiy Rayon,1898,MO,182,RU,54.0,45.41667 99256,Kovylkino,1898,MO,182,RU,54.03876,43.91385 99334,Krasnoslobodsk,1898,MO,182,RU,54.4253,43.78963 99335,Krasnoslobodskiy Rayon,1898,MO,182,RU,54.41667,43.75 99583,Lepley,1898,MO,182,RU,54.3092,42.8599 99685,Lukhovka,1898,MO,182,RU,54.14844,45.25728 99702,Lyambir’,1898,MO,182,RU,54.28172,45.12494 99701,Lyambirskiy Rayon,1898,MO,182,RU,54.33333,45.25 100133,Nikolayevka,1898,MO,182,RU,54.1451,45.1444 100558,Partsa,1898,MO,182,RU,54.3653,42.8617 100994,Romodanovo,1898,MO,182,RU,54.42753,45.32962 100995,Romodanovskiy Rayon,1898,MO,182,RU,54.41667,45.33333 101038,Ruzayevka,1898,MO,182,RU,54.06387,44.9509 101039,Ruzayevskiy Rayon,1898,MO,182,RU,54.08333,44.83333 101110,Saransk,1898,MO,182,RU,54.1838,45.1749 101327,Shiringushi,1898,MO,182,RU,53.84851,42.76759 101489,Sosnovka,1898,MO,182,RU,54.71161,43.29774 101593,Staroshaygovskiy Rayon,1898,MO,182,RU,54.33333,44.5 101794,Tatarskaya Pishlya,1898,MO,182,RU,54.06085,44.89978 101818,Temnikov,1898,MO,182,RU,54.63023,43.21483 101819,Temnikovskiy Rayon,1898,MO,182,RU,54.66667,43.16667 101823,Ten’gushevo,1898,MO,182,RU,54.76861,42.71889 101824,Ten’gushevskiy Rayon,1898,MO,182,RU,54.66667,42.75 101897,Torbeyevo,1898,MO,182,RU,54.07972,43.24732 101974,Turgenevo,1898,MO,182,RU,54.84555,46.32968 102018,Udarnyy,1898,MO,182,RU,54.3409,42.8611 102056,Umet,1898,MO,182,RU,54.11611,42.6975 102438,Vysha,1898,MO,182,RU,53.84768,42.37766 102516,Yavas,1898,MO,182,RU,54.4159,42.8491 102550,Yel’nikovskiy Rayon,1898,MO,182,RU,54.58333,43.83333 102770,Zubova Polyana,1898,MO,182,RU,54.0771,42.8372 102772,Zubovo-Polyanskiy Rayon,1898,MO,182,RU,54.0,42.75 102785,Zykovo,1898,MO,182,RU,54.06853,45.08633 97554,Alagir,1853,SE,182,RU,43.04222,44.22222 97555,Alagirskiy Rayon,1853,SE,182,RU,42.83333,44.08333 97658,Ardon,1853,SE,182,RU,43.1772,44.29702 97670,Arkhonskaya,1853,SE,182,RU,43.11,44.5125 97910,Beslan,1853,SE,182,RU,43.19217,44.54313 98163,Chermen,1853,SE,182,RU,43.15186,44.71231 98194,Chikola,1853,SE,182,RU,43.19055,43.92093 98230,Dachnoye,1853,SE,182,RU,43.08468,44.7358 98273,Digora,1853,SE,182,RU,43.15806,44.15694 98274,Digorskiy Rayon,1853,SE,182,RU,43.16667,44.08333 98493,Gizel’,1853,SE,182,RU,43.04,44.57083 98686,Irafskiy Rayon,1853,SE,182,RU,43.0,43.75 98807,Kambileyevskoye,1853,SE,182,RU,43.07858,44.75216 98875,Kardzhin,1853,SE,182,RU,43.27368,44.29075 99018,Khumalag,1853,SE,182,RU,43.24031,44.47521 99070,Kirovskiy Rayon,1853,SE,182,RU,43.33333,44.33333 99093,Kizlyar,1853,SE,182,RU,43.70379,44.5944 99905,Mikhaylovskoye,1853,SE,182,RU,43.09972,44.63164 99934,Mizur,1853,SE,182,RU,42.85376,44.06393 99984,Mozdok,1853,SE,182,RU,43.74359,44.65177 100194,Nogir,1853,SE,182,RU,43.08162,44.6365 100565,Pavlodol’skaya,1853,SE,182,RU,43.71923,44.47815 100804,Pravoberezhnyy Rayon,1853,SE,182,RU,43.16667,44.66667 100822,Prigorodnyy Rayon,1853,SE,182,RU,43.08333,44.83333 101667,Sunzha,1853,SE,182,RU,43.05862,44.82281 101779,Tarskoye,1853,SE,182,RU,42.96606,44.7754 101837,Terskaya,1853,SE,182,RU,43.72376,44.72442 101923,Troitskoye,1853,SE,182,RU,43.76219,44.68415 102252,Verkhniy Fiagdon,1853,SE,182,RU,42.83454,44.30604 102325,Vladikavkaz,1853,SE,182,RU,43.03667,44.66778 102754,Zmeyskaya,1853,SE,182,RU,43.33617,44.15733 97522,Agryz,1861,TA,182,RU,56.52034,52.99422 97523,Agryzskiy Rayon,1861,TA,182,RU,56.25,52.83333 97545,Aksubayevskiy Rayon,1861,TA,182,RU,54.83333,50.83333 97546,Aktanysh,1861,TA,182,RU,55.72156,54.08293 97547,Aktanyshskiy Rayon,1861,TA,182,RU,55.75,53.83333 97549,Aktyubinskiy,1861,TA,182,RU,54.81372,52.80559 97607,Al’keyevskiy Rayon,1861,TA,182,RU,54.91667,50.0 97608,Al’met’yevsk,1861,TA,182,RU,54.90442,52.3154 97609,Al’met’yevskiy Rayon,1861,TA,182,RU,54.91667,52.41667 97581,Alekseyevskiy Rayon,1861,TA,182,RU,55.16667,50.0 97582,Alekseyevskoye,1861,TA,182,RU,55.30706,50.11353 97647,Apastovo,1861,TA,182,RU,55.20293,48.51091 97648,Apastovskiy Rayon,1861,TA,182,RU,55.25,48.5 97681,Arsk,1861,TA,182,RU,56.09151,49.87783 97682,Arskiy Rayon,1861,TA,182,RU,56.16667,49.91667 97716,Atninskiy Rayon,1861,TA,182,RU,56.25,49.41667 97730,Aysha,1861,TA,182,RU,55.87035,48.63187 97733,Aznakayevskiy Rayon,1861,TA,182,RU,54.91667,53.0 97780,Baltasi,1861,TA,182,RU,56.3462,50.2062 97781,Baltasinskiy Rayon,1861,TA,182,RU,56.33333,50.25 97818,Bavlinskiy Rayon,1861,TA,182,RU,54.25,53.25 97819,Bavly,1861,TA,182,RU,54.39304,53.26023 97831,Bazarnyye Mataki,1861,TA,182,RU,54.88333,49.93333 97930,Bilyarsk,1861,TA,182,RU,54.98358,50.38671 97964,Bogatyye Saby,1861,TA,182,RU,56.0102,50.4483 97990,Bolgar,1861,TA,182,RU,54.95,49.06667 98067,Bugul’ma,1861,TA,182,RU,54.5378,52.7985 98068,Bugul’minskiy Rayon,1861,TA,182,RU,54.58333,52.91667 98071,Buinsk,1861,TA,182,RU,54.97119,48.29184 98072,Buinskiy Rayon,1861,TA,182,RU,55.0,48.25 98150,Cheremshan,1861,TA,182,RU,54.66667,51.5 98152,Cheremshanskiy Rayon,1861,TA,182,RU,54.75,51.5 98200,Chistopol’,1861,TA,182,RU,55.36311,50.64244 98201,Chistopol’skiy Rayon,1861,TA,182,RU,55.33333,50.75 98327,Drozhzhanovskiy Rayon,1861,TA,182,RU,54.75,47.58333 98372,Dzhalil’,1861,TA,182,RU,55.0239,52.7358 98548,Gorod Buinsk,1861,TA,182,RU,54.96694,48.285 98551,Gorod Kazan’,1861,TA,182,RU,55.75,49.13333 98553,Gorod Nizhnekamsk,1861,TA,182,RU,55.63333,51.81667 98555,Gorod Yelabuga,1861,TA,182,RU,55.75,52.06667 98556,Gorod Zainsk,1861,TA,182,RU,55.31667,52.05 98557,Gorod Zelënodol’sk,1861,TA,182,RU,55.83333,48.5 98827,Kamsko-Ust’inskiy Rayon,1861,TA,182,RU,55.16667,49.0 98852,Karabash,1861,TA,182,RU,54.693,52.58359 98918,Kaybitskiy Rayon,1861,TA,182,RU,55.41667,48.16667 98926,Kazan,1861,TA,182,RU,55.78874,49.12214 99425,Kukmor,1861,TA,182,RU,56.1855,50.8944 99426,Kukmorskiy Rayon,1861,TA,182,RU,56.25,50.66667 99496,Kuybyshevskiy Zaton,1861,TA,182,RU,55.1593,49.1701 99535,Laishevo,1861,TA,182,RU,55.40464,49.55037 99536,Laishevskiy Rayon,1861,TA,182,RU,55.5,49.58333 99566,Leninogorsk,1861,TA,182,RU,54.60256,52.46087 99567,Leninogorskiy Rayon,1861,TA,182,RU,54.58333,52.08333 99677,Lubyany,1861,TA,182,RU,56.0378,51.40001 99774,Mamadysh,1861,TA,182,RU,55.71525,51.40797 99775,Mamadyshskiy Rayon,1861,TA,182,RU,55.66667,51.25 99863,Mendeleyevsk,1861,TA,182,RU,55.90819,52.29047 99865,Mendeleyevskiy Rayon,1861,TA,182,RU,55.91667,52.33333 99866,Menzelinsk,1861,TA,182,RU,55.72706,53.10258 99867,Menzelinskiy Rayon,1861,TA,182,RU,55.75,53.0 100019,Muslyumovo,1861,TA,182,RU,55.30333,53.19472 100021,Muslyumovskiy Rayon,1861,TA,182,RU,55.25,53.25 100037,Naberezhnyye Chelny,1861,TA,182,RU,55.72545,52.41122 100155,Nizhnekamsk,1861,TA,182,RU,55.63657,51.82447 100156,Nizhnekamskiy Rayon,1861,TA,182,RU,55.41667,51.58333 100180,Nizhniye Vyazovyye,1861,TA,182,RU,55.79877,48.52476 100183,Nizhnyaya Maktama,1861,TA,182,RU,54.86356,52.4281 100300,Novosheshminsk,1861,TA,182,RU,55.06513,51.23376 100301,Novosheshminskiy Rayon,1861,TA,182,RU,55.08333,51.25 100370,Nurlat,1861,TA,182,RU,54.42766,50.80511 100371,Nurlatskiy rayon,1861,TA,182,RU,54.5,50.75 100488,Osinovo,1861,TA,182,RU,55.8809,48.881 100641,Pestrechinskiy Rayon,1861,TA,182,RU,55.75,49.75 100642,Pestretsy,1861,TA,182,RU,55.75313,49.65454 101032,Russkiy Aktash,1861,TA,182,RU,55.0384,52.1214 101050,Rybnaya Sloboda,1861,TA,182,RU,55.46129,50.1409 101051,Rybno-Slobodskiy Rayon,1861,TA,182,RU,55.58333,50.16667 101061,Sabinskiy Rayon,1861,TA,182,RU,56.0,50.5 101120,Sarmanovo,1861,TA,182,RU,55.25529,52.58907 101121,Sarmanovskiy Rayon,1861,TA,182,RU,55.25,52.58333 101295,Shemordan,1861,TA,182,RU,56.1856,50.3972 101344,Shugurovo,1861,TA,182,RU,54.50828,52.13265 101531,Spasskiy Rayon,1861,TA,182,RU,55.0,49.5 101600,Staroye Arakchino,1861,TA,182,RU,55.8041,48.9709 101601,Staroye Drozhzhanoye,1861,TA,182,RU,54.72657,47.56766 101621,Stolbishchi,1861,TA,182,RU,55.64679,49.21595 101711,Sviyazhsk,1861,TA,182,RU,55.77329,48.66051 101842,Tetyushi,1861,TA,182,RU,54.93821,48.83656 101843,Tetyushskiy Rayon,1861,TA,182,RU,55.0,48.75 101965,Tukayevskiy Rayon,1861,TA,182,RU,55.66667,52.25 102002,Tyulyachi,1861,TA,182,RU,55.89125,50.23992 102003,Tyulyachinskiy Rayon,1861,TA,182,RU,55.91667,50.25 102090,Urussu,1861,TA,182,RU,54.59812,53.46313 102198,Vasil’yevo,1861,TA,182,RU,55.83595,48.6582 102243,Verkhneuslonskiy Rayon,1861,TA,182,RU,55.66667,48.75 102259,Verkhniy Uslon,1861,TA,182,RU,55.7701,48.9823 102444,Vysokaya Gora,1861,TA,182,RU,55.91278,49.30167 102448,Vysokogorskiy Rayon,1861,TA,182,RU,55.9,49.31667 102532,Yelabuga,1861,TA,182,RU,55.76127,52.06493 102533,Yelabuzhskiy Rayon,1861,TA,182,RU,55.83333,51.83333 102610,Yutazinskiy Rayon,1861,TA,182,RU,54.66667,53.5 102631,Zainsk,1861,TA,182,RU,55.3195,52.06942 102632,Zainskiy Rayon,1861,TA,182,RU,55.3,52.0 102694,Zelenodol’skiy Rayon,1861,TA,182,RU,55.91667,48.75 102693,Zelenodolsk,1861,TA,182,RU,55.84376,48.51784 97542,Aksay,1837,ROS,182,RU,47.25838,39.86675 97598,Almaznyy,1837,ROS,182,RU,48.04476,40.04501 97622,Anastasiyevka,1837,ROS,182,RU,47.56072,38.52837 97731,Ayutinskiy,1837,ROS,182,RU,47.78228,40.14763 97734,Azov,1837,ROS,182,RU,47.10779,39.41648 97752,Bagayevskaya,1837,ROS,182,RU,47.32411,40.38791 97811,Bataysk,1837,ROS,182,RU,47.13975,39.75181 97842,Belaya Kalitva,1837,ROS,182,RU,48.18585,40.77424 97985,Bokovskaya,1837,ROS,182,RU,49.22899,41.8306 98101,Bystrogorskiy,1837,ROS,182,RU,48.20813,41.14097 98110,Chaltyr,1837,ROS,182,RU,47.28477,39.48232 98186,Chertkovo,1837,ROS,182,RU,49.38451,40.14723 98310,Donetsk,1837,ROS,182,RU,48.33962,39.95948 98311,Donskoy,1837,ROS,182,RU,47.41404,40.25742 98340,Dubovskoye,1837,ROS,182,RU,47.4142,42.7697 98489,Gigant,1837,ROS,182,RU,46.50665,41.34185 98501,Glubokiy,1837,ROS,182,RU,48.52716,40.33144 98538,Gornyatskiy,1837,ROS,182,RU,48.29649,40.92404 98540,Gornyy,1837,ROS,182,RU,47.81592,40.20363 98595,Grushevskaya,1837,ROS,182,RU,47.44056,39.95111 98608,Gukovo,1837,ROS,182,RU,48.06212,39.9355 98612,Gundorovskiy,1837,ROS,182,RU,46.78047,41.8968 98776,Kagal’nitskaya,1837,ROS,182,RU,46.88056,40.14657 98785,Kalinin,1837,ROS,182,RU,47.24678,39.51088 98818,Kamenolomni,1837,ROS,182,RU,47.66853,40.2051 98819,Kamensk-Shakhtinskiy,1837,ROS,182,RU,48.31779,40.25948 98890,Kashary,1837,ROS,182,RU,49.04001,41.00557 98927,Kazanskaya,1837,ROS,182,RU,49.79333,41.14667 99066,Kirovskaya,1837,ROS,182,RU,46.9748,40.0402 99134,Koksovyy,1837,ROS,182,RU,48.19742,40.64325 99189,Konstantinovsk,1837,ROS,182,RU,47.58278,41.09222 99284,Krasnaya Polyana,1837,ROS,182,RU,46.11293,41.50157 99293,Krasnoarmeyskiy,1837,ROS,182,RU,47.0114,42.2072 99341,Krasnovka,1837,ROS,182,RU,48.81769,40.09226 99344,Krasnoyarskaya,1837,ROS,182,RU,47.6501,42.0443 99373,Krasnyy Sulin,1837,ROS,182,RU,47.89221,40.07037 99385,Krasyukovskaya,1837,ROS,182,RU,47.55222,40.10885 99395,Krivyanskaya,1837,ROS,182,RU,47.39689,40.1668 99407,Krym,1837,ROS,182,RU,47.30025,39.51637 99431,Kuleshovka,1837,ROS,182,RU,47.07802,39.55794 99494,Kuybyshevo,1837,ROS,182,RU,47.81228,38.90731 99607,Letnik,1837,ROS,182,RU,46.011,41.2657 99625,Likhovskoy,1837,ROS,182,RU,48.15188,40.17925 99626,Likhoy,1837,ROS,182,RU,48.12662,40.20556 99806,Martynovskiy Rayon,1837,ROS,182,RU,47.24867,41.49792 99809,Masalovka,1837,ROS,182,RU,48.40372,40.26064 99815,Matveyev Kurgan,1837,ROS,182,RU,47.5645,38.86947 99832,Mayskiy,1837,ROS,182,RU,47.696,40.10259 99838,Mechetinskaya,1837,ROS,182,RU,46.7713,40.45597 99857,Melikhovskaya,1837,ROS,182,RU,47.48106,40.48669 99910,Millerovo,1837,ROS,182,RU,48.92265,40.39673 99912,Milyutinskaya,1837,ROS,182,RU,48.62788,41.66788 99913,Milyutinskiy Rayon,1837,ROS,182,RU,48.6655,41.74981 99966,Morozovsk,1837,ROS,182,RU,48.35502,41.82627 100082,Nedvigovka,1837,ROS,182,RU,47.26873,39.3488 100137,Nikolayevskaya,1837,ROS,182,RU,47.61391,41.5023 100226,Novobataysk,1837,ROS,182,RU,46.89806,39.78194 100228,Novobessergenovka,1837,ROS,182,RU,47.18465,38.84625 100235,Novocherkassk,1837,ROS,182,RU,47.42096,40.09185 100297,Novoshakhtinsk,1837,ROS,182,RU,47.76037,39.93335 100354,Novyy Yegorlyk,1837,ROS,182,RU,46.3927,41.87162 100384,Oblivskaya,1837,ROS,182,RU,48.53616,42.50138 100436,Ol’ginskaya,1837,ROS,182,RU,47.18794,39.94925 100473,Orlovskiy,1837,ROS,182,RU,46.87139,42.05917 100612,Persianovka,1837,ROS,182,RU,47.52972,39.41833 100631,Peschanokopskoye,1837,ROS,182,RU,46.19517,41.08143 100633,Peshkovo,1837,ROS,182,RU,47.01867,39.38845 100747,Pokrovskoye,1837,ROS,182,RU,47.4157,38.89706 100781,Port-Katon,1837,ROS,182,RU,46.879,38.756 100829,Primorka,1837,ROS,182,RU,47.28395,39.06408 100863,Proletarsk,1837,ROS,182,RU,46.70289,41.72717 100944,Rassvet,1837,ROS,182,RU,46.83333,40.75 100960,Remontnoye,1837,ROS,182,RU,46.5614,43.6501 100975,Rodionovo-Nesvetaiskoye,1837,ROS,182,RU,47.6,39.7 100976,Rodionovo-Nesvetayskaya,1837,ROS,182,RU,47.61033,39.71212 100990,Romanovskaya,1837,ROS,182,RU,47.5426,42.0285 101007,Rostov-na-Donu,1837,ROS,182,RU,47.23135,39.72328 101083,Sal’sk,1837,ROS,182,RU,46.4747,41.54114 101086,Samarskoye,1837,ROS,182,RU,46.937,39.6881 101088,Sambek,1837,ROS,182,RU,47.74306,39.83083 101097,Sandata,1837,ROS,182,RU,46.27081,41.75834 101163,Semikarakorsk,1837,ROS,182,RU,47.51675,40.80577 101241,Shakhty,1837,ROS,182,RU,47.70911,40.21443 101337,Sholokhovskiy,1837,ROS,182,RU,48.28071,41.04592 101374,Sinegorskiy,1837,ROS,182,RU,48.01389,40.84468 101378,Sinyavskoye,1837,ROS,182,RU,47.27703,39.27888 101438,Sokolovo-Kundryuchenskiy,1837,ROS,182,RU,47.83536,39.94711 101507,Sovetskaya,1837,ROS,182,RU,49.00912,42.12178 101565,Staraya Stanitsa,1837,ROS,182,RU,48.34579,40.29376 101575,Starocherkasskaya,1837,ROS,182,RU,47.24077,40.04186 101740,Taganrog,1837,ROS,182,RU,47.23617,38.89688 101756,Talovyy,1837,ROS,182,RU,47.80765,40.10943 101765,Tanais,1837,ROS,182,RU,47.26837,39.33425 101770,Tarasovskiy,1837,ROS,182,RU,48.72727,40.36267 101798,Tatsinskiy,1837,ROS,182,RU,48.19677,41.27558 101938,Tselina,1837,ROS,182,RU,46.53381,41.03284 101949,Tsimlyansk,1837,ROS,182,RU,47.64611,42.10194 102028,Uglegorskiy,1837,ROS,182,RU,48.24274,41.2531 102031,Uglerodovskiy,1837,ROS,182,RU,48.14558,40.06352 102118,Ust’-Donetskiy,1837,ROS,182,RU,47.64189,40.87182 102292,Vesëlyy,1837,ROS,182,RU,47.09338,40.7422 102289,Veshenskaya,1837,ROS,182,RU,49.63033,41.7334 102344,Volgodonsk,1837,ROS,182,RU,47.51361,42.15139 102524,Yegorlykskaya,1837,ROS,182,RU,46.56564,40.65621 102668,Zavetnoye,1837,ROS,182,RU,47.11944,43.89028 102707,Zernograd,1837,ROS,182,RU,46.84518,40.30834 102734,Zhirnov,1837,ROS,182,RU,48.17089,41.12608 102748,Zimovniki,1837,ROS,182,RU,47.1474,42.4721 102781,Zverevo,1837,ROS,182,RU,48.02108,40.12282 97564,Aleksandro-Nevskiy,1905,RYA,182,RU,53.4751,40.2095 97754,Bagramovo,1905,RYA,182,RU,54.72337,39.45186 98213,Chuchkovo,1905,RYA,182,RU,54.26931,41.44648 98623,Gus’-Zheleznyy,1905,RYA,182,RU,55.05811,41.16556 98747,Izhevskoye,1905,RYA,182,RU,54.557,40.8753 98769,Kadom,1905,RYA,182,RU,54.55917,42.4675 98897,Kasimov,1905,RYA,182,RU,54.94111,41.39528 98898,Kasimovskiy Rayon,1905,RYA,182,RU,54.91667,41.41667 99058,Kiritsy,1905,RYA,182,RU,54.2862,40.3572 99097,Klepikovskiy Rayon,1905,RYA,182,RU,55.08333,40.08333 99202,Korablino,1905,RYA,182,RU,53.91639,40.01333 99545,Lashma,1905,RYA,182,RU,54.9321,41.14379 99594,Lesnoy,1905,RYA,182,RU,54.2125,40.4713 99895,Mikhaylov,1905,RYA,182,RU,54.2298,39.0269 99911,Miloslavskoye,1905,RYA,182,RU,53.58152,39.43992 100011,Murmino,1905,RYA,182,RU,54.6043,40.0549 100266,Novomichurinsk,1905,RYA,182,RU,54.0384,39.7479 100409,Oktyabr’skiy,1905,RYA,182,RU,54.22675,38.89402 100563,Pavelets,1905,RYA,182,RU,53.78833,39.24601 100686,Pitelino,1905,RYA,182,RU,54.57768,41.81448 100761,Polyany,1905,RYA,182,RU,54.71801,39.82932 100869,Pronsk,1905,RYA,182,RU,54.1048,39.6092 100906,Putyatino,1905,RYA,182,RU,54.15998,41.1169 101045,Ryazan’,1905,RYA,182,RU,54.6269,39.6916 101044,Ryazanskiy Rayon,1905,RYA,182,RU,54.58333,39.75 101046,Ryazhsk,1905,RYA,182,RU,53.7038,40.1109 101052,Rybnovskiy Rayon,1905,RYA,182,RU,54.75,39.5 101053,Rybnoye,1905,RYA,182,RU,54.72774,39.51731 101103,Sapozhok,1905,RYA,182,RU,53.94194,40.68056 101105,Sarai,1905,RYA,182,RU,53.74577,41.02126 101128,Sasovo,1905,RYA,182,RU,54.35369,41.91986 101271,Shatsk,1905,RYA,182,RU,54.02576,41.71191 101315,Shilovo,1905,RYA,182,RU,54.3204,40.874 101389,Skopin,1905,RYA,182,RU,53.82486,39.55053 101466,Solotcha,1905,RYA,182,RU,54.7897,39.83336 101524,Spas-Klepiki,1905,RYA,182,RU,55.13472,40.17673 101529,Spassk-Ryazanskiy,1905,RYA,182,RU,54.404,40.3762 101603,Starozhilovo,1905,RYA,182,RU,54.2254,39.916 101727,Syntul,1905,RYA,182,RU,55.00327,41.29711 101967,Tuma,1905,RYA,182,RU,55.14798,40.55374 102042,Ukholovo,1905,RYA,182,RU,53.7929,40.4892 102305,Vilenka,1905,RYA,182,RU,54.2693,38.91663 102478,Yambirno,1905,RYA,182,RU,54.1231,42.0911 102537,Yelat’ma,1905,RYA,182,RU,54.9675,41.75083 102566,Yermish’,1905,RYA,182,RU,54.76778,42.27111 102635,Zakharovo,1905,RYA,182,RU,54.366,39.2792 102636,Zakharovskiy Rayon,1905,RYA,182,RU,54.41667,39.25 102653,Zarechnyy,1905,RYA,182,RU,53.7306,39.59437 97504,Admiralteisky,1879,SPE,182,RU,59.90839,30.28484 97570,Aleksandrovskaya,1879,SPE,182,RU,59.73083,30.33222 97724,Avtovo,1879,SPE,182,RU,59.87167,30.26583 97859,Beloostrov,1879,SPE,182,RU,60.15118,30.00151 98105,Centralniy,1879,SPE,182,RU,59.93111,30.36072 98231,Dachnoye,1879,SPE,182,RU,59.84167,30.25583 98438,Frunzenskiy Rayon,1879,SPE,182,RU,59.8719,30.37891 98523,Gorelovo,1879,SPE,182,RU,59.77234,30.13455 98579,Grazhdanka,1879,SPE,182,RU,60.03587,30.40518 99144,Kolomyagi,1879,SPE,182,RU,60.02427,30.28491 99147,Kolpino,1879,SPE,182,RU,59.75069,30.58856 99161,Komarovo,1879,SPE,182,RU,60.1866,29.80865 99162,Komendantsky aerodrom,1879,SPE,182,RU,60.00448,30.27523 99319,Krasnogvargeisky,1879,SPE,182,RU,59.97305,30.47607 99353,Krasnoye Selo,1879,SPE,182,RU,59.73833,30.08944 99397,Kronshtadt,1879,SPE,182,RU,59.99541,29.76668 99450,Kupchino,1879,SPE,182,RU,59.85278,30.35667 99470,Kurortnyy Rayon,1879,SPE,182,RU,60.17601,29.87389 99486,Kushelevka,1879,SPE,182,RU,59.99333,30.36389 99539,Lakhtinskiy,1879,SPE,182,RU,59.99521,30.14717 99614,Levashovo,1879,SPE,182,RU,60.10369,30.20683 99636,Lisiy Nos,1879,SPE,182,RU,60.01686,30.02008 99657,Lomonosov,1879,SPE,182,RU,59.90612,29.77253 99873,Metallostroy,1879,SPE,182,RU,59.80083,30.54778 99951,Molodezhnoye,1879,SPE,182,RU,60.19803,29.51597 100203,Novaya Derevnya,1879,SPE,182,RU,59.98748,30.28682 100392,Obukhovo,1879,SPE,182,RU,59.84389,30.45111 100433,Ol’gino,1879,SPE,182,RU,60.00928,30.11559 100517,Ozerki,1879,SPE,182,RU,60.03947,30.31128 100549,Pargolovo,1879,SPE,182,RU,60.0812,30.27626 100571,Pavlovsk,1879,SPE,182,RU,59.68333,30.43472 100637,Pesochnyy,1879,SPE,182,RU,60.12295,30.16404 100645,Peterhof,1879,SPE,182,RU,59.88333,29.9 100647,Petro-Slavyanka,1879,SPE,182,RU,59.80222,30.50694 100648,Petrodvorets,1879,SPE,182,RU,59.89565,29.80145 100649,Petrogradka,1879,SPE,182,RU,59.96567,30.31154 100769,Pontonnyy,1879,SPE,182,RU,59.78667,30.61528 100833,Primorskiy Rayon,1879,SPE,182,RU,59.99624,30.2409 100896,Pushkin,1879,SPE,182,RU,59.71417,30.39642 100951,Razliv,1879,SPE,182,RU,60.07919,29.97206 100961,Repino,1879,SPE,182,RU,60.17217,29.86908 101074,Saint Petersburg,1879,SPE,182,RU,59.93863,30.31413 101104,Sapërnyy,1879,SPE,182,RU,59.77611,30.66139 101199,Sestroretsk,1879,SPE,182,RU,60.09801,29.96378 101355,Shushary,1879,SPE,182,RU,59.80917,30.38167 101359,Shuvalovo,1879,SPE,182,RU,60.04903,30.2936 101455,Solnechnoye,1879,SPE,182,RU,60.15612,29.94753 101485,Sosnovaya Polyana,1879,SPE,182,RU,59.83528,30.14667 101486,Sosnovka,1879,SPE,182,RU,60.01667,30.35 101558,Staraya Derevnya,1879,SPE,182,RU,59.98834,30.24296 101624,Strelna,1879,SPE,182,RU,59.85189,30.03611 101774,Tarkhovka,1879,SPE,182,RU,60.06687,29.97435 101989,Tyarlevo,1879,SPE,182,RU,59.70777,30.44543 102077,Uritsk,1879,SPE,182,RU,59.83889,30.17528 102122,Ust’-Izhora,1879,SPE,182,RU,59.81194,30.58139 102196,Vasileostrovskiy Rayon,1879,SPE,182,RU,59.93971,30.26115 102201,Vasylevsky Ostrov,1879,SPE,182,RU,59.94091,30.25377 102695,Zelenogorsk,1879,SPE,182,RU,60.19968,29.70183 97491,Abyysky District,1848,SA,182,RU,68.33333,146.0 97561,Aldan,1848,SA,182,RU,58.61021,125.39613 97596,Allaikhovskiy Rayon,1848,SA,182,RU,71.0,148.0 97599,Almaznyy,1848,SA,182,RU,62.44917,114.32778 97612,Amga,1848,SA,182,RU,60.90009,131.97882 97617,Anabarskiy Rayon,1848,SA,182,RU,72.5,116.0 97728,Aykhal,1848,SA,182,RU,65.93381,111.4834 97809,Batagay,1848,SA,182,RU,67.65653,134.63962 97810,Batagay-Alyta,1848,SA,182,RU,67.79846,130.40119 97841,Belaya Gora,1848,SA,182,RU,68.53805,146.18583 97887,Berdigestyakh,1848,SA,182,RU,62.09842,126.69573 97898,Berkakit,1848,SA,182,RU,56.57456,124.77635 98032,Borogontsy,1848,SA,182,RU,62.6706,131.16344 98076,Bulunskiy Rayon,1848,SA,182,RU,71.0,126.0 98181,Chernyshevskiy,1848,SA,182,RU,63.01601,112.46901 98184,Cherskiy,1848,SA,182,RU,68.75325,161.33197 98209,Chokurdakh,1848,SA,182,RU,70.61897,147.8973 98220,Chul’man,1848,SA,182,RU,56.84735,124.90812 98225,Churapcha,1848,SA,182,RU,61.99858,132.43341 98264,Deputatsky,1848,SA,182,RU,69.30958,139.97571 98376,Dzhebariki-Khaya,1848,SA,182,RU,62.21084,135.84876 98408,Eveno-Bytantaysky National District,1848,SA,182,RU,67.82428,130.44617 98543,Gornyy Rayon,1848,SA,182,RU,62.33333,126.0 98842,Kangalassy,1848,SA,182,RU,62.34824,129.96471 98958,Khandyga,1848,SA,182,RU,62.65333,135.5667 98973,Khatassy,1848,SA,182,RU,61.90638,129.63302 99118,Kobyayskiy Rayon,1848,SA,182,RU,64.0,127.0 99522,Kysyl-Syr,1848,SA,182,RU,63.89482,122.7654 99552,Lebedinyy,1848,SA,182,RU,58.48844,125.49415 99572,Leninskiy,1848,SA,182,RU,58.57141,125.43918 99579,Lensk,1848,SA,182,RU,60.72528,114.92778 99731,Magan,1848,SA,182,RU,62.10746,129.53184 99799,Markha,1848,SA,182,RU,62.11454,129.74403 99836,Mayya,1848,SA,182,RU,61.73824,130.28161 99920,Mirninskiy Rayon,1848,SA,182,RU,62.5,113.88333 99921,Mirny,1848,SA,182,RU,62.53528,113.96111 99942,Mokhsogollokh,1848,SA,182,RU,61.39619,128.9381 99954,Momsky District,1848,SA,182,RU,66.0,144.0 100055,Namskiy Rayon,1848,SA,182,RU,63.0,129.41667 100056,Namtsy,1848,SA,182,RU,62.71959,129.66722 100110,Neryungri,1848,SA,182,RU,56.66637,124.63825 100126,Nezhdaninskoe,1848,SA,182,RU,62.50523,139.05104 100164,Nizhniy Bestyakh,1848,SA,182,RU,61.96202,129.91245 100169,Nizhniy Kuranakh,1848,SA,182,RU,58.8238,125.52278 100382,Nyurba,1848,SA,182,RU,63.28417,118.33194 100383,Nyurbinsky District,1848,SA,182,RU,63.25,118.41667 100422,Olenyok,1848,SA,182,RU,68.50472,112.4485 100423,Olenyoksky District,1848,SA,182,RU,68.32018,112.59338 100428,Olyokminsk,1848,SA,182,RU,60.3743,120.4203 100429,Olyokminsky District,1848,SA,182,RU,59.0,121.0 100515,Oymyakonskiy District,1848,SA,182,RU,63.0,144.0 100591,Peleduy,1848,SA,182,RU,59.62889,112.74056 100745,Pokrovsk,1848,SA,182,RU,61.47768,129.13699 101100,Sangar,1848,SA,182,RU,63.92301,127.47135 101127,Saskylakh,1848,SA,182,RU,71.96347,114.09199 101176,Serebryanyy Bor,1848,SA,182,RU,56.67076,124.83754 101458,Solnechnyy,1848,SA,182,RU,60.30217,137.55563 101543,Srednekolymsk,1848,SA,182,RU,67.45659,153.70246 101544,Srednekolymsky District,1848,SA,182,RU,68.0,153.0 101664,Suntar,1848,SA,182,RU,62.14444,117.63194 101665,Suntarskiy District,1848,SA,182,RU,63.0,115.0 101736,Tabaga,1848,SA,182,RU,61.85502,129.60022 101855,Tiksi,1848,SA,182,RU,71.69002,128.86467 101885,Tommot,1848,SA,182,RU,58.95717,126.29158 101886,Tomponskiy District,1848,SA,182,RU,62.75,135.41667 102017,Udachny,1848,SA,182,RU,66.42989,112.4021 102106,Ust-Aldansky District,1848,SA,182,RU,63.0,132.0 102107,Ust-Kuyga,1848,SA,182,RU,70.00208,135.54876 102108,Ust-Maya,1848,SA,182,RU,60.41553,134.54405 102109,Ust-Nera,1848,SA,182,RU,64.56968,143.237 102142,Ust’-Yanskiy Rayon,1848,SA,182,RU,69.33333,139.91667 102239,Verkhnekolymsky District,1848,SA,182,RU,65.75,150.83333 102244,Verkhnevilyuysk,1848,SA,182,RU,63.44578,120.30739 102245,Verkhnevilyuysky District,1848,SA,182,RU,63.0,120.5 102281,Verkhoyansk,1848,SA,182,RU,67.55387,133.38976 102282,Verkhoyansky District,1848,SA,182,RU,68.0,136.0 102309,Vilyuysk,1848,SA,182,RU,63.74683,121.63339 102310,Vilyuyskiy Rayon,1848,SA,182,RU,64.0,123.0 102311,Vilyuysky District,1848,SA,182,RU,63.76398,121.65436 102321,Vitim,1848,SA,182,RU,59.44326,112.56993 102473,Yakutsk,1848,SA,182,RU,61.97382,129.75403 102582,Ytyk-Kyuyël’,1848,SA,182,RU,62.36119,133.56044 102714,Zhatay,1848,SA,182,RU,62.15975,129.82843 102727,Zhigansk,1848,SA,182,RU,66.76601,123.37418 102728,Zhigansky District,1848,SA,182,RU,66.75,123.25 102787,Zyryanka,1848,SA,182,RU,65.73489,150.89429 97569,Aleksandrovsk-Sakhalinskiy,1875,SAK,182,RU,50.89926,142.16215 97632,Aniva,1875,SAK,182,RU,46.71492,142.52866 98047,Boshnyakovo,1875,SAK,182,RU,49.64572,142.17047 98097,Bykov,1875,SAK,182,RU,47.32099,142.56226 98136,Chekhov,1875,SAK,182,RU,47.44984,141.99064 98303,Dolinsk,1875,SAK,182,RU,47.32946,142.79291 98459,Gastello,1875,SAK,182,RU,49.10056,142.95917 98535,Gornozavodsk,1875,SAK,182,RU,46.55984,141.84358 98996,Kholmsk,1875,SAK,182,RU,47.04737,142.05048 99218,Korsakov,1875,SAK,182,RU,46.6342,142.77722 99304,Krasnogorsk,1875,SAK,182,RU,48.41728,142.08686 99463,Kuril’sk,1875,SAK,182,RU,45.22686,147.87767 99462,Kurilsky District,1875,SAK,182,RU,46.0,150.0 99581,Leonidovo,1875,SAK,182,RU,49.28619,142.86975 99741,Makarov,1875,SAK,182,RU,48.62698,142.77999 99886,Mgachi,1875,SAK,182,RU,51.04834,142.26821 100116,Nevel’sk,1875,SAK,182,RU,46.67902,141.85629 100195,Nogliki,1875,SAK,182,RU,51.79917,143.13871 100401,Okha,1875,SAK,182,RU,53.58991,142.95313 100503,Otrada,1875,SAK,182,RU,44.06832,145.86454 100779,Poronaysk,1875,SAK,182,RU,49.22188,143.09694 100801,Pravda,1875,SAK,182,RU,46.93972,142.00426 101212,Severo-Kuril’sk,1875,SAK,182,RU,50.67531,156.12695 101240,Shakhtersk,1875,SAK,182,RU,49.17175,142.1364 101286,Shebunino,1875,SAK,182,RU,46.4301,141.85699 101312,Shikotan,1875,SAK,182,RU,43.79916,146.72164 101373,Sinegorsk,1875,SAK,182,RU,47.17278,142.51577 101413,Smirnykh,1875,SAK,182,RU,49.74596,142.83716 101436,Sokol,1875,SAK,182,RU,47.24464,142.75167 101882,Tomari,1875,SAK,182,RU,47.76482,142.07106 101925,Troitskoye,1875,SAK,182,RU,46.92493,142.64532 101970,Tungor,1875,SAK,182,RU,53.39121,142.95755 101992,Tymovskoye,1875,SAK,182,RU,50.84925,142.6652 102027,Uglegorsk,1875,SAK,182,RU,49.08047,142.06449 102029,Uglegorskiy Rayon,1875,SAK,182,RU,49.08333,142.08333 102033,Uglezavodsk,1875,SAK,182,RU,47.32332,142.63317 102175,Vakhrushev,1875,SAK,182,RU,48.99035,142.95303 102401,Vostok,1875,SAK,182,RU,48.97715,142.91556 102457,Yablochnyy,1875,SAK,182,RU,47.152,142.05678 102613,Yuzhno-Kurilsk,1875,SAK,182,RU,44.02734,145.86146 102614,Yuzhno-Kurilsky District,1875,SAK,182,RU,44.59242,146.77048 102615,Yuzhno-Sakhalinsk,1875,SAK,182,RU,46.95407,142.73603 97761,Bakhilovo,1862,SAM,182,RU,53.4011,49.636 97772,Balasheyka,1862,SAM,182,RU,53.2841,48.0851 97902,Berëza,1862,SAM,182,RU,53.51833,50.13967 97918,Bezenchuk,1862,SAM,182,RU,52.982,49.4333 97962,Bogatoye,1862,SAM,182,RU,53.0601,51.3325 97963,Bogatyr’,1862,SAM,182,RU,53.4298,49.9455 98043,Borskoye,1862,SAM,182,RU,53.03333,51.71667 98115,Chapayevsk,1862,SAM,182,RU,52.9771,49.7086 98139,Chelno-Vershiny,1862,SAM,182,RU,54.4148,51.08594 98341,Dubovyy Umët,1862,SAM,182,RU,52.97629,50.28569 98475,Georgiyevka,1862,SAM,182,RU,53.27438,50.99848 98697,Isakly,1862,SAM,182,RU,54.13333,51.53333 98829,Kamyshla,1862,SAM,182,RU,54.11693,52.14262 99015,Khryashchevka,1862,SAM,182,RU,53.8119,49.0916 99028,Khvorostyanka,1862,SAM,182,RU,52.6096,48.9597 99045,Kinel’,1862,SAM,182,RU,53.22571,50.62907 99046,Kinel’-Cherkassy,1862,SAM,182,RU,53.4706,51.47431 99047,Kinel’skiy Rayon,1862,SAM,182,RU,53.16667,50.75 99108,Klyavlino,1862,SAM,182,RU,54.26491,52.02674 99229,Koshki,1862,SAM,182,RU,54.20914,50.46767 99296,Krasnoarmeyskoye,1862,SAM,182,RU,52.71994,50.03122 99346,Krasnoyarskiy Rayon,1862,SAM,182,RU,53.5,50.5 99376,Krasnyy Yar,1862,SAM,182,RU,53.49988,50.39312 99400,Krotovka,1862,SAM,182,RU,53.2858,51.1686 99479,Kurumoch,1862,SAM,182,RU,53.48963,50.03748 99835,Mayskoye,1862,SAM,182,RU,52.27244,50.03383 99879,Mezhdurechensk,1862,SAM,182,RU,53.2665,49.1116 99923,Mirnyy,1862,SAM,182,RU,53.50642,50.27658 100084,Neftegorsk,1862,SAM,182,RU,52.802,51.166 100085,Neftegorskiy Rayon,1862,SAM,182,RU,52.83333,50.83333 100256,Novokuybyshevsk,1862,SAM,182,RU,53.0959,49.9462 100295,Novosemeykino,1862,SAM,182,RU,53.37056,50.35428 100340,Novyy Buyan,1862,SAM,182,RU,53.68611,50.04691 100390,Obsharovka,1862,SAM,182,RU,53.125,48.85306 100408,Oktyabr’sk,1862,SAM,182,RU,53.16722,48.70056 100486,Osinki,1862,SAM,182,RU,52.8432,49.5132 100508,Otradnyy,1862,SAM,182,RU,53.37596,51.3452 100607,Perevoloki,1862,SAM,182,RU,53.2458,49.1793 100640,Pestravka,1862,SAM,182,RU,52.3982,49.961 100646,Petra-Dubrava,1862,SAM,182,RU,53.29613,50.36554 100731,Podsolnechnoye,1862,SAM,182,RU,53.15,52.0191 100733,Podstepki,1862,SAM,182,RU,53.5151,49.1355 100740,Pokhvistnevo,1862,SAM,182,RU,53.65237,52.12738 100793,Povolzhskiy,1862,SAM,182,RU,53.5854,49.7629 100817,Pribrezhnyy,1862,SAM,182,RU,53.48662,49.85836 100996,Roschinskiy,1862,SAM,182,RU,53.05111,50.49667 101015,Rozhdestveno,1862,SAM,182,RU,53.23745,50.05971 101085,Samara,1862,SAM,182,RU,53.20007,50.15 101187,Sernovodsk,1862,SAM,182,RU,53.92293,51.25704 101302,Shentala,1862,SAM,182,RU,54.45,51.48333 101309,Shigony,1862,SAM,182,RU,53.3875,48.6777 101421,Smyshlyayevka,1862,SAM,182,RU,53.23913,50.39072 101536,Spiridonovka,1862,SAM,182,RU,53.09248,50.64621 101653,Sukhodol,1862,SAM,182,RU,53.90063,51.2117 101675,Surgut,1862,SAM,182,RU,53.92498,51.20348 101735,Syzran’,1862,SAM,182,RU,53.1585,48.4681 101881,Tol’yatti,1862,SAM,182,RU,53.5303,49.3461 102150,Utevka,1862,SAM,182,RU,52.9035,50.9495 102191,Varlamovo,1862,SAM,182,RU,53.1897,48.4226 102370,Volzhskiy,1862,SAM,182,RU,53.43058,50.119 102546,Yelkhovka,1862,SAM,182,RU,53.86668,50.28319 102729,Zhigulevsk,1862,SAM,182,RU,53.39972,49.49528 102730,Zhiguli,1862,SAM,182,RU,53.3579,49.301 102767,Zol’noye,1862,SAM,182,RU,53.4421,49.7978 97566,Aleksandrov Gay,1887,SAR,182,RU,50.14704,48.57037 97576,Alekseyevka,1887,SAR,182,RU,52.30583,48.02611 97663,Arkadak,1887,SAR,182,RU,51.93261,43.49779 97712,Atkarsk,1887,SAR,182,RU,51.87185,45.00775 97713,Atkarskiy Rayon,1887,SAR,182,RU,51.91667,45.0 97771,Balakovo,1887,SAR,182,RU,52.02782,47.8007 97775,Balashov,1887,SAR,182,RU,51.5502,43.1667 97782,Baltay,1887,SAR,182,RU,52.46525,46.63081 97783,Baltayskiy Rayon,1887,SAR,182,RU,52.5,46.66667 97828,Bazarno-Karabulakskiy Rayon,1887,SAR,182,RU,52.33333,46.33333 97829,Bazarnyy Karabulak,1887,SAR,182,RU,52.26833,46.41444 98009,Bol’shoy Karay,1887,SAR,182,RU,51.60542,42.69006 98159,Cherkasskoye,1887,SAR,182,RU,52.42895,47.21048 98267,Dergachi,1887,SAR,182,RU,51.2328,48.7659 98350,Dukhovnitskoye,1887,SAR,182,RU,52.4828,48.2137 98398,Engel’s,1887,SAR,182,RU,51.48389,46.10528 98399,Engel’sskiy Rayon,1887,SAR,182,RU,51.5,46.16667 98539,Gornyy,1887,SAR,182,RU,51.7578,48.5413 98737,Ivanteyevka,1887,SAR,182,RU,52.2667,49.1055 98788,Kalininsk,1887,SAR,182,RU,51.5,44.4758 98821,Kamenskiy,1887,SAR,182,RU,50.88547,45.48801 99023,Khvalynsk,1887,SAR,182,RU,52.4906,48.1058 99024,Khvalynskiy Rayon,1887,SAR,182,RU,52.5,47.91667 99027,Khvatovka,1887,SAR,182,RU,52.35236,46.56282 99210,Kormëzhka,1887,SAR,182,RU,51.9005,48.0163 99290,Krasnoarmeysk,1887,SAR,182,RU,51.02389,45.69694 99367,Krasnyy Kut,1887,SAR,182,RU,50.95,46.96667 99369,Krasnyy Oktyabr’,1887,SAR,182,RU,51.54018,45.70382 99375,Krasnyy Yar,1887,SAR,182,RU,51.62917,46.42167 99709,Lysyye Gory,1887,SAR,182,RU,51.55063,44.84144 99801,Marks,1887,SAR,182,RU,51.71111,46.74861 99802,Marksovskiy Rayon,1887,SAR,182,RU,51.66667,46.83333 99943,Mokrous,1887,SAR,182,RU,51.2373,47.5137 100325,Novouzensk,1887,SAR,182,RU,50.45917,48.14306 100357,Novyye Burasy,1887,SAR,182,RU,52.13236,46.07144 100600,Perelyub,1887,SAR,182,RU,51.86292,50.35412 100658,Petrovsk,1887,SAR,182,RU,52.30639,45.39167 100676,Pinerovka,1887,SAR,182,RU,51.562,43.0689 100687,Piterka,1887,SAR,182,RU,50.6803,47.44539 100721,Podlesnoye,1887,SAR,182,RU,51.8161,47.009 100847,Privolzhskiy,1887,SAR,182,RU,51.40944,46.04833 100851,Privolzhskoye,1887,SAR,182,RU,51.69194,46.72361 100889,Pugachev,1887,SAR,182,RU,52.01333,48.8025 100897,Pushkino,1887,SAR,182,RU,51.235,46.97417 100962,Repnoye,1887,SAR,182,RU,51.5921,43.1861 100986,Romanovka,1887,SAR,182,RU,51.74427,42.7527 101011,Rovnoye,1887,SAR,182,RU,50.7765,46.05085 101017,Rtishchevo,1887,SAR,182,RU,52.26041,43.78745 101090,Samoylovka,1887,SAR,182,RU,51.184,43.7081 101114,Saratov,1887,SAR,182,RU,51.54056,46.00861 101116,Saratovskiy Rayon,1887,SAR,182,RU,51.75,46.16667 101172,Sennoy,1887,SAR,182,RU,52.1509,46.96309 101310,Shikhany,1887,SAR,182,RU,52.11776,47.1986 101348,Shumeyka,1887,SAR,182,RU,51.56361,46.24833 101376,Sinodskoye,1887,SAR,182,RU,51.9918,46.67009 101440,Sokolovyy,1887,SAR,182,RU,51.56857,45.83312 101517,Sovetskoye,1887,SAR,182,RU,51.44255,46.7424 101611,Staryye Ozinki,1887,SAR,182,RU,51.1786,49.6769 101616,Stepnoye,1887,SAR,182,RU,51.37972,46.84917 101706,Svetlyy,1887,SAR,182,RU,51.6737,45.63054 101713,Svobodnyy,1887,SAR,182,RU,52.33039,46.37122 101797,Tatishchevo,1887,SAR,182,RU,51.67028,45.59528 101836,Tersa,1887,SAR,182,RU,52.08671,47.53936 101979,Turki,1887,SAR,182,RU,51.98703,43.2731 102374,Vol’sk,1887,SAR,182,RU,52.04541,47.37993 102375,Vol’skiy Rayon,1887,SAR,182,RU,52.08333,47.25 102391,Voskresenskiy Rayon,1887,SAR,182,RU,51.84139,46.9025 102392,Voskresenskoye,1887,SAR,182,RU,51.82478,46.93508 102529,Yekaterinovka,1887,SAR,182,RU,52.05083,44.34515 102548,Yelshanka,1887,SAR,182,RU,51.81389,46.39972 102572,Yershov,1887,SAR,182,RU,51.3513,48.2766 105829,Afanas’yeva,1912,UA-40,182,RU,54.63958,100.61755 105830,Alarskiy Rayon,1912,UA-40,182,RU,53.33333,103.0 105831,Alekseyevskaya,1912,UA-40,182,RU,57.85,108.4 105832,Algatuy,1912,UA-40,182,RU,54.4009,100.255 105833,Alzamay,1912,UA-40,182,RU,55.5562,98.6644 105834,Andreyevka,1912,UA-40,182,RU,44.81663,33.56313 105835,Angarsk,1912,UA-40,182,RU,52.53667,103.88639 105836,Angarskiy Rayon,1912,UA-40,182,RU,52.33333,103.66667 105837,Atagay,1912,UA-40,182,RU,55.1033,99.3875 105838,Badar,1912,UA-40,182,RU,54.39948,100.59436 105839,Baklashi,1912,UA-40,182,RU,52.22556,104.04861 105840,Balagansk,1912,UA-40,182,RU,54.0057,103.05234 105841,Balaganskiy Rayon,1912,UA-40,182,RU,54.66667,102.83333 105842,Balakhninskiy,1912,UA-40,182,RU,58.01056,114.27694 105843,Balaklava,1912,UA-40,182,RU,44.51118,33.59942 105844,Balaklava District,1912,UA-40,182,RU,44.50581,33.67035 105845,Bayanday,1912,UA-40,182,RU,53.06611,105.51389 105846,Bayandayevskiy Rayon,1912,UA-40,182,RU,53.08333,105.58333 105847,Baykal’sk,1912,UA-40,182,RU,51.5151,104.1402 105848,Bereznyaki,1912,UA-40,182,RU,56.9366,103.5851 105849,Biryusinsk,1912,UA-40,182,RU,55.9634,97.8235 105850,Bodaybo,1912,UA-40,182,RU,57.85056,114.19333 105851,Bokhan,1912,UA-40,182,RU,53.153,103.7714 105852,Bokhanskiy Rayon,1912,UA-40,182,RU,53.16667,104.0 105853,Bol’shaya Rechka,1912,UA-40,182,RU,51.9536,104.7335 105854,Bratsk,1912,UA-40,182,RU,56.1325,101.61417 105855,Bratskiy Rayon,1912,UA-40,182,RU,56.0,102.0 105856,Budagovo,1912,UA-40,182,RU,54.6255,100.13109 105857,Cheremkhovo,1912,UA-40,182,RU,53.15611,103.0675 105858,Cheremkhovskiy Rayon,1912,UA-40,182,RU,52.66667,102.33333 105859,Chunskiy,1912,UA-40,182,RU,56.0815,99.6342 105860,Dzerzhinsk,1912,UA-40,182,RU,52.28028,104.38694 105861,Ekhirit-Bulagatskiy Rayon,1912,UA-40,182,RU,53.0,104.83333 105862,Frontovoye,1912,UA-40,182,RU,44.66737,33.73841 105863,Gadaley,1912,UA-40,182,RU,54.40318,100.74093 105864,Guran,1912,UA-40,182,RU,54.76127,100.64399 105865,Haharinskyi District,1912,UA-40,182,RU,44.59217,33.43925 105866,Ikey,1912,UA-40,182,RU,54.19194,100.08111 105867,Ilir,1912,UA-40,182,RU,55.22473,100.68498 105868,Inkerman,1912,UA-40,182,RU,44.61391,33.6098 105869,Irkutsk,1912,UA-40,182,RU,52.29778,104.29639 105870,Irkutskiy Rayon,1912,UA-40,182,RU,52.33333,104.66667 105871,Kacha,1912,UA-40,182,RU,44.77635,33.54387 105872,Kachug,1912,UA-40,182,RU,53.96056,105.88167 105873,Kachugskiy Rayon,1912,UA-40,182,RU,54.0,106.5 105874,Katangskiy Rayon,1912,UA-40,182,RU,61.0,108.0 105875,Kazachinsko-Lenskiy Rayon,1912,UA-40,182,RU,56.0,108.0 105876,Kazachinskoye,1912,UA-40,182,RU,56.26974,107.57624 105877,Khomutovo,1912,UA-40,182,RU,52.46583,104.4025 105878,Khrebtovaya,1912,UA-40,182,RU,56.7032,104.2494 105879,Khudoyelanskoye,1912,UA-40,182,RU,54.70375,99.63042 105880,Khuzhir,1912,UA-40,182,RU,53.19389,107.33972 105881,Kimil’tey,1912,UA-40,182,RU,54.1337,101.9811 105882,Kirensk,1912,UA-40,182,RU,57.78528,108.11194 105883,Kirenskiy Rayon,1912,UA-40,182,RU,58.0,109.25 105884,Kitoy,1912,UA-40,182,RU,52.6,103.9 105885,Kotik,1912,UA-40,182,RU,54.65057,100.45395 105886,Kropotkin,1912,UA-40,182,RU,58.50944,115.32167 105887,Kultuk,1912,UA-40,182,RU,51.72083,103.69556 105888,Kutulik,1912,UA-40,182,RU,53.3508,102.78389 105889,Kuytun,1912,UA-40,182,RU,54.34241,101.50917 105890,Kuytunskiy Rayon,1912,UA-40,182,RU,54.5,101.66667 105891,Kvitok,1912,UA-40,182,RU,56.0724,98.4813 105892,Lenin District,1912,UA-40,182,RU,44.6,33.53333 105893,Lesogorsk,1912,UA-40,182,RU,56.0458,99.5136 105894,Listvyanka,1912,UA-40,182,RU,51.8535,104.8693 105895,Magistral’nyy,1912,UA-40,182,RU,56.17148,107.44166 105896,Mama,1912,UA-40,182,RU,58.31056,112.89861 105897,Mamakan,1912,UA-40,182,RU,57.81611,114.00278 105898,Mamsko-Chuyskiy Rayon,1912,UA-40,182,RU,58.0,112.5 105899,Manzurka,1912,UA-40,182,RU,53.48556,106.05444 105900,Markova,1912,UA-40,182,RU,52.20889,104.21083 105901,Markovo,1912,UA-40,182,RU,57.32056,107.08806 105902,Meget,1912,UA-40,182,RU,52.415,104.04944 105903,Mishelevka,1912,UA-40,182,RU,52.8575,103.17194 105904,Mugun,1912,UA-40,182,RU,54.47143,100.24831 105905,Nakhimovskiy rayon,1912,UA-40,182,RU,44.69502,33.58092 105906,Nizhneilimskiy Rayon,1912,UA-40,182,RU,57.0,103.5 105907,Nizhneudinsk,1912,UA-40,182,RU,54.9076,99.0276 105908,Nizhneudinskiy Rayon,1912,UA-40,182,RU,54.33333,98.5 105909,Novaya Igirma,1912,UA-40,182,RU,57.1334,103.9112 105910,Novobiryusinskiy,1912,UA-40,182,RU,56.9578,97.7076 105911,Novonukutskiy,1912,UA-40,182,RU,53.7,102.7117 105912,Ol’khonskiy Rayon,1912,UA-40,182,RU,53.0,106.5 105913,Orlinoye,1912,UA-40,182,RU,44.44685,33.77588 105914,Osa,1912,UA-40,182,RU,53.38722,103.87694 105915,Oyëk,1912,UA-40,182,RU,52.58611,104.45556 105916,Pad’ Mel’nichnaya,1912,UA-40,182,RU,52.16,104.38 105917,Perfilovo,1912,UA-40,182,RU,54.41083,100.48454 105918,Pivovarikha,1912,UA-40,182,RU,52.27056,104.44583 105919,Pokosnoye,1912,UA-40,182,RU,55.52583,101.05361 105920,Polyushko,1912,UA-40,182,RU,44.74219,33.58913 105921,Rudnogorsk,1912,UA-40,182,RU,57.2639,103.7519 105922,Sakharnaya Golovka,1912,UA-40,182,RU,44.58362,33.64383 105923,Sayansk,1912,UA-40,182,RU,54.1088,102.1648 105924,Sevastopol,1912,UA-40,182,RU,44.58883,33.5224 105925,Shamanka,1912,UA-40,182,RU,52.06667,103.82028 105926,Sheberta,1912,UA-40,182,RU,54.64178,99.89209 105927,Shelekhov,1912,UA-40,182,RU,52.21389,104.1 105928,Sheragul,1912,UA-40,182,RU,54.46243,100.90994 105929,Shestakovo,1912,UA-40,182,RU,56.4915,103.96 105930,Shitkino,1912,UA-40,182,RU,56.3703,98.3543 105931,Shturmovoye,1912,UA-40,182,RU,44.56767,33.62245 105932,Shumskiy,1912,UA-40,182,RU,54.8318,99.1328 105933,Slyudyanka,1912,UA-40,182,RU,51.65944,103.70611 105934,Slyudyanskiy Rayon,1912,UA-40,182,RU,51.5,104.0 105935,Smolenshchina,1912,UA-40,182,RU,52.25528,104.12806 105936,Solnechniy,1912,UA-40,182,RU,44.78677,33.61786 105937,Sredniy,1912,UA-40,182,RU,52.8884,103.4904 105938,Svirsk,1912,UA-40,182,RU,53.08583,103.3325 105939,Tayshet,1912,UA-40,182,RU,55.9342,98.0044 105940,Tayshetskiy Rayon,1912,UA-40,182,RU,56.0,98.0 105941,Tayturka,1912,UA-40,182,RU,52.86917,103.46083 105942,Tel’ma,1912,UA-40,182,RU,52.6981,103.7138 105943,Ternovka,1912,UA-40,182,RU,44.57922,33.75105 105944,Tulun,1912,UA-40,182,RU,54.56358,100.58143 105945,Tulunskiy Rayon,1912,UA-40,182,RU,54.16667,100.33333 105946,Tulyushka,1912,UA-40,182,RU,54.45851,101.17054 105947,Tyret’ Pervaya,1912,UA-40,182,RU,53.67028,102.31056 105948,Uk,1912,UA-40,182,RU,55.079,98.8586 105949,Urik,1912,UA-40,182,RU,52.46051,104.24016 105950,Usol’skiy Rayon,1912,UA-40,182,RU,52.5,103.25 105951,Usol’ye-Sibirskoye,1912,UA-40,182,RU,52.75194,103.64528 105952,Ust’-Ilimsk,1912,UA-40,182,RU,58.00056,102.66194 105953,Ust’-Kut,1912,UA-40,182,RU,56.7938,105.7672 105954,Ust’-Kutskiy Rayon,1912,UA-40,182,RU,57.0,106.0 105955,Ust’-Ordynskiy,1912,UA-40,182,RU,52.805,104.75083 105956,Ust’-Uda,1912,UA-40,182,RU,54.1742,103.0304 105957,Ust’-Udinskiy Rayon,1912,UA-40,182,RU,55.0,103.66667 105958,Verkhnesadovoye,1912,UA-40,182,RU,44.68932,33.70207 105959,Vidim,1912,UA-40,182,RU,56.4088,103.1106 105960,Vikhorevka,1912,UA-40,182,RU,56.12128,101.17767 105961,Voznesenskiy,1912,UA-40,182,RU,54.8968,99.1031 105962,Yantal’,1912,UA-40,182,RU,56.8471,105.2542 105963,Yedogon,1912,UA-40,182,RU,54.2549,100.2385 105964,Yelantsy,1912,UA-40,182,RU,52.80286,106.40466 105965,Yerbogachen,1912,UA-40,182,RU,61.28016,108.01535 105966,Yurty,1912,UA-40,182,RU,56.0498,97.6348 105967,Zalari,1912,UA-40,182,RU,53.5584,102.5065 105968,Zalarinskiy Rayon,1912,UA-40,182,RU,53.16667,101.5 105969,Zheleznodorozhnyy,1912,UA-40,182,RU,57.90525,102.77838 105970,Zheleznogorsk-Ilimskiy,1912,UA-40,182,RU,56.5768,104.1217 105971,Zhigalovo,1912,UA-40,182,RU,54.81061,105.15808 105972,Zhigalovskiy Rayon,1912,UA-40,182,RU,55.0,105.5 105973,Zima,1912,UA-40,182,RU,53.9202,102.0442 105974,Ziminskiy Rayon,1912,UA-40,182,RU,55.83333,101.66667 105975,Zvëzdnyy,1912,UA-40,182,RU,56.7492,106.4799 98259,Demidov,1885,SMO,182,RU,55.27063,31.51497 98269,Desnogorsk,1885,SMO,182,RU,54.15077,33.28151 98319,Dorogobuzh,1885,SMO,182,RU,54.915,33.29722 98351,Dukhovshchina,1885,SMO,182,RU,55.1919,32.4111 98446,Gagarin,1885,SMO,182,RU,55.55291,34.99537 98499,Glinka,1885,SMO,182,RU,54.64043,32.87811 98511,Golynki,1885,SMO,182,RU,54.86964,31.38609 98874,Kardymovo,1885,SMO,182,RU,54.89016,32.43111 98910,Katyn,1885,SMO,182,RU,54.77455,31.69041 98983,Khislavichi,1885,SMO,182,RU,54.18714,32.15817 98993,Kholm-Zhirkovskiy,1885,SMO,182,RU,55.51889,33.47306 99956,Monastyrshchina,1885,SMO,182,RU,54.34961,31.83795 100239,Novodugino,1885,SMO,182,RU,55.63052,34.28423 100494,Oster,1885,SMO,182,RU,54.017,32.8019 100523,Ozërnyy,1885,SMO,182,RU,55.5802,32.4127 100586,Pechersk,1885,SMO,182,RU,54.85355,32.03154 100710,Pochinok,1885,SMO,182,RU,54.40685,32.44067 101001,Roslavl’,1885,SMO,182,RU,53.95278,32.86389 101025,Rudnya,1885,SMO,182,RU,54.94698,31.0934 101070,Safonovo,1885,SMO,182,RU,55.11087,33.23292 101071,Safonovskiy Rayon,1885,SMO,182,RU,55.16667,33.16667 101267,Shatalovo,1885,SMO,182,RU,54.334,32.4465 101352,Shumyachi,1885,SMO,182,RU,53.85833,32.42417 101415,Smolensk,1885,SMO,182,RU,54.7818,32.0401 101620,Stodolishche,1885,SMO,182,RU,54.18594,32.64925 101721,Sychëvka,1885,SMO,182,RU,55.82515,34.27361 101747,Talashkino,1885,SMO,182,RU,54.65471,32.18325 102008,Tëmkino,1885,SMO,182,RU,55.10917,35.01389 102040,Ugra,1885,SMO,182,RU,54.77775,34.32674 102220,Velizh,1885,SMO,182,RU,55.60564,31.19673 102238,Verkhnedneprovskiy,1885,SMO,182,RU,54.98131,33.34573 102424,Vyaz’ma,1885,SMO,182,RU,55.21039,34.29508 102505,Yartsevo,1885,SMO,182,RU,55.06667,32.69639 102531,Yekimovichi,1885,SMO,182,RU,54.11285,33.29648 102551,Yel’nya,1885,SMO,182,RU,54.57864,33.18373 102571,Yershichi,1885,SMO,182,RU,53.6725,32.75417 97494,Achikulak,1868,STA,182,RU,44.55167,44.83778 97562,Aleksandriya,1868,STA,182,RU,45.09472,43.24556 97563,Aleksandriyskaya,1868,STA,182,RU,44.22722,43.34528 97574,Aleksandrovskoye,1868,STA,182,RU,44.71417,43.00083 97631,Andzhiyevskiy,1868,STA,182,RU,44.23889,43.08556 97690,Arzgir,1868,STA,182,RU,45.37278,44.22056 97767,Balakhonovskoye,1868,STA,182,RU,44.7767,41.7842 97799,Barsukovskaya,1868,STA,182,RU,44.7632,41.8191 97836,Bekeshevskaya,1868,STA,182,RU,44.11389,42.42694 97909,Beshpagir,1868,STA,182,RU,45.02167,42.38083 97923,Bezopasnoye,1868,STA,182,RU,45.64833,41.93603 97944,Blagodarnyy,1868,STA,182,RU,45.09778,43.43639 97945,Blagodatnoye,1868,STA,182,RU,45.39972,42.58667 98022,Borgustanskaya,1868,STA,182,RU,44.0547,42.5288 98065,Budënnovsk,1868,STA,182,RU,44.78389,44.16583 98083,Burlatskoye,1868,STA,182,RU,45.05639,43.635 98172,Chernolesskoye,1868,STA,182,RU,44.71556,43.71333 98281,Divnoye,1868,STA,182,RU,45.90889,43.35472 98284,Dmitriyevskoye,1868,STA,182,RU,45.80529,41.89667 98313,Donskoye,1868,STA,182,RU,45.45518,41.97411 98380,Edissiya,1868,STA,182,RU,44.05111,44.54083 98406,Etoka,1868,STA,182,RU,43.91944,43.04833 98453,Galyugayevskaya,1868,STA,182,RU,43.69694,44.93444 98476,Georgiyevsk,1868,STA,182,RU,44.15194,43.46972 98477,Georgiyevskaya,1868,STA,182,RU,44.11139,43.49222 98505,Gofitskoye,1868,STA,182,RU,45.07917,43.04639 98569,Goryachevodskiy,1868,STA,182,RU,44.02361,43.09222 98581,Grazhdanskoye,1868,STA,182,RU,44.23,42.7698 98584,Grecheskoye,1868,STA,182,RU,44.43053,43.0083 98589,Grigoropolisskaya,1868,STA,182,RU,45.29722,41.05667 98674,Inozemtsevo,1868,STA,182,RU,44.09264,43.09113 98685,Ipatovo,1868,STA,182,RU,45.71806,42.90361 98690,Irgakly,1868,STA,182,RU,44.36111,44.75556 98734,Ivanovskoye,1868,STA,182,RU,44.5795,41.8764 98757,Izobil’nyy,1868,STA,182,RU,45.37092,41.70839 98795,Kalinovskoye,1868,STA,182,RU,44.8635,42.9622 98843,Kangly,1868,STA,182,RU,44.25444,43.03083 98850,Kara-Tyube,1868,STA,182,RU,44.63361,45.43694 98917,Kayasula,1868,STA,182,RU,44.325,45.0 98946,Kevsala,1868,STA,182,RU,45.79833,42.69028 99081,Kislovodsk,1868,STA,182,RU,43.91333,42.72083 99125,Kochubeyevskoye,1868,STA,182,RU,44.64417,41.84528 99169,Komsomolets,1868,STA,182,RU,44.01972,43.56972 99190,Konstantinovskaya,1868,STA,182,RU,44.04556,43.15833 99194,Konstantinovskoye,1868,STA,182,RU,45.29917,42.63667 99316,Krasnogvardeyskoye,1868,STA,182,RU,45.84604,41.51885 99326,Krasnokumskoye,1868,STA,182,RU,44.17806,43.50194 99401,Kruglolesskoye,1868,STA,182,RU,44.65889,42.81417 99473,Kursavka,1868,STA,182,RU,44.4564,42.5093 99475,Kurskaya,1868,STA,182,RU,44.05,44.45 99532,Ladovskaya Balka,1868,STA,182,RU,45.62965,41.40231 99584,Lermontov,1868,STA,182,RU,44.10667,42.97333 99608,Letnyaya Stavka,1868,STA,182,RU,45.43056,43.44722 99617,Levokumka,1868,STA,182,RU,44.23167,43.15 99618,Levokumskoye,1868,STA,182,RU,44.82194,44.66056 99708,Lysogorskaya,1868,STA,182,RU,44.10639,43.27556 99899,Mikhaylovsk,1868,STA,182,RU,45.12833,42.02556 99917,Mineralnye Vody,1868,STA,182,RU,44.21028,43.13528 99979,Moskovskoye,1868,STA,182,RU,45.2842,41.9103 100039,Nadezhda,1868,STA,182,RU,44.1,44.6 100050,Nagutskoye,1868,STA,182,RU,44.4415,42.8762 100087,Neftekumsk,1868,STA,182,RU,44.75583,44.9925 100120,Nevinnomyssk,1868,STA,182,RU,44.6333,41.9444 100128,Nezhinskiy,1868,STA,182,RU,43.92833,42.68556 100129,Nezlobnaya,1868,STA,182,RU,44.11806,43.40278 100149,Niny,1868,STA,182,RU,44.48778,43.94889 100222,Novoaleksandrovsk,1868,STA,182,RU,45.4948,41.22075 100231,Novoblagodarnoye,1868,STA,182,RU,44.14333,42.875 100278,Novopavlovsk,1868,STA,182,RU,43.96222,43.63417 100294,Novoselitskoye,1868,STA,182,RU,44.75083,43.43694 100313,Novoterskiy,1868,STA,182,RU,44.14861,43.0925 100317,Novotroitskaya,1868,STA,182,RU,45.32667,41.52528 100334,Novozavedennoye,1868,STA,182,RU,44.26278,43.63806 100471,Orlovka,1868,STA,182,RU,44.69139,44.17444 100502,Otkaznoye,1868,STA,182,RU,44.32639,43.86083 100512,Ovoshchi,1868,STA,182,RU,45.36639,43.32333 100590,Pelagiada,1868,STA,182,RU,45.20639,42.02361 100715,Podgornaya,1868,STA,182,RU,44.20306,43.42972 100720,Podkumskiy,1868,STA,182,RU,44.07556,43.21028 100741,Pokoynoye,1868,STA,182,RU,44.80972,44.25167 100800,Praskoveya,1868,STA,182,RU,44.74444,44.20306 100806,Pravokumskoye,1868,STA,182,RU,44.76944,44.64722 100810,Pregradnoye,1868,STA,182,RU,45.82183,41.74692 100909,Pyatigorsk,1868,STA,182,RU,44.04861,43.05944 100910,Pyatigorskiy,1868,STA,182,RU,43.97417,43.25833 100941,Rasshevatskaya,1868,STA,182,RU,45.5748,41.03496 101056,Ryzdvyanyy,1868,STA,182,RU,45.2656,41.8389 101203,Severnoye,1868,STA,182,RU,44.83194,42.85833 101445,Soldato-Aleksandrovskoye,1868,STA,182,RU,44.26528,43.75611 101463,Solomenskoye,1868,STA,182,RU,44.21667,44.35278 101470,Soluno-Dmitriyevskoye,1868,STA,182,RU,44.4074,42.724 101501,Sotnikovskoye,1868,STA,182,RU,45.00389,43.77722 101505,Sovetskaya,1868,STA,182,RU,44.02667,44.05 101539,Spitsevka,1868,STA,182,RU,45.12306,42.5125 101579,Starodubskoye,1868,STA,182,RU,44.56306,44.01528 101589,Staropavlovskaya,1868,STA,182,RU,43.84889,43.63278 101613,Stavropol’,1868,STA,182,RU,45.0428,41.9734 101617,Stepnoye,1868,STA,182,RU,44.27083,44.585 101648,Sukhaya Buyvola,1868,STA,182,RU,45.15333,42.99556 101688,Suvorovskaya,1868,STA,182,RU,44.1901,42.6595 101703,Svetlograd,1868,STA,182,RU,45.33528,42.85472 101716,Svobody,1868,STA,182,RU,44.02556,43.05028 101791,Tatarka,1868,STA,182,RU,44.95889,41.95171 101817,Temizhbekskaya,1868,STA,182,RU,45.45078,41.03866 101863,Tishchenskoye,1868,STA,182,RU,45.46056,41.67382 101934,Trunovskoye,1868,STA,182,RU,45.48778,42.13583 102083,Urozhaynoye,1868,STA,182,RU,44.78833,44.92278 102315,Vinsady,1868,STA,182,RU,44.08083,42.96528 102396,Vostochny,1868,STA,182,RU,44.31494,44.19637 102452,Vysotskoye,1868,STA,182,RU,45.025,42.90639 102512,Yasnaya Polyana,1868,STA,182,RU,44.0225,42.7539 102543,Yelizavetinskoye,1868,STA,182,RU,45.00722,43.34944 102576,Yessentuki,1868,STA,182,RU,44.04444,42.86056 102577,Yessentukskaya,1868,STA,182,RU,44.0328,42.8813 102611,Yutsa,1868,STA,182,RU,43.95639,43.01278 102666,Zaterechnyy,1868,STA,182,RU,44.79306,45.20972 102669,Zavetnoye,1868,STA,182,RU,44.7492,41.5995 102701,Zelenokumsk,1868,STA,182,RU,44.40694,43.88056 102722,Zheleznovodsk,1868,STA,182,RU,44.13944,43.01972 102753,Zmeyka,1868,STA,182,RU,44.14278,43.12083 97498,Achit,1894,SVE,182,RU,56.7985,57.8994 97558,Alapayevsk,1894,SVE,182,RU,57.85158,61.69627 97652,Aramil,1894,SVE,182,RU,56.6977,60.8369 97687,Artëmovskiy,1894,SVE,182,RU,57.3555,61.86865 97683,Arti,1894,SVE,182,RU,56.42344,58.53276 97693,Asbest,1894,SVE,182,RU,57.00993,61.45776 97694,Asbestovskiy,1894,SVE,182,RU,57.75574,61.39672 97711,Atig,1894,SVE,182,RU,56.69307,59.42271 97732,Azanka,1894,SVE,182,RU,58.04012,64.78927 97788,Baraba,1894,SVE,182,RU,56.75,61.76667 97791,Baranchinskiy,1894,SVE,182,RU,58.1617,59.6991 97824,Baykalovo,1894,SVE,182,RU,57.39811,63.76841 97870,Beloyarskiy,1894,SVE,182,RU,56.7584,61.4143 97901,Beryozovsky,1894,SVE,182,RU,56.9083,60.8019 97929,Bilimbay,1894,SVE,182,RU,56.96889,59.8149 97940,Bisert’,1894,SVE,182,RU,56.86174,59.05231 97958,Bobrovskiy,1894,SVE,182,RU,56.6732,60.9807 97965,Bogdanovich,1894,SVE,182,RU,56.78028,62.04944 98074,Bulanash,1894,SVE,182,RU,57.27825,61.9965 98086,Butka,1894,SVE,182,RU,56.71788,63.78661 98189,Cherëmukhovo,1894,SVE,182,RU,60.34842,59.98507 98171,Chernoistochinsk,1894,SVE,182,RU,57.73639,59.87194 98258,Degtyarsk,1894,SVE,182,RU,56.704,60.0879 98331,Druzhinino,1894,SVE,182,RU,56.78945,59.51428 98361,Dvurechensk,1894,SVE,182,RU,56.5982,61.0953 98458,Gari,1894,SVE,182,RU,59.43075,62.34967 98544,Gornyy Shchit,1894,SVE,182,RU,56.68815,60.51947 98598,Gryaznovskoye,1894,SVE,182,RU,56.7825,61.7053 98689,Irbit,1894,SVE,182,RU,57.67052,63.071 98696,Is,1894,SVE,182,RU,58.7909,59.7179 98701,Iset’,1894,SVE,182,RU,56.9779,60.3718 98719,Istok,1894,SVE,182,RU,56.79086,60.77889 98738,Ivdel’,1894,SVE,182,RU,60.69111,60.42056 98759,Izumrud,1894,SVE,182,RU,57.07881,61.39932 98766,Kachkanar,1894,SVE,182,RU,58.7002,59.4839 98793,Kalinovo,1894,SVE,182,RU,57.1317,60.1464 98820,Kamensk-Ural’skiy,1894,SVE,182,RU,56.4185,61.9329 98830,Kamyshlov,1894,SVE,182,RU,56.84278,62.71111 98883,Karpinsk,1894,SVE,182,RU,59.7703,59.9964 98885,Karpushikha,1894,SVE,182,RU,57.50167,59.89556 98934,Kedrovoye,1894,SVE,182,RU,57.1576,60.5698 99061,Kirovgrad,1894,SVE,182,RU,57.42972,60.05972 99109,Klyuchevsk,1894,SVE,182,RU,57.1216,60.9414 99313,Krasnogvardeyskiy,1894,SVE,182,RU,57.37928,62.31952 99337,Krasnotur’insk,1894,SVE,182,RU,59.7666,60.2086 99338,Krasnoufimsk,1894,SVE,182,RU,56.60585,57.76686 99339,Krasnoural’sk,1894,SVE,182,RU,58.3638,60.0407 99488,Kushva,1894,SVE,182,RU,58.29056,59.75917 99505,Kuzino,1894,SVE,182,RU,57.0224,59.4412 99596,Lesnoy,1894,SVE,182,RU,57.6198,63.0784 99615,Levikha,1894,SVE,182,RU,57.58361,59.90028 99647,Lobva,1894,SVE,182,RU,59.18538,60.51846 99667,Losinyy,1894,SVE,182,RU,57.13862,61.06663 99682,Lugovskoy,1894,SVE,182,RU,56.95849,64.52897 99771,Malysheva,1894,SVE,182,RU,57.11851,61.40345 99807,Martyush,1894,SVE,182,RU,56.4,61.88194 99900,Mikhaylovsk,1894,SVE,182,RU,56.43583,59.12 99958,Monetnyy,1894,SVE,182,RU,57.0472,60.8794 100121,Nev’yansk,1894,SVE,182,RU,57.4953,60.2112 100124,Neyvo-Rudyanka,1894,SVE,182,RU,57.3444,60.1343 100125,Neyvo-Shaytanskiy,1894,SVE,182,RU,57.7286,61.24956 100141,Nikolo-Pavlovskoye,1894,SVE,182,RU,57.78306,60.05778 100179,Nizhniye Sergi,1894,SVE,182,RU,56.66139,59.30333 100181,Nizhny Tagil,1894,SVE,182,RU,57.91944,59.965 100182,Nizhnyaya Irga,1894,SVE,182,RU,56.8669,57.422 100186,Nizhnyaya Salda,1894,SVE,182,RU,58.07756,60.7202 100188,Nizhnyaya Tura,1894,SVE,182,RU,58.6293,59.8118 100206,Novaya Lyalya,1894,SVE,182,RU,59.05503,60.59899 100225,Novoasbest,1894,SVE,182,RU,57.74225,60.28773 100322,Novoural’sk,1894,SVE,182,RU,57.24389,60.08389 100324,Novoutkinsk,1894,SVE,182,RU,56.99295,59.55714 100393,Obukhovskoye,1894,SVE,182,RU,56.8345,62.612 100510,Ous,1894,SVE,182,RU,60.90583,61.51861 100592,Pelym,1894,SVE,182,RU,61.01083,61.99778 100629,Pervoural’sk,1894,SVE,182,RU,56.90528,59.94361 100650,Petrokamenskoye,1894,SVE,182,RU,57.716,60.6484 100749,Pokrovskoye,1894,SVE,182,RU,56.4704,61.6092 100755,Polevskoy,1894,SVE,182,RU,56.44222,60.18778 100760,Polunochnoye,1894,SVE,182,RU,60.86972,60.41528 100916,Pyshma,1894,SVE,182,RU,56.95226,63.25129 100959,Reftinskiy,1894,SVE,182,RU,57.09013,61.67692 100969,Revda,1894,SVE,182,RU,56.80097,59.93028 100971,Rezh,1894,SVE,182,RU,57.37005,61.40428 101024,Rudnichnyy,1894,SVE,182,RU,59.70118,60.28817 101108,Sarana,1894,SVE,182,RU,56.47728,57.72586 101190,Serov,1894,SVE,182,RU,59.60334,60.5787 101202,Severka,1894,SVE,182,RU,56.8688,60.3015 101221,Severoural’sk,1894,SVE,182,RU,60.15328,59.95205 101231,Shabrovskiy,1894,SVE,182,RU,56.63597,60.58065 101249,Shalya,1894,SVE,182,RU,57.2471,58.7298 101251,Shamary,1894,SVE,182,RU,57.3434,58.21988 101276,Shchelkun,1894,SVE,182,RU,56.30338,60.94831 101329,Shirokaya Rechka,1894,SVE,182,RU,56.79858,60.48522 101358,Shuvakish,1894,SVE,182,RU,56.9187,60.47727 101499,Sos’va,1894,SVE,182,RU,59.17662,61.85579 101520,Sovkhoznyy,1894,SVE,182,RU,56.5599,61.426 101545,Sredneuralsk,1894,SVE,182,RU,56.98921,60.46662 101591,Staropyshminsk,1894,SVE,182,RU,56.93867,60.90295 101598,Staroutkinsk,1894,SVE,182,RU,57.23017,59.33483 101654,Sukhoy Log,1894,SVE,182,RU,56.9094,62.0296 101715,Svobodnyy,1894,SVE,182,RU,58.03972,60.39611 101726,Sylva,1894,SVE,182,RU,57.3092,58.7734 101733,Sysert’,1894,SVE,182,RU,56.50243,60.81917 101732,Sysertskiy Rayon,1894,SVE,182,RU,56.5,60.75 101738,Tabory,1894,SVE,182,RU,58.51982,64.54947 101752,Talitsa,1894,SVE,182,RU,57.01095,63.73254 101799,Tavda,1894,SVE,182,RU,58.04254,65.27258 101911,Tretiy Severnyy,1894,SVE,182,RU,60.20861,59.96111 101918,Troitskiy,1894,SVE,182,RU,57.06028,63.74811 101942,Tsementnyy,1894,SVE,182,RU,57.4693,60.1536 101962,Tugulym,1894,SVE,182,RU,57.05906,64.64251 101976,Turinsk,1894,SVE,182,RU,58.04575,63.69605 101977,Turinskaya Sloboda,1894,SVE,182,RU,57.6232,64.38575 102026,Ufimskiy,1894,SVE,182,RU,56.7084,58.0517 102070,Uralets,1894,SVE,182,RU,57.6614,59.6497 102181,Valerianovsk,1894,SVE,182,RU,58.7608,59.5596 102232,Verkh-Neyvinskiy,1894,SVE,182,RU,57.27013,60.13762 102247,Verkhneye Dubrovo,1894,SVE,182,RU,56.7528,61.0468 102257,Verkhniy Tagil,1894,SVE,182,RU,57.3733,59.9556 102263,Verkhniye Sergi,1894,SVE,182,RU,56.64694,59.55556 102269,Verkhnyaya Pyshma,1894,SVE,182,RU,56.97047,60.58219 102270,Verkhnyaya Salda,1894,SVE,182,RU,58.04874,60.55949 102271,Verkhnyaya Sinyachikha,1894,SVE,182,RU,57.97604,61.66733 102272,Verkhnyaya Sysert’,1894,SVE,182,RU,56.44012,60.75563 102275,Verkhnyaya Tura,1894,SVE,182,RU,58.36083,59.80667 102277,Verkhotur’ye,1894,SVE,182,RU,58.86271,60.80536 102319,Visim,1894,SVE,182,RU,57.6488,59.5014 102339,Volchansk,1894,SVE,182,RU,59.9378,60.081 102399,Vostochnyy,1894,SVE,182,RU,58.79991,61.81391 102527,Yekaterinburg,1894,SVE,182,RU,56.8519,60.6122 102534,Yelanskiy,1894,SVE,182,RU,56.8419,62.5014 102623,Yëlkino,1894,SVE,182,RU,58.6922,59.832 102574,Yertarskiy,1894,SVE,182,RU,56.79016,64.29952 102607,Yushala,1894,SVE,182,RU,57.07611,64.26011 102654,Zarechnyy,1894,SVE,182,RU,56.811,61.3254 102676,Zavodouspenskoye,1894,SVE,182,RU,56.86256,65.01553 102685,Zaykovo,1894,SVE,182,RU,57.5613,62.75681 102790,Zyuzel’skiy,1894,SVE,182,RU,56.4856,60.1331 97984,Bokino,1878,TAM,182,RU,52.63744,41.45968 98018,Bondarskiy Rayon,1878,TAM,182,RU,53.0,42.0 98314,Donskoye,1878,TAM,182,RU,52.77495,41.47759 98464,Gavrilovka Vtoraya,1878,TAM,182,RU,52.87697,42.76633 98524,Goreloye,1878,TAM,182,RU,52.93697,41.50435 98683,Inzhavino,1878,TAM,182,RU,52.31847,42.49369 99074,Kirsanov,1878,TAM,182,RU,52.65494,42.72236 99075,Kirsanovskiy Rayon,1878,TAM,182,RU,52.61667,42.55 99170,Komsomolets,1878,TAM,182,RU,52.7686,41.28683 99250,Kotovsk,1878,TAM,182,RU,52.58666,41.5021 99892,Michurinsk,1878,TAM,182,RU,52.8978,40.4907 99961,Mordovo,1878,TAM,182,RU,52.0834,40.77 99967,Morshansk,1878,TAM,182,RU,53.44354,41.81065 99993,Muchkapskiy,1878,TAM,182,RU,51.85133,42.47175 100205,Novaya Lyada,1878,TAM,182,RU,52.71309,41.63872 100284,Novopokrovka,1878,TAM,182,RU,52.1331,40.8783 100618,Pervomayskiy,1878,TAM,182,RU,53.2485,40.2871 100670,Pichayevo,1878,TAM,182,RU,53.23627,42.20323 100698,Platonovka,1878,TAM,182,RU,52.71058,41.95199 100744,Pokrovo-Prigorodnoye,1878,TAM,182,RU,52.68405,41.41752 100942,Rasskazovo,1878,TAM,182,RU,52.65599,41.88461 100943,Rasskazovskiy Rayon,1878,TAM,182,RU,52.58333,41.91667 101057,Rzhaksa,1878,TAM,182,RU,52.13384,42.0264 101092,Sampurskiy Rayon,1878,TAM,182,RU,52.25,41.66667 101130,Satinka,1878,TAM,182,RU,52.37923,41.68192 101153,Selezni,1878,TAM,182,RU,52.80415,41.23961 101488,Sosnovka,1878,TAM,182,RU,53.23593,41.36859 101602,Staroyur’yevo,1878,TAM,182,RU,53.31611,40.70806 101761,Tambov,1878,TAM,182,RU,52.73169,41.44326 101873,Tokarevskiy Rayon,1878,TAM,182,RU,52.0,41.25 102155,Uvarovo,1878,TAM,182,RU,51.98486,42.26147 102681,Zavoronezhskoye,1878,TAM,182,RU,52.8801,40.5526 102725,Zherdevka,1878,TAM,182,RU,51.84861,41.46056 102756,Znamenka,1878,TAM,182,RU,52.4167,41.43108 102760,Znamenskiy Rayon,1878,TAM,182,RU,52.33333,41.33333 97575,Aleksandrovskoye,1872,TOM,182,RU,56.74083,85.39056 97701,Asino,1872,TOM,182,RU,56.99987,86.14393 97759,Bakchar,1872,TOM,182,RU,57.01861,82.07111 97881,Belyy Yar,1872,TOM,182,RU,58.44472,85.0425 97961,Bogashevo,1872,TOM,182,RU,56.36798,85.14414 98801,Kaltay,1872,TOM,182,RU,56.27917,84.87861 98877,Kargasok,1872,TOM,182,RU,59.05556,80.85722 98935,Kedrovyy,1872,TOM,182,RU,57.51972,79.51556 99146,Kolpashevo,1872,TOM,182,RU,58.31306,82.90889 99263,Kozhevnikovo,1872,TOM,182,RU,56.25889,83.97139 99378,Krasnyy Yar,1872,TOM,182,RU,57.1275,84.53028 99393,Krivosheino,1872,TOM,182,RU,57.34306,83.92611 99859,Mel’nikovo,1872,TOM,182,RU,56.55738,84.0835 99947,Molchanovo,1872,TOM,182,RU,57.58167,83.76917 99948,Molchanovskiy Rayon,1872,TOM,182,RU,57.75,84.33333 99969,Moryakovskiy Zaton,1872,TOM,182,RU,56.69448,84.65145 100540,Parabel’,1872,TOM,182,RU,58.69778,81.4825 100627,Pervomayskoye,1872,TOM,182,RU,57.0761,86.2313 100717,Podgornoye,1872,TOM,182,RU,57.78861,82.65194 101094,Samus’,1872,TOM,182,RU,56.74482,84.70422 101222,Seversk,1872,TOM,182,RU,56.60056,84.88639 101628,Strezhevoy,1872,TOM,182,RU,60.7333,77.5889 101707,Svetlyy,1872,TOM,182,RU,56.91667,85.96667 101810,Tegul’det,1872,TOM,182,RU,57.30679,88.16004 101811,Tegul’detskiy Rayon,1872,TOM,182,RU,57.5,88.16667 101860,Timiryazevskoye,1872,TOM,182,RU,56.48988,84.87795 101872,Togur,1872,TOM,182,RU,58.3631,82.8265 101887,Tomsk,1872,TOM,182,RU,56.49771,84.97437 101888,Tomskiy Rayon,1872,TOM,182,RU,56.5,84.66667 102788,Zyryanskoye,1872,TOM,182,RU,56.83058,86.62734 97515,Ageyevo,1895,TUL,182,RU,54.15883,36.46927 97583,Aleksin,1895,TUL,182,RU,54.50503,37.0674 97584,Aleksinskiy Rayon,1895,TUL,182,RU,54.5,37.08333 97679,Arsen’yevo,1895,TUL,182,RU,53.73893,36.66429 97798,Barsuki,1895,TUL,182,RU,54.26548,37.48746 97834,Begichevskiy,1895,TUL,182,RU,53.79605,38.25498 97884,Belëv,1895,TUL,182,RU,53.81194,36.13194 97967,Bogoroditsk,1895,TUL,182,RU,53.77166,38.12408 98017,Bol’shoye Skuratovo,1895,TUL,182,RU,53.43852,36.84085 97996,Bolokhovo,1895,TUL,182,RU,54.08378,37.82895 98031,Borodinskiy,1895,TUL,182,RU,53.99859,37.81792 98059,Brusyanka,1895,TUL,182,RU,53.98492,38.03593 98134,Chekalin,1895,TUL,182,RU,54.09685,36.24499 98155,Cherepet’,1895,TUL,182,RU,54.11784,36.37877 98183,Chern’,1895,TUL,182,RU,53.45232,36.9145 98312,Donskoy,1895,TUL,182,RU,53.97106,38.33627 98338,Dubna,1895,TUL,182,RU,54.15416,36.96173 98339,Dubovka,1895,TUL,182,RU,53.95223,38.06276 98522,Gorelki,1895,TUL,182,RU,54.25617,37.6108 98591,Gritsovskiy,1895,TUL,182,RU,54.13761,38.16043 98808,Kamenetskiy,1895,TUL,182,RU,54.01353,38.22115 98924,Kazachka,1895,TUL,182,RU,53.3644,38.0694 98959,Khanino,1895,TUL,182,RU,54.211,36.62292 99042,Kimovsk,1895,TUL,182,RU,53.97164,38.53186 99053,Kireyevsk,1895,TUL,182,RU,53.93361,37.92792 99225,Kosaya Gora,1895,TUL,182,RU,54.11896,37.54459 99273,Krapivna,1895,TUL,182,RU,53.94235,37.15744 99465,Kurkino,1895,TUL,182,RU,53.42567,38.65824 99571,Leninskiy,1895,TUL,182,RU,54.28768,37.45926 99656,Lomintsevskiy,1895,TUL,182,RU,53.98548,37.66471 99830,Mayskiy,1895,TUL,182,RU,53.96216,38.21165 99864,Mendeleyevskiy,1895,TUL,182,RU,54.13745,37.58742 100245,Novogurovskiy,1895,TUL,182,RU,54.46782,37.33709 100269,Novomoskovsk,1895,TUL,182,RU,54.0105,38.2846 100400,Odoyev,1895,TUL,182,RU,53.93933,36.68639 100554,Partizan,1895,TUL,182,RU,53.95017,38.09801 100617,Pervomayskiy,1895,TUL,182,RU,54.04482,37.50875 100699,Plavsk,1895,TUL,182,RU,53.70944,37.29194 100722,Podlesnyy,1895,TUL,182,RU,53.94003,38.26872 100843,Priupskiy,1895,TUL,182,RU,53.9096,37.736 100970,Revyakino,1895,TUL,182,RU,54.36517,37.66249 101016,Rozhdestvenskiy,1895,TUL,182,RU,54.2957,37.57019 101215,Severo-Zadonsk,1895,TUL,182,RU,54.03481,38.40172 101280,Shchëkino,1895,TUL,182,RU,54.00513,37.52194 101364,Shvartsevskiy,1895,TUL,182,RU,54.09174,37.99053 101394,Skuratovskiy,1895,TUL,182,RU,54.10152,37.60384 101401,Slavniy,1895,TUL,182,RU,53.54654,36.47387 101687,Suvorov,1895,TUL,182,RU,54.1223,36.49657 101689,Suvorovskiy Rayon,1895,TUL,182,RU,54.16667,36.58333 102010,Tëplo-Ogarëvskiy Rayon,1895,TUL,182,RU,53.58333,37.66667 102011,Tëploye,1895,TUL,182,RU,53.62022,37.59026 101909,Tovarkovskiy,1895,TUL,182,RU,53.68217,38.2092 101966,Tula,1895,TUL,182,RU,54.19609,37.61822 102166,Uzlovaya,1895,TUL,182,RU,53.98179,38.17118 102226,Venëv,1895,TUL,182,RU,54.35533,38.26843 102223,Venevskiy Rayon,1895,TUL,182,RU,54.25,38.25 102366,Volovo,1895,TUL,182,RU,53.55831,38.00285 102513,Yasnogorsk,1895,TUL,182,RU,54.48082,37.69854 102514,Yasnogorskiy Rayon,1895,TUL,182,RU,54.5,37.75 102523,Yefremov,1895,TUL,182,RU,53.14806,38.09924 102563,Yepifan’,1895,TUL,182,RU,53.82526,38.55181 102643,Zaokskiy,1895,TUL,182,RU,54.73227,37.40539 102644,Zaokskiy Rayon,1895,TUL,182,RU,54.66667,37.5 102716,Zhdankovskiy,1895,TUL,182,RU,53.75321,38.17951 97526,Ak-Dovurak,1900,TY,182,RU,51.18333,90.6 97779,Balgazyn,1900,TY,182,RU,51.0,95.2 97821,Bay-Khaak,1900,TY,182,RU,51.16105,94.46371 98107,Chadan,1900,TY,182,RU,51.28333,91.58333 98403,Erzin,1900,TY,182,RU,50.26,95.1623 98761,Kaa-Khem,1900,TY,182,RU,51.68333,94.73333 98957,Khandagayty,1900,TY,182,RU,50.73333,92.05 99012,Khovu-Aksy,1900,TY,182,RU,51.13294,93.71286 99447,Kungurtug,1900,TY,182,RU,50.59944,97.52278 99525,Kyzyl,1900,TY,182,RU,51.71081,94.45338 99526,Kyzyl-Khaya,1900,TY,182,RU,50.04986,89.87821 99527,Kyzyl-Mazhalyk,1900,TY,182,RU,51.14594,90.5808 99995,Mugur-Aksy,1900,TY,182,RU,50.38072,90.43739 101084,Samagaltay,1900,TY,182,RU,50.6022,95.0047 101126,Saryg-Sep,1900,TY,182,RU,51.49074,95.56081 101235,Shagonar,1900,TY,182,RU,51.534,92.93164 101657,Sukpak,1900,TY,182,RU,51.66667,94.63333 101686,Sut-Khol’,1900,TY,182,RU,51.40698,91.29244 101809,Teeli,1900,TY,182,RU,51.01398,90.20535 101892,Toora-Khem,1900,TY,182,RU,52.46556,96.11796 101973,Turan,1900,TY,182,RU,52.1449,93.91887 97626,Andreapol’,1860,TVE,182,RU,56.65134,32.2664 97627,Andreapol’skiy Rayon,1860,TVE,182,RU,56.66667,32.25 97885,Bel’skiy Rayon,1860,TVE,182,RU,55.83333,33.08333 97878,Belyy,1860,TVE,182,RU,55.8402,32.9419 97879,Belyy Gorodok,1860,TVE,182,RU,56.965,37.5125 97894,Berezayka,1860,TVE,182,RU,57.98833,33.90361 97899,Bernovo,1860,TVE,182,RU,56.68633,34.70357 97920,Bezhetsk,1860,TVE,182,RU,57.78506,36.69651 97921,Bezhetskiy Rayon,1860,TVE,182,RU,57.76667,36.58333 97993,Bologovskiy Rayon,1860,TVE,182,RU,57.91667,34.0 97994,Bologoye,1860,TVE,182,RU,57.88585,34.04876 97995,Bologoye-4,1860,TVE,182,RU,57.9,33.65 98393,Emmaus,1860,TVE,182,RU,56.78055,36.115 98429,Firovo,1860,TVE,182,RU,57.48135,33.70211 98430,Firovskiy Rayon,1860,TVE,182,RU,57.48333,33.7 98561,Gorodnya,1860,TVE,182,RU,56.7055,36.31793 98656,Il’inskoye,1860,TVE,182,RU,56.96667,37.18333 98758,Izoplit,1860,TVE,182,RU,56.62558,36.22198 98781,Kalashnikovo,1860,TVE,182,RU,57.28237,35.22617 98791,Kalininskiy Rayon,1860,TVE,182,RU,56.75958,35.98945 98803,Kalyazin,1860,TVE,182,RU,57.24028,37.84333 98804,Kalyazinskiy Rayon,1860,TVE,182,RU,57.25,37.83333 98891,Kashin,1860,TVE,182,RU,57.35917,37.60806 98892,Kashinskiy Rayon,1860,TVE,182,RU,57.41667,37.58333 98943,Kesova Gora,1860,TVE,182,RU,57.58361,37.29222 98944,Kesovogorskiy Rayon,1860,TVE,182,RU,57.58333,37.33333 99043,Kimrskiy Rayon,1860,TVE,182,RU,56.91667,37.33333 99044,Kimry,1860,TVE,182,RU,56.86667,37.35 99177,Konakovo,1860,TVE,182,RU,56.7,36.76667 99178,Konakovskiy Rayon,1860,TVE,182,RU,56.66667,36.83333 99268,Kozlovo,1860,TVE,182,RU,56.50977,36.27326 99325,Krasnokholmskiy Rayon,1860,TVE,182,RU,58.08333,37.16667 99328,Krasnomayskiy,1860,TVE,182,RU,57.61941,34.40987 99363,Krasnyy Kholm,1860,TVE,182,RU,58.0607,37.12032 99491,Kuvshinovo,1860,TVE,182,RU,57.02953,34.17252 99492,Kuvshinovskiy Rayon,1860,TVE,182,RU,57.0,34.16667 99502,Kuzhenkino,1860,TVE,182,RU,57.76111,33.95083 99598,Lesnoy Rayon,1860,TVE,182,RU,58.25,35.5 99599,Lesnoye,1860,TVE,182,RU,58.28406,35.51584 99623,Likhoslavl’,1860,TVE,182,RU,57.12747,35.46404 99624,Likhoslavl’skiy Rayon,1860,TVE,182,RU,57.16667,35.41667 99746,Maksatikha,1860,TVE,182,RU,57.79695,35.88254 99747,Maksatikhinskiy Rayon,1860,TVE,182,RU,57.83333,35.91667 99952,Molokovo,1860,TVE,182,RU,58.16611,36.76278 100098,Nelidovo,1860,TVE,182,RU,56.22107,32.77738 100335,Novozavidovskiy,1860,TVE,182,RU,56.55,36.43333 100421,Olenino,1860,TVE,182,RU,56.20917,33.48888 100477,Orsha,1860,TVE,182,RU,56.91196,36.22862 100491,Ostashkov,1860,TVE,182,RU,57.14667,33.10753 100492,Ostashkovskiy Rayon,1860,TVE,182,RU,57.16667,33.25 100593,Peno,1860,TVE,182,RU,56.92624,32.74262 100594,Penovskiy Rayon,1860,TVE,182,RU,56.91667,32.75 100922,Radchenko,1860,TVE,182,RU,56.68027,36.37178 100937,Rameshki,1860,TVE,182,RU,57.3439,36.04535 100938,Rameshkovskiy Rayon,1860,TVE,182,RU,57.33333,36.08333 100958,Redkino,1860,TVE,182,RU,56.64754,36.29674 101060,Rzhev,1860,TVE,182,RU,56.26241,34.32817 101075,Sakharovo,1860,TVE,182,RU,56.89949,36.05015 101098,Sandovo,1860,TVE,182,RU,58.46022,36.41277 101099,Sandovskiy Rayon,1860,TVE,182,RU,58.41667,36.41667 101156,Selishche,1860,TVE,182,RU,56.88794,33.26914 101157,Selizharovo,1860,TVE,182,RU,56.85188,33.44869 101158,Selizharovskiy Rayon,1860,TVE,182,RU,56.83333,33.41667 101476,Sonkovo,1860,TVE,182,RU,57.77816,37.15707 101537,Spirovo,1860,TVE,182,RU,57.41905,34.97658 101538,Spirovskiy Rayon,1860,TVE,182,RU,57.41667,35.0 101554,Stantsia Staritsa,1860,TVE,182,RU,56.53224,34.77287 101567,Staraya Toropa,1860,TVE,182,RU,56.28012,31.67018 101569,Staritsa,1860,TVE,182,RU,56.50752,34.93544 101570,Staritskiy Rayon,1860,TVE,182,RU,56.5,34.91667 101899,Toropets,1860,TVE,182,RU,56.49779,31.63528 101900,Toropetskiy Rayon,1860,TVE,182,RU,56.58333,31.5 101901,Torzhok,1860,TVE,182,RU,57.0436,34.96221 101902,Torzhokskiy Rayon,1860,TVE,182,RU,57.08333,35.0 101988,Tver,1860,TVE,182,RU,56.85836,35.90057 102024,Udomlya,1860,TVE,182,RU,57.87944,34.9925 102199,Vasil’yevskiy Mokh,1860,TVE,182,RU,57.01316,35.91897 102216,Velikooktyabr’skiy,1860,TVE,182,RU,57.43333,33.81595 102293,Ves’yegonsk,1860,TVE,182,RU,58.66398,37.2604 102294,Ves’yegonskiy Rayon,1860,TVE,182,RU,58.66667,37.16667 102429,Vydropuzhsk,1860,TVE,182,RU,57.3647,34.84287 102434,Vypolzovo,1860,TVE,182,RU,57.87667,33.69861 102441,Vyshnevolotskiy Rayon,1860,TVE,182,RU,57.58333,34.58333 102443,Vyshniy Volochëk,1860,TVE,182,RU,57.59125,34.56453 102646,Zapadnaya Dvina,1860,TVE,182,RU,56.25901,32.07454 102672,Zavidovo,1860,TVE,182,RU,56.53333,36.53333 102713,Zharkovskiy,1860,TVE,182,RU,55.849,32.2697 102773,Zubtsov,1860,TVE,182,RU,56.17533,34.58935 102774,Zubtsovskiy Rayon,1860,TVE,182,RU,56.16667,34.58333 97480,Abalak,1907,TYU,182,RU,58.12861,68.59444 97483,Abatskoye,1907,TYU,182,RU,56.28748,70.45553 97640,Antipino,1907,TYU,182,RU,57.10679,65.75755 97674,Armizonskiy Rayon,1907,TYU,182,RU,56.0,67.58333 97675,Armizonskoye,1907,TYU,182,RU,55.94611,67.67361 97676,Aromashevo,1907,TYU,182,RU,56.86018,68.63754 97890,Berdyuzhskiy Rayon,1907,TYU,182,RU,55.83333,68.58333 97960,Bogandinskiy,1907,TYU,182,RU,56.89375,65.89378 98041,Borovskiy,1907,TYU,182,RU,57.04096,65.72018 98188,Chervishevo,1907,TYU,182,RU,56.94635,65.42782 98512,Golyshmanovo,1907,TYU,182,RU,56.3979,68.37279 98513,Golyshmanovskiy Rayon,1907,TYU,182,RU,56.41667,68.41667 98695,Irtyshskiy,1907,TYU,182,RU,58.33333,68.13333 98699,Isetskiy Rayon,1907,TYU,182,RU,56.5,65.41667 98700,Isetskoye,1907,TYU,182,RU,56.4858,65.3226 98704,Ishim,1907,TYU,182,RU,56.11281,69.49015 98706,Ishimskiy Rayon,1907,TYU,182,RU,56.16667,69.41667 98929,Kazanskiy Rayon,1907,TYU,182,RU,55.58333,69.41667 98930,Kazanskoye,1907,TYU,182,RU,55.64477,69.235 99858,Melioratorov,1907,TYU,182,RU,57.21065,65.60774 99862,Mendeleyevo,1907,TYU,182,RU,58.16667,68.3 99978,Moskovskiy,1907,TYU,182,RU,57.11108,65.42298 100187,Nizhnyaya Tavda,1907,TYU,182,RU,57.67306,66.1725 100212,Novaya Zaimka,1907,TYU,182,RU,56.48571,66.92413 100293,Novoseleznëvo,1907,TYU,182,RU,55.68207,69.20562 100443,Omutinskiy,1907,TYU,182,RU,56.47453,67.67087 100444,Omutinskiy Rayon,1907,TYU,182,RU,56.41667,67.58333 100450,Onokhino,1907,TYU,182,RU,56.92501,65.5394 101395,Sladkovo,1907,TYU,182,RU,55.52835,70.33854 101396,Sladkovskiy Rayon,1907,TYU,182,RU,55.66667,70.16667 101661,Sumkino,1907,TYU,182,RU,58.11083,68.32444 101868,Tobol’sk,1907,TYU,182,RU,58.19807,68.25457 101981,Turtas,1907,TYU,182,RU,58.93867,69.13393 102005,Tyumen,1907,TYU,182,RU,57.15222,65.52722 102066,Uporovo,1907,TYU,182,RU,56.31093,66.26926 102067,Uporovskiy Rayon,1907,TYU,182,RU,56.16667,66.33333 102102,Uspenka,1907,TYU,182,RU,56.80158,69.22702 102157,Uvat,1907,TYU,182,RU,59.14227,68.88881 102172,Vagay,1907,TYU,182,RU,57.93566,69.01953 102173,Vagayskiy Rayon,1907,TYU,182,RU,57.58333,69.16667 102304,Vikulovo,1907,TYU,182,RU,56.81667,70.61069 102316,Vinzili,1907,TYU,182,RU,56.95938,65.7708 102475,Yalutorovsk,1907,TYU,182,RU,56.65358,66.30057 102495,Yarkovo,1907,TYU,182,RU,57.40386,67.0639 102596,Yurginskoye,1907,TYU,182,RU,56.81888,67.39211 102675,Zavodoukovsk,1907,TYU,182,RU,56.5042,66.55153 97600,Alnashi,1913,UD,182,RU,56.18738,52.47919 97778,Balezino,1913,UD,182,RU,57.9787,53.0138 98254,Debesy,1913,UD,182,RU,57.6515,53.8089 98411,Fakel,1913,UD,182,RU,57.631,53.0251 98495,Glazov,1913,UD,182,RU,58.1393,52.658 98575,Grakhovo,1913,UD,182,RU,56.05017,51.96758 98634,Igra,1913,UD,182,RU,57.5549,53.0544 98746,Izhevsk,1913,UD,182,RU,56.84976,53.20448 98805,Kama,1913,UD,182,RU,56.30512,54.09361 98806,Kambarka,1913,UD,182,RU,56.2666,54.2056 98865,Karakulino,1913,UD,182,RU,56.012,53.70669 98866,Karakulinskiy Rayon,1913,UD,182,RU,56.08333,53.66667 98947,Kez,1913,UD,182,RU,57.8957,53.7132 98990,Khokhryaki,1913,UD,182,RU,56.91561,53.3221 99084,Kiyasovo,1913,UD,182,RU,56.34907,53.12439 99085,Kiyasovskiy Rayon,1913,UD,182,RU,56.33333,53.16667 99096,Kizner,1913,UD,182,RU,56.27489,51.508 99310,Krasnogorskoye,1913,UD,182,RU,57.7047,52.4999 99751,Malaya Purga,1913,UD,182,RU,56.55666,53.00434 99764,Malopurginskiy Rayon,1913,UD,182,RU,56.55766,53.03476 99987,Mozhga,1913,UD,182,RU,56.44469,52.22763 100682,Pirogovo,1913,UD,182,RU,56.77959,53.14954 100887,Pudem,1913,UD,182,RU,58.3047,52.1673 100913,Pychas,1913,UD,182,RU,56.50332,52.44088 101112,Sarapul,1913,UD,182,RU,56.47633,53.79782 101113,Sarapul’skiy Rayon,1913,UD,182,RU,56.5,53.75 101159,Selty,1913,UD,182,RU,57.3132,52.1345 101261,Sharkan,1913,UD,182,RU,57.29885,53.87122 101368,Sigayevo,1913,UD,182,RU,56.42163,53.77566 101734,Syumsi,1913,UD,182,RU,57.11108,51.61494 102153,Uva,1913,UD,182,RU,56.99081,52.18517 102206,Vavozh,1913,UD,182,RU,56.77513,51.93098 102403,Votkinsk,1913,UD,182,RU,57.04865,53.98717 102489,Yar,1913,UD,182,RU,58.2458,52.1054 102589,Yukamenskoye,1913,UD,182,RU,57.8878,52.245 102683,Zav’yalovskiy Rayon,1913,UD,182,RU,56.83333,53.08333 97804,Barysh,1856,ULY,182,RU,53.65533,47.11229 97830,Bazarnyy Syzgan,1856,ULY,182,RU,53.75117,46.75354 98143,Cherdaklinskiy Rayon,1856,ULY,182,RU,54.25,48.83333 98144,Cherdakly,1856,ULY,182,RU,54.3594,48.84497 98216,Chufarovo,1856,ULY,182,RU,54.0963,47.3367 98276,Dimitrovgrad,1856,ULY,182,RU,54.21386,49.61838 98500,Glotovka,1856,ULY,182,RU,53.94906,46.70422 98633,Ignatovka,1856,ULY,182,RU,53.94787,47.6536 98669,Imeni Vladimira Il’icha Lenina,1856,ULY,182,RU,53.56422,46.9801 98681,Inza,1856,ULY,182,RU,53.85672,46.35622 98703,Isheyevka,1856,ULY,182,RU,54.42789,48.26675 98753,Izmaylovo,1856,ULY,182,RU,53.72114,47.24581 98832,Kanadey,1856,ULY,182,RU,53.16786,47.52644 98886,Karsun,1856,ULY,182,RU,54.19941,46.9827 99362,Krasnyy Gulyay,1856,ULY,182,RU,54.02821,48.33327 99510,Kuzovatovo,1856,ULY,182,RU,53.54681,47.68659 99826,Mayna,1856,ULY,182,RU,54.1135,47.6231 99828,Maynskiy Rayon,1856,ULY,182,RU,54.16667,47.66667 99922,Mirnyy,1856,ULY,182,RU,54.36607,48.72939 100001,Mullovka,1856,ULY,182,RU,54.2,49.4 100134,Nikolayevka,1856,ULY,182,RU,53.1257,47.2041 100208,Novaya Malykla,1856,ULY,182,RU,54.2,49.95 100209,Novaya Mayna,1856,ULY,182,RU,54.15,49.75 100234,Novocheremshansk,1856,ULY,182,RU,54.35714,50.16662 100311,Novospasskoye,1856,ULY,182,RU,53.14683,47.75138 100321,Novoul’yanovsk,1856,ULY,182,RU,54.14961,48.38907 100568,Pavlovka,1856,ULY,182,RU,52.68966,47.14046 100581,Pavlovskiy Rayon,1856,ULY,182,RU,52.66667,47.08333 100923,Radishchevo,1856,ULY,182,RU,52.85459,47.87644 101171,Sengiley,1856,ULY,182,RU,53.96222,48.79444 101369,Silikatnyy,1856,ULY,182,RU,53.98957,48.32749 101559,Staraya Kulatka,1856,ULY,182,RU,52.72778,47.61788 101562,Staraya Mayna,1856,ULY,182,RU,54.60417,48.93056 101584,Starokulatkinskiy Rayon,1856,ULY,182,RU,52.75,47.5 101596,Starotimoshkino,1856,ULY,182,RU,53.71908,47.53116 101681,Surskoye,1856,ULY,182,RU,54.4821,46.7214 101829,Teren’gul’skiy Rayon,1856,ULY,182,RU,53.75,48.25 101947,Tsil’na,1856,ULY,182,RU,54.59533,48.1414 101948,Tsil’ninskiy Rayon,1856,ULY,182,RU,54.58333,48.0 102051,Ulyanovsk,1856,ULY,182,RU,54.32824,48.38657 102052,Ulyanovskiy Rayon,1856,ULY,182,RU,54.33528,48.01694 102057,Undory,1856,ULY,182,RU,54.60849,48.39276 102290,Veshkayma,1856,ULY,182,RU,54.0472,47.13 102519,Yazykovo,1856,ULY,182,RU,54.2922,47.3891 102710,Zhadovka,1856,ULY,182,RU,53.57464,46.94985 97565,Aleksandrov,1881,VLA,182,RU,56.39516,38.71216 97572,Aleksandrovskiy Rayon,1881,VLA,182,RU,56.41667,38.58333 97629,Andreyevo,1881,VLA,182,RU,55.9465,41.1505 97638,Anopino,1881,VLA,182,RU,55.69809,40.66707 97677,Arsaki,1881,VLA,182,RU,56.38333,38.48333 97770,Balakirevo,1881,VLA,182,RU,56.50588,38.84324 97817,Bavleny,1881,VLA,182,RU,56.39448,39.56504 97845,Belaya Rechka,1881,VLA,182,RU,56.28491,39.40665 97966,Bogolyubovo,1881,VLA,182,RU,56.19052,40.52313 98297,Dobryatino,1881,VLA,182,RU,55.5055,41.3195 98452,Galitsy,1881,VLA,182,RU,56.17759,42.84588 98508,Golovino,1881,VLA,182,RU,55.96128,40.42511 98564,Gorokhovets,1881,VLA,182,RU,56.20152,42.69351 98622,Gus’-Khrustal’nyy,1881,VLA,182,RU,55.61113,40.65186 98619,Gusevskiy,1881,VLA,182,RU,55.66199,40.56267 98670,Imeni Vorovskogo,1881,VLA,182,RU,55.7237,41.119 98728,Ivanishchi,1881,VLA,182,RU,55.77417,40.42731 98825,Kameshkovo,1881,VLA,182,RU,56.35305,41.00941 98851,Karabanovo,1881,VLA,182,RU,56.31667,38.7 99034,Kideksha,1881,VLA,182,RU,56.42381,40.52146 99077,Kirzhach,1881,VLA,182,RU,56.15273,38.85509 99154,Kol’chugino,1881,VLA,182,RU,56.29929,39.38304 99155,Kol’chuginskiy Rayon,1881,VLA,182,RU,56.25,39.41667 99163,Kommunar,1881,VLA,182,RU,56.11222,40.44666 99237,Kosterevo,1881,VLA,182,RU,55.9299,39.61438 99255,Kovrov,1881,VLA,182,RU,56.35722,41.31917 99278,Krasnaya Gorbatka,1881,VLA,182,RU,55.8703,41.7641 99359,Krasnyy Bogatyr’,1881,VLA,182,RU,56.01453,41.12958 99370,Krasnyy Oktyabr’,1881,VLA,182,RU,56.11667,38.88333 99466,Kurlovo,1881,VLA,182,RU,55.43252,40.48539 99540,Lakinsk,1881,VLA,182,RU,56.01931,39.94848 99688,Luknovo,1881,VLA,182,RU,56.18045,42.03987 99852,Melekhovo,1881,VLA,182,RU,56.2773,41.29346 99853,Melenki,1881,VLA,182,RU,55.3343,41.6295 99854,Melenkovskiy Rayon,1881,VLA,182,RU,55.33333,41.5 99884,Mezinovskiy,1881,VLA,182,RU,55.5042,40.35932 99990,Mstera,1881,VLA,182,RU,56.37889,41.92 100012,Murom,1881,VLA,182,RU,55.575,42.0426 100013,Muromskiy Rayon,1881,VLA,182,RU,55.58333,41.91667 100015,Muromtsevo,1881,VLA,182,RU,55.93096,40.90738 100142,Nikologory,1881,VLA,182,RU,56.1413,41.99218 100217,Novki,1881,VLA,182,RU,56.36386,41.08655 100330,Novovyazniki,1881,VLA,182,RU,56.1975,42.17111 100410,Oktyabr’skiy,1881,VLA,182,RU,56.21887,42.04069 100466,Orgtrud,1881,VLA,182,RU,56.1832,40.6149 100667,Petushinskiy Rayon,1881,VLA,182,RU,55.91667,40.0 100668,Petushki,1881,VLA,182,RU,55.92639,39.46104 100742,Pokrov,1881,VLA,182,RU,55.91797,39.17242 100929,Raduzhnyy,1881,VLA,182,RU,56.0038,40.33905 101426,Sobinka,1881,VLA,182,RU,55.98553,40.01111 101427,Sobinskiy Rayon,1881,VLA,182,RU,56.16667,40.0 101614,Stavrovo,1881,VLA,182,RU,56.13311,40.01295 101615,Stepantsevo,1881,VLA,182,RU,56.13143,41.7032 101635,Strunino,1881,VLA,182,RU,56.37328,38.58321 101644,Sudogda,1881,VLA,182,RU,55.95394,40.86291 101645,Sudogodskiy Rayon,1881,VLA,182,RU,56.0,41.0 101690,Suzdal’,1881,VLA,182,RU,56.42274,40.44668 101691,Suzdal’skiy Rayon,1881,VLA,182,RU,56.08333,40.5 102084,Urshel’skiy,1881,VLA,182,RU,55.67833,40.21692 102214,Velikodvorskiy,1881,VLA,182,RU,55.24996,40.6678 102326,Vladimir,1881,VLA,182,RU,56.13655,40.39658 102386,Vorsha,1881,VLA,182,RU,56.0491,40.07966 102422,Vyazniki,1881,VLA,182,RU,56.24057,42.15563 102603,Yur’yev-Pol’skiy,1881,VLA,182,RU,56.50339,39.67911 102604,Yur’yev-Pol’skiy Rayon,1881,VLA,182,RU,56.58333,39.58333 102764,Zolotkovo,1881,VLA,182,RU,55.5281,41.1053 146860,Alimov-Lyubimovsky,4916,VGG,182,RU,50.26631944,42.75618611 146861,Amochayevsky,4916,VGG,182,RU,50.70363889,42.42831944 146862,Antipovka,4916,VGG,182,RU,49.83,45.31222222 146863,Archedino-Chernushinsky,4916,VGG,182,RU,49.87194444,44.16388889 146864,Archedinskaya,4916,VGG,182,RU,49.89305556,43.1125 146865,Beluzhino-Koldairov,4916,VGG,182,RU,49.280332,43.717955 146866,Bereslavka,4916,VGG,182,RU,48.611909,44.059607 146867,Bobrovsky 2-y,4916,VGG,182,RU,49.4882,42.7547 146868,Burnatsky,4916,VGG,182,RU,50.42997222,42.95563056 146869,Buyerak-Popovsky,4916,VGG,182,RU,49.5506,42.6135 146870,Bykovo Volgograd Oblast,4916,VGG,182,RU,49.76444444,45.39138889 146871,Chernyshkovsky,4916,VGG,182,RU,48.42111111,42.23333333 146872,Chiganaki 1-ye,4916,VGG,182,RU,49.78505833,42.72091944 146873,Chiganaki 2-ye,4916,VGG,182,RU,49.76481389,42.70378889 146874,Danilovka Volgograd Oblast,4916,VGG,182,RU,50.36666667,44.11666667 146875,Dubovka,4916,VGG,182,RU,49.05,44.83333333 146876,Elton,4916,VGG,182,RU,49.12722222,46.84694444 146877,Fastov,4916,VGG,182,RU,49.07411,44.20814 146878,Frolovo,4916,VGG,182,RU,49.77138889,43.66222222 146879,Glubokovsky,4916,VGG,182,RU,49.4633,42.9055 146880,Gorbatovsky,4916,VGG,182,RU,49.3591,42.0406 146881,Gornaya Polyana,4916,VGG,182,RU,48.50138889,45.11944444 146882,Gorodishche Volgograd Oblast,4916,VGG,182,RU,48.8,44.48333333 146883,Ilovlya,4916,VGG,182,RU,49.30333333,43.97972222 146884,Kalach-na-Donu,4916,VGG,182,RU,48.68333333,43.53333333 146885,Kamyshin,4916,VGG,182,RU,50.08333333,45.4 146886,Karpovsky,4916,VGG,182,RU,50.32108056,42.58680278 146887,Kletskaya,4916,VGG,182,RU,49.31472222,43.06194444 146888,Kolotsky,4916,VGG,182,RU,49.25952,43.99259 146889,Kotelnikovo,4916,VGG,182,RU,47.63333333,43.13333333 146890,Kotovo,4916,VGG,182,RU,50.31666667,44.8 146891,Krasnoslobodsk,4916,VGG,182,RU,48.7,44.56666667 146892,Krasny Yar Volgograd Oblast,4916,VGG,182,RU,50.69638889,44.72805556 146893,Kumylzhenskaya,4916,VGG,182,RU,49.88083333,42.58972222 146894,Leninsk,4916,VGG,182,RU,48.7,45.2 146895,Log,4916,VGG,182,RU,49.48444444,43.86138889 146896,Medveditsky,4916,VGG,182,RU,50.78527778,44.71277778 146897,Mikhaylovka,4916,VGG,182,RU,50.06666667,43.23333333 146898,Mikhaylovka Urban Okrug,4916,VGG,182,RU,50.06666667,43.23333333 146899,Mitkin,4916,VGG,182,RU,49.74354167,42.25430833 146900,Nekhayevskaya,4916,VGG,182,RU,50.40861111,41.74944444 146901,Nikolayevsk,4916,VGG,182,RU,50.01666667,45.45 146902,Nizhny Chir,4916,VGG,182,RU,48.35972222,43.08638889 146903,Novoanninsky,4916,VGG,182,RU,50.51666667,42.66666667 146904,Novonikolayevsky Volgograd Oblast,4916,VGG,182,RU,50.9666667,42.3666667 146905,Novonikolskoe,4916,VGG,182,RU,49.193975,45.01108611 146906,Novy Rogachik,4916,VGG,182,RU,48.67694444,44.06083333 146907,Oktyabrsky,4916,VGG,182,RU,48.65555556,43.79555556 146908,Olkhovka Volgograd Oblast,4916,VGG,182,RU,49.85444444,44.56333333 146909,Otruba,4916,VGG,182,RU,50.043,43.1215 146910,Pallasovka,4916,VGG,182,RU,50.05,46.88333333 146911,Petrov Val,4916,VGG,182,RU,50.13333333,45.21666667 146912,Poltavsky,4916,VGG,182,RU,50.3736,43.0729 146913,Popovsky,4916,VGG,182,RU,50.60229722,42.41745278 146914,Preobrazhenskaya Volgograd Oblast,4916,VGG,182,RU,50.74083333,43.05194444 146915,Primorsk,4916,VGG,182,RU,49.26527778,45.02888889 146916,Repino,4916,VGG,182,RU,48.55252,44.79595 146917,Rogachev,4916,VGG,182,RU,50.66952222,42.41200556 146918,Rubyozhny,4916,VGG,182,RU,49.8175,44.05027778 146919,Rudnya Volgograd Oblast,4916,VGG,182,RU,50.79805556,44.56 146920,Russko-Osinovsky,4916,VGG,182,RU,49.975,44.10305556 146921,Samoylovsky,4916,VGG,182,RU,49.87533056,42.39540556 146922,Satarovsky,4916,VGG,182,RU,50.27939722,42.59351944 146923,Savinka,4916,VGG,182,RU,50.07848,47.09936 146924,Sebrovo,4916,VGG,182,RU,50.0981,43.2976 146925,Serafimovich,4916,VGG,182,RU,49.58333333,42.73333333 146926,Shirokov,4916,VGG,182,RU,49.12103,44.26507 146927,Slashchyovskaya,4916,VGG,182,RU,49.86,42.33611111 146928,Sovetsky District,4916,VGG,182,RU,48.66666667,44.45 146929,Srednyaya Akhtuba,4916,VGG,182,RU,48.71111111,44.86403 146930,Staraya Poltavka,4916,VGG,182,RU,50.47861111,46.48222222 146931,Surovikino,4916,VGG,182,RU,48.6,42.85 146932,Svetly Yar,4916,VGG,182,RU,48.47472222,44.78083333 146933,Tochilkin,4916,VGG,182,RU,49.73334722,42.69625278 146934,Uryupinsk,4916,VGG,182,RU,50.8,42.01666667 146935,Vodstroy,4916,VGG,182,RU,48.84593056,44.55466667 146936,Volgograd,4916,VGG,182,RU,48.7,44.48333333 146937,Volzhsky,4916,VGG,182,RU,48.78333333,44.76666667 146938,Voroshilovskiy District Volgograd,4916,VGG,182,RU,48.7,44.46666667 146939,Yelan,4916,VGG,182,RU,50.94611111,43.73638889 146940,Zaplavnoye,4916,VGG,182,RU,48.70472222,45.02277778 146941,Zhirnovsk,4916,VGG,182,RU,50.98333333,44.76666667 97737,Babayevo,1874,VLG,182,RU,59.3936,35.9371 97738,Babayevskiy Rayon,1874,VLG,182,RU,59.5,36.0 97873,Belozërsk,1874,VLG,182,RU,60.0288,37.8084 97874,Belozërskiy Rayon,1874,VLG,182,RU,59.91667,37.25 98108,Chagoda,1874,VLG,182,RU,59.164,35.3285 98109,Chagodoshchenskiy Rayon,1874,VLG,182,RU,59.0,35.41667 98129,Chebsara,1874,VLG,182,RU,59.20016,38.83556 98156,Cherepovets,1874,VLG,182,RU,59.13333,37.9 98157,Cherepovetskiy Rayon,1874,VLG,182,RU,59.33333,37.91667 98419,Ferapontovo,1874,VLG,182,RU,59.95425,38.56745 98526,Goritsy,1874,VLG,182,RU,59.86949,38.26016 98599,Gryazovets,1874,VLG,182,RU,58.88,40.2525 98600,Gryazovetskiy Rayon,1874,VLG,182,RU,58.91667,40.75 98661,Imeni Babushkina,1874,VLG,182,RU,59.75727,43.12847 98672,Imeni Zhelyabova,1874,VLG,182,RU,58.9544,36.5956 98768,Kadnikov,1874,VLG,182,RU,59.50218,40.33803 98771,Kaduy,1874,VLG,182,RU,59.2,37.15 98772,Kaduyskiy Rayon,1874,VLG,182,RU,59.33333,37.0 98966,Kharovsk,1874,VLG,182,RU,59.96425,40.19121 98967,Kharovskiy Rayon,1874,VLG,182,RU,60.08333,40.25 98989,Khokhlovo,1874,VLG,182,RU,59.14923,37.39978 99032,Kichmengskiy Gorodok,1874,VLG,182,RU,59.98164,45.78543 99033,Kichmengsko-Gorodetskiy Rayon,1874,VLG,182,RU,60.0,46.0 99055,Kirillov,1874,VLG,182,RU,59.86299,38.38128 99056,Kirillovskiy Rayon,1874,VLG,182,RU,60.0,38.58333 99274,Krasavino,1874,VLG,182,RU,60.96225,46.48321 99504,Kuzino,1874,VLG,182,RU,59.77665,38.3104 99634,Lipin Bor,1874,VLG,182,RU,60.263,37.9785 99882,Mezhdurechenskiy Rayon,1874,VLG,182,RU,59.25,41.0 99949,Molochnoye,1874,VLG,182,RU,59.29166,39.67868 100026,Myaksa,1874,VLG,182,RU,58.8889,38.1938 100097,Nelazskoye,1874,VLG,182,RU,59.18919,37.63963 100143,Nikol’sk,1874,VLG,182,RU,59.53531,45.45743 100381,Nyuksenitsa,1874,VLG,182,RU,60.41159,44.23309 101142,Sazonovo,1874,VLG,182,RU,59.0919,35.2268 101288,Sheksna,1874,VLG,182,RU,59.20998,38.51066 101289,Sheksninskiy Rayon,1874,VLG,182,RU,59.25,38.58333 101363,Shuyskoye,1874,VLG,182,RU,59.37356,41.03047 101431,Sokol,1874,VLG,182,RU,59.46167,40.12056 101442,Sokol’skiy Rayon,1874,VLG,182,RU,59.5,40.33333 101641,Suda,1874,VLG,182,RU,59.15254,37.5582 101717,Syamzha,1874,VLG,182,RU,60.01577,41.06139 101718,Syamzhenskiy Rayon,1874,VLG,182,RU,60.0,41.25 101777,Tarnogskiy Gorodok,1874,VLG,182,RU,60.49972,43.57611 101778,Tarnogskiy Rayon,1874,VLG,182,RU,60.5,43.5 101890,Tonshalovo,1874,VLG,182,RU,59.19483,37.94746 101907,Tot’ma,1874,VLG,182,RU,59.97375,42.76487 101905,Totemskiy Rayon,1874,VLG,182,RU,59.75,42.5 102133,Ust’-Kubinskiy Rayon,1874,VLG,182,RU,59.91667,39.5 102145,Ust’ye,1874,VLG,182,RU,59.63043,39.73596 102111,Ustyuzhenskiy Rayon,1874,VLG,182,RU,58.83333,36.5 102112,Ustyuzhna,1874,VLG,182,RU,58.8394,36.4321 102212,Velikiy Ustyug,1874,VLG,182,RU,60.76186,46.31352 102218,Velikoustyugskiy Rayon,1874,VLG,182,RU,60.75,46.0 102279,Verkhovazh’ye,1874,VLG,182,RU,60.74717,42.04652 102278,Verkhovazhskiy Rayon,1874,VLG,182,RU,60.58333,42.25 102337,Vokhtoga,1874,VLG,182,RU,58.80949,41.06245 102354,Vologda,1874,VLG,182,RU,59.2239,39.88398 102355,Vologodskiy Rayon,1874,VLG,182,RU,59.16667,39.75 102407,Vozhega,1874,VLG,182,RU,60.47246,40.22134 102453,Vytegorskiy Rayon,1874,VLG,182,RU,61.0,36.5 102454,Vytegra,1874,VLG,182,RU,61.00636,36.44811 102771,Zubovo,1874,VLG,182,RU,60.3181,36.9709 97489,Abramovka,1906,VOR,182,RU,51.1886,41.0202 97633,Anna,1906,VOR,182,RU,51.4842,40.4299 97637,Anninskiy Rayon,1906,VOR,182,RU,51.41667,40.25 97855,Belogor’ye,1906,VOR,182,RU,50.4904,40.0095 97955,Bobrov,1906,VOR,182,RU,51.09611,40.03333 97959,Bobrovskiy Rayon,1906,VOR,182,RU,51.25,40.0 97983,Boguchar,1906,VOR,182,RU,49.93577,40.545 98024,Borisoglebsk,1906,VOR,182,RU,51.36713,42.08494 98088,Buturlinovka,1906,VOR,182,RU,50.82389,40.60917 98089,Buturlinovskiy Rayon,1906,VOR,182,RU,50.83333,40.66667 98251,Davydovka,1906,VOR,182,RU,51.15781,39.42915 98271,Devitsa,1906,VOR,182,RU,51.6352,38.945 98324,Drakino,1906,VOR,182,RU,51.13898,39.40215 98401,Ertil’,1906,VOR,182,RU,51.84056,40.80556 98402,Ertil’skiy Rayon,1906,VOR,182,RU,51.75,40.75 98587,Gribanovskiy,1906,VOR,182,RU,51.45792,41.97637 98588,Gribanovskiy Rayon,1906,VOR,182,RU,51.5,42.0 98664,Imeni Pervogo Maya,1906,VOR,182,RU,50.88997,39.5919 98778,Kalach,1906,VOR,182,RU,50.4258,41.0261 98810,Kamenka,1906,VOR,182,RU,51.3223,42.7678 98822,Kamenskiy Rayon,1906,VOR,182,RU,51.31667,42.76667 98846,Kantemirovka,1906,VOR,182,RU,49.70887,39.85922 98894,Kashirskiy Rayon,1906,VOR,182,RU,51.41667,39.61667 98895,Kashirskoye,1906,VOR,182,RU,51.41945,39.61248 99014,Khrenovoye,1906,VOR,182,RU,51.12,40.28889 99139,Kolodeznyy,1906,VOR,182,RU,51.33333,39.18333 99217,Korotoyak,1906,VOR,182,RU,50.98665,39.17677 99267,Kozlovka,1906,VOR,182,RU,50.86222,40.45556 99327,Krasnolesnyy,1906,VOR,182,RU,51.88072,39.58772 99546,Latnaya,1906,VOR,182,RU,51.6586,38.9011 99637,Liski,1906,VOR,182,RU,50.98405,39.51545 99638,Liskinskiy Rayon,1906,VOR,182,RU,50.91667,39.5 99665,Losevo,1906,VOR,182,RU,50.67667,40.045 99811,Maslovka,1906,VOR,182,RU,51.55346,39.23573 99932,Mitrofanovka,1906,VOR,182,RU,49.97083,39.69389 100151,Nizhnedevitsk,1906,VOR,182,RU,51.5419,38.3657 100152,Nizhnedevitskiy Rayon,1906,VOR,182,RU,51.5,38.41667 100168,Nizhniy Kislyay,1906,VOR,182,RU,50.8497,40.1719 100172,Nizhniy Mamon,1906,VOR,182,RU,50.1937,40.5083 100202,Novaya Chigla,1906,VOR,182,RU,51.22333,40.47806 100211,Novaya Usman’,1906,VOR,182,RU,51.64177,39.40863 100249,Novokhopërsk,1906,VOR,182,RU,51.0969,41.6252 100248,Novokhoperskiy Rayon,1906,VOR,182,RU,51.08333,41.58333 100323,Novousmanskiy Rayon,1906,VOR,182,RU,51.58333,39.41667 100329,Novovoronezh,1906,VOR,182,RU,51.30719,39.21732 100336,Novozhivotinnoye,1906,VOR,182,RU,51.8877,39.16894 100437,Ol’khovatka,1906,VOR,182,RU,50.28308,39.28715 100438,Ol’khovatskiy Rayon,1906,VOR,182,RU,50.25,39.25 100472,Orlovo,1906,VOR,182,RU,51.75397,39.58731 100495,Ostrogozhsk,1906,VOR,182,RU,50.8664,39.07561 100535,Panino,1906,VOR,182,RU,51.6467,40.1346 100536,Paninskiy Rayon,1906,VOR,182,RU,51.66667,40.16667 100572,Pavlovsk,1906,VOR,182,RU,50.45778,40.10806 100580,Pavlovskiy Rayon,1906,VOR,182,RU,50.41667,40.16667 100598,Pereleshino,1906,VOR,182,RU,51.7376,40.1388 100599,Pereleshinskiy,1906,VOR,182,RU,51.7148,40.1953 100713,Podgorenskiy,1906,VOR,182,RU,50.40498,39.64295 100714,Podgorenskiy Rayon,1906,VOR,182,RU,50.5,39.58333 100716,Podgornoye,1906,VOR,182,RU,51.73504,39.14961 100719,Podkletnoye,1906,VOR,182,RU,51.58993,39.4623 100794,Povorino,1906,VOR,182,RU,51.1945,42.2457 100795,Povorinskiy Rayon,1906,VOR,182,RU,51.18333,42.2 100818,Pridonskoy,1906,VOR,182,RU,51.68406,39.0727 100940,Ramon’,1906,VOR,182,RU,51.91569,39.33609 100939,Ramonskiy Rayon,1906,VOR,182,RU,51.91667,39.33333 100963,Rep’yevskiy Rayon,1906,VOR,182,RU,51.16667,38.66667 101004,Rossosh’,1906,VOR,182,RU,51.1209,38.5116 101003,Rossoshanskiy Rayon,1906,VOR,182,RU,50.16667,39.58333 101064,Sadovoye,1906,VOR,182,RU,51.53111,40.50194 101165,Semiluki,1906,VOR,182,RU,51.68525,39.02787 101166,Semilukskiy Rayon,1906,VOR,182,RU,51.66667,39.0 101316,Shilovo,1906,VOR,182,RU,51.54583,39.08917 101407,Sloboda,1906,VOR,182,RU,51.1421,40.3021 101475,Somovo,1906,VOR,182,RU,51.74098,39.36655 101546,Sredniy Ikorets,1906,VOR,182,RU,51.06749,39.75838 101625,Strelitsa,1906,VOR,182,RU,51.6083,38.9102 101755,Talovaya,1906,VOR,182,RU,51.11444,40.73 101834,Ternovka,1906,VOR,182,RU,51.67803,41.6375 101835,Ternovskiy Rayon,1906,VOR,182,RU,51.66667,41.25 102039,Uglyanets,1906,VOR,182,RU,51.81908,39.59606 102093,Uryv-Pokrovka,1906,VOR,182,RU,51.1159,39.16394 102256,Verkhniy Mamon,1906,VOR,182,RU,50.1635,40.3832 102267,Verkhnyaya Khava,1906,VOR,182,RU,51.84045,39.94134 102273,Verkhnyaya Tishanka,1906,VOR,182,RU,51.32389,40.53278 102368,Volya,1906,VOR,182,RU,51.7651,39.5404 102378,Vorob’yevskiy Rayon,1906,VOR,182,RU,50.65,40.93333 102380,Voronezh,1906,VOR,182,RU,51.67204,39.1843 102381,Vorontsovka,1906,VOR,182,RU,50.6132,40.3549 102535,Yelan’-Koleno,1906,VOR,182,RU,51.1523,41.2306 102536,Yelan’-Kolenovskiy,1906,VOR,182,RU,51.1632,41.151 102625,Zabolotovka,1906,VOR,182,RU,50.27799,39.31439 102705,Zemlyansk,1906,VOR,182,RU,51.9041,38.7334 97540,Aksarka,1847,YAN,182,RU,66.56056,67.7975 98604,Gubkinskiy,1847,YAN,182,RU,64.434,76.50261 98968,Kharp,1847,YAN,182,RU,66.80139,65.80806 99216,Korotchaevo,1847,YAN,182,RU,65.91028,78.20917 99531,Labytnangi,1847,YAN,182,RU,66.65722,66.41833 100007,Muravlenko,1847,YAN,182,RU,63.78977,74.52301 100025,Muzhi,1847,YAN,182,RU,65.4003,64.70278 100029,Mys-Kamennyy,1847,YAN,182,RU,68.45972,73.59028 100043,Nadym,1847,YAN,182,RU,65.53333,72.51667 100044,Nadymskiy Rayon,1847,YAN,182,RU,66.0,73.0 100352,Novyy Urengoy,1847,YAN,182,RU,66.08333,76.63333 100364,Noyabrsk,1847,YAN,182,RU,63.19309,75.43728 100378,Nyda,1847,YAN,182,RU,66.62472,72.92278 100534,Pangody,1847,YAN,182,RU,65.85002,74.48593 100844,Priural’skiy Rayon,1847,YAN,182,RU,66.66667,67.66667 100892,Purovskiy Rayon,1847,YAN,182,RU,64.66667,78.0 100893,Purpe,1847,YAN,182,RU,64.48028,76.68972 101079,Salekhard,1847,YAN,182,RU,66.53,66.60194 101354,Shuryshkarskiy Rayon,1847,YAN,182,RU,65.33333,64.0 101606,Staryy Nadym,1847,YAN,182,RU,65.61182,72.68417 101776,Tarko-Sale,1847,YAN,182,RU,64.91611,77.77457 101807,Tazovskiy,1847,YAN,182,RU,67.4715,78.7162 102075,Urengoy,1847,YAN,182,RU,65.9655,78.36929 102490,Yar-Sale,1847,YAN,182,RU,66.8654,70.83784 97892,Berendeyevo,1851,YAR,182,RU,56.60078,39.02173 98006,Bol’shesel’skiy Rayon,1851,YAR,182,RU,57.66667,39.0 98016,Bol’shoye Selo,1851,YAR,182,RU,57.71774,38.93341 98025,Borisoglebskiy,1851,YAR,182,RU,57.2586,39.1508 98026,Borisoglebskiy Rayon,1851,YAR,182,RU,57.33333,39.0 98033,Borok,1851,YAR,182,RU,58.06532,38.2362 98055,Breytovo,1851,YAR,182,RU,58.29925,37.86172 98056,Breytovskiy Rayon,1851,YAR,182,RU,58.25,37.75 98084,Burmakino,1851,YAR,182,RU,57.41663,40.23687 98241,Danilov,1851,YAR,182,RU,58.1908,40.17171 98242,Danilovskiy Rayon,1851,YAR,182,RU,58.16667,40.08333 98336,Dubki,1851,YAR,182,RU,57.3,40.25 98462,Gavrilov-Yam,1851,YAR,182,RU,57.30185,39.85331 98463,Gavrilov-Yamskiy Rayon,1851,YAR,182,RU,57.33333,39.75 98709,Ishnya,1851,YAR,182,RU,57.1907,39.36004 99192,Konstantinovskiy,1851,YAR,182,RU,57.83005,39.58989 99372,Krasnyy Profintern,1851,YAR,182,RU,57.74459,40.43501 99384,Krasnyye Tkachi,1851,YAR,182,RU,57.49259,39.75629 99427,Kukoboy,1851,YAR,182,RU,58.70089,39.91427 99455,Kurba,1851,YAR,182,RU,57.56097,39.4981 99611,Levashevo,1851,YAR,182,RU,57.64451,40.52401 99715,Lyubim,1851,YAR,182,RU,58.3625,40.68433 99716,Lyubimskiy Rayon,1851,YAR,182,RU,58.33333,40.75 100030,Myshkin,1851,YAR,182,RU,57.78973,38.45448 100031,Myshkinskiy Rayon,1851,YAR,182,RU,57.83333,38.41667 100090,Nekouzskiy Rayon,1851,YAR,182,RU,58.0,38.0 100095,Nekrasovskiy Rayon,1851,YAR,182,RU,57.66667,40.41667 100096,Nekrasovskoye,1851,YAR,182,RU,57.67663,40.36567 100347,Novyy Nekouz,1851,YAR,182,RU,57.90286,38.07004 100604,Pereslavl’-Zalesskiy,1851,YAR,182,RU,56.73934,38.85626 100605,Pereslavskiy Rayon,1851,YAR,182,RU,56.75,38.83333 100622,Pervomayskiy Rayon,1851,YAR,182,RU,58.66667,39.75 100636,Pesochnoye,1851,YAR,182,RU,58.00597,39.17717 100659,Petrovsk,1851,YAR,182,RU,57.01039,39.26928 100774,Porech’ye-Rybnoye,1851,YAR,182,RU,57.09805,39.38354 100785,Poshekhon’ye,1851,YAR,182,RU,58.49928,39.13531 100784,Poshekhonskiy Rayon,1851,YAR,182,RU,58.66667,39.08333 100807,Prechistoye,1851,YAR,182,RU,58.42068,40.34017 101006,Rostov,1851,YAR,182,RU,57.1914,39.41394 101009,Rostovskiy Rayon,1851,YAR,182,RU,57.16667,39.5 101048,Rybinsk,1851,YAR,182,RU,58.0446,38.84259 101049,Rybinskiy Rayon,1851,YAR,182,RU,58.0,39.0 101162,Semibratovo,1851,YAR,182,RU,57.30461,39.53688 101646,Sudoverf’,1851,YAR,182,RU,58.11696,38.64175 101971,Tunoshna,1851,YAR,182,RU,57.54589,40.12543 101984,Tutayev,1851,YAR,182,RU,57.88529,39.5406 101985,Tutayevskiy Rayon,1851,YAR,182,RU,57.91667,39.58333 102034,Uglich,1851,YAR,182,RU,57.5275,38.33167 102035,Uglichskiy Rayon,1851,YAR,182,RU,57.5,38.41667 102342,Volga,1851,YAR,182,RU,57.95157,38.38785 102499,Yaroslavl,1851,YAR,182,RU,57.62987,39.87368 102503,Yaroslavskiy Rayon,1851,YAR,182,RU,57.58333,40.0 97518,Aginskoye,1904,ZAB,182,RU,51.1,114.53 97543,Aksha,1904,ZAB,182,RU,50.28139,113.28667 97544,Akshinskiy Rayon,1904,ZAB,182,RU,50.25,113.25 97567,Aleksandrovo-Zavodskiy Rayon,1904,ZAB,182,RU,50.91667,117.95 97573,Aleksandrovskiy Zavod,1904,ZAB,182,RU,50.92525,117.93773 97611,Amazar,1904,ZAB,182,RU,53.86033,120.87925 97707,Atamanovka,1904,ZAB,182,RU,51.93333,113.63333 97750,Bada,1904,ZAB,182,RU,51.391,109.86145 97776,Baley,1904,ZAB,182,RU,51.58166,116.63395 97777,Baleyskiy Rayon,1904,ZAB,182,RU,51.5,117.0 97785,Balyaga,1904,ZAB,182,RU,51.15293,108.92767 98001,Bol’shaya Tura,1904,ZAB,182,RU,51.61642,114.11242 98044,Borzinskiy Rayon,1904,ZAB,182,RU,50.16667,117.33333 98046,Borzya,1904,ZAB,182,RU,50.38333,116.51667 98073,Bukachacha,1904,ZAB,182,RU,52.98333,116.91667 98118,Chara,1904,ZAB,182,RU,56.90639,118.26306 98180,Chernyshevsk,1904,ZAB,182,RU,52.52209,117.01712 98204,Chita,1904,ZAB,182,RU,52.03171,113.50087 98205,Chitinskiy Rayon,1904,ZAB,182,RU,52.0,113.50024 98246,Darasun,1904,ZAB,182,RU,51.6594,113.97515 98248,Dauriya,1904,ZAB,182,RU,49.93333,116.86667 98306,Domna,1904,ZAB,182,RU,51.89712,113.1573 98326,Drovyanaya,1904,ZAB,182,RU,51.5762,113.04078 98353,Dul’durga,1904,ZAB,182,RU,50.67611,113.59306 98468,Gazimuro-Zavodskiy Rayon,1904,ZAB,182,RU,51.55,118.36667 98469,Gazimurskiy Zavod,1904,ZAB,182,RU,51.55352,118.3446 98767,Kadaya,1904,ZAB,182,RU,50.93254,119.29468 98780,Kalanguy,1904,ZAB,182,RU,51.01667,116.51667 98783,Kalga,1904,ZAB,182,RU,50.92538,118.89958 98889,Karymskoye,1904,ZAB,182,RU,51.61667,114.35 98979,Khilok,1904,ZAB,182,RU,51.36777,110.46804 98991,Kholbon,1904,ZAB,182,RU,51.88333,116.25 99100,Klichka,1904,ZAB,182,RU,50.4457,117.996 99110,Klyuchevskiy,1904,ZAB,182,RU,53.5336,119.45269 99135,Kokuy,1904,ZAB,182,RU,52.20634,117.55412 99320,Krasnokamensk,1904,ZAB,182,RU,50.0979,118.0369 99361,Krasnyy Chikoy,1904,ZAB,182,RU,50.36321,108.75445 99412,Kuanda,1904,ZAB,182,RU,56.31611,116.08056 99468,Kurort-Darasun,1904,ZAB,182,RU,51.19905,113.71599 99518,Kyra,1904,ZAB,182,RU,49.57903,111.97638 99745,Makkaveyevo,1904,ZAB,182,RU,51.75325,113.9454 99939,Mogocha,1904,ZAB,182,RU,53.73417,119.76515 99940,Mogoytuy,1904,ZAB,182,RU,51.28333,114.91667 99941,Mogzon,1904,ZAB,182,RU,51.7406,111.96555 100104,Nerchinsk,1904,ZAB,182,RU,51.98333,116.58333 100105,Nerchinskiy Zavod,1904,ZAB,182,RU,51.30829,119.61597 100106,Nerchinsko-Zavodskiy Rayon,1904,ZAB,182,RU,51.31667,119.6 100176,Nizhniy Tsasuchey,1904,ZAB,182,RU,50.51667,115.13333 100201,Novaya Chara,1904,ZAB,182,RU,56.81639,118.29861 100253,Novokruchininskiy,1904,ZAB,182,RU,51.7836,113.77591 100273,Novoorlovsk,1904,ZAB,182,RU,51.07549,114.7261 100277,Novopavlovka,1904,ZAB,182,RU,51.21724,109.21305 100425,Olovyannaya,1904,ZAB,182,RU,50.95,115.56667 100426,Olovyanninskiy Rayon,1904,ZAB,182,RU,51.0,116.16667 100474,Orlovskiy,1904,ZAB,182,RU,51.03333,114.83333 100621,Pervomayskiy,1904,ZAB,182,RU,51.67013,115.62543 100660,Petrovsk-Zabaykal’skiy,1904,ZAB,182,RU,51.2753,108.84301 100814,Priargunsk,1904,ZAB,182,RU,50.3691,119.1012 100815,Priargunskiy Rayon,1904,ZAB,182,RU,50.75,118.5 100823,Priiskovyy,1904,ZAB,182,RU,51.93333,116.63333 101293,Shelopugino,1904,ZAB,182,RU,51.65286,117.56303 101313,Shilka,1904,ZAB,182,RU,51.85,116.03333 101314,Shilkinskiy Rayon,1904,ZAB,182,RU,52.0,115.66667 101414,Smolenka,1904,ZAB,182,RU,52.13523,113.4974 101548,Sretensk,1904,ZAB,182,RU,52.2478,117.70835 101549,Sretenskiy Rayon,1904,ZAB,182,RU,52.33333,117.83333 101771,Tarbagatay,1904,ZAB,182,RU,51.17559,109.09484 102045,Uletovskiy Rayon,1904,ZAB,182,RU,51.0,112.0 102046,Ulety,1904,ZAB,182,RU,51.35589,112.4843 102128,Ust’-Karsk,1904,ZAB,182,RU,52.70206,118.80163 102235,Verkh-Usugli,1904,ZAB,182,RU,52.7,115.16667 102285,Vershino-Darasunskiy,1904,ZAB,182,RU,52.36604,115.52661 102286,Vershino-Shakhtaminskiy,1904,ZAB,182,RU,51.30024,117.88762 102624,Zabaykal’sk,1904,ZAB,182,RU,49.6513,117.32557 102733,Zhireken,1904,ZAB,182,RU,52.82657,117.30725 104693,Acquaviva,59,01,192,SM,43.94593,12.4185 104694,Borgo Maggiore,61,06,192,SM,43.94193,12.44738 104699,Poggio di Chiesanuova,60,02,192,SM,43.90451,12.42142 104695,Domagnano,64,03,192,SM,43.94961,12.46828 104696,Faetano,62,04,192,SM,43.92831,12.49798 104697,Fiorentino,66,05,192,SM,43.91001,12.45738 104698,Monte Giardino,63,08,192,SM,43.90878,12.48201 104700,San Marino,58,07,192,SM,43.93667,12.44639 104701,Serravalle,65,09,192,SM,43.96897,12.48167 97147,Aranđelovac,3716,02,196,RS,44.30694,20.56 97148,Arilje,3716,02,196,RS,43.75306,20.09556 97149,Badovinci,3716,02,196,RS,44.78534,19.37146 97150,Bajina Bašta,3716,02,196,RS,43.97083,19.5675 97157,Banovo Polje,3716,02,196,RS,44.9104,19.44916 97160,Barič,3716,02,196,RS,44.6507,20.25941 97174,Bečmen,3716,02,196,RS,44.77983,20.20577 97170,Belgrade,3716,02,196,RS,44.80401,20.46513 97172,Belotić,3716,02,196,RS,44.81782,19.54801 97176,Biljača,3716,02,196,RS,42.35518,21.74781 97177,Bogatić,3716,02,196,RS,44.8375,19.48056 97179,Bogosavac,3716,02,196,RS,44.71799,19.59533 97181,Boljevci,3716,02,196,RS,44.72355,20.22348 97182,Bor,3716,02,196,RS,44.36667,22.25 97186,Brdarica,3716,02,196,RS,44.55376,19.7715 97187,Bukor,3716,02,196,RS,44.49523,19.57116 97457,Čačak,3716,02,196,RS,43.89139,20.34972 97456,Čajetina,3716,02,196,RS,43.74977,19.71273 97454,Ćićevac,3716,02,196,RS,43.71882,21.44085 97462,Čokešina,3716,02,196,RS,44.65319,19.39016 97190,Crna Bara,3716,02,196,RS,44.87374,19.3948 97455,Ćuprija,3716,02,196,RS,43.9275,21.37 97193,Dobanovci,3716,02,196,RS,44.82631,20.22487 97195,Dobrić,3716,02,196,RS,44.70224,19.57931 97196,Donji Dobrić,3716,02,196,RS,44.61183,19.33109 97197,Donji Milanovac,3716,02,196,RS,44.46593,22.1517 97199,Draginje,3716,02,196,RS,44.53302,19.7625 97200,Drenovac,3716,02,196,RS,44.86649,19.70943 97201,Dublje,3716,02,196,RS,44.80117,19.50902 97202,Duboka,3716,02,196,RS,44.52223,21.7603 97452,Ðurići,3716,02,196,RS,43.82533,19.41233 97209,Glušci,3716,02,196,RS,44.89021,19.54913 97210,Golubac,3716,02,196,RS,44.65296,21.63199 97212,Gornja Bukovica,3716,02,196,RS,44.33987,19.81368 97214,Gornji Milanovac,3716,02,196,RS,44.02603,20.46152 97215,Grabovac,3716,02,196,RS,44.60049,20.08539 97226,Jablanica,3716,02,196,RS,42.99528,21.91778 97227,Jadranska Lešnica,3716,02,196,RS,44.5973,19.35209 97228,Jagodina,3716,02,196,RS,43.97713,21.26121 97231,Jarebice,3716,02,196,RS,44.53995,19.42418 97235,Jelenča,3716,02,196,RS,44.727,19.735 97237,Jevremovac,3716,02,196,RS,44.72172,19.66364 97238,Joševa,3716,02,196,RS,44.58772,19.40967 97239,Kamenica,3716,02,196,RS,44.343,19.72333 97245,Klenje,3716,02,196,RS,44.80794,19.43508 97247,Knjazevac,3716,02,196,RS,43.56634,22.25701 97248,Kolubara,3716,02,196,RS,44.26333,19.8875 97255,Kozjak,3716,02,196,RS,44.58727,19.28412 97256,Kragujevac,3716,02,196,RS,44.01667,20.91667 97258,Kraljevo,3716,02,196,RS,43.72583,20.68944 97259,Krivaja,3716,02,196,RS,44.55021,19.59153 97260,Krupanj,3716,02,196,RS,44.36556,19.36194 97261,Kruševac,3716,02,196,RS,43.58,21.33389 97268,Lagja e Poshtme,3716,02,196,RS,42.38853,21.72971 97269,Lapovo,3716,02,196,RS,44.18424,21.09727 97270,Lazarevac,3716,02,196,RS,44.38534,20.2557 97272,Leskovac,3716,02,196,RS,42.99806,21.94611 97273,Lešnica,3716,02,196,RS,44.6525,19.31 97274,Lipnički Šor,3716,02,196,RS,44.58058,19.26572 97275,Lipolist,3716,02,196,RS,44.69783,19.50101 97276,Ljig,3716,02,196,RS,44.23007,20.23819 97277,Ljubovija,3716,02,196,RS,44.18944,19.37667 97281,Lugavčina,3716,02,196,RS,44.52314,21.07083 97289,Mačva,3716,02,196,RS,44.61472,19.47222 97284,Majdanpek,3716,02,196,RS,44.42771,21.94596 97285,Majur,3716,02,196,RS,44.77105,19.65512 97286,Mala Moštanica,3716,02,196,RS,44.63834,20.306 97287,Mali Zvornik,3716,02,196,RS,44.37344,19.10651 97292,Metković,3716,02,196,RS,44.85617,19.54654 97295,Miratovac,3716,02,196,RS,42.25846,21.66456 97298,Morava,3716,02,196,RS,43.80389,20.17806 97301,Negotin,3716,02,196,RS,44.22639,22.53083 97305,Niš,3716,02,196,RS,43.32472,21.90333 97306,Nišava,3716,02,196,RS,43.32306,21.89444 97314,Novi Pazar,3716,02,196,RS,43.13667,20.51222 97318,Novo Selo,3716,02,196,RS,44.67041,19.34495 97319,Obrenovac,3716,02,196,RS,44.65486,20.20017 97323,Osečina,3716,02,196,RS,44.37306,19.60139 97324,Osječenik,3716,02,196,RS,43.14528,19.85889 97326,Ostružnica,3716,02,196,RS,44.72769,20.31845 97327,Ovča,3716,02,196,RS,44.88349,20.53336 97331,Paraćin,3716,02,196,RS,43.86083,21.40778 97351,Pčinja,3716,02,196,RS,42.56278,21.8825 97334,Petkovica,3716,02,196,RS,44.66627,19.43923 97337,Pirot,3716,02,196,RS,43.17528,22.59278 97340,Pocerski Pričinović,3716,02,196,RS,44.72222,19.70722 97341,Podunavlje District,3716,02,196,RS,44.48417,20.91167 97342,Pomoravlje,3716,02,196,RS,43.93667,21.40222 97343,Požarevac,3716,02,196,RS,44.62133,21.18782 97344,Priboj,3716,02,196,RS,43.58306,19.52519 97346,Prijepolje,3716,02,196,RS,43.38996,19.6487 97347,Prislonica,3716,02,196,RS,43.95223,20.43521 97348,Prnjavor,3716,02,196,RS,44.70061,19.38695 97349,Prokuplje,3716,02,196,RS,43.23417,21.58806 97352,Radenka,3716,02,196,RS,44.58345,21.76469 97355,Radovnica,3716,02,196,RS,42.43364,22.22861 97356,Rajince,3716,02,196,RS,42.3787,21.69591 97357,Rasina,3716,02,196,RS,43.55917,21.21472 97361,Raška,3716,02,196,RS,43.26694,20.65278 97362,Ribari,3716,02,196,RS,44.70961,19.42472 97366,Rumska,3716,02,196,RS,44.57261,19.58988 97368,Rušanj,3716,02,196,RS,44.68477,20.44993 97465,Šabac,3716,02,196,RS,44.74667,19.69 97371,Salaš Crnobarski,3716,02,196,RS,44.82843,19.39437 97373,Samoljica,3716,02,196,RS,42.38445,21.73708 97468,Ševarice,3716,02,196,RS,44.86704,19.66006 97469,Ševica,3716,02,196,RS,44.50883,21.72296 97380,Sinošević,3716,02,196,RS,44.61503,19.63601 97381,Sjenica,3716,02,196,RS,43.27306,19.99944 97382,Smederevo,3716,02,196,RS,44.66436,20.92763 97383,Smederevska Palanka,3716,02,196,RS,44.36548,20.95885 97384,Sokolovica,3716,02,196,RS,43.21528,20.31556 97385,Sokolovo Brdo,3716,02,196,RS,43.13694,19.80556 97390,Sremčica,3716,02,196,RS,44.67653,20.39232 97399,Stepojevac,3716,02,196,RS,44.51278,20.295 97471,Štitar,3716,02,196,RS,44.79415,19.59529 97400,Stubline,3716,02,196,RS,44.57476,20.13477 97472,Šumadija,3716,02,196,RS,44.00222,20.91778 97402,Sumulicë,3716,02,196,RS,42.38682,21.734 97404,Surčin,3716,02,196,RS,44.79306,20.28028 97406,Tabanović,3716,02,196,RS,44.82018,19.64128 97412,Toplica,3716,02,196,RS,43.14194,21.27806 97416,Tršić,3716,02,196,RS,44.49502,19.2649 97415,Trstenik,3716,02,196,RS,43.61694,21.0025 97417,Turija,3716,02,196,RS,44.52273,21.63945 97418,Tutin,3716,02,196,RS,42.99028,20.33139 97419,Ugrinovci,3716,02,196,RS,44.87635,20.18763 97421,Umka,3716,02,196,RS,44.67806,20.30472 97424,Užice,3716,02,196,RS,43.85861,19.84878 97423,Uzveće,3716,02,196,RS,44.87861,19.60356 97425,Valjevo,3716,02,196,RS,44.27513,19.89821 97426,Varna,3716,02,196,RS,44.67914,19.6515 97428,Velika Moštanica,3716,02,196,RS,44.66486,20.35395 97434,Vladimirci,3716,02,196,RS,44.61472,19.78528 97439,Vranić,3716,02,196,RS,44.60237,20.32872 97440,Vranje,3716,02,196,RS,42.55139,21.90028 97443,Vrnjačka Banja,3716,02,196,RS,43.62725,20.89634 97445,Zaječar,3716,02,196,RS,43.69917,21.98778 97446,Zemun,3716,02,196,RS,44.8458,20.40116 97447,Zlatibor,3716,02,196,RS,43.729,19.70029 97449,Zminjak,3716,02,196,RS,44.75711,19.4707 97475,Žujince,3716,02,196,RS,42.31568,21.70212 97451,Zvečka,3716,02,196,RS,44.64025,20.16432 97142,Adorjan,3733,VO,196,RS,46.00333,20.04007 97143,Aleksandrovo,3733,VO,196,RS,45.63755,20.59288 97144,Alibunar,3733,VO,196,RS,45.08083,20.96583 97145,Apatin,3733,VO,196,RS,45.6726,18.978 97146,Aradac,3733,VO,196,RS,45.38346,20.30137 97161,Bačka Palanka,3733,VO,196,RS,45.24966,19.39664 97162,Bačka Topola,3733,VO,196,RS,45.81516,19.6318 97163,Bački Breg,3733,VO,196,RS,45.92034,18.92944 97164,Bački Petrovac,3733,VO,196,RS,45.36056,19.59167 97165,Bačko Gradište,3733,VO,196,RS,45.53271,20.03082 97166,Bačko Petrovo Selo,3733,VO,196,RS,45.70681,20.07928 97151,Banatska Topola,3733,VO,196,RS,45.67248,20.4653 97152,Banatski Despotovac,3733,VO,196,RS,45.36606,20.66407 97153,Banatski Dvor,3733,VO,196,RS,45.51866,20.51146 97154,Banatski Karlovac,3733,VO,196,RS,45.04987,21.018 97155,Banatsko Karađorđevo,3733,VO,196,RS,45.58693,20.56421 97156,Banatsko Veliko Selo,3733,VO,196,RS,45.81961,20.60772 97158,Baranda,3733,VO,196,RS,45.08459,20.44264 97159,Barice,3733,VO,196,RS,45.18189,21.08279 97167,Bašaid,3733,VO,196,RS,45.64102,20.41434 97173,Bečej,3733,VO,196,RS,45.61632,20.03331 97168,Bela Crkva,3733,VO,196,RS,44.8975,21.41722 97169,Belegiš,3733,VO,196,RS,45.0192,20.33323 97171,Belo Blato,3733,VO,196,RS,45.27278,20.375 97175,Beška,3733,VO,196,RS,45.13092,20.06698 97185,Bočar,3733,VO,196,RS,45.76994,20.2839 97178,Bogojevo,3733,VO,196,RS,45.53015,19.13022 97180,Boka,3733,VO,196,RS,45.3554,20.82987 97183,Bosut,3733,VO,196,RS,44.92977,19.36086 97184,Botoš,3733,VO,196,RS,45.30837,20.63514 97188,Buđanovci,3733,VO,196,RS,44.89388,19.86344 97458,Čelarevo,3733,VO,196,RS,45.26999,19.52484 97459,Čenta,3733,VO,196,RS,45.10814,20.38947 97460,Čestereg,3733,VO,196,RS,45.56361,20.53194 97461,Čoka,3733,VO,196,RS,45.9425,20.14333 97463,Čortanovci,3733,VO,196,RS,45.1546,20.01851 97189,Crepaja,3733,VO,196,RS,45.00984,20.63702 97464,Čurug,3733,VO,196,RS,45.47221,20.06861 97191,Debeljača,3733,VO,196,RS,45.0707,20.60153 97192,Despotovo,3733,VO,196,RS,45.45983,19.52653 97194,Dobrica,3733,VO,196,RS,45.21339,20.84995 97198,Doroslovo,3733,VO,196,RS,45.60699,19.18868 97453,Ðurđevo,3733,VO,196,RS,45.32591,20.06532 97204,Ečka,3733,VO,196,RS,45.32328,20.44294 97203,Elemir,3733,VO,196,RS,45.44263,20.30003 97205,Farkaždin,3733,VO,196,RS,45.19172,20.47239 97206,Gakovo,3733,VO,196,RS,45.90078,19.06138 97207,Gardinovci,3733,VO,196,RS,45.20359,20.13558 97208,Gložan,3733,VO,196,RS,45.27954,19.56838 97211,Golubinci,3733,VO,196,RS,44.98533,20.06339 97213,Gornji Breg,3733,VO,196,RS,45.91995,20.01766 97216,Grabovci,3733,VO,196,RS,44.76496,19.84489 97217,Gudurica,3733,VO,196,RS,45.16816,21.44264 97218,Hajdučica,3733,VO,196,RS,45.2501,20.96016 97219,Hetin,3733,VO,196,RS,45.66202,20.79138 97220,Hrtkovci,3733,VO,196,RS,44.88155,19.76374 97221,Idvor,3733,VO,196,RS,45.18895,20.51442 97222,Ilandža,3733,VO,196,RS,45.16897,20.92008 97223,Inđija,3733,VO,196,RS,45.04816,20.08165 97224,Irig,3733,VO,196,RS,45.0523,19.84448 97225,Izbište,3733,VO,196,RS,45.02253,21.18388 97229,Janošik,3733,VO,196,RS,45.17141,21.00658 97230,Jarak,3733,VO,196,RS,44.91843,19.75477 97232,Jarkovac,3733,VO,196,RS,45.26985,20.76078 97234,Jaša Tomić,3733,VO,196,RS,45.44725,20.85546 97233,Jazovo,3733,VO,196,RS,45.89876,20.2213 97236,Jermenovci,3733,VO,196,RS,45.18635,21.0455 97240,Kanjiža,3733,VO,196,RS,46.06667,20.05 97241,Kikinda,3733,VO,196,RS,45.82972,20.46528 97242,Kisač,3733,VO,196,RS,45.35421,19.72975 97243,Klek,3733,VO,196,RS,45.42254,20.48049 97244,Klenak,3733,VO,196,RS,44.78846,19.71004 97246,Knićanin,3733,VO,196,RS,45.18675,20.319 97249,Kolut,3733,VO,196,RS,45.89292,18.9276 97250,Konak,3733,VO,196,RS,45.31575,20.91468 97251,Kovačica,3733,VO,196,RS,45.11167,20.62139 97252,Kovilj,3733,VO,196,RS,45.23422,20.02327 97253,Kovin,3733,VO,196,RS,44.7475,20.97611 97254,Kozjak,3733,VO,196,RS,45.18264,20.86381 97257,Krajišnik,3733,VO,196,RS,45.45283,20.72976 97262,Krčedin,3733,VO,196,RS,45.13871,20.13308 97263,Kulpin,3733,VO,196,RS,45.4024,19.58814 97264,Kumane,3733,VO,196,RS,45.53946,20.22902 97265,Kupinovo,3733,VO,196,RS,44.70708,20.04959 97266,Kupusina,3733,VO,196,RS,45.73759,19.01082 97267,Kuštilj,3733,VO,196,RS,45.03487,21.37989 97271,Lazarevo,3733,VO,196,RS,45.38893,20.53999 97278,Ljukovo,3733,VO,196,RS,45.02604,20.02737 97279,Lok,3733,VO,196,RS,45.21583,20.21222 97280,Lokve,3733,VO,196,RS,45.15198,21.03073 97282,Lukićevo,3733,VO,196,RS,45.33815,20.49895 97290,Mačvanska Mitrovica,3733,VO,196,RS,44.96739,19.59314 97283,Maglić,3733,VO,196,RS,45.36248,19.53211 97288,Margita,3733,VO,196,RS,45.21598,21.17527 97293,Međa,3733,VO,196,RS,45.53815,20.80677 97291,Melenci,3733,VO,196,RS,45.5168,20.31961 97294,Mihajlovo,3733,VO,196,RS,45.47085,20.41508 97296,Mokrin,3733,VO,196,RS,45.93362,20.41215 97297,Mol,3733,VO,196,RS,45.76457,20.13286 97299,Mošorin,3733,VO,196,RS,45.30196,20.16919 97300,Nakovo,3733,VO,196,RS,45.87503,20.56709 97302,Neuzina,3733,VO,196,RS,45.3446,20.71418 97303,Nikinci,3733,VO,196,RS,44.85017,19.82321 97304,Nikolinci,3733,VO,196,RS,45.05245,21.06695 97307,Nova Crnja,3733,VO,196,RS,45.66833,20.605 97308,Nova Pazova,3733,VO,196,RS,44.94366,20.21931 97309,Novi Banovci,3733,VO,196,RS,44.95691,20.28076 97310,Novi Itebej,3733,VO,196,RS,45.55918,20.7003 97311,Novi Karlovci,3733,VO,196,RS,45.07636,20.17948 97312,Novi Kneževac,3733,VO,196,RS,46.05,20.1 97313,Novi Kozarci,3733,VO,196,RS,45.78241,20.62289 97315,Novi Sad,3733,VO,196,RS,45.25167,19.83694 97316,Novi Slankamen,3733,VO,196,RS,45.12554,20.23914 97317,Novo Miloševo,3733,VO,196,RS,45.71916,20.30364 97320,Obrovac,3733,VO,196,RS,45.32106,19.35048 97321,Opovo,3733,VO,196,RS,45.05222,20.43028 97322,Orlovat,3733,VO,196,RS,45.24171,20.58089 97325,Ostojićevo,3733,VO,196,RS,45.88863,20.16642 97328,Padej,3733,VO,196,RS,45.82756,20.16279 97329,Padina,3733,VO,196,RS,45.11988,20.7286 97330,Pančevo,3733,VO,196,RS,44.87177,20.64167 97332,Pavliš,3733,VO,196,RS,45.10569,21.23952 97336,Pećinci,3733,VO,196,RS,44.90889,19.96639 97333,Perlez,3733,VO,196,RS,45.20813,20.38197 97335,Petrovaradin,3733,VO,196,RS,45.24667,19.87944 97338,Plandište,3733,VO,196,RS,45.22722,21.12167 97339,Platičevo,3733,VO,196,RS,44.82213,19.79487 97345,Prigrevica,3733,VO,196,RS,45.67636,19.08809 97350,Putinci,3733,VO,196,RS,44.99259,19.97102 97353,Radenković,3733,VO,196,RS,44.92191,19.49543 97354,Radojevo,3733,VO,196,RS,45.74617,20.78917 97358,Ravni Topolovac,3733,VO,196,RS,45.46082,20.56939 97359,Ravnje,3733,VO,196,RS,44.94326,19.4228 97360,Ravno Selo,3733,VO,196,RS,45.44967,19.62097 97363,Riđica,3733,VO,196,RS,45.99088,19.10635 97364,Ruma,3733,VO,196,RS,45.00806,19.82222 97365,Rumenka,3733,VO,196,RS,45.294,19.74306 97367,Rusko Selo,3733,VO,196,RS,45.76291,20.57117 97369,Sajan,3733,VO,196,RS,45.84227,20.27815 97466,Šajkaš,3733,VO,196,RS,45.27315,20.09051 97370,Sakule,3733,VO,196,RS,45.14667,20.48619 97372,Salaš Noćajski,3733,VO,196,RS,44.94722,19.58611 97374,Samoš,3733,VO,196,RS,45.20255,20.77392 97375,Sanad,3733,VO,196,RS,45.97596,20.10816 97467,Šašinci,3733,VO,196,RS,44.96514,19.74151 97379,Sečanj,3733,VO,196,RS,45.36667,20.77222 97376,Sefkerin,3733,VO,196,RS,45.00501,20.48256 97377,Seleuš,3733,VO,196,RS,45.1277,20.91461 97378,Senta,3733,VO,196,RS,45.9275,20.07722 97470,Šimanovci,3733,VO,196,RS,44.87393,20.09175 97386,Sombor,3733,VO,196,RS,45.77417,19.11222 97387,Sonta,3733,VO,196,RS,45.59427,19.09719 97388,Sremska Mitrovica,3733,VO,196,RS,44.97639,19.61222 97389,Sremski Karlovci,3733,VO,196,RS,45.20285,19.93373 97391,Srpska Crnja,3733,VO,196,RS,45.72538,20.69008 97392,Srpski Itebej,3733,VO,196,RS,45.56715,20.7135 97393,Stajićevo,3733,VO,196,RS,45.29489,20.45845 97394,Stanišić,3733,VO,196,RS,45.93895,19.16709 97395,Stara Pazova,3733,VO,196,RS,44.985,20.16083 97396,Stari Banovci,3733,VO,196,RS,44.9842,20.28382 97397,Stari Lec,3733,VO,196,RS,45.28401,20.96433 97398,Stepanovićevo,3733,VO,196,RS,45.41369,19.7 97401,Subotica,3733,VO,196,RS,46.1,19.66667 97403,Surduk,3733,VO,196,RS,45.07118,20.3251 97405,Sutjeska,3733,VO,196,RS,45.38312,20.6962 97407,Taraš,3733,VO,196,RS,45.46737,20.19867 97408,Tiszahegyes,3733,VO,196,RS,45.82648,20.31791 97409,Titel,3733,VO,196,RS,45.20611,20.29444 97410,Toba,3733,VO,196,RS,45.68943,20.55714 97411,Tomaševac,3733,VO,196,RS,45.26855,20.62272 97413,Torak,3733,VO,196,RS,45.50928,20.609 97414,Torda,3733,VO,196,RS,45.58423,20.459 97420,Uljma,3733,VO,196,RS,45.04213,21.15393 97422,Uzdin,3733,VO,196,RS,45.20512,20.62342 97427,Velika Greda,3733,VO,196,RS,45.24376,21.03498 97429,Veliki Gaj,3733,VO,196,RS,45.28849,21.17057 97430,Veliko Središte,3733,VO,196,RS,45.17919,21.40353 97431,Veternik,3733,VO,196,RS,45.25446,19.7588 97432,Vilovo,3733,VO,196,RS,45.24859,20.15521 97433,Višnjićevo,3733,VO,196,RS,44.96731,19.28993 97435,Vladimirovac,3733,VO,196,RS,45.03122,20.86566 97436,Vlajkovac,3733,VO,196,RS,45.07207,21.19945 97437,Vojka,3733,VO,196,RS,44.93713,20.15236 97438,Vojvoda Stepa,3733,VO,196,RS,45.68537,20.65536 97441,Vrbas,3733,VO,196,RS,45.57139,19.64083 97442,Vrdnik,3733,VO,196,RS,45.12174,19.79227 97444,Vršac,3733,VO,196,RS,45.11667,21.30361 97473,Žabalj,3733,VO,196,RS,45.37222,20.06389 97474,Žitište,3733,VO,196,RS,45.485,20.54972 97448,Zmajevo,3733,VO,196,RS,45.45408,19.6905 97450,Zrenjanin,3733,VO,196,RS,45.38361,20.38194 104370,Banská Bystrica,4352,BC,200,SK,48.73946,19.15349 104371,Banská Štiavnica,4352,BC,200,SK,48.44858,18.91003 104376,Brezno,4352,BC,200,SK,48.80431,19.63631 104589,Čierny Balog,4352,BC,200,SK,48.74722,19.65125 104381,Detva,4352,BC,200,SK,48.56082,19.41954 104385,Dudince,4352,BC,200,SK,48.17135,18.88782 104388,Fiľakovo,4352,BC,200,SK,48.26757,19.82473 104397,Hriňová,4352,BC,200,SK,48.57787,19.52574 104398,HrochoťSlovakia,4352,BC,200,SK,48.65567,19.31284 104408,Kováčová,4352,BC,200,SK,48.60148,19.10252 104415,Kremnica,4352,BC,200,SK,48.70519,18.91834 104417,Krupina,4352,BC,200,SK,48.3554,19.06474 104426,Lučenec,4352,BC,200,SK,48.33249,19.66708 104440,Nová Baňa,4352,BC,200,SK,48.42305,18.64037 104447,Okres Banská Bystrica,4352,BC,200,SK,48.73333,19.15 104448,Okres Banská Štiavnica,4352,BC,200,SK,48.44961,18.9082 104455,Okres Brezno,4352,BC,200,SK,48.8,19.75 104458,Okres Detva,4352,BC,200,SK,48.55985,19.42044 104469,Okres Krupina,4352,BC,200,SK,48.35736,19.06334 104474,Okres Lučenec,4352,BC,200,SK,48.33333,19.66667 104487,Okres Poltár,4352,BC,200,SK,48.42895,19.79488 104493,Okres Revúca,4352,BC,200,SK,48.683,20.11568 104512,Okres Veľký Krtíš,4352,BC,200,SK,48.2,19.35 104518,Okres Žarnovica,4352,BC,200,SK,48.48438,18.72076 104519,Okres Žiar nad Hronom,4352,BC,200,SK,48.58333,18.86667 104515,Okres Zvolen,4352,BC,200,SK,48.58333,19.13333 104527,Poltár,4352,BC,200,SK,48.43094,19.79408 104535,Revúca,4352,BC,200,SK,48.68346,20.11734 104536,Rimavská Sobota,4352,BC,200,SK,48.38284,20.02239 104559,Svätý Anton,4352,BC,200,SK,48.41923,18.9401 104562,Tisovec,4352,BC,200,SK,48.67738,19.94364 104573,Veľký Krtíš,4352,BC,200,SK,48.21059,19.35043 104597,Žarnovica,4352,BC,200,SK,48.48123,18.71565 104601,Žiar nad Hronom,4352,BC,200,SK,48.59184,18.84958 104585,Zvolen,4352,BC,200,SK,48.57442,19.15324 104374,Bratislava,4356,BL,200,SK,48.14816,17.10674 104375,Bratislava - Vajnory,4356,BL,200,SK,48.20563,17.20759 104386,Dunajská Lužná,4356,BL,200,SK,48.08347,17.26072 104403,Ivanka pri Dunaji,4356,BL,200,SK,48.18675,17.2554 104428,Malacky,4356,BL,200,SK,48.43604,17.02188 104429,Marianka,4356,BL,200,SK,48.24903,17.064 104434,Modra,4356,BL,200,SK,48.33397,17.30711 104450,Okres Bratislava I,4356,BL,200,SK,48.14653,17.10584 104451,Okres Bratislava II,4356,BL,200,SK,48.1528,17.17764 104452,Okres Bratislava III,4356,BL,200,SK,48.18543,17.1379 104453,Okres Bratislava IV,4356,BL,200,SK,48.22787,16.99722 104454,Okres Bratislava V,4356,BL,200,SK,48.11122,17.09444 104475,Okres Malacky,4356,BL,200,SK,48.43458,17.02166 104485,Okres Pezinok,4356,BL,200,SK,48.28785,17.26799 104497,Okres Senec,4356,BL,200,SK,48.22187,17.40328 104524,Pezinok,4356,BL,200,SK,48.28986,17.26664 104540,Senec,4356,BL,200,SK,48.21951,17.40043 104555,Stupava,4356,BL,200,SK,48.27474,17.03173 104560,Svätý Jur,4356,BL,200,SK,48.25216,17.21539 104576,Vinosady,4356,BL,200,SK,48.31142,17.29042 104588,Čierna nad Tisou,4353,KI,200,SK,48.41704,22.08865 104382,Dobšiná,4353,KI,200,SK,48.82073,20.36988 104392,Gelnica,4353,KI,200,SK,48.85584,20.93713 104404,Kavečany,4353,KI,200,SK,48.77592,21.20587 104409,Košice,4353,KI,200,SK,48.71395,21.25808 104410,Košice I,4353,KI,200,SK,48.72914,21.25004 104411,Košice II,4353,KI,200,SK,48.69753,21.22273 104412,Košice III,4353,KI,200,SK,48.73242,21.29047 104413,Košice IV,4353,KI,200,SK,48.68691,21.2657 104416,Krompachy,4353,KI,200,SK,48.91447,20.87514 104431,Medzev,4353,KI,200,SK,48.70041,20.89367 104433,Michalovce,4353,KI,200,SK,48.75434,21.9195 104435,Moldava nad Bodvou,4353,KI,200,SK,48.61428,20.99957 104462,Okres Gelnica,4353,KI,200,SK,48.85207,20.93385 104468,Okres Kosice-okolie,4353,KI,200,SK,48.77897,21.41373 104478,Okres Michalovce,4353,KI,200,SK,48.75,21.93333 104494,Okres Rožňava,4353,KI,200,SK,48.66667,20.53333 104501,Okres Sobrance,4353,KI,200,SK,48.74247,22.18197 104502,Okres Spišská Nová Ves,4353,KI,200,SK,48.95,20.56667 104507,Okres Trebišov,4353,KI,200,SK,48.63333,21.71667 104537,Rožňava,4353,KI,200,SK,48.66009,20.53758 104542,Sečovce,4353,KI,200,SK,48.70074,21.66104 104547,Sobrance,4353,KI,200,SK,48.74455,22.18136 104549,Spišská Nová Ves,4353,KI,200,SK,48.94464,20.56153 104554,Strážske,4353,KI,200,SK,48.8735,21.83668 104565,Trebišov,4353,KI,200,SK,48.62858,21.71954 104575,Vinné,4353,KI,200,SK,48.80965,21.96757 104599,Žehra,4353,KI,200,SK,48.9796,20.7917 104400,Hurbanovo,4357,NI,200,SK,47.86984,18.19233 104406,Kolárovo,4357,NI,200,SK,47.92294,17.98467 104407,Komárno,4357,NI,200,SK,47.76356,18.12263 104421,Levice,4357,NI,200,SK,48.21563,18.60705 104438,Nitra,4357,NI,200,SK,48.30763,18.08453 104445,Nové Zámky,4357,NI,200,SK,47.98544,18.16195 104467,Okres Komárno,4357,NI,200,SK,47.76667,18.13333 104471,Okres Levice,4357,NI,200,SK,48.21667,18.6 104481,Okres Nitra,4357,NI,200,SK,48.31667,18.08333 104483,Okres Nové Zámky,4357,NI,200,SK,47.98333,18.16667 104517,Okres Šaľa,4357,NI,200,SK,48.1477,17.87306 104506,Okres Topoľčany,4357,NI,200,SK,48.56667,18.18333 104514,Okres Zlaté Moravce,4357,NI,200,SK,48.38294,18.39842 104591,Šahy,4357,NI,200,SK,48.07408,18.94946 104593,Šaľa,4357,NI,200,SK,48.15127,17.88062 104595,Štúrovo,4357,NI,200,SK,47.79495,18.7175 104596,Šurany,4357,NI,200,SK,48.08613,18.18447 104558,Svodín,4357,NI,200,SK,47.91054,18.49967 104563,Tlmače,4357,NI,200,SK,48.28926,18.53152 104564,Topoľčany,4357,NI,200,SK,48.56361,18.16712 104580,Vráble,4357,NI,200,SK,48.24371,18.30846 104600,Želiezovce,4357,NI,200,SK,48.05075,18.65421 104584,Zlaté Moravce,4357,NI,200,SK,48.38553,18.40063 104372,Bardejov,4354,PV,200,SK,49.29175,21.27271 104380,Chlmec,4354,PV,200,SK,48.88628,21.9393 104393,Giraltovce,4354,PV,200,SK,49.11398,21.51731 104399,Humenné,4354,PV,200,SK,48.93707,21.91625 104405,Kežmarok,4354,PV,200,SK,49.13571,20.43352 104422,Levoča,4354,PV,200,SK,49.02173,20.59212 104423,Lipany,4354,PV,200,SK,49.15376,20.96382 104590,Ľubica,4354,PV,200,SK,49.11667,20.45 104432,Medzilaborce,4354,PV,200,SK,49.27195,21.90073 104442,Nová Lesná,4354,PV,200,SK,49.12253,20.26737 104449,Okres Bardejov,4354,PV,200,SK,49.28333,21.28333 104464,Okres Humenné,4354,PV,200,SK,48.93333,21.91667 104466,Okres Kežmarok,4354,PV,200,SK,49.13593,20.42929 104472,Okres Levoča,4354,PV,200,SK,49.01986,20.57688 104477,Okres Medzilaborce,4354,PV,200,SK,49.27062,21.902 104488,Okres Poprad,4354,PV,200,SK,49.05,20.3 104490,Okres Prešov,4354,PV,200,SK,49.0,21.25 104496,Okres Sabinov,4354,PV,200,SK,49.10115,21.09844 104500,Okres Snina,4354,PV,200,SK,48.98579,22.15059 104503,Okres Stará Ĺubovňa,4354,PV,200,SK,49.3,20.7 104504,Okres Stropkov,4354,PV,200,SK,49.20249,21.65025 104505,Okres Svidník,4354,PV,200,SK,49.3,21.56667 104513,Okres Vranov nad Topľou,4354,PV,200,SK,48.9,21.68333 104526,Podolínec,4354,PV,200,SK,49.25869,20.536 104528,Poprad,4354,PV,200,SK,49.06144,20.29798 104530,Prešov,4354,PV,200,SK,48.99839,21.23393 104539,Sabinov,4354,PV,200,SK,49.10309,21.0988 104546,Snina,4354,PV,200,SK,48.98857,22.15099 104548,Spišská Belá,4354,PV,200,SK,49.18725,20.45948 104550,Spišské Podhradie,4354,PV,200,SK,49.00088,20.75307 104552,Stará Ľubovňa,4354,PV,200,SK,49.29859,20.6862 104594,Štrba,4354,PV,200,SK,49.05913,20.07975 104553,Stropkov,4354,PV,200,SK,49.20211,21.65216 104556,Svidník,4354,PV,200,SK,49.30819,21.5703 104557,Svit,4354,PV,200,SK,49.06014,20.20695 104577,Vranov nad Topľou,4354,PV,200,SK,48.88836,21.68479 104578,Vrbov,4354,PV,200,SK,49.08764,20.4253 104583,Vyšné Ružbachy,4354,PV,200,SK,49.30387,20.56558 104582,Vysoké Tatry,4354,PV,200,SK,49.13637,20.24386 104598,Ždiar,4354,PV,200,SK,49.271,20.26239 104379,Bánovce nad Bebravou,4358,TC,200,SK,48.7213,18.25754 104373,Bojnice,4358,TC,200,SK,48.78511,18.5864 104377,Brezová pod Bradlom,4358,TC,200,SK,48.66349,17.53905 104586,Čachtice,4358,TC,200,SK,48.71226,17.78704 104384,Dubnica nad Váhom,4358,TC,200,SK,48.95981,18.16634 104394,Handlová,4358,TC,200,SK,48.7276,18.76012 104402,Ilava,4358,TC,200,SK,48.99769,18.2353 104419,Lehota pod Vtáčnikom,4358,TC,200,SK,48.69138,18.59944 104436,Myjava,4358,TC,200,SK,48.75876,17.56866 104437,Nemšová,4358,TC,200,SK,48.96702,18.11892 104441,Nová Dubnica,4358,TC,200,SK,48.93479,18.14632 104443,Nováky,4358,TC,200,SK,48.71106,18.53389 104444,Nové Mesto nad Váhom,4358,TC,200,SK,48.75763,17.8309 104457,Okres Bánovce nad Bebravou,4358,TC,200,SK,48.71908,18.25773 104465,Okres Ilava,4358,TC,200,SK,48.99641,18.23374 104479,Okres Myjava,4358,TC,200,SK,48.75,17.58333 104482,Okres Nové Mesto nad Váhom,4358,TC,200,SK,48.75466,17.83506 104484,Okres Partizánske,4358,TC,200,SK,48.62613,18.37957 104489,Okres Považská Bystrica,4358,TC,200,SK,49.11667,18.45 104491,Okres Prievidza,4358,TC,200,SK,48.76667,18.63333 104492,Okres Púchov,4358,TC,200,SK,49.12406,18.32477 104508,Okres Trenčín,4358,TC,200,SK,48.8952,18.04264 104523,Partizánske,4358,TC,200,SK,48.62861,18.38455 104529,Považská Bystrica,4358,TC,200,SK,49.12153,18.42169 104532,Prievidza,4358,TC,200,SK,48.77446,18.6275 104533,Púchov,4358,TC,200,SK,49.12494,18.32597 104551,Stará Turá,4358,TC,200,SK,48.77721,17.69433 104566,Trenčianske Teplice,4358,TC,200,SK,48.91063,18.16691 104567,Trenčín,4358,TC,200,SK,48.89452,18.04436 104387,Dunajská Streda,4355,TA,200,SK,47.99268,17.61211 104389,Gabčíkovo,4355,TA,200,SK,47.89211,17.57884 104390,Galanta,4355,TA,200,SK,48.19001,17.72747 104391,Gbely,4355,TA,200,SK,48.718,17.11628 104395,Hlohovec,4355,TA,200,SK,48.43174,17.8031 104396,Holíč,4355,TA,200,SK,48.81105,17.16238 104420,Leopoldov,4355,TA,200,SK,48.44575,17.76458 104460,Okres Dunajská Streda,4355,TA,200,SK,47.99635,17.60937 104461,Okres Galanta,4355,TA,200,SK,48.2,17.71667 104463,Okres Hlohovec,4355,TA,200,SK,48.41667,17.75 104486,Okres Piešťany,4355,TA,200,SK,48.59064,17.82679 104498,Okres Senica,4355,TA,200,SK,48.68333,17.36667 104499,Okres Skalica,4355,TA,200,SK,48.75,17.16667 104509,Okres Trnava,4355,TA,200,SK,48.36667,17.6 104525,Piešťany,4355,TA,200,SK,48.59479,17.82591 104592,Šamorín,4355,TA,200,SK,48.03015,17.30972 104541,Senica,4355,TA,200,SK,48.67922,17.36697 104543,Skalica,4355,TA,200,SK,48.8449,17.22635 104544,Sládkovičovo,4355,TA,200,SK,48.20137,17.63852 104545,Smolenice,4355,TA,200,SK,48.50478,17.43067 104568,Trnava,4355,TA,200,SK,48.37741,17.58723 104574,Veľký Meder,4355,TA,200,SK,47.85798,17.76884 104579,Vrbové,4355,TA,200,SK,48.61973,17.7226 104378,Bytča,4359,ZI,200,SK,49.22404,18.55878 104587,Čadca,4359,ZI,200,SK,49.43503,18.78895 104383,Dolný Kubín,4359,ZI,200,SK,49.20983,19.30341 104401,Hybe,4359,ZI,200,SK,49.04439,19.82895 104414,Krasňany,4359,ZI,200,SK,49.21491,18.88718 104418,Kysucké Nové Mesto,4359,ZI,200,SK,49.3,18.78333 104424,Liptovský Hrádok,4359,ZI,200,SK,49.03962,19.72335 104425,Liptovský Mikuláš,4359,ZI,200,SK,49.08061,19.62218 104427,Lúčky,4359,ZI,200,SK,49.12944,19.40228 104430,Martin,4359,ZI,200,SK,49.06651,18.92399 104446,Námestovo,4359,ZI,200,SK,49.4079,19.48032 104439,Nižná,4359,ZI,200,SK,49.31046,19.52428 104456,Okres Bytča,4359,ZI,200,SK,49.22267,18.55844 104516,Okres Čadca,4359,ZI,200,SK,49.43333,18.78333 104459,Okres Dolný Kubín,4359,ZI,200,SK,49.2,19.3 104470,Okres Kysucké Nové Mesto,4359,ZI,200,SK,49.30206,18.78603 104473,Okres Liptovský Mikuláš,4359,ZI,200,SK,49.08333,19.61667 104476,Okres Martin,4359,ZI,200,SK,49.06667,18.93333 104480,Okres Namestovo,4359,ZI,200,SK,49.40651,19.4767 104495,Okres Ružomberok,4359,ZI,200,SK,49.07494,19.30083 104510,Okres Turčianske Teplice,4359,ZI,200,SK,48.86283,18.85759 104511,Okres Tvrdošín,4359,ZI,200,SK,49.33421,19.55461 104520,Okres Žilina,4359,ZI,200,SK,49.22303,18.74044 104521,Oravská Lesná,4359,ZI,200,SK,49.36672,19.18093 104522,Oravský Podzámok,4359,ZI,200,SK,49.25939,19.3569 104531,Pribylina,4359,ZI,200,SK,49.0995,19.79427 104534,Rajec,4359,ZI,200,SK,49.08899,18.64007 104538,Ružomberok,4359,ZI,200,SK,49.0748,19.30751 104561,Terchová,4359,ZI,200,SK,49.25895,19.02935 104569,Trstená,4359,ZI,200,SK,49.36101,19.61249 104571,Turčianske Teplice,4359,ZI,200,SK,48.86225,18.86048 104570,Turzovka,4359,ZI,200,SK,49.40429,18.62258 104572,Tvrdošín,4359,ZI,200,SK,49.337,19.556 104581,Vrútky,4359,ZI,200,SK,49.11328,18.91714 104602,Žilina,4359,ZI,200,SK,49.22315,18.73941 104059,Ajdovščina,4183,001,201,SI,45.88601,13.90946 104084,Cirkulane,4183,001,201,SI,46.34408,15.99472 104174,Lokavec,4183,001,201,SI,45.90167,13.87972 104060,Ankaran,4326,213,201,SI,45.57861,13.73611 104063,Beltinci,4301,002,201,SI,46.60528,16.24056 104104,Gančani,4301,002,201,SI,46.6325,16.25111 104166,Lipovci,4301,002,201,SI,46.62833,16.22806 104331,Zgornje Gorje,4301,002,201,SI,46.37962,14.06937 104064,Benedikt,4166,148,201,SI,46.60861,15.88833 104067,Bistrica ob Sotli,4179,149,201,SI,46.05889,15.66417 104069,Bled,4202,003,201,SI,46.36917,14.11361 104144,Kostanjevica na Krki,4202,003,201,SI,45.84611,15.42222 104326,Zasip,4202,003,201,SI,46.39284,14.10869 104207,Nova Vas,4278,150,201,SI,45.77167,14.50583 104070,Bohinjska Bistrica,4282,004,201,SI,46.27216,13.9535 104100,Dragomer,4282,004,201,SI,46.01667,14.38333 104172,Log pri Brezovici,4282,004,201,SI,46.01667,14.36667 104071,Borovnica,4200,005,201,SI,45.91583,14.36306 104180,Makole,4200,005,201,SI,46.31722,15.66722 104072,Bovec,4181,006,201,SI,46.33808,13.55245 104190,Mirna,4181,006,201,SI,45.95528,15.06194 104073,Braslovče,4141,151,201,SI,46.28972,15.03889 104094,Dobrovo,4240,007,201,SI,45.99639,13.52639 104195,Mokronog,4240,007,201,SI,45.93417,15.14083 104076,Brežice,4215,009,201,SI,45.90333,15.59111 104227,Poljčane,4215,009,201,SI,46.31194,15.57917 104075,Brezovica pri Ljubljani,4165,008,201,SI,46.03333,14.4 104205,Notranje Gorice,4165,008,201,SI,45.9875,14.39889 104214,Opština Ljubljana-Vič-Rudnik,4165,008,201,SI,46.03333,14.41667 104254,Rečica ob Savinji,4165,008,201,SI,46.31667,14.91667 104316,Vnanje Gorice,4165,008,201,SI,46.00722,14.42194 104078,Cankova,4147,152,201,SI,46.72083,16.0225 104080,Cerklje na Gorenjskem,4310,012,201,SI,46.25417,14.48861 104081,Cerknica,4162,013,201,SI,45.79306,14.3625 104246,Rakek,4162,013,201,SI,45.81333,14.31111 104082,Cerkno,4178,014,201,SI,46.12556,13.98167 104083,Cerkvenjak,4176,153,201,SI,46.57056,15.94361 104079,Celje,4191,011,201,SI,46.23092,15.26044 104168,Ljubečna,4191,011,201,SI,46.25567,15.3243 104299,Trnovlje pri Celju,4191,011,201,SI,46.25667,15.29528 104208,Novo Mesto,4236,085,201,SI,45.80397,15.16886 104337,Črenšovci,4151,015,201,SI,46.55794,16.3041 104338,Črna na Koroškem,4232,016,201,SI,46.47045,14.85009 104339,Črnomelj,4291,017,201,SI,45.57111,15.18889 104087,Destrnik,4304,018,201,SI,46.49254,15.87893 104088,Divača,4167,019,201,SI,45.68472,13.97028 104090,Dobje pri Planini,4295,154,201,SI,46.13747,15.39412 104309,Videm,4216,020,201,SI,45.85,14.69417 104091,Dobrna,4252,155,201,SI,46.3375,15.22639 104092,Dobrova,4308,021,201,SI,46.0458,14.39186 104093,Dobrovnik,4189,156,201,SI,46.65139,16.3525 104096,Dol pri Ljubljani,4173,022,201,SI,46.08861,14.60083 104097,Dolenjske Toplice,4281,157,201,SI,45.75657,15.05917 104089,Dob,4159,023,201,SI,46.15194,14.62861 104098,Domžale,4159,023,201,SI,46.13774,14.59371 104244,Radomlje,4159,023,201,SI,46.17361,14.61222 104312,Vir,4159,023,201,SI,46.15325,14.60741 104099,Dornava,4290,024,201,SI,46.43667,15.95361 104102,Dravograd,4345,025,201,SI,46.58806,15.01917 104283,Spodnji Duplek,4213,026,201,SI,46.50306,15.74528 104334,Zgornji Duplek,4213,026,201,SI,46.51361,15.72083 104106,Gorenja Vas,4293,027,201,SI,46.10722,14.14806 104107,Gorišnica,4210,028,201,SI,46.41472,16.01389 104108,Gornja Radgona,4343,029,201,SI,46.67333,15.99222 104109,Gornji Grad,4339,030,201,SI,46.29528,14.80833 104110,Gornji Petrovci,4271,031,201,SI,46.80528,16.2225 104112,Grad,4217,158,201,SI,46.8,16.1 104113,Grosuplje,4336,032,201,SI,45.95556,14.65889 104357,Šmarje-Sap,4336,032,201,SI,45.97618,14.61177 104279,Spodnja Hajdina,4145,159,201,SI,46.40889,15.84694 104116,Hotinja Vas,4175,160,201,SI,46.46667,15.66667 104242,Radizel,4175,160,201,SI,46.47444,15.65583 104260,Rogoza,4175,160,201,SI,46.5,15.68333 104281,Spodnje Hoče,4175,160,201,SI,46.5,15.65 104114,Hodoš,4327,161,201,SI,46.82333,16.33417 104115,Horjul,4193,162,201,SI,46.02361,14.29917 104095,Dol pri Hrastniku,4341,034,201,SI,46.14194,15.11278 104118,Hrastnik,4341,034,201,SI,46.14611,15.08139 104147,Kozina,4321,035,201,SI,45.61,13.93556 104122,Idrija,4152,036,201,SI,46.00278,14.03056 104280,Spodnja Idrija,4152,036,201,SI,46.03194,14.02722 104123,Ig,4286,037,201,SI,45.96028,14.52889 104125,Ivančna Gorica,4305,039,201,SI,45.93833,14.80444 104350,Šentvid pri Stični,4305,039,201,SI,45.95004,14.84344 104127,Izola,4322,040,201,SI,45.53694,13.66194 104128,Jagodje,4322,040,201,SI,45.52845,13.64721 104120,Hrušica,4337,041,201,SI,46.445,14.01778 104130,Jesenice,4337,041,201,SI,46.43056,14.06694 104143,Koroška Bela,4337,041,201,SI,46.44913,14.11135 104274,Slovenski Javornik,4337,041,201,SI,46.42611,14.08722 104332,Zgornje Jezersko,4203,163,201,SI,46.3941,14.50659 104131,Juršinci,4266,042,201,SI,46.48472,15.97139 104133,Kamnik,4180,043,201,SI,46.22587,14.61207 104184,Mekinje,4180,043,201,SI,46.23333,14.61667 104355,Šmarca,4180,043,201,SI,46.19333,14.59667 104086,Deskle,4227,044,201,SI,46.05307,13.61382 104134,Kanal,4227,044,201,SI,46.08861,13.63972 104135,Kidričevo,4150,045,201,SI,46.40361,15.79111 104137,Kobarid,4243,046,201,SI,46.24761,13.57907 104138,Kobilje,4325,047,201,SI,46.68472,16.39778 104149,Kočevje,4335,048,201,SI,45.64333,14.86333 104140,Komen,4315,049,201,SI,45.81528,13.74833 104141,Komenda,4283,164,201,SI,46.20484,14.53839 104199,Moste,4283,164,201,SI,46.195,14.55139 104085,Dekani,4319,050,201,SI,45.54972,13.81361 104121,Hrvatini,4319,050,201,SI,45.58278,13.75667 104142,Koper,4319,050,201,SI,45.54694,13.72944 104223,Pobegi,4319,050,201,SI,45.53944,13.79611 104231,Prade,4319,050,201,SI,45.54003,13.77607 104282,Spodnje Škofije,4319,050,201,SI,45.57167,13.7925 104288,Sv. Anton,4319,050,201,SI,45.52583,13.83194 104145,Kostel,4331,165,201,SI,45.50842,14.91005 104148,Kozje,4186,051,201,SI,46.075,15.56028 104077,Britof,4287,052,201,SI,46.26024,14.39037 104105,Golnik,4287,052,201,SI,46.33333,14.33333 104139,Kokrica,4287,052,201,SI,46.27028,14.36111 104150,Kranj,4287,052,201,SI,46.23887,14.35561 104193,Mlaka pri Kranju,4287,052,201,SI,46.28333,14.35 104330,Zgornje Bitnje,4287,052,201,SI,46.22,14.33667 104151,Kranjska Gora,4340,053,201,SI,46.45689,13.77824 104194,Mojstrana,4340,053,201,SI,46.42383,13.8752 104152,Križevci pri Ljutomeru,4238,166,201,SI,46.56833,16.13861 104328,Zgornja Kungota,4197,055,201,SI,46.63917,15.61556 104156,Kuzma,4211,056,201,SI,46.83694,16.08333 104158,Laško,4338,057,201,SI,46.15463,15.23555 104160,Lenart v Slov. Goricah,4142,058,201,SI,46.57611,15.83139 104161,Lendava,4225,059,201,SI,46.56494,16.45091 104167,Litija,4347,060,201,SI,46.05861,14.8225 104101,Dravlje District,4270,061,201,SI,46.0729,14.44741 104129,Jarše District,4270,061,201,SI,46.07345,14.55431 104169,Ljubljana,4270,061,201,SI,46.05108,14.50513 104211,Opčina Ljubljana-Bežigrad,4270,061,201,SI,46.08333,14.53333 104212,Opština Ljubljana-Center,4270,061,201,SI,46.05,14.53333 104213,Opština Ljubljana-Moste-Polje,4270,061,201,SI,46.06667,14.61667 104262,Rožnik District,4270,061,201,SI,46.05999,14.46779 104349,Šentvid District,4270,061,201,SI,46.10559,14.43329 104278,Sostro District,4270,061,201,SI,46.04341,14.67293 104300,Trnovo District,4270,061,201,SI,46.02412,14.48891 104315,Vič District,4270,061,201,SI,46.00779,14.46968 104170,Ljubno ob Savinji,4294,062,201,SI,46.34358,14.83377 104171,Ljutomer,4351,063,201,SI,46.52083,16.1975 104173,Logatec,4350,064,201,SI,45.91444,14.22583 104163,Leskova Dolina,4174,065,201,SI,45.62139,14.46056 104119,Hrib-Loški Potok,4158,066,201,SI,45.70688,14.61674 104175,Lovrenc na Pohorju,4156,167,201,SI,46.54056,15.39306 104178,Luče,4219,067,201,SI,46.35611,14.74667 104177,Lukovica pri Domžalah,4302,068,201,SI,46.16988,14.69179 104179,Majšperk,4157,069,201,SI,46.35167,15.73361 104074,Bresternica,4242,070,201,SI,46.56972,15.575 104132,Kamnica,4242,070,201,SI,46.57444,15.61417 104165,Limbuš,4242,070,201,SI,46.55361,15.58361 104181,Maribor,4242,070,201,SI,46.55472,15.64667 104219,Pekre,4242,070,201,SI,46.54722,15.59556 104251,Razvanje,4242,070,201,SI,46.51444,15.63611 104182,Markovci,4244,168,201,SI,46.39557,15.92831 104183,Medvode,4349,071,201,SI,46.1422,14.41114 104215,Opština [historical] Ljubljana-Šiška,4349,071,201,SI,46.16667,14.43333 104333,Zgornje Pirniče,4349,071,201,SI,46.14251,14.43158 104185,Mengeš,4348,072,201,SI,46.16694,14.575 104235,Preserje pri Radomljah,4348,072,201,SI,46.16911,14.59698 104186,Metlika,4323,073,201,SI,45.64722,15.31417 104187,Mežica,4265,074,201,SI,46.52139,14.85444 104188,Miklavž na Dravskem Polju,4223,169,201,SI,46.50583,15.69722 104065,Bilje,4220,075,201,SI,45.89444,13.63222 104189,Miren,4220,075,201,SI,45.89556,13.6075 104191,Mirna Peč,4237,170,201,SI,45.86028,15.08333 104192,Mislinja,4212,076,201,SI,46.44141,15.20027 104197,Moravče,4168,077,201,SI,46.13694,14.745 104196,Moravske Toplice,4218,078,201,SI,46.68313,16.2208 104200,Mozirje,4190,079,201,SI,46.33944,14.96333 104061,Apače,4318,195,201,SI,46.69722,15.91056 104124,Ilirska Bistrica,4344,038,201,SI,45.56757,14.24571 104155,Krško,4314,054,201,SI,45.95915,15.49167 104164,Leskovec pri Krškem,4314,054,201,SI,45.93566,15.47184 104267,Senovo,4314,054,201,SI,46.02361,15.47694 104157,Lavrica,4187,123,201,SI,46.00002,14.5573 104354,Škofljica,4187,123,201,SI,45.98333,14.57667 104062,Bakovci,4313,080,201,SI,46.61889,16.15028 104336,Černelavci,4313,080,201,SI,46.66667,16.13333 104153,Krog,4313,080,201,SI,46.63806,16.14139 104201,Murska Sobota,4313,080,201,SI,46.6625,16.16639 104247,Rakičan,4313,080,201,SI,46.65167,16.20417 104202,Muta,4208,081,201,SI,46.61139,15.16611 104203,Naklo,4177,082,201,SI,46.27278,14.31722 104204,Nazarje,4329,083,201,SI,46.31757,14.94674 104154,Kromberk,4205,084,201,SI,45.96083,13.66556 104206,Nova Gorica,4205,084,201,SI,45.95604,13.64837 104237,Prvačina,4205,084,201,SI,45.89,13.71806 104342,Šempas,4205,084,201,SI,45.93028,13.74361 104276,Solkan,4205,084,201,SI,45.97139,13.64944 104209,Odranci,4320,086,201,SI,46.58667,16.28028 104210,Oplotnica,4143,171,201,SI,46.38778,15.44667 104216,Ormož,4221,087,201,SI,46.41139,16.15444 104217,Osilnica,4199,088,201,SI,45.52914,14.69838 104220,Pesnica pri Mariboru,4172,089,201,SI,46.60694,15.67667 104176,Lucija,4201,090,201,SI,45.50526,13.6024 104221,Piran,4201,090,201,SI,45.52778,13.57056 104229,Portorož,4201,090,201,SI,45.51429,13.59206 104269,Seča,4201,090,201,SI,45.49584,13.61466 104222,Pivka,4184,091,201,SI,45.68292,14.19588 104226,Podčetrtek,4146,092,201,SI,46.15694,15.59861 104224,Podlehnik,4161,172,201,SI,46.33528,15.88 104225,Podvelka,4234,093,201,SI,46.58694,15.33056 104228,Polzela,4272,173,201,SI,46.28333,15.06667 104230,Postojna,4330,094,201,SI,45.77435,14.21528 104233,Prebold,4188,174,201,SI,46.23694,15.0925 104234,Preddvor,4303,095,201,SI,46.3025,14.42306 104236,Prevalje,4274,175,201,SI,46.54694,14.92083 104238,Ptuj,4228,096,201,SI,46.42005,15.87018 104239,Puconci,4288,097,201,SI,46.70667,16.15639 104103,Fram,4204,098,201,SI,46.456,15.63007 104198,Morje,4204,098,201,SI,46.44444,15.62139 104252,Rače,4204,098,201,SI,46.45194,15.68139 104241,Radeče,4195,099,201,SI,46.06806,15.18389 104240,Radenci,4292,100,201,SI,46.64201,16.03781 104243,Radlje ob Dravi,4275,101,201,SI,46.61417,15.22639 104162,Lesce,4231,102,201,SI,46.36111,14.15778 104245,Radovljica,4231,102,201,SI,46.34444,14.17444 104146,Kotlje,4155,103,201,SI,46.52139,14.98694 104249,Ravne na Koroškem,4155,103,201,SI,46.54306,14.96917 104250,Razkrižje,4206,176,201,SI,46.52167,16.28111 104253,Renče,4253,201,201,SI,45.89,13.66861 104319,Volčja Draga,4253,201,201,SI,45.90694,13.6775 104255,Ribnica,4235,104,201,SI,45.73861,14.7275 104256,Ribnica na Pohorju,4207,177,201,SI,46.535,15.27278 104258,Rogaška Slatina,4233,106,201,SI,46.2375,15.63972 104259,Rogašovci,4264,105,201,SI,46.8,16.03333 104257,Rogatec,4209,107,201,SI,46.22944,15.70028 104066,Bistrica ob Dravi,4280,108,201,SI,46.55419,15.54855 104263,Ruše,4280,108,201,SI,46.53944,15.51583 104341,Šalovci,4222,033,201,SI,46.825,16.29806 104264,Selnica ob Dravi,4230,178,201,SI,46.55,15.495 104266,Semič,4346,109,201,SI,45.64611,15.18222 104261,Rožna Dolina,4317,183,201,SI,45.94194,13.66779 104343,Šempeter pri Gorici,4317,183,201,SI,45.9275,13.64111 104322,Vrtojba,4317,183,201,SI,45.9125,13.63417 104117,Hrastje,4299,117,201,SI,46.21667,14.4 104351,Šenčur,4299,117,201,SI,46.24556,14.41972 104265,Selnica ob Muri,4324,118,201,SI,46.68333,15.7 104345,Šentilj v Slov. Goricah,4324,118,201,SI,46.68167,15.64806 104346,Šentjernej,4241,119,201,SI,45.84,15.33611 104347,Šentjur,4171,120,201,SI,46.21722,15.3975 104348,Šentrupert,4311,211,201,SI,45.97778,15.09556 104268,Sevnica,4268,110,201,SI,46.00778,15.31556 104270,Sežana,4149,111,201,SI,45.70924,13.87333 104352,Škocjan,4170,121,201,SI,45.90667,15.29139 104353,Škofja Loka,4316,122,201,SI,46.16551,14.30626 104289,Sv. Duh,4316,122,201,SI,46.18333,14.33333 104159,Legen,4169,112,201,SI,46.50651,15.14424 104218,Pameče,4169,112,201,SI,46.53417,15.07917 104271,Slovenj Gradec,4169,112,201,SI,46.51028,15.08056 104361,Šmartno pri Slovenj Gradcu,4169,112,201,SI,46.48944,15.10667 104232,Pragersko,4332,113,201,SI,46.39667,15.66 104272,Slovenska Bistrica,4332,113,201,SI,46.39278,15.57444 104329,Zgornja Polskava,4332,113,201,SI,46.42556,15.61222 104273,Slovenske Konjice,4198,114,201,SI,46.33667,15.42583 104356,Šmarje pri Jelšah,4285,124,201,SI,46.22722,15.51917 104358,Šmarjeta,4289,206,201,SI,45.88333,15.25 104359,Šmartno ob Paki,4296,125,201,SI,46.33333,15.03333 104360,Šmartno pri Litiji,4279,194,201,SI,46.04444,14.84417 104275,Sodražica,4277,179,201,SI,45.76111,14.63556 104277,Solčava,4261,180,201,SI,46.41944,14.69361 104248,Ravne,4248,126,201,SI,46.41413,15.06087 104362,Šoštanj,4248,126,201,SI,46.38,15.04861 104296,Topolšica,4248,126,201,SI,46.40028,15.02157 104284,Središče ob Dravi,4263,202,201,SI,46.39417,16.26806 104285,Starše,4259,115,201,SI,46.46583,15.76722 104363,Štore,4185,127,201,SI,46.22083,15.31389 104286,Straža,4333,203,201,SI,45.78,15.07278 104287,Sv. Ana v Slov. Goricah,4164,181,201,SI,46.64917,15.84417 104290,Sv. Trojica v Slov. Goricah,4260,204,201,SI,46.57667,15.87694 104314,Vitomarci,4229,182,201,SI,46.5275,15.93944 104291,Sveti Jurij ob Ščavnici,4328,210,201,SI,46.5695,16.02347 104292,Sveti Tomaž,4273,205,201,SI,46.48417,16.08361 104293,Tabor,4194,184,201,SI,46.23611,15.01833 104294,Tišina,4312,010,201,SI,46.65806,16.09167 104295,Tolmin,4247,128,201,SI,46.18304,13.73321 104297,Trbovlje,4246,129,201,SI,46.155,15.05333 104298,Trebnje,4214,130,201,SI,45.90417,15.02167 104301,Trnovska Vas,4153,185,201,SI,46.52019,15.88657 104068,Bistrica pri Tržiču,4250,131,201,SI,46.35472,14.29167 104303,Tržič,4250,131,201,SI,46.36357,14.31046 104340,Črnuče District,4334,186,201,SI,46.11506,14.55371 104302,Trzin,4334,186,201,SI,46.13333,14.56667 104304,Turnišče,4251,132,201,SI,46.62778,16.32028 104305,Velika Polana,4267,187,201,SI,46.57194,16.34694 104306,Velike Lašče,4144,134,201,SI,45.83222,14.63639 104308,Veržej,4257,188,201,SI,46.58361,16.16528 104310,Videm pri Ptuju,4300,135,201,SI,46.36861,15.90639 104311,Vipava,4196,136,201,SI,45.84667,13.96306 104313,Vitanje,4148,137,201,SI,46.38167,15.29583 104317,Vodice,4154,138,201,SI,46.18987,14.49492 104318,Vojnik,4245,139,201,SI,46.29333,15.30333 104320,Vransko,4163,189,201,SI,46.24389,14.95139 104307,Verd,4262,140,201,SI,45.95667,14.30583 104321,Vrhnika,4262,140,201,SI,45.9635,14.29484 104323,Vuzenica,4226,141,201,SI,46.59639,15.16722 104126,Izlake,4269,142,201,SI,46.15,14.95 104136,Kisovec,4269,142,201,SI,46.13911,14.96295 104325,Zagorje ob Savi,4269,142,201,SI,46.13179,14.99694 104111,Gotovlje,4258,190,201,SI,46.27418,15.15186 104344,Šempeter v Savinj. Dolini,4258,190,201,SI,46.25639,15.12194 104324,Zabukovica,4258,190,201,SI,46.21408,15.15954 104364,Žalec,4258,190,201,SI,46.25151,15.16482 104327,Zavrč,4182,143,201,SI,46.39167,16.04972 104365,Železniki,4256,146,201,SI,46.22482,14.17205 104366,Žetale,4249,191,201,SI,46.27356,15.82658 104367,Žiri,4192,147,201,SI,46.04222,14.10722 104368,Žirovnica,4276,192,201,SI,46.40472,14.14 104335,Zreče,4342,144,201,SI,46.38222,15.37917 104369,Žužemberk,4307,193,201,SI,45.83389,14.92917 31915,Abla,1193,AN,207,ES,37.14245,-2.77808 31918,Abrucena,1193,AN,207,ES,37.13226,-2.79711 31929,Adamuz,1193,AN,207,ES,38.02674,-4.52231 31936,Adra,1193,AN,207,ES,36.74961,-3.02055 31950,Agrón,1193,AN,207,ES,37.03023,-3.8287 31951,Aguadulce,1193,AN,207,ES,37.25273,-4.99269 31958,Aguilar,1193,AN,207,ES,37.51476,-4.65717 32346,Alájar,1193,AN,207,ES,37.87408,-6.66536 31994,Alameda,1193,AN,207,ES,37.2087,-4.6586 31996,Alamedilla,1193,AN,207,ES,37.58232,-3.24241 32000,Alanís,1193,AN,207,ES,38.03333,-5.71667 32015,Albaida del Aljarafe,1193,AN,207,ES,37.42354,-6.16675 32063,Albánchez,1193,AN,207,ES,37.28361,-2.18229 32048,Albolote,1193,AN,207,ES,37.23088,-3.6551 32049,Albondón,1193,AN,207,ES,36.8277,-3.21144 32056,Albox,1193,AN,207,ES,37.38856,-2.14949 32062,Albuñán,1193,AN,207,ES,37.22708,-3.13321 32060,Albuñol,1193,AN,207,ES,36.79203,-3.205 32061,Albuñuelas,1193,AN,207,ES,36.92828,-3.63184 32070,Alcalá de Guadaira,1193,AN,207,ES,37.33791,-5.83951 32076,Alcalá de los Gazules,1193,AN,207,ES,36.46212,-5.72382 32079,Alcalá del Río,1193,AN,207,ES,37.5178,-5.98185 32080,Alcalá del Valle,1193,AN,207,ES,36.90448,-5.1724 32081,Alcalá la Real,1193,AN,207,ES,37.4614,-3.92301 32087,Alcaracejos,1193,AN,207,ES,38.38333,-4.96667 32090,Alcaucín,1193,AN,207,ES,36.90301,-4.11406 32091,Alcaudete,1193,AN,207,ES,37.59091,-4.08237 32103,Alcolea,1193,AN,207,ES,36.97458,-2.9615 32109,Alcolea del Río,1193,AN,207,ES,37.61506,-5.66694 32138,Alcóntar,1193,AN,207,ES,37.33647,-2.59725 32130,Alcudia de Monteagud,1193,AN,207,ES,37.23529,-2.2665 32167,Aldeaquemada,1193,AN,207,ES,38.41215,-3.37137 32180,Aldeire,1193,AN,207,ES,37.16012,-3.07204 32188,Alfacar,1193,AN,207,ES,37.23744,-3.56807 32196,Alfarnate,1193,AN,207,ES,36.99426,-4.25929 32197,Alfarnatejo,1193,AN,207,ES,36.9957,-4.26064 32231,Algámitas,1193,AN,207,ES,37.01516,-5.14949 32210,Algar,1193,AN,207,ES,36.65748,-5.65558 32212,Algarinejo,1193,AN,207,ES,37.32526,-4.1585 32214,Algarrobo,1193,AN,207,ES,36.77388,-4.03952 32215,Algatocín,1193,AN,207,ES,36.57356,-5.27554 32216,Algeciras,1193,AN,207,ES,36.13326,-5.45051 32223,Algodonales,1193,AN,207,ES,36.88044,-5.40536 32232,Alhabia,1193,AN,207,ES,36.99003,-2.58655 32233,Alhama de Almería,1193,AN,207,ES,36.95692,-2.56861 32235,Alhama de Granada,1193,AN,207,ES,37.00689,-3.98963 32238,Alhaurín de la Torre,1193,AN,207,ES,36.66401,-4.56139 32239,Alhaurín el Grande,1193,AN,207,ES,36.643,-4.68728 32240,Alhendín,1193,AN,207,ES,37.10879,-3.64557 32245,Alicún,1193,AN,207,ES,36.9658,-2.60212 32246,Alicún de Ortega,1193,AN,207,ES,37.60898,-3.13648 32251,Aljaraque,1193,AN,207,ES,37.26989,-7.02313 32315,Almáchar,1193,AN,207,ES,36.80892,-4.21614 32262,Almadén de la Plata,1193,AN,207,ES,37.87221,-6.08085 32270,Almargen,1193,AN,207,ES,37.0021,-5.02178 32277,Almedinilla,1193,AN,207,ES,37.43902,-4.09052 32279,Almegíjar,1193,AN,207,ES,36.90258,-3.30122 32289,Almensilla,1193,AN,207,ES,37.31099,-6.10998 32290,Almería,1193,AN,207,ES,37.16667,-2.33333 32316,Almócita,1193,AN,207,ES,37.00262,-2.79051 32295,Almodóvar del Río,1193,AN,207,ES,37.8107,-5.02037 32297,Almogía,1193,AN,207,ES,36.8255,-4.5407 32305,Almonte,1193,AN,207,ES,37.2647,-6.51667 32314,Almuñécar,1193,AN,207,ES,36.73393,-3.69072 32320,Alora,1193,AN,207,ES,36.82358,-4.70575 32321,Alosno,1193,AN,207,ES,37.54861,-7.1147 32323,Alozaina,1193,AN,207,ES,36.72736,-4.85761 32324,Alpandeire,1193,AN,207,ES,36.63402,-5.20216 32334,Alquife,1193,AN,207,ES,37.18024,-3.11553 32336,Alsodux,1193,AN,207,ES,37.00247,-2.59476 32376,Andújar,1193,AN,207,ES,38.03922,-4.05077 32596,Añora,1193,AN,207,ES,38.41667,-4.9 32390,Antas,1193,AN,207,ES,37.24536,-1.9176 32392,Antequera,1193,AN,207,ES,37.01938,-4.56123 32399,Aracena,1193,AN,207,ES,37.89396,-6.56116 32426,Arboleas,1193,AN,207,ES,37.35024,-2.07384 38575,Árchez,1193,AN,207,ES,36.83992,-3.99208 32431,Archidona,1193,AN,207,ES,37.09654,-4.38869 32437,Arcos de la Frontera,1193,AN,207,ES,36.75075,-5.81056 32441,Ardales,1193,AN,207,ES,36.87804,-4.84694 32444,Arenas,1193,AN,207,ES,36.81625,-4.04411 32448,Arenas del Rey,1193,AN,207,ES,36.95799,-3.89362 32482,Arjona,1193,AN,207,ES,37.93493,-4.05478 32483,Arjonilla,1193,AN,207,ES,37.97422,-4.10677 32488,Armilla,1193,AN,207,ES,37.14386,-3.62534 32491,Armuña de Almanzora,1193,AN,207,ES,37.3503,-2.4115 32496,Aroche,1193,AN,207,ES,37.94213,-6.9576 32499,Arquillos,1193,AN,207,ES,38.18148,-3.42827 32506,Arriate,1193,AN,207,ES,36.80005,-5.1408 32512,Arroyo del Ojanco,1193,AN,207,ES,38.32065,-2.89486 32514,Arroyomolinos de León,1193,AN,207,ES,38.01667,-6.41667 32543,Atajate,1193,AN,207,ES,36.64017,-5.24606 32550,Atarfe,1193,AN,207,ES,37.22479,-3.68686 32571,Ayamonte,1193,AN,207,ES,37.21329,-7.40807 32584,Aznalcázar,1193,AN,207,ES,37.30422,-6.24963 32585,Aznalcóllar,1193,AN,207,ES,37.51914,-6.26988 32604,Badolatosa,1193,AN,207,ES,37.30785,-4.67296 32607,Baena,1193,AN,207,ES,37.6167,-4.32245 32608,Baeza,1193,AN,207,ES,37.99384,-3.47103 32615,Bailén,1193,AN,207,ES,38.09639,-3.77786 32709,Baños de la Encina,1193,AN,207,ES,38.17379,-3.77477 32646,Barbate,1193,AN,207,ES,36.19237,-5.92186 32699,Bayárcal,1193,AN,207,ES,37.03073,-2.99606 32696,Bayarque,1193,AN,207,ES,37.33062,-2.4361 32700,Baza,1193,AN,207,ES,37.49073,-2.77259 32716,Beas,1193,AN,207,ES,37.4257,-6.79318 32717,Beas de Granada,1193,AN,207,ES,37.21803,-3.48095 32718,Beas de Guadix,1193,AN,207,ES,37.27861,-3.20579 32719,Beas de Segura,1193,AN,207,ES,38.2524,-2.88875 33057,Bédar,1193,AN,207,ES,37.19389,-1.98166 32730,Begíjar,1193,AN,207,ES,37.98492,-3.53094 32732,Beires,1193,AN,207,ES,37.01237,-2.79134 32734,Belalcázar,1193,AN,207,ES,38.57566,-5.16653 33059,Bélmez,1193,AN,207,ES,38.26667,-5.2 33060,Bélmez de la Moraleda,1193,AN,207,ES,37.72382,-3.38207 32757,Benacazón,1193,AN,207,ES,37.35289,-6.19663 32762,Benahadux,1193,AN,207,ES,36.92493,-2.45941 32763,Benahavís,1193,AN,207,ES,36.52361,-5.04631 32764,Benalauría,1193,AN,207,ES,36.59445,-5.26099 32765,Benalmádena,1193,AN,207,ES,36.5961,-4.57267 32767,Benalúa de Guadix,1193,AN,207,ES,37.35191,-3.16404 32768,Benalúa de las Villas,1193,AN,207,ES,37.42742,-3.68346 32766,Benalup-Casas Viejas,1193,AN,207,ES,36.34375,-5.8128 32769,Benamargosa,1193,AN,207,ES,36.83499,-4.19362 32770,Benamaurel,1193,AN,207,ES,37.60826,-2.7025 32771,Benamejí,1193,AN,207,ES,37.26833,-4.54123 32772,Benamocarra,1193,AN,207,ES,36.79075,-4.16146 32773,Benaocaz,1193,AN,207,ES,36.70069,-5.42222 32774,Benaoján,1193,AN,207,ES,36.71929,-5.2522 32775,Benarrabá,1193,AN,207,ES,36.5512,-5.27608 32779,Benatae,1193,AN,207,ES,38.35323,-2.65121 32823,Benitagla,1193,AN,207,ES,37.23138,-2.23935 32824,Benizalón,1193,AN,207,ES,37.21213,-2.2418 32827,Bentarique,1193,AN,207,ES,36.98823,-2.61991 33061,Bérchules,1193,AN,207,ES,36.97678,-3.19067 32853,Berja,1193,AN,207,ES,36.84693,-2.94966 32868,Berrocal,1193,AN,207,ES,37.60863,-6.54147 32938,Bollullos de la Mitación,1193,AN,207,ES,37.34014,-6.13719 32939,Bollullos par del Condado,1193,AN,207,ES,37.34127,-6.5397 32944,Bonares,1193,AN,207,ES,37.32423,-6.68073 32956,Bormujos,1193,AN,207,ES,37.37358,-6.07233 32957,Bornos,1193,AN,207,ES,36.81677,-5.74448 32977,Brenes,1193,AN,207,ES,37.54944,-5.87139 32997,Bubión,1193,AN,207,ES,36.949,-3.35615 33014,Bujalance,1193,AN,207,ES,37.89556,-4.38074 33027,Burguillos,1193,AN,207,ES,37.5844,-5.96654 33036,Busquístar,1193,AN,207,ES,36.93796,-3.29444 33084,Cabezas Rubias,1193,AN,207,ES,37.7266,-7.08738 33098,Cabra,1193,AN,207,ES,37.47249,-4.44206 33100,Cabra del Santo Cristo,1193,AN,207,ES,37.70379,-3.28765 33893,Cádiar,1193,AN,207,ES,36.94591,-3.1802 33117,Cadiz,1193,AN,207,ES,36.52672,-6.2891 33894,Cájar,1193,AN,207,ES,37.13381,-3.57274 33120,Cala,1193,AN,207,ES,37.96667,-6.31667 33135,Calañas,1193,AN,207,ES,37.65568,-6.8805 33144,Calicasas,1193,AN,207,ES,37.2713,-3.61345 33172,Camas,1193,AN,207,ES,37.40202,-6.03314 33175,Cambil,1193,AN,207,ES,37.67934,-3.56537 33189,Campillo de Arenas,1193,AN,207,ES,37.55535,-3.63552 33195,Campillos,1193,AN,207,ES,37.04826,-4.86308 33200,Campiña,1193,AN,207,ES,38.21896,-2.98069 33212,Campotéjar,1193,AN,207,ES,37.48235,-3.61771 33526,Cañada Rosal,1193,AN,207,ES,37.59924,-5.21016 33901,Cáñar,1193,AN,207,ES,36.92684,-3.42808 33536,Cañaveral de León,1193,AN,207,ES,38.01667,-6.51667 33231,Canena,1193,AN,207,ES,38.0493,-3.4831 33540,Cañete de las Torres,1193,AN,207,ES,37.86717,-4.31835 33541,Cañete la Real,1193,AN,207,ES,36.95154,-5.0244 33239,Caniles,1193,AN,207,ES,37.43671,-2.72482 33241,Canillas de Aceituno,1193,AN,207,ES,36.87303,-4.08254 33242,Canillas de Albaida,1193,AN,207,ES,36.84665,-3.98678 33245,Canjáyar,1193,AN,207,ES,37.00959,-2.73943 33257,Cantillana,1193,AN,207,ES,37.61032,-5.82472 33260,Cantoria,1193,AN,207,ES,37.35146,-2.19209 33268,Capileira,1193,AN,207,ES,36.96148,-3.35864 33276,Carataunas,1193,AN,207,ES,36.92204,-3.40834 33285,Carboneras,1193,AN,207,ES,36.99666,-1.89651 33288,Carboneros,1193,AN,207,ES,38.22958,-3.63139 33290,Carcabuey,1193,AN,207,ES,37.4442,-4.27471 33298,Cardeña,1193,AN,207,ES,38.27023,-4.32358 33310,Carmona,1193,AN,207,ES,37.47125,-5.64608 33325,Carratraca,1193,AN,207,ES,36.8529,-4.81998 33333,Carrión de los Céspedes,1193,AN,207,ES,37.37007,-6.32923 33337,Cartajima,1193,AN,207,ES,36.64548,-5.1541 33898,Cártama,1193,AN,207,ES,36.71068,-4.63297 33338,Cartaya,1193,AN,207,ES,37.28114,-7.15071 33343,Casabermeja,1193,AN,207,ES,36.8926,-4.42938 33348,Casarabonela,1193,AN,207,ES,36.78616,-4.84276 33350,Casares,1193,AN,207,ES,36.44689,-5.2858 33352,Casariche,1193,AN,207,ES,37.29389,-4.75972 33900,Cástaras,1193,AN,207,ES,36.93164,-3.25406 33412,Castell de Ferro,1193,AN,207,ES,36.72569,-3.355 33420,Castellar de la Frontera,1193,AN,207,ES,36.31736,-5.45407 33419,Castellar de Santisteban,1193,AN,207,ES,38.25422,-3.13179 33447,Castilblanco de los Arroyos,1193,AN,207,ES,37.67576,-5.98886 33454,Castilleja de Guzmán,1193,AN,207,ES,37.40955,-6.05515 33455,Castilleja de la Cuesta,1193,AN,207,ES,37.38594,-6.05258 33456,Castilleja del Campo,1193,AN,207,ES,37.38627,-6.33443 33468,Castilléjar,1193,AN,207,ES,37.71697,-2.6406 33464,Castillo de Locubín,1193,AN,207,ES,37.52858,-3.9422 33474,Castril,1193,AN,207,ES,37.79581,-2.78002 33488,Castro de Filabres,1193,AN,207,ES,37.18484,-2.44024 33491,Castro del Río,1193,AN,207,ES,37.69125,-4.48058 33522,Cazalilla,1193,AN,207,ES,37.98389,-3.88295 33523,Cazalla de la Sierra,1193,AN,207,ES,37.93333,-5.75 33524,Cazorla,1193,AN,207,ES,37.91495,-3.00342 33568,Cenes de la Vega,1193,AN,207,ES,37.16006,-3.53548 33619,Chauchina,1193,AN,207,ES,37.19977,-3.77157 33627,Chercos,1193,AN,207,ES,37.2545,-2.26657 33631,Chiclana de la Frontera,1193,AN,207,ES,36.41976,-6.14367 33630,Chiclana de Segura,1193,AN,207,ES,38.31187,-3.04219 33635,Chilluévar,1193,AN,207,ES,38.00088,-3.0324 33637,Chimeneas,1193,AN,207,ES,37.13125,-3.8213 33641,Chipiona,1193,AN,207,ES,36.73663,-6.43703 33643,Chirivel,1193,AN,207,ES,37.59527,-2.26844 33648,Chucena,1193,AN,207,ES,37.36305,-6.39304 33652,Churriana de la Vega,1193,AN,207,ES,37.14499,-3.64617 33666,Cijuela,1193,AN,207,ES,37.198,-3.81174 33902,Cóbdar,1193,AN,207,ES,37.26166,-2.21098 33723,Cogollos de Guadix,1193,AN,207,ES,37.22521,-3.16094 33831,Coín,1193,AN,207,ES,36.65947,-4.75639 33741,Colmenar,1193,AN,207,ES,36.90519,-4.33557 33747,Colomera,1193,AN,207,ES,37.37156,-3.71393 33751,Comares,1193,AN,207,ES,36.84929,-4.24664 33903,Cómpeta,1193,AN,207,ES,36.83352,-3.9743 33761,Conil de la Frontera,1193,AN,207,ES,36.27719,-6.0885 33762,Conquista,1193,AN,207,ES,38.4,-4.5 33765,Constantina,1193,AN,207,ES,37.86667,-5.61667 33904,Córdoba,1193,AN,207,ES,37.89155,-4.77275 33790,Coria del Río,1193,AN,207,ES,37.28766,-6.0541 33791,Coripe,1193,AN,207,ES,36.97335,-5.44022 33806,Corteconcepción,1193,AN,207,ES,37.9,-6.5 33807,Cortelazor,1193,AN,207,ES,37.93639,-6.62462 33810,Cortes de Baza,1193,AN,207,ES,37.65514,-2.77167 33812,Cortes de la Frontera,1193,AN,207,ES,36.6171,-5.34266 33820,Costacabana,1193,AN,207,ES,36.83807,-2.38111 33869,Cuevas Bajas,1193,AN,207,ES,37.23526,-4.48714 33874,Cuevas de San Marcos,1193,AN,207,ES,37.26666,-4.41432 33876,Cuevas del Almanzora,1193,AN,207,ES,37.29678,-1.88218 33877,Cuevas del Becerro,1193,AN,207,ES,36.87537,-5.04488 33878,Cuevas del Campo,1193,AN,207,ES,37.60755,-2.92938 33906,Cúllar-Vega,1193,AN,207,ES,37.15361,-3.67072 33883,Cumbres Mayores,1193,AN,207,ES,38.06194,-6.64565 33907,Cútar,1193,AN,207,ES,36.83134,-4.22739 33911,Dalías,1193,AN,207,ES,36.82179,-2.87138 33914,Darro,1193,AN,207,ES,37.34987,-3.29465 33920,Dehesas de Guadix,1193,AN,207,ES,37.58876,-3.10317 33921,Deifontes,1193,AN,207,ES,37.3262,-3.59568 33934,Diezma,1193,AN,207,ES,37.31982,-3.33256 33965,Dílar,1193,AN,207,ES,37.07282,-3.60134 33940,Domingo Pérez,1193,AN,207,ES,37.49591,-3.50929 33954,Doña Mencía,1193,AN,207,ES,37.55346,-4.35602 33949,Dos Hermanas,1193,AN,207,ES,37.28287,-5.92088 33950,Dos Torres,1193,AN,207,ES,38.45,-4.9 33966,Dúdar,1193,AN,207,ES,37.18579,-3.48347 33967,Dúrcal,1193,AN,207,ES,36.98788,-3.56601 38577,Écija,1193,AN,207,ES,37.5422,-5.0826 33977,El Arahal,1193,AN,207,ES,37.26273,-5.5453 33981,El Bosque,1193,AN,207,ES,36.75828,-5.50535 33986,El Carpio,1193,AN,207,ES,37.94085,-4.49696 33991,El Castillo de las Guardas,1193,AN,207,ES,37.69314,-6.31503 33992,El Cerro de Andévalo,1193,AN,207,ES,37.73537,-6.93692 33993,El Coronil,1193,AN,207,ES,37.07955,-5.6341 33995,El Cuervo,1193,AN,207,ES,36.85298,-6.03785 33996,El Ejido,1193,AN,207,ES,36.77629,-2.81456 33998,El Gastor,1193,AN,207,ES,36.85478,-5.32334 34013,El Puerto de Santa María,1193,AN,207,ES,36.59389,-6.23298 34016,El Rompido,1193,AN,207,ES,37.21773,-7.12206 34017,El Ronquillo,1193,AN,207,ES,37.72628,-6.1762 34018,El Rubio,1193,AN,207,ES,37.35617,-4.98896 34019,El Saucejo,1193,AN,207,ES,37.07237,-5.09818 34023,El Varadero,1193,AN,207,ES,36.72521,-3.52183 34026,El Viso,1193,AN,207,ES,38.48333,-4.95 34028,El Viso del Alcor,1193,AN,207,ES,37.39106,-5.71993 34047,Encinas Reales,1193,AN,207,ES,37.27419,-4.48828 34051,Encinasola,1193,AN,207,ES,38.13413,-6.86675 34060,Enix,1193,AN,207,ES,36.87732,-2.6018 34075,Escacena del Campo,1193,AN,207,ES,37.40837,-6.3887 34084,Escañuela,1193,AN,207,ES,37.87885,-4.03376 34094,Escúzar,1193,AN,207,ES,37.06219,-3.76126 34109,Espartinas,1193,AN,207,ES,37.38154,-6.12578 34112,Espejo,1193,AN,207,ES,37.6798,-4.55355 34114,Espelúy,1193,AN,207,ES,38.0318,-3.86309 34115,Espera,1193,AN,207,ES,36.87446,-5.806 34116,Espiel,1193,AN,207,ES,38.2,-5.01667 34136,Estación de Cártama,1193,AN,207,ES,36.73333,-4.61667 34141,Estepa,1193,AN,207,ES,37.29263,-4.87896 34143,Estepona,1193,AN,207,ES,36.42764,-5.14589 34162,Faraján,1193,AN,207,ES,36.61695,-5.18839 34175,Fernán-Núñez,1193,AN,207,ES,37.67044,-4.7264 34176,Ferreira,1193,AN,207,ES,37.17247,-3.03539 34194,Fiñana,1193,AN,207,ES,37.1715,-2.84011 34188,Fines,1193,AN,207,ES,37.36074,-2.2581 34205,Fondón,1193,AN,207,ES,36.9802,-2.85957 34206,Fonelas,1193,AN,207,ES,37.41042,-3.17158 34238,Frailes,1193,AN,207,ES,37.48617,-3.83743 34243,Freila,1193,AN,207,ES,37.5299,-2.90828 34266,Frigiliana,1193,AN,207,ES,36.78747,-3.89441 34282,Fuengirola,1193,AN,207,ES,36.53998,-4.62473 34290,Fuensanta de Martos,1193,AN,207,ES,37.64756,-3.90846 34297,Fuente de Piedra,1193,AN,207,ES,37.13526,-4.73 34304,Fuente la Lancha,1193,AN,207,ES,38.41667,-5.03333 34292,Fuente Obejuna,1193,AN,207,ES,38.26667,-5.41667 34293,Fuente Palmera,1193,AN,207,ES,37.70494,-5.09965 34294,Fuente Vaqueros,1193,AN,207,ES,37.22019,-3.78294 34306,Fuente-Tójar,1193,AN,207,ES,37.51095,-4.14631 34316,Fuenteheridos,1193,AN,207,ES,37.90545,-6.66108 34338,Fuentes de Andalucía,1193,AN,207,ES,37.46409,-5.34615 34362,Fuerte del Rey,1193,AN,207,ES,37.87492,-3.88389 34558,Gádor,1193,AN,207,ES,36.95322,-2.49254 34375,Galaroza,1193,AN,207,ES,37.92864,-6.7073 34380,Galera,1193,AN,207,ES,37.74262,-2.55175 34427,Garrucha,1193,AN,207,ES,37.18141,-1.82252 34438,Gaucín,1193,AN,207,ES,36.51784,-5.31581 34448,Gelves,1193,AN,207,ES,37.33481,-6.02601 34451,Genalguacil,1193,AN,207,ES,36.54546,-5.23572 34561,Génave,1193,AN,207,ES,38.43062,-2.7331 34454,Gerena,1193,AN,207,ES,37.52957,-6.15479 34562,Gérgal,1193,AN,207,ES,37.11886,-2.54012 34462,Gibraleón,1193,AN,207,ES,37.37628,-6.96895 34463,Gilena,1193,AN,207,ES,37.2515,-4.91442 34467,Gines,1193,AN,207,ES,37.38647,-6.07729 34473,Gobernador,1193,AN,207,ES,37.47845,-3.32119 34563,Gójar,1193,AN,207,ES,37.10456,-3.60565 34484,Gor,1193,AN,207,ES,37.36937,-2.97016 34497,Granada,1193,AN,207,ES,37.18817,-3.60667 34507,Grazalema,1193,AN,207,ES,36.76018,-5.36839 34519,Guadahortuna,1193,AN,207,ES,37.55711,-3.39859 34522,Guadalcanal,1193,AN,207,ES,38.1,-5.81667 34523,Guadalcázar,1193,AN,207,ES,37.75738,-4.94387 34531,Guadix,1193,AN,207,ES,37.29932,-3.13922 34533,Gualchos,1193,AN,207,ES,36.74467,-3.39079 34538,Guaro,1193,AN,207,ES,36.6563,-4.83433 34539,Guarromán,1193,AN,207,ES,38.18282,-3.68697 34570,Güéjar-Sierra,1193,AN,207,ES,37.15994,-3.43863 34567,Güevéjar,1193,AN,207,ES,37.25759,-3.59691 34548,Guillena,1193,AN,207,ES,37.54262,-6.05626 34593,Herrera,1193,AN,207,ES,37.36396,-4.84979 34608,Higuera de Arjona,1193,AN,207,ES,37.97064,-3.99061 34609,Higuera de Calatrava,1193,AN,207,ES,37.79848,-4.15737 34612,Higuera de la Sierra,1193,AN,207,ES,37.83333,-6.45 34620,Hinojales,1193,AN,207,ES,38.0,-6.58333 34621,Hinojares,1193,AN,207,ES,37.71586,-2.99769 34622,Hinojos,1193,AN,207,ES,37.29173,-6.37872 34627,Hinojosa del Duque,1193,AN,207,ES,38.50057,-5.14651 34660,Hornachuelos,1193,AN,207,ES,37.83333,-5.23333 34706,Huécija,1193,AN,207,ES,36.96804,-2.60941 34708,Huélago,1193,AN,207,ES,37.41972,-3.26226 34684,Huelma,1193,AN,207,ES,37.64784,-3.45985 34685,Huelva,1193,AN,207,ES,37.26638,-6.94004 34710,Huéneja,1193,AN,207,ES,37.1766,-2.95024 34711,Huércal de Almería,1193,AN,207,ES,36.88507,-2.4376 34712,Huércal-Overa,1193,AN,207,ES,37.38918,-1.943 34694,Huesa,1193,AN,207,ES,37.76434,-3.07639 34717,Huéscar,1193,AN,207,ES,37.81104,-2.54116 34718,Huétor Santillán,1193,AN,207,ES,37.22091,-3.51634 34719,Huétor Vega,1193,AN,207,ES,37.14529,-3.56963 34720,Huétor-Tájar,1193,AN,207,ES,37.19834,-4.04692 34702,Humilladero,1193,AN,207,ES,37.1139,-4.70298 34731,Ibros,1193,AN,207,ES,38.02106,-3.50313 34740,Igualeja,1193,AN,207,ES,36.63208,-5.12188 34746,Illar,1193,AN,207,ES,36.98562,-2.63871 34749,Illora,1193,AN,207,ES,37.28771,-3.88109 34757,Instinción,1193,AN,207,ES,36.99344,-2.66046 34766,Isla Cristina,1193,AN,207,ES,37.2,-7.31667 34767,Islantilla,1193,AN,207,ES,37.20572,-7.23742 34768,Istán,1193,AN,207,ES,36.58273,-4.94956 38580,Ítrabo,1193,AN,207,ES,36.79998,-3.63899 34782,Iznájar,1193,AN,207,ES,37.25766,-4.30836 34779,Iznalloz,1193,AN,207,ES,37.39258,-3.52762 34780,Iznate,1193,AN,207,ES,36.78333,-4.18333 34781,Iznatoraf,1193,AN,207,ES,38.15706,-3.03242 34785,Jabalquinto,1193,AN,207,ES,38.01935,-3.72512 34786,Jabugo,1193,AN,207,ES,37.91622,-6.72968 34811,Jaén,1193,AN,207,ES,37.76922,-3.79028 34795,Jamilena,1193,AN,207,ES,37.74717,-3.91433 34810,Jayena,1193,AN,207,ES,36.9492,-3.82313 34812,Jerez de la Frontera,1193,AN,207,ES,36.68645,-6.13606 34836,Jérez del Marquesado,1193,AN,207,ES,37.18382,-3.15961 34816,Jimena,1193,AN,207,ES,37.84157,-3.4771 34817,Jimena de la Frontera,1193,AN,207,ES,36.43517,-5.45387 34818,Jimera de Líbar,1193,AN,207,ES,36.65119,-5.27412 34838,Jódar,1193,AN,207,ES,37.84064,-3.35262 34826,Jubrique,1193,AN,207,ES,36.56475,-5.2156 34829,Jun,1193,AN,207,ES,37.22083,-3.59407 34834,Juviles,1193,AN,207,ES,36.94879,-3.22586 34839,Júzcar,1193,AN,207,ES,36.62442,-5.16971 34853,La Algaba,1193,AN,207,ES,37.46325,-6.01113 34855,La Antilla,1193,AN,207,ES,37.20709,-7.20909 34862,La Campana,1193,AN,207,ES,37.56891,-5.4267 34864,La Carlota,1193,AN,207,ES,37.67359,-4.93122 34865,La Carolina,1193,AN,207,ES,38.27559,-3.61535 34875,La Gangosa Vistasol,1193,AN,207,ES,36.80581,-2.62174 34882,La Guardia de Jaén,1193,AN,207,ES,37.74303,-3.69312 34884,La Herradura,1193,AN,207,ES,36.73491,-3.7376 34886,La Iruela,1193,AN,207,ES,37.91986,-2.99659 34888,La Lantejuela,1193,AN,207,ES,37.3535,-5.22477 34892,La Línea de la Concepción,1193,AN,207,ES,36.16809,-5.34777 34891,La Luisiana,1193,AN,207,ES,37.52602,-5.24883 34895,La Mojonera,1193,AN,207,ES,37.29233,-2.4373 34899,La Palma del Condado,1193,AN,207,ES,37.38605,-6.55231 34910,La Puebla de Cazalla,1193,AN,207,ES,37.22155,-5.31153 34912,La Puebla de los Infantes,1193,AN,207,ES,37.7809,-5.38837 34913,La Puebla del Río,1193,AN,207,ES,37.26787,-6.06264 34915,La Puerta de Segura,1193,AN,207,ES,38.35293,-2.73956 34916,La Rambla,1193,AN,207,ES,37.6076,-4.73962 34917,La Rinconada,1193,AN,207,ES,37.48613,-5.98091 34922,La Roda de Andalucía,1193,AN,207,ES,37.20381,-4.77802 34933,La Victoria,1193,AN,207,ES,37.68126,-4.85199 35174,Láchar,1193,AN,207,ES,37.19519,-3.83277 34967,Lanjarón,1193,AN,207,ES,36.91853,-3.4818 34969,Lanteira,1193,AN,207,ES,37.16871,-3.13823 34977,Laroya,1193,AN,207,ES,37.29771,-2.33419 34982,Larva,1193,AN,207,ES,37.76069,-3.20269 34983,Las Cabezas de San Juan,1193,AN,207,ES,36.9838,-5.93933 34984,Las Gabias,1193,AN,207,ES,37.13548,-3.67029 35004,Laujar de Andarax,1193,AN,207,ES,36.99516,-2.89033 35011,Lebrija,1193,AN,207,ES,36.92077,-6.07529 35029,Lentegí,1193,AN,207,ES,36.83613,-3.67426 35030,Lepe,1193,AN,207,ES,37.25482,-7.20433 35052,Linares,1193,AN,207,ES,38.09519,-3.63602 35055,Linares de la Sierra,1193,AN,207,ES,37.87963,-6.62321 35096,Lobras,1193,AN,207,ES,36.92849,-3.2123 35102,Loja,1193,AN,207,ES,37.16887,-4.15129 35108,Lopera,1193,AN,207,ES,37.94542,-4.21463 35110,Lora de Estepa,1193,AN,207,ES,37.26926,-4.82759 35111,Lora del Río,1193,AN,207,ES,37.65896,-5.52751 35118,Los Barrios,1193,AN,207,ES,36.18482,-5.49213 35119,Los Corrales,1193,AN,207,ES,37.09918,-4.98429 35126,Los Molares,1193,AN,207,ES,37.15704,-5.71802 35131,Los Palacios y Villafranca,1193,AN,207,ES,37.16181,-5.92433 35136,Los Villares,1193,AN,207,ES,37.69146,-3.81868 35147,Lubrín,1193,AN,207,ES,37.21538,-2.06677 35148,Lucainena de las Torres,1193,AN,207,ES,37.04037,-2.20095 35177,Lúcar,1193,AN,207,ES,37.40035,-2.42496 35149,Lucena,1193,AN,207,ES,37.40881,-4.48522 35152,Lucena del Puerto,1193,AN,207,ES,37.30396,-6.72926 35160,Lugros,1193,AN,207,ES,37.22942,-3.2415 35178,Lújar,1193,AN,207,ES,36.78831,-3.404 35168,Lupión,1193,AN,207,ES,37.99653,-3.54699 35169,Luque,1193,AN,207,ES,37.55797,-4.27974 35179,Macael,1193,AN,207,ES,37.33318,-2.30087 35212,Mairena del Alcor,1193,AN,207,ES,37.37301,-5.74951 35213,Mairena del Aljarafe,1193,AN,207,ES,37.34461,-6.06391 35703,Málaga,1193,AN,207,ES,36.72016,-4.42034 35242,Mancha Real,1193,AN,207,ES,37.78627,-3.61226 35250,Manilva,1193,AN,207,ES,36.37645,-5.25026 35271,Manzanilla,1193,AN,207,ES,37.38987,-6.43295 35275,Maracena,1193,AN,207,ES,37.20764,-3.63493 35281,Marbella,1193,AN,207,ES,36.51543,-4.88583 35283,Marchal,1193,AN,207,ES,37.29639,-3.20353 35285,Marchena,1193,AN,207,ES,37.329,-5.41681 35312,María,1193,AN,207,ES,37.71023,-2.16454 35291,Marinaleda,1193,AN,207,ES,37.3712,-4.95949 35295,Marmolejo,1193,AN,207,ES,38.04549,-4.17029 35307,Martín de la Jara,1193,AN,207,ES,37.10867,-4.96347 35302,Martos,1193,AN,207,ES,37.72107,-3.97264 35350,Mazagón,1193,AN,207,ES,37.13749,-6.82697 35369,Medina Sidonia,1193,AN,207,ES,36.45695,-5.92717 35405,Mengibar,1193,AN,207,ES,37.96978,-3.80884 35427,Mijas,1193,AN,207,ES,36.59575,-4.63728 35463,Moclín,1193,AN,207,ES,37.33959,-3.78651 35462,Moclinejo,1193,AN,207,ES,36.77134,-4.25514 35468,Moguer,1193,AN,207,ES,37.27559,-6.83851 35473,Mojacar,1193,AN,207,ES,37.1402,-1.85102 35489,Mollina,1193,AN,207,ES,37.12534,-4.65686 35490,Molvízar,1193,AN,207,ES,36.78592,-3.60783 35494,Monachil,1193,AN,207,ES,37.1332,-3.53724 35503,Monda,1193,AN,207,ES,36.63027,-4.83192 35533,Montalbán de Córdoba,1193,AN,207,ES,37.57996,-4.74935 35548,Montefrío,1193,AN,207,ES,37.32308,-4.00898 35550,Montejaque,1193,AN,207,ES,36.73684,-5.2499 35551,Montejicar,1193,AN,207,ES,37.57223,-3.50527 35557,Montellano,1193,AN,207,ES,36.99531,-5.57145 35558,Montemayor,1193,AN,207,ES,37.6479,-4.69779 35577,Montilla,1193,AN,207,ES,37.58627,-4.63805 35578,Montillana,1193,AN,207,ES,37.50168,-3.67368 35579,Montizón,1193,AN,207,ES,38.34249,-3.10404 35583,Montoro,1193,AN,207,ES,38.02409,-4.3834 35585,Monturque,1193,AN,207,ES,37.47186,-4.58164 35600,Moraleda de Zafayona,1193,AN,207,ES,37.16723,-3.96505 35629,Moriles,1193,AN,207,ES,37.4367,-4.60761 35636,Morón de la Frontera,1193,AN,207,ES,37.12084,-5.45403 35645,Motril,1193,AN,207,ES,36.75066,-3.5179 35686,Murtas,1193,AN,207,ES,36.88504,-3.10945 35781,Navas de San Juan,1193,AN,207,ES,38.18382,-3.31598 35802,Nerja,1193,AN,207,ES,36.75278,-3.8744 35804,Nerva,1193,AN,207,ES,37.69627,-6.54967 35805,Niebla,1193,AN,207,ES,37.36213,-6.67894 35809,Nigüelas,1193,AN,207,ES,36.9776,-3.53949 35844,Níjar,1193,AN,207,ES,36.96655,-2.20595 35845,Nívar,1193,AN,207,ES,37.25909,-3.57768 35812,Noalejo,1193,AN,207,ES,37.53017,-3.65615 35834,Nueva-Carteya,1193,AN,207,ES,37.5863,-4.46759 35853,Obejo,1193,AN,207,ES,38.13265,-4.80018 35862,Ogíjares,1193,AN,207,ES,37.11913,-3.60772 35863,Ohanes,1193,AN,207,ES,37.03861,-2.74524 35870,Ojén,1193,AN,207,ES,36.56486,-4.85561 35888,Olivares,1193,AN,207,ES,37.41802,-6.15603 35914,Olula de Castro,1193,AN,207,ES,37.17475,-2.4743 35915,Olula del Río,1193,AN,207,ES,37.35445,-2.29754 35917,Olvera,1193,AN,207,ES,36.93418,-5.26678 35936,Orce,1193,AN,207,ES,37.7212,-2.47752 35937,Orcera,1193,AN,207,ES,38.31742,-2.66487 38583,Órgiva,1193,AN,207,ES,36.90259,-3.42379 35948,Oria,1193,AN,207,ES,37.4853,-2.29292 35975,Osuna,1193,AN,207,ES,37.2376,-5.10311 35982,Otívar,1193,AN,207,ES,36.81582,-3.67979 35981,Otura,1193,AN,207,ES,37.08846,-3.63321 35996,Padul,1193,AN,207,ES,37.02462,-3.62678 35997,Padules,1193,AN,207,ES,36.99813,-2.77367 36024,Palenciana,1193,AN,207,ES,37.24851,-4.58261 36029,Palma del Río,1193,AN,207,ES,37.70024,-5.28121 36037,Palomares del Río,1193,AN,207,ES,37.32225,-6.05863 36041,Palos de la Frontera,1193,AN,207,ES,37.23457,-6.89471 36043,Pampaneira,1193,AN,207,ES,36.94015,-3.36096 36058,Paradas,1193,AN,207,ES,37.29047,-5.49703 36061,Parauta,1193,AN,207,ES,36.65629,-5.12916 36072,Partaloa,1193,AN,207,ES,37.40764,-2.22526 36078,Paterna de Rivera,1193,AN,207,ES,36.52246,-5.86578 36079,Paterna del Campo,1193,AN,207,ES,37.41948,-6.40248 36081,Paterna del Río,1193,AN,207,ES,37.02222,-2.95343 36085,Paymogo,1193,AN,207,ES,37.73999,-7.34499 36088,Peal de Becerro,1193,AN,207,ES,37.91338,-3.12148 36096,Pedrera,1193,AN,207,ES,37.22604,-4.8942 36098,Pedro Abad,1193,AN,207,ES,37.96686,-4.4556 36100,Pedro Martínez,1193,AN,207,ES,37.5029,-3.23134 36102,Pedroche,1193,AN,207,ES,38.42848,-4.76325 36114,Pegalajar,1193,AN,207,ES,37.74008,-3.64946 36126,Peligros,1193,AN,207,ES,37.23231,-3.62901 36163,Peñaflor,1193,AN,207,ES,37.70892,-5.34504 36174,Peñarroya-Pueblonuevo,1193,AN,207,ES,38.3,-5.26667 36149,Periana,1193,AN,207,ES,36.92931,-4.19163 36188,Pilas,1193,AN,207,ES,37.30337,-6.30097 36229,Piñar,1193,AN,207,ES,37.44457,-3.43861 36211,Pinos Genil,1193,AN,207,ES,37.16346,-3.50215 36212,Pinos Puente,1193,AN,207,ES,37.25109,-3.74967 36224,Pizarra,1193,AN,207,ES,36.76543,-4.70833 36267,Polícar,1193,AN,207,ES,37.25759,-3.23375 36265,Polopos,1193,AN,207,ES,36.79466,-3.29816 36277,Porcuna,1193,AN,207,ES,37.87102,-4.18501 36486,Pórtugos,1193,AN,207,ES,36.94193,-3.31066 36303,Posadas,1193,AN,207,ES,37.80205,-5.10726 36316,Pozo Alcón,1193,AN,207,ES,37.70256,-2.93367 36323,Pozoblanco,1193,AN,207,ES,38.37906,-4.84827 36346,Prado del Rey,1193,AN,207,ES,36.78756,-5.55589 36354,Priego de Córdoba,1193,AN,207,ES,37.43807,-4.19523 36358,Province of Córdoba,1193,AN,207,ES,38.0,-4.83333 36369,Provincia de Cádiz,1193,AN,207,ES,36.5,-5.75 36370,Provincia de Granada,1193,AN,207,ES,37.25,-3.25 36372,Provincia de Huelva,1193,AN,207,ES,37.66667,-7.0 36374,Provincia de Jaén,1193,AN,207,ES,38.0,-3.5 36380,Provincia de Málaga,1193,AN,207,ES,36.8,-4.75 36388,Provincia de Sevilla,1193,AN,207,ES,37.44701,-5.69608 36401,Pruna,1193,AN,207,ES,36.97226,-5.2223 36415,Puebla de Don Fadrique,1193,AN,207,ES,37.96156,-2.43961 36417,Puebla de Guzmán,1193,AN,207,ES,37.61427,-7.24878 36436,Puente de Génave,1193,AN,207,ES,38.35544,-2.8032 36441,Puente-Genil,1193,AN,207,ES,37.38943,-4.76686 36447,Puerto Real,1193,AN,207,ES,36.52819,-6.19011 36450,Puerto Serrano,1193,AN,207,ES,36.92209,-5.54304 36466,Pujerra,1193,AN,207,ES,36.61274,-5.14979 36468,Pulianas,1193,AN,207,ES,37.22302,-3.60832 36469,Pulpí,1193,AN,207,ES,37.41154,-1.74496 36470,Punta Umbría,1193,AN,207,ES,37.18213,-6.96605 36475,Purchena,1193,AN,207,ES,37.34744,-2.3608 36477,Purullena,1193,AN,207,ES,37.31763,-3.19056 36532,Quéntar,1193,AN,207,ES,37.19253,-3.46653 36498,Quesada,1193,AN,207,ES,37.84338,-3.06561 36714,Rágol,1193,AN,207,ES,36.99523,-2.68178 36584,Retamar,1193,AN,207,ES,36.8332,-2.31597 36627,Rincón de la Victoria,1193,AN,207,ES,36.71715,-4.27583 36716,Ríogordo,1193,AN,207,ES,36.91727,-4.29318 36630,Rioja,1193,AN,207,ES,36.94508,-2.46302 36673,Ronda,1193,AN,207,ES,36.74231,-5.16709 36675,Roquetas de Mar,1193,AN,207,ES,36.76419,-2.61475 36676,Rosal de la Frontera,1193,AN,207,ES,37.96754,-7.21889 36680,Rota,1193,AN,207,ES,36.62545,-6.3622 36692,Rubite,1193,AN,207,ES,36.80947,-3.34816 36705,Rus,1193,AN,207,ES,38.04759,-3.46254 36706,Rute,1193,AN,207,ES,37.3269,-4.36827 36724,Sabiote,1193,AN,207,ES,38.06916,-3.31448 36746,Salar,1193,AN,207,ES,37.15036,-4.06576 36747,Salares,1193,AN,207,ES,36.85463,-4.02434 36774,Salobreña,1193,AN,207,ES,36.74277,-3.58717 36779,Salteras,1193,AN,207,ES,37.4206,-6.11049 36810,San Bartolomé de la Torre,1193,AN,207,ES,37.44515,-7.10597 36827,San Enrique de Guadiaro,1193,AN,207,ES,36.30475,-5.29095 36835,San Fernando,1193,AN,207,ES,36.4759,-6.19817 36841,San José,1193,AN,207,ES,36.76048,-2.10912 36842,San José del Valle,1193,AN,207,ES,36.60554,-5.79895 36844,San Juan de Aznalfarache,1193,AN,207,ES,37.35813,-6.03731 36852,San Juan del Puerto,1193,AN,207,ES,37.31667,-6.84139 36896,San Nicolás del Puerto,1193,AN,207,ES,38.0,-5.65 36903,San Pedro de Alcántara,1193,AN,207,ES,36.48839,-4.99123 36919,San Roque,1193,AN,207,ES,36.21067,-5.38415 36921,San Sebastián de los Ballesteros,1193,AN,207,ES,37.65376,-4.82409 36923,San Silvestre de Guzmán,1193,AN,207,ES,37.3877,-7.34908 36947,Sanlúcar de Barrameda,1193,AN,207,ES,36.77808,-6.3515 36948,Sanlúcar de Guadiana,1193,AN,207,ES,37.47268,-7.46546 36949,Sanlúcar la Mayor,1193,AN,207,ES,37.38758,-6.20346 37006,Santa Ana la Real,1193,AN,207,ES,37.86245,-6.72385 37009,Santa Bárbara de Casa,1193,AN,207,ES,37.79665,-7.18735 37047,Santa Elena,1193,AN,207,ES,38.34162,-3.53953 37049,Santa Eufemia,1193,AN,207,ES,38.6,-4.9 37059,Santa Fe de Mondújar,1193,AN,207,ES,36.97479,-2.53126 37094,Santa Olalla del Cala,1193,AN,207,ES,37.9,-6.21667 37104,Santaella,1193,AN,207,ES,37.56294,-4.84362 37105,Santafé,1193,AN,207,ES,37.18856,-3.71887 37113,Santiago de Calatrava,1193,AN,207,ES,37.75382,-4.17093 37131,Santiponce,1193,AN,207,ES,37.43553,-6.04106 37133,Santisteban del Puerto,1193,AN,207,ES,38.24829,-3.20762 37143,Santo Tomé,1193,AN,207,ES,38.02861,-3.10092 37182,Sayalonga,1193,AN,207,ES,36.79819,-4.01325 37188,Sedella,1193,AN,207,ES,36.86232,-4.03314 37197,Segura de la Sierra,1193,AN,207,ES,38.29777,-2.65229 37228,Serón,1193,AN,207,ES,37.34485,-2.50913 37236,Setenil de las Bodegas,1193,AN,207,ES,36.86397,-5.18177 37239,Sevilla,1193,AN,207,ES,37.38283,-5.97317 37246,Sierra de Yeguas,1193,AN,207,ES,37.1242,-4.86773 37248,Sierro,1193,AN,207,ES,37.32237,-2.39844 37254,Siles,1193,AN,207,ES,38.38983,-2.5819 37288,Somontín,1193,AN,207,ES,37.39176,-2.38828 37296,Soportújar,1193,AN,207,ES,36.92863,-3.40542 37298,Sorbas,1193,AN,207,ES,37.09761,-2.12349 37302,Sorihuela del Guadalimar,1193,AN,207,ES,38.24062,-3.0536 37305,Sorvilán,1193,AN,207,ES,36.79505,-3.26769 37331,Suflí,1193,AN,207,ES,37.33866,-2.38817 37343,Tabernas,1193,AN,207,ES,37.04992,-2.39084 37350,Tahal,1193,AN,207,ES,37.22797,-2.2847 37381,Tarifa,1193,AN,207,ES,36.01393,-5.60695 37390,Teba,1193,AN,207,ES,36.98358,-4.91913 37406,Terque,1193,AN,207,ES,36.98393,-2.59679 37667,Tíjola,1193,AN,207,ES,37.34606,-2.43326 37439,Tocina,1193,AN,207,ES,37.60904,-5.73403 37448,Tolox,1193,AN,207,ES,36.68721,-4.90511 37449,Tomares,1193,AN,207,ES,37.37281,-6.04589 37487,Torre Alháquime,1193,AN,207,ES,36.91588,-5.23381 37501,Torre del Campo,1193,AN,207,ES,37.77051,-3.89731 37503,Torre del Mar,1193,AN,207,ES,36.742,-4.09291 37506,Torre-Cardela,1193,AN,207,ES,37.50456,-3.35609 37511,Torreblascopedro,1193,AN,207,ES,37.9975,-3.6378 37513,Torrecampo,1193,AN,207,ES,38.46667,-4.66667 37530,Torredonjimeno,1193,AN,207,ES,37.76748,-3.95776 37561,Torremolinos,1193,AN,207,ES,36.62035,-4.49976 37566,Torrenueva,1193,AN,207,ES,36.70396,-3.48971 37569,Torreperogil,1193,AN,207,ES,38.0354,-3.28998 37571,Torres,1193,AN,207,ES,37.78537,-3.50902 37592,Torrox,1193,AN,207,ES,36.75793,-3.95233 37605,Totalán,1193,AN,207,ES,36.76526,-4.29707 37625,Trebujena,1193,AN,207,ES,36.87075,-6.17586 37634,Trevélez,1193,AN,207,ES,37.00037,-3.26545 37637,Trigueros,1193,AN,207,ES,37.38606,-6.8268 37656,Turre,1193,AN,207,ES,37.15224,-1.89497 37657,Turrillas,1193,AN,207,ES,37.02948,-2.26607 38584,Úbeda,1193,AN,207,ES,38.01328,-3.3705 37670,Ubrique,1193,AN,207,ES,36.67777,-5.446 37675,Ugíjar,1193,AN,207,ES,36.96087,-3.05523 37679,Uleila del Campo,1193,AN,207,ES,37.1846,-2.20491 37685,Umbrete,1193,AN,207,ES,37.36881,-6.15847 37697,Urrácal,1193,AN,207,ES,37.3974,-2.36485 37711,Utrera,1193,AN,207,ES,37.18516,-5.78093 37758,Valdelarco,1193,AN,207,ES,37.94877,-6.68202 37783,Valdepeñas de Jaén,1193,AN,207,ES,37.58903,-3.8145 37796,Valderrubio,1193,AN,207,ES,37.23378,-3.82005 37815,Valdés,1193,AN,207,ES,36.75835,-4.24235 37809,Valdezorras,1193,AN,207,ES,37.42939,-5.92629 37822,Valencina de la Concepción,1193,AN,207,ES,37.41618,-6.07422 37823,Valenzuela,1193,AN,207,ES,37.7756,-4.22038 38413,Válor,1193,AN,207,ES,36.99618,-3.08287 37893,Valverde del Camino,1193,AN,207,ES,37.57511,-6.75432 37921,Vejer de la Frontera,1193,AN,207,ES,36.25213,-5.96717 37926,Velefique,1193,AN,207,ES,37.19407,-2.40155 38414,Vélez de Benaudalla,1193,AN,207,ES,36.83244,-3.51539 37927,Velez Rubio,1193,AN,207,ES,37.64844,-2.07686 38415,Vélez-Blanco,1193,AN,207,ES,37.69178,-2.09587 38416,Vélez-Málaga,1193,AN,207,ES,36.78107,-4.10266 37941,Ventas de Huelma,1193,AN,207,ES,37.0684,-3.81983 37947,Vera,1193,AN,207,ES,37.24345,-1.85905 37961,Viator,1193,AN,207,ES,36.89006,-2.42695 38417,Vícar,1193,AN,207,ES,36.83155,-2.64273 38006,Vilches,1193,AN,207,ES,38.20695,-3.51025 38014,Villa del Río,1193,AN,207,ES,37.98108,-4.29003 38016,Villablanca,1193,AN,207,ES,37.30239,-7.34413 38026,Villacarrillo,1193,AN,207,ES,38.1156,-3.0848 38056,Villafranca de Córdoba,1193,AN,207,ES,37.96257,-4.54547 38081,Villaharta,1193,AN,207,ES,38.13333,-4.9 38102,Villalba del Alcor,1193,AN,207,ES,37.39731,-6.47461 38124,Villaluenga del Rosario,1193,AN,207,ES,36.69644,-5.38601 38132,Villamanrique de la Condesa,1193,AN,207,ES,37.24481,-6.30665 38136,Villamartín,1193,AN,207,ES,36.85979,-5.64485 38171,Villanueva de Algaidas,1193,AN,207,ES,37.1835,-4.45032 38180,Villanueva de Córdoba,1193,AN,207,ES,38.32277,-4.62873 38200,Villanueva de la Reina,1193,AN,207,ES,38.00432,-3.91603 38205,Villanueva de las Cruces,1193,AN,207,ES,37.62783,-7.02359 38208,Villanueva de las Torres,1193,AN,207,ES,37.55719,-3.08868 38210,Villanueva de los Castillejos,1193,AN,207,ES,37.4994,-7.29118 38189,Villanueva de San Juan,1193,AN,207,ES,37.04955,-5.1754 38192,Villanueva de Tapia,1193,AN,207,ES,37.18276,-4.33383 38212,Villanueva del Ariscal,1193,AN,207,ES,37.39623,-6.14077 38213,Villanueva del Arzobispo,1193,AN,207,ES,38.16842,-3.00742 38217,Villanueva del Duque,1193,AN,207,ES,38.38333,-5.0 38223,Villanueva del Río y Minas,1193,AN,207,ES,37.65502,-5.71369 38222,Villanueva del Rosario,1193,AN,207,ES,36.99679,-4.36535 38224,Villanueva del Trabuco,1193,AN,207,ES,37.02832,-4.33891 38264,Villaralto,1193,AN,207,ES,38.45,-4.98333 38268,Villardompardo,1193,AN,207,ES,37.83735,-4.00051 38294,Villarrasa,1193,AN,207,ES,37.38849,-6.60641 38301,Villarrubia,1193,AN,207,ES,37.85,-4.9 38350,Villaverde del Río,1193,AN,207,ES,37.58919,-5.87443 38356,Villaviciosa de Córdoba,1193,AN,207,ES,38.08333,-5.01667 38410,Viñuela,1193,AN,207,ES,36.86307,-4.14124 38418,Víznar,1193,AN,207,ES,37.23149,-3.55382 38441,Yunquera,1193,AN,207,ES,36.73252,-4.92122 38449,Zafarraya,1193,AN,207,ES,36.97554,-4.14442 38453,Zagra,1193,AN,207,ES,37.25561,-4.16905 38454,Zahara,1193,AN,207,ES,36.84055,-5.39128 38455,Zahara de los Atunes,1193,AN,207,ES,36.1369,-5.84591 38459,Zalamea la Real,1193,AN,207,ES,37.68012,-6.65977 38501,Zubia,1193,AN,207,ES,37.11906,-3.584 38505,Zufre,1193,AN,207,ES,37.83333,-6.33333 38507,Zuheros,1193,AN,207,ES,37.54332,-4.31531 38512,Zújar,1193,AN,207,ES,37.54285,-2.84197 38510,Zurgena,1193,AN,207,ES,37.34218,-2.03985 31898,Ababuj,1177,AR,207,ES,40.54908,-0.80758 31904,Abanto,1177,AR,207,ES,41.13751,-1.69818 31913,Abiego,1177,AR,207,ES,42.12094,-0.06873 31914,Abizanda,1177,AR,207,ES,42.24236,0.19717 31927,Adahuesca,1177,AR,207,ES,42.1461,-0.00804 31971,Agón,1177,AR,207,ES,41.85574,-1.45233 31952,Aguarón,1177,AR,207,ES,41.33901,-1.27055 31954,Aguatón,1177,AR,207,ES,40.67158,-1.23475 31955,Aguaviva,1177,AR,207,ES,40.82211,-0.19532 31972,Agüero,1177,AR,207,ES,42.35505,-0.79324 31964,Aguilar del Alfambra,1177,AR,207,ES,40.59027,-0.79589 31966,Aguilón,1177,AR,207,ES,41.29467,-1.04634 32594,Aínsa,1177,AR,207,ES,42.41547,0.14008 31982,Ainzón,1177,AR,207,ES,41.81644,-1.51995 31988,Alacón,1177,AR,207,ES,41.02575,-0.69782 31989,Aladrén,1177,AR,207,ES,41.24917,-1.15591 31991,Alagón,1177,AR,207,ES,41.76964,-1.11906 32004,Alarba,1177,AR,207,ES,41.20482,-1.61335 32009,Alba,1177,AR,207,ES,40.61825,-1.34658 32022,Albalate de Cinca,1177,AR,207,ES,41.72521,0.15244 32025,Albalate del Arzobispo,1177,AR,207,ES,41.12173,-0.51142 32026,Albalatillo,1177,AR,207,ES,41.73527,-0.15115 32029,Albarracín,1177,AR,207,ES,40.40818,-1.44375 32033,Albelda,1177,AR,207,ES,41.86542,0.45999 32039,Alberite de San Juan,1177,AR,207,ES,41.82009,-1.47063 32040,Albero Alto,1177,AR,207,ES,42.05031,-0.3371 32041,Albero Bajo,1177,AR,207,ES,42.0238,-0.38018 32042,Alberuela de Tubo,1177,AR,207,ES,41.90846,-0.21418 32044,Albeta,1177,AR,207,ES,41.82636,-1.49936 32054,Alborge,1177,AR,207,ES,41.33367,-0.35675 32066,Alcaine,1177,AR,207,ES,40.95341,-0.70583 32069,Alcalá de Ebro,1177,AR,207,ES,41.81495,-1.19429 32071,Alcalá de Gurrea,1177,AR,207,ES,42.06653,-0.68534 32074,Alcalá de la Selva,1177,AR,207,ES,40.37183,-0.72015 32073,Alcalá de Moncayo,1177,AR,207,ES,41.7861,-1.69544 32078,Alcalá del Obispo,1177,AR,207,ES,42.0773,-0.2912 32094,Alcañiz,1177,AR,207,ES,41.05,-0.13333 32105,Alcolea de Cinca,1177,AR,207,ES,41.71944,0.11716 32116,Alconchel de Ariza,1177,AR,207,ES,41.20428,-2.12191 32120,Alcorisa,1177,AR,207,ES,40.8921,-0.38143 32124,Alcubierre,1177,AR,207,ES,41.80757,-0.45291 32176,Aldehuela de Liestos,1177,AR,207,ES,41.0641,-1.70107 32185,Alerre,1177,AR,207,ES,42.16468,-0.46369 32191,Alfajarín,1177,AR,207,ES,41.614,-0.7037 32192,Alfambra,1177,AR,207,ES,40.54638,-1.03314 32193,Alfamén,1177,AR,207,ES,41.43919,-1.24458 32206,Alfántega,1177,AR,207,ES,41.82832,0.14823 32205,Alforque,1177,AR,207,ES,41.32942,-0.38525 32234,Alhama de Aragón,1177,AR,207,ES,41.29657,-1.89358 32242,Aliaga,1177,AR,207,ES,40.67411,-0.70333 32255,Allepuz,1177,AR,207,ES,40.49295,-0.72478 32257,Alloza,1177,AR,207,ES,40.96942,-0.52941 32258,Allueva,1177,AR,207,ES,40.98533,-1.04258 32292,Almochuel,1177,AR,207,ES,41.27992,-0.55067 32298,Almohaja,1177,AR,207,ES,40.60489,-1.438 32302,Almonacid de la Cuba,1177,AR,207,ES,41.28067,-0.79266 32303,Almonacid de la Sierra,1177,AR,207,ES,41.39754,-1.32394 32309,Almozara,1177,AR,207,ES,41.66124,-0.90169 32311,Almudévar,1177,AR,207,ES,42.04255,-0.58141 32312,Almuniente,1177,AR,207,ES,41.94949,-0.41173 32317,Alobras,1177,AR,207,ES,40.18169,-1.38731 32326,Alpartir,1177,AR,207,ES,41.42253,-1.38061 32330,Alpeñés,1177,AR,207,ES,40.79958,-1.06625 32335,Alquézar,1177,AR,207,ES,42.17268,0.02586 32350,Ambel,1177,AR,207,ES,41.79472,-1.6152 32365,Anadón,1177,AR,207,ES,40.98225,-0.98367 32373,Andorra,1177,AR,207,ES,40.97655,-0.44721 32377,Anento,1177,AR,207,ES,41.06958,-1.33375 32384,Angüés,1177,AR,207,ES,42.11109,-0.15298 32389,Ansó,1177,AR,207,ES,42.75785,-0.82947 32395,Antillón,1177,AR,207,ES,42.03639,-0.16239 32401,Aragüés del Puerto,1177,AR,207,ES,42.70641,-0.66999 32408,Aranda de Moncayo,1177,AR,207,ES,41.57749,-1.79171 32530,Arándiga,1177,AR,207,ES,41.50872,-1.50074 32440,Arcos de las Salinas,1177,AR,207,ES,39.98333,-1.03333 32450,Arenys de Lledó / Arens de Lledó,1177,AR,207,ES,40.99244,0.27092 32465,Argavieso,1177,AR,207,ES,42.05275,-0.27834 32470,Argente,1177,AR,207,ES,40.68841,-1.16217 32474,Arguis,1177,AR,207,ES,42.31476,-0.43967 32481,Ariño,1177,AR,207,ES,41.03019,-0.59206 32480,Ariza,1177,AR,207,ES,41.31442,-2.05332 32525,Artieda,1177,AR,207,ES,42.58538,-0.98422 32553,Atea,1177,AR,207,ES,41.16059,-1.55533 32554,Ateca,1177,AR,207,ES,41.33092,-1.79353 32573,Ayerbe,1177,AR,207,ES,42.27267,-0.68844 32581,Azara,1177,AR,207,ES,42.07033,-0.02921 32583,Azlor,1177,AR,207,ES,42.09427,-0.04594 32589,Azuara,1177,AR,207,ES,41.25822,-0.87078 33048,Bádenas,1177,AR,207,ES,41.09216,-1.12241 32605,Badules,1177,AR,207,ES,41.13901,-1.25366 32606,Baells,1177,AR,207,ES,41.95325,0.45956 33049,Báguena,1177,AR,207,ES,41.04181,-1.35767 32610,Bagüés,1177,AR,207,ES,42.54935,-0.94577 32614,Bailo,1177,AR,207,ES,42.50906,-0.81136 32622,Balconchán,1177,AR,207,ES,41.08737,-1.45998 32625,Ballobar,1177,AR,207,ES,41.62106,0.192 32631,Banastás,1177,AR,207,ES,42.18089,-0.45191 32712,Bañón,1177,AR,207,ES,40.83825,-1.19091 32645,Barbastro,1177,AR,207,ES,42.03565,0.12686 33050,Bárboles,1177,AR,207,ES,41.70898,-1.18594 32649,Barbués,1177,AR,207,ES,41.98085,-0.41949 32650,Barbuñales,1177,AR,207,ES,42.02563,-0.08659 33051,Bárcabo,1177,AR,207,ES,42.24219,0.06934 32660,Bardallur,1177,AR,207,ES,41.68423,-1.21183 32668,Barrachina,1177,AR,207,ES,40.89688,-1.13858 32713,Bea,1177,AR,207,ES,41.03633,-1.14725 32737,Belchite,1177,AR,207,ES,41.306,-0.754 32741,Bello,1177,AR,207,ES,40.92266,-1.4985 32753,Belver de Cinca,1177,AR,207,ES,41.69272,0.17827 32777,Benasque,1177,AR,207,ES,42.60528,0.52305 32780,Benavarri / Benabarre,1177,AR,207,ES,42.10586,0.48211 32834,Berbegal,1177,AR,207,ES,41.95959,-0.00326 32845,Berdejo,1177,AR,207,ES,41.56133,-1.94431 32850,Berge,1177,AR,207,ES,40.85791,-0.42709 32884,Bezas,1177,AR,207,ES,40.33076,-1.32511 32887,Biel,1177,AR,207,ES,42.38763,-0.94154 32888,Bielsa,1177,AR,207,ES,42.63347,0.21858 32891,Bierge,1177,AR,207,ES,42.16216,-0.08326 32894,Bijuesca,1177,AR,207,ES,41.54083,-1.92039 32896,Binaced,1177,AR,207,ES,41.82564,0.20084 32898,Binéfar,1177,AR,207,ES,41.85141,0.29433 32899,Biota,1177,AR,207,ES,42.26214,-1.18735 32900,Bisaurri,1177,AR,207,ES,42.49677,0.50647 32901,Biscarrués,1177,AR,207,ES,42.22867,-0.74967 32902,Bisimbre,1177,AR,207,ES,41.85607,-1.44268 32907,Blancas,1177,AR,207,ES,40.81392,-1.48208 32912,Blesa,1177,AR,207,ES,41.0515,-0.885 32940,Boltaña,1177,AR,207,ES,42.4455,0.06802 32943,Bonansa,1177,AR,207,ES,42.42691,0.66692 32949,Boquiñeni,1177,AR,207,ES,41.84804,-1.25246 32950,Borau,1177,AR,207,ES,42.65858,-0.58846 32951,Bordalba,1177,AR,207,ES,41.41667,-2.06667 32953,Bordón,1177,AR,207,ES,40.6865,-0.32216 32954,Borja,1177,AR,207,ES,41.83412,-1.53271 32966,Botorrita,1177,AR,207,ES,41.50706,-1.03104 32974,Brea de Aragón,1177,AR,207,ES,41.52387,-1.60261 32991,Bronchales,1177,AR,207,ES,40.51171,-1.58821 32992,Broto,1177,AR,207,ES,42.60434,-0.12351 32996,Bubierca,1177,AR,207,ES,41.31482,-1.85386 33008,Bueña,1177,AR,207,ES,40.70881,-1.26742 33016,Bujaraloz,1177,AR,207,ES,41.49806,-0.1529 33017,Bulbuente,1177,AR,207,ES,41.8197,-1.60238 33021,Burbáguena,1177,AR,207,ES,41.01783,-1.33825 33023,Bureta,1177,AR,207,ES,41.81572,-1.48819 33070,Cabañas de Ebro,1177,AR,207,ES,41.8,-1.2 33097,Cabolafuente,1177,AR,207,ES,41.21053,-2.04133 33099,Cabra de Mora,1177,AR,207,ES,40.31696,-0.80678 33119,Cadrete,1177,AR,207,ES,41.55575,-0.96013 33123,Calaceite,1177,AR,207,ES,41.01625,0.18876 33128,Calamocha,1177,AR,207,ES,40.91933,-1.2975 33130,Calanda,1177,AR,207,ES,40.94153,-0.23243 33132,Calatayud,1177,AR,207,ES,41.35353,-1.64318 33134,Calatorao,1177,AR,207,ES,41.52228,-1.34702 33136,Calcena,1177,AR,207,ES,41.65515,-1.71764 33147,Calmarza,1177,AR,207,ES,41.1581,-1.91196 33148,Calomarde,1177,AR,207,ES,40.37264,-1.57435 33173,Camañas,1177,AR,207,ES,40.64308,-1.13752 33165,Camarena de la Sierra,1177,AR,207,ES,40.15,-1.03333 33168,Camarillas,1177,AR,207,ES,40.61242,-0.75416 33179,Caminreal,1177,AR,207,ES,40.83883,-1.32416 33187,Campillo de Aragón,1177,AR,207,ES,41.12648,-1.84393 33208,Camporrells,1177,AR,207,ES,41.95856,0.52136 33528,Cañada de Benatanduz,1177,AR,207,ES,40.57934,-0.53682 33527,Cañada Vellida,1177,AR,207,ES,40.70811,-0.91489 33225,Candasnos,1177,AR,207,ES,41.50213,0.06425 33236,Canfranc,1177,AR,207,ES,42.71628,-0.52563 33544,Cañizar del Olivar,1177,AR,207,ES,40.81622,-0.64567 33256,Cantavieja,1177,AR,207,ES,40.52642,-0.40558 33265,Capdesaso,1177,AR,207,ES,41.84287,-0.18316 33266,Capella,1177,AR,207,ES,42.19635,0.39637 33305,Carenas,1177,AR,207,ES,41.27755,-1.79754 33306,Cariñena,1177,AR,207,ES,41.33733,-1.22444 33383,Casbas de Huesca,1177,AR,207,ES,42.1555,-0.1399 33387,Cascante del Río,1177,AR,207,ES,40.19652,-1.11414 33393,Caspe,1177,AR,207,ES,41.23402,-0.03945 33400,Castejón de Alarba,1177,AR,207,ES,41.18365,-1.63612 33406,Castejón de las Armas,1177,AR,207,ES,41.30976,-1.81084 33402,Castejón de Monegros,1177,AR,207,ES,41.61802,-0.24013 33403,Castejón de Sos,1177,AR,207,ES,42.51235,0.49241 33404,Castejón de Tornos,1177,AR,207,ES,40.99726,-1.42805 33405,Castejón de Valdejasa,1177,AR,207,ES,41.98204,-0.99393 33407,Castejón del Puente,1177,AR,207,ES,41.96179,0.15883 33408,Castel de Cabra,1177,AR,207,ES,40.80255,-0.696 33409,Castelflorite,1177,AR,207,ES,41.80273,-0.02169 33433,Castellote,1177,AR,207,ES,40.8,-0.31975 33439,Castelnou,1177,AR,207,ES,41.22892,-0.36434 33440,Castelserás,1177,AR,207,ES,40.98133,-0.14666 33442,Castiello de Jaca,1177,AR,207,ES,42.62964,-0.5502 33443,Castigaleu,1177,AR,207,ES,42.20374,0.57944 33452,Castiliscar,1177,AR,207,ES,42.37662,-1.27326 33453,Castillazuelo,1177,AR,207,ES,42.06774,0.06491 33558,Cedrillas,1177,AR,207,ES,40.43708,-0.8515 33564,Cella,1177,AR,207,ES,40.45325,-1.2875 33598,Cervera de la Cañada,1177,AR,207,ES,41.43301,-1.73568 33603,Cerveruela,1177,AR,207,ES,41.21567,-1.21525 33608,Cetina,1177,AR,207,ES,41.29208,-1.96281 33613,Chalamera,1177,AR,207,ES,41.66567,0.16299 33653,Chía,1177,AR,207,ES,42.5208,0.46563 33638,Chimillas,1177,AR,207,ES,42.17033,-0.45168 33642,Chiprana,1177,AR,207,ES,41.26317,-0.12741 33645,Chodes,1177,AR,207,ES,41.48696,-1.48012 33675,Cimballa,1177,AR,207,ES,41.10118,-1.77352 33676,Cinco Olivas,1177,AR,207,ES,41.33966,-0.37116 33704,Clarés de Ribota,1177,AR,207,ES,41.52957,-1.83773 33718,Codos,1177,AR,207,ES,41.29266,-1.37425 33748,Colungo,1177,AR,207,ES,42.17125,0.06812 33769,Contamina,1177,AR,207,ES,41.30535,-1.91731 33773,Corbalán,1177,AR,207,ES,40.40308,-0.98525 33808,Cortes de Aragón,1177,AR,207,ES,40.97366,-0.83575 33815,Cosa,1177,AR,207,ES,40.83392,-1.1365 33823,Cosuenda,1177,AR,207,ES,41.36559,-1.29867 33838,Crivillén,1177,AR,207,ES,40.88325,-0.57666 33844,Cuarte de Huerva,1177,AR,207,ES,41.59466,-0.93268 33846,Cubel,1177,AR,207,ES,41.09604,-1.63729 33858,Cubla,1177,AR,207,ES,40.20978,-1.07917 33862,Cucalón,1177,AR,207,ES,41.08608,-1.21475 33871,Cuevas de Almudén,1177,AR,207,ES,40.71342,-0.82958 33870,Cuevas Labradas,1177,AR,207,ES,40.4535,-1.05008 33913,Daroca,1177,AR,207,ES,41.11475,-1.41492 33924,Delicias,1177,AR,207,ES,41.64928,-0.90757 33971,Echo,1177,AR,207,ES,42.73844,-0.75016 33974,Ejea de los Caballeros,1177,AR,207,ES,42.12632,-1.13716 33976,Ejulve,1177,AR,207,ES,40.77633,-0.55344 33982,El Burgo de Ebro,1177,AR,207,ES,41.57157,-0.74128 33990,El Castellar,1177,AR,207,ES,40.36531,-0.81734 38530,el Torricó / Altorricon,1177,AR,207,ES,41.8028,0.4139 34041,Embid de Ariza,1177,AR,207,ES,41.3783,-1.97373 34045,Encinacorba,1177,AR,207,ES,41.28516,-1.27516 38579,Épila,1177,AR,207,ES,41.60045,-1.28007 34067,Erla,1177,AR,207,ES,42.11732,-0.95019 34083,Escatrón,1177,AR,207,ES,41.29149,-0.32308 34090,Escorihuela,1177,AR,207,ES,40.544,-0.97078 34091,Escucha,1177,AR,207,ES,40.79467,-0.81012 34128,Esplús,1177,AR,207,ES,41.7987,0.27586 34137,Estada,1177,AR,207,ES,42.07201,0.23219 34138,Estadilla,1177,AR,207,ES,42.05657,0.24343 34144,Estercuel,1177,AR,207,ES,40.855,-0.63208 34154,Fabara,1177,AR,207,ES,41.1775,0.16908 34157,Fago,1177,AR,207,ES,42.7344,-0.88131 34165,Farlete,1177,AR,207,ES,41.68122,-0.50678 34170,Fayón,1177,AR,207,ES,41.23851,0.33302 34181,Ferreruela de Huerva,1177,AR,207,ES,41.06325,-1.2335 34187,Figueruelas,1177,AR,207,ES,41.76651,-1.17473 34191,Fiscal,1177,AR,207,ES,42.49561,-0.12094 34202,Fombuena,1177,AR,207,ES,41.14442,-1.19266 34207,Fonfría,1177,AR,207,ES,40.99566,-1.08475 34218,Fonz,1177,AR,207,ES,42.01015,0.25878 34223,Formiche Alto,1177,AR,207,ES,40.32367,-0.89241 34368,Fórnoles,1177,AR,207,ES,40.89359,-0.00383 34229,Fortanete,1177,AR,207,ES,40.50533,-0.52283 34235,Foz-Calanda,1177,AR,207,ES,40.92208,-0.26483 34237,Fraga,1177,AR,207,ES,41.52294,0.34894 34270,Fréscano,1177,AR,207,ES,41.88333,-1.45 34272,Frías de Albarracín,1177,AR,207,ES,40.33754,-1.6147 34279,Fuendejalón,1177,AR,207,ES,41.7605,-1.47213 34280,Fuendetodos,1177,AR,207,ES,41.34245,-0.95988 34281,Fuenferrada,1177,AR,207,ES,40.86923,-1.01179 34336,Fuentes Calientes,1177,AR,207,ES,40.7,-0.96667 34337,Fuentes Claras,1177,AR,207,ES,40.86375,-1.32266 34343,Fuentes de Ebro,1177,AR,207,ES,41.5125,-0.63159 34344,Fuentes de Jiloca,1177,AR,207,ES,41.22859,-1.53616 34350,Fuentes de Rubielos,1177,AR,207,ES,40.16667,-0.61667 34356,Fuentespalda,1177,AR,207,ES,40.80666,0.06517 34395,Gallocanta,1177,AR,207,ES,40.99624,-1.50774 34396,Gallur,1177,AR,207,ES,41.8683,-1.31577 34397,Galve,1177,AR,207,ES,40.65591,-0.88217 34414,Gargallo,1177,AR,207,ES,40.83583,-0.58442 34443,Gea de Albarracín,1177,AR,207,ES,40.41114,-1.34823 34447,Gelsa,1177,AR,207,ES,41.40766,-0.46158 34472,Gistaín,1177,AR,207,ES,42.5911,0.33478 34476,Godojos,1177,AR,207,ES,41.26838,-1.8641 34490,Gotor,1177,AR,207,ES,41.54583,-1.64915 34508,Grañén,1177,AR,207,ES,41.94104,-0.36941 34506,Graus,1177,AR,207,ES,42.18885,0.33749 34510,Griegos,1177,AR,207,ES,40.42722,-1.71201 34514,Grisel,1177,AR,207,ES,41.87109,-1.72794 34515,Grisén,1177,AR,207,ES,41.74524,-1.1626 34521,Guadalaviar,1177,AR,207,ES,40.38824,-1.71803 34566,Gúdar,1177,AR,207,ES,40.44107,-0.72048 34554,Gurrea de Gállego,1177,AR,207,ES,42.01541,-0.7615 34598,Herrera de los Navarros,1177,AR,207,ES,41.21024,-1.08271 34722,Híjar,1177,AR,207,ES,41.17429,-0.45112 34624,Hinojosa de Jarque,1177,AR,207,ES,40.69049,-0.78541 34681,Hoz de Jaca,1177,AR,207,ES,42.69045,-0.3065 34693,Huerto,1177,AR,207,ES,41.93128,-0.16684 34695,Huesa del Común,1177,AR,207,ES,41.01053,-0.91882 34696,Huesca,1177,AR,207,ES,42.13615,-0.4087 34725,Ibdes,1177,AR,207,ES,41.21667,-1.83333 34728,Ibieca,1177,AR,207,ES,42.16079,-0.20855 34738,Igriés,1177,AR,207,ES,42.21443,-0.43201 34743,Ilche,1177,AR,207,ES,41.95702,0.05728 34750,Illueca,1177,AR,207,ES,41.53818,-1.62747 34769,Isuerre,1177,AR,207,ES,42.48729,-1.054 34784,Jabaloyas,1177,AR,207,ES,40.2401,-1.40886 34787,Jaca,1177,AR,207,ES,42.56898,-0.54987 34796,Jaraba,1177,AR,207,ES,41.19083,-1.8844 34803,Jarque,1177,AR,207,ES,41.55613,-1.67563 34804,Jarque de la Val,1177,AR,207,ES,40.70283,-0.80083 34805,Jasa,1177,AR,207,ES,42.6948,-0.66605 34806,Jatiel,1177,AR,207,ES,41.22008,-0.38183 34807,Jaulín,1177,AR,207,ES,41.45198,-0.99256 34822,Jorcas,1177,AR,207,ES,40.54275,-0.75308 34824,Josa,1177,AR,207,ES,40.9555,-0.76683 34854,La Almunia de Doña Godina,1177,AR,207,ES,41.4767,-1.37451 34877,La Ginebrosa,1177,AR,207,ES,40.86991,-0.13525 34885,La Iglesuela del Cid,1177,AR,207,ES,40.48312,-0.31938 34937,Labuerda,1177,AR,207,ES,42.45234,0.13561 34941,Lagata,1177,AR,207,ES,41.2397,-0.80487 34944,Lagueruela,1177,AR,207,ES,41.0425,-1.19283 34954,Laluenga,1177,AR,207,ES,42.00703,-0.04715 34955,Lalueza,1177,AR,207,ES,41.83967,-0.25493 34958,Lanaja,1177,AR,207,ES,41.77063,-0.33095 34964,Langa del Castillo,1177,AR,207,ES,41.212,-1.3985 34970,Lanzuela,1177,AR,207,ES,41.0985,-1.20616 34971,Laperdiguera,1177,AR,207,ES,41.99053,-0.04657 34997,Lascuarre,1177,AR,207,ES,42.19611,0.5201 34998,Laspaúles,1177,AR,207,ES,42.47136,0.59698 34999,Laspuña,1177,AR,207,ES,42.50374,0.15441 35005,Layana,1177,AR,207,ES,42.29546,-1.24483 35176,Lécera,1177,AR,207,ES,41.20491,-0.71133 35012,Lechón,1177,AR,207,ES,41.08633,-1.28483 35013,Leciñena,1177,AR,207,ES,41.79868,-0.61174 35038,Letux,1177,AR,207,ES,41.25512,-0.80269 35047,Libros,1177,AR,207,ES,40.16311,-1.23361 35049,Lidón,1177,AR,207,ES,40.71725,-1.1125 35053,Linares de Mora,1177,AR,207,ES,40.32159,-0.57468 35057,Litago,1177,AR,207,ES,41.81407,-1.75276 35058,Lituénigo,1177,AR,207,ES,41.83533,-1.76196 35072,Lledó,1177,AR,207,ES,40.95498,0.27749 35093,Loarre,1177,AR,207,ES,42.31432,-0.62588 35094,Lobera de Onsella,1177,AR,207,ES,42.47848,-1.02208 35106,Longares,1177,AR,207,ES,41.40308,-1.16876 35107,Longás,1177,AR,207,ES,42.48092,-0.9342 35109,Loporzano,1177,AR,207,ES,42.16137,-0.32337 35142,Loscorrales,1177,AR,207,ES,42.25451,-0.64296 35143,Loscos,1177,AR,207,ES,41.08108,-1.04433 35150,Lucena de Jalón,1177,AR,207,ES,41.55301,-1.31305 35153,Luceni,1177,AR,207,ES,41.82857,-1.23889 35157,Luesia,1177,AR,207,ES,42.36974,-1.02421 35158,Luesma,1177,AR,207,ES,41.16583,-1.14575 35165,Lumpiaque,1177,AR,207,ES,41.62953,-1.30156 35166,Luna,1177,AR,207,ES,42.1676,-0.93292 35197,Maella,1177,AR,207,ES,41.12251,0.13926 35200,Magallón,1177,AR,207,ES,41.83248,-1.45979 35209,Maicas,1177,AR,207,ES,40.96708,-0.89041 35210,Mainar,1177,AR,207,ES,41.19275,-1.30292 35220,Malanquilla,1177,AR,207,ES,41.56856,-1.87481 35222,Maleján,1177,AR,207,ES,41.82762,-1.54906 35224,Mallén,1177,AR,207,ES,41.90064,-1.41994 35234,Malón,1177,AR,207,ES,41.95235,-1.67199 35232,Maluenda,1177,AR,207,ES,41.28772,-1.61603 35244,Manchones,1177,AR,207,ES,41.15,-1.46667 35270,Manzanera,1177,AR,207,ES,40.05,-0.83333 35274,Mara,1177,AR,207,ES,41.2895,-1.51842 35313,María de Huerva,1177,AR,207,ES,41.5388,-0.99615 35296,Marracos,1177,AR,207,ES,42.08826,-0.77587 35308,Martín del Río,1177,AR,207,ES,40.84459,-0.89549 35316,Mas de las Matas,1177,AR,207,ES,40.83408,-0.24292 35351,Mazaleón,1177,AR,207,ES,41.05056,0.1029 35406,Mequinensa / Mequinenza,1177,AR,207,ES,41.37211,0.30169 35411,Mesones de Isuela,1177,AR,207,ES,41.55119,-1.53858 35414,Mezalocha,1177,AR,207,ES,41.42581,-1.08276 35415,Mezquita de Jarque,1177,AR,207,ES,40.721,-0.867 35417,Mianos,1177,AR,207,ES,42.58544,-0.95478 35447,Mirambel,1177,AR,207,ES,40.58733,-0.34266 35482,Molinos,1177,AR,207,ES,40.821,-0.45017 35508,Monegrillo,1177,AR,207,ES,41.63856,-0.4157 35510,Moneva,1177,AR,207,ES,41.12817,-0.83591 35514,Monforte de Moyuela,1177,AR,207,ES,41.05512,-1.01411 35521,Monreal de Ariza,1177,AR,207,ES,41.29165,-2.10493 35522,Monreal del Campo,1177,AR,207,ES,40.788,-1.35541 35524,Monroyo,1177,AR,207,ES,40.78775,-0.0355 35532,Montalbán,1177,AR,207,ES,40.83278,-0.80178 35543,Monteagudo del Castillo,1177,AR,207,ES,40.45656,-0.81781 35546,Montecanal,1177,AR,207,ES,41.62965,-0.93873 35563,Monterde,1177,AR,207,ES,41.17434,-1.73505 35564,Monterde de Albarracín,1177,AR,207,ES,40.49708,-1.49216 35589,Montón,1177,AR,207,ES,41.20667,-1.5155 35590,Monzón,1177,AR,207,ES,41.91084,0.19406 35594,Mora de Rubielos,1177,AR,207,ES,40.2502,-0.75249 35614,Morata de Jalón,1177,AR,207,ES,41.47348,-1.47628 35615,Morata de Jiloca,1177,AR,207,ES,41.24797,-1.58665 35634,Morés,1177,AR,207,ES,41.47326,-1.56491 35633,Moros,1177,AR,207,ES,41.39775,-1.82839 35638,Moscardón,1177,AR,207,ES,40.33295,-1.53683 35639,Mosqueruela,1177,AR,207,ES,40.36133,-0.4489 35648,Moyuela,1177,AR,207,ES,41.12792,-0.92225 35650,Mozota,1177,AR,207,ES,41.4841,-1.06807 35655,Muel,1177,AR,207,ES,41.46633,-1.08503 35667,Munébrega,1177,AR,207,ES,41.25203,-1.70557 35665,Muniesa,1177,AR,207,ES,41.03308,-0.81141 35672,Murero,1177,AR,207,ES,41.15967,-1.48275 35740,Naval,1177,AR,207,ES,42.19503,0.15183 35766,Navardún,1177,AR,207,ES,42.51255,-1.14822 35810,Nigüella,1177,AR,207,ES,41.53621,-1.5245 35818,Nogueras,1177,AR,207,ES,41.13475,-1.06708 35819,Nogueruelas,1177,AR,207,ES,40.23622,-0.63606 35823,Nombrevilla,1177,AR,207,ES,41.1073,-1.35904 35824,Nonaspe,1177,AR,207,ES,41.20881,0.24775 35826,Novales,1177,AR,207,ES,42.03201,-0.287 35827,Novallas,1177,AR,207,ES,41.95,-1.7 35830,Novillas,1177,AR,207,ES,41.93334,-1.39412 35832,Nueno,1177,AR,207,ES,42.26697,-0.43906 35839,Nuévalos,1177,AR,207,ES,41.21185,-1.78954 35836,Nuez de Ebro,1177,AR,207,ES,41.58957,-0.66774 35854,Obón,1177,AR,207,ES,40.9045,-0.723 35860,Odón,1177,AR,207,ES,40.88417,-1.56792 35868,Ojos Negros,1177,AR,207,ES,40.7375,-1.49875 35874,Olba,1177,AR,207,ES,40.13333,-0.61667 35881,Oliete,1177,AR,207,ES,40.99791,-0.67429 35893,Oliver-Valdefierro,1177,AR,207,ES,41.64454,-0.93349 35918,Olvés,1177,AR,207,ES,41.23965,-1.64647 35927,Ontiñena,1177,AR,207,ES,41.67663,0.08858 35935,Orcajo,1177,AR,207,ES,41.10975,-1.48933 35945,Orera,1177,AR,207,ES,41.29842,-1.47849 35965,Orés,1177,AR,207,ES,42.27765,-1.0015 35951,Orihuela del Tremedal,1177,AR,207,ES,40.55,-1.65 35961,Orrios,1177,AR,207,ES,40.58945,-0.98614 35970,Oseja,1177,AR,207,ES,41.59564,-1.70026 36033,Palo,1177,AR,207,ES,42.3227,0.24376 36035,Palomar de Arroyos,1177,AR,207,ES,40.77911,-0.75055 36047,Pancrudo,1177,AR,207,ES,40.76223,-1.02967 36048,Paniza,1177,AR,207,ES,41.284,-1.21224 36054,Paracuellos de Jiloca,1177,AR,207,ES,41.31378,-1.64029 36055,Paracuellos de la Ribera,1177,AR,207,ES,41.42273,-1.56245 36103,Pedrola,1177,AR,207,ES,41.79102,-1.21357 36165,Peñalba,1177,AR,207,ES,41.50087,-0.03798 36130,Peracense,1177,AR,207,ES,40.64099,-1.47075 36134,Peralejos,1177,AR,207,ES,40.48433,-1.03408 36140,Perales del Alfambra,1177,AR,207,ES,40.63383,-1.00181 36143,Peraltilla,1177,AR,207,ES,42.05407,-0.0184 36146,Perdiguera,1177,AR,207,ES,41.75458,-0.63148 36153,Pertusa,1177,AR,207,ES,42.00214,-0.12732 36185,Piedratajada,1177,AR,207,ES,42.12124,-0.80373 36190,Pina de Ebro,1177,AR,207,ES,41.48846,-0.5312 36214,Pinseque,1177,AR,207,ES,41.73657,-1.10041 36220,Piracés,1177,AR,207,ES,42.00448,-0.31769 36221,Pitarque,1177,AR,207,ES,40.6485,-0.59324 36233,Plan,1177,AR,207,ES,42.58126,0.33742 36237,Plasencia de Jalón,1177,AR,207,ES,41.68154,-1.22996 36242,Pleitas,1177,AR,207,ES,41.71135,-1.20251 36243,Plenas,1177,AR,207,ES,41.11209,-0.96442 36246,Plou,1177,AR,207,ES,40.99274,-0.85441 36259,Poleñino,1177,AR,207,ES,41.86972,-0.31009 36269,Pomer,1177,AR,207,ES,41.63765,-1.84104 36339,Pozán de Vero,1177,AR,207,ES,42.08219,0.03066 36325,Pozondón,1177,AR,207,ES,40.56112,-1.47033 36328,Pozuel de Ariza,1177,AR,207,ES,41.35,-2.15 36329,Pozuel del Campo,1177,AR,207,ES,40.77125,-1.50575 36332,Pozuelo de Aragón,1177,AR,207,ES,41.7643,-1.42305 36342,Pradilla de Ebro,1177,AR,207,ES,41.86111,-1.26325 36373,Provincia de Huesca,1177,AR,207,ES,42.16667,-0.16667 36390,Provincia de Teruel,1177,AR,207,ES,40.66667,-0.66667 36393,Provincia de Zaragoza,1177,AR,207,ES,41.58333,-1.0 36408,Puebla de Albortón,1177,AR,207,ES,41.38517,-0.85558 36410,Puebla de Alfindén,1177,AR,207,ES,41.63188,-0.75154 36440,Puente la Reina de Jaca,1177,AR,207,ES,42.55908,-0.78759 36479,Puértolas,1177,AR,207,ES,42.54748,0.13214 36458,Puertomingalvo,1177,AR,207,ES,40.2643,-0.45756 36460,Pueyo de Santa Cruz,1177,AR,207,ES,41.85799,0.1566 36476,Purujosa,1177,AR,207,ES,41.68259,-1.76519 36499,Quicena,1177,AR,207,ES,42.14797,-0.36049 36528,Quinto,1177,AR,207,ES,41.42378,-0.49592 36711,Ráfales,1177,AR,207,ES,40.8377,0.01923 36573,Remolinos,1177,AR,207,ES,41.83946,-1.17768 36585,Retascón,1177,AR,207,ES,41.1435,-1.38376 36620,Ricla,1177,AR,207,ES,41.5058,-1.40468 36624,Rillo,1177,AR,207,ES,40.72233,-0.99623 36629,Riodeva,1177,AR,207,ES,40.11667,-1.15 36658,Robres,1177,AR,207,ES,41.86746,-0.46094 36719,Ródenas,1177,AR,207,ES,40.64076,-1.51617 36672,Romanos,1177,AR,207,ES,41.12636,-1.27502 36683,Royuela,1177,AR,207,ES,40.37846,-1.51337 36689,Rubiales,1177,AR,207,ES,40.27623,-1.27167 36691,Rubielos de la Cérida,1177,AR,207,ES,40.77058,-1.21291 36690,Rubielos de Mora,1177,AR,207,ES,40.18894,-0.65307 36700,Ruesca,1177,AR,207,ES,41.2835,-1.48142 36725,Sabiñánigo,1177,AR,207,ES,42.51924,-0.36607 37335,Sádaba,1177,AR,207,ES,42.2818,-1.26951 36742,Sahún,1177,AR,207,ES,42.5759,0.46546 36748,Salas Altas,1177,AR,207,ES,42.11407,0.06821 36749,Salas Bajas,1177,AR,207,ES,42.10046,0.08349 36753,Salcedillo,1177,AR,207,ES,40.962,-1.00433 36759,Saldón,1177,AR,207,ES,40.32513,-1.42782 36761,Salillas,1177,AR,207,ES,41.99498,-0.22278 36762,Salillas de Jalón,1177,AR,207,ES,41.56789,-1.32344 36769,Sallent de Gállego,1177,AR,207,ES,42.77127,-0.33448 36784,Salvatierra de Esca,1177,AR,207,ES,42.67002,-1.00475 36793,Samper de Calanda,1177,AR,207,ES,41.18933,-0.38883 36794,Samper del Salz,1177,AR,207,ES,41.23458,-0.8251 36798,San Agustín,1177,AR,207,ES,40.05929,-0.69254 36877,San Martín del Río,1177,AR,207,ES,41.06633,-1.38733 36878,San Mateo de Gállego,1177,AR,207,ES,41.83043,-0.76578 36944,Sangarrén,1177,AR,207,ES,42.01921,-0.43323 37029,Santa Cruz de Grío,1177,AR,207,ES,41.3705,-1.43009 37040,Santa Cruz de la Serós,1177,AR,207,ES,42.52271,-0.67515 37030,Santa Cruz de Moncayo,1177,AR,207,ES,41.8824,-1.75637 37033,Santa Cruz de Nogueras,1177,AR,207,ES,41.11475,-1.08933 37054,Santa Eulalia,1177,AR,207,ES,40.56742,-1.31354 37056,Santa Eulalia de Gállego,1177,AR,207,ES,42.287,-0.76065 37109,Santed,1177,AR,207,ES,41.03172,-1.51028 37163,Sariñena,1177,AR,207,ES,41.79128,-0.15804 37173,Sarrión,1177,AR,207,ES,40.14175,-0.81533 37336,Sástago,1177,AR,207,ES,41.32166,-0.35075 37186,Secastilla,1177,AR,207,ES,42.18112,0.26736 37189,Sediles,1177,AR,207,ES,41.34613,-1.53177 37198,Segura de los Baños,1177,AR,207,ES,40.94088,-0.95111 37200,Seira,1177,AR,207,ES,42.47696,0.43127 37214,Senés de Alcubierre,1177,AR,207,ES,41.90731,-0.48906 37211,Seno,1177,AR,207,ES,40.81225,-0.33816 37230,Sesa,1177,AR,207,ES,41.99484,-0.24511 37234,Sestrica,1177,AR,207,ES,41.48595,-1.59501 37235,Sesué,1177,AR,207,ES,42.55131,0.47212 37245,Sierra de Luna,1177,AR,207,ES,42.04818,-0.91025 37269,Siétamo,1177,AR,207,ES,42.12392,-0.28066 37253,Sigüés,1177,AR,207,ES,42.6303,-1.01212 37262,Singra,1177,AR,207,ES,40.65508,-1.31158 37265,Sisamón,1177,AR,207,ES,41.17124,-2.00386 37272,Sobradiel,1177,AR,207,ES,41.73875,-1.03765 37307,Sos del Rey Católico,1177,AR,207,ES,42.49686,-1.21514 37346,Tabuenca,1177,AR,207,ES,41.695,-1.54335 37355,Talamantes,1177,AR,207,ES,41.73051,-1.67857 37364,Tamarit de Llitera / Tamarite de Litera,1177,AR,207,ES,41.8691,0.42214 37374,Tarazona,1177,AR,207,ES,41.90475,-1.72678 37379,Tardienta,1177,AR,207,ES,41.97781,-0.53731 37385,Tauste,1177,AR,207,ES,41.91804,-1.25343 37411,Terrer,1177,AR,207,ES,41.32811,-1.71329 37412,Terriente,1177,AR,207,ES,40.29741,-1.50399 37415,Teruel,1177,AR,207,ES,40.3456,-1.10646 37423,Tierz,1177,AR,207,ES,42.13356,-0.35489 37437,Tobed,1177,AR,207,ES,41.33866,-1.39975 37471,Tormón,1177,AR,207,ES,40.20266,-1.35406 37475,Tornos,1177,AR,207,ES,40.96188,-1.43389 37479,Torralba de Aragón,1177,AR,207,ES,41.93487,-0.51053 37483,Torralba de los Frailes,1177,AR,207,ES,41.03622,-1.66046 37484,Torralba de los Sisones,1177,AR,207,ES,40.89084,-1.45866 37482,Torralba de Ribota,1177,AR,207,ES,41.41803,-1.68429 37486,Torralbilla,1177,AR,207,ES,41.21009,-1.338 37490,Torre de Arcas,1177,AR,207,ES,40.75137,-0.06892 37498,Torre de las Arcas,1177,AR,207,ES,40.84166,-0.71783 37502,Torre del Compte,1177,AR,207,ES,40.93625,0.10934 37505,Torre los Negros,1177,AR,207,ES,40.85308,-1.09782 37515,Torrecilla de Alcañiz,1177,AR,207,ES,40.96056,-0.09077 37523,Torrecilla del Rebollar,1177,AR,207,ES,40.90978,-1.07244 37534,Torrehermosa,1177,AR,207,ES,41.23767,-2.128 37544,Torrelapaja,1177,AR,207,ES,41.58133,-1.95181 37548,Torrellas,1177,AR,207,ES,41.89444,-1.77139 37572,Torres de Albarracín,1177,AR,207,ES,40.42709,-1.53242 37573,Torres de Alcanadre,1177,AR,207,ES,41.96727,-0.11096 37574,Torres de Barbués,1177,AR,207,ES,41.9605,-0.4335 37575,Torres de Berrellén,1177,AR,207,ES,41.75797,-1.0655 37583,Torrevelilla,1177,AR,207,ES,40.902,-0.10977 37586,Torrijas,1177,AR,207,ES,40.01667,-0.95 37587,Torrijo de la Cañada,1177,AR,207,ES,41.47304,-1.87441 37588,Torrijo del Campo,1177,AR,207,ES,40.82575,-1.33766 37603,Tosos,1177,AR,207,ES,41.31542,-1.07292 37616,Tramacastiel,1177,AR,207,ES,40.18842,-1.24081 37617,Tramacastilla,1177,AR,207,ES,40.43059,-1.57466 37618,Tramaced,1177,AR,207,ES,41.97318,-0.29752 37621,Trasmoz,1177,AR,207,ES,41.82599,-1.72279 37622,Trasobares,1177,AR,207,ES,41.64308,-1.64192 37642,Tronchón,1177,AR,207,ES,40.62091,-0.39833 37687,Uncastillo,1177,AR,207,ES,42.35963,-1.12842 37688,Undués de Lerda,1177,AR,207,ES,42.56572,-1.16944 37695,Urrea de Jalón,1177,AR,207,ES,41.66715,-1.2342 37696,Urriés,1177,AR,207,ES,42.51943,-1.13022 37704,Used,1177,AR,207,ES,41.05554,-1.55954 37708,Utebo,1177,AR,207,ES,41.70826,-0.99916 37712,Utrillas,1177,AR,207,ES,40.81267,-0.84545 37720,Val de San Martín,1177,AR,207,ES,41.05787,-1.44934 37721,Valacloche,1177,AR,207,ES,40.19092,-1.09134 37722,Valbona,1177,AR,207,ES,40.22877,-0.81079 37729,Valdealgorfa,1177,AR,207,ES,40.99066,-0.03433 37742,Valdecuenca,1177,AR,207,ES,40.29776,-1.40829 37751,Valdehorna,1177,AR,207,ES,41.07275,-1.42376 37760,Valdelinares,1177,AR,207,ES,40.39114,-0.60593 37762,Valdeltormo,1177,AR,207,ES,40.98716,0.08342 37793,Valderrobres,1177,AR,207,ES,40.87209,0.15431 37826,Valfarta,1177,AR,207,ES,41.55726,-0.13304 37832,Valjunquera,1177,AR,207,ES,40.9525,0.02575 37867,Valmadrid,1177,AR,207,ES,41.44351,-0.88482 37871,Valpalmas,1177,AR,207,ES,42.15821,-0.85481 37880,Valtorres,1177,AR,207,ES,41.29855,-1.7408 37920,Veguillas de la Sierra,1177,AR,207,ES,40.15,-1.4 37929,Velilla de Ebro,1177,AR,207,ES,41.37416,-0.43483 37930,Velilla de Jiloca,1177,AR,207,ES,41.27509,-1.60396 37948,Vera de Moncayo,1177,AR,207,ES,41.824,-1.68799 37969,Vierlas,1177,AR,207,ES,41.92708,-1.68123 38042,Villadoz,1177,AR,207,ES,41.16234,-1.288 38050,Villafeliche,1177,AR,207,ES,41.19509,-1.50983 38058,Villafranca de Ebro,1177,AR,207,ES,41.57473,-0.65039 38063,Villafranca del Campo,1177,AR,207,ES,40.69545,-1.34722 38083,Villahermosa del Campo,1177,AR,207,ES,41.10942,-1.24692 38094,Villalba de Perejil,1177,AR,207,ES,41.32742,-1.54833 38112,Villalengua,1177,AR,207,ES,41.43548,-1.84125 38142,Villamayor de Gállego,1177,AR,207,ES,41.68584,-0.7723 38227,Villanúa,1177,AR,207,ES,42.6797,-0.53769 38184,Villanueva de Gállego,1177,AR,207,ES,41.76917,-0.8235 38186,Villanueva de Jiloca,1177,AR,207,ES,41.07625,-1.3896 38191,Villanueva de Sigena,1177,AR,207,ES,41.71576,-0.00897 38221,Villanueva del Rebollar de la Sierra,1177,AR,207,ES,40.89108,-1.00837 38249,Villar de los Navarros,1177,AR,207,ES,41.15949,-1.04199 38254,Villar del Cobo,1177,AR,207,ES,40.39475,-1.67332 38262,Villar del Salz,1177,AR,207,ES,40.682,-1.49967 38286,Villarluengo,1177,AR,207,ES,40.64842,-0.53066 38291,Villarquemado,1177,AR,207,ES,40.5175,-1.265 38295,Villarreal de Huerva,1177,AR,207,ES,41.19034,-1.28983 38298,Villarroya de la Sierra,1177,AR,207,ES,41.46346,-1.7835 38299,Villarroya de los Pinares,1177,AR,207,ES,40.52917,-0.669 38300,Villarroya del Campo,1177,AR,207,ES,41.14309,-1.32416 38329,Villastar,1177,AR,207,ES,40.28102,-1.15139 38367,Villel,1177,AR,207,ES,40.23463,-1.18611 38397,Visiedo,1177,AR,207,ES,40.68558,-1.09709 38399,Vistabella,1177,AR,207,ES,41.2185,-1.15358 38404,Vivel del Río Martín,1177,AR,207,ES,40.87091,-0.93889 38430,Yebra de Basa,1177,AR,207,ES,42.48647,-0.28178 38447,Yésero,1177,AR,207,ES,42.61911,-0.2502 38457,Zaidín,1177,AR,207,ES,41.60402,0.26429 38470,Zaragoza,1177,AR,207,ES,41.65606,-0.87734 38504,Zuera,1177,AR,207,ES,41.86775,-0.78984 31992,Alaior,1174,PM,207,ES,39.93034,4.14039 32007,Alaró,1174,PM,207,ES,39.70441,2.79181 32139,Alcúdia,1174,PM,207,ES,39.85316,3.12138 32209,Algaida,1174,PM,207,ES,39.55899,2.89541 32375,Andratx,1174,PM,207,ES,39.57553,2.42017 32478,Ariany,1174,PM,207,ES,39.65048,3.11055 32526,Artà,1174,PM,207,ES,39.69315,3.34979 32633,Banyalbufar,1174,PM,207,ES,39.68734,2.51409 32897,Binissalem,1174,PM,207,ES,39.68744,2.84396 33064,Búger,1174,PM,207,ES,39.75809,2.98349 33020,Bunyola,1174,PM,207,ES,39.69634,2.69955 33122,Cala dOr,1174,PM,207,ES,39.3781,3.23479 33121,Cala Rajada,1174,PM,207,ES,39.71174,3.4631 33149,Calonge,1174,PM,207,ES,39.40039,3.20335 33155,Calvià,1174,PM,207,ES,39.5657,2.50621 33180,Camp de Mar,1174,PM,207,ES,39.53827,2.42386 33182,Campanet,1174,PM,207,ES,39.7747,2.96506 33210,Campos,1174,PM,207,ES,39.43099,3.01935 33217,Can Pastilla,1174,PM,207,ES,39.53615,2.71766 33219,Can Picafort,1174,PM,207,ES,39.76567,3.15488 33264,Capdepera,1174,PM,207,ES,39.70237,3.43532 33699,Ciutadella,1174,PM,207,ES,40.00112,3.84144 33729,Coll den Rabassa,1174,PM,207,ES,39.55083,2.69468 33749,Colònia de Sant Jordi,1174,PM,207,ES,39.3181,2.99197 33764,Consell,1174,PM,207,ES,39.66861,2.81267 33821,Costitx,1174,PM,207,ES,39.65675,2.94953 33922,Deià,1174,PM,207,ES,39.74806,2.64823 34022,El Toro,1174,PM,207,ES,39.48477,2.48222 34073,Es Castell,1174,PM,207,ES,39.8776,4.2899 34074,Es Molinar,1174,PM,207,ES,39.5614,2.67517 34089,Escorca,1174,PM,207,ES,39.82138,2.86941 34131,Esporles,1174,PM,207,ES,39.66794,2.57867 34140,Estellencs,1174,PM,207,ES,39.65338,2.4813 34171,Felanitx,1174,PM,207,ES,39.4696,3.14831 34179,Ferreries,1174,PM,207,ES,39.98324,4.01181 34224,Fornalutx,1174,PM,207,ES,39.78232,2.74107 34729,Ibiza,1174,PM,207,ES,38.90883,1.43296 34747,Illes Balears,1174,PM,207,ES,39.60992,3.02948 34752,Inca,1174,PM,207,ES,39.7211,2.91093 35085,Lloret de Vistalegre,1174,PM,207,ES,39.61835,2.97493 35087,Lloseta,1174,PM,207,ES,39.71849,2.8669 35088,Llubí,1174,PM,207,ES,39.69933,3.00681 35089,Llucmajor,1174,PM,207,ES,39.49093,2.89108 35201,Magaluf,1174,PM,207,ES,39.5111,2.5353 35239,Manacor,1174,PM,207,ES,39.56964,3.20955 35246,Mancor de la Vall,1174,PM,207,ES,39.74966,2.87284 35363,Maó,1174,PM,207,ES,39.88853,4.26583 35289,Maria de la Salut,1174,PM,207,ES,39.66306,3.073 35297,Marratxí,1174,PM,207,ES,39.62142,2.7253 35407,Mercadal,1174,PM,207,ES,39.99014,4.09387 35586,Montuïri,1174,PM,207,ES,39.56742,2.98189 35681,Muro,1174,PM,207,ES,39.73661,3.05559 36027,Palma,1174,PM,207,ES,39.56939,2.65024 36030,Palmanova,1174,PM,207,ES,39.5247,2.53922 36116,Peguera,1174,PM,207,ES,39.53751,2.44806 36157,Petra,1174,PM,207,ES,39.61351,3.11312 36262,Pollença,1174,PM,207,ES,39.87678,3.01626 36279,Porreres,1174,PM,207,ES,39.51434,3.02197 36281,Port dAlcúdia,1174,PM,207,ES,39.84182,3.13291 36282,Port de Pollença,1174,PM,207,ES,39.9075,3.0814 36283,Port de Sóller,1174,PM,207,ES,39.79759,2.69637 36295,Porto Cristo,1174,PM,207,ES,39.53953,3.33302 36297,Portocolom,1174,PM,207,ES,39.41589,3.25697 36464,Puigpunyent,1174,PM,207,ES,39.62514,2.52759 38569,sArenal,1174,PM,207,ES,39.5,2.75 38570,sa Pobla,1174,PM,207,ES,39.7692,3.02394 36957,Sant Antoni de Portmany,1174,PM,207,ES,38.98068,1.30362 36967,Sant Francesc de Formentera,1174,PM,207,ES,38.70566,1.42893 36971,Sant Joan,1174,PM,207,ES,39.59621,3.0392 36973,Sant Joan de Labritja,1174,PM,207,ES,39.07891,1.51397 36980,Sant Josep de sa Talaia,1174,PM,207,ES,38.92239,1.29437 36983,Sant Llorenç des Cardassar,1174,PM,207,ES,39.61009,3.2838 36984,Sant Lluís,1174,PM,207,ES,39.84939,4.25819 37052,Santa Eugènia,1174,PM,207,ES,39.62361,2.83864 37058,Santa Eulària des Riu,1174,PM,207,ES,38.98457,1.53409 37064,Santa Margalida,1174,PM,207,ES,39.70143,3.10215 37099,Santa Ponsa,1174,PM,207,ES,39.50868,2.4766 37107,Santanyí,1174,PM,207,ES,39.35461,3.12907 37205,Selva,1174,PM,207,ES,39.75504,2.90069 37209,Sencelles,1174,PM,207,ES,39.64598,2.89769 37229,Ses Salines,1174,PM,207,ES,39.33831,3.05274 37261,Sineu,1174,PM,207,ES,39.64254,3.01034 37337,Sóller,1174,PM,207,ES,39.76623,2.71521 37290,Son Ferrer,1174,PM,207,ES,39.49666,2.50102 37291,Son Servera,1174,PM,207,ES,39.62073,3.36008 37843,Valldemossa,1174,PM,207,ES,39.71042,2.6223 37983,Vilafranca de Bonany,1174,PM,207,ES,39.56894,3.08815 31942,Aduna,1191,PV,207,ES,43.20375,-2.05033 31970,Agurain / Salvatierra,1191,PV,207,ES,42.85162,-2.39123 31978,Aia,1191,PV,207,ES,43.23721,-2.14833 31984,Aizarnazabal,1191,PV,207,ES,43.25591,-2.23607 32046,Albiztur,1191,PV,207,ES,43.12933,-2.13649 32227,Algorta,1191,PV,207,ES,43.34927,-3.0094 32253,Alkiza,1191,PV,207,ES,43.17263,-2.10923 32319,Alonsotegi,1191,PV,207,ES,43.24483,-2.98759 32354,Amezketa,1191,PV,207,ES,43.04813,-2.08541 32356,Amorebieta,1191,PV,207,ES,43.21667,-2.73333 32357,Amoroto,1191,PV,207,ES,43.32634,-2.51349 32361,Amurrio,1191,PV,207,ES,43.05,-3.0 32372,Andoain,1191,PV,207,ES,43.21658,-2.0253 32386,Anoeta,1191,PV,207,ES,43.16241,-2.07107 32396,Antzuola,1191,PV,207,ES,43.09725,-2.37998 32398,Araba / Álava,1191,PV,207,ES,42.83333,-2.75 32403,Araia,1191,PV,207,ES,42.89345,-2.31314 32404,Arama,1191,PV,207,ES,43.06335,-2.1654 32458,Aretxabaleta,1191,PV,207,ES,43.03414,-2.50456 32489,Armiñón,1191,PV,207,ES,42.72313,-2.87172 32502,Arrasate / Mondragón,1191,PV,207,ES,43.06441,-2.48977 32507,Arrigorriaga,1191,PV,207,ES,43.21006,-2.88562 32538,Asteasu,1191,PV,207,ES,43.19436,-2.09818 32539,Astigarraga,1191,PV,207,ES,43.28174,-1.94634 32552,Ataun,1191,PV,207,ES,43.00612,-2.17663 32557,Aulesti,1191,PV,207,ES,43.3,-2.56667 32566,Avellaneda,1191,PV,207,ES,43.22942,-3.16172 32570,Axpe de Busturia,1191,PV,207,ES,43.38355,-2.69772 32582,Azkoitia,1191,PV,207,ES,43.17744,-2.31129 32587,Azpeitia,1191,PV,207,ES,43.18246,-2.26693 32618,Bakio,1191,PV,207,ES,43.42917,-2.80881 32623,Baliarrain,1191,PV,207,ES,43.06928,-2.12781 32638,Barakaldo,1191,PV,207,ES,43.29639,-2.98813 32688,Basauri,1191,PV,207,ES,43.2397,-2.8858 32692,Bastida / Labastida,1191,PV,207,ES,42.58974,-2.79568 32720,Beasain,1191,PV,207,ES,43.05017,-2.20087 32733,Beizama,1191,PV,207,ES,43.13385,-2.20001 32831,Berango,1191,PV,207,ES,43.365,-2.99601 32832,Berantevilla,1191,PV,207,ES,42.68254,-2.85832 32847,Bergara,1191,PV,207,ES,43.1151,-2.4175 32859,Bermeo,1191,PV,207,ES,43.42088,-2.72152 32863,Berriatua,1191,PV,207,ES,43.31667,-2.46667 32866,Berriz,1191,PV,207,ES,43.16667,-2.56667 32867,Berrobi,1191,PV,207,ES,43.14518,-2.02623 32895,Bilbao,1191,PV,207,ES,43.26271,-2.92528 32903,Bizkaia,1191,PV,207,ES,43.25,-2.91667 33917,Deba,1191,PV,207,ES,43.29571,-2.35213 33927,Derio,1191,PV,207,ES,43.30544,-2.88116 33946,Donostia / San Sebastián,1191,PV,207,ES,43.31283,-1.97499 33961,Durango,1191,PV,207,ES,43.17124,-2.6338 33968,Ea,1191,PV,207,ES,43.37985,-2.58556 33972,Eibar,1191,PV,207,ES,43.18493,-2.47158 34032,Elciego,1191,PV,207,ES,42.51569,-2.61897 34034,Elexalde,1191,PV,207,ES,43.15,-2.93333 34035,Elgoibar,1191,PV,207,ES,43.21601,-2.41334 34038,Elorrio,1191,PV,207,ES,43.12924,-2.54056 34066,Erandio,1191,PV,207,ES,43.30438,-2.97352 34069,Ermua,1191,PV,207,ES,43.18725,-2.50261 34070,Errenteria,1191,PV,207,ES,43.31195,-1.90234 34071,Errigoiti,1191,PV,207,ES,43.31667,-2.71667 34097,Eskoriatza,1191,PV,207,ES,43.01829,-2.52598 34098,Eskuernaga / Villabuena de Álava,1191,PV,207,ES,42.54787,-2.66552 34232,Forua,1191,PV,207,ES,43.33343,-2.67504 34378,Galdakao,1191,PV,207,ES,43.23073,-2.8429 34433,Gasteiz / Vitoria,1191,PV,207,ES,42.84998,-2.67268 34436,Gatika,1191,PV,207,ES,43.36313,-2.87294 34442,Gaztelu,1191,PV,207,ES,43.11622,-2.02439 34457,Gernika-Lumo,1191,PV,207,ES,43.31667,-2.68333 34460,Getaria,1191,PV,207,ES,43.30326,-2.20444 34461,Getxo,1191,PV,207,ES,43.35689,-3.01146 34469,Gipuzkoa,1191,PV,207,ES,43.16667,-2.16667 34568,Güeñes,1191,PV,207,ES,43.21252,-3.09497 34588,Hernani,1191,PV,207,ES,43.26615,-1.97615 34590,Hernialde,1191,PV,207,ES,43.15446,-2.08521 34633,Hondarribia,1191,PV,207,ES,43.36859,-1.79622 34724,Ibarrangelu,1191,PV,207,ES,43.39027,-2.63423 34733,Idiazabal,1191,PV,207,ES,43.01189,-2.23356 34762,Irun,1191,PV,207,ES,43.33904,-1.78938 34763,Irura,1191,PV,207,ES,43.16651,-2.06746 34783,Izurtza,1191,PV,207,ES,43.15,-2.63333 34942,Lagrán,1191,PV,207,ES,42.62625,-2.58385 34943,Laguardia,1191,PV,207,ES,42.55461,-2.58528 34959,Landa,1191,PV,207,ES,43.38333,-2.95 34961,Lanestosa,1191,PV,207,ES,43.21986,-3.4392 34973,Lapuebla de Labarca,1191,PV,207,ES,42.49455,-2.57341 34980,Larraul,1191,PV,207,ES,43.18773,-2.10202 34996,Lasarte,1191,PV,207,ES,43.26774,-2.02169 35003,Laudio / Llodio,1191,PV,207,ES,43.14322,-2.96204 35009,Leaburu,1191,PV,207,ES,43.12188,-2.0543 35024,Legorreta,1191,PV,207,ES,43.08464,-2.15017 35025,Leintz-Gatzaga,1191,PV,207,ES,42.98684,-2.56851 35026,Leioa,1191,PV,207,ES,43.32686,-2.98884 35028,Lekeitio,1191,PV,207,ES,43.36417,-2.50492 35039,Leza,1191,PV,207,ES,42.56552,-2.63324 35041,Lezama,1191,PV,207,ES,43.02799,-2.97257 35042,Lezo,1191,PV,207,ES,43.32142,-1.89739 35059,Lizartza,1191,PV,207,ES,43.10236,-2.03489 35361,Mañaria,1191,PV,207,ES,43.13819,-2.66104 35294,Markina-Xemein,1191,PV,207,ES,43.26667,-2.5 35398,Mendaro,1191,PV,207,ES,43.25326,-2.38568 35400,Mendexa,1191,PV,207,ES,43.3459,-2.4842 35623,Moreda Araba / Moreda de Álava,1191,PV,207,ES,42.52571,-2.40828 35662,Mundaka,1191,PV,207,ES,43.40804,-2.69852 35664,Mungia,1191,PV,207,ES,43.35461,-2.84524 35673,Murgia,1191,PV,207,ES,42.95686,-2.81945 35689,Mutiloa,1191,PV,207,ES,43.02288,-2.27257 35690,Mutriku,1191,PV,207,ES,43.30643,-2.38517 35770,Navaridas,1191,PV,207,ES,42.54566,-2.6265 35866,Oion / Oyón,1191,PV,207,ES,42.50571,-2.43638 35872,Olaberria,1191,PV,207,ES,43.02726,-2.20349 35989,Oñati,1191,PV,207,ES,43.03262,-2.40997 35924,Ondarroa,1191,PV,207,ES,43.31667,-2.41667 35941,Ordizia,1191,PV,207,ES,43.0541,-2.17632 35944,Orendain,1191,PV,207,ES,43.07896,-2.11201 35946,Orexa,1191,PV,207,ES,43.09382,-2.01119 35949,Oria,1191,PV,207,ES,43.25541,-2.01873 35952,Orio,1191,PV,207,ES,43.2787,-2.12537 35955,Ormaiztegi,1191,PV,207,ES,43.04339,-2.25673 35964,Ortuella,1191,PV,207,ES,43.31113,-3.05617 36073,Pasaia,1191,PV,207,ES,43.3253,-1.92707 36244,Plentzia,1191,PV,207,ES,43.4053,-2.94794 36300,Portugalete,1191,PV,207,ES,43.32099,-3.02064 36789,Samaniego,1191,PV,207,ES,42.56854,-2.67974 37155,Santurtzi,1191,PV,207,ES,43.32842,-3.03248 37156,Santutxu,1191,PV,207,ES,43.25347,-2.9161 37194,Segura,1191,PV,207,ES,43.00753,-2.254 37233,Sestao,1191,PV,207,ES,43.30975,-3.00716 37292,Sondika,1191,PV,207,ES,43.3002,-2.92442 37295,Sopela,1191,PV,207,ES,43.37891,-2.98313 37297,Sopuerta,1191,PV,207,ES,43.26239,-3.15505 37447,Tolosa,1191,PV,207,ES,43.13484,-2.07801 37692,Urduña / Orduña,1191,PV,207,ES,42.99435,-3.00974 37693,Urnieta,1191,PV,207,ES,43.24727,-1.99084 37706,Usurbil,1191,PV,207,ES,43.27164,-2.04912 38018,Villabona,1191,PV,207,ES,43.1854,-2.05304 38194,Villanueva de Valdegovía,1191,PV,207,ES,42.84777,-3.09883 38460,Zaldibar,1191,PV,207,ES,43.16667,-2.53333 38461,Zalla,1191,PV,207,ES,43.23333,-3.13333 38464,Zambrana,1191,PV,207,ES,42.66102,-2.87909 38466,Zamudio,1191,PV,207,ES,43.286,-2.87 38472,Zaratamo,1191,PV,207,ES,43.21667,-2.86667 38474,Zarautz,1191,PV,207,ES,43.28444,-2.16992 38490,Zeanuri,1191,PV,207,ES,43.1,-2.75 38491,Zegama,1191,PV,207,ES,42.97556,-2.29091 38492,Zestoa,1191,PV,207,ES,43.23973,-2.2579 38493,Zierbena,1191,PV,207,ES,43.35,-3.08333 38494,Zizurkil,1191,PV,207,ES,43.19917,-2.0742 38508,Zumaia,1191,PV,207,ES,43.29469,-2.25341 38509,Zumarraga,1191,PV,207,ES,43.08858,-2.31408 31931,Adeje,1185,CN,207,ES,28.12271,-16.726 31944,Agaete,1185,CN,207,ES,28.10023,-15.69998 31973,Agüimes,1185,CN,207,ES,27.90539,-15.44609 31969,Agulo,1185,CN,207,ES,28.18778,-17.19678 31993,Alajeró,1185,CN,207,ES,28.06205,-17.24073 32393,Antigua,1185,CN,207,ES,28.42307,-14.01379 32400,Arafo,1185,CN,207,ES,28.33971,-16.42244 32497,Arona,1185,CN,207,ES,28.09962,-16.68102 32504,Arrecife,1185,CN,207,ES,28.96302,-13.54769 32523,Artenara,1185,CN,207,ES,28.02055,-15.64693 32528,Arucas,1185,CN,207,ES,28.11983,-15.52325 32666,Barlovento,1185,CN,207,ES,28.82708,-17.80377 32980,Breña Alta,1185,CN,207,ES,28.65,-17.78333 32981,Breña Baja,1185,CN,207,ES,28.63011,-17.78953 33005,Buenavista del Norte,1185,CN,207,ES,28.37458,-16.86098 33226,Candelaria,1185,CN,207,ES,28.3548,-16.37268 33328,Carrizal,1185,CN,207,ES,27.91161,-15.40558 33802,Corralejo,1185,CN,207,ES,28.73079,-13.86749 33818,Costa Calma,1185,CN,207,ES,28.16155,-14.22691 33819,Costa Teguise,1185,CN,207,ES,28.99838,-13.49911 33839,Cruce de Arinaga,1185,CN,207,ES,27.87656,-15.42798 33994,El Cotillo,1185,CN,207,ES,28.68264,-14.00637 34004,El Paso,1185,CN,207,ES,28.65007,-17.88274 34167,Fasnia,1185,CN,207,ES,28.23638,-16.43886 34190,Firgas,1185,CN,207,ES,28.10711,-15.56299 34268,Frontera,1185,CN,207,ES,27.75404,-18.00367 34276,Fuencaliente de la Palma,1185,CN,207,ES,28.49236,-17.84529 34559,Gáldar,1185,CN,207,ES,28.14701,-15.6502 34405,Garachico,1185,CN,207,ES,28.37365,-16.76342 34406,Garafía,1185,CN,207,ES,28.81667,-17.93333 34498,Granadilla de Abona,1185,CN,207,ES,28.11882,-16.57599 34541,Guia,1185,CN,207,ES,28.13974,-15.63294 34557,Guía de Isora,1185,CN,207,ES,28.21154,-16.77947 34569,Güimar,1185,CN,207,ES,28.31122,-16.41276 34573,Haría,1185,CN,207,ES,29.14553,-13.49986 34586,Hermigua,1185,CN,207,ES,28.16766,-17.19051 34732,Icod de los Vinos,1185,CN,207,ES,28.37241,-16.71188 34754,Ingenio,1185,CN,207,ES,27.91855,-15.43433 34880,La Guancha,1185,CN,207,ES,28.3732,-16.65158 34887,La Laguna,1185,CN,207,ES,28.4853,-16.32014 34894,La Matanza de Acentejo,1185,CN,207,ES,28.45242,-16.4472 34897,La Oliva,1185,CN,207,ES,28.61052,-13.92912 34898,La Orotava,1185,CN,207,ES,28.39076,-16.52309 34934,La Victoria de Acentejo,1185,CN,207,ES,28.43231,-16.46232 34988,Las Palmas de Gran Canaria,1185,CN,207,ES,28.09973,-15.41343 34990,Las Rosas,1185,CN,207,ES,28.01539,-16.65373 35105,Lomo de Arico,1185,CN,207,ES,28.16667,-16.48333 35122,Los Gigantes,1185,CN,207,ES,28.24361,-16.84153 35124,Los Llanos de Aridane,1185,CN,207,ES,28.65851,-17.91821 35132,Los Realejos,1185,CN,207,ES,28.38487,-16.58275 35135,Los Silos,1185,CN,207,ES,28.3661,-16.81552 35702,Mácher,1185,CN,207,ES,28.9484,-13.69117 35324,Maspalomas,1185,CN,207,ES,27.76056,-15.58602 35357,Mazo,1185,CN,207,ES,28.60906,-17.77801 35469,Mogán,1185,CN,207,ES,27.88385,-15.72538 35647,Moya,1185,CN,207,ES,28.11106,-15.58285 35794,Nazaret,1185,CN,207,ES,29.03818,-13.56386 36480,Pájara,1185,CN,207,ES,28.35039,-14.1076 36239,Playa Blanca,1185,CN,207,ES,28.86426,-13.82814 36240,Playa de las Américas,1185,CN,207,ES,28.06403,-16.73012 36241,Playa del Ingles,1185,CN,207,ES,27.7567,-15.5787 36376,Provincia de Las Palmas,1185,CN,207,ES,28.42039,-14.01306 36386,Provincia de Santa Cruz de Tenerife,1185,CN,207,ES,28.16667,-17.33333 36454,Puerto de la Cruz,1185,CN,207,ES,28.41397,-16.54867 36455,Puerto del Carmen,1185,CN,207,ES,28.92313,-13.66579 36456,Puerto del Rosario,1185,CN,207,ES,28.50038,-13.86272 36448,Puerto Rico,1185,CN,207,ES,27.78943,-15.71045 36471,Punta de Mujeres,1185,CN,207,ES,29.1466,-13.44761 36472,Puntagorda,1185,CN,207,ES,28.7749,-17.97741 36473,Puntallana,1185,CN,207,ES,28.73333,-17.73333 36553,Realejo Alto,1185,CN,207,ES,28.37645,-16.58575 36806,San Bartolomé,1185,CN,207,ES,29.00093,-13.613 36809,San Bartolomé de Tirajana,1185,CN,207,ES,27.92481,-15.57329 36839,San Isidro,1185,CN,207,ES,28.07617,-16.558 36848,San Juan de la Rambla,1185,CN,207,ES,28.39276,-16.65015 36879,San Miguel De Abona,1185,CN,207,ES,28.09826,-16.61708 36895,San Nicolás,1185,CN,207,ES,27.9891,-15.78126 36920,San Sebastián de la Gomera,1185,CN,207,ES,28.09163,-17.11331 37007,Santa Brígida,1185,CN,207,ES,28.03197,-15.50425 37038,Santa Cruz de la Palma,1185,CN,207,ES,28.68351,-17.76421 37036,Santa Cruz de Tenerife,1185,CN,207,ES,28.46824,-16.25462 37062,Santa Lucía,1185,CN,207,ES,27.91174,-15.54071 37102,Santa Úrsula,1185,CN,207,ES,28.42613,-16.48876 37119,Santiago del Teide,1185,CN,207,ES,28.294,-16.81618 37180,Sauzal,1185,CN,207,ES,28.46667,-16.41667 37347,Tacoronte,1185,CN,207,ES,28.47688,-16.41016 37368,Tanque,1185,CN,207,ES,28.36667,-16.83333 37389,Tazacorte,1185,CN,207,ES,28.64186,-17.93394 37391,Tegueste,1185,CN,207,ES,28.51667,-16.31667 37392,Teguise,1185,CN,207,ES,29.06049,-13.56397 37397,Tejeda,1185,CN,207,ES,27.99508,-15.61543 37400,Telde,1185,CN,207,ES,27.99243,-15.41915 37405,Teror,1185,CN,207,ES,28.06062,-15.54909 37666,Tías,1185,CN,207,ES,28.96108,-13.64502 37425,Tijarafe,1185,CN,207,ES,28.7,-17.95 37427,Tinajo,1185,CN,207,ES,29.06326,-13.67647 37652,Tuineje,1185,CN,207,ES,28.32372,-14.04722 37850,Vallehermosa,1185,CN,207,ES,28.17944,-17.26664 37857,Valleseco,1185,CN,207,ES,28.0433,-15.57623 37875,Valsequillo de Gran Canaria,1185,CN,207,ES,27.98562,-15.49725 37881,Valverde,1185,CN,207,ES,27.80628,-17.91578 37900,Vecindario,1185,CN,207,ES,27.84636,-15.44455 37907,Vega de San Mateo,1185,CN,207,ES,28.00892,-15.5333 37982,Vilaflor,1185,CN,207,ES,28.15623,-16.63592 38425,Yaiza,1185,CN,207,ES,28.95678,-13.76535 32360,Ampuero,1170,S,207,ES,43.34268,-3.41667 32445,Arenas de Iguña,1170,S,207,ES,43.18293,-4.04729 32472,Argoños,1170,S,207,ES,43.4574,-3.49013 32495,Arnuero,1170,S,207,ES,43.47756,-3.56959 32505,Arredondo,1170,S,207,ES,43.27325,-3.60031 33053,Bárcena de Cicero,1170,S,207,ES,43.4216,-3.5103 33054,Bárcena de Pie de Concha,1170,S,207,ES,43.1258,-4.05662 32661,Bareyo,1170,S,207,ES,43.46686,-3.60083 33094,Cabezón de la Sal,1170,S,207,ES,43.30824,-4.23571 33092,Cabezón de Liébana,1170,S,207,ES,43.13437,-4.5763 33167,Camargo,1170,S,207,ES,43.40744,-3.88498 33340,Cartes,1170,S,207,ES,43.32596,-4.06893 33492,Castro-Urdiales,1170,S,207,ES,43.38285,-3.22043 33728,Colindres,1170,S,207,ES,43.39667,-3.45361 33753,Comillas,1170,S,207,ES,43.38603,-4.29162 33978,El Astillero,1170,S,207,ES,43.40094,-3.82051 34076,Escalante,1170,S,207,ES,43.43678,-3.51347 34575,Hazas de Cesto,1170,S,207,ES,43.39653,-3.58916 34976,Laredo,1170,S,207,ES,43.4098,-3.41613 35051,Limpias,1170,S,207,ES,43.36402,-3.41778 35120,Los Corrales de Buelna,1170,S,207,ES,43.26358,-4.07262 35172,Luzmela,1170,S,207,ES,43.29685,-4.20884 35337,Mataporquera,1170,S,207,ES,42.87486,-4.16276 35421,Miengo,1170,S,207,ES,43.42861,-3.99866 35485,Molledo,1170,S,207,ES,43.14974,-4.04239 35820,Noja,1170,S,207,ES,43.48917,-3.52306 36127,Penagos,1170,S,207,ES,43.35216,-3.81382 36155,Pesquera,1170,S,207,ES,43.08223,-4.07932 36257,Polanco,1170,S,207,ES,43.38524,-4.01642 36304,Potes,1170,S,207,ES,43.15457,-4.62055 36365,Provincia de Cantabria,1170,S,207,ES,43.16667,-4.0 36434,Puente Viesgo,1170,S,207,ES,43.29815,-3.96817 36544,Ramales de la Victoria,1170,S,207,ES,43.2572,-3.46516 36548,Rasines,1170,S,207,ES,43.30505,-3.42919 36568,Reinosa,1170,S,207,ES,42.99959,-4.13801 36580,Reocín,1170,S,207,ES,43.33915,-4.09403 36699,Ruente,1170,S,207,ES,43.25826,-4.26791 36864,San Martín de Elines,1170,S,207,ES,42.82864,-3.86865 36880,San Miguel de Aguayo,1170,S,207,ES,43.05383,-4.0255 36882,San Miguel de Meruelo,1170,S,207,ES,43.46211,-3.58877 36911,San Pedro del Romeral,1170,S,207,ES,43.11514,-3.8186 36928,San Vicente de la Barquera,1170,S,207,ES,43.38509,-4.39934 37027,Santa Cruz de Bezana,1170,S,207,ES,43.4437,-3.90324 37074,Santa María de Cayón,1170,S,207,ES,43.30849,-3.8368 37106,Santander,1170,S,207,ES,43.46472,-3.80444 37130,Santillana,1170,S,207,ES,43.38903,-4.10844 37134,Santiurde de Reinosa,1170,S,207,ES,43.06144,-4.08351 37135,Santiurde de Toranzo,1170,S,207,ES,43.23819,-3.93947 37150,Santoña,1170,S,207,ES,43.44386,-3.45757 37164,Saro,1170,S,207,ES,43.25961,-3.84283 37202,Selaya,1170,S,207,ES,43.21376,-3.80563 37286,Solórzano,1170,S,207,ES,43.38233,-3.58785 37327,Suances,1170,S,207,ES,43.43341,-4.04338 37546,Torrelavega,1170,S,207,ES,43.34943,-4.04785 37905,Vega de Pas,1170,S,207,ES,43.15692,-3.78316 38025,Villacarriedo,1170,S,207,ES,43.22851,-3.81057 38045,Villaescusa,1170,S,207,ES,42.96262,-4.16706 38068,Villafufre,1170,S,207,ES,43.26557,-3.8937 31921,Abánades,1205,CM,207,ES,40.89261,-2.48526 31908,Abengibre,1205,CM,207,ES,39.21667,-1.53333 31909,Abenójar,1205,CM,207,ES,38.88032,-4.35702 31916,Ablanque,1205,CM,207,ES,40.89818,-2.22523 31934,Adobes,1205,CM,207,ES,40.67584,-1.67916 31956,Agudo,1205,CM,207,ES,38.98183,-4.87133 31987,Ajofrín,1205,CM,207,ES,39.71088,-3.9822 31997,Alamillo,1205,CM,207,ES,38.67842,-4.79008 31998,Alaminos,1205,CM,207,ES,40.86303,-2.72573 32005,Alarcón,1205,CM,207,ES,39.55,-2.08333 32006,Alarilla,1205,CM,207,ES,40.84711,-3.1031 32008,Alatoz,1205,CM,207,ES,39.09495,-1.36098 32013,Albacete,1205,CM,207,ES,38.99424,-1.85643 32017,Albaladejo,1205,CM,207,ES,38.61887,-2.80784 32018,Albaladejo del Cuende,1205,CM,207,ES,39.80684,-2.22903 32024,Albalate de las Nogueras,1205,CM,207,ES,40.36614,-2.27718 32023,Albalate de Zorita,1205,CM,207,ES,40.30812,-2.84267 32028,Albares,1205,CM,207,ES,40.3069,-3.00897 32030,Albarreal de Tajo,1205,CM,207,ES,39.89698,-4.22895 32031,Albatana,1205,CM,207,ES,38.57057,-1.5221 32035,Albendea,1205,CM,207,ES,40.48751,-2.41747 32036,Albendiego,1205,CM,207,ES,41.22742,-3.05171 32053,Alborea,1205,CM,207,ES,39.28333,-1.38333 32064,Alcabón,1205,CM,207,ES,40.00224,-4.36852 32065,Alcadozo,1205,CM,207,ES,38.64916,-1.97998 32075,Alcalá de la Vega,1205,CM,207,ES,40.03333,-1.51667 32077,Alcalá del Júcar,1205,CM,207,ES,39.19313,-1.43017 32095,Alcañizo,1205,CM,207,ES,39.90315,-5.10588 32085,Alcantud,1205,CM,207,ES,40.54818,-2.33258 32088,Alcaraz,1205,CM,207,ES,38.6668,-2.49105 32136,Alcázar de San Juan,1205,CM,207,ES,39.39011,-3.20827 32137,Alcázar del Rey,1205,CM,207,ES,40.06289,-2.80782 32096,Alcoba,1205,CM,207,ES,39.25988,-4.47715 32098,Alcocer,1205,CM,207,ES,40.46972,-2.6094 32102,Alcohujate,1205,CM,207,ES,40.41763,-2.6149 32104,Alcolea de Calatrava,1205,CM,207,ES,38.9868,-4.11597 32107,Alcolea de las Peñas,1205,CM,207,ES,41.2096,-2.78483 32106,Alcolea de Tajo,1205,CM,207,ES,39.80966,-5.14738 32108,Alcolea del Pinar,1205,CM,207,ES,41.03569,-2.46645 32117,Alconchel de la Estrella,1205,CM,207,ES,39.71963,-2.57366 32121,Alcoroches,1205,CM,207,ES,40.62669,-1.74629 32128,Alcubillas,1205,CM,207,ES,38.75312,-3.13407 32146,Aldea del Rey,1205,CM,207,ES,38.7383,-3.84017 32157,Aldeanueva de Barbarroya,1205,CM,207,ES,39.75934,-5.02287 32160,Aldeanueva de Guadalajara,1205,CM,207,ES,40.67988,-3.04438 32161,Aldeanueva de San Bartolomé,1205,CM,207,ES,39.63608,-5.11307 32211,Algar de Mesa,1205,CM,207,ES,41.13494,-1.95964 32213,Algarra,1205,CM,207,ES,40.0,-1.43333 32225,Algora,1205,CM,207,ES,40.96324,-2.66688 32237,Alhambra,1205,CM,207,ES,38.89925,-3.05333 32241,Alhóndiga,1205,CM,207,ES,40.52669,-2.82438 32243,Aliaguilla,1205,CM,207,ES,39.74143,-1.32567 32247,Alique,1205,CM,207,ES,40.58671,-2.64441 32261,Almadén,1205,CM,207,ES,38.77541,-4.83156 32260,Almadrones,1205,CM,207,ES,40.90096,-2.77406 32263,Almagro,1205,CM,207,ES,38.88941,-3.71131 32266,Almansa,1205,CM,207,ES,38.86917,-1.09713 32276,Almedina,1205,CM,207,ES,38.62453,-2.95382 32287,Almendral de la Cañada,1205,CM,207,ES,40.18456,-4.74173 32293,Almodóvar del Campo,1205,CM,207,ES,38.70936,-4.17908 32294,Almodóvar del Pinar,1205,CM,207,ES,39.71667,-1.88333 32296,Almoguera,1205,CM,207,ES,40.29713,-2.9824 32301,Almonacid de Zorita,1205,CM,207,ES,40.32932,-2.8504 32304,Almonacid del Marquesado,1205,CM,207,ES,39.82344,-2.7677 32307,Almorox,1205,CM,207,ES,40.23423,-4.39044 32318,Alocén,1205,CM,207,ES,40.57455,-2.74993 32322,Alovera,1205,CM,207,ES,40.59368,-3.24529 32329,Alpera,1205,CM,207,ES,38.95866,-1.23052 32339,Altarejos,1205,CM,207,ES,39.91258,-2.35692 32343,Alustante,1205,CM,207,ES,40.61442,-1.6591 32369,Anchuras,1205,CM,207,ES,39.48059,-4.83381 32382,Anguita,1205,CM,207,ES,41.02659,-2.36849 32598,Añover de Tajo,1205,CM,207,ES,39.98873,-3.76579 32387,Anquela del Ducado,1205,CM,207,ES,40.97084,-2.13066 32388,Anquela del Pedregal,1205,CM,207,ES,40.74336,-1.73697 32410,Arandilla del Arroyo,1205,CM,207,ES,40.51056,-2.38355 32414,Aranzueque,1205,CM,207,ES,40.49094,-3.07448 32421,Arbancón,1205,CM,207,ES,40.96434,-3.11505 32423,Arbeteta,1205,CM,207,ES,40.66999,-2.40236 32432,Arcicóllar,1205,CM,207,ES,40.05517,-4.11638 32439,Arcos de la Sierra,1205,CM,207,ES,40.34664,-2.1131 32446,Arenas de San Juan,1205,CM,207,ES,39.21861,-3.50211 32460,Argamasilla de Alba,1205,CM,207,ES,39.12917,-3.09247 32461,Argamasilla de Calatrava,1205,CM,207,ES,38.72985,-4.07627 32467,Argecilla,1205,CM,207,ES,40.88151,-2.82181 32475,Arguisuelas,1205,CM,207,ES,39.83333,-1.81667 32485,Armallones,1205,CM,207,ES,40.7358,-2.30257 32492,Armuña de Tajuña,1205,CM,207,ES,40.52884,-3.02819 32501,Arrancacepas,1205,CM,207,ES,40.3032,-2.35899 32511,Arroyo de las Fraguas,1205,CM,207,ES,41.10246,-3.13005 32545,Atalaya del Cañavate,1205,CM,207,ES,39.51864,-2.25175 32547,Atanzón,1205,CM,207,ES,40.66697,-2.99686 32555,Atienza,1205,CM,207,ES,41.19722,-2.87129 32563,Auñón,1205,CM,207,ES,40.51752,-2.7925 32575,Ayna,1205,CM,207,ES,38.55,-2.08333 32591,Azuqueca de Henares,1205,CM,207,ES,40.56566,-3.26753 32592,Azután,1205,CM,207,ES,39.78564,-5.1273 32613,Baides,1205,CM,207,ES,41.00685,-2.7762 32620,Balazote,1205,CM,207,ES,38.88444,-2.1518 32624,Ballesteros de Calatrava,1205,CM,207,ES,38.8346,-3.9447 32627,Balsa de Ves,1205,CM,207,ES,39.26667,-1.2 32707,Baños de Tajo,1205,CM,207,ES,40.71667,-1.96667 32710,Bañuelos,1205,CM,207,ES,41.28601,-2.91477 32637,Barajas de Melo,1205,CM,207,ES,40.1234,-2.91675 32655,Barchín del Hoyo,1205,CM,207,ES,39.66667,-2.06667 32658,Barcience,1205,CM,207,ES,39.98367,-4.23437 32662,Bargas,1205,CM,207,ES,39.94113,-4.01979 32671,Barrax,1205,CM,207,ES,39.04607,-2.20152 32678,Barriopedro,1205,CM,207,ES,40.79026,-2.75246 32691,Bascuñana de San Pedro,1205,CM,207,ES,40.21322,-2.22812 32715,Beamud,1205,CM,207,ES,40.18645,-1.8288 32739,Belinchón,1205,CM,207,ES,40.04603,-3.05517 32748,Belmonte,1205,CM,207,ES,39.55746,-2.70461 32751,Belmontejo,1205,CM,207,ES,39.82212,-2.34467 32755,Belvis de la Jara,1205,CM,207,ES,39.75768,-4.94932 32862,Berninches,1205,CM,207,ES,40.57106,-2.80121 32881,Beteta,1205,CM,207,ES,40.57191,-2.07588 32889,Bienservida,1205,CM,207,ES,38.51716,-2.61087 32930,Bogarra,1205,CM,207,ES,38.58139,-2.2129 32935,Bolaños de Calatrava,1205,CM,207,ES,38.9069,-3.66345 32946,Bonete,1205,CM,207,ES,38.87136,-1.34851 32947,Boniches,1205,CM,207,ES,39.98333,-1.61667 32959,Borox,1205,CM,207,ES,40.06795,-3.73804 32971,Brazatortas,1205,CM,207,ES,38.65869,-4.29368 32984,Brihuega,1205,CM,207,ES,40.76049,-2.86966 32998,Buciegas,1205,CM,207,ES,40.33622,-2.4625 32999,Budia,1205,CM,207,ES,40.62734,-2.75846 33000,Buenache de Alarcón,1205,CM,207,ES,39.65,-2.16667 33002,Buenaventura,1205,CM,207,ES,40.17705,-4.85003 33006,Buendía,1205,CM,207,ES,40.36643,-2.75645 33015,Bujalaro,1205,CM,207,ES,40.93687,-2.88333 33028,Burguillos de Toledo,1205,CM,207,ES,39.79635,-3.99254 33033,Burujón,1205,CM,207,ES,39.90113,-4.2973 33037,Bustares,1205,CM,207,ES,41.13333,-3.06667 33074,Cabañas de la Sagra,1205,CM,207,ES,40.0061,-3.9456 33073,Cabañas de Yepes,1205,CM,207,ES,39.89051,-3.53502 33069,Cabanillas del Campo,1205,CM,207,ES,40.63376,-3.22937 33082,Cabezamesada,1205,CM,207,ES,39.8163,-3.10236 33083,Cabezarados,1205,CM,207,ES,38.84469,-4.2983 33141,Calera y Chozas,1205,CM,207,ES,39.88278,-4.98213 33143,Caleruela,1205,CM,207,ES,39.87483,-5.25693 33164,Camarena,1205,CM,207,ES,40.09311,-4.11927 33166,Camarenilla,1205,CM,207,ES,40.01672,-4.07624 33186,Campillo de Altobuey,1205,CM,207,ES,39.6,-1.8 33192,Campillo de Dueñas,1205,CM,207,ES,40.88376,-1.68505 33194,Campillo de Ranas,1205,CM,207,ES,41.08601,-3.31431 33196,Campillos-Paravientos,1205,CM,207,ES,39.98333,-1.55 33197,Campillos-Sierra,1205,CM,207,ES,40.1,-1.7 33199,Campisábalos,1205,CM,207,ES,41.26667,-3.13333 33202,Campo de Criptana,1205,CM,207,ES,39.40463,-3.12492 33214,Camuñas,1205,CM,207,ES,39.42704,-3.45503 33529,Cañada de Calatrava,1205,CM,207,ES,38.85429,-4.02103 33530,Cañada del Hoyo,1205,CM,207,ES,39.96667,-1.9 33221,Canalejas del Arroyo,1205,CM,207,ES,40.3685,-2.49408 33532,Cañamares,1205,CM,207,ES,40.45203,-2.23983 33537,Cañaveras,1205,CM,207,ES,40.35994,-2.39611 33538,Cañaveruelas,1205,CM,207,ES,40.40024,-2.63719 33539,Cañete,1205,CM,207,ES,40.05,-1.65 33543,Cañizar,1205,CM,207,ES,40.76763,-3.06399 33545,Cañizares,1205,CM,207,ES,40.5187,-2.19201 33247,Canredondo,1205,CM,207,ES,40.81257,-2.49377 33253,Cantalojas,1205,CM,207,ES,41.23472,-3.24629 33286,Carboneras de Guadazaón,1205,CM,207,ES,39.88333,-1.8 33295,Carcelén,1205,CM,207,ES,39.10202,-1.30879 33297,Cardenete,1205,CM,207,ES,39.76667,-1.68333 33303,Cardiel de los Montes,1205,CM,207,ES,40.06348,-4.65488 33309,Carmena,1205,CM,207,ES,39.95562,-4.40149 33317,Carranque,1205,CM,207,ES,40.16976,-3.90092 33321,Carrascosa,1205,CM,207,ES,40.59092,-2.16305 33323,Carrascosa de Haro,1205,CM,207,ES,39.59757,-2.54182 33327,Carriches,1205,CM,207,ES,39.96417,-4.45864 33331,Carrión de Calatrava,1205,CM,207,ES,39.01897,-3.81683 33330,Carrizosa,1205,CM,207,ES,38.84204,-2.9925 33342,Casa de Uceda,1205,CM,207,ES,40.84115,-3.36849 33353,Casarrubios del Monte,1205,CM,207,ES,40.18697,-4.03644 33358,Casas de Benítez,1205,CM,207,ES,39.36667,-2.13333 33362,Casas de Fernando Alonso,1205,CM,207,ES,39.35065,-2.32402 33363,Casas de Garcimolina,1205,CM,207,ES,40.0,-1.41667 33364,Casas de Guijarro,1205,CM,207,ES,39.35,-2.16667 33365,Casas de Haro,1205,CM,207,ES,39.33355,-2.27273 33366,Casas de Juan Núñez,1205,CM,207,ES,39.1019,-1.55821 33367,Casas de Lázaro,1205,CM,207,ES,38.77056,-2.24044 33373,Casas de los Pinos,1205,CM,207,ES,39.33375,-2.36984 33371,Casas de San Galindo,1205,CM,207,ES,40.87234,-2.9575 33372,Casas de Ves,1205,CM,207,ES,39.25,-1.33333 33357,Casas Ibáñez,1205,CM,207,ES,39.28333,-1.46667 33376,Casasbuenas,1205,CM,207,ES,39.76117,-4.12558 33379,Casasimarro,1205,CM,207,ES,39.36667,-2.03333 33394,Caspueñas,1205,CM,207,ES,40.69497,-2.97941 33401,Castejón de Henares,1205,CM,207,ES,40.93762,-2.78665 33421,Castellar de la Muela,1205,CM,207,ES,40.81902,-1.75932 33418,Castellar de Santiago,1205,CM,207,ES,38.53928,-3.27573 33450,Castilforte,1205,CM,207,ES,40.55735,-2.43226 33457,Castillejo de Iniesta,1205,CM,207,ES,39.53333,-1.76667 33461,Castillejo-Sierra,1205,CM,207,ES,40.37477,-2.1404 33462,Castillo de Bayuela,1205,CM,207,ES,40.10032,-4.68562 33463,Castillo de Garcimuñoz,1205,CM,207,ES,39.65928,-2.3803 33466,Castillo-Albaráñez,1205,CM,207,ES,40.29869,-2.39277 33469,Castilnuevo,1205,CM,207,ES,40.81431,-1.85782 33518,Caudete,1205,CM,207,ES,38.70679,-0.98723 33521,Cazalegas,1205,CM,207,ES,40.00958,-4.67606 33549,Cebolla,1205,CM,207,ES,39.94897,-4.57175 33557,Cedillo del Condado,1205,CM,207,ES,40.1126,-3.92127 33567,Cendejas de la Torre,1205,CM,207,ES,40.97916,-2.85053 33571,Cenizate,1205,CM,207,ES,39.3,-1.65 33574,Centenera,1205,CM,207,ES,40.65064,-3.0512 33599,Cervera de los Montes,1205,CM,207,ES,40.05182,-4.81072 33600,Cervera del Llano,1205,CM,207,ES,39.78312,-2.42019 33621,Checa,1205,CM,207,ES,40.58614,-1.79056 33625,Chequilla,1205,CM,207,ES,40.606,-1.82787 33633,Chillarón de Cuenca,1205,CM,207,ES,40.10539,-2.22181 33634,Chillarón del Rey,1205,CM,207,ES,40.59818,-2.69126 33636,Chiloeches,1205,CM,207,ES,40.57038,-3.16003 33639,Chinchilla de Monte Aragón,1205,CM,207,ES,38.92088,-1.72018 33647,Chozas de Canales,1205,CM,207,ES,40.10014,-4.04333 33649,Chueca,1205,CM,207,ES,39.73191,-3.94365 33651,Chumillas,1205,CM,207,ES,39.76667,-2.03333 33660,Cifuentes,1205,CM,207,ES,40.78622,-2.62245 33677,Cincovillas,1205,CM,207,ES,41.20501,-2.81834 33685,Ciruelas,1205,CM,207,ES,40.75021,-3.0858 33686,Ciruelos,1205,CM,207,ES,39.93881,-3.61383 33697,Ciudad Real,1205,CM,207,ES,38.98626,-3.92907 33707,Cobeja,1205,CM,207,ES,40.02076,-3.85599 33708,Cobeta,1205,CM,207,ES,40.8656,-2.14211 33710,Cobisa,1205,CM,207,ES,39.80425,-4.02528 33721,Cogollor,1205,CM,207,ES,40.84818,-2.74425 33724,Cogolludo,1205,CM,207,ES,40.94691,-3.0893 33754,Condemios de Abajo,1205,CM,207,ES,41.21667,-3.1 33755,Condemios de Arriba,1205,CM,207,ES,41.21644,-3.12543 33760,Congostrina,1205,CM,207,ES,41.03719,-2.98569 33768,Consuegra,1205,CM,207,ES,39.46246,-3.608 33772,Copernal,1205,CM,207,ES,40.86463,-3.05396 33784,Corduente,1205,CM,207,ES,40.84304,-1.97841 33798,Corral de Almaguer,1205,CM,207,ES,39.75987,-3.16452 33800,Corral de Calatrava,1205,CM,207,ES,38.85793,-4.0814 33801,Corral-Rubio,1205,CM,207,ES,38.83462,-1.46034 33825,Cotillas,1205,CM,207,ES,38.43115,-2.5055 33905,Cózar,1205,CM,207,ES,38.66219,-3.07205 33864,Cuenca,1205,CM,207,ES,40.06667,-2.13333 33866,Cuerva,1205,CM,207,ES,39.66374,-4.21085 33868,Cueva del Hierro,1205,CM,207,ES,40.58258,-2.03612 33909,Daimiel,1205,CM,207,ES,39.07004,-3.61498 33939,Domingo Pérez,1205,CM,207,ES,39.97661,-4.50554 33951,Dosbarrios,1205,CM,207,ES,39.88199,-3.48419 33958,Driebes,1205,CM,207,ES,40.24498,-3.04165 33964,Durón,1205,CM,207,ES,40.6253,-2.72662 33980,El Bonillo,1205,CM,207,ES,38.95048,-2.54048 33987,El Carpio de Tajo,1205,CM,207,ES,39.88796,-4.45388 33989,El Casar de Escalona,1205,CM,207,ES,40.0464,-4.52507 34005,El Pedernoso,1205,CM,207,ES,39.4858,-2.74642 34011,El Provencio,1205,CM,207,ES,39.3774,-2.57448 34012,El Puente del Arzobispo,1205,CM,207,ES,39.80174,-5.17178 34014,El Real de San Vicente,1205,CM,207,ES,40.13561,-4.69095 34015,El Robledo,1205,CM,207,ES,39.21898,-4.28099 34021,El Toboso,1205,CM,207,ES,39.51333,-2.99726 34027,El Viso de San Juan,1205,CM,207,ES,40.14154,-3.91817 34031,Elche de la Sierra,1205,CM,207,ES,38.45123,-2.0476 34040,Embid,1205,CM,207,ES,40.97256,-1.71206 34059,Enguídanos,1205,CM,207,ES,39.66667,-1.6 34072,Erustes,1205,CM,207,ES,39.95667,-4.49656 34077,Escalona,1205,CM,207,ES,40.1669,-4.40484 34079,Escalonilla,1205,CM,207,ES,39.9257,-4.35095 34080,Escamilla,1205,CM,207,ES,40.54979,-2.56292 34082,Escariche,1205,CM,207,ES,40.40553,-3.0531 34088,Escopete,1205,CM,207,ES,40.41324,-3.0046 34120,Espinosa de Henares,1205,CM,207,ES,40.90053,-3.06956 34124,Espinoso del Rey,1205,CM,207,ES,39.65333,-4.78371 34126,Esplegares,1205,CM,207,ES,40.8565,-2.37084 34134,Esquivias,1205,CM,207,ES,40.1044,-3.76677 34135,Establés,1205,CM,207,ES,41.00767,-2.02438 34148,Estriégana,1205,CM,207,ES,41.05821,-2.52363 34367,Férez,1205,CM,207,ES,38.35,-2.0 34211,Fontanar,1205,CM,207,ES,40.72466,-3.17309 34212,Fontanarejo,1205,CM,207,ES,39.22014,-4.51753 34244,Fresneda de Altarejos,1205,CM,207,ES,39.92577,-2.31498 34246,Fresneda de la Sierra,1205,CM,207,ES,40.39101,-2.14233 34274,Fuembellida,1205,CM,207,ES,40.75589,-1.99861 34275,Fuencaliente,1205,CM,207,ES,39.18624,-4.02576 34278,Fuencemillán,1205,CM,207,ES,40.92063,-3.09818 34285,Fuenllana,1205,CM,207,ES,38.7559,-2.95814 34288,Fuensalida,1205,CM,207,ES,40.05288,-4.20718 34289,Fuensanta,1205,CM,207,ES,39.23333,-2.06667 34296,Fuente de Pedro Naharro,1205,CM,207,ES,39.92438,-3.00916 34300,Fuente el Fresno,1205,CM,207,ES,39.22839,-3.77487 34307,Fuente-Álamo,1205,CM,207,ES,38.69288,-1.43158 34309,Fuentealbilla,1205,CM,207,ES,39.26667,-1.55 34317,Fuentelahiguera de Albatages,1205,CM,207,ES,40.78312,-3.30492 34320,Fuentelencina,1205,CM,207,ES,40.51781,-2.88226 34321,Fuentelespino de Haro,1205,CM,207,ES,39.68934,-2.66869 34322,Fuentelespino de Moya,1205,CM,207,ES,39.91667,-1.46667 34324,Fuentelsaz,1205,CM,207,ES,41.07359,-1.83108 34326,Fuentelviejo,1205,CM,207,ES,40.52637,-2.9843 34329,Fuentenovilla,1205,CM,207,ES,40.36248,-3.09102 34335,Fuentes,1205,CM,207,ES,39.96667,-2.01667 34363,Fuertescusa,1205,CM,207,ES,40.47552,-2.1762 34369,Gabaldón,1205,CM,207,ES,39.61667,-1.93333 34371,Gajanejos,1205,CM,207,ES,40.84147,-2.89229 34399,Galápagos,1205,CM,207,ES,40.69347,-3.33537 34398,Galve de Sorbe,1205,CM,207,ES,41.21667,-3.18333 34560,Gálvez,1205,CM,207,ES,39.70208,-4.27239 34404,Garaballa,1205,CM,207,ES,39.81667,-1.36667 34431,Gascueña,1205,CM,207,ES,40.29937,-2.51856 34432,Gascueña de Bornova,1205,CM,207,ES,41.14243,-3.01924 34456,Gerindote,1205,CM,207,ES,39.96594,-4.30278 34480,Golosalvo,1205,CM,207,ES,39.23333,-1.63333 34493,Graja de Campalbo,1205,CM,207,ES,39.9,-1.26667 34494,Graja de Iniesta,1205,CM,207,ES,39.51667,-1.66667 34520,Guadalajara,1205,CM,207,ES,40.62862,-3.16185 34525,Guadalmez,1205,CM,207,ES,38.72665,-4.97104 34527,Guadamur,1205,CM,207,ES,39.81178,-4.14885 34576,Hellín,1205,CM,207,ES,38.5106,-1.70096 34577,Henarejos,1205,CM,207,ES,39.86667,-1.48333 34578,Henche,1205,CM,207,ES,40.71474,-2.70746 34581,Herencia,1205,CM,207,ES,39.36616,-3.35735 34602,Herrería,1205,CM,207,ES,40.88815,-1.96014 34601,Herreruela de Oropesa,1205,CM,207,ES,39.88928,-5.24279 34606,Hiendelaencina,1205,CM,207,ES,41.08373,-3.00337 34616,Higueruela,1205,CM,207,ES,38.96371,-1.4437 34618,Hijes,1205,CM,207,ES,41.25139,-2.99989 34625,Hinojosa de San Vicente,1205,CM,207,ES,40.10463,-4.72269 34629,Hinojosas de Calatrava,1205,CM,207,ES,38.61446,-4.13979 34630,Hita,1205,CM,207,ES,40.82149,-3.0454 34632,Hombrados,1205,CM,207,ES,40.80118,-1.68558 34636,Honrubia,1205,CM,207,ES,39.61358,-2.28077 34639,Hontanar,1205,CM,207,ES,39.61297,-4.49663 34642,Hontanaya,1205,CM,207,ES,39.71553,-2.83516 34644,Hontecillas,1205,CM,207,ES,39.7,-2.18333 34645,Hontoba,1205,CM,207,ES,40.45385,-3.03858 34651,Horcajo de Santiago,1205,CM,207,ES,39.84221,-2.99724 34655,Horche,1205,CM,207,ES,40.56399,-3.0611 34656,Hormigos,1205,CM,207,ES,40.09778,-4.44473 34672,Hoya-Gonzalo,1205,CM,207,ES,38.9579,-1.55679 34683,Huecas,1205,CM,207,ES,40.0123,-4.19541 34709,Huélamo,1205,CM,207,ES,40.27658,-1.80957 34686,Huelves,1205,CM,207,ES,40.04282,-2.88444 34714,Huérguina,1205,CM,207,ES,40.03333,-1.6 34716,Huérmeces del Cerro,1205,CM,207,ES,41.05332,-2.79711 34689,Huerta de la Obispalía,1205,CM,207,ES,39.98901,-2.47875 34688,Huerta de Valdecarábanos,1205,CM,207,ES,39.86319,-3.61275 34690,Huerta del Marquesado,1205,CM,207,ES,40.15,-1.68333 34692,Huertahernando,1205,CM,207,ES,40.82348,-2.28697 34697,Huete,1205,CM,207,ES,40.14526,-2.69026 34698,Hueva,1205,CM,207,ES,40.46221,-2.96039 34700,Humanes,1205,CM,207,ES,40.82598,-3.15257 34751,Illán de Vacas,1205,CM,207,ES,39.97079,-4.55743 34745,Illana,1205,CM,207,ES,40.18442,-2.90889 34748,Illescas,1205,CM,207,ES,40.12213,-3.84704 34753,Infantes,1205,CM,207,ES,38.73669,-3.01219 34755,Iniesta,1205,CM,207,ES,39.43333,-1.75 34756,Iniéstola,1205,CM,207,ES,40.994,-2.37063 34761,Irueste,1205,CM,207,ES,40.61206,-2.89072 34789,Jadraque,1205,CM,207,ES,40.92454,-2.92468 34819,Jirueque,1205,CM,207,ES,40.96431,-2.90289 34823,Jorquera,1205,CM,207,ES,39.16667,-1.51667 34849,La Alameda de la Sagra,1205,CM,207,ES,40.01199,-3.79255 34851,La Alberca de Záncara,1205,CM,207,ES,39.51458,-2.49272 34861,La Calzada de Calatrava,1205,CM,207,ES,38.70339,-3.77561 34872,La Frontera,1205,CM,207,ES,40.40161,-2.21699 34878,La Gineta,1205,CM,207,ES,39.11452,-1.99603 34881,La Guardia,1205,CM,207,ES,39.78795,-3.47604 34909,La Puebla de Almoradiel,1205,CM,207,ES,39.59862,-3.11782 34911,La Puebla de Montalbán,1205,CM,207,ES,39.86297,-4.35917 34914,La Pueblanueva,1205,CM,207,ES,39.91208,-4.67933 34921,La Roda,1205,CM,207,ES,39.20735,-2.15723 34929,La Solana,1205,CM,207,ES,38.94422,-3.2381 34930,La Torre de Esteban Hambrán,1205,CM,207,ES,40.16935,-4.21549 34939,Lagartera,1205,CM,207,ES,39.90557,-5.20143 34950,Laguna del Marquesado,1205,CM,207,ES,40.17749,-1.67167 34951,Lagunaseca,1205,CM,207,ES,40.531,-2.01956 34960,Landete,1205,CM,207,ES,39.9,-1.36667 34986,Las Mesas,1205,CM,207,ES,39.38871,-2.76524 34989,Las Pedroñeras,1205,CM,207,ES,39.44997,-2.67394 34995,Las Ventas de Retamosa,1205,CM,207,ES,40.15526,-4.11455 35006,Layos,1205,CM,207,ES,39.77703,-4.06448 35015,Ledaña,1205,CM,207,ES,39.36667,-1.7 35014,Ledanca,1205,CM,207,ES,40.86881,-2.8434 35020,Leganiel,1205,CM,207,ES,40.16568,-2.94966 35037,Letur,1205,CM,207,ES,38.36626,-2.10206 35043,Lezuza,1205,CM,207,ES,38.9497,-2.35419 35062,Liétor,1205,CM,207,ES,38.54267,-1.95367 35050,Lillo,1205,CM,207,ES,39.72331,-3.30618 35104,Lominchar,1205,CM,207,ES,40.09061,-3.96713 35112,Loranca de Tajuña,1205,CM,207,ES,40.44368,-3.11082 35123,Los Hinojosos,1205,CM,207,ES,39.60417,-2.82572 35129,Los Navalmorales,1205,CM,207,ES,39.72526,-4.64227 35130,Los Navalucillos,1205,CM,207,ES,39.66665,-4.64205 35137,Los Yébenes,1205,CM,207,ES,39.58158,-3.87058 35154,Lucillos,1205,CM,207,ES,39.9851,-4.61279 35167,Lupiana,1205,CM,207,ES,40.60846,-3.05118 35171,Luzaga,1205,CM,207,ES,40.97337,-2.44497 35173,Luzón,1205,CM,207,ES,41.02691,-2.27691 35188,Madridejos,1205,CM,207,ES,39.46823,-3.53196 35194,Madrigueras,1205,CM,207,ES,39.23333,-1.8 35205,Magán,1205,CM,207,ES,39.96138,-3.93164 35208,Mahora,1205,CM,207,ES,39.21667,-1.73333 35216,Majaelrayo,1205,CM,207,ES,41.1126,-3.30257 35704,Málaga del Fresno,1205,CM,207,ES,40.7874,-3.24465 35219,Malagón,1205,CM,207,ES,39.16668,-3.85419 35218,Malaguilla,1205,CM,207,ES,40.81956,-3.2545 35230,Malpica,1205,CM,207,ES,39.89746,-4.54988 35247,Mandayona,1205,CM,207,ES,40.9561,-2.75021 35259,Mantiel,1205,CM,207,ES,40.61892,-2.66324 35265,Manzanares,1205,CM,207,ES,38.99915,-3.36991 35269,Manzaneque,1205,CM,207,ES,39.63549,-3.79249 35273,Maqueda,1205,CM,207,ES,40.06614,-4.37066 35276,Maranchón,1205,CM,207,ES,41.04754,-2.20482 35284,Marchamalo,1205,CM,207,ES,40.66677,-3.19914 35290,Mariana,1205,CM,207,ES,40.16717,-2.14601 35293,Marjaliza,1205,CM,207,ES,39.56329,-3.93499 35318,Mascaraque,1205,CM,207,ES,39.71643,-3.81254 35320,Masegosa,1205,CM,207,ES,40.54689,-2.02588 35321,Masegoso,1205,CM,207,ES,38.71833,-2.3161 35322,Masegoso de Tajuña,1205,CM,207,ES,40.82552,-2.69532 35339,Matarrubia,1205,CM,207,ES,40.86463,-3.28944 35346,Matillas,1205,CM,207,ES,40.94415,-2.8359 35352,Mazarambroz,1205,CM,207,ES,39.69411,-4.01962 35353,Mazarete,1205,CM,207,ES,41.00086,-2.15921 35358,Mazuecos,1205,CM,207,ES,40.2602,-3.00755 35377,Medranda,1205,CM,207,ES,40.98333,-2.93719 35380,Megina,1205,CM,207,ES,40.63911,-1.87041 35383,Mejorada,1205,CM,207,ES,40.00991,-4.88506 35395,Membrilla,1205,CM,207,ES,38.97198,-3.3433 35396,Membrillera,1205,CM,207,ES,40.94807,-2.97969 35397,Menasalbas,1205,CM,207,ES,39.63954,-4.28418 35706,Méntrida,1205,CM,207,ES,40.23899,-4.19337 35412,Mestanza,1205,CM,207,ES,38.57616,-4.07096 35420,Miedes de Atienza,1205,CM,207,ES,41.26672,-2.96375 35423,Miguel Esteban,1205,CM,207,ES,39.52448,-3.07618 35424,Miguelturra,1205,CM,207,ES,38.96442,-3.89047 35430,Millana,1205,CM,207,ES,40.50717,-2.57116 35435,Milmarcos,1205,CM,207,ES,41.08622,-1.87652 35436,Minaya,1205,CM,207,ES,39.27052,-2.32176 35437,Minglanilla,1205,CM,207,ES,39.53333,-1.6 35439,Mira,1205,CM,207,ES,39.71667,-1.43333 35441,Mirabueno,1205,CM,207,ES,40.94479,-2.72438 35445,Miralrío,1205,CM,207,ES,40.88901,-2.9434 35460,Mocejón,1205,CM,207,ES,39.93934,-3.91716 35461,Mochales,1205,CM,207,ES,41.09647,-2.0156 35470,Mohedas de la Jara,1205,CM,207,ES,39.60417,-5.14247 35471,Mohernando,1205,CM,207,ES,40.80129,-3.17234 35477,Molina de Aragón,1205,CM,207,ES,40.84358,-1.88762 35480,Molinicos,1205,CM,207,ES,38.46717,-2.23939 35495,Monasterio,1205,CM,207,ES,40.98547,-3.09711 35507,Mondéjar,1205,CM,207,ES,40.32095,-3.10686 35523,Monreal del Llano,1205,CM,207,ES,39.56888,-2.76046 35530,Montalbanejo,1205,CM,207,ES,39.73369,-2.49911 35531,Montalbo,1205,CM,207,ES,39.87994,-2.67038 35534,Montalvos,1205,CM,207,ES,39.16667,-2.01667 35537,Montarrón,1205,CM,207,ES,40.90675,-3.11495 35541,Monteagudo de las Salinas,1205,CM,207,ES,39.8,-1.9 35544,Montealegre del Castillo,1205,CM,207,ES,38.78856,-1.32722 35545,Montearagón,1205,CM,207,ES,39.96425,-4.63214 35571,Montesclaros,1205,CM,207,ES,40.10646,-4.93849 35575,Montiel,1205,CM,207,ES,38.69802,-2.86441 35593,Mora,1205,CM,207,ES,39.68492,-3.77394 35597,Moral de Calatrava,1205,CM,207,ES,38.82989,-3.57813 35619,Moratilla de los Meleros,1205,CM,207,ES,40.50182,-2.94276 35625,Morenilla,1205,CM,207,ES,40.78687,-1.70717 35640,Mota de Altarejos,1205,CM,207,ES,39.88201,-2.30958 35641,Mota del Cuervo,1205,CM,207,ES,39.50189,-2.86994 35643,Motilla del Palancar,1205,CM,207,ES,39.56667,-1.88333 35644,Motilleja,1205,CM,207,ES,39.18333,-1.78333 35646,Moya,1205,CM,207,ES,39.95,-1.36667 35653,Muduex,1205,CM,207,ES,40.8293,-2.95899 35663,Munera,1205,CM,207,ES,39.04217,-2.48068 35711,Nambroca,1205,CM,207,ES,39.79771,-3.94434 35712,Narboneta,1205,CM,207,ES,39.75,-1.46667 35736,Navahermosa,1205,CM,207,ES,39.63526,-4.47012 35745,Navalcán,1205,CM,207,ES,40.06667,-5.08333 35753,Navalmoralejo,1205,CM,207,ES,39.73929,-5.14359 35757,Navalpino,1205,CM,207,ES,39.22573,-4.59133 35763,Navamorcuende,1205,CM,207,ES,40.15659,-4.78625 35778,Navas de Estena,1205,CM,207,ES,39.49481,-4.52155 35779,Navas de Jorquera,1205,CM,207,ES,39.28333,-1.71667 35796,Negredo,1205,CM,207,ES,41.02737,-2.85878 35803,Nerpio,1205,CM,207,ES,38.14751,-2.30202 35813,Noblejas,1205,CM,207,ES,39.98061,-3.44001 35814,Noez,1205,CM,207,ES,39.74094,-4.18408 35822,Nombela,1205,CM,207,ES,40.1553,-4.50223 35831,Novés,1205,CM,207,ES,40.04746,-4.27471 35838,Numancia de la Sagra,1205,CM,207,ES,40.07395,-3.85118 35840,Nuño Gómez,1205,CM,207,ES,40.11383,-4.61978 35855,Ocaña,1205,CM,207,ES,39.95785,-3.4982 35856,Ocentejo,1205,CM,207,ES,40.77234,-2.39764 35919,Olías del Rey,1205,CM,207,ES,39.94436,-3.98684 35890,Olivares de Júcar,1205,CM,207,ES,39.76101,-2.35589 35895,Olmeda de Cobeta,1205,CM,207,ES,40.85971,-2.1828 35896,Olmeda de la Cuesta,1205,CM,207,ES,40.31088,-2.47592 35897,Olmeda del Rey,1205,CM,207,ES,39.8,-2.08333 35898,Olmedilla de Alarcón,1205,CM,207,ES,39.61667,-2.1 35899,Olmedilla de Eliz,1205,CM,207,ES,40.30232,-2.41952 35929,Ontígola,1205,CM,207,ES,40.00421,-3.57227 35928,Ontur,1205,CM,207,ES,38.61509,-1.49724 35942,Orea,1205,CM,207,ES,40.55725,-1.72738 35947,Orgaz,1205,CM,207,ES,39.64826,-3.87577 35957,Oropesa,1205,CM,207,ES,39.91726,-5.17371 35969,Osa de la Vega,1205,CM,207,ES,39.65977,-2.75998 35973,Ossa de Montiel,1205,CM,207,ES,38.96398,-2.74553 35977,Otero,1205,CM,207,ES,40.00096,-4.51539 36005,Pajarón,1205,CM,207,ES,39.95,-1.78333 36004,Pajaroncillo,1205,CM,207,ES,39.95,-1.73333 36481,Pálmaces de Jadraque,1205,CM,207,ES,41.0561,-2.9106 36036,Palomares del Campo,1205,CM,207,ES,39.94664,-2.59776 36039,Palomeque,1205,CM,207,ES,40.11966,-3.96403 36049,Pantoja,1205,CM,207,ES,40.04336,-3.8328 36052,Paracuellos,1205,CM,207,ES,39.71667,-1.78333 36064,Paredes,1205,CM,207,ES,40.06578,-2.854 36065,Paredes de Escalona,1205,CM,207,ES,40.20472,-4.4305 36067,Paredes de Sigüenza,1205,CM,207,ES,41.24283,-2.73376 36068,Pareja,1205,CM,207,ES,40.55578,-2.64882 36071,Parrillas,1205,CM,207,ES,40.06225,-5.0639 36076,Pastrana,1205,CM,207,ES,40.41902,-2.92256 36080,Paterna del Madera,1205,CM,207,ES,38.59751,-2.34421 36101,Pedro Muñoz,1205,CM,207,ES,39.40285,-2.94664 36119,Pelahustán,1205,CM,207,ES,40.17599,-4.59842 36169,Peñalén,1205,CM,207,ES,40.6656,-2.06999 36168,Peñalver,1205,CM,207,ES,40.5814,-2.8889 36175,Peñas de San Pedro,1205,CM,207,ES,38.7288,-2.005 36137,Peralejos de las Truchas,1205,CM,207,ES,40.59336,-1.90953 36144,Peralveche,1205,CM,207,ES,40.61078,-2.44957 36484,Pétrola,1205,CM,207,ES,38.82628,-1.55662 36179,Picón,1205,CM,207,ES,39.05074,-4.06084 36180,Piedrabuena,1205,CM,207,ES,39.03536,-4.17512 36193,Pinarejo,1205,CM,207,ES,39.61639,-2.42592 36196,Pineda de Gigüela,1205,CM,207,ES,40.08546,-2.54368 36201,Pinilla de Jadraque,1205,CM,207,ES,41.01988,-2.94254 36202,Pinilla de Molina,1205,CM,207,ES,40.67969,-1.88034 36217,Pioz,1205,CM,207,ES,40.46153,-3.17234 36218,Piqueras,1205,CM,207,ES,40.66367,-1.72202 36219,Piqueras del Castillo,1205,CM,207,ES,39.71667,-2.06667 36254,Poblete,1205,CM,207,ES,38.9355,-3.98137 36266,Polán,1205,CM,207,ES,39.78765,-4.16792 36290,Portilla,1205,CM,207,ES,40.28957,-2.08178 36293,Portillo de Toledo,1205,CM,207,ES,40.06415,-4.22793 36301,Porzuna,1205,CM,207,ES,39.14618,-4.15407 36307,Poveda de la Sierra,1205,CM,207,ES,40.64329,-2.02905 36309,Povedilla,1205,CM,207,ES,38.70022,-2.60212 36317,Pozo de Almoguera,1205,CM,207,ES,40.3403,-3.02638 36318,Pozo de Guadalajara,1205,CM,207,ES,40.49533,-3.1814 36320,Pozo-Cañada,1205,CM,207,ES,38.80333,-1.73532 36321,Pozoamargo,1205,CM,207,ES,39.36558,-2.19617 36324,Pozohondo,1205,CM,207,ES,38.72095,-1.91192 36326,Pozorrubio,1205,CM,207,ES,39.81645,-2.94936 36330,Pozuelo,1205,CM,207,ES,38.80989,-2.10101 36333,Pozuelo de Calatrava,1205,CM,207,ES,38.58333,-3.83333 36405,Prádena de Atienza,1205,CM,207,ES,41.17245,-3.00728 36348,Prados Redondos,1205,CM,207,ES,40.78505,-1.79329 36353,Priego,1205,CM,207,ES,40.44936,-2.31435 36359,Province of Toledo,1205,CM,207,ES,39.83333,-4.0 36361,Provincia de Albacete,1205,CM,207,ES,38.83333,-2.0 36366,Provincia de Ciudad Real,1205,CM,207,ES,39.0,-4.0 36367,Provincia de Cuenca,1205,CM,207,ES,40.0,-2.0 36371,Provincia de Guadalajara,1205,CM,207,ES,40.83333,-2.5 36411,Puebla de Almenara,1205,CM,207,ES,39.7844,-2.81435 36414,Puebla de Beleña,1205,CM,207,ES,40.88794,-3.21624 36416,Puebla de Don Rodrigo,1205,CM,207,ES,39.08564,-4.61966 36430,Puebla del Príncipe,1205,CM,207,ES,38.56766,-2.92605 36431,Puebla del Salvador,1205,CM,207,ES,39.56667,-1.66667 36452,Puerto de San Vicente,1205,CM,207,ES,39.52283,-5.11407 36446,Puerto Lápice,1205,CM,207,ES,39.3236,-3.48148 36457,Puertollano,1205,CM,207,ES,38.68712,-4.10734 36467,Pulgar,1205,CM,207,ES,39.69383,-4.15233 36494,Quer,1205,CM,207,ES,40.60532,-3.2753 36495,Quero,1205,CM,207,ES,39.51111,-3.24741 36511,Quintanar de la Orden,1205,CM,207,ES,39.59369,-3.04165 36513,Quintanar del Rey,1205,CM,207,ES,39.33333,-1.93333 36531,Quismondo,1205,CM,207,ES,40.10533,-4.32394 36538,Rada de Haro,1205,CM,207,ES,39.57002,-2.62086 36556,Rebollosa de Jadraque,1205,CM,207,ES,41.0904,-2.84201 36557,Recas,1205,CM,207,ES,40.05286,-3.9909 36601,Reíllo,1205,CM,207,ES,39.9,-1.86667 36578,Renera,1205,CM,207,ES,40.48976,-3.01367 36586,Retiendas,1205,CM,207,ES,40.96835,-3.27229 36591,Retuerta de Bullaque,1205,CM,207,ES,39.46363,-4.41363 36606,Riba de Saelices,1205,CM,207,ES,40.91145,-2.29715 36623,Rielves,1205,CM,207,ES,39.96206,-4.193 36625,Rillo de Gallo,1205,CM,207,ES,40.86635,-1.9374 36641,Riópar,1205,CM,207,ES,38.5,-2.45 36649,Robledillo de Mohernando,1205,CM,207,ES,40.85118,-3.23162 36653,Robledo,1205,CM,207,ES,38.75807,-2.45042 36655,Robledo de Corpes,1205,CM,207,ES,41.11838,-2.95 36670,Romanillos de Atienza,1205,CM,207,ES,41.26667,-2.9 36671,Romanones,1205,CM,207,ES,40.57149,-2.99072 36685,Rozalén del Monte,1205,CM,207,ES,39.99083,-2.80525 36698,Rueda de la Sierra,1205,CM,207,ES,40.91795,-1.85439 36703,Ruidera,1205,CM,207,ES,38.97775,-2.88321 36727,Sacecorbo,1205,CM,207,ES,40.8328,-2.41838 36728,Saceda-Trasierra,1205,CM,207,ES,40.15525,-2.85369 36729,Sacedón,1205,CM,207,ES,40.48076,-2.73337 36730,Saceruela,1205,CM,207,ES,38.94382,-4.60768 36733,Saelices,1205,CM,207,ES,39.92061,-2.80502 36735,Saelices de la Sal,1205,CM,207,ES,40.90723,-2.32325 36766,Salinas del Manzano,1205,CM,207,ES,40.08333,-1.55 36770,Salmerón,1205,CM,207,ES,40.54529,-2.49315 36773,Salobre,1205,CM,207,ES,38.59297,-2.55038 36780,Salvacañete,1205,CM,207,ES,40.1,-1.5 36802,San Andrés del Congosto,1205,CM,207,ES,40.99775,-3.02423 36804,San Andrés del Rey,1205,CM,207,ES,40.63837,-2.8202 36811,San Bartolomé de las Abiertas,1205,CM,207,ES,39.82972,-4.71901 36813,San Carlos del Valle,1205,CM,207,ES,38.84399,-3.24148 36818,San Clemente,1205,CM,207,ES,39.4041,-2.42819 36857,San Lorenzo de Calatrava,1205,CM,207,ES,38.47681,-3.82605 36860,San Lorenzo de la Parrilla,1205,CM,207,ES,39.85129,-2.36079 36863,San Martín de Boniches,1205,CM,207,ES,39.9,-1.56667 36865,San Martín de Montalbán,1205,CM,207,ES,39.70186,-4.38796 36866,San Martín de Pusa,1205,CM,207,ES,39.78404,-4.63252 36899,San Pedro,1205,CM,207,ES,38.82493,-2.18276 36902,San Pedro Palmiches,1205,CM,207,ES,40.42956,-2.40602 37005,Santa Ana de Pusa,1205,CM,207,ES,39.76238,-4.70904 37042,Santa Cruz de la Zarza,1205,CM,207,ES,39.98104,-3.18787 37043,Santa Cruz de los Cáñamos,1205,CM,207,ES,38.63759,-2.86618 37031,Santa Cruz de Moya,1205,CM,207,ES,39.95,-1.26667 37032,Santa Cruz de Mudela,1205,CM,207,ES,38.64241,-3.4665 37044,Santa Cruz del Retamar,1205,CM,207,ES,40.11917,-4.24158 37086,Santa María del Campo Rus,1205,CM,207,ES,39.55942,-2.42306 37090,Santa María del Val,1205,CM,207,ES,40.50439,-2.04115 37092,Santa Olalla,1205,CM,207,ES,40.02348,-4.43025 37136,Santiuste,1205,CM,207,ES,41.08462,-2.80953 37175,Sartajada,1205,CM,207,ES,40.2132,-4.79427 37184,Saúca,1205,CM,207,ES,41.03098,-2.52905 37183,Sayatón,1205,CM,207,ES,40.37635,-2.85253 37199,Segurilla,1205,CM,207,ES,40.02386,-4.86418 37201,Selas,1205,CM,207,ES,40.9515,-2.10203 37206,Semillas,1205,CM,207,ES,41.05857,-3.11945 37231,Seseña,1205,CM,207,ES,40.10473,-3.69793 37237,Setiles,1205,CM,207,ES,40.73419,-1.6172 37241,Sevilleja de la Jara,1205,CM,207,ES,39.57488,-4.96387 37243,Sienes,1205,CM,207,ES,41.20096,-2.65332 37252,Sigüenza,1205,CM,207,ES,41.06892,-2.64308 37266,Sisante,1205,CM,207,ES,39.40849,-2.20173 37276,Socovos,1205,CM,207,ES,38.33232,-1.98485 37277,Socuéllamos,1205,CM,207,ES,39.28581,-2.79205 37280,Solanillos del Extremo,1205,CM,207,ES,40.75088,-2.69799 37287,Somolinos,1205,CM,207,ES,41.24606,-3.06004 37294,Sonseca,1205,CM,207,ES,39.67747,-3.97448 37315,Sotillo de las Palomas,1205,CM,207,ES,40.10359,-4.82736 37322,Sotodosos,1205,CM,207,ES,40.92149,-2.39211 37358,Talavera de la Reina,1205,CM,207,ES,39.96348,-4.83076 37362,Tamajón,1205,CM,207,ES,40.99914,-3.24743 37371,Taragudo,1205,CM,207,ES,40.82106,-3.0768 37372,Tarancón,1205,CM,207,ES,40.00851,-3.00731 37373,Taravilla,1205,CM,207,ES,40.69743,-1.96817 37376,Tarazona de la Mancha,1205,CM,207,ES,39.25,-1.91667 37384,Tartanedo,1205,CM,207,ES,40.99347,-1.92459 37664,Tébar,1205,CM,207,ES,39.5,-2.16667 37395,Tejadillos,1205,CM,207,ES,40.13333,-1.63333 37401,Tembleque,1205,CM,207,ES,39.69541,-3.50429 37402,Tendilla,1205,CM,207,ES,40.54379,-2.95782 37413,Terrinches,1205,CM,207,ES,38.61057,-2.84215 37416,Terzaga,1205,CM,207,ES,40.69508,-1.90386 37424,Tierzo,1205,CM,207,ES,40.74925,-1.93069 37426,Tinajas,1205,CM,207,ES,40.32547,-2.58228 37436,Tobarra,1205,CM,207,ES,38.59213,-1.69191 37443,Toledo,1205,CM,207,ES,39.8581,-4.02263 37450,Tomelloso,1205,CM,207,ES,39.15759,-3.02156 37456,Tordellego,1205,CM,207,ES,40.72165,-1.67036 37457,Tordelrábano,1205,CM,207,ES,41.21827,-2.75792 37460,Tordesilos,1205,CM,207,ES,40.67074,-1.59372 37465,Torija,1205,CM,207,ES,40.74251,-3.0283 37478,Torralba,1205,CM,207,ES,40.30253,-2.28546 37480,Torralba de Calatrava,1205,CM,207,ES,39.01785,-3.75105 37481,Torralba de Oropesa,1205,CM,207,ES,39.93384,-5.15404 37493,Torre de Juan Abad,1205,CM,207,ES,38.58417,-3.05994 37500,Torre del Burgo,1205,CM,207,ES,40.79176,-3.07723 37517,Torrecilla de la Jara,1205,CM,207,ES,39.70425,-4.77186 37527,Torrecuadrada de Molina,1205,CM,207,ES,40.74947,-1.80707 37528,Torrecuadradilla,1205,CM,207,ES,40.85364,-2.53215 37541,Torrejón del Rey,1205,CM,207,ES,40.64325,-3.33376 37537,Torrejoncillo del Rey,1205,CM,207,ES,40.0084,-2.57107 37556,Torremocha de Jadraque,1205,CM,207,ES,41.01881,-2.89918 37558,Torremocha del Campo,1205,CM,207,ES,40.97819,-2.61881 37559,Torremocha del Pinar,1205,CM,207,ES,40.88954,-2.04497 37560,Torremochuela,1205,CM,207,ES,40.76528,-1.8419 37567,Torrenueva,1205,CM,207,ES,38.6396,-3.36259 37585,Torrico,1205,CM,207,ES,39.82918,-5.22581 37589,Torrijos,1205,CM,207,ES,39.98195,-4.28349 37593,Torrubia,1205,CM,207,ES,40.96581,-1.90064 37595,Torrubia del Campo,1205,CM,207,ES,39.89749,-2.96133 37596,Torrubia del Castillo,1205,CM,207,ES,39.65852,-2.31171 37668,Tórtola de Henares,1205,CM,207,ES,40.70425,-3.12316 37598,Tortuera,1205,CM,207,ES,40.97181,-1.79764 37599,Tortuero,1205,CM,207,ES,40.93414,-3.35024 37607,Totanés,1205,CM,207,ES,39.71057,-4.22655 37631,Tresjuncos,1205,CM,207,ES,39.70087,-2.75502 37635,Tribaldos,1205,CM,207,ES,39.97264,-2.89809 37639,Trijueque,1205,CM,207,ES,40.77426,-2.99253 37640,Trillo,1205,CM,207,ES,40.70086,-2.59265 37655,Turleque,1205,CM,207,ES,39.60138,-3.61404 37671,Uceda,1205,CM,207,ES,40.83944,-3.4604 37673,Uclés,1205,CM,207,ES,39.97938,-2.86143 37674,Ugena,1205,CM,207,ES,40.15572,-3.87603 37676,Ujados,1205,CM,207,ES,41.23526,-3.00482 37713,Uña,1205,CM,207,ES,40.2241,-1.97788 37690,Urda,1205,CM,207,ES,39.41179,-3.71493 37707,Utande,1205,CM,207,ES,40.84832,-2.9277 37727,Valdarachas,1205,CM,207,ES,40.5171,-3.12652 37732,Valdearenas,1205,CM,207,ES,40.80939,-2.99218 37733,Valdeavellano,1205,CM,207,ES,40.6656,-2.96977 37736,Valdeaveruelo,1205,CM,207,ES,40.63473,-3.31367 37741,Valdeconcha,1205,CM,207,ES,40.45643,-2.87663 37748,Valdeganga,1205,CM,207,ES,39.13514,-1.67703 37749,Valdegrudas,1205,CM,207,ES,40.71125,-3.01209 37759,Valdelcubo,1205,CM,207,ES,41.22637,-2.67588 37766,Valdemanco del Esteras,1205,CM,207,ES,38.93858,-4.8292 37768,Valdemeca,1205,CM,207,ES,40.22367,-1.74358 37773,Valdemorillo de la Sierra,1205,CM,207,ES,40.03333,-1.78333 37775,Valdemoro-Sierra,1205,CM,207,ES,40.1,-1.76667 37779,Valdeolivas,1205,CM,207,ES,40.506,-2.44532 37782,Valdepeñas,1205,CM,207,ES,38.76211,-3.38483 37784,Valdepeñas de la Sierra,1205,CM,207,ES,40.90562,-3.38414 37791,Valderrebollo,1205,CM,207,ES,40.81035,-2.72887 37801,Valdesotos,1205,CM,207,ES,40.95546,-3.32542 37806,Valdeverdeja,1205,CM,207,ES,39.79635,-5.24544 37824,Valenzuela de Calatrava,1205,CM,207,ES,38.85254,-3.7721 37827,Valfermoso de Tajuña,1205,CM,207,ES,40.61902,-2.95407 37830,Valhermoso,1205,CM,207,ES,40.7859,-1.96121 37831,Valhermoso de la Fuente,1205,CM,207,ES,39.56667,-2.01667 37869,Valmojado,1205,CM,207,ES,40.20444,-4.09146 37873,Valsalobre,1205,CM,207,ES,40.61742,-2.09297 37876,Valtablado del Río,1205,CM,207,ES,40.7142,-2.40225 37885,Valverde de Júcar,1205,CM,207,ES,39.71866,-2.22135 37892,Valverde de los Arroyos,1205,CM,207,ES,41.1293,-3.23333 37897,Valverdejo,1205,CM,207,ES,39.61667,-2.01667 37899,Vara de Rey,1205,CM,207,ES,39.42595,-2.29404 37914,Vega del Codorno,1205,CM,207,ES,40.42457,-1.91312 37922,Velada,1205,CM,207,ES,39.97687,-4.97641 37934,Vellisca,1205,CM,207,ES,40.12965,-2.81444 37940,Ventas con Peña Aguilera,1205,CM,207,ES,39.61033,-4.23128 37959,Viana de Jadraque,1205,CM,207,ES,41.02577,-2.76966 38008,Villa de Don Fadrique,1205,CM,207,ES,39.61505,-3.21915 38010,Villa de Ves,1205,CM,207,ES,39.2,-1.23333 38028,Villacañas,1205,CM,207,ES,39.62367,-3.33813 38035,Villaconejos de Trabaque,1205,CM,207,ES,40.40064,-2.31956 38061,Villafranca de los Caballeros,1205,CM,207,ES,39.42824,-3.36079 38073,Villagarcía del Llano,1205,CM,207,ES,39.31667,-1.83333 38079,Villagordo del Júcar,1205,CM,207,ES,39.3,-2.06667 38082,Villahermosa,1205,CM,207,ES,38.75023,-2.87066 38098,Villalba de la Sierra,1205,CM,207,ES,40.23437,-2.08929 38103,Villalba del Rey,1205,CM,207,ES,40.34653,-2.63902 38113,Villalgordo del Marquesado,1205,CM,207,ES,39.68245,-2.50885 38121,Villalpardo,1205,CM,207,ES,39.46667,-1.63333 38127,Villamalea,1205,CM,207,ES,39.36667,-1.58333 38130,Villamanrique,1205,CM,207,ES,38.54636,-2.99729 38140,Villamayor de Calatrava,1205,CM,207,ES,38.78763,-4.13774 38144,Villamayor de Santiago,1205,CM,207,ES,39.73072,-2.92357 38155,Villamiel de Toledo,1205,CM,207,ES,39.96482,-4.12627 38157,Villaminaya,1205,CM,207,ES,39.71197,-3.87055 38163,Villamuelas,1205,CM,207,ES,39.81784,-3.73461 38169,Villanueva de Alcardete,1205,CM,207,ES,39.67321,-3.01445 38170,Villanueva de Alcorón,1205,CM,207,ES,40.67956,-2.25145 38173,Villanueva de Argecilla,1205,CM,207,ES,40.90257,-2.91431 38175,Villanueva de Bogas,1205,CM,207,ES,39.72347,-3.65743 38198,Villanueva de la Fuente,1205,CM,207,ES,38.69463,-2.69637 38199,Villanueva de la Jara,1205,CM,207,ES,39.43333,-1.93333 38203,Villanueva de la Torre,1205,CM,207,ES,40.58216,-3.29764 38188,Villanueva de San Carlos,1205,CM,207,ES,38.62173,-3.90903 38229,Villapalacios,1205,CM,207,ES,38.575,-2.63384 38235,Villar de Cañas,1205,CM,207,ES,39.7786,-2.56428 38238,Villar de Domingo García,1205,CM,207,ES,40.23732,-2.29136 38247,Villar de la Encina,1205,CM,207,ES,39.63725,-2.52155 38241,Villar de Olalla,1205,CM,207,ES,40.01496,-2.19561 38255,Villar del Humo,1205,CM,207,ES,39.86667,-1.63333 38256,Villar del Infantado,1205,CM,207,ES,40.45514,-2.47905 38259,Villar del Pozo,1205,CM,207,ES,38.8501,-3.96405 38271,Villarejo de Fuentes,1205,CM,207,ES,39.78809,-2.6968 38274,Villarejo de la Peñuela,1205,CM,207,ES,40.08745,-2.40996 38272,Villarejo de Montalbán,1205,CM,207,ES,39.76913,-4.57314 38277,Villarejo-Periesteban,1205,CM,207,ES,39.87231,-2.44145 38278,Villares de Jadraque,1205,CM,207,ES,41.10169,-3.02558 38282,Villares del Saz,1205,CM,207,ES,39.84109,-2.50427 38296,Villarrobledo,1205,CM,207,ES,39.26992,-2.60119 38303,Villarrubia de los Ojos,1205,CM,207,ES,39.22085,-3.60802 38302,Villarrubia de Santiago,1205,CM,207,ES,39.98555,-3.36898 38304,Villarrubio,1205,CM,207,ES,39.94511,-2.89431 38306,Villarta,1205,CM,207,ES,39.45,-1.65 38307,Villarta de San Juan,1205,CM,207,ES,39.23785,-3.42333 38319,Villaseca de Henares,1205,CM,207,ES,40.9606,-2.79775 38321,Villaseca de la Sagra,1205,CM,207,ES,39.96185,-3.88291 38320,Villaseca de Uceda,1205,CM,207,ES,40.81827,-3.34904 38325,Villasequilla de Yepes,1205,CM,207,ES,39.87582,-3.7311 38330,Villatobas,1205,CM,207,ES,39.90187,-3.32386 38332,Villatoya,1205,CM,207,ES,39.33333,-1.3 38338,Villavaliente,1205,CM,207,ES,39.12646,-1.45712 38344,Villaverde de Guadalimar,1205,CM,207,ES,38.45525,-2.51782 38351,Villaverde y Pasaconsol,1205,CM,207,ES,39.77099,-2.26552 38368,Villel de Mesa,1205,CM,207,ES,41.12616,-1.99072 38392,Vindel,1205,CM,207,ES,40.58743,-2.3806 38411,Viñuelas,1205,CM,207,ES,40.79229,-3.34036 38398,Viso del Marqués,1205,CM,207,ES,38.52208,-3.56348 38406,Viveros,1205,CM,207,ES,38.7726,-2.57449 38428,Yebes,1205,CM,207,ES,40.53162,-3.10782 38429,Yebra,1205,CM,207,ES,40.35702,-2.9663 38444,Yélamos de Abajo,1205,CM,207,ES,40.63092,-2.85803 38445,Yélamos de Arriba,1205,CM,207,ES,40.64008,-2.8434 38433,Yeles,1205,CM,207,ES,40.12035,-3.80487 38446,Yémeda,1205,CM,207,ES,39.76667,-1.71667 38435,Yepes,1205,CM,207,ES,39.90199,-3.62517 38438,Yeste,1205,CM,207,ES,38.36852,-2.31756 38439,Yuncler,1205,CM,207,ES,40.04079,-3.89979 38440,Yuncos,1205,CM,207,ES,40.0859,-3.87106 38442,Yunquera de Henares,1205,CM,207,ES,40.75139,-3.1626 38451,Zafra de Záncara,1205,CM,207,ES,39.89203,-2.55786 38452,Zafrilla,1205,CM,207,ES,40.2,-1.61667 38467,Zaorejas,1205,CM,207,ES,40.76209,-2.2012 38480,Zarza de Tajo,1205,CM,207,ES,40.01591,-3.12877 38484,Zarzuela,1205,CM,207,ES,40.25902,-2.11034 38485,Zarzuela de Jadraque,1205,CM,207,ES,41.06838,-3.04436 38497,Zorita de los Canes,1205,CM,207,ES,40.33052,-2.88764 31917,Abrera,1203,CT,207,ES,41.51682,1.901 38571,Àger,1203,CT,207,ES,42.0,0.76667 31948,Agramunt,1203,CT,207,ES,41.78686,1.09683 31963,Aguilar de Segarra,1203,CT,207,ES,41.74822,1.62919 31967,Agullana,1203,CT,207,ES,42.39408,2.84666 31980,Aiguafreda,1203,CT,207,ES,41.76807,2.25051 31981,Aiguaviva,1203,CT,207,ES,41.9384,2.76217 31983,Aitona,1203,CT,207,ES,41.48333,0.46667 32345,Alàs i Cerc,1203,CT,207,ES,42.35,1.51667 32043,Albesa,1203,CT,207,ES,41.75282,0.65936 32050,Albons,1203,CT,207,ES,42.10389,3.08433 32083,Alcanar,1203,CT,207,ES,40.54316,0.48082 32086,Alcanó,1203,CT,207,ES,41.48064,0.61659 32089,Alcarràs,1203,CT,207,ES,41.56667,0.51667 32110,Alcoletge,1203,CT,207,ES,41.64762,0.69383 32122,Alcover,1203,CT,207,ES,41.26267,1.1701 32183,Alella,1203,CT,207,ES,41.49379,2.29451 32201,Alfarràs,1203,CT,207,ES,41.81667,0.58333 32207,Alfés,1203,CT,207,ES,41.52143,0.6205 32204,Alforja,1203,CT,207,ES,41.21108,0.97542 32218,Algerri,1203,CT,207,ES,41.81482,0.63633 32228,Alguaire,1203,CT,207,ES,41.73703,0.5845 32250,Alió,1203,CT,207,ES,41.29422,1.30585 32259,Almacelles,1203,CT,207,ES,41.73216,0.43722 32280,Almenar,1203,CT,207,ES,41.79604,0.56834 32308,Almoster,1203,CT,207,ES,41.19758,1.11167 32328,Alpens,1203,CT,207,ES,42.1193,2.10135 32331,Alpicat,1203,CT,207,ES,41.6657,0.55564 32338,Altafulla,1203,CT,207,ES,41.14286,1.37269 32358,Amposta,1203,CT,207,ES,40.70995,0.57856 32379,Anglès,1203,CT,207,ES,41.95617,2.63603 32378,Anglesola,1203,CT,207,ES,41.65649,1.08286 32422,Arbeca,1203,CT,207,ES,41.54153,0.92457 32427,Arbúcies,1203,CT,207,ES,41.81667,2.51667 32451,Arenys de Mar,1203,CT,207,ES,41.5819,2.54936 32452,Arenys de Munt,1203,CT,207,ES,41.61424,2.53972 32468,Argelaguer,1203,CT,207,ES,42.21563,2.64193 32471,Argentona,1203,CT,207,ES,41.55336,2.40114 32527,Artés,1203,CT,207,ES,41.798,1.95428 32524,Artesa de Segre,1203,CT,207,ES,41.89467,1.04625 32534,Ascó,1203,CT,207,ES,41.18333,0.56667 32535,Aspa,1203,CT,207,ES,41.49472,0.67277 32568,Avinyó,1203,CT,207,ES,41.86367,1.97095 32602,Badalona,1203,CT,207,ES,41.45004,2.24741 32609,Bagà,1203,CT,207,ES,42.25289,1.86098 32619,Balaguer,1203,CT,207,ES,41.79117,0.81094 32628,Balsareny,1203,CT,207,ES,41.86311,1.87356 32634,Banyoles,1203,CT,207,ES,42.11667,2.76667 32647,Barberà del Vallès,1203,CT,207,ES,41.5159,2.12457 32653,Barcelona,1203,CT,207,ES,41.38879,2.15899 32686,Baró de Viver,1203,CT,207,ES,41.44584,2.19902 32675,Barri de les Corts,1203,CT,207,ES,41.38697,2.13472 32674,Barri de Sant Andreu,1203,CT,207,ES,41.43693,2.19022 32673,Barri Gòtic,1203,CT,207,ES,41.38364,2.17628 33047,Bàscara,1203,CT,207,ES,42.15998,2.91028 32693,Batea,1203,CT,207,ES,41.09434,0.311 32728,Begues,1203,CT,207,ES,41.33333,1.93333 32729,Begur,1203,CT,207,ES,41.95,3.21667 32740,Bellcaire dUrgell,1203,CT,207,ES,41.75,0.91667 32742,Bellprat,1203,CT,207,ES,41.51695,1.43333 32743,Bellpuig,1203,CT,207,ES,41.62595,1.01144 32745,Bellver de Cerdanya,1203,CT,207,ES,42.36667,1.78333 32746,Bellvís,1203,CT,207,ES,41.67269,0.81768 32803,Benifallet,1203,CT,207,ES,40.97422,0.51767 32846,Berga,1203,CT,207,ES,42.10429,1.84628 32877,Besalú,1203,CT,207,ES,42.19893,2.69953 32878,Bescanó,1203,CT,207,ES,41.96603,2.73922 32883,Beuda,1203,CT,207,ES,42.23722,2.70942 32893,Bigues i Riells,1203,CT,207,ES,41.68333,2.23333 32906,Blancafort,1203,CT,207,ES,41.4374,1.15983 32909,Blanes,1203,CT,207,ES,41.67419,2.79036 32942,Bolvir,1203,CT,207,ES,42.41775,1.87986 32945,Bonastre,1203,CT,207,ES,41.22031,1.43936 32952,Bordils,1203,CT,207,ES,42.04336,2.91088 32960,Borrassà,1203,CT,207,ES,42.22316,2.9261 32963,Bot,1203,CT,207,ES,41.00916,0.38392 32964,Botarell,1203,CT,207,ES,41.13627,0.98919 32976,Breda,1203,CT,207,ES,41.74833,2.55964 33066,Cabanelles,1203,CT,207,ES,42.23068,2.81997 33104,Cabrera de Mar,1203,CT,207,ES,41.51667,2.4 33111,Cabrils,1203,CT,207,ES,41.5276,2.36996 33116,Cadaqués,1203,CT,207,ES,42.28856,3.27706 33124,Calaf,1203,CT,207,ES,41.73289,1.51375 33125,Calafell,1203,CT,207,ES,41.19997,1.5683 33138,Caldes de Montbui,1203,CT,207,ES,41.63333,2.16667 33139,Calella,1203,CT,207,ES,41.61381,2.65423 33150,Calonge,1203,CT,207,ES,41.85869,3.07926 33163,Camarasa,1203,CT,207,ES,41.87486,0.87814 33177,Cambrils,1203,CT,207,ES,41.06997,1.05949 33215,Camós,1203,CT,207,ES,42.08776,2.76288 33185,Campdevànol,1203,CT,207,ES,42.22445,2.1686 33198,Campins,1203,CT,207,ES,41.71667,2.46667 33213,Camprodon,1203,CT,207,ES,42.31185,2.36506 33216,Can Baró,1203,CT,207,ES,41.41677,2.16242 33218,Can Peguera,1203,CT,207,ES,41.43487,2.16646 33234,Canet de Mar,1203,CT,207,ES,41.59054,2.58116 33246,Canovelles,1203,CT,207,ES,41.61667,2.28333 33890,Cànoves i Samalús,1203,CT,207,ES,41.68333,2.35 33252,Cantallops,1203,CT,207,ES,42.42216,2.92524 33261,Canyelles,1203,CT,207,ES,41.44509,2.16346 33262,Capafonts,1203,CT,207,ES,41.3,1.03333 33267,Capellades,1203,CT,207,ES,41.53005,1.68651 33271,Capmany,1203,CT,207,ES,42.37351,2.92026 33296,Cardedeu,1203,CT,207,ES,41.63976,2.35739 33304,Cardona,1203,CT,207,ES,41.91371,1.67855 33395,Cassà de la Selva,1203,CT,207,ES,41.88784,2.87524 33413,Castell-Platja dAro,1203,CT,207,ES,41.81751,3.06742 33422,Castellar del Vallès,1203,CT,207,ES,41.61667,2.08333 33423,Castellbisbal,1203,CT,207,ES,41.47534,1.98174 33424,Castellcir,1203,CT,207,ES,41.76074,2.16128 33425,Castelldefels,1203,CT,207,ES,41.27794,1.97033 33426,Castellet,1203,CT,207,ES,41.26281,1.63369 33427,Castellfollit de Riubregós,1203,CT,207,ES,41.76667,1.43333 33429,Castellnou de Seana,1203,CT,207,ES,41.64802,0.97093 33436,Castelló dEmpúries,1203,CT,207,ES,42.25673,3.07446 33431,Castellolí,1203,CT,207,ES,41.59829,1.70057 33434,Castellserà,1203,CT,207,ES,41.75,1.0 33435,Castellví de Rosanes,1203,CT,207,ES,41.45,1.9 33566,Celrà,1203,CT,207,ES,42.03333,2.88333 33573,Centelles,1203,CT,207,ES,41.79746,2.21902 33580,Cerdanyola del Vallès,1203,CT,207,ES,41.49109,2.14079 33594,Cervelló,1203,CT,207,ES,41.39587,1.95917 33595,Cervera,1203,CT,207,ES,41.67003,1.2721 33605,Cervià de Ter,1203,CT,207,ES,42.0665,2.90743 33692,Cistella,1203,CT,207,ES,42.2687,2.8478 33700,Ciutadilla,1203,CT,207,ES,41.56113,1.13935 33701,Ciutat Meridiana,1203,CT,207,ES,41.46119,2.17494 33702,Ciutat Vella,1203,CT,207,ES,41.38022,2.17319 33726,Colera,1203,CT,207,ES,42.40394,3.15153 33730,Coll de Nargó,1203,CT,207,ES,42.17473,1.31694 33738,Collbató,1203,CT,207,ES,41.57009,1.82712 33739,Colldejou,1203,CT,207,ES,41.0997,0.88717 33740,Collsuspina,1203,CT,207,ES,41.8258,2.17546 33750,Coma-ruga,1203,CT,207,ES,41.17995,1.52538 33756,Conesa,1203,CT,207,ES,41.51667,1.3 33766,Constantí,1203,CT,207,ES,41.15392,1.21262 33775,Corbera de Llobregat,1203,CT,207,ES,41.41702,1.9197 33777,Corbins,1203,CT,207,ES,41.68333,0.7 33794,Cornellà de Llobregat,1203,CT,207,ES,41.35,2.08333 33795,Cornellà del Terri,1203,CT,207,ES,42.08333,2.81667 33832,Creixell,1203,CT,207,ES,41.16618,1.44032 33833,Crespià,1203,CT,207,ES,42.18333,2.8 33840,Cruïlles,1203,CT,207,ES,41.95,3.01667 33847,Cubelles,1203,CT,207,ES,41.20772,1.67267 33848,Cubells,1203,CT,207,ES,41.85062,0.959 33884,Cunit,1203,CT,207,ES,41.19829,1.63645 33912,Darnius,1203,CT,207,ES,42.36667,2.83333 33925,Deltebre,1203,CT,207,ES,40.71944,0.70835 33932,Diagonal Mar,1203,CT,207,ES,41.40897,2.21615 33952,Dosrius,1203,CT,207,ES,41.58333,2.41667 33957,Dreta de lEixample,1203,CT,207,ES,41.39606,2.16688 33973,Eixample,1203,CT,207,ES,41.38896,2.16179 38514,el Baix Guinardó,1203,CT,207,ES,41.41175,2.16784 38515,el Besòs i el Maresme,1203,CT,207,ES,41.41309,2.21736 38516,el Bon Pastor,1203,CT,207,ES,41.437,2.20182 38517,el Camp den Grassot i Gràcia Nova,1203,CT,207,ES,41.40634,2.16503 38518,el Camp de lArpa del Clot,1203,CT,207,ES,41.41204,2.18247 33985,El Carmel,1203,CT,207,ES,41.41758,2.15914 38519,el Catllar,1203,CT,207,ES,41.16667,1.31667 38520,el Clot,1203,CT,207,ES,41.40986,2.19053 38521,el Cogul,1203,CT,207,ES,41.46667,0.68333 38522,el Coll,1203,CT,207,ES,41.41721,2.14723 38523,el Congrés i els Indians,1203,CT,207,ES,41.4246,2.18086 38524,el Guinardó,1203,CT,207,ES,41.41885,2.17364 34001,El Masnou,1203,CT,207,ES,41.47978,2.3188 38525,el Masroig,1203,CT,207,ES,41.13333,0.73333 38526,el Parc i la Llacuna del Poblenou,1203,CT,207,ES,41.3986,2.1903 34007,El Perelló,1203,CT,207,ES,40.87431,0.71125 34008,El Pla de Santa Maria,1203,CT,207,ES,41.36336,1.29152 38527,el Poblenou,1203,CT,207,ES,41.40392,2.20413 34010,El Prat de Llobregat,1203,CT,207,ES,41.32784,2.09472 38528,el Putxet i el Farró,1203,CT,207,ES,41.40693,2.14392 38529,el Raval,1203,CT,207,ES,41.38042,2.1686 38531,el Turó de la Peira,1203,CT,207,ES,41.43232,2.16895 34025,El Vendrell,1203,CT,207,ES,41.21667,1.53333 38578,Éller,1203,CT,207,ES,42.41636,1.79223 38532,els Pallaresos,1203,CT,207,ES,41.17491,1.2709 34043,Empuriabrava,1203,CT,207,ES,42.24691,3.12059 34108,Esparreguera,1203,CT,207,ES,41.53809,1.87025 34127,Esplugues de Llobregat,1203,CT,207,ES,41.37732,2.08809 34129,Espolla,1203,CT,207,ES,42.3912,3.00064 34130,Esponellà,1203,CT,207,ES,42.16667,2.8 34132,Espot,1203,CT,207,ES,42.57838,1.08666 34159,Falset,1203,CT,207,ES,41.14576,0.81979 34166,Farrera,1203,CT,207,ES,42.49654,1.27216 34183,Figaró,1203,CT,207,ES,41.72122,2.27297 34184,Figueres,1203,CT,207,ES,42.26645,2.96163 34195,Flix,1203,CT,207,ES,41.23074,0.55008 34199,Foixà,1203,CT,207,ES,42.03626,3.00021 34209,Fonollosa,1203,CT,207,ES,41.76303,1.66867 34233,Forès,1203,CT,207,ES,41.48333,1.23333 34225,Fornells de la Selva,1203,CT,207,ES,41.93159,2.80907 34227,Fort Pienc,1203,CT,207,ES,41.39458,2.17946 34230,Fortià,1203,CT,207,ES,42.2432,3.03881 34364,Fulleda,1203,CT,207,ES,41.46334,1.02395 34392,Gallifa,1203,CT,207,ES,41.69243,2.11346 34402,Gandesa,1203,CT,207,ES,41.05375,0.4385 34408,Garcia,1203,CT,207,ES,41.13333,0.65 34425,Garrigàs,1203,CT,207,ES,42.19343,2.95438 34424,Garriguella,1203,CT,207,ES,42.34392,3.06506 34441,Gavà,1203,CT,207,ES,41.30605,2.00123 34446,Gelida,1203,CT,207,ES,41.43333,1.86667 34468,Ginestar,1203,CT,207,ES,41.04184,0.6329 34470,Girona,1203,CT,207,ES,41.98311,2.82493 34471,Gironella,1203,CT,207,ES,42.03433,1.88019 34479,Golmés,1203,CT,207,ES,41.63354,0.93125 34565,Gósol,1203,CT,207,ES,42.23697,1.6601 34517,Gràcia,1203,CT,207,ES,41.40237,2.15641 34499,Granera,1203,CT,207,ES,41.72741,2.05924 34503,Granollers,1203,CT,207,ES,41.60797,2.28773 34534,Gualta,1203,CT,207,ES,42.02953,3.10312 34549,Guimerà,1203,CT,207,ES,41.5645,1.18528 34553,Gurb,1203,CT,207,ES,41.95419,2.23537 34665,Horta,1203,CT,207,ES,41.43628,2.15725 34666,Horta-Guinardó,1203,CT,207,ES,41.41849,2.1677 34670,Hostafrancs,1203,CT,207,ES,41.37694,2.14306 34671,Hostalric,1203,CT,207,ES,41.75,2.63333 34739,Igualada,1203,CT,207,ES,41.58098,1.6172 34777,Ivorra,1203,CT,207,ES,41.76667,1.4 34790,Jafre,1203,CT,207,ES,42.07254,3.01062 34821,Jorba,1203,CT,207,ES,41.60193,1.5475 34827,Juià,1203,CT,207,ES,42.01667,2.91667 34831,Juncosa,1203,CT,207,ES,41.37033,0.7765 34832,Juneda,1203,CT,207,ES,41.54847,0.82451 34843,LAmetlla del Vallès,1203,CT,207,ES,41.66667,2.26667 34844,LAmpolla,1203,CT,207,ES,40.81235,0.71008 38536,lAntiga Esquerra de lEixample,1203,CT,207,ES,41.38939,2.15517 38537,lEscala,1203,CT,207,ES,42.12562,3.13261 38538,lEstartit,1203,CT,207,ES,42.0534,3.19767 34846,LHospitalet de Llobregat,1203,CT,207,ES,41.35967,2.10028 38539,la Barceloneta,1203,CT,207,ES,41.3799,2.18971 38540,la Bisbal dEmpordà,1203,CT,207,ES,41.95,3.05 34857,La Bonanova,1203,CT,207,ES,41.40585,2.13243 34858,La Bordeta,1203,CT,207,ES,41.37397,2.14377 34863,La Canonja,1203,CT,207,ES,41.1211,1.18065 38541,la Cellera de Ter,1203,CT,207,ES,41.96919,2.62402 38542,la Fatarella,1203,CT,207,ES,41.16667,0.48333 38543,la Font den Fargues,1203,CT,207,ES,41.42461,2.16526 38544,la Font de la Guatlla,1203,CT,207,ES,41.36978,2.14486 34874,La Fuliola,1203,CT,207,ES,41.71358,1.01746 38545,la Garriga,1203,CT,207,ES,41.68333,2.28333 34879,La Granada,1203,CT,207,ES,41.37816,1.71902 38546,la Granadella,1203,CT,207,ES,41.35,0.66667 38547,la Granja dEscarp,1203,CT,207,ES,41.41667,0.36667 38548,la Guineueta,1203,CT,207,ES,41.43884,2.16893 34890,La Llagosta,1203,CT,207,ES,41.51435,2.19297 38549,la Marina de Port,1203,CT,207,ES,41.36,2.13986 38550,la Marina del Prat Vermell,1203,CT,207,ES,41.33937,2.14262 38551,la Maternitat i Sant Ramon,1203,CT,207,ES,41.38125,2.11744 38552,la Morera de Montsant,1203,CT,207,ES,41.26529,0.84157 38553,la Nova Esquerra de lEixample,1203,CT,207,ES,41.38309,2.149 34903,La Pineda,1203,CT,207,ES,41.07625,1.18515 34905,La Pobla de Claramunt,1203,CT,207,ES,41.55423,1.67712 38555,la Pobla de Mafumet,1203,CT,207,ES,41.18333,1.21667 38556,la Prosperitat,1203,CT,207,ES,41.44269,2.182 34920,La Roca del Vallès,1203,CT,207,ES,41.58333,2.33333 34924,La Sagrera,1203,CT,207,ES,41.42271,2.18589 38557,la Salut,1203,CT,207,ES,41.41243,2.15437 34926,La Secuita,1203,CT,207,ES,41.2046,1.27996 34927,La Selva del Camp,1203,CT,207,ES,41.21484,1.13883 34928,La Seu dUrgell,1203,CT,207,ES,42.35877,1.46144 38558,la Teixonera,1203,CT,207,ES,41.42307,2.14654 38559,la Trinitat Nova,1203,CT,207,ES,41.45051,2.18481 38560,la Trinitat Vella,1203,CT,207,ES,41.45166,2.19289 38561,la Vall dHebron,1203,CT,207,ES,41.43038,2.1483 38562,la Verneda i la Pau,1203,CT,207,ES,41.42399,2.20304 38564,la Vila de Gràcia,1203,CT,207,ES,41.40315,2.15687 38563,la Vila Olímpica del Poblenou,1203,CT,207,ES,41.39074,2.19679 34994,Las Tres Torres,1203,CT,207,ES,41.39989,2.12931 35034,Les,1203,CT,207,ES,42.81076,0.7105 38565,les Borges del Camp,1203,CT,207,ES,41.16667,1.01667 35035,Les Cases dAlcanar,1203,CT,207,ES,40.55359,0.53022 35036,Les Corts,1203,CT,207,ES,41.38712,2.13007 38566,les Llosses,1203,CT,207,ES,42.15,2.11667 38567,les Planes dHostoles,1203,CT,207,ES,42.05669,2.54093 38568,les Roquetes,1203,CT,207,ES,41.44809,2.17519 35056,Linyola,1203,CT,207,ES,41.7,0.91667 35063,Lladó,1203,CT,207,ES,42.24769,2.81373 35064,Llagostera,1203,CT,207,ES,41.82688,2.89365 35066,Llambilles,1203,CT,207,ES,41.92106,2.85078 35070,Llançà,1203,CT,207,ES,42.36241,3.15213 35073,Llefià,1203,CT,207,ES,41.43806,2.2195 35074,Lleida,1203,CT,207,ES,41.61674,0.62218 35077,Llers,1203,CT,207,ES,42.29571,2.91183 35078,Lles de Cerdanya,1203,CT,207,ES,42.39025,1.68692 35081,Lliçà dAmunt,1203,CT,207,ES,41.61667,2.23333 35079,Llimiana,1203,CT,207,ES,42.07476,0.91621 35080,Llinars del Vallès,1203,CT,207,ES,41.63333,2.4 35084,Lloret de Mar,1203,CT,207,ES,41.69993,2.84565 35185,Madremanya,1203,CT,207,ES,41.98333,2.96667 35223,Malgrat de Mar,1203,CT,207,ES,41.64662,2.74135 35254,Manlleu,1203,CT,207,ES,42.00228,2.28476 35256,Manresa,1203,CT,207,ES,41.72815,1.82399 35288,Margalef,1203,CT,207,ES,41.28496,0.75331 35301,Martorell,1203,CT,207,ES,41.47402,1.93062 35315,Mas de Barberans,1203,CT,207,ES,40.73333,0.36667 35319,Masdenverge,1203,CT,207,ES,40.716,0.53009 35325,Masquefa,1203,CT,207,ES,41.50353,1.81136 35327,Massanes,1203,CT,207,ES,41.76536,2.65324 35332,Matadepera,1203,CT,207,ES,41.59886,2.02648 35340,Mataró,1203,CT,207,ES,41.54211,2.4445 35376,Mediona,1203,CT,207,ES,41.47798,1.61222 35444,Miralcamp,1203,CT,207,ES,41.60516,0.87987 35454,Miravet,1203,CT,207,ES,41.0393,0.59665 35472,Moià,1203,CT,207,ES,41.81112,2.09839 35484,Molins de Rei,1203,CT,207,ES,41.41667,2.01667 35486,Mollerussa,1203,CT,207,ES,41.63333,0.9 35487,Mollet de Peralada,1203,CT,207,ES,42.35959,3.00034 35488,Mollet del Vallès,1203,CT,207,ES,41.54026,2.21306 35517,Monistrol de Montserrat,1203,CT,207,ES,41.61667,1.85 35528,Mont-roig del Camp,1203,CT,207,ES,41.08675,0.95925 35538,Montbau,1203,CT,207,ES,41.43529,2.13781 35539,Montblanc,1203,CT,207,ES,41.37636,1.16163 35540,Montcada i Reixac,1203,CT,207,ES,41.48333,2.18333 35572,Montferri,1203,CT,207,ES,41.26545,1.36517 35573,Montgat,1203,CT,207,ES,41.46859,2.28001 35580,Montmeló,1203,CT,207,ES,41.55002,2.2419 35582,Montornès del Vallès,1203,CT,207,ES,41.54206,2.26748 35668,Mura,1203,CT,207,ES,41.69943,1.97612 35765,Navarcles,1203,CT,207,ES,41.75171,1.90357 35776,Navas,1203,CT,207,ES,41.41803,2.18596 35786,Navata,1203,CT,207,ES,42.22353,2.8611 35825,Nou Barris,1203,CT,207,ES,41.44163,2.17727 38581,Òdena,1203,CT,207,ES,41.6,1.65 35878,Olesa de Bonesvalls,1203,CT,207,ES,41.35435,1.84907 35879,Olesa de Montserrat,1203,CT,207,ES,41.54372,1.89407 35880,Oliana,1203,CT,207,ES,42.06895,1.31353 35883,Olius,1203,CT,207,ES,42.01035,1.5646 35891,Olivella,1203,CT,207,ES,41.31667,1.81667 35911,Olost,1203,CT,207,ES,41.9854,2.09457 35912,Olot,1203,CT,207,ES,42.18096,2.49012 35940,Ordis,1203,CT,207,ES,42.2183,2.90705 35966,Orís,1203,CT,207,ES,42.05967,2.22066 35953,Oristà,1203,CT,207,ES,41.93333,2.06667 35960,Orpí,1203,CT,207,ES,41.5187,1.57536 38582,Òrrius,1203,CT,207,ES,41.55,2.35 35968,Os de Balaguer,1203,CT,207,ES,41.87314,0.72017 35974,Ossó de Sió,1203,CT,207,ES,41.75485,1.159 36014,Palafrugell,1203,CT,207,ES,41.91738,3.1631 36015,Palamós,1203,CT,207,ES,41.84843,3.12912 36017,Palau-sator,1203,CT,207,ES,41.98897,3.11016 36026,Pallejà,1203,CT,207,ES,41.42394,1.99505 36034,Palol de Revardit,1203,CT,207,ES,42.06667,2.8 36042,Pals,1203,CT,207,ES,41.97102,3.14814 36069,Parets del Vallès,1203,CT,207,ES,41.57481,2.23306 36083,Pau,1203,CT,207,ES,42.31607,3.11621 36091,Pedralbes,1203,CT,207,ES,41.39046,2.11019 36186,Piera,1203,CT,207,ES,41.52232,1.75076 36197,Pineda de Mar,1203,CT,207,ES,41.62763,2.6889 36235,Planoles,1203,CT,207,ES,42.31667,2.1 36253,Poble Sec,1203,CT,207,ES,41.37452,2.16326 36260,Polinyà,1203,CT,207,ES,41.55,2.15 36271,Pont de Molins,1203,CT,207,ES,42.3144,2.92996 36274,Pontils,1203,CT,207,ES,41.47734,1.38772 36276,Pontós,1203,CT,207,ES,42.18665,2.91706 36275,Ponts,1203,CT,207,ES,41.91607,1.18515 36284,Porta,1203,CT,207,ES,41.4349,2.17883 36287,Portbou,1203,CT,207,ES,42.4265,3.15805 36350,Premià de Mar,1203,CT,207,ES,41.49206,2.36524 36357,Provenals del Poblenou,1203,CT,207,ES,41.41109,2.2026 36395,Província de Barcelona,1203,CT,207,ES,41.66667,2.0 36397,Província de Girona,1203,CT,207,ES,41.98916,2.81113 36398,Província de Lleida,1203,CT,207,ES,41.61878,0.57472 36399,Província de Tarragona,1203,CT,207,ES,41.12902,1.24901 36462,Puigcerdà,1203,CT,207,ES,42.4316,1.92819 36463,Puigpelat,1203,CT,207,ES,41.27899,1.29713 36465,Pujalt,1203,CT,207,ES,41.7171,1.42088 36489,Quart d’Onyar,1203,CT,207,ES,41.94047,2.84079 36496,Querol,1203,CT,207,ES,41.42293,1.39684 36537,Rabós,1203,CT,207,ES,42.3789,3.02828 36543,Rajadell,1203,CT,207,ES,41.72802,1.70621 36549,Rasquera,1203,CT,207,ES,41.00267,0.59967 36564,Regencós,1203,CT,207,ES,41.95271,3.17006 36576,Renau,1203,CT,207,ES,41.22448,1.31083 36592,Reus,1203,CT,207,ES,41.15612,1.10687 36617,Ribes de Freser,1203,CT,207,ES,42.30417,2.16757 36632,Ripoll,1203,CT,207,ES,42.20064,2.19033 36633,Ripollet,1203,CT,207,ES,41.49686,2.15739 36634,Riudecanyes,1203,CT,207,ES,41.13333,0.96667 36635,Riudecols,1203,CT,207,ES,41.169,0.97625 36636,Riudellots de la Selva,1203,CT,207,ES,41.89327,2.80452 36637,Riudoms,1203,CT,207,ES,41.13333,1.05 36638,Riumors,1203,CT,207,ES,42.22726,3.0419 36661,Roda de Barà,1203,CT,207,ES,41.18645,1.45893 36679,Roses,1203,CT,207,ES,42.26199,3.17689 36694,Rubí,1203,CT,207,ES,41.49226,2.03305 36704,Rupià,1203,CT,207,ES,42.01667,3.01667 36721,SAgaró,1203,CT,207,ES,41.79368,3.05364 36722,Sabadell,1203,CT,207,ES,41.54329,2.10942 36740,Sagàs,1203,CT,207,ES,42.05,1.96667 36738,Sagrada Família,1203,CT,207,ES,41.40408,2.17332 36760,Sales de Llierca,1203,CT,207,ES,42.23333,2.65 36768,Sallent,1203,CT,207,ES,41.82602,1.8955 36775,Salomó,1203,CT,207,ES,41.22955,1.37445 36777,Salou,1203,CT,207,ES,41.07663,1.14163 36778,Salt,1203,CT,207,ES,41.97489,2.79281 36951,Sant Adrià de Besòs,1203,CT,207,ES,41.43073,2.21855 36952,Sant Andreu,1203,CT,207,ES,41.43541,2.18982 36955,Sant Andreu de la Barca,1203,CT,207,ES,41.44659,1.97187 36954,Sant Andreu de Llavaneres,1203,CT,207,ES,41.56667,2.48333 36953,Sant Andreu Salou,1203,CT,207,ES,41.86667,2.83333 36956,Sant Antoni,1203,CT,207,ES,41.37857,2.15937 36958,Sant Boi de Llobregat,1203,CT,207,ES,41.34357,2.03659 36959,Sant Carles de la Ràpita,1203,CT,207,ES,40.61667,0.6 36960,Sant Celoni,1203,CT,207,ES,41.68921,2.48965 36961,Sant Cristòfol de les Fonts,1203,CT,207,ES,42.16964,2.49943 36962,Sant Cugat del Vallès,1203,CT,207,ES,41.47063,2.08611 36963,Sant Esteve den Bas,1203,CT,207,ES,42.11809,2.45682 36964,Sant Feliu de Guíxols,1203,CT,207,ES,41.78333,3.03333 36965,Sant Feliu de Llobregat,1203,CT,207,ES,41.38333,2.05 36966,Sant Ferriol,1203,CT,207,ES,42.2,2.66667 36968,Sant Genís dels Agudells,1203,CT,207,ES,41.42541,2.13019 36969,Sant Gervasi - Galvany,1203,CT,207,ES,41.3975,2.14301 36970,Sant Hilari Sacalm,1203,CT,207,ES,41.88333,2.51667 36976,Sant Joan de les Abadesses,1203,CT,207,ES,42.23332,2.28524 36974,Sant Joan de Mediona,1203,CT,207,ES,41.47862,1.61164 36975,Sant Joan de Vilatorrada,1203,CT,207,ES,41.74549,1.80476 36972,Sant Joan Despí,1203,CT,207,ES,41.36718,2.0574 36977,Sant Joan les Fonts,1203,CT,207,ES,42.21186,2.51291 36979,Sant Jordi Desvalls,1203,CT,207,ES,42.06667,2.95 36981,Sant Julià de Cerdanyola,1203,CT,207,ES,42.2235,1.89308 36982,Sant Just Desvern,1203,CT,207,ES,41.38389,2.06758 36985,Sant Martí,1203,CT,207,ES,41.41814,2.19933 36988,Sant Martí de Centelles,1203,CT,207,ES,41.76617,2.20566 36989,Sant Martí de Provençals,1203,CT,207,ES,41.4202,2.19632 36990,Sant Martí de Tous,1203,CT,207,ES,41.55,1.51667 36986,Sant Martí Sarroca,1203,CT,207,ES,41.38576,1.61121 36987,Sant Martí Vell,1203,CT,207,ES,42.01667,2.93333 36991,Sant Miquel de Campmajor,1203,CT,207,ES,42.13333,2.68333 36993,Sant Pere de Ribes,1203,CT,207,ES,41.26045,1.77391 36994,Sant Pere de Riudebitlles,1203,CT,207,ES,41.45,1.7 36992,Sant Pere Pescador,1203,CT,207,ES,42.18812,3.08212 36995,Sant Pere Santa Caterina i La Ribera,1203,CT,207,ES,41.3845,2.18152 36996,Sant Pol de Mar,1203,CT,207,ES,41.60177,2.61741 36997,Sant Quirze del Vallès,1203,CT,207,ES,41.53333,2.08333 36998,Sant Sadurní dAnoia,1203,CT,207,ES,41.42555,1.78519 36999,Sant Salvador de Guardiola,1203,CT,207,ES,41.68333,1.76667 37000,Sant Vicenç de Castellet,1203,CT,207,ES,41.66667,1.86667 37001,Sant Vicenç de Montalt,1203,CT,207,ES,41.57853,2.50879 37002,Sant Vicenç dels Horts,1203,CT,207,ES,41.39317,2.00689 37008,Santa Bárbara,1203,CT,207,ES,40.71542,0.49292 37012,Santa Cecília de Voltregà,1203,CT,207,ES,42.0,2.23333 37015,Santa Coloma de Cervelló,1203,CT,207,ES,41.36736,2.01426 37016,Santa Coloma de Farners,1203,CT,207,ES,41.86667,2.66667 37017,Santa Coloma de Gramenet,1203,CT,207,ES,41.45152,2.2081 37022,Santa Cristina dAro,1203,CT,207,ES,41.81667,3.0 37053,Santa Eugènia de Berga,1203,CT,207,ES,41.9,2.28333 37057,Santa Eulàlia de Ronçana,1203,CT,207,ES,41.65,2.23333 37065,Santa Maria dOló,1203,CT,207,ES,41.86667,2.03333 37066,Santa Maria de Corcó,1203,CT,207,ES,42.03333,2.36667 37067,Santa Maria de Palautordera,1203,CT,207,ES,41.69417,2.44566 37095,Santa Oliva,1203,CT,207,ES,41.25357,1.55086 37096,Santa Pau,1203,CT,207,ES,42.1443,2.57123 37097,Santa Perpètua de Mogoda,1203,CT,207,ES,41.53333,2.18333 37100,Santa Susanna,1203,CT,207,ES,41.63333,2.71667 37151,Sants,1203,CT,207,ES,41.37426,2.13826 37152,Sants - Badal,1203,CT,207,ES,41.37471,2.12775 37153,Sants-Montjuïc,1203,CT,207,ES,41.37263,2.1546 37170,Sarrià,1203,CT,207,ES,41.40269,2.1162 37171,Sarrià de Ter,1203,CT,207,ES,42.01667,2.83333 37172,Sarrià-Sant Gervasi,1203,CT,207,ES,41.40104,2.1394 37212,Sentmenat,1203,CT,207,ES,41.60862,2.13532 37227,Seròs,1203,CT,207,ES,41.46667,0.41667 37219,Serra de Daró,1203,CT,207,ES,42.02877,3.07222 37238,Seva,1203,CT,207,ES,41.83831,2.28007 37242,Sidamon,1203,CT,207,ES,41.63333,0.83333 37257,Sils,1203,CT,207,ES,41.80842,2.74507 37267,Sitges,1203,CT,207,ES,41.23506,1.81193 37268,Siurana,1203,CT,207,ES,42.20916,2.99392 37285,Solsona,1203,CT,207,ES,41.99395,1.51706 37304,Sort,1203,CT,207,ES,42.41319,1.13045 37308,Soses,1203,CT,207,ES,41.53333,0.48333 37328,Subirats,1203,CT,207,ES,41.4,1.83333 37338,Súria,1203,CT,207,ES,41.83333,1.75 37334,Susqueda,1203,CT,207,ES,41.97776,2.51652 37349,Tagamanent,1203,CT,207,ES,41.73747,2.2672 37353,Talamanca,1203,CT,207,ES,41.7374,1.97791 37370,Taradell,1203,CT,207,ES,41.87495,2.28662 37383,Tarragona,1203,CT,207,ES,41.11667,1.25 37661,Tàrrega,1203,CT,207,ES,41.64704,1.13957 37388,Tavertet,1203,CT,207,ES,41.99572,2.41859 37393,Teià,1203,CT,207,ES,41.49804,2.32206 37665,Térmens,1203,CT,207,ES,41.71667,0.76667 37409,Terrassa,1203,CT,207,ES,41.56667,2.01667 37419,Tiana,1203,CT,207,ES,41.48201,2.26702 37432,Tiurana,1203,CT,207,ES,41.97527,1.25608 37433,Tivenys,1203,CT,207,ES,40.90787,0.51236 37446,Toloriu,1203,CT,207,ES,42.3621,1.62761 37452,Tona,1203,CT,207,ES,41.84789,2.22808 37600,Torà de Riubregós,1203,CT,207,ES,41.81667,1.4 37458,Tordera,1203,CT,207,ES,41.69914,2.71888 37463,Torelló,1203,CT,207,ES,42.04627,2.26679 37472,Tornabous,1203,CT,207,ES,41.70117,1.05384 37488,Torre Baró,1203,CT,207,ES,41.4549,2.17418 37529,Torredembarra,1203,CT,207,ES,41.14505,1.39861 37531,Torrefarrera,1203,CT,207,ES,41.67318,0.60671 37549,Torrelles de Llobregat,1203,CT,207,ES,41.35,1.98333 37565,Torrent,1203,CT,207,ES,41.95243,3.12684 37576,Torres de Segre,1203,CT,207,ES,41.53399,0.5142 37590,Torroella de Fluvià,1203,CT,207,ES,42.17522,3.04025 37591,Torroella de Montgrí,1203,CT,207,ES,42.04254,3.12703 37597,Tortosa,1203,CT,207,ES,40.81249,0.5216 37604,Tossa de Mar,1203,CT,207,ES,41.71667,2.93333 37628,Tremp,1203,CT,207,ES,42.16703,0.89487 37683,Ullà,1203,CT,207,ES,42.04964,3.10754 37680,Ullastrell,1203,CT,207,ES,41.52643,1.95537 37681,Ulldecona,1203,CT,207,ES,40.59734,0.44718 37682,Ulldemolins,1203,CT,207,ES,41.32216,0.8765 37684,Ultramort,1203,CT,207,ES,42.0364,3.03455 37702,Urús,1203,CT,207,ES,42.35131,1.85343 37839,Vallbona,1203,CT,207,ES,41.46341,2.18417 37840,Vallbona de les Monges,1203,CT,207,ES,41.52631,1.08872 37841,Vallcarca,1203,CT,207,ES,41.41209,2.14394 37842,Vallclara,1203,CT,207,ES,41.37958,0.98342 37858,Vallfogona de Balaguer,1203,CT,207,ES,41.75211,0.81385 37859,Vallgorguina,1203,CT,207,ES,41.64822,2.50996 37861,Vallirana,1203,CT,207,ES,41.38676,1.93205 37862,Vallmoll,1203,CT,207,ES,41.24311,1.249 37863,Valls,1203,CT,207,ES,41.28612,1.24993 37865,Vallvidrera el Tibidabo i les Planes,1203,CT,207,ES,41.4197,2.08911 37939,Ventalló,1203,CT,207,ES,42.14921,3.02635 37950,Verdú,1203,CT,207,ES,41.61057,1.14284 37949,Verdun,1203,CT,207,ES,41.44273,2.17564 37953,Verges,1203,CT,207,ES,42.06283,3.04579 37962,Vic,1203,CT,207,ES,41.93012,2.25486 37967,Vidrà,1203,CT,207,ES,42.12285,2.30977 37966,Vidreres,1203,CT,207,ES,41.78333,2.78333 37968,Vielha,1203,CT,207,ES,42.70196,0.79556 37973,Vila-seca,1203,CT,207,ES,41.11118,1.14764 37974,Vilabella,1203,CT,207,ES,41.24779,1.33019 37975,Vilabertran,1203,CT,207,ES,42.28255,2.98144 37976,Vilablareix,1203,CT,207,ES,41.95746,2.77377 37977,Viladasens,1203,CT,207,ES,42.08333,2.93333 37978,Viladecans,1203,CT,207,ES,41.31405,2.01427 37979,Vilademuls,1203,CT,207,ES,42.1389,2.88819 37980,Viladrau,1203,CT,207,ES,41.84746,2.39019 37981,Vilafant,1203,CT,207,ES,42.24668,2.9382 37984,Vilafranca del Penedès,1203,CT,207,ES,41.34618,1.69713 37986,Vilajuïga,1203,CT,207,ES,42.32533,3.09302 37988,Vilamacolum,1203,CT,207,ES,42.19618,3.05662 37989,Vilamalla,1203,CT,207,ES,42.2172,2.97009 37990,Vilamaniscle,1203,CT,207,ES,42.37522,3.06755 37992,Vilanant,1203,CT,207,ES,42.25471,2.88923 37993,Vilanova dEscornalbou,1203,CT,207,ES,41.11667,0.93333 37995,Vilanova de Bellpuig,1203,CT,207,ES,41.61379,0.96432 37996,Vilanova de Prades,1203,CT,207,ES,41.3485,0.95667 37997,Vilanova de Sau,1203,CT,207,ES,41.947,2.3844 37998,Vilanova del Camí,1203,CT,207,ES,41.57165,1.63751 37999,Vilanova i la Geltrú,1203,CT,207,ES,41.22392,1.72511 38000,Vilapicina i la Torre Llobeta,1203,CT,207,ES,41.42861,2.1741 38001,Vilaplana,1203,CT,207,ES,41.228,1.03325 38003,Vilaseca,1203,CT,207,ES,42.06174,2.25528 38004,Vilassar de Mar,1203,CT,207,ES,41.50507,2.39227 38382,Vilopriu,1203,CT,207,ES,42.1,3.0 38387,Vimbodí,1203,CT,207,ES,41.40069,1.05056 38389,Vinaixa,1203,CT,207,ES,41.43333,0.98333 38393,Vinebre,1203,CT,207,ES,41.18464,0.58945 32829,Benzú,1206,CE,207,ES,35.91653,-5.37293 33609,Ceuta,1206,CE,207,ES,35.88919,-5.32042 31900,Abadía,1190,EX,207,ES,40.25922,-5.97828 31910,Abertura,1190,EX,207,ES,39.24352,-5.81394 31923,Acebo,1190,EX,207,ES,40.20105,-6.71689 31924,Acedera,1190,EX,207,ES,39.07678,-5.57384 31925,Aceituna,1190,EX,207,ES,40.15008,-6.33292 31926,Aceuchal,1190,EX,207,ES,38.64627,-6.48636 31974,Ahigal,1190,EX,207,ES,40.18954,-6.18815 31977,Ahillones,1190,EX,207,ES,38.26667,-5.85 31999,Alange,1190,EX,207,ES,38.78495,-6.24574 32027,Albalá,1190,EX,207,ES,39.25592,-6.18528 32059,Alburquerque,1190,EX,207,ES,39.22076,-7.00234 32135,Alcántara,1190,EX,207,ES,39.71895,-6.88375 32111,Alcollarín,1190,EX,207,ES,39.2447,-5.73924 32115,Alconchel,1190,EX,207,ES,38.51648,-7.07161 32118,Alconera,1190,EX,207,ES,38.4,-6.46667 32132,Alcuéscar,1190,EX,207,ES,39.18091,-6.22917 32143,Aldea del Cano,1190,EX,207,ES,39.28874,-6.31806 32147,Aldeacentenera,1190,EX,207,ES,39.52725,-5.62936 32164,Aldeanueva de la Vera,1190,EX,207,ES,40.1271,-5.7015 32165,Aldeanueva del Camino,1190,EX,207,ES,40.2598,-5.92886 32347,Alía,1190,EX,207,ES,39.44803,-5.21754 32248,Aliseda,1190,EX,207,ES,39.42329,-6.69228 32252,Aljucén,1190,EX,207,ES,39.04425,-6.33109 32268,Almaraz,1190,EX,207,ES,39.81416,-5.67698 32286,Almendral,1190,EX,207,ES,38.61418,-6.82097 32288,Almendralejo,1190,EX,207,ES,38.68316,-6.40747 32299,Almoharín,1190,EX,207,ES,39.17685,-6.04283 32510,Arroyo de la Luz,1190,EX,207,ES,39.48511,-6.58401 32508,Arroyo de San Serván,1190,EX,207,ES,38.85443,-6.45402 32515,Arroyomolinos de la Vera,1190,EX,207,ES,40.05277,-5.85111 32544,Atalaya,1190,EX,207,ES,38.33333,-6.46667 32588,Azuaga,1190,EX,207,ES,38.26667,-5.68333 32601,Badajoz,1190,EX,207,ES,38.87789,-6.97061 32704,Baños de Montemayor,1190,EX,207,ES,40.31671,-5.86009 32652,Barcarrota,1190,EX,207,ES,38.51473,-6.84923 32670,Barrado,1190,EX,207,ES,40.08477,-5.88068 32694,Baterno,1190,EX,207,ES,38.95578,-4.91039 32826,Benquerencia,1190,EX,207,ES,39.30994,-6.08465 32854,Berlanga,1190,EX,207,ES,38.28333,-5.81667 32871,Berrocalejo,1190,EX,207,ES,39.81948,-5.34951 32890,Bienvenida,1190,EX,207,ES,38.3,-6.2 32927,Bodonal de la Sierra,1190,EX,207,ES,38.14751,-6.5595 32931,Bohonal de Ibor,1190,EX,207,ES,39.78457,-5.485 32965,Botija,1190,EX,207,ES,39.34498,-6.07318 32993,Brozas,1190,EX,207,ES,39.61278,-6.7777 33029,Burguillos del Cerro,1190,EX,207,ES,38.38008,-6.59037 33075,Cabañas del Castillo,1190,EX,207,ES,39.54804,-5.51203 33077,Cabeza del Buey,1190,EX,207,ES,38.72227,-5.21946 33079,Cabeza la Vaca,1190,EX,207,ES,38.08333,-6.41667 33080,Cabezabellosa,1190,EX,207,ES,40.13763,-6.00086 33089,Cabezuela del Valle,1190,EX,207,ES,40.19364,-5.8065 33106,Cabrero,1190,EX,207,ES,40.11324,-5.89293 33892,Cáceres,1190,EX,207,ES,39.47649,-6.37224 33113,Cachorrilla,1190,EX,207,ES,39.91557,-6.66909 33114,Cadalso,1190,EX,207,ES,40.23743,-6.54083 33129,Calamonte,1190,EX,207,ES,38.88861,-6.38791 33140,Calera de León,1190,EX,207,ES,38.1,-6.33333 33161,Calzadilla,1190,EX,207,ES,40.06014,-6.53328 33178,Caminomorisco,1190,EX,207,ES,40.32719,-6.28923 33181,Campanario,1190,EX,207,ES,38.8644,-5.61744 33191,Campillo de Deleitosa,1190,EX,207,ES,39.70297,-5.57436 33193,Campillo de Llerena,1190,EX,207,ES,38.50196,-5.83139 33533,Cañamero,1190,EX,207,ES,39.37995,-5.38857 33535,Cañaveral,1190,EX,207,ES,39.79198,-6.3913 33269,Capilla,1190,EX,207,ES,38.82037,-5.08417 33280,Carbajo,1190,EX,207,ES,39.60333,-7.19565 33289,Carcaboso,1190,EX,207,ES,40.04968,-6.21375 33311,Carmonita,1190,EX,207,ES,39.15455,-6.33864 33320,Carrascalejo,1190,EX,207,ES,39.63333,-5.21667 33346,Casar de Cáceres,1190,EX,207,ES,39.56106,-6.41944 33347,Casar de Palomero,1190,EX,207,ES,40.29483,-6.25698 33351,Casares de las Hurdes,1190,EX,207,ES,40.43333,-6.28333 33359,Casas de Don Antonio,1190,EX,207,ES,39.23578,-6.29143 33360,Casas de Don Gómez,1190,EX,207,ES,40.00932,-6.60073 33361,Casas de Don Pedro,1190,EX,207,ES,39.10822,-5.33077 33368,Casas de Millán,1190,EX,207,ES,39.81757,-6.32966 33369,Casas de Miravete,1190,EX,207,ES,39.72687,-5.74363 33370,Casas de Reina,1190,EX,207,ES,38.2,-5.96667 33374,Casas del Castañar,1190,EX,207,ES,40.10785,-5.90509 33375,Casas del Monte,1190,EX,207,ES,40.2032,-5.96152 33381,Casatejada,1190,EX,207,ES,39.88642,-5.68193 33389,Casillas de Coria,1190,EX,207,ES,39.96543,-6.63711 33397,Castañar de Ibor,1190,EX,207,ES,39.62843,-5.41709 33446,Castilblanco,1190,EX,207,ES,39.28487,-5.09098 33512,Castuera,1190,EX,207,ES,38.73204,-5.5439 33553,Ceclavín,1190,EX,207,ES,39.82231,-6.77329 33555,Cedillo,1190,EX,207,ES,39.65099,-7.49817 33587,Cerezo,1190,EX,207,ES,40.23678,-6.22764 33622,Cheles,1190,EX,207,ES,38.51225,-7.28177 33667,Cilleros,1190,EX,207,ES,40.11486,-6.79256 33731,Collado,1190,EX,207,ES,40.05729,-5.72052 33763,Conquista de la Sierra,1190,EX,207,ES,39.3507,-5.73464 33780,Cordobilla de Lácara,1190,EX,207,ES,39.14763,-6.43619 33789,Coria,1190,EX,207,ES,39.98406,-6.53603 33805,Corte de Peleas,1190,EX,207,ES,38.72631,-6.67035 33836,Cristina,1190,EX,207,ES,38.83745,-6.09867 33923,Deleitosa,1190,EX,207,ES,39.64359,-5.64576 33928,Descargamaría,1190,EX,207,ES,40.30446,-6.48666 33942,Don Álvaro,1190,EX,207,ES,38.84837,-6.27475 33941,Don Benito,1190,EX,207,ES,38.95627,-5.86162 33988,El Casar,1190,EX,207,ES,38.53089,-5.92513 34037,Eljas,1190,EX,207,ES,40.21648,-6.84616 34064,Entrín Bajo,1190,EX,207,ES,38.71855,-6.71349 34092,Escurial,1190,EX,207,ES,39.16857,-5.88465 34105,Esparragalejo,1190,EX,207,ES,38.9433,-6.43549 34107,Esparragosa de la Serena,1190,EX,207,ES,38.651,-5.60657 34106,Esparragosa de Lares,1190,EX,207,ES,38.97517,-5.26968 34173,Feria,1190,EX,207,ES,38.51151,-6.56416 34242,Fregenal de la Sierra,1190,EX,207,ES,38.16922,-6.6537 34251,Fresnedoso de Ibor,1190,EX,207,ES,39.68418,-5.50899 34284,Fuenlabrada de los Montes,1190,EX,207,ES,39.13288,-4.93513 34295,Fuente de Cantos,1190,EX,207,ES,38.25,-6.3 34299,Fuente del Maestre,1190,EX,207,ES,38.52656,-6.44782 34345,Fuentes de León,1190,EX,207,ES,38.06866,-6.53884 34385,Galisteo,1190,EX,207,ES,39.97642,-6.26782 34407,Garbayuela,1190,EX,207,ES,39.04956,-4.99856 34417,Garganta la Olla,1190,EX,207,ES,40.11049,-5.77665 34418,Gargantilla,1190,EX,207,ES,40.24835,-5.92068 34419,Gargüera,1190,EX,207,ES,40.0613,-5.92781 34420,Garlitos,1190,EX,207,ES,38.88022,-5.04759 34426,Garrovillas,1190,EX,207,ES,39.71082,-6.55034 34428,Garvín,1190,EX,207,ES,39.71984,-5.34678 34434,Gata,1190,EX,207,ES,40.23758,-6.59684 34502,Granja de Torrehermosa,1190,EX,207,ES,38.31667,-5.58333 34526,Guadalupe,1190,EX,207,ES,39.4508,-5.32588 34537,Guareña,1190,EX,207,ES,38.85952,-6.09987 34542,Guijo de Coria,1190,EX,207,ES,40.10098,-6.46383 34543,Guijo de Galisteo,1190,EX,207,ES,40.09383,-6.41007 34544,Guijo de Granadilla,1190,EX,207,ES,40.19351,-6.16339 34545,Guijo de Santa Bárbara,1190,EX,207,ES,40.1541,-5.65414 34582,Herguijuela,1190,EX,207,ES,39.37452,-5.76001 34591,Hernán-Pérez,1190,EX,207,ES,40.21246,-6.46479 34594,Herrera de Alcántara,1190,EX,207,ES,39.63865,-7.40619 34599,Herrera del Duque,1190,EX,207,ES,39.1684,-5.05049 34604,Hervás,1190,EX,207,ES,40.27081,-5.86721 34607,Higuera,1190,EX,207,ES,39.72551,-5.66692 34611,Higuera de la Serena,1190,EX,207,ES,38.64616,-5.74129 34610,Higuera de Vargas,1190,EX,207,ES,38.447,-6.97517 34614,Higuera la Real,1190,EX,207,ES,38.14088,-6.68922 34619,Hinojal,1190,EX,207,ES,39.709,-6.35567 34628,Hinojosa del Valle,1190,EX,207,ES,38.48333,-6.18333 34631,Holguera,1190,EX,207,ES,39.89916,-6.34999 34659,Hornachos,1190,EX,207,ES,38.55428,-6.06829 34677,Hoyos,1190,EX,207,ES,40.17154,-6.72092 34707,Huélaga,1190,EX,207,ES,40.05582,-6.61568 34723,Ibahernando,1190,EX,207,ES,39.32538,-5.91833 34798,Jaraicejo,1190,EX,207,ES,39.66624,-5.81308 34802,Jaraíz de la Vera,1190,EX,207,ES,40.06005,-5.75426 34801,Jarandilla de la Vera,1190,EX,207,ES,40.12915,-5.66079 34813,Jerez de los Caballeros,1190,EX,207,ES,38.32063,-6.7726 34814,Jerte,1190,EX,207,ES,40.22271,-5.75011 34852,La Albuera,1190,EX,207,ES,38.71779,-6.82326 34867,La Codosera,1190,EX,207,ES,39.20878,-7.1733 34868,La Coronada,1190,EX,207,ES,38.92045,-5.66978 34870,La Cumbre,1190,EX,207,ES,39.4046,-5.97635 34876,La Garrovilla,1190,EX,207,ES,38.91961,-6.47747 34883,La Haba,1190,EX,207,ES,38.91929,-5.80034 34896,La Nava de Santiago,1190,EX,207,ES,39.06328,-6.50525 34900,La Parra,1190,EX,207,ES,38.5212,-6.6226 34902,La Pesga,1190,EX,207,ES,40.3263,-6.17603 34919,La Roca de la Sierra,1190,EX,207,ES,39.10966,-6.68916 34938,Ladrillar,1190,EX,207,ES,40.46576,-6.22427 35075,Llera,1190,EX,207,ES,38.45,-6.05 35076,Llerena,1190,EX,207,ES,38.23333,-6.01667 35097,Lobón,1190,EX,207,ES,38.84876,-6.62365 35100,Logrosán,1190,EX,207,ES,39.33641,-5.49281 35133,Los Santos de Maimona,1190,EX,207,ES,38.45,-6.38333 35141,Losar de la Vera,1190,EX,207,ES,40.12158,-5.60454 35189,Madrigal de la Vera,1190,EX,207,ES,40.1476,-5.36818 35192,Madrigalejo,1190,EX,207,ES,39.13858,-5.6274 35196,Madroñera,1190,EX,207,ES,39.42526,-5.75568 35199,Magacela,1190,EX,207,ES,38.89648,-5.73437 35204,Maguilla,1190,EX,207,ES,38.36667,-5.83333 35215,Majadas,1190,EX,207,ES,39.94291,-5.74589 35221,Malcocinado,1190,EX,207,ES,38.11667,-5.68333 35227,Malpartida de Cáceres,1190,EX,207,ES,39.44664,-6.5076 35229,Malpartida de la Serena,1190,EX,207,ES,38.6747,-5.64054 35228,Malpartida de Plasencia,1190,EX,207,ES,39.97962,-6.04609 35243,Manchita,1190,EX,207,ES,38.81404,-6.02041 35282,Marchagaz,1190,EX,207,ES,40.26769,-6.27485 35329,Mata de Alcántara,1190,EX,207,ES,39.71738,-6.81825 35367,Medellín,1190,EX,207,ES,38.96265,-5.95785 35372,Medina de las Torres,1190,EX,207,ES,38.33333,-6.4 35403,Mengabril,1190,EX,207,ES,38.93554,-5.93335 35707,Mérida,1190,EX,207,ES,38.91611,-6.34366 35408,Mesas de Ibor,1190,EX,207,ES,39.75587,-5.54637 35416,Miajadas,1190,EX,207,ES,39.15127,-5.90841 35431,Millanes,1190,EX,207,ES,39.84917,-5.58079 35440,Mirabel,1190,EX,207,ES,39.8623,-6.23274 35452,Mirandilla,1190,EX,207,ES,39.002,-6.28893 35509,Monesterio,1190,EX,207,ES,38.08333,-6.26667 35588,Montánchez,1190,EX,207,ES,39.22548,-6.14914 35549,Montehermoso,1190,EX,207,ES,40.08796,-6.34984 35561,Montemolín,1190,EX,207,ES,38.15,-6.2 35568,Monterrubio de la Serena,1190,EX,207,ES,38.58876,-5.44569 35576,Montijo,1190,EX,207,ES,38.90839,-6.61785 35601,Moraleja,1190,EX,207,ES,40.06682,-6.65983 35622,Morcillo,1190,EX,207,ES,40.01884,-6.39746 35732,Navaconcejo,1190,EX,207,ES,40.17712,-5.83108 35752,Navalmoral de la Mata,1190,EX,207,ES,39.89158,-5.54064 35760,Navalvillar de Ibor,1190,EX,207,ES,39.58389,-5.41328 35761,Navalvillar de Pela,1190,EX,207,ES,39.09436,-5.4681 35782,Navas del Madroño,1190,EX,207,ES,39.6229,-6.6526 35789,Navezuelas,1190,EX,207,ES,39.50918,-5.43766 35816,Nogales,1190,EX,207,ES,38.58629,-6.74901 35841,Nuñomoral,1190,EX,207,ES,40.40692,-6.24636 35887,Oliva de la Frontera,1190,EX,207,ES,38.27595,-6.91873 35885,Oliva de Mérida,1190,EX,207,ES,38.79051,-6.12402 35886,Oliva de Plasencia,1190,EX,207,ES,40.11227,-6.08648 35892,Olivenza,1190,EX,207,ES,38.68269,-7.10046 35943,Orellana la Vieja,1190,EX,207,ES,39.00617,-5.53441 36038,Palomas,1190,EX,207,ES,38.69277,-6.1349 36040,Palomero,1190,EX,207,ES,40.24688,-6.27706 36113,Pedroso de Acim,1190,EX,207,ES,39.82522,-6.41251 36167,Peñalsordo,1190,EX,207,ES,38.82019,-5.11405 36133,Peraleda de la Mata,1190,EX,207,ES,39.85288,-5.46065 36132,Peraleda de San Román,1190,EX,207,ES,39.7413,-5.38726 36141,Perales del Puerto,1190,EX,207,ES,40.15596,-6.68192 36154,Pescueza,1190,EX,207,ES,39.91807,-6.64589 36184,Piedras Albas,1190,EX,207,ES,39.78417,-6.92588 36210,Pinofranqueado,1190,EX,207,ES,40.30351,-6.33181 36216,Piornal,1190,EX,207,ES,40.11731,-5.84787 36236,Plasencia,1190,EX,207,ES,40.03116,-6.08845 36238,Plasenzuela,1190,EX,207,ES,39.38194,-6.04786 36285,Portaje,1190,EX,207,ES,39.91757,-6.56218 36289,Portezuelo,1190,EX,207,ES,39.81233,-6.47433 36335,Pozuelo de Zarzón,1190,EX,207,ES,40.14805,-6.41458 36363,Provincia de Badajoz,1190,EX,207,ES,38.66667,-6.16667 36368,Provincia de Cáceres,1190,EX,207,ES,39.52205,-6.37482 36409,Puebla de Alcocer,1190,EX,207,ES,38.98648,-5.25633 36426,Puebla de la Calzada,1190,EX,207,ES,38.89441,-6.62592 36427,Puebla de la Reina,1190,EX,207,ES,38.66455,-6.10216 36419,Puebla de Obando,1190,EX,207,ES,39.1763,-6.62764 36424,Puebla de Sancho Pérez,1190,EX,207,ES,38.4,-6.4 36428,Puebla del Maestre,1190,EX,207,ES,38.08333,-6.08333 36429,Puebla del Prior,1190,EX,207,ES,38.57032,-6.19584 36453,Puerto de Santa Cruz,1190,EX,207,ES,39.31631,-5.85875 36502,Quintana de la Serena,1190,EX,207,ES,38.74595,-5.67233 36567,Reina,1190,EX,207,ES,38.18333,-5.95 36575,Rena,1190,EX,207,ES,39.05252,-5.80868 36615,Ribera del Fresno,1190,EX,207,ES,38.55177,-6.23768 36717,Ríolobos,1190,EX,207,ES,39.92074,-6.30397 36648,Robledillo de Gata,1190,EX,207,ES,40.32234,-6.47129 36652,Robledillo de la Vera,1190,EX,207,ES,40.10093,-5.58896 36650,Robledillo de Trujillo,1190,EX,207,ES,39.26956,-5.98001 36656,Robledollano,1190,EX,207,ES,39.60962,-5.50855 36669,Romangordo,1190,EX,207,ES,39.74199,-5.70081 36677,Rosalejo,1190,EX,207,ES,39.4366,-4.90821 36687,Ruanes,1190,EX,207,ES,39.32814,-6.01347 36776,Salorino,1190,EX,207,ES,39.48018,-7.00758 36783,Salvaleón,1190,EX,207,ES,38.5102,-6.78627 36788,Salvatierra de los Barros,1190,EX,207,ES,38.49091,-6.68423 36786,Salvatierra de Santiago,1190,EX,207,ES,39.30363,-6.03206 36868,San Martín de Trevejo,1190,EX,207,ES,40.21241,-6.79535 36907,San Pedro de Mérida,1190,EX,207,ES,38.95007,-6.18645 36926,San Vicente de Alcántara,1190,EX,207,ES,39.36132,-7.13766 37003,Santa Amalia,1190,EX,207,ES,39.01118,-6.01158 37004,Santa Ana,1190,EX,207,ES,39.30823,-5.99027 37041,Santa Cruz de la Sierra,1190,EX,207,ES,39.33635,-5.84561 37034,Santa Cruz de Paniagua,1190,EX,207,ES,40.19167,-6.34003 37069,Santa Marta,1190,EX,207,ES,38.61421,-6.62799 37070,Santa Marta de Magasca,1190,EX,207,ES,39.5115,-6.09881 37117,Santiago del Campo,1190,EX,207,ES,39.6284,-6.36362 37128,Santibáñez el Alto,1190,EX,207,ES,40.18525,-6.54782 37129,Santibáñez el Bajo,1190,EX,207,ES,40.17637,-6.22441 37177,Saucedilla,1190,EX,207,ES,39.85284,-5.67781 37195,Segura de León,1190,EX,207,ES,38.11667,-6.51667 37196,Segura de Toro,1190,EX,207,ES,40.22427,-5.94836 37221,Serradilla,1190,EX,207,ES,39.8292,-6.14034 37226,Serrejón,1190,EX,207,ES,39.81735,-5.80263 37244,Sierra de Fuentes,1190,EX,207,ES,39.43997,-6.27242 37264,Siruela,1190,EX,207,ES,38.97718,-5.04969 37279,Solana de los Barros,1190,EX,207,ES,38.72527,-6.53899 37356,Talarrubias,1190,EX,207,ES,39.03697,-5.23423 37359,Talaván,1190,EX,207,ES,39.71715,-6.28146 37357,Talavera La Real,1190,EX,207,ES,38.87794,-6.76856 37360,Talayuela,1190,EX,207,ES,39.98701,-5.60982 37663,Táliga,1190,EX,207,ES,38.52861,-7.01713 37367,Tamurejo,1190,EX,207,ES,38.98333,-4.93333 37398,Tejeda de Tiétar,1190,EX,207,ES,40.0179,-5.86953 37466,Toril,1190,EX,207,ES,39.89749,-5.7795 37474,Tornavacas,1190,EX,207,ES,40.25498,-5.68876 37491,Torre de Don Miguel,1190,EX,207,ES,40.22333,-6.57686 37494,Torre de Miguel Sesmero,1190,EX,207,ES,38.61913,-6.7958 37496,Torre de Santa María,1190,EX,207,ES,39.25441,-6.1161 37520,Torrecilla de los Ángeles,1190,EX,207,ES,40.24788,-6.41606 37526,Torrecillas de la Tiesa,1190,EX,207,ES,39.56837,-5.74238 37542,Torrejón el Rubio,1190,EX,207,ES,39.77068,-6.0126 37536,Torrejoncillo,1190,EX,207,ES,39.89675,-6.46712 37552,Torremayor,1190,EX,207,ES,38.9014,-6.53858 37553,Torremegía,1190,EX,207,ES,38.79037,-6.3767 37554,Torremenga,1190,EX,207,ES,40.04658,-5.77471 37555,Torremocha,1190,EX,207,ES,39.34565,-6.17335 37568,Torreorgaz,1190,EX,207,ES,39.3831,-6.24941 37570,Torrequemada,1190,EX,207,ES,39.36664,-6.22052 37619,Trasierra,1190,EX,207,ES,38.18333,-6.0 37644,Trujillanos,1190,EX,207,ES,38.95233,-6.25759 37645,Trujillo,1190,EX,207,ES,39.45786,-5.88203 37703,Usagre,1190,EX,207,ES,38.35,-6.16667 37728,Valdastillas,1190,EX,207,ES,40.13293,-5.87932 37737,Valdecaballeros,1190,EX,207,ES,39.24289,-5.19 37740,Valdecañas de Tajo,1190,EX,207,ES,39.75919,-5.61951 37745,Valdefuentes,1190,EX,207,ES,39.27433,-6.12183 37752,Valdehúncar,1190,EX,207,ES,39.83659,-5.52307 37753,Valdelacalzada,1190,EX,207,ES,38.88943,-6.70029 37755,Valdelacasa de Tajo,1190,EX,207,ES,39.72588,-5.28296 37771,Valdemorales,1190,EX,207,ES,39.20588,-6.06622 37778,Valdeobispo,1190,EX,207,ES,40.08297,-6.24757 37803,Valdetorres,1190,EX,207,ES,38.91542,-6.06765 37817,Valencia de Alcántara,1190,EX,207,ES,39.41148,-7.24435 37819,Valencia de las Torres,1190,EX,207,ES,38.40518,-6.00403 37820,Valencia del Mombuey,1190,EX,207,ES,38.24243,-7.11965 37821,Valencia del Ventoso,1190,EX,207,ES,38.26667,-6.46667 37848,Valle de la Serena,1190,EX,207,ES,38.7101,-5.79847 37845,Valle de Matamoros,1190,EX,207,ES,38.37889,-6.80371 37846,Valle de Santa Ana,1190,EX,207,ES,38.36637,-6.7886 37883,Valverde de Burguillos,1190,EX,207,ES,38.3271,-6.53648 37890,Valverde de la Vera,1190,EX,207,ES,40.12268,-5.49541 37886,Valverde de Leganés,1190,EX,207,ES,38.67059,-6.98036 37887,Valverde de Llerena,1190,EX,207,ES,38.21667,-5.81667 37888,Valverde de Mérida,1190,EX,207,ES,38.91122,-6.21999 37894,Valverde del Fresno,1190,EX,207,ES,40.2221,-6.87848 37960,Viandar de la Vera,1190,EX,207,ES,40.12191,-5.53593 38011,Villa del Campo,1190,EX,207,ES,40.14223,-6.42679 38013,Villa del Rey,1190,EX,207,ES,39.65955,-6.82122 38060,Villafranca de los Barros,1190,EX,207,ES,38.56144,-6.3381 38072,Villagarcía de la Torre,1190,EX,207,ES,38.3,-6.08333 38076,Villagonzalo,1190,EX,207,ES,38.86329,-6.19665 38100,Villalba de los Barros,1190,EX,207,ES,38.61294,-6.50914 38153,Villamesías,1190,EX,207,ES,39.24568,-5.87307 38154,Villamiel,1190,EX,207,ES,40.18635,-6.78425 38201,Villanueva de la Serena,1190,EX,207,ES,38.97655,-5.7974 38202,Villanueva de la Sierra,1190,EX,207,ES,40.20163,-6.40611 38204,Villanueva de la Vera,1190,EX,207,ES,40.12998,-5.4625 38218,Villanueva del Fresno,1190,EX,207,ES,38.376,-7.16753 38243,Villar de Plasencia,1190,EX,207,ES,40.13773,-6.0279 38244,Villar de Rena,1190,EX,207,ES,39.07651,-5.81074 38258,Villar del Pedroso,1190,EX,207,ES,39.70631,-5.19583 38260,Villar del Rey,1190,EX,207,ES,39.1331,-6.84762 38308,Villarta de los Montes,1190,EX,207,ES,39.21386,-4.79227 38316,Villasbuenas de Gata,1190,EX,207,ES,40.17879,-6.62641 38450,Zafra,1190,EX,207,ES,38.42539,-6.41734 38456,Zahinos,1190,EX,207,ES,38.33135,-6.95533 38458,Zalamea de la Serena,1190,EX,207,ES,38.65131,-5.66063 38477,Zarza de Alange,1190,EX,207,ES,38.81814,-6.21756 38478,Zarza de Granadilla,1190,EX,207,ES,40.23723,-6.0485 38479,Zarza de Montánchez,1190,EX,207,ES,39.25756,-6.03248 38481,Zarza la Mayor,1190,EX,207,ES,39.87692,-6.86211 38495,Zorita,1190,EX,207,ES,39.28522,-5.69973 31892,A Baña,1167,GA,207,ES,42.9618,-8.75784 31893,A Coruña,1167,GA,207,ES,43.37135,-8.396 31894,A Estrada,1167,GA,207,ES,42.68911,-8.48842 31895,A Pobra do Brollon,1167,GA,207,ES,42.55612,-7.3914 31896,A Pobra do Caramiñal,1167,GA,207,ES,42.60295,-8.93824 31897,A Rúa,1167,GA,207,ES,42.40048,-7.10268 31901,Abadín,1167,GA,207,ES,43.36667,-7.48333 31906,Abegondo,1167,GA,207,ES,43.21667,-8.28333 32254,Allariz,1167,GA,207,ES,42.19044,-7.80175 32352,Ambía,1167,GA,207,ES,42.20578,-7.73707 32364,Amés,1167,GA,207,ES,42.90426,-8.65551 32355,Amoeiro,1167,GA,207,ES,42.41667,-7.95 32411,Aranga,1167,GA,207,ES,43.23469,-8.01705 32425,Arbo,1167,GA,207,ES,42.11667,-8.31667 32455,Ares,1167,GA,207,ES,43.42995,-8.24254 32522,Arteixo,1167,GA,207,ES,43.30482,-8.50749 32529,Arzúa,1167,GA,207,ES,42.93333,-8.15 32533,As Pontes de García Rodríguez,1167,GA,207,ES,43.45266,-7.85178 32569,Avión,1167,GA,207,ES,42.38333,-8.25 32616,Baiona,1167,GA,207,ES,42.11667,-8.85 32630,Baltar,1167,GA,207,ES,41.952,-7.71581 32632,Bande,1167,GA,207,ES,42.0312,-7.97489 32703,Baños de Molgas,1167,GA,207,ES,42.24148,-7.67223 32639,Baralla,1167,GA,207,ES,42.89207,-7.25492 32672,Barreiros,1167,GA,207,ES,43.53321,-7.23342 32714,Beade,1167,GA,207,ES,42.33074,-8.1295 32723,Becerreá,1167,GA,207,ES,42.8561,-7.1636 32727,Begonte,1167,GA,207,ES,43.15121,-7.68643 32851,Bergondo,1167,GA,207,ES,43.31667,-8.23333 32879,Betanzos,1167,GA,207,ES,43.28042,-8.21467 32908,Blancos,1167,GA,207,ES,41.99652,-7.75175 32921,Boborás,1167,GA,207,ES,42.43332,-8.14431 32933,Boimorto,1167,GA,207,ES,43.0,-8.13333 32934,Boiro,1167,GA,207,ES,42.64725,-8.88459 33007,Bueu,1167,GA,207,ES,42.32458,-8.78497 33022,Burela de Cabo,1167,GA,207,ES,43.65,-7.4 33137,Caldas de Reis,1167,GA,207,ES,42.60473,-8.6423 33156,Calvos,1167,GA,207,ES,41.9479,-7.89604 33169,Camariñas,1167,GA,207,ES,43.13115,-9.18172 33174,Cambados,1167,GA,207,ES,42.51222,-8.8131 33176,Cambre,1167,GA,207,ES,43.29438,-8.34736 33237,Cangas do Morrazo,1167,GA,207,ES,42.26413,-8.78463 33282,Carballeda de Avia,1167,GA,207,ES,42.3214,-8.16456 33283,Carballo,1167,GA,207,ES,43.213,-8.69104 33307,Cariño,1167,GA,207,ES,43.74134,-7.86715 33312,Carnota,1167,GA,207,ES,42.8233,-9.08913 33316,Carral,1167,GA,207,ES,43.2286,-8.35545 33339,Cartelle,1167,GA,207,ES,42.25109,-8.07062 33473,Castrelo de Miño,1167,GA,207,ES,42.29798,-8.06697 33486,Castro,1167,GA,207,ES,42.76667,-7.58333 33487,Castro Caldelas,1167,GA,207,ES,42.37366,-7.42578 33490,Castro de Rei,1167,GA,207,ES,43.20866,-7.40026 33509,Castroverde,1167,GA,207,ES,43.0302,-7.32428 33515,Catoira,1167,GA,207,ES,42.66748,-8.72323 33547,Cea,1167,GA,207,ES,42.4749,-7.98739 33554,Cedeira,1167,GA,207,ES,43.66044,-8.05719 33559,Cee,1167,GA,207,ES,42.95466,-9.188 33563,Celanova,1167,GA,207,ES,42.15303,-7.95513 33572,Cenlle,1167,GA,207,ES,42.34183,-8.08982 33581,Cerdido,1167,GA,207,ES,43.62063,-7.99959 33606,Cervo,1167,GA,207,ES,43.67019,-7.41013 33607,Cesuras,1167,GA,207,ES,43.17282,-8.20061 33617,Chantada,1167,GA,207,ES,42.60876,-7.77115 33725,Coirós,1167,GA,207,ES,43.25,-8.16667 33727,Coles,1167,GA,207,ES,42.4,-7.83333 33752,Combarro,1167,GA,207,ES,42.43188,-8.70649 33779,Corcubión,1167,GA,207,ES,42.94414,-9.1926 33788,Corgo,1167,GA,207,ES,42.94434,-7.4314 33792,Coristanco,1167,GA,207,ES,43.2,-8.75 33828,Covelo,1167,GA,207,ES,42.23333,-8.35 33843,Cualedro,1167,GA,207,ES,41.98897,-7.59464 33882,Culleredo,1167,GA,207,ES,43.28788,-8.38858 33885,Cuntis,1167,GA,207,ES,42.63396,-8.56256 33887,Curtis,1167,GA,207,ES,43.12374,-8.14818 33953,Dozón,1167,GA,207,ES,42.58333,-8.01667 33960,Dumbría,1167,GA,207,ES,43.00836,-9.11328 34063,Entrimo,1167,GA,207,ES,41.93297,-8.11725 34095,Esgos,1167,GA,207,ES,42.32549,-7.69691 34172,Fene,1167,GA,207,ES,43.45,-8.15 34182,Ferrol,1167,GA,207,ES,43.48961,-8.2194 34192,Fisterra,1167,GA,207,ES,42.90492,-9.26289 34210,Fonsagrada,1167,GA,207,ES,43.12398,-7.0679 34226,Fornelos de Montes,1167,GA,207,ES,42.34126,-8.45291 34234,Foz,1167,GA,207,ES,43.5692,-7.25441 34267,Friol,1167,GA,207,ES,43.03213,-7.79514 34483,Gondomar,1167,GA,207,ES,42.11155,-8.74971 34552,Guitiriz,1167,GA,207,ES,43.18169,-7.89656 34744,Illa de Arousa,1167,GA,207,ES,42.56376,-8.87258 34759,Irixoa,1167,GA,207,ES,43.2847,-8.05916 34956,Lalín,1167,GA,207,ES,42.66085,-8.11285 34957,Lama,1167,GA,207,ES,42.4,-8.43333 35175,Láncara,1167,GA,207,ES,42.86425,-7.33667 34974,Laracha,1167,GA,207,ES,43.25375,-8.58535 35007,Laza,1167,GA,207,ES,42.06136,-7.462 35095,Lobios,1167,GA,207,ES,42.40746,-7.53164 35144,Lousame,1167,GA,207,ES,42.76477,-8.84926 35159,Lugo,1167,GA,207,ES,43.00992,-7.55602 35161,Luintra,1167,GA,207,ES,42.40964,-7.72682 35181,Maceda,1167,GA,207,ES,42.26972,-7.65052 35231,Malpica,1167,GA,207,ES,43.3228,-8.81052 35268,Manzaneda,1167,GA,207,ES,42.30962,-7.23209 35314,Marín,1167,GA,207,ES,42.39145,-8.70136 35323,Maside,1167,GA,207,ES,42.41031,-8.02582 35354,Mazaricos,1167,GA,207,ES,42.94033,-8.97187 35364,Meaño,1167,GA,207,ES,42.44661,-8.78122 35381,Meira,1167,GA,207,ES,43.21337,-7.29372 35382,Meis,1167,GA,207,ES,42.5,-8.75 35392,Melón,1167,GA,207,ES,42.26016,-8.214 35410,Mesia,1167,GA,207,ES,43.1,-8.26667 35457,Miño,1167,GA,207,ES,43.35,-8.2 35459,Moaña,1167,GA,207,ES,42.27807,-8.73921 35465,Moeche,1167,GA,207,ES,43.55,-8.01667 35504,Mondariz,1167,GA,207,ES,42.2311,-8.45839 35505,Mondariz-Balneario,1167,GA,207,ES,42.22686,-8.46728 35506,Mondoñedo,1167,GA,207,ES,43.4,-7.4 35512,Monfero,1167,GA,207,ES,43.33333,-8.01667 35513,Monforte de Lemos,1167,GA,207,ES,42.52165,-7.51422 35547,Montederramo,1167,GA,207,ES,42.27554,-7.50138 35565,Monterroso,1167,GA,207,ES,42.7925,-7.83425 35621,Moraña,1167,GA,207,ES,42.55,-8.58333 35637,Mos,1167,GA,207,ES,43.15667,-7.55047 35658,Mugardos,1167,GA,207,ES,43.4604,-8.25507 35659,Mugia,1167,GA,207,ES,43.10414,-9.21791 35660,Muiños,1167,GA,207,ES,41.95609,-7.97396 35669,Muras,1167,GA,207,ES,43.46685,-7.72383 35685,Muros,1167,GA,207,ES,42.77617,-9.06032 35720,Narón,1167,GA,207,ES,43.50175,-8.19082 35790,Navia de Suarna,1167,GA,207,ES,42.96667,-7.0 35797,Negreira,1167,GA,207,ES,42.90402,-8.74273 35808,Nigrán,1167,GA,207,ES,42.14153,-8.80656 35817,Nogueira de Ramuín,1167,GA,207,ES,42.41712,-7.74982 35846,O Barco de Valdeorras,1167,GA,207,ES,42.41642,-6.99005 35847,O Carballiño,1167,GA,207,ES,42.43163,-8.07899 35848,O Grove,1167,GA,207,ES,42.49444,-8.86502 35849,O Incio,1167,GA,207,ES,42.63333,-7.35 35850,O Páramo,1167,GA,207,ES,42.95,-7.3 35851,O Rosal,1167,GA,207,ES,41.93536,-8.83677 35864,Oia,1167,GA,207,ES,42.0,-8.86667 35865,Oimbra,1167,GA,207,ES,41.88554,-7.47216 35876,Oleiros,1167,GA,207,ES,43.33333,-8.31667 35939,Ordes,1167,GA,207,ES,43.07654,-8.409 35959,Oroso,1167,GA,207,ES,42.98333,-8.43333 35983,Ourense,1167,GA,207,ES,42.33669,-7.86407 35984,Ourol,1167,GA,207,ES,42.87013,-7.61447 35985,Outeiro,1167,GA,207,ES,43.14458,-7.29212 35986,Outeiro de Rei,1167,GA,207,ES,43.10198,-7.61497 35987,Outes,1167,GA,207,ES,42.86189,-8.90181 35993,Padrenda,1167,GA,207,ES,42.13333,-8.15 35995,Padrón,1167,GA,207,ES,42.73875,-8.66057 36031,Palmeira,1167,GA,207,ES,42.58333,-8.95 36050,Pantón,1167,GA,207,ES,42.51667,-7.6 36059,Paradela,1167,GA,207,ES,42.76667,-7.56667 36075,Pastoriza,1167,GA,207,ES,43.33333,-8.46667 36147,Pereiro de Aguiar,1167,GA,207,ES,42.34524,-7.80008 36159,Petín,1167,GA,207,ES,42.38191,-7.12899 36232,Piñor,1167,GA,207,ES,42.5012,-8.00151 36255,Pobra de Trives,1167,GA,207,ES,42.33932,-7.25338 36256,Poio,1167,GA,207,ES,42.44775,-8.68594 36272,Ponteareas,1167,GA,207,ES,42.17476,-8.50398 36273,Pontevedra,1167,GA,207,ES,42.431,-8.64435 36278,Porqueira,1167,GA,207,ES,42.01667,-7.85 36280,Porriño,1167,GA,207,ES,42.16156,-8.6198 36286,Portas,1167,GA,207,ES,42.58531,-8.65573 36296,Porto do Son,1167,GA,207,ES,42.72482,-9.00527 36298,Portomarín,1167,GA,207,ES,42.8062,-7.61644 36299,Portonovo,1167,GA,207,ES,42.39424,-8.82563 36360,Provincia da Coruña,1167,GA,207,ES,43.16667,-8.41667 36378,Provincia de Lugo,1167,GA,207,ES,43.0,-7.5 36382,Provincia de Ourense,1167,GA,207,ES,42.16667,-7.5 36384,Provincia de Pontevedra,1167,GA,207,ES,42.5,-8.5 36433,Puente Nuevo,1167,GA,207,ES,43.34948,-7.19458 36527,Quintela de Leirado,1167,GA,207,ES,42.13967,-8.10126 36529,Quiroga,1167,GA,207,ES,42.47678,-7.27463 36707,Rábade,1167,GA,207,ES,43.117,-7.61714 36542,Rairiz de Veiga,1167,GA,207,ES,42.08364,-7.83503 36561,Redondela,1167,GA,207,ES,42.28337,-8.6096 36603,Rianxo,1167,GA,207,ES,42.64977,-8.81763 36607,Ribadavia,1167,GA,207,ES,42.28804,-8.14362 36608,Ribadeo,1167,GA,207,ES,43.53704,-7.04095 36609,Ribadumia,1167,GA,207,ES,42.51667,-8.75 36614,Ribeira,1167,GA,207,ES,42.74611,-8.44392 36642,Riós,1167,GA,207,ES,41.97457,-7.28234 36718,Ríotorto,1167,GA,207,ES,43.35,-7.23333 36663,Rodeiro,1167,GA,207,ES,42.65193,-7.95519 36732,Sada,1167,GA,207,ES,43.35619,-8.25796 36785,Salvatierra de Miño,1167,GA,207,ES,42.08333,-8.5 36792,Samos,1167,GA,207,ES,42.731,-7.32582 36801,San Amaro,1167,GA,207,ES,42.37385,-8.07347 36915,San Román,1167,GA,207,ES,42.86932,-7.06261 37021,Santa Comba,1167,GA,207,ES,43.03306,-8.80925 37071,Santa Marta de Ortigueira,1167,GA,207,ES,43.68333,-7.85 37101,Santa Uxía de Ribeira,1167,GA,207,ES,42.55352,-8.99094 37114,Santiago de Compostela,1167,GA,207,ES,42.88052,-8.54569 37132,Santiso,1167,GA,207,ES,42.87388,-8.05497 37157,Sanxenxo,1167,GA,207,ES,42.39996,-8.80698 37167,Sarreaus,1167,GA,207,ES,42.08784,-7.60348 37168,Sarria,1167,GA,207,ES,42.78148,-7.41431 37256,Silleda,1167,GA,207,ES,42.69605,-8.24653 37270,Sober,1167,GA,207,ES,42.46127,-7.5864 37271,Sobradelo,1167,GA,207,ES,42.58333,-8.78333 37274,Sobrado,1167,GA,207,ES,43.03882,-8.02784 37289,Somozas,1167,GA,207,ES,43.53333,-7.93333 37344,Taboada,1167,GA,207,ES,42.699,-7.82298 37345,Taboadela,1167,GA,207,ES,42.24234,-7.82719 37404,Teo,1167,GA,207,ES,42.75,-8.5 37610,Toén,1167,GA,207,ES,42.31765,-7.95435 37451,Tomiño,1167,GA,207,ES,41.98772,-8.75502 37608,Touro,1167,GA,207,ES,42.86812,-8.30764 37611,Trabada,1167,GA,207,ES,43.44475,-7.19527 37620,Trasmiras,1167,GA,207,ES,42.0254,-7.61735 37624,Trazo,1167,GA,207,ES,43.01667,-8.53333 37651,Tui,1167,GA,207,ES,42.04713,-8.64435 37812,Valdoviño,1167,GA,207,ES,43.6,-8.13333 37828,Valga,1167,GA,207,ES,42.69792,-8.63959 37902,Vedra,1167,GA,207,ES,42.77817,-8.47636 37951,Verea,1167,GA,207,ES,42.10653,-8.00092 37955,Verín,1167,GA,207,ES,41.94149,-7.43809 37970,Vigo,1167,GA,207,ES,42.23282,-8.72264 37985,Vilagarcía de Arousa,1167,GA,207,ES,42.59631,-8.76426 37987,Vilalba,1167,GA,207,ES,43.29806,-7.6813 37994,Vilanova de Arousa,1167,GA,207,ES,42.564,-8.82797 38002,Vilasantar,1167,GA,207,ES,43.07106,-8.12163 38005,Vilaxoán,1167,GA,207,ES,42.58353,-8.79353 38388,Vimianzo,1167,GA,207,ES,43.10988,-9.03351 38403,Viveiro,1167,GA,207,ES,43.66228,-7.59344 38422,Xinzo de Limia,1167,GA,207,ES,42.0635,-7.72459 38488,Zas,1167,GA,207,ES,43.09885,-8.91558 38572,Ábalos,1171,RI,207,ES,42.57154,-2.70956 31946,Agoncillo,1171,RI,207,ES,42.44667,-2.2898 31965,Aguilar del Río Alhama,1171,RI,207,ES,41.96212,-1.9934 31986,Ajamil,1171,RI,207,ES,42.16705,-2.48752 32034,Albelda de Iregua,1171,RI,207,ES,42.35837,-2.47278 32038,Alberite,1171,RI,207,ES,42.40704,-2.43894 32082,Alcanadre,1171,RI,207,ES,42.40492,-2.12073 32158,Aldeanueva de Ebro,1171,RI,207,ES,42.22911,-1.88735 32186,Alesanco,1171,RI,207,ES,42.41409,-2.81666 32187,Alesón,1171,RI,207,ES,42.40554,-2.68938 32198,Alfaro,1171,RI,207,ES,42.18032,-1.75016 32272,Almarza de Cameros,1171,RI,207,ES,42.2165,-2.59873 32380,Anguciana,1171,RI,207,ES,42.57421,-2.90124 32381,Anguiano,1171,RI,207,ES,42.26381,-2.76463 32453,Arenzana de Abajo,1171,RI,207,ES,42.38599,-2.7194 32454,Arenzana de Arriba,1171,RI,207,ES,42.38745,-2.69494 32493,Arnedillo,1171,RI,207,ES,42.21221,-2.23602 32494,Arnedo,1171,RI,207,ES,42.228,-2.10083 32518,Arrúbal,1171,RI,207,ES,42.43485,-2.25143 32558,Ausejo,1171,RI,207,ES,42.3421,-2.1671 32562,Autol,1171,RI,207,ES,42.21661,-2.00525 32586,Azofra,1171,RI,207,ES,42.424,-2.80086 32603,Badarán,1171,RI,207,ES,42.36794,-2.81079 32701,Bañares,1171,RI,207,ES,42.46838,-2.9101 32706,Baños de Río Tobía,1171,RI,207,ES,42.33533,-2.76099 32705,Baños de Rioja,1171,RI,207,ES,42.5123,-2.94635 32837,Berceo,1171,RI,207,ES,42.33906,-2.85239 32848,Bergasa,1171,RI,207,ES,42.25285,-2.13221 32849,Bergasillas Bajera,1171,RI,207,ES,42.24462,-2.1583 32919,Bobadilla,1171,RI,207,ES,42.31873,-2.75992 32983,Brieva de Cameros,1171,RI,207,ES,42.16462,-2.7945 32990,Briñas,1171,RI,207,ES,42.60106,-2.83192 32988,Briones,1171,RI,207,ES,42.54397,-2.78572 33091,Cabezón de Cameros,1171,RI,207,ES,42.19716,-2.51989 33126,Calahorra,1171,RI,207,ES,42.30506,-1.96521 33223,Canales de la Sierra,1171,RI,207,ES,42.14233,-3.02458 33534,Cañas,1171,RI,207,ES,42.3924,-2.84649 33244,Canillas de Río Tuerto,1171,RI,207,ES,42.3995,-2.84091 33896,Cárdenas,1171,RI,207,ES,42.37464,-2.76726 33345,Casalarreina,1171,RI,207,ES,42.54911,-2.90994 33398,Castañares de Rioja,1171,RI,207,ES,42.51248,-2.93148 33565,Cellorigo,1171,RI,207,ES,42.62703,-3.00016 33569,Cenicero,1171,RI,207,ES,42.4813,-2.64412 33602,Cervera del Río Alhama,1171,RI,207,ES,42.00517,-1.95531 33656,Cidamón,1171,RI,207,ES,42.49518,-2.87834 33665,Cihuri,1171,RI,207,ES,42.56499,-2.92287 33688,Cirueña,1171,RI,207,ES,42.41214,-2.89593 33705,Clavijo,1171,RI,207,ES,42.34897,-2.42666 33783,Cordovín,1171,RI,207,ES,42.38557,-2.815 33786,Corera,1171,RI,207,ES,42.34344,-2.22023 33793,Cornago,1171,RI,207,ES,42.06444,-2.09486 33797,Corporales,1171,RI,207,ES,42.43208,-2.99535 34055,Enciso,1171,RI,207,ES,42.14946,-2.26953 34062,Entrena,1171,RI,207,ES,42.38782,-2.53066 34146,Estollo,1171,RI,207,ES,42.32953,-2.85092 34153,Ezcaray,1171,RI,207,ES,42.32536,-3.01309 34204,Foncea,1171,RI,207,ES,42.61529,-3.03897 34219,Fonzaleche,1171,RI,207,ES,42.58114,-3.01218 34286,Fuenmayor,1171,RI,207,ES,42.46729,-2.56153 34377,Galbárruli,1171,RI,207,ES,42.62181,-2.96087 34381,Galilea,1171,RI,207,ES,42.34703,-2.23605 34393,Gallinero de Cameros,1171,RI,207,ES,42.17229,-2.61793 34466,Gimileo,1171,RI,207,ES,42.54992,-2.82237 34509,Grañón,1171,RI,207,ES,42.44992,-3.02767 34518,Grávalos,1171,RI,207,ES,42.10836,-1.99874 34572,Haro,1171,RI,207,ES,42.57634,-2.8476 34580,Herce,1171,RI,207,ES,42.21423,-2.16488 34592,Herramélluri,1171,RI,207,ES,42.50295,-3.01954 34605,Hervías,1171,RI,207,ES,42.44781,-2.88714 34657,Hormilla,1171,RI,207,ES,42.43828,-2.77447 34658,Hormilleja,1171,RI,207,ES,42.45628,-2.73155 34661,Hornillos de Cameros,1171,RI,207,ES,42.21001,-2.4196 34664,Hornos de Moncalvillo,1171,RI,207,ES,42.39198,-2.5855 34713,Huércanos,1171,RI,207,ES,42.428,-2.69589 34735,Igea,1171,RI,207,ES,42.06777,-2.01094 34793,Jalón de Cameros,1171,RI,207,ES,42.21804,-2.49004 34946,Laguna de Cameros,1171,RI,207,ES,42.17455,-2.54282 34953,Lagunilla del Jubera,1171,RI,207,ES,42.33414,-2.32117 34975,Lardero,1171,RI,207,ES,42.42686,-2.46153 35017,Ledesma de la Cogolla,1171,RI,207,ES,42.32032,-2.719 35027,Leiva,1171,RI,207,ES,42.50281,-3.04701 35040,Leza de Río Leza,1171,RI,207,ES,42.32952,-2.40606 35101,Logroño,1171,RI,207,ES,42.46667,-2.45 35164,Lumbreras,1171,RI,207,ES,42.10477,-2.62189 35253,Manjarrés,1171,RI,207,ES,42.39152,-2.67512 35266,Manzanares de Rioja,1171,RI,207,ES,42.3961,-2.8959 35347,Matute,1171,RI,207,ES,42.29888,-2.79564 35378,Medrano,1171,RI,207,ES,42.38361,-2.55394 35666,Munilla,1171,RI,207,ES,42.189,-2.29506 35678,Murillo de Río Leza,1171,RI,207,ES,42.40099,-2.32464 35682,Muro de Aguas,1171,RI,207,ES,42.13364,-2.11175 35684,Muro en Cameros,1171,RI,207,ES,42.22509,-2.53038 35842,Nájera,1171,RI,207,ES,42.41822,-2.72865 35710,Nalda,1171,RI,207,ES,42.33467,-2.4871 35739,Navajún,1171,RI,207,ES,41.96667,-2.1 35807,Nieva de Cameros,1171,RI,207,ES,42.21835,-2.667 35857,Ochánduri,1171,RI,207,ES,42.52525,-3.00415 35859,Ocón,1171,RI,207,ES,42.29898,-2.24019 35867,Ojacastro,1171,RI,207,ES,42.3472,-3.0049 35894,Ollauri,1171,RI,207,ES,42.54256,-2.83448 36087,Pazuengos,1171,RI,207,ES,42.31776,-2.92539 36112,Pedroso,1171,RI,207,ES,42.29959,-2.71889 36208,Pinillos,1171,RI,207,ES,42.19951,-2.59709 36341,Pradejón,1171,RI,207,ES,42.33446,-2.06851 36343,Pradillo,1171,RI,207,ES,42.1766,-2.64185 36407,Préjano,1171,RI,207,ES,42.18648,-2.17998 36375,Provincia de La Rioja,1171,RI,207,ES,42.46311,-2.42455 36492,Quel,1171,RI,207,ES,42.22979,-2.05196 36534,Rabanera,1171,RI,207,ES,42.18955,-2.48654 36626,Rincón de Soto,1171,RI,207,ES,42.23475,-1.85214 36659,Robres del Castillo,1171,RI,207,ES,42.27593,-2.29245 36664,Rodezno,1171,RI,207,ES,42.52576,-2.84597 36743,Sajazarra,1171,RI,207,ES,42.58884,-2.96124 36805,San Asensio,1171,RI,207,ES,42.49677,-2.75057 36891,San Millán de la Cogolla,1171,RI,207,ES,42.32974,-2.86185 36890,San Millán de Yécora,1171,RI,207,ES,42.54705,-3.09681 36916,San Román de Cameros,1171,RI,207,ES,42.23255,-2.47436 36924,San Torcuato,1171,RI,207,ES,42.48219,-2.88923 36930,San Vicente de la Sonsierra,1171,RI,207,ES,42.56321,-2.76071 37014,Santa Coloma,1171,RI,207,ES,42.36717,-2.65598 37055,Santa Eulalia Bajera,1171,RI,207,ES,42.2096,-2.19174 37141,Santo Domingo de la Calzada,1171,RI,207,ES,42.44015,-2.95365 37154,Santurdejo,1171,RI,207,ES,42.37696,-2.95437 37278,Sojuela,1171,RI,207,ES,42.36988,-2.54525 37306,Sorzano,1171,RI,207,ES,42.34307,-2.52872 37319,Soto en Cameros,1171,RI,207,ES,42.28591,-2.42597 37414,Terroba,1171,RI,207,ES,42.25809,-2.44375 37429,Tirgo,1171,RI,207,ES,42.54587,-2.9494 37438,Tobía,1171,RI,207,ES,42.29846,-2.81399 37468,Tormantos,1171,RI,207,ES,42.49431,-3.07446 37504,Torre en Cameros,1171,RI,207,ES,42.24133,-2.51805 37524,Torrecilla en Cameros,1171,RI,207,ES,42.25532,-2.63109 37525,Torrecilla sobre Alesanco,1171,RI,207,ES,42.40825,-2.83379 37562,Torremontalbo,1171,RI,207,ES,42.5,-2.68333 37633,Treviana,1171,RI,207,ES,42.55901,-3.05032 37636,Tricio,1171,RI,207,ES,42.40223,-2.71912 37650,Tudelilla,1171,RI,207,ES,42.30023,-2.11749 37700,Uruñuela,1171,RI,207,ES,42.4431,-2.70749 37763,Valdemadera,1171,RI,207,ES,41.98408,-2.07403 37829,Valgañón,1171,RI,207,ES,42.31782,-3.06725 37942,Ventosa,1171,RI,207,ES,42.40495,-2.62651 37945,Ventrosa,1171,RI,207,ES,42.15705,-2.85044 37971,Viguera,1171,RI,207,ES,42.30934,-2.53334 38095,Villalba de Rioja,1171,RI,207,ES,42.60967,-2.88687 38115,Villalobar de Rioja,1171,RI,207,ES,42.49123,-2.96404 38149,Villamediana de Iregua,1171,RI,207,ES,42.42658,-2.41943 38176,Villanueva de Cameros,1171,RI,207,ES,42.16719,-2.6504 38246,Villar de Torre,1171,RI,207,ES,42.37133,-2.86411 38270,Villarejo,1171,RI,207,ES,42.37417,-2.88712 38297,Villarroya,1171,RI,207,ES,42.13053,-2.06896 38309,Villarta-Quintana,1171,RI,207,ES,42.42998,-3.0484 38340,Villavelayo,1171,RI,207,ES,42.13084,-2.98565 38348,Villaverde de Rioja,1171,RI,207,ES,42.32051,-2.8137 38377,Villoslada de Cameros,1171,RI,207,ES,42.11383,-2.67413 38394,Viniegra de Abajo,1171,RI,207,ES,42.15055,-2.8893 38395,Viniegra de Arriba,1171,RI,207,ES,42.09513,-2.83304 38476,Zarratón,1171,RI,207,ES,42.51649,-2.88094 38483,Zarzosa,1171,RI,207,ES,42.18294,-2.34297 38499,Zorraquín,1171,RI,207,ES,42.32565,-3.03925 31899,Abades,1200,LE,207,ES,40.91646,-4.26937 31902,Abajas,1200,LE,207,ES,42.6231,-3.58086 31907,Abejar,1200,LE,207,ES,41.80755,-2.78407 31911,Abezames,1200,LE,207,ES,41.62642,-5.42577 31912,Abia de las Torres,1200,LE,207,ES,42.42016,-4.42131 31919,Abusejo,1200,LE,207,ES,40.709,-6.14074 31922,Acebedo,1200,LE,207,ES,43.03969,-5.116 31928,Adalia,1200,LE,207,ES,41.64894,-5.12107 31930,Adanero,1200,LE,207,ES,40.94487,-4.60561 31937,Adrada de Haza,1200,LE,207,ES,41.59454,-3.82327 31938,Adrada de Pirón,1200,LE,207,ES,41.05257,-4.05107 31939,Adradas,1200,LE,207,ES,41.35098,-2.47373 31940,Adrados,1200,LE,207,ES,41.36816,-4.11186 31945,Agallas,1200,LE,207,ES,40.44867,-6.44176 38573,Ágreda,1200,LE,207,ES,41.85588,-1.92244 31953,Aguasal,1200,LE,207,ES,41.27495,-4.6529 31957,Aguilafuente,1200,LE,207,ES,41.22667,-4.11185 31959,Aguilar de Bureba,1200,LE,207,ES,42.58974,-3.32913 31960,Aguilar de Campoo,1200,LE,207,ES,42.79452,-4.25892 31961,Aguilar de Campos,1200,LE,207,ES,41.98375,-5.18117 31976,Ahigal de los Aceiteros,1200,LE,207,ES,40.87231,-6.74702 31975,Ahigal de Villarino,1200,LE,207,ES,41.15819,-6.38037 31990,Alaejos,1200,LE,207,ES,41.30732,-5.21567 32002,Alar del Rey,1200,LE,207,ES,42.66037,-4.31271 32003,Alaraz,1200,LE,207,ES,40.74886,-5.28781 32010,Alba de Cerrato,1200,LE,207,ES,41.81276,-4.3647 32011,Alba de Tormes,1200,LE,207,ES,40.82664,-5.51237 32012,Alba de Yeltes,1200,LE,207,ES,40.6718,-6.3166 32045,Albillos,1200,LE,207,ES,42.2768,-3.78908 32055,Albornos,1200,LE,207,ES,40.83795,-4.88129 32093,Alcañices,1200,LE,207,ES,41.6994,-6.34647 32092,Alcazarén,1200,LE,207,ES,41.37061,-4.67262 32100,Alcocero de Mola,1200,LE,207,ES,42.47222,-3.3579 32112,Alconaba,1200,LE,207,ES,41.7236,-2.38483 32113,Alconada,1200,LE,207,ES,40.91092,-5.36305 32114,Alconada de Maderuelo,1200,LE,207,ES,41.45015,-3.48554 32125,Alcubilla de Avellaneda,1200,LE,207,ES,41.72593,-3.30471 32127,Alcubilla de las Peñas,1200,LE,207,ES,41.25129,-2.52684 32126,Alcubilla de Nogales,1200,LE,207,ES,42.12787,-5.92184 32142,Aldea de San Miguel,1200,LE,207,ES,41.46098,-4.6158 32145,Aldea del Obispo,1200,LE,207,ES,40.70677,-6.79253 32141,Aldea Real,1200,LE,207,ES,41.18553,-4.16559 32148,Aldeacipreste,1200,LE,207,ES,40.3809,-5.89754 32149,Aldeadávila de la Ribera,1200,LE,207,ES,41.21769,-6.61786 32150,Aldealafuente,1200,LE,207,ES,41.67194,-2.32522 32151,Aldealcorvo,1200,LE,207,ES,41.24443,-3.79136 32152,Aldealengua,1200,LE,207,ES,40.9809,-5.54922 32153,Aldealengua de Santa María,1200,LE,207,ES,41.46196,-3.46723 32154,Aldealpozo,1200,LE,207,ES,41.78258,-2.20416 32155,Aldealseñor,1200,LE,207,ES,41.8789,-2.31565 32156,Aldeamayor de San Martín,1200,LE,207,ES,41.51256,-4.63955 32159,Aldeanueva de Figueroa,1200,LE,207,ES,41.14809,-5.52404 32163,Aldeanueva de la Sierra,1200,LE,207,ES,40.6162,-6.10023 32162,Aldeanueva de Santa Cruz,1200,LE,207,ES,40.38189,-5.42142 32166,Aldeanueva del Codonal,1200,LE,207,ES,41.08236,-4.54369 32168,Aldearrodrigo,1200,LE,207,ES,41.10966,-5.80726 32169,Aldearrubia,1200,LE,207,ES,41.00807,-5.49829 32170,Aldeaseca,1200,LE,207,ES,41.04912,-4.81707 32171,Aldeaseca de Alba,1200,LE,207,ES,40.81909,-5.44699 32172,Aldeaseca de la Frontera,1200,LE,207,ES,40.94161,-5.20719 32173,Aldeasoña,1200,LE,207,ES,41.47285,-4.05711 32174,Aldeatejada,1200,LE,207,ES,40.92168,-5.69273 32175,Aldeavieja de Tormes,1200,LE,207,ES,40.58307,-5.61705 32178,Aldehuela de la Bóveda,1200,LE,207,ES,40.85077,-6.0526 32177,Aldehuela de Yeltes,1200,LE,207,ES,40.66254,-6.24332 32179,Aldehuela del Codonal,1200,LE,207,ES,41.05504,-4.53863 32181,Aldeonte,1200,LE,207,ES,41.35092,-3.67847 32184,Alentisque,1200,LE,207,ES,41.42059,-2.33189 32208,Algadefe,1200,LE,207,ES,42.21931,-5.58419 32224,Algodre,1200,LE,207,ES,41.56631,-5.60406 32249,Aliud,1200,LE,207,ES,41.65412,-2.25314 32264,Almajano,1200,LE,207,ES,41.85095,-2.3383 32265,Almaluez,1200,LE,207,ES,41.28932,-2.26871 32267,Almanza,1200,LE,207,ES,42.65825,-5.0362 32269,Almaraz de Duero,1200,LE,207,ES,41.47505,-5.91654 32271,Almarza,1200,LE,207,ES,41.94678,-2.469 32275,Almazán,1200,LE,207,ES,41.48648,-2.53088 32274,Almazul,1200,LE,207,ES,41.574,-2.1462 32281,Almenar de Soria,1200,LE,207,ES,41.6823,-2.20082 32283,Almenara de Adaja,1200,LE,207,ES,41.21406,-4.67824 32284,Almenara de Tormes,1200,LE,207,ES,41.0639,-5.8235 32285,Almendra,1200,LE,207,ES,41.22922,-6.34068 32325,Alpanseque,1200,LE,207,ES,41.26505,-2.67064 32337,Altable,1200,LE,207,ES,42.60276,-3.07719 32348,Amavida,1200,LE,207,ES,40.57371,-5.06541 32349,Amayuelas de Arriba,1200,LE,207,ES,42.21108,-4.4888 32353,Ameyugo,1200,LE,207,ES,42.65617,-3.0617 32359,Ampudia,1200,LE,207,ES,41.91608,-4.78033 32362,Amusco,1200,LE,207,ES,42.17306,-4.47018 32363,Amusquillo,1200,LE,207,ES,41.74853,-4.30117 32366,Anaya,1200,LE,207,ES,40.99184,-4.3095 32367,Anaya de Alba,1200,LE,207,ES,40.72828,-5.49266 32595,Añe,1200,LE,207,ES,41.03702,-4.29462 32383,Anguix,1200,LE,207,ES,41.75331,-3.93125 32599,Añover de Tormes,1200,LE,207,ES,41.13658,-5.91585 32394,Antigüedad,1200,LE,207,ES,41.94681,-4.12058 32402,Arahuetes,1200,LE,207,ES,41.13762,-3.85664 32406,Arancón,1200,LE,207,ES,41.80017,-2.28141 32407,Aranda de Duero,1200,LE,207,ES,41.67041,-3.6892 32409,Arandilla,1200,LE,207,ES,41.73778,-3.42914 32415,Arapiles,1200,LE,207,ES,40.89366,-5.64494 32417,Arauzo de Miel,1200,LE,207,ES,41.85878,-3.38773 32418,Arauzo de Salce,1200,LE,207,ES,41.81919,-3.41191 32419,Arauzo de Torre,1200,LE,207,ES,41.79818,-3.42314 32428,Arcediano,1200,LE,207,ES,41.09379,-5.56055 32429,Arcenillas,1200,LE,207,ES,41.45641,-5.68512 32433,Arconada,1200,LE,207,ES,42.32774,-4.49617 32434,Arcones,1200,LE,207,ES,41.11817,-3.72384 32435,Arcos,1200,LE,207,ES,42.26664,-3.75458 32436,Arcos de Jalón,1200,LE,207,ES,41.21592,-2.2747 32438,Arcos de la Polvorosa,1200,LE,207,ES,41.94389,-5.69731 32442,Ardón,1200,LE,207,ES,42.43629,-5.56048 32447,Arenas de San Pedro,1200,LE,207,ES,40.21041,-5.08694 32449,Arenillas,1200,LE,207,ES,41.34706,-2.84618 32459,Arevalillo de Cega,1200,LE,207,ES,41.16174,-3.88911 32531,Arévalo,1200,LE,207,ES,41.06255,-4.72042 32532,Arévalo de la Sierra,1200,LE,207,ES,41.94723,-2.40033 32466,Argañín,1200,LE,207,ES,41.43948,-6.20827 32463,Arganza,1200,LE,207,ES,42.64077,-6.68627 32476,Argujillo,1200,LE,207,ES,41.31156,-5.58763 32479,Arija,1200,LE,207,ES,42.9935,-3.94497 32484,Arlanzón,1200,LE,207,ES,42.32267,-3.45784 32487,Armenteros,1200,LE,207,ES,40.5932,-5.44806 32490,Armuña,1200,LE,207,ES,41.07715,-4.31949 32498,Arquillinos,1200,LE,207,ES,41.7099,-5.65708 32500,Arrabalde,1200,LE,207,ES,42.1076,-5.89441 32503,Arraya de Oca,1200,LE,207,ES,42.41488,-3.39781 32509,Arroyo de la Encomienda,1200,LE,207,ES,41.60956,-4.79692 32536,Aspariegos,1200,LE,207,ES,41.67458,-5.59955 32540,Astorga,1200,LE,207,ES,42.45879,-6.05601 32541,Astudillo,1200,LE,207,ES,42.1933,-4.29394 32542,Asturianos,1200,LE,207,ES,42.05201,-6.4894 32548,Atapuerca,1200,LE,207,ES,42.37757,-3.5079 32549,Ataquines,1200,LE,207,ES,41.18247,-4.80319 32559,Ausejo de la Sierra,1200,LE,207,ES,41.89462,-2.37394 32560,Autilla del Pino,1200,LE,207,ES,41.99207,-4.63393 32561,Autillo de Campos,1200,LE,207,ES,42.08725,-4.83376 32564,Aveinte,1200,LE,207,ES,40.78227,-4.83649 32565,Avellaneda,1200,LE,207,ES,40.38909,-5.38811 32567,Avellanosa de Muñó,1200,LE,207,ES,41.98349,-3.82553 38576,Ávila,1200,LE,207,ES,40.65724,-4.69951 32574,Ayllón,1200,LE,207,ES,41.41899,-3.37537 32577,Ayoó de Vidriales,1200,LE,207,ES,42.13042,-6.0655 32578,Ayuela,1200,LE,207,ES,42.62618,-4.65979 32600,Babilafuente,1200,LE,207,ES,40.97704,-5.42554 32611,Bahabón,1200,LE,207,ES,41.48141,-4.27941 32612,Bahabón de Esgueva,1200,LE,207,ES,41.86162,-3.7298 32621,Balboa,1200,LE,207,ES,42.70608,-6.92222 32629,Baltanás,1200,LE,207,ES,41.93775,-4.24656 32702,Bañobárez,1200,LE,207,ES,40.84825,-6.61311 32708,Baños de Valdearados,1200,LE,207,ES,41.7701,-3.55589 32711,Bañuelos de Bureba,1200,LE,207,ES,42.50258,-3.27957 32635,Baquerín de Campos,1200,LE,207,ES,42.016,-4.78185 32641,Barbadillo de Herreros,1200,LE,207,ES,42.14974,-3.17702 32642,Barbadillo del Mercado,1200,LE,207,ES,42.03858,-3.35669 32643,Barbadillo del Pez,1200,LE,207,ES,42.11879,-3.22803 32644,Barbalos,1200,LE,207,ES,40.67678,-5.94258 32648,Barbolla,1200,LE,207,ES,41.32567,-3.67361 32651,Barca,1200,LE,207,ES,41.4549,-2.62217 33052,Bárcena de Campos,1200,LE,207,ES,42.48428,-4.49875 32654,Barceo,1200,LE,207,ES,41.06108,-6.45175 32656,Barcial de la Loma,1200,LE,207,ES,41.95139,-5.28353 32657,Barcial del Barco,1200,LE,207,ES,41.93353,-5.66268 32659,Barcones,1200,LE,207,ES,41.29146,-2.8163 32665,Barjas,1200,LE,207,ES,42.61182,-6.97979 32669,Barraco,1200,LE,207,ES,40.47647,-4.64346 32676,Barrio de Muñó,1200,LE,207,ES,42.17584,-4.00715 32679,Barrios de Colina,1200,LE,207,ES,42.39595,-3.46001 32680,Barromán,1200,LE,207,ES,41.06536,-4.93066 32681,Barruecopardo,1200,LE,207,ES,41.07215,-6.66423 32682,Barruelo de Santullán,1200,LE,207,ES,42.90641,-4.28593 32687,Basardilla,1200,LE,207,ES,41.02737,-4.02598 32689,Basconcillos del Tozo,1200,LE,207,ES,42.70236,-3.98937 33055,Báscones de Ojeda,1200,LE,207,ES,42.67064,-4.52693 32690,Bascuñana,1200,LE,207,ES,42.42548,-3.08231 32697,Bayubas de Abajo,1200,LE,207,ES,41.52747,-2.89586 32698,Bayubas de Arriba,1200,LE,207,ES,41.5575,-2.88731 32721,Becedas,1200,LE,207,ES,40.40369,-5.63577 32722,Becedillas,1200,LE,207,ES,40.53821,-5.32561 32724,Becerril de Campos,1200,LE,207,ES,42.10841,-4.64152 32726,Becilla de Valderaduey,1200,LE,207,ES,42.09905,-5.21805 33058,Béjar,1200,LE,207,ES,40.38641,-5.76341 32736,Belbimbre,1200,LE,207,ES,42.16873,-4.0128 32738,Beleña,1200,LE,207,ES,40.75067,-5.62713 32749,Belmonte de Campos,1200,LE,207,ES,41.94255,-4.98659 32752,Belorado,1200,LE,207,ES,42.42048,-3.19133 32754,Belver de los Montes,1200,LE,207,ES,41.72284,-5.45182 32756,Bembibre,1200,LE,207,ES,42.61771,-6.41545 32758,Benafarces,1200,LE,207,ES,41.62133,-5.29285 32781,Benavente,1200,LE,207,ES,42.00249,-5.67826 32782,Benavides,1200,LE,207,ES,42.50442,-5.89442 32784,Benegiles,1200,LE,207,ES,41.627,-5.63479 32828,Benuza,1200,LE,207,ES,42.39941,-6.70969 32833,Beratón,1200,LE,207,ES,41.71749,-1.81092 32835,Berberana,1200,LE,207,ES,42.91784,-3.06063 32838,Bercero,1200,LE,207,ES,41.56397,-5.0558 32839,Berceruelo,1200,LE,207,ES,41.58033,-5.03267 32840,Bercial,1200,LE,207,ES,40.90711,-4.43638 32841,Bercial de Zapardiel,1200,LE,207,ES,41.04675,-4.9691 32842,Bercianos del Páramo,1200,LE,207,ES,42.38017,-5.70834 32843,Bercianos del Real Camino,1200,LE,207,ES,42.38732,-5.14462 32844,Bercimuel,1200,LE,207,ES,41.39925,-3.57051 32855,Berlanga de Duero,1200,LE,207,ES,41.4656,-2.86147 32856,Berlanga del Bierzo,1200,LE,207,ES,42.73104,-6.60565 32857,Berlangas de Roa,1200,LE,207,ES,41.68913,-3.87284 32858,Bermellar,1200,LE,207,ES,40.99918,-6.67014 32860,Bermillo de Sayago,1200,LE,207,ES,41.36648,-6.11223 32861,Bernardos,1200,LE,207,ES,41.12787,-4.35119 32869,Berrocal de Huebra,1200,LE,207,ES,40.71864,-6.00054 32870,Berrocal de Salvatierra,1200,LE,207,ES,40.63331,-5.69005 32872,Berrocalejo de Aragona,1200,LE,207,ES,40.69436,-4.59474 32873,Berrueces,1200,LE,207,ES,41.94606,-5.09693 32874,Berzosa de Bureba,1200,LE,207,ES,42.62678,-3.26652 32876,Berzosilla,1200,LE,207,ES,42.78053,-4.03753 32904,Blacos,1200,LE,207,ES,41.6809,-2.85826 32910,Blascomillán,1200,LE,207,ES,40.80146,-5.08703 32911,Blascosancho,1200,LE,207,ES,40.87744,-4.63743 32913,Bliecos,1200,LE,207,ES,41.5279,-2.27135 32914,Boada,1200,LE,207,ES,40.81569,-6.30611 32915,Boada de Campos,1200,LE,207,ES,41.98957,-4.8773 32916,Boadilla del Camino,1200,LE,207,ES,42.25934,-4.34525 32920,Bobadilla del Campo,1200,LE,207,ES,41.20432,-5.02294 32922,Boca de Huérgano,1200,LE,207,ES,42.97287,-4.92419 32924,Boceguillas,1200,LE,207,ES,41.33641,-3.63828 32925,Bocigas,1200,LE,207,ES,41.2307,-4.68128 32926,Bocos de Duero,1200,LE,207,ES,41.62339,-4.07048 32928,Boecillo,1200,LE,207,ES,41.5409,-4.6994 32929,Bogajo,1200,LE,207,ES,40.9071,-6.53065 32932,Bohoyo,1200,LE,207,ES,40.31584,-5.44294 32936,Bolaños de Campos,1200,LE,207,ES,42.0068,-5.28428 32967,Boñar,1200,LE,207,ES,42.8668,-5.32386 32948,Bonilla de la Sierra,1200,LE,207,ES,40.53063,-5.26452 32955,Borjabad,1200,LE,207,ES,41.55245,-2.36625 32958,Borobia,1200,LE,207,ES,41.66481,-1.89615 32961,Borrenes,1200,LE,207,ES,42.49019,-6.72338 33063,Bóveda del Río Almar,1200,LE,207,ES,40.85719,-5.2103 32968,Brabos,1200,LE,207,ES,40.77846,-4.93934 32973,Brañosera,1200,LE,207,ES,42.9362,-4.30833 32970,Brazacorta,1200,LE,207,ES,41.71737,-3.36711 32972,Brazuelo,1200,LE,207,ES,42.49702,-6.15734 32979,Bretó,1200,LE,207,ES,41.87917,-5.73902 32978,Bretocino,1200,LE,207,ES,41.8843,-5.75473 32982,Brieva,1200,LE,207,ES,41.03483,-4.05364 32985,Brime de Sog,1200,LE,207,ES,42.06162,-6.04791 32986,Brime de Urz,1200,LE,207,ES,42.03794,-5.87326 32987,Brincones,1200,LE,207,ES,41.11339,-6.34865 32989,Briviesca,1200,LE,207,ES,42.54993,-3.32315 32995,Buberos,1200,LE,207,ES,41.64692,-2.19406 33001,Buenamadre,1200,LE,207,ES,40.85705,-6.24987 33003,Buenavista,1200,LE,207,ES,40.76763,-5.61139 33004,Buenavista de Valdavia,1200,LE,207,ES,42.63788,-4.61446 33011,Bugedo,1200,LE,207,ES,42.64912,-3.01786 33012,Buitrago,1200,LE,207,ES,41.84735,-2.40858 33019,Buniel,1200,LE,207,ES,42.31197,-3.8223 33024,Burganes de Valverde,1200,LE,207,ES,41.9213,-5.78244 33025,Burgohondo,1200,LE,207,ES,40.41416,-4.78509 33026,Burgos,1200,LE,207,ES,42.34106,-3.70184 33034,Burón,1200,LE,207,ES,43.02486,-5.05119 33039,Bustillo de Chaves,1200,LE,207,ES,42.13114,-5.09169 33040,Bustillo de la Vega,1200,LE,207,ES,42.45605,-4.74115 33041,Bustillo del Oro,1200,LE,207,ES,41.6746,-5.46158 33042,Bustillo del Páramo,1200,LE,207,ES,42.44126,-5.7928 33043,Bustillo del Páramo de Carrión,1200,LE,207,ES,42.35509,-4.7398 33044,Busto de Bureba,1200,LE,207,ES,42.6591,-3.26512 33065,Caballar,1200,LE,207,ES,41.12159,-3.9642 33071,Cabañas de Polendos,1200,LE,207,ES,41.06667,-4.1101 33072,Cabañas de Sayago,1200,LE,207,ES,41.33333,-5.78333 33076,Cabañes de Esgueva,1200,LE,207,ES,41.83023,-3.78824 33078,Cabeza del Caballo,1200,LE,207,ES,41.12982,-6.55742 33081,Cabezabellosa de la Calzada,1200,LE,207,ES,41.04395,-5.48866 33085,Cabezas de Alambre,1200,LE,207,ES,40.94218,-4.84184 33086,Cabezas del Pozo,1200,LE,207,ES,41.00139,-4.95453 33087,Cabezas del Villar,1200,LE,207,ES,40.71557,-5.20956 33090,Cabezón,1200,LE,207,ES,41.73369,-4.6451 33095,Cabezón de la Sierra,1200,LE,207,ES,41.93434,-3.24153 33093,Cabezón de Valderaduey,1200,LE,207,ES,42.16793,-5.15892 33088,Cabezuela,1200,LE,207,ES,41.2359,-3.93173 33096,Cabizuela,1200,LE,207,ES,40.9009,-4.80212 33102,Cabrejas del Campo,1200,LE,207,ES,41.68096,-2.26964 33103,Cabrejas del Pinar,1200,LE,207,ES,41.79596,-2.84945 33105,Cabrerizos,1200,LE,207,ES,40.97808,-5.60907 33107,Cabreros del Monte,1200,LE,207,ES,41.84906,-5.27016 33108,Cabreros del Río,1200,LE,207,ES,42.40205,-5.54154 33109,Cabrillanes,1200,LE,207,ES,42.95343,-6.14849 33110,Cabrillas,1200,LE,207,ES,40.73977,-6.17873 33112,Cacabelos,1200,LE,207,ES,42.60021,-6.72373 33127,Calahorra de Boedo,1200,LE,207,ES,42.57409,-4.38485 33133,Calatañazor,1200,LE,207,ES,41.69879,-2.81837 33142,Caleruega,1200,LE,207,ES,41.82548,-3.48593 33152,Caltojar,1200,LE,207,ES,41.40226,-2.76436 33153,Calvarrasa de Abajo,1200,LE,207,ES,40.94638,-5.55258 33154,Calvarrasa de Arriba,1200,LE,207,ES,40.90672,-5.59199 33157,Calzada de Don Diego,1200,LE,207,ES,40.905,-5.90279 33159,Calzada de los Molinos,1200,LE,207,ES,42.32724,-4.65293 33158,Calzada de Valdunciel,1200,LE,207,ES,41.08663,-5.70219 33160,Calzada del Coto,1200,LE,207,ES,42.38613,-5.07809 33162,Calzadilla de Tera,1200,LE,207,ES,41.97899,-6.08243 33171,Camarzana de Tera,1200,LE,207,ES,41.99471,-6.02657 33183,Campaspero,1200,LE,207,ES,41.49208,-4.19608 33184,Campazas,1200,LE,207,ES,42.14219,-5.49349 33188,Campillo de Aranda,1200,LE,207,ES,41.61015,-3.73017 33190,Campillo de Azaba,1200,LE,207,ES,40.50951,-6.68705 33203,Campo de San Pedro,1200,LE,207,ES,41.42992,-3.54599 33204,Campo de Villavidel,1200,LE,207,ES,42.43906,-5.52808 33205,Campolara,1200,LE,207,ES,42.11953,-3.4274 33206,Camponaraya,1200,LE,207,ES,42.57799,-6.66709 33207,Camporredondo,1200,LE,207,ES,41.47333,-4.50503 33220,Canalejas de Peñafiel,1200,LE,207,ES,41.52513,-4.11546 33222,Canales,1200,LE,207,ES,41.00331,-4.90163 33531,Cañamaque,1200,LE,207,ES,41.44453,-2.23792 33227,Candelario,1200,LE,207,ES,40.36806,-5.74499 33228,Candeleda,1200,LE,207,ES,40.15521,-5.24045 33229,Candilichera,1200,LE,207,ES,41.70434,-2.30123 33230,Candín,1200,LE,207,ES,42.81695,-6.72848 33238,Canicosa de la Sierra,1200,LE,207,ES,41.93673,-3.04089 33240,Canillas de Abajo,1200,LE,207,ES,40.92266,-5.92905 33243,Canillas de Esgueva,1200,LE,207,ES,41.75464,-4.12502 33542,Cañizal,1200,LE,207,ES,41.16654,-5.36828 33546,Cañizo,1200,LE,207,ES,41.76955,-5.50199 33248,Cantabrana,1200,LE,207,ES,42.73422,-3.46704 33249,Cantagallo,1200,LE,207,ES,40.37239,-5.8189 33250,Cantalapiedra,1200,LE,207,ES,41.1263,-5.18351 33251,Cantalejo,1200,LE,207,ES,41.2576,-3.92791 33254,Cantalpino,1200,LE,207,ES,41.05341,-5.33045 33255,Cantaracillo,1200,LE,207,ES,40.90376,-5.16291 33258,Cantimpalos,1200,LE,207,ES,41.07406,-4.15988 33259,Cantiveros,1200,LE,207,ES,40.95215,-4.95455 33270,Capillas,1200,LE,207,ES,42.01362,-4.89051 33273,Carabantes,1200,LE,207,ES,41.55211,-1.9981 33275,Caracena,1200,LE,207,ES,41.38321,-3.09146 33278,Carazo,1200,LE,207,ES,41.96832,-3.3531 33279,Carbajales de Alba,1200,LE,207,ES,41.65347,-5.99706 33281,Carbajosa de la Sagrada,1200,LE,207,ES,40.93305,-5.65026 33284,Carbellino,1200,LE,207,ES,41.22975,-6.14901 33287,Carbonero el Mayor,1200,LE,207,ES,41.12257,-4.26478 33293,Carcedo de Bureba,1200,LE,207,ES,42.57818,-3.49831 33294,Carcedo de Burgos,1200,LE,207,ES,42.28696,-3.62274 33299,Cardeñadijo,1200,LE,207,ES,42.30217,-3.66779 33300,Cardeñajimeno,1200,LE,207,ES,42.33038,-3.62103 33301,Cardeñosa,1200,LE,207,ES,40.7424,-4.74579 33302,Cardeñosa de Volpejera,1200,LE,207,ES,42.23214,-4.70197 33897,Cármenes,1200,LE,207,ES,42.95863,-5.57346 33313,Carpio,1200,LE,207,ES,41.21329,-5.10907 33314,Carpio de Azaba,1200,LE,207,ES,40.59602,-6.6468 33315,Carracedelo,1200,LE,207,ES,42.55602,-6.73317 33318,Carrascal de Barregas,1200,LE,207,ES,40.97868,-5.76227 33319,Carrascal del Obispo,1200,LE,207,ES,40.76376,-5.99913 33322,Carrascosa de Abajo,1200,LE,207,ES,41.42338,-3.08955 33324,Carrascosa de la Sierra,1200,LE,207,ES,41.89535,-2.28003 33326,Carrias,1200,LE,207,ES,42.48141,-3.28319 33332,Carrión de los Condes,1200,LE,207,ES,42.3413,-4.60071 33329,Carrizo de la Ribera,1200,LE,207,ES,42.58395,-5.82881 33334,Carrocera,1200,LE,207,ES,42.79605,-5.74374 33341,Carucedo,1200,LE,207,ES,42.49029,-6.76565 33344,Casafranca,1200,LE,207,ES,40.59267,-5.76039 33349,Casarejos,1200,LE,207,ES,41.79651,-3.03251 33377,Casaseca de Campeán,1200,LE,207,ES,41.37429,-5.74648 33378,Casaseca de las Chanas,1200,LE,207,ES,41.4387,-5.67547 33380,Casasola de Arión,1200,LE,207,ES,41.57825,-5.24076 33382,Casavieja,1200,LE,207,ES,40.28325,-4.7667 33384,Cascajares de Bureba,1200,LE,207,ES,42.67884,-3.23768 33385,Cascajares de la Sierra,1200,LE,207,ES,42.06177,-3.39936 33388,Casillas,1200,LE,207,ES,40.3261,-4.57182 33390,Casillas de Flores,1200,LE,207,ES,40.38108,-6.75602 33392,Casla,1200,LE,207,ES,41.16602,-3.65643 33414,Castellanos de Castro,1200,LE,207,ES,42.32806,-4.03417 33415,Castellanos de Moriscos,1200,LE,207,ES,41.01917,-5.59065 33416,Castellanos de Villiquera,1200,LE,207,ES,41.05139,-5.69477 33417,Castellanos de Zapardiel,1200,LE,207,ES,41.0845,-4.90984 33444,Castil de Peones,1200,LE,207,ES,42.48347,-3.38461 33445,Castil de Vela,1200,LE,207,ES,41.98461,-4.9592 33448,Castildelgado,1200,LE,207,ES,42.43756,-3.08389 33449,Castilfalé,1200,LE,207,ES,42.21991,-5.42122 33451,Castilfrío de la Sierra,1200,LE,207,ES,41.91929,-2.30497 33458,Castillejo de Martín Viejo,1200,LE,207,ES,40.69728,-6.63763 33459,Castillejo de Mesleón,1200,LE,207,ES,41.281,-3.60137 33460,Castillejo de Robledo,1200,LE,207,ES,41.55867,-3.49689 33470,Castilruiz,1200,LE,207,ES,41.87678,-2.0593 33471,Castraz,1200,LE,207,ES,40.70517,-6.33383 33472,Castrejón de la Peña,1200,LE,207,ES,42.80795,-4.59901 33475,Castrillo de Cabrera,1200,LE,207,ES,42.34036,-6.54451 33476,Castrillo de Don Juan,1200,LE,207,ES,41.79086,-4.07031 33477,Castrillo de Duero,1200,LE,207,ES,41.57494,-4.01547 33480,Castrillo de la Guareña,1200,LE,207,ES,41.23043,-5.3255 33481,Castrillo de la Reina,1200,LE,207,ES,41.98714,-3.2356 33482,Castrillo de la Valduerna,1200,LE,207,ES,42.32393,-6.13455 33483,Castrillo de la Vega,1200,LE,207,ES,41.65166,-3.78089 33478,Castrillo de Onielo,1200,LE,207,ES,41.8582,-4.30125 33479,Castrillo de Villavega,1200,LE,207,ES,42.45463,-4.48069 33484,Castrillo del Val,1200,LE,207,ES,42.31401,-3.58501 33485,Castrillo-Tejeriego,1200,LE,207,ES,41.7034,-4.37142 33489,Castro de Fuentidueña,1200,LE,207,ES,41.42044,-3.85528 33493,Castrobol,1200,LE,207,ES,42.13717,-5.31423 33494,Castrocalbón,1200,LE,207,ES,42.19706,-5.98226 33495,Castrocontrigo,1200,LE,207,ES,42.18363,-6.19022 33496,Castrodeza,1200,LE,207,ES,41.64921,-4.95888 33497,Castrogonzalo,1200,LE,207,ES,41.99099,-5.60301 33498,Castrojimeno,1200,LE,207,ES,41.39659,-3.84726 33499,Castromembibre,1200,LE,207,ES,41.67246,-5.30473 33500,Castromocho,1200,LE,207,ES,42.03104,-4.82404 33501,Castromonte,1200,LE,207,ES,41.77355,-5.03909 33502,Castronuevo,1200,LE,207,ES,41.72046,-5.54315 33503,Castronuevo de Esgueva,1200,LE,207,ES,41.6818,-4.58866 33504,Castronuño,1200,LE,207,ES,41.38918,-5.26408 33505,Castropodame,1200,LE,207,ES,42.57943,-6.46837 33506,Castroponce,1200,LE,207,ES,42.12646,-5.18245 33507,Castroserna de Abajo,1200,LE,207,ES,41.20835,-3.73387 33508,Castroserracín,1200,LE,207,ES,41.39329,-3.80196 33510,Castroverde de Campos,1200,LE,207,ES,41.97049,-5.31434 33511,Castroverde de Cerrato,1200,LE,207,ES,41.75609,-4.22151 33520,Cayuela,1200,LE,207,ES,42.27223,-3.81895 33525,Cazurra,1200,LE,207,ES,41.41583,-5.70454 33548,Cebanico,1200,LE,207,ES,42.72526,-5.02568 33550,Cebrecos,1200,LE,207,ES,41.98408,-3.59661 33551,Cebreros,1200,LE,207,ES,40.45835,-4.46433 33552,Cebrones del Río,1200,LE,207,ES,42.25726,-5.82622 33556,Cedillo de la Torre,1200,LE,207,ES,41.42482,-3.60577 33561,Ceinos de Campos,1200,LE,207,ES,42.03284,-5.15007 33562,Celada del Camino,1200,LE,207,ES,42.26359,-3.93362 33575,Centenera de Andaluz,1200,LE,207,ES,41.50679,-2.71813 33576,Cepeda,1200,LE,207,ES,40.466,-6.041 33577,Cepeda la Mora,1200,LE,207,ES,40.4578,-5.04833 33578,Cerbón,1200,LE,207,ES,41.92934,-2.16895 33583,Cereceda de la Sierra,1200,LE,207,ES,40.56627,-6.0914 33584,Cerecinos de Campos,1200,LE,207,ES,41.90017,-5.48605 33585,Cerecinos del Carrizal,1200,LE,207,ES,41.68384,-5.65303 33586,Cerezal de Peñahorcada,1200,LE,207,ES,41.13071,-6.65357 33588,Cerezo de Abajo,1200,LE,207,ES,41.21817,-3.59126 33589,Cerezo de Arriba,1200,LE,207,ES,41.2389,-3.55846 33590,Cernadilla,1200,LE,207,ES,42.02083,-6.41701 33591,Cerralbo,1200,LE,207,ES,40.97347,-6.5871 33592,Cerratón de Juarros,1200,LE,207,ES,42.42227,-3.37347 33593,Cervatos de la Cueza,1200,LE,207,ES,42.29054,-4.76947 33597,Cervera de Pisuerga,1200,LE,207,ES,42.86676,-4.49796 33604,Cervillego de la Cruz,1200,LE,207,ES,41.18783,-4.94966 33612,Cevico de la Torre,1200,LE,207,ES,41.85113,-4.40973 33611,Cevico Navero,1200,LE,207,ES,41.86112,-4.18498 33614,Chamartín,1200,LE,207,ES,40.70267,-4.95769 33620,Chañe,1200,LE,207,ES,41.33834,-4.42764 33646,Chozas de Abajo,1200,LE,207,ES,42.50657,-5.68656 33655,Ciadoncha,1200,LE,207,ES,42.15814,-3.93235 33657,Cidones,1200,LE,207,ES,41.81444,-2.63991 33661,Cigales,1200,LE,207,ES,41.7578,-4.69848 33662,Cigudosa,1200,LE,207,ES,41.93333,-2.05 33663,Ciguñuela,1200,LE,207,ES,41.64064,-4.85688 33664,Cihuela,1200,LE,207,ES,41.40721,-1.99989 33672,Cillán,1200,LE,207,ES,40.70675,-4.98135 33668,Cilleros de la Bastida,1200,LE,207,ES,40.57614,-6.06094 33669,Cilleruelo de Abajo,1200,LE,207,ES,41.88405,-3.79723 33670,Cilleruelo de Arriba,1200,LE,207,ES,41.90487,-3.66102 33671,Cilleruelo de San Mamés,1200,LE,207,ES,41.4322,-3.56614 33673,Cimanes de la Vega,1200,LE,207,ES,42.11646,-5.59851 33674,Cimanes del Tejar,1200,LE,207,ES,42.61789,-5.80506 33680,Cipérez,1200,LE,207,ES,40.9621,-6.26552 33683,Ciria,1200,LE,207,ES,41.61831,-1.96578 33687,Ciruelos de Cervera,1200,LE,207,ES,41.90562,-3.53015 33689,Cirujales del Río,1200,LE,207,ES,41.86691,-2.32549 33690,Cisla,1200,LE,207,ES,40.96662,-5.01405 33691,Cisneros,1200,LE,207,ES,42.22046,-4.85807 33694,Cistérniga,1200,LE,207,ES,41.61294,-4.68697 33693,Cistierna,1200,LE,207,ES,42.80344,-5.12664 33698,Ciudad Rodrigo,1200,LE,207,ES,40.6,-6.53333 33711,Cobos de Cerrato,1200,LE,207,ES,42.02808,-4.00251 33712,Cobos de Fuentidueña,1200,LE,207,ES,41.38265,-3.92723 33713,Cobreros,1200,LE,207,ES,42.07323,-6.70053 33714,Coca,1200,LE,207,ES,41.21767,-4.52145 33715,Coca de Alba,1200,LE,207,ES,40.87833,-5.36537 33717,Codorniz,1200,LE,207,ES,41.06745,-4.60021 33720,Cogeces del Monte,1200,LE,207,ES,41.5103,-4.31721 33722,Cogollos,1200,LE,207,ES,42.19982,-3.70005 33734,Collado de Contreras,1200,LE,207,ES,40.88743,-4.9314 33735,Collado del Mirón,1200,LE,207,ES,40.55307,-5.35398 33732,Collado Hermoso,1200,LE,207,ES,41.03869,-3.91859 33737,Collazos de Boedo,1200,LE,207,ES,42.62009,-4.48294 33743,Colmenar de Montemayor,1200,LE,207,ES,40.39957,-5.95618 33758,Congosto,1200,LE,207,ES,42.61755,-6.52048 33759,Congosto de Valdavia,1200,LE,207,ES,42.71584,-4.63366 33767,Constanzana,1200,LE,207,ES,40.93821,-4.87515 33770,Contreras,1200,LE,207,ES,42.02004,-3.41084 33771,Coomonte,1200,LE,207,ES,42.11546,-5.81316 33776,Corbillos de los Oteros,1200,LE,207,ES,42.40769,-5.45963 33778,Corcos,1200,LE,207,ES,41.80946,-4.6927 33781,Cordovilla,1200,LE,207,ES,40.95095,-5.40725 33782,Cordovilla la Real,1200,LE,207,ES,42.07961,-4.25988 33787,Coreses,1200,LE,207,ES,41.54794,-5.62252 33799,Corral de Ayllón,1200,LE,207,ES,41.39081,-3.45856 33803,Corrales,1200,LE,207,ES,41.358,-5.72479 33804,Corrales de Duero,1200,LE,207,ES,41.67205,-4.04817 33813,Corullón,1200,LE,207,ES,42.57896,-6.81925 33814,Coruña del Conde,1200,LE,207,ES,41.76566,-3.39059 33816,Coscurita,1200,LE,207,ES,41.43483,-2.47571 33826,Covaleda,1200,LE,207,ES,41.93493,-2.88325 33827,Covarrubias,1200,LE,207,ES,42.05927,-3.51956 33830,Cozuelos de Fuentidueña,1200,LE,207,ES,41.39086,-4.09564 33841,Crémenes,1200,LE,207,ES,42.90357,-5.14374 33834,Crespos,1200,LE,207,ES,40.87128,-4.97094 33837,Cristóbal,1200,LE,207,ES,40.46923,-5.88967 33842,Cuadros,1200,LE,207,ES,42.71163,-5.63828 33849,Cubilla,1200,LE,207,ES,41.74905,-2.93717 33850,Cubillas de Cerrato,1200,LE,207,ES,41.79844,-4.4672 33853,Cubillas de los Oteros,1200,LE,207,ES,42.37199,-5.50877 33851,Cubillas de Rueda,1200,LE,207,ES,42.65626,-5.17528 33852,Cubillas de Santa Marta,1200,LE,207,ES,41.83358,-4.61463 33854,Cubillo,1200,LE,207,ES,41.12138,-3.90878 33855,Cubillo del Campo,1200,LE,207,ES,42.16854,-3.61025 33856,Cubillos,1200,LE,207,ES,41.57436,-5.7392 33857,Cubillos del Sil,1200,LE,207,ES,42.62519,-6.5636 33859,Cubo de Benavente,1200,LE,207,ES,42.1249,-6.16342 33860,Cubo de Bureba,1200,LE,207,ES,42.64011,-3.20626 33861,Cubo de la Solana,1200,LE,207,ES,41.60224,-2.42179 33863,Cuelgamures,1200,LE,207,ES,41.30738,-5.65769 33888,Cuéllar,1200,LE,207,ES,41.40155,-4.31474 33865,Cuenca de Campos,1200,LE,207,ES,42.05927,-5.05539 33867,Cueva de Ágreda,1200,LE,207,ES,41.7631,-1.88818 33872,Cuevas de Provanco,1200,LE,207,ES,41.54209,-3.96203 33873,Cuevas de San Clemente,1200,LE,207,ES,42.13009,-3.5684 33879,Cuevas del Valle,1200,LE,207,ES,40.29418,-5.00938 33886,Curiel de Duero,1200,LE,207,ES,41.64327,-4.1011 33918,Dehesa de Montejo,1200,LE,207,ES,42.81939,-4.51019 33919,Dehesa de Romanos,1200,LE,207,ES,42.63876,-4.43518 33930,Destriana,1200,LE,207,ES,42.32729,-6.09573 33931,Deza,1200,LE,207,ES,41.46373,-2.02046 33935,Dios le Guarde,1200,LE,207,ES,40.64283,-6.31511 33938,Domingo García,1200,LE,207,ES,41.11528,-4.37927 33944,Donhierro,1200,LE,207,ES,41.11642,-4.6967 33955,Doñinos de Ledesma,1200,LE,207,ES,41.01251,-6.03412 33956,Doñinos de Salamanca,1200,LE,207,ES,40.95978,-5.74349 33945,Donjimeno,1200,LE,207,ES,40.95978,-4.84627 33947,Donvidas,1200,LE,207,ES,41.08954,-4.80634 33959,Dueñas,1200,LE,207,ES,41.87717,-4.54714 33962,Duruelo,1200,LE,207,ES,41.23622,-3.64914 33963,Duruelo de la Sierra,1200,LE,207,ES,41.95448,-2.93086 33975,Ejeme,1200,LE,207,ES,40.76685,-5.53828 33979,El Barco de Ávila,1200,LE,207,ES,40.3571,-5.52365 33983,El Burgo de Osma,1200,LE,207,ES,41.58619,-3.06522 34000,El Hoyo de Pinares,1200,LE,207,ES,40.50084,-4.42357 34020,El Tiemblo,1200,LE,207,ES,40.41533,-4.50156 34044,Encina de San Silvestre,1200,LE,207,ES,41.01442,-6.09268 34046,Encinas,1200,LE,207,ES,41.37511,-3.66762 34048,Encinas de Abajo,1200,LE,207,ES,40.93493,-5.47037 34049,Encinas de Arriba,1200,LE,207,ES,40.7712,-5.55661 34050,Encinas de Esgueva,1200,LE,207,ES,41.75653,-4.10357 34052,Encinasola de los Comendadores,1200,LE,207,ES,41.03089,-6.53261 34053,Encinedo,1200,LE,207,ES,42.27049,-6.59368 34054,Encinillas,1200,LE,207,ES,41.01809,-4.15784 34056,Encío,1200,LE,207,ES,42.67115,-3.0868 34057,Endrinal,1200,LE,207,ES,40.59109,-5.80411 34061,Entrala,1200,LE,207,ES,41.43006,-5.75556 34078,Escalona del Prado,1200,LE,207,ES,41.16682,-4.12272 34081,Escarabajosa de Cabezas,1200,LE,207,ES,41.1047,-4.19411 34085,Escobar de Campos,1200,LE,207,ES,42.31337,-4.96573 34086,Escobar de Polendos,1200,LE,207,ES,41.09079,-4.13117 34087,Escobosa de Almazán,1200,LE,207,ES,41.48626,-2.3714 34093,Escurial de la Sierra,1200,LE,207,ES,40.61731,-5.9552 34096,Esguevillas de Esgueva,1200,LE,207,ES,41.75018,-4.38062 34101,Espadaña,1200,LE,207,ES,41.06085,-6.28457 34102,Espadañedo,1200,LE,207,ES,42.11618,-6.39419 34110,Espeja,1200,LE,207,ES,40.56565,-6.71582 34111,Espeja de San Marcelino,1200,LE,207,ES,41.80227,-3.2223 34113,Espejón,1200,LE,207,ES,41.83023,-3.25936 34117,Espino de la Orbada,1200,LE,207,ES,41.10693,-5.42515 34118,Espinosa de Cerrato,1200,LE,207,ES,41.96679,-3.95346 34119,Espinosa de Cervera,1200,LE,207,ES,41.89683,-3.46858 34122,Espinosa de los Monteros,1200,LE,207,ES,43.07754,-3.55365 34121,Espinosa de Villagonzalo,1200,LE,207,ES,42.47949,-4.37218 34123,Espinosa del Camino,1200,LE,207,ES,42.4059,-3.28019 34125,Espirdo,1200,LE,207,ES,40.99764,-4.07331 34142,Estepa de San Juan,1200,LE,207,ES,41.92661,-2.33322 34150,Estépar,1200,LE,207,ES,42.27731,-3.89946 34155,Fabero,1200,LE,207,ES,42.76803,-6.62651 34163,Faramontanos de Tábara,1200,LE,207,ES,41.83469,-5.88883 34164,Fariza,1200,LE,207,ES,41.41667,-6.26667 34174,Fermoselle,1200,LE,207,ES,41.31738,-6.39584 34177,Ferreras de Abajo,1200,LE,207,ES,41.89651,-6.07904 34178,Ferreras de Arriba,1200,LE,207,ES,41.89878,-6.19461 34180,Ferreruela,1200,LE,207,ES,41.76673,-6.07215 34186,Figueruela de Arriba,1200,LE,207,ES,41.86867,-6.44454 34196,Flores de Ávila,1200,LE,207,ES,40.93358,-5.07914 34197,Florida de Liébana,1200,LE,207,ES,41.02361,-5.76252 34200,Folgoso de la Ribera,1200,LE,207,ES,42.64693,-6.32035 34201,Fombellida,1200,LE,207,ES,41.76693,-4.18409 34203,Fompedraza,1200,LE,207,ES,41.53541,-4.14483 34208,Fonfría,1200,LE,207,ES,41.63493,-6.14081 34215,Fontihoyuelo,1200,LE,207,ES,42.16192,-5.05791 34216,Fontioso,1200,LE,207,ES,41.94273,-3.73872 34217,Fontiveros,1200,LE,207,ES,40.92997,-4.96445 34221,Forfoleda,1200,LE,207,ES,41.09779,-5.74979 34236,Frades de la Sierra,1200,LE,207,ES,40.65687,-5.78223 34239,Frandovínez,1200,LE,207,ES,42.31032,-3.83783 34240,Frechilla,1200,LE,207,ES,42.13768,-4.84112 34241,Frechilla de Almazán,1200,LE,207,ES,41.42656,-2.51444 34245,Fresneda de Cuéllar,1200,LE,207,ES,41.31905,-4.44938 34247,Fresneda de la Sierra Tirón,1200,LE,207,ES,42.31535,-3.13596 34248,Fresnedilla,1200,LE,207,ES,40.23233,-4.62201 34250,Fresnedoso,1200,LE,207,ES,40.43619,-5.70969 34252,Fresneña,1200,LE,207,ES,42.41366,-3.13453 34253,Fresnillo de las Dueñas,1200,LE,207,ES,41.647,-3.64558 34255,Fresno de Cantespino,1200,LE,207,ES,41.3682,-3.4995 34256,Fresno de Caracena,1200,LE,207,ES,41.45247,-3.09123 34260,Fresno de la Fuente,1200,LE,207,ES,41.39243,-3.64491 34261,Fresno de la Polvorosa,1200,LE,207,ES,42.0831,-5.76969 34262,Fresno de la Ribera,1200,LE,207,ES,41.52926,-5.56658 34263,Fresno de la Vega,1200,LE,207,ES,42.34545,-5.53587 34257,Fresno de Rodilla,1200,LE,207,ES,42.42054,-3.48507 34258,Fresno de Sayago,1200,LE,207,ES,41.31848,-5.97129 34264,Fresno del Río,1200,LE,207,ES,42.68176,-4.81734 34254,Fresno El Viejo,1200,LE,207,ES,41.19752,-5.14413 34271,Frías,1200,LE,207,ES,42.76225,-3.29394 34265,Friera de Valverde,1200,LE,207,ES,41.91214,-5.84153 34273,Frómista,1200,LE,207,ES,42.26667,-4.40546 34269,Frumales,1200,LE,207,ES,41.38333,-4.18631 34287,Fuensaldaña,1200,LE,207,ES,41.70617,-4.76547 34298,Fuente de Santa Cruz,1200,LE,207,ES,41.20972,-4.6353 34301,Fuente el Olmo de Fuentidueña,1200,LE,207,ES,41.37929,-4.00086 34303,Fuente el Sol,1200,LE,207,ES,41.17603,-4.9343 34291,Fuente Encalada,1200,LE,207,ES,42.11011,-5.99622 34310,Fuentearmegil,1200,LE,207,ES,41.71496,-3.18362 34311,Fuentebureba,1200,LE,207,ES,42.634,-3.2351 34312,Fuentecambrón,1200,LE,207,ES,41.50579,-3.32872 34313,Fuentecantos,1200,LE,207,ES,41.84929,-2.42846 34314,Fuentecén,1200,LE,207,ES,41.62852,-3.86867 34315,Fuenteguinaldo,1200,LE,207,ES,40.42876,-6.67528 34318,Fuentelapeña,1200,LE,207,ES,41.25144,-5.38325 34319,Fuentelcésped,1200,LE,207,ES,41.59162,-3.64064 34323,Fuentelisendo,1200,LE,207,ES,41.62274,-3.90129 34325,Fuentelsaz de Soria,1200,LE,207,ES,41.86586,-2.41525 34327,Fuentemolinos,1200,LE,207,ES,41.60477,-3.85005 34328,Fuentenebro,1200,LE,207,ES,41.52873,-3.75449 34330,Fuentepelayo,1200,LE,207,ES,41.22249,-4.1757 34332,Fuentepiñel,1200,LE,207,ES,41.39892,-4.04295 34331,Fuentepinilla,1200,LE,207,ES,41.56683,-2.76288 34333,Fuenterroble de Salvatierra,1200,LE,207,ES,40.56466,-5.73379 34340,Fuentes de Año,1200,LE,207,ES,41.01769,-4.89907 34341,Fuentes de Béjar,1200,LE,207,ES,40.50815,-5.6927 34342,Fuentes de Carbajal,1200,LE,207,ES,42.17776,-5.44606 34346,Fuentes de Magaña,1200,LE,207,ES,41.93521,-2.1795 34347,Fuentes de Nava,1200,LE,207,ES,42.08333,-4.78333 34348,Fuentes de Oñoro,1200,LE,207,ES,40.59102,-6.81144 34349,Fuentes de Ropel,1200,LE,207,ES,42.00377,-5.54532 34351,Fuentes de Valdepero,1200,LE,207,ES,42.07532,-4.5005 34352,Fuentesaúco,1200,LE,207,ES,41.23043,-5.49722 34353,Fuentesaúco de Fuentidueña,1200,LE,207,ES,41.42445,-4.06215 34354,Fuentesecas,1200,LE,207,ES,41.63077,-5.47252 34355,Fuentesoto,1200,LE,207,ES,41.45664,-3.91835 34357,Fuentespina,1200,LE,207,ES,41.63079,-3.68475 34358,Fuentespreadas,1200,LE,207,ES,41.32627,-5.62798 34359,Fuentestrún,1200,LE,207,ES,41.87466,-2.08283 34360,Fuentidueña,1200,LE,207,ES,41.44226,-3.97899 34372,Gajates,1200,LE,207,ES,40.78254,-5.36506 34376,Galbarros,1200,LE,207,ES,42.52729,-3.43827 34379,Galende,1200,LE,207,ES,42.1044,-6.66252 34382,Galindo y Perahuy,1200,LE,207,ES,40.94397,-5.8741 34383,Galinduste,1200,LE,207,ES,40.66266,-5.54003 34384,Galisancho,1200,LE,207,ES,40.74418,-5.55471 34386,Gallegos,1200,LE,207,ES,41.07508,-3.78591 34387,Gallegos de Argañán,1200,LE,207,ES,40.63146,-6.70246 34388,Gallegos de Hornija,1200,LE,207,ES,41.6098,-5.09768 34389,Gallegos de Sobrinos,1200,LE,207,ES,40.71693,-5.11224 34390,Gallegos del Pan,1200,LE,207,ES,41.59985,-5.58117 34391,Gallegos del Río,1200,LE,207,ES,41.73497,-6.17435 34400,Gamonal,1200,LE,207,ES,42.35664,-3.67321 34401,Gamones,1200,LE,207,ES,41.4669,-6.17621 34409,Garcibuey,1200,LE,207,ES,40.51552,-5.99439 34410,Garcihernández,1200,LE,207,ES,40.86096,-5.43567 34411,Garcillán,1200,LE,207,ES,40.97771,-4.26577 34412,Garcirrey,1200,LE,207,ES,40.90049,-6.1312 34416,Garganta del Villar,1200,LE,207,ES,40.44965,-5.1042 34421,Garrafe de Torío,1200,LE,207,ES,42.73285,-5.5236 34423,Garray,1200,LE,207,ES,41.81617,-2.44592 34437,Gatón de Campos,1200,LE,207,ES,42.04984,-4.98078 34440,Gavilanes,1200,LE,207,ES,40.27791,-4.85321 34444,Gejuelo del Barro,1200,LE,207,ES,41.07633,-6.12332 34449,Gema,1200,LE,207,ES,41.41855,-5.64906 34450,Gemuño,1200,LE,207,ES,40.59159,-4.78178 34455,Geria,1200,LE,207,ES,41.57868,-4.87663 34465,Gimialcón,1200,LE,207,ES,40.87705,-5.12308 34478,Golmayo,1200,LE,207,ES,41.7662,-2.52267 34481,Golpejas,1200,LE,207,ES,40.99981,-5.90687 34564,Gómara,1200,LE,207,ES,41.62347,-2.22493 34482,Gomecello,1200,LE,207,ES,41.0428,-5.53585 34485,Gordaliza del Pino,1200,LE,207,ES,42.34357,-5.15731 34486,Gordoncillo,1200,LE,207,ES,42.13557,-5.40181 34488,Gormaz,1200,LE,207,ES,41.49232,-3.005 34489,Gotarrendura,1200,LE,207,ES,40.82652,-4.7409 34492,Gradefes,1200,LE,207,ES,42.62396,-5.22691 34495,Grajal de Campos,1200,LE,207,ES,42.32073,-5.01938 34496,Grajera,1200,LE,207,ES,41.37319,-3.61304 34500,Granja de Moreruela,1200,LE,207,ES,41.81026,-5.73893 34504,Granucillo,1200,LE,207,ES,42.05209,-5.92777 34511,Grijalba,1200,LE,207,ES,42.43002,-4.11896 34512,Grijota,1200,LE,207,ES,42.05289,-4.58309 34513,Grisaleña,1200,LE,207,ES,42.59122,-3.26416 34532,Guadramiro,1200,LE,207,ES,41.01703,-6.49369 34536,Guardo,1200,LE,207,ES,42.78966,-4.84823 34540,Guaza de Campos,1200,LE,207,ES,42.13365,-4.90949 34546,Guijo de Ávila,1200,LE,207,ES,40.53078,-5.6397 34547,Guijuelo,1200,LE,207,ES,40.55757,-5.67067 34551,Guisando,1200,LE,207,ES,40.22225,-5.1395 34555,Gusendos de los Oteros,1200,LE,207,ES,42.37818,-5.43088 34556,Gutierre-Muñoz,1200,LE,207,ES,40.98295,-4.63839 34571,Hacinas,1200,LE,207,ES,41.98514,-3.28709 34574,Haza,1200,LE,207,ES,41.61667,-3.81667 34583,Herguijuela de Ciudad Rodrigo,1200,LE,207,ES,40.4586,-6.52075 34584,Herguijuela de la Sierra,1200,LE,207,ES,40.44535,-6.07445 34585,Herguijuela del Campo,1200,LE,207,ES,40.63102,-5.86398 34721,Hérmedes de Cerrato,1200,LE,207,ES,41.81972,-4.17361 34587,Hermisende,1200,LE,207,ES,41.96898,-6.89616 34589,Hernansancho,1200,LE,207,ES,40.85753,-4.73045 34595,Herrera de Pisuerga,1200,LE,207,ES,42.59492,-4.33034 34596,Herrera de Soria,1200,LE,207,ES,41.76269,-3.01243 34597,Herrera de Valdecañas,1200,LE,207,ES,42.04828,-4.20004 34600,Herreros de Suso,1200,LE,207,ES,40.80361,-5.03892 34603,Herrín de Campos,1200,LE,207,ES,42.12476,-4.95239 34613,Higuera de las Dueñas,1200,LE,207,ES,40.23903,-4.60361 34623,Hinojosa de Duero,1200,LE,207,ES,40.98674,-6.79529 34626,Hinojosa del Campo,1200,LE,207,ES,41.73844,-2.09946 34637,Honrubia de la Cuesta,1200,LE,207,ES,41.50998,-3.70453 34638,Hontalbilla,1200,LE,207,ES,41.34551,-4.12149 34640,Hontanares de Eresma,1200,LE,207,ES,40.98273,-4.20439 34641,Hontanas,1200,LE,207,ES,42.31312,-4.04529 34643,Hontangas,1200,LE,207,ES,41.58216,-3.7955 34646,Hontoria de Cerrato,1200,LE,207,ES,41.91061,-4.44209 34648,Hontoria de la Cantera,1200,LE,207,ES,42.18879,-3.64251 34647,Hontoria de Valdearados,1200,LE,207,ES,41.74488,-3.51983 34649,Hontoria del Pinar,1200,LE,207,ES,41.84838,-3.16245 34653,Horcajo de las Torres,1200,LE,207,ES,41.06497,-5.09092 34650,Horcajo de Montemayor,1200,LE,207,ES,40.42265,-5.89427 34662,Hornillos de Cerrato,1200,LE,207,ES,41.98772,-4.27207 34663,Hornillos del Camino,1200,LE,207,ES,42.33863,-3.9256 34668,Hortigüela,1200,LE,207,ES,42.06842,-3.42578 34669,Hospital de Órbigo,1200,LE,207,ES,42.46354,-5.88636 34673,Hoyales de Roa,1200,LE,207,ES,41.65893,-3.86202 34675,Hoyocasero,1200,LE,207,ES,40.3989,-4.97455 34676,Hoyorredondo,1200,LE,207,ES,40.4627,-5.41097 34678,Hoyos de Miguel Muñoz,1200,LE,207,ES,40.39237,-5.06713 34679,Hoyos del Collado,1200,LE,207,ES,40.35945,-5.20027 34680,Hoyos del Espino,1200,LE,207,ES,40.35623,-5.17505 34715,Huérmeces,1200,LE,207,ES,42.5225,-3.77072 34687,Huerta de Arriba,1200,LE,207,ES,42.11672,-3.08211 34691,Huerta del Rey,1200,LE,207,ES,41.8391,-3.34755 34699,Humada,1200,LE,207,ES,42.66667,-4.08333 34703,Hurones,1200,LE,207,ES,42.40571,-3.61588 34704,Hurtumpascual,1200,LE,207,ES,40.692,-5.11379 34705,Husillos,1200,LE,207,ES,42.09054,-4.52709 34726,Ibeas de Juarros,1200,LE,207,ES,42.33088,-3.53519 34730,Ibrillos,1200,LE,207,ES,42.45431,-3.08238 34736,Iglesiarrubia,1200,LE,207,ES,41.97383,-3.84701 34737,Iglesias,1200,LE,207,ES,42.29807,-3.98932 34742,Igüeña,1200,LE,207,ES,42.72853,-6.27738 34760,Iruelos,1200,LE,207,ES,41.14135,-6.32808 34764,Isar,1200,LE,207,ES,42.3614,-3.9304 34765,Iscar,1200,LE,207,ES,41.36117,-4.53348 34770,Itero de la Vega,1200,LE,207,ES,42.28804,-4.25677 34771,Itero del Castillo,1200,LE,207,ES,42.28988,-4.24441 34772,Ituero de Azaba,1200,LE,207,ES,40.48487,-6.69272 34773,Ituero y Lama,1200,LE,207,ES,40.80066,-4.37917 34778,Izagre,1200,LE,207,ES,42.2241,-5.25727 34794,Jambrina,1200,LE,207,ES,41.39196,-5.66411 34800,Jaramillo de la Fuente,1200,LE,207,ES,42.11472,-3.31239 34799,Jaramillo Quemado,1200,LE,207,ES,42.08568,-3.35868 34820,Joarilla de las Matas,1200,LE,207,ES,42.28755,-5.17855 34825,Juarros de Voltoya,1200,LE,207,ES,41.03097,-4.51922 34830,Junciana,1200,LE,207,ES,40.41076,-5.55698 34833,Justel,1200,LE,207,ES,42.14861,-6.29594 34835,Juzbado,1200,LE,207,ES,41.07791,-5.8614 34848,La Adrada,1200,LE,207,ES,40.29953,-4.63589 34850,La Alberca,1200,LE,207,ES,40.48908,-6.11107 34856,La Bañeza,1200,LE,207,ES,42.30026,-5.89772 34859,La Bouza,1200,LE,207,ES,40.83626,-6.79551 34866,La Carrera,1200,LE,207,ES,40.34777,-5.55474 34869,La Cuesta,1200,LE,207,ES,41.0828,-3.96017 34873,La Fuente de San Esteban,1200,LE,207,ES,40.80161,-6.25852 34889,La Lastrilla,1200,LE,207,ES,40.96817,-4.10468 34901,La Pedraja de Portillo,1200,LE,207,ES,41.47124,-4.64639 34908,La Pola de Gordón,1200,LE,207,ES,42.85658,-5.66768 34918,La Robla,1200,LE,207,ES,42.80302,-5.62904 34925,La Seca,1200,LE,207,ES,41.41364,-4.90552 34936,Labajos,1200,LE,207,ES,40.84335,-4.52005 34940,Lagartos,1200,LE,207,ES,42.40578,-4.90454 34945,Laguna Dalga,1200,LE,207,ES,42.33192,-5.7522 34947,Laguna de Contreras,1200,LE,207,ES,41.49513,-4.02874 34948,Laguna de Duero,1200,LE,207,ES,41.58151,-4.72332 34949,Laguna de Negrillos,1200,LE,207,ES,42.23889,-5.66066 34952,Lagunilla,1200,LE,207,ES,40.32491,-5.97132 34962,Langa,1200,LE,207,ES,41.0055,-4.85946 34963,Langa de Duero,1200,LE,207,ES,41.60985,-3.40061 34965,Langayo,1200,LE,207,ES,41.56986,-4.19866 34966,Languilla,1200,LE,207,ES,41.44926,-3.42438 34968,Lantadilla,1200,LE,207,ES,42.34078,-4.27866 34981,Larrodrigo,1200,LE,207,ES,40.73722,-5.44895 34987,Las Navas del Marqués,1200,LE,207,ES,40.60244,-4.33449 35000,Lastras de Cuéllar,1200,LE,207,ES,41.29762,-4.1067 35001,Lastras del Pozo,1200,LE,207,ES,40.8792,-4.34658 35016,Ledesma,1200,LE,207,ES,41.08829,-6.00178 35018,Ledigos,1200,LE,207,ES,42.3548,-4.8648 35019,Ledrada,1200,LE,207,ES,40.46878,-5.72038 35045,León,1200,LE,207,ES,42.60003,-5.57032 35032,Lerma,1200,LE,207,ES,42.02609,-3.75978 35048,Liceras,1200,LE,207,ES,41.37939,-3.24371 35054,Linares de Riofrío,1200,LE,207,ES,40.58338,-5.92091 35065,Llamas de la Ribera,1200,LE,207,ES,42.63504,-5.82524 35068,Llano de Bureba,1200,LE,207,ES,42.62435,-3.4589 35069,Llano de Olmedo,1200,LE,207,ES,41.26727,-4.61386 35103,Lomas,1200,LE,207,ES,42.27362,-4.55095 35139,Losacino,1200,LE,207,ES,41.68084,-6.07986 35140,Losacio,1200,LE,207,ES,41.71092,-6.04059 35146,Lubián,1200,LE,207,ES,42.03569,-6.90541 35156,Luelmo,1200,LE,207,ES,41.4403,-6.13338 35163,Lumbrales,1200,LE,207,ES,40.93501,-6.71948 35170,Luyego,1200,LE,207,ES,42.36667,-6.23333 35182,Machacón,1200,LE,207,ES,40.92623,-5.5243 35183,Macotera,1200,LE,207,ES,40.83105,-5.28526 35184,Maderuelo,1200,LE,207,ES,41.48644,-3.52218 35187,Madridanos,1200,LE,207,ES,41.47967,-5.60459 35190,Madrigal de las Altas Torres,1200,LE,207,ES,41.08968,-4.99863 35191,Madrigal del Monte,1200,LE,207,ES,42.14464,-3.67571 35193,Madrigalejo del Monte,1200,LE,207,ES,42.12442,-3.72509 35195,Madroñal,1200,LE,207,ES,40.46407,-6.06271 35198,Maello,1200,LE,207,ES,40.80929,-4.51186 35203,Magaña,1200,LE,207,ES,41.90089,-2.16269 35202,Magaz de Cepeda,1200,LE,207,ES,42.53967,-6.0717 35206,Mahamud,1200,LE,207,ES,42.11981,-3.9406 35207,Mahide,1200,LE,207,ES,41.86917,-6.37784 35211,Maire de Castroponce,1200,LE,207,ES,42.11283,-5.78475 35217,Maján,1200,LE,207,ES,41.46888,-2.30268 35225,Malpartida,1200,LE,207,ES,40.76269,-5.23149 35226,Malpartida de Corneja,1200,LE,207,ES,40.52208,-5.35026 35233,Malva,1200,LE,207,ES,41.65467,-5.48657 35235,Mamblas,1200,LE,207,ES,41.01925,-5.00873 35236,Mambrilla de Castrejón,1200,LE,207,ES,41.66634,-3.98448 35237,Mambrillas de Lara,1200,LE,207,ES,42.09446,-3.46195 35238,Mamolar,1200,LE,207,ES,41.92762,-3.36228 35240,Mancera de Abajo,1200,LE,207,ES,40.83974,-5.19933 35241,Mancera de Arriba,1200,LE,207,ES,40.79139,-5.14772 35245,Manciles,1200,LE,207,ES,42.45728,-3.94461 35248,Manganeses de la Lampreana,1200,LE,207,ES,41.75085,-5.71048 35249,Manganeses de la Polvorosa,1200,LE,207,ES,42.03563,-5.74694 35252,Manjabálago,1200,LE,207,ES,40.66441,-5.07719 35255,Manquillos,1200,LE,207,ES,42.20518,-4.56841 35258,Mansilla de las Mulas,1200,LE,207,ES,42.49886,-5.41738 35257,Mansilla Mayor,1200,LE,207,ES,42.50943,-5.44271 35260,Mantinos,1200,LE,207,ES,42.75259,-4.84213 35262,Manzanal de Arriba,1200,LE,207,ES,41.99217,-6.44012 35263,Manzanal de los Infantes,1200,LE,207,ES,42.05428,-6.38288 35264,Manzanal del Barco,1200,LE,207,ES,41.63501,-5.94671 35272,Manzanillo,1200,LE,207,ES,41.58617,-4.18826 35279,Maraña,1200,LE,207,ES,43.04991,-5.17726 35277,Marazoleja,1200,LE,207,ES,40.96086,-4.33882 35278,Marazuela,1200,LE,207,ES,40.97912,-4.36506 35287,Marcilla de Campos,1200,LE,207,ES,42.3177,-4.3967 35298,Martiago,1200,LE,207,ES,40.4542,-6.4901 35299,Martiherrero,1200,LE,207,ES,40.67392,-4.78156 35306,Martín de Yeltes,1200,LE,207,ES,40.77594,-6.29162 35303,Martín Miguel,1200,LE,207,ES,40.9522,-4.27166 35304,Martín Muñoz de la Dehesa,1200,LE,207,ES,41.06652,-4.68676 35305,Martín Muñoz de las Posadas,1200,LE,207,ES,40.99546,-4.59672 35300,Martinamor,1200,LE,207,ES,40.80676,-5.59913 35309,Martínez,1200,LE,207,ES,40.63046,-5.34801 35310,Marugán,1200,LE,207,ES,40.89943,-4.38383 35311,Marzales,1200,LE,207,ES,41.58644,-5.13455 35328,Masueco,1200,LE,207,ES,41.20352,-6.58938 35330,Mata de Cuéllar,1200,LE,207,ES,41.39655,-4.47167 35331,Matabuena,1200,LE,207,ES,41.0959,-3.75827 35333,Matadeón de los Oteros,1200,LE,207,ES,42.33776,-5.36887 35334,Matalebreras,1200,LE,207,ES,41.84116,-2.04644 35335,Matallana de Torío,1200,LE,207,ES,42.8656,-5.52034 35336,Matamala de Almazán,1200,LE,207,ES,41.50563,-2.64122 35338,Matapozuelos,1200,LE,207,ES,41.41423,-4.79122 35342,Matilla de Arzón,1200,LE,207,ES,42.10499,-5.64156 35343,Matilla de los Caños,1200,LE,207,ES,41.54818,-4.96761 35344,Matilla de los Caños del Río,1200,LE,207,ES,40.82539,-5.94276 35345,Matilla la Seca,1200,LE,207,ES,41.57935,-5.5003 35348,Mayalde,1200,LE,207,ES,41.2508,-5.79767 35349,Mayorga,1200,LE,207,ES,42.16687,-5.26304 35355,Mazariegos,1200,LE,207,ES,42.02691,-4.71542 35359,Mazuecos de Valdeginate,1200,LE,207,ES,42.16814,-4.84059 35360,Mazuela,1200,LE,207,ES,42.20767,-3.9192 35365,Mecerreyes,1200,LE,207,ES,42.09536,-3.57393 35368,Mediana de Voltoya,1200,LE,207,ES,40.70104,-4.56341 35370,Medina de Pomar,1200,LE,207,ES,42.92938,-3.48804 35371,Medina de Ríoseco,1200,LE,207,ES,41.88327,-5.04405 35373,Medina del Campo,1200,LE,207,ES,41.31239,-4.91413 35374,Medinaceli,1200,LE,207,ES,41.17224,-2.43476 35375,Medinilla,1200,LE,207,ES,40.43967,-5.61772 35379,Megeces,1200,LE,207,ES,41.40828,-4.56166 35385,Melgar de Abajo,1200,LE,207,ES,42.24344,-5.14216 35386,Melgar de Arriba,1200,LE,207,ES,42.26806,-5.09712 35387,Melgar de Fernamental,1200,LE,207,ES,42.40445,-4.24484 35388,Melgar de Tera,1200,LE,207,ES,41.96618,-6.0139 35389,Melgar de Yuso,1200,LE,207,ES,42.25381,-4.25394 35393,Membibre de la Hoz,1200,LE,207,ES,41.44958,-4.09571 35394,Membribe de la Sierra,1200,LE,207,ES,40.69123,-5.80568 35402,Meneses de Campos,1200,LE,207,ES,41.94142,-4.91927 35404,Mengamuñoz,1200,LE,207,ES,40.50006,-4.99983 35409,Mesegar de Corneja,1200,LE,207,ES,40.50209,-5.30131 35418,Micereces de Tera,1200,LE,207,ES,41.98886,-5.87133 35419,Micieces de Ojeda,1200,LE,207,ES,42.69078,-4.46166 35422,Mieza,1200,LE,207,ES,41.16424,-6.69137 35425,Migueláñez,1200,LE,207,ES,41.12155,-4.3641 35426,Mijares,1200,LE,207,ES,40.29655,-4.83651 35429,Milagros,1200,LE,207,ES,41.575,-3.69907 35434,Milles de la Polvorosa,1200,LE,207,ES,41.92339,-5.73309 35438,Mingorría,1200,LE,207,ES,40.75192,-4.66583 35458,Miño de San Esteban,1200,LE,207,ES,41.53584,-3.34579 35449,Miranda de Azán,1200,LE,207,ES,40.88752,-5.68182 35450,Miranda de Ebro,1200,LE,207,ES,42.6865,-2.94695 35451,Miranda del Castañar,1200,LE,207,ES,40.48448,-5.99581 35453,Miraveche,1200,LE,207,ES,42.67396,-3.19947 35455,Mironcillo,1200,LE,207,ES,40.55435,-4.82449 35464,Modúbar de la Emparedada,1200,LE,207,ES,42.26118,-3.65965 35466,Mogarraz,1200,LE,207,ES,40.49264,-6.05327 35474,Mojados,1200,LE,207,ES,41.43237,-4.6649 35475,Molacillos,1200,LE,207,ES,41.58269,-5.66046 35476,Molezuelas de la Carballeda,1200,LE,207,ES,42.08166,-6.18723 35479,Molinaseca,1200,LE,207,ES,42.53829,-6.51997 35481,Molinillo,1200,LE,207,ES,40.46898,-5.94493 35483,Molinos de Duero,1200,LE,207,ES,41.88603,-2.78682 35491,Mombeltrán,1200,LE,207,ES,40.25987,-5.01749 35492,Momblona,1200,LE,207,ES,41.4442,-2.3466 35493,Mombuey,1200,LE,207,ES,42.02283,-6.33027 35498,Monasterio de la Sierra,1200,LE,207,ES,42.0518,-3.19314 35496,Monasterio de Rodilla,1200,LE,207,ES,42.45775,-3.46965 35497,Monasterio de Vega,1200,LE,207,ES,42.23015,-5.18095 35500,Moncalvillo,1200,LE,207,ES,41.95413,-3.19886 35511,Monfarracinos,1200,LE,207,ES,41.55468,-5.70795 35515,Monforte de la Sierra,1200,LE,207,ES,40.48264,-6.05671 35519,Monleón,1200,LE,207,ES,40.58192,-5.84312 35518,Monleras,1200,LE,207,ES,41.18704,-6.22622 35525,Monsagro,1200,LE,207,ES,40.50343,-6.2711 35526,Monsalupe,1200,LE,207,ES,40.76953,-4.78131 35535,Montamarta,1200,LE,207,ES,41.64724,-5.80402 35542,Monteagudo de las Vicarías,1200,LE,207,ES,41.36485,-2.1696 35552,Montejo,1200,LE,207,ES,40.63246,-5.62287 35553,Montejo de Arévalo,1200,LE,207,ES,41.14027,-4.66414 35556,Montejo de la Vega de la Serrezuela,1200,LE,207,ES,41.55032,-3.65406 35554,Montejo de Tiermes,1200,LE,207,ES,41.36838,-3.20016 35559,Montemayor de Pililla,1200,LE,207,ES,41.50874,-4.45745 35560,Montemayor del Río,1200,LE,207,ES,40.34836,-5.89427 35562,Montenegro de Cameros,1200,LE,207,ES,42.08924,-2.75406 35566,Monterrubio,1200,LE,207,ES,40.84914,-4.35001 35567,Monterrubio de Armuña,1200,LE,207,ES,41.02651,-5.64389 35569,Monterrubio de la Sierra,1200,LE,207,ES,40.75592,-5.69329 35581,Montorio,1200,LE,207,ES,42.58469,-3.77724 35591,Monzón de Campos,1200,LE,207,ES,42.11604,-4.49283 35595,Moradillo de Roa,1200,LE,207,ES,41.55164,-3.79118 35599,Moral de la Reina,1200,LE,207,ES,41.98611,-5.07208 35598,Moral de Sayago,1200,LE,207,ES,41.47019,-6.1006 35605,Moraleja de las Panaderas,1200,LE,207,ES,41.27636,-4.82521 35603,Moraleja de Matacabras,1200,LE,207,ES,41.10732,-4.95717 35604,Moraleja de Sayago,1200,LE,207,ES,41.16916,-6.00369 35606,Moraleja del Vino,1200,LE,207,ES,41.46385,-5.65631 35607,Morales de Campos,1200,LE,207,ES,41.86068,-5.17252 35608,Morales de Toro,1200,LE,207,ES,41.53737,-5.30642 35609,Morales de Valverde,1200,LE,207,ES,41.93643,-5.89255 35610,Morales del Vino,1200,LE,207,ES,41.44736,-5.7307 35611,Moralina,1200,LE,207,ES,41.49001,-6.1367 35613,Morasverdes,1200,LE,207,ES,40.60019,-6.27503 35620,Moratinos,1200,LE,207,ES,42.36191,-4.92831 35628,Moreruela de los Infanzones,1200,LE,207,ES,41.63118,-5.70614 35627,Moreruela de Tábara,1200,LE,207,ES,41.79588,-5.86849 35630,Morille,1200,LE,207,ES,40.80693,-5.69833 35631,Moriscos,1200,LE,207,ES,41.00818,-5.58184 35635,Morón de Almazán,1200,LE,207,ES,41.41361,-2.41317 35632,Moronta,1200,LE,207,ES,40.97688,-6.43103 35642,Mota del Marqués,1200,LE,207,ES,41.63247,-5.17681 35651,Mozárbez,1200,LE,207,ES,40.85652,-5.65144 35649,Mozoncillo,1200,LE,207,ES,41.14539,-4.18753 35652,Mucientes,1200,LE,207,ES,41.74278,-4.76191 35654,Mudá,1200,LE,207,ES,42.8753,-4.39426 35656,Muelas de los Caballeros,1200,LE,207,ES,42.12843,-6.33719 35657,Muga de Sayago,1200,LE,207,ES,41.38779,-6.19777 35692,Muñana,1200,LE,207,ES,40.59042,-5.01447 35693,Muñico,1200,LE,207,ES,40.70678,-5.02717 35694,Muñogalindo,1200,LE,207,ES,40.60324,-4.89895 35695,Muñogrande,1200,LE,207,ES,40.82181,-4.92223 35696,Muñomer del Peco,1200,LE,207,ES,40.85878,-4.87992 35697,Muñopedro,1200,LE,207,ES,40.88804,-4.47213 35698,Muñopepe,1200,LE,207,ES,40.63408,-4.81876 35699,Muñosancho,1200,LE,207,ES,40.92097,-5.03559 35700,Muñotello,1200,LE,207,ES,40.54236,-5.04187 35701,Muñoveros,1200,LE,207,ES,41.17234,-3.95161 35674,Murias de Paredes,1200,LE,207,ES,42.85027,-6.19164 35676,Muriel de la Fuente,1200,LE,207,ES,41.7232,-2.86 35675,Muriel Viejo,1200,LE,207,ES,41.78261,-2.91522 35709,Nafría de Ucero,1200,LE,207,ES,41.72273,-3.09499 35714,Narrillos del Álamo,1200,LE,207,ES,40.56673,-5.46584 35713,Narrillos del Rebollar,1200,LE,207,ES,40.66488,-4.96577 35715,Narros,1200,LE,207,ES,41.84923,-2.29474 35716,Narros de Matalayegua,1200,LE,207,ES,40.6988,-5.92658 35717,Narros de Saldueña,1200,LE,207,ES,40.87268,-4.86909 35718,Narros del Castillo,1200,LE,207,ES,40.85869,-5.0601 35719,Narros del Puerto,1200,LE,207,ES,40.54131,-4.99291 35721,Nava de Arévalo,1200,LE,207,ES,40.97803,-4.77573 35722,Nava de Béjar,1200,LE,207,ES,40.47518,-5.67856 35723,Nava de Francia,1200,LE,207,ES,40.53572,-6.11628 35726,Nava de la Asunción,1200,LE,207,ES,41.15586,-4.48751 35724,Nava de Roa,1200,LE,207,ES,41.61326,-3.96442 35725,Nava de Sotrobal,1200,LE,207,ES,40.89039,-5.28562 35727,Nava del Barco,1200,LE,207,ES,40.29321,-5.54022 35728,Nava del Rey,1200,LE,207,ES,41.33036,-5.08095 35729,Navacarros,1200,LE,207,ES,40.39776,-5.71425 35730,Navacepedilla de Corneja,1200,LE,207,ES,40.48602,-5.1838 35733,Navadijos,1200,LE,207,ES,40.42524,-5.08285 35734,Navaescurial,1200,LE,207,ES,40.47163,-5.27756 35735,Navafría,1200,LE,207,ES,41.05514,-3.82478 35737,Navahondilla,1200,LE,207,ES,40.3251,-4.49661 35741,Navalacruz,1200,LE,207,ES,40.43993,-4.93122 35746,Navaleno,1200,LE,207,ES,41.8383,-3.00418 35747,Navales,1200,LE,207,ES,40.78857,-5.47863 35748,Navalilla,1200,LE,207,ES,41.34146,-3.93211 35749,Navalmanzano,1200,LE,207,ES,41.21594,-4.25631 35750,Navalmoral,1200,LE,207,ES,40.46028,-4.76859 35751,Navalmoral de Béjar,1200,LE,207,ES,40.42264,-5.7831 35754,Navalosa,1200,LE,207,ES,40.40212,-4.92999 35755,Navalperal de Pinares,1200,LE,207,ES,40.59398,-4.41149 35756,Navalperal de Tormes,1200,LE,207,ES,40.3528,-5.30084 35759,Navaluenga,1200,LE,207,ES,40.41123,-4.70897 35762,Navamorales,1200,LE,207,ES,40.47618,-5.47893 35764,Navaquesera,1200,LE,207,ES,40.42558,-4.91108 35767,Navares de Ayuso,1200,LE,207,ES,41.37447,-3.70745 35768,Navares de Enmedio,1200,LE,207,ES,41.38096,-3.72283 35769,Navares de las Cuevas,1200,LE,207,ES,41.41431,-3.75076 35771,Navarredonda de Gredos,1200,LE,207,ES,40.36136,-5.13268 35772,Navarredonda de la Rinconada,1200,LE,207,ES,40.60657,-6.01169 35773,Navarredondilla,1200,LE,207,ES,40.45416,-4.82199 35774,Navarrevisca,1200,LE,207,ES,40.36417,-4.89352 35777,Navas de Bureba,1200,LE,207,ES,42.6809,-3.32698 35780,Navas de Oro,1200,LE,207,ES,41.19627,-4.43754 35785,Navasfrías,1200,LE,207,ES,40.29679,-6.81975 35787,Navatalgordo,1200,LE,207,ES,40.4152,-4.87155 35788,Navatejares,1200,LE,207,ES,40.33602,-5.5322 35791,Navianos de Valverde,1200,LE,207,ES,41.95319,-5.81781 35795,Nebreda,1200,LE,207,ES,41.96881,-3.6343 35798,Negrilla de Palencia,1200,LE,207,ES,41.09185,-5.59165 35799,Neila,1200,LE,207,ES,42.06016,-2.99691 35800,Neila de San Miguel,1200,LE,207,ES,40.42372,-5.6509 35801,Nepas,1200,LE,207,ES,41.52639,-2.39866 35806,Nieva,1200,LE,207,ES,41.08191,-4.42501 35811,Niharra,1200,LE,207,ES,40.58945,-4.83895 35815,Nogal de las Huertas,1200,LE,207,ES,42.39255,-4.64156 35821,Nolay,1200,LE,207,ES,41.52721,-2.35061 35829,Noviercas,1200,LE,207,ES,41.71194,-2.03433 35833,Nueva Villa de las Torres,1200,LE,207,ES,41.26762,-5.05685 35861,Oencia,1200,LE,207,ES,42.54758,-6.96859 35869,Ojos-Albos,1200,LE,207,ES,40.70596,-4.51633 35875,Olea de Boedo,1200,LE,207,ES,42.6099,-4.4504 35889,Olivares de Duero,1200,LE,207,ES,41.63755,-4.36547 35900,Olmedillo de Roa,1200,LE,207,ES,41.78362,-3.93419 35901,Olmedo,1200,LE,207,ES,41.28706,-4.68878 35902,Olmedo de Camaces,1200,LE,207,ES,40.87967,-6.6236 35903,Olmillos de Castro,1200,LE,207,ES,41.73179,-5.96791 35904,Olmillos de Muñó,1200,LE,207,ES,42.20322,-3.93911 35905,Olmos de Esgueva,1200,LE,207,ES,41.68815,-4.52255 35906,Olmos de Ojeda,1200,LE,207,ES,42.72274,-4.42446 35907,Olmos de Peñafiel,1200,LE,207,ES,41.57142,-4.04316 35910,Olombrada,1200,LE,207,ES,41.41492,-4.16071 35916,Olvega,1200,LE,207,ES,41.77901,-1.98391 35988,Oña,1200,LE,207,ES,42.734,-3.41459 35921,Oncala,1200,LE,207,ES,41.97021,-2.31493 35930,Onzonilla,1200,LE,207,ES,42.52435,-5.5816 35931,Oquillas,1200,LE,207,ES,41.83085,-3.70564 35934,Orbita,1200,LE,207,ES,40.99846,-4.64833 35962,Ortigosa de Pestaño,1200,LE,207,ES,41.08741,-4.39516 35963,Ortigosa del Monte,1200,LE,207,ES,40.84182,-4.17724 35971,Oseja de Sajambre,1200,LE,207,ES,43.13671,-5.03786 35972,Osornillo,1200,LE,207,ES,42.37047,-4.29153 35978,Otero de Bodas,1200,LE,207,ES,41.93868,-6.15024 35979,Otero de Herreros,1200,LE,207,ES,40.82016,-4.2099 35990,Padiernos,1200,LE,207,ES,40.62168,-4.84523 35991,Padilla de Abajo,1200,LE,207,ES,42.40774,-4.17652 35992,Padilla de Arriba,1200,LE,207,ES,42.43803,-4.19094 35994,Padrones de Bureba,1200,LE,207,ES,42.70582,-3.53296 35999,Pajarejos,1200,LE,207,ES,41.38994,-3.58997 36000,Pajares de Adaja,1200,LE,207,ES,40.92398,-4.64048 36001,Pajares de la Laguna,1200,LE,207,ES,41.08754,-5.50888 36002,Pajares de la Lampreana,1200,LE,207,ES,41.71551,-5.69351 36003,Pajares de los Oteros,1200,LE,207,ES,42.3301,-5.47313 36006,Palacios de Goda,1200,LE,207,ES,41.11798,-4.78496 36008,Palacios de la Sierra,1200,LE,207,ES,41.96392,-3.12788 36009,Palacios de la Valduerna,1200,LE,207,ES,42.32773,-5.9383 36007,Palacios de Sanabria,1200,LE,207,ES,42.05901,-6.52362 36010,Palacios del Arzobispo,1200,LE,207,ES,41.16655,-5.88933 36011,Palacios del Pan,1200,LE,207,ES,41.60242,-5.87773 36012,Palacios del Sil,1200,LE,207,ES,42.87601,-6.4315 36013,Palaciosrubios,1200,LE,207,ES,41.05238,-5.19507 36018,Palazuelo de Vedija,1200,LE,207,ES,41.92966,-5.14534 36019,Palazuelos de Eresma,1200,LE,207,ES,40.93055,-4.06071 36021,Palazuelos de la Sierra,1200,LE,207,ES,42.21162,-3.46014 36020,Palazuelos de Muñó,1200,LE,207,ES,42.19692,-3.98984 36022,Palencia,1200,LE,207,ES,42.00955,-4.52406 36023,Palencia de Negrilla,1200,LE,207,ES,41.09439,-5.60168 36025,Palenzuela,1200,LE,207,ES,42.09518,-4.13039 36044,Pampliega,1200,LE,207,ES,42.20582,-3.98666 36046,Pancorbo,1200,LE,207,ES,42.63418,-3.1118 36051,Papatrigo,1200,LE,207,ES,40.8679,-4.83399 36056,Parada de Arriba,1200,LE,207,ES,40.98655,-5.79332 36057,Parada de Rubiales,1200,LE,207,ES,41.14818,-5.43638 36060,Paradinas de San Juan,1200,LE,207,ES,40.98325,-5.15418 36482,Páramo de Boedo,1200,LE,207,ES,42.57842,-4.40042 36483,Páramo del Sil,1200,LE,207,ES,42.82056,-6.48747 36063,Pardilla,1200,LE,207,ES,41.55183,-3.71089 36066,Paredes de Nava,1200,LE,207,ES,42.15367,-4.69193 36074,Pastores,1200,LE,207,ES,40.51508,-6.51018 36086,Payo de Ojeda,1200,LE,207,ES,42.71859,-4.47752 36089,Pedrajas de San Esteban,1200,LE,207,ES,41.34145,-4.58225 36092,Pedraza,1200,LE,207,ES,41.13092,-3.81116 36093,Pedraza de Alba,1200,LE,207,ES,40.75502,-5.37524 36094,Pedraza de Campos,1200,LE,207,ES,41.98419,-4.73524 36099,Pedro Bernardo,1200,LE,207,ES,40.24214,-4.90963 36104,Pedrosa de Duero,1200,LE,207,ES,41.71289,-3.98804 36105,Pedrosa de la Vega,1200,LE,207,ES,42.48159,-4.74678 36107,Pedrosa del Páramo,1200,LE,207,ES,42.44208,-3.9719 36106,Pedrosa del Príncipe,1200,LE,207,ES,42.24918,-4.19849 36108,Pedrosa del Rey,1200,LE,207,ES,41.55617,-5.20466 36109,Pedrosillo de Alba,1200,LE,207,ES,40.82277,-5.39506 36110,Pedrosillo de los Aires,1200,LE,207,ES,40.71524,-5.70511 36111,Pedrosillo el Ralo,1200,LE,207,ES,41.06305,-5.54794 36117,Peguerinos,1200,LE,207,ES,40.6262,-4.23154 36118,Pelabravo,1200,LE,207,ES,40.93658,-5.57916 36120,Pelarrodríguez,1200,LE,207,ES,40.88723,-6.21271 36121,Pelayos,1200,LE,207,ES,40.64985,-5.5758 36123,Pelayos del Arroyo,1200,LE,207,ES,41.05086,-3.94104 36124,Peleagonzalo,1200,LE,207,ES,41.48175,-5.48304 36125,Peleas de Abajo,1200,LE,207,ES,41.3926,-5.68966 36161,Peñacaballera,1200,LE,207,ES,40.34353,-5.86121 36162,Peñafiel,1200,LE,207,ES,41.60165,-4.11418 36164,Peñaflor de Hornija,1200,LE,207,ES,41.71159,-4.98333 36166,Peñalba de Ávila,1200,LE,207,ES,40.77266,-4.74595 36170,Peñaparda,1200,LE,207,ES,40.32093,-6.66948 36171,Peñaranda de Bracamonte,1200,LE,207,ES,40.90108,-5.20026 36172,Peñaranda de Duero,1200,LE,207,ES,41.68849,-3.47863 36173,Peñarandilla,1200,LE,207,ES,40.88348,-5.3936 36176,Peñausende,1200,LE,207,ES,41.28662,-5.86755 36129,Peque,1200,LE,207,ES,42.07297,-6.27489 36131,Peral de Arlanza,1200,LE,207,ES,42.07612,-4.07733 36135,Peralejos de Abajo,1200,LE,207,ES,41.00469,-6.36238 36136,Peralejos de Arriba,1200,LE,207,ES,41.0041,-6.33362 36138,Perales,1200,LE,207,ES,42.19398,-4.58105 36145,Peranzanes,1200,LE,207,ES,42.87725,-6.63383 36148,Pereruela,1200,LE,207,ES,41.4165,-5.87812 36150,Perilla de Castro,1200,LE,207,ES,41.7254,-5.87636 36151,Peromingo,1200,LE,207,ES,40.46386,-5.77238 36152,Perosillo,1200,LE,207,ES,41.39294,-4.14115 36485,Pías,1200,LE,207,ES,42.08333,-7.0 36181,Piedrahita de Castro,1200,LE,207,ES,41.68089,-5.72886 36182,Piedralaves,1200,LE,207,ES,40.31721,-4.70025 36226,Piérnigas,1200,LE,207,ES,42.5903,-3.41337 36227,Piña de Campos,1200,LE,207,ES,42.21326,-4.43657 36228,Piña de Esgueva,1200,LE,207,ES,41.72843,-4.42823 36194,Pinarejos,1200,LE,207,ES,41.2595,-4.29364 36195,Pinarnegrillo,1200,LE,207,ES,41.19098,-4.20967 36198,Pineda de la Sierra,1200,LE,207,ES,42.2156,-3.2969 36199,Pinedas,1200,LE,207,ES,40.44493,-5.96025 36230,Piñel de Abajo,1200,LE,207,ES,41.67459,-4.14655 36231,Piñel de Arriba,1200,LE,207,ES,41.69923,-4.12808 36204,Pinilla de los Barruecos,1200,LE,207,ES,41.91791,-3.30371 36205,Pinilla de los Moros,1200,LE,207,ES,42.06815,-3.32706 36203,Pinilla de Toro,1200,LE,207,ES,41.62783,-5.36414 36206,Pinilla del Campo,1200,LE,207,ES,41.71691,-2.0835 36209,Pino del Río,1200,LE,207,ES,42.64504,-4.80795 36222,Pitiegua,1200,LE,207,ES,41.0621,-5.46647 36225,Pizarral,1200,LE,207,ES,40.6145,-5.65238 36247,Población de Arroyo,1200,LE,207,ES,42.33675,-4.87398 36248,Población de Campos,1200,LE,207,ES,42.26994,-4.44744 36249,Población de Cerrato,1200,LE,207,ES,41.79298,-4.42874 36250,Pobladura de Pelayo García,1200,LE,207,ES,42.30602,-5.6856 36251,Pobladura de Valderaduey,1200,LE,207,ES,41.70009,-5.54189 36252,Pobladura del Valle,1200,LE,207,ES,42.10257,-5.73333 36258,Polentinos,1200,LE,207,ES,42.93932,-4.52887 36263,Pollos,1200,LE,207,ES,41.44406,-5.12491 36268,Pomar de Valdivia,1200,LE,207,ES,42.77437,-4.16756 36270,Ponferrada,1200,LE,207,ES,42.54664,-6.59619 36291,Portillo,1200,LE,207,ES,41.47867,-4.58967 36292,Portillo de Soria,1200,LE,207,ES,41.63504,-2.12142 36294,Porto,1200,LE,207,ES,42.16737,-6.89934 36302,Posada de Valdeón,1200,LE,207,ES,43.15154,-4.92102 36306,Poveda,1200,LE,207,ES,40.56799,-5.07909 36308,Poveda de las Cintas,1200,LE,207,ES,41.04596,-5.26019 36310,Poyales del Hoyo,1200,LE,207,ES,40.17254,-5.16597 36311,Poza de la Sal,1200,LE,207,ES,42.66542,-3.5014 36312,Poza de la Vega,1200,LE,207,ES,42.57823,-4.79845 36313,Pozal de Gallinas,1200,LE,207,ES,41.31831,-4.83936 36314,Pozalmuro,1200,LE,207,ES,41.77449,-2.10215 36315,Pozanco,1200,LE,207,ES,40.80095,-4.66772 36319,Pozo de Urama,1200,LE,207,ES,42.25438,-4.89389 36322,Pozoantiguo,1200,LE,207,ES,41.5973,-5.4366 36327,Pozos de Hinojo,1200,LE,207,ES,40.91303,-6.41144 36336,Pozuelo de la Orden,1200,LE,207,ES,41.82138,-5.25891 36334,Pozuelo de Tábara,1200,LE,207,ES,41.78502,-5.89455 36337,Pozuelo del Páramo,1200,LE,207,ES,42.17101,-5.76813 36340,Pradales,1200,LE,207,ES,41.45555,-3.70753 36402,Prádanos de Bureba,1200,LE,207,ES,42.50264,-3.34752 36403,Prádanos de Ojeda,1200,LE,207,ES,42.68156,-4.34659 36404,Prádena,1200,LE,207,ES,41.13911,-3.68823 36344,Prado,1200,LE,207,ES,41.92077,-5.42027 36345,Prado de la Guzpeña,1200,LE,207,ES,42.78309,-5.02554 36347,Pradoluengo,1200,LE,207,ES,42.32484,-3.20284 36349,Pradosegar,1200,LE,207,ES,40.5502,-5.07015 36351,Presencio,1200,LE,207,ES,42.18656,-3.90135 36352,Priaranza del Bierzo,1200,LE,207,ES,42.50978,-6.67017 36356,Prioro,1200,LE,207,ES,42.89481,-4.96349 36394,Provincia de Ávila,1200,LE,207,ES,40.58333,-5.0 36364,Provincia de Burgos,1200,LE,207,ES,42.33939,-3.70789 36377,Provincia de León,1200,LE,207,ES,42.66667,-6.0 36383,Provincia de Palencia,1200,LE,207,ES,42.41667,-4.5 36385,Provincia de Salamanca,1200,LE,207,ES,40.83333,-6.0 36387,Provincia de Segovia,1200,LE,207,ES,41.16667,-4.0 36389,Provincia de Soria,1200,LE,207,ES,41.66667,-2.66667 36391,Provincia de Valladolid,1200,LE,207,ES,41.58333,-4.66667 36392,Provincia de Zamora,1200,LE,207,ES,41.75,-6.0 36413,Puebla de Azaba,1200,LE,207,ES,40.44732,-6.74616 36418,Puebla de Lillo,1200,LE,207,ES,43.00691,-5.27387 36420,Puebla de Pedraza,1200,LE,207,ES,41.20557,-3.91378 36421,Puebla de San Medel,1200,LE,207,ES,40.51073,-5.73673 36423,Puebla de Sanabria,1200,LE,207,ES,42.05401,-6.6335 36425,Puebla de Yeltes,1200,LE,207,ES,40.62528,-6.1815 36432,Pueblica de Valverde,1200,LE,207,ES,41.91843,-5.89975 36435,Puente de Domingo Flórez,1200,LE,207,ES,42.41166,-6.82077 36438,Puente del Congosto,1200,LE,207,ES,40.49041,-5.52628 36442,Puentedura,1200,LE,207,ES,42.04134,-3.58227 36443,Puertas,1200,LE,207,ES,41.09681,-6.28752 36444,Puerto Castilla,1200,LE,207,ES,40.288,-5.62366 36451,Puerto de Béjar,1200,LE,207,ES,40.35052,-5.83756 36449,Puerto Seguro,1200,LE,207,ES,40.82718,-6.76109 36474,Puras,1200,LE,207,ES,41.18333,-4.65 36493,Quemada,1200,LE,207,ES,41.70073,-3.57476 36503,Quintana del Castillo,1200,LE,207,ES,42.65987,-6.04978 36504,Quintana del Marco,1200,LE,207,ES,42.2067,-5.8503 36505,Quintana del Pidio,1200,LE,207,ES,41.75886,-3.75121 36506,Quintana del Puente,1200,LE,207,ES,42.08471,-4.20649 36501,Quintana Redonda,1200,LE,207,ES,41.63905,-2.61449 36507,Quintana y Congosto,1200,LE,207,ES,42.25585,-6.03636 36508,Quintanabureba,1200,LE,207,ES,42.58665,-3.36685 36516,Quintanaélez,1200,LE,207,ES,42.66921,-3.29877 36509,Quintanaortuño,1200,LE,207,ES,42.45,-3.68333 36510,Quintanapalla,1200,LE,207,ES,42.40914,-3.53296 36512,Quintanar de la Sierra,1200,LE,207,ES,41.98288,-3.03765 36514,Quintanas de Gormaz,1200,LE,207,ES,41.50926,-2.97631 36515,Quintanavides,1200,LE,207,ES,42.48084,-3.42449 36517,Quintanilla de Arriba,1200,LE,207,ES,41.61974,-4.21774 36522,Quintanilla de la Mata,1200,LE,207,ES,41.98855,-3.76756 36519,Quintanilla de Onésimo,1200,LE,207,ES,41.6249,-4.36291 36518,Quintanilla de Onsoña,1200,LE,207,ES,42.46937,-4.66385 36520,Quintanilla de Trigueros,1200,LE,207,ES,41.85449,-4.65931 36521,Quintanilla de Urz,1200,LE,207,ES,42.0329,-5.84866 36523,Quintanilla del Coco,1200,LE,207,ES,41.98333,-3.51667 36524,Quintanilla del Molar,1200,LE,207,ES,41.98935,-5.44928 36525,Quintanilla del Monte,1200,LE,207,ES,41.86812,-5.34928 36526,Quintanilla del Olmo,1200,LE,207,ES,41.90561,-5.40726 36530,Quiruelas de Vidriales,1200,LE,207,ES,42.01762,-5.82947 36533,Rabanales,1200,LE,207,ES,41.74287,-6.27674 36535,Rabanera del Pinar,1200,LE,207,ES,41.89375,-3.19665 36708,Rábano,1200,LE,207,ES,41.53314,-4.06214 36709,Rábano de Aliste,1200,LE,207,ES,41.7443,-6.43302 36710,Rábanos,1200,LE,207,ES,42.31971,-3.27029 36536,Rabé de las Calzadas,1200,LE,207,ES,42.34065,-3.83414 36713,Rágama,1200,LE,207,ES,40.99768,-5.12724 36545,Ramiro,1200,LE,207,ES,41.22845,-4.78608 36546,Rapariegos,1200,LE,207,ES,41.09498,-4.65271 36550,Rasueros,1200,LE,207,ES,41.02344,-5.07377 36554,Rebolledo de la Torre,1200,LE,207,ES,42.68931,-4.22693 36555,Rebollo,1200,LE,207,ES,41.19318,-3.85771 36558,Recuerda,1200,LE,207,ES,41.47408,-2.9946 36559,Redecilla del Camino,1200,LE,207,ES,42.43804,-3.06547 36560,Redecilla del Campo,1200,LE,207,ES,42.46675,-3.11531 36565,Regueras de Arriba,1200,LE,207,ES,42.29414,-5.85958 36566,Regumiel de la Sierra,1200,LE,207,ES,41.95623,-2.98843 36569,Reinoso,1200,LE,207,ES,42.50915,-3.38466 36570,Reinoso de Cerrato,1200,LE,207,ES,41.97624,-4.38337 36572,Rello,1200,LE,207,ES,41.33297,-2.74925 36574,Remondo,1200,LE,207,ES,41.341,-4.4839 36577,Renedo de la Vega,1200,LE,207,ES,42.45348,-4.70298 36579,Renieblas,1200,LE,207,ES,41.82009,-2.37236 36582,Requena de Campos,1200,LE,207,ES,42.30796,-4.34304 36583,Respenda de la Peña,1200,LE,207,ES,42.76512,-4.6854 36588,Retortillo,1200,LE,207,ES,40.80132,-6.35951 36589,Retortillo de Soria,1200,LE,207,ES,41.31092,-2.98228 36590,Retuerta,1200,LE,207,ES,42.02945,-3.50679 36593,Revellinos,1200,LE,207,ES,41.88982,-5.56871 36594,Revenga de Campos,1200,LE,207,ES,42.28401,-4.48218 36595,Revilla de Collazos,1200,LE,207,ES,42.6296,-4.50343 36596,Revilla del Campo,1200,LE,207,ES,42.21081,-3.54289 36597,Revillarruz,1200,LE,207,ES,42.23006,-3.65246 36598,Reyero,1200,LE,207,ES,42.94882,-5.19892 36599,Rezmondo,1200,LE,207,ES,42.51565,-4.23877 36600,Reznos,1200,LE,207,ES,41.5909,-2.02779 36602,Riaguas de San Bartolomé,1200,LE,207,ES,41.4264,-3.48893 36605,Riaño,1200,LE,207,ES,42.97705,-5.00352 36604,Riaza,1200,LE,207,ES,41.27826,-3.47787 36612,Ribas de Campos,1200,LE,207,ES,42.15249,-4.51649 36616,Riberos de la Cueza,1200,LE,207,ES,42.27881,-4.72503 36619,Ribota,1200,LE,207,ES,41.36477,-3.42964 36622,Riego de la Vega,1200,LE,207,ES,42.39138,-5.98102 36628,Riocavado de la Sierra,1200,LE,207,ES,42.15209,-3.19759 36715,Ríofrío de Aliste,1200,LE,207,ES,41.81724,-6.17741 36640,Rivilla de Barajas,1200,LE,207,ES,40.9021,-4.98836 36643,Roa,1200,LE,207,ES,41.69699,-3.92782 36644,Roales,1200,LE,207,ES,41.5517,-5.77211 36645,Robladillo,1200,LE,207,ES,41.60838,-4.90992 36646,Robleda,1200,LE,207,ES,40.38469,-6.60726 36647,Robleda-Cervantes,1200,LE,207,ES,42.08246,-6.59414 36657,Robliza de Cojos,1200,LE,207,ES,40.86766,-5.97786 36662,Roda de Eresma,1200,LE,207,ES,41.02852,-4.1813 36666,Rojas,1200,LE,207,ES,42.57781,-3.44195 36667,Rollamienta,1200,LE,207,ES,41.92592,-2.53125 36668,Rollán,1200,LE,207,ES,40.9623,-5.91753 36674,Roperuelos del Páramo,1200,LE,207,ES,42.2378,-5.78235 36682,Roturas,1200,LE,207,ES,41.66791,-4.11901 36684,Royuela de Río Franco,1200,LE,207,ES,42.00217,-3.95547 36688,Rubena,1200,LE,207,ES,42.38746,-3.57485 36695,Rubí de Bracamonte,1200,LE,207,ES,41.21421,-4.92491 36693,Rublacedo de Abajo,1200,LE,207,ES,42.55332,-3.50236 36696,Rucandio,1200,LE,207,ES,42.75111,-3.54166 36697,Rueda,1200,LE,207,ES,41.41231,-4.95885 36701,Ruesga,1200,LE,207,ES,42.86413,-4.52942 36723,Sabero,1200,LE,207,ES,42.83593,-5.14875 36731,Sacramenia,1200,LE,207,ES,41.49419,-3.9621 36734,Saelices de Mayorga,1200,LE,207,ES,42.21206,-5.20534 36736,Saelices el Chico,1200,LE,207,ES,40.66998,-6.63271 36741,Sahagún,1200,LE,207,ES,42.37085,-5.02942 36744,Salamanca,1200,LE,207,ES,40.96882,-5.66388 36750,Salas de Bureba,1200,LE,207,ES,42.6919,-3.47359 36751,Salas de los Infantes,1200,LE,207,ES,42.02242,-3.28631 36752,Salce,1200,LE,207,ES,41.26996,-6.21875 36754,Saldaña,1200,LE,207,ES,42.52146,-4.73605 36755,Saldaña de Burgos,1200,LE,207,ES,42.25838,-3.69707 36756,Saldeana,1200,LE,207,ES,41.02068,-6.64015 36757,Salduero,1200,LE,207,ES,41.88946,-2.7967 36765,Salinas de Pisuerga,1200,LE,207,ES,42.85046,-4.37783 36767,Salinillas de Bureba,1200,LE,207,ES,42.55243,-3.38753 36771,Salmoral,1200,LE,207,ES,40.80137,-5.2191 36772,Salobral,1200,LE,207,ES,40.61179,-4.81013 36781,Salvadiós,1200,LE,207,ES,40.87836,-5.09629 36782,Salvador de Zapardiel,1200,LE,207,ES,41.11696,-4.87486 36787,Salvatierra de Tormes,1200,LE,207,ES,40.59007,-5.59763 36790,Samboal,1200,LE,207,ES,41.25758,-4.41727 36791,Samir de los Caños,1200,LE,207,ES,41.6728,-6.16415 36796,San Adrián de Juarros,1200,LE,207,ES,42.27427,-3.47551 36797,San Adrián del Valle,1200,LE,207,ES,42.13033,-5.72905 36800,San Agustín del Pozo,1200,LE,207,ES,41.88613,-5.59351 36803,San Andrés del Rabanedo,1200,LE,207,ES,42.61174,-5.61671 36807,San Bartolomé de Béjar,1200,LE,207,ES,40.40783,-5.66261 36808,San Bartolomé de Corneja,1200,LE,207,ES,40.49257,-5.38519 36814,San Cebrián de Campos,1200,LE,207,ES,42.20063,-4.53127 36815,San Cebrián de Castro,1200,LE,207,ES,41.70632,-5.75605 36816,San Cebrián de Mazote,1200,LE,207,ES,41.68022,-5.14847 36817,San Cebrián de Mudá,1200,LE,207,ES,42.89261,-4.38719 36819,San Cristóbal de Boedo,1200,LE,207,ES,42.54194,-4.35325 36820,San Cristóbal de Cuéllar,1200,LE,207,ES,41.40591,-4.40445 36821,San Cristóbal de Entreviñas,1200,LE,207,ES,42.04575,-5.63468 36823,San Cristóbal de la Cuesta,1200,LE,207,ES,41.02919,-5.61771 36824,San Cristóbal de la Polantera,1200,LE,207,ES,42.39041,-5.90732 36825,San Cristóbal de la Vega,1200,LE,207,ES,41.11214,-4.64448 36822,San Cristóbal de Segovia,1200,LE,207,ES,40.95225,-4.07652 36826,San Emiliano,1200,LE,207,ES,42.97164,-6.00075 36828,San Esteban de Gormaz,1200,LE,207,ES,41.57436,-3.20418 36830,San Esteban de la Sierra,1200,LE,207,ES,40.5068,-5.90619 36831,San Esteban de los Patos,1200,LE,207,ES,40.74705,-4.62413 36829,San Esteban de Nogales,1200,LE,207,ES,42.15995,-5.93065 36832,San Esteban del Molar,1200,LE,207,ES,41.93717,-5.55158 36833,San Esteban del Valle,1200,LE,207,ES,40.2751,-4.98215 36834,San Felices de los Gallegos,1200,LE,207,ES,40.84954,-6.70804 36837,San García de Ingelmos,1200,LE,207,ES,40.76912,-5.11523 36838,San Ildefonso,1200,LE,207,ES,40.90182,-4.00685 36846,San Juan de la Encinilla,1200,LE,207,ES,40.8302,-4.83957 36847,San Juan de la Nava,1200,LE,207,ES,40.4788,-4.68238 36850,San Juan del Molinillo,1200,LE,207,ES,40.45909,-4.81711 36851,San Juan del Monte,1200,LE,207,ES,41.68313,-3.52337 36853,San Justo,1200,LE,207,ES,42.13321,-6.62388 36854,San Justo de la Vega,1200,LE,207,ES,42.45696,-6.01825 36855,San Leonardo de Yagüe,1200,LE,207,ES,41.83034,-3.0688 36856,San Llorente,1200,LE,207,ES,41.68631,-4.066 36859,San Lorenzo de Tormes,1200,LE,207,ES,40.36984,-5.48848 36861,San Mamés de Burgos,1200,LE,207,ES,42.33685,-3.79397 36862,San Mamés de Campos,1200,LE,207,ES,42.35512,-4.56565 36874,San Martín de la Vega del Alberche,1200,LE,207,ES,40.43053,-5.155 36867,San Martín de Rubiales,1200,LE,207,ES,41.64191,-3.99134 36871,San Martín de Valderaduey,1200,LE,207,ES,41.81414,-5.47249 36872,San Martín de Valvení,1200,LE,207,ES,41.75336,-4.56724 36875,San Martín del Castañar,1200,LE,207,ES,40.52264,-6.06387 36876,San Martín del Pimpollar,1200,LE,207,ES,40.3683,-5.05443 36881,San Miguel de Corneja,1200,LE,207,ES,40.48722,-5.28654 36886,San Miguel de la Ribera,1200,LE,207,ES,41.33301,-5.57689 36884,San Miguel de Serrezuela,1200,LE,207,ES,40.67064,-5.28857 36885,San Miguel de Valero,1200,LE,207,ES,40.54361,-5.9228 36887,San Miguel del Arroyo,1200,LE,207,ES,41.44328,-4.4599 36888,San Miguel del Pino,1200,LE,207,ES,41.50941,-4.91149 36889,San Millán de Lara,1200,LE,207,ES,42.13621,-3.34515 36892,San Millán de los Caballeros,1200,LE,207,ES,42.2852,-5.56107 36893,San Morales,1200,LE,207,ES,40.99358,-5.50234 36894,San Muñoz,1200,LE,207,ES,40.78334,-6.12758 36897,San Pablo de la Moraleja,1200,LE,207,ES,41.161,-4.77761 36898,San Pascual,1200,LE,207,ES,40.88141,-4.75612 36900,San Pedro Bercianos,1200,LE,207,ES,42.39145,-5.71341 36904,San Pedro de Ceque,1200,LE,207,ES,42.04334,-6.07242 36905,San Pedro de Gaíllos,1200,LE,207,ES,41.22662,-3.80921 36906,San Pedro de Latarce,1200,LE,207,ES,41.73556,-5.32592 36908,San Pedro de Rozados,1200,LE,207,ES,40.79008,-5.73716 36909,San Pedro del Arroyo,1200,LE,207,ES,40.80213,-4.87075 36912,San Pedro del Valle,1200,LE,207,ES,41.03332,-5.86025 36901,San Pedro Manrique,1200,LE,207,ES,42.0286,-2.23104 36913,San Pelayo,1200,LE,207,ES,41.68033,-5.03403 36914,San Pelayo de Guareña,1200,LE,207,ES,41.11579,-5.85702 36917,San Román de Hornija,1200,LE,207,ES,41.48131,-5.28454 36918,San Román de la Cuba,1200,LE,207,ES,42.26257,-4.85724 36927,San Vicente de Arévalo,1200,LE,207,ES,40.96773,-4.80194 36929,San Vicente de la Cabeza,1200,LE,207,ES,41.80696,-6.24993 36931,San Vicente del Palacio,1200,LE,207,ES,41.21901,-4.85158 36932,San Vicente del Valle,1200,LE,207,ES,42.33756,-3.1621 36933,San Vitero,1200,LE,207,ES,41.7774,-6.34877 36934,Sancedo,1200,LE,207,ES,42.66666,-6.63456 36935,Sanchidrián,1200,LE,207,ES,40.89347,-4.58132 36939,Sanchón de la Ribera,1200,LE,207,ES,41.08844,-6.41314 36940,Sanchón de la Sagrada,1200,LE,207,ES,40.74287,-6.02502 36936,Sanchonuño,1200,LE,207,ES,41.32325,-4.30531 36937,Sanchorreja,1200,LE,207,ES,40.66475,-4.91494 36938,Sanchotello,1200,LE,207,ES,40.43812,-5.75394 36941,Sando,1200,LE,207,ES,40.96773,-6.11136 36943,Sangarcía,1200,LE,207,ES,40.95023,-4.41085 37010,Santa Cecilia,1200,LE,207,ES,42.05225,-3.80345 37011,Santa Cecilia del Alcor,1200,LE,207,ES,41.93227,-4.65546 37013,Santa Clara de Avedillo,1200,LE,207,ES,41.33877,-5.67692 37018,Santa Colomba de Curueño,1200,LE,207,ES,42.75058,-5.41201 37020,Santa Colomba de las Monjas,1200,LE,207,ES,41.95833,-5.68389 37019,Santa Colomba de Somoza,1200,LE,207,ES,42.44466,-6.24483 37024,Santa Cristina de la Polvorosa,1200,LE,207,ES,41.99985,-5.71355 37023,Santa Cristina de Valmadrigal,1200,LE,207,ES,42.35446,-5.30929 37025,Santa Croya de Tera,1200,LE,207,ES,41.98334,-5.97725 37028,Santa Cruz de Boedo,1200,LE,207,ES,42.52531,-4.37398 37039,Santa Cruz de la Salceda,1200,LE,207,ES,41.59591,-3.59317 37035,Santa Cruz de Pinares,1200,LE,207,ES,40.54265,-4.58036 37037,Santa Cruz de Yanguas,1200,LE,207,ES,42.0625,-2.44894 37045,Santa Cruz del Valle,1200,LE,207,ES,40.2516,-5.00133 37046,Santa Cruz del Valle Urbión,1200,LE,207,ES,42.30558,-3.2214 37048,Santa Elena de Jamuz,1200,LE,207,ES,42.26064,-5.88762 37050,Santa Eufemia del Arroyo,1200,LE,207,ES,41.89505,-5.26575 37051,Santa Eufemia del Barco,1200,LE,207,ES,41.67808,-5.89831 37060,Santa Gadea del Cid,1200,LE,207,ES,42.71531,-3.05885 37061,Santa Inés,1200,LE,207,ES,42.04013,-3.70322 37075,Santa María de Huerta,1200,LE,207,ES,41.26667,-2.16667 37080,Santa María de la Isla,1200,LE,207,ES,42.35533,-5.9287 37081,Santa María de la Vega,1200,LE,207,ES,42.08497,-5.80851 37082,Santa María de las Hoyas,1200,LE,207,ES,41.77145,-3.14172 37083,Santa María de los Caballeros,1200,LE,207,ES,40.38925,-5.45112 37076,Santa María de Ordás,1200,LE,207,ES,42.72653,-5.82301 37077,Santa María de Sando,1200,LE,207,ES,40.97909,-6.12904 37078,Santa María de Valverde,1200,LE,207,ES,41.93479,-5.9356 37084,Santa María del Berrocal,1200,LE,207,ES,40.50845,-5.40483 37085,Santa María del Campo,1200,LE,207,ES,42.13304,-3.97283 37087,Santa María del Invierno,1200,LE,207,ES,42.44288,-3.43782 37088,Santa María del Monte de Cea,1200,LE,207,ES,42.49137,-5.11689 37089,Santa María del Páramo,1200,LE,207,ES,42.35512,-5.75151 37091,Santa María la Real de Nieva,1200,LE,207,ES,41.06998,-4.40709 37068,Santa Marina del Rey,1200,LE,207,ES,42.51334,-5.86065 37072,Santa Marta de Tormes,1200,LE,207,ES,40.95065,-5.62723 37073,Santa Marta del Cerro,1200,LE,207,ES,41.21843,-3.68582 37093,Santa Olalla de Bureba,1200,LE,207,ES,42.47721,-3.44109 37108,Santas Martas,1200,LE,207,ES,42.4322,-5.37066 37110,Santervás de Campos,1200,LE,207,ES,42.2182,-5.10027 37111,Santervás de la Vega,1200,LE,207,ES,42.50677,-4.80002 37115,Santiago de la Puebla,1200,LE,207,ES,40.80132,-5.28073 37118,Santiago del Collado,1200,LE,207,ES,40.43326,-5.35631 37112,Santiago Millas,1200,LE,207,ES,42.38379,-6.10538 37120,Santibáñez de Béjar,1200,LE,207,ES,40.48785,-5.6111 37121,Santibáñez de Ecla,1200,LE,207,ES,42.70784,-4.37263 37125,Santibáñez de la Peña,1200,LE,207,ES,42.80929,-4.73026 37126,Santibáñez de la Sierra,1200,LE,207,ES,40.49464,-5.91576 37122,Santibáñez de Tera,1200,LE,207,ES,41.98563,-5.92257 37123,Santibáñez de Valcorba,1200,LE,207,ES,41.56983,-4.44938 37124,Santibáñez de Vidriales,1200,LE,207,ES,42.07362,-6.01549 37127,Santibáñez del Val,1200,LE,207,ES,41.97354,-3.48142 37137,Santiuste de San Juan Bautista,1200,LE,207,ES,41.15593,-4.57202 37138,Santiz,1200,LE,207,ES,41.20579,-5.89654 37142,Santo Domingo de las Posadas,1200,LE,207,ES,40.812,-4.63383 37139,Santo Domingo de Pirón,1200,LE,207,ES,41.04104,-3.98933 37140,Santo Domingo de Silos,1200,LE,207,ES,41.964,-3.4174 37144,Santo Tomé de Zabarcos,1200,LE,207,ES,40.78726,-4.91048 37147,Santovenia,1200,LE,207,ES,41.87857,-5.71003 37148,Santovenia de Pisuerga,1200,LE,207,ES,41.69457,-4.69029 37149,Santoyo,1200,LE,207,ES,42.21473,-4.34296 37158,Sanzoles,1200,LE,207,ES,41.43235,-5.5671 37159,Sardón de Duero,1200,LE,207,ES,41.60847,-4.43397 37160,Sardón de los Frailes,1200,LE,207,ES,41.21373,-6.27101 37161,Sargentes de la Lora,1200,LE,207,ES,42.76917,-3.87278 37162,Sariegos,1200,LE,207,ES,42.65,-5.63333 37165,Sarracín,1200,LE,207,ES,42.25813,-3.68608 37176,Sasamón,1200,LE,207,ES,42.41687,-4.04288 37178,Saucelle,1200,LE,207,ES,41.04769,-6.75328 37179,Sauquillo de Cabezas,1200,LE,207,ES,41.19422,-4.06884 37185,Sebúlcor,1200,LE,207,ES,41.27091,-3.88398 37192,Segovia,1200,LE,207,ES,40.94808,-4.11839 37208,Sena de Luna,1200,LE,207,ES,42.92906,-5.95267 37215,Sepúlveda,1200,LE,207,ES,41.29695,-3.74221 37216,Sequera de Fresno,1200,LE,207,ES,41.3664,-3.54612 37217,Sequeros,1200,LE,207,ES,40.51295,-6.02495 37220,Serrada,1200,LE,207,ES,41.45722,-4.86279 37222,Serradilla del Arroyo,1200,LE,207,ES,40.52133,-6.36008 37223,Serradilla del Llano,1200,LE,207,ES,40.49996,-6.35701 37224,Serranillos,1200,LE,207,ES,40.33625,-4.91165 37250,Siete Iglesias de Trabancos,1200,LE,207,ES,41.35223,-5.18488 37251,Sigeres,1200,LE,207,ES,40.79939,-4.93361 37258,Simancas,1200,LE,207,ES,41.59072,-4.82796 37263,Sinlabajos,1200,LE,207,ES,41.0765,-4.83242 37273,Sobradillo,1200,LE,207,ES,40.91754,-6.79729 37275,Sobrado,1200,LE,207,ES,42.51667,-6.85 37281,Solarana,1200,LE,207,ES,41.97168,-3.65876 37282,Soliedra,1200,LE,207,ES,41.46932,-2.38164 37284,Solosancho,1200,LE,207,ES,40.55294,-4.90479 37299,Sordillos,1200,LE,207,ES,42.46197,-4.10726 37300,Soria,1200,LE,207,ES,41.76401,-2.46883 37301,Sorihuela,1200,LE,207,ES,40.44378,-5.67818 37311,Sotalbo,1200,LE,207,ES,40.5417,-4.84548 37312,Sotillo,1200,LE,207,ES,41.25846,-3.63729 37313,Sotillo de la Adrada,1200,LE,207,ES,40.2912,-4.58385 37314,Sotillo de la Ribera,1200,LE,207,ES,41.77717,-3.82525 37316,Sotillo del Rincón,1200,LE,207,ES,41.9322,-2.60297 37317,Soto de Cerrato,1200,LE,207,ES,41.95312,-4.42998 37318,Soto de la Vega,1200,LE,207,ES,42.33227,-5.88225 37320,Soto y Amío,1200,LE,207,ES,42.77477,-5.88693 37321,Sotobañado y Priorato,1200,LE,207,ES,42.58987,-4.44185 37323,Sotosalbos,1200,LE,207,ES,41.03537,-3.94115 37324,Sotoserrano,1200,LE,207,ES,40.43499,-6.03261 37325,Sotragero,1200,LE,207,ES,42.40996,-3.71312 37326,Sotresgudo,1200,LE,207,ES,42.57935,-4.17725 37330,Suellacabras,1200,LE,207,ES,41.85298,-2.22398 37333,Susinos del Páramo,1200,LE,207,ES,42.47108,-3.92555 37339,Tabanera de Cerrato,1200,LE,207,ES,42.02469,-4.12361 37340,Tabanera de Valdavia,1200,LE,207,ES,42.64728,-4.69414 37341,Tabanera la Luenga,1200,LE,207,ES,41.09647,-4.23937 37662,Tábara,1200,LE,207,ES,41.82458,-5.9642 37342,Tabera de Abajo,1200,LE,207,ES,40.91021,-6.00227 37351,Tajahuerce,1200,LE,207,ES,41.73991,-2.15069 37352,Tajueco,1200,LE,207,ES,41.53641,-2.84845 37363,Tamames,1200,LE,207,ES,40.65725,-6.10536 37365,Tamariz de Campos,1200,LE,207,ES,41.97706,-5.02335 37366,Tamarón,1200,LE,207,ES,42.27386,-3.99154 37369,Tapioles,1200,LE,207,ES,41.85741,-5.49623 37375,Tarazona de Guareña,1200,LE,207,ES,41.17206,-5.25005 37380,Tardáguila,1200,LE,207,ES,41.11493,-5.57423 37377,Tardajos,1200,LE,207,ES,42.34909,-3.817 37378,Tardelcuende,1200,LE,207,ES,41.59402,-2.64439 37382,Taroda,1200,LE,207,ES,41.34798,-2.43318 37394,Tejada,1200,LE,207,ES,41.95249,-3.53514 37396,Tejado,1200,LE,207,ES,41.58887,-2.26721 37399,Tejeda y Segoyuela,1200,LE,207,ES,40.63155,-6.02311 37403,Tenebrón,1200,LE,207,ES,40.62449,-6.3545 37407,Terradillos,1200,LE,207,ES,40.83836,-5.5416 37408,Terradillos de Esgueva,1200,LE,207,ES,41.81885,-3.84318 37421,Tiedra,1200,LE,207,ES,41.65239,-5.26688 37434,Tiñosillos,1200,LE,207,ES,40.934,-4.72767 37435,Tobar,1200,LE,207,ES,42.48384,-3.93984 37442,Tolbaños,1200,LE,207,ES,40.75168,-4.58191 37445,Tolocirio,1200,LE,207,ES,41.13425,-4.65121 37453,Topas,1200,LE,207,ES,41.15759,-5.63402 37454,Toral de los Guzmanes,1200,LE,207,ES,42.24274,-5.56771 37455,Tordehumos,1200,LE,207,ES,41.81531,-5.15811 37459,Tordesillas,1200,LE,207,ES,41.50202,-5.00146 37461,Tordillos,1200,LE,207,ES,40.85266,-5.35278 37462,Tordómar,1200,LE,207,ES,42.0463,-3.86514 37464,Toreno,1200,LE,207,ES,42.69955,-6.51236 37467,Torlengua,1200,LE,207,ES,41.45483,-2.16183 37469,Tormellas,1200,LE,207,ES,40.30404,-5.51185 37473,Tornadizos de Ávila,1200,LE,207,ES,40.62757,-4.61426 37476,Toro,1200,LE,207,ES,41.52417,-5.39534 37477,Torquemada,1200,LE,207,ES,42.0349,-4.31841 37492,Torre de Esgueva,1200,LE,207,ES,41.76821,-4.20003 37495,Torre de Peñafiel,1200,LE,207,ES,41.53646,-4.08833 37499,Torre del Bierzo,1200,LE,207,ES,42.60769,-6.36675 37489,Torre Val de San Pedro,1200,LE,207,ES,41.07534,-3.87116 37508,Torreadrada,1200,LE,207,ES,41.44474,-3.84 37509,Torreblacos,1200,LE,207,ES,41.66927,-2.87881 37512,Torrecaballeros,1200,LE,207,ES,40.99211,-4.0247 37516,Torrecilla de la Abadesa,1200,LE,207,ES,41.48498,-5.08762 37518,Torrecilla de la Orden,1200,LE,207,ES,41.21885,-5.22384 37519,Torrecilla de la Torre,1200,LE,207,ES,41.66716,-5.04982 37521,Torrecilla del Monte,1200,LE,207,ES,42.0949,-3.69356 37522,Torrecilla del Pinar,1200,LE,207,ES,41.3736,-4.03838 37532,Torregalindo,1200,LE,207,ES,41.58299,-3.75222 37533,Torregamones,1200,LE,207,ES,41.487,-6.18335 37535,Torreiglesias,1200,LE,207,ES,41.10236,-4.0328 37545,Torrelara,1200,LE,207,ES,42.16673,-3.51689 37550,Torrelobatón,1200,LE,207,ES,41.64942,-5.02526 37563,Torremormojón,1200,LE,207,ES,41.96018,-4.77765 37578,Torres del Carrizal,1200,LE,207,ES,41.61701,-5.67173 37580,Torresandino,1200,LE,207,ES,41.8292,-3.90981 37581,Torrescárcela,1200,LE,207,ES,41.48455,-4.3192 37582,Torresmenudas,1200,LE,207,ES,41.10249,-5.78475 37594,Torrubia de Soria,1200,LE,207,ES,41.63045,-2.09151 37669,Tórtoles,1200,LE,207,ES,40.5612,-5.2612 37602,Tosantos,1200,LE,207,ES,42.41368,-3.24286 37612,Trabadelo,1200,LE,207,ES,42.64874,-6.88 37613,Trabanca,1200,LE,207,ES,41.23278,-6.38484 37614,Trabazos,1200,LE,207,ES,41.74793,-6.49094 37623,Traspinedo,1200,LE,207,ES,41.57509,-4.47569 37626,Trefacio,1200,LE,207,ES,42.12165,-6.65407 37627,Tremedal de Tormes,1200,LE,207,ES,41.07423,-6.18164 37630,Trescasas,1200,LE,207,ES,40.96442,-4.0359 37632,Trespaderne,1200,LE,207,ES,42.80221,-3.38989 37638,Trigueros del Valle,1200,LE,207,ES,41.83049,-4.65179 37641,Triollo,1200,LE,207,ES,42.92456,-4.6813 37643,Truchas,1200,LE,207,ES,42.26093,-6.43605 37646,Tubilla del Agua,1200,LE,207,ES,42.70932,-3.80116 37647,Tubilla del Lago,1200,LE,207,ES,41.80154,-3.58625 37649,Tudela de Duero,1200,LE,207,ES,41.5845,-4.58093 37654,Turcia,1200,LE,207,ES,42.53431,-5.87844 37658,Turégano,1200,LE,207,ES,41.1561,-4.00696 37672,Ucero,1200,LE,207,ES,41.71685,-3.05154 37686,Umbrías,1200,LE,207,ES,40.3153,-5.58037 37714,Uña de Quintana,1200,LE,207,ES,42.08662,-6.14475 37691,Urdiales del Páramo,1200,LE,207,ES,42.37034,-5.77297 37694,Urones de Castroponce,1200,LE,207,ES,42.09911,-5.28222 37698,Urueña,1200,LE,207,ES,41.72738,-5.20304 37699,Urueñas,1200,LE,207,ES,41.35589,-3.77391 37715,Vadillo,1200,LE,207,ES,41.79111,-3.00845 37716,Vadillo de la Guareña,1200,LE,207,ES,41.28242,-5.353 37717,Vadillo de la Sierra,1200,LE,207,ES,40.60634,-5.12506 37718,Vadocondes,1200,LE,207,ES,41.63925,-3.57378 37719,Val de San Lorenzo,1200,LE,207,ES,42.41819,-6.12391 37723,Valbuena de Duero,1200,LE,207,ES,41.64323,-4.29271 37724,Valbuena de Pisuerga,1200,LE,207,ES,42.14584,-4.2401 37725,Valcabado,1200,LE,207,ES,41.54863,-5.74916 37730,Valdeande,1200,LE,207,ES,41.83302,-3.52792 37731,Valdearcos de la Vega,1200,LE,207,ES,41.6426,-4.04845 37734,Valdeavellano de Tera,1200,LE,207,ES,41.94229,-2.57634 37738,Valdecarros,1200,LE,207,ES,40.77007,-5.42219 37739,Valdecasa,1200,LE,207,ES,40.65931,-5.01183 37743,Valdefinjas,1200,LE,207,ES,41.45172,-5.45232 37744,Valdefresno,1200,LE,207,ES,42.59492,-5.49355 37746,Valdefuentes de Sangusín,1200,LE,207,ES,40.46578,-5.83286 37747,Valdefuentes del Páramo,1200,LE,207,ES,42.3237,-5.83097 37750,Valdehijaderos,1200,LE,207,ES,40.41916,-5.84792 37754,Valdelacasa,1200,LE,207,ES,40.50631,-5.76354 37756,Valdelageve,1200,LE,207,ES,40.36949,-5.99078 37757,Valdelagua del Cerro,1200,LE,207,ES,41.88825,-2.11538 37761,Valdelosa,1200,LE,207,ES,41.17157,-5.7839 37764,Valdemaluque,1200,LE,207,ES,41.67377,-3.04643 37769,Valdemierque,1200,LE,207,ES,40.82176,-5.58225 37770,Valdemora,1200,LE,207,ES,42.19541,-5.42747 37776,Valdenebro,1200,LE,207,ES,41.57167,-2.96424 37777,Valdenebro de los Valles,1200,LE,207,ES,41.8569,-4.97005 37780,Valdeolmillos,1200,LE,207,ES,42.04123,-4.40015 37785,Valdepiélago,1200,LE,207,ES,42.86895,-5.39763 37787,Valdepolo,1200,LE,207,ES,42.57686,-5.22513 37788,Valdeprado,1200,LE,207,ES,41.93768,-2.10915 37789,Valdeprados,1200,LE,207,ES,40.81766,-4.25734 37790,Valderas,1200,LE,207,ES,42.0783,-5.44355 37798,Valderrábano,1200,LE,207,ES,42.60674,-4.65584 37792,Valderrey,1200,LE,207,ES,42.39408,-6.02151 37794,Valderrodilla,1200,LE,207,ES,41.56346,-2.80777 37795,Valderrodrigo,1200,LE,207,ES,41.06524,-6.50878 37797,Valderrueda,1200,LE,207,ES,42.81558,-4.94731 37799,Valdesamario,1200,LE,207,ES,42.72094,-5.95104 37800,Valdescorriel,1200,LE,207,ES,42.02233,-5.50998 37802,Valdestillas,1200,LE,207,ES,41.47697,-4.77116 37805,Valdevacas de Montejo,1200,LE,207,ES,41.52068,-3.63571 37807,Valdevimbre,1200,LE,207,ES,42.41959,-5.61975 37808,Valdezate,1200,LE,207,ES,41.60231,-3.93045 37811,Valdorros,1200,LE,207,ES,42.17232,-3.70938 37813,Valdunciel,1200,LE,207,ES,41.08544,-5.67217 37814,Valdunquillo,1200,LE,207,ES,42.04232,-5.31339 37818,Valencia de Don Juan,1200,LE,207,ES,42.29374,-5.5172 37825,Valero,1200,LE,207,ES,40.53533,-5.94307 37836,Valladolid,1200,LE,207,ES,41.65518,-4.72372 37838,Vallarta de Bureba,1200,LE,207,ES,42.58864,-3.20457 37844,Valle de Cerrato,1200,LE,207,ES,41.88045,-4.36243 37847,Valle de Tabladillo,1200,LE,207,ES,41.36304,-3.83966 37849,Vallecillo,1200,LE,207,ES,42.35604,-5.21088 37851,Vallejera de Riofrío,1200,LE,207,ES,40.4091,-5.71943 37852,Vallelado,1200,LE,207,ES,41.40436,-4.42662 37853,Valleruela de Pedraza,1200,LE,207,ES,41.17937,-3.80717 37854,Valleruela de Sepúlveda,1200,LE,207,ES,41.18794,-3.77277 37855,Valles de Palenzuela,1200,LE,207,ES,42.12019,-4.0775 37856,Vallesa de la Guareña,1200,LE,207,ES,41.13532,-5.32611 37864,Valluércanes,1200,LE,207,ES,42.5722,-3.12113 37868,Valmala,1200,LE,207,ES,42.3059,-3.25456 37870,Valoria la Buena,1200,LE,207,ES,41.79966,-4.53055 37872,Valsalabroso,1200,LE,207,ES,41.10962,-6.50269 37874,Valseca,1200,LE,207,ES,40.99933,-4.17514 37877,Valtajeros,1200,LE,207,ES,41.93808,-2.22289 37878,Valtiendas,1200,LE,207,ES,41.47851,-3.91766 37884,Valverde de Campos,1200,LE,207,ES,41.8351,-5.03674 37891,Valverde de la Virgen,1200,LE,207,ES,42.56823,-5.68461 37889,Valverde de Valdelacasa,1200,LE,207,ES,40.48155,-5.78145 37895,Valverde del Majano,1200,LE,207,ES,40.95689,-4.23468 37896,Valverde-Enrique,1200,LE,207,ES,42.30459,-5.2999 37898,Valverdón,1200,LE,207,ES,41.04691,-5.76955 37901,Vecinos,1200,LE,207,ES,40.77875,-5.87815 37903,Vega de Espinareda,1200,LE,207,ES,42.72537,-6.65439 37904,Vega de Infanzones,1200,LE,207,ES,42.48116,-5.53295 37906,Vega de Ruiponce,1200,LE,207,ES,42.18808,-5.11477 37908,Vega de Santa María,1200,LE,207,ES,40.83618,-4.64287 37909,Vega de Tera,1200,LE,207,ES,41.99759,-6.125 37910,Vega de Tirados,1200,LE,207,ES,41.02543,-5.88667 37911,Vega de Valcarce,1200,LE,207,ES,42.66068,-6.93785 37912,Vega de Valdetronco,1200,LE,207,ES,41.59364,-5.11319 37913,Vega de Villalobos,1200,LE,207,ES,41.97057,-5.46324 37915,Vegacervera,1200,LE,207,ES,42.88808,-5.53549 37916,Vegalatrave,1200,LE,207,ES,41.70026,-6.10675 37917,Veganzones,1200,LE,207,ES,41.19308,-3.99329 37918,Vegaquemada,1200,LE,207,ES,42.8187,-5.33242 37919,Vegas de Matute,1200,LE,207,ES,40.79476,-4.27762 37923,Velamazán,1200,LE,207,ES,41.44895,-2.69935 37924,Velascálvaro,1200,LE,207,ES,41.23028,-4.97242 37925,Velayos,1200,LE,207,ES,40.84157,-4.62324 37928,Velilla,1200,LE,207,ES,41.5592,-5.00454 37932,Velilla de los Ajos,1200,LE,207,ES,41.49058,-2.25579 37933,Velilla del Río Carrión,1200,LE,207,ES,42.82611,-4.84626 37935,Velliza,1200,LE,207,ES,41.57918,-4.94655 37936,Venialbo,1200,LE,207,ES,41.38957,-5.53596 37937,Venta de Baños,1200,LE,207,ES,41.9211,-4.49089 37943,Ventosa de la Cuesta,1200,LE,207,ES,41.4111,-4.82932 37944,Ventosa del Río Almar,1200,LE,207,ES,40.92728,-5.34838 37954,Vertavillo,1200,LE,207,ES,41.83281,-4.32707 37956,Vezdemarbán,1200,LE,207,ES,41.6548,-5.36609 37957,Viana de Cega,1200,LE,207,ES,41.52927,-4.75245 37958,Viana de Duero,1200,LE,207,ES,41.53406,-2.46099 37964,Vidayanes,1200,LE,207,ES,41.91011,-5.57424 37965,Videmala,1200,LE,207,ES,41.61299,-6.04056 38007,Vileña,1200,LE,207,ES,42.62227,-3.32293 38023,Villabáñez,1200,LE,207,ES,41.63097,-4.52192 38015,Villabaruz de Campos,1200,LE,207,ES,42.01099,-4.99624 38017,Villablino,1200,LE,207,ES,42.93932,-6.31943 38020,Villabrágima,1200,LE,207,ES,41.82178,-5.11546 38019,Villabraz,1200,LE,207,ES,42.24658,-5.44593 38021,Villabrázaro,1200,LE,207,ES,42.05394,-5.72748 38022,Villabuena del Puente,1200,LE,207,ES,41.38074,-5.40787 38024,Villacarralón,1200,LE,207,ES,42.18999,-5.04324 38027,Villacastín,1200,LE,207,ES,40.7796,-4.41357 38029,Villacid de Campos,1200,LE,207,ES,42.0825,-5.12498 38030,Villacidaler,1200,LE,207,ES,42.22168,-4.97668 38031,Villaciervos,1200,LE,207,ES,41.76227,-2.62678 38032,Villaco,1200,LE,207,ES,41.74022,-4.26817 38033,Villaconancio,1200,LE,207,ES,41.87174,-4.22379 38036,Villada,1200,LE,207,ES,42.25111,-4.96708 38037,Villadangos del Páramo,1200,LE,207,ES,42.51672,-5.76737 38038,Villadecanes,1200,LE,207,ES,42.57973,-6.75971 38039,Villademor de la Vega,1200,LE,207,ES,42.26964,-5.56808 38040,Villadepera,1200,LE,207,ES,41.547,-6.13305 38041,Villadiego,1200,LE,207,ES,42.51589,-4.00958 38043,Villaeles de Valdavia,1200,LE,207,ES,42.56556,-4.58318 38044,Villaescusa,1200,LE,207,ES,41.20617,-5.46406 38046,Villaescusa de Roa,1200,LE,207,ES,41.72727,-4.0172 38047,Villaescusa la Sombría,1200,LE,207,ES,42.41518,-3.4184 38048,Villaespasa,1200,LE,207,ES,42.09991,-3.40436 38069,Villafáfila,1200,LE,207,ES,41.84692,-5.61527 38051,Villaferrueña,1200,LE,207,ES,42.0983,-5.85802 38052,Villaflor,1200,LE,207,ES,40.75865,-4.87379 38053,Villaflores,1200,LE,207,ES,41.08397,-5.23436 38054,Villafrades de Campos,1200,LE,207,ES,42.07853,-4.97125 38057,Villafranca de Duero,1200,LE,207,ES,41.4331,-5.30192 38059,Villafranca de la Sierra,1200,LE,207,ES,40.49806,-5.23005 38062,Villafranca del Bierzo,1200,LE,207,ES,42.60601,-6.81069 38065,Villafrechós,1200,LE,207,ES,41.8929,-5.21859 38066,Villafruela,1200,LE,207,ES,41.91647,-3.91371 38067,Villafuerte,1200,LE,207,ES,41.73431,-4.32365 38070,Villagalijo,1200,LE,207,ES,42.34872,-3.19203 38071,Villagarcía de Campos,1200,LE,207,ES,41.78032,-5.19242 38074,Villagatón,1200,LE,207,ES,42.63413,-6.16184 38075,Villageriz,1200,LE,207,ES,42.11884,-5.95554 38080,Villagómez la Nueva,1200,LE,207,ES,42.15592,-5.14208 38077,Villagonzalo de Tormes,1200,LE,207,ES,40.89221,-5.49664 38078,Villagonzalo-Pedernales,1200,LE,207,ES,42.30145,-3.73539 38087,Villahán,1200,LE,207,ES,42.05031,-4.13104 38085,Villaherreros,1200,LE,207,ES,42.38964,-4.46254 38086,Villahoz,1200,LE,207,ES,42.07587,-3.9129 38089,Villalaco,1200,LE,207,ES,42.15569,-4.2594 38125,Villalán de Campos,1200,LE,207,ES,42.01484,-5.23642 38090,Villalar de los Comuneros,1200,LE,207,ES,41.54966,-5.1381 38091,Villalazán,1200,LE,207,ES,41.49414,-5.5891 38092,Villalba de Duero,1200,LE,207,ES,41.68243,-3.74443 38093,Villalba de Guardo,1200,LE,207,ES,42.72229,-4.82328 38096,Villalba de la Lampreana,1200,LE,207,ES,41.74327,-5.64094 38097,Villalba de la Loma,1200,LE,207,ES,42.17472,-5.19023 38099,Villalba de los Alcores,1200,LE,207,ES,41.86361,-4.86063 38101,Villalba de los Llanos,1200,LE,207,ES,40.8002,-5.9758 38104,Villalbarba,1200,LE,207,ES,41.60389,-5.21281 38106,Villalbilla de Burgos,1200,LE,207,ES,42.34757,-3.78101 38107,Villalbilla de Gumiel,1200,LE,207,ES,41.80621,-3.62584 38108,Villalcampo,1200,LE,207,ES,41.52229,-6.04801 38109,Villalcázar de Sirga,1200,LE,207,ES,42.31662,-4.54278 38110,Villalcón,1200,LE,207,ES,42.29287,-4.85527 38111,Villaldemiro,1200,LE,207,ES,42.24719,-3.98534 38114,Villalmanzo,1200,LE,207,ES,42.0484,-3.74195 38117,Villalobón,1200,LE,207,ES,42.03037,-4.5034 38116,Villalobos,1200,LE,207,ES,41.94567,-5.47517 38126,Villalón de Campos,1200,LE,207,ES,42.09994,-5.0344 38119,Villalonso,1200,LE,207,ES,41.59767,-5.29769 38120,Villalpando,1200,LE,207,ES,41.86517,-5.41231 38122,Villalube,1200,LE,207,ES,41.61005,-5.54545 38123,Villaluenga de la Vega,1200,LE,207,ES,42.52386,-4.76489 38147,Villamañán,1200,LE,207,ES,42.32198,-5.58195 38129,Villamandos,1200,LE,207,ES,42.18058,-5.59397 38135,Villamanín,1200,LE,207,ES,42.93864,-5.65669 38137,Villamartín de Campos,1200,LE,207,ES,42.01598,-4.66414 38138,Villamartín de Don Sancho,1200,LE,207,ES,42.56943,-5.06056 38139,Villamayor,1200,LE,207,ES,40.99939,-5.69579 38141,Villamayor de Campos,1200,LE,207,ES,41.8987,-5.35963 38146,Villamayor de los Montes,1200,LE,207,ES,42.10565,-3.76542 38145,Villamayor de Treviño,1200,LE,207,ES,42.46048,-4.11923 38148,Villamediana,1200,LE,207,ES,42.05024,-4.36115 38150,Villamedianilla,1200,LE,207,ES,42.1607,-4.14592 38151,Villamejil,1200,LE,207,ES,42.56205,-6.02514 38152,Villameriel,1200,LE,207,ES,42.52822,-4.47572 38156,Villamiel de la Sierra,1200,LE,207,ES,42.19124,-3.41771 38158,Villamol,1200,LE,207,ES,42.42766,-5.04832 38159,Villamontán de la Valduerna,1200,LE,207,ES,42.30962,-5.99656 38160,Villamor de los Escuderos,1200,LE,207,ES,41.25244,-5.57485 38161,Villamoratiel de las Matas,1200,LE,207,ES,42.39755,-5.30064 38162,Villamoronta,1200,LE,207,ES,42.40337,-4.69899 38164,Villamuera de la Cueza,1200,LE,207,ES,42.25843,-4.6886 38165,Villamuriel de Campos,1200,LE,207,ES,41.9469,-5.20717 38166,Villamuriel de Cerrato,1200,LE,207,ES,41.94935,-4.51584 38380,Villán de Tordesillas,1200,LE,207,ES,41.59311,-4.92214 38226,Villanázar,1200,LE,207,ES,41.97398,-5.78043 38167,Villangómez,1200,LE,207,ES,42.17961,-3.77419 38168,Villanubla,1200,LE,207,ES,41.69877,-4.84173 38172,Villanueva de Argaño,1200,LE,207,ES,42.38045,-3.93353 38174,Villanueva de Azoague,1200,LE,207,ES,41.97607,-5.664 38177,Villanueva de Campeán,1200,LE,207,ES,41.35447,-5.7702 38178,Villanueva de Carazo,1200,LE,207,ES,41.98275,-3.32428 38181,Villanueva de Duero,1200,LE,207,ES,41.51946,-4.86671 38185,Villanueva de Gómez,1200,LE,207,ES,40.88269,-4.7165 38182,Villanueva de Gormaz,1200,LE,207,ES,41.4674,-3.06223 38183,Villanueva de Gumiel,1200,LE,207,ES,41.73778,-3.62658 38197,Villanueva de la Condesa,1200,LE,207,ES,42.14914,-5.0955 38206,Villanueva de las Manzanas,1200,LE,207,ES,42.47264,-5.48043 38207,Villanueva de las Peras,1200,LE,207,ES,41.93478,-5.97942 38209,Villanueva de los Caballeros,1200,LE,207,ES,41.75916,-5.24786 38190,Villanueva de San Mancio,1200,LE,207,ES,41.92842,-5.012 38193,Villanueva de Teba,1200,LE,207,ES,42.6489,-3.16313 38211,Villanueva del Aceral,1200,LE,207,ES,41.04095,-4.85419 38214,Villanueva del Campillo,1200,LE,207,ES,40.57646,-5.18002 38215,Villanueva del Campo,1200,LE,207,ES,41.98492,-5.4066 38216,Villanueva del Conde,1200,LE,207,ES,40.51039,-6.0121 38220,Villanueva del Rebollar,1200,LE,207,ES,42.24114,-4.74288 38225,Villanuño de Valdavia,1200,LE,207,ES,42.50775,-4.51887 38228,Villaobispo de Otero,1200,LE,207,ES,42.50065,-6.05809 38230,Villaprovedo,1200,LE,207,ES,42.51674,-4.39645 38231,Villaquejida,1200,LE,207,ES,42.145,-5.59699 38232,Villaquilambre,1200,LE,207,ES,42.64685,-5.55835 38233,Villaquirán de la Puebla,1200,LE,207,ES,42.28287,-4.10037 38234,Villaquirán de los Infantes,1200,LE,207,ES,42.22744,-4.00864 38236,Villar de Ciervo,1200,LE,207,ES,40.73772,-6.7385 38237,Villar de Corneja,1200,LE,207,ES,40.47462,-5.43307 38239,Villar de Fallaves,1200,LE,207,ES,41.92503,-5.34039 38240,Villar de Gallimazo,1200,LE,207,ES,40.95367,-5.28819 38248,Villar de la Yegua,1200,LE,207,ES,40.72554,-6.70364 38242,Villar de Peralonso,1200,LE,207,ES,41.03223,-6.22284 38245,Villar de Samaniego,1200,LE,207,ES,41.11667,-6.43333 38250,Villar del Ala,1200,LE,207,ES,41.91638,-2.56651 38252,Villar del Buey,1200,LE,207,ES,41.33024,-6.18935 38253,Villar del Campo,1200,LE,207,ES,41.78881,-2.14955 38261,Villar del Río,1200,LE,207,ES,42.07574,-2.35082 38263,Villaralbo,1200,LE,207,ES,41.49224,-5.68359 38265,Villardeciervos,1200,LE,207,ES,41.94206,-6.28647 38266,Villardefrades,1200,LE,207,ES,41.72358,-5.25513 38267,Villardiegua de la Ribera,1200,LE,207,ES,41.53543,-6.18327 38381,Villárdiga,1200,LE,207,ES,41.8195,-5.46439 38269,Villardondiego,1200,LE,207,ES,41.58483,-5.37707 38275,Villarejo de Órbigo,1200,LE,207,ES,42.44559,-5.90462 38276,Villarejo del Valle,1200,LE,207,ES,40.28638,-4.99674 38280,Villares de la Reina,1200,LE,207,ES,41.00832,-5.64881 38281,Villares de Órbigo,1200,LE,207,ES,42.46955,-5.91002 38279,Villares de Yeltes,1200,LE,207,ES,40.86594,-6.413 38284,Villariezo,1200,LE,207,ES,42.26965,-3.73272 38285,Villarino de los Aires,1200,LE,207,ES,41.27102,-6.46847 38287,Villarmayor,1200,LE,207,ES,41.01514,-5.97151 38288,Villarmentero de Campos,1200,LE,207,ES,42.29777,-4.49992 38289,Villarmentero de Esgueva,1200,LE,207,ES,41.68515,-4.54636 38290,Villarmuerto,1200,LE,207,ES,41.0562,-6.36294 38292,Villarrabé,1200,LE,207,ES,42.4209,-4.78445 38293,Villarramiel,1200,LE,207,ES,42.04301,-4.91215 38305,Villarrín de Campos,1200,LE,207,ES,41.79522,-5.63898 38310,Villasabariego,1200,LE,207,ES,42.53288,-5.41322 38311,Villasana de Mena,1200,LE,207,ES,43.10017,-3.28253 38312,Villasandino,1200,LE,207,ES,42.37072,-4.10975 38313,Villasarracino,1200,LE,207,ES,42.41207,-4.49633 38314,Villasayas,1200,LE,207,ES,41.35291,-2.61011 38315,Villasbuenas,1200,LE,207,ES,41.06263,-6.59662 38317,Villasdardo,1200,LE,207,ES,41.00449,-6.16303 38318,Villaseca de Arciel,1200,LE,207,ES,41.6243,-2.16176 38322,Villaseco de los Gamitos,1200,LE,207,ES,41.03621,-6.11323 38323,Villaseco de los Reyes,1200,LE,207,ES,41.16262,-6.18426 38324,Villaselán,1200,LE,207,ES,42.56105,-5.0482 38326,Villasexmir,1200,LE,207,ES,41.63943,-5.0647 38327,Villasila de Valdavia,1200,LE,207,ES,42.53192,-4.55884 38328,Villasrubias,1200,LE,207,ES,40.33822,-6.6392 38331,Villatoro,1200,LE,207,ES,40.55609,-5.11262 38333,Villatuelda,1200,LE,207,ES,41.81499,-3.88054 38335,Villaturde,1200,LE,207,ES,42.37769,-4.67085 38336,Villaturiel,1200,LE,207,ES,42.51819,-5.48615 38337,Villaumbrales,1200,LE,207,ES,42.08873,-4.61384 38339,Villavaquerín,1200,LE,207,ES,41.66357,-4.46287 38341,Villavellid,1200,LE,207,ES,41.69218,-5.2763 38342,Villavendimio,1200,LE,207,ES,41.57812,-5.34287 38345,Villaverde de Guareña,1200,LE,207,ES,41.06406,-5.52492 38346,Villaverde de Medina,1200,LE,207,ES,41.30687,-5.02625 38347,Villaverde de Montejo,1200,LE,207,ES,41.52225,-3.65452 38349,Villaverde del Monte,1200,LE,207,ES,42.16075,-3.81421 38352,Villaverde-Mogina,1200,LE,207,ES,42.16041,-4.05024 38353,Villaveza de Valverde,1200,LE,207,ES,41.94516,-5.84849 38354,Villaveza del Agua,1200,LE,207,ES,41.91922,-5.67871 38355,Villavicencio de los Caballeros,1200,LE,207,ES,42.05893,-5.23566 38359,Villavieja de Yeltes,1200,LE,207,ES,40.87573,-6.46792 38361,Villaviudas,1200,LE,207,ES,41.96227,-4.342 38362,Villazala,1200,LE,207,ES,42.36146,-5.856 38363,Villazanzo de Valderaduey,1200,LE,207,ES,42.53592,-4.96462 38364,Villazopeque,1200,LE,207,ES,42.19845,-4.01688 38365,Villegas,1200,LE,207,ES,42.46866,-4.01759 38366,Villeguillo,1200,LE,207,ES,41.2529,-4.57951 38370,Villodre,1200,LE,207,ES,42.21161,-4.24484 38371,Villodrigo,1200,LE,207,ES,42.14436,-4.09527 38372,Villoldo,1200,LE,207,ES,42.24782,-4.59592 38376,Villoría,1200,LE,207,ES,40.99435,-5.37363 38374,Villoruebo,1200,LE,207,ES,42.16874,-3.44159 38375,Villoruela,1200,LE,207,ES,41.0086,-5.39381 38378,Villota del Páramo,1200,LE,207,ES,42.55234,-4.84893 38379,Villovieco,1200,LE,207,ES,42.29478,-4.48122 38383,Viloria,1200,LE,207,ES,41.44604,-4.38356 38384,Viloria de Rioja,1200,LE,207,ES,42.42608,-3.10056 38385,Vilvestre,1200,LE,207,ES,41.10636,-6.72725 38386,Vilviestre del Pinar,1200,LE,207,ES,41.95033,-3.07803 38409,Viñegra de Moraña,1200,LE,207,ES,40.85074,-4.92115 38396,Vinuesa,1200,LE,207,ES,41.91032,-2.76483 38401,Vita,1200,LE,207,ES,40.81178,-5.00583 38402,Vitigudino,1200,LE,207,ES,41.00912,-6.43404 38407,Vizcaínos,1200,LE,207,ES,42.10359,-3.26698 38408,Vizmanos,1200,LE,207,ES,42.02342,-2.40869 38412,Vozmediano,1200,LE,207,ES,41.83752,-1.8558 38419,Wamba,1200,LE,207,ES,41.67525,-4.91748 38426,Yanguas,1200,LE,207,ES,42.10171,-2.33986 38427,Yanguas de Eresma,1200,LE,207,ES,41.07201,-4.23905 38432,Yecla de Yeltes,1200,LE,207,ES,40.95917,-6.48904 38434,Yelo,1200,LE,207,ES,41.21667,-2.51667 38448,Zael,1200,LE,207,ES,42.10587,-3.82623 38462,Zamarra,1200,LE,207,ES,40.51893,-6.45248 38463,Zamayón,1200,LE,207,ES,41.14861,-5.83054 38465,Zamora,1200,LE,207,ES,41.50633,-5.74456 38468,Zapardiel de la Cañada,1200,LE,207,ES,40.60648,-5.33791 38469,Zapardiel de la Ribera,1200,LE,207,ES,40.35554,-5.32826 38471,Zarapicos,1200,LE,207,ES,41.0383,-5.84526 38473,Zaratán,1200,LE,207,ES,41.65971,-4.78417 38486,Zarzuela del Monte,1200,LE,207,ES,40.80888,-4.33613 38487,Zarzuela del Pinar,1200,LE,207,ES,41.26018,-4.18457 38489,Zazuar,1200,LE,207,ES,41.69528,-3.55451 38496,Zorita de la Frontera,1200,LE,207,ES,41.01453,-5.19659 38500,Zotes del Páramo,1200,LE,207,ES,42.27268,-5.73617 38511,Zuñeda,1200,LE,207,ES,42.60501,-3.22632 31985,Ajalvir,1158,MD,207,ES,40.53205,-3.47841 31995,Alameda del Valle,1158,MD,207,ES,40.9187,-3.84243 32072,Alcalá de Henares,1158,MD,207,ES,40.48205,-3.35996 32097,Alcobendas,1158,MD,207,ES,40.54746,-3.64197 32119,Alcorcón,1158,MD,207,ES,40.34582,-3.82487 32144,Aldea del Fresno,1158,MD,207,ES,40.3236,-4.20319 32219,Algete,1158,MD,207,ES,40.59711,-3.49743 32327,Alpedrete,1158,MD,207,ES,40.65889,-4.02512 32351,Ambite,1158,MD,207,ES,40.3319,-3.18034 32368,Anchuelo,1158,MD,207,ES,40.46527,-3.26838 32412,Aranjuez,1158,MD,207,ES,40.03108,-3.60246 32462,Arganda,1158,MD,207,ES,40.30076,-3.43722 32464,Arganzuela,1158,MD,207,ES,40.40021,-3.69618 32513,Arroyomolinos,1158,MD,207,ES,40.26951,-3.91946 32636,Barajas de Madrid,1158,MD,207,ES,40.47366,-3.57777 32695,Batres,1158,MD,207,ES,40.20981,-3.92331 32725,Becerril de la Sierra,1158,MD,207,ES,40.71699,-3.98858 32750,Belmonte de Tajo,1158,MD,207,ES,40.13162,-3.3358 32875,Berzosa del Lozoya,1158,MD,207,ES,40.9732,-3.52009 32917,Boadilla del Monte,1158,MD,207,ES,40.405,-3.87835 32918,Boalo,1158,MD,207,ES,40.71603,-3.91656 32969,Braojos,1158,MD,207,ES,41.0404,-3.64329 32975,Brea de Tajo,1158,MD,207,ES,40.23333,-3.1 32994,Brunete,1158,MD,207,ES,40.40532,-3.9985 33013,Buitrago del Lozoya,1158,MD,207,ES,40.9909,-3.63365 33038,Bustarviejo,1158,MD,207,ES,40.8572,-3.70766 33068,Cabanillas de la Sierra,1158,MD,207,ES,40.82009,-3.62438 33115,Cadalso de los Vidrios,1158,MD,207,ES,40.30067,-4.43348 33170,Camarma de Esteruelas,1158,MD,207,ES,40.55032,-3.37295 33201,Campo Real,1158,MD,207,ES,40.33333,-3.38333 33232,Canencia,1158,MD,207,ES,40.90728,-3.73523 33274,Carabaña,1158,MD,207,ES,40.25424,-3.23572 33272,Carabanchel,1158,MD,207,ES,40.39094,-3.7242 33354,Casarrubuelos,1158,MD,207,ES,40.17146,-3.83105 33570,Cenicientos,1158,MD,207,ES,40.26459,-4.46683 33579,Cercedilla,1158,MD,207,ES,40.74101,-4.05644 33596,Cervera de Buitrago,1158,MD,207,ES,40.91988,-3.52702 33615,Chamartín,1158,MD,207,ES,40.46206,-3.6766 33616,Chamberí,1158,MD,207,ES,40.43404,-3.70379 33618,Chapinería,1158,MD,207,ES,40.37891,-4.21009 33640,Chinchón,1158,MD,207,ES,40.1402,-3.42267 33658,Ciempozuelos,1158,MD,207,ES,40.15913,-3.62103 33695,City Center,1158,MD,207,ES,40.41831,-3.70275 33696,Ciudad Lineal,1158,MD,207,ES,40.44505,-3.65132 33709,Cobeña,1158,MD,207,ES,40.56667,-3.5 33733,Collado Mediano,1158,MD,207,ES,40.69326,-4.0228 33736,Collado-Villalba,1158,MD,207,ES,40.63506,-4.00486 33744,Colmenar de Oreja,1158,MD,207,ES,40.10675,-3.38547 33745,Colmenar del Arroyo,1158,MD,207,ES,40.41897,-4.19845 33742,Colmenar Viejo,1158,MD,207,ES,40.65909,-3.76762 33746,Colmenarejo,1158,MD,207,ES,40.56063,-4.01713 33796,Corpa,1158,MD,207,ES,40.42327,-3.26003 33817,Coslada,1158,MD,207,ES,40.42378,-3.56129 33845,Cubas,1158,MD,207,ES,40.189,-3.83526 33908,Daganzo de Arriba,1158,MD,207,ES,40.54293,-3.45457 34029,El Álamo,1158,MD,207,ES,40.23066,-3.99447 33997,El Escorial,1158,MD,207,ES,40.58254,-4.12846 34002,El Molar,1158,MD,207,ES,40.73215,-3.57969 34003,El Pardo,1158,MD,207,ES,40.51454,-3.77253 34024,El Vellón,1158,MD,207,ES,40.76495,-3.57969 34147,Estremera,1158,MD,207,ES,40.18333,-3.1 34249,Fresnedillas,1158,MD,207,ES,40.48704,-4.17146 34259,Fresno de Torote,1158,MD,207,ES,40.5904,-3.41003 34277,Fuencarral-El Pardo,1158,MD,207,ES,40.4984,-3.7314 34283,Fuenlabrada,1158,MD,207,ES,40.28419,-3.79415 34302,Fuente el Saz,1158,MD,207,ES,40.63215,-3.51146 34361,Fuentidueña de Tajo,1158,MD,207,ES,40.11574,-3.15718 34373,Galapagar,1158,MD,207,ES,40.5783,-4.00426 34415,Garganta de los Montes,1158,MD,207,ES,40.91992,-3.68375 34430,Gascones,1158,MD,207,ES,41.01843,-3.64217 34459,Getafe,1158,MD,207,ES,40.30571,-3.73295 34516,Griñón,1158,MD,207,ES,40.21249,-3.85482 34524,Guadalix de la Sierra,1158,MD,207,ES,40.78496,-3.69347 34528,Guadarrama,1158,MD,207,ES,40.6727,-4.08949 34652,Horcajo de la Sierra,1158,MD,207,ES,41.06723,-3.58534 34654,Horcajuelo de la Sierra,1158,MD,207,ES,41.06019,-3.5464 34667,Hortaleza,1158,MD,207,ES,40.47444,-3.6411 34674,Hoyo de Manzanares,1158,MD,207,ES,40.62265,-3.90733 34701,Humanes de Madrid,1158,MD,207,ES,40.25038,-3.83062 34860,La Cabrera,1158,MD,207,ES,40.86386,-3.61265 34985,Las Matas,1158,MD,207,ES,40.55779,-3.89173 34991,Las Rozas de Madrid,1158,MD,207,ES,40.49292,-3.87371 34992,Las Tablas,1158,MD,207,ES,40.50649,-3.67235 35002,Latina,1158,MD,207,ES,40.38897,-3.74569 35021,Leganés,1158,MD,207,ES,40.32718,-3.7635 35099,Loeches,1158,MD,207,ES,40.38343,-3.4146 35127,Los Molinos,1158,MD,207,ES,40.71578,-4.07402 35134,Los Santos de la Humosa,1158,MD,207,ES,40.49968,-3.25332 35145,Lozoya,1158,MD,207,ES,40.94949,-3.79086 35186,Madrid,1158,MD,207,ES,40.4165,-3.70256 35214,Majadahonda,1158,MD,207,ES,40.47353,-3.87182 35267,Manzanares el Real,1158,MD,207,ES,40.72627,-3.86265 35366,Meco,1158,MD,207,ES,40.55274,-3.32894 35384,Mejorada del Campo,1158,MD,207,ES,40.39283,-3.48194 35442,Miraflores de la Sierra,1158,MD,207,ES,40.8155,-3.76213 35501,Moncloa-Aravaca,1158,MD,207,ES,40.43547,-3.7317 35555,Montejo de la Sierra,1158,MD,207,ES,41.05955,-3.52993 35602,Moraleja de Enmedio,1158,MD,207,ES,40.26125,-3.85963 35612,Moralzarzal,1158,MD,207,ES,40.67816,-3.9707 35616,Morata de Tajuña,1158,MD,207,ES,40.2268,-3.43269 35617,Moratalaz,1158,MD,207,ES,40.40742,-3.64935 35708,Móstoles,1158,MD,207,ES,40.32234,-3.86496 35731,Navacerrada,1158,MD,207,ES,40.72905,-4.01696 35742,Navalafuente,1158,MD,207,ES,40.82063,-3.67266 35743,Navalagamella,1158,MD,207,ES,40.46894,-4.12334 35744,Navalcarnero,1158,MD,207,ES,40.28908,-4.01197 35758,Navalquejigo,1158,MD,207,ES,40.60705,-4.04966 35783,Navas del Rey,1158,MD,207,ES,40.3861,-4.25117 35835,Nuevo Baztán,1158,MD,207,ES,40.36731,-3.24125 36053,Paracuellos de Jarama,1158,MD,207,ES,40.50353,-3.52775 36070,Parla,1158,MD,207,ES,40.23604,-3.76752 36082,Patones,1158,MD,207,ES,40.85563,-3.4849 36097,Pedrezuela,1158,MD,207,ES,40.74277,-3.5998 36122,Pelayos de la Presa,1158,MD,207,ES,40.36051,-4.33462 36139,Perales de Tajuña,1158,MD,207,ES,40.2313,-3.35021 36160,Pezuela de las Torres,1158,MD,207,ES,40.41613,-3.17363 36192,Pinar de Chamartín,1158,MD,207,ES,40.47903,-3.66836 36207,Pinilla del Valle,1158,MD,207,ES,40.92448,-3.81688 36215,Pinto,1158,MD,207,ES,40.24147,-3.69999 36331,Pozuelo de Alarcón,1158,MD,207,ES,40.43293,-3.81338 36338,Pozuelo del Rey,1158,MD,207,ES,40.36463,-3.31699 36406,Prádena del Rincón,1158,MD,207,ES,41.04414,-3.54075 36379,Provincia de Madrid,1158,MD,207,ES,40.40225,-3.71029 36437,Puente de Vallecas,1158,MD,207,ES,40.39354,-3.662 36500,Quijorna,1158,MD,207,ES,40.42763,-4.05683 36547,Rascafría,1158,MD,207,ES,40.90407,-3.87898 36563,Redueña,1158,MD,207,ES,40.81685,-3.59837 36587,Retiro,1158,MD,207,ES,40.41317,-3.68307 36613,Ribatejada,1158,MD,207,ES,40.6642,-3.38976 36639,Rivas-Vaciamadrid,1158,MD,207,ES,40.32605,-3.51089 36651,Robledillo de la Jara,1158,MD,207,ES,40.95054,-3.52181 36654,Robledo de Chavela,1158,MD,207,ES,40.50062,-4.23635 36686,Rozas de Puerto Real,1158,MD,207,ES,40.31667,-4.48333 36745,Salamanca,1158,MD,207,ES,40.42972,-3.67975 36799,San Agustín del Guadalix,1158,MD,207,ES,40.67882,-3.61639 36812,San Blas-Canillejas,1158,MD,207,ES,40.43893,-3.61537 36836,San Fernando de Henares,1158,MD,207,ES,40.42386,-3.53261 36858,San Lorenzo de El Escorial,1158,MD,207,ES,40.59144,-4.14738 36873,San Martín de la Vega,1158,MD,207,ES,40.20735,-3.57063 36870,San Martín de Valdeiglesias,1158,MD,207,ES,40.36185,-4.39831 36922,San Sebastián de los Reyes,1158,MD,207,ES,40.55555,-3.62733 37079,Santa María de la Alameda,1158,MD,207,ES,40.59492,-4.25772 37146,Santorcaz,1158,MD,207,ES,40.47176,-3.23462 37225,Serranillos del Valle,1158,MD,207,ES,40.20211,-3.88187 37240,Sevilla La Nueva,1158,MD,207,ES,40.34775,-4.02727 37354,Talamanca de Jarama,1158,MD,207,ES,40.74325,-3.50889 37417,Tetuán de las Victorias,1158,MD,207,ES,40.45975,-3.6975 37422,Tielmes,1158,MD,207,ES,40.24652,-3.31461 37431,Titulcia,1158,MD,207,ES,40.13537,-3.56763 37538,Torrejón de Ardoz,1158,MD,207,ES,40.45535,-3.46973 37540,Torrejón de la Calzada,1158,MD,207,ES,40.19886,-3.797 37539,Torrejón de Velasco,1158,MD,207,ES,40.18746,-3.77681 37543,Torrelaguna,1158,MD,207,ES,40.82764,-3.53683 37551,Torrelodones,1158,MD,207,ES,40.57654,-3.92658 37557,Torremocha de Jarama,1158,MD,207,ES,40.84148,-3.49666 37577,Torres de la Alameda,1158,MD,207,ES,40.40264,-3.35767 37629,Tres Cantos,1158,MD,207,ES,40.60092,-3.70806 37705,Usera,1158,MD,207,ES,40.38866,-3.70035 37726,Valdaracete,1158,MD,207,ES,40.2077,-3.19101 37735,Valdeavero,1158,MD,207,ES,40.6298,-3.33001 37765,Valdemanco,1158,MD,207,ES,40.87039,-3.65873 37767,Valdemaqueda,1158,MD,207,ES,40.51201,-4.29722 37772,Valdemorillo,1158,MD,207,ES,40.50064,-4.0671 37774,Valdemoro,1158,MD,207,ES,40.19081,-3.67887 37781,Valdeolmos,1158,MD,207,ES,40.63708,-3.45064 37786,Valdepiélagos,1158,MD,207,ES,40.75842,-3.46163 37804,Valdetorres de Jarama,1158,MD,207,ES,40.69366,-3.51156 37810,Valdilecha,1158,MD,207,ES,40.2953,-3.30233 37882,Valverde de Alcalá,1158,MD,207,ES,40.41667,-3.29631 37931,Velilla de San Antonio,1158,MD,207,ES,40.36516,-3.48484 37946,Venturada,1158,MD,207,ES,40.79717,-3.61974 37963,Vicálvaro,1158,MD,207,ES,40.4,-3.6 38009,Villa de Vallecas,1158,MD,207,ES,40.36695,-3.60146 38012,Villa del Prado,1158,MD,207,ES,40.27852,-4.30534 38034,Villaconejos,1158,MD,207,ES,40.10139,-3.48258 38105,Villalbilla,1158,MD,207,ES,40.43044,-3.29904 38131,Villamanrique de Tajo,1158,MD,207,ES,40.06617,-3.23668 38133,Villamanta,1158,MD,207,ES,40.29858,-4.1088 38134,Villamantilla,1158,MD,207,ES,40.33846,-4.12986 38196,Villanueva de la Cañada,1158,MD,207,ES,40.44689,-4.00428 38187,Villanueva de Perales,1158,MD,207,ES,40.34541,-4.09891 38219,Villanueva del Pardillo,1158,MD,207,ES,40.49014,-3.96383 38257,Villar del Olmo,1158,MD,207,ES,40.33468,-3.23399 38273,Villarejo de Salvanés,1158,MD,207,ES,40.16663,-3.27277 38343,Villaverde,1158,MD,207,ES,40.35,-3.7 38357,Villaviciosa de Odón,1158,MD,207,ES,40.3581,-3.9043 38360,Villavieja del Lozoya,1158,MD,207,ES,41.00396,-3.6687 38482,Zarzalejo,1158,MD,207,ES,40.54811,-4.18176 35391,Melilla,1159,ML,207,ES,35.29369,-2.93833 31903,Abanilla,1176,MC,207,ES,38.20537,-1.04153 31905,Abarán,1176,MC,207,ES,38.20551,-1.39907 38574,Águilas,1176,MC,207,ES,37.4063,-1.58289 32057,Albudeite,1176,MC,207,ES,38.02895,-1.38664 32084,Alcantarilla,1176,MC,207,ES,37.96939,-1.21714 32182,Aledo,1176,MC,207,ES,37.79341,-1.57356 32229,Alguazas,1176,MC,207,ES,38.05356,-1.25051 32236,Alhama de Murcia,1176,MC,207,ES,37.85103,-1.42507 32430,Archena,1176,MC,207,ES,38.11631,-1.30043 32546,Atamaría,1176,MC,207,ES,37.59989,-0.80682 32677,Barrio de la Concepción,1176,MC,207,ES,37.6,-1.0 32800,Beniel,1176,MC,207,ES,38.04636,-1.00233 32905,Blanca,1176,MC,207,ES,38.1791,-1.37473 33018,Bullas,1176,MC,207,ES,38.04667,-1.67227 33131,Calasparra,1176,MC,207,ES,38.22997,-1.69986 33211,Campos del Río,1176,MC,207,ES,38.03966,-1.35306 33277,Caravaca,1176,MC,207,ES,38.10558,-1.86343 33336,Cartagena,1176,MC,207,ES,37.60512,-0.98623 33560,Cehegín,1176,MC,207,ES,38.09242,-1.7985 33610,Ceuti,1176,MC,207,ES,38.07859,-1.27467 33659,Cieza,1176,MC,207,ES,38.23998,-1.41987 33706,Cobatillas,1176,MC,207,ES,38.05545,-1.07683 34009,El Plan,1176,MC,207,ES,37.65,-1.01667 34104,Esparragal,1176,MC,207,ES,38.03333,-1.08333 34231,Fortuna,1176,MC,207,ES,38.1814,-1.1259 34308,Fuente-Álamo de Murcia,1176,MC,207,ES,37.72389,-1.16972 34828,Jumilla,1176,MC,207,ES,38.47917,-1.325 34893,La Manga del Mar Menor,1176,MC,207,ES,37.64129,-0.71651 34931,La Torrecilla,1176,MC,207,ES,37.62363,-1.72785 34932,La Unión,1176,MC,207,ES,37.61915,-0.87799 34993,Las Torres de Cotillas,1176,MC,207,ES,38.02822,-1.24188 35046,Librilla,1176,MC,207,ES,37.88642,-1.35557 35092,Lo Pagán,1176,MC,207,ES,37.81761,-0.78832 35113,Lorca,1176,MC,207,ES,37.67119,-1.7017 35115,Lorquí,1176,MC,207,ES,38.08261,-1.25103 35116,Los Alcázares,1176,MC,207,ES,37.74425,-0.85041 35121,Los Gabatos,1176,MC,207,ES,37.63333,-1.0 35125,Los Martínez,1176,MC,207,ES,37.81841,-1.0788 35356,Mazarrón,1176,MC,207,ES,37.5992,-1.31493 35478,Molina de Segura,1176,MC,207,ES,38.05456,-1.20763 35618,Moratalla,1176,MC,207,ES,38.18928,-1.89183 35661,Mula,1176,MC,207,ES,38.04095,-1.49014 35671,Murcia,1176,MC,207,ES,37.98662,-1.14146 35871,Ojós,1176,MC,207,ES,38.147,-1.34261 36245,Pliego,1176,MC,207,ES,37.98946,-1.50444 36445,Puerto Lumbreras,1176,MC,207,ES,37.56329,-1.80974 36621,Ricote,1176,MC,207,ES,38.15338,-1.36557 36840,San Javier,1176,MC,207,ES,37.80626,-0.83736 36910,San Pedro del Pinatar,1176,MC,207,ES,37.83568,-0.79102 36945,Sangonera la Verde,1176,MC,207,ES,37.92862,-1.20794 37026,Santa Cruz,1176,MC,207,ES,38.0218,-1.05749 37116,Santiago de la Ribera,1176,MC,207,ES,37.79681,-0.80544 37145,Santomera,1176,MC,207,ES,38.06147,-1.04877 37507,Torre-Pacheco,1176,MC,207,ES,37.74293,-0.95396 37606,Totana,1176,MC,207,ES,37.7688,-1.50229 37678,Ulea,1176,MC,207,ES,38.14045,-1.33007 38431,Yecla,1176,MC,207,ES,38.61365,-1.11468 31920,Abáigar,1204,NC,207,ES,42.64823,-2.14182 31933,Adiós,1204,NC,207,ES,42.68635,-1.73532 31962,Aguilar de Codés,1204,NC,207,ES,42.61249,-2.38987 32256,Allo,1204,NC,207,ES,42.56738,-2.02052 32341,Altsasu,1204,NC,207,ES,42.89999,-2.16516 32370,Ancín,1204,NC,207,ES,42.66047,-2.18885 32374,Andosilla,1204,NC,207,ES,42.38144,-1.67305 32597,Añorbe,1204,NC,207,ES,42.65732,-1.7149 32397,Aoiz,1204,NC,207,ES,42.78633,-1.37252 32405,Aranarache,1204,NC,207,ES,42.77979,-2.22924 32413,Arano,1204,NC,207,ES,43.19956,-1.89569 32416,Aras,1204,NC,207,ES,42.56172,-2.356 32424,Arbizu,1204,NC,207,ES,42.91545,-2.03917 32443,Arellano,1204,NC,207,ES,42.60598,-2.04653 32457,Areso,1204,NC,207,ES,43.08209,-1.95198 32473,Arguedas,1204,NC,207,ES,42.17759,-1.59719 32477,Aria,1204,NC,207,ES,42.95283,-1.26584 32486,Armañanzas,1204,NC,207,ES,42.55963,-2.28476 32517,Arróniz,1204,NC,207,ES,42.58823,-2.09237 32516,Arruazu,1204,NC,207,ES,42.92186,-2.00157 32519,Artajona,1204,NC,207,ES,42.58867,-1.76504 32521,Artazu,1204,NC,207,ES,42.69228,-1.83954 32551,Atarrabia,1204,NC,207,ES,42.8323,-1.60735 32572,Ayegui,1204,NC,207,ES,42.65656,-2.03934 32580,Azagra,1204,NC,207,ES,42.3,-1.9 32590,Azuelo,1204,NC,207,ES,42.60844,-2.34987 32617,Bakaiku,1204,NC,207,ES,42.89244,-2.10251 32640,Barañáin,1204,NC,207,ES,42.80567,-1.67731 32685,Barásoain,1204,NC,207,ES,42.60339,-1.64658 32663,Bargota,1204,NC,207,ES,42.55982,-2.31067 32664,Barillas,1204,NC,207,ES,41.96667,-1.63333 32731,Beire,1204,NC,207,ES,42.45415,-1.62101 32735,Belascoáin,1204,NC,207,ES,42.75619,-1.83227 32830,Bera,1204,NC,207,ES,43.28177,-1.68632 32836,Berbinzana,1204,NC,207,ES,42.52779,-1.83419 32852,Beriáin,1204,NC,207,ES,42.73347,-1.64448 32864,Berriobeiti,1204,NC,207,ES,42.85,-1.7 32865,Berriozar,1204,NC,207,ES,42.83067,-1.66648 32880,Betelu,1204,NC,207,ES,43.02555,-1.98029 33046,Buñuel,1204,NC,207,ES,41.98009,-1.44503 33031,Burlata,1204,NC,207,ES,42.82562,-1.61671 33101,Cabredo,1204,NC,207,ES,42.62966,-2.41133 33118,Cadreita,1204,NC,207,ES,42.21667,-1.68333 33263,Caparroso,1204,NC,207,ES,42.34129,-1.64962 33895,Cárcar,1204,NC,207,ES,42.39314,-1.97904 33292,Carcastillo,1204,NC,207,ES,42.37908,-1.44376 33386,Cascante,1204,NC,207,ES,41.99769,-1.68098 33899,Cáseda,1204,NC,207,ES,42.52255,-1.36636 33399,Castejón,1204,NC,207,ES,42.16912,-1.68951 33467,Castillonuevo,1204,NC,207,ES,42.6827,-1.03121 33679,Cintruénigo,1204,NC,207,ES,42.07937,-1.80458 33682,Cirauqui,1204,NC,207,ES,42.67596,-1.89115 33684,Ciriza,1204,NC,207,ES,42.79019,-1.82822 33703,Cizur Mayor,1204,NC,207,ES,42.78795,-1.69065 33785,Corella,1204,NC,207,ES,42.11507,-1.78563 33929,Desojo,1204,NC,207,ES,42.5879,-2.27438 33933,Dicastillo,1204,NC,207,ES,42.59647,-2.02666 33943,Doneztebe,1204,NC,207,ES,43.13333,-1.66667 33969,Echarri,1204,NC,207,ES,42.78017,-1.82525 33970,Echarri-Aranaz,1204,NC,207,ES,42.90791,-2.06474 34036,Elgorriaga,1204,NC,207,ES,43.13858,-1.68657 34039,Elorz,1204,NC,207,ES,42.73258,-1.56152 34065,Enériz,1204,NC,207,ES,42.67095,-1.72794 34068,Ermitagaña,1204,NC,207,ES,42.81084,-1.66409 34099,Eslava,1204,NC,207,ES,42.56459,-1.45947 34133,Espronceda,1204,NC,207,ES,42.59707,-2.30524 34139,Estella-Lizarra,1204,NC,207,ES,42.67182,-2.03226 34151,Etayo,1204,NC,207,ES,42.61695,-2.15447 34152,Eulate,1204,NC,207,ES,42.77641,-2.20638 34158,Falces,1204,NC,207,ES,42.38966,-1.79321 34193,Fitero,1204,NC,207,ES,42.0577,-1.85756 34214,Fontellas,1204,NC,207,ES,42.02694,-1.57648 34365,Funes,1204,NC,207,ES,42.31562,-1.80017 34366,Fustiñana,1204,NC,207,ES,42.02087,-1.48526 34374,Galar,1204,NC,207,ES,42.76147,-1.69881 34394,Gallipienzo,1204,NC,207,ES,42.5245,-1.41115 34413,Garde,1204,NC,207,ES,42.78937,-0.92589 34429,Garínoain,1204,NC,207,ES,42.60036,-1.64434 34422,Garralda,1204,NC,207,ES,42.94818,-1.28624 34452,Genevilla,1204,NC,207,ES,42.6452,-2.39021 34477,Goizueta,1204,NC,207,ES,43.17187,-1.86411 34491,Goñi,1204,NC,207,ES,42.85167,-1.90358 34550,Guirguillano,1204,NC,207,ES,42.71725,-1.87798 34682,Huarte-Uharte,1204,NC,207,ES,42.83035,-1.59087 34734,Igantzi,1204,NC,207,ES,43.22526,-1.70048 34741,Igúzquiza,1204,NC,207,ES,42.64545,-2.08551 34758,Irañeta,1204,NC,207,ES,42.92287,-1.94595 34774,Ituren,1204,NC,207,ES,43.13238,-1.72063 34775,Iturmendi,1204,NC,207,ES,42.88993,-2.11916 34776,Iturrama,1204,NC,207,ES,42.80847,-1.65825 34809,Javier,1204,NC,207,ES,42.59119,-1.20884 34972,Lapoblación,1204,NC,207,ES,42.60478,-2.46008 34978,Larraga,1204,NC,207,ES,42.55841,-1.84954 34979,Larraona,1204,NC,207,ES,42.7797,-2.25682 35008,Lazagurría,1204,NC,207,ES,42.49286,-2.24018 35010,Leache,1204,NC,207,ES,42.60718,-1.40728 35022,Legarda,1204,NC,207,ES,42.71183,-1.76846 35023,Legaria,1204,NC,207,ES,42.64924,-2.17392 35031,Lerga,1204,NC,207,ES,42.56781,-1.5011 35033,Lerín,1204,NC,207,ES,42.48318,-1.97184 35044,Lezáun,1204,NC,207,ES,42.77739,-1.99385 35061,Liédena,1204,NC,207,ES,42.61943,-1.27579 35060,Lizoáin,1204,NC,207,ES,42.79868,-1.46753 35098,Lodosa,1204,NC,207,ES,42.42269,-2.07741 35117,Los Arcos,1204,NC,207,ES,42.57076,-2.19275 35162,Lumbier,1204,NC,207,ES,42.65303,-1.30669 35362,Mañeru,1204,NC,207,ES,42.67001,-1.86297 35280,Marañón,1204,NC,207,ES,42.62941,-2.43931 35286,Marcilla,1204,NC,207,ES,42.32794,-1.73714 35705,Mélida,1204,NC,207,ES,42.35869,-1.54888 35399,Mendavia,1204,NC,207,ES,42.44335,-2.20087 35401,Mendigorría,1204,NC,207,ES,42.62822,-1.8345 35413,Metauten,1204,NC,207,ES,42.67714,-2.13015 35428,Milagro,1204,NC,207,ES,42.2416,-1.76588 35443,Mirafuentes,1204,NC,207,ES,42.62297,-2.27966 35448,Miranda de Arga,1204,NC,207,ES,42.48337,-1.82759 35520,Monreal,1204,NC,207,ES,42.70421,-1.50785 35626,Morentin,1204,NC,207,ES,42.61286,-2.01393 35670,Murchante,1204,NC,207,ES,42.03185,-1.65582 35677,Murieta,1204,NC,207,ES,42.65618,-2.15452 35679,Murillo el Fruto,1204,NC,207,ES,42.39272,-1.46034 35687,Muruzábal,1204,NC,207,ES,42.69051,-1.76931 35784,Navascués,1204,NC,207,ES,42.71758,-1.11744 35793,Nazar,1204,NC,207,ES,42.63686,-2.27966 35852,Obanos,1204,NC,207,ES,42.68071,-1.78493 35858,Oco,1204,NC,207,ES,42.63828,-2.16476 35873,Olazagutía,1204,NC,207,ES,42.87584,-2.19538 35877,Olejua,1204,NC,207,ES,42.62329,-2.14202 35882,Olite,1204,NC,207,ES,42.47971,-1.65196 35920,Olóriz,1204,NC,207,ES,42.63522,-1.61276 35913,Oltza,1204,NC,207,ES,42.85,-1.76667 35933,Orbara,1204,NC,207,ES,42.96728,-1.24213 35967,Orísoain,1204,NC,207,ES,42.60122,-1.60403 35954,Orkoien,1204,NC,207,ES,42.8238,-1.70485 35956,Oronz,1204,NC,207,ES,42.86873,-1.09683 35976,Oteiza,1204,NC,207,ES,42.61905,-1.95385 36045,Pamplona,1204,NC,207,ES,42.81687,-1.64323 36142,Peralta,1204,NC,207,ES,42.33834,-1.80035 36156,Petilla de Aragón,1204,NC,207,ES,42.45,-1.11667 36183,Piedramillera,1204,NC,207,ES,42.632,-2.20416 36223,Pitillas,1204,NC,207,ES,42.42172,-1.62017 36355,Primer Ensanche,1204,NC,207,ES,42.81483,-1.64898 36381,Provincia de Navarra,1204,NC,207,ES,42.8233,-1.65138 36439,Puente la Reina,1204,NC,207,ES,42.67291,-1.81412 36459,Pueyo,1204,NC,207,ES,42.56506,-1.64826 36610,Ribaforada,1204,NC,207,ES,41.99814,-1.51272 36758,Saldías,1204,NC,207,ES,43.08858,-1.77946 36764,Salinas de Oro,1204,NC,207,ES,42.77487,-1.88999 36795,San Adrián,1204,NC,207,ES,42.33433,-1.93509 36869,San Martín de Unx,1204,NC,207,ES,42.52473,-1.56091 36946,Sangüesa/Zangoza,1204,NC,207,ES,42.57483,-1.28283 36950,Sansol,1204,NC,207,ES,42.55362,-2.26676 37103,Santacara,1204,NC,207,ES,42.36667,-1.63333 37169,Sarriguren,1204,NC,207,ES,42.81292,-1.59815 37174,Sartaguda,1204,NC,207,ES,42.38333,-2.05709 37193,Segundo Ensanche,1204,NC,207,ES,42.8139,-1.64295 37232,Sesma,1204,NC,207,ES,42.47748,-2.08353 37303,Sorlada,1204,NC,207,ES,42.61507,-2.21525 37348,Tafalla,1204,NC,207,ES,42.52687,-1.67446 37428,Tirapu,1204,NC,207,ES,42.6574,-1.70263 37579,Torres del Río,1204,NC,207,ES,42.55162,-2.27285 37648,Tudela,1204,NC,207,ES,42.06166,-1.60452 37653,Tulebras,1204,NC,207,ES,41.97695,-1.67618 37677,Ujué,1204,NC,207,ES,42.5,-1.5 37689,Unzué,1204,NC,207,ES,42.65252,-1.62598 37701,Urzainqui,1204,NC,207,ES,42.83029,-0.94617 37709,Uterga,1204,NC,207,ES,42.70981,-1.76004 37879,Valtierra,1204,NC,207,ES,42.19653,-1.63459 38055,Villafranca,1204,NC,207,ES,42.27933,-1.74628 38143,Villamayor de Monjardín,1204,NC,207,ES,42.62937,-2.10503 38334,Villatuerta,1204,NC,207,ES,42.66022,-1.99247 38436,Yerri,1204,NC,207,ES,42.70161,-1.93806 38437,Yesa,1204,NC,207,ES,42.62025,-1.2036 38502,Zubieta,1204,NC,207,ES,43.12473,-1.74219 38506,Zugarramurdi,1204,NC,207,ES,43.26964,-1.54113 38513,Zúñiga,1204,NC,207,ES,42.69247,-2.29982 31932,Ademuz,1175,VC,207,ES,40.06139,-1.28677 31935,Ador,1175,VC,207,ES,38.91823,-0.22247 31941,Adsubia,1175,VC,207,ES,38.84819,-0.15324 31943,Adzaneta,1175,VC,207,ES,40.21616,-0.17028 31947,Agost,1175,VC,207,ES,38.44003,-0.63836 31949,Agres,1175,VC,207,ES,38.78333,-0.51667 31968,Agullent,1175,VC,207,ES,38.82273,-0.54833 31979,Aielo de Malferit,1175,VC,207,ES,38.88333,-0.58333 32001,Alaquàs,1175,VC,207,ES,39.45568,-0.461 32014,Albaida,1175,VC,207,ES,38.83798,-0.51721 32016,Albal,1175,VC,207,ES,39.4,-0.41667 32019,Albalat de la Ribera,1175,VC,207,ES,39.2,-0.38333 32020,Albalat dels Sorells,1175,VC,207,ES,39.53333,-0.35 32021,Albalat dels Tarongers,1175,VC,207,ES,39.7,-0.33333 32032,Albatera,1175,VC,207,ES,38.17902,-0.87059 32037,Alberic,1175,VC,207,ES,39.11667,-0.51667 32047,Albocàsser,1175,VC,207,ES,40.35,0.03333 32051,Alborache,1175,VC,207,ES,39.38333,-0.76667 32052,Alboraya,1175,VC,207,ES,39.5,-0.35 32058,Albuixech,1175,VC,207,ES,39.55,-0.31667 32068,Alcalà de Xivert,1175,VC,207,ES,40.3,0.23333 32067,Alcalalí,1175,VC,207,ES,38.75038,-0.04013 32133,Alcàntera de Xúquer,1175,VC,207,ES,39.06667,-0.55 32134,Alcàsser,1175,VC,207,ES,39.36791,-0.44447 32101,Alcocéber,1175,VC,207,ES,40.25142,0.28433 32099,Alcocer de Planes,1175,VC,207,ES,38.79501,-0.40244 32123,Alcoy,1175,VC,207,ES,38.70545,-0.47432 32129,Alcublas,1175,VC,207,ES,39.8,-0.7 32131,Alcudia de Veo,1175,VC,207,ES,39.91667,-0.35 32140,Aldaia,1175,VC,207,ES,39.46569,-0.46005 32189,Alfafar,1175,VC,207,ES,39.41667,-0.38333 32190,Alfafara,1175,VC,207,ES,38.77339,-0.55551 32194,Alfara de Algimia,1175,VC,207,ES,39.76667,-0.35 32195,Alfara del Patriarca,1175,VC,207,ES,39.55,-0.38333 32199,Alfarp,1175,VC,207,ES,39.28333,-0.55 32200,Alfarrasí,1175,VC,207,ES,38.9,-0.5 32202,Alfauir,1175,VC,207,ES,38.93333,-0.25 32203,Alfondeguilla,1175,VC,207,ES,39.83333,-0.26667 32217,Algemesí,1175,VC,207,ES,39.19042,-0.43572 32220,Algimia de Alfara,1175,VC,207,ES,39.75,-0.36667 32221,Algimia de Almonacid,1175,VC,207,ES,39.91667,-0.43333 32222,Alginet,1175,VC,207,ES,39.26667,-0.46667 32226,Algorfa,1175,VC,207,ES,38.08636,-0.79646 32230,Algueña,1175,VC,207,ES,38.33905,-1.00433 32244,Alicante,1175,VC,207,ES,38.34517,-0.48149 32273,Almassora,1175,VC,207,ES,39.94729,-0.06313 32278,Almedíjar,1175,VC,207,ES,39.86667,-0.4 32282,Almenara,1175,VC,207,ES,39.75,-0.21667 32291,Almiserà,1175,VC,207,ES,38.91667,-0.28333 32300,Almoines,1175,VC,207,ES,38.94325,-0.18155 32306,Almoradí,1175,VC,207,ES,38.10879,-0.79197 32310,Almudaina,1175,VC,207,ES,38.75999,-0.35149 32313,Almussafes,1175,VC,207,ES,39.28333,-0.41667 32332,Alpuente,1175,VC,207,ES,39.86667,-1.01667 32333,Alquerías del Niño Perdido,1175,VC,207,ES,39.89466,-0.12943 32340,Altea,1175,VC,207,ES,38.59885,-0.05139 32342,Altura,1175,VC,207,ES,39.85,-0.51667 32344,Alzira,1175,VC,207,ES,39.15,-0.43333 32371,Andilla,1175,VC,207,ES,39.83333,-0.8 32385,Anna,1175,VC,207,ES,39.02029,-0.64621 32391,Antella,1175,VC,207,ES,39.07977,-0.59195 32420,Arañuel,1175,VC,207,ES,40.06667,-0.48333 32456,Ares del Maestre,1175,VC,207,ES,40.45675,-0.13267 32469,Argelita,1175,VC,207,ES,40.05,-0.35 32520,Artana,1175,VC,207,ES,39.89104,-0.25758 32537,Aspe,1175,VC,207,ES,38.34511,-0.76721 32556,Atzeneta dAlbaida,1175,VC,207,ES,38.83333,-0.5 32579,Ayódar,1175,VC,207,ES,40.0,-0.36667 32576,Ayora,1175,VC,207,ES,39.05852,-1.05635 32593,Azuébar,1175,VC,207,ES,39.83333,-0.36667 32626,Balones,1175,VC,207,ES,38.73726,-0.34324 32667,Barracas,1175,VC,207,ES,40.01667,-0.68333 32683,Barx,1175,VC,207,ES,39.01667,-0.3 32684,Barxeta,1175,VC,207,ES,39.01667,-0.41667 33056,Bèlgida,1175,VC,207,ES,38.85,-0.46667 32744,Bellreguard,1175,VC,207,ES,38.95,-0.16667 32747,Bellús,1175,VC,207,ES,38.9458,-0.48697 32759,Benafigos,1175,VC,207,ES,40.27641,-0.20772 32761,Benagéber,1175,VC,207,ES,39.71667,-1.1 32760,Benaguasil,1175,VC,207,ES,39.6,-0.58333 32776,Benasau,1175,VC,207,ES,38.69047,-0.34278 32778,Benassal,1175,VC,207,ES,40.3769,-0.1397 32783,Benavites,1175,VC,207,ES,39.73333,-0.25 32785,Beneixama,1175,VC,207,ES,38.7,-0.76667 32786,Beneixida,1175,VC,207,ES,39.06667,-0.55 32787,Benejúzar,1175,VC,207,ES,38.07728,-0.83942 32788,Benetússer,1175,VC,207,ES,39.42265,-0.39686 32789,Benferri,1175,VC,207,ES,38.14129,-0.96212 32790,Beniarbeig,1175,VC,207,ES,38.82232,-0.0021 32791,Beniardá,1175,VC,207,ES,38.68433,-0.21629 32792,Beniarjó,1175,VC,207,ES,38.93249,-0.18634 32793,Beniarrés,1175,VC,207,ES,38.82019,-0.37741 32794,Beniatjar,1175,VC,207,ES,38.84754,-0.41736 32795,Benicarló,1175,VC,207,ES,40.4165,0.42709 32797,Benicàssim,1175,VC,207,ES,40.05,0.06667 32796,Benicolet,1175,VC,207,ES,38.91987,-0.34694 32798,Benidoleig,1175,VC,207,ES,38.79278,-0.02992 32799,Benidorm,1175,VC,207,ES,38.53816,-0.13098 32802,Benifaió,1175,VC,207,ES,39.28439,-0.42598 32801,Benifairó de les Valls,1175,VC,207,ES,39.73333,-0.26667 32804,Benifallim,1175,VC,207,ES,38.66259,-0.39994 32805,Beniflá,1175,VC,207,ES,38.92813,-0.17816 32806,Benigànim,1175,VC,207,ES,38.95,-0.43333 32807,Benijofar,1175,VC,207,ES,38.07785,-0.7368 32808,Benilloba,1175,VC,207,ES,38.70012,-0.38998 32809,Benillup,1175,VC,207,ES,38.75397,-0.37991 32810,Benimantell,1175,VC,207,ES,38.67709,-0.21057 32811,Benimarfull,1175,VC,207,ES,38.7759,-0.39079 32812,Benimassot,1175,VC,207,ES,38.75,-0.28333 32813,Benimeli,1175,VC,207,ES,38.82362,-0.04221 32814,Benimodo,1175,VC,207,ES,39.21403,-0.52679 32815,Benimuslem,1175,VC,207,ES,39.13162,-0.49288 32816,Beniparrell,1175,VC,207,ES,39.38333,-0.41667 32817,Benirredrà,1175,VC,207,ES,38.96667,-0.18333 32818,Benisanó,1175,VC,207,ES,39.61667,-0.56667 32819,Benissa,1175,VC,207,ES,38.71492,0.04849 32820,Benissoda,1175,VC,207,ES,38.83333,-0.51667 32821,Benisuera,1175,VC,207,ES,38.9132,-0.47784 32822,Benitachell,1175,VC,207,ES,38.73273,0.14354 32825,Benlloch,1175,VC,207,ES,40.21075,0.02717 33062,Bétera,1175,VC,207,ES,39.59111,-0.46151 32882,Betxí,1175,VC,207,ES,39.93333,-0.2 32885,Biar,1175,VC,207,ES,38.63117,-0.76458 32886,Bicorp,1175,VC,207,ES,39.13215,-0.7872 32892,Bigastro,1175,VC,207,ES,38.06237,-0.89841 32923,Bocairent,1175,VC,207,ES,38.76667,-0.61667 32937,Bolbaite,1175,VC,207,ES,39.06041,-0.67466 32941,Bolulla,1175,VC,207,ES,38.67529,-0.11184 32962,Borriol,1175,VC,207,ES,40.04249,-0.07025 33009,Bufali,1175,VC,207,ES,38.86775,-0.51617 33010,Bugarra,1175,VC,207,ES,39.61667,-0.76667 33045,Buñol,1175,VC,207,ES,39.41667,-0.78333 33030,Burjassot,1175,VC,207,ES,39.50984,-0.41327 33032,Burriana,1175,VC,207,ES,39.88901,-0.08499 33035,Busot,1175,VC,207,ES,38.48206,-0.41918 33067,Cabanes,1175,VC,207,ES,40.156,0.04325 33889,Càlig,1175,VC,207,ES,40.46262,0.35521 33145,Calles,1175,VC,207,ES,39.72118,-0.97057 33146,Callosa de Segura,1175,VC,207,ES,38.12497,-0.87822 33151,Calp,1175,VC,207,ES,38.6447,0.0445 33209,Camporrobles,1175,VC,207,ES,39.65,-1.4 33224,Canals,1175,VC,207,ES,38.96251,-0.58443 33233,Canet dEn Berenguer,1175,VC,207,ES,39.68333,-0.21667 33235,Canet lo Roig,1175,VC,207,ES,40.55142,0.24308 33291,Carcaixent,1175,VC,207,ES,39.1218,-0.44812 33891,Càrcer,1175,VC,207,ES,39.06667,-0.56667 33308,Carlet,1175,VC,207,ES,39.2266,-0.52142 33335,Carrícola,1175,VC,207,ES,38.84133,-0.4726 33355,Casas Altas,1175,VC,207,ES,40.03333,-1.26667 33356,Casas Bajas,1175,VC,207,ES,40.01667,-1.26667 33391,Casinos,1175,VC,207,ES,39.7,-0.7 33396,Castalla,1175,VC,207,ES,38.59694,-0.67207 33410,Castell de Cabres,1175,VC,207,ES,40.66058,0.04217 33411,Castell de Castells,1175,VC,207,ES,38.72555,-0.19242 33428,Castellfort,1175,VC,207,ES,40.50208,-0.19133 33430,Castellnovo,1175,VC,207,ES,39.86667,-0.45 33438,Castelló de la Plana,1175,VC,207,ES,39.98567,-0.04935 33437,Castelló de Rugat,1175,VC,207,ES,38.88333,-0.36667 33432,Castellonet de la Conquesta,1175,VC,207,ES,38.91667,-0.26667 33441,Castielfabib,1175,VC,207,ES,40.13076,-1.30396 33465,Castillo de Villamalefa,1175,VC,207,ES,40.13333,-0.38333 33513,Catadau,1175,VC,207,ES,39.26667,-0.56667 33514,Catarroja,1175,VC,207,ES,39.4,-0.4 33517,Catí,1175,VC,207,ES,40.47156,0.02275 33516,Catral,1175,VC,207,ES,38.16061,-0.80209 33519,Caudete de las Fuentes,1175,VC,207,ES,39.55965,-1.27853 33582,Cerdà,1175,VC,207,ES,38.98333,-0.56667 33601,Cervera del Maestre,1175,VC,207,ES,40.45366,0.27659 33623,Chella,1175,VC,207,ES,39.04203,-0.65916 33624,Chelva,1175,VC,207,ES,39.7493,-0.99684 33626,Chera,1175,VC,207,ES,39.6,-0.96667 33628,Chert/Xert,1175,VC,207,ES,40.51944,0.15831 33629,Cheste,1175,VC,207,ES,39.48333,-0.68333 33632,Chilches,1175,VC,207,ES,39.78238,-0.18742 33644,Chiva,1175,VC,207,ES,39.46667,-0.71667 33654,Chóvar,1175,VC,207,ES,39.85,-0.31667 33650,Chulilla,1175,VC,207,ES,39.65,-0.88333 33678,Cinctorres,1175,VC,207,ES,40.58333,-0.21667 33681,Cirat,1175,VC,207,ES,40.05,-0.45 33716,Cocentaina,1175,VC,207,ES,38.73975,-0.43976 33719,Cofrentes,1175,VC,207,ES,39.22926,-1.06061 33757,Confrides,1175,VC,207,ES,38.68451,-0.2689 33774,Corbera,1175,VC,207,ES,39.15,-0.35 33809,Cortes de Arenoso,1175,VC,207,ES,40.18812,-0.54195 33811,Cortes de Pallás,1175,VC,207,ES,39.25,-0.93333 33822,Costur,1175,VC,207,ES,40.11971,-0.17385 33824,Cotes,1175,VC,207,ES,39.0701,-0.57449 33829,Cox,1175,VC,207,ES,38.14164,-0.88736 33835,Crevillente,1175,VC,207,ES,38.24994,-0.80975 33875,Cuevas de Vinromá,1175,VC,207,ES,40.30976,0.12084 33880,Culla,1175,VC,207,ES,40.3365,-0.16569 33881,Cullera,1175,VC,207,ES,39.16667,-0.25 33910,Daimús,1175,VC,207,ES,38.96667,-0.15 33915,Daya Nueva,1175,VC,207,ES,38.11313,-0.76028 33916,Daya Vieja,1175,VC,207,ES,38.1048,-0.73804 33926,Denia,1175,VC,207,ES,38.84078,0.10574 33936,Dolores,1175,VC,207,ES,38.14002,-0.77088 33937,Domeño,1175,VC,207,ES,39.66115,-0.67077 33948,Dos Aguas,1175,VC,207,ES,39.28333,-0.8 33984,El Campello,1175,VC,207,ES,38.42885,-0.39774 33999,El Grao,1175,VC,207,ES,39.97358,0.01284 34006,El Perelló,1175,VC,207,ES,39.27718,-0.27569 34030,Elche,1175,VC,207,ES,38.26218,-0.70107 34033,Elda,1175,VC,207,ES,38.47783,-0.79157 38533,els Poblets,1175,VC,207,ES,38.85381,0.02103 34042,Emperador,1175,VC,207,ES,39.55,-0.33333 34058,Enguera,1175,VC,207,ES,38.97974,-0.68683 34100,Eslida,1175,VC,207,ES,39.88333,-0.3 34103,Espadilla,1175,VC,207,ES,40.03333,-0.35 34145,Estivella,1175,VC,207,ES,39.71667,-0.35 34149,Estubeny,1175,VC,207,ES,39.01792,-0.62379 34156,Facheca,1175,VC,207,ES,38.73501,-0.26766 34160,Famorca,1175,VC,207,ES,38.73101,-0.24726 34161,Fanzara,1175,VC,207,ES,40.01667,-0.31667 34168,Faura,1175,VC,207,ES,39.71667,-0.25 34169,Favara,1175,VC,207,ES,39.11667,-0.28333 34185,Figueroles,1175,VC,207,ES,40.11667,-0.23333 34189,Finestrat,1175,VC,207,ES,38.56737,-0.21235 34198,Foios,1175,VC,207,ES,39.53333,-0.35 34213,Fontanars dels Alforins,1175,VC,207,ES,38.78423,-0.78667 34220,Forcall,1175,VC,207,ES,40.64542,-0.19992 34222,Formentera de Segura,1175,VC,207,ES,38.08509,-0.74604 34228,Fortaleny,1175,VC,207,ES,39.18333,-0.3 34305,Fuente la Reina,1175,VC,207,ES,40.06667,-0.6 34334,Fuenterrobles,1175,VC,207,ES,39.58333,-1.35 34339,Fuentes de Ayódar,1175,VC,207,ES,40.03333,-0.41667 34370,Gaibiel,1175,VC,207,ES,39.93333,-0.48333 34403,Gandia,1175,VC,207,ES,38.96667,-0.18333 34435,Gata de Gorgos,1175,VC,207,ES,38.77443,0.08538 34439,Gavarda,1175,VC,207,ES,39.08333,-0.55 34445,Geldo,1175,VC,207,ES,39.83333,-0.46667 34453,Genovés,1175,VC,207,ES,38.98915,-0.46992 34458,Gestalgar,1175,VC,207,ES,39.6,-0.83333 34464,Gilet,1175,VC,207,ES,39.68333,-0.31667 34474,Godella,1175,VC,207,ES,39.53333,-0.41667 34475,Godelleta,1175,VC,207,ES,39.41667,-0.68333 34487,Gorga,1175,VC,207,ES,38.71896,-0.35589 34501,Granja de Rocamora,1175,VC,207,ES,38.15157,-0.8917 34505,Grao de Murviedro,1175,VC,207,ES,39.64167,-0.23889 34529,Guadasequies,1175,VC,207,ES,38.92539,-0.48585 34530,Guadassuar,1175,VC,207,ES,39.18663,-0.47859 34535,Guardamar del Segura,1175,VC,207,ES,38.09031,-0.65556 34579,Herbés,1175,VC,207,ES,40.721,-0.00441 34615,Higueras,1175,VC,207,ES,39.98333,-0.5 34617,Higueruelas,1175,VC,207,ES,39.78333,-0.85 34634,Hondón de las Nieves,1175,VC,207,ES,38.30844,-0.8533 34635,Hondón de los Frailes,1175,VC,207,ES,38.2739,-0.92938 34727,Ibi,1175,VC,207,ES,38.62533,-0.57225 34788,Jacarilla,1175,VC,207,ES,38.06247,-0.86822 34791,Jalance,1175,VC,207,ES,39.2,-1.06667 34792,Jalón,1175,VC,207,ES,38.74063,-0.01129 34797,Jarafuel,1175,VC,207,ES,39.14013,-1.07306 34808,Javea,1175,VC,207,ES,38.78333,0.16667 34837,Jérica,1175,VC,207,ES,39.91667,-0.56667 34815,Jijona,1175,VC,207,ES,38.54086,-0.50263 38534,lAlcora,1175,VC,207,ES,40.06667,-0.2 34840,LAlcúdia,1175,VC,207,ES,39.19717,-0.50537 34841,LAlcúdia de Crespìns,1175,VC,207,ES,38.96667,-0.58333 38535,lAlfàs del Pi,1175,VC,207,ES,38.58055,-0.10321 34842,LAlqueria de la Comtessa,1175,VC,207,ES,38.93333,-0.15 34845,LEliana,1175,VC,207,ES,39.56667,-0.53333 34847,LOlleria,1175,VC,207,ES,38.91667,-0.55 34871,La Font de la Figuera,1175,VC,207,ES,38.8,-0.88333 38554,la Nucia,1175,VC,207,ES,38.61372,-0.1269 34906,La Pobla de Farnals,1175,VC,207,ES,39.56571,-0.28425 34907,La Pobla de Vallbona,1175,VC,207,ES,39.59747,-0.55468 34904,La Pobla Llarga,1175,VC,207,ES,39.08333,-0.46667 34923,La Romana,1175,VC,207,ES,38.36753,-0.89862 34935,La Yesa,1175,VC,207,ES,39.88333,-0.95 35067,Llanera de Ranes,1175,VC,207,ES,38.99507,-0.57534 35071,Llaurí,1175,VC,207,ES,39.14671,-0.32944 35091,Llíria,1175,VC,207,ES,39.62894,-0.59783 35082,Llocnou de Sant Jeroni,1175,VC,207,ES,38.91667,-0.28333 35083,Llombai,1175,VC,207,ES,39.28333,-0.56667 35086,Llosa de Ranes,1175,VC,207,ES,39.02163,-0.53803 35090,Llutxent,1175,VC,207,ES,38.93333,-0.35 35114,Loriguilla,1175,VC,207,ES,39.68333,-0.91667 35128,Los Montesinos,1175,VC,207,ES,38.02822,-0.74501 35138,Losa del Obispo,1175,VC,207,ES,39.7,-0.86667 35151,Lucena del Cid,1175,VC,207,ES,40.13333,-0.28333 35155,Ludiente,1175,VC,207,ES,40.08333,-0.36667 35180,Macastre,1175,VC,207,ES,39.38333,-0.78333 35251,Manises,1175,VC,207,ES,39.49139,-0.46349 35261,Manuel,1175,VC,207,ES,39.05059,-0.48978 35292,Marines,1175,VC,207,ES,39.74165,-0.53103 35317,Masalavés,1175,VC,207,ES,39.14377,-0.5226 35326,Massamagrell,1175,VC,207,ES,39.56667,-0.33333 35341,Matet,1175,VC,207,ES,39.93333,-0.46667 35390,Meliana,1175,VC,207,ES,39.53333,-0.33333 35432,Millares,1175,VC,207,ES,39.25,-0.76667 35433,Millena,1175,VC,207,ES,38.73082,-0.36274 35446,Miramar,1175,VC,207,ES,38.95036,-0.14007 35456,Mislata,1175,VC,207,ES,39.47523,-0.41825 35467,Mogente,1175,VC,207,ES,38.87598,-0.7515 35499,Moncada,1175,VC,207,ES,39.54555,-0.39551 35502,Moncofa,1175,VC,207,ES,39.80907,-0.14701 35516,Monforte del Cid,1175,VC,207,ES,38.38027,-0.7285 35592,Monóvar,1175,VC,207,ES,38.43809,-0.84062 35527,Monserrat,1175,VC,207,ES,39.36667,-0.6 35529,Montaberner,1175,VC,207,ES,38.89021,-0.49582 35587,Montán,1175,VC,207,ES,40.03333,-0.55 35536,Montanejos,1175,VC,207,ES,40.06667,-0.51667 35570,Montesa,1175,VC,207,ES,38.9503,-0.652 35574,Montichelvo,1175,VC,207,ES,38.89129,-0.34123 35584,Montroy,1175,VC,207,ES,39.33333,-0.61667 35596,Moraira,1175,VC,207,ES,38.68866,0.13484 35624,Morella,1175,VC,207,ES,40.61966,-0.09892 35680,Murla,1175,VC,207,ES,38.76037,-0.08208 35683,Muro del Alcoy,1175,VC,207,ES,38.7812,-0.43608 35688,Museros,1175,VC,207,ES,39.56667,-0.35 35691,Mutxamel,1175,VC,207,ES,38.4158,-0.44529 35843,Náquera,1175,VC,207,ES,39.65,-0.41667 35738,Navajas,1175,VC,207,ES,39.88333,-0.5 35775,Navarrés,1175,VC,207,ES,39.10198,-0.69469 35828,Novelda,1175,VC,207,ES,38.38479,-0.76773 35837,Nules,1175,VC,207,ES,39.85362,-0.15643 35884,Oliva,1175,VC,207,ES,38.91971,-0.11935 35908,Olocau,1175,VC,207,ES,39.7,-0.53333 35909,Olocau del Rey,1175,VC,207,ES,40.63775,-0.34041 35922,Onda,1175,VC,207,ES,39.96495,-0.26041 35923,Ondara,1175,VC,207,ES,38.82817,0.0172 35925,Onil,1175,VC,207,ES,38.62606,-0.67313 35926,Ontinyent,1175,VC,207,ES,38.82191,-0.60603 35932,Orba,1175,VC,207,ES,38.78041,-0.06278 35938,Orcheta,1175,VC,207,ES,38.56397,-0.26299 35950,Orihuela,1175,VC,207,ES,38.08483,-0.94401 35958,Oropesa del Mar,1175,VC,207,ES,40.09134,0.14115 35980,Otos,1175,VC,207,ES,38.85427,-0.44399 35998,Paiporta,1175,VC,207,ES,39.42814,-0.41765 36016,Palanques,1175,VC,207,ES,40.718,-0.17941 36028,Palma de Gandía,1175,VC,207,ES,38.92672,-0.22028 36032,Palmera,1175,VC,207,ES,38.93927,-0.15411 36062,Parcent,1175,VC,207,ES,38.74502,-0.06446 36077,Paterna,1175,VC,207,ES,39.50263,-0.44079 36084,Pavías,1175,VC,207,ES,39.96667,-0.48333 36090,Pedralba,1175,VC,207,ES,39.6,-0.71667 36095,Pedreguer,1175,VC,207,ES,38.79312,0.03411 36115,Pego,1175,VC,207,ES,38.84305,-0.11707 36128,Peníscola,1175,VC,207,ES,40.3574,0.40692 36158,Petrés,1175,VC,207,ES,39.68333,-0.3 36177,Picanya,1175,VC,207,ES,39.43333,-0.43333 36178,Picassent,1175,VC,207,ES,39.3635,-0.45949 36187,Pilar de la Horadada,1175,VC,207,ES,37.86591,-0.79256 36189,Piles,1175,VC,207,ES,38.94143,-0.13286 36191,Pina de Montalgrao,1175,VC,207,ES,40.01667,-0.65 36200,Pinet,1175,VC,207,ES,38.98176,-0.3387 36213,Pinoso,1175,VC,207,ES,38.40164,-1.04196 36234,Planes,1175,VC,207,ES,38.78524,-0.34271 36261,Polinyà de Xúquer,1175,VC,207,ES,39.2,-0.36667 36264,Polop,1175,VC,207,ES,38.62258,-0.1309 36288,Portell de Morella,1175,VC,207,ES,40.53267,-0.26249 36305,Potríes,1175,VC,207,ES,38.91617,-0.19594 36362,Provincia de Alicante,1175,VC,207,ES,38.5,-0.5 36396,Província de Castelló,1175,VC,207,ES,40.16667,-0.16667 36400,Província de València,1175,VC,207,ES,39.33333,-0.83333 36478,Puçol,1175,VC,207,ES,39.61667,-0.3 36412,Puebla de Arenoso,1175,VC,207,ES,40.1,-0.58333 36422,Puebla de San Miguel,1175,VC,207,ES,40.05,-1.13333 36461,Puig,1175,VC,207,ES,39.58869,-0.30333 36488,Quart de les Valls,1175,VC,207,ES,39.73333,-0.26667 36487,Quart de Poblet,1175,VC,207,ES,39.48139,-0.43937 36490,Quartell,1175,VC,207,ES,39.73751,-0.26458 36491,Quatretonda,1175,VC,207,ES,38.95,-0.4 36497,Quesa,1175,VC,207,ES,39.1197,-0.74 36539,Rafal,1175,VC,207,ES,38.10458,-0.84904 36540,Rafelcofer,1175,VC,207,ES,38.93248,-0.16772 36541,Rafelguaraf,1175,VC,207,ES,39.05126,-0.45543 36712,Ráfol de Salem,1175,VC,207,ES,38.86651,-0.39991 36551,Real de Gandía,1175,VC,207,ES,38.94817,-0.19239 36552,Real de Montroi,1175,VC,207,ES,39.33333,-0.6 36562,Redován,1175,VC,207,ES,38.11619,-0.90981 36571,Relleu,1175,VC,207,ES,38.58725,-0.31157 36581,Requena,1175,VC,207,ES,39.48834,-1.10044 36611,Ribarroja del Turia,1175,VC,207,ES,39.54595,-0.57069 36618,Ribesalbes,1175,VC,207,ES,40.01667,-0.26667 36631,Riola,1175,VC,207,ES,39.2,-0.33333 36660,Rocafort,1175,VC,207,ES,39.53333,-0.4 36665,Rojales,1175,VC,207,ES,38.08799,-0.72544 36678,Rosell,1175,VC,207,ES,40.61792,0.22133 36681,Rotglá y Corbera,1175,VC,207,ES,39.00465,-0.56482 36720,Rótova,1175,VC,207,ES,38.93205,-0.25765 36702,Rugat,1175,VC,207,ES,38.87933,-0.36115 36726,Sacañet,1175,VC,207,ES,39.86667,-0.71667 36737,Sagra,1175,VC,207,ES,38.81102,-0.06559 36739,Sagunto,1175,VC,207,ES,39.68333,-0.26667 36763,Salinas,1175,VC,207,ES,38.52025,-0.91202 36843,San Juan de Alicante,1175,VC,207,ES,38.40148,-0.43623 36849,San Juan de Énova,1175,VC,207,ES,39.07104,-0.48705 36845,San Juan de Moró,1175,VC,207,ES,40.0599,-0.13691 36883,San Miguel de Salinas,1175,VC,207,ES,37.97972,-0.78904 36925,San Vicent del Raspeig,1175,VC,207,ES,38.3964,-0.5255 36942,Sanet y Negrals,1175,VC,207,ES,38.81967,-0.03406 36978,Sant Jordi,1175,VC,207,ES,40.50982,0.33208 37063,Santa Magdalena de Pulpis,1175,VC,207,ES,40.35625,0.30258 37098,Santa Pola,1175,VC,207,ES,38.19165,-0.5658 37166,Sarratella,1175,VC,207,ES,40.31284,0.0315 37181,Sax,1175,VC,207,ES,38.53729,-0.81779 37187,Sedaví,1175,VC,207,ES,39.43333,-0.38333 37190,Segart,1175,VC,207,ES,39.68333,-0.36667 37191,Segorbe,1175,VC,207,ES,39.85,-0.48333 37203,Sella,1175,VC,207,ES,38.60926,-0.27305 37204,Sellent,1175,VC,207,ES,39.03221,-0.58784 37207,Sempere,1175,VC,207,ES,38.92014,-0.4814 37210,Senija,1175,VC,207,ES,38.72804,0.04176 37213,Senyera,1175,VC,207,ES,39.06667,-0.5 37218,Serra,1175,VC,207,ES,39.68333,-0.43333 37247,Sierra-Engarcerán,1175,VC,207,ES,40.26929,-0.01892 37249,Siete Aguas,1175,VC,207,ES,39.46667,-0.91667 37255,Silla,1175,VC,207,ES,39.36257,-0.41169 37259,Simat de la Valldigna,1175,VC,207,ES,39.03333,-0.31667 37260,Sinarcas,1175,VC,207,ES,39.73333,-1.23333 37283,Sollana,1175,VC,207,ES,39.2783,-0.38238 37293,Soneja,1175,VC,207,ES,39.81667,-0.41667 37309,Sot de Chera,1175,VC,207,ES,39.63333,-0.9 37310,Sot de Ferrer,1175,VC,207,ES,39.8,-0.4 37329,Sueca,1175,VC,207,ES,39.2026,-0.31114 37332,Sumacàrcer,1175,VC,207,ES,39.1,-0.63333 37361,Tales,1175,VC,207,ES,39.94844,-0.30719 37386,Tavernes Blanques,1175,VC,207,ES,39.5,-0.36667 37387,Tavernes de la Valldigna,1175,VC,207,ES,39.07195,-0.26623 37410,Terrateig,1175,VC,207,ES,38.89453,-0.31993 37418,Teulada,1175,VC,207,ES,38.7294,0.10383 37420,Tibi,1175,VC,207,ES,38.53072,-0.57776 37430,Titaguas,1175,VC,207,ES,39.86667,-1.08333 37440,Todolella,1175,VC,207,ES,40.64675,-0.24675 37441,Toga,1175,VC,207,ES,40.05,-0.36667 37444,Tollos,1175,VC,207,ES,38.75629,-0.27466 37601,Torás,1175,VC,207,ES,39.91667,-0.68333 37470,Tormos,1175,VC,207,ES,38.80143,-0.0716 37485,Torralba del Pinar,1175,VC,207,ES,39.98333,-0.43333 37497,Torre de la Horadada,1175,VC,207,ES,37.8697,-0.7584 37510,Torreblanca,1175,VC,207,ES,40.22033,0.1965 37514,Torrechiva,1175,VC,207,ES,40.05,-0.4 37547,Torrella,1175,VC,207,ES,38.98446,-0.56727 37564,Torrent,1175,VC,207,ES,39.43705,-0.46546 37584,Torrevieja,1175,VC,207,ES,37.97872,-0.68222 37609,Tous,1175,VC,207,ES,39.13951,-0.58777 37615,Traiguera,1175,VC,207,ES,40.52511,0.29023 37660,Tuéjar,1175,VC,207,ES,39.76667,-1.03333 37659,Turís,1175,VC,207,ES,39.38333,-0.7 37710,Utiel,1175,VC,207,ES,39.56667,-1.2 37816,Valencia,1175,VC,207,ES,39.46975,-0.37739 37833,Vall de Almonacid,1175,VC,207,ES,39.9,-0.45 37834,Vall de Ebo,1175,VC,207,ES,38.80561,-0.1589 37835,Vallada,1175,VC,207,ES,38.89575,-0.69104 37837,Vallanca,1175,VC,207,ES,40.06667,-1.33333 37866,Vallés,1175,VC,207,ES,38.98518,-0.55696 37860,Vallibona,1175,VC,207,ES,40.603,0.04642 37938,Venta del Moro,1175,VC,207,ES,39.48333,-1.35 37952,Vergel,1175,VC,207,ES,38.84709,0.01034 37972,Vila-real,1175,VC,207,ES,39.9383,-0.10087 37991,Vilamarxant,1175,VC,207,ES,39.56916,-0.62453 38049,Villafamés,1175,VC,207,ES,40.11667,-0.05 38064,Villafranca del Cid,1175,VC,207,ES,40.42885,-0.25775 38084,Villahermosa del Río,1175,VC,207,ES,40.20268,-0.4199 38088,Villajoyosa,1175,VC,207,ES,38.50754,-0.23346 38118,Villalonga,1175,VC,207,ES,38.88566,-0.20795 38128,Villamalur,1175,VC,207,ES,39.96667,-0.4 38179,Villanueva de Castellón,1175,VC,207,ES,39.07741,-0.51167 38195,Villanueva de Viver,1175,VC,207,ES,40.05,-0.65 38251,Villar del Arzobispo,1175,VC,207,ES,39.73333,-0.81667 38283,Villargordo del Cabriel,1175,VC,207,ES,39.53333,-1.43333 38358,Villavieja,1175,VC,207,ES,39.85,-0.18333 38369,Villena,1175,VC,207,ES,38.6373,-0.86568 38373,Villores,1175,VC,207,ES,40.67478,-0.20023 38390,Vinalesa,1175,VC,207,ES,39.53333,-0.36667 38391,Vinaròs,1175,VC,207,ES,40.47033,0.47559 38400,Vistabella del Maestrazgo,1175,VC,207,ES,40.29617,-0.29435 38405,Viver,1175,VC,207,ES,39.91667,-0.6 38424,Xàtiva,1175,VC,207,ES,38.99042,-0.51852 38420,XeracoJaraco,1175,VC,207,ES,39.03333,-0.21667 38421,Xeresa,1175,VC,207,ES,39.01667,-0.21667 38423,Xirivella,1175,VC,207,ES,39.46588,-0.42589 38443,Yátova,1175,VC,207,ES,39.38333,-0.8 38475,Zarra,1175,VC,207,ES,39.09175,-1.07532 38498,Zorita del Maestrazgo,1175,VC,207,ES,40.72817,-0.16667 38503,Zucaina,1175,VC,207,ES,40.11667,-0.41667 103094,Bräkne-Hoby,1537,K,213,SE,56.23333,15.11667 103321,Hällevik,1537,K,213,SE,56.01667,14.7 103270,Hasslö,1537,K,213,SE,56.11667,15.48333 103359,Jämjö,1537,K,213,SE,56.19187,15.84115 103360,Jämshög,1537,K,213,SE,56.23333,14.51667 103371,Kallinge,1537,K,213,SE,56.24841,15.28721 103377,Karlshamn,1537,K,213,SE,56.1706,14.86188 103378,Karlshamns kommun,1537,K,213,SE,56.25,14.86667 103381,Karlskrona,1537,K,213,SE,56.16156,15.58661 103382,Karlskrona Kommun,1537,K,213,SE,56.28167,15.66848 103539,Mjällby,1537,K,213,SE,56.05,14.68333 103570,Mörrum,1537,K,213,SE,56.19281,14.74739 103605,Nättraby,1537,K,213,SE,56.2,15.51667 103612,Olofström,1537,K,213,SE,56.2773,14.53402 103613,Olofströms Kommun,1537,K,213,SE,56.32305,14.56561 103672,Rödeby,1537,K,213,SE,56.26078,15.62143 103655,Ronneby,1537,K,213,SE,56.20999,15.27602 103656,Ronneby Kommun,1537,K,213,SE,56.31031,15.24038 103830,Sölvesborg,1537,K,213,SE,56.05205,14.57525 103831,Sölvesborgs kommun,1537,K,213,SE,56.0891,14.64518 103779,Sturkö,1537,K,213,SE,56.08333,15.7 103801,Svängsta,1537,K,213,SE,56.26667,14.76667 102985,Abborrberget,1534,W,213,SE,60.15,14.8 103989,Älvdalen,1534,W,213,SE,61.22774,14.03935 103990,Älvdalens kommun,1534,W,213,SE,61.61337,13.27257 103022,Avesta,1534,W,213,SE,60.14274,16.16295 103023,Avesta Kommun,1534,W,213,SE,60.21251,16.36234 103046,Bjursås,1534,W,213,SE,60.73726,15.45291 103075,Borlänge,1534,W,213,SE,60.4858,15.43714 103076,Borlänge Kommun,1534,W,213,SE,60.45799,15.39873 103093,Brunna,1534,W,213,SE,60.26255,16.01034 103122,Djurås,1534,W,213,SE,60.56061,15.13281 103142,Enbacka,1534,W,213,SE,60.40993,15.59575 103161,Falu kommun,1534,W,213,SE,60.60483,15.63492 103162,Falun,1534,W,213,SE,60.60357,15.62597 103197,Gagnef,1534,W,213,SE,60.59856,15.07745 103198,Gagnefs Kommun,1534,W,213,SE,60.47391,14.94676 103226,Grängesberg,1534,W,213,SE,60.07465,15.00784 103225,Grycksbo,1534,W,213,SE,60.68751,15.48507 103274,Hedemora,1534,W,213,SE,60.27973,15.98855 103275,Hedemora Kommun,1534,W,213,SE,60.34659,16.0735 103297,Horndal,1534,W,213,SE,60.3,16.41667 103347,Insjön,1534,W,213,SE,60.67688,15.09487 103364,Järna,1534,W,213,SE,60.53333,14.36667 103419,Krylbo,1534,W,213,SE,60.13333,16.21667 103504,Långshyttan,1534,W,213,SE,60.45238,16.03831 103456,Leksand,1534,W,213,SE,60.7303,14.99994 103457,Leksands kommun,1534,W,213,SE,60.73227,14.99805 103491,Ludvika,1534,W,213,SE,60.14959,15.18776 103492,Ludvika Kommun,1534,W,213,SE,60.17114,14.72635 103518,Malung,1534,W,213,SE,60.68329,13.71542 103519,Malung-Sälens kommun,1534,W,213,SE,60.56667,13.66667 103542,Mockfjärd,1534,W,213,SE,60.5,14.96667 103545,Mora,1534,W,213,SE,61.00704,14.54316 103546,Mora Kommun,1534,W,213,SE,61.00656,14.53755 103595,Nyhammar,1534,W,213,SE,60.28333,14.96667 103617,Ornäs,1534,W,213,SE,60.50944,15.54128 103618,Orsa,1534,W,213,SE,61.12034,14.6155 103619,Orsa Kommun,1534,W,213,SE,61.3,14.75 103665,Rättvik,1534,W,213,SE,60.88632,15.11787 103666,Rättviks Kommun,1534,W,213,SE,60.88632,15.11787 103654,Romme,1534,W,213,SE,60.43333,15.5 103807,Säter,1534,W,213,SE,60.34778,15.75051 103808,Säters Kommun,1534,W,213,SE,60.36887,15.71383 103688,Siljansnäs,1534,W,213,SE,60.78333,14.85 103728,Smedby,1534,W,213,SE,60.7,15.05 103729,Smedjebacken,1534,W,213,SE,60.14181,15.41416 103730,Smedjebackens Kommun,1534,W,213,SE,60.09475,15.45204 103802,Svärdsjö,1534,W,213,SE,60.74022,15.90173 103920,Vansbro,1534,W,213,SE,60.50893,14.22458 103921,Vansbro Kommun,1534,W,213,SE,60.46117,14.27836 103941,Vikarbyn,1534,W,213,SE,60.91667,15.01667 102990,Alfta,1533,X,213,SE,61.34675,16.07499 103009,Arbrå,1533,X,213,SE,61.46667,16.38333 104014,Årsunda,1533,X,213,SE,60.51644,16.73436 103033,Bergby,1533,X,213,SE,60.92931,17.04194 103038,Bergsjö,1533,X,213,SE,61.98253,17.06368 103067,Bollnäs,1533,X,213,SE,61.34817,16.39464 103068,Bollnäs Kommun,1533,X,213,SE,61.31418,16.41725 103118,Delsbo,1533,X,213,SE,61.80104,16.55571 103129,Edsbyn,1533,X,213,SE,61.37692,15.81747 103193,Färila,1533,X,213,SE,61.80011,15.84422 103177,Forsbacka,1533,X,213,SE,60.61667,16.88333 103240,Gävle,1533,X,213,SE,60.67452,17.14174 103241,Gävle Kommun,1533,X,213,SE,60.6426,17.12066 103214,Gnarp,1533,X,213,SE,62.04874,17.25858 103276,Hedesunda,1533,X,213,SE,60.4,17.0 103293,Hofors,1533,X,213,SE,60.54573,16.28668 103294,Hofors Kommun,1533,X,213,SE,60.49619,16.41088 103305,Hudiksvall,1533,X,213,SE,61.72744,17.10558 103306,Hudiksvalls Kommun,1533,X,213,SE,61.76615,16.77055 103344,Iggesund,1533,X,213,SE,61.64219,17.07477 103361,Järbo,1533,X,213,SE,60.71667,16.6 103365,Järvsö,1533,X,213,SE,61.71667,16.16667 103389,Kilafors,1533,X,213,SE,61.23333,16.56667 103485,Ljusdal,1533,X,213,SE,61.82883,16.09126 103486,Ljusdals Kommun,1533,X,213,SE,61.85527,15.50695 103488,Ljusne,1533,X,213,SE,61.2117,17.1279 103581,Nordanstigs kommun,1533,X,213,SE,62.05261,16.91378 103607,Ockelbo,1533,X,213,SE,60.8912,16.71846 103608,Ockelbo Kommun,1533,X,213,SE,60.94179,16.57003 103626,Ovanåkers Kommun,1533,X,213,SE,61.33328,15.78067 103680,Sandarne,1533,X,213,SE,61.25893,17.15284 103681,Sandviken,1533,X,213,SE,60.61667,16.76667 103682,Sandvikens Kommun,1533,X,213,SE,60.55029,16.68461 103819,Söderhamn,1533,X,213,SE,61.30373,17.05921 103820,Söderhamns Kommun,1533,X,213,SE,61.25371,16.94879 103832,Sörforsa,1533,X,213,SE,61.73333,16.98333 103768,Storvik,1533,X,213,SE,60.58333,16.53333 103912,Valbo,1533,X,213,SE,60.65,17.03333 103219,Gotland,1546,I,213,SE,57.5,18.5 103279,Hemse,1546,I,213,SE,57.23788,18.37443 103398,Klintehamn,1546,I,213,SE,57.38667,18.20371 103940,Vibble,1546,I,213,SE,57.60452,18.25601 103957,Visby,1546,I,213,SE,57.64089,18.29602 104005,Åled,1548,N,213,SE,56.75,12.93333 104016,Åsa,1548,N,213,SE,57.35,12.11667 103096,Bua,1548,N,213,SE,57.2378,12.12187 103157,Falkenberg,1548,N,213,SE,56.90552,12.49118 103158,Falkenbergs Kommun,1548,N,213,SE,57.04317,12.72989 103172,Fjärås kyrkby,1548,N,213,SE,57.45913,12.17508 103182,Frillesås,1548,N,213,SE,57.31667,12.16667 103186,Frösakull,1548,N,213,SE,56.68333,12.73333 103190,Fyllinge,1548,N,213,SE,56.65,12.91667 103207,Getinge,1548,N,213,SE,56.81667,12.73333 103212,Glommen,1548,N,213,SE,56.93333,12.35 103231,Gullbrandstorp,1548,N,213,SE,56.7,12.73333 103258,Halmstad,1548,N,213,SE,56.67446,12.85676 103259,Halmstads Kommun,1548,N,213,SE,56.7392,12.97338 103269,Harplinge,1548,N,213,SE,56.74491,12.72758 103271,Haverdal,1548,N,213,SE,56.72222,12.67194 103313,Hylte Kommun,1548,N,213,SE,56.97394,13.26541 103314,Hyltebruk,1548,N,213,SE,56.99892,13.23958 103405,Knäred,1548,N,213,SE,56.51861,13.32423 103423,Kungsbacka,1548,N,213,SE,57.48719,12.07612 103424,Kungsbacka Kommun,1548,N,213,SE,57.45058,12.15061 103447,Laholm,1548,N,213,SE,56.51207,13.04371 103448,Laholms Kommun,1548,N,213,SE,56.49174,13.19141 103535,Mellbystrand,1548,N,213,SE,56.48561,12.93958 103538,Mjällby,1548,N,213,SE,56.68333,12.76667 103616,Onsala,1548,N,213,SE,57.42531,12.02903 103625,Oskarström,1548,N,213,SE,56.8,12.96667 103806,Särö,1548,N,213,SE,57.50577,11.9321 103711,Skrea,1548,N,213,SE,56.88333,12.56667 103750,Steninge,1548,N,213,SE,56.769,12.63034 103868,Torup,1548,N,213,SE,56.95663,13.07725 103879,Träslövsläge,1548,N,213,SE,57.05417,12.27899 103880,Trönninge,1548,N,213,SE,56.61667,12.93333 103883,Tvååker,1548,N,213,SE,57.04147,12.3995 103917,Vallda,1548,N,213,SE,57.4775,12.00139 103924,Varberg,1548,N,213,SE,57.10557,12.25078 103925,Varbergs Kommun,1548,N,213,SE,57.17208,12.41797 103974,Västra Hagen,1548,N,213,SE,57.42444,11.93583 103932,Veddige,1548,N,213,SE,57.26591,12.3322 103933,Veinge,1548,N,213,SE,56.55,13.06667 102999,Anderstorp,1550,F,213,SE,57.28333,13.63333 103001,Aneby,1550,F,213,SE,57.83895,14.81016 103002,Aneby Kommun,1550,F,213,SE,57.86992,14.79796 103026,Bankeryd,1550,F,213,SE,57.86021,14.124 103060,Bodafors,1550,F,213,SE,57.5,14.7 103071,Bor,1550,F,213,SE,57.11667,14.16667 103083,Bredaryd,1550,F,213,SE,57.17343,13.73789 103132,Ekenässjön,1550,F,213,SE,57.49175,15.02226 103136,Eksjö,1550,F,213,SE,57.66643,14.97205 103137,Eksjö Kommun,1550,F,213,SE,57.62006,15.2181 103178,Forserum,1550,F,213,SE,57.7,14.46667 103181,Forsheda,1550,F,213,SE,57.16415,13.83016 103209,Gislaved,1550,F,213,SE,57.3044,13.54078 103210,Gislaveds Kommun,1550,F,213,SE,57.30337,13.47548 103217,Gnosjö,1550,F,213,SE,57.3585,13.73686 103218,Gnosjö Kommun,1550,F,213,SE,57.36225,13.80491 103227,Gränna,1550,F,213,SE,58.01667,14.46667 103249,Habo,1550,F,213,SE,57.91185,14.07444 103250,Habo Kommun,1550,F,213,SE,57.90901,14.08997 103284,Hestra,1550,F,213,SE,57.44232,13.59575 103285,Hillerstorp,1550,F,213,SE,57.31293,13.88437 103310,Huskvarna,1550,F,213,SE,57.78596,14.30214 103366,Jönköping,1550,F,213,SE,57.78145,14.15618 103367,Jönköpings Kommun,1550,F,213,SE,57.74101,14.20276 103387,Kaxholmen,1550,F,213,SE,57.85345,14.30457 103450,Landsbro,1550,F,213,SE,57.36667,14.9 103514,Malmbäck,1550,F,213,SE,57.57667,14.4617 103523,Mariannelund,1550,F,213,SE,57.61667,15.56667 103526,Marieholm,1550,F,213,SE,57.38333,13.85 103550,Mullsjö,1550,F,213,SE,57.9171,13.87831 103551,Mullsjö kommun,1550,F,213,SE,57.95427,13.82241 103602,Nässjö,1550,F,213,SE,57.65307,14.69676 103603,Nässjö Kommun,1550,F,213,SE,57.60892,14.64041 103610,Odensjö,1550,F,213,SE,57.71667,14.16667 103644,Reftele,1550,F,213,SE,57.17467,13.59498 103662,Rydaholm,1550,F,213,SE,56.98388,14.30849 103814,Sävsjö,1550,F,213,SE,57.40327,14.66244 103815,Sävsjö Kommun,1550,F,213,SE,57.32883,14.59426 103704,Skillingaryd,1550,F,213,SE,57.43044,14.09383 103732,Smålandsstenar,1550,F,213,SE,57.16241,13.41212 103757,Stockaryd,1550,F,213,SE,57.31737,14.59341 103835,Taberg,1550,F,213,SE,57.67722,14.08876 103840,Tenhult,1550,F,213,SE,57.70761,14.32205 103871,Tranås,1550,F,213,SE,58.03717,14.9782 103872,Tranås Kommun,1550,F,213,SE,58.02906,14.83456 103909,Vaggeryd,1550,F,213,SE,57.49807,14.14842 103910,Vaggeryds Kommun,1550,F,213,SE,57.47206,14.12797 103968,Värnamo,1550,F,213,SE,57.18604,14.04001 103969,Värnamo Kommun,1550,F,213,SE,57.17128,14.05317 103937,Vetlanda,1550,F,213,SE,57.42887,15.07762 103938,Vetlanda kommun,1550,F,213,SE,57.36862,15.18468 103961,Vrigstad,1550,F,213,SE,57.35,14.46667 103004,Ankarsrum,1544,H,213,SE,57.69896,16.33407 103035,Bergkvara,1544,H,213,SE,56.39063,16.07274 103059,Blomstermåla,1544,H,213,SE,56.98333,16.33333 103073,Borgholm,1544,H,213,SE,56.8793,16.65634 103074,Borgholms Kommun,1544,H,213,SE,57.09747,16.94092 103140,Emmaboda,1544,H,213,SE,56.63268,15.53648 103141,Emmaboda Kommun,1544,H,213,SE,56.63333,15.53333 103194,Färjestaden,1544,H,213,SE,56.6499,16.46859 103201,Gamleby,1544,H,213,SE,57.89485,16.40508 103234,Gunnebo,1544,H,213,SE,57.71667,16.53333 103331,Högsby,1544,H,213,SE,57.16597,16.02562 103332,Högsby Kommun,1544,H,213,SE,57.15537,15.91674 103307,Hultsfred,1544,H,213,SE,57.48815,15.84357 103308,Hultsfreds Kommun,1544,H,213,SE,57.4,15.8 103372,Kalmar,1544,H,213,SE,56.66157,16.36163 103373,Kalmar Kommun,1544,H,213,SE,56.66361,16.18569 103413,Kristdala,1544,H,213,SE,57.4007,16.20496 103473,Lindsdal,1544,H,213,SE,56.73333,16.3 103481,Ljungbyholm,1544,H,213,SE,56.63333,16.16667 103559,Målilla,1544,H,213,SE,57.38773,15.80675 103565,Mönsterås,1544,H,213,SE,57.04134,16.44463 103566,Mönsterås Kommun,1544,H,213,SE,57.06625,16.38621 103568,Mörbylånga,1544,H,213,SE,56.5248,16.37877 103569,Mörbylånga Kommun,1544,H,213,SE,56.5,16.5 103593,Nybro,1544,H,213,SE,56.74461,15.90714 103594,Nybro Kommun,1544,H,213,SE,56.82435,15.88969 103623,Oskarshamn,1544,H,213,SE,57.26455,16.44837 103624,Oskarshamns Kommun,1544,H,213,SE,57.37339,16.38303 104056,Överum,1544,H,213,SE,57.98856,16.3139 103641,Påskallavik,1544,H,213,SE,57.16667,16.45 103649,Rinkabyholm,1544,H,213,SE,56.64972,16.26667 103727,Smedby,1544,H,213,SE,56.67413,16.2432 103827,Södra Sandby,1544,H,213,SE,56.56667,16.61667 103829,Södra Vi,1544,H,213,SE,57.73993,15.79391 103762,Storebro,1544,H,213,SE,57.58333,15.85 103849,Timmernabben,1544,H,213,SE,56.96667,16.43333 103866,Torsås,1544,H,213,SE,56.41251,15.99844 103867,Torsås Kommun,1544,H,213,SE,56.42649,15.89128 103873,Trekanten,1544,H,213,SE,56.7,16.11667 103970,Västervik,1544,H,213,SE,57.7584,16.63733 103971,Västerviks Kommun,1544,H,213,SE,57.85242,16.3894 103947,Vimmerby,1544,H,213,SE,57.66588,15.85515 103948,Vimmerby Kommun,1544,H,213,SE,57.69009,15.86741 103956,Virserum,1544,H,213,SE,57.31667,15.58333 103985,Älmhult,1542,G,213,SE,56.55146,14.13827 103986,Älmhults Kommun,1542,G,213,SE,56.58563,14.15502 102995,Alvesta,1542,G,213,SE,56.89935,14.55559 102996,Alvesta Kommun,1542,G,213,SE,56.84663,14.4749 104018,Åseda,1542,G,213,SE,57.1701,15.3443 103082,Braås,1542,G,213,SE,57.06667,15.05 103205,Gemla,1542,G,213,SE,56.86753,14.64379 103301,Hovmantorp,1542,G,213,SE,56.78685,15.14023 103346,Ingelstad,1542,G,213,SE,56.75,14.91667 103446,Lagan,1542,G,213,SE,56.91667,13.98333 103449,Lammhult,1542,G,213,SE,57.16667,14.58333 103458,Lenhovda,1542,G,213,SE,57.0,15.28333 103461,Lessebo,1542,G,213,SE,56.75185,15.26969 103462,Lessebo Kommun,1542,G,213,SE,56.76387,15.31359 103478,Ljungby,1542,G,213,SE,56.83324,13.94082 103479,Ljungby Kommun,1542,G,213,SE,56.80684,13.82719 103531,Markaryd,1542,G,213,SE,56.46135,13.59644 103532,Markaryds Kommun,1542,G,213,SE,56.54425,13.62348 103543,Moheda,1542,G,213,SE,57.0,14.56667 103659,Rottne,1542,G,213,SE,57.01667,14.9 103660,Ryd,1542,G,213,SE,56.46667,14.68333 103774,Strömsnäsbruk,1542,G,213,SE,56.55,13.71667 103852,Tingsryd,1542,G,213,SE,56.5247,14.97902 103853,Tingsryds Kommun,1542,G,213,SE,56.53333,14.96667 103905,Uppvidinge Kommun,1542,G,213,SE,57.03442,15.44727 103975,Växjö,1542,G,213,SE,56.87767,14.80906 103976,Växjö Kommun,1542,G,213,SE,56.9453,14.89981 103959,Vislanda,1542,G,213,SE,56.78333,14.45 103993,Älvsbyn,1538,BD,213,SE,65.67624,21.00162 103994,Älvsbyns Kommun,1538,BD,213,SE,65.73201,20.71412 103010,Arjeplog,1538,BD,213,SE,66.05173,17.88606 103011,Arjeplogs Kommun,1538,BD,213,SE,66.37495,17.17477 103015,Arvidsjaur,1538,BD,213,SE,65.59033,19.16682 103016,Arvidsjaurs Kommun,1538,BD,213,SE,65.66667,19.25 103036,Bergnäset,1538,BD,213,SE,65.57791,22.10844 103039,Bergsviken,1538,BD,213,SE,65.3,21.38333 103054,Björkskatan,1538,BD,213,SE,65.61373,22.17702 103061,Boden,1538,BD,213,SE,65.82518,21.68864 103062,Bodens Kommun,1538,BD,213,SE,66.04393,21.29977 103237,Gällivare,1538,BD,213,SE,67.13387,20.65278 103238,Gällivare kommun,1538,BD,213,SE,67.39347,19.70834 103202,Gammelstad,1538,BD,213,SE,65.63931,22.01145 103267,Haparanda,1538,BD,213,SE,65.83549,24.13676 103268,Haparanda Kommun,1538,BD,213,SE,65.91662,23.84607 103299,Hortlax,1538,BD,213,SE,65.28188,21.40544 103353,Jokkmokk,1538,BD,213,SE,66.60665,19.82324 103354,Jokkmokks Kommun,1538,BD,213,SE,66.90967,18.50521 103369,Kalix,1538,BD,213,SE,65.85298,23.15645 103370,Kalix Kommun,1538,BD,213,SE,65.96118,22.98669 103394,Kiruna,1538,BD,213,SE,67.85572,20.22513 103395,Kiruna Kommun,1538,BD,213,SE,68.17009,20.54861 103493,Luleå,1538,BD,213,SE,65.58415,22.15465 103494,Luleå kommun,1538,BD,213,SE,65.68333,22.16667 103513,Malmberget,1538,BD,213,SE,67.17529,20.65495 103528,Marielund,1538,BD,213,SE,65.85307,24.10486 103585,Norrfjärden,1538,BD,213,SE,65.41805,21.50151 104052,Överkalix,1538,BD,213,SE,66.32754,22.84414 104053,Överkalix Kommun,1538,BD,213,SE,66.47043,22.57928 104054,Övertorneå,1538,BD,213,SE,66.38778,23.65425 104055,Övertorneå Kommun,1538,BD,213,SE,66.48317,23.43866 103630,Pajala,1538,BD,213,SE,67.21284,23.36607 103631,Pajala Kommun,1538,BD,213,SE,67.24069,22.91667 103637,Piteå,1538,BD,213,SE,65.31717,21.47944 103638,Piteå Kommun,1538,BD,213,SE,65.37229,20.85153 103668,Råneå,1538,BD,213,SE,65.85482,22.29126 103652,Roknäs,1538,BD,213,SE,65.35,21.2 103653,Rolfs,1538,BD,213,SE,65.85,23.11667 103658,Rosvik,1538,BD,213,SE,65.43333,21.7 103812,Sävast,1538,BD,213,SE,65.77002,21.73113 103828,Södra Sunderbyn,1538,BD,213,SE,65.65983,21.94004 103891,Töre,1538,BD,213,SE,65.91243,22.65128 104017,Åsbro,1539,T,213,SE,59.0,15.05 103019,Askersund,1539,T,213,SE,58.87988,14.9023 103020,Askersunds Kommun,1539,T,213,SE,58.88048,14.98416 103115,Degerfors,1539,T,213,SE,59.23797,14.43077 103116,Degerfors Kommun,1539,T,213,SE,59.1558,14.43352 103131,Ekeby-Almby,1539,T,213,SE,59.26,15.33 103163,Fellingsbro,1539,T,213,SE,59.43333,15.58333 103170,Fjugesta,1539,T,213,SE,59.17375,14.87227 103187,Frövi,1539,T,213,SE,59.46667,15.36667 103204,Garphyttan,1539,T,213,SE,59.30429,14.94623 103316,Hällabrottet,1539,T,213,SE,59.11667,15.2 103318,Hällefors,1539,T,213,SE,59.78388,14.52197 103319,Hällefors Kommun,1539,T,213,SE,59.75736,14.61495 103253,Hallsberg,1539,T,213,SE,59.06463,15.10993 103254,Hallsbergs Kommun,1539,T,213,SE,59.03803,15.18468 103302,Hovsta,1539,T,213,SE,59.35,15.21667 103379,Karlskoga,1539,T,213,SE,59.32667,14.52386 103380,Karlskoga Kommun,1539,T,213,SE,59.37383,14.5672 103409,Kopparberg,1539,T,213,SE,59.87597,14.99436 103420,Kumla,1539,T,213,SE,59.1277,15.14341 103421,Kumla Kommun,1539,T,213,SE,59.12715,15.14649 103453,Laxå,1539,T,213,SE,58.9863,14.61904 103454,Laxå Kommun,1539,T,213,SE,58.90913,14.5306 103455,Lekebergs Kommun,1539,T,213,SE,59.18604,14.79796 103469,Lindesberg,1539,T,213,SE,59.59202,15.2304 103470,Lindesbergs Kommun,1539,T,213,SE,59.64119,15.34064 103487,Ljusnarsbergs Kommun,1539,T,213,SE,59.92622,14.96499 103577,Nora,1539,T,213,SE,59.51926,15.03979 103578,Nora Kommun,1539,T,213,SE,59.53456,14.90777 103609,Odensbacken,1539,T,213,SE,59.16667,15.53333 104034,Örebro,1539,T,213,SE,59.27412,15.2066 104035,Örebro Kommun,1539,T,213,SE,59.27168,15.28364 103640,Pålsboda,1539,T,213,SE,59.06565,15.33747 103723,Sköllersta,1539,T,213,SE,59.13738,15.3394 103770,Storå,1539,T,213,SE,59.71409,15.13169 103955,Vintrosa,1539,T,213,SE,59.25,14.95 103999,Åby,1536,E,213,SE,58.66667,16.18333 104023,Åtvidaberg,1536,E,213,SE,58.20152,15.9977 104024,Åtvidabergs Kommun,1536,E,213,SE,58.22799,16.12522 103032,Berg,1536,E,213,SE,58.48831,15.52969 103072,Borensberg,1536,E,213,SE,58.56667,15.28333 103079,Boxholm,1536,E,213,SE,58.19719,15.05376 103080,Boxholms Kommun,1536,E,213,SE,58.14842,15.10988 103138,Ekängen,1536,E,213,SE,58.46667,15.63333 103166,Finspång,1536,E,213,SE,58.70578,15.76739 103167,Finspångs Kommun,1536,E,213,SE,58.80568,15.78783 103221,Grebo,1536,E,213,SE,58.30145,15.87085 103236,Gusum,1536,E,213,SE,58.2688,16.49894 103281,Herrestad,1536,E,213,SE,58.38333,14.8 103358,Jursla,1536,E,213,SE,58.66667,16.18333 103391,Kimstad,1536,E,213,SE,58.54967,15.96296 103392,Kinda Kommun,1536,E,213,SE,58.01315,15.73373 103396,Kisa,1536,E,213,SE,57.98781,15.63303 103418,Krokek,1536,E,213,SE,58.67231,16.36741 103474,Lindö,1536,E,213,SE,58.61667,16.25 103475,Linghem,1536,E,213,SE,58.43333,15.78333 103476,Linköping,1536,E,213,SE,58.41086,15.62157 103477,Linköpings Kommun,1536,E,213,SE,58.41046,15.6187 103483,Ljungsbro,1536,E,213,SE,58.51667,15.5 103516,Malmslätt,1536,E,213,SE,58.41102,15.51647 103522,Mantorp,1536,E,213,SE,58.35,15.28333 103540,Mjölby,1536,E,213,SE,58.32595,15.12365 103541,Mjölby Kommun,1536,E,213,SE,58.34576,15.13853 103548,Motala,1536,E,213,SE,58.53706,15.03649 103549,Motala Kommun,1536,E,213,SE,58.65131,15.19105 103586,Norrköping,1536,E,213,SE,58.59419,16.1826 103587,Norrköpings Kommun,1536,E,213,SE,58.61139,16.32092 104027,Ödeshög,1536,E,213,SE,58.22949,14.65294 104028,Ödeshögs Kommun,1536,E,213,SE,58.2264,14.74067 104044,Österbymo,1536,E,213,SE,57.82465,15.27357 103647,Rimforsa,1536,E,213,SE,58.13624,15.6865 103661,Ryd,1536,E,213,SE,58.66667,15.08333 103718,Skänninge,1536,E,213,SE,58.39427,15.08659 103719,Skärblacka,1536,E,213,SE,58.56667,15.9 103821,Söderköping,1536,E,213,SE,58.48057,16.32221 103822,Söderköpings Kommun,1536,E,213,SE,58.42056,16.4451 103752,Stenstorp,1536,E,213,SE,58.48333,15.06667 103778,Sturefors,1536,E,213,SE,58.33333,15.73333 103803,Svärtinge,1536,E,213,SE,58.65507,16.02823 103836,Tallboda,1536,E,213,SE,58.42521,15.68154 103907,Vadstena,1536,E,213,SE,58.44863,14.88969 103908,Vadstena Kommun,1536,E,213,SE,58.40783,14.86162 103913,Valdemarsvik,1536,E,213,SE,58.2031,16.60225 103914,Valdemarsviks Kommun,1536,E,213,SE,58.2,16.6 103944,Vikingstad,1536,E,213,SE,58.38304,15.43201 103982,Ydre Kommun,1536,E,213,SE,57.86355,15.26266 104000,Åhus,1541,M,213,SE,55.91667,14.28333 104002,Åkarp,1541,M,213,SE,55.65396,13.11107 102998,Anderslöv,1541,M,213,SE,55.43836,13.31966 103996,Ängelholm,1541,M,213,SE,56.2428,12.86219 103997,Ängelholms Kommun,1541,M,213,SE,56.26814,12.96622 103012,Arlöv,1541,M,213,SE,55.63248,13.07141 103021,Asmundtorp,1541,M,213,SE,55.88333,12.93333 104021,Åstorp,1541,M,213,SE,56.13566,12.9443 104022,Åstorps Kommun,1541,M,213,SE,56.14003,12.97259 103028,Bara,1541,M,213,SE,55.58155,13.17862 103104,Bårslöv,1541,M,213,SE,56.0091,12.8058 103105,Båstad,1541,M,213,SE,56.42689,12.85339 103106,Båstads Kommun,1541,M,213,SE,56.40102,12.79912 103041,Billeberga,1541,M,213,SE,55.88333,13.0 103042,Billesholm,1541,M,213,SE,56.05,13.0 103049,Bjärnum,1541,M,213,SE,56.29032,13.71128 103050,Bjärred,1541,M,213,SE,55.71667,13.01667 103047,Bjuv,1541,M,213,SE,56.08372,12.91914 103048,Bjuvs Kommun,1541,M,213,SE,56.05409,12.96542 103058,Blentarp,1541,M,213,SE,55.58333,13.6 103087,Broby,1541,M,213,SE,56.25521,14.07797 103089,Bromölla,1541,M,213,SE,56.07551,14.46958 103090,Bromölla Kommun,1541,M,213,SE,56.11934,14.5115 103097,Bunkeflostrand,1541,M,213,SE,55.54478,12.92375 103099,Burlövs Kommun,1541,M,213,SE,55.63873,13.09473 103109,Dalby,1541,M,213,SE,55.66655,13.34976 103114,Degeberga,1541,M,213,SE,55.83333,14.08333 103130,Ekeby,1541,M,213,SE,56.0,12.96667 103152,Eslöv,1541,M,213,SE,55.83928,13.30393 103153,Eslövs Kommun,1541,M,213,SE,55.83607,13.37522 103195,Färlöv,1541,M,213,SE,56.06667,14.08333 103171,Fjälkinge,1541,M,213,SE,56.04364,14.27562 103196,Förslöv,1541,M,213,SE,56.35,12.81667 103188,Furulund,1541,M,213,SE,55.7738,13.09022 103203,Gantofta,1541,M,213,SE,55.98729,12.80482 103239,Gärsnäs,1541,M,213,SE,55.54949,14.17923 103206,Genarp,1541,M,213,SE,55.59907,13.3982 103211,Glimåkra,1541,M,213,SE,56.3,14.13333 103213,Glumslöv,1541,M,213,SE,55.94091,12.80929 103315,Häljarp,1541,M,213,SE,55.85,12.91667 103260,Hammar,1541,M,213,SE,56.01667,14.21667 103263,Hanaskog,1541,M,213,SE,56.16061,14.09307 103325,Hässleholm,1541,M,213,SE,56.15905,13.76638 103326,Hässleholms Kommun,1541,M,213,SE,56.20687,13.72374 103327,Hästveda,1541,M,213,SE,56.28468,13.93547 103277,Helsingborg,1541,M,213,SE,56.05648,12.78718 103287,Hittarp,1541,M,213,SE,56.1,12.63333 103291,Hjärnarp,1541,M,213,SE,56.31667,12.91667 103292,Hjärup,1541,M,213,SE,55.6688,13.13931 103295,Hofterup,1541,M,213,SE,55.80485,12.9797 103329,Höganäs,1541,M,213,SE,56.19971,12.55795 103330,Höganäs Kommun,1541,M,213,SE,56.22517,12.59701 103334,Hököpinge,1541,M,213,SE,55.49411,13.00782 103335,Höllviken,1541,M,213,SE,55.40982,12.9558 103342,Höör,1541,M,213,SE,55.93444,13.5385 103343,Höörs Kommun,1541,M,213,SE,55.94588,13.51686 103338,Hörby,1541,M,213,SE,55.85238,13.66094 103339,Hörby Kommun,1541,M,213,SE,55.83766,13.74284 103312,Hyllinge,1541,M,213,SE,56.1,12.85 103356,Jonstorp,1541,M,213,SE,56.2338,12.67184 103440,Kågeröd,1541,M,213,SE,55.99976,13.08795 103437,Kävlinge,1541,M,213,SE,55.79188,13.11021 103438,Kävlinge Kommun,1541,M,213,SE,55.79469,13.07364 103401,Klågerup,1541,M,213,SE,55.59416,13.24574 103399,Klippan,1541,M,213,SE,56.13559,13.13086 103400,Klippans Kommun,1541,M,213,SE,56.11138,13.23836 103402,Knislinge,1541,M,213,SE,56.18333,14.08333 103443,Köpingebro,1541,M,213,SE,55.45526,13.93453 103414,Kristianstad,1541,M,213,SE,56.03129,14.15242 103415,Kristianstads kommun,1541,M,213,SE,56.0,14.15 103433,Kvidinge,1541,M,213,SE,56.13386,13.04678 103451,Landskrona,1541,M,213,SE,55.8862,12.8588 103480,Ljungbyhed,1541,M,213,SE,56.07437,13.2401 103482,Ljunghusen,1541,M,213,SE,55.39793,12.92486 103506,Löberöd,1541,M,213,SE,55.7761,13.52414 103507,Löddeköpinge,1541,M,213,SE,55.76667,13.01667 103489,Lomma,1541,M,213,SE,55.67244,13.06849 103490,Lomma Kommun,1541,M,213,SE,55.70358,13.07324 103509,Lönsboda,1541,M,213,SE,56.4,14.31667 103495,Lund,1541,M,213,SE,55.70584,13.19321 103496,Lunds Kommun,1541,M,213,SE,55.66897,13.36408 103517,Malmö,1541,M,213,SE,55.60587,13.00073 103527,Marieholm,1541,M,213,SE,55.86667,13.15 103567,Mörarp,1541,M,213,SE,56.05749,12.88018 103552,Munka-Ljungby,1541,M,213,SE,56.25,12.96667 103604,Näsum,1541,M,213,SE,56.17693,14.49706 103584,Norra Åsum,1541,M,213,SE,55.98333,14.15 104030,Ödåkra,1541,M,213,SE,56.10412,12.7477 104032,Önnestad,1541,M,213,SE,56.05747,14.02233 104037,Örkelljunga,1541,M,213,SE,56.28338,13.27773 104038,Örkelljunga Kommun,1541,M,213,SE,56.32464,13.33941 103621,Osby,1541,M,213,SE,56.38165,13.99364 103622,Osby kommun,1541,M,213,SE,56.44081,14.11842 104050,Östra Göinge Kommun,1541,M,213,SE,56.27212,14.1598 104051,Östra Ljungby,1541,M,213,SE,56.19601,13.09199 103629,Oxie,1541,M,213,SE,55.54014,13.09605 103639,Påarp,1541,M,213,SE,56.03333,12.81667 103635,Perstorp,1541,M,213,SE,56.13829,13.39476 103636,Perstorps Kommun,1541,M,213,SE,56.18857,13.37681 103663,Rydebäck,1541,M,213,SE,55.96667,12.76667 103664,Rydsgård,1541,M,213,SE,55.47285,13.58829 103810,Sätofta,1541,M,213,SE,55.91667,13.55 103683,Saxtorpsskogen,1541,M,213,SE,55.83208,12.94429 103685,Sibbhult,1541,M,213,SE,56.26667,14.2 103689,Simrishamn,1541,M,213,SE,55.55653,14.35037 103690,Simrishamns kommun,1541,M,213,SE,55.58621,14.23778 103692,Sjöbo,1541,M,213,SE,55.63135,13.70622 103693,Sjöbo Kommun,1541,M,213,SE,55.65146,13.75557 103695,Skanör med Falsterbo,1541,M,213,SE,55.4,12.85 103721,Skåre,1541,M,213,SE,55.38333,13.05 103699,Skegrie,1541,M,213,SE,55.40633,13.07693 103707,Skivarp,1541,M,213,SE,55.41667,13.56667 103714,Skurup,1541,M,213,SE,55.47839,13.50186 103715,Skurups Kommun,1541,M,213,SE,55.47322,13.5455 103731,Smygehamn,1541,M,213,SE,55.34337,13.36989 103826,Södra Sandby,1541,M,213,SE,55.71677,13.34659 103834,Sösdala,1541,M,213,SE,56.03992,13.67811 103744,Staffanstorp,1541,M,213,SE,55.64277,13.20638 103745,Staffanstorps Kommun,1541,M,213,SE,55.65,13.2 103781,Stångby,1541,M,213,SE,55.7503,13.19797 103748,Stehag,1541,M,213,SE,55.90188,13.39577 103777,Strövelstorp,1541,M,213,SE,56.16979,12.83925 103794,Svalöv,1541,M,213,SE,55.9134,13.10762 103795,Svalövs Kommun,1541,M,213,SE,55.96497,13.13173 103797,Svedala,1541,M,213,SE,55.50788,13.23515 103798,Svedala Kommun,1541,M,213,SE,55.54324,13.26859 103839,Teckomatorp,1541,M,213,SE,55.86667,13.08333 103856,Tollarp,1541,M,213,SE,55.93333,13.98333 103857,Tollarp1,1541,M,213,SE,56.16667,14.28333 103858,Tomelilla,1541,M,213,SE,55.54293,13.9546 103859,Tomelilla Kommun,1541,M,213,SE,55.61963,14.01975 103860,Torekov,1541,M,213,SE,56.425,12.63333 103861,Tormestorp,1541,M,213,SE,56.1135,13.74516 103874,Trelleborg,1541,M,213,SE,55.37514,13.15691 103875,Trelleborgs Kommun,1541,M,213,SE,55.41274,13.26859 103884,Tygelsjö,1541,M,213,SE,55.51667,13.0 103886,Tyringe,1541,M,213,SE,56.16037,13.59811 103915,Valje,1541,M,213,SE,56.06279,14.54388 103931,Veberöd,1541,M,213,SE,55.63333,13.48333 103934,Vejbystrand,1541,M,213,SE,56.31778,12.76722 103935,Vellinge,1541,M,213,SE,55.47124,13.01971 103936,Vellinge Kommun,1541,M,213,SE,55.44776,13.00919 103943,Viken,1541,M,213,SE,56.15063,12.57429 103954,Vinslöv,1541,M,213,SE,56.1,13.91667 103960,Vittsjö,1541,M,213,SE,56.34366,13.66081 103983,Ystad,1541,M,213,SE,55.42966,13.82041 103984,Ystads Kommun,1541,M,213,SE,55.46367,13.91153 104003,Åkers Styckebruk,1540,D,213,SE,59.25,17.08333 103998,Ärla,1540,D,213,SE,59.27983,16.67896 103013,Arnö,1540,D,213,SE,58.72675,17.02322 103027,Bara,1540,D,213,SE,58.68333,17.06667 103150,Eskilstuna,1540,D,213,SE,59.36661,16.5077 103151,Eskilstuna Kommun,1540,D,213,SE,59.37362,16.49014 103173,Flen,1540,D,213,SE,59.05834,16.58781 103174,Flens Kommun,1540,D,213,SE,59.05,16.71667 103215,Gnesta,1540,D,213,SE,59.04751,17.31191 103216,Gnesta Kommun,1540,D,213,SE,59.09214,17.14533 103317,Hällbybrunn,1540,D,213,SE,59.39152,16.42229 103320,Hälleforsnäs,1540,D,213,SE,59.15208,16.497 103385,Katrineholm,1540,D,213,SE,58.99587,16.20721 103386,Katrineholms Kommun,1540,D,213,SE,59.01734,16.26049 103432,Kvicksund,1540,D,213,SE,59.45099,16.32131 103515,Malmköping,1540,D,213,SE,59.13333,16.73333 103525,Mariefred,1540,D,213,SE,59.25963,17.223 103598,Nyköping,1540,D,213,SE,58.753,17.00788 103599,Nyköpings Kommun,1540,D,213,SE,58.81762,16.89945 103614,Olstorp,1540,D,213,SE,58.81667,16.63333 103627,Oxelösund,1540,D,213,SE,58.67057,17.10152 103628,Oxelösunds Kommun,1540,D,213,SE,58.67519,17.08406 103709,Skogstorp,1540,D,213,SE,59.32472,16.48284 103746,Stallarholmen,1540,D,213,SE,59.36667,17.2 103756,Stigtomta,1540,D,213,SE,58.8,16.78333 103771,Strängnäs,1540,D,213,SE,59.37741,17.03119 103772,Strängnäs Kommun,1540,D,213,SE,59.36109,17.08804 103793,Svalsta,1540,D,213,SE,58.74273,16.86978 103864,Torshälla,1540,D,213,SE,59.41667,16.46667 103877,Trosa,1540,D,213,SE,58.89621,17.54812 103878,Trosa Kommun,1540,D,213,SE,58.8933,17.49847 103911,Vagnhärad,1540,D,213,SE,58.94587,17.48757 103916,Valla,1540,D,213,SE,59.01667,16.38333 103951,Vingåker,1540,D,213,SE,59.0433,15.87374 103952,Vingåkers Kommun,1540,D,213,SE,59.06667,15.88333 102986,Akalla,1551,AB,213,SE,59.41465,17.91398 104004,Åkersberga,1551,AB,213,SE,59.47944,18.29967 102988,Alby,1551,AB,213,SE,59.2335,17.8538 103987,Älmsta,1551,AB,213,SE,59.96667,18.8 103988,Älta,1551,AB,213,SE,59.26667,18.18333 103014,Arnö,1551,AB,213,SE,60.11667,18.63333 104013,Årsta,1551,AB,213,SE,59.2978,18.0514 103037,Bergshamra,1551,AB,213,SE,59.38083,18.03427 103066,Bollmora,1551,AB,213,SE,59.24196,18.22762 103070,Boo,1551,AB,213,SE,59.33333,18.28333 103078,Botkyrka Kommun,1551,AB,213,SE,59.2,17.81667 103085,Brevik,1551,AB,213,SE,59.35,18.2 103086,Bro,1551,AB,213,SE,59.51667,17.63333 103088,Bromma,1551,AB,213,SE,59.34,17.94 103091,Brunn,1551,AB,213,SE,59.28,18.43 103092,Brunna,1551,AB,213,SE,59.51667,17.75 103108,Dalarö,1551,AB,213,SE,59.13306,18.40639 103113,Danderyds Kommun,1551,AB,213,SE,59.40924,18.04847 103123,Djurö,1551,AB,213,SE,59.32653,18.71152 103121,Djursholm,1551,AB,213,SE,59.39926,18.05619 103133,Ekerö,1551,AB,213,SE,59.291,17.81212 103134,Ekerö Kommun,1551,AB,213,SE,59.32198,17.6358 103143,Enebyberg,1551,AB,213,SE,59.43333,18.05 103147,Eriksberg,1551,AB,213,SE,59.24241,17.81631 103168,Fisksätra,1551,AB,213,SE,59.29153,18.2549 103169,Fittja,1551,AB,213,SE,59.24868,17.85991 103199,Gamla Stan,1551,AB,213,SE,59.32627,18.07251 103235,Gustavsberg,1551,AB,213,SE,59.32684,18.38975 103257,Hallstavik,1551,AB,213,SE,60.05,18.6 103264,Handen,1551,AB,213,SE,59.16809,18.13796 103265,Haninge,1551,AB,213,SE,59.16775,18.14478 103266,Haninge Kommun,1551,AB,213,SE,59.17382,18.15491 103278,Hemmesta,1551,AB,213,SE,59.32273,18.48675 103336,Hölö,1551,AB,213,SE,59.01667,17.53333 103303,Huddinge,1551,AB,213,SE,59.23705,17.98192 103304,Huddinge Kommun,1551,AB,213,SE,59.21428,18.01584 103351,Jakobsberg,1551,AB,213,SE,59.42268,17.83508 103362,Järfälla kommun,1551,AB,213,SE,59.40875,17.86514 103363,Järna,1551,AB,213,SE,59.09165,17.56615 103357,Jordbro,1551,AB,213,SE,59.14972,18.11667 103397,Kista,1551,AB,213,SE,59.40316,17.94479 103410,Kopparmora,1551,AB,213,SE,59.33306,18.58306 103422,Kummelnäs,1551,AB,213,SE,59.35,18.28333 103427,Kungsängen,1551,AB,213,SE,59.47857,17.74834 103426,Kungsholmen,1551,AB,213,SE,59.33183,18.04118 103505,Långvik,1551,AB,213,SE,59.24583,18.51667 103463,Lidingö,1551,AB,213,SE,59.36303,18.15096 103471,Lindholmen,1551,AB,213,SE,59.58333,18.1 103558,Märsta,1551,AB,213,SE,59.62157,17.85476 103561,Mölnbo,1551,AB,213,SE,59.05,17.41667 103571,Mörtnäs,1551,AB,213,SE,59.31862,18.44312 103572,Nacka,1551,AB,213,SE,59.31053,18.16372 103573,Nacka Kommun,1551,AB,213,SE,59.31077,18.17551 103588,Norrtälje,1551,AB,213,SE,59.75799,18.70496 103589,Norrtälje Kommun,1551,AB,213,SE,59.8612,18.70573 103596,Nykvarn,1551,AB,213,SE,59.8,18.3 103597,Nykvarns Kommun,1551,AB,213,SE,59.19479,17.40632 103600,Nynäshamn,1551,AB,213,SE,58.90337,17.94793 103601,Nynäshamns kommun,1551,AB,213,SE,58.95607,17.88694 104042,Ösmo,1551,AB,213,SE,58.98333,17.9 104047,Österåkers Kommun,1551,AB,213,SE,59.48345,18.29979 104045,Östermalm,1551,AB,213,SE,59.33879,18.08487 103634,Pershagen,1551,AB,213,SE,59.15494,17.6534 103669,Råsunda,1551,AB,213,SE,59.36588,17.99569 103645,Resarö,1551,AB,213,SE,59.4291,18.33386 103646,Rimbo,1551,AB,213,SE,59.75,18.36667 103648,Rindö,1551,AB,213,SE,59.39688,18.39434 103673,Rönninge,1551,AB,213,SE,59.2,17.73333 103657,Rosersberg,1551,AB,213,SE,59.58333,17.88333 103677,Salems Kommun,1551,AB,213,SE,59.24572,17.69875 103678,Saltsjöbaden,1551,AB,213,SE,59.28333,18.3 103684,Segeltorp,1551,AB,213,SE,59.27597,17.93072 103686,Sigtuna,1551,AB,213,SE,59.61731,17.72361 103687,Sigtuna Kommun,1551,AB,213,SE,59.6396,17.93946 103717,Skänninge,1551,AB,213,SE,59.93333,18.48333 103823,Södermalm,1551,AB,213,SE,59.31278,18.07577 103824,Södertälje,1551,AB,213,SE,59.19554,17.62525 103825,Södertälje Kommun,1551,AB,213,SE,59.18121,17.62756 103737,Sollentuna,1551,AB,213,SE,59.42804,17.95093 103738,Sollentuna Kommun,1551,AB,213,SE,59.44499,17.93518 103739,Solna,1551,AB,213,SE,59.36004,18.00086 103740,Solna Kommun,1551,AB,213,SE,59.36548,18.00728 103747,Stavsnäs,1551,AB,213,SE,59.28333,18.68333 103749,Stenhamra,1551,AB,213,SE,59.3344,17.68842 103758,Stockholm,1551,AB,213,SE,59.33258,18.0649 103759,Stockholms Kommun,1551,AB,213,SE,59.32478,18.06427 103773,Strömma,1551,AB,213,SE,59.28333,18.53333 103783,Sundbyberg,1551,AB,213,SE,59.36128,17.97114 103784,Sundbybergs Kommun,1551,AB,213,SE,59.36669,17.9702 103887,Täby Kommun,1551,AB,213,SE,59.43739,18.0653 103841,Tensta,1551,AB,213,SE,59.3939,17.90111 103881,Tullinge,1551,AB,213,SE,59.2,17.9 103882,Tumba,1551,AB,213,SE,59.19858,17.83317 103885,Tyresö Kommun,1551,AB,213,SE,59.24148,18.28074 103900,Upplands Väsby,1551,AB,213,SE,59.51839,17.91128 103901,Upplands Väsby kommun,1551,AB,213,SE,59.52382,17.91001 103902,Upplands-Bro Kommun,1551,AB,213,SE,59.49095,17.74979 103918,Vallentuna,1551,AB,213,SE,59.53436,18.07758 103919,Vallentuna Kommun,1551,AB,213,SE,59.59146,18.21 103978,Vårby,1551,AB,213,SE,59.26671,17.88407 103967,Värmdö Kommun,1551,AB,213,SE,59.31614,18.70414 103981,Vårsta,1551,AB,213,SE,59.16528,17.79722 103927,Vasastan,1551,AB,213,SE,59.34571,18.04985 103929,Vaxholm,1551,AB,213,SE,59.40225,18.35317 103930,Vaxholms Kommun,1551,AB,213,SE,59.40386,18.34167 102993,Alsike,1545,C,213,SE,59.75324,17.77331 102994,Alunda,1545,C,213,SE,60.26667,18.4 103991,Älvkarleby,1545,C,213,SE,60.57081,17.44895 103992,Älvkarleby Kommun,1545,C,213,SE,60.58212,17.44532 103005,Anneberg,1545,C,213,SE,60.24167,18.41667 103102,Bälinge,1545,C,213,SE,59.95,17.53333 103103,Bålsta,1545,C,213,SE,59.5671,17.52781 103053,Björklinge,1545,C,213,SE,60.03004,17.55203 103145,Enköping,1545,C,213,SE,59.63607,17.07768 103146,Enköpings Kommun,1545,C,213,SE,59.68575,17.11668 103200,Gamla Uppsala,1545,C,213,SE,59.89817,17.63386 103208,Gimo,1545,C,213,SE,60.17304,18.18507 103222,Grillby,1545,C,213,SE,59.62603,17.25787 103328,Håbo kommun,1545,C,213,SE,59.64953,17.50701 103272,Heby,1545,C,213,SE,59.93815,16.86217 103273,Heby kommun,1545,C,213,SE,60.1,17.0 103350,Irsta,1545,C,213,SE,59.7,16.93333 103374,Karlholmsbruk,1545,C,213,SE,60.52091,17.63152 103403,Knivsta,1545,C,213,SE,59.72564,17.78753 103404,Knivsta Kommun,1545,C,213,SE,59.73702,17.78137 103511,Lövstalöt,1545,C,213,SE,59.9574,17.57826 103524,Marieberg,1545,C,213,SE,60.23333,18.5 103547,Morgongåva,1545,C,213,SE,59.93395,16.96353 104033,Örbyhus,1545,C,213,SE,60.22407,17.70138 104036,Öregrund,1545,C,213,SE,60.33333,18.43333 104041,Örsundsbro,1545,C,213,SE,59.73333,17.3 104043,Österbybruk,1545,C,213,SE,60.2,17.9 104046,Östervåla,1545,C,213,SE,60.18333,17.18333 104048,Östhammar,1545,C,213,SE,60.25909,18.37408 104049,Östhammars Kommun,1545,C,213,SE,60.24156,18.26968 103813,Sävja,1545,C,213,SE,59.81872,17.69958 103716,Skutskär,1545,C,213,SE,60.62507,17.41552 103817,Söderfors,1545,C,213,SE,60.38333,17.23333 103769,Storvreta,1545,C,213,SE,59.95933,17.70588 103889,Tärnsjö,1545,C,213,SE,60.15,16.93333 103846,Tierp,1545,C,213,SE,60.34269,17.51812 103847,Tierps kommun,1545,C,213,SE,60.37206,17.63629 103903,Uppsala,1545,C,213,SE,59.85882,17.63889 103904,Uppsala Kommun,1545,C,213,SE,59.96425,17.77395 103928,Vattholma,1545,C,213,SE,60.01667,17.73333 104006,Åmotfors,1535,S,213,SE,59.76191,12.36211 104011,Årjäng,1535,S,213,SE,59.39217,12.13336 104012,Årjängs Kommun,1535,S,213,SE,59.43589,12.10366 103017,Arvika,1535,S,213,SE,59.65528,12.58518 103018,Arvika Kommun,1535,S,213,SE,59.70484,12.63202 103057,Björneborg,1535,S,213,SE,59.24122,14.24942 103107,Charlottenberg,1535,S,213,SE,59.88422,12.30398 103117,Deje,1535,S,213,SE,59.603,13.472 103128,Eda kommun,1535,S,213,SE,59.8,12.21667 103135,Ekshärad,1535,S,213,SE,60.17275,13.49647 103164,Filipstad,1535,S,213,SE,59.71236,14.16831 103165,Filipstads Kommun,1535,S,213,SE,59.87354,14.14706 103179,Forshaga,1535,S,213,SE,59.52541,13.48127 103180,Forshaga Kommun,1535,S,213,SE,59.64596,13.50572 103223,Grums,1535,S,213,SE,59.35141,13.11105 103224,Grums Kommun,1535,S,213,SE,59.40406,13.02192 103251,Hagfors,1535,S,213,SE,60.02378,13.67214 103252,Hagfors Kommun,1535,S,213,SE,60.08997,13.60757 103262,Hammarö Kommun,1535,S,213,SE,59.30699,13.54869 103383,Karlstad,1535,S,213,SE,59.3793,13.50357 103384,Karlstads Kommun,1535,S,213,SE,59.47409,13.59961 103388,Kil,1535,S,213,SE,59.50234,13.31277 103390,Kils Kommun,1535,S,213,SE,59.50406,13.3174 103416,Kristinehamn,1535,S,213,SE,59.30978,14.10808 103417,Kristinehamns Kommun,1535,S,213,SE,59.25288,14.13593 103544,Molkom,1535,S,213,SE,59.60057,13.72115 103555,Munkfors,1535,S,213,SE,59.83856,13.54361 103556,Munkfors Kommun,1535,S,213,SE,59.81625,13.49458 103670,Råtorp,1535,S,213,SE,59.40197,13.49144 103804,Säffle,1535,S,213,SE,59.13229,12.92888 103805,Säffle Kommun,1535,S,213,SE,59.19559,12.86437 103722,Skåre,1535,S,213,SE,59.43333,13.43333 103698,Skattkärr,1535,S,213,SE,59.41208,13.67078 103708,Skoghall,1535,S,213,SE,59.32324,13.46552 103726,Slottsbron,1535,S,213,SE,59.3227,13.10268 103763,Storfors,1535,S,213,SE,59.53183,14.27201 103764,Storfors Kommun,1535,S,213,SE,59.49478,14.24733 103788,Sunne,1535,S,213,SE,59.83764,13.14302 103789,Sunne Kommun,1535,S,213,SE,59.90378,13.0442 103890,Töcksfors,1535,S,213,SE,59.50816,11.84431 103862,Torsby,1535,S,213,SE,60.13527,13.0082 103863,Torsby Kommun,1535,S,213,SE,60.56939,12.93837 103977,Vålberg,1535,S,213,SE,59.39145,13.18633 104019,Åsele,1543,AC,213,SE,64.16026,17.34762 104020,Åsele Kommun,1543,AC,213,SE,64.16604,17.62356 103025,Backa,1543,AC,213,SE,64.98333,21.06667 103044,Bjurholm,1543,AC,213,SE,63.93027,19.21369 103045,Bjurholms Kommun,1543,AC,213,SE,63.96667,19.0 103063,Boliden,1543,AC,213,SE,64.86667,20.38333 103098,Bureå,1543,AC,213,SE,64.61667,21.2 103100,Burträsk,1543,AC,213,SE,64.51667,20.65 103101,Byske,1543,AC,213,SE,64.95258,21.2058 103125,Dorotea,1543,AC,213,SE,64.26185,16.41306 103126,Dorotea Kommun,1543,AC,213,SE,64.57981,15.80614 103149,Ersmark,1543,AC,213,SE,63.88333,20.31667 103176,Forsbacka,1543,AC,213,SE,64.76667,20.5 103296,Holmsund,1543,AC,213,SE,63.70602,20.36409 103340,Hörnefors,1543,AC,213,SE,63.62312,19.90856 103348,Insjön,1543,AC,213,SE,64.4,17.48333 103439,Kåge,1543,AC,213,SE,64.83571,20.98453 103503,Långsele,1543,AC,213,SE,64.81667,20.25 103497,Lycksele,1543,AC,213,SE,64.59537,18.67351 103498,Lycksele kommun,1543,AC,213,SE,64.62437,18.4893 103520,Malå,1543,AC,213,SE,65.18501,18.74243 103521,Malå Kommun,1543,AC,213,SE,65.2,18.75 103582,Nordmaling,1543,AC,213,SE,63.56852,19.50244 103583,Nordmalings Kommun,1543,AC,213,SE,63.68542,19.36777 103590,Norsjö,1543,AC,213,SE,64.91206,19.48153 103591,Norsjö Kommun,1543,AC,213,SE,64.92993,19.55556 103606,Obbola,1543,AC,213,SE,63.7,20.31667 103671,Röbäck,1543,AC,213,SE,63.80879,20.18901 103650,Robertsfors,1543,AC,213,SE,64.19324,20.84806 103651,Robertsfors Kommun,1543,AC,213,SE,64.16604,20.78415 103811,Sävar,1543,AC,213,SE,63.90383,20.55014 103701,Skellefteå,1543,AC,213,SE,64.75067,20.95279 103702,Skellefteå Kommun,1543,AC,213,SE,64.80261,20.6441 103700,Skelleftehamn,1543,AC,213,SE,64.68333,21.23333 103818,Söderfors,1543,AC,213,SE,64.81667,18.05 103741,Sorsele,1543,AC,213,SE,65.53484,17.53702 103742,Sorsele Kommun,1543,AC,213,SE,65.75,16.75 103765,Storuman,1543,AC,213,SE,65.0959,17.11731 103766,Storumans Kommun,1543,AC,213,SE,65.45192,16.2581 103767,Storvik,1543,AC,213,SE,65.15,20.73333 103888,Täfteå,1543,AC,213,SE,63.8397,20.47857 103898,Umeå,1543,AC,213,SE,63.82842,20.25972 103899,Umeå Kommun,1543,AC,213,SE,63.82992,20.25484 103906,Ursviken,1543,AC,213,SE,64.71261,21.1658 103964,Vännäs,1543,AC,213,SE,63.90676,19.75712 103965,Vännäs Kommun,1543,AC,213,SE,63.9496,19.70834 103966,Vännäsby,1543,AC,213,SE,63.91564,19.82438 103942,Viken,1543,AC,213,SE,64.72587,20.91548 103945,Vilhelmina,1543,AC,213,SE,64.62417,16.65596 103946,Vilhelmina Kommun,1543,AC,213,SE,64.99358,16.03212 103949,Vindeln,1543,AC,213,SE,64.20175,19.71945 103950,Vindelns Kommun,1543,AC,213,SE,64.18605,19.71222 104009,Ånge,1552,Y,213,SE,62.52495,15.65904 104010,Ånge kommun,1552,Y,213,SE,62.51232,15.64453 104015,Ås,1552,Y,213,SE,63.36667,16.58333 103034,Bergeforsen,1552,Y,213,SE,62.53074,17.38123 103051,Bjästa,1552,Y,213,SE,63.2,18.5 103069,Bollstabruk,1552,Y,213,SE,62.99777,17.67348 103084,Bredbyn,1552,Y,213,SE,63.44655,18.11019 103185,Fränsta,1552,Y,213,SE,62.49855,16.17016 103322,Härnösand,1552,Y,213,SE,62.63228,17.93794 103323,Härnösands Kommun,1552,Y,213,SE,62.76667,17.68333 103311,Husum,1552,Y,213,SE,63.33333,19.16667 103352,Johannedal,1552,Y,213,SE,62.43424,17.37273 103445,Köpmanholmen,1552,Y,213,SE,63.16667,18.56667 103411,Kramfors,1552,Y,213,SE,62.93161,17.77646 103412,Kramfors Kommun,1552,Y,213,SE,62.97246,17.92274 103434,Kvissleby,1552,Y,213,SE,62.29361,17.375 103502,Långsele,1552,Y,213,SE,63.18333,17.06667 103534,Matfors,1552,Y,213,SE,62.34864,17.03173 103574,Njurundabommen,1552,Y,213,SE,62.26339,17.38354 103575,Nolby,1552,Y,213,SE,62.2875,17.36917 104039,Örnsköldsvik,1552,Y,213,SE,63.29091,18.71525 104040,Örnsköldsviks Kommun,1552,Y,213,SE,63.51458,18.27101 103710,Skottsund,1552,Y,213,SE,62.29056,17.38694 103735,Sollefteå,1552,Y,213,SE,63.16667,17.26667 103736,Sollefteå Kommun,1552,Y,213,SE,63.38333,16.91667 103833,Söråker,1552,Y,213,SE,62.50561,17.51032 103760,Stockvik,1552,Y,213,SE,62.33667,17.36583 103785,Sundsbruk,1552,Y,213,SE,62.45806,17.34889 103786,Sundsvall,1552,Y,213,SE,62.39129,17.3063 103787,Sundsvalls Kommun,1552,Y,213,SE,62.47912,16.92651 103850,Timrå,1552,Y,213,SE,62.48654,17.32613 103851,Timrå Kommun,1552,Y,213,SE,62.61598,17.37848 103939,Vi,1552,Y,213,SE,62.43333,17.41667 103007,Arboga,1549,U,213,SE,59.39387,15.83882 103008,Arboga Kommun,1549,U,213,SE,59.39451,15.79261 103029,Barkarö,1549,U,213,SE,59.54935,16.5074 103119,Dingtuna,1549,U,213,SE,59.57279,16.38722 103144,Enhagen-Ekbacken,1549,U,213,SE,59.56543,16.53045 103155,Fagersta,1549,U,213,SE,60.00418,15.79316 103156,Fagersta Kommun,1549,U,213,SE,59.94834,15.88332 103255,Hallstahammar,1549,U,213,SE,59.61395,16.22846 103256,Hallstahammars Kommun,1549,U,213,SE,59.61703,16.22797 103333,Hökåsen,1549,U,213,SE,59.66667,16.58333 103349,Irsta,1549,U,213,SE,59.6,16.7 103407,Kolbäck,1549,U,213,SE,59.56516,16.23037 103408,Kolsva,1549,U,213,SE,59.6,15.83333 103442,Köping,1549,U,213,SE,59.51404,15.99255 103444,Köpings Kommun,1549,U,213,SE,59.56639,15.87218 103428,Kungsör,1549,U,213,SE,59.42245,16.09656 103429,Kungsörs kommun,1549,U,213,SE,59.40247,16.07748 103579,Norberg,1549,U,213,SE,60.06505,15.92366 103580,Norbergs Kommun,1549,U,213,SE,60.08997,15.95971 103642,Ramnäs,1549,U,213,SE,59.76667,16.2 103675,Sala,1549,U,213,SE,59.91993,16.60655 103676,Sala kommun,1549,U,213,SE,59.97221,16.47374 103705,Skinnskatteberg,1549,U,213,SE,59.83028,15.69337 103706,Skinnskattebergs Kommun,1549,U,213,SE,59.79715,15.71463 103713,Skultuna,1549,U,213,SE,59.71667,16.41667 103790,Surahammar,1549,U,213,SE,59.70725,16.22188 103791,Surahammars Kommun,1549,U,213,SE,59.77487,16.11885 103848,Tillberga,1549,U,213,SE,59.68333,16.61667 103972,Västerås,1549,U,213,SE,59.64914,16.56445 104001,Åkarp,1547,O,213,SE,58.23333,13.65 102987,Alafors,1547,O,213,SE,57.92579,12.07835 102989,Ale Kommun,1547,O,213,SE,57.97018,12.25166 102991,Alingsås,1547,O,213,SE,57.93033,12.53345 102992,Alingsås Kommun,1547,O,213,SE,58.0,12.5 103995,Älvängen,1547,O,213,SE,57.95872,12.1235 104007,Åmål,1547,O,213,SE,59.051,12.70492 104008,Åmåls Kommun,1547,O,213,SE,59.04573,12.59583 102997,Andalen,1547,O,213,SE,57.70039,11.76136 103000,Anderstorp,1547,O,213,SE,58.88333,14.28333 103003,Angered,1547,O,213,SE,57.78628,12.09852 103006,Annelund,1547,O,213,SE,57.98843,13.07483 103024,Axvall,1547,O,213,SE,58.38333,13.56667 103030,Bengtsfors,1547,O,213,SE,59.02912,12.23207 103031,Bengtsfors Kommun,1547,O,213,SE,59.03333,12.21667 103040,Billdal,1547,O,213,SE,57.56667,11.93333 103043,Billingsfors,1547,O,213,SE,58.98333,12.25 103052,Björboholm,1547,O,213,SE,57.87096,12.32546 103055,Björkö,1547,O,213,SE,57.73221,11.67916 103056,Björlanda,1547,O,213,SE,57.76667,11.83333 103064,Bollebygd,1547,O,213,SE,57.66866,12.57272 103065,Bollebygds Kommun,1547,O,213,SE,57.7426,12.61451 103077,Borås,1547,O,213,SE,57.73783,12.94076 103095,Brålanda,1547,O,213,SE,58.56344,12.34923 103081,Brastad,1547,O,213,SE,58.38333,11.48333 103110,Dals Långed,1547,O,213,SE,58.92555,12.30865 103111,Dals-Ed Kommun,1547,O,213,SE,58.91252,11.92395 103112,Dalsjöfors,1547,O,213,SE,57.71667,13.08333 103120,Diseröd,1547,O,213,SE,57.92636,12.02598 103124,Donsö,1547,O,213,SE,57.6,11.79917 103127,Ed,1547,O,213,SE,58.91247,11.93308 103139,Ellös,1547,O,213,SE,58.18333,11.46667 103148,Eriksbo,1547,O,213,SE,57.77141,12.04183 103154,Essunga Kommun,1547,O,213,SE,58.20253,12.72273 103159,Falköping,1547,O,213,SE,58.17347,13.55068 103160,Falköpings Kommun,1547,O,213,SE,58.14046,13.53277 103191,Färgelanda,1547,O,213,SE,58.56816,11.99235 103192,Färgelanda Kommun,1547,O,213,SE,58.6163,12.01136 103175,Floby,1547,O,213,SE,58.13333,13.33333 103183,Fristad,1547,O,213,SE,57.82483,13.01064 103184,Fritsla,1547,O,213,SE,57.55655,12.78457 103189,Furulund,1547,O,213,SE,57.71667,12.13333 103242,Gånghester,1547,O,213,SE,57.7,13.01667 103243,Gårdsten,1547,O,213,SE,57.8048,12.02883 103244,Göta,1547,O,213,SE,58.10617,12.15254 103245,Göteborg,1547,O,213,SE,57.70716,11.96679 103246,Göteborgs stad,1547,O,213,SE,57.72288,11.94577 103247,Götene,1547,O,213,SE,58.52824,13.49458 103248,Götene Kommun,1547,O,213,SE,58.55105,13.47866 103230,Gråbo,1547,O,213,SE,57.83625,12.29954 103228,Grästorp,1547,O,213,SE,58.33219,12.68122 103229,Grästorps Kommun,1547,O,213,SE,58.33333,12.66667 103220,Grebbestad,1547,O,213,SE,58.70248,11.25738 103232,Gullspång,1547,O,213,SE,58.98615,14.09644 103233,Gullspångs Kommun,1547,O,213,SE,58.933,14.18048 103261,Hammarkullen,1547,O,213,SE,57.78049,12.03604 103324,Härryda Kommun,1547,O,213,SE,57.67736,12.3201 103280,Henån,1547,O,213,SE,58.23848,11.67598 103282,Herrljunga,1547,O,213,SE,58.07739,13.02662 103283,Herrljunga Kommun,1547,O,213,SE,58.01156,13.12059 103286,Hindås,1547,O,213,SE,57.70338,12.44657 103288,Hjo,1547,O,213,SE,58.30133,14.28784 103289,Hjo Kommun,1547,O,213,SE,58.29642,14.20754 103290,Hjuvik,1547,O,213,SE,57.70167,11.71639 103337,Hönö,1547,O,213,SE,57.68972,11.64972 103298,Horred,1547,O,213,SE,57.35475,12.47777 103300,Hova,1547,O,213,SE,58.85363,14.21914 103341,Höviksnäs,1547,O,213,SE,58.03333,11.76667 103309,Hunnebostrand,1547,O,213,SE,58.44127,11.3032 103345,Ingared,1547,O,213,SE,57.85989,12.45161 103355,Jonstorp,1547,O,213,SE,58.0,12.71667 103368,Jörlanda,1547,O,213,SE,57.9863,11.82943 103436,Källby,1547,O,213,SE,58.50999,13.30582 103441,Kållered,1547,O,213,SE,57.60992,12.05106 103375,Karlsborg,1547,O,213,SE,58.53724,14.5047 103376,Karlsborgs Kommun,1547,O,213,SE,58.60994,14.45421 103393,Kinna,1547,O,213,SE,57.50728,12.69463 103406,Kode,1547,O,213,SE,57.94263,11.85051 103430,Kungälv,1547,O,213,SE,57.87096,11.98054 103431,Kungälvs Kommun,1547,O,213,SE,57.89697,11.88882 103425,Kungshamn,1547,O,213,SE,58.36305,11.25938 103435,Kvänum,1547,O,213,SE,58.3,13.18333 103452,Landvetter,1547,O,213,SE,57.68665,12.21169 103501,Länghem,1547,O,213,SE,57.6,13.23333 103459,Lerum,1547,O,213,SE,57.77051,12.26904 103460,Lerums Kommun,1547,O,213,SE,57.77452,12.26967 103464,Lidköping,1547,O,213,SE,58.50517,13.15765 103465,Lidköpings Kommun,1547,O,213,SE,58.5,13.0 103466,Lilla Edet,1547,O,213,SE,58.13333,12.13333 103467,Lilla Edets Kommun,1547,O,213,SE,58.13569,12.14345 103468,Limmared,1547,O,213,SE,57.53592,13.35566 103472,Lindome,1547,O,213,SE,57.56667,12.08333 103484,Ljungskile,1547,O,213,SE,58.22452,11.92014 103508,Lödöse,1547,O,213,SE,58.02994,12.15934 103510,Lövgärdet,1547,O,213,SE,57.81555,12.03861 103499,Lysekil,1547,O,213,SE,58.27429,11.43576 103500,Lysekils Kommun,1547,O,213,SE,58.34719,11.46688 103512,Majorna,1547,O,213,SE,57.69195,11.91605 103529,Mariestad,1547,O,213,SE,58.70971,13.82367 103530,Mariestads Kommun,1547,O,213,SE,58.70861,13.85424 103533,Marks Kommun,1547,O,213,SE,57.47604,12.59462 103536,Mellerud,1547,O,213,SE,58.69979,12.45312 103537,Melleruds Kommun,1547,O,213,SE,58.6911,12.41399 103560,Mölltorp,1547,O,213,SE,58.5,14.4 103562,Mölndal,1547,O,213,SE,57.6554,12.01378 103563,Mölndals kommun,1547,O,213,SE,57.60256,12.09889 103564,Mölnlycke,1547,O,213,SE,57.65893,12.11792 103553,Munkedal,1547,O,213,SE,58.46634,11.67345 103554,Munkedals Kommun,1547,O,213,SE,58.57334,11.70103 103557,Myggenäs,1547,O,213,SE,58.06176,11.74936 103576,Nolvik,1547,O,213,SE,57.775,11.83333 103592,Nossebro,1547,O,213,SE,58.18808,12.71599 104025,Öckerö,1547,O,213,SE,57.70814,11.65585 104026,Öckerö Kommun,1547,O,213,SE,57.69534,11.64825 104029,Ödsmål,1547,O,213,SE,58.1,11.85 104031,Öjersjö,1547,O,213,SE,57.69882,12.13448 103611,Olofstorp,1547,O,213,SE,57.80444,12.17131 103615,Olstorp,1547,O,213,SE,57.82277,12.27696 103620,Orust,1547,O,213,SE,58.18025,11.63419 103632,Partille,1547,O,213,SE,57.7395,12.10642 103633,Partille Kommun,1547,O,213,SE,57.73306,12.13072 103643,Rannebergen,1547,O,213,SE,57.80236,12.07131 103667,Rävlanda,1547,O,213,SE,57.65338,12.49791 103674,Rönnäng,1547,O,213,SE,57.93333,11.58333 103816,Sålanda,1547,O,213,SE,57.98333,12.21667 103679,Sandared,1547,O,213,SE,57.70992,12.79238 103809,Sätila,1547,O,213,SE,57.54172,12.43429 103694,Sjömarken,1547,O,213,SE,57.71533,12.83495 103691,Sjuntorp,1547,O,213,SE,58.2,12.21667 103696,Skara,1547,O,213,SE,58.38659,13.43836 103697,Skara Kommun,1547,O,213,SE,58.37759,13.47548 103720,Skärhamn,1547,O,213,SE,57.98665,11.55742 103703,Skepplanda,1547,O,213,SE,57.98333,12.2 103724,Skövde,1547,O,213,SE,58.39118,13.84506 103725,Skövde Kommun,1547,O,213,SE,58.43488,13.90358 103712,Skultorp,1547,O,213,SE,58.35,13.83333 103733,Smögen,1547,O,213,SE,58.35593,11.22411 103734,Sollebrunn,1547,O,213,SE,58.11667,12.53333 103743,Sotenäs Kommun,1547,O,213,SE,58.42215,11.34296 103751,Stenkullen,1547,O,213,SE,57.79476,12.31688 103753,Stenstorp,1547,O,213,SE,58.27254,13.71454 103754,Stenungsund,1547,O,213,SE,58.07046,11.8181 103755,Stenungsunds Kommun,1547,O,213,SE,58.06248,11.90473 103782,Stöpen,1547,O,213,SE,58.47802,13.86611 103761,Stora Höga,1547,O,213,SE,58.01667,11.83333 103775,Strömstad,1547,O,213,SE,58.93945,11.1712 103776,Strömstads Kommun,1547,O,213,SE,58.94891,11.25543 103780,Styrsö,1547,O,213,SE,57.61639,11.78556 103792,Surte,1547,O,213,SE,57.82533,12.01604 103796,Svanesund,1547,O,213,SE,58.14292,11.81821 103799,Svenljunga,1547,O,213,SE,57.49551,13.11078 103800,Svenljunga Kommun,1547,O,213,SE,57.39249,13.05216 103837,Tanums Kommun,1547,O,213,SE,58.71656,11.42571 103838,Tanumshede,1547,O,213,SE,58.72385,11.32587 103842,Tibro,1547,O,213,SE,58.42453,14.16162 103843,Tibro Kommun,1547,O,213,SE,58.4492,14.22664 103844,Tidaholm,1547,O,213,SE,58.18035,13.95824 103845,Tidaholms kommun,1547,O,213,SE,58.14842,13.94336 103855,Tjörns Kommun,1547,O,213,SE,58.00519,11.63101 103854,Tjuvkil,1547,O,213,SE,57.9,11.73333 103892,Töreboda,1547,O,213,SE,58.70739,14.12597 103893,Töreboda Kommun,1547,O,213,SE,58.67996,14.16139 103865,Torslanda,1547,O,213,SE,57.72432,11.77013 103869,Tranemo,1547,O,213,SE,57.48333,13.35 103870,Tranemo Kommun,1547,O,213,SE,57.5,13.43333 103876,Trollhättan,1547,O,213,SE,58.21208,12.35033 103894,Uddevalla,1547,O,213,SE,58.34784,11.9424 103895,Uddevalla Kommun,1547,O,213,SE,58.34099,11.84744 103896,Ulricehamn,1547,O,213,SE,57.79159,13.41422 103897,Ulricehamns Kommun,1547,O,213,SE,57.82059,13.46116 103962,Vänersborg,1547,O,213,SE,58.38075,12.3234 103963,Vänersborgs Kommun,1547,O,213,SE,58.39828,12.27554 103922,Vara,1547,O,213,SE,58.26234,12.95413 103923,Vara Kommun,1547,O,213,SE,58.24391,13.07285 103979,Vårgårda,1547,O,213,SE,58.03706,12.80907 103980,Vårgårda Kommun,1547,O,213,SE,57.98769,12.76888 103926,Vargön,1547,O,213,SE,58.35599,12.3906 103973,Västra Frölunda,1547,O,213,SE,57.64667,11.92944 103953,Vinninga,1547,O,213,SE,58.45,13.26667 103958,Viskafors,1547,O,213,SE,57.62941,12.8489 17357,Aarau,1639,AG,214,CH,47.39254,8.04422 17359,Aarburg,1639,AG,214,CH,47.32067,7.89986 17407,Aristau,1639,AG,214,CH,47.28692,8.36356 17424,Auw,1639,AG,214,CH,47.21082,8.36583 17431,Bad Zurzach,1639,AG,214,CH,47.58764,8.29365 17432,Baden,1639,AG,214,CH,47.47333,8.30592 17460,Berikon,1639,AG,214,CH,47.35155,8.37232 17467,Besenbüren,1639,AG,214,CH,47.31439,8.34586 17471,Bezirk Aarau,1639,AG,214,CH,47.37706,8.05235 17475,Bezirk Baden,1639,AG,214,CH,47.4566,8.30059 17476,Bezirk Bremgarten,1639,AG,214,CH,47.34927,8.33343 17477,Bezirk Brugg,1639,AG,214,CH,47.47776,8.17798 17491,Bezirk Kulm,1639,AG,214,CH,47.28757,8.13302 17494,Bezirk Laufenburg,1639,AG,214,CH,47.51844,8.03878 17496,Bezirk Lenzburg,1639,AG,214,CH,47.37184,8.1891 17501,Bezirk Muri,1639,AG,214,CH,47.25233,8.35362 17506,Bezirk Rheinfelden,1639,AG,214,CH,47.54048,7.83331 17521,Bezirk Zofingen,1639,AG,214,CH,47.28864,7.95697 17522,Bezirk Zurzach,1639,AG,214,CH,47.56182,8.2802 17536,Birmenstorf,1639,AG,214,CH,47.46152,8.24816 17537,Birr,1639,AG,214,CH,47.43432,8.20891 17549,Boniswil,1639,AG,214,CH,47.31725,8.18963 17558,Bremgarten,1639,AG,214,CH,47.35109,8.34214 17565,Brittnau,1639,AG,214,CH,47.25954,7.94689 17570,Brugg,1639,AG,214,CH,47.48096,8.20869 17579,Buchs,1639,AG,214,CH,47.39358,8.08233 17588,Buttwil,1639,AG,214,CH,47.26828,8.31064 17682,Densbüren,1639,AG,214,CH,47.4526,8.0533 17705,Dottikon,1639,AG,214,CH,47.38437,8.23981 17717,Dürrenäsch,1639,AG,214,CH,47.32094,8.15874 17732,Egliswil,1639,AG,214,CH,47.34922,8.18553 17734,Ehrendingen,1639,AG,214,CH,47.5025,8.34729 17737,Eiken,1639,AG,214,CH,47.53361,7.98801 17749,Endingen,1639,AG,214,CH,47.53742,8.29036 17810,Frick,1639,AG,214,CH,47.51169,8.02471 17824,Gebenstorf,1639,AG,214,CH,47.48136,8.23949 17834,Gipf-Oberfrick,1639,AG,214,CH,47.49875,8.00497 17853,Gontenschwil,1639,AG,214,CH,47.27166,8.14396 17880,Gränichen,1639,AG,214,CH,47.3593,8.10243 17939,Hägglingen,1639,AG,214,CH,47.38851,8.25285 17895,Hausen,1639,AG,214,CH,47.46396,8.20988 17960,Jonen,1639,AG,214,CH,47.2975,8.39282 17966,Kaiseraugst,1639,AG,214,CH,47.53966,7.72605 17967,Kaisten,1639,AG,214,CH,47.5416,8.04337 17978,Killwangen,1639,AG,214,CH,47.43223,8.35097 17985,Klingnau,1639,AG,214,CH,47.58361,8.2488 17999,Koblenz,1639,AG,214,CH,47.60972,8.2375 18010,Kölliken,1639,AG,214,CH,47.33337,8.02237 18012,Künten,1639,AG,214,CH,47.38887,8.33045 18020,Küttigen,1639,AG,214,CH,47.41484,8.04979 18043,Laufenburg,1639,AG,214,CH,47.55985,8.06225 18044,Lauffohr (Brugg),1639,AG,214,CH,47.50154,8.23122 18062,Leibstadt,1639,AG,214,CH,47.5879,8.17611 18066,Lenzburg,1639,AG,214,CH,47.38853,8.17503 18115,Magden,1639,AG,214,CH,47.52868,7.81128 18144,Meisterschwanden,1639,AG,214,CH,47.29489,8.22867 18148,Mellingen,1639,AG,214,CH,47.41903,8.27331 18151,Menziken,1639,AG,214,CH,47.23965,8.18996 18154,Merenschwand,1639,AG,214,CH,47.25944,8.37633 18191,Möhlin,1639,AG,214,CH,47.55915,7.84329 18176,Muhen,1639,AG,214,CH,47.33578,8.05536 18177,Mumpf,1639,AG,214,CH,47.54563,7.92123 18181,Murgenthal,1639,AG,214,CH,47.27145,7.83935 18182,Muri,1639,AG,214,CH,47.27428,8.33854 18215,Neuenhof,1639,AG,214,CH,47.44985,8.32682 18227,Niederlenz,1639,AG,214,CH,47.40079,8.1764 18228,Niederrohrdorf,1639,AG,214,CH,47.42409,8.30404 18250,Oberentfelden,1639,AG,214,CH,47.35639,8.04594 18257,Oberlunkhofen,1639,AG,214,CH,47.31244,8.39242 18263,Oberrohrdorf,1639,AG,214,CH,47.41833,8.31983 18264,Oberrüti,1639,AG,214,CH,47.16673,8.39441 18266,Obersiggenthal,1639,AG,214,CH,47.4875,8.29652 18281,Oftringen,1639,AG,214,CH,47.31382,7.92533 18293,Othmarsingen,1639,AG,214,CH,47.40125,8.21383 18363,Reinach,1639,AG,214,CH,47.25732,8.18091 18366,Rheinfelden,1639,AG,214,CH,47.55437,7.79403 18394,Rothrist,1639,AG,214,CH,47.30508,7.89196 18397,Rudolfstetten,1639,AG,214,CH,47.37101,8.38083 18399,Rupperswil,1639,AG,214,CH,47.40131,8.12877 18419,Safenwil,1639,AG,214,CH,47.32163,7.98254 18446,Sarmenstorf,1639,AG,214,CH,47.31109,8.2495 18456,Schafisheim,1639,AG,214,CH,47.37664,8.14263 18462,Schinznach Bad,1639,AG,214,CH,47.44992,8.16833 18463,Schinznach Dorf,1639,AG,214,CH,47.4465,8.14089 18483,Schöftland,1639,AG,214,CH,47.3059,8.05119 18474,Schwaderloch,1639,AG,214,CH,47.58541,8.14455 18501,Seengen,1639,AG,214,CH,47.32503,8.20724 18511,Seon,1639,AG,214,CH,47.34848,8.16072 18523,Sins,1639,AG,214,CH,47.19296,8.39384 18534,Spreitenbach,1639,AG,214,CH,47.42285,8.36792 18544,Staffelbach,1639,AG,214,CH,47.28395,8.04208 18548,Staufen,1639,AG,214,CH,47.38197,8.16681 18551,Stein,1639,AG,214,CH,47.54403,7.95256 18559,Strengelbach,1639,AG,214,CH,47.27917,7.92895 18562,Suhr,1639,AG,214,CH,47.37172,8.07967 18564,Sulz,1639,AG,214,CH,47.53602,8.09628 18577,Tegerfelden,1639,AG,214,CH,47.55809,8.28914 18580,Teufenthal,1639,AG,214,CH,47.32896,8.11777 18614,Turgi,1639,AG,214,CH,47.49201,8.25412 18625,Uerkheim,1639,AG,214,CH,47.30353,8.0232 18633,Unterkulm,1639,AG,214,CH,47.30998,8.11371 18634,Unterlunkhofen,1639,AG,214,CH,47.3212,8.38102 18636,Untersiggenthal,1639,AG,214,CH,47.50213,8.25554 18664,Veltheim,1639,AG,214,CH,47.43796,8.14722 18683,Villigen,1639,AG,214,CH,47.52682,8.21486 18684,Villmergen,1639,AG,214,CH,47.35009,8.24762 18685,Villnachern,1639,AG,214,CH,47.47098,8.15975 18692,Vordemwald,1639,AG,214,CH,47.27585,7.90114 18719,Waltenschwil,1639,AG,214,CH,47.33339,8.29791 18728,Wegenstetten,1639,AG,214,CH,47.49797,7.93141 18736,Wettingen,1639,AG,214,CH,47.47049,8.31636 18757,Windisch,1639,AG,214,CH,47.47899,8.21842 18760,Wittnau,1639,AG,214,CH,47.48139,7.97577 18761,Wohlen,1639,AG,214,CH,47.35066,8.27517 18782,Wölflinswil,1639,AG,214,CH,47.4607,7.99835 18788,Würenlingen,1639,AG,214,CH,47.53356,8.25666 18789,Würenlos,1639,AG,214,CH,47.44205,8.36261 18796,Zofingen,1639,AG,214,CH,47.28779,7.94586 17487,Bezirk Hinterland,1655,AR,214,CH,47.3647,9.2735 17500,Bezirk Mittelland,1655,AR,214,CH,47.377,9.43469 17517,Bezirk Vorderland,1655,AR,214,CH,47.44167,9.53869 17597,Bühler,1655,AR,214,CH,47.37348,9.42507 17819,Gais,1655,AR,214,CH,47.3615,9.45356 17901,Heiden,1655,AR,214,CH,47.44255,9.53293 17907,Herisau,1655,AR,214,CH,47.38615,9.27916 18359,Rehetobel,1655,AR,214,CH,47.42611,9.483 18477,Schwellbrunn,1655,AR,214,CH,47.35255,9.24894 18532,Speicher,1655,AR,214,CH,47.4109,9.44335 18579,Teufen,1655,AR,214,CH,47.3908,9.38644 18605,Trogen,1655,AR,214,CH,47.40782,9.46498 18643,Urnäsch,1655,AR,214,CH,47.31669,9.2795 18712,Waldstatt,1655,AR,214,CH,47.35627,9.28345 18720,Walzenhausen,1655,AR,214,CH,47.44867,9.60495 17400,Appenzell,1649,AI,214,CH,47.33103,9.40996 17852,Gonten,1649,AI,214,CH,47.32725,9.34705 17894,Haslen,1649,AI,214,CH,47.36931,9.36752 18245,Oberegg,1649,AI,214,CH,47.42531,9.55134 17371,Aesch,1641,BL,214,CH,47.47104,7.5973 17386,Allschwil,1641,BL,214,CH,47.55074,7.53599 17406,Arisdorf,1641,BL,214,CH,47.51323,7.76515 17408,Arlesheim,1641,BL,214,CH,47.49412,7.61979 17474,Bezirk Arlesheim,1641,BL,214,CH,47.51668,7.58733 17493,Bezirk Laufen,1641,BL,214,CH,47.42324,7.4875 17497,Bezirk Liestal,1641,BL,214,CH,47.48124,7.72714 17510,Bezirk Sissach,1641,BL,214,CH,47.44237,7.84871 17518,Bezirk Waldenburg,1641,BL,214,CH,47.39367,7.74137 17530,Binningen,1641,BL,214,CH,47.54021,7.56932 17538,Birsfelden,1641,BL,214,CH,47.5529,7.62322 17553,Bottmingen,1641,BL,214,CH,47.52343,7.57211 17563,Brislach,1641,BL,214,CH,47.41763,7.5434 17575,Bubendorf,1641,BL,214,CH,47.44586,7.73759 17589,Buus,1641,BL,214,CH,47.50635,7.86414 17684,Diegten,1641,BL,214,CH,47.4138,7.81085 17775,Ettingen,1641,BL,214,CH,47.48225,7.54654 17808,Frenkendorf,1641,BL,214,CH,47.50686,7.71648 17817,Füllinsdorf,1641,BL,214,CH,47.50688,7.73129 17825,Gelterkinden,1641,BL,214,CH,47.46497,7.85174 17867,Grellingen,1641,BL,214,CH,47.44231,7.58906 17942,Hölstein,1641,BL,214,CH,47.4229,7.77041 17956,Itingen,1641,BL,214,CH,47.46651,7.78502 18034,Langenbruck,1641,BL,214,CH,47.34917,7.76802 18109,Läufelfingen,1641,BL,214,CH,47.39457,7.85578 18042,Laufen,1641,BL,214,CH,47.42193,7.49946 18050,Lausen,1641,BL,214,CH,47.47139,7.7603 18082,Liesberg,1641,BL,214,CH,47.40398,7.42787 18083,Liestal,1641,BL,214,CH,47.48455,7.73446 18200,Münchenstein,1641,BL,214,CH,47.51848,7.60966 18185,Muttenz,1641,BL,214,CH,47.52271,7.64511 18244,Oberdorf,1641,BL,214,CH,47.39353,7.75169 18270,Oberwil,1641,BL,214,CH,47.51407,7.55786 18287,Ormalingen,1641,BL,214,CH,47.46936,7.87248 18307,Pfeffingen,1641,BL,214,CH,47.45984,7.58975 18324,Pratteln,1641,BL,214,CH,47.52071,7.69356 18362,Reigoldswil,1641,BL,214,CH,47.39824,7.68718 18403,Röschenz,1641,BL,214,CH,47.42366,7.48024 18484,Schönenbuch,1641,BL,214,CH,47.53853,7.50572 18505,Seltisberg,1641,BL,214,CH,47.46249,7.72039 18526,Sissach,1641,BL,214,CH,47.46408,7.80888 18589,Therwil,1641,BL,214,CH,47.49941,7.55669 18699,Wahlen,1641,BL,214,CH,47.40226,7.51511 18710,Waldenburg,1641,BL,214,CH,47.38333,7.75 18803,Zunzgen,1641,BL,214,CH,47.44925,7.80789 18807,Zwingen,1641,BL,214,CH,47.43825,7.53027 17358,Aarberg,1645,BE,214,CH,47.04439,7.27578 17360,Aarwangen,1645,BE,214,CH,47.23845,7.76854 17362,Adelboden,1645,BE,214,CH,46.49142,7.56031 17373,Aeschi b. Spiez,1645,BE,214,CH,46.65848,7.6965 17404,Arch,1645,BE,214,CH,47.16533,7.43139 17417,Attiswil,1645,BE,214,CH,47.24673,7.61353 17592,Bäriswil,1645,BE,214,CH,47.01947,7.52709 17593,Bätterkinden,1645,BE,214,CH,47.13164,7.53817 17447,Beatenberg,1645,BE,214,CH,46.69896,7.79428 17454,Bellmund,1645,BE,214,CH,47.10852,7.24608 17456,Belp,1645,BE,214,CH,46.89129,7.49825 17462,Bern,1645,BE,214,CH,46.94809,7.44744 17463,Bern-Mittelland District,1645,BE,214,CH,46.92526,7.49024 17594,Bévilard,1645,BE,214,CH,47.23711,7.28325 17526,Biel/Bienne,1645,BE,214,CH,47.13713,7.24608 17527,Biel/Bienne District,1645,BE,214,CH,47.12725,7.26174 17528,Biglen,1645,BE,214,CH,46.92629,7.62508 17542,Blumenstein,1645,BE,214,CH,46.7421,7.52136 17545,Bolligen,1645,BE,214,CH,46.9751,7.49697 17546,Boltigen,1645,BE,214,CH,46.62847,7.39054 17595,Bönigen,1645,BE,214,CH,46.68736,7.8935 17556,Bowil,1645,BE,214,CH,46.89304,7.69757 17560,Brienz,1645,BE,214,CH,46.7545,8.03847 17572,Brügg,1645,BE,214,CH,47.1237,7.27887 17577,Buchholterberg,1645,BE,214,CH,46.81351,7.67463 17583,Burgdorf,1645,BE,214,CH,47.05901,7.62786 17584,Burgistein,1645,BE,214,CH,46.78464,7.49988 17653,Corgémont,1645,BE,214,CH,47.19457,7.14517 17664,Court,1645,BE,214,CH,47.23956,7.33655 17665,Courtelary,1645,BE,214,CH,47.17822,7.07236 17708,Därligen,1645,BE,214,CH,46.66175,7.80808 17686,Diemtigen,1645,BE,214,CH,46.64928,7.56477 17716,Dürrenroth,1645,BE,214,CH,47.08953,7.7917 17731,Eggiwil,1645,BE,214,CH,46.87575,7.79567 17747,Emmental District,1645,BE,214,CH,47.04425,7.66176 17758,Eriswil,1645,BE,214,CH,47.07816,7.85149 17759,Erlach,1645,BE,214,CH,47.0422,7.09728 17764,Erlenbach im Simmental,1645,BE,214,CH,46.66021,7.55445 17767,Ersigen,1645,BE,214,CH,47.09368,7.59507 17777,Evilard,1645,BE,214,CH,47.15046,7.23895 17784,Ferenbalm,1645,BE,214,CH,46.9488,7.21124 17802,Fraubrunnen,1645,BE,214,CH,47.0862,7.52727 17805,Frauenkappelen,1645,BE,214,CH,46.95425,7.33835 17812,Frutigen,1645,BE,214,CH,46.58723,7.64945 17813,Frutigen-Niedersimmental District,1645,BE,214,CH,46.60236,7.62292 17870,Grindelwald,1645,BE,214,CH,46.62396,8.03601 17874,Grossaffoltern,1645,BE,214,CH,47.06534,7.35689 17884,Gstaad,1645,BE,214,CH,46.47215,7.28685 17885,Guggisberg,1645,BE,214,CH,46.76756,7.32946 17902,Heimberg,1645,BE,214,CH,46.79482,7.60433 17903,Heimiswil,1645,BE,214,CH,47.06755,7.66665 17908,Hermiswil,1645,BE,214,CH,46.83125,7.47775 17910,Herzogenbuchsee,1645,BE,214,CH,47.18795,7.7062 17913,Hilterfingen,1645,BE,214,CH,46.73521,7.66185 17915,Hindelbank,1645,BE,214,CH,47.0427,7.54143 17936,Huttwil,1645,BE,214,CH,47.11502,7.86209 17952,Ins,1645,BE,214,CH,47.00584,7.10609 17953,Interlaken,1645,BE,214,CH,46.68387,7.86638 17954,Interlaken-Oberhasli District,1645,BE,214,CH,46.68931,7.98869 17957,Jegenstorf,1645,BE,214,CH,47.04802,7.50787 17963,Jura bernois,1645,BE,214,CH,47.21892,7.21981 17968,Kallnach,1645,BE,214,CH,47.02032,7.23545 17970,Kandersteg,1645,BE,214,CH,46.49467,7.67326 17971,Kappelen,1645,BE,214,CH,47.06015,7.2686 17972,Kehrsatz,1645,BE,214,CH,46.91035,7.47096 17981,Kirchberg,1645,BE,214,CH,47.08538,7.58288 17982,Kirchlindach,1645,BE,214,CH,46.99965,7.41735 18011,Köniz,1645,BE,214,CH,46.92436,7.41457 18002,Konolfingen,1645,BE,214,CH,46.87909,7.62013 18003,Koppigen,1645,BE,214,CH,47.13125,7.60525 18004,Krauchthal,1645,BE,214,CH,47.00964,7.5664 18023,La Neuveville,1645,BE,214,CH,47.06592,7.09717 18036,Langenthal,1645,BE,214,CH,47.21526,7.79607 18037,Langnau,1645,BE,214,CH,46.93936,7.78738 18045,Laupen,1645,BE,214,CH,46.90214,7.23973 18047,Lauperswil,1645,BE,214,CH,46.96564,7.74214 18051,Lauterbrunnen,1645,BE,214,CH,46.59307,7.90938 18063,Lengnau,1645,BE,214,CH,47.18155,7.36814 18064,Lenk,1645,BE,214,CH,46.45826,7.44298 18077,Leuzigen,1645,BE,214,CH,47.17458,7.45775 18085,Linden,1645,BE,214,CH,46.8469,7.67831 18093,Lotzwil,1645,BE,214,CH,47.19135,7.79102 18112,Lützelflüh,1645,BE,214,CH,47.00757,7.69165 18107,Lyss,1645,BE,214,CH,47.0741,7.30655 18108,Lyssach,1645,BE,214,CH,47.06445,7.58228 18113,Madiswil,1645,BE,214,CH,47.16463,7.79858 18118,Malleray,1645,BE,214,CH,47.23839,7.27286 18129,Matten,1645,BE,214,CH,46.67833,7.86889 18142,Meinisberg,1645,BE,214,CH,47.15965,7.34801 18143,Meiringen,1645,BE,214,CH,46.72709,8.1872 18146,Melchnau,1645,BE,214,CH,47.18213,7.85128 18175,Moutier,1645,BE,214,CH,47.27818,7.36951 18195,Mühleberg,1645,BE,214,CH,46.95466,7.26102 18197,Mühlethurnen,1645,BE,214,CH,46.81345,7.50881 18199,Münchenbuchsee,1645,BE,214,CH,47.02175,7.45036 18201,Münchenwiler,1645,BE,214,CH,46.91334,7.12556 18204,Münsingen,1645,BE,214,CH,46.87298,7.561 18206,Müntschemier,1645,BE,214,CH,46.99548,7.14626 18183,Muri,1645,BE,214,CH,46.93122,7.48658 18219,Nidau,1645,BE,214,CH,47.12545,7.24033 18220,Niederbipp,1645,BE,214,CH,47.27175,7.69583 18239,Oberaargau,1645,BE,214,CH,47.19202,7.74553 18240,Oberbipp,1645,BE,214,CH,47.2607,7.66359 18242,Oberburg,1645,BE,214,CH,47.03665,7.62745 18243,Oberdiessbach,1645,BE,214,CH,46.84117,7.6173 18267,Obersimmental-Saanen District,1645,BE,214,CH,46.47932,7.35803 18289,Orpund,1645,BE,214,CH,47.13891,7.30775 18291,Orvin,1645,BE,214,CH,47.16068,7.21368 18332,Péry,1645,BE,214,CH,47.19398,7.24913 18314,Pieterlen,1645,BE,214,CH,47.17501,7.33791 18334,Radelfingen,1645,BE,214,CH,47.02146,7.27178 18343,Reconvilier,1645,BE,214,CH,47.23431,7.22239 18376,Riggisberg,1645,BE,214,CH,46.81028,7.48014 18377,Ringgenberg,1645,BE,214,CH,46.70114,7.89445 18382,Roggwil,1645,BE,214,CH,47.24119,7.82141 18385,Rohrbach,1645,BE,214,CH,47.13521,7.81334 18396,Rubigen,1645,BE,214,CH,46.89868,7.5446 18404,Rüderswil,1645,BE,214,CH,46.98374,7.72167 18405,Rüeggisberg,1645,BE,214,CH,46.82216,7.4389 18408,Rüschegg,1645,BE,214,CH,46.77977,7.39167 18415,Saanen,1645,BE,214,CH,46.48945,7.26003 18425,Saint-Imier,1645,BE,214,CH,47.15284,6.99692 18443,Sankt Stephan,1645,BE,214,CH,46.50827,7.39559 18488,Schüpfen,1645,BE,214,CH,47.03661,7.37723 18491,Seeberg,1645,BE,214,CH,47.15585,7.66567 18493,Seedorf,1645,BE,214,CH,47.03445,7.31249 18494,Seeland District,1645,BE,214,CH,47.06635,7.26333 18502,Seftigen,1645,BE,214,CH,46.78765,7.53937 18519,Signau,1645,BE,214,CH,46.91944,7.72418 18520,Sigriswil,1645,BE,214,CH,46.71656,7.71335 18533,Spiez,1645,BE,214,CH,46.68473,7.69111 18550,Steffisburg,1645,BE,214,CH,46.77807,7.63249 18558,Stettlen,1645,BE,214,CH,46.95835,7.52508 18566,Sumiswald,1645,BE,214,CH,47.02747,7.74526 18617,Täuffelen,1645,BE,214,CH,47.0663,7.19883 18576,Tavannes,1645,BE,214,CH,47.22079,7.19759 18590,Thierachern,1645,BE,214,CH,46.75319,7.57442 18591,Thun,1645,BE,214,CH,46.75118,7.62166 18592,Thun District,1645,BE,214,CH,46.7629,7.62503 18597,Toffen,1645,BE,214,CH,46.86031,7.49216 18598,Trachselwald,1645,BE,214,CH,47.01699,7.73639 18599,Tramelan,1645,BE,214,CH,47.22298,7.10287 18608,Trub,1645,BE,214,CH,46.94168,7.87996 18609,Trubschachen,1645,BE,214,CH,46.92228,7.8452 18626,Uetendorf,1645,BE,214,CH,46.77392,7.57251 18635,Unterseen,1645,BE,214,CH,46.6853,7.84722 18644,Urtenen,1645,BE,214,CH,47.02667,7.50081 18651,Uttigen,1645,BE,214,CH,46.79435,7.57789 18653,Utzenstorf,1645,BE,214,CH,47.13248,7.55355 18663,Vechigen,1645,BE,214,CH,46.94616,7.56065 18714,Walkringen,1645,BE,214,CH,46.94856,7.6204 18723,Wangen an der Aare,1645,BE,214,CH,47.23208,7.65253 18724,Wattenwil,1645,BE,214,CH,46.76973,7.50835 18744,Wichtrach,1645,BE,214,CH,46.8501,7.57748 18745,Wiedlisbach,1645,BE,214,CH,47.25194,7.6461 18752,Wilderswil,1645,BE,214,CH,46.66369,7.86175 18756,Wimmis,1645,BE,214,CH,46.67587,7.63972 18762,Wohlen,1645,BE,214,CH,46.97118,7.35685 18768,Worb,1645,BE,214,CH,46.92984,7.56306 18769,Worben,1645,BE,214,CH,47.10279,7.29518 18770,Wynau,1645,BE,214,CH,47.2557,7.81626 18771,Wynigen,1645,BE,214,CH,47.10586,7.66681 18772,Wyssachen,1645,BE,214,CH,47.07851,7.82922 18808,Zäziwil,1645,BE,214,CH,46.90196,7.66185 18798,Zollikofen,1645,BE,214,CH,46.99905,7.45809 18806,Zweisimmen,1645,BE,214,CH,46.55539,7.37302 17390,Alterswil,1640,FR,214,CH,46.79587,7.25877 17415,Attalens,1640,FR,214,CH,46.50555,6.85039 17426,Avry-sur-Matran,1640,FR,214,CH,46.78753,7.06735 17440,Bas-Vully,1640,FR,214,CH,46.96194,7.11251 17450,Belfaux,1640,FR,214,CH,46.82171,7.10674 17596,Bösingen,1640,FR,214,CH,46.89229,7.2277 17566,Broc,1640,FR,214,CH,46.60513,7.09891 17568,Broye District,1640,FR,214,CH,46.82212,6.90249 17581,Bulle,1640,FR,214,CH,46.61797,7.0569 17627,Charmey,1640,FR,214,CH,46.61957,7.16486 17641,Châtel-Saint-Denis,1640,FR,214,CH,46.52691,6.90083 17654,Corminboeuf,1640,FR,214,CH,46.81029,7.10535 17661,Courgevaux,1640,FR,214,CH,46.90648,7.11215 17671,Cugy,1640,FR,214,CH,46.81479,6.88888 17702,Domdidier,1640,FR,214,CH,46.86716,7.01337 17714,Düdingen,1640,FR,214,CH,46.84916,7.1915 17723,Ecublens,1640,FR,214,CH,46.60735,6.80895 17757,Ependes,1640,FR,214,CH,46.75368,7.14609 17774,Estavayer-le-Lac,1640,FR,214,CH,46.84876,6.8465 17790,Flamatt,1640,FR,214,CH,46.88994,7.32204 17809,Fribourg,1640,FR,214,CH,46.80237,7.15128 17832,Giffers,1640,FR,214,CH,46.7623,7.20845 17837,Givisiez,1640,FR,214,CH,46.81201,7.12639 17845,Glâne District,1640,FR,214,CH,46.66667,6.91667 17871,Grolley,1640,FR,214,CH,46.8336,7.07116 17876,Gruyère District,1640,FR,214,CH,46.60753,7.10741 17877,Gruyères,1640,FR,214,CH,46.58338,7.08207 17904,Heitenried,1640,FR,214,CH,46.82762,7.29944 17974,Kerzers,1640,FR,214,CH,46.97586,7.1957 18025,La Roche,1640,FR,214,CH,46.6962,7.13721 18028,La Tour-de-Trême,1640,FR,214,CH,46.61061,7.06496 18031,Lake District,1640,FR,214,CH,46.91016,7.14088 18122,Marly,1640,FR,214,CH,46.77611,7.16459 18123,Marsens,1640,FR,214,CH,46.65644,7.05948 18190,Mézières,1640,FR,214,CH,46.67958,6.9263 18184,Murten/Morat,1640,FR,214,CH,46.92827,7.11715 18265,Oberschrot,1640,FR,214,CH,46.74126,7.28149 18315,Plaffeien,1640,FR,214,CH,46.74198,7.28666 18323,Praroman,1640,FR,214,CH,46.75145,7.17778 18342,Rechthalten,1640,FR,214,CH,46.76766,7.24028 18368,Riaz,1640,FR,214,CH,46.64224,7.06183 18389,Romont,1640,FR,214,CH,46.69652,6.91898 18398,Rue,1640,FR,214,CH,46.61916,6.82225 18569,Sâles,1640,FR,214,CH,46.63473,6.97336 18437,Sankt Antoni,1640,FR,214,CH,46.82207,7.26091 18445,Sarine District,1640,FR,214,CH,46.78435,7.09993 18473,Schmitten,1640,FR,214,CH,46.8575,7.25031 18510,Sense District,1640,FR,214,CH,46.80132,7.26028 18570,Tafers,1640,FR,214,CH,46.81483,7.21852 18601,Treyvaux,1640,FR,214,CH,46.72796,7.13769 18623,Ueberstorf,1640,FR,214,CH,46.86587,7.30998 18674,Veveyse District,1640,FR,214,CH,46.55083,6.91085 18679,Villars-sur-Glâne,1640,FR,214,CH,46.79054,7.11717 18681,Villaz-Saint-Pierre,1640,FR,214,CH,46.72074,6.95638 18695,Vuadens,1640,FR,214,CH,46.61545,7.01732 17383,Aire-la-Ville,1647,GE,214,CH,46.19057,6.04287 17399,Anières,1647,GE,214,CH,46.27673,6.22204 17451,Bellevue,1647,GE,214,CH,46.25739,6.15475 17464,Bernex,1647,GE,214,CH,46.1765,6.07544 17612,Carouge,1647,GE,214,CH,46.18096,6.13921 17625,Chancy,1647,GE,214,CH,46.15003,5.97153 17643,Chêne-Bougeries,1647,GE,214,CH,46.19843,6.18642 17644,Chêne-Bourg,1647,GE,214,CH,46.19534,6.19406 17649,Confignon,1647,GE,214,CH,46.17341,6.08437 17656,Corsier,1647,GE,214,CH,46.26297,6.22461 17676,Dardagny,1647,GE,214,CH,46.19564,5.99497 17827,Genève,1647,GE,214,CH,46.20222,6.14569 17965,Jussy,1647,GE,214,CH,46.2359,6.26701 18032,Lancy,1647,GE,214,CH,46.18981,6.11441 18055,Le Grand-Saconnex,1647,GE,214,CH,46.23188,6.12091 18068,Les Avanchets,1647,GE,214,CH,46.22168,6.10814 18141,Meinier,1647,GE,214,CH,46.24706,6.23423 18158,Meyrin,1647,GE,214,CH,46.23424,6.08025 18284,Onex,1647,GE,214,CH,46.18396,6.10237 18316,Plan-les-Ouates,1647,GE,214,CH,46.16789,6.11664 18330,Puplinge,1647,GE,214,CH,46.21043,6.23114 18448,Satigny,1647,GE,214,CH,46.21462,6.03553 18595,Thônex,1647,GE,214,CH,46.18815,6.19904 18606,Troinex,1647,GE,214,CH,46.16313,6.14745 18661,Vandœuvres,1647,GE,214,CH,46.22179,6.20285 18670,Vernier,1647,GE,214,CH,46.21702,6.08497 18672,Versoix,1647,GE,214,CH,46.28382,6.16214 18676,Veyrier,1647,GE,214,CH,46.16699,6.18436 17385,Alle,1658,JU,214,CH,47.42542,7.13018 17442,Bassecourt,1658,JU,214,CH,47.33808,7.24373 17548,Boncourt,1658,JU,214,CH,47.49493,7.01297 17659,Courfaivre,1658,JU,214,CH,47.33461,7.28186 17660,Courgenay,1658,JU,214,CH,47.40483,7.12522 17662,Courrendlin,1658,JU,214,CH,47.33853,7.37243 17663,Courroux,1658,JU,214,CH,47.36069,7.37371 17666,Courtételle,1658,JU,214,CH,47.34074,7.31827 17680,Delémont,1658,JU,214,CH,47.36493,7.34453 17681,Delémont District,1658,JU,214,CH,47.35434,7.33053 17799,Fontenais,1658,JU,214,CH,47.40292,7.08108 17801,Franches-Montagnes District,1658,JU,214,CH,47.24935,7.04562 17844,Glovelier,1658,JU,214,CH,47.33534,7.20556 18060,Le Noirmont,1658,JU,214,CH,47.22464,6.95784 18069,Les Bois,1658,JU,214,CH,47.17715,6.90498 18071,Les Breuleux,1658,JU,214,CH,47.21099,7.00792 18319,Porrentruy,1658,JU,214,CH,47.41728,7.07573 18320,Porrentruy District,1658,JU,214,CH,47.41475,7.07638 18420,Saignelégier,1658,JU,214,CH,47.25619,6.99648 18677,Vicques,1658,JU,214,CH,47.35,7.41342 17363,Adligenswil,1663,LU,214,CH,47.06521,8.36124 17391,Altishofen,1663,LU,214,CH,47.19916,7.96964 17437,Ballwil,1663,LU,214,CH,47.15371,8.32233 17466,Beromünster,1663,LU,214,CH,47.20612,8.19265 17578,Buchrain,1663,LU,214,CH,47.09625,8.34729 17604,Büron,1663,LU,214,CH,47.21192,8.0942 17587,Buttisholz,1663,LU,214,CH,47.11442,8.09425 17674,Dagmersellen,1663,LU,214,CH,47.21405,7.98519 17718,Ebikon,1663,LU,214,CH,47.07937,8.34041 17735,Eich,1663,LU,214,CH,47.15116,8.16695 17746,Emmen,1663,LU,214,CH,47.07819,8.27331 17753,Entlebuch,1663,LU,214,CH,46.99559,8.06354 17754,Entlebuch District,1663,LU,214,CH,46.9259,8.01427 17772,Escholzmatt,1663,LU,214,CH,46.9135,7.93426 17776,Ettiswil,1663,LU,214,CH,47.15031,8.01759 17797,Flühli,1663,LU,214,CH,46.88391,8.01558 17831,Geuensee,1663,LU,214,CH,47.1997,8.10689 17875,Grosswangen,1663,LU,214,CH,47.1331,8.05041 17887,Gunzwil,1663,LU,214,CH,47.21072,8.17932 17893,Hasle,1663,LU,214,CH,46.97787,8.05326 17912,Hildisrieden,1663,LU,214,CH,47.15068,8.22582 17920,Hitzkirch,1663,LU,214,CH,47.22403,8.26425 17921,Hochdorf,1663,LU,214,CH,47.16841,8.29179 17922,Hochdorf District,1663,LU,214,CH,47.17062,8.28702 17926,Hohenrain,1663,LU,214,CH,47.18083,8.31802 17935,Horw,1663,LU,214,CH,47.01692,8.30956 17955,Inwil,1663,LU,214,CH,47.1253,8.34885 17998,Knutwil,1663,LU,214,CH,47.19953,8.07315 18008,Kriens,1663,LU,214,CH,47.0311,8.28547 18087,Littau,1663,LU,214,CH,47.05,8.26274 18095,Lucerne-Land District,1663,LU,214,CH,47.04046,8.29271 18096,Lucerne-Stadt District,1663,LU,214,CH,47.05334,8.31063 18103,Luthern,1663,LU,214,CH,47.05753,7.91692 18106,Luzern,1663,LU,214,CH,47.05048,8.30635 18119,Malters,1663,LU,214,CH,47.03628,8.18193 18136,Mauensee,1663,LU,214,CH,47.16703,8.06793 18138,Meggen,1663,LU,214,CH,47.04691,8.37467 18139,Meierskappel,1663,LU,214,CH,47.1247,8.44274 18153,Menznau,1663,LU,214,CH,47.08364,8.03971 18208,Nebikon,1663,LU,214,CH,47.19185,7.97769 18214,Neudorf,1663,LU,214,CH,47.17699,8.20911 18216,Neuenkirch,1663,LU,214,CH,47.09989,8.20416 18230,Nottwil,1663,LU,214,CH,47.13469,8.13774 18256,Oberkirch,1663,LU,214,CH,47.15642,8.11567 18306,Pfaffnau,1663,LU,214,CH,47.22772,7.89719 18361,Reiden,1663,LU,214,CH,47.24719,7.97135 18402,Römerswil,1663,LU,214,CH,47.16881,8.24528 18390,Root,1663,LU,214,CH,47.11458,8.39021 18401,Ruswil,1663,LU,214,CH,47.08425,8.12645 18459,Schenkon,1663,LU,214,CH,47.17765,8.13204 18486,Schötz,1663,LU,214,CH,47.16896,7.9887 18489,Schüpfheim,1663,LU,214,CH,46.95161,8.01723 18476,Schwarzenberg,1663,LU,214,CH,47.01705,8.17261 18508,Sempach,1663,LU,214,CH,47.13577,8.19149 18567,Sursee,1663,LU,214,CH,47.17088,8.11113 18568,Sursee District,1663,LU,214,CH,47.15591,8.13704 18602,Triengen,1663,LU,214,CH,47.23573,8.07652 18622,Udligenswil,1663,LU,214,CH,47.09005,8.40335 18690,Vitznau,1663,LU,214,CH,47.01014,8.4842 18726,Wauwil,1663,LU,214,CH,47.18457,8.021 18729,Weggis,1663,LU,214,CH,47.03208,8.43219 18735,Werthenstein,1663,LU,214,CH,47.05578,8.10182 18748,Wikon,1663,LU,214,CH,47.26339,7.96801 18754,Willisau,1663,LU,214,CH,47.12183,7.99418 18755,Willisau District,1663,LU,214,CH,47.14097,7.95933 18766,Wolhusen,1663,LU,214,CH,47.05983,8.07389 18792,Zell,1663,LU,214,CH,47.13673,7.92495 17423,Auvernier,1659,NE,214,CH,46.97545,6.87903 17469,Bevaix,1659,NE,214,CH,46.92958,6.8147 17554,Boudry,1659,NE,214,CH,46.94991,6.83757 17555,Boudry District,1659,NE,214,CH,46.94594,6.82842 17619,Cernier,1659,NE,214,CH,47.05878,6.9004 17642,Chézard-Saint-Martin,1659,NE,214,CH,47.06629,6.93332 17655,Cornaux,1659,NE,214,CH,47.0396,7.01872 17657,Cortaillod,1659,NE,214,CH,46.94306,6.8444 17667,Couvet,1659,NE,214,CH,46.92525,6.6327 17701,Dombresson,1659,NE,214,CH,47.07192,6.9592 17792,Fleurier,1659,NE,214,CH,46.90224,6.58253 17798,Fontainemelon,1659,NE,214,CH,47.05495,6.8868 17855,Gorgier,1659,NE,214,CH,46.90143,6.77985 17861,Grand-Savagnier,1659,NE,214,CH,47.05101,6.95489 18021,La Chaux-de-Fonds,1659,NE,214,CH,47.09993,6.82586 18022,La Chaux-de-Fonds District,1659,NE,214,CH,47.12159,6.84064 18056,Le Landeron,1659,NE,214,CH,47.05702,7.07052 18057,Le Locle,1659,NE,214,CH,47.05619,6.74913 18058,Le Locle District,1659,NE,214,CH,47.01927,6.69635 18070,Les Brenets,1659,NE,214,CH,47.06774,6.70478 18072,Les Geneveys-sur-Coffrane,1659,NE,214,CH,47.01528,6.8513 18073,Les Ponts-de-Martel,1659,NE,214,CH,46.99735,6.73059 18121,Marin-Epagnier,1659,NE,214,CH,47.01017,6.99941 18212,Neuchâtel,1659,NE,214,CH,46.99179,6.931 18213,Neuchâtel District,1659,NE,214,CH,47.01799,6.99337 18304,Peseux,1659,NE,214,CH,46.98704,6.88903 18422,Saint-Aubin-Sauges,1659,NE,214,CH,46.89419,6.77251 18423,Saint-Blaise,1659,NE,214,CH,47.01511,6.98832 18600,Travers,1659,NE,214,CH,46.94018,6.67595 18656,Val-de-Ruz District,1659,NE,214,CH,47.04008,6.90829 18657,Val-de-Travers District,1659,NE,214,CH,46.90357,6.5631 17461,Beringen,1654,SH,214,CH,47.69763,8.57431 17502,Bezirk Oberklettgau,1654,SH,214,CH,47.69893,8.51774 17505,Bezirk Reiat,1654,SH,214,CH,47.74752,8.70821 17507,Bezirk Schaffhausen,1654,SH,214,CH,47.6944,8.63525 17508,Bezirk Schleitheim,1654,SH,214,CH,47.75,8.51111 17512,Bezirk Stein,1654,SH,214,CH,47.66429,8.84683 17515,Bezirk Unterklettgau,1654,SH,214,CH,47.68,8.46333 17892,Hallau,1654,SH,214,CH,47.69648,8.45827 18110,Löhningen,1654,SH,214,CH,47.70121,8.55236 18217,Neuhausen,1654,SH,214,CH,47.68579,8.61474 18218,Neunkirch,1654,SH,214,CH,47.69012,8.49981 18336,Ramsen,1654,SH,214,CH,47.70797,8.80949 18455,Schaffhausen,1654,SH,214,CH,47.69732,8.63493 18464,Schleitheim,1654,SH,214,CH,47.74818,8.48213 18552,Stein am Rhein,1654,SH,214,CH,47.65933,8.85964 18556,Stetten,1654,SH,214,CH,47.74025,8.66298 18588,Thayngen,1654,SH,214,CH,47.74717,8.70724 18751,Wilchingen,1654,SH,214,CH,47.66745,8.46774 17438,Balsthal,1662,SO,214,CH,47.31613,7.69318 17468,Bettlach,1662,SO,214,CH,47.20062,7.42405 17478,Bezirk Bucheggberg,1662,SO,214,CH,47.13205,7.47885 17482,Bezirk Dorneck,1662,SO,214,CH,47.48032,7.61816 17485,Bezirk Gäu,1662,SO,214,CH,47.29606,7.77503 17486,Bezirk Gösgen,1662,SO,214,CH,47.37758,7.9203 17495,Bezirk Lebern,1662,SO,214,CH,47.21798,7.48053 17503,Bezirk Olten,1662,SO,214,CH,47.34426,7.90755 17511,Bezirk Solothurn,1662,SO,214,CH,47.20818,7.53084 17513,Bezirk Thal,1662,SO,214,CH,47.31095,7.63592 17514,Bezirk Thierstein,1662,SO,214,CH,47.38333,7.55 17519,Bezirk Wasseramt,1662,SO,214,CH,47.18911,7.59157 17525,Biberist,1662,SO,214,CH,47.18009,7.56246 17557,Breitenbach,1662,SO,214,CH,47.40668,7.54554 17605,Büsserach,1662,SO,214,CH,47.39415,7.54117 17679,Deitingen,1662,SO,214,CH,47.21515,7.6188 17683,Derendingen,1662,SO,214,CH,47.1985,7.58844 17704,Dornach,1662,SO,214,CH,47.48038,7.61644 17728,Egerkingen,1662,SO,214,CH,47.31957,7.78424 17765,Erlinsbach,1662,SO,214,CH,47.39753,8.00797 17814,Fulenbach,1662,SO,214,CH,47.27103,7.83136 17828,Gerlafingen,1662,SO,214,CH,47.17087,7.57249 17868,Grenchen,1662,SO,214,CH,47.1921,7.39586 17886,Gunzgen,1662,SO,214,CH,47.31375,7.83102 17937,Hägendorf,1662,SO,214,CH,47.33497,7.84133 17914,Himmelried,1662,SO,214,CH,47.42136,7.59985 17924,Hochwald,1662,SO,214,CH,47.45389,7.64459 17984,Kleinlützel,1662,SO,214,CH,47.42518,7.41607 18007,Kriegstetten,1662,SO,214,CH,47.17449,7.59799 18035,Langendorf,1662,SO,214,CH,47.21974,7.51469 18046,Laupersdorf,1662,SO,214,CH,47.3126,7.65465 18092,Lostorf,1662,SO,214,CH,47.38372,7.94655 18102,Luterbach,1662,SO,214,CH,47.21426,7.58463 18134,Matzendorf,1662,SO,214,CH,47.30374,7.6282 18156,Messen,1662,SO,214,CH,47.09155,7.44528 18224,Niedergösgen,1662,SO,214,CH,47.37157,7.98837 18232,Nunningen,1662,SO,214,CH,47.3941,7.61951 18241,Oberbuchsiten,1662,SO,214,CH,47.31334,7.76836 18254,Obergösgen,1662,SO,214,CH,47.36538,7.95173 18279,Oensingen,1662,SO,214,CH,47.28764,7.71612 18283,Olten,1662,SO,214,CH,47.34999,7.90329 18375,Riedholz,1662,SO,214,CH,47.23158,7.56829 18381,Rodersdorf,1662,SO,214,CH,47.48082,7.45767 18384,Rohr,1662,SO,214,CH,47.41029,7.95333 18485,Schönenwerd,1662,SO,214,CH,47.3691,8.00167 18506,Selzach,1662,SO,214,CH,47.20531,7.45521 18528,Solothurn,1662,SO,214,CH,47.20791,7.53714 18561,Subingen,1662,SO,214,CH,47.19852,7.61949 18603,Trimbach,1662,SO,214,CH,47.36561,7.8868 18721,Wangen,1662,SO,214,CH,47.34365,7.86982 18734,Welschenrohr,1662,SO,214,CH,47.28052,7.52664 18765,Wolfwil,1662,SO,214,CH,47.26871,7.79652 18800,Zuchwil,1662,SO,214,CH,47.20173,7.56649 17393,Altstätten,1644,SG,214,CH,47.37766,9.54746 17394,Amden,1644,SG,214,CH,47.14888,9.14233 17398,Andwil,1644,SG,214,CH,47.43855,9.27436 17419,Au,1644,SG,214,CH,47.43093,9.63448 17430,Bad Ragaz,1644,SG,214,CH,47.00601,9.50266 17435,Balgach,1644,SG,214,CH,47.40556,9.60702 17458,Benken,1644,SG,214,CH,47.19942,9.00735 17567,Bronschhofen,1644,SG,214,CH,47.47835,9.03454 17580,Buchs,1644,SG,214,CH,47.16743,9.47794 17606,Bütschwil,1644,SG,214,CH,47.36022,9.07213 17678,Degersheim,1644,SG,214,CH,47.37429,9.20019 17687,Diepoldsau,1644,SG,214,CH,47.386,9.65558 17720,Ebnat-Kappel,1644,SG,214,CH,47.26195,9.12473 17730,Eggersriet,1644,SG,214,CH,47.44202,9.46901 17736,Eichberg,1644,SG,214,CH,47.34374,9.5314 17769,Eschenbach,1644,SG,214,CH,47.23981,8.92156 17791,Flawil,1644,SG,214,CH,47.41301,9.18324 17794,Flums,1644,SG,214,CH,47.09058,9.34301 17821,Gams,1644,SG,214,CH,47.20429,9.44172 17822,Ganterschwil,1644,SG,214,CH,47.38103,9.09239 17847,Goldach,1644,SG,214,CH,47.47401,9.46711 17849,Goldingen,1644,SG,214,CH,47.26477,8.96167 17850,Gommiswald,1644,SG,214,CH,47.23128,9.02355 17856,Gossau,1644,SG,214,CH,47.41551,9.25482 17859,Grabs,1644,SG,214,CH,47.18248,9.44395 17890,Haag (Rheintal),1644,SG,214,CH,47.20989,9.48931 17938,Häggenschwil,1644,SG,214,CH,47.49462,9.34487 17934,Horn,1644,SG,214,CH,47.49425,9.46246 17959,Jona,1644,SG,214,CH,47.22983,8.83884 17962,Jonschwil,1644,SG,214,CH,47.42402,9.08689 17969,Kaltbrunn,1644,SG,214,CH,47.21367,9.0259 17980,Kirchberg,1644,SG,214,CH,47.41159,9.0402 18009,Krummenau,1644,SG,214,CH,47.24755,9.17064 18081,Lichtensteig,1644,SG,214,CH,47.32381,9.08758 18111,Lütisburg,1644,SG,214,CH,47.39451,9.08312 18160,Mogelsberg,1644,SG,214,CH,47.36222,9.13541 18194,Mörschwil,1644,SG,214,CH,47.47097,9.42278 18173,Mosnang,1644,SG,214,CH,47.36252,9.04296 18178,Muolen,1644,SG,214,CH,47.52102,9.32484 18221,Niederbüren,1644,SG,214,CH,47.46547,9.20568 18226,Niederhelfenschwil,1644,SG,214,CH,47.47487,9.18543 18255,Oberhelfenschwil,1644,SG,214,CH,47.35673,9.11076 18262,Oberriet,1644,SG,214,CH,47.32088,9.56808 18269,Oberuzwil,1644,SG,214,CH,47.43076,9.12724 18333,Quarten,1644,SG,214,CH,47.107,9.24199 18338,Rapperswil,1644,SG,214,CH,47.22557,8.82228 18341,Rebstein,1644,SG,214,CH,47.39812,9.58503 18365,Rheineck,1644,SG,214,CH,47.4663,9.59028 18392,Rorschach,1644,SG,214,CH,47.478,9.4903 18410,Rüthi,1644,SG,214,CH,47.2948,9.53857 18438,Sankt Gallen,1644,SG,214,CH,47.42391,9.37477 18439,Sankt Gallenkappel,1644,SG,214,CH,47.24368,8.96438 18440,Sankt Margrethen,1644,SG,214,CH,47.45253,9.63741 18442,Sankt Peterzell,1644,SG,214,CH,47.31782,9.17599 18444,Sargans,1644,SG,214,CH,47.04896,9.44103 18482,Schänis,1644,SG,214,CH,47.15995,9.04549 18472,Schmerikon,1644,SG,214,CH,47.22538,8.94836 18509,Sennwald,1644,SG,214,CH,47.26063,9.50268 18515,Sevelen,1644,SG,214,CH,47.12213,9.48601 18581,Thal,1644,SG,214,CH,47.46677,9.56643 18654,Uznach,1644,SG,214,CH,47.22421,8.98263 18655,Uzwil,1644,SG,214,CH,47.43653,9.13422 18700,Wahlkreis Rheintal,1644,SG,214,CH,47.37769,9.57903 18701,Wahlkreis Rorschach,1644,SG,214,CH,47.46647,9.44246 18702,Wahlkreis Sarganserland,1644,SG,214,CH,47.05,9.43333 18703,Wahlkreis See-Gaster,1644,SG,214,CH,47.22459,9.0168 18704,Wahlkreis St. Gallen,1644,SG,214,CH,47.46342,9.39052 18705,Wahlkreis Toggenburg,1644,SG,214,CH,47.29453,9.17283 18706,Wahlkreis Werdenberg,1644,SG,214,CH,47.17743,9.46299 18707,Wahlkreis Wil,1644,SG,214,CH,47.42591,9.12451 18711,Waldkirch,1644,SG,214,CH,47.46859,9.28665 18713,Walenstadt,1644,SG,214,CH,47.12411,9.31194 18725,Wattwil,1644,SG,214,CH,47.29955,9.08657 18727,Weesen,1644,SG,214,CH,47.13447,9.09644 18749,Wil,1644,SG,214,CH,47.46152,9.04552 18753,Wildhaus,1644,SG,214,CH,47.20583,9.35402 18759,Wittenbach,1644,SG,214,CH,47.46108,9.38601 18805,Zuzwil,1644,SG,214,CH,47.47452,9.11196 17405,Ardon,1648,VS,214,CH,46.20951,7.26012 17427,Ayent,1648,VS,214,CH,46.28249,7.41028 17433,Bagnes,1648,VS,214,CH,46.08333,7.21667 17439,Baltschieder,1648,VS,214,CH,46.30888,7.8657 17441,Basse-Nendaz,1648,VS,214,CH,46.18993,7.31209 17561,Brig,1648,VS,214,CH,46.31667,7.98333 17562,Brig District,1648,VS,214,CH,46.28255,8.01185 17621,Chalais,1648,VS,214,CH,46.26758,7.51145 17623,Chamoson,1648,VS,214,CH,46.20275,7.22319 17624,Champéry,1648,VS,214,CH,46.17543,6.86903 17628,Charrat,1648,VS,214,CH,46.1249,7.13138 17632,Chermignon-d’en Haut,1648,VS,214,CH,46.28844,7.47487 17637,Chippis,1648,VS,214,CH,46.2802,7.53962 17646,Collombey,1648,VS,214,CH,46.27385,6.94789 17650,Conthey,1648,VS,214,CH,46.2237,7.30283 17651,Conthey District,1648,VS,214,CH,46.20485,7.27857 17755,Entremont District,1648,VS,214,CH,46.02099,7.2126 17778,Evionnaz,1648,VS,214,CH,46.18096,7.02232 17779,Evolène,1648,VS,214,CH,46.11422,7.49407 17788,Fiesch,1648,VS,214,CH,46.39981,8.13533 17815,Fully,1648,VS,214,CH,46.13851,7.11468 17820,Gampel,1648,VS,214,CH,46.31599,7.7421 17851,Goms District,1648,VS,214,CH,46.46161,8.2219 17879,Grächen,1648,VS,214,CH,46.19529,7.83745 17869,Grimisuat,1648,VS,214,CH,46.25938,7.38408 17881,Grône,1648,VS,214,CH,46.25288,7.45947 17941,Hérémence,1648,VS,214,CH,46.18032,7.40477 17940,Hérens District,1648,VS,214,CH,46.19407,7.42391 18065,Lens,1648,VS,214,CH,46.28298,7.44976 18074,Leuk,1648,VS,214,CH,46.31736,7.63412 18075,Leuk District,1648,VS,214,CH,46.31439,7.67291 18076,Leukerbad,1648,VS,214,CH,46.37943,7.62687 18080,Leytron,1648,VS,214,CH,46.1866,7.2078 18125,Martigny District,1648,VS,214,CH,46.12386,7.10354 18126,Martigny-Combe,1648,VS,214,CH,46.07817,7.05099 18127,Martigny-Ville,1648,VS,214,CH,46.10276,7.07245 18165,Montana,1648,VS,214,CH,46.31338,7.48839 18167,Monthey,1648,VS,214,CH,46.25451,6.95406 18168,Monthey District,1648,VS,214,CH,46.27043,6.90274 18207,Naters,1648,VS,214,CH,46.32536,7.98912 18290,Orsières,1648,VS,214,CH,46.02903,7.14437 18337,Randogne,1648,VS,214,CH,46.30952,7.50058 18339,Raron,1648,VS,214,CH,46.31196,7.80029 18340,Raron District,1648,VS,214,CH,46.3,7.8 18374,Riddes,1648,VS,214,CH,46.17276,7.2236 18416,Saas-Fee,1648,VS,214,CH,46.10805,7.92741 18417,Saas-Grund,1648,VS,214,CH,46.12281,7.93651 18421,Saillon,1648,VS,214,CH,46.17035,7.18771 18427,Saint-Léonard,1648,VS,214,CH,46.25152,7.41714 18428,Saint-Maurice,1648,VS,214,CH,46.21826,7.0032 18429,Saint-Maurice District,1648,VS,214,CH,46.15384,6.99823 18432,Salgesch,1648,VS,214,CH,46.31155,7.5712 18434,Salvan,1648,VS,214,CH,46.1189,7.02078 18441,Sankt Niklaus,1648,VS,214,CH,46.17717,7.80349 18452,Savièse,1648,VS,214,CH,46.25115,7.34558 18453,Saxon,1648,VS,214,CH,46.14937,7.17514 18517,Sierre,1648,VS,214,CH,46.29192,7.53559 18518,Sierre District,1648,VS,214,CH,46.27052,7.5157 18524,Sion District,1648,VS,214,CH,46.23343,7.34939 18527,Sitten,1648,VS,214,CH,46.22739,7.35559 18545,Stalden,1648,VS,214,CH,46.23341,7.87273 18573,Tanay,1648,VS,214,CH,46.34503,6.83041 18607,Troistorrents,1648,VS,214,CH,46.2289,6.91589 18615,Turtmann,1648,VS,214,CH,46.30028,7.702 18662,Varen,1648,VS,214,CH,46.3186,7.60743 18668,Verbier,1648,VS,214,CH,46.1002,7.22651 18669,Vernayaz,1648,VS,214,CH,46.13667,7.03906 18697,Vétroz,1648,VS,214,CH,46.22171,7.27858 18675,Vex,1648,VS,214,CH,46.21239,7.39826 18686,Vionnaz,1648,VS,214,CH,46.31101,6.90062 18687,Visp,1648,VS,214,CH,46.2937,7.88149 18688,Visp District,1648,VS,214,CH,46.17612,7.85609 18689,Visperterminen,1648,VS,214,CH,46.25899,7.90192 18694,Vouvry,1648,VS,214,CH,46.33746,6.8895 18793,Zermatt,1648,VS,214,CH,46.01998,7.74863 17381,Aigle,1651,VD,214,CH,46.3181,6.96457 17382,Aigle District,1651,VD,214,CH,46.30577,7.02974 17401,Apples,1651,VD,214,CH,46.55237,6.42889 17412,Arzier,1651,VD,214,CH,46.45962,6.20813 17422,Aubonne,1651,VD,214,CH,46.49514,6.39155 17425,Avenches,1651,VD,214,CH,46.88004,7.04071 17436,Ballens,1651,VD,214,CH,46.55485,6.3731 17446,Bavois,1651,VD,214,CH,46.68403,6.5671 17449,Begnins,1651,VD,214,CH,46.44152,6.24762 17455,Belmont-sur-Lausanne,1651,VD,214,CH,46.51891,6.67636 17465,Berolle,1651,VD,214,CH,46.55798,6.33551 17470,Bex,1651,VD,214,CH,46.24965,7.0098 17539,Bière,1651,VD,214,CH,46.53761,6.33362 17543,Blécherette,1651,VD,214,CH,46.53932,6.62227 17541,Blonay,1651,VD,214,CH,46.46778,6.89615 17551,Bottens,1651,VD,214,CH,46.61596,6.66149 17569,Broye-Vully District,1651,VD,214,CH,46.78082,6.90161 17586,Bussigny,1651,VD,214,CH,46.5511,6.55597 17616,Caux,1651,VD,214,CH,46.43241,6.93855 17626,Chardonne,1651,VD,214,CH,46.47676,6.8268 17640,Château-dOex,1651,VD,214,CH,46.47455,7.13155 17629,Chavannes,1651,VD,214,CH,46.53005,6.57068 17630,Chavannes-le-Veyron,1651,VD,214,CH,46.607,6.45086 17631,Chavornay,1651,VD,214,CH,46.70244,6.5694 17633,Cheseaux,1651,VD,214,CH,46.58624,6.60587 17634,Chevilly,1651,VD,214,CH,46.64272,6.47661 17635,Chexbres,1651,VD,214,CH,46.48208,6.77805 17647,Colombier,1651,VD,214,CH,46.55709,6.47284 17652,Coppet,1651,VD,214,CH,46.31682,6.19114 17658,Cossonay,1651,VD,214,CH,46.61443,6.50631 17668,Crissier,1651,VD,214,CH,46.54586,6.57567 17669,Cuarnens,1651,VD,214,CH,46.62545,6.43713 17672,Cully,1651,VD,214,CH,46.48892,6.72945 17721,Echallens,1651,VD,214,CH,46.6413,6.63317 17722,Ecublens,1651,VD,214,CH,46.52899,6.56261 17756,Epalinges,1651,VD,214,CH,46.54896,6.66831 17785,Ferreyres,1651,VD,214,CH,46.65804,6.4852 17800,Founex,1651,VD,214,CH,46.33277,6.19243 17811,Froideville,1651,VD,214,CH,46.60123,6.68085 17826,Genolier,1651,VD,214,CH,46.43537,6.21809 17833,Gimel,1651,VD,214,CH,46.50945,6.30736 17838,Gland,1651,VD,214,CH,46.42082,6.2701 17860,Grancy,1651,VD,214,CH,46.59214,6.46391 17862,Grandson,1651,VD,214,CH,46.80946,6.646 17872,Gros-de-Vaud District,1651,VD,214,CH,46.6518,6.65728 17878,Gryon,1651,VD,214,CH,46.27377,7.05975 17961,Jongny,1651,VD,214,CH,46.47883,6.84114 17964,Jura-Nord vaudois District,1651,VD,214,CH,46.72981,6.45429 18026,La Sarraz,1651,VD,214,CH,46.65863,6.51077 18027,La Tour-de-Peilz,1651,VD,214,CH,46.45312,6.85856 18048,Lausanne,1651,VD,214,CH,46.516,6.63282 18049,Lausanne District,1651,VD,214,CH,46.52131,6.63334 18052,Lavaux-Oron District,1651,VD,214,CH,46.53618,6.77086 18054,Le Chenit,1651,VD,214,CH,46.60688,6.23062 18059,Le Mont-sur-Lausanne,1651,VD,214,CH,46.55815,6.63145 18061,Le Vaud,1651,VD,214,CH,46.47753,6.23603 18079,Leysin,1651,VD,214,CH,46.34183,7.01151 18094,Lucens,1651,VD,214,CH,46.70854,6.83931 18104,Lutry,1651,VD,214,CH,46.50241,6.68647 18137,Mauraz,1651,VD,214,CH,46.60558,6.42074 18161,Mollens,1651,VD,214,CH,46.5776,6.3632 18164,Montagny,1651,VD,214,CH,46.79289,6.61222 18169,Montreux,1651,VD,214,CH,46.43301,6.91143 18171,Morges,1651,VD,214,CH,46.51127,6.49854 18172,Morges District,1651,VD,214,CH,46.53578,6.48662 18174,Moudon,1651,VD,214,CH,46.66758,6.79781 18233,Nyon,1651,VD,214,CH,46.38318,6.23955 18234,Nyon District,1651,VD,214,CH,46.42004,6.22177 18282,Ollon,1651,VD,214,CH,46.29524,6.99314 18286,Orbe,1651,VD,214,CH,46.72504,6.53069 18288,Oron-la-Ville,1651,VD,214,CH,46.57094,6.82557 18295,Ouest Lausannois District,1651,VD,214,CH,46.54589,6.56995 18296,Pailly,1651,VD,214,CH,46.70123,6.6754 18297,Palézieux,1651,VD,214,CH,46.54191,6.83989 18298,Pampigny,1651,VD,214,CH,46.58093,6.42941 18299,Paudex,1651,VD,214,CH,46.50548,6.66819 18300,Payerne,1651,VD,214,CH,46.82192,6.93817 18301,Penthalaz,1651,VD,214,CH,46.61077,6.52519 18302,Penthéréaz,1651,VD,214,CH,46.68171,6.6039 18303,Perroy,1651,VD,214,CH,46.4669,6.35349 18317,Pompaples,1651,VD,214,CH,46.66699,6.50966 18322,Prangins,1651,VD,214,CH,46.39518,6.2496 18327,Préverenges,1651,VD,214,CH,46.51854,6.52682 18326,Prilly,1651,VD,214,CH,46.53698,6.60456 18328,Puidoux,1651,VD,214,CH,46.50093,6.78249 18329,Pully,1651,VD,214,CH,46.51027,6.66183 18364,Renens,1651,VD,214,CH,46.53989,6.5881 18380,Riviera-Pays-dEnhaut District,1651,VD,214,CH,46.46459,6.88499 18386,Rolle,1651,VD,214,CH,46.4582,6.33499 18387,Romanel-sur-Lausanne,1651,VD,214,CH,46.56403,6.60538 18424,Saint-Cergue,1651,VD,214,CH,46.4459,6.15737 18426,Saint-Livres,1651,VD,214,CH,46.50794,6.38753 18430,Saint-Prex,1651,VD,214,CH,46.47963,6.45992 18431,Sainte-Croix,1651,VD,214,CH,46.82203,6.50283 18450,Saubraz,1651,VD,214,CH,46.51606,6.33018 18451,Savigny,1651,VD,214,CH,46.53844,6.73222 18531,Sottens,1651,VD,214,CH,46.65521,6.74197 18611,Trélex,1651,VD,214,CH,46.41538,6.20813 18659,Vallorbe,1651,VD,214,CH,46.71256,6.37894 18673,Vevey,1651,VD,214,CH,46.46299,6.84345 18680,Villars-sur-Ollon,1651,VD,214,CH,46.29832,7.05631 18682,Villeneuve,1651,VD,214,CH,46.39869,6.92654 18696,Vuarrens,1651,VD,214,CH,46.68578,6.64793 18790,Yverdon-les-Bains,1651,VD,214,CH,46.77852,6.64115 18791,Yvonand,1651,VD,214,CH,46.80034,6.74249 17428,Baar,1646,ZG,214,CH,47.19625,8.52954 17622,Cham,1646,ZG,214,CH,47.18213,8.46358 17944,Hünenberg,1646,ZG,214,CH,47.17536,8.42497 18152,Menzingen,1646,ZG,214,CH,47.17764,8.59215 18395,Rotkreuz,1646,ZG,214,CH,47.14283,8.4314 18554,Steinhausen,1646,ZG,214,CH,47.1951,8.48581 18638,Unterägeri,1646,ZG,214,CH,47.13645,8.5853 18708,Walchwil,1646,ZG,214,CH,47.10169,8.51693 18801,Zug,1646,ZG,214,CH,47.17242,8.51745 17364,Adliswil,1656,ZH,214,CH,47.30997,8.52462 17365,Adliswil / Adliswil (Stadtkern),1656,ZH,214,CH,47.31128,8.52675 17366,Adliswil / Hündli-Zopf,1656,ZH,214,CH,47.31637,8.51888 17367,Adliswil / Oberleimbach,1656,ZH,214,CH,47.3202,8.51508 17368,Adliswil / Sonnenberg,1656,ZH,214,CH,47.30958,8.52055 17369,Adliswil / Sood,1656,ZH,214,CH,47.3187,8.52425 17370,Adliswil / Tal,1656,ZH,214,CH,47.31142,8.53446 17372,Aesch,1656,ZH,214,CH,47.3297,8.6541 17375,Affoltern / Hasenbüel,1656,ZH,214,CH,47.27324,8.45218 17376,Affoltern / Oberdorf,1656,ZH,214,CH,47.27852,8.45651 17377,Affoltern / Sonnenberg,1656,ZH,214,CH,47.28055,8.46008 17378,Affoltern / Unterdorf,1656,ZH,214,CH,47.28277,8.45409 17379,Affoltern am Albis,1656,ZH,214,CH,47.27743,8.45128 17396,Andelfingen,1656,ZH,214,CH,47.59447,8.67826 17418,Au,1656,ZH,214,CH,47.24185,8.64406 17420,Au / Mittel-Dorf,1656,ZH,214,CH,47.24303,8.64591 17421,Au / Unter-Dorf,1656,ZH,214,CH,47.2473,8.6327 17429,Bachenbülach,1656,ZH,214,CH,47.50317,8.54556 17591,Bäretswil,1656,ZH,214,CH,47.33709,8.85645 17443,Bassersdorf,1656,ZH,214,CH,47.44342,8.62851 17445,Bauma,1656,ZH,214,CH,47.36745,8.87905 17457,Benglen,1656,ZH,214,CH,47.36077,8.63687 17472,Bezirk Affoltern,1656,ZH,214,CH,47.27311,8.47444 17473,Bezirk Andelfingen,1656,ZH,214,CH,47.61328,8.68124 17479,Bezirk Bülach,1656,ZH,214,CH,47.49706,8.56764 17480,Bezirk Dielsdorf,1656,ZH,214,CH,47.47181,8.45631 17481,Bezirk Dietikon,1656,ZH,214,CH,47.38804,8.4426 17488,Bezirk Hinwil,1656,ZH,214,CH,47.29646,8.83431 17489,Bezirk Horgen,1656,ZH,214,CH,47.25767,8.59702 17499,Bezirk Meilen,1656,ZH,214,CH,47.2792,8.66259 17504,Bezirk Pfäffikon,1656,ZH,214,CH,47.40905,8.77208 17516,Bezirk Uster,1656,ZH,214,CH,47.34952,8.71353 17520,Bezirk Winterthur,1656,ZH,214,CH,47.50781,8.769 17523,Bezirk Zürich,1656,ZH,214,CH,47.3711,8.54323 17531,Binz,1656,ZH,214,CH,47.35635,8.62657 17532,Binzikon,1656,ZH,214,CH,47.27632,8.75851 17534,Birchwil,1656,ZH,214,CH,47.45431,8.63477 17535,Birmensdorf,1656,ZH,214,CH,47.35515,8.44256 17550,Bonstetten,1656,ZH,214,CH,47.31505,8.46836 17573,Brütten,1656,ZH,214,CH,47.47318,8.67569 17574,Brüttisellen,1656,ZH,214,CH,47.42173,8.63263 17576,Bubikon,1656,ZH,214,CH,47.26698,8.8179 17598,Bülach,1656,ZH,214,CH,47.52197,8.54049 17599,Bülach / Gstückt,1656,ZH,214,CH,47.52337,8.54879 17600,Bülach / Seematt,1656,ZH,214,CH,47.51716,8.54651 17601,Bülach / Soligänter,1656,ZH,214,CH,47.52632,8.54106 17673,Dachsen,1656,ZH,214,CH,47.66515,8.6179 17706,Dällikon / Dällikon (Dorf),1656,ZH,214,CH,47.43983,8.43813 17707,Dänikon,1656,ZH,214,CH,47.44674,8.40648 17685,Dielsdorf,1656,ZH,214,CH,47.48146,8.4585 17689,Dietikon,1656,ZH,214,CH,47.40165,8.40015 17690,Dietikon / Almend,1656,ZH,214,CH,47.40477,8.39168 17691,Dietikon / Guggenbühl,1656,ZH,214,CH,47.40009,8.40818 17692,Dietikon / Hofacker,1656,ZH,214,CH,47.39718,8.41609 17693,Dietikon / Kreuzacker,1656,ZH,214,CH,47.39919,8.40146 17694,Dietikon / Oberdorf,1656,ZH,214,CH,47.40065,8.39416 17695,Dietikon / Schönenwerd,1656,ZH,214,CH,47.39706,8.42576 17696,Dietikon / Vorstadt,1656,ZH,214,CH,47.40819,8.39719 17697,Dietlikon / Dietlikon (Dorf),1656,ZH,214,CH,47.41827,8.6188 17698,Dietlikon / Eichwiesen,1656,ZH,214,CH,47.4191,8.62078 17703,Dorf,1656,ZH,214,CH,47.239,8.73567 17709,Dübendorf,1656,ZH,214,CH,47.39724,8.61872 17710,Dübendorf / Kunklerstrasse,1656,ZH,214,CH,47.40109,8.62724 17711,Dübendorf / Sonnenberg,1656,ZH,214,CH,47.39469,8.63162 17712,Dübendorf / Vogelquartier,1656,ZH,214,CH,47.39502,8.61184 17713,Dübendorf / Wasserfurren,1656,ZH,214,CH,47.39352,8.6085 17715,Dürnten,1656,ZH,214,CH,47.27856,8.84156 17719,Ebmatingen,1656,ZH,214,CH,47.34987,8.64013 17724,Effretikon,1656,ZH,214,CH,47.42575,8.69094 17725,Effretikon / Rappenhalde-Bannhalde,1656,ZH,214,CH,47.42388,8.69653 17726,Effretikon / Rikon,1656,ZH,214,CH,47.43099,8.68624 17727,Effretikon / Watt,1656,ZH,214,CH,47.42797,8.69822 17729,Egg,1656,ZH,214,CH,47.29976,8.69032 17739,Elgg,1656,ZH,214,CH,47.49715,8.86523 17740,Elgg / Städtchen und Umgebung,1656,ZH,214,CH,47.49265,8.8668 17741,Elsau-Räterschen,1656,ZH,214,CH,47.50238,8.79874 17742,Elsau-Räterschen / Räterschen,1656,ZH,214,CH,47.49927,8.796 17743,Embrach,1656,ZH,214,CH,47.50561,8.59406 17744,Embrach / Embrach (Dorfkern),1656,ZH,214,CH,47.504,8.59477 17745,Embrach / Kellersacker,1656,ZH,214,CH,47.51455,8.59146 17761,Erlenbach,1656,ZH,214,CH,47.30298,8.59743 17762,Erlenbach / links des Dorfbachs oberhalb Bahnlinie,1656,ZH,214,CH,47.2995,8.60188 17763,Erlenbach / rechts des Dorfbachs oberhalb Bahnlinie,1656,ZH,214,CH,47.30658,8.60271 17773,Esslingen,1656,ZH,214,CH,47.28325,8.71038 17816,Fällanden,1656,ZH,214,CH,47.37169,8.63869 17781,Fehraltorf,1656,ZH,214,CH,47.38775,8.75149 17782,Feldmeilen,1656,ZH,214,CH,47.27873,8.62165 17786,Feuerthalen,1656,ZH,214,CH,47.69054,8.64357 17795,Flurlingen,1656,ZH,214,CH,47.6839,8.62995 17807,Freienstein,1656,ZH,214,CH,47.53307,8.58455 17823,Gattikon,1656,ZH,214,CH,47.28439,8.5483 17829,Geroldswil,1656,ZH,214,CH,47.42213,8.41085 17840,Glattbrugg,1656,ZH,214,CH,47.4313,8.56272 17841,Glattbrugg / Rohr/Platten-Balsberg,1656,ZH,214,CH,47.43721,8.56642 17842,Glattbrugg / Wydacker/Bettacker/Lättenwiesen,1656,ZH,214,CH,47.42908,8.56657 17843,Glattfelden,1656,ZH,214,CH,47.55871,8.50167 17846,Gockhausen,1656,ZH,214,CH,47.38098,8.59978 17857,Gossau,1656,ZH,214,CH,47.3051,8.75831 17864,Greifensee,1656,ZH,214,CH,47.36717,8.68115 17865,Greifensee / Müllerwis / Seilerwis,1656,ZH,214,CH,47.37042,8.68151 17866,Greifensee / Pfisterhölzli,1656,ZH,214,CH,47.3643,8.68979 17873,Grossacker/Opfikon,1656,ZH,214,CH,47.42696,8.57886 17883,Grüt,1656,ZH,214,CH,47.31151,8.78339 17888,Gutenswil,1656,ZH,214,CH,47.38387,8.71763 17891,Hadlikon,1656,ZH,214,CH,47.2875,8.85719 17896,Hausen am Albis / Hausen (Dorf),1656,ZH,214,CH,47.24496,8.53299 17897,Hedingen,1656,ZH,214,CH,47.29794,8.44833 17898,Hegnau,1656,ZH,214,CH,47.39227,8.66988 17899,Hegnau / Dammboden-Grindel,1656,ZH,214,CH,47.38713,8.66657 17900,Hegnau / Sunnebüel-Eich,1656,ZH,214,CH,47.39246,8.6791 17905,Henggart,1656,ZH,214,CH,47.56272,8.68215 17909,Herrliberg,1656,ZH,214,CH,47.29064,8.61464 17911,Hettlingen,1656,ZH,214,CH,47.5461,8.70532 17916,Hinteregg,1656,ZH,214,CH,47.30736,8.68339 17918,Hinwil,1656,ZH,214,CH,47.29426,8.84393 17919,Hittnau / Hittnau (Dorf),1656,ZH,214,CH,47.36334,8.82418 17923,Hochfelden,1656,ZH,214,CH,47.52262,8.51564 17925,Hofstetten,1656,ZH,214,CH,47.47778,8.50646 17927,Hombrechtikon,1656,ZH,214,CH,47.25298,8.77212 17929,Horgen,1656,ZH,214,CH,47.25983,8.59778 17930,Horgen / Allmend,1656,ZH,214,CH,47.24729,8.6066 17931,Horgen / Horgen (Dorfkern),1656,ZH,214,CH,47.25604,8.60159 17932,Horgen / Oberdorf,1656,ZH,214,CH,47.25837,8.59013 17933,Horgen / Scheller-Stockerstrasse,1656,ZH,214,CH,47.26584,8.5876 17943,Höri,1656,ZH,214,CH,47.50799,8.51203 17949,Illnau,1656,ZH,214,CH,47.4113,8.72125 17950,Illnau / Unter-Illnau,1656,ZH,214,CH,47.40787,8.72607 17975,Kilchberg,1656,ZH,214,CH,47.32438,8.54548 17976,Kilchberg / Bächler-Stocken,1656,ZH,214,CH,47.32728,8.53957 17977,Kilchberg / Kilchberg (Dorfkern),1656,ZH,214,CH,47.32012,8.54306 17979,Kindhausen / Kindhausen (Dorf),1656,ZH,214,CH,47.40644,8.68296 17983,Kleinandelfingen,1656,ZH,214,CH,47.60058,8.68362 17987,Kloten,1656,ZH,214,CH,47.45152,8.58491 17988,Kloten / Balsberg,1656,ZH,214,CH,47.44233,8.57496 17989,Kloten / Freienberg (Chanzler-Chlini Chaseren),1656,ZH,214,CH,47.46584,8.58145 17990,Kloten / Geissberg,1656,ZH,214,CH,47.45424,8.59066 17991,Kloten / Holberg,1656,ZH,214,CH,47.44642,8.57661 17992,Kloten / Horainli,1656,ZH,214,CH,47.45399,8.58306 17993,Kloten / Hostrass,1656,ZH,214,CH,47.45255,8.59464 17994,Kloten / Kloten (Zentrum),1656,ZH,214,CH,47.45134,8.58683 17995,Kloten / Rütlen,1656,ZH,214,CH,47.44726,8.58808 17996,Kloten / Spitz,1656,ZH,214,CH,47.44455,8.58724 17997,Knonau,1656,ZH,214,CH,47.2235,8.46197 18000,Kollbrunn,1656,ZH,214,CH,47.45793,8.78295 18001,Kollbrunn / Kollbrunn (Dorfkern),1656,ZH,214,CH,47.45748,8.77413 18013,Küsnacht,1656,ZH,214,CH,47.31805,8.58401 18014,Küsnacht / Dorf,1656,ZH,214,CH,47.31783,8.58303 18015,Küsnacht / Goldbach,1656,ZH,214,CH,47.32729,8.58077 18016,Küsnacht / Heslibach,1656,ZH,214,CH,47.31307,8.58849 18017,Küsnacht / Itschnach,1656,ZH,214,CH,47.32714,8.60068 18018,Küsnacht / Schiedhalden,1656,ZH,214,CH,47.32112,8.58881 18038,Langnau / Langnau (Dorf),1656,ZH,214,CH,47.28643,8.53627 18039,Langnau / Vitaquartier,1656,ZH,214,CH,47.29377,8.53758 18040,Langnau am Albis,1656,ZH,214,CH,47.28885,8.5411 18186,Männedorf,1656,ZH,214,CH,47.25686,8.69893 18187,Männedorf / Ausserfeld,1656,ZH,214,CH,47.24636,8.70608 18188,Männedorf / Dorfkern,1656,ZH,214,CH,47.25612,8.69161 18124,Marthalen,1656,ZH,214,CH,47.62913,8.65326 18130,Mattenbach (Kreis 7),1656,ZH,214,CH,47.48705,8.74681 18131,Mattenbach (Kreis 7) / Deutweg,1656,ZH,214,CH,47.49419,8.73948 18132,Mattenbach (Kreis 7) / Endliker,1656,ZH,214,CH,47.48821,8.74938 18133,Mattenbach (Kreis 7) / Gutschick,1656,ZH,214,CH,47.49104,8.75258 18140,Meilen,1656,ZH,214,CH,47.27232,8.64617 18157,Mettmenstetten,1656,ZH,214,CH,47.24529,8.46347 18192,Mönchaltorf,1656,ZH,214,CH,47.30958,8.72029 18193,Mönchaltorf / Dorf,1656,ZH,214,CH,47.30401,8.72211 18196,Mühlehalde,1656,ZH,214,CH,47.28306,8.53386 18236,Nänikon,1656,ZH,214,CH,47.36975,8.68894 18237,Nänikon / Nänikon (Dorfkern),1656,ZH,214,CH,47.37099,8.69254 18209,Neerach,1656,ZH,214,CH,47.51096,8.47099 18210,Neftenbach / Dorf Neftenbach,1656,ZH,214,CH,47.52764,8.6649 18222,Niederglatt,1656,ZH,214,CH,47.49066,8.49987 18223,Niederglatt / Niederglatt (Dorfkern),1656,ZH,214,CH,47.49065,8.50048 18225,Niederhasli,1656,ZH,214,CH,47.48012,8.48576 18238,Nürensdorf,1656,ZH,214,CH,47.44814,8.64908 18246,Oberengstringen,1656,ZH,214,CH,47.40841,8.46515 18247,Oberengstringen / Rauchacher,1656,ZH,214,CH,47.40919,8.45627 18248,Oberengstringen / Sonnenberg,1656,ZH,214,CH,47.41211,8.46055 18249,Oberengstringen / Zentrum,1656,ZH,214,CH,47.40711,8.46276 18251,Oberglatt,1656,ZH,214,CH,47.47576,8.51896 18252,Oberglatt / Bahnhofquartier,1656,ZH,214,CH,47.47143,8.51289 18253,Oberglatt / Oberglatt (Dorfkern),1656,ZH,214,CH,47.47596,8.51929 18258,Obermeilen,1656,ZH,214,CH,47.26574,8.65567 18259,Oberrieden,1656,ZH,214,CH,47.27444,8.57838 18260,Oberrieden / Berg,1656,ZH,214,CH,47.27628,8.57257 18261,Oberrieden / Mitte,1656,ZH,214,CH,47.27242,8.58021 18271,Oberwinterthur (Kreis 2),1656,ZH,214,CH,47.51692,8.76863 18272,Oberwinterthur (Kreis 2) / Guggenbühl,1656,ZH,214,CH,47.51339,8.75998 18273,Oberwinterthur (Kreis 2) / Hegi,1656,ZH,214,CH,47.50716,8.77057 18274,Oberwinterthur (Kreis 2) / Talacker,1656,ZH,214,CH,47.50596,8.7515 18275,Oberwinterthur (Kreis 2) / Zinzikon,1656,ZH,214,CH,47.5195,8.7564 18276,Obfelden,1656,ZH,214,CH,47.26413,8.4215 18277,Obfelden / Oberlunnern,1656,ZH,214,CH,47.26197,8.41588 18278,Obfelden / Toussen,1656,ZH,214,CH,47.26574,8.43013 18280,Oetwil,1656,ZH,214,CH,47.27049,8.72023 18285,Opfikon,1656,ZH,214,CH,47.43169,8.57588 18292,Otelfingen,1656,ZH,214,CH,47.46053,8.39141 18294,Ottenbach,1656,ZH,214,CH,47.28228,8.40432 18305,Pfaffhausen,1656,ZH,214,CH,47.36476,8.62375 18311,Pfäffikon,1656,ZH,214,CH,47.36453,8.79202 18312,Pfäffikon / Irgenhausen,1656,ZH,214,CH,47.3624,8.79265 18313,Pfäffikon / Pfäffikon (Dorfkern),1656,ZH,214,CH,47.36943,8.78309 18308,Pfungen,1656,ZH,214,CH,47.51394,8.6423 18335,Rafz,1656,ZH,214,CH,47.60438,8.54305 18344,Regensdorf,1656,ZH,214,CH,47.4341,8.46874 18345,Regensdorf / Feldblumen-Riedthofstrasse,1656,ZH,214,CH,47.43618,8.46659 18346,Regensdorf / Hofacher-Geeren,1656,ZH,214,CH,47.43525,8.4624 18347,Regensdorf / Obstgarten,1656,ZH,214,CH,47.42772,8.46566 18369,Richterswil,1656,ZH,214,CH,47.20622,8.69686 18370,Richterswil / Burghalde,1656,ZH,214,CH,47.20973,8.69133 18371,Richterswil / Dorfkern,1656,ZH,214,CH,47.20715,8.70607 18372,Richterswil / Richterswil (Dorfkern),1656,ZH,214,CH,47.20323,8.70516 18391,Rorbas,1656,ZH,214,CH,47.53092,8.57555 18406,Rümlang,1656,ZH,214,CH,47.45041,8.52993 18407,Rümlang / Rümlang (Dorfkern),1656,ZH,214,CH,47.4494,8.53255 18409,Rüschlikon,1656,ZH,214,CH,47.30688,8.55135 18400,Russikon,1656,ZH,214,CH,47.39669,8.77515 18411,Rüti,1656,ZH,214,CH,47.25603,8.85552 18412,Rüti / Dorfzentrum Südl. Teil,1656,ZH,214,CH,47.25368,8.85654 18413,Rüti / Oberdorf,1656,ZH,214,CH,47.25894,8.86512 18414,Rüti / Westlicher Dorfteil,1656,ZH,214,CH,47.25548,8.8449 18436,Samstagern,1656,ZH,214,CH,47.19167,8.68196 18454,Schachen,1656,ZH,214,CH,47.32419,8.47251 18465,Schlieren,1656,ZH,214,CH,47.39668,8.44763 18466,Schlieren / Boden,1656,ZH,214,CH,47.39721,8.45734 18467,Schlieren / Engstingerquartier,1656,ZH,214,CH,47.40338,8.44352 18468,Schlieren / Freiestrasse,1656,ZH,214,CH,47.39598,8.44202 18469,Schlieren / Kamp,1656,ZH,214,CH,47.39358,8.44453 18470,Schlieren / Spital,1656,ZH,214,CH,47.39489,8.43027 18471,Schlieren / Zentrum,1656,ZH,214,CH,47.39779,8.4477 18478,Schwerzenbach,1656,ZH,214,CH,47.38213,8.65727 18479,Schwerzenbach / Blatten,1656,ZH,214,CH,47.38308,8.64954 18480,Schwerzenbach / Chimli,1656,ZH,214,CH,47.38592,8.65888 18495,Seen (Kreis 3),1656,ZH,214,CH,47.47646,8.76996 18496,Seen (Kreis 3) / Büelwiesen,1656,ZH,214,CH,47.48446,8.76517 18497,Seen (Kreis 3) / Ganzenbühl,1656,ZH,214,CH,47.481,8.76249 18498,Seen (Kreis 3) / Oberseen,1656,ZH,214,CH,47.48205,8.77289 18499,Seen (Kreis 3) / Waldegg,1656,ZH,214,CH,47.48393,8.75586 18500,Seen (Kreis 3) / Waser,1656,ZH,214,CH,47.48913,8.76034 18503,Seglingen,1656,ZH,214,CH,47.57244,8.52093 18504,Sellenbüren,1656,ZH,214,CH,47.34361,8.48301 18512,Seuzach / Seuzach (Dorf),1656,ZH,214,CH,47.53545,8.73728 18513,Seuzach Dorf,1656,ZH,214,CH,47.5356,8.73209 18514,Seuzach Dorf / Breite-Weid,1656,ZH,214,CH,47.53345,8.73415 18529,Sonnhalde,1656,ZH,214,CH,47.45329,8.46091 18537,Stadt Winterthur (Kreis 1),1656,ZH,214,CH,47.49494,8.71954 18538,Stadt Winterthur (Kreis 1) / Altstadt,1656,ZH,214,CH,47.49951,8.72872 18539,Stadt Winterthur (Kreis 1) / Brühlberg,1656,ZH,214,CH,47.49764,8.71272 18540,Stadt Winterthur (Kreis 1) / Heiligberg,1656,ZH,214,CH,47.49409,8.72334 18541,Stadt Winterthur (Kreis 1) / Lind,1656,ZH,214,CH,47.50571,8.73372 18542,Stadt Winterthur (Kreis 1) / Neuwiesen,1656,ZH,214,CH,47.50207,8.71625 18543,Stadt Winterthur (Kreis 1) / Tössfeld,1656,ZH,214,CH,47.4934,8.71512 18560,Stäfa,1656,ZH,214,CH,47.24254,8.72342 18555,Steinmaur,1656,ZH,214,CH,47.4971,8.45216 18565,Sulz,1656,ZH,214,CH,47.53954,8.78887 18571,Tagelswangen,1656,ZH,214,CH,47.4307,8.67284 18574,Tann,1656,ZH,214,CH,47.26898,8.85024 18575,Tann / Tann (Dorfkern),1656,ZH,214,CH,47.26494,8.85048 18582,Thalwil,1656,ZH,214,CH,47.29175,8.56351 18583,Thalwil / Berg,1656,ZH,214,CH,47.29178,8.55602 18584,Thalwil / Dorfkern,1656,ZH,214,CH,47.29047,8.56633 18585,Thalwil / Nord,1656,ZH,214,CH,47.29748,8.55634 18586,Thalwil / See,1656,ZH,214,CH,47.29409,8.56929 18587,Thalwil / Süd,1656,ZH,214,CH,47.28495,8.56954 18618,Töss (Kreis 4),1656,ZH,214,CH,47.4789,8.70215 18619,Töss (Kreis 4) / Eichliacker,1656,ZH,214,CH,47.48727,8.7074 18620,Töss (Kreis 4) / Schlosstal,1656,ZH,214,CH,47.49279,8.70223 18621,Töss (Kreis 4) / Vorder-Dättnau,1656,ZH,214,CH,47.48135,8.69855 18613,Turbenthal,1656,ZH,214,CH,47.43633,8.84629 18624,Uerikon,1656,ZH,214,CH,47.23672,8.7573 18627,Uetikon,1656,ZH,214,CH,47.26441,8.67925 18628,Uetikon / Grossdorf,1656,ZH,214,CH,47.26654,8.67765 18629,Uhwiesen,1656,ZH,214,CH,47.67074,8.63542 18630,Uitikon,1656,ZH,214,CH,47.36911,8.45699 18631,Unterengstringen,1656,ZH,214,CH,47.41396,8.44761 18639,Urdorf,1656,ZH,214,CH,47.38507,8.42581 18640,Urdorf / Bodenfeld,1656,ZH,214,CH,47.3892,8.42265 18641,Urdorf / Moos,1656,ZH,214,CH,47.38977,8.42886 18642,Urdorf / Oberurdorf,1656,ZH,214,CH,47.38072,8.42343 18645,Uster,1656,ZH,214,CH,47.34713,8.72091 18646,Uster / Gschwader,1656,ZH,214,CH,47.36016,8.7139 18647,Uster / Kirch-Uster,1656,ZH,214,CH,47.34579,8.71839 18648,Uster / Nieder-Uster,1656,ZH,214,CH,47.34743,8.70088 18649,Uster / Nossikon,1656,ZH,214,CH,47.34088,8.72555 18650,Uster / Ober-Uster,1656,ZH,214,CH,47.34874,8.73319 18665,Veltheim (Kreis 5),1656,ZH,214,CH,47.51419,8.717 18666,Veltheim (Kreis 5) / Blumenau,1656,ZH,214,CH,47.50618,8.71563 18667,Veltheim (Kreis 5) / Rosenberg,1656,ZH,214,CH,47.51386,8.71583 18691,Volketswil / Volketswil (Dorf),1656,ZH,214,CH,47.39016,8.69085 18773,Wädenswil,1656,ZH,214,CH,47.22683,8.6687 18774,Wädenswil / Boller-Giessen,1656,ZH,214,CH,47.22115,8.68385 18775,Wädenswil / Büelen,1656,ZH,214,CH,47.23395,8.66346 18776,Wädenswil / Dorf (Wädenswil),1656,ZH,214,CH,47.22923,8.6722 18777,Wädenswil / Eichweid,1656,ZH,214,CH,47.21847,8.6744 18778,Wädenswil / Hangenmoos,1656,ZH,214,CH,47.23367,8.65251 18779,Wädenswil / Leihof-Mühlebach,1656,ZH,214,CH,47.22364,8.67149 18780,Wädenswil / Untermosen-Fuhr,1656,ZH,214,CH,47.22772,8.66303 18709,Wald,1656,ZH,214,CH,47.27595,8.91405 18715,Wallisellen,1656,ZH,214,CH,47.41499,8.59672 18716,Wallisellen / Rieden,1656,ZH,214,CH,47.41738,8.60028 18717,Wallisellen / Wallisellen-Ost,1656,ZH,214,CH,47.41446,8.59727 18718,Wallisellen / Wallisellen-West,1656,ZH,214,CH,47.41906,8.58586 18722,Wangen,1656,ZH,214,CH,47.41182,8.64516 18732,Weiningen,1656,ZH,214,CH,47.42022,8.43644 18733,Weisslingen,1656,ZH,214,CH,47.43063,8.76787 18737,Wettswil / Ausser-Dorf,1656,ZH,214,CH,47.33197,8.47732 18738,Wettswil / Wettswil (Dorf),1656,ZH,214,CH,47.34152,8.47149 18739,Wetzikon,1656,ZH,214,CH,47.3264,8.79779 18740,Wetzikon / Kempten,1656,ZH,214,CH,47.33319,8.80982 18741,Wetzikon / Ober-Wetzikon,1656,ZH,214,CH,47.32514,8.80005 18742,Wetzikon / Robenhausen,1656,ZH,214,CH,47.33089,8.78762 18743,Wetzikon / Unter-Wetzikon,1656,ZH,214,CH,47.31637,8.79369 18746,Wiesendangen / Wiesendangen (Dorf),1656,ZH,214,CH,47.5217,8.78967 18750,Wila,1656,ZH,214,CH,47.41928,8.84524 18758,Winterthur,1656,ZH,214,CH,47.50564,8.72413 18764,Wolfhausen,1656,ZH,214,CH,47.25619,8.7991 18783,Wülflingen (Kreis 6),1656,ZH,214,CH,47.51036,8.68333 18784,Wülflingen (Kreis 6) / Härti,1656,ZH,214,CH,47.51262,8.684 18785,Wülflingen (Kreis 6) / Lindenplatz,1656,ZH,214,CH,47.51098,8.6929 18786,Wülflingen (Kreis 6) / Niederfeld,1656,ZH,214,CH,47.50904,8.67968 18787,Wülflingen (Kreis 6) / Oberfeld,1656,ZH,214,CH,47.49873,8.69897 18797,Zollikerberg,1656,ZH,214,CH,47.3451,8.60088 18799,Zollikon,1656,ZH,214,CH,47.34019,8.57407 18802,Zumikon,1656,ZH,214,CH,47.33158,8.62271 18809,Zürich,1656,ZH,214,CH,47.36667,8.55 18810,Zürich (Kreis 1),1656,ZH,214,CH,47.37055,8.54177 18811,Zürich (Kreis 1) / City,1656,ZH,214,CH,47.37269,8.53576 18812,Zürich (Kreis 1) / Lindenhof,1656,ZH,214,CH,47.37188,8.54036 18813,Zürich (Kreis 1) / Rathaus,1656,ZH,214,CH,47.37161,8.54501 18814,Zürich (Kreis 10),1656,ZH,214,CH,47.40773,8.5005 18815,Zürich (Kreis 10) / Höngg,1656,ZH,214,CH,47.40313,8.4971 18816,Zürich (Kreis 10) / Rütihof,1656,ZH,214,CH,47.41444,8.47928 18817,Zürich (Kreis 10) / Wipkingen,1656,ZH,214,CH,47.39503,8.52529 18818,Zürich (Kreis 11),1656,ZH,214,CH,47.42326,8.52166 18819,Zürich (Kreis 11) / Affoltern,1656,ZH,214,CH,47.41814,8.5122 18820,Zürich (Kreis 11) / Oerlikon,1656,ZH,214,CH,47.40823,8.54258 18821,Zürich (Kreis 11) / Schwandenholz,1656,ZH,214,CH,47.42476,8.52125 18822,Zürich (Kreis 11) / Seebach,1656,ZH,214,CH,47.42181,8.54779 18823,Zürich (Kreis 12),1656,ZH,214,CH,47.40372,8.57608 18824,Zürich (Kreis 12) / Auzelg,1656,ZH,214,CH,47.41511,8.57014 18825,Zürich (Kreis 12) / Hirzenbach,1656,ZH,214,CH,47.40187,8.58633 18826,Zürich (Kreis 12) / Saatlen,1656,ZH,214,CH,47.41127,8.5648 18827,Zürich (Kreis 12) / Schwamendingen-Mitte,1656,ZH,214,CH,47.4063,8.57242 18828,Zürich (Kreis 2),1656,ZH,214,CH,47.33756,8.5211 18829,Zürich (Kreis 2) / Enge,1656,ZH,214,CH,47.3605,8.53127 18830,Zürich (Kreis 2) / Mittel-Leimbach,1656,ZH,214,CH,47.32538,8.51391 18831,Zürich (Kreis 2) / Unter-Leimbach,1656,ZH,214,CH,47.33362,8.51433 18832,Zürich (Kreis 2) / Wollishofen,1656,ZH,214,CH,47.3401,8.53134 18833,Zürich (Kreis 3),1656,ZH,214,CH,47.35785,8.50296 18834,Zürich (Kreis 3) / Alt-Wiedikon,1656,ZH,214,CH,47.36201,8.51497 18835,Zürich (Kreis 3) / Friesenberg,1656,ZH,214,CH,47.36372,8.50417 18836,Zürich (Kreis 3) / Sihlfeld,1656,ZH,214,CH,47.37382,8.51164 18837,Zürich (Kreis 4) / Aussersihl,1656,ZH,214,CH,47.37752,8.52127 18838,Zürich (Kreis 4) / Hard,1656,ZH,214,CH,47.38311,8.50942 18839,Zürich (Kreis 4) / Langstrasse,1656,ZH,214,CH,47.37767,8.52854 18840,Zürich (Kreis 4) / Werd,1656,ZH,214,CH,47.37178,8.52584 18841,Zürich (Kreis 5),1656,ZH,214,CH,47.38767,8.52152 18842,Zürich (Kreis 5) / Escher-Wyss,1656,ZH,214,CH,47.39052,8.51292 18843,Zürich (Kreis 5) / Gewerbeschule,1656,ZH,214,CH,47.38481,8.53011 18844,Zürich (Kreis 6),1656,ZH,214,CH,47.39223,8.54381 18845,Zürich (Kreis 6) / Oberstrass,1656,ZH,214,CH,47.38917,8.5504 18846,Zürich (Kreis 6) / Unterstrass,1656,ZH,214,CH,47.3953,8.53721 18847,Zürich (Kreis 7),1656,ZH,214,CH,47.37328,8.58038 18848,Zürich (Kreis 7) / Fluntern,1656,ZH,214,CH,47.38013,8.56133 18849,Zürich (Kreis 7) / Hirslanden,1656,ZH,214,CH,47.3624,8.56755 18850,Zürich (Kreis 7) / Hottingen,1656,ZH,214,CH,47.37011,8.56306 18851,Zürich (Kreis 7) / Witikon,1656,ZH,214,CH,47.35751,8.59105 18852,Zürich (Kreis 8),1656,ZH,214,CH,47.3548,8.56097 18853,Zürich (Kreis 8) / Mühlebach,1656,ZH,214,CH,47.35727,8.55744 18854,Zürich (Kreis 8) / Seefeld,1656,ZH,214,CH,47.35462,8.55537 18855,Zürich (Kreis 8) / Weinegg,1656,ZH,214,CH,47.3525,8.57011 18856,Zürich (Kreis 9),1656,ZH,214,CH,47.38245,8.47993 18857,Zürich (Kreis 9) / Albisrieden,1656,ZH,214,CH,47.37398,8.49007 18858,Zürich (Kreis 9) / Altstetten,1656,ZH,214,CH,47.38946,8.48533 17529,Bilten,1661,GL,214,CH,47.14995,9.02551 17751,Ennenda,1661,GL,214,CH,47.03363,9.07888 17839,Glarus,1661,GL,214,CH,47.04057,9.06804 18086,Linthal,1661,GL,214,CH,46.92127,8.99799 18097,Luchsingen,1661,GL,214,CH,46.9664,9.03715 18162,Mollis,1661,GL,214,CH,47.08878,9.07242 18235,Näfels,1661,GL,214,CH,47.09775,9.06361 18211,Netstal,1661,GL,214,CH,47.06337,9.05734 18229,Niederurnen,1661,GL,214,CH,47.12598,9.05428 18268,Oberurnen,1661,GL,214,CH,47.11412,9.05866 18475,Schwanden,1661,GL,214,CH,46.99541,9.0701 17409,Arosa,1660,GR,214,CH,46.77793,9.67621 17411,Arvigo,1660,GR,214,CH,46.30211,9.113 17547,Bonaduz,1660,GR,214,CH,46.81103,9.39821 17559,Breíl,1660,GR,214,CH,46.76986,9.06036 17571,Brusio,1660,GR,214,CH,46.25953,10.12385 17585,Buseno,1660,GR,214,CH,46.27381,9.10735 17615,Cauco,1660,GR,214,CH,46.33541,9.12129 17617,Cazis,1660,GR,214,CH,46.7194,9.43271 17618,Celerina,1660,GR,214,CH,46.51217,9.85794 17638,Chur,1660,GR,214,CH,46.84986,9.53287 17639,Churwalden,1660,GR,214,CH,46.78143,9.54377 17677,Davos,1660,GR,214,CH,46.80429,9.83723 17699,Disentis,1660,GR,214,CH,46.70341,8.8509 17700,Domat,1660,GR,214,CH,46.83483,9.45075 17783,Felsberg,1660,GR,214,CH,46.84566,9.47588 17793,Flims,1660,GR,214,CH,46.83705,9.28458 17882,Grüsch,1660,GR,214,CH,46.97965,9.64639 17917,Hinterrhein,1660,GR,214,CH,46.53333,9.2 17947,Igis,1660,GR,214,CH,46.94531,9.57218 17948,Ilanz,1660,GR,214,CH,46.77413,9.20461 17958,Jenaz,1660,GR,214,CH,46.92892,9.71275 17986,Klosters Serneus,1660,GR,214,CH,46.88918,9.83826 18024,La Punt Chamues-ch,1660,GR,214,CH,46.57887,9.92015 18029,Laax,1660,GR,214,CH,46.80452,9.25787 18033,Landquart,1660,GR,214,CH,46.95,9.56667 18067,Lenzerheide,1660,GR,214,CH,46.72215,9.55905 18105,Luzein,1660,GR,214,CH,46.91957,9.7608 18116,Maienfeld,1660,GR,214,CH,47.00472,9.53115 18117,Malans,1660,GR,214,CH,46.98096,9.57527 18155,Mesocco,1660,GR,214,CH,46.3939,9.23333 18318,Pontresina,1660,GR,214,CH,46.4955,9.90126 18321,Poschiavo,1660,GR,214,CH,46.32441,10.05823 18348,Region Albula,1660,GR,214,CH,46.60255,9.6515 18349,Region Bernina,1660,GR,214,CH,46.33488,10.07349 18350,Region Engiadina Bassa / Val Müstair,1660,GR,214,CH,46.75212,10.26032 18351,Region Imboden,1660,GR,214,CH,46.84876,9.36225 18352,Region Landquart,1660,GR,214,CH,46.96403,9.56365 18353,Region Maloja,1660,GR,214,CH,46.47448,9.83138 18354,Region Moesa,1660,GR,214,CH,46.352,9.1787 18355,Region Plessur,1660,GR,214,CH,46.81819,9.62542 18356,Region Prättigau / Davos,1660,GR,214,CH,46.86727,9.82014 18357,Region Surselva,1660,GR,214,CH,46.69564,9.04834 18358,Region Viamala,1660,GR,214,CH,46.58762,9.40035 18367,Rhäzüns,1660,GR,214,CH,46.79891,9.39764 18435,Samedan,1660,GR,214,CH,46.53399,9.87276 18457,Scharans,1660,GR,214,CH,46.71814,9.45903 18460,Schiers,1660,GR,214,CH,46.96973,9.6872 18490,Scuol,1660,GR,214,CH,46.79671,10.29804 18522,Silvaplana,1660,GR,214,CH,46.4581,9.79514 18535,St. Moritz,1660,GR,214,CH,46.49937,9.84327 18572,Tamins,1660,GR,214,CH,46.82964,9.40648 18594,Thusis,1660,GR,214,CH,46.69724,9.43938 18596,Tiefencastel,1660,GR,214,CH,46.66014,9.57883 18604,Trimmis,1660,GR,214,CH,46.90075,9.5612 18610,Trun,1660,GR,214,CH,46.74292,8.98716 18637,Untervaz,1660,GR,214,CH,46.9275,9.53422 18660,Vals Platz,1660,GR,214,CH,46.61647,9.18025 18794,Zernez,1660,GR,214,CH,46.69862,10.09268 18795,Zizers,1660,GR,214,CH,46.93575,9.56491 18804,Zuoz,1660,GR,214,CH,46.60206,9.95965 17448,Beckenried,1652,NW,214,CH,46.96653,8.47575 17582,Buochs,1652,NW,214,CH,46.97398,8.42279 17675,Dallenwil,1652,NW,214,CH,46.9242,8.38785 17748,Emmetten,1652,NW,214,CH,46.95658,8.51467 17752,Ennetbürgen,1652,NW,214,CH,46.98423,8.41003 17906,Hergiswil,1652,NW,214,CH,46.98429,8.30944 18546,Stans,1652,NW,214,CH,46.95805,8.36609 18547,Stansstad,1652,NW,214,CH,46.9768,8.33553 18763,Wolfenschiessen,1652,NW,214,CH,46.90322,8.39423 17387,Alpnach,1650,OW,214,CH,46.94227,8.2718 17750,Engelberg,1650,OW,214,CH,46.82107,8.40133 17835,Giswil,1650,OW,214,CH,46.83333,8.18065 17973,Kerns,1650,OW,214,CH,46.90121,8.27514 18101,Lungern,1650,OW,214,CH,46.78578,8.15984 18418,Sachseln,1650,OW,214,CH,46.86718,8.23344 18447,Sarnen,1650,OW,214,CH,46.89611,8.24531 17389,Altendorf,1653,SZ,214,CH,47.18994,8.83823 17410,Arth,1653,SZ,214,CH,47.06337,8.52349 17590,Bäch,1653,SZ,214,CH,47.20388,8.73224 17483,Bezirk Einsiedeln,1653,SZ,214,CH,47.10792,8.7601 17484,Bezirk Gersau,1653,SZ,214,CH,47.008,8.51678 17490,Bezirk Höfe,1653,SZ,214,CH,47.19043,8.7396 17492,Bezirk Küssnacht,1653,SZ,214,CH,47.08611,8.44444 17498,Bezirk March,1653,SZ,214,CH,47.16128,8.91103 17509,Bezirk Schwyz,1653,SZ,214,CH,47.02814,8.63619 17738,Einsiedeln,1653,SZ,214,CH,47.12849,8.74735 17787,Feusisberg,1653,SZ,214,CH,47.18707,8.74724 17806,Freienbach,1653,SZ,214,CH,47.20534,8.75842 17830,Gersau,1653,SZ,214,CH,46.99419,8.525 17848,Goldau,1653,SZ,214,CH,47.04761,8.54616 17946,Ibach,1653,SZ,214,CH,47.01105,8.64538 17951,Ingenbohl,1653,SZ,214,CH,46.9988,8.61529 18019,Küssnacht,1653,SZ,214,CH,47.08557,8.44206 18030,Lachen,1653,SZ,214,CH,47.19224,8.85324 18179,Muotathal,1653,SZ,214,CH,46.97676,8.76499 18310,Pfäffikon,1653,SZ,214,CH,47.20109,8.77816 18360,Reichenburg,1653,SZ,214,CH,47.17097,8.97704 18393,Rothenthurm,1653,SZ,214,CH,47.1042,8.67585 18449,Sattel,1653,SZ,214,CH,47.08246,8.63565 18461,Schindellegi,1653,SZ,214,CH,47.1746,8.71345 18487,Schübelbach,1653,SZ,214,CH,47.17326,8.92811 18481,Schwyz,1653,SZ,214,CH,47.02076,8.65414 18516,Siebnen,1653,SZ,214,CH,47.17449,8.89781 18553,Steinen,1653,SZ,214,CH,47.04975,8.61214 18612,Tuggen,1653,SZ,214,CH,47.20291,8.94896 18632,Unteriberg,1653,SZ,214,CH,47.06258,8.8052 18693,Vorderthal,1653,SZ,214,CH,47.12172,8.90225 18767,Wollerau,1653,SZ,214,CH,47.19478,8.71903 17356,Aadorf,1657,TG,214,CH,47.49204,8.90099 17374,Affeltrangen,1657,TG,214,CH,47.52581,9.03307 17392,Altnau,1657,TG,214,CH,47.61052,9.2616 17395,Amriswil,1657,TG,214,CH,47.54699,9.29586 17402,Arbon,1657,TG,214,CH,47.51667,9.43333 17403,Arbon District,1657,TG,214,CH,47.54867,9.35159 17459,Berg,1657,TG,214,CH,47.57879,9.16635 17552,Bottighofen,1657,TG,214,CH,47.63643,9.20882 17603,Bürglen,1657,TG,214,CH,47.54921,9.1495 17688,Diessenhofen,1657,TG,214,CH,47.68908,8.74958 17733,Egnach,1657,TG,214,CH,47.54268,9.38048 17760,Erlen,1657,TG,214,CH,47.54814,9.23415 17766,Ermatingen,1657,TG,214,CH,47.67057,9.08573 17770,Eschenz,1657,TG,214,CH,47.64793,8.87472 17771,Eschlikon,1657,TG,214,CH,47.46361,8.96381 17789,Fischingen,1657,TG,214,CH,47.41422,8.96862 17803,Frauenfeld,1657,TG,214,CH,47.55776,8.89893 17804,Frauenfeld District,1657,TG,214,CH,47.61115,8.89444 17818,Gachnang,1657,TG,214,CH,47.53935,8.85311 17858,Gottlieben,1657,TG,214,CH,47.6638,9.13371 17889,Güttingen,1657,TG,214,CH,47.60349,9.28742 17928,Homburg,1657,TG,214,CH,47.63469,9.00756 17945,Hüttwilen,1657,TG,214,CH,47.60674,8.87343 18005,Kreuzlingen,1657,TG,214,CH,47.65051,9.17504 18006,Kreuzlingen District,1657,TG,214,CH,47.63046,9.16458 18041,Langrickenbach,1657,TG,214,CH,47.59353,9.24727 18189,Märstetten-Dorf,1657,TG,214,CH,47.59252,9.06851 18135,Matzingen,1657,TG,214,CH,47.51957,8.93365 18198,Müllheim,1657,TG,214,CH,47.60195,9.00357 18202,Münchwilen,1657,TG,214,CH,47.47719,8.99677 18203,Münchwilen District,1657,TG,214,CH,47.47324,8.98812 18205,Münsterlingen,1657,TG,214,CH,47.63197,9.23271 18309,Pfyn,1657,TG,214,CH,47.59693,8.9542 18373,Rickenbach bei Wil,1657,TG,214,CH,47.44856,9.04902 18383,Roggwil,1657,TG,214,CH,47.49981,9.3958 18388,Romanshorn,1657,TG,214,CH,47.56586,9.37869 18433,Salmsach,1657,TG,214,CH,47.55433,9.37229 18525,Sirnach,1657,TG,214,CH,47.46222,8.99763 18549,Steckborn,1657,TG,214,CH,47.66667,8.98333 18557,Stettfurt,1657,TG,214,CH,47.52588,8.95317 18563,Sulgen,1657,TG,214,CH,47.53967,9.18585 18616,Tägerwilen,1657,TG,214,CH,47.65698,9.13999 18593,Thundorf,1657,TG,214,CH,47.54594,8.96358 18652,Uttwil,1657,TG,214,CH,47.5844,9.34101 18698,Wagenhausen,1657,TG,214,CH,47.66003,8.84782 18781,Wängi,1657,TG,214,CH,47.49654,8.95325 18730,Weinfelden,1657,TG,214,CH,47.56667,9.1 18731,Weinfelden District,1657,TG,214,CH,47.54237,9.15713 18747,Wigoltingen,1657,TG,214,CH,47.5977,9.03141 17361,Acquarossa,1643,TI,214,CH,46.45473,8.94261 17380,Agno,1643,TI,214,CH,45.99863,8.9003 17384,Airolo,1643,TI,214,CH,46.52855,8.61189 17413,Arzo,1643,TI,214,CH,45.87606,8.94103 17414,Ascona,1643,TI,214,CH,46.15451,8.77327 17434,Balerna,1643,TI,214,CH,45.84638,9.00724 17452,Bellinzona,1643,TI,214,CH,46.19278,9.01703 17453,Bellinzona District,1643,TI,214,CH,46.18858,9.00254 17524,Biasca,1643,TI,214,CH,46.35972,8.96965 17533,Bioggio,1643,TI,214,CH,46.01357,8.91103 17540,Blenio District,1643,TI,214,CH,46.47613,8.94609 17544,Bodio,1643,TI,214,CH,46.37808,8.90991 17564,Brissago,1643,TI,214,CH,46.12013,8.71181 17607,Cadempino,1643,TI,214,CH,46.03672,8.93403 17608,Cadenazzo,1643,TI,214,CH,46.15172,8.94719 17609,Cadro,1643,TI,214,CH,46.04595,8.98725 17610,Camorino,1643,TI,214,CH,46.16483,9.00547 17611,Canobbio,1643,TI,214,CH,46.03592,8.96605 17613,Caslano,1643,TI,214,CH,45.97364,8.87739 17614,Castel San Pietro,1643,TI,214,CH,45.86211,9.00843 17620,Cevio,1643,TI,214,CH,46.31479,8.60332 17636,Chiasso,1643,TI,214,CH,45.83203,9.03119 17645,Claro,1643,TI,214,CH,46.25763,9.02252 17648,Comano,1643,TI,214,CH,46.03635,8.95526 17670,Cugnasco,1643,TI,214,CH,46.17473,8.91684 17780,Faido,1643,TI,214,CH,46.477,8.80125 17836,Giubiasco,1643,TI,214,CH,46.17246,9.00793 17854,Gordola,1643,TI,214,CH,46.18256,8.86657 17863,Gravesano,1643,TI,214,CH,46.04208,8.91832 18053,Lavertezzo,1643,TI,214,CH,46.25893,8.83756 18078,Leventina District,1643,TI,214,CH,46.46912,8.75539 18084,Ligornetto,1643,TI,214,CH,45.86161,8.95166 18088,Locarno,1643,TI,214,CH,46.17086,8.79953 18089,Locarno District,1643,TI,214,CH,46.18033,8.75991 18090,Lodrino,1643,TI,214,CH,46.30016,8.97986 18091,Losone,1643,TI,214,CH,46.16866,8.75928 18098,Lugano,1643,TI,214,CH,46.01008,8.96004 18099,Lugano District,1643,TI,214,CH,46.02322,8.93802 18100,Lumino,1643,TI,214,CH,46.2302,9.0642 18114,Magadino,1643,TI,214,CH,46.14892,8.8561 18120,Malvaglia,1643,TI,214,CH,46.40588,8.9819 18128,Massagno,1643,TI,214,CH,46.01257,8.94354 18145,Melano,1643,TI,214,CH,45.92202,8.98435 18147,Melide,1643,TI,214,CH,45.95455,8.94725 18149,Mendrisio,1643,TI,214,CH,45.87019,8.9816 18150,Mendrisio District,1643,TI,214,CH,45.86592,8.99931 18159,Minusio,1643,TI,214,CH,46.17769,8.81473 18163,Montagnola,1643,TI,214,CH,45.98323,8.91786 18166,Monte Carasso,1643,TI,214,CH,46.18649,8.99892 18170,Morbio Inferiore,1643,TI,214,CH,45.84915,9.01907 18180,Muralto,1643,TI,214,CH,46.17323,8.80219 18231,Novazzano,1643,TI,214,CH,45.84073,8.98236 18325,Pregassona,1643,TI,214,CH,46.02021,8.97429 18331,Pura,1643,TI,214,CH,45.98647,8.86877 18378,Riva San Vitale,1643,TI,214,CH,45.90123,8.97167 18379,Riviera District,1643,TI,214,CH,46.30926,8.98148 18507,Sementina,1643,TI,214,CH,46.18363,8.99162 18530,Sorengo,1643,TI,214,CH,45.99766,8.93783 18536,Stabio,1643,TI,214,CH,45.84846,8.93642 18578,Tesserete,1643,TI,214,CH,46.06813,8.96501 18658,Vallemaggia District,1643,TI,214,CH,46.35483,8.6054 18671,Verscio,1643,TI,214,CH,46.18482,8.73224 18678,Viganello,1643,TI,214,CH,46.01342,8.96879 17388,Altdorf,1642,UR,214,CH,46.88042,8.64441 17397,Andermatt,1642,UR,214,CH,46.63565,8.59388 17416,Attinghausen,1642,UR,214,CH,46.86255,8.63036 17444,Bauen,1642,UR,214,CH,46.93559,8.57836 17602,Bürglen,1642,UR,214,CH,46.87565,8.66539 17768,Erstfeld,1642,UR,214,CH,46.81885,8.65052 17796,Flüelen,1642,UR,214,CH,46.90478,8.62396 18458,Schattdorf,1642,UR,214,CH,46.8655,8.65465 18492,Seedorf,1642,UR,214,CH,46.88199,8.61611 18521,Silenen,1642,UR,214,CH,46.7891,8.67325 109305,Abrikosovka,4689,43,230,UA,45.10759,35.10139 109306,Abrikosovo,4689,43,230,UA,45.69236,34.10156 109308,Aeroflotskiy,4689,43,230,UA,45.01816,33.99961 109309,Agrarnoye,4689,43,230,UA,45.01596,34.05725 109310,Akimovka,4689,43,230,UA,45.51981,34.82438 109313,Aleksandrovka,4689,43,230,UA,45.57654,34.09947 109314,Alekseyevka,4689,43,230,UA,45.58194,33.6298 109315,Alupka,4689,43,230,UA,44.41808,34.04531 109316,Alushta,4689,43,230,UA,44.67728,34.4097 109317,Amurskoye,4689,43,230,UA,45.27822,34.12823 109327,Armyansk,4689,43,230,UA,46.10919,33.69206 109328,Aromatnoye,4689,43,230,UA,45.03678,34.39921 109336,Azovskoye,4689,43,230,UA,45.58604,34.5668 109338,Baherove,4689,43,230,UA,45.37417,36.29705 109339,Bakhchysarai,4689,43,230,UA,44.75525,33.85782 109340,Bakhchysarai Raion,4689,43,230,UA,44.75002,33.8633 109356,Batal’noye,4689,43,230,UA,45.19402,35.61583 109363,Belinskoye,4689,43,230,UA,45.37465,36.08212 109364,Beloglinka,4689,43,230,UA,44.9949,34.04167 109365,Belogorskiy rayon,4689,43,230,UA,45.063,34.55675 109372,Beregovoye,4689,43,230,UA,45.0947,35.43385 109384,Berezovka,4689,43,230,UA,45.57471,33.34397 109399,Bilohirsk,4689,43,230,UA,45.05462,34.60185 109412,Blizhneye,4689,43,230,UA,45.05694,35.33056 109417,Bogatoye,4689,43,230,UA,45.02933,34.76732 109438,Botanicheskoye,4689,43,230,UA,45.78656,33.54856 109444,Bratskoye,4689,43,230,UA,45.8317,33.92151 109470,Chapayevka,4689,43,230,UA,45.28119,34.89428 109474,Chaykino,4689,43,230,UA,45.08223,34.08673 109476,Chelyadinovo,4689,43,230,UA,45.20729,36.3762 109489,Chernomorskiy rayon,4689,43,230,UA,45.48798,32.92614 109490,Chernomorskoye,4689,43,230,UA,45.50657,32.69776 109491,Chernopolye,4689,43,230,UA,45.04399,34.63916 109492,Chernovo,4689,43,230,UA,45.50833,33.93397 109493,Chernozemnoye,4689,43,230,UA,45.40808,34.8199 109497,Chernyshevo,4689,43,230,UA,45.78202,33.42825 109503,Chervonoye,4689,43,230,UA,45.12294,33.68662 109505,Chisten’koye,4689,43,230,UA,44.88152,34.04716 109506,Chistopolye,4689,43,230,UA,45.36541,36.18312 109507,Chkalovo,4689,43,230,UA,45.60474,34.83395 109527,Dachnoye,4689,43,230,UA,44.88448,34.98333 109528,Dalekoye,4689,43,230,UA,45.66006,33.08059 109543,Dmitrovka,4689,43,230,UA,45.48411,35.0588 109547,Dneprovka,4689,43,230,UA,45.71373,34.36256 109560,Dobroye,4689,43,230,UA,44.86632,34.22661 109561,Dobrushino,4689,43,230,UA,45.37441,33.36547 109564,Dolinnoye,4689,43,230,UA,44.7532,33.77766 109571,Donskoye,4689,43,230,UA,45.04509,34.21413 109577,Drofino,4689,43,230,UA,45.28629,34.61589 109582,Dubki,4689,43,230,UA,44.93581,34.02355 109592,Dzhankoy,4689,43,230,UA,45.71168,34.39274 109593,Dzhankoyskiy rayon,4689,43,230,UA,45.78706,34.39197 109599,Feodosiya,4689,43,230,UA,45.03677,35.37789 109600,Filatovka,4689,43,230,UA,46.08192,33.7851 109602,Fontany,4689,43,230,UA,44.89717,34.07297 109603,Foros,4689,43,230,UA,44.39214,33.78798 109604,Frunze,4689,43,230,UA,45.02688,33.62956 109605,Gaspra,4689,43,230,UA,44.43364,34.10297 109606,Geroyskoye,4689,43,230,UA,45.13857,33.74675 109607,Glazovka,4689,43,230,UA,45.38792,36.57965 109608,Golubinka,4689,43,230,UA,44.59382,33.91521 109609,Gornostayevka,4689,43,230,UA,45.27819,36.18601 109610,Gorodskoy okrug Alushta,4689,43,230,UA,44.67256,34.41467 109611,Gorodskoy okrug Armyansk,4689,43,230,UA,46.10871,33.69095 109612,Gorodskoy okrug Dzhankoy,4689,43,230,UA,45.7081,34.39407 109613,Gorodskoy okrug Feodosiya,4689,43,230,UA,45.04612,35.37289 109614,Gorodskoy okrug Krasnoperekopsk,4689,43,230,UA,45.9533,33.79669 109615,Gorodskoy okrug Saki,4689,43,230,UA,45.1278,33.60134 109616,Gorodskoy okrug Simferopol,4689,43,230,UA,44.94803,34.10912 109617,Gorodskoy okrug Sudak,4689,43,230,UA,44.91667,35.00202 109618,Gorodskoy okrug Yalta,4689,43,230,UA,44.49638,34.16336 109619,Gorodskoy okrug Yevpatoriya,4689,43,230,UA,45.19559,33.36342 109620,Gresovskiy,4689,43,230,UA,45.00804,34.02657 109621,Grishino,4689,43,230,UA,45.64219,33.83098 109622,Grushevka,4689,43,230,UA,45.02281,34.97301 109623,Gurzuf,4689,43,230,UA,44.54624,34.27841 109664,Hvardiiske,4689,43,230,UA,45.11692,34.02188 109669,Ilychyovo,4689,43,230,UA,45.28348,35.73864 109670,Ilyichevo,4689,43,230,UA,45.24524,35.07127 109671,Ilyinka,4689,43,230,UA,45.81784,33.79482 109676,Ishun’,4689,43,230,UA,45.92403,33.82364 109685,Ivanovka,4689,43,230,UA,45.072,33.6613 109688,Izobil’noye,4689,43,230,UA,44.70276,34.35357 109689,Izumrudnoye,4689,43,230,UA,45.73704,34.41299 109692,Izyumovka,4689,43,230,UA,45.04437,35.13717 109700,Kalinino,4689,43,230,UA,45.59521,34.2203 109701,Kalinovka,4689,43,230,UA,45.31658,35.74643 109707,Kamenolomnya,4689,43,230,UA,45.24804,33.41773 109718,Kashtanovoye,4689,43,230,UA,44.8321,34.05912 109719,Kashtany,4689,43,230,UA,44.8676,33.78995 109725,Kerch,4689,43,230,UA,45.3531,36.47429 109726,Kerchenska Miska Rada,4689,43,230,UA,45.35307,36.47414 109734,Kholmovka,4689,43,230,UA,44.6583,33.75456 109750,Kirovo,4689,43,230,UA,45.22106,35.84227 109752,Kirovske Raion,4689,43,230,UA,45.15522,35.17696 109753,Kirovskoye,4689,43,230,UA,45.22967,35.19987 109761,Klepinino,4689,43,230,UA,45.528,34.18315 109771,Koktebel,4689,43,230,UA,44.96155,35.2466 109780,Kol’chugino,4689,43,230,UA,44.94367,33.78865 109781,Kol’tsovo,4689,43,230,UA,45.32807,33.44992 109774,Kolodeznoye,4689,43,230,UA,45.22682,34.33698 109779,Koloski,4689,43,230,UA,45.26936,33.29386 109784,Komsomol’skoye,4689,43,230,UA,45.019,34.03049 109788,Kondratyevo,4689,43,230,UA,45.63125,34.47387 109790,Konstantinovka,4689,43,230,UA,44.85511,34.12069 109794,Koreiz,4689,43,230,UA,44.43374,34.08516 109796,Kormovoye,4689,43,230,UA,45.50001,33.61192 109812,Kostochkovka,4689,43,230,UA,45.31747,34.67418 109818,Kotel’nikovo,4689,43,230,UA,45.36584,34.02575 109822,Kovyl’noye,4689,43,230,UA,45.69028,33.52775 109830,Krasna Zorka,4689,43,230,UA,45.13432,34.04015 109831,Krasnaya Polyana,4689,43,230,UA,45.48241,32.9379 109834,Krasnoarmeyskoye,4689,43,230,UA,45.99103,34.03037 109835,Krasnoflotskoye,4689,43,230,UA,45.31572,34.94756 109836,Krasnogorka,4689,43,230,UA,45.24513,35.80739 109837,Krasnogvardeyskoye,4689,43,230,UA,45.50271,34.30134 109839,Krasnohvardiiske Raion,4689,43,230,UA,45.4023,34.25464 109840,Krasnokamenka,4689,43,230,UA,44.56383,34.28877 109842,Krasnolesye,4689,43,230,UA,44.83259,34.23086 109845,Krasnoperekops’k,4689,43,230,UA,45.95716,33.7965 109844,Krasnoperekopsk Raion,4689,43,230,UA,45.96992,33.8799 109849,Krasnoyarskoye,4689,43,230,UA,45.50661,33.26641 109850,Krasnoye,4689,43,230,UA,45.13999,34.09452 109851,Krasnoznamenka,4689,43,230,UA,45.28676,34.00036 109852,Krasnyi Mak,4689,43,230,UA,44.64218,33.7813 109857,Krayneye,4689,43,230,UA,45.22993,33.83239 109861,Krest’yanovka,4689,43,230,UA,45.72268,33.93938 109863,Krinichnoye,4689,43,230,UA,45.02428,34.61202 109869,Krymka,4689,43,230,UA,45.70453,34.18782 109870,Krymskaya Roza,4689,43,230,UA,45.05776,34.35631 109871,Krymskoye,4689,43,230,UA,45.18836,33.80106 109881,Kuibyshevo,4689,43,230,UA,44.629,33.86895 109882,Kukushkino,4689,43,230,UA,45.71924,33.3903 109890,Kurskoye,4689,43,230,UA,45.02908,34.93623 109968,L’govskoye,4689,43,230,UA,45.09801,34.9577 109910,Lekarstvennoye,4689,43,230,UA,44.94194,33.82229 109912,Lenine Raion,4689,43,230,UA,45.24693,36.0054 109913,Lenino,4689,43,230,UA,45.29857,35.77708 109914,Leninskoye,4689,43,230,UA,45.26844,34.05023 109915,Lesnovka,4689,43,230,UA,45.1535,33.61889 109917,Levadki,4689,43,230,UA,44.87083,34.04278 109919,Listvennoye,4689,43,230,UA,45.48086,34.81087 109920,Litvinenkovo,4689,43,230,UA,45.08648,34.31107 109926,Livadia,4689,43,230,UA,44.47021,34.14272 109927,Lobanovo,4689,43,230,UA,45.77552,34.24236 109933,Lozovoye,4689,43,230,UA,44.906,34.16414 109935,Luchistoye,4689,43,230,UA,44.73646,34.40063 109936,Luganskoye,4689,43,230,UA,45.8019,34.23786 109937,Lugovoye,4689,43,230,UA,45.23469,35.72202 109969,Magazinka,4689,43,230,UA,45.86312,34.04969 109982,Malen’koye,4689,43,230,UA,45.07585,33.99942 109985,Malorechenskoye,4689,43,230,UA,44.75888,34.55789 109987,Maly Mayak,4689,43,230,UA,44.61356,34.36469 110005,Mar’yanovka,4689,43,230,UA,45.44627,34.29474 109998,Marfovka,4689,43,230,UA,45.19853,36.09144 110004,Maryevka,4689,43,230,UA,45.1133,36.23992 110006,Maslovo,4689,43,230,UA,45.79197,34.36298 110007,Massandra,4689,43,230,UA,44.50958,34.18817 110010,Mayskoye,4689,43,230,UA,45.59555,34.55213 110011,Mazanka,4689,43,230,UA,45.0055,34.25581 110013,Medvedevka,4689,43,230,UA,45.88389,34.55562 110014,Medvedevo,4689,43,230,UA,45.38597,33.004 110020,Mel’nichnoye,4689,43,230,UA,45.19885,34.42012 110026,Mezhvodnoye,4689,43,230,UA,45.58751,32.84501 110027,Michurinskoye,4689,43,230,UA,45.0743,34.70672 110028,Mikhaylovka,4689,43,230,UA,45.11325,33.61071 110032,Mirnovka,4689,43,230,UA,45.69083,34.30966 110033,Mirnoye,4689,43,230,UA,44.9833,34.0616 110034,Mirny,4689,43,230,UA,45.30788,33.03501 110036,Mitrofanovka,4689,43,230,UA,45.45114,34.67883 110037,Mityayevo,4689,43,230,UA,45.23423,33.7015 110046,Molochnoye,4689,43,230,UA,45.1996,33.22233 110050,Molodyozhnoye,4689,43,230,UA,45.00354,34.05634 110053,Morskoye,4689,43,230,UA,44.82593,34.80314 110061,Muromskoye,4689,43,230,UA,45.09051,34.849 110064,Muskatnoye,4689,43,230,UA,45.46586,34.54316 110077,Mysovoe,4689,43,230,UA,45.44788,35.83528 110083,Nasypnoe,4689,43,230,UA,45.05285,35.29415 110085,Naydenovka,4689,43,230,UA,45.27088,34.44898 110088,Nekrasovka,4689,43,230,UA,45.44085,34.98584 110089,Nekrasovo,4689,43,230,UA,45.42453,34.28545 110095,Nikita,4689,43,230,UA,44.51564,34.2384 110096,Nikolayevka,4689,43,230,UA,44.96213,33.61061 110099,Nizhnegorskiy,4689,43,230,UA,45.44789,34.73839 110100,Nizhnegorskiy rayon,4689,43,230,UA,45.4843,34.76798 110118,Novoandreyevka,4689,43,230,UA,45.19904,34.09384 110124,Novoestoniya,4689,43,230,UA,45.4996,34.24298 110126,Novofedorovka,4689,43,230,UA,45.09473,33.57211 110127,Novogrigoryevka,4689,43,230,UA,45.452,34.60378 110129,Novoivanovka,4689,43,230,UA,45.44914,33.09833 110130,Novokrymskoye,4689,43,230,UA,45.78007,34.15543 110136,Novonikolayevka,4689,43,230,UA,45.30855,36.05749 110138,Novoozyornoye,4689,43,230,UA,45.38314,33.11715 110139,Novopavlovka,4689,43,230,UA,45.86634,33.89018 110140,Novopokrovka,4689,43,230,UA,45.16517,35.25304 110147,Novosel’skoye,4689,43,230,UA,45.50357,32.7225 110144,Novoselovskoye,4689,43,230,UA,45.44276,33.59795 110148,Novostepnoye,4689,43,230,UA,45.66206,34.387 110149,Novosyolovka,4689,43,230,UA,44.99377,33.83525 110155,Novozhilovka,4689,43,230,UA,45.1596,34.2327 110156,Novy Svet,4689,43,230,UA,44.83087,34.9137 110178,Okhotnikovo,4689,43,230,UA,45.23985,33.59405 110179,Okhotskoye,4689,43,230,UA,45.48612,34.86401 110182,Oktyabrskoye,4689,43,230,UA,45.36215,36.36803 110183,Oktyabr’skoye,4689,43,230,UA,45.28866,34.13521 110184,Okunevka,4689,43,230,UA,45.36855,32.76357 110191,Olenevka,4689,43,230,UA,45.38333,32.53333 110201,Ordzhonikidze,4689,43,230,UA,44.96401,35.35576 110202,Orekhovo,4689,43,230,UA,45.12944,33.6318 110204,Orlovskoye,4689,43,230,UA,45.8107,33.97308 110206,Ostanino,4689,43,230,UA,45.32731,35.91295 110209,Ostrovskoye,4689,43,230,UA,45.74232,34.06607 110220,Pakharevka,4689,43,230,UA,45.83472,34.16129 110223,Partenit,4689,43,230,UA,44.578,34.34464 110224,Partizanskoye,4689,43,230,UA,44.83379,34.08465 110225,Partizany,4689,43,230,UA,45.14373,35.15509 110243,Perevalnoye,4689,43,230,UA,44.84838,34.31271 110245,Perovo,4689,43,230,UA,44.92513,34.05753 110248,Pervomayskiy rayon,4689,43,230,UA,45.59825,33.83249 110249,Pervomayskoye,4689,43,230,UA,45.71744,33.85596 110254,Peschanoye,4689,43,230,UA,44.84342,33.60921 110260,Petrovka,4689,43,230,UA,45.49776,34.28816 110272,Pionerskoye,4689,43,230,UA,44.88083,34.20194 110277,Plodovoye,4689,43,230,UA,44.87156,33.85615 110280,Pobednoye,4689,43,230,UA,45.70109,34.44805 110283,Pochetnoye,4689,43,230,UA,45.99495,33.76588 110295,Poltavka,4689,43,230,UA,45.35133,34.18371 110305,Poshtove,4689,43,230,UA,44.8354,33.96159 110307,Pozharskoye,4689,43,230,UA,44.93554,33.87109 110308,Pravda,4689,43,230,UA,45.77903,33.84649 110310,Primorskiy,4689,43,230,UA,45.11904,35.48025 110311,Priozyornoye,4689,43,230,UA,45.2699,36.33405 110312,Privetnoye,4689,43,230,UA,45.11969,35.0596 110314,Prostornoye,4689,43,230,UA,45.65597,34.69837 110315,Prudovoye,4689,43,230,UA,44.90424,33.78114 110316,Prudy,4689,43,230,UA,45.23922,34.70217 110326,Pshenichnoye,4689,43,230,UA,45.64627,34.83767 110329,Pushkino,4689,43,230,UA,45.20373,34.97642 110333,Pyatikhatka,4689,43,230,UA,45.32347,34.25516 110348,Razdol’nenskiy rayon,4689,43,230,UA,45.67086,33.44075 110349,Razdol’noye,4689,43,230,UA,45.77083,33.48777 110358,Rodnikovo,4689,43,230,UA,45.04296,33.95407 110367,Romashkino,4689,43,230,UA,45.25647,33.25517 110371,Roshchino,4689,43,230,UA,45.60916,34.37992 110372,Roskoshnoye,4689,43,230,UA,45.65187,34.11552 110375,Rovnoye,4689,43,230,UA,45.35134,34.3523 110389,Ruch’i,4689,43,230,UA,45.78564,33.66093 110392,Rusakovka,4689,43,230,UA,45.12369,34.47458 110395,Rybache,4689,43,230,UA,44.77331,34.59609 110399,Sadovoye,4689,43,230,UA,45.31037,34.6526 110402,Saki,4689,43,230,UA,45.13424,33.59996 110403,Sakskiy rayon,4689,43,230,UA,45.27799,33.52911 110409,Sary-Bash,4689,43,230,UA,45.57142,33.78728 110416,Semisotka,4689,43,230,UA,45.24676,35.565 110418,Senokosnoye,4689,43,230,UA,45.73277,33.51552 110421,Serebryanka,4689,43,230,UA,45.63937,33.49632 110434,Shchebetovka,4689,43,230,UA,44.93821,35.158 110437,Shchyolkino,4689,43,230,UA,45.42985,35.8225 110439,Shelkovichnoye,4689,43,230,UA,45.18748,33.68807 110446,Shirokoye,4689,43,230,UA,45.20029,34.05069 110448,Shkol’noye,4689,43,230,UA,45.05758,33.89737 110452,Shtormovoye,4689,43,230,UA,45.26717,33.08693 110459,Simeiz,4689,43,230,UA,44.40646,34.00704 110461,Simferopol,4689,43,230,UA,44.95719,34.11079 110462,Simferopol Raion,4689,43,230,UA,44.9569,34.10225 110463,Sinitsyno,4689,43,230,UA,45.23862,35.24659 110465,Sizovka,4689,43,230,UA,45.34892,33.87669 110469,Skalistoye,4689,43,230,UA,44.81686,33.97791 110473,Skvortsovo,4689,43,230,UA,45.07542,33.82084 110477,Slavnoye,4689,43,230,UA,45.72176,33.23689 110481,Slavyanskoye,4689,43,230,UA,45.72768,33.32165 110497,Sofiivka,4689,43,230,UA,45.08985,33.99887 110501,Sokolinoye,4689,43,230,UA,44.55041,33.95897 110504,Solnechnaya Dolina,4689,43,230,UA,44.87185,35.10622 110505,Solnechnogorskoye,4689,43,230,UA,44.74722,34.53999 110506,Solnechnoye,4689,43,230,UA,45.04767,34.0838 110517,Sovetskiy,4689,43,230,UA,45.34267,34.92463 110518,Sovietskyi Raion,4689,43,230,UA,45.31516,34.92914 110519,Sovkhoznoye,4689,43,230,UA,45.96005,33.77155 110523,Stakhanovka,4689,43,230,UA,45.37062,33.94883 110524,Stal’noye,4689,43,230,UA,45.70814,34.56238 110536,Stary Krym,4689,43,230,UA,45.02887,35.09174 110549,Stepnoye,4689,43,230,UA,45.65212,33.77441 110553,Stolbovoye,4689,43,230,UA,45.3627,33.49584 110556,Strogonovka,4689,43,230,UA,44.9497,34.17924 110560,Sudak,4689,43,230,UA,44.84924,34.97471 110565,Susanino,4689,43,230,UA,45.49898,33.69854 110567,Suvorovo,4689,43,230,UA,46.08865,33.688 110568,Suvorovskoye,4689,43,230,UA,45.25171,33.37194 110576,Svetloye,4689,43,230,UA,45.6332,34.66264 110586,Tabachnoye,4689,43,230,UA,44.90175,33.67638 110588,Tankovoye,4689,43,230,UA,44.65829,33.80929 110596,Tenistoye,4689,43,230,UA,44.74303,33.66812 110599,Teplovka,4689,43,230,UA,45.03239,33.69588 110610,Tokarevo,4689,43,230,UA,45.28367,35.15244 110622,Trudovoye,4689,43,230,UA,44.99133,34.20311 110628,Tselinnoye,4689,43,230,UA,45.90633,34.18063 110630,Tsvetochnoye,4689,43,230,UA,45.08655,34.38521 110638,Turgenevka,4689,43,230,UA,44.69747,33.83007 110648,Uglovoye,4689,43,230,UA,44.82146,33.60452 110652,Ukrainka,4689,43,230,UA,44.8873,34.13973 110653,Ukromnoye,4689,43,230,UA,45.04272,34.00312 110658,Urozhaynoye,4689,43,230,UA,45.04522,34.13511 110664,Uvarovka,4689,43,230,UA,45.45108,34.78812 110665,Uvarovo,4689,43,230,UA,45.2626,35.66506 110666,Uyutnoye,4689,43,230,UA,45.19769,33.29796 110676,Vasilyevka,4689,43,230,UA,45.13938,34.72291 110703,Veresayevo,4689,43,230,UA,45.30551,33.50004 110711,Verkhorechye,4689,43,230,UA,44.69738,33.98696 110714,Vesele,4689,43,230,UA,44.85807,34.87952 110715,Veselovka,4689,43,230,UA,45.37733,33.21385 110717,Vilino,4689,43,230,UA,44.8456,33.67161 110721,Vinnitskoye,4689,43,230,UA,44.98129,33.7392 110723,Vinogradnoye,4689,43,230,UA,44.48149,34.12973 110724,Vinogradovo,4689,43,230,UA,45.39264,33.64668 110725,Vishennoye,4689,43,230,UA,45.14509,34.59691 110726,Vishnyovka,4689,43,230,UA,45.95966,33.95289 110728,Vladimirovka,4689,43,230,UA,45.1476,33.57583 110729,Vladislavovka,4689,43,230,UA,45.16828,35.37658 110731,Voinka,4689,43,230,UA,45.8699,33.99138 110739,Vol’noye,4689,43,230,UA,45.5657,34.3036 110740,Vorobyovo,4689,43,230,UA,45.32895,33.24654 110746,Voskhod,4689,43,230,UA,45.50999,34.39355 110748,Voykovo,4689,43,230,UA,45.38329,36.43739 110778,Yalta,4689,43,230,UA,44.50218,34.16624 110782,Yantarnoye,4689,43,230,UA,45.43473,34.22134 110785,Yarkoye,4689,43,230,UA,45.6912,34.26323 110786,Yarkoye Pole,4689,43,230,UA,45.20581,35.19848 110789,Yasnopolyanskoye,4689,43,230,UA,45.94097,34.35262 110794,Yemelyanovka,4689,43,230,UA,45.53287,34.89624 110798,Yermakovo,4689,43,230,UA,45.85364,34.48644 110800,Yevpatoriya,4689,43,230,UA,45.20091,33.36655 110813,Zalesye,4689,43,230,UA,44.88687,34.10168 110819,Zaozyornoye,4689,43,230,UA,45.15816,33.27866 110822,Zarechnoye,4689,43,230,UA,44.85048,34.26426 110829,Zavet-Leninskiy,4689,43,230,UA,45.86258,34.3916 110830,Zavetnoye,4689,43,230,UA,45.32697,34.80837 110835,Zelenogorskoye,4689,43,230,UA,45.01249,34.46848 110836,Zelyonoye,4689,43,230,UA,44.59583,34.00921 110837,Zemlyanichnoye,4689,43,230,UA,44.97444,34.83553 110838,Zernovoye,4689,43,230,UA,45.32364,34.48099 110841,Zheleznodorozhnoye,4689,43,230,UA,44.7171,33.80417 110842,Zhelyabovka,4689,43,230,UA,45.39877,34.75776 110843,Zhemchuzhina,4689,43,230,UA,45.27466,34.65778 110848,Zhuravki,4689,43,230,UA,45.12629,35.21513 110849,Zhuravli,4689,43,230,UA,45.25246,33.64104 110850,Zhuravlyovka,4689,43,230,UA,45.1768,33.9968 110855,Zimino,4689,43,230,UA,45.50797,33.51431 110862,Zolotoye Pole,4689,43,230,UA,45.12774,34.99148 110864,Zorkino,4689,43,230,UA,45.54762,34.71028 110868,Zuya,4689,43,230,UA,45.05418,34.32152 110870,Zybiny,4689,43,230,UA,45.23674,34.64987 109337,Babanka,4680,71,230,UA,48.70971,30.44827 109459,Buky,4680,71,230,UA,49.09252,30.40355 109477,Cherkasy,4680,71,230,UA,49.42854,32.06207 109498,Chervona Sloboda,4680,71,230,UA,49.37281,32.15742 109510,Chornobay,4680,71,230,UA,49.66644,32.32932 109524,Chyhyryn,4680,71,230,UA,49.08376,32.65549 109575,Drabiv,4680,71,230,UA,49.96029,32.1407 109651,Horodyshche,4680,71,230,UA,49.28489,31.44513 109709,Kamianka,4680,71,230,UA,49.0318,32.10396 109714,Kaniv,4680,71,230,UA,49.75182,31.46004 109741,Khrystynivka,4680,71,230,UA,48.81577,29.97703 109805,Korsun-Shevchenkivskyi,4680,71,230,UA,49.41894,31.25865 109909,Lebedyn,4680,71,230,UA,48.96242,31.52696 109959,Lysianka,4680,71,230,UA,49.25229,30.82946 109995,Mankivka,4680,71,230,UA,48.96349,30.33366 110042,Mliiv,4680,71,230,UA,49.33691,31.51704 110051,Monastyryshche,4680,71,230,UA,48.9909,29.8047 110054,Moshny,4680,71,230,UA,49.52754,31.73708 110112,Nove-Misto,4680,71,230,UA,48.98113,29.82813 110393,Ruska Poliana,4680,71,230,UA,49.417,31.92009 110451,Shpola,4680,71,230,UA,49.00687,31.39471 110488,Smila,4680,71,230,UA,49.22242,31.88714 110546,Stebliv,4680,71,230,UA,49.40186,31.09764 110587,Talne,4680,71,230,UA,48.88877,30.69482 110629,Tsibulev,4680,71,230,UA,49.07907,29.84727 110631,Tsvitkove,4680,71,230,UA,49.15231,31.53739 110656,Uman,4680,71,230,UA,48.74838,30.22184 110681,Vatutine,4680,71,230,UA,49.01502,31.06211 110704,Verkhniachka,4680,71,230,UA,48.82849,30.03957 110797,Yerky,4680,71,230,UA,48.99062,30.98818 110802,Yurkivka,4680,71,230,UA,49.01082,31.08797 110840,Zhashkiv,4680,71,230,UA,49.24545,30.1102 110861,Zolotonosha,4680,71,230,UA,49.66832,32.04047 110869,Zvenihorodka,4680,71,230,UA,49.07866,30.96755 109334,Avdiyivka,4692,74,230,UA,51.7766,32.79988 109341,Bakhmach,4692,74,230,UA,51.18144,32.83463 109358,Baturyn,4692,74,230,UA,51.34567,32.87794 109381,Berezna,4692,74,230,UA,51.5716,31.78456 109415,Bobrovytsya,4692,74,230,UA,50.74693,31.3948 109437,Borzna,4692,74,230,UA,51.25464,32.4269 109480,Chernihiv,4692,74,230,UA,51.50551,31.28487 109481,Chernihiv Raion,4692,74,230,UA,51.58333,31.33333 109483,Chernihivs’ka Mis’krada,4692,74,230,UA,51.49923,31.28805 109540,Desna,4692,74,230,UA,50.92731,30.76048 109542,Dihtyari,4692,74,230,UA,50.58264,32.77012 109562,Dobryanka,4692,74,230,UA,52.06314,31.18567 109645,Horodnya,4692,74,230,UA,51.89085,31.59741 109666,Ichnya,4692,74,230,UA,50.86258,32.39425 109735,Kholmy,4692,74,230,UA,51.87096,32.60063 109766,Kobyzhcha,4692,74,230,UA,50.82854,31.50439 109800,Korop,4692,74,230,UA,51.56638,32.95861 109806,Koryukivka,4692,74,230,UA,51.76877,32.24813 109824,Kozelets’,4692,74,230,UA,50.91334,31.1214 109868,Kruty,4692,74,230,UA,51.05974,32.10634 109885,Kulykivka,4692,74,230,UA,51.37345,31.64661 109901,Ladan,4692,74,230,UA,50.51959,32.58178 109918,Lisovi Sorochyntsi,4692,74,230,UA,50.6892,32.32919 109963,Lyubech,4692,74,230,UA,51.7026,30.65692 110021,Mena,4692,74,230,UA,51.5217,32.21568 110022,Mens’kyy Rayon,4692,74,230,UA,51.52148,32.02166 110101,Nizhyn,4692,74,230,UA,51.04801,31.88688 110102,Nosivka,4692,74,230,UA,50.93152,31.58282 110113,Novhorod-Sivers’kyy,4692,74,230,UA,52.00577,33.2615 110196,Olyshivka,4692,74,230,UA,51.22266,31.33314 110207,Oster,4692,74,230,UA,50.9506,30.88229 110320,Pryluky,4692,74,230,UA,50.59323,32.38761 110353,Ripky,4692,74,230,UA,51.80105,31.08383 110412,Sedniv,4692,74,230,UA,51.64473,31.56497 110415,Semenivka,4692,74,230,UA,52.17827,32.58183 110436,Shchors,4692,74,230,UA,51.81865,31.94504 110494,Snovskyy Rayon,4692,74,230,UA,51.83333,32.0 110516,Sosnytsya,4692,74,230,UA,51.52387,32.49985 110522,Sribne,4692,74,230,UA,50.66384,32.91867 110673,Varva,4692,74,230,UA,50.49503,32.71968 110847,Zhuravka,4692,74,230,UA,50.48108,32.5949 109348,Banyliv,4678,77,230,UA,48.36612,25.34549 109374,Berehomet,4678,77,230,UA,48.17882,25.34855 109439,Boyany,4678,77,230,UA,48.27077,26.12624 109486,Chernivtsi,4678,77,230,UA,48.29149,25.94034 109487,Chernivtsi Municipality,4678,77,230,UA,48.31932,25.94104 109519,Chudey,4678,77,230,UA,48.05247,25.62208 109531,Davydivka,4678,77,230,UA,48.12099,25.56461 109633,Hlyboka,4678,77,230,UA,48.08971,25.92933 109677,Ispas,4678,77,230,UA,48.29734,25.27406 109694,Kadubivtsi,4678,77,230,UA,48.58337,25.76871 109740,Khotyn,4678,77,230,UA,48.50693,26.49121 109763,Klishkivtsi,4678,77,230,UA,48.43161,26.26231 109814,Kostryzhivka,4678,77,230,UA,48.65455,25.71316 109947,Luzhany,4678,77,230,UA,48.36492,25.77173 110003,Marshintsy,4678,77,230,UA,48.21751,26.29133 110047,Molodiya,4678,77,230,UA,48.22326,26.02139 110067,Myhove,4678,77,230,UA,48.15749,25.37904 110122,Novodnistrovs’k,4678,77,230,UA,48.58303,27.4407 110145,Novoselytsya,4678,77,230,UA,48.21931,26.26531 110164,Nyzhni Petrivtsi,4678,77,230,UA,48.02847,25.72327 110331,Putyla Raion,4678,77,230,UA,48.0,25.0 110370,Ropcha,4678,77,230,UA,48.11988,25.77421 110453,Shypyntsi,4678,77,230,UA,48.37677,25.74664 110502,Sokyryany,4678,77,230,UA,48.44747,27.41678 110675,Vashkivtsi,4678,77,230,UA,48.38491,25.51023 110702,Verenchanka,4678,77,230,UA,48.54653,25.74533 110736,Voloka,4678,77,230,UA,48.19225,25.93074 110769,Vyzhnytsya,4678,77,230,UA,48.24801,25.19452 110801,Yizhivtsi,4678,77,230,UA,48.03962,25.66232 110825,Zastavna,4678,77,230,UA,48.52307,25.84369 109325,Apostolove,4675,12,230,UA,47.66003,33.71369 109332,Auly,4675,12,230,UA,48.5666,34.46111 109335,Aviatorske,4675,12,230,UA,48.36714,35.08132 109501,Chervonohryhorivka,4675,12,230,UA,47.62298,34.53887 109518,Chortomlyk,4675,12,230,UA,47.62315,34.14198 109548,Dnipro,4675,12,230,UA,48.4593,35.03865 109549,Dnipro Raion,4675,12,230,UA,48.45608,35.02167 109553,Dniprovs’ka Mis’ka Rada,4675,12,230,UA,48.46726,34.99898 109659,Hubynykha,4675,12,230,UA,48.8098,35.25602 109661,Hupalivka,4675,12,230,UA,49.11139,34.73556 109710,Kamianske,4675,12,230,UA,48.51134,34.6021 109721,Kaydaki,4675,12,230,UA,48.37678,35.12398 109872,Krynychky,4675,12,230,UA,48.37551,34.46701 109876,Kryvoriz’ka Mis’krada,4675,12,230,UA,47.9473,33.42489 109877,Kryvyi Rih,4675,12,230,UA,47.90966,33.38044 109949,Lykhivka,4675,12,230,UA,48.68735,33.92279 109970,Mahdalynivka,4675,12,230,UA,48.92111,34.91491 109971,Mahdalynivs’kyy Rayon,4675,12,230,UA,48.97612,34.96762 109999,Marhanets’,4675,12,230,UA,47.63543,34.62769 110017,Melioratyvne,4675,12,230,UA,48.63009,35.41558 110025,Mezhova,4675,12,230,UA,48.25318,36.73468 110098,Nikopol,4675,12,230,UA,47.57119,34.39637 110132,Novomoskovs’k,4675,12,230,UA,48.63799,35.24548 110131,Novomoskovsk Raion,4675,12,230,UA,48.66667,35.41667 110134,Novomykolayivka,4675,12,230,UA,48.55625,34.37399 110142,Novopokrovka,4675,12,230,UA,48.05918,34.60619 110200,Ordzhonikidze,4675,12,230,UA,47.66763,34.05957 110226,Partyzans’ke,4675,12,230,UA,48.5868,34.80948 110232,Pavlohrad,4675,12,230,UA,48.53426,35.87098 110258,Petropavlivka,4675,12,230,UA,48.45643,36.4367 110261,Petrykivka,4675,12,230,UA,48.72933,34.63358 110262,Petrykivs’kyy Rayon,4675,12,230,UA,48.68914,34.61098 110263,Piatykhatky,4675,12,230,UA,48.41333,33.71056 110268,Pidhorodne,4675,12,230,UA,48.57528,35.1068 110449,Sholokhove,4675,12,230,UA,47.69453,34.03119 110455,Shyroke,4675,12,230,UA,47.69173,33.25715 110456,Shyroke Raion,4675,12,230,UA,47.66667,33.33333 110498,Sofiyivka,4675,12,230,UA,48.04865,33.87618 110508,Solone,4675,12,230,UA,48.20805,34.87208 110509,Solone Raion,4675,12,230,UA,48.16667,35.0 110521,Spas’ke,4675,12,230,UA,48.66667,35.05385 110564,Surs’ko-Mykhaylivka,4675,12,230,UA,48.27202,34.72759 110583,Synel’nykove,4675,12,230,UA,48.32044,35.51792 110613,Tomakivka,4675,12,230,UA,47.81569,34.74137 110626,Tsarychanka,4675,12,230,UA,48.93697,34.4786 110627,Tsarychans’kyy Rayon,4675,12,230,UA,48.93329,34.53043 110710,Verkhn’odniprovs’k,4675,12,230,UA,48.65242,34.33457 110719,Vil’ne,4675,12,230,UA,47.63645,34.81387 110761,Vyshchetarasivka,4675,12,230,UA,47.56851,34.88096 110766,Vyshneve,4675,12,230,UA,48.43611,33.91556 110803,Yur”yivs’kyy Rayon,4675,12,230,UA,48.80743,35.91325 110846,Zhovti Vody,4675,12,230,UA,48.34493,33.50374 109318,Amvrosiivka Raion,4691,14,230,UA,47.75,38.5 109319,Amvrosiyivka,4691,14,230,UA,47.79348,38.47768 109333,Avdiyivka,4691,14,230,UA,48.13989,37.74255 109342,Bakhmut,4691,14,230,UA,48.59559,37.99987 109343,Bakhmut Raion,4691,14,230,UA,48.58333,38.0 109389,Bezimenne,4691,14,230,UA,47.10716,37.93815 109407,Bilyts’ke,4691,14,230,UA,48.40642,37.18111 109410,Blahodatne,4691,14,230,UA,47.87928,38.48492 109441,Boykivske,4691,14,230,UA,47.40994,38.02476 109442,Boykivske Raion,4691,14,230,UA,47.41667,38.0 109473,Chasiv Yar,4691,14,230,UA,48.59348,37.85724 109526,Chystyakove,4691,14,230,UA,48.03876,38.59685 109532,Debal’tseve,4691,14,230,UA,48.34072,38.4049 109546,Dmytrivka,4691,14,230,UA,47.93611,38.93661 109556,Dobropillia Raion,4691,14,230,UA,48.41667,37.16667 109557,Dobropillya,4691,14,230,UA,48.46147,37.08524 109563,Dokuchayevs’k,4691,14,230,UA,47.75046,37.67936 109570,Donetsk,4691,14,230,UA,48.023,37.80224 109581,Druzhkivka,4691,14,230,UA,48.63013,37.55259 109641,Horlivka,4691,14,230,UA,48.33576,38.05325 109668,Ilovays’k,4691,14,230,UA,47.92498,38.20235 109728,Khartsyz’k,4691,14,230,UA,48.04243,38.14728 109811,Kostiantynivka Raion,4691,14,230,UA,48.5,37.75 109817,Kostyantynivka,4691,14,230,UA,48.5277,37.7069 109828,Kramators’k,4691,14,230,UA,48.72305,37.55629 109848,Krasnotorka,4691,14,230,UA,48.68204,37.53266 109862,Krinichnaya,4691,14,230,UA,48.12899,38.02597 109888,Kurakhovo,4691,14,230,UA,47.98522,37.2821 109893,Kuteynykove,4691,14,230,UA,47.81227,38.28822 109940,Luhans’ke,4691,14,230,UA,48.44574,38.26153 109950,Lyman,4691,14,230,UA,48.98837,37.80225 109952,Lyman Raion,4691,14,230,UA,49.0,37.83333 109976,Makiyivka,4691,14,230,UA,48.04782,37.92576 109977,Makiyivs’ka Mis’krada,4691,14,230,UA,48.06287,38.03075 109994,Manhush,4691,14,230,UA,47.05582,37.31068 109997,Maryinka,4691,14,230,UA,47.94527,37.50544 110000,Mariupol,4691,14,230,UA,47.09514,37.54131 110016,Melekyne,4691,14,230,UA,46.95957,37.39981 110055,Mospyne,4691,14,230,UA,47.89081,38.06395 110075,Myrnohrad,4691,14,230,UA,48.30523,37.26091 110097,Nikolske Raion,4691,14,230,UA,47.25,37.25 110120,Novoazovsk,4691,14,230,UA,47.11389,38.08599 110123,Novodonets’ke,4691,14,230,UA,48.63526,36.98477 110161,Novyy Svit,4691,14,230,UA,47.80591,38.02112 110167,Nyzhnya Krynka,4691,14,230,UA,48.1135,38.16064 110219,Pyatypillya,4691,14,230,UA,48.0159,38.09979 110291,Pokrovsk,4691,14,230,UA,48.28198,37.17585 110292,Pokrovsk Raion,4691,14,230,UA,48.25,37.16667 110359,Rodyns’ke,4691,14,230,UA,48.35199,37.20602 110385,Rozsypne,4691,14,230,UA,48.14966,38.57619 110408,Sartana,4691,14,230,UA,47.17436,37.69266 110413,Selydivs’ka Mis’krada,4691,14,230,UA,48.1453,37.29962 110414,Selydove,4691,14,230,UA,48.14708,37.30032 110420,Serebryanka,4691,14,230,UA,48.91917,38.13494 110428,Shakhtars’k,4691,14,230,UA,48.05657,38.43826 110435,Shcherbynivka,4691,14,230,UA,48.39489,37.79102 110454,Shyroke,4691,14,230,UA,47.95711,38.2316 110464,Sivers’k,4691,14,230,UA,48.86699,38.10007 110486,Sloviansk,4691,14,230,UA,48.86667,37.61667 110487,Sloviansk Raion,4691,14,230,UA,48.91667,37.5 110493,Snizhne,4691,14,230,UA,48.02612,38.77225 110503,Soledar,4691,14,230,UA,48.67935,38.08902 110531,Starobesheve,4691,14,230,UA,47.75038,38.03051 110539,Staryy Krym,4691,14,230,UA,47.16146,37.48934 110552,Stizhkivs’ke,4691,14,230,UA,48.11333,38.4925 110575,Svetlodarsk,4691,14,230,UA,48.43374,38.22331 110579,Svyatogorsk,4691,14,230,UA,49.03333,37.56667 110581,Syedove,4691,14,230,UA,47.07678,38.15602 110595,Temriuk,4691,14,230,UA,47.26857,36.98115 110616,Toretsk,4691,14,230,UA,48.39869,37.84787 110659,Urzuf,4691,14,230,UA,46.91562,37.09961 110732,Volnovakha,4691,14,230,UA,47.60103,37.49674 110753,Vuhlehirs’k,4691,14,230,UA,48.31474,38.27423 110777,Yalta,4691,14,230,UA,46.96279,37.27365 110790,Yasynuvata,4691,14,230,UA,48.1298,37.8594 110791,Yasynuvata Raion,4691,14,230,UA,48.16667,37.83333 110796,Yenakiyeve,4691,14,230,UA,48.23331,38.21137 110867,Zuhres,4691,14,230,UA,48.0114,38.26444 109397,Bili Oslavy,4682,26,230,UA,48.48722,24.70078 109405,Bilshivtsi,4682,26,230,UA,49.18333,24.75 109420,Bohorodchans’kyy Rayon,4682,26,230,UA,48.72278,24.38042 109421,Bohorodchany,4682,26,230,UA,48.807,24.53834 109423,Bolekhiv,4682,26,230,UA,49.06607,23.86435 109424,Bolekhivs’ka Mis’krada,4682,26,230,UA,49.06255,23.84339 109433,Borshchevskiy Rayon,4682,26,230,UA,48.75,26.0 109447,Broshniv-Osada,4682,26,230,UA,48.99621,24.19748 109461,Burshtyn,4682,26,230,UA,49.25867,24.62777 109462,Burshtyns’ka Mis’krada,4682,26,230,UA,49.25217,24.6332 109466,Bystrytsya,4682,26,230,UA,48.45931,24.24545 109467,Bytkiv,4682,26,230,UA,48.62968,24.47398 109478,Chernelytsya,4682,26,230,UA,48.81207,25.42477 109488,Cherniyiv,4682,26,230,UA,48.85658,24.71388 109496,Chernyatyn,4682,26,230,UA,48.66034,25.44832 109512,Chornoliztsi,4682,26,230,UA,48.83034,24.89576 109533,Delyatyn,4682,26,230,UA,48.52354,24.62466 109565,Dolyna,4682,26,230,UA,48.9733,24.00944 109567,Dolyns’kyy Rayon,4682,26,230,UA,48.89148,23.84343 109625,Halych,4682,26,230,UA,49.12179,24.72578 109626,Halyts’kyy Rayon,4682,26,230,UA,49.16169,24.71797 109643,Horodenka,4682,26,230,UA,48.67274,25.50163 109644,Horodenkivs’kyy Rayon,4682,26,230,UA,48.70617,25.42008 109665,Hvizd,4682,26,230,UA,48.68517,24.55055 109683,Ivano-Frankivs’ka Mis’krada,4682,26,230,UA,48.91177,24.72831 109682,Ivano-Frankivsk,4682,26,230,UA,48.9215,24.70972 109703,Kalus’kyy Rayon,4682,26,230,UA,49.06088,24.38766 109702,Kalush,4682,26,230,UA,49.01187,24.37308 109745,Khymchyn,4682,26,230,UA,48.38639,25.14803 109776,Kolomyia,4682,26,230,UA,48.53115,25.03649 109777,Kolomyys’kyy Rayon,4682,26,230,UA,48.58586,24.993 109807,Kosiv,4682,26,230,UA,48.31071,25.09575 109808,Kosivs’kyy Rayon,4682,26,230,UA,48.32569,24.98641 109809,Kosmach,4682,26,230,UA,48.75089,24.36731 109829,Krasna,4682,26,230,UA,48.57571,24.70027 109894,Kuty,4682,26,230,UA,48.25868,25.17946 109903,Lanchyn,4682,26,230,UA,48.55781,24.75622 109996,Manyava,4682,26,230,UA,48.65541,24.37537 110002,Markova,4682,26,230,UA,48.67576,24.41382 110078,Nadvirna,4682,26,230,UA,48.6348,24.56936 110079,Nadvirnyans’kyy Rayon,4682,26,230,UA,48.55387,24.50381 110086,Nebyliv,4682,26,230,UA,48.81526,24.21657 110158,Novytsya,4682,26,230,UA,48.96345,24.33542 110170,Obertyn,4682,26,230,UA,48.70032,25.17012 110212,Otyniya,4682,26,230,UA,48.73767,24.86111 110229,Pasichna,4682,26,230,UA,48.57152,24.43003 110234,Pechenizhyn,4682,26,230,UA,48.51551,24.89423 110255,Petranka,4682,26,230,UA,48.90246,24.30347 110279,Pniv,4682,26,230,UA,48.61783,24.52872 110303,Porohy,4682,26,230,UA,48.68755,24.26322 110335,Radcha,4682,26,230,UA,48.85023,24.65502 110350,Rechka,4682,26,230,UA,48.28034,24.9333 110360,Rohatyn,4682,26,230,UA,49.409,24.60927 110361,Rohatyns’kyy Rayon,4682,26,230,UA,49.38025,24.57111 110378,Rozhniativ,4682,26,230,UA,48.93576,24.16379 110379,Rozhniv,4682,26,230,UA,48.36597,25.2258 110380,Rozhnyativs’kyy Rayon,4682,26,230,UA,48.7589,24.07588 110400,Sadzhavka,4682,26,230,UA,48.56603,24.7882 110441,Sheshory,4682,26,230,UA,48.33197,24.98329 110491,Sniatyn,4682,26,230,UA,48.44692,25.56937 110495,Snyatyns’kyy Rayon,4682,26,230,UA,48.47674,25.41153 110512,Solotvyn,4682,26,230,UA,48.70212,24.42212 110520,Spas,4682,26,230,UA,48.88992,24.06293 110529,Stari Bohorodchany,4682,26,230,UA,48.83361,24.5243 110530,Stari Kuty,4682,26,230,UA,48.27093,25.17293 110551,Stetseva,4682,26,230,UA,48.52767,25.57572 110571,Svarychiv,4682,26,230,UA,48.9622,24.19658 110593,Tatariv,4682,26,230,UA,48.34558,24.57836 110608,Tlumach,4682,26,230,UA,48.86403,25.00325 110609,Tlumats’kyy Rayon,4682,26,230,UA,48.82924,25.09055 110644,Tysmenychany,4682,26,230,UA,48.77168,24.66626 110646,Tysmenyts’kyy Rayon,4682,26,230,UA,48.92246,24.74486 110645,Tysmenytsya,4682,26,230,UA,48.90219,24.84482 110650,Uhryniv,4682,26,230,UA,48.9552,24.69292 110697,Velykyy Klyuchiv,4682,26,230,UA,48.47092,24.94677 110707,Verkhniy Yasenov,4682,26,230,UA,48.16156,24.94532 110712,Verkhovyna,4682,26,230,UA,48.15571,24.79112 110741,Vorokhta,4682,26,230,UA,48.28459,24.56536 110770,Yabluniv,4682,26,230,UA,48.40418,24.93874 110771,Yablunytsya,4682,26,230,UA,48.31742,24.48448 110779,Yamnytsya,4682,26,230,UA,48.98972,24.7075 110783,Yaremchans’ks Mis’krada,4682,26,230,UA,48.33234,24.57426 110784,Yaremche,4682,26,230,UA,48.45157,24.55436 110806,Zabolotiv,4682,26,230,UA,48.47054,25.28571 110809,Zahvizdya,4682,26,230,UA,48.91836,24.65275 110823,Zarichchya,4682,26,230,UA,48.52144,24.64857 109344,Balakliya,4686,63,230,UA,49.4627,36.85951 109352,Barvinkove,4686,63,230,UA,48.9097,37.02051 109380,Berezivka,4686,63,230,UA,49.43935,35.70736 109390,Bezlyudivka,4686,63,230,UA,49.87547,36.26539 109413,Blyznyuky,4686,63,230,UA,48.85775,36.55505 109419,Bohodukhiv,4686,63,230,UA,50.16466,35.52765 109432,Borova,4686,63,230,UA,49.3777,37.62136 109458,Budy,4686,63,230,UA,49.89133,36.02096 109469,Chapayeve,4686,63,230,UA,49.36625,35.87486 109504,Chervonyy Oskil,4686,63,230,UA,49.17906,37.42593 109522,Chuhuyiv,4686,63,230,UA,49.83588,36.68803 109539,Derhachi,4686,63,230,UA,50.10659,36.12112 109590,Dvorichna,4686,63,230,UA,49.85019,37.68262 109596,Eskhar,4686,63,230,UA,49.79614,36.59047 109663,Huty,4686,63,230,UA,50.13322,35.34394 109691,Izyum,4686,63,230,UA,49.20875,37.24849 109724,Kehychivka,4686,63,230,UA,49.28656,35.76153 109727,Kharkiv,4686,63,230,UA,49.98081,36.25272 109736,Khorosheve,4686,63,230,UA,49.85413,36.21704 109757,Kivsharivka,4686,63,230,UA,49.63096,37.68821 109767,Kochetok,4686,63,230,UA,49.88005,36.73723 109775,Kolomak,4686,63,230,UA,49.83987,35.30441 109804,Korotych,4686,63,230,UA,49.94737,36.03736 109838,Krasnohrad,4686,63,230,UA,49.38009,35.44186 109841,Krasnokuts’k,4686,63,230,UA,50.06602,35.16275 109843,Krasnopavlivka,4686,63,230,UA,49.13643,36.31911 109886,Kulynychi,4686,63,230,UA,49.98178,36.38283 109887,Kupjansk,4686,63,230,UA,49.71055,37.61517 109932,Lozova,4686,63,230,UA,48.88937,36.31755 109951,Lyman,4686,63,230,UA,49.59769,36.4703 109966,Lyubotyn,4686,63,230,UA,49.94691,35.92907 109979,Mala Danylivka,4686,63,230,UA,50.06354,36.16564 109990,Malynivka,4686,63,230,UA,49.81667,36.73333 109991,Manchenky,4686,63,230,UA,49.97982,35.85835 110023,Merefa,4686,63,230,UA,49.82302,36.05069 110110,Nova Vodolaha,4686,63,230,UA,49.71901,35.86578 110141,Novopokrovka,4686,63,230,UA,49.83349,36.54771 110222,Panyutyne,4686,63,230,UA,48.93692,36.27563 110242,Peresichna,4686,63,230,UA,50.02452,35.97871 110247,Pervomaiskyi Raion,4686,63,230,UA,49.41667,36.33333 110252,Pervomays’kyy,4686,63,230,UA,49.38742,36.21471 110257,Petrivs’ke,4686,63,230,UA,49.17695,36.89999 110275,Pivdenne,4686,63,230,UA,49.88315,36.06785 110290,Pokotylivka,4686,63,230,UA,49.91343,36.17511 110317,Prudyanka,4686,63,230,UA,50.23606,36.16835 110319,Prykolotne,4686,63,230,UA,50.16273,37.34524 110401,Sakhnovshchyna,4686,63,230,UA,49.15166,35.87198 110411,Savyntsi,4686,63,230,UA,49.40257,37.06266 110445,Shevchenkove,4686,63,230,UA,49.69585,37.17348 110476,Slatyne,4686,63,230,UA,50.21041,36.15376 110484,Slobozhans’ke,4686,63,230,UA,49.59701,36.52618 110511,Solonytsivka,4686,63,230,UA,49.99682,36.03464 110540,Staryy Merchyk,4686,63,230,UA,49.98147,35.75904 110541,Staryy Saltiv,4686,63,230,UA,50.07619,36.78852 110558,Studenok,4686,63,230,UA,49.09107,37.48697 110663,Utkivka,4686,63,230,UA,49.78583,36.07528 110670,Valky,4686,63,230,UA,49.83597,35.61223 110680,Vasyshcheve,4686,63,230,UA,49.82852,36.32691 110696,Velykyy Burluk,4686,63,230,UA,50.0617,37.38373 110699,Verbivka,4686,63,230,UA,49.41667,35.53333 110747,Vovchans’k,4686,63,230,UA,50.29078,36.94108 110754,Vvedenka,4686,63,230,UA,49.82372,36.50264 110768,Vysokyy,4686,63,230,UA,49.89156,36.12175 110807,Zachepylivka,4686,63,230,UA,49.19385,35.23943 110857,Zmiyiv,4686,63,230,UA,49.67453,36.34775 110859,Zolochiv,4686,63,230,UA,50.27985,35.98179 109331,Askaniya-Nova,4684,65,230,UA,46.45135,33.86889 109361,Bekhtery,4684,65,230,UA,46.2479,32.29123 109388,Beryslav,4684,65,230,UA,46.84152,33.42838 109404,Bilozerka,4684,65,230,UA,46.6248,32.44251 109454,Brylivka,4684,65,230,UA,46.42476,33.14721 109472,Chaplynka,4684,65,230,UA,46.36507,33.54027 109511,Chornobayivka,4684,65,230,UA,46.69411,32.55371 109516,Chornyanka,4684,65,230,UA,46.65222,33.35904 109523,Chulakivka,4684,65,230,UA,46.35763,32.3514 109554,Dnipryany,4684,65,230,UA,46.74631,33.27288 109587,Dudchany,4684,65,230,UA,47.18557,33.7639 109628,Heniches’k,4684,65,230,UA,46.17592,34.8034 109629,Heniches’kyy Rayon,4684,65,230,UA,46.26451,34.74488 109636,Hola Prystan’,4684,65,230,UA,46.52719,32.52417 109642,Hornostayivka,4684,65,230,UA,47.00777,33.72899 109679,Ivanivka,4684,65,230,UA,46.72082,34.55298 109697,Kakhovka,4684,65,230,UA,46.81371,33.48698 109698,Kalanchak,4684,65,230,UA,46.25623,33.2907 109722,Kayiry,4684,65,230,UA,46.94537,33.70591 109729,Kherson,4684,65,230,UA,46.65581,32.6178 109786,Komyshany,4684,65,230,UA,46.63716,32.50719 109823,Kozachi Laheri,4684,65,230,UA,46.70372,32.9776 109833,Krasne,4684,65,230,UA,46.13088,32.7691 109907,Lazurne,4684,65,230,UA,46.084,32.52955 109967,Lyubymivka,4684,65,230,UA,46.81063,33.56862 109983,Malokakhovka,4684,65,230,UA,46.78142,33.4479 110104,Nova Kakhovka,4684,65,230,UA,46.75451,33.34864 110105,Nova Mayachka,4684,65,230,UA,46.59996,33.22707 110125,Novofedorivka,4684,65,230,UA,46.17128,32.31781 110137,Novooleksiyivka,4684,65,230,UA,46.22472,34.64031 110153,Novovorontsovka,4684,65,230,UA,47.50035,33.91748 110165,Nyzhni Sirohozy,4684,65,230,UA,46.84842,34.38044 110227,Partyzany,4684,65,230,UA,46.33383,34.75314 110336,Radens’k,4684,65,230,UA,46.5486,32.92787 110466,Skadovs’k,4684,65,230,UA,46.1161,32.91124 110525,Stanislav,4684,65,230,UA,46.56909,32.14777 110634,Tsyurupyns’k,4684,65,230,UA,46.61842,32.7189 110685,Velyka Lepetykha,4684,65,230,UA,47.17572,33.94362 110687,Velyka Oleksandrivka,4684,65,230,UA,47.31969,33.30373 110690,Velyki Kopani,4684,65,230,UA,46.48684,32.97498 110706,Verkhniy Rohachyk,4684,65,230,UA,47.25053,34.33797 110760,Vynohradove,4684,65,230,UA,46.36957,32.9398 110767,Vysokopillya,4684,65,230,UA,47.49187,33.53061 110817,Zaliznyy Port,4684,65,230,UA,46.12337,32.29892 109322,Antoniny,4681,68,230,UA,49.80974,26.87714 109360,Bazaliya,4681,68,230,UA,49.71267,26.47331 109537,Derazhnya,4681,68,230,UA,49.2692,27.43382 109538,Derazhnyans’kyy Rayon,4681,68,230,UA,49.22676,27.46603 109589,Dunaivtsi,4681,68,230,UA,48.88909,26.85636 109650,Horodok,4681,68,230,UA,49.16374,26.58394 109690,Izyaslav,4681,68,230,UA,50.11947,26.82125 109708,Kamianets-Podilskyi,4681,68,230,UA,48.6845,26.58559 109731,Khmel’nyts’kyy Rayon,4681,68,230,UA,49.44511,26.93268 109730,Khmelnytskyi,4681,68,230,UA,49.42161,26.99653 109856,Krasyliv,4681,68,230,UA,49.65186,26.97253 109916,Letychiv,4681,68,230,UA,49.38263,27.63051 109975,Makiv,4681,68,230,UA,48.79487,26.69188 110015,Medzhybizh,4681,68,230,UA,49.43748,27.40487 110080,Narkevychi,4681,68,230,UA,49.51717,26.64178 110093,Netishyn,4681,68,230,UA,50.34004,26.64171 110109,Nova Ushytsya,4681,68,230,UA,48.83716,27.27434 110146,Novoselytsya,4681,68,230,UA,50.0703,27.51955 110294,Polonne,4681,68,230,UA,50.12424,27.51087 110299,Poninka,4681,68,230,UA,50.18492,27.53629 110440,Shepetivka,4681,68,230,UA,50.18545,27.06365 110479,Slavuta,4681,68,230,UA,50.30155,26.86506 110489,Smotrych,4681,68,230,UA,48.66149,26.56031 110490,Smyga,4681,68,230,UA,50.2391,25.76575 110527,Stara Syniava,4681,68,230,UA,49.60318,27.61909 110533,Starokostiantyniv,4681,68,230,UA,49.75764,27.20342 110787,Yarmolyntsi,4681,68,230,UA,49.19236,26.83725 110811,Zakupne,4681,68,230,UA,49.11944,26.33756 110851,Zhvanets,4681,68,230,UA,48.54968,26.48744 109529,Darnytsia Raion,4676,30,230,UA,50.41333,30.69305 109541,Desnyans’kyy Rayon,4676,30,230,UA,50.5355,30.60875 109550,Dnipro Raion,4676,30,230,UA,50.46756,30.63194 109637,Holosiiv Raion,4676,30,230,UA,50.32749,30.5674 109819,Kotsyubyns’ke,4676,30,230,UA,50.48836,30.32957 109897,Kyiv,4676,30,230,UA,50.45466,30.5238 110235,Pechersk Raion,4676,30,230,UA,50.41902,30.56602 110286,Podil’s’kyy Rayon,4676,30,230,UA,50.45,30.53333 110313,Prolisky,4676,30,230,UA,50.39118,30.78 110442,Shevchenkivs’kyy Rayon,4676,30,230,UA,50.43333,30.51667 110507,Solomianka Rayon,4676,30,230,UA,50.42886,30.45135 110580,Svyatoshyns’kyy Rayon,4676,30,230,UA,50.48533,30.3805 109307,Adzhamka,4677,35,230,UA,48.54245,32.53542 109411,Blahovishchenske Raion,4677,35,230,UA,48.25,30.25 109416,Bobrynets,4677,35,230,UA,48.05896,32.16641 109544,Dmytrivka,4677,35,230,UA,48.7969,32.71645 109558,Dobrovelychkivka,4677,35,230,UA,48.38778,31.18028 109559,Dobrovelychkivs’kyy Rayon,4677,35,230,UA,48.36935,31.16354 109566,Dolynska,4677,35,230,UA,48.11041,32.76449 109568,Dolyns’kyy Rayon,4677,35,230,UA,48.16327,32.88318 109627,Hayvoron,4677,35,230,UA,48.33958,29.86791 109715,Kapitanivka,4677,35,230,UA,48.91719,31.71671 109751,Kirovohrads’ka Mis’krada,4677,35,230,UA,48.52185,32.24367 109783,Kompaniyivka,4677,35,230,UA,48.25115,32.20795 109867,Kropyvnytskyi,4677,35,230,UA,48.5132,32.2597 109934,Lozuvatka,4677,35,230,UA,48.0571,33.28581 109955,Lypnyazhka,4677,35,230,UA,48.44694,31.07611 109981,Mala Vyska,4677,35,230,UA,48.64308,31.63657 109986,Malovyskivs’kyy Rayon,4677,35,230,UA,48.5768,31.57594 110048,Molodizhne,4677,35,230,UA,48.17732,32.66015 110107,Nova Praha,4677,35,230,UA,48.56821,32.90273 110114,Novhorodka,4677,35,230,UA,48.36506,32.65785 110119,Novoarkhanhel’s’k,4677,35,230,UA,48.65803,30.81821 110135,Novomyrhorod,4677,35,230,UA,48.78105,31.64204 110150,Novoukrayinka,4677,35,230,UA,48.32635,31.52852 110160,Novyy Starodub,4677,35,230,UA,48.5158,33.17329 110186,Oleksandrivka,4677,35,230,UA,48.96336,32.23492 110189,Oleksandriya,4677,35,230,UA,48.66961,33.11593 110190,Oleksandriys’ke,4677,35,230,UA,48.60767,32.98347 110198,Onufriyivka,4677,35,230,UA,48.90716,33.44869 110221,Pantayivka,4677,35,230,UA,48.674,32.8841 110233,Pavlysh,4677,35,230,UA,48.91762,33.35691 110238,Perehonivka,4677,35,230,UA,48.53552,30.51923 110259,Petrove,4677,35,230,UA,48.32467,33.25617 110281,Pobugskoye,4677,35,230,UA,48.16579,30.59274 110297,Pomichna,4677,35,230,UA,48.24222,31.41583 110325,Pryyutivka,4677,35,230,UA,48.72094,33.07078 110355,Rivne,4677,35,230,UA,48.24742,31.75432 110559,Subottsi,4677,35,230,UA,48.65545,32.52093 110577,Svitlovods’k,4677,35,230,UA,49.04894,33.24106 110643,Tyshkivka,4677,35,230,UA,48.49665,30.94229 110662,Ustynivka,4677,35,230,UA,47.95507,32.53674 110793,Yelyzavethradka,4677,35,230,UA,48.80381,32.4046 110828,Zavallya,4677,35,230,UA,48.21354,30.01558 110856,Zlynka,4677,35,230,UA,48.48521,31.53906 110858,Znomenka,4677,35,230,UA,48.71278,32.66472 109353,Baryshivka,4671,32,230,UA,50.36098,31.32173 109354,Baryshivs’kyy Rayon,4671,32,230,UA,50.36919,31.34896 109393,Bila Tserkva,4671,32,230,UA,49.80939,30.11209 109394,Bila Tserkva Raion,4671,32,230,UA,49.75,30.08333 109422,Bohuslav,4671,32,230,UA,49.54939,30.8744 109426,Borispol’skiy Rayon,4671,32,230,UA,50.3345,31.0247 109427,Borodianka,4671,32,230,UA,50.64484,29.9201 109429,Borodyans’kyy Rayon,4671,32,230,UA,50.65889,29.88556 109431,Borova,4671,32,230,UA,50.17625,30.10429 109436,Boryspil’,4671,32,230,UA,50.35269,30.95501 109440,Boyarka,4671,32,230,UA,50.31911,30.29728 109449,Brovary,4671,32,230,UA,50.51809,30.80671 109450,Brovary Raion,4671,32,230,UA,50.58333,31.0 109456,Bucha,4671,32,230,UA,50.54345,30.21201 109468,Chabany,4671,32,230,UA,50.34071,30.42356 109494,Chernyakhivka,4671,32,230,UA,50.21882,31.93082 109591,Dymer,4671,32,230,UA,50.78647,30.3026 109597,Fastiv,4671,32,230,UA,50.0767,29.9177 109598,Fastiv Raion,4671,32,230,UA,50.08333,30.0 109631,Hlevakha,4671,32,230,UA,50.27423,30.32706 109635,Hnidyn,4671,32,230,UA,50.32899,30.71059 109639,Horenka,4671,32,230,UA,50.55731,30.33217 109655,Hostomel,4671,32,230,UA,50.56841,30.2651 109672,Irpin,4671,32,230,UA,50.52175,30.25055 109673,Irpins’ka Mis’krada,4671,32,230,UA,50.51585,30.24099 109680,Ivankiv,4671,32,230,UA,50.93865,29.89426 109681,Ivankiv Raion,4671,32,230,UA,51.0,29.91667 109695,Kaharlyk,4671,32,230,UA,49.86233,30.82815 109696,Kaharlyk Raion,4671,32,230,UA,49.91667,30.75 109705,Kalynove,4671,32,230,UA,49.38179,30.45137 109716,Karapyshi,4671,32,230,UA,49.64237,30.79002 109720,Katyuzhanka,4671,32,230,UA,50.80595,30.13763 109739,Khotiv,4671,32,230,UA,50.33069,30.46836 109749,Kirove,4671,32,230,UA,50.3689,31.12066 109758,Klavdiyevo-Tarasove,4671,32,230,UA,50.58416,30.01134 109764,Knyazhichi,4671,32,230,UA,50.46275,30.78369 109768,Kodra,4671,32,230,UA,50.59488,29.55873 109797,Korniyivka,4671,32,230,UA,50.41661,31.46261 109825,Kozhanka,4671,32,230,UA,49.97231,29.76424 109855,Krasyatychi,4671,32,230,UA,51.07636,29.64899 109865,Kriukivschina,4671,32,230,UA,50.37153,30.36861 109874,Kryva Hora,4671,32,230,UA,51.38495,30.19978 109900,Kyyevo-Svyatoshyns’kyy Rayon,4671,32,230,UA,50.3853,30.23129 109925,Liutizh,4671,32,230,UA,50.6835,30.39324 109972,Makariv,4671,32,230,UA,50.46408,29.81128 109973,Makariv Raion,4671,32,230,UA,50.5,29.75 110035,Mirovka,4671,32,230,UA,49.93126,30.62309 110057,Motovylivka,4671,32,230,UA,50.15821,30.07421 110076,Myronivka,4671,32,230,UA,49.66007,30.98225 110116,Novi Petrivtsi,4671,32,230,UA,50.62754,30.4431 110173,Obukhiv,4671,32,230,UA,50.10689,30.61848 110174,Obukhiv Raion,4671,32,230,UA,50.16667,30.66667 110175,Obukhivs’ka Mis’krada,4671,32,230,UA,50.11425,30.63293 110239,Pereiaslav-Khmelnytskyi,4671,32,230,UA,50.06739,31.44969 110240,Pereiaslav-Khmelnytskyi Raion,4671,32,230,UA,50.08333,31.5 110274,Piskivka,4671,32,230,UA,50.69378,29.61934 110287,Pohreby,4671,32,230,UA,50.55453,30.64455 110327,Pukhivka,4671,32,230,UA,50.6097,30.7177 110363,Rokytne,4671,32,230,UA,49.68665,30.47384 110365,Rokytne Raion,4671,32,230,UA,49.75,30.5 110373,Roskoshnyy,4671,32,230,UA,49.37087,30.18471 110398,Rzhyshchiv,4671,32,230,UA,49.96886,31.04628 110417,Semypolky,4671,32,230,UA,50.72627,30.93441 110474,Skvyra,4671,32,230,UA,49.73177,29.66569 110475,Skvyrs’kyy Rayon,4671,32,230,UA,49.74177,29.70043 110480,Slavutych,4671,32,230,UA,51.5225,30.71806 110499,Sofiyivska Borschagivka,4671,32,230,UA,50.41005,30.36724 110543,Stavyshche,4671,32,230,UA,49.39124,30.19022 110545,Stayki,4671,32,230,UA,50.07818,30.9038 110590,Tarashcha,4671,32,230,UA,49.55832,30.49259 110606,Tetiiv,4671,32,230,UA,49.3767,29.66474 110620,Trebukhiv,4671,32,230,UA,50.48432,30.90304 110624,Trypillia,4671,32,230,UA,50.11802,30.78141 110632,Tsybli,4671,32,230,UA,49.99484,31.56281 110651,Ukrainka,4671,32,230,UA,50.14317,30.74612 110669,Uzyn,4671,32,230,UA,49.82619,30.41487 110678,Vasylkiv,4671,32,230,UA,50.18693,30.31346 110679,Vasylkiv Raion,4671,32,230,UA,50.16667,30.33333 110684,Velyka Dymerka,4671,32,230,UA,50.59333,30.90313 110733,Volodarka,4671,32,230,UA,49.52484,29.91222 110742,Voronkov,4671,32,230,UA,50.22235,30.89967 110745,Vorzel’,4671,32,230,UA,50.5444,30.15305 110762,Vyshgorodskiy Rayon,4671,32,230,UA,50.58333,30.5 110763,Vyshhorod,4671,32,230,UA,50.58476,30.4898 110765,Vyshneve,4671,32,230,UA,50.38913,30.3705 110773,Yahotyn,4671,32,230,UA,50.27975,31.76246 110774,Yahotyns’kyy Rayon,4671,32,230,UA,50.25722,31.89456 110872,Z·hurivs’kyy Rayon,4671,32,230,UA,50.47192,31.79423 110839,Zgurovka,4671,32,230,UA,50.50276,31.78492 109311,Alchevs’k,4673,09,230,UA,48.46893,38.81669 109312,Alchevs’ka Mis’krada,4673,09,230,UA,48.48029,38.7969 109323,Antratsyt,4673,09,230,UA,48.11503,39.09128 109324,Antratsytivs’kyy Rayon,4673,09,230,UA,48.1245,39.05683 109329,Artemivs’k,4673,09,230,UA,48.44061,38.732 109359,Bayrachky,4673,09,230,UA,48.392,38.60174 109395,Bile,4673,09,230,UA,48.49523,39.05051 109400,Bilohorivka,4673,09,230,UA,48.92503,38.24822 109401,Bilokurakyne,4673,09,230,UA,49.5341,38.73067 109403,Bilovodsk,4673,09,230,UA,49.20846,39.58975 109408,Biryukove,4673,09,230,UA,47.95631,39.73843 109453,Bryanka,4673,09,230,UA,48.511,38.67222 109460,Buran,4673,09,230,UA,48.30003,39.61526 109502,Chervonopartyzans’k,4673,09,230,UA,48.07613,39.79618 109515,Chornukhyne,4673,09,230,UA,48.32339,38.52272 109574,Dovzhanskyy Rayon,4673,09,230,UA,48.0,39.66667 109630,Hirs’ke,4673,09,230,UA,48.73468,38.49541 109693,Kadiyivka,4673,09,230,UA,48.56818,38.64352 109754,Kirovs’k,4673,09,230,UA,48.63751,38.6428 109755,Kirovs’ka Mis’krada,4673,09,230,UA,48.63485,38.64753 109760,Klenovyy,4673,09,230,UA,48.11934,39.4588 109853,Krasnyy Kut,4673,09,230,UA,48.20138,38.79765 109854,Krasnyy Luch,4673,09,230,UA,48.13954,38.93715 109860,Kreminna,4673,09,230,UA,49.0495,38.21792 109864,Kripens’kyy,4673,09,230,UA,48.07709,39.058 109911,Lenina,4673,09,230,UA,48.42944,39.14556 109931,Lozno-Oleksandrivka,4673,09,230,UA,49.8391,38.74098 109939,Luhans’ka Mis’krada,4673,09,230,UA,48.58083,39.35478 109938,Luhansk,4673,09,230,UA,48.56705,39.31706 109945,Lutuhyne,4673,09,230,UA,48.40507,39.22675 109946,Lutuhyns’kyy Rayon,4673,09,230,UA,48.38509,39.21209 109960,Lysychans’k,4673,09,230,UA,48.90485,38.44207 109974,Makariv Yar,4673,09,230,UA,48.57768,39.71944 110001,Markivka,4673,09,230,UA,49.5229,39.57055 110030,Millerovo,4673,09,230,UA,48.16829,39.16537 110031,Milove,4673,09,230,UA,49.37528,40.13222 110038,Miusyns’k,4673,09,230,UA,48.0775,38.90364 110049,Molodohvardiys’k,4673,09,230,UA,48.34511,39.65244 110143,Novopskov,4673,09,230,UA,49.5464,39.08987 110166,Nyzhnya Duvanka,4673,09,230,UA,49.58464,38.17429 110231,Pavlivka,4673,09,230,UA,49.60864,38.70917 110244,Pereval’s’k,4673,09,230,UA,48.43779,38.84384 110250,Pervomays’k,4673,09,230,UA,48.62988,38.54806 110300,Popasna,4673,09,230,UA,48.63328,38.37804 110324,Pryvillya,4673,09,230,UA,49.01501,38.30457 110374,Roven’ky,4673,09,230,UA,48.08331,39.37764 110384,Rozkishne,4673,09,230,UA,48.48959,39.27881 110387,Rubizhans’ka Mis’krada,4673,09,230,UA,49.0146,38.38909 110388,Rubizhne,4673,09,230,UA,49.01229,38.37967 110433,Shchastya,4673,09,230,UA,48.73963,39.2323 110460,Simeykyne,4673,09,230,UA,48.32643,39.53366 110485,Slov`yanoserbsk,4673,09,230,UA,48.69779,38.98133 110514,Sorokyne,4673,09,230,UA,48.29235,39.73921 110515,Sorokynskyi Rayon,4673,09,230,UA,48.33333,39.75 110526,Stanytsya Luhans’ka,4673,09,230,UA,48.65433,39.47943 110532,Starobil’s’k,4673,09,230,UA,49.27832,38.91069 110572,Svatove,4673,09,230,UA,49.41029,38.15035 110573,Sverdlovs’k,4673,09,230,UA,48.08964,39.65243 110574,Sverdlovs’ka Mis’krada,4673,09,230,UA,48.0685,39.58057 110582,Syevyerodonets’k,4673,09,230,UA,48.94832,38.49166 110597,Teple,4673,09,230,UA,48.31245,39.56284 110618,Toshkivka,4673,09,230,UA,48.77914,38.57903 110625,Tr’okhizbenka,4673,09,230,UA,48.75751,38.96333 110657,Uralo-Kavkaz,4673,09,230,UA,48.3211,39.80302 110661,Uspenka,4673,09,230,UA,48.39077,39.16284 110812,Zalesnoye,4673,09,230,UA,48.03104,38.80934 110866,Zoryns’k,4673,09,230,UA,48.41194,38.62361 110871,Zymohiria,4673,09,230,UA,48.58528,38.9375 109366,Belz,4672,46,230,UA,50.38226,24.00642 109391,Bibrka,4672,46,230,UA,49.64093,24.28874 109435,Boryslav,4672,46,230,UA,49.28672,23.43238 109446,Brody,4672,46,230,UA,50.08791,25.15027 109455,Bryukhovychi,4672,46,230,UA,49.90467,23.95969 109500,Chervonohrad,4672,46,230,UA,50.39105,24.23514 109534,Demnya,4672,46,230,UA,49.56738,23.94607 109555,Dobromyl’,4672,46,230,UA,49.57193,22.78629 109578,Drohobych,4672,46,230,UA,49.34991,23.50561 109583,Dublyany,4672,46,230,UA,49.90411,24.08637 109588,Duliby,4672,46,230,UA,49.23134,23.81532 109594,Dzvinogrud,4672,46,230,UA,49.73333,24.25 109634,Hlynsk,4672,46,230,UA,50.06033,23.89956 109648,Horodok,4672,46,230,UA,49.78465,23.64806 109684,Ivano-Frankove,4672,46,230,UA,49.91978,23.72913 109733,Khodoriv,4672,46,230,UA,49.40993,24.3047 109746,Khyriv,4672,46,230,UA,49.53417,22.85538 109782,Komarno,4672,46,230,UA,49.62739,23.69952 109832,Krasne,4672,46,230,UA,49.91447,24.6134 109884,Kulykiv,4672,46,230,UA,49.97954,24.07817 109929,Lopatyn,4672,46,230,UA,50.22022,24.84831 109948,Lviv,4672,46,230,UA,49.83826,24.02324 110012,Medenychi,4672,46,230,UA,49.43055,23.75073 110052,Morshyn,4672,46,230,UA,49.15652,23.87232 110056,Mostyska,4672,46,230,UA,49.79467,23.15077 110062,Murovane,4672,46,230,UA,49.52143,22.9367 110070,Mykolaiv,4672,46,230,UA,49.52372,23.98522 110084,Navaria,4672,46,230,UA,49.74952,23.92746 110154,Novoyavorivsk,4672,46,230,UA,49.93023,23.57357 110157,Novyi Yarychiv,4672,46,230,UA,49.90444,24.30523 110172,Obroshyne,4672,46,230,UA,49.78333,23.86667 110193,Olesko,4672,46,230,UA,49.96233,24.89336 110241,Peremyshlyany,4672,46,230,UA,49.66523,24.55846 110264,Pidbuzh,4672,46,230,UA,49.33483,23.24887 110266,Pidhirtsi,4672,46,230,UA,49.94611,24.9795 110269,Pidkamin’,4672,46,230,UA,49.94599,25.31672 110278,Pnikut,4672,46,230,UA,49.71104,23.13826 110298,Pomoriany,4672,46,230,UA,49.64092,24.9307 110306,Potelych,4672,46,230,UA,50.20804,23.54674 110330,Pustomyty,4672,46,230,UA,49.71532,23.91295 110344,Ralivka,4672,46,230,UA,49.49982,23.23739 110347,Rava-Rus’ka,4672,46,230,UA,50.23079,23.62825 110352,Richky,4672,46,230,UA,50.27706,23.64617 110357,Rodatychi,4672,46,230,UA,49.79862,23.53336 110376,Rozdil,4672,46,230,UA,49.46144,24.0623 110386,Rozvadiv,4672,46,230,UA,49.50323,23.962 110390,Rudky,4672,46,230,UA,49.65306,23.48702 110391,Rudne,4672,46,230,UA,49.83333,23.9 110397,Rykhtychi,4672,46,230,UA,49.38511,23.55662 110405,Sambir,4672,46,230,UA,49.5183,23.19752 110438,Shchyrets,4672,46,230,UA,49.65096,23.87426 110447,Shklo,4672,46,230,UA,49.95675,23.54408 110458,Silets’,4672,46,230,UA,50.29712,24.20462 110470,Skelivka,4672,46,230,UA,49.53728,22.96467 110471,Skhidnytsya,4672,46,230,UA,49.22827,23.35016 110472,Skole,4672,46,230,UA,49.03717,23.51346 110478,Slavske,4672,46,230,UA,48.84734,23.44587 110500,Sokal’,4672,46,230,UA,50.47438,24.28288 110510,Solonka,4672,46,230,UA,49.75621,24.01028 110535,Staroye Selo,4672,46,230,UA,49.71037,24.1895 110537,Starychi,4672,46,230,UA,49.98001,23.55848 110538,Staryy Dobrotvir,4672,46,230,UA,50.23154,24.37701 110542,Staryy Sambir,4672,46,230,UA,49.43856,23.00056 110547,Stebnyk,4672,46,230,UA,49.29416,23.56357 110557,Stryi,4672,46,230,UA,49.26223,23.85609 110561,Sudova Vyshnya,4672,46,230,UA,49.78892,23.37218 110562,Sukhovolya,4672,46,230,UA,49.82426,23.8377 110623,Truskavets’,4672,46,230,UA,49.27837,23.50618 110635,Tukhlia,4672,46,230,UA,48.91218,23.47303 110639,Turka,4672,46,230,UA,49.15411,23.02967 110649,Uhniv,4672,46,230,UA,50.36811,23.74895 110655,Ulychne,4672,46,230,UA,49.23385,23.65111 110700,Verblyany,4672,46,230,UA,50.04747,23.42189 110701,Verchnia Rozhanka,4672,46,230,UA,48.7805,23.51545 110705,Verkhnie Synevydne,4672,46,230,UA,49.10307,23.59099 110709,Verkhnyaya Belka,4672,46,230,UA,49.81575,24.30328 110749,Voyutychi,4672,46,230,UA,49.55135,23.10579 110792,Yavoriv,4672,46,230,UA,49.93864,23.38254 110845,Zhovkva,4672,46,230,UA,50.05825,23.9726 110852,Zhydachiv,4672,46,230,UA,49.38468,24.14254 110860,Zolochiv,4672,46,230,UA,49.80597,24.89436 109326,Arbuzynka,4679,48,230,UA,47.90972,31.31963 109355,Bashtanka,4679,48,230,UA,47.40719,32.43868 109378,Berezanka,4679,48,230,UA,46.85262,31.38802 109382,Bereznehuvate,4679,48,230,UA,47.30783,32.84993 109569,Domanivka,4679,48,230,UA,47.63192,30.98851 109723,Kazanka,4679,48,230,UA,47.84625,32.82177 109765,Kobleve,4679,48,230,UA,46.66499,31.20804 109815,Kostyantynivka,4679,48,230,UA,47.8266,31.13551 109875,Kryve Ozero,4679,48,230,UA,47.95242,30.34928 109958,Lysa Hora,4679,48,230,UA,48.17059,31.10994 110066,Myhiya,4679,48,230,UA,48.03719,30.95153 110071,Mykolayiv,4679,48,230,UA,46.96591,31.9974 110106,Nova Odesa,4679,48,230,UA,47.30778,31.78506 110159,Novyy Buh,4679,48,230,UA,47.69308,32.5216 110176,Ochakiv,4679,48,230,UA,46.61283,31.54982 110185,Olshanskoye,4679,48,230,UA,47.18411,31.79375 110187,Oleksandrivka,4679,48,230,UA,46.83826,32.76116 110228,Parutyne,4679,48,230,UA,46.70538,31.89709 110251,Pervomays’k,4679,48,230,UA,48.04433,30.85073 110267,Pidhorodna,4679,48,230,UA,48.10704,30.88953 110396,Rybakivka,4679,48,230,UA,46.61712,31.34995 110443,Shevchenkove,4679,48,230,UA,46.86289,32.20387 110492,Snihurivka,4679,48,230,UA,47.07579,32.80516 110716,Veselynove,4679,48,230,UA,47.35666,31.23488 110751,Voznesensk,4679,48,230,UA,47.56494,31.33078 110752,Vradiyivka,4679,48,230,UA,47.86195,30.59195 110805,Yuzhnoukrainsk,4679,48,230,UA,47.81777,31.18263 109330,Artsyz,4688,51,230,UA,45.99194,29.41824 109346,Balta,4688,51,230,UA,47.93548,29.61982 109347,Balts’kyy Rayon,4688,51,230,UA,47.99828,29.64835 109379,Berezivka,4688,51,230,UA,47.20429,30.9078 109386,Berezyne,4688,51,230,UA,46.22968,29.20436 109396,Bilhorod-Dnistrovskyi,4688,51,230,UA,46.1952,30.34938 109406,Bilyayivka,4688,51,230,UA,46.48319,30.21678 109425,Bolhrad,4688,51,230,UA,45.68262,28.61487 109428,Borodino,4688,51,230,UA,46.3025,29.24167 109448,Broska,4688,51,230,UA,45.37327,28.783 109513,Chornomors’k,4688,51,230,UA,46.30495,30.65478 109545,Dmytrivka,4688,51,230,UA,45.97167,28.98639 109601,Fontanka,4688,51,230,UA,46.56646,30.85965 109646,Horodnye,4688,51,230,UA,45.89083,28.84833 109678,Ivanivka,4688,51,230,UA,46.97569,30.46998 109687,Izmayil,4688,51,230,UA,45.34929,28.84079 109699,Kalcheva,4688,51,230,UA,45.73746,28.81441 109713,Kamyshevka Vtoraya,4688,51,230,UA,46.23333,29.83333 109717,Karolino-Buhaz,4688,51,230,UA,46.14492,30.52609 109747,Kiliya,4688,51,230,UA,45.45518,29.26367 109769,Kodyma,4688,51,230,UA,48.09875,29.12463 109770,Kodyms’kyy Rayon,4688,51,230,UA,48.02284,29.1401 109847,Krasnosilka,4688,51,230,UA,46.62258,30.77421 109859,Kremidivka,4688,51,230,UA,46.73351,30.78472 109878,Kryzhanivka,4688,51,230,UA,46.56167,30.79487 109880,Kuchurhan,4688,51,230,UA,47.16302,29.78937 109883,Kulevcha,4688,51,230,UA,46.03034,29.93614 109889,Kurisove,4688,51,230,UA,46.96951,30.95914 109953,Lymanske,4688,51,230,UA,46.6557,29.96722 109962,Lyubashivka,4688,51,230,UA,47.83716,30.25976 110009,Mayaky,4688,51,230,UA,46.41748,30.27413 110072,Mykolayivka,4688,51,230,UA,47.54135,30.75615 110073,Mykolayivs’kyy Rayon,4688,51,230,UA,47.4672,30.60283 110117,Novi Troyany,4688,51,230,UA,45.94275,28.85628 110177,Odessa,4688,51,230,UA,46.47747,30.73262 110181,Okny,4688,51,230,UA,47.54044,29.46001 110188,Oleksandrivka,4688,51,230,UA,46.32893,30.63481 110213,Ovidiopol,4688,51,230,UA,46.24998,30.44127 110218,Ozerne,4688,51,230,UA,45.403,28.67546 110253,Peschana,4688,51,230,UA,48.12918,29.73086 110276,Plakhtiyivka,4688,51,230,UA,46.1006,29.72169 110285,Podil’s’k,4688,51,230,UA,47.75305,29.53205 110284,Podilsk Raion,4688,51,230,UA,47.71642,29.54509 110351,Reni,4688,51,230,UA,45.45623,28.27914 110377,Rozdil’na,4688,51,230,UA,46.84334,30.07919 110404,Salhany,4688,51,230,UA,46.14881,30.34601 110406,Sarata,4688,51,230,UA,46.01966,29.66567 110410,Savran,4688,51,230,UA,48.13219,30.08247 110425,Serhiyivka,4688,51,230,UA,46.0272,30.37682 110426,Serpneve,4688,51,230,UA,46.30094,29.01958 110427,Shabo,4688,51,230,UA,46.13262,30.38595 110444,Shevchenkove,4688,51,230,UA,45.55604,29.33357 110457,Shyryayeve,4688,51,230,UA,47.38052,30.19638 110482,Slobidka,4688,51,230,UA,47.88694,29.34611 110534,Starokozache,4688,51,230,UA,46.33722,29.98528 110548,Stepanivka,4688,51,230,UA,46.79489,29.98684 110550,Stepove,4688,51,230,UA,46.70385,30.07919 110591,Tarutyne,4688,51,230,UA,46.18636,29.15203 110592,Tatarbunary,4688,51,230,UA,45.83731,29.61424 110594,Tayirove,4688,51,230,UA,46.36313,30.64891 110598,Teplodar,4688,51,230,UA,46.50585,30.32521 110660,Usatove,4688,51,230,UA,46.53296,30.6596 110686,Velyka Mykhaylivka,4688,51,230,UA,47.07971,29.85753 110693,Velykoploske,4688,51,230,UA,47.01254,29.67171 110755,Vylkove,4688,51,230,UA,45.40214,29.58595 110759,Vynohradivka,4688,51,230,UA,45.68119,28.57138 110804,Yuzhne,4688,51,230,UA,46.62211,31.10131 110808,Zagnitkiv,4688,51,230,UA,48.04878,28.89234 110810,Zakharivka,4688,51,230,UA,47.33232,29.75903 110815,Zaliznychne,4688,51,230,UA,45.7489,28.61466 110826,Zatoka,4688,51,230,UA,46.07251,30.46538 110827,Zatyshshya,4688,51,230,UA,47.33351,29.87327 110865,Zorya,4688,51,230,UA,45.9908,29.69672 109535,Demydivs’kyy Rayon,4683,56,230,UA,50.44302,25.29061 109584,Dubno,4683,56,230,UA,50.41694,25.73432 109586,Dubrovytsya,4683,56,230,UA,51.57438,26.56503 109652,Horodyshche,4683,56,230,UA,50.63965,26.36573 109654,Hoshcha,4683,56,230,UA,50.6003,26.67435 109762,Klevan,4683,56,230,UA,50.74305,25.97628 109773,Kolodenka,4683,56,230,UA,50.58561,26.31601 109778,Koloniya Zastav’ye,4683,56,230,UA,50.81667,27.03333 109795,Korets,4683,56,230,UA,50.61655,27.16055 109813,Kostopil’,4683,56,230,UA,50.87841,26.45192 110041,Mizoch,4683,56,230,UA,50.4,26.15 110043,Mlyniv,4683,56,230,UA,50.509,25.61675 110044,Mlynivs’kyy Rayon,4683,56,230,UA,50.55726,25.57715 110205,Orzhiv,4683,56,230,UA,50.8,26.12 110208,Ostroh,4683,56,230,UA,50.32942,26.51425 110210,Ostroz’ka Mis’krada,4683,56,230,UA,50.32726,26.51765 110339,Radyvyliv,4683,56,230,UA,50.12994,25.25576 110354,Rivne,4683,56,230,UA,50.62308,26.22743 110356,Rivnens’ka Mis’krada,4683,56,230,UA,50.613,26.24588 110364,Rokytne,4683,56,230,UA,51.2796,27.214 110407,Sarny,4683,56,230,UA,51.33795,26.60191 110589,Tarakaniv,4683,56,230,UA,50.37961,25.70843 110642,Tynne,4683,56,230,UA,50.60145,26.18486 110672,Varash,4683,56,230,UA,51.3509,25.84738 110691,Velyki Mezhyrichi,4683,56,230,UA,50.65431,26.86626 110735,Volodymyrets’,4683,56,230,UA,51.4213,26.14469 110824,Zarichne,4683,56,230,UA,51.8126,26.12902 110833,Zdolbuniv,4683,56,230,UA,50.5206,26.24251 110834,Zdovbytsya,4683,56,230,UA,50.49607,26.24111 109402,Bilopillya,4685,59,230,UA,51.15016,34.31287 109430,Boromlya,4685,59,230,UA,50.61839,34.97042 109463,Buryn’,4685,59,230,UA,51.19912,33.83523 109580,Druzhba,4685,59,230,UA,52.04545,33.94517 109632,Hlukhiv,4685,59,230,UA,51.67822,33.9162 109789,Konotop,4685,59,230,UA,51.24032,33.20263 109846,Krasnopillya,4685,59,230,UA,50.77458,35.25965 109866,Krolevets’,4685,59,230,UA,51.54775,33.38475 109898,Kyrykivka,4685,59,230,UA,50.36408,35.1149 109908,Lebedyn,4685,59,230,UA,50.58518,34.4849 109956,Lypova Dolyna,4685,59,230,UA,50.56428,33.79793 110024,Mezenivka,4685,59,230,UA,50.63486,35.3134 110087,Nedryhayliv,4685,59,230,UA,50.83398,33.87626 110169,Nyzy,4685,59,230,UA,50.78281,34.78441 110180,Okhtyrka,4685,59,230,UA,50.31036,34.89879 110332,Putyvl’,4685,59,230,UA,51.33745,33.87066 110368,Romens’ka Mis’krada,4685,59,230,UA,50.74306,33.48284 110369,Romny,4685,59,230,UA,50.75104,33.47471 110424,Seredyna-Buda,4685,59,230,UA,52.18903,34.03639 110429,Shalyhyne,4685,59,230,UA,51.57167,34.12167 110450,Shostka,4685,59,230,UA,51.86296,33.4698 110483,Sloboda,4685,59,230,UA,51.19806,33.60695 110563,Sumy,4685,59,230,UA,50.9216,34.80029 110604,Terny,4685,59,230,UA,50.98916,33.9707 110621,Trostyanets’,4685,59,230,UA,50.48478,34.96567 110688,Velyka Pysarivka,4685,59,230,UA,50.4243,35.47989 110708,Verkhnya Syrovatka,4685,59,230,UA,50.82902,34.95861 110744,Vorozhba,4685,59,230,UA,51.17334,34.21917 110781,Yampil’,4685,59,230,UA,51.94765,33.78759 110799,Yesman’,4685,59,230,UA,51.77006,34.06729 109362,Belaya,4674,61,230,UA,49.029,25.77059 109434,Borshchiv,4674,61,230,UA,48.80332,26.04347 109457,Buchach,4674,61,230,UA,49.06254,25.38798 109517,Chortkiv,4674,61,230,UA,49.01709,25.79804 109579,Druzhba,4674,61,230,UA,49.04251,25.45055 109657,Hrymayliv,4674,61,230,UA,49.33208,26.01112 109662,Husiatyn,4674,61,230,UA,49.0729,26.1848 109738,Khorostkiv,4674,61,230,UA,49.21114,25.92165 109793,Kopychyntsi,4674,61,230,UA,49.10441,25.91026 109826,Kozova,4674,61,230,UA,49.43544,25.15086 109858,Kremenets,4674,61,230,UA,50.09693,25.72459 109904,Lanivtsi,4674,61,230,UA,49.86328,26.09082 110029,Mikulintsy,4674,61,230,UA,49.396,25.60518 110163,Nyrkiv,4674,61,230,UA,48.81492,25.59989 110216,Ozerna,4674,61,230,UA,49.62891,25.32895 110256,Petrikov,4674,61,230,UA,49.53122,25.57901 110265,Pidhaytsi,4674,61,230,UA,49.26853,25.13341 110270,Pidvolochysk,4674,61,230,UA,49.53472,26.14585 110282,Pochaiv,4674,61,230,UA,50.00509,25.51183 110467,Skala-Podil’s’ka,4674,61,230,UA,48.85149,26.19909 110468,Skalat,4674,61,230,UA,49.42732,25.97869 110601,Terebovlya,4674,61,230,UA,49.30187,25.70997 110602,Ternopil,4674,61,230,UA,49.55342,25.58918 110619,Tovste,4674,61,230,UA,48.84663,25.72621 110682,Velikiye Borki,4674,61,230,UA,49.52363,25.75753 110772,Yahil’nytsya,4674,61,230,UA,48.94248,25.74375 110814,Zalishchyky,4674,61,230,UA,48.64331,25.73794 110818,Zaliztsi,4674,61,230,UA,49.79188,25.37297 110831,Zbarazh,4674,61,230,UA,49.66357,25.77616 110832,Zboriv,4674,61,230,UA,49.66484,25.14097 110863,Zolotyy Potik,4674,61,230,UA,48.9095,25.33926 110873,Бережани,4674,61,230,UA,49.45,24.93333 109349,Bar,4669,05,230,UA,49.07717,27.68256 109351,Barskiy Rayon,4669,05,230,UA,49.06667,27.68333 109387,Bershad,4669,05,230,UA,48.36782,29.51726 109443,Brailiv,4669,05,230,UA,49.10986,28.17459 109445,Bratslav,4669,05,230,UA,48.82257,28.9407 109475,Chechelnyk,4669,05,230,UA,48.21509,29.36728 109484,Chernivets’kyy Rayon,4669,05,230,UA,48.51106,28.14191 109485,Chernivtsi,4669,05,230,UA,48.54225,28.11473 109530,Dashiv,4669,05,230,UA,49.00449,29.42559 109624,Haisyn,4669,05,230,UA,48.81143,29.38977 109667,Illintsi,4669,05,230,UA,49.10479,29.21773 109704,Kalynivka,4669,05,230,UA,49.45389,28.52608 109732,Khmilnyk,4669,05,230,UA,49.55979,27.95754 109759,Klembivka,4669,05,230,UA,48.39037,28.41092 109792,Kopayhorod,4669,05,230,UA,48.85917,27.7969 109827,Kozyatyn,4669,05,230,UA,49.71431,28.83385 109879,Kryzhopil’,4669,05,230,UA,48.38289,28.86622 109902,Ladyzhyn,4669,05,230,UA,48.68496,29.23679 109921,Lityn,4669,05,230,UA,49.32509,28.08094 109922,Lityns’kyy Rayon,4669,05,230,UA,49.37138,28.07033 109957,Lypovets’kyy Rayon,4669,05,230,UA,49.28006,28.93205 110045,Mohyliv-Podilskyi,4669,05,230,UA,48.44598,27.7982 110060,Murafa,4669,05,230,UA,48.76763,28.21569 110063,Murovani Kurylivtsi,4669,05,230,UA,48.72348,27.51892 110091,Nemyriv,4669,05,230,UA,48.97076,28.83779 110108,Nova Pryluka,4669,05,230,UA,49.37488,28.69955 110171,Obodivka,4669,05,230,UA,48.40514,29.24775 110199,Orativ,4669,05,230,UA,49.18889,29.52697 110230,Pavlivka,4669,05,230,UA,49.44143,28.45956 110288,Pohrebyshche,4669,05,230,UA,49.48639,29.26361 110289,Pohrebyshchens’kyy Rayon,4669,05,230,UA,49.48126,29.25953 110419,Serebriya,4669,05,230,UA,48.45593,27.71923 110430,Sharhorod,4669,05,230,UA,48.75587,28.07507 110496,Sobolivka,4669,05,230,UA,49.33604,28.65096 110566,Sutysky,4669,05,230,UA,49.04245,28.41733 110600,Teplyk,4669,05,230,UA,48.66566,29.74504 110614,Tomashpil’,4669,05,230,UA,48.54256,28.51684 110617,Torkanivka,4669,05,230,UA,48.32462,29.14746 110633,Tsybulevka,4669,05,230,UA,48.38719,29.10288 110636,Tulchyn,4669,05,230,UA,48.67448,28.84641 110637,Turbiv,4669,05,230,UA,49.34788,28.72117 110647,Tyvriv,4669,05,230,UA,49.01404,28.50846 110654,Ulaniv,4669,05,230,UA,49.69512,28.13298 110671,Vapnyarka,4669,05,230,UA,48.53479,28.74358 110698,Vendychany,4669,05,230,UA,48.61176,27.79324 110720,Vinnitskiy Rayon,4669,05,230,UA,49.23531,28.47588 110722,Vinnytsia,4669,05,230,UA,49.23278,28.48097 110727,Viytivka,4669,05,230,UA,48.42603,29.54291 110743,Voronovytsya,4669,05,230,UA,49.10954,28.68078 110780,Yampil’,4669,05,230,UA,48.2424,28.28195 110844,Zhmerynka,4669,05,230,UA,49.03705,28.11201 109377,Berestechko,4690,07,230,UA,50.36047,25.11071 109409,Blahodatne,4690,07,230,UA,50.66365,24.24918 109656,Hołoby,4690,07,230,UA,51.08651,25.00767 109653,Horokhiv,4690,07,230,UA,50.50186,24.76149 109712,Kamin-Kashyrskyi,4690,07,230,UA,51.62412,24.95864 109756,Kivertsi,4690,07,230,UA,50.83425,25.45821 109820,Kovel,4690,07,230,UA,51.21526,24.70867 109821,Kovel’s’ka Mis’krada,4690,07,230,UA,51.21198,24.70163 109924,Liuboml,4690,07,230,UA,51.22601,24.03727 109928,Lokachi,4690,07,230,UA,50.737,24.64944 109943,Lukiv,4690,07,230,UA,51.0521,25.40059 109944,Lutsk,4690,07,230,UA,50.75932,25.34244 109964,Lyubeshivs’kyy Rayon,4690,07,230,UA,51.79639,25.33133 109965,Lyuboml’s’kyy Rayon,4690,07,230,UA,51.25062,24.01161 109992,Manevychi,4690,07,230,UA,51.29405,25.53436 109993,Manevyts’kyy Rayon,4690,07,230,UA,51.24513,25.60945 110152,Novovolyns’k,4690,07,230,UA,50.72576,24.16265 110162,Nuyno,4690,07,230,UA,51.54628,24.91018 110195,Olyka,4690,07,230,UA,50.71855,25.81251 110273,Pishcha,4690,07,230,UA,51.60928,23.82079 110342,Rakiv Lis,4690,07,230,UA,51.62174,24.92427 110345,Ratne,4690,07,230,UA,51.6683,24.5303 110346,Ratnivs’kyy Rayon,4690,07,230,UA,51.71712,24.51959 110381,Rozhyshche,4690,07,230,UA,50.91542,25.26906 110431,Shats’k,4690,07,230,UA,51.50208,23.93806 110432,Shats’kyy Rayon,4690,07,230,UA,51.52237,23.86522 110528,Stara Vyzhivka,4690,07,230,UA,51.43762,24.43997 110578,Svityaz’,4690,07,230,UA,51.48211,23.85904 110734,Volodymyr-Volynskyi,4690,07,230,UA,50.85253,24.32364 109357,Batiovo,4670,21,230,UA,48.36166,22.3997 109373,Berehivs’ka Mis’krada,4670,21,230,UA,48.21255,22.65536 109375,Berehove,4670,21,230,UA,48.20555,22.64418 109376,Berehove Raion,4670,21,230,UA,48.16667,22.66667 109383,Bereznyky,4670,21,230,UA,48.51407,23.21982 109385,Berezovo,4670,21,230,UA,48.30943,23.474 109398,Bilky,4670,21,230,UA,48.31503,23.13248 109414,Bobovo,4670,21,230,UA,48.07166,22.89585 109418,Bohdan,4670,21,230,UA,48.04122,24.35222 109464,Bushtyno,4670,21,230,UA,48.05121,23.48579 109508,Chop,4670,21,230,UA,48.43198,22.20555 109525,Chynadiyovo,4670,21,230,UA,48.48179,22.8217 109573,Dovhe,4670,21,230,UA,48.36527,23.27904 109576,Drahovo,4670,21,230,UA,48.23573,23.54914 109585,Dubove,4670,21,230,UA,48.17205,23.88954 109640,Horinchovo,4670,21,230,UA,48.27076,23.43475 109674,Irshava,4670,21,230,UA,48.31667,23.03846 109675,Irshava Raion,4670,21,230,UA,48.33333,23.08333 109686,Iza,4670,21,230,UA,48.21525,23.32867 109706,Kalyny,4670,21,230,UA,48.14078,23.8738 109711,Kamianytsia,4670,21,230,UA,48.69343,22.3957 109742,Khust,4670,21,230,UA,48.1793,23.29909 109743,Khust Raion,4670,21,230,UA,48.25,23.41667 109744,Khusts’ka Mis’krada,4670,21,230,UA,48.19058,23.30322 109772,Kolochava,4670,21,230,UA,48.42851,23.6959 109791,Kopashnovo,4670,21,230,UA,48.2197,23.48457 109799,Korolevo,4670,21,230,UA,48.15247,23.13659 109810,Koson’,4670,21,230,UA,48.25505,22.45597 109873,Kryva,4670,21,230,UA,48.17234,23.23647 109891,Kushnytsya,4670,21,230,UA,48.43988,23.25816 109896,Kvasy,4670,21,230,UA,48.14973,24.27995 109905,Lazeshchyna,4670,21,230,UA,48.26852,24.4201 109906,Lazi,4670,21,230,UA,48.06667,24.23333 109930,Lopukhiv,4670,21,230,UA,48.36527,23.96382 109954,Lypcha,4670,21,230,UA,48.26107,23.38336 109961,Lysychovo,4670,21,230,UA,48.49677,23.28992 110039,Mizhhirya,4670,21,230,UA,48.52458,23.50563 110040,Mizhhirya Raion,4670,21,230,UA,48.58333,23.5 110058,Mukacheve,4670,21,230,UA,48.43919,22.71779 110059,Mukachevo Raion,4670,21,230,UA,48.41667,22.66667 110065,Muzhiyevo,4670,21,230,UA,48.17959,22.69943 110074,Mynay,4670,21,230,UA,48.5888,22.27502 110090,Nelipyno,4670,21,230,UA,48.56101,23.03146 110092,Neresnytsya,4670,21,230,UA,48.11814,23.76588 110094,Nevyts’ke,4670,21,230,UA,48.67472,22.38813 110111,Nove Davydkovo,4670,21,230,UA,48.44133,22.62164 110168,Nyzhnye Selyshche,4670,21,230,UA,48.19911,23.44757 110192,Oleshnyk,4670,21,230,UA,48.16406,22.96167 110197,Onokivtsi,4670,21,230,UA,48.65763,22.34183 110236,Perechyn,4670,21,230,UA,48.73616,22.482 110237,Perechyn Raion,4670,21,230,UA,48.75,22.66667 110271,Pidvynohradiv,4670,21,230,UA,48.13947,22.97194 110304,Poroshkovo,4670,21,230,UA,48.66832,22.75328 110334,Pylypets,4670,21,230,UA,48.65899,23.28346 110340,Rakhiv,4670,21,230,UA,48.0526,24.20089 110341,Rakhiv Raion,4670,21,230,UA,48.08333,24.33333 110343,Rakoshyno,4670,21,230,UA,48.46713,22.59687 110362,Rokosovo,4670,21,230,UA,48.21018,23.17624 110422,Serednye,4670,21,230,UA,48.54043,22.50696 110423,Serednye Vodyane,4670,21,230,UA,47.98159,23.91041 110513,Solotvyno,4670,21,230,UA,47.94604,23.87035 110554,Storozhnytsya,4670,21,230,UA,48.60403,22.23269 110555,Strabychovo,4670,21,230,UA,48.39247,22.54308 110569,Svaliava Raion,4670,21,230,UA,48.55,23.0 110570,Svalyava,4670,21,230,UA,48.54853,22.99578 110584,Synevyr,4670,21,230,UA,48.48745,23.62575 110585,Synevyrska Poliana,4670,21,230,UA,48.58484,23.6891 110607,Tiachiv Raion,4670,21,230,UA,48.08333,23.58333 110640,Tyachiv,4670,21,230,UA,48.01179,23.57061 110667,Uzhgorod,4670,21,230,UA,48.61667,22.3 110668,Uzhhorod Raion,4670,21,230,UA,48.58333,22.33333 110674,Vary,4670,21,230,UA,48.12207,22.71281 110689,Velyki Berehy,4670,21,230,UA,48.23187,22.74591 110694,Velykyi Bereznyi,4670,21,230,UA,48.88831,22.46052 110695,Velykyi Bereznyi Raion,4670,21,230,UA,48.91667,22.58333 110737,Volovets,4670,21,230,UA,48.7109,23.1851 110738,Volovets Raion,4670,21,230,UA,48.75,23.08333 110756,Vylok,4670,21,230,UA,48.10915,22.83865 110757,Vynohradiv,4670,21,230,UA,48.14135,23.02666 110758,Vynohradiv Raion,4670,21,230,UA,48.16667,23.0 110764,Vyshkovo,4670,21,230,UA,48.04911,23.42113 110788,Yasinya,4670,21,230,UA,48.27937,24.36042 109345,Balky,4687,23,230,UA,47.38336,34.94396 109367,Berdiansk Raion,4687,23,230,UA,46.83333,36.75 109369,Berdyans’ka Mis’krada,4687,23,230,UA,46.81565,36.77049 109368,Berdyansk,4687,23,230,UA,46.76644,36.79872 109471,Chapayevka,4687,23,230,UA,47.47114,36.34507 109482,Chernihivka Raion,4687,23,230,UA,47.16667,36.25 109551,Dniprorudne,4687,23,230,UA,47.38169,34.97652 109552,Dniprovka,4687,23,230,UA,47.42945,34.61805 109595,Energodar,4687,23,230,UA,47.49865,34.6574 109660,Hulyaypole,4687,23,230,UA,47.66389,36.25633 109748,Kirove,4687,23,230,UA,47.65311,35.69512 109785,Komysh-Zorya,4687,23,230,UA,47.32755,36.69298 109787,Komyshuvakha,4687,23,230,UA,47.71598,35.52981 109816,Kostyantynivka,4687,23,230,UA,46.81673,35.42287 109892,Kushuhum,4687,23,230,UA,47.71278,35.20917 109895,Kuybysheve,4687,23,230,UA,47.358,36.64908 109899,Kyrylivka,4687,23,230,UA,46.37592,35.36753 109978,Mala Bilozerka,4687,23,230,UA,47.24737,34.93457 109980,Mala Tokmachka,4687,23,230,UA,47.53563,35.89293 109984,Malokaterynivka,4687,23,230,UA,47.6555,35.25649 110008,Matviyivka,4687,23,230,UA,47.07473,35.14444 110018,Melitopol,4687,23,230,UA,46.84891,35.36533 110019,Melitopol’s’kyy Rayon,4687,23,230,UA,46.90326,35.34616 110068,Mykhaylivka,4687,23,230,UA,47.27235,35.22235 110069,Mykhaylivs’kyy Rayon,4687,23,230,UA,47.22111,35.2658 110121,Novobohdanivka,4687,23,230,UA,47.08524,35.32945 110133,Novomykolayivka,4687,23,230,UA,47.9781,35.9102 110151,Novovasylivka,4687,23,230,UA,46.83021,35.75136 110203,Orikhiv,4687,23,230,UA,47.56731,35.78575 110211,Osypenko,4687,23,230,UA,46.9136,36.8253 110293,Polohy,4687,23,230,UA,47.48444,36.25361 110309,Preobrazhenka,4687,23,230,UA,47.57194,35.81667 110318,Pryazovske Raion,4687,23,230,UA,46.66667,35.66667 110322,Prymors’k,4687,23,230,UA,46.73479,36.34425 110321,Prymorsk Raion,4687,23,230,UA,46.83333,36.25 110323,Pryshyb,4687,23,230,UA,47.25927,35.31953 110382,Rozivka,4687,23,230,UA,47.38484,37.06792 110383,Rozivs’kyy Rayon,4687,23,230,UA,47.46956,36.97192 110603,Ternuvate,4687,23,230,UA,47.83049,36.12761 110605,Terpinnya,4687,23,230,UA,46.96942,35.421 110611,Tokmak,4687,23,230,UA,47.25522,35.71238 110612,Tokmak Raion,4687,23,230,UA,47.25,35.75 110641,Tymoshivka,4687,23,230,UA,47.1841,35.11625 110677,Vasylivka,4687,23,230,UA,47.43694,35.27417 110683,Velyka Bilozerka,4687,23,230,UA,47.27756,34.70616 110692,Velykobilozers’kyy Rayon,4687,23,230,UA,47.24341,34.66137 110713,Vesele,4687,23,230,UA,47.01479,34.91504 110718,Vilniansk Raion,4687,23,230,UA,48.0,35.41667 110730,Vodyane,4687,23,230,UA,47.48746,34.49235 110750,Voznesenka,4687,23,230,UA,46.87165,35.46458 110775,Yakymivka,4687,23,230,UA,46.69972,35.15916 110776,Yakymivka Raion,4687,23,230,UA,46.58333,35.0 110816,Zaliznychne,4687,23,230,UA,47.65238,36.16524 110821,Zaporiz’ka Mis’krada,4687,23,230,UA,47.84634,35.16824 110820,Zaporizhia,4687,23,230,UA,47.82289,35.19031 109320,Andrushivka,4668,18,230,UA,50.02288,29.02023 109321,Andrushivs’kyy Rayon,4668,18,230,UA,50.01709,29.03215 109350,Baranivka,4668,18,230,UA,50.29691,27.6622 109370,Berdychiv,4668,18,230,UA,49.89928,28.60235 109371,Berdychivskyy Rayon,4668,18,230,UA,49.91667,28.58333 109392,Bila Krynytsya,4668,18,230,UA,50.63982,29.47041 109451,Brusyliv,4668,18,230,UA,50.28449,29.52626 109452,Brusylivs’kyy Rayon,4668,18,230,UA,50.25638,29.48742 109465,Bykivka,4668,18,230,UA,50.29285,27.98314 109479,Cherniakhiv,4668,18,230,UA,50.45652,28.67018 109495,Chernyakhivskyy Rayon,4668,18,230,UA,50.41667,28.66667 109499,Chervone,4668,18,230,UA,49.94975,28.86874 109509,Chopovychi,4668,18,230,UA,50.83325,28.95334 109514,Chornorudka,4668,18,230,UA,49.8464,29.06062 109520,Chudniv,4668,18,230,UA,50.05204,28.11745 109521,Chudniv Raion,4668,18,230,UA,50.0,28.16667 109536,Denyshi,4668,18,230,UA,50.21415,28.40395 109572,Dovbysh,4668,18,230,UA,50.37332,27.98742 109638,Holovyne,4668,18,230,UA,50.47118,28.8253 109647,Horodnytsya,4668,18,230,UA,50.80697,27.31676 109649,Horodok,4668,18,230,UA,50.59483,29.4607 109658,Hryshkivtsi,4668,18,230,UA,49.93529,28.60383 109737,Khoroshiv Raion,4668,18,230,UA,50.66667,28.5 109798,Kornyn,4668,18,230,UA,50.0953,29.53581 109801,Korosten’,4668,18,230,UA,50.95937,28.63855 109802,Korostyshiv,4668,18,230,UA,50.31723,29.0563 109803,Korostyshiv Raion,4668,18,230,UA,50.33333,29.08333 109923,Liubar,4668,18,230,UA,49.92045,27.75918 109941,Luhyny,4668,18,230,UA,51.08203,28.40057 109942,Luhyny Raion,4668,18,230,UA,51.08333,28.33333 109988,Malyn,4668,18,230,UA,50.77233,29.23833 109989,Malyn Raion,4668,18,230,UA,50.83084,29.19926 110081,Narodychi,4668,18,230,UA,51.20286,29.08228 110082,Narodychi Raion,4668,18,230,UA,51.25,29.08333 110103,Nova Borova,4668,18,230,UA,50.69296,28.63446 110115,Novi Bilokorovychi,4668,18,230,UA,51.11548,28.05463 110128,Novohrad-Volynskyi,4668,18,230,UA,50.59412,27.6165 110194,Olevs’k,4668,18,230,UA,51.22482,27.65228 110214,Ovruch,4668,18,230,UA,51.3246,28.80351 110215,Ovruch Raion,4668,18,230,UA,51.33333,28.83333 110217,Ozerne,4668,18,230,UA,50.17816,28.73384 110246,Pershotravneve,4668,18,230,UA,51.39287,28.86837 110296,Polyanka,4668,18,230,UA,50.25836,27.68809 110301,Popilnia,4668,18,230,UA,49.9532,29.45265 110302,Popilnia Raion,4668,18,230,UA,49.91667,29.5 110328,Pulyny Raion,4668,18,230,UA,50.5,28.25 110337,Radomyshl,4668,18,230,UA,50.49613,29.22911 110338,Radomyshl Raion,4668,18,230,UA,50.5,29.25 110366,Romaniv,4668,18,230,UA,50.14802,27.93124 110394,Ruzhyn,4668,18,230,UA,49.7228,29.20455 110544,Stavyshche,4668,18,230,UA,50.40051,29.52796 110615,Topory,4668,18,230,UA,49.65186,29.31741 110795,Yemil’chyne,4668,18,230,UA,50.87349,27.80604 110853,Zhytomyr,4668,18,230,UA,50.26487,28.67669 110854,Zhytomyr Raion,4668,18,230,UA,50.25,28.58333 48157,Abbey Wood,2336,ENG,232,GB,51.48688,0.10747 48158,Abbots Bromley,2336,ENG,232,GB,52.81705,-1.87694 48159,Abbots Langley,2336,ENG,232,GB,51.70573,-0.41757 48160,Abbotskerswell,2336,ENG,232,GB,50.50816,-3.61342 48161,Abbotts Ann,2336,ENG,232,GB,51.19016,-1.53234 48174,Aberford,2336,ENG,232,GB,53.82604,-1.34231 48184,Abingdon,2336,ENG,232,GB,51.67109,-1.28278 48186,Abram,2336,ENG,232,GB,53.50855,-2.59266 48187,Abridge,2336,ENG,232,GB,51.6495,0.12033 48188,Accrington,2336,ENG,232,GB,53.75379,-2.35863 48189,Acklington,2336,ENG,232,GB,55.3,-1.63333 48190,Acle,2336,ENG,232,GB,52.63681,1.54757 48191,Acocks Green,2336,ENG,232,GB,52.45,-1.81667 48192,Acomb,2336,ENG,232,GB,54.99229,-2.11229 48193,Acton,2336,ENG,232,GB,51.50901,-0.2762 48194,Adderbury,2336,ENG,232,GB,52.0169,-1.31192 48196,Addingham,2336,ENG,232,GB,53.94452,-1.88424 48197,Addlestone,2336,ENG,232,GB,51.37135,-0.49353 48198,Adlington,2336,ENG,232,GB,53.61323,-2.60676 48199,Adwick le Street,2336,ENG,232,GB,53.57077,-1.18454 48202,Airmyn,2336,ENG,232,GB,53.72074,-0.89959 48204,Albrighton,2336,ENG,232,GB,52.6364,-2.27966 48205,Alcester,2336,ENG,232,GB,52.21667,-1.86667 48206,Alconbury,2336,ENG,232,GB,52.369,-0.26009 48207,Aldbourne,2336,ENG,232,GB,51.48098,-1.61827 48208,Aldbrough,2336,ENG,232,GB,53.82893,-0.11467 48209,Aldeburgh,2336,ENG,232,GB,52.15259,1.60124 48210,Alderbury,2336,ENG,232,GB,51.04354,-1.73382 48211,Alderholt,2336,ENG,232,GB,50.91195,-1.83083 48212,Alderley Edge,2336,ENG,232,GB,53.30393,-2.23773 48213,Aldershot,2336,ENG,232,GB,51.24827,-0.76389 48214,Aldford,2336,ENG,232,GB,53.12762,-2.86812 48215,Aldridge,2336,ENG,232,GB,52.60549,-1.91715 48217,Alford,2336,ENG,232,GB,53.25943,0.17625 48219,Alfreton,2336,ENG,232,GB,53.09766,-1.38376 48221,Allhallows,2336,ENG,232,GB,51.46866,0.63686 48224,Almondsbury,2336,ENG,232,GB,51.55407,-2.57114 48226,Alnwick,2336,ENG,232,GB,55.41318,-1.70563 48227,Alresford,2336,ENG,232,GB,51.85389,1.00203 48228,Alrewas,2336,ENG,232,GB,52.73278,-1.74968 48229,Alsager,2336,ENG,232,GB,53.09617,-2.30649 48230,Alston,2336,ENG,232,GB,54.809,-2.43931 48231,Althorne,2336,ENG,232,GB,51.65722,0.76085 48232,Alton,2336,ENG,232,GB,51.14931,-0.97469 48233,Altrincham,2336,ENG,232,GB,53.38752,-2.34848 48235,Alvechurch,2336,ENG,232,GB,52.35173,-1.96531 48236,Alveley,2336,ENG,232,GB,52.45709,-2.35434 48237,Alveston,2336,ENG,232,GB,51.58806,-2.53139 48239,Amble,2336,ENG,232,GB,55.33333,-1.58333 48240,Ambleside,2336,ENG,232,GB,54.43261,-2.96167 48241,Ambrosden,2336,ENG,232,GB,51.87087,-1.12129 48242,Amersham,2336,ENG,232,GB,51.66667,-0.61667 48243,Amersham on the Hill,2336,ENG,232,GB,51.67468,-0.60742 48244,Amesbury,2336,ENG,232,GB,51.17509,-1.78064 48247,Ampthill,2336,ENG,232,GB,52.02694,-0.49567 48248,Ancaster,2336,ENG,232,GB,52.98276,-0.53593 48249,Andover,2336,ENG,232,GB,51.21135,-1.49393 48252,Anna Valley,2336,ENG,232,GB,51.19317,-1.50719 48256,Annfield Plain,2336,ENG,232,GB,54.85749,-1.73827 48257,Anstey,2336,ENG,232,GB,52.67368,-1.18841 48261,Appleby,2336,ENG,232,GB,53.62198,-0.56612 48262,Appleby-in-Westmorland,2336,ENG,232,GB,54.57704,-2.48978 48263,Appledore,2336,ENG,232,GB,51.05,-4.2 48264,Appleton Thorn,2336,ENG,232,GB,53.35045,-2.54488 48265,Appley Bridge,2336,ENG,232,GB,53.57781,-2.7209 48267,Archway,2336,ENG,232,GB,51.56733,-0.13415 48270,Ardingly,2336,ENG,232,GB,51.04865,-0.07716 48275,Arlesey,2336,ENG,232,GB,52.00713,-0.26565 48279,Armitage,2336,ENG,232,GB,52.74193,-1.88266 48280,Armthorpe,2336,ENG,232,GB,53.53518,-1.05341 48281,Arnold,2336,ENG,232,GB,53.0,-1.13333 48282,Arnside,2336,ENG,232,GB,54.20179,-2.83374 48283,Arundel,2336,ENG,232,GB,50.85423,-0.55393 48284,Ascot,2336,ENG,232,GB,51.41082,-0.6748 48285,Asfordby,2336,ENG,232,GB,52.76331,-0.95856 48286,Ash,2336,ENG,232,GB,51.27883,1.27974 48287,Ashbourne,2336,ENG,232,GB,53.01667,-1.73333 48288,Ashburton,2336,ENG,232,GB,50.51559,-3.75572 48289,Ashby de la Zouch,2336,ENG,232,GB,52.74632,-1.4732 48290,Ashford,2336,ENG,232,GB,51.14648,0.87376 48292,Ashill,2336,ENG,232,GB,52.60435,0.78574 48293,Ashington,2336,ENG,232,GB,55.17719,-1.56412 48294,Ashtead,2336,ENG,232,GB,51.30873,-0.29972 48296,Ashton in Makerfield,2336,ENG,232,GB,53.48333,-2.65 48295,Ashton Keynes,2336,ENG,232,GB,51.64521,-1.93232 48297,Ashton-under-Lyne,2336,ENG,232,GB,53.48876,-2.0989 48298,Ashurst,2336,ENG,232,GB,50.93236,-0.32375 48299,Ashwell,2336,ENG,232,GB,52.03866,-0.15398 48300,Askam in Furness,2336,ENG,232,GB,54.18718,-3.20467 48301,Askern,2336,ENG,232,GB,53.61639,-1.15237 48302,Aslockton,2336,ENG,232,GB,52.95299,-0.897 48303,Aspatria,2336,ENG,232,GB,54.76574,-3.32783 48304,Aston,2336,ENG,232,GB,52.5,-1.88333 48305,Aston Clinton,2336,ENG,232,GB,51.8002,-0.7254 48306,Aston-on-Trent,2336,ENG,232,GB,52.86172,-1.38642 48307,Astwood Bank,2336,ENG,232,GB,52.25993,-1.93754 48308,Atherstone,2336,ENG,232,GB,52.57536,-1.54693 48309,Atherton,2336,ENG,232,GB,53.52371,-2.49354 48310,Attleborough,2336,ENG,232,GB,52.51779,1.01572 48311,Atworth,2336,ENG,232,GB,51.39234,-2.19297 48315,Auckley,2336,ENG,232,GB,53.50386,-1.02174 48316,Audlem,2336,ENG,232,GB,52.98956,-2.50706 48317,Audley,2336,ENG,232,GB,53.05,-2.3 48318,Aveley,2336,ENG,232,GB,51.49987,0.25174 48319,Avening,2336,ENG,232,GB,51.6801,-2.16903 48321,Awsworth,2336,ENG,232,GB,52.98912,-1.28354 48322,Axbridge,2336,ENG,232,GB,51.28466,-2.82078 48323,Axminster,2336,ENG,232,GB,50.78259,-2.99787 48324,Aylesbury,2336,ENG,232,GB,51.81665,-0.81458 48325,Aylesford,2336,ENG,232,GB,51.30374,0.47936 48326,Aylesham,2336,ENG,232,GB,51.22539,1.20157 48327,Aylsham,2336,ENG,232,GB,52.79672,1.25107 48329,Babworth,2336,ENG,232,GB,53.31799,-0.97583 48330,Backworth,2336,ENG,232,GB,55.04229,-1.52779 48331,Bacton,2336,ENG,232,GB,52.26667,1.01667 48332,Bacup,2336,ENG,232,GB,53.70336,-2.2007 48333,Badsey,2336,ENG,232,GB,52.08819,-1.89925 48334,Badsworth,2336,ENG,232,GB,53.62876,-1.30128 48336,Bagshot,2336,ENG,232,GB,51.36069,-0.68802 48337,Bagworth,2336,ENG,232,GB,52.67265,-1.34274 48338,Baildon,2336,ENG,232,GB,53.84711,-1.78785 48339,Bakewell,2336,ENG,232,GB,53.21338,-1.67481 48341,Balcombe,2336,ENG,232,GB,51.05726,-0.1345 48342,Baldock,2336,ENG,232,GB,51.98781,-0.18835 48362,Balsall Common,2336,ENG,232,GB,52.39186,-1.6504 48363,Balsham,2336,ENG,232,GB,52.13238,0.31586 48364,Bamburgh,2336,ENG,232,GB,55.60652,-1.71704 48365,Bampton,2336,ENG,232,GB,51.72634,-1.54547 48367,Banbury,2336,ENG,232,GB,52.0632,-1.34222 48372,Banham,2336,ENG,232,GB,52.4524,1.03683 48375,Banks,2336,ENG,232,GB,53.68333,-2.91667 48377,Banstead,2336,ENG,232,GB,51.32233,-0.20685 48378,Banwell,2336,ENG,232,GB,51.32894,-2.86914 48379,Bar Hill,2336,ENG,232,GB,52.24899,0.02883 48380,Barbican,2336,ENG,232,GB,51.51988,-0.09446 48381,Bardney,2336,ENG,232,GB,53.21005,-0.32371 48382,Bardsey,2336,ENG,232,GB,53.88492,-1.44539 48385,Barham,2336,ENG,232,GB,51.2057,1.15734 48386,Barking,2336,ENG,232,GB,51.53333,0.08333 48387,Barkisland,2336,ENG,232,GB,53.67614,-1.9184 48388,Barlaston,2336,ENG,232,GB,52.942,-2.1705 48389,Barlborough,2336,ENG,232,GB,53.28795,-1.28815 48390,Barlby,2336,ENG,232,GB,53.79964,-1.04061 48391,Barlestone,2336,ENG,232,GB,52.64718,-1.37013 48392,Barmby on the Marsh,2336,ENG,232,GB,53.74896,-0.95607 48394,Barnack,2336,ENG,232,GB,52.63181,-0.40821 48395,Barnard Castle,2336,ENG,232,GB,54.5415,-1.919 48396,Barnburgh,2336,ENG,232,GB,53.52408,-1.273 48397,Barnet,2336,ENG,232,GB,51.65,-0.2 48398,Barnetby le Wold,2336,ENG,232,GB,53.5748,-0.40607 48399,Barnham,2336,ENG,232,GB,50.8312,-0.63789 48400,Barnoldswick,2336,ENG,232,GB,53.91711,-2.18705 48401,Barnsbury,2336,ENG,232,GB,51.54067,-0.11675 48402,Barnsley,2336,ENG,232,GB,53.53333,-1.5 48403,Barnstaple,2336,ENG,232,GB,51.08022,-4.05808 48404,Barnt Green,2336,ENG,232,GB,52.35902,-2.00715 48405,Barnwood,2336,ENG,232,GB,51.86393,-2.20087 48408,Barrow in Furness,2336,ENG,232,GB,54.11094,-3.22758 48409,Barrow upon Humber,2336,ENG,232,GB,53.6755,-0.38062 48410,Barrow upon Soar,2336,ENG,232,GB,52.75178,-1.14601 48411,Barrowby,2336,ENG,232,GB,52.91636,-0.69094 48412,Barrowford,2336,ENG,232,GB,53.8465,-2.21838 48414,Bartley Green,2336,ENG,232,GB,52.43532,-1.99707 48415,Barton under Needwood,2336,ENG,232,GB,52.76268,-1.724 48416,Barton upon Humber,2336,ENG,232,GB,53.68915,-0.44377 48417,Barton-le-Clay,2336,ENG,232,GB,51.96598,-0.42731 48418,Baschurch,2336,ENG,232,GB,52.78848,-2.85284 48419,Basford,2336,ENG,232,GB,52.96667,-1.18333 48420,Basildon,2336,ENG,232,GB,51.56844,0.45782 48421,Basingstoke,2336,ENG,232,GB,51.26249,-1.08708 48422,Baslow,2336,ENG,232,GB,53.24811,-1.62246 48423,Bassingbourn,2336,ENG,232,GB,52.07821,-0.0539 48424,Bassingham,2336,ENG,232,GB,53.12881,-0.63765 48425,Baston,2336,ENG,232,GB,52.71311,-0.35173 48426,Bath,2336,ENG,232,GB,51.3751,-2.36172 48427,Bath and North East Somerset,2336,ENG,232,GB,51.33333,-2.5 48429,Batley,2336,ENG,232,GB,53.70291,-1.6337 48430,Battersea,2336,ENG,232,GB,51.47475,-0.15547 48431,Battle,2336,ENG,232,GB,50.91732,0.48417 48432,Bawtry,2336,ENG,232,GB,53.43146,-1.01878 48433,Bay Horse,2336,ENG,232,GB,53.96867,-2.77603 48434,Bayston Hill,2336,ENG,232,GB,52.6755,-2.76156 48435,Bayswater,2336,ENG,232,GB,51.51116,-0.18426 48436,Beaconsfield,2336,ENG,232,GB,51.61219,-0.64732 48437,Beadnell,2336,ENG,232,GB,55.5567,-1.6325 48438,Beaminster,2336,ENG,232,GB,50.809,-2.7391 48442,Bebington,2336,ENG,232,GB,53.35,-3.01667 48443,Beccles,2336,ENG,232,GB,52.45936,1.56465 48444,Beckenham,2336,ENG,232,GB,51.40878,-0.02526 48445,Beckingham,2336,ENG,232,GB,53.4,-0.83333 48446,Becontree,2336,ENG,232,GB,51.5529,0.129 48447,Bedale,2336,ENG,232,GB,54.28811,-1.59181 48449,Bedford,2336,ENG,232,GB,52.18831,-0.45316 48450,Bedlington,2336,ENG,232,GB,55.13061,-1.59319 48453,Bedworth,2336,ENG,232,GB,52.4791,-1.46909 48454,Beeford,2336,ENG,232,GB,53.96999,-0.28913 48455,Beighton,2336,ENG,232,GB,53.33333,-1.33333 48457,Belbroughton,2336,ENG,232,GB,52.39177,-2.11884 48459,Belford,2336,ENG,232,GB,55.6,-1.83333 48461,Bellingham,2336,ENG,232,GB,55.14464,-2.25383 48464,Belmont,2336,ENG,232,GB,52.04272,-2.74169 48465,Belper,2336,ENG,232,GB,53.0233,-1.48119 48466,Belsize Park,2336,ENG,232,GB,51.54767,-0.17228 48467,Belton,2336,ENG,232,GB,53.55,-0.81667 48468,Belvedere,2336,ENG,232,GB,51.49114,0.15136 48469,Bembridge,2336,ENG,232,GB,50.68634,-1.08275 48470,Bempton,2336,ENG,232,GB,54.13036,-0.17853 48473,Benson,2336,ENG,232,GB,51.62073,-1.10979 48474,Bentley,2336,ENG,232,GB,53.53333,-1.15 48475,Benwell,2336,ENG,232,GB,54.97296,-1.66926 48476,Bere Alston,2336,ENG,232,GB,50.48233,-4.19034 48477,Bere Regis,2336,ENG,232,GB,50.75371,-2.21553 48478,Berkeley,2336,ENG,232,GB,51.69111,-2.45917 48479,Berkhamsted,2336,ENG,232,GB,51.7604,-0.56528 48480,Berwick-Upon-Tweed,2336,ENG,232,GB,55.76536,-2.01186 48482,Bethnal Green,2336,ENG,232,GB,51.52718,-0.06109 48483,Betley,2336,ENG,232,GB,53.03439,-2.36865 48486,Beverley,2336,ENG,232,GB,53.84587,-0.42332 48487,Bewbush,2336,ENG,232,GB,51.10329,-0.22312 48488,Bewdley,2336,ENG,232,GB,52.3757,-2.31833 48489,Bexhill-on-Sea,2336,ENG,232,GB,50.85023,0.47095 48490,Bexley,2336,ENG,232,GB,51.44162,0.14866 48491,Bicester,2336,ENG,232,GB,51.89998,-1.15357 48492,Bicknacre,2336,ENG,232,GB,51.69403,0.58519 48493,Bicton,2336,ENG,232,GB,52.72829,-2.81649 48494,Biddenden,2336,ENG,232,GB,51.11489,0.63819 48495,Biddestone,2336,ENG,232,GB,51.46083,-2.19833 48496,Biddulph,2336,ENG,232,GB,53.11724,-2.17584 48497,Bideford,2336,ENG,232,GB,51.01678,-4.20832 48498,Bidford-on-Avon,2336,ENG,232,GB,52.16964,-1.85955 48500,Biggin Hill,2336,ENG,232,GB,51.31329,0.03433 48501,Biggleswade,2336,ENG,232,GB,52.08652,-0.26493 48502,Bildeston,2336,ENG,232,GB,52.10658,0.90916 48503,Billericay,2336,ENG,232,GB,51.62867,0.41963 48504,Billingborough,2336,ENG,232,GB,52.89384,-0.34186 48505,Billinge,2336,ENG,232,GB,53.49795,-2.7081 48506,Billingham,2336,ENG,232,GB,54.58881,-1.29034 48507,Billinghay,2336,ENG,232,GB,53.07959,-0.27689 48508,Billingshurst,2336,ENG,232,GB,51.02312,-0.45359 48509,Billington,2336,ENG,232,GB,53.8157,-2.4236 48510,Bilsdale,2336,ENG,232,GB,54.37356,-1.11923 48511,Bilsthorpe,2336,ENG,232,GB,53.14024,-1.03392 48512,Bilston,2336,ENG,232,GB,52.56568,-2.07367 48514,Bingham,2336,ENG,232,GB,52.94978,-0.95907 48515,Bingley,2336,ENG,232,GB,53.84861,-1.83857 48516,Birchington-on-Sea,2336,ENG,232,GB,51.37575,1.3048 48517,Bircotes,2336,ENG,232,GB,53.41933,-1.04905 48518,Birdham,2336,ENG,232,GB,50.79606,-0.83067 48519,Birdwell,2336,ENG,232,GB,53.51398,-1.47929 48520,Birkenhead,2336,ENG,232,GB,53.39337,-3.01479 48521,Birmingham,2336,ENG,232,GB,52.48142,-1.89983 48522,Bishop Auckland,2336,ENG,232,GB,54.65554,-1.67706 48523,Bishop Middleham,2336,ENG,232,GB,54.67778,-1.48826 48524,Bishop Sutton,2336,ENG,232,GB,51.33444,-2.59472 48525,Bishops Castle,2336,ENG,232,GB,52.49208,-3.0021 48527,Bishops Cleeve,2336,ENG,232,GB,51.94749,-2.06277 48528,Bishops Lydeard,2336,ENG,232,GB,51.05917,-3.18778 48529,Bishops Stortford,2336,ENG,232,GB,51.87113,0.15868 48530,Bishops Waltham,2336,ENG,232,GB,50.95595,-1.21476 48531,Bishopsteignton,2336,ENG,232,GB,50.55193,-3.53852 48532,Bishopstoke,2336,ENG,232,GB,50.96643,-1.32832 48534,Bishopstone,2336,ENG,232,GB,51.5513,-1.64701 48535,Bishopsworth,2336,ENG,232,GB,51.41479,-2.6208 48536,Bishopthorpe,2336,ENG,232,GB,53.9191,-1.09915 48538,Bishopton,2336,ENG,232,GB,54.58333,-1.43333 48539,Bitton,2336,ENG,232,GB,51.42479,-2.45965 48540,Blaby,2336,ENG,232,GB,52.57577,-1.16403 48541,Black Notley,2336,ENG,232,GB,51.85301,0.56846 48543,Blackburn,2336,ENG,232,GB,53.75,-2.48333 48544,Blackburn with Darwen,2336,ENG,232,GB,53.66667,-2.46667 48545,Blackheath,2336,ENG,232,GB,51.4647,0.0079 48546,Blackley,2336,ENG,232,GB,53.51765,-2.21443 48547,Blackmoorfoot,2336,ENG,232,GB,53.61423,-1.85588 48548,Blackpool,2336,ENG,232,GB,53.81667,-3.05 48550,Blackrod,2336,ENG,232,GB,53.59229,-2.58026 48551,Blackwell,2336,ENG,232,GB,53.11667,-1.33333 48554,Blacon,2336,ENG,232,GB,53.20832,-2.9253 48559,Blagdon,2336,ENG,232,GB,51.32688,-2.71731 48561,Blandford Forum,2336,ENG,232,GB,50.86073,-2.16174 48563,Blaydon-on-Tyne,2336,ENG,232,GB,54.96461,-1.71392 48564,Bleadon,2336,ENG,232,GB,51.30861,-2.9475 48565,Blean,2336,ENG,232,GB,51.30679,1.04301 48566,Bletchingley,2336,ENG,232,GB,51.24059,-0.10038 48567,Bletchley,2336,ENG,232,GB,51.99334,-0.73471 48568,Blewbury,2336,ENG,232,GB,51.5688,-1.23261 48569,Blidworth,2336,ENG,232,GB,53.09849,-1.11689 48570,Blindley Heath,2336,ENG,232,GB,51.19344,-0.05116 48571,Blisworth,2336,ENG,232,GB,52.17498,-0.94131 48572,Blockley,2336,ENG,232,GB,52.0122,-1.76268 48573,Bloxham,2336,ENG,232,GB,52.02039,-1.37321 48574,Bloxwich,2336,ENG,232,GB,52.61806,-2.00431 48575,Blunham,2336,ENG,232,GB,52.14695,-0.32178 48576,Bluntisham,2336,ENG,232,GB,52.35479,0.00854 48577,Blyth,2336,ENG,232,GB,55.12708,-1.50856 48578,Blyton,2336,ENG,232,GB,53.44384,-0.71753 48582,Bodle Street,2336,ENG,232,GB,50.91299,0.34332 48583,Bodmin,2336,ENG,232,GB,50.47151,-4.7243 48584,Bognor Regis,2336,ENG,232,GB,50.78206,-0.67978 48585,Bollington,2336,ENG,232,GB,53.29446,-2.10963 48586,Bolsover,2336,ENG,232,GB,53.22846,-1.29204 48587,Bolton,2336,ENG,232,GB,53.58333,-2.43333 48588,Bolton le Sands,2336,ENG,232,GB,54.09632,-2.80017 48589,Bolton upon Dearne,2336,ENG,232,GB,53.51667,-1.31667 48593,Boosbeck,2336,ENG,232,GB,54.54265,-0.98139 48594,Bootle,2336,ENG,232,GB,53.46667,-3.01667 48595,Bordon,2336,ENG,232,GB,51.11357,-0.86245 48596,Boreham,2336,ENG,232,GB,51.75955,0.54116 48597,Borehamwood,2336,ENG,232,GB,51.65468,-0.27762 48598,Borough Green,2336,ENG,232,GB,51.29158,0.30478 48599,Borough of Bolton,2336,ENG,232,GB,53.58333,-2.5 48600,Borough of Bury,2336,ENG,232,GB,53.58333,-2.33333 48601,Borough of Halton,2336,ENG,232,GB,53.33333,-2.75 48602,Borough of North Tyneside,2336,ENG,232,GB,55.03333,-1.5 48603,Borough of Oldham,2336,ENG,232,GB,53.55,-2.08333 48604,Borough of Rochdale,2336,ENG,232,GB,53.58333,-2.16667 48605,Borough of Stockport,2336,ENG,232,GB,53.41667,-2.16667 48606,Borough of Swindon,2336,ENG,232,GB,51.58333,-1.75 48607,Borough of Tameside,2336,ENG,232,GB,53.5,-2.08333 48608,Borough of Thurrock,2336,ENG,232,GB,51.5,0.41667 48609,Borough of Torbay,2336,ENG,232,GB,50.4516,-3.55785 48610,Borough of Wigan,2336,ENG,232,GB,53.5,-2.58333 48611,Boroughbridge,2336,ENG,232,GB,54.0895,-1.4011 48612,Borrowash,2336,ENG,232,GB,52.90673,-1.38411 48614,Bosham,2336,ENG,232,GB,50.83088,-0.85384 48615,Boston,2336,ENG,232,GB,52.97633,-0.02664 48616,Boston Spa,2336,ENG,232,GB,53.90419,-1.34523 48617,Botesdale,2336,ENG,232,GB,52.34216,1.00405 48619,Botley,2336,ENG,232,GB,50.91433,-1.26984 48620,Bottesford,2336,ENG,232,GB,52.94131,-0.8006 48621,Bottisham,2336,ENG,232,GB,52.2228,0.25878 48622,Boughton,2336,ENG,232,GB,53.2,-0.98333 48623,Bourne,2336,ENG,232,GB,52.76667,-0.38333 48624,Bourne End,2336,ENG,232,GB,51.57622,-0.71291 48625,Bournemouth,2336,ENG,232,GB,50.71918,-1.87806 48626,Bourton,2336,ENG,232,GB,51.07444,-2.32778 48627,Bourton on the Water,2336,ENG,232,GB,51.88584,-1.75492 48628,Bovey Tracey,2336,ENG,232,GB,50.59259,-3.67543 48629,Bovingdon,2336,ENG,232,GB,51.72312,-0.5367 48630,Bovington Camp,2336,ENG,232,GB,50.69782,-2.23506 48631,Bow,2336,ENG,232,GB,50.8,-3.81667 48632,Bow Brickhill,2336,ENG,232,GB,52.0028,-0.68064 48634,Bowburn,2336,ENG,232,GB,54.7385,-1.52521 48635,Bowdon,2336,ENG,232,GB,53.37644,-2.36532 48636,Bowthorpe,2336,ENG,232,GB,52.63884,1.21885 48637,Box,2336,ENG,232,GB,51.41472,-2.24556 48638,Boxgrove,2336,ENG,232,GB,50.85884,-0.7136 48639,Boxted,2336,ENG,232,GB,51.94878,0.91002 48640,Bozeat,2336,ENG,232,GB,52.2227,-0.67326 48642,Bracebridge Heath,2336,ENG,232,GB,53.19647,-0.53421 48643,Brackley,2336,ENG,232,GB,52.03333,-1.15 48644,Bracknell,2336,ENG,232,GB,51.41363,-0.75054 48645,Bracknell Forest,2336,ENG,232,GB,51.41667,-0.75 48646,Bradfield,2336,ENG,232,GB,51.44914,-1.13082 48647,Bradford,2336,ENG,232,GB,53.83333,-1.83333 48648,Bradford-on-Avon,2336,ENG,232,GB,51.34772,-2.25065 48649,Brading,2336,ENG,232,GB,50.6799,-1.14571 48650,Bradley Cross,2336,ENG,232,GB,51.27488,-2.76256 48651,Bradninch,2336,ENG,232,GB,50.82491,-3.42465 48652,Bradwell,2336,ENG,232,GB,52.57353,1.69979 48653,Braintree,2336,ENG,232,GB,51.87819,0.55292 48654,Bramford,2336,ENG,232,GB,52.07631,1.09687 48655,Bramhall,2336,ENG,232,GB,53.35801,-2.16539 48656,Bramham,2336,ENG,232,GB,53.88118,-1.35452 48657,Bramhope,2336,ENG,232,GB,53.88489,-1.61641 48658,Bramley,2336,ENG,232,GB,51.32677,-1.05938 48659,Brampton,2336,ENG,232,GB,52.32039,-0.22007 48660,Brandesburton,2336,ENG,232,GB,53.9111,-0.30122 48661,Brandon,2336,ENG,232,GB,54.75,-1.61667 48662,Bransgore,2336,ENG,232,GB,50.78153,-1.73771 48663,Branston,2336,ENG,232,GB,53.19544,-0.47482 48664,Bratton,2336,ENG,232,GB,51.27056,-2.12444 48665,Braunston,2336,ENG,232,GB,52.28979,-1.20266 48666,Braunton,2336,ENG,232,GB,51.10847,-4.16131 48667,Brayton,2336,ENG,232,GB,53.7651,-1.08921 48668,Bream,2336,ENG,232,GB,51.74822,-2.57747 48671,Bredbury,2336,ENG,232,GB,53.41667,-2.11667 48672,Bredon,2336,ENG,232,GB,52.03008,-2.11671 48673,Brenchley,2336,ENG,232,GB,51.15141,0.39825 48674,Brent,2336,ENG,232,GB,51.55306,-0.3023 48675,Brent Knoll,2336,ENG,232,GB,51.25219,-2.95744 48676,Brentford,2336,ENG,232,GB,51.48619,-0.3083 48677,Brentwood,2336,ENG,232,GB,51.62127,0.30556 48678,Brewood,2336,ENG,232,GB,52.67712,-2.17414 48679,Bridge,2336,ENG,232,GB,51.24513,1.1264 48685,Bridgnorth,2336,ENG,232,GB,52.53661,-2.42033 48686,Bridgwater,2336,ENG,232,GB,51.12837,-3.00356 48687,Bridlington,2336,ENG,232,GB,54.08306,-0.19192 48688,Bridport,2336,ENG,232,GB,50.7338,-2.75831 48689,Brierfield,2336,ENG,232,GB,53.82468,-2.23415 48690,Brierley Hill,2336,ENG,232,GB,52.48173,-2.12139 48691,Brigg,2336,ENG,232,GB,53.55201,-0.49214 48692,Brighouse,2336,ENG,232,GB,53.70322,-1.78428 48693,Brighstone,2336,ENG,232,GB,50.64263,-1.39479 48694,Brightlingsea,2336,ENG,232,GB,51.81164,1.02336 48695,Brighton,2336,ENG,232,GB,50.82838,-0.13947 48696,Brighton and Hove,2336,ENG,232,GB,50.83333,-0.13333 48698,Brigstock,2336,ENG,232,GB,52.45775,-0.60834 48699,Brill,2336,ENG,232,GB,51.81667,-1.05 48700,Brimscombe,2336,ENG,232,GB,51.71973,-2.18553 48701,Brinklow,2336,ENG,232,GB,52.41091,-1.364 48702,Brinscall,2336,ENG,232,GB,53.689,-2.57208 48703,Bristol,2336,ENG,232,GB,51.45523,-2.59665 48704,Briston,2336,ENG,232,GB,52.85369,1.05899 48706,Brixham,2336,ENG,232,GB,50.39431,-3.51585 48707,Brixton,2336,ENG,232,GB,51.46593,-0.10652 48708,Brixton Hill,2336,ENG,232,GB,51.45213,-0.123 48709,Brixworth,2336,ENG,232,GB,52.32912,-0.9035 48710,Broad Blunsdon,2336,ENG,232,GB,51.61339,-1.7787 48711,Broadfield,2336,ENG,232,GB,51.09714,-0.20664 48712,Broadstairs,2336,ENG,232,GB,51.35908,1.43938 48713,Broadstone,2336,ENG,232,GB,50.75717,-1.99406 48714,Broadwater,2336,ENG,232,GB,50.82887,-0.37594 48715,Broadway,2336,ENG,232,GB,52.03825,-1.86079 48716,Brockenhurst,2336,ENG,232,GB,50.81936,-1.57303 48717,Brockley,2336,ENG,232,GB,51.4,-2.76667 48718,Bromborough,2336,ENG,232,GB,53.3485,-2.97935 48719,Bromham,2336,ENG,232,GB,52.14508,-0.52906 48720,Brompton,2336,ENG,232,GB,54.36015,-1.42422 48721,Bromsgrove,2336,ENG,232,GB,52.33574,-2.05983 48722,Bromyard,2336,ENG,232,GB,52.19019,-2.50875 48723,Brooke,2336,ENG,232,GB,52.54175,1.37076 48725,Broseley,2336,ENG,232,GB,52.61321,-2.48269 48726,Brotton,2336,ENG,232,GB,54.56661,-0.93929 48727,Brough,2336,ENG,232,GB,53.72861,-0.57215 48729,Broughton,2336,ENG,232,GB,53.56667,-0.55 48731,Broughton Astley,2336,ENG,232,GB,52.52787,-1.21768 48732,Brownhills,2336,ENG,232,GB,52.63333,-1.93333 48733,Broxbourne,2336,ENG,232,GB,51.74712,-0.01923 48735,Brundall,2336,ENG,232,GB,52.62426,1.43509 48736,Bruton,2336,ENG,232,GB,51.1125,-2.45278 48742,Bubwith,2336,ENG,232,GB,53.81905,-0.91968 48743,Buckden,2336,ENG,232,GB,52.29415,-0.24912 48744,Buckfastleigh,2336,ENG,232,GB,50.48132,-3.77913 48746,Buckhurst Hill,2336,ENG,232,GB,51.62409,0.03262 48748,Buckingham,2336,ENG,232,GB,51.99968,-0.98779 48749,Buckinghamshire,2336,ENG,232,GB,51.75,-0.75 48751,Bucknell,2336,ENG,232,GB,52.35997,-2.95066 48752,Bude,2336,ENG,232,GB,50.82435,-4.5413 48753,Budleigh Salterton,2336,ENG,232,GB,50.62983,-3.32181 48754,Bugbrooke,2336,ENG,232,GB,52.21006,-1.01304 48755,Bugle,2336,ENG,232,GB,50.39577,-4.79334 48757,Bulford,2336,ENG,232,GB,51.1893,-1.76009 48758,Bulkington,2336,ENG,232,GB,51.32361,-2.08361 48759,Bulphan,2336,ENG,232,GB,51.54612,0.36066 48760,Bunbury,2336,ENG,232,GB,53.11559,-2.65151 48761,Bungay,2336,ENG,232,GB,52.45434,1.43818 48762,Buntingford,2336,ENG,232,GB,51.94612,-0.01841 48763,Burbage,2336,ENG,232,GB,51.35184,-1.67087 48764,Bures Saint Mary,2336,ENG,232,GB,51.9724,0.77488 48765,Burford,2336,ENG,232,GB,51.80915,-1.63628 48766,Burgess Hill,2336,ENG,232,GB,50.95843,-0.13287 48767,Burgh le Marsh,2336,ENG,232,GB,53.16158,0.24484 48769,Burham,2336,ENG,232,GB,51.33243,0.47833 48770,Burley,2336,ENG,232,GB,50.828,-1.69977 48771,Burley in Wharfedale,2336,ENG,232,GB,53.9102,-1.75798 48772,Burnage,2336,ENG,232,GB,53.43265,-2.19967 48773,Burneside,2336,ENG,232,GB,54.35271,-2.76151 48774,Burngreave,2336,ENG,232,GB,53.39302,-1.45789 48775,Burnham-on-Crouch,2336,ENG,232,GB,51.63272,0.81488 48776,Burnham-on-Sea,2336,ENG,232,GB,51.23862,-2.9978 48777,Burniston,2336,ENG,232,GB,54.32385,-0.44813 48778,Burnley,2336,ENG,232,GB,53.8,-2.23333 48779,Burnopfield,2336,ENG,232,GB,54.90624,-1.72486 48781,Burntwood,2336,ENG,232,GB,52.68075,-1.92759 48782,Burringham,2336,ENG,232,GB,53.57402,-0.73957 48783,Burrington,2336,ENG,232,GB,51.32884,-2.74868 48785,Burscough,2336,ENG,232,GB,53.5964,-2.83972 48786,Bursledon,2336,ENG,232,GB,50.88658,-1.31596 48787,Burstwick,2336,ENG,232,GB,53.73211,-0.13956 48788,Burton,2336,ENG,232,GB,53.26667,-0.56667 48789,Burton Joyce,2336,ENG,232,GB,52.98825,-1.03407 48790,Burton Latimer,2336,ENG,232,GB,52.36368,-0.67853 48792,Burton on the Wolds,2336,ENG,232,GB,52.78574,-1.12988 48791,Burton Pidsea,2336,ENG,232,GB,53.76327,-0.10703 48793,Burton upon Stather,2336,ENG,232,GB,53.64911,-0.68453 48794,Burton upon Trent,2336,ENG,232,GB,52.80728,-1.64263 48795,Burtonwood,2336,ENG,232,GB,53.42948,-2.65852 48796,Burwash,2336,ENG,232,GB,50.99755,0.38504 48797,Burwell,2336,ENG,232,GB,52.27632,0.32732 48798,Bury,2336,ENG,232,GB,53.6,-2.3 48799,Bury St Edmunds,2336,ENG,232,GB,52.2463,0.71111 48801,Bushey,2336,ENG,232,GB,51.64316,-0.36053 48803,Butterwick,2336,ENG,232,GB,52.98333,0.06667 48804,Buxted,2336,ENG,232,GB,50.99003,0.13441 48805,Buxton,2336,ENG,232,GB,53.25741,-1.90982 48806,Byfield,2336,ENG,232,GB,52.17546,-1.24566 48807,Byram,2336,ENG,232,GB,53.72394,-1.26128 48808,Caddington,2336,ENG,232,GB,51.86621,-0.45679 48809,Cadnam,2336,ENG,232,GB,50.92047,-1.5797 48818,Caister-on-Sea,2336,ENG,232,GB,52.64809,1.72648 48819,Caistor,2336,ENG,232,GB,53.49673,-0.31538 48820,Calcot,2336,ENG,232,GB,51.44058,-1.05091 48823,Calderdale,2336,ENG,232,GB,53.7,-2.0 48826,Callington,2336,ENG,232,GB,50.50147,-4.31314 48827,Calne,2336,ENG,232,GB,51.43879,-2.00571 48828,Calverton,2336,ENG,232,GB,53.03728,-1.08263 48829,Camber,2336,ENG,232,GB,50.93473,0.79848 48830,Camberley,2336,ENG,232,GB,51.33705,-0.74261 48831,Camblesforth,2336,ENG,232,GB,53.7268,-1.01998 48832,Camborne,2336,ENG,232,GB,50.21306,-5.29731 48833,Cambourne,2336,ENG,232,GB,52.22115,-0.07025 48834,Cambridge,2336,ENG,232,GB,52.2,0.11667 48835,Cambridgeshire,2336,ENG,232,GB,52.33333,0.08333 48837,Camden Town,2336,ENG,232,GB,51.54057,-0.14334 48838,Cameley,2336,ENG,232,GB,51.31616,-2.56079 48839,Camelford,2336,ENG,232,GB,50.62185,-4.67963 48841,Campsall,2336,ENG,232,GB,53.61917,-1.18002 48842,Canary Wharf,2336,ENG,232,GB,51.50519,-0.02085 48843,Canewdon,2336,ENG,232,GB,51.61759,0.74458 48844,Canford Heath,2336,ENG,232,GB,50.751,-1.96862 48845,Cannock,2336,ENG,232,GB,52.69045,-2.03085 48846,Canterbury,2336,ENG,232,GB,51.27904,1.07992 48847,Canvey Island,2336,ENG,232,GB,51.52199,0.5809 48849,Capel,2336,ENG,232,GB,51.14942,-0.32375 48851,Capel le Ferne,2336,ENG,232,GB,51.10339,1.21165 48850,Capel Saint Mary,2336,ENG,232,GB,52.00369,1.04482 48852,Carcroft,2336,ENG,232,GB,53.58282,-1.17648 48856,Cardington,2336,ENG,232,GB,52.11742,-0.41289 48859,Carlisle,2336,ENG,232,GB,54.8951,-2.9382 48860,Carlton,2336,ENG,232,GB,54.59004,-1.39117 48865,Carnforth,2336,ENG,232,GB,54.13163,-2.76914 48874,Carshalton,2336,ENG,232,GB,51.36829,-0.16755 48875,Carterton,2336,ENG,232,GB,51.75905,-1.59435 48876,Castle Cary,2336,ENG,232,GB,51.09,-2.51417 48877,Castle Donington,2336,ENG,232,GB,52.84291,-1.34188 48879,Castle Hedingham,2336,ENG,232,GB,51.99015,0.59882 48880,Castle Vale,2336,ENG,232,GB,52.51879,-1.79683 48883,Castleford,2336,ENG,232,GB,53.72587,-1.36256 48886,Castleside,2336,ENG,232,GB,54.83429,-1.87849 48888,Castor,2336,ENG,232,GB,52.57319,-0.34603 48889,Catcliffe,2336,ENG,232,GB,53.39316,-1.36207 48890,Caterham,2336,ENG,232,GB,51.2823,-0.07889 48891,Caton,2336,ENG,232,GB,54.07624,-2.71903 48893,Catterall,2336,ENG,232,GB,53.87965,-2.76478 48894,Catterick,2336,ENG,232,GB,54.37542,-1.63328 48895,Catterick Garrison,2336,ENG,232,GB,54.37748,-1.72232 48897,Cawood,2336,ENG,232,GB,53.83303,-1.12962 48898,Cawston,2336,ENG,232,GB,52.76667,1.16667 48899,Cawthorne,2336,ENG,232,GB,53.56687,-1.57259 48900,Caythorpe,2336,ENG,232,GB,53.01667,-0.6 48903,Central Bedfordshire,2336,ENG,232,GB,51.99755,-0.42148 48904,Chacewater,2336,ENG,232,GB,50.25675,-5.15757 48905,Chadwell Heath,2336,ENG,232,GB,51.57121,0.13271 48906,Chadwell St Mary,2336,ENG,232,GB,51.4814,0.36343 48907,Chafford Hundred,2336,ENG,232,GB,51.4892,0.2944 48908,Chagford,2336,ENG,232,GB,50.67504,-3.83936 48909,Chalfont Saint Peter,2336,ENG,232,GB,51.60885,-0.55618 48910,Chalfont St Giles,2336,ENG,232,GB,51.63184,-0.57026 48911,Chalford,2336,ENG,232,GB,51.72583,-2.15139 48912,Chalgrove,2336,ENG,232,GB,51.66476,-1.0764 48913,Chalton,2336,ENG,232,GB,51.9279,-0.50147 48914,Chapel Allerton,2336,ENG,232,GB,53.82901,-1.53834 48916,Chapel en le Frith,2336,ENG,232,GB,53.32407,-1.91291 48915,Chapel Saint Leonards,2336,ENG,232,GB,53.21667,0.31667 48918,Chapeltown,2336,ENG,232,GB,53.46506,-1.47217 48919,Chapmanslade,2336,ENG,232,GB,51.22917,-2.24889 48920,Chard,2336,ENG,232,GB,50.8727,-2.96597 48921,Charfield,2336,ENG,232,GB,51.62722,-2.40667 48922,Charing,2336,ENG,232,GB,51.21073,0.79466 48923,Charlbury,2336,ENG,232,GB,51.8727,-1.48247 48925,Charlton Kings,2336,ENG,232,GB,51.88374,-2.04239 48926,Charlton Marshall,2336,ENG,232,GB,50.83591,-2.14231 48927,Charminster,2336,ENG,232,GB,50.73333,-2.45 48928,Charmouth,2336,ENG,232,GB,50.73889,-2.90055 48929,Chartham,2336,ENG,232,GB,51.2562,1.01836 48930,Charvil,2336,ENG,232,GB,51.47573,-0.88591 48931,Chasetown,2336,ENG,232,GB,52.67232,-1.92535 48932,Chatburn,2336,ENG,232,GB,53.89228,-2.35495 48933,Chatham,2336,ENG,232,GB,51.37891,0.52786 48934,Chatteris,2336,ENG,232,GB,52.45624,0.05236 48935,Cheadle,2336,ENG,232,GB,52.98333,-1.98333 48936,Cheadle Heath,2336,ENG,232,GB,53.40186,-2.19088 48937,Cheadle Hulme,2336,ENG,232,GB,53.3761,-2.1897 48938,Cheam,2336,ENG,232,GB,51.36179,-0.21977 48939,Cheddar,2336,ENG,232,GB,51.27537,-2.77662 48940,Cheddington,2336,ENG,232,GB,51.84784,-0.66429 48941,Cheddleton,2336,ENG,232,GB,53.0691,-2.04228 48942,Cheetham Hill,2336,ENG,232,GB,53.49862,-2.23846 48943,Chelford,2336,ENG,232,GB,53.2709,-2.28329 48944,Chelmsford,2336,ENG,232,GB,51.73575,0.46958 48945,Chelmsley Wood,2336,ENG,232,GB,52.4781,-1.73813 48946,Chelsea,2336,ENG,232,GB,51.48755,-0.16936 48947,Cheltenham,2336,ENG,232,GB,51.90006,-2.07972 48949,Cherry Burton,2336,ENG,232,GB,53.86667,-0.5 48950,Chertsey,2336,ENG,232,GB,51.38812,-0.50782 48951,Chesham,2336,ENG,232,GB,51.7,-0.6 48952,Cheshire East,2336,ENG,232,GB,53.16702,-2.36245 48953,Cheshire West and Chester,2336,ENG,232,GB,53.16352,-2.73595 48954,Cheshunt,2336,ENG,232,GB,51.7002,-0.03026 48955,Chessington,2336,ENG,232,GB,51.3624,-0.30427 48956,Chester,2336,ENG,232,GB,53.1905,-2.89189 48957,Chester-le-Street,2336,ENG,232,GB,54.85862,-1.57408 48958,Chesterfield,2336,ENG,232,GB,53.25,-1.41667 48959,Chew Magna,2336,ENG,232,GB,51.36611,-2.61028 48960,Chichester,2336,ENG,232,GB,50.83673,-0.78003 48961,Chickerell,2336,ENG,232,GB,50.62429,-2.5028 48962,Chicksands,2336,ENG,232,GB,52.04585,-0.3639 48963,Chiddingfold,2336,ENG,232,GB,51.11866,-0.62262 48964,Chigwell,2336,ENG,232,GB,51.61999,0.07596 48965,Chilcompton,2336,ENG,232,GB,51.26391,-2.50502 48966,Child Okeford,2336,ENG,232,GB,50.9137,-2.23679 48967,Chilton Foliat,2336,ENG,232,GB,51.43245,-1.53912 48968,Chilworth,2336,ENG,232,GB,51.21635,-0.53129 48969,Chinley,2336,ENG,232,GB,53.34025,-1.939 48970,Chinnor,2336,ENG,232,GB,51.70177,-0.91161 48971,Chippenham,2336,ENG,232,GB,51.46,-2.12472 48972,Chipping Campden,2336,ENG,232,GB,52.04964,-1.7767 48973,Chipping Norton,2336,ENG,232,GB,51.94109,-1.5453 48974,Chipping Ongar,2336,ENG,232,GB,51.70379,0.24548 48975,Chipping Sodbury,2336,ENG,232,GB,51.53813,-2.39379 48978,Chiseldon,2336,ENG,232,GB,51.51606,-1.73206 48979,Chislehurst,2336,ENG,232,GB,51.41709,0.06858 48980,Chobham,2336,ENG,232,GB,51.34836,-0.60639 48981,Cholsey,2336,ENG,232,GB,51.5728,-1.15356 48982,Choppington,2336,ENG,232,GB,55.15004,-1.60332 48983,Chopwell,2336,ENG,232,GB,54.91797,-1.82013 48984,Chorley,2336,ENG,232,GB,53.65,-2.61667 48985,Chorleywood,2336,ENG,232,GB,51.65472,-0.51404 48986,Chorlton,2336,ENG,232,GB,53.05029,-2.40541 48987,Chorlton cum Hardy,2336,ENG,232,GB,53.43505,-2.2631 48988,Christchurch,2336,ENG,232,GB,50.73583,-1.78129 48990,Chudleigh,2336,ENG,232,GB,50.60496,-3.60031 48991,Chudleigh Knighton,2336,ENG,232,GB,50.58507,-3.63187 48992,Chulmleigh,2336,ENG,232,GB,50.91289,-3.86938 48993,Church,2336,ENG,232,GB,53.75177,-2.39121 48994,Church Fenton,2336,ENG,232,GB,53.82626,-1.2189 48995,Church Stretton,2336,ENG,232,GB,52.53778,-2.80149 48996,Churchdown,2336,ENG,232,GB,51.87739,-2.17087 48997,Churchill,2336,ENG,232,GB,51.34291,-2.78338 48998,Churt,2336,ENG,232,GB,51.13603,-0.77534 48999,Cinderford,2336,ENG,232,GB,51.82421,-2.4987 49000,Cirencester,2336,ENG,232,GB,51.71927,-1.97145 49001,City and Borough of Birmingham,2336,ENG,232,GB,52.48048,-1.89823 49002,City and Borough of Leeds,2336,ENG,232,GB,53.79644,-1.5477 49003,City and Borough of Salford,2336,ENG,232,GB,53.5,-2.33333 49004,City and Borough of Wakefield,2336,ENG,232,GB,53.68085,-1.49895 49007,City of Bristol,2336,ENG,232,GB,51.45,-2.6 49009,City of Kingston upon Hull,2336,ENG,232,GB,53.75,-0.33333 49010,City of Leicester,2336,ENG,232,GB,52.63333,-1.13333 49011,City of London,2336,ENG,232,GB,51.51279,-0.09184 49012,City of Westminster,2336,ENG,232,GB,51.4975,-0.1357 49013,City of York,2336,ENG,232,GB,53.96396,-1.09142 49016,Clacton-on-Sea,2336,ENG,232,GB,51.78967,1.15597 49017,Clapham,2336,ENG,232,GB,52.16085,-0.49529 49018,Clarborough,2336,ENG,232,GB,53.34549,-0.90382 49019,Clare,2336,ENG,232,GB,52.07861,0.58167 49021,Claydon,2336,ENG,232,GB,52.10672,1.11134 49022,Claypole,2336,ENG,232,GB,53.03144,-0.73407 49024,Clayton le Moors,2336,ENG,232,GB,53.76667,-2.38333 49023,Clayton West,2336,ENG,232,GB,53.59501,-1.61107 49025,Clayton-le-Woods,2336,ENG,232,GB,53.69689,-2.66818 49026,Cleator Moor,2336,ENG,232,GB,54.52143,-3.5159 49027,Cleckheaton,2336,ENG,232,GB,53.72405,-1.71294 49028,Cleethorpes,2336,ENG,232,GB,53.56047,-0.03225 49030,Clenchwarton,2336,ENG,232,GB,52.75604,0.3579 49031,Cleobury Mortimer,2336,ENG,232,GB,52.37853,-2.48196 49032,Clerkenwell,2336,ENG,232,GB,51.52438,-0.11022 49033,Clevedon,2336,ENG,232,GB,51.44227,-2.85786 49034,Cleveleys,2336,ENG,232,GB,53.8775,-3.03987 49035,Cliffe,2336,ENG,232,GB,51.46224,0.49833 49036,Clifton,2336,ENG,232,GB,52.0399,-0.30051 49037,Clitheroe,2336,ENG,232,GB,53.86667,-2.4 49038,Clive,2336,ENG,232,GB,52.81335,-2.72295 49039,Clophill,2336,ENG,232,GB,52.02727,-0.42377 49040,Clowne,2336,ENG,232,GB,53.27449,-1.26406 49041,Clutton,2336,ENG,232,GB,51.32944,-2.54306 49047,Coalville,2336,ENG,232,GB,52.72247,-1.3702 49049,Coates,2336,ENG,232,GB,51.7075,-2.03389 49050,Cobham,2336,ENG,232,GB,51.32997,-0.4113 49052,Cockermouth,2336,ENG,232,GB,54.66209,-3.36086 49053,Cockfield,2336,ENG,232,GB,54.61373,-1.80897 49054,Cockington,2336,ENG,232,GB,50.46335,-3.55691 49055,Codicote,2336,ENG,232,GB,51.85052,-0.2367 49056,Codsall,2336,ENG,232,GB,52.62989,-2.20148 49058,Cogenhoe,2336,ENG,232,GB,52.23758,-0.78381 49059,Coggeshall,2336,ENG,232,GB,51.87077,0.68536 49061,Colchester,2336,ENG,232,GB,51.88921,0.90421 49062,Cold Ash,2336,ENG,232,GB,51.42426,-1.26463 49063,Cold Norton,2336,ENG,232,GB,51.67209,0.66997 49064,Colden Common,2336,ENG,232,GB,50.99483,-1.31143 49066,Coleford,2336,ENG,232,GB,51.79535,-2.61354 49068,Colerne,2336,ENG,232,GB,51.43833,-2.2628 49070,Collier Row,2336,ENG,232,GB,51.59893,0.166 49071,Collingbourne Kingston,2336,ENG,232,GB,51.30105,-1.65876 49072,Collingham,2336,ENG,232,GB,53.91167,-1.41174 49073,Colnbrook,2336,ENG,232,GB,51.48384,-0.52142 49074,Colne,2336,ENG,232,GB,53.85713,-2.16851 49075,Colsterworth,2336,ENG,232,GB,52.8066,-0.62056 49076,Coltishall,2336,ENG,232,GB,52.72804,1.36653 49077,Colwich,2336,ENG,232,GB,52.78764,-1.98206 49079,Colyton,2336,ENG,232,GB,50.74006,-3.07021 49080,Combe Martin,2336,ENG,232,GB,51.19873,-4.02343 49082,Comberton,2336,ENG,232,GB,52.18709,0.01905 49083,Compton,2336,ENG,232,GB,51.02385,-1.33713 49084,Compton Martin,2336,ENG,232,GB,51.31056,-2.65528 49086,Congleton,2336,ENG,232,GB,53.16314,-2.21253 49087,Congresbury,2336,ENG,232,GB,51.37135,-2.81018 49088,Coningsby,2336,ENG,232,GB,53.10598,-0.17595 49089,Conisbrough,2336,ENG,232,GB,53.48188,-1.23214 49092,Consett,2336,ENG,232,GB,54.85404,-1.8316 49094,Cookham,2336,ENG,232,GB,51.55936,-0.7081 49095,Cookley,2336,ENG,232,GB,52.31667,1.45 49097,Cople,2336,ENG,232,GB,52.12342,-0.38933 49098,Copmanthorpe,2336,ENG,232,GB,53.91419,-1.14209 49099,Copplestone,2336,ENG,232,GB,50.81073,-3.74607 49100,Coppull,2336,ENG,232,GB,53.62527,-2.65854 49101,Copthorne,2336,ENG,232,GB,51.13929,-0.11742 49102,Corbridge,2336,ENG,232,GB,54.97365,-2.01798 49103,Corby,2336,ENG,232,GB,52.49637,-0.68939 49104,Corby Glen,2336,ENG,232,GB,52.81262,-0.51817 49105,Corfe Castle,2336,ENG,232,GB,50.63947,-2.05672 49106,Cornholme,2336,ENG,232,GB,53.7323,-2.13851 49107,Cornwall,2336,ENG,232,GB,50.41667,-4.75 49108,Corse,2336,ENG,232,GB,51.95943,-2.30636 49109,Corsham,2336,ENG,232,GB,51.43433,-2.18437 49110,Corston,2336,ENG,232,GB,51.385,-2.44028 49111,Cosby,2336,ENG,232,GB,52.55127,-1.19395 49112,Cosham,2336,ENG,232,GB,50.84654,-1.06344 49113,Costessey,2336,ENG,232,GB,52.65914,1.2097 49114,Cotgrave,2336,ENG,232,GB,52.90859,-1.03752 49115,Cottenham,2336,ENG,232,GB,52.28743,0.1254 49116,Cottesmore,2336,ENG,232,GB,52.71384,-0.6633 49117,Cottingham,2336,ENG,232,GB,52.50243,-0.7554 49118,Coulsdon,2336,ENG,232,GB,51.32002,-0.14088 49119,Coundon,2336,ENG,232,GB,54.6628,-1.62688 49120,Countesthorpe,2336,ENG,232,GB,52.55379,-1.14526 49121,County Durham,2336,ENG,232,GB,54.7768,-1.57575 49126,Coven,2336,ENG,232,GB,52.65587,-2.1353 49127,Coventry,2336,ENG,232,GB,52.40656,-1.51217 49128,Cowbit,2336,ENG,232,GB,52.74523,-0.12978 49131,Cowes,2336,ENG,232,GB,50.76306,-1.29772 49132,Cowfold,2336,ENG,232,GB,50.98945,-0.27243 49134,Cowley,2336,ENG,232,GB,51.73213,-1.20631 49135,Cowplain,2336,ENG,232,GB,50.89411,-1.01824 49136,Coxhoe,2336,ENG,232,GB,54.71475,-1.50356 49138,Cradley Heath,2336,ENG,232,GB,52.47214,-2.08212 49141,Cramlington,2336,ENG,232,GB,55.08652,-1.58598 49142,Cranbrook,2336,ENG,232,GB,51.09662,0.53567 49143,Cranfield,2336,ENG,232,GB,52.06869,-0.60884 49144,Cranham,2336,ENG,232,GB,51.56565,0.2659 49145,Cranleigh,2336,ENG,232,GB,51.14209,-0.48374 49146,Cranwell,2336,ENG,232,GB,53.03681,-0.46176 49147,Craven Arms,2336,ENG,232,GB,52.44308,-2.83562 49148,Crawley,2336,ENG,232,GB,51.11303,-0.18312 49149,Crawley Down,2336,ENG,232,GB,51.12061,-0.0773 49150,Credenhill,2336,ENG,232,GB,52.08351,-2.80804 49151,Crediton,2336,ENG,232,GB,50.78333,-3.65 49152,Creech Saint Michael,2336,ENG,232,GB,51.02333,-3.03833 49153,Creswell,2336,ENG,232,GB,53.26287,-1.21987 49154,Crewe,2336,ENG,232,GB,53.09787,-2.44161 49155,Crewkerne,2336,ENG,232,GB,50.88298,-2.79588 49157,Crick,2336,ENG,232,GB,52.34808,-1.13708 49159,Cricklade,2336,ENG,232,GB,51.64061,-1.85738 49161,Cringleford,2336,ENG,232,GB,52.60482,1.24334 49163,Croft,2336,ENG,232,GB,52.55668,-1.24643 49164,Crofton,2336,ENG,232,GB,53.65639,-1.42968 49166,Cromer,2336,ENG,232,GB,52.93123,1.29892 49167,Cromford,2336,ENG,232,GB,53.10848,-1.56014 49168,Crondall,2336,ENG,232,GB,51.23285,-0.86329 49169,Crook,2336,ENG,232,GB,54.71252,-1.7497 49170,Cropwell Bishop,2336,ENG,232,GB,52.9148,-0.98482 49171,Crosby,2336,ENG,232,GB,53.47778,-3.03333 49173,Cross Hills,2336,ENG,232,GB,53.90606,-1.98492 49179,Croston,2336,ENG,232,GB,53.66217,-2.77523 49180,Crouch End,2336,ENG,232,GB,51.57971,-0.12373 49181,Crowborough,2336,ENG,232,GB,51.06098,0.16342 49182,Crowland,2336,ENG,232,GB,52.67571,-0.16849 49183,Crowle,2336,ENG,232,GB,53.60753,-0.83256 49184,Crowthorne,2336,ENG,232,GB,51.37027,-0.79219 49186,Croydon,2336,ENG,232,GB,51.38333,-0.1 49190,Crumpsall,2336,ENG,232,GB,53.51827,-2.24447 49193,Cuckfield,2336,ENG,232,GB,51.01073,-0.14068 49194,Cuddington,2336,ENG,232,GB,53.24488,-2.61879 49195,Cudworth,2336,ENG,232,GB,53.57131,-1.41595 49196,Cuffley,2336,ENG,232,GB,51.70799,-0.11209 49197,Culcheth,2336,ENG,232,GB,53.4511,-2.52104 49199,Cullingworth,2336,ENG,232,GB,53.82444,-1.8973 49201,Cullompton,2336,ENG,232,GB,50.8553,-3.39268 49205,Culverstone Green,2336,ENG,232,GB,51.34085,0.34686 49207,Cumbria,2336,ENG,232,GB,54.58333,-2.83333 49210,Curdworth,2336,ENG,232,GB,52.53382,-1.73687 49212,Curry Rivel,2336,ENG,232,GB,51.02306,-2.86753 49214,Cuxton,2336,ENG,232,GB,51.3743,0.45688 49219,Dagenham,2336,ENG,232,GB,51.55,0.16667 49227,Dalston,2336,ENG,232,GB,54.84207,-2.98459 49228,Dalton in Furness,2336,ENG,232,GB,54.15796,-3.17977 49229,Danbury,2336,ENG,232,GB,51.71645,0.58245 49230,Danby,2336,ENG,232,GB,54.46606,-0.91073 49232,Darenth,2336,ENG,232,GB,51.42137,0.25784 49233,Daresbury,2336,ENG,232,GB,53.34184,-2.635 49234,Darfield,2336,ENG,232,GB,53.5339,-1.37595 49235,Darlaston,2336,ENG,232,GB,52.56667,-2.03333 49236,Darlington,2336,ENG,232,GB,54.53333,-1.53333 49237,Darras Hall,2336,ENG,232,GB,55.0356,-1.76425 49238,Darrington,2336,ENG,232,GB,53.67566,-1.26901 49239,Dartford,2336,ENG,232,GB,51.44657,0.21423 49240,Dartmouth,2336,ENG,232,GB,50.3522,-3.5794 49241,Darton,2336,ENG,232,GB,53.58705,-1.52676 49243,Darwen,2336,ENG,232,GB,53.69803,-2.46494 49244,Datchet,2336,ENG,232,GB,51.4839,-0.57893 49245,Datchworth,2336,ENG,232,GB,51.85126,-0.15956 49246,Daventry,2336,ENG,232,GB,52.25688,-1.16066 49247,Dawlish,2336,ENG,232,GB,50.58118,-3.46644 49248,Deal,2336,ENG,232,GB,51.22322,1.40432 49249,Deanshanger,2336,ENG,232,GB,52.04996,-0.88663 49250,Dearham,2336,ENG,232,GB,54.71175,-3.44364 49251,Debenham,2336,ENG,232,GB,52.22422,1.18172 49252,Deddington,2336,ENG,232,GB,51.9806,-1.32055 49253,Dedham,2336,ENG,232,GB,51.95892,0.99336 49257,Delabole,2336,ENG,232,GB,50.62347,-4.7319 49258,Delph,2336,ENG,232,GB,53.56667,-2.01667 49261,Denby Dale,2336,ENG,232,GB,53.57228,-1.65895 49262,Denham,2336,ENG,232,GB,51.56667,-0.5 49263,Denholme,2336,ENG,232,GB,53.80189,-1.89503 49264,Denmead,2336,ENG,232,GB,50.90395,-1.06744 49267,Denton,2336,ENG,232,GB,53.45678,-2.11822 49268,Denton Holme,2336,ENG,232,GB,54.885,-2.941 49269,Derby,2336,ENG,232,GB,52.92277,-1.47663 49270,Derbyshire,2336,ENG,232,GB,53.16667,-1.58333 49274,Dersingham,2336,ENG,232,GB,52.84549,0.50339 49275,Desborough,2336,ENG,232,GB,52.44183,-0.82126 49276,Desford,2336,ENG,232,GB,52.62598,-1.29395 49277,Devizes,2336,ENG,232,GB,51.35084,-1.99421 49278,Devon,2336,ENG,232,GB,50.75,-3.75 49279,Dewsbury,2336,ENG,232,GB,53.69076,-1.62907 49280,Dickens Heath,2336,ENG,232,GB,52.38568,-1.83935 49281,Dickleburgh,2336,ENG,232,GB,52.3965,1.18498 49282,Didcot,2336,ENG,232,GB,51.60928,-1.24214 49283,Didsbury,2336,ENG,232,GB,53.41698,-2.23145 49284,Diggle,2336,ENG,232,GB,53.56744,-1.99723 49287,Dinnington,2336,ENG,232,GB,53.36667,-1.2 49288,Dinton,2336,ENG,232,GB,51.08333,-1.98333 49289,Disley,2336,ENG,232,GB,53.35865,-2.03848 49290,Diss,2336,ENG,232,GB,52.37675,1.1091 49291,Distington,2336,ENG,232,GB,54.59733,-3.5388 49292,District of Rutland,2336,ENG,232,GB,52.66667,-0.66667 49293,Ditchingham,2336,ENG,232,GB,52.46729,1.4437 49294,Ditchling,2336,ENG,232,GB,50.921,-0.11536 49295,Ditton Hill,2336,ENG,232,GB,51.37947,-0.31281 49297,Dobwalls,2336,ENG,232,GB,50.45768,-4.51735 49298,Doddington,2336,ENG,232,GB,52.49671,0.06017 49299,Dodworth,2336,ENG,232,GB,53.54306,-1.52779 49303,Doncaster,2336,ENG,232,GB,53.5,-1.08333 49304,Donington,2336,ENG,232,GB,52.90461,-0.20505 49305,Donisthorpe,2336,ENG,232,GB,52.72401,-1.538 49306,Donnington,2336,ENG,232,GB,51.95135,-1.72142 49307,Dorchester,2336,ENG,232,GB,50.71667,-2.43333 49308,Dorking,2336,ENG,232,GB,51.23228,-0.3338 49309,Dormansland,2336,ENG,232,GB,51.16024,0.00618 49311,Dorridge,2336,ENG,232,GB,52.37259,-1.75318 49312,Dorset,2336,ENG,232,GB,50.75,-2.33333 49313,Dorstone,2336,ENG,232,GB,52.06667,-3.0 49316,Dove Holes,2336,ENG,232,GB,53.29828,-1.88775 49317,Dover,2336,ENG,232,GB,51.12598,1.31257 49318,Dovercourt,2336,ENG,232,GB,51.93649,1.27831 49319,Doveridge,2336,ENG,232,GB,52.90526,-1.8248 49320,Downham Market,2336,ENG,232,GB,52.60714,0.38375 49322,Downton,2336,ENG,232,GB,50.99366,-1.75129 49324,Draycott,2336,ENG,232,GB,51.25615,-2.75116 49326,Driffield,2336,ENG,232,GB,54.00613,-0.44495 49327,Droitwich,2336,ENG,232,GB,52.26667,-2.15 49329,Dronfield,2336,ENG,232,GB,53.30221,-1.47507 49331,Droylsden,2336,ENG,232,GB,53.48005,-2.14543 49333,Drybrook,2336,ENG,232,GB,51.8555,-2.51681 49334,Ducklington,2336,ENG,232,GB,51.76763,-1.48418 49335,Dudley,2336,ENG,232,GB,52.5,-2.11667 49336,Duffield,2336,ENG,232,GB,52.98627,-1.48865 49338,Dukinfield,2336,ENG,232,GB,53.47497,-2.08809 49339,Dulverton,2336,ENG,232,GB,51.04007,-3.55035 49345,Dunchurch,2336,ENG,232,GB,52.33757,-1.29136 49351,Dundry,2336,ENG,232,GB,51.3988,-2.63964 49355,Dunholme,2336,ENG,232,GB,53.30067,-0.46541 49357,Dunkeswell,2336,ENG,232,GB,50.86301,-3.22289 49360,Dunnington,2336,ENG,232,GB,53.95,-0.25 49363,Dunstable,2336,ENG,232,GB,51.88571,-0.52288 49364,Dunswell,2336,ENG,232,GB,53.80106,-0.37139 49366,Durham,2336,ENG,232,GB,54.77676,-1.57566 49367,Dursley,2336,ENG,232,GB,51.68139,-2.35333 49368,Duxford,2336,ENG,232,GB,52.09393,0.15917 49371,Dymchurch,2336,ENG,232,GB,51.02544,0.99392 49373,Eaglescliffe,2336,ENG,232,GB,54.52521,-1.35043 49375,Earby,2336,ENG,232,GB,53.91546,-2.14285 49376,Earith,2336,ENG,232,GB,52.35422,0.03056 49377,Earl Shilton,2336,ENG,232,GB,52.57682,-1.31536 49378,Earls Barton,2336,ENG,232,GB,52.26627,-0.75248 49379,Earls Colne,2336,ENG,232,GB,51.92744,0.70107 49380,Earlsfield,2336,ENG,232,GB,51.4439,-0.1854 49382,Easington,2336,ENG,232,GB,54.78528,-1.35917 49383,Easingwold,2336,ENG,232,GB,54.1201,-1.1939 49385,East Ayton,2336,ENG,232,GB,54.2548,-0.47483 49386,East Bergholt,2336,ENG,232,GB,51.97785,1.01761 49387,East Boldon,2336,ENG,232,GB,54.94452,-1.42815 49388,East Bridgford,2336,ENG,232,GB,52.97954,-0.96563 49390,East Chevington,2336,ENG,232,GB,55.28333,-1.58333 49391,East Cowes,2336,ENG,232,GB,50.75774,-1.28815 49392,East Dean,2336,ENG,232,GB,51.03979,-1.60941 49393,East Dereham,2336,ENG,232,GB,52.68333,0.93333 49395,East Grinstead,2336,ENG,232,GB,51.12382,-0.0061 49396,East Hanney,2336,ENG,232,GB,51.63443,-1.39518 49397,East Harling,2336,ENG,232,GB,52.43843,0.93353 49398,East Harptree,2336,ENG,232,GB,51.30111,-2.62167 49399,East Horsley,2336,ENG,232,GB,51.27358,-0.43207 49400,East Keswick,2336,ENG,232,GB,53.8943,-1.45221 49402,East Leake,2336,ENG,232,GB,52.83015,-1.18103 49405,East Markham,2336,ENG,232,GB,53.25221,-0.89385 49406,East Molesey,2336,ENG,232,GB,51.39872,-0.34916 49407,East Peckham,2336,ENG,232,GB,51.21234,0.38624 49408,East Rainton,2336,ENG,232,GB,54.82513,-1.48036 49410,East Riding of Yorkshire,2336,ENG,232,GB,53.91667,-0.5 49411,East Sussex,2336,ENG,232,GB,50.91667,0.33333 49412,East Tilbury,2336,ENG,232,GB,51.48053,0.41714 49415,East Wittering,2336,ENG,232,GB,50.76969,-0.87444 49416,Eastbourne,2336,ENG,232,GB,50.76871,0.28453 49417,Eastchurch,2336,ENG,232,GB,51.40673,0.85766 49418,Eastington,2336,ENG,232,GB,51.74722,-2.32639 49419,Eastleigh,2336,ENG,232,GB,50.96667,-1.35 49420,Eastoft,2336,ENG,232,GB,53.63624,-0.78492 49421,Easton,2336,ENG,232,GB,50.53333,-2.45 49422,Easton on the Hill,2336,ENG,232,GB,52.62733,-0.50571 49423,Easton-in-Gordano,2336,ENG,232,GB,51.47592,-2.69987 49425,Eastrington,2336,ENG,232,GB,53.76038,-0.79325 49426,Eastry,2336,ENG,232,GB,51.24639,1.30776 49427,Eastwood,2336,ENG,232,GB,53.0,-1.3 49428,Eaton Bray,2336,ENG,232,GB,51.87697,-0.59167 49429,Eaton Socon,2336,ENG,232,GB,52.21752,-0.28925 49430,Eattington,2336,ENG,232,GB,52.13333,-1.6 49432,Eccles,2336,ENG,232,GB,53.48333,-2.33333 49433,Eccleshall,2336,ENG,232,GB,52.85789,-2.24971 49434,Eccleston,2336,ENG,232,GB,53.64236,-2.72162 49435,Eckington,2336,ENG,232,GB,52.06667,-2.11667 49436,Edenbridge,2336,ENG,232,GB,51.19172,0.06729 49437,Edenfield,2336,ENG,232,GB,53.66674,-2.30481 49438,Edgmond,2336,ENG,232,GB,52.774,-2.40967 49439,Edgware,2336,ENG,232,GB,51.6128,-0.27539 49440,Edgworth,2336,ENG,232,GB,53.64636,-2.39401 49442,Edington,2336,ENG,232,GB,51.27583,-2.10639 49443,Edith Weston,2336,ENG,232,GB,52.63786,-0.63189 49444,Edwinstowe,2336,ENG,232,GB,53.19454,-1.06439 49445,Egham,2336,ENG,232,GB,51.43158,-0.55239 49447,Egremont,2336,ENG,232,GB,54.47941,-3.52756 49448,Eight Ash Green,2336,ENG,232,GB,51.89587,0.8228 49452,Elland,2336,ENG,232,GB,53.6851,-1.83878 49453,Ellerker,2336,ENG,232,GB,53.75323,-0.60416 49454,Ellerton,2336,ENG,232,GB,53.85,-0.93333 49455,Ellesmere,2336,ENG,232,GB,52.90838,-2.89806 49456,Ellesmere Port,2336,ENG,232,GB,53.27875,-2.90134 49458,Elm Park,2336,ENG,232,GB,51.5497,0.20136 49459,Elmstead Market,2336,ENG,232,GB,51.88219,0.99482 49460,Elmswell,2336,ENG,232,GB,52.23616,0.91247 49461,Elsenham,2336,ENG,232,GB,51.91431,0.22934 49462,Elstead,2336,ENG,232,GB,51.18548,-0.70536 49463,Elstree,2336,ENG,232,GB,51.6403,-0.29693 49464,Elswick,2336,ENG,232,GB,53.83836,-2.88147 49465,Elvington,2336,ENG,232,GB,53.92087,-0.93495 49466,Elwick,2336,ENG,232,GB,54.68455,-1.29559 49467,Ely,2336,ENG,232,GB,52.39964,0.26196 49468,Emberton,2336,ENG,232,GB,52.13691,-0.70673 49469,Embleton,2336,ENG,232,GB,55.49592,-1.63619 49470,Embsay,2336,ENG,232,GB,53.97664,-1.99282 49471,Emley,2336,ENG,232,GB,53.61395,-1.6313 49472,Emneth,2336,ENG,232,GB,52.64244,0.20857 49473,Empingham,2336,ENG,232,GB,52.66722,-0.59601 49474,Emsworth,2336,ENG,232,GB,50.84779,-0.93697 49475,Enderby,2336,ENG,232,GB,52.58778,-1.20619 49476,Enfield Town,2336,ENG,232,GB,51.65147,-0.08497 49478,Epping,2336,ENG,232,GB,51.69815,0.11055 49479,Epsom,2336,ENG,232,GB,51.3305,-0.27011 49480,Epworth,2336,ENG,232,GB,53.52602,-0.82399 49481,Erith,2336,ENG,232,GB,51.48315,0.17484 49484,Esher,2336,ENG,232,GB,51.36969,-0.36693 49485,Essendine,2336,ENG,232,GB,52.70187,-0.4525 49486,Essex,2336,ENG,232,GB,51.83333,0.58333 49487,Essington,2336,ENG,232,GB,52.6291,-2.0577 49488,Eton,2336,ENG,232,GB,51.48833,-0.60905 49489,Eton Wick,2336,ENG,232,GB,51.49722,-0.63437 49490,Etton,2336,ENG,232,GB,53.87848,-0.51314 49491,Etwall,2336,ENG,232,GB,52.88353,-1.60023 49492,Euxton,2336,ENG,232,GB,53.6699,-2.67615 49494,Evenwood,2336,ENG,232,GB,54.62213,-1.76133 49495,Evercreech,2336,ENG,232,GB,51.14806,-2.50556 49496,Eversholt,2336,ENG,232,GB,51.98702,-0.55983 49497,Eversley,2336,ENG,232,GB,51.35387,-0.88888 49498,Everton,2336,ENG,232,GB,52.14581,-0.24616 49499,Evesham,2336,ENG,232,GB,52.09237,-1.94887 49500,Ewell,2336,ENG,232,GB,51.34948,-0.2494 49501,Ewhurst,2336,ENG,232,GB,51.15448,-0.44344 49502,Ewyas Harold,2336,ENG,232,GB,51.95358,-2.89325 49503,Exeter,2336,ENG,232,GB,50.7236,-3.52751 49504,Exhall,2336,ENG,232,GB,52.46464,-1.48144 49505,Exminster,2336,ENG,232,GB,50.68075,-3.49706 49506,Exmouth,2336,ENG,232,GB,50.61723,-3.40233 49507,Exning,2336,ENG,232,GB,52.26642,0.37439 49508,Exton,2336,ENG,232,GB,52.69106,-0.63463 49509,Eye,2336,ENG,232,GB,52.608,-0.19209 49511,Eynsford,2336,ENG,232,GB,51.36765,0.21132 49512,Eynsham,2336,ENG,232,GB,51.78077,-1.37454 49513,Eythorne,2336,ENG,232,GB,51.1971,1.2662 49515,Failsworth,2336,ENG,232,GB,53.50484,-2.16568 49516,Fairford,2336,ENG,232,GB,51.70816,-1.78128 49517,Fairlands,2336,ENG,232,GB,51.26178,-0.62141 49519,Fairlight,2336,ENG,232,GB,50.87802,0.65669 49520,Fakenham,2336,ENG,232,GB,52.82996,0.8477 49524,Fallowfield,2336,ENG,232,GB,53.43981,-2.21572 49525,Falmouth,2336,ENG,232,GB,50.15441,-5.07113 49526,Fareham,2336,ENG,232,GB,50.85162,-1.17929 49527,Faringdon,2336,ENG,232,GB,51.65644,-1.58676 49528,Farnborough,2336,ENG,232,GB,51.29424,-0.75565 49529,Farndon,2336,ENG,232,GB,53.05,-0.85 49530,Farnham,2336,ENG,232,GB,51.21444,-0.80054 49531,Farnham Royal,2336,ENG,232,GB,51.54208,-0.61584 49532,Farnsfield,2336,ENG,232,GB,53.10223,-1.0332 49533,Farnworth,2336,ENG,232,GB,53.55,-2.4 49535,Faversham,2336,ENG,232,GB,51.3148,0.88856 49536,Fazeley,2336,ENG,232,GB,52.61443,-1.6985 49537,Featherstone,2336,ENG,232,GB,52.64483,-2.09315 49538,Felixstowe,2336,ENG,232,GB,51.96375,1.3511 49539,Felling,2336,ENG,232,GB,54.95297,-1.57152 49540,Feltham,2336,ENG,232,GB,51.4462,-0.41388 49541,Felton,2336,ENG,232,GB,55.29768,-1.71143 49542,Feltwell,2336,ENG,232,GB,52.48581,0.51945 49543,Fenstanton,2336,ENG,232,GB,52.29903,-0.06712 49547,Ferndown,2336,ENG,232,GB,50.80743,-1.89975 49548,Fernhill Heath,2336,ENG,232,GB,52.23002,-2.19659 49549,Fernhurst,2336,ENG,232,GB,51.04873,-0.71789 49550,Ferrybridge,2336,ENG,232,GB,53.71058,-1.27948 49551,Ferryhill,2336,ENG,232,GB,54.68333,-1.55 49553,Filey,2336,ENG,232,GB,54.21,-0.28917 49554,Finchampstead,2336,ENG,232,GB,51.36149,-0.85728 49555,Findern,2336,ENG,232,GB,52.87037,-1.54409 49557,Findon,2336,ENG,232,GB,50.86816,-0.40735 49558,Finedon,2336,ENG,232,GB,52.33917,-0.65008 49559,Finningley,2336,ENG,232,GB,53.48696,-0.99083 49561,Fishburn,2336,ENG,232,GB,54.68296,-1.43631 49563,Fishtoft,2336,ENG,232,GB,52.96095,0.02702 49564,Fitzwilliam,2336,ENG,232,GB,53.63288,-1.3769 49565,Five Oak Green,2336,ENG,232,GB,51.18338,0.35517 49567,Flamborough,2336,ENG,232,GB,54.11487,-0.12274 49568,Fleckney,2336,ENG,232,GB,52.53497,-1.04598 49569,Fleet,2336,ENG,232,GB,51.28333,-0.83333 49570,Fleetwood,2336,ENG,232,GB,53.92527,-3.01085 49571,Flexbury,2336,ENG,232,GB,50.83509,-4.54499 49572,Flimby,2336,ENG,232,GB,54.68956,-3.52092 49573,Flimwell,2336,ENG,232,GB,51.05502,0.44531 49575,Flitwick,2336,ENG,232,GB,52.00338,-0.49472 49576,Flockton,2336,ENG,232,GB,53.63034,-1.63945 49577,Flookburgh,2336,ENG,232,GB,54.17415,-2.97214 49578,Flore,2336,ENG,232,GB,52.23647,-1.05726 49581,Folkestone,2336,ENG,232,GB,51.08169,1.16734 49582,Fontwell,2336,ENG,232,GB,50.8552,-0.64831 49583,Ford,2336,ENG,232,GB,52.71693,-2.86881 49584,Fordham,2336,ENG,232,GB,52.31129,0.39057 49585,Fordingbridge,2336,ENG,232,GB,50.92747,-1.79029 49586,Forest Row,2336,ENG,232,GB,51.09641,0.03262 49588,Formby,2336,ENG,232,GB,53.55838,-3.06999 49593,Fortuneswell,2336,ENG,232,GB,50.5603,-2.44243 49594,Foulridge,2336,ENG,232,GB,53.87579,-2.16864 49595,Foulsham,2336,ENG,232,GB,52.78182,1.01049 49597,Four Lanes,2336,ENG,232,GB,50.20163,-5.24014 49598,Four Marks,2336,ENG,232,GB,51.10735,-1.04945 49599,Fowey,2336,ENG,232,GB,50.33634,-4.6386 49600,Fowlmere,2336,ENG,232,GB,52.09343,0.07433 49601,Framlingham,2336,ENG,232,GB,52.22117,1.34205 49602,Frampton on Severn,2336,ENG,232,GB,51.77054,-2.36382 49604,Freckleton,2336,ENG,232,GB,53.75433,-2.86489 49605,Fremington,2336,ENG,232,GB,51.06955,-4.1366 49606,Freshwater,2336,ENG,232,GB,50.68365,-1.52616 49608,Frimley,2336,ENG,232,GB,51.31667,-0.74544 49609,Frinton-on-Sea,2336,ENG,232,GB,51.83061,1.24424 49611,Friston,2336,ENG,232,GB,50.76402,0.1993 49612,Frizington,2336,ENG,232,GB,54.54185,-3.4946 49613,Frodsham,2336,ENG,232,GB,53.29485,-2.72745 49614,Frome,2336,ENG,232,GB,51.22834,-2.32211 49615,Fulbourn,2336,ENG,232,GB,52.18283,0.22046 49616,Full Sutton,2336,ENG,232,GB,53.98869,-0.86758 49617,Furnace Green,2336,ENG,232,GB,51.10742,-0.16889 49618,Fylde,2336,ENG,232,GB,53.83333,-2.91667 49620,Gainford,2336,ENG,232,GB,54.54718,-1.73601 49621,Gainsborough,2336,ENG,232,GB,53.38333,-0.76667 49623,Galgate,2336,ENG,232,GB,53.99362,-2.79201 49625,Gamlingay,2336,ENG,232,GB,52.15561,-0.19303 49627,Garforth,2336,ENG,232,GB,53.79173,-1.38067 49628,Gargrave,2336,ENG,232,GB,53.98353,-2.10459 49629,Garsington,2336,ENG,232,GB,51.71623,-1.16129 49630,Garstang,2336,ENG,232,GB,53.90081,-2.77417 49633,Gateshead,2336,ENG,232,GB,54.93333,-1.66667 49634,Geddington,2336,ENG,232,GB,52.43757,-0.68965 49635,Gedney Hill,2336,ENG,232,GB,52.68434,-0.02008 49637,Germoe,2336,ENG,232,GB,50.11539,-5.37881 49638,Gerrards Cross,2336,ENG,232,GB,51.5861,-0.55543 49640,Gilberdyke,2336,ENG,232,GB,53.75297,-0.73892 49643,Gillingham,2336,ENG,232,GB,51.38914,0.54863 49645,Girton,2336,ENG,232,GB,52.23333,0.08333 49649,Glapwell,2336,ENG,232,GB,53.18917,-1.28334 49652,Glastonbury,2336,ENG,232,GB,51.14745,-2.72075 49653,Glazebury,2336,ENG,232,GB,53.47078,-2.49823 49654,Glemsford,2336,ENG,232,GB,52.10351,0.66912 49658,Glenfield,2336,ENG,232,GB,52.6466,-1.19493 49661,Glinton,2336,ENG,232,GB,52.63921,-0.29629 49662,Glossop,2336,ENG,232,GB,53.44325,-1.949 49663,Gloucester,2336,ENG,232,GB,51.86568,-2.2431 49664,Gloucestershire,2336,ENG,232,GB,51.83333,-2.16667 49665,Glusburn,2336,ENG,232,GB,53.9,-2.0 49668,Gnosall,2336,ENG,232,GB,52.78558,-2.25483 49669,Gobowen,2336,ENG,232,GB,52.89615,-3.03686 49670,Godalming,2336,ENG,232,GB,51.1858,-0.61489 49671,Godmanchester,2336,ENG,232,GB,52.31939,-0.17509 49672,Godshill,2336,ENG,232,GB,50.63308,-1.25476 49673,Godstone,2336,ENG,232,GB,51.24779,-0.06914 49674,Golborne,2336,ENG,232,GB,53.47693,-2.59651 49677,Goole,2336,ENG,232,GB,53.70324,-0.87732 49678,Goosnargh,2336,ENG,232,GB,53.822,-2.67017 49679,Goostrey,2336,ENG,232,GB,53.22731,-2.33919 49681,Goring,2336,ENG,232,GB,51.52322,-1.13342 49682,Goring-by-Sea,2336,ENG,232,GB,50.81239,-0.42194 49683,Gorleston-on-Sea,2336,ENG,232,GB,52.57301,1.73069 49685,Gosberton,2336,ENG,232,GB,52.86913,-0.16102 49686,Gosfield,2336,ENG,232,GB,51.93657,0.59197 49687,Gosforth,2336,ENG,232,GB,55.0,-1.61667 49688,Gosport,2336,ENG,232,GB,50.79509,-1.12902 49689,Gossops Green,2336,ENG,232,GB,51.11105,-0.21728 49690,Gotham,2336,ENG,232,GB,52.86799,-1.20558 49691,Goudhurst,2336,ENG,232,GB,51.11314,0.45615 49694,Goxhill,2336,ENG,232,GB,53.67635,-0.33759 49695,Grain,2336,ENG,232,GB,51.45591,0.71126 49696,Grange Hill,2336,ENG,232,GB,51.61185,0.08612 49697,Grange-over-Sands,2336,ENG,232,GB,54.18508,-2.92488 49699,Grantham,2336,ENG,232,GB,52.91149,-0.64184 49701,Grappenhall,2336,ENG,232,GB,53.37204,-2.54675 49702,Grassington,2336,ENG,232,GB,54.0714,-1.99822 49703,Gravesend,2336,ENG,232,GB,51.44206,0.37106 49704,Grays,2336,ENG,232,GB,51.47566,0.32521 49705,Greasby,2336,ENG,232,GB,53.373,-3.1233 49706,Great Amwell,2336,ENG,232,GB,51.79014,-0.01669 49707,Great Ayton,2336,ENG,232,GB,54.49148,-1.13623 49708,Great Bardfield,2336,ENG,232,GB,51.94813,0.43645 49709,Great Barford,2336,ENG,232,GB,52.15791,-0.35235 49710,Great Barton,2336,ENG,232,GB,52.27257,0.76679 49711,Great Bedwyn,2336,ENG,232,GB,51.3795,-1.60151 49712,Great Bentley,2336,ENG,232,GB,51.85333,1.06379 49713,Great Bookham,2336,ENG,232,GB,51.27916,-0.37423 49714,Great Chesterford,2336,ENG,232,GB,52.06431,0.1972 49715,Great Dunmow,2336,ENG,232,GB,51.8723,0.36255 49716,Great Eccleston,2336,ENG,232,GB,53.85315,-2.87026 49717,Great Glen,2336,ENG,232,GB,52.57548,-1.0349 49718,Great Gonerby,2336,ENG,232,GB,52.93507,-0.66685 49719,Great Gransden,2336,ENG,232,GB,52.18546,-0.14574 49720,Great Hanwood,2336,ENG,232,GB,52.68333,-2.81667 49721,Great Harwood,2336,ENG,232,GB,53.78512,-2.40865 49722,Great Haywood,2336,ENG,232,GB,52.80785,-2.00024 49723,Great Horkesley,2336,ENG,232,GB,51.93821,0.87551 49724,Great Horwood,2336,ENG,232,GB,51.97351,-0.88088 49725,Great Houghton,2336,ENG,232,GB,53.55352,-1.34952 49726,Great Leighs,2336,ENG,232,GB,51.82761,0.5064 49727,Great Malvern,2336,ENG,232,GB,52.11161,-2.32515 49728,Great Marton,2336,ENG,232,GB,53.81185,-3.02261 49729,Great Missenden,2336,ENG,232,GB,51.70419,-0.70797 49730,Great Paxton,2336,ENG,232,GB,52.26057,-0.22818 49731,Great Sankey,2336,ENG,232,GB,53.39234,-2.63994 49732,Great Torrington,2336,ENG,232,GB,50.95309,-4.14401 49733,Great Wakering,2336,ENG,232,GB,51.55242,0.8038 49734,Great Waldingfield,2336,ENG,232,GB,52.05545,0.77436 49735,Great Wyrley,2336,ENG,232,GB,52.66277,-2.01111 49736,Great Yarmouth,2336,ENG,232,GB,52.60831,1.73052 49737,Great Yeldham,2336,ENG,232,GB,52.01347,0.5654 49738,Greater London,2336,ENG,232,GB,51.5,-0.16667 49739,Greatham,2336,ENG,232,GB,54.64183,-1.23806 49741,Greenfield,2336,ENG,232,GB,52.00278,-0.46605 49742,Greenford,2336,ENG,232,GB,51.52866,-0.35508 49744,Greenhill,2336,ENG,232,GB,51.58342,-0.3386 49745,Greenhithe,2336,ENG,232,GB,51.45026,0.28539 49748,Greetham,2336,ENG,232,GB,52.72059,-0.63068 49752,Grimethorpe,2336,ENG,232,GB,53.5765,-1.37688 49753,Grimsby,2336,ENG,232,GB,53.56539,-0.07553 49754,Grimston,2336,ENG,232,GB,52.77312,0.54846 49755,Griston,2336,ENG,232,GB,52.5572,0.86436 49757,Groombridge,2336,ENG,232,GB,51.11543,0.18295 49758,Grove,2336,ENG,232,GB,51.60954,-1.42187 49760,Grundisburgh,2336,ENG,232,GB,52.11222,1.24618 49761,Guilden Sutton,2336,ENG,232,GB,53.20809,-2.82984 49762,Guildford,2336,ENG,232,GB,51.23536,-0.57427 49764,Guisborough,2336,ENG,232,GB,54.53478,-1.05606 49765,Guiseley,2336,ENG,232,GB,53.87561,-1.71232 49767,Gunness,2336,ENG,232,GB,53.5908,-0.72834 49768,Gunnislake,2336,ENG,232,GB,50.52441,-4.21333 49770,Hackleton,2336,ENG,232,GB,52.18798,-0.82312 49771,Haddenham,2336,ENG,232,GB,51.77326,-0.92628 49773,Hadleigh,2336,ENG,232,GB,51.55269,0.60983 49774,Hadley,2336,ENG,232,GB,52.7,-2.48333 49775,Hadley Wood,2336,ENG,232,GB,51.66669,-0.16981 49776,Hadlow,2336,ENG,232,GB,51.22417,0.33914 49777,Hadston,2336,ENG,232,GB,55.29428,-1.60392 49778,Hagley,2336,ENG,232,GB,52.4262,-2.12819 49779,Hailsham,2336,ENG,232,GB,50.8622,0.25775 49780,Hainault,2336,ENG,232,GB,51.60836,0.10716 49781,Hale,2336,ENG,232,GB,53.37831,-2.33271 49782,Halesowen,2336,ENG,232,GB,52.44859,-2.04938 49783,Halesworth,2336,ENG,232,GB,52.3464,1.5029 49784,Halifax,2336,ENG,232,GB,53.71667,-1.85 49787,Halling,2336,ENG,232,GB,51.35142,0.4452 49788,Hallow,2336,ENG,232,GB,52.22344,-2.25468 49789,Halstead,2336,ENG,232,GB,51.94506,0.63927 49790,Halton,2336,ENG,232,GB,53.31667,-2.7 49791,Haltwhistle,2336,ENG,232,GB,54.97101,-2.45682 49792,Hamble-le-Rice,2336,ENG,232,GB,50.85966,-1.32432 49793,Hambleton,2336,ENG,232,GB,53.76667,-1.16667 49794,Hameldon Hill,2336,ENG,232,GB,53.7557,-2.2919 49796,Hampshire,2336,ENG,232,GB,51.0,-1.25 49797,Hampton,2336,ENG,232,GB,51.41334,-0.36701 49798,Hampton in Arden,2336,ENG,232,GB,52.4254,-1.70271 49799,Handcross,2336,ENG,232,GB,51.05383,-0.20076 49800,Hannington,2336,ENG,232,GB,51.63333,-1.75 49801,Hanslope,2336,ENG,232,GB,52.11425,-0.82672 49802,Hapton,2336,ENG,232,GB,53.78333,-2.31667 49803,Harbury,2336,ENG,232,GB,52.23537,-1.45706 49804,Hardingstone,2336,ENG,232,GB,52.21358,-0.88582 49805,Hardwick Village,2336,ENG,232,GB,53.27372,-1.0432 49806,Harefield,2336,ENG,232,GB,51.60333,-0.48546 49808,Harleston,2336,ENG,232,GB,52.40302,1.29664 49809,Harlington,2336,ENG,232,GB,51.96288,-0.49241 49810,Harlow,2336,ENG,232,GB,51.77655,0.11158 49811,Harold Wood,2336,ENG,232,GB,51.59462,0.23294 49812,Harpenden,2336,ENG,232,GB,51.81684,-0.35706 49813,Harpole,2336,ENG,232,GB,52.24246,-0.98937 49814,Harrietsham,2336,ENG,232,GB,51.24252,0.6706 49815,Harringay,2336,ENG,232,GB,51.5824,-0.09956 49816,Harrogate,2336,ENG,232,GB,53.99078,-1.5373 49817,Harrold,2336,ENG,232,GB,52.20127,-0.61038 49818,Harrow on the Hill,2336,ENG,232,GB,51.57142,-0.33371 49819,Harston,2336,ENG,232,GB,52.13691,0.07999 49820,Harthill,2336,ENG,232,GB,53.31667,-1.26667 49822,Hartlebury,2336,ENG,232,GB,52.33333,-2.23333 49823,Hartlepool,2336,ENG,232,GB,54.66667,-1.25 49824,Hartley,2336,ENG,232,GB,51.38673,0.30367 49825,Hartley Wintney,2336,ENG,232,GB,51.30379,-0.90019 49826,Hartshill,2336,ENG,232,GB,52.54831,-1.52221 49827,Hartwell,2336,ENG,232,GB,52.14616,-0.85376 49828,Harvington,2336,ENG,232,GB,52.14095,-1.92313 49829,Harwell,2336,ENG,232,GB,51.59947,-1.29175 49830,Harwich,2336,ENG,232,GB,51.94194,1.28437 49831,Haslemere,2336,ENG,232,GB,51.09015,-0.70785 49832,Haslingden,2336,ENG,232,GB,53.70326,-2.32382 49833,Haslingfield,2336,ENG,232,GB,52.15016,0.05579 49834,Hassocks,2336,ENG,232,GB,50.92814,-0.16617 49835,Hastings,2336,ENG,232,GB,50.85519,0.57292 49836,Haswell,2336,ENG,232,GB,54.78333,-1.41667 49837,Hatfield,2336,ENG,232,GB,51.76338,-0.22419 49838,Hatfield Heath,2336,ENG,232,GB,51.81233,0.21243 49839,Hatfield Peverel,2336,ENG,232,GB,51.77591,0.59489 49840,Hatherleigh,2336,ENG,232,GB,50.82144,-4.07228 49841,Hathern,2336,ENG,232,GB,52.79548,-1.25644 49842,Hathersage,2336,ENG,232,GB,53.3303,-1.65398 49843,Hatton,2336,ENG,232,GB,52.30007,-1.6326 49844,Haughley,2336,ENG,232,GB,52.21907,0.968 49845,Haughton Green,2336,ENG,232,GB,53.44118,-2.09827 49846,Havant,2336,ENG,232,GB,50.8567,-0.98559 49848,Haverhill,2336,ENG,232,GB,52.08226,0.43891 49849,Haverigg,2336,ENG,232,GB,54.19973,-3.29263 49852,Hawkhurst,2336,ENG,232,GB,51.0479,0.51095 49853,Hawkinge,2336,ENG,232,GB,51.11276,1.16176 49854,Haworth,2336,ENG,232,GB,53.82905,-1.94827 49855,Hawthorn,2336,ENG,232,GB,54.8,-1.35 49856,Haxby,2336,ENG,232,GB,54.01422,-1.07121 49857,Haxey,2336,ENG,232,GB,53.48937,-0.8402 49859,Haydock,2336,ENG,232,GB,53.46723,-2.68166 49860,Haydon Bridge,2336,ENG,232,GB,54.97486,-2.2468 49861,Hayes,2336,ENG,232,GB,51.51579,-0.4234 49862,Hayfield,2336,ENG,232,GB,53.37893,-1.94544 49863,Hayle,2336,ENG,232,GB,50.18392,-5.42137 49864,Hayling Island,2336,ENG,232,GB,50.7838,-0.96869 49865,Haynes,2336,ENG,232,GB,52.06646,-0.39946 49866,Hayton,2336,ENG,232,GB,53.9,-0.75 49867,Haywards Heath,2336,ENG,232,GB,50.99769,-0.10313 49868,Hazel Grove,2336,ENG,232,GB,53.38333,-2.11667 49869,Hazlerigg,2336,ENG,232,GB,55.04135,-1.63912 49870,Heacham,2336,ENG,232,GB,52.90782,0.49387 49872,Headcorn,2336,ENG,232,GB,51.16966,0.62433 49873,Heage,2336,ENG,232,GB,53.0505,-1.44688 49874,Healing,2336,ENG,232,GB,53.58101,-0.16202 49875,Heanor,2336,ENG,232,GB,53.01372,-1.35383 49876,Heath and Reach,2336,ENG,232,GB,51.94517,-0.65697 49877,Heathfield,2336,ENG,232,GB,50.96718,0.25612 49878,Heaton Chapel,2336,ENG,232,GB,53.43015,-2.17538 49879,Heavitree,2336,ENG,232,GB,50.72044,-3.49646 49880,Hebburn,2336,ENG,232,GB,54.97302,-1.51546 49881,Hebden Bridge,2336,ENG,232,GB,53.74093,-2.01337 49882,Heckington,2336,ENG,232,GB,52.98183,-0.29903 49883,Heckmondwike,2336,ENG,232,GB,53.70646,-1.67747 49884,Heddon on the Wall,2336,ENG,232,GB,54.99692,-1.79386 49885,Hedge End,2336,ENG,232,GB,50.91234,-1.30076 49886,Hedon,2336,ENG,232,GB,53.73962,-0.19655 49887,Heighington,2336,ENG,232,GB,53.21241,-0.45902 49889,Hellaby,2336,ENG,232,GB,53.42257,-1.24125 49890,Hellifield,2336,ENG,232,GB,54.00486,-2.22302 49891,Helmsley,2336,ENG,232,GB,54.24577,-1.05683 49892,Helpston,2336,ENG,232,GB,52.63233,-0.34676 49893,Helsby,2336,ENG,232,GB,53.27396,-2.76905 49894,Helston,2336,ENG,232,GB,50.10319,-5.27045 49895,Hemel Hempstead,2336,ENG,232,GB,51.75368,-0.44975 49896,Hemingbrough,2336,ENG,232,GB,53.76863,-0.97673 49897,Hemingford Grey,2336,ENG,232,GB,52.31756,-0.10029 49898,Hemsby,2336,ENG,232,GB,52.69714,1.69181 49899,Hemsworth,2336,ENG,232,GB,53.61267,-1.35424 49900,Hemyock,2336,ENG,232,GB,50.91234,-3.22807 49901,Henfield,2336,ENG,232,GB,50.92995,-0.27071 49903,Henley in Arden,2336,ENG,232,GB,52.29032,-1.77807 49904,Henley-on-Thames,2336,ENG,232,GB,51.53333,-0.9 49906,Henlow,2336,ENG,232,GB,52.03021,-0.28599 49907,Henstridge,2336,ENG,232,GB,50.97717,-2.395 49908,Hereford,2336,ENG,232,GB,52.05684,-2.71482 49909,Herefordshire,2336,ENG,232,GB,52.08333,-2.75 49910,Hermitage,2336,ENG,232,GB,51.4554,-1.26823 49911,Herne Bay,2336,ENG,232,GB,51.373,1.12857 49912,Herstmonceux,2336,ENG,232,GB,50.88958,0.3229 49913,Hertford,2336,ENG,232,GB,51.79588,-0.07854 49914,Hertfordshire,2336,ENG,232,GB,51.83333,-0.25 49915,Heswall,2336,ENG,232,GB,53.32733,-3.09648 49916,Hethersett,2336,ENG,232,GB,52.59761,1.17359 49917,Hetton-Le-Hole,2336,ENG,232,GB,54.81667,-1.45 49918,Hexham,2336,ENG,232,GB,54.96986,-2.104 49919,Heysham,2336,ENG,232,GB,54.04367,-2.89322 49920,Heywood,2336,ENG,232,GB,53.59245,-2.21941 49921,Hibaldstow,2336,ENG,232,GB,53.51133,-0.52082 49922,High Barnet,2336,ENG,232,GB,51.65621,-0.20768 49923,High Bentham,2336,ENG,232,GB,54.11823,-2.51199 49925,High Etherley,2336,ENG,232,GB,54.65391,-1.74363 49926,High Halden,2336,ENG,232,GB,51.10331,0.71394 49927,High Halstow,2336,ENG,232,GB,51.44775,0.55558 49928,High Legh,2336,ENG,232,GB,53.35139,-2.4538 49929,High Ongar,2336,ENG,232,GB,51.70953,0.26221 49930,High Peak,2336,ENG,232,GB,53.36797,-1.84536 49932,High Wycombe,2336,ENG,232,GB,51.62907,-0.74934 49933,Higham Ferrers,2336,ENG,232,GB,52.30596,-0.59342 49934,Highbridge,2336,ENG,232,GB,51.21667,-2.98333 49935,Highclere,2336,ENG,232,GB,51.3386,-1.37569 49937,Highley,2336,ENG,232,GB,52.44866,-2.38251 49938,Hightown,2336,ENG,232,GB,53.52452,-3.06192 49939,Highworth,2336,ENG,232,GB,51.63051,-1.711 49942,Hilton,2336,ENG,232,GB,52.27908,-0.11222 49943,Hinchley Wood,2336,ENG,232,GB,51.37461,-0.33838 49944,Hinckley,2336,ENG,232,GB,52.5389,-1.37613 49945,Hindhead,2336,ENG,232,GB,51.11381,-0.73351 49946,Hindley,2336,ENG,232,GB,53.53333,-2.58333 49947,Hindon,2336,ENG,232,GB,51.09222,-2.12583 49948,Hingham,2336,ENG,232,GB,52.57969,0.98422 49949,Hinton,2336,ENG,232,GB,52.16798,-1.21837 49951,Histon,2336,ENG,232,GB,52.25166,0.10643 49952,Hitchin,2336,ENG,232,GB,51.94924,-0.28496 49953,Hockley,2336,ENG,232,GB,52.5,-1.91667 49954,Hockley Heath,2336,ENG,232,GB,52.35294,-1.77816 49955,Hockliffe,2336,ENG,232,GB,51.93109,-0.58652 49956,Hockwold cum Wilton,2336,ENG,232,GB,52.4638,0.54614 49957,Hoddesdon,2336,ENG,232,GB,51.76148,-0.01144 49958,Holbeach,2336,ENG,232,GB,52.80401,0.01442 49959,Holbeck,2336,ENG,232,GB,53.78359,-1.56791 49960,Holbrook,2336,ENG,232,GB,51.9834,1.15854 49961,Hollingworth,2336,ENG,232,GB,53.463,-1.991 49962,Holloway,2336,ENG,232,GB,51.55237,-0.12497 49963,Hollym,2336,ENG,232,GB,53.70402,0.04008 49964,Holmes Chapel,2336,ENG,232,GB,53.2014,-2.35742 49965,Holmfirth,2336,ENG,232,GB,53.56968,-1.78777 49966,Holmwood,2336,ENG,232,GB,51.18049,-0.32176 49967,Holsworthy,2336,ENG,232,GB,50.81196,-4.35383 49968,Holt,2336,ENG,232,GB,51.35556,-2.19722 49969,Holtby,2336,ENG,232,GB,53.97876,-0.97255 49970,Holton le Clay,2336,ENG,232,GB,53.5052,-0.063 49974,Holywell Green,2336,ENG,232,GB,53.67406,-1.86682 49976,Honeybourne,2336,ENG,232,GB,52.09513,-1.83129 49977,Honiton,2336,ENG,232,GB,50.7996,-3.18899 49978,Hoo,2336,ENG,232,GB,51.4205,0.563 49979,Hook,2336,ENG,232,GB,51.36803,-0.3065 49981,Hook Norton,2336,ENG,232,GB,51.99564,-1.48277 49982,Hoole,2336,ENG,232,GB,53.1998,-2.87689 49984,Hope Valley,2336,ENG,232,GB,53.34819,-1.74485 49986,Hopton on Sea,2336,ENG,232,GB,52.53333,1.73333 49987,Horam,2336,ENG,232,GB,50.93523,0.24436 49988,Horbury,2336,ENG,232,GB,53.66051,-1.56014 49989,Horley,2336,ENG,232,GB,51.17423,-0.15919 49990,Horncastle,2336,ENG,232,GB,53.20775,-0.1172 49991,Hornchurch,2336,ENG,232,GB,51.55685,0.21664 49992,Horndon on the Hill,2336,ENG,232,GB,51.52358,0.40491 49993,Horning,2336,ENG,232,GB,52.7046,1.46294 49994,Hornsea,2336,ENG,232,GB,53.91041,-0.16806 49995,Horrabridge,2336,ENG,232,GB,50.50843,-4.10042 49996,Horsford,2336,ENG,232,GB,52.70153,1.24015 49997,Horsforth,2336,ENG,232,GB,53.8426,-1.63754 49998,Horsham,2336,ENG,232,GB,51.06314,-0.32757 49999,Horsmonden,2336,ENG,232,GB,51.13908,0.42881 50000,Horsted Keynes,2336,ENG,232,GB,51.03659,-0.02798 50001,Horton,2336,ENG,232,GB,51.47315,-0.54245 50002,Horton Kirby,2336,ENG,232,GB,51.39481,0.24483 50003,Horwich,2336,ENG,232,GB,53.60126,-2.54975 50004,Hotham,2336,ENG,232,GB,53.79583,-0.64253 50005,Houghton,2336,ENG,232,GB,52.33282,-0.12068 50006,Houghton Conquest,2336,ENG,232,GB,52.06178,-0.47756 50007,Houghton on the Hill,2336,ENG,232,GB,52.62663,-0.99546 50008,Houghton-Le-Spring,2336,ENG,232,GB,54.84034,-1.46427 50009,Hounslow,2336,ENG,232,GB,51.46839,-0.36092 50011,Hove,2336,ENG,232,GB,50.83088,-0.1672 50012,Hoveton,2336,ENG,232,GB,52.7149,1.41054 50013,Howden,2336,ENG,232,GB,53.7463,-0.86994 50015,Hoylake,2336,ENG,232,GB,53.39046,-3.18066 50016,Hoyland Nether,2336,ENG,232,GB,53.5,-1.45 50017,Hucknall,2336,ENG,232,GB,53.03333,-1.2 50018,Huddersfield,2336,ENG,232,GB,53.64904,-1.78416 50019,Hugh Town,2336,ENG,232,GB,49.91447,-6.31145 50020,Hulme,2336,ENG,232,GB,53.46572,-2.24885 50021,Humberston,2336,ENG,232,GB,53.53036,-0.02465 50023,Hungerford,2336,ENG,232,GB,51.41513,-1.51556 50024,Hunmanby,2336,ENG,232,GB,54.17957,-0.32007 50025,Hunstanton,2336,ENG,232,GB,52.95,0.5 50026,Huntingdon,2336,ENG,232,GB,52.33049,-0.18651 50027,Huntley,2336,ENG,232,GB,51.87172,-2.40137 50029,Huntspill,2336,ENG,232,GB,51.20562,-2.98735 50030,Hunwick,2336,ENG,232,GB,54.68791,-1.70539 50031,Hurst,2336,ENG,232,GB,51.45791,-0.85196 50032,Hurstpierpoint,2336,ENG,232,GB,50.93388,-0.18007 50033,Husbands Bosworth,2336,ENG,232,GB,52.45232,-1.05557 50034,Husborne Crawley,2336,ENG,232,GB,52.01637,-0.61056 50035,Huyton,2336,ENG,232,GB,53.4115,-2.83935 50036,Hyde,2336,ENG,232,GB,53.45131,-2.07943 50037,Hyde Heath,2336,ENG,232,GB,51.69336,-0.65437 50038,Hythe,2336,ENG,232,GB,50.86004,-1.40162 50039,Ibstock,2336,ENG,232,GB,52.68554,-1.39965 50040,Ilchester,2336,ENG,232,GB,51.00587,-2.67981 50041,Ilfracombe,2336,ENG,232,GB,51.2093,-4.11344 50042,Ilkeston,2336,ENG,232,GB,52.97055,-1.30951 50043,Ilkley,2336,ENG,232,GB,53.92449,-1.82326 50044,Ilminster,2336,ENG,232,GB,50.92684,-2.91009 50045,Immingham,2336,ENG,232,GB,53.61239,-0.22219 50046,Ince Blundell,2336,ENG,232,GB,53.52429,-3.02733 50047,Ince-in-Makerfield,2336,ENG,232,GB,53.53333,-2.61667 50050,Ingatestone,2336,ENG,232,GB,51.67027,0.38359 50051,Ingleby Greenhow,2336,ENG,232,GB,54.44983,-1.10687 50052,Ingleton,2336,ENG,232,GB,54.15392,-2.46849 50053,Ingoldmells,2336,ENG,232,GB,53.19414,0.33358 50054,Ingrave,2336,ENG,232,GB,51.60416,0.34058 50055,Inkberrow,2336,ENG,232,GB,52.21284,-1.98093 50066,Ipplepen,2336,ENG,232,GB,50.48919,-3.639 50067,Ipswich,2336,ENG,232,GB,52.05917,1.15545 50068,Irchester,2336,ENG,232,GB,52.28108,-0.6451 50069,Irlam,2336,ENG,232,GB,53.44253,-2.42323 50070,Ironbridge,2336,ENG,232,GB,52.62795,-2.48465 50071,Irthlingborough,2336,ENG,232,GB,52.32674,-0.61129 50082,Isle of Wight,2336,ENG,232,GB,50.66667,-1.33333 50083,Isleham,2336,ENG,232,GB,52.34289,0.41212 50084,Isles of Scilly,2336,ENG,232,GB,49.92117,-6.29431 50085,Isleworth,2336,ENG,232,GB,51.47518,-0.34246 50086,Islington,2336,ENG,232,GB,51.53622,-0.10304 50087,Iver,2336,ENG,232,GB,51.5,-0.5 50088,Iver Heath,2336,ENG,232,GB,51.53642,-0.5179 50089,Ivinghoe,2336,ENG,232,GB,51.83602,-0.62983 50090,Ivybridge,2336,ENG,232,GB,50.39039,-3.91914 50091,Iwade,2336,ENG,232,GB,51.37754,0.72935 50092,Ixworth,2336,ENG,232,GB,52.29893,0.8341 50093,Jarrow,2336,ENG,232,GB,54.98036,-1.48423 50098,Keadby,2336,ENG,232,GB,53.59308,-0.74021 50100,Kearsley,2336,ENG,232,GB,53.53333,-2.38333 50101,Kedington,2336,ENG,232,GB,52.09282,0.48675 50102,Keelby,2336,ENG,232,GB,53.5758,-0.24701 50103,Keele,2336,ENG,232,GB,53.00382,-2.28741 50104,Kegworth,2336,ENG,232,GB,52.83482,-1.28042 50105,Keighley,2336,ENG,232,GB,53.86791,-1.90664 50107,Kelloe,2336,ENG,232,GB,54.71894,-1.47495 50108,Kelsall,2336,ENG,232,GB,53.20775,-2.71242 50111,Kelvedon,2336,ENG,232,GB,51.84007,0.7057 50112,Kelvedon Hatch,2336,ENG,232,GB,51.66739,0.26814 50114,Kempsey,2336,ENG,232,GB,52.13936,-2.21751 50115,Kempston,2336,ENG,232,GB,52.11599,-0.50044 50116,Kempston Hardwick,2336,ENG,232,GB,52.08956,-0.49908 50117,Kemsing,2336,ENG,232,GB,51.30604,0.22917 50118,Kendal,2336,ENG,232,GB,54.32681,-2.74757 50119,Kenilworth,2336,ENG,232,GB,52.34958,-1.58276 50120,Kennington,2336,ENG,232,GB,51.1674,0.88491 50122,Kensworth,2336,ENG,232,GB,51.85173,-0.50386 50123,Kent,2336,ENG,232,GB,51.16667,0.66667 50124,Kenton,2336,ENG,232,GB,50.63978,-3.47151 50125,Keresley,2336,ENG,232,GB,52.45156,-1.53319 50126,Kesgrave,2336,ENG,232,GB,52.06241,1.2365 50127,Kessingland,2336,ENG,232,GB,52.41987,1.70878 50128,Keswick,2336,ENG,232,GB,54.59947,-3.13256 50129,Kettering,2336,ENG,232,GB,52.39836,-0.72571 50130,Ketton,2336,ENG,232,GB,52.62804,-0.55459 50131,Keyingham,2336,ENG,232,GB,53.70961,-0.11325 50132,Keynsham,2336,ENG,232,GB,51.41387,-2.4978 50133,Keyworth,2336,ENG,232,GB,52.87122,-1.08991 50134,Kibworth Harcourt,2336,ENG,232,GB,52.54439,-0.99491 50135,Kidderminster,2336,ENG,232,GB,52.38819,-2.25 50136,Kidlington,2336,ENG,232,GB,51.82166,-1.2886 50137,Kidsgrove,2336,ENG,232,GB,53.08691,-2.23777 50141,Kilburn,2336,ENG,232,GB,53.0058,-1.43869 50144,Kilham,2336,ENG,232,GB,54.06413,-0.38057 50146,Killamarsh,2336,ENG,232,GB,53.32395,-1.31688 50153,Kilsby,2336,ENG,232,GB,52.33375,-1.17505 50156,Kimberley,2336,ENG,232,GB,52.98333,-1.26667 50157,Kimbolton,2336,ENG,232,GB,52.29704,-0.38916 50158,Kimpton,2336,ENG,232,GB,51.85089,-0.2998 50160,Kineton,2336,ENG,232,GB,52.15645,-1.51148 50161,Kings Clipstone,2336,ENG,232,GB,53.1769,-1.10129 50162,Kings Lynn,2336,ENG,232,GB,52.75172,0.39516 50165,Kings Hill,2336,ENG,232,GB,51.27437,0.40237 50166,Kings Langley,2336,ENG,232,GB,51.71395,-0.45044 50167,Kings Sutton,2336,ENG,232,GB,52.02313,-1.27613 50168,Kings Worthy,2336,ENG,232,GB,51.08862,-1.2978 50169,Kingsbridge,2336,ENG,232,GB,50.28451,-3.77638 50170,Kingsbury,2336,ENG,232,GB,52.56106,-1.67936 50171,Kingsclere,2336,ENG,232,GB,51.32487,-1.24339 50172,Kingskerswell,2336,ENG,232,GB,50.49915,-3.58195 50174,Kingsland,2336,ENG,232,GB,52.24911,-2.81542 50175,Kingsley,2336,ENG,232,GB,53.26667,-2.66667 50176,Kingsteignton,2336,ENG,232,GB,50.55,-3.58333 50177,Kingston Bagpuize,2336,ENG,232,GB,51.6815,-1.42041 50178,Kingston Seymour,2336,ENG,232,GB,51.39833,-2.86111 50179,Kingston upon Hull,2336,ENG,232,GB,53.7446,-0.33525 50180,Kingston upon Thames,2336,ENG,232,GB,51.41259,-0.2974 50182,Kingswinford,2336,ENG,232,GB,52.49755,-2.16889 50183,Kingswood,2336,ENG,232,GB,51.45278,-2.50833 50184,Kington,2336,ENG,232,GB,52.2,-2.01667 50188,Kintbury,2336,ENG,232,GB,51.39958,-1.44865 50190,Kinvere,2336,ENG,232,GB,52.45,-2.23333 50191,Kippax,2336,ENG,232,GB,53.76687,-1.37099 50193,Kirby Muxloe,2336,ENG,232,GB,52.63025,-1.22755 50195,Kirk Sandall,2336,ENG,232,GB,53.56211,-1.06876 50196,Kirkburton,2336,ENG,232,GB,53.61047,-1.70292 50197,Kirkby,2336,ENG,232,GB,53.48138,-2.89215 50200,Kirkby in Ashfield,2336,ENG,232,GB,53.09982,-1.24379 50198,Kirkby Lonsdale,2336,ENG,232,GB,54.20259,-2.59827 50199,Kirkby Stephen,2336,ENG,232,GB,54.47229,-2.34865 50201,Kirkbymoorside,2336,ENG,232,GB,54.27014,-0.93218 50205,Kirkham,2336,ENG,232,GB,53.78244,-2.87189 50207,Kirklees,2336,ENG,232,GB,53.58333,-1.75 50212,Kirton,2336,ENG,232,GB,52.92774,-0.06008 50213,Kirton in Lindsey,2336,ENG,232,GB,53.47548,-0.59566 50214,Kislingbury,2336,ENG,232,GB,52.22976,-0.97914 50215,Kiveton Park,2336,ENG,232,GB,53.3412,-1.25498 50216,Knaphill,2336,ENG,232,GB,51.3201,-0.61584 50217,Knaresborough,2336,ENG,232,GB,54.0091,-1.46851 50218,Knebworth,2336,ENG,232,GB,51.86674,-0.18394 50220,Knottingley,2336,ENG,232,GB,53.70778,-1.25639 50221,Knowle,2336,ENG,232,GB,52.38333,-1.73333 50222,Knowsley,2336,ENG,232,GB,53.41667,-2.83333 50223,Knutsford,2336,ENG,232,GB,53.30289,-2.37482 50224,Laceby,2336,ENG,232,GB,53.54092,-0.1683 50225,Lacock,2336,ENG,232,GB,51.41528,-2.12194 50227,Lakenheath,2336,ENG,232,GB,52.41755,0.52211 50228,Lamberhurst,2336,ENG,232,GB,51.1005,0.38967 50229,Lambeth,2336,ENG,232,GB,51.49635,-0.11152 50230,Lambourn,2336,ENG,232,GB,51.50805,-1.53105 50231,Lamesley,2336,ENG,232,GB,54.91567,-1.60945 50235,Lancashire,2336,ENG,232,GB,53.83333,-2.5 50236,Lancaster,2336,ENG,232,GB,54.04649,-2.79988 50237,Lanchester,2336,ENG,232,GB,54.82108,-1.74256 50238,Lancing,2336,ENG,232,GB,50.82882,-0.32247 50239,Landrake,2336,ENG,232,GB,50.42265,-4.29023 50240,Langford,2336,ENG,232,GB,52.0546,-0.27165 50241,Langham,2336,ENG,232,GB,52.69152,-0.75385 50242,Langho,2336,ENG,232,GB,53.80217,-2.45076 50244,Langley Green,2336,ENG,232,GB,51.12817,-0.19835 50245,Langley Park,2336,ENG,232,GB,54.79979,-1.67005 50246,Langport,2336,ENG,232,GB,51.03778,-2.82806 50247,Langtoft,2336,ENG,232,GB,52.69834,-0.3404 50250,Lark Hill,2336,ENG,232,GB,51.2,-1.81667 50251,Larkfield,2336,ENG,232,GB,51.30143,0.44855 50254,Latchingdon and Snoreham,2336,ENG,232,GB,51.6716,0.72578 50256,Launceston,2336,ENG,232,GB,50.63699,-4.36006 50259,Lavendon,2336,ENG,232,GB,52.17279,-0.66109 50260,Lavenham,2336,ENG,232,GB,52.10861,0.79617 50262,Layer de la Haye,2336,ENG,232,GB,51.84593,0.85745 50263,Leasingham,2336,ENG,232,GB,53.02573,-0.42606 50264,Leatherhead,2336,ENG,232,GB,51.29652,-0.3338 50265,Lechlade,2336,ENG,232,GB,51.69403,-1.69128 50266,Leconfield,2336,ENG,232,GB,53.8773,-0.45729 50267,Ledbury,2336,ENG,232,GB,52.03639,-2.42635 50268,Ledsham,2336,ENG,232,GB,53.76322,-1.30857 50269,Lee-on-the-Solent,2336,ENG,232,GB,50.80169,-1.20174 50270,Leeds,2336,ENG,232,GB,53.79648,-1.54785 50271,Leek,2336,ENG,232,GB,53.10434,-2.02207 50272,Leek Wootton,2336,ENG,232,GB,52.31782,-1.57933 50274,Leicester,2336,ENG,232,GB,52.6386,-1.13169 50275,Leicestershire,2336,ENG,232,GB,52.66667,-1.0 50276,Leigh,2336,ENG,232,GB,53.49642,-2.51973 50277,Leighton Buzzard,2336,ENG,232,GB,51.91722,-0.65802 50278,Leiston,2336,ENG,232,GB,52.20611,1.57757 50279,Lenham,2336,ENG,232,GB,51.23705,0.71892 50282,Leominster,2336,ENG,232,GB,52.22583,-2.74491 50284,Lesbury,2336,ENG,232,GB,55.39832,-1.6283 50287,Letchworth,2336,ENG,232,GB,51.97944,-0.2284 50288,Letchworth Garden City,2336,ENG,232,GB,51.97938,-0.22664 50293,Leven,2336,ENG,232,GB,53.89028,-0.31783 50294,Lewes,2336,ENG,232,GB,50.87398,0.0088 50295,Leyburn,2336,ENG,232,GB,54.31004,-1.83041 50296,Leyland,2336,ENG,232,GB,53.69786,-2.68758 50297,Leysdown-on-Sea,2336,ENG,232,GB,51.3973,0.92156 50299,Lichfield,2336,ENG,232,GB,52.68154,-1.82549 50300,Lidlington,2336,ENG,232,GB,52.04154,-0.55914 50301,Lifton,2336,ENG,232,GB,50.64356,-4.28216 50302,Lightwater,2336,ENG,232,GB,51.34846,-0.67147 50305,Limpley Stoke,2336,ENG,232,GB,51.34487,-2.31409 50306,Lincoln,2336,ENG,232,GB,53.22683,-0.53792 50307,Lincolnshire,2336,ENG,232,GB,53.16667,-0.25 50308,Lingdale,2336,ENG,232,GB,54.53787,-0.95864 50309,Lingfield,2336,ENG,232,GB,51.17719,-0.01558 50310,Lingwood,2336,ENG,232,GB,52.62104,1.48616 50312,Linthwaite,2336,ENG,232,GB,53.62418,-1.85017 50313,Linton,2336,ENG,232,GB,52.09783,0.27672 50314,Linton upon Ouse,2336,ENG,232,GB,54.04639,-1.2492 50316,Liphook,2336,ENG,232,GB,51.07673,-0.8032 50319,Liskeard,2336,ENG,232,GB,50.4545,-4.46517 50321,Liss,2336,ENG,232,GB,51.04277,-0.89238 50322,Litherland,2336,ENG,232,GB,53.46993,-2.99809 50323,Little Amwell,2336,ENG,232,GB,51.78333,-0.03333 50324,Little Chalfont,2336,ENG,232,GB,51.66829,-0.57038 50325,Little Clacton,2336,ENG,232,GB,51.82557,1.14215 50326,Little Dunmow,2336,ENG,232,GB,51.86096,0.41478 50327,Little Eaton,2336,ENG,232,GB,52.97028,-1.4595 50328,Little Hallingbury,2336,ENG,232,GB,51.83324,0.18151 50329,Little Hulton,2336,ENG,232,GB,53.53333,-2.41667 50330,Little Lever,2336,ENG,232,GB,53.56346,-2.37803 50331,Little Paxton,2336,ENG,232,GB,52.25045,-0.25801 50332,Little Weighton,2336,ENG,232,GB,53.79021,-0.50679 50333,Littleborough,2336,ENG,232,GB,53.64413,-2.09581 50334,Littlebourne,2336,ENG,232,GB,51.27445,1.16687 50335,Littlehampton,2336,ENG,232,GB,50.81137,-0.54078 50336,Littleport,2336,ENG,232,GB,52.45784,0.30603 50337,Liverpool,2336,ENG,232,GB,53.41058,-2.97794 50338,Liversedge,2336,ENG,232,GB,53.70514,-1.69327 50382,Locking,2336,ENG,232,GB,51.33327,-2.91387 50383,Lockington,2336,ENG,232,GB,53.91415,-0.48572 50384,Loddon,2336,ENG,232,GB,52.5327,1.48183 50385,Lofthouse,2336,ENG,232,GB,53.72947,-1.49697 50386,Loftus,2336,ENG,232,GB,54.55543,-0.89459 50388,London,2336,ENG,232,GB,51.50853,-0.12574 50390,Long Ashton,2336,ENG,232,GB,51.42997,-2.66098 50391,Long Bennington,2336,ENG,232,GB,52.99314,-0.75803 50392,Long Buckby,2336,ENG,232,GB,52.3026,-1.08113 50393,Long Clawson,2336,ENG,232,GB,52.83725,-0.9288 50394,Long Crendon,2336,ENG,232,GB,51.77294,-0.99684 50395,Long Eaton,2336,ENG,232,GB,52.89855,-1.27136 50396,Long Itchington,2336,ENG,232,GB,52.28396,-1.39243 50397,Long Lawford,2336,ENG,232,GB,52.38176,-1.30716 50398,Long Melford,2336,ENG,232,GB,52.07481,0.71639 50399,Long Stratton,2336,ENG,232,GB,52.48803,1.23478 50400,Long Sutton,2336,ENG,232,GB,51.21978,-0.94293 50401,Long Whatton,2336,ENG,232,GB,52.80577,-1.28506 50402,Longdendale,2336,ENG,232,GB,53.46667,-2.0 50403,Longfield,2336,ENG,232,GB,51.3969,0.30212 50405,Longhope,2336,ENG,232,GB,51.86667,-2.45 50406,Longhorsley,2336,ENG,232,GB,55.24586,-1.76914 50407,Longhoughton,2336,ENG,232,GB,55.43131,-1.61691 50409,Longridge,2336,ENG,232,GB,53.83212,-2.59964 50410,Longsight,2336,ENG,232,GB,53.45801,-2.20104 50411,Longstanton,2336,ENG,232,GB,52.28076,0.04558 50412,Longton,2336,ENG,232,GB,52.98333,-2.13333 50413,Longtown,2336,ENG,232,GB,51.95,-2.98333 50414,Longwick,2336,ENG,232,GB,51.73607,-0.85676 50415,Looe,2336,ENG,232,GB,50.35778,-4.45418 50417,Lostwithiel,2336,ENG,232,GB,50.40784,-4.67023 50418,Loughborough,2336,ENG,232,GB,52.76667,-1.2 50419,Louth,2336,ENG,232,GB,53.36664,-0.00438 50420,Low Ackworth,2336,ENG,232,GB,53.65023,-1.32334 50421,Low Bradley,2336,ENG,232,GB,53.93217,-1.99646 50422,Low Etherley,2336,ENG,232,GB,54.65349,-1.74315 50423,Lowdham,2336,ENG,232,GB,53.01205,-1.00483 50424,Lower Brailes,2336,ENG,232,GB,52.05034,-1.54176 50425,Lower Broadheath,2336,ENG,232,GB,52.21379,-2.27724 50426,Lower Earley,2336,ENG,232,GB,51.42708,-0.91979 50427,Lower Halstow,2336,ENG,232,GB,51.37395,0.66819 50428,Lower Kingswood,2336,ENG,232,GB,51.26968,-0.2123 50429,Lowestoft,2336,ENG,232,GB,52.47523,1.75167 50430,Lowick,2336,ENG,232,GB,55.65044,-1.97809 50431,Luckington,2336,ENG,232,GB,51.55444,-2.24222 50432,Luddenden Foot,2336,ENG,232,GB,53.71873,-1.94582 50433,Ludgershall,2336,ENG,232,GB,51.25558,-1.6222 50434,Ludlow,2336,ENG,232,GB,52.37431,-2.71311 50435,Lugwardine,2336,ENG,232,GB,52.06583,-2.6578 50437,Lund,2336,ENG,232,GB,53.9192,-0.52211 50439,Luton,2336,ENG,232,GB,51.87967,-0.41748 50440,Lutterworth,2336,ENG,232,GB,52.45634,-1.20218 50441,Lydbrook,2336,ENG,232,GB,51.83763,-2.57818 50442,Lydd,2336,ENG,232,GB,50.95132,0.90654 50443,Lydiard Millicent,2336,ENG,232,GB,51.57117,-1.86346 50444,Lydney,2336,ENG,232,GB,51.72598,-2.52605 50445,Lyme Regis,2336,ENG,232,GB,50.72654,-2.93477 50446,Lyminge,2336,ENG,232,GB,51.12951,1.08896 50447,Lymington,2336,ENG,232,GB,50.75767,-1.5443 50448,Lymm,2336,ENG,232,GB,53.38105,-2.47763 50449,Lympne,2336,ENG,232,GB,51.07773,1.02808 50450,Lympstone,2336,ENG,232,GB,50.64751,-3.43162 50451,Lyndhurst,2336,ENG,232,GB,50.87259,-1.57662 50452,Lyneham,2336,ENG,232,GB,51.51667,-1.96667 50453,Lynemouth,2336,ENG,232,GB,55.21306,-1.5425 50454,Lynton,2336,ENG,232,GB,51.22968,-3.84131 50455,Lytchett Matravers,2336,ENG,232,GB,50.75826,-2.07806 50456,Lytham St Annes,2336,ENG,232,GB,53.7426,-2.997 50457,Mablethorpe,2336,ENG,232,GB,53.3409,0.26102 50458,Macclesfield,2336,ENG,232,GB,53.26023,-2.12564 50464,Madeley,2336,ENG,232,GB,53.0,-2.33333 50469,Maghull,2336,ENG,232,GB,53.51619,-2.94117 50471,Maiden Newton,2336,ENG,232,GB,50.77909,-2.57226 50472,Maidenbower,2336,ENG,232,GB,51.10781,-0.15286 50473,Maidenhead,2336,ENG,232,GB,51.52279,-0.71986 50474,Maidstone,2336,ENG,232,GB,51.26667,0.51667 50475,Maldon,2336,ENG,232,GB,51.7311,0.67463 50476,Malmesbury,2336,ENG,232,GB,51.58175,-2.09708 50477,Malpas,2336,ENG,232,GB,53.01667,-2.76667 50478,Maltby,2336,ENG,232,GB,53.41667,-1.2 50479,Malton,2336,ENG,232,GB,54.13695,-0.7996 50480,Manby,2336,ENG,232,GB,53.36291,0.09653 50481,Manchester,2336,ENG,232,GB,53.41667,-2.25 50482,Manea,2336,ENG,232,GB,52.48487,0.1793 50483,Mangotsfield,2336,ENG,232,GB,51.4878,-2.50403 50484,Manningtree,2336,ENG,232,GB,51.94538,1.06112 50485,Mansfield,2336,ENG,232,GB,53.13333,-1.2 50486,Mansfield Woodhouse,2336,ENG,232,GB,53.16495,-1.19384 50487,Manston,2336,ENG,232,GB,50.95,-2.26667 50488,Manton,2336,ENG,232,GB,52.63223,-0.70038 50489,Maple Cross,2336,ENG,232,GB,51.625,-0.508 50490,Marazion,2336,ENG,232,GB,50.12556,-5.47505 50491,March,2336,ENG,232,GB,52.55131,0.08828 50492,Marcham,2336,ENG,232,GB,51.66755,-1.34295 50494,Marchwood,2336,ENG,232,GB,50.88966,-1.4544 50495,Marden,2336,ENG,232,GB,51.17482,0.48855 50496,Margate,2336,ENG,232,GB,51.38132,1.38617 50497,Market Bosworth,2336,ENG,232,GB,52.62428,-1.40174 50498,Market Deeping,2336,ENG,232,GB,52.67654,-0.31629 50499,Market Drayton,2336,ENG,232,GB,52.90538,-2.49012 50500,Market Harborough,2336,ENG,232,GB,52.4776,-0.92053 50501,Market Lavington,2336,ENG,232,GB,51.28756,-1.97729 50502,Market Overton,2336,ENG,232,GB,52.73806,-0.6863 50503,Market Rasen,2336,ENG,232,GB,53.38764,-0.33781 50504,Market Warsop,2336,ENG,232,GB,53.20516,-1.15257 50505,Market Weighton,2336,ENG,232,GB,53.8631,-0.66505 50506,Markfield,2336,ENG,232,GB,52.68747,-1.27476 50508,Marks Tey,2336,ENG,232,GB,51.87628,0.76424 50509,Markyate,2336,ENG,232,GB,51.83846,-0.46345 50510,Marlborough,2336,ENG,232,GB,51.42027,-1.72949 50511,Marldon,2336,ENG,232,GB,50.45512,-3.59678 50512,Marlow,2336,ENG,232,GB,51.56933,-0.77415 50513,Marnhull,2336,ENG,232,GB,50.97045,-2.31327 50514,Marple,2336,ENG,232,GB,53.39452,-2.06292 50515,Marr,2336,ENG,232,GB,53.54296,-1.22051 50516,Marsden,2336,ENG,232,GB,53.6,-1.91667 50517,Marshfield,2336,ENG,232,GB,51.46194,-2.32 50519,Marske-by-the-Sea,2336,ENG,232,GB,54.59147,-1.01959 50520,Marston Moretaine,2336,ENG,232,GB,52.0641,-0.54932 50521,Martham,2336,ENG,232,GB,52.70464,1.63636 50522,Martock,2336,ENG,232,GB,50.97361,-2.76684 50524,Maryport,2336,ENG,232,GB,54.71434,-3.49509 50525,Masham,2336,ENG,232,GB,54.2227,-1.65718 50526,Matlock,2336,ENG,232,GB,53.13838,-1.5556 50527,Mattishall,2336,ENG,232,GB,52.65905,1.0325 50529,Maulden,2336,ENG,232,GB,52.03063,-0.46975 50532,Mayfield,2336,ENG,232,GB,53.0,-1.76667 50534,Mayland,2336,ENG,232,GB,51.68033,0.76715 50535,Measham,2336,ENG,232,GB,52.70644,-1.50637 50536,Medway,2336,ENG,232,GB,51.41667,0.5 50537,Melbourn,2336,ENG,232,GB,52.08128,0.01514 50538,Melbourne,2336,ENG,232,GB,52.8219,-1.42522 50539,Meldreth,2336,ENG,232,GB,52.09396,0.00807 50540,Melksham,2336,ENG,232,GB,51.37281,-2.14002 50542,Meltham,2336,ENG,232,GB,53.59305,-1.84861 50543,Meltham Mills,2336,ENG,232,GB,53.59388,-1.83989 50544,Melton Mowbray,2336,ENG,232,GB,52.76588,-0.88693 50546,Mendip,2336,ENG,232,GB,51.2372,-2.6266 50547,Menston,2336,ENG,232,GB,53.89041,-1.74395 50549,Meopham,2336,ENG,232,GB,51.36844,0.36007 50550,Meppershall,2336,ENG,232,GB,52.01713,-0.33991 50551,Mere,2336,ENG,232,GB,51.08889,-2.26694 50552,Meriden,2336,ENG,232,GB,52.4377,-1.64366 50553,Merriott,2336,ENG,232,GB,50.91275,-2.79538 50556,Messingham,2336,ENG,232,GB,53.52828,-0.65385 50557,Metheringham,2336,ENG,232,GB,53.14015,-0.40368 50559,Methley,2336,ENG,232,GB,53.72887,-1.40318 50561,Metropolitan Borough of Wirral,2336,ENG,232,GB,53.33333,-3.08333 50562,Mevagissey,2336,ENG,232,GB,50.27324,-4.79166 50563,Mexborough,2336,ENG,232,GB,53.49389,-1.29243 50564,Mickle Trafford,2336,ENG,232,GB,53.22146,-2.83225 50565,Mickleton,2336,ENG,232,GB,52.09152,-1.76623 50569,Middle Rasen,2336,ENG,232,GB,53.38722,-0.36202 50570,Middle Winterslow,2336,ENG,232,GB,51.09346,-1.65453 50571,Middlesbrough,2336,ENG,232,GB,54.57623,-1.23483 50572,Middlestown,2336,ENG,232,GB,53.65079,-1.59762 50573,Middleton,2336,ENG,232,GB,53.55,-2.2 50574,Middlewich,2336,ENG,232,GB,53.19296,-2.44402 50575,Midhurst,2336,ENG,232,GB,50.98559,-0.74003 50577,Midsomer Norton,2336,ENG,232,GB,51.28567,-2.48591 50578,Milborne Port,2336,ENG,232,GB,50.96605,-2.46248 50579,Milborne St Andrew,2336,ENG,232,GB,50.77829,-2.28114 50580,Mildenhall,2336,ENG,232,GB,52.34446,0.51086 50581,Milford,2336,ENG,232,GB,51.17272,-0.65042 50583,Milford on Sea,2336,ENG,232,GB,50.72561,-1.59004 50584,Millbrook,2336,ENG,232,GB,52.03882,-0.52438 50586,Millom,2336,ENG,232,GB,54.21072,-3.272 50591,Milnrow,2336,ENG,232,GB,53.61115,-2.11266 50592,Milnthorpe,2336,ENG,232,GB,54.22785,-2.76939 50593,Milton Keynes,2336,ENG,232,GB,52.08333,-0.75 50596,Milverton,2336,ENG,232,GB,51.02333,-3.25222 50597,Minchinhampton,2336,ENG,232,GB,51.70675,-2.18502 50598,Minehead,2336,ENG,232,GB,51.20452,-3.48284 50599,Minety,2336,ENG,232,GB,51.61667,-1.95 50600,Minster Lovell,2336,ENG,232,GB,51.79274,-1.5483 50601,Minsterley,2336,ENG,232,GB,52.63989,-2.92807 50603,Mirfield,2336,ENG,232,GB,53.67343,-1.69636 50604,Misterton,2336,ENG,232,GB,53.44492,-0.85032 50605,Mistley,2336,ENG,232,GB,51.94331,1.08254 50606,Mitcham,2336,ENG,232,GB,51.40322,-0.16831 50607,Mitcheldean,2336,ENG,232,GB,51.8644,-2.4895 50608,Mobberley,2336,ENG,232,GB,53.31667,-2.31667 50609,Modbury,2336,ENG,232,GB,50.34957,-3.88684 50613,Moira,2336,ENG,232,GB,52.73698,-1.53496 50615,Mollington,2336,ENG,232,GB,53.22934,-2.92159 50618,Monk Fryston,2336,ENG,232,GB,53.7616,-1.23751 50624,Morchard Bishop,2336,ENG,232,GB,50.85416,-3.74894 50625,Morcott,2336,ENG,232,GB,52.59669,-0.63704 50626,Morden,2336,ENG,232,GB,51.39822,-0.19837 50627,Morecambe,2336,ENG,232,GB,54.06835,-2.86108 50628,Moreton,2336,ENG,232,GB,53.4,-3.11667 50629,Moreton in Marsh,2336,ENG,232,GB,51.98964,-1.70297 50630,Moretonhampstead,2336,ENG,232,GB,50.66077,-3.76495 50631,Morley,2336,ENG,232,GB,53.74013,-1.59877 50632,Morpeth,2336,ENG,232,GB,55.16882,-1.68893 50633,Moss,2336,ENG,232,GB,53.61667,-1.1 50635,Mossley,2336,ENG,232,GB,53.51454,-2.03462 50637,Motcombe,2336,ENG,232,GB,51.02929,-2.21627 50639,Mouldsworth,2336,ENG,232,GB,53.23333,-2.73333 50640,Moulton Chapel,2336,ENG,232,GB,52.74668,-0.08274 50641,Mount Hawke,2336,ENG,232,GB,50.28229,-5.20855 50643,Mountsorrel,2336,ENG,232,GB,52.71667,-1.15 50645,Much Hadham,2336,ENG,232,GB,51.85407,0.07188 50646,Much Wenlock,2336,ENG,232,GB,52.59582,-2.55749 50650,Mulbarton,2336,ENG,232,GB,52.55913,1.23327 50651,Mullion,2336,ENG,232,GB,50.02706,-5.24248 50652,Mundesley,2336,ENG,232,GB,52.87842,1.4297 50653,Mundford,2336,ENG,232,GB,52.5093,0.64991 50654,Murton,2336,ENG,232,GB,54.81812,-1.39036 50656,Mylor Bridge,2336,ENG,232,GB,50.18506,-5.07963 50657,Mytholmroyd,2336,ENG,232,GB,53.73065,-1.98258 50658,Nafferton,2336,ENG,232,GB,54.01965,-0.3919 50659,Nailsea,2336,ENG,232,GB,51.43239,-2.75847 50660,Nailsworth,2336,ENG,232,GB,51.69382,-2.2199 50662,Nanpean,2336,ENG,232,GB,50.36884,-4.86935 50663,Nantwich,2336,ENG,232,GB,53.06878,-2.52051 50665,Narborough,2336,ENG,232,GB,52.56667,-1.2 50666,Navenby,2336,ENG,232,GB,53.1068,-0.52494 50669,Necton,2336,ENG,232,GB,52.64994,0.77539 50670,Needham Market,2336,ENG,232,GB,52.1555,1.0516 50671,Needingworth,2336,ENG,232,GB,52.33051,-0.03116 50674,Nelson,2336,ENG,232,GB,53.83333,-2.2 50676,Neston,2336,ENG,232,GB,53.28333,-3.05 50677,Nether Heyford,2336,ENG,232,GB,52.22123,-1.03452 50678,Nether Poppleton,2336,ENG,232,GB,53.98793,-1.15062 50679,Nether Stowey,2336,ENG,232,GB,51.15101,-3.15676 50680,Netheravon,2336,ENG,232,GB,51.23613,-1.79083 50682,Netherton,2336,ENG,232,GB,52.48333,-2.08333 50683,Netley,2336,ENG,232,GB,50.87634,-1.35398 50684,Nettleham,2336,ENG,232,GB,53.26603,-0.48866 50685,New Alresford,2336,ENG,232,GB,51.08624,-1.17011 50686,New Basford,2336,ENG,232,GB,52.97336,-1.16564 50688,New Ferry,2336,ENG,232,GB,53.36046,-2.99377 50689,New Malden,2336,ENG,232,GB,51.40065,-0.2617 50690,New Marske,2336,ENG,232,GB,54.57848,-1.04224 50691,New Mills,2336,ENG,232,GB,53.36592,-1.99986 50692,New Milton,2336,ENG,232,GB,50.75601,-1.6658 50695,New Romney,2336,ENG,232,GB,50.98599,0.94122 50698,Newark on Trent,2336,ENG,232,GB,53.06667,-0.81667 50700,Newbiggin-by-the-Sea,2336,ENG,232,GB,55.18532,-1.51469 50701,Newbold Verdon,2336,ENG,232,GB,52.62959,-1.3422 50705,Newburn,2336,ENG,232,GB,54.9876,-1.74415 50706,Newbury,2336,ENG,232,GB,51.40148,-1.32471 50709,Newcastle under Lyme,2336,ENG,232,GB,53.0,-2.23333 50710,Newcastle upon Tyne,2336,ENG,232,GB,55.0,-1.66667 50711,Newchurch,2336,ENG,232,GB,50.66744,-1.20828 50712,Newent,2336,ENG,232,GB,51.93365,-2.40815 50713,Newhaven,2336,ENG,232,GB,50.79693,0.05545 50714,Newick,2336,ENG,232,GB,50.97518,0.01579 50715,Newington,2336,ENG,232,GB,51.35217,0.66768 50718,Newmarket,2336,ENG,232,GB,52.24467,0.40418 50721,Newport,2336,ENG,232,GB,50.70146,-1.29124 50722,Newport Pagnell,2336,ENG,232,GB,52.08731,-0.72218 50724,Newquay,2336,ENG,232,GB,50.41557,-5.07319 50727,Newton Abbot,2336,ENG,232,GB,50.52858,-3.61186 50728,Newton Aycliffe,2336,ENG,232,GB,54.61842,-1.5719 50729,Newton Ferrers,2336,ENG,232,GB,50.31467,-4.0392 50730,Newton Longville,2336,ENG,232,GB,51.976,-0.76595 50732,Newton Poppleford,2336,ENG,232,GB,50.7,-3.29586 50734,Newton-le-Willows,2336,ENG,232,GB,53.45,-2.6 50743,Ninfield,2336,ENG,232,GB,50.88641,0.42529 50744,Niton,2336,ENG,232,GB,50.58702,-1.28489 50745,Norfolk,2336,ENG,232,GB,52.66667,1.0 50746,Normandy,2336,ENG,232,GB,51.25751,-0.67472 50748,North Baddesley,2336,ENG,232,GB,50.97745,-1.44547 50750,North Cave,2336,ENG,232,GB,53.78012,-0.64965 50751,North Collingham,2336,ENG,232,GB,53.15,-0.75 50752,North Duffield,2336,ENG,232,GB,53.82579,-0.96414 50753,North East Lincolnshire,2336,ENG,232,GB,53.53333,-0.08333 50754,North Elmham,2336,ENG,232,GB,52.7464,0.94611 50755,North Ferriby,2336,ENG,232,GB,53.72124,-0.5052 50757,North Leigh,2336,ENG,232,GB,51.81432,-1.44144 50758,North Lincolnshire,2336,ENG,232,GB,53.58333,-0.5 50759,North Luffenham,2336,ENG,232,GB,52.62108,-0.61987 50760,North Newbald,2336,ENG,232,GB,53.81667,-0.61667 50761,North Petherton,2336,ENG,232,GB,51.09243,-3.01549 50763,North Shields,2336,ENG,232,GB,55.01646,-1.44925 50764,North Somercotes,2336,ENG,232,GB,53.44573,0.14103 50765,North Somerset,2336,ENG,232,GB,51.33333,-2.83333 50766,North Sunderland,2336,ENG,232,GB,55.57688,-1.66436 50767,North Tawton,2336,ENG,232,GB,50.79968,-3.89759 50768,North Thoresby,2336,ENG,232,GB,53.46651,-0.05575 50769,North Walsham,2336,ENG,232,GB,52.82121,1.38746 50770,North Yorkshire,2336,ENG,232,GB,54.16667,-1.5 50771,Northallerton,2336,ENG,232,GB,54.33901,-1.43243 50772,Northam,2336,ENG,232,GB,51.03333,-4.21667 50773,Northampton,2336,ENG,232,GB,52.25,-0.88333 50774,Northamptonshire,2336,ENG,232,GB,52.25,-0.83333 50775,Northborough,2336,ENG,232,GB,52.65868,-0.29818 50776,Northiam,2336,ENG,232,GB,50.99439,0.60026 50777,Northleach,2336,ENG,232,GB,51.82994,-1.83712 50778,Northolt,2336,ENG,232,GB,51.54855,-0.36778 50780,Northorpe,2336,ENG,232,GB,53.46307,-0.65347 50781,Northumberland,2336,ENG,232,GB,55.25,-2.0 50782,Northwich,2336,ENG,232,GB,53.25882,-2.52025 50783,Norton,2336,ENG,232,GB,53.63333,-1.18333 50784,Norton Canes,2336,ENG,232,GB,52.67142,-1.96262 50785,Norwich,2336,ENG,232,GB,52.62783,1.29834 50786,Nottingham,2336,ENG,232,GB,52.9536,-1.15047 50787,Nottinghamshire,2336,ENG,232,GB,53.16667,-1.0 50788,Notton,2336,ENG,232,GB,53.61267,-1.47234 50789,Nuneaton,2336,ENG,232,GB,52.52323,-1.46523 50790,Oadby,2336,ENG,232,GB,52.60621,-1.08354 50791,Oakengates,2336,ENG,232,GB,52.69501,-2.45036 50792,Oakham,2336,ENG,232,GB,52.66667,-0.73333 50793,Oakington,2336,ENG,232,GB,52.26044,0.06849 50795,Oakley,2336,ENG,232,GB,52.16862,-0.52649 50798,Odiham,2336,ENG,232,GB,51.25407,-0.93933 50800,Okehampton,2336,ENG,232,GB,50.73841,-4.0016 50801,Old Basing,2336,ENG,232,GB,51.26667,-1.03333 50802,Old Harlow,2336,ENG,232,GB,51.78353,0.13381 50804,Old Leake,2336,ENG,232,GB,53.03108,0.09873 50805,Old Windsor,2336,ENG,232,GB,51.45807,-0.58674 50806,Oldbury,2336,ENG,232,GB,52.5,-2.01667 50807,Oldham,2336,ENG,232,GB,53.54051,-2.1183 50809,Olney,2336,ENG,232,GB,52.15345,-0.70201 50810,Olveston,2336,ENG,232,GB,51.58032,-2.5775 50814,Orleton,2336,ENG,232,GB,52.3,-2.75 50815,Ormesby St Margaret,2336,ENG,232,GB,52.67506,1.6885 50817,Ormskirk,2336,ENG,232,GB,53.56685,-2.88178 50818,Orpington,2336,ENG,232,GB,51.37457,0.09785 50819,Orsett,2336,ENG,232,GB,51.51232,0.36753 50820,Orwell,2336,ENG,232,GB,52.1356,-0.01099 50821,Ossett,2336,ENG,232,GB,53.67978,-1.58006 50822,Oswestry,2336,ENG,232,GB,52.86195,-3.05497 50823,Otford,2336,ENG,232,GB,51.31283,0.19046 50824,Otley,2336,ENG,232,GB,53.90553,-1.69383 50825,Otterburn,2336,ENG,232,GB,55.2334,-2.18059 50826,Ottershaw,2336,ENG,232,GB,51.36262,-0.52752 50827,Ottery St Mary,2336,ENG,232,GB,50.75,-3.26667 50828,Ottringham,2336,ENG,232,GB,53.70092,-0.07909 50829,Oughtibridge,2336,ENG,232,GB,53.43612,-1.53902 50830,Oundle,2336,ENG,232,GB,52.48093,-0.46732 50831,Outwell,2336,ENG,232,GB,52.60946,0.23333 50832,Over,2336,ENG,232,GB,52.31667,0.01667 50833,Overcombe,2336,ENG,232,GB,50.63509,-2.43207 50834,Overstrand,2336,ENG,232,GB,52.91623,1.339 50835,Overton,2336,ENG,232,GB,51.24389,-1.26154 50838,Owston Ferry,2336,ENG,232,GB,53.49407,-0.78045 50839,Oxenhope,2336,ENG,232,GB,53.81233,-1.95196 50840,Oxford,2336,ENG,232,GB,51.75222,-1.25596 50841,Oxfordshire,2336,ENG,232,GB,51.83333,-1.25 50842,Oxted,2336,ENG,232,GB,51.25687,-0.00601 50843,Paddock Wood,2336,ENG,232,GB,51.18187,0.38229 50844,Padiham,2336,ENG,232,GB,53.80187,-2.31511 50845,Padstow,2336,ENG,232,GB,50.53885,-4.93664 50846,Paignton,2336,ENG,232,GB,50.43565,-3.56789 50847,Painswick,2336,ENG,232,GB,51.78568,-2.19555 50849,Pangbourne,2336,ENG,232,GB,51.4837,-1.08519 50850,Pannal,2336,ENG,232,GB,53.96031,-1.53573 50851,Pant,2336,ENG,232,GB,52.79005,-3.08031 50852,Papworth Everard,2336,ENG,232,GB,52.24893,-0.11827 50853,Par,2336,ENG,232,GB,50.35107,-4.70288 50854,Parbold,2336,ENG,232,GB,53.59145,-2.77028 50855,Parkstone,2336,ENG,232,GB,50.72994,-1.94492 50856,Partington,2336,ENG,232,GB,53.41884,-2.42815 50857,Partridge Green,2336,ENG,232,GB,50.9594,-0.30796 50858,Pateley Bridge,2336,ENG,232,GB,54.08616,-1.75981 50860,Patrington,2336,ENG,232,GB,53.68395,-0.0133 50861,Pattingham,2336,ENG,232,GB,52.5891,-2.26538 50862,Paulton,2336,ENG,232,GB,51.30472,-2.50028 50863,Peacehaven,2336,ENG,232,GB,50.7927,-0.00652 50864,Peasedown Saint John,2336,ENG,232,GB,51.31667,-2.42417 50865,Peaslake,2336,ENG,232,GB,51.19156,-0.44658 50866,Peckham,2336,ENG,232,GB,51.47403,-0.06969 50868,Pegswood,2336,ENG,232,GB,55.1793,-1.64525 50869,Pelsall,2336,ENG,232,GB,52.6291,-1.96738 50870,Pelton,2336,ENG,232,GB,54.87305,-1.6095 50874,Pembury,2336,ENG,232,GB,51.14296,0.32187 50882,Penistone,2336,ENG,232,GB,53.52572,-1.63027 50883,Penkridge,2336,ENG,232,GB,52.72556,-2.1156 50887,Penrith,2336,ENG,232,GB,54.66579,-2.75757 50888,Penryn,2336,ENG,232,GB,50.16812,-5.10416 50889,Pensilva,2336,ENG,232,GB,50.50302,-4.41491 50894,Penzance,2336,ENG,232,GB,50.11861,-5.53715 50895,Perranporth,2336,ENG,232,GB,50.34377,-5.15558 50896,Perranwell,2336,ENG,232,GB,50.21333,-5.12053 50897,Pershore,2336,ENG,232,GB,52.11163,-2.07586 50900,Peterborough,2336,ENG,232,GB,52.58333,-0.25 50903,Peterlee,2336,ENG,232,GB,54.76032,-1.33649 50904,Petersfield,2336,ENG,232,GB,51.00495,-0.93375 50905,Petworth,2336,ENG,232,GB,50.98669,-0.61 50906,Pevensey,2336,ENG,232,GB,50.81966,0.33963 50907,Pevensey Bay,2336,ENG,232,GB,50.81242,0.34864 50908,Pewsey,2336,ENG,232,GB,51.33855,-1.76545 50909,Pickering,2336,ENG,232,GB,54.25,-0.76667 50910,Pilning,2336,ENG,232,GB,51.56337,-2.64264 50911,Pilsley,2336,ENG,232,GB,53.15,-1.36667 50912,Pimperne,2336,ENG,232,GB,50.88374,-2.1362 50913,Pinchbeck,2336,ENG,232,GB,52.81303,-0.16256 50914,Pinner,2336,ENG,232,GB,51.59384,-0.38216 50915,Pinxton,2336,ENG,232,GB,53.09062,-1.31767 50916,Pirton,2336,ENG,232,GB,51.9712,-0.33394 50919,Pitsea,2336,ENG,232,GB,51.56387,0.50859 50920,Pitstone,2336,ENG,232,GB,51.8283,-0.63987 50924,Plumpton Green,2336,ENG,232,GB,50.9342,-0.0612 50925,Plymouth,2336,ENG,232,GB,50.38333,-4.13333 50926,Plympton,2336,ENG,232,GB,50.39074,-4.06022 50927,Plymstock,2336,ENG,232,GB,50.35999,-4.09049 50928,Pocklington,2336,ENG,232,GB,53.93335,-0.78106 50929,Podington,2336,ENG,232,GB,52.25424,-0.62463 50931,Polesworth,2336,ENG,232,GB,52.61962,-1.61036 50932,Pollington,2336,ENG,232,GB,53.67093,-1.07237 50934,Polperro,2336,ENG,232,GB,50.3313,-4.5222 50935,Polzeath,2336,ENG,232,GB,50.56956,-4.91759 50938,Pontefract,2336,ENG,232,GB,53.69107,-1.31269 50939,Ponteland,2336,ENG,232,GB,55.05024,-1.74532 50940,Pontesbury,2336,ENG,232,GB,52.64826,-2.89035 50948,Pool,2336,ENG,232,GB,53.9,-1.61667 50949,Poole,2336,ENG,232,GB,50.73333,-1.96667 50950,Poringland,2336,ENG,232,GB,52.56756,1.34961 50951,Porlock,2336,ENG,232,GB,51.20889,-3.59556 50961,Porthleven,2336,ENG,232,GB,50.08618,-5.31501 50963,Portishead,2336,ENG,232,GB,51.48199,-2.76973 50965,Portland,2336,ENG,232,GB,50.56748,-2.44472 50969,Portscatho,2336,ENG,232,GB,50.17271,-4.97356 50970,Portslade,2336,ENG,232,GB,50.84286,-0.21608 50971,Portsmouth,2336,ENG,232,GB,50.8,-1.06667 50974,Potterne,2336,ENG,232,GB,51.32917,-2.00519 50975,Potters Bar,2336,ENG,232,GB,51.69353,-0.17835 50976,Potterspury,2336,ENG,232,GB,52.08288,-0.89676 50977,Potton,2336,ENG,232,GB,52.12911,-0.21561 50978,Poulton-le-Fylde,2336,ENG,232,GB,53.83333,-2.98333 50979,Poynton,2336,ENG,232,GB,53.35,-2.11667 50980,Prees,2336,ENG,232,GB,52.89689,-2.66401 50981,Preesall,2336,ENG,232,GB,53.9182,-2.96633 50982,Prenton,2336,ENG,232,GB,53.36762,-3.05479 50983,Prescot,2336,ENG,232,GB,53.42948,-2.80031 50985,Prestbury,2336,ENG,232,GB,53.28333,-2.15 50987,Preston,2336,ENG,232,GB,53.76282,-2.70452 50989,Prestwich,2336,ENG,232,GB,53.53333,-2.28333 50992,Princes Risborough,2336,ENG,232,GB,51.72549,-0.83144 50993,Princetown,2336,ENG,232,GB,50.54393,-3.98855 50994,Priston,2336,ENG,232,GB,51.34306,-2.43917 50995,Probus,2336,ENG,232,GB,50.29267,-4.95401 50996,Prudhoe,2336,ENG,232,GB,54.96154,-1.85168 50997,Publow,2336,ENG,232,GB,51.37877,-2.54351 50998,Puckeridge,2336,ENG,232,GB,51.89013,0.01309 50999,Pucklechurch,2336,ENG,232,GB,51.48583,-2.43389 51000,Puddletown,2336,ENG,232,GB,50.75,-2.35 51001,Pudsey,2336,ENG,232,GB,53.79538,-1.66134 51002,Pulborough,2336,ENG,232,GB,50.95753,-0.5128 51003,Pulloxhill,2336,ENG,232,GB,51.99487,-0.45316 51004,Purfleet,2336,ENG,232,GB,51.4839,0.24247 51005,Puriton,2336,ENG,232,GB,51.16933,-2.97198 51006,Purley,2336,ENG,232,GB,51.33678,-0.11201 51007,Purton,2336,ENG,232,GB,51.58889,-1.87419 51010,Queenborough,2336,ENG,232,GB,51.4176,0.74441 51011,Queensbury,2336,ENG,232,GB,53.76657,-1.84912 51013,Queniborough,2336,ENG,232,GB,52.70591,-1.04749 51014,Quorndon,2336,ENG,232,GB,52.74461,-1.17348 51015,Rackheath,2336,ENG,232,GB,52.66254,1.38032 51016,Radcliffe,2336,ENG,232,GB,53.56178,-2.32455 51017,Radcliffe on Trent,2336,ENG,232,GB,52.94802,-1.03855 51018,Radlett,2336,ENG,232,GB,51.68593,-0.31868 51019,Radley,2336,ENG,232,GB,51.68746,-1.24025 51020,Radstock,2336,ENG,232,GB,51.28862,-2.46003 51023,Rainford,2336,ENG,232,GB,53.50223,-2.78839 51024,Rainham,2336,ENG,232,GB,51.36323,0.60893 51025,Rainworth,2336,ENG,232,GB,53.11883,-1.11852 51026,Ramsbottom,2336,ENG,232,GB,53.64789,-2.31683 51027,Ramsbury,2336,ENG,232,GB,51.44373,-1.60257 51028,Ramsey,2336,ENG,232,GB,52.45058,-0.10932 51029,Ramsgate,2336,ENG,232,GB,51.33568,1.41797 51031,Ranskill,2336,ENG,232,GB,53.38281,-1.01402 51032,Rastrick,2336,ENG,232,GB,53.6921,-1.7883 51033,Ratby,2336,ENG,232,GB,52.64989,-1.24137 51037,Raunds,2336,ENG,232,GB,52.34428,-0.53657 51038,Ravenshead,2336,ENG,232,GB,53.0865,-1.16026 51039,Ravenstone,2336,ENG,232,GB,52.72111,-1.40582 51040,Rawcliffe,2336,ENG,232,GB,53.69777,-0.96319 51041,Rawmarsh,2336,ENG,232,GB,53.46062,-1.34437 51042,Rawtenstall,2336,ENG,232,GB,53.70076,-2.28442 51043,Rayleigh,2336,ENG,232,GB,51.58571,0.60459 51044,Rayne,2336,ENG,232,GB,51.86667,0.58333 51045,Reading,2336,ENG,232,GB,51.45625,-0.97113 51046,Redbourn,2336,ENG,232,GB,51.79896,-0.39594 51047,Redbourne,2336,ENG,232,GB,53.48728,-0.53567 51048,Redcar,2336,ENG,232,GB,54.61657,-1.05999 51049,Redcar and Cleveland,2336,ENG,232,GB,54.55,-1.0 51052,Redditch,2336,ENG,232,GB,52.3065,-1.94569 51053,Redhill,2336,ENG,232,GB,51.24048,-0.17044 51054,Redlynch,2336,ENG,232,GB,51.09861,-2.42667 51055,Redruth,2336,ENG,232,GB,50.23315,-5.22434 51056,Reedham,2336,ENG,232,GB,52.56054,1.57122 51057,Reepham,2336,ENG,232,GB,52.7632,1.11099 51058,Reigate,2336,ENG,232,GB,51.23736,-0.20582 51059,Rendlesham,2336,ENG,232,GB,52.12665,1.41536 51063,Repton,2336,ENG,232,GB,52.83983,-1.55061 51065,Retford,2336,ENG,232,GB,53.32213,-0.94315 51076,Riccall,2336,ENG,232,GB,53.83331,-1.0573 51077,Richmond,2336,ENG,232,GB,54.4036,-1.73434 51078,Rickinghall,2336,ENG,232,GB,52.33649,0.99272 51079,Rickmansworth,2336,ENG,232,GB,51.63898,-0.47718 51080,Ridgmont,2336,ENG,232,GB,52.01532,-0.57871 51081,Rillington,2336,ENG,232,GB,54.15779,-0.69494 51082,Ringmer,2336,ENG,232,GB,50.89264,0.05472 51083,Ringstead,2336,ENG,232,GB,52.36528,-0.5549 51084,Ringwood,2336,ENG,232,GB,50.84541,-1.78871 51085,Ripley,2336,ENG,232,GB,53.03333,-1.4 51086,Ripon,2336,ENG,232,GB,54.13579,-1.52826 51087,Ripponden,2336,ENG,232,GB,53.67449,-1.94183 51089,Riseley,2336,ENG,232,GB,52.25213,-0.47928 51090,Rishton,2336,ENG,232,GB,53.76806,-2.41444 51091,Roade,2336,ENG,232,GB,52.15824,-0.89745 51092,Robertsbridge,2336,ENG,232,GB,50.98569,0.47253 51093,Rochdale,2336,ENG,232,GB,53.61766,-2.1552 51094,Roche,2336,ENG,232,GB,50.40808,-4.83373 51095,Rochester,2336,ENG,232,GB,51.38764,0.50546 51096,Rochford,2336,ENG,232,GB,51.58198,0.70673 51097,Rock,2336,ENG,232,GB,50.54978,-4.90462 51098,Rode,2336,ENG,232,GB,51.2839,-2.28141 51099,Rode Heath,2336,ENG,232,GB,53.11387,-2.29186 51101,Romford,2336,ENG,232,GB,51.57515,0.18582 51102,Romney Marsh,2336,ENG,232,GB,51.02299,0.91504 51103,Romsey,2336,ENG,232,GB,50.98906,-1.49989 51104,Romsley,2336,ENG,232,GB,52.41996,-2.05695 51105,Roos,2336,ENG,232,GB,53.75292,-0.04463 51110,Ross on Wye,2336,ENG,232,GB,51.91667,-2.56667 51111,Rossendale,2336,ENG,232,GB,53.68456,-2.2769 51115,Rothbury,2336,ENG,232,GB,55.31059,-1.90845 51116,Rotherfield Peppard,2336,ENG,232,GB,51.53064,-0.97847 51117,Rotherham,2336,ENG,232,GB,53.41667,-1.25 51121,Rothley,2336,ENG,232,GB,52.70916,-1.13739 51122,Rothwell,2336,ENG,232,GB,52.41667,-0.8 51123,Rottingdean,2336,ENG,232,GB,50.80984,-0.05939 51124,Rowde,2336,ENG,232,GB,51.36325,-2.03098 51125,Rowhedge,2336,ENG,232,GB,51.85738,0.94534 51126,Rowlands Gill,2336,ENG,232,GB,54.91922,-1.74489 51127,Rowley Regis,2336,ENG,232,GB,52.48292,-2.04376 51128,Roxton,2336,ENG,232,GB,52.17756,-0.31594 51129,Royal Borough of Windsor and Maidenhead,2336,ENG,232,GB,51.46667,-0.66667 51130,Royal Leamington Spa,2336,ENG,232,GB,52.2852,-1.52 51131,Royal Tunbridge Wells,2336,ENG,232,GB,51.13321,0.26256 51132,Royal Wootton Bassett,2336,ENG,232,GB,51.5419,-1.9045 51133,Roydon,2336,ENG,232,GB,51.7718,0.0403 51134,Royston,2336,ENG,232,GB,52.04832,-0.02438 51135,Royton,2336,ENG,232,GB,53.56507,-2.12267 51137,Ruardean,2336,ENG,232,GB,51.85501,-2.55054 51138,Ruddington,2336,ENG,232,GB,52.89254,-1.14953 51139,Rudgwick,2336,ENG,232,GB,51.08735,-0.45164 51140,Rufford,2336,ENG,232,GB,53.63375,-2.81662 51141,Rugby,2336,ENG,232,GB,52.37092,-1.26417 51142,Rugeley,2336,ENG,232,GB,52.7593,-1.93694 51143,Ruislip,2336,ENG,232,GB,51.57344,-0.42341 51144,Runcorn,2336,ENG,232,GB,53.34174,-2.73124 51145,Rushden,2336,ENG,232,GB,52.28927,-0.60184 51146,Ruskington,2336,ENG,232,GB,53.04544,-0.38692 51147,Rusthall,2336,ENG,232,GB,51.13643,0.22931 51148,Rustington,2336,ENG,232,GB,50.81027,-0.50674 51151,Ruyton-XI-Towns,2336,ENG,232,GB,52.79555,-2.90318 51152,Ryde,2336,ENG,232,GB,50.72999,-1.1621 51153,Rye,2336,ENG,232,GB,50.95114,0.7337 51154,Ryhall,2336,ENG,232,GB,52.68585,-0.46846 51155,Ryhill,2336,ENG,232,GB,53.62204,-1.41071 51156,Ryhope,2336,ENG,232,GB,54.87139,-1.37 51157,Ryton,2336,ENG,232,GB,52.61667,-2.35 51158,Ryton on Dunsmore,2336,ENG,232,GB,52.36667,-1.43333 51159,Sabden,2336,ENG,232,GB,53.83355,-2.33728 51160,Sacriston,2336,ENG,232,GB,54.81769,-1.6241 51161,Saffron Walden,2336,ENG,232,GB,52.02337,0.24234 51162,Saint Agnes,2336,ENG,232,GB,50.31278,-5.20456 51165,Saint Bees,2336,ENG,232,GB,54.49183,-3.58987 51168,Saint Columb Major,2336,ENG,232,GB,50.43163,-4.94336 51171,Saint Dennis,2336,ENG,232,GB,50.38333,-4.88333 51172,Saint Leonards-on-Sea,2336,ENG,232,GB,50.85565,0.5452 51174,Saint Neots,2336,ENG,232,GB,52.21667,-0.26667 51175,Saint Osyth,2336,ENG,232,GB,51.8,1.08333 51176,Saint Peters,2336,ENG,232,GB,51.36667,1.41667 51177,Saint Stephen,2336,ENG,232,GB,50.34469,-4.89973 51179,Salcombe,2336,ENG,232,GB,50.23743,-3.76874 51180,Sale,2336,ENG,232,GB,53.42519,-2.32443 51181,Salford,2336,ENG,232,GB,53.48771,-2.29042 51182,Salfords,2336,ENG,232,GB,51.2043,-0.16947 51184,Salisbury,2336,ENG,232,GB,51.06931,-1.79569 51186,Saltash,2336,ENG,232,GB,50.40959,-4.22514 51187,Saltburn-by-the-Sea,2336,ENG,232,GB,54.58237,-0.97367 51189,Saltford,2336,ENG,232,GB,51.40139,-2.45944 51190,Sampford Peverell,2336,ENG,232,GB,50.91945,-3.38081 51191,Sandbach,2336,ENG,232,GB,53.14515,-2.36251 51193,Sandford,2336,ENG,232,GB,51.33228,-2.83122 51194,Sandown,2336,ENG,232,GB,50.65158,-1.16103 51195,Sandwell,2336,ENG,232,GB,52.5,-2.0 51196,Sandwich,2336,ENG,232,GB,51.27223,1.33776 51198,Sandy,2336,ENG,232,GB,52.12927,-0.28925 51200,Sapcote,2336,ENG,232,GB,52.53707,-1.279 51201,Saughall,2336,ENG,232,GB,53.22618,-2.95649 51203,Sawbridgeworth,2336,ENG,232,GB,51.81667,0.15 51204,Sawston,2336,ENG,232,GB,52.12089,0.16943 51205,Sawtry,2336,ENG,232,GB,52.43984,-0.28422 51206,Saxilby,2336,ENG,232,GB,53.26746,-0.66253 51207,Saxmundham,2336,ENG,232,GB,52.21497,1.48805 51208,Scalby,2336,ENG,232,GB,53.76667,-0.71667 51210,Scarborough,2336,ENG,232,GB,54.27966,-0.40443 51211,Scarcroft,2336,ENG,232,GB,53.86667,-1.45 51212,Scawby,2336,ENG,232,GB,53.53787,-0.54085 51213,Scholes,2336,ENG,232,GB,53.82346,-1.42805 51214,Scole,2336,ENG,232,GB,52.36706,1.15674 51216,Scorton,2336,ENG,232,GB,54.39785,-1.61276 51217,Scotby,2336,ENG,232,GB,54.89004,-2.87464 51218,Scotter,2336,ENG,232,GB,53.49652,-0.67429 51219,Scunthorpe,2336,ENG,232,GB,53.57905,-0.65437 51221,Seaford,2336,ENG,232,GB,50.77141,0.10268 51222,Seaham,2336,ENG,232,GB,54.83903,-1.34575 51223,Seahouses,2336,ENG,232,GB,55.58063,-1.65497 51224,Seascale,2336,ENG,232,GB,54.39831,-3.47961 51225,Seaton,2336,ENG,232,GB,52.57489,-0.66759 51226,Seaton Delaval,2336,ENG,232,GB,55.07196,-1.52609 51227,Seaview,2336,ENG,232,GB,50.71956,-1.11164 51228,Sedbergh,2336,ENG,232,GB,54.32123,-2.52514 51229,Sedgefield,2336,ENG,232,GB,54.65329,-1.44952 51230,Seend,2336,ENG,232,GB,51.34806,-2.08472 51231,Seer Green,2336,ENG,232,GB,51.61796,-0.60592 51232,Sefton,2336,ENG,232,GB,53.5,-3.0 51233,Seghill,2336,ENG,232,GB,55.06225,-1.55027 51234,Selby,2336,ENG,232,GB,53.78333,-1.06667 51236,Selsey,2336,ENG,232,GB,50.73501,-0.78979 51237,Send,2336,ENG,232,GB,51.28875,-0.52666 51238,Settle,2336,ENG,232,GB,54.06865,-2.2772 51240,Sevenoaks,2336,ENG,232,GB,51.27266,0.18883 51241,Severn Beach,2336,ENG,232,GB,51.56036,-2.66279 51242,Shadoxhurst,2336,ENG,232,GB,51.10797,0.81917 51243,Shadwell,2336,ENG,232,GB,53.8546,-1.4726 51244,Shaftesbury,2336,ENG,232,GB,51.00528,-2.19333 51245,Shalbourne,2336,ENG,232,GB,51.36358,-1.55053 51246,Shalfleet,2336,ENG,232,GB,50.70113,-1.42007 51247,Shanklin,2336,ENG,232,GB,50.62613,-1.1785 51248,Shap,2336,ENG,232,GB,54.53149,-2.67551 51249,Sharlston,2336,ENG,232,GB,53.66956,-1.41294 51250,Sharnbrook,2336,ENG,232,GB,52.22606,-0.54425 51251,Sharpness,2336,ENG,232,GB,51.71972,-2.4775 51252,Shaw,2336,ENG,232,GB,53.56667,-2.08333 51253,Shawbury,2336,ENG,232,GB,52.79098,-2.66183 51254,Sheerness,2336,ENG,232,GB,51.44042,0.76252 51255,Sheffield,2336,ENG,232,GB,53.38297,-1.4659 51256,Shefford,2336,ENG,232,GB,52.0387,-0.33399 51257,Shelley,2336,ENG,232,GB,53.6,-1.68333 51258,Shenley,2336,ENG,232,GB,51.69054,-0.28067 51259,Shenstone,2336,ENG,232,GB,52.63802,-1.84147 51260,Shepherdswell,2336,ENG,232,GB,51.18713,1.23049 51261,Shepley,2336,ENG,232,GB,53.58333,-1.71667 51262,Shepperton,2336,ENG,232,GB,51.39546,-0.44889 51263,Shepshed,2336,ENG,232,GB,52.7657,-1.29021 51264,Shepton Mallet,2336,ENG,232,GB,51.18972,-2.54722 51265,Sherborne,2336,ENG,232,GB,50.94599,-2.51776 51266,Sherborne St John,2336,ENG,232,GB,51.29705,-1.11387 51267,Sherburn,2336,ENG,232,GB,54.77606,-1.50474 51268,Sherburn Hill,2336,ENG,232,GB,54.7727,-1.47985 51269,Sherburn in Elmet,2336,ENG,232,GB,53.79519,-1.2466 51270,Sheriff Hutton,2336,ENG,232,GB,54.08904,-1.00639 51271,Sheringham,2336,ENG,232,GB,52.94078,1.20931 51272,Sherington,2336,ENG,232,GB,52.11172,-0.69973 51273,Sherston,2336,ENG,232,GB,51.57205,-2.21278 51275,Shevington,2336,ENG,232,GB,53.57236,-2.69316 51277,Shifnal,2336,ENG,232,GB,52.67043,-2.37248 51278,Shilbottle,2336,ENG,232,GB,55.37099,-1.6882 51279,Shildon,2336,ENG,232,GB,54.62997,-1.64295 51280,Shillingstone,2336,ENG,232,GB,50.89567,-2.24495 51281,Shillington,2336,ENG,232,GB,51.99344,-0.36006 51282,Shipdham,2336,ENG,232,GB,52.62923,0.88577 51283,Shipham,2336,ENG,232,GB,51.31428,-2.8001 51284,Shipley,2336,ENG,232,GB,53.83333,-1.76667 51285,Shipston on Stour,2336,ENG,232,GB,52.06057,-1.62778 51286,Shipton under Wychwood,2336,ENG,232,GB,51.86035,-1.59847 51287,Shirebrook,2336,ENG,232,GB,53.20333,-1.21336 51288,Shiremoor,2336,ENG,232,GB,55.03535,-1.5095 51289,Shirland,2336,ENG,232,GB,53.12155,-1.40464 51290,Shirley,2336,ENG,232,GB,52.41074,-1.81952 51291,Shoreham-by-Sea,2336,ENG,232,GB,50.83413,-0.27431 51292,Shortlands,2336,ENG,232,GB,51.39914,0.0044 51293,Shotley Gate,2336,ENG,232,GB,51.95791,1.26871 51295,Shrewsbury,2336,ENG,232,GB,52.71009,-2.75208 51296,Shrewton,2336,ENG,232,GB,51.19194,-1.90264 51297,Shrivenham,2336,ENG,232,GB,51.59853,-1.65461 51298,Shropshire,2336,ENG,232,GB,52.66667,-2.75 51299,Shurdington,2336,ENG,232,GB,51.86264,-2.1206 51300,Sible Hedingham,2336,ENG,232,GB,51.97772,0.59262 51301,Sibsey,2336,ENG,232,GB,53.03858,0.01579 51302,Sidcup,2336,ENG,232,GB,51.42619,0.1036 51303,Sidmouth,2336,ENG,232,GB,50.69094,-3.2397 51304,Sileby,2336,ENG,232,GB,52.73286,-1.10773 51305,Silkstone,2336,ENG,232,GB,53.54808,-1.56381 51306,Silloth,2336,ENG,232,GB,54.8687,-3.38448 51307,Silsden,2336,ENG,232,GB,53.91443,-1.93802 51308,Silsoe,2336,ENG,232,GB,52.00854,-0.42484 51309,Silver End,2336,ENG,232,GB,51.84734,0.62399 51310,Silverdale,2336,ENG,232,GB,54.16667,-2.81667 51311,Silverstone,2336,ENG,232,GB,52.09216,-1.02602 51312,Silverton,2336,ENG,232,GB,50.81667,-3.48333 51313,Sinfin,2336,ENG,232,GB,52.88157,-1.48681 51316,Sissinghurst,2336,ENG,232,GB,51.10905,0.56 51317,Sittingbourne,2336,ENG,232,GB,51.34128,0.73282 51318,Skegness,2336,ENG,232,GB,53.14362,0.3363 51319,Skellingthorpe,2336,ENG,232,GB,53.23531,-0.61905 51320,Skelmersdale,2336,ENG,232,GB,53.55024,-2.77348 51322,Skelton,2336,ENG,232,GB,53.72521,-0.84187 51323,Skidby,2336,ENG,232,GB,53.78921,-0.46131 51324,Skinningrove,2336,ENG,232,GB,54.56908,-0.89869 51325,Skipsea,2336,ENG,232,GB,53.97674,-0.22084 51326,Skipton,2336,ENG,232,GB,53.96144,-2.01676 51327,Slaley,2336,ENG,232,GB,54.91368,-2.03711 51329,Sleaford,2336,ENG,232,GB,52.99826,-0.40941 51330,Sleights,2336,ENG,232,GB,54.45506,-0.66484 51331,Slinfold,2336,ENG,232,GB,51.07209,-0.40658 51332,Slough,2336,ENG,232,GB,51.50949,-0.59541 51333,Smethwick,2336,ENG,232,GB,52.49268,-1.96745 51335,Snaith,2336,ENG,232,GB,53.69112,-1.02859 51336,Snettisham,2336,ENG,232,GB,52.87882,0.50099 51337,Snodland,2336,ENG,232,GB,51.32971,0.44305 51338,Soham,2336,ENG,232,GB,52.33543,0.33654 51339,Solihull,2336,ENG,232,GB,52.41667,-1.75 51340,Somerset,2336,ENG,232,GB,51.08333,-3.0 51341,Somersham,2336,ENG,232,GB,52.38333,0.0 51342,Somerton,2336,ENG,232,GB,51.95421,-1.27613 51343,Sonning Common,2336,ENG,232,GB,51.51873,-0.97753 51345,South Benfleet,2336,ENG,232,GB,51.55295,0.55962 51346,South Brent,2336,ENG,232,GB,50.42654,-3.83426 51347,South Cave,2336,ENG,232,GB,53.76987,-0.60107 51348,South Cerney,2336,ENG,232,GB,51.67319,-1.93097 51349,South Chailey,2336,ENG,232,GB,50.93831,-0.02105 51350,South Collingham,2336,ENG,232,GB,53.13333,-0.76667 51351,South Croydon,2336,ENG,232,GB,51.36217,-0.09421 51352,South Elmsall,2336,ENG,232,GB,53.59709,-1.28034 51353,South Gloucestershire,2336,ENG,232,GB,51.5,-2.41667 51354,South Harting,2336,ENG,232,GB,50.96924,-0.88388 51355,South Hayling,2336,ENG,232,GB,50.78773,-0.97697 51356,South Hetton,2336,ENG,232,GB,54.79906,-1.40671 51358,South Littleton,2336,ENG,232,GB,52.11416,-1.89014 51359,South Luffenham,2336,ENG,232,GB,52.60857,-0.61232 51360,South Milford,2336,ENG,232,GB,53.77672,-1.24609 51361,South Molton,2336,ENG,232,GB,51.01667,-3.83333 51362,South Nutfield,2336,ENG,232,GB,51.01667,-0.13333 51363,South Ockendon,2336,ENG,232,GB,51.50799,0.28333 51364,South Petherton,2336,ENG,232,GB,50.94829,-2.80708 51365,South Shields,2336,ENG,232,GB,54.99859,-1.4323 51366,South Tyneside,2336,ENG,232,GB,54.95,-1.41667 51367,South Wingfield,2336,ENG,232,GB,53.09593,-1.43998 51368,South Witham,2336,ENG,232,GB,52.76476,-0.62811 51369,Southall,2336,ENG,232,GB,51.50896,-0.3713 51370,Southam,2336,ENG,232,GB,52.25266,-1.3884 51371,Southampton,2336,ENG,232,GB,50.91667,-1.38333 51372,Southchurch Village,2336,ENG,232,GB,51.54049,0.72935 51373,Southend-on-Sea,2336,ENG,232,GB,51.53782,0.71433 51374,Southery,2336,ENG,232,GB,52.52714,0.38783 51376,Southminster,2336,ENG,232,GB,51.66228,0.82968 51377,Southowram,2336,ENG,232,GB,53.70988,-1.83181 51378,Southport,2336,ENG,232,GB,53.64581,-3.01008 51379,Southsea,2336,ENG,232,GB,50.79205,-1.08593 51380,Southwater,2336,ENG,232,GB,51.02369,-0.35173 51381,Southwell,2336,ENG,232,GB,53.07804,-0.95538 51382,Southwick,2336,ENG,232,GB,51.29694,-2.2325 51383,Southwold,2336,ENG,232,GB,52.32721,1.68017 51384,Sowerby Bridge,2336,ENG,232,GB,53.70903,-1.90929 51385,Spalding,2336,ENG,232,GB,52.78709,-0.15141 51386,Speldhurst,2336,ENG,232,GB,51.15076,0.21947 51387,Spennymoor,2336,ENG,232,GB,54.6988,-1.60229 51388,Spilsby,2336,ENG,232,GB,53.17363,0.09373 51390,Spixworth,2336,ENG,232,GB,52.68529,1.32027 51391,Spofforth,2336,ENG,232,GB,53.95427,-1.44848 51392,Spratton,2336,ENG,232,GB,52.32447,-0.95386 51394,Sproatley,2336,ENG,232,GB,53.79379,-0.1913 51395,St Albans,2336,ENG,232,GB,51.75,-0.33333 51396,St Austell,2336,ENG,232,GB,50.3425,-4.77442 51397,St Helens,2336,ENG,232,GB,53.45,-2.73333 51398,St Ives,2336,ENG,232,GB,50.20861,-5.4875 51399,St Just,2336,ENG,232,GB,50.12379,-5.68065 51400,St Leonards,2336,ENG,232,GB,50.83077,-1.84377 51401,St Marys,2336,ENG,232,GB,49.91719,-6.29517 51402,St Marys Bay,2336,ENG,232,GB,51.01003,0.9771 51403,St. Day,2336,ENG,232,GB,50.23958,-5.18572 51404,St. Helens,2336,ENG,232,GB,50.69688,-1.11159 51405,Stafford,2336,ENG,232,GB,52.80521,-2.11636 51406,Staffordshire,2336,ENG,232,GB,52.83333,-2.0 51407,Stagsden,2336,ENG,232,GB,52.13046,-0.56678 51408,Stainburn,2336,ENG,232,GB,53.93333,-1.61667 51409,Staindrop,2336,ENG,232,GB,54.58102,-1.80708 51410,Staines,2336,ENG,232,GB,51.43092,-0.50606 51411,Stainforth,2336,ENG,232,GB,53.6,-1.03333 51412,Stakeford,2336,ENG,232,GB,55.1611,-1.57529 51413,Stalbridge,2336,ENG,232,GB,50.95807,-2.37548 51414,Stalham,2336,ENG,232,GB,52.77079,1.51783 51415,Stallingborough,2336,ENG,232,GB,53.58675,-0.18489 51416,Stalybridge,2336,ENG,232,GB,53.48414,-2.05908 51417,Stamford,2336,ENG,232,GB,52.65,-0.48333 51418,Stamford Bridge,2336,ENG,232,GB,53.9885,-0.91547 51419,Stanbridge,2336,ENG,232,GB,51.90864,-0.59815 51420,Standlake,2336,ENG,232,GB,51.7269,-1.42436 51421,Standon,2336,ENG,232,GB,52.91667,-2.28333 51422,Stanford in the Vale,2336,ENG,232,GB,51.63969,-1.50652 51423,Stanford-le-Hope,2336,ENG,232,GB,51.52274,0.43422 51424,Stanhope,2336,ENG,232,GB,54.75,-2.01667 51426,Stanley,2336,ENG,232,GB,54.86796,-1.69846 51427,Stanmore,2336,ENG,232,GB,51.61667,-0.31667 51428,Stannington,2336,ENG,232,GB,55.10862,-1.66855 51429,Stansted Mountfitchet,2336,ENG,232,GB,51.9,0.2 51430,Stanwick,2336,ENG,232,GB,52.33198,-0.56348 51431,Staplehurst,2336,ENG,232,GB,51.1611,0.55249 51432,Starcross,2336,ENG,232,GB,50.62734,-3.44797 51433,Startforth,2336,ENG,232,GB,54.53851,-1.93016 51434,Staveley,2336,ENG,232,GB,53.26667,-1.35 51435,Steeple Bumpstead,2336,ENG,232,GB,52.04346,0.44808 51436,Steeple Claydon,2336,ENG,232,GB,51.93643,-0.98328 51437,Steeton,2336,ENG,232,GB,53.88333,-1.95 51440,Stevenage,2336,ENG,232,GB,51.90224,-0.20256 51442,Steventon,2336,ENG,232,GB,51.62473,-1.32145 51443,Stevington,2336,ENG,232,GB,52.16848,-0.55515 51444,Stewartby,2336,ENG,232,GB,52.07044,-0.5149 51446,Stewkley,2336,ENG,232,GB,51.92744,-0.76381 51447,Steyning,2336,ENG,232,GB,50.88744,-0.32787 51449,Stickney,2336,ENG,232,GB,53.08949,0.00545 51450,Stillington,2336,ENG,232,GB,54.60529,-1.42191 51451,Stilton,2336,ENG,232,GB,52.48788,-0.28894 51453,Stithians,2336,ENG,232,GB,50.1887,-5.17807 51454,Stock,2336,ENG,232,GB,51.66351,0.44263 51455,Stockport,2336,ENG,232,GB,53.40979,-2.15761 51456,Stocksbridge,2336,ENG,232,GB,53.48249,-1.59373 51457,Stocksfield,2336,ENG,232,GB,54.94026,-1.90398 51458,Stockton,2336,ENG,232,GB,52.27181,-1.36055 51459,Stockton Heath,2336,ENG,232,GB,53.37084,-2.57406 51460,Stockton-on-Tees,2336,ENG,232,GB,54.55,-1.33333 51461,Stoke Ferry,2336,ENG,232,GB,52.57051,0.5132 51462,Stoke Gabriel,2336,ENG,232,GB,50.40328,-3.62111 51463,Stoke Gifford,2336,ENG,232,GB,51.51686,-2.54053 51464,Stoke Golding,2336,ENG,232,GB,52.5706,-1.41124 51465,Stoke Goldington,2336,ENG,232,GB,52.13133,-0.77814 51466,Stoke Poges,2336,ENG,232,GB,51.54441,-0.5888 51467,Stoke Prior,2336,ENG,232,GB,52.29978,-2.08034 51468,Stoke-on-Trent,2336,ENG,232,GB,53.00415,-2.18538 51469,Stoke-sub-Hamdon,2336,ENG,232,GB,50.95397,-2.74971 51470,Stokenchurch,2336,ENG,232,GB,51.65831,-0.8974 51471,Stokesley,2336,ENG,232,GB,54.46998,-1.1933 51472,Stone,2336,ENG,232,GB,52.9059,-2.15409 51474,Stonehouse,2336,ENG,232,GB,51.75,-2.28333 51476,Stonesfield,2336,ENG,232,GB,51.85142,-1.4296 51477,Stoney Stanton,2336,ENG,232,GB,52.54839,-1.2793 51480,Storrington,2336,ENG,232,GB,50.91765,-0.45473 51481,Stotfold,2336,ENG,232,GB,52.01632,-0.23209 51482,Stourbridge,2336,ENG,232,GB,52.45608,-2.14317 51483,Stourport-on-Severn,2336,ENG,232,GB,52.33976,-2.28034 51484,Stow on the Wold,2336,ENG,232,GB,51.93008,-1.72382 51485,Stowmarket,2336,ENG,232,GB,52.18893,0.99774 51487,Stradbroke,2336,ENG,232,GB,52.31819,1.27278 51489,Stratfield Mortimer,2336,ENG,232,GB,51.37339,-1.03495 51490,Stratford-upon-Avon,2336,ENG,232,GB,52.19166,-1.70734 51494,Stratton,2336,ENG,232,GB,51.73394,-1.97968 51495,Streatley,2336,ENG,232,GB,51.94628,-0.44374 51496,Street,2336,ENG,232,GB,51.12472,-2.74 51497,Streetly,2336,ENG,232,GB,52.58333,-1.88333 51498,Strensall,2336,ENG,232,GB,54.03999,-1.03512 51499,Stretford,2336,ENG,232,GB,53.45,-2.31667 51500,Stretham,2336,ENG,232,GB,52.34709,0.21852 51502,Strood,2336,ENG,232,GB,51.39323,0.47713 51503,Stroud,2336,ENG,232,GB,51.75,-2.2 51504,Studley,2336,ENG,232,GB,52.27026,-1.89188 51505,Sturminster Marshall,2336,ENG,232,GB,50.79968,-2.07615 51506,Sturminster Newton,2336,ENG,232,GB,50.92681,-2.30515 51507,Sturry,2336,ENG,232,GB,51.30132,1.12155 51508,Sudbrooke,2336,ENG,232,GB,53.26667,-0.45 51509,Sudbury,2336,ENG,232,GB,52.0389,0.73117 51510,Suffolk,2336,ENG,232,GB,52.16667,1.0 51511,Sunbury-on-Thames,2336,ENG,232,GB,51.40424,-0.41817 51512,Sunderland,2336,ENG,232,GB,54.90465,-1.38222 51513,Sundridge,2336,ENG,232,GB,51.27797,0.12231 51514,Surbiton,2336,ENG,232,GB,51.39148,-0.29825 51515,Surrey,2336,ENG,232,GB,51.25,-0.33333 51516,Sutterton,2336,ENG,232,GB,52.90269,-0.09235 51517,Sutton,2336,ENG,232,GB,51.35,-0.2 51518,Sutton Benger,2336,ENG,232,GB,51.50685,-2.08015 51519,Sutton Bonington,2336,ENG,232,GB,52.82144,-1.24969 51520,Sutton Bridge,2336,ENG,232,GB,52.76995,0.1855 51521,Sutton Coldfield,2336,ENG,232,GB,52.56667,-1.81667 51522,Sutton Courtenay,2336,ENG,232,GB,51.6413,-1.27682 51523,Sutton in Ashfield,2336,ENG,232,GB,53.12542,-1.26135 51524,Sutton on Trent,2336,ENG,232,GB,53.18437,-0.81091 51525,Sutton upon Derwent,2336,ENG,232,GB,53.91314,-0.92465 51526,Swadlincote,2336,ENG,232,GB,52.774,-1.55744 51527,Swaffham,2336,ENG,232,GB,52.6477,0.6857 51528,Swanage,2336,ENG,232,GB,50.60923,-1.9626 51529,Swanley,2336,ENG,232,GB,51.39717,0.17321 51530,Swanmore,2336,ENG,232,GB,50.94404,-1.18021 51531,Swanscombe,2336,ENG,232,GB,51.44713,0.31028 51533,Swarthmoor,2336,ENG,232,GB,54.18466,-3.11707 51534,Swavesey,2336,ENG,232,GB,52.30155,-0.00476 51535,Sway,2336,ENG,232,GB,50.78685,-1.60294 51536,Swillington,2336,ENG,232,GB,53.76846,-1.4175 51537,Swindon,2336,ENG,232,GB,51.55797,-1.78116 51538,Swineshead,2336,ENG,232,GB,52.94543,-0.15947 51539,Swinton,2336,ENG,232,GB,53.5,-2.35 51541,Syston,2336,ENG,232,GB,52.68333,-1.06667 51542,Sywell,2336,ENG,232,GB,52.29856,-0.79728 51543,Tadcaster,2336,ENG,232,GB,53.88322,-1.26344 51544,Tadley,2336,ENG,232,GB,51.35045,-1.1285 51545,Tadworth,2336,ENG,232,GB,51.29169,-0.23582 51548,Takeley,2336,ENG,232,GB,51.87089,0.26583 51552,Tamworth,2336,ENG,232,GB,52.63399,-1.69587 51554,Tanfield,2336,ENG,232,GB,54.89288,-1.71316 51555,Tangmere,2336,ENG,232,GB,50.85131,-0.71633 51556,Tankerton,2336,ENG,232,GB,51.3637,1.04913 51557,Tansley,2336,ENG,232,GB,53.13197,-1.51882 51560,Tarleton,2336,ENG,232,GB,53.68005,-2.82968 51561,Tarporley,2336,ENG,232,GB,53.15918,-2.66867 51562,Tarvin,2336,ENG,232,GB,53.19737,-2.76548 51563,Tattenhall,2336,ENG,232,GB,53.12188,-2.76746 51564,Taunton,2336,ENG,232,GB,51.01494,-3.10293 51565,Tavistock,2336,ENG,232,GB,50.54944,-4.14418 51567,Teddington,2336,ENG,232,GB,51.42233,-0.33053 51568,Teignmouth,2336,ENG,232,GB,50.54768,-3.49637 51569,Telford,2336,ENG,232,GB,52.67659,-2.44926 51570,Telford and Wrekin,2336,ENG,232,GB,52.75,-2.5 51571,Templecombe,2336,ENG,232,GB,50.99908,-2.41578 51574,Tempsford,2336,ENG,232,GB,52.17051,-0.29586 51575,Tenbury Wells,2336,ENG,232,GB,52.31077,-2.59621 51577,Tenterden,2336,ENG,232,GB,51.06845,0.68776 51578,Terrington Saint John,2336,ENG,232,GB,52.70546,0.27389 51579,Terrington St Clement,2336,ENG,232,GB,52.75813,0.29732 51580,Tetbury,2336,ENG,232,GB,51.63944,-2.16222 51581,Tetney,2336,ENG,232,GB,53.49239,-0.02106 51582,Tewkesbury,2336,ENG,232,GB,51.99244,-2.1601 51583,Teynham,2336,ENG,232,GB,51.33045,0.80526 51584,Thame,2336,ENG,232,GB,51.7484,-0.97624 51585,Thames Ditton,2336,ENG,232,GB,51.38964,-0.33928 51586,Thatcham,2336,ENG,232,GB,51.40366,-1.26049 51587,Thaxted,2336,ENG,232,GB,51.95326,0.34478 51588,The Boldons,2336,ENG,232,GB,54.9426,-1.45349 51590,Theale,2336,ENG,232,GB,51.43694,-1.077 51591,Thetford,2336,ENG,232,GB,52.41667,0.75 51592,Theydon Bois,2336,ENG,232,GB,51.67426,0.09781 51593,Thirsk,2336,ENG,232,GB,54.23298,-1.34411 51594,Thornaby-on-Tees,2336,ENG,232,GB,54.53333,-1.3 51595,Thornbury,2336,ENG,232,GB,51.60889,-2.52028 51596,Thorne,2336,ENG,232,GB,53.61122,-0.96308 51597,Thorner,2336,ENG,232,GB,53.86093,-1.42676 51598,Thorney,2336,ENG,232,GB,52.62147,-0.10815 51599,Thorngumbald,2336,ENG,232,GB,53.721,-0.17175 51601,Thornley,2336,ENG,232,GB,54.75,-1.43333 51604,Thornton Dale,2336,ENG,232,GB,54.23528,-0.72016 51605,Thornton Heath,2336,ENG,232,GB,51.39884,-0.09872 51606,Thornton-Cleveleys,2336,ENG,232,GB,53.87389,-3.02244 51607,Thorp Arch,2336,ENG,232,GB,53.91584,-1.3198 51608,Thorpe Hamlet,2336,ENG,232,GB,52.6277,1.31175 51609,Thorpe le Soken,2336,ENG,232,GB,51.85603,1.1658 51610,Thrapston,2336,ENG,232,GB,52.39675,-0.5392 51612,Three Legged Cross,2336,ENG,232,GB,50.85,-1.88333 51613,Thurlby,2336,ENG,232,GB,52.73879,-0.37868 51614,Thurlton,2336,ENG,232,GB,52.52881,1.55617 51616,Thurston,2336,ENG,232,GB,52.25244,0.80749 51617,Tibshelf,2336,ENG,232,GB,53.14436,-1.34056 51618,Ticehurst,2336,ENG,232,GB,51.04652,0.4086 51619,Tickhill,2336,ENG,232,GB,53.43194,-1.10859 51620,Tickton,2336,ENG,232,GB,53.86233,-0.3833 51621,Tideswell,2336,ENG,232,GB,53.27807,-1.77292 51622,Tidworth,2336,ENG,232,GB,51.23142,-1.66324 51623,Tilbury,2336,ENG,232,GB,51.46248,0.35856 51625,Timperley,2336,ENG,232,GB,53.4,-2.33333 51626,Timsbury,2336,ENG,232,GB,51.32444,-2.47917 51627,Tingewick,2336,ENG,232,GB,51.99031,-1.04804 51628,Tintagel,2336,ENG,232,GB,50.66317,-4.75047 51630,Tipton,2336,ENG,232,GB,52.52956,-2.06773 51631,Tiptree,2336,ENG,232,GB,51.8123,0.7454 51632,Tisbury,2336,ENG,232,GB,51.06283,-2.08058 51633,Tiverton,2336,ENG,232,GB,50.90241,-3.49232 51635,Toddington,2336,ENG,232,GB,51.94922,-0.53277 51636,Todmorden,2336,ENG,232,GB,53.71434,-2.09701 51637,Todwick,2336,ENG,232,GB,53.35373,-1.25673 51638,Tollesbury,2336,ENG,232,GB,51.75913,0.83462 51639,Tolleshunt Knights,2336,ENG,232,GB,51.79869,0.77651 51640,Tonbridge,2336,ENG,232,GB,51.19532,0.27363 51643,Topsham,2336,ENG,232,GB,50.68596,-3.46696 51646,Torpoint,2336,ENG,232,GB,50.37505,-4.19566 51647,Torquay,2336,ENG,232,GB,50.46198,-3.52522 51649,Totnes,2336,ENG,232,GB,50.43107,-3.6843 51650,Totternhoe,2336,ENG,232,GB,51.88555,-0.57343 51651,Tottington,2336,ENG,232,GB,53.61326,-2.34071 51652,Totton,2336,ENG,232,GB,50.91877,-1.49037 51653,Tow Law,2336,ENG,232,GB,54.74456,-1.81434 51654,Towcester,2336,ENG,232,GB,52.13359,-0.99057 51655,Town Row,2336,ENG,232,GB,51.05302,0.23217 51657,Trafford,2336,ENG,232,GB,53.41667,-2.33333 51658,Trafford Park,2336,ENG,232,GB,53.46879,-2.31194 51662,Treeton,2336,ENG,232,GB,53.38564,-1.35189 51669,Trimdon,2336,ENG,232,GB,54.69878,-1.42881 51670,Trimdon Grange,2336,ENG,232,GB,54.71414,-1.42611 51672,Tring,2336,ENG,232,GB,51.79471,-0.65824 51674,Trowbridge,2336,ENG,232,GB,51.31889,-2.20861 51675,Truro,2336,ENG,232,GB,50.26526,-5.05436 51678,Tunstall,2336,ENG,232,GB,53.0583,-2.2114 51680,Tuxford,2336,ENG,232,GB,53.23004,-0.89325 51683,Twyford,2336,ENG,232,GB,51.47518,-0.86037 51685,Tyldesley,2336,ENG,232,GB,53.51393,-2.46754 51686,Tynemouth,2336,ENG,232,GB,55.01788,-1.42559 51687,Tytherington,2336,ENG,232,GB,51.5925,-2.47972 51689,Uckfield,2336,ENG,232,GB,50.96948,0.09589 51691,Uffculme,2336,ENG,232,GB,50.90604,-3.32746 51692,Ulceby,2336,ENG,232,GB,53.61667,-0.33333 51694,Ulrome,2336,ENG,232,GB,53.99198,-0.22968 51695,Ulverston,2336,ENG,232,GB,54.19594,-3.09626 51697,Uny Lelant,2336,ENG,232,GB,50.18298,-5.44047 51698,Upchurch,2336,ENG,232,GB,51.3762,0.64789 51699,Upminster,2336,ENG,232,GB,51.55594,0.2556 51700,Upper Basildon,2336,ENG,232,GB,51.48165,-1.14075 51701,Upper Langwith,2336,ENG,232,GB,53.22919,-1.20695 51702,Upper Poppleton,2336,ENG,232,GB,53.97907,-1.15204 51703,Uppingham,2336,ENG,232,GB,52.58803,-0.72272 51704,Upton,2336,ENG,232,GB,53.61466,-1.28677 51705,Upton Scudamore,2336,ENG,232,GB,51.23,-2.19333 51706,Upton upon Severn,2336,ENG,232,GB,52.06258,-2.21802 51707,Upwell,2336,ENG,232,GB,52.60249,0.2219 51708,Urmston,2336,ENG,232,GB,53.44852,-2.35419 51709,Ushaw Moor,2336,ENG,232,GB,54.77803,-1.6472 51711,Uttoxeter,2336,ENG,232,GB,52.89838,-1.86488 51715,Ventnor,2336,ENG,232,GB,50.59449,-1.20672 51716,Verwood,2336,ENG,232,GB,50.87575,-1.87023 51719,Virginia Water,2336,ENG,232,GB,51.40343,-0.56651 51720,Waddesdon,2336,ENG,232,GB,51.84675,-0.92105 51721,Waddington,2336,ENG,232,GB,53.16667,-0.53333 51722,Wadebridge,2336,ENG,232,GB,50.51734,-4.83633 51723,Wadhurst,2336,ENG,232,GB,51.0623,0.33929 51724,Wadworth,2336,ENG,232,GB,53.46726,-1.14261 51725,Wainfleet All Saints,2336,ENG,232,GB,53.1057,0.23583 51726,Wakefield,2336,ENG,232,GB,53.68331,-1.49768 51727,Walberton,2336,ENG,232,GB,50.84475,-0.62013 51728,Wales,2336,ENG,232,GB,53.34061,-1.28162 51729,Walkden,2336,ENG,232,GB,53.51667,-2.4 51730,Walkern,2336,ENG,232,GB,51.91888,-0.12758 51731,Walkington,2336,ENG,232,GB,53.8195,-0.48958 51732,Wallasey,2336,ENG,232,GB,53.42324,-3.06497 51733,Wallingford,2336,ENG,232,GB,51.59982,-1.1248 51734,Wallsend,2336,ENG,232,GB,54.99111,-1.53397 51735,Walsall,2336,ENG,232,GB,52.58333,-2.0 51736,Walsden,2336,ENG,232,GB,53.69361,-2.10001 51737,Waltham,2336,ENG,232,GB,53.51667,-0.1 51738,Waltham Abbey,2336,ENG,232,GB,51.687,-0.00421 51739,Waltham Cross,2336,ENG,232,GB,51.68602,-0.03575 51740,Walton,2336,ENG,232,GB,53.22284,-1.46084 51741,Walton-on-Thames,2336,ENG,232,GB,51.38678,-0.41319 51742,Walton-on-the-Naze,2336,ENG,232,GB,51.84819,1.26738 51743,Wanborough,2336,ENG,232,GB,51.54263,-1.69837 51744,Wansford,2336,ENG,232,GB,52.57851,-0.42001 51745,Wantage,2336,ENG,232,GB,51.58846,-1.42565 51746,Warboys,2336,ENG,232,GB,52.40352,-0.07931 51747,Wardle,2336,ENG,232,GB,53.65,-2.13333 51748,Ware,2336,ENG,232,GB,51.81058,-0.02875 51749,Wareham,2336,ENG,232,GB,50.68792,-2.11058 51750,Wargrave,2336,ENG,232,GB,51.50068,-0.86577 51752,Warkworth,2336,ENG,232,GB,55.35,-1.61667 51753,Warlingham,2336,ENG,232,GB,51.30953,-0.05794 51754,Warminster,2336,ENG,232,GB,51.20434,-2.17873 51755,Warnham,2336,ENG,232,GB,51.09107,-0.34847 51757,Warrington,2336,ENG,232,GB,53.41667,-2.58333 51758,Warsop,2336,ENG,232,GB,53.21402,-1.15091 51759,Warton,2336,ENG,232,GB,54.14715,-2.76435 51760,Warwick,2336,ENG,232,GB,52.28333,-1.58333 51761,Warwickshire,2336,ENG,232,GB,52.33333,-1.58333 51762,Washingborough,2336,ENG,232,GB,53.22425,-0.47485 51763,Washington,2336,ENG,232,GB,54.9,-1.51667 51764,Washwood Heath,2336,ENG,232,GB,52.50054,-1.82657 51765,Watchet,2336,ENG,232,GB,51.18189,-3.33079 51766,Water Eaton,2336,ENG,232,GB,51.98697,-0.72188 51767,Water Orton,2336,ENG,232,GB,52.51575,-1.74005 51768,Waterbeach,2336,ENG,232,GB,52.26553,0.19123 51770,Wateringbury,2336,ENG,232,GB,51.25543,0.42317 51771,Waterloo,2336,ENG,232,GB,53.47454,-3.03017 51772,Waterlooville,2336,ENG,232,GB,50.88067,-1.0304 51773,Watford,2336,ENG,232,GB,51.65531,-0.39602 51774,Wath upon Dearne,2336,ENG,232,GB,53.50291,-1.3458 51775,Watlington,2336,ENG,232,GB,51.64327,-1.00448 51776,Wattisham,2336,ENG,232,GB,52.12543,0.93864 51777,Watton,2336,ENG,232,GB,52.56667,0.83333 51778,Watton at Stone,2336,ENG,232,GB,51.85842,-0.11381 51779,Weaverham,2336,ENG,232,GB,53.26018,-2.57291 51780,Wedmore,2336,ENG,232,GB,51.22727,-2.81152 51781,Wednesbury,2336,ENG,232,GB,52.5514,-2.02355 51782,Wednesfield,2336,ENG,232,GB,52.5963,-2.08508 51783,Weedon Beck,2336,ENG,232,GB,52.22955,-1.08371 51784,Weeting,2336,ENG,232,GB,52.4644,0.61485 51785,Welford,2336,ENG,232,GB,52.41706,-1.05871 51786,Wellesbourne,2336,ENG,232,GB,52.19709,-1.59053 51787,Wellesbourne Mountford,2336,ENG,232,GB,52.19246,-1.60967 51788,Welling,2336,ENG,232,GB,51.46246,0.10759 51789,Wellingborough,2336,ENG,232,GB,52.30273,-0.69446 51790,Wellington,2336,ENG,232,GB,52.7,-2.51667 51791,Wellow,2336,ENG,232,GB,51.32444,-2.37417 51792,Wells,2336,ENG,232,GB,51.20794,-2.64896 51793,Wells-next-the-Sea,2336,ENG,232,GB,52.95164,0.8511 51795,Welwyn,2336,ENG,232,GB,51.8331,-0.21359 51796,Welwyn Garden City,2336,ENG,232,GB,51.80174,-0.20691 51797,Wem,2336,ENG,232,GB,52.85835,-2.71826 51798,Wembley,2336,ENG,232,GB,51.55242,-0.29686 51799,Wembury,2336,ENG,232,GB,50.32272,-4.07529 51801,Wendover,2336,ENG,232,GB,51.76194,-0.73986 51802,Wentworth,2336,ENG,232,GB,53.47816,-1.415 51804,Weobley,2336,ENG,232,GB,52.1596,-2.875 51805,West Bergholt,2336,ENG,232,GB,51.91221,0.84986 51806,West Berkshire,2336,ENG,232,GB,51.41667,-1.25 51807,West Bridgford,2336,ENG,232,GB,52.92979,-1.12537 51808,West Bromwich,2336,ENG,232,GB,52.51868,-1.9945 51809,West Byfleet,2336,ENG,232,GB,51.33764,-0.50649 51811,West Clandon,2336,ENG,232,GB,51.26063,-0.50323 51812,West Coker,2336,ENG,232,GB,50.91912,-2.68707 51813,West Cornforth,2336,ENG,232,GB,54.70286,-1.51938 51814,West Drayton,2336,ENG,232,GB,51.5,-0.46667 51816,West End,2336,ENG,232,GB,50.92741,-1.33282 51817,West End of London,2336,ENG,232,GB,51.51414,-0.1551 51818,West Haddon,2336,ENG,232,GB,52.34168,-1.07804 51819,West Hallam,2336,ENG,232,GB,52.97093,-1.35846 51820,West Horsley,2336,ENG,232,GB,51.26033,-0.45563 51821,West Ilsley,2336,ENG,232,GB,51.53993,-1.32368 51823,West Kingsdown,2336,ENG,232,GB,51.34281,0.26127 51824,West Kirby,2336,ENG,232,GB,53.37302,-3.18417 51827,West Malling,2336,ENG,232,GB,51.29273,0.40907 51828,West Mersea,2336,ENG,232,GB,51.77798,0.91873 51829,West Molesey,2336,ENG,232,GB,51.39985,-0.37997 51830,West Rainton,2336,ENG,232,GB,54.81667,-1.5 51831,West Sussex,2336,ENG,232,GB,51.0,-0.41667 51832,West Thurrock,2336,ENG,232,GB,51.47828,0.27672 51833,West Walton,2336,ENG,232,GB,52.69782,0.17406 51834,West Wellow,2336,ENG,232,GB,50.97273,-1.58293 51835,West Wickham,2336,ENG,232,GB,51.36667,-0.01667 51836,Westbury,2336,ENG,232,GB,51.26,-2.1875 51837,Westcliff-on-Sea,2336,ENG,232,GB,51.54424,0.69179 51838,Westcott,2336,ENG,232,GB,51.22438,-0.37195 51839,Westergate,2336,ENG,232,GB,50.83988,-0.67123 51840,Westerham,2336,ENG,232,GB,51.26632,0.06892 51841,Westfield,2336,ENG,232,GB,51.88333,-1.86667 51842,Westgate on Sea,2336,ENG,232,GB,51.38239,1.33673 51844,Westhoughton,2336,ENG,232,GB,53.54899,-2.52464 51845,Weston,2336,ENG,232,GB,53.06667,-2.4 51846,Weston Turville,2336,ENG,232,GB,51.79168,-0.75767 51847,Weston-super-Mare,2336,ENG,232,GB,51.34603,-2.97665 51848,Westoning,2336,ENG,232,GB,51.9814,-0.49698 51849,Westonzoyland,2336,ENG,232,GB,51.10854,-2.92843 51851,Westwood,2336,ENG,232,GB,51.33462,-2.27975 51852,Wetheral,2336,ENG,232,GB,54.88401,-2.83327 51853,Wetherby,2336,ENG,232,GB,53.92836,-1.38672 51854,Wetwang,2336,ENG,232,GB,54.0175,-0.57738 51855,Weybridge,2336,ENG,232,GB,51.37178,-0.45975 51856,Weymouth,2336,ENG,232,GB,50.61448,-2.45991 51857,Whaley Bridge,2336,ENG,232,GB,53.33031,-1.9826 51858,Whalley,2336,ENG,232,GB,53.82209,-2.40712 51859,Whaplode,2336,ENG,232,GB,52.79934,-0.03639 51860,Wheathampstead,2336,ENG,232,GB,51.81148,-0.29371 51861,Wheatley,2336,ENG,232,GB,51.74731,-1.13936 51862,Wheaton Aston,2336,ENG,232,GB,52.71145,-2.22064 51863,Wheldrake,2336,ENG,232,GB,53.89624,-0.96303 51864,Whickham,2336,ENG,232,GB,54.94561,-1.67635 51865,Whimple,2336,ENG,232,GB,50.76649,-3.35655 51867,Whitburn,2336,ENG,232,GB,54.95333,-1.36861 51868,Whitby,2336,ENG,232,GB,54.48774,-0.61498 51869,Whitchurch,2336,ENG,232,GB,52.96667,-2.68333 51870,White Waltham,2336,ENG,232,GB,51.49225,-0.77239 51872,Whitefield,2336,ENG,232,GB,53.55,-2.3 51873,Whitehaven,2336,ENG,232,GB,54.54897,-3.58412 51876,Whiteparish,2336,ENG,232,GB,51.01041,-1.64855 51878,Whitley,2336,ENG,232,GB,51.39528,-2.16444 51879,Whitley Bay,2336,ENG,232,GB,55.03973,-1.44713 51880,Whitstable,2336,ENG,232,GB,51.3607,1.0257 51881,Whittingham,2336,ENG,232,GB,55.40115,-1.8934 51882,Whittington,2336,ENG,232,GB,52.67372,-1.76091 51883,Whittlesey,2336,ENG,232,GB,52.55804,-0.13016 51884,Whittlesford,2336,ENG,232,GB,52.11345,0.14969 51885,Whitwell,2336,ENG,232,GB,53.28333,-1.21667 51886,Whitworth,2336,ENG,232,GB,53.65601,-2.1771 51887,Whyteleafe,2336,ENG,232,GB,51.30808,-0.08429 51889,Wick,2336,ENG,232,GB,51.45306,-2.42361 51891,Wickford,2336,ENG,232,GB,51.61101,0.52331 51892,Wickham,2336,ENG,232,GB,50.89924,-1.18815 51893,Wickham Bishops,2336,ENG,232,GB,51.7783,0.66823 51894,Wickham Market,2336,ENG,232,GB,52.15298,1.36299 51895,Wickwar,2336,ENG,232,GB,51.59404,-2.39968 51896,Wideopen,2336,ENG,232,GB,55.04514,-1.62246 51897,Widnes,2336,ENG,232,GB,53.3618,-2.73406 51898,Wigan,2336,ENG,232,GB,53.54296,-2.63706 51899,Wigmore,2336,ENG,232,GB,52.31474,-2.85802 51900,Wigston Magna,2336,ENG,232,GB,52.58128,-1.09248 51901,Wigton,2336,ENG,232,GB,54.82482,-3.16114 51902,Wilberfoss,2336,ENG,232,GB,53.94854,-0.88945 51903,Wilburton,2336,ENG,232,GB,52.35191,0.17673 51904,Willand,2336,ENG,232,GB,50.88333,-3.36667 51905,Willaston,2336,ENG,232,GB,53.2955,-2.99732 51906,Willenhall,2336,ENG,232,GB,52.58514,-2.05934 51907,Willingham,2336,ENG,232,GB,52.31404,0.05776 51908,Willington,2336,ENG,232,GB,54.71667,-1.7 51909,Williton,2336,ENG,232,GB,51.16236,-3.32208 51910,Wilmcote,2336,ENG,232,GB,52.22081,-1.76528 51911,Wilmslow,2336,ENG,232,GB,53.32803,-2.23148 51912,Wilsden,2336,ENG,232,GB,53.82084,-1.85959 51913,Wilstead,2336,ENG,232,GB,52.08088,-0.44889 51914,Wilton,2336,ENG,232,GB,51.07926,-1.8621 51915,Wiltshire,2336,ENG,232,GB,51.25,-1.91667 51916,Wimblington,2336,ENG,232,GB,52.50925,0.08416 51917,Wimborne Minster,2336,ENG,232,GB,50.78333,-1.98333 51918,Wincanton,2336,ENG,232,GB,51.05676,-2.40574 51920,Winchcombe,2336,ENG,232,GB,51.95363,-1.96398 51921,Winchelsea Beach,2336,ENG,232,GB,50.91691,0.72158 51922,Winchester,2336,ENG,232,GB,51.06513,-1.3187 51923,Windermere,2336,ENG,232,GB,54.38086,-2.90709 51924,Windlesham,2336,ENG,232,GB,51.36509,-0.65476 51925,Windsor,2336,ENG,232,GB,51.48333,-0.6 51927,Winford,2336,ENG,232,GB,51.38333,-2.66111 51928,Wing,2336,ENG,232,GB,51.89524,-0.71956 51929,Wingate,2336,ENG,232,GB,54.73242,-1.37896 51930,Wingerworth,2336,ENG,232,GB,53.202,-1.43359 51931,Wingham,2336,ENG,232,GB,51.27168,1.21463 51932,Wingrave,2336,ENG,232,GB,51.86494,-0.74244 51933,Winkleigh,2336,ENG,232,GB,50.85581,-3.943 51934,Winscombe,2336,ENG,232,GB,51.3181,-2.83224 51935,Winsford,2336,ENG,232,GB,53.19146,-2.52398 51936,Winslow,2336,ENG,232,GB,51.94284,-0.88131 51937,Winterbourne,2336,ENG,232,GB,51.44609,-1.3466 51938,Winterton,2336,ENG,232,GB,53.65497,-0.59885 51939,Winwick,2336,ENG,232,GB,53.43333,-2.6 51940,Wirksworth,2336,ENG,232,GB,53.08232,-1.57391 51941,Wisbech,2336,ENG,232,GB,52.66622,0.15938 51943,Witchford,2336,ENG,232,GB,52.38699,0.20602 51944,Witham,2336,ENG,232,GB,51.80007,0.64038 51945,Witheridge,2336,ENG,232,GB,50.91743,-3.70351 51946,Withernsea,2336,ENG,232,GB,53.7311,0.03347 51947,Witley,2336,ENG,232,GB,51.14993,-0.64768 51948,Witney,2336,ENG,232,GB,51.7836,-1.4854 51949,Wittering,2336,ENG,232,GB,52.60698,-0.44048 51950,Witton Gilbert,2336,ENG,232,GB,54.80572,-1.63686 51951,Wiveliscombe,2336,ENG,232,GB,51.04139,-3.31278 51952,Wivelsfield Green,2336,ENG,232,GB,50.96313,-0.07133 51953,Wivenhoe,2336,ENG,232,GB,51.85553,0.95796 51954,Woburn,2336,ENG,232,GB,51.98865,-0.61903 51955,Woburn Sands,2336,ENG,232,GB,52.01579,-0.64982 51956,Woking,2336,ENG,232,GB,51.31903,-0.55893 51957,Wokingham,2336,ENG,232,GB,51.41667,-0.91667 51958,Wold Newton,2336,ENG,232,GB,54.1428,-0.39993 51959,Woldingham,2336,ENG,232,GB,51.28527,-0.03372 51960,Wollaston,2336,ENG,232,GB,52.25794,-0.67038 51961,Wolsingham,2336,ENG,232,GB,54.73085,-1.88319 51962,Wolston,2336,ENG,232,GB,52.37717,-1.39544 51963,Wolvercote,2336,ENG,232,GB,51.78406,-1.29338 51964,Wolverhampton,2336,ENG,232,GB,52.58333,-2.11667 51965,Wombourn,2336,ENG,232,GB,52.53333,-2.18333 51966,Wombwell,2336,ENG,232,GB,53.52189,-1.39698 51967,Wood Street Village,2336,ENG,232,GB,51.25098,-0.63695 51968,Woodborough,2336,ENG,232,GB,51.33852,-1.83976 51969,Woodbridge,2336,ENG,232,GB,52.09332,1.32042 51970,Woodbury,2336,ENG,232,GB,50.67664,-3.4016 51971,Woodchurch,2336,ENG,232,GB,51.07605,0.77346 51972,Woodcote,2336,ENG,232,GB,52.73333,-2.33333 51973,Woodford,2336,ENG,232,GB,52.38231,-0.58099 51974,Woodford Green,2336,ENG,232,GB,51.60938,0.02329 51975,Woodhall Spa,2336,ENG,232,GB,53.15215,-0.21453 51976,Woodsetts,2336,ENG,232,GB,53.34804,-1.17204 51977,Woodstock,2336,ENG,232,GB,51.8485,-1.35132 51978,Wool,2336,ENG,232,GB,50.67966,-2.2189 51979,Woolavington,2336,ENG,232,GB,51.16493,-2.93814 51980,Wooler,2336,ENG,232,GB,55.54755,-2.01186 51981,Woolley,2336,ENG,232,GB,53.61339,-1.51457 51982,Woolpit,2336,ENG,232,GB,52.22454,0.88826 51983,Wootton,2336,ENG,232,GB,51.1738,1.1794 51984,Worcester,2336,ENG,232,GB,52.18935,-2.22001 51985,Worcester Park,2336,ENG,232,GB,51.37992,-0.24445 51986,Worcestershire,2336,ENG,232,GB,52.16667,-2.16667 51987,Workington,2336,ENG,232,GB,54.6425,-3.54413 51988,Worksop,2336,ENG,232,GB,53.30182,-1.12404 51989,Worlaby,2336,ENG,232,GB,53.6113,-0.46685 51990,Wormley,2336,ENG,232,GB,51.13622,-0.64673 51991,Worthing,2336,ENG,232,GB,50.81795,-0.37538 51992,Worton,2336,ENG,232,GB,51.31611,-2.04111 51993,Wotton-under-Edge,2336,ENG,232,GB,51.63242,-2.34512 51994,Wouldham,2336,ENG,232,GB,51.34986,0.45816 51995,Wragby,2336,ENG,232,GB,53.28333,-0.3 51996,Wrawby,2336,ENG,232,GB,53.56672,-0.46194 51997,Wrea Green,2336,ENG,232,GB,53.77651,-2.91573 51999,Wrington,2336,ENG,232,GB,51.36173,-2.76319 52000,Writtle,2336,ENG,232,GB,51.72906,0.42938 52001,Wrotham,2336,ENG,232,GB,51.30856,0.30899 52002,Wroughton,2336,ENG,232,GB,51.52411,-1.79559 52003,Wroxall,2336,ENG,232,GB,52.33791,-1.66898 52004,Wychbold,2336,ENG,232,GB,52.29045,-2.11555 52005,Wye,2336,ENG,232,GB,51.18249,0.93678 52006,Wylam,2336,ENG,232,GB,54.97654,-1.82187 52007,Wymeswold,2336,ENG,232,GB,52.80536,-1.11288 52009,Yalding,2336,ENG,232,GB,51.22387,0.4292 52010,Yapton,2336,ENG,232,GB,50.8209,-0.613 52011,Yarm,2336,ENG,232,GB,54.50364,-1.35793 52012,Yarmouth,2336,ENG,232,GB,50.70529,-1.49929 52013,Yarnton,2336,ENG,232,GB,51.80448,-1.31149 52014,Yate,2336,ENG,232,GB,51.54074,-2.41839 52015,Yateley,2336,ENG,232,GB,51.34305,-0.82985 52016,Yatton,2336,ENG,232,GB,51.38839,-2.82353 52017,Yaxley,2336,ENG,232,GB,52.51768,-0.25852 52018,Yeadon,2336,ENG,232,GB,53.86437,-1.68743 52019,Yealmpton,2336,ENG,232,GB,50.34856,-3.99877 52020,Yelverton,2336,ENG,232,GB,50.4929,-4.08382 52021,Yeovil,2336,ENG,232,GB,50.94159,-2.63211 52022,Yetminster,2336,ENG,232,GB,50.89579,-2.57959 52024,York,2336,ENG,232,GB,53.95763,-1.08271 52025,Youlgreave,2336,ENG,232,GB,53.17399,-1.69044 52026,Yoxall,2336,ENG,232,GB,52.76659,-1.79068 48200,Ahoghill,2337,NYK,232,GB,54.86667,-6.36667 48253,Annahilt,2337,NYK,232,GB,54.43333,-6.0 48254,Annalong,2337,NYK,232,GB,54.10823,-5.89966 48259,Antrim,2337,NYK,232,GB,54.7,-6.2 48260,Antrim and Newtownabbey,2337,NYK,232,GB,54.70177,-6.1977 48269,Ardglass,2337,NYK,232,GB,54.26312,-5.60981 48273,Ards and North Down,2337,NYK,232,GB,54.53439,-5.62947 48277,Armagh,2337,NYK,232,GB,54.35,-6.66667 48278,Armagh City Banbridge and Craigavon,2337,NYK,232,GB,54.36922,-6.45651 48347,Ballinamallard,2337,NYK,232,GB,54.4,-7.58333 48349,Ballintoy Harbour,2337,NYK,232,GB,55.24422,-6.36919 48351,Ballycastle,2337,NYK,232,GB,55.20444,-6.24298 48352,Ballyclare,2337,NYK,232,GB,54.75089,-5.99944 48353,Ballygowan,2337,NYK,232,GB,54.50165,-5.79168 48354,Ballykelly,2337,NYK,232,GB,55.04425,-7.01855 48355,Ballymena,2337,NYK,232,GB,54.86357,-6.27628 48356,Ballymoney,2337,NYK,232,GB,55.0708,-6.51009 48357,Ballynahinch,2337,NYK,232,GB,54.4023,-5.89717 48358,Ballypatrick,2337,NYK,232,GB,55.18112,-6.1502 48359,Ballywalter,2337,NYK,232,GB,54.54329,-5.48475 48366,Banbridge,2337,NYK,232,GB,54.35,-6.28333 48371,Bangor,2337,NYK,232,GB,54.65338,-5.66895 48458,Belfast,2337,NYK,232,GB,54.59682,-5.92541 48460,Bellaghy,2337,NYK,232,GB,54.8087,-6.51918 48728,Broughshane,2337,NYK,232,GB,54.8926,-6.20899 48802,Bushmills,2337,NYK,232,GB,55.20493,-6.51918 48866,Carnlough,2337,NYK,232,GB,54.99185,-5.99038 48867,Carnmoney,2337,NYK,232,GB,54.68333,-5.95 48870,Carrickfergus,2337,NYK,232,GB,54.7158,-5.8058 48873,Carryduff,2337,NYK,232,GB,54.51799,-5.88713 48881,Castledawson,2337,NYK,232,GB,54.77723,-6.56227 48882,Castlederg,2337,NYK,232,GB,54.70699,-7.59336 48884,Castlereagh,2337,NYK,232,GB,54.5735,-5.88472 48885,Castlerock,2337,NYK,232,GB,55.15,-6.78333 48887,Castlewellan,2337,NYK,232,GB,54.2569,-5.94446 48896,Causeway Coast and Glens,2337,NYK,232,GB,55.06014,-6.59081 49006,City of Belfast,2337,NYK,232,GB,54.58333,-5.91667 49045,Coalisland,2337,NYK,232,GB,54.5418,-6.70166 49067,Coleraine,2337,NYK,232,GB,55.13333,-6.66667 49081,Comber,2337,NYK,232,GB,54.54937,-5.74379 49090,Connor,2337,NYK,232,GB,54.8,-6.2 49096,Cookstown,2337,NYK,232,GB,54.64305,-6.74595 49139,Craigavon,2337,NYK,232,GB,54.44709,-6.387 49175,Crossgar,2337,NYK,232,GB,54.39675,-5.76061 49178,Crossmaglen,2337,NYK,232,GB,54.08333,-6.6 49188,Crumlin,2337,NYK,232,GB,54.62054,-6.21414 49202,Cullybackey,2337,NYK,232,GB,54.88875,-6.34701 49203,Culmore,2337,NYK,232,GB,55.05,-7.26667 49213,Cushendall,2337,NYK,232,GB,55.08033,-6.06291 49272,Derry,2337,NYK,232,GB,54.9981,-7.30934 49273,Derry City and Strabane,2337,NYK,232,GB,54.82045,-7.35958 49296,Doagh,2337,NYK,232,GB,54.75,-6.08333 49302,Donaghadee,2337,NYK,232,GB,54.64126,-5.53591 49321,Downpatrick,2337,NYK,232,GB,54.32814,-5.71529 49323,Draperstown,2337,NYK,232,GB,54.8,-6.76667 49328,Dromore,2337,NYK,232,GB,54.51331,-7.45886 49348,Dundonald,2337,NYK,232,GB,54.59196,-5.79803 49350,Dundrum,2337,NYK,232,GB,54.2575,-5.84455 49353,Dungannon,2337,NYK,232,GB,54.50344,-6.76723 49354,Dungiven,2337,NYK,232,GB,54.93333,-6.91667 49359,Dunloy,2337,NYK,232,GB,55.011,-6.41087 49446,Eglinton,2337,NYK,232,GB,55.01667,-7.18333 49477,Enniskillen,2337,NYK,232,GB,54.34615,-7.64133 49545,Fermanagh and Omagh,2337,NYK,232,GB,54.44257,-7.50299 49560,Fintona,2337,NYK,232,GB,54.5,-7.31667 49566,Fivemiletown,2337,NYK,232,GB,54.38333,-7.3 49632,Garvagh,2337,NYK,232,GB,54.98333,-6.66667 49642,Gilford,2337,NYK,232,GB,54.37256,-6.36126 49655,Glenariff,2337,NYK,232,GB,55.05,-6.06667 49656,Glenavy,2337,NYK,232,GB,54.59231,-6.21371 49746,Greenisland,2337,NYK,232,GB,54.70081,-5.87479 49751,Greyabbey,2337,NYK,232,GB,54.53483,-5.56028 49940,Hillsborough,2337,NYK,232,GB,54.46345,-6.07664 49975,Holywood,2337,NYK,232,GB,54.63863,-5.82473 50073,Irvinestown,2337,NYK,232,GB,54.46667,-7.63333 50097,Jordanstown,2337,NYK,232,GB,54.68333,-5.9 50099,Keady,2337,NYK,232,GB,54.25,-6.7 50145,Kilkeel,2337,NYK,232,GB,54.06196,-6.00308 50148,Killyleagh,2337,NYK,232,GB,54.40135,-5.648 50152,Kilrea,2337,NYK,232,GB,54.95091,-6.55695 50194,Kircubbin,2337,NYK,232,GB,54.48739,-5.53385 50253,Larne,2337,NYK,232,GB,54.85,-5.81667 50303,Limavady,2337,NYK,232,GB,55.05045,-6.95074 50317,Lisburn,2337,NYK,232,GB,54.52337,-6.03527 50318,Lisburn and Castlereagh,2337,NYK,232,GB,54.50824,-6.05246 50320,Lisnaskea,2337,NYK,232,GB,54.25,-7.45 50389,Londonderry County Borough,2337,NYK,232,GB,54.99721,-7.30917 50466,Maghera,2337,NYK,232,GB,54.8439,-6.67145 50467,Magherafelt,2337,NYK,232,GB,54.75356,-6.60656 50468,Magheralin,2337,NYK,232,GB,54.46695,-6.2598 50568,Mid and East Antrim,2337,NYK,232,GB,54.87436,-6.10141 50567,Mid Ulster,2337,NYK,232,GB,54.6219,-6.79097 50585,Millisle,2337,NYK,232,GB,54.60638,-5.52973 50612,Moira,2337,NYK,232,GB,54.48021,-6.22822 50616,Moneymore,2337,NYK,232,GB,54.69229,-6.66956 50644,Moy,2337,NYK,232,GB,54.45,-6.66667 50707,Newcastle,2337,NYK,232,GB,54.21804,-5.88979 50725,Newry,2337,NYK,232,GB,54.17841,-6.33739 50726,Newry Mourne and Down,2337,NYK,232,GB,54.23616,-6.06687 50739,Newtownabbey,2337,NYK,232,GB,54.65983,-5.90858 50740,Newtownards,2337,NYK,232,GB,54.59236,-5.69092 50741,Newtownstewart,2337,NYK,232,GB,54.71778,-7.37886 50811,Omagh,2337,NYK,232,GB,54.6,-7.3 50956,Portadown,2337,NYK,232,GB,54.42302,-6.44434 50957,Portaferry,2337,NYK,232,GB,54.38086,-5.54569 50958,Portavogie,2337,NYK,232,GB,54.45916,-5.44304 50959,Portglenone,2337,NYK,232,GB,54.87147,-6.47146 50968,Portrush,2337,NYK,232,GB,55.19592,-6.6493 50973,Portstewart,2337,NYK,232,GB,55.18132,-6.71402 51030,Randalstown,2337,NYK,232,GB,54.75,-6.3 51034,Rathfriland,2337,NYK,232,GB,54.25,-6.16667 51113,Rostrevor,2337,NYK,232,GB,54.1,-6.2 51178,Saintfield,2337,NYK,232,GB,54.46046,-5.83065 51314,Sion Mills,2337,NYK,232,GB,54.78752,-7.47276 51486,Strabane,2337,NYK,232,GB,54.82373,-7.46916 51553,Tandragee,2337,NYK,232,GB,54.35486,-6.41396 51572,Templepatrick,2337,NYK,232,GB,54.68333,-6.08333 51751,Waringstown,2337,NYK,232,GB,54.43431,-6.29929 51756,Warrenpoint,2337,NYK,232,GB,54.10148,-6.25731 51874,Whitehead,2337,NYK,232,GB,54.75371,-5.70933 48165,Aberchirder,2335,SCT,232,GB,57.56012,-2.62856 48168,Aberdeen,2335,SCT,232,GB,57.14369,-2.09814 48169,Aberdeen City,2335,SCT,232,GB,57.16667,-2.16667 48170,Aberdeenshire,2335,SCT,232,GB,57.16667,-2.66667 48171,Aberdour,2335,SCT,232,GB,56.05417,-3.30058 48173,Aberfeldy,2335,SCT,232,GB,56.62196,-3.86693 48178,Aberlady,2335,SCT,232,GB,56.00884,-2.85851 48179,Abernethy,2335,SCT,232,GB,56.33247,-3.31226 48185,Aboyne,2335,SCT,232,GB,57.07546,-2.78023 48195,Addiebrownhill,2335,SCT,232,GB,55.84289,-3.61667 48201,Airdrie,2335,SCT,232,GB,55.86602,-3.98025 48203,Airth,2335,SCT,232,GB,56.06983,-3.77209 48216,Alexandria,2335,SCT,232,GB,55.99379,-4.5864 48218,Alford,2335,SCT,232,GB,57.23257,-2.70298 48220,Allanton,2335,SCT,232,GB,55.78333,-2.21667 48222,Alloa,2335,SCT,232,GB,56.11586,-3.78997 48223,Almondbank,2335,SCT,232,GB,56.41729,-3.51733 48225,Alness,2335,SCT,232,GB,57.69596,-4.2551 48234,Alva,2335,SCT,232,GB,56.15284,-3.80505 48238,Alyth,2335,SCT,232,GB,56.62209,-3.23005 48251,Angus,2335,SCT,232,GB,56.66667,-2.91667 48255,Annan,2335,SCT,232,GB,54.98839,-3.25647 48258,Anstruther,2335,SCT,232,GB,56.22315,-2.70229 48266,Arbroath,2335,SCT,232,GB,56.56317,-2.58736 48268,Ardersier,2335,SCT,232,GB,57.56681,-4.03784 48271,Ardrishaig,2335,SCT,232,GB,56.01566,-5.44806 48272,Ardrossan,2335,SCT,232,GB,55.65018,-4.80659 48274,Argyll and Bute,2335,SCT,232,GB,56.03693,-5.43679 48276,Armadale,2335,SCT,232,GB,55.88333,-3.7 48291,Ashgill,2335,SCT,232,GB,55.73119,-3.93019 48312,Auchinleck,2335,SCT,232,GB,55.47157,-4.29337 48313,Auchterarder,2335,SCT,232,GB,56.29612,-3.70692 48314,Auchtermuchty,2335,SCT,232,GB,56.29158,-3.23428 48320,Aviemore,2335,SCT,232,GB,57.19553,-3.8259 48328,Ayr,2335,SCT,232,GB,55.46273,-4.63393 48343,Balerno,2335,SCT,232,GB,55.88437,-3.33975 48344,Balfron,2335,SCT,232,GB,56.06809,-4.33559 48345,Balintore,2335,SCT,232,GB,57.75564,-3.91232 48346,Ballater,2335,SCT,232,GB,57.05011,-3.03798 48348,Ballingry,2335,SCT,232,GB,56.16392,-3.32841 48350,Balloch,2335,SCT,232,GB,56.0,-4.58333 48360,Balmedie,2335,SCT,232,GB,57.25052,-2.06163 48361,Balmullo,2335,SCT,232,GB,56.37694,-2.9294 48368,Banchory,2335,SCT,232,GB,57.05168,-2.48824 48369,Banff,2335,SCT,232,GB,57.66477,-2.52964 48373,Bankfoot,2335,SCT,232,GB,56.50058,-3.51707 48374,Banknock,2335,SCT,232,GB,55.98967,-3.95611 48376,Bannockburn,2335,SCT,232,GB,56.08978,-3.91092 48383,Bargeddie,2335,SCT,232,GB,55.85366,-4.07846 48406,Barra,2335,SCT,232,GB,56.98035,-7.45731 48407,Barrhead,2335,SCT,232,GB,55.79916,-4.39285 48428,Bathgate,2335,SCT,232,GB,55.90204,-3.64398 48439,Bearsden,2335,SCT,232,GB,55.91536,-4.33279 48440,Beauly,2335,SCT,232,GB,57.48345,-4.46144 48456,Beith,2335,SCT,232,GB,55.74923,-4.6368 48462,Bellsbank,2335,SCT,232,GB,55.3131,-4.39869 48463,Bellshill,2335,SCT,232,GB,55.81667,-4.01667 48471,Benbecula,2335,SCT,232,GB,57.44737,-7.34273 48499,Biggar,2335,SCT,232,GB,55.62297,-3.52455 48513,Bilston,2335,SCT,232,GB,55.8703,-3.17814 48526,Bishopbriggs,2335,SCT,232,GB,55.90669,-4.21869 48537,Bishopton,2335,SCT,232,GB,55.90969,-4.5056 48542,Blackburn,2335,SCT,232,GB,55.86667,-3.63333 48549,Blackridge,2335,SCT,232,GB,55.88523,-3.77479 48552,Blackwood,2335,SCT,232,GB,55.66667,-3.91667 48560,Blairgowrie,2335,SCT,232,GB,56.59157,-3.34045 48562,Blantyre,2335,SCT,232,GB,55.79634,-4.09485 48641,Bo’ness,2335,SCT,232,GB,56.01667,-3.61667 48579,Boddam,2335,SCT,232,GB,57.47076,-1.78009 48590,Bonhill,2335,SCT,232,GB,55.97944,-4.5638 48591,Bonnybridge,2335,SCT,232,GB,56.00152,-3.8886 48592,Bonnyrigg,2335,SCT,232,GB,55.87329,-3.1051 48618,Bothwell,2335,SCT,232,GB,55.80272,-4.06835 48669,Brechin,2335,SCT,232,GB,56.72993,-2.65729 48680,Bridge of Allan,2335,SCT,232,GB,56.15402,-3.94631 48681,Bridge of Earn,2335,SCT,232,GB,56.34842,-3.4065 48682,Bridge of Weir,2335,SCT,232,GB,55.85582,-4.57894 48697,Brightons,2335,SCT,232,GB,55.98028,-3.71613 48724,Brora,2335,SCT,232,GB,58.00989,-3.85182 48734,Broxburn,2335,SCT,232,GB,55.93415,-3.47133 48745,Buckhaven,2335,SCT,232,GB,56.17149,-3.03377 48747,Buckie,2335,SCT,232,GB,57.6757,-2.96238 48768,Burghead,2335,SCT,232,GB,57.70113,-3.48992 48780,Burntisland,2335,SCT,232,GB,56.06248,-3.23176 48800,Busby,2335,SCT,232,GB,55.77995,-4.27711 48816,Cairneyhill,2335,SCT,232,GB,56.05908,-3.53518 48817,Cairnryan,2335,SCT,232,GB,54.97104,-5.01982 48821,Calderbank,2335,SCT,232,GB,55.84318,-3.9707 48822,Caldercruix,2335,SCT,232,GB,55.88886,-3.88664 48825,Callander,2335,SCT,232,GB,56.2441,-4.21637 48836,Cambuslang,2335,SCT,232,GB,55.80966,-4.16096 48840,Campbeltown,2335,SCT,232,GB,55.42583,-5.60764 48848,Caol,2335,SCT,232,GB,56.83721,-5.10062 48853,Cardenden,2335,SCT,232,GB,56.1431,-3.25687 48857,Cardross,2335,SCT,232,GB,55.96184,-4.65316 48858,Carfin,2335,SCT,232,GB,55.80502,-3.96076 48861,Carluke,2335,SCT,232,GB,55.73595,-3.83019 48864,Carmunnock,2335,SCT,232,GB,55.79062,-4.23584 48868,Carnoustie,2335,SCT,232,GB,56.50263,-2.7053 48869,Carnwath,2335,SCT,232,GB,55.70036,-3.62579 48871,Carron,2335,SCT,232,GB,56.02611,-3.79251 48872,Carronshore,2335,SCT,232,GB,56.03146,-3.7829 48878,Castle Douglas,2335,SCT,232,GB,54.94095,-3.92784 48892,Catrine,2335,SCT,232,GB,55.50422,-4.33026 48917,Chapelhall,2335,SCT,232,GB,55.84349,-3.94881 48924,Charlestown of Aberlour,2335,SCT,232,GB,57.47076,-3.22509 48977,Chirnside,2335,SCT,232,GB,55.80215,-2.20927 48989,Chryston,2335,SCT,232,GB,55.9028,-4.10759 49008,City of Edinburgh,2335,SCT,232,GB,55.94973,-3.19333 49014,Clackmannan,2335,SCT,232,GB,56.10743,-3.75098 49015,Clackmannanshire,2335,SCT,232,GB,56.16667,-3.75 49020,Clarkston,2335,SCT,232,GB,55.78594,-4.27651 49029,Cleland,2335,SCT,232,GB,55.80243,-3.9142 49043,Clydebank,2335,SCT,232,GB,55.90137,-4.4057 49044,Coalburn,2335,SCT,232,GB,55.59295,-3.88637 49046,Coaltown of Balgonie,2335,SCT,232,GB,56.18474,-3.12578 49048,Coatbridge,2335,SCT,232,GB,55.86216,-4.02469 49051,Cockenzie,2335,SCT,232,GB,55.96823,-2.96562 49065,Coldstream,2335,SCT,232,GB,55.65111,-2.25295 49069,Colinton,2335,SCT,232,GB,55.90739,-3.25609 49085,Comrie,2335,SCT,232,GB,56.3688,-3.97882 49091,Conon Bridge,2335,SCT,232,GB,57.5663,-4.43678 49124,Coupar Angus,2335,SCT,232,GB,56.54552,-3.26774 49125,Cove,2335,SCT,232,GB,57.1,-2.08333 49130,Cowdenbeath,2335,SCT,232,GB,56.11194,-3.34426 49133,Cowie,2335,SCT,232,GB,56.07974,-3.86753 49137,Coylton,2335,SCT,232,GB,55.44528,-4.5195 49140,Crail,2335,SCT,232,GB,56.26042,-2.62676 49160,Crieff,2335,SCT,232,GB,56.37268,-3.83891 49174,Crossford,2335,SCT,232,GB,56.06303,-3.49674 49176,Crossgates,2335,SCT,232,GB,56.08366,-3.37712 49177,Crosshouse,2335,SCT,232,GB,55.61258,-4.55091 49185,Croy,2335,SCT,232,GB,55.96064,-4.03932 49187,Cruden Bay,2335,SCT,232,GB,57.41797,-1.85313 49198,Cullen,2335,SCT,232,GB,57.69045,-2.81818 49200,Culloden,2335,SCT,232,GB,57.48699,-4.1415 49204,Cults,2335,SCT,232,GB,57.11667,-2.16667 49206,Cumbernauld,2335,SCT,232,GB,55.94685,-3.99051 49208,Cumnock,2335,SCT,232,GB,55.45445,-4.26644 49209,Cupar,2335,SCT,232,GB,56.31876,-3.01204 49211,Currie,2335,SCT,232,GB,55.8964,-3.30845 49220,Dalbeattie,2335,SCT,232,GB,54.93278,-3.82271 49221,Dalgety Bay,2335,SCT,232,GB,56.03496,-3.35049 49222,Dalkeith,2335,SCT,232,GB,55.89317,-3.06806 49223,Dalmellington,2335,SCT,232,GB,55.32419,-4.402 49224,Dalry,2335,SCT,232,GB,55.70956,-4.72167 49225,Dalrymple,2335,SCT,232,GB,55.39757,-4.59169 49226,Dalserf,2335,SCT,232,GB,55.73333,-3.91667 49231,Danderhall,2335,SCT,232,GB,55.91434,-3.11062 49242,Darvel,2335,SCT,232,GB,55.60976,-4.28142 49265,Denny,2335,SCT,232,GB,56.0235,-3.90812 49266,Dennyloanhead,2335,SCT,232,GB,55.99886,-3.91306 49286,Dingwall,2335,SCT,232,GB,57.59531,-4.42721 49301,Dollar,2335,SCT,232,GB,56.16245,-3.67135 49310,Dornoch,2335,SCT,232,GB,57.8805,-4.02879 49314,Douglas,2335,SCT,232,GB,55.55,-3.85 49315,Doune,2335,SCT,232,GB,56.18995,-4.05288 49325,Dreghorn,2335,SCT,232,GB,55.60807,-4.62226 49330,Drongan,2335,SCT,232,GB,55.43498,-4.45551 49332,Drumnadrochit,2335,SCT,232,GB,57.33438,-4.47989 49337,Dufftown,2335,SCT,232,GB,57.44571,-3.12708 49340,Dumbarton,2335,SCT,232,GB,55.94433,-4.57061 49341,Dumfries,2335,SCT,232,GB,55.06959,-3.61139 49342,Dumfries and Galloway,2335,SCT,232,GB,55.08333,-3.83333 49343,Dunbar,2335,SCT,232,GB,56.00062,-2.51418 49344,Dunblane,2335,SCT,232,GB,56.18843,-3.96417 49346,Dundee,2335,SCT,232,GB,56.46913,-2.97489 49347,Dundee City,2335,SCT,232,GB,56.46667,-2.91667 49349,Dundonald,2335,SCT,232,GB,55.57939,-4.59473 49352,Dunfermline,2335,SCT,232,GB,56.07156,-3.45887 49356,Dunipace,2335,SCT,232,GB,56.027,-3.91471 49358,Dunlop,2335,SCT,232,GB,55.71198,-4.53622 49361,Dunoon,2335,SCT,232,GB,55.95031,-4.92734 49362,Duns,2335,SCT,232,GB,55.77704,-2.34575 49365,Duntocher,2335,SCT,232,GB,55.92437,-4.41545 49369,Dyce,2335,SCT,232,GB,57.20522,-2.17676 49374,Eaglesham,2335,SCT,232,GB,55.74119,-4.27459 49381,Earlston,2335,SCT,232,GB,55.63856,-2.67495 49384,East Ayrshire,2335,SCT,232,GB,55.5,-4.25 49389,East Calder,2335,SCT,232,GB,55.89186,-3.46372 49394,East Dunbartonshire,2335,SCT,232,GB,55.93333,-4.2 49401,East Kilbride,2335,SCT,232,GB,55.76412,-4.17669 49403,East Linton,2335,SCT,232,GB,55.98737,-2.65682 49404,East Lothian,2335,SCT,232,GB,55.91667,-2.75 49409,East Renfrewshire,2335,SCT,232,GB,55.75,-4.33333 49413,East Wemyss,2335,SCT,232,GB,56.16018,-3.06422 49414,East Whitburn,2335,SCT,232,GB,55.86855,-3.66295 49424,Eastriggs,2335,SCT,232,GB,54.98597,-3.18051 49441,Edinburgh,2335,SCT,232,GB,55.95206,-3.19648 49449,Eilean Siar,2335,SCT,232,GB,57.66667,-7.16667 49450,Elderslie,2335,SCT,232,GB,55.83327,-4.48598 49451,Elgin,2335,SCT,232,GB,57.64947,-3.31843 49457,Ellon,2335,SCT,232,GB,57.36405,-2.07313 49482,Errol,2335,SCT,232,GB,56.39234,-3.21275 49483,Erskine,2335,SCT,232,GB,55.9005,-4.45028 49493,Evanton,2335,SCT,232,GB,57.66385,-4.34004 49510,Eyemouth,2335,SCT,232,GB,55.8713,-2.0901 49514,Faifley,2335,SCT,232,GB,55.92853,-4.38509 49518,Fairlie,2335,SCT,232,GB,55.75602,-4.85564 49521,Falkirk,2335,SCT,232,GB,56.0,-3.75 49522,Falkland,2335,SCT,232,GB,56.25255,-3.20389 49523,Fallin,2335,SCT,232,GB,56.10479,-3.87616 49534,Fauldhouse,2335,SCT,232,GB,55.82749,-3.70741 49544,Fenwick,2335,SCT,232,GB,55.65823,-4.44342 49552,Fife,2335,SCT,232,GB,56.25,-3.16667 49556,Findochty,2335,SCT,232,GB,57.69735,-2.90104 49579,Fochabers,2335,SCT,232,GB,57.61445,-3.09947 49587,Forfar,2335,SCT,232,GB,56.64382,-2.89001 49589,Forres,2335,SCT,232,GB,57.60997,-3.62115 49590,Fort William,2335,SCT,232,GB,56.81648,-5.11208 49591,Forth,2335,SCT,232,GB,55.76502,-3.68874 49592,Fortrose,2335,SCT,232,GB,57.58087,-4.13263 49603,Fraserburgh,2335,SCT,232,GB,57.68744,-2.01844 49607,Freuchie,2335,SCT,232,GB,56.24688,-3.15861 49610,Friockheim,2335,SCT,232,GB,56.63688,-2.66806 49622,Galashiels,2335,SCT,232,GB,55.61458,-2.80695 49624,Galston,2335,SCT,232,GB,55.60093,-4.38172 49626,Garelochhead,2335,SCT,232,GB,56.08203,-4.82909 49631,Gartcosh,2335,SCT,232,GB,55.88841,-4.0817 49639,Giffnock,2335,SCT,232,GB,55.80373,-4.29488 49646,Girvan,2335,SCT,232,GB,55.24255,-4.85551 49650,Glasgow,2335,SCT,232,GB,55.86515,-4.25763 49651,Glasgow City,2335,SCT,232,GB,55.86667,-4.25 49657,Glenboig,2335,SCT,232,GB,55.89422,-4.04619 49659,Glenmavis,2335,SCT,232,GB,55.88913,-3.98726 49660,Glenrothes,2335,SCT,232,GB,56.19514,-3.17316 49675,Golspie,2335,SCT,232,GB,57.97266,-3.97798 49680,Gorebridge,2335,SCT,232,GB,55.84594,-3.04563 49692,Gourock,2335,SCT,232,GB,55.96157,-4.81789 49698,Grangemouth,2335,SCT,232,GB,56.01141,-3.72183 49700,Grantown on Spey,2335,SCT,232,GB,57.33051,-3.60867 49743,Greenhill,2335,SCT,232,GB,55.99204,-3.89096 49747,Greenock,2335,SCT,232,GB,55.94838,-4.76121 49750,Gretna,2335,SCT,232,GB,54.9938,-3.06594 49766,Gullane,2335,SCT,232,GB,56.03652,-2.82829 49772,Haddington,2335,SCT,232,GB,55.95612,-2.78332 49785,Halkirk,2335,SCT,232,GB,58.51227,-3.49155 49786,Hallglen,2335,SCT,232,GB,55.98573,-3.78535 49795,Hamilton,2335,SCT,232,GB,55.76667,-4.03333 49821,Harthill,2335,SCT,232,GB,55.86067,-3.75166 49851,Hawick,2335,SCT,232,GB,55.42273,-2.78666 49871,Head of Muir,2335,SCT,232,GB,56.00623,-3.91358 49888,Helensburgh,2335,SCT,232,GB,56.00614,-4.72648 49924,High Blantyre,2335,SCT,232,GB,55.78438,-4.10007 49931,High Valleyfield,2335,SCT,232,GB,56.06357,-3.59913 49936,Highland,2335,SCT,232,GB,57.5,-5.0 49941,Hillside,2335,SCT,232,GB,56.74483,-2.474 49972,Holytown,2335,SCT,232,GB,55.82011,-3.9727 49985,Hopeman,2335,SCT,232,GB,57.70681,-3.42911 50010,Houston,2335,SCT,232,GB,55.86859,-4.55201 50014,Howwood,2335,SCT,232,GB,55.8106,-4.55733 50028,Huntly,2335,SCT,232,GB,57.44741,-2.78608 50048,Inchinnan,2335,SCT,232,GB,55.88995,-4.43842 50049,Inchture,2335,SCT,232,GB,56.44551,-3.16956 50056,Innerleithen,2335,SCT,232,GB,55.61927,-3.06301 50057,Insch,2335,SCT,232,GB,57.34273,-2.61321 50058,Inverbervie,2335,SCT,232,GB,56.84463,-2.27997 50059,Inverclyde,2335,SCT,232,GB,55.9,-4.75 50060,Invergordon,2335,SCT,232,GB,57.6886,-4.16745 50061,Invergowrie,2335,SCT,232,GB,56.46111,-3.06158 50062,Inverkeithing,2335,SCT,232,GB,56.03297,-3.39555 50063,Inverkip,2335,SCT,232,GB,55.90831,-4.87051 50064,Inverness,2335,SCT,232,GB,57.47908,-4.22398 50065,Inverurie,2335,SCT,232,GB,57.28446,-2.37736 50072,Irvine,2335,SCT,232,GB,55.6194,-4.65508 50075,Isle of Arran,2335,SCT,232,GB,55.58145,-5.21233 50076,Isle of Bute,2335,SCT,232,GB,55.83663,-5.05586 50077,Isle of Cumbrae,2335,SCT,232,GB,55.76933,-4.91913 50078,Isle of Islay,2335,SCT,232,GB,55.78526,-6.23886 50079,Isle of Lewis,2335,SCT,232,GB,58.21901,-6.38803 50074,Isle Of Mull,2335,SCT,232,GB,56.44703,-5.77404 50080,Isle of North Uist,2335,SCT,232,GB,57.60581,-7.34024 50081,Isle of South Uist,2335,SCT,232,GB,57.24562,-7.33337 50094,Jedburgh,2335,SCT,232,GB,55.47997,-2.552 50096,Johnstone,2335,SCT,232,GB,55.82906,-4.51605 50106,Keith,2335,SCT,232,GB,57.53633,-2.94811 50109,Kelso,2335,SCT,232,GB,55.59814,-2.43382 50110,Kelty,2335,SCT,232,GB,56.13362,-3.3869 50113,Kemnay,2335,SCT,232,GB,57.23573,-2.44395 50121,Kennoway,2335,SCT,232,GB,56.21081,-3.04917 50139,Kilbarchan,2335,SCT,232,GB,55.8362,-4.55356 50140,Kilbirnie,2335,SCT,232,GB,55.75082,-4.68791 50142,Kilcreggan,2335,SCT,232,GB,55.9846,-4.821 50147,Killearn,2335,SCT,232,GB,56.04239,-4.3684 50149,Kilmacolm,2335,SCT,232,GB,55.8947,-4.62643 50150,Kilmarnock,2335,SCT,232,GB,55.61171,-4.49581 50151,Kilmaurs,2335,SCT,232,GB,55.63801,-4.5273 50154,Kilsyth,2335,SCT,232,GB,55.97596,-4.05916 50155,Kilwinning,2335,SCT,232,GB,55.65333,-4.70666 50159,Kincardine,2335,SCT,232,GB,56.06945,-3.71964 50163,Kinghorn,2335,SCT,232,GB,56.06896,-3.17607 50164,Kinglassie,2335,SCT,232,GB,56.17371,-3.24241 50173,Kingskettle,2335,SCT,232,GB,56.26215,-3.11693 50181,Kingswells,2335,SCT,232,GB,57.15798,-2.22426 50185,Kingussie,2335,SCT,232,GB,57.07996,-4.05231 50186,Kinloss,2335,SCT,232,GB,57.63494,-3.57012 50187,Kinross,2335,SCT,232,GB,56.20466,-3.42138 50189,Kintore,2335,SCT,232,GB,57.23721,-2.3454 50192,Kippen,2335,SCT,232,GB,56.12673,-4.17083 50202,Kirkcaldy,2335,SCT,232,GB,56.11683,-3.15999 50203,Kirkconnel,2335,SCT,232,GB,55.38561,-3.99836 50204,Kirkcudbright,2335,SCT,232,GB,54.8383,-4.04908 50206,Kirkintilloch,2335,SCT,232,GB,55.93933,-4.15262 50208,Kirkliston,2335,SCT,232,GB,55.95364,-3.40288 50209,Kirknewton,2335,SCT,232,GB,55.88754,-3.41898 50210,Kirkwall,2335,SCT,232,GB,58.98479,-2.95873 50211,Kirriemuir,2335,SCT,232,GB,56.67398,-3.00343 50226,Ladybank,2335,SCT,232,GB,56.27421,-3.1239 50232,Lamlash,2335,SCT,232,GB,55.53358,-5.12956 50234,Lanark,2335,SCT,232,GB,55.67371,-3.7817 50243,Langholm,2335,SCT,232,GB,55.15101,-2.99889 50248,Larbert,2335,SCT,232,GB,56.02246,-3.82872 50249,Largs,2335,SCT,232,GB,55.79629,-4.86337 50252,Larkhall,2335,SCT,232,GB,55.73333,-3.96667 50255,Lauder,2335,SCT,232,GB,55.71908,-2.74755 50257,Laurencekirk,2335,SCT,232,GB,56.83338,-2.4654 50258,Laurieston,2335,SCT,232,GB,55.99562,-3.74801 50261,Law,2335,SCT,232,GB,55.75,-3.88333 50280,Lennoxtown,2335,SCT,232,GB,55.97263,-4.20001 50281,Lenzie,2335,SCT,232,GB,55.92762,-4.15399 50283,Lerwick,2335,SCT,232,GB,60.15339,-1.14427 50285,Leslie,2335,SCT,232,GB,56.2,-3.21667 50286,Lesmahagow,2335,SCT,232,GB,55.63668,-3.88736 50289,Letham,2335,SCT,232,GB,56.62683,-2.7706 50291,Leuchars,2335,SCT,232,GB,56.38174,-2.88253 50292,Leven,2335,SCT,232,GB,56.2,-3.0 50298,Lhanbryde,2335,SCT,232,GB,57.63529,-3.21839 50304,Limekilns,2335,SCT,232,GB,56.03336,-3.47713 50311,Linlithgow,2335,SCT,232,GB,55.97639,-3.60364 50315,Linwood,2335,SCT,232,GB,55.84834,-4.49337 50339,Livingston,2335,SCT,232,GB,55.90288,-3.52261 50375,Loanhead,2335,SCT,232,GB,55.87945,-3.15874 50376,Locharbriggs,2335,SCT,232,GB,55.10337,-3.58438 50377,Lochgelly,2335,SCT,232,GB,56.12826,-3.30964 50378,Lochgilphead,2335,SCT,232,GB,56.03796,-5.43206 50379,Lochmaben,2335,SCT,232,GB,55.13011,-3.44286 50380,Lochwinnoch,2335,SCT,232,GB,55.79521,-4.63034 50381,Lockerbie,2335,SCT,232,GB,55.12302,-3.35635 50387,Logan,2335,SCT,232,GB,55.45466,-4.23514 50404,Longforgan,2335,SCT,232,GB,56.45732,-3.11437 50408,Longniddry,2335,SCT,232,GB,55.97543,-2.89593 50416,Lossiemouth,2335,SCT,232,GB,57.72136,-3.28341 50436,Luncarty,2335,SCT,232,GB,56.45308,-3.47007 50438,Lundin Links,2335,SCT,232,GB,56.2124,-2.95296 50459,Macduff,2335,SCT,232,GB,57.67012,-2.49686 50462,Macmerry,2335,SCT,232,GB,55.94045,-2.90503 50463,Maddiston,2335,SCT,232,GB,55.97365,-3.699 50507,Markinch,2335,SCT,232,GB,56.20214,-3.13517 50523,Maryburgh,2335,SCT,232,GB,57.5742,-4.44178 50528,Mauchline,2335,SCT,232,GB,55.51604,-4.37928 50530,Maxwellheugh,2335,SCT,232,GB,55.59253,-2.42871 50531,Maybole,2335,SCT,232,GB,55.35503,-4.68026 50533,Mayfield,2335,SCT,232,GB,55.87172,-3.03875 50541,Melrose,2335,SCT,232,GB,55.59969,-2.7277 50548,Menstrie,2335,SCT,232,GB,56.15138,-3.85466 50558,Methil,2335,SCT,232,GB,56.18543,-3.02157 50560,Methven,2335,SCT,232,GB,56.41737,-3.57832 50566,Mid Calder,2335,SCT,232,GB,55.89261,-3.48002 50576,Midlothian,2335,SCT,232,GB,55.82347,-3.09334 50587,Millport,2335,SCT,232,GB,55.75348,-4.92559 50588,Milltimber,2335,SCT,232,GB,57.10424,-2.24099 50589,Milnathort,2335,SCT,232,GB,56.22688,-3.4193 50590,Milngavie,2335,SCT,232,GB,55.94071,-4.32311 50594,Milton of Campsie,2335,SCT,232,GB,55.9612,-4.16508 50595,Milton of Leys,2335,SCT,232,GB,57.45125,-4.17592 50602,Mintlaw,2335,SCT,232,GB,57.52414,-2.00099 50611,Moffat,2335,SCT,232,GB,55.33527,-3.44142 50617,Monifieth,2335,SCT,232,GB,56.48227,-2.81732 50621,Montrose,2335,SCT,232,GB,56.71683,-2.46695 50622,Moodiesburn,2335,SCT,232,GB,55.91501,-4.08331 50623,Moray,2335,SCT,232,GB,57.41667,-3.25 50634,Mossblown,2335,SCT,232,GB,55.48941,-4.52787 50638,Motherwell,2335,SCT,232,GB,55.78924,-3.99187 50647,Muir of Ord,2335,SCT,232,GB,57.51976,-4.45939 50648,Muirhead,2335,SCT,232,GB,56.5,-3.06667 50649,Muirkirk,2335,SCT,232,GB,55.52272,-4.06551 50655,Musselburgh,2335,SCT,232,GB,55.9417,-3.04991 50661,Nairn,2335,SCT,232,GB,57.58094,-3.87973 50673,Neilston,2335,SCT,232,GB,55.78574,-4.42637 50681,Netherlee,2335,SCT,232,GB,55.80157,-4.27325 50687,New Cumnock,2335,SCT,232,GB,55.39563,-4.18458 50693,New Pitsligo,2335,SCT,232,GB,57.59019,-2.19535 50696,New Stevenston,2335,SCT,232,GB,55.81669,-3.97357 50699,Newarthill,2335,SCT,232,GB,55.8151,-3.93733 50702,Newbridge,2335,SCT,232,GB,55.93333,-3.4 50704,Newburgh,2335,SCT,232,GB,56.35079,-3.2365 50716,Newmacher,2335,SCT,232,GB,57.26667,-2.18333 50717,Newmains,2335,SCT,232,GB,55.78514,-3.87465 50719,Newmilns,2335,SCT,232,GB,55.60751,-4.32416 50723,Newport-on-Tay,2335,SCT,232,GB,56.43911,-2.9367 50731,Newton Mearns,2335,SCT,232,GB,55.77334,-4.33339 50733,Newton Stewart,2335,SCT,232,GB,54.95784,-4.48315 50735,Newtonhill,2335,SCT,232,GB,57.03333,-2.15 50736,Newtonmore,2335,SCT,232,GB,57.06567,-4.12097 50738,Newtown St Boswells,2335,SCT,232,GB,55.57887,-2.66874 50747,North Ayrshire,2335,SCT,232,GB,55.69694,-4.73373 50749,North Berwick,2335,SCT,232,GB,56.05825,-2.7229 50756,North Lanarkshire,2335,SCT,232,GB,55.86667,-3.91667 50762,North Queensferry,2335,SCT,232,GB,56.00899,-3.39134 50794,Oakley,2335,SCT,232,GB,56.08421,-3.56311 50796,Oban,2335,SCT,232,GB,56.41535,-5.47184 50797,Ochiltree,2335,SCT,232,GB,55.45981,-4.36782 50803,Old Kilpatrick,2335,SCT,232,GB,55.92241,-4.45567 50808,Oldmeldrum,2335,SCT,232,GB,57.33492,-2.3199 50812,Orkney,2335,SCT,232,GB,58.98465,-2.95953 50813,Orkney Islands,2335,SCT,232,GB,59.0,-3.0 50816,Ormiston,2335,SCT,232,GB,55.91302,-2.93985 50837,Overtown,2335,SCT,232,GB,55.75719,-3.91645 50848,Paisley,2335,SCT,232,GB,55.83173,-4.43254 50859,Patna,2335,SCT,232,GB,55.36406,-4.50594 50867,Peebles,2335,SCT,232,GB,55.6519,-3.1888 50879,Pencaitland,2335,SCT,232,GB,55.90727,-2.8949 50881,Penicuik,2335,SCT,232,GB,55.83116,-3.22608 50898,Perth,2335,SCT,232,GB,56.39522,-3.43139 50899,Perth and Kinross,2335,SCT,232,GB,56.5,-3.75 50901,Peterculter,2335,SCT,232,GB,57.09929,-2.26588 50902,Peterhead,2335,SCT,232,GB,57.50584,-1.79806 50917,Pitlochry,2335,SCT,232,GB,56.70514,-3.73432 50918,Pitmedden,2335,SCT,232,GB,57.33691,-2.18022 50921,Pittenweem,2335,SCT,232,GB,56.21406,-2.72839 50922,Plains,2335,SCT,232,GB,55.88044,-3.92349 50923,Plean,2335,SCT,232,GB,56.06516,-3.87596 50930,Polbeth,2335,SCT,232,GB,55.86072,-3.54901 50933,Polmont,2335,SCT,232,GB,55.9905,-3.70737 50952,Port Bannatyne,2335,SCT,232,GB,55.8566,-5.06503 50953,Port Erroll,2335,SCT,232,GB,57.41427,-1.84596 50954,Port Glasgow,2335,SCT,232,GB,55.93464,-4.6895 50964,Portknockie,2335,SCT,232,GB,57.70248,-2.85989 50966,Portlethen,2335,SCT,232,GB,57.06942,-2.13246 50967,Portree,2335,SCT,232,GB,57.41288,-6.19418 50972,Portsoy,2335,SCT,232,GB,57.68144,-2.68956 50988,Prestonpans,2335,SCT,232,GB,55.95939,-2.98038 50990,Prestwick,2335,SCT,232,GB,55.48333,-4.61667 51012,Queensferry,2335,SCT,232,GB,55.99089,-3.39847 51035,Ratho,2335,SCT,232,GB,55.92164,-3.38028 51036,Ratho Station,2335,SCT,232,GB,55.9367,-3.3889 51050,Redding,2335,SCT,232,GB,55.98861,-3.7323 51051,Reddingmuirhead,2335,SCT,232,GB,55.98026,-3.74853 51060,Renfrew,2335,SCT,232,GB,55.87197,-4.39253 51061,Renfrewshire,2335,SCT,232,GB,55.83333,-4.5 51062,Renton,2335,SCT,232,GB,55.972,-4.58399 51072,Rhu,2335,SCT,232,GB,56.01667,-4.76667 51106,Rosehearty,2335,SCT,232,GB,57.697,-2.11322 51107,Rosewell,2335,SCT,232,GB,55.85075,-3.13625 51108,Roslin,2335,SCT,232,GB,55.85749,-3.16895 51109,Rosneath,2335,SCT,232,GB,56.00985,-4.80151 51114,Rosyth,2335,SCT,232,GB,56.03689,-3.438 51118,Rothes,2335,SCT,232,GB,57.52624,-3.20663 51119,Rothesay,2335,SCT,232,GB,55.83648,-5.05508 51120,Rothienorman,2335,SCT,232,GB,57.41145,-2.46455 51149,Rutherglen,2335,SCT,232,GB,55.82885,-4.21376 51163,Saint Andrews,2335,SCT,232,GB,56.33871,-2.79902 51166,Saint Boswells,2335,SCT,232,GB,55.57301,-2.6441 51169,Saint Cyrus,2335,SCT,232,GB,56.77504,-2.41553 51173,Saint Monans,2335,SCT,232,GB,56.20651,-2.76821 51183,Saline,2335,SCT,232,GB,56.11399,-3.57034 51185,Salsburgh,2335,SCT,232,GB,55.84277,-3.87264 51188,Saltcoats,2335,SCT,232,GB,55.63616,-4.78588 51192,Sandbank,2335,SCT,232,GB,55.98203,-4.94973 51197,Sandwick,2335,SCT,232,GB,60.0,-1.25 51199,Sanquhar,2335,SCT,232,GB,55.36527,-3.9216 51209,Scalloway,2335,SCT,232,GB,60.13832,-1.2769 51215,Scone,2335,SCT,232,GB,56.41942,-3.40507 51220,Seafield,2335,SCT,232,GB,55.87791,-3.58781 51235,Selkirk,2335,SCT,232,GB,55.54738,-2.83911 51274,Shetland Islands,2335,SCT,232,GB,60.33333,-1.33333 51276,Shieldhill,2335,SCT,232,GB,55.97277,-3.76788 51294,Shotts,2335,SCT,232,GB,55.81951,-3.79749 51321,Skelmorlie,2335,SCT,232,GB,55.8695,-4.88475 51328,Slamannan,2335,SCT,232,GB,55.93729,-3.83311 51334,Smithton,2335,SCT,232,GB,57.47956,-4.15141 51344,South Ayrshire,2335,SCT,232,GB,55.25,-4.66667 51357,South Lanarkshire,2335,SCT,232,GB,55.58333,-3.83333 51393,Springside,2335,SCT,232,GB,55.61514,-4.59062 51425,Stanley,2335,SCT,232,GB,56.4854,-3.45184 51438,Stenhousemuir,2335,SCT,232,GB,56.02676,-3.81462 51439,Stepps,2335,SCT,232,GB,55.88899,-4.1521 51441,Stevenston,2335,SCT,232,GB,55.6397,-4.75339 51445,Stewarton,2335,SCT,232,GB,55.67986,-4.51435 51452,Stirling,2335,SCT,232,GB,56.11532,-4.23386 51473,Stonehaven,2335,SCT,232,GB,56.96365,-2.21177 51475,Stonehouse,2335,SCT,232,GB,55.69435,-3.9878 51478,Stoneyburn,2335,SCT,232,GB,55.84371,-3.63862 51479,Stornoway,2335,SCT,232,GB,58.20925,-6.38649 51488,Stranraer,2335,SCT,232,GB,54.90234,-5.02731 51491,Strathaven,2335,SCT,232,GB,55.6771,-4.0668 51492,Strathblane,2335,SCT,232,GB,55.98596,-4.30658 51493,Strathpeffer,2335,SCT,232,GB,57.58522,-4.54195 51501,Stromness,2335,SCT,232,GB,58.96498,-3.29601 51540,Symington,2335,SCT,232,GB,55.55176,-4.55835 51547,Tain,2335,SCT,232,GB,57.80903,-4.05991 51558,Tarbert,2335,SCT,232,GB,55.86277,-5.41622 51559,Tarbolton,2335,SCT,232,GB,55.51292,-4.48648 51566,Tayport,2335,SCT,232,GB,56.44699,-2.87966 51589,The Scottish Borders,2335,SCT,232,GB,55.58333,-2.83333 51600,Thornhill,2335,SCT,232,GB,55.23333,-3.76667 51602,Thornliebank,2335,SCT,232,GB,55.80454,-4.31746 51603,Thornton,2335,SCT,232,GB,56.16667,-3.15 51615,Thurso,2335,SCT,232,GB,58.59271,-3.52594 51624,Tillicoultry,2335,SCT,232,GB,56.15251,-3.74015 51634,Tobermory,2335,SCT,232,GB,56.62198,-6.07231 51645,Torphins,2335,SCT,232,GB,57.10561,-2.62398 51648,Torrance,2335,SCT,232,GB,55.93995,-4.21025 51656,Townhill,2335,SCT,232,GB,56.0891,-3.43889 51659,Tranent,2335,SCT,232,GB,55.94439,-2.95412 51673,Troon,2335,SCT,232,GB,55.54359,-4.66335 51676,Tullibody,2335,SCT,232,GB,56.13364,-3.83835 51679,Turriff,2335,SCT,232,GB,57.5384,-2.45932 51681,Twechar,2335,SCT,232,GB,55.95415,-4.08219 51682,Tweedbank,2335,SCT,232,GB,55.60449,-2.76692 51690,Uddingston,2335,SCT,232,GB,55.81971,-4.08362 51693,Ullapool,2335,SCT,232,GB,57.89872,-5.16039 51713,Vale of Leven,2335,SCT,232,GB,55.97132,-4.57928 51718,Viewpark,2335,SCT,232,GB,55.82737,-4.0573 51769,Waterfoot,2335,SCT,232,GB,55.76938,-4.28372 51800,Wemyss Bay,2335,SCT,232,GB,55.87614,-4.8895 51810,West Calder,2335,SCT,232,GB,55.85188,-3.56981 51815,West Dunbartonshire,2335,SCT,232,GB,55.96667,-4.53333 51822,West Kilbride,2335,SCT,232,GB,55.69004,-4.85771 51825,West Linton,2335,SCT,232,GB,55.74972,-3.35607 51826,West Lothian,2335,SCT,232,GB,55.91667,-3.5 51843,Westhill,2335,SCT,232,GB,57.15263,-2.27966 51850,Westquarter,2335,SCT,232,GB,55.99142,-3.74016 51866,Whitburn,2335,SCT,232,GB,55.86667,-3.68333 51871,Whitecraig,2335,SCT,232,GB,55.91937,-3.04231 51875,Whitehills,2335,SCT,232,GB,57.6773,-2.57863 51890,Wick,2335,SCT,232,GB,58.43906,-3.09424 51919,Winchburgh,2335,SCT,232,GB,55.95795,-3.46464 51926,Windygates,2335,SCT,232,GB,56.19546,-3.05274 51942,Wishaw,2335,SCT,232,GB,55.76667,-3.91667 48162,Aberaeron,2338,WLS,232,GB,52.24247,-4.25871 48163,Abercanaid,2338,WLS,232,GB,51.72361,-3.36611 48164,Abercarn,2338,WLS,232,GB,51.64733,-3.13476 48166,Abercynon,2338,WLS,232,GB,51.64548,-3.32727 48167,Aberdare,2338,WLS,232,GB,51.71438,-3.44918 48172,Aberfan,2338,WLS,232,GB,51.68892,-3.34178 48175,Abergavenny,2338,WLS,232,GB,51.82098,-3.01743 48176,Abergele,2338,WLS,232,GB,53.28436,-3.5822 48177,Aberkenfig,2338,WLS,232,GB,51.54,-3.59556 48180,Aberporth,2338,WLS,232,GB,52.13248,-4.54173 48181,Abertillery,2338,WLS,232,GB,51.72981,-3.13432 48182,Abertridwr,2338,WLS,232,GB,51.59583,-3.26833 48183,Aberystwyth,2338,WLS,232,GB,52.41548,-4.08292 48245,Amlwch,2338,WLS,232,GB,53.40986,-4.34712 48246,Ammanford,2338,WLS,232,GB,51.79279,-3.98833 48250,Anglesey,2338,WLS,232,GB,53.25,-4.33333 48335,Bagillt,2338,WLS,232,GB,53.2654,-3.16551 48340,Bala,2338,WLS,232,GB,52.91111,-3.59722 48370,Bangor,2338,WLS,232,GB,53.22752,-4.12936 48384,Bargoed,2338,WLS,232,GB,51.68333,-3.23333 48393,Barmouth,2338,WLS,232,GB,52.72377,-4.05748 48413,Barry,2338,WLS,232,GB,51.39979,-3.2838 48441,Beaumaris,2338,WLS,232,GB,53.26315,-4.09233 48448,Beddau,2338,WLS,232,GB,51.55398,-3.35814 48451,Bedlinog,2338,WLS,232,GB,51.70432,-3.31306 48452,Bedwas,2338,WLS,232,GB,51.59183,-3.19886 48472,Benllech,2338,WLS,232,GB,53.32044,-4.22607 48481,Bethesda,2338,WLS,232,GB,53.1815,-4.05828 48484,Betws,2338,WLS,232,GB,51.56917,-3.58833 48485,Betws-y-Coed,2338,WLS,232,GB,53.09382,-3.80668 48533,Bishopston,2338,WLS,232,GB,51.5775,-4.04806 48553,Blackwood,2338,WLS,232,GB,51.66778,-3.2075 48555,Blaenau Gwent,2338,WLS,232,GB,51.75,-3.16667 48556,Blaenau-Ffestiniog,2338,WLS,232,GB,52.99464,-3.93697 48557,Blaenavon,2338,WLS,232,GB,51.77402,-3.08537 48558,Blaengwynfi,2338,WLS,232,GB,51.65623,-3.60371 48580,Bodedern,2338,WLS,232,GB,53.29232,-4.50303 48581,Bodelwyddan,2338,WLS,232,GB,53.26827,-3.50078 48613,Borth,2338,WLS,232,GB,52.48887,-4.05039 48633,Bow Street,2338,WLS,232,GB,52.44213,-4.02783 48670,Brecon,2338,WLS,232,GB,51.94612,-3.38887 48683,Bridgend,2338,WLS,232,GB,51.50583,-3.57722 48684,Bridgend county borough,2338,WLS,232,GB,51.55,-3.58333 48705,Briton Ferry,2338,WLS,232,GB,51.63106,-3.81898 48730,Broughton,2338,WLS,232,GB,53.16303,-2.99309 48737,Brymbo,2338,WLS,232,GB,53.06667,-3.06667 48738,Bryn,2338,WLS,232,GB,51.61639,-3.71167 48739,Brynamman,2338,WLS,232,GB,51.8,-3.86667 48740,Brynmawr,2338,WLS,232,GB,51.8,-3.18333 48741,Brynna,2338,WLS,232,GB,51.53845,-3.46378 48750,Buckley,2338,WLS,232,GB,53.16667,-3.08333 48756,Builth Wells,2338,WLS,232,GB,52.1494,-3.40469 48784,Burry Port,2338,WLS,232,GB,51.68435,-4.24687 48810,Caergwrle,2338,WLS,232,GB,53.10953,-3.03808 48811,Caerleon,2338,WLS,232,GB,51.60952,-2.95378 48812,Caernarfon,2338,WLS,232,GB,53.14126,-4.27016 48813,Caerphilly,2338,WLS,232,GB,51.57452,-3.218 48814,Caerphilly County Borough,2338,WLS,232,GB,51.66667,-3.16667 48815,Caerwent,2338,WLS,232,GB,51.6112,-2.76865 48824,Caldicot,2338,WLS,232,GB,51.58661,-2.75736 48854,Cardiff,2338,WLS,232,GB,51.48,-3.18 48855,Cardigan,2338,WLS,232,GB,52.08373,-4.66228 48862,Carmarthen,2338,WLS,232,GB,51.85552,-4.30535 48863,Carmarthenshire,2338,WLS,232,GB,51.83333,-4.16667 48901,Cefn Cribwr,2338,WLS,232,GB,51.53167,-3.65278 48902,Cemaes Bay,2338,WLS,232,GB,53.41211,-4.4519 48948,Chepstow,2338,WLS,232,GB,51.64087,-2.67683 48976,Chirk,2338,WLS,232,GB,52.93586,-3.05738 49005,City and County of Swansea,2338,WLS,232,GB,51.58333,-4.0 49042,Clydach,2338,WLS,232,GB,51.68333,-3.9 49057,Coedpoeth,2338,WLS,232,GB,53.05391,-3.06234 49060,Coity,2338,WLS,232,GB,51.522,-3.55531 49078,Colwyn Bay,2338,WLS,232,GB,53.29483,-3.72674 49093,Conwy,2338,WLS,232,GB,53.08333,-3.75 49122,County of Ceredigion,2338,WLS,232,GB,52.25,-4.0 49123,County of Flintshire,2338,WLS,232,GB,53.25,-3.16667 49129,Cowbridge,2338,WLS,232,GB,51.46028,-3.44167 49156,Criccieth,2338,WLS,232,GB,52.92053,-4.2346 49158,Crickhowell,2338,WLS,232,GB,51.85992,-3.13771 49162,Croeserw,2338,WLS,232,GB,51.64472,-3.64028 49165,Crofty,2338,WLS,232,GB,51.63448,-4.12937 49172,Cross Hands,2338,WLS,232,GB,51.79306,-4.0875 49189,Crumlin,2338,WLS,232,GB,51.67778,-3.13528 49191,Crymych,2338,WLS,232,GB,51.97361,-4.64722 49192,Crynant,2338,WLS,232,GB,51.72889,-3.74806 49215,Cwm,2338,WLS,232,GB,51.74,-3.18028 49216,Cwmafan,2338,WLS,232,GB,51.61671,-3.76205 49217,Cwmbach,2338,WLS,232,GB,51.70556,-3.40944 49218,Cwmbran,2338,WLS,232,GB,51.65446,-3.02281 49254,Deeside,2338,WLS,232,GB,53.20053,-3.03841 49255,Deganwy,2338,WLS,232,GB,53.30446,-3.82735 49256,Deiniolen,2338,WLS,232,GB,53.14819,-4.13185 49259,Denbigh,2338,WLS,232,GB,53.18333,-3.41667 49260,Denbighshire,2338,WLS,232,GB,53.08333,-3.33333 49271,Deri,2338,WLS,232,GB,51.70812,-3.26312 49285,Dinas Powys,2338,WLS,232,GB,51.43486,-3.21398 49300,Dolgellau,2338,WLS,232,GB,52.74222,-3.88611 49370,Dyffryn Ardudwy,2338,WLS,232,GB,52.77748,-4.06468 49372,Dyserth,2338,WLS,232,GB,53.30032,-3.41262 49431,Ebbw Vale,2338,WLS,232,GB,51.77714,-3.20792 49546,Ferndale,2338,WLS,232,GB,51.66056,-3.4475 49562,Fishguard,2338,WLS,232,GB,51.99376,-4.97631 49574,Flint,2338,WLS,232,GB,53.24488,-3.13231 49580,Fochriw,2338,WLS,232,GB,51.74003,-3.29861 49596,Four Crosses,2338,WLS,232,GB,52.75941,-3.08106 49619,Gaerwen,2338,WLS,232,GB,53.22112,-4.27362 49636,Gelligaer,2338,WLS,232,GB,51.66444,-3.25611 49641,Gilfach Goch,2338,WLS,232,GB,51.59213,-3.47296 49644,Gilwern,2338,WLS,232,GB,51.82475,-3.09355 49647,Glanamman,2338,WLS,232,GB,51.8,-3.93333 49648,Glandwr,2338,WLS,232,GB,51.92833,-4.63333 49666,Glyn-neath,2338,WLS,232,GB,51.7475,-3.61833 49667,Glyncorrwg,2338,WLS,232,GB,51.67944,-3.62806 49676,Goodwick,2338,WLS,232,GB,52.00491,-4.99511 49684,Gorseinon,2338,WLS,232,GB,51.66931,-4.04163 49693,Govilon,2338,WLS,232,GB,51.81928,-3.06295 49740,Greenfield,2338,WLS,232,GB,53.28333,-3.21667 49749,Gresford,2338,WLS,232,GB,53.08539,-2.97062 49756,Gronant,2338,WLS,232,GB,53.33669,-3.36031 49759,Grovesend,2338,WLS,232,GB,51.68472,-4.03833 49763,Guilsfield,2338,WLS,232,GB,52.69634,-3.15712 49769,Gwynedd,2338,WLS,232,GB,52.83333,-3.91667 49807,Harlech,2338,WLS,232,GB,52.85941,-4.10831 49847,Haverfordwest,2338,WLS,232,GB,51.80169,-4.96914 49850,Hawarden,2338,WLS,232,GB,53.18478,-3.02578 49858,Hay,2338,WLS,232,GB,52.07049,-3.12741 49902,Hengoed,2338,WLS,232,GB,51.65083,-3.23167 49905,Henllan,2338,WLS,232,GB,53.2,-3.46667 49950,Hirwaun,2338,WLS,232,GB,51.73917,-3.51028 49971,Holyhead,2338,WLS,232,GB,53.30621,-4.63211 49973,Holywell,2338,WLS,232,GB,53.27466,-3.22895 49980,Hook,2338,WLS,232,GB,51.765,-4.93167 49983,Hope,2338,WLS,232,GB,53.11667,-3.03333 50022,Hundleton,2338,WLS,232,GB,51.66694,-4.94917 50095,Johnston,2338,WLS,232,GB,51.75556,-4.99667 50138,Kidwelly,2338,WLS,232,GB,51.73639,-4.30333 50143,Kilgetty,2338,WLS,232,GB,51.73203,-4.71983 50219,Knighton,2338,WLS,232,GB,52.34251,-3.04708 50233,Lampeter,2338,WLS,232,GB,52.11285,-4.08039 50273,Leeswood,2338,WLS,232,GB,53.13347,-3.09466 50290,Letterston,2338,WLS,232,GB,51.92757,-4.99141 50340,Llanarth,2338,WLS,232,GB,52.19424,-4.30811 50341,Llanbedr,2338,WLS,232,GB,52.81667,-4.1 50342,Llanberis,2338,WLS,232,GB,53.11809,-4.12923 50343,Llanbradach,2338,WLS,232,GB,51.60639,-3.23028 50344,Llandeilo,2338,WLS,232,GB,51.88459,-3.99154 50345,Llandovery,2338,WLS,232,GB,51.99415,-3.79637 50346,Llandrindod Wells,2338,WLS,232,GB,52.24164,-3.37868 50347,Llandudno,2338,WLS,232,GB,53.32498,-3.83148 50348,Llandybie,2338,WLS,232,GB,51.82044,-4.0071 50349,Llandysul,2338,WLS,232,GB,52.04166,-4.30909 50350,Llanelli,2338,WLS,232,GB,51.68195,-4.16191 50351,Llanerchymedd,2338,WLS,232,GB,53.33055,-4.377 50352,Llanfair Caereinion,2338,WLS,232,GB,52.6479,-3.32668 50353,Llanfairfechan,2338,WLS,232,GB,53.25779,-3.97423 50354,Llanfairpwllgwyngyll,2338,WLS,232,GB,53.22141,-4.20329 50355,Llanfyllin,2338,WLS,232,GB,52.7657,-3.27187 50356,Llangefni,2338,WLS,232,GB,53.25561,-4.31063 50357,Llangoed,2338,WLS,232,GB,53.2942,-4.08772 50358,Llangollen,2338,WLS,232,GB,52.96829,-3.17127 50359,Llangwm,2338,WLS,232,GB,51.74833,-4.91361 50360,Llangybi,2338,WLS,232,GB,51.66583,-2.90806 50361,Llangynidr,2338,WLS,232,GB,51.8673,-3.22762 50362,Llanharan,2338,WLS,232,GB,51.53805,-3.43906 50363,Llanharry,2338,WLS,232,GB,51.51422,-3.4324 50364,Llanidloes,2338,WLS,232,GB,52.44977,-3.53997 50365,Llanilar,2338,WLS,232,GB,52.35657,-4.02574 50366,Llanrhaeadr-ym-Mochnant,2338,WLS,232,GB,52.82507,-3.30225 50367,Llanrug,2338,WLS,232,GB,53.14788,-4.19596 50368,Llanrwst,2338,WLS,232,GB,53.14021,-3.79527 50369,Llansantffraid Glan Conwy,2338,WLS,232,GB,53.26667,-3.8 50370,Llansteffan,2338,WLS,232,GB,51.77222,-4.39139 50371,Llantrisant,2338,WLS,232,GB,51.54028,-3.37389 50372,Llantwit Fardre,2338,WLS,232,GB,51.5546,-3.33241 50373,Llantwit Major,2338,WLS,232,GB,51.4107,-3.48632 50374,Llwynypia,2338,WLS,232,GB,51.63333,-3.45 50460,Machen,2338,WLS,232,GB,51.59599,-3.1419 50461,Machynlleth,2338,WLS,232,GB,52.59097,-3.85051 50465,Maesteg,2338,WLS,232,GB,51.60926,-3.65823 50470,Magor,2338,WLS,232,GB,51.57944,-2.83139 50493,Marchwiel,2338,WLS,232,GB,53.0239,-2.96106 50518,Marshfield,2338,WLS,232,GB,51.53389,-3.07306 50545,Menai Bridge,2338,WLS,232,GB,53.22775,-4.16926 50554,Merthyr Tydfil,2338,WLS,232,GB,51.74794,-3.37779 50555,Merthyr Tydfil County Borough,2338,WLS,232,GB,51.75,-3.33333 50582,Milford Haven,2338,WLS,232,GB,51.71278,-5.0341 50610,Moelfre,2338,WLS,232,GB,53.35228,-4.23734 50614,Mold,2338,WLS,232,GB,53.16674,-3.14143 50619,Monmouth,2338,WLS,232,GB,51.81265,-2.71363 50620,Monmouthshire,2338,WLS,232,GB,51.75,-2.83333 50636,Mostyn,2338,WLS,232,GB,53.31271,-3.26765 50642,Mountain Ash,2338,WLS,232,GB,51.68361,-3.38008 50664,Narberth,2338,WLS,232,GB,51.79784,-4.74275 50667,Neath,2338,WLS,232,GB,51.66317,-3.80443 50668,Neath Port Talbot,2338,WLS,232,GB,51.66667,-3.75 50672,Nefyn,2338,WLS,232,GB,52.93538,-4.5225 50675,Nelson,2338,WLS,232,GB,51.65333,-3.28444 50694,New Quay,2338,WLS,232,GB,52.21515,-4.35887 50697,New Tredegar,2338,WLS,232,GB,51.72051,-3.2413 50703,Newbridge,2338,WLS,232,GB,51.66667,-3.13333 50708,Newcastle Emlyn,2338,WLS,232,GB,52.04056,-4.4667 50720,Newport,2338,WLS,232,GB,51.58774,-2.99835 50737,Newtown,2338,WLS,232,GB,52.51667,-3.3 50742,Neyland,2338,WLS,232,GB,51.71014,-4.95155 50779,Northop,2338,WLS,232,GB,53.20692,-3.13277 50799,Ogmore Vale,2338,WLS,232,GB,51.6023,-3.54217 50836,Overton,2338,WLS,232,GB,52.96667,-2.93333 50871,Pembroke,2338,WLS,232,GB,51.67464,-4.91286 50872,Pembroke Dock,2338,WLS,232,GB,51.69161,-4.94036 50873,Pembrokeshire,2338,WLS,232,GB,51.83333,-4.91667 50875,Pen-clawdd,2338,WLS,232,GB,51.64028,-4.09917 50876,Penally,2338,WLS,232,GB,51.65986,-4.72399 50877,Penarth,2338,WLS,232,GB,51.4386,-3.17342 50878,Pencader,2338,WLS,232,GB,52.0008,-4.26575 50880,Pencoed,2338,WLS,232,GB,51.52371,-3.50016 50884,Penmaenmawr,2338,WLS,232,GB,53.26667,-3.93333 50885,Penparcau,2338,WLS,232,GB,52.40333,-4.07417 50886,Penrhyndeudraeth,2338,WLS,232,GB,52.93333,-4.06667 50890,Pentre,2338,WLS,232,GB,51.65429,-3.49133 50891,Pentyrch,2338,WLS,232,GB,51.52889,-3.295 50892,Penyffordd,2338,WLS,232,GB,53.14829,-3.04584 50893,Penygroes,2338,WLS,232,GB,53.05502,-4.28535 50936,Pont Rhyd-y-cyff,2338,WLS,232,GB,51.58694,-3.63639 50937,Pontarddulais,2338,WLS,232,GB,51.71423,-4.03859 50941,Pontlliw,2338,WLS,232,GB,51.69139,-4.01056 50942,Pontyates,2338,WLS,232,GB,51.75182,-4.21718 50943,Pontyberem,2338,WLS,232,GB,51.77826,-4.1689 50944,Pontyclun,2338,WLS,232,GB,51.52162,-3.39145 50945,Pontycymer,2338,WLS,232,GB,51.61118,-3.58421 50946,Pontypool,2338,WLS,232,GB,51.70111,-3.04444 50947,Pontypridd,2338,WLS,232,GB,51.6021,-3.34211 50955,Port Talbot,2338,WLS,232,GB,51.59241,-3.78019 50960,Porthcawl,2338,WLS,232,GB,51.47903,-3.70362 50962,Porthmadog,2338,WLS,232,GB,52.92924,-4.13137 50984,Prestatyn,2338,WLS,232,GB,53.33748,-3.40776 50986,Presteigne,2338,WLS,232,GB,52.27183,-3.00579 50991,Price Town,2338,WLS,232,GB,51.61832,-3.53662 51008,Pwllheli,2338,WLS,232,GB,52.8899,-4.41451 51009,Pyle,2338,WLS,232,GB,51.51667,-3.7 51021,Radyr,2338,WLS,232,GB,51.51864,-3.25829 51022,Raglan,2338,WLS,232,GB,51.765,-2.85331 51064,Resolven,2338,WLS,232,GB,51.71193,-3.69745 51066,Rhayader,2338,WLS,232,GB,52.30154,-3.51146 51067,Rhondda,2338,WLS,232,GB,51.65896,-3.44885 51068,Rhondda Cynon Taf,2338,WLS,232,GB,51.66667,-3.5 51069,Rhoose,2338,WLS,232,GB,51.38818,-3.3543 51070,Rhosllanerchrugog,2338,WLS,232,GB,53.00974,-3.05814 51071,Rhosneigr,2338,WLS,232,GB,53.23186,-4.5148 51073,Rhuddlan,2338,WLS,232,GB,53.29203,-3.46996 51074,Rhyl,2338,WLS,232,GB,53.31929,-3.49228 51075,Rhymney,2338,WLS,232,GB,51.75998,-3.28553 51088,Risca,2338,WLS,232,GB,51.60799,-3.10081 51100,Rogiet,2338,WLS,232,GB,51.58854,-2.77868 51112,Rossett,2338,WLS,232,GB,53.10921,-2.94478 51136,Ruabon,2338,WLS,232,GB,52.9878,-3.03883 51150,Ruthin,2338,WLS,232,GB,53.11368,-3.31782 51164,Saint Asaph,2338,WLS,232,GB,53.25815,-3.44524 51167,Saint Clears,2338,WLS,232,GB,51.81989,-4.49783 51170,Saint Davids,2338,WLS,232,GB,51.88094,-5.26554 51202,Saundersfoot,2338,WLS,232,GB,51.70945,-4.70215 51239,Seven Sisters,2338,WLS,232,GB,51.76667,-3.71667 51315,Sir Powys,2338,WLS,232,GB,52.33333,-3.41667 51375,Southgate,2338,WLS,232,GB,51.56944,-4.08972 51389,Spittal,2338,WLS,232,GB,51.86889,-4.9425 51448,Steynton,2338,WLS,232,GB,51.72917,-5.01722 51532,Swansea,2338,WLS,232,GB,51.62079,-3.94323 51546,Taibach,2338,WLS,232,GB,51.58333,-3.76667 51549,Tal-y-bont,2338,WLS,232,GB,52.77471,-4.09224 51550,Talgarth,2338,WLS,232,GB,51.99588,-3.23205 51551,Talysarn,2338,WLS,232,GB,53.05365,-4.25767 51573,Templeton,2338,WLS,232,GB,51.77194,-4.73778 51576,Tenby,2338,WLS,232,GB,51.67279,-4.70447 51611,Three Crosses,2338,WLS,232,GB,51.62865,-4.06263 51629,Tintern,2338,WLS,232,GB,51.69677,-2.68142 51641,Tonypandy,2338,WLS,232,GB,51.62202,-3.45544 51642,Tonyrefail,2338,WLS,232,GB,51.58402,-3.43041 51644,Torfaen County Borough,2338,WLS,232,GB,51.70146,-3.05136 51660,Trawsfynydd,2338,WLS,232,GB,52.90212,-3.92289 51661,Tredegar,2338,WLS,232,GB,51.77251,-3.24679 51663,Trefnant,2338,WLS,232,GB,53.22526,-3.4203 51664,Tregaron,2338,WLS,232,GB,52.2195,-3.93295 51665,Tregarth,2338,WLS,232,GB,53.19012,-4.0878 51666,Treharris,2338,WLS,232,GB,51.66457,-3.30725 51667,Treorchy,2338,WLS,232,GB,51.65958,-3.50587 51668,Treuddyn,2338,WLS,232,GB,53.1148,-3.12003 51671,Trimsaran,2338,WLS,232,GB,51.71988,-4.24168 51677,Tumble,2338,WLS,232,GB,51.78361,-4.10972 51684,Tycroes,2338,WLS,232,GB,51.77806,-4.02 51688,Tywyn,2338,WLS,232,GB,52.58578,-4.09276 51696,Undy,2338,WLS,232,GB,51.57526,-2.81453 51710,Usk,2338,WLS,232,GB,51.70347,-2.90332 51712,Vale of Glamorgan,2338,WLS,232,GB,51.41667,-3.41667 51714,Valley,2338,WLS,232,GB,53.2849,-4.56644 51717,Victoria,2338,WLS,232,GB,51.75,-3.2 51794,Welshpool,2338,WLS,232,GB,52.65973,-3.1471 51803,Wenvoe,2338,WLS,232,GB,51.44776,-3.26369 51877,Whitland,2338,WLS,232,GB,51.81889,-4.61528 51888,Wick,2338,WLS,232,GB,51.43944,-3.54944 51998,Wrexham,2338,WLS,232,GB,53.0,-3.0 52008,Y Felinheli,2338,WLS,232,GB,53.18737,-4.20476 52023,Ynysybwl,2338,WLS,232,GB,51.63922,-3.36036 52027,Ystalyfera,2338,WLS,232,GB,51.76716,-3.78082 age-PG16-v1.5.0-rc0/regress/age_load/data/countries.csv000066400000000000000000000146521454606241200224560ustar00rootroot00000000000000id,name,iso3,iso2,numeric_code,phone_code,capital,currency,currency_symbol,tld,native,region,subregion,latitude,longitude,emoji,emojiU 2,Aland Islands,ALA,AX,248,+358-18,Mariehamn,EUR,€,.ax,Åland,Europe,Northern Europe,60.116667,19.9,🇦🇽,U+1F1E6 U+1F1FD 3,Albania,ALB,AL,8,355,Tirana,ALL,Lek,.al,Shqipëria,Europe,Southern Europe,41.0,20.0,🇦🇱,U+1F1E6 U+1F1F1 6,Andorra,AND,AD,20,376,Andorra la Vella,EUR,€,.ad,Andorra,Europe,Southern Europe,42.5,1.5,🇦🇩,U+1F1E6 U+1F1E9 15,Austria,AUT,AT,40,43,Vienna,EUR,€,.at,Österreich,Europe,Western Europe,47.33333333,13.33333333,🇦🇹,U+1F1E6 U+1F1F9 21,Belarus,BLR,BY,112,375,Minsk,BYN,Br,.by,Белару́сь,Europe,Eastern Europe,53.0,28.0,🇧🇾,U+1F1E7 U+1F1FE 22,Belgium,BEL,BE,56,32,Brussels,EUR,€,.be,België,Europe,Western Europe,50.83333333,4.0,🇧🇪,U+1F1E7 U+1F1EA 28,Bosnia and Herzegovina,BIH,BA,70,387,Sarajevo,BAM,KM,.ba,Bosna i Hercegovina,Europe,Southern Europe,44.0,18.0,🇧🇦,U+1F1E7 U+1F1E6 34,Bulgaria,BGR,BG,100,359,Sofia,BGN,Лв.,.bg,България,Europe,Eastern Europe,43.0,25.0,🇧🇬,U+1F1E7 U+1F1EC 55,Croatia,HRV,HR,191,385,Zagreb,HRK,kn,.hr,Hrvatska,Europe,Southern Europe,45.16666666,15.5,🇭🇷,U+1F1ED U+1F1F7 57,Cyprus,CYP,CY,196,357,Nicosia,EUR,€,.cy,Κύπρος,Europe,Southern Europe,35.0,33.0,🇨🇾,U+1F1E8 U+1F1FE 58,Czech Republic,CZE,CZ,203,420,Prague,CZK,Kč,.cz,Česká republika,Europe,Eastern Europe,49.75,15.5,🇨🇿,U+1F1E8 U+1F1FF 59,Denmark,DNK,DK,208,45,Copenhagen,DKK,Kr.,.dk,Danmark,Europe,Northern Europe,56.0,10.0,🇩🇰,U+1F1E9 U+1F1F0 69,Estonia,EST,EE,233,372,Tallinn,EUR,€,.ee,Eesti,Europe,Northern Europe,59.0,26.0,🇪🇪,U+1F1EA U+1F1EA 72,Faroe Islands,FRO,FO,234,298,Torshavn,DKK,Kr.,.fo,Føroyar,Europe,Northern Europe,62.0,-7.0,🇫🇴,U+1F1EB U+1F1F4 74,Finland,FIN,FI,246,358,Helsinki,EUR,€,.fi,Suomi,Europe,Northern Europe,64.0,26.0,🇫🇮,U+1F1EB U+1F1EE 75,France,FRA,FR,250,33,Paris,EUR,€,.fr,France,Europe,Western Europe,46.0,2.0,🇫🇷,U+1F1EB U+1F1F7 82,Germany,DEU,DE,276,49,Berlin,EUR,€,.de,Deutschland,Europe,Western Europe,51.0,9.0,🇩🇪,U+1F1E9 U+1F1EA 84,Gibraltar,GIB,GI,292,350,Gibraltar,GIP,£,.gi,Gibraltar,Europe,Southern Europe,36.13333333,-5.35,🇬🇮,U+1F1EC U+1F1EE 85,Greece,GRC,GR,300,30,Athens,EUR,€,.gr,Ελλάδα,Europe,Southern Europe,39.0,22.0,🇬🇷,U+1F1EC U+1F1F7 91,Guernsey and Alderney,GGY,GG,831,+44-1481,St Peter Port,GBP,£,.gg,Guernsey,Europe,Northern Europe,49.46666666,-2.58333333,🇬🇬,U+1F1EC U+1F1EC 99,Hungary,HUN,HU,348,36,Budapest,HUF,Ft,.hu,Magyarország,Europe,Eastern Europe,47.0,20.0,🇭🇺,U+1F1ED U+1F1FA 100,Iceland,ISL,IS,352,354,Reykjavik,ISK,kr,.is,Ísland,Europe,Northern Europe,65.0,-18.0,🇮🇸,U+1F1EE U+1F1F8 105,Ireland,IRL,IE,372,353,Dublin,EUR,€,.ie,Éire,Europe,Northern Europe,53.0,-8.0,🇮🇪,U+1F1EE U+1F1EA 107,Italy,ITA,IT,380,39,Rome,EUR,€,.it,Italia,Europe,Southern Europe,42.83333333,12.83333333,🇮🇹,U+1F1EE U+1F1F9 110,Jersey,JEY,JE,832,+44-1534,Saint Helier,GBP,£,.je,Jersey,Europe,Northern Europe,49.25,-2.16666666,🇯🇪,U+1F1EF U+1F1EA 248,Kosovo,XKX,XK,926,383,Pristina,EUR,€,.xk,Republika e Kosovës,Europe,Eastern Europe,42.5612909,20.3403035,🇽🇰,U+1F1FD U+1F1F0 120,Latvia,LVA,LV,428,371,Riga,EUR,€,.lv,Latvija,Europe,Northern Europe,57.0,25.0,🇱🇻,U+1F1F1 U+1F1FB 125,Liechtenstein,LIE,LI,438,423,Vaduz,CHF,CHf,.li,Liechtenstein,Europe,Western Europe,47.26666666,9.53333333,🇱🇮,U+1F1F1 U+1F1EE 126,Lithuania,LTU,LT,440,370,Vilnius,EUR,€,.lt,Lietuva,Europe,Northern Europe,56.0,24.0,🇱🇹,U+1F1F1 U+1F1F9 127,Luxembourg,LUX,LU,442,352,Luxembourg,EUR,€,.lu,Luxembourg,Europe,Western Europe,49.75,6.16666666,🇱🇺,U+1F1F1 U+1F1FA 129,Macedonia,MKD,MK,807,389,Skopje,MKD,ден,.mk,Северна Македонија,Europe,Southern Europe,41.83333333,22.0,🇲🇰,U+1F1F2 U+1F1F0 135,Malta,MLT,MT,470,356,Valletta,EUR,€,.mt,Malta,Europe,Southern Europe,35.83333333,14.58333333,🇲🇹,U+1F1F2 U+1F1F9 136,Man (Isle of),IMN,IM,833,+44-1624,Douglas Isle of Man,GBP,£,.im,Isle of Man,Europe,Northern Europe,54.25,-4.5,🇮🇲,U+1F1EE U+1F1F2 144,Moldova,MDA,MD,498,373,Chisinau,MDL,L,.md,Moldova,Europe,Eastern Europe,47.0,29.0,🇲🇩,U+1F1F2 U+1F1E9 145,Monaco,MCO,MC,492,377,Monaco,EUR,€,.mc,Monaco,Europe,Western Europe,43.73333333,7.4,🇲🇨,U+1F1F2 U+1F1E8 147,Montenegro,MNE,ME,499,382,Podgorica,EUR,€,.me,Црна Гора,Europe,Southern Europe,42.5,19.3,🇲🇪,U+1F1F2 U+1F1EA 156,Netherlands,NLD,NL,528,31,Amsterdam,EUR,€,.nl,Nederland,Europe,Western Europe,52.5,5.75,🇳🇱,U+1F1F3 U+1F1F1 165,Norway,NOR,NO,578,47,Oslo,NOK,kr,.no,Norge,Europe,Northern Europe,62.0,10.0,🇳🇴,U+1F1F3 U+1F1F4 176,Poland,POL,PL,616,48,Warsaw,PLN,zł,.pl,Polska,Europe,Eastern Europe,52.0,20.0,🇵🇱,U+1F1F5 U+1F1F1 177,Portugal,PRT,PT,620,351,Lisbon,EUR,€,.pt,Portugal,Europe,Southern Europe,39.5,-8.0,🇵🇹,U+1F1F5 U+1F1F9 181,Romania,ROU,RO,642,40,Bucharest,RON,lei,.ro,România,Europe,Eastern Europe,46.0,25.0,🇷🇴,U+1F1F7 U+1F1F4 182,Russia,RUS,RU,643,7,Moscow,RUB,₽,.ru,Россия,Europe,Eastern Europe,60.0,100.0,🇷🇺,U+1F1F7 U+1F1FA 192,San Marino,SMR,SM,674,378,San Marino,EUR,€,.sm,San Marino,Europe,Southern Europe,43.76666666,12.41666666,🇸🇲,U+1F1F8 U+1F1F2 196,Serbia,SRB,RS,688,381,Belgrade,RSD,din,.rs,Србија,Europe,Southern Europe,44.0,21.0,🇷🇸,U+1F1F7 U+1F1F8 200,Slovakia,SVK,SK,703,421,Bratislava,EUR,€,.sk,Slovensko,Europe,Eastern Europe,48.66666666,19.5,🇸🇰,U+1F1F8 U+1F1F0 201,Slovenia,SVN,SI,705,386,Ljubljana,EUR,€,.si,Slovenija,Europe,Southern Europe,46.11666666,14.81666666,🇸🇮,U+1F1F8 U+1F1EE 207,Spain,ESP,ES,724,34,Madrid,EUR,€,.es,España,Europe,Southern Europe,40.0,-4.0,🇪🇸,U+1F1EA U+1F1F8 211,Svalbard And Jan Mayen Islands,SJM,SJ,744,47,Longyearbyen,NOK,kr,.sj,Svalbard og Jan Mayen,Europe,Northern Europe,78.0,20.0,🇸🇯,U+1F1F8 U+1F1EF 213,Sweden,SWE,SE,752,46,Stockholm,SEK,kr,.se,Sverige,Europe,Northern Europe,62.0,15.0,🇸🇪,U+1F1F8 U+1F1EA 214,Switzerland,CHE,CH,756,41,Bern,CHF,CHf,.ch,Schweiz,Europe,Western Europe,47.0,8.0,🇨🇭,U+1F1E8 U+1F1ED 230,Ukraine,UKR,UA,804,380,Kiev,UAH,₴,.ua,Україна,Europe,Eastern Europe,49.0,32.0,🇺🇦,U+1F1FA U+1F1E6 232,United Kingdom,GBR,GB,826,44,London,GBP,£,.uk,United Kingdom,Europe,Northern Europe,54.0,-2.0,🇬🇧,U+1F1EC U+1F1E7 238,Vatican City State (Holy See),VAT,VA,336,379,Vatican City,EUR,€,.va,Vaticano,Europe,Southern Europe,41.9,12.45,🇻🇦,U+1F1FB U+1F1E6 age-PG16-v1.5.0-rc0/regress/age_load/data/edges.csv000066400000000000000000062314641454606241200215420ustar00rootroot00000000000000start_id,start_vertex_type,end_id,end_vertex_type 153,City,3,Country 154,City,3,Country 170,City,3,Country 180,City,3,Country 186,City,3,Country 191,City,3,Country 280,City,3,Country 219,City,3,Country 238,City,3,Country 242,City,3,Country 253,City,3,Country 258,City,3,Country 273,City,3,Country 155,City,3,Country 165,City,3,Country 176,City,3,Country 193,City,3,Country 194,City,3,Country 209,City,3,Country 236,City,3,Country 243,City,3,Country 246,City,3,Country 256,City,3,Country 272,City,3,Country 159,City,3,Country 168,City,3,Country 185,City,3,Country 197,City,3,Country 198,City,3,Country 203,City,3,Country 214,City,3,Country 250,City,3,Country 265,City,3,Country 269,City,3,Country 152,City,3,Country 157,City,3,Country 160,City,3,Country 174,City,3,Country 179,City,3,Country 196,City,3,Country 200,City,3,Country 201,City,3,Country 227,City,3,Country 234,City,3,Country 235,City,3,Country 241,City,3,Country 254,City,3,Country 158,City,3,Country 164,City,3,Country 172,City,3,Country 177,City,3,Country 183,City,3,Country 187,City,3,Country 204,City,3,Country 205,City,3,Country 220,City,3,Country 221,City,3,Country 225,City,3,Country 231,City,3,Country 240,City,3,Country 270,City,3,Country 156,City,3,Country 166,City,3,Country 173,City,3,Country 182,City,3,Country 192,City,3,Country 199,City,3,Country 212,City,3,Country 223,City,3,Country 226,City,3,Country 228,City,3,Country 230,City,3,Country 237,City,3,Country 245,City,3,Country 249,City,3,Country 275,City,3,Country 278,City,3,Country 151,City,3,Country 215,City,3,Country 217,City,3,Country 247,City,3,Country 251,City,3,Country 169,City,3,Country 171,City,3,Country 178,City,3,Country 218,City,3,Country 222,City,3,Country 224,City,3,Country 229,City,3,Country 232,City,3,Country 261,City,3,Country 252,City,3,Country 262,City,3,Country 267,City,3,Country 175,City,3,Country 181,City,3,Country 188,City,3,Country 202,City,3,Country 211,City,3,Country 239,City,3,Country 255,City,3,Country 257,City,3,Country 266,City,3,Country 274,City,3,Country 279,City,3,Country 163,City,3,Country 190,City,3,Country 207,City,3,Country 208,City,3,Country 213,City,3,Country 248,City,3,Country 259,City,3,Country 260,City,3,Country 268,City,3,Country 271,City,3,Country 277,City,3,Country 161,City,3,Country 162,City,3,Country 167,City,3,Country 184,City,3,Country 189,City,3,Country 195,City,3,Country 206,City,3,Country 210,City,3,Country 216,City,3,Country 233,City,3,Country 244,City,3,Country 263,City,3,Country 264,City,3,Country 276,City,3,Country 1,City,6,Country 3,City,6,Country 4,City,6,Country 5,City,6,Country 7,City,6,Country 10,City,6,Country 2,City,6,Country 9,City,6,Country 6,City,6,Country 8,City,6,Country 1657,City,15,Country 1671,City,15,Country 1673,City,15,Country 1734,City,15,Country 1737,City,15,Country 1743,City,15,Country 1765,City,15,Country 1787,City,15,Country 1798,City,15,Country 1811,City,15,Country 1839,City,15,Country 1840,City,15,Country 1843,City,15,Country 1859,City,15,Country 1868,City,15,Country 1888,City,15,Country 1902,City,15,Country 1924,City,15,Country 1925,City,15,Country 1926,City,15,Country 1934,City,15,Country 2005,City,15,Country 2014,City,15,Country 2064,City,15,Country 2104,City,15,Country 2111,City,15,Country 2141,City,15,Country 2142,City,15,Country 2197,City,15,Country 2198,City,15,Country 2203,City,15,Country 2222,City,15,Country 2228,City,15,Country 2259,City,15,Country 2263,City,15,Country 2278,City,15,Country 2290,City,15,Country 2330,City,15,Country 2332,City,15,Country 2351,City,15,Country 2362,City,15,Country 2370,City,15,Country 2377,City,15,Country 2381,City,15,Country 2390,City,15,Country 2418,City,15,Country 2442,City,15,Country 2454,City,15,Country 2456,City,15,Country 2460,City,15,Country 2467,City,15,Country 2469,City,15,Country 2509,City,15,Country 2487,City,15,Country 2504,City,15,Country 2523,City,15,Country 2524,City,15,Country 2568,City,15,Country 2606,City,15,Country 2608,City,15,Country 2611,City,15,Country 2614,City,15,Country 2622,City,15,Country 2631,City,15,Country 2654,City,15,Country 2661,City,15,Country 2662,City,15,Country 2664,City,15,Country 2666,City,15,Country 2669,City,15,Country 2705,City,15,Country 2718,City,15,Country 2722,City,15,Country 2745,City,15,Country 2748,City,15,Country 2730,City,15,Country 2759,City,15,Country 2760,City,15,Country 2776,City,15,Country 2787,City,15,Country 2790,City,15,Country 2792,City,15,Country 2795,City,15,Country 2811,City,15,Country 2813,City,15,Country 2814,City,15,Country 2816,City,15,Country 2819,City,15,Country 2834,City,15,Country 2848,City,15,Country 2859,City,15,Country 2871,City,15,Country 2873,City,15,Country 2884,City,15,Country 2896,City,15,Country 2898,City,15,Country 2899,City,15,Country 2905,City,15,Country 2921,City,15,Country 2922,City,15,Country 2924,City,15,Country 2968,City,15,Country 2972,City,15,Country 2975,City,15,Country 2985,City,15,Country 3005,City,15,Country 3013,City,15,Country 3027,City,15,Country 3034,City,15,Country 3035,City,15,Country 3036,City,15,Country 3109,City,15,Country 3111,City,15,Country 3070,City,15,Country 3098,City,15,Country 3129,City,15,Country 3156,City,15,Country 3190,City,15,Country 3197,City,15,Country 3198,City,15,Country 3204,City,15,Country 3213,City,15,Country 3216,City,15,Country 3220,City,15,Country 3221,City,15,Country 3240,City,15,Country 3253,City,15,Country 3297,City,15,Country 3305,City,15,Country 3309,City,15,Country 3353,City,15,Country 3357,City,15,Country 3362,City,15,Country 3424,City,15,Country 3449,City,15,Country 3451,City,15,Country 3456,City,15,Country 3492,City,15,Country 3509,City,15,Country 3516,City,15,Country 3530,City,15,Country 3535,City,15,Country 3536,City,15,Country 3550,City,15,Country 3568,City,15,Country 3605,City,15,Country 3615,City,15,Country 3630,City,15,Country 3652,City,15,Country 3654,City,15,Country 3666,City,15,Country 3737,City,15,Country 3756,City,15,Country 3757,City,15,Country 3758,City,15,Country 3767,City,15,Country 3791,City,15,Country 3809,City,15,Country 3810,City,15,Country 3823,City,15,Country 3826,City,15,Country 3838,City,15,Country 3859,City,15,Country 3850,City,15,Country 3866,City,15,Country 3887,City,15,Country 3890,City,15,Country 143783,City,15,Country 1646,City,15,Country 1668,City,15,Country 1679,City,15,Country 1681,City,15,Country 1706,City,15,Country 143785,City,15,Country 143786,City,15,Country 143787,City,15,Country 1733,City,15,Country 1746,City,15,Country 1755,City,15,Country 1781,City,15,Country 1788,City,15,Country 1816,City,15,Country 1833,City,15,Country 1834,City,15,Country 1838,City,15,Country 143791,City,15,Country 1854,City,15,Country 1871,City,15,Country 1866,City,15,Country 1886,City,15,Country 1890,City,15,Country 1894,City,15,Country 143792,City,15,Country 143793,City,15,Country 1957,City,15,Country 143794,City,15,Country 1966,City,15,Country 1967,City,15,Country 1969,City,15,Country 1970,City,15,Country 1971,City,15,Country 2998,City,15,Country 1976,City,15,Country 1980,City,15,Country 1981,City,15,Country 1988,City,15,Country 1989,City,15,Country 1997,City,15,Country 2033,City,15,Country 143797,City,15,Country 2015,City,15,Country 2021,City,15,Country 2022,City,15,Country 2024,City,15,Country 2036,City,15,Country 2043,City,15,Country 2046,City,15,Country 143800,City,15,Country 143801,City,15,Country 143802,City,15,Country 2083,City,15,Country 2088,City,15,Country 2091,City,15,Country 2093,City,15,Country 143803,City,15,Country 2099,City,15,Country 143806,City,15,Country 2113,City,15,Country 2124,City,15,Country 2130,City,15,Country 2135,City,15,Country 2155,City,15,Country 2178,City,15,Country 2182,City,15,Country 2258,City,15,Country 2271,City,15,Country 3008,City,15,Country 143807,City,15,Country 2282,City,15,Country 2319,City,15,Country 2344,City,15,Country 2348,City,15,Country 2367,City,15,Country 2402,City,15,Country 2420,City,15,Country 2424,City,15,Country 143810,City,15,Country 2446,City,15,Country 3016,City,15,Country 143811,City,15,Country 2449,City,15,Country 2453,City,15,Country 2514,City,15,Country 143813,City,15,Country 2515,City,15,Country 143812,City,15,Country 2500,City,15,Country 2516,City,15,Country 143814,City,15,Country 2533,City,15,Country 2553,City,15,Country 2556,City,15,Country 2561,City,15,Country 2574,City,15,Country 143816,City,15,Country 143817,City,15,Country 2594,City,15,Country 2601,City,15,Country 143818,City,15,Country 2618,City,15,Country 143819,City,15,Country 143820,City,15,Country 143821,City,15,Country 143822,City,15,Country 2646,City,15,Country 2647,City,15,Country 2650,City,15,Country 2678,City,15,Country 2692,City,15,Country 2696,City,15,Country 2702,City,15,Country 2742,City,15,Country 2743,City,15,Country 2726,City,15,Country 2749,City,15,Country 2755,City,15,Country 2782,City,15,Country 2794,City,15,Country 2823,City,15,Country 143829,City,15,Country 143830,City,15,Country 2849,City,15,Country 143831,City,15,Country 2879,City,15,Country 2906,City,15,Country 2928,City,15,Country 143832,City,15,Country 143834,City,15,Country 2986,City,15,Country 3108,City,15,Country 3078,City,15,Country 3081,City,15,Country 143833,City,15,Country 3123,City,15,Country 3130,City,15,Country 3137,City,15,Country 3157,City,15,Country 143835,City,15,Country 3165,City,15,Country 143836,City,15,Country 3178,City,15,Country 143837,City,15,Country 3210,City,15,Country 3215,City,15,Country 3231,City,15,Country 3239,City,15,Country 143839,City,15,Country 3484,City,15,Country 143840,City,15,Country 143841,City,15,Country 143842,City,15,Country 143843,City,15,Country 3279,City,15,Country 3288,City,15,Country 3293,City,15,Country 3301,City,15,Country 3319,City,15,Country 3320,City,15,Country 3332,City,15,Country 3334,City,15,Country 143844,City,15,Country 143845,City,15,Country 3343,City,15,Country 3044,City,15,Country 3369,City,15,Country 3374,City,15,Country 3428,City,15,Country 3430,City,15,Country 3439,City,15,Country 143848,City,15,Country 3464,City,15,Country 3479,City,15,Country 3048,City,15,Country 3483,City,15,Country 143849,City,15,Country 143850,City,15,Country 143851,City,15,Country 143852,City,15,Country 143853,City,15,Country 143854,City,15,Country 3486,City,15,Country 3496,City,15,Country 3517,City,15,Country 3519,City,15,Country 3526,City,15,Country 3532,City,15,Country 143857,City,15,Country 3548,City,15,Country 143858,City,15,Country 143859,City,15,Country 143860,City,15,Country 3618,City,15,Country 143862,City,15,Country 3620,City,15,Country 143863,City,15,Country 143864,City,15,Country 3649,City,15,Country 143865,City,15,Country 3675,City,15,Country 3684,City,15,Country 3685,City,15,Country 3686,City,15,Country 3688,City,15,Country 3054,City,15,Country 3689,City,15,Country 3705,City,15,Country 3706,City,15,Country 3057,City,15,Country 3707,City,15,Country 3721,City,15,Country 3744,City,15,Country 143867,City,15,Country 143868,City,15,Country 3776,City,15,Country 143866,City,15,Country 3794,City,15,Country 3833,City,15,Country 3854,City,15,Country 3842,City,15,Country 3061,City,15,Country 3849,City,15,Country 143871,City,15,Country 1602,City,15,Country 1606,City,15,Country 1608,City,15,Country 1614,City,15,Country 1627,City,15,Country 1628,City,15,Country 1633,City,15,Country 1638,City,15,Country 1639,City,15,Country 1641,City,15,Country 1647,City,15,Country 1649,City,15,Country 1650,City,15,Country 1656,City,15,Country 1659,City,15,Country 1666,City,15,Country 1675,City,15,Country 1676,City,15,Country 1689,City,15,Country 1690,City,15,Country 1691,City,15,Country 1692,City,15,Country 1699,City,15,Country 1703,City,15,Country 1708,City,15,Country 1718,City,15,Country 1719,City,15,Country 1720,City,15,Country 1731,City,15,Country 1736,City,15,Country 1738,City,15,Country 1739,City,15,Country 1742,City,15,Country 1824,City,15,Country 1752,City,15,Country 1753,City,15,Country 1759,City,15,Country 1761,City,15,Country 1764,City,15,Country 1768,City,15,Country 1771,City,15,Country 1776,City,15,Country 1778,City,15,Country 1782,City,15,Country 1786,City,15,Country 1825,City,15,Country 1796,City,15,Country 1801,City,15,Country 1806,City,15,Country 1809,City,15,Country 1813,City,15,Country 1814,City,15,Country 1815,City,15,Country 1818,City,15,Country 1841,City,15,Country 1855,City,15,Country 1864,City,15,Country 1867,City,15,Country 1870,City,15,Country 1869,City,15,Country 1877,City,15,Country 1878,City,15,Country 1884,City,15,Country 1887,City,15,Country 1889,City,15,Country 1895,City,15,Country 1897,City,15,Country 1898,City,15,Country 1904,City,15,Country 1909,City,15,Country 1910,City,15,Country 1911,City,15,Country 1920,City,15,Country 1927,City,15,Country 1935,City,15,Country 1938,City,15,Country 1941,City,15,Country 1942,City,15,Country 1943,City,15,Country 1944,City,15,Country 1947,City,15,Country 1948,City,15,Country 1949,City,15,Country 1950,City,15,Country 1952,City,15,Country 1954,City,15,Country 1956,City,15,Country 1960,City,15,Country 1961,City,15,Country 1965,City,15,Country 1977,City,15,Country 1978,City,15,Country 1983,City,15,Country 1990,City,15,Country 2009,City,15,Country 2027,City,15,Country 2029,City,15,Country 2030,City,15,Country 2038,City,15,Country 2041,City,15,Country 2044,City,15,Country 2052,City,15,Country 2183,City,15,Country 2058,City,15,Country 2063,City,15,Country 2065,City,15,Country 2067,City,15,Country 2069,City,15,Country 2073,City,15,Country 2074,City,15,Country 2075,City,15,Country 2078,City,15,Country 2080,City,15,Country 2081,City,15,Country 2087,City,15,Country 2089,City,15,Country 2094,City,15,Country 2095,City,15,Country 2098,City,15,Country 2185,City,15,Country 2186,City,15,Country 2191,City,15,Country 2193,City,15,Country 2110,City,15,Country 2112,City,15,Country 2114,City,15,Country 2118,City,15,Country 2126,City,15,Country 2129,City,15,Country 2136,City,15,Country 2146,City,15,Country 2147,City,15,Country 2148,City,15,Country 2149,City,15,Country 2150,City,15,Country 2152,City,15,Country 2153,City,15,Country 2154,City,15,Country 2157,City,15,Country 2159,City,15,Country 2160,City,15,Country 2161,City,15,Country 2163,City,15,Country 2168,City,15,Country 2172,City,15,Country 2173,City,15,Country 2196,City,15,Country 2176,City,15,Country 2177,City,15,Country 2180,City,15,Country 2181,City,15,Country 2200,City,15,Country 2204,City,15,Country 2205,City,15,Country 2207,City,15,Country 2209,City,15,Country 2213,City,15,Country 2216,City,15,Country 2218,City,15,Country 2230,City,15,Country 2231,City,15,Country 2232,City,15,Country 2233,City,15,Country 2235,City,15,Country 2247,City,15,Country 2248,City,15,Country 2249,City,15,Country 2252,City,15,Country 2253,City,15,Country 2254,City,15,Country 2256,City,15,Country 2257,City,15,Country 2260,City,15,Country 2261,City,15,Country 2270,City,15,Country 2273,City,15,Country 2274,City,15,Country 2275,City,15,Country 2281,City,15,Country 2285,City,15,Country 2287,City,15,Country 2292,City,15,Country 2294,City,15,Country 2299,City,15,Country 2302,City,15,Country 2305,City,15,Country 2308,City,15,Country 2339,City,15,Country 2340,City,15,Country 2310,City,15,Country 2312,City,15,Country 2314,City,15,Country 2315,City,15,Country 2317,City,15,Country 2321,City,15,Country 2323,City,15,Country 2324,City,15,Country 2331,City,15,Country 2333,City,15,Country 2346,City,15,Country 2334,City,15,Country 2372,City,15,Country 2374,City,15,Country 2375,City,15,Country 2394,City,15,Country 2398,City,15,Country 2405,City,15,Country 2409,City,15,Country 2411,City,15,Country 2412,City,15,Country 2414,City,15,Country 2416,City,15,Country 2421,City,15,Country 2422,City,15,Country 2426,City,15,Country 2427,City,15,Country 2428,City,15,Country 2429,City,15,Country 2437,City,15,Country 2439,City,15,Country 2440,City,15,Country 2441,City,15,Country 2448,City,15,Country 2450,City,15,Country 2451,City,15,Country 2459,City,15,Country 2462,City,15,Country 2510,City,15,Country 2476,City,15,Country 2477,City,15,Country 2483,City,15,Country 2484,City,15,Country 2491,City,15,Country 2495,City,15,Country 2497,City,15,Country 2499,City,15,Country 2517,City,15,Country 2519,City,15,Country 2525,City,15,Country 2531,City,15,Country 2535,City,15,Country 2539,City,15,Country 2540,City,15,Country 2541,City,15,Country 2544,City,15,Country 2546,City,15,Country 2549,City,15,Country 2550,City,15,Country 2551,City,15,Country 2558,City,15,Country 2563,City,15,Country 2570,City,15,Country 2575,City,15,Country 2579,City,15,Country 2580,City,15,Country 2584,City,15,Country 2585,City,15,Country 2586,City,15,Country 2590,City,15,Country 2592,City,15,Country 2600,City,15,Country 2605,City,15,Country 2610,City,15,Country 2613,City,15,Country 2620,City,15,Country 2626,City,15,Country 2628,City,15,Country 2629,City,15,Country 2630,City,15,Country 2633,City,15,Country 2634,City,15,Country 2635,City,15,Country 2636,City,15,Country 2638,City,15,Country 2640,City,15,Country 2641,City,15,Country 2642,City,15,Country 2644,City,15,Country 2649,City,15,Country 2651,City,15,Country 2659,City,15,Country 2660,City,15,Country 2663,City,15,Country 2665,City,15,Country 2672,City,15,Country 2673,City,15,Country 2674,City,15,Country 2675,City,15,Country 2679,City,15,Country 2688,City,15,Country 2698,City,15,Country 2701,City,15,Country 2706,City,15,Country 2708,City,15,Country 2716,City,15,Country 2740,City,15,Country 2744,City,15,Country 2746,City,15,Country 2725,City,15,Country 2731,City,15,Country 2732,City,15,Country 2756,City,15,Country 2761,City,15,Country 2777,City,15,Country 2783,City,15,Country 2789,City,15,Country 2793,City,15,Country 2797,City,15,Country 2803,City,15,Country 2805,City,15,Country 2809,City,15,Country 2810,City,15,Country 2812,City,15,Country 2824,City,15,Country 2825,City,15,Country 2839,City,15,Country 2843,City,15,Country 2854,City,15,Country 2863,City,15,Country 2867,City,15,Country 2874,City,15,Country 2875,City,15,Country 2881,City,15,Country 2882,City,15,Country 2886,City,15,Country 2891,City,15,Country 2894,City,15,Country 2901,City,15,Country 2904,City,15,Country 2910,City,15,Country 2913,City,15,Country 2914,City,15,Country 2923,City,15,Country 2931,City,15,Country 2932,City,15,Country 2935,City,15,Country 2937,City,15,Country 2940,City,15,Country 2942,City,15,Country 2943,City,15,Country 2944,City,15,Country 2947,City,15,Country 2951,City,15,Country 2955,City,15,Country 2970,City,15,Country 2980,City,15,Country 3103,City,15,Country 3104,City,15,Country 2987,City,15,Country 2988,City,15,Country 2992,City,15,Country 3004,City,15,Country 3001,City,15,Country 3009,City,15,Country 3010,City,15,Country 3017,City,15,Country 3018,City,15,Country 3025,City,15,Country 3028,City,15,Country 3029,City,15,Country 3032,City,15,Country 3033,City,15,Country 3043,City,15,Country 3045,City,15,Country 3052,City,15,Country 3058,City,15,Country 3060,City,15,Country 3063,City,15,Country 3066,City,15,Country 3067,City,15,Country 3068,City,15,Country 3069,City,15,Country 3071,City,15,Country 3079,City,15,Country 3080,City,15,Country 3082,City,15,Country 3083,City,15,Country 3085,City,15,Country 3090,City,15,Country 3092,City,15,Country 3096,City,15,Country 3099,City,15,Country 3100,City,15,Country 3102,City,15,Country 3116,City,15,Country 3117,City,15,Country 3118,City,15,Country 3119,City,15,Country 3120,City,15,Country 3133,City,15,Country 3136,City,15,Country 3141,City,15,Country 3144,City,15,Country 3146,City,15,Country 3151,City,15,Country 3152,City,15,Country 3154,City,15,Country 3155,City,15,Country 3161,City,15,Country 3162,City,15,Country 3170,City,15,Country 3171,City,15,Country 3172,City,15,Country 3181,City,15,Country 3199,City,15,Country 3201,City,15,Country 3202,City,15,Country 3223,City,15,Country 3207,City,15,Country 3225,City,15,Country 3211,City,15,Country 3219,City,15,Country 3233,City,15,Country 3238,City,15,Country 3242,City,15,Country 3247,City,15,Country 3254,City,15,Country 3256,City,15,Country 3281,City,15,Country 3282,City,15,Country 3295,City,15,Country 3304,City,15,Country 3318,City,15,Country 3326,City,15,Country 3329,City,15,Country 3330,City,15,Country 3341,City,15,Country 3344,City,15,Country 3359,City,15,Country 3366,City,15,Country 3376,City,15,Country 3416,City,15,Country 3417,City,15,Country 3421,City,15,Country 3384,City,15,Country 3385,City,15,Country 3386,City,15,Country 3387,City,15,Country 3388,City,15,Country 3392,City,15,Country 3397,City,15,Country 3398,City,15,Country 3400,City,15,Country 3401,City,15,Country 3402,City,15,Country 3405,City,15,Country 3406,City,15,Country 3429,City,15,Country 3437,City,15,Country 3440,City,15,Country 3443,City,15,Country 3445,City,15,Country 3447,City,15,Country 3452,City,15,Country 3453,City,15,Country 3457,City,15,Country 3465,City,15,Country 3467,City,15,Country 3468,City,15,Country 3470,City,15,Country 3471,City,15,Country 3472,City,15,Country 3476,City,15,Country 3480,City,15,Country 3481,City,15,Country 3487,City,15,Country 3506,City,15,Country 3507,City,15,Country 3511,City,15,Country 3512,City,15,Country 3514,City,15,Country 3523,City,15,Country 3524,City,15,Country 3525,City,15,Country 3533,City,15,Country 3534,City,15,Country 3560,City,15,Country 3539,City,15,Country 3544,City,15,Country 3546,City,15,Country 3551,City,15,Country 3554,City,15,Country 3573,City,15,Country 3579,City,15,Country 3584,City,15,Country 3590,City,15,Country 3591,City,15,Country 3592,City,15,Country 3598,City,15,Country 3609,City,15,Country 3610,City,15,Country 3611,City,15,Country 3612,City,15,Country 3616,City,15,Country 3621,City,15,Country 3627,City,15,Country 3631,City,15,Country 3633,City,15,Country 3634,City,15,Country 3638,City,15,Country 3642,City,15,Country 3660,City,15,Country 3661,City,15,Country 3664,City,15,Country 3665,City,15,Country 3676,City,15,Country 3680,City,15,Country 3692,City,15,Country 3709,City,15,Country 3716,City,15,Country 3717,City,15,Country 3718,City,15,Country 3719,City,15,Country 3727,City,15,Country 3728,City,15,Country 3729,City,15,Country 3732,City,15,Country 3738,City,15,Country 3739,City,15,Country 3743,City,15,Country 3748,City,15,Country 3750,City,15,Country 3759,City,15,Country 3760,City,15,Country 3761,City,15,Country 3762,City,15,Country 3765,City,15,Country 3768,City,15,Country 3769,City,15,Country 3772,City,15,Country 3783,City,15,Country 3774,City,15,Country 3775,City,15,Country 3777,City,15,Country 3779,City,15,Country 3803,City,15,Country 3804,City,15,Country 3805,City,15,Country 3806,City,15,Country 3808,City,15,Country 3812,City,15,Country 3817,City,15,Country 3818,City,15,Country 3819,City,15,Country 3820,City,15,Country 3824,City,15,Country 3829,City,15,Country 3830,City,15,Country 3832,City,15,Country 3835,City,15,Country 3840,City,15,Country 3841,City,15,Country 3845,City,15,Country 3846,City,15,Country 3848,City,15,Country 3855,City,15,Country 3856,City,15,Country 3851,City,15,Country 3861,City,15,Country 3862,City,15,Country 3863,City,15,Country 3864,City,15,Country 3865,City,15,Country 3869,City,15,Country 3870,City,15,Country 3877,City,15,Country 3878,City,15,Country 3880,City,15,Country 3885,City,15,Country 3886,City,15,Country 3889,City,15,Country 3895,City,15,Country 3891,City,15,Country 3892,City,15,Country 3894,City,15,Country 1603,City,15,Country 1611,City,15,Country 1644,City,15,Country 1663,City,15,Country 1667,City,15,Country 1672,City,15,Country 1702,City,15,Country 1722,City,15,Country 1726,City,15,Country 1758,City,15,Country 1763,City,15,Country 1777,City,15,Country 1789,City,15,Country 1808,City,15,Country 1821,City,15,Country 1826,City,15,Country 1848,City,15,Country 1862,City,15,Country 1863,City,15,Country 1882,City,15,Country 1883,City,15,Country 1896,City,15,Country 1929,City,15,Country 1933,City,15,Country 1953,City,15,Country 1955,City,15,Country 1958,City,15,Country 1986,City,15,Country 1994,City,15,Country 2007,City,15,Country 2031,City,15,Country 2072,City,15,Country 2082,City,15,Country 2084,City,15,Country 2103,City,15,Country 2166,City,15,Country 2139,City,15,Country 2140,City,15,Country 2202,City,15,Country 2225,City,15,Country 2226,City,15,Country 2269,City,15,Country 2283,City,15,Country 2286,City,15,Country 2288,City,15,Country 2304,City,15,Country 2306,City,15,Country 2325,City,15,Country 2347,City,15,Country 2349,City,15,Country 2366,City,15,Country 2404,City,15,Country 2452,City,15,Country 2475,City,15,Country 2513,City,15,Country 2489,City,15,Country 2490,City,15,Country 2502,City,15,Country 2529,City,15,Country 2562,City,15,Country 2572,City,15,Country 2576,City,15,Country 2581,City,15,Country 2609,City,15,Country 2627,City,15,Country 2639,City,15,Country 2653,City,15,Country 2671,City,15,Country 2681,City,15,Country 2709,City,15,Country 2712,City,15,Country 2719,City,15,Country 2752,City,15,Country 2784,City,15,Country 2799,City,15,Country 2804,City,15,Country 2820,City,15,Country 2828,City,15,Country 2838,City,15,Country 2845,City,15,Country 2850,City,15,Country 2864,City,15,Country 2878,City,15,Country 2957,City,15,Country 2963,City,15,Country 2967,City,15,Country 2982,City,15,Country 2983,City,15,Country 3006,City,15,Country 3041,City,15,Country 3042,City,15,Country 3051,City,15,Country 3088,City,15,Country 3125,City,15,Country 3132,City,15,Country 3153,City,15,Country 3169,City,15,Country 3173,City,15,Country 3229,City,15,Country 3230,City,15,Country 3234,City,15,Country 3235,City,15,Country 3241,City,15,Country 3262,City,15,Country 3269,City,15,Country 3278,City,15,Country 3298,City,15,Country 3306,City,15,Country 3310,City,15,Country 3345,City,15,Country 3364,City,15,Country 3375,City,15,Country 3396,City,15,Country 3432,City,15,Country 3433,City,15,Country 3435,City,15,Country 3455,City,15,Country 3485,City,15,Country 3545,City,15,Country 3553,City,15,Country 3557,City,15,Country 3570,City,15,Country 3575,City,15,Country 3577,City,15,Country 3578,City,15,Country 3587,City,15,Country 3593,City,15,Country 3594,City,15,Country 3637,City,15,Country 3646,City,15,Country 3657,City,15,Country 3662,City,15,Country 3669,City,15,Country 3678,City,15,Country 3679,City,15,Country 3682,City,15,Country 3711,City,15,Country 3713,City,15,Country 3723,City,15,Country 3726,City,15,Country 3734,City,15,Country 3740,City,15,Country 3741,City,15,Country 3792,City,15,Country 3793,City,15,Country 3868,City,15,Country 3874,City,15,Country 1604,City,15,Country 1610,City,15,Country 1613,City,15,Country 1616,City,15,Country 1618,City,15,Country 1624,City,15,Country 1629,City,15,Country 1631,City,15,Country 1636,City,15,Country 1642,City,15,Country 1643,City,15,Country 1661,City,15,Country 1664,City,15,Country 1674,City,15,Country 1677,City,15,Country 1678,City,15,Country 1682,City,15,Country 1694,City,15,Country 1707,City,15,Country 1716,City,15,Country 1717,City,15,Country 1721,City,15,Country 1723,City,15,Country 1732,City,15,Country 1740,City,15,Country 1744,City,15,Country 1745,City,15,Country 1823,City,15,Country 1750,City,15,Country 1762,City,15,Country 1772,City,15,Country 1775,City,15,Country 1780,City,15,Country 1799,City,15,Country 1800,City,15,Country 1803,City,15,Country 1810,City,15,Country 1812,City,15,Country 1820,City,15,Country 1832,City,15,Country 1836,City,15,Country 1837,City,15,Country 1842,City,15,Country 1844,City,15,Country 1846,City,15,Country 1847,City,15,Country 1852,City,15,Country 1853,City,15,Country 1857,City,15,Country 1858,City,15,Country 1879,City,15,Country 1892,City,15,Country 1899,City,15,Country 1900,City,15,Country 1901,City,15,Country 1903,City,15,Country 1908,City,15,Country 1912,City,15,Country 1914,City,15,Country 1916,City,15,Country 1917,City,15,Country 1919,City,15,Country 1922,City,15,Country 1923,City,15,Country 1936,City,15,Country 1945,City,15,Country 1959,City,15,Country 1962,City,15,Country 1964,City,15,Country 1968,City,15,Country 1972,City,15,Country 1975,City,15,Country 1982,City,15,Country 1991,City,15,Country 1995,City,15,Country 1996,City,15,Country 2001,City,15,Country 2003,City,15,Country 2011,City,15,Country 2013,City,15,Country 2017,City,15,Country 2018,City,15,Country 2023,City,15,Country 2026,City,15,Country 2037,City,15,Country 2039,City,15,Country 2040,City,15,Country 2047,City,15,Country 2053,City,15,Country 2055,City,15,Country 2056,City,15,Country 2057,City,15,Country 2061,City,15,Country 2070,City,15,Country 2071,City,15,Country 2079,City,15,Country 2085,City,15,Country 2086,City,15,Country 2090,City,15,Country 2097,City,15,Country 2100,City,15,Country 2106,City,15,Country 2187,City,15,Country 2188,City,15,Country 2107,City,15,Country 2190,City,15,Country 2192,City,15,Country 2108,City,15,Country 2109,City,15,Country 2115,City,15,Country 2119,City,15,Country 2120,City,15,Country 2121,City,15,Country 2122,City,15,Country 2123,City,15,Country 2127,City,15,Country 2128,City,15,Country 2131,City,15,Country 2165,City,15,Country 2145,City,15,Country 2156,City,15,Country 2158,City,15,Country 2162,City,15,Country 2144,City,15,Country 2174,City,15,Country 2206,City,15,Country 2217,City,15,Country 2219,City,15,Country 2221,City,15,Country 2223,City,15,Country 2236,City,15,Country 2238,City,15,Country 2241,City,15,Country 2242,City,15,Country 2246,City,15,Country 2250,City,15,Country 2251,City,15,Country 2255,City,15,Country 2262,City,15,Country 2264,City,15,Country 2268,City,15,Country 2277,City,15,Country 2279,City,15,Country 2284,City,15,Country 2291,City,15,Country 2296,City,15,Country 2301,City,15,Country 2337,City,15,Country 2307,City,15,Country 2311,City,15,Country 2313,City,15,Country 2318,City,15,Country 2322,City,15,Country 2341,City,15,Country 2352,City,15,Country 2357,City,15,Country 2365,City,15,Country 2371,City,15,Country 2373,City,15,Country 2380,City,15,Country 2382,City,15,Country 2383,City,15,Country 2385,City,15,Country 2386,City,15,Country 2387,City,15,Country 2388,City,15,Country 2389,City,15,Country 2391,City,15,Country 2395,City,15,Country 2396,City,15,Country 2397,City,15,Country 2399,City,15,Country 2400,City,15,Country 2423,City,15,Country 2425,City,15,Country 2430,City,15,Country 2436,City,15,Country 2444,City,15,Country 2455,City,15,Country 2457,City,15,Country 2458,City,15,Country 2463,City,15,Country 2461,City,15,Country 2465,City,15,Country 2466,City,15,Country 2508,City,15,Country 2470,City,15,Country 2471,City,15,Country 2478,City,15,Country 2479,City,15,Country 2480,City,15,Country 2482,City,15,Country 2488,City,15,Country 2493,City,15,Country 2494,City,15,Country 2498,City,15,Country 2501,City,15,Country 2505,City,15,Country 2506,City,15,Country 2522,City,15,Country 2527,City,15,Country 2532,City,15,Country 2534,City,15,Country 2536,City,15,Country 2543,City,15,Country 2547,City,15,Country 2552,City,15,Country 2564,City,15,Country 2566,City,15,Country 2567,City,15,Country 2569,City,15,Country 2573,City,15,Country 2578,City,15,Country 2589,City,15,Country 2593,City,15,Country 2595,City,15,Country 2597,City,15,Country 2598,City,15,Country 2599,City,15,Country 2624,City,15,Country 2612,City,15,Country 2625,City,15,Country 2643,City,15,Country 2652,City,15,Country 2657,City,15,Country 2658,City,15,Country 2680,City,15,Country 2689,City,15,Country 2691,City,15,Country 2693,City,15,Country 2694,City,15,Country 2710,City,15,Country 2711,City,15,Country 2714,City,15,Country 2717,City,15,Country 2721,City,15,Country 2747,City,15,Country 2728,City,15,Country 2729,City,15,Country 2757,City,15,Country 2758,City,15,Country 2735,City,15,Country 2736,City,15,Country 2765,City,15,Country 2766,City,15,Country 2767,City,15,Country 2769,City,15,Country 2780,City,15,Country 2781,City,15,Country 2786,City,15,Country 2788,City,15,Country 2808,City,15,Country 2817,City,15,Country 2833,City,15,Country 2829,City,15,Country 2832,City,15,Country 2835,City,15,Country 2837,City,15,Country 2842,City,15,Country 2844,City,15,Country 2847,City,15,Country 2851,City,15,Country 2857,City,15,Country 2870,City,15,Country 2872,City,15,Country 2876,City,15,Country 2880,City,15,Country 2885,City,15,Country 2887,City,15,Country 2888,City,15,Country 3897,City,15,Country 2900,City,15,Country 2903,City,15,Country 2908,City,15,Country 2917,City,15,Country 2918,City,15,Country 2919,City,15,Country 2925,City,15,Country 2927,City,15,Country 2933,City,15,Country 2936,City,15,Country 2939,City,15,Country 2941,City,15,Country 2945,City,15,Country 2962,City,15,Country 2965,City,15,Country 2971,City,15,Country 2974,City,15,Country 2976,City,15,Country 2977,City,15,Country 2978,City,15,Country 2979,City,15,Country 2993,City,15,Country 2994,City,15,Country 3002,City,15,Country 3007,City,15,Country 3021,City,15,Country 3022,City,15,Country 3024,City,15,Country 3030,City,15,Country 3031,City,15,Country 3050,City,15,Country 3055,City,15,Country 3059,City,15,Country 3105,City,15,Country 3106,City,15,Country 3107,City,15,Country 3065,City,15,Country 3076,City,15,Country 3084,City,15,Country 3086,City,15,Country 3089,City,15,Country 3097,City,15,Country 3101,City,15,Country 3114,City,15,Country 3115,City,15,Country 3121,City,15,Country 3122,City,15,Country 3128,City,15,Country 3134,City,15,Country 3139,City,15,Country 3143,City,15,Country 3145,City,15,Country 3147,City,15,Country 3148,City,15,Country 3149,City,15,Country 3164,City,15,Country 3168,City,15,Country 3179,City,15,Country 3182,City,15,Country 3192,City,15,Country 3193,City,15,Country 3203,City,15,Country 3212,City,15,Country 3226,City,15,Country 3214,City,15,Country 3232,City,15,Country 3243,City,15,Country 3245,City,15,Country 3246,City,15,Country 3250,City,15,Country 3257,City,15,Country 3260,City,15,Country 3261,City,15,Country 3264,City,15,Country 3265,City,15,Country 3266,City,15,Country 3267,City,15,Country 3268,City,15,Country 3270,City,15,Country 3272,City,15,Country 3273,City,15,Country 3274,City,15,Country 3275,City,15,Country 3276,City,15,Country 3277,City,15,Country 3280,City,15,Country 3284,City,15,Country 3285,City,15,Country 3286,City,15,Country 3287,City,15,Country 3289,City,15,Country 3290,City,15,Country 3291,City,15,Country 3292,City,15,Country 3294,City,15,Country 3296,City,15,Country 3300,City,15,Country 3303,City,15,Country 3308,City,15,Country 3311,City,15,Country 3312,City,15,Country 3313,City,15,Country 3314,City,15,Country 3316,City,15,Country 3317,City,15,Country 3321,City,15,Country 3323,City,15,Country 3324,City,15,Country 3325,City,15,Country 3327,City,15,Country 3328,City,15,Country 3331,City,15,Country 3333,City,15,Country 3335,City,15,Country 3336,City,15,Country 3337,City,15,Country 3339,City,15,Country 3342,City,15,Country 3352,City,15,Country 3412,City,15,Country 3367,City,15,Country 3371,City,15,Country 3415,City,15,Country 3389,City,15,Country 3393,City,15,Country 3399,City,15,Country 3425,City,15,Country 3426,City,15,Country 3436,City,15,Country 3438,City,15,Country 3442,City,15,Country 3444,City,15,Country 3450,City,15,Country 3462,City,15,Country 3466,City,15,Country 3564,City,15,Country 3565,City,15,Country 3473,City,15,Country 3474,City,15,Country 3475,City,15,Country 3478,City,15,Country 3488,City,15,Country 3493,City,15,Country 3494,City,15,Country 3495,City,15,Country 3498,City,15,Country 3499,City,15,Country 3500,City,15,Country 3505,City,15,Country 3510,City,15,Country 3522,City,15,Country 3531,City,15,Country 3537,City,15,Country 3538,City,15,Country 3547,City,15,Country 3542,City,15,Country 3549,City,15,Country 3555,City,15,Country 3556,City,15,Country 3563,City,15,Country 3576,City,15,Country 3585,City,15,Country 3586,City,15,Country 3596,City,15,Country 3600,City,15,Country 3601,City,15,Country 3602,City,15,Country 3606,City,15,Country 3608,City,15,Country 3617,City,15,Country 3619,City,15,Country 3622,City,15,Country 3623,City,15,Country 3626,City,15,Country 3628,City,15,Country 3635,City,15,Country 3899,City,15,Country 3901,City,15,Country 3645,City,15,Country 3647,City,15,Country 3648,City,15,Country 3651,City,15,Country 3655,City,15,Country 3659,City,15,Country 3667,City,15,Country 3673,City,15,Country 3674,City,15,Country 3693,City,15,Country 3694,City,15,Country 3698,City,15,Country 3701,City,15,Country 3710,City,15,Country 3712,City,15,Country 3725,City,15,Country 3742,City,15,Country 3745,City,15,Country 3766,City,15,Country 3781,City,15,Country 3784,City,15,Country 3780,City,15,Country 3795,City,15,Country 3796,City,15,Country 3799,City,15,Country 3800,City,15,Country 3807,City,15,Country 3813,City,15,Country 3815,City,15,Country 3834,City,15,Country 3843,City,15,Country 3858,City,15,Country 3860,City,15,Country 3852,City,15,Country 3881,City,15,Country 3882,City,15,Country 3883,City,15,Country 3884,City,15,Country 1600,City,15,Country 1601,City,15,Country 1607,City,15,Country 1620,City,15,Country 1625,City,15,Country 1634,City,15,Country 1652,City,15,Country 1653,City,15,Country 1655,City,15,Country 1662,City,15,Country 1665,City,15,Country 1669,City,15,Country 1683,City,15,Country 1684,City,15,Country 1687,City,15,Country 1688,City,15,Country 1709,City,15,Country 1713,City,15,Country 1714,City,15,Country 1727,City,15,Country 1748,City,15,Country 1751,City,15,Country 1766,City,15,Country 1769,City,15,Country 1770,City,15,Country 1774,City,15,Country 1791,City,15,Country 1797,City,15,Country 1802,City,15,Country 1804,City,15,Country 1805,City,15,Country 1807,City,15,Country 1817,City,15,Country 1831,City,15,Country 1872,City,15,Country 1880,City,15,Country 1881,City,15,Country 1913,City,15,Country 1915,City,15,Country 1928,City,15,Country 1930,City,15,Country 1931,City,15,Country 1932,City,15,Country 1937,City,15,Country 1946,City,15,Country 1951,City,15,Country 1979,City,15,Country 1984,City,15,Country 1985,City,15,Country 1987,City,15,Country 1993,City,15,Country 1998,City,15,Country 1999,City,15,Country 2000,City,15,Country 2004,City,15,Country 2025,City,15,Country 2034,City,15,Country 2035,City,15,Country 2028,City,15,Country 2050,City,15,Country 2051,City,15,Country 2076,City,15,Country 2077,City,15,Country 2096,City,15,Country 2101,City,15,Country 2194,City,15,Country 2116,City,15,Country 2164,City,15,Country 2132,City,15,Country 2133,City,15,Country 2137,City,15,Country 2138,City,15,Country 2170,City,15,Country 2215,City,15,Country 2220,City,15,Country 2224,City,15,Country 2237,City,15,Country 2335,City,15,Country 2245,City,15,Country 2265,City,15,Country 2266,City,15,Country 2289,City,15,Country 2298,City,15,Country 2338,City,15,Country 2326,City,15,Country 2328,City,15,Country 2329,City,15,Country 2345,City,15,Country 2350,City,15,Country 2353,City,15,Country 2354,City,15,Country 2359,City,15,Country 2360,City,15,Country 2361,City,15,Country 2364,City,15,Country 2368,City,15,Country 2369,City,15,Country 2376,City,15,Country 2378,City,15,Country 2379,City,15,Country 2384,City,15,Country 2393,City,15,Country 2401,City,15,Country 2403,City,15,Country 2406,City,15,Country 2407,City,15,Country 2408,City,15,Country 2413,City,15,Country 2417,City,15,Country 2431,City,15,Country 2433,City,15,Country 2435,City,15,Country 2443,City,15,Country 2472,City,15,Country 2473,City,15,Country 2512,City,15,Country 2481,City,15,Country 2503,City,15,Country 2507,City,15,Country 2526,City,15,Country 2530,City,15,Country 2623,City,15,Country 2548,City,15,Country 2557,City,15,Country 2560,City,15,Country 2565,City,15,Country 2587,City,15,Country 2588,City,15,Country 2596,City,15,Country 2655,City,15,Country 2656,City,15,Country 2667,City,15,Country 2668,City,15,Country 2677,City,15,Country 2682,City,15,Country 2683,City,15,Country 2699,City,15,Country 2700,City,15,Country 2703,City,15,Country 2704,City,15,Country 2715,City,15,Country 2750,City,15,Country 2751,City,15,Country 2753,City,15,Country 2762,City,15,Country 2737,City,15,Country 2738,City,15,Country 2770,City,15,Country 2771,City,15,Country 2773,City,15,Country 2774,City,15,Country 2779,City,15,Country 2815,City,15,Country 2821,City,15,Country 2822,City,15,Country 2826,City,15,Country 2836,City,15,Country 2846,City,15,Country 2856,City,15,Country 2858,City,15,Country 2860,City,15,Country 2861,City,15,Country 2866,City,15,Country 2869,City,15,Country 2877,City,15,Country 2889,City,15,Country 2893,City,15,Country 3898,City,15,Country 2929,City,15,Country 2949,City,15,Country 2950,City,15,Country 2953,City,15,Country 2958,City,15,Country 2959,City,15,Country 2960,City,15,Country 2961,City,15,Country 2969,City,15,Country 3011,City,15,Country 3012,City,15,Country 3015,City,15,Country 3019,City,15,Country 3020,City,15,Country 3023,City,15,Country 3038,City,15,Country 3046,City,15,Country 3064,City,15,Country 3072,City,15,Country 3087,City,15,Country 3124,City,15,Country 3135,City,15,Country 3138,City,15,Country 3150,City,15,Country 3175,City,15,Country 3176,City,15,Country 3177,City,15,Country 3180,City,15,Country 3184,City,15,Country 3186,City,15,Country 3188,City,15,Country 3194,City,15,Country 3196,City,15,Country 3206,City,15,Country 3209,City,15,Country 3218,City,15,Country 3271,City,15,Country 3338,City,15,Country 3346,City,15,Country 3351,City,15,Country 3360,City,15,Country 3363,City,15,Country 3365,City,15,Country 3372,City,15,Country 3379,City,15,Country 3418,City,15,Country 3422,City,15,Country 3404,City,15,Country 3408,City,15,Country 3409,City,15,Country 3411,City,15,Country 3427,City,15,Country 3431,City,15,Country 3441,City,15,Country 3446,City,15,Country 3459,City,15,Country 3460,City,15,Country 3463,City,15,Country 3566,City,15,Country 3567,City,15,Country 3482,City,15,Country 3501,City,15,Country 3502,City,15,Country 3503,City,15,Country 3504,City,15,Country 3508,City,15,Country 3513,City,15,Country 3540,City,15,Country 3541,City,15,Country 3552,City,15,Country 3558,City,15,Country 3559,City,15,Country 3571,City,15,Country 3572,City,15,Country 3580,City,15,Country 3581,City,15,Country 3582,City,15,Country 3589,City,15,Country 3595,City,15,Country 3604,City,15,Country 3624,City,15,Country 3625,City,15,Country 3632,City,15,Country 3636,City,15,Country 3639,City,15,Country 3643,City,15,Country 3656,City,15,Country 3658,City,15,Country 3663,City,15,Country 3671,City,15,Country 3690,City,15,Country 3691,City,15,Country 3695,City,15,Country 3696,City,15,Country 3708,City,15,Country 3697,City,15,Country 3700,City,15,Country 3702,City,15,Country 3720,City,15,Country 3724,City,15,Country 3853,City,15,Country 3751,City,15,Country 3752,City,15,Country 3753,City,15,Country 3754,City,15,Country 3770,City,15,Country 3771,City,15,Country 3790,City,15,Country 3798,City,15,Country 3811,City,15,Country 3814,City,15,Country 3816,City,15,Country 3821,City,15,Country 3857,City,15,Country 3867,City,15,Country 3871,City,15,Country 3875,City,15,Country 3879,City,15,Country 3888,City,15,Country 3896,City,15,Country 1605,City,15,Country 1609,City,15,Country 1612,City,15,Country 1615,City,15,Country 1617,City,15,Country 1619,City,15,Country 1621,City,15,Country 1622,City,15,Country 1626,City,15,Country 1630,City,15,Country 1632,City,15,Country 1637,City,15,Country 1640,City,15,Country 1645,City,15,Country 1648,City,15,Country 1651,City,15,Country 1654,City,15,Country 1660,City,15,Country 1670,City,15,Country 1680,City,15,Country 1685,City,15,Country 1686,City,15,Country 1693,City,15,Country 1695,City,15,Country 1696,City,15,Country 1697,City,15,Country 1698,City,15,Country 1700,City,15,Country 1704,City,15,Country 1705,City,15,Country 1710,City,15,Country 1711,City,15,Country 1715,City,15,Country 1724,City,15,Country 1725,City,15,Country 1728,City,15,Country 1729,City,15,Country 1730,City,15,Country 1735,City,15,Country 1741,City,15,Country 1754,City,15,Country 1756,City,15,Country 1757,City,15,Country 1760,City,15,Country 1792,City,15,Country 1794,City,15,Country 1793,City,15,Country 1819,City,15,Country 1822,City,15,Country 1835,City,15,Country 1845,City,15,Country 1849,City,15,Country 1850,City,15,Country 1851,City,15,Country 1860,City,15,Country 1873,City,15,Country 1876,City,15,Country 1885,City,15,Country 1891,City,15,Country 1893,City,15,Country 1905,City,15,Country 1906,City,15,Country 1921,City,15,Country 1939,City,15,Country 1940,City,15,Country 1974,City,15,Country 1992,City,15,Country 2006,City,15,Country 2008,City,15,Country 2010,City,15,Country 2019,City,15,Country 2020,City,15,Country 2042,City,15,Country 2048,City,15,Country 2049,City,15,Country 2054,City,15,Country 2059,City,15,Country 2062,City,15,Country 2066,City,15,Country 2068,City,15,Country 2092,City,15,Country 2102,City,15,Country 2105,City,15,Country 2117,City,15,Country 2125,City,15,Country 2134,City,15,Country 2143,City,15,Country 2167,City,15,Country 2169,City,15,Country 2171,City,15,Country 2175,City,15,Country 2179,City,15,Country 2199,City,15,Country 2201,City,15,Country 2208,City,15,Country 2210,City,15,Country 2211,City,15,Country 2212,City,15,Country 2214,City,15,Country 2227,City,15,Country 2234,City,15,Country 2239,City,15,Country 2240,City,15,Country 2243,City,15,Country 2244,City,15,Country 2267,City,15,Country 2276,City,15,Country 2297,City,15,Country 2300,City,15,Country 2303,City,15,Country 2309,City,15,Country 2327,City,15,Country 2343,City,15,Country 2358,City,15,Country 2363,City,15,Country 2392,City,15,Country 2410,City,15,Country 2415,City,15,Country 2432,City,15,Country 2434,City,15,Country 2438,City,15,Country 2445,City,15,Country 2511,City,15,Country 2474,City,15,Country 2485,City,15,Country 2486,City,15,Country 2492,City,15,Country 2518,City,15,Country 2520,City,15,Country 2521,City,15,Country 2528,City,15,Country 2542,City,15,Country 2545,City,15,Country 2554,City,15,Country 2571,City,15,Country 2577,City,15,Country 2582,City,15,Country 2583,City,15,Country 2591,City,15,Country 2603,City,15,Country 2604,City,15,Country 2616,City,15,Country 2619,City,15,Country 2632,City,15,Country 2637,City,15,Country 2645,City,15,Country 2648,City,15,Country 2670,City,15,Country 2676,City,15,Country 2684,City,15,Country 2685,City,15,Country 2695,City,15,Country 2697,City,15,Country 2713,City,15,Country 2720,City,15,Country 2723,City,15,Country 2724,City,15,Country 2727,City,15,Country 2754,City,15,Country 2733,City,15,Country 2763,City,15,Country 2764,City,15,Country 2768,City,15,Country 2772,City,15,Country 2775,City,15,Country 2785,City,15,Country 2791,City,15,Country 2796,City,15,Country 2798,City,15,Country 2800,City,15,Country 2801,City,15,Country 2802,City,15,Country 2806,City,15,Country 2807,City,15,Country 2818,City,15,Country 2827,City,15,Country 2830,City,15,Country 2831,City,15,Country 2840,City,15,Country 2852,City,15,Country 2853,City,15,Country 2855,City,15,Country 2862,City,15,Country 2865,City,15,Country 2868,City,15,Country 2883,City,15,Country 2890,City,15,Country 2892,City,15,Country 2895,City,15,Country 2897,City,15,Country 2902,City,15,Country 2907,City,15,Country 2911,City,15,Country 2912,City,15,Country 2915,City,15,Country 2916,City,15,Country 2920,City,15,Country 2926,City,15,Country 2930,City,15,Country 2934,City,15,Country 2938,City,15,Country 2946,City,15,Country 2948,City,15,Country 2952,City,15,Country 2954,City,15,Country 2956,City,15,Country 2964,City,15,Country 2966,City,15,Country 2973,City,15,Country 2981,City,15,Country 2984,City,15,Country 2990,City,15,Country 2996,City,15,Country 2999,City,15,Country 3000,City,15,Country 3003,City,15,Country 3014,City,15,Country 3026,City,15,Country 3037,City,15,Country 3039,City,15,Country 3040,City,15,Country 3047,City,15,Country 3049,City,15,Country 3053,City,15,Country 3056,City,15,Country 3110,City,15,Country 3073,City,15,Country 3074,City,15,Country 3075,City,15,Country 3077,City,15,Country 3091,City,15,Country 3093,City,15,Country 3094,City,15,Country 3095,City,15,Country 3112,City,15,Country 3113,City,15,Country 3126,City,15,Country 3131,City,15,Country 3142,City,15,Country 3158,City,15,Country 3159,City,15,Country 3160,City,15,Country 3163,City,15,Country 3166,City,15,Country 3167,City,15,Country 3174,City,15,Country 3185,City,15,Country 3187,City,15,Country 3189,City,15,Country 3200,City,15,Country 3205,City,15,Country 3208,City,15,Country 3217,City,15,Country 3228,City,15,Country 3222,City,15,Country 3236,City,15,Country 3237,City,15,Country 3248,City,15,Country 3249,City,15,Country 3252,City,15,Country 3255,City,15,Country 3258,City,15,Country 3259,City,15,Country 3263,City,15,Country 3283,City,15,Country 3299,City,15,Country 3302,City,15,Country 3307,City,15,Country 3315,City,15,Country 3322,City,15,Country 3340,City,15,Country 3347,City,15,Country 3348,City,15,Country 3350,City,15,Country 3354,City,15,Country 3355,City,15,Country 3356,City,15,Country 3358,City,15,Country 3413,City,15,Country 3414,City,15,Country 3361,City,15,Country 3368,City,15,Country 3370,City,15,Country 3373,City,15,Country 3377,City,15,Country 3380,City,15,Country 3419,City,15,Country 3420,City,15,Country 3423,City,15,Country 3394,City,15,Country 3407,City,15,Country 3410,City,15,Country 3434,City,15,Country 3454,City,15,Country 3469,City,15,Country 3477,City,15,Country 3489,City,15,Country 3490,City,15,Country 3491,City,15,Country 3515,City,15,Country 3518,City,15,Country 3520,City,15,Country 3521,City,15,Country 3527,City,15,Country 3528,City,15,Country 3529,City,15,Country 3543,City,15,Country 3569,City,15,Country 3574,City,15,Country 3583,City,15,Country 3588,City,15,Country 3599,City,15,Country 3603,City,15,Country 3607,City,15,Country 3613,City,15,Country 3614,City,15,Country 3640,City,15,Country 3641,City,15,Country 3644,City,15,Country 3650,City,15,Country 3653,City,15,Country 3668,City,15,Country 3670,City,15,Country 3677,City,15,Country 3703,City,15,Country 3704,City,15,Country 3699,City,15,Country 3714,City,15,Country 3715,City,15,Country 3722,City,15,Country 3730,City,15,Country 3731,City,15,Country 3733,City,15,Country 3735,City,15,Country 3736,City,15,Country 3746,City,15,Country 3747,City,15,Country 3755,City,15,Country 3763,City,15,Country 3782,City,15,Country 3773,City,15,Country 3778,City,15,Country 3785,City,15,Country 3786,City,15,Country 3787,City,15,Country 3788,City,15,Country 3789,City,15,Country 3797,City,15,Country 3801,City,15,Country 3802,City,15,Country 3822,City,15,Country 3825,City,15,Country 3827,City,15,Country 3828,City,15,Country 3831,City,15,Country 3836,City,15,Country 3837,City,15,Country 3839,City,15,Country 3844,City,15,Country 3872,City,15,Country 3873,City,15,Country 3876,City,15,Country 3893,City,15,Country 1856,City,15,Country 1963,City,15,Country 2002,City,15,Country 2272,City,15,Country 2280,City,15,Country 2356,City,15,Country 2686,City,15,Country 2909,City,15,Country 3461,City,15,Country 3681,City,15,Country 1623,City,15,Country 1635,City,15,Country 1658,City,15,Country 1701,City,15,Country 1712,City,15,Country 1747,City,15,Country 1749,City,15,Country 1767,City,15,Country 1773,City,15,Country 1779,City,15,Country 1783,City,15,Country 1784,City,15,Country 1785,City,15,Country 1790,City,15,Country 1795,City,15,Country 1827,City,15,Country 1828,City,15,Country 1829,City,15,Country 1830,City,15,Country 1861,City,15,Country 1865,City,15,Country 1874,City,15,Country 1875,City,15,Country 1907,City,15,Country 1918,City,15,Country 1973,City,15,Country 2012,City,15,Country 2016,City,15,Country 2032,City,15,Country 2045,City,15,Country 2060,City,15,Country 2184,City,15,Country 2195,City,15,Country 2151,City,15,Country 2229,City,15,Country 2293,City,15,Country 2295,City,15,Country 2336,City,15,Country 2316,City,15,Country 2320,City,15,Country 2342,City,15,Country 2355,City,15,Country 2419,City,15,Country 2447,City,15,Country 2464,City,15,Country 2468,City,15,Country 2496,City,15,Country 2537,City,15,Country 2538,City,15,Country 2555,City,15,Country 2559,City,15,Country 2602,City,15,Country 2607,City,15,Country 2615,City,15,Country 2617,City,15,Country 2621,City,15,Country 2739,City,15,Country 2687,City,15,Country 2690,City,15,Country 2707,City,15,Country 2741,City,15,Country 2734,City,15,Country 2778,City,15,Country 2841,City,15,Country 2989,City,15,Country 2991,City,15,Country 2995,City,15,Country 2997,City,15,Country 3127,City,15,Country 3140,City,15,Country 3183,City,15,Country 3191,City,15,Country 3195,City,15,Country 3224,City,15,Country 3227,City,15,Country 3244,City,15,Country 3251,City,15,Country 3349,City,15,Country 3378,City,15,Country 3381,City,15,Country 3382,City,15,Country 3383,City,15,Country 3391,City,15,Country 3390,City,15,Country 3395,City,15,Country 3403,City,15,Country 3448,City,15,Country 3458,City,15,Country 3497,City,15,Country 3561,City,15,Country 3562,City,15,Country 3597,City,15,Country 3629,City,15,Country 3900,City,15,Country 3672,City,15,Country 3683,City,15,Country 3749,City,15,Country 3764,City,15,Country 3847,City,15,Country 15805,City,21,Country 15810,City,21,Country 15820,City,21,Country 15821,City,21,Country 15833,City,21,Country 15834,City,21,Country 15841,City,21,Country 15843,City,21,Country 15844,City,21,Country 15850,City,21,Country 15861,City,21,Country 15863,City,21,Country 15868,City,21,Country 15869,City,21,Country 15884,City,21,Country 15885,City,21,Country 15888,City,21,Country 15897,City,21,Country 15898,City,21,Country 15909,City,21,Country 15910,City,21,Country 15911,City,21,Country 15917,City,21,Country 15918,City,21,Country 15919,City,21,Country 15942,City,21,Country 15946,City,21,Country 15957,City,21,Country 15964,City,21,Country 15965,City,21,Country 15982,City,21,Country 15988,City,21,Country 15993,City,21,Country 16010,City,21,Country 16021,City,21,Country 16027,City,21,Country 16028,City,21,Country 16044,City,21,Country 16075,City,21,Country 16076,City,21,Country 16089,City,21,Country 16114,City,21,Country 16122,City,21,Country 16123,City,21,Country 16130,City,21,Country 15804,City,21,Country 15829,City,21,Country 15830,City,21,Country 15835,City,21,Country 15848,City,21,Country 15849,City,21,Country 15864,City,21,Country 15867,City,21,Country 15895,City,21,Country 15896,City,21,Country 15915,City,21,Country 15923,City,21,Country 15926,City,21,Country 15929,City,21,Country 15930,City,21,Country 15936,City,21,Country 15962,City,21,Country 15967,City,21,Country 15968,City,21,Country 15985,City,21,Country 15986,City,21,Country 16002,City,21,Country 16005,City,21,Country 16017,City,21,Country 16020,City,21,Country 16033,City,21,Country 16035,City,21,Country 16036,City,21,Country 16041,City,21,Country 16049,City,21,Country 16081,City,21,Country 16090,City,21,Country 16098,City,21,Country 16112,City,21,Country 16113,City,21,Country 16116,City,21,Country 16127,City,21,Country 16128,City,21,Country 16129,City,21,Country 15806,City,21,Country 15807,City,21,Country 15812,City,21,Country 15813,City,21,Country 15823,City,21,Country 15842,City,21,Country 15876,City,21,Country 15882,City,21,Country 15883,City,21,Country 15899,City,21,Country 15905,City,21,Country 15906,City,21,Country 15908,City,21,Country 15913,City,21,Country 15924,City,21,Country 15925,City,21,Country 15950,City,21,Country 15952,City,21,Country 15959,City,21,Country 15960,City,21,Country 15977,City,21,Country 15990,City,21,Country 15992,City,21,Country 16006,City,21,Country 16042,City,21,Country 16047,City,21,Country 16054,City,21,Country 16055,City,21,Country 16059,City,21,Country 16062,City,21,Country 16066,City,21,Country 16069,City,21,Country 16079,City,21,Country 16103,City,21,Country 16106,City,21,Country 16107,City,21,Country 16108,City,21,Country 16121,City,21,Country 16124,City,21,Country 16126,City,21,Country 15881,City,21,Country 15927,City,21,Country 15969,City,21,Country 15984,City,21,Country 15989,City,21,Country 16016,City,21,Country 16050,City,21,Country 16087,City,21,Country 16120,City,21,Country 15811,City,21,Country 15814,City,21,Country 15815,City,21,Country 15819,City,21,Country 15824,City,21,Country 15825,City,21,Country 15826,City,21,Country 15827,City,21,Country 15828,City,21,Country 15840,City,21,Country 15845,City,21,Country 15855,City,21,Country 15856,City,21,Country 15859,City,21,Country 15860,City,21,Country 15871,City,21,Country 15875,City,21,Country 15878,City,21,Country 15879,City,21,Country 15880,City,21,Country 15889,City,21,Country 15890,City,21,Country 15900,City,21,Country 15901,City,21,Country 15904,City,21,Country 15907,City,21,Country 15912,City,21,Country 15916,City,21,Country 15921,City,21,Country 15922,City,21,Country 15931,City,21,Country 15933,City,21,Country 15940,City,21,Country 15941,City,21,Country 15945,City,21,Country 15949,City,21,Country 15954,City,21,Country 15956,City,21,Country 15958,City,21,Country 15961,City,21,Country 15963,City,21,Country 15966,City,21,Country 15972,City,21,Country 15976,City,21,Country 15978,City,21,Country 15981,City,21,Country 15983,City,21,Country 15987,City,21,Country 15995,City,21,Country 15996,City,21,Country 16001,City,21,Country 16003,City,21,Country 16008,City,21,Country 16009,City,21,Country 16011,City,21,Country 16012,City,21,Country 16022,City,21,Country 16026,City,21,Country 16029,City,21,Country 16030,City,21,Country 16031,City,21,Country 16032,City,21,Country 16034,City,21,Country 16037,City,21,Country 16043,City,21,Country 16045,City,21,Country 16046,City,21,Country 16048,City,21,Country 16051,City,21,Country 16060,City,21,Country 16063,City,21,Country 16064,City,21,Country 16065,City,21,Country 16067,City,21,Country 16068,City,21,Country 16070,City,21,Country 16071,City,21,Country 16072,City,21,Country 16073,City,21,Country 16074,City,21,Country 16077,City,21,Country 16078,City,21,Country 16080,City,21,Country 16083,City,21,Country 16085,City,21,Country 16088,City,21,Country 16091,City,21,Country 16092,City,21,Country 16094,City,21,Country 16095,City,21,Country 16096,City,21,Country 16097,City,21,Country 16101,City,21,Country 16102,City,21,Country 16109,City,21,Country 16117,City,21,Country 16118,City,21,Country 16119,City,21,Country 16125,City,21,Country 16131,City,21,Country 16132,City,21,Country 15808,City,21,Country 15809,City,21,Country 15816,City,21,Country 15817,City,21,Country 15836,City,21,Country 15838,City,21,Country 15839,City,21,Country 15847,City,21,Country 15853,City,21,Country 15854,City,21,Country 15857,City,21,Country 15858,City,21,Country 15862,City,21,Country 15872,City,21,Country 15873,City,21,Country 15891,City,21,Country 15892,City,21,Country 15902,City,21,Country 15903,City,21,Country 15914,City,21,Country 15920,City,21,Country 15928,City,21,Country 15932,City,21,Country 15934,City,21,Country 15935,City,21,Country 15937,City,21,Country 15938,City,21,Country 15939,City,21,Country 15948,City,21,Country 15947,City,21,Country 15951,City,21,Country 15953,City,21,Country 15955,City,21,Country 15979,City,21,Country 15980,City,21,Country 15994,City,21,Country 15997,City,21,Country 16000,City,21,Country 16015,City,21,Country 16025,City,21,Country 16038,City,21,Country 16056,City,21,Country 16057,City,21,Country 16061,City,21,Country 16099,City,21,Country 16104,City,21,Country 16115,City,21,Country 15818,City,21,Country 15822,City,21,Country 15831,City,21,Country 15832,City,21,Country 15837,City,21,Country 15846,City,21,Country 15851,City,21,Country 15852,City,21,Country 15865,City,21,Country 15866,City,21,Country 15870,City,21,Country 15874,City,21,Country 15877,City,21,Country 15886,City,21,Country 15887,City,21,Country 15893,City,21,Country 15894,City,21,Country 15943,City,21,Country 15944,City,21,Country 15970,City,21,Country 15971,City,21,Country 15973,City,21,Country 15974,City,21,Country 15975,City,21,Country 15991,City,21,Country 15998,City,21,Country 15999,City,21,Country 16004,City,21,Country 16007,City,21,Country 16013,City,21,Country 16014,City,21,Country 16018,City,21,Country 16019,City,21,Country 16023,City,21,Country 16024,City,21,Country 16039,City,21,Country 16040,City,21,Country 16052,City,21,Country 16053,City,21,Country 16058,City,21,Country 16082,City,21,Country 16084,City,21,Country 16086,City,21,Country 16093,City,21,Country 16100,City,21,Country 16105,City,21,Country 16110,City,21,Country 16111,City,21,Country 8693,City,22,Country 8608,City,22,Country 8609,City,22,Country 8610,City,22,Country 8611,City,22,Country 8613,City,22,Country 8614,City,22,Country 8623,City,22,Country 8624,City,22,Country 8625,City,22,Country 8626,City,22,Country 8628,City,22,Country 8629,City,22,Country 8630,City,22,Country 8636,City,22,Country 8639,City,22,Country 8641,City,22,Country 8648,City,22,Country 8649,City,22,Country 8650,City,22,Country 8651,City,22,Country 8652,City,22,Country 8654,City,22,Country 8655,City,22,Country 8656,City,22,Country 8659,City,22,Country 8662,City,22,Country 8663,City,22,Country 8665,City,22,Country 8666,City,22,Country 8669,City,22,Country 8671,City,22,Country 8672,City,22,Country 8673,City,22,Country 8674,City,22,Country 8675,City,22,Country 8676,City,22,Country 8677,City,22,Country 8678,City,22,Country 8681,City,22,Country 8686,City,22,Country 8687,City,22,Country 8688,City,22,Country 8689,City,22,Country 8691,City,22,Country 8694,City,22,Country 8718,City,22,Country 8720,City,22,Country 8721,City,22,Country 8722,City,22,Country 8723,City,22,Country 8724,City,22,Country 8725,City,22,Country 8726,City,22,Country 8727,City,22,Country 8728,City,22,Country 8729,City,22,Country 8730,City,22,Country 8731,City,22,Country 8732,City,22,Country 8733,City,22,Country 8734,City,22,Country 8735,City,22,Country 8741,City,22,Country 8742,City,22,Country 8744,City,22,Country 8745,City,22,Country 8751,City,22,Country 8755,City,22,Country 8773,City,22,Country 8774,City,22,Country 8776,City,22,Country 8778,City,22,Country 8781,City,22,Country 8782,City,22,Country 8783,City,22,Country 8786,City,22,Country 8787,City,22,Country 8788,City,22,Country 8789,City,22,Country 8792,City,22,Country 8793,City,22,Country 8794,City,22,Country 8795,City,22,Country 8797,City,22,Country 8798,City,22,Country 8799,City,22,Country 8803,City,22,Country 8804,City,22,Country 8807,City,22,Country 8808,City,22,Country 8809,City,22,Country 8810,City,22,Country 8813,City,22,Country 8814,City,22,Country 8815,City,22,Country 8816,City,22,Country 8817,City,22,Country 8818,City,22,Country 8821,City,22,Country 8822,City,22,Country 8823,City,22,Country 8824,City,22,Country 8825,City,22,Country 8826,City,22,Country 8827,City,22,Country 8828,City,22,Country 8829,City,22,Country 8832,City,22,Country 8833,City,22,Country 8835,City,22,Country 8836,City,22,Country 8837,City,22,Country 8840,City,22,Country 8841,City,22,Country 8843,City,22,Country 8845,City,22,Country 8846,City,22,Country 8851,City,22,Country 8852,City,22,Country 8853,City,22,Country 8854,City,22,Country 8855,City,22,Country 8856,City,22,Country 8857,City,22,Country 8858,City,22,Country 8859,City,22,Country 8860,City,22,Country 8861,City,22,Country 8862,City,22,Country 8863,City,22,Country 8864,City,22,Country 8865,City,22,Country 8866,City,22,Country 8867,City,22,Country 8868,City,22,Country 8869,City,22,Country 8870,City,22,Country 8871,City,22,Country 8872,City,22,Country 8878,City,22,Country 8879,City,22,Country 8880,City,22,Country 8881,City,22,Country 8882,City,22,Country 8883,City,22,Country 8884,City,22,Country 8885,City,22,Country 8887,City,22,Country 8889,City,22,Country 8891,City,22,Country 8892,City,22,Country 8893,City,22,Country 8895,City,22,Country 8898,City,22,Country 8899,City,22,Country 8902,City,22,Country 8903,City,22,Country 8904,City,22,Country 8905,City,22,Country 8908,City,22,Country 8909,City,22,Country 8910,City,22,Country 8912,City,22,Country 8913,City,22,Country 8914,City,22,Country 8915,City,22,Country 8922,City,22,Country 8923,City,22,Country 8924,City,22,Country 8926,City,22,Country 8927,City,22,Country 8929,City,22,Country 8930,City,22,Country 8931,City,22,Country 8934,City,22,Country 8935,City,22,Country 8937,City,22,Country 8938,City,22,Country 8943,City,22,Country 8945,City,22,Country 8951,City,22,Country 8952,City,22,Country 8954,City,22,Country 8955,City,22,Country 8956,City,22,Country 8957,City,22,Country 8958,City,22,Country 8959,City,22,Country 8963,City,22,Country 8966,City,22,Country 8967,City,22,Country 8968,City,22,Country 8969,City,22,Country 8970,City,22,Country 8971,City,22,Country 8972,City,22,Country 8974,City,22,Country 8976,City,22,Country 8977,City,22,Country 8978,City,22,Country 8979,City,22,Country 8982,City,22,Country 8983,City,22,Country 8986,City,22,Country 8987,City,22,Country 8989,City,22,Country 8992,City,22,Country 8995,City,22,Country 9002,City,22,Country 9003,City,22,Country 9004,City,22,Country 9005,City,22,Country 9006,City,22,Country 9007,City,22,Country 9008,City,22,Country 9015,City,22,Country 9016,City,22,Country 9020,City,22,Country 9021,City,22,Country 9022,City,22,Country 9025,City,22,Country 9027,City,22,Country 9028,City,22,Country 9030,City,22,Country 9032,City,22,Country 9039,City,22,Country 9040,City,22,Country 9041,City,22,Country 9045,City,22,Country 9046,City,22,Country 9047,City,22,Country 9048,City,22,Country 9049,City,22,Country 9050,City,22,Country 9051,City,22,Country 9052,City,22,Country 9053,City,22,Country 9054,City,22,Country 9055,City,22,Country 9056,City,22,Country 9057,City,22,Country 9058,City,22,Country 9059,City,22,Country 9066,City,22,Country 9067,City,22,Country 9069,City,22,Country 9070,City,22,Country 9073,City,22,Country 9075,City,22,Country 9076,City,22,Country 9077,City,22,Country 9078,City,22,Country 9081,City,22,Country 9082,City,22,Country 9085,City,22,Country 9086,City,22,Country 9088,City,22,Country 9092,City,22,Country 9096,City,22,Country 9100,City,22,Country 9103,City,22,Country 9104,City,22,Country 9105,City,22,Country 9106,City,22,Country 9107,City,22,Country 9112,City,22,Country 9118,City,22,Country 9120,City,22,Country 9121,City,22,Country 9122,City,22,Country 9123,City,22,Country 9124,City,22,Country 9125,City,22,Country 9126,City,22,Country 9127,City,22,Country 9128,City,22,Country 9129,City,22,Country 9130,City,22,Country 9131,City,22,Country 9132,City,22,Country 9133,City,22,Country 9135,City,22,Country 9136,City,22,Country 9137,City,22,Country 9138,City,22,Country 9139,City,22,Country 9140,City,22,Country 9141,City,22,Country 9142,City,22,Country 9143,City,22,Country 9144,City,22,Country 9145,City,22,Country 9146,City,22,Country 9147,City,22,Country 9148,City,22,Country 9149,City,22,Country 9150,City,22,Country 9151,City,22,Country 9152,City,22,Country 9153,City,22,Country 8612,City,22,Country 8615,City,22,Country 8616,City,22,Country 8617,City,22,Country 8618,City,22,Country 8619,City,22,Country 8620,City,22,Country 8621,City,22,Country 8622,City,22,Country 8627,City,22,Country 8631,City,22,Country 8632,City,22,Country 8633,City,22,Country 8634,City,22,Country 8635,City,22,Country 8637,City,22,Country 8638,City,22,Country 8640,City,22,Country 8642,City,22,Country 8643,City,22,Country 8644,City,22,Country 8645,City,22,Country 8646,City,22,Country 8647,City,22,Country 8653,City,22,Country 8657,City,22,Country 8658,City,22,Country 8660,City,22,Country 8661,City,22,Country 8664,City,22,Country 8668,City,22,Country 8667,City,22,Country 8670,City,22,Country 8679,City,22,Country 8680,City,22,Country 8682,City,22,Country 8683,City,22,Country 8684,City,22,Country 8685,City,22,Country 8690,City,22,Country 8692,City,22,Country 8695,City,22,Country 8696,City,22,Country 8697,City,22,Country 8698,City,22,Country 8699,City,22,Country 8700,City,22,Country 8701,City,22,Country 8702,City,22,Country 8708,City,22,Country 8703,City,22,Country 8704,City,22,Country 8707,City,22,Country 8705,City,22,Country 8706,City,22,Country 8709,City,22,Country 8710,City,22,Country 8711,City,22,Country 8712,City,22,Country 8713,City,22,Country 8714,City,22,Country 8715,City,22,Country 8716,City,22,Country 8717,City,22,Country 8719,City,22,Country 8736,City,22,Country 8737,City,22,Country 8738,City,22,Country 8739,City,22,Country 8740,City,22,Country 8743,City,22,Country 9154,City,22,Country 9155,City,22,Country 8746,City,22,Country 8747,City,22,Country 8748,City,22,Country 9156,City,22,Country 8749,City,22,Country 8750,City,22,Country 8752,City,22,Country 8753,City,22,Country 9157,City,22,Country 8754,City,22,Country 8756,City,22,Country 8757,City,22,Country 8758,City,22,Country 8759,City,22,Country 8760,City,22,Country 8766,City,22,Country 8767,City,22,Country 8761,City,22,Country 8762,City,22,Country 8763,City,22,Country 8764,City,22,Country 8765,City,22,Country 8768,City,22,Country 8769,City,22,Country 8770,City,22,Country 8771,City,22,Country 8772,City,22,Country 8775,City,22,Country 8777,City,22,Country 8779,City,22,Country 8780,City,22,Country 8784,City,22,Country 8785,City,22,Country 8790,City,22,Country 8791,City,22,Country 8796,City,22,Country 8800,City,22,Country 8801,City,22,Country 8802,City,22,Country 8805,City,22,Country 8806,City,22,Country 8811,City,22,Country 8812,City,22,Country 8839,City,22,Country 8819,City,22,Country 8820,City,22,Country 8830,City,22,Country 8831,City,22,Country 8834,City,22,Country 8838,City,22,Country 8842,City,22,Country 8844,City,22,Country 8847,City,22,Country 8848,City,22,Country 8849,City,22,Country 8850,City,22,Country 8873,City,22,Country 8874,City,22,Country 8875,City,22,Country 8876,City,22,Country 8877,City,22,Country 8911,City,22,Country 8886,City,22,Country 8888,City,22,Country 8890,City,22,Country 8900,City,22,Country 8894,City,22,Country 8896,City,22,Country 8897,City,22,Country 8901,City,22,Country 8906,City,22,Country 8907,City,22,Country 8916,City,22,Country 8917,City,22,Country 8918,City,22,Country 8919,City,22,Country 8920,City,22,Country 8921,City,22,Country 8925,City,22,Country 8928,City,22,Country 8932,City,22,Country 8933,City,22,Country 8936,City,22,Country 8939,City,22,Country 8940,City,22,Country 8941,City,22,Country 8942,City,22,Country 8944,City,22,Country 8946,City,22,Country 8947,City,22,Country 8948,City,22,Country 8949,City,22,Country 8950,City,22,Country 8953,City,22,Country 8960,City,22,Country 8961,City,22,Country 8962,City,22,Country 8964,City,22,Country 8965,City,22,Country 8973,City,22,Country 8975,City,22,Country 8980,City,22,Country 8981,City,22,Country 8984,City,22,Country 8985,City,22,Country 8988,City,22,Country 9009,City,22,Country 8990,City,22,Country 8991,City,22,Country 8993,City,22,Country 8994,City,22,Country 8996,City,22,Country 8997,City,22,Country 8998,City,22,Country 8999,City,22,Country 9000,City,22,Country 9001,City,22,Country 9010,City,22,Country 9012,City,22,Country 9011,City,22,Country 9013,City,22,Country 9014,City,22,Country 9017,City,22,Country 9018,City,22,Country 9019,City,22,Country 9023,City,22,Country 9024,City,22,Country 9026,City,22,Country 9029,City,22,Country 9031,City,22,Country 9033,City,22,Country 9034,City,22,Country 9035,City,22,Country 9036,City,22,Country 9037,City,22,Country 9038,City,22,Country 9042,City,22,Country 9043,City,22,Country 9044,City,22,Country 9060,City,22,Country 9061,City,22,Country 9062,City,22,Country 9063,City,22,Country 9064,City,22,Country 9065,City,22,Country 9068,City,22,Country 9071,City,22,Country 9072,City,22,Country 9074,City,22,Country 9079,City,22,Country 9080,City,22,Country 9083,City,22,Country 9084,City,22,Country 9087,City,22,Country 9089,City,22,Country 9090,City,22,Country 9091,City,22,Country 9093,City,22,Country 9094,City,22,Country 9095,City,22,Country 9097,City,22,Country 9098,City,22,Country 9099,City,22,Country 9101,City,22,Country 9102,City,22,Country 9108,City,22,Country 9109,City,22,Country 9110,City,22,Country 9111,City,22,Country 9113,City,22,Country 9114,City,22,Country 9115,City,22,Country 9116,City,22,Country 9117,City,22,Country 9119,City,22,Country 9134,City,22,Country 8233,City,28,Country 8230,City,28,Country 8217,City,28,Country 8218,City,28,Country 8219,City,28,Country 8220,City,28,Country 8222,City,28,Country 8224,City,28,Country 8226,City,28,Country 8227,City,28,Country 8228,City,28,Country 8229,City,28,Country 8234,City,28,Country 8235,City,28,Country 8236,City,28,Country 8431,City,28,Country 8237,City,28,Country 8433,City,28,Country 8238,City,28,Country 8435,City,28,Country 8429,City,28,Country 8239,City,28,Country 8241,City,28,Country 8243,City,28,Country 8245,City,28,Country 8246,City,28,Country 8247,City,28,Country 8248,City,28,Country 8249,City,28,Country 8250,City,28,Country 8251,City,28,Country 8252,City,28,Country 8253,City,28,Country 8254,City,28,Country 8255,City,28,Country 8257,City,28,Country 8260,City,28,Country 8261,City,28,Country 8262,City,28,Country 8263,City,28,Country 8264,City,28,Country 8265,City,28,Country 8266,City,28,Country 8267,City,28,Country 8268,City,28,Country 8269,City,28,Country 8270,City,28,Country 8273,City,28,Country 8271,City,28,Country 8274,City,28,Country 8275,City,28,Country 8276,City,28,Country 8277,City,28,Country 8279,City,28,Country 8281,City,28,Country 8280,City,28,Country 8283,City,28,Country 8284,City,28,Country 8285,City,28,Country 8287,City,28,Country 8288,City,28,Country 8293,City,28,Country 8289,City,28,Country 8291,City,28,Country 8292,City,28,Country 8294,City,28,Country 8295,City,28,Country 8296,City,28,Country 8299,City,28,Country 8306,City,28,Country 8300,City,28,Country 8304,City,28,Country 8310,City,28,Country 8311,City,28,Country 8313,City,28,Country 8314,City,28,Country 8316,City,28,Country 8317,City,28,Country 8318,City,28,Country 8320,City,28,Country 8321,City,28,Country 8322,City,28,Country 8327,City,28,Country 8329,City,28,Country 8330,City,28,Country 8332,City,28,Country 8336,City,28,Country 8335,City,28,Country 8338,City,28,Country 8339,City,28,Country 8340,City,28,Country 8344,City,28,Country 8345,City,28,Country 8346,City,28,Country 8347,City,28,Country 8348,City,28,Country 8349,City,28,Country 8351,City,28,Country 8353,City,28,Country 8356,City,28,Country 8357,City,28,Country 8359,City,28,Country 8361,City,28,Country 8362,City,28,Country 8363,City,28,Country 8364,City,28,Country 8366,City,28,Country 8370,City,28,Country 8371,City,28,Country 8372,City,28,Country 8373,City,28,Country 8376,City,28,Country 8377,City,28,Country 8378,City,28,Country 8379,City,28,Country 8380,City,28,Country 8438,City,28,Country 8440,City,28,Country 8381,City,28,Country 8382,City,28,Country 8384,City,28,Country 8387,City,28,Country 8390,City,28,Country 8391,City,28,Country 8392,City,28,Country 8441,City,28,Country 8442,City,28,Country 8394,City,28,Country 8396,City,28,Country 8397,City,28,Country 8398,City,28,Country 8399,City,28,Country 8400,City,28,Country 8401,City,28,Country 8404,City,28,Country 8405,City,28,Country 8406,City,28,Country 8408,City,28,Country 8409,City,28,Country 8410,City,28,Country 8411,City,28,Country 8412,City,28,Country 8414,City,28,Country 8415,City,28,Country 8416,City,28,Country 8417,City,28,Country 8420,City,28,Country 8421,City,28,Country 8422,City,28,Country 8423,City,28,Country 8424,City,28,Country 8425,City,28,Country 8426,City,28,Country 8443,City,28,Country 8427,City,28,Country 8444,City,28,Country 8445,City,28,Country 8215,City,28,Country 8216,City,28,Country 8221,City,28,Country 8223,City,28,Country 8225,City,28,Country 8231,City,28,Country 8232,City,28,Country 8430,City,28,Country 8434,City,28,Country 8432,City,28,Country 8240,City,28,Country 8242,City,28,Country 8244,City,28,Country 8256,City,28,Country 8258,City,28,Country 8259,City,28,Country 8272,City,28,Country 8278,City,28,Country 8282,City,28,Country 8286,City,28,Country 8290,City,28,Country 8297,City,28,Country 8298,City,28,Country 8301,City,28,Country 8302,City,28,Country 8303,City,28,Country 8305,City,28,Country 8307,City,28,Country 8308,City,28,Country 8309,City,28,Country 8312,City,28,Country 8315,City,28,Country 8319,City,28,Country 8323,City,28,Country 8324,City,28,Country 8325,City,28,Country 8326,City,28,Country 8328,City,28,Country 8331,City,28,Country 8333,City,28,Country 8334,City,28,Country 8337,City,28,Country 8341,City,28,Country 8342,City,28,Country 8343,City,28,Country 8350,City,28,Country 8352,City,28,Country 8354,City,28,Country 8355,City,28,Country 8358,City,28,Country 8360,City,28,Country 8365,City,28,Country 8367,City,28,Country 8368,City,28,Country 8369,City,28,Country 8374,City,28,Country 8375,City,28,Country 8436,City,28,Country 8437,City,28,Country 8439,City,28,Country 8383,City,28,Country 8385,City,28,Country 8386,City,28,Country 8388,City,28,Country 8389,City,28,Country 8393,City,28,Country 8395,City,28,Country 8402,City,28,Country 8403,City,28,Country 8407,City,28,Country 8413,City,28,Country 8418,City,28,Country 8419,City,28,Country 8446,City,28,Country 8428,City,28,Country 9265,City,34,Country 9270,City,34,Country 9275,City,34,Country 9329,City,34,Country 9335,City,34,Country 9341,City,34,Country 9368,City,34,Country 9374,City,34,Country 9422,City,34,Country 9425,City,34,Country 9429,City,34,Country 9476,City,34,Country 9482,City,34,Country 9511,City,34,Country 9555,City,34,Country 9571,City,34,Country 9582,City,34,Country 9584,City,34,Country 9589,City,34,Country 9603,City,34,Country 9633,City,34,Country 9653,City,34,Country 9670,City,34,Country 9681,City,34,Country 9686,City,34,Country 9694,City,34,Country 9705,City,34,Country 9711,City,34,Country 9745,City,34,Country 9250,City,34,Country 9251,City,34,Country 9261,City,34,Country 9266,City,34,Country 9292,City,34,Country 9299,City,34,Country 9353,City,34,Country 9356,City,34,Country 9363,City,34,Country 9397,City,34,Country 9406,City,34,Country 9419,City,34,Country 9442,City,34,Country 9495,City,34,Country 9498,City,34,Country 9529,City,34,Country 9538,City,34,Country 9560,City,34,Country 9564,City,34,Country 9596,City,34,Country 9605,City,34,Country 9640,City,34,Country 9658,City,34,Country 9662,City,34,Country 9668,City,34,Country 9674,City,34,Country 9683,City,34,Country 9702,City,34,Country 9703,City,34,Country 9713,City,34,Country 9715,City,34,Country 9728,City,34,Country 9262,City,34,Country 9310,City,34,Country 9330,City,34,Country 9357,City,34,Country 9378,City,34,Country 9420,City,34,Country 9457,City,34,Country 9458,City,34,Country 9477,City,34,Country 9499,City,34,Country 9514,City,34,Country 9587,City,34,Country 9611,City,34,Country 9690,City,34,Country 9720,City,34,Country 9318,City,34,Country 9328,City,34,Country 9465,City,34,Country 9474,City,34,Country 9586,City,34,Country 9615,City,34,Country 9689,City,34,Country 9726,City,34,Country 9308,City,34,Country 9342,City,34,Country 9343,City,34,Country 9350,City,34,Country 9392,City,34,Country 9394,City,34,Country 9401,City,34,Country 9455,City,34,Country 9486,City,34,Country 9487,City,34,Country 9493,City,34,Country 9527,City,34,Country 9532,City,34,Country 9598,City,34,Country 9607,City,34,Country 9613,City,34,Country 9693,City,34,Country 9716,City,34,Country 9722,City,34,Country 9257,City,34,Country 9323,City,34,Country 9354,City,34,Country 9362,City,34,Country 9377,City,34,Country 9416,City,34,Country 9448,City,34,Country 9469,City,34,Country 9496,City,34,Country 9502,City,34,Country 9535,City,34,Country 9276,City,34,Country 9277,City,34,Country 9321,City,34,Country 9367,City,34,Country 9381,City,34,Country 9407,City,34,Country 9430,City,34,Country 9431,City,34,Country 9467,City,34,Country 9504,City,34,Country 9518,City,34,Country 9539,City,34,Country 9572,City,34,Country 9583,City,34,Country 9614,City,34,Country 9671,City,34,Country 9682,City,34,Country 9256,City,34,Country 9385,City,34,Country 9388,City,34,Country 9390,City,34,Country 9523,City,34,Country 9612,City,34,Country 9621,City,34,Country 9721,City,34,Country 9725,City,34,Country 9732,City,34,Country 9743,City,34,Country 9274,City,34,Country 9283,City,34,Country 9290,City,34,Country 9301,City,34,Country 9387,City,34,Country 9398,City,34,Country 9404,City,34,Country 9437,City,34,Country 9450,City,34,Country 9478,City,34,Country 9522,City,34,Country 9536,City,34,Country 9622,City,34,Country 9625,City,34,Country 9632,City,34,Country 9733,City,34,Country 9736,City,34,Country 9744,City,34,Country 9267,City,34,Country 9273,City,34,Country 9286,City,34,Country 9384,City,34,Country 9423,City,34,Country 9428,City,34,Country 9440,City,34,Country 9520,City,34,Country 9547,City,34,Country 9551,City,34,Country 9554,City,34,Country 9568,City,34,Country 9585,City,34,Country 9602,City,34,Country 9627,City,34,Country 9644,City,34,Country 9649,City,34,Country 9652,City,34,Country 9666,City,34,Country 9684,City,34,Country 9685,City,34,Country 9688,City,34,Country 9710,City,34,Country 9738,City,34,Country 9268,City,34,Country 9288,City,34,Country 9509,City,34,Country 9552,City,34,Country 9567,City,34,Country 9636,City,34,Country 9650,City,34,Country 9665,City,34,Country 9724,City,34,Country 9748,City,34,Country 9269,City,34,Country 9300,City,34,Country 9312,City,34,Country 9314,City,34,Country 9337,City,34,Country 9347,City,34,Country 9366,City,34,Country 9372,City,34,Country 9386,City,34,Country 9409,City,34,Country 9424,City,34,Country 9449,City,34,Country 9460,City,34,Country 9462,City,34,Country 9484,City,34,Country 9490,City,34,Country 9503,City,34,Country 9521,City,34,Country 9541,City,34,Country 9557,City,34,Country 9562,City,34,Country 9655,City,34,Country 9660,City,34,Country 9696,City,34,Country 9259,City,34,Country 9289,City,34,Country 9345,City,34,Country 9351,City,34,Country 9352,City,34,Country 9355,City,34,Country 9365,City,34,Country 9375,City,34,Country 9383,City,34,Country 9417,City,34,Country 9489,City,34,Country 9494,City,34,Country 9497,City,34,Country 9512,City,34,Country 9516,City,34,Country 9519,City,34,Country 9530,City,34,Country 9548,City,34,Country 9553,City,34,Country 9558,City,34,Country 9569,City,34,Country 9573,City,34,Country 9578,City,34,Country 9579,City,34,Country 9595,City,34,Country 9597,City,34,Country 9645,City,34,Country 9651,City,34,Country 9656,City,34,Country 9667,City,34,Country 9677,City,34,Country 9678,City,34,Country 9704,City,34,Country 9723,City,34,Country 9348,City,34,Country 9379,City,34,Country 9389,City,34,Country 9399,City,34,Country 9491,City,34,Country 9515,City,34,Country 9524,City,34,Country 9570,City,34,Country 9581,City,34,Country 9616,City,34,Country 9635,City,34,Country 9669,City,34,Country 9680,City,34,Country 9727,City,34,Country 9747,City,34,Country 9281,City,34,Country 9322,City,34,Country 9349,City,34,Country 9435,City,34,Country 9443,City,34,Country 9468,City,34,Country 9492,City,34,Country 9576,City,34,Country 9593,City,34,Country 9617,City,34,Country 9628,City,34,Country 9675,City,34,Country 9687,City,34,Country 9699,City,34,Country 9729,City,34,Country 9739,City,34,Country 146184,City,34,Country 9253,City,34,Country 9319,City,34,Country 9331,City,34,Country 9358,City,34,Country 9413,City,34,Country 9466,City,34,Country 9479,City,34,Country 9500,City,34,Country 9588,City,34,Country 9590,City,34,Country 9619,City,34,Country 9692,City,34,Country 9695,City,34,Country 9730,City,34,Country 9360,City,34,Country 9371,City,34,Country 9410,City,34,Country 9508,City,34,Country 9542,City,34,Country 9591,City,34,Country 9620,City,34,Country 9697,City,34,Country 9731,City,34,Country 9264,City,34,Country 9279,City,34,Country 9298,City,34,Country 9306,City,34,Country 9315,City,34,Country 9339,City,34,Country 9393,City,34,Country 9405,City,34,Country 9421,City,34,Country 9433,City,34,Country 9447,City,34,Country 9453,City,34,Country 9463,City,34,Country 9526,City,34,Country 9537,City,34,Country 9575,City,34,Country 9594,City,34,Country 9639,City,34,Country 9673,City,34,Country 9700,City,34,Country 9752,City,34,Country 9291,City,34,Country 9701,City,34,Country 9707,City,34,Country 9254,City,34,Country 9282,City,34,Country 9285,City,34,Country 9296,City,34,Country 9297,City,34,Country 9311,City,34,Country 9316,City,34,Country 9326,City,34,Country 9327,City,34,Country 9332,City,34,Country 9333,City,34,Country 9346,City,34,Country 9369,City,34,Country 9370,City,34,Country 9382,City,34,Country 9402,City,34,Country 9414,City,34,Country 9436,City,34,Country 9439,City,34,Country 9445,City,34,Country 9446,City,34,Country 9459,City,34,Country 9464,City,34,Country 9472,City,34,Country 9473,City,34,Country 9480,City,34,Country 9505,City,34,Country 9506,City,34,Country 9507,City,34,Country 9533,City,34,Country 9556,City,34,Country 9563,City,34,Country 9580,City,34,Country 9592,City,34,Country 9609,City,34,Country 9638,City,34,Country 9654,City,34,Country 9661,City,34,Country 9679,City,34,Country 9698,City,34,Country 9718,City,34,Country 9750,City,34,Country 9258,City,34,Country 9302,City,34,Country 9340,City,34,Country 9338,City,34,Country 9359,City,34,Country 9395,City,34,Country 9408,City,34,Country 9441,City,34,Country 9451,City,34,Country 9475,City,34,Country 9485,City,34,Country 9501,City,34,Country 9528,City,34,Country 9540,City,34,Country 9545,City,34,Country 9549,City,34,Country 9566,City,34,Country 9599,City,34,Country 9647,City,34,Country 9664,City,34,Country 9691,City,34,Country 9706,City,34,Country 9255,City,34,Country 9415,City,34,Country 9543,City,34,Country 9544,City,34,Country 9561,City,34,Country 9610,City,34,Country 9641,City,34,Country 9642,City,34,Country 9659,City,34,Country 9719,City,34,Country 9252,City,34,Country 9260,City,34,Country 9263,City,34,Country 9272,City,34,Country 9293,City,34,Country 9304,City,34,Country 9307,City,34,Country 9313,City,34,Country 9364,City,34,Country 9412,City,34,Country 9418,City,34,Country 9427,City,34,Country 9444,City,34,Country 9452,City,34,Country 9454,City,34,Country 9461,City,34,Country 9565,City,34,Country 9606,City,34,Country 9623,City,34,Country 9624,City,34,Country 9629,City,34,Country 9663,City,34,Country 9714,City,34,Country 9734,City,34,Country 9735,City,34,Country 9740,City,34,Country 9751,City,34,Country 9294,City,34,Country 9305,City,34,Country 9324,City,34,Country 9334,City,34,Country 9361,City,34,Country 9391,City,34,Country 9470,City,34,Country 9481,City,34,Country 9525,City,34,Country 9550,City,34,Country 9559,City,34,Country 9601,City,34,Country 9604,City,34,Country 9608,City,34,Country 9626,City,34,Country 9637,City,34,Country 9646,City,34,Country 9648,City,34,Country 9657,City,34,Country 9709,City,34,Country 9712,City,34,Country 9717,City,34,Country 9737,City,34,Country 9749,City,34,Country 9271,City,34,Country 9284,City,34,Country 9287,City,34,Country 9303,City,34,Country 9309,City,34,Country 9317,City,34,Country 9320,City,34,Country 9336,City,34,Country 9380,City,34,Country 9396,City,34,Country 9411,City,34,Country 9426,City,34,Country 9438,City,34,Country 9456,City,34,Country 9483,City,34,Country 9517,City,34,Country 9577,City,34,Country 9630,City,34,Country 9676,City,34,Country 9741,City,34,Country 9280,City,34,Country 9295,City,34,Country 9344,City,34,Country 9373,City,34,Country 9376,City,34,Country 9400,City,34,Country 9403,City,34,Country 9434,City,34,Country 9488,City,34,Country 9510,City,34,Country 9513,City,34,Country 9531,City,34,Country 9534,City,34,Country 9546,City,34,Country 9574,City,34,Country 9631,City,34,Country 9643,City,34,Country 9672,City,34,Country 9742,City,34,Country 9278,City,34,Country 9325,City,34,Country 9432,City,34,Country 9471,City,34,Country 9600,City,34,Country 9618,City,34,Country 9634,City,34,Country 9708,City,34,Country 9746,City,34,Country 54404,City,55,Country 54418,City,55,Country 55017,City,55,Country 54449,City,55,Country 54453,City,55,Country 55025,City,55,Country 54489,City,55,Country 54505,City,55,Country 54571,City,55,Country 54508,City,55,Country 54515,City,55,Country 54517,City,55,Country 54588,City,55,Country 54589,City,55,Country 54593,City,55,Country 54607,City,55,Country 54630,City,55,Country 54658,City,55,Country 54831,City,55,Country 54869,City,55,Country 55028,City,55,Country 54886,City,55,Country 54891,City,55,Country 54960,City,55,Country 54962,City,55,Country 55038,City,55,Country 55013,City,55,Country 54387,City,55,Country 54425,City,55,Country 54434,City,55,Country 54441,City,55,Country 54450,City,55,Country 54460,City,55,Country 54490,City,55,Country 54498,City,55,Country 54534,City,55,Country 54551,City,55,Country 54590,City,55,Country 54661,City,55,Country 54672,City,55,Country 54708,City,55,Country 54757,City,55,Country 54774,City,55,Country 54778,City,55,Country 54790,City,55,Country 54819,City,55,Country 54862,City,55,Country 54874,City,55,Country 54887,City,55,Country 54889,City,55,Country 54897,City,55,Country 54899,City,55,Country 54910,City,55,Country 54957,City,55,Country 54995,City,55,Country 54437,City,55,Country 55022,City,55,Country 54471,City,55,Country 54513,City,55,Country 54525,City,55,Country 54544,City,55,Country 54653,City,55,Country 54656,City,55,Country 54662,City,55,Country 54684,City,55,Country 54704,City,55,Country 54728,City,55,Country 54736,City,55,Country 54737,City,55,Country 54785,City,55,Country 54780,City,55,Country 54787,City,55,Country 54813,City,55,Country 54821,City,55,Country 54898,City,55,Country 54900,City,55,Country 54914,City,55,Country 54954,City,55,Country 55007,City,55,Country 55041,City,55,Country 55042,City,55,Country 54384,City,55,Country 54385,City,55,Country 54426,City,55,Country 54427,City,55,Country 54432,City,55,Country 54433,City,55,Country 54436,City,55,Country 54479,City,55,Country 54480,City,55,Country 54483,City,55,Country 54484,City,55,Country 54487,City,55,Country 54506,City,55,Country 54530,City,55,Country 54542,City,55,Country 54585,City,55,Country 54586,City,55,Country 54629,City,55,Country 54634,City,55,Country 54644,City,55,Country 54681,City,55,Country 54691,City,55,Country 54692,City,55,Country 54706,City,55,Country 54722,City,55,Country 54727,City,55,Country 54739,City,55,Country 54740,City,55,Country 54761,City,55,Country 54763,City,55,Country 54784,City,55,Country 54779,City,55,Country 54800,City,55,Country 54826,City,55,Country 54827,City,55,Country 54844,City,55,Country 54845,City,55,Country 54850,City,55,Country 54855,City,55,Country 54867,City,55,Country 54868,City,55,Country 54925,City,55,Country 54931,City,55,Country 54933,City,55,Country 54934,City,55,Country 54949,City,55,Country 54950,City,55,Country 54951,City,55,Country 54967,City,55,Country 54977,City,55,Country 54979,City,55,Country 54982,City,55,Country 54983,City,55,Country 54996,City,55,Country 54997,City,55,Country 55039,City,55,Country 54469,City,55,Country 55024,City,55,Country 55027,City,55,Country 54481,City,55,Country 54492,City,55,Country 54496,City,55,Country 54524,City,55,Country 54527,City,55,Country 54594,City,55,Country 54626,City,55,Country 54659,City,55,Country 54660,City,55,Country 54670,City,55,Country 54685,City,55,Country 54738,City,55,Country 54765,City,55,Country 54803,City,55,Country 54854,City,55,Country 54857,City,55,Country 54888,City,55,Country 54972,City,55,Country 54390,City,55,Country 54430,City,55,Country 55026,City,55,Country 54510,City,55,Country 54523,City,55,Country 54526,City,55,Country 54566,City,55,Country 54568,City,55,Country 54622,City,55,Country 54648,City,55,Country 54657,City,55,Country 54667,City,55,Country 54674,City,55,Country 54725,City,55,Country 54714,City,55,Country 54731,City,55,Country 54791,City,55,Country 54832,City,55,Country 54851,City,55,Country 54918,City,55,Country 54930,City,55,Country 55001,City,55,Country 55010,City,55,Country 55011,City,55,Country 54422,City,55,Country 54501,City,55,Country 54633,City,55,Country 54690,City,55,Country 54758,City,55,Country 54796,City,55,Country 54802,City,55,Country 54812,City,55,Country 54824,City,55,Country 54884,City,55,Country 54392,City,55,Country 55015,City,55,Country 54451,City,55,Country 54455,City,55,Country 54493,City,55,Country 54570,City,55,Country 54595,City,55,Country 54606,City,55,Country 54663,City,55,Country 54675,City,55,Country 54697,City,55,Country 54726,City,55,Country 54711,City,55,Country 54730,City,55,Country 54744,City,55,Country 54749,City,55,Country 54764,City,55,Country 54788,City,55,Country 54801,City,55,Country 54818,City,55,Country 54834,City,55,Country 54836,City,55,Country 55029,City,55,Country 54915,City,55,Country 54929,City,55,Country 54988,City,55,Country 54381,City,55,Country 54391,City,55,Country 54393,City,55,Country 54398,City,55,Country 54399,City,55,Country 54402,City,55,Country 54403,City,55,Country 54421,City,55,Country 54431,City,55,Country 55020,City,55,Country 55021,City,55,Country 54447,City,55,Country 54448,City,55,Country 54461,City,55,Country 54464,City,55,Country 55023,City,55,Country 55014,City,55,Country 54476,City,55,Country 54477,City,55,Country 54482,City,55,Country 54494,City,55,Country 54503,City,55,Country 54511,City,55,Country 54533,City,55,Country 54540,City,55,Country 54556,City,55,Country 54610,City,55,Country 54619,City,55,Country 54624,City,55,Country 54632,City,55,Country 54651,City,55,Country 54664,City,55,Country 54680,City,55,Country 54682,City,55,Country 54683,City,55,Country 54709,City,55,Country 54715,City,55,Country 54717,City,55,Country 54718,City,55,Country 54720,City,55,Country 54748,City,55,Country 54792,City,55,Country 54804,City,55,Country 54806,City,55,Country 54810,City,55,Country 54814,City,55,Country 54816,City,55,Country 54877,City,55,Country 54878,City,55,Country 54883,City,55,Country 55031,City,55,Country 55034,City,55,Country 54916,City,55,Country 54935,City,55,Country 54952,City,55,Country 54963,City,55,Country 54966,City,55,Country 54975,City,55,Country 54978,City,55,Country 54980,City,55,Country 54999,City,55,Country 54415,City,55,Country 54541,City,55,Country 54545,City,55,Country 54612,City,55,Country 54631,City,55,Country 54677,City,55,Country 54688,City,55,Country 54799,City,55,Country 54811,City,55,Country 54830,City,55,Country 54955,City,55,Country 54964,City,55,Country 54383,City,55,Country 54386,City,55,Country 54388,City,55,Country 54420,City,55,Country 54435,City,55,Country 55016,City,55,Country 54442,City,55,Country 54444,City,55,Country 54445,City,55,Country 54452,City,55,Country 54465,City,55,Country 54466,City,55,Country 54485,City,55,Country 54569,City,55,Country 54507,City,55,Country 54509,City,55,Country 54528,City,55,Country 54538,City,55,Country 54546,City,55,Country 54563,City,55,Country 54598,City,55,Country 54609,City,55,Country 54628,City,55,Country 54635,City,55,Country 54647,City,55,Country 54666,City,55,Country 54668,City,55,Country 54671,City,55,Country 54696,City,55,Country 54699,City,55,Country 54712,City,55,Country 54713,City,55,Country 54723,City,55,Country 54716,City,55,Country 54724,City,55,Country 54729,City,55,Country 54743,City,55,Country 54755,City,55,Country 54759,City,55,Country 54776,City,55,Country 54777,City,55,Country 54815,City,55,Country 54846,City,55,Country 54849,City,55,Country 54863,City,55,Country 54870,City,55,Country 54882,City,55,Country 54893,City,55,Country 55033,City,55,Country 54924,City,55,Country 54970,City,55,Country 54976,City,55,Country 54990,City,55,Country 54992,City,55,Country 54424,City,55,Country 54468,City,55,Country 54512,City,55,Country 54572,City,55,Country 54646,City,55,Country 54652,City,55,Country 54745,City,55,Country 54746,City,55,Country 54808,City,55,Country 54839,City,55,Country 54843,City,55,Country 54864,City,55,Country 54865,City,55,Country 55030,City,55,Country 54894,City,55,Country 54936,City,55,Country 54940,City,55,Country 54981,City,55,Country 54429,City,55,Country 54475,City,55,Country 54491,City,55,Country 54516,City,55,Country 54518,City,55,Country 54529,City,55,Country 54536,City,55,Country 54543,City,55,Country 54549,City,55,Country 54592,City,55,Country 54600,City,55,Country 54676,City,55,Country 54686,City,55,Country 54689,City,55,Country 54721,City,55,Country 54768,City,55,Country 54782,City,55,Country 54783,City,55,Country 54807,City,55,Country 54825,City,55,Country 54859,City,55,Country 54892,City,55,Country 54922,City,55,Country 54984,City,55,Country 54389,City,55,Country 54407,City,55,Country 54414,City,55,Country 54423,City,55,Country 54454,City,55,Country 54463,City,55,Country 54474,City,55,Country 54472,City,55,Country 54473,City,55,Country 54486,City,55,Country 54502,City,55,Country 54519,City,55,Country 54520,City,55,Country 54532,City,55,Country 54537,City,55,Country 54548,City,55,Country 54552,City,55,Country 54553,City,55,Country 54555,City,55,Country 54561,City,55,Country 54564,City,55,Country 54574,City,55,Country 54584,City,55,Country 54587,City,55,Country 54599,City,55,Country 54601,City,55,Country 54603,City,55,Country 54620,City,55,Country 54621,City,55,Country 54627,City,55,Country 54637,City,55,Country 54638,City,55,Country 54639,City,55,Country 54640,City,55,Country 54642,City,55,Country 54641,City,55,Country 54643,City,55,Country 54650,City,55,Country 54654,City,55,Country 54665,City,55,Country 54694,City,55,Country 54700,City,55,Country 54710,City,55,Country 54733,City,55,Country 54742,City,55,Country 54747,City,55,Country 54752,City,55,Country 54772,City,55,Country 54773,City,55,Country 54775,City,55,Country 54795,City,55,Country 54817,City,55,Country 54829,City,55,Country 54842,City,55,Country 54847,City,55,Country 54872,City,55,Country 54873,City,55,Country 54879,City,55,Country 54880,City,55,Country 54881,City,55,Country 54890,City,55,Country 54896,City,55,Country 54901,City,55,Country 55035,City,55,Country 54904,City,55,Country 54906,City,55,Country 54907,City,55,Country 54913,City,55,Country 54923,City,55,Country 54941,City,55,Country 54942,City,55,Country 54946,City,55,Country 54945,City,55,Country 54961,City,55,Country 54974,City,55,Country 54987,City,55,Country 54993,City,55,Country 54994,City,55,Country 55005,City,55,Country 55012,City,55,Country 55040,City,55,Country 54395,City,55,Country 54416,City,55,Country 54417,City,55,Country 54443,City,55,Country 54459,City,55,Country 54497,City,55,Country 54500,City,55,Country 54521,City,55,Country 54531,City,55,Country 54535,City,55,Country 54557,City,55,Country 54597,City,55,Country 54604,City,55,Country 54613,City,55,Country 54614,City,55,Country 54649,City,55,Country 54678,City,55,Country 54687,City,55,Country 54693,City,55,Country 54701,City,55,Country 54750,City,55,Country 54805,City,55,Country 54858,City,55,Country 54905,City,55,Country 54932,City,55,Country 54947,City,55,Country 54953,City,55,Country 54965,City,55,Country 54968,City,55,Country 55018,City,55,Country 55019,City,55,Country 54446,City,55,Country 54539,City,55,Country 54550,City,55,Country 54560,City,55,Country 54576,City,55,Country 54732,City,55,Country 54756,City,55,Country 54786,City,55,Country 54809,City,55,Country 54861,City,55,Country 54895,City,55,Country 54903,City,55,Country 55036,City,55,Country 54920,City,55,Country 54973,City,55,Country 54985,City,55,Country 55008,City,55,Country 54380,City,55,Country 54382,City,55,Country 54405,City,55,Country 54406,City,55,Country 54408,City,55,Country 54409,City,55,Country 54410,City,55,Country 54428,City,55,Country 54439,City,55,Country 54440,City,55,Country 54467,City,55,Country 54559,City,55,Country 54565,City,55,Country 54573,City,55,Country 54578,City,55,Country 54591,City,55,Country 54602,City,55,Country 54605,City,55,Country 54616,City,55,Country 54655,City,55,Country 54698,City,55,Country 54719,City,55,Country 54734,City,55,Country 54751,City,55,Country 54753,City,55,Country 54769,City,55,Country 54794,City,55,Country 54840,City,55,Country 54860,City,55,Country 54866,City,55,Country 54902,City,55,Country 54909,City,55,Country 55037,City,55,Country 54938,City,55,Country 54939,City,55,Country 54943,City,55,Country 54969,City,55,Country 54986,City,55,Country 54989,City,55,Country 55000,City,55,Country 55043,City,55,Country 54394,City,55,Country 54397,City,55,Country 54400,City,55,Country 54488,City,55,Country 54499,City,55,Country 54582,City,55,Country 54504,City,55,Country 54617,City,55,Country 54625,City,55,Country 54673,City,55,Country 54754,City,55,Country 54762,City,55,Country 54770,City,55,Country 54793,City,55,Country 54797,City,55,Country 54798,City,55,Country 54822,City,55,Country 54823,City,55,Country 54828,City,55,Country 54833,City,55,Country 54837,City,55,Country 54841,City,55,Country 54856,City,55,Country 54875,City,55,Country 55032,City,55,Country 54908,City,55,Country 54911,City,55,Country 54921,City,55,Country 54928,City,55,Country 54937,City,55,Country 54944,City,55,Country 54948,City,55,Country 54971,City,55,Country 54998,City,55,Country 55002,City,55,Country 54419,City,55,Country 54438,City,55,Country 54470,City,55,Country 54579,City,55,Country 54580,City,55,Country 54581,City,55,Country 54596,City,55,Country 54615,City,55,Country 54623,City,55,Country 54636,City,55,Country 54707,City,55,Country 54760,City,55,Country 54771,City,55,Country 54885,City,55,Country 54912,City,55,Country 54917,City,55,Country 55003,City,55,Country 55004,City,55,Country 54396,City,55,Country 54401,City,55,Country 54411,City,55,Country 54412,City,55,Country 54413,City,55,Country 54456,City,55,Country 54457,City,55,Country 54458,City,55,Country 54462,City,55,Country 54478,City,55,Country 54495,City,55,Country 54583,City,55,Country 54514,City,55,Country 54522,City,55,Country 54547,City,55,Country 54554,City,55,Country 54558,City,55,Country 54562,City,55,Country 54567,City,55,Country 54575,City,55,Country 54577,City,55,Country 54608,City,55,Country 54611,City,55,Country 54618,City,55,Country 54645,City,55,Country 54669,City,55,Country 54679,City,55,Country 54695,City,55,Country 54702,City,55,Country 54703,City,55,Country 54705,City,55,Country 54735,City,55,Country 54741,City,55,Country 54766,City,55,Country 54767,City,55,Country 54781,City,55,Country 54789,City,55,Country 54820,City,55,Country 54835,City,55,Country 54838,City,55,Country 54848,City,55,Country 54852,City,55,Country 54853,City,55,Country 54871,City,55,Country 54876,City,55,Country 54919,City,55,Country 54926,City,55,Country 54927,City,55,Country 54956,City,55,Country 54958,City,55,Country 54959,City,55,Country 54991,City,55,Country 55006,City,55,Country 55009,City,55,Country 22011,City,57,Country 22102,City,57,Country 22014,City,57,Country 22020,City,57,Country 22021,City,57,Country 22023,City,57,Country 22029,City,57,Country 22030,City,57,Country 22052,City,57,Country 22054,City,57,Country 22056,City,57,Country 22072,City,57,Country 22078,City,57,Country 22090,City,57,Country 22095,City,57,Country 22045,City,57,Country 22046,City,57,Country 22059,City,57,Country 22104,City,57,Country 22015,City,57,Country 22019,City,57,Country 22024,City,57,Country 22049,City,57,Country 22039,City,57,Country 22042,City,57,Country 22050,City,57,Country 22051,City,57,Country 22057,City,57,Country 22062,City,57,Country 22064,City,57,Country 22087,City,57,Country 22076,City,57,Country 22079,City,57,Country 22089,City,57,Country 22093,City,57,Country 22094,City,57,Country 22099,City,57,Country 22100,City,57,Country 22101,City,57,Country 22103,City,57,Country 22028,City,57,Country 22031,City,57,Country 22044,City,57,Country 22053,City,57,Country 22055,City,57,Country 22065,City,57,Country 22082,City,57,Country 22084,City,57,Country 22073,City,57,Country 22074,City,57,Country 22077,City,57,Country 22081,City,57,Country 22091,City,57,Country 22092,City,57,Country 22105,City,57,Country 22012,City,57,Country 22013,City,57,Country 22016,City,57,Country 22018,City,57,Country 22025,City,57,Country 22027,City,57,Country 22035,City,57,Country 22036,City,57,Country 22047,City,57,Country 22048,City,57,Country 22038,City,57,Country 22040,City,57,Country 22060,City,57,Country 22061,City,57,Country 22058,City,57,Country 22066,City,57,Country 22067,City,57,Country 22068,City,57,Country 22069,City,57,Country 22070,City,57,Country 22083,City,57,Country 22086,City,57,Country 22075,City,57,Country 22080,City,57,Country 22097,City,57,Country 22017,City,57,Country 22022,City,57,Country 22026,City,57,Country 22032,City,57,Country 22033,City,57,Country 22034,City,57,Country 22037,City,57,Country 22041,City,57,Country 22043,City,57,Country 22063,City,57,Country 22071,City,57,Country 22085,City,57,Country 22088,City,57,Country 22098,City,57,Country 22096,City,57,Country 22115,City,58,Country 22118,City,58,Country 22123,City,58,Country 22125,City,58,Country 22130,City,58,Country 22147,City,58,Country 22150,City,58,Country 22149,City,58,Country 22164,City,58,Country 23388,City,58,Country 23390,City,58,Country 23393,City,58,Country 23394,City,58,Country 22219,City,58,Country 22227,City,58,Country 22240,City,58,Country 22243,City,58,Country 22242,City,58,Country 23396,City,58,Country 23397,City,58,Country 22252,City,58,Country 22277,City,58,Country 22282,City,58,Country 22324,City,58,Country 22313,City,58,Country 22328,City,58,Country 22355,City,58,Country 22385,City,58,Country 22390,City,58,Country 22418,City,58,Country 22436,City,58,Country 22460,City,58,Country 22476,City,58,Country 22479,City,58,Country 22582,City,58,Country 22494,City,58,Country 22495,City,58,Country 22496,City,58,Country 22503,City,58,Country 22545,City,58,Country 22583,City,58,Country 22575,City,58,Country 22592,City,58,Country 22603,City,58,Country 22627,City,58,Country 22626,City,58,Country 22634,City,58,Country 22640,City,58,Country 22670,City,58,Country 22674,City,58,Country 22689,City,58,Country 22696,City,58,Country 22697,City,58,Country 22702,City,58,Country 22762,City,58,Country 22772,City,58,Country 22776,City,58,Country 22777,City,58,Country 22877,City,58,Country 22878,City,58,Country 22824,City,58,Country 22854,City,58,Country 22850,City,58,Country 22862,City,58,Country 22867,City,58,Country 22893,City,58,Country 22993,City,58,Country 22936,City,58,Country 22968,City,58,Country 22982,City,58,Country 23013,City,58,Country 23049,City,58,Country 23063,City,58,Country 23069,City,58,Country 23414,City,58,Country 23071,City,58,Country 23083,City,58,Country 23092,City,58,Country 23098,City,58,Country 23099,City,58,Country 23120,City,58,Country 23123,City,58,Country 23124,City,58,Country 23133,City,58,Country 23141,City,58,Country 23189,City,58,Country 23200,City,58,Country 23173,City,58,Country 23190,City,58,Country 23214,City,58,Country 23313,City,58,Country 23228,City,58,Country 23261,City,58,Country 23315,City,58,Country 23271,City,58,Country 23279,City,58,Country 23286,City,58,Country 23288,City,58,Country 23289,City,58,Country 23309,City,58,Country 23337,City,58,Country 23341,City,58,Country 22107,City,58,Country 22196,City,58,Country 22129,City,58,Country 22131,City,58,Country 22136,City,58,Country 22134,City,58,Country 22154,City,58,Country 22155,City,58,Country 22152,City,58,Country 22156,City,58,Country 22157,City,58,Country 22204,City,58,Country 22213,City,58,Country 22166,City,58,Country 22180,City,58,Country 22190,City,58,Country 23363,City,58,Country 23366,City,58,Country 23365,City,58,Country 23375,City,58,Country 22249,City,58,Country 22267,City,58,Country 22275,City,58,Country 22281,City,58,Country 22283,City,58,Country 22285,City,58,Country 22302,City,58,Country 22305,City,58,Country 22310,City,58,Country 22308,City,58,Country 22309,City,58,Country 22316,City,58,Country 22350,City,58,Country 22354,City,58,Country 22364,City,58,Country 22365,City,58,Country 22403,City,58,Country 22404,City,58,Country 22424,City,58,Country 22426,City,58,Country 22427,City,58,Country 22428,City,58,Country 22437,City,58,Country 22444,City,58,Country 22443,City,58,Country 22459,City,58,Country 22463,City,58,Country 22469,City,58,Country 22516,City,58,Country 22520,City,58,Country 22525,City,58,Country 22542,City,58,Country 22584,City,58,Country 22585,City,58,Country 22562,City,58,Country 22574,City,58,Country 22577,City,58,Country 22580,City,58,Country 22591,City,58,Country 22594,City,58,Country 22595,City,58,Country 22598,City,58,Country 22599,City,58,Country 22618,City,58,Country 22619,City,58,Country 22621,City,58,Country 22632,City,58,Country 22636,City,58,Country 22657,City,58,Country 22659,City,58,Country 22737,City,58,Country 22742,City,58,Country 22688,City,58,Country 22685,City,58,Country 22690,City,58,Country 22695,City,58,Country 22709,City,58,Country 22712,City,58,Country 22715,City,58,Country 22717,City,58,Country 22721,City,58,Country 22722,City,58,Country 22723,City,58,Country 22729,City,58,Country 22733,City,58,Country 22755,City,58,Country 22761,City,58,Country 22769,City,58,Country 22771,City,58,Country 22808,City,58,Country 22811,City,58,Country 22809,City,58,Country 22819,City,58,Country 22871,City,58,Country 22873,City,58,Country 22883,City,58,Country 22885,City,58,Country 22916,City,58,Country 22901,City,58,Country 22903,City,58,Country 22908,City,58,Country 22914,City,58,Country 22928,City,58,Country 22945,City,58,Country 22946,City,58,Country 22948,City,58,Country 22964,City,58,Country 22997,City,58,Country 22985,City,58,Country 22989,City,58,Country 23055,City,58,Country 23056,City,58,Country 23017,City,58,Country 23018,City,58,Country 23020,City,58,Country 23025,City,58,Country 23407,City,58,Country 23027,City,58,Country 23035,City,58,Country 23039,City,58,Country 23408,City,58,Country 23409,City,58,Country 23410,City,58,Country 23411,City,58,Country 23416,City,58,Country 23417,City,58,Country 23082,City,58,Country 23093,City,58,Country 23129,City,58,Country 23137,City,58,Country 23142,City,58,Country 23145,City,58,Country 23150,City,58,Country 23157,City,58,Country 23158,City,58,Country 23195,City,58,Country 23166,City,58,Country 23180,City,58,Country 23187,City,58,Country 23188,City,58,Country 23191,City,58,Country 23356,City,58,Country 23213,City,58,Country 23221,City,58,Country 23235,City,58,Country 23236,City,58,Country 23244,City,58,Country 23245,City,58,Country 23246,City,58,Country 23262,City,58,Country 23264,City,58,Country 23273,City,58,Country 23277,City,58,Country 23282,City,58,Country 23285,City,58,Country 23287,City,58,Country 23291,City,58,Country 23292,City,58,Country 23295,City,58,Country 23298,City,58,Country 23308,City,58,Country 23435,City,58,Country 23325,City,58,Country 23326,City,58,Country 23330,City,58,Country 23332,City,58,Country 23440,City,58,Country 23446,City,58,Country 23448,City,58,Country 23449,City,58,Country 23344,City,58,Country 22106,City,58,Country 22110,City,58,Country 22137,City,58,Country 22209,City,58,Country 22178,City,58,Country 22217,City,58,Country 22224,City,58,Country 22248,City,58,Country 22292,City,58,Country 22299,City,58,Country 22326,City,58,Country 22337,City,58,Country 22346,City,58,Country 22388,City,58,Country 22416,City,58,Country 22425,City,58,Country 22484,City,58,Country 22498,City,58,Country 22518,City,58,Country 22556,City,58,Country 22581,City,58,Country 22664,City,58,Country 22630,City,58,Country 22633,City,58,Country 22644,City,58,Country 22676,City,58,Country 22681,City,58,Country 22740,City,58,Country 22757,City,58,Country 22775,City,58,Country 22781,City,58,Country 22812,City,58,Country 22826,City,58,Country 22861,City,58,Country 22887,City,58,Country 22907,City,58,Country 22940,City,58,Country 23036,City,58,Country 23058,City,58,Country 23073,City,58,Country 23094,City,58,Country 23147,City,58,Country 23170,City,58,Country 23233,City,58,Country 23274,City,58,Country 23456,City,58,Country 22114,City,58,Country 22138,City,58,Country 22170,City,58,Country 22175,City,58,Country 22187,City,58,Country 23371,City,58,Country 22228,City,58,Country 22259,City,58,Country 22279,City,58,Country 22335,City,58,Country 22338,City,58,Country 22344,City,58,Country 22349,City,58,Country 22379,City,58,Country 22423,City,58,Country 22435,City,58,Country 22458,City,58,Country 22464,City,58,Country 22471,City,58,Country 22473,City,58,Country 22488,City,58,Country 22490,City,58,Country 22521,City,58,Country 22588,City,58,Country 22589,City,58,Country 22593,City,58,Country 22667,City,58,Country 22647,City,58,Country 22648,City,58,Country 22746,City,58,Country 22711,City,58,Country 22719,City,58,Country 22795,City,58,Country 22773,City,58,Country 22778,City,58,Country 22783,City,58,Country 22784,City,58,Country 22818,City,58,Country 22823,City,58,Country 22846,City,58,Country 22868,City,58,Country 22880,City,58,Country 22882,City,58,Country 22881,City,58,Country 22917,City,58,Country 22925,City,58,Country 22965,City,58,Country 22953,City,58,Country 23004,City,58,Country 23037,City,58,Country 23115,City,58,Country 23421,City,58,Country 23153,City,58,Country 23152,City,58,Country 23159,City,58,Country 23201,City,58,Country 23204,City,58,Country 23231,City,58,Country 23243,City,58,Country 23251,City,58,Country 23270,City,58,Country 23280,City,58,Country 23459,City,58,Country 23460,City,58,Country 23442,City,58,Country 23447,City,58,Country 23451,City,58,Country 22109,City,58,Country 22198,City,58,Country 22148,City,58,Country 22169,City,58,Country 23362,City,58,Country 23370,City,58,Country 23374,City,58,Country 23381,City,58,Country 23385,City,58,Country 23389,City,58,Country 22221,City,58,Country 22261,City,58,Country 22298,City,58,Country 22306,City,58,Country 22319,City,58,Country 22407,City,58,Country 22398,City,58,Country 22412,City,58,Country 22422,City,58,Country 22456,City,58,Country 22481,City,58,Country 22533,City,58,Country 22540,City,58,Country 22579,City,58,Country 22663,City,58,Country 22611,City,58,Country 22668,City,58,Country 22673,City,58,Country 22684,City,58,Country 22703,City,58,Country 22726,City,58,Country 22792,City,58,Country 22752,City,58,Country 22774,City,58,Country 22779,City,58,Country 22786,City,58,Country 22820,City,58,Country 22825,City,58,Country 22841,City,58,Country 22859,City,58,Country 22866,City,58,Country 22894,City,58,Country 22906,City,58,Country 22924,City,58,Country 22933,City,58,Country 22951,City,58,Country 22998,City,58,Country 22983,City,58,Country 23016,City,58,Country 23031,City,58,Country 23045,City,58,Country 23048,City,58,Country 23053,City,58,Country 23075,City,58,Country 23086,City,58,Country 23087,City,58,Country 23090,City,58,Country 23095,City,58,Country 23419,City,58,Country 23101,City,58,Country 23109,City,58,Country 23136,City,58,Country 23151,City,58,Country 23161,City,58,Country 23197,City,58,Country 23181,City,58,Country 23194,City,58,Country 23357,City,58,Country 23219,City,58,Country 23222,City,58,Country 23248,City,58,Country 23250,City,58,Country 23300,City,58,Country 23320,City,58,Country 23436,City,58,Country 23323,City,58,Country 23443,City,58,Country 22120,City,58,Country 22165,City,58,Country 23384,City,58,Country 23392,City,58,Country 22232,City,58,Country 22245,City,58,Country 22254,City,58,Country 22269,City,58,Country 22314,City,58,Country 22332,City,58,Country 22342,City,58,Country 22348,City,58,Country 22362,City,58,Country 22377,City,58,Country 22431,City,58,Country 22445,City,58,Country 22446,City,58,Country 22448,City,58,Country 22453,City,58,Country 22472,City,58,Country 22483,City,58,Country 22491,City,58,Country 22549,City,58,Country 22551,City,58,Country 22604,City,58,Country 22635,City,58,Country 22652,City,58,Country 22671,City,58,Country 22694,City,58,Country 22706,City,58,Country 22780,City,58,Country 22785,City,58,Country 22805,City,58,Country 22876,City,58,Country 22821,City,58,Country 22833,City,58,Country 22860,City,58,Country 22899,City,58,Country 22996,City,58,Country 22938,City,58,Country 22955,City,58,Country 23010,City,58,Country 23022,City,58,Country 23030,City,58,Country 23040,City,58,Country 23067,City,58,Country 23089,City,58,Country 23127,City,58,Country 23128,City,58,Country 23132,City,58,Country 23156,City,58,Country 23186,City,58,Country 23220,City,58,Country 23238,City,58,Country 23276,City,58,Country 23306,City,58,Country 23350,City,58,Country 23438,City,58,Country 23445,City,58,Country 22108,City,58,Country 22113,City,58,Country 22116,City,58,Country 22194,City,58,Country 22139,City,58,Country 22140,City,58,Country 22145,City,58,Country 22161,City,58,Country 22210,City,58,Country 22214,City,58,Country 22171,City,58,Country 22172,City,58,Country 22173,City,58,Country 22176,City,58,Country 22179,City,58,Country 22186,City,58,Country 23367,City,58,Country 23395,City,58,Country 22218,City,58,Country 22229,City,58,Country 22237,City,58,Country 22250,City,58,Country 22321,City,58,Country 22262,City,58,Country 22257,City,58,Country 22271,City,58,Country 22284,City,58,Country 22286,City,58,Country 22300,City,58,Country 22304,City,58,Country 22318,City,58,Country 22327,City,58,Country 22329,City,58,Country 22331,City,58,Country 22333,City,58,Country 22334,City,58,Country 22440,City,58,Country 22347,City,58,Country 22345,City,58,Country 22358,City,58,Country 22361,City,58,Country 22359,City,58,Country 22366,City,58,Country 22367,City,58,Country 22374,City,58,Country 22376,City,58,Country 22384,City,58,Country 22391,City,58,Country 22392,City,58,Country 22411,City,58,Country 22413,City,58,Country 22429,City,58,Country 22433,City,58,Country 22449,City,58,Country 22451,City,58,Country 22454,City,58,Country 22468,City,58,Country 22475,City,58,Country 22480,City,58,Country 22497,City,58,Country 22501,City,58,Country 22515,City,58,Country 22524,City,58,Country 22530,City,58,Country 22534,City,58,Country 22547,City,58,Country 22548,City,58,Country 22557,City,58,Country 22558,City,58,Country 22559,City,58,Country 22572,City,58,Country 22571,City,58,Country 22614,City,58,Country 22615,City,58,Country 22653,City,58,Country 22645,City,58,Country 22677,City,58,Country 22741,City,58,Country 22682,City,58,Country 22692,City,58,Country 22713,City,58,Country 22724,City,58,Country 22730,City,58,Country 22728,City,58,Country 22796,City,58,Country 22788,City,58,Country 22797,City,58,Country 22804,City,58,Country 22810,City,58,Country 22817,City,58,Country 22827,City,58,Country 22839,City,58,Country 22843,City,58,Country 22844,City,58,Country 22884,City,58,Country 22892,City,58,Country 22895,City,58,Country 22902,City,58,Country 22904,City,58,Country 22905,City,58,Country 22913,City,58,Country 22918,City,58,Country 22921,City,58,Country 22930,City,58,Country 22931,City,58,Country 22992,City,58,Country 22995,City,58,Country 22975,City,58,Country 23007,City,58,Country 22990,City,58,Country 23026,City,58,Country 23401,City,58,Country 23033,City,58,Country 23052,City,58,Country 23054,City,58,Country 23057,City,58,Country 23064,City,58,Country 23065,City,58,Country 23412,City,58,Country 23415,City,58,Country 23081,City,58,Country 23102,City,58,Country 23105,City,58,Country 23116,City,58,Country 23110,City,58,Country 23111,City,58,Country 23135,City,58,Country 23428,City,58,Country 23423,City,58,Country 23119,City,58,Country 23422,City,58,Country 23134,City,58,Country 23148,City,58,Country 23164,City,58,Country 23205,City,58,Country 23177,City,58,Country 23310,City,58,Country 23234,City,58,Country 23239,City,58,Country 23240,City,58,Country 23259,City,58,Country 23265,City,58,Country 23312,City,58,Country 23283,City,58,Country 23294,City,58,Country 23296,City,58,Country 23297,City,58,Country 23316,City,58,Country 23352,City,58,Country 22119,City,58,Country 22200,City,58,Country 22197,City,58,Country 22133,City,58,Country 22142,City,58,Country 22153,City,58,Country 22168,City,58,Country 23368,City,58,Country 23378,City,58,Country 23387,City,58,Country 22270,City,58,Country 22274,City,58,Country 22294,City,58,Country 22295,City,58,Country 22301,City,58,Country 22307,City,58,Country 22323,City,58,Country 22311,City,58,Country 22312,City,58,Country 22336,City,58,Country 22341,City,58,Country 22356,City,58,Country 22360,City,58,Country 22373,City,58,Country 22383,City,58,Country 22394,City,58,Country 22417,City,58,Country 22438,City,58,Country 22461,City,58,Country 22467,City,58,Country 22526,City,58,Country 22527,City,58,Country 22532,City,58,Country 22538,City,58,Country 22553,City,58,Country 22602,City,58,Country 22617,City,58,Country 22624,City,58,Country 22642,City,58,Country 22639,City,58,Country 22651,City,58,Country 22669,City,58,Country 22679,City,58,Country 22743,City,58,Country 22686,City,58,Country 22710,City,58,Country 22716,City,58,Country 22720,City,58,Country 22727,City,58,Country 22793,City,58,Country 22794,City,58,Country 22800,City,58,Country 22765,City,58,Country 22790,City,58,Country 22822,City,58,Country 22842,City,58,Country 22855,City,58,Country 22853,City,58,Country 22879,City,58,Country 22886,City,58,Country 22888,City,58,Country 22898,City,58,Country 22900,City,58,Country 22912,City,58,Country 22920,City,58,Country 22994,City,58,Country 22941,City,58,Country 22960,City,58,Country 22961,City,58,Country 23006,City,58,Country 23000,City,58,Country 23001,City,58,Country 23009,City,58,Country 22979,City,58,Country 22981,City,58,Country 22988,City,58,Country 23015,City,58,Country 23021,City,58,Country 23029,City,58,Country 23046,City,58,Country 23060,City,58,Country 23068,City,58,Country 23074,City,58,Country 23078,City,58,Country 23088,City,58,Country 23091,City,58,Country 23108,City,58,Country 23429,City,58,Country 23420,City,58,Country 23425,City,58,Country 23130,City,58,Country 23144,City,58,Country 23432,City,58,Country 23196,City,58,Country 23171,City,58,Country 23178,City,58,Country 23179,City,58,Country 23182,City,58,Country 23355,City,58,Country 23211,City,58,Country 23212,City,58,Country 23358,City,58,Country 23311,City,58,Country 23230,City,58,Country 23242,City,58,Country 23253,City,58,Country 23254,City,58,Country 23314,City,58,Country 23266,City,58,Country 23268,City,58,Country 23299,City,58,Country 23348,City,58,Country 23339,City,58,Country 23457,City,58,Country 22159,City,58,Country 22212,City,58,Country 22167,City,58,Country 22199,City,58,Country 22182,City,58,Country 22184,City,58,Country 23379,City,58,Country 23386,City,58,Country 22223,City,58,Country 22231,City,58,Country 22234,City,58,Country 22235,City,58,Country 22238,City,58,Country 22253,City,58,Country 22256,City,58,Country 22297,City,58,Country 22280,City,58,Country 22291,City,58,Country 22293,City,58,Country 22296,City,58,Country 22352,City,58,Country 22353,City,58,Country 22369,City,58,Country 22393,City,58,Country 22380,City,58,Country 22389,City,58,Country 22414,City,58,Country 22420,City,58,Country 22447,City,58,Country 22457,City,58,Country 22462,City,58,Country 22470,City,58,Country 22565,City,58,Country 22561,City,58,Country 22573,City,58,Country 22570,City,58,Country 22590,City,58,Country 22662,City,58,Country 22597,City,58,Country 22622,City,58,Country 22649,City,58,Country 22655,City,58,Country 22739,City,58,Country 22700,City,58,Country 22714,City,58,Country 22718,City,58,Country 22750,City,58,Country 22814,City,58,Country 22845,City,58,Country 22863,City,58,Country 22875,City,58,Country 22890,City,58,Country 22891,City,58,Country 22911,City,58,Country 22919,City,58,Country 22952,City,58,Country 22954,City,58,Country 22969,City,58,Country 22999,City,58,Country 22978,City,58,Country 23011,City,58,Country 23404,City,58,Country 23032,City,58,Country 23034,City,58,Country 23051,City,58,Country 23072,City,58,Country 23070,City,58,Country 23076,City,58,Country 23079,City,58,Country 23103,City,58,Country 23149,City,58,Country 23202,City,58,Country 23359,City,58,Country 23305,City,58,Country 23437,City,58,Country 22201,City,58,Country 22127,City,58,Country 22135,City,58,Country 22132,City,58,Country 22146,City,58,Country 22203,City,58,Country 23373,City,58,Country 22222,City,58,Country 22225,City,58,Country 22230,City,58,Country 22236,City,58,Country 22263,City,58,Country 22265,City,58,Country 22303,City,58,Country 22320,City,58,Country 22343,City,58,Country 22351,City,58,Country 22370,City,58,Country 22371,City,58,Country 22372,City,58,Country 22378,City,58,Country 22396,City,58,Country 22402,City,58,Country 22430,City,58,Country 22421,City,58,Country 22455,City,58,Country 22502,City,58,Country 22506,City,58,Country 22504,City,58,Country 22508,City,58,Country 22511,City,58,Country 22512,City,58,Country 22514,City,58,Country 22528,City,58,Country 22543,City,58,Country 22552,City,58,Country 22554,City,58,Country 22666,City,58,Country 22675,City,58,Country 22745,City,58,Country 22678,City,58,Country 22680,City,58,Country 22744,City,58,Country 22698,City,58,Country 22731,City,58,Country 22734,City,58,Country 22759,City,58,Country 22766,City,58,Country 22799,City,58,Country 22798,City,58,Country 22815,City,58,Country 22829,City,58,Country 22847,City,58,Country 22848,City,58,Country 22849,City,58,Country 22858,City,58,Country 22864,City,58,Country 22896,City,58,Country 22934,City,58,Country 22935,City,58,Country 22942,City,58,Country 22937,City,58,Country 22943,City,58,Country 22959,City,58,Country 23003,City,58,Country 23005,City,58,Country 23012,City,58,Country 23028,City,58,Country 23097,City,58,Country 23434,City,58,Country 23114,City,58,Country 23113,City,58,Country 23427,City,58,Country 23118,City,58,Country 23122,City,58,Country 23126,City,58,Country 23131,City,58,Country 23138,City,58,Country 23146,City,58,Country 23433,City,58,Country 23155,City,58,Country 23168,City,58,Country 23203,City,58,Country 23224,City,58,Country 23319,City,58,Country 23328,City,58,Country 23333,City,58,Country 23444,City,58,Country 23450,City,58,Country 22162,City,58,Country 23376,City,58,Country 22290,City,58,Country 22363,City,58,Country 22387,City,58,Country 22397,City,58,Country 22499,City,58,Country 22507,City,58,Country 22600,City,58,Country 22605,City,58,Country 22672,City,58,Country 22708,City,58,Country 22970,City,58,Country 22971,City,58,Country 22972,City,58,Country 22973,City,58,Country 22974,City,58,Country 22977,City,58,Country 23061,City,58,Country 23106,City,58,Country 23139,City,58,Country 23304,City,58,Country 23307,City,58,Country 22112,City,58,Country 22202,City,58,Country 22124,City,58,Country 22121,City,58,Country 22126,City,58,Country 22141,City,58,Country 22158,City,58,Country 22160,City,58,Country 22206,City,58,Country 22181,City,58,Country 22189,City,58,Country 22185,City,58,Country 23398,City,58,Country 23364,City,58,Country 23369,City,58,Country 23382,City,58,Country 22215,City,58,Country 23372,City,58,Country 23380,City,58,Country 23391,City,58,Country 22241,City,58,Country 22246,City,58,Country 22247,City,58,Country 22251,City,58,Country 22255,City,58,Country 22264,City,58,Country 22266,City,58,Country 22260,City,58,Country 22268,City,58,Country 22273,City,58,Country 22276,City,58,Country 22278,City,58,Country 22386,City,58,Country 22395,City,58,Country 22408,City,58,Country 22399,City,58,Country 22401,City,58,Country 22405,City,58,Country 22415,City,58,Country 22442,City,58,Country 22432,City,58,Country 22441,City,58,Country 22465,City,58,Country 22466,City,58,Country 22486,City,58,Country 22474,City,58,Country 22478,City,58,Country 22505,City,58,Country 22489,City,58,Country 22492,City,58,Country 22493,City,58,Country 22510,City,58,Country 22513,City,58,Country 22517,City,58,Country 22522,City,58,Country 22529,City,58,Country 22531,City,58,Country 22536,City,58,Country 22537,City,58,Country 22541,City,58,Country 22539,City,58,Country 22544,City,58,Country 22555,City,58,Country 22566,City,58,Country 22567,City,58,Country 22587,City,58,Country 22576,City,58,Country 22661,City,58,Country 22612,City,58,Country 22665,City,58,Country 22606,City,58,Country 22607,City,58,Country 22610,City,58,Country 22628,City,58,Country 22629,City,58,Country 22638,City,58,Country 22654,City,58,Country 22656,City,58,Country 22658,City,58,Country 22660,City,58,Country 22736,City,58,Country 22747,City,58,Country 22738,City,58,Country 22693,City,58,Country 22691,City,58,Country 22701,City,58,Country 22704,City,58,Country 22705,City,58,Country 22707,City,58,Country 22748,City,58,Country 22732,City,58,Country 22751,City,58,Country 22756,City,58,Country 22758,City,58,Country 22760,City,58,Country 22763,City,58,Country 22764,City,58,Country 22768,City,58,Country 22782,City,58,Country 22789,City,58,Country 22791,City,58,Country 22801,City,58,Country 22803,City,58,Country 22806,City,58,Country 22807,City,58,Country 22828,City,58,Country 22830,City,58,Country 22832,City,58,Country 22838,City,58,Country 22836,City,58,Country 22840,City,58,Country 22851,City,58,Country 22852,City,58,Country 22856,City,58,Country 22857,City,58,Country 22889,City,58,Country 22922,City,58,Country 22923,City,58,Country 22932,City,58,Country 22929,City,58,Country 22939,City,58,Country 22947,City,58,Country 22966,City,58,Country 22967,City,58,Country 22958,City,58,Country 23002,City,58,Country 23008,City,58,Country 22986,City,58,Country 22987,City,58,Country 22991,City,58,Country 23019,City,58,Country 23402,City,58,Country 23403,City,58,Country 23405,City,58,Country 23406,City,58,Country 23044,City,58,Country 23042,City,58,Country 23041,City,58,Country 23047,City,58,Country 23059,City,58,Country 23154,City,58,Country 23066,City,58,Country 23062,City,58,Country 23413,City,58,Country 23077,City,58,Country 23085,City,58,Country 23100,City,58,Country 23112,City,58,Country 23426,City,58,Country 23117,City,58,Country 23121,City,58,Country 23140,City,58,Country 23165,City,58,Country 23199,City,58,Country 23174,City,58,Country 23183,City,58,Country 23184,City,58,Country 23192,City,58,Country 23193,City,58,Country 23209,City,58,Country 23210,City,58,Country 23360,City,58,Country 23229,City,58,Country 23232,City,58,Country 23247,City,58,Country 23249,City,58,Country 23252,City,58,Country 23256,City,58,Country 23257,City,58,Country 23258,City,58,Country 23263,City,58,Country 23272,City,58,Country 23281,City,58,Country 23290,City,58,Country 23293,City,58,Country 23301,City,58,Country 23318,City,58,Country 23321,City,58,Country 23324,City,58,Country 23351,City,58,Country 23331,City,58,Country 23458,City,58,Country 23334,City,58,Country 23335,City,58,Country 23441,City,58,Country 23338,City,58,Country 23453,City,58,Country 23454,City,58,Country 23342,City,58,Country 23345,City,58,Country 23347,City,58,Country 22117,City,58,Country 22128,City,58,Country 22122,City,58,Country 22192,City,58,Country 22193,City,58,Country 22143,City,58,Country 22163,City,58,Country 22207,City,58,Country 22177,City,58,Country 22183,City,58,Country 23377,City,58,Country 23383,City,58,Country 22216,City,58,Country 22220,City,58,Country 22226,City,58,Country 22244,City,58,Country 23399,City,58,Country 22322,City,58,Country 22258,City,58,Country 22288,City,58,Country 22289,City,58,Country 22315,City,58,Country 22317,City,58,Country 22381,City,58,Country 22409,City,58,Country 22400,City,58,Country 22419,City,58,Country 22485,City,58,Country 22482,City,58,Country 22477,City,58,Country 22487,City,58,Country 22519,City,58,Country 22550,City,58,Country 22546,City,58,Country 22568,City,58,Country 22586,City,58,Country 22563,City,58,Country 22564,City,58,Country 22596,City,58,Country 22613,City,58,Country 22608,City,58,Country 22609,City,58,Country 22623,City,58,Country 22625,City,58,Country 22631,City,58,Country 22637,City,58,Country 22641,City,58,Country 22643,City,58,Country 22735,City,58,Country 22683,City,58,Country 22687,City,58,Country 22725,City,58,Country 22770,City,58,Country 22802,City,58,Country 22813,City,58,Country 22816,City,58,Country 22834,City,58,Country 22835,City,58,Country 22837,City,58,Country 22865,City,58,Country 22874,City,58,Country 22897,City,58,Country 22927,City,58,Country 22926,City,58,Country 22944,City,58,Country 22949,City,58,Country 22957,City,58,Country 22962,City,58,Country 22976,City,58,Country 23014,City,58,Country 23400,City,58,Country 23038,City,58,Country 23050,City,58,Country 23418,City,58,Country 23104,City,58,Country 23430,City,58,Country 23160,City,58,Country 23162,City,58,Country 23198,City,58,Country 23175,City,58,Country 23353,City,58,Country 23361,City,58,Country 23223,City,58,Country 23225,City,58,Country 23227,City,58,Country 23237,City,58,Country 23255,City,58,Country 23260,City,58,Country 23269,City,58,Country 23302,City,58,Country 23322,City,58,Country 23439,City,58,Country 23452,City,58,Country 22111,City,58,Country 22191,City,58,Country 22195,City,58,Country 22144,City,58,Country 22151,City,58,Country 22205,City,58,Country 22208,City,58,Country 22211,City,58,Country 22174,City,58,Country 22188,City,58,Country 22233,City,58,Country 22239,City,58,Country 22272,City,58,Country 22287,City,58,Country 22325,City,58,Country 22330,City,58,Country 22339,City,58,Country 22340,City,58,Country 22357,City,58,Country 22368,City,58,Country 22375,City,58,Country 22382,City,58,Country 22410,City,58,Country 22406,City,58,Country 22434,City,58,Country 22439,City,58,Country 22450,City,58,Country 22452,City,58,Country 22500,City,58,Country 22509,City,58,Country 22523,City,58,Country 22535,City,58,Country 22560,City,58,Country 22569,City,58,Country 22578,City,58,Country 22601,City,58,Country 22616,City,58,Country 22620,City,58,Country 22646,City,58,Country 22650,City,58,Country 22699,City,58,Country 22749,City,58,Country 22753,City,58,Country 22754,City,58,Country 22767,City,58,Country 22787,City,58,Country 22831,City,58,Country 22869,City,58,Country 22870,City,58,Country 22872,City,58,Country 22909,City,58,Country 22910,City,58,Country 22915,City,58,Country 22950,City,58,Country 22956,City,58,Country 22963,City,58,Country 22980,City,58,Country 22984,City,58,Country 23023,City,58,Country 23024,City,58,Country 23043,City,58,Country 23080,City,58,Country 23084,City,58,Country 23096,City,58,Country 23107,City,58,Country 23424,City,58,Country 23125,City,58,Country 23143,City,58,Country 23431,City,58,Country 23163,City,58,Country 23167,City,58,Country 23169,City,58,Country 23172,City,58,Country 23176,City,58,Country 23185,City,58,Country 23206,City,58,Country 23207,City,58,Country 23208,City,58,Country 23354,City,58,Country 23215,City,58,Country 23216,City,58,Country 23217,City,58,Country 23218,City,58,Country 23226,City,58,Country 23241,City,58,Country 23267,City,58,Country 23275,City,58,Country 23278,City,58,Country 23284,City,58,Country 23317,City,58,Country 23303,City,58,Country 23349,City,58,Country 23327,City,58,Country 23329,City,58,Country 23336,City,58,Country 23340,City,58,Country 23343,City,58,Country 23455,City,58,Country 23346,City,58,Country 30990,City,59,Country 30577,City,59,Country 30578,City,59,Country 30579,City,59,Country 30589,City,59,Country 30590,City,59,Country 30595,City,59,Country 30598,City,59,Country 30601,City,59,Country 30610,City,59,Country 30616,City,59,Country 30618,City,59,Country 30619,City,59,Country 30620,City,59,Country 30622,City,59,Country 30623,City,59,Country 30627,City,59,Country 30633,City,59,Country 30638,City,59,Country 30645,City,59,Country 30648,City,59,Country 30649,City,59,Country 30652,City,59,Country 30654,City,59,Country 30657,City,59,Country 30658,City,59,Country 30659,City,59,Country 30662,City,59,Country 30664,City,59,Country 30665,City,59,Country 30666,City,59,Country 30670,City,59,Country 30672,City,59,Country 30673,City,59,Country 30681,City,59,Country 30678,City,59,Country 30691,City,59,Country 30700,City,59,Country 30701,City,59,Country 30702,City,59,Country 30703,City,59,Country 30704,City,59,Country 30707,City,59,Country 30708,City,59,Country 30722,City,59,Country 30736,City,59,Country 30739,City,59,Country 30740,City,59,Country 30727,City,59,Country 30728,City,59,Country 30731,City,59,Country 30732,City,59,Country 30745,City,59,Country 30746,City,59,Country 30752,City,59,Country 30762,City,59,Country 30766,City,59,Country 30770,City,59,Country 30780,City,59,Country 30782,City,59,Country 30785,City,59,Country 30786,City,59,Country 30803,City,59,Country 30808,City,59,Country 30810,City,59,Country 30823,City,59,Country 31000,City,59,Country 30857,City,59,Country 30858,City,59,Country 30861,City,59,Country 30849,City,59,Country 30880,City,59,Country 30874,City,59,Country 30884,City,59,Country 30885,City,59,Country 30896,City,59,Country 30900,City,59,Country 30930,City,59,Country 30946,City,59,Country 30947,City,59,Country 30944,City,59,Country 30957,City,59,Country 30958,City,59,Country 30960,City,59,Country 30988,City,59,Country 30967,City,59,Country 30580,City,59,Country 30993,City,59,Country 30994,City,59,Country 30585,City,59,Country 30587,City,59,Country 30588,City,59,Country 30591,City,59,Country 30596,City,59,Country 30600,City,59,Country 30604,City,59,Country 30609,City,59,Country 30626,City,59,Country 30639,City,59,Country 30647,City,59,Country 30663,City,59,Country 30669,City,59,Country 30675,City,59,Country 30688,City,59,Country 30692,City,59,Country 30693,City,59,Country 30695,City,59,Country 30698,City,59,Country 30699,City,59,Country 30705,City,59,Country 30706,City,59,Country 30709,City,59,Country 30712,City,59,Country 30719,City,59,Country 30720,City,59,Country 30723,City,59,Country 30724,City,59,Country 30725,City,59,Country 30726,City,59,Country 30738,City,59,Country 30730,City,59,Country 30743,City,59,Country 30744,City,59,Country 30749,City,59,Country 30755,City,59,Country 30758,City,59,Country 30760,City,59,Country 30765,City,59,Country 30775,City,59,Country 30778,City,59,Country 30779,City,59,Country 30781,City,59,Country 30790,City,59,Country 30787,City,59,Country 30794,City,59,Country 30804,City,59,Country 30813,City,59,Country 30827,City,59,Country 30828,City,59,Country 30838,City,59,Country 30839,City,59,Country 30843,City,59,Country 30844,City,59,Country 30860,City,59,Country 30851,City,59,Country 30852,City,59,Country 30863,City,59,Country 30865,City,59,Country 30867,City,59,Country 30868,City,59,Country 30872,City,59,Country 30873,City,59,Country 30875,City,59,Country 30876,City,59,Country 30877,City,59,Country 30878,City,59,Country 30886,City,59,Country 30888,City,59,Country 30925,City,59,Country 30894,City,59,Country 30897,City,59,Country 30903,City,59,Country 30904,City,59,Country 30909,City,59,Country 30910,City,59,Country 30915,City,59,Country 30917,City,59,Country 30923,City,59,Country 30931,City,59,Country 30936,City,59,Country 30952,City,59,Country 30942,City,59,Country 30943,City,59,Country 30953,City,59,Country 30955,City,59,Country 30972,City,59,Country 30973,City,59,Country 30975,City,59,Country 30976,City,59,Country 30978,City,59,Country 30981,City,59,Country 30575,City,59,Country 30576,City,59,Country 30989,City,59,Country 30991,City,59,Country 30992,City,59,Country 30581,City,59,Country 30608,City,59,Country 30611,City,59,Country 30612,City,59,Country 30624,City,59,Country 30637,City,59,Country 30644,City,59,Country 30655,City,59,Country 30656,City,59,Country 30660,City,59,Country 30667,City,59,Country 30689,City,59,Country 30690,City,59,Country 30694,City,59,Country 30710,City,59,Country 30711,City,59,Country 30713,City,59,Country 30714,City,59,Country 30715,City,59,Country 30729,City,59,Country 30747,City,59,Country 30769,City,59,Country 30761,City,59,Country 30788,City,59,Country 30789,City,59,Country 30793,City,59,Country 30795,City,59,Country 30796,City,59,Country 30801,City,59,Country 30809,City,59,Country 30826,City,59,Country 30818,City,59,Country 30836,City,59,Country 30840,City,59,Country 30924,City,59,Country 30869,City,59,Country 30871,City,59,Country 30881,City,59,Country 30906,City,59,Country 30913,City,59,Country 30907,City,59,Country 30920,City,59,Country 30948,City,59,Country 30933,City,59,Country 30934,City,59,Country 30956,City,59,Country 30968,City,59,Country 30969,City,59,Country 30971,City,59,Country 30983,City,59,Country 30987,City,59,Country 30573,City,59,Country 30574,City,59,Country 30995,City,59,Country 30996,City,59,Country 30583,City,59,Country 30584,City,59,Country 30586,City,59,Country 30997,City,59,Country 30998,City,59,Country 30592,City,59,Country 30593,City,59,Country 30594,City,59,Country 30599,City,59,Country 30615,City,59,Country 30603,City,59,Country 30605,City,59,Country 30606,City,59,Country 30607,City,59,Country 30613,City,59,Country 30614,City,59,Country 30617,City,59,Country 30625,City,59,Country 30628,City,59,Country 30629,City,59,Country 30631,City,59,Country 30632,City,59,Country 30634,City,59,Country 30635,City,59,Country 30636,City,59,Country 30650,City,59,Country 30651,City,59,Country 30668,City,59,Country 30671,City,59,Country 30674,City,59,Country 30680,City,59,Country 30679,City,59,Country 30682,City,59,Country 30686,City,59,Country 30687,City,59,Country 30733,City,59,Country 30721,City,59,Country 30735,City,59,Country 30741,City,59,Country 30748,City,59,Country 30756,City,59,Country 30757,City,59,Country 30763,City,59,Country 30764,City,59,Country 30768,City,59,Country 30773,City,59,Country 30774,City,59,Country 30791,City,59,Country 30792,City,59,Country 30784,City,59,Country 30798,City,59,Country 30799,City,59,Country 30800,City,59,Country 30802,City,59,Country 30806,City,59,Country 30811,City,59,Country 30812,City,59,Country 30814,City,59,Country 30825,City,59,Country 30815,City,59,Country 30816,City,59,Country 30829,City,59,Country 30830,City,59,Country 30832,City,59,Country 30834,City,59,Country 30999,City,59,Country 30835,City,59,Country 30841,City,59,Country 30842,City,59,Country 30855,City,59,Country 30856,City,59,Country 30850,City,59,Country 30866,City,59,Country 30870,City,59,Country 30887,City,59,Country 30926,City,59,Country 30927,City,59,Country 30928,City,59,Country 30929,City,59,Country 30895,City,59,Country 30902,City,59,Country 30908,City,59,Country 30918,City,59,Country 30919,City,59,Country 30932,City,59,Country 30935,City,59,Country 30937,City,59,Country 30938,City,59,Country 30939,City,59,Country 30940,City,59,Country 30941,City,59,Country 30950,City,59,Country 30951,City,59,Country 30954,City,59,Country 30959,City,59,Country 30961,City,59,Country 30962,City,59,Country 30963,City,59,Country 30964,City,59,Country 30965,City,59,Country 30966,City,59,Country 30970,City,59,Country 30977,City,59,Country 30982,City,59,Country 30984,City,59,Country 30582,City,59,Country 30597,City,59,Country 30602,City,59,Country 30621,City,59,Country 30630,City,59,Country 30640,City,59,Country 30641,City,59,Country 30642,City,59,Country 30643,City,59,Country 30646,City,59,Country 30653,City,59,Country 30661,City,59,Country 30685,City,59,Country 30676,City,59,Country 30677,City,59,Country 30683,City,59,Country 30684,City,59,Country 30734,City,59,Country 30696,City,59,Country 30697,City,59,Country 30716,City,59,Country 30717,City,59,Country 30718,City,59,Country 30737,City,59,Country 30742,City,59,Country 30750,City,59,Country 30751,City,59,Country 30753,City,59,Country 30754,City,59,Country 30759,City,59,Country 30767,City,59,Country 30771,City,59,Country 30772,City,59,Country 30776,City,59,Country 30777,City,59,Country 30783,City,59,Country 30797,City,59,Country 30805,City,59,Country 30821,City,59,Country 30822,City,59,Country 30807,City,59,Country 30824,City,59,Country 30817,City,59,Country 30819,City,59,Country 30820,City,59,Country 30831,City,59,Country 30833,City,59,Country 31001,City,59,Country 30837,City,59,Country 30845,City,59,Country 30846,City,59,Country 30847,City,59,Country 30848,City,59,Country 30853,City,59,Country 30854,City,59,Country 30859,City,59,Country 30862,City,59,Country 30864,City,59,Country 30879,City,59,Country 30882,City,59,Country 30883,City,59,Country 30889,City,59,Country 30890,City,59,Country 30891,City,59,Country 30892,City,59,Country 30893,City,59,Country 30898,City,59,Country 30899,City,59,Country 30901,City,59,Country 30905,City,59,Country 30911,City,59,Country 30912,City,59,Country 30914,City,59,Country 30916,City,59,Country 30921,City,59,Country 30922,City,59,Country 30949,City,59,Country 30945,City,59,Country 30974,City,59,Country 30979,City,59,Country 30980,City,59,Country 30985,City,59,Country 30986,City,59,Country 31595,City,69,Country 31598,City,69,Country 31602,City,69,Country 31607,City,69,Country 31608,City,69,Country 31613,City,69,Country 31618,City,69,Country 31626,City,69,Country 31629,City,69,Country 31631,City,69,Country 31632,City,69,Country 31640,City,69,Country 31644,City,69,Country 31647,City,69,Country 31651,City,69,Country 31652,City,69,Country 31653,City,69,Country 31658,City,69,Country 31659,City,69,Country 31676,City,69,Country 31678,City,69,Country 31688,City,69,Country 31689,City,69,Country 31695,City,69,Country 31698,City,69,Country 31704,City,69,Country 31705,City,69,Country 31706,City,69,Country 31707,City,69,Country 31714,City,69,Country 31716,City,69,Country 31727,City,69,Country 31734,City,69,Country 31737,City,69,Country 31738,City,69,Country 31645,City,69,Country 31610,City,69,Country 31616,City,69,Country 31617,City,69,Country 31634,City,69,Country 31638,City,69,Country 31639,City,69,Country 31657,City,69,Country 31665,City,69,Country 31666,City,69,Country 31667,City,69,Country 31687,City,69,Country 31709,City,69,Country 31724,City,69,Country 31745,City,69,Country 31611,City,69,Country 31635,City,69,Country 31672,City,69,Country 31673,City,69,Country 31712,City,69,Country 31729,City,69,Country 31730,City,69,Country 31614,City,69,Country 31615,City,69,Country 31661,City,69,Country 31683,City,69,Country 31684,City,69,Country 31603,City,69,Country 31604,City,69,Country 31609,City,69,Country 31656,City,69,Country 31715,City,69,Country 31731,City,69,Country 31746,City,69,Country 31599,City,69,Country 31605,City,69,Country 31606,City,69,Country 31619,City,69,Country 31620,City,69,Country 31641,City,69,Country 31675,City,69,Country 31690,City,69,Country 31691,City,69,Country 31692,City,69,Country 31713,City,69,Country 31717,City,69,Country 31718,City,69,Country 31719,City,69,Country 31733,City,69,Country 31747,City,69,Country 31748,City,69,Country 31742,City,69,Country 31743,City,69,Country 31744,City,69,Country 31600,City,69,Country 31630,City,69,Country 31633,City,69,Country 31648,City,69,Country 31650,City,69,Country 31674,City,69,Country 31680,City,69,Country 31681,City,69,Country 31682,City,69,Country 31703,City,69,Country 31708,City,69,Country 31710,City,69,Country 31725,City,69,Country 31726,City,69,Country 31732,City,69,Country 31749,City,69,Country 31623,City,69,Country 31624,City,69,Country 31685,City,69,Country 31686,City,69,Country 31699,City,69,Country 31700,City,69,Country 31612,City,69,Country 31627,City,69,Country 31628,City,69,Country 31636,City,69,Country 31637,City,69,Country 31662,City,69,Country 31663,City,69,Country 31693,City,69,Country 31694,City,69,Country 31643,City,69,Country 31649,City,69,Country 31660,City,69,Country 31670,City,69,Country 31696,City,69,Country 31697,City,69,Country 31723,City,69,Country 31594,City,69,Country 31601,City,69,Country 31621,City,69,Country 31622,City,69,Country 31646,City,69,Country 31642,City,69,Country 31654,City,69,Country 31655,City,69,Country 31668,City,69,Country 31669,City,69,Country 31677,City,69,Country 31679,City,69,Country 31720,City,69,Country 31721,City,69,Country 31722,City,69,Country 31754,City,69,Country 31671,City,69,Country 31728,City,69,Country 31735,City,69,Country 31593,City,69,Country 31625,City,69,Country 31664,City,69,Country 31711,City,69,Country 31739,City,69,Country 31740,City,69,Country 31741,City,69,Country 31751,City,69,Country 31596,City,69,Country 31597,City,69,Country 31701,City,69,Country 31702,City,69,Country 31736,City,69,Country 31750,City,69,Country 31752,City,69,Country 31753,City,69,Country 39132,City,74,Country 38760,City,74,Country 38809,City,74,Country 38810,City,74,Country 38801,City,74,Country 38807,City,74,Country 38823,City,74,Country 38831,City,74,Country 38849,City,74,Country 38855,City,74,Country 38862,City,74,Country 38866,City,74,Country 38868,City,74,Country 38878,City,74,Country 38887,City,74,Country 38903,City,74,Country 38907,City,74,Country 38921,City,74,Country 38939,City,74,Country 38942,City,74,Country 38982,City,74,Country 38985,City,74,Country 39008,City,74,Country 39035,City,74,Country 39066,City,74,Country 39058,City,74,Country 39059,City,74,Country 39079,City,74,Country 39092,City,74,Country 39110,City,74,Country 38758,City,74,Country 38888,City,74,Country 38824,City,74,Country 38838,City,74,Country 38864,City,74,Country 38911,City,74,Country 38918,City,74,Country 38977,City,74,Country 39078,City,74,Country 39088,City,74,Country 39106,City,74,Country 38732,City,74,Country 38738,City,74,Country 38740,City,74,Country 38742,City,74,Country 38757,City,74,Country 38775,City,74,Country 38790,City,74,Country 38814,City,74,Country 38827,City,74,Country 38851,City,74,Country 38854,City,74,Country 38857,City,74,Country 38884,City,74,Country 38886,City,74,Country 38894,City,74,Country 38909,City,74,Country 38913,City,74,Country 38928,City,74,Country 38929,City,74,Country 38930,City,74,Country 38934,City,74,Country 38936,City,74,Country 38943,City,74,Country 38944,City,74,Country 38948,City,74,Country 38949,City,74,Country 38955,City,74,Country 38963,City,74,Country 38970,City,74,Country 38972,City,74,Country 38978,City,74,Country 38980,City,74,Country 38986,City,74,Country 39009,City,74,Country 39006,City,74,Country 39012,City,74,Country 39030,City,74,Country 39032,City,74,Country 39037,City,74,Country 39065,City,74,Country 39039,City,74,Country 39054,City,74,Country 39060,City,74,Country 39069,City,74,Country 39071,City,74,Country 39081,City,74,Country 39093,City,74,Country 39096,City,74,Country 39119,City,74,Country 39118,City,74,Country 39102,City,74,Country 39104,City,74,Country 39128,City,74,Country 38778,City,74,Country 38816,City,74,Country 38877,City,74,Country 38971,City,74,Country 38999,City,74,Country 39025,City,74,Country 39056,City,74,Country 39061,City,74,Country 39094,City,74,Country 39114,City,74,Country 39115,City,74,Country 38735,City,74,Country 38744,City,74,Country 38759,City,74,Country 38784,City,74,Country 38794,City,74,Country 38825,City,74,Country 38872,City,74,Country 38874,City,74,Country 38935,City,74,Country 39001,City,74,Country 39112,City,74,Country 38747,City,74,Country 38788,City,74,Country 38793,City,74,Country 38841,City,74,Country 38842,City,74,Country 38843,City,74,Country 38859,City,74,Country 38865,City,74,Country 38941,City,74,Country 38975,City,74,Country 38976,City,74,Country 38994,City,74,Country 39004,City,74,Country 39015,City,74,Country 39027,City,74,Country 39036,City,74,Country 39043,City,74,Country 39050,City,74,Country 39052,City,74,Country 39075,City,74,Country 39080,City,74,Country 39091,City,74,Country 39125,City,74,Country 38745,City,74,Country 38786,City,74,Country 38798,City,74,Country 38805,City,74,Country 38848,City,74,Country 38850,City,74,Country 38858,City,74,Country 38867,City,74,Country 38912,City,74,Country 38916,City,74,Country 38957,City,74,Country 38968,City,74,Country 38989,City,74,Country 39007,City,74,Country 39033,City,74,Country 39077,City,74,Country 39083,City,74,Country 39097,City,74,Country 38733,City,74,Country 38754,City,74,Country 38755,City,74,Country 38756,City,74,Country 38765,City,74,Country 38772,City,74,Country 38782,City,74,Country 38817,City,74,Country 38890,City,74,Country 38844,City,74,Country 38847,City,74,Country 38852,City,74,Country 38879,City,74,Country 38885,City,74,Country 38915,City,74,Country 38922,City,74,Country 38932,City,74,Country 38938,City,74,Country 38953,City,74,Country 38965,City,74,Country 38966,City,74,Country 38967,City,74,Country 38987,City,74,Country 38995,City,74,Country 38997,City,74,Country 39003,City,74,Country 39002,City,74,Country 39005,City,74,Country 39010,City,74,Country 39014,City,74,Country 39020,City,74,Country 39031,City,74,Country 39046,City,74,Country 39048,City,74,Country 39068,City,74,Country 39086,City,74,Country 39090,City,74,Country 39108,City,74,Country 39121,City,74,Country 39123,City,74,Country 39126,City,74,Country 38771,City,74,Country 38792,City,74,Country 38795,City,74,Country 38834,City,74,Country 38869,City,74,Country 38870,City,74,Country 38875,City,74,Country 38876,City,74,Country 38893,City,74,Country 38902,City,74,Country 38927,City,74,Country 38960,City,74,Country 38961,City,74,Country 38974,City,74,Country 39022,City,74,Country 39026,City,74,Country 39072,City,74,Country 39095,City,74,Country 39117,City,74,Country 39120,City,74,Country 38736,City,74,Country 38737,City,74,Country 38741,City,74,Country 38780,City,74,Country 38763,City,74,Country 38768,City,74,Country 38774,City,74,Country 38892,City,74,Country 38951,City,74,Country 38962,City,74,Country 38969,City,74,Country 39063,City,74,Country 38783,City,74,Country 38803,City,74,Country 38815,City,74,Country 38820,City,74,Country 38832,City,74,Country 38839,City,74,Country 38861,City,74,Country 38881,City,74,Country 38897,City,74,Country 38910,City,74,Country 38926,City,74,Country 38952,City,74,Country 38984,City,74,Country 39017,City,74,Country 39018,City,74,Country 39049,City,74,Country 39055,City,74,Country 39062,City,74,Country 39074,City,74,Country 39084,City,74,Country 39100,City,74,Country 39101,City,74,Country 39103,City,74,Country 39105,City,74,Country 39107,City,74,Country 38749,City,74,Country 38750,City,74,Country 38762,City,74,Country 38776,City,74,Country 38808,City,74,Country 38822,City,74,Country 38833,City,74,Country 38860,City,74,Country 38863,City,74,Country 38891,City,74,Country 38880,City,74,Country 38925,City,74,Country 38900,City,74,Country 38905,City,74,Country 38924,City,74,Country 38933,City,74,Country 38950,City,74,Country 38954,City,74,Country 38990,City,74,Country 38991,City,74,Country 39016,City,74,Country 39064,City,74,Country 39047,City,74,Country 39089,City,74,Country 39098,City,74,Country 38787,City,74,Country 38802,City,74,Country 38899,City,74,Country 38908,City,74,Country 38923,City,74,Country 38956,City,74,Country 38973,City,74,Country 39019,City,74,Country 39028,City,74,Country 39034,City,74,Country 39040,City,74,Country 39067,City,74,Country 39127,City,74,Country 39130,City,74,Country 38730,City,74,Country 38731,City,74,Country 38734,City,74,Country 38751,City,74,Country 38785,City,74,Country 38791,City,74,Country 38796,City,74,Country 38804,City,74,Country 38826,City,74,Country 38835,City,74,Country 38836,City,74,Country 38871,City,74,Country 38882,City,74,Country 38883,City,74,Country 38898,City,74,Country 38901,City,74,Country 38906,City,74,Country 38959,City,74,Country 39044,City,74,Country 39053,City,74,Country 39076,City,74,Country 39087,City,74,Country 39111,City,74,Country 39122,City,74,Country 39124,City,74,Country 38746,City,74,Country 38766,City,74,Country 38769,City,74,Country 38773,City,74,Country 38811,City,74,Country 38800,City,74,Country 38806,City,74,Country 38821,City,74,Country 38846,City,74,Country 38947,City,74,Country 38937,City,74,Country 38981,City,74,Country 38983,City,74,Country 38998,City,74,Country 39000,City,74,Country 39013,City,74,Country 39024,City,74,Country 39041,City,74,Country 39042,City,74,Country 39057,City,74,Country 39113,City,74,Country 38752,City,74,Country 38781,City,74,Country 38764,City,74,Country 38767,City,74,Country 38777,City,74,Country 38797,City,74,Country 38799,City,74,Country 38819,City,74,Country 38895,City,74,Country 38919,City,74,Country 39021,City,74,Country 39023,City,74,Country 39070,City,74,Country 39073,City,74,Country 39082,City,74,Country 39129,City,74,Country 38739,City,74,Country 38743,City,74,Country 38748,City,74,Country 38753,City,74,Country 38761,City,74,Country 38770,City,74,Country 38779,City,74,Country 38789,City,74,Country 38812,City,74,Country 38813,City,74,Country 38818,City,74,Country 38828,City,74,Country 38829,City,74,Country 38830,City,74,Country 38889,City,74,Country 38837,City,74,Country 38840,City,74,Country 38845,City,74,Country 38853,City,74,Country 38856,City,74,Country 38873,City,74,Country 38896,City,74,Country 38904,City,74,Country 38914,City,74,Country 38917,City,74,Country 38920,City,74,Country 38946,City,74,Country 38931,City,74,Country 38940,City,74,Country 38945,City,74,Country 38958,City,74,Country 38964,City,74,Country 38979,City,74,Country 38988,City,74,Country 38992,City,74,Country 38993,City,74,Country 38996,City,74,Country 39011,City,74,Country 39029,City,74,Country 39038,City,74,Country 39045,City,74,Country 39051,City,74,Country 39085,City,74,Country 39099,City,74,Country 39109,City,74,Country 39116,City,74,Country 39243,City,75,Country 39246,City,75,Country 39273,City,75,Country 39275,City,75,Country 39285,City,75,Country 39286,City,75,Country 39291,City,75,Country 39295,City,75,Country 39301,City,75,Country 39302,City,75,Country 39304,City,75,Country 39307,City,75,Country 39309,City,75,Country 39315,City,75,Country 39316,City,75,Country 39319,City,75,Country 39320,City,75,Country 39333,City,75,Country 39325,City,75,Country 39326,City,75,Country 39328,City,75,Country 39327,City,75,Country 39331,City,75,Country 39344,City,75,Country 39360,City,75,Country 39361,City,75,Country 39349,City,75,Country 39350,City,75,Country 39358,City,75,Country 39369,City,75,Country 39370,City,75,Country 39375,City,75,Country 39376,City,75,Country 39377,City,75,Country 39391,City,75,Country 39414,City,75,Country 39415,City,75,Country 39416,City,75,Country 39420,City,75,Country 39423,City,75,Country 39428,City,75,Country 39431,City,75,Country 39440,City,75,Country 39441,City,75,Country 39444,City,75,Country 39537,City,75,Country 39448,City,75,Country 39460,City,75,Country 39471,City,75,Country 39487,City,75,Country 39496,City,75,Country 39500,City,75,Country 39507,City,75,Country 39514,City,75,Country 39519,City,75,Country 39520,City,75,Country 39522,City,75,Country 39563,City,75,Country 39569,City,75,Country 39572,City,75,Country 39585,City,75,Country 39607,City,75,Country 39624,City,75,Country 39630,City,75,Country 39637,City,75,Country 39650,City,75,Country 39659,City,75,Country 39660,City,75,Country 39663,City,75,Country 39685,City,75,Country 39690,City,75,Country 40409,City,75,Country 39734,City,75,Country 39744,City,75,Country 39748,City,75,Country 39751,City,75,Country 39773,City,75,Country 39776,City,75,Country 39791,City,75,Country 39796,City,75,Country 39800,City,75,Country 39840,City,75,Country 39843,City,75,Country 39846,City,75,Country 39849,City,75,Country 39856,City,75,Country 39859,City,75,Country 39870,City,75,Country 39862,City,75,Country 39882,City,75,Country 39885,City,75,Country 39891,City,75,Country 39892,City,75,Country 39897,City,75,Country 40421,City,75,Country 39911,City,75,Country 39914,City,75,Country 39915,City,75,Country 39916,City,75,Country 39919,City,75,Country 39921,City,75,Country 39922,City,75,Country 39927,City,75,Country 39928,City,75,Country 39932,City,75,Country 39955,City,75,Country 39975,City,75,Country 39976,City,75,Country 39978,City,75,Country 40000,City,75,Country 40020,City,75,Country 40021,City,75,Country 40028,City,75,Country 40036,City,75,Country 40042,City,75,Country 40056,City,75,Country 40061,City,75,Country 40245,City,75,Country 40246,City,75,Country 40117,City,75,Country 40118,City,75,Country 40126,City,75,Country 40131,City,75,Country 40132,City,75,Country 40168,City,75,Country 40179,City,75,Country 40187,City,75,Country 40191,City,75,Country 40192,City,75,Country 40194,City,75,Country 40196,City,75,Country 40189,City,75,Country 40190,City,75,Country 40204,City,75,Country 40210,City,75,Country 40226,City,75,Country 40242,City,75,Country 40262,City,75,Country 40363,City,75,Country 40330,City,75,Country 40309,City,75,Country 40312,City,75,Country 40316,City,75,Country 40321,City,75,Country 40325,City,75,Country 40328,City,75,Country 40332,City,75,Country 40337,City,75,Country 40341,City,75,Country 40375,City,75,Country 40379,City,75,Country 40383,City,75,Country 40400,City,75,Country 40404,City,75,Country 40465,City,75,Country 40477,City,75,Country 40516,City,75,Country 41389,City,75,Country 40634,City,75,Country 40636,City,75,Country 41397,City,75,Country 40655,City,75,Country 40659,City,75,Country 40662,City,75,Country 40665,City,75,Country 40667,City,75,Country 40669,City,75,Country 40931,City,75,Country 40671,City,75,Country 40674,City,75,Country 40686,City,75,Country 40688,City,75,Country 40694,City,75,Country 40695,City,75,Country 40700,City,75,Country 40701,City,75,Country 40713,City,75,Country 40714,City,75,Country 40717,City,75,Country 40718,City,75,Country 40719,City,75,Country 40721,City,75,Country 40725,City,75,Country 40732,City,75,Country 40733,City,75,Country 40738,City,75,Country 40749,City,75,Country 40756,City,75,Country 40760,City,75,Country 40765,City,75,Country 40766,City,75,Country 40769,City,75,Country 40781,City,75,Country 40782,City,75,Country 40784,City,75,Country 40785,City,75,Country 40786,City,75,Country 40788,City,75,Country 40789,City,75,Country 40790,City,75,Country 40791,City,75,Country 40793,City,75,Country 40803,City,75,Country 40804,City,75,Country 40808,City,75,Country 40809,City,75,Country 40813,City,75,Country 40822,City,75,Country 40824,City,75,Country 40825,City,75,Country 40826,City,75,Country 40829,City,75,Country 40938,City,75,Country 40955,City,75,Country 40959,City,75,Country 40962,City,75,Country 40965,City,75,Country 40973,City,75,Country 40980,City,75,Country 40981,City,75,Country 40991,City,75,Country 40995,City,75,Country 40997,City,75,Country 40999,City,75,Country 41001,City,75,Country 41007,City,75,Country 40832,City,75,Country 40833,City,75,Country 40836,City,75,Country 40851,City,75,Country 40857,City,75,Country 40858,City,75,Country 40859,City,75,Country 40865,City,75,Country 40866,City,75,Country 40876,City,75,Country 40888,City,75,Country 40903,City,75,Country 40908,City,75,Country 40910,City,75,Country 40911,City,75,Country 40914,City,75,Country 40920,City,75,Country 40925,City,75,Country 40930,City,75,Country 41030,City,75,Country 41033,City,75,Country 41038,City,75,Country 41073,City,75,Country 41049,City,75,Country 41059,City,75,Country 41064,City,75,Country 41081,City,75,Country 41082,City,75,Country 41086,City,75,Country 41088,City,75,Country 41093,City,75,Country 41094,City,75,Country 41098,City,75,Country 41109,City,75,Country 41113,City,75,Country 41117,City,75,Country 41118,City,75,Country 41122,City,75,Country 41130,City,75,Country 41134,City,75,Country 41154,City,75,Country 41162,City,75,Country 41166,City,75,Country 41175,City,75,Country 41176,City,75,Country 41186,City,75,Country 41192,City,75,Country 41213,City,75,Country 41214,City,75,Country 41247,City,75,Country 41255,City,75,Country 41259,City,75,Country 41262,City,75,Country 41273,City,75,Country 41282,City,75,Country 41285,City,75,Country 41287,City,75,Country 41295,City,75,Country 41297,City,75,Country 41299,City,75,Country 41300,City,75,Country 41347,City,75,Country 41309,City,75,Country 41313,City,75,Country 41315,City,75,Country 41326,City,75,Country 41330,City,75,Country 41335,City,75,Country 41336,City,75,Country 41337,City,75,Country 41355,City,75,Country 41370,City,75,Country 41371,City,75,Country 41372,City,75,Country 41374,City,75,Country 41377,City,75,Country 41380,City,75,Country 41381,City,75,Country 41383,City,75,Country 41387,City,75,Country 41404,City,75,Country 41407,City,75,Country 41432,City,75,Country 41442,City,75,Country 41600,City,75,Country 41452,City,75,Country 41608,City,75,Country 41610,City,75,Country 41611,City,75,Country 41620,City,75,Country 41627,City,75,Country 41630,City,75,Country 41643,City,75,Country 41644,City,75,Country 41648,City,75,Country 41649,City,75,Country 41466,City,75,Country 41499,City,75,Country 41473,City,75,Country 41485,City,75,Country 41489,City,75,Country 41497,City,75,Country 41506,City,75,Country 41511,City,75,Country 41512,City,75,Country 41526,City,75,Country 41527,City,75,Country 41515,City,75,Country 41522,City,75,Country 41524,City,75,Country 41537,City,75,Country 41543,City,75,Country 41557,City,75,Country 41558,City,75,Country 41563,City,75,Country 41580,City,75,Country 41591,City,75,Country 41597,City,75,Country 48036,City,75,Country 48038,City,75,Country 48039,City,75,Country 48042,City,75,Country 48056,City,75,Country 41675,City,75,Country 41682,City,75,Country 41684,City,75,Country 48069,City,75,Country 48082,City,75,Country 41713,City,75,Country 41717,City,75,Country 41735,City,75,Country 41736,City,75,Country 41740,City,75,Country 48106,City,75,Country 48109,City,75,Country 41744,City,75,Country 48118,City,75,Country 48120,City,75,Country 41751,City,75,Country 41759,City,75,Country 41772,City,75,Country 41775,City,75,Country 41782,City,75,Country 41783,City,75,Country 41793,City,75,Country 41794,City,75,Country 42002,City,75,Country 41801,City,75,Country 42008,City,75,Country 41814,City,75,Country 41816,City,75,Country 41820,City,75,Country 41824,City,75,Country 41826,City,75,Country 41830,City,75,Country 41842,City,75,Country 41843,City,75,Country 41866,City,75,Country 41876,City,75,Country 41889,City,75,Country 41890,City,75,Country 41891,City,75,Country 41892,City,75,Country 41944,City,75,Country 41946,City,75,Country 41947,City,75,Country 41950,City,75,Country 41952,City,75,Country 41967,City,75,Country 41974,City,75,Country 41977,City,75,Country 42016,City,75,Country 42030,City,75,Country 42059,City,75,Country 42061,City,75,Country 42062,City,75,Country 42297,City,75,Country 42077,City,75,Country 42083,City,75,Country 42111,City,75,Country 42095,City,75,Country 42096,City,75,Country 42108,City,75,Country 42113,City,75,Country 42123,City,75,Country 42179,City,75,Country 42182,City,75,Country 42197,City,75,Country 42200,City,75,Country 42235,City,75,Country 42236,City,75,Country 42237,City,75,Country 42217,City,75,Country 42208,City,75,Country 42210,City,75,Country 42211,City,75,Country 42219,City,75,Country 42220,City,75,Country 42229,City,75,Country 42286,City,75,Country 42259,City,75,Country 42343,City,75,Country 42345,City,75,Country 42346,City,75,Country 42349,City,75,Country 42350,City,75,Country 42352,City,75,Country 42372,City,75,Country 42393,City,75,Country 42405,City,75,Country 42436,City,75,Country 42443,City,75,Country 42493,City,75,Country 42505,City,75,Country 42519,City,75,Country 42520,City,75,Country 42522,City,75,Country 42525,City,75,Country 42531,City,75,Country 42535,City,75,Country 42538,City,75,Country 42539,City,75,Country 42540,City,75,Country 42551,City,75,Country 42555,City,75,Country 42561,City,75,Country 42563,City,75,Country 42580,City,75,Country 42588,City,75,Country 42595,City,75,Country 43709,City,75,Country 43705,City,75,Country 42631,City,75,Country 42658,City,75,Country 42659,City,75,Country 42661,City,75,Country 42642,City,75,Country 42645,City,75,Country 42650,City,75,Country 42654,City,75,Country 42657,City,75,Country 42676,City,75,Country 42692,City,75,Country 42710,City,75,Country 42726,City,75,Country 42754,City,75,Country 42762,City,75,Country 42771,City,75,Country 42808,City,75,Country 42817,City,75,Country 42815,City,75,Country 42816,City,75,Country 42818,City,75,Country 42819,City,75,Country 42820,City,75,Country 42825,City,75,Country 42841,City,75,Country 42845,City,75,Country 42850,City,75,Country 42856,City,75,Country 42858,City,75,Country 42862,City,75,Country 42881,City,75,Country 42883,City,75,Country 42885,City,75,Country 42889,City,75,Country 42890,City,75,Country 42892,City,75,Country 42893,City,75,Country 42900,City,75,Country 42908,City,75,Country 42918,City,75,Country 42940,City,75,Country 42933,City,75,Country 42946,City,75,Country 42957,City,75,Country 42972,City,75,Country 42974,City,75,Country 42984,City,75,Country 42996,City,75,Country 42998,City,75,Country 43021,City,75,Country 43039,City,75,Country 43045,City,75,Country 43051,City,75,Country 43058,City,75,Country 43063,City,75,Country 43066,City,75,Country 43070,City,75,Country 43071,City,75,Country 43078,City,75,Country 43080,City,75,Country 43100,City,75,Country 43112,City,75,Country 43117,City,75,Country 43133,City,75,Country 43137,City,75,Country 43139,City,75,Country 43145,City,75,Country 43159,City,75,Country 43160,City,75,Country 43161,City,75,Country 43163,City,75,Country 43166,City,75,Country 43167,City,75,Country 43171,City,75,Country 43174,City,75,Country 43179,City,75,Country 43194,City,75,Country 43196,City,75,Country 43202,City,75,Country 43224,City,75,Country 43235,City,75,Country 43288,City,75,Country 43252,City,75,Country 43258,City,75,Country 43273,City,75,Country 43274,City,75,Country 43282,City,75,Country 43287,City,75,Country 43299,City,75,Country 43307,City,75,Country 43322,City,75,Country 43331,City,75,Country 43348,City,75,Country 43351,City,75,Country 43352,City,75,Country 43353,City,75,Country 43355,City,75,Country 43359,City,75,Country 43361,City,75,Country 43369,City,75,Country 43377,City,75,Country 43380,City,75,Country 43382,City,75,Country 43383,City,75,Country 43434,City,75,Country 43390,City,75,Country 43396,City,75,Country 43405,City,75,Country 43406,City,75,Country 43424,City,75,Country 43433,City,75,Country 43458,City,75,Country 43700,City,75,Country 43461,City,75,Country 43467,City,75,Country 43488,City,75,Country 43494,City,75,Country 43511,City,75,Country 43517,City,75,Country 43519,City,75,Country 43541,City,75,Country 43544,City,75,Country 43584,City,75,Country 43589,City,75,Country 43622,City,75,Country 43624,City,75,Country 43625,City,75,Country 43633,City,75,Country 43636,City,75,Country 43643,City,75,Country 43646,City,75,Country 43658,City,75,Country 43662,City,75,Country 43673,City,75,Country 43677,City,75,Country 43678,City,75,Country 43710,City,75,Country 43715,City,75,Country 44452,City,75,Country 43720,City,75,Country 43750,City,75,Country 43761,City,75,Country 43762,City,75,Country 43787,City,75,Country 43788,City,75,Country 43795,City,75,Country 43797,City,75,Country 43806,City,75,Country 43822,City,75,Country 43833,City,75,Country 43839,City,75,Country 43845,City,75,Country 43847,City,75,Country 43852,City,75,Country 43862,City,75,Country 43877,City,75,Country 43880,City,75,Country 43881,City,75,Country 43910,City,75,Country 43912,City,75,Country 43933,City,75,Country 43934,City,75,Country 43935,City,75,Country 43944,City,75,Country 43956,City,75,Country 43958,City,75,Country 43960,City,75,Country 43966,City,75,Country 43974,City,75,Country 44454,City,75,Country 43984,City,75,Country 43989,City,75,Country 44467,City,75,Country 44004,City,75,Country 44006,City,75,Country 44011,City,75,Country 44012,City,75,Country 44470,City,75,Country 44477,City,75,Country 44035,City,75,Country 44036,City,75,Country 44038,City,75,Country 44040,City,75,Country 44053,City,75,Country 44056,City,75,Country 44063,City,75,Country 44064,City,75,Country 44065,City,75,Country 44066,City,75,Country 44492,City,75,Country 44067,City,75,Country 44075,City,75,Country 44083,City,75,Country 44084,City,75,Country 44086,City,75,Country 44095,City,75,Country 44100,City,75,Country 44101,City,75,Country 44105,City,75,Country 44109,City,75,Country 44111,City,75,Country 44113,City,75,Country 44122,City,75,Country 44143,City,75,Country 44145,City,75,Country 44160,City,75,Country 44155,City,75,Country 44159,City,75,Country 44166,City,75,Country 44168,City,75,Country 44171,City,75,Country 44173,City,75,Country 44175,City,75,Country 44199,City,75,Country 44200,City,75,Country 44201,City,75,Country 44334,City,75,Country 44332,City,75,Country 44333,City,75,Country 44233,City,75,Country 44237,City,75,Country 44277,City,75,Country 44276,City,75,Country 44281,City,75,Country 44291,City,75,Country 44283,City,75,Country 44284,City,75,Country 44295,City,75,Country 44325,City,75,Country 44316,City,75,Country 44320,City,75,Country 44321,City,75,Country 44329,City,75,Country 44340,City,75,Country 44348,City,75,Country 44361,City,75,Country 44377,City,75,Country 44394,City,75,Country 44405,City,75,Country 44428,City,75,Country 44415,City,75,Country 44421,City,75,Country 44425,City,75,Country 44439,City,75,Country 44512,City,75,Country 44519,City,75,Country 44695,City,75,Country 44549,City,75,Country 44555,City,75,Country 44558,City,75,Country 44559,City,75,Country 44581,City,75,Country 44568,City,75,Country 44569,City,75,Country 44573,City,75,Country 44574,City,75,Country 44586,City,75,Country 44605,City,75,Country 44604,City,75,Country 44620,City,75,Country 44625,City,75,Country 44653,City,75,Country 44665,City,75,Country 44674,City,75,Country 44690,City,75,Country 44756,City,75,Country 44760,City,75,Country 44775,City,75,Country 44772,City,75,Country 44781,City,75,Country 44801,City,75,Country 44807,City,75,Country 44819,City,75,Country 44820,City,75,Country 44842,City,75,Country 44863,City,75,Country 44865,City,75,Country 44870,City,75,Country 44878,City,75,Country 44884,City,75,Country 45347,City,75,Country 45354,City,75,Country 45355,City,75,Country 45356,City,75,Country 45361,City,75,Country 45362,City,75,Country 45364,City,75,Country 44901,City,75,Country 44903,City,75,Country 44908,City,75,Country 44912,City,75,Country 44933,City,75,Country 44950,City,75,Country 44951,City,75,Country 44958,City,75,Country 44959,City,75,Country 44975,City,75,Country 45004,City,75,Country 45005,City,75,Country 45135,City,75,Country 45137,City,75,Country 45141,City,75,Country 45144,City,75,Country 45145,City,75,Country 45146,City,75,Country 45152,City,75,Country 45161,City,75,Country 45187,City,75,Country 45178,City,75,Country 45183,City,75,Country 45184,City,75,Country 45186,City,75,Country 45188,City,75,Country 45195,City,75,Country 45175,City,75,Country 45204,City,75,Country 45205,City,75,Country 45221,City,75,Country 45240,City,75,Country 45255,City,75,Country 45254,City,75,Country 45256,City,75,Country 45275,City,75,Country 45280,City,75,Country 45305,City,75,Country 45311,City,75,Country 45285,City,75,Country 45287,City,75,Country 45291,City,75,Country 45313,City,75,Country 45331,City,75,Country 45335,City,75,Country 45394,City,75,Country 45393,City,75,Country 45399,City,75,Country 45400,City,75,Country 45427,City,75,Country 45687,City,75,Country 45448,City,75,Country 45456,City,75,Country 45457,City,75,Country 45462,City,75,Country 45470,City,75,Country 45474,City,75,Country 45476,City,75,Country 45481,City,75,Country 45512,City,75,Country 45516,City,75,Country 45517,City,75,Country 45520,City,75,Country 45521,City,75,Country 45526,City,75,Country 45529,City,75,Country 45535,City,75,Country 45539,City,75,Country 45540,City,75,Country 45547,City,75,Country 45548,City,75,Country 45551,City,75,Country 45563,City,75,Country 45569,City,75,Country 45570,City,75,Country 45574,City,75,Country 45602,City,75,Country 45639,City,75,Country 45646,City,75,Country 45647,City,75,Country 45653,City,75,Country 45672,City,75,Country 45676,City,75,Country 45681,City,75,Country 45702,City,75,Country 45716,City,75,Country 45721,City,75,Country 45731,City,75,Country 45737,City,75,Country 45736,City,75,Country 45748,City,75,Country 45769,City,75,Country 45757,City,75,Country 45763,City,75,Country 45764,City,75,Country 45768,City,75,Country 45773,City,75,Country 45796,City,75,Country 45801,City,75,Country 45804,City,75,Country 45808,City,75,Country 45835,City,75,Country 45815,City,75,Country 45816,City,75,Country 45818,City,75,Country 45819,City,75,Country 45820,City,75,Country 45841,City,75,Country 45843,City,75,Country 45844,City,75,Country 45847,City,75,Country 45850,City,75,Country 45852,City,75,Country 45863,City,75,Country 45864,City,75,Country 45879,City,75,Country 45882,City,75,Country 45891,City,75,Country 45888,City,75,Country 45895,City,75,Country 45899,City,75,Country 45903,City,75,Country 45907,City,75,Country 45908,City,75,Country 45909,City,75,Country 45910,City,75,Country 45911,City,75,Country 46635,City,75,Country 46638,City,75,Country 46641,City,75,Country 46645,City,75,Country 45925,City,75,Country 46646,City,75,Country 46649,City,75,Country 46651,City,75,Country 46653,City,75,Country 46658,City,75,Country 45945,City,75,Country 45947,City,75,Country 45938,City,75,Country 45940,City,75,Country 45941,City,75,Country 45943,City,75,Country 45949,City,75,Country 45969,City,75,Country 45955,City,75,Country 45956,City,75,Country 45959,City,75,Country 45962,City,75,Country 45960,City,75,Country 45963,City,75,Country 45970,City,75,Country 45973,City,75,Country 45976,City,75,Country 45980,City,75,Country 45972,City,75,Country 45985,City,75,Country 45987,City,75,Country 46045,City,75,Country 46006,City,75,Country 45995,City,75,Country 45997,City,75,Country 45998,City,75,Country 45999,City,75,Country 46000,City,75,Country 46026,City,75,Country 46029,City,75,Country 46072,City,75,Country 46050,City,75,Country 46061,City,75,Country 46064,City,75,Country 46074,City,75,Country 46083,City,75,Country 46112,City,75,Country 46088,City,75,Country 46091,City,75,Country 46095,City,75,Country 46096,City,75,Country 46098,City,75,Country 46099,City,75,Country 46101,City,75,Country 46102,City,75,Country 46114,City,75,Country 46117,City,75,Country 46121,City,75,Country 46123,City,75,Country 46125,City,75,Country 46127,City,75,Country 46129,City,75,Country 46137,City,75,Country 46144,City,75,Country 46145,City,75,Country 46138,City,75,Country 46154,City,75,Country 46159,City,75,Country 46160,City,75,Country 46162,City,75,Country 46163,City,75,Country 46156,City,75,Country 46157,City,75,Country 46171,City,75,Country 46176,City,75,Country 46177,City,75,Country 46183,City,75,Country 46184,City,75,Country 46187,City,75,Country 46189,City,75,Country 46219,City,75,Country 46233,City,75,Country 46245,City,75,Country 46246,City,75,Country 46247,City,75,Country 46248,City,75,Country 46250,City,75,Country 46251,City,75,Country 46260,City,75,Country 46295,City,75,Country 46268,City,75,Country 46279,City,75,Country 46287,City,75,Country 46289,City,75,Country 46298,City,75,Country 46299,City,75,Country 46301,City,75,Country 46313,City,75,Country 46314,City,75,Country 46315,City,75,Country 46316,City,75,Country 46319,City,75,Country 46337,City,75,Country 46361,City,75,Country 46370,City,75,Country 46384,City,75,Country 46388,City,75,Country 46402,City,75,Country 46408,City,75,Country 46409,City,75,Country 46411,City,75,Country 46412,City,75,Country 46414,City,75,Country 46417,City,75,Country 46405,City,75,Country 46419,City,75,Country 46482,City,75,Country 46431,City,75,Country 46432,City,75,Country 46448,City,75,Country 46462,City,75,Country 46464,City,75,Country 46466,City,75,Country 46468,City,75,Country 46486,City,75,Country 46491,City,75,Country 46493,City,75,Country 46510,City,75,Country 46513,City,75,Country 46516,City,75,Country 46496,City,75,Country 46501,City,75,Country 46502,City,75,Country 46503,City,75,Country 46504,City,75,Country 46505,City,75,Country 46507,City,75,Country 46521,City,75,Country 46527,City,75,Country 46529,City,75,Country 46534,City,75,Country 46537,City,75,Country 46540,City,75,Country 46548,City,75,Country 46554,City,75,Country 46553,City,75,Country 46555,City,75,Country 46556,City,75,Country 46575,City,75,Country 46576,City,75,Country 46585,City,75,Country 46586,City,75,Country 46594,City,75,Country 46599,City,75,Country 46624,City,75,Country 46607,City,75,Country 46608,City,75,Country 46613,City,75,Country 46629,City,75,Country 46669,City,75,Country 46671,City,75,Country 46677,City,75,Country 46680,City,75,Country 46686,City,75,Country 46685,City,75,Country 46699,City,75,Country 46726,City,75,Country 46740,City,75,Country 46741,City,75,Country 46746,City,75,Country 46756,City,75,Country 46757,City,75,Country 46776,City,75,Country 46791,City,75,Country 46810,City,75,Country 46825,City,75,Country 46827,City,75,Country 46828,City,75,Country 46829,City,75,Country 46830,City,75,Country 46836,City,75,Country 46838,City,75,Country 46845,City,75,Country 46860,City,75,Country 46867,City,75,Country 46868,City,75,Country 46870,City,75,Country 46875,City,75,Country 46876,City,75,Country 46886,City,75,Country 46889,City,75,Country 46905,City,75,Country 46906,City,75,Country 47134,City,75,Country 47135,City,75,Country 46950,City,75,Country 47147,City,75,Country 46955,City,75,Country 46959,City,75,Country 46961,City,75,Country 46969,City,75,Country 46970,City,75,Country 46971,City,75,Country 46981,City,75,Country 46983,City,75,Country 46985,City,75,Country 46986,City,75,Country 46987,City,75,Country 46995,City,75,Country 46997,City,75,Country 47001,City,75,Country 47022,City,75,Country 47029,City,75,Country 47039,City,75,Country 47040,City,75,Country 47043,City,75,Country 47060,City,75,Country 47082,City,75,Country 47089,City,75,Country 47091,City,75,Country 47124,City,75,Country 47127,City,75,Country 47157,City,75,Country 47165,City,75,Country 47166,City,75,Country 47168,City,75,Country 47170,City,75,Country 47175,City,75,Country 47183,City,75,Country 47185,City,75,Country 47199,City,75,Country 47200,City,75,Country 47201,City,75,Country 47208,City,75,Country 47222,City,75,Country 47224,City,75,Country 47228,City,75,Country 47233,City,75,Country 47242,City,75,Country 47243,City,75,Country 47245,City,75,Country 47275,City,75,Country 47247,City,75,Country 47248,City,75,Country 47257,City,75,Country 47258,City,75,Country 47262,City,75,Country 47265,City,75,Country 47279,City,75,Country 47280,City,75,Country 47306,City,75,Country 47310,City,75,Country 47313,City,75,Country 47328,City,75,Country 47340,City,75,Country 47346,City,75,Country 47353,City,75,Country 47359,City,75,Country 47363,City,75,Country 47406,City,75,Country 47408,City,75,Country 47412,City,75,Country 47414,City,75,Country 47424,City,75,Country 47427,City,75,Country 47429,City,75,Country 47441,City,75,Country 47461,City,75,Country 47465,City,75,Country 47471,City,75,Country 47475,City,75,Country 47486,City,75,Country 47491,City,75,Country 47492,City,75,Country 47494,City,75,Country 47493,City,75,Country 47501,City,75,Country 47502,City,75,Country 47514,City,75,Country 47533,City,75,Country 47537,City,75,Country 47538,City,75,Country 47541,City,75,Country 47539,City,75,Country 47545,City,75,Country 47552,City,75,Country 47556,City,75,Country 47567,City,75,Country 47926,City,75,Country 47599,City,75,Country 47608,City,75,Country 47617,City,75,Country 47620,City,75,Country 47625,City,75,Country 47634,City,75,Country 47639,City,75,Country 47649,City,75,Country 47931,City,75,Country 47651,City,75,Country 47654,City,75,Country 47655,City,75,Country 47656,City,75,Country 47666,City,75,Country 47668,City,75,Country 47670,City,75,Country 47675,City,75,Country 47682,City,75,Country 47692,City,75,Country 47710,City,75,Country 47711,City,75,Country 47712,City,75,Country 47713,City,75,Country 47714,City,75,Country 47716,City,75,Country 47718,City,75,Country 47719,City,75,Country 47724,City,75,Country 47726,City,75,Country 47734,City,75,Country 47738,City,75,Country 47741,City,75,Country 47751,City,75,Country 47759,City,75,Country 47767,City,75,Country 47793,City,75,Country 47794,City,75,Country 47817,City,75,Country 47818,City,75,Country 47822,City,75,Country 47836,City,75,Country 47838,City,75,Country 47843,City,75,Country 47850,City,75,Country 47853,City,75,Country 47861,City,75,Country 47862,City,75,Country 47863,City,75,Country 47864,City,75,Country 47866,City,75,Country 47879,City,75,Country 47880,City,75,Country 47882,City,75,Country 47883,City,75,Country 47889,City,75,Country 47890,City,75,Country 47892,City,75,Country 47899,City,75,Country 47901,City,75,Country 47902,City,75,Country 47903,City,75,Country 47905,City,75,Country 47912,City,75,Country 47913,City,75,Country 48002,City,75,Country 48003,City,75,Country 48009,City,75,Country 48011,City,75,Country 48012,City,75,Country 48021,City,75,Country 39267,City,75,Country 39280,City,75,Country 39281,City,75,Country 39290,City,75,Country 39373,City,75,Country 39379,City,75,Country 39443,City,75,Country 39449,City,75,Country 39452,City,75,Country 39454,City,75,Country 39455,City,75,Country 39456,City,75,Country 39459,City,75,Country 39486,City,75,Country 39501,City,75,Country 39598,City,75,Country 39606,City,75,Country 39639,City,75,Country 39644,City,75,Country 39646,City,75,Country 39647,City,75,Country 39648,City,75,Country 39656,City,75,Country 39657,City,75,Country 39793,City,75,Country 39814,City,75,Country 39817,City,75,Country 39820,City,75,Country 39841,City,75,Country 39874,City,75,Country 39904,City,75,Country 39917,City,75,Country 39971,City,75,Country 39984,City,75,Country 39989,City,75,Country 40052,City,75,Country 40057,City,75,Country 40072,City,75,Country 40065,City,75,Country 40067,City,75,Country 40088,City,75,Country 40178,City,75,Country 40211,City,75,Country 40219,City,75,Country 40254,City,75,Country 40270,City,75,Country 40310,City,75,Country 40405,City,75,Country 40642,City,75,Country 41400,City,75,Country 40670,City,75,Country 40675,City,75,Country 40696,City,75,Country 40698,City,75,Country 40934,City,75,Country 40724,City,75,Country 40726,City,75,Country 40736,City,75,Country 40739,City,75,Country 40741,City,75,Country 40745,City,75,Country 40746,City,75,Country 40750,City,75,Country 40754,City,75,Country 40773,City,75,Country 40792,City,75,Country 40810,City,75,Country 40811,City,75,Country 40814,City,75,Country 40815,City,75,Country 40937,City,75,Country 40989,City,75,Country 40990,City,75,Country 40994,City,75,Country 40998,City,75,Country 41005,City,75,Country 40839,City,75,Country 40840,City,75,Country 40852,City,75,Country 40870,City,75,Country 40878,City,75,Country 40877,City,75,Country 41016,City,75,Country 40896,City,75,Country 41009,City,75,Country 40919,City,75,Country 41027,City,75,Country 41037,City,75,Country 41040,City,75,Country 41051,City,75,Country 41063,City,75,Country 41102,City,75,Country 41167,City,75,Country 41169,City,75,Country 41199,City,75,Country 41208,City,75,Country 41216,City,75,Country 41217,City,75,Country 41229,City,75,Country 41244,City,75,Country 41253,City,75,Country 41275,City,75,Country 41280,City,75,Country 41301,City,75,Country 41353,City,75,Country 41321,City,75,Country 41368,City,75,Country 41369,City,75,Country 41376,City,75,Country 41406,City,75,Country 41417,City,75,Country 41418,City,75,Country 41421,City,75,Country 41422,City,75,Country 41424,City,75,Country 41427,City,75,Country 41429,City,75,Country 41438,City,75,Country 41447,City,75,Country 41448,City,75,Country 41449,City,75,Country 41623,City,75,Country 41626,City,75,Country 41629,City,75,Country 41632,City,75,Country 41607,City,75,Country 41460,City,75,Country 41476,City,75,Country 41479,City,75,Country 41481,City,75,Country 41504,City,75,Country 41536,City,75,Country 41542,City,75,Country 41547,City,75,Country 41565,City,75,Country 48040,City,75,Country 48044,City,75,Country 48055,City,75,Country 48060,City,75,Country 48075,City,75,Country 48077,City,75,Country 41725,City,75,Country 48094,City,75,Country 48097,City,75,Country 48115,City,75,Country 41749,City,75,Country 41784,City,75,Country 42003,City,75,Country 41807,City,75,Country 41841,City,75,Country 41848,City,75,Country 41857,City,75,Country 41884,City,75,Country 41885,City,75,Country 41888,City,75,Country 41922,City,75,Country 41925,City,75,Country 41934,City,75,Country 41942,City,75,Country 41943,City,75,Country 41951,City,75,Country 41953,City,75,Country 41968,City,75,Country 41979,City,75,Country 42035,City,75,Country 42295,City,75,Country 42066,City,75,Country 42074,City,75,Country 42082,City,75,Country 42094,City,75,Country 42101,City,75,Country 42110,City,75,Country 42171,City,75,Country 42177,City,75,Country 42180,City,75,Country 42192,City,75,Country 42193,City,75,Country 42222,City,75,Country 42288,City,75,Country 42248,City,75,Country 42275,City,75,Country 42292,City,75,Country 42353,City,75,Country 42457,City,75,Country 42459,City,75,Country 42463,City,75,Country 42444,City,75,Country 42484,City,75,Country 42497,City,75,Country 42552,City,75,Country 42556,City,75,Country 42569,City,75,Country 42571,City,75,Country 42593,City,75,Country 42596,City,75,Country 42691,City,75,Country 42702,City,75,Country 42709,City,75,Country 42711,City,75,Country 42796,City,75,Country 42814,City,75,Country 42855,City,75,Country 42951,City,75,Country 42982,City,75,Country 43074,City,75,Country 43110,City,75,Country 43144,City,75,Country 43175,City,75,Country 43298,City,75,Country 43354,City,75,Country 43387,City,75,Country 43389,City,75,Country 43426,City,75,Country 43452,City,75,Country 43479,City,75,Country 43553,City,75,Country 43554,City,75,Country 43555,City,75,Country 43574,City,75,Country 43577,City,75,Country 43591,City,75,Country 43596,City,75,Country 43603,City,75,Country 43634,City,75,Country 43659,City,75,Country 43668,City,75,Country 43674,City,75,Country 44451,City,75,Country 43724,City,75,Country 43725,City,75,Country 43982,City,75,Country 43735,City,75,Country 43753,City,75,Country 43770,City,75,Country 43774,City,75,Country 43802,City,75,Country 43808,City,75,Country 43857,City,75,Country 43861,City,75,Country 43879,City,75,Country 43925,City,75,Country 43938,City,75,Country 43941,City,75,Country 44461,City,75,Country 43996,City,75,Country 44010,City,75,Country 44021,City,75,Country 44037,City,75,Country 44050,City,75,Country 44487,City,75,Country 44068,City,75,Country 44093,City,75,Country 44103,City,75,Country 44114,City,75,Country 44336,City,75,Country 44163,City,75,Country 44190,City,75,Country 44204,City,75,Country 44206,City,75,Country 44207,City,75,Country 44208,City,75,Country 44220,City,75,Country 44230,City,75,Country 44236,City,75,Country 44270,City,75,Country 44289,City,75,Country 44302,City,75,Country 44314,City,75,Country 44344,City,75,Country 44351,City,75,Country 44364,City,75,Country 44374,City,75,Country 44376,City,75,Country 44383,City,75,Country 44395,City,75,Country 44500,City,75,Country 44523,City,75,Country 44550,City,75,Country 44577,City,75,Country 44580,City,75,Country 44583,City,75,Country 44622,City,75,Country 44633,City,75,Country 44637,City,75,Country 44667,City,75,Country 44688,City,75,Country 44718,City,75,Country 44757,City,75,Country 44758,City,75,Country 44761,City,75,Country 44780,City,75,Country 44804,City,75,Country 44808,City,75,Country 44837,City,75,Country 44848,City,75,Country 44858,City,75,Country 44888,City,75,Country 44900,City,75,Country 44904,City,75,Country 44905,City,75,Country 44913,City,75,Country 44917,City,75,Country 44952,City,75,Country 44957,City,75,Country 44977,City,75,Country 44998,City,75,Country 44999,City,75,Country 45037,City,75,Country 45142,City,75,Country 45181,City,75,Country 45193,City,75,Country 45200,City,75,Country 45201,City,75,Country 45237,City,75,Country 45250,City,75,Country 45251,City,75,Country 45253,City,75,Country 45257,City,75,Country 45265,City,75,Country 45309,City,75,Country 45290,City,75,Country 45330,City,75,Country 45380,City,75,Country 45392,City,75,Country 45397,City,75,Country 45435,City,75,Country 45522,City,75,Country 45541,City,75,Country 45576,City,75,Country 45578,City,75,Country 45583,City,75,Country 45622,City,75,Country 45623,City,75,Country 45631,City,75,Country 45649,City,75,Country 45664,City,75,Country 45669,City,75,Country 45712,City,75,Country 45743,City,75,Country 45752,City,75,Country 45774,City,75,Country 45780,City,75,Country 45809,City,75,Country 45813,City,75,Country 45831,City,75,Country 45866,City,75,Country 45870,City,75,Country 46636,City,75,Country 45928,City,75,Country 45929,City,75,Country 45937,City,75,Country 45957,City,75,Country 45988,City,75,Country 45993,City,75,Country 46009,City,75,Country 46011,City,75,Country 46069,City,75,Country 46093,City,75,Country 46134,City,75,Country 46142,City,75,Country 46186,City,75,Country 46212,City,75,Country 46218,City,75,Country 46192,City,75,Country 46201,City,75,Country 46206,City,75,Country 46243,City,75,Country 46259,City,75,Country 46291,City,75,Country 46296,City,75,Country 46396,City,75,Country 46449,City,75,Country 46508,City,75,Country 46530,City,75,Country 46549,City,75,Country 46592,City,75,Country 46593,City,75,Country 46601,City,75,Country 46598,City,75,Country 46619,City,75,Country 46628,City,75,Country 46730,City,75,Country 46742,City,75,Country 46755,City,75,Country 46784,City,75,Country 46782,City,75,Country 46800,City,75,Country 46893,City,75,Country 46826,City,75,Country 46841,City,75,Country 46866,City,75,Country 46881,City,75,Country 46896,City,75,Country 46918,City,75,Country 46932,City,75,Country 46933,City,75,Country 46938,City,75,Country 46941,City,75,Country 46942,City,75,Country 46945,City,75,Country 46954,City,75,Country 46958,City,75,Country 46965,City,75,Country 46978,City,75,Country 46980,City,75,Country 47000,City,75,Country 47014,City,75,Country 47049,City,75,Country 47061,City,75,Country 47156,City,75,Country 47161,City,75,Country 47171,City,75,Country 47190,City,75,Country 47210,City,75,Country 47238,City,75,Country 47250,City,75,Country 47297,City,75,Country 47300,City,75,Country 47307,City,75,Country 47314,City,75,Country 47329,City,75,Country 47436,City,75,Country 47460,City,75,Country 47468,City,75,Country 47469,City,75,Country 47477,City,75,Country 47482,City,75,Country 47513,City,75,Country 47511,City,75,Country 47512,City,75,Country 47519,City,75,Country 47523,City,75,Country 47559,City,75,Country 47563,City,75,Country 47586,City,75,Country 47592,City,75,Country 47595,City,75,Country 47598,City,75,Country 47605,City,75,Country 47930,City,75,Country 47648,City,75,Country 47689,City,75,Country 47723,City,75,Country 47774,City,75,Country 47785,City,75,Country 47805,City,75,Country 47811,City,75,Country 47848,City,75,Country 47860,City,75,Country 47877,City,75,Country 47907,City,75,Country 39254,City,75,Country 39318,City,75,Country 39345,City,75,Country 39356,City,75,Country 39436,City,75,Country 39485,City,75,Country 39510,City,75,Country 39534,City,75,Country 39536,City,75,Country 39597,City,75,Country 39604,City,75,Country 39623,City,75,Country 39703,City,75,Country 39716,City,75,Country 39717,City,75,Country 39732,City,75,Country 39736,City,75,Country 39738,City,75,Country 39747,City,75,Country 39760,City,75,Country 39808,City,75,Country 39813,City,75,Country 39834,City,75,Country 39844,City,75,Country 40415,City,75,Country 40417,City,75,Country 40418,City,75,Country 39900,City,75,Country 39910,City,75,Country 39937,City,75,Country 40425,City,75,Country 39958,City,75,Country 39961,City,75,Country 39962,City,75,Country 39987,City,75,Country 39994,City,75,Country 40016,City,75,Country 40026,City,75,Country 40078,City,75,Country 40082,City,75,Country 40092,City,75,Country 40120,City,75,Country 40182,City,75,Country 40188,City,75,Country 40193,City,75,Country 40198,City,75,Country 40253,City,75,Country 40260,City,75,Country 40354,City,75,Country 40357,City,75,Country 40272,City,75,Country 40359,City,75,Country 40279,City,75,Country 40280,City,75,Country 40307,City,75,Country 40333,City,75,Country 40352,City,75,Country 40367,City,75,Country 40452,City,75,Country 40471,City,75,Country 40482,City,75,Country 40495,City,75,Country 40503,City,75,Country 40504,City,75,Country 40535,City,75,Country 40542,City,75,Country 40544,City,75,Country 40550,City,75,Country 40553,City,75,Country 40573,City,75,Country 40601,City,75,Country 40606,City,75,Country 40619,City,75,Country 40661,City,75,Country 40770,City,75,Country 40774,City,75,Country 40820,City,75,Country 40823,City,75,Country 40951,City,75,Country 40956,City,75,Country 40957,City,75,Country 40966,City,75,Country 40963,City,75,Country 40996,City,75,Country 41004,City,75,Country 40855,City,75,Country 40884,City,75,Country 40891,City,75,Country 41024,City,75,Country 41067,City,75,Country 41068,City,75,Country 41069,City,75,Country 41070,City,75,Country 41057,City,75,Country 41058,City,75,Country 41291,City,75,Country 41292,City,75,Country 41107,City,75,Country 41110,City,75,Country 41112,City,75,Country 41127,City,75,Country 41160,City,75,Country 41177,City,75,Country 41200,City,75,Country 41204,City,75,Country 41294,City,75,Country 41343,City,75,Country 41346,City,75,Country 41314,City,75,Country 41334,City,75,Country 41412,City,75,Country 41431,City,75,Country 41604,City,75,Country 41635,City,75,Country 41640,City,75,Country 41482,City,75,Country 41483,City,75,Country 41488,City,75,Country 41486,City,75,Country 41491,City,75,Country 41503,City,75,Country 41509,City,75,Country 41510,City,75,Country 41546,City,75,Country 41659,City,75,Country 41663,City,75,Country 41665,City,75,Country 41687,City,75,Country 41690,City,75,Country 41692,City,75,Country 41693,City,75,Country 41694,City,75,Country 41695,City,75,Country 41700,City,75,Country 41722,City,75,Country 48090,City,75,Country 48101,City,75,Country 48108,City,75,Country 48121,City,75,Country 42004,City,75,Country 41923,City,75,Country 41927,City,75,Country 41928,City,75,Country 41983,City,75,Country 42057,City,75,Country 42079,City,75,Country 42301,City,75,Country 42114,City,75,Country 42141,City,75,Country 42143,City,75,Country 42145,City,75,Country 42146,City,75,Country 42147,City,75,Country 42161,City,75,Country 42151,City,75,Country 42162,City,75,Country 42232,City,75,Country 42170,City,75,Country 42174,City,75,Country 42221,City,75,Country 42278,City,75,Country 42281,City,75,Country 42240,City,75,Country 42283,City,75,Country 42242,City,75,Country 42243,City,75,Country 42245,City,75,Country 42252,City,75,Country 42253,City,75,Country 42254,City,75,Country 42255,City,75,Country 42258,City,75,Country 42260,City,75,Country 42262,City,75,Country 42263,City,75,Country 42264,City,75,Country 42265,City,75,Country 42266,City,75,Country 42267,City,75,Country 42269,City,75,Country 42271,City,75,Country 42324,City,75,Country 42449,City,75,Country 42452,City,75,Country 42368,City,75,Country 42454,City,75,Country 42370,City,75,Country 42395,City,75,Country 42400,City,75,Country 42466,City,75,Country 42435,City,75,Country 42471,City,75,Country 42490,City,75,Country 42495,City,75,Country 42496,City,75,Country 42529,City,75,Country 42544,City,75,Country 42564,City,75,Country 42581,City,75,Country 42608,City,75,Country 42609,City,75,Country 42610,City,75,Country 42612,City,75,Country 42652,City,75,Country 42651,City,75,Country 42693,City,75,Country 42681,City,75,Country 42690,City,75,Country 42731,City,75,Country 42750,City,75,Country 42751,City,75,Country 42757,City,75,Country 42760,City,75,Country 42770,City,75,Country 42775,City,75,Country 42821,City,75,Country 42823,City,75,Country 42812,City,75,Country 42846,City,75,Country 42852,City,75,Country 42853,City,75,Country 42899,City,75,Country 42919,City,75,Country 42970,City,75,Country 42985,City,75,Country 42993,City,75,Country 42994,City,75,Country 42997,City,75,Country 43000,City,75,Country 43015,City,75,Country 43016,City,75,Country 43017,City,75,Country 43001,City,75,Country 43003,City,75,Country 43018,City,75,Country 43007,City,75,Country 43011,City,75,Country 43013,City,75,Country 43014,City,75,Country 43019,City,75,Country 43024,City,75,Country 43027,City,75,Country 43029,City,75,Country 43032,City,75,Country 43033,City,75,Country 43034,City,75,Country 43036,City,75,Country 43037,City,75,Country 43041,City,75,Country 43043,City,75,Country 43044,City,75,Country 43048,City,75,Country 43052,City,75,Country 43054,City,75,Country 43055,City,75,Country 43053,City,75,Country 43072,City,75,Country 43073,City,75,Country 43088,City,75,Country 43134,City,75,Country 43170,City,75,Country 43182,City,75,Country 43183,City,75,Country 43184,City,75,Country 43192,City,75,Country 43189,City,75,Country 43233,City,75,Country 43243,City,75,Country 43253,City,75,Country 43293,City,75,Country 43295,City,75,Country 43302,City,75,Country 43311,City,75,Country 43325,City,75,Country 43333,City,75,Country 43336,City,75,Country 43682,City,75,Country 43686,City,75,Country 43375,City,75,Country 43437,City,75,Country 43696,City,75,Country 43474,City,75,Country 43491,City,75,Country 43522,City,75,Country 43528,City,75,Country 43529,City,75,Country 43530,City,75,Country 43531,City,75,Country 43534,City,75,Country 43533,City,75,Country 43535,City,75,Country 43539,City,75,Country 43583,City,75,Country 43582,City,75,Country 43587,City,75,Country 43598,City,75,Country 43599,City,75,Country 43602,City,75,Country 43616,City,75,Country 43617,City,75,Country 43623,City,75,Country 43645,City,75,Country 43981,City,75,Country 43749,City,75,Country 43757,City,75,Country 43758,City,75,Country 43914,City,75,Country 43924,City,75,Country 43940,City,75,Country 43951,City,75,Country 43957,City,75,Country 43965,City,75,Country 44459,City,75,Country 43988,City,75,Country 43992,City,75,Country 43993,City,75,Country 43994,City,75,Country 43997,City,75,Country 44466,City,75,Country 44015,City,75,Country 44016,City,75,Country 44028,City,75,Country 44032,City,75,Country 44044,City,75,Country 44072,City,75,Country 44081,City,75,Country 44082,City,75,Country 44427,City,75,Country 44121,City,75,Country 44184,City,75,Country 44221,City,75,Country 44223,City,75,Country 44242,City,75,Country 44245,City,75,Country 44311,City,75,Country 44312,City,75,Country 44313,City,75,Country 44345,City,75,Country 44347,City,75,Country 44378,City,75,Country 44357,City,75,Country 44410,City,75,Country 44493,City,75,Country 44450,City,75,Country 44498,City,75,Country 44556,City,75,Country 44697,City,75,Country 44603,City,75,Country 44647,City,75,Country 44662,City,75,Country 44669,City,75,Country 44670,City,75,Country 44671,City,75,Country 44766,City,75,Country 44791,City,75,Country 44823,City,75,Country 44825,City,75,Country 44829,City,75,Country 44830,City,75,Country 44841,City,75,Country 44854,City,75,Country 45342,City,75,Country 45344,City,75,Country 44881,City,75,Country 44890,City,75,Country 45348,City,75,Country 44894,City,75,Country 44906,City,75,Country 44976,City,75,Country 44980,City,75,Country 44987,City,75,Country 44990,City,75,Country 44992,City,75,Country 45000,City,75,Country 45001,City,75,Country 45003,City,75,Country 45116,City,75,Country 45118,City,75,Country 45117,City,75,Country 45119,City,75,Country 45120,City,75,Country 45006,City,75,Country 45121,City,75,Country 45122,City,75,Country 45123,City,75,Country 45124,City,75,Country 45125,City,75,Country 45127,City,75,Country 45126,City,75,Country 45007,City,75,Country 45128,City,75,Country 45008,City,75,Country 45009,City,75,Country 45010,City,75,Country 45012,City,75,Country 45013,City,75,Country 45014,City,75,Country 45015,City,75,Country 45016,City,75,Country 45017,City,75,Country 45018,City,75,Country 45019,City,75,Country 45021,City,75,Country 45022,City,75,Country 45023,City,75,Country 45024,City,75,Country 45025,City,75,Country 45026,City,75,Country 45027,City,75,Country 45028,City,75,Country 45030,City,75,Country 45031,City,75,Country 45100,City,75,Country 45032,City,75,Country 45101,City,75,Country 45129,City,75,Country 45102,City,75,Country 45033,City,75,Country 45034,City,75,Country 45035,City,75,Country 45038,City,75,Country 45039,City,75,Country 45040,City,75,Country 45041,City,75,Country 45042,City,75,Country 45044,City,75,Country 45043,City,75,Country 45045,City,75,Country 45046,City,75,Country 45047,City,75,Country 45048,City,75,Country 45049,City,75,Country 45050,City,75,Country 45051,City,75,Country 45052,City,75,Country 45053,City,75,Country 45054,City,75,Country 45097,City,75,Country 45094,City,75,Country 45095,City,75,Country 45098,City,75,Country 45055,City,75,Country 45096,City,75,Country 45056,City,75,Country 45057,City,75,Country 45058,City,75,Country 45059,City,75,Country 45060,City,75,Country 45061,City,75,Country 45062,City,75,Country 45063,City,75,Country 45064,City,75,Country 45065,City,75,Country 45066,City,75,Country 45067,City,75,Country 45068,City,75,Country 45069,City,75,Country 45070,City,75,Country 45071,City,75,Country 45072,City,75,Country 45073,City,75,Country 45074,City,75,Country 45075,City,75,Country 45076,City,75,Country 45077,City,75,Country 45078,City,75,Country 45079,City,75,Country 45080,City,75,Country 45081,City,75,Country 45082,City,75,Country 45083,City,75,Country 45084,City,75,Country 45085,City,75,Country 45086,City,75,Country 45087,City,75,Country 45088,City,75,Country 45089,City,75,Country 45090,City,75,Country 45091,City,75,Country 45092,City,75,Country 45093,City,75,Country 45099,City,75,Country 45103,City,75,Country 45104,City,75,Country 45105,City,75,Country 45106,City,75,Country 45107,City,75,Country 45111,City,75,Country 45108,City,75,Country 45109,City,75,Country 45110,City,75,Country 45112,City,75,Country 45113,City,75,Country 45114,City,75,Country 45115,City,75,Country 45130,City,75,Country 45148,City,75,Country 45149,City,75,Country 45150,City,75,Country 45165,City,75,Country 45166,City,75,Country 45189,City,75,Country 45176,City,75,Country 45211,City,75,Country 45217,City,75,Country 45222,City,75,Country 45225,City,75,Country 45228,City,75,Country 45259,City,75,Country 45260,City,75,Country 45262,City,75,Country 45263,City,75,Country 45277,City,75,Country 45293,City,75,Country 45406,City,75,Country 45407,City,75,Country 45408,City,75,Country 45373,City,75,Country 45376,City,75,Country 45378,City,75,Country 45379,City,75,Country 45409,City,75,Country 45410,City,75,Country 45384,City,75,Country 45389,City,75,Country 45390,City,75,Country 45401,City,75,Country 45403,City,75,Country 45429,City,75,Country 45685,City,75,Country 45443,City,75,Country 45688,City,75,Country 45460,City,75,Country 45468,City,75,Country 45488,City,75,Country 45499,City,75,Country 45504,City,75,Country 45561,City,75,Country 45572,City,75,Country 45581,City,75,Country 45598,City,75,Country 45599,City,75,Country 45608,City,75,Country 45609,City,75,Country 45611,City,75,Country 45650,City,75,Country 45651,City,75,Country 45665,City,75,Country 45728,City,75,Country 45734,City,75,Country 45775,City,75,Country 45786,City,75,Country 45799,City,75,Country 45802,City,75,Country 45822,City,75,Country 45824,City,75,Country 45827,City,75,Country 45830,City,75,Country 45833,City,75,Country 45839,City,75,Country 45840,City,75,Country 45842,City,75,Country 45876,City,75,Country 45906,City,75,Country 45914,City,75,Country 45915,City,75,Country 45916,City,75,Country 45921,City,75,Country 46656,City,75,Country 46659,City,75,Country 45979,City,75,Country 46014,City,75,Country 46032,City,75,Country 46035,City,75,Country 46040,City,75,Country 46042,City,75,Country 46073,City,75,Country 46075,City,75,Country 46077,City,75,Country 46084,City,75,Country 46115,City,75,Country 46119,City,75,Country 46131,City,75,Country 46135,City,75,Country 46152,City,75,Country 46205,City,75,Country 46229,City,75,Country 46240,City,75,Country 46284,City,75,Country 46304,City,75,Country 46351,City,75,Country 46352,City,75,Country 46353,City,75,Country 46368,City,75,Country 46371,City,75,Country 46380,City,75,Country 46386,City,75,Country 46477,City,75,Country 46422,City,75,Country 46426,City,75,Country 46433,City,75,Country 46430,City,75,Country 46455,City,75,Country 46483,City,75,Country 46484,City,75,Country 46495,City,75,Country 46517,City,75,Country 46535,City,75,Country 46547,City,75,Country 46565,City,75,Country 46584,City,75,Country 46581,City,75,Country 46582,City,75,Country 46583,City,75,Country 46591,City,75,Country 46618,City,75,Country 46632,City,75,Country 46664,City,75,Country 46698,City,75,Country 46707,City,75,Country 46797,City,75,Country 46824,City,75,Country 46894,City,75,Country 47140,City,75,Country 46946,City,75,Country 47142,City,75,Country 46974,City,75,Country 47148,City,75,Country 46988,City,75,Country 47011,City,75,Country 47012,City,75,Country 47096,City,75,Country 47115,City,75,Country 47125,City,75,Country 47154,City,75,Country 47163,City,75,Country 47186,City,75,Country 47187,City,75,Country 47195,City,75,Country 47221,City,75,Country 47290,City,75,Country 47298,City,75,Country 47301,City,75,Country 47390,City,75,Country 47391,City,75,Country 47392,City,75,Country 47351,City,75,Country 47352,City,75,Country 47393,City,75,Country 47394,City,75,Country 47395,City,75,Country 47400,City,75,Country 47398,City,75,Country 47357,City,75,Country 47404,City,75,Country 47403,City,75,Country 47360,City,75,Country 47409,City,75,Country 47407,City,75,Country 47504,City,75,Country 47607,City,75,Country 47657,City,75,Country 47698,City,75,Country 47876,City,75,Country 48006,City,75,Country 48017,City,75,Country 39237,City,75,Country 39244,City,75,Country 39279,City,75,Country 39351,City,75,Country 39355,City,75,Country 39365,City,75,Country 39394,City,75,Country 39467,City,75,Country 39478,City,75,Country 39483,City,75,Country 39492,City,75,Country 39512,City,75,Country 39518,City,75,Country 39521,City,75,Country 39524,City,75,Country 39541,City,75,Country 39559,City,75,Country 39582,City,75,Country 39618,City,75,Country 39620,City,75,Country 39636,City,75,Country 39638,City,75,Country 39654,City,75,Country 39675,City,75,Country 39677,City,75,Country 39693,City,75,Country 39694,City,75,Country 39695,City,75,Country 39698,City,75,Country 39723,City,75,Country 39722,City,75,Country 39752,City,75,Country 39786,City,75,Country 39809,City,75,Country 39811,City,75,Country 39832,City,75,Country 39848,City,75,Country 39851,City,75,Country 39867,City,75,Country 39868,City,75,Country 39875,City,75,Country 40422,City,75,Country 39912,City,75,Country 39924,City,75,Country 40435,City,75,Country 40053,City,75,Country 40076,City,75,Country 40069,City,75,Country 40083,City,75,Country 40091,City,75,Country 40124,City,75,Country 40129,City,75,Country 40170,City,75,Country 40199,City,75,Country 40206,City,75,Country 40237,City,75,Country 40241,City,75,Country 40247,City,75,Country 40267,City,75,Country 40299,City,75,Country 40301,City,75,Country 40304,City,75,Country 40317,City,75,Country 40334,City,75,Country 40438,City,75,Country 40406,City,75,Country 40508,City,75,Country 40511,City,75,Country 40635,City,75,Country 40640,City,75,Country 40643,City,75,Country 40644,City,75,Country 40672,City,75,Country 40676,City,75,Country 40678,City,75,Country 40683,City,75,Country 40932,City,75,Country 40710,City,75,Country 40711,City,75,Country 40737,City,75,Country 40757,City,75,Country 40762,City,75,Country 40767,City,75,Country 40778,City,75,Country 40796,City,75,Country 40797,City,75,Country 40799,City,75,Country 40936,City,75,Country 40819,City,75,Country 40949,City,75,Country 40943,City,75,Country 40944,City,75,Country 40953,City,75,Country 40958,City,75,Country 40967,City,75,Country 40972,City,75,Country 40974,City,75,Country 40978,City,75,Country 40993,City,75,Country 41000,City,75,Country 41002,City,75,Country 41008,City,75,Country 40837,City,75,Country 40845,City,75,Country 40846,City,75,Country 41010,City,75,Country 40868,City,75,Country 40880,City,75,Country 40882,City,75,Country 40895,City,75,Country 40898,City,75,Country 40899,City,75,Country 40907,City,75,Country 40912,City,75,Country 40916,City,75,Country 40917,City,75,Country 40928,City,75,Country 40927,City,75,Country 41021,City,75,Country 41032,City,75,Country 41075,City,75,Country 41074,City,75,Country 41055,City,75,Country 41061,City,75,Country 41062,City,75,Country 41156,City,75,Country 41165,City,75,Country 41182,City,75,Country 41183,City,75,Country 41201,City,75,Country 41231,City,75,Country 41234,City,75,Country 41240,City,75,Country 41263,City,75,Country 41268,City,75,Country 41272,City,75,Country 41361,City,75,Country 41403,City,75,Country 41414,City,75,Country 41419,City,75,Country 41437,City,75,Country 41602,City,75,Country 41603,City,75,Country 41605,City,75,Country 41619,City,75,Country 41641,City,75,Country 41455,City,75,Country 41464,City,75,Country 41533,City,75,Country 41538,City,75,Country 41548,City,75,Country 41574,City,75,Country 41577,City,75,Country 41576,City,75,Country 41582,City,75,Country 41590,City,75,Country 48053,City,75,Country 48062,City,75,Country 48074,City,75,Country 48076,City,75,Country 41739,City,75,Country 41785,City,75,Country 41787,City,75,Country 42006,City,75,Country 41849,City,75,Country 41941,City,75,Country 41873,City,75,Country 41879,City,75,Country 41903,City,75,Country 41995,City,75,Country 42021,City,75,Country 42046,City,75,Country 42051,City,75,Country 42065,City,75,Country 42087,City,75,Country 42088,City,75,Country 42112,City,75,Country 42194,City,75,Country 42322,City,75,Country 42369,City,75,Country 42371,City,75,Country 42384,City,75,Country 42437,City,75,Country 42438,City,75,Country 42439,City,75,Country 42489,City,75,Country 42507,City,75,Country 42527,City,75,Country 42532,City,75,Country 42579,City,75,Country 42568,City,75,Country 42572,City,75,Country 42577,City,75,Country 42628,City,75,Country 42638,City,75,Country 42671,City,75,Country 42696,City,75,Country 42688,City,75,Country 42689,City,75,Country 42701,City,75,Country 42707,City,75,Country 42704,City,75,Country 42724,City,75,Country 42739,City,75,Country 42742,City,75,Country 42795,City,75,Country 42804,City,75,Country 42847,City,75,Country 42912,City,75,Country 42913,City,75,Country 42952,City,75,Country 42969,City,75,Country 42992,City,75,Country 43022,City,75,Country 43083,City,75,Country 43130,City,75,Country 43168,City,75,Country 43172,City,75,Country 43198,City,75,Country 43289,City,75,Country 43271,City,75,Country 43691,City,75,Country 43358,City,75,Country 43410,City,75,Country 43680,City,75,Country 43451,City,75,Country 43453,City,75,Country 43476,City,75,Country 43480,City,75,Country 43482,City,75,Country 43483,City,75,Country 43527,City,75,Country 43542,City,75,Country 43595,City,75,Country 43610,City,75,Country 43627,City,75,Country 43675,City,75,Country 43638,City,75,Country 43644,City,75,Country 43651,City,75,Country 43655,City,75,Country 43657,City,75,Country 43669,City,75,Country 43739,City,75,Country 43740,City,75,Country 43756,City,75,Country 43786,City,75,Country 43794,City,75,Country 43805,City,75,Country 43818,City,75,Country 43819,City,75,Country 43829,City,75,Country 43836,City,75,Country 43843,City,75,Country 43858,City,75,Country 43920,City,75,Country 43931,City,75,Country 43976,City,75,Country 43985,City,75,Country 44464,City,75,Country 44000,City,75,Country 44009,City,75,Country 44469,City,75,Country 44039,City,75,Country 44047,City,75,Country 44488,City,75,Country 44489,City,75,Country 44138,City,75,Country 44144,City,75,Country 44162,City,75,Country 44179,City,75,Country 44193,City,75,Country 44211,City,75,Country 44248,City,75,Country 44254,City,75,Country 44274,City,75,Country 44275,City,75,Country 44293,City,75,Country 44317,City,75,Country 44327,City,75,Country 44339,City,75,Country 44379,City,75,Country 44431,City,75,Country 44438,City,75,Country 44515,City,75,Country 44522,City,75,Country 44526,City,75,Country 44696,City,75,Country 44554,City,75,Country 44557,City,75,Country 44565,City,75,Country 44578,City,75,Country 44575,City,75,Country 44576,City,75,Country 44579,City,75,Country 44584,City,75,Country 44599,City,75,Country 44611,City,75,Country 44612,City,75,Country 44613,City,75,Country 44618,City,75,Country 44632,City,75,Country 44658,City,75,Country 44663,City,75,Country 44679,City,75,Country 44733,City,75,Country 44746,City,75,Country 44767,City,75,Country 44774,City,75,Country 44776,City,75,Country 44787,City,75,Country 44802,City,75,Country 44806,City,75,Country 44812,City,75,Country 44815,City,75,Country 44816,City,75,Country 44817,City,75,Country 44844,City,75,Country 44860,City,75,Country 44866,City,75,Country 44907,City,75,Country 44962,City,75,Country 44984,City,75,Country 44985,City,75,Country 44989,City,75,Country 45131,City,75,Country 45134,City,75,Country 45212,City,75,Country 45261,City,75,Country 45284,City,75,Country 45301,City,75,Country 45320,City,75,Country 45385,City,75,Country 45440,City,75,Country 45447,City,75,Country 45465,City,75,Country 45472,City,75,Country 45473,City,75,Country 45487,City,75,Country 45496,City,75,Country 45543,City,75,Country 45582,City,75,Country 45644,City,75,Country 45706,City,75,Country 45732,City,75,Country 45741,City,75,Country 45742,City,75,Country 45772,City,75,Country 45783,City,75,Country 45797,City,75,Country 45800,City,75,Country 45812,City,75,Country 45821,City,75,Country 45832,City,75,Country 45859,City,75,Country 45867,City,75,Country 45884,City,75,Country 45887,City,75,Country 45900,City,75,Country 45902,City,75,Country 45917,City,75,Country 45919,City,75,Country 46637,City,75,Country 46640,City,75,Country 46644,City,75,Country 45936,City,75,Country 45952,City,75,Country 45989,City,75,Country 45990,City,75,Country 46008,City,75,Country 46013,City,75,Country 46028,City,75,Country 46053,City,75,Country 46089,City,75,Country 46105,City,75,Country 46116,City,75,Country 46174,City,75,Country 46202,City,75,Country 46244,City,75,Country 46294,City,75,Country 46275,City,75,Country 46300,City,75,Country 46303,City,75,Country 46309,City,75,Country 46320,City,75,Country 46363,City,75,Country 46377,City,75,Country 46399,City,75,Country 46479,City,75,Country 46427,City,75,Country 46435,City,75,Country 46463,City,75,Country 46475,City,75,Country 46515,City,75,Country 46506,City,75,Country 46518,City,75,Country 46562,City,75,Country 46622,City,75,Country 46692,City,75,Country 46702,City,75,Country 46717,City,75,Country 46727,City,75,Country 46743,City,75,Country 46781,City,75,Country 46783,City,75,Country 46786,City,75,Country 46801,City,75,Country 46806,City,75,Country 46855,City,75,Country 46885,City,75,Country 46878,City,75,Country 46879,City,75,Country 46882,City,75,Country 46887,City,75,Country 46920,City,75,Country 46930,City,75,Country 46931,City,75,Country 46936,City,75,Country 46937,City,75,Country 46943,City,75,Country 46956,City,75,Country 47017,City,75,Country 47041,City,75,Country 47044,City,75,Country 47047,City,75,Country 47064,City,75,Country 47085,City,75,Country 47128,City,75,Country 47114,City,75,Country 47189,City,75,Country 47193,City,75,Country 47220,City,75,Country 47272,City,75,Country 47235,City,75,Country 47237,City,75,Country 47281,City,75,Country 47327,City,75,Country 47333,City,75,Country 47339,City,75,Country 47350,City,75,Country 47405,City,75,Country 47374,City,75,Country 47384,City,75,Country 47388,City,75,Country 47428,City,75,Country 47479,City,75,Country 47525,City,75,Country 47527,City,75,Country 47555,City,75,Country 47579,City,75,Country 47578,City,75,Country 47585,City,75,Country 47928,City,75,Country 47622,City,75,Country 47624,City,75,Country 47636,City,75,Country 47684,City,75,Country 47685,City,75,Country 47700,City,75,Country 47708,City,75,Country 47721,City,75,Country 47731,City,75,Country 47732,City,75,Country 47739,City,75,Country 47749,City,75,Country 47750,City,75,Country 47831,City,75,Country 47832,City,75,Country 47839,City,75,Country 47846,City,75,Country 47871,City,75,Country 47915,City,75,Country 47917,City,75,Country 47918,City,75,Country 48023,City,75,Country 48022,City,75,Country 39256,City,75,Country 39298,City,75,Country 39300,City,75,Country 39308,City,75,Country 39343,City,75,Country 39442,City,75,Country 39804,City,75,Country 40018,City,75,Country 40114,City,75,Country 40140,City,75,Country 40252,City,75,Country 40470,City,75,Country 40479,City,75,Country 40543,City,75,Country 40611,City,75,Country 40657,City,75,Country 41205,City,75,Country 41384,City,75,Country 41625,City,75,Country 41628,City,75,Country 41818,City,75,Country 41994,City,75,Country 42084,City,75,Country 42227,City,75,Country 42629,City,75,Country 43502,City,75,Country 43631,City,75,Country 43650,City,75,Country 44252,City,75,Country 44363,City,75,Country 44732,City,75,Country 44736,City,75,Country 44893,City,75,Country 44896,City,75,Country 44966,City,75,Country 44967,City,75,Country 45245,City,75,Country 45294,City,75,Country 45300,City,75,Country 45932,City,75,Country 46778,City,75,Country 46779,City,75,Country 46795,City,75,Country 46796,City,75,Country 46807,City,75,Country 46817,City,75,Country 46823,City,75,Country 47007,City,75,Country 47588,City,75,Country 47647,City,75,Country 48028,City,75,Country 39245,City,75,Country 39249,City,75,Country 39269,City,75,Country 39293,City,75,Country 39312,City,75,Country 39313,City,75,Country 39336,City,75,Country 39338,City,75,Country 39339,City,75,Country 39346,City,75,Country 39366,City,75,Country 39367,City,75,Country 39372,City,75,Country 39374,City,75,Country 39384,City,75,Country 39385,City,75,Country 39400,City,75,Country 39426,City,75,Country 39461,City,75,Country 39462,City,75,Country 39464,City,75,Country 39466,City,75,Country 39473,City,75,Country 39515,City,75,Country 39517,City,75,Country 39545,City,75,Country 39546,City,75,Country 39547,City,75,Country 39564,City,75,Country 39587,City,75,Country 39600,City,75,Country 39601,City,75,Country 39605,City,75,Country 39616,City,75,Country 39674,City,75,Country 39683,City,75,Country 39684,City,75,Country 39686,City,75,Country 39699,City,75,Country 39704,City,75,Country 39735,City,75,Country 39737,City,75,Country 39743,City,75,Country 39749,City,75,Country 39758,City,75,Country 39761,City,75,Country 39765,City,75,Country 39766,City,75,Country 39767,City,75,Country 39790,City,75,Country 39794,City,75,Country 39795,City,75,Country 39799,City,75,Country 39805,City,75,Country 39806,City,75,Country 39821,City,75,Country 39823,City,75,Country 39826,City,75,Country 39828,City,75,Country 39899,City,75,Country 39923,City,75,Country 39925,City,75,Country 39939,City,75,Country 40424,City,75,Country 39941,City,75,Country 39946,City,75,Country 39947,City,75,Country 39950,City,75,Country 39963,City,75,Country 39965,City,75,Country 39969,City,75,Country 40431,City,75,Country 39985,City,75,Country 39986,City,75,Country 40001,City,75,Country 40011,City,75,Country 40013,City,75,Country 40014,City,75,Country 40027,City,75,Country 40031,City,75,Country 40032,City,75,Country 40033,City,75,Country 40034,City,75,Country 40035,City,75,Country 40043,City,75,Country 40045,City,75,Country 40073,City,75,Country 40074,City,75,Country 40066,City,75,Country 40068,City,75,Country 40071,City,75,Country 40439,City,75,Country 40104,City,75,Country 40106,City,75,Country 40133,City,75,Country 40158,City,75,Country 40162,City,75,Country 40163,City,75,Country 40169,City,75,Country 40176,City,75,Country 40180,City,75,Country 40203,City,75,Country 40218,City,75,Country 40231,City,75,Country 40232,City,75,Country 40233,City,75,Country 40236,City,75,Country 40298,City,75,Country 40362,City,75,Country 40308,City,75,Country 40311,City,75,Country 40345,City,75,Country 40347,City,75,Country 40348,City,75,Country 40371,City,75,Country 40377,City,75,Country 40380,City,75,Country 40389,City,75,Country 40390,City,75,Country 40396,City,75,Country 40545,City,75,Country 40548,City,75,Country 40565,City,75,Country 40599,City,75,Country 40650,City,75,Country 40652,City,75,Country 40687,City,75,Country 40690,City,75,Country 40691,City,75,Country 40933,City,75,Country 40704,City,75,Country 40734,City,75,Country 40740,City,75,Country 40759,City,75,Country 40768,City,75,Country 40777,City,75,Country 40780,City,75,Country 40802,City,75,Country 40806,City,75,Country 40942,City,75,Country 40945,City,75,Country 40979,City,75,Country 40982,City,75,Country 40983,City,75,Country 40988,City,75,Country 41003,City,75,Country 40843,City,75,Country 40860,City,75,Country 40862,City,75,Country 40873,City,75,Country 40897,City,75,Country 41026,City,75,Country 41050,City,75,Country 41060,City,75,Country 41077,City,75,Country 41096,City,75,Country 41101,City,75,Country 41121,City,75,Country 41123,City,75,Country 41143,City,75,Country 41149,City,75,Country 41157,City,75,Country 41171,City,75,Country 41184,City,75,Country 41185,City,75,Country 41195,City,75,Country 41196,City,75,Country 41209,City,75,Country 41242,City,75,Country 41250,City,75,Country 41270,City,75,Country 41345,City,75,Country 41305,City,75,Country 41312,City,75,Country 41338,City,75,Country 41382,City,75,Country 41401,City,75,Country 41402,City,75,Country 41409,City,75,Country 41410,City,75,Country 41411,City,75,Country 41428,City,75,Country 41434,City,75,Country 41435,City,75,Country 41439,City,75,Country 41613,City,75,Country 41456,City,75,Country 41458,City,75,Country 41461,City,75,Country 41462,City,75,Country 41465,City,75,Country 41467,City,75,Country 41468,City,75,Country 41470,City,75,Country 41471,City,75,Country 41472,City,75,Country 41474,City,75,Country 41475,City,75,Country 41484,City,75,Country 41487,City,75,Country 41493,City,75,Country 41498,City,75,Country 41500,City,75,Country 41501,City,75,Country 41508,City,75,Country 41514,City,75,Country 41517,City,75,Country 41518,City,75,Country 41519,City,75,Country 41529,City,75,Country 41530,City,75,Country 41540,City,75,Country 41541,City,75,Country 41544,City,75,Country 41552,City,75,Country 41561,City,75,Country 41579,City,75,Country 41581,City,75,Country 41587,City,75,Country 41593,City,75,Country 41595,City,75,Country 41599,City,75,Country 41654,City,75,Country 41655,City,75,Country 41656,City,75,Country 48052,City,75,Country 41660,City,75,Country 41661,City,75,Country 48065,City,75,Country 41668,City,75,Country 41671,City,75,Country 41676,City,75,Country 41680,City,75,Country 41683,City,75,Country 48073,City,75,Country 41686,City,75,Country 48078,City,75,Country 41697,City,75,Country 41702,City,75,Country 41703,City,75,Country 41709,City,75,Country 41710,City,75,Country 41711,City,75,Country 41726,City,75,Country 41731,City,75,Country 41734,City,75,Country 48092,City,75,Country 48104,City,75,Country 41741,City,75,Country 41743,City,75,Country 41745,City,75,Country 41746,City,75,Country 41763,City,75,Country 41764,City,75,Country 41766,City,75,Country 41770,City,75,Country 41777,City,75,Country 41776,City,75,Country 41778,City,75,Country 41779,City,75,Country 41790,City,75,Country 41791,City,75,Country 41795,City,75,Country 41997,City,75,Country 41804,City,75,Country 41808,City,75,Country 41825,City,75,Country 41831,City,75,Country 41834,City,75,Country 41846,City,75,Country 41865,City,75,Country 41856,City,75,Country 41858,City,75,Country 41861,City,75,Country 41869,City,75,Country 41871,City,75,Country 41906,City,75,Country 41908,City,75,Country 41918,City,75,Country 41924,City,75,Country 41945,City,75,Country 41986,City,75,Country 41961,City,75,Country 41964,City,75,Country 41965,City,75,Country 41970,City,75,Country 41971,City,75,Country 41980,City,75,Country 41991,City,75,Country 41993,City,75,Country 42026,City,75,Country 42028,City,75,Country 42058,City,75,Country 42299,City,75,Country 42072,City,75,Country 42076,City,75,Country 42078,City,75,Country 42081,City,75,Country 42100,City,75,Country 42107,City,75,Country 42302,City,75,Country 42117,City,75,Country 42119,City,75,Country 42126,City,75,Country 42127,City,75,Country 42135,City,75,Country 42139,City,75,Country 42183,City,75,Country 42199,City,75,Country 42201,City,75,Country 42205,City,75,Country 42206,City,75,Country 42207,City,75,Country 42223,City,75,Country 42224,City,75,Country 42239,City,75,Country 42279,City,75,Country 42282,City,75,Country 42249,City,75,Country 42250,City,75,Country 42273,City,75,Country 42274,City,75,Country 42305,City,75,Country 42306,City,75,Country 42307,City,75,Country 42309,City,75,Country 42310,City,75,Country 42318,City,75,Country 42319,City,75,Country 42323,City,75,Country 42329,City,75,Country 42335,City,75,Country 42337,City,75,Country 42340,City,75,Country 42344,City,75,Country 42360,City,75,Country 42361,City,75,Country 42450,City,75,Country 42363,City,75,Country 42364,City,75,Country 42374,City,75,Country 42381,City,75,Country 42382,City,75,Country 42383,City,75,Country 42385,City,75,Country 42465,City,75,Country 42389,City,75,Country 42396,City,75,Country 42397,City,75,Country 42401,City,75,Country 42403,City,75,Country 42404,City,75,Country 42406,City,75,Country 42407,City,75,Country 42467,City,75,Country 42468,City,75,Country 42409,City,75,Country 42410,City,75,Country 42411,City,75,Country 42414,City,75,Country 42415,City,75,Country 42418,City,75,Country 42425,City,75,Country 42433,City,75,Country 42441,City,75,Country 42442,City,75,Country 42445,City,75,Country 42446,City,75,Country 42447,City,75,Country 42473,City,75,Country 42477,City,75,Country 42480,City,75,Country 42482,City,75,Country 42483,City,75,Country 42487,City,75,Country 42491,City,75,Country 42492,City,75,Country 42494,City,75,Country 42504,City,75,Country 42513,City,75,Country 42534,City,75,Country 42536,City,75,Country 42546,City,75,Country 42547,City,75,Country 42603,City,75,Country 42553,City,75,Country 42557,City,75,Country 42567,City,75,Country 42573,City,75,Country 42604,City,75,Country 42605,City,75,Country 42623,City,75,Country 42606,City,75,Country 42607,City,75,Country 42611,City,75,Country 42613,City,75,Country 42615,City,75,Country 42616,City,75,Country 42617,City,75,Country 42618,City,75,Country 42624,City,75,Country 42619,City,75,Country 42620,City,75,Country 42621,City,75,Country 42622,City,75,Country 42653,City,75,Country 42655,City,75,Country 42687,City,75,Country 42756,City,75,Country 42849,City,75,Country 42920,City,75,Country 42921,City,75,Country 42938,City,75,Country 42981,City,75,Country 42995,City,75,Country 43010,City,75,Country 43012,City,75,Country 43020,City,75,Country 43030,City,75,Country 43062,City,75,Country 43101,City,75,Country 43102,City,75,Country 43103,City,75,Country 43121,City,75,Country 43122,City,75,Country 43124,City,75,Country 43240,City,75,Country 43231,City,75,Country 43303,City,75,Country 43313,City,75,Country 43315,City,75,Country 43345,City,75,Country 43346,City,75,Country 43689,City,75,Country 43388,City,75,Country 43394,City,75,Country 43415,City,75,Country 43423,City,75,Country 43455,City,75,Country 43457,City,75,Country 43524,City,75,Country 43473,City,75,Country 43477,City,75,Country 43501,City,75,Country 43506,City,75,Country 43515,City,75,Country 43546,City,75,Country 43556,City,75,Country 43557,City,75,Country 43558,City,75,Country 43562,City,75,Country 43573,City,75,Country 43575,City,75,Country 43593,City,75,Country 43641,City,75,Country 43648,City,75,Country 43656,City,75,Country 43663,City,75,Country 43666,City,75,Country 43667,City,75,Country 43713,City,75,Country 43718,City,75,Country 43731,City,75,Country 43736,City,75,Country 43746,City,75,Country 43747,City,75,Country 43767,City,75,Country 43772,City,75,Country 43779,City,75,Country 43790,City,75,Country 43793,City,75,Country 43810,City,75,Country 43817,City,75,Country 43826,City,75,Country 43828,City,75,Country 43842,City,75,Country 43849,City,75,Country 43854,City,75,Country 43860,City,75,Country 43863,City,75,Country 43928,City,75,Country 43942,City,75,Country 43967,City,75,Country 44456,City,75,Country 43990,City,75,Country 44014,City,75,Country 44481,City,75,Country 44019,City,75,Country 44020,City,75,Country 44026,City,75,Country 44479,City,75,Country 44034,City,75,Country 44041,City,75,Country 44042,City,75,Country 44043,City,75,Country 44051,City,75,Country 44052,City,75,Country 44054,City,75,Country 44055,City,75,Country 44094,City,75,Country 44107,City,75,Country 44126,City,75,Country 44127,City,75,Country 44135,City,75,Country 44151,City,75,Country 44157,City,75,Country 44188,City,75,Country 44203,City,75,Country 44213,City,75,Country 44250,City,75,Country 44253,City,75,Country 44262,City,75,Country 44290,City,75,Country 44285,City,75,Country 44294,City,75,Country 44337,City,75,Country 44352,City,75,Country 44366,City,75,Country 44367,City,75,Country 44380,City,75,Country 44396,City,75,Country 44402,City,75,Country 44412,City,75,Country 44419,City,75,Country 44422,City,75,Country 44423,City,75,Country 44432,City,75,Country 44433,City,75,Country 44435,City,75,Country 44436,City,75,Country 44437,City,75,Country 44446,City,75,Country 44447,City,75,Country 44448,City,75,Country 44449,City,75,Country 44501,City,75,Country 44538,City,75,Country 44540,City,75,Country 44539,City,75,Country 44543,City,75,Country 44544,City,75,Country 44560,City,75,Country 44582,City,75,Country 44588,City,75,Country 44589,City,75,Country 44590,City,75,Country 44591,City,75,Country 44592,City,75,Country 44593,City,75,Country 44600,City,75,Country 44610,City,75,Country 44617,City,75,Country 44635,City,75,Country 44636,City,75,Country 44641,City,75,Country 44644,City,75,Country 44661,City,75,Country 44664,City,75,Country 44668,City,75,Country 44702,City,75,Country 44703,City,75,Country 44704,City,75,Country 44705,City,75,Country 44706,City,75,Country 44707,City,75,Country 44708,City,75,Country 44709,City,75,Country 44710,City,75,Country 44714,City,75,Country 44716,City,75,Country 48128,City,75,Country 44719,City,75,Country 44723,City,75,Country 44755,City,75,Country 44793,City,75,Country 44795,City,75,Country 44797,City,75,Country 44798,City,75,Country 44799,City,75,Country 44800,City,75,Country 44826,City,75,Country 44852,City,75,Country 44875,City,75,Country 44889,City,75,Country 44918,City,75,Country 44920,City,75,Country 44937,City,75,Country 44938,City,75,Country 44939,City,75,Country 44940,City,75,Country 44941,City,75,Country 44943,City,75,Country 44948,City,75,Country 44961,City,75,Country 44964,City,75,Country 44965,City,75,Country 44971,City,75,Country 44991,City,75,Country 45002,City,75,Country 45029,City,75,Country 45036,City,75,Country 45155,City,75,Country 45197,City,75,Country 45172,City,75,Country 45173,City,75,Country 45209,City,75,Country 45219,City,75,Country 45226,City,75,Country 45243,City,75,Country 45267,City,75,Country 45269,City,75,Country 45292,City,75,Country 45327,City,75,Country 45328,City,75,Country 45329,City,75,Country 45416,City,75,Country 45422,City,75,Country 45424,City,75,Country 45432,City,75,Country 45686,City,75,Country 45689,City,75,Country 45691,City,75,Country 45444,City,75,Country 45445,City,75,Country 45450,City,75,Country 45451,City,75,Country 45693,City,75,Country 45694,City,75,Country 45452,City,75,Country 45461,City,75,Country 45467,City,75,Country 45469,City,75,Country 45477,City,75,Country 45478,City,75,Country 45483,City,75,Country 45490,City,75,Country 45493,City,75,Country 45497,City,75,Country 45498,City,75,Country 45500,City,75,Country 45513,City,75,Country 45514,City,75,Country 45523,City,75,Country 45534,City,75,Country 45553,City,75,Country 45556,City,75,Country 45562,City,75,Country 45567,City,75,Country 45575,City,75,Country 45577,City,75,Country 45580,City,75,Country 45600,City,75,Country 45601,City,75,Country 45603,City,75,Country 45605,City,75,Country 45610,City,75,Country 45613,City,75,Country 45619,City,75,Country 45626,City,75,Country 45655,City,75,Country 45661,City,75,Country 45671,City,75,Country 45677,City,75,Country 45678,City,75,Country 45679,City,75,Country 45680,City,75,Country 45750,City,75,Country 45753,City,75,Country 45765,City,75,Country 45798,City,75,Country 45826,City,75,Country 45913,City,75,Country 45912,City,75,Country 46657,City,75,Country 45994,City,75,Country 46068,City,75,Country 46148,City,75,Country 46147,City,75,Country 46158,City,75,Country 46172,City,75,Country 46223,City,75,Country 46196,City,75,Country 46209,City,75,Country 46321,City,75,Country 46323,City,75,Country 46328,City,75,Country 46330,City,75,Country 46340,City,75,Country 46342,City,75,Country 46356,City,75,Country 46364,City,75,Country 46397,City,75,Country 46461,City,75,Country 46471,City,75,Country 46672,City,75,Country 46673,City,75,Country 46704,City,75,Country 46710,City,75,Country 46711,City,75,Country 46716,City,75,Country 46719,City,75,Country 46725,City,75,Country 46739,City,75,Country 46785,City,75,Country 46809,City,75,Country 46811,City,75,Country 46812,City,75,Country 46813,City,75,Country 46814,City,75,Country 46815,City,75,Country 46818,City,75,Country 46839,City,75,Country 46842,City,75,Country 46843,City,75,Country 46846,City,75,Country 46849,City,75,Country 46850,City,75,Country 46853,City,75,Country 46874,City,75,Country 46897,City,75,Country 46898,City,75,Country 46899,City,75,Country 46900,City,75,Country 46901,City,75,Country 46904,City,75,Country 46902,City,75,Country 46903,City,75,Country 46908,City,75,Country 46913,City,75,Country 46916,City,75,Country 46928,City,75,Country 47136,City,75,Country 46934,City,75,Country 46944,City,75,Country 46947,City,75,Country 46975,City,75,Country 46957,City,75,Country 46976,City,75,Country 47151,City,75,Country 46989,City,75,Country 46990,City,75,Country 46993,City,75,Country 46994,City,75,Country 46996,City,75,Country 47026,City,75,Country 47059,City,75,Country 47065,City,75,Country 47066,City,75,Country 47074,City,75,Country 47075,City,75,Country 47076,City,75,Country 47077,City,75,Country 47093,City,75,Country 47097,City,75,Country 47103,City,75,Country 47104,City,75,Country 47105,City,75,Country 47106,City,75,Country 47107,City,75,Country 47108,City,75,Country 47109,City,75,Country 47110,City,75,Country 47113,City,75,Country 47117,City,75,Country 47118,City,75,Country 47119,City,75,Country 47158,City,75,Country 47159,City,75,Country 47160,City,75,Country 47204,City,75,Country 47211,City,75,Country 47214,City,75,Country 47217,City,75,Country 47219,City,75,Country 47266,City,75,Country 47231,City,75,Country 47232,City,75,Country 47234,City,75,Country 47236,City,75,Country 47289,City,75,Country 47293,City,75,Country 47309,City,75,Country 47326,City,75,Country 47334,City,75,Country 47402,City,75,Country 47362,City,75,Country 47372,City,75,Country 47380,City,75,Country 47385,City,75,Country 47386,City,75,Country 47410,City,75,Country 47415,City,75,Country 47419,City,75,Country 47422,City,75,Country 47423,City,75,Country 47426,City,75,Country 47431,City,75,Country 47432,City,75,Country 47443,City,75,Country 47446,City,75,Country 47450,City,75,Country 47453,City,75,Country 47463,City,75,Country 47481,City,75,Country 47488,City,75,Country 47496,City,75,Country 47503,City,75,Country 47508,City,75,Country 47529,City,75,Country 47553,City,75,Country 47557,City,75,Country 47558,City,75,Country 47570,City,75,Country 47572,City,75,Country 47593,City,75,Country 47626,City,75,Country 47629,City,75,Country 47643,City,75,Country 47645,City,75,Country 47646,City,75,Country 47932,City,75,Country 47669,City,75,Country 47691,City,75,Country 47695,City,75,Country 47699,City,75,Country 47702,City,75,Country 47706,City,75,Country 47837,City,75,Country 47720,City,75,Country 47757,City,75,Country 47804,City,75,Country 47806,City,75,Country 47802,City,75,Country 47812,City,75,Country 47824,City,75,Country 47827,City,75,Country 47845,City,75,Country 47858,City,75,Country 47859,City,75,Country 47873,City,75,Country 47874,City,75,Country 47878,City,75,Country 47881,City,75,Country 47891,City,75,Country 47895,City,75,Country 47896,City,75,Country 47898,City,75,Country 47904,City,75,Country 47916,City,75,Country 47920,City,75,Country 47937,City,75,Country 47938,City,75,Country 47941,City,75,Country 47944,City,75,Country 47945,City,75,Country 47950,City,75,Country 47952,City,75,Country 47954,City,75,Country 47958,City,75,Country 47963,City,75,Country 47965,City,75,Country 47966,City,75,Country 47967,City,75,Country 47968,City,75,Country 47969,City,75,Country 47971,City,75,Country 47973,City,75,Country 47976,City,75,Country 47977,City,75,Country 47978,City,75,Country 47981,City,75,Country 47982,City,75,Country 47984,City,75,Country 47986,City,75,Country 47987,City,75,Country 47988,City,75,Country 47989,City,75,Country 47991,City,75,Country 47993,City,75,Country 47994,City,75,Country 47995,City,75,Country 47997,City,75,Country 47998,City,75,Country 47999,City,75,Country 48013,City,75,Country 48026,City,75,Country 48027,City,75,Country 39235,City,75,Country 39238,City,75,Country 39247,City,75,Country 39250,City,75,Country 39251,City,75,Country 39260,City,75,Country 39261,City,75,Country 39282,City,75,Country 39283,City,75,Country 39287,City,75,Country 39288,City,75,Country 39292,City,75,Country 39303,City,75,Country 39324,City,75,Country 39329,City,75,Country 39332,City,75,Country 39352,City,75,Country 39353,City,75,Country 39354,City,75,Country 39364,City,75,Country 39381,City,75,Country 39387,City,75,Country 39401,City,75,Country 39406,City,75,Country 39408,City,75,Country 39409,City,75,Country 39411,City,75,Country 39412,City,75,Country 39413,City,75,Country 39417,City,75,Country 39421,City,75,Country 39422,City,75,Country 39425,City,75,Country 39427,City,75,Country 39430,City,75,Country 39438,City,75,Country 39439,City,75,Country 39469,City,75,Country 39490,City,75,Country 39491,City,75,Country 39493,City,75,Country 39504,City,75,Country 39508,City,75,Country 39511,City,75,Country 39530,City,75,Country 39556,City,75,Country 39561,City,75,Country 39562,City,75,Country 39570,City,75,Country 39573,City,75,Country 39580,City,75,Country 39581,City,75,Country 39588,City,75,Country 39590,City,75,Country 39593,City,75,Country 39595,City,75,Country 39594,City,75,Country 39599,City,75,Country 39611,City,75,Country 39612,City,75,Country 39613,City,75,Country 39614,City,75,Country 39621,City,75,Country 39645,City,75,Country 39661,City,75,Country 39664,City,75,Country 39665,City,75,Country 39666,City,75,Country 39667,City,75,Country 39671,City,75,Country 39672,City,75,Country 39679,City,75,Country 39700,City,75,Country 39701,City,75,Country 39725,City,75,Country 39726,City,75,Country 39727,City,75,Country 39728,City,75,Country 39733,City,75,Country 39740,City,75,Country 39742,City,75,Country 39764,City,75,Country 39787,City,75,Country 39816,City,75,Country 39818,City,75,Country 39837,City,75,Country 39839,City,75,Country 39858,City,75,Country 39879,City,75,Country 39880,City,75,Country 39881,City,75,Country 39884,City,75,Country 39888,City,75,Country 39889,City,75,Country 39890,City,75,Country 39895,City,75,Country 39908,City,75,Country 39920,City,75,Country 39943,City,75,Country 39944,City,75,Country 39948,City,75,Country 39949,City,75,Country 39951,City,75,Country 39966,City,75,Country 39967,City,75,Country 39968,City,75,Country 39970,City,75,Country 40430,City,75,Country 40432,City,75,Country 40433,City,75,Country 40434,City,75,Country 39988,City,75,Country 39992,City,75,Country 39993,City,75,Country 40004,City,75,Country 40012,City,75,Country 40022,City,75,Country 40023,City,75,Country 40024,City,75,Country 40047,City,75,Country 40058,City,75,Country 40064,City,75,Country 40075,City,75,Country 40080,City,75,Country 40081,City,75,Country 40085,City,75,Country 40103,City,75,Country 40112,City,75,Country 40135,City,75,Country 40142,City,75,Country 40151,City,75,Country 40238,City,75,Country 40174,City,75,Country 40181,City,75,Country 40200,City,75,Country 40208,City,75,Country 40214,City,75,Country 40215,City,75,Country 40220,City,75,Country 40225,City,75,Country 40227,City,75,Country 40228,City,75,Country 40239,City,75,Country 40249,City,75,Country 40259,City,75,Country 40266,City,75,Country 40269,City,75,Country 40271,City,75,Country 40365,City,75,Country 40274,City,75,Country 40276,City,75,Country 40283,City,75,Country 40293,City,75,Country 40294,City,75,Country 40336,City,75,Country 40338,City,75,Country 40339,City,75,Country 40344,City,75,Country 40343,City,75,Country 40349,City,75,Country 40372,City,75,Country 40373,City,75,Country 40378,City,75,Country 40384,City,75,Country 40385,City,75,Country 40392,City,75,Country 40393,City,75,Country 40394,City,75,Country 40630,City,75,Country 40460,City,75,Country 40469,City,75,Country 40475,City,75,Country 40476,City,75,Country 40486,City,75,Country 40489,City,75,Country 40491,City,75,Country 40492,City,75,Country 40493,City,75,Country 40494,City,75,Country 40496,City,75,Country 40499,City,75,Country 40500,City,75,Country 40521,City,75,Country 40529,City,75,Country 40530,City,75,Country 40531,City,75,Country 40547,City,75,Country 40566,City,75,Country 40567,City,75,Country 40569,City,75,Country 40598,City,75,Country 40600,City,75,Country 40604,City,75,Country 40605,City,75,Country 40614,City,75,Country 40622,City,75,Country 40702,City,75,Country 40706,City,75,Country 40775,City,75,Country 40805,City,75,Country 40807,City,75,Country 40946,City,75,Country 40841,City,75,Country 40844,City,75,Country 40849,City,75,Country 41012,City,75,Country 41015,City,75,Country 40902,City,75,Country 41017,City,75,Country 40906,City,75,Country 40915,City,75,Country 40918,City,75,Country 40921,City,75,Country 41022,City,75,Country 41025,City,75,Country 41036,City,75,Country 41044,City,75,Country 41047,City,75,Country 41085,City,75,Country 41089,City,75,Country 41116,City,75,Country 41124,City,75,Country 41141,City,75,Country 41132,City,75,Country 41158,City,75,Country 41159,City,75,Country 41163,City,75,Country 41168,City,75,Country 41218,City,75,Country 41219,City,75,Country 41220,City,75,Country 41222,City,75,Country 41232,City,75,Country 41243,City,75,Country 41246,City,75,Country 41254,City,75,Country 41260,City,75,Country 41276,City,75,Country 41281,City,75,Country 41284,City,75,Country 41289,City,75,Country 41341,City,75,Country 41342,City,75,Country 41302,City,75,Country 41349,City,75,Country 41350,City,75,Country 41306,City,75,Country 41339,City,75,Country 41352,City,75,Country 41320,City,75,Country 41322,City,75,Country 41325,City,75,Country 41331,City,75,Country 41332,City,75,Country 41357,City,75,Country 41360,City,75,Country 41365,City,75,Country 41366,City,75,Country 41367,City,75,Country 41375,City,75,Country 41388,City,75,Country 41405,City,75,Country 41430,City,75,Country 41433,City,75,Country 41446,City,75,Country 41450,City,75,Country 41609,City,75,Country 41621,City,75,Country 41457,City,75,Country 41463,City,75,Country 41496,City,75,Country 41502,City,75,Country 41513,City,75,Country 41528,City,75,Country 41545,City,75,Country 41549,City,75,Country 41553,City,75,Country 41555,City,75,Country 41560,City,75,Country 41572,City,75,Country 41573,City,75,Country 41575,City,75,Country 41588,City,75,Country 41592,City,75,Country 41598,City,75,Country 48037,City,75,Country 48049,City,75,Country 41657,City,75,Country 48064,City,75,Country 48067,City,75,Country 41667,City,75,Country 41670,City,75,Country 41673,City,75,Country 41674,City,75,Country 48071,City,75,Country 48072,City,75,Country 41688,City,75,Country 48088,City,75,Country 41691,City,75,Country 41699,City,75,Country 41701,City,75,Country 41706,City,75,Country 41707,City,75,Country 41708,City,75,Country 41712,City,75,Country 41723,City,75,Country 41720,City,75,Country 41721,City,75,Country 41724,City,75,Country 41727,City,75,Country 41728,City,75,Country 41730,City,75,Country 41732,City,75,Country 41737,City,75,Country 41738,City,75,Country 48096,City,75,Country 48098,City,75,Country 48107,City,75,Country 48111,City,75,Country 48119,City,75,Country 41762,City,75,Country 41769,City,75,Country 41771,City,75,Country 41780,City,75,Country 42000,City,75,Country 41792,City,75,Country 41797,City,75,Country 41998,City,75,Country 42005,City,75,Country 41802,City,75,Country 41805,City,75,Country 41809,City,75,Country 41811,City,75,Country 41812,City,75,Country 41813,City,75,Country 41827,City,75,Country 41833,City,75,Country 41837,City,75,Country 41838,City,75,Country 41840,City,75,Country 41844,City,75,Country 41853,City,75,Country 41852,City,75,Country 41855,City,75,Country 41868,City,75,Country 41878,City,75,Country 41877,City,75,Country 41911,City,75,Country 41914,City,75,Country 41916,City,75,Country 41917,City,75,Country 41930,City,75,Country 41931,City,75,Country 41932,City,75,Country 41935,City,75,Country 41936,City,75,Country 41955,City,75,Country 41959,City,75,Country 41960,City,75,Country 41962,City,75,Country 41988,City,75,Country 41963,City,75,Country 41989,City,75,Country 41966,City,75,Country 41982,City,75,Country 42024,City,75,Country 42053,City,75,Country 42063,City,75,Country 42085,City,75,Country 42106,City,75,Country 42116,City,75,Country 42303,City,75,Country 42118,City,75,Country 42122,City,75,Country 42125,City,75,Country 42131,City,75,Country 42140,City,75,Country 42156,City,75,Country 42158,City,75,Country 42159,City,75,Country 42173,City,75,Country 42176,City,75,Country 42178,City,75,Country 42181,City,75,Country 42189,City,75,Country 42198,City,75,Country 42218,City,75,Country 42231,City,75,Country 42238,City,75,Country 42247,City,75,Country 42257,City,75,Country 42290,City,75,Country 42268,City,75,Country 42270,City,75,Country 42311,City,75,Country 42312,City,75,Country 42313,City,75,Country 42314,City,75,Country 42315,City,75,Country 42316,City,75,Country 42317,City,75,Country 42321,City,75,Country 42325,City,75,Country 42326,City,75,Country 42330,City,75,Country 42331,City,75,Country 42332,City,75,Country 42334,City,75,Country 42336,City,75,Country 42338,City,75,Country 42339,City,75,Country 42354,City,75,Country 42358,City,75,Country 42359,City,75,Country 42362,City,75,Country 42451,City,75,Country 42365,City,75,Country 42366,City,75,Country 42453,City,75,Country 42376,City,75,Country 42460,City,75,Country 42377,City,75,Country 42379,City,75,Country 42380,City,75,Country 42386,City,75,Country 42387,City,75,Country 42388,City,75,Country 42392,City,75,Country 42398,City,75,Country 42402,City,75,Country 42408,City,75,Country 42412,City,75,Country 42413,City,75,Country 42416,City,75,Country 42419,City,75,Country 42421,City,75,Country 42422,City,75,Country 42423,City,75,Country 42429,City,75,Country 42430,City,75,Country 42434,City,75,Country 42440,City,75,Country 42481,City,75,Country 42498,City,75,Country 42503,City,75,Country 42511,City,75,Country 42518,City,75,Country 42543,City,75,Country 42549,City,75,Country 42550,City,75,Country 42597,City,75,Country 42614,City,75,Country 42635,City,75,Country 42667,City,75,Country 42668,City,75,Country 42697,City,75,Country 42719,City,75,Country 42759,City,75,Country 42741,City,75,Country 42745,City,75,Country 42769,City,75,Country 42793,City,75,Country 42797,City,75,Country 42877,City,75,Country 42932,City,75,Country 42934,City,75,Country 42936,City,75,Country 42945,City,75,Country 42948,City,75,Country 42958,City,75,Country 42967,City,75,Country 42976,City,75,Country 42986,City,75,Country 42988,City,75,Country 42990,City,75,Country 42999,City,75,Country 43009,City,75,Country 43038,City,75,Country 43057,City,75,Country 43064,City,75,Country 43087,City,75,Country 43105,City,75,Country 43115,City,75,Country 43177,City,75,Country 43181,City,75,Country 43228,City,75,Country 43232,City,75,Country 43242,City,75,Country 43263,City,75,Country 43265,City,75,Country 43278,City,75,Country 43290,City,75,Country 43321,City,75,Country 43338,City,75,Country 43681,City,75,Country 43341,City,75,Country 43342,City,75,Country 43343,City,75,Country 43350,City,75,Country 43357,City,75,Country 43367,City,75,Country 43441,City,75,Country 43444,City,75,Country 43448,City,75,Country 43454,City,75,Country 43460,City,75,Country 43463,City,75,Country 43464,City,75,Country 43466,City,75,Country 43468,City,75,Country 43469,City,75,Country 43525,City,75,Country 43478,City,75,Country 43485,City,75,Country 43487,City,75,Country 43503,City,75,Country 43532,City,75,Country 43545,City,75,Country 43549,City,75,Country 43550,City,75,Country 43560,City,75,Country 43567,City,75,Country 43568,City,75,Country 43569,City,75,Country 43570,City,75,Country 43571,City,75,Country 43578,City,75,Country 43579,City,75,Country 43580,City,75,Country 43581,City,75,Country 43585,City,75,Country 43590,City,75,Country 43607,City,75,Country 43619,City,75,Country 43626,City,75,Country 43647,City,75,Country 43679,City,75,Country 43732,City,75,Country 43738,City,75,Country 43742,City,75,Country 43769,City,75,Country 43800,City,75,Country 43809,City,75,Country 43811,City,75,Country 43812,City,75,Country 43813,City,75,Country 43816,City,75,Country 43824,City,75,Country 43831,City,75,Country 43835,City,75,Country 43848,City,75,Country 43851,City,75,Country 43853,City,75,Country 43927,City,75,Country 43865,City,75,Country 43870,City,75,Country 43872,City,75,Country 43873,City,75,Country 43874,City,75,Country 43875,City,75,Country 43876,City,75,Country 43929,City,75,Country 43930,City,75,Country 43945,City,75,Country 43975,City,75,Country 44455,City,75,Country 44471,City,75,Country 44474,City,75,Country 44017,City,75,Country 44018,City,75,Country 44476,City,75,Country 44023,City,75,Country 44484,City,75,Country 44048,City,75,Country 44077,City,75,Country 44110,City,75,Country 44117,City,75,Country 44129,City,75,Country 44130,City,75,Country 44148,City,75,Country 44149,City,75,Country 44154,City,75,Country 44158,City,75,Country 44182,City,75,Country 44209,City,75,Country 44214,City,75,Country 44225,City,75,Country 44258,City,75,Country 44259,City,75,Country 44278,City,75,Country 44308,City,75,Country 44310,City,75,Country 44343,City,75,Country 44350,City,75,Country 44353,City,75,Country 44369,City,75,Country 44384,City,75,Country 44414,City,75,Country 44416,City,75,Country 44509,City,75,Country 44513,City,75,Country 44532,City,75,Country 44533,City,75,Country 44534,City,75,Country 44537,City,75,Country 44541,City,75,Country 44548,City,75,Country 44547,City,75,Country 44551,City,75,Country 44567,City,75,Country 44563,City,75,Country 44564,City,75,Country 44570,City,75,Country 44594,City,75,Country 44607,City,75,Country 44701,City,75,Country 44614,City,75,Country 44616,City,75,Country 44619,City,75,Country 44634,City,75,Country 44640,City,75,Country 44643,City,75,Country 44646,City,75,Country 44660,City,75,Country 44675,City,75,Country 44676,City,75,Country 44677,City,75,Country 44680,City,75,Country 44722,City,75,Country 44724,City,75,Country 44726,City,75,Country 44730,City,75,Country 44740,City,75,Country 44744,City,75,Country 44745,City,75,Country 44759,City,75,Country 44769,City,75,Country 44768,City,75,Country 44782,City,75,Country 44794,City,75,Country 44813,City,75,Country 44818,City,75,Country 44862,City,75,Country 44864,City,75,Country 44880,City,75,Country 44891,City,75,Country 45350,City,75,Country 44897,City,75,Country 45363,City,75,Country 45365,City,75,Country 44919,City,75,Country 44942,City,75,Country 44947,City,75,Country 44956,City,75,Country 44972,City,75,Country 44988,City,75,Country 45139,City,75,Country 45140,City,75,Country 45160,City,75,Country 45196,City,75,Country 45198,City,75,Country 45180,City,75,Country 45168,City,75,Country 45174,City,75,Country 45192,City,75,Country 45216,City,75,Country 45258,City,75,Country 45307,City,75,Country 45310,City,75,Country 45312,City,75,Country 45295,City,75,Country 45296,City,75,Country 45297,City,75,Country 45371,City,75,Country 45370,City,75,Country 45374,City,75,Country 45377,City,75,Country 45383,City,75,Country 45404,City,75,Country 45405,City,75,Country 45682,City,75,Country 45413,City,75,Country 45414,City,75,Country 45418,City,75,Country 45419,City,75,Country 45420,City,75,Country 45426,City,75,Country 45428,City,75,Country 45430,City,75,Country 45434,City,75,Country 45441,City,75,Country 45455,City,75,Country 45459,City,75,Country 45464,City,75,Country 45471,City,75,Country 45479,City,75,Country 45491,City,75,Country 45494,City,75,Country 45495,City,75,Country 45501,City,75,Country 45505,City,75,Country 45508,City,75,Country 45515,City,75,Country 45528,City,75,Country 45531,City,75,Country 45536,City,75,Country 45697,City,75,Country 45698,City,75,Country 45564,City,75,Country 45585,City,75,Country 45586,City,75,Country 45587,City,75,Country 45595,City,75,Country 45604,City,75,Country 45612,City,75,Country 45616,City,75,Country 45635,City,75,Country 45642,City,75,Country 45648,City,75,Country 45654,City,75,Country 45659,City,75,Country 45668,City,75,Country 45670,City,75,Country 45673,City,75,Country 45674,City,75,Country 45709,City,75,Country 45717,City,75,Country 45718,City,75,Country 45719,City,75,Country 45720,City,75,Country 45722,City,75,Country 45723,City,75,Country 45724,City,75,Country 45725,City,75,Country 45726,City,75,Country 45744,City,75,Country 45766,City,75,Country 45779,City,75,Country 45787,City,75,Country 45878,City,75,Country 45922,City,75,Country 46642,City,75,Country 45939,City,75,Country 46023,City,75,Country 46039,City,75,Country 46066,City,75,Country 46079,City,75,Country 46130,City,75,Country 46161,City,75,Country 46173,City,75,Country 46216,City,75,Country 46221,City,75,Country 46267,City,75,Country 46261,City,75,Country 46264,City,75,Country 46324,City,75,Country 46334,City,75,Country 46362,City,75,Country 46373,City,75,Country 46374,City,75,Country 46378,City,75,Country 46401,City,75,Country 46456,City,75,Country 46457,City,75,Country 46476,City,75,Country 46485,City,75,Country 46497,City,75,Country 46525,City,75,Country 46528,City,75,Country 46557,City,75,Country 46559,City,75,Country 46572,City,75,Country 46597,City,75,Country 46604,City,75,Country 46667,City,75,Country 46691,City,75,Country 46708,City,75,Country 46747,City,75,Country 46758,City,75,Country 46765,City,75,Country 46767,City,75,Country 46777,City,75,Country 46772,City,75,Country 46787,City,75,Country 46799,City,75,Country 46819,City,75,Country 46847,City,75,Country 46851,City,75,Country 46888,City,75,Country 46909,City,75,Country 46910,City,75,Country 46911,City,75,Country 46935,City,75,Country 46940,City,75,Country 46952,City,75,Country 47143,City,75,Country 46962,City,75,Country 46998,City,75,Country 47003,City,75,Country 47004,City,75,Country 47008,City,75,Country 47015,City,75,Country 47018,City,75,Country 47024,City,75,Country 47033,City,75,Country 47034,City,75,Country 47035,City,75,Country 47038,City,75,Country 47058,City,75,Country 47094,City,75,Country 47099,City,75,Country 47100,City,75,Country 47101,City,75,Country 47102,City,75,Country 47167,City,75,Country 47184,City,75,Country 47197,City,75,Country 47198,City,75,Country 47207,City,75,Country 47417,City,75,Country 47267,City,75,Country 47271,City,75,Country 47226,City,75,Country 47230,City,75,Country 47239,City,75,Country 47256,City,75,Country 47260,City,75,Country 47261,City,75,Country 47286,City,75,Country 47284,City,75,Country 47287,City,75,Country 47308,City,75,Country 47320,City,75,Country 47325,City,75,Country 47345,City,75,Country 47399,City,75,Country 47365,City,75,Country 47368,City,75,Country 47369,City,75,Country 47376,City,75,Country 47379,City,75,Country 47381,City,75,Country 47425,City,75,Country 47444,City,75,Country 47456,City,75,Country 47474,City,75,Country 47540,City,75,Country 47542,City,75,Country 47569,City,75,Country 47573,City,75,Country 47574,City,75,Country 47575,City,75,Country 47582,City,75,Country 47584,City,75,Country 47589,City,75,Country 47591,City,75,Country 47602,City,75,Country 47603,City,75,Country 47604,City,75,Country 47612,City,75,Country 47628,City,75,Country 47641,City,75,Country 47644,City,75,Country 47667,City,75,Country 47671,City,75,Country 47677,City,75,Country 47686,City,75,Country 47687,City,75,Country 47690,City,75,Country 47694,City,75,Country 47766,City,75,Country 47778,City,75,Country 47764,City,75,Country 47795,City,75,Country 47797,City,75,Country 47798,City,75,Country 47803,City,75,Country 47799,City,75,Country 47800,City,75,Country 47801,City,75,Country 47807,City,75,Country 47808,City,75,Country 47841,City,75,Country 47847,City,75,Country 47852,City,75,Country 47868,City,75,Country 47872,City,75,Country 47919,City,75,Country 47935,City,75,Country 47936,City,75,Country 47939,City,75,Country 47940,City,75,Country 47942,City,75,Country 47943,City,75,Country 47946,City,75,Country 47947,City,75,Country 47948,City,75,Country 47949,City,75,Country 47951,City,75,Country 47953,City,75,Country 47955,City,75,Country 47956,City,75,Country 47957,City,75,Country 47959,City,75,Country 47960,City,75,Country 47961,City,75,Country 47962,City,75,Country 47964,City,75,Country 47970,City,75,Country 47972,City,75,Country 47974,City,75,Country 47975,City,75,Country 47979,City,75,Country 47980,City,75,Country 47983,City,75,Country 47990,City,75,Country 47992,City,75,Country 47996,City,75,Country 48025,City,75,Country 48029,City,75,Country 48030,City,75,Country 39239,City,75,Country 39240,City,75,Country 39242,City,75,Country 39252,City,75,Country 39253,City,75,Country 39311,City,75,Country 39383,City,75,Country 39390,City,75,Country 39397,City,75,Country 39399,City,75,Country 39419,City,75,Country 39435,City,75,Country 39451,City,75,Country 39465,City,75,Country 39481,City,75,Country 39494,City,75,Country 39503,City,75,Country 39506,City,75,Country 39543,City,75,Country 39544,City,75,Country 39557,City,75,Country 39560,City,75,Country 39571,City,75,Country 39574,City,75,Country 39602,City,75,Country 39609,City,75,Country 39610,City,75,Country 39640,City,75,Country 39642,City,75,Country 39676,City,75,Country 39708,City,75,Country 39709,City,75,Country 39711,City,75,Country 39724,City,75,Country 39729,City,75,Country 39730,City,75,Country 39731,City,75,Country 39750,City,75,Country 39753,City,75,Country 39775,City,75,Country 39812,City,75,Country 39825,City,75,Country 39829,City,75,Country 39838,City,75,Country 39865,City,75,Country 39872,City,75,Country 39930,City,75,Country 39940,City,75,Country 39953,City,75,Country 39974,City,75,Country 39999,City,75,Country 40002,City,75,Country 40040,City,75,Country 40077,City,75,Country 40084,City,75,Country 40089,City,75,Country 40090,City,75,Country 40097,City,75,Country 40099,City,75,Country 40100,City,75,Country 40098,City,75,Country 40101,City,75,Country 40111,City,75,Country 40113,City,75,Country 40119,City,75,Country 40123,City,75,Country 40128,City,75,Country 40147,City,75,Country 40153,City,75,Country 40155,City,75,Country 40166,City,75,Country 40172,City,75,Country 40177,City,75,Country 40195,City,75,Country 40212,City,75,Country 40221,City,75,Country 40224,City,75,Country 40268,City,75,Country 40360,City,75,Country 40296,City,75,Country 40361,City,75,Country 40306,City,75,Country 40315,City,75,Country 40335,City,75,Country 40346,City,75,Country 40350,City,75,Country 40351,City,75,Country 40353,City,75,Country 40368,City,75,Country 40369,City,75,Country 40381,City,75,Country 40386,City,75,Country 40401,City,75,Country 40402,City,75,Country 40449,City,75,Country 40513,City,75,Country 40559,City,75,Country 40560,City,75,Country 41390,City,75,Country 40646,City,75,Country 40647,City,75,Country 40651,City,75,Country 40653,City,75,Country 40660,City,75,Country 40680,City,75,Country 40681,City,75,Country 40689,City,75,Country 40697,City,75,Country 40703,City,75,Country 40709,City,75,Country 40716,City,75,Country 40722,City,75,Country 40723,City,75,Country 40730,City,75,Country 40742,City,75,Country 40744,City,75,Country 40748,City,75,Country 40761,City,75,Country 40771,City,75,Country 40772,City,75,Country 40783,City,75,Country 40798,City,75,Country 40812,City,75,Country 40818,City,75,Country 40821,City,75,Country 40941,City,75,Country 40954,City,75,Country 40986,City,75,Country 40987,City,75,Country 40992,City,75,Country 40831,City,75,Country 40835,City,75,Country 40842,City,75,Country 40847,City,75,Country 40861,City,75,Country 40863,City,75,Country 40869,City,75,Country 40874,City,75,Country 40875,City,75,Country 40879,City,75,Country 40889,City,75,Country 40894,City,75,Country 40900,City,75,Country 40901,City,75,Country 40904,City,75,Country 40909,City,75,Country 40922,City,75,Country 40923,City,75,Country 41039,City,75,Country 41046,City,75,Country 41052,City,75,Country 41053,City,75,Country 41084,City,75,Country 41095,City,75,Country 41100,City,75,Country 41115,City,75,Country 41129,City,75,Country 41135,City,75,Country 41139,City,75,Country 41142,City,75,Country 41145,City,75,Country 41164,City,75,Country 41170,City,75,Country 41180,City,75,Country 41212,City,75,Country 41215,City,75,Country 41226,City,75,Country 41235,City,75,Country 41239,City,75,Country 41241,City,75,Country 41249,City,75,Country 41251,City,75,Country 41258,City,75,Country 41271,City,75,Country 41344,City,75,Country 41307,City,75,Country 41351,City,75,Country 41323,City,75,Country 41324,City,75,Country 41327,City,75,Country 41333,City,75,Country 41415,City,75,Country 41416,City,75,Country 41420,City,75,Country 41423,City,75,Country 41616,City,75,Country 41646,City,75,Country 41459,City,75,Country 41521,City,75,Country 41532,City,75,Country 41551,City,75,Country 41554,City,75,Country 41568,City,75,Country 41570,City,75,Country 41586,City,75,Country 41651,City,75,Country 48047,City,75,Country 41658,City,75,Country 48054,City,75,Country 48058,City,75,Country 48059,City,75,Country 48063,City,75,Country 48066,City,75,Country 41669,City,75,Country 41672,City,75,Country 48079,City,75,Country 48080,City,75,Country 48081,City,75,Country 48085,City,75,Country 48089,City,75,Country 41696,City,75,Country 41704,City,75,Country 48095,City,75,Country 48103,City,75,Country 48113,City,75,Country 48125,City,75,Country 48126,City,75,Country 41773,City,75,Country 41786,City,75,Country 42007,City,75,Country 41806,City,75,Country 41810,City,75,Country 41847,City,75,Country 41854,City,75,Country 41870,City,75,Country 41887,City,75,Country 41896,City,75,Country 41897,City,75,Country 41899,City,75,Country 41901,City,75,Country 41902,City,75,Country 41895,City,75,Country 41912,City,75,Country 41920,City,75,Country 41939,City,75,Country 41949,City,75,Country 41956,City,75,Country 41987,City,75,Country 41958,City,75,Country 41990,City,75,Country 42012,City,75,Country 42023,City,75,Country 42025,City,75,Country 42032,City,75,Country 42034,City,75,Country 42042,City,75,Country 42043,City,75,Country 42056,City,75,Country 42068,City,75,Country 42070,City,75,Country 42089,City,75,Country 42120,City,75,Country 42121,City,75,Country 42129,City,75,Country 42142,City,75,Country 42153,City,75,Country 42154,City,75,Country 42155,City,75,Country 42202,City,75,Country 42204,City,75,Country 42212,City,75,Country 42216,City,75,Country 42226,City,75,Country 42285,City,75,Country 42244,City,75,Country 42246,City,75,Country 42256,City,75,Country 42276,City,75,Country 42327,City,75,Country 42356,City,75,Country 42375,City,75,Country 42458,City,75,Country 42424,City,75,Country 42426,City,75,Country 42474,City,75,Country 42506,City,75,Country 42508,City,75,Country 42514,City,75,Country 42517,City,75,Country 42528,City,75,Country 42554,City,75,Country 42565,City,75,Country 42566,City,75,Country 42574,City,75,Country 42575,City,75,Country 42576,City,75,Country 42578,City,75,Country 42587,City,75,Country 42601,City,75,Country 42602,City,75,Country 42626,City,75,Country 43708,City,75,Country 43703,City,75,Country 42672,City,75,Country 42673,City,75,Country 42679,City,75,Country 42698,City,75,Country 42699,City,75,Country 42716,City,75,Country 42728,City,75,Country 42736,City,75,Country 42738,City,75,Country 42743,City,75,Country 42758,City,75,Country 42764,City,75,Country 42773,City,75,Country 42783,City,75,Country 42824,City,75,Country 42839,City,75,Country 42840,City,75,Country 42863,City,75,Country 42910,City,75,Country 42914,City,75,Country 42959,City,75,Country 43069,City,75,Country 43131,City,75,Country 43138,City,75,Country 43169,City,75,Country 43165,City,75,Country 43173,City,75,Country 43208,City,75,Country 43239,City,75,Country 43230,City,75,Country 43227,City,75,Country 43247,City,75,Country 43249,City,75,Country 43250,City,75,Country 43257,City,75,Country 43264,City,75,Country 43268,City,75,Country 43269,City,75,Country 43270,City,75,Country 43277,City,75,Country 43284,City,75,Country 43291,City,75,Country 43312,City,75,Country 43327,City,75,Country 43337,City,75,Country 43360,City,75,Country 43378,City,75,Country 43386,City,75,Country 43398,City,75,Country 43401,City,75,Country 43409,City,75,Country 43412,City,75,Country 43418,City,75,Country 43432,City,75,Country 43692,City,75,Country 43446,City,75,Country 43447,City,75,Country 43449,City,75,Country 43694,City,75,Country 43472,City,75,Country 43489,City,75,Country 43490,City,75,Country 43492,City,75,Country 43495,City,75,Country 43500,City,75,Country 43510,City,75,Country 43516,City,75,Country 43520,City,75,Country 43521,City,75,Country 43523,City,75,Country 43538,City,75,Country 43561,City,75,Country 43563,City,75,Country 43565,City,75,Country 43566,City,75,Country 43572,City,75,Country 43594,City,75,Country 43611,City,75,Country 43618,City,75,Country 43649,City,75,Country 43671,City,75,Country 43716,City,75,Country 43723,City,75,Country 43726,City,75,Country 43728,City,75,Country 43729,City,75,Country 43737,City,75,Country 43743,City,75,Country 43744,City,75,Country 43745,City,75,Country 43748,City,75,Country 43775,City,75,Country 43784,City,75,Country 43785,City,75,Country 43815,City,75,Country 43820,City,75,Country 43821,City,75,Country 43827,City,75,Country 43834,City,75,Country 43846,City,75,Country 43850,City,75,Country 43855,City,75,Country 43856,City,75,Country 43864,City,75,Country 43866,City,75,Country 43868,City,75,Country 43923,City,75,Country 43936,City,75,Country 43948,City,75,Country 43952,City,75,Country 43955,City,75,Country 43983,City,75,Country 44457,City,75,Country 43998,City,75,Country 44001,City,75,Country 44008,City,75,Country 44480,City,75,Country 44482,City,75,Country 44472,City,75,Country 44478,City,75,Country 44045,City,75,Country 44046,City,75,Country 44490,City,75,Country 44491,City,75,Country 44076,City,75,Country 44106,City,75,Country 44112,City,75,Country 44116,City,75,Country 44119,City,75,Country 44120,City,75,Country 44210,City,75,Country 44222,City,75,Country 44228,City,75,Country 44335,City,75,Country 44235,City,75,Country 44246,City,75,Country 44251,City,75,Country 44260,City,75,Country 44257,City,75,Country 44261,City,75,Country 44263,City,75,Country 44271,City,75,Country 44273,City,75,Country 44279,City,75,Country 44287,City,75,Country 44307,City,75,Country 44322,City,75,Country 44323,City,75,Country 44328,City,75,Country 44338,City,75,Country 44341,City,75,Country 44349,City,75,Country 44354,City,75,Country 44358,City,75,Country 44365,City,75,Country 44373,City,75,Country 44403,City,75,Country 44404,City,75,Country 44408,City,75,Country 44409,City,75,Country 44502,City,75,Country 44503,City,75,Country 44505,City,75,Country 44510,City,75,Country 44528,City,75,Country 44529,City,75,Country 44535,City,75,Country 44545,City,75,Country 44546,City,75,Country 44552,City,75,Country 44553,City,75,Country 44571,City,75,Country 44615,City,75,Country 44626,City,75,Country 44627,City,75,Country 44628,City,75,Country 44629,City,75,Country 44630,City,75,Country 44631,City,75,Country 44681,City,75,Country 44725,City,75,Country 44729,City,75,Country 44734,City,75,Country 44762,City,75,Country 44763,City,75,Country 44773,City,75,Country 44777,City,75,Country 44778,City,75,Country 44784,City,75,Country 44789,City,75,Country 44796,City,75,Country 44821,City,75,Country 44822,City,75,Country 44832,City,75,Country 44845,City,75,Country 44847,City,75,Country 44856,City,75,Country 44857,City,75,Country 45358,City,75,Country 44909,City,75,Country 44910,City,75,Country 44955,City,75,Country 44960,City,75,Country 44995,City,75,Country 45136,City,75,Country 45151,City,75,Country 45158,City,75,Country 45202,City,75,Country 45203,City,75,Country 45210,City,75,Country 45213,City,75,Country 45220,City,75,Country 45283,City,75,Country 45288,City,75,Country 45298,City,75,Country 45321,City,75,Country 45332,City,75,Country 45334,City,75,Country 45396,City,75,Country 45395,City,75,Country 45423,City,75,Country 45439,City,75,Country 45524,City,75,Country 45552,City,75,Country 45565,City,75,Country 45566,City,75,Country 45573,City,75,Country 45606,City,75,Country 45607,City,75,Country 45652,City,75,Country 45658,City,75,Country 45660,City,75,Country 45675,City,75,Country 46891,City,75,Country 45707,City,75,Country 45708,City,75,Country 45713,City,75,Country 45777,City,75,Country 45793,City,75,Country 45828,City,75,Country 45860,City,75,Country 45868,City,75,Country 45885,City,75,Country 45886,City,75,Country 45890,City,75,Country 45894,City,75,Country 45930,City,75,Country 46005,City,75,Country 46015,City,75,Country 45996,City,75,Country 46018,City,75,Country 46019,City,75,Country 46022,City,75,Country 46041,City,75,Country 46118,City,75,Country 46214,City,75,Country 46193,City,75,Country 46234,City,75,Country 46236,City,75,Country 46252,City,75,Country 46290,City,75,Country 46310,City,75,Country 46311,City,75,Country 46312,City,75,Country 46341,City,75,Country 46372,City,75,Country 46376,City,75,Country 46383,City,75,Country 46400,City,75,Country 46441,City,75,Country 46451,City,75,Country 46472,City,75,Country 46489,City,75,Country 46514,City,75,Country 46539,City,75,Country 46558,City,75,Country 46579,City,75,Country 46623,City,75,Country 46626,City,75,Country 46668,City,75,Country 46693,City,75,Country 46736,City,75,Country 46737,City,75,Country 46754,City,75,Country 46773,City,75,Country 46774,City,75,Country 46775,City,75,Country 46790,City,75,Country 46798,City,75,Country 46803,City,75,Country 46822,City,75,Country 46848,City,75,Country 46880,City,75,Country 46883,City,75,Country 46895,City,75,Country 46927,City,75,Country 46925,City,75,Country 46926,City,75,Country 46948,City,75,Country 46953,City,75,Country 46968,City,75,Country 46973,City,75,Country 46977,City,75,Country 46979,City,75,Country 47130,City,75,Country 47016,City,75,Country 47019,City,75,Country 47021,City,75,Country 47020,City,75,Country 47023,City,75,Country 47037,City,75,Country 47079,City,75,Country 47084,City,75,Country 47098,City,75,Country 47111,City,75,Country 47120,City,75,Country 47123,City,75,Country 47153,City,75,Country 47192,City,75,Country 47225,City,75,Country 47240,City,75,Country 47244,City,75,Country 47246,City,75,Country 47249,City,75,Country 47278,City,75,Country 47299,City,75,Country 47318,City,75,Country 47322,City,75,Country 47349,City,75,Country 47358,City,75,Country 47371,City,75,Country 47375,City,75,Country 47437,City,75,Country 47457,City,75,Country 47462,City,75,Country 47478,City,75,Country 47495,City,75,Country 47505,City,75,Country 47510,City,75,Country 47516,City,75,Country 47521,City,75,Country 47530,City,75,Country 47534,City,75,Country 47535,City,75,Country 47536,City,75,Country 47543,City,75,Country 47546,City,75,Country 47548,City,75,Country 47924,City,75,Country 47925,City,75,Country 47583,City,75,Country 47614,City,75,Country 47621,City,75,Country 47623,City,75,Country 47630,City,75,Country 47632,City,75,Country 47637,City,75,Country 47638,City,75,Country 47635,City,75,Country 47660,City,75,Country 47697,City,75,Country 47701,City,75,Country 47705,City,75,Country 47717,City,75,Country 47725,City,75,Country 47727,City,75,Country 47745,City,75,Country 47746,City,75,Country 47752,City,75,Country 47754,City,75,Country 47773,City,75,Country 47776,City,75,Country 47777,City,75,Country 47763,City,75,Country 47783,City,75,Country 47786,City,75,Country 47788,City,75,Country 47789,City,75,Country 47790,City,75,Country 47792,City,75,Country 47815,City,75,Country 47819,City,75,Country 47830,City,75,Country 47829,City,75,Country 47825,City,75,Country 47826,City,75,Country 47833,City,75,Country 47834,City,75,Country 47835,City,75,Country 47844,City,75,Country 47865,City,75,Country 47867,City,75,Country 47875,City,75,Country 47893,City,75,Country 47894,City,75,Country 47908,City,75,Country 47909,City,75,Country 47922,City,75,Country 47985,City,75,Country 48004,City,75,Country 48014,City,75,Country 39241,City,75,Country 39255,City,75,Country 39259,City,75,Country 39262,City,75,Country 39310,City,75,Country 39317,City,75,Country 39362,City,75,Country 39363,City,75,Country 39393,City,75,Country 39398,City,75,Country 39477,City,75,Country 39479,City,75,Country 39502,City,75,Country 39509,City,75,Country 39558,City,75,Country 39568,City,75,Country 39575,City,75,Country 39603,City,75,Country 39615,City,75,Country 39619,City,75,Country 39635,City,75,Country 39651,City,75,Country 39673,City,75,Country 39678,City,75,Country 39702,City,75,Country 39710,City,75,Country 39781,City,75,Country 39782,City,75,Country 39788,City,75,Country 39789,City,75,Country 39819,City,75,Country 39822,City,75,Country 39861,City,75,Country 39869,City,75,Country 39902,City,75,Country 39931,City,75,Country 39918,City,75,Country 40426,City,75,Country 39952,City,75,Country 39954,City,75,Country 39957,City,75,Country 39990,City,75,Country 39991,City,75,Country 39995,City,75,Country 39996,City,75,Country 40437,City,75,Country 40041,City,75,Country 40019,City,75,Country 40048,City,75,Country 40049,City,75,Country 40050,City,75,Country 40054,City,75,Country 40070,City,75,Country 40086,City,75,Country 40102,City,75,Country 40134,City,75,Country 40144,City,75,Country 40186,City,75,Country 40205,City,75,Country 40207,City,75,Country 40213,City,75,Country 40229,City,75,Country 40355,City,75,Country 40356,City,75,Country 40358,City,75,Country 40282,City,75,Country 40285,City,75,Country 40287,City,75,Country 40288,City,75,Country 40289,City,75,Country 40290,City,75,Country 40291,City,75,Country 40297,City,75,Country 40303,City,75,Country 40320,City,75,Country 40323,City,75,Country 40329,City,75,Country 40331,City,75,Country 40370,City,75,Country 40374,City,75,Country 40382,City,75,Country 40445,City,75,Country 40457,City,75,Country 40461,City,75,Country 40462,City,75,Country 40466,City,75,Country 40478,City,75,Country 40485,City,75,Country 40490,City,75,Country 40515,City,75,Country 40518,City,75,Country 40522,City,75,Country 40541,City,75,Country 40556,City,75,Country 40602,City,75,Country 40603,City,75,Country 40607,City,75,Country 40608,City,75,Country 40615,City,75,Country 40631,City,75,Country 41395,City,75,Country 40648,City,75,Country 40664,City,75,Country 40751,City,75,Country 40779,City,75,Country 40801,City,75,Country 40881,City,75,Country 40890,City,75,Country 41045,City,75,Country 41066,City,75,Country 41071,City,75,Country 41065,City,75,Country 41054,City,75,Country 41090,City,75,Country 41099,City,75,Country 41128,City,75,Country 41136,City,75,Country 41137,City,75,Country 41138,City,75,Country 41140,City,75,Country 41179,City,75,Country 41181,City,75,Country 41191,City,75,Country 41245,City,75,Country 41266,City,75,Country 41267,City,75,Country 41278,City,75,Country 41279,City,75,Country 41340,City,75,Country 41308,City,75,Country 41310,City,75,Country 41317,City,75,Country 41318,City,75,Country 41319,City,75,Country 41329,City,75,Country 41385,City,75,Country 41413,City,75,Country 41425,City,75,Country 41436,City,75,Country 41444,City,75,Country 41601,City,75,Country 41617,City,75,Country 41622,City,75,Country 41650,City,75,Country 41469,City,75,Country 41480,City,75,Country 41495,City,75,Country 41516,City,75,Country 41534,City,75,Country 41550,City,75,Country 41559,City,75,Country 41564,City,75,Country 41584,City,75,Country 41585,City,75,Country 48046,City,75,Country 48051,City,75,Country 41662,City,75,Country 41685,City,75,Country 48070,City,75,Country 48083,City,75,Country 48084,City,75,Country 48086,City,75,Country 48087,City,75,Country 41714,City,75,Country 48093,City,75,Country 48102,City,75,Country 48114,City,75,Country 48110,City,75,Country 41742,City,75,Country 48122,City,75,Country 48123,City,75,Country 48127,City,75,Country 41765,City,75,Country 41781,City,75,Country 41999,City,75,Country 41800,City,75,Country 41828,City,75,Country 41836,City,75,Country 41850,City,75,Country 41851,City,75,Country 41886,City,75,Country 41880,City,75,Country 41881,City,75,Country 41883,City,75,Country 41894,City,75,Country 41900,City,75,Country 41913,City,75,Country 41921,City,75,Country 41948,City,75,Country 42010,City,75,Country 42017,City,75,Country 42018,City,75,Country 42019,City,75,Country 42040,City,75,Country 42049,City,75,Country 42055,City,75,Country 42086,City,75,Country 42105,City,75,Country 42115,City,75,Country 42132,City,75,Country 42152,City,75,Country 42157,City,75,Country 42166,City,75,Country 42167,City,75,Country 42172,City,75,Country 42175,City,75,Country 42185,City,75,Country 42191,City,75,Country 42228,City,75,Country 42251,City,75,Country 42320,City,75,Country 42328,City,75,Country 42355,City,75,Country 42357,City,75,Country 42455,City,75,Country 42378,City,75,Country 42461,City,75,Country 42462,City,75,Country 42390,City,75,Country 42417,City,75,Country 42427,City,75,Country 42428,City,75,Country 42431,City,75,Country 42472,City,75,Country 42476,City,75,Country 42485,City,75,Country 42499,City,75,Country 42500,City,75,Country 42502,City,75,Country 42516,City,75,Country 42589,City,75,Country 42592,City,75,Country 42599,City,75,Country 42648,City,75,Country 42674,City,75,Country 42683,City,75,Country 42720,City,75,Country 42735,City,75,Country 42740,City,75,Country 42744,City,75,Country 42768,City,75,Country 42782,City,75,Country 42780,City,75,Country 42781,City,75,Country 42789,City,75,Country 42798,City,75,Country 42799,City,75,Country 42800,City,75,Country 42844,City,75,Country 42848,City,75,Country 42874,City,75,Country 42876,City,75,Country 42907,City,75,Country 42911,City,75,Country 43031,City,75,Country 43042,City,75,Country 43135,City,75,Country 43199,City,75,Country 43205,City,75,Country 43207,City,75,Country 43220,City,75,Country 43226,City,75,Country 43234,City,75,Country 43241,City,75,Country 43254,City,75,Country 43308,City,75,Country 43310,City,75,Country 43319,City,75,Country 43323,City,75,Country 43324,City,75,Country 43328,City,75,Country 43329,City,75,Country 43690,City,75,Country 43362,City,75,Country 43368,City,75,Country 43392,City,75,Country 43399,City,75,Country 43400,City,75,Country 43421,City,75,Country 43442,City,75,Country 43471,City,75,Country 43486,City,75,Country 43497,City,75,Country 43505,City,75,Country 43508,City,75,Country 43514,City,75,Country 43551,City,75,Country 43564,City,75,Country 43614,City,75,Country 43615,City,75,Country 43630,City,75,Country 43654,City,75,Country 43727,City,75,Country 43752,City,75,Country 43771,City,75,Country 43789,City,75,Country 43778,City,75,Country 43798,City,75,Country 43807,City,75,Country 43840,City,75,Country 43869,City,75,Country 43918,City,75,Country 43919,City,75,Country 43939,City,75,Country 43968,City,75,Country 44465,City,75,Country 44002,City,75,Country 44025,City,75,Country 44030,City,75,Country 44033,City,75,Country 44136,City,75,Country 44156,City,75,Country 44185,City,75,Country 44215,City,75,Country 44256,City,75,Country 44265,City,75,Country 44280,City,75,Country 44282,City,75,Country 44368,City,75,Country 44372,City,75,Country 44375,City,75,Country 44385,City,75,Country 44398,City,75,Country 44420,City,75,Country 44517,City,75,Country 44527,City,75,Country 44542,City,75,Country 44699,City,75,Country 44623,City,75,Country 44638,City,75,Country 44642,City,75,Country 44650,City,75,Country 44651,City,75,Country 44712,City,75,Country 44713,City,75,Country 44720,City,75,Country 44728,City,75,Country 44754,City,75,Country 44770,City,75,Country 44805,City,75,Country 44810,City,75,Country 44824,City,75,Country 44853,City,75,Country 44874,City,75,Country 44895,City,75,Country 45352,City,75,Country 44902,City,75,Country 44915,City,75,Country 44921,City,75,Country 44946,City,75,Country 44979,City,75,Country 44983,City,75,Country 45368,City,75,Country 45164,City,75,Country 45177,City,75,Country 45194,City,75,Country 45167,City,75,Country 45191,City,75,Country 45171,City,75,Country 45215,City,75,Country 45235,City,75,Country 45238,City,75,Country 45247,City,75,Country 45248,City,75,Country 45303,City,75,Country 45333,City,75,Country 45375,City,75,Country 45381,City,75,Country 45382,City,75,Country 45387,City,75,Country 45391,City,75,Country 45415,City,75,Country 45417,City,75,Country 45431,City,75,Country 45692,City,75,Country 45696,City,75,Country 45557,City,75,Country 45568,City,75,Country 45571,City,75,Country 45579,City,75,Country 45584,City,75,Country 45614,City,75,Country 45617,City,75,Country 45633,City,75,Country 45641,City,75,Country 45643,City,75,Country 45666,City,75,Country 45714,City,75,Country 45740,City,75,Country 45767,City,75,Country 45776,City,75,Country 45789,City,75,Country 45781,City,75,Country 45790,City,75,Country 45791,City,75,Country 45792,City,75,Country 45874,City,75,Country 45904,City,75,Country 45920,City,75,Country 46655,City,75,Country 45927,City,75,Country 45950,City,75,Country 45982,City,75,Country 46010,City,75,Country 46016,City,75,Country 46020,City,75,Country 46001,City,75,Country 46063,City,75,Country 46052,City,75,Country 46076,City,75,Country 46078,City,75,Country 46106,City,75,Country 46107,City,75,Country 46109,City,75,Country 46132,City,75,Country 46153,City,75,Country 46175,City,75,Country 46213,City,75,Country 46222,City,75,Country 46225,City,75,Country 46237,City,75,Country 46238,City,75,Country 46241,City,75,Country 46269,City,75,Country 46271,City,75,Country 46273,City,75,Country 46282,City,75,Country 46283,City,75,Country 46288,City,75,Country 46293,City,75,Country 46297,City,75,Country 46265,City,75,Country 46369,City,75,Country 46367,City,75,Country 46379,City,75,Country 46381,City,75,Country 46420,City,75,Country 46387,City,75,Country 46434,City,75,Country 46436,City,75,Country 46442,City,75,Country 46443,City,75,Country 46453,City,75,Country 46446,City,75,Country 46450,City,75,Country 46452,City,75,Country 46454,City,75,Country 46492,City,75,Country 46509,City,75,Country 46500,City,75,Country 46544,City,75,Country 46538,City,75,Country 46533,City,75,Country 46577,City,75,Country 46546,City,75,Country 46552,City,75,Country 46570,City,75,Country 46571,City,75,Country 46595,City,75,Country 46596,City,75,Country 46612,City,75,Country 46625,City,75,Country 46660,City,75,Country 46688,City,75,Country 46696,City,75,Country 46706,City,75,Country 46714,City,75,Country 46720,City,75,Country 46789,City,75,Country 46821,City,75,Country 47133,City,75,Country 46924,City,75,Country 46963,City,75,Country 46964,City,75,Country 47027,City,75,Country 47053,City,75,Country 47054,City,75,Country 47083,City,75,Country 47122,City,75,Country 47169,City,75,Country 47213,City,75,Country 47212,City,75,Country 47218,City,75,Country 47227,City,75,Country 47263,City,75,Country 47283,City,75,Country 47285,City,75,Country 47288,City,75,Country 47292,City,75,Country 47303,City,75,Country 47418,City,75,Country 47317,City,75,Country 47321,City,75,Country 47330,City,75,Country 47336,City,75,Country 47337,City,75,Country 47338,City,75,Country 47341,City,75,Country 47378,City,75,Country 47383,City,75,Country 47387,City,75,Country 47416,City,75,Country 47435,City,75,Country 47464,City,75,Country 47483,City,75,Country 47490,City,75,Country 47497,City,75,Country 47509,City,75,Country 47526,City,75,Country 47532,City,75,Country 47590,City,75,Country 47613,City,75,Country 47619,City,75,Country 47633,City,75,Country 47730,City,75,Country 47796,City,75,Country 47810,City,75,Country 47809,City,75,Country 47840,City,75,Country 47857,City,75,Country 48000,City,75,Country 48024,City,75,Country 48005,City,75,Country 48008,City,75,Country 48010,City,75,Country 48016,City,75,Country 39248,City,75,Country 39258,City,75,Country 39263,City,75,Country 39264,City,75,Country 39266,City,75,Country 39268,City,75,Country 39271,City,75,Country 39278,City,75,Country 39289,City,75,Country 39296,City,75,Country 39299,City,75,Country 39321,City,75,Country 39347,City,75,Country 39348,City,75,Country 39359,City,75,Country 39368,City,75,Country 39380,City,75,Country 39382,City,75,Country 39403,City,75,Country 39405,City,75,Country 39404,City,75,Country 39407,City,75,Country 39418,City,75,Country 39434,City,75,Country 39437,City,75,Country 39450,City,75,Country 39453,City,75,Country 39457,City,75,Country 39458,City,75,Country 39463,City,75,Country 39468,City,75,Country 39539,City,75,Country 39472,City,75,Country 39480,City,75,Country 39482,City,75,Country 39498,City,75,Country 39497,City,75,Country 39513,City,75,Country 39516,City,75,Country 39523,City,75,Country 39527,City,75,Country 39528,City,75,Country 39529,City,75,Country 39531,City,75,Country 39532,City,75,Country 39533,City,75,Country 39540,City,75,Country 39542,City,75,Country 39552,City,75,Country 39553,City,75,Country 39555,City,75,Country 39565,City,75,Country 39576,City,75,Country 39589,City,75,Country 39596,City,75,Country 39608,City,75,Country 39649,City,75,Country 39655,City,75,Country 39658,City,75,Country 39662,City,75,Country 39687,City,75,Country 39689,City,75,Country 39691,City,75,Country 39692,City,75,Country 39719,City,75,Country 39757,City,75,Country 39769,City,75,Country 39774,City,75,Country 39780,City,75,Country 39792,City,75,Country 39801,City,75,Country 39802,City,75,Country 39803,City,75,Country 39824,City,75,Country 39827,City,75,Country 39853,City,75,Country 39860,City,75,Country 39866,City,75,Country 39877,City,75,Country 39887,City,75,Country 39894,City,75,Country 40416,City,75,Country 40410,City,75,Country 39906,City,75,Country 39907,City,75,Country 39936,City,75,Country 40427,City,75,Country 40423,City,75,Country 39942,City,75,Country 39945,City,75,Country 39964,City,75,Country 40429,City,75,Country 39979,City,75,Country 39980,City,75,Country 39997,City,75,Country 39998,City,75,Country 40005,City,75,Country 40006,City,75,Country 40008,City,75,Country 40009,City,75,Country 40010,City,75,Country 40015,City,75,Country 40017,City,75,Country 40025,City,75,Country 40030,City,75,Country 40038,City,75,Country 40055,City,75,Country 40062,City,75,Country 40244,City,75,Country 40079,City,75,Country 40093,City,75,Country 40096,City,75,Country 40108,City,75,Country 40115,City,75,Country 40116,City,75,Country 40121,City,75,Country 40122,City,75,Country 40136,City,75,Country 40137,City,75,Country 40138,City,75,Country 40143,City,75,Country 40145,City,75,Country 40146,City,75,Country 40150,City,75,Country 40159,City,75,Country 40164,City,75,Country 40167,City,75,Country 40183,City,75,Country 40184,City,75,Country 40197,City,75,Country 40201,City,75,Country 40216,City,75,Country 40223,City,75,Country 40240,City,75,Country 40255,City,75,Country 40257,City,75,Country 40263,City,75,Country 40265,City,75,Country 40278,City,75,Country 40292,City,75,Country 40295,City,75,Country 40305,City,75,Country 40314,City,75,Country 40322,City,75,Country 40324,City,75,Country 40327,City,75,Country 40340,City,75,Country 40376,City,75,Country 40387,City,75,Country 40391,City,75,Country 40395,City,75,Country 40397,City,75,Country 40398,City,75,Country 40399,City,75,Country 40403,City,75,Country 40407,City,75,Country 40440,City,75,Country 40442,City,75,Country 40451,City,75,Country 40455,City,75,Country 40484,City,75,Country 40487,City,75,Country 40488,City,75,Country 40505,City,75,Country 40523,City,75,Country 40519,City,75,Country 40525,City,75,Country 40532,City,75,Country 40536,City,75,Country 40538,City,75,Country 40546,City,75,Country 40563,City,75,Country 40564,City,75,Country 40570,City,75,Country 40576,City,75,Country 40578,City,75,Country 40581,City,75,Country 40586,City,75,Country 40590,City,75,Country 40591,City,75,Country 40593,City,75,Country 40594,City,75,Country 40596,City,75,Country 40621,City,75,Country 40629,City,75,Country 40632,City,75,Country 40633,City,75,Country 41391,City,75,Country 41392,City,75,Country 40638,City,75,Country 40639,City,75,Country 40641,City,75,Country 40649,City,75,Country 41398,City,75,Country 40663,City,75,Country 41399,City,75,Country 40668,City,75,Country 40679,City,75,Country 40685,City,75,Country 40935,City,75,Country 40705,City,75,Country 40707,City,75,Country 40708,City,75,Country 40715,City,75,Country 40720,City,75,Country 40729,City,75,Country 40731,City,75,Country 40747,City,75,Country 40758,City,75,Country 40764,City,75,Country 40787,City,75,Country 40794,City,75,Country 40795,City,75,Country 40816,City,75,Country 40817,City,75,Country 40827,City,75,Country 40828,City,75,Country 40830,City,75,Country 40950,City,75,Country 40968,City,75,Country 40971,City,75,Country 40976,City,75,Country 40984,City,75,Country 40985,City,75,Country 41006,City,75,Country 40848,City,75,Country 40850,City,75,Country 40853,City,75,Country 40864,City,75,Country 40867,City,75,Country 41013,City,75,Country 41014,City,75,Country 40883,City,75,Country 40886,City,75,Country 40887,City,75,Country 40893,City,75,Country 40905,City,75,Country 41019,City,75,Country 41028,City,75,Country 41029,City,75,Country 41031,City,75,Country 41035,City,75,Country 41072,City,75,Country 41076,City,75,Country 41079,City,75,Country 41080,City,75,Country 41087,City,75,Country 41104,City,75,Country 41111,City,75,Country 41125,City,75,Country 41131,City,75,Country 41144,City,75,Country 41178,City,75,Country 41193,City,75,Country 41202,City,75,Country 41207,City,75,Country 41225,City,75,Country 41233,City,75,Country 41236,City,75,Country 41237,City,75,Country 41238,City,75,Country 41274,City,75,Country 41252,City,75,Country 41261,City,75,Country 41264,City,75,Country 41277,City,75,Country 41283,City,75,Country 41286,City,75,Country 41290,City,75,Country 41348,City,75,Country 41311,City,75,Country 41316,City,75,Country 41354,City,75,Country 41356,City,75,Country 41378,City,75,Country 41379,City,75,Country 41408,City,75,Country 41426,City,75,Country 41443,City,75,Country 41451,City,75,Country 41624,City,75,Country 41636,City,75,Country 41638,City,75,Country 41642,City,75,Country 41477,City,75,Country 41490,City,75,Country 41492,City,75,Country 41507,City,75,Country 41520,City,75,Country 41523,City,75,Country 41535,City,75,Country 41539,City,75,Country 41589,City,75,Country 41594,City,75,Country 48041,City,75,Country 48043,City,75,Country 48050,City,75,Country 48057,City,75,Country 41715,City,75,Country 41718,City,75,Country 41733,City,75,Country 48091,City,75,Country 48099,City,75,Country 48100,City,75,Country 48116,City,75,Country 41747,City,75,Country 41748,City,75,Country 41750,City,75,Country 41754,City,75,Country 41755,City,75,Country 41757,City,75,Country 41758,City,75,Country 41774,City,75,Country 41796,City,75,Country 41815,City,75,Country 41864,City,75,Country 41859,City,75,Country 41882,City,75,Country 41893,City,75,Country 41915,City,75,Country 41929,City,75,Country 41933,City,75,Country 41938,City,75,Country 41972,City,75,Country 41973,City,75,Country 41992,City,75,Country 42009,City,75,Country 42015,City,75,Country 42020,City,75,Country 42027,City,75,Country 42033,City,75,Country 42038,City,75,Country 42045,City,75,Country 42054,City,75,Country 42060,City,75,Country 42294,City,75,Country 42296,City,75,Country 42069,City,75,Country 42071,City,75,Country 42102,City,75,Country 42103,City,75,Country 42124,City,75,Country 42133,City,75,Country 42160,City,75,Country 42164,City,75,Country 42196,City,75,Country 42209,City,75,Country 42287,City,75,Country 42289,City,75,Country 42291,City,75,Country 42272,City,75,Country 42304,City,75,Country 42308,City,75,Country 42333,City,75,Country 42347,City,75,Country 42348,City,75,Country 42367,City,75,Country 42391,City,75,Country 42394,City,75,Country 42399,City,75,Country 42432,City,75,Country 42470,City,75,Country 42475,City,75,Country 42478,City,75,Country 42501,City,75,Country 42512,City,75,Country 42515,City,75,Country 42521,City,75,Country 42533,City,75,Country 42541,City,75,Country 42562,City,75,Country 42585,City,75,Country 42591,City,75,Country 42594,City,75,Country 42686,City,75,Country 42714,City,75,Country 42715,City,75,Country 42717,City,75,Country 42718,City,75,Country 42725,City,75,Country 42747,City,75,Country 42749,City,75,Country 42752,City,75,Country 42784,City,75,Country 42785,City,75,Country 42790,City,75,Country 42811,City,75,Country 42830,City,75,Country 42869,City,75,Country 42851,City,75,Country 42854,City,75,Country 42860,City,75,Country 42861,City,75,Country 42875,City,75,Country 42879,City,75,Country 42887,City,75,Country 42897,City,75,Country 42915,City,75,Country 42930,City,75,Country 42931,City,75,Country 42935,City,75,Country 42941,City,75,Country 42950,City,75,Country 42960,City,75,Country 42961,City,75,Country 42962,City,75,Country 42964,City,75,Country 42966,City,75,Country 42975,City,75,Country 42983,City,75,Country 42989,City,75,Country 42991,City,75,Country 43005,City,75,Country 43006,City,75,Country 43026,City,75,Country 43028,City,75,Country 43040,City,75,Country 43049,City,75,Country 43061,City,75,Country 43068,City,75,Country 43076,City,75,Country 43079,City,75,Country 43081,City,75,Country 43082,City,75,Country 43086,City,75,Country 43089,City,75,Country 43090,City,75,Country 43092,City,75,Country 43111,City,75,Country 43119,City,75,Country 43123,City,75,Country 43127,City,75,Country 43132,City,75,Country 43141,City,75,Country 43148,City,75,Country 43149,City,75,Country 43180,City,75,Country 43188,City,75,Country 43195,City,75,Country 43201,City,75,Country 43204,City,75,Country 43211,City,75,Country 43222,City,75,Country 43244,City,75,Country 43246,City,75,Country 43256,City,75,Country 43259,City,75,Country 43261,City,75,Country 43276,City,75,Country 43304,City,75,Country 43305,City,75,Country 43306,City,75,Country 43318,City,75,Country 43330,City,75,Country 43335,City,75,Country 43340,City,75,Country 43347,City,75,Country 43349,City,75,Country 43687,City,75,Country 43688,City,75,Country 43366,City,75,Country 43435,City,75,Country 43391,City,75,Country 43408,City,75,Country 43417,City,75,Country 43419,City,75,Country 43436,City,75,Country 43438,City,75,Country 43443,City,75,Country 43459,City,75,Country 43465,City,75,Country 43484,City,75,Country 43493,City,75,Country 43498,City,75,Country 43499,City,75,Country 43504,City,75,Country 43512,City,75,Country 43513,City,75,Country 43576,City,75,Country 43592,City,75,Country 43600,City,75,Country 43601,City,75,Country 43604,City,75,Country 43613,City,75,Country 43620,City,75,Country 43628,City,75,Country 43637,City,75,Country 43640,City,75,Country 43642,City,75,Country 43661,City,75,Country 43664,City,75,Country 43665,City,75,Country 43711,City,75,Country 43719,City,75,Country 43721,City,75,Country 43722,City,75,Country 43730,City,75,Country 43755,City,75,Country 43781,City,75,Country 43783,City,75,Country 43791,City,75,Country 43796,City,75,Country 43799,City,75,Country 43803,City,75,Country 43823,City,75,Country 43825,City,75,Country 43832,City,75,Country 43841,City,75,Country 43859,City,75,Country 43907,City,75,Country 43911,City,75,Country 43917,City,75,Country 43937,City,75,Country 43949,City,75,Country 43964,City,75,Country 43963,City,75,Country 43979,City,75,Country 44458,City,75,Country 44460,City,75,Country 43986,City,75,Country 43987,City,75,Country 43995,City,75,Country 44463,City,75,Country 44005,City,75,Country 44473,City,75,Country 44027,City,75,Country 44049,City,75,Country 44057,City,75,Country 44062,City,75,Country 44486,City,75,Country 44069,City,75,Country 44070,City,75,Country 44078,City,75,Country 44080,City,75,Country 44085,City,75,Country 44088,City,75,Country 44089,City,75,Country 44092,City,75,Country 44097,City,75,Country 44128,City,75,Country 44132,City,75,Country 44133,City,75,Country 44140,City,75,Country 44142,City,75,Country 44152,City,75,Country 44150,City,75,Country 44153,City,75,Country 44161,City,75,Country 44167,City,75,Country 44174,City,75,Country 44177,City,75,Country 44187,City,75,Country 44189,City,75,Country 44202,City,75,Country 44205,City,75,Country 44219,City,75,Country 44240,City,75,Country 44249,City,75,Country 44255,City,75,Country 44272,City,75,Country 44286,City,75,Country 44288,City,75,Country 44301,City,75,Country 44306,City,75,Country 44331,City,75,Country 44346,City,75,Country 44356,City,75,Country 44360,City,75,Country 44370,City,75,Country 44387,City,75,Country 44388,City,75,Country 44392,City,75,Country 44393,City,75,Country 44397,City,75,Country 44399,City,75,Country 44411,City,75,Country 44430,City,75,Country 44441,City,75,Country 44445,City,75,Country 44497,City,75,Country 44507,City,75,Country 44508,City,75,Country 44511,City,75,Country 44516,City,75,Country 44520,City,75,Country 44521,City,75,Country 44524,City,75,Country 44525,City,75,Country 44694,City,75,Country 44530,City,75,Country 44531,City,75,Country 44561,City,75,Country 44562,City,75,Country 44566,City,75,Country 44585,City,75,Country 44595,City,75,Country 44597,City,75,Country 44598,City,75,Country 44601,City,75,Country 44606,City,75,Country 44639,City,75,Country 44655,City,75,Country 44657,City,75,Country 44659,City,75,Country 44685,City,75,Country 44711,City,75,Country 44717,City,75,Country 44721,City,75,Country 44739,City,75,Country 44742,City,75,Country 44743,City,75,Country 44750,City,75,Country 44751,City,75,Country 44786,City,75,Country 44811,City,75,Country 44827,City,75,Country 44839,City,75,Country 44840,City,75,Country 44850,City,75,Country 44851,City,75,Country 44859,City,75,Country 44867,City,75,Country 44868,City,75,Country 44877,City,75,Country 44886,City,75,Country 45353,City,75,Country 45357,City,75,Country 45359,City,75,Country 44914,City,75,Country 44922,City,75,Country 44926,City,75,Country 44927,City,75,Country 44928,City,75,Country 44932,City,75,Country 44986,City,75,Country 44949,City,75,Country 44981,City,75,Country 45020,City,75,Country 45132,City,75,Country 45133,City,75,Country 45138,City,75,Country 45147,City,75,Country 45153,City,75,Country 45156,City,75,Country 45162,City,75,Country 45185,City,75,Country 45190,City,75,Country 45199,City,75,Country 45208,City,75,Country 45214,City,75,Country 45234,City,75,Country 45231,City,75,Country 45232,City,75,Country 45242,City,75,Country 45252,City,75,Country 45276,City,75,Country 45304,City,75,Country 45281,City,75,Country 45286,City,75,Country 45317,City,75,Country 45319,City,75,Country 45326,City,75,Country 45340,City,75,Country 45341,City,75,Country 45398,City,75,Country 45433,City,75,Country 45436,City,75,Country 45437,City,75,Country 45446,City,75,Country 45492,City,75,Country 45511,City,75,Country 45518,City,75,Country 45519,City,75,Country 45527,City,75,Country 45532,City,75,Country 45533,City,75,Country 45542,City,75,Country 45544,City,75,Country 45549,City,75,Country 45592,City,75,Country 45621,City,75,Country 45627,City,75,Country 45629,City,75,Country 45632,City,75,Country 45634,City,75,Country 45645,City,75,Country 45662,City,75,Country 45663,City,75,Country 45700,City,75,Country 45701,City,75,Country 45705,City,75,Country 45710,City,75,Country 45729,City,75,Country 45730,City,75,Country 45733,City,75,Country 45745,City,75,Country 45749,City,75,Country 45759,City,75,Country 45771,City,75,Country 45778,City,75,Country 45782,City,75,Country 45788,City,75,Country 45794,City,75,Country 45810,City,75,Country 45825,City,75,Country 45829,City,75,Country 45838,City,75,Country 45855,City,75,Country 45861,City,75,Country 45862,City,75,Country 45865,City,75,Country 45869,City,75,Country 45880,City,75,Country 45898,City,75,Country 45897,City,75,Country 46639,City,75,Country 45923,City,75,Country 46643,City,75,Country 45953,City,75,Country 45954,City,75,Country 45961,City,75,Country 45974,City,75,Country 45981,City,75,Country 45984,City,75,Country 45986,City,75,Country 45992,City,75,Country 46002,City,75,Country 46003,City,75,Country 46012,City,75,Country 46017,City,75,Country 46024,City,75,Country 46030,City,75,Country 46051,City,75,Country 46060,City,75,Country 46065,City,75,Country 46070,City,75,Country 46113,City,75,Country 46092,City,75,Country 46094,City,75,Country 46100,City,75,Country 46103,City,75,Country 46086,City,75,Country 46133,City,75,Country 46143,City,75,Country 46149,City,75,Country 46164,City,75,Country 46155,City,75,Country 46179,City,75,Country 46188,City,75,Country 46210,City,75,Country 46220,City,75,Country 46224,City,75,Country 46195,City,75,Country 46198,City,75,Country 46226,City,75,Country 46228,City,75,Country 46253,City,75,Country 46272,City,75,Country 46277,City,75,Country 46278,City,75,Country 46262,City,75,Country 46305,City,75,Country 46317,City,75,Country 46318,City,75,Country 46326,City,75,Country 46349,City,75,Country 46347,City,75,Country 46348,City,75,Country 46350,City,75,Country 46355,City,75,Country 46332,City,75,Country 46333,City,75,Country 46346,City,75,Country 46389,City,75,Country 46390,City,75,Country 46391,City,75,Country 46392,City,75,Country 46393,City,75,Country 46394,City,75,Country 46403,City,75,Country 46416,City,75,Country 46481,City,75,Country 46421,City,75,Country 46444,City,75,Country 46445,City,75,Country 46438,City,75,Country 46440,City,75,Country 46459,City,75,Country 46467,City,75,Country 46465,City,75,Country 46469,City,75,Country 46473,City,75,Country 46487,City,75,Country 46498,City,75,Country 46499,City,75,Country 46519,City,75,Country 46526,City,75,Country 46532,City,75,Country 46536,City,75,Country 46541,City,75,Country 46542,City,75,Country 46545,City,75,Country 46550,City,75,Country 46551,City,75,Country 46560,City,75,Country 46561,City,75,Country 46563,City,75,Country 46564,City,75,Country 46567,City,75,Country 46568,City,75,Country 46573,City,75,Country 46574,City,75,Country 46587,City,75,Country 46602,City,75,Country 46603,City,75,Country 46605,City,75,Country 46611,City,75,Country 46614,City,75,Country 46615,City,75,Country 46620,City,75,Country 46621,City,75,Country 46627,City,75,Country 46630,City,75,Country 46631,City,75,Country 46633,City,75,Country 46666,City,75,Country 46670,City,75,Country 46676,City,75,Country 46687,City,75,Country 46678,City,75,Country 46681,City,75,Country 46684,City,75,Country 46697,City,75,Country 46701,City,75,Country 46712,City,75,Country 46713,City,75,Country 46723,City,75,Country 46728,City,75,Country 46731,City,75,Country 46733,City,75,Country 46734,City,75,Country 46738,City,75,Country 46748,City,75,Country 46750,City,75,Country 46751,City,75,Country 46759,City,75,Country 46761,City,75,Country 46764,City,75,Country 46770,City,75,Country 46788,City,75,Country 46802,City,75,Country 46804,City,75,Country 46808,City,75,Country 46832,City,75,Country 46833,City,75,Country 46834,City,75,Country 46835,City,75,Country 46837,City,75,Country 46840,City,75,Country 46858,City,75,Country 46862,City,75,Country 46863,City,75,Country 46865,City,75,Country 46869,City,75,Country 46884,City,75,Country 46877,City,75,Country 46907,City,75,Country 46912,City,75,Country 46914,City,75,Country 46919,City,75,Country 46922,City,75,Country 46939,City,75,Country 47141,City,75,Country 46967,City,75,Country 47131,City,75,Country 47006,City,75,Country 47013,City,75,Country 47028,City,75,Country 47042,City,75,Country 47045,City,75,Country 47056,City,75,Country 47068,City,75,Country 47078,City,75,Country 47080,City,75,Country 47081,City,75,Country 47086,City,75,Country 47087,City,75,Country 47088,City,75,Country 47090,City,75,Country 47121,City,75,Country 47152,City,75,Country 47162,City,75,Country 47173,City,75,Country 47179,City,75,Country 47181,City,75,Country 47182,City,75,Country 47188,City,75,Country 47206,City,75,Country 47205,City,75,Country 47209,City,75,Country 47216,City,75,Country 47268,City,75,Country 47269,City,75,Country 47223,City,75,Country 47241,City,75,Country 47251,City,75,Country 47254,City,75,Country 47264,City,75,Country 47291,City,75,Country 47294,City,75,Country 47295,City,75,Country 47296,City,75,Country 47305,City,75,Country 47311,City,75,Country 47344,City,75,Country 47354,City,75,Country 47397,City,75,Country 47364,City,75,Country 47377,City,75,Country 47413,City,75,Country 47430,City,75,Country 47433,City,75,Country 47434,City,75,Country 47438,City,75,Country 47439,City,75,Country 47440,City,75,Country 47442,City,75,Country 47445,City,75,Country 47447,City,75,Country 47517,City,75,Country 47522,City,75,Country 47524,City,75,Country 47547,City,75,Country 47551,City,75,Country 47923,City,75,Country 47568,City,75,Country 47571,City,75,Country 47600,City,75,Country 47929,City,75,Country 47615,City,75,Country 47640,City,75,Country 47653,City,75,Country 47659,City,75,Country 47672,City,75,Country 47679,City,75,Country 47681,City,75,Country 47683,City,75,Country 47688,City,75,Country 47693,City,75,Country 47733,City,75,Country 47742,City,75,Country 47744,City,75,Country 47758,City,75,Country 47768,City,75,Country 47784,City,75,Country 47813,City,75,Country 47828,City,75,Country 47856,City,75,Country 47886,City,75,Country 47934,City,75,Country 47906,City,75,Country 47910,City,75,Country 47911,City,75,Country 47914,City,75,Country 48001,City,75,Country 48007,City,75,Country 48015,City,75,Country 48018,City,75,Country 39236,City,75,Country 39257,City,75,Country 39274,City,75,Country 39276,City,75,Country 39277,City,75,Country 39284,City,75,Country 39305,City,75,Country 39306,City,75,Country 39342,City,75,Country 39341,City,75,Country 39314,City,75,Country 39340,City,75,Country 39388,City,75,Country 39392,City,75,Country 39410,City,75,Country 39447,City,75,Country 39474,City,75,Country 39476,City,75,Country 39475,City,75,Country 39488,City,75,Country 39495,City,75,Country 39526,City,75,Country 39535,City,75,Country 39548,City,75,Country 39549,City,75,Country 39551,City,75,Country 39567,City,75,Country 39577,City,75,Country 39584,City,75,Country 39586,City,75,Country 39591,City,75,Country 39592,City,75,Country 39617,City,75,Country 39625,City,75,Country 39627,City,75,Country 39629,City,75,Country 39632,City,75,Country 39633,City,75,Country 39634,City,75,Country 39643,City,75,Country 39652,City,75,Country 39653,City,75,Country 39681,City,75,Country 39670,City,75,Country 39682,City,75,Country 39688,City,75,Country 39696,City,75,Country 39705,City,75,Country 39706,City,75,Country 39707,City,75,Country 39714,City,75,Country 39715,City,75,Country 39713,City,75,Country 39718,City,75,Country 39720,City,75,Country 39741,City,75,Country 39745,City,75,Country 39746,City,75,Country 39756,City,75,Country 39762,City,75,Country 39763,City,75,Country 39768,City,75,Country 39770,City,75,Country 39778,City,75,Country 39784,City,75,Country 39797,City,75,Country 39830,City,75,Country 39831,City,75,Country 39836,City,75,Country 39850,City,75,Country 39863,City,75,Country 39871,City,75,Country 39878,City,75,Country 39896,City,75,Country 39898,City,75,Country 40412,City,75,Country 39901,City,75,Country 40420,City,75,Country 39913,City,75,Country 39933,City,75,Country 39934,City,75,Country 40428,City,75,Country 39956,City,75,Country 39973,City,75,Country 39982,City,75,Country 39981,City,75,Country 40436,City,75,Country 40003,City,75,Country 40007,City,75,Country 40037,City,75,Country 40039,City,75,Country 40044,City,75,Country 40060,City,75,Country 40063,City,75,Country 40094,City,75,Country 40095,City,75,Country 40107,City,75,Country 40157,City,75,Country 40161,City,75,Country 40171,City,75,Country 40173,City,75,Country 40222,City,75,Country 40234,City,75,Country 40243,City,75,Country 40251,City,75,Country 40256,City,75,Country 40261,City,75,Country 40264,City,75,Country 40275,City,75,Country 40277,City,75,Country 40281,City,75,Country 40302,City,75,Country 40342,City,75,Country 40388,City,75,Country 40408,City,75,Country 40444,City,75,Country 40447,City,75,Country 40450,City,75,Country 40458,City,75,Country 40463,City,75,Country 40464,City,75,Country 40467,City,75,Country 40468,City,75,Country 40474,City,75,Country 40480,City,75,Country 40483,City,75,Country 40497,City,75,Country 40502,City,75,Country 40506,City,75,Country 40509,City,75,Country 40510,City,75,Country 40514,City,75,Country 40526,City,75,Country 40527,City,75,Country 40528,City,75,Country 40533,City,75,Country 40534,City,75,Country 40537,City,75,Country 40539,City,75,Country 40549,City,75,Country 40568,City,75,Country 40575,City,75,Country 40577,City,75,Country 40580,City,75,Country 40583,City,75,Country 40584,City,75,Country 40585,City,75,Country 40587,City,75,Country 40582,City,75,Country 40588,City,75,Country 40589,City,75,Country 40592,City,75,Country 40595,City,75,Country 40597,City,75,Country 40610,City,75,Country 40612,City,75,Country 40613,City,75,Country 40616,City,75,Country 40620,City,75,Country 40623,City,75,Country 40624,City,75,Country 40628,City,75,Country 40625,City,75,Country 40626,City,75,Country 40627,City,75,Country 40637,City,75,Country 41393,City,75,Country 40645,City,75,Country 40654,City,75,Country 40656,City,75,Country 40658,City,75,Country 40684,City,75,Country 40755,City,75,Country 40913,City,75,Country 41023,City,75,Country 41034,City,75,Country 41041,City,75,Country 41042,City,75,Country 41043,City,75,Country 41078,City,75,Country 41091,City,75,Country 41103,City,75,Country 41105,City,75,Country 41106,City,75,Country 41108,City,75,Country 41126,City,75,Country 41133,City,75,Country 41147,City,75,Country 41150,City,75,Country 41153,City,75,Country 41161,City,75,Country 41174,City,75,Country 41187,City,75,Country 41188,City,75,Country 41189,City,75,Country 41190,City,75,Country 41224,City,75,Country 41227,City,75,Country 41256,City,75,Country 41257,City,75,Country 41265,City,75,Country 41296,City,75,Country 41303,City,75,Country 41304,City,75,Country 41364,City,75,Country 41373,City,75,Country 41386,City,75,Country 41441,City,75,Country 41445,City,75,Country 41612,City,75,Country 41614,City,75,Country 41615,City,75,Country 41618,City,75,Country 41631,City,75,Country 41637,City,75,Country 41639,City,75,Country 41645,City,75,Country 41556,City,75,Country 41583,City,75,Country 41578,City,75,Country 41652,City,75,Country 41653,City,75,Country 48031,City,75,Country 41664,City,75,Country 48032,City,75,Country 41681,City,75,Country 41705,City,75,Country 41716,City,75,Country 41719,City,75,Country 41729,City,75,Country 41761,City,75,Country 41760,City,75,Country 41799,City,75,Country 41803,City,75,Country 41819,City,75,Country 41822,City,75,Country 41823,City,75,Country 41832,City,75,Country 41839,City,75,Country 41845,City,75,Country 41860,City,75,Country 41862,City,75,Country 41863,City,75,Country 41867,City,75,Country 41872,City,75,Country 41874,City,75,Country 41875,City,75,Country 41904,City,75,Country 41937,City,75,Country 41984,City,75,Country 41975,City,75,Country 41976,City,75,Country 41981,City,75,Country 42011,City,75,Country 42013,City,75,Country 42014,City,75,Country 42022,City,75,Country 42029,City,75,Country 42036,City,75,Country 42039,City,75,Country 42044,City,75,Country 42047,City,75,Country 42298,City,75,Country 42073,City,75,Country 42075,City,75,Country 42090,City,75,Country 42091,City,75,Country 42097,City,75,Country 42099,City,75,Country 42104,City,75,Country 42128,City,75,Country 42144,City,75,Country 42149,City,75,Country 42150,City,75,Country 42163,City,75,Country 42165,City,75,Country 42168,City,75,Country 42187,City,75,Country 42188,City,75,Country 42195,City,75,Country 42215,City,75,Country 42230,City,75,Country 42341,City,75,Country 42464,City,75,Country 42420,City,75,Country 42469,City,75,Country 42479,City,75,Country 42523,City,75,Country 42548,City,75,Country 42560,City,75,Country 42586,City,75,Country 42598,City,75,Country 42627,City,75,Country 43706,City,75,Country 43704,City,75,Country 42634,City,75,Country 42664,City,75,Country 42665,City,75,Country 42669,City,75,Country 42753,City,75,Country 42772,City,75,Country 48033,City,75,Country 42794,City,75,Country 42827,City,75,Country 48034,City,75,Country 42871,City,75,Country 42872,City,75,Country 42873,City,75,Country 42891,City,75,Country 42894,City,75,Country 42922,City,75,Country 42923,City,75,Country 42924,City,75,Country 42925,City,75,Country 42926,City,75,Country 42927,City,75,Country 42928,City,75,Country 42929,City,75,Country 42939,City,75,Country 42937,City,75,Country 42942,City,75,Country 42943,City,75,Country 42944,City,75,Country 42947,City,75,Country 42949,City,75,Country 42953,City,75,Country 42954,City,75,Country 42955,City,75,Country 42963,City,75,Country 42965,City,75,Country 42971,City,75,Country 42973,City,75,Country 42977,City,75,Country 42978,City,75,Country 42979,City,75,Country 43023,City,75,Country 43025,City,75,Country 43035,City,75,Country 43046,City,75,Country 43047,City,75,Country 43060,City,75,Country 43075,City,75,Country 43077,City,75,Country 43084,City,75,Country 43091,City,75,Country 43093,City,75,Country 43094,City,75,Country 43095,City,75,Country 43096,City,75,Country 43097,City,75,Country 43098,City,75,Country 43104,City,75,Country 43106,City,75,Country 43108,City,75,Country 43109,City,75,Country 43113,City,75,Country 43114,City,75,Country 43116,City,75,Country 43120,City,75,Country 43118,City,75,Country 43126,City,75,Country 43142,City,75,Country 43151,City,75,Country 43156,City,75,Country 43178,City,75,Country 43185,City,75,Country 43190,City,75,Country 43193,City,75,Country 43200,City,75,Country 43206,City,75,Country 43219,City,75,Country 43236,City,75,Country 43279,City,75,Country 43280,City,75,Country 43300,City,75,Country 43301,City,75,Country 43334,City,75,Country 43339,City,75,Country 43683,City,75,Country 43684,City,75,Country 43685,City,75,Country 43363,City,75,Country 43403,City,75,Country 43407,City,75,Country 43428,City,75,Country 43439,City,75,Country 43440,City,75,Country 43445,City,75,Country 43693,City,75,Country 43456,City,75,Country 43695,City,75,Country 43697,City,75,Country 43698,City,75,Country 43699,City,75,Country 43462,City,75,Country 43470,City,75,Country 43475,City,75,Country 43496,City,75,Country 43509,City,75,Country 43518,City,75,Country 43526,City,75,Country 43537,City,75,Country 43547,City,75,Country 43552,City,75,Country 43597,City,75,Country 43605,City,75,Country 43608,City,75,Country 43629,City,75,Country 43652,City,75,Country 43653,City,75,Country 43670,City,75,Country 43672,City,75,Country 43717,City,75,Country 43776,City,75,Country 43792,City,75,Country 43801,City,75,Country 43804,City,75,Country 43814,City,75,Country 43837,City,75,Country 43871,City,75,Country 43882,City,75,Country 43906,City,75,Country 43908,City,75,Country 43909,City,75,Country 43921,City,75,Country 43922,City,75,Country 43932,City,75,Country 43946,City,75,Country 43947,City,75,Country 43953,City,75,Country 43954,City,75,Country 43962,City,75,Country 43971,City,75,Country 43978,City,75,Country 43999,City,75,Country 44013,City,75,Country 44024,City,75,Country 44058,City,75,Country 44061,City,75,Country 44453,City,75,Country 44108,City,75,Country 44071,City,75,Country 44073,City,75,Country 44074,City,75,Country 44090,City,75,Country 44091,City,75,Country 44096,City,75,Country 44098,City,75,Country 44099,City,75,Country 44118,City,75,Country 44123,City,75,Country 44124,City,75,Country 44131,City,75,Country 44137,City,75,Country 44141,City,75,Country 44147,City,75,Country 44164,City,75,Country 44165,City,75,Country 44170,City,75,Country 44172,City,75,Country 44176,City,75,Country 44178,City,75,Country 44180,City,75,Country 44181,City,75,Country 44183,City,75,Country 44191,City,75,Country 44192,City,75,Country 44194,City,75,Country 44196,City,75,Country 44198,City,75,Country 44212,City,75,Country 44216,City,75,Country 44217,City,75,Country 44224,City,75,Country 44226,City,75,Country 44227,City,75,Country 44231,City,75,Country 44239,City,75,Country 44243,City,75,Country 44244,City,75,Country 44247,City,75,Country 44267,City,75,Country 44268,City,75,Country 44269,City,75,Country 44298,City,75,Country 44299,City,75,Country 44300,City,75,Country 44303,City,75,Country 44324,City,75,Country 44305,City,75,Country 44326,City,75,Country 44318,City,75,Country 44319,City,75,Country 44406,City,75,Country 44407,City,75,Country 44424,City,75,Country 44429,City,75,Country 44440,City,75,Country 44442,City,75,Country 44443,City,75,Country 44444,City,75,Country 44495,City,75,Country 44496,City,75,Country 44514,City,75,Country 44518,City,75,Country 44692,City,75,Country 44691,City,75,Country 44698,City,75,Country 44700,City,75,Country 44602,City,75,Country 44683,City,75,Country 44609,City,75,Country 44621,City,75,Country 44715,City,75,Country 44731,City,75,Country 44738,City,75,Country 44741,City,75,Country 44765,City,75,Country 44771,City,75,Country 44779,City,75,Country 44783,City,75,Country 44785,City,75,Country 44792,City,75,Country 44790,City,75,Country 44809,City,75,Country 44814,City,75,Country 44833,City,75,Country 44835,City,75,Country 44836,City,75,Country 44838,City,75,Country 44869,City,75,Country 44871,City,75,Country 44873,City,75,Country 44876,City,75,Country 45343,City,75,Country 44879,City,75,Country 44892,City,75,Country 45349,City,75,Country 45360,City,75,Country 44899,City,75,Country 44929,City,75,Country 44931,City,75,Country 44930,City,75,Country 45366,City,75,Country 44936,City,75,Country 45367,City,75,Country 44944,City,75,Country 44945,City,75,Country 44954,City,75,Country 44968,City,75,Country 44970,City,75,Country 44973,City,75,Country 44993,City,75,Country 44994,City,75,Country 45143,City,75,Country 45159,City,75,Country 45154,City,75,Country 45157,City,75,Country 45179,City,75,Country 45182,City,75,Country 45169,City,75,Country 45207,City,75,Country 45236,City,75,Country 45239,City,75,Country 45241,City,75,Country 45244,City,75,Country 45246,City,75,Country 45264,City,75,Country 45268,City,75,Country 45270,City,75,Country 45272,City,75,Country 45273,City,75,Country 45274,City,75,Country 45278,City,75,Country 45279,City,75,Country 45282,City,75,Country 45318,City,75,Country 45322,City,75,Country 45323,City,75,Country 45324,City,75,Country 45325,City,75,Country 45336,City,75,Country 45337,City,75,Country 45338,City,75,Country 45369,City,75,Country 45386,City,75,Country 45402,City,75,Country 45411,City,75,Country 45412,City,75,Country 45425,City,75,Country 45683,City,75,Country 45684,City,75,Country 45442,City,75,Country 45454,City,75,Country 45695,City,75,Country 45466,City,75,Country 45475,City,75,Country 45480,City,75,Country 45484,City,75,Country 45489,City,75,Country 45502,City,75,Country 45503,City,75,Country 45506,City,75,Country 45507,City,75,Country 45510,City,75,Country 45525,City,75,Country 45530,City,75,Country 45545,City,75,Country 45554,City,75,Country 45555,City,75,Country 45591,City,75,Country 45594,City,75,Country 45596,City,75,Country 45620,City,75,Country 45630,City,75,Country 45640,City,75,Country 45704,City,75,Country 45727,City,75,Country 45735,City,75,Country 45738,City,75,Country 45739,City,75,Country 45746,City,75,Country 45747,City,75,Country 45751,City,75,Country 45758,City,75,Country 45795,City,75,Country 45807,City,75,Country 45811,City,75,Country 45834,City,75,Country 45892,City,75,Country 45848,City,75,Country 45851,City,75,Country 45853,City,75,Country 45854,City,75,Country 45856,City,75,Country 45871,City,75,Country 45881,City,75,Country 45918,City,75,Country 45924,City,75,Country 45926,City,75,Country 45946,City,75,Country 45948,City,75,Country 45935,City,75,Country 45951,City,75,Country 46043,City,75,Country 45964,City,75,Country 45965,City,75,Country 45966,City,75,Country 45967,City,75,Country 45968,City,75,Country 45958,City,75,Country 46044,City,75,Country 45975,City,75,Country 46031,City,75,Country 46034,City,75,Country 46038,City,75,Country 46054,City,75,Country 46067,City,75,Country 46071,City,75,Country 46081,City,75,Country 46090,City,75,Country 46104,City,75,Country 46110,City,75,Country 46111,City,75,Country 46126,City,75,Country 46165,City,75,Country 46140,City,75,Country 46146,City,75,Country 46151,City,75,Country 46170,City,75,Country 46180,City,75,Country 46181,City,75,Country 46194,City,75,Country 46200,City,75,Country 46208,City,75,Country 46232,City,75,Country 46249,City,75,Country 46274,City,75,Country 46280,City,75,Country 46263,City,75,Country 46306,City,75,Country 46357,City,75,Country 46359,City,75,Country 46360,City,75,Country 46366,City,75,Country 46375,City,75,Country 46395,City,75,Country 46404,City,75,Country 46406,City,75,Country 46407,City,75,Country 46418,City,75,Country 46480,City,75,Country 46458,City,75,Country 46460,City,75,Country 46470,City,75,Country 46490,City,75,Country 46531,City,75,Country 46566,City,75,Country 46569,City,75,Country 46580,City,75,Country 46609,City,75,Country 46683,City,75,Country 46694,City,75,Country 46709,City,75,Country 46722,City,75,Country 46892,City,75,Country 46744,City,75,Country 46749,City,75,Country 46753,City,75,Country 46762,City,75,Country 46763,City,75,Country 46768,City,75,Country 46769,City,75,Country 46771,City,75,Country 46792,City,75,Country 46793,City,75,Country 46794,City,75,Country 46831,City,75,Country 46854,City,75,Country 46859,City,75,Country 46861,City,75,Country 46864,City,75,Country 46873,City,75,Country 46890,City,75,Country 47132,City,75,Country 46921,City,75,Country 46929,City,75,Country 47137,City,75,Country 47138,City,75,Country 46949,City,75,Country 47144,City,75,Country 46960,City,75,Country 46972,City,75,Country 47129,City,75,Country 47150,City,75,Country 46984,City,75,Country 46991,City,75,Country 47036,City,75,Country 47050,City,75,Country 47051,City,75,Country 47055,City,75,Country 47063,City,75,Country 47067,City,75,Country 47116,City,75,Country 47126,City,75,Country 47177,City,75,Country 47178,City,75,Country 47180,City,75,Country 47191,City,75,Country 47215,City,75,Country 47273,City,75,Country 47274,City,75,Country 47259,City,75,Country 47304,City,75,Country 47315,City,75,Country 47316,City,75,Country 47319,City,75,Country 47323,City,75,Country 47324,City,75,Country 47389,City,75,Country 47361,City,75,Country 47370,City,75,Country 47382,City,75,Country 47420,City,75,Country 47448,City,75,Country 47452,City,75,Country 47455,City,75,Country 47466,City,75,Country 47470,City,75,Country 47472,City,75,Country 47473,City,75,Country 47480,City,75,Country 47484,City,75,Country 47487,City,75,Country 47498,City,75,Country 47499,City,75,Country 47518,City,75,Country 47544,City,75,Country 47550,City,75,Country 47566,City,75,Country 47577,City,75,Country 47927,City,75,Country 47581,City,75,Country 47594,City,75,Country 47597,City,75,Country 47601,City,75,Country 47610,City,75,Country 47611,City,75,Country 47616,City,75,Country 47631,City,75,Country 47650,City,75,Country 47933,City,75,Country 47661,City,75,Country 47664,City,75,Country 47663,City,75,Country 47665,City,75,Country 47676,City,75,Country 47680,City,75,Country 47704,City,75,Country 47715,City,75,Country 47735,City,75,Country 47736,City,75,Country 47737,City,75,Country 47743,City,75,Country 47748,City,75,Country 47753,City,75,Country 47755,City,75,Country 47756,City,75,Country 47761,City,75,Country 47771,City,75,Country 47770,City,75,Country 47769,City,75,Country 47772,City,75,Country 47775,City,75,Country 47779,City,75,Country 47781,City,75,Country 47780,City,75,Country 47782,City,75,Country 47765,City,75,Country 47787,City,75,Country 47791,City,75,Country 47816,City,75,Country 47820,City,75,Country 47821,City,75,Country 47842,City,75,Country 47851,City,75,Country 47884,City,75,Country 47885,City,75,Country 39234,City,75,Country 39265,City,75,Country 39270,City,75,Country 39272,City,75,Country 39297,City,75,Country 39330,City,75,Country 39357,City,75,Country 39371,City,75,Country 39378,City,75,Country 39386,City,75,Country 39389,City,75,Country 39395,City,75,Country 39396,City,75,Country 39402,City,75,Country 39433,City,75,Country 39445,City,75,Country 39538,City,75,Country 39484,City,75,Country 39499,City,75,Country 39505,City,75,Country 39525,City,75,Country 39554,City,75,Country 39583,City,75,Country 39579,City,75,Country 39641,City,75,Country 39668,City,75,Country 39680,City,75,Country 39697,City,75,Country 39739,City,75,Country 39754,City,75,Country 39755,City,75,Country 39777,City,75,Country 39771,City,75,Country 39798,City,75,Country 39807,City,75,Country 39810,City,75,Country 39815,City,75,Country 39833,City,75,Country 39835,City,75,Country 39842,City,75,Country 39845,City,75,Country 39847,City,75,Country 39852,City,75,Country 39854,City,75,Country 39873,City,75,Country 39876,City,75,Country 39883,City,75,Country 39893,City,75,Country 40411,City,75,Country 40419,City,75,Country 39926,City,75,Country 39929,City,75,Country 39938,City,75,Country 39972,City,75,Country 39983,City,75,Country 40046,City,75,Country 40051,City,75,Country 40087,City,75,Country 40110,City,75,Country 40130,City,75,Country 40148,City,75,Country 40152,City,75,Country 40154,City,75,Country 40156,City,75,Country 40160,City,75,Country 40175,City,75,Country 40185,City,75,Country 40202,City,75,Country 40209,City,75,Country 40217,City,75,Country 40230,City,75,Country 40235,City,75,Country 40248,City,75,Country 40250,City,75,Country 40284,City,75,Country 40286,City,75,Country 40364,City,75,Country 40318,City,75,Country 40319,City,75,Country 40326,City,75,Country 40366,City,75,Country 40498,City,75,Country 40507,City,75,Country 40520,City,75,Country 40557,City,75,Country 40572,City,75,Country 41394,City,75,Country 40673,City,75,Country 40677,City,75,Country 40682,City,75,Country 40692,City,75,Country 40693,City,75,Country 40699,City,75,Country 40712,City,75,Country 40727,City,75,Country 40728,City,75,Country 40735,City,75,Country 40743,City,75,Country 40753,City,75,Country 40752,City,75,Country 40763,City,75,Country 40776,City,75,Country 40948,City,75,Country 40947,City,75,Country 40939,City,75,Country 40940,City,75,Country 40952,City,75,Country 40975,City,75,Country 40834,City,75,Country 40838,City,75,Country 40854,City,75,Country 40856,City,75,Country 40871,City,75,Country 41011,City,75,Country 40872,City,75,Country 41018,City,75,Country 40885,City,75,Country 40924,City,75,Country 41048,City,75,Country 41056,City,75,Country 41293,City,75,Country 41114,City,75,Country 41119,City,75,Country 41120,City,75,Country 41146,City,75,Country 41148,City,75,Country 41151,City,75,Country 41152,City,75,Country 41172,City,75,Country 41173,City,75,Country 41197,City,75,Country 41198,City,75,Country 41203,City,75,Country 41206,City,75,Country 41210,City,75,Country 41288,City,75,Country 41223,City,75,Country 41228,City,75,Country 41230,City,75,Country 41248,City,75,Country 41298,City,75,Country 41328,City,75,Country 41362,City,75,Country 41440,City,75,Country 41453,City,75,Country 41633,City,75,Country 41606,City,75,Country 41454,City,75,Country 41494,City,75,Country 41505,City,75,Country 41525,City,75,Country 41531,City,75,Country 41562,City,75,Country 41567,City,75,Country 41571,City,75,Country 41596,City,75,Country 48045,City,75,Country 48048,City,75,Country 41679,City,75,Country 41689,City,75,Country 41698,City,75,Country 48105,City,75,Country 48112,City,75,Country 48124,City,75,Country 41768,City,75,Country 41788,City,75,Country 42001,City,75,Country 41798,City,75,Country 41821,City,75,Country 41898,City,75,Country 41905,City,75,Country 41926,City,75,Country 41940,City,75,Country 41954,City,75,Country 41957,City,75,Country 41969,City,75,Country 41978,City,75,Country 42064,City,75,Country 42067,City,75,Country 42080,City,75,Country 42300,City,75,Country 42109,City,75,Country 42137,City,75,Country 42138,City,75,Country 42203,City,75,Country 42225,City,75,Country 42277,City,75,Country 42280,City,75,Country 42241,City,75,Country 42284,City,75,Country 42342,City,75,Country 42373,City,75,Country 42456,City,75,Country 42486,City,75,Country 42488,City,75,Country 42509,City,75,Country 42524,City,75,Country 42526,City,75,Country 42530,City,75,Country 42537,City,75,Country 42545,City,75,Country 42582,City,75,Country 42583,City,75,Country 42584,City,75,Country 42590,City,75,Country 42600,City,75,Country 42630,City,75,Country 42633,City,75,Country 42637,City,75,Country 42639,City,75,Country 42640,City,75,Country 42641,City,75,Country 42644,City,75,Country 42646,City,75,Country 42647,City,75,Country 42656,City,75,Country 42675,City,75,Country 42677,City,75,Country 42678,City,75,Country 42694,City,75,Country 42695,City,75,Country 42680,City,75,Country 42682,City,75,Country 42684,City,75,Country 42685,City,75,Country 42700,City,75,Country 42703,City,75,Country 42706,City,75,Country 42705,City,75,Country 42727,City,75,Country 42734,City,75,Country 42737,City,75,Country 42748,City,75,Country 42746,City,75,Country 42765,City,75,Country 42766,City,75,Country 42778,City,75,Country 42774,City,75,Country 42777,City,75,Country 42776,City,75,Country 42779,City,75,Country 42787,City,75,Country 42788,City,75,Country 42791,City,75,Country 42801,City,75,Country 42802,City,75,Country 42803,City,75,Country 42805,City,75,Country 42822,City,75,Country 42806,City,75,Country 42809,City,75,Country 42810,City,75,Country 42831,City,75,Country 42832,City,75,Country 42835,City,75,Country 42836,City,75,Country 42837,City,75,Country 42838,City,75,Country 42842,City,75,Country 42843,City,75,Country 42859,City,75,Country 42864,City,75,Country 42870,City,75,Country 42882,City,75,Country 42880,City,75,Country 42884,City,75,Country 42886,City,75,Country 42895,City,75,Country 42896,City,75,Country 42901,City,75,Country 42906,City,75,Country 42909,City,75,Country 42968,City,75,Country 43002,City,75,Country 43004,City,75,Country 43008,City,75,Country 43067,City,75,Country 43085,City,75,Country 43107,City,75,Country 43129,City,75,Country 43136,City,75,Country 43140,City,75,Country 43143,City,75,Country 43158,City,75,Country 43162,City,75,Country 43176,City,75,Country 43186,City,75,Country 43187,City,75,Country 43191,City,75,Country 43203,City,75,Country 43197,City,75,Country 43209,City,75,Country 43210,City,75,Country 43213,City,75,Country 43214,City,75,Country 43215,City,75,Country 43216,City,75,Country 43218,City,75,Country 43221,City,75,Country 43223,City,75,Country 43229,City,75,Country 43245,City,75,Country 43248,City,75,Country 43251,City,75,Country 43260,City,75,Country 43266,City,75,Country 43267,City,75,Country 43272,City,75,Country 43281,City,75,Country 43285,City,75,Country 43309,City,75,Country 43332,City,75,Country 43344,City,75,Country 43372,City,75,Country 43379,City,75,Country 43384,City,75,Country 43385,City,75,Country 43395,City,75,Country 43397,City,75,Country 43402,City,75,Country 43404,City,75,Country 43411,City,75,Country 43422,City,75,Country 43425,City,75,Country 43427,City,75,Country 43429,City,75,Country 43430,City,75,Country 43481,City,75,Country 43507,City,75,Country 43540,City,75,Country 43543,City,75,Country 43548,City,75,Country 43559,City,75,Country 43621,City,75,Country 43606,City,75,Country 43612,City,75,Country 43632,City,75,Country 43635,City,75,Country 43676,City,75,Country 43660,City,75,Country 43714,City,75,Country 43712,City,75,Country 43734,City,75,Country 43741,City,75,Country 43759,City,75,Country 43766,City,75,Country 43768,City,75,Country 43782,City,75,Country 43926,City,75,Country 43830,City,75,Country 43844,City,75,Country 43867,City,75,Country 43878,City,75,Country 43913,City,75,Country 43915,City,75,Country 43950,City,75,Country 43961,City,75,Country 43969,City,75,Country 43970,City,75,Country 43980,City,75,Country 43977,City,75,Country 43991,City,75,Country 44022,City,75,Country 44483,City,75,Country 44029,City,75,Country 44031,City,75,Country 44485,City,75,Country 44102,City,75,Country 44104,City,75,Country 44115,City,75,Country 44134,City,75,Country 44146,City,75,Country 44169,City,75,Country 44195,City,75,Country 44197,City,75,Country 44218,City,75,Country 44232,City,75,Country 44241,City,75,Country 44264,City,75,Country 44266,City,75,Country 44292,City,75,Country 44297,City,75,Country 44309,City,75,Country 44315,City,75,Country 44330,City,75,Country 44342,City,75,Country 44371,City,75,Country 44382,City,75,Country 44389,City,75,Country 44390,City,75,Country 44391,City,75,Country 44413,City,75,Country 44417,City,75,Country 44418,City,75,Country 44426,City,75,Country 44434,City,75,Country 44494,City,75,Country 44499,City,75,Country 44506,City,75,Country 44536,City,75,Country 44572,City,75,Country 44596,City,75,Country 44624,City,75,Country 44645,City,75,Country 44652,City,75,Country 44654,City,75,Country 44656,City,75,Country 44672,City,75,Country 44673,City,75,Country 44678,City,75,Country 44682,City,75,Country 44684,City,75,Country 44686,City,75,Country 44687,City,75,Country 44689,City,75,Country 44727,City,75,Country 44737,City,75,Country 44788,City,75,Country 44803,City,75,Country 44828,City,75,Country 44843,City,75,Country 44861,City,75,Country 44849,City,75,Country 44855,City,75,Country 44872,City,75,Country 44887,City,75,Country 44916,City,75,Country 44978,City,75,Country 44982,City,75,Country 45011,City,75,Country 45170,City,75,Country 45206,City,75,Country 45218,City,75,Country 45223,City,75,Country 45224,City,75,Country 45227,City,75,Country 45230,City,75,Country 45249,City,75,Country 45271,City,75,Country 45302,City,75,Country 45306,City,75,Country 45308,City,75,Country 45289,City,75,Country 45299,City,75,Country 45372,City,75,Country 45388,City,75,Country 45453,City,75,Country 45458,City,75,Country 45463,City,75,Country 45482,City,75,Country 45485,City,75,Country 45546,City,75,Country 45550,City,75,Country 45656,City,75,Country 45615,City,75,Country 45625,City,75,Country 45628,City,75,Country 45636,City,75,Country 45657,City,75,Country 45667,City,75,Country 45703,City,75,Country 45711,City,75,Country 45760,City,75,Country 45762,City,75,Country 45756,City,75,Country 45784,City,75,Country 45785,City,75,Country 45806,City,75,Country 45814,City,75,Country 45823,City,75,Country 45836,City,75,Country 45857,City,75,Country 45858,City,75,Country 45872,City,75,Country 45873,City,75,Country 45875,City,75,Country 45877,City,75,Country 45883,City,75,Country 45896,City,75,Country 45901,City,75,Country 46647,City,75,Country 46648,City,75,Country 46652,City,75,Country 45931,City,75,Country 45933,City,75,Country 45934,City,75,Country 45942,City,75,Country 45944,City,75,Country 45971,City,75,Country 45977,City,75,Country 45978,City,75,Country 45983,City,75,Country 45991,City,75,Country 46046,City,75,Country 46004,City,75,Country 46007,City,75,Country 46021,City,75,Country 46025,City,75,Country 46027,City,75,Country 46033,City,75,Country 46036,City,75,Country 46048,City,75,Country 46049,City,75,Country 46055,City,75,Country 46056,City,75,Country 46057,City,75,Country 46058,City,75,Country 46059,City,75,Country 46062,City,75,Country 46080,City,75,Country 46087,City,75,Country 46097,City,75,Country 46108,City,75,Country 46120,City,75,Country 46124,City,75,Country 46139,City,75,Country 46141,City,75,Country 46168,City,75,Country 46169,City,75,Country 46178,City,75,Country 46182,City,75,Country 46190,City,75,Country 46211,City,75,Country 46215,City,75,Country 46217,City,75,Country 46203,City,75,Country 46204,City,75,Country 46207,City,75,Country 46227,City,75,Country 46230,City,75,Country 46231,City,75,Country 46256,City,75,Country 46254,City,75,Country 46255,City,75,Country 46257,City,75,Country 46258,City,75,Country 46281,City,75,Country 46285,City,75,Country 46286,City,75,Country 46302,City,75,Country 46307,City,75,Country 46308,City,75,Country 46327,City,75,Country 46354,City,75,Country 46331,City,75,Country 46335,City,75,Country 46338,City,75,Country 46336,City,75,Country 46345,City,75,Country 46358,City,75,Country 46365,City,75,Country 46385,City,75,Country 46382,City,75,Country 46398,City,75,Country 46415,City,75,Country 46478,City,75,Country 46423,City,75,Country 46424,City,75,Country 46425,City,75,Country 46437,City,75,Country 46439,City,75,Country 46447,City,75,Country 46429,City,75,Country 46474,City,75,Country 46488,City,75,Country 46512,City,75,Country 46520,City,75,Country 46524,City,75,Country 46578,City,75,Country 46590,City,75,Country 46606,City,75,Country 46616,City,75,Country 46617,City,75,Country 46665,City,75,Country 46674,City,75,Country 46679,City,75,Country 46682,City,75,Country 46689,City,75,Country 46690,City,75,Country 46695,City,75,Country 46700,City,75,Country 46703,City,75,Country 46721,City,75,Country 46724,City,75,Country 46729,City,75,Country 46752,City,75,Country 46760,City,75,Country 46805,City,75,Country 46820,City,75,Country 46852,City,75,Country 46857,City,75,Country 46871,City,75,Country 46872,City,75,Country 46915,City,75,Country 46917,City,75,Country 47146,City,75,Country 47149,City,75,Country 46999,City,75,Country 47005,City,75,Country 47025,City,75,Country 47057,City,75,Country 47062,City,75,Country 47069,City,75,Country 47070,City,75,Country 47071,City,75,Country 47072,City,75,Country 47073,City,75,Country 47092,City,75,Country 47112,City,75,Country 47194,City,75,Country 47196,City,75,Country 47203,City,75,Country 47252,City,75,Country 47253,City,75,Country 47255,City,75,Country 47276,City,75,Country 47277,City,75,Country 47282,City,75,Country 47302,City,75,Country 47342,City,75,Country 47343,City,75,Country 47347,City,75,Country 47355,City,75,Country 47356,City,75,Country 47396,City,75,Country 47401,City,75,Country 47367,City,75,Country 47373,City,75,Country 47411,City,75,Country 47449,City,75,Country 47454,City,75,Country 47458,City,75,Country 47489,City,75,Country 47507,City,75,Country 47515,City,75,Country 47520,City,75,Country 47528,City,75,Country 47531,City,75,Country 47549,City,75,Country 47562,City,75,Country 47576,City,75,Country 47606,City,75,Country 47609,City,75,Country 47618,City,75,Country 47642,City,75,Country 47658,City,75,Country 47662,City,75,Country 47678,City,75,Country 47696,City,75,Country 47703,City,75,Country 47707,City,75,Country 47722,City,75,Country 47729,City,75,Country 47823,City,75,Country 47855,City,75,Country 47887,City,75,Country 47888,City,75,Country 47921,City,75,Country 48019,City,75,Country 48020,City,75,Country 39294,City,75,Country 39322,City,75,Country 39323,City,75,Country 39335,City,75,Country 39334,City,75,Country 39337,City,75,Country 39424,City,75,Country 39429,City,75,Country 39432,City,75,Country 39446,City,75,Country 39470,City,75,Country 39489,City,75,Country 39550,City,75,Country 39566,City,75,Country 39578,City,75,Country 39622,City,75,Country 39626,City,75,Country 39628,City,75,Country 39631,City,75,Country 39669,City,75,Country 39712,City,75,Country 39721,City,75,Country 39759,City,75,Country 39772,City,75,Country 39779,City,75,Country 39783,City,75,Country 39785,City,75,Country 39855,City,75,Country 39857,City,75,Country 39864,City,75,Country 39886,City,75,Country 40413,City,75,Country 40414,City,75,Country 39903,City,75,Country 39905,City,75,Country 39909,City,75,Country 39935,City,75,Country 39959,City,75,Country 39960,City,75,Country 39977,City,75,Country 40029,City,75,Country 40059,City,75,Country 40105,City,75,Country 40109,City,75,Country 40125,City,75,Country 40127,City,75,Country 40139,City,75,Country 40141,City,75,Country 40149,City,75,Country 40165,City,75,Country 40258,City,75,Country 40273,City,75,Country 40300,City,75,Country 40313,City,75,Country 40441,City,75,Country 40443,City,75,Country 40448,City,75,Country 40446,City,75,Country 40453,City,75,Country 40454,City,75,Country 40456,City,75,Country 40459,City,75,Country 40472,City,75,Country 40473,City,75,Country 40481,City,75,Country 40501,City,75,Country 40512,City,75,Country 40517,City,75,Country 40524,City,75,Country 40540,City,75,Country 40551,City,75,Country 40552,City,75,Country 40554,City,75,Country 40555,City,75,Country 40558,City,75,Country 40561,City,75,Country 40562,City,75,Country 40571,City,75,Country 40574,City,75,Country 40579,City,75,Country 40609,City,75,Country 40617,City,75,Country 40618,City,75,Country 41396,City,75,Country 40666,City,75,Country 40800,City,75,Country 40961,City,75,Country 40964,City,75,Country 40960,City,75,Country 40969,City,75,Country 40970,City,75,Country 40977,City,75,Country 40892,City,75,Country 40926,City,75,Country 40929,City,75,Country 41020,City,75,Country 41083,City,75,Country 41092,City,75,Country 41097,City,75,Country 41155,City,75,Country 41194,City,75,Country 41211,City,75,Country 41221,City,75,Country 41269,City,75,Country 41358,City,75,Country 41359,City,75,Country 41363,City,75,Country 41634,City,75,Country 41647,City,75,Country 41478,City,75,Country 41566,City,75,Country 41569,City,75,Country 48061,City,75,Country 41666,City,75,Country 41677,City,75,Country 41678,City,75,Country 48068,City,75,Country 48117,City,75,Country 41752,City,75,Country 41753,City,75,Country 41756,City,75,Country 48035,City,75,Country 41767,City,75,Country 41789,City,75,Country 41817,City,75,Country 41829,City,75,Country 41835,City,75,Country 41907,City,75,Country 41909,City,75,Country 41910,City,75,Country 41919,City,75,Country 41985,City,75,Country 41996,City,75,Country 42031,City,75,Country 42037,City,75,Country 42048,City,75,Country 42041,City,75,Country 42050,City,75,Country 42052,City,75,Country 42293,City,75,Country 42092,City,75,Country 42093,City,75,Country 42098,City,75,Country 42130,City,75,Country 42134,City,75,Country 42136,City,75,Country 42148,City,75,Country 42169,City,75,Country 42184,City,75,Country 42186,City,75,Country 42190,City,75,Country 42233,City,75,Country 42234,City,75,Country 42213,City,75,Country 42214,City,75,Country 42261,City,75,Country 42351,City,75,Country 42448,City,75,Country 42510,City,75,Country 42542,City,75,Country 42558,City,75,Country 42559,City,75,Country 42570,City,75,Country 42625,City,75,Country 43701,City,75,Country 43702,City,75,Country 43707,City,75,Country 42632,City,75,Country 42636,City,75,Country 42660,City,75,Country 42643,City,75,Country 42649,City,75,Country 42662,City,75,Country 42663,City,75,Country 42666,City,75,Country 42670,City,75,Country 42708,City,75,Country 42712,City,75,Country 42713,City,75,Country 42721,City,75,Country 42722,City,75,Country 42723,City,75,Country 42729,City,75,Country 42730,City,75,Country 42732,City,75,Country 42733,City,75,Country 42755,City,75,Country 42761,City,75,Country 42763,City,75,Country 42767,City,75,Country 42786,City,75,Country 42792,City,75,Country 42807,City,75,Country 42813,City,75,Country 42826,City,75,Country 42828,City,75,Country 42829,City,75,Country 42833,City,75,Country 42834,City,75,Country 42857,City,75,Country 42865,City,75,Country 42866,City,75,Country 42867,City,75,Country 42868,City,75,Country 42878,City,75,Country 42888,City,75,Country 42898,City,75,Country 42902,City,75,Country 42903,City,75,Country 42904,City,75,Country 42905,City,75,Country 42916,City,75,Country 42917,City,75,Country 42956,City,75,Country 42980,City,75,Country 42987,City,75,Country 43056,City,75,Country 43050,City,75,Country 43059,City,75,Country 43065,City,75,Country 43099,City,75,Country 43125,City,75,Country 43128,City,75,Country 43146,City,75,Country 43147,City,75,Country 43150,City,75,Country 43152,City,75,Country 43153,City,75,Country 43154,City,75,Country 43155,City,75,Country 43157,City,75,Country 43164,City,75,Country 43212,City,75,Country 43217,City,75,Country 43225,City,75,Country 43237,City,75,Country 43238,City,75,Country 43255,City,75,Country 43262,City,75,Country 43275,City,75,Country 43283,City,75,Country 43286,City,75,Country 43292,City,75,Country 43294,City,75,Country 43296,City,75,Country 43297,City,75,Country 43314,City,75,Country 43316,City,75,Country 43317,City,75,Country 43320,City,75,Country 43326,City,75,Country 43356,City,75,Country 43364,City,75,Country 43365,City,75,Country 43370,City,75,Country 43371,City,75,Country 43373,City,75,Country 43374,City,75,Country 43376,City,75,Country 43381,City,75,Country 43393,City,75,Country 43413,City,75,Country 43414,City,75,Country 43416,City,75,Country 43420,City,75,Country 43431,City,75,Country 43450,City,75,Country 43536,City,75,Country 43586,City,75,Country 43588,City,75,Country 43609,City,75,Country 43639,City,75,Country 43733,City,75,Country 43751,City,75,Country 43754,City,75,Country 43760,City,75,Country 43763,City,75,Country 43764,City,75,Country 43765,City,75,Country 43773,City,75,Country 43777,City,75,Country 43780,City,75,Country 43838,City,75,Country 43883,City,75,Country 43884,City,75,Country 43885,City,75,Country 43886,City,75,Country 43887,City,75,Country 43888,City,75,Country 43889,City,75,Country 43890,City,75,Country 43891,City,75,Country 43892,City,75,Country 43893,City,75,Country 43894,City,75,Country 43895,City,75,Country 43896,City,75,Country 43897,City,75,Country 43898,City,75,Country 43899,City,75,Country 43900,City,75,Country 43901,City,75,Country 43902,City,75,Country 43903,City,75,Country 43904,City,75,Country 43905,City,75,Country 43916,City,75,Country 43943,City,75,Country 43959,City,75,Country 43972,City,75,Country 43973,City,75,Country 44462,City,75,Country 44003,City,75,Country 44007,City,75,Country 44468,City,75,Country 44475,City,75,Country 44059,City,75,Country 44060,City,75,Country 44079,City,75,Country 44087,City,75,Country 44125,City,75,Country 44139,City,75,Country 44186,City,75,Country 44229,City,75,Country 44234,City,75,Country 44238,City,75,Country 44296,City,75,Country 44304,City,75,Country 44355,City,75,Country 44359,City,75,Country 44362,City,75,Country 44381,City,75,Country 44386,City,75,Country 44400,City,75,Country 44401,City,75,Country 44504,City,75,Country 44693,City,75,Country 44587,City,75,Country 44608,City,75,Country 44649,City,75,Country 44648,City,75,Country 44666,City,75,Country 44735,City,75,Country 44749,City,75,Country 44747,City,75,Country 44748,City,75,Country 44752,City,75,Country 44753,City,75,Country 44764,City,75,Country 44831,City,75,Country 44834,City,75,Country 44846,City,75,Country 45345,City,75,Country 44882,City,75,Country 44883,City,75,Country 44885,City,75,Country 45346,City,75,Country 45351,City,75,Country 44898,City,75,Country 44911,City,75,Country 44923,City,75,Country 44924,City,75,Country 44925,City,75,Country 44934,City,75,Country 44935,City,75,Country 44953,City,75,Country 44963,City,75,Country 44969,City,75,Country 44974,City,75,Country 44996,City,75,Country 44997,City,75,Country 45163,City,75,Country 45233,City,75,Country 45229,City,75,Country 45266,City,75,Country 45316,City,75,Country 45314,City,75,Country 45315,City,75,Country 45339,City,75,Country 45421,City,75,Country 45690,City,75,Country 45449,City,75,Country 45486,City,75,Country 45509,City,75,Country 45537,City,75,Country 45538,City,75,Country 45558,City,75,Country 45559,City,75,Country 45560,City,75,Country 45588,City,75,Country 45589,City,75,Country 45590,City,75,Country 45593,City,75,Country 45597,City,75,Country 45618,City,75,Country 45624,City,75,Country 45637,City,75,Country 45638,City,75,Country 45699,City,75,Country 45715,City,75,Country 45754,City,75,Country 45755,City,75,Country 45761,City,75,Country 45770,City,75,Country 45803,City,75,Country 45805,City,75,Country 45817,City,75,Country 45837,City,75,Country 45893,City,75,Country 45845,City,75,Country 45846,City,75,Country 45849,City,75,Country 45889,City,75,Country 45905,City,75,Country 46650,City,75,Country 46654,City,75,Country 46037,City,75,Country 46047,City,75,Country 46082,City,75,Country 46085,City,75,Country 46122,City,75,Country 46166,City,75,Country 46128,City,75,Country 46136,City,75,Country 46150,City,75,Country 46167,City,75,Country 46185,City,75,Country 46191,City,75,Country 46197,City,75,Country 46199,City,75,Country 46235,City,75,Country 46239,City,75,Country 46242,City,75,Country 46270,City,75,Country 46276,City,75,Country 46292,City,75,Country 46266,City,75,Country 46322,City,75,Country 46325,City,75,Country 46329,City,75,Country 46339,City,75,Country 46343,City,75,Country 46344,City,75,Country 46410,City,75,Country 46413,City,75,Country 46428,City,75,Country 46494,City,75,Country 46511,City,75,Country 46522,City,75,Country 46523,City,75,Country 46543,City,75,Country 46588,City,75,Country 46589,City,75,Country 46600,City,75,Country 46610,City,75,Country 46634,City,75,Country 46661,City,75,Country 46662,City,75,Country 46663,City,75,Country 46675,City,75,Country 46705,City,75,Country 46715,City,75,Country 46718,City,75,Country 46732,City,75,Country 46735,City,75,Country 46745,City,75,Country 46766,City,75,Country 46780,City,75,Country 46816,City,75,Country 46844,City,75,Country 46856,City,75,Country 46923,City,75,Country 47139,City,75,Country 46951,City,75,Country 47145,City,75,Country 46966,City,75,Country 46982,City,75,Country 46992,City,75,Country 47002,City,75,Country 47009,City,75,Country 47010,City,75,Country 47030,City,75,Country 47031,City,75,Country 47032,City,75,Country 47046,City,75,Country 47048,City,75,Country 47052,City,75,Country 47095,City,75,Country 47155,City,75,Country 47164,City,75,Country 47172,City,75,Country 47174,City,75,Country 47176,City,75,Country 47202,City,75,Country 47270,City,75,Country 47229,City,75,Country 47312,City,75,Country 47331,City,75,Country 47332,City,75,Country 47335,City,75,Country 47348,City,75,Country 47366,City,75,Country 47421,City,75,Country 47451,City,75,Country 47459,City,75,Country 47467,City,75,Country 47476,City,75,Country 47485,City,75,Country 47500,City,75,Country 47506,City,75,Country 47554,City,75,Country 47560,City,75,Country 47561,City,75,Country 47564,City,75,Country 47565,City,75,Country 47580,City,75,Country 47587,City,75,Country 47596,City,75,Country 47627,City,75,Country 47652,City,75,Country 47673,City,75,Country 47674,City,75,Country 47709,City,75,Country 47728,City,75,Country 47740,City,75,Country 47747,City,75,Country 47760,City,75,Country 47762,City,75,Country 47814,City,75,Country 47849,City,75,Country 47854,City,75,Country 47869,City,75,Country 47870,City,75,Country 47897,City,75,Country 47900,City,75,Country 23461,City,82,Country 23464,City,82,Country 23469,City,82,Country 23471,City,82,Country 23472,City,82,Country 23475,City,82,Country 23477,City,82,Country 23480,City,82,Country 23482,City,82,Country 23495,City,82,Country 23498,City,82,Country 23517,City,82,Country 23519,City,82,Country 23520,City,82,Country 23523,City,82,Country 23528,City,82,Country 23532,City,82,Country 23534,City,82,Country 23541,City,82,Country 23544,City,82,Country 23548,City,82,Country 23557,City,82,Country 23561,City,82,Country 23562,City,82,Country 23566,City,82,Country 23582,City,82,Country 23584,City,82,Country 23612,City,82,Country 23615,City,82,Country 23619,City,82,Country 23623,City,82,Country 23624,City,82,Country 23628,City,82,Country 23634,City,82,Country 23650,City,82,Country 23651,City,82,Country 23710,City,82,Country 23711,City,82,Country 23712,City,82,Country 23713,City,82,Country 23717,City,82,Country 23720,City,82,Country 23721,City,82,Country 23730,City,82,Country 23738,City,82,Country 23758,City,82,Country 23763,City,82,Country 23779,City,82,Country 23781,City,82,Country 23787,City,82,Country 23805,City,82,Country 23830,City,82,Country 23835,City,82,Country 23847,City,82,Country 23849,City,82,Country 23851,City,82,Country 23874,City,82,Country 23863,City,82,Country 23876,City,82,Country 23891,City,82,Country 23879,City,82,Country 23881,City,82,Country 23883,City,82,Country 23886,City,82,Country 23888,City,82,Country 23895,City,82,Country 23897,City,82,Country 23899,City,82,Country 23902,City,82,Country 23904,City,82,Country 23906,City,82,Country 23910,City,82,Country 23913,City,82,Country 23915,City,82,Country 23919,City,82,Country 23945,City,82,Country 23995,City,82,Country 23996,City,82,Country 24006,City,82,Country 24014,City,82,Country 24030,City,82,Country 24038,City,82,Country 24040,City,82,Country 24052,City,82,Country 24058,City,82,Country 24059,City,82,Country 24072,City,82,Country 24078,City,82,Country 24088,City,82,Country 24095,City,82,Country 24096,City,82,Country 24114,City,82,Country 24115,City,82,Country 24118,City,82,Country 24121,City,82,Country 24123,City,82,Country 24128,City,82,Country 24130,City,82,Country 24134,City,82,Country 24152,City,82,Country 24153,City,82,Country 24158,City,82,Country 24161,City,82,Country 24173,City,82,Country 24174,City,82,Country 24187,City,82,Country 24462,City,82,Country 24463,City,82,Country 24203,City,82,Country 24210,City,82,Country 24211,City,82,Country 24467,City,82,Country 24222,City,82,Country 24223,City,82,Country 24226,City,82,Country 24229,City,82,Country 24232,City,82,Country 24470,City,82,Country 24236,City,82,Country 24476,City,82,Country 24481,City,82,Country 24483,City,82,Country 24484,City,82,Country 24268,City,82,Country 24271,City,82,Country 24364,City,82,Country 24289,City,82,Country 24302,City,82,Country 24314,City,82,Country 24325,City,82,Country 24327,City,82,Country 24351,City,82,Country 24371,City,82,Country 24377,City,82,Country 24380,City,82,Country 24386,City,82,Country 24387,City,82,Country 24400,City,82,Country 24495,City,82,Country 24496,City,82,Country 24497,City,82,Country 24498,City,82,Country 24429,City,82,Country 24434,City,82,Country 24443,City,82,Country 24505,City,82,Country 24519,City,82,Country 24540,City,82,Country 24557,City,82,Country 24559,City,82,Country 24585,City,82,Country 24604,City,82,Country 24607,City,82,Country 24611,City,82,Country 24614,City,82,Country 24620,City,82,Country 24619,City,82,Country 24630,City,82,Country 24631,City,82,Country 24635,City,82,Country 24649,City,82,Country 24650,City,82,Country 24651,City,82,Country 24652,City,82,Country 24653,City,82,Country 24668,City,82,Country 24677,City,82,Country 24683,City,82,Country 24704,City,82,Country 24710,City,82,Country 24712,City,82,Country 24717,City,82,Country 24729,City,82,Country 24733,City,82,Country 24739,City,82,Country 24742,City,82,Country 24743,City,82,Country 24744,City,82,Country 24803,City,82,Country 24749,City,82,Country 24750,City,82,Country 24782,City,82,Country 24785,City,82,Country 24809,City,82,Country 24786,City,82,Country 24811,City,82,Country 24787,City,82,Country 24812,City,82,Country 24789,City,82,Country 24824,City,82,Country 24825,City,82,Country 24826,City,82,Country 24828,City,82,Country 24833,City,82,Country 24834,City,82,Country 24838,City,82,Country 24841,City,82,Country 24843,City,82,Country 24861,City,82,Country 24864,City,82,Country 24867,City,82,Country 24873,City,82,Country 24878,City,82,Country 24888,City,82,Country 24891,City,82,Country 24905,City,82,Country 24911,City,82,Country 24916,City,82,Country 24925,City,82,Country 24931,City,82,Country 24934,City,82,Country 24947,City,82,Country 24953,City,82,Country 24956,City,82,Country 24979,City,82,Country 24988,City,82,Country 24991,City,82,Country 24992,City,82,Country 24999,City,82,Country 25002,City,82,Country 25005,City,82,Country 25007,City,82,Country 25011,City,82,Country 25015,City,82,Country 25016,City,82,Country 25017,City,82,Country 25019,City,82,Country 25024,City,82,Country 25028,City,82,Country 25033,City,82,Country 25044,City,82,Country 25046,City,82,Country 25057,City,82,Country 25059,City,82,Country 25061,City,82,Country 25066,City,82,Country 25069,City,82,Country 25070,City,82,Country 25074,City,82,Country 25079,City,82,Country 25080,City,82,Country 25099,City,82,Country 25101,City,82,Country 25106,City,82,Country 25107,City,82,Country 25118,City,82,Country 25127,City,82,Country 25153,City,82,Country 25159,City,82,Country 25168,City,82,Country 25170,City,82,Country 25181,City,82,Country 25188,City,82,Country 25203,City,82,Country 25205,City,82,Country 25206,City,82,Country 25208,City,82,Country 25239,City,82,Country 25240,City,82,Country 25242,City,82,Country 25258,City,82,Country 25260,City,82,Country 25261,City,82,Country 25266,City,82,Country 25267,City,82,Country 25268,City,82,Country 25276,City,82,Country 25288,City,82,Country 25301,City,82,Country 25302,City,82,Country 25307,City,82,Country 25329,City,82,Country 25319,City,82,Country 25345,City,82,Country 25346,City,82,Country 25347,City,82,Country 25348,City,82,Country 25349,City,82,Country 25354,City,82,Country 25355,City,82,Country 25774,City,82,Country 25387,City,82,Country 25405,City,82,Country 25407,City,82,Country 25408,City,82,Country 25420,City,82,Country 25421,City,82,Country 25426,City,82,Country 25436,City,82,Country 25444,City,82,Country 25449,City,82,Country 25462,City,82,Country 25484,City,82,Country 25494,City,82,Country 25507,City,82,Country 25776,City,82,Country 25537,City,82,Country 25538,City,82,Country 25541,City,82,Country 25779,City,82,Country 25784,City,82,Country 25546,City,82,Country 25550,City,82,Country 25553,City,82,Country 25556,City,82,Country 25557,City,82,Country 25563,City,82,Country 25565,City,82,Country 25588,City,82,Country 25599,City,82,Country 25654,City,82,Country 25657,City,82,Country 25617,City,82,Country 25671,City,82,Country 25700,City,82,Country 25718,City,82,Country 25742,City,82,Country 25743,City,82,Country 25746,City,82,Country 25792,City,82,Country 25754,City,82,Country 25756,City,82,Country 25764,City,82,Country 25765,City,82,Country 25801,City,82,Country 25769,City,82,Country 25824,City,82,Country 25831,City,82,Country 25840,City,82,Country 25865,City,82,Country 25900,City,82,Country 25901,City,82,Country 25916,City,82,Country 25921,City,82,Country 25928,City,82,Country 25965,City,82,Country 25937,City,82,Country 25949,City,82,Country 25952,City,82,Country 26297,City,82,Country 25960,City,82,Country 25968,City,82,Country 25971,City,82,Country 25982,City,82,Country 25987,City,82,Country 25994,City,82,Country 25995,City,82,Country 26003,City,82,Country 26010,City,82,Country 26014,City,82,Country 26019,City,82,Country 26031,City,82,Country 26041,City,82,Country 26044,City,82,Country 26057,City,82,Country 26058,City,82,Country 26060,City,82,Country 26065,City,82,Country 26076,City,82,Country 26086,City,82,Country 26088,City,82,Country 26106,City,82,Country 26112,City,82,Country 26117,City,82,Country 26120,City,82,Country 26138,City,82,Country 26150,City,82,Country 26158,City,82,Country 26160,City,82,Country 26164,City,82,Country 26173,City,82,Country 26299,City,82,Country 26182,City,82,Country 26306,City,82,Country 26191,City,82,Country 26193,City,82,Country 26216,City,82,Country 26242,City,82,Country 26247,City,82,Country 26315,City,82,Country 26256,City,82,Country 26257,City,82,Country 26260,City,82,Country 26266,City,82,Country 26271,City,82,Country 26331,City,82,Country 26332,City,82,Country 26333,City,82,Country 26334,City,82,Country 26344,City,82,Country 26345,City,82,Country 26353,City,82,Country 26357,City,82,Country 26359,City,82,Country 26361,City,82,Country 26366,City,82,Country 26368,City,82,Country 26370,City,82,Country 26376,City,82,Country 26377,City,82,Country 26378,City,82,Country 26380,City,82,Country 26383,City,82,Country 26388,City,82,Country 26391,City,82,Country 26399,City,82,Country 26400,City,82,Country 26416,City,82,Country 26417,City,82,Country 26421,City,82,Country 26425,City,82,Country 26426,City,82,Country 26446,City,82,Country 26466,City,82,Country 26463,City,82,Country 26481,City,82,Country 26506,City,82,Country 26508,City,82,Country 26510,City,82,Country 26514,City,82,Country 26520,City,82,Country 26521,City,82,Country 26551,City,82,Country 26571,City,82,Country 26575,City,82,Country 26587,City,82,Country 26592,City,82,Country 26594,City,82,Country 26598,City,82,Country 26599,City,82,Country 26600,City,82,Country 26603,City,82,Country 26612,City,82,Country 26621,City,82,Country 26622,City,82,Country 26625,City,82,Country 26639,City,82,Country 26654,City,82,Country 26688,City,82,Country 26703,City,82,Country 26709,City,82,Country 26711,City,82,Country 26819,City,82,Country 26821,City,82,Country 26823,City,82,Country 26824,City,82,Country 26831,City,82,Country 26718,City,82,Country 26721,City,82,Country 26724,City,82,Country 26725,City,82,Country 26735,City,82,Country 26741,City,82,Country 26744,City,82,Country 26752,City,82,Country 26768,City,82,Country 26789,City,82,Country 26853,City,82,Country 26856,City,82,Country 26799,City,82,Country 26800,City,82,Country 26859,City,82,Country 26807,City,82,Country 26872,City,82,Country 26876,City,82,Country 26877,City,82,Country 26905,City,82,Country 26906,City,82,Country 26912,City,82,Country 26913,City,82,Country 26916,City,82,Country 26960,City,82,Country 26961,City,82,Country 26963,City,82,Country 26965,City,82,Country 26970,City,82,Country 26975,City,82,Country 26976,City,82,Country 26979,City,82,Country 26981,City,82,Country 26985,City,82,Country 27012,City,82,Country 27014,City,82,Country 27020,City,82,Country 27024,City,82,Country 27025,City,82,Country 27026,City,82,Country 27047,City,82,Country 27051,City,82,Country 27053,City,82,Country 27065,City,82,Country 27070,City,82,Country 27076,City,82,Country 27116,City,82,Country 27124,City,82,Country 27190,City,82,Country 27129,City,82,Country 27193,City,82,Country 27147,City,82,Country 27148,City,82,Country 27197,City,82,Country 27157,City,82,Country 27154,City,82,Country 27199,City,82,Country 27163,City,82,Country 27231,City,82,Country 27232,City,82,Country 27240,City,82,Country 27256,City,82,Country 27259,City,82,Country 27265,City,82,Country 27269,City,82,Country 27283,City,82,Country 27286,City,82,Country 27337,City,82,Country 27338,City,82,Country 27342,City,82,Country 27345,City,82,Country 27346,City,82,Country 27356,City,82,Country 27359,City,82,Country 27369,City,82,Country 27379,City,82,Country 27388,City,82,Country 27406,City,82,Country 27416,City,82,Country 27421,City,82,Country 27429,City,82,Country 27449,City,82,Country 27450,City,82,Country 27444,City,82,Country 27452,City,82,Country 27453,City,82,Country 27463,City,82,Country 27480,City,82,Country 27485,City,82,Country 27556,City,82,Country 27558,City,82,Country 27559,City,82,Country 27573,City,82,Country 27575,City,82,Country 27517,City,82,Country 27528,City,82,Country 27579,City,82,Country 27582,City,82,Country 27531,City,82,Country 27533,City,82,Country 27589,City,82,Country 27595,City,82,Country 27598,City,82,Country 27599,City,82,Country 27600,City,82,Country 27602,City,82,Country 27537,City,82,Country 27606,City,82,Country 27538,City,82,Country 27539,City,82,Country 27619,City,82,Country 27627,City,82,Country 27544,City,82,Country 27546,City,82,Country 27547,City,82,Country 27549,City,82,Country 27635,City,82,Country 27646,City,82,Country 27658,City,82,Country 27659,City,82,Country 27660,City,82,Country 27662,City,82,Country 27663,City,82,Country 27664,City,82,Country 27665,City,82,Country 27666,City,82,Country 27668,City,82,Country 27669,City,82,Country 27670,City,82,Country 27672,City,82,Country 27678,City,82,Country 27705,City,82,Country 27711,City,82,Country 27718,City,82,Country 27717,City,82,Country 27727,City,82,Country 27728,City,82,Country 27733,City,82,Country 27734,City,82,Country 27746,City,82,Country 27747,City,82,Country 27757,City,82,Country 27766,City,82,Country 27768,City,82,Country 27778,City,82,Country 27813,City,82,Country 27844,City,82,Country 27863,City,82,Country 27875,City,82,Country 27876,City,82,Country 27880,City,82,Country 27888,City,82,Country 27921,City,82,Country 27926,City,82,Country 27938,City,82,Country 27940,City,82,Country 27955,City,82,Country 27944,City,82,Country 27968,City,82,Country 27971,City,82,Country 27973,City,82,Country 27983,City,82,Country 27986,City,82,Country 27988,City,82,Country 27989,City,82,Country 27990,City,82,Country 27995,City,82,Country 28004,City,82,Country 28008,City,82,Country 28020,City,82,Country 28022,City,82,Country 28024,City,82,Country 28025,City,82,Country 28026,City,82,Country 28036,City,82,Country 28037,City,82,Country 28040,City,82,Country 28045,City,82,Country 28056,City,82,Country 28060,City,82,Country 28063,City,82,Country 28075,City,82,Country 28085,City,82,Country 28090,City,82,Country 28094,City,82,Country 28096,City,82,Country 28097,City,82,Country 28100,City,82,Country 30545,City,82,Country 30546,City,82,Country 30547,City,82,Country 30548,City,82,Country 28118,City,82,Country 28120,City,82,Country 28129,City,82,Country 28131,City,82,Country 28144,City,82,Country 28148,City,82,Country 28160,City,82,Country 28164,City,82,Country 30549,City,82,Country 30550,City,82,Country 30551,City,82,Country 28177,City,82,Country 28180,City,82,Country 28192,City,82,Country 28201,City,82,Country 28202,City,82,Country 28272,City,82,Country 28276,City,82,Country 28280,City,82,Country 28284,City,82,Country 28289,City,82,Country 28291,City,82,Country 28293,City,82,Country 28294,City,82,Country 28296,City,82,Country 28313,City,82,Country 28320,City,82,Country 28327,City,82,Country 28328,City,82,Country 28335,City,82,Country 28448,City,82,Country 28463,City,82,Country 28470,City,82,Country 28479,City,82,Country 28495,City,82,Country 28498,City,82,Country 28500,City,82,Country 28524,City,82,Country 28536,City,82,Country 28538,City,82,Country 28541,City,82,Country 28553,City,82,Country 28578,City,82,Country 28583,City,82,Country 28596,City,82,Country 28604,City,82,Country 28611,City,82,Country 28613,City,82,Country 28623,City,82,Country 28634,City,82,Country 28636,City,82,Country 28638,City,82,Country 28642,City,82,Country 28651,City,82,Country 28663,City,82,Country 28692,City,82,Country 28694,City,82,Country 28705,City,82,Country 28706,City,82,Country 28716,City,82,Country 28717,City,82,Country 28731,City,82,Country 28734,City,82,Country 28739,City,82,Country 28750,City,82,Country 28807,City,82,Country 28767,City,82,Country 28770,City,82,Country 28771,City,82,Country 28824,City,82,Country 28830,City,82,Country 28833,City,82,Country 28856,City,82,Country 28862,City,82,Country 28866,City,82,Country 28870,City,82,Country 28874,City,82,Country 28879,City,82,Country 28880,City,82,Country 28886,City,82,Country 28887,City,82,Country 28893,City,82,Country 28896,City,82,Country 28897,City,82,Country 28908,City,82,Country 28917,City,82,Country 28919,City,82,Country 28925,City,82,Country 28930,City,82,Country 28949,City,82,Country 28960,City,82,Country 28964,City,82,Country 28976,City,82,Country 28977,City,82,Country 28978,City,82,Country 28983,City,82,Country 29010,City,82,Country 29103,City,82,Country 29013,City,82,Country 29104,City,82,Country 29106,City,82,Country 29108,City,82,Country 29133,City,82,Country 29019,City,82,Country 29021,City,82,Country 29024,City,82,Country 29028,City,82,Country 29031,City,82,Country 29033,City,82,Country 29036,City,82,Country 29037,City,82,Country 29095,City,82,Country 29096,City,82,Country 29047,City,82,Country 29048,City,82,Country 29056,City,82,Country 29065,City,82,Country 29086,City,82,Country 29088,City,82,Country 29092,City,82,Country 29093,City,82,Country 29097,City,82,Country 29141,City,82,Country 29143,City,82,Country 29148,City,82,Country 29157,City,82,Country 29175,City,82,Country 29196,City,82,Country 29201,City,82,Country 29206,City,82,Country 29212,City,82,Country 29226,City,82,Country 29227,City,82,Country 29236,City,82,Country 29238,City,82,Country 29239,City,82,Country 29241,City,82,Country 29245,City,82,Country 29246,City,82,Country 29250,City,82,Country 29493,City,82,Country 29277,City,82,Country 29284,City,82,Country 29291,City,82,Country 29301,City,82,Country 29305,City,82,Country 29334,City,82,Country 29345,City,82,Country 29352,City,82,Country 29360,City,82,Country 29369,City,82,Country 29370,City,82,Country 29381,City,82,Country 29382,City,82,Country 29389,City,82,Country 29394,City,82,Country 29402,City,82,Country 29405,City,82,Country 29409,City,82,Country 29410,City,82,Country 29450,City,82,Country 29432,City,82,Country 29455,City,82,Country 29444,City,82,Country 29445,City,82,Country 29446,City,82,Country 29447,City,82,Country 29466,City,82,Country 29470,City,82,Country 29473,City,82,Country 29477,City,82,Country 29509,City,82,Country 29698,City,82,Country 29514,City,82,Country 29516,City,82,Country 29525,City,82,Country 29526,City,82,Country 29533,City,82,Country 29557,City,82,Country 29558,City,82,Country 29559,City,82,Country 29565,City,82,Country 29610,City,82,Country 29619,City,82,Country 29627,City,82,Country 29628,City,82,Country 29664,City,82,Country 29676,City,82,Country 29681,City,82,Country 29704,City,82,Country 29705,City,82,Country 29690,City,82,Country 29694,City,82,Country 30555,City,82,Country 29712,City,82,Country 29733,City,82,Country 29734,City,82,Country 30559,City,82,Country 29737,City,82,Country 29740,City,82,Country 29742,City,82,Country 29747,City,82,Country 29757,City,82,Country 29758,City,82,Country 29761,City,82,Country 29763,City,82,Country 29764,City,82,Country 29765,City,82,Country 29766,City,82,Country 29772,City,82,Country 29775,City,82,Country 29778,City,82,Country 29790,City,82,Country 29804,City,82,Country 29810,City,82,Country 29828,City,82,Country 29835,City,82,Country 29852,City,82,Country 29853,City,82,Country 29866,City,82,Country 29868,City,82,Country 29888,City,82,Country 29889,City,82,Country 29874,City,82,Country 29894,City,82,Country 29916,City,82,Country 29922,City,82,Country 29923,City,82,Country 29928,City,82,Country 29932,City,82,Country 29940,City,82,Country 29945,City,82,Country 29947,City,82,Country 29954,City,82,Country 29963,City,82,Country 29965,City,82,Country 29968,City,82,Country 29972,City,82,Country 29973,City,82,Country 29985,City,82,Country 30004,City,82,Country 30009,City,82,Country 30026,City,82,Country 30437,City,82,Country 30059,City,82,Country 30061,City,82,Country 30071,City,82,Country 30079,City,82,Country 30081,City,82,Country 30082,City,82,Country 30083,City,82,Country 30092,City,82,Country 30093,City,82,Country 30100,City,82,Country 30101,City,82,Country 30102,City,82,Country 30104,City,82,Country 30108,City,82,Country 30112,City,82,Country 30122,City,82,Country 30113,City,82,Country 30144,City,82,Country 30149,City,82,Country 30158,City,82,Country 30166,City,82,Country 30178,City,82,Country 30188,City,82,Country 30208,City,82,Country 30216,City,82,Country 30218,City,82,Country 30237,City,82,Country 30251,City,82,Country 30257,City,82,Country 30260,City,82,Country 30264,City,82,Country 30273,City,82,Country 30283,City,82,Country 30285,City,82,Country 30298,City,82,Country 30308,City,82,Country 30326,City,82,Country 30330,City,82,Country 30334,City,82,Country 30364,City,82,Country 30374,City,82,Country 30375,City,82,Country 30386,City,82,Country 30397,City,82,Country 30398,City,82,Country 30445,City,82,Country 30452,City,82,Country 30422,City,82,Country 30423,City,82,Country 30460,City,82,Country 30433,City,82,Country 30434,City,82,Country 30463,City,82,Country 30466,City,82,Country 30484,City,82,Country 30487,City,82,Country 30488,City,82,Country 30508,City,82,Country 30530,City,82,Country 30532,City,82,Country 30535,City,82,Country 23466,City,82,Country 23467,City,82,Country 23468,City,82,Country 23474,City,82,Country 23481,City,82,Country 23483,City,82,Country 23484,City,82,Country 23485,City,82,Country 23491,City,82,Country 23496,City,82,Country 23499,City,82,Country 23509,City,82,Country 23510,City,82,Country 23511,City,82,Country 23516,City,82,Country 23518,City,82,Country 23521,City,82,Country 23522,City,82,Country 23524,City,82,Country 23525,City,82,Country 23526,City,82,Country 23527,City,82,Country 23529,City,82,Country 23531,City,82,Country 23536,City,82,Country 23543,City,82,Country 23545,City,82,Country 23546,City,82,Country 23547,City,82,Country 23550,City,82,Country 23558,City,82,Country 23559,City,82,Country 23560,City,82,Country 23583,City,82,Country 23587,City,82,Country 23595,City,82,Country 23599,City,82,Country 23607,City,82,Country 23608,City,82,Country 23610,City,82,Country 23614,City,82,Country 23616,City,82,Country 23618,City,82,Country 23620,City,82,Country 23622,City,82,Country 23630,City,82,Country 23639,City,82,Country 23638,City,82,Country 23641,City,82,Country 23643,City,82,Country 23645,City,82,Country 23646,City,82,Country 23647,City,82,Country 23648,City,82,Country 23649,City,82,Country 23653,City,82,Country 23666,City,82,Country 23667,City,82,Country 23668,City,82,Country 23672,City,82,Country 23679,City,82,Country 23681,City,82,Country 23684,City,82,Country 23687,City,82,Country 23689,City,82,Country 23690,City,82,Country 23692,City,82,Country 23697,City,82,Country 23700,City,82,Country 23701,City,82,Country 23702,City,82,Country 23703,City,82,Country 23704,City,82,Country 23708,City,82,Country 23749,City,82,Country 23715,City,82,Country 23716,City,82,Country 23718,City,82,Country 23722,City,82,Country 23723,City,82,Country 23725,City,82,Country 23728,City,82,Country 23729,City,82,Country 23731,City,82,Country 23735,City,82,Country 23740,City,82,Country 23743,City,82,Country 23745,City,82,Country 23747,City,82,Country 23751,City,82,Country 23752,City,82,Country 23754,City,82,Country 23755,City,82,Country 23757,City,82,Country 24458,City,82,Country 23759,City,82,Country 23760,City,82,Country 23761,City,82,Country 23769,City,82,Country 23772,City,82,Country 23774,City,82,Country 23778,City,82,Country 23792,City,82,Country 23795,City,82,Country 23799,City,82,Country 23801,City,82,Country 23804,City,82,Country 23813,City,82,Country 23816,City,82,Country 23819,City,82,Country 23843,City,82,Country 23850,City,82,Country 23870,City,82,Country 23871,City,82,Country 23878,City,82,Country 23882,City,82,Country 23887,City,82,Country 23889,City,82,Country 23903,City,82,Country 23905,City,82,Country 23907,City,82,Country 23916,City,82,Country 23917,City,82,Country 23924,City,82,Country 24460,City,82,Country 23954,City,82,Country 23957,City,82,Country 23960,City,82,Country 23966,City,82,Country 23967,City,82,Country 23968,City,82,Country 23969,City,82,Country 23970,City,82,Country 23975,City,82,Country 24002,City,82,Country 24009,City,82,Country 24013,City,82,Country 24022,City,82,Country 24023,City,82,Country 24024,City,82,Country 24025,City,82,Country 24027,City,82,Country 24035,City,82,Country 24043,City,82,Country 24044,City,82,Country 24046,City,82,Country 24048,City,82,Country 24060,City,82,Country 24062,City,82,Country 24064,City,82,Country 24065,City,82,Country 24068,City,82,Country 24085,City,82,Country 24089,City,82,Country 24097,City,82,Country 24099,City,82,Country 24100,City,82,Country 24102,City,82,Country 24103,City,82,Country 24113,City,82,Country 24122,City,82,Country 24127,City,82,Country 24136,City,82,Country 24142,City,82,Country 24143,City,82,Country 24146,City,82,Country 24148,City,82,Country 24149,City,82,Country 24151,City,82,Country 24157,City,82,Country 24162,City,82,Country 24163,City,82,Country 24164,City,82,Country 24183,City,82,Country 24461,City,82,Country 24190,City,82,Country 24464,City,82,Country 24201,City,82,Country 24206,City,82,Country 24207,City,82,Country 24209,City,82,Country 24212,City,82,Country 24214,City,82,Country 24215,City,82,Country 24227,City,82,Country 24233,City,82,Country 24234,City,82,Country 24277,City,82,Country 24283,City,82,Country 24303,City,82,Country 24306,City,82,Country 24307,City,82,Country 24311,City,82,Country 24312,City,82,Country 24323,City,82,Country 24353,City,82,Country 24354,City,82,Country 24355,City,82,Country 24356,City,82,Country 24359,City,82,Country 24360,City,82,Country 24361,City,82,Country 24375,City,82,Country 24376,City,82,Country 24378,City,82,Country 24381,City,82,Country 24383,City,82,Country 24384,City,82,Country 24385,City,82,Country 24487,City,82,Country 24388,City,82,Country 24489,City,82,Country 24394,City,82,Country 24395,City,82,Country 24411,City,82,Country 24412,City,82,Country 24413,City,82,Country 24416,City,82,Country 24417,City,82,Country 24418,City,82,Country 24420,City,82,Country 24421,City,82,Country 24422,City,82,Country 24423,City,82,Country 24424,City,82,Country 24425,City,82,Country 24427,City,82,Country 24428,City,82,Country 24430,City,82,Country 24432,City,82,Country 24503,City,82,Country 24436,City,82,Country 24438,City,82,Country 24439,City,82,Country 24440,City,82,Country 24446,City,82,Country 24451,City,82,Country 24452,City,82,Country 24508,City,82,Country 24456,City,82,Country 24512,City,82,Country 24529,City,82,Country 24530,City,82,Country 24534,City,82,Country 24536,City,82,Country 24544,City,82,Country 24550,City,82,Country 24562,City,82,Country 24574,City,82,Country 24598,City,82,Country 24610,City,82,Country 24615,City,82,Country 24616,City,82,Country 24618,City,82,Country 24632,City,82,Country 24634,City,82,Country 24648,City,82,Country 24656,City,82,Country 24663,City,82,Country 24666,City,82,Country 24676,City,82,Country 24688,City,82,Country 24678,City,82,Country 24679,City,82,Country 24680,City,82,Country 24681,City,82,Country 24682,City,82,Country 24684,City,82,Country 24685,City,82,Country 24691,City,82,Country 24693,City,82,Country 24694,City,82,Country 24695,City,82,Country 24696,City,82,Country 24702,City,82,Country 24707,City,82,Country 24709,City,82,Country 24794,City,82,Country 24724,City,82,Country 24730,City,82,Country 24731,City,82,Country 24732,City,82,Country 24735,City,82,Country 24737,City,82,Country 24740,City,82,Country 24751,City,82,Country 24778,City,82,Country 24784,City,82,Country 24814,City,82,Country 24816,City,82,Country 24821,City,82,Country 24823,City,82,Country 24829,City,82,Country 24830,City,82,Country 24835,City,82,Country 24837,City,82,Country 24842,City,82,Country 24846,City,82,Country 24850,City,82,Country 24853,City,82,Country 24856,City,82,Country 24863,City,82,Country 24868,City,82,Country 24870,City,82,Country 24872,City,82,Country 24874,City,82,Country 24879,City,82,Country 24880,City,82,Country 24881,City,82,Country 24882,City,82,Country 24883,City,82,Country 24884,City,82,Country 24885,City,82,Country 24886,City,82,Country 24887,City,82,Country 24889,City,82,Country 24896,City,82,Country 24898,City,82,Country 24900,City,82,Country 24901,City,82,Country 24902,City,82,Country 24906,City,82,Country 24923,City,82,Country 24928,City,82,Country 24932,City,82,Country 24938,City,82,Country 24943,City,82,Country 24952,City,82,Country 24954,City,82,Country 24957,City,82,Country 24965,City,82,Country 24966,City,82,Country 24975,City,82,Country 24983,City,82,Country 24990,City,82,Country 24995,City,82,Country 24998,City,82,Country 25001,City,82,Country 25004,City,82,Country 25013,City,82,Country 25025,City,82,Country 25029,City,82,Country 25032,City,82,Country 25034,City,82,Country 25035,City,82,Country 25040,City,82,Country 25041,City,82,Country 25042,City,82,Country 25043,City,82,Country 25048,City,82,Country 25051,City,82,Country 25052,City,82,Country 25055,City,82,Country 25056,City,82,Country 25058,City,82,Country 25064,City,82,Country 25075,City,82,Country 25081,City,82,Country 25083,City,82,Country 25087,City,82,Country 25093,City,82,Country 25096,City,82,Country 25098,City,82,Country 25102,City,82,Country 25109,City,82,Country 25111,City,82,Country 25112,City,82,Country 25113,City,82,Country 25114,City,82,Country 25115,City,82,Country 25119,City,82,Country 25129,City,82,Country 25132,City,82,Country 25135,City,82,Country 25140,City,82,Country 25142,City,82,Country 25145,City,82,Country 25151,City,82,Country 25152,City,82,Country 25155,City,82,Country 25156,City,82,Country 25160,City,82,Country 25165,City,82,Country 25166,City,82,Country 25167,City,82,Country 25173,City,82,Country 25174,City,82,Country 25178,City,82,Country 25180,City,82,Country 25182,City,82,Country 25184,City,82,Country 25193,City,82,Country 25198,City,82,Country 25197,City,82,Country 25204,City,82,Country 25209,City,82,Country 25211,City,82,Country 25220,City,82,Country 25226,City,82,Country 25227,City,82,Country 25228,City,82,Country 25232,City,82,Country 25246,City,82,Country 25247,City,82,Country 25251,City,82,Country 25253,City,82,Country 25254,City,82,Country 25257,City,82,Country 25263,City,82,Country 25264,City,82,Country 25265,City,82,Country 25269,City,82,Country 25270,City,82,Country 25275,City,82,Country 25299,City,82,Country 25308,City,82,Country 25312,City,82,Country 25313,City,82,Country 25324,City,82,Country 25330,City,82,Country 25331,City,82,Country 25333,City,82,Country 25335,City,82,Country 25317,City,82,Country 25318,City,82,Country 25339,City,82,Country 25341,City,82,Country 25342,City,82,Country 25344,City,82,Country 25350,City,82,Country 25351,City,82,Country 25353,City,82,Country 25358,City,82,Country 25362,City,82,Country 25363,City,82,Country 25367,City,82,Country 25369,City,82,Country 25377,City,82,Country 25382,City,82,Country 25383,City,82,Country 25386,City,82,Country 25391,City,82,Country 25395,City,82,Country 25398,City,82,Country 25399,City,82,Country 25400,City,82,Country 25401,City,82,Country 25402,City,82,Country 25413,City,82,Country 25417,City,82,Country 25423,City,82,Country 25425,City,82,Country 25429,City,82,Country 25430,City,82,Country 25437,City,82,Country 25438,City,82,Country 25441,City,82,Country 25442,City,82,Country 25445,City,82,Country 25451,City,82,Country 25452,City,82,Country 25453,City,82,Country 25454,City,82,Country 25457,City,82,Country 25463,City,82,Country 25467,City,82,Country 25470,City,82,Country 25472,City,82,Country 25473,City,82,Country 25474,City,82,Country 25480,City,82,Country 25489,City,82,Country 25504,City,82,Country 25506,City,82,Country 25515,City,82,Country 25518,City,82,Country 25521,City,82,Country 25526,City,82,Country 25528,City,82,Country 25533,City,82,Country 25780,City,82,Country 25787,City,82,Country 25790,City,82,Country 25551,City,82,Country 25552,City,82,Country 25555,City,82,Country 25558,City,82,Country 25720,City,82,Country 25562,City,82,Country 25721,City,82,Country 25722,City,82,Country 25564,City,82,Country 25566,City,82,Country 25567,City,82,Country 25568,City,82,Country 25570,City,82,Country 25571,City,82,Country 25572,City,82,Country 25573,City,82,Country 25579,City,82,Country 25581,City,82,Country 25582,City,82,Country 25587,City,82,Country 25590,City,82,Country 25593,City,82,Country 25598,City,82,Country 25601,City,82,Country 25603,City,82,Country 25609,City,82,Country 25727,City,82,Country 25648,City,82,Country 25651,City,82,Country 25660,City,82,Country 25668,City,82,Country 25673,City,82,Country 25677,City,82,Country 25679,City,82,Country 25682,City,82,Country 25688,City,82,Country 25696,City,82,Country 25699,City,82,Country 25711,City,82,Country 25712,City,82,Country 25716,City,82,Country 25737,City,82,Country 25745,City,82,Country 25747,City,82,Country 25755,City,82,Country 25757,City,82,Country 25759,City,82,Country 25794,City,82,Country 25796,City,82,Country 25797,City,82,Country 25761,City,82,Country 25768,City,82,Country 25804,City,82,Country 25805,City,82,Country 25807,City,82,Country 25808,City,82,Country 25809,City,82,Country 25814,City,82,Country 25816,City,82,Country 25822,City,82,Country 25825,City,82,Country 25828,City,82,Country 25829,City,82,Country 25832,City,82,Country 25833,City,82,Country 25839,City,82,Country 25845,City,82,Country 25847,City,82,Country 25849,City,82,Country 25850,City,82,Country 25856,City,82,Country 25857,City,82,Country 25876,City,82,Country 25895,City,82,Country 25898,City,82,Country 25906,City,82,Country 25912,City,82,Country 25923,City,82,Country 25929,City,82,Country 25962,City,82,Country 25936,City,82,Country 25946,City,82,Country 25947,City,82,Country 25950,City,82,Country 25953,City,82,Country 25955,City,82,Country 25959,City,82,Country 25966,City,82,Country 25967,City,82,Country 25981,City,82,Country 25986,City,82,Country 25991,City,82,Country 26001,City,82,Country 26004,City,82,Country 26007,City,82,Country 26008,City,82,Country 26009,City,82,Country 26029,City,82,Country 26030,City,82,Country 26036,City,82,Country 26039,City,82,Country 26047,City,82,Country 26048,City,82,Country 26049,City,82,Country 26066,City,82,Country 26069,City,82,Country 26084,City,82,Country 26085,City,82,Country 26087,City,82,Country 26089,City,82,Country 26091,City,82,Country 26092,City,82,Country 26102,City,82,Country 26128,City,82,Country 26111,City,82,Country 26113,City,82,Country 26116,City,82,Country 26124,City,82,Country 26141,City,82,Country 26146,City,82,Country 26147,City,82,Country 26149,City,82,Country 26152,City,82,Country 26154,City,82,Country 26156,City,82,Country 26161,City,82,Country 26162,City,82,Country 26163,City,82,Country 26298,City,82,Country 26300,City,82,Country 26180,City,82,Country 26302,City,82,Country 26303,City,82,Country 26304,City,82,Country 26185,City,82,Country 26189,City,82,Country 26190,City,82,Country 26192,City,82,Country 26197,City,82,Country 26198,City,82,Country 26200,City,82,Country 26201,City,82,Country 26204,City,82,Country 26205,City,82,Country 26207,City,82,Country 26310,City,82,Country 26210,City,82,Country 26213,City,82,Country 26214,City,82,Country 26217,City,82,Country 26220,City,82,Country 26231,City,82,Country 26234,City,82,Country 26236,City,82,Country 26243,City,82,Country 26245,City,82,Country 26246,City,82,Country 26254,City,82,Country 26259,City,82,Country 26318,City,82,Country 26322,City,82,Country 26323,City,82,Country 26325,City,82,Country 26281,City,82,Country 26282,City,82,Country 26285,City,82,Country 26287,City,82,Country 26290,City,82,Country 26293,City,82,Country 26347,City,82,Country 26349,City,82,Country 26352,City,82,Country 26356,City,82,Country 26358,City,82,Country 26362,City,82,Country 26367,City,82,Country 26371,City,82,Country 26373,City,82,Country 26382,City,82,Country 26384,City,82,Country 26386,City,82,Country 26392,City,82,Country 26393,City,82,Country 26394,City,82,Country 26395,City,82,Country 26397,City,82,Country 26398,City,82,Country 26401,City,82,Country 26402,City,82,Country 26403,City,82,Country 26404,City,82,Country 26405,City,82,Country 26408,City,82,Country 26409,City,82,Country 26411,City,82,Country 26415,City,82,Country 26429,City,82,Country 26436,City,82,Country 26442,City,82,Country 26447,City,82,Country 26448,City,82,Country 26454,City,82,Country 26456,City,82,Country 26462,City,82,Country 26479,City,82,Country 26484,City,82,Country 26487,City,82,Country 26493,City,82,Country 26501,City,82,Country 26512,City,82,Country 26515,City,82,Country 26518,City,82,Country 26519,City,82,Country 26522,City,82,Country 26524,City,82,Country 26529,City,82,Country 26533,City,82,Country 26542,City,82,Country 26543,City,82,Country 26556,City,82,Country 26561,City,82,Country 26564,City,82,Country 26565,City,82,Country 26569,City,82,Country 26577,City,82,Country 26583,City,82,Country 26585,City,82,Country 26593,City,82,Country 26597,City,82,Country 26602,City,82,Country 26605,City,82,Country 26606,City,82,Country 26607,City,82,Country 26609,City,82,Country 26610,City,82,Country 26611,City,82,Country 26613,City,82,Country 26616,City,82,Country 26617,City,82,Country 26619,City,82,Country 26624,City,82,Country 26628,City,82,Country 26631,City,82,Country 26633,City,82,Country 26637,City,82,Country 26640,City,82,Country 26649,City,82,Country 26650,City,82,Country 26652,City,82,Country 26668,City,82,Country 26672,City,82,Country 26673,City,82,Country 26674,City,82,Country 26677,City,82,Country 26678,City,82,Country 26679,City,82,Country 26680,City,82,Country 26686,City,82,Country 26694,City,82,Country 26701,City,82,Country 26706,City,82,Country 26812,City,82,Country 26813,City,82,Country 26814,City,82,Country 26708,City,82,Country 26710,City,82,Country 26712,City,82,Country 26715,City,82,Country 26825,City,82,Country 26827,City,82,Country 26830,City,82,Country 26835,City,82,Country 26717,City,82,Country 26720,City,82,Country 26731,City,82,Country 26848,City,82,Country 26734,City,82,Country 26736,City,82,Country 26754,City,82,Country 26758,City,82,Country 26765,City,82,Country 26767,City,82,Country 26771,City,82,Country 26778,City,82,Country 26779,City,82,Country 26787,City,82,Country 26791,City,82,Country 26849,City,82,Country 26793,City,82,Country 26794,City,82,Country 26795,City,82,Country 26854,City,82,Country 26797,City,82,Country 26857,City,82,Country 26798,City,82,Country 26858,City,82,Country 26809,City,82,Country 26865,City,82,Country 26867,City,82,Country 26879,City,82,Country 26880,City,82,Country 26884,City,82,Country 26889,City,82,Country 26894,City,82,Country 26895,City,82,Country 26897,City,82,Country 26904,City,82,Country 26907,City,82,Country 26917,City,82,Country 26924,City,82,Country 26925,City,82,Country 26927,City,82,Country 26929,City,82,Country 26932,City,82,Country 26934,City,82,Country 26937,City,82,Country 26940,City,82,Country 26946,City,82,Country 26950,City,82,Country 26957,City,82,Country 26964,City,82,Country 26971,City,82,Country 26972,City,82,Country 26974,City,82,Country 26977,City,82,Country 26978,City,82,Country 26983,City,82,Country 26987,City,82,Country 26989,City,82,Country 26990,City,82,Country 26996,City,82,Country 27004,City,82,Country 27010,City,82,Country 27015,City,82,Country 27017,City,82,Country 27022,City,82,Country 27027,City,82,Country 27038,City,82,Country 27042,City,82,Country 27045,City,82,Country 27052,City,82,Country 27060,City,82,Country 27063,City,82,Country 27064,City,82,Country 27068,City,82,Country 27077,City,82,Country 27079,City,82,Country 27081,City,82,Country 27102,City,82,Country 27105,City,82,Country 27123,City,82,Country 27130,City,82,Country 27136,City,82,Country 27139,City,82,Country 27145,City,82,Country 27155,City,82,Country 27167,City,82,Country 27171,City,82,Country 27177,City,82,Country 27553,City,82,Country 27234,City,82,Country 27235,City,82,Country 27237,City,82,Country 27238,City,82,Country 27239,City,82,Country 27241,City,82,Country 27242,City,82,Country 27246,City,82,Country 27247,City,82,Country 27250,City,82,Country 27253,City,82,Country 27254,City,82,Country 27261,City,82,Country 27262,City,82,Country 27263,City,82,Country 27268,City,82,Country 27271,City,82,Country 27272,City,82,Country 27288,City,82,Country 27293,City,82,Country 27294,City,82,Country 27295,City,82,Country 27296,City,82,Country 27297,City,82,Country 27298,City,82,Country 27299,City,82,Country 27300,City,82,Country 27301,City,82,Country 27302,City,82,Country 27303,City,82,Country 27304,City,82,Country 27305,City,82,Country 27306,City,82,Country 27307,City,82,Country 27308,City,82,Country 27309,City,82,Country 27310,City,82,Country 27311,City,82,Country 27312,City,82,Country 27313,City,82,Country 27314,City,82,Country 27315,City,82,Country 27316,City,82,Country 27317,City,82,Country 27319,City,82,Country 27322,City,82,Country 27324,City,82,Country 27330,City,82,Country 27333,City,82,Country 27335,City,82,Country 27352,City,82,Country 27340,City,82,Country 27343,City,82,Country 27344,City,82,Country 27347,City,82,Country 27349,City,82,Country 27363,City,82,Country 27364,City,82,Country 27372,City,82,Country 27377,City,82,Country 27386,City,82,Country 27397,City,82,Country 27401,City,82,Country 27402,City,82,Country 27403,City,82,Country 27410,City,82,Country 27414,City,82,Country 27418,City,82,Country 27420,City,82,Country 27424,City,82,Country 27433,City,82,Country 27437,City,82,Country 27440,City,82,Country 27451,City,82,Country 27454,City,82,Country 27457,City,82,Country 27461,City,82,Country 27468,City,82,Country 27469,City,82,Country 27471,City,82,Country 27474,City,82,Country 27476,City,82,Country 27477,City,82,Country 27481,City,82,Country 27484,City,82,Country 27486,City,82,Country 27488,City,82,Country 27490,City,82,Country 27491,City,82,Country 27492,City,82,Country 27494,City,82,Country 27557,City,82,Country 27562,City,82,Country 27565,City,82,Country 27566,City,82,Country 27567,City,82,Country 27571,City,82,Country 27572,City,82,Country 27508,City,82,Country 27515,City,82,Country 27518,City,82,Country 27519,City,82,Country 27520,City,82,Country 27521,City,82,Country 27522,City,82,Country 27529,City,82,Country 27580,City,82,Country 27581,City,82,Country 27593,City,82,Country 27597,City,82,Country 27534,City,82,Country 27609,City,82,Country 27613,City,82,Country 27614,City,82,Country 27540,City,82,Country 27617,City,82,Country 27542,City,82,Country 27618,City,82,Country 27622,City,82,Country 27625,City,82,Country 27545,City,82,Country 27630,City,82,Country 27634,City,82,Country 27638,City,82,Country 27641,City,82,Country 27674,City,82,Country 27679,City,82,Country 27682,City,82,Country 27695,City,82,Country 27696,City,82,Country 27698,City,82,Country 27699,City,82,Country 27701,City,82,Country 27707,City,82,Country 27709,City,82,Country 27714,City,82,Country 27719,City,82,Country 27724,City,82,Country 27731,City,82,Country 27732,City,82,Country 27735,City,82,Country 27740,City,82,Country 27743,City,82,Country 27749,City,82,Country 27752,City,82,Country 27759,City,82,Country 27763,City,82,Country 27771,City,82,Country 27772,City,82,Country 27775,City,82,Country 27781,City,82,Country 27782,City,82,Country 27783,City,82,Country 27817,City,82,Country 27785,City,82,Country 27786,City,82,Country 27789,City,82,Country 27790,City,82,Country 27791,City,82,Country 27797,City,82,Country 27800,City,82,Country 27801,City,82,Country 27803,City,82,Country 27804,City,82,Country 27811,City,82,Country 27829,City,82,Country 27830,City,82,Country 27833,City,82,Country 27848,City,82,Country 27856,City,82,Country 27859,City,82,Country 27860,City,82,Country 27868,City,82,Country 27872,City,82,Country 27878,City,82,Country 27879,City,82,Country 27881,City,82,Country 27884,City,82,Country 27904,City,82,Country 27905,City,82,Country 27909,City,82,Country 27913,City,82,Country 27917,City,82,Country 27920,City,82,Country 27946,City,82,Country 27951,City,82,Country 27954,City,82,Country 27942,City,82,Country 27943,City,82,Country 27962,City,82,Country 27963,City,82,Country 27964,City,82,Country 27966,City,82,Country 27970,City,82,Country 27972,City,82,Country 27976,City,82,Country 27978,City,82,Country 27980,City,82,Country 27981,City,82,Country 27982,City,82,Country 27984,City,82,Country 27991,City,82,Country 27992,City,82,Country 27998,City,82,Country 27999,City,82,Country 28002,City,82,Country 28003,City,82,Country 28006,City,82,Country 28011,City,82,Country 28012,City,82,Country 28013,City,82,Country 28015,City,82,Country 28016,City,82,Country 28017,City,82,Country 28018,City,82,Country 28019,City,82,Country 28021,City,82,Country 28023,City,82,Country 28028,City,82,Country 28029,City,82,Country 28030,City,82,Country 28031,City,82,Country 28032,City,82,Country 28035,City,82,Country 28042,City,82,Country 28038,City,82,Country 28039,City,82,Country 28041,City,82,Country 28043,City,82,Country 28044,City,82,Country 28047,City,82,Country 28048,City,82,Country 28049,City,82,Country 28052,City,82,Country 28059,City,82,Country 28062,City,82,Country 28068,City,82,Country 28081,City,82,Country 28083,City,82,Country 28089,City,82,Country 28091,City,82,Country 28092,City,82,Country 28095,City,82,Country 28099,City,82,Country 28104,City,82,Country 28115,City,82,Country 28127,City,82,Country 28132,City,82,Country 28152,City,82,Country 28162,City,82,Country 28179,City,82,Country 28182,City,82,Country 28187,City,82,Country 28194,City,82,Country 28195,City,82,Country 28198,City,82,Country 28204,City,82,Country 28412,City,82,Country 28211,City,82,Country 28212,City,82,Country 28220,City,82,Country 28223,City,82,Country 28224,City,82,Country 28226,City,82,Country 28228,City,82,Country 28230,City,82,Country 28231,City,82,Country 28232,City,82,Country 28233,City,82,Country 28237,City,82,Country 28239,City,82,Country 28241,City,82,Country 28246,City,82,Country 28243,City,82,Country 28250,City,82,Country 28254,City,82,Country 28255,City,82,Country 28256,City,82,Country 28258,City,82,Country 28259,City,82,Country 28261,City,82,Country 28262,City,82,Country 28263,City,82,Country 28266,City,82,Country 28267,City,82,Country 28268,City,82,Country 28269,City,82,Country 28271,City,82,Country 28273,City,82,Country 28274,City,82,Country 28275,City,82,Country 28277,City,82,Country 28279,City,82,Country 28281,City,82,Country 28282,City,82,Country 28283,City,82,Country 28286,City,82,Country 28287,City,82,Country 28288,City,82,Country 28290,City,82,Country 28292,City,82,Country 28298,City,82,Country 28299,City,82,Country 28302,City,82,Country 28303,City,82,Country 28306,City,82,Country 28307,City,82,Country 28310,City,82,Country 28312,City,82,Country 28316,City,82,Country 28321,City,82,Country 28322,City,82,Country 28325,City,82,Country 28326,City,82,Country 28334,City,82,Country 28338,City,82,Country 28340,City,82,Country 28346,City,82,Country 28347,City,82,Country 28348,City,82,Country 28349,City,82,Country 28352,City,82,Country 28354,City,82,Country 28418,City,82,Country 28359,City,82,Country 28360,City,82,Country 28361,City,82,Country 28363,City,82,Country 28419,City,82,Country 28366,City,82,Country 28368,City,82,Country 28370,City,82,Country 28376,City,82,Country 28377,City,82,Country 28378,City,82,Country 28380,City,82,Country 28385,City,82,Country 28386,City,82,Country 28387,City,82,Country 28391,City,82,Country 28397,City,82,Country 28398,City,82,Country 28421,City,82,Country 28401,City,82,Country 28404,City,82,Country 28405,City,82,Country 28422,City,82,Country 28406,City,82,Country 28410,City,82,Country 28411,City,82,Country 28453,City,82,Country 28455,City,82,Country 28456,City,82,Country 28460,City,82,Country 28464,City,82,Country 28468,City,82,Country 28469,City,82,Country 28473,City,82,Country 28488,City,82,Country 28489,City,82,Country 28490,City,82,Country 28493,City,82,Country 28503,City,82,Country 28504,City,82,Country 28508,City,82,Country 28509,City,82,Country 28512,City,82,Country 28513,City,82,Country 28514,City,82,Country 28522,City,82,Country 28525,City,82,Country 28527,City,82,Country 28528,City,82,Country 28533,City,82,Country 28539,City,82,Country 28544,City,82,Country 28545,City,82,Country 28547,City,82,Country 28548,City,82,Country 28549,City,82,Country 28550,City,82,Country 28551,City,82,Country 28554,City,82,Country 28560,City,82,Country 28567,City,82,Country 28568,City,82,Country 28570,City,82,Country 28574,City,82,Country 28582,City,82,Country 28584,City,82,Country 28590,City,82,Country 28591,City,82,Country 28592,City,82,Country 28593,City,82,Country 28595,City,82,Country 28626,City,82,Country 28629,City,82,Country 28630,City,82,Country 28631,City,82,Country 28632,City,82,Country 28635,City,82,Country 28640,City,82,Country 28643,City,82,Country 28656,City,82,Country 28657,City,82,Country 28659,City,82,Country 28660,City,82,Country 28661,City,82,Country 28776,City,82,Country 28674,City,82,Country 28777,City,82,Country 28680,City,82,Country 28780,City,82,Country 28683,City,82,Country 28687,City,82,Country 28689,City,82,Country 28691,City,82,Country 28693,City,82,Country 28781,City,82,Country 28782,City,82,Country 28784,City,82,Country 28700,City,82,Country 28707,City,82,Country 28786,City,82,Country 28714,City,82,Country 28742,City,82,Country 28746,City,82,Country 28720,City,82,Country 28790,City,82,Country 28791,City,82,Country 28723,City,82,Country 28725,City,82,Country 28727,City,82,Country 28792,City,82,Country 28729,City,82,Country 28730,City,82,Country 28793,City,82,Country 28733,City,82,Country 28735,City,82,Country 28736,City,82,Country 28737,City,82,Country 28794,City,82,Country 28795,City,82,Country 28798,City,82,Country 28748,City,82,Country 28749,City,82,Country 28751,City,82,Country 28754,City,82,Country 28803,City,82,Country 28757,City,82,Country 28758,City,82,Country 28759,City,82,Country 28763,City,82,Country 28812,City,82,Country 28813,City,82,Country 28821,City,82,Country 28825,City,82,Country 28829,City,82,Country 28831,City,82,Country 28832,City,82,Country 28834,City,82,Country 28837,City,82,Country 28845,City,82,Country 28846,City,82,Country 28849,City,82,Country 28851,City,82,Country 28864,City,82,Country 28875,City,82,Country 28884,City,82,Country 28895,City,82,Country 28898,City,82,Country 29098,City,82,Country 28914,City,82,Country 28915,City,82,Country 28916,City,82,Country 28922,City,82,Country 28923,City,82,Country 28935,City,82,Country 28939,City,82,Country 28937,City,82,Country 28938,City,82,Country 28941,City,82,Country 28948,City,82,Country 28950,City,82,Country 28953,City,82,Country 28954,City,82,Country 28965,City,82,Country 28967,City,82,Country 28979,City,82,Country 28985,City,82,Country 28991,City,82,Country 28992,City,82,Country 28993,City,82,Country 29000,City,82,Country 29001,City,82,Country 29002,City,82,Country 29003,City,82,Country 29007,City,82,Country 29008,City,82,Country 29100,City,82,Country 29101,City,82,Country 29102,City,82,Country 29105,City,82,Country 29107,City,82,Country 29014,City,82,Country 29015,City,82,Country 29016,City,82,Country 29124,City,82,Country 29129,City,82,Country 29017,City,82,Country 29131,City,82,Country 29018,City,82,Country 29132,City,82,Country 29020,City,82,Country 29023,City,82,Country 29032,City,82,Country 29039,City,82,Country 29041,City,82,Country 29042,City,82,Country 29043,City,82,Country 29046,City,82,Country 29057,City,82,Country 29060,City,82,Country 29061,City,82,Country 29066,City,82,Country 29067,City,82,Country 29068,City,82,Country 29072,City,82,Country 29073,City,82,Country 29075,City,82,Country 29076,City,82,Country 29083,City,82,Country 29084,City,82,Country 29087,City,82,Country 29094,City,82,Country 29150,City,82,Country 29151,City,82,Country 29153,City,82,Country 29162,City,82,Country 29164,City,82,Country 29174,City,82,Country 29176,City,82,Country 29177,City,82,Country 29188,City,82,Country 29192,City,82,Country 29194,City,82,Country 29204,City,82,Country 29198,City,82,Country 29199,City,82,Country 29202,City,82,Country 29214,City,82,Country 29215,City,82,Country 29217,City,82,Country 29228,City,82,Country 29231,City,82,Country 29232,City,82,Country 29233,City,82,Country 29240,City,82,Country 29248,City,82,Country 29489,City,82,Country 29261,City,82,Country 29264,City,82,Country 29265,City,82,Country 29266,City,82,Country 29269,City,82,Country 29272,City,82,Country 29273,City,82,Country 29276,City,82,Country 29278,City,82,Country 29282,City,82,Country 29285,City,82,Country 29288,City,82,Country 29289,City,82,Country 29293,City,82,Country 29294,City,82,Country 29300,City,82,Country 29316,City,82,Country 29320,City,82,Country 29324,City,82,Country 29328,City,82,Country 29331,City,82,Country 29335,City,82,Country 29336,City,82,Country 29337,City,82,Country 29338,City,82,Country 29341,City,82,Country 29343,City,82,Country 29351,City,82,Country 29357,City,82,Country 29359,City,82,Country 29364,City,82,Country 29371,City,82,Country 29375,City,82,Country 29380,City,82,Country 29385,City,82,Country 29388,City,82,Country 29390,City,82,Country 29393,City,82,Country 29399,City,82,Country 29400,City,82,Country 29404,City,82,Country 29406,City,82,Country 29408,City,82,Country 29412,City,82,Country 29413,City,82,Country 29451,City,82,Country 29452,City,82,Country 29453,City,82,Country 29433,City,82,Country 29434,City,82,Country 29428,City,82,Country 29437,City,82,Country 29441,City,82,Country 29443,City,82,Country 29461,City,82,Country 29469,City,82,Country 29471,City,82,Country 29472,City,82,Country 29474,City,82,Country 29475,City,82,Country 29476,City,82,Country 29478,City,82,Country 29479,City,82,Country 29504,City,82,Country 29482,City,82,Country 29485,City,82,Country 29511,City,82,Country 29512,City,82,Country 29513,City,82,Country 29521,City,82,Country 29699,City,82,Country 29527,City,82,Country 29536,City,82,Country 29544,City,82,Country 29545,City,82,Country 29548,City,82,Country 29549,City,82,Country 29550,City,82,Country 29563,City,82,Country 29564,City,82,Country 29566,City,82,Country 29569,City,82,Country 29570,City,82,Country 29572,City,82,Country 29581,City,82,Country 29583,City,82,Country 29584,City,82,Country 29587,City,82,Country 29588,City,82,Country 29593,City,82,Country 29594,City,82,Country 29595,City,82,Country 29601,City,82,Country 29605,City,82,Country 29606,City,82,Country 29602,City,82,Country 29603,City,82,Country 29604,City,82,Country 29609,City,82,Country 29618,City,82,Country 29620,City,82,Country 29621,City,82,Country 29626,City,82,Country 29700,City,82,Country 29703,City,82,Country 29637,City,82,Country 29638,City,82,Country 29639,City,82,Country 29641,City,82,Country 29643,City,82,Country 29644,City,82,Country 29645,City,82,Country 29646,City,82,Country 29650,City,82,Country 29655,City,82,Country 29661,City,82,Country 29670,City,82,Country 29677,City,82,Country 29686,City,82,Country 29682,City,82,Country 29684,City,82,Country 29689,City,82,Country 29691,City,82,Country 29707,City,82,Country 29708,City,82,Country 29692,City,82,Country 29711,City,82,Country 29695,City,82,Country 29697,City,82,Country 30556,City,82,Country 30557,City,82,Country 29721,City,82,Country 29728,City,82,Country 29730,City,82,Country 29731,City,82,Country 29745,City,82,Country 29752,City,82,Country 29755,City,82,Country 29754,City,82,Country 29756,City,82,Country 29759,City,82,Country 29760,City,82,Country 29762,City,82,Country 29767,City,82,Country 29770,City,82,Country 29771,City,82,Country 29773,City,82,Country 29774,City,82,Country 29776,City,82,Country 29777,City,82,Country 29779,City,82,Country 29780,City,82,Country 29781,City,82,Country 29783,City,82,Country 29784,City,82,Country 29786,City,82,Country 29787,City,82,Country 29788,City,82,Country 29794,City,82,Country 29795,City,82,Country 29796,City,82,Country 29800,City,82,Country 29803,City,82,Country 29805,City,82,Country 29808,City,82,Country 29809,City,82,Country 29812,City,82,Country 29815,City,82,Country 29821,City,82,Country 29822,City,82,Country 29824,City,82,Country 29825,City,82,Country 29838,City,82,Country 29842,City,82,Country 29845,City,82,Country 29846,City,82,Country 29850,City,82,Country 29851,City,82,Country 29855,City,82,Country 29856,City,82,Country 29857,City,82,Country 29858,City,82,Country 29867,City,82,Country 29869,City,82,Country 29870,City,82,Country 29890,City,82,Country 29872,City,82,Country 29873,City,82,Country 29880,City,82,Country 29882,City,82,Country 29897,City,82,Country 29898,City,82,Country 29902,City,82,Country 29908,City,82,Country 29909,City,82,Country 29913,City,82,Country 29917,City,82,Country 29924,City,82,Country 29925,City,82,Country 29927,City,82,Country 29929,City,82,Country 29931,City,82,Country 29935,City,82,Country 29937,City,82,Country 29942,City,82,Country 29948,City,82,Country 29949,City,82,Country 29956,City,82,Country 29957,City,82,Country 29959,City,82,Country 29961,City,82,Country 29966,City,82,Country 29967,City,82,Country 29970,City,82,Country 29975,City,82,Country 29978,City,82,Country 29979,City,82,Country 29980,City,82,Country 29982,City,82,Country 29990,City,82,Country 29992,City,82,Country 29994,City,82,Country 30002,City,82,Country 30018,City,82,Country 30021,City,82,Country 30024,City,82,Country 30027,City,82,Country 30032,City,82,Country 30033,City,82,Country 30036,City,82,Country 30037,City,82,Country 30044,City,82,Country 30058,City,82,Country 30063,City,82,Country 30065,City,82,Country 30066,City,82,Country 30067,City,82,Country 30069,City,82,Country 30070,City,82,Country 30073,City,82,Country 30074,City,82,Country 30075,City,82,Country 30076,City,82,Country 30077,City,82,Country 30078,City,82,Country 30080,City,82,Country 30084,City,82,Country 30087,City,82,Country 30089,City,82,Country 30091,City,82,Country 30095,City,82,Country 30109,City,82,Country 30111,City,82,Country 30123,City,82,Country 30128,City,82,Country 30129,City,82,Country 30131,City,82,Country 30132,City,82,Country 30133,City,82,Country 30136,City,82,Country 30119,City,82,Country 30120,City,82,Country 30141,City,82,Country 30151,City,82,Country 30154,City,82,Country 30161,City,82,Country 30164,City,82,Country 30179,City,82,Country 30181,City,82,Country 30187,City,82,Country 30190,City,82,Country 30235,City,82,Country 30198,City,82,Country 30201,City,82,Country 30209,City,82,Country 30220,City,82,Country 30229,City,82,Country 30232,City,82,Country 30241,City,82,Country 30253,City,82,Country 30255,City,82,Country 30259,City,82,Country 30261,City,82,Country 30262,City,82,Country 30263,City,82,Country 30266,City,82,Country 30271,City,82,Country 30272,City,82,Country 30275,City,82,Country 30279,City,82,Country 30280,City,82,Country 30281,City,82,Country 30284,City,82,Country 30289,City,82,Country 30290,City,82,Country 30292,City,82,Country 30297,City,82,Country 30310,City,82,Country 30311,City,82,Country 30313,City,82,Country 30318,City,82,Country 30320,City,82,Country 30323,City,82,Country 30324,City,82,Country 30325,City,82,Country 30332,City,82,Country 30336,City,82,Country 30337,City,82,Country 30343,City,82,Country 30348,City,82,Country 30360,City,82,Country 30369,City,82,Country 30379,City,82,Country 30380,City,82,Country 30381,City,82,Country 30383,City,82,Country 30384,City,82,Country 30387,City,82,Country 30393,City,82,Country 30396,City,82,Country 30402,City,82,Country 30403,City,82,Country 30405,City,82,Country 30446,City,82,Country 30447,City,82,Country 30449,City,82,Country 30450,City,82,Country 30451,City,82,Country 30453,City,82,Country 30418,City,82,Country 30421,City,82,Country 30424,City,82,Country 30459,City,82,Country 30464,City,82,Country 30467,City,82,Country 30468,City,82,Country 30469,City,82,Country 30476,City,82,Country 30477,City,82,Country 30480,City,82,Country 30481,City,82,Country 30485,City,82,Country 30486,City,82,Country 30490,City,82,Country 30493,City,82,Country 30502,City,82,Country 30504,City,82,Country 30511,City,82,Country 30513,City,82,Country 30515,City,82,Country 30528,City,82,Country 30529,City,82,Country 30536,City,82,Country 23490,City,82,Country 23579,City,82,Country 23581,City,82,Country 23621,City,82,Country 23959,City,82,Country 24053,City,82,Country 24054,City,82,Country 24055,City,82,Country 24111,City,82,Country 24165,City,82,Country 24167,City,82,Country 24217,City,82,Country 24338,City,82,Country 24379,City,82,Country 24397,City,82,Country 24531,City,82,Country 24532,City,82,Country 24578,City,82,Country 25134,City,82,Country 25136,City,82,Country 25163,City,82,Country 25225,City,82,Country 25274,City,82,Country 25287,City,82,Country 25289,City,82,Country 25290,City,82,Country 25305,City,82,Country 25376,City,82,Country 25475,City,82,Country 25616,City,82,Country 25734,City,82,Country 25719,City,82,Country 25841,City,82,Country 25848,City,82,Country 25892,City,82,Country 25926,City,82,Country 26000,City,82,Country 26013,City,82,Country 26026,City,82,Country 26082,City,82,Country 26457,City,82,Country 26517,City,82,Country 26523,City,82,Country 26545,City,82,Country 26655,City,82,Country 26716,City,82,Country 26842,City,82,Country 26756,City,82,Country 26948,City,82,Country 27078,City,82,Country 27082,City,82,Country 27085,City,82,Country 27201,City,82,Country 27233,City,82,Country 27274,City,82,Country 27275,City,82,Country 27554,City,82,Country 27334,City,82,Country 27478,City,82,Country 27496,City,82,Country 27587,City,82,Country 27693,City,82,Country 27765,City,82,Country 27873,City,82,Country 27874,City,82,Country 27899,City,82,Country 28034,City,82,Country 28216,City,82,Country 28330,City,82,Country 28375,City,82,Country 28452,City,82,Country 28562,City,82,Country 28710,City,82,Country 28753,City,82,Country 28762,City,82,Country 28989,City,82,Country 28998,City,82,Country 29116,City,82,Country 29218,City,82,Country 29286,City,82,Country 29313,City,82,Country 29329,City,82,Country 29353,City,82,Country 29543,City,82,Country 29555,City,82,Country 29612,City,82,Country 29926,City,82,Country 30008,City,82,Country 30025,City,82,Country 30048,City,82,Country 30134,City,82,Country 30200,City,82,Country 30287,City,82,Country 30288,City,82,Country 30299,City,82,Country 30350,City,82,Country 30475,City,82,Country 23577,City,82,Country 23585,City,82,Country 23626,City,82,Country 23655,City,82,Country 23764,City,82,Country 23798,City,82,Country 23829,City,82,Country 23853,City,82,Country 23885,City,82,Country 23947,City,82,Country 23983,City,82,Country 23987,City,82,Country 24017,City,82,Country 24050,City,82,Country 24061,City,82,Country 24079,City,82,Country 24112,City,82,Country 24138,City,82,Country 24181,City,82,Country 24246,City,82,Country 24248,City,82,Country 24280,City,82,Country 24293,City,82,Country 24297,City,82,Country 24331,City,82,Country 24332,City,82,Country 24333,City,82,Country 24337,City,82,Country 24365,City,82,Country 24374,City,82,Country 24396,City,82,Country 24406,City,82,Country 24513,City,82,Country 24525,City,82,Country 24535,City,82,Country 24556,City,82,Country 24564,City,82,Country 24583,City,82,Country 24587,City,82,Country 24713,City,82,Country 24758,City,82,Country 24759,City,82,Country 24839,City,82,Country 24907,City,82,Country 24929,City,82,Country 24972,City,82,Country 25049,City,82,Country 25133,City,82,Country 25138,City,82,Country 25149,City,82,Country 25169,City,82,Country 25176,City,82,Country 25207,City,82,Country 25221,City,82,Country 25282,City,82,Country 25297,City,82,Country 25328,City,82,Country 25334,City,82,Country 25373,City,82,Country 25465,City,82,Country 25512,City,82,Country 25536,City,82,Country 25535,City,82,Country 25786,City,82,Country 25575,City,82,Country 25577,City,82,Country 25730,City,82,Country 25627,City,82,Country 25625,City,82,Country 25629,City,82,Country 25634,City,82,Country 25653,City,82,Country 25684,City,82,Country 25703,City,82,Country 25710,City,82,Country 25714,City,82,Country 25741,City,82,Country 25748,City,82,Country 25753,City,82,Country 25842,City,82,Country 25996,City,82,Country 26051,City,82,Country 26098,City,82,Country 26166,City,82,Country 26195,City,82,Country 26199,City,82,Country 26208,City,82,Country 26424,City,82,Country 26464,City,82,Country 26452,City,82,Country 26476,City,82,Country 26526,City,82,Country 26579,City,82,Country 26675,City,82,Country 26693,City,82,Country 26713,City,82,Country 26822,City,82,Country 26749,City,82,Country 26811,City,82,Country 26959,City,82,Country 26995,City,82,Country 26998,City,82,Country 27050,City,82,Country 27055,City,82,Country 27089,City,82,Country 27090,City,82,Country 27112,City,82,Country 27203,City,82,Country 27204,City,82,Country 27160,City,82,Country 27161,City,82,Country 27164,City,82,Country 27182,City,82,Country 27266,City,82,Country 27281,City,82,Country 27391,City,82,Country 27448,City,82,Country 27456,City,82,Country 27467,City,82,Country 27489,City,82,Country 27495,City,82,Country 27592,City,82,Country 27607,City,82,Country 27610,City,82,Country 27647,City,82,Country 27673,City,82,Country 27691,City,82,Country 27720,City,82,Country 27737,City,82,Country 27767,City,82,Country 27787,City,82,Country 27812,City,82,Country 27816,City,82,Country 27849,City,82,Country 27891,City,82,Country 28070,City,82,Country 28124,City,82,Country 28133,City,82,Country 28235,City,82,Country 28244,City,82,Country 28260,City,82,Country 28265,City,82,Country 28315,City,82,Country 28323,City,82,Country 28339,City,82,Country 28362,City,82,Country 28373,City,82,Country 28374,City,82,Country 28392,City,82,Country 28399,City,82,Country 28409,City,82,Country 28471,City,82,Country 28485,City,82,Country 28494,City,82,Country 28532,City,82,Country 28546,City,82,Country 28612,City,82,Country 28617,City,82,Country 28654,City,82,Country 28712,City,82,Country 28799,City,82,Country 28802,City,82,Country 28756,City,82,Country 28835,City,82,Country 28929,City,82,Country 28951,City,82,Country 28975,City,82,Country 29113,City,82,Country 29119,City,82,Country 29120,City,82,Country 29122,City,82,Country 29035,City,82,Country 29074,City,82,Country 29078,City,82,Country 29160,City,82,Country 29191,City,82,Country 29274,City,82,Country 29297,City,82,Country 29307,City,82,Country 29333,City,82,Country 29384,City,82,Country 29421,City,82,Country 29429,City,82,Country 29430,City,82,Country 29535,City,82,Country 29554,City,82,Country 29556,City,82,Country 29571,City,82,Country 29648,City,82,Country 29663,City,82,Country 29687,City,82,Country 29718,City,82,Country 29831,City,82,Country 29839,City,82,Country 29964,City,82,Country 29999,City,82,Country 30107,City,82,Country 30150,City,82,Country 30157,City,82,Country 30167,City,82,Country 30170,City,82,Country 30173,City,82,Country 30183,City,82,Country 30256,City,82,Country 30258,City,82,Country 30352,City,82,Country 30366,City,82,Country 30400,City,82,Country 30411,City,82,Country 30427,City,82,Country 30429,City,82,Country 30430,City,82,Country 30474,City,82,Country 30499,City,82,Country 30505,City,82,Country 30507,City,82,Country 30517,City,82,Country 24320,City,82,Country 24321,City,82,Country 24426,City,82,Country 29819,City,82,Country 23574,City,82,Country 23631,City,82,Country 23936,City,82,Country 24032,City,82,Country 24047,City,82,Country 24241,City,82,Country 24788,City,82,Country 24910,City,82,Country 24919,City,82,Country 25143,City,82,Country 25314,City,82,Country 25866,City,82,Country 25867,City,82,Country 25868,City,82,Country 25869,City,82,Country 25877,City,82,Country 25897,City,82,Country 26284,City,82,Country 26670,City,82,Country 26922,City,82,Country 27036,City,82,Country 27178,City,82,Country 27280,City,82,Country 27793,City,82,Country 28098,City,82,Country 28181,City,82,Country 28351,City,82,Country 28726,City,82,Country 28888,City,82,Country 29311,City,82,Country 29312,City,82,Country 29354,City,82,Country 29396,City,82,Country 30000,City,82,Country 30145,City,82,Country 30333,City,82,Country 30370,City,82,Country 23540,City,82,Country 23554,City,82,Country 23555,City,82,Country 23556,City,82,Country 23567,City,82,Country 23571,City,82,Country 23588,City,82,Country 23613,City,82,Country 23652,City,82,Country 23748,City,82,Country 23753,City,82,Country 23762,City,82,Country 23780,City,82,Country 23791,City,82,Country 23806,City,82,Country 23808,City,82,Country 23812,City,82,Country 23818,City,82,Country 23840,City,82,Country 23846,City,82,Country 23856,City,82,Country 23864,City,82,Country 23867,City,82,Country 23868,City,82,Country 23869,City,82,Country 23880,City,82,Country 23884,City,82,Country 23956,City,82,Country 23961,City,82,Country 23971,City,82,Country 23984,City,82,Country 24019,City,82,Country 24074,City,82,Country 24086,City,82,Country 24098,City,82,Country 24101,City,82,Country 24104,City,82,Country 24105,City,82,Country 24133,City,82,Country 24141,City,82,Country 24144,City,82,Country 24147,City,82,Country 24245,City,82,Country 24287,City,82,Country 24300,City,82,Country 24304,City,82,Country 24315,City,82,Country 24324,City,82,Country 24328,City,82,Country 24346,City,82,Country 24349,City,82,Country 24494,City,82,Country 24419,City,82,Country 24433,City,82,Country 24504,City,82,Country 24507,City,82,Country 24455,City,82,Country 24516,City,82,Country 24571,City,82,Country 24553,City,82,Country 24597,City,82,Country 24612,City,82,Country 24665,City,82,Country 24686,City,82,Country 24689,City,82,Country 24700,City,82,Country 24760,City,82,Country 24769,City,82,Country 24847,City,82,Country 24866,City,82,Country 24894,City,82,Country 24903,City,82,Country 24921,City,82,Country 24936,City,82,Country 24976,City,82,Country 24978,City,82,Country 25023,City,82,Country 25026,City,82,Country 25027,City,82,Country 25060,City,82,Country 25073,City,82,Country 25076,City,82,Country 25084,City,82,Country 25090,City,82,Country 25162,City,82,Country 25191,City,82,Country 25200,City,82,Country 25196,City,82,Country 25212,City,82,Country 25213,City,82,Country 25222,City,82,Country 25310,City,82,Country 25244,City,82,Country 25271,City,82,Country 25279,City,82,Country 25286,City,82,Country 25295,City,82,Country 25303,City,82,Country 25306,City,82,Country 25315,City,82,Country 25316,City,82,Country 25336,City,82,Country 25352,City,82,Country 25388,City,82,Country 25403,City,82,Country 25415,City,82,Country 25424,City,82,Country 25450,City,82,Country 25459,City,82,Country 25487,City,82,Country 25491,City,82,Country 25496,City,82,Country 25500,City,82,Country 25505,City,82,Country 25509,City,82,Country 25726,City,82,Country 25583,City,82,Country 25584,City,82,Country 25585,City,82,Country 25591,City,82,Country 25608,City,82,Country 25643,City,82,Country 25644,City,82,Country 25645,City,82,Country 25646,City,82,Country 25647,City,82,Country 25649,City,82,Country 25666,City,82,Country 25686,City,82,Country 25736,City,82,Country 25749,City,82,Country 25771,City,82,Country 25812,City,82,Country 25830,City,82,Country 25834,City,82,Country 25836,City,82,Country 25879,City,82,Country 25882,City,82,Country 25938,City,82,Country 25944,City,82,Country 26034,City,82,Country 26055,City,82,Country 26059,City,82,Country 26062,City,82,Country 26072,City,82,Country 26074,City,82,Country 26107,City,82,Country 26118,City,82,Country 26123,City,82,Country 26136,City,82,Country 26168,City,82,Country 26169,City,82,Country 26176,City,82,Country 26301,City,82,Country 26186,City,82,Country 26187,City,82,Country 26188,City,82,Country 26314,City,82,Country 26251,City,82,Country 26319,City,82,Country 26275,City,82,Country 26337,City,82,Country 26289,City,82,Country 26351,City,82,Country 26381,City,82,Country 26441,City,82,Country 26513,City,82,Country 26531,City,82,Country 26544,City,82,Country 26550,City,82,Country 26557,City,82,Country 26562,City,82,Country 26582,City,82,Country 26615,City,82,Country 26620,City,82,Country 26646,City,82,Country 26836,City,82,Country 26722,City,82,Country 26843,City,82,Country 26763,City,82,Country 26769,City,82,Country 26770,City,82,Country 26855,City,82,Country 26885,City,82,Country 26902,City,82,Country 26928,City,82,Country 26938,City,82,Country 26955,City,82,Country 26973,City,82,Country 26984,City,82,Country 26988,City,82,Country 27061,City,82,Country 27073,City,82,Country 27086,City,82,Country 27092,City,82,Country 27099,City,82,Country 27108,City,82,Country 27132,City,82,Country 27194,City,82,Country 27137,City,82,Country 27141,City,82,Country 27149,City,82,Country 27224,City,82,Country 27243,City,82,Country 27258,City,82,Country 27270,City,82,Country 27329,City,82,Country 27389,City,82,Country 27400,City,82,Country 27409,City,82,Country 27417,City,82,Country 27419,City,82,Country 27434,City,82,Country 27455,City,82,Country 27487,City,82,Country 27576,City,82,Country 27577,City,82,Country 27601,City,82,Country 27612,City,82,Country 27620,City,82,Country 27628,City,82,Country 27650,City,82,Country 27661,City,82,Country 27675,City,82,Country 27688,City,82,Country 27692,City,82,Country 27729,City,82,Country 27748,City,82,Country 27761,City,82,Country 27795,City,82,Country 27821,City,82,Country 27822,City,82,Country 27825,City,82,Country 27826,City,82,Country 27832,City,82,Country 27834,City,82,Country 27838,City,82,Country 27853,City,82,Country 27864,City,82,Country 27867,City,82,Country 27958,City,82,Country 27960,City,82,Country 27965,City,82,Country 27967,City,82,Country 28050,City,82,Country 28051,City,82,Country 28086,City,82,Country 28130,City,82,Country 28196,City,82,Country 28295,City,82,Country 28297,City,82,Country 28353,City,82,Country 28437,City,82,Country 28475,City,82,Country 28478,City,82,Country 28496,City,82,Country 28497,City,82,Country 28517,City,82,Country 28519,City,82,Country 28520,City,82,Country 28537,City,82,Country 28558,City,82,Country 28561,City,82,Country 28569,City,82,Country 28637,City,82,Country 28655,City,82,Country 28671,City,82,Country 28676,City,82,Country 28679,City,82,Country 28697,City,82,Country 28701,City,82,Country 28702,City,82,Country 28709,City,82,Country 28741,City,82,Country 28719,City,82,Country 28722,City,82,Country 28801,City,82,Country 28764,City,82,Country 28809,City,82,Country 28823,City,82,Country 28901,City,82,Country 28931,City,82,Country 28963,City,82,Country 28980,City,82,Country 28984,City,82,Country 28997,City,82,Country 29099,City,82,Country 29027,City,82,Country 29030,City,82,Country 29050,City,82,Country 29051,City,82,Country 29053,City,82,Country 29055,City,82,Country 29071,City,82,Country 29155,City,82,Country 29179,City,82,Country 29185,City,82,Country 29243,City,82,Country 29490,City,82,Country 29260,City,82,Country 29279,City,82,Country 29287,City,82,Country 29319,City,82,Country 29346,City,82,Country 29350,City,82,Country 29362,City,82,Country 29365,City,82,Country 29414,City,82,Country 29468,City,82,Country 29520,City,82,Country 29537,City,82,Country 29653,City,82,Country 29660,City,82,Country 29715,City,82,Country 29739,City,82,Country 29751,City,82,Country 29798,City,82,Country 29829,City,82,Country 29848,City,82,Country 29854,City,82,Country 29887,City,82,Country 29875,City,82,Country 29899,City,82,Country 30436,City,82,Country 29933,City,82,Country 29938,City,82,Country 29943,City,82,Country 29944,City,82,Country 29953,City,82,Country 29988,City,82,Country 30001,City,82,Country 30062,City,82,Country 30085,City,82,Country 30094,City,82,Country 30097,City,82,Country 30118,City,82,Country 30224,City,82,Country 30230,City,82,Country 30254,City,82,Country 30295,City,82,Country 30296,City,82,Country 30367,City,82,Country 30372,City,82,Country 30439,City,82,Country 30382,City,82,Country 30503,City,82,Country 30537,City,82,Country 23465,City,82,Country 23473,City,82,Country 23478,City,82,Country 23479,City,82,Country 23487,City,82,Country 23488,City,82,Country 23489,City,82,Country 23494,City,82,Country 23497,City,82,Country 23501,City,82,Country 23503,City,82,Country 23505,City,82,Country 23507,City,82,Country 23508,City,82,Country 23515,City,82,Country 23549,City,82,Country 23551,City,82,Country 23553,City,82,Country 23578,City,82,Country 23591,City,82,Country 23609,City,82,Country 23644,City,82,Country 23660,City,82,Country 23669,City,82,Country 23670,City,82,Country 23671,City,82,Country 23676,City,82,Country 23691,City,82,Country 23694,City,82,Country 23709,City,82,Country 23727,City,82,Country 23734,City,82,Country 23741,City,82,Country 23744,City,82,Country 23765,City,82,Country 23770,City,82,Country 23788,City,82,Country 23793,City,82,Country 23794,City,82,Country 23800,City,82,Country 23802,City,82,Country 23803,City,82,Country 23811,City,82,Country 23823,City,82,Country 23827,City,82,Country 23837,City,82,Country 23841,City,82,Country 23848,City,82,Country 23852,City,82,Country 23854,City,82,Country 23855,City,82,Country 23890,City,82,Country 23892,City,82,Country 23893,City,82,Country 23896,City,82,Country 23900,City,82,Country 23901,City,82,Country 23908,City,82,Country 23909,City,82,Country 23911,City,82,Country 23922,City,82,Country 23927,City,82,Country 23928,City,82,Country 23929,City,82,Country 23931,City,82,Country 23938,City,82,Country 23942,City,82,Country 23950,City,82,Country 23946,City,82,Country 23948,City,82,Country 23949,City,82,Country 23951,City,82,Country 23953,City,82,Country 23964,City,82,Country 23976,City,82,Country 23977,City,82,Country 23981,City,82,Country 23988,City,82,Country 23991,City,82,Country 24004,City,82,Country 24007,City,82,Country 24031,City,82,Country 24033,City,82,Country 24036,City,82,Country 24073,City,82,Country 24077,City,82,Country 24081,City,82,Country 24084,City,82,Country 24090,City,82,Country 24091,City,82,Country 24092,City,82,Country 24109,City,82,Country 24120,City,82,Country 24125,City,82,Country 24129,City,82,Country 24155,City,82,Country 24156,City,82,Country 24175,City,82,Country 24179,City,82,Country 24180,City,82,Country 24185,City,82,Country 24198,City,82,Country 24200,City,82,Country 24202,City,82,Country 24204,City,82,Country 24208,City,82,Country 24213,City,82,Country 24216,City,82,Country 24219,City,82,Country 24228,City,82,Country 24472,City,82,Country 24247,City,82,Country 24477,City,82,Country 24258,City,82,Country 24479,City,82,Country 24482,City,82,Country 24262,City,82,Country 24266,City,82,Country 24270,City,82,Country 24273,City,82,Country 24275,City,82,Country 24276,City,82,Country 24288,City,82,Country 24291,City,82,Country 24294,City,82,Country 24322,City,82,Country 24334,City,82,Country 24339,City,82,Country 24340,City,82,Country 24345,City,82,Country 24348,City,82,Country 24370,City,82,Country 24392,City,82,Country 24393,City,82,Country 24490,City,82,Country 24491,City,82,Country 24492,City,82,Country 24499,City,82,Country 24402,City,82,Country 24415,City,82,Country 24449,City,82,Country 24457,City,82,Country 24511,City,82,Country 24515,City,82,Country 24521,City,82,Country 24528,City,82,Country 24538,City,82,Country 24541,City,82,Country 24543,City,82,Country 24552,City,82,Country 24560,City,82,Country 24570,City,82,Country 24580,City,82,Country 24588,City,82,Country 24591,City,82,Country 24592,City,82,Country 24599,City,82,Country 24608,City,82,Country 24609,City,82,Country 24617,City,82,Country 24625,City,82,Country 24626,City,82,Country 24642,City,82,Country 24644,City,82,Country 24645,City,82,Country 24646,City,82,Country 24654,City,82,Country 24658,City,82,Country 24662,City,82,Country 24667,City,82,Country 24670,City,82,Country 24697,City,82,Country 24705,City,82,Country 24720,City,82,Country 24721,City,82,Country 24722,City,82,Country 24745,City,82,Country 24800,City,82,Country 24748,City,82,Country 24802,City,82,Country 24804,City,82,Country 24752,City,82,Country 24753,City,82,Country 24754,City,82,Country 24755,City,82,Country 24767,City,82,Country 24770,City,82,Country 24777,City,82,Country 24779,City,82,Country 24808,City,82,Country 24783,City,82,Country 24827,City,82,Country 24836,City,82,Country 24844,City,82,Country 24845,City,82,Country 24854,City,82,Country 24859,City,82,Country 24869,City,82,Country 24875,City,82,Country 24892,City,82,Country 24909,City,82,Country 24915,City,82,Country 24917,City,82,Country 24918,City,82,Country 24920,City,82,Country 24922,City,82,Country 24939,City,82,Country 24942,City,82,Country 24962,City,82,Country 24967,City,82,Country 24980,City,82,Country 24981,City,82,Country 24982,City,82,Country 24985,City,82,Country 24993,City,82,Country 24996,City,82,Country 24997,City,82,Country 25000,City,82,Country 25047,City,82,Country 25078,City,82,Country 25082,City,82,Country 25086,City,82,Country 25092,City,82,Country 25094,City,82,Country 25103,City,82,Country 25105,City,82,Country 25121,City,82,Country 25122,City,82,Country 25123,City,82,Country 25124,City,82,Country 25146,City,82,Country 25147,City,82,Country 25171,City,82,Country 25177,City,82,Country 25201,City,82,Country 25236,City,82,Country 25241,City,82,Country 25255,City,82,Country 25272,City,82,Country 25283,City,82,Country 25300,City,82,Country 25326,City,82,Country 25327,City,82,Country 25356,City,82,Country 25360,City,82,Country 25361,City,82,Country 25366,City,82,Country 25368,City,82,Country 25370,City,82,Country 25372,City,82,Country 25389,City,82,Country 25392,City,82,Country 25393,City,82,Country 25419,City,82,Country 25432,City,82,Country 25433,City,82,Country 25440,City,82,Country 25461,City,82,Country 25481,City,82,Country 25486,City,82,Country 25488,City,82,Country 25492,City,82,Country 25498,City,82,Country 25502,City,82,Country 25522,City,82,Country 25532,City,82,Country 25534,City,82,Country 25547,City,82,Country 25788,City,82,Country 25569,City,82,Country 25578,City,82,Country 25580,City,82,Country 25615,City,82,Country 25623,City,82,Country 25631,City,82,Country 25633,City,82,Country 25640,City,82,Country 25665,City,82,Country 25672,City,82,Country 25738,City,82,Country 25750,City,82,Country 25772,City,82,Country 25815,City,82,Country 25817,City,82,Country 25819,City,82,Country 25821,City,82,Country 25843,City,82,Country 25852,City,82,Country 25864,City,82,Country 25870,City,82,Country 25872,City,82,Country 25875,City,82,Country 25883,City,82,Country 25885,City,82,Country 26296,City,82,Country 25889,City,82,Country 25890,City,82,Country 25891,City,82,Country 25893,City,82,Country 25894,City,82,Country 25899,City,82,Country 25902,City,82,Country 25904,City,82,Country 25907,City,82,Country 25910,City,82,Country 25920,City,82,Country 25927,City,82,Country 25961,City,82,Country 25931,City,82,Country 25933,City,82,Country 25934,City,82,Country 25935,City,82,Country 25941,City,82,Country 25957,City,82,Country 25969,City,82,Country 25973,City,82,Country 25975,City,82,Country 25976,City,82,Country 25977,City,82,Country 25978,City,82,Country 25979,City,82,Country 25984,City,82,Country 26011,City,82,Country 26012,City,82,Country 26016,City,82,Country 26028,City,82,Country 26032,City,82,Country 26033,City,82,Country 26040,City,82,Country 26043,City,82,Country 26045,City,82,Country 26046,City,82,Country 26056,City,82,Country 26075,City,82,Country 26099,City,82,Country 26101,City,82,Country 26104,City,82,Country 26105,City,82,Country 26108,City,82,Country 26122,City,82,Country 26127,City,82,Country 26137,City,82,Country 26139,City,82,Country 26143,City,82,Country 26148,City,82,Country 26151,City,82,Country 26153,City,82,Country 26155,City,82,Country 26159,City,82,Country 26170,City,82,Country 26183,City,82,Country 26206,City,82,Country 26225,City,82,Country 26228,City,82,Country 26229,City,82,Country 26232,City,82,Country 26238,City,82,Country 26248,City,82,Country 26253,City,82,Country 26316,City,82,Country 26267,City,82,Country 26268,City,82,Country 26273,City,82,Country 26276,City,82,Country 26279,City,82,Country 26280,City,82,Country 26336,City,82,Country 26291,City,82,Country 26360,City,82,Country 26374,City,82,Country 26412,City,82,Country 26414,City,82,Country 26420,City,82,Country 26428,City,82,Country 26433,City,82,Country 26434,City,82,Country 26440,City,82,Country 26445,City,82,Country 26450,City,82,Country 26458,City,82,Country 26472,City,82,Country 26461,City,82,Country 26485,City,82,Country 26488,City,82,Country 26536,City,82,Country 26576,City,82,Country 26601,City,82,Country 26604,City,82,Country 26614,City,82,Country 26630,City,82,Country 26632,City,82,Country 26634,City,82,Country 26636,City,82,Country 26648,City,82,Country 26658,City,82,Country 26659,City,82,Country 26665,City,82,Country 26697,City,82,Country 26833,City,82,Country 26745,City,82,Country 26747,City,82,Country 26851,City,82,Country 26861,City,82,Country 26808,City,82,Country 26863,City,82,Country 26864,City,82,Country 26869,City,82,Country 27184,City,82,Country 26887,City,82,Country 26888,City,82,Country 26891,City,82,Country 26892,City,82,Country 26901,City,82,Country 26903,City,82,Country 26919,City,82,Country 26933,City,82,Country 26939,City,82,Country 26945,City,82,Country 26953,City,82,Country 26954,City,82,Country 26966,City,82,Country 26967,City,82,Country 26969,City,82,Country 26999,City,82,Country 27000,City,82,Country 27001,City,82,Country 27011,City,82,Country 27013,City,82,Country 27018,City,82,Country 27034,City,82,Country 27037,City,82,Country 27039,City,82,Country 27043,City,82,Country 27087,City,82,Country 27088,City,82,Country 27096,City,82,Country 27110,City,82,Country 27113,City,82,Country 27114,City,82,Country 27118,City,82,Country 27135,City,82,Country 27196,City,82,Country 27150,City,82,Country 27156,City,82,Country 27210,City,82,Country 27212,City,82,Country 27215,City,82,Country 27170,City,82,Country 27218,City,82,Country 27175,City,82,Country 27220,City,82,Country 27180,City,82,Country 27276,City,82,Country 27279,City,82,Country 27289,City,82,Country 27326,City,82,Country 27328,City,82,Country 27332,City,82,Country 27366,City,82,Country 27368,City,82,Country 27381,City,82,Country 27390,City,82,Country 27393,City,82,Country 27396,City,82,Country 27411,City,82,Country 27413,City,82,Country 27428,City,82,Country 27435,City,82,Country 27458,City,82,Country 27479,City,82,Country 27503,City,82,Country 27504,City,82,Country 27524,City,82,Country 27527,City,82,Country 27585,City,82,Country 27543,City,82,Country 27637,City,82,Country 27687,City,82,Country 27690,City,82,Country 27710,City,82,Country 27703,City,82,Country 27721,City,82,Country 27738,City,82,Country 27742,City,82,Country 27754,City,82,Country 27799,City,82,Country 27855,City,82,Country 27865,City,82,Country 27892,City,82,Country 27895,City,82,Country 27911,City,82,Country 27912,City,82,Country 27914,City,82,Country 27915,City,82,Country 27922,City,82,Country 27923,City,82,Country 27925,City,82,Country 27927,City,82,Country 27947,City,82,Country 27930,City,82,Country 27931,City,82,Country 27933,City,82,Country 27936,City,82,Country 28005,City,82,Country 28007,City,82,Country 28010,City,82,Country 28074,City,82,Country 28080,City,82,Country 28105,City,82,Country 28108,City,82,Country 28139,City,82,Country 28140,City,82,Country 28143,City,82,Country 28145,City,82,Country 28149,City,82,Country 28153,City,82,Country 28156,City,82,Country 28166,City,82,Country 28183,City,82,Country 28184,City,82,Country 28188,City,82,Country 28189,City,82,Country 28199,City,82,Country 28205,City,82,Country 28218,City,82,Country 28225,City,82,Country 28234,City,82,Country 28242,City,82,Country 28253,City,82,Country 28343,City,82,Country 28345,City,82,Country 28424,City,82,Country 28439,City,82,Country 28440,City,82,Country 28480,City,82,Country 28505,City,82,Country 28511,City,82,Country 28515,City,82,Country 28529,City,82,Country 28530,City,82,Country 28566,City,82,Country 28573,City,82,Country 28585,City,82,Country 28587,City,82,Country 28588,City,82,Country 28598,City,82,Country 28602,City,82,Country 28603,City,82,Country 28619,City,82,Country 28620,City,82,Country 28627,City,82,Country 28648,City,82,Country 28664,City,82,Country 28667,City,82,Country 28677,City,82,Country 28783,City,82,Country 28699,City,82,Country 28703,City,82,Country 28704,City,82,Country 28718,City,82,Country 28788,City,82,Country 28804,City,82,Country 28761,City,82,Country 28822,City,82,Country 28838,City,82,Country 28839,City,82,Country 28840,City,82,Country 28841,City,82,Country 28852,City,82,Country 28857,City,82,Country 28860,City,82,Country 28885,City,82,Country 28890,City,82,Country 28894,City,82,Country 28909,City,82,Country 28912,City,82,Country 28918,City,82,Country 28920,City,82,Country 28926,City,82,Country 28942,City,82,Country 28946,City,82,Country 28958,City,82,Country 29005,City,82,Country 29009,City,82,Country 29127,City,82,Country 29135,City,82,Country 29026,City,82,Country 29138,City,82,Country 29045,City,82,Country 29059,City,82,Country 29062,City,82,Country 29063,City,82,Country 29147,City,82,Country 29161,City,82,Country 29163,City,82,Country 29165,City,82,Country 29166,City,82,Country 29167,City,82,Country 29168,City,82,Country 29170,City,82,Country 29183,City,82,Country 29200,City,82,Country 29205,City,82,Country 29207,City,82,Country 29209,City,82,Country 29230,City,82,Country 29251,City,82,Country 29253,City,82,Country 29491,City,82,Country 29492,City,82,Country 29262,City,82,Country 29263,City,82,Country 29281,City,82,Country 29295,City,82,Country 29306,City,82,Country 29309,City,82,Country 29314,City,82,Country 29317,City,82,Country 29321,City,82,Country 29327,City,82,Country 29348,City,82,Country 29355,City,82,Country 29373,City,82,Country 29383,City,82,Country 29387,City,82,Country 29395,City,82,Country 29407,City,82,Country 29449,City,82,Country 29420,City,82,Country 29442,City,82,Country 29458,City,82,Country 29459,City,82,Country 29498,City,82,Country 29460,City,82,Country 29463,City,82,Country 29465,City,82,Country 29506,City,82,Country 29483,City,82,Country 29508,City,82,Country 29484,City,82,Country 29486,City,82,Country 29528,City,82,Country 29529,City,82,Country 29560,City,82,Country 29586,City,82,Country 29597,City,82,Country 29599,City,82,Country 29608,City,82,Country 29631,City,82,Country 29635,City,82,Country 29706,City,82,Country 29696,City,82,Country 29713,City,82,Country 29722,City,82,Country 29723,City,82,Country 29725,City,82,Country 29729,City,82,Country 29743,City,82,Country 29768,City,82,Country 29785,City,82,Country 29799,City,82,Country 29802,City,82,Country 29813,City,82,Country 29814,City,82,Country 29816,City,82,Country 29817,City,82,Country 29830,City,82,Country 29832,City,82,Country 29834,City,82,Country 29843,City,82,Country 29860,City,82,Country 29861,City,82,Country 29886,City,82,Country 29877,City,82,Country 29878,City,82,Country 29881,City,82,Country 29883,City,82,Country 29885,City,82,Country 29896,City,82,Country 29914,City,82,Country 29915,City,82,Country 29921,City,82,Country 29930,City,82,Country 29969,City,82,Country 29976,City,82,Country 29993,City,82,Country 30005,City,82,Country 30007,City,82,Country 30013,City,82,Country 30019,City,82,Country 30029,City,82,Country 30039,City,82,Country 30051,City,82,Country 30142,City,82,Country 30152,City,82,Country 30156,City,82,Country 30162,City,82,Country 30165,City,82,Country 30175,City,82,Country 30186,City,82,Country 30194,City,82,Country 30199,City,82,Country 30206,City,82,Country 30210,City,82,Country 30215,City,82,Country 30217,City,82,Country 30223,City,82,Country 30234,City,82,Country 30238,City,82,Country 30240,City,82,Country 30244,City,82,Country 30249,City,82,Country 30250,City,82,Country 30265,City,82,Country 30267,City,82,Country 30268,City,82,Country 30269,City,82,Country 30270,City,82,Country 30274,City,82,Country 30278,City,82,Country 30286,City,82,Country 30302,City,82,Country 30304,City,82,Country 30317,City,82,Country 30322,City,82,Country 30329,City,82,Country 30341,City,82,Country 30344,City,82,Country 30347,City,82,Country 30359,City,82,Country 30362,City,82,Country 30363,City,82,Country 30365,City,82,Country 30377,City,82,Country 30385,City,82,Country 30442,City,82,Country 30399,City,82,Country 30401,City,82,Country 30407,City,82,Country 30408,City,82,Country 30409,City,82,Country 30410,City,82,Country 30414,City,82,Country 30415,City,82,Country 30417,City,82,Country 30419,City,82,Country 30432,City,82,Country 30496,City,82,Country 30497,City,82,Country 30500,City,82,Country 30514,City,82,Country 23492,City,82,Country 23502,City,82,Country 23576,City,82,Country 23580,City,82,Country 23586,City,82,Country 23604,City,82,Country 23611,City,82,Country 23617,City,82,Country 23635,City,82,Country 23659,City,82,Country 23782,City,82,Country 23814,City,82,Country 23875,City,82,Country 23923,City,82,Country 23943,City,82,Country 23944,City,82,Country 23955,City,82,Country 24020,City,82,Country 24021,City,82,Country 24037,City,82,Country 24066,City,82,Country 24108,City,82,Country 24172,City,82,Country 24186,City,82,Country 24191,City,82,Country 24218,City,82,Country 24473,City,82,Country 24249,City,82,Country 24256,City,82,Country 24282,City,82,Country 24341,City,82,Country 24367,City,82,Country 24358,City,82,Country 24373,City,82,Country 24408,City,82,Country 24444,City,82,Country 24510,City,82,Country 24522,City,82,Country 24524,City,82,Country 24565,City,82,Country 24573,City,82,Country 24595,City,82,Country 24601,City,82,Country 24627,City,82,Country 24629,City,82,Country 24641,City,82,Country 24672,City,82,Country 24673,City,82,Country 24711,City,82,Country 24798,City,82,Country 24728,City,82,Country 24756,City,82,Country 24774,City,82,Country 24806,City,82,Country 24781,City,82,Country 24877,City,82,Country 24941,City,82,Country 24959,City,82,Country 25157,City,82,Country 25164,City,82,Country 25224,City,82,Country 25281,City,82,Country 25343,City,82,Country 25773,City,82,Country 25374,City,82,Country 25411,City,82,Country 25483,City,82,Country 25495,City,82,Country 25516,City,82,Country 25523,City,82,Country 25531,City,82,Country 25782,City,82,Country 25559,City,82,Country 25560,City,82,Country 25574,City,82,Country 25592,City,82,Country 25606,City,82,Country 25611,City,82,Country 25624,City,82,Country 25628,City,82,Country 25630,City,82,Country 25632,City,82,Country 25642,City,82,Country 25800,City,82,Country 25803,City,82,Country 25823,City,82,Country 26131,City,82,Country 26270,City,82,Country 26430,City,82,Country 26432,City,82,Country 26468,City,82,Country 26475,City,82,Country 26491,City,82,Country 26516,City,82,Country 26547,City,82,Country 26566,City,82,Country 26574,City,82,Country 26663,City,82,Country 26690,City,82,Country 26700,City,82,Country 26728,City,82,Country 26737,City,82,Country 26738,City,82,Country 26764,City,82,Country 26783,City,82,Country 26785,City,82,Country 26862,City,82,Country 26878,City,82,Country 26882,City,82,Country 26947,City,82,Country 26952,City,82,Country 27003,City,82,Country 27072,City,82,Country 27191,City,82,Country 27128,City,82,Country 27140,City,82,Country 27158,City,82,Country 27206,City,82,Country 27207,City,82,Country 27208,City,82,Country 27209,City,82,Country 27214,City,82,Country 27166,City,82,Country 27226,City,82,Country 27249,City,82,Country 27251,City,82,Country 27255,City,82,Country 27320,City,82,Country 27360,City,82,Country 27432,City,82,Country 27475,City,82,Country 27563,City,82,Country 27570,City,82,Country 27588,City,82,Country 27594,City,82,Country 27689,City,82,Country 27700,City,82,Country 27704,City,82,Country 27706,City,82,Country 27722,City,82,Country 27753,City,82,Country 27764,City,82,Country 27773,City,82,Country 27807,City,82,Country 27810,City,82,Country 27818,City,82,Country 27894,City,82,Country 27896,City,82,Country 27935,City,82,Country 28168,City,82,Country 28169,City,82,Country 28170,City,82,Country 28171,City,82,Country 28172,City,82,Country 28173,City,82,Country 28174,City,82,Country 28175,City,82,Country 28214,City,82,Country 28219,City,82,Country 28222,City,82,Country 28229,City,82,Country 28236,City,82,Country 28252,City,82,Country 28257,City,82,Country 28305,City,82,Country 28314,City,82,Country 28317,City,82,Country 28358,City,82,Country 28372,City,82,Country 28395,City,82,Country 28408,City,82,Country 28435,City,82,Country 28459,City,82,Country 28482,City,82,Country 28502,City,82,Country 28534,City,82,Country 28556,City,82,Country 28586,City,82,Country 28589,City,82,Country 28621,City,82,Country 28622,City,82,Country 28773,City,82,Country 28684,City,82,Country 28685,City,82,Country 28708,City,82,Country 28715,City,82,Country 28796,City,82,Country 28811,City,82,Country 28828,City,82,Country 28848,City,82,Country 28900,City,82,Country 28891,City,82,Country 28924,City,82,Country 28959,City,82,Country 29038,City,82,Country 29090,City,82,Country 29144,City,82,Country 29145,City,82,Country 29154,City,82,Country 29156,City,82,Country 29169,City,82,Country 29180,City,82,Country 29182,City,82,Country 29225,City,82,Country 29304,City,82,Country 29448,City,82,Country 29377,City,82,Country 29401,City,82,Country 29424,City,82,Country 29425,City,82,Country 29427,City,82,Country 29464,City,82,Country 29503,City,82,Country 29530,City,82,Country 29561,City,82,Country 29562,City,82,Country 29633,City,82,Country 29665,City,82,Country 29671,City,82,Country 29679,City,82,Country 29693,City,82,Country 29719,City,82,Country 29797,City,82,Country 29827,City,82,Country 29844,City,82,Country 29907,City,82,Country 30014,City,82,Country 30015,City,82,Country 30017,City,82,Country 30020,City,82,Country 30022,City,82,Country 30042,City,82,Country 30116,City,82,Country 30159,City,82,Country 30171,City,82,Country 30193,City,82,Country 30222,City,82,Country 30247,City,82,Country 30345,City,82,Country 30353,City,82,Country 30354,City,82,Country 30355,City,82,Country 30373,City,82,Country 30389,City,82,Country 30416,City,82,Country 30428,City,82,Country 30431,City,82,Country 30472,City,82,Country 30473,City,82,Country 30506,City,82,Country 30509,City,82,Country 30527,City,82,Country 30544,City,82,Country 23463,City,82,Country 23500,City,82,Country 23504,City,82,Country 23542,City,82,Country 23552,City,82,Country 23564,City,82,Country 23568,City,82,Country 23589,City,82,Country 23592,City,82,Country 23594,City,82,Country 23597,City,82,Country 23636,City,82,Country 23637,City,82,Country 23665,City,82,Country 23686,City,82,Country 23705,City,82,Country 23714,City,82,Country 23732,City,82,Country 23768,City,82,Country 23783,City,82,Country 23797,City,82,Country 23807,City,82,Country 23809,City,82,Country 23822,City,82,Country 23831,City,82,Country 23834,City,82,Country 23839,City,82,Country 23844,City,82,Country 23857,City,82,Country 23859,City,82,Country 23898,City,82,Country 23914,City,82,Country 23918,City,82,Country 23940,City,82,Country 23965,City,82,Country 23979,City,82,Country 23980,City,82,Country 23982,City,82,Country 24039,City,82,Country 24041,City,82,Country 24042,City,82,Country 24045,City,82,Country 24080,City,82,Country 24093,City,82,Country 24107,City,82,Country 24116,City,82,Country 24117,City,82,Country 24131,City,82,Country 24169,City,82,Country 24184,City,82,Country 24192,City,82,Country 24193,City,82,Country 24194,City,82,Country 24469,City,82,Country 24231,City,82,Country 24240,City,82,Country 24242,City,82,Country 24244,City,82,Country 24253,City,82,Country 24263,City,82,Country 24274,City,82,Country 24292,City,82,Country 24335,City,82,Country 24369,City,82,Country 24372,City,82,Country 24389,City,82,Country 24390,City,82,Country 24500,City,82,Country 24405,City,82,Country 24501,City,82,Country 24445,City,82,Country 24526,City,82,Country 24547,City,82,Country 24577,City,82,Country 24602,City,82,Country 24621,City,82,Country 24647,City,82,Country 24659,City,82,Country 24698,City,82,Country 24799,City,82,Country 24738,City,82,Country 24746,City,82,Country 24747,City,82,Country 24761,City,82,Country 24766,City,82,Country 24771,City,82,Country 24780,City,82,Country 24805,City,82,Country 24810,City,82,Country 24817,City,82,Country 24818,City,82,Country 24819,City,82,Country 24912,City,82,Country 24937,City,82,Country 24963,City,82,Country 24989,City,82,Country 24994,City,82,Country 25003,City,82,Country 25006,City,82,Country 25010,City,82,Country 25012,City,82,Country 25037,City,82,Country 25045,City,82,Country 25050,City,82,Country 25063,City,82,Country 25071,City,82,Country 25085,City,82,Country 25088,City,82,Country 25089,City,82,Country 25095,City,82,Country 25116,City,82,Country 25120,City,82,Country 25172,City,82,Country 25234,City,82,Country 25256,City,82,Country 25311,City,82,Country 25357,City,82,Country 25396,City,82,Country 25412,City,82,Country 25416,City,82,Country 25468,City,82,Country 25471,City,82,Country 25478,City,82,Country 25499,City,82,Country 25525,City,82,Country 25589,City,82,Country 25596,City,82,Country 25604,City,82,Country 25605,City,82,Country 25614,City,82,Country 25752,City,82,Country 25802,City,82,Country 25806,City,82,Country 25818,City,82,Country 25851,City,82,Country 25855,City,82,Country 25861,City,82,Country 25862,City,82,Country 25873,City,82,Country 25880,City,82,Country 25908,City,82,Country 25940,City,82,Country 25958,City,82,Country 25974,City,82,Country 25983,City,82,Country 25998,City,82,Country 26005,City,82,Country 26015,City,82,Country 26025,City,82,Country 26038,City,82,Country 26050,City,82,Country 26063,City,82,Country 26067,City,82,Country 26083,City,82,Country 26094,City,82,Country 26096,City,82,Country 26103,City,82,Country 26130,City,82,Country 26133,City,82,Country 26135,City,82,Country 26142,City,82,Country 26175,City,82,Country 26309,City,82,Country 26250,City,82,Country 26258,City,82,Country 26264,City,82,Country 26321,City,82,Country 26274,City,82,Country 26326,City,82,Country 26327,City,82,Country 26328,City,82,Country 26329,City,82,Country 26335,City,82,Country 26283,City,82,Country 26338,City,82,Country 26339,City,82,Country 26340,City,82,Country 26346,City,82,Country 26387,City,82,Country 26413,City,82,Country 26418,City,82,Country 26419,City,82,Country 26470,City,82,Country 26473,City,82,Country 26477,City,82,Country 26489,City,82,Country 26490,City,82,Country 26492,City,82,Country 26499,City,82,Country 26503,City,82,Country 26567,City,82,Country 26572,City,82,Country 26580,City,82,Country 26586,City,82,Country 26627,City,82,Country 26629,City,82,Country 26662,City,82,Country 26683,City,82,Country 26818,City,82,Country 26839,City,82,Country 26726,City,82,Country 26739,City,82,Country 26746,City,82,Country 26755,City,82,Country 26757,City,82,Country 26860,City,82,Country 26870,City,82,Country 26873,City,82,Country 26874,City,82,Country 26909,City,82,Country 26918,City,82,Country 26935,City,82,Country 26949,City,82,Country 27005,City,82,Country 27016,City,82,Country 27035,City,82,Country 27044,City,82,Country 27046,City,82,Country 27054,City,82,Country 27071,City,82,Country 27075,City,82,Country 27093,City,82,Country 27111,City,82,Country 27117,City,82,Country 27120,City,82,Country 27133,City,82,Country 27195,City,82,Country 27153,City,82,Country 27202,City,82,Country 27211,City,82,Country 27216,City,82,Country 27217,City,82,Country 27219,City,82,Country 27277,City,82,Country 27318,City,82,Country 27325,City,82,Country 27354,City,82,Country 27358,City,82,Country 27362,City,82,Country 27367,City,82,Country 27375,City,82,Country 27380,City,82,Country 27382,City,82,Country 27404,City,82,Country 27407,City,82,Country 27431,City,82,Country 27436,City,82,Country 27441,City,82,Country 27443,City,82,Country 27472,City,82,Country 27499,City,82,Country 27561,City,82,Country 27568,City,82,Country 27509,City,82,Country 27510,City,82,Country 27526,City,82,Country 27530,City,82,Country 27604,City,82,Country 27621,City,82,Country 27631,City,82,Country 27683,City,82,Country 27684,City,82,Country 27685,City,82,Country 27694,City,82,Country 27702,City,82,Country 27716,City,82,Country 27723,City,82,Country 27725,City,82,Country 27779,City,82,Country 27792,City,82,Country 27808,City,82,Country 27809,City,82,Country 27823,City,82,Country 27850,City,82,Country 27854,City,82,Country 27857,City,82,Country 27885,City,82,Country 27889,City,82,Country 27901,City,82,Country 27924,City,82,Country 27928,City,82,Country 27949,City,82,Country 27937,City,82,Country 27952,City,82,Country 27985,City,82,Country 28001,City,82,Country 28065,City,82,Country 28069,City,82,Country 28076,City,82,Country 28079,City,82,Country 28082,City,82,Country 28111,City,82,Country 28112,City,82,Country 28113,City,82,Country 28116,City,82,Country 28141,City,82,Country 28142,City,82,Country 28161,City,82,Country 28200,City,82,Country 28209,City,82,Country 28264,City,82,Country 28324,City,82,Country 28342,City,82,Country 28356,City,82,Country 28357,City,82,Country 28384,City,82,Country 28403,City,82,Country 28445,City,82,Country 28449,City,82,Country 28451,City,82,Country 28484,City,82,Country 28487,City,82,Country 28506,City,82,Country 28507,City,82,Country 28510,City,82,Country 28516,City,82,Country 28518,City,82,Country 28521,City,82,Country 28523,City,82,Country 28576,City,82,Country 28600,City,82,Country 28601,City,82,Country 28605,City,82,Country 28606,City,82,Country 28610,City,82,Country 28616,City,82,Country 28641,City,82,Country 28650,City,82,Country 28779,City,82,Country 28682,City,82,Country 28696,City,82,Country 28787,City,82,Country 28769,City,82,Country 28810,City,82,Country 28826,City,82,Country 28842,City,82,Country 28861,City,82,Country 28889,City,82,Country 28907,City,82,Country 28932,City,82,Country 28940,City,82,Country 28962,City,82,Country 28969,City,82,Country 28988,City,82,Country 29136,City,82,Country 29054,City,82,Country 29085,City,82,Country 29091,City,82,Country 29181,City,82,Country 29189,City,82,Country 29190,City,82,Country 29211,City,82,Country 29213,City,82,Country 29220,City,82,Country 29234,City,82,Country 29244,City,82,Country 29254,City,82,Country 29258,City,82,Country 29275,City,82,Country 29296,City,82,Country 29310,City,82,Country 29326,City,82,Country 29374,City,82,Country 29376,City,82,Country 29379,City,82,Country 29416,City,82,Country 29422,City,82,Country 29423,City,82,Country 29501,City,82,Country 29481,City,82,Country 29542,City,82,Country 29552,City,82,Country 29622,City,82,Country 29701,City,82,Country 29678,City,82,Country 29709,City,82,Country 30553,City,82,Country 29720,City,82,Country 29748,City,82,Country 29823,City,82,Country 29826,City,82,Country 29836,City,82,Country 29837,City,82,Country 29841,City,82,Country 29849,City,82,Country 29863,City,82,Country 29865,City,82,Country 29884,City,82,Country 29903,City,82,Country 29904,City,82,Country 29911,City,82,Country 29920,City,82,Country 29939,City,82,Country 29950,City,82,Country 29996,City,82,Country 30012,City,82,Country 30016,City,82,Country 30023,City,82,Country 30031,City,82,Country 30053,City,82,Country 30056,City,82,Country 30090,City,82,Country 30148,City,82,Country 30155,City,82,Country 30172,City,82,Country 30174,City,82,Country 30176,City,82,Country 30180,City,82,Country 30189,City,82,Country 30191,City,82,Country 30196,City,82,Country 30212,City,82,Country 30225,City,82,Country 30228,City,82,Country 30236,City,82,Country 30246,City,82,Country 30293,City,82,Country 30294,City,82,Country 30300,City,82,Country 30331,City,82,Country 30339,City,82,Country 30349,City,82,Country 30454,City,82,Country 30456,City,82,Country 30420,City,82,Country 30458,City,82,Country 30461,City,82,Country 30526,City,82,Country 23462,City,82,Country 23486,City,82,Country 23512,City,82,Country 23535,City,82,Country 23538,City,82,Country 23539,City,82,Country 23565,City,82,Country 23569,City,82,Country 23570,City,82,Country 23572,City,82,Country 23590,City,82,Country 23598,City,82,Country 23601,City,82,Country 23605,City,82,Country 23627,City,82,Country 23632,City,82,Country 23633,City,82,Country 23642,City,82,Country 23654,City,82,Country 23658,City,82,Country 23663,City,82,Country 23678,City,82,Country 23682,City,82,Country 23683,City,82,Country 23695,City,82,Country 23698,City,82,Country 23699,City,82,Country 23746,City,82,Country 23756,City,82,Country 23766,City,82,Country 23777,City,82,Country 23785,City,82,Country 23790,City,82,Country 23810,City,82,Country 23817,City,82,Country 23833,City,82,Country 23838,City,82,Country 23842,City,82,Country 23894,City,82,Country 23920,City,82,Country 23952,City,82,Country 23958,City,82,Country 23962,City,82,Country 23972,City,82,Country 23973,City,82,Country 23974,City,82,Country 23997,City,82,Country 24000,City,82,Country 24003,City,82,Country 24005,City,82,Country 24008,City,82,Country 24026,City,82,Country 24067,City,82,Country 24082,City,82,Country 24083,City,82,Country 24119,City,82,Country 24124,City,82,Country 24126,City,82,Country 24132,City,82,Country 24135,City,82,Country 24137,City,82,Country 24139,City,82,Country 24140,City,82,Country 24159,City,82,Country 24171,City,82,Country 24176,City,82,Country 24189,City,82,Country 24197,City,82,Country 24199,City,82,Country 24205,City,82,Country 24465,City,82,Country 24221,City,82,Country 24224,City,82,Country 24230,City,82,Country 24237,City,82,Country 24252,City,82,Country 24255,City,82,Country 24269,City,82,Country 24285,City,82,Country 24286,City,82,Country 24316,City,82,Country 24326,City,82,Country 24329,City,82,Country 24330,City,82,Country 24342,City,82,Country 24350,City,82,Country 24352,City,82,Country 24366,City,82,Country 24363,City,82,Country 24485,City,82,Country 24488,City,82,Country 24398,City,82,Country 24401,City,82,Country 24403,City,82,Country 24404,City,82,Country 24414,City,82,Country 24431,City,82,Country 24448,City,82,Country 24523,City,82,Country 24537,City,82,Country 24545,City,82,Country 24551,City,82,Country 24572,City,82,Country 24575,City,82,Country 24584,City,82,Country 24586,City,82,Country 24594,City,82,Country 24603,City,82,Country 24605,City,82,Country 24606,City,82,Country 24613,City,82,Country 24624,City,82,Country 24638,City,82,Country 24639,City,82,Country 24640,City,82,Country 24661,City,82,Country 24664,City,82,Country 24669,City,82,Country 24671,City,82,Country 24687,City,82,Country 24703,City,82,Country 24708,City,82,Country 24726,City,82,Country 24801,City,82,Country 24762,City,82,Country 24763,City,82,Country 24764,City,82,Country 24775,City,82,Country 24776,City,82,Country 24807,City,82,Country 24831,City,82,Country 24840,City,82,Country 24855,City,82,Country 24858,City,82,Country 24860,City,82,Country 24890,City,82,Country 24927,City,82,Country 24935,City,82,Country 24945,City,82,Country 24951,City,82,Country 24961,City,82,Country 24987,City,82,Country 25008,City,82,Country 25009,City,82,Country 25020,City,82,Country 25021,City,82,Country 25030,City,82,Country 25039,City,82,Country 25067,City,82,Country 25068,City,82,Country 25097,City,82,Country 25100,City,82,Country 25104,City,82,Country 25108,City,82,Country 25110,City,82,Country 25125,City,82,Country 25130,City,82,Country 25150,City,82,Country 25158,City,82,Country 25179,City,82,Country 25183,City,82,Country 25185,City,82,Country 25194,City,82,Country 25195,City,82,Country 25321,City,82,Country 25210,City,82,Country 25217,City,82,Country 25218,City,82,Country 25235,City,82,Country 25237,City,82,Country 25248,City,82,Country 25249,City,82,Country 25259,City,82,Country 25273,City,82,Country 25280,City,82,Country 25298,City,82,Country 25325,City,82,Country 25338,City,82,Country 25320,City,82,Country 25371,City,82,Country 25378,City,82,Country 25379,City,82,Country 25380,City,82,Country 25381,City,82,Country 25385,City,82,Country 25422,City,82,Country 25427,City,82,Country 25446,City,82,Country 25455,City,82,Country 25456,City,82,Country 25490,City,82,Country 25493,City,82,Country 25497,City,82,Country 25501,City,82,Country 25777,City,82,Country 25540,City,82,Country 25542,City,82,Country 25778,City,82,Country 25548,City,82,Country 25594,City,82,Country 25607,City,82,Country 25613,City,82,Country 25680,City,82,Country 25681,City,82,Country 25690,City,82,Country 25691,City,82,Country 25694,City,82,Country 25744,City,82,Country 25791,City,82,Country 25758,City,82,Country 25760,City,82,Country 25762,City,82,Country 25763,City,82,Country 25766,City,82,Country 25810,City,82,Country 25811,City,82,Country 25820,City,82,Country 25826,City,82,Country 25827,City,82,Country 25859,City,82,Country 25874,City,82,Country 25888,City,82,Country 25903,City,82,Country 25915,City,82,Country 25918,City,82,Country 25964,City,82,Country 25939,City,82,Country 25943,City,82,Country 25945,City,82,Country 25948,City,82,Country 25951,City,82,Country 25988,City,82,Country 25999,City,82,Country 26006,City,82,Country 26018,City,82,Country 26022,City,82,Country 26024,City,82,Country 26035,City,82,Country 26053,City,82,Country 26064,City,82,Country 26068,City,82,Country 26077,City,82,Country 26078,City,82,Country 26095,City,82,Country 26097,City,82,Country 26129,City,82,Country 26110,City,82,Country 26115,City,82,Country 26119,City,82,Country 26140,City,82,Country 26144,City,82,Country 26145,City,82,Country 26157,City,82,Country 26174,City,82,Country 26178,City,82,Country 26179,City,82,Country 26181,City,82,Country 26184,City,82,Country 26307,City,82,Country 26308,City,82,Country 26311,City,82,Country 26313,City,82,Country 26233,City,82,Country 26240,City,82,Country 26244,City,82,Country 26255,City,82,Country 26317,City,82,Country 26261,City,82,Country 26265,City,82,Country 26330,City,82,Country 26288,City,82,Country 26342,City,82,Country 26350,City,82,Country 26355,City,82,Country 26364,City,82,Country 26385,City,82,Country 26389,City,82,Country 26396,City,82,Country 26406,City,82,Country 26407,City,82,Country 26453,City,82,Country 26460,City,82,Country 26474,City,82,Country 26478,City,82,Country 26482,City,82,Country 26483,City,82,Country 26494,City,82,Country 26495,City,82,Country 26502,City,82,Country 26505,City,82,Country 26511,City,82,Country 26527,City,82,Country 26528,City,82,Country 26532,City,82,Country 26537,City,82,Country 26539,City,82,Country 26540,City,82,Country 26541,City,82,Country 26552,City,82,Country 26554,City,82,Country 26558,City,82,Country 26568,City,82,Country 26570,City,82,Country 26573,City,82,Country 26578,City,82,Country 26589,City,82,Country 26590,City,82,Country 26591,City,82,Country 26596,City,82,Country 26608,City,82,Country 26623,City,82,Country 26626,City,82,Country 26635,City,82,Country 26642,City,82,Country 26643,City,82,Country 26645,City,82,Country 26657,City,82,Country 26667,City,82,Country 26676,City,82,Country 26687,City,82,Country 26696,City,82,Country 26699,City,82,Country 26702,City,82,Country 26704,City,82,Country 26705,City,82,Country 26815,City,82,Country 26820,City,82,Country 26719,City,82,Country 26723,City,82,Country 26845,City,82,Country 26730,City,82,Country 26732,City,82,Country 26759,City,82,Country 26762,City,82,Country 26786,City,82,Country 26777,City,82,Country 26792,City,82,Country 26805,City,82,Country 26810,City,82,Country 26868,City,82,Country 26875,City,82,Country 26881,City,82,Country 26883,City,82,Country 26890,City,82,Country 26896,City,82,Country 26898,City,82,Country 26908,City,82,Country 26920,City,82,Country 26923,City,82,Country 26942,City,82,Country 26956,City,82,Country 26986,City,82,Country 27008,City,82,Country 27021,City,82,Country 27031,City,82,Country 27033,City,82,Country 27059,City,82,Country 27069,City,82,Country 27094,City,82,Country 27100,City,82,Country 27106,City,82,Country 27107,City,82,Country 27115,City,82,Country 27119,City,82,Country 27121,City,82,Country 27192,City,82,Country 27143,City,82,Country 27144,City,82,Country 27146,City,82,Country 27198,City,82,Country 27165,City,82,Country 27179,City,82,Country 27181,City,82,Country 27228,City,82,Country 27236,City,82,Country 27244,City,82,Country 27248,City,82,Country 27260,City,82,Country 27264,City,82,Country 27278,City,82,Country 27282,City,82,Country 27321,City,82,Country 27331,City,82,Country 27336,City,82,Country 27353,City,82,Country 27341,City,82,Country 27348,City,82,Country 27350,City,82,Country 27351,City,82,Country 27357,City,82,Country 27361,City,82,Country 27370,City,82,Country 27371,City,82,Country 27374,City,82,Country 27376,City,82,Country 27384,City,82,Country 27398,City,82,Country 27405,City,82,Country 27423,City,82,Country 27425,City,82,Country 27426,City,82,Country 27427,City,82,Country 27438,City,82,Country 27439,City,82,Country 27445,City,82,Country 27459,City,82,Country 27473,City,82,Country 27483,City,82,Country 27500,City,82,Country 27507,City,82,Country 27511,City,82,Country 27512,City,82,Country 27513,City,82,Country 27514,City,82,Country 27523,City,82,Country 27532,City,82,Country 27605,City,82,Country 27615,City,82,Country 27616,City,82,Country 27623,City,82,Country 27626,City,82,Country 27629,City,82,Country 27550,City,82,Country 27633,City,82,Country 27642,City,82,Country 27644,City,82,Country 27645,City,82,Country 27653,City,82,Country 27654,City,82,Country 27676,City,82,Country 27708,City,82,Country 27730,City,82,Country 27751,City,82,Country 27750,City,82,Country 27769,City,82,Country 27777,City,82,Country 27784,City,82,Country 27794,City,82,Country 27814,City,82,Country 27819,City,82,Country 27820,City,82,Country 27827,City,82,Country 27828,City,82,Country 27835,City,82,Country 27840,City,82,Country 27841,City,82,Country 27842,City,82,Country 27843,City,82,Country 27845,City,82,Country 27846,City,82,Country 27851,City,82,Country 27852,City,82,Country 27858,City,82,Country 27862,City,82,Country 27882,City,82,Country 27887,City,82,Country 27897,City,82,Country 27902,City,82,Country 27903,City,82,Country 27929,City,82,Country 27948,City,82,Country 27957,City,82,Country 27959,City,82,Country 27961,City,82,Country 27975,City,82,Country 27977,City,82,Country 28000,City,82,Country 28009,City,82,Country 28014,City,82,Country 28054,City,82,Country 28057,City,82,Country 28061,City,82,Country 28064,City,82,Country 28066,City,82,Country 28067,City,82,Country 28071,City,82,Country 28087,City,82,Country 28088,City,82,Country 28093,City,82,Country 28114,City,82,Country 28119,City,82,Country 28125,City,82,Country 28134,City,82,Country 28135,City,82,Country 28158,City,82,Country 28163,City,82,Country 28185,City,82,Country 28186,City,82,Country 28190,City,82,Country 28191,City,82,Country 30552,City,82,Country 28213,City,82,Country 28227,City,82,Country 28247,City,82,Country 28249,City,82,Country 28270,City,82,Country 28285,City,82,Country 28300,City,82,Country 28308,City,82,Country 28311,City,82,Country 28329,City,82,Country 28341,City,82,Country 28364,City,82,Country 28367,City,82,Country 28400,City,82,Country 28402,City,82,Country 28427,City,82,Country 28457,City,82,Country 28458,City,82,Country 28461,City,82,Country 28465,City,82,Country 28467,City,82,Country 28474,City,82,Country 28492,City,82,Country 28531,City,82,Country 28542,City,82,Country 28552,City,82,Country 28565,City,82,Country 28572,City,82,Country 28580,City,82,Country 28581,City,82,Country 28599,City,82,Country 28609,City,82,Country 28607,City,82,Country 28608,City,82,Country 28614,City,82,Country 28615,City,82,Country 28618,City,82,Country 28628,City,82,Country 28646,City,82,Country 28658,City,82,Country 28665,City,82,Country 28668,City,82,Country 28672,City,82,Country 28673,City,82,Country 28675,City,82,Country 28778,City,82,Country 28690,City,82,Country 28721,City,82,Country 28740,City,82,Country 28800,City,82,Country 28805,City,82,Country 28806,City,82,Country 28765,City,82,Country 28766,City,82,Country 28768,City,82,Country 28817,City,82,Country 28827,City,82,Country 28836,City,82,Country 28867,City,82,Country 28868,City,82,Country 28871,City,82,Country 28872,City,82,Country 28877,City,82,Country 28882,City,82,Country 28936,City,82,Country 28943,City,82,Country 28947,City,82,Country 29118,City,82,Country 29121,City,82,Country 29022,City,82,Country 29025,City,82,Country 29040,City,82,Country 29077,City,82,Country 29079,City,82,Country 29080,City,82,Country 29081,City,82,Country 29140,City,82,Country 29171,City,82,Country 29184,City,82,Country 29186,City,82,Country 29187,City,82,Country 29195,City,82,Country 29208,City,82,Country 29210,City,82,Country 29221,City,82,Country 29235,City,82,Country 29237,City,82,Country 29242,City,82,Country 29247,City,82,Country 29249,City,82,Country 29257,City,82,Country 29495,City,82,Country 29283,City,82,Country 29290,City,82,Country 29292,City,82,Country 29299,City,82,Country 29303,City,82,Country 29308,City,82,Country 29315,City,82,Country 29323,City,82,Country 29344,City,82,Country 29356,City,82,Country 29372,City,82,Country 29391,City,82,Country 29392,City,82,Country 29397,City,82,Country 29436,City,82,Country 29480,City,82,Country 29541,City,82,Country 29576,City,82,Country 29577,City,82,Country 29598,City,82,Country 29607,City,82,Country 29636,City,82,Country 29642,City,82,Country 29654,City,82,Country 29658,City,82,Country 29668,City,82,Country 29669,City,82,Country 29672,City,82,Country 29675,City,82,Country 29683,City,82,Country 29716,City,82,Country 30558,City,82,Country 29724,City,82,Country 29738,City,82,Country 29744,City,82,Country 29746,City,82,Country 29749,City,82,Country 29791,City,82,Country 29792,City,82,Country 29793,City,82,Country 30560,City,82,Country 29811,City,82,Country 29840,City,82,Country 29859,City,82,Country 29879,City,82,Country 29901,City,82,Country 29906,City,82,Country 29934,City,82,Country 29941,City,82,Country 29936,City,82,Country 29951,City,82,Country 29958,City,82,Country 29960,City,82,Country 29962,City,82,Country 29981,City,82,Country 29984,City,82,Country 29986,City,82,Country 29987,City,82,Country 30030,City,82,Country 30035,City,82,Country 30041,City,82,Country 30043,City,82,Country 30060,City,82,Country 30064,City,82,Country 30072,City,82,Country 30086,City,82,Country 30088,City,82,Country 30099,City,82,Country 30103,City,82,Country 30106,City,82,Country 30137,City,82,Country 30114,City,82,Country 30117,City,82,Country 30146,City,82,Country 30153,City,82,Country 30182,City,82,Country 30192,City,82,Country 30204,City,82,Country 30219,City,82,Country 30221,City,82,Country 30233,City,82,Country 30282,City,82,Country 30306,City,82,Country 30309,City,82,Country 30314,City,82,Country 30315,City,82,Country 30316,City,82,Country 30327,City,82,Country 30328,City,82,Country 30342,City,82,Country 30346,City,82,Country 30361,City,82,Country 30388,City,82,Country 30390,City,82,Country 30441,City,82,Country 30406,City,82,Country 30444,City,82,Country 30448,City,82,Country 30478,City,82,Country 30483,City,82,Country 30491,City,82,Country 30492,City,82,Country 30495,City,82,Country 30516,City,82,Country 30531,City,82,Country 23978,City,82,Country 24094,City,82,Country 24182,City,82,Country 24264,City,82,Country 24336,City,82,Country 24690,City,82,Country 25014,City,82,Country 25018,City,82,Country 25250,City,82,Country 25294,City,82,Country 25332,City,82,Country 25460,City,82,Country 25701,City,82,Country 25887,City,82,Country 25990,City,82,Country 26125,City,82,Country 26252,City,82,Country 26369,City,82,Country 26641,City,82,Country 26669,City,82,Country 26994,City,82,Country 27151,City,82,Country 27162,City,82,Country 27173,City,82,Country 27245,City,82,Country 27323,City,82,Country 27415,City,82,Country 27430,City,82,Country 27442,City,82,Country 27639,City,82,Country 27640,City,82,Country 27780,City,82,Country 27907,City,82,Country 27910,City,82,Country 28046,City,82,Country 28128,City,82,Country 28197,City,82,Country 28423,City,82,Country 28433,City,82,Country 28639,City,82,Country 28775,City,82,Country 28816,City,82,Country 28818,City,82,Country 28819,City,82,Country 28820,City,82,Country 28869,City,82,Country 28883,City,82,Country 28944,City,82,Country 28990,City,82,Country 29049,City,82,Country 29302,City,82,Country 29467,City,82,Country 29596,City,82,Country 30554,City,82,Country 29892,City,82,Country 29910,City,82,Country 29912,City,82,Country 29977,City,82,Country 30110,City,82,Country 30115,City,82,Country 23493,City,82,Country 23537,City,82,Country 23593,City,82,Country 23629,City,82,Country 23661,City,82,Country 23696,City,82,Country 23724,City,82,Country 23726,City,82,Country 23733,City,82,Country 23775,City,82,Country 23784,City,82,Country 23789,City,82,Country 23826,City,82,Country 23836,City,82,Country 23860,City,82,Country 23861,City,82,Country 23921,City,82,Country 24459,City,82,Country 23963,City,82,Country 23992,City,82,Country 23993,City,82,Country 23994,City,82,Country 23998,City,82,Country 23999,City,82,Country 24012,City,82,Country 24034,City,82,Country 24069,City,82,Country 24070,City,82,Country 24071,City,82,Country 24075,City,82,Country 24076,City,82,Country 24150,City,82,Country 24195,City,82,Country 24196,City,82,Country 24466,City,82,Country 24250,City,82,Country 24474,City,82,Country 24257,City,82,Country 24260,City,82,Country 24480,City,82,Country 24267,City,82,Country 24278,City,82,Country 24281,City,82,Country 24308,City,82,Country 24435,City,82,Country 24441,City,82,Country 24442,City,82,Country 24517,City,82,Country 24527,City,82,Country 24533,City,82,Country 24539,City,82,Country 24549,City,82,Country 24554,City,82,Country 24563,City,82,Country 24566,City,82,Country 24567,City,82,Country 24568,City,82,Country 24569,City,82,Country 24579,City,82,Country 24623,City,82,Country 24628,City,82,Country 24633,City,82,Country 24660,City,82,Country 24701,City,82,Country 24792,City,82,Country 24793,City,82,Country 24714,City,82,Country 24718,City,82,Country 24719,City,82,Country 24727,City,82,Country 24734,City,82,Country 24736,City,82,Country 24757,City,82,Country 24768,City,82,Country 24813,City,82,Country 24815,City,82,Country 24832,City,82,Country 24893,City,82,Country 24895,City,82,Country 24897,City,82,Country 24904,City,82,Country 24913,City,82,Country 24946,City,82,Country 24968,City,82,Country 24970,City,82,Country 24971,City,82,Country 24973,City,82,Country 24974,City,82,Country 25022,City,82,Country 25053,City,82,Country 25054,City,82,Country 25091,City,82,Country 25131,City,82,Country 25137,City,82,Country 25139,City,82,Country 25199,City,82,Country 25214,City,82,Country 25216,City,82,Country 25219,City,82,Country 25230,City,82,Country 25233,City,82,Country 25238,City,82,Country 25252,City,82,Country 25277,City,82,Country 25304,City,82,Country 25340,City,82,Country 25404,City,82,Country 25410,City,82,Country 25414,City,82,Country 25443,City,82,Country 25458,City,82,Country 25479,City,82,Country 25503,City,82,Country 25508,City,82,Country 25510,City,82,Country 25775,City,82,Country 25781,City,82,Country 25543,City,82,Country 25544,City,82,Country 25610,City,82,Country 25612,City,82,Country 25621,City,82,Country 25650,City,82,Country 25656,City,82,Country 25659,City,82,Country 25664,City,82,Country 25675,City,82,Country 25676,City,82,Country 25678,City,82,Country 25689,City,82,Country 25693,City,82,Country 25695,City,82,Country 25698,City,82,Country 25697,City,82,Country 25704,City,82,Country 25705,City,82,Country 25706,City,82,Country 25708,City,82,Country 25707,City,82,Country 25713,City,82,Country 25735,City,82,Country 25739,City,82,Country 25740,City,82,Country 25770,City,82,Country 26295,City,82,Country 25837,City,82,Country 25838,City,82,Country 25858,City,82,Country 25878,City,82,Country 25913,City,82,Country 25914,City,82,Country 25917,City,82,Country 25924,City,82,Country 25954,City,82,Country 25985,City,82,Country 26081,City,82,Country 26090,City,82,Country 26132,City,82,Country 26165,City,82,Country 26167,City,82,Country 26177,City,82,Country 26305,City,82,Country 26194,City,82,Country 26215,City,82,Country 26224,City,82,Country 26226,City,82,Country 26262,City,82,Country 26263,City,82,Country 26277,City,82,Country 26427,City,82,Country 26443,City,82,Country 26455,City,82,Country 26467,City,82,Country 26500,City,82,Country 26595,City,82,Country 26644,City,82,Country 26651,City,82,Country 26653,City,82,Country 26689,City,82,Country 26691,City,82,Country 26692,City,82,Country 26707,City,82,Country 26826,City,82,Country 26829,City,82,Country 26832,City,82,Country 26834,City,82,Country 26837,City,82,Country 26838,City,82,Country 26729,City,82,Country 26742,City,82,Country 26748,City,82,Country 26761,City,82,Country 26776,City,82,Country 26788,City,82,Country 26801,City,82,Country 26802,City,82,Country 26803,City,82,Country 26804,City,82,Country 26886,City,82,Country 26910,City,82,Country 26991,City,82,Country 26992,City,82,Country 26982,City,82,Country 26993,City,82,Country 27028,City,82,Country 27029,City,82,Country 27040,City,82,Country 27041,City,82,Country 27057,City,82,Country 27058,City,82,Country 27067,City,82,Country 27080,City,82,Country 27083,City,82,Country 27084,City,82,Country 27091,City,82,Country 27097,City,82,Country 27098,City,82,Country 27185,City,82,Country 27189,City,82,Country 27125,City,82,Country 27134,City,82,Country 27138,City,82,Country 27142,City,82,Country 27200,City,82,Country 27169,City,82,Country 27176,City,82,Country 27227,City,82,Country 27257,City,82,Country 27273,City,82,Country 27284,City,82,Country 27285,City,82,Country 27287,City,82,Country 27290,City,82,Country 27291,City,82,Country 27365,City,82,Country 27373,City,82,Country 27385,City,82,Country 27465,City,82,Country 27482,City,82,Country 27493,City,82,Country 27497,City,82,Country 27498,City,82,Country 27525,City,82,Country 27584,City,82,Country 27586,City,82,Country 27591,City,82,Country 27603,City,82,Country 27535,City,82,Country 27608,City,82,Country 27551,City,82,Country 27552,City,82,Country 27643,City,82,Country 27651,City,82,Country 27652,City,82,Country 27655,City,82,Country 27656,City,82,Country 27677,City,82,Country 27680,City,82,Country 27686,City,82,Country 27726,City,82,Country 27736,City,82,Country 27745,City,82,Country 27755,City,82,Country 27756,City,82,Country 27758,City,82,Country 27762,City,82,Country 27770,City,82,Country 27788,City,82,Country 27806,City,82,Country 27796,City,82,Country 27831,City,82,Country 27836,City,82,Country 27837,City,82,Country 27847,City,82,Country 27871,City,82,Country 27877,City,82,Country 27883,City,82,Country 27898,City,82,Country 27934,City,82,Country 27953,City,82,Country 27969,City,82,Country 27979,City,82,Country 27993,City,82,Country 27994,City,82,Country 28033,City,82,Country 28055,City,82,Country 28073,City,82,Country 28078,City,82,Country 28101,City,82,Country 28102,City,82,Country 28103,City,82,Country 28117,City,82,Country 28136,City,82,Country 28206,City,82,Country 28165,City,82,Country 28167,City,82,Country 28178,City,82,Country 28193,City,82,Country 28217,City,82,Country 28238,City,82,Country 28240,City,82,Country 28251,City,82,Country 28278,City,82,Country 28309,City,82,Country 28319,City,82,Country 28336,City,82,Country 28337,City,82,Country 28414,City,82,Country 28415,City,82,Country 28355,City,82,Country 28383,City,82,Country 28388,City,82,Country 28407,City,82,Country 28434,City,82,Country 28436,City,82,Country 28772,City,82,Country 28438,City,82,Country 28441,City,82,Country 28442,City,82,Country 28443,City,82,Country 28446,City,82,Country 28462,City,82,Country 28477,City,82,Country 28486,City,82,Country 28501,City,82,Country 28526,City,82,Country 28540,City,82,Country 28543,City,82,Country 28559,City,82,Country 28563,City,82,Country 28564,City,82,Country 28577,City,82,Country 28594,City,82,Country 28645,City,82,Country 28653,City,82,Country 28669,City,82,Country 28670,City,82,Country 28678,City,82,Country 28713,City,82,Country 28747,City,82,Country 28789,City,82,Country 28724,City,82,Country 28863,City,82,Country 28899,City,82,Country 28911,City,82,Country 28921,City,82,Country 28945,City,82,Country 28952,City,82,Country 28955,City,82,Country 28966,City,82,Country 28970,City,82,Country 28973,City,82,Country 28994,City,82,Country 29004,City,82,Country 29109,City,82,Country 29110,City,82,Country 29112,City,82,Country 29117,City,82,Country 29123,City,82,Country 29126,City,82,Country 29070,City,82,Country 29089,City,82,Country 29139,City,82,Country 29159,City,82,Country 29172,City,82,Country 29173,City,82,Country 29255,City,82,Country 29256,City,82,Country 29280,City,82,Country 29318,City,82,Country 29342,City,82,Country 29358,City,82,Country 29386,City,82,Country 29417,City,82,Country 29419,City,82,Country 29435,City,82,Country 29438,City,82,Country 29456,City,82,Country 29488,City,82,Country 29523,City,82,Country 29524,City,82,Country 29534,City,82,Country 29538,City,82,Country 29539,City,82,Country 29579,City,82,Country 29580,City,82,Country 29585,City,82,Country 29591,City,82,Country 29592,City,82,Country 29600,City,82,Country 29617,City,82,Country 29632,City,82,Country 29649,City,82,Country 29652,City,82,Country 29662,City,82,Country 29666,City,82,Country 29680,City,82,Country 29735,City,82,Country 29833,City,82,Country 29900,City,82,Country 29946,City,82,Country 29952,City,82,Country 29955,City,82,Country 30045,City,82,Country 30098,City,82,Country 30105,City,82,Country 30124,City,82,Country 30126,City,82,Country 30138,City,82,Country 30139,City,82,Country 30140,City,82,Country 30168,City,82,Country 30169,City,82,Country 30177,City,82,Country 30239,City,82,Country 30243,City,82,Country 30252,City,82,Country 30276,City,82,Country 30277,City,82,Country 30291,City,82,Country 30301,City,82,Country 30305,City,82,Country 30357,City,82,Country 30358,City,82,Country 30391,City,82,Country 30455,City,82,Country 30426,City,82,Country 30462,City,82,Country 30479,City,82,Country 30510,City,82,Country 30512,City,82,Country 30541,City,82,Country 30518,City,82,Country 30519,City,82,Country 30522,City,82,Country 30523,City,82,Country 30525,City,82,Country 30533,City,82,Country 30534,City,82,Country 30538,City,82,Country 30540,City,82,Country 30539,City,82,Country 23470,City,82,Country 23506,City,82,Country 23530,City,82,Country 23563,City,82,Country 23573,City,82,Country 23656,City,82,Country 23657,City,82,Country 23662,City,82,Country 23675,City,82,Country 23685,City,82,Country 23707,City,82,Country 23719,City,82,Country 23742,City,82,Country 23750,City,82,Country 23771,City,82,Country 23786,City,82,Country 23820,City,82,Country 23825,City,82,Country 23862,City,82,Country 23872,City,82,Country 23912,City,82,Country 23925,City,82,Country 23935,City,82,Country 23939,City,82,Country 23985,City,82,Country 23986,City,82,Country 23989,City,82,Country 24001,City,82,Country 24010,City,82,Country 24011,City,82,Country 24015,City,82,Country 24016,City,82,Country 24028,City,82,Country 24049,City,82,Country 24063,City,82,Country 24087,City,82,Country 24106,City,82,Country 24110,City,82,Country 24154,City,82,Country 24160,City,82,Country 24166,City,82,Country 24170,City,82,Country 24188,City,82,Country 24251,City,82,Country 24284,City,82,Country 24290,City,82,Country 24299,City,82,Country 24357,City,82,Country 24410,City,82,Country 24437,City,82,Country 24514,City,82,Country 24518,City,82,Country 24546,City,82,Country 24548,City,82,Country 24555,City,82,Country 24581,City,82,Country 24596,City,82,Country 24636,City,82,Country 24643,City,82,Country 24655,City,82,Country 24674,City,82,Country 24675,City,82,Country 24706,City,82,Country 24716,City,82,Country 24795,City,82,Country 24796,City,82,Country 24725,City,82,Country 24772,City,82,Country 24773,City,82,Country 24822,City,82,Country 24848,City,82,Country 24852,City,82,Country 24857,City,82,Country 24865,City,82,Country 24876,City,82,Country 24899,City,82,Country 24908,City,82,Country 24914,City,82,Country 24933,City,82,Country 24940,City,82,Country 24969,City,82,Country 25031,City,82,Country 25062,City,82,Country 25072,City,82,Country 25144,City,82,Country 25186,City,82,Country 25190,City,82,Country 25322,City,82,Country 25223,City,82,Country 25262,City,82,Country 25278,City,82,Country 25285,City,82,Country 25292,City,82,Country 25309,City,82,Country 25364,City,82,Country 25375,City,82,Country 25428,City,82,Country 25439,City,82,Country 25447,City,82,Country 25466,City,82,Country 25477,City,82,Country 25485,City,82,Country 25514,City,82,Country 25517,City,82,Country 25530,City,82,Country 25539,City,82,Country 25785,City,82,Country 25545,City,82,Country 25724,City,82,Country 25576,City,82,Country 25600,City,82,Country 25728,City,82,Country 25729,City,82,Country 25732,City,82,Country 25619,City,82,Country 25620,City,82,Country 25635,City,82,Country 25637,City,82,Country 25638,City,82,Country 25639,City,82,Country 25683,City,82,Country 25685,City,82,Country 25687,City,82,Country 25715,City,82,Country 25795,City,82,Country 25798,City,82,Country 25767,City,82,Country 25813,City,82,Country 25844,City,82,Country 25846,City,82,Country 25853,City,82,Country 25854,City,82,Country 25896,City,82,Country 25909,City,82,Country 25919,City,82,Country 25932,City,82,Country 25956,City,82,Country 25970,City,82,Country 25972,City,82,Country 26020,City,82,Country 26070,City,82,Country 26080,City,82,Country 26114,City,82,Country 26121,City,82,Country 26202,City,82,Country 26212,City,82,Country 26218,City,82,Country 26219,City,82,Country 26221,City,82,Country 26312,City,82,Country 26230,City,82,Country 26241,City,82,Country 26249,City,82,Country 26269,City,82,Country 26324,City,82,Country 26278,City,82,Country 26343,City,82,Country 26294,City,82,Country 26363,City,82,Country 26375,City,82,Country 26410,City,82,Country 26465,City,82,Country 26437,City,82,Country 26444,City,82,Country 26451,City,82,Country 26486,City,82,Country 26525,City,82,Country 26549,City,82,Country 26555,City,82,Country 26563,City,82,Country 26666,City,82,Country 26684,City,82,Country 26685,City,82,Country 26695,City,82,Country 26698,City,82,Country 26841,City,82,Country 26846,City,82,Country 26847,City,82,Country 26753,City,82,Country 26774,City,82,Country 26775,City,82,Country 26781,City,82,Country 26806,City,82,Country 26893,City,82,Country 26900,City,82,Country 26911,City,82,Country 26914,City,82,Country 26915,City,82,Country 26930,City,82,Country 26958,City,82,Country 27032,City,82,Country 27030,City,82,Country 27056,City,82,Country 27062,City,82,Country 27095,City,82,Country 27103,City,82,Country 27186,City,82,Country 27187,City,82,Country 27126,City,82,Country 27127,City,82,Country 27152,City,82,Country 27213,City,82,Country 27168,City,82,Country 27225,City,82,Country 27230,City,82,Country 27267,City,82,Country 27378,City,82,Country 27387,City,82,Country 27422,City,82,Country 27462,City,82,Country 27555,City,82,Country 27560,City,82,Country 27578,City,82,Country 27583,City,82,Country 27590,City,82,Country 27536,City,82,Country 27548,City,82,Country 27632,City,82,Country 27648,City,82,Country 27649,City,82,Country 27657,City,82,Country 27671,City,82,Country 27681,City,82,Country 27715,City,82,Country 27776,City,82,Country 27861,City,82,Country 27890,City,82,Country 27893,City,82,Country 27939,City,82,Country 28027,City,82,Country 28058,City,82,Country 28072,City,82,Country 28121,City,82,Country 28123,City,82,Country 28137,City,82,Country 28147,City,82,Country 28150,City,82,Country 28151,City,82,Country 28154,City,82,Country 28155,City,82,Country 28159,City,82,Country 28245,City,82,Country 28301,City,82,Country 28332,City,82,Country 28333,City,82,Country 28344,City,82,Country 28365,City,82,Country 28369,City,82,Country 28379,City,82,Country 28381,City,82,Country 28382,City,82,Country 28390,City,82,Country 28426,City,82,Country 28428,City,82,Country 28429,City,82,Country 28430,City,82,Country 28444,City,82,Country 28447,City,82,Country 28450,City,82,Country 28466,City,82,Country 28499,City,82,Country 28535,City,82,Country 28597,City,82,Country 28633,City,82,Country 28649,City,82,Country 28774,City,82,Country 28681,City,82,Country 28686,City,82,Country 28695,City,82,Country 28743,City,82,Country 28744,City,82,Country 28738,City,82,Country 28797,City,82,Country 28843,City,82,Country 28844,City,82,Country 28847,City,82,Country 28850,City,82,Country 28853,City,82,Country 28854,City,82,Country 28858,City,82,Country 28905,City,82,Country 28933,City,82,Country 28956,City,82,Country 28961,City,82,Country 29006,City,82,Country 29012,City,82,Country 29114,City,82,Country 29115,City,82,Country 29125,City,82,Country 29029,City,82,Country 29058,City,82,Country 29152,City,82,Country 29193,City,82,Country 29203,City,82,Country 29222,City,82,Country 29267,City,82,Country 29298,City,82,Country 29339,City,82,Country 29347,City,82,Country 29349,City,82,Country 29398,City,82,Country 29415,City,82,Country 29454,City,82,Country 29440,City,82,Country 29505,City,82,Country 29517,City,82,Country 29518,City,82,Country 29546,City,82,Country 29567,City,82,Country 29568,City,82,Country 29573,City,82,Country 29575,City,82,Country 29578,City,82,Country 29589,City,82,Country 29615,City,82,Country 29630,City,82,Country 29651,City,82,Country 29688,City,82,Country 29714,City,82,Country 29726,City,82,Country 29732,City,82,Country 29736,City,82,Country 29741,City,82,Country 29750,City,82,Country 29818,City,82,Country 29864,City,82,Country 29876,City,82,Country 29893,City,82,Country 29918,City,82,Country 29974,City,82,Country 29983,City,82,Country 29989,City,82,Country 30010,City,82,Country 30011,City,82,Country 30034,City,82,Country 30047,City,82,Country 30054,City,82,Country 30055,City,82,Country 30057,City,82,Country 30121,City,82,Country 30130,City,82,Country 30143,City,82,Country 30147,City,82,Country 30184,City,82,Country 30205,City,82,Country 30207,City,82,Country 30226,City,82,Country 30227,City,82,Country 30242,City,82,Country 30307,City,82,Country 30340,City,82,Country 30351,City,82,Country 30376,City,82,Country 30378,City,82,Country 30394,City,82,Country 30395,City,82,Country 30443,City,82,Country 30413,City,82,Country 30465,City,82,Country 30470,City,82,Country 30482,City,82,Country 30494,City,82,Country 30501,City,82,Country 30542,City,82,Country 30543,City,82,Country 30520,City,82,Country 30521,City,82,Country 30524,City,82,Country 23476,City,82,Country 23514,City,82,Country 23513,City,82,Country 23533,City,82,Country 23575,City,82,Country 23603,City,82,Country 23606,City,82,Country 23640,City,82,Country 23677,City,82,Country 23706,City,82,Country 23736,City,82,Country 23776,City,82,Country 23845,City,82,Country 23865,City,82,Country 23866,City,82,Country 23930,City,82,Country 23932,City,82,Country 23933,City,82,Country 23934,City,82,Country 23937,City,82,Country 23941,City,82,Country 24051,City,82,Country 24178,City,82,Country 24220,City,82,Country 24225,City,82,Country 24468,City,82,Country 24471,City,82,Country 24235,City,82,Country 24238,City,82,Country 24239,City,82,Country 24243,City,82,Country 24254,City,82,Country 24475,City,82,Country 24259,City,82,Country 24261,City,82,Country 24478,City,82,Country 24265,City,82,Country 24279,City,82,Country 24295,City,82,Country 24296,City,82,Country 24301,City,82,Country 24309,City,82,Country 24310,City,82,Country 24318,City,82,Country 24319,City,82,Country 24343,City,82,Country 24344,City,82,Country 24368,City,82,Country 24362,City,82,Country 24486,City,82,Country 24391,City,82,Country 24493,City,82,Country 24407,City,82,Country 24409,City,82,Country 24447,City,82,Country 24506,City,82,Country 24790,City,82,Country 24582,City,82,Country 24589,City,82,Country 24791,City,82,Country 24593,City,82,Country 24600,City,82,Country 24622,City,82,Country 24715,City,82,Country 24723,City,82,Country 24765,City,82,Country 24849,City,82,Country 24851,City,82,Country 24871,City,82,Country 24948,City,82,Country 24949,City,82,Country 24950,City,82,Country 24958,City,82,Country 24960,City,82,Country 24964,City,82,Country 24984,City,82,Country 24986,City,82,Country 25036,City,82,Country 25077,City,82,Country 25117,City,82,Country 25126,City,82,Country 25128,City,82,Country 25148,City,82,Country 25154,City,82,Country 25161,City,82,Country 25187,City,82,Country 25189,City,82,Country 25192,City,82,Country 25202,City,82,Country 25245,City,82,Country 25291,City,82,Country 25293,City,82,Country 25365,City,82,Country 25390,City,82,Country 25418,City,82,Country 25476,City,82,Country 25482,City,82,Country 25513,City,82,Country 25519,City,82,Country 25520,City,82,Country 25524,City,82,Country 25527,City,82,Country 25586,City,82,Country 25597,City,82,Country 25731,City,82,Country 25733,City,82,Country 25622,City,82,Country 25626,City,82,Country 25636,City,82,Country 25641,City,82,Country 25661,City,82,Country 25618,City,82,Country 25667,City,82,Country 25670,City,82,Country 25674,City,82,Country 25709,City,82,Country 25717,City,82,Country 25751,City,82,Country 25793,City,82,Country 25799,City,82,Country 25860,City,82,Country 25863,City,82,Country 25871,City,82,Country 25881,City,82,Country 25884,City,82,Country 25886,City,82,Country 25905,City,82,Country 25911,City,82,Country 25922,City,82,Country 25925,City,82,Country 25930,City,82,Country 25942,City,82,Country 25980,City,82,Country 25989,City,82,Country 25992,City,82,Country 25997,City,82,Country 26002,City,82,Country 26017,City,82,Country 26023,City,82,Country 26037,City,82,Country 26042,City,82,Country 26052,City,82,Country 26054,City,82,Country 26073,City,82,Country 26100,City,82,Country 26109,City,82,Country 26171,City,82,Country 26172,City,82,Country 26196,City,82,Country 26203,City,82,Country 26211,City,82,Country 26222,City,82,Country 26223,City,82,Country 26227,City,82,Country 26235,City,82,Country 26237,City,82,Country 26239,City,82,Country 26272,City,82,Country 26341,City,82,Country 26292,City,82,Country 26422,City,82,Country 26423,City,82,Country 26431,City,82,Country 26438,City,82,Country 26439,City,82,Country 26449,City,82,Country 26469,City,82,Country 26496,City,82,Country 26509,City,82,Country 26530,City,82,Country 26534,City,82,Country 26548,City,82,Country 26553,City,82,Country 26559,City,82,Country 26560,City,82,Country 26581,City,82,Country 26584,City,82,Country 26647,City,82,Country 26656,City,82,Country 26660,City,82,Country 26661,City,82,Country 26664,City,82,Country 26714,City,82,Country 26817,City,82,Country 26727,City,82,Country 26750,City,82,Country 26751,City,82,Country 26772,City,82,Country 26773,City,82,Country 26784,City,82,Country 26780,City,82,Country 26790,City,82,Country 26796,City,82,Country 26866,City,82,Country 26871,City,82,Country 27183,City,82,Country 26899,City,82,Country 26921,City,82,Country 26941,City,82,Country 26944,City,82,Country 26951,City,82,Country 26968,City,82,Country 26997,City,82,Country 27002,City,82,Country 27006,City,82,Country 27009,City,82,Country 27048,City,82,Country 27049,City,82,Country 27101,City,82,Country 27104,City,82,Country 27109,City,82,Country 27122,City,82,Country 27131,City,82,Country 27205,City,82,Country 27174,City,82,Country 27221,City,82,Country 27222,City,82,Country 27223,City,82,Country 27252,City,82,Country 27327,City,82,Country 27392,City,82,Country 27399,City,82,Country 27460,City,82,Country 27466,City,82,Country 27502,City,82,Country 27505,City,82,Country 27564,City,82,Country 27574,City,82,Country 27516,City,82,Country 27541,City,82,Country 27624,City,82,Country 27636,City,82,Country 27667,City,82,Country 27697,City,82,Country 27713,City,82,Country 27760,City,82,Country 27774,City,82,Country 27805,City,82,Country 27815,City,82,Country 27824,City,82,Country 27900,City,82,Country 27916,City,82,Country 27918,City,82,Country 27932,City,82,Country 27950,City,82,Country 27941,City,82,Country 27956,City,82,Country 28077,City,82,Country 28084,City,82,Country 28106,City,82,Country 28107,City,82,Country 28109,City,82,Country 28138,City,82,Country 28146,City,82,Country 28157,City,82,Country 28176,City,82,Country 28203,City,82,Country 28208,City,82,Country 28210,City,82,Country 28215,City,82,Country 28248,City,82,Country 28304,City,82,Country 28331,City,82,Country 28416,City,82,Country 28371,City,82,Country 28389,City,82,Country 28393,City,82,Country 28396,City,82,Country 28425,City,82,Country 28431,City,82,Country 28432,City,82,Country 28454,City,82,Country 28476,City,82,Country 28483,City,82,Country 28491,City,82,Country 28555,City,82,Country 28557,City,82,Country 28571,City,82,Country 28579,City,82,Country 28624,City,82,Country 28625,City,82,Country 28644,City,82,Country 28647,City,82,Country 28666,City,82,Country 28760,City,82,Country 28808,City,82,Country 28855,City,82,Country 28859,City,82,Country 28876,City,82,Country 28878,City,82,Country 28881,City,82,Country 28892,City,82,Country 28902,City,82,Country 28903,City,82,Country 28904,City,82,Country 28910,City,82,Country 28913,City,82,Country 28927,City,82,Country 28928,City,82,Country 28972,City,82,Country 28986,City,82,Country 29011,City,82,Country 29111,City,82,Country 29128,City,82,Country 29134,City,82,Country 29034,City,82,Country 29137,City,82,Country 29044,City,82,Country 29069,City,82,Country 29149,City,82,Country 29178,City,82,Country 29197,City,82,Country 29216,City,82,Country 29219,City,82,Country 29223,City,82,Country 29224,City,82,Country 29229,City,82,Country 29496,City,82,Country 29332,City,82,Country 29340,City,82,Country 29367,City,82,Country 29368,City,82,Country 29403,City,82,Country 29411,City,82,Country 29418,City,82,Country 29426,City,82,Country 29439,City,82,Country 29497,City,82,Country 29499,City,82,Country 29500,City,82,Country 29502,City,82,Country 29507,City,82,Country 29487,City,82,Country 29519,City,82,Country 29531,City,82,Country 29532,City,82,Country 29553,City,82,Country 29613,City,82,Country 29614,City,82,Country 29616,City,82,Country 29623,City,82,Country 29624,City,82,Country 29625,City,82,Country 29629,City,82,Country 29702,City,82,Country 29634,City,82,Country 29640,City,82,Country 29647,City,82,Country 29657,City,82,Country 29659,City,82,Country 29674,City,82,Country 29710,City,82,Country 29727,City,82,Country 29806,City,82,Country 29862,City,82,Country 29895,City,82,Country 29905,City,82,Country 29919,City,82,Country 29998,City,82,Country 30003,City,82,Country 30006,City,82,Country 30028,City,82,Country 30040,City,82,Country 30046,City,82,Country 30049,City,82,Country 30050,City,82,Country 30052,City,82,Country 30160,City,82,Country 30163,City,82,Country 30195,City,82,Country 30197,City,82,Country 30202,City,82,Country 30203,City,82,Country 30211,City,82,Country 30213,City,82,Country 30214,City,82,Country 30231,City,82,Country 30248,City,82,Country 30303,City,82,Country 30312,City,82,Country 30368,City,82,Country 30371,City,82,Country 30438,City,82,Country 30412,City,82,Country 30435,City,82,Country 30471,City,82,Country 23596,City,82,Country 23600,City,82,Country 23602,City,82,Country 23625,City,82,Country 23664,City,82,Country 23673,City,82,Country 23674,City,82,Country 23680,City,82,Country 23688,City,82,Country 23693,City,82,Country 23737,City,82,Country 23739,City,82,Country 23767,City,82,Country 23773,City,82,Country 23796,City,82,Country 23815,City,82,Country 23821,City,82,Country 23824,City,82,Country 23828,City,82,Country 23832,City,82,Country 23858,City,82,Country 23873,City,82,Country 23877,City,82,Country 23926,City,82,Country 23990,City,82,Country 24018,City,82,Country 24029,City,82,Country 24056,City,82,Country 24057,City,82,Country 24145,City,82,Country 24168,City,82,Country 24177,City,82,Country 24272,City,82,Country 24298,City,82,Country 24305,City,82,Country 24313,City,82,Country 24317,City,82,Country 24347,City,82,Country 24382,City,82,Country 24399,City,82,Country 24502,City,82,Country 24450,City,82,Country 24453,City,82,Country 24454,City,82,Country 24509,City,82,Country 24520,City,82,Country 24542,City,82,Country 24558,City,82,Country 24561,City,82,Country 24576,City,82,Country 24590,City,82,Country 24637,City,82,Country 24657,City,82,Country 24692,City,82,Country 24699,City,82,Country 24797,City,82,Country 24741,City,82,Country 24820,City,82,Country 24862,City,82,Country 24924,City,82,Country 24926,City,82,Country 24930,City,82,Country 24944,City,82,Country 24955,City,82,Country 24977,City,82,Country 25038,City,82,Country 25065,City,82,Country 25141,City,82,Country 25175,City,82,Country 25323,City,82,Country 25215,City,82,Country 25229,City,82,Country 25231,City,82,Country 25243,City,82,Country 25284,City,82,Country 25296,City,82,Country 25359,City,82,Country 25384,City,82,Country 25394,City,82,Country 25397,City,82,Country 25406,City,82,Country 25409,City,82,Country 25431,City,82,Country 25434,City,82,Country 25435,City,82,Country 25448,City,82,Country 25464,City,82,Country 25469,City,82,Country 25511,City,82,Country 25529,City,82,Country 25783,City,82,Country 25789,City,82,Country 25554,City,82,Country 25549,City,82,Country 25561,City,82,Country 25723,City,82,Country 25725,City,82,Country 25595,City,82,Country 25602,City,82,Country 25652,City,82,Country 25655,City,82,Country 25658,City,82,Country 25662,City,82,Country 25663,City,82,Country 25669,City,82,Country 25692,City,82,Country 25702,City,82,Country 25835,City,82,Country 25963,City,82,Country 25993,City,82,Country 26021,City,82,Country 26027,City,82,Country 26061,City,82,Country 26071,City,82,Country 26079,City,82,Country 26093,City,82,Country 26126,City,82,Country 26134,City,82,Country 26209,City,82,Country 26320,City,82,Country 26286,City,82,Country 26348,City,82,Country 26354,City,82,Country 26365,City,82,Country 26372,City,82,Country 26379,City,82,Country 26390,City,82,Country 26435,City,82,Country 26471,City,82,Country 26459,City,82,Country 26480,City,82,Country 26497,City,82,Country 26498,City,82,Country 26504,City,82,Country 26507,City,82,Country 26535,City,82,Country 26538,City,82,Country 26546,City,82,Country 26588,City,82,Country 26618,City,82,Country 26638,City,82,Country 26671,City,82,Country 26681,City,82,Country 26682,City,82,Country 26816,City,82,Country 26828,City,82,Country 26840,City,82,Country 26844,City,82,Country 26733,City,82,Country 26740,City,82,Country 26743,City,82,Country 26760,City,82,Country 26782,City,82,Country 26766,City,82,Country 26850,City,82,Country 26852,City,82,Country 26926,City,82,Country 26931,City,82,Country 26936,City,82,Country 26943,City,82,Country 26962,City,82,Country 26980,City,82,Country 27007,City,82,Country 27019,City,82,Country 27023,City,82,Country 27066,City,82,Country 27074,City,82,Country 27188,City,82,Country 27159,City,82,Country 27172,City,82,Country 27229,City,82,Country 27292,City,82,Country 27339,City,82,Country 27355,City,82,Country 27383,City,82,Country 27394,City,82,Country 27395,City,82,Country 27408,City,82,Country 27412,City,82,Country 27446,City,82,Country 27447,City,82,Country 27464,City,82,Country 27470,City,82,Country 27501,City,82,Country 27506,City,82,Country 27569,City,82,Country 27596,City,82,Country 27611,City,82,Country 27712,City,82,Country 27739,City,82,Country 27741,City,82,Country 27744,City,82,Country 27798,City,82,Country 27802,City,82,Country 27839,City,82,Country 27866,City,82,Country 27869,City,82,Country 27870,City,82,Country 27886,City,82,Country 27945,City,82,Country 27906,City,82,Country 27908,City,82,Country 27919,City,82,Country 27974,City,82,Country 27987,City,82,Country 27996,City,82,Country 27997,City,82,Country 28053,City,82,Country 28110,City,82,Country 28122,City,82,Country 28126,City,82,Country 28207,City,82,Country 28221,City,82,Country 28318,City,82,Country 28417,City,82,Country 28350,City,82,Country 28420,City,82,Country 28394,City,82,Country 28472,City,82,Country 28481,City,82,Country 28575,City,82,Country 28652,City,82,Country 28662,City,82,Country 28688,City,82,Country 28785,City,82,Country 28698,City,82,Country 28711,City,82,Country 28745,City,82,Country 28728,City,82,Country 28732,City,82,Country 28752,City,82,Country 28755,City,82,Country 28814,City,82,Country 28815,City,82,Country 28865,City,82,Country 28873,City,82,Country 28906,City,82,Country 28934,City,82,Country 28957,City,82,Country 28968,City,82,Country 28971,City,82,Country 28974,City,82,Country 28982,City,82,Country 28981,City,82,Country 28987,City,82,Country 28995,City,82,Country 28996,City,82,Country 28999,City,82,Country 29130,City,82,Country 29052,City,82,Country 29064,City,82,Country 29082,City,82,Country 29142,City,82,Country 29146,City,82,Country 29158,City,82,Country 29252,City,82,Country 29259,City,82,Country 29494,City,82,Country 29268,City,82,Country 29270,City,82,Country 29271,City,82,Country 29322,City,82,Country 29325,City,82,Country 29330,City,82,Country 29361,City,82,Country 29363,City,82,Country 29366,City,82,Country 29378,City,82,Country 29431,City,82,Country 29457,City,82,Country 29462,City,82,Country 29510,City,82,Country 29515,City,82,Country 29522,City,82,Country 29540,City,82,Country 29547,City,82,Country 29551,City,82,Country 29574,City,82,Country 29590,City,82,Country 29611,City,82,Country 29656,City,82,Country 29667,City,82,Country 29673,City,82,Country 29685,City,82,Country 29717,City,82,Country 29753,City,82,Country 29769,City,82,Country 29782,City,82,Country 29789,City,82,Country 29801,City,82,Country 29807,City,82,Country 29820,City,82,Country 29847,City,82,Country 29871,City,82,Country 29891,City,82,Country 29971,City,82,Country 29991,City,82,Country 29995,City,82,Country 29997,City,82,Country 30038,City,82,Country 30068,City,82,Country 30096,City,82,Country 30125,City,82,Country 30127,City,82,Country 30135,City,82,Country 30185,City,82,Country 30245,City,82,Country 30319,City,82,Country 30321,City,82,Country 30335,City,82,Country 30338,City,82,Country 30356,City,82,Country 30440,City,82,Country 30392,City,82,Country 30404,City,82,Country 30457,City,82,Country 30425,City,82,Country 30489,City,82,Country 30498,City,82,Country 52399,City,85,Country 52402,City,85,Country 52403,City,85,Country 52406,City,85,Country 52420,City,85,Country 52421,City,85,Country 52426,City,85,Country 53370,City,85,Country 52407,City,85,Country 52408,City,85,Country 52410,City,85,Country 53385,City,85,Country 52433,City,85,Country 52430,City,85,Country 53387,City,85,Country 52454,City,85,Country 52478,City,85,Country 53394,City,85,Country 52468,City,85,Country 52470,City,85,Country 52487,City,85,Country 52490,City,85,Country 52500,City,85,Country 52508,City,85,Country 52515,City,85,Country 52518,City,85,Country 53409,City,85,Country 52532,City,85,Country 52534,City,85,Country 52549,City,85,Country 52552,City,85,Country 52557,City,85,Country 52558,City,85,Country 52561,City,85,Country 52563,City,85,Country 52575,City,85,Country 52577,City,85,Country 52581,City,85,Country 52591,City,85,Country 52604,City,85,Country 52613,City,85,Country 52624,City,85,Country 52627,City,85,Country 52653,City,85,Country 52638,City,85,Country 52644,City,85,Country 53421,City,85,Country 52662,City,85,Country 52665,City,85,Country 52674,City,85,Country 52802,City,85,Country 52681,City,85,Country 52695,City,85,Country 52697,City,85,Country 52705,City,85,Country 52714,City,85,Country 52817,City,85,Country 52742,City,85,Country 52741,City,85,Country 52744,City,85,Country 52743,City,85,Country 52746,City,85,Country 52749,City,85,Country 52750,City,85,Country 52824,City,85,Country 52769,City,85,Country 52770,City,85,Country 52779,City,85,Country 52790,City,85,Country 52799,City,85,Country 52830,City,85,Country 52877,City,85,Country 52844,City,85,Country 52856,City,85,Country 52871,City,85,Country 52885,City,85,Country 52955,City,85,Country 52898,City,85,Country 52899,City,85,Country 52900,City,85,Country 52902,City,85,Country 52911,City,85,Country 52956,City,85,Country 52922,City,85,Country 52931,City,85,Country 52943,City,85,Country 53004,City,85,Country 53005,City,85,Country 53006,City,85,Country 53009,City,85,Country 53022,City,85,Country 53024,City,85,Country 53025,City,85,Country 53030,City,85,Country 53034,City,85,Country 53045,City,85,Country 52970,City,85,Country 53054,City,85,Country 53065,City,85,Country 53070,City,85,Country 53076,City,85,Country 53077,City,85,Country 53084,City,85,Country 53089,City,85,Country 53171,City,85,Country 53107,City,85,Country 53175,City,85,Country 53112,City,85,Country 53119,City,85,Country 53122,City,85,Country 53123,City,85,Country 53132,City,85,Country 53180,City,85,Country 53155,City,85,Country 53186,City,85,Country 53197,City,85,Country 53204,City,85,Country 53207,City,85,Country 53211,City,85,Country 53226,City,85,Country 53220,City,85,Country 53242,City,85,Country 53243,City,85,Country 53245,City,85,Country 53300,City,85,Country 53280,City,85,Country 53340,City,85,Country 53308,City,85,Country 53311,City,85,Country 53316,City,85,Country 53344,City,85,Country 53325,City,85,Country 53331,City,85,Country 53329,City,85,Country 53334,City,85,Country 53335,City,85,Country 53347,City,85,Country 53424,City,85,Country 53355,City,85,Country 53360,City,85,Country 53363,City,85,Country 52404,City,85,Country 52423,City,85,Country 53376,City,85,Country 52429,City,85,Country 52434,City,85,Country 52446,City,85,Country 52444,City,85,Country 52457,City,85,Country 52450,City,85,Country 53389,City,85,Country 52471,City,85,Country 52472,City,85,Country 52501,City,85,Country 53401,City,85,Country 52504,City,85,Country 52514,City,85,Country 53412,City,85,Country 53413,City,85,Country 53414,City,85,Country 52524,City,85,Country 52528,City,85,Country 52547,City,85,Country 52551,City,85,Country 52568,City,85,Country 52570,City,85,Country 52559,City,85,Country 52560,City,85,Country 52583,City,85,Country 52593,City,85,Country 52615,City,85,Country 52619,City,85,Country 52625,City,85,Country 52668,City,85,Country 52671,City,85,Country 52673,City,85,Country 52700,City,85,Country 52706,City,85,Country 52716,City,85,Country 52804,City,85,Country 52727,City,85,Country 52818,City,85,Country 52740,City,85,Country 52821,City,85,Country 52827,City,85,Country 52800,City,85,Country 52837,City,85,Country 52849,City,85,Country 52851,City,85,Country 52880,City,85,Country 52860,City,85,Country 52862,City,85,Country 52864,City,85,Country 52865,City,85,Country 52883,City,85,Country 52887,City,85,Country 52892,City,85,Country 52893,City,85,Country 52897,City,85,Country 52901,City,85,Country 52903,City,85,Country 52958,City,85,Country 52952,City,85,Country 53003,City,85,Country 53016,City,85,Country 53035,City,85,Country 53049,City,85,Country 52982,City,85,Country 52983,City,85,Country 53057,City,85,Country 53058,City,85,Country 53060,City,85,Country 53061,City,85,Country 53068,City,85,Country 53092,City,85,Country 53103,City,85,Country 53129,City,85,Country 53131,City,85,Country 53144,City,85,Country 53154,City,85,Country 53193,City,85,Country 53198,City,85,Country 53209,City,85,Country 53229,City,85,Country 53239,City,85,Country 53249,City,85,Country 53252,City,85,Country 53255,City,85,Country 53276,City,85,Country 53285,City,85,Country 53338,City,85,Country 53314,City,85,Country 53315,City,85,Country 53354,City,85,Country 53367,City,85,Country 53368,City,85,Country 52422,City,85,Country 52425,City,85,Country 53369,City,85,Country 53374,City,85,Country 53377,City,85,Country 53378,City,85,Country 53381,City,85,Country 53382,City,85,Country 53383,City,85,Country 53384,City,85,Country 53386,City,85,Country 52411,City,85,Country 52431,City,85,Country 52436,City,85,Country 52441,City,85,Country 52443,City,85,Country 52453,City,85,Country 52455,City,85,Country 52461,City,85,Country 52465,City,85,Country 53397,City,85,Country 52481,City,85,Country 52492,City,85,Country 52496,City,85,Country 53402,City,85,Country 52498,City,85,Country 52503,City,85,Country 52506,City,85,Country 53404,City,85,Country 52511,City,85,Country 53407,City,85,Country 52519,City,85,Country 52520,City,85,Country 52529,City,85,Country 52526,City,85,Country 52531,City,85,Country 52536,City,85,Country 52540,City,85,Country 52537,City,85,Country 52553,City,85,Country 52554,City,85,Country 52569,City,85,Country 52562,City,85,Country 52564,City,85,Country 53416,City,85,Country 52572,City,85,Country 52573,City,85,Country 52586,City,85,Country 52587,City,85,Country 53419,City,85,Country 52594,City,85,Country 52597,City,85,Country 52618,City,85,Country 52621,City,85,Country 52626,City,85,Country 52649,City,85,Country 52651,City,85,Country 52634,City,85,Country 52637,City,85,Country 52639,City,85,Country 52658,City,85,Country 52664,City,85,Country 52687,City,85,Country 52675,City,85,Country 52689,City,85,Country 52682,City,85,Country 52685,City,85,Country 52693,City,85,Country 52694,City,85,Country 52698,City,85,Country 52711,City,85,Country 52721,City,85,Country 52719,City,85,Country 52722,City,85,Country 52730,City,85,Country 52810,City,85,Country 52812,City,85,Country 52814,City,85,Country 52816,City,85,Country 52734,City,85,Country 52747,City,85,Country 52823,City,85,Country 52752,City,85,Country 52782,City,85,Country 52758,City,85,Country 52759,City,85,Country 52764,City,85,Country 52767,City,85,Country 52768,City,85,Country 52771,City,85,Country 52775,City,85,Country 52776,City,85,Country 52786,City,85,Country 52794,City,85,Country 52828,City,85,Country 52832,City,85,Country 52833,City,85,Country 52872,City,85,Country 52843,City,85,Country 52847,City,85,Country 52850,City,85,Country 52858,City,85,Country 52859,City,85,Country 52881,City,85,Country 52868,City,85,Country 52869,City,85,Country 52888,City,85,Country 52891,City,85,Country 52954,City,85,Country 52904,City,85,Country 52908,City,85,Country 52909,City,85,Country 52915,City,85,Country 52920,City,85,Country 52921,City,85,Country 52919,City,85,Country 52924,City,85,Country 52927,City,85,Country 52934,City,85,Country 52937,City,85,Country 52996,City,85,Country 53002,City,85,Country 53042,City,85,Country 53007,City,85,Country 53008,City,85,Country 53012,City,85,Country 53017,City,85,Country 53023,City,85,Country 53019,City,85,Country 53020,City,85,Country 53021,City,85,Country 53029,City,85,Country 53026,City,85,Country 53027,City,85,Country 53028,City,85,Country 53032,City,85,Country 53036,City,85,Country 53037,City,85,Country 53039,City,85,Country 53041,City,85,Country 52961,City,85,Country 53043,City,85,Country 53044,City,85,Country 53046,City,85,Country 53047,City,85,Country 52966,City,85,Country 52963,City,85,Country 53048,City,85,Country 53050,City,85,Country 53051,City,85,Country 53053,City,85,Country 52975,City,85,Country 53055,City,85,Country 52977,City,85,Country 52981,City,85,Country 52990,City,85,Country 52992,City,85,Country 53423,City,85,Country 53059,City,85,Country 53063,City,85,Country 53066,City,85,Country 53082,City,85,Country 53072,City,85,Country 53073,City,85,Country 53086,City,85,Country 53091,City,85,Country 53100,City,85,Country 53170,City,85,Country 53102,City,85,Country 53172,City,85,Country 53106,City,85,Country 53105,City,85,Country 53110,City,85,Country 53116,City,85,Country 53111,City,85,Country 53125,City,85,Country 53128,City,85,Country 53134,City,85,Country 53135,City,85,Country 53133,City,85,Country 53136,City,85,Country 53137,City,85,Country 53139,City,85,Country 53151,City,85,Country 53143,City,85,Country 53152,City,85,Country 53153,City,85,Country 53146,City,85,Country 53158,City,85,Country 53188,City,85,Country 53189,City,85,Country 53190,City,85,Country 53191,City,85,Country 53195,City,85,Country 53265,City,85,Country 53268,City,85,Country 53212,City,85,Country 53213,City,85,Country 53214,City,85,Country 53270,City,85,Country 53271,City,85,Country 53222,City,85,Country 53223,City,85,Country 53228,City,85,Country 53231,City,85,Country 53234,City,85,Country 53236,City,85,Country 53246,City,85,Country 53250,City,85,Country 53247,City,85,Country 53253,City,85,Country 53254,City,85,Country 53257,City,85,Country 53259,City,85,Country 53260,City,85,Country 53275,City,85,Country 53283,City,85,Country 53278,City,85,Country 53289,City,85,Country 53290,City,85,Country 53293,City,85,Country 53305,City,85,Country 53306,City,85,Country 53312,City,85,Country 53317,City,85,Country 53320,City,85,Country 53343,City,85,Country 53336,City,85,Country 53348,City,85,Country 52599,City,85,Country 52617,City,85,Country 52655,City,85,Country 52647,City,85,Country 52678,City,85,Country 52725,City,85,Country 52913,City,85,Country 52910,City,85,Country 53056,City,85,Country 53074,City,85,Country 53080,City,85,Country 53121,City,85,Country 53182,City,85,Country 53160,City,85,Country 53202,City,85,Country 53274,City,85,Country 53291,City,85,Country 53313,City,85,Country 53366,City,85,Country 52415,City,85,Country 52416,City,85,Country 52418,City,85,Country 52427,City,85,Country 53371,City,85,Country 53380,City,85,Country 52467,City,85,Country 52480,City,85,Country 52493,City,85,Country 52512,City,85,Country 52517,City,85,Country 52530,City,85,Country 52544,City,85,Country 52546,City,85,Country 52582,City,85,Country 52623,City,85,Country 52648,City,85,Country 52633,City,85,Country 52636,City,85,Country 52654,City,85,Country 52641,City,85,Country 52642,City,85,Country 52659,City,85,Country 52666,City,85,Country 52692,City,85,Country 52728,City,85,Country 52726,City,85,Country 52806,City,85,Country 52809,City,85,Country 52738,City,85,Country 52822,City,85,Country 52756,City,85,Country 52760,City,85,Country 52787,City,85,Country 52789,City,85,Country 52855,City,85,Country 52953,City,85,Country 52948,City,85,Country 52939,City,85,Country 52944,City,85,Country 52946,City,85,Country 52999,City,85,Country 53000,City,85,Country 52973,City,85,Country 52971,City,85,Country 52986,City,85,Country 52991,City,85,Country 53079,City,85,Country 53083,City,85,Country 53163,City,85,Country 53176,City,85,Country 53114,City,85,Country 53124,City,85,Country 53142,City,85,Country 53185,City,85,Country 53187,City,85,Country 53210,City,85,Country 53272,City,85,Country 53217,City,85,Country 53219,City,85,Country 53237,City,85,Country 53244,City,85,Country 53281,City,85,Country 53302,City,85,Country 53296,City,85,Country 53299,City,85,Country 53321,City,85,Country 53337,City,85,Country 53359,City,85,Country 53364,City,85,Country 53375,City,85,Country 52440,City,85,Country 52456,City,85,Country 53398,City,85,Country 52502,City,85,Country 52497,City,85,Country 53408,City,85,Country 52535,City,85,Country 52538,City,85,Country 52539,City,85,Country 52555,City,85,Country 52565,City,85,Country 52571,City,85,Country 52576,City,85,Country 52579,City,85,Country 52578,City,85,Country 53418,City,85,Country 52616,City,85,Country 52603,City,85,Country 52610,City,85,Country 52612,City,85,Country 52632,City,85,Country 53420,City,85,Country 52661,City,85,Country 52679,City,85,Country 52690,City,85,Country 52683,City,85,Country 52691,City,85,Country 52696,City,85,Country 52723,City,85,Country 52815,City,85,Country 52735,City,85,Country 52737,City,85,Country 52739,City,85,Country 52748,City,85,Country 52755,City,85,Country 52762,City,85,Country 52785,City,85,Country 52798,City,85,Country 52829,City,85,Country 52834,City,85,Country 52876,City,85,Country 52853,City,85,Country 52882,City,85,Country 52935,City,85,Country 52959,City,85,Country 53011,City,85,Country 53013,City,85,Country 53014,City,85,Country 53031,City,85,Country 53040,City,85,Country 52967,City,85,Country 52976,City,85,Country 53062,City,85,Country 53161,City,85,Country 53078,City,85,Country 53071,City,85,Country 53093,City,85,Country 53096,City,85,Country 53173,City,85,Country 53117,City,85,Country 53118,City,85,Country 53120,City,85,Country 53140,City,85,Country 53150,City,85,Country 53145,City,85,Country 53201,City,85,Country 53205,City,85,Country 53264,City,85,Country 53266,City,85,Country 53216,City,85,Country 53230,City,85,Country 53235,City,85,Country 53282,City,85,Country 53298,City,85,Country 53345,City,85,Country 53353,City,85,Country 53350,City,85,Country 53351,City,85,Country 53365,City,85,Country 52417,City,85,Country 52462,City,85,Country 52479,City,85,Country 53390,City,85,Country 53403,City,85,Country 52507,City,85,Country 52527,City,85,Country 52574,City,85,Country 52580,City,85,Country 52602,City,85,Country 52601,City,85,Country 52643,City,85,Country 52645,City,85,Country 52660,City,85,Country 52663,City,85,Country 52677,City,85,Country 52686,City,85,Country 52701,City,85,Country 52708,City,85,Country 52733,City,85,Country 52763,City,85,Country 52825,City,85,Country 52774,City,85,Country 52777,City,85,Country 52870,City,85,Country 52933,City,85,Country 53033,City,85,Country 52965,City,85,Country 52964,City,85,Country 53052,City,85,Country 52985,City,85,Country 53088,City,85,Country 53095,City,85,Country 53097,City,85,Country 53165,City,85,Country 53101,City,85,Country 53174,City,85,Country 53177,City,85,Country 53178,City,85,Country 53127,City,85,Country 53148,City,85,Country 53149,City,85,Country 53196,City,85,Country 53248,City,85,Country 53277,City,85,Country 53295,City,85,Country 53328,City,85,Country 53330,City,85,Country 52400,City,85,Country 52409,City,85,Country 53379,City,85,Country 52439,City,85,Country 52448,City,85,Country 52489,City,85,Country 52545,City,85,Country 52650,City,85,Country 52631,City,85,Country 52669,City,85,Country 52703,City,85,Country 52729,City,85,Country 52765,City,85,Country 52796,City,85,Country 52840,City,85,Country 52842,City,85,Country 52857,City,85,Country 52863,City,85,Country 52945,City,85,Country 52987,City,85,Country 52993,City,85,Country 53109,City,85,Country 53113,City,85,Country 53179,City,85,Country 53141,City,85,Country 53263,City,85,Country 53304,City,85,Country 53307,City,85,Country 53322,City,85,Country 53358,City,85,Country 52424,City,85,Country 52412,City,85,Country 52477,City,85,Country 52469,City,85,Country 52499,City,85,Country 52670,City,85,Country 52680,City,85,Country 52684,City,85,Country 52713,City,85,Country 52710,City,85,Country 52717,City,85,Country 52884,City,85,Country 52889,City,85,Country 52907,City,85,Country 52938,City,85,Country 52942,City,85,Country 52947,City,85,Country 53081,City,85,Country 53147,City,85,Country 53233,City,85,Country 52413,City,85,Country 53388,City,85,Country 52445,City,85,Country 52459,City,85,Country 53393,City,85,Country 52486,City,85,Country 52595,City,85,Country 52704,City,85,Country 52811,City,85,Country 53001,City,85,Country 53010,City,85,Country 53099,City,85,Country 53138,City,85,Country 53156,City,85,Country 53192,City,85,Country 53221,City,85,Country 53227,City,85,Country 53238,City,85,Country 53251,City,85,Country 53292,City,85,Country 53318,City,85,Country 53327,City,85,Country 53357,City,85,Country 53372,City,85,Country 53373,City,85,Country 52485,City,85,Country 53399,City,85,Country 52491,City,85,Country 53400,City,85,Country 52494,City,85,Country 52513,City,85,Country 52505,City,85,Country 53405,City,85,Country 53406,City,85,Country 52516,City,85,Country 52521,City,85,Country 53410,City,85,Country 53415,City,85,Country 52543,City,85,Country 52567,City,85,Country 52556,City,85,Country 52566,City,85,Country 52589,City,85,Country 52596,City,85,Country 52600,City,85,Country 52628,City,85,Country 52652,City,85,Country 52635,City,85,Country 52656,City,85,Country 52667,City,85,Country 52676,City,85,Country 52709,City,85,Country 52718,City,85,Country 52807,City,85,Country 52808,City,85,Country 52745,City,85,Country 52751,City,85,Country 52754,City,85,Country 52757,City,85,Country 52766,City,85,Country 52826,City,85,Country 52772,City,85,Country 52778,City,85,Country 52783,City,85,Country 52788,City,85,Country 52797,City,85,Country 52801,City,85,Country 52838,City,85,Country 52879,City,85,Country 52845,City,85,Country 52848,City,85,Country 52852,City,85,Country 52866,City,85,Country 52867,City,85,Country 52886,City,85,Country 52912,City,85,Country 52918,City,85,Country 52930,City,85,Country 52932,City,85,Country 52940,City,85,Country 52949,City,85,Country 52995,City,85,Country 53015,City,85,Country 53038,City,85,Country 52962,City,85,Country 52980,City,85,Country 53075,City,85,Country 53094,City,85,Country 53167,City,85,Country 53108,City,85,Country 53115,City,85,Country 53181,City,85,Country 53183,City,85,Country 53215,City,85,Country 53225,City,85,Country 53232,City,85,Country 53241,City,85,Country 53240,City,85,Country 53258,City,85,Country 53279,City,85,Country 53286,City,85,Country 53287,City,85,Country 53294,City,85,Country 53342,City,85,Country 53323,City,85,Country 53324,City,85,Country 53326,City,85,Country 53333,City,85,Country 53352,City,85,Country 53361,City,85,Country 52401,City,85,Country 52405,City,85,Country 52419,City,85,Country 52452,City,85,Country 52476,City,85,Country 52464,City,85,Country 53395,City,85,Country 53396,City,85,Country 52473,City,85,Country 52475,City,85,Country 52484,City,85,Country 52510,City,85,Country 52541,City,85,Country 53417,City,85,Country 52584,City,85,Country 52590,City,85,Country 52598,City,85,Country 52606,City,85,Country 52607,City,85,Country 52609,City,85,Country 52611,City,85,Country 52657,City,85,Country 53422,City,85,Country 52803,City,85,Country 52712,City,85,Country 52715,City,85,Country 52819,City,85,Country 52820,City,85,Country 52773,City,85,Country 52784,City,85,Country 52831,City,85,Country 52836,City,85,Country 52875,City,85,Country 52894,City,85,Country 52916,City,85,Country 52917,City,85,Country 52926,City,85,Country 52957,City,85,Country 52950,City,85,Country 52997,City,85,Country 52998,City,85,Country 52989,City,85,Country 53069,City,85,Country 53064,City,85,Country 53164,City,85,Country 53166,City,85,Country 53168,City,85,Country 53159,City,85,Country 53203,City,85,Country 53267,City,85,Country 53224,City,85,Country 53273,City,85,Country 53303,City,85,Country 53341,City,85,Country 53362,City,85,Country 52414,City,85,Country 52522,City,85,Country 52432,City,85,Country 52523,City,85,Country 52437,City,85,Country 52438,City,85,Country 52442,City,85,Country 52447,City,85,Country 52449,City,85,Country 52463,City,85,Country 52466,City,85,Country 53391,City,85,Country 52474,City,85,Country 52482,City,85,Country 52483,City,85,Country 52495,City,85,Country 52509,City,85,Country 53411,City,85,Country 52525,City,85,Country 52542,City,85,Country 52550,City,85,Country 52588,City,85,Country 52614,City,85,Country 52622,City,85,Country 52629,City,85,Country 52630,City,85,Country 52640,City,85,Country 52672,City,85,Country 52688,City,85,Country 52699,City,85,Country 52702,City,85,Country 52720,City,85,Country 52707,City,85,Country 52805,City,85,Country 52813,City,85,Country 52731,City,85,Country 52732,City,85,Country 52736,City,85,Country 52791,City,85,Country 52792,City,85,Country 52795,City,85,Country 52873,City,85,Country 52874,City,85,Country 52839,City,85,Country 52846,City,85,Country 52854,City,85,Country 52890,City,85,Country 52896,City,85,Country 52905,City,85,Country 52914,City,85,Country 52925,City,85,Country 52928,City,85,Country 52936,City,85,Country 52941,City,85,Country 52951,City,85,Country 52994,City,85,Country 53018,City,85,Country 52974,City,85,Country 52968,City,85,Country 52969,City,85,Country 52978,City,85,Country 52979,City,85,Country 52984,City,85,Country 53067,City,85,Country 53162,City,85,Country 53085,City,85,Country 53087,City,85,Country 53090,City,85,Country 53098,City,85,Country 53169,City,85,Country 53104,City,85,Country 53130,City,85,Country 53184,City,85,Country 53200,City,85,Country 53194,City,85,Country 53199,City,85,Country 53206,City,85,Country 53208,City,85,Country 53256,City,85,Country 53261,City,85,Country 53262,City,85,Country 53301,City,85,Country 53284,City,85,Country 53288,City,85,Country 53339,City,85,Country 53309,City,85,Country 53310,City,85,Country 53346,City,85,Country 53332,City,85,Country 53356,City,85,Country 52428,City,85,Country 52435,City,85,Country 52451,City,85,Country 52458,City,85,Country 52460,City,85,Country 53392,City,85,Country 52488,City,85,Country 52533,City,85,Country 52548,City,85,Country 52585,City,85,Country 52592,City,85,Country 52605,City,85,Country 52608,City,85,Country 52620,City,85,Country 52646,City,85,Country 52724,City,85,Country 52753,City,85,Country 52781,City,85,Country 52761,City,85,Country 52780,City,85,Country 52793,City,85,Country 52835,City,85,Country 52878,City,85,Country 52861,City,85,Country 52895,City,85,Country 52906,City,85,Country 52923,City,85,Country 52929,City,85,Country 52960,City,85,Country 52972,City,85,Country 52988,City,85,Country 53126,City,85,Country 53157,City,85,Country 53269,City,85,Country 53218,City,85,Country 53297,City,85,Country 53319,City,85,Country 53349,City,85,Country 56141,City,99,Country 55180,City,99,Country 55191,City,99,Country 55287,City,99,Country 55288,City,99,Country 55289,City,99,Country 55203,City,99,Country 55204,City,99,Country 55225,City,99,Country 55295,City,99,Country 55283,City,99,Country 55347,City,99,Country 55348,City,99,Country 55331,City,99,Country 55386,City,99,Country 55377,City,99,Country 55381,City,99,Country 55383,City,99,Country 56147,City,99,Country 55424,City,99,Country 55439,City,99,Country 55440,City,99,Country 55446,City,99,Country 55493,City,99,Country 55499,City,99,Country 55504,City,99,Country 55505,City,99,Country 55531,City,99,Country 55535,City,99,Country 55536,City,99,Country 55552,City,99,Country 55558,City,99,Country 55559,City,99,Country 55574,City,99,Country 55578,City,99,Country 55579,City,99,Country 55580,City,99,Country 55581,City,99,Country 55587,City,99,Country 55602,City,99,Country 55603,City,99,Country 55594,City,99,Country 55595,City,99,Country 55596,City,99,Country 55597,City,99,Country 55599,City,99,Country 55600,City,99,Country 55608,City,99,Country 55626,City,99,Country 55630,City,99,Country 55631,City,99,Country 55654,City,99,Country 55655,City,99,Country 55672,City,99,Country 55731,City,99,Country 55741,City,99,Country 55765,City,99,Country 55768,City,99,Country 55799,City,99,Country 55840,City,99,Country 55903,City,99,Country 55904,City,99,Country 55997,City,99,Country 55913,City,99,Country 55917,City,99,Country 55919,City,99,Country 55942,City,99,Country 56016,City,99,Country 56072,City,99,Country 56021,City,99,Country 56035,City,99,Country 56036,City,99,Country 56055,City,99,Country 56111,City,99,Country 56091,City,99,Country 55238,City,99,Country 55304,City,99,Country 55305,City,99,Country 55310,City,99,Country 55378,City,99,Country 55497,City,99,Country 55502,City,99,Country 55512,City,99,Country 55516,City,99,Country 55618,City,99,Country 55619,City,99,Country 55625,City,99,Country 55667,City,99,Country 55719,City,99,Country 55684,City,99,Country 55708,City,99,Country 55709,City,99,Country 55850,City,99,Country 55851,City,99,Country 55852,City,99,Country 55853,City,99,Country 55812,City,99,Country 55993,City,99,Country 55894,City,99,Country 55895,City,99,Country 55897,City,99,Country 55898,City,99,Country 55970,City,99,Country 55944,City,99,Country 55945,City,99,Country 55954,City,99,Country 55955,City,99,Country 56089,City,99,Country 56102,City,99,Country 55233,City,99,Country 55296,City,99,Country 55297,City,99,Country 55298,City,99,Country 55299,City,99,Country 55301,City,99,Country 55300,City,99,Country 55259,City,99,Country 55325,City,99,Country 55342,City,99,Country 55389,City,99,Country 55364,City,99,Country 55366,City,99,Country 55402,City,99,Country 55443,City,99,Country 55470,City,99,Country 55451,City,99,Country 55452,City,99,Country 55453,City,99,Country 55455,City,99,Country 55573,City,99,Country 55642,City,99,Country 55591,City,99,Country 55622,City,99,Country 55649,City,99,Country 55650,City,99,Country 55634,City,99,Country 55670,City,99,Country 55675,City,99,Country 55685,City,99,Country 55730,City,99,Country 55688,City,99,Country 55692,City,99,Country 55694,City,99,Country 55695,City,99,Country 55762,City,99,Country 55796,City,99,Country 55800,City,99,Country 55801,City,99,Country 55833,City,99,Country 55891,City,99,Country 55892,City,99,Country 55912,City,99,Country 55921,City,99,Country 55922,City,99,Country 55927,City,99,Country 55928,City,99,Country 56078,City,99,Country 56162,City,99,Country 56117,City,99,Country 55170,City,99,Country 55186,City,99,Country 55194,City,99,Country 55195,City,99,Country 55196,City,99,Country 55235,City,99,Country 55311,City,99,Country 55252,City,99,Country 55254,City,99,Country 55258,City,99,Country 55321,City,99,Country 55322,City,99,Country 55396,City,99,Country 55397,City,99,Country 55404,City,99,Country 55405,City,99,Country 55407,City,99,Country 55416,City,99,Country 55426,City,99,Country 55448,City,99,Country 55477,City,99,Country 55478,City,99,Country 55494,City,99,Country 55498,City,99,Country 55503,City,99,Country 55508,City,99,Country 55532,City,99,Country 55540,City,99,Country 55569,City,99,Country 55575,City,99,Country 55576,City,99,Country 55718,City,99,Country 55720,City,99,Country 55686,City,99,Country 55689,City,99,Country 55690,City,99,Country 55693,City,99,Country 55696,City,99,Country 55697,City,99,Country 55701,City,99,Country 55705,City,99,Country 55706,City,99,Country 55710,City,99,Country 55737,City,99,Country 55769,City,99,Country 55797,City,99,Country 55798,City,99,Country 56151,City,99,Country 56154,City,99,Country 56155,City,99,Country 55832,City,99,Country 55837,City,99,Country 55838,City,99,Country 55864,City,99,Country 55867,City,99,Country 55882,City,99,Country 55883,City,99,Country 55884,City,99,Country 55888,City,99,Country 55885,City,99,Country 55886,City,99,Country 55887,City,99,Country 55979,City,99,Country 55986,City,99,Country 55987,City,99,Country 55994,City,99,Country 55995,City,99,Country 55933,City,99,Country 55941,City,99,Country 55948,City,99,Country 55949,City,99,Country 55958,City,99,Country 55959,City,99,Country 55961,City,99,Country 56005,City,99,Country 56006,City,99,Country 56062,City,99,Country 56012,City,99,Country 56033,City,99,Country 56034,City,99,Country 56038,City,99,Country 56048,City,99,Country 56049,City,99,Country 56050,City,99,Country 56051,City,99,Country 56052,City,99,Country 55263,City,99,Country 55264,City,99,Country 55265,City,99,Country 55266,City,99,Country 55267,City,99,Country 55268,City,99,Country 55269,City,99,Country 55270,City,99,Country 55271,City,99,Country 55272,City,99,Country 55273,City,99,Country 55274,City,99,Country 55275,City,99,Country 55276,City,99,Country 55277,City,99,Country 55278,City,99,Country 55279,City,99,Country 55280,City,99,Country 55281,City,99,Country 55413,City,99,Country 55554,City,99,Country 55607,City,99,Country 56133,City,99,Country 55184,City,99,Country 55192,City,99,Country 56143,City,99,Country 55207,City,99,Country 55228,City,99,Country 55257,City,99,Country 55326,City,99,Country 55324,City,99,Country 55328,City,99,Country 55337,City,99,Country 55338,City,99,Country 55359,City,99,Country 55365,City,99,Country 55434,City,99,Country 55438,City,99,Country 55432,City,99,Country 55521,City,99,Country 55522,City,99,Country 55610,City,99,Country 55611,City,99,Country 55614,City,99,Country 55677,City,99,Country 55678,City,99,Country 55681,City,99,Country 55704,City,99,Country 55734,City,99,Country 55735,City,99,Country 56152,City,99,Country 55835,City,99,Country 55881,City,99,Country 55868,City,99,Country 55980,City,99,Country 55923,City,99,Country 55925,City,99,Country 55926,City,99,Country 55929,City,99,Country 55976,City,99,Country 55936,City,99,Country 55937,City,99,Country 56081,City,99,Country 56167,City,99,Country 56136,City,99,Country 56130,City,99,Country 55168,City,99,Country 55175,City,99,Country 55181,City,99,Country 55205,City,99,Country 55229,City,99,Country 55230,City,99,Country 55246,City,99,Country 55247,City,99,Country 55250,City,99,Country 55314,City,99,Country 55345,City,99,Country 55387,City,99,Country 56139,City,99,Country 55382,City,99,Country 55403,City,99,Country 55408,City,99,Country 55409,City,99,Country 55410,City,99,Country 55414,City,99,Country 55422,City,99,Country 55471,City,99,Country 55472,City,99,Country 55530,City,99,Country 55638,City,99,Country 55640,City,99,Country 55593,City,99,Country 55604,City,99,Country 55653,City,99,Country 55659,City,99,Country 55665,City,99,Country 55722,City,99,Country 55682,City,99,Country 55683,City,99,Country 55691,City,99,Country 55698,City,99,Country 55733,City,99,Country 55736,City,99,Country 55839,City,99,Country 55848,City,99,Country 55814,City,99,Country 55828,City,99,Country 55834,City,99,Country 55836,City,99,Country 55870,City,99,Country 55871,City,99,Country 55981,City,99,Country 55982,City,99,Country 55983,City,99,Country 55985,City,99,Country 55989,City,99,Country 55896,City,99,Country 55908,City,99,Country 55911,City,99,Country 55969,City,99,Country 55974,City,99,Country 55975,City,99,Country 56108,City,99,Country 56096,City,99,Country 56137,City,99,Country 55171,City,99,Country 56142,City,99,Country 56144,City,99,Country 55206,City,99,Country 55236,City,99,Country 55312,City,99,Country 55313,City,99,Country 55340,City,99,Country 55341,City,99,Country 55418,City,99,Country 55427,City,99,Country 55428,City,99,Country 55429,City,99,Country 55466,City,99,Country 55467,City,99,Country 55468,City,99,Country 55469,City,99,Country 55495,City,99,Country 55539,City,99,Country 55563,City,99,Country 55564,City,99,Country 55592,City,99,Country 55645,City,99,Country 55668,City,99,Country 55702,City,99,Country 55714,City,99,Country 55715,City,99,Country 55716,City,99,Country 55742,City,99,Country 55793,City,99,Country 56159,City,99,Country 55808,City,99,Country 55809,City,99,Country 55854,City,99,Country 55869,City,99,Country 55861,City,99,Country 55909,City,99,Country 55910,City,99,Country 55920,City,99,Country 56074,City,99,Country 56075,City,99,Country 56080,City,99,Country 55202,City,99,Country 55226,City,99,Country 55227,City,99,Country 55290,City,99,Country 55239,City,99,Country 55240,City,99,Country 55248,City,99,Country 55249,City,99,Country 55349,City,99,Country 55353,City,99,Country 55354,City,99,Country 55357,City,99,Country 55358,City,99,Country 55393,City,99,Country 55401,City,99,Country 55437,City,99,Country 55479,City,99,Country 55480,City,99,Country 55481,City,99,Country 55482,City,99,Country 55483,City,99,Country 55484,City,99,Country 55485,City,99,Country 55486,City,99,Country 55487,City,99,Country 55488,City,99,Country 55491,City,99,Country 55489,City,99,Country 55490,City,99,Country 55515,City,99,Country 55517,City,99,Country 55555,City,99,Country 55621,City,99,Country 55623,City,99,Country 55669,City,99,Country 55703,City,99,Country 55713,City,99,Country 55794,City,99,Country 55760,City,99,Country 55792,City,99,Country 55770,City,99,Country 55771,City,99,Country 55772,City,99,Country 55787,City,99,Country 55826,City,99,Country 55827,City,99,Country 55859,City,99,Country 55860,City,99,Country 55992,City,99,Country 55988,City,99,Country 56073,City,99,Country 56026,City,99,Country 56110,City,99,Country 55169,City,99,Country 55176,City,99,Country 55188,City,99,Country 55190,City,99,Country 55302,City,99,Country 55303,City,99,Country 55244,City,99,Country 55253,City,99,Country 55346,City,99,Country 55371,City,99,Country 55395,City,99,Country 55398,City,99,Country 55399,City,99,Country 55400,City,99,Country 55412,City,99,Country 55425,City,99,Country 55441,City,99,Country 55442,City,99,Country 55459,City,99,Country 55460,City,99,Country 55461,City,99,Country 55462,City,99,Country 55463,City,99,Country 55464,City,99,Country 55500,City,99,Country 55501,City,99,Country 55509,City,99,Country 55510,City,99,Country 55511,City,99,Country 55514,City,99,Country 55635,City,99,Country 55571,City,99,Country 55586,City,99,Country 55601,City,99,Country 55620,City,99,Country 55671,City,99,Country 55676,City,99,Country 55724,City,99,Country 55761,City,99,Country 55802,City,99,Country 55810,City,99,Country 55811,City,99,Country 55856,City,99,Country 55857,City,99,Country 55816,City,99,Country 55831,City,99,Country 55863,City,99,Country 55880,City,99,Country 55900,City,99,Country 55957,City,99,Country 55960,City,99,Country 56013,City,99,Country 56014,City,99,Country 56040,City,99,Country 56109,City,99,Country 56098,City,99,Country 56119,City,99,Country 55173,City,99,Country 55182,City,99,Country 55243,City,99,Country 55320,City,99,Country 55333,City,99,Country 55419,City,99,Country 55537,City,99,Country 55541,City,99,Country 55542,City,99,Country 55543,City,99,Country 55553,City,99,Country 55544,City,99,Country 55545,City,99,Country 55546,City,99,Country 55547,City,99,Country 55549,City,99,Country 55550,City,99,Country 55551,City,99,Country 55567,City,99,Country 55568,City,99,Country 55584,City,99,Country 55585,City,99,Country 55615,City,99,Country 55627,City,99,Country 55628,City,99,Country 55629,City,99,Country 55632,City,99,Country 55633,City,99,Country 55699,City,99,Country 55700,City,99,Country 56156,City,99,Country 55874,City,99,Country 55875,City,99,Country 55915,City,99,Country 55932,City,99,Country 55964,City,99,Country 55965,City,99,Country 56025,City,99,Country 56024,City,99,Country 56030,City,99,Country 56031,City,99,Country 56032,City,99,Country 56041,City,99,Country 56042,City,99,Country 56045,City,99,Country 56043,City,99,Country 56044,City,99,Country 56084,City,99,Country 56085,City,99,Country 56077,City,99,Country 56086,City,99,Country 56164,City,99,Country 56118,City,99,Country 55210,City,99,Country 55211,City,99,Country 55293,City,99,Country 55294,City,99,Country 55237,City,99,Country 55286,City,99,Country 55363,City,99,Country 56148,City,99,Country 55518,City,99,Country 55533,City,99,Country 55565,City,99,Country 55566,City,99,Country 55577,City,99,Country 55725,City,99,Country 55726,City,99,Country 55727,City,99,Country 55759,City,99,Country 55807,City,99,Country 55844,City,99,Country 55845,City,99,Country 55877,City,99,Country 55878,City,99,Country 55865,City,99,Country 55866,City,99,Country 55889,City,99,Country 55890,City,99,Country 55907,City,99,Country 55972,City,99,Country 55973,City,99,Country 55968,City,99,Country 56011,City,99,Country 55172,City,99,Country 55174,City,99,Country 55183,City,99,Country 55185,City,99,Country 55197,City,99,Country 55198,City,99,Country 55201,City,99,Country 55245,City,99,Country 55260,City,99,Country 55261,City,99,Country 55262,City,99,Country 55282,City,99,Country 55284,City,99,Country 55315,City,99,Country 55316,City,99,Country 55317,City,99,Country 55327,City,99,Country 55336,City,99,Country 55350,City,99,Country 55351,City,99,Country 55352,City,99,Country 55384,City,99,Country 55385,City,99,Country 55388,City,99,Country 55362,City,99,Country 55370,City,99,Country 55392,City,99,Country 55372,City,99,Country 55374,City,99,Country 55375,City,99,Country 55376,City,99,Country 55380,City,99,Country 55394,City,99,Country 56145,City,99,Country 56146,City,99,Country 55411,City,99,Country 55417,City,99,Country 55423,City,99,Country 55433,City,99,Country 55436,City,99,Country 55444,City,99,Country 55445,City,99,Country 55474,City,99,Country 55475,City,99,Country 55476,City,99,Country 55449,City,99,Country 55456,City,99,Country 55457,City,99,Country 55458,City,99,Country 55496,City,99,Country 55507,City,99,Country 55520,City,99,Country 55526,City,99,Country 55527,City,99,Country 55529,City,99,Country 55548,City,99,Country 55557,City,99,Country 55570,City,99,Country 55588,City,99,Country 55598,City,99,Country 55606,City,99,Country 55609,City,99,Country 55617,City,99,Country 55644,City,99,Country 55624,City,99,Country 55663,City,99,Country 55674,City,99,Country 55687,City,99,Country 55707,City,99,Country 55711,City,99,Country 55712,City,99,Country 55753,City,99,Country 55754,City,99,Country 55755,City,99,Country 55756,City,99,Country 55750,City,99,Country 55757,City,99,Country 55763,City,99,Country 55767,City,99,Country 56149,City,99,Country 56171,City,99,Country 56158,City,99,Country 55841,City,99,Country 55847,City,99,Country 55849,City,99,Country 55813,City,99,Country 55855,City,99,Country 55817,City,99,Country 55818,City,99,Country 55819,City,99,Country 55822,City,99,Country 55820,City,99,Country 55821,City,99,Country 55823,City,99,Country 55824,City,99,Country 55829,City,99,Country 55872,City,99,Country 55873,City,99,Country 55905,City,99,Country 55996,City,99,Country 55998,City,99,Country 55914,City,99,Country 55971,City,99,Country 55934,City,99,Country 55935,City,99,Country 55946,City,99,Country 55947,City,99,Country 55950,City,99,Country 55951,City,99,Country 55952,City,99,Country 55953,City,99,Country 55956,City,99,Country 55962,City,99,Country 55963,City,99,Country 55977,City,99,Country 55978,City,99,Country 56061,City,99,Country 56003,City,99,Country 56004,City,99,Country 56063,City,99,Country 56064,City,99,Country 56069,City,99,Country 56065,City,99,Country 56066,City,99,Country 56067,City,99,Country 56068,City,99,Country 56071,City,99,Country 56018,City,99,Country 56076,City,99,Country 56079,City,99,Country 56083,City,99,Country 56082,City,99,Country 56058,City,99,Country 56161,City,99,Country 56163,City,99,Country 56168,City,99,Country 56165,City,99,Country 56169,City,99,Country 56105,City,99,Country 56106,City,99,Country 56107,City,99,Country 56090,City,99,Country 56094,City,99,Country 56095,City,99,Country 56097,City,99,Country 56099,City,99,Country 56103,City,99,Country 56132,City,99,Country 56131,City,99,Country 56140,City,99,Country 55199,City,99,Country 55214,City,99,Country 55215,City,99,Country 55216,City,99,Country 55217,City,99,Country 55221,City,99,Country 55222,City,99,Country 55223,City,99,Country 55231,City,99,Country 55232,City,99,Country 55242,City,99,Country 55306,City,99,Country 55343,City,99,Country 55344,City,99,Country 55430,City,99,Country 55431,City,99,Country 55556,City,99,Country 55560,City,99,Country 55561,City,99,Country 55562,City,99,Country 55572,City,99,Country 55643,City,99,Country 55666,City,99,Country 55656,City,99,Country 55679,City,99,Country 55680,City,99,Country 55738,City,99,Country 55739,City,99,Country 55740,City,99,Country 55893,City,99,Country 55901,City,99,Country 55902,City,99,Country 55906,City,99,Country 56001,City,99,Country 56002,City,99,Country 56017,City,99,Country 56126,City,99,Country 55177,City,99,Country 55187,City,99,Country 55189,City,99,Country 55193,City,99,Country 55208,City,99,Country 55209,City,99,Country 55224,City,99,Country 55307,City,99,Country 55285,City,99,Country 55329,City,99,Country 55330,City,99,Country 55356,City,99,Country 55391,City,99,Country 55367,City,99,Country 55406,City,99,Country 55420,City,99,Country 55421,City,99,Country 55435,City,99,Country 55473,City,99,Country 55454,City,99,Country 55513,City,99,Country 55524,City,99,Country 55525,City,99,Country 55636,City,99,Country 55637,City,99,Country 55639,City,99,Country 55641,City,99,Country 55582,City,99,Country 55583,City,99,Country 55605,City,99,Country 55612,City,99,Country 55613,City,99,Country 55616,City,99,Country 55646,City,99,Country 55662,City,99,Country 55721,City,99,Country 55723,City,99,Country 55728,City,99,Country 55729,City,99,Country 55732,City,99,Country 55743,City,99,Country 55744,City,99,Country 55746,City,99,Country 55747,City,99,Country 55751,City,99,Country 55752,City,99,Country 55764,City,99,Country 55775,City,99,Country 55776,City,99,Country 55777,City,99,Country 55774,City,99,Country 55773,City,99,Country 55778,City,99,Country 55779,City,99,Country 55780,City,99,Country 55781,City,99,Country 55782,City,99,Country 55783,City,99,Country 55784,City,99,Country 55785,City,99,Country 55786,City,99,Country 55788,City,99,Country 55789,City,99,Country 55790,City,99,Country 55791,City,99,Country 56150,City,99,Country 56157,City,99,Country 56153,City,99,Country 55846,City,99,Country 55815,City,99,Country 55830,City,99,Country 55862,City,99,Country 55916,City,99,Country 55918,City,99,Country 56015,City,99,Country 56022,City,99,Country 56023,City,99,Country 56027,City,99,Country 56028,City,99,Country 56029,City,99,Country 56037,City,99,Country 56039,City,99,Country 56046,City,99,Country 56047,City,99,Country 56056,City,99,Country 56057,City,99,Country 56059,City,99,Country 56060,City,99,Country 56160,City,99,Country 56088,City,99,Country 56114,City,99,Country 56115,City,99,Country 56134,City,99,Country 56135,City,99,Country 55291,City,99,Country 55292,City,99,Country 55251,City,99,Country 55308,City,99,Country 55255,City,99,Country 55256,City,99,Country 55355,City,99,Country 55390,City,99,Country 55368,City,99,Country 55369,City,99,Country 55373,City,99,Country 55379,City,99,Country 55415,City,99,Country 55465,City,99,Country 55523,City,99,Country 55528,City,99,Country 55673,City,99,Country 55745,City,99,Country 55758,City,99,Country 55795,City,99,Country 56170,City,99,Country 55803,City,99,Country 55805,City,99,Country 55806,City,99,Country 55825,City,99,Country 55899,City,99,Country 55924,City,99,Country 55930,City,99,Country 55931,City,99,Country 55940,City,99,Country 56007,City,99,Country 56008,City,99,Country 56019,City,99,Country 56053,City,99,Country 56054,City,99,Country 56129,City,99,Country 55309,City,99,Country 55318,City,99,Country 55319,City,99,Country 55332,City,99,Country 55447,City,99,Country 55534,City,99,Country 55538,City,99,Country 55647,City,99,Country 55648,City,99,Country 55651,City,99,Country 55652,City,99,Country 55876,City,99,Country 55990,City,99,Country 55991,City,99,Country 55938,City,99,Country 55939,City,99,Country 55966,City,99,Country 55967,City,99,Country 56070,City,99,Country 56092,City,99,Country 56093,City,99,Country 56116,City,99,Country 55178,City,99,Country 55179,City,99,Country 55200,City,99,Country 55212,City,99,Country 55213,City,99,Country 55218,City,99,Country 55219,City,99,Country 55220,City,99,Country 55241,City,99,Country 55323,City,99,Country 55335,City,99,Country 55339,City,99,Country 55360,City,99,Country 55361,City,99,Country 55492,City,99,Country 55506,City,99,Country 55664,City,99,Country 55766,City,99,Country 56172,City,99,Country 55842,City,99,Country 55843,City,99,Country 55858,City,99,Country 55879,City,99,Country 55999,City,99,Country 56000,City,99,Country 55943,City,99,Country 56009,City,99,Country 56010,City,99,Country 56020,City,99,Country 56166,City,99,Country 56112,City,99,Country 56113,City,99,Country 56100,City,99,Country 56101,City,99,Country 56138,City,99,Country 56127,City,99,Country 56128,City,99,Country 55234,City,99,Country 55334,City,99,Country 55450,City,99,Country 55519,City,99,Country 55589,City,99,Country 55590,City,99,Country 55657,City,99,Country 55658,City,99,Country 55660,City,99,Country 55661,City,99,Country 55717,City,99,Country 55748,City,99,Country 55749,City,99,Country 55804,City,99,Country 55984,City,99,Country 56087,City,99,Country 56104,City,99,Country 56120,City,99,Country 56121,City,99,Country 56122,City,99,Country 56123,City,99,Country 56124,City,99,Country 56125,City,99,Country 135228,City,100,Country 135181,City,100,Country 135186,City,100,Country 135196,City,100,Country 135197,City,100,Country 135200,City,100,Country 135201,City,100,Country 135206,City,100,Country 135211,City,100,Country 135166,City,100,Country 135168,City,100,Country 135172,City,100,Country 135173,City,100,Country 135177,City,100,Country 135179,City,100,Country 135178,City,100,Country 135191,City,100,Country 135203,City,100,Country 135207,City,100,Country 135163,City,100,Country 135170,City,100,Country 135171,City,100,Country 135175,City,100,Country 135176,City,100,Country 135185,City,100,Country 135192,City,100,Country 135194,City,100,Country 135198,City,100,Country 135199,City,100,Country 135212,City,100,Country 135217,City,100,Country 135221,City,100,Country 135223,City,100,Country 135233,City,100,Country 135161,City,100,Country 135193,City,100,Country 135209,City,100,Country 135214,City,100,Country 135222,City,100,Country 135182,City,100,Country 135183,City,100,Country 135195,City,100,Country 135205,City,100,Country 135208,City,100,Country 135227,City,100,Country 135229,City,100,Country 135164,City,100,Country 135180,City,100,Country 135184,City,100,Country 135188,City,100,Country 135190,City,100,Country 135202,City,100,Country 135210,City,100,Country 135213,City,100,Country 135215,City,100,Country 135225,City,100,Country 135226,City,100,Country 135234,City,100,Country 135162,City,100,Country 135165,City,100,Country 135167,City,100,Country 135169,City,100,Country 135174,City,100,Country 135187,City,100,Country 135189,City,100,Country 135232,City,100,Country 135216,City,100,Country 135218,City,100,Country 135220,City,100,Country 135230,City,100,Country 135231,City,100,Country 135204,City,100,Country 135219,City,100,Country 135224,City,100,Country 57082,City,105,Country 57092,City,105,Country 57093,City,105,Country 57095,City,105,Country 57097,City,105,Country 57099,City,105,Country 57107,City,105,Country 57111,City,105,Country 57121,City,105,Country 57123,City,105,Country 57132,City,105,Country 57147,City,105,Country 57153,City,105,Country 57164,City,105,Country 57176,City,105,Country 57177,City,105,Country 57178,City,105,Country 57187,City,105,Country 57197,City,105,Country 57198,City,105,Country 57204,City,105,Country 57253,City,105,Country 57255,City,105,Country 57256,City,105,Country 57259,City,105,Country 57267,City,105,Country 57291,City,105,Country 57293,City,105,Country 57310,City,105,Country 57318,City,105,Country 57321,City,105,Country 57337,City,105,Country 57356,City,105,Country 57357,City,105,Country 57366,City,105,Country 57385,City,105,Country 57400,City,105,Country 57404,City,105,Country 57406,City,105,Country 57416,City,105,Country 57421,City,105,Country 57430,City,105,Country 57063,City,105,Country 57068,City,105,Country 57069,City,105,Country 57070,City,105,Country 57071,City,105,Country 57072,City,105,Country 57074,City,105,Country 57076,City,105,Country 57077,City,105,Country 57078,City,105,Country 57079,City,105,Country 57081,City,105,Country 57083,City,105,Country 57084,City,105,Country 57085,City,105,Country 57086,City,105,Country 57087,City,105,Country 57089,City,105,Country 57090,City,105,Country 57091,City,105,Country 57096,City,105,Country 57098,City,105,Country 57100,City,105,Country 57101,City,105,Country 57105,City,105,Country 57106,City,105,Country 57109,City,105,Country 57110,City,105,Country 57112,City,105,Country 57113,City,105,Country 57115,City,105,Country 57116,City,105,Country 57117,City,105,Country 57120,City,105,Country 57122,City,105,Country 57125,City,105,Country 57126,City,105,Country 57127,City,105,Country 57129,City,105,Country 57130,City,105,Country 57131,City,105,Country 57133,City,105,Country 57134,City,105,Country 57137,City,105,Country 57138,City,105,Country 57142,City,105,Country 57143,City,105,Country 57144,City,105,Country 57146,City,105,Country 57154,City,105,Country 57156,City,105,Country 57157,City,105,Country 57159,City,105,Country 57161,City,105,Country 57163,City,105,Country 57165,City,105,Country 57167,City,105,Country 57168,City,105,Country 57169,City,105,Country 57170,City,105,Country 57171,City,105,Country 57174,City,105,Country 57175,City,105,Country 57179,City,105,Country 57181,City,105,Country 57183,City,105,Country 57188,City,105,Country 57190,City,105,Country 57194,City,105,Country 57201,City,105,Country 57205,City,105,Country 57206,City,105,Country 57207,City,105,Country 57208,City,105,Country 57209,City,105,Country 57213,City,105,Country 57214,City,105,Country 57215,City,105,Country 57217,City,105,Country 57218,City,105,Country 57219,City,105,Country 57220,City,105,Country 57221,City,105,Country 57222,City,105,Country 57223,City,105,Country 57224,City,105,Country 57225,City,105,Country 57236,City,105,Country 57237,City,105,Country 57226,City,105,Country 57227,City,105,Country 57228,City,105,Country 57231,City,105,Country 57235,City,105,Country 57238,City,105,Country 57239,City,105,Country 57240,City,105,Country 57241,City,105,Country 57243,City,105,Country 57244,City,105,Country 57245,City,105,Country 57246,City,105,Country 57248,City,105,Country 57250,City,105,Country 57251,City,105,Country 57252,City,105,Country 57254,City,105,Country 57257,City,105,Country 57258,City,105,Country 57260,City,105,Country 57261,City,105,Country 57262,City,105,Country 57263,City,105,Country 57265,City,105,Country 57266,City,105,Country 57268,City,105,Country 57269,City,105,Country 57271,City,105,Country 57273,City,105,Country 57274,City,105,Country 57275,City,105,Country 57276,City,105,Country 57277,City,105,Country 57278,City,105,Country 57279,City,105,Country 57280,City,105,Country 57282,City,105,Country 57286,City,105,Country 57288,City,105,Country 57289,City,105,Country 57294,City,105,Country 57296,City,105,Country 57297,City,105,Country 57298,City,105,Country 57299,City,105,Country 57300,City,105,Country 57302,City,105,Country 57305,City,105,Country 57306,City,105,Country 57307,City,105,Country 57308,City,105,Country 57309,City,105,Country 57314,City,105,Country 57311,City,105,Country 57313,City,105,Country 57316,City,105,Country 57319,City,105,Country 57320,City,105,Country 57324,City,105,Country 57326,City,105,Country 57328,City,105,Country 57329,City,105,Country 57330,City,105,Country 57331,City,105,Country 57333,City,105,Country 57334,City,105,Country 57335,City,105,Country 57341,City,105,Country 57342,City,105,Country 57345,City,105,Country 57346,City,105,Country 57351,City,105,Country 57352,City,105,Country 57353,City,105,Country 57354,City,105,Country 57355,City,105,Country 57358,City,105,Country 57360,City,105,Country 57361,City,105,Country 57362,City,105,Country 57364,City,105,Country 57365,City,105,Country 57367,City,105,Country 57368,City,105,Country 57371,City,105,Country 57372,City,105,Country 57374,City,105,Country 57375,City,105,Country 57376,City,105,Country 57378,City,105,Country 57379,City,105,Country 57380,City,105,Country 57381,City,105,Country 57382,City,105,Country 57383,City,105,Country 57384,City,105,Country 57387,City,105,Country 57389,City,105,Country 57390,City,105,Country 57391,City,105,Country 57392,City,105,Country 57393,City,105,Country 57394,City,105,Country 57397,City,105,Country 57399,City,105,Country 57401,City,105,Country 57402,City,105,Country 57403,City,105,Country 57405,City,105,Country 57407,City,105,Country 57408,City,105,Country 57410,City,105,Country 57411,City,105,Country 57412,City,105,Country 57413,City,105,Country 57419,City,105,Country 57422,City,105,Country 57423,City,105,Country 57424,City,105,Country 57425,City,105,Country 57426,City,105,Country 57432,City,105,Country 57062,City,105,Country 57064,City,105,Country 57065,City,105,Country 57067,City,105,Country 57073,City,105,Country 57075,City,105,Country 57080,City,105,Country 57094,City,105,Country 57103,City,105,Country 57118,City,105,Country 57119,City,105,Country 57128,City,105,Country 57139,City,105,Country 57140,City,105,Country 57141,City,105,Country 57148,City,105,Country 57150,City,105,Country 57151,City,105,Country 57152,City,105,Country 57158,City,105,Country 57160,City,105,Country 57162,City,105,Country 57172,City,105,Country 57173,City,105,Country 57180,City,105,Country 57184,City,105,Country 57185,City,105,Country 57186,City,105,Country 57192,City,105,Country 57193,City,105,Country 57195,City,105,Country 57200,City,105,Country 57202,City,105,Country 57203,City,105,Country 57210,City,105,Country 57212,City,105,Country 57229,City,105,Country 57233,City,105,Country 57234,City,105,Country 57242,City,105,Country 57247,City,105,Country 57249,City,105,Country 57270,City,105,Country 57272,City,105,Country 57281,City,105,Country 57283,City,105,Country 57284,City,105,Country 57287,City,105,Country 57290,City,105,Country 57295,City,105,Country 57304,City,105,Country 57312,City,105,Country 57315,City,105,Country 57317,City,105,Country 57322,City,105,Country 57323,City,105,Country 57325,City,105,Country 57332,City,105,Country 57338,City,105,Country 57343,City,105,Country 57344,City,105,Country 57347,City,105,Country 57348,City,105,Country 57349,City,105,Country 57359,City,105,Country 57363,City,105,Country 57388,City,105,Country 57373,City,105,Country 57377,City,105,Country 57386,City,105,Country 57395,City,105,Country 57396,City,105,Country 57398,City,105,Country 57409,City,105,Country 57414,City,105,Country 57415,City,105,Country 57417,City,105,Country 57420,City,105,Country 57418,City,105,Country 57428,City,105,Country 57429,City,105,Country 57431,City,105,Country 57433,City,105,Country 57066,City,105,Country 57088,City,105,Country 57102,City,105,Country 57104,City,105,Country 57108,City,105,Country 57114,City,105,Country 57124,City,105,Country 57135,City,105,Country 57136,City,105,Country 57145,City,105,Country 57149,City,105,Country 57155,City,105,Country 57166,City,105,Country 57182,City,105,Country 57189,City,105,Country 57191,City,105,Country 57196,City,105,Country 57199,City,105,Country 57211,City,105,Country 57216,City,105,Country 57230,City,105,Country 57232,City,105,Country 57264,City,105,Country 57285,City,105,Country 57292,City,105,Country 57301,City,105,Country 57303,City,105,Country 57327,City,105,Country 57336,City,105,Country 57339,City,105,Country 57340,City,105,Country 57350,City,105,Country 57369,City,105,Country 57370,City,105,Country 57427,City,105,Country 135240,City,107,Country 135250,City,107,Country 135325,City,107,Country 135342,City,107,Country 135347,City,107,Country 135400,City,107,Country 135440,City,107,Country 135477,City,107,Country 135523,City,107,Country 135565,City,107,Country 135597,City,107,Country 135602,City,107,Country 135638,City,107,Country 135672,City,107,Country 135675,City,107,Country 135679,City,107,Country 135704,City,107,Country 135795,City,107,Country 135796,City,107,Country 135826,City,107,Country 135847,City,107,Country 135858,City,107,Country 135870,City,107,Country 135881,City,107,Country 135938,City,107,Country 135939,City,107,Country 136062,City,107,Country 136063,City,107,Country 136108,City,107,Country 136119,City,107,Country 136189,City,107,Country 136227,City,107,Country 136343,City,107,Country 136385,City,107,Country 136397,City,107,Country 136430,City,107,Country 136470,City,107,Country 136494,City,107,Country 136625,City,107,Country 136635,City,107,Country 136683,City,107,Country 136716,City,107,Country 136731,City,107,Country 136736,City,107,Country 136752,City,107,Country 136765,City,107,Country 136771,City,107,Country 136774,City,107,Country 136786,City,107,Country 136790,City,107,Country 136794,City,107,Country 136831,City,107,Country 136835,City,107,Country 136920,City,107,Country 136919,City,107,Country 136936,City,107,Country 136945,City,107,Country 136954,City,107,Country 136961,City,107,Country 136965,City,107,Country 136995,City,107,Country 137083,City,107,Country 137133,City,107,Country 137165,City,107,Country 137169,City,107,Country 137173,City,107,Country 137136,City,107,Country 137205,City,107,Country 137210,City,107,Country 137211,City,107,Country 137242,City,107,Country 137295,City,107,Country 137321,City,107,Country 137322,City,107,Country 137347,City,107,Country 137342,City,107,Country 137343,City,107,Country 137360,City,107,Country 137395,City,107,Country 137462,City,107,Country 137465,City,107,Country 137479,City,107,Country 137505,City,107,Country 137525,City,107,Country 137555,City,107,Country 137560,City,107,Country 137672,City,107,Country 137772,City,107,Country 137787,City,107,Country 137789,City,107,Country 137793,City,107,Country 137795,City,107,Country 137796,City,107,Country 137802,City,107,Country 137798,City,107,Country 137799,City,107,Country 137826,City,107,Country 137857,City,107,Country 137876,City,107,Country 137877,City,107,Country 137878,City,107,Country 137879,City,107,Country 137884,City,107,Country 137889,City,107,Country 137890,City,107,Country 137911,City,107,Country 137923,City,107,Country 137941,City,107,Country 137980,City,107,Country 137989,City,107,Country 138008,City,107,Country 138044,City,107,Country 138069,City,107,Country 138072,City,107,Country 138129,City,107,Country 138163,City,107,Country 138186,City,107,Country 138195,City,107,Country 138277,City,107,Country 138351,City,107,Country 138422,City,107,Country 138434,City,107,Country 138437,City,107,Country 138441,City,107,Country 138447,City,107,Country 138527,City,107,Country 138607,City,107,Country 138609,City,107,Country 138667,City,107,Country 138669,City,107,Country 138690,City,107,Country 138696,City,107,Country 138730,City,107,Country 138736,City,107,Country 138755,City,107,Country 138781,City,107,Country 138832,City,107,Country 138926,City,107,Country 138970,City,107,Country 138985,City,107,Country 138991,City,107,Country 138993,City,107,Country 139031,City,107,Country 139163,City,107,Country 139181,City,107,Country 139201,City,107,Country 139212,City,107,Country 139245,City,107,Country 139285,City,107,Country 139341,City,107,Country 139354,City,107,Country 139431,City,107,Country 139451,City,107,Country 139479,City,107,Country 139480,City,107,Country 139538,City,107,Country 139610,City,107,Country 139638,City,107,Country 139639,City,107,Country 139725,City,107,Country 139802,City,107,Country 139803,City,107,Country 139895,City,107,Country 139897,City,107,Country 139936,City,107,Country 139975,City,107,Country 140132,City,107,Country 140214,City,107,Country 140350,City,107,Country 140389,City,107,Country 140390,City,107,Country 140436,City,107,Country 140438,City,107,Country 140465,City,107,Country 140504,City,107,Country 140505,City,107,Country 140514,City,107,Country 140541,City,107,Country 140557,City,107,Country 140586,City,107,Country 140620,City,107,Country 140634,City,107,Country 140646,City,107,Country 140647,City,107,Country 140671,City,107,Country 140731,City,107,Country 140743,City,107,Country 140745,City,107,Country 140746,City,107,Country 140780,City,107,Country 140811,City,107,Country 140842,City,107,Country 140874,City,107,Country 140932,City,107,Country 140952,City,107,Country 140975,City,107,Country 140987,City,107,Country 140988,City,107,Country 140990,City,107,Country 141058,City,107,Country 141070,City,107,Country 141095,City,107,Country 58205,City,107,Country 58209,City,107,Country 58238,City,107,Country 58260,City,107,Country 58264,City,107,Country 58403,City,107,Country 58406,City,107,Country 58407,City,107,Country 58408,City,107,Country 58411,City,107,Country 58420,City,107,Country 58450,City,107,Country 58452,City,107,Country 58459,City,107,Country 58461,City,107,Country 58466,City,107,Country 58493,City,107,Country 58523,City,107,Country 58548,City,107,Country 58554,City,107,Country 58579,City,107,Country 58607,City,107,Country 58612,City,107,Country 58619,City,107,Country 58677,City,107,Country 58727,City,107,Country 58728,City,107,Country 58759,City,107,Country 58768,City,107,Country 58802,City,107,Country 58900,City,107,Country 59015,City,107,Country 59033,City,107,Country 59069,City,107,Country 59070,City,107,Country 59072,City,107,Country 59087,City,107,Country 59088,City,107,Country 59089,City,107,Country 59106,City,107,Country 59124,City,107,Country 59160,City,107,Country 59179,City,107,Country 59212,City,107,Country 59270,City,107,Country 59285,City,107,Country 59399,City,107,Country 59439,City,107,Country 59483,City,107,Country 59484,City,107,Country 59487,City,107,Country 59473,City,107,Country 59478,City,107,Country 59494,City,107,Country 59510,City,107,Country 59516,City,107,Country 59518,City,107,Country 59524,City,107,Country 59531,City,107,Country 59567,City,107,Country 59629,City,107,Country 59634,City,107,Country 59637,City,107,Country 59772,City,107,Country 59777,City,107,Country 59792,City,107,Country 59806,City,107,Country 59831,City,107,Country 59833,City,107,Country 59849,City,107,Country 59892,City,107,Country 59986,City,107,Country 60072,City,107,Country 60097,City,107,Country 60148,City,107,Country 60153,City,107,Country 60203,City,107,Country 60222,City,107,Country 60234,City,107,Country 60259,City,107,Country 60269,City,107,Country 60275,City,107,Country 60391,City,107,Country 60400,City,107,Country 60403,City,107,Country 60402,City,107,Country 60407,City,107,Country 60463,City,107,Country 60494,City,107,Country 60504,City,107,Country 60524,City,107,Country 60565,City,107,Country 60601,City,107,Country 60622,City,107,Country 60639,City,107,Country 60640,City,107,Country 60643,City,107,Country 60662,City,107,Country 60665,City,107,Country 60670,City,107,Country 60676,City,107,Country 60704,City,107,Country 60765,City,107,Country 60857,City,107,Country 61027,City,107,Country 61116,City,107,Country 61142,City,107,Country 61163,City,107,Country 61217,City,107,Country 61280,City,107,Country 61293,City,107,Country 61301,City,107,Country 61317,City,107,Country 61330,City,107,Country 61334,City,107,Country 61336,City,107,Country 61368,City,107,Country 61380,City,107,Country 61392,City,107,Country 61399,City,107,Country 61401,City,107,Country 61416,City,107,Country 61417,City,107,Country 61424,City,107,Country 61444,City,107,Country 61473,City,107,Country 61563,City,107,Country 61578,City,107,Country 61626,City,107,Country 61686,City,107,Country 61704,City,107,Country 61781,City,107,Country 61922,City,107,Country 61988,City,107,Country 61992,City,107,Country 62003,City,107,Country 62012,City,107,Country 62015,City,107,Country 62022,City,107,Country 62025,City,107,Country 62026,City,107,Country 62071,City,107,Country 62075,City,107,Country 62078,City,107,Country 62080,City,107,Country 62093,City,107,Country 62145,City,107,Country 62151,City,107,Country 62186,City,107,Country 135416,City,107,Country 135511,City,107,Country 135516,City,107,Country 135530,City,107,Country 135618,City,107,Country 135645,City,107,Country 135712,City,107,Country 135716,City,107,Country 135717,City,107,Country 135838,City,107,Country 135997,City,107,Country 136055,City,107,Country 136378,City,107,Country 137627,City,107,Country 137628,City,107,Country 137629,City,107,Country 137630,City,107,Country 137631,City,107,Country 137632,City,107,Country 137633,City,107,Country 137634,City,107,Country 137635,City,107,Country 137841,City,107,Country 138115,City,107,Country 138301,City,107,Country 138321,City,107,Country 138355,City,107,Country 138388,City,107,Country 138765,City,107,Country 138591,City,107,Country 138771,City,107,Country 138960,City,107,Country 139063,City,107,Country 139089,City,107,Country 139090,City,107,Country 139091,City,107,Country 139187,City,107,Country 139211,City,107,Country 139262,City,107,Country 139264,City,107,Country 139283,City,107,Country 139290,City,107,Country 139294,City,107,Country 139299,City,107,Country 139303,City,107,Country 139306,City,107,Country 139383,City,107,Country 139514,City,107,Country 140288,City,107,Country 140337,City,107,Country 140576,City,107,Country 140613,City,107,Country 140860,City,107,Country 140907,City,107,Country 141060,City,107,Country 58293,City,107,Country 58430,City,107,Country 58476,City,107,Country 58732,City,107,Country 58796,City,107,Country 58827,City,107,Country 58829,City,107,Country 58881,City,107,Country 59193,City,107,Country 59225,City,107,Country 59244,City,107,Country 59350,City,107,Country 59351,City,107,Country 59727,City,107,Country 59728,City,107,Country 59729,City,107,Country 59730,City,107,Country 59731,City,107,Country 59732,City,107,Country 59733,City,107,Country 59734,City,107,Country 59735,City,107,Country 60030,City,107,Country 61328,City,107,Country 61677,City,107,Country 61694,City,107,Country 61735,City,107,Country 61738,City,107,Country 61744,City,107,Country 61865,City,107,Country 61866,City,107,Country 62045,City,107,Country 62074,City,107,Country 62147,City,107,Country 62148,City,107,Country 62149,City,107,Country 135247,City,107,Country 135272,City,107,Country 135281,City,107,Country 135286,City,107,Country 135365,City,107,Country 135366,City,107,Country 135397,City,107,Country 135398,City,107,Country 135418,City,107,Country 135430,City,107,Country 135486,City,107,Country 135491,City,107,Country 135525,City,107,Country 135540,City,107,Country 135549,City,107,Country 135621,City,107,Country 135656,City,107,Country 135703,City,107,Country 135771,City,107,Country 135853,City,107,Country 135860,City,107,Country 136043,City,107,Country 136053,City,107,Country 136061,City,107,Country 136067,City,107,Country 136068,City,107,Country 136069,City,107,Country 136153,City,107,Country 136257,City,107,Country 136272,City,107,Country 136334,City,107,Country 136471,City,107,Country 136528,City,107,Country 136616,City,107,Country 136697,City,107,Country 136727,City,107,Country 136732,City,107,Country 136769,City,107,Country 136804,City,107,Country 136826,City,107,Country 136834,City,107,Country 136884,City,107,Country 136891,City,107,Country 136903,City,107,Country 136904,City,107,Country 136915,City,107,Country 136921,City,107,Country 136996,City,107,Country 137003,City,107,Country 137011,City,107,Country 137016,City,107,Country 137017,City,107,Country 137030,City,107,Country 137101,City,107,Country 137215,City,107,Country 137217,City,107,Country 137267,City,107,Country 137266,City,107,Country 137298,City,107,Country 137338,City,107,Country 137372,City,107,Country 137373,City,107,Country 137374,City,107,Country 137376,City,107,Country 137382,City,107,Country 137418,City,107,Country 137461,City,107,Country 137464,City,107,Country 137469,City,107,Country 137476,City,107,Country 137480,City,107,Country 137544,City,107,Country 137550,City,107,Country 137673,City,107,Country 137763,City,107,Country 137885,City,107,Country 137887,City,107,Country 137983,City,107,Country 137986,City,107,Country 137991,City,107,Country 138014,City,107,Country 138047,City,107,Country 138119,City,107,Country 138157,City,107,Country 138206,City,107,Country 138219,City,107,Country 138244,City,107,Country 138249,City,107,Country 138270,City,107,Country 138371,City,107,Country 138404,City,107,Country 138407,City,107,Country 138454,City,107,Country 138473,City,107,Country 138572,City,107,Country 138687,City,107,Country 138694,City,107,Country 138783,City,107,Country 138795,City,107,Country 138796,City,107,Country 138813,City,107,Country 138823,City,107,Country 138891,City,107,Country 138966,City,107,Country 138971,City,107,Country 138975,City,107,Country 138979,City,107,Country 138987,City,107,Country 138996,City,107,Country 139083,City,107,Country 139121,City,107,Country 139139,City,107,Country 139144,City,107,Country 139230,City,107,Country 139255,City,107,Country 139300,City,107,Country 139345,City,107,Country 139346,City,107,Country 139388,City,107,Country 139389,City,107,Country 139430,City,107,Country 139458,City,107,Country 139459,City,107,Country 139460,City,107,Country 139469,City,107,Country 139481,City,107,Country 139486,City,107,Country 139554,City,107,Country 139555,City,107,Country 139565,City,107,Country 139616,City,107,Country 139631,City,107,Country 139641,City,107,Country 139722,City,107,Country 139731,City,107,Country 139791,City,107,Country 139796,City,107,Country 139863,City,107,Country 139886,City,107,Country 139901,City,107,Country 139902,City,107,Country 139926,City,107,Country 139932,City,107,Country 139933,City,107,Country 139942,City,107,Country 139977,City,107,Country 139994,City,107,Country 139997,City,107,Country 140001,City,107,Country 140041,City,107,Country 140049,City,107,Country 140056,City,107,Country 140085,City,107,Country 140091,City,107,Country 140131,City,107,Country 140160,City,107,Country 140159,City,107,Country 140192,City,107,Country 140209,City,107,Country 140213,City,107,Country 140296,City,107,Country 140315,City,107,Country 140379,City,107,Country 140462,City,107,Country 140471,City,107,Country 140491,City,107,Country 140508,City,107,Country 140520,City,107,Country 140530,City,107,Country 140533,City,107,Country 140555,City,107,Country 140604,City,107,Country 140659,City,107,Country 140670,City,107,Country 140693,City,107,Country 140718,City,107,Country 140754,City,107,Country 140788,City,107,Country 140789,City,107,Country 140795,City,107,Country 140796,City,107,Country 140840,City,107,Country 140946,City,107,Country 140951,City,107,Country 140972,City,107,Country 140977,City,107,Country 140983,City,107,Country 141044,City,107,Country 141045,City,107,Country 58219,City,107,Country 58220,City,107,Country 58256,City,107,Country 58261,City,107,Country 58262,City,107,Country 58282,City,107,Country 58289,City,107,Country 58295,City,107,Country 58300,City,107,Country 58351,City,107,Country 58455,City,107,Country 58500,City,107,Country 58617,City,107,Country 58709,City,107,Country 58748,City,107,Country 58755,City,107,Country 58771,City,107,Country 58790,City,107,Country 58926,City,107,Country 59067,City,107,Country 59112,City,107,Country 59118,City,107,Country 59131,City,107,Country 59141,City,107,Country 59178,City,107,Country 59203,City,107,Country 59209,City,107,Country 59233,City,107,Country 59255,City,107,Country 59378,City,107,Country 59500,City,107,Country 59541,City,107,Country 59553,City,107,Country 59636,City,107,Country 59696,City,107,Country 59705,City,107,Country 59709,City,107,Country 59767,City,107,Country 59789,City,107,Country 59810,City,107,Country 59859,City,107,Country 59864,City,107,Country 59894,City,107,Country 59898,City,107,Country 59915,City,107,Country 59956,City,107,Country 59988,City,107,Country 60065,City,107,Country 60066,City,107,Country 60099,City,107,Country 60119,City,107,Country 60152,City,107,Country 60156,City,107,Country 60161,City,107,Country 60201,City,107,Country 60184,City,107,Country 60244,City,107,Country 60282,City,107,Country 60298,City,107,Country 60311,City,107,Country 60310,City,107,Country 60312,City,107,Country 60324,City,107,Country 60418,City,107,Country 60506,City,107,Country 60583,City,107,Country 60667,City,107,Country 60677,City,107,Country 60758,City,107,Country 60766,City,107,Country 60896,City,107,Country 60916,City,107,Country 60994,City,107,Country 61014,City,107,Country 61028,City,107,Country 61036,City,107,Country 61049,City,107,Country 61067,City,107,Country 61079,City,107,Country 61080,City,107,Country 61103,City,107,Country 61123,City,107,Country 61125,City,107,Country 61126,City,107,Country 61165,City,107,Country 61177,City,107,Country 61193,City,107,Country 61225,City,107,Country 61276,City,107,Country 61321,City,107,Country 61331,City,107,Country 61361,City,107,Country 61363,City,107,Country 61384,City,107,Country 61400,City,107,Country 61437,City,107,Country 61489,City,107,Country 61519,City,107,Country 61525,City,107,Country 61528,City,107,Country 61549,City,107,Country 61566,City,107,Country 61574,City,107,Country 61582,City,107,Country 61588,City,107,Country 61591,City,107,Country 61590,City,107,Country 61665,City,107,Country 61796,City,107,Country 61858,City,107,Country 61918,City,107,Country 61933,City,107,Country 61955,City,107,Country 61990,City,107,Country 62181,City,107,Country 62220,City,107,Country 62222,City,107,Country 62237,City,107,Country 62269,City,107,Country 135245,City,107,Country 135249,City,107,Country 135253,City,107,Country 135354,City,107,Country 135407,City,107,Country 135526,City,107,Country 135614,City,107,Country 135673,City,107,Country 135709,City,107,Country 135797,City,107,Country 135806,City,107,Country 135810,City,107,Country 135857,City,107,Country 135934,City,107,Country 135992,City,107,Country 136329,City,107,Country 136335,City,107,Country 136504,City,107,Country 136553,City,107,Country 136556,City,107,Country 136667,City,107,Country 136694,City,107,Country 136850,City,107,Country 137203,City,107,Country 137264,City,107,Country 137265,City,107,Country 137273,City,107,Country 137313,City,107,Country 137384,City,107,Country 137577,City,107,Country 137655,City,107,Country 137747,City,107,Country 137910,City,107,Country 138019,City,107,Country 138121,City,107,Country 138364,City,107,Country 138445,City,107,Country 138488,City,107,Country 138529,City,107,Country 138624,City,107,Country 138699,City,107,Country 138809,City,107,Country 138843,City,107,Country 138903,City,107,Country 138963,City,107,Country 139029,City,107,Country 139072,City,107,Country 139130,City,107,Country 139137,City,107,Country 139160,City,107,Country 139223,City,107,Country 139295,City,107,Country 139327,City,107,Country 139393,City,107,Country 139400,City,107,Country 139401,City,107,Country 139410,City,107,Country 139501,City,107,Country 139832,City,107,Country 139855,City,107,Country 139922,City,107,Country 139923,City,107,Country 139954,City,107,Country 139993,City,107,Country 140043,City,107,Country 140138,City,107,Country 140183,City,107,Country 140228,City,107,Country 140318,City,107,Country 140495,City,107,Country 140499,City,107,Country 140534,City,107,Country 140694,City,107,Country 140741,City,107,Country 140790,City,107,Country 140816,City,107,Country 140817,City,107,Country 140902,City,107,Country 140934,City,107,Country 58231,City,107,Country 58343,City,107,Country 58463,City,107,Country 58580,City,107,Country 58614,City,107,Country 58621,City,107,Country 58663,City,107,Country 58713,City,107,Country 58789,City,107,Country 58810,City,107,Country 58965,City,107,Country 59149,City,107,Country 59164,City,107,Country 59287,City,107,Country 59288,City,107,Country 59397,City,107,Country 59402,City,107,Country 59436,City,107,Country 59511,City,107,Country 59659,City,107,Country 59660,City,107,Country 59703,City,107,Country 59708,City,107,Country 59746,City,107,Country 59848,City,107,Country 59866,City,107,Country 59867,City,107,Country 59880,City,107,Country 59905,City,107,Country 59957,City,107,Country 60081,City,107,Country 60107,City,107,Country 60157,City,107,Country 60242,City,107,Country 60372,City,107,Country 60387,City,107,Country 60542,City,107,Country 60573,City,107,Country 60579,City,107,Country 60598,City,107,Country 60611,City,107,Country 60626,City,107,Country 60726,City,107,Country 61024,City,107,Country 61072,City,107,Country 61198,City,107,Country 61242,City,107,Country 61287,City,107,Country 61303,City,107,Country 61435,City,107,Country 61467,City,107,Country 61518,City,107,Country 61544,City,107,Country 61579,City,107,Country 61634,City,107,Country 61739,City,107,Country 61823,City,107,Country 61934,City,107,Country 61945,City,107,Country 61946,City,107,Country 62033,City,107,Country 62270,City,107,Country 135251,City,107,Country 135265,City,107,Country 135271,City,107,Country 135273,City,107,Country 135284,City,107,Country 135295,City,107,Country 135296,City,107,Country 135309,City,107,Country 135326,City,107,Country 135329,City,107,Country 135369,City,107,Country 135374,City,107,Country 135395,City,107,Country 135439,City,107,Country 135445,City,107,Country 135458,City,107,Country 135460,City,107,Country 135462,City,107,Country 135469,City,107,Country 135471,City,107,Country 135480,City,107,Country 135489,City,107,Country 135509,City,107,Country 135510,City,107,Country 135520,City,107,Country 135541,City,107,Country 135560,City,107,Country 135582,City,107,Country 135583,City,107,Country 135585,City,107,Country 135596,City,107,Country 135742,City,107,Country 135743,City,107,Country 135744,City,107,Country 135749,City,107,Country 135863,City,107,Country 135926,City,107,Country 135951,City,107,Country 135958,City,107,Country 135963,City,107,Country 135965,City,107,Country 135973,City,107,Country 136029,City,107,Country 136030,City,107,Country 136064,City,107,Country 136076,City,107,Country 136088,City,107,Country 136138,City,107,Country 136156,City,107,Country 136166,City,107,Country 136256,City,107,Country 136264,City,107,Country 136265,City,107,Country 136266,City,107,Country 136267,City,107,Country 136285,City,107,Country 136286,City,107,Country 136325,City,107,Country 136347,City,107,Country 136380,City,107,Country 136408,City,107,Country 136452,City,107,Country 136491,City,107,Country 136536,City,107,Country 136538,City,107,Country 136563,City,107,Country 136589,City,107,Country 136607,City,107,Country 136627,City,107,Country 136673,City,107,Country 136705,City,107,Country 136717,City,107,Country 136728,City,107,Country 136749,City,107,Country 136770,City,107,Country 136777,City,107,Country 136827,City,107,Country 136828,City,107,Country 136860,City,107,Country 136861,City,107,Country 136868,City,107,Country 136872,City,107,Country 136874,City,107,Country 136889,City,107,Country 136898,City,107,Country 136907,City,107,Country 136952,City,107,Country 137069,City,107,Country 137081,City,107,Country 137095,City,107,Country 137316,City,107,Country 137340,City,107,Country 137381,City,107,Country 137388,City,107,Country 137389,City,107,Country 137392,City,107,Country 137398,City,107,Country 137399,City,107,Country 137404,City,107,Country 137440,City,107,Country 137466,City,107,Country 137470,City,107,Country 137485,City,107,Country 137500,City,107,Country 137512,City,107,Country 137524,City,107,Country 137534,City,107,Country 137551,City,107,Country 137581,City,107,Country 137592,City,107,Country 137599,City,107,Country 137617,City,107,Country 137623,City,107,Country 137624,City,107,Country 137653,City,107,Country 137708,City,107,Country 137725,City,107,Country 137737,City,107,Country 137750,City,107,Country 137751,City,107,Country 137766,City,107,Country 137768,City,107,Country 137785,City,107,Country 137812,City,107,Country 137927,City,107,Country 137963,City,107,Country 137969,City,107,Country 138012,City,107,Country 138013,City,107,Country 138051,City,107,Country 138078,City,107,Country 138082,City,107,Country 138112,City,107,Country 138154,City,107,Country 138165,City,107,Country 138166,City,107,Country 138167,City,107,Country 138168,City,107,Country 138170,City,107,Country 138174,City,107,Country 138202,City,107,Country 138218,City,107,Country 138230,City,107,Country 138233,City,107,Country 138238,City,107,Country 138243,City,107,Country 138259,City,107,Country 138268,City,107,Country 138269,City,107,Country 138287,City,107,Country 138302,City,107,Country 138307,City,107,Country 138327,City,107,Country 138395,City,107,Country 138396,City,107,Country 138408,City,107,Country 138415,City,107,Country 138419,City,107,Country 138420,City,107,Country 138485,City,107,Country 138486,City,107,Country 138498,City,107,Country 138520,City,107,Country 138522,City,107,Country 138524,City,107,Country 138532,City,107,Country 138544,City,107,Country 138549,City,107,Country 138552,City,107,Country 138625,City,107,Country 138675,City,107,Country 138676,City,107,Country 138692,City,107,Country 138695,City,107,Country 138702,City,107,Country 138709,City,107,Country 138760,City,107,Country 138784,City,107,Country 138797,City,107,Country 138864,City,107,Country 138907,City,107,Country 138919,City,107,Country 138956,City,107,Country 138962,City,107,Country 138969,City,107,Country 138972,City,107,Country 138983,City,107,Country 139003,City,107,Country 139101,City,107,Country 139104,City,107,Country 139128,City,107,Country 139156,City,107,Country 139157,City,107,Country 139161,City,107,Country 139225,City,107,Country 139226,City,107,Country 139250,City,107,Country 139273,City,107,Country 139280,City,107,Country 139281,City,107,Country 139320,City,107,Country 139326,City,107,Country 139333,City,107,Country 139334,City,107,Country 139344,City,107,Country 139369,City,107,Country 139394,City,107,Country 139398,City,107,Country 139403,City,107,Country 139421,City,107,Country 139425,City,107,Country 139517,City,107,Country 139566,City,107,Country 139597,City,107,Country 139598,City,107,Country 139661,City,107,Country 139685,City,107,Country 139721,City,107,Country 139745,City,107,Country 139747,City,107,Country 139746,City,107,Country 139767,City,107,Country 139778,City,107,Country 139780,City,107,Country 139785,City,107,Country 139798,City,107,Country 139823,City,107,Country 139824,City,107,Country 139836,City,107,Country 139839,City,107,Country 139840,City,107,Country 139872,City,107,Country 139884,City,107,Country 139885,City,107,Country 139887,City,107,Country 139896,City,107,Country 139912,City,107,Country 139928,City,107,Country 139937,City,107,Country 139938,City,107,Country 139940,City,107,Country 139948,City,107,Country 140046,City,107,Country 140045,City,107,Country 140048,City,107,Country 140052,City,107,Country 140063,City,107,Country 140096,City,107,Country 140097,City,107,Country 140137,City,107,Country 140147,City,107,Country 140176,City,107,Country 140230,City,107,Country 140250,City,107,Country 140251,City,107,Country 140285,City,107,Country 140290,City,107,Country 140334,City,107,Country 140349,City,107,Country 140387,City,107,Country 140454,City,107,Country 140506,City,107,Country 140507,City,107,Country 140523,City,107,Country 140597,City,107,Country 140623,City,107,Country 140650,City,107,Country 140660,City,107,Country 140662,City,107,Country 140666,City,107,Country 140717,City,107,Country 140725,City,107,Country 140761,City,107,Country 140766,City,107,Country 140779,City,107,Country 140783,City,107,Country 140785,City,107,Country 140899,City,107,Country 140935,City,107,Country 140958,City,107,Country 140976,City,107,Country 58207,City,107,Country 58239,City,107,Country 58246,City,107,Country 58247,City,107,Country 58248,City,107,Country 58258,City,107,Country 58268,City,107,Country 58277,City,107,Country 58280,City,107,Country 58287,City,107,Country 58290,City,107,Country 58291,City,107,Country 58297,City,107,Country 58302,City,107,Country 58305,City,107,Country 58344,City,107,Country 58361,City,107,Country 58366,City,107,Country 58372,City,107,Country 58383,City,107,Country 58392,City,107,Country 58410,City,107,Country 58432,City,107,Country 58474,City,107,Country 58485,City,107,Country 58486,City,107,Country 58520,City,107,Country 58549,City,107,Country 58613,City,107,Country 58620,City,107,Country 58708,City,107,Country 58726,City,107,Country 58730,City,107,Country 58731,City,107,Country 58733,City,107,Country 58734,City,107,Country 58735,City,107,Country 58787,City,107,Country 58793,City,107,Country 58921,City,107,Country 58998,City,107,Country 59123,City,107,Country 59126,City,107,Country 59128,City,107,Country 59167,City,107,Country 59188,City,107,Country 59239,City,107,Country 59320,City,107,Country 59332,City,107,Country 59353,City,107,Country 59354,City,107,Country 59362,City,107,Country 59445,City,107,Country 59488,City,107,Country 59470,City,107,Country 59471,City,107,Country 59491,City,107,Country 59499,City,107,Country 59532,City,107,Country 59534,City,107,Country 59558,City,107,Country 59560,City,107,Country 59561,City,107,Country 59581,City,107,Country 59624,City,107,Country 59625,City,107,Country 59632,City,107,Country 59635,City,107,Country 59647,City,107,Country 59648,City,107,Country 59654,City,107,Country 59686,City,107,Country 59771,City,107,Country 59801,City,107,Country 59811,City,107,Country 59823,City,107,Country 59829,City,107,Country 59850,City,107,Country 59856,City,107,Country 59879,City,107,Country 59881,City,107,Country 59891,City,107,Country 59899,City,107,Country 59913,City,107,Country 59918,City,107,Country 59925,City,107,Country 59954,City,107,Country 59959,City,107,Country 59995,City,107,Country 59997,City,107,Country 60022,City,107,Country 60036,City,107,Country 60040,City,107,Country 60045,City,107,Country 60050,City,107,Country 60051,City,107,Country 60055,City,107,Country 60061,City,107,Country 60067,City,107,Country 60085,City,107,Country 60108,City,107,Country 60134,City,107,Country 60136,City,107,Country 60137,City,107,Country 60140,City,107,Country 60141,City,107,Country 60144,City,107,Country 60186,City,107,Country 60173,City,107,Country 60192,City,107,Country 60195,City,107,Country 60200,City,107,Country 60214,City,107,Country 60221,City,107,Country 60247,City,107,Country 60248,City,107,Country 60270,City,107,Country 60278,City,107,Country 60306,City,107,Country 60321,City,107,Country 60322,City,107,Country 60335,City,107,Country 60344,City,107,Country 60346,City,107,Country 60396,City,107,Country 60401,City,107,Country 60405,City,107,Country 60409,City,107,Country 60414,City,107,Country 60416,City,107,Country 60417,City,107,Country 60424,City,107,Country 60431,City,107,Country 60432,City,107,Country 60435,City,107,Country 60473,City,107,Country 60490,City,107,Country 60492,City,107,Country 60511,City,107,Country 60523,City,107,Country 60525,City,107,Country 60539,City,107,Country 60559,City,107,Country 60578,City,107,Country 60585,City,107,Country 60605,City,107,Country 60607,City,107,Country 60615,City,107,Country 60629,City,107,Country 60654,City,107,Country 60655,City,107,Country 60701,City,107,Country 60702,City,107,Country 60715,City,107,Country 60755,City,107,Country 60750,City,107,Country 60752,City,107,Country 60769,City,107,Country 60770,City,107,Country 60785,City,107,Country 60811,City,107,Country 60817,City,107,Country 60835,City,107,Country 60838,City,107,Country 60842,City,107,Country 60861,City,107,Country 60870,City,107,Country 60949,City,107,Country 60958,City,107,Country 60959,City,107,Country 60977,City,107,Country 60978,City,107,Country 60980,City,107,Country 60981,City,107,Country 60989,City,107,Country 61001,City,107,Country 61003,City,107,Country 61002,City,107,Country 61012,City,107,Country 61034,City,107,Country 61035,City,107,Country 61042,City,107,Country 61043,City,107,Country 61053,City,107,Country 61060,City,107,Country 61074,City,107,Country 61075,City,107,Country 61099,City,107,Country 61127,City,107,Country 61168,City,107,Country 61176,City,107,Country 61184,City,107,Country 61240,City,107,Country 61239,City,107,Country 61247,City,107,Country 61284,City,107,Country 61289,City,107,Country 61316,City,107,Country 61375,City,107,Country 61355,City,107,Country 61390,City,107,Country 61413,City,107,Country 61414,City,107,Country 61462,City,107,Country 61481,City,107,Country 61552,City,107,Country 61556,City,107,Country 61598,City,107,Country 61622,City,107,Country 61632,City,107,Country 61707,City,107,Country 61709,City,107,Country 61763,City,107,Country 61785,City,107,Country 61835,City,107,Country 61877,City,107,Country 61907,City,107,Country 62017,City,107,Country 62117,City,107,Country 62118,City,107,Country 62227,City,107,Country 62228,City,107,Country 62230,City,107,Country 62233,City,107,Country 62285,City,107,Country 62287,City,107,Country 135254,City,107,Country 135255,City,107,Country 135294,City,107,Country 135298,City,107,Country 135319,City,107,Country 135328,City,107,Country 135330,City,107,Country 135334,City,107,Country 135350,City,107,Country 135399,City,107,Country 135411,City,107,Country 135432,City,107,Country 135435,City,107,Country 135448,City,107,Country 135456,City,107,Country 135472,City,107,Country 135473,City,107,Country 135475,City,107,Country 135490,City,107,Country 135500,City,107,Country 135508,City,107,Country 135515,City,107,Country 135532,City,107,Country 135534,City,107,Country 135543,City,107,Country 135546,City,107,Country 135587,City,107,Country 135599,City,107,Country 135600,City,107,Country 135603,City,107,Country 135606,City,107,Country 135623,City,107,Country 135626,City,107,Country 135627,City,107,Country 135629,City,107,Country 135649,City,107,Country 135653,City,107,Country 135674,City,107,Country 135678,City,107,Country 135680,City,107,Country 135686,City,107,Country 135699,City,107,Country 135700,City,107,Country 135702,City,107,Country 135715,City,107,Country 135729,City,107,Country 135762,City,107,Country 135763,City,107,Country 135777,City,107,Country 135778,City,107,Country 135805,City,107,Country 135812,City,107,Country 135865,City,107,Country 135867,City,107,Country 135883,City,107,Country 135909,City,107,Country 135945,City,107,Country 135947,City,107,Country 135948,City,107,Country 135959,City,107,Country 135976,City,107,Country 136058,City,107,Country 136059,City,107,Country 136071,City,107,Country 136073,City,107,Country 136134,City,107,Country 136139,City,107,Country 136170,City,107,Country 136247,City,107,Country 136248,City,107,Country 136282,City,107,Country 136322,City,107,Country 136375,City,107,Country 136386,City,107,Country 136388,City,107,Country 136405,City,107,Country 136406,City,107,Country 136466,City,107,Country 136474,City,107,Country 136475,City,107,Country 136481,City,107,Country 136484,City,107,Country 136486,City,107,Country 136529,City,107,Country 136551,City,107,Country 136557,City,107,Country 136558,City,107,Country 136564,City,107,Country 136585,City,107,Country 136586,City,107,Country 136599,City,107,Country 136608,City,107,Country 136658,City,107,Country 136661,City,107,Country 136672,City,107,Country 136680,City,107,Country 136695,City,107,Country 136703,City,107,Country 136718,City,107,Country 136756,City,107,Country 136757,City,107,Country 136766,City,107,Country 136767,City,107,Country 136775,City,107,Country 136782,City,107,Country 136787,City,107,Country 136809,City,107,Country 136816,City,107,Country 136818,City,107,Country 136819,City,107,Country 136825,City,107,Country 136832,City,107,Country 136847,City,107,Country 136862,City,107,Country 136875,City,107,Country 136876,City,107,Country 136879,City,107,Country 136881,City,107,Country 136956,City,107,Country 136960,City,107,Country 136959,City,107,Country 136966,City,107,Country 136968,City,107,Country 136971,City,107,Country 136972,City,107,Country 136987,City,107,Country 136994,City,107,Country 137004,City,107,Country 137009,City,107,Country 137015,City,107,Country 137018,City,107,Country 137019,City,107,Country 137021,City,107,Country 137026,City,107,Country 137029,City,107,Country 137031,City,107,Country 137041,City,107,Country 137044,City,107,Country 137063,City,107,Country 137065,City,107,Country 137077,City,107,Country 137079,City,107,Country 137089,City,107,Country 137096,City,107,Country 137129,City,107,Country 137132,City,107,Country 137174,City,107,Country 137146,City,107,Country 137150,City,107,Country 137152,City,107,Country 137161,City,107,Country 137185,City,107,Country 137196,City,107,Country 137201,City,107,Country 137213,City,107,Country 137257,City,107,Country 137261,City,107,Country 137288,City,107,Country 137300,City,107,Country 137305,City,107,Country 137309,City,107,Country 137324,City,107,Country 137327,City,107,Country 137328,City,107,Country 137352,City,107,Country 137400,City,107,Country 137401,City,107,Country 137475,City,107,Country 137482,City,107,Country 137499,City,107,Country 137503,City,107,Country 137508,City,107,Country 137517,City,107,Country 137528,City,107,Country 137566,City,107,Country 137595,City,107,Country 137596,City,107,Country 137600,City,107,Country 137613,City,107,Country 137620,City,107,Country 137638,City,107,Country 137639,City,107,Country 137642,City,107,Country 137693,City,107,Country 137709,City,107,Country 137710,City,107,Country 137726,City,107,Country 137743,City,107,Country 137746,City,107,Country 137864,City,107,Country 137902,City,107,Country 137944,City,107,Country 137954,City,107,Country 137955,City,107,Country 137979,City,107,Country 137981,City,107,Country 137982,City,107,Country 137985,City,107,Country 137993,City,107,Country 138018,City,107,Country 138114,City,107,Country 138155,City,107,Country 138179,City,107,Country 138209,City,107,Country 138212,City,107,Country 138290,City,107,Country 138325,City,107,Country 138326,City,107,Country 138340,City,107,Country 138345,City,107,Country 138348,City,107,Country 138372,City,107,Country 138411,City,107,Country 138412,City,107,Country 138414,City,107,Country 138444,City,107,Country 138470,City,107,Country 138545,City,107,Country 138567,City,107,Country 138573,City,107,Country 138579,City,107,Country 138595,City,107,Country 138611,City,107,Country 138620,City,107,Country 138629,City,107,Country 138630,City,107,Country 138638,City,107,Country 138688,City,107,Country 138689,City,107,Country 138701,City,107,Country 138705,City,107,Country 138718,City,107,Country 138722,City,107,Country 138723,City,107,Country 138733,City,107,Country 138734,City,107,Country 138752,City,107,Country 138753,City,107,Country 138758,City,107,Country 138764,City,107,Country 138816,City,107,Country 138817,City,107,Country 138820,City,107,Country 138928,City,107,Country 138942,City,107,Country 138957,City,107,Country 138965,City,107,Country 138967,City,107,Country 138968,City,107,Country 138988,City,107,Country 138995,City,107,Country 139056,City,107,Country 139084,City,107,Country 139086,City,107,Country 139096,City,107,Country 139122,City,107,Country 139129,City,107,Country 139131,City,107,Country 139140,City,107,Country 139159,City,107,Country 139162,City,107,Country 139227,City,107,Country 139228,City,107,Country 139258,City,107,Country 139313,City,107,Country 139314,City,107,Country 139355,City,107,Country 139364,City,107,Country 139368,City,107,Country 139396,City,107,Country 139397,City,107,Country 139404,City,107,Country 139405,City,107,Country 139406,City,107,Country 139415,City,107,Country 139476,City,107,Country 139478,City,107,Country 139492,City,107,Country 139497,City,107,Country 139499,City,107,Country 139516,City,107,Country 139532,City,107,Country 139546,City,107,Country 139662,City,107,Country 139670,City,107,Country 139679,City,107,Country 139683,City,107,Country 139690,City,107,Country 139694,City,107,Country 139697,City,107,Country 139706,City,107,Country 139728,City,107,Country 139749,City,107,Country 139759,City,107,Country 139801,City,107,Country 139827,City,107,Country 139847,City,107,Country 139870,City,107,Country 139871,City,107,Country 139878,City,107,Country 139882,City,107,Country 139944,City,107,Country 139946,City,107,Country 139947,City,107,Country 139976,City,107,Country 139972,City,107,Country 139985,City,107,Country 139996,City,107,Country 140051,City,107,Country 140050,City,107,Country 140053,City,107,Country 140076,City,107,Country 140077,City,107,Country 140081,City,107,Country 140101,City,107,Country 140127,City,107,Country 140141,City,107,Country 140161,City,107,Country 140167,City,107,Country 140202,City,107,Country 140207,City,107,Country 140216,City,107,Country 140276,City,107,Country 140313,City,107,Country 140343,City,107,Country 140385,City,107,Country 140369,City,107,Country 140395,City,107,Country 140396,City,107,Country 140420,City,107,Country 140421,City,107,Country 140422,City,107,Country 140426,City,107,Country 140429,City,107,Country 140432,City,107,Country 140443,City,107,Country 140444,City,107,Country 140448,City,107,Country 140449,City,107,Country 140476,City,107,Country 140487,City,107,Country 140494,City,107,Country 140529,City,107,Country 140531,City,107,Country 140532,City,107,Country 140549,City,107,Country 140558,City,107,Country 140587,City,107,Country 140606,City,107,Country 140618,City,107,Country 140631,City,107,Country 140645,City,107,Country 140679,City,107,Country 140680,City,107,Country 140697,City,107,Country 140713,City,107,Country 140714,City,107,Country 140781,City,107,Country 140782,City,107,Country 140784,City,107,Country 140797,City,107,Country 140836,City,107,Country 140850,City,107,Country 140861,City,107,Country 140883,City,107,Country 140891,City,107,Country 140901,City,107,Country 140919,City,107,Country 140968,City,107,Country 140979,City,107,Country 141020,City,107,Country 141048,City,107,Country 141050,City,107,Country 141088,City,107,Country 141090,City,107,Country 141094,City,107,Country 58208,City,107,Country 58214,City,107,Country 58213,City,107,Country 58245,City,107,Country 58253,City,107,Country 58265,City,107,Country 58281,City,107,Country 58288,City,107,Country 58303,City,107,Country 58311,City,107,Country 58321,City,107,Country 58332,City,107,Country 58339,City,107,Country 58345,City,107,Country 58357,City,107,Country 58395,City,107,Country 58400,City,107,Country 58418,City,107,Country 58426,City,107,Country 58444,City,107,Country 58460,City,107,Country 58475,City,107,Country 58488,City,107,Country 58498,City,107,Country 58506,City,107,Country 58515,City,107,Country 58536,City,107,Country 58537,City,107,Country 58545,City,107,Country 58553,City,107,Country 58570,City,107,Country 58571,City,107,Country 58568,City,107,Country 58572,City,107,Country 58574,City,107,Country 58576,City,107,Country 58588,City,107,Country 58590,City,107,Country 58596,City,107,Country 58611,City,107,Country 58616,City,107,Country 58624,City,107,Country 58626,City,107,Country 58627,City,107,Country 58628,City,107,Country 58629,City,107,Country 58662,City,107,Country 58670,City,107,Country 58706,City,107,Country 58707,City,107,Country 58769,City,107,Country 58770,City,107,Country 58788,City,107,Country 58795,City,107,Country 58797,City,107,Country 58799,City,107,Country 58807,City,107,Country 58816,City,107,Country 58817,City,107,Country 58832,City,107,Country 58863,City,107,Country 58871,City,107,Country 58873,City,107,Country 58885,City,107,Country 58917,City,107,Country 58918,City,107,Country 58922,City,107,Country 58954,City,107,Country 58956,City,107,Country 58962,City,107,Country 58981,City,107,Country 58989,City,107,Country 58999,City,107,Country 59017,City,107,Country 59014,City,107,Country 59019,City,107,Country 59030,City,107,Country 59034,City,107,Country 59035,City,107,Country 59062,City,107,Country 59065,City,107,Country 59076,City,107,Country 59086,City,107,Country 59111,City,107,Country 59114,City,107,Country 59122,City,107,Country 59172,City,107,Country 59196,City,107,Country 59197,City,107,Country 59211,City,107,Country 59213,City,107,Country 59215,City,107,Country 59228,City,107,Country 59245,City,107,Country 59298,City,107,Country 59302,City,107,Country 59309,City,107,Country 59325,City,107,Country 59339,City,107,Country 59358,City,107,Country 59370,City,107,Country 59477,City,107,Country 59490,City,107,Country 59495,City,107,Country 59503,City,107,Country 59509,City,107,Country 59514,City,107,Country 59515,City,107,Country 59517,City,107,Country 59535,City,107,Country 59556,City,107,Country 59631,City,107,Country 59661,City,107,Country 59706,City,107,Country 59707,City,107,Country 59717,City,107,Country 59738,City,107,Country 59743,City,107,Country 59759,City,107,Country 59762,City,107,Country 59775,City,107,Country 59791,City,107,Country 59793,City,107,Country 59822,City,107,Country 59854,City,107,Country 59861,City,107,Country 59871,City,107,Country 59869,City,107,Country 59875,City,107,Country 59908,City,107,Country 59914,City,107,Country 59935,City,107,Country 59952,City,107,Country 59963,City,107,Country 59966,City,107,Country 59976,City,107,Country 59981,City,107,Country 59991,City,107,Country 60011,City,107,Country 60013,City,107,Country 60020,City,107,Country 60021,City,107,Country 60033,City,107,Country 60035,City,107,Country 60038,City,107,Country 60042,City,107,Country 60052,City,107,Country 60054,City,107,Country 60056,City,107,Country 60057,City,107,Country 60060,City,107,Country 60064,City,107,Country 60062,City,107,Country 60076,City,107,Country 60078,City,107,Country 60100,City,107,Country 60106,City,107,Country 60113,City,107,Country 60116,City,107,Country 60125,City,107,Country 60130,City,107,Country 60138,City,107,Country 60142,City,107,Country 60139,City,107,Country 60158,City,107,Country 60172,City,107,Country 60187,City,107,Country 60189,City,107,Country 60179,City,107,Country 60211,City,107,Country 60212,City,107,Country 60213,City,107,Country 60229,City,107,Country 60232,City,107,Country 60237,City,107,Country 60246,City,107,Country 60251,City,107,Country 60258,City,107,Country 60271,City,107,Country 60320,City,107,Country 60325,City,107,Country 60327,City,107,Country 60340,City,107,Country 60348,City,107,Country 60350,City,107,Country 60352,City,107,Country 60353,City,107,Country 60354,City,107,Country 60355,City,107,Country 60356,City,107,Country 60362,City,107,Country 60363,City,107,Country 60367,City,107,Country 60376,City,107,Country 60380,City,107,Country 60383,City,107,Country 60388,City,107,Country 60389,City,107,Country 60390,City,107,Country 60392,City,107,Country 60394,City,107,Country 60428,City,107,Country 60445,City,107,Country 60449,City,107,Country 60455,City,107,Country 60457,City,107,Country 60459,City,107,Country 60464,City,107,Country 60479,City,107,Country 60482,City,107,Country 60488,City,107,Country 60493,City,107,Country 60519,City,107,Country 60528,City,107,Country 60532,City,107,Country 60538,City,107,Country 60554,City,107,Country 60567,City,107,Country 60571,City,107,Country 60586,City,107,Country 60588,City,107,Country 60602,City,107,Country 60604,City,107,Country 60610,City,107,Country 60613,City,107,Country 60614,City,107,Country 60631,City,107,Country 60658,City,107,Country 60678,City,107,Country 60722,City,107,Country 60742,City,107,Country 60764,City,107,Country 60768,City,107,Country 60778,City,107,Country 60788,City,107,Country 60789,City,107,Country 60836,City,107,Country 60839,City,107,Country 60872,City,107,Country 60892,City,107,Country 60921,City,107,Country 60923,City,107,Country 60929,City,107,Country 60950,City,107,Country 60966,City,107,Country 60990,City,107,Country 60993,City,107,Country 60999,City,107,Country 61048,City,107,Country 61062,City,107,Country 61063,City,107,Country 61078,City,107,Country 61096,City,107,Country 61105,City,107,Country 61110,City,107,Country 61120,City,107,Country 61174,City,107,Country 61175,City,107,Country 61199,City,107,Country 61201,City,107,Country 61205,City,107,Country 61216,City,107,Country 61255,City,107,Country 61269,City,107,Country 61292,City,107,Country 61315,City,107,Country 61320,City,107,Country 61322,City,107,Country 61324,City,107,Country 61326,City,107,Country 61341,City,107,Country 61347,City,107,Country 61353,City,107,Country 61371,City,107,Country 61377,City,107,Country 61357,City,107,Country 61381,City,107,Country 61391,City,107,Country 61408,City,107,Country 61415,City,107,Country 61432,City,107,Country 61464,City,107,Country 61482,City,107,Country 61484,City,107,Country 61493,City,107,Country 61503,City,107,Country 61564,City,107,Country 61565,City,107,Country 61641,City,107,Country 61683,City,107,Country 61684,City,107,Country 61695,City,107,Country 61698,City,107,Country 61716,City,107,Country 61724,City,107,Country 61745,City,107,Country 61824,City,107,Country 61908,City,107,Country 61912,City,107,Country 61917,City,107,Country 61935,City,107,Country 62040,City,107,Country 62004,City,107,Country 62081,City,107,Country 62086,City,107,Country 62108,City,107,Country 62129,City,107,Country 62172,City,107,Country 62188,City,107,Country 62189,City,107,Country 62206,City,107,Country 62221,City,107,Country 62224,City,107,Country 62272,City,107,Country 62286,City,107,Country 62288,City,107,Country 135297,City,107,Country 135359,City,107,Country 135364,City,107,Country 135377,City,107,Country 135403,City,107,Country 135428,City,107,Country 135437,City,107,Country 135529,City,107,Country 135563,City,107,Country 135592,City,107,Country 135593,City,107,Country 135594,City,107,Country 135745,City,107,Country 135746,City,107,Country 135748,City,107,Country 135750,City,107,Country 135753,City,107,Country 135759,City,107,Country 135773,City,107,Country 135780,City,107,Country 135830,City,107,Country 135837,City,107,Country 135840,City,107,Country 135856,City,107,Country 135889,City,107,Country 135890,City,107,Country 135904,City,107,Country 135915,City,107,Country 135920,City,107,Country 135940,City,107,Country 135978,City,107,Country 135981,City,107,Country 135996,City,107,Country 136000,City,107,Country 136006,City,107,Country 136014,City,107,Country 136018,City,107,Country 136038,City,107,Country 136085,City,107,Country 136107,City,107,Country 136122,City,107,Country 136129,City,107,Country 136144,City,107,Country 136150,City,107,Country 136151,City,107,Country 136152,City,107,Country 136165,City,107,Country 136192,City,107,Country 136193,City,107,Country 136211,City,107,Country 136212,City,107,Country 136234,City,107,Country 136244,City,107,Country 136313,City,107,Country 136341,City,107,Country 136381,City,107,Country 136393,City,107,Country 136419,City,107,Country 136429,City,107,Country 138222,City,107,Country 136447,City,107,Country 136463,City,107,Country 136454,City,107,Country 136455,City,107,Country 136499,City,107,Country 136513,City,107,Country 136514,City,107,Country 136521,City,107,Country 136524,City,107,Country 136525,City,107,Country 136588,City,107,Country 136605,City,107,Country 136611,City,107,Country 136657,City,107,Country 136681,City,107,Country 136685,City,107,Country 136755,City,107,Country 136803,City,107,Country 136906,City,107,Country 136913,City,107,Country 136917,City,107,Country 136973,City,107,Country 136981,City,107,Country 136990,City,107,Country 136991,City,107,Country 137070,City,107,Country 137078,City,107,Country 137131,City,107,Country 137162,City,107,Country 137167,City,107,Country 137168,City,107,Country 137142,City,107,Country 137144,City,107,Country 137151,City,107,Country 137155,City,107,Country 137189,City,107,Country 137197,City,107,Country 137207,City,107,Country 137222,City,107,Country 137229,City,107,Country 137256,City,107,Country 137279,City,107,Country 137280,City,107,Country 137293,City,107,Country 137331,City,107,Country 137330,City,107,Country 137333,City,107,Country 137351,City,107,Country 137378,City,107,Country 137396,City,107,Country 137429,City,107,Country 137436,City,107,Country 137442,City,107,Country 137497,City,107,Country 137518,City,107,Country 137549,City,107,Country 137591,City,107,Country 137611,City,107,Country 137612,City,107,Country 137704,City,107,Country 137803,City,107,Country 137806,City,107,Country 137823,City,107,Country 137828,City,107,Country 137831,City,107,Country 137832,City,107,Country 137851,City,107,Country 137854,City,107,Country 137875,City,107,Country 137918,City,107,Country 137926,City,107,Country 137934,City,107,Country 137948,City,107,Country 137952,City,107,Country 137960,City,107,Country 137971,City,107,Country 137974,City,107,Country 137988,City,107,Country 137997,City,107,Country 138011,City,107,Country 138032,City,107,Country 138037,City,107,Country 138038,City,107,Country 138039,City,107,Country 138060,City,107,Country 138111,City,107,Country 138144,City,107,Country 138152,City,107,Country 138213,City,107,Country 138235,City,107,Country 138275,City,107,Country 138316,City,107,Country 138322,City,107,Country 138324,City,107,Country 138392,City,107,Country 138403,City,107,Country 138429,City,107,Country 138448,City,107,Country 138466,City,107,Country 138468,City,107,Country 138469,City,107,Country 138472,City,107,Country 138489,City,107,Country 138496,City,107,Country 138507,City,107,Country 138535,City,107,Country 138539,City,107,Country 138542,City,107,Country 138547,City,107,Country 138548,City,107,Country 138575,City,107,Country 138577,City,107,Country 138597,City,107,Country 138600,City,107,Country 138613,City,107,Country 138619,City,107,Country 138632,City,107,Country 138631,City,107,Country 138637,City,107,Country 138640,City,107,Country 138642,City,107,Country 138644,City,107,Country 138660,City,107,Country 138668,City,107,Country 138679,City,107,Country 138680,City,107,Country 138704,City,107,Country 138716,City,107,Country 138720,City,107,Country 138761,City,107,Country 138778,City,107,Country 138779,City,107,Country 138786,City,107,Country 138789,City,107,Country 138799,City,107,Country 138814,City,107,Country 138833,City,107,Country 138866,City,107,Country 138867,City,107,Country 138886,City,107,Country 138892,City,107,Country 139006,City,107,Country 139009,City,107,Country 139039,City,107,Country 139041,City,107,Country 139044,City,107,Country 139057,City,107,Country 139060,City,107,Country 139061,City,107,Country 139105,City,107,Country 139106,City,107,Country 139114,City,107,Country 139148,City,107,Country 139169,City,107,Country 139180,City,107,Country 139199,City,107,Country 139279,City,107,Country 139302,City,107,Country 139328,City,107,Country 139339,City,107,Country 139358,City,107,Country 139414,City,107,Country 139453,City,107,Country 139468,City,107,Country 139502,City,107,Country 139503,City,107,Country 139508,City,107,Country 139512,City,107,Country 139520,City,107,Country 139556,City,107,Country 139576,City,107,Country 139589,City,107,Country 139592,City,107,Country 139596,City,107,Country 139644,City,107,Country 139648,City,107,Country 139684,City,107,Country 139709,City,107,Country 139742,City,107,Country 139755,City,107,Country 139814,City,107,Country 139819,City,107,Country 139829,City,107,Country 139894,City,107,Country 139873,City,107,Country 139917,City,107,Country 139943,City,107,Country 139961,City,107,Country 139969,City,107,Country 139970,City,107,Country 139971,City,107,Country 139983,City,107,Country 140019,City,107,Country 140020,City,107,Country 140025,City,107,Country 140037,City,107,Country 140078,City,107,Country 140095,City,107,Country 140112,City,107,Country 140114,City,107,Country 140119,City,107,Country 140121,City,107,Country 140133,City,107,Country 140135,City,107,Country 140136,City,107,Country 140144,City,107,Country 140158,City,107,Country 140169,City,107,Country 140174,City,107,Country 140178,City,107,Country 140188,City,107,Country 140190,City,107,Country 140217,City,107,Country 140223,City,107,Country 140267,City,107,Country 140272,City,107,Country 140284,City,107,Country 140316,City,107,Country 140327,City,107,Country 140356,City,107,Country 140370,City,107,Country 140407,City,107,Country 140410,City,107,Country 140416,City,107,Country 140425,City,107,Country 140439,City,107,Country 140441,City,107,Country 140457,City,107,Country 140516,City,107,Country 140538,City,107,Country 140539,City,107,Country 140556,City,107,Country 140562,City,107,Country 140561,City,107,Country 140596,City,107,Country 140605,City,107,Country 140607,City,107,Country 140612,City,107,Country 140683,City,107,Country 140755,City,107,Country 140758,City,107,Country 140773,City,107,Country 140787,City,107,Country 140802,City,107,Country 140818,City,107,Country 140829,City,107,Country 140837,City,107,Country 141017,City,107,Country 141031,City,107,Country 141035,City,107,Country 141037,City,107,Country 141053,City,107,Country 141065,City,107,Country 141064,City,107,Country 141091,City,107,Country 58218,City,107,Country 58223,City,107,Country 58279,City,107,Country 58307,City,107,Country 58365,City,107,Country 58371,City,107,Country 58393,City,107,Country 58405,City,107,Country 58502,City,107,Country 58525,City,107,Country 58533,City,107,Country 58550,City,107,Country 58610,City,107,Country 58650,City,107,Country 58658,City,107,Country 58668,City,107,Country 58671,City,107,Country 58699,City,107,Country 58710,City,107,Country 58720,City,107,Country 58724,City,107,Country 58745,City,107,Country 58751,City,107,Country 58760,City,107,Country 58785,City,107,Country 58791,City,107,Country 58852,City,107,Country 58853,City,107,Country 58846,City,107,Country 58850,City,107,Country 58870,City,107,Country 58872,City,107,Country 58875,City,107,Country 58884,City,107,Country 58909,City,107,Country 58911,City,107,Country 58912,City,107,Country 58919,City,107,Country 58920,City,107,Country 58927,City,107,Country 58930,City,107,Country 58931,City,107,Country 58947,City,107,Country 58970,City,107,Country 58973,City,107,Country 59022,City,107,Country 59024,City,107,Country 59027,City,107,Country 59043,City,107,Country 59057,City,107,Country 59075,City,107,Country 59077,City,107,Country 59090,City,107,Country 59130,City,107,Country 59132,City,107,Country 59150,City,107,Country 59156,City,107,Country 59161,City,107,Country 59166,City,107,Country 59168,City,107,Country 59170,City,107,Country 59199,City,107,Country 59201,City,107,Country 59205,City,107,Country 59217,City,107,Country 59226,City,107,Country 59229,City,107,Country 59236,City,107,Country 59273,City,107,Country 59274,City,107,Country 59291,City,107,Country 59296,City,107,Country 59299,City,107,Country 59321,City,107,Country 59322,City,107,Country 59331,City,107,Country 59355,City,107,Country 59366,City,107,Country 59367,City,107,Country 59385,City,107,Country 59387,City,107,Country 59393,City,107,Country 59394,City,107,Country 59433,City,107,Country 59437,City,107,Country 59446,City,107,Country 59476,City,107,Country 59492,City,107,Country 59569,City,107,Country 59607,City,107,Country 59609,City,107,Country 59610,City,107,Country 59656,City,107,Country 59664,City,107,Country 59671,City,107,Country 59678,City,107,Country 59692,City,107,Country 59704,City,107,Country 59737,City,107,Country 59739,City,107,Country 59741,City,107,Country 59780,City,107,Country 59783,City,107,Country 59787,City,107,Country 59797,City,107,Country 59818,City,107,Country 59819,City,107,Country 59830,City,107,Country 59837,City,107,Country 59853,City,107,Country 59865,City,107,Country 59874,City,107,Country 59884,City,107,Country 59912,City,107,Country 59929,City,107,Country 59973,City,107,Country 59960,City,107,Country 59999,City,107,Country 60000,City,107,Country 60003,City,107,Country 60009,City,107,Country 60027,City,107,Country 60028,City,107,Country 60068,City,107,Country 60082,City,107,Country 60088,City,107,Country 60094,City,107,Country 60111,City,107,Country 60109,City,107,Country 60122,City,107,Country 60120,City,107,Country 60146,City,107,Country 60150,City,107,Country 60169,City,107,Country 60176,City,107,Country 60197,City,107,Country 60198,City,107,Country 60178,City,107,Country 60204,City,107,Country 60205,City,107,Country 60210,City,107,Country 60215,City,107,Country 60240,City,107,Country 60260,City,107,Country 60268,City,107,Country 60274,City,107,Country 60315,City,107,Country 60316,City,107,Country 60326,City,107,Country 60328,City,107,Country 60330,City,107,Country 60342,City,107,Country 60349,City,107,Country 60382,City,107,Country 60404,City,107,Country 60427,City,107,Country 60441,City,107,Country 60460,City,107,Country 60468,City,107,Country 60486,City,107,Country 60491,City,107,Country 60499,City,107,Country 60503,City,107,Country 60507,City,107,Country 60527,City,107,Country 60549,City,107,Country 60558,City,107,Country 60572,City,107,Country 60577,City,107,Country 60584,City,107,Country 60589,City,107,Country 60590,City,107,Country 60591,City,107,Country 60593,City,107,Country 60616,City,107,Country 60668,City,107,Country 60675,City,107,Country 60757,City,107,Country 60763,City,107,Country 60771,City,107,Country 60798,City,107,Country 60802,City,107,Country 60880,City,107,Country 60897,City,107,Country 60902,City,107,Country 60905,City,107,Country 60918,City,107,Country 60919,City,107,Country 60920,City,107,Country 60946,City,107,Country 60948,City,107,Country 60951,City,107,Country 61010,City,107,Country 61054,City,107,Country 61151,City,107,Country 61160,City,107,Country 61221,City,107,Country 61290,City,107,Country 61291,City,107,Country 61338,City,107,Country 61397,City,107,Country 61406,City,107,Country 61422,City,107,Country 61443,City,107,Country 61453,City,107,Country 61456,City,107,Country 61461,City,107,Country 61463,City,107,Country 61470,City,107,Country 61496,City,107,Country 61629,City,107,Country 61762,City,107,Country 61774,City,107,Country 61794,City,107,Country 61820,City,107,Country 61827,City,107,Country 61846,City,107,Country 61847,City,107,Country 61854,City,107,Country 61873,City,107,Country 61891,City,107,Country 61896,City,107,Country 61904,City,107,Country 61920,City,107,Country 61939,City,107,Country 61940,City,107,Country 61943,City,107,Country 61961,City,107,Country 61973,City,107,Country 61998,City,107,Country 62005,City,107,Country 62030,City,107,Country 62089,City,107,Country 62132,City,107,Country 62202,City,107,Country 62217,City,107,Country 62249,City,107,Country 62257,City,107,Country 62259,City,107,Country 62264,City,107,Country 62267,City,107,Country 135327,City,107,Country 135459,City,107,Country 135474,City,107,Country 135488,City,107,Country 135493,City,107,Country 135545,City,107,Country 135552,City,107,Country 135641,City,107,Country 135642,City,107,Country 135650,City,107,Country 135682,City,107,Country 135691,City,107,Country 135705,City,107,Country 135706,City,107,Country 135721,City,107,Country 135752,City,107,Country 135754,City,107,Country 135836,City,107,Country 135877,City,107,Country 135887,City,107,Country 135888,City,107,Country 135923,City,107,Country 136001,City,107,Country 136044,City,107,Country 136147,City,107,Country 136316,City,107,Country 136365,City,107,Country 136391,City,107,Country 136399,City,107,Country 136441,City,107,Country 136591,City,107,Country 136655,City,107,Country 136664,City,107,Country 136665,City,107,Country 136710,City,107,Country 136824,City,107,Country 136887,City,107,Country 137034,City,107,Country 137093,City,107,Country 137366,City,107,Country 137367,City,107,Country 137426,City,107,Country 137428,City,107,Country 137439,City,107,Country 137452,City,107,Country 137527,City,107,Country 137594,City,107,Country 137658,City,107,Country 137679,City,107,Country 137680,City,107,Country 137690,City,107,Country 137727,City,107,Country 137782,City,107,Country 137807,City,107,Country 137808,City,107,Country 137814,City,107,Country 137837,City,107,Country 137906,City,107,Country 137907,City,107,Country 137908,City,107,Country 137930,City,107,Country 137938,City,107,Country 138001,City,107,Country 138003,City,107,Country 138021,City,107,Country 138034,City,107,Country 138077,City,107,Country 138123,City,107,Country 138266,City,107,Country 138274,City,107,Country 138278,City,107,Country 138282,City,107,Country 138284,City,107,Country 138291,City,107,Country 138341,City,107,Country 138359,City,107,Country 138376,City,107,Country 138399,City,107,Country 138405,City,107,Country 138432,City,107,Country 138452,City,107,Country 138550,City,107,Country 138554,City,107,Country 138559,City,107,Country 138574,City,107,Country 138628,City,107,Country 138653,City,107,Country 138654,City,107,Country 138655,City,107,Country 138737,City,107,Country 138893,City,107,Country 139016,City,107,Country 139032,City,107,Country 139050,City,107,Country 139051,City,107,Country 139070,City,107,Country 139188,City,107,Country 139236,City,107,Country 139392,City,107,Country 139395,City,107,Country 139407,City,107,Country 139474,City,107,Country 139475,City,107,Country 139511,City,107,Country 139513,City,107,Country 139674,City,107,Country 139738,City,107,Country 139753,City,107,Country 139757,City,107,Country 139800,City,107,Country 139812,City,107,Country 139822,City,107,Country 139868,City,107,Country 139924,City,107,Country 139930,City,107,Country 140018,City,107,Country 140022,City,107,Country 140027,City,107,Country 140082,City,107,Country 140089,City,107,Country 140196,City,107,Country 140195,City,107,Country 140204,City,107,Country 140279,City,107,Country 140500,City,107,Country 140515,City,107,Country 140600,City,107,Country 140637,City,107,Country 140640,City,107,Country 140642,City,107,Country 140651,City,107,Country 140677,City,107,Country 140707,City,107,Country 140770,City,107,Country 140942,City,107,Country 140973,City,107,Country 141013,City,107,Country 141056,City,107,Country 58210,City,107,Country 58235,City,107,Country 58255,City,107,Country 58267,City,107,Country 58269,City,107,Country 58322,City,107,Country 58323,City,107,Country 58334,City,107,Country 58353,City,107,Country 58360,City,107,Country 58415,City,107,Country 58440,City,107,Country 58599,City,107,Country 58600,City,107,Country 58682,City,107,Country 58743,City,107,Country 58783,City,107,Country 58862,City,107,Country 58905,City,107,Country 58906,City,107,Country 58910,City,107,Country 58972,City,107,Country 58992,City,107,Country 58994,City,107,Country 59016,City,107,Country 59025,City,107,Country 59029,City,107,Country 59037,City,107,Country 59041,City,107,Country 59053,City,107,Country 59060,City,107,Country 59063,City,107,Country 59092,City,107,Country 59135,City,107,Country 59163,City,107,Country 59182,City,107,Country 59183,City,107,Country 59198,City,107,Country 59202,City,107,Country 59277,City,107,Country 59294,City,107,Country 59297,City,107,Country 59300,City,107,Country 59306,City,107,Country 59307,City,107,Country 59327,City,107,Country 59336,City,107,Country 59380,City,107,Country 59435,City,107,Country 59438,City,107,Country 59547,City,107,Country 59580,City,107,Country 59596,City,107,Country 59598,City,107,Country 59623,City,107,Country 59677,City,107,Country 59693,City,107,Country 59720,City,107,Country 59725,City,107,Country 59852,City,107,Country 59889,City,107,Country 59923,City,107,Country 59941,City,107,Country 59967,City,107,Country 59971,City,107,Country 59978,City,107,Country 59992,City,107,Country 60029,City,107,Country 60041,City,107,Country 60080,City,107,Country 60165,City,107,Country 60188,City,107,Country 60218,City,107,Country 60257,City,107,Country 60280,City,107,Country 60281,City,107,Country 60283,City,107,Country 60425,City,107,Country 60480,City,107,Country 60537,City,107,Country 60580,City,107,Country 60596,City,107,Country 60597,City,107,Country 60680,City,107,Country 60734,City,107,Country 60800,City,107,Country 60821,City,107,Country 60831,City,107,Country 60881,City,107,Country 60975,City,107,Country 61011,City,107,Country 61047,City,107,Country 61091,City,107,Country 61134,City,107,Country 61150,City,107,Country 61156,City,107,Country 61158,City,107,Country 61166,City,107,Country 61170,City,107,Country 61178,City,107,Country 61215,City,107,Country 61257,City,107,Country 61302,City,107,Country 61378,City,107,Country 61421,City,107,Country 61433,City,107,Country 61434,City,107,Country 61445,City,107,Country 61455,City,107,Country 61487,City,107,Country 61488,City,107,Country 61521,City,107,Country 61524,City,107,Country 61543,City,107,Country 61577,City,107,Country 61587,City,107,Country 61642,City,107,Country 61746,City,107,Country 61772,City,107,Country 61830,City,107,Country 61976,City,107,Country 62007,City,107,Country 62027,City,107,Country 62031,City,107,Country 62090,City,107,Country 62150,City,107,Country 62155,City,107,Country 62173,City,107,Country 62190,City,107,Country 62268,City,107,Country 62274,City,107,Country 62282,City,107,Country 62283,City,107,Country 135252,City,107,Country 135261,City,107,Country 135264,City,107,Country 135270,City,107,Country 135285,City,107,Country 135293,City,107,Country 135313,City,107,Country 135345,City,107,Country 135351,City,107,Country 135386,City,107,Country 135419,City,107,Country 135449,City,107,Country 135461,City,107,Country 135463,City,107,Country 135476,City,107,Country 135502,City,107,Country 135504,City,107,Country 135517,City,107,Country 135521,City,107,Country 135527,City,107,Country 135542,City,107,Country 135547,City,107,Country 135548,City,107,Country 135561,City,107,Country 135566,City,107,Country 135568,City,107,Country 135578,City,107,Country 135584,City,107,Country 135601,City,107,Country 135610,City,107,Country 135615,City,107,Country 135619,City,107,Country 135628,City,107,Country 135640,City,107,Country 135643,City,107,Country 135657,City,107,Country 135676,City,107,Country 135677,City,107,Country 135689,City,107,Country 135694,City,107,Country 135758,City,107,Country 135775,City,107,Country 135820,City,107,Country 135894,City,107,Country 135892,City,107,Country 135895,City,107,Country 135935,City,107,Country 135942,City,107,Country 135952,City,107,Country 135956,City,107,Country 136074,City,107,Country 136072,City,107,Country 136080,City,107,Country 136113,City,107,Country 136118,City,107,Country 136145,City,107,Country 136172,City,107,Country 136173,City,107,Country 136174,City,107,Country 136178,City,107,Country 136180,City,107,Country 136186,City,107,Country 136195,City,107,Country 136216,City,107,Country 136271,City,107,Country 136281,City,107,Country 136345,City,107,Country 136480,City,107,Country 136500,City,107,Country 136581,City,107,Country 136587,City,107,Country 136601,City,107,Country 136634,City,107,Country 136628,City,107,Country 136630,City,107,Country 136646,City,107,Country 136659,City,107,Country 136660,City,107,Country 136688,City,107,Country 136709,City,107,Country 136714,City,107,Country 136739,City,107,Country 136743,City,107,Country 136747,City,107,Country 136763,City,107,Country 136781,City,107,Country 136801,City,107,Country 136802,City,107,Country 136805,City,107,Country 136844,City,107,Country 136855,City,107,Country 136918,City,107,Country 136926,City,107,Country 136937,City,107,Country 136958,City,107,Country 136962,City,107,Country 136963,City,107,Country 136993,City,107,Country 137012,City,107,Country 137025,City,107,Country 137028,City,107,Country 137054,City,107,Country 137091,City,107,Country 137112,City,107,Country 137134,City,107,Country 137175,City,107,Country 137137,City,107,Country 137139,City,107,Country 137143,City,107,Country 137154,City,107,Country 137157,City,107,Country 137158,City,107,Country 137195,City,107,Country 137250,City,107,Country 137271,City,107,Country 137301,City,107,Country 137303,City,107,Country 137292,City,107,Country 137358,City,107,Country 137377,City,107,Country 137379,City,107,Country 137430,City,107,Country 137450,City,107,Country 137451,City,107,Country 137477,City,107,Country 137478,City,107,Country 137510,City,107,Country 137559,City,107,Country 137565,City,107,Country 137582,City,107,Country 137584,City,107,Country 137590,City,107,Country 137604,City,107,Country 137701,City,107,Country 137711,City,107,Country 137730,City,107,Country 137762,City,107,Country 137776,City,107,Country 137767,City,107,Country 137769,City,107,Country 137786,City,107,Country 137794,City,107,Country 137801,City,107,Country 137800,City,107,Country 137849,City,107,Country 137856,City,107,Country 137860,City,107,Country 137870,City,107,Country 137871,City,107,Country 137872,City,107,Country 137862,City,107,Country 137863,City,107,Country 137866,City,107,Country 137868,City,107,Country 137880,City,107,Country 137881,City,107,Country 137882,City,107,Country 137886,City,107,Country 137896,City,107,Country 137897,City,107,Country 137900,City,107,Country 137901,City,107,Country 137922,City,107,Country 137929,City,107,Country 137956,City,107,Country 137968,City,107,Country 137978,City,107,Country 137998,City,107,Country 138000,City,107,Country 138007,City,107,Country 138010,City,107,Country 138074,City,107,Country 138107,City,107,Country 138113,City,107,Country 138150,City,107,Country 138384,City,107,Country 138394,City,107,Country 138418,City,107,Country 138425,City,107,Country 138443,City,107,Country 138449,City,107,Country 138480,City,107,Country 138499,City,107,Country 138501,City,107,Country 138521,City,107,Country 138526,City,107,Country 138546,City,107,Country 138555,City,107,Country 138571,City,107,Country 138588,City,107,Country 138610,City,107,Country 138617,City,107,Country 138635,City,107,Country 138636,City,107,Country 138678,City,107,Country 138708,City,107,Country 138717,City,107,Country 138728,City,107,Country 138741,City,107,Country 138750,City,107,Country 138774,City,107,Country 138802,City,107,Country 138808,City,107,Country 138811,City,107,Country 138877,City,107,Country 138895,City,107,Country 138897,City,107,Country 138904,City,107,Country 138909,City,107,Country 138981,City,107,Country 138990,City,107,Country 138992,City,107,Country 139026,City,107,Country 139052,City,107,Country 139054,City,107,Country 139120,City,107,Country 139127,City,107,Country 139126,City,107,Country 139143,City,107,Country 139152,City,107,Country 139178,City,107,Country 139179,City,107,Country 139229,City,107,Country 139246,City,107,Country 139268,City,107,Country 139275,City,107,Country 139286,City,107,Country 139291,City,107,Country 139296,City,107,Country 139310,City,107,Country 139311,City,107,Country 139318,City,107,Country 139322,City,107,Country 139361,City,107,Country 139375,City,107,Country 139386,City,107,Country 139390,City,107,Country 139391,City,107,Country 139417,City,107,Country 139426,City,107,Country 139429,City,107,Country 139448,City,107,Country 139456,City,107,Country 139496,City,107,Country 139504,City,107,Country 139507,City,107,Country 139524,City,107,Country 139599,City,107,Country 139628,City,107,Country 139688,City,107,Country 139699,City,107,Country 139713,City,107,Country 139726,City,107,Country 139727,City,107,Country 139786,City,107,Country 139808,City,107,Country 139813,City,107,Country 139821,City,107,Country 139830,City,107,Country 139838,City,107,Country 139841,City,107,Country 139853,City,107,Country 139877,City,107,Country 139883,City,107,Country 139874,City,107,Country 139900,City,107,Country 139925,City,107,Country 140006,City,107,Country 140065,City,107,Country 140130,City,107,Country 140162,City,107,Country 140212,City,107,Country 140246,City,107,Country 140336,City,107,Country 140348,City,107,Country 140353,City,107,Country 140362,City,107,Country 140364,City,107,Country 140367,City,107,Country 140368,City,107,Country 140371,City,107,Country 140372,City,107,Country 140374,City,107,Country 140394,City,107,Country 140413,City,107,Country 140419,City,107,Country 140437,City,107,Country 140442,City,107,Country 140464,City,107,Country 140466,City,107,Country 140468,City,107,Country 140475,City,107,Country 140501,City,107,Country 140521,City,107,Country 140526,City,107,Country 140581,City,107,Country 140585,City,107,Country 140617,City,107,Country 140622,City,107,Country 140629,City,107,Country 140632,City,107,Country 140733,City,107,Country 140740,City,107,Country 140744,City,107,Country 140747,City,107,Country 140750,City,107,Country 140753,City,107,Country 140808,City,107,Country 140889,City,107,Country 140920,City,107,Country 140959,City,107,Country 140981,City,107,Country 140982,City,107,Country 140995,City,107,Country 141036,City,107,Country 58202,City,107,Country 58241,City,107,Country 58243,City,107,Country 58263,City,107,Country 58299,City,107,Country 58335,City,107,Country 58337,City,107,Country 58348,City,107,Country 58362,City,107,Country 58401,City,107,Country 58414,City,107,Country 58458,City,107,Country 58465,City,107,Country 58467,City,107,Country 58479,City,107,Country 58551,City,107,Country 58581,City,107,Country 58582,City,107,Country 58591,City,107,Country 58592,City,107,Country 58659,City,107,Country 58661,City,107,Country 58712,City,107,Country 58746,City,107,Country 58752,City,107,Country 58753,City,107,Country 58754,City,107,Country 58756,City,107,Country 58757,City,107,Country 58758,City,107,Country 58762,City,107,Country 58786,City,107,Country 58815,City,107,Country 58840,City,107,Country 58866,City,107,Country 58888,City,107,Country 58892,City,107,Country 58894,City,107,Country 58897,City,107,Country 58958,City,107,Country 58959,City,107,Country 58975,City,107,Country 59032,City,107,Country 59083,City,107,Country 59085,City,107,Country 59094,City,107,Country 59133,City,107,Country 59140,City,107,Country 59169,City,107,Country 59190,City,107,Country 59324,City,107,Country 59357,City,107,Country 59374,City,107,Country 59377,City,107,Country 59391,City,107,Country 59411,City,107,Country 59440,City,107,Country 59466,City,107,Country 59482,City,107,Country 59486,City,107,Country 59489,City,107,Country 59472,City,107,Country 59475,City,107,Country 59479,City,107,Country 59480,City,107,Country 59502,City,107,Country 59504,City,107,Country 59512,City,107,Country 59519,City,107,Country 59521,City,107,Country 59520,City,107,Country 59566,City,107,Country 59582,City,107,Country 59599,City,107,Country 59684,City,107,Country 59711,City,107,Country 59721,City,107,Country 59774,City,107,Country 59807,City,107,Country 59817,City,107,Country 59842,City,107,Country 59863,City,107,Country 59897,City,107,Country 59909,City,107,Country 59964,City,107,Country 59985,City,107,Country 60002,City,107,Country 60014,City,107,Country 60023,City,107,Country 60043,City,107,Country 60079,City,107,Country 60206,City,107,Country 60277,City,107,Country 60288,City,107,Country 60339,City,107,Country 60347,City,107,Country 60371,City,107,Country 60361,City,107,Country 60385,City,107,Country 60397,City,107,Country 60410,City,107,Country 60446,City,107,Country 60484,City,107,Country 60489,City,107,Country 60509,City,107,Country 60529,City,107,Country 60540,City,107,Country 60566,City,107,Country 60620,City,107,Country 60689,City,107,Country 60694,City,107,Country 60695,City,107,Country 60745,City,107,Country 60783,City,107,Country 60807,City,107,Country 60808,City,107,Country 60824,City,107,Country 60825,City,107,Country 60832,City,107,Country 60941,City,107,Country 60944,City,107,Country 60960,City,107,Country 60998,City,107,Country 61008,City,107,Country 61009,City,107,Country 61076,City,107,Country 61089,City,107,Country 61109,City,107,Country 61124,City,107,Country 61133,City,107,Country 61162,City,107,Country 61167,City,107,Country 61200,City,107,Country 61219,City,107,Country 61235,City,107,Country 61262,City,107,Country 61288,City,107,Country 61296,City,107,Country 61299,City,107,Country 61314,City,107,Country 61351,City,107,Country 61396,City,107,Country 61398,City,107,Country 61404,City,107,Country 61409,City,107,Country 61419,City,107,Country 61420,City,107,Country 61429,City,107,Country 61502,City,107,Country 61506,City,107,Country 61541,City,107,Country 61570,City,107,Country 61581,City,107,Country 61625,City,107,Country 61648,City,107,Country 61662,City,107,Country 61688,City,107,Country 61693,City,107,Country 61702,City,107,Country 61711,City,107,Country 61712,City,107,Country 61713,City,107,Country 61715,City,107,Country 61721,City,107,Country 61732,City,107,Country 61765,City,107,Country 61778,City,107,Country 61798,City,107,Country 61802,City,107,Country 61828,City,107,Country 61862,City,107,Country 61890,City,107,Country 61909,City,107,Country 61919,City,107,Country 61926,City,107,Country 61958,City,107,Country 61984,City,107,Country 62002,City,107,Country 62018,City,107,Country 62024,City,107,Country 62028,City,107,Country 62077,City,107,Country 62095,City,107,Country 62179,City,107,Country 62180,City,107,Country 62182,City,107,Country 62183,City,107,Country 62191,City,107,Country 62231,City,107,Country 62248,City,107,Country 135335,City,107,Country 135344,City,107,Country 135362,City,107,Country 135381,City,107,Country 135382,City,107,Country 135431,City,107,Country 135467,City,107,Country 135484,City,107,Country 135539,City,107,Country 135544,City,107,Country 135571,City,107,Country 135588,City,107,Country 135616,City,107,Country 135620,City,107,Country 135690,City,107,Country 135697,City,107,Country 135732,City,107,Country 135781,City,107,Country 135788,City,107,Country 135841,City,107,Country 135849,City,107,Country 135989,City,107,Country 136025,City,107,Country 136090,City,107,Country 136096,City,107,Country 136098,City,107,Country 136101,City,107,Country 136124,City,107,Country 136148,City,107,Country 136161,City,107,Country 136163,City,107,Country 136160,City,107,Country 136168,City,107,Country 136200,City,107,Country 136171,City,107,Country 136208,City,107,Country 136219,City,107,Country 136220,City,107,Country 136235,City,107,Country 136364,City,107,Country 136418,City,107,Country 136483,City,107,Country 136527,City,107,Country 136526,City,107,Country 136530,City,107,Country 136597,City,107,Country 136629,City,107,Country 136643,City,107,Country 136670,City,107,Country 136676,City,107,Country 136836,City,107,Country 136843,City,107,Country 136853,City,107,Country 136908,City,107,Country 136928,City,107,Country 136929,City,107,Country 137020,City,107,Country 137023,City,107,Country 137035,City,107,Country 137042,City,107,Country 137058,City,107,Country 137160,City,107,Country 137181,City,107,Country 137223,City,107,Country 137290,City,107,Country 137323,City,107,Country 137339,City,107,Country 137474,City,107,Country 137493,City,107,Country 137506,City,107,Country 137513,City,107,Country 137546,City,107,Country 137547,City,107,Country 137597,City,107,Country 137614,City,107,Country 137659,City,107,Country 137665,City,107,Country 137666,City,107,Country 137691,City,107,Country 137694,City,107,Country 137707,City,107,Country 137745,City,107,Country 137753,City,107,Country 137779,City,107,Country 137842,City,107,Country 137845,City,107,Country 137921,City,107,Country 137972,City,107,Country 138006,City,107,Country 138080,City,107,Country 138086,City,107,Country 138106,City,107,Country 138159,City,107,Country 138231,City,107,Country 138239,City,107,Country 138240,City,107,Country 138260,City,107,Country 138261,City,107,Country 138262,City,107,Country 138263,City,107,Country 138279,City,107,Country 138280,City,107,Country 138375,City,107,Country 138455,City,107,Country 138458,City,107,Country 138464,City,107,Country 138487,City,107,Country 138497,City,107,Country 138536,City,107,Country 138604,City,107,Country 138691,City,107,Country 138860,City,107,Country 138899,City,107,Country 138999,City,107,Country 139001,City,107,Country 139040,City,107,Country 139200,City,107,Country 139243,City,107,Country 139253,City,107,Country 139257,City,107,Country 139305,City,107,Country 139330,City,107,Country 139408,City,107,Country 139427,City,107,Country 139440,City,107,Country 139464,City,107,Country 139483,City,107,Country 139557,City,107,Country 139615,City,107,Country 139633,City,107,Country 139732,City,107,Country 139752,City,107,Country 139768,City,107,Country 139795,City,107,Country 139876,City,107,Country 139965,City,107,Country 139988,City,107,Country 140038,City,107,Country 140062,City,107,Country 140110,City,107,Country 140140,City,107,Country 140152,City,107,Country 140164,City,107,Country 140187,City,107,Country 140219,City,107,Country 140220,City,107,Country 140221,City,107,Country 140226,City,107,Country 140277,City,107,Country 140332,City,107,Country 140393,City,107,Country 140460,City,107,Country 140525,City,107,Country 140578,City,107,Country 140690,City,107,Country 140723,City,107,Country 140737,City,107,Country 140799,City,107,Country 140903,City,107,Country 140929,City,107,Country 140945,City,107,Country 140948,City,107,Country 140989,City,107,Country 141004,City,107,Country 141014,City,107,Country 141038,City,107,Country 141084,City,107,Country 58251,City,107,Country 58379,City,107,Country 58425,City,107,Country 58511,City,107,Country 58512,City,107,Country 58538,City,107,Country 58543,City,107,Country 58578,City,107,Country 58601,City,107,Country 58606,City,107,Country 58654,City,107,Country 58655,City,107,Country 58636,City,107,Country 58660,City,107,Country 58664,City,107,Country 58717,City,107,Country 58740,City,107,Country 58818,City,107,Country 58868,City,107,Country 58889,City,107,Country 58908,City,107,Country 58945,City,107,Country 58950,City,107,Country 59021,City,107,Country 59051,City,107,Country 59091,City,107,Country 59134,City,107,Country 59137,City,107,Country 59139,City,107,Country 59174,City,107,Country 59242,City,107,Country 59284,City,107,Country 59311,City,107,Country 59348,City,107,Country 59349,City,107,Country 59356,City,107,Country 59368,City,107,Country 59395,City,107,Country 59416,City,107,Country 59528,City,107,Country 59544,City,107,Country 59538,City,107,Country 59587,City,107,Country 59605,City,107,Country 59614,City,107,Country 59650,City,107,Country 59651,City,107,Country 59670,City,107,Country 59821,City,107,Country 59843,City,107,Country 59904,City,107,Country 59980,City,107,Country 60039,City,107,Country 60044,City,107,Country 60190,City,107,Country 60220,City,107,Country 60230,City,107,Country 60255,City,107,Country 60451,City,107,Country 60485,City,107,Country 60517,City,107,Country 60518,City,107,Country 60522,City,107,Country 60563,City,107,Country 60569,City,107,Country 60592,City,107,Country 60599,City,107,Country 60651,City,107,Country 60674,City,107,Country 60751,City,107,Country 60792,City,107,Country 60803,City,107,Country 60912,City,107,Country 60957,City,107,Country 61031,City,107,Country 61057,City,107,Country 61064,City,107,Country 61140,City,107,Country 61259,City,107,Country 61264,City,107,Country 61277,City,107,Country 61297,City,107,Country 61405,City,107,Country 61425,City,107,Country 61517,City,107,Country 61533,City,107,Country 61603,City,107,Country 61610,City,107,Country 61630,City,107,Country 61631,City,107,Country 61699,City,107,Country 61701,City,107,Country 61703,City,107,Country 61708,City,107,Country 61749,City,107,Country 61764,City,107,Country 61770,City,107,Country 61779,City,107,Country 61813,City,107,Country 61825,City,107,Country 61856,City,107,Country 61884,City,107,Country 61895,City,107,Country 61897,City,107,Country 61997,City,107,Country 62055,City,107,Country 62105,City,107,Country 62198,City,107,Country 62263,City,107,Country 62279,City,107,Country 135236,City,107,Country 135237,City,107,Country 135241,City,107,Country 135243,City,107,Country 135266,City,107,Country 135268,City,107,Country 135269,City,107,Country 135288,City,107,Country 135289,City,107,Country 135291,City,107,Country 135308,City,107,Country 135311,City,107,Country 135314,City,107,Country 135316,City,107,Country 135322,City,107,Country 135336,City,107,Country 135340,City,107,Country 135349,City,107,Country 135352,City,107,Country 135356,City,107,Country 135357,City,107,Country 135361,City,107,Country 135367,City,107,Country 135373,City,107,Country 135375,City,107,Country 135379,City,107,Country 135380,City,107,Country 135383,City,107,Country 135384,City,107,Country 135385,City,107,Country 135388,City,107,Country 135401,City,107,Country 135405,City,107,Country 135423,City,107,Country 135420,City,107,Country 135421,City,107,Country 135429,City,107,Country 135450,City,107,Country 135452,City,107,Country 135464,City,107,Country 135482,City,107,Country 135495,City,107,Country 135496,City,107,Country 135499,City,107,Country 135505,City,107,Country 135507,City,107,Country 135512,City,107,Country 135524,City,107,Country 135535,City,107,Country 135538,City,107,Country 135562,City,107,Country 135569,City,107,Country 135573,City,107,Country 135574,City,107,Country 135579,City,107,Country 135580,City,107,Country 135581,City,107,Country 135586,City,107,Country 135589,City,107,Country 135591,City,107,Country 135609,City,107,Country 135612,City,107,Country 135625,City,107,Country 135636,City,107,Country 135644,City,107,Country 135647,City,107,Country 135661,City,107,Country 135664,City,107,Country 135667,City,107,Country 135692,City,107,Country 135701,City,107,Country 135707,City,107,Country 135719,City,107,Country 135720,City,107,Country 135722,City,107,Country 135723,City,107,Country 135725,City,107,Country 135726,City,107,Country 135727,City,107,Country 135731,City,107,Country 135736,City,107,Country 135740,City,107,Country 135751,City,107,Country 135756,City,107,Country 135767,City,107,Country 135768,City,107,Country 135770,City,107,Country 135776,City,107,Country 135789,City,107,Country 135809,City,107,Country 135813,City,107,Country 135814,City,107,Country 135824,City,107,Country 135825,City,107,Country 135829,City,107,Country 135839,City,107,Country 135844,City,107,Country 135850,City,107,Country 135852,City,107,Country 135855,City,107,Country 135859,City,107,Country 135861,City,107,Country 135873,City,107,Country 135874,City,107,Country 135875,City,107,Country 135876,City,107,Country 135879,City,107,Country 135884,City,107,Country 135886,City,107,Country 135891,City,107,Country 135903,City,107,Country 135902,City,107,Country 135906,City,107,Country 135910,City,107,Country 135917,City,107,Country 135918,City,107,Country 135919,City,107,Country 135921,City,107,Country 135929,City,107,Country 135932,City,107,Country 135936,City,107,Country 135937,City,107,Country 135943,City,107,Country 135950,City,107,Country 135970,City,107,Country 135971,City,107,Country 135979,City,107,Country 135980,City,107,Country 135983,City,107,Country 135984,City,107,Country 135985,City,107,Country 135987,City,107,Country 135991,City,107,Country 135993,City,107,Country 135994,City,107,Country 136003,City,107,Country 136007,City,107,Country 136008,City,107,Country 136009,City,107,Country 136010,City,107,Country 136011,City,107,Country 136012,City,107,Country 136015,City,107,Country 136016,City,107,Country 136019,City,107,Country 136020,City,107,Country 136032,City,107,Country 136033,City,107,Country 136034,City,107,Country 136036,City,107,Country 136047,City,107,Country 136051,City,107,Country 136052,City,107,Country 136056,City,107,Country 136066,City,107,Country 136077,City,107,Country 136079,City,107,Country 136081,City,107,Country 136082,City,107,Country 136092,City,107,Country 136093,City,107,Country 136095,City,107,Country 136094,City,107,Country 136103,City,107,Country 136104,City,107,Country 136105,City,107,Country 136114,City,107,Country 136125,City,107,Country 136126,City,107,Country 136130,City,107,Country 136131,City,107,Country 136136,City,107,Country 136149,City,107,Country 136154,City,107,Country 136159,City,107,Country 136201,City,107,Country 136179,City,107,Country 136182,City,107,Country 136183,City,107,Country 136187,City,107,Country 136202,City,107,Country 136204,City,107,Country 136214,City,107,Country 136217,City,107,Country 136221,City,107,Country 136222,City,107,Country 136223,City,107,Country 136224,City,107,Country 136238,City,107,Country 136242,City,107,Country 136252,City,107,Country 136253,City,107,Country 136254,City,107,Country 136258,City,107,Country 136259,City,107,Country 136261,City,107,Country 136268,City,107,Country 136270,City,107,Country 136273,City,107,Country 136277,City,107,Country 136279,City,107,Country 136287,City,107,Country 136289,City,107,Country 136290,City,107,Country 136291,City,107,Country 136293,City,107,Country 136295,City,107,Country 136298,City,107,Country 136299,City,107,Country 136300,City,107,Country 136301,City,107,Country 136302,City,107,Country 136304,City,107,Country 136306,City,107,Country 136307,City,107,Country 136308,City,107,Country 136314,City,107,Country 136317,City,107,Country 136320,City,107,Country 136323,City,107,Country 136328,City,107,Country 136333,City,107,Country 136336,City,107,Country 136338,City,107,Country 136340,City,107,Country 136342,City,107,Country 136344,City,107,Country 136351,City,107,Country 136352,City,107,Country 136360,City,107,Country 136362,City,107,Country 136367,City,107,Country 136369,City,107,Country 136370,City,107,Country 136373,City,107,Country 136376,City,107,Country 136382,City,107,Country 136387,City,107,Country 136394,City,107,Country 136396,City,107,Country 136398,City,107,Country 136400,City,107,Country 136401,City,107,Country 136402,City,107,Country 136409,City,107,Country 136422,City,107,Country 136424,City,107,Country 136426,City,107,Country 136428,City,107,Country 136434,City,107,Country 136435,City,107,Country 136445,City,107,Country 136449,City,107,Country 136453,City,107,Country 136456,City,107,Country 136461,City,107,Country 136462,City,107,Country 136469,City,107,Country 136472,City,107,Country 136478,City,107,Country 136479,City,107,Country 136482,City,107,Country 136502,City,107,Country 136506,City,107,Country 136507,City,107,Country 136509,City,107,Country 136510,City,107,Country 136523,City,107,Country 136565,City,107,Country 136535,City,107,Country 136539,City,107,Country 136548,City,107,Country 136550,City,107,Country 136552,City,107,Country 136555,City,107,Country 136560,City,107,Country 136561,City,107,Country 136562,City,107,Country 136568,City,107,Country 136572,City,107,Country 136580,City,107,Country 136592,City,107,Country 136595,City,107,Country 136598,City,107,Country 136604,City,107,Country 136610,City,107,Country 136622,City,107,Country 136623,City,107,Country 136648,City,107,Country 136653,City,107,Country 136682,City,107,Country 136701,City,107,Country 136707,City,107,Country 136722,City,107,Country 136723,City,107,Country 136724,City,107,Country 136729,City,107,Country 136730,City,107,Country 136734,City,107,Country 136741,City,107,Country 136746,City,107,Country 136751,City,107,Country 136753,City,107,Country 136764,City,107,Country 136768,City,107,Country 136779,City,107,Country 136785,City,107,Country 136789,City,107,Country 136791,City,107,Country 136793,City,107,Country 136795,City,107,Country 136800,City,107,Country 136812,City,107,Country 136813,City,107,Country 136815,City,107,Country 136821,City,107,Country 136823,City,107,Country 136838,City,107,Country 136839,City,107,Country 136840,City,107,Country 136841,City,107,Country 136846,City,107,Country 136848,City,107,Country 136849,City,107,Country 136858,City,107,Country 136866,City,107,Country 136878,City,107,Country 136885,City,107,Country 136894,City,107,Country 136895,City,107,Country 136896,City,107,Country 136897,City,107,Country 136899,City,107,Country 136901,City,107,Country 136902,City,107,Country 136910,City,107,Country 136914,City,107,Country 136943,City,107,Country 136944,City,107,Country 136946,City,107,Country 136947,City,107,Country 136949,City,107,Country 136969,City,107,Country 136975,City,107,Country 136976,City,107,Country 136985,City,107,Country 136989,City,107,Country 136986,City,107,Country 136988,City,107,Country 136998,City,107,Country 136999,City,107,Country 137000,City,107,Country 137001,City,107,Country 137005,City,107,Country 137006,City,107,Country 137007,City,107,Country 137014,City,107,Country 137024,City,107,Country 137032,City,107,Country 137033,City,107,Country 137037,City,107,Country 137038,City,107,Country 137039,City,107,Country 137040,City,107,Country 137043,City,107,Country 137046,City,107,Country 137049,City,107,Country 137053,City,107,Country 137055,City,107,Country 137056,City,107,Country 137060,City,107,Country 137061,City,107,Country 137064,City,107,Country 137073,City,107,Country 137074,City,107,Country 137075,City,107,Country 137076,City,107,Country 137084,City,107,Country 137086,City,107,Country 137087,City,107,Country 137088,City,107,Country 137092,City,107,Country 137094,City,107,Country 137100,City,107,Country 137097,City,107,Country 137099,City,107,Country 137104,City,107,Country 137107,City,107,Country 137105,City,107,Country 137106,City,107,Country 137111,City,107,Country 137113,City,107,Country 137115,City,107,Country 137124,City,107,Country 137126,City,107,Country 137127,City,107,Country 137128,City,107,Country 137163,City,107,Country 137138,City,107,Country 137141,City,107,Country 137145,City,107,Country 137149,City,107,Country 137177,City,107,Country 137186,City,107,Country 137191,City,107,Country 137219,City,107,Country 137226,City,107,Country 137230,City,107,Country 137241,City,107,Country 137235,City,107,Country 137243,City,107,Country 137251,City,107,Country 137252,City,107,Country 137255,City,107,Country 137258,City,107,Country 137260,City,107,Country 137263,City,107,Country 137269,City,107,Country 137276,City,107,Country 137284,City,107,Country 137286,City,107,Country 137315,City,107,Country 137320,City,107,Country 137325,City,107,Country 137332,City,107,Country 137334,City,107,Country 137348,City,107,Country 137349,City,107,Country 137355,City,107,Country 137344,City,107,Country 137363,City,107,Country 137364,City,107,Country 137365,City,107,Country 137368,City,107,Country 137369,City,107,Country 137371,City,107,Country 137375,City,107,Country 137383,City,107,Country 137390,City,107,Country 137402,City,107,Country 137405,City,107,Country 137414,City,107,Country 137422,City,107,Country 137423,City,107,Country 137433,City,107,Country 137434,City,107,Country 137435,City,107,Country 137443,City,107,Country 137445,City,107,Country 137446,City,107,Country 137448,City,107,Country 137453,City,107,Country 137455,City,107,Country 137456,City,107,Country 137457,City,107,Country 137467,City,107,Country 137472,City,107,Country 137488,City,107,Country 137487,City,107,Country 137491,City,107,Country 137507,City,107,Country 137515,City,107,Country 137516,City,107,Country 137526,City,107,Country 137533,City,107,Country 137537,City,107,Country 137538,City,107,Country 137542,City,107,Country 137543,City,107,Country 137545,City,107,Country 137548,City,107,Country 137552,City,107,Country 137553,City,107,Country 137556,City,107,Country 137557,City,107,Country 137558,City,107,Country 137575,City,107,Country 137572,City,107,Country 137580,City,107,Country 137587,City,107,Country 137589,City,107,Country 137593,City,107,Country 137602,City,107,Country 137605,City,107,Country 137606,City,107,Country 137610,City,107,Country 137621,City,107,Country 137626,City,107,Country 137652,City,107,Country 137654,City,107,Country 137660,City,107,Country 137664,City,107,Country 137668,City,107,Country 137674,City,107,Country 137676,City,107,Country 137675,City,107,Country 137682,City,107,Country 137685,City,107,Country 137712,City,107,Country 137717,City,107,Country 137718,City,107,Country 137719,City,107,Country 137721,City,107,Country 137722,City,107,Country 137731,City,107,Country 137734,City,107,Country 137736,City,107,Country 137748,City,107,Country 137754,City,107,Country 137755,City,107,Country 137756,City,107,Country 137757,City,107,Country 137775,City,107,Country 137770,City,107,Country 137777,City,107,Country 137778,City,107,Country 137784,City,107,Country 137783,City,107,Country 137805,City,107,Country 137813,City,107,Country 137816,City,107,Country 137817,City,107,Country 137822,City,107,Country 137825,City,107,Country 137830,City,107,Country 137834,City,107,Country 137835,City,107,Country 137840,City,107,Country 137850,City,107,Country 137852,City,107,Country 137853,City,107,Country 137859,City,107,Country 137874,City,107,Country 137904,City,107,Country 137913,City,107,Country 137914,City,107,Country 137916,City,107,Country 137915,City,107,Country 137919,City,107,Country 137924,City,107,Country 137925,City,107,Country 137928,City,107,Country 137931,City,107,Country 137933,City,107,Country 137936,City,107,Country 137939,City,107,Country 137945,City,107,Country 137947,City,107,Country 137950,City,107,Country 137957,City,107,Country 137961,City,107,Country 137967,City,107,Country 137976,City,107,Country 137987,City,107,Country 137990,City,107,Country 137994,City,107,Country 138009,City,107,Country 138020,City,107,Country 138022,City,107,Country 138024,City,107,Country 138025,City,107,Country 138026,City,107,Country 138027,City,107,Country 138031,City,107,Country 138033,City,107,Country 138035,City,107,Country 138040,City,107,Country 138042,City,107,Country 138048,City,107,Country 138057,City,107,Country 138058,City,107,Country 138059,City,107,Country 138056,City,107,Country 138062,City,107,Country 138063,City,107,Country 138064,City,107,Country 138065,City,107,Country 138075,City,107,Country 138076,City,107,Country 138079,City,107,Country 138097,City,107,Country 138098,City,107,Country 138100,City,107,Country 138091,City,107,Country 138092,City,107,Country 138093,City,107,Country 138094,City,107,Country 138096,City,107,Country 138101,City,107,Country 138117,City,107,Country 138120,City,107,Country 138122,City,107,Country 138130,City,107,Country 138131,City,107,Country 138132,City,107,Country 138133,City,107,Country 138134,City,107,Country 138135,City,107,Country 138136,City,107,Country 138138,City,107,Country 138139,City,107,Country 138145,City,107,Country 138164,City,107,Country 138169,City,107,Country 138171,City,107,Country 138175,City,107,Country 138176,City,107,Country 138177,City,107,Country 138180,City,107,Country 138183,City,107,Country 138184,City,107,Country 138188,City,107,Country 138189,City,107,Country 138191,City,107,Country 138198,City,107,Country 138201,City,107,Country 138204,City,107,Country 138210,City,107,Country 138211,City,107,Country 138214,City,107,Country 138215,City,107,Country 138220,City,107,Country 138221,City,107,Country 138224,City,107,Country 138225,City,107,Country 138229,City,107,Country 138232,City,107,Country 138234,City,107,Country 138241,City,107,Country 138245,City,107,Country 138251,City,107,Country 138253,City,107,Country 138256,City,107,Country 138257,City,107,Country 138272,City,107,Country 138286,City,107,Country 138288,City,107,Country 138298,City,107,Country 138308,City,107,Country 138310,City,107,Country 138313,City,107,Country 138314,City,107,Country 138315,City,107,Country 138317,City,107,Country 138318,City,107,Country 138323,City,107,Country 138329,City,107,Country 138330,City,107,Country 138337,City,107,Country 138342,City,107,Country 138343,City,107,Country 138344,City,107,Country 138349,City,107,Country 138353,City,107,Country 138357,City,107,Country 138362,City,107,Country 138365,City,107,Country 138367,City,107,Country 138369,City,107,Country 138373,City,107,Country 138378,City,107,Country 138382,City,107,Country 138383,City,107,Country 138401,City,107,Country 138406,City,107,Country 138409,City,107,Country 138424,City,107,Country 138435,City,107,Country 138438,City,107,Country 138440,City,107,Country 138474,City,107,Country 138476,City,107,Country 138484,City,107,Country 138493,City,107,Country 138492,City,107,Country 138510,City,107,Country 138512,City,107,Country 138516,City,107,Country 138517,City,107,Country 138518,City,107,Country 138523,City,107,Country 138530,City,107,Country 138538,City,107,Country 138537,City,107,Country 138541,City,107,Country 138557,City,107,Country 138562,City,107,Country 138585,City,107,Country 138586,City,107,Country 138596,City,107,Country 138598,City,107,Country 138612,City,107,Country 138616,City,107,Country 138621,City,107,Country 138626,City,107,Country 138639,City,107,Country 138649,City,107,Country 138659,City,107,Country 138663,City,107,Country 138707,City,107,Country 138747,City,107,Country 138754,City,107,Country 138762,City,107,Country 138767,City,107,Country 138772,City,107,Country 138776,City,107,Country 138777,City,107,Country 138798,City,107,Country 138800,City,107,Country 138801,City,107,Country 138805,City,107,Country 138806,City,107,Country 138818,City,107,Country 138826,City,107,Country 138827,City,107,Country 138834,City,107,Country 138837,City,107,Country 138838,City,107,Country 138839,City,107,Country 138841,City,107,Country 138846,City,107,Country 138847,City,107,Country 138848,City,107,Country 138850,City,107,Country 138851,City,107,Country 138852,City,107,Country 138856,City,107,Country 138858,City,107,Country 138859,City,107,Country 138862,City,107,Country 138870,City,107,Country 138871,City,107,Country 138872,City,107,Country 138875,City,107,Country 138878,City,107,Country 138881,City,107,Country 138882,City,107,Country 138883,City,107,Country 138885,City,107,Country 138888,City,107,Country 138894,City,107,Country 138898,City,107,Country 138905,City,107,Country 138906,City,107,Country 138913,City,107,Country 138914,City,107,Country 138918,City,107,Country 138920,City,107,Country 138921,City,107,Country 138922,City,107,Country 138923,City,107,Country 138925,City,107,Country 138929,City,107,Country 138931,City,107,Country 138935,City,107,Country 138941,City,107,Country 138977,City,107,Country 138984,City,107,Country 138997,City,107,Country 138998,City,107,Country 139008,City,107,Country 139011,City,107,Country 139012,City,107,Country 139013,City,107,Country 139015,City,107,Country 139024,City,107,Country 139025,City,107,Country 139030,City,107,Country 139033,City,107,Country 139034,City,107,Country 139035,City,107,Country 139036,City,107,Country 139037,City,107,Country 139038,City,107,Country 139046,City,107,Country 139053,City,107,Country 139064,City,107,Country 139065,City,107,Country 139068,City,107,Country 139074,City,107,Country 139075,City,107,Country 139078,City,107,Country 139079,City,107,Country 139093,City,107,Country 139095,City,107,Country 139097,City,107,Country 139108,City,107,Country 139109,City,107,Country 139111,City,107,Country 139112,City,107,Country 139113,City,107,Country 139116,City,107,Country 139117,City,107,Country 139135,City,107,Country 139136,City,107,Country 139151,City,107,Country 139155,City,107,Country 139174,City,107,Country 139176,City,107,Country 139182,City,107,Country 139185,City,107,Country 139186,City,107,Country 139189,City,107,Country 139197,City,107,Country 139203,City,107,Country 139206,City,107,Country 139207,City,107,Country 139210,City,107,Country 139213,City,107,Country 139214,City,107,Country 139215,City,107,Country 139216,City,107,Country 139218,City,107,Country 139220,City,107,Country 139222,City,107,Country 139231,City,107,Country 139251,City,107,Country 139238,City,107,Country 139254,City,107,Country 139256,City,107,Country 139260,City,107,Country 139263,City,107,Country 139272,City,107,Country 139276,City,107,Country 139312,City,107,Country 139324,City,107,Country 139331,City,107,Country 139332,City,107,Country 139338,City,107,Country 139342,City,107,Country 139343,City,107,Country 139357,City,107,Country 139359,City,107,Country 139363,City,107,Country 139366,City,107,Country 139373,City,107,Country 139382,City,107,Country 139411,City,107,Country 139412,City,107,Country 139413,City,107,Country 139419,City,107,Country 139422,City,107,Country 139432,City,107,Country 139433,City,107,Country 139434,City,107,Country 139436,City,107,Country 139442,City,107,Country 139445,City,107,Country 139446,City,107,Country 139447,City,107,Country 139450,City,107,Country 139470,City,107,Country 139484,City,107,Country 139485,City,107,Country 139490,City,107,Country 139509,City,107,Country 139518,City,107,Country 139521,City,107,Country 139526,City,107,Country 139528,City,107,Country 139529,City,107,Country 139534,City,107,Country 139535,City,107,Country 139536,City,107,Country 139537,City,107,Country 139543,City,107,Country 139547,City,107,Country 139550,City,107,Country 139553,City,107,Country 139562,City,107,Country 139561,City,107,Country 139563,City,107,Country 139568,City,107,Country 139569,City,107,Country 139570,City,107,Country 139572,City,107,Country 139575,City,107,Country 139578,City,107,Country 139579,City,107,Country 139582,City,107,Country 139584,City,107,Country 139585,City,107,Country 139586,City,107,Country 139593,City,107,Country 139600,City,107,Country 139617,City,107,Country 139619,City,107,Country 139620,City,107,Country 139621,City,107,Country 139622,City,107,Country 139634,City,107,Country 139635,City,107,Country 139642,City,107,Country 139651,City,107,Country 139652,City,107,Country 139655,City,107,Country 139659,City,107,Country 139660,City,107,Country 139666,City,107,Country 139665,City,107,Country 139667,City,107,Country 139669,City,107,Country 139681,City,107,Country 139682,City,107,Country 139687,City,107,Country 139689,City,107,Country 139700,City,107,Country 139702,City,107,Country 139707,City,107,Country 139708,City,107,Country 139716,City,107,Country 139717,City,107,Country 139719,City,107,Country 139735,City,107,Country 139736,City,107,Country 139739,City,107,Country 139741,City,107,Country 139750,City,107,Country 139751,City,107,Country 139754,City,107,Country 139756,City,107,Country 139760,City,107,Country 139761,City,107,Country 139765,City,107,Country 139766,City,107,Country 139771,City,107,Country 139773,City,107,Country 139788,City,107,Country 139792,City,107,Country 139793,City,107,Country 139794,City,107,Country 139806,City,107,Country 139807,City,107,Country 139811,City,107,Country 139815,City,107,Country 139834,City,107,Country 139835,City,107,Country 139842,City,107,Country 139844,City,107,Country 139850,City,107,Country 139860,City,107,Country 139865,City,107,Country 139866,City,107,Country 139867,City,107,Country 139905,City,107,Country 139906,City,107,Country 139908,City,107,Country 139911,City,107,Country 139931,City,107,Country 139934,City,107,Country 139941,City,107,Country 139945,City,107,Country 139949,City,107,Country 139951,City,107,Country 139955,City,107,Country 139963,City,107,Country 139978,City,107,Country 140005,City,107,Country 140012,City,107,Country 140016,City,107,Country 140017,City,107,Country 140021,City,107,Country 140023,City,107,Country 140024,City,107,Country 140040,City,107,Country 140042,City,107,Country 140055,City,107,Country 140058,City,107,Country 140059,City,107,Country 140060,City,107,Country 140061,City,107,Country 140069,City,107,Country 140070,City,107,Country 140087,City,107,Country 140088,City,107,Country 140092,City,107,Country 140093,City,107,Country 140094,City,107,Country 140104,City,107,Country 140106,City,107,Country 140108,City,107,Country 140111,City,107,Country 140115,City,107,Country 140116,City,107,Country 140122,City,107,Country 140142,City,107,Country 140151,City,107,Country 140154,City,107,Country 140172,City,107,Country 140179,City,107,Country 140181,City,107,Country 140182,City,107,Country 140194,City,107,Country 140197,City,107,Country 140206,City,107,Country 140218,City,107,Country 140231,City,107,Country 140232,City,107,Country 140239,City,107,Country 140243,City,107,Country 140256,City,107,Country 140258,City,107,Country 140270,City,107,Country 140293,City,107,Country 140295,City,107,Country 140309,City,107,Country 140333,City,107,Country 140338,City,107,Country 140340,City,107,Country 140342,City,107,Country 140344,City,107,Country 140351,City,107,Country 140357,City,107,Country 140361,City,107,Country 140386,City,107,Country 140397,City,107,Country 140458,City,107,Country 140477,City,107,Country 140492,City,107,Country 140535,City,107,Country 140540,City,107,Country 140542,City,107,Country 140548,City,107,Country 140559,City,107,Country 140560,City,107,Country 140564,City,107,Country 140565,City,107,Country 140569,City,107,Country 140575,City,107,Country 140577,City,107,Country 140582,City,107,Country 140592,City,107,Country 140593,City,107,Country 140594,City,107,Country 140595,City,107,Country 140601,City,107,Country 140602,City,107,Country 140608,City,107,Country 140619,City,107,Country 140624,City,107,Country 140626,City,107,Country 140628,City,107,Country 140627,City,107,Country 140639,City,107,Country 140641,City,107,Country 140643,City,107,Country 140656,City,107,Country 140663,City,107,Country 140668,City,107,Country 140669,City,107,Country 140672,City,107,Country 140673,City,107,Country 140675,City,107,Country 140678,City,107,Country 140681,City,107,Country 140684,City,107,Country 140698,City,107,Country 140702,City,107,Country 140706,City,107,Country 140727,City,107,Country 140728,City,107,Country 140730,City,107,Country 140736,City,107,Country 140739,City,107,Country 140749,City,107,Country 140751,City,107,Country 140757,City,107,Country 140760,City,107,Country 140764,City,107,Country 140769,City,107,Country 140778,City,107,Country 140809,City,107,Country 140810,City,107,Country 140814,City,107,Country 140819,City,107,Country 140824,City,107,Country 140825,City,107,Country 140827,City,107,Country 140828,City,107,Country 140834,City,107,Country 140838,City,107,Country 140862,City,107,Country 140863,City,107,Country 140865,City,107,Country 140873,City,107,Country 140876,City,107,Country 140878,City,107,Country 140880,City,107,Country 140881,City,107,Country 140890,City,107,Country 140892,City,107,Country 140893,City,107,Country 140894,City,107,Country 140895,City,107,Country 140898,City,107,Country 140909,City,107,Country 140911,City,107,Country 140913,City,107,Country 140914,City,107,Country 140915,City,107,Country 140917,City,107,Country 140923,City,107,Country 140927,City,107,Country 140928,City,107,Country 140931,City,107,Country 140953,City,107,Country 140954,City,107,Country 140957,City,107,Country 140956,City,107,Country 140963,City,107,Country 140965,City,107,Country 140974,City,107,Country 140997,City,107,Country 140998,City,107,Country 141005,City,107,Country 141009,City,107,Country 141010,City,107,Country 141011,City,107,Country 141012,City,107,Country 141019,City,107,Country 141023,City,107,Country 141024,City,107,Country 141027,City,107,Country 141028,City,107,Country 141029,City,107,Country 141032,City,107,Country 141033,City,107,Country 141040,City,107,Country 141041,City,107,Country 141052,City,107,Country 141066,City,107,Country 141073,City,107,Country 141081,City,107,Country 141078,City,107,Country 141079,City,107,Country 141080,City,107,Country 58203,City,107,Country 58212,City,107,Country 58215,City,107,Country 58216,City,107,Country 58217,City,107,Country 58226,City,107,Country 58230,City,107,Country 58236,City,107,Country 58242,City,107,Country 58244,City,107,Country 58266,City,107,Country 58274,City,107,Country 58276,City,107,Country 58285,City,107,Country 58294,City,107,Country 58296,City,107,Country 58320,City,107,Country 58306,City,107,Country 58308,City,107,Country 58313,City,107,Country 58315,City,107,Country 58319,City,107,Country 58324,City,107,Country 58329,City,107,Country 58330,City,107,Country 58342,City,107,Country 58356,City,107,Country 58359,City,107,Country 58364,City,107,Country 58382,City,107,Country 58384,City,107,Country 58386,City,107,Country 58387,City,107,Country 58389,City,107,Country 58396,City,107,Country 58419,City,107,Country 58427,City,107,Country 58435,City,107,Country 58439,City,107,Country 58442,City,107,Country 58443,City,107,Country 58451,City,107,Country 58453,City,107,Country 58469,City,107,Country 58470,City,107,Country 58499,City,107,Country 58504,City,107,Country 58507,City,107,Country 58508,City,107,Country 58516,City,107,Country 58527,City,107,Country 58528,City,107,Country 58532,City,107,Country 58534,City,107,Country 58552,City,107,Country 58555,City,107,Country 58557,City,107,Country 58561,City,107,Country 58566,City,107,Country 58567,City,107,Country 58573,City,107,Country 58577,City,107,Country 58598,City,107,Country 58603,City,107,Country 58630,City,107,Country 58632,City,107,Country 58646,City,107,Country 58647,City,107,Country 58651,City,107,Country 58633,City,107,Country 58634,City,107,Country 58637,City,107,Country 58638,City,107,Country 58657,City,107,Country 58665,City,107,Country 58672,City,107,Country 58680,City,107,Country 58688,City,107,Country 58711,City,107,Country 58719,City,107,Country 58721,City,107,Country 58723,City,107,Country 58725,City,107,Country 58737,City,107,Country 58741,City,107,Country 58761,City,107,Country 58772,City,107,Country 58773,City,107,Country 58774,City,107,Country 58775,City,107,Country 58776,City,107,Country 58782,City,107,Country 58804,City,107,Country 58814,City,107,Country 58819,City,107,Country 58820,City,107,Country 58822,City,107,Country 58824,City,107,Country 58837,City,107,Country 58838,City,107,Country 58856,City,107,Country 58859,City,107,Country 58842,City,107,Country 58843,City,107,Country 58844,City,107,Country 58847,City,107,Country 58849,City,107,Country 58876,City,107,Country 58880,City,107,Country 58883,City,107,Country 58887,City,107,Country 58890,City,107,Country 58891,City,107,Country 58907,City,107,Country 58914,City,107,Country 58924,City,107,Country 58941,City,107,Country 58939,City,107,Country 58961,City,107,Country 58976,City,107,Country 58977,City,107,Country 58982,City,107,Country 58984,City,107,Country 58991,City,107,Country 58993,City,107,Country 59000,City,107,Country 59012,City,107,Country 59013,City,107,Country 59046,City,107,Country 59049,City,107,Country 59050,City,107,Country 59052,City,107,Country 59055,City,107,Country 59058,City,107,Country 59064,City,107,Country 59066,City,107,Country 59071,City,107,Country 59078,City,107,Country 59093,City,107,Country 59095,City,107,Country 59097,City,107,Country 59096,City,107,Country 59099,City,107,Country 59115,City,107,Country 59117,City,107,Country 59125,City,107,Country 59127,City,107,Country 59142,City,107,Country 59144,City,107,Country 59147,City,107,Country 59151,City,107,Country 59157,City,107,Country 59177,City,107,Country 59184,City,107,Country 59194,City,107,Country 59195,City,107,Country 59204,City,107,Country 59207,City,107,Country 59227,City,107,Country 59238,City,107,Country 59246,City,107,Country 59247,City,107,Country 59251,City,107,Country 59252,City,107,Country 59265,City,107,Country 59276,City,107,Country 59278,City,107,Country 59279,City,107,Country 59281,City,107,Country 59282,City,107,Country 59293,City,107,Country 59304,City,107,Country 59314,City,107,Country 59315,City,107,Country 59323,City,107,Country 59328,City,107,Country 59329,City,107,Country 59330,City,107,Country 59335,City,107,Country 59338,City,107,Country 59341,City,107,Country 59346,City,107,Country 59347,City,107,Country 59352,City,107,Country 59369,City,107,Country 59398,City,107,Country 59404,City,107,Country 59405,City,107,Country 59406,City,107,Country 59420,City,107,Country 59426,City,107,Country 59430,City,107,Country 59429,City,107,Country 59443,City,107,Country 59455,City,107,Country 59456,City,107,Country 59457,City,107,Country 59459,City,107,Country 59458,City,107,Country 59460,City,107,Country 59501,City,107,Country 59551,City,107,Country 59552,City,107,Country 59554,City,107,Country 59688,City,107,Country 59689,City,107,Country 59557,City,107,Country 59559,City,107,Country 59562,City,107,Country 59563,City,107,Country 59564,City,107,Country 59565,City,107,Country 59572,City,107,Country 59575,City,107,Country 59576,City,107,Country 59579,City,107,Country 59588,City,107,Country 59590,City,107,Country 59592,City,107,Country 59594,City,107,Country 59600,City,107,Country 59603,City,107,Country 59606,City,107,Country 59608,City,107,Country 59611,City,107,Country 59626,City,107,Country 59627,City,107,Country 59655,City,107,Country 59662,City,107,Country 59667,City,107,Country 59669,City,107,Country 59672,City,107,Country 59673,City,107,Country 59674,City,107,Country 59682,City,107,Country 59683,City,107,Country 59687,City,107,Country 59694,City,107,Country 59701,City,107,Country 59713,City,107,Country 59715,City,107,Country 59716,City,107,Country 59736,City,107,Country 59745,City,107,Country 59742,City,107,Country 59755,City,107,Country 59761,City,107,Country 59768,City,107,Country 59796,City,107,Country 59782,City,107,Country 59790,City,107,Country 59798,City,107,Country 59812,City,107,Country 59820,City,107,Country 59825,City,107,Country 59828,City,107,Country 59838,City,107,Country 59847,City,107,Country 59860,City,107,Country 59870,City,107,Country 59877,City,107,Country 59886,City,107,Country 59888,City,107,Country 59896,City,107,Country 59902,City,107,Country 59903,City,107,Country 59906,City,107,Country 59910,City,107,Country 59916,City,107,Country 59921,City,107,Country 59934,City,107,Country 59939,City,107,Country 59942,City,107,Country 59947,City,107,Country 59944,City,107,Country 59970,City,107,Country 59962,City,107,Country 59982,City,107,Country 59994,City,107,Country 59996,City,107,Country 60004,City,107,Country 60046,City,107,Country 60053,City,107,Country 60075,City,107,Country 60083,City,107,Country 60084,City,107,Country 60095,City,107,Country 60077,City,107,Country 60126,City,107,Country 60132,City,107,Country 60145,City,107,Country 60154,City,107,Country 60160,City,107,Country 60163,City,107,Country 60225,City,107,Country 60226,City,107,Country 60235,City,107,Country 60245,City,107,Country 60265,City,107,Country 60286,City,107,Country 60287,City,107,Country 60291,City,107,Country 60294,City,107,Country 60295,City,107,Country 60296,City,107,Country 60305,City,107,Country 60309,City,107,Country 60319,City,107,Country 60333,City,107,Country 60358,City,107,Country 60359,City,107,Country 60379,City,107,Country 60408,City,107,Country 60413,City,107,Country 60419,City,107,Country 60421,City,107,Country 60438,City,107,Country 60450,City,107,Country 60454,City,107,Country 60472,City,107,Country 60475,City,107,Country 60462,City,107,Country 60513,City,107,Country 60516,City,107,Country 60548,City,107,Country 60553,City,107,Country 60556,City,107,Country 60561,City,107,Country 60594,City,107,Country 60606,City,107,Country 60618,City,107,Country 60619,City,107,Country 60621,City,107,Country 60623,City,107,Country 60627,City,107,Country 60645,City,107,Country 60646,City,107,Country 60648,City,107,Country 60679,City,107,Country 60684,City,107,Country 60685,City,107,Country 60691,City,107,Country 60698,City,107,Country 60700,City,107,Country 60712,City,107,Country 60714,City,107,Country 60718,City,107,Country 60723,City,107,Country 60727,City,107,Country 60728,City,107,Country 60737,City,107,Country 60739,City,107,Country 60740,City,107,Country 60741,City,107,Country 60743,City,107,Country 60744,City,107,Country 60747,City,107,Country 60749,City,107,Country 60776,City,107,Country 60795,City,107,Country 60801,City,107,Country 60799,City,107,Country 60806,City,107,Country 60812,City,107,Country 60822,City,107,Country 60855,City,107,Country 60874,City,107,Country 60876,City,107,Country 60878,City,107,Country 60879,City,107,Country 60884,City,107,Country 60885,City,107,Country 60891,City,107,Country 60899,City,107,Country 60904,City,107,Country 60906,City,107,Country 60907,City,107,Country 60909,City,107,Country 60910,City,107,Country 60911,City,107,Country 60917,City,107,Country 60924,City,107,Country 60925,City,107,Country 60926,City,107,Country 60928,City,107,Country 60934,City,107,Country 60936,City,107,Country 60937,City,107,Country 60938,City,107,Country 60939,City,107,Country 60940,City,107,Country 60953,City,107,Country 60954,City,107,Country 60961,City,107,Country 60963,City,107,Country 60964,City,107,Country 60969,City,107,Country 60973,City,107,Country 60974,City,107,Country 60979,City,107,Country 60984,City,107,Country 61000,City,107,Country 61013,City,107,Country 61016,City,107,Country 61022,City,107,Country 61023,City,107,Country 61025,City,107,Country 61033,City,107,Country 61041,City,107,Country 61059,City,107,Country 61068,City,107,Country 61086,City,107,Country 61090,City,107,Country 61102,City,107,Country 61107,City,107,Country 61111,City,107,Country 61113,City,107,Country 61114,City,107,Country 61115,City,107,Country 61117,City,107,Country 61118,City,107,Country 61130,City,107,Country 61131,City,107,Country 61136,City,107,Country 61137,City,107,Country 61138,City,107,Country 61148,City,107,Country 61152,City,107,Country 61154,City,107,Country 61169,City,107,Country 61182,City,107,Country 61190,City,107,Country 61191,City,107,Country 61192,City,107,Country 61202,City,107,Country 61206,City,107,Country 61211,City,107,Country 61230,City,107,Country 61233,City,107,Country 61241,City,107,Country 61248,City,107,Country 61274,City,107,Country 61282,City,107,Country 61318,City,107,Country 61323,City,107,Country 61332,City,107,Country 61335,City,107,Country 61337,City,107,Country 61343,City,107,Country 61345,City,107,Country 61348,City,107,Country 61349,City,107,Country 61364,City,107,Country 61365,City,107,Country 61366,City,107,Country 61367,City,107,Country 61369,City,107,Country 61370,City,107,Country 61373,City,107,Country 61376,City,107,Country 61358,City,107,Country 61393,City,107,Country 61403,City,107,Country 61402,City,107,Country 61423,City,107,Country 61426,City,107,Country 61428,City,107,Country 61439,City,107,Country 61449,City,107,Country 61450,City,107,Country 61451,City,107,Country 61460,City,107,Country 61468,City,107,Country 61471,City,107,Country 61477,City,107,Country 61479,City,107,Country 61485,City,107,Country 61494,City,107,Country 61495,City,107,Country 61497,City,107,Country 61504,City,107,Country 61508,City,107,Country 61510,City,107,Country 61511,City,107,Country 61513,City,107,Country 61514,City,107,Country 61516,City,107,Country 61526,City,107,Country 61527,City,107,Country 61538,City,107,Country 61545,City,107,Country 61551,City,107,Country 61554,City,107,Country 61558,City,107,Country 61559,City,107,Country 61571,City,107,Country 61572,City,107,Country 61573,City,107,Country 61583,City,107,Country 61584,City,107,Country 61585,City,107,Country 61592,City,107,Country 61599,City,107,Country 61606,City,107,Country 61613,City,107,Country 61638,City,107,Country 61640,City,107,Country 61643,City,107,Country 61644,City,107,Country 61647,City,107,Country 61656,City,107,Country 61660,City,107,Country 61667,City,107,Country 61671,City,107,Country 61674,City,107,Country 61676,City,107,Country 61679,City,107,Country 61687,City,107,Country 61690,City,107,Country 61718,City,107,Country 61722,City,107,Country 61730,City,107,Country 61733,City,107,Country 61734,City,107,Country 61743,City,107,Country 61748,City,107,Country 61753,City,107,Country 61754,City,107,Country 61757,City,107,Country 61761,City,107,Country 61766,City,107,Country 61768,City,107,Country 61769,City,107,Country 61775,City,107,Country 61780,City,107,Country 61789,City,107,Country 61788,City,107,Country 61790,City,107,Country 61792,City,107,Country 61793,City,107,Country 61799,City,107,Country 61800,City,107,Country 61801,City,107,Country 61803,City,107,Country 61814,City,107,Country 61816,City,107,Country 61817,City,107,Country 61821,City,107,Country 61833,City,107,Country 61836,City,107,Country 61837,City,107,Country 61839,City,107,Country 61840,City,107,Country 61841,City,107,Country 61842,City,107,Country 61843,City,107,Country 61845,City,107,Country 61848,City,107,Country 61851,City,107,Country 61855,City,107,Country 61859,City,107,Country 61860,City,107,Country 61867,City,107,Country 61869,City,107,Country 61871,City,107,Country 61872,City,107,Country 61875,City,107,Country 61881,City,107,Country 61887,City,107,Country 61888,City,107,Country 61893,City,107,Country 61899,City,107,Country 61900,City,107,Country 61924,City,107,Country 61927,City,107,Country 61928,City,107,Country 61930,City,107,Country 61938,City,107,Country 61937,City,107,Country 61944,City,107,Country 61947,City,107,Country 61948,City,107,Country 61949,City,107,Country 61953,City,107,Country 61959,City,107,Country 61962,City,107,Country 61971,City,107,Country 61978,City,107,Country 61980,City,107,Country 61981,City,107,Country 61987,City,107,Country 61989,City,107,Country 61995,City,107,Country 62032,City,107,Country 62034,City,107,Country 62036,City,107,Country 62037,City,107,Country 62041,City,107,Country 62042,City,107,Country 61999,City,107,Country 62000,City,107,Country 62008,City,107,Country 62010,City,107,Country 62013,City,107,Country 62049,City,107,Country 62069,City,107,Country 62067,City,107,Country 62094,City,107,Country 62106,City,107,Country 62110,City,107,Country 62113,City,107,Country 62114,City,107,Country 62115,City,107,Country 62119,City,107,Country 62134,City,107,Country 62140,City,107,Country 62153,City,107,Country 62154,City,107,Country 62156,City,107,Country 62157,City,107,Country 62158,City,107,Country 62159,City,107,Country 62167,City,107,Country 62170,City,107,Country 62176,City,107,Country 62187,City,107,Country 62194,City,107,Country 62195,City,107,Country 62197,City,107,Country 62201,City,107,Country 62207,City,107,Country 62209,City,107,Country 62213,City,107,Country 62219,City,107,Country 62234,City,107,Country 62235,City,107,Country 62238,City,107,Country 62239,City,107,Country 62242,City,107,Country 62243,City,107,Country 62244,City,107,Country 62245,City,107,Country 62246,City,107,Country 62250,City,107,Country 62251,City,107,Country 62260,City,107,Country 62262,City,107,Country 62265,City,107,Country 62266,City,107,Country 62273,City,107,Country 62276,City,107,Country 135267,City,107,Country 135274,City,107,Country 135278,City,107,Country 135320,City,107,Country 135438,City,107,Country 135457,City,107,Country 135479,City,107,Country 135531,City,107,Country 135533,City,107,Country 135536,City,107,Country 135537,City,107,Country 135564,City,107,Country 135631,City,107,Country 135655,City,107,Country 135684,City,107,Country 135798,City,107,Country 135819,City,107,Country 135835,City,107,Country 135928,City,107,Country 135931,City,107,Country 135946,City,107,Country 135954,City,107,Country 135964,City,107,Country 136111,City,107,Country 136158,City,107,Country 136175,City,107,Country 136177,City,107,Country 136188,City,107,Country 136190,City,107,Country 136260,City,107,Country 136467,City,107,Country 136508,City,107,Country 136512,City,107,Country 136577,City,107,Country 136582,City,107,Country 136584,City,107,Country 136621,City,107,Country 136641,City,107,Country 136652,City,107,Country 136678,City,107,Country 136692,City,107,Country 136748,City,107,Country 136780,City,107,Country 136796,City,107,Country 136837,City,107,Country 136909,City,107,Country 136940,City,107,Country 137050,City,107,Country 137067,City,107,Country 137066,City,107,Country 137071,City,107,Country 137072,City,107,Country 137171,City,107,Country 137178,City,107,Country 137192,City,107,Country 137227,City,107,Country 137308,City,107,Country 137310,City,107,Country 137312,City,107,Country 137359,City,107,Country 137370,City,107,Country 137496,City,107,Country 137498,City,107,Country 137568,City,107,Country 137618,City,107,Country 137651,City,107,Country 137732,City,107,Country 137790,City,107,Country 137791,City,107,Country 137848,City,107,Country 137899,City,107,Country 137909,City,107,Country 137951,City,107,Country 138015,City,107,Country 138043,City,107,Country 138087,City,107,Country 138181,City,107,Country 138196,City,107,Country 138197,City,107,Country 138379,City,107,Country 138393,City,107,Country 138416,City,107,Country 138421,City,107,Country 138430,City,107,Country 138433,City,107,Country 138478,City,107,Country 138482,City,107,Country 138483,City,107,Country 138533,City,107,Country 138581,City,107,Country 138618,City,107,Country 138681,City,107,Country 138697,City,107,Country 138724,City,107,Country 138739,City,107,Country 138740,City,107,Country 138770,City,107,Country 138785,City,107,Country 138815,City,107,Country 138896,City,107,Country 139049,City,107,Country 139123,City,107,Country 139124,City,107,Country 139145,City,107,Country 139247,City,107,Country 139278,City,107,Country 139367,City,107,Country 139428,City,107,Country 139505,City,107,Country 139609,City,107,Country 139611,City,107,Country 139614,City,107,Country 139640,City,107,Country 139658,City,107,Country 139696,City,107,Country 139698,City,107,Country 139701,City,107,Country 139729,City,107,Country 139748,City,107,Country 139775,City,107,Country 139837,City,107,Country 139875,City,107,Country 139890,City,107,Country 139914,City,107,Country 139921,City,107,Country 139967,City,107,Country 139968,City,107,Country 139986,City,107,Country 139992,City,107,Country 140071,City,107,Country 140074,City,107,Country 140075,City,107,Country 140079,City,107,Country 140083,City,107,Country 140198,City,107,Country 140203,City,107,Country 140236,City,107,Country 140273,City,107,Country 140274,City,107,Country 140298,City,107,Country 140299,City,107,Country 140300,City,107,Country 140335,City,107,Country 140345,City,107,Country 140355,City,107,Country 140358,City,107,Country 140360,City,107,Country 140363,City,107,Country 140365,City,107,Country 140366,City,107,Country 140373,City,107,Country 140375,City,107,Country 140376,City,107,Country 140378,City,107,Country 140381,City,107,Country 140382,City,107,Country 140383,City,107,Country 140398,City,107,Country 140401,City,107,Country 140402,City,107,Country 140417,City,107,Country 140423,City,107,Country 140427,City,107,Country 140431,City,107,Country 140434,City,107,Country 140435,City,107,Country 140440,City,107,Country 140446,City,107,Country 140455,City,107,Country 140456,City,107,Country 140463,City,107,Country 140470,City,107,Country 140479,City,107,Country 140482,City,107,Country 140484,City,107,Country 140488,City,107,Country 140497,City,107,Country 140509,City,107,Country 140512,City,107,Country 140528,City,107,Country 140573,City,107,Country 140589,City,107,Country 140610,City,107,Country 140633,City,107,Country 140636,City,107,Country 140676,City,107,Country 140847,City,107,Country 140875,City,107,Country 140877,City,107,Country 140944,City,107,Country 140984,City,107,Country 141007,City,107,Country 141034,City,107,Country 141042,City,107,Country 141043,City,107,Country 141083,City,107,Country 58206,City,107,Country 58259,City,107,Country 58333,City,107,Country 58331,City,107,Country 58376,City,107,Country 58385,City,107,Country 58402,City,107,Country 58424,City,107,Country 58447,City,107,Country 58481,City,107,Country 58483,City,107,Country 58484,City,107,Country 58505,City,107,Country 58518,City,107,Country 58519,City,107,Country 58521,City,107,Country 58522,City,107,Country 58524,City,107,Country 58526,City,107,Country 58559,City,107,Country 58584,City,107,Country 58585,City,107,Country 58594,City,107,Country 58604,City,107,Country 58641,City,107,Country 58656,City,107,Country 58681,City,107,Country 58684,City,107,Country 58693,City,107,Country 58763,City,107,Country 58764,City,107,Country 58798,City,107,Country 58806,City,107,Country 58898,City,107,Country 58932,City,107,Country 58933,City,107,Country 58934,City,107,Country 58935,City,107,Country 58953,City,107,Country 58966,City,107,Country 59101,City,107,Country 59108,City,107,Country 59109,City,107,Country 59146,City,107,Country 59159,City,107,Country 59283,City,107,Country 59310,City,107,Country 59388,City,107,Country 59408,City,107,Country 59409,City,107,Country 59410,City,107,Country 59630,City,107,Country 59644,City,107,Country 59657,City,107,Country 59781,City,107,Country 59832,City,107,Country 59840,City,107,Country 59882,City,107,Country 59950,City,107,Country 59972,City,107,Country 60049,City,107,Country 60058,City,107,Country 60115,City,107,Country 60162,City,107,Country 60243,City,107,Country 60256,City,107,Country 60289,City,107,Country 60368,City,107,Country 60369,City,107,Country 60370,City,107,Country 60399,City,107,Country 60406,City,107,Country 60458,City,107,Country 60469,City,107,Country 60552,City,107,Country 60574,City,107,Country 60575,City,107,Country 60576,City,107,Country 60686,City,107,Country 60724,City,107,Country 60756,City,107,Country 60753,City,107,Country 60754,City,107,Country 60767,City,107,Country 60777,City,107,Country 60784,City,107,Country 60786,City,107,Country 60829,City,107,Country 60875,City,107,Country 60889,City,107,Country 61019,City,107,Country 61039,City,107,Country 61051,City,107,Country 61061,City,107,Country 61084,City,107,Country 61188,City,107,Country 61196,City,107,Country 61197,City,107,Country 61298,City,107,Country 61362,City,107,Country 61459,City,107,Country 61475,City,107,Country 61547,City,107,Country 61557,City,107,Country 61602,City,107,Country 61604,City,107,Country 61605,City,107,Country 61700,City,107,Country 61810,City,107,Country 61991,City,107,Country 62006,City,107,Country 62009,City,107,Country 62011,City,107,Country 62016,City,107,Country 62019,City,107,Country 62070,City,107,Country 62092,City,107,Country 62175,City,107,Country 62271,City,107,Country 135277,City,107,Country 135280,City,107,Country 135310,City,107,Country 135764,City,107,Country 135811,City,107,Country 135955,City,107,Country 136099,City,107,Country 136135,City,107,Country 136431,City,107,Country 136638,City,107,Country 136642,City,107,Country 136647,City,107,Country 136662,City,107,Country 136668,City,107,Country 136744,City,107,Country 136797,City,107,Country 136905,City,107,Country 136922,City,107,Country 136953,City,107,Country 136970,City,107,Country 137164,City,107,Country 137156,City,107,Country 137182,City,107,Country 137249,City,107,Country 137272,City,107,Country 137306,City,107,Country 137307,City,107,Country 137326,City,107,Country 137386,City,107,Country 137521,City,107,Country 137523,City,107,Country 137576,City,107,Country 137657,City,107,Country 137788,City,107,Country 137792,City,107,Country 137869,City,107,Country 137895,City,107,Country 137898,City,107,Country 137953,City,107,Country 138346,City,107,Country 138491,City,107,Country 138531,City,107,Country 138633,City,107,Country 138652,City,107,Country 138672,City,107,Country 138742,City,107,Country 138830,City,107,Country 138961,City,107,Country 139164,City,107,Country 139165,City,107,Country 139175,City,107,Country 139233,City,107,Country 139274,City,107,Country 139376,City,107,Country 139527,City,107,Country 139588,City,107,Country 139636,City,107,Country 139664,City,107,Country 139692,City,107,Country 139691,City,107,Country 139693,City,107,Country 139715,City,107,Country 139998,City,107,Country 140155,City,107,Country 140171,City,107,Country 140173,City,107,Country 140227,City,107,Country 140248,City,107,Country 140307,City,107,Country 140346,City,107,Country 140418,City,107,Country 140433,City,107,Country 140478,City,107,Country 140496,City,107,Country 140503,City,107,Country 140502,City,107,Country 140518,City,107,Country 140584,City,107,Country 140635,City,107,Country 140938,City,107,Country 58224,City,107,Country 58454,City,107,Country 58462,City,107,Country 58464,City,107,Country 58473,City,107,Country 58480,City,107,Country 58492,City,107,Country 58605,City,107,Country 58608,City,107,Country 58609,City,107,Country 58729,City,107,Country 58765,City,107,Country 58943,City,107,Country 58980,City,107,Country 59121,City,107,Country 59138,City,107,Country 59191,City,107,Country 59365,City,107,Country 59396,City,107,Country 59401,City,107,Country 59403,City,107,Country 59507,City,107,Country 59522,City,107,Country 59530,City,107,Country 59543,City,107,Country 59539,City,107,Country 59658,City,107,Country 59753,City,107,Country 59845,City,107,Country 59911,City,107,Country 59946,City,107,Country 59998,City,107,Country 60007,City,107,Country 60008,City,107,Country 60093,City,107,Country 60101,City,107,Country 60174,City,107,Country 60208,City,107,Country 60314,City,107,Country 60364,City,107,Country 60357,City,107,Country 60395,City,107,Country 60398,City,107,Country 60429,City,107,Country 60474,City,107,Country 60628,City,107,Country 60732,City,107,Country 60791,City,107,Country 60796,City,107,Country 61017,City,107,Country 61183,City,107,Country 61185,City,107,Country 61229,City,107,Country 61325,City,107,Country 61339,City,107,Country 61539,City,107,Country 61562,City,107,Country 61608,City,107,Country 61782,City,107,Country 61808,City,107,Country 62161,City,107,Country 135248,City,107,Country 135283,City,107,Country 135303,City,107,Country 135304,City,107,Country 135306,City,107,Country 135315,City,107,Country 135317,City,107,Country 135331,City,107,Country 135332,City,107,Country 135333,City,107,Country 135337,City,107,Country 135339,City,107,Country 135341,City,107,Country 135346,City,107,Country 135353,City,107,Country 135360,City,107,Country 135363,City,107,Country 135372,City,107,Country 135387,City,107,Country 135394,City,107,Country 135402,City,107,Country 135408,City,107,Country 135409,City,107,Country 135410,City,107,Country 135422,City,107,Country 135425,City,107,Country 135426,City,107,Country 135434,City,107,Country 135443,City,107,Country 135451,City,107,Country 135470,City,107,Country 135483,City,107,Country 135485,City,107,Country 135487,City,107,Country 135501,City,107,Country 135518,City,107,Country 135522,City,107,Country 135528,City,107,Country 135551,City,107,Country 135557,City,107,Country 135595,City,107,Country 135604,City,107,Country 135608,City,107,Country 135613,City,107,Country 135622,City,107,Country 135624,City,107,Country 135630,City,107,Country 135660,City,107,Country 135670,City,107,Country 135688,City,107,Country 135708,City,107,Country 135714,City,107,Country 135718,City,107,Country 135724,City,107,Country 135728,City,107,Country 135755,City,107,Country 135769,City,107,Country 135779,City,107,Country 135782,City,107,Country 135783,City,107,Country 135784,City,107,Country 135786,City,107,Country 135785,City,107,Country 135792,City,107,Country 135793,City,107,Country 135794,City,107,Country 135799,City,107,Country 135802,City,107,Country 135803,City,107,Country 135804,City,107,Country 135816,City,107,Country 135818,City,107,Country 135823,City,107,Country 135843,City,107,Country 135845,City,107,Country 135851,City,107,Country 135862,City,107,Country 135864,City,107,Country 135866,City,107,Country 135878,City,107,Country 135896,City,107,Country 135900,City,107,Country 135908,City,107,Country 135914,City,107,Country 135922,City,107,Country 135924,City,107,Country 135925,City,107,Country 135930,City,107,Country 135933,City,107,Country 135944,City,107,Country 135962,City,107,Country 135967,City,107,Country 135972,City,107,Country 135975,City,107,Country 135977,City,107,Country 135986,City,107,Country 135990,City,107,Country 135995,City,107,Country 135998,City,107,Country 136004,City,107,Country 136005,City,107,Country 136023,City,107,Country 136031,City,107,Country 136035,City,107,Country 136041,City,107,Country 136046,City,107,Country 136054,City,107,Country 136065,City,107,Country 136086,City,107,Country 136087,City,107,Country 136089,City,107,Country 136097,City,107,Country 136106,City,107,Country 136116,City,107,Country 136143,City,107,Country 136155,City,107,Country 136162,City,107,Country 136167,City,107,Country 136169,City,107,Country 136199,City,107,Country 136176,City,107,Country 136181,City,107,Country 136185,City,107,Country 136191,City,107,Country 136196,City,107,Country 136203,City,107,Country 136205,City,107,Country 136206,City,107,Country 136207,City,107,Country 136209,City,107,Country 136210,City,107,Country 136213,City,107,Country 136218,City,107,Country 136228,City,107,Country 136243,City,107,Country 136246,City,107,Country 136250,City,107,Country 136251,City,107,Country 136255,City,107,Country 136269,City,107,Country 136276,City,107,Country 136278,City,107,Country 136288,City,107,Country 136297,City,107,Country 136312,City,107,Country 136324,City,107,Country 136326,City,107,Country 136327,City,107,Country 136330,City,107,Country 136331,City,107,Country 136332,City,107,Country 136337,City,107,Country 136350,City,107,Country 136355,City,107,Country 136356,City,107,Country 136357,City,107,Country 136358,City,107,Country 136359,City,107,Country 136366,City,107,Country 136372,City,107,Country 136374,City,107,Country 136377,City,107,Country 136379,City,107,Country 136383,City,107,Country 136414,City,107,Country 136415,City,107,Country 136416,City,107,Country 136420,City,107,Country 136421,City,107,Country 136433,City,107,Country 136439,City,107,Country 136440,City,107,Country 136448,City,107,Country 136465,City,107,Country 136488,City,107,Country 136492,City,107,Country 136531,City,107,Country 136532,City,107,Country 136537,City,107,Country 136545,City,107,Country 136549,City,107,Country 136566,City,107,Country 136570,City,107,Country 136573,City,107,Country 136574,City,107,Country 136575,City,107,Country 136576,City,107,Country 136578,City,107,Country 136579,City,107,Country 136583,City,107,Country 136590,City,107,Country 136596,City,107,Country 136613,City,107,Country 136617,City,107,Country 136620,City,107,Country 136669,City,107,Country 136687,City,107,Country 136698,City,107,Country 136700,City,107,Country 136706,City,107,Country 136708,City,107,Country 136715,City,107,Country 136720,City,107,Country 136726,City,107,Country 136733,City,107,Country 136740,City,107,Country 136742,City,107,Country 136745,City,107,Country 136750,City,107,Country 136806,City,107,Country 136808,City,107,Country 136814,City,107,Country 136817,City,107,Country 136820,City,107,Country 136829,City,107,Country 136830,City,107,Country 136842,City,107,Country 136845,City,107,Country 136856,City,107,Country 136863,City,107,Country 136865,City,107,Country 136867,City,107,Country 136869,City,107,Country 136870,City,107,Country 136871,City,107,Country 136877,City,107,Country 136882,City,107,Country 136890,City,107,Country 136911,City,107,Country 136916,City,107,Country 136927,City,107,Country 136930,City,107,Country 136935,City,107,Country 136939,City,107,Country 136941,City,107,Country 136957,City,107,Country 136964,City,107,Country 136967,City,107,Country 136974,City,107,Country 136978,City,107,Country 136982,City,107,Country 136983,City,107,Country 136992,City,107,Country 136997,City,107,Country 137002,City,107,Country 137013,City,107,Country 137022,City,107,Country 137027,City,107,Country 137036,City,107,Country 137052,City,107,Country 137057,City,107,Country 137062,City,107,Country 137090,City,107,Country 137098,City,107,Country 137108,City,107,Country 137109,City,107,Country 137110,City,107,Country 137118,City,107,Country 137119,City,107,Country 137123,City,107,Country 137121,City,107,Country 137122,City,107,Country 137130,City,107,Country 137148,City,107,Country 137184,City,107,Country 137190,City,107,Country 137206,City,107,Country 137214,City,107,Country 137218,City,107,Country 137220,City,107,Country 137221,City,107,Country 137224,City,107,Country 137225,City,107,Country 137228,City,107,Country 137231,City,107,Country 137239,City,107,Country 137240,City,107,Country 137232,City,107,Country 137233,City,107,Country 137234,City,107,Country 137236,City,107,Country 137237,City,107,Country 137238,City,107,Country 137247,City,107,Country 137248,City,107,Country 137259,City,107,Country 137282,City,107,Country 137285,City,107,Country 137287,City,107,Country 137299,City,107,Country 137289,City,107,Country 137291,City,107,Country 137294,City,107,Country 137317,City,107,Country 137341,City,107,Country 137345,City,107,Country 137346,City,107,Country 137361,City,107,Country 137409,City,107,Country 137406,City,107,Country 137407,City,107,Country 137408,City,107,Country 137410,City,107,Country 137415,City,107,Country 137416,City,107,Country 137420,City,107,Country 137427,City,107,Country 137441,City,107,Country 137468,City,107,Country 137471,City,107,Country 137473,City,107,Country 137481,City,107,Country 137495,City,107,Country 137509,City,107,Country 137514,City,107,Country 137522,City,107,Country 137535,City,107,Country 137536,City,107,Country 137539,City,107,Country 137540,City,107,Country 137541,City,107,Country 137561,City,107,Country 137567,City,107,Country 137562,City,107,Country 137564,City,107,Country 137570,City,107,Country 137571,City,107,Country 137573,City,107,Country 137585,City,107,Country 137586,City,107,Country 137588,City,107,Country 137603,City,107,Country 137607,City,107,Country 137619,City,107,Country 137625,City,107,Country 137636,City,107,Country 137640,City,107,Country 137647,City,107,Country 137661,City,107,Country 137663,City,107,Country 137667,City,107,Country 137669,City,107,Country 137678,City,107,Country 137688,City,107,Country 137689,City,107,Country 137692,City,107,Country 137699,City,107,Country 137714,City,107,Country 137715,City,107,Country 137716,City,107,Country 137729,City,107,Country 137738,City,107,Country 137742,City,107,Country 137749,City,107,Country 137760,City,107,Country 137761,City,107,Country 137781,City,107,Country 137809,City,107,Country 137810,City,107,Country 137818,City,107,Country 137819,City,107,Country 137820,City,107,Country 137821,City,107,Country 137824,City,107,Country 137839,City,107,Country 137847,City,107,Country 137883,City,107,Country 137891,City,107,Country 137892,City,107,Country 137905,City,107,Country 137940,City,107,Country 137964,City,107,Country 137970,City,107,Country 137984,City,107,Country 138016,City,107,Country 138030,City,107,Country 138049,City,107,Country 138052,City,107,Country 138053,City,107,Country 138054,City,107,Country 138061,City,107,Country 138066,City,107,Country 138083,City,107,Country 138084,City,107,Country 138085,City,107,Country 138088,City,107,Country 138090,City,107,Country 138095,City,107,Country 138105,City,107,Country 138109,City,107,Country 138110,City,107,Country 138124,City,107,Country 138125,City,107,Country 138126,City,107,Country 138127,City,107,Country 138137,City,107,Country 138141,City,107,Country 138148,City,107,Country 138151,City,107,Country 138153,City,107,Country 138158,City,107,Country 138162,City,107,Country 138172,City,107,Country 138178,City,107,Country 138182,City,107,Country 138187,City,107,Country 138190,City,107,Country 138193,City,107,Country 138194,City,107,Country 138200,City,107,Country 138203,City,107,Country 138207,City,107,Country 138246,City,107,Country 138247,City,107,Country 138250,City,107,Country 138254,City,107,Country 138264,City,107,Country 138271,City,107,Country 138276,City,107,Country 138292,City,107,Country 138297,City,107,Country 138309,City,107,Country 138312,City,107,Country 138332,City,107,Country 138333,City,107,Country 138334,City,107,Country 138335,City,107,Country 138347,City,107,Country 138361,City,107,Country 138363,City,107,Country 138390,City,107,Country 138423,City,107,Country 138439,City,107,Country 138446,City,107,Country 138457,City,107,Country 138460,City,107,Country 138463,City,107,Country 138465,City,107,Country 138467,City,107,Country 138471,City,107,Country 138477,City,107,Country 138494,City,107,Country 138495,City,107,Country 138500,City,107,Country 138540,City,107,Country 138561,City,107,Country 138570,City,107,Country 138576,City,107,Country 138599,City,107,Country 138602,City,107,Country 138603,City,107,Country 138605,City,107,Country 138634,City,107,Country 138641,City,107,Country 138648,City,107,Country 138656,City,107,Country 138674,City,107,Country 138684,City,107,Country 138685,City,107,Country 138686,City,107,Country 138693,City,107,Country 138706,City,107,Country 138712,City,107,Country 138713,City,107,Country 138714,City,107,Country 138715,City,107,Country 138726,City,107,Country 138732,City,107,Country 138735,City,107,Country 138738,City,107,Country 138743,City,107,Country 138744,City,107,Country 138745,City,107,Country 138766,City,107,Country 138769,City,107,Country 138780,City,107,Country 138790,City,107,Country 138804,City,107,Country 138825,City,107,Country 138828,City,107,Country 138842,City,107,Country 138844,City,107,Country 138845,City,107,Country 138853,City,107,Country 138854,City,107,Country 138857,City,107,Country 138863,City,107,Country 138865,City,107,Country 138868,City,107,Country 138869,City,107,Country 138873,City,107,Country 138876,City,107,Country 138900,City,107,Country 138910,City,107,Country 138911,City,107,Country 138912,City,107,Country 138916,City,107,Country 138917,City,107,Country 138930,City,107,Country 138932,City,107,Country 138933,City,107,Country 138936,City,107,Country 138939,City,107,Country 138947,City,107,Country 138952,City,107,Country 138955,City,107,Country 138959,City,107,Country 139002,City,107,Country 139023,City,107,Country 139042,City,107,Country 139045,City,107,Country 139047,City,107,Country 139048,City,107,Country 139055,City,107,Country 139059,City,107,Country 139067,City,107,Country 139080,City,107,Country 139081,City,107,Country 139085,City,107,Country 139087,City,107,Country 139088,City,107,Country 139099,City,107,Country 139102,City,107,Country 139107,City,107,Country 139110,City,107,Country 139115,City,107,Country 139119,City,107,Country 139134,City,107,Country 139154,City,107,Country 139167,City,107,Country 139172,City,107,Country 139183,City,107,Country 139192,City,107,Country 139204,City,107,Country 139208,City,107,Country 139209,City,107,Country 139217,City,107,Country 139219,City,107,Country 139224,City,107,Country 139242,City,107,Country 139240,City,107,Country 139252,City,107,Country 139261,City,107,Country 139271,City,107,Country 139289,City,107,Country 139292,City,107,Country 139297,City,107,Country 139309,City,107,Country 139325,City,107,Country 139351,City,107,Country 139356,City,107,Country 139362,City,107,Country 139365,City,107,Country 139402,City,107,Country 139439,City,107,Country 139441,City,107,Country 139449,City,107,Country 139461,City,107,Country 139462,City,107,Country 139465,City,107,Country 139466,City,107,Country 139467,City,107,Country 139471,City,107,Country 139472,City,107,Country 139473,City,107,Country 139487,City,107,Country 139489,City,107,Country 139510,City,107,Country 139525,City,107,Country 139542,City,107,Country 139544,City,107,Country 139545,City,107,Country 139552,City,107,Country 139558,City,107,Country 139559,City,107,Country 139580,City,107,Country 139581,City,107,Country 139602,City,107,Country 139605,City,107,Country 139625,City,107,Country 139626,City,107,Country 139646,City,107,Country 139654,City,107,Country 139672,City,107,Country 139673,City,107,Country 139677,City,107,Country 139695,City,107,Country 139704,City,107,Country 139705,City,107,Country 139710,City,107,Country 139718,City,107,Country 139723,City,107,Country 139724,City,107,Country 139733,City,107,Country 139734,City,107,Country 139737,City,107,Country 139762,City,107,Country 139777,City,107,Country 139787,City,107,Country 139790,City,107,Country 139797,City,107,Country 139805,City,107,Country 139816,City,107,Country 139825,City,107,Country 139831,City,107,Country 139857,City,107,Country 139859,City,107,Country 139861,City,107,Country 139862,City,107,Country 139907,City,107,Country 139909,City,107,Country 139918,City,107,Country 139935,City,107,Country 139957,City,107,Country 139962,City,107,Country 139981,City,107,Country 139982,City,107,Country 139984,City,107,Country 139989,City,107,Country 139990,City,107,Country 139995,City,107,Country 140000,City,107,Country 140010,City,107,Country 140014,City,107,Country 140032,City,107,Country 140036,City,107,Country 140054,City,107,Country 140067,City,107,Country 140080,City,107,Country 140084,City,107,Country 140103,City,107,Country 140107,City,107,Country 140117,City,107,Country 140124,City,107,Country 140125,City,107,Country 140128,City,107,Country 140129,City,107,Country 140143,City,107,Country 140170,City,107,Country 140186,City,107,Country 140208,City,107,Country 140210,City,107,Country 140222,City,107,Country 140229,City,107,Country 140234,City,107,Country 140235,City,107,Country 140237,City,107,Country 140238,City,107,Country 140241,City,107,Country 140240,City,107,Country 140242,City,107,Country 140244,City,107,Country 140245,City,107,Country 140247,City,107,Country 140249,City,107,Country 140252,City,107,Country 140253,City,107,Country 140254,City,107,Country 140255,City,107,Country 140257,City,107,Country 140259,City,107,Country 140262,City,107,Country 140263,City,107,Country 140264,City,107,Country 140265,City,107,Country 140266,City,107,Country 140269,City,107,Country 140271,City,107,Country 140275,City,107,Country 140278,City,107,Country 140281,City,107,Country 140283,City,107,Country 140286,City,107,Country 140289,City,107,Country 140294,City,107,Country 140591,City,107,Country 140304,City,107,Country 140305,City,107,Country 140306,City,107,Country 140320,City,107,Country 140321,City,107,Country 140325,City,107,Country 140322,City,107,Country 140323,City,107,Country 140324,City,107,Country 140328,City,107,Country 140331,City,107,Country 140339,City,107,Country 140341,City,107,Country 140347,City,107,Country 140403,City,107,Country 140414,City,107,Country 140415,City,107,Country 140424,City,107,Country 140453,City,107,Country 140459,City,107,Country 140474,City,107,Country 140480,City,107,Country 140485,City,107,Country 140486,City,107,Country 140489,City,107,Country 140524,City,107,Country 140536,City,107,Country 140545,City,107,Country 140544,City,107,Country 140552,City,107,Country 140567,City,107,Country 140572,City,107,Country 140598,City,107,Country 140599,City,107,Country 140603,City,107,Country 140611,City,107,Country 140621,City,107,Country 140625,City,107,Country 140630,City,107,Country 140638,City,107,Country 140653,City,107,Country 140654,City,107,Country 140658,City,107,Country 140667,City,107,Country 140687,City,107,Country 140689,City,107,Country 140691,City,107,Country 140705,City,107,Country 140708,City,107,Country 140722,City,107,Country 140734,City,107,Country 140738,City,107,Country 140752,City,107,Country 140756,City,107,Country 140759,City,107,Country 140762,City,107,Country 140767,City,107,Country 140768,City,107,Country 140774,City,107,Country 140777,City,107,Country 140798,City,107,Country 140800,City,107,Country 140803,City,107,Country 140804,City,107,Country 140821,City,107,Country 140822,City,107,Country 140830,City,107,Country 140835,City,107,Country 140841,City,107,Country 140866,City,107,Country 140867,City,107,Country 140869,City,107,Country 140870,City,107,Country 140871,City,107,Country 140879,City,107,Country 140882,City,107,Country 140885,City,107,Country 140886,City,107,Country 140887,City,107,Country 140888,City,107,Country 140904,City,107,Country 140910,City,107,Country 140918,City,107,Country 140922,City,107,Country 140939,City,107,Country 140955,City,107,Country 140961,City,107,Country 140964,City,107,Country 140971,City,107,Country 140978,City,107,Country 140999,City,107,Country 141000,City,107,Country 141030,City,107,Country 141051,City,107,Country 141054,City,107,Country 141055,City,107,Country 141057,City,107,Country 141061,City,107,Country 141063,City,107,Country 141075,City,107,Country 141092,City,107,Country 58211,City,107,Country 58229,City,107,Country 58234,City,107,Country 58249,City,107,Country 58250,City,107,Country 58272,City,107,Country 58273,City,107,Country 58301,City,107,Country 58304,City,107,Country 58309,City,107,Country 58310,City,107,Country 58318,City,107,Country 58327,City,107,Country 58336,City,107,Country 58341,City,107,Country 58358,City,107,Country 58363,City,107,Country 58368,City,107,Country 58369,City,107,Country 58370,City,107,Country 58391,City,107,Country 58399,City,107,Country 58428,City,107,Country 58429,City,107,Country 58431,City,107,Country 58436,City,107,Country 58437,City,107,Country 58438,City,107,Country 58441,City,107,Country 58445,City,107,Country 58471,City,107,Country 58472,City,107,Country 58489,City,107,Country 58490,City,107,Country 58495,City,107,Country 58497,City,107,Country 58501,City,107,Country 58513,City,107,Country 58529,City,107,Country 58531,City,107,Country 58546,City,107,Country 58556,City,107,Country 58558,City,107,Country 58564,City,107,Country 58586,City,107,Country 58587,City,107,Country 58593,City,107,Country 58602,City,107,Country 58623,City,107,Country 58642,City,107,Country 58667,City,107,Country 58673,City,107,Country 58675,City,107,Country 58679,City,107,Country 58678,City,107,Country 58686,City,107,Country 58685,City,107,Country 58687,City,107,Country 58694,City,107,Country 58698,City,107,Country 58697,City,107,Country 58700,City,107,Country 58703,City,107,Country 58704,City,107,Country 58722,City,107,Country 58738,City,107,Country 58742,City,107,Country 58777,City,107,Country 58781,City,107,Country 58801,City,107,Country 58803,City,107,Country 58809,City,107,Country 58811,City,107,Country 58813,City,107,Country 58823,City,107,Country 58828,City,107,Country 58865,City,107,Country 58867,City,107,Country 58879,City,107,Country 58882,City,107,Country 58896,City,107,Country 58899,City,107,Country 58913,City,107,Country 58915,City,107,Country 58951,City,107,Country 58964,City,107,Country 58983,City,107,Country 58986,City,107,Country 58996,City,107,Country 58997,City,107,Country 59001,City,107,Country 59002,City,107,Country 59003,City,107,Country 59006,City,107,Country 59007,City,107,Country 59008,City,107,Country 59009,City,107,Country 59010,City,107,Country 59023,City,107,Country 59031,City,107,Country 59038,City,107,Country 59039,City,107,Country 59047,City,107,Country 59054,City,107,Country 59056,City,107,Country 59059,City,107,Country 59074,City,107,Country 59079,City,107,Country 59080,City,107,Country 59107,City,107,Country 59110,City,107,Country 59116,City,107,Country 59129,City,107,Country 59152,City,107,Country 59186,City,107,Country 59104,City,107,Country 59192,City,107,Country 59214,City,107,Country 59216,City,107,Country 59219,City,107,Country 59220,City,107,Country 59221,City,107,Country 59222,City,107,Country 59223,City,107,Country 59234,City,107,Country 59235,City,107,Country 59243,City,107,Country 59248,City,107,Country 59257,City,107,Country 59289,City,107,Country 59303,City,107,Country 59308,City,107,Country 59312,City,107,Country 59316,City,107,Country 59340,City,107,Country 59342,City,107,Country 59343,City,107,Country 59361,City,107,Country 59363,City,107,Country 59364,City,107,Country 59376,City,107,Country 59382,City,107,Country 59383,City,107,Country 59384,City,107,Country 59414,City,107,Country 59415,City,107,Country 59417,City,107,Country 59418,City,107,Country 59421,City,107,Country 59423,City,107,Country 59424,City,107,Country 59427,City,107,Country 59428,City,107,Country 59431,City,107,Country 59432,City,107,Country 59434,City,107,Country 59441,City,107,Country 59448,City,107,Country 59449,City,107,Country 59450,City,107,Country 59451,City,107,Country 59452,City,107,Country 59453,City,107,Country 59454,City,107,Country 59462,City,107,Country 59463,City,107,Country 59464,City,107,Country 59465,City,107,Country 59467,City,107,Country 59481,City,107,Country 59468,City,107,Country 59469,City,107,Country 59493,City,107,Country 59497,City,107,Country 59498,City,107,Country 59523,City,107,Country 59527,City,107,Country 59529,City,107,Country 59536,City,107,Country 59537,City,107,Country 59540,City,107,Country 59542,City,107,Country 59545,City,107,Country 59546,City,107,Country 59548,City,107,Country 59568,City,107,Country 59571,City,107,Country 59577,City,107,Country 59584,City,107,Country 59602,City,107,Country 59604,City,107,Country 59615,City,107,Country 59616,City,107,Country 59620,City,107,Country 59622,City,107,Country 59621,City,107,Country 59628,City,107,Country 59640,City,107,Country 59645,City,107,Country 59646,City,107,Country 59652,City,107,Country 59666,City,107,Country 59668,City,107,Country 59691,City,107,Country 59695,City,107,Country 59697,City,107,Country 59712,City,107,Country 59724,City,107,Country 59740,City,107,Country 59744,City,107,Country 59749,City,107,Country 59750,City,107,Country 59751,City,107,Country 59754,City,107,Country 59757,City,107,Country 59756,City,107,Country 59760,City,107,Country 59766,City,107,Country 59769,City,107,Country 59778,City,107,Country 59784,City,107,Country 59785,City,107,Country 59786,City,107,Country 59794,City,107,Country 59808,City,107,Country 59813,City,107,Country 59815,City,107,Country 59827,City,107,Country 59834,City,107,Country 59835,City,107,Country 59855,City,107,Country 59876,City,107,Country 59883,City,107,Country 59887,City,107,Country 59885,City,107,Country 59890,City,107,Country 59893,City,107,Country 59927,City,107,Country 59936,City,107,Country 59937,City,107,Country 59945,City,107,Country 59948,City,107,Country 59953,City,107,Country 59955,City,107,Country 59958,City,107,Country 59961,City,107,Country 59977,City,107,Country 60006,City,107,Country 60010,City,107,Country 60017,City,107,Country 60037,City,107,Country 60071,City,107,Country 60074,City,107,Country 60098,City,107,Country 60102,City,107,Country 60103,City,107,Country 60110,City,107,Country 60118,City,107,Country 60131,City,107,Country 60159,City,107,Country 60180,City,107,Country 60182,City,107,Country 60209,City,107,Country 60219,City,107,Country 60223,City,107,Country 60231,City,107,Country 60236,City,107,Country 60238,City,107,Country 60241,City,107,Country 60299,City,107,Country 60303,City,107,Country 60302,City,107,Country 60304,City,107,Country 60317,City,107,Country 60329,City,107,Country 60337,City,107,Country 60378,City,107,Country 60381,City,107,Country 60466,City,107,Country 60500,City,107,Country 60505,City,107,Country 60508,City,107,Country 60510,City,107,Country 60512,City,107,Country 60515,City,107,Country 60544,City,107,Country 60547,City,107,Country 60581,City,107,Country 60582,City,107,Country 60587,City,107,Country 60600,City,107,Country 60603,City,107,Country 60608,City,107,Country 60634,City,107,Country 60635,City,107,Country 60657,City,107,Country 60663,City,107,Country 60664,City,107,Country 60672,City,107,Country 60711,City,107,Country 60733,City,107,Country 60748,City,107,Country 60760,City,107,Country 60761,City,107,Country 60772,City,107,Country 60774,City,107,Country 60775,City,107,Country 60779,City,107,Country 60790,City,107,Country 60804,City,107,Country 60809,City,107,Country 60813,City,107,Country 60815,City,107,Country 60816,City,107,Country 60823,City,107,Country 60854,City,107,Country 60856,City,107,Country 60867,City,107,Country 60886,City,107,Country 60898,City,107,Country 60914,City,107,Country 60922,City,107,Country 60927,City,107,Country 60932,City,107,Country 60931,City,107,Country 60943,City,107,Country 60952,City,107,Country 60962,City,107,Country 60972,City,107,Country 60987,City,107,Country 60991,City,107,Country 61007,City,107,Country 61018,City,107,Country 61020,City,107,Country 61038,City,107,Country 61058,City,107,Country 61087,City,107,Country 61088,City,107,Country 61093,City,107,Country 61095,City,107,Country 61100,City,107,Country 61101,City,107,Country 61122,City,107,Country 61128,City,107,Country 61143,City,107,Country 61146,City,107,Country 61164,City,107,Country 61172,City,107,Country 61179,City,107,Country 61194,City,107,Country 61218,City,107,Country 61231,City,107,Country 61253,City,107,Country 61256,City,107,Country 61266,City,107,Country 61267,City,107,Country 61275,City,107,Country 61278,City,107,Country 61294,City,107,Country 61300,City,107,Country 61308,City,107,Country 61309,City,107,Country 61310,City,107,Country 61329,City,107,Country 61333,City,107,Country 61344,City,107,Country 61346,City,107,Country 61350,City,107,Country 61352,City,107,Country 61356,City,107,Country 61359,City,107,Country 61360,City,107,Country 61388,City,107,Country 61407,City,107,Country 61412,City,107,Country 61436,City,107,Country 61442,City,107,Country 61446,City,107,Country 61448,City,107,Country 61452,City,107,Country 61454,City,107,Country 61466,City,107,Country 61476,City,107,Country 61507,City,107,Country 61512,City,107,Country 61520,City,107,Country 61529,City,107,Country 61532,City,107,Country 61536,City,107,Country 61540,City,107,Country 61548,City,107,Country 61553,City,107,Country 61555,City,107,Country 61575,City,107,Country 61617,City,107,Country 61618,City,107,Country 61624,City,107,Country 61635,City,107,Country 61639,City,107,Country 61645,City,107,Country 61652,City,107,Country 61654,City,107,Country 61659,City,107,Country 61663,City,107,Country 61664,City,107,Country 61669,City,107,Country 61673,City,107,Country 61675,City,107,Country 61681,City,107,Country 61689,City,107,Country 61691,City,107,Country 61692,City,107,Country 61723,City,107,Country 61726,City,107,Country 61728,City,107,Country 61729,City,107,Country 61731,City,107,Country 61736,City,107,Country 61737,City,107,Country 61741,City,107,Country 61755,City,107,Country 61756,City,107,Country 61759,City,107,Country 61760,City,107,Country 61771,City,107,Country 61776,City,107,Country 61784,City,107,Country 61797,City,107,Country 61809,City,107,Country 61811,City,107,Country 61812,City,107,Country 61834,City,107,Country 61838,City,107,Country 61844,City,107,Country 61849,City,107,Country 61853,City,107,Country 61861,City,107,Country 61868,City,107,Country 61870,City,107,Country 61874,City,107,Country 61878,City,107,Country 61882,City,107,Country 61883,City,107,Country 61886,City,107,Country 61892,City,107,Country 61902,City,107,Country 61903,City,107,Country 61906,City,107,Country 61916,City,107,Country 61921,City,107,Country 61923,City,107,Country 61932,City,107,Country 61936,City,107,Country 61951,City,107,Country 61952,City,107,Country 61956,City,107,Country 61963,City,107,Country 61965,City,107,Country 61966,City,107,Country 61974,City,107,Country 61979,City,107,Country 61982,City,107,Country 62038,City,107,Country 62021,City,107,Country 62044,City,107,Country 62051,City,107,Country 62053,City,107,Country 62054,City,107,Country 62060,City,107,Country 62057,City,107,Country 62079,City,107,Country 62085,City,107,Country 62096,City,107,Country 62097,City,107,Country 62107,City,107,Country 62099,City,107,Country 62100,City,107,Country 62102,City,107,Country 62121,City,107,Country 62122,City,107,Country 62123,City,107,Country 62124,City,107,Country 62125,City,107,Country 62126,City,107,Country 62127,City,107,Country 62128,City,107,Country 62130,City,107,Country 62141,City,107,Country 62142,City,107,Country 62152,City,107,Country 62160,City,107,Country 62162,City,107,Country 62164,City,107,Country 62165,City,107,Country 62166,City,107,Country 62169,City,107,Country 62171,City,107,Country 62174,City,107,Country 62177,City,107,Country 62196,City,107,Country 62192,City,107,Country 62199,City,107,Country 62203,City,107,Country 62210,City,107,Country 62211,City,107,Country 62212,City,107,Country 62214,City,107,Country 62223,City,107,Country 62225,City,107,Country 62261,City,107,Country 62278,City,107,Country 62284,City,107,Country 135239,City,107,Country 135299,City,107,Country 135305,City,107,Country 135323,City,107,Country 135453,City,107,Country 135348,City,107,Country 135393,City,107,Country 135404,City,107,Country 135414,City,107,Country 135494,City,107,Country 135553,City,107,Country 135556,City,107,Country 135558,City,107,Country 135576,City,107,Country 135577,City,107,Country 135607,City,107,Country 135617,City,107,Country 135646,City,107,Country 135648,City,107,Country 135665,City,107,Country 135668,City,107,Country 135671,City,107,Country 135683,City,107,Country 135695,City,107,Country 135730,City,107,Country 135733,City,107,Country 135790,City,107,Country 135800,City,107,Country 135801,City,107,Country 135808,City,107,Country 135815,City,107,Country 135846,City,107,Country 135854,City,107,Country 135869,City,107,Country 135872,City,107,Country 135912,City,107,Country 135913,City,107,Country 135969,City,107,Country 135974,City,107,Country 135982,City,107,Country 136017,City,107,Country 136045,City,107,Country 136057,City,107,Country 136070,City,107,Country 136112,City,107,Country 136123,City,107,Country 136140,City,107,Country 136141,City,107,Country 136142,City,107,Country 136225,City,107,Country 136226,City,107,Country 136230,City,107,Country 136231,City,107,Country 136233,City,107,Country 136236,City,107,Country 136262,City,107,Country 136390,City,107,Country 136392,City,107,Country 136395,City,107,Country 136403,City,107,Country 136404,City,107,Country 136411,City,107,Country 136413,City,107,Country 136417,City,107,Country 136450,City,107,Country 136468,City,107,Country 136485,City,107,Country 136490,City,107,Country 136495,City,107,Country 136788,City,107,Country 136852,City,107,Country 136859,City,107,Country 136873,City,107,Country 136888,City,107,Country 137314,City,107,Country 137335,City,107,Country 137637,City,107,Country 137649,City,107,Country 137827,City,107,Country 137838,City,107,Country 137903,City,107,Country 138070,City,107,Country 138089,City,107,Country 138185,City,107,Country 138199,City,107,Country 138236,City,107,Country 138237,City,107,Country 138258,City,107,Country 138283,City,107,Country 138293,City,107,Country 138294,City,107,Country 138299,City,107,Country 138304,City,107,Country 138306,City,107,Country 138336,City,107,Country 138352,City,107,Country 138354,City,107,Country 138377,City,107,Country 138380,City,107,Country 138381,City,107,Country 138385,City,107,Country 138387,City,107,Country 138566,City,107,Country 138568,City,107,Country 138569,City,107,Country 138590,City,107,Country 138623,City,107,Country 138759,City,107,Country 138773,City,107,Country 138792,City,107,Country 138822,City,107,Country 138879,City,107,Country 138901,City,107,Country 138902,City,107,Country 138915,City,107,Country 138924,City,107,Country 138927,City,107,Country 138934,City,107,Country 138950,City,107,Country 138954,City,107,Country 138982,City,107,Country 139014,City,107,Country 139017,City,107,Country 139018,City,107,Country 139019,City,107,Country 139020,City,107,Country 139021,City,107,Country 139022,City,107,Country 139150,City,107,Country 139168,City,107,Country 139184,City,107,Country 139191,City,107,Country 139194,City,107,Country 139196,City,107,Country 139221,City,107,Country 139234,City,107,Country 139269,City,107,Country 139270,City,107,Country 139277,City,107,Country 139287,City,107,Country 139293,City,107,Country 139316,City,107,Country 139319,City,107,Country 139360,City,107,Country 139377,City,107,Country 139438,City,107,Country 139491,City,107,Country 139564,City,107,Country 139567,City,107,Country 139574,City,107,Country 139571,City,107,Country 139577,City,107,Country 139618,City,107,Country 139627,City,107,Country 139653,City,107,Country 139657,City,107,Country 139663,City,107,Country 139668,City,107,Country 139703,City,107,Country 139740,City,107,Country 139781,City,107,Country 139784,City,107,Country 139817,City,107,Country 139818,City,107,Country 139916,City,107,Country 139939,City,107,Country 139950,City,107,Country 139991,City,107,Country 140013,City,107,Country 140148,City,107,Country 140191,City,107,Country 140200,City,107,Country 140201,City,107,Country 140261,City,107,Country 140302,City,107,Country 140467,City,107,Country 140553,City,107,Country 140590,City,107,Country 140609,City,107,Country 140614,City,107,Country 140686,City,107,Country 140695,City,107,Country 140699,City,107,Country 140715,City,107,Country 140716,City,107,Country 140742,City,107,Country 140805,City,107,Country 140806,City,107,Country 140843,City,107,Country 140844,City,107,Country 140845,City,107,Country 140846,City,107,Country 140849,City,107,Country 140853,City,107,Country 140854,City,107,Country 140855,City,107,Country 140856,City,107,Country 140857,City,107,Country 140858,City,107,Country 140859,City,107,Country 140864,City,107,Country 140884,City,107,Country 140896,City,107,Country 140897,City,107,Country 140905,City,107,Country 140906,City,107,Country 140908,City,107,Country 140916,City,107,Country 140921,City,107,Country 140924,City,107,Country 140925,City,107,Country 140937,City,107,Country 140950,City,107,Country 140960,City,107,Country 140966,City,107,Country 140967,City,107,Country 140969,City,107,Country 140980,City,107,Country 140991,City,107,Country 140992,City,107,Country 141002,City,107,Country 141003,City,107,Country 141006,City,107,Country 141008,City,107,Country 141026,City,107,Country 141047,City,107,Country 141049,City,107,Country 141059,City,107,Country 141062,City,107,Country 141067,City,107,Country 141086,City,107,Country 141087,City,107,Country 58225,City,107,Country 58257,City,107,Country 58349,City,107,Country 58352,City,107,Country 58354,City,107,Country 58355,City,107,Country 58416,City,107,Country 58417,City,107,Country 58421,City,107,Country 58669,City,107,Country 58705,City,107,Country 58739,City,107,Country 58766,City,107,Country 58821,City,107,Country 58925,City,107,Country 58938,City,107,Country 58949,City,107,Country 58952,City,107,Country 58987,City,107,Country 59119,City,107,Country 59153,City,107,Country 59154,City,107,Country 59173,City,107,Country 59200,City,107,Country 59208,City,107,Country 59231,City,107,Country 59232,City,107,Country 59392,City,107,Country 59574,City,107,Country 59700,City,107,Country 59722,City,107,Country 59723,City,107,Country 59799,City,107,Country 59800,City,107,Country 59816,City,107,Country 59824,City,107,Country 59930,City,107,Country 59989,City,107,Country 60135,City,107,Country 60149,City,107,Country 60143,City,107,Country 60249,City,107,Country 60253,City,107,Country 60264,City,107,Country 60272,City,107,Country 60308,City,107,Country 60345,City,107,Country 60374,City,107,Country 60377,City,107,Country 60384,City,107,Country 60439,City,107,Country 60461,City,107,Country 60467,City,107,Country 60495,City,107,Country 60501,City,107,Country 60531,City,107,Country 60543,City,107,Country 60557,City,107,Country 60562,City,107,Country 60568,City,107,Country 60624,City,107,Country 60682,City,107,Country 60683,City,107,Country 60687,City,107,Country 60693,City,107,Country 60697,City,107,Country 60713,City,107,Country 60721,City,107,Country 60725,City,107,Country 60729,City,107,Country 60730,City,107,Country 60731,City,107,Country 60736,City,107,Country 60762,City,107,Country 60781,City,107,Country 60782,City,107,Country 60805,City,107,Country 60814,City,107,Country 60818,City,107,Country 60819,City,107,Country 60820,City,107,Country 60833,City,107,Country 60834,City,107,Country 60837,City,107,Country 60841,City,107,Country 60848,City,107,Country 60858,City,107,Country 60850,City,107,Country 60851,City,107,Country 60852,City,107,Country 60859,City,107,Country 60860,City,107,Country 60864,City,107,Country 60865,City,107,Country 60868,City,107,Country 60869,City,107,Country 60873,City,107,Country 60882,City,107,Country 60895,City,107,Country 60901,City,107,Country 60908,City,107,Country 60913,City,107,Country 60955,City,107,Country 60965,City,107,Country 60967,City,107,Country 61077,City,107,Country 61106,City,107,Country 61112,City,107,Country 61121,City,107,Country 61139,City,107,Country 61153,City,107,Country 61207,City,107,Country 61210,City,107,Country 61222,City,107,Country 61238,City,107,Country 61254,City,107,Country 61265,City,107,Country 61268,City,107,Country 61272,City,107,Country 61273,City,107,Country 61279,City,107,Country 61286,City,107,Country 61307,City,107,Country 61340,City,107,Country 61342,City,107,Country 61411,City,107,Country 61430,City,107,Country 61447,City,107,Country 61498,City,107,Country 61523,City,107,Country 61530,City,107,Country 61531,City,107,Country 61567,City,107,Country 61568,City,107,Country 61576,City,107,Country 61596,City,107,Country 61593,City,107,Country 61600,City,107,Country 61607,City,107,Country 61609,City,107,Country 61611,City,107,Country 61612,City,107,Country 61614,City,107,Country 61615,City,107,Country 61616,City,107,Country 61620,City,107,Country 61706,City,107,Country 61714,City,107,Country 61929,City,107,Country 62020,City,107,Country 62023,City,107,Country 62029,City,107,Country 62050,City,107,Country 62072,City,107,Country 62082,City,107,Country 62084,City,107,Country 62101,City,107,Country 62103,City,107,Country 62104,City,107,Country 62111,City,107,Country 62112,City,107,Country 62116,City,107,Country 62120,City,107,Country 62133,City,107,Country 62136,City,107,Country 62138,City,107,Country 62139,City,107,Country 62144,City,107,Country 62240,City,107,Country 62252,City,107,Country 135246,City,107,Country 135256,City,107,Country 135257,City,107,Country 135258,City,107,Country 135259,City,107,Country 135260,City,107,Country 135262,City,107,Country 135263,City,107,Country 135279,City,107,Country 135282,City,107,Country 135287,City,107,Country 135300,City,107,Country 135302,City,107,Country 135318,City,107,Country 135324,City,107,Country 135389,City,107,Country 135390,City,107,Country 135396,City,107,Country 135454,City,107,Country 135455,City,107,Country 135406,City,107,Country 135412,City,107,Country 135413,City,107,Country 135433,City,107,Country 135444,City,107,Country 135519,City,107,Country 135550,City,107,Country 135669,City,107,Country 135685,City,107,Country 135713,City,107,Country 135747,City,107,Country 135787,City,107,Country 135834,City,107,Country 135868,City,107,Country 135885,City,107,Country 135911,City,107,Country 135953,City,107,Country 135957,City,107,Country 135960,City,107,Country 135966,City,107,Country 136028,City,107,Country 136060,City,107,Country 136075,City,107,Country 136083,City,107,Country 136110,City,107,Country 136120,City,107,Country 136121,City,107,Country 136157,City,107,Country 136349,City,107,Country 136353,City,107,Country 136361,City,107,Country 136384,City,107,Country 136412,City,107,Country 136423,City,107,Country 136425,City,107,Country 136436,City,107,Country 136451,City,107,Country 136489,City,107,Country 136493,City,107,Country 136496,City,107,Country 136497,City,107,Country 136540,City,107,Country 136541,City,107,Country 136543,City,107,Country 136544,City,107,Country 136571,City,107,Country 136594,City,107,Country 136609,City,107,Country 136639,City,107,Country 136640,City,107,Country 136650,City,107,Country 136651,City,107,Country 136654,City,107,Country 136656,City,107,Country 136674,City,107,Country 136677,City,107,Country 136690,City,107,Country 136712,City,107,Country 136711,City,107,Country 136721,City,107,Country 136725,City,107,Country 136758,City,107,Country 136776,City,107,Country 136778,City,107,Country 136810,City,107,Country 136880,City,107,Country 136886,City,107,Country 136900,City,107,Country 136931,City,107,Country 136932,City,107,Country 136933,City,107,Country 136950,City,107,Country 137010,City,107,Country 137102,City,107,Country 137103,City,107,Country 137125,City,107,Country 137170,City,107,Country 137172,City,107,Country 137183,City,107,Country 137188,City,107,Country 137209,City,107,Country 137212,City,107,Country 137216,City,107,Country 137268,City,107,Country 137275,City,107,Country 137318,City,107,Country 137329,City,107,Country 137357,City,107,Country 137380,City,107,Country 137385,City,107,Country 137387,City,107,Country 137391,City,107,Country 137394,City,107,Country 137397,City,107,Country 137403,City,107,Country 137458,City,107,Country 137459,City,107,Country 137504,City,107,Country 137511,City,107,Country 137529,City,107,Country 137598,City,107,Country 137609,City,107,Country 137643,City,107,Country 137644,City,107,Country 137648,City,107,Country 137687,City,107,Country 137700,City,107,Country 137702,City,107,Country 137705,City,107,Country 137724,City,107,Country 137735,City,107,Country 137771,City,107,Country 137894,City,107,Country 137942,City,107,Country 137943,City,107,Country 137965,City,107,Country 137977,City,107,Country 138017,City,107,Country 138216,City,107,Country 138242,City,107,Country 138300,City,107,Country 138360,City,107,Country 138374,City,107,Country 138389,City,107,Country 138417,City,107,Country 138450,City,107,Country 138459,City,107,Country 138462,City,107,Country 138481,City,107,Country 138503,City,107,Country 138505,City,107,Country 138534,City,107,Country 138551,City,107,Country 138553,City,107,Country 138564,City,107,Country 138565,City,107,Country 138587,City,107,Country 138664,City,107,Country 138698,City,107,Country 138703,City,107,Country 138727,City,107,Country 138748,City,107,Country 138756,City,107,Country 138757,City,107,Country 138775,City,107,Country 138782,City,107,Country 138794,City,107,Country 138819,City,107,Country 138840,City,107,Country 138889,City,107,Country 138908,City,107,Country 138937,City,107,Country 138940,City,107,Country 138944,City,107,Country 138945,City,107,Country 138946,City,107,Country 138948,City,107,Country 138949,City,107,Country 138973,City,107,Country 138989,City,107,Country 139004,City,107,Country 139010,City,107,Country 139058,City,107,Country 139066,City,107,Country 139076,City,107,Country 139082,City,107,Country 139125,City,107,Country 139149,City,107,Country 139177,City,107,Country 139235,City,107,Country 139249,City,107,Country 139259,City,107,Country 139267,City,107,Country 139282,City,107,Country 139284,City,107,Country 139349,City,107,Country 139372,City,107,Country 139379,City,107,Country 139416,City,107,Country 139444,City,107,Country 139454,City,107,Country 139457,City,107,Country 139463,City,107,Country 139477,City,107,Country 139493,City,107,Country 139494,City,107,Country 139498,City,107,Country 139522,City,107,Country 139530,City,107,Country 139531,City,107,Country 139533,City,107,Country 139595,City,107,Country 139630,City,107,Country 139763,City,107,Country 139764,City,107,Country 139776,City,107,Country 139783,City,107,Country 139799,City,107,Country 139833,City,107,Country 139869,City,107,Country 139880,City,107,Country 139893,City,107,Country 139898,City,107,Country 139899,City,107,Country 139919,City,107,Country 139952,City,107,Country 139953,City,107,Country 140002,City,107,Country 140004,City,107,Country 140003,City,107,Country 140007,City,107,Country 140009,City,107,Country 140008,City,107,Country 140044,City,107,Country 140047,City,107,Country 140064,City,107,Country 140090,City,107,Country 140098,City,107,Country 140120,City,107,Country 140145,City,107,Country 140146,City,107,Country 140150,City,107,Country 140149,City,107,Country 140153,City,107,Country 140156,City,107,Country 140168,City,107,Country 140177,City,107,Country 140180,City,107,Country 140184,City,107,Country 140185,City,107,Country 140189,City,107,Country 140205,City,107,Country 140280,City,107,Country 140287,City,107,Country 140297,City,107,Country 140311,City,107,Country 140317,City,107,Country 140329,City,107,Country 140428,City,107,Country 140473,City,107,Country 140483,City,107,Country 140522,City,107,Country 140546,City,107,Country 140657,City,107,Country 140664,City,107,Country 140661,City,107,Country 140704,City,107,Country 140721,City,107,Country 140724,City,107,Country 140763,City,107,Country 140765,City,107,Country 140771,City,107,Country 140772,City,107,Country 140775,City,107,Country 140812,City,107,Country 140823,City,107,Country 140848,City,107,Country 140851,City,107,Country 140852,City,107,Country 140900,City,107,Country 141068,City,107,Country 141069,City,107,Country 141071,City,107,Country 58204,City,107,Country 58221,City,107,Country 58228,City,107,Country 58232,City,107,Country 58233,City,107,Country 58240,City,107,Country 58254,City,107,Country 58284,City,107,Country 58316,City,107,Country 58317,City,107,Country 58338,City,107,Country 58346,City,107,Country 58350,City,107,Country 58373,City,107,Country 58374,City,107,Country 58375,City,107,Country 58409,City,107,Country 58477,City,107,Country 58478,City,107,Country 58487,City,107,Country 58491,City,107,Country 58514,City,107,Country 58540,City,107,Country 58539,City,107,Country 58547,City,107,Country 58565,City,107,Country 58589,City,107,Country 58622,City,107,Country 58692,City,107,Country 58701,City,107,Country 58794,City,107,Country 58800,City,107,Country 58916,City,107,Country 58928,City,107,Country 58948,City,107,Country 58979,City,107,Country 59081,City,107,Country 59084,City,107,Country 59120,City,107,Country 59176,City,107,Country 59256,City,107,Country 59258,City,107,Country 59262,City,107,Country 59266,City,107,Country 59267,City,107,Country 59269,City,107,Country 59272,City,107,Country 59280,City,107,Country 59295,City,107,Country 59305,City,107,Country 59318,City,107,Country 59326,City,107,Country 59337,City,107,Country 59359,City,107,Country 59373,City,107,Country 59381,City,107,Country 59412,City,107,Country 59485,City,107,Country 59496,City,107,Country 59506,City,107,Country 59508,City,107,Country 59513,City,107,Country 59526,City,107,Country 59533,City,107,Country 59555,City,107,Country 59585,City,107,Country 59586,City,107,Country 59643,City,107,Country 59747,City,107,Country 59758,City,107,Country 59805,City,107,Country 59841,City,107,Country 59862,City,107,Country 59868,City,107,Country 59873,City,107,Country 59878,City,107,Country 59919,City,107,Country 59928,City,107,Country 59951,City,107,Country 59979,City,107,Country 59983,City,107,Country 60001,City,107,Country 60012,City,107,Country 60024,City,107,Country 60032,City,107,Country 60063,City,107,Country 60105,City,107,Country 60123,City,107,Country 60164,City,107,Country 60167,City,107,Country 60177,City,107,Country 60233,City,107,Country 60252,City,107,Country 60276,City,107,Country 60323,City,107,Country 60318,City,107,Country 60334,City,107,Country 60336,City,107,Country 60365,City,107,Country 60360,City,107,Country 60415,City,107,Country 60422,City,107,Country 60426,City,107,Country 60433,City,107,Country 60434,City,107,Country 60437,City,107,Country 60447,City,107,Country 60453,City,107,Country 60476,City,107,Country 60481,City,107,Country 60483,City,107,Country 60487,City,107,Country 60496,City,107,Country 60498,City,107,Country 60521,City,107,Country 60514,City,107,Country 60535,City,107,Country 60536,City,107,Country 60564,City,107,Country 60595,City,107,Country 60609,City,107,Country 60649,City,107,Country 60650,City,107,Country 60653,City,107,Country 60656,City,107,Country 60659,City,107,Country 60660,City,107,Country 60666,City,107,Country 60759,City,107,Country 60826,City,107,Country 60827,City,107,Country 60840,City,107,Country 60862,City,107,Country 60871,City,107,Country 60903,City,107,Country 60933,City,107,Country 60968,City,107,Country 60988,City,107,Country 60992,City,107,Country 60997,City,107,Country 61132,City,107,Country 61161,City,107,Country 61226,City,107,Country 61228,City,107,Country 61245,City,107,Country 61312,City,107,Country 61313,City,107,Country 61354,City,107,Country 61383,City,107,Country 61386,City,107,Country 61389,City,107,Country 61418,City,107,Country 61427,City,107,Country 61440,City,107,Country 61441,City,107,Country 61457,City,107,Country 61465,City,107,Country 61478,City,107,Country 61534,City,107,Country 61535,City,107,Country 61550,City,107,Country 61580,City,107,Country 61586,City,107,Country 61619,City,107,Country 61653,City,107,Country 61655,City,107,Country 61678,City,107,Country 61705,City,107,Country 61710,City,107,Country 61747,City,107,Country 61750,City,107,Country 61818,City,107,Country 61819,City,107,Country 61826,City,107,Country 61901,City,107,Country 61911,City,107,Country 61954,City,107,Country 61993,City,107,Country 62047,City,107,Country 62058,City,107,Country 62059,City,107,Country 62063,City,107,Country 62068,City,107,Country 62076,City,107,Country 62131,City,107,Country 62135,City,107,Country 62137,City,107,Country 62178,City,107,Country 62184,City,107,Country 62193,City,107,Country 62229,City,107,Country 135338,City,107,Country 135370,City,107,Country 135391,City,107,Country 135392,City,107,Country 135465,City,107,Country 135481,City,107,Country 135492,City,107,Country 135514,City,107,Country 135570,City,107,Country 135698,City,107,Country 135711,City,107,Country 135734,City,107,Country 135831,City,107,Country 135882,City,107,Country 135999,City,107,Country 136013,City,107,Country 136048,City,107,Country 136078,City,107,Country 136091,City,107,Country 136102,City,107,Country 136109,City,107,Country 136115,City,107,Country 136132,City,107,Country 136133,City,107,Country 136194,City,107,Country 136249,City,107,Country 136284,City,107,Country 136296,City,107,Country 136305,City,107,Country 136310,City,107,Country 136315,City,107,Country 136318,City,107,Country 136321,City,107,Country 136339,City,107,Country 136354,City,107,Country 136371,City,107,Country 136457,City,107,Country 136458,City,107,Country 136459,City,107,Country 136473,City,107,Country 136476,City,107,Country 136477,City,107,Country 136498,City,107,Country 136501,City,107,Country 136511,City,107,Country 136515,City,107,Country 136520,City,107,Country 136533,City,107,Country 136624,City,107,Country 136636,City,107,Country 136633,City,107,Country 136645,City,107,Country 136686,City,107,Country 136693,City,107,Country 136811,City,107,Country 136833,City,107,Country 136857,City,107,Country 136883,City,107,Country 136948,City,107,Country 137135,City,107,Country 137179,City,107,Country 137180,City,107,Country 137194,City,107,Country 137253,City,107,Country 137254,City,107,Country 137281,City,107,Country 137311,City,107,Country 137413,City,107,Country 137421,City,107,Country 137431,City,107,Country 137432,City,107,Country 137438,City,107,Country 137484,City,107,Country 137494,City,107,Country 137502,City,107,Country 137554,City,107,Country 137579,City,107,Country 137662,City,107,Country 137686,City,107,Country 137723,City,107,Country 137728,City,107,Country 137739,City,107,Country 137752,City,107,Country 137780,City,107,Country 137811,City,107,Country 137815,City,107,Country 137844,City,107,Country 137855,City,107,Country 137861,City,107,Country 137946,City,107,Country 137962,City,107,Country 138004,City,107,Country 138023,City,107,Country 138028,City,107,Country 138050,City,107,Country 138068,City,107,Country 138073,City,107,Country 138116,City,107,Country 138149,City,107,Country 138173,City,107,Country 138192,City,107,Country 138205,City,107,Country 138223,City,107,Country 138226,City,107,Country 138228,City,107,Country 138248,City,107,Country 138267,City,107,Country 138273,City,107,Country 138295,City,107,Country 138311,City,107,Country 138328,City,107,Country 138331,City,107,Country 138350,City,107,Country 138400,City,107,Country 138410,City,107,Country 138426,City,107,Country 138461,City,107,Country 138502,City,107,Country 138558,City,107,Country 138508,City,107,Country 138509,City,107,Country 138560,City,107,Country 138580,City,107,Country 138589,City,107,Country 138592,City,107,Country 138643,City,107,Country 138662,City,107,Country 138710,City,107,Country 138725,City,107,Country 138751,City,107,Country 138793,City,107,Country 138836,City,107,Country 138855,City,107,Country 138861,City,107,Country 138974,City,107,Country 138980,City,107,Country 139000,City,107,Country 139005,City,107,Country 139077,City,107,Country 139100,City,107,Country 139138,City,107,Country 139198,City,107,Country 139232,City,107,Country 139307,City,107,Country 139315,City,107,Country 139321,City,107,Country 139329,City,107,Country 139335,City,107,Country 139336,City,107,Country 139352,City,107,Country 139371,City,107,Country 139378,City,107,Country 139380,City,107,Country 139381,City,107,Country 139399,City,107,Country 139418,City,107,Country 139455,City,107,Country 139488,City,107,Country 139541,City,107,Country 139549,City,107,Country 139573,City,107,Country 139583,City,107,Country 139671,City,107,Country 139678,City,107,Country 139712,City,107,Country 139743,City,107,Country 139779,City,107,Country 139769,City,107,Country 139774,City,107,Country 139852,City,107,Country 139903,City,107,Country 139987,City,107,Country 139999,City,107,Country 140011,City,107,Country 140015,City,107,Country 140031,City,107,Country 140057,City,107,Country 140068,City,107,Country 140105,City,107,Country 140113,City,107,Country 140118,City,107,Country 140123,City,107,Country 140165,City,107,Country 140193,City,107,Country 140215,City,107,Country 140233,City,107,Country 140268,City,107,Country 140291,City,107,Country 140308,City,107,Country 140312,City,107,Country 140615,City,107,Country 140644,City,107,Country 140649,City,107,Country 140709,City,107,Country 140710,City,107,Country 140711,City,107,Country 140712,City,107,Country 140726,City,107,Country 140729,City,107,Country 140732,City,107,Country 140792,City,107,Country 140801,City,107,Country 140813,City,107,Country 140815,City,107,Country 140820,City,107,Country 140936,City,107,Country 140986,City,107,Country 141015,City,107,Country 141025,City,107,Country 141074,City,107,Country 58271,City,107,Country 58275,City,107,Country 58298,City,107,Country 58397,City,107,Country 58398,City,107,Country 58413,City,107,Country 58423,City,107,Country 58563,City,107,Country 58618,City,107,Country 58648,City,107,Country 58652,City,107,Country 58640,City,107,Country 58676,City,107,Country 58683,City,107,Country 58736,City,107,Country 58812,City,107,Country 58835,City,107,Country 58841,City,107,Country 58960,City,107,Country 58971,City,107,Country 58974,City,107,Country 59011,City,107,Country 59020,City,107,Country 59028,City,107,Country 59044,City,107,Country 59045,City,107,Country 59061,City,107,Country 59073,City,107,Country 59098,City,107,Country 59105,City,107,Country 59253,City,107,Country 59254,City,107,Country 59259,City,107,Country 59260,City,107,Country 59268,City,107,Country 59292,City,107,Country 59301,City,107,Country 59333,City,107,Country 59345,City,107,Country 59371,City,107,Country 59375,City,107,Country 59389,City,107,Country 59413,City,107,Country 59419,City,107,Country 59549,City,107,Country 59550,City,107,Country 59570,City,107,Country 59573,City,107,Country 59583,City,107,Country 59593,City,107,Country 59595,City,107,Country 59612,City,107,Country 59618,City,107,Country 59619,City,107,Country 59681,City,107,Country 59679,City,107,Country 59698,City,107,Country 59702,City,107,Country 59714,City,107,Country 59726,City,107,Country 59779,City,107,Country 59814,City,107,Country 59836,City,107,Country 59851,City,107,Country 59907,City,107,Country 59932,City,107,Country 59933,City,107,Country 59943,City,107,Country 60031,City,107,Country 60047,City,107,Country 60048,City,107,Country 60069,City,107,Country 60089,City,107,Country 60092,City,107,Country 60114,City,107,Country 60117,City,107,Country 60151,City,107,Country 60155,City,107,Country 60170,City,107,Country 60266,City,107,Country 60411,City,107,Country 60412,City,107,Country 60423,City,107,Country 60497,City,107,Country 60533,City,107,Country 60546,City,107,Country 60555,City,107,Country 60637,City,107,Country 60638,City,107,Country 60652,City,107,Country 60671,City,107,Country 60690,City,107,Country 60703,City,107,Country 60705,City,107,Country 60719,City,107,Country 60720,City,107,Country 60794,City,107,Country 60830,City,107,Country 60847,City,107,Country 60866,City,107,Country 60877,City,107,Country 60883,City,107,Country 60887,City,107,Country 60888,City,107,Country 60942,City,107,Country 60945,City,107,Country 60976,City,107,Country 60996,City,107,Country 61005,City,107,Country 61029,City,107,Country 61030,City,107,Country 61045,City,107,Country 61065,City,107,Country 61066,City,107,Country 61081,City,107,Country 61092,City,107,Country 61097,City,107,Country 61149,City,107,Country 61173,City,107,Country 61208,City,107,Country 61209,City,107,Country 61213,City,107,Country 61214,City,107,Country 61220,City,107,Country 61223,City,107,Country 61224,City,107,Country 61227,City,107,Country 61237,City,107,Country 61250,City,107,Country 61258,City,107,Country 61260,City,107,Country 61261,City,107,Country 61281,City,107,Country 61283,City,107,Country 61285,City,107,Country 61306,City,107,Country 61319,City,107,Country 61431,City,107,Country 61438,City,107,Country 61483,City,107,Country 61491,City,107,Country 61546,City,107,Country 61560,City,107,Country 61561,City,107,Country 61595,City,107,Country 61628,City,107,Country 61649,City,107,Country 61651,City,107,Country 61670,City,107,Country 61682,City,107,Country 61685,City,107,Country 61697,City,107,Country 61751,City,107,Country 61752,City,107,Country 61767,City,107,Country 61773,City,107,Country 61783,City,107,Country 61807,City,107,Country 61831,City,107,Country 61832,City,107,Country 61850,City,107,Country 61852,City,107,Country 61876,City,107,Country 61894,City,107,Country 61960,City,107,Country 61968,City,107,Country 61969,City,107,Country 61972,City,107,Country 61983,City,107,Country 62001,City,107,Country 62014,City,107,Country 62043,City,107,Country 62046,City,107,Country 62087,City,107,Country 62088,City,107,Country 62168,City,107,Country 62204,City,107,Country 62232,City,107,Country 62258,City,107,Country 62280,City,107,Country 135238,City,107,Country 135244,City,107,Country 135276,City,107,Country 135301,City,107,Country 135371,City,107,Country 135378,City,107,Country 135446,City,107,Country 135466,City,107,Country 135478,City,107,Country 135497,City,107,Country 135513,City,107,Country 135554,City,107,Country 135567,City,107,Country 135590,City,107,Country 135654,City,107,Country 135687,City,107,Country 135696,City,107,Country 135739,City,107,Country 135738,City,107,Country 135757,City,107,Country 135761,City,107,Country 135760,City,107,Country 135774,City,107,Country 135817,City,107,Country 135822,City,107,Country 135828,City,107,Country 135827,City,107,Country 135848,City,107,Country 135907,City,107,Country 135941,City,107,Country 135968,City,107,Country 136021,City,107,Country 136039,City,107,Country 136040,City,107,Country 136049,City,107,Country 136164,City,107,Country 136197,City,107,Country 136198,City,107,Country 136184,City,107,Country 136280,City,107,Country 136389,City,107,Country 136407,City,107,Country 136437,City,107,Country 136503,City,107,Country 136505,City,107,Country 136518,City,107,Country 136522,City,107,Country 136567,City,107,Country 136602,City,107,Country 136615,City,107,Country 136618,City,107,Country 136626,City,107,Country 136637,City,107,Country 136632,City,107,Country 136675,City,107,Country 136684,City,107,Country 136737,City,107,Country 136738,City,107,Country 136759,City,107,Country 136760,City,107,Country 136761,City,107,Country 136762,City,107,Country 136783,City,107,Country 136784,City,107,Country 136799,City,107,Country 136798,City,107,Country 136807,City,107,Country 136864,City,107,Country 136892,City,107,Country 136923,City,107,Country 136924,City,107,Country 136977,City,107,Country 137047,City,107,Country 137048,City,107,Country 137051,City,107,Country 137080,City,107,Country 137082,City,107,Country 137117,City,107,Country 137166,City,107,Country 137153,City,107,Country 137193,City,107,Country 137199,City,107,Country 137200,City,107,Country 137208,City,107,Country 137246,City,107,Country 137244,City,107,Country 137245,City,107,Country 137283,City,107,Country 137296,City,107,Country 137302,City,107,Country 137304,City,107,Country 137336,City,107,Country 137337,City,107,Country 137350,City,107,Country 137354,City,107,Country 137356,City,107,Country 137393,City,107,Country 137417,City,107,Country 137444,City,107,Country 137454,City,107,Country 137486,City,107,Country 137519,City,107,Country 137563,City,107,Country 137578,City,107,Country 137601,City,107,Country 137622,City,107,Country 137645,City,107,Country 137646,City,107,Country 137656,City,107,Country 137670,City,107,Country 137671,City,107,Country 137681,City,107,Country 137695,City,107,Country 137696,City,107,Country 137698,City,107,Country 137697,City,107,Country 137733,City,107,Country 137741,City,107,Country 137804,City,107,Country 137797,City,107,Country 137873,City,107,Country 137893,City,107,Country 137935,City,107,Country 137937,City,107,Country 137949,City,107,Country 138005,City,107,Country 138046,City,107,Country 138071,City,107,Country 138146,City,107,Country 138217,City,107,Country 138265,City,107,Country 138303,City,107,Country 138356,City,107,Country 138391,City,107,Country 138402,City,107,Country 138456,City,107,Country 138511,City,107,Country 138519,City,107,Country 138525,City,107,Country 138528,City,107,Country 138543,City,107,Country 138556,City,107,Country 138563,City,107,Country 138578,City,107,Country 138584,City,107,Country 138593,City,107,Country 138608,City,107,Country 138622,City,107,Country 138645,City,107,Country 138646,City,107,Country 138650,City,107,Country 138661,City,107,Country 138665,City,107,Country 138666,City,107,Country 138746,City,107,Country 138768,City,107,Country 138791,City,107,Country 138803,City,107,Country 138807,City,107,Country 138829,City,107,Country 138880,City,107,Country 138890,City,107,Country 138958,City,107,Country 138964,City,107,Country 138978,City,107,Country 138994,City,107,Country 139073,City,107,Country 139092,City,107,Country 139118,City,107,Country 139166,City,107,Country 139170,City,107,Country 139171,City,107,Country 139193,City,107,Country 139202,City,107,Country 139205,City,107,Country 139237,City,107,Country 139244,City,107,Country 139265,City,107,Country 139288,City,107,Country 139298,City,107,Country 139301,City,107,Country 139337,City,107,Country 139350,City,107,Country 139370,City,107,Country 139374,City,107,Country 139385,City,107,Country 139387,City,107,Country 139423,City,107,Country 139424,City,107,Country 139495,City,107,Country 139523,City,107,Country 139551,City,107,Country 139587,City,107,Country 139607,City,107,Country 139613,City,107,Country 139629,City,107,Country 139632,City,107,Country 139637,City,107,Country 139711,City,107,Country 139730,City,107,Country 139770,City,107,Country 139782,City,107,Country 139810,City,107,Country 139845,City,107,Country 139846,City,107,Country 139848,City,107,Country 139849,City,107,Country 139851,City,107,Country 139864,City,107,Country 139879,City,107,Country 139881,City,107,Country 139888,City,107,Country 139889,City,107,Country 139891,City,107,Country 139892,City,107,Country 139904,City,107,Country 139915,City,107,Country 139929,City,107,Country 139966,City,107,Country 139973,City,107,Country 139980,City,107,Country 140072,City,107,Country 140073,City,107,Country 140102,City,107,Country 140134,City,107,Country 140163,City,107,Country 140211,City,107,Country 140224,City,107,Country 140303,City,107,Country 140314,City,107,Country 140319,City,107,Country 140326,City,107,Country 140330,City,107,Country 140352,City,107,Country 140377,City,107,Country 140392,City,107,Country 140399,City,107,Country 140400,City,107,Country 140405,City,107,Country 140406,City,107,Country 140481,City,107,Country 140493,City,107,Country 140498,City,107,Country 140510,City,107,Country 140511,City,107,Country 140513,City,107,Country 140517,City,107,Country 140519,City,107,Country 140527,City,107,Country 140537,City,107,Country 140543,City,107,Country 140547,City,107,Country 140550,City,107,Country 140554,City,107,Country 140570,City,107,Country 140571,City,107,Country 140574,City,107,Country 140580,City,107,Country 140682,City,107,Country 140692,City,107,Country 140940,City,107,Country 140941,City,107,Country 140943,City,107,Country 140947,City,107,Country 140985,City,107,Country 140996,City,107,Country 58222,City,107,Country 58237,City,107,Country 58252,City,107,Country 58286,City,107,Country 58347,City,107,Country 58367,City,107,Country 58390,City,107,Country 58422,City,107,Country 58448,City,107,Country 58457,City,107,Country 58509,City,107,Country 58510,City,107,Country 58517,City,107,Country 58541,City,107,Country 58542,City,107,Country 58544,City,107,Country 58569,City,107,Country 58597,City,107,Country 58625,City,107,Country 58643,City,107,Country 58644,City,107,Country 58635,City,107,Country 58639,City,107,Country 58689,City,107,Country 58702,City,107,Country 58714,City,107,Country 58716,City,107,Country 58718,City,107,Country 58744,City,107,Country 58747,City,107,Country 58749,City,107,Country 58750,City,107,Country 58808,City,107,Country 58825,City,107,Country 58830,City,107,Country 58831,City,107,Country 58833,City,107,Country 58851,City,107,Country 58834,City,107,Country 58836,City,107,Country 58869,City,107,Country 58878,City,107,Country 58886,City,107,Country 58893,City,107,Country 58901,City,107,Country 58903,City,107,Country 58923,City,107,Country 58929,City,107,Country 58936,City,107,Country 58944,City,107,Country 58978,City,107,Country 59018,City,107,Country 59026,City,107,Country 59036,City,107,Country 59100,City,107,Country 59102,City,107,Country 59103,City,107,Country 59136,City,107,Country 59143,City,107,Country 59145,City,107,Country 59148,City,107,Country 59162,City,107,Country 59165,City,107,Country 59175,City,107,Country 59218,City,107,Country 59224,City,107,Country 59237,City,107,Country 59240,City,107,Country 59261,City,107,Country 59263,City,107,Country 59264,City,107,Country 59286,City,107,Country 59290,City,107,Country 59319,City,107,Country 59360,City,107,Country 59379,City,107,Country 59386,City,107,Country 59390,City,107,Country 59400,City,107,Country 59407,City,107,Country 59505,City,107,Country 59525,City,107,Country 59617,City,107,Country 59638,City,107,Country 59639,City,107,Country 59641,City,107,Country 59699,City,107,Country 59710,City,107,Country 59770,City,107,Country 59803,City,107,Country 59804,City,107,Country 59857,City,107,Country 59858,City,107,Country 59872,City,107,Country 59895,City,107,Country 59900,City,107,Country 59926,City,107,Country 59949,City,107,Country 59993,City,107,Country 59990,City,107,Country 60005,City,107,Country 60016,City,107,Country 60018,City,107,Country 60026,City,107,Country 60059,City,107,Country 60091,City,107,Country 60104,City,107,Country 60127,City,107,Country 60128,City,107,Country 60166,City,107,Country 60168,City,107,Country 60175,City,107,Country 60217,City,107,Country 60224,City,107,Country 60227,City,107,Country 60228,City,107,Country 60267,City,107,Country 60285,City,107,Country 60313,City,107,Country 60332,City,107,Country 60430,City,107,Country 60436,City,107,Country 60443,City,107,Country 60444,City,107,Country 60470,City,107,Country 60560,City,107,Country 60570,City,107,Country 60617,City,107,Country 60625,City,107,Country 60632,City,107,Country 60633,City,107,Country 60636,City,107,Country 60673,City,107,Country 60688,City,107,Country 60709,City,107,Country 60717,City,107,Country 60735,City,107,Country 60773,City,107,Country 60780,City,107,Country 60793,City,107,Country 60797,City,107,Country 60843,City,107,Country 60844,City,107,Country 60846,City,107,Country 60853,City,107,Country 60863,City,107,Country 60894,City,107,Country 60947,City,107,Country 60983,City,107,Country 61004,City,107,Country 61006,City,107,Country 61037,City,107,Country 61040,City,107,Country 61050,City,107,Country 61052,City,107,Country 61069,City,107,Country 61070,City,107,Country 61083,City,107,Country 61085,City,107,Country 61094,City,107,Country 61108,City,107,Country 61135,City,107,Country 61155,City,107,Country 61180,City,107,Country 61181,City,107,Country 61186,City,107,Country 61204,City,107,Country 61234,City,107,Country 61243,City,107,Country 61244,City,107,Country 61251,City,107,Country 61372,City,107,Country 61385,City,107,Country 61410,City,107,Country 61472,City,107,Country 61490,City,107,Country 61492,City,107,Country 61589,City,107,Country 61594,City,107,Country 61621,City,107,Country 61623,City,107,Country 61627,City,107,Country 61633,City,107,Country 61637,City,107,Country 61646,City,107,Country 61658,City,107,Country 61666,City,107,Country 61787,City,107,Country 61829,City,107,Country 61857,City,107,Country 61879,City,107,Country 61905,City,107,Country 61910,City,107,Country 61913,City,107,Country 61915,City,107,Country 61925,City,107,Country 61957,City,107,Country 61964,City,107,Country 61986,City,107,Country 61994,City,107,Country 62062,City,107,Country 62163,City,107,Country 62218,City,107,Country 62253,City,107,Country 135275,City,107,Country 135417,City,107,Country 135447,City,107,Country 135468,City,107,Country 135635,City,107,Country 135666,City,107,Country 135681,City,107,Country 135710,City,107,Country 135880,City,107,Country 135898,City,107,Country 135901,City,107,Country 136022,City,107,Country 136024,City,107,Country 136368,City,107,Country 136559,City,107,Country 136612,City,107,Country 136719,City,107,Country 136772,City,107,Country 136951,City,107,Country 137045,City,107,Country 137140,City,107,Country 137147,City,107,Country 137159,City,107,Country 137319,City,107,Country 137353,City,107,Country 137520,City,107,Country 137569,City,107,Country 137683,City,107,Country 137713,City,107,Country 137744,City,107,Country 137764,City,107,Country 137773,City,107,Country 137774,City,107,Country 137858,City,107,Country 137888,City,107,Country 137920,City,107,Country 137999,City,107,Country 138103,City,107,Country 138104,City,107,Country 138252,City,107,Country 138397,City,107,Country 138398,City,107,Country 138479,City,107,Country 138506,City,107,Country 138582,City,107,Country 138614,City,107,Country 138658,City,107,Country 138677,City,107,Country 138721,City,107,Country 138943,City,107,Country 138976,City,107,Country 139146,City,107,Country 139147,City,107,Country 139158,City,107,Country 139173,City,107,Country 139317,City,107,Country 139539,City,107,Country 139647,City,107,Country 139720,City,107,Country 139809,City,107,Country 139920,City,107,Country 139974,City,107,Country 140028,City,107,Country 140354,City,107,Country 140359,City,107,Country 140380,City,107,Country 140404,City,107,Country 140409,City,107,Country 140430,City,107,Country 140447,City,107,Country 140450,City,107,Country 140469,City,107,Country 140472,City,107,Country 140579,City,107,Country 140719,City,107,Country 140720,City,107,Country 140786,City,107,Country 140807,City,107,Country 140993,City,107,Country 140994,City,107,Country 141001,City,107,Country 141021,City,107,Country 141039,City,107,Country 141046,City,107,Country 141072,City,107,Country 141089,City,107,Country 58227,City,107,Country 58278,City,107,Country 58283,City,107,Country 58314,City,107,Country 58325,City,107,Country 58328,City,107,Country 58404,City,107,Country 58446,City,107,Country 58482,City,107,Country 58595,City,107,Country 58615,City,107,Country 58666,City,107,Country 58715,City,107,Country 58767,City,107,Country 58792,City,107,Country 58839,City,107,Country 58845,City,107,Country 58877,City,107,Country 58902,City,107,Country 58990,City,107,Country 59042,City,107,Country 59158,City,107,Country 59180,City,107,Country 59444,City,107,Country 59931,City,107,Country 59940,City,107,Country 60015,City,107,Country 60090,City,107,Country 60096,City,107,Country 60133,City,107,Country 60239,City,107,Country 60254,City,107,Country 60261,City,107,Country 60341,City,107,Country 60471,City,107,Country 60641,City,107,Country 60642,City,107,Country 60696,City,107,Country 60699,City,107,Country 60716,City,107,Country 60828,City,107,Country 60845,City,107,Country 60995,City,107,Country 61026,City,107,Country 61055,City,107,Country 61056,City,107,Country 61098,City,107,Country 61187,City,107,Country 61232,City,107,Country 61295,City,107,Country 61327,City,107,Country 61499,City,107,Country 61501,City,107,Country 61569,City,107,Country 61597,City,107,Country 61668,City,107,Country 61742,City,107,Country 61898,City,107,Country 135235,City,107,Country 135242,City,107,Country 135290,City,107,Country 135292,City,107,Country 135307,City,107,Country 135312,City,107,Country 135321,City,107,Country 135343,City,107,Country 135355,City,107,Country 135358,City,107,Country 135368,City,107,Country 135376,City,107,Country 135415,City,107,Country 135424,City,107,Country 135427,City,107,Country 135436,City,107,Country 135441,City,107,Country 135442,City,107,Country 135498,City,107,Country 135503,City,107,Country 135506,City,107,Country 135555,City,107,Country 135559,City,107,Country 135572,City,107,Country 135575,City,107,Country 135598,City,107,Country 135605,City,107,Country 135611,City,107,Country 135632,City,107,Country 135633,City,107,Country 135634,City,107,Country 135639,City,107,Country 135637,City,107,Country 135651,City,107,Country 135652,City,107,Country 135658,City,107,Country 135659,City,107,Country 135662,City,107,Country 135663,City,107,Country 135693,City,107,Country 135735,City,107,Country 135737,City,107,Country 135741,City,107,Country 135765,City,107,Country 135766,City,107,Country 135772,City,107,Country 135791,City,107,Country 135807,City,107,Country 135821,City,107,Country 135832,City,107,Country 135833,City,107,Country 135842,City,107,Country 135871,City,107,Country 135893,City,107,Country 135897,City,107,Country 135899,City,107,Country 135905,City,107,Country 135916,City,107,Country 135927,City,107,Country 135949,City,107,Country 135961,City,107,Country 135988,City,107,Country 136002,City,107,Country 136026,City,107,Country 136027,City,107,Country 136037,City,107,Country 136042,City,107,Country 136050,City,107,Country 136084,City,107,Country 136100,City,107,Country 136117,City,107,Country 136127,City,107,Country 136128,City,107,Country 136137,City,107,Country 136146,City,107,Country 136215,City,107,Country 136229,City,107,Country 136232,City,107,Country 136237,City,107,Country 136239,City,107,Country 136240,City,107,Country 136241,City,107,Country 136245,City,107,Country 136263,City,107,Country 136274,City,107,Country 136275,City,107,Country 136283,City,107,Country 136292,City,107,Country 136294,City,107,Country 136303,City,107,Country 136309,City,107,Country 136311,City,107,Country 136319,City,107,Country 136346,City,107,Country 136348,City,107,Country 136363,City,107,Country 136410,City,107,Country 136427,City,107,Country 136432,City,107,Country 136438,City,107,Country 136446,City,107,Country 136442,City,107,Country 136443,City,107,Country 136444,City,107,Country 136460,City,107,Country 136464,City,107,Country 136487,City,107,Country 136516,City,107,Country 136517,City,107,Country 136519,City,107,Country 136534,City,107,Country 136542,City,107,Country 136546,City,107,Country 136547,City,107,Country 136554,City,107,Country 136569,City,107,Country 136593,City,107,Country 136600,City,107,Country 136603,City,107,Country 136606,City,107,Country 136614,City,107,Country 136619,City,107,Country 136631,City,107,Country 136644,City,107,Country 136649,City,107,Country 136663,City,107,Country 136666,City,107,Country 136671,City,107,Country 136679,City,107,Country 136689,City,107,Country 136691,City,107,Country 136696,City,107,Country 136699,City,107,Country 136702,City,107,Country 136704,City,107,Country 136713,City,107,Country 136735,City,107,Country 136754,City,107,Country 136773,City,107,Country 136792,City,107,Country 136822,City,107,Country 136851,City,107,Country 136854,City,107,Country 136893,City,107,Country 136912,City,107,Country 136925,City,107,Country 136934,City,107,Country 136938,City,107,Country 136942,City,107,Country 136955,City,107,Country 136979,City,107,Country 136980,City,107,Country 136984,City,107,Country 137008,City,107,Country 137059,City,107,Country 137068,City,107,Country 137085,City,107,Country 137114,City,107,Country 137116,City,107,Country 137120,City,107,Country 137176,City,107,Country 137187,City,107,Country 137198,City,107,Country 137202,City,107,Country 137204,City,107,Country 137262,City,107,Country 137270,City,107,Country 137274,City,107,Country 137277,City,107,Country 137278,City,107,Country 137297,City,107,Country 137362,City,107,Country 137411,City,107,Country 137412,City,107,Country 137419,City,107,Country 137424,City,107,Country 137425,City,107,Country 137437,City,107,Country 137447,City,107,Country 137449,City,107,Country 137460,City,107,Country 137463,City,107,Country 137483,City,107,Country 137489,City,107,Country 137490,City,107,Country 137492,City,107,Country 137501,City,107,Country 137530,City,107,Country 137531,City,107,Country 137532,City,107,Country 137574,City,107,Country 137583,City,107,Country 137608,City,107,Country 137615,City,107,Country 137616,City,107,Country 137641,City,107,Country 137650,City,107,Country 137677,City,107,Country 137684,City,107,Country 137703,City,107,Country 137706,City,107,Country 137720,City,107,Country 137740,City,107,Country 137758,City,107,Country 137759,City,107,Country 137765,City,107,Country 137829,City,107,Country 137833,City,107,Country 137836,City,107,Country 137843,City,107,Country 137846,City,107,Country 137932,City,107,Country 137865,City,107,Country 137867,City,107,Country 137912,City,107,Country 137917,City,107,Country 137958,City,107,Country 137959,City,107,Country 137966,City,107,Country 137973,City,107,Country 137975,City,107,Country 137992,City,107,Country 137995,City,107,Country 137996,City,107,Country 138002,City,107,Country 138029,City,107,Country 138036,City,107,Country 138041,City,107,Country 138045,City,107,Country 138055,City,107,Country 138067,City,107,Country 138081,City,107,Country 138099,City,107,Country 138102,City,107,Country 138108,City,107,Country 138118,City,107,Country 138128,City,107,Country 138140,City,107,Country 138142,City,107,Country 138143,City,107,Country 138147,City,107,Country 138156,City,107,Country 138160,City,107,Country 138161,City,107,Country 138208,City,107,Country 138227,City,107,Country 138255,City,107,Country 138281,City,107,Country 138285,City,107,Country 138289,City,107,Country 138296,City,107,Country 138305,City,107,Country 138319,City,107,Country 138320,City,107,Country 138338,City,107,Country 138339,City,107,Country 138358,City,107,Country 138366,City,107,Country 138370,City,107,Country 138368,City,107,Country 138386,City,107,Country 138413,City,107,Country 138427,City,107,Country 138428,City,107,Country 138431,City,107,Country 138436,City,107,Country 138442,City,107,Country 138451,City,107,Country 138453,City,107,Country 138475,City,107,Country 138490,City,107,Country 138504,City,107,Country 138513,City,107,Country 138515,City,107,Country 138514,City,107,Country 138583,City,107,Country 138594,City,107,Country 138601,City,107,Country 138606,City,107,Country 138615,City,107,Country 138627,City,107,Country 138647,City,107,Country 138651,City,107,Country 138657,City,107,Country 138670,City,107,Country 138671,City,107,Country 138673,City,107,Country 138682,City,107,Country 138683,City,107,Country 138700,City,107,Country 138711,City,107,Country 138719,City,107,Country 138729,City,107,Country 138731,City,107,Country 138749,City,107,Country 138763,City,107,Country 138787,City,107,Country 138788,City,107,Country 138810,City,107,Country 138812,City,107,Country 138821,City,107,Country 138824,City,107,Country 138831,City,107,Country 138835,City,107,Country 138849,City,107,Country 138874,City,107,Country 138884,City,107,Country 138887,City,107,Country 138938,City,107,Country 138951,City,107,Country 138953,City,107,Country 138986,City,107,Country 139007,City,107,Country 139027,City,107,Country 139028,City,107,Country 139043,City,107,Country 139062,City,107,Country 139069,City,107,Country 139071,City,107,Country 139094,City,107,Country 139098,City,107,Country 139103,City,107,Country 139132,City,107,Country 139133,City,107,Country 139142,City,107,Country 139141,City,107,Country 139153,City,107,Country 139190,City,107,Country 139195,City,107,Country 139248,City,107,Country 139239,City,107,Country 139241,City,107,Country 139266,City,107,Country 139304,City,107,Country 139308,City,107,Country 139323,City,107,Country 139340,City,107,Country 139347,City,107,Country 139348,City,107,Country 139353,City,107,Country 139384,City,107,Country 139409,City,107,Country 139420,City,107,Country 139435,City,107,Country 139437,City,107,Country 139443,City,107,Country 139452,City,107,Country 139482,City,107,Country 139500,City,107,Country 139506,City,107,Country 139515,City,107,Country 139519,City,107,Country 139540,City,107,Country 139548,City,107,Country 139560,City,107,Country 139590,City,107,Country 139591,City,107,Country 139594,City,107,Country 139601,City,107,Country 139603,City,107,Country 139604,City,107,Country 139606,City,107,Country 139608,City,107,Country 139612,City,107,Country 139623,City,107,Country 139624,City,107,Country 139643,City,107,Country 139645,City,107,Country 139649,City,107,Country 139650,City,107,Country 139656,City,107,Country 139675,City,107,Country 139676,City,107,Country 139680,City,107,Country 139686,City,107,Country 139714,City,107,Country 139744,City,107,Country 139758,City,107,Country 139772,City,107,Country 139789,City,107,Country 139804,City,107,Country 139820,City,107,Country 139828,City,107,Country 139826,City,107,Country 139843,City,107,Country 139854,City,107,Country 139856,City,107,Country 139858,City,107,Country 139910,City,107,Country 139913,City,107,Country 139927,City,107,Country 139956,City,107,Country 139959,City,107,Country 139958,City,107,Country 139960,City,107,Country 139964,City,107,Country 139979,City,107,Country 140026,City,107,Country 140029,City,107,Country 140030,City,107,Country 140033,City,107,Country 140034,City,107,Country 140035,City,107,Country 140039,City,107,Country 140066,City,107,Country 140086,City,107,Country 140099,City,107,Country 140100,City,107,Country 140109,City,107,Country 140126,City,107,Country 140139,City,107,Country 140157,City,107,Country 140166,City,107,Country 140175,City,107,Country 140199,City,107,Country 140225,City,107,Country 140260,City,107,Country 140282,City,107,Country 140292,City,107,Country 140301,City,107,Country 140310,City,107,Country 140384,City,107,Country 140388,City,107,Country 140391,City,107,Country 140408,City,107,Country 140411,City,107,Country 140412,City,107,Country 140445,City,107,Country 140451,City,107,Country 140452,City,107,Country 140461,City,107,Country 140490,City,107,Country 140551,City,107,Country 140563,City,107,Country 140566,City,107,Country 140568,City,107,Country 140583,City,107,Country 140588,City,107,Country 140616,City,107,Country 140648,City,107,Country 140652,City,107,Country 140655,City,107,Country 140665,City,107,Country 140674,City,107,Country 140685,City,107,Country 140688,City,107,Country 140696,City,107,Country 140700,City,107,Country 140701,City,107,Country 140703,City,107,Country 140735,City,107,Country 140748,City,107,Country 140776,City,107,Country 140791,City,107,Country 140793,City,107,Country 140794,City,107,Country 140826,City,107,Country 140831,City,107,Country 140833,City,107,Country 140832,City,107,Country 140839,City,107,Country 140868,City,107,Country 140872,City,107,Country 140912,City,107,Country 140930,City,107,Country 140926,City,107,Country 140933,City,107,Country 140949,City,107,Country 140962,City,107,Country 140970,City,107,Country 141016,City,107,Country 141018,City,107,Country 141022,City,107,Country 141076,City,107,Country 141077,City,107,Country 141082,City,107,Country 141085,City,107,Country 141093,City,107,Country 58270,City,107,Country 58292,City,107,Country 58312,City,107,Country 58326,City,107,Country 58340,City,107,Country 58377,City,107,Country 58378,City,107,Country 58380,City,107,Country 58381,City,107,Country 58388,City,107,Country 58394,City,107,Country 58412,City,107,Country 58433,City,107,Country 58434,City,107,Country 58449,City,107,Country 58456,City,107,Country 58468,City,107,Country 58494,City,107,Country 58496,City,107,Country 58503,City,107,Country 58530,City,107,Country 58535,City,107,Country 58560,City,107,Country 58562,City,107,Country 58575,City,107,Country 58583,City,107,Country 58631,City,107,Country 58645,City,107,Country 58649,City,107,Country 58653,City,107,Country 58674,City,107,Country 58690,City,107,Country 58691,City,107,Country 58695,City,107,Country 58696,City,107,Country 58778,City,107,Country 58779,City,107,Country 58780,City,107,Country 58784,City,107,Country 58805,City,107,Country 58826,City,107,Country 58854,City,107,Country 58855,City,107,Country 58857,City,107,Country 58858,City,107,Country 58860,City,107,Country 58861,City,107,Country 58848,City,107,Country 58864,City,107,Country 58874,City,107,Country 58895,City,107,Country 58904,City,107,Country 58937,City,107,Country 58940,City,107,Country 58942,City,107,Country 58946,City,107,Country 58955,City,107,Country 58957,City,107,Country 58963,City,107,Country 58967,City,107,Country 58968,City,107,Country 58969,City,107,Country 58985,City,107,Country 58988,City,107,Country 58995,City,107,Country 59004,City,107,Country 59005,City,107,Country 59040,City,107,Country 59048,City,107,Country 59068,City,107,Country 59082,City,107,Country 59113,City,107,Country 59155,City,107,Country 59171,City,107,Country 59181,City,107,Country 59185,City,107,Country 59187,City,107,Country 59189,City,107,Country 59206,City,107,Country 59210,City,107,Country 59230,City,107,Country 59241,City,107,Country 59250,City,107,Country 59249,City,107,Country 59271,City,107,Country 59275,City,107,Country 59313,City,107,Country 59317,City,107,Country 59334,City,107,Country 59344,City,107,Country 59372,City,107,Country 59422,City,107,Country 59425,City,107,Country 59442,City,107,Country 59447,City,107,Country 59461,City,107,Country 59474,City,107,Country 59578,City,107,Country 59613,City,107,Country 59589,City,107,Country 59591,City,107,Country 59597,City,107,Country 59601,City,107,Country 59653,City,107,Country 59633,City,107,Country 59642,City,107,Country 59649,City,107,Country 59663,City,107,Country 59665,City,107,Country 59675,City,107,Country 59680,City,107,Country 59676,City,107,Country 59685,City,107,Country 59690,City,107,Country 59718,City,107,Country 59719,City,107,Country 59748,City,107,Country 59752,City,107,Country 59763,City,107,Country 59764,City,107,Country 59765,City,107,Country 59773,City,107,Country 59776,City,107,Country 59788,City,107,Country 59795,City,107,Country 59802,City,107,Country 59809,City,107,Country 59826,City,107,Country 59839,City,107,Country 59844,City,107,Country 59846,City,107,Country 59901,City,107,Country 59917,City,107,Country 59920,City,107,Country 59922,City,107,Country 59924,City,107,Country 59938,City,107,Country 59965,City,107,Country 59968,City,107,Country 59969,City,107,Country 59974,City,107,Country 59975,City,107,Country 59984,City,107,Country 59987,City,107,Country 60019,City,107,Country 60025,City,107,Country 60034,City,107,Country 60070,City,107,Country 60073,City,107,Country 60086,City,107,Country 60087,City,107,Country 60112,City,107,Country 60121,City,107,Country 60124,City,107,Country 60129,City,107,Country 60147,City,107,Country 60171,City,107,Country 60191,City,107,Country 60193,City,107,Country 60194,City,107,Country 60196,City,107,Country 60199,City,107,Country 60202,City,107,Country 60181,City,107,Country 60183,City,107,Country 60185,City,107,Country 60207,City,107,Country 60216,City,107,Country 60250,City,107,Country 60262,City,107,Country 60263,City,107,Country 60273,City,107,Country 60279,City,107,Country 60284,City,107,Country 60290,City,107,Country 60292,City,107,Country 60293,City,107,Country 60297,City,107,Country 60301,City,107,Country 60300,City,107,Country 60307,City,107,Country 60331,City,107,Country 60338,City,107,Country 60343,City,107,Country 60351,City,107,Country 60366,City,107,Country 60373,City,107,Country 60375,City,107,Country 60386,City,107,Country 60393,City,107,Country 60420,City,107,Country 60440,City,107,Country 60442,City,107,Country 60448,City,107,Country 60452,City,107,Country 60456,City,107,Country 60477,City,107,Country 60478,City,107,Country 60465,City,107,Country 60502,City,107,Country 60520,City,107,Country 60526,City,107,Country 60530,City,107,Country 60534,City,107,Country 60541,City,107,Country 60545,City,107,Country 60550,City,107,Country 60551,City,107,Country 60612,City,107,Country 60630,City,107,Country 60644,City,107,Country 60647,City,107,Country 60661,City,107,Country 60669,City,107,Country 60681,City,107,Country 60692,City,107,Country 60706,City,107,Country 60707,City,107,Country 60708,City,107,Country 60710,City,107,Country 60738,City,107,Country 60746,City,107,Country 60787,City,107,Country 60810,City,107,Country 60849,City,107,Country 60890,City,107,Country 60893,City,107,Country 60900,City,107,Country 60915,City,107,Country 60930,City,107,Country 60935,City,107,Country 60956,City,107,Country 60970,City,107,Country 60971,City,107,Country 60982,City,107,Country 60985,City,107,Country 60986,City,107,Country 61015,City,107,Country 61021,City,107,Country 61032,City,107,Country 61044,City,107,Country 61046,City,107,Country 61071,City,107,Country 61073,City,107,Country 61082,City,107,Country 61104,City,107,Country 61119,City,107,Country 61129,City,107,Country 61141,City,107,Country 61144,City,107,Country 61145,City,107,Country 61147,City,107,Country 61157,City,107,Country 61159,City,107,Country 61171,City,107,Country 61189,City,107,Country 61195,City,107,Country 61203,City,107,Country 61212,City,107,Country 61236,City,107,Country 61246,City,107,Country 61249,City,107,Country 61252,City,107,Country 61263,City,107,Country 61270,City,107,Country 61271,City,107,Country 61304,City,107,Country 61305,City,107,Country 61311,City,107,Country 61374,City,107,Country 61379,City,107,Country 61382,City,107,Country 61387,City,107,Country 61394,City,107,Country 61395,City,107,Country 61458,City,107,Country 61469,City,107,Country 61474,City,107,Country 61480,City,107,Country 61486,City,107,Country 61500,City,107,Country 61505,City,107,Country 61509,City,107,Country 61515,City,107,Country 61522,City,107,Country 61537,City,107,Country 61542,City,107,Country 61601,City,107,Country 61636,City,107,Country 61650,City,107,Country 61657,City,107,Country 61661,City,107,Country 61672,City,107,Country 61727,City,107,Country 61680,City,107,Country 61696,City,107,Country 61717,City,107,Country 61719,City,107,Country 61720,City,107,Country 61725,City,107,Country 61740,City,107,Country 61758,City,107,Country 61777,City,107,Country 61786,City,107,Country 61791,City,107,Country 61795,City,107,Country 61804,City,107,Country 61806,City,107,Country 61805,City,107,Country 61815,City,107,Country 61822,City,107,Country 61863,City,107,Country 61864,City,107,Country 61880,City,107,Country 61885,City,107,Country 61889,City,107,Country 61914,City,107,Country 61931,City,107,Country 61941,City,107,Country 61942,City,107,Country 61950,City,107,Country 61967,City,107,Country 61970,City,107,Country 61975,City,107,Country 61977,City,107,Country 61985,City,107,Country 62035,City,107,Country 62039,City,107,Country 61996,City,107,Country 62048,City,107,Country 62052,City,107,Country 62061,City,107,Country 62056,City,107,Country 62064,City,107,Country 62065,City,107,Country 62066,City,107,Country 62073,City,107,Country 62083,City,107,Country 62091,City,107,Country 62109,City,107,Country 62098,City,107,Country 62143,City,107,Country 62146,City,107,Country 62185,City,107,Country 62226,City,107,Country 62200,City,107,Country 62205,City,107,Country 62208,City,107,Country 62215,City,107,Country 62216,City,107,Country 62236,City,107,Country 62241,City,107,Country 62247,City,107,Country 62254,City,107,Country 62255,City,107,Country 62256,City,107,Country 62275,City,107,Country 62277,City,107,Country 62281,City,107,Country 66868,City,120,Country 66870,City,120,Country 66871,City,120,Country 66872,City,120,Country 66873,City,120,Country 66966,City,120,Country 66874,City,120,Country 66875,City,120,Country 66876,City,120,Country 66877,City,120,Country 66940,City,120,Country 66878,City,120,Country 66880,City,120,Country 66881,City,120,Country 66882,City,120,Country 66931,City,120,Country 66884,City,120,Country 66885,City,120,Country 66888,City,120,Country 66886,City,120,Country 66887,City,120,Country 66889,City,120,Country 66891,City,120,Country 66892,City,120,Country 66893,City,120,Country 66920,City,120,Country 66965,City,120,Country 66990,City,120,Country 66895,City,120,Country 66896,City,120,Country 66897,City,120,Country 66898,City,120,Country 66899,City,120,Country 66900,City,120,Country 66901,City,120,Country 66979,City,120,Country 66904,City,120,Country 66905,City,120,Country 66908,City,120,Country 66914,City,120,Country 66906,City,120,Country 66973,City,120,Country 66909,City,120,Country 66910,City,120,Country 66917,City,120,Country 66991,City,120,Country 66879,City,120,Country 66992,City,120,Country 66912,City,120,Country 66913,City,120,Country 66915,City,120,Country 66916,City,120,Country 66918,City,120,Country 66911,City,120,Country 66919,City,120,Country 66924,City,120,Country 66921,City,120,Country 66925,City,120,Country 66922,City,120,Country 66923,City,120,Country 66926,City,120,Country 66929,City,120,Country 66930,City,120,Country 66927,City,120,Country 66932,City,120,Country 66933,City,120,Country 66934,City,120,Country 66907,City,120,Country 66935,City,120,Country 66936,City,120,Country 66937,City,120,Country 66967,City,120,Country 66944,City,120,Country 66945,City,120,Country 66902,City,120,Country 66941,City,120,Country 66942,City,120,Country 66943,City,120,Country 66946,City,120,Country 66953,City,120,Country 66947,City,120,Country 66883,City,120,Country 66890,City,120,Country 66903,City,120,Country 66928,City,120,Country 66948,City,120,Country 66949,City,120,Country 66950,City,120,Country 66951,City,120,Country 66952,City,120,Country 66954,City,120,Country 66938,City,120,Country 66869,City,120,Country 66956,City,120,Country 66957,City,120,Country 66958,City,120,Country 66959,City,120,Country 66894,City,120,Country 66971,City,120,Country 66961,City,120,Country 66963,City,120,Country 66962,City,120,Country 66964,City,120,Country 66974,City,120,Country 66960,City,120,Country 66969,City,120,Country 66955,City,120,Country 66968,City,120,Country 66970,City,120,Country 66976,City,120,Country 66972,City,120,Country 66988,City,120,Country 66975,City,120,Country 66977,City,120,Country 66978,City,120,Country 66980,City,120,Country 66983,City,120,Country 66981,City,120,Country 66982,City,120,Country 66984,City,120,Country 66939,City,120,Country 66985,City,120,Country 66986,City,120,Country 66987,City,120,Country 66989,City,120,Country 66437,City,125,Country 66438,City,125,Country 66439,City,125,Country 66440,City,125,Country 66441,City,125,Country 66442,City,125,Country 66443,City,125,Country 66444,City,125,Country 66445,City,125,Country 66446,City,125,Country 66447,City,125,Country 66581,City,126,Country 66592,City,126,Country 66593,City,126,Country 66630,City,126,Country 66678,City,126,Country 66694,City,126,Country 66695,City,126,Country 66576,City,126,Country 66579,City,126,Country 66584,City,126,Country 66588,City,126,Country 66591,City,126,Country 66595,City,126,Country 66598,City,126,Country 66601,City,126,Country 66605,City,126,Country 66606,City,126,Country 66611,City,126,Country 66614,City,126,Country 66615,City,126,Country 66629,City,126,Country 66624,City,126,Country 66636,City,126,Country 66661,City,126,Country 66664,City,126,Country 66666,City,126,Country 66674,City,126,Country 66714,City,126,Country 66701,City,126,Country 66723,City,126,Country 66600,City,126,Country 66620,City,126,Country 66622,City,126,Country 66644,City,126,Country 66645,City,126,Country 66650,City,126,Country 66660,City,126,Country 66670,City,126,Country 66673,City,126,Country 66677,City,126,Country 66681,City,126,Country 66718,City,126,Country 66722,City,126,Country 66602,City,126,Country 66612,City,126,Country 66613,City,126,Country 66617,City,126,Country 66618,City,126,Country 66623,City,126,Country 66628,City,126,Country 66634,City,126,Country 66635,City,126,Country 66672,City,126,Country 66699,City,126,Country 66700,City,126,Country 66705,City,126,Country 66587,City,126,Country 66608,City,126,Country 66625,City,126,Country 66646,City,126,Country 66651,City,126,Country 66652,City,126,Country 66653,City,126,Country 66654,City,126,Country 66665,City,126,Country 66669,City,126,Country 66692,City,126,Country 66577,City,126,Country 66607,City,126,Country 66619,City,126,Country 66627,City,126,Country 66633,City,126,Country 66642,City,126,Country 66649,City,126,Country 66662,City,126,Country 66710,City,126,Country 66712,City,126,Country 66688,City,126,Country 66696,City,126,Country 66721,City,126,Country 66590,City,126,Country 66609,City,126,Country 66648,City,126,Country 66715,City,126,Country 66683,City,126,Country 66637,City,126,Country 66657,City,126,Country 66658,City,126,Country 66668,City,126,Country 66675,City,126,Country 66685,City,126,Country 66693,City,126,Country 66697,City,126,Country 66582,City,126,Country 66594,City,126,Country 66604,City,126,Country 66639,City,126,Country 66691,City,126,Country 66706,City,126,Country 66707,City,126,Country 66585,City,126,Country 66586,City,126,Country 66596,City,126,Country 66597,City,126,Country 66599,City,126,Country 66603,City,126,Country 66610,City,126,Country 66631,City,126,Country 66632,City,126,Country 66641,City,126,Country 66643,City,126,Country 66647,City,126,Country 66655,City,126,Country 66656,City,126,Country 66667,City,126,Country 66671,City,126,Country 66709,City,126,Country 66676,City,126,Country 66711,City,126,Country 66679,City,126,Country 66680,City,126,Country 66720,City,126,Country 66682,City,126,Country 66687,City,126,Country 66689,City,126,Country 66698,City,126,Country 66702,City,126,Country 66703,City,126,Country 66704,City,126,Country 66726,City,127,Country 66745,City,127,Country 66747,City,127,Country 66748,City,127,Country 66759,City,127,Country 66762,City,127,Country 66773,City,127,Country 66778,City,127,Country 66783,City,127,Country 66793,City,127,Country 66788,City,127,Country 66791,City,127,Country 66792,City,127,Country 66802,City,127,Country 66839,City,127,Country 66842,City,127,Country 66845,City,127,Country 66749,City,127,Country 66784,City,127,Country 66819,City,127,Country 66849,City,127,Country 66862,City,127,Country 66865,City,127,Country 66737,City,127,Country 66743,City,127,Country 66752,City,127,Country 66757,City,127,Country 66764,City,127,Country 66767,City,127,Country 66769,City,127,Country 66804,City,127,Country 66807,City,127,Country 66815,City,127,Country 66826,City,127,Country 66837,City,127,Country 66859,City,127,Country 66728,City,127,Country 66729,City,127,Country 66732,City,127,Country 66753,City,127,Country 66761,City,127,Country 66808,City,127,Country 66831,City,127,Country 66856,City,127,Country 66725,City,127,Country 66731,City,127,Country 66733,City,127,Country 66736,City,127,Country 66755,City,127,Country 66758,City,127,Country 66760,City,127,Country 66765,City,127,Country 66772,City,127,Country 66787,City,127,Country 66795,City,127,Country 66798,City,127,Country 66809,City,127,Country 66814,City,127,Country 66817,City,127,Country 66822,City,127,Country 66820,City,127,Country 66824,City,127,Country 66828,City,127,Country 66829,City,127,Country 66832,City,127,Country 66835,City,127,Country 66838,City,127,Country 66843,City,127,Country 66851,City,127,Country 66738,City,127,Country 66740,City,127,Country 66771,City,127,Country 66775,City,127,Country 66776,City,127,Country 66786,City,127,Country 66803,City,127,Country 66806,City,127,Country 66860,City,127,Country 66867,City,127,Country 66724,City,127,Country 66746,City,127,Country 66734,City,127,Country 66754,City,127,Country 66768,City,127,Country 66780,City,127,Country 66781,City,127,Country 66782,City,127,Country 66785,City,127,Country 66790,City,127,Country 66801,City,127,Country 66811,City,127,Country 66812,City,127,Country 66813,City,127,Country 66818,City,127,Country 66834,City,127,Country 66840,City,127,Country 66841,City,127,Country 66846,City,127,Country 66847,City,127,Country 66858,City,127,Country 66861,City,127,Country 66739,City,127,Country 66741,City,127,Country 66750,City,127,Country 66770,City,127,Country 66779,City,127,Country 66796,City,127,Country 66799,City,127,Country 66800,City,127,Country 66805,City,127,Country 66816,City,127,Country 66830,City,127,Country 66850,City,127,Country 66730,City,127,Country 66735,City,127,Country 66751,City,127,Country 66763,City,127,Country 66777,City,127,Country 66823,City,127,Country 66825,City,127,Country 66833,City,127,Country 66852,City,127,Country 66854,City,127,Country 66855,City,127,Country 66744,City,127,Country 66756,City,127,Country 66797,City,127,Country 66810,City,127,Country 66827,City,127,Country 66836,City,127,Country 66844,City,127,Country 66857,City,127,Country 66821,City,127,Country 66848,City,127,Country 66853,City,127,Country 66727,City,127,Country 66742,City,127,Country 66766,City,127,Country 66774,City,127,Country 66789,City,127,Country 66794,City,127,Country 66863,City,127,Country 66864,City,127,Country 66866,City,127,Country 67574,City,129,Country 67390,City,129,Country 67519,City,129,Country 67556,City,129,Country 67391,City,129,Country 67392,City,129,Country 67403,City,129,Country 67420,City,129,Country 67430,City,129,Country 67464,City,129,Country 67472,City,129,Country 67394,City,129,Country 67534,City,129,Country 67396,City,129,Country 67421,City,129,Country 67434,City,129,Country 67447,City,129,Country 67398,City,129,Country 67441,City,129,Country 67523,City,129,Country 67399,City,129,Country 67568,City,129,Country 67439,City,129,Country 67483,City,129,Country 67401,City,129,Country 67512,City,129,Country 67566,City,129,Country 67395,City,129,Country 67567,City,129,Country 67405,City,129,Country 67569,City,129,Country 67494,City,129,Country 67582,City,129,Country 67388,City,129,Country 67481,City,129,Country 67408,City,129,Country 67410,City,129,Country 67528,City,129,Country 67529,City,129,Country 67411,City,129,Country 67533,City,129,Country 67407,City,129,Country 67412,City,129,Country 67418,City,129,Country 67468,City,129,Country 67572,City,129,Country 67406,City,129,Country 67427,City,129,Country 67484,City,129,Country 67428,City,129,Country 67404,City,129,Country 67417,City,129,Country 67426,City,129,Country 67433,City,129,Country 67531,City,129,Country 67560,City,129,Country 67436,City,129,Country 67397,City,129,Country 67423,City,129,Country 67471,City,129,Country 67521,City,129,Country 67546,City,129,Country 67440,City,129,Country 67446,City,129,Country 67478,City,129,Country 67482,City,129,Country 67575,City,129,Country 67573,City,129,Country 67445,City,129,Country 67559,City,129,Country 67449,City,129,Country 67526,City,129,Country 67450,City,129,Country 67550,City,129,Country 67424,City,129,Country 67452,City,129,Country 67530,City,129,Country 67535,City,129,Country 67545,City,129,Country 67557,City,129,Country 67561,City,129,Country 67451,City,129,Country 67453,City,129,Country 67501,City,129,Country 67455,City,129,Country 67458,City,129,Country 67459,City,129,Country 67460,City,129,Country 67495,City,129,Country 67576,City,129,Country 67402,City,129,Country 67461,City,129,Country 67387,City,129,Country 67465,City,129,Country 67516,City,129,Country 67443,City,129,Country 67469,City,129,Country 67473,City,129,Country 67480,City,129,Country 67502,City,129,Country 67547,City,129,Country 67579,City,129,Country 67474,City,129,Country 67476,City,129,Country 67477,City,129,Country 67520,City,129,Country 67518,City,129,Country 67389,City,129,Country 67416,City,129,Country 67422,City,129,Country 67486,City,129,Country 67490,City,129,Country 67492,City,129,Country 67493,City,129,Country 67540,City,129,Country 67456,City,129,Country 67496,City,129,Country 67497,City,129,Country 67503,City,129,Country 67532,City,129,Country 67577,City,129,Country 67470,City,129,Country 67506,City,129,Country 67448,City,129,Country 67479,City,129,Country 67509,City,129,Country 67544,City,129,Country 67510,City,129,Country 67564,City,129,Country 67499,City,129,Country 67507,City,129,Country 67514,City,129,Country 67578,City,129,Country 67437,City,129,Country 67444,City,129,Country 67457,City,129,Country 67515,City,129,Country 67517,City,129,Country 67400,City,129,Country 67438,City,129,Country 67454,City,129,Country 67462,City,129,Country 67580,City,129,Country 67581,City,129,Country 67525,City,129,Country 67409,City,129,Country 67466,City,129,Country 67475,City,129,Country 67485,City,129,Country 67498,City,129,Country 67513,City,129,Country 67537,City,129,Country 67552,City,129,Country 67463,City,129,Country 67488,City,129,Country 67538,City,129,Country 67553,City,129,Country 67386,City,129,Country 67419,City,129,Country 67487,City,129,Country 67539,City,129,Country 67571,City,129,Country 67432,City,129,Country 67541,City,129,Country 67491,City,129,Country 67500,City,129,Country 67511,City,129,Country 67527,City,129,Country 67542,City,129,Country 67415,City,129,Country 67425,City,129,Country 67429,City,129,Country 67505,City,129,Country 67508,City,129,Country 67524,City,129,Country 67570,City,129,Country 67543,City,129,Country 67504,City,129,Country 67548,City,129,Country 67549,City,129,Country 67431,City,129,Country 67442,City,129,Country 67551,City,129,Country 67554,City,129,Country 67393,City,129,Country 67435,City,129,Country 67555,City,129,Country 67414,City,129,Country 67489,City,129,Country 67558,City,129,Country 67562,City,129,Country 67413,City,129,Country 67467,City,129,Country 67522,City,129,Country 67536,City,129,Country 67563,City,129,Country 67565,City,129,Country 67758,City,135,Country 67759,City,135,Country 67817,City,135,Country 67760,City,135,Country 67761,City,135,Country 67762,City,135,Country 67763,City,135,Country 67764,City,135,Country 67765,City,135,Country 67766,City,135,Country 67768,City,135,Country 67772,City,135,Country 67770,City,135,Country 67767,City,135,Country 67771,City,135,Country 67769,City,135,Country 67821,City,135,Country 67781,City,135,Country 67777,City,135,Country 67791,City,135,Country 67789,City,135,Country 67775,City,135,Country 67780,City,135,Country 67776,City,135,Country 67782,City,135,Country 67783,City,135,Country 67809,City,135,Country 67778,City,135,Country 67779,City,135,Country 67785,City,135,Country 67786,City,135,Country 67784,City,135,Country 67787,City,135,Country 67790,City,135,Country 67792,City,135,Country 67793,City,135,Country 67794,City,135,Country 67795,City,135,Country 67796,City,135,Country 67797,City,135,Country 67798,City,135,Country 67799,City,135,Country 67803,City,135,Country 67805,City,135,Country 67804,City,135,Country 67806,City,135,Country 67808,City,135,Country 67774,City,135,Country 67810,City,135,Country 67811,City,135,Country 67801,City,135,Country 67788,City,135,Country 67802,City,135,Country 67807,City,135,Country 67812,City,135,Country 67814,City,135,Country 67813,City,135,Country 67815,City,135,Country 67800,City,135,Country 67816,City,135,Country 67818,City,135,Country 67819,City,135,Country 67820,City,135,Country 67822,City,135,Country 67773,City,135,Country 67823,City,135,Country 67824,City,135,Country 67825,City,135,Country 67271,City,144,Country 67337,City,144,Country 67280,City,144,Country 67272,City,144,Country 67273,City,144,Country 67276,City,144,Country 67281,City,144,Country 67305,City,144,Country 67294,City,144,Country 67283,City,144,Country 67310,City,144,Country 67339,City,144,Country 67295,City,144,Country 67286,City,144,Country 67285,City,144,Country 67288,City,144,Country 67292,City,144,Country 67327,City,144,Country 67326,City,144,Country 67336,City,144,Country 67338,City,144,Country 67287,City,144,Country 67293,City,144,Country 67277,City,144,Country 67298,City,144,Country 67299,City,144,Country 67289,City,144,Country 67335,City,144,Country 67301,City,144,Country 67303,City,144,Country 67302,City,144,Country 67304,City,144,Country 67313,City,144,Country 67279,City,144,Country 67284,City,144,Country 67290,City,144,Country 67340,City,144,Country 67306,City,144,Country 67296,City,144,Country 67308,City,144,Country 67309,City,144,Country 67314,City,144,Country 67315,City,144,Country 67317,City,144,Country 67316,City,144,Country 67319,City,144,Country 67322,City,144,Country 67321,City,144,Country 67274,City,144,Country 67275,City,144,Country 67328,City,144,Country 67341,City,144,Country 67324,City,144,Country 67342,City,144,Country 67278,City,144,Country 67325,City,144,Country 67329,City,144,Country 67333,City,144,Country 67312,City,144,Country 67330,City,144,Country 67282,City,144,Country 67291,City,144,Country 67297,City,144,Country 67300,City,144,Country 67307,City,144,Country 67311,City,144,Country 67318,City,144,Country 67320,City,144,Country 67323,City,144,Country 67331,City,144,Country 67332,City,144,Country 67334,City,144,Country 67343,City,147,Country 67344,City,147,Country 67369,City,147,Country 67375,City,147,Country 67370,City,147,Country 67345,City,147,Country 67346,City,147,Country 67347,City,147,Country 67360,City,147,Country 67349,City,147,Country 67368,City,147,Country 67353,City,147,Country 67354,City,147,Country 67350,City,147,Country 67355,City,147,Country 67365,City,147,Country 67366,City,147,Country 67358,City,147,Country 67359,City,147,Country 67348,City,147,Country 67361,City,147,Country 67362,City,147,Country 67363,City,147,Country 67351,City,147,Country 67352,City,147,Country 67356,City,147,Country 67357,City,147,Country 67364,City,147,Country 67372,City,147,Country 67367,City,147,Country 67374,City,147,Country 67371,City,147,Country 67373,City,147,Country 67376,City,147,Country 77306,City,156,Country 77344,City,156,Country 77349,City,156,Country 77357,City,156,Country 77376,City,156,Country 77380,City,156,Country 77381,City,156,Country 77395,City,156,Country 77456,City,156,Country 77519,City,156,Country 77528,City,156,Country 77552,City,156,Country 77563,City,156,Country 77581,City,156,Country 77620,City,156,Country 77628,City,156,Country 77634,City,156,Country 77653,City,156,Country 77654,City,156,Country 77655,City,156,Country 77656,City,156,Country 77657,City,156,Country 77658,City,156,Country 77671,City,156,Country 77684,City,156,Country 77685,City,156,Country 77696,City,156,Country 77714,City,156,Country 77735,City,156,Country 77750,City,156,Country 77758,City,156,Country 77783,City,156,Country 77831,City,156,Country 77871,City,156,Country 77874,City,156,Country 77887,City,156,Country 77958,City,156,Country 77991,City,156,Country 78031,City,156,Country 78104,City,156,Country 78181,City,156,Country 78235,City,156,Country 78241,City,156,Country 78255,City,156,Country 78354,City,156,Country 78381,City,156,Country 78431,City,156,Country 78432,City,156,Country 78436,City,156,Country 78463,City,156,Country 78473,City,156,Country 78484,City,156,Country 78516,City,156,Country 78581,City,156,Country 78583,City,156,Country 78585,City,156,Country 78633,City,156,Country 78636,City,156,Country 78648,City,156,Country 78649,City,156,Country 78679,City,156,Country 78681,City,156,Country 78709,City,156,Country 78796,City,156,Country 78802,City,156,Country 78809,City,156,Country 78832,City,156,Country 78833,City,156,Country 78838,City,156,Country 78857,City,156,Country 78885,City,156,Country 78917,City,156,Country 78935,City,156,Country 78943,City,156,Country 78976,City,156,Country 79028,City,156,Country 77327,City,156,Country 77427,City,156,Country 77612,City,156,Country 77652,City,156,Country 77661,City,156,Country 77704,City,156,Country 77773,City,156,Country 77855,City,156,Country 77888,City,156,Country 77963,City,156,Country 78008,City,156,Country 78288,City,156,Country 78819,City,156,Country 79002,City,156,Country 77321,City,156,Country 77323,City,156,Country 77324,City,156,Country 77351,City,156,Country 77359,City,156,Country 77373,City,156,Country 77374,City,156,Country 77375,City,156,Country 77394,City,156,Country 77420,City,156,Country 77431,City,156,Country 77452,City,156,Country 77453,City,156,Country 77487,City,156,Country 77501,City,156,Country 77505,City,156,Country 77507,City,156,Country 77510,City,156,Country 77530,City,156,Country 77535,City,156,Country 77537,City,156,Country 77538,City,156,Country 77541,City,156,Country 77548,City,156,Country 77561,City,156,Country 77588,City,156,Country 77593,City,156,Country 77602,City,156,Country 77603,City,156,Country 77610,City,156,Country 77611,City,156,Country 77621,City,156,Country 77622,City,156,Country 77673,City,156,Country 77675,City,156,Country 77678,City,156,Country 77683,City,156,Country 77699,City,156,Country 77707,City,156,Country 77755,City,156,Country 77809,City,156,Country 77814,City,156,Country 77851,City,156,Country 77900,City,156,Country 77903,City,156,Country 77932,City,156,Country 77939,City,156,Country 77950,City,156,Country 77959,City,156,Country 77976,City,156,Country 77994,City,156,Country 78042,City,156,Country 78047,City,156,Country 78068,City,156,Country 78073,City,156,Country 78086,City,156,Country 78095,City,156,Country 78097,City,156,Country 78103,City,156,Country 78106,City,156,Country 78107,City,156,Country 78114,City,156,Country 78162,City,156,Country 78170,City,156,Country 78172,City,156,Country 78193,City,156,Country 78198,City,156,Country 78200,City,156,Country 78206,City,156,Country 78207,City,156,Country 78208,City,156,Country 78243,City,156,Country 78244,City,156,Country 78247,City,156,Country 78254,City,156,Country 78272,City,156,Country 78283,City,156,Country 78289,City,156,Country 78343,City,156,Country 78347,City,156,Country 78353,City,156,Country 78355,City,156,Country 78380,City,156,Country 78403,City,156,Country 78427,City,156,Country 78442,City,156,Country 78460,City,156,Country 78472,City,156,Country 78486,City,156,Country 78493,City,156,Country 78507,City,156,Country 78524,City,156,Country 78533,City,156,Country 78539,City,156,Country 78542,City,156,Country 78560,City,156,Country 78561,City,156,Country 78562,City,156,Country 78566,City,156,Country 78643,City,156,Country 78661,City,156,Country 78670,City,156,Country 78689,City,156,Country 78694,City,156,Country 78696,City,156,Country 78700,City,156,Country 78707,City,156,Country 78717,City,156,Country 78741,City,156,Country 78759,City,156,Country 78766,City,156,Country 78765,City,156,Country 78773,City,156,Country 78785,City,156,Country 78787,City,156,Country 78799,City,156,Country 78800,City,156,Country 78803,City,156,Country 78804,City,156,Country 78818,City,156,Country 78890,City,156,Country 78905,City,156,Country 78930,City,156,Country 78932,City,156,Country 78957,City,156,Country 78966,City,156,Country 78970,City,156,Country 78978,City,156,Country 78979,City,156,Country 78982,City,156,Country 78987,City,156,Country 79026,City,156,Country 77300,City,156,Country 77309,City,156,Country 77310,City,156,Country 77319,City,156,Country 77331,City,156,Country 77337,City,156,Country 77343,City,156,Country 77345,City,156,Country 77346,City,156,Country 77348,City,156,Country 77350,City,156,Country 77356,City,156,Country 77369,City,156,Country 77372,City,156,Country 77382,City,156,Country 77388,City,156,Country 77389,City,156,Country 77392,City,156,Country 77399,City,156,Country 77400,City,156,Country 77402,City,156,Country 77405,City,156,Country 77406,City,156,Country 77409,City,156,Country 77415,City,156,Country 77424,City,156,Country 77425,City,156,Country 77433,City,156,Country 77454,City,156,Country 77470,City,156,Country 77471,City,156,Country 77474,City,156,Country 77475,City,156,Country 77481,City,156,Country 77489,City,156,Country 77492,City,156,Country 77493,City,156,Country 77506,City,156,Country 77522,City,156,Country 77523,City,156,Country 77527,City,156,Country 77534,City,156,Country 77543,City,156,Country 77545,City,156,Country 77554,City,156,Country 77564,City,156,Country 77565,City,156,Country 77579,City,156,Country 77586,City,156,Country 77587,City,156,Country 77596,City,156,Country 77597,City,156,Country 77598,City,156,Country 77599,City,156,Country 77606,City,156,Country 77607,City,156,Country 77613,City,156,Country 77614,City,156,Country 77617,City,156,Country 77625,City,156,Country 77626,City,156,Country 77627,City,156,Country 77630,City,156,Country 77639,City,156,Country 77645,City,156,Country 77646,City,156,Country 77647,City,156,Country 77650,City,156,Country 77651,City,156,Country 77659,City,156,Country 77664,City,156,Country 77665,City,156,Country 77666,City,156,Country 77670,City,156,Country 77681,City,156,Country 77682,City,156,Country 77689,City,156,Country 77690,City,156,Country 77691,City,156,Country 77698,City,156,Country 77711,City,156,Country 77713,City,156,Country 77719,City,156,Country 77723,City,156,Country 77729,City,156,Country 77742,City,156,Country 77743,City,156,Country 77747,City,156,Country 77753,City,156,Country 77767,City,156,Country 77768,City,156,Country 77774,City,156,Country 77775,City,156,Country 77778,City,156,Country 77782,City,156,Country 77786,City,156,Country 77787,City,156,Country 77807,City,156,Country 77810,City,156,Country 77813,City,156,Country 77824,City,156,Country 77858,City,156,Country 77860,City,156,Country 77865,City,156,Country 77877,City,156,Country 77880,City,156,Country 77884,City,156,Country 77885,City,156,Country 77891,City,156,Country 77895,City,156,Country 77907,City,156,Country 77913,City,156,Country 77916,City,156,Country 77919,City,156,Country 77927,City,156,Country 77930,City,156,Country 77954,City,156,Country 77980,City,156,Country 77985,City,156,Country 77990,City,156,Country 77992,City,156,Country 77997,City,156,Country 78000,City,156,Country 78006,City,156,Country 78010,City,156,Country 78015,City,156,Country 78022,City,156,Country 78023,City,156,Country 78027,City,156,Country 78043,City,156,Country 78061,City,156,Country 78062,City,156,Country 78069,City,156,Country 78074,City,156,Country 78076,City,156,Country 78092,City,156,Country 78098,City,156,Country 78100,City,156,Country 78101,City,156,Country 78102,City,156,Country 78105,City,156,Country 78109,City,156,Country 78113,City,156,Country 78115,City,156,Country 78120,City,156,Country 78141,City,156,Country 78143,City,156,Country 78148,City,156,Country 78149,City,156,Country 78151,City,156,Country 78153,City,156,Country 78183,City,156,Country 78188,City,156,Country 78196,City,156,Country 78197,City,156,Country 78204,City,156,Country 78221,City,156,Country 78225,City,156,Country 78229,City,156,Country 78231,City,156,Country 78248,City,156,Country 78273,City,156,Country 78282,City,156,Country 78290,City,156,Country 78295,City,156,Country 78297,City,156,Country 78299,City,156,Country 78309,City,156,Country 78315,City,156,Country 78316,City,156,Country 78317,City,156,Country 78327,City,156,Country 78345,City,156,Country 78357,City,156,Country 78358,City,156,Country 78359,City,156,Country 78360,City,156,Country 78361,City,156,Country 78362,City,156,Country 78363,City,156,Country 78386,City,156,Country 78420,City,156,Country 78421,City,156,Country 78423,City,156,Country 78424,City,156,Country 78452,City,156,Country 78453,City,156,Country 78454,City,156,Country 78476,City,156,Country 78481,City,156,Country 78494,City,156,Country 78505,City,156,Country 78506,City,156,Country 78513,City,156,Country 78514,City,156,Country 78520,City,156,Country 78531,City,156,Country 78532,City,156,Country 78534,City,156,Country 78535,City,156,Country 78537,City,156,Country 78543,City,156,Country 78549,City,156,Country 78557,City,156,Country 78569,City,156,Country 78576,City,156,Country 78598,City,156,Country 78602,City,156,Country 78614,City,156,Country 78618,City,156,Country 78631,City,156,Country 78639,City,156,Country 78645,City,156,Country 78650,City,156,Country 78666,City,156,Country 78692,City,156,Country 78716,City,156,Country 78724,City,156,Country 78735,City,156,Country 78736,City,156,Country 78737,City,156,Country 78739,City,156,Country 78749,City,156,Country 78753,City,156,Country 78757,City,156,Country 78770,City,156,Country 78775,City,156,Country 78777,City,156,Country 78783,City,156,Country 78789,City,156,Country 78791,City,156,Country 78798,City,156,Country 78806,City,156,Country 78810,City,156,Country 78825,City,156,Country 78826,City,156,Country 78827,City,156,Country 78834,City,156,Country 78842,City,156,Country 78867,City,156,Country 78877,City,156,Country 78878,City,156,Country 78879,City,156,Country 78881,City,156,Country 78889,City,156,Country 78894,City,156,Country 78900,City,156,Country 78903,City,156,Country 78907,City,156,Country 78918,City,156,Country 78920,City,156,Country 78928,City,156,Country 78933,City,156,Country 78934,City,156,Country 78939,City,156,Country 78950,City,156,Country 78962,City,156,Country 78965,City,156,Country 78967,City,156,Country 78975,City,156,Country 78985,City,156,Country 78996,City,156,Country 78999,City,156,Country 79006,City,156,Country 79008,City,156,Country 79009,City,156,Country 79012,City,156,Country 79015,City,156,Country 79019,City,156,Country 79030,City,156,Country 79032,City,156,Country 77318,City,156,Country 77352,City,156,Country 77370,City,156,Country 77384,City,156,Country 77398,City,156,Country 77441,City,156,Country 77517,City,156,Country 77562,City,156,Country 77569,City,156,Country 77629,City,156,Country 77635,City,156,Country 77672,City,156,Country 77694,City,156,Country 77712,City,156,Country 77760,City,156,Country 77800,City,156,Country 77863,City,156,Country 77910,City,156,Country 77943,City,156,Country 77968,City,156,Country 78035,City,156,Country 78056,City,156,Country 78063,City,156,Country 78067,City,156,Country 78093,City,156,Country 78096,City,156,Country 78129,City,156,Country 78136,City,156,Country 78182,City,156,Country 78250,City,156,Country 78276,City,156,Country 78278,City,156,Country 78322,City,156,Country 78356,City,156,Country 78366,City,156,Country 78392,City,156,Country 78393,City,156,Country 78396,City,156,Country 78428,City,156,Country 78439,City,156,Country 78447,City,156,Country 78464,City,156,Country 78469,City,156,Country 78480,City,156,Country 78495,City,156,Country 78499,City,156,Country 78503,City,156,Country 78518,City,156,Country 78523,City,156,Country 78558,City,156,Country 78612,City,156,Country 78652,City,156,Country 78662,City,156,Country 78673,City,156,Country 78685,City,156,Country 78686,City,156,Country 78691,City,156,Country 78712,City,156,Country 78732,City,156,Country 78742,City,156,Country 78768,City,156,Country 78769,City,156,Country 78793,City,156,Country 78813,City,156,Country 78814,City,156,Country 78816,City,156,Country 78821,City,156,Country 78836,City,156,Country 78856,City,156,Country 78899,City,156,Country 78904,City,156,Country 78938,City,156,Country 78940,City,156,Country 78958,City,156,Country 78963,City,156,Country 78964,City,156,Country 79021,City,156,Country 79025,City,156,Country 79027,City,156,Country 77316,City,156,Country 77332,City,156,Country 77333,City,156,Country 77339,City,156,Country 77353,City,156,Country 77367,City,156,Country 77378,City,156,Country 77385,City,156,Country 77387,City,156,Country 77391,City,156,Country 77393,City,156,Country 77397,City,156,Country 77404,City,156,Country 77413,City,156,Country 77429,City,156,Country 77438,City,156,Country 77442,City,156,Country 77447,City,156,Country 77457,City,156,Country 77458,City,156,Country 77468,City,156,Country 77469,City,156,Country 77484,City,156,Country 77486,City,156,Country 77491,City,156,Country 77495,City,156,Country 77496,City,156,Country 77500,City,156,Country 77502,City,156,Country 77516,City,156,Country 77544,City,156,Country 77585,City,156,Country 77636,City,156,Country 77640,City,156,Country 77641,City,156,Country 77643,City,156,Country 77649,City,156,Country 77693,City,156,Country 77720,City,156,Country 77722,City,156,Country 77724,City,156,Country 77744,City,156,Country 77776,City,156,Country 77792,City,156,Country 77816,City,156,Country 77833,City,156,Country 77842,City,156,Country 77856,City,156,Country 77866,City,156,Country 77868,City,156,Country 77870,City,156,Country 77879,City,156,Country 77881,City,156,Country 77909,City,156,Country 77924,City,156,Country 77925,City,156,Country 77933,City,156,Country 77936,City,156,Country 77948,City,156,Country 77966,City,156,Country 77973,City,156,Country 77974,City,156,Country 77978,City,156,Country 77988,City,156,Country 78024,City,156,Country 78049,City,156,Country 78051,City,156,Country 78054,City,156,Country 78064,City,156,Country 78070,City,156,Country 78071,City,156,Country 78072,City,156,Country 78078,City,156,Country 78084,City,156,Country 78108,City,156,Country 78112,City,156,Country 78119,City,156,Country 78125,City,156,Country 78126,City,156,Country 78127,City,156,Country 78132,City,156,Country 78133,City,156,Country 78145,City,156,Country 78147,City,156,Country 78152,City,156,Country 78156,City,156,Country 78164,City,156,Country 78171,City,156,Country 78173,City,156,Country 78187,City,156,Country 78190,City,156,Country 78194,City,156,Country 78199,City,156,Country 78209,City,156,Country 78211,City,156,Country 78220,City,156,Country 78222,City,156,Country 78224,City,156,Country 78228,City,156,Country 78230,City,156,Country 78238,City,156,Country 78245,City,156,Country 78246,City,156,Country 78259,City,156,Country 78262,City,156,Country 78267,City,156,Country 78275,City,156,Country 78284,City,156,Country 78292,City,156,Country 78293,City,156,Country 78296,City,156,Country 78305,City,156,Country 78306,City,156,Country 78308,City,156,Country 78310,City,156,Country 78324,City,156,Country 78334,City,156,Country 78335,City,156,Country 78340,City,156,Country 78344,City,156,Country 78348,City,156,Country 78350,City,156,Country 78364,City,156,Country 78368,City,156,Country 78369,City,156,Country 78371,City,156,Country 78374,City,156,Country 78376,City,156,Country 78377,City,156,Country 78383,City,156,Country 78384,City,156,Country 78385,City,156,Country 78402,City,156,Country 78405,City,156,Country 78410,City,156,Country 78411,City,156,Country 78414,City,156,Country 78422,City,156,Country 78425,City,156,Country 78435,City,156,Country 78438,City,156,Country 78477,City,156,Country 78478,City,156,Country 78488,City,156,Country 78489,City,156,Country 78490,City,156,Country 78528,City,156,Country 78536,City,156,Country 78545,City,156,Country 78550,City,156,Country 78553,City,156,Country 78571,City,156,Country 78577,City,156,Country 78580,City,156,Country 78584,City,156,Country 78594,City,156,Country 78595,City,156,Country 78600,City,156,Country 78617,City,156,Country 78635,City,156,Country 78638,City,156,Country 78641,City,156,Country 78660,City,156,Country 78672,City,156,Country 78674,City,156,Country 78675,City,156,Country 78676,City,156,Country 78688,City,156,Country 78690,City,156,Country 78693,City,156,Country 78698,City,156,Country 78701,City,156,Country 78708,City,156,Country 78727,City,156,Country 78730,City,156,Country 78740,City,156,Country 78754,City,156,Country 78762,City,156,Country 78767,City,156,Country 78776,City,156,Country 78782,City,156,Country 78784,City,156,Country 78805,City,156,Country 78815,City,156,Country 78820,City,156,Country 78823,City,156,Country 78829,City,156,Country 78830,City,156,Country 78844,City,156,Country 78847,City,156,Country 78848,City,156,Country 78852,City,156,Country 78863,City,156,Country 78865,City,156,Country 78884,City,156,Country 78902,City,156,Country 78912,City,156,Country 78914,City,156,Country 78921,City,156,Country 78922,City,156,Country 78927,City,156,Country 78955,City,156,Country 78956,City,156,Country 78974,City,156,Country 78991,City,156,Country 77297,City,156,Country 77301,City,156,Country 77302,City,156,Country 77305,City,156,Country 77308,City,156,Country 77312,City,156,Country 77315,City,156,Country 77320,City,156,Country 77328,City,156,Country 77329,City,156,Country 77342,City,156,Country 77358,City,156,Country 77365,City,156,Country 77366,City,156,Country 77371,City,156,Country 77383,City,156,Country 77386,City,156,Country 77390,City,156,Country 77396,City,156,Country 77407,City,156,Country 77408,City,156,Country 77410,City,156,Country 77419,City,156,Country 77421,City,156,Country 77422,City,156,Country 77423,City,156,Country 77428,City,156,Country 77434,City,156,Country 77435,City,156,Country 77436,City,156,Country 77450,City,156,Country 77464,City,156,Country 77466,City,156,Country 77467,City,156,Country 77472,City,156,Country 77473,City,156,Country 77478,City,156,Country 77485,City,156,Country 77497,City,156,Country 77498,City,156,Country 77499,City,156,Country 77515,City,156,Country 77518,City,156,Country 77525,City,156,Country 77526,City,156,Country 77533,City,156,Country 77536,City,156,Country 77550,City,156,Country 77557,City,156,Country 77559,City,156,Country 77571,City,156,Country 77575,City,156,Country 77580,City,156,Country 77582,City,156,Country 77590,City,156,Country 77591,City,156,Country 77592,City,156,Country 77594,City,156,Country 77601,City,156,Country 77619,City,156,Country 77623,City,156,Country 77631,City,156,Country 77632,City,156,Country 77633,City,156,Country 77642,City,156,Country 77644,City,156,Country 77648,City,156,Country 77663,City,156,Country 77667,City,156,Country 77668,City,156,Country 77676,City,156,Country 77680,City,156,Country 77686,City,156,Country 77687,City,156,Country 77688,City,156,Country 77692,City,156,Country 77695,City,156,Country 77706,City,156,Country 77715,City,156,Country 77716,City,156,Country 77726,City,156,Country 77727,City,156,Country 77728,City,156,Country 77731,City,156,Country 77734,City,156,Country 77738,City,156,Country 77739,City,156,Country 77740,City,156,Country 77751,City,156,Country 77752,City,156,Country 77763,City,156,Country 77769,City,156,Country 77772,City,156,Country 77780,City,156,Country 77781,City,156,Country 77788,City,156,Country 77789,City,156,Country 77790,City,156,Country 77791,City,156,Country 77793,City,156,Country 77796,City,156,Country 77799,City,156,Country 77802,City,156,Country 77805,City,156,Country 77817,City,156,Country 77821,City,156,Country 77825,City,156,Country 77827,City,156,Country 77845,City,156,Country 77846,City,156,Country 77861,City,156,Country 77875,City,156,Country 77876,City,156,Country 77890,City,156,Country 77893,City,156,Country 77894,City,156,Country 77899,City,156,Country 77904,City,156,Country 77918,City,156,Country 77928,City,156,Country 77934,City,156,Country 77935,City,156,Country 77941,City,156,Country 77942,City,156,Country 77946,City,156,Country 77955,City,156,Country 77960,City,156,Country 77967,City,156,Country 77971,City,156,Country 77981,City,156,Country 77982,City,156,Country 77983,City,156,Country 78001,City,156,Country 78014,City,156,Country 78019,City,156,Country 78020,City,156,Country 78021,City,156,Country 78025,City,156,Country 78026,City,156,Country 78028,City,156,Country 78033,City,156,Country 78034,City,156,Country 78038,City,156,Country 78052,City,156,Country 78053,City,156,Country 78059,City,156,Country 78079,City,156,Country 78082,City,156,Country 78087,City,156,Country 78088,City,156,Country 78089,City,156,Country 78090,City,156,Country 78118,City,156,Country 78121,City,156,Country 78122,City,156,Country 78123,City,156,Country 78124,City,156,Country 78135,City,156,Country 78137,City,156,Country 78146,City,156,Country 78154,City,156,Country 78155,City,156,Country 78158,City,156,Country 78165,City,156,Country 78168,City,156,Country 78177,City,156,Country 78178,City,156,Country 78179,City,156,Country 78180,City,156,Country 78191,City,156,Country 78205,City,156,Country 78212,City,156,Country 78237,City,156,Country 78240,City,156,Country 78252,City,156,Country 78258,City,156,Country 78260,City,156,Country 78264,City,156,Country 78265,City,156,Country 78270,City,156,Country 78277,City,156,Country 78281,City,156,Country 78291,City,156,Country 78298,City,156,Country 78300,City,156,Country 78301,City,156,Country 78302,City,156,Country 78304,City,156,Country 78314,City,156,Country 78319,City,156,Country 78320,City,156,Country 78325,City,156,Country 78329,City,156,Country 78330,City,156,Country 78337,City,156,Country 78341,City,156,Country 78349,City,156,Country 78367,City,156,Country 78370,City,156,Country 78372,City,156,Country 78373,City,156,Country 78379,City,156,Country 78387,City,156,Country 78390,City,156,Country 78398,City,156,Country 78401,City,156,Country 78404,City,156,Country 78406,City,156,Country 78415,City,156,Country 78418,City,156,Country 78426,City,156,Country 78437,City,156,Country 78446,City,156,Country 78455,City,156,Country 78457,City,156,Country 78459,City,156,Country 78467,City,156,Country 78468,City,156,Country 78474,City,156,Country 78483,City,156,Country 78487,City,156,Country 78491,City,156,Country 78492,City,156,Country 78510,City,156,Country 78512,City,156,Country 78519,City,156,Country 78544,City,156,Country 78546,City,156,Country 78547,City,156,Country 78551,City,156,Country 78572,City,156,Country 78596,City,156,Country 78597,City,156,Country 78601,City,156,Country 78603,City,156,Country 78605,City,156,Country 78606,City,156,Country 78607,City,156,Country 78609,City,156,Country 78610,City,156,Country 78616,City,156,Country 78622,City,156,Country 78623,City,156,Country 78627,City,156,Country 78629,City,156,Country 78637,City,156,Country 78646,City,156,Country 78651,City,156,Country 78657,City,156,Country 78671,City,156,Country 78684,City,156,Country 78695,City,156,Country 78704,City,156,Country 78705,City,156,Country 78706,City,156,Country 78718,City,156,Country 78721,City,156,Country 78722,City,156,Country 78723,City,156,Country 78729,City,156,Country 78738,City,156,Country 78743,City,156,Country 78744,City,156,Country 78748,City,156,Country 78750,City,156,Country 78756,City,156,Country 78772,City,156,Country 78778,City,156,Country 78780,City,156,Country 78786,City,156,Country 78788,City,156,Country 78790,City,156,Country 78807,City,156,Country 78808,City,156,Country 78817,City,156,Country 78824,City,156,Country 78831,City,156,Country 78835,City,156,Country 78839,City,156,Country 78840,City,156,Country 78845,City,156,Country 78846,City,156,Country 78853,City,156,Country 78859,City,156,Country 78860,City,156,Country 78864,City,156,Country 78869,City,156,Country 78871,City,156,Country 78880,City,156,Country 78888,City,156,Country 78891,City,156,Country 78892,City,156,Country 78898,City,156,Country 78901,City,156,Country 78908,City,156,Country 78911,City,156,Country 78919,City,156,Country 78924,City,156,Country 78926,City,156,Country 78937,City,156,Country 78949,City,156,Country 78959,City,156,Country 78968,City,156,Country 78971,City,156,Country 78972,City,156,Country 78986,City,156,Country 78988,City,156,Country 78997,City,156,Country 79000,City,156,Country 79001,City,156,Country 79003,City,156,Country 79004,City,156,Country 79007,City,156,Country 79010,City,156,Country 79014,City,156,Country 79018,City,156,Country 79031,City,156,Country 77303,City,156,Country 77307,City,156,Country 77313,City,156,Country 77325,City,156,Country 77338,City,156,Country 77340,City,156,Country 77341,City,156,Country 77347,City,156,Country 77361,City,156,Country 77377,City,156,Country 77401,City,156,Country 77417,City,156,Country 77426,City,156,Country 77430,City,156,Country 77437,City,156,Country 77443,City,156,Country 77476,City,156,Country 77482,City,156,Country 77483,City,156,Country 77508,City,156,Country 77509,City,156,Country 77514,City,156,Country 77521,City,156,Country 77539,City,156,Country 77540,City,156,Country 77549,City,156,Country 77553,City,156,Country 77555,City,156,Country 77558,City,156,Country 77570,City,156,Country 77573,City,156,Country 77574,City,156,Country 77577,City,156,Country 77583,City,156,Country 77609,City,156,Country 77618,City,156,Country 77624,City,156,Country 77637,City,156,Country 77638,City,156,Country 77660,City,156,Country 77697,City,156,Country 77702,City,156,Country 77709,City,156,Country 77710,City,156,Country 77721,City,156,Country 77725,City,156,Country 77730,City,156,Country 77732,City,156,Country 77733,City,156,Country 77749,City,156,Country 77762,City,156,Country 77765,City,156,Country 77771,City,156,Country 77777,City,156,Country 77784,City,156,Country 77803,City,156,Country 77804,City,156,Country 77811,City,156,Country 77812,City,156,Country 77815,City,156,Country 77818,City,156,Country 77828,City,156,Country 77830,City,156,Country 77832,City,156,Country 77835,City,156,Country 77843,City,156,Country 77847,City,156,Country 77848,City,156,Country 77850,City,156,Country 77869,City,156,Country 77901,City,156,Country 77902,City,156,Country 77905,City,156,Country 77912,City,156,Country 77929,City,156,Country 77945,City,156,Country 77951,City,156,Country 77961,City,156,Country 77962,City,156,Country 77972,City,156,Country 77987,City,156,Country 77989,City,156,Country 77998,City,156,Country 78003,City,156,Country 78005,City,156,Country 78007,City,156,Country 78039,City,156,Country 78081,City,156,Country 78085,City,156,Country 78094,City,156,Country 78110,City,156,Country 78111,City,156,Country 78116,City,156,Country 78130,City,156,Country 78138,City,156,Country 78144,City,156,Country 78159,City,156,Country 78160,City,156,Country 78161,City,156,Country 78166,City,156,Country 78175,City,156,Country 78185,City,156,Country 78186,City,156,Country 78192,City,156,Country 78203,City,156,Country 78210,City,156,Country 78227,City,156,Country 78251,City,156,Country 78261,City,156,Country 78268,City,156,Country 78269,City,156,Country 78274,City,156,Country 78307,City,156,Country 78313,City,156,Country 78328,City,156,Country 78352,City,156,Country 78365,City,156,Country 78394,City,156,Country 78395,City,156,Country 78397,City,156,Country 78407,City,156,Country 78412,City,156,Country 78413,City,156,Country 78417,City,156,Country 78434,City,156,Country 78440,City,156,Country 78462,City,156,Country 78479,City,156,Country 78502,City,156,Country 78511,City,156,Country 78515,City,156,Country 78525,City,156,Country 78526,City,156,Country 78538,City,156,Country 78540,City,156,Country 78554,City,156,Country 78563,City,156,Country 78565,City,156,Country 78568,City,156,Country 78574,City,156,Country 78588,City,156,Country 78599,City,156,Country 78655,City,156,Country 78656,City,156,Country 78664,City,156,Country 78702,City,156,Country 78713,City,156,Country 78731,City,156,Country 78761,City,156,Country 78801,City,156,Country 78811,City,156,Country 78812,City,156,Country 78843,City,156,Country 78851,City,156,Country 78866,City,156,Country 78870,City,156,Country 78896,City,156,Country 78910,City,156,Country 78915,City,156,Country 78945,City,156,Country 78947,City,156,Country 78948,City,156,Country 78951,City,156,Country 78953,City,156,Country 78961,City,156,Country 78993,City,156,Country 78994,City,156,Country 78995,City,156,Country 78998,City,156,Country 79024,City,156,Country 79033,City,156,Country 79034,City,156,Country 77326,City,156,Country 77363,City,156,Country 77418,City,156,Country 77446,City,156,Country 77455,City,156,Country 77459,City,156,Country 77462,City,156,Country 77494,City,156,Country 77529,City,156,Country 77546,City,156,Country 77566,City,156,Country 77572,City,156,Country 77576,City,156,Country 77578,City,156,Country 77662,City,156,Country 77677,City,156,Country 77679,City,156,Country 77703,City,156,Country 77736,City,156,Country 77754,City,156,Country 77764,City,156,Country 77766,City,156,Country 77785,City,156,Country 77801,City,156,Country 77806,City,156,Country 77819,City,156,Country 77823,City,156,Country 77829,City,156,Country 77839,City,156,Country 77864,City,156,Country 77896,City,156,Country 77897,City,156,Country 77898,City,156,Country 77914,City,156,Country 77922,City,156,Country 77944,City,156,Country 77947,City,156,Country 77956,City,156,Country 77957,City,156,Country 77996,City,156,Country 78016,City,156,Country 78018,City,156,Country 78032,City,156,Country 78040,City,156,Country 78050,City,156,Country 78075,City,156,Country 78080,City,156,Country 78091,City,156,Country 78099,City,156,Country 78131,City,156,Country 78140,City,156,Country 78142,City,156,Country 78150,City,156,Country 78213,City,156,Country 78236,City,156,Country 78323,City,156,Country 78342,City,156,Country 78351,City,156,Country 78375,City,156,Country 78448,City,156,Country 78456,City,156,Country 78496,City,156,Country 78497,City,156,Country 78498,City,156,Country 78500,City,156,Country 78517,City,156,Country 78522,City,156,Country 78530,City,156,Country 78582,City,156,Country 78589,City,156,Country 78604,City,156,Country 78640,City,156,Country 78658,City,156,Country 78697,City,156,Country 78745,City,156,Country 78751,City,156,Country 78752,City,156,Country 78792,City,156,Country 78795,City,156,Country 78797,City,156,Country 78872,City,156,Country 78886,City,156,Country 78887,City,156,Country 78936,City,156,Country 78946,City,156,Country 78952,City,156,Country 78980,City,156,Country 78981,City,156,Country 79023,City,156,Country 79036,City,156,Country 77298,City,156,Country 77299,City,156,Country 77317,City,156,Country 77322,City,156,Country 77330,City,156,Country 77336,City,156,Country 77354,City,156,Country 77379,City,156,Country 77403,City,156,Country 77411,City,156,Country 77412,City,156,Country 77414,City,156,Country 77416,City,156,Country 77432,City,156,Country 77439,City,156,Country 77440,City,156,Country 77444,City,156,Country 77445,City,156,Country 77448,City,156,Country 77449,City,156,Country 77451,City,156,Country 77463,City,156,Country 77465,City,156,Country 77480,City,156,Country 77511,City,156,Country 77512,City,156,Country 77513,City,156,Country 77547,City,156,Country 77551,City,156,Country 77556,City,156,Country 77567,City,156,Country 77568,City,156,Country 77584,City,156,Country 77600,City,156,Country 77605,City,156,Country 77608,City,156,Country 77615,City,156,Country 77616,City,156,Country 77669,City,156,Country 77674,City,156,Country 77700,City,156,Country 77701,City,156,Country 77705,City,156,Country 77718,City,156,Country 77741,City,156,Country 77748,City,156,Country 77759,City,156,Country 77761,City,156,Country 77770,City,156,Country 77794,City,156,Country 77797,City,156,Country 77798,City,156,Country 77808,City,156,Country 77820,City,156,Country 77822,City,156,Country 77826,City,156,Country 77838,City,156,Country 77841,City,156,Country 77844,City,156,Country 77849,City,156,Country 77852,City,156,Country 77853,City,156,Country 77854,City,156,Country 77859,City,156,Country 77867,City,156,Country 77873,City,156,Country 77883,City,156,Country 77889,City,156,Country 77892,City,156,Country 77908,City,156,Country 77911,City,156,Country 77921,City,156,Country 77923,City,156,Country 77926,City,156,Country 77931,City,156,Country 77937,City,156,Country 77952,City,156,Country 77975,City,156,Country 77979,City,156,Country 77984,City,156,Country 77986,City,156,Country 77993,City,156,Country 77995,City,156,Country 78011,City,156,Country 78012,City,156,Country 78013,City,156,Country 78017,City,156,Country 78029,City,156,Country 78030,City,156,Country 78036,City,156,Country 78041,City,156,Country 78044,City,156,Country 78045,City,156,Country 78046,City,156,Country 78048,City,156,Country 78060,City,156,Country 78065,City,156,Country 78066,City,156,Country 78083,City,156,Country 78117,City,156,Country 78128,City,156,Country 78134,City,156,Country 78139,City,156,Country 78157,City,156,Country 78163,City,156,Country 78167,City,156,Country 78174,City,156,Country 78176,City,156,Country 78184,City,156,Country 78216,City,156,Country 78218,City,156,Country 78217,City,156,Country 78226,City,156,Country 78232,City,156,Country 78233,City,156,Country 78249,City,156,Country 78256,City,156,Country 78257,City,156,Country 78263,City,156,Country 78285,City,156,Country 78286,City,156,Country 78287,City,156,Country 78303,City,156,Country 78312,City,156,Country 78318,City,156,Country 78336,City,156,Country 78338,City,156,Country 78339,City,156,Country 78382,City,156,Country 78389,City,156,Country 78391,City,156,Country 78400,City,156,Country 78408,City,156,Country 78416,City,156,Country 78419,City,156,Country 78430,City,156,Country 78433,City,156,Country 78443,City,156,Country 78445,City,156,Country 78449,City,156,Country 78450,City,156,Country 78458,City,156,Country 78461,City,156,Country 78465,City,156,Country 78466,City,156,Country 78470,City,156,Country 78471,City,156,Country 78475,City,156,Country 78485,City,156,Country 78501,City,156,Country 78509,City,156,Country 78529,City,156,Country 78541,City,156,Country 78552,City,156,Country 78556,City,156,Country 78559,City,156,Country 78564,City,156,Country 78573,City,156,Country 78575,City,156,Country 78578,City,156,Country 78579,City,156,Country 78586,City,156,Country 78587,City,156,Country 78590,City,156,Country 78591,City,156,Country 78592,City,156,Country 78611,City,156,Country 78620,City,156,Country 78621,City,156,Country 78624,City,156,Country 78625,City,156,Country 78626,City,156,Country 78628,City,156,Country 78630,City,156,Country 78632,City,156,Country 78634,City,156,Country 78642,City,156,Country 78644,City,156,Country 78647,City,156,Country 78654,City,156,Country 78663,City,156,Country 78667,City,156,Country 78668,City,156,Country 78669,City,156,Country 78677,City,156,Country 78680,City,156,Country 78710,City,156,Country 78711,City,156,Country 78726,City,156,Country 78733,City,156,Country 78734,City,156,Country 78746,City,156,Country 78755,City,156,Country 78760,City,156,Country 78763,City,156,Country 78764,City,156,Country 78771,City,156,Country 78779,City,156,Country 78794,City,156,Country 78828,City,156,Country 78850,City,156,Country 78855,City,156,Country 78861,City,156,Country 78868,City,156,Country 78873,City,156,Country 78874,City,156,Country 78875,City,156,Country 78876,City,156,Country 78883,City,156,Country 78895,City,156,Country 78897,City,156,Country 78906,City,156,Country 78909,City,156,Country 78913,City,156,Country 78916,City,156,Country 78944,City,156,Country 78983,City,156,Country 78990,City,156,Country 79011,City,156,Country 79016,City,156,Country 79017,City,156,Country 79022,City,156,Country 79029,City,156,Country 79035,City,156,Country 77314,City,156,Country 77334,City,156,Country 77335,City,156,Country 77360,City,156,Country 77364,City,156,Country 77368,City,156,Country 77461,City,156,Country 77479,City,156,Country 77503,City,156,Country 77504,City,156,Country 77524,City,156,Country 77532,City,156,Country 77542,City,156,Country 77560,City,156,Country 77595,City,156,Country 77604,City,156,Country 77708,City,156,Country 77717,City,156,Country 77745,City,156,Country 77746,City,156,Country 77756,City,156,Country 77757,City,156,Country 77779,City,156,Country 77834,City,156,Country 77837,City,156,Country 77857,City,156,Country 77862,City,156,Country 77878,City,156,Country 77882,City,156,Country 77906,City,156,Country 77917,City,156,Country 77920,City,156,Country 77940,City,156,Country 77964,City,156,Country 77965,City,156,Country 77969,City,156,Country 77999,City,156,Country 78002,City,156,Country 78004,City,156,Country 78009,City,156,Country 78058,City,156,Country 78169,City,156,Country 78189,City,156,Country 78201,City,156,Country 78219,City,156,Country 78223,City,156,Country 78271,City,156,Country 78279,City,156,Country 78280,City,156,Country 78294,City,156,Country 78311,City,156,Country 78321,City,156,Country 78326,City,156,Country 78331,City,156,Country 78332,City,156,Country 78333,City,156,Country 78399,City,156,Country 78409,City,156,Country 78441,City,156,Country 78451,City,156,Country 78482,City,156,Country 78504,City,156,Country 78567,City,156,Country 78570,City,156,Country 78608,City,156,Country 78615,City,156,Country 78619,City,156,Country 78682,City,156,Country 78719,City,156,Country 78720,City,156,Country 78725,City,156,Country 78728,City,156,Country 78758,City,156,Country 78822,City,156,Country 78837,City,156,Country 78841,City,156,Country 78849,City,156,Country 78854,City,156,Country 78858,City,156,Country 78882,City,156,Country 78925,City,156,Country 78954,City,156,Country 78960,City,156,Country 78973,City,156,Country 78984,City,156,Country 79005,City,156,Country 77304,City,156,Country 77311,City,156,Country 77355,City,156,Country 77362,City,156,Country 77460,City,156,Country 77477,City,156,Country 77488,City,156,Country 77490,City,156,Country 77520,City,156,Country 77531,City,156,Country 77589,City,156,Country 77737,City,156,Country 77795,City,156,Country 77836,City,156,Country 77840,City,156,Country 77872,City,156,Country 77886,City,156,Country 77915,City,156,Country 77938,City,156,Country 77949,City,156,Country 77953,City,156,Country 77970,City,156,Country 77977,City,156,Country 78037,City,156,Country 78055,City,156,Country 78057,City,156,Country 78077,City,156,Country 78195,City,156,Country 78202,City,156,Country 78214,City,156,Country 78215,City,156,Country 78234,City,156,Country 78239,City,156,Country 78242,City,156,Country 78253,City,156,Country 78266,City,156,Country 78346,City,156,Country 78378,City,156,Country 78388,City,156,Country 78429,City,156,Country 78444,City,156,Country 78508,City,156,Country 78521,City,156,Country 78527,City,156,Country 78548,City,156,Country 78555,City,156,Country 78593,City,156,Country 78613,City,156,Country 78653,City,156,Country 78659,City,156,Country 78665,City,156,Country 78678,City,156,Country 78683,City,156,Country 78687,City,156,Country 78699,City,156,Country 78703,City,156,Country 78714,City,156,Country 78715,City,156,Country 78747,City,156,Country 78774,City,156,Country 78781,City,156,Country 78862,City,156,Country 78893,City,156,Country 78923,City,156,Country 78929,City,156,Country 78931,City,156,Country 78941,City,156,Country 78942,City,156,Country 78969,City,156,Country 78977,City,156,Country 78989,City,156,Country 78992,City,156,Country 79013,City,156,Country 79020,City,156,Country 79681,City,165,Country 79684,City,165,Country 79687,City,165,Country 79044,City,165,Country 79045,City,165,Country 79051,City,165,Country 79054,City,165,Country 79055,City,165,Country 79094,City,165,Country 79073,City,165,Country 79078,City,165,Country 79080,City,165,Country 79106,City,165,Country 79115,City,165,Country 79123,City,165,Country 79132,City,165,Country 79137,City,165,Country 79138,City,165,Country 79145,City,165,Country 79148,City,165,Country 79161,City,165,Country 79162,City,165,Country 79178,City,165,Country 79239,City,165,Country 79256,City,165,Country 79276,City,165,Country 79310,City,165,Country 79324,City,165,Country 79346,City,165,Country 79340,City,165,Country 79355,City,165,Country 79385,City,165,Country 79389,City,165,Country 79392,City,165,Country 79394,City,165,Country 79395,City,165,Country 79399,City,165,Country 79420,City,165,Country 79464,City,165,Country 79465,City,165,Country 79458,City,165,Country 79506,City,165,Country 79507,City,165,Country 79522,City,165,Country 79586,City,165,Country 79587,City,165,Country 79621,City,165,Country 79642,City,165,Country 79677,City,165,Country 79685,City,165,Country 79104,City,165,Country 79153,City,165,Country 79150,City,165,Country 79174,City,165,Country 79184,City,165,Country 79217,City,165,Country 79227,City,165,Country 79228,City,165,Country 79247,City,165,Country 79240,City,165,Country 79242,City,165,Country 79281,City,165,Country 79289,City,165,Country 79320,City,165,Country 79368,City,165,Country 79388,City,165,Country 79390,City,165,Country 79391,City,165,Country 79411,City,165,Country 79412,City,165,Country 79700,City,165,Country 79432,City,165,Country 79451,City,165,Country 79456,City,165,Country 79471,City,165,Country 79574,City,165,Country 79497,City,165,Country 79515,City,165,Country 79597,City,165,Country 79604,City,165,Country 79653,City,165,Country 79039,City,165,Country 79672,City,165,Country 79093,City,165,Country 79072,City,165,Country 79079,City,165,Country 79170,City,165,Country 79203,City,165,Country 79209,City,165,Country 79233,City,165,Country 79299,City,165,Country 79264,City,165,Country 79268,City,165,Country 79270,City,165,Country 79272,City,165,Country 79290,City,165,Country 79301,City,165,Country 79307,City,165,Country 79329,City,165,Country 79381,City,165,Country 79356,City,165,Country 79396,City,165,Country 79407,City,165,Country 79691,City,165,Country 79429,City,165,Country 79462,City,165,Country 79582,City,165,Country 79588,City,165,Country 79628,City,165,Country 79633,City,165,Country 79040,City,165,Country 79679,City,165,Country 79690,City,165,Country 79089,City,165,Country 79114,City,165,Country 79122,City,165,Country 79124,City,165,Country 79154,City,165,Country 79192,City,165,Country 79201,City,165,Country 79254,City,165,Country 79271,City,165,Country 79282,City,165,Country 79284,City,165,Country 79347,City,165,Country 79369,City,165,Country 79404,City,165,Country 79422,City,165,Country 79444,City,165,Country 79445,City,165,Country 79452,City,165,Country 79477,City,165,Country 79504,City,165,Country 79519,City,165,Country 79581,City,165,Country 79535,City,165,Country 79537,City,165,Country 79547,City,165,Country 79599,City,165,Country 79610,City,165,Country 79615,City,165,Country 79667,City,165,Country 79675,City,165,Country 79048,City,165,Country 79056,City,165,Country 79057,City,165,Country 79069,City,165,Country 79097,City,165,Country 79098,City,165,Country 79112,City,165,Country 79119,City,165,Country 79125,City,165,Country 79126,City,165,Country 79136,City,165,Country 79142,City,165,Country 79144,City,165,Country 79160,City,165,Country 79166,City,165,Country 79187,City,165,Country 79198,City,165,Country 79243,City,165,Country 79252,City,165,Country 79258,City,165,Country 79269,City,165,Country 79277,City,165,Country 79279,City,165,Country 79291,City,165,Country 79293,City,165,Country 79311,City,165,Country 79326,City,165,Country 79328,City,165,Country 79351,City,165,Country 79354,City,165,Country 79357,City,165,Country 79367,City,165,Country 79376,City,165,Country 79413,City,165,Country 79417,City,165,Country 79423,City,165,Country 79426,City,165,Country 79702,City,165,Country 79703,City,165,Country 79434,City,165,Country 79457,City,165,Country 79459,City,165,Country 79473,City,165,Country 79476,City,165,Country 79485,City,165,Country 79517,City,165,Country 79548,City,165,Country 79550,City,165,Country 79558,City,165,Country 79564,City,165,Country 79568,City,165,Country 79572,City,165,Country 79617,City,165,Country 79622,City,165,Country 79626,City,165,Country 79629,City,165,Country 79662,City,165,Country 79670,City,165,Country 79671,City,165,Country 79678,City,165,Country 79680,City,165,Country 79050,City,165,Country 79052,City,165,Country 79058,City,165,Country 79066,City,165,Country 79086,City,165,Country 79111,City,165,Country 79116,City,165,Country 79121,City,165,Country 79164,City,165,Country 79176,City,165,Country 79177,City,165,Country 79200,City,165,Country 79205,City,165,Country 79207,City,165,Country 79221,City,165,Country 79225,City,165,Country 79234,City,165,Country 79288,City,165,Country 79303,City,165,Country 79364,City,165,Country 79372,City,165,Country 79397,City,165,Country 79405,City,165,Country 79410,City,165,Country 79697,City,165,Country 79698,City,165,Country 79440,City,165,Country 79448,City,165,Country 79481,City,165,Country 79486,City,165,Country 79501,City,165,Country 79514,City,165,Country 79525,City,165,Country 79542,City,165,Country 79549,City,165,Country 79556,City,165,Country 79562,City,165,Country 79565,City,165,Country 79566,City,165,Country 79567,City,165,Country 79573,City,165,Country 79593,City,165,Country 79600,City,165,Country 79623,City,165,Country 79624,City,165,Country 79625,City,165,Country 79632,City,165,Country 79635,City,165,Country 79644,City,165,Country 79660,City,165,Country 79038,City,165,Country 79041,City,165,Country 79042,City,165,Country 79061,City,165,Country 79067,City,165,Country 79074,City,165,Country 79076,City,165,Country 79081,City,165,Country 79082,City,165,Country 79096,City,165,Country 79091,City,165,Country 79092,City,165,Country 79108,City,165,Country 79128,City,165,Country 79130,City,165,Country 79135,City,165,Country 79146,City,165,Country 79175,City,165,Country 79181,City,165,Country 79182,City,165,Country 79186,City,165,Country 79189,City,165,Country 79197,City,165,Country 79202,City,165,Country 79210,City,165,Country 79213,City,165,Country 79215,City,165,Country 79216,City,165,Country 79220,City,165,Country 79255,City,165,Country 79263,City,165,Country 79273,City,165,Country 79285,City,165,Country 79309,City,165,Country 79313,City,165,Country 79314,City,165,Country 79343,City,165,Country 79344,City,165,Country 79345,City,165,Country 79334,City,165,Country 79358,City,165,Country 79362,City,165,Country 79366,City,165,Country 79373,City,165,Country 79374,City,165,Country 79377,City,165,Country 79386,City,165,Country 79393,City,165,Country 79692,City,165,Country 79696,City,165,Country 79436,City,165,Country 79442,City,165,Country 79455,City,165,Country 79466,City,165,Country 79470,City,165,Country 79475,City,165,Country 79484,City,165,Country 79534,City,165,Country 79577,City,165,Country 79583,City,165,Country 79584,City,165,Country 79540,City,165,Country 79546,City,165,Country 79557,City,165,Country 79560,City,165,Country 79571,City,165,Country 79591,City,165,Country 79595,City,165,Country 79611,City,165,Country 79607,City,165,Country 79616,City,165,Country 79663,City,165,Country 79669,City,165,Country 79637,City,165,Country 79638,City,165,Country 79647,City,165,Country 79648,City,165,Country 79651,City,165,Country 79059,City,165,Country 79101,City,165,Country 79102,City,165,Country 79103,City,165,Country 79127,City,165,Country 79131,City,165,Country 79157,City,165,Country 79173,City,165,Country 79180,City,165,Country 79185,City,165,Country 79191,City,165,Country 79237,City,165,Country 79238,City,165,Country 79257,City,165,Country 79315,City,165,Country 79318,City,165,Country 79323,City,165,Country 79327,City,165,Country 79333,City,165,Country 79402,City,165,Country 79403,City,165,Country 79408,City,165,Country 79427,City,165,Country 79699,City,165,Country 79701,City,165,Country 79704,City,165,Country 79439,City,165,Country 79443,City,165,Country 79450,City,165,Country 79490,City,165,Country 79512,City,165,Country 79520,City,165,Country 79578,City,165,Country 79579,City,165,Country 79580,City,165,Country 79606,City,165,Country 79665,City,165,Country 79666,City,165,Country 79630,City,165,Country 79645,City,165,Country 79646,City,165,Country 79659,City,165,Country 79425,City,165,Country 79502,City,165,Country 79043,City,165,Country 79046,City,165,Country 79113,City,165,Country 79158,City,165,Country 79159,City,165,Country 79199,City,165,Country 79226,City,165,Country 79241,City,165,Country 79265,City,165,Country 79278,City,165,Country 79302,City,165,Country 79317,City,165,Country 79352,City,165,Country 79375,City,165,Country 79378,City,165,Country 79694,City,165,Country 79463,City,165,Country 79435,City,165,Country 79467,City,165,Country 79460,City,165,Country 79461,City,165,Country 79487,City,165,Country 79509,City,165,Country 79513,City,165,Country 79510,City,165,Country 79536,City,165,Country 79601,City,165,Country 79612,City,165,Country 79668,City,165,Country 79676,City,165,Country 79075,City,165,Country 79083,City,165,Country 79090,City,165,Country 79109,City,165,Country 79117,City,165,Country 79118,City,165,Country 79141,City,165,Country 79155,City,165,Country 79179,City,165,Country 79245,City,165,Country 79211,City,165,Country 79212,City,165,Country 79224,City,165,Country 79232,City,165,Country 79262,City,165,Country 79259,City,165,Country 79267,City,165,Country 79274,City,165,Country 79283,City,165,Country 79295,City,165,Country 79330,City,165,Country 79336,City,165,Country 79371,City,165,Country 79415,City,165,Country 79693,City,165,Country 79437,City,165,Country 79447,City,165,Country 79483,City,165,Country 79488,City,165,Country 79575,City,165,Country 79521,City,165,Country 79530,City,165,Country 79531,City,165,Country 79538,City,165,Country 79555,City,165,Country 79563,City,165,Country 79589,City,165,Country 79590,City,165,Country 79592,City,165,Country 79618,City,165,Country 79627,City,165,Country 79634,City,165,Country 79636,City,165,Country 79650,City,165,Country 79654,City,165,Country 79655,City,165,Country 79657,City,165,Country 79661,City,165,Country 79682,City,165,Country 79683,City,165,Country 79047,City,165,Country 79053,City,165,Country 79060,City,165,Country 79088,City,165,Country 79099,City,165,Country 79110,City,165,Country 79120,City,165,Country 79133,City,165,Country 79143,City,165,Country 79151,City,165,Country 79152,City,165,Country 79169,City,165,Country 79171,City,165,Country 79172,City,165,Country 79183,City,165,Country 79194,City,165,Country 79206,City,165,Country 79218,City,165,Country 79235,City,165,Country 79248,City,165,Country 79244,City,165,Country 79261,City,165,Country 79341,City,165,Country 79342,City,165,Country 79308,City,165,Country 79335,City,165,Country 79380,City,165,Country 79387,City,165,Country 79406,City,165,Country 79478,City,165,Country 79479,City,165,Country 79492,City,165,Country 79529,City,165,Country 79532,City,165,Country 79561,City,165,Country 79569,City,165,Country 79664,City,165,Country 79652,City,165,Country 79063,City,165,Country 79095,City,165,Country 79100,City,165,Country 79105,City,165,Country 79167,City,165,Country 79196,City,165,Country 79219,City,165,Country 79223,City,165,Country 79286,City,165,Country 79294,City,165,Country 79332,City,165,Country 79398,City,165,Country 79401,City,165,Country 79414,City,165,Country 79430,City,165,Country 79431,City,165,Country 79453,City,165,Country 79489,City,165,Country 79493,City,165,Country 79498,City,165,Country 79508,City,165,Country 79594,City,165,Country 79598,City,165,Country 79620,City,165,Country 79658,City,165,Country 79062,City,165,Country 79064,City,165,Country 79068,City,165,Country 79084,City,165,Country 79107,City,165,Country 79129,City,165,Country 79140,City,165,Country 79188,City,165,Country 79193,City,165,Country 79204,City,165,Country 79208,City,165,Country 79250,City,165,Country 79300,City,165,Country 79266,City,165,Country 79296,City,165,Country 79297,City,165,Country 79306,City,165,Country 79316,City,165,Country 79338,City,165,Country 79339,City,165,Country 79379,City,165,Country 79370,City,165,Country 79409,City,165,Country 79418,City,165,Country 79474,City,165,Country 79496,City,165,Country 79503,City,165,Country 79524,City,165,Country 79511,City,165,Country 79585,City,165,Country 79551,City,165,Country 79552,City,165,Country 79553,City,165,Country 79603,City,165,Country 79605,City,165,Country 79608,City,165,Country 79673,City,165,Country 79674,City,165,Country 79037,City,165,Country 79071,City,165,Country 79077,City,165,Country 79085,City,165,Country 79087,City,165,Country 79139,City,165,Country 79147,City,165,Country 79156,City,165,Country 79163,City,165,Country 79165,City,165,Country 79190,City,165,Country 79214,City,165,Country 79222,City,165,Country 79230,City,165,Country 79231,City,165,Country 79249,City,165,Country 79251,City,165,Country 79253,City,165,Country 79275,City,165,Country 79280,City,165,Country 79298,City,165,Country 79305,City,165,Country 79312,City,165,Country 79319,City,165,Country 79321,City,165,Country 79331,City,165,Country 79348,City,165,Country 79349,City,165,Country 79359,City,165,Country 79360,City,165,Country 79363,City,165,Country 79365,City,165,Country 79382,City,165,Country 79383,City,165,Country 79384,City,165,Country 79416,City,165,Country 79419,City,165,Country 79421,City,165,Country 79424,City,165,Country 79428,City,165,Country 79695,City,165,Country 79433,City,165,Country 79438,City,165,Country 79446,City,165,Country 79449,City,165,Country 79454,City,165,Country 79468,City,165,Country 79469,City,165,Country 79472,City,165,Country 79491,City,165,Country 79500,City,165,Country 79505,City,165,Country 79516,City,165,Country 79527,City,165,Country 79528,City,165,Country 79526,City,165,Country 79541,City,165,Country 79543,City,165,Country 79544,City,165,Country 79559,City,165,Country 79609,City,165,Country 79614,City,165,Country 79640,City,165,Country 79641,City,165,Country 79656,City,165,Country 79688,City,165,Country 79049,City,165,Country 79134,City,165,Country 79149,City,165,Country 79246,City,165,Country 79260,City,165,Country 79287,City,165,Country 79292,City,165,Country 79322,City,165,Country 79325,City,165,Country 79337,City,165,Country 79350,City,165,Country 79353,City,165,Country 79400,City,165,Country 79499,City,165,Country 79523,City,165,Country 79533,City,165,Country 79576,City,165,Country 79554,City,165,Country 79602,City,165,Country 79613,City,165,Country 79631,City,165,Country 79639,City,165,Country 79643,City,165,Country 79649,City,165,Country 79686,City,165,Country 79689,City,165,Country 79065,City,165,Country 79070,City,165,Country 79168,City,165,Country 79195,City,165,Country 79229,City,165,Country 79236,City,165,Country 79304,City,165,Country 79361,City,165,Country 79441,City,165,Country 79480,City,165,Country 79482,City,165,Country 79494,City,165,Country 79495,City,165,Country 79518,City,165,Country 79539,City,165,Country 79545,City,165,Country 79570,City,165,Country 79596,City,165,Country 79619,City,165,Country 85788,City,176,Country 85805,City,176,Country 85803,City,176,Country 85847,City,176,Country 85881,City,176,Country 85903,City,176,Country 85904,City,176,Country 85919,City,176,Country 85934,City,176,Country 85939,City,176,Country 85941,City,176,Country 85944,City,176,Country 85952,City,176,Country 85954,City,176,Country 85984,City,176,Country 85988,City,176,Country 86041,City,176,Country 86047,City,176,Country 86046,City,176,Country 86063,City,176,Country 86099,City,176,Country 86102,City,176,Country 86111,City,176,Country 86125,City,176,Country 86128,City,176,Country 86134,City,176,Country 86143,City,176,Country 86234,City,176,Country 86156,City,176,Country 86159,City,176,Country 86169,City,176,Country 86178,City,176,Country 86182,City,176,Country 86188,City,176,Country 86189,City,176,Country 86191,City,176,Country 86194,City,176,Country 86208,City,176,Country 86304,City,176,Country 86313,City,176,Country 86328,City,176,Country 86354,City,176,Country 86357,City,176,Country 86340,City,176,Country 86347,City,176,Country 86369,City,176,Country 86372,City,176,Country 86374,City,176,Country 86376,City,176,Country 86394,City,176,Country 86483,City,176,Country 86496,City,176,Country 86505,City,176,Country 86509,City,176,Country 86522,City,176,Country 86573,City,176,Country 86580,City,176,Country 86586,City,176,Country 86593,City,176,Country 86622,City,176,Country 86625,City,176,Country 86630,City,176,Country 86856,City,176,Country 86641,City,176,Country 86643,City,176,Country 86647,City,176,Country 86861,City,176,Country 86865,City,176,Country 86663,City,176,Country 86666,City,176,Country 86667,City,176,Country 86740,City,176,Country 86745,City,176,Country 86686,City,176,Country 86689,City,176,Country 86693,City,176,Country 86851,City,176,Country 86752,City,176,Country 86754,City,176,Country 86714,City,176,Country 86723,City,176,Country 86758,City,176,Country 86759,City,176,Country 86762,City,176,Country 86765,City,176,Country 86775,City,176,Country 86779,City,176,Country 86783,City,176,Country 86785,City,176,Country 86806,City,176,Country 86814,City,176,Country 86820,City,176,Country 86821,City,176,Country 86829,City,176,Country 86845,City,176,Country 86850,City,176,Country 86976,City,176,Country 86883,City,176,Country 86898,City,176,Country 86910,City,176,Country 86918,City,176,Country 86927,City,176,Country 86933,City,176,Country 86956,City,176,Country 86973,City,176,Country 88820,City,176,Country 88781,City,176,Country 88801,City,176,Country 86985,City,176,Country 86992,City,176,Country 87015,City,176,Country 87029,City,176,Country 87061,City,176,Country 87034,City,176,Country 87036,City,176,Country 87041,City,176,Country 87045,City,176,Country 87074,City,176,Country 87094,City,176,Country 87113,City,176,Country 87144,City,176,Country 87151,City,176,Country 87188,City,176,Country 87191,City,176,Country 87208,City,176,Country 87216,City,176,Country 87221,City,176,Country 87228,City,176,Country 87234,City,176,Country 87252,City,176,Country 87254,City,176,Country 87257,City,176,Country 87259,City,176,Country 87265,City,176,Country 87279,City,176,Country 87289,City,176,Country 87290,City,176,Country 87297,City,176,Country 87311,City,176,Country 87301,City,176,Country 87306,City,176,Country 87336,City,176,Country 87340,City,176,Country 87362,City,176,Country 87861,City,176,Country 87364,City,176,Country 87371,City,176,Country 87403,City,176,Country 87406,City,176,Country 87407,City,176,Country 87409,City,176,Country 87410,City,176,Country 87420,City,176,Country 87775,City,176,Country 87440,City,176,Country 87484,City,176,Country 87490,City,176,Country 87504,City,176,Country 87510,City,176,Country 87514,City,176,Country 87527,City,176,Country 87533,City,176,Country 87560,City,176,Country 87542,City,176,Country 87544,City,176,Country 87548,City,176,Country 87554,City,176,Country 87567,City,176,Country 87587,City,176,Country 87607,City,176,Country 87609,City,176,Country 87621,City,176,Country 87623,City,176,Country 87632,City,176,Country 87636,City,176,Country 87640,City,176,Country 87660,City,176,Country 87699,City,176,Country 87757,City,176,Country 87758,City,176,Country 87691,City,176,Country 87711,City,176,Country 87730,City,176,Country 87721,City,176,Country 87725,City,176,Country 87746,City,176,Country 87770,City,176,Country 87774,City,176,Country 87807,City,176,Country 87813,City,176,Country 87824,City,176,Country 87825,City,176,Country 87850,City,176,Country 87858,City,176,Country 87909,City,176,Country 87914,City,176,Country 87919,City,176,Country 87943,City,176,Country 87946,City,176,Country 87957,City,176,Country 87964,City,176,Country 87999,City,176,Country 88000,City,176,Country 88002,City,176,Country 88005,City,176,Country 88028,City,176,Country 88065,City,176,Country 88088,City,176,Country 88090,City,176,Country 88096,City,176,Country 88109,City,176,Country 88119,City,176,Country 88832,City,176,Country 88347,City,176,Country 88350,City,176,Country 88834,City,176,Country 88835,City,176,Country 88146,City,176,Country 88159,City,176,Country 88837,City,176,Country 88838,City,176,Country 88187,City,176,Country 88201,City,176,Country 88243,City,176,Country 88222,City,176,Country 88254,City,176,Country 88260,City,176,Country 88275,City,176,Country 88864,City,176,Country 88281,City,176,Country 88285,City,176,Country 88286,City,176,Country 88321,City,176,Country 88367,City,176,Country 88363,City,176,Country 88396,City,176,Country 88399,City,176,Country 88411,City,176,Country 88422,City,176,Country 88424,City,176,Country 88452,City,176,Country 88633,City,176,Country 88476,City,176,Country 88499,City,176,Country 88501,City,176,Country 88518,City,176,Country 88529,City,176,Country 88533,City,176,Country 88536,City,176,Country 88539,City,176,Country 88549,City,176,Country 88551,City,176,Country 88647,City,176,Country 88653,City,176,Country 88597,City,176,Country 88605,City,176,Country 88606,City,176,Country 88614,City,176,Country 88617,City,176,Country 88672,City,176,Country 88679,City,176,Country 88693,City,176,Country 88715,City,176,Country 88716,City,176,Country 88880,City,176,Country 88884,City,176,Country 88746,City,176,Country 88751,City,176,Country 85781,City,176,Country 85808,City,176,Country 85812,City,176,Country 85814,City,176,Country 85839,City,176,Country 85889,City,176,Country 85891,City,176,Country 85917,City,176,Country 85943,City,176,Country 85966,City,176,Country 85971,City,176,Country 85973,City,176,Country 85989,City,176,Country 85999,City,176,Country 86007,City,176,Country 86021,City,176,Country 86031,City,176,Country 86032,City,176,Country 86038,City,176,Country 86044,City,176,Country 86058,City,176,Country 86078,City,176,Country 86079,City,176,Country 86136,City,176,Country 86137,City,176,Country 86237,City,176,Country 86239,City,176,Country 86254,City,176,Country 86171,City,176,Country 86180,City,176,Country 86203,City,176,Country 86266,City,176,Country 86272,City,176,Country 86424,City,176,Country 86312,City,176,Country 86329,City,176,Country 86419,City,176,Country 86344,City,176,Country 86386,City,176,Country 86388,City,176,Country 86459,City,176,Country 86469,City,176,Country 86485,City,176,Country 86493,City,176,Country 86501,City,176,Country 86558,City,176,Country 86555,City,176,Country 86600,City,176,Country 86631,City,176,Country 86857,City,176,Country 86639,City,176,Country 86705,City,176,Country 86725,City,176,Country 86730,City,176,Country 86793,City,176,Country 86917,City,176,Country 86924,City,176,Country 86929,City,176,Country 86931,City,176,Country 86939,City,176,Country 86940,City,176,Country 86943,City,176,Country 86941,City,176,Country 86957,City,176,Country 88755,City,176,Country 88769,City,176,Country 88796,City,176,Country 88808,City,176,Country 87086,City,176,Country 87101,City,176,Country 87135,City,176,Country 87168,City,176,Country 87179,City,176,Country 87180,City,176,Country 87219,City,176,Country 87276,City,176,Country 87294,City,176,Country 87285,City,176,Country 87292,City,176,Country 87300,City,176,Country 87338,City,176,Country 87393,City,176,Country 87868,City,176,Country 87457,City,176,Country 87473,City,176,Country 87479,City,176,Country 87482,City,176,Country 87506,City,176,Country 87515,City,176,Country 87524,City,176,Country 87571,City,176,Country 87590,City,176,Country 87597,City,176,Country 87658,City,176,Country 87665,City,176,Country 87696,City,176,Country 87763,City,176,Country 87708,City,176,Country 87710,City,176,Country 87729,City,176,Country 87733,City,176,Country 87766,City,176,Country 87797,City,176,Country 87874,City,176,Country 87885,City,176,Country 87898,City,176,Country 87903,City,176,Country 87944,City,176,Country 87952,City,176,Country 88012,City,176,Country 88040,City,176,Country 88333,City,176,Country 88060,City,176,Country 88124,City,176,Country 88115,City,176,Country 88831,City,176,Country 88833,City,176,Country 88142,City,176,Country 88160,City,176,Country 88232,City,176,Country 88847,City,176,Country 88848,City,176,Country 88849,City,176,Country 88850,City,176,Country 88280,City,176,Country 88317,City,176,Country 88444,City,176,Country 88383,City,176,Country 88384,City,176,Country 88417,City,176,Country 88456,City,176,Country 88631,City,176,Country 88471,City,176,Country 88634,City,176,Country 88478,City,176,Country 88557,City,176,Country 88500,City,176,Country 88504,City,176,Country 88524,City,176,Country 88649,City,176,Country 88713,City,176,Country 88741,City,176,Country 88748,City,176,Country 88888,City,176,Country 85783,City,176,Country 85785,City,176,Country 85790,City,176,Country 85794,City,176,Country 85795,City,176,Country 85797,City,176,Country 85815,City,176,Country 85816,City,176,Country 86010,City,176,Country 86011,City,176,Country 85840,City,176,Country 85841,City,176,Country 85849,City,176,Country 85851,City,176,Country 85869,City,176,Country 85871,City,176,Country 85873,City,176,Country 85885,City,176,Country 85892,City,176,Country 85908,City,176,Country 85916,City,176,Country 85910,City,176,Country 85918,City,176,Country 85930,City,176,Country 85931,City,176,Country 85949,City,176,Country 85946,City,176,Country 85977,City,176,Country 85960,City,176,Country 85961,City,176,Country 85962,City,176,Country 85968,City,176,Country 85986,City,176,Country 85990,City,176,Country 85991,City,176,Country 85994,City,176,Country 86000,City,176,Country 86029,City,176,Country 86030,City,176,Country 86043,City,176,Country 86062,City,176,Country 86071,City,176,Country 86094,City,176,Country 86107,City,176,Country 86112,City,176,Country 86118,City,176,Country 86121,City,176,Country 86133,City,176,Country 86147,City,176,Country 86241,City,176,Country 86251,City,176,Country 86164,City,176,Country 86167,City,176,Country 86226,City,176,Country 86269,City,176,Country 86277,City,176,Country 86278,City,176,Country 86293,City,176,Country 86295,City,176,Country 86298,City,176,Country 86426,City,176,Country 86315,City,176,Country 86333,City,176,Country 86334,City,176,Country 86402,City,176,Country 86379,City,176,Country 86381,City,176,Country 86387,City,176,Country 86389,City,176,Country 86393,City,176,Country 86443,City,176,Country 86461,City,176,Country 86465,City,176,Country 86471,City,176,Country 86480,City,176,Country 86487,City,176,Country 86488,City,176,Country 86497,City,176,Country 86510,City,176,Country 86517,City,176,Country 86513,City,176,Country 86526,City,176,Country 86533,City,176,Country 86554,City,176,Country 86564,City,176,Country 86565,City,176,Country 86568,City,176,Country 86571,City,176,Country 86588,City,176,Country 86599,City,176,Country 86590,City,176,Country 86604,City,176,Country 86619,City,176,Country 86620,City,176,Country 86859,City,176,Country 86642,City,176,Country 86649,City,176,Country 86651,City,176,Country 86654,City,176,Country 86656,City,176,Country 86860,City,176,Country 86664,City,176,Country 86675,City,176,Country 86709,City,176,Country 86755,City,176,Country 86718,City,176,Country 86719,City,176,Country 86739,City,176,Country 86763,City,176,Country 86787,City,176,Country 86788,City,176,Country 86795,City,176,Country 86799,City,176,Country 86801,City,176,Country 86827,City,176,Country 86804,City,176,Country 86812,City,176,Country 86808,City,176,Country 86816,City,176,Country 86817,City,176,Country 86836,City,176,Country 86848,City,176,Country 86868,City,176,Country 86870,City,176,Country 86871,City,176,Country 86872,City,176,Country 86887,City,176,Country 86891,City,176,Country 86896,City,176,Country 86897,City,176,Country 86902,City,176,Country 86908,City,176,Country 86913,City,176,Country 86914,City,176,Country 86915,City,176,Country 86926,City,176,Country 86928,City,176,Country 86942,City,176,Country 86952,City,176,Country 86965,City,176,Country 86966,City,176,Country 88756,City,176,Country 88812,City,176,Country 88813,City,176,Country 88765,City,176,Country 88766,City,176,Country 88767,City,176,Country 88828,City,176,Country 88790,City,176,Country 88794,City,176,Country 88802,City,176,Country 88804,City,176,Country 88806,City,176,Country 86984,City,176,Country 86988,City,176,Country 86990,City,176,Country 87002,City,176,Country 87125,City,176,Country 87126,City,176,Country 87020,City,176,Country 87026,City,176,Country 87027,City,176,Country 87067,City,176,Country 87077,City,176,Country 87082,City,176,Country 87083,City,176,Country 87085,City,176,Country 87098,City,176,Country 87109,City,176,Country 87110,City,176,Country 87115,City,176,Country 87122,City,176,Country 87123,City,176,Country 87137,City,176,Country 87142,City,176,Country 87145,City,176,Country 87154,City,176,Country 87156,City,176,Country 87159,City,176,Country 87167,City,176,Country 87172,City,176,Country 87177,City,176,Country 87181,City,176,Country 87206,City,176,Country 87207,City,176,Country 87209,City,176,Country 87225,City,176,Country 87227,City,176,Country 87233,City,176,Country 87237,City,176,Country 87242,City,176,Country 87243,City,176,Country 87251,City,176,Country 87323,City,176,Country 87278,City,176,Country 87284,City,176,Country 87291,City,176,Country 87314,City,176,Country 87302,City,176,Country 87325,City,176,Country 87339,City,176,Country 87354,City,176,Country 87361,City,176,Country 87375,City,176,Country 87377,City,176,Country 87400,City,176,Country 87408,City,176,Country 87863,City,176,Country 87415,City,176,Country 87419,City,176,Country 87418,City,176,Country 87424,City,176,Country 87421,City,176,Country 87431,City,176,Country 87441,City,176,Country 87447,City,176,Country 87448,City,176,Country 87450,City,176,Country 87451,City,176,Country 87445,City,176,Country 87470,City,176,Country 87474,City,176,Country 87487,City,176,Country 87496,City,176,Country 87507,City,176,Country 87550,City,176,Country 87570,City,176,Country 87583,City,176,Country 87594,City,176,Country 87605,City,176,Country 87606,City,176,Country 87613,City,176,Country 87627,City,176,Country 87641,City,176,Country 87689,City,176,Country 87703,City,176,Country 87704,City,176,Country 87712,City,176,Country 87717,City,176,Country 87792,City,176,Country 87802,City,176,Country 87803,City,176,Country 87809,City,176,Country 87820,City,176,Country 87830,City,176,Country 87840,City,176,Country 87869,City,176,Country 87870,City,176,Country 87877,City,176,Country 88036,City,176,Country 87880,City,176,Country 87905,City,176,Country 87883,City,176,Country 87900,City,176,Country 87908,City,176,Country 87924,City,176,Country 87942,City,176,Country 87953,City,176,Country 87960,City,176,Country 87973,City,176,Country 87980,City,176,Country 87989,City,176,Country 88003,City,176,Country 88006,City,176,Country 88013,City,176,Country 88031,City,176,Country 88021,City,176,Country 88023,City,176,Country 88026,City,176,Country 88029,City,176,Country 88030,City,176,Country 88047,City,176,Country 88326,City,176,Country 88330,City,176,Country 88061,City,176,Country 88067,City,176,Country 88073,City,176,Country 88078,City,176,Country 88084,City,176,Country 88086,City,176,Country 88105,City,176,Country 88102,City,176,Country 88103,City,176,Country 88104,City,176,Country 88110,City,176,Country 88116,City,176,Country 88117,City,176,Country 88341,City,176,Country 88342,City,176,Country 88351,City,176,Country 88128,City,176,Country 88151,City,176,Country 88162,City,176,Country 88166,City,176,Country 88167,City,176,Country 88168,City,176,Country 88194,City,176,Country 88196,City,176,Country 88216,City,176,Country 88237,City,176,Country 88220,City,176,Country 88221,City,176,Country 88248,City,176,Country 88262,City,176,Country 88271,City,176,Country 88272,City,176,Country 88863,City,176,Country 88284,City,176,Country 88287,City,176,Country 88290,City,176,Country 88299,City,176,Country 88301,City,176,Country 88309,City,176,Country 88323,City,176,Country 88355,City,176,Country 88356,City,176,Country 88365,City,176,Country 88361,City,176,Country 88372,City,176,Country 88376,City,176,Country 88378,City,176,Country 88381,City,176,Country 88382,City,176,Country 88414,City,176,Country 88395,City,176,Country 88407,City,176,Country 88410,City,176,Country 88412,City,176,Country 88419,City,176,Country 88439,City,176,Country 88440,City,176,Country 88467,City,176,Country 88469,City,176,Country 88472,City,176,Country 88486,City,176,Country 88640,City,176,Country 88644,City,176,Country 88502,City,176,Country 88505,City,176,Country 88514,City,176,Country 88523,City,176,Country 88528,City,176,Country 88563,City,176,Country 88548,City,176,Country 88550,City,176,Country 88652,City,176,Country 88577,City,176,Country 88582,City,176,Country 88583,City,176,Country 88584,City,176,Country 88587,City,176,Country 88591,City,176,Country 88594,City,176,Country 88600,City,176,Country 88602,City,176,Country 88607,City,176,Country 88616,City,176,Country 88655,City,176,Country 88656,City,176,Country 88871,City,176,Country 88657,City,176,Country 88668,City,176,Country 88670,City,176,Country 88673,City,176,Country 88675,City,176,Country 88680,City,176,Country 88683,City,176,Country 88874,City,176,Country 88698,City,176,Country 88699,City,176,Country 88706,City,176,Country 88720,City,176,Country 88879,City,176,Country 88723,City,176,Country 88730,City,176,Country 88745,City,176,Country 88733,City,176,Country 88734,City,176,Country 88896,City,176,Country 85810,City,176,Country 85853,City,176,Country 85854,City,176,Country 85866,City,176,Country 85875,City,176,Country 85895,City,176,Country 85899,City,176,Country 85911,City,176,Country 85914,City,176,Country 85932,City,176,Country 85959,City,176,Country 85985,City,176,Country 86002,City,176,Country 86003,City,176,Country 86039,City,176,Country 86050,City,176,Country 86080,City,176,Country 86084,City,176,Country 86085,City,176,Country 86087,City,176,Country 86117,City,176,Country 86129,City,176,Country 86235,City,176,Country 86261,City,176,Country 86174,City,176,Country 86209,City,176,Country 86215,City,176,Country 86227,City,176,Country 86225,City,176,Country 86423,City,176,Country 86288,City,176,Country 86427,City,176,Country 86435,City,176,Country 86436,City,176,Country 86309,City,176,Country 86408,City,176,Country 86363,City,176,Country 86364,City,176,Country 86401,City,176,Country 86380,City,176,Country 86392,City,176,Country 86447,City,176,Country 86499,City,176,Country 86507,City,176,Country 86531,City,176,Country 86537,City,176,Country 86541,City,176,Country 86548,City,176,Country 86549,City,176,Country 86550,City,176,Country 86561,City,176,Country 86569,City,176,Country 86570,City,176,Country 86594,City,176,Country 86595,City,176,Country 86596,City,176,Country 86618,City,176,Country 86615,City,176,Country 86852,City,176,Country 86636,City,176,Country 86866,City,176,Country 86661,City,176,Country 86722,City,176,Country 86729,City,176,Country 86731,City,176,Country 86733,City,176,Country 86789,City,176,Country 86811,City,176,Country 86813,City,176,Country 86831,City,176,Country 86835,City,176,Country 86837,City,176,Country 86977,City,176,Country 86877,City,176,Country 86878,City,176,Country 86889,City,176,Country 86893,City,176,Country 86886,City,176,Country 86936,City,176,Country 86935,City,176,Country 86944,City,176,Country 86953,City,176,Country 86963,City,176,Country 86974,City,176,Country 88758,City,176,Country 88760,City,176,Country 86987,City,176,Country 86991,City,176,Country 86998,City,176,Country 87011,City,176,Country 87012,City,176,Country 87060,City,176,Country 87063,City,176,Country 87068,City,176,Country 87038,City,176,Country 87050,City,176,Country 87071,City,176,Country 87053,City,176,Country 87056,City,176,Country 87103,City,176,Country 87120,City,176,Country 87163,City,176,Country 87173,City,176,Country 87195,City,176,Country 87217,City,176,Country 87241,City,176,Country 87245,City,176,Country 87250,City,176,Country 87322,City,176,Country 87280,City,176,Country 87281,City,176,Country 87286,City,176,Country 87298,City,176,Country 87348,City,176,Country 87352,City,176,Country 87358,City,176,Country 87373,City,176,Country 87386,City,176,Country 87383,City,176,Country 87389,City,176,Country 87404,City,176,Country 87396,City,176,Country 87416,City,176,Country 87430,City,176,Country 87436,City,176,Country 87782,City,176,Country 87471,City,176,Country 87495,City,176,Country 87520,City,176,Country 87519,City,176,Country 87530,City,176,Country 87531,City,176,Country 87534,City,176,Country 87563,City,176,Country 87565,City,176,Country 87575,City,176,Country 87577,City,176,Country 87579,City,176,Country 87586,City,176,Country 87612,City,176,Country 87626,City,176,Country 87639,City,176,Country 87756,City,176,Country 87686,City,176,Country 87759,City,176,Country 87709,City,176,Country 87714,City,176,Country 87723,City,176,Country 87724,City,176,Country 87744,City,176,Country 87741,City,176,Country 87745,City,176,Country 87771,City,176,Country 87772,City,176,Country 87784,City,176,Country 87789,City,176,Country 87796,City,176,Country 87811,City,176,Country 87815,City,176,Country 87839,City,176,Country 87841,City,176,Country 87881,City,176,Country 87892,City,176,Country 87917,City,176,Country 87925,City,176,Country 87926,City,176,Country 87927,City,176,Country 87928,City,176,Country 87929,City,176,Country 87930,City,176,Country 87931,City,176,Country 87932,City,176,Country 88034,City,176,Country 87975,City,176,Country 88829,City,176,Country 88331,City,176,Country 88063,City,176,Country 88070,City,176,Country 88125,City,176,Country 88133,City,176,Country 88155,City,176,Country 88154,City,176,Country 88839,City,176,Country 88164,City,176,Country 88172,City,176,Country 88175,City,176,Country 88182,City,176,Country 88208,City,176,Country 88209,City,176,Country 88217,City,176,Country 88224,City,176,Country 88231,City,176,Country 88259,City,176,Country 88274,City,176,Country 88842,City,176,Country 88845,City,176,Country 88851,City,176,Country 88857,City,176,Country 88865,City,176,Country 88277,City,176,Country 88278,City,176,Country 88291,City,176,Country 88296,City,176,Country 88304,City,176,Country 88310,City,176,Country 88408,City,176,Country 88432,City,176,Country 88441,City,176,Country 88446,City,176,Country 88447,City,176,Country 88475,City,176,Country 88487,City,176,Country 88636,City,176,Country 88639,City,176,Country 88556,City,176,Country 88495,City,176,Country 88521,City,176,Country 88535,City,176,Country 88543,City,176,Country 88559,City,176,Country 88565,City,176,Country 88575,City,176,Country 88578,City,176,Country 88601,City,176,Country 88604,City,176,Country 88739,City,176,Country 88664,City,176,Country 88667,City,176,Country 88681,City,176,Country 88686,City,176,Country 88878,City,176,Country 88886,City,176,Country 88725,City,176,Country 88726,City,176,Country 88731,City,176,Country 88747,City,176,Country 88749,City,176,Country 88750,City,176,Country 88887,City,176,Country 88902,City,176,Country 85775,City,176,Country 85776,City,176,Country 85779,City,176,Country 85786,City,176,Country 85804,City,176,Country 85818,City,176,Country 85831,City,176,Country 85832,City,176,Country 85836,City,176,Country 85878,City,176,Country 85876,City,176,Country 85920,City,176,Country 85928,City,176,Country 85997,City,176,Country 86027,City,176,Country 86045,City,176,Country 86061,City,176,Country 86097,City,176,Country 86124,City,176,Country 86248,City,176,Country 86253,City,176,Country 86192,City,176,Country 86190,City,176,Country 86196,City,176,Country 86205,City,176,Country 86232,City,176,Country 86267,City,176,Country 86271,City,176,Country 86273,City,176,Country 86282,City,176,Country 86320,City,176,Country 86321,City,176,Country 86332,City,176,Country 86337,City,176,Country 86360,City,176,Country 86365,City,176,Country 86444,City,176,Country 86450,City,176,Country 86452,City,176,Country 86468,City,176,Country 86486,City,176,Country 86481,City,176,Country 86491,City,176,Country 86503,City,176,Country 86504,City,176,Country 86500,City,176,Country 86506,City,176,Country 86521,City,176,Country 86557,City,176,Country 86575,City,176,Country 86577,City,176,Country 86603,City,176,Country 86610,City,176,Country 86626,City,176,Country 86863,City,176,Country 86672,City,176,Country 86674,City,176,Country 86683,City,176,Country 86684,City,176,Country 86751,City,176,Country 86697,City,176,Country 86736,City,176,Country 86776,City,176,Country 86777,City,176,Country 86770,City,176,Country 86773,City,176,Country 86796,City,176,Country 86802,City,176,Country 86819,City,176,Country 86832,City,176,Country 86833,City,176,Country 86843,City,176,Country 86890,City,176,Country 86932,City,176,Country 86947,City,176,Country 86962,City,176,Country 86964,City,176,Country 88757,City,176,Country 88772,City,176,Country 88773,City,176,Country 88816,City,176,Country 88784,City,176,Country 88788,City,176,Country 88805,City,176,Country 88803,City,176,Country 86996,City,176,Country 87014,City,176,Country 87058,City,176,Country 87022,City,176,Country 87025,City,176,Country 87064,City,176,Country 87046,City,176,Country 87049,City,176,Country 87052,City,176,Country 87081,City,176,Country 87143,City,176,Country 87155,City,176,Country 87157,City,176,Country 87161,City,176,Country 87162,City,176,Country 87193,City,176,Country 87222,City,176,Country 87263,City,176,Country 87309,City,176,Country 87313,City,176,Country 87347,City,176,Country 87370,City,176,Country 87399,City,176,Country 87414,City,176,Country 87428,City,176,Country 87439,City,176,Country 87452,City,176,Country 87453,City,176,Country 87461,City,176,Country 87469,City,176,Country 87483,City,176,Country 87523,City,176,Country 87526,City,176,Country 87553,City,176,Country 87552,City,176,Country 87574,City,176,Country 87576,City,176,Country 87755,City,176,Country 87752,City,176,Country 87617,City,176,Country 87630,City,176,Country 87650,City,176,Country 87659,City,176,Country 87664,City,176,Country 87760,City,176,Country 87706,City,176,Country 87734,City,176,Country 87737,City,176,Country 87832,City,176,Country 87846,City,176,Country 87851,City,176,Country 87871,City,176,Country 87879,City,176,Country 87904,City,176,Country 87933,City,176,Country 87934,City,176,Country 87951,City,176,Country 87958,City,176,Country 87972,City,176,Country 87978,City,176,Country 87992,City,176,Country 88008,City,176,Country 88018,City,176,Country 88053,City,176,Country 88056,City,176,Country 88058,City,176,Country 88074,City,176,Country 88082,City,176,Country 88094,City,176,Country 88106,City,176,Country 88335,City,176,Country 88150,City,176,Country 88153,City,176,Country 88161,City,176,Country 88197,City,176,Country 88244,City,176,Country 88206,City,176,Country 88234,City,176,Country 88273,City,176,Country 88266,City,176,Country 88843,City,176,Country 88288,City,176,Country 88292,City,176,Country 88358,City,176,Country 88360,City,176,Country 88371,City,176,Country 88374,City,176,Country 88375,City,176,Country 88379,City,176,Country 88388,City,176,Country 88405,City,176,Country 88413,City,176,Country 88425,City,176,Country 88443,City,176,Country 88454,City,176,Country 88466,City,176,Country 88459,City,176,Country 88461,City,176,Country 88468,City,176,Country 88637,City,176,Country 88491,City,176,Country 88540,City,176,Country 88541,City,176,Country 88546,City,176,Country 88650,City,176,Country 88570,City,176,Country 88573,City,176,Country 88574,City,176,Country 88579,City,176,Country 88589,City,176,Country 88590,City,176,Country 88621,City,176,Country 88678,City,176,Country 88682,City,176,Country 88691,City,176,Country 88692,City,176,Country 88903,City,176,Country 88735,City,176,Country 88900,City,176,Country 85791,City,176,Country 85880,City,176,Country 85887,City,176,Country 85896,City,176,Country 85901,City,176,Country 85947,City,176,Country 85979,City,176,Country 86004,City,176,Country 86006,City,176,Country 86096,City,176,Country 86139,City,176,Country 86233,City,176,Country 86162,City,176,Country 86165,City,176,Country 86197,City,176,Country 86342,City,176,Country 86420,City,176,Country 86352,City,176,Country 86404,City,176,Country 86473,City,176,Country 86518,City,176,Country 86553,City,176,Country 86611,City,176,Country 86645,City,176,Country 86864,City,176,Country 86681,City,176,Country 86695,City,176,Country 86715,City,176,Country 86760,City,176,Country 86784,City,176,Country 86809,City,176,Country 86838,City,176,Country 86909,City,176,Country 86945,City,176,Country 86949,City,176,Country 86958,City,176,Country 86960,City,176,Country 88761,City,176,Country 88826,City,176,Country 87009,City,176,Country 86999,City,176,Country 87062,City,176,Country 87065,City,176,Country 87175,City,176,Country 87184,City,176,Country 87197,City,176,Country 87224,City,176,Country 87324,City,176,Country 87318,City,176,Country 87508,City,176,Country 87556,City,176,Country 87588,City,176,Country 87604,City,176,Country 87698,City,176,Country 87685,City,176,Country 87688,City,176,Country 87762,City,176,Country 87726,City,176,Country 87764,City,176,Country 87765,City,176,Country 87742,City,176,Country 87817,City,176,Country 87822,City,176,Country 87831,City,176,Country 87842,City,176,Country 88022,City,176,Country 88050,City,176,Country 88069,City,176,Country 88079,City,176,Country 88080,City,176,Country 88123,City,176,Country 88120,City,176,Country 88334,City,176,Country 88344,City,176,Country 88345,City,176,Country 88185,City,176,Country 88227,City,176,Country 88256,City,176,Country 88841,City,176,Country 88846,City,176,Country 88289,City,176,Country 88312,City,176,Country 88313,City,176,Country 88385,City,176,Country 88397,City,176,Country 88402,City,176,Country 88403,City,176,Country 88423,City,176,Country 88552,City,176,Country 88610,City,176,Country 88612,City,176,Country 88661,City,176,Country 88872,City,176,Country 88877,City,176,Country 88714,City,176,Country 88728,City,176,Country 88736,City,176,Country 85780,City,176,Country 85782,City,176,Country 85784,City,176,Country 86012,City,176,Country 85822,City,176,Country 85828,City,176,Country 85837,City,176,Country 85838,City,176,Country 85855,City,176,Country 86014,City,176,Country 85888,City,176,Country 85912,City,176,Country 85913,City,176,Country 85980,City,176,Country 85978,City,176,Country 85964,City,176,Country 85969,City,176,Country 85981,City,176,Country 85983,City,176,Country 85995,City,176,Country 86072,City,176,Country 86082,City,176,Country 86114,City,176,Country 86116,City,176,Country 86119,City,176,Country 86135,City,176,Country 86243,City,176,Country 86155,City,176,Country 86160,City,176,Country 86262,City,176,Country 86163,City,176,Country 86175,City,176,Country 86184,City,176,Country 86201,City,176,Country 86202,City,176,Country 86218,City,176,Country 86280,City,176,Country 86290,City,176,Country 86294,City,176,Country 86430,City,176,Country 86434,City,176,Country 86318,City,176,Country 86330,City,176,Country 86411,City,176,Country 86336,City,176,Country 86348,City,176,Country 86362,City,176,Country 86368,City,176,Country 86460,City,176,Country 86560,City,176,Country 86602,City,176,Country 86623,City,176,Country 86634,City,176,Country 86648,City,176,Country 86652,City,176,Country 86655,City,176,Country 86671,City,176,Country 86682,City,176,Country 86698,City,176,Country 86732,City,176,Country 86790,City,176,Country 86823,City,176,Country 86828,City,176,Country 86844,City,176,Country 86895,City,176,Country 86905,City,176,Country 86950,City,176,Country 86968,City,176,Country 86971,City,176,Country 88764,City,176,Country 88770,City,176,Country 88817,City,176,Country 88825,City,176,Country 88810,City,176,Country 88795,City,176,Country 88799,City,176,Country 88809,City,176,Country 86982,City,176,Country 87078,City,176,Country 87089,City,176,Country 87099,City,176,Country 87149,City,176,Country 87189,City,176,Country 87261,City,176,Country 87264,City,176,Country 87295,City,176,Country 87303,City,176,Country 87328,City,176,Country 87321,City,176,Country 87330,City,176,Country 87335,City,176,Country 87345,City,176,Country 87350,City,176,Country 87859,City,176,Country 87860,City,176,Country 87401,City,176,Country 87394,City,176,Country 87862,City,176,Country 87412,City,176,Country 87781,City,176,Country 87460,City,176,Country 87476,City,176,Country 87557,City,176,Country 87747,City,176,Country 87754,City,176,Country 87753,City,176,Country 88752,City,176,Country 87616,City,176,Country 87628,City,176,Country 87629,City,176,Country 87633,City,176,Country 87637,City,176,Country 87657,City,176,Country 87661,City,176,Country 87672,City,176,Country 87675,City,176,Country 87707,City,176,Country 87718,City,176,Country 87719,City,176,Country 87739,City,176,Country 87740,City,176,Country 87806,City,176,Country 87886,City,176,Country 87918,City,176,Country 88037,City,176,Country 87923,City,176,Country 87949,City,176,Country 87954,City,176,Country 87955,City,176,Country 87966,City,176,Country 87987,City,176,Country 88017,City,176,Country 88027,City,176,Country 88041,City,176,Country 88327,City,176,Country 88076,City,176,Country 88085,City,176,Country 88107,City,176,Country 88111,City,176,Country 88338,City,176,Country 88349,City,176,Country 88137,City,176,Country 88192,City,176,Country 88219,City,176,Country 88226,City,176,Country 88229,City,176,Country 88257,City,176,Country 88261,City,176,Country 88860,City,176,Country 88283,City,176,Country 88298,City,176,Country 88380,City,176,Country 88429,City,176,Country 88449,City,176,Country 88455,City,176,Country 88474,City,176,Country 88482,City,176,Country 88483,City,176,Country 88494,City,176,Country 88511,City,176,Country 88515,City,176,Country 88522,City,176,Country 88553,City,176,Country 88567,City,176,Country 88586,City,176,Country 88595,City,176,Country 88608,City,176,Country 88665,City,176,Country 88694,City,176,Country 88876,City,176,Country 88717,City,176,Country 88881,City,176,Country 88722,City,176,Country 88724,City,176,Country 88743,City,176,Country 88897,City,176,Country 85793,City,176,Country 85801,City,176,Country 85802,City,176,Country 85824,City,176,Country 85834,City,176,Country 85843,City,176,Country 85846,City,176,Country 85852,City,176,Country 85859,City,176,Country 85863,City,176,Country 85870,City,176,Country 86017,City,176,Country 86016,City,176,Country 85893,City,176,Country 85900,City,176,Country 85921,City,176,Country 85925,City,176,Country 85938,City,176,Country 85942,City,176,Country 85948,City,176,Country 85951,City,176,Country 85955,City,176,Country 85957,City,176,Country 85993,City,176,Country 86020,City,176,Country 86022,City,176,Country 86023,City,176,Country 86033,City,176,Country 86054,City,176,Country 86057,City,176,Country 86070,City,176,Country 86077,City,176,Country 86083,City,176,Country 86110,City,176,Country 86131,City,176,Country 86140,City,176,Country 86142,City,176,Country 86144,City,176,Country 86244,City,176,Country 86246,City,176,Country 86260,City,176,Country 86170,City,176,Country 86183,City,176,Country 86198,City,176,Country 86206,City,176,Country 86219,City,176,Country 86224,City,176,Country 86222,City,176,Country 86422,City,176,Country 86281,City,176,Country 86286,City,176,Country 86425,City,176,Country 86297,City,176,Country 86306,City,176,Country 86358,City,176,Country 86410,City,176,Country 86418,City,176,Country 86345,City,176,Country 86349,City,176,Country 86351,City,176,Country 86421,City,176,Country 86353,City,176,Country 86371,City,176,Country 86400,City,176,Country 86375,City,176,Country 86399,City,176,Country 86385,City,176,Country 86405,City,176,Country 86407,City,176,Country 86440,City,176,Country 86449,City,176,Country 86475,City,176,Country 86476,City,176,Country 86467,City,176,Country 86482,City,176,Country 86484,City,176,Country 86489,City,176,Country 86492,City,176,Country 86512,City,176,Country 86516,City,176,Country 86523,City,176,Country 86525,City,176,Country 86542,City,176,Country 86543,City,176,Country 86544,City,176,Country 86566,City,176,Country 86574,City,176,Country 86576,City,176,Country 86579,City,176,Country 86582,City,176,Country 86628,City,176,Country 86605,City,176,Country 86609,City,176,Country 86614,City,176,Country 86624,City,176,Country 86637,City,176,Country 86644,City,176,Country 86657,City,176,Country 86669,City,176,Country 86743,City,176,Country 86687,City,176,Country 86696,City,176,Country 86701,City,176,Country 86708,City,176,Country 86721,City,176,Country 86724,City,176,Country 86726,City,176,Country 86735,City,176,Country 86768,City,176,Country 86772,City,176,Country 86815,City,176,Country 86834,City,176,Country 86874,City,176,Country 86876,City,176,Country 86882,City,176,Country 86884,City,176,Country 86920,City,176,Country 86922,City,176,Country 86955,City,176,Country 86967,City,176,Country 88811,City,176,Country 88762,City,176,Country 88771,City,176,Country 88782,City,176,Country 88785,City,176,Country 88792,City,176,Country 88807,City,176,Country 86980,City,176,Country 86983,City,176,Country 87005,City,176,Country 87007,City,176,Country 86994,City,176,Country 87001,City,176,Country 87018,City,176,Country 87024,City,176,Country 87019,City,176,Country 87030,City,176,Country 87069,City,176,Country 87047,City,176,Country 87075,City,176,Country 87127,City,176,Country 87128,City,176,Country 87130,City,176,Country 87080,City,176,Country 87084,City,176,Country 87087,City,176,Country 87088,City,176,Country 87091,City,176,Country 87102,City,176,Country 87111,City,176,Country 87117,City,176,Country 87119,City,176,Country 87131,City,176,Country 87140,City,176,Country 87141,City,176,Country 87166,City,176,Country 87182,City,176,Country 87183,City,176,Country 87185,City,176,Country 87187,City,176,Country 87201,City,176,Country 87203,City,176,Country 87212,City,176,Country 87220,City,176,Country 87226,City,176,Country 87230,City,176,Country 87232,City,176,Country 87260,City,176,Country 87270,City,176,Country 87277,City,176,Country 87305,City,176,Country 87310,City,176,Country 87312,City,176,Country 87316,City,176,Country 87317,City,176,Country 87319,City,176,Country 87329,City,176,Country 87332,City,176,Country 87344,City,176,Country 87349,City,176,Country 87368,City,176,Country 87372,City,176,Country 87387,City,176,Country 87392,City,176,Country 87864,City,176,Country 87865,City,176,Country 87867,City,176,Country 87413,City,176,Country 87417,City,176,Country 87427,City,176,Country 87435,City,176,Country 87438,City,176,Country 87780,City,176,Country 87455,City,176,Country 87462,City,176,Country 87488,City,176,Country 87500,City,176,Country 87509,City,176,Country 87513,City,176,Country 87518,City,176,Country 87546,City,176,Country 87564,City,176,Country 87572,City,176,Country 87751,City,176,Country 87581,City,176,Country 87589,City,176,Country 87596,City,176,Country 87601,City,176,Country 87622,City,176,Country 87620,City,176,Country 87625,City,176,Country 87631,City,176,Country 87653,City,176,Country 87654,City,176,Country 87643,City,176,Country 87644,City,176,Country 87647,City,176,Country 87651,City,176,Country 87656,City,176,Country 87670,City,176,Country 87673,City,176,Country 87676,City,176,Country 87677,City,176,Country 87695,City,176,Country 87713,City,176,Country 87732,City,176,Country 87722,City,176,Country 87728,City,176,Country 87767,City,176,Country 87743,City,176,Country 87768,City,176,Country 87786,City,176,Country 87785,City,176,Country 87788,City,176,Country 87790,City,176,Country 87799,City,176,Country 87800,City,176,Country 87814,City,176,Country 87835,City,176,Country 87828,City,176,Country 87833,City,176,Country 87852,City,176,Country 87849,City,176,Country 87873,City,176,Country 87884,City,176,Country 87895,City,176,Country 87894,City,176,Country 87897,City,176,Country 87902,City,176,Country 87916,City,176,Country 87922,City,176,Country 87936,City,176,Country 87937,City,176,Country 87968,City,176,Country 88033,City,176,Country 87988,City,176,Country 87993,City,176,Country 87995,City,176,Country 88001,City,176,Country 88032,City,176,Country 88016,City,176,Country 88019,City,176,Country 88025,City,176,Country 88039,City,176,Country 88044,City,176,Country 88048,City,176,Country 88051,City,176,Country 88057,City,176,Country 88064,City,176,Country 88075,City,176,Country 88081,City,176,Country 88083,City,176,Country 88091,City,176,Country 88099,City,176,Country 88122,City,176,Country 88346,City,176,Country 88352,City,176,Country 88130,City,176,Country 88132,City,176,Country 88134,City,176,Country 88135,City,176,Country 88140,City,176,Country 88143,City,176,Country 88156,City,176,Country 88840,City,176,Country 88169,City,176,Country 88170,City,176,Country 88173,City,176,Country 88177,City,176,Country 88181,City,176,Country 88193,City,176,Country 88204,City,176,Country 88205,City,176,Country 88211,City,176,Country 88215,City,176,Country 88225,City,176,Country 88241,City,176,Country 88247,City,176,Country 88252,City,176,Country 88255,City,176,Country 88258,City,176,Country 88270,City,176,Country 88852,City,176,Country 88279,City,176,Country 88302,City,176,Country 88306,City,176,Country 88314,City,176,Country 88319,City,176,Country 88320,City,176,Country 88354,City,176,Country 88357,City,176,Country 88370,City,176,Country 88373,City,176,Country 88445,City,176,Country 88415,City,176,Country 88387,City,176,Country 88389,City,176,Country 88390,City,176,Country 88391,City,176,Country 88457,City,176,Country 88458,City,176,Country 88477,City,176,Country 88480,City,176,Country 88481,City,176,Country 88485,City,176,Country 88645,City,176,Country 88493,City,176,Country 88497,City,176,Country 88503,City,176,Country 88512,City,176,Country 88517,City,176,Country 88520,City,176,Country 88531,City,176,Country 88537,City,176,Country 88544,City,176,Country 88545,City,176,Country 88561,City,176,Country 88562,City,176,Country 88648,City,176,Country 88566,City,176,Country 88580,City,176,Country 88588,City,176,Country 88593,City,176,Country 88599,City,176,Country 88626,City,176,Country 88624,City,176,Country 88625,City,176,Country 88868,City,176,Country 88869,City,176,Country 88738,City,176,Country 88676,City,176,Country 88677,City,176,Country 88685,City,176,Country 88707,City,176,Country 88700,City,176,Country 88703,City,176,Country 88710,City,176,Country 88882,City,176,Country 88729,City,176,Country 88889,City,176,Country 88895,City,176,Country 88737,City,176,Country 88899,City,176,Country 85792,City,176,Country 85833,City,176,Country 85864,City,176,Country 85865,City,176,Country 85935,City,176,Country 85958,City,176,Country 85998,City,176,Country 86037,City,176,Country 86065,City,176,Country 86059,City,176,Country 86064,City,176,Country 86089,City,176,Country 86115,City,176,Country 86236,City,176,Country 86153,City,176,Country 86259,City,176,Country 86173,City,176,Country 86177,City,176,Country 86187,City,176,Country 86221,City,176,Country 86429,City,176,Country 86431,City,176,Country 86432,City,176,Country 86323,City,176,Country 86412,City,176,Country 86343,City,176,Country 86373,City,176,Country 86470,City,176,Country 86502,City,176,Country 86552,City,176,Country 86591,City,176,Country 86597,City,176,Country 86853,City,176,Country 86635,City,176,Country 86653,City,176,Country 86680,City,176,Country 86688,City,176,Country 86703,City,176,Country 86757,City,176,Country 86766,City,176,Country 86840,City,176,Country 86892,City,176,Country 86885,City,176,Country 86959,City,176,Country 86961,City,176,Country 88815,City,176,Country 88763,City,176,Country 88793,City,176,Country 88797,City,176,Country 87097,City,176,Country 87114,City,176,Country 87134,City,176,Country 87136,City,176,Country 87164,City,176,Country 87214,City,176,Country 87238,City,176,Country 87246,City,176,Country 87262,City,176,Country 87315,City,176,Country 87320,City,176,Country 87333,City,176,Country 87337,City,176,Country 87359,City,176,Country 87429,City,176,Country 87437,City,176,Country 87442,City,176,Country 87475,City,176,Country 87521,City,176,Country 87559,City,176,Country 87539,City,176,Country 87551,City,176,Country 87598,City,176,Country 87608,City,176,Country 87611,City,176,Country 87618,City,176,Country 87642,City,176,Country 87684,City,176,Country 87787,City,176,Country 87837,City,176,Country 87795,City,176,Country 87878,City,176,Country 87915,City,176,Country 87941,City,176,Country 87967,City,176,Country 88062,City,176,Country 88097,City,176,Country 88112,City,176,Country 88113,City,176,Country 88336,City,176,Country 88228,City,176,Country 88230,City,176,Country 88853,City,176,Country 88366,City,176,Country 88430,City,176,Country 88431,City,176,Country 88450,City,176,Country 88473,City,176,Country 88643,City,176,Country 88558,City,176,Country 88542,City,176,Country 88598,City,176,Country 88701,City,176,Country 88719,City,176,Country 88740,City,176,Country 85777,City,176,Country 85778,City,176,Country 85789,City,176,Country 85796,City,176,Country 85806,City,176,Country 85825,City,176,Country 85842,City,176,Country 85857,City,176,Country 85872,City,176,Country 85882,City,176,Country 86015,City,176,Country 85898,City,176,Country 85905,City,176,Country 85924,City,176,Country 85967,City,176,Country 85970,City,176,Country 85975,City,176,Country 85976,City,176,Country 85972,City,176,Country 85974,City,176,Country 85992,City,176,Country 86035,City,176,Country 86051,City,176,Country 86068,City,176,Country 86086,City,176,Country 86091,City,176,Country 86095,City,176,Country 86104,City,176,Country 86120,City,176,Country 86127,City,176,Country 86146,City,176,Country 86247,City,176,Country 86250,City,176,Country 86257,City,176,Country 86255,City,176,Country 86258,City,176,Country 86185,City,176,Country 86204,City,176,Country 86207,City,176,Country 86211,City,176,Country 86213,City,176,Country 86229,City,176,Country 86228,City,176,Country 86274,City,176,Country 86279,City,176,Country 86289,City,176,Country 86296,City,176,Country 86428,City,176,Country 86433,City,176,Country 86324,City,176,Country 86413,City,176,Country 86335,City,176,Country 86416,City,176,Country 86338,City,176,Country 86366,City,176,Country 86403,City,176,Country 86377,City,176,Country 86378,City,176,Country 86398,City,176,Country 86406,City,176,Country 86438,City,176,Country 86441,City,176,Country 86442,City,176,Country 86451,City,176,Country 86453,City,176,Country 86454,City,176,Country 86456,City,176,Country 86464,City,176,Country 86466,City,176,Country 86478,City,176,Country 86479,City,176,Country 86490,City,176,Country 86508,City,176,Country 86511,City,176,Country 86515,City,176,Country 86519,City,176,Country 86539,City,176,Country 86530,City,176,Country 86532,City,176,Country 86534,City,176,Country 86540,City,176,Country 86559,City,176,Country 86562,City,176,Country 86563,City,176,Country 86598,City,176,Country 86629,City,176,Country 86855,City,176,Country 86632,City,176,Country 86677,City,176,Country 86741,City,176,Country 86685,City,176,Country 86747,City,176,Country 86692,City,176,Country 86702,City,176,Country 86711,City,176,Country 86761,City,176,Country 86764,City,176,Country 86767,City,176,Country 86769,City,176,Country 86778,City,176,Country 86786,City,176,Country 86782,City,176,Country 86803,City,176,Country 86805,City,176,Country 86810,City,176,Country 86818,City,176,Country 86841,City,176,Country 86873,City,176,Country 86875,City,176,Country 86881,City,176,Country 86894,City,176,Country 86911,City,176,Country 86930,City,176,Country 86937,City,176,Country 86969,City,176,Country 86970,City,176,Country 88777,City,176,Country 88822,City,176,Country 88823,City,176,Country 88824,City,176,Country 88827,City,176,Country 88789,City,176,Country 86981,City,176,Country 86989,City,176,Country 86995,City,176,Country 87013,City,176,Country 87033,City,176,Country 87035,City,176,Country 87054,City,176,Country 87139,City,176,Country 87147,City,176,Country 87148,City,176,Country 87150,City,176,Country 87152,City,176,Country 87158,City,176,Country 87165,City,176,Country 87169,City,176,Country 87170,City,176,Country 87171,City,176,Country 87174,City,176,Country 87190,City,176,Country 87199,City,176,Country 87200,City,176,Country 87210,City,176,Country 87211,City,176,Country 87229,City,176,Country 87239,City,176,Country 87244,City,176,Country 87275,City,176,Country 87272,City,176,Country 87288,City,176,Country 87308,City,176,Country 87334,City,176,Country 87343,City,176,Country 87356,City,176,Country 87391,City,176,Country 87397,City,176,Country 87433,City,176,Country 87778,City,176,Country 87444,City,176,Country 87468,City,176,Country 87477,City,176,Country 87497,City,176,Country 87528,City,176,Country 87529,City,176,Country 87540,City,176,Country 87555,City,176,Country 87566,City,176,Country 87568,City,176,Country 87573,City,176,Country 87748,City,176,Country 87584,City,176,Country 87600,City,176,Country 87645,City,176,Country 87646,City,176,Country 87662,City,176,Country 87666,City,176,Country 87668,City,176,Country 87679,City,176,Country 87687,City,176,Country 87701,City,176,Country 87794,City,176,Country 87804,City,176,Country 87808,City,176,Country 87836,City,176,Country 87812,City,176,Country 87816,City,176,Country 87823,City,176,Country 87857,City,176,Country 87876,City,176,Country 87887,City,176,Country 87888,City,176,Country 87893,City,176,Country 87910,City,176,Country 87912,City,176,Country 87950,City,176,Country 87956,City,176,Country 87961,City,176,Country 87963,City,176,Country 87976,City,176,Country 87977,City,176,Country 87981,City,176,Country 88009,City,176,Country 88020,City,176,Country 88024,City,176,Country 88049,City,176,Country 88329,City,176,Country 88066,City,176,Country 88068,City,176,Country 88077,City,176,Country 88092,City,176,Country 88114,City,176,Country 88343,City,176,Country 88136,City,176,Country 88139,City,176,Country 88147,City,176,Country 88157,City,176,Country 88165,City,176,Country 88178,City,176,Country 88186,City,176,Country 88210,City,176,Country 88212,City,176,Country 88236,City,176,Country 88238,City,176,Country 88859,City,176,Country 88359,City,176,Country 88362,City,176,Country 88393,City,176,Country 88394,City,176,Country 88398,City,176,Country 88409,City,176,Country 88428,City,176,Country 88437,City,176,Country 88442,City,176,Country 88448,City,176,Country 88453,City,176,Country 88460,City,176,Country 88465,City,176,Country 88470,City,176,Country 88492,City,176,Country 88555,City,176,Country 88508,City,176,Country 88509,City,176,Country 88516,City,176,Country 88519,City,176,Country 88564,City,176,Country 88571,City,176,Country 88592,City,176,Country 88627,City,176,Country 88628,City,176,Country 88629,City,176,Country 88630,City,176,Country 88615,City,176,Country 88619,City,176,Country 88620,City,176,Country 88669,City,176,Country 88671,City,176,Country 88674,City,176,Country 88684,City,176,Country 88687,City,176,Country 88695,City,176,Country 88696,City,176,Country 88718,City,176,Country 88727,City,176,Country 88732,City,176,Country 88891,City,176,Country 88893,City,176,Country 88894,City,176,Country 88898,City,176,Country 85787,City,176,Country 85845,City,176,Country 85850,City,176,Country 85860,City,176,Country 85933,City,176,Country 85937,City,176,Country 86052,City,176,Country 86076,City,176,Country 86105,City,176,Country 86126,City,176,Country 86148,City,176,Country 86238,City,176,Country 86179,City,176,Country 86200,City,176,Country 86270,City,176,Country 86331,City,176,Country 86370,City,176,Country 86384,City,176,Country 86439,City,176,Country 86545,City,176,Country 86646,City,176,Country 86659,City,176,Country 86679,City,176,Country 86771,City,176,Country 86797,City,176,Country 86847,City,176,Country 86921,City,176,Country 88768,City,176,Country 88786,City,176,Country 87010,City,176,Country 87021,City,176,Country 87048,City,176,Country 87100,City,176,Country 87138,City,176,Country 87196,City,176,Country 87213,City,176,Country 87266,City,176,Country 87402,City,176,Country 87458,City,176,Country 87464,City,176,Country 87466,City,176,Country 87512,City,176,Country 87522,City,176,Country 87541,City,176,Country 87750,City,176,Country 87591,City,176,Country 87669,City,176,Country 87671,City,176,Country 87678,City,176,Country 87690,City,176,Country 87727,City,176,Country 87736,City,176,Country 87854,City,176,Country 87875,City,176,Country 87901,City,176,Country 87907,City,176,Country 87974,City,176,Country 87990,City,176,Country 88055,City,176,Country 88072,City,176,Country 88836,City,176,Country 88141,City,176,Country 88138,City,176,Country 88200,City,176,Country 88251,City,176,Country 88264,City,176,Country 88265,City,176,Country 88269,City,176,Country 88300,City,176,Country 88308,City,176,Country 88318,City,176,Country 88426,City,176,Country 88438,City,176,Country 88484,City,176,Country 88635,City,176,Country 88554,City,176,Country 88622,City,176,Country 88623,City,176,Country 88663,City,176,Country 88690,City,176,Country 88712,City,176,Country 85800,City,176,Country 85886,City,176,Country 85902,City,176,Country 85915,City,176,Country 85929,City,176,Country 85956,City,176,Country 86008,City,176,Country 86018,City,176,Country 86025,City,176,Country 86074,City,176,Country 86036,City,176,Country 86042,City,176,Country 86049,City,176,Country 86067,City,176,Country 86106,City,176,Country 86108,City,176,Country 86109,City,176,Country 86138,City,176,Country 86152,City,176,Country 86157,City,176,Country 86249,City,176,Country 86161,City,176,Country 86220,City,176,Country 86223,City,176,Country 86283,City,176,Country 86285,City,176,Country 86291,City,176,Country 86292,City,176,Country 86437,City,176,Country 86310,City,176,Country 86311,City,176,Country 86314,City,176,Country 86359,City,176,Country 86367,City,176,Country 86446,City,176,Country 86520,City,176,Country 86527,City,176,Country 86585,City,176,Country 86616,City,176,Country 86617,City,176,Country 86854,City,176,Country 86668,City,176,Country 86673,City,176,Country 86676,City,176,Country 86678,City,176,Country 86744,City,176,Country 86710,City,176,Country 86756,City,176,Country 86727,City,176,Country 86781,City,176,Country 86794,City,176,Country 86849,City,176,Country 86978,City,176,Country 86903,City,176,Country 86904,City,176,Country 86912,City,176,Country 86923,City,176,Country 86925,City,176,Country 86938,City,176,Country 86946,City,176,Country 86972,City,176,Country 88778,City,176,Country 88818,City,176,Country 88819,City,176,Country 86986,City,176,Country 87017,City,176,Country 87043,City,176,Country 87073,City,176,Country 87096,City,176,Country 87104,City,176,Country 87178,City,176,Country 87202,City,176,Country 87205,City,176,Country 87267,City,176,Country 87287,City,176,Country 87296,City,176,Country 87346,City,176,Country 87363,City,176,Country 87425,City,176,Country 87456,City,176,Country 87480,City,176,Country 87485,City,176,Country 87492,City,176,Country 87501,City,176,Country 87536,City,176,Country 87549,City,176,Country 87558,City,176,Country 87580,City,176,Country 87582,City,176,Country 87602,City,176,Country 87649,City,176,Country 87700,City,176,Country 87682,City,176,Country 87694,City,176,Country 87705,City,176,Country 87716,City,176,Country 87783,City,176,Country 87798,City,176,Country 87801,City,176,Country 87818,City,176,Country 87834,City,176,Country 87844,City,176,Country 87847,City,176,Country 87921,City,176,Country 87935,City,176,Country 87962,City,176,Country 87986,City,176,Country 88007,City,176,Country 88015,City,176,Country 88042,City,176,Country 88087,City,176,Country 88098,City,176,Country 88121,City,176,Country 88353,City,176,Country 88129,City,176,Country 88126,City,176,Country 88145,City,176,Country 88148,City,176,Country 88176,City,176,Country 88188,City,176,Country 88190,City,176,Country 88195,City,176,Country 88202,City,176,Country 88245,City,176,Country 88213,City,176,Country 88233,City,176,Country 88239,City,176,Country 88246,City,176,Country 88253,City,176,Country 88263,City,176,Country 88307,City,176,Country 88311,City,176,Country 88315,City,176,Country 88316,City,176,Country 88369,City,176,Country 88416,City,176,Country 88404,City,176,Country 88418,City,176,Country 88462,City,176,Country 88490,City,176,Country 88507,City,176,Country 88526,City,176,Country 88646,City,176,Country 88708,City,176,Country 88883,City,176,Country 88892,City,176,Country 86009,City,176,Country 85821,City,176,Country 86013,City,176,Country 85829,City,176,Country 85830,City,176,Country 85826,City,176,Country 85827,City,176,Country 85861,City,176,Country 85862,City,176,Country 85867,City,176,Country 85879,City,176,Country 85890,City,176,Country 85906,City,176,Country 85907,City,176,Country 85923,City,176,Country 85926,City,176,Country 85927,City,176,Country 85940,City,176,Country 85953,City,176,Country 85965,City,176,Country 85982,City,176,Country 85987,City,176,Country 86001,City,176,Country 86005,City,176,Country 86026,City,176,Country 86028,City,176,Country 86053,City,176,Country 86055,City,176,Country 86060,City,176,Country 86069,City,176,Country 86075,City,176,Country 86093,City,176,Country 86081,City,176,Country 86088,City,176,Country 86090,City,176,Country 86092,City,176,Country 86098,City,176,Country 86100,City,176,Country 86103,City,176,Country 86122,City,176,Country 86123,City,176,Country 86130,City,176,Country 86132,City,176,Country 86141,City,176,Country 86150,City,176,Country 86149,City,176,Country 86240,City,176,Country 86242,City,176,Country 86256,City,176,Country 86166,City,176,Country 86199,City,176,Country 86231,City,176,Country 86276,City,176,Country 86284,City,176,Country 86287,City,176,Country 86299,City,176,Country 86303,City,176,Country 86307,City,176,Country 86308,City,176,Country 86317,City,176,Country 86322,City,176,Country 86319,City,176,Country 86327,City,176,Country 86356,City,176,Country 86409,City,176,Country 86414,City,176,Country 86339,City,176,Country 86341,City,176,Country 86346,City,176,Country 86445,City,176,Country 86448,City,176,Country 86455,City,176,Country 86457,City,176,Country 86462,City,176,Country 86494,City,176,Country 86495,City,176,Country 86498,City,176,Country 86514,City,176,Country 86524,City,176,Country 86528,City,176,Country 86529,City,176,Country 86535,City,176,Country 86536,City,176,Country 86538,City,176,Country 86547,City,176,Country 86551,City,176,Country 86572,City,176,Country 86581,City,176,Country 86583,City,176,Country 86584,City,176,Country 86589,City,176,Country 86592,City,176,Country 86606,City,176,Country 86608,City,176,Country 86621,City,176,Country 86862,City,176,Country 86867,City,176,Country 86658,City,176,Country 86660,City,176,Country 86662,City,176,Country 86670,City,176,Country 86748,City,176,Country 86749,City,176,Country 86690,City,176,Country 86691,City,176,Country 86694,City,176,Country 86700,City,176,Country 86704,City,176,Country 86753,City,176,Country 86717,City,176,Country 86720,City,176,Country 86734,City,176,Country 86737,City,176,Country 86780,City,176,Country 86792,City,176,Country 86798,City,176,Country 86800,City,176,Country 86807,City,176,Country 86822,City,176,Country 86824,City,176,Country 86825,City,176,Country 86830,City,176,Country 86846,City,176,Country 86869,City,176,Country 86979,City,176,Country 86880,City,176,Country 86888,City,176,Country 86901,City,176,Country 86907,City,176,Country 86919,City,176,Country 86948,City,176,Country 86951,City,176,Country 86975,City,176,Country 88774,City,176,Country 88775,City,176,Country 88776,City,176,Country 88821,City,176,Country 88780,City,176,Country 88783,City,176,Country 86997,City,176,Country 87004,City,176,Country 87016,City,176,Country 87032,City,176,Country 87031,City,176,Country 87059,City,176,Country 87039,City,176,Country 87044,City,176,Country 87051,City,176,Country 87076,City,176,Country 87107,City,176,Country 87108,City,176,Country 87112,City,176,Country 87116,City,176,Country 87121,City,176,Country 87118,City,176,Country 87133,City,176,Country 87215,City,176,Country 87153,City,176,Country 87160,City,176,Country 87223,City,176,Country 87231,City,176,Country 87247,City,176,Country 87253,City,176,Country 87258,City,176,Country 87269,City,176,Country 87271,City,176,Country 87273,City,176,Country 87304,City,176,Country 87326,City,176,Country 87341,City,176,Country 87342,City,176,Country 87357,City,176,Country 87355,City,176,Country 87366,City,176,Country 87365,City,176,Country 87369,City,176,Country 87376,City,176,Country 87379,City,176,Country 87382,City,176,Country 87384,City,176,Country 87385,City,176,Country 87388,City,176,Country 87390,City,176,Country 87395,City,176,Country 87426,City,176,Country 87422,City,176,Country 87423,City,176,Country 87779,City,176,Country 87446,City,176,Country 87443,City,176,Country 87449,City,176,Country 87454,City,176,Country 87481,City,176,Country 87465,City,176,Country 87467,City,176,Country 87489,City,176,Country 87491,City,176,Country 87503,City,176,Country 87562,City,176,Country 87578,City,176,Country 87585,City,176,Country 87593,City,176,Country 87648,City,176,Country 87655,City,176,Country 87663,City,176,Country 87702,City,176,Country 87720,City,176,Country 87738,City,176,Country 87769,City,176,Country 87793,City,176,Country 87821,City,176,Country 87826,City,176,Country 87827,City,176,Country 87829,City,176,Country 87838,City,176,Country 87843,City,176,Country 87845,City,176,Country 87853,City,176,Country 87856,City,176,Country 87872,City,176,Country 87882,City,176,Country 87889,City,176,Country 87896,City,176,Country 87899,City,176,Country 87906,City,176,Country 87913,City,176,Country 88038,City,176,Country 87948,City,176,Country 87945,City,176,Country 87959,City,176,Country 87971,City,176,Country 87979,City,176,Country 87982,City,176,Country 87983,City,176,Country 87984,City,176,Country 87985,City,176,Country 87991,City,176,Country 87994,City,176,Country 87997,City,176,Country 87998,City,176,Country 88004,City,176,Country 88325,City,176,Country 88052,City,176,Country 88071,City,176,Country 88089,City,176,Country 88093,City,176,Country 88108,City,176,Country 88118,City,176,Country 88830,City,176,Country 88337,City,176,Country 88324,City,176,Country 88149,City,176,Country 88158,City,176,Country 88152,City,176,Country 88171,City,176,Country 88180,City,176,Country 88191,City,176,Country 88218,City,176,Country 88223,City,176,Country 88235,City,176,Country 88240,City,176,Country 88268,City,176,Country 88854,City,176,Country 88855,City,176,Country 88856,City,176,Country 88867,City,176,Country 88861,City,176,Country 88282,City,176,Country 88295,City,176,Country 88297,City,176,Country 88303,City,176,Country 88364,City,176,Country 88386,City,176,Country 88392,City,176,Country 88406,City,176,Country 88427,City,176,Country 88433,City,176,Country 88434,City,176,Country 88436,City,176,Country 88451,City,176,Country 88464,City,176,Country 88638,City,176,Country 88510,City,176,Country 88513,City,176,Country 88527,City,176,Country 88530,City,176,Country 88532,City,176,Country 88538,City,176,Country 88547,City,176,Country 88651,City,176,Country 88569,City,176,Country 88576,City,176,Country 88581,City,176,Country 88603,City,176,Country 88609,City,176,Country 88613,City,176,Country 88618,City,176,Country 88662,City,176,Country 88870,City,176,Country 88658,City,176,Country 88659,City,176,Country 88660,City,176,Country 88689,City,176,Country 88873,City,176,Country 88875,City,176,Country 88697,City,176,Country 88704,City,176,Country 88705,City,176,Country 88709,City,176,Country 88711,City,176,Country 88721,City,176,Country 88885,City,176,Country 88890,City,176,Country 88901,City,176,Country 85819,City,176,Country 85820,City,176,Country 85823,City,176,Country 85858,City,176,Country 85883,City,176,Country 85894,City,176,Country 85897,City,176,Country 85945,City,176,Country 85963,City,176,Country 85996,City,176,Country 86073,City,176,Country 86034,City,176,Country 88754,City,176,Country 86113,City,176,Country 86154,City,176,Country 86186,City,176,Country 86210,City,176,Country 86217,City,176,Country 86268,City,176,Country 86316,City,176,Country 86415,City,176,Country 86350,City,176,Country 86396,City,176,Country 86458,City,176,Country 86463,City,176,Country 86578,City,176,Country 86607,City,176,Country 86627,City,176,Country 86633,City,176,Country 86638,City,176,Country 86650,City,176,Country 86750,City,176,Country 86699,City,176,Country 86712,City,176,Country 86713,City,176,Country 86774,City,176,Country 86839,City,176,Country 86916,City,176,Country 88814,City,176,Country 88759,City,176,Country 88787,City,176,Country 88791,City,176,Country 88798,City,176,Country 87008,City,176,Country 87003,City,176,Country 87023,City,176,Country 87028,City,176,Country 87057,City,176,Country 87079,City,176,Country 87090,City,176,Country 87132,City,176,Country 87176,City,176,Country 87204,City,176,Country 87218,City,176,Country 87235,City,176,Country 87240,City,176,Country 87256,City,176,Country 87255,City,176,Country 87282,City,176,Country 87283,City,176,Country 87299,City,176,Country 87327,City,176,Country 87331,City,176,Country 87360,City,176,Country 87378,City,176,Country 87381,City,176,Country 87405,City,176,Country 87776,City,176,Country 87478,City,176,Country 87532,City,176,Country 87537,City,176,Country 87538,City,176,Country 87543,City,176,Country 87615,City,176,Country 87619,City,176,Country 87635,City,176,Country 87667,City,176,Country 87674,City,176,Country 87680,City,176,Country 87683,City,176,Country 87735,City,176,Country 87890,City,176,Country 87911,City,176,Country 87947,City,176,Country 87970,City,176,Country 88014,City,176,Country 88043,City,176,Country 88045,City,176,Country 88046,City,176,Country 88054,City,176,Country 88328,City,176,Country 88095,City,176,Country 88100,City,176,Country 88101,City,176,Country 88348,City,176,Country 88127,City,176,Country 88131,City,176,Country 88144,City,176,Country 88242,City,176,Country 88179,City,176,Country 88198,City,176,Country 88207,City,176,Country 88214,City,176,Country 88250,City,176,Country 88322,City,176,Country 88368,City,176,Country 88421,City,176,Country 88632,City,176,Country 88489,City,176,Country 88506,City,176,Country 88534,City,176,Country 88560,City,176,Country 88654,City,176,Country 88568,City,176,Country 88572,City,176,Country 88585,City,176,Country 88666,City,176,Country 88702,City,176,Country 88744,City,176,Country 85799,City,176,Country 85807,City,176,Country 85809,City,176,Country 85813,City,176,Country 85835,City,176,Country 85874,City,176,Country 85877,City,176,Country 85936,City,176,Country 86145,City,176,Country 86245,City,176,Country 86172,City,176,Country 86214,City,176,Country 86216,City,176,Country 86263,City,176,Country 86264,City,176,Country 86265,City,176,Country 86275,City,176,Country 86301,City,176,Country 86300,City,176,Country 86302,City,176,Country 86305,City,176,Country 86355,City,176,Country 86417,City,176,Country 86382,City,176,Country 86383,City,176,Country 86472,City,176,Country 86474,City,176,Country 86546,City,176,Country 86556,City,176,Country 86567,City,176,Country 86858,City,176,Country 86640,City,176,Country 86706,City,176,Country 86707,City,176,Country 86728,City,176,Country 86738,City,176,Country 86791,City,176,Country 86842,City,176,Country 86879,City,176,Country 86899,City,176,Country 86900,City,176,Country 86934,City,176,Country 86954,City,176,Country 87006,City,176,Country 87042,City,176,Country 87070,City,176,Country 87072,City,176,Country 87129,City,176,Country 87093,City,176,Country 87106,City,176,Country 87146,City,176,Country 87186,City,176,Country 87236,City,176,Country 87248,City,176,Country 87249,City,176,Country 87268,City,176,Country 87274,City,176,Country 87307,City,176,Country 87353,City,176,Country 87351,City,176,Country 87374,City,176,Country 87380,City,176,Country 87398,City,176,Country 87459,City,176,Country 87472,City,176,Country 87494,City,176,Country 87498,City,176,Country 87499,City,176,Country 87502,City,176,Country 87511,City,176,Country 87525,City,176,Country 87561,City,176,Country 87569,City,176,Country 87592,City,176,Country 87599,City,176,Country 87603,City,176,Country 87610,City,176,Country 87614,City,176,Country 87624,City,176,Country 87634,City,176,Country 87693,City,176,Country 87731,City,176,Country 87773,City,176,Country 87791,City,176,Country 87848,City,176,Country 87939,City,176,Country 87965,City,176,Country 87969,City,176,Country 87996,City,176,Country 88011,City,176,Country 88332,City,176,Country 88163,City,176,Country 88184,City,176,Country 88199,City,176,Country 88267,City,176,Country 88276,City,176,Country 88305,City,176,Country 88377,City,176,Country 88641,City,176,Country 88498,City,176,Country 88611,City,176,Country 88688,City,176,Country 85798,City,176,Country 85811,City,176,Country 85817,City,176,Country 85844,City,176,Country 85848,City,176,Country 85856,City,176,Country 85868,City,176,Country 85884,City,176,Country 85909,City,176,Country 85922,City,176,Country 85950,City,176,Country 86019,City,176,Country 86024,City,176,Country 86040,City,176,Country 86048,City,176,Country 86056,City,176,Country 86101,City,176,Country 86151,City,176,Country 86158,City,176,Country 86252,City,176,Country 86168,City,176,Country 86176,City,176,Country 86181,City,176,Country 86193,City,176,Country 86195,City,176,Country 86212,City,176,Country 86230,City,176,Country 86325,City,176,Country 86326,City,176,Country 86361,City,176,Country 86390,City,176,Country 86391,City,176,Country 86395,City,176,Country 86397,City,176,Country 86477,City,176,Country 86587,City,176,Country 86601,City,176,Country 86612,City,176,Country 86613,City,176,Country 86665,City,176,Country 86742,City,176,Country 86746,City,176,Country 86716,City,176,Country 86826,City,176,Country 86906,City,176,Country 88779,City,176,Country 88800,City,176,Country 86993,City,176,Country 87000,City,176,Country 87066,City,176,Country 87037,City,176,Country 87040,City,176,Country 87055,City,176,Country 87092,City,176,Country 87095,City,176,Country 87105,City,176,Country 87124,City,176,Country 87192,City,176,Country 87194,City,176,Country 87198,City,176,Country 87293,City,176,Country 87367,City,176,Country 87866,City,176,Country 87411,City,176,Country 87432,City,176,Country 87434,City,176,Country 87777,City,176,Country 87463,City,176,Country 87486,City,176,Country 87493,City,176,Country 87505,City,176,Country 87516,City,176,Country 87517,City,176,Country 87535,City,176,Country 87547,City,176,Country 87545,City,176,Country 87749,City,176,Country 87595,City,176,Country 87638,City,176,Country 87652,City,176,Country 87697,City,176,Country 87681,City,176,Country 87761,City,176,Country 87692,City,176,Country 87715,City,176,Country 87805,City,176,Country 87810,City,176,Country 87819,City,176,Country 87855,City,176,Country 88035,City,176,Country 87891,City,176,Country 87920,City,176,Country 87938,City,176,Country 87940,City,176,Country 88010,City,176,Country 88059,City,176,Country 88339,City,176,Country 88340,City,176,Country 88174,City,176,Country 88183,City,176,Country 88189,City,176,Country 88203,City,176,Country 88249,City,176,Country 88844,City,176,Country 88858,City,176,Country 88862,City,176,Country 88293,City,176,Country 88294,City,176,Country 88400,City,176,Country 88401,City,176,Country 88420,City,176,Country 88435,City,176,Country 88463,City,176,Country 88488,City,176,Country 88479,City,176,Country 88642,City,176,Country 88496,City,176,Country 88525,City,176,Country 88596,City,176,Country 88742,City,176,Country 89692,City,177,Country 88968,City,177,Country 88969,City,177,Country 88994,City,177,Country 89037,City,177,Country 89057,City,177,Country 89062,City,177,Country 89069,City,177,Country 89070,City,177,Country 89105,City,177,Country 89131,City,177,Country 89163,City,177,Country 89172,City,177,Country 89173,City,177,Country 89181,City,177,Country 89187,City,177,Country 89199,City,177,Country 89223,City,177,Country 89228,City,177,Country 89231,City,177,Country 89232,City,177,Country 89233,City,177,Country 89267,City,177,Country 89269,City,177,Country 89333,City,177,Country 89350,City,177,Country 89412,City,177,Country 89413,City,177,Country 89427,City,177,Country 89428,City,177,Country 89434,City,177,Country 89437,City,177,Country 89451,City,177,Country 89460,City,177,Country 89466,City,177,Country 89467,City,177,Country 89469,City,177,Country 89479,City,177,Country 89494,City,177,Country 89502,City,177,Country 89501,City,177,Country 89558,City,177,Country 89577,City,177,Country 89586,City,177,Country 89588,City,177,Country 89589,City,177,Country 89592,City,177,Country 89529,City,177,Country 89633,City,177,Country 89673,City,177,Country 89650,City,177,Country 88910,City,177,Country 89695,City,177,Country 88913,City,177,Country 88967,City,177,Country 88976,City,177,Country 88980,City,177,Country 88986,City,177,Country 88989,City,177,Country 88993,City,177,Country 89001,City,177,Country 89003,City,177,Country 89025,City,177,Country 89048,City,177,Country 89106,City,177,Country 89129,City,177,Country 89137,City,177,Country 89141,City,177,Country 89147,City,177,Country 89148,City,177,Country 89149,City,177,Country 89150,City,177,Country 89153,City,177,Country 89170,City,177,Country 89185,City,177,Country 89203,City,177,Country 89204,City,177,Country 89698,City,177,Country 89234,City,177,Country 89246,City,177,Country 89254,City,177,Country 89257,City,177,Country 89263,City,177,Country 89287,City,177,Country 89298,City,177,Country 89334,City,177,Country 89338,City,177,Country 89349,City,177,Country 89355,City,177,Country 89363,City,177,Country 89366,City,177,Country 89370,City,177,Country 89374,City,177,Country 89387,City,177,Country 89379,City,177,Country 89381,City,177,Country 89473,City,177,Country 89484,City,177,Country 89492,City,177,Country 89493,City,177,Country 89507,City,177,Country 89564,City,177,Country 89565,City,177,Country 89570,City,177,Country 89587,City,177,Country 89541,City,177,Country 89542,City,177,Country 89554,City,177,Country 89619,City,177,Country 89625,City,177,Country 89688,City,177,Country 89630,City,177,Country 89645,City,177,Country 88925,City,177,Country 88944,City,177,Country 88949,City,177,Country 88950,City,177,Country 88957,City,177,Country 89020,City,177,Country 89027,City,177,Country 89036,City,177,Country 89039,City,177,Country 89056,City,177,Country 89111,City,177,Country 89136,City,177,Country 89176,City,177,Country 89340,City,177,Country 89299,City,177,Country 89335,City,177,Country 89346,City,177,Country 89352,City,177,Country 89372,City,177,Country 89397,City,177,Country 89485,City,177,Country 89572,City,177,Country 89590,City,177,Country 89533,City,177,Country 89642,City,177,Country 89658,City,177,Country 89690,City,177,Country 88909,City,177,Country 88962,City,177,Country 88974,City,177,Country 88975,City,177,Country 88979,City,177,Country 88997,City,177,Country 89004,City,177,Country 89018,City,177,Country 89019,City,177,Country 89046,City,177,Country 89049,City,177,Country 89055,City,177,Country 89064,City,177,Country 89065,City,177,Country 89066,City,177,Country 89067,City,177,Country 89081,City,177,Country 89114,City,177,Country 89120,City,177,Country 89135,City,177,Country 89151,City,177,Country 89152,City,177,Country 89160,City,177,Country 89166,City,177,Country 89179,City,177,Country 89191,City,177,Country 89196,City,177,Country 89205,City,177,Country 89207,City,177,Country 89212,City,177,Country 89216,City,177,Country 89219,City,177,Country 89220,City,177,Country 89225,City,177,Country 89227,City,177,Country 89248,City,177,Country 89264,City,177,Country 89279,City,177,Country 89280,City,177,Country 89293,City,177,Country 89330,City,177,Country 89343,City,177,Country 89362,City,177,Country 89402,City,177,Country 89415,City,177,Country 89442,City,177,Country 89435,City,177,Country 89453,City,177,Country 89458,City,177,Country 89461,City,177,Country 89464,City,177,Country 89470,City,177,Country 89477,City,177,Country 89490,City,177,Country 89524,City,177,Country 89525,City,177,Country 89536,City,177,Country 89537,City,177,Country 89598,City,177,Country 89601,City,177,Country 89618,City,177,Country 89689,City,177,Country 89644,City,177,Country 89647,City,177,Country 89651,City,177,Country 89656,City,177,Country 89665,City,177,Country 89668,City,177,Country 89679,City,177,Country 89676,City,177,Country 89686,City,177,Country 88934,City,177,Country 89030,City,177,Country 89047,City,177,Country 89094,City,177,Country 89095,City,177,Country 89194,City,177,Country 89260,City,177,Country 89305,City,177,Country 89306,City,177,Country 89307,City,177,Country 89487,City,177,Country 89526,City,177,Country 89606,City,177,Country 89648,City,177,Country 89682,City,177,Country 89683,City,177,Country 88926,City,177,Country 89029,City,177,Country 89104,City,177,Country 89133,City,177,Country 89198,City,177,Country 89224,City,177,Country 89356,City,177,Country 89396,City,177,Country 89440,City,177,Country 89535,City,177,Country 89599,City,177,Country 89670,City,177,Country 89666,City,177,Country 88929,City,177,Country 88938,City,177,Country 88972,City,177,Country 88977,City,177,Country 88984,City,177,Country 88998,City,177,Country 89050,City,177,Country 89088,City,177,Country 89091,City,177,Country 89122,City,177,Country 89126,City,177,Country 89182,City,177,Country 89222,City,177,Country 89238,City,177,Country 89249,City,177,Country 89256,City,177,Country 89303,City,177,Country 89304,City,177,Country 89325,City,177,Country 89368,City,177,Country 89369,City,177,Country 89378,City,177,Country 89393,City,177,Country 89399,City,177,Country 89410,City,177,Country 89497,City,177,Country 89516,City,177,Country 89582,City,177,Country 89552,City,177,Country 89616,City,177,Country 89596,City,177,Country 89603,City,177,Country 89611,City,177,Country 89660,City,177,Country 88912,City,177,Country 88990,City,177,Country 89043,City,177,Country 89157,City,177,Country 89697,City,177,Country 89324,City,177,Country 89328,City,177,Country 89336,City,177,Country 89423,City,177,Country 89457,City,177,Country 89459,City,177,Country 89635,City,177,Country 89639,City,177,Country 89669,City,177,Country 88914,City,177,Country 88919,City,177,Country 88923,City,177,Country 88935,City,177,Country 88942,City,177,Country 88946,City,177,Country 88954,City,177,Country 88958,City,177,Country 88988,City,177,Country 89035,City,177,Country 89041,City,177,Country 89052,City,177,Country 89100,City,177,Country 89110,City,177,Country 89125,City,177,Country 89158,City,177,Country 89159,City,177,Country 89167,City,177,Country 89174,City,177,Country 89178,City,177,Country 89200,City,177,Country 89217,City,177,Country 89229,City,177,Country 89230,City,177,Country 89237,City,177,Country 89250,City,177,Country 89259,City,177,Country 89273,City,177,Country 89281,City,177,Country 89295,City,177,Country 89311,City,177,Country 89312,City,177,Country 89321,City,177,Country 89358,City,177,Country 89357,City,177,Country 89375,City,177,Country 89380,City,177,Country 89441,City,177,Country 89421,City,177,Country 89424,City,177,Country 89446,City,177,Country 89482,City,177,Country 89495,City,177,Country 89505,City,177,Country 89559,City,177,Country 89560,City,177,Country 89574,City,177,Country 89528,City,177,Country 89544,City,177,Country 89597,City,177,Country 89614,City,177,Country 89671,City,177,Country 89653,City,177,Country 89664,City,177,Country 89674,City,177,Country 143237,City,177,Country 143297,City,177,Country 143238,City,177,Country 143239,City,177,Country 143760,City,177,Country 143240,City,177,Country 143241,City,177,Country 143242,City,177,Country 143243,City,177,Country 143244,City,177,Country 143246,City,177,Country 143245,City,177,Country 143252,City,177,Country 143253,City,177,Country 143254,City,177,Country 143255,City,177,Country 143247,City,177,Country 143248,City,177,Country 143249,City,177,Country 143250,City,177,Country 143251,City,177,Country 143256,City,177,Country 143257,City,177,Country 143258,City,177,Country 143259,City,177,Country 143260,City,177,Country 143265,City,177,Country 143261,City,177,Country 143262,City,177,Country 143263,City,177,Country 143264,City,177,Country 143266,City,177,Country 143267,City,177,Country 143268,City,177,Country 143269,City,177,Country 143270,City,177,Country 143271,City,177,Country 143272,City,177,Country 143273,City,177,Country 143274,City,177,Country 143275,City,177,Country 143276,City,177,Country 143277,City,177,Country 143278,City,177,Country 143279,City,177,Country 143280,City,177,Country 143281,City,177,Country 143282,City,177,Country 143283,City,177,Country 143284,City,177,Country 143285,City,177,Country 143286,City,177,Country 143287,City,177,Country 143288,City,177,Country 143289,City,177,Country 143291,City,177,Country 143290,City,177,Country 143292,City,177,Country 143293,City,177,Country 143294,City,177,Country 143295,City,177,Country 143296,City,177,Country 143298,City,177,Country 143299,City,177,Country 143300,City,177,Country 143301,City,177,Country 143302,City,177,Country 143303,City,177,Country 143304,City,177,Country 143305,City,177,Country 143306,City,177,Country 143307,City,177,Country 143308,City,177,Country 143309,City,177,Country 143310,City,177,Country 143311,City,177,Country 143312,City,177,Country 143313,City,177,Country 143314,City,177,Country 143315,City,177,Country 143316,City,177,Country 143317,City,177,Country 143318,City,177,Country 143319,City,177,Country 143320,City,177,Country 143321,City,177,Country 143322,City,177,Country 143323,City,177,Country 143324,City,177,Country 143325,City,177,Country 143326,City,177,Country 143327,City,177,Country 143328,City,177,Country 143329,City,177,Country 143330,City,177,Country 143331,City,177,Country 143332,City,177,Country 143333,City,177,Country 143334,City,177,Country 143335,City,177,Country 143336,City,177,Country 143337,City,177,Country 143339,City,177,Country 143340,City,177,Country 143338,City,177,Country 143341,City,177,Country 143342,City,177,Country 143343,City,177,Country 143344,City,177,Country 143345,City,177,Country 143346,City,177,Country 143347,City,177,Country 143348,City,177,Country 143349,City,177,Country 143350,City,177,Country 143351,City,177,Country 143352,City,177,Country 143353,City,177,Country 143354,City,177,Country 143355,City,177,Country 143356,City,177,Country 143357,City,177,Country 143358,City,177,Country 143359,City,177,Country 143361,City,177,Country 143360,City,177,Country 143362,City,177,Country 143363,City,177,Country 143364,City,177,Country 143365,City,177,Country 143366,City,177,Country 143367,City,177,Country 143368,City,177,Country 143369,City,177,Country 143370,City,177,Country 143371,City,177,Country 143374,City,177,Country 143372,City,177,Country 143373,City,177,Country 143375,City,177,Country 143376,City,177,Country 143377,City,177,Country 143378,City,177,Country 143379,City,177,Country 143380,City,177,Country 143381,City,177,Country 143382,City,177,Country 143383,City,177,Country 143384,City,177,Country 143385,City,177,Country 143386,City,177,Country 143387,City,177,Country 143388,City,177,Country 143389,City,177,Country 143390,City,177,Country 143391,City,177,Country 143397,City,177,Country 143392,City,177,Country 143393,City,177,Country 143395,City,177,Country 143396,City,177,Country 143394,City,177,Country 143414,City,177,Country 143398,City,177,Country 143399,City,177,Country 143400,City,177,Country 143401,City,177,Country 143402,City,177,Country 143403,City,177,Country 143404,City,177,Country 143405,City,177,Country 143406,City,177,Country 143407,City,177,Country 143408,City,177,Country 143409,City,177,Country 143410,City,177,Country 143411,City,177,Country 143412,City,177,Country 143413,City,177,Country 143415,City,177,Country 143416,City,177,Country 143417,City,177,Country 143418,City,177,Country 143419,City,177,Country 143423,City,177,Country 143420,City,177,Country 143421,City,177,Country 143422,City,177,Country 143424,City,177,Country 143425,City,177,Country 143426,City,177,Country 143427,City,177,Country 143428,City,177,Country 143429,City,177,Country 143430,City,177,Country 143431,City,177,Country 143433,City,177,Country 143432,City,177,Country 143434,City,177,Country 143435,City,177,Country 143436,City,177,Country 143437,City,177,Country 143438,City,177,Country 143439,City,177,Country 143440,City,177,Country 143441,City,177,Country 143442,City,177,Country 143443,City,177,Country 143444,City,177,Country 143445,City,177,Country 143446,City,177,Country 143447,City,177,Country 143448,City,177,Country 143449,City,177,Country 143450,City,177,Country 143451,City,177,Country 143452,City,177,Country 143474,City,177,Country 143475,City,177,Country 143453,City,177,Country 143476,City,177,Country 143454,City,177,Country 143455,City,177,Country 143456,City,177,Country 143457,City,177,Country 143458,City,177,Country 143459,City,177,Country 143460,City,177,Country 143461,City,177,Country 143462,City,177,Country 143463,City,177,Country 143464,City,177,Country 143465,City,177,Country 143466,City,177,Country 143467,City,177,Country 143503,City,177,Country 143468,City,177,Country 143469,City,177,Country 143470,City,177,Country 143471,City,177,Country 143472,City,177,Country 143473,City,177,Country 143477,City,177,Country 143504,City,177,Country 143478,City,177,Country 143479,City,177,Country 143480,City,177,Country 143481,City,177,Country 143482,City,177,Country 143483,City,177,Country 143484,City,177,Country 143485,City,177,Country 143486,City,177,Country 143487,City,177,Country 143488,City,177,Country 143489,City,177,Country 143490,City,177,Country 143491,City,177,Country 143492,City,177,Country 143493,City,177,Country 143494,City,177,Country 143495,City,177,Country 143496,City,177,Country 143497,City,177,Country 143498,City,177,Country 143499,City,177,Country 143505,City,177,Country 143500,City,177,Country 143501,City,177,Country 143502,City,177,Country 143506,City,177,Country 143507,City,177,Country 143508,City,177,Country 143509,City,177,Country 143510,City,177,Country 143511,City,177,Country 143512,City,177,Country 143513,City,177,Country 143514,City,177,Country 143515,City,177,Country 143516,City,177,Country 143517,City,177,Country 143518,City,177,Country 143519,City,177,Country 143520,City,177,Country 143521,City,177,Country 143529,City,177,Country 143530,City,177,Country 143522,City,177,Country 143523,City,177,Country 143524,City,177,Country 143525,City,177,Country 143526,City,177,Country 143527,City,177,Country 143528,City,177,Country 143531,City,177,Country 143532,City,177,Country 143533,City,177,Country 143534,City,177,Country 143536,City,177,Country 143535,City,177,Country 143558,City,177,Country 143537,City,177,Country 143538,City,177,Country 143539,City,177,Country 143559,City,177,Country 143540,City,177,Country 143541,City,177,Country 143542,City,177,Country 143543,City,177,Country 143544,City,177,Country 143560,City,177,Country 143553,City,177,Country 143545,City,177,Country 143546,City,177,Country 143547,City,177,Country 143548,City,177,Country 143550,City,177,Country 143549,City,177,Country 143551,City,177,Country 143552,City,177,Country 143561,City,177,Country 143562,City,177,Country 143563,City,177,Country 143554,City,177,Country 143555,City,177,Country 143556,City,177,Country 143557,City,177,Country 143564,City,177,Country 143565,City,177,Country 143566,City,177,Country 143567,City,177,Country 143569,City,177,Country 143568,City,177,Country 143570,City,177,Country 143571,City,177,Country 143572,City,177,Country 143573,City,177,Country 143574,City,177,Country 143575,City,177,Country 143576,City,177,Country 143577,City,177,Country 143578,City,177,Country 143579,City,177,Country 143580,City,177,Country 143581,City,177,Country 143582,City,177,Country 143583,City,177,Country 143584,City,177,Country 143585,City,177,Country 143586,City,177,Country 143587,City,177,Country 143589,City,177,Country 143590,City,177,Country 143588,City,177,Country 143591,City,177,Country 143592,City,177,Country 143593,City,177,Country 143594,City,177,Country 143595,City,177,Country 143596,City,177,Country 143597,City,177,Country 143598,City,177,Country 143599,City,177,Country 143600,City,177,Country 143601,City,177,Country 143602,City,177,Country 143603,City,177,Country 143604,City,177,Country 143605,City,177,Country 143606,City,177,Country 143607,City,177,Country 143608,City,177,Country 143609,City,177,Country 143610,City,177,Country 143611,City,177,Country 143612,City,177,Country 143613,City,177,Country 143614,City,177,Country 143615,City,177,Country 143616,City,177,Country 143617,City,177,Country 143618,City,177,Country 143619,City,177,Country 143620,City,177,Country 143621,City,177,Country 143622,City,177,Country 143623,City,177,Country 143624,City,177,Country 143625,City,177,Country 143626,City,177,Country 143627,City,177,Country 143628,City,177,Country 143629,City,177,Country 143653,City,177,Country 143654,City,177,Country 143655,City,177,Country 143656,City,177,Country 143657,City,177,Country 143658,City,177,Country 143659,City,177,Country 143662,City,177,Country 143664,City,177,Country 143665,City,177,Country 143666,City,177,Country 143667,City,177,Country 143663,City,177,Country 143660,City,177,Country 143661,City,177,Country 143668,City,177,Country 143669,City,177,Country 143670,City,177,Country 143671,City,177,Country 143672,City,177,Country 143673,City,177,Country 143674,City,177,Country 143675,City,177,Country 143676,City,177,Country 143677,City,177,Country 143678,City,177,Country 143679,City,177,Country 143680,City,177,Country 143681,City,177,Country 143682,City,177,Country 143683,City,177,Country 143684,City,177,Country 143685,City,177,Country 143686,City,177,Country 143630,City,177,Country 143631,City,177,Country 143687,City,177,Country 143632,City,177,Country 143633,City,177,Country 143634,City,177,Country 143635,City,177,Country 143636,City,177,Country 143637,City,177,Country 143638,City,177,Country 143639,City,177,Country 143640,City,177,Country 143641,City,177,Country 143643,City,177,Country 143644,City,177,Country 143645,City,177,Country 143642,City,177,Country 143646,City,177,Country 143647,City,177,Country 143648,City,177,Country 143649,City,177,Country 143650,City,177,Country 143652,City,177,Country 143651,City,177,Country 143688,City,177,Country 143689,City,177,Country 143690,City,177,Country 143691,City,177,Country 143692,City,177,Country 143693,City,177,Country 143694,City,177,Country 143695,City,177,Country 143697,City,177,Country 143696,City,177,Country 143698,City,177,Country 143699,City,177,Country 143700,City,177,Country 143701,City,177,Country 143702,City,177,Country 143703,City,177,Country 143704,City,177,Country 143705,City,177,Country 143707,City,177,Country 143708,City,177,Country 143709,City,177,Country 143710,City,177,Country 143711,City,177,Country 143712,City,177,Country 143713,City,177,Country 143706,City,177,Country 143714,City,177,Country 143715,City,177,Country 143716,City,177,Country 143759,City,177,Country 143717,City,177,Country 143718,City,177,Country 143719,City,177,Country 143721,City,177,Country 143720,City,177,Country 143722,City,177,Country 143723,City,177,Country 143724,City,177,Country 143725,City,177,Country 143726,City,177,Country 143727,City,177,Country 143728,City,177,Country 143729,City,177,Country 143730,City,177,Country 143731,City,177,Country 143732,City,177,Country 143733,City,177,Country 143734,City,177,Country 143750,City,177,Country 143735,City,177,Country 143736,City,177,Country 143737,City,177,Country 143738,City,177,Country 143739,City,177,Country 143740,City,177,Country 143741,City,177,Country 143742,City,177,Country 143743,City,177,Country 143744,City,177,Country 143745,City,177,Country 143746,City,177,Country 143747,City,177,Country 143748,City,177,Country 143749,City,177,Country 143751,City,177,Country 143755,City,177,Country 143752,City,177,Country 143753,City,177,Country 143754,City,177,Country 143756,City,177,Country 143757,City,177,Country 143758,City,177,Country 88905,City,177,Country 88920,City,177,Country 88930,City,177,Country 88943,City,177,Country 88955,City,177,Country 88959,City,177,Country 88964,City,177,Country 88970,City,177,Country 89000,City,177,Country 89023,City,177,Country 89033,City,177,Country 89042,City,177,Country 89063,City,177,Country 89090,City,177,Country 89102,City,177,Country 89113,City,177,Country 89164,City,177,Country 89180,City,177,Country 89184,City,177,Country 89188,City,177,Country 89241,City,177,Country 89253,City,177,Country 89261,City,177,Country 89277,City,177,Country 89302,City,177,Country 89322,City,177,Country 89323,City,177,Country 89341,City,177,Country 89342,City,177,Country 89699,City,177,Country 89385,City,177,Country 89391,City,177,Country 89400,City,177,Country 89411,City,177,Country 89433,City,177,Country 89483,City,177,Country 89496,City,177,Country 89576,City,177,Country 89534,City,177,Country 89555,City,177,Country 89615,City,177,Country 89622,City,177,Country 89637,City,177,Country 89641,City,177,Country 89643,City,177,Country 88904,City,177,Country 88908,City,177,Country 88915,City,177,Country 88922,City,177,Country 88928,City,177,Country 88933,City,177,Country 88937,City,177,Country 88936,City,177,Country 88939,City,177,Country 88947,City,177,Country 88956,City,177,Country 88960,City,177,Country 88973,City,177,Country 88991,City,177,Country 88996,City,177,Country 89002,City,177,Country 89009,City,177,Country 89017,City,177,Country 89024,City,177,Country 89028,City,177,Country 89034,City,177,Country 89040,City,177,Country 89051,City,177,Country 89053,City,177,Country 89059,City,177,Country 89060,City,177,Country 89061,City,177,Country 89072,City,177,Country 89075,City,177,Country 89083,City,177,Country 89092,City,177,Country 89093,City,177,Country 89096,City,177,Country 89101,City,177,Country 89103,City,177,Country 89112,City,177,Country 89117,City,177,Country 89123,City,177,Country 89144,City,177,Country 89155,City,177,Country 89165,City,177,Country 89186,City,177,Country 89244,City,177,Country 89245,City,177,Country 89251,City,177,Country 89252,City,177,Country 89268,City,177,Country 89271,City,177,Country 89283,City,177,Country 89288,City,177,Country 89292,City,177,Country 89296,City,177,Country 89310,City,177,Country 89320,City,177,Country 89332,City,177,Country 89353,City,177,Country 89354,City,177,Country 89359,City,177,Country 89361,City,177,Country 89371,City,177,Country 89386,City,177,Country 89382,City,177,Country 89403,City,177,Country 89419,City,177,Country 89430,City,177,Country 89443,City,177,Country 89444,City,177,Country 89439,City,177,Country 89447,City,177,Country 89448,City,177,Country 89452,City,177,Country 89476,City,177,Country 89481,City,177,Country 89504,City,177,Country 89514,City,177,Country 89517,City,177,Country 89520,City,177,Country 89557,City,177,Country 89561,City,177,Country 89567,City,177,Country 89568,City,177,Country 89571,City,177,Country 89580,City,177,Country 89543,City,177,Country 89546,City,177,Country 89548,City,177,Country 89549,City,177,Country 89602,City,177,Country 89608,City,177,Country 89617,City,177,Country 89634,City,177,Country 89636,City,177,Country 89638,City,177,Country 89649,City,177,Country 89667,City,177,Country 89681,City,177,Country 89693,City,177,Country 88978,City,177,Country 89038,City,177,Country 89068,City,177,Country 89071,City,177,Country 89139,City,177,Country 89074,City,177,Country 89084,City,177,Country 89086,City,177,Country 89087,City,177,Country 89138,City,177,Country 89156,City,177,Country 89161,City,177,Country 89162,City,177,Country 89197,City,177,Country 89262,City,177,Country 89351,City,177,Country 89414,City,177,Country 89432,City,177,Country 89429,City,177,Country 89431,City,177,Country 89465,City,177,Country 89499,City,177,Country 89509,City,177,Country 89563,City,177,Country 89575,City,177,Country 89585,City,177,Country 89591,City,177,Country 88953,City,177,Country 88995,City,177,Country 88999,City,177,Country 89008,City,177,Country 89078,City,177,Country 89107,City,177,Country 89134,City,177,Country 89142,City,177,Country 89195,City,177,Country 89208,City,177,Country 89282,City,177,Country 89314,City,177,Country 89319,City,177,Country 89347,City,177,Country 89418,City,177,Country 89422,City,177,Country 89513,City,177,Country 89553,City,177,Country 89624,City,177,Country 89691,City,177,Country 89694,City,177,Country 88911,City,177,Country 88931,City,177,Country 88951,City,177,Country 88961,City,177,Country 88966,City,177,Country 88971,City,177,Country 88982,City,177,Country 88985,City,177,Country 89696,City,177,Country 89005,City,177,Country 89006,City,177,Country 89007,City,177,Country 89011,City,177,Country 89013,City,177,Country 89014,City,177,Country 89015,City,177,Country 89016,City,177,Country 89022,City,177,Country 89026,City,177,Country 89045,City,177,Country 89077,City,177,Country 89082,City,177,Country 89085,City,177,Country 89099,City,177,Country 89108,City,177,Country 89145,City,177,Country 89154,City,177,Country 89202,City,177,Country 89171,City,177,Country 89175,City,177,Country 89183,City,177,Country 89189,City,177,Country 89190,City,177,Country 89192,City,177,Country 89193,City,177,Country 89206,City,177,Country 89209,City,177,Country 89213,City,177,Country 89214,City,177,Country 89218,City,177,Country 89221,City,177,Country 89226,City,177,Country 89239,City,177,Country 89242,City,177,Country 89243,City,177,Country 89247,City,177,Country 89255,City,177,Country 89258,City,177,Country 89266,City,177,Country 89270,City,177,Country 89274,City,177,Country 89275,City,177,Country 89276,City,177,Country 89284,City,177,Country 89289,City,177,Country 89291,City,177,Country 89297,City,177,Country 89301,City,177,Country 89329,City,177,Country 89344,City,177,Country 89348,City,177,Country 89360,City,177,Country 89367,City,177,Country 89388,City,177,Country 89383,City,177,Country 89389,City,177,Country 89390,City,177,Country 89394,City,177,Country 89401,City,177,Country 89404,City,177,Country 89425,City,177,Country 89445,City,177,Country 89455,City,177,Country 89454,City,177,Country 89456,City,177,Country 89472,City,177,Country 89474,City,177,Country 89491,City,177,Country 89503,City,177,Country 89518,City,177,Country 89519,City,177,Country 89562,City,177,Country 89573,City,177,Country 89579,City,177,Country 89581,City,177,Country 89584,City,177,Country 89527,City,177,Country 89530,City,177,Country 89532,City,177,Country 89538,City,177,Country 89547,City,177,Country 89600,City,177,Country 89613,City,177,Country 89620,City,177,Country 89621,City,177,Country 89623,City,177,Country 89631,City,177,Country 89672,City,177,Country 89652,City,177,Country 89655,City,177,Country 89657,City,177,Country 89675,City,177,Country 89677,City,177,Country 89678,City,177,Country 89685,City,177,Country 88906,City,177,Country 88916,City,177,Country 88917,City,177,Country 88918,City,177,Country 88932,City,177,Country 88948,City,177,Country 88952,City,177,Country 88963,City,177,Country 89012,City,177,Country 89031,City,177,Country 89032,City,177,Country 89098,City,177,Country 89116,City,177,Country 89127,City,177,Country 89130,City,177,Country 89143,City,177,Country 89201,City,177,Country 89169,City,177,Country 89177,City,177,Country 89211,City,177,Country 89285,City,177,Country 89265,City,177,Country 89278,City,177,Country 89300,City,177,Country 89315,City,177,Country 89317,City,177,Country 89318,City,177,Country 89373,City,177,Country 89376,City,177,Country 89392,City,177,Country 89408,City,177,Country 89409,City,177,Country 89420,City,177,Country 89438,City,177,Country 89463,City,177,Country 89471,City,177,Country 89486,City,177,Country 89488,City,177,Country 89506,City,177,Country 89510,City,177,Country 89578,City,177,Country 89593,City,177,Country 89521,City,177,Country 89604,City,177,Country 89607,City,177,Country 89610,City,177,Country 89626,City,177,Country 89627,City,177,Country 89646,City,177,Country 89654,City,177,Country 88924,City,177,Country 88921,City,177,Country 88927,City,177,Country 88940,City,177,Country 88945,City,177,Country 88965,City,177,Country 88992,City,177,Country 89010,City,177,Country 89021,City,177,Country 89058,City,177,Country 89089,City,177,Country 89115,City,177,Country 89118,City,177,Country 89124,City,177,Country 89128,City,177,Country 89132,City,177,Country 89215,City,177,Country 89236,City,177,Country 89240,City,177,Country 89309,City,177,Country 89326,City,177,Country 89377,City,177,Country 89406,City,177,Country 89407,City,177,Country 89426,City,177,Country 89436,City,177,Country 89450,City,177,Country 89449,City,177,Country 89478,City,177,Country 89489,City,177,Country 89511,City,177,Country 89512,City,177,Country 89515,City,177,Country 89522,City,177,Country 89523,City,177,Country 89539,City,177,Country 89540,City,177,Country 89545,City,177,Country 89550,City,177,Country 89609,City,177,Country 88981,City,177,Country 89073,City,177,Country 89290,City,177,Country 89327,City,177,Country 89384,City,177,Country 89416,City,177,Country 89417,City,177,Country 89629,City,177,Country 89640,City,177,Country 88941,City,177,Country 89044,City,177,Country 89119,City,177,Country 89168,City,177,Country 89210,City,177,Country 89294,City,177,Country 89313,City,177,Country 89316,City,177,Country 89339,City,177,Country 89405,City,177,Country 89468,City,177,Country 89480,City,177,Country 89500,City,177,Country 89508,City,177,Country 89551,City,177,Country 89632,City,177,Country 89661,City,177,Country 89663,City,177,Country 89680,City,177,Country 88907,City,177,Country 88987,City,177,Country 89054,City,177,Country 89076,City,177,Country 89079,City,177,Country 89080,City,177,Country 89097,City,177,Country 89109,City,177,Country 89121,City,177,Country 89146,City,177,Country 89235,City,177,Country 89272,City,177,Country 89308,City,177,Country 89331,City,177,Country 89345,City,177,Country 89365,City,177,Country 89395,City,177,Country 89398,City,177,Country 89462,City,177,Country 89475,City,177,Country 89498,City,177,Country 89566,City,177,Country 89569,City,177,Country 89583,City,177,Country 89556,City,177,Country 89531,City,177,Country 89594,City,177,Country 89595,City,177,Country 89605,City,177,Country 89612,City,177,Country 89659,City,177,Country 89684,City,177,Country 89687,City,177,Country 89874,City,181,Country 89875,City,181,Country 89907,City,181,Country 89908,City,181,Country 89910,City,181,Country 89911,City,181,Country 89937,City,181,Country 89992,City,181,Country 90006,City,181,Country 90032,City,181,Country 90504,City,181,Country 90545,City,181,Country 90109,City,181,Country 90132,City,181,Country 90143,City,181,Country 90156,City,181,Country 90161,City,181,Country 90159,City,181,Country 90344,City,181,Country 90350,City,181,Country 93791,City,181,Country 93796,City,181,Country 90614,City,181,Country 90625,City,181,Country 90626,City,181,Country 90642,City,181,Country 90649,City,181,Country 90746,City,181,Country 90750,City,181,Country 90759,City,181,Country 90837,City,181,Country 90857,City,181,Country 90892,City,181,Country 90905,City,181,Country 90968,City,181,Country 90995,City,181,Country 91005,City,181,Country 91125,City,181,Country 91129,City,181,Country 91540,City,181,Country 91281,City,181,Country 91289,City,181,Country 91299,City,181,Country 91305,City,181,Country 91367,City,181,Country 91377,City,181,Country 91516,City,181,Country 91495,City,181,Country 91533,City,181,Country 91601,City,181,Country 91668,City,181,Country 91825,City,181,Country 91829,City,181,Country 91965,City,181,Country 91971,City,181,Country 92014,City,181,Country 92015,City,181,Country 92066,City,181,Country 93494,City,181,Country 92121,City,181,Country 92176,City,181,Country 92183,City,181,Country 92205,City,181,Country 92216,City,181,Country 92262,City,181,Country 92278,City,181,Country 92303,City,181,Country 92317,City,181,Country 92453,City,181,Country 92480,City,181,Country 92487,City,181,Country 92572,City,181,Country 92634,City,181,Country 92651,City,181,Country 92666,City,181,Country 92842,City,181,Country 92822,City,181,Country 92821,City,181,Country 92799,City,181,Country 92798,City,181,Country 93096,City,181,Country 93076,City,181,Country 93049,City,181,Country 93067,City,181,Country 93112,City,181,Country 92905,City,181,Country 93512,City,181,Country 92972,City,181,Country 93540,City,181,Country 93545,City,181,Country 93003,City,181,Country 93558,City,181,Country 93274,City,181,Country 93293,City,181,Country 93308,City,181,Country 93354,City,181,Country 93368,City,181,Country 93751,City,181,Country 93717,City,181,Country 93765,City,181,Country 93780,City,181,Country 93889,City,181,Country 93947,City,181,Country 94008,City,181,Country 94268,City,181,Country 94151,City,181,Country 94157,City,181,Country 94276,City,181,Country 94483,City,181,Country 94489,City,181,Country 94556,City,181,Country 94557,City,181,Country 94647,City,181,Country 94648,City,181,Country 94671,City,181,Country 94710,City,181,Country 94733,City,181,Country 94758,City,181,Country 94823,City,181,Country 94832,City,181,Country 94868,City,181,Country 94886,City,181,Country 94962,City,181,Country 94967,City,181,Country 94985,City,181,Country 95025,City,181,Country 95056,City,181,Country 95106,City,181,Country 95107,City,181,Country 95114,City,181,Country 95179,City,181,Country 95358,City,181,Country 95382,City,181,Country 95395,City,181,Country 95402,City,181,Country 95417,City,181,Country 95626,City,181,Country 95456,City,181,Country 95503,City,181,Country 95501,City,181,Country 95556,City,181,Country 95602,City,181,Country 95624,City,181,Country 95750,City,181,Country 95766,City,181,Country 95767,City,181,Country 95883,City,181,Country 95896,City,181,Country 95906,City,181,Country 95936,City,181,Country 96195,City,181,Country 96214,City,181,Country 96094,City,181,Country 96129,City,181,Country 96136,City,181,Country 106013,City,181,Country 106020,City,181,Country 106019,City,181,Country 96523,City,181,Country 96525,City,181,Country 105979,City,181,Country 97114,City,181,Country 106039,City,181,Country 96296,City,181,Country 96302,City,181,Country 96303,City,181,Country 97042,City,181,Country 96403,City,181,Country 97070,City,181,Country 97076,City,181,Country 96453,City,181,Country 97090,City,181,Country 106072,City,181,Country 97137,City,181,Country 106111,City,181,Country 96641,City,181,Country 96668,City,181,Country 96698,City,181,Country 96729,City,181,Country 96794,City,181,Country 96797,City,181,Country 96808,City,181,Country 96831,City,181,Country 96837,City,181,Country 96915,City,181,Country 96998,City,181,Country 89880,City,181,Country 89902,City,181,Country 89935,City,181,Country 89955,City,181,Country 89970,City,181,Country 89977,City,181,Country 89980,City,181,Country 90454,City,181,Country 90460,City,181,Country 90069,City,181,Country 90090,City,181,Country 90139,City,181,Country 90176,City,181,Country 90279,City,181,Country 90426,City,181,Country 90568,City,181,Country 93866,City,181,Country 90627,City,181,Country 90657,City,181,Country 90658,City,181,Country 90664,City,181,Country 90683,City,181,Country 90687,City,181,Country 90704,City,181,Country 90855,City,181,Country 90877,City,181,Country 90884,City,181,Country 91191,City,181,Country 91197,City,181,Country 90939,City,181,Country 90954,City,181,Country 90992,City,181,Country 91015,City,181,Country 91087,City,181,Country 91174,City,181,Country 91586,City,181,Country 91290,City,181,Country 91326,City,181,Country 91412,City,181,Country 91467,City,181,Country 91485,City,181,Country 91621,City,181,Country 91625,City,181,Country 91666,City,181,Country 91810,City,181,Country 91758,City,181,Country 91787,City,181,Country 91861,City,181,Country 91943,City,181,Country 91957,City,181,Country 92039,City,181,Country 92038,City,181,Country 92046,City,181,Country 92067,City,181,Country 92092,City,181,Country 92173,City,181,Country 92227,City,181,Country 92310,City,181,Country 92329,City,181,Country 92493,City,181,Country 92728,City,181,Country 92546,City,181,Country 92566,City,181,Country 92584,City,181,Country 92593,City,181,Country 93496,City,181,Country 93118,City,181,Country 92916,City,181,Country 93503,City,181,Country 92920,City,181,Country 92921,City,181,Country 93508,City,181,Country 93513,City,181,Country 93519,City,181,Country 93520,City,181,Country 92941,City,181,Country 93529,City,181,Country 93533,City,181,Country 92968,City,181,Country 93535,City,181,Country 93230,City,181,Country 93128,City,181,Country 93288,City,181,Country 93465,City,181,Country 93441,City,181,Country 93365,City,181,Country 93383,City,181,Country 93484,City,181,Country 93485,City,181,Country 93488,City,181,Country 93474,City,181,Country 93477,City,181,Country 93592,City,181,Country 93682,City,181,Country 93705,City,181,Country 93776,City,181,Country 93782,City,181,Country 93932,City,181,Country 93936,City,181,Country 93996,City,181,Country 94003,City,181,Country 94029,City,181,Country 94238,City,181,Country 94156,City,181,Country 94214,City,181,Country 94281,City,181,Country 94333,City,181,Country 94444,City,181,Country 94468,City,181,Country 94470,City,181,Country 94600,City,181,Country 94599,City,181,Country 94610,City,181,Country 94561,City,181,Country 94650,City,181,Country 94667,City,181,Country 94686,City,181,Country 94804,City,181,Country 94814,City,181,Country 94903,City,181,Country 95230,City,181,Country 94908,City,181,Country 95264,City,181,Country 95215,City,181,Country 95226,City,181,Country 95035,City,181,Country 95068,City,181,Country 95109,City,181,Country 95296,City,181,Country 95297,City,181,Country 95367,City,181,Country 95332,City,181,Country 95424,City,181,Country 95492,City,181,Country 95502,City,181,Country 95534,City,181,Country 95538,City,181,Country 95553,City,181,Country 95575,City,181,Country 95597,City,181,Country 95585,City,181,Country 95994,City,181,Country 96032,City,181,Country 95722,City,181,Country 95725,City,181,Country 95726,City,181,Country 95753,City,181,Country 95793,City,181,Country 95811,City,181,Country 96051,City,181,Country 97028,City,181,Country 96521,City,181,Country 96532,City,181,Country 96544,City,181,Country 105976,City,181,Country 96254,City,181,Country 106048,City,181,Country 96304,City,181,Country 96317,City,181,Country 97034,City,181,Country 96324,City,181,Country 96325,City,181,Country 97116,City,181,Country 97121,City,181,Country 97043,City,181,Country 97048,City,181,Country 97049,City,181,Country 96356,City,181,Country 97058,City,181,Country 97062,City,181,Country 96396,City,181,Country 97064,City,181,Country 96595,City,181,Country 106063,City,181,Country 97140,City,181,Country 96564,City,181,Country 96691,City,181,Country 96932,City,181,Country 96973,City,181,Country 96940,City,181,Country 96832,City,181,Country 96857,City,181,Country 97009,City,181,Country 97010,City,181,Country 97014,City,181,Country 96989,City,181,Country 96993,City,181,Country 89914,City,181,Country 89919,City,181,Country 89921,City,181,Country 89923,City,181,Country 89924,City,181,Country 89964,City,181,Country 89985,City,181,Country 89988,City,181,Country 90467,City,181,Country 90483,City,181,Country 90487,City,181,Country 90501,City,181,Country 90512,City,181,Country 90548,City,181,Country 90449,City,181,Country 90451,City,181,Country 90073,City,181,Country 90086,City,181,Country 90102,City,181,Country 90185,City,181,Country 90242,City,181,Country 90257,City,181,Country 90262,City,181,Country 90326,City,181,Country 90367,City,181,Country 90368,City,181,Country 90378,City,181,Country 90392,City,181,Country 90394,City,181,Country 90434,City,181,Country 93832,City,181,Country 93838,City,181,Country 93800,City,181,Country 93864,City,181,Country 90571,City,181,Country 93876,City,181,Country 90617,City,181,Country 90650,City,181,Country 90699,City,181,Country 90718,City,181,Country 90721,City,181,Country 90748,City,181,Country 90784,City,181,Country 90796,City,181,Country 90844,City,181,Country 90845,City,181,Country 90846,City,181,Country 90872,City,181,Country 90888,City,181,Country 91199,City,181,Country 91206,City,181,Country 91217,City,181,Country 91188,City,181,Country 90942,City,181,Country 90951,City,181,Country 90963,City,181,Country 91020,City,181,Country 91059,City,181,Country 91071,City,181,Country 91073,City,181,Country 91115,City,181,Country 91144,City,181,Country 91152,City,181,Country 91153,City,181,Country 91180,City,181,Country 91570,City,181,Country 91572,City,181,Country 91592,City,181,Country 91283,City,181,Country 91306,City,181,Country 91335,City,181,Country 91348,City,181,Country 91352,City,181,Country 91391,City,181,Country 91424,City,181,Country 91425,City,181,Country 91475,City,181,Country 91465,City,181,Country 91518,City,181,Country 91726,City,181,Country 91743,City,181,Country 91606,City,181,Country 91637,City,181,Country 91659,City,181,Country 91686,City,181,Country 91676,City,181,Country 91888,City,181,Country 92032,City,181,Country 92033,City,181,Country 92109,City,181,Country 92152,City,181,Country 92154,City,181,Country 92203,City,181,Country 92399,City,181,Country 92416,City,181,Country 92261,City,181,Country 92264,City,181,Country 92281,City,181,Country 92294,City,181,Country 92302,City,181,Country 92335,City,181,Country 92349,City,181,Country 92345,City,181,Country 92365,City,181,Country 92430,City,181,Country 92456,City,181,Country 92468,City,181,Country 92582,City,181,Country 92628,City,181,Country 92637,City,181,Country 92638,City,181,Country 92652,City,181,Country 92673,City,181,Country 92819,City,181,Country 92851,City,181,Country 92755,City,181,Country 92776,City,181,Country 92806,City,181,Country 93100,City,181,Country 93104,City,181,Country 92890,City,181,Country 92954,City,181,Country 93012,City,181,Country 93550,City,181,Country 92992,City,181,Country 92999,City,181,Country 93559,City,181,Country 93041,City,181,Country 93133,City,181,Country 93151,City,181,Country 93580,City,181,Country 93252,City,181,Country 93267,City,181,Country 93303,City,181,Country 93306,City,181,Country 93315,City,181,Country 93338,City,181,Country 93391,City,181,Country 93418,City,181,Country 93598,City,181,Country 93613,City,181,Country 93614,City,181,Country 93644,City,181,Country 93691,City,181,Country 93661,City,181,Country 93673,City,181,Country 93675,City,181,Country 93757,City,181,Country 93774,City,181,Country 94105,City,181,Country 94133,City,181,Country 93898,City,181,Country 93955,City,181,Country 93968,City,181,Country 93989,City,181,Country 94036,City,181,Country 94039,City,181,Country 94021,City,181,Country 94254,City,181,Country 94508,City,181,Country 94286,City,181,Country 94368,City,181,Country 94378,City,181,Country 94384,City,181,Country 94589,City,181,Country 94590,City,181,Country 94575,City,181,Country 94715,City,181,Country 94720,City,181,Country 94750,City,181,Country 94754,City,181,Country 94902,City,181,Country 94771,City,181,Country 94779,City,181,Country 94781,City,181,Country 94818,City,181,Country 94864,City,181,Country 95254,City,181,Country 95284,City,181,Country 94926,City,181,Country 95224,City,181,Country 95295,City,181,Country 94959,City,181,Country 94965,City,181,Country 94988,City,181,Country 95011,City,181,Country 95024,City,181,Country 95075,City,181,Country 95091,City,181,Country 95087,City,181,Country 95132,City,181,Country 95129,City,181,Country 95169,City,181,Country 95211,City,181,Country 95313,City,181,Country 95362,City,181,Country 95383,City,181,Country 95384,City,181,Country 95412,City,181,Country 95638,City,181,Country 95642,City,181,Country 95652,City,181,Country 95646,City,181,Country 96025,City,181,Country 95749,City,181,Country 95788,City,181,Country 95803,City,181,Country 95875,City,181,Country 95886,City,181,Country 95908,City,181,Country 95948,City,181,Country 95985,City,181,Country 96164,City,181,Country 96046,City,181,Country 96197,City,181,Country 96210,City,181,Country 96071,City,181,Country 96089,City,181,Country 96098,City,181,Country 96144,City,181,Country 106023,City,181,Country 96274,City,181,Country 97118,City,181,Country 97117,City,181,Country 96382,City,181,Country 96369,City,181,Country 96468,City,181,Country 97082,City,181,Country 97084,City,181,Country 96433,City,181,Country 96443,City,181,Country 96460,City,181,Country 96455,City,181,Country 97091,City,181,Country 96509,City,181,Country 96511,City,181,Country 106071,City,181,Country 106096,City,181,Country 106108,City,181,Country 106133,City,181,Country 106136,City,181,Country 96571,City,181,Country 96635,City,181,Country 96655,City,181,Country 96713,City,181,Country 96722,City,181,Country 96726,City,181,Country 96738,City,181,Country 96739,City,181,Country 96745,City,181,Country 96964,City,181,Country 96782,City,181,Country 96867,City,181,Country 96882,City,181,Country 96899,City,181,Country 96912,City,181,Country 89904,City,181,Country 89968,City,181,Country 89982,City,181,Country 89993,City,181,Country 90002,City,181,Country 90025,City,181,Country 90477,City,181,Country 90040,City,181,Country 90059,City,181,Country 90457,City,181,Country 90108,City,181,Country 90104,City,181,Country 90106,City,181,Country 90119,City,181,Country 90133,City,181,Country 90164,City,181,Country 90193,City,181,Country 90218,City,181,Country 90216,City,181,Country 90341,City,181,Country 90342,City,181,Country 90317,City,181,Country 90355,City,181,Country 90369,City,181,Country 90373,City,181,Country 90396,City,181,Country 90397,City,181,Country 93829,City,181,Country 93828,City,181,Country 90573,City,181,Country 93815,City,181,Country 90595,City,181,Country 90624,City,181,Country 90637,City,181,Country 90734,City,181,Country 90745,City,181,Country 90765,City,181,Country 90797,City,181,Country 93587,City,181,Country 90834,City,181,Country 90886,City,181,Country 90900,City,181,Country 90924,City,181,Country 91194,City,181,Country 90965,City,181,Country 90967,City,181,Country 90977,City,181,Country 91006,City,181,Country 91028,City,181,Country 91108,City,181,Country 91132,City,181,Country 91154,City,181,Country 91569,City,181,Country 91379,City,181,Country 91400,City,181,Country 91422,City,181,Country 91482,City,181,Country 91734,City,181,Country 91608,City,181,Country 91651,City,181,Country 91753,City,181,Country 91762,City,181,Country 91763,City,181,Country 91979,City,181,Country 91974,City,181,Country 91855,City,181,Country 91869,City,181,Country 91886,City,181,Country 91955,City,181,Country 91994,City,181,Country 91996,City,181,Country 92016,City,181,Country 92029,City,181,Country 92097,City,181,Country 92110,City,181,Country 92158,City,181,Country 92167,City,181,Country 92175,City,181,Country 92195,City,181,Country 92387,City,181,Country 92388,City,181,Country 92369,City,181,Country 92408,City,181,Country 92336,City,181,Country 92433,City,181,Country 92442,City,181,Country 92482,City,181,Country 92490,City,181,Country 92500,City,181,Country 92507,City,181,Country 92530,City,181,Country 92719,City,181,Country 92536,City,181,Country 92705,City,181,Country 92539,City,181,Country 92706,City,181,Country 92596,City,181,Country 92616,City,181,Country 92617,City,181,Country 92689,City,181,Country 92840,City,181,Country 92835,City,181,Country 92733,City,181,Country 92805,City,181,Country 93102,City,181,Country 93106,City,181,Country 92878,City,181,Country 93114,City,181,Country 92894,City,181,Country 92913,City,181,Country 92974,City,181,Country 93020,City,181,Country 93546,City,181,Country 93006,City,181,Country 93122,City,181,Country 93224,City,181,Country 93247,City,181,Country 93187,City,181,Country 93272,City,181,Country 93282,City,181,Country 93322,City,181,Country 93417,City,181,Country 93473,City,181,Country 93611,City,181,Country 93695,City,181,Country 93678,City,181,Country 93760,City,181,Country 94119,City,181,Country 94120,City,181,Country 94131,City,181,Country 93905,City,181,Country 93916,City,181,Country 93979,City,181,Country 94014,City,181,Country 94047,City,181,Country 94079,City,181,Country 94252,City,181,Country 94150,City,181,Country 94158,City,181,Country 94174,City,181,Country 94175,City,181,Country 94208,City,181,Country 94213,City,181,Country 94230,City,181,Country 94500,City,181,Country 94274,City,181,Country 94492,City,181,Country 94493,City,181,Country 94517,City,181,Country 94300,City,181,Country 94323,City,181,Country 94322,City,181,Country 94345,City,181,Country 94366,City,181,Country 94465,City,181,Country 94596,City,181,Country 94527,City,181,Country 94529,City,181,Country 94551,City,181,Country 94559,City,181,Country 94583,City,181,Country 94694,City,181,Country 94716,City,181,Country 94894,City,181,Country 94761,City,181,Country 94784,City,181,Country 94788,City,181,Country 94796,City,181,Country 94803,City,181,Country 94820,City,181,Country 94821,City,181,Country 94841,City,181,Country 94848,City,181,Country 95238,City,181,Country 95241,City,181,Country 95218,City,181,Country 95269,City,181,Country 95271,City,181,Country 95058,City,181,Country 95077,City,181,Country 95110,City,181,Country 95157,City,181,Country 95162,City,181,Country 95319,City,181,Country 95338,City,181,Country 95408,City,181,Country 95420,City,181,Country 95436,City,181,Country 95439,City,181,Country 95476,City,181,Country 95496,City,181,Country 95513,City,181,Country 95591,City,181,Country 95609,City,181,Country 95667,City,181,Country 95655,City,181,Country 95671,City,181,Country 95697,City,181,Country 96016,City,181,Country 95710,City,181,Country 95999,City,181,Country 95714,City,181,Country 96000,City,181,Country 95816,City,181,Country 95824,City,181,Country 95851,City,181,Country 95852,City,181,Country 95866,City,181,Country 95971,City,181,Country 95961,City,181,Country 95987,City,181,Country 96190,City,181,Country 96191,City,181,Country 96186,City,181,Country 96040,City,181,Country 96133,City,181,Country 106025,City,181,Country 106030,City,181,Country 96249,City,181,Country 96250,City,181,Country 96257,City,181,Country 106043,City,181,Country 96272,City,181,Country 96281,City,181,Country 96287,City,181,Country 96316,City,181,Country 96383,City,181,Country 96372,City,181,Country 96407,City,181,Country 96410,City,181,Country 96481,City,181,Country 97077,City,181,Country 97131,City,181,Country 96448,City,181,Country 96458,City,181,Country 106055,City,181,Country 96587,City,181,Country 96589,City,181,Country 96622,City,181,Country 106149,City,181,Country 96563,City,181,Country 96570,City,181,Country 96661,City,181,Country 96676,City,181,Country 96920,City,181,Country 96710,City,181,Country 96766,City,181,Country 96754,City,181,Country 96768,City,181,Country 96790,City,181,Country 96793,City,181,Country 96824,City,181,Country 96908,City,181,Country 96987,City,181,Country 89873,City,181,Country 89876,City,181,Country 89922,City,181,Country 89930,City,181,Country 89939,City,181,Country 90015,City,181,Country 90005,City,181,Country 90007,City,181,Country 90039,City,181,Country 90513,City,181,Country 90071,City,181,Country 90083,City,181,Country 90123,City,181,Country 90131,City,181,Country 90145,City,181,Country 90196,City,181,Country 90203,City,181,Country 90231,City,181,Country 90237,City,181,Country 90274,City,181,Country 90316,City,181,Country 90387,City,181,Country 90388,City,181,Country 90404,City,181,Country 90414,City,181,Country 90423,City,181,Country 93823,City,181,Country 90560,City,181,Country 93830,City,181,Country 93794,City,181,Country 93795,City,181,Country 93862,City,181,Country 93869,City,181,Country 90606,City,181,Country 90611,City,181,Country 90646,City,181,Country 90656,City,181,Country 90660,City,181,Country 90661,City,181,Country 90688,City,181,Country 90751,City,181,Country 90760,City,181,Country 90778,City,181,Country 90818,City,181,Country 90819,City,181,Country 90911,City,181,Country 90903,City,181,Country 90904,City,181,Country 90923,City,181,Country 90940,City,181,Country 90986,City,181,Country 91033,City,181,Country 91052,City,181,Country 91056,City,181,Country 91082,City,181,Country 91106,City,181,Country 91149,City,181,Country 91150,City,181,Country 91159,City,181,Country 91168,City,181,Country 91566,City,181,Country 91542,City,181,Country 91565,City,181,Country 91589,City,181,Country 91275,City,181,Country 91278,City,181,Country 91303,City,181,Country 91309,City,181,Country 91329,City,181,Country 91370,City,181,Country 91387,City,181,Country 91417,City,181,Country 91507,City,181,Country 91532,City,181,Country 91531,City,181,Country 91615,City,181,Country 91628,City,181,Country 91635,City,181,Country 91700,City,181,Country 91687,City,181,Country 91766,City,181,Country 91839,City,181,Country 91870,City,181,Country 92000,City,181,Country 92010,City,181,Country 92030,City,181,Country 92080,City,181,Country 92226,City,181,Country 92142,City,181,Country 92193,City,181,Country 92198,City,181,Country 92384,City,181,Country 92386,City,181,Country 92452,City,181,Country 92495,City,181,Country 92525,City,181,Country 92531,City,181,Country 92578,City,181,Country 92610,City,181,Country 92647,City,181,Country 92653,City,181,Country 92834,City,181,Country 92763,City,181,Country 92771,City,181,Country 92795,City,181,Country 92803,City,181,Country 93085,City,181,Country 93091,City,181,Country 93092,City,181,Country 93046,City,181,Country 93054,City,181,Country 93056,City,181,Country 93061,City,181,Country 93066,City,181,Country 93072,City,181,Country 93521,City,181,Country 93527,City,181,Country 93537,City,181,Country 92983,City,181,Country 93561,City,181,Country 93033,City,181,Country 93234,City,181,Country 93239,City,181,Country 93125,City,181,Country 93250,City,181,Country 93569,City,181,Country 93153,City,181,Country 93156,City,181,Country 93161,City,181,Country 93203,City,181,Country 93255,City,181,Country 93290,City,181,Country 93438,City,181,Country 93360,City,181,Country 93602,City,181,Country 93625,City,181,Country 93736,City,181,Country 93755,City,181,Country 93779,City,181,Country 93778,City,181,Country 93787,City,181,Country 93922,City,181,Country 93938,City,181,Country 93953,City,181,Country 94059,City,181,Country 94037,City,181,Country 94178,City,181,Country 94195,City,181,Country 94199,City,181,Country 94280,City,181,Country 94294,City,181,Country 94319,City,181,Country 94332,City,181,Country 94346,City,181,Country 94427,City,181,Country 94471,City,181,Country 94535,City,181,Country 94550,City,181,Country 94569,City,181,Country 94584,City,181,Country 94622,City,181,Country 94668,City,181,Country 94901,City,181,Country 94767,City,181,Country 94815,City,181,Country 94845,City,181,Country 94854,City,181,Country 94878,City,181,Country 95234,City,181,Country 95237,City,181,Country 94928,City,181,Country 94963,City,181,Country 94974,City,181,Country 95036,City,181,Country 95112,City,181,Country 95153,City,181,Country 95163,City,181,Country 95177,City,181,Country 95354,City,181,Country 95360,City,181,Country 95426,City,181,Country 95445,City,181,Country 95635,City,181,Country 95552,City,181,Country 95598,City,181,Country 95631,City,181,Country 95614,City,181,Country 95615,City,181,Country 95691,City,181,Country 96005,City,181,Country 95701,City,181,Country 95764,City,181,Country 95745,City,181,Country 95784,City,181,Country 95840,City,181,Country 95902,City,181,Country 95911,City,181,Country 96181,City,181,Country 96082,City,181,Country 96093,City,181,Country 96127,City,181,Country 96138,City,181,Country 105999,City,181,Country 105997,City,181,Country 106005,City,181,Country 106006,City,181,Country 96236,City,181,Country 96519,City,181,Country 96531,City,181,Country 96541,City,181,Country 105977,City,181,Country 105980,City,181,Country 105984,City,181,Country 97123,City,181,Country 97050,City,181,Country 105987,City,181,Country 97056,City,181,Country 97066,City,181,Country 96416,City,181,Country 97134,City,181,Country 97093,City,181,Country 96502,City,181,Country 106054,City,181,Country 96605,City,181,Country 96608,City,181,Country 96610,City,181,Country 106059,City,181,Country 96631,City,181,Country 96626,City,181,Country 96627,City,181,Country 106099,City,181,Country 106103,City,181,Country 106112,City,181,Country 106172,City,181,Country 96640,City,181,Country 96695,City,181,Country 96767,City,181,Country 96936,City,181,Country 96977,City,181,Country 96779,City,181,Country 96823,City,181,Country 96833,City,181,Country 96886,City,181,Country 89899,City,181,Country 89961,City,181,Country 90080,City,181,Country 90129,City,181,Country 90147,City,181,Country 90148,City,181,Country 90268,City,181,Country 90284,City,181,Country 90376,City,181,Country 90377,City,181,Country 90383,City,181,Country 93827,City,181,Country 90671,City,181,Country 90686,City,181,Country 90695,City,181,Country 90696,City,181,Country 90735,City,181,Country 90777,City,181,Country 90998,City,181,Country 91077,City,181,Country 91143,City,181,Country 91146,City,181,Country 91568,City,181,Country 91317,City,181,Country 91328,City,181,Country 91331,City,181,Country 91332,City,181,Country 91472,City,181,Country 91722,City,181,Country 91724,City,181,Country 91755,City,181,Country 91827,City,181,Country 92075,City,181,Country 92076,City,181,Country 92131,City,181,Country 92143,City,181,Country 92160,City,181,Country 92177,City,181,Country 92204,City,181,Country 92391,City,181,Country 92395,City,181,Country 92412,City,181,Country 92247,City,181,Country 92265,City,181,Country 92287,City,181,Country 92330,City,181,Country 92436,City,181,Country 92448,City,181,Country 92458,City,181,Country 92540,City,181,Country 92568,City,181,Country 92624,City,181,Country 92686,City,181,Country 92854,City,181,Country 92750,City,181,Country 92752,City,181,Country 92777,City,181,Country 92784,City,181,Country 92813,City,181,Country 92868,City,181,Country 93059,City,181,Country 93499,City,181,Country 93514,City,181,Country 93516,City,181,Country 93517,City,181,Country 93518,City,181,Country 92929,City,181,Country 93526,City,181,Country 92981,City,181,Country 93227,City,181,Country 93131,City,181,Country 93135,City,181,Country 93152,City,181,Country 93283,City,181,Country 93284,City,181,Country 93469,City,181,Country 93629,City,181,Country 93688,City,181,Country 93721,City,181,Country 93957,City,181,Country 94097,City,181,Country 94100,City,181,Country 94153,City,181,Country 94216,City,181,Country 94273,City,181,Country 94661,City,181,Country 94662,City,181,Country 94749,City,181,Country 94768,City,181,Country 94790,City,181,Country 94825,City,181,Country 94865,City,181,Country 94867,City,181,Country 95242,City,181,Country 95249,City,181,Country 95277,City,181,Country 94936,City,181,Country 94966,City,181,Country 94999,City,181,Country 95000,City,181,Country 95069,City,181,Country 95113,City,181,Country 95376,City,181,Country 95322,City,181,Country 95328,City,181,Country 95345,City,181,Country 95346,City,181,Country 95365,City,181,Country 95401,City,181,Country 95460,City,181,Country 95554,City,181,Country 95595,City,181,Country 95715,City,181,Country 95754,City,181,Country 95874,City,181,Country 95967,City,181,Country 96204,City,181,Country 96064,City,181,Country 96066,City,181,Country 96088,City,181,Country 96099,City,181,Country 96108,City,181,Country 96155,City,181,Country 96237,City,181,Country 96529,City,181,Country 96536,City,181,Country 97113,City,181,Country 97044,City,181,Country 97045,City,181,Country 97046,City,181,Country 97047,City,181,Country 96338,City,181,Country 97055,City,181,Country 96415,City,181,Country 96513,City,181,Country 96592,City,181,Country 106066,City,181,Country 106076,City,181,Country 106075,City,181,Country 106097,City,181,Country 96560,City,181,Country 96667,City,181,Country 96678,City,181,Country 96682,City,181,Country 96712,City,181,Country 96817,City,181,Country 96825,City,181,Country 96980,City,181,Country 89889,City,181,Country 89909,City,181,Country 89916,City,181,Country 90009,City,181,Country 90035,City,181,Country 90517,City,181,Country 90057,City,181,Country 90160,City,181,Country 90173,City,181,Country 90248,City,181,Country 90328,City,181,Country 90296,City,181,Country 90307,City,181,Country 90343,City,181,Country 90359,City,181,Country 93849,City,181,Country 93806,City,181,Country 93881,City,181,Country 90826,City,181,Country 90839,City,181,Country 90906,City,181,Country 91220,City,181,Country 91004,City,181,Country 91119,City,181,Country 91102,City,181,Country 91576,City,181,Country 91547,City,181,Country 91411,City,181,Country 91421,City,181,Country 93582,City,181,Country 91433,City,181,Country 91441,City,181,Country 91479,City,181,Country 91483,City,181,Country 91497,City,181,Country 91500,City,181,Country 91529,City,181,Country 91727,City,181,Country 91616,City,181,Country 91627,City,181,Country 91646,City,181,Country 91696,City,181,Country 91725,City,181,Country 91788,City,181,Country 91838,City,181,Country 91901,City,181,Country 92041,City,181,Country 91993,City,181,Country 92001,City,181,Country 92003,City,181,Country 92026,City,181,Country 92058,City,181,Country 92151,City,181,Country 92187,City,181,Country 92199,City,181,Country 92239,City,181,Country 92272,City,181,Country 92283,City,181,Country 92286,City,181,Country 92291,City,181,Country 92306,City,181,Country 92447,City,181,Country 92717,City,181,Country 92649,City,181,Country 92688,City,181,Country 92838,City,181,Country 92831,City,181,Country 92853,City,181,Country 92772,City,181,Country 92781,City,181,Country 92786,City,181,Country 92871,City,181,Country 93507,City,181,Country 93022,City,181,Country 93556,City,181,Country 93030,City,181,Country 93032,City,181,Country 93162,City,181,Country 93197,City,181,Country 93200,City,181,Country 93271,City,181,Country 93278,City,181,Country 93450,City,181,Country 93439,City,181,Country 93362,City,181,Country 93385,City,181,Country 93393,City,181,Country 93405,City,181,Country 93406,City,181,Country 93589,City,181,Country 93608,City,181,Country 93624,City,181,Country 93626,City,181,Country 93636,City,181,Country 93663,City,181,Country 93699,City,181,Country 93696,City,181,Country 93718,City,181,Country 93724,City,181,Country 93775,City,181,Country 94108,City,181,Country 93894,City,181,Country 93923,City,181,Country 93937,City,181,Country 93972,City,181,Country 94002,City,181,Country 94006,City,181,Country 94010,City,181,Country 94049,City,181,Country 94030,City,181,Country 94093,City,181,Country 94094,City,181,Country 94102,City,181,Country 94191,City,181,Country 94211,City,181,Country 94293,City,181,Country 94383,City,181,Country 94603,City,181,Country 94524,City,181,Country 94536,City,181,Country 94538,City,181,Country 94571,City,181,Country 94614,City,181,Country 94632,City,181,Country 94638,City,181,Country 94680,City,181,Country 94745,City,181,Country 94778,City,181,Country 94836,City,181,Country 94859,City,181,Country 95214,City,181,Country 94923,City,181,Country 94993,City,181,Country 94997,City,181,Country 95004,City,181,Country 95010,City,181,Country 95030,City,181,Country 95037,City,181,Country 95115,City,181,Country 95137,City,181,Country 95333,City,181,Country 95344,City,181,Country 95438,City,181,Country 95473,City,181,Country 95507,City,181,Country 95518,City,181,Country 95600,City,181,Country 95630,City,181,Country 95668,City,181,Country 95664,City,181,Country 96006,City,181,Country 96014,City,181,Country 95863,City,181,Country 95904,City,181,Country 95970,City,181,Country 96188,City,181,Country 96202,City,181,Country 96194,City,181,Country 96212,City,181,Country 96078,City,181,Country 96095,City,181,Country 96104,City,181,Country 96113,City,181,Country 96139,City,181,Country 96240,City,181,Country 96242,City,181,Country 105985,City,181,Country 106046,City,181,Country 97038,City,181,Country 96472,City,181,Country 96483,City,181,Country 97133,City,181,Country 97086,City,181,Country 97088,City,181,Country 96444,City,181,Country 96464,City,181,Country 96456,City,181,Country 96496,City,181,Country 96500,City,181,Country 97135,City,181,Country 106113,City,181,Country 106114,City,181,Country 106162,City,181,Country 106166,City,181,Country 106168,City,181,Country 96662,City,181,Country 96663,City,181,Country 96671,City,181,Country 96950,City,181,Country 96938,City,181,Country 96804,City,181,Country 96821,City,181,Country 96863,City,181,Country 96864,City,181,Country 96872,City,181,Country 96891,City,181,Country 96892,City,181,Country 96893,City,181,Country 96999,City,181,Country 90042,City,181,Country 90547,City,181,Country 90115,City,181,Country 90224,City,181,Country 90334,City,181,Country 90594,City,181,Country 90681,City,181,Country 90709,City,181,Country 90733,City,181,Country 91243,City,181,Country 90973,City,181,Country 91047,City,181,Country 91269,City,181,Country 91324,City,181,Country 91342,City,181,Country 91359,City,181,Country 91706,City,181,Country 91781,City,181,Country 91828,City,181,Country 91836,City,181,Country 91941,City,181,Country 91924,City,181,Country 92126,City,181,Country 92405,City,181,Country 92422,City,181,Country 92295,City,181,Country 92339,City,181,Country 92737,City,181,Country 92823,City,181,Country 92782,City,181,Country 92804,City,181,Country 92866,City,181,Country 92893,City,181,Country 92932,City,181,Country 93015,City,181,Country 93038,City,181,Country 93037,City,181,Country 93565,City,181,Country 93148,City,181,Country 93189,City,181,Country 93199,City,181,Country 93202,City,181,Country 93264,City,181,Country 93277,City,181,Country 93454,City,181,Country 93352,City,181,Country 93374,City,181,Country 93373,City,181,Country 93491,City,181,Country 93621,City,181,Country 93785,City,181,Country 93908,City,181,Country 94069,City,181,Country 94269,City,181,Country 94205,City,181,Country 94275,City,181,Country 94289,City,181,Country 94440,City,181,Country 94419,City,181,Country 94620,City,181,Country 97024,City,181,Country 94740,City,181,Country 94751,City,181,Country 94756,City,181,Country 94759,City,181,Country 95265,City,181,Country 95293,City,181,Country 94977,City,181,Country 95013,City,181,Country 95081,City,181,Country 95118,City,181,Country 95522,City,181,Country 95533,City,181,Country 95627,City,181,Country 95739,City,181,Country 95822,City,181,Country 96041,City,181,Country 96168,City,181,Country 96106,City,181,Country 96132,City,181,Country 96234,City,181,Country 96279,City,181,Country 96283,City,181,Country 96340,City,181,Country 96417,City,181,Country 96476,City,181,Country 96507,City,181,Country 96506,City,181,Country 97097,City,181,Country 96615,City,181,Country 106093,City,181,Country 106145,City,181,Country 106164,City,181,Country 106171,City,181,Country 96650,City,181,Country 96669,City,181,Country 96680,City,181,Country 96954,City,181,Country 96719,City,181,Country 96806,City,181,Country 96846,City,181,Country 96844,City,181,Country 97021,City,181,Country 89877,City,181,Country 89971,City,181,Country 90004,City,181,Country 90079,City,181,Country 90179,City,181,Country 90266,City,181,Country 90281,City,181,Country 90386,City,181,Country 90409,City,181,Country 90596,City,181,Country 90703,City,181,Country 90785,City,181,Country 90799,City,181,Country 90805,City,181,Country 90806,City,181,Country 90878,City,181,Country 90902,City,181,Country 90947,City,181,Country 91017,City,181,Country 91076,City,181,Country 91148,City,181,Country 91165,City,181,Country 91270,City,181,Country 91338,City,181,Country 91405,City,181,Country 91498,City,181,Country 91503,City,181,Country 91693,City,181,Country 91718,City,181,Country 91754,City,181,Country 91798,City,181,Country 92037,City,181,Country 92043,City,181,Country 92035,City,181,Country 92007,City,181,Country 92008,City,181,Country 92013,City,181,Country 92119,City,181,Country 92171,City,181,Country 92376,City,181,Country 92366,City,181,Country 92322,City,181,Country 92511,City,181,Country 92708,City,181,Country 92630,City,181,Country 92671,City,181,Country 92739,City,181,Country 92753,City,181,Country 93047,City,181,Country 93063,City,181,Country 93511,City,181,Country 93524,City,181,Country 93525,City,181,Country 93534,City,181,Country 93240,City,181,Country 93138,City,181,Country 93149,City,181,Country 93251,City,181,Country 93269,City,181,Country 93333,City,181,Country 93380,City,181,Country 93395,City,181,Country 93412,City,181,Country 93723,City,181,Country 93730,City,181,Country 93732,City,181,Country 93758,City,181,Country 94052,City,181,Country 94088,City,181,Country 94256,City,181,Country 94152,City,181,Country 94183,City,181,Country 94224,City,181,Country 94321,City,181,Country 94598,City,181,Country 94605,City,181,Country 94593,City,181,Country 94547,City,181,Country 94548,City,181,Country 94553,City,181,Country 94728,City,181,Country 94809,City,181,Country 95250,City,181,Country 95212,City,181,Country 95047,City,181,Country 95057,City,181,Country 95102,City,181,Country 95117,City,181,Country 95142,City,181,Country 95185,City,181,Country 95524,City,181,Country 95573,City,181,Country 95581,City,181,Country 95580,City,181,Country 95617,City,181,Country 95625,City,181,Country 95662,City,181,Country 96002,City,181,Country 95740,City,181,Country 95879,City,181,Country 95942,City,181,Country 95944,City,181,Country 95984,City,181,Country 96048,City,181,Country 96178,City,181,Country 96069,City,181,Country 96156,City,181,Country 105992,City,181,Country 96520,City,181,Country 96543,City,181,Country 97040,City,181,Country 97125,City,181,Country 97126,City,181,Country 97054,City,181,Country 97063,City,181,Country 96401,City,181,Country 96612,City,181,Country 106081,City,181,Country 106094,City,181,Country 106119,City,181,Country 96549,City,181,Country 96632,City,181,Country 96633,City,181,Country 96656,City,181,Country 96772,City,181,Country 96803,City,181,Country 96839,City,181,Country 96854,City,181,Country 96876,City,181,Country 96900,City,181,Country 97016,City,181,Country 96997,City,181,Country 90347,City,181,Country 96307,City,181,Country 96308,City,181,Country 96309,City,181,Country 96310,City,181,Country 96311,City,181,Country 96312,City,181,Country 89948,City,181,Country 89949,City,181,Country 90469,City,181,Country 90019,City,181,Country 90522,City,181,Country 90047,City,181,Country 90462,City,181,Country 90463,City,181,Country 90464,City,181,Country 90465,City,181,Country 90075,City,181,Country 90097,City,181,Country 90142,City,181,Country 90165,City,181,Country 90169,City,181,Country 90211,City,181,Country 90253,City,181,Country 90321,City,181,Country 90330,City,181,Country 90285,City,181,Country 90374,City,181,Country 90421,City,181,Country 90435,City,181,Country 90558,City,181,Country 93834,City,181,Country 90566,City,181,Country 93856,City,181,Country 93865,City,181,Country 90597,City,181,Country 93877,City,181,Country 90638,City,181,Country 90668,City,181,Country 90674,City,181,Country 90701,City,181,Country 90736,City,181,Country 90776,City,181,Country 90802,City,181,Country 90863,City,181,Country 91223,City,181,Country 90929,City,181,Country 90944,City,181,Country 90959,City,181,Country 90994,City,181,Country 91008,City,181,Country 91039,City,181,Country 91067,City,181,Country 91111,City,181,Country 91117,City,181,Country 91089,City,181,Country 91142,City,181,Country 91251,City,181,Country 91255,City,181,Country 91582,City,181,Country 91593,City,181,Country 91296,City,181,Country 91315,City,181,Country 91320,City,181,Country 91336,City,181,Country 91361,City,181,Country 91386,City,181,Country 91402,City,181,Country 91455,City,181,Country 91468,City,181,Country 91773,City,181,Country 91981,City,181,Country 91849,City,181,Country 91845,City,181,Country 91882,City,181,Country 91881,City,181,Country 91912,City,181,Country 91952,City,181,Country 92138,City,181,Country 92184,City,181,Country 92189,City,181,Country 92389,City,181,Country 92367,City,181,Country 92417,City,181,Country 92409,City,181,Country 92255,City,181,Country 92285,City,181,Country 92338,City,181,Country 92361,City,181,Country 92461,City,181,Country 92484,City,181,Country 92528,City,181,Country 92720,City,181,Country 92538,City,181,Country 92707,City,181,Country 92580,City,181,Country 92614,City,181,Country 92667,City,181,Country 92695,City,181,Country 92738,City,181,Country 92824,City,181,Country 92774,City,181,Country 92818,City,181,Country 93089,City,181,Country 93090,City,181,Country 93105,City,181,Country 93108,City,181,Country 92896,City,181,Country 92900,City,181,Country 92944,City,181,Country 92962,City,181,Country 93013,City,181,Country 93576,City,181,Country 93159,City,181,Country 93176,City,181,Country 93261,City,181,Country 93273,City,181,Country 93294,City,181,Country 93428,City,181,Country 93320,City,181,Country 93324,City,181,Country 93346,City,181,Country 93367,City,181,Country 93369,City,181,Country 93489,City,181,Country 93476,City,181,Country 93620,City,181,Country 93659,City,181,Country 93700,City,181,Country 93684,City,181,Country 94106,City,181,Country 94136,City,181,Country 93909,City,181,Country 94189,City,181,Country 94228,City,181,Country 94234,City,181,Country 94503,City,181,Country 94515,City,181,Country 94313,City,181,Country 94305,City,181,Country 94361,City,181,Country 94360,City,181,Country 94442,City,181,Country 94404,City,181,Country 94405,City,181,Country 94432,City,181,Country 94461,City,181,Country 94714,City,181,Country 94719,City,181,Country 94762,City,181,Country 94799,City,181,Country 94801,City,181,Country 94833,City,181,Country 94838,City,181,Country 94858,City,181,Country 94866,City,181,Country 94870,City,181,Country 95240,City,181,Country 95216,City,181,Country 95285,City,181,Country 95274,City,181,Country 95283,City,181,Country 95288,City,181,Country 94939,City,181,Country 94950,City,181,Country 94994,City,181,Country 95080,City,181,Country 95119,City,181,Country 95174,City,181,Country 95207,City,181,Country 95369,City,181,Country 95325,City,181,Country 95411,City,181,Country 95551,City,181,Country 95576,City,181,Country 95570,City,181,Country 95656,City,181,Country 95694,City,181,Country 96012,City,181,Country 96018,City,181,Country 95712,City,181,Country 96001,City,181,Country 96026,City,181,Country 95785,City,181,Country 95787,City,181,Country 95810,City,181,Country 95846,City,181,Country 95855,City,181,Country 95856,City,181,Country 95937,City,181,Country 95934,City,181,Country 95980,City,181,Country 96045,City,181,Country 96167,City,181,Country 96170,City,181,Country 96097,City,181,Country 96143,City,181,Country 96163,City,181,Country 106003,City,181,Country 106004,City,181,Country 106009,City,181,Country 106027,City,181,Country 106034,City,181,Country 96282,City,181,Country 96289,City,181,Country 96291,City,181,Country 96386,City,181,Country 96469,City,181,Country 96475,City,181,Country 96494,City,181,Country 96599,City,181,Country 97108,City,181,Country 106131,City,181,Country 96645,City,181,Country 96664,City,181,Country 96699,City,181,Country 96702,City,181,Country 96921,City,181,Country 96923,City,181,Country 96747,City,181,Country 96750,City,181,Country 96751,City,181,Country 96791,City,181,Country 96836,City,181,Country 96834,City,181,Country 96838,City,181,Country 97015,City,181,Country 97017,City,181,Country 96991,City,181,Country 97002,City,181,Country 89927,City,181,Country 89975,City,181,Country 90085,City,181,Country 90221,City,181,Country 90382,City,181,Country 93848,City,181,Country 93874,City,181,Country 90598,City,181,Country 90679,City,181,Country 90682,City,181,Country 90714,City,181,Country 90779,City,181,Country 90849,City,181,Country 90950,City,181,Country 91046,City,181,Country 91591,City,181,Country 91322,City,181,Country 91325,City,181,Country 91345,City,181,Country 91502,City,181,Country 91527,City,181,Country 91535,City,181,Country 91622,City,181,Country 91660,City,181,Country 91665,City,181,Country 91670,City,181,Country 91677,City,181,Country 91792,City,181,Country 91786,City,181,Country 91799,City,181,Country 91980,City,181,Country 91939,City,181,Country 91959,City,181,Country 92068,City,181,Country 92078,City,181,Country 92117,City,181,Country 92144,City,181,Country 92194,City,181,Country 92217,City,181,Country 92368,City,181,Country 92308,City,181,Country 92315,City,181,Country 92425,City,181,Country 92441,City,181,Country 92556,City,181,Country 92606,City,181,Country 92744,City,181,Country 92791,City,181,Country 93109,City,181,Country 92971,City,181,Country 93539,City,181,Country 92980,City,181,Country 93547,City,181,Country 93548,City,181,Country 93233,City,181,Country 93260,City,181,Country 93265,City,181,Country 93275,City,181,Country 93429,City,181,Country 93298,City,181,Country 93335,City,181,Country 93381,City,181,Country 93593,City,181,Country 93731,City,181,Country 93772,City,181,Country 93784,City,181,Country 94103,City,181,Country 93933,City,181,Country 93995,City,181,Country 94001,City,181,Country 94011,City,181,Country 94023,City,181,Country 94025,City,181,Country 94217,City,181,Country 94210,City,181,Country 94225,City,181,Country 94231,City,181,Country 94504,City,181,Country 94477,City,181,Country 94437,City,181,Country 94472,City,181,Country 94645,City,181,Country 94654,City,181,Country 94666,City,181,Country 94725,City,181,Country 94769,City,181,Country 94770,City,181,Country 94847,City,181,Country 94887,City,181,Country 95217,City,181,Country 94979,City,181,Country 95032,City,181,Country 95046,City,181,Country 95134,City,181,Country 95161,City,181,Country 95301,City,181,Country 95307,City,181,Country 95336,City,181,Country 95433,City,181,Country 95474,City,181,Country 95520,City,181,Country 95537,City,181,Country 95737,City,181,Country 95834,City,181,Country 95927,City,181,Country 95960,City,181,Country 96055,City,181,Country 96056,City,181,Country 96060,City,181,Country 96217,City,181,Country 96118,City,181,Country 106028,City,181,Country 106033,City,181,Country 106035,City,181,Country 96400,City,181,Country 97068,City,181,Country 96413,City,181,Country 96422,City,181,Country 97132,City,181,Country 97078,City,181,Country 96501,City,181,Country 96606,City,181,Country 96647,City,181,Country 96651,City,181,Country 96666,City,181,Country 96922,City,181,Country 96708,City,181,Country 96749,City,181,Country 96975,City,181,Country 96775,City,181,Country 96855,City,181,Country 89962,City,181,Country 89995,City,181,Country 90491,City,181,Country 90535,City,181,Country 90555,City,181,Country 90113,City,181,Country 90117,City,181,Country 90118,City,181,Country 90178,City,181,Country 90217,City,181,Country 90229,City,181,Country 90254,City,181,Country 90292,City,181,Country 90295,City,181,Country 90348,City,181,Country 90362,City,181,Country 90358,City,181,Country 93792,City,181,Country 90575,City,181,Country 90578,City,181,Country 93867,City,181,Country 90697,City,181,Country 90741,City,181,Country 90744,City,181,Country 90769,City,181,Country 90894,City,181,Country 91233,City,181,Country 91248,City,181,Country 90971,City,181,Country 90975,City,181,Country 90976,City,181,Country 91043,City,181,Country 91068,City,181,Country 91092,City,181,Country 91094,City,181,Country 91127,City,181,Country 91137,City,181,Country 91260,City,181,Country 91587,City,181,Country 91333,City,181,Country 91363,City,181,Country 91366,City,181,Country 91413,City,181,Country 91418,City,181,Country 91435,City,181,Country 91436,City,181,Country 91602,City,181,Country 91649,City,181,Country 91652,City,181,Country 91657,City,181,Country 91747,City,181,Country 91751,City,181,Country 91812,City,181,Country 91778,City,181,Country 91976,City,181,Country 91879,City,181,Country 91905,City,181,Country 91936,City,181,Country 92049,City,181,Country 92223,City,181,Country 92224,City,181,Country 92209,City,181,Country 92214,City,181,Country 92241,City,181,Country 92421,City,181,Country 92251,City,181,Country 92252,City,181,Country 92423,City,181,Country 92471,City,181,Country 92477,City,181,Country 92711,City,181,Country 92559,City,181,Country 92644,City,181,Country 92674,City,181,Country 92841,City,181,Country 92746,City,181,Country 92815,City,181,Country 92857,City,181,Country 92877,City,181,Country 92926,City,181,Country 92948,City,181,Country 92969,City,181,Country 93541,City,181,Country 93229,City,181,Country 93141,City,181,Country 93150,City,181,Country 93175,City,181,Country 93216,City,181,Country 93461,City,181,Country 93464,City,181,Country 93345,City,181,Country 93409,City,181,Country 93492,City,181,Country 93480,City,181,Country 93594,City,181,Country 93603,City,181,Country 93630,City,181,Country 93631,City,181,Country 93642,City,181,Country 93649,City,181,Country 93890,City,181,Country 93975,City,181,Country 93980,City,181,Country 93988,City,181,Country 94139,City,181,Country 94146,City,181,Country 94245,City,181,Country 94182,City,181,Country 94198,City,181,Country 94495,City,181,Country 94311,City,181,Country 94357,City,181,Country 94389,City,181,Country 94436,City,181,Country 94411,City,181,Country 94613,City,181,Country 94897,City,181,Country 94898,City,181,Country 94812,City,181,Country 94875,City,181,Country 94883,City,181,Country 94927,City,181,Country 95281,City,181,Country 95292,City,181,Country 94945,City,181,Country 94946,City,181,Country 95061,City,181,Country 95124,City,181,Country 95171,City,181,Country 95198,City,181,Country 95298,City,181,Country 95387,City,181,Country 95449,City,181,Country 95483,City,181,Country 95464,City,181,Country 95560,City,181,Country 95563,City,181,Country 95446,City,181,Country 95690,City,181,Country 95695,City,181,Country 96013,City,181,Country 95757,City,181,Country 95832,City,181,Country 95897,City,181,Country 95951,City,181,Country 96192,City,181,Country 96058,City,181,Country 96091,City,181,Country 96158,City,181,Country 96159,City,181,Country 96222,City,181,Country 96248,City,181,Country 96334,City,181,Country 96363,City,181,Country 96397,City,181,Country 97071,City,181,Country 96424,City,181,Country 96596,City,181,Country 106084,City,181,Country 106095,City,181,Country 106130,City,181,Country 96567,City,181,Country 96711,City,181,Country 96967,City,181,Country 96972,City,181,Country 96937,City,181,Country 96786,City,181,Country 96789,City,181,Country 96896,City,181,Country 97022,City,181,Country 97005,City,181,Country 89894,City,181,Country 89895,City,181,Country 89906,City,181,Country 89941,City,181,Country 89969,City,181,Country 90014,City,181,Country 90022,City,181,Country 90496,City,181,Country 90091,City,181,Country 90174,City,181,Country 90192,City,181,Country 90219,City,181,Country 90239,City,181,Country 90430,City,181,Country 93825,City,181,Country 93826,City,181,Country 93851,City,181,Country 93852,City,181,Country 93854,City,181,Country 93797,City,181,Country 93861,City,181,Country 93885,City,181,Country 93822,City,181,Country 93879,City,181,Country 90602,City,181,Country 90669,City,181,Country 90685,City,181,Country 90740,City,181,Country 90758,City,181,Country 90771,City,181,Country 90790,City,181,Country 90830,City,181,Country 90836,City,181,Country 90860,City,181,Country 90876,City,181,Country 90910,City,181,Country 90914,City,181,Country 91208,City,181,Country 90955,City,181,Country 91013,City,181,Country 91044,City,181,Country 91057,City,181,Country 91178,City,181,Country 91567,City,181,Country 91578,City,181,Country 91579,City,181,Country 91580,City,181,Country 91564,City,181,Country 91598,City,181,Country 91558,City,181,Country 91594,City,181,Country 91273,City,181,Country 91316,City,181,Country 91327,City,181,Country 91362,City,181,Country 91376,City,181,Country 91395,City,181,Country 91438,City,181,Country 91537,City,181,Country 91731,City,181,Country 91756,City,181,Country 91769,City,181,Country 91770,City,181,Country 91780,City,181,Country 91967,City,181,Country 91835,City,181,Country 91868,City,181,Country 92055,City,181,Country 92059,City,181,Country 92112,City,181,Country 92120,City,181,Country 92132,City,181,Country 92197,City,181,Country 92375,City,181,Country 92371,City,181,Country 92410,City,181,Country 92411,City,181,Country 92263,City,181,Country 92273,City,181,Country 92293,City,181,Country 92314,City,181,Country 92325,City,181,Country 92431,City,181,Country 92710,City,181,Country 92535,City,181,Country 92564,City,181,Country 92602,City,181,Country 92640,City,181,Country 92829,City,181,Country 92756,City,181,Country 93074,City,181,Country 93050,City,181,Country 93103,City,181,Country 93060,City,181,Country 93062,City,181,Country 93119,City,181,Country 92925,City,181,Country 93023,City,181,Country 93567,City,181,Country 93194,City,181,Country 93213,City,181,Country 93270,City,181,Country 93289,City,181,Country 93307,City,181,Country 93358,City,181,Country 93416,City,181,Country 93605,City,181,Country 93634,City,181,Country 93788,City,181,Country 94115,City,181,Country 93910,City,181,Country 93931,City,181,Country 94154,City,181,Country 94181,City,181,Country 94185,City,181,Country 94202,City,181,Country 94485,City,181,Country 94285,City,181,Country 94304,City,181,Country 94308,City,181,Country 94344,City,181,Country 94572,City,181,Country 94624,City,181,Country 94634,City,181,Country 94718,City,181,Country 94731,City,181,Country 94851,City,181,Country 94852,City,181,Country 94874,City,181,Country 95246,City,181,Country 95247,City,181,Country 95219,City,181,Country 95275,City,181,Country 95276,City,181,Country 94948,City,181,Country 94964,City,181,Country 94980,City,181,Country 95009,City,181,Country 95045,City,181,Country 95063,City,181,Country 95130,City,181,Country 95126,City,181,Country 95135,City,181,Country 95146,City,181,Country 95189,City,181,Country 95314,City,181,Country 95347,City,181,Country 95394,City,181,Country 95530,City,181,Country 96010,City,181,Country 96011,City,181,Country 95709,City,181,Country 95748,City,181,Country 95828,City,181,Country 95891,City,181,Country 96179,City,181,Country 96205,City,181,Country 96072,City,181,Country 96150,City,181,Country 105998,City,181,Country 96526,City,181,Country 106026,City,181,Country 96537,City,181,Country 96538,City,181,Country 96539,City,181,Country 96542,City,181,Country 106049,City,181,Country 96333,City,181,Country 96411,City,181,Country 96485,City,181,Country 96487,City,181,Country 97099,City,181,Country 106158,City,181,Country 106159,City,181,Country 96558,City,181,Country 96561,City,181,Country 96657,City,181,Country 96672,City,181,Country 96694,City,181,Country 96704,City,181,Country 96727,City,181,Country 96820,City,181,Country 96907,City,181,Country 89872,City,181,Country 89879,City,181,Country 89896,City,181,Country 89917,City,181,Country 89931,City,181,Country 89950,City,181,Country 90532,City,181,Country 90546,City,181,Country 90584,City,181,Country 90623,City,181,Country 90630,City,181,Country 90678,City,181,Country 90705,City,181,Country 90711,City,181,Country 90712,City,181,Country 90775,City,181,Country 90787,City,181,Country 90804,City,181,Country 90817,City,181,Country 90821,City,181,Country 90831,City,181,Country 90842,City,181,Country 90852,City,181,Country 90864,City,181,Country 91242,City,181,Country 91264,City,181,Country 91288,City,181,Country 91321,City,181,Country 91339,City,181,Country 91344,City,181,Country 91384,City,181,Country 91393,City,181,Country 91403,City,181,Country 91429,City,181,Country 91459,City,181,Country 91508,City,181,Country 91524,City,181,Country 91534,City,181,Country 91609,City,181,Country 93583,City,181,Country 91716,City,181,Country 91806,City,181,Country 91975,City,181,Country 91860,City,181,Country 91935,City,181,Country 92017,City,181,Country 92079,City,181,Country 92081,City,181,Country 92094,City,181,Country 92165,City,181,Country 92166,City,181,Country 92196,City,181,Country 92258,City,181,Country 92274,City,181,Country 92277,City,181,Country 92296,City,181,Country 92440,City,181,Country 92498,City,181,Country 92518,City,181,Country 92534,City,181,Country 92544,City,181,Country 92570,City,181,Country 92607,City,181,Country 92748,City,181,Country 93082,City,181,Country 92867,City,181,Country 92873,City,181,Country 92919,City,181,Country 92931,City,181,Country 93225,City,181,Country 93173,City,181,Country 93181,City,181,Country 93183,City,181,Country 93220,City,181,Country 93330,City,181,Country 93423,City,181,Country 93595,City,181,Country 93618,City,181,Country 93667,City,181,Country 93741,City,181,Country 93768,City,181,Country 93769,City,181,Country 93783,City,181,Country 93913,City,181,Country 93962,City,181,Country 94004,City,181,Country 94074,City,181,Country 94083,City,181,Country 94101,City,181,Country 94137,City,181,Country 94138,City,181,Country 94248,City,181,Country 94239,City,181,Country 94494,City,181,Country 94329,City,181,Country 94433,City,181,Country 94594,City,181,Country 94560,City,181,Country 94664,City,181,Country 94673,City,181,Country 94692,City,181,Country 94798,City,181,Country 94802,City,181,Country 94849,City,181,Country 94920,City,181,Country 94922,City,181,Country 94942,City,181,Country 94952,City,181,Country 94978,City,181,Country 94984,City,181,Country 95012,City,181,Country 95094,City,181,Country 95127,City,181,Country 95152,City,181,Country 95154,City,181,Country 95204,City,181,Country 95377,City,181,Country 95324,City,181,Country 95337,City,181,Country 95348,City,181,Country 95364,City,181,Country 95434,City,181,Country 95488,City,181,Country 95490,City,181,Country 95514,City,181,Country 95532,City,181,Country 95544,City,181,Country 95555,City,181,Country 95550,City,181,Country 95562,City,181,Country 95601,City,181,Country 95676,City,181,Country 95686,City,181,Country 95700,City,181,Country 95707,City,181,Country 95708,City,181,Country 95723,City,181,Country 95759,City,181,Country 95769,City,181,Country 95780,City,181,Country 95818,City,181,Country 95836,City,181,Country 96061,City,181,Country 105993,City,181,Country 96235,City,181,Country 96243,City,181,Country 96260,City,181,Country 96271,City,181,Country 96322,City,181,Country 96341,City,181,Country 96348,City,181,Country 96590,City,181,Country 106061,City,181,Country 106068,City,181,Country 106127,City,181,Country 106139,City,181,Country 106141,City,181,Country 96573,City,181,Country 96721,City,181,Country 96769,City,181,Country 96815,City,181,Country 96828,City,181,Country 96913,City,181,Country 89905,City,181,Country 89976,City,181,Country 89981,City,181,Country 90058,City,181,Country 90060,City,181,Country 90556,City,181,Country 90087,City,181,Country 90088,City,181,Country 90155,City,181,Country 90183,City,181,Country 90233,City,181,Country 90327,City,181,Country 90276,City,181,Country 90304,City,181,Country 93857,City,181,Country 90587,City,181,Country 90629,City,181,Country 90663,City,181,Country 90809,City,181,Country 90835,City,181,Country 90885,City,181,Country 90936,City,181,Country 91249,City,181,Country 90952,City,181,Country 91001,City,181,Country 91019,City,181,Country 91053,City,181,Country 91116,City,181,Country 91084,City,181,Country 91100,City,181,Country 91266,City,181,Country 93581,City,181,Country 91312,City,181,Country 91406,City,181,Country 91603,City,181,Country 91647,City,181,Country 91750,City,181,Country 91841,City,181,Country 91851,City,181,Country 92036,City,181,Country 92071,City,181,Country 92149,City,181,Country 92233,City,181,Country 92256,City,181,Country 92266,City,181,Country 92311,City,181,Country 92491,City,181,Country 92523,City,181,Country 92621,City,181,Country 92757,City,181,Country 93070,City,181,Country 92946,City,181,Country 93214,City,181,Country 93426,City,181,Country 93301,City,181,Country 93311,City,181,Country 93442,City,181,Country 93483,City,181,Country 93468,City,181,Country 93680,City,181,Country 93891,City,181,Country 93973,City,181,Country 93945,City,181,Country 94145,City,181,Country 94170,City,181,Country 94190,City,181,Country 94299,City,181,Country 94316,City,181,Country 94597,City,181,Country 94530,City,181,Country 94657,City,181,Country 97026,City,181,Country 94776,City,181,Country 94879,City,181,Country 94913,City,181,Country 94951,City,181,Country 94968,City,181,Country 95038,City,181,Country 95180,City,181,Country 95193,City,181,Country 95421,City,181,Country 95458,City,181,Country 95499,City,181,Country 95628,City,181,Country 95687,City,181,Country 96019,City,181,Country 95859,City,181,Country 96073,City,181,Country 105982,City,181,Country 96330,City,181,Country 96360,City,181,Country 96588,City,181,Country 96562,City,181,Country 96918,City,181,Country 96717,City,181,Country 96735,City,181,Country 96941,City,181,Country 97008,City,181,Country 96979,City,181,Country 89886,City,181,Country 89966,City,181,Country 90481,City,181,Country 90440,City,181,Country 90509,City,181,Country 90516,City,181,Country 90538,City,181,Country 90122,City,181,Country 90136,City,181,Country 90335,City,181,Country 90269,City,181,Country 90301,City,181,Country 90302,City,181,Country 90312,City,181,Country 90354,City,181,Country 90366,City,181,Country 90412,City,181,Country 90427,City,181,Country 93808,City,181,Country 93860,City,181,Country 90593,City,181,Country 90713,City,181,Country 90715,City,181,Country 90789,City,181,Country 90791,City,181,Country 90813,City,181,Country 90874,City,181,Country 91214,City,181,Country 91237,City,181,Country 90980,City,181,Country 90989,City,181,Country 91122,City,181,Country 91079,City,181,Country 91099,City,181,Country 91130,City,181,Country 91140,City,181,Country 91175,City,181,Country 91548,City,181,Country 91346,City,181,Country 91385,City,181,Country 91394,City,181,Country 91408,City,181,Country 91414,City,181,Country 91426,City,181,Country 91444,City,181,Country 91439,City,181,Country 91458,City,181,Country 91515,City,181,Country 91489,City,181,Country 91745,City,181,Country 91632,City,181,Country 91653,City,181,Country 91671,City,181,Country 91673,City,181,Country 91767,City,181,Country 91883,City,181,Country 91947,City,181,Country 91949,City,181,Country 91956,City,181,Country 92027,City,181,Country 92047,City,181,Country 92063,City,181,Country 92188,City,181,Country 92190,City,181,Country 92213,City,181,Country 92237,City,181,Country 92403,City,181,Country 92420,City,181,Country 92318,City,181,Country 92332,City,181,Country 92333,City,181,Country 92352,City,181,Country 92445,City,181,Country 92454,City,181,Country 92479,City,181,Country 92481,City,181,Country 92557,City,181,Country 92563,City,181,Country 92576,City,181,Country 92583,City,181,Country 92623,City,181,Country 92665,City,181,Country 92681,City,181,Country 92690,City,181,Country 92732,City,181,Country 92847,City,181,Country 92825,City,181,Country 92833,City,181,Country 92811,City,181,Country 93094,City,181,Country 93504,City,181,Country 92957,City,181,Country 93544,City,181,Country 93241,City,181,Country 93244,City,181,Country 93258,City,181,Country 93262,City,181,Country 93452,City,181,Country 93309,City,181,Country 93313,City,181,Country 93460,City,181,Country 93440,City,181,Country 93376,City,181,Country 93379,City,181,Country 93387,City,181,Country 93398,City,181,Country 93413,City,181,Country 93414,City,181,Country 93597,City,181,Country 93615,City,181,Country 93643,City,181,Country 93635,City,181,Country 93666,City,181,Country 93662,City,181,Country 93749,City,181,Country 93710,City,181,Country 93738,City,181,Country 93739,City,181,Country 94104,City,181,Country 94132,City,181,Country 94113,City,181,Country 93903,City,181,Country 93904,City,181,Country 93907,City,181,Country 93948,City,181,Country 93981,City,181,Country 94055,City,181,Country 94012,City,181,Country 94013,City,181,Country 94018,City,181,Country 94243,City,181,Country 94164,City,181,Country 94166,City,181,Country 94179,City,181,Country 94496,City,181,Country 94288,City,181,Country 94296,City,181,Country 94297,City,181,Country 94330,City,181,Country 94336,City,181,Country 94359,City,181,Country 94362,City,181,Country 94386,City,181,Country 94407,City,181,Country 94424,City,181,Country 94449,City,181,Country 94453,City,181,Country 94456,City,181,Country 94467,City,181,Country 94464,City,181,Country 94595,City,181,Country 94573,City,181,Country 94612,City,181,Country 94626,City,181,Country 94631,City,181,Country 94641,City,181,Country 94642,City,181,Country 94679,City,181,Country 94705,City,181,Country 94889,City,181,Country 94765,City,181,Country 94837,City,181,Country 94842,City,181,Country 94856,City,181,Country 94882,City,181,Country 94919,City,181,Country 95259,City,181,Country 95266,City,181,Country 95273,City,181,Country 95291,City,181,Country 94938,City,181,Country 94998,City,181,Country 95052,City,181,Country 95071,City,181,Country 95072,City,181,Country 95073,City,181,Country 95097,City,181,Country 95158,City,181,Country 95191,City,181,Country 95342,City,181,Country 95359,City,181,Country 95400,City,181,Country 95405,City,181,Country 95406,City,181,Country 95515,City,181,Country 95526,City,181,Country 95574,City,181,Country 95582,City,181,Country 95604,City,181,Country 95741,City,181,Country 95746,City,181,Country 95774,City,181,Country 95776,City,181,Country 95790,City,181,Country 95801,City,181,Country 95865,City,181,Country 95933,City,181,Country 95949,City,181,Country 95959,City,181,Country 95972,City,181,Country 95975,City,181,Country 96182,City,181,Country 96039,City,181,Country 96047,City,181,Country 96172,City,181,Country 96206,City,181,Country 96174,City,181,Country 96216,City,181,Country 96111,City,181,Country 96153,City,181,Country 105996,City,181,Country 106011,City,181,Country 106016,City,181,Country 106040,City,181,Country 96266,City,181,Country 96267,City,181,Country 97035,City,181,Country 96326,City,181,Country 96376,City,181,Country 97074,City,181,Country 96414,City,181,Country 96512,City,181,Country 96580,City,181,Country 96613,City,181,Country 96617,City,181,Country 106074,City,181,Country 106091,City,181,Country 106110,City,181,Country 96643,City,181,Country 96649,City,181,Country 96658,City,181,Country 96686,City,181,Country 96952,City,181,Country 96728,City,181,Country 96730,City,181,Country 96731,City,181,Country 96734,City,181,Country 96765,City,181,Country 96963,City,181,Country 96939,City,181,Country 96813,City,181,Country 96826,City,181,Country 96849,City,181,Country 96851,City,181,Country 96845,City,181,Country 96861,City,181,Country 96871,City,181,Country 96879,City,181,Country 96902,City,181,Country 96903,City,181,Country 96904,City,181,Country 97023,City,181,Country 96992,City,181,Country 89890,City,181,Country 89938,City,181,Country 89952,City,181,Country 89953,City,181,Country 89972,City,181,Country 89987,City,181,Country 90484,City,181,Country 90494,City,181,Country 90442,City,181,Country 90446,City,181,Country 90067,City,181,Country 90076,City,181,Country 90146,City,181,Country 90249,City,181,Country 90250,City,181,Country 90258,City,181,Country 90259,City,181,Country 90324,City,181,Country 90265,City,181,Country 90277,City,181,Country 90282,City,181,Country 90360,City,181,Country 90405,City,181,Country 90562,City,181,Country 93850,City,181,Country 90565,City,181,Country 90577,City,181,Country 93809,City,181,Country 93817,City,181,Country 90581,City,181,Country 90585,City,181,Country 90586,City,181,Country 90589,City,181,Country 90612,City,181,Country 90644,City,181,Country 90639,City,181,Country 90631,City,181,Country 90647,City,181,Country 90727,City,181,Country 90755,City,181,Country 90756,City,181,Country 90764,City,181,Country 90815,City,181,Country 90827,City,181,Country 90858,City,181,Country 90866,City,181,Country 90867,City,181,Country 90879,City,181,Country 90889,City,181,Country 91185,City,181,Country 90997,City,181,Country 91065,City,181,Country 91072,City,181,Country 91114,City,181,Country 91075,City,181,Country 91085,City,181,Country 91088,City,181,Country 91136,City,181,Country 91160,City,181,Country 91577,City,181,Country 91254,City,181,Country 91259,City,181,Country 91549,City,181,Country 91554,City,181,Country 91262,City,181,Country 91265,City,181,Country 91267,City,181,Country 91279,City,181,Country 91301,City,181,Country 91295,City,181,Country 91304,City,181,Country 91355,City,181,Country 91374,City,181,Country 91477,City,181,Country 91480,City,181,Country 91481,City,181,Country 91741,City,181,Country 91617,City,181,Country 91629,City,181,Country 91636,City,181,Country 91643,City,181,Country 91692,City,181,Country 91685,City,181,Country 91815,City,181,Country 91831,City,181,Country 91832,City,181,Country 91963,City,181,Country 91844,City,181,Country 91852,City,181,Country 91858,City,181,Country 91867,City,181,Country 91873,City,181,Country 91877,City,181,Country 91891,City,181,Country 91894,City,181,Country 91895,City,181,Country 91914,City,181,Country 93493,City,181,Country 92113,City,181,Country 92102,City,181,Country 92159,City,181,Country 92168,City,181,Country 92378,City,181,Country 92379,City,181,Country 92228,City,181,Country 92236,City,181,Country 92374,City,181,Country 92253,City,181,Country 92305,City,181,Country 92353,City,181,Country 92360,City,181,Country 92428,City,181,Country 92512,City,181,Country 92520,City,181,Country 92555,City,181,Country 92575,City,181,Country 92588,City,181,Country 92592,City,181,Country 92594,City,181,Country 92611,City,181,Country 92629,City,181,Country 92670,City,181,Country 92743,City,181,Country 92749,City,181,Country 92775,City,181,Country 92780,City,181,Country 92858,City,181,Country 93097,City,181,Country 92904,City,181,Country 92909,City,181,Country 92910,City,181,Country 92912,City,181,Country 92933,City,181,Country 93523,City,181,Country 92977,City,181,Country 93232,City,181,Country 93132,City,181,Country 93143,City,181,Country 93145,City,181,Country 93577,City,181,Country 93276,City,181,Country 93287,City,181,Country 93323,City,181,Country 93446,City,181,Country 93447,City,181,Country 93341,City,181,Country 93342,City,181,Country 93692,City,181,Country 93694,City,181,Country 93701,City,181,Country 93704,City,181,Country 94114,City,181,Country 94129,City,181,Country 93925,City,181,Country 93939,City,181,Country 93954,City,181,Country 93958,City,181,Country 93966,City,181,Country 94045,City,181,Country 94065,City,181,Country 94250,City,181,Country 94263,City,181,Country 94171,City,181,Country 94203,City,181,Country 94278,City,181,Country 94279,City,181,Country 94480,City,181,Country 94317,City,181,Country 94327,City,181,Country 94338,City,181,Country 94343,City,181,Country 94349,City,181,Country 94354,City,181,Country 94373,City,181,Country 94375,City,181,Country 94376,City,181,Country 94406,City,181,Country 94579,City,181,Country 97025,City,181,Country 94721,City,181,Country 94702,City,181,Country 94789,City,181,Country 94805,City,181,Country 94827,City,181,Country 95227,City,181,Country 95228,City,181,Country 94904,City,181,Country 94916,City,181,Country 95223,City,181,Country 94947,City,181,Country 95027,City,181,Country 95048,City,181,Country 95093,City,181,Country 95121,City,181,Country 95122,City,181,Country 95128,City,181,Country 95205,City,181,Country 95305,City,181,Country 95308,City,181,Country 95310,City,181,Country 95403,City,181,Country 95459,City,181,Country 95512,City,181,Country 95517,City,181,Country 95586,City,181,Country 95663,City,181,Country 95678,City,181,Country 95692,City,181,Country 95738,City,181,Country 95775,City,181,Country 95798,City,181,Country 95799,City,181,Country 95800,City,181,Country 95809,City,181,Country 95813,City,181,Country 95842,City,181,Country 95876,City,181,Country 95918,City,181,Country 95940,City,181,Country 95941,City,181,Country 95943,City,181,Country 95992,City,181,Country 96183,City,181,Country 96052,City,181,Country 96054,City,181,Country 96062,City,181,Country 96103,City,181,Country 96225,City,181,Country 96233,City,181,Country 106014,City,181,Country 106031,City,181,Country 96261,City,181,Country 96295,City,181,Country 96300,City,181,Country 96301,City,181,Country 96313,City,181,Country 96314,City,181,Country 96319,City,181,Country 96331,City,181,Country 96342,City,181,Country 97053,City,181,Country 96389,City,181,Country 96412,City,181,Country 96603,City,181,Country 106067,City,181,Country 106086,City,181,Country 106088,City,181,Country 97109,City,181,Country 96670,City,181,Country 96689,City,181,Country 96756,City,181,Country 96947,City,181,Country 96948,City,181,Country 96784,City,181,Country 96785,City,181,Country 97012,City,181,Country 97020,City,181,Country 90519,City,181,Country 90525,City,181,Country 90508,City,181,Country 90043,City,181,Country 90530,City,181,Country 90061,City,181,Country 90107,City,181,Country 90105,City,181,Country 90162,City,181,Country 90332,City,181,Country 90331,City,181,Country 90270,City,181,Country 90346,City,181,Country 90353,City,181,Country 90591,City,181,Country 90645,City,181,Country 90675,City,181,Country 90730,City,181,Country 90763,City,181,Country 91221,City,181,Country 91226,City,181,Country 91213,City,181,Country 91230,City,181,Country 90937,City,181,Country 90966,City,181,Country 91120,City,181,Country 91078,City,181,Country 91131,City,181,Country 91268,City,181,Country 91302,City,181,Country 91440,City,181,Country 91445,City,181,Country 91449,City,181,Country 91453,City,181,Country 91519,City,181,Country 91521,City,181,Country 91536,City,181,Country 91698,City,181,Country 91695,City,181,Country 91814,City,181,Country 91777,City,181,Country 91789,City,181,Country 91800,City,181,Country 91853,City,181,Country 91893,City,181,Country 91922,City,181,Country 92077,City,181,Country 92098,City,181,Country 92129,City,181,Country 92164,City,181,Country 92418,City,181,Country 92245,City,181,Country 92340,City,181,Country 92356,City,181,Country 92462,City,181,Country 92434,City,181,Country 92444,City,181,Country 92467,City,181,Country 92543,City,181,Country 92587,City,181,Country 92622,City,181,Country 92676,City,181,Country 92843,City,181,Country 92760,City,181,Country 92903,City,181,Country 92885,City,181,Country 93506,City,181,Country 92956,City,181,Country 92964,City,181,Country 92963,City,181,Country 93025,City,181,Country 93031,City,181,Country 93568,City,181,Country 93198,City,181,Country 93206,City,181,Country 93266,City,181,Country 93317,City,181,Country 93434,City,181,Country 93443,City,181,Country 93390,City,181,Country 93637,City,181,Country 93646,City,181,Country 93652,City,181,Country 93654,City,181,Country 93657,City,181,Country 93754,City,181,Country 93756,City,181,Country 93763,City,181,Country 93786,City,181,Country 94058,City,181,Country 94048,City,181,Country 94242,City,181,Country 94246,City,181,Country 94197,City,181,Country 94212,City,181,Country 94227,City,181,Country 94232,City,181,Country 94272,City,181,Country 94511,City,181,Country 94318,City,181,Country 94374,City,181,Country 94417,City,181,Country 94523,City,181,Country 94665,City,181,Country 94696,City,181,Country 94746,City,181,Country 94795,City,181,Country 95213,City,181,Country 95287,City,181,Country 94934,City,181,Country 95076,City,181,Country 95084,City,181,Country 95144,City,181,Country 95186,City,181,Country 95200,City,181,Country 95370,City,181,Country 95371,City,181,Country 95323,City,181,Country 95341,City,181,Country 95379,City,181,Country 95404,City,181,Country 95462,City,181,Country 95647,City,181,Country 95721,City,181,Country 95797,City,181,Country 95847,City,181,Country 95867,City,181,Country 95953,City,181,Country 96196,City,181,Country 96079,City,181,Country 96294,City,181,Country 96268,City,181,Country 97037,City,181,Country 97130,City,181,Country 96375,City,181,Country 96390,City,181,Country 96388,City,181,Country 96489,City,181,Country 96498,City,181,Country 96604,City,181,Country 96581,City,181,Country 106069,City,181,Country 97100,City,181,Country 106118,City,181,Country 106165,City,181,Country 96547,City,181,Country 96652,City,181,Country 96654,City,181,Country 96659,City,181,Country 96743,City,181,Country 96931,City,181,Country 96942,City,181,Country 96814,City,181,Country 96865,City,181,Country 89885,City,181,Country 90439,City,181,Country 90531,City,181,Country 90213,City,181,Country 90214,City,181,Country 90339,City,181,Country 90271,City,181,Country 90365,City,181,Country 90401,City,181,Country 90429,City,181,Country 93845,City,181,Country 93803,City,181,Country 90582,City,181,Country 93873,City,181,Country 90648,City,181,Country 90677,City,181,Country 90766,City,181,Country 90795,City,181,Country 90803,City,181,Country 90823,City,181,Country 91231,City,181,Country 91041,City,181,Country 91141,City,181,Country 91158,City,181,Country 91177,City,181,Country 91575,City,181,Country 91380,City,181,Country 91398,City,181,Country 91404,City,181,Country 91452,City,181,Country 91490,City,181,Country 91600,City,181,Country 93585,City,181,Country 91794,City,181,Country 91977,City,181,Country 91987,City,181,Country 91856,City,181,Country 91890,City,181,Country 91909,City,181,Country 91907,City,181,Country 91937,City,181,Country 91913,City,181,Country 91998,City,181,Country 92025,City,181,Country 92064,City,181,Country 92096,City,181,Country 92103,City,181,Country 92128,City,181,Country 92157,City,181,Country 92235,City,181,Country 92373,City,181,Country 92270,City,181,Country 92486,City,181,Country 92489,City,181,Country 92685,City,181,Country 92700,City,181,Country 92850,City,181,Country 92773,City,181,Country 93079,City,181,Country 92888,City,181,Country 92940,City,181,Country 92952,City,181,Country 93016,City,181,Country 92994,City,181,Country 93180,City,181,Country 93263,City,181,Country 93305,City,181,Country 93437,City,181,Country 93466,City,181,Country 93339,City,181,Country 93600,City,181,Country 93656,City,181,Country 93711,City,181,Country 93761,City,181,Country 93888,City,181,Country 94135,City,181,Country 93899,City,181,Country 93952,City,181,Country 94148,City,181,Country 94187,City,181,Country 94219,City,181,Country 94502,City,181,Country 94514,City,181,Country 94325,City,181,Country 94353,City,181,Country 94371,City,181,Country 94393,City,181,Country 94396,City,181,Country 94394,City,181,Country 94435,City,181,Country 94441,City,181,Country 94402,City,181,Country 94533,City,181,Country 94570,City,181,Country 94574,City,181,Country 94636,City,181,Country 94643,City,181,Country 94707,City,181,Country 94744,City,181,Country 94786,City,181,Country 94787,City,181,Country 94915,City,181,Country 94918,City,181,Country 95222,City,181,Country 94976,City,181,Country 94981,City,181,Country 94995,City,181,Country 95003,City,181,Country 95147,City,181,Country 95299,City,181,Country 95356,City,181,Country 95416,City,181,Country 95419,City,181,Country 95466,City,181,Country 95541,City,181,Country 96009,City,181,Country 95699,City,181,Country 95779,City,181,Country 95782,City,181,Country 95826,City,181,Country 95913,City,181,Country 95966,City,181,Country 95978,City,181,Country 95988,City,181,Country 96209,City,181,Country 96086,City,181,Country 96096,City,181,Country 105989,City,181,Country 96223,City,181,Country 96270,City,181,Country 96355,City,181,Country 96370,City,181,Country 96477,City,181,Country 96435,City,181,Country 96579,City,181,Country 106138,City,181,Country 106153,City,181,Country 96648,City,181,Country 96693,City,181,Country 96723,City,181,Country 96934,City,181,Country 96935,City,181,Country 96974,City,181,Country 96783,City,181,Country 96811,City,181,Country 96856,City,181,Country 97003,City,181,Country 89912,City,181,Country 89932,City,181,Country 89954,City,181,Country 89963,City,181,Country 89979,City,181,Country 90034,City,181,Country 90506,City,181,Country 90510,City,181,Country 90441,City,181,Country 90443,City,181,Country 90541,City,181,Country 90094,City,181,Country 90112,City,181,Country 90208,City,181,Country 90236,City,181,Country 90336,City,181,Country 90407,City,181,Country 90424,City,181,Country 93793,City,181,Country 93859,City,181,Country 93871,City,181,Country 93880,City,181,Country 90605,City,181,Country 90753,City,181,Country 90770,City,181,Country 90781,City,181,Country 90838,City,181,Country 90853,City,181,Country 90873,City,181,Country 90883,City,181,Country 90919,City,181,Country 91225,City,181,Country 91216,City,181,Country 91182,City,181,Country 91238,City,181,Country 90958,City,181,Country 91037,City,181,Country 91055,City,181,Country 91121,City,181,Country 91162,City,181,Country 91172,City,181,Country 91541,City,181,Country 91584,City,181,Country 91595,City,181,Country 91372,City,181,Country 91486,City,181,Country 91511,City,181,Country 91736,City,181,Country 91739,City,181,Country 91691,City,181,Country 91684,City,181,Country 91816,City,181,Country 91884,City,181,Country 91889,City,181,Country 92028,City,181,Country 92086,City,181,Country 92134,City,181,Country 92147,City,181,Country 92162,City,181,Country 92182,City,181,Country 92419,City,181,Country 92364,City,181,Country 92429,City,181,Country 92527,City,181,Country 92571,City,181,Country 92600,City,181,Country 92646,City,181,Country 92675,City,181,Country 92797,City,181,Country 92810,City,181,Country 93083,City,181,Country 92869,City,181,Country 93115,City,181,Country 92886,City,181,Country 92891,City,181,Country 92951,City,181,Country 93017,City,181,Country 92987,City,181,Country 92997,City,181,Country 93579,City,181,Country 93137,City,181,Country 93209,City,181,Country 93210,City,181,Country 93279,City,181,Country 93456,City,181,Country 93382,City,181,Country 93664,City,181,Country 93681,City,181,Country 93706,City,181,Country 93744,City,181,Country 94124,City,181,Country 94127,City,181,Country 93960,City,181,Country 94046,City,181,Country 94051,City,181,Country 94265,City,181,Country 94188,City,181,Country 94364,City,181,Country 94369,City,181,Country 94581,City,181,Country 94677,City,181,Country 94753,City,181,Country 94774,City,181,Country 94793,City,181,Country 94829,City,181,Country 94830,City,181,Country 95290,City,181,Country 95078,City,181,Country 95159,City,181,Country 95192,City,181,Country 95210,City,181,Country 95311,City,181,Country 95357,City,181,Country 95477,City,181,Country 95578,City,181,Country 95606,City,181,Country 95632,City,181,Country 95603,City,181,Country 95605,City,181,Country 95693,City,181,Country 95763,City,181,Country 95762,City,181,Country 95760,City,181,Country 95796,City,181,Country 95825,City,181,Country 95830,City,181,Country 95839,City,181,Country 95841,City,181,Country 95861,City,181,Country 95898,City,181,Country 95901,City,181,Country 95952,City,181,Country 96128,City,181,Country 96122,City,181,Country 96154,City,181,Country 105994,City,181,Country 96238,City,181,Country 96517,City,181,Country 106044,City,181,Country 96276,City,181,Country 96367,City,181,Country 96402,City,181,Country 96478,City,181,Country 96425,City,181,Country 96430,City,181,Country 96440,City,181,Country 97111,City,181,Country 96582,City,181,Country 96584,City,181,Country 106080,City,181,Country 97104,City,181,Country 106107,City,181,Country 96552,City,181,Country 96553,City,181,Country 96555,City,181,Country 96673,City,181,Country 96957,City,181,Country 96737,City,181,Country 96812,City,181,Country 96869,City,181,Country 96884,City,181,Country 90003,City,181,Country 90010,City,181,Country 90493,City,181,Country 90503,City,181,Country 90054,City,181,Country 90134,City,181,Country 90234,City,181,Country 90323,City,181,Country 93863,City,181,Country 93820,City,181,Country 90694,City,181,Country 90739,City,181,Country 90742,City,181,Country 90749,City,181,Country 90901,City,181,Country 90907,City,181,Country 90987,City,181,Country 91113,City,181,Country 91585,City,181,Country 91555,City,181,Country 91330,City,181,Country 91364,City,181,Country 91369,City,181,Country 91430,City,181,Country 91448,City,181,Country 91469,City,181,Country 91740,City,181,Country 91728,City,181,Country 91607,City,181,Country 91630,City,181,Country 91757,City,181,Country 91784,City,181,Country 91983,City,181,Country 92130,City,181,Country 92225,City,181,Country 92148,City,181,Country 92192,City,181,Country 92206,City,181,Country 92207,City,181,Country 92215,City,181,Country 92383,City,181,Country 92414,City,181,Country 92259,City,181,Country 92282,City,181,Country 92355,City,181,Country 92476,City,181,Country 92712,City,181,Country 92605,City,181,Country 92662,City,181,Country 92668,City,181,Country 92740,City,181,Country 92764,City,181,Country 93080,City,181,Country 93051,City,181,Country 93052,City,181,Country 93055,City,181,Country 93065,City,181,Country 93068,City,181,Country 93107,City,181,Country 92880,City,181,Country 92915,City,181,Country 92927,City,181,Country 92937,City,181,Country 93024,City,181,Country 93040,City,181,Country 93166,City,181,Country 93204,City,181,Country 93221,City,181,Country 93257,City,181,Country 93467,City,181,Country 93408,City,181,Country 93475,City,181,Country 93619,City,181,Country 93651,City,181,Country 93685,City,181,Country 93727,City,181,Country 94128,City,181,Country 94109,City,181,Country 93900,City,181,Country 93941,City,181,Country 94140,City,181,Country 94155,City,181,Country 94172,City,181,Country 94206,City,181,Country 94506,City,181,Country 94303,City,181,Country 94545,City,181,Country 94663,City,181,Country 94669,City,181,Country 94748,City,181,Country 94900,City,181,Country 94775,City,181,Country 94844,City,181,Country 94871,City,181,Country 94872,City,181,Country 94885,City,181,Country 95235,City,181,Country 95280,City,181,Country 94955,City,181,Country 94973,City,181,Country 94992,City,181,Country 95028,City,181,Country 95099,City,181,Country 95104,City,181,Country 95145,City,181,Country 95156,City,181,Country 95160,City,181,Country 95340,City,181,Country 95393,City,181,Country 95397,City,181,Country 95398,City,181,Country 95410,City,181,Country 95485,City,181,Country 95486,City,181,Country 95467,City,181,Country 95500,City,181,Country 95620,City,181,Country 96028,City,181,Country 95923,City,181,Country 95938,City,181,Country 96049,City,181,Country 96081,City,181,Country 105991,City,181,Country 96524,City,181,Country 96527,City,181,Country 96528,City,181,Country 96533,City,181,Country 96546,City,181,Country 105978,City,181,Country 106032,City,181,Country 96255,City,181,Country 96335,City,181,Country 96349,City,181,Country 96486,City,181,Country 96510,City,181,Country 96625,City,181,Country 106123,City,181,Country 106174,City,181,Country 96574,City,181,Country 96575,City,181,Country 96707,City,181,Country 96748,City,181,Country 96757,City,181,Country 96976,City,181,Country 96870,City,181,Country 96895,City,181,Country 96988,City,181,Country 96990,City,181,Country 89965,City,181,Country 90476,City,181,Country 90033,City,181,Country 90497,City,181,Country 90051,City,181,Country 90537,City,181,Country 90063,City,181,Country 90064,City,181,Country 90066,City,181,Country 90553,City,181,Country 90111,City,181,Country 90167,City,181,Country 90255,City,181,Country 90260,City,181,Country 90338,City,181,Country 90278,City,181,Country 90298,City,181,Country 90345,City,181,Country 90351,City,181,Country 90364,City,181,Country 90406,City,181,Country 90413,City,181,Country 90418,City,181,Country 93831,City,181,Country 93811,City,181,Country 93875,City,181,Country 90622,City,181,Country 90640,City,181,Country 91205,City,181,Country 90918,City,181,Country 91209,City,181,Country 90932,City,181,Country 91235,City,181,Country 90938,City,181,Country 91246,City,181,Country 90970,City,181,Country 91010,City,181,Country 91069,City,181,Country 91124,City,181,Country 91096,City,181,Country 91126,City,181,Country 91139,City,181,Country 91161,City,181,Country 91167,City,181,Country 91170,City,181,Country 91550,City,181,Country 91287,City,181,Country 91297,City,181,Country 91505,City,181,Country 91613,City,181,Country 91633,City,181,Country 91837,City,181,Country 91840,City,181,Country 91958,City,181,Country 92045,City,181,Country 92070,City,181,Country 92218,City,181,Country 92146,City,181,Country 92202,City,181,Country 92210,City,181,Country 92413,City,181,Country 92513,City,181,Country 92561,City,181,Country 92693,City,181,Country 92836,City,181,Country 92747,City,181,Country 92827,City,181,Country 92770,City,181,Country 92783,City,181,Country 93075,City,181,Country 93069,City,181,Country 92876,City,181,Country 93538,City,181,Country 93139,City,181,Country 93167,City,181,Country 93177,City,181,Country 93184,City,181,Country 93212,City,181,Country 93462,City,181,Country 93337,City,181,Country 93349,City,181,Country 93407,City,181,Country 93471,City,181,Country 93734,City,181,Country 93726,City,181,Country 93919,City,181,Country 93928,City,181,Country 93949,City,181,Country 94291,City,181,Country 94292,City,181,Country 94298,City,181,Country 94469,City,181,Country 94608,City,181,Country 94609,City,181,Country 94525,City,181,Country 94578,City,181,Country 94656,City,181,Country 94689,City,181,Country 94743,City,181,Country 94895,City,181,Country 94773,City,181,Country 94862,City,181,Country 94877,City,181,Country 94884,City,181,Country 95279,City,181,Country 95103,City,181,Country 95105,City,181,Country 95116,City,181,Country 95136,City,181,Country 95148,City,181,Country 95164,City,181,Country 95167,City,181,Country 95450,City,181,Country 95504,City,181,Country 95523,City,181,Country 95528,City,181,Country 95566,City,181,Country 95587,City,181,Country 95612,City,181,Country 95665,City,181,Country 95666,City,181,Country 95765,City,181,Country 95761,City,181,Country 95752,City,181,Country 95756,City,181,Country 95950,City,181,Country 95977,City,181,Country 96187,City,181,Country 96059,City,181,Country 96176,City,181,Country 96092,City,181,Country 96107,City,181,Country 106007,City,181,Country 105981,City,181,Country 96247,City,181,Country 96346,City,181,Country 97067,City,181,Country 106082,City,181,Country 106122,City,181,Country 106132,City,181,Country 106142,City,181,Country 96559,City,181,Country 96677,City,181,Country 96968,City,181,Country 96780,City,181,Country 96798,City,181,Country 96894,City,181,Country 96901,City,181,Country 96983,City,181,Country 96985,City,181,Country 89887,City,181,Country 89915,City,181,Country 89929,City,181,Country 89947,City,181,Country 89959,City,181,Country 89996,City,181,Country 90012,City,181,Country 90038,City,181,Country 90539,City,181,Country 90542,City,181,Country 90235,City,181,Country 90227,City,181,Country 90313,City,181,Country 90363,City,181,Country 90390,City,181,Country 90403,City,181,Country 93884,City,181,Country 90607,City,181,Country 90710,City,181,Country 90707,City,181,Country 90747,City,181,Country 90780,City,181,Country 90794,City,181,Country 90825,City,181,Country 90840,City,181,Country 90851,City,181,Country 90871,City,181,Country 90895,City,181,Country 90909,City,181,Country 90922,City,181,Country 91236,City,181,Country 91240,City,181,Country 91054,City,181,Country 91049,City,181,Country 91138,City,181,Country 91151,City,181,Country 91343,City,181,Country 91341,City,181,Country 91368,City,181,Country 91388,City,181,Country 91397,City,181,Country 91462,City,181,Country 91474,City,181,Country 91689,City,181,Country 91680,City,181,Country 91818,City,181,Country 91966,City,181,Country 91842,City,181,Country 91843,City,181,Country 91876,City,181,Country 91917,City,181,Country 91921,City,181,Country 91948,City,181,Country 92084,City,181,Country 92124,City,181,Country 92230,City,181,Country 92238,City,181,Country 92406,City,181,Country 92276,City,181,Country 92292,City,181,Country 92326,City,181,Country 92337,City,181,Country 92343,City,181,Country 92357,City,181,Country 92485,City,181,Country 92551,City,181,Country 92591,City,181,Country 92845,City,181,Country 92769,City,181,Country 92802,City,181,Country 93095,City,181,Country 93111,City,181,Country 93116,City,181,Country 92902,City,181,Country 92923,City,181,Country 92942,City,181,Country 92953,City,181,Country 92990,City,181,Country 93028,City,181,Country 93185,City,181,Country 93300,City,181,Country 93318,City,181,Country 93386,City,181,Country 93590,City,181,Country 93671,City,181,Country 93690,City,181,Country 94043,City,181,Country 94042,City,181,Country 94031,City,181,Country 94249,City,181,Country 94160,City,181,Country 94162,City,181,Country 94165,City,181,Country 94167,City,181,Country 94168,City,181,Country 94484,City,181,Country 94301,City,181,Country 94302,City,181,Country 94352,City,181,Country 94412,City,181,Country 94415,City,181,Country 94455,City,181,Country 94627,City,181,Country 94676,City,181,Country 94737,City,181,Country 94890,City,181,Country 94839,City,181,Country 94907,City,181,Country 94917,City,181,Country 94921,City,181,Country 95267,City,181,Country 94983,City,181,Country 95006,City,181,Country 95064,City,181,Country 95079,City,181,Country 95086,City,181,Country 95140,City,181,Country 95194,City,181,Country 95201,City,181,Country 95414,City,181,Country 95448,City,181,Country 95506,City,181,Country 95516,City,181,Country 95633,City,181,Country 95717,City,181,Country 95732,City,181,Country 95806,City,181,Country 96200,City,181,Country 96063,City,181,Country 96090,City,181,Country 96140,City,181,Country 96123,City,181,Country 106012,City,181,Country 106037,City,181,Country 106045,City,181,Country 96293,City,181,Country 96329,City,181,Country 96353,City,181,Country 96373,City,181,Country 96387,City,181,Country 96429,City,181,Country 96493,City,181,Country 97112,City,181,Country 106144,City,181,Country 96688,City,181,Country 96715,City,181,Country 96742,City,181,Country 96860,City,181,Country 96858,City,181,Country 89926,City,181,Country 89958,City,181,Country 89997,City,181,Country 90480,City,181,Country 90052,City,181,Country 90526,City,181,Country 90453,City,181,Country 90084,City,181,Country 90152,City,181,Country 90201,City,181,Country 90232,City,181,Country 90241,City,181,Country 90251,City,181,Country 90325,City,181,Country 90329,City,181,Country 90340,City,181,Country 90289,City,181,Country 90375,City,181,Country 90389,City,181,Country 90395,City,181,Country 90425,City,181,Country 90433,City,181,Country 93812,City,181,Country 93818,City,181,Country 90618,City,181,Country 90689,City,181,Country 90719,City,181,Country 90728,City,181,Country 90757,City,181,Country 90773,City,181,Country 90788,City,181,Country 90811,City,181,Country 90848,City,181,Country 90870,City,181,Country 90896,City,181,Country 90931,City,181,Country 91227,City,181,Country 91190,City,181,Country 90949,City,181,Country 90999,City,181,Country 91118,City,181,Country 91173,City,181,Country 91284,City,181,Country 91349,City,181,Country 91356,City,181,Country 91375,City,181,Country 91382,City,181,Country 91407,City,181,Country 91457,City,181,Country 91461,City,181,Country 91466,City,181,Country 91471,City,181,Country 91496,City,181,Country 91520,City,181,Country 91599,City,181,Country 91611,City,181,Country 91644,City,181,Country 91655,City,181,Country 91697,City,181,Country 91720,City,181,Country 91749,City,181,Country 91807,City,181,Country 91774,City,181,Country 91899,City,181,Country 91900,City,181,Country 91910,City,181,Country 91925,City,181,Country 91927,City,181,Country 92040,City,181,Country 92044,City,181,Country 91995,City,181,Country 92009,City,181,Country 92020,City,181,Country 92083,City,181,Country 92089,City,181,Country 92155,City,181,Country 92161,City,181,Country 92211,City,181,Country 92382,City,181,Country 92297,City,181,Country 92299,City,181,Country 92300,City,181,Country 92301,City,181,Country 92319,City,181,Country 92320,City,181,Country 92347,City,181,Country 92351,City,181,Country 92341,City,181,Country 92526,City,181,Country 92604,City,181,Country 92654,City,181,Country 92658,City,181,Country 92679,City,181,Country 92680,City,181,Country 92837,City,181,Country 92844,City,181,Country 92761,City,181,Country 92787,City,181,Country 92794,City,181,Country 92808,City,181,Country 92901,City,181,Country 92884,City,181,Country 92889,City,181,Country 92892,City,181,Country 92939,City,181,Country 93528,City,181,Country 92943,City,181,Country 92998,City,181,Country 93007,City,181,Country 93124,City,181,Country 93245,City,181,Country 93570,City,181,Country 93572,City,181,Country 93574,City,181,Country 93165,City,181,Country 93168,City,181,Country 93193,City,181,Country 93578,City,181,Country 93268,City,181,Country 93310,City,181,Country 93321,City,181,Country 93432,City,181,Country 93353,City,181,Country 93388,City,181,Country 93399,City,181,Country 93599,City,181,Country 93650,City,181,Country 93665,City,181,Country 93669,City,181,Country 93676,City,181,Country 93679,City,181,Country 93683,City,181,Country 93686,City,181,Country 93719,City,181,Country 93728,City,181,Country 93742,City,181,Country 93762,City,181,Country 93887,City,181,Country 93892,City,181,Country 93915,City,181,Country 93969,City,181,Country 93983,City,181,Country 93993,City,181,Country 94053,City,181,Country 94076,City,181,Country 94091,City,181,Country 94096,City,181,Country 94144,City,181,Country 94241,City,181,Country 94266,City,181,Country 94161,City,181,Country 94192,City,181,Country 94481,City,181,Country 94363,City,181,Country 94370,City,181,Country 94380,City,181,Country 94382,City,181,Country 94391,City,181,Country 94400,City,181,Country 94420,City,181,Country 94422,City,181,Country 94602,City,181,Country 94588,City,181,Country 94606,City,181,Country 94607,City,181,Country 94591,City,181,Country 94526,City,181,Country 94528,City,181,Country 94544,City,181,Country 94549,City,181,Country 94564,City,181,Country 94630,City,181,Country 94628,City,181,Country 94675,City,181,Country 94683,City,181,Country 94695,City,181,Country 94706,City,181,Country 94782,City,181,Country 94791,City,181,Country 94810,City,181,Country 94853,City,181,Country 94863,City,181,Country 94880,City,181,Country 95232,City,181,Country 95261,City,181,Country 94940,City,181,Country 95014,City,181,Country 95019,City,181,Country 95021,City,181,Country 95022,City,181,Country 95053,City,181,Country 95054,City,181,Country 95088,City,181,Country 95092,City,181,Country 95083,City,181,Country 95100,City,181,Country 95150,City,181,Country 95166,City,181,Country 95199,City,181,Country 95531,City,181,Country 95569,City,181,Country 95607,City,181,Country 95674,City,181,Country 95689,City,181,Country 95998,City,181,Country 95718,City,181,Country 96036,City,181,Country 95730,City,181,Country 95786,City,181,Country 95831,City,181,Country 95849,City,181,Country 95850,City,181,Country 95862,City,181,Country 95877,City,181,Country 95893,City,181,Country 95909,City,181,Country 95919,City,181,Country 95956,City,181,Country 95957,City,181,Country 96185,City,181,Country 96199,City,181,Country 96213,City,181,Country 96075,City,181,Country 96110,City,181,Country 96134,City,181,Country 96148,City,181,Country 96259,City,181,Country 96292,City,181,Country 96265,City,181,Country 96273,City,181,Country 96277,City,181,Country 96352,City,181,Country 97057,City,181,Country 96359,City,181,Country 96371,City,181,Country 96395,City,181,Country 96399,City,181,Country 96431,City,181,Country 96442,City,181,Country 96445,City,181,Country 96459,City,181,Country 96497,City,181,Country 106050,City,181,Country 106058,City,181,Country 96583,City,181,Country 96620,City,181,Country 97101,City,181,Country 97103,City,181,Country 97106,City,181,Country 106115,City,181,Country 106121,City,181,Country 106129,City,181,Country 106143,City,181,Country 106156,City,181,Country 97110,City,181,Country 96634,City,181,Country 96732,City,181,Country 96753,City,181,Country 96930,City,181,Country 96792,City,181,Country 96805,City,181,Country 96862,City,181,Country 96881,City,181,Country 96978,City,181,Country 97001,City,181,Country 89871,City,181,Country 89891,City,181,Country 89943,City,181,Country 90521,City,181,Country 90045,City,181,Country 90099,City,181,Country 90264,City,181,Country 90337,City,181,Country 90352,City,181,Country 90391,City,181,Country 90416,City,181,Country 93824,City,181,Country 93833,City,181,Country 93886,City,181,Country 90635,City,181,Country 90662,City,181,Country 90684,City,181,Country 90717,City,181,Country 90720,City,181,Country 90726,City,181,Country 90767,City,181,Country 90816,City,181,Country 90828,City,181,Country 90927,City,181,Country 90961,City,181,Country 91123,City,181,Country 91293,City,181,Country 91311,City,181,Country 91350,City,181,Country 91354,City,181,Country 91381,City,181,Country 91420,City,181,Country 91423,City,181,Country 91437,City,181,Country 91746,City,181,Country 91605,City,181,Country 91658,City,181,Country 91675,City,181,Country 91801,City,181,Country 91985,City,181,Country 91880,City,181,Country 91938,City,181,Country 91931,City,181,Country 92123,City,181,Country 92313,City,181,Country 92321,City,181,Country 92455,City,181,Country 92553,City,181,Country 92569,City,181,Country 92967,City,181,Country 93554,City,181,Country 93207,City,181,Country 93355,City,181,Country 93607,City,181,Country 93612,City,181,Country 93633,City,181,Country 93714,City,181,Country 94134,City,181,Country 94112,City,181,Country 93897,City,181,Country 93961,City,181,Country 93991,City,181,Country 93990,City,181,Country 94020,City,181,Country 94019,City,181,Country 94226,City,181,Country 94510,City,181,Country 94309,City,181,Country 94358,City,181,Country 94438,City,181,Country 94430,City,181,Country 94690,City,181,Country 94736,City,181,Country 94800,City,181,Country 95243,City,181,Country 94958,City,181,Country 95043,City,181,Country 95055,City,181,Country 95361,City,181,Country 95431,City,181,Country 95469,City,181,Country 95475,City,181,Country 95491,City,181,Country 95546,City,181,Country 95561,City,181,Country 95565,City,181,Country 95571,City,181,Country 95684,City,181,Country 95706,City,181,Country 95735,City,181,Country 95758,City,181,Country 95802,City,181,Country 95912,City,181,Country 96142,City,181,Country 96146,City,181,Country 96345,City,181,Country 96357,City,181,Country 96393,City,181,Country 97087,City,181,Country 106056,City,181,Country 96578,City,181,Country 96548,City,181,Country 96943,City,181,Country 96809,City,181,Country 96889,City,181,Country 96890,City,181,Country 89984,City,181,Country 146723,City,181,Country 146724,City,181,Country 146725,City,181,Country 89994,City,181,Country 146726,City,181,Country 146727,City,181,Country 90001,City,181,Country 146728,City,181,Country 90029,City,181,Country 90030,City,181,Country 90488,City,181,Country 90500,City,181,Country 90498,City,181,Country 90495,City,181,Country 146742,City,181,Country 90455,City,181,Country 90550,City,181,Country 90096,City,181,Country 146729,City,181,Country 146730,City,181,Country 90125,City,181,Country 90144,City,181,Country 146731,City,181,Country 146732,City,181,Country 90175,City,181,Country 90187,City,181,Country 146733,City,181,Country 90205,City,181,Country 146734,City,181,Country 90222,City,181,Country 90238,City,181,Country 90245,City,181,Country 146735,City,181,Country 146736,City,181,Country 90290,City,181,Country 146737,City,181,Country 146738,City,181,Country 90381,City,181,Country 146741,City,181,Country 146739,City,181,Country 146740,City,181,Country 93839,City,181,Country 93802,City,181,Country 146761,City,181,Country 146762,City,181,Country 146763,City,181,Country 90592,City,181,Country 90633,City,181,Country 146743,City,181,Country 146744,City,181,Country 90654,City,181,Country 146745,City,181,Country 90698,City,181,Country 146746,City,181,Country 146747,City,181,Country 146748,City,181,Country 90774,City,181,Country 146749,City,181,Country 90801,City,181,Country 146750,City,181,Country 90887,City,181,Country 90893,City,181,Country 90899,City,181,Country 91210,City,181,Country 91207,City,181,Country 91192,City,181,Country 91244,City,181,Country 90982,City,181,Country 90996,City,181,Country 91014,City,181,Country 91022,City,181,Country 91034,City,181,Country 91062,City,181,Country 91145,City,181,Country 91571,City,181,Country 91544,City,181,Country 91292,City,181,Country 91334,City,181,Country 91383,City,181,Country 91401,City,181,Country 91416,City,181,Country 91446,City,181,Country 91526,City,181,Country 91618,City,181,Country 91719,City,181,Country 91822,City,181,Country 91972,City,181,Country 91874,City,181,Country 91928,City,181,Country 91929,City,181,Country 92065,City,181,Country 92221,City,181,Country 92153,City,181,Country 92298,City,181,Country 92323,City,181,Country 92469,City,181,Country 92478,City,181,Country 92499,City,181,Country 92567,City,181,Country 92643,City,181,Country 92642,City,181,Country 92754,City,181,Country 92765,City,181,Country 92767,City,181,Country 92768,City,181,Country 92789,City,181,Country 92790,City,181,Country 92793,City,181,Country 92817,City,181,Country 93087,City,181,Country 93081,City,181,Country 93098,City,181,Country 93077,City,181,Country 93110,City,181,Country 92882,City,181,Country 93515,City,181,Country 93532,City,181,Country 93008,City,181,Country 93027,City,181,Country 93291,City,181,Country 93299,City,181,Country 93363,City,181,Country 93375,City,181,Country 146751,City,181,Country 93601,City,181,Country 146752,City,181,Country 146753,City,181,Country 93647,City,181,Country 146754,City,181,Country 146755,City,181,Country 146756,City,181,Country 93752,City,181,Country 93708,City,181,Country 146757,City,181,Country 146758,City,181,Country 93771,City,181,Country 146759,City,181,Country 146760,City,181,Country 94122,City,181,Country 146770,City,181,Country 146771,City,181,Country 146764,City,181,Country 146765,City,181,Country 93926,City,181,Country 146766,City,181,Country 146767,City,181,Country 94016,City,181,Country 146768,City,181,Country 94089,City,181,Country 146769,City,181,Country 146779,City,181,Country 146780,City,181,Country 94261,City,181,Country 146781,City,181,Country 146772,City,181,Country 146773,City,181,Country 146774,City,181,Country 146775,City,181,Country 146776,City,181,Country 146777,City,181,Country 146778,City,181,Country 94490,City,181,Country 94350,City,181,Country 146782,City,181,Country 146783,City,181,Country 94425,City,181,Country 94428,City,181,Country 146784,City,181,Country 146788,City,181,Country 146785,City,181,Country 146786,City,181,Country 146787,City,181,Country 94617,City,181,Country 94623,City,181,Country 94644,City,181,Country 94653,City,181,Country 146789,City,181,Country 146856,City,181,Country 146790,City,181,Country 146791,City,181,Country 94896,City,181,Country 94899,City,181,Country 146792,City,181,Country 146795,City,181,Country 146793,City,181,Country 94780,City,181,Country 94792,City,181,Country 146794,City,181,Country 94873,City,181,Country 146800,City,181,Country 146801,City,181,Country 95220,City,181,Country 94924,City,181,Country 146796,City,181,Country 146797,City,181,Country 95016,City,181,Country 146798,City,181,Country 146799,City,181,Country 95059,City,181,Country 146803,City,181,Country 146802,City,181,Country 95351,City,181,Country 95385,City,181,Country 146804,City,181,Country 95399,City,181,Country 146805,City,181,Country 146806,City,181,Country 95437,City,181,Country 146807,City,181,Country 146808,City,181,Country 95755,City,181,Country 146809,City,181,Country 146810,City,181,Country 146811,City,181,Country 95895,City,181,Country 95894,City,181,Country 146812,City,181,Country 146813,City,181,Country 146814,City,181,Country 146815,City,181,Country 146816,City,181,Country 146824,City,181,Country 96070,City,181,Country 146817,City,181,Country 96083,City,181,Country 96085,City,181,Country 146818,City,181,Country 96087,City,181,Country 146819,City,181,Country 96102,City,181,Country 146820,City,181,Country 146821,City,181,Country 96116,City,181,Country 96117,City,181,Country 96124,City,181,Country 146822,City,181,Country 96160,City,181,Country 146823,City,181,Country 146834,City,181,Country 106001,City,181,Country 105990,City,181,Country 146835,City,181,Country 95645,City,181,Country 146836,City,181,Country 106021,City,181,Country 146833,City,181,Country 106029,City,181,Country 96244,City,181,Country 105986,City,181,Country 106038,City,181,Country 96251,City,181,Country 146825,City,181,Country 146826,City,181,Country 96262,City,181,Country 95644,City,181,Country 97122,City,181,Country 95182,City,181,Country 146857,City,181,Country 97129,City,181,Country 146827,City,181,Country 95651,City,181,Country 146828,City,181,Country 146829,City,181,Country 146830,City,181,Country 146832,City,181,Country 96461,City,181,Country 146831,City,181,Country 96491,City,181,Country 96492,City,181,Country 146858,City,181,Country 97136,City,181,Country 146840,City,181,Country 146841,City,181,Country 95648,City,181,Country 96628,City,181,Country 95649,City,181,Country 146837,City,181,Country 146859,City,181,Country 106106,City,181,Country 146855,City,181,Country 146838,City,181,Country 146839,City,181,Country 95611,City,181,Country 146842,City,181,Country 146843,City,181,Country 96660,City,181,Country 146844,City,181,Country 146845,City,181,Country 96696,City,181,Country 96714,City,181,Country 146846,City,181,Country 146847,City,181,Country 146848,City,181,Country 146849,City,181,Country 96764,City,181,Country 96959,City,181,Country 146853,City,181,Country 96966,City,181,Country 146854,City,181,Country 146850,City,181,Country 146851,City,181,Country 146852,City,181,Country 96829,City,181,Country 96847,City,181,Country 96852,City,181,Country 95619,City,181,Country 90438,City,181,Country 90031,City,181,Country 90036,City,181,Country 90523,City,181,Country 90046,City,181,Country 90049,City,181,Country 90444,City,181,Country 90149,City,181,Country 90272,City,181,Country 90299,City,181,Country 90300,City,181,Country 90310,City,181,Country 90417,City,181,Country 90428,City,181,Country 93883,City,181,Country 90634,City,181,Country 90708,City,181,Country 90725,City,181,Country 90732,City,181,Country 90808,City,181,Country 91181,City,181,Country 90920,City,181,Country 91224,City,181,Country 90928,City,181,Country 91183,City,181,Country 91080,City,181,Country 91097,City,181,Country 91098,City,181,Country 91103,City,181,Country 91169,City,181,Country 91176,City,181,Country 91597,City,181,Country 91360,City,181,Country 91431,City,181,Country 91434,City,181,Country 91522,City,181,Country 91730,City,181,Country 91619,City,181,Country 91704,City,181,Country 91712,City,181,Country 91752,City,181,Country 91772,City,181,Country 91973,City,181,Country 91887,City,181,Country 91892,City,181,Country 91916,City,181,Country 91926,City,181,Country 91930,City,181,Country 92002,City,181,Country 92031,City,181,Country 92074,City,181,Country 92073,City,181,Country 92095,City,181,Country 92111,City,181,Country 92118,City,181,Country 92179,City,181,Country 92234,City,181,Country 92474,City,181,Country 92475,City,181,Country 92503,City,181,Country 92529,City,181,Country 92724,City,181,Country 92612,City,181,Country 92650,City,181,Country 92659,City,181,Country 92678,City,181,Country 92687,City,181,Country 92697,City,181,Country 92779,City,181,Country 92865,City,181,Country 92935,City,181,Country 92945,City,181,Country 92978,City,181,Country 93014,City,181,Country 93043,City,181,Country 93223,City,181,Country 93433,City,181,Country 93431,City,181,Country 93384,City,181,Country 93403,City,181,Country 93410,City,181,Country 93622,City,181,Country 93628,City,181,Country 93766,City,181,Country 94123,City,181,Country 94111,City,181,Country 93929,City,181,Country 94032,City,181,Country 94066,City,181,Country 94068,City,181,Country 94082,City,181,Country 94147,City,181,Country 94184,City,181,Country 94491,City,181,Country 94290,City,181,Country 94367,City,181,Country 94372,City,181,Country 94408,City,181,Country 94423,City,181,Country 94429,City,181,Country 94466,City,181,Country 94475,City,181,Country 94520,City,181,Country 94537,City,181,Country 94585,City,181,Country 94660,City,181,Country 94659,City,181,Country 94693,City,181,Country 94700,City,181,Country 94709,City,181,Country 94717,City,181,Country 94726,City,181,Country 94727,City,181,Country 94732,City,181,Country 94741,City,181,Country 94822,City,181,Country 94914,City,181,Country 95138,City,181,Country 95165,City,181,Country 95334,City,181,Country 95391,City,181,Country 95390,City,181,Country 95443,City,181,Country 95454,City,181,Country 95593,City,181,Country 95621,City,181,Country 95657,City,181,Country 95669,City,181,Country 95680,City,181,Country 95696,City,181,Country 96024,City,181,Country 95843,City,181,Country 95905,City,181,Country 95920,City,181,Country 95955,City,181,Country 95968,City,181,Country 95982,City,181,Country 96068,City,181,Country 96101,City,181,Country 96137,City,181,Country 96232,City,181,Country 97051,City,181,Country 97061,City,181,Country 97075,City,181,Country 96473,City,181,Country 96449,City,181,Country 96515,City,181,Country 96577,City,181,Country 96928,City,181,Country 96926,City,181,Country 96927,City,181,Country 96859,City,181,Country 96887,City,181,Country 96897,City,181,Country 146225,City,181,Country 146226,City,181,Country 146230,City,181,Country 146227,City,181,Country 146228,City,181,Country 146229,City,181,Country 146231,City,181,Country 146232,City,181,Country 146233,City,181,Country 146234,City,181,Country 146235,City,181,Country 146236,City,181,Country 146237,City,181,Country 146238,City,181,Country 146239,City,181,Country 146242,City,181,Country 146240,City,181,Country 146241,City,181,Country 146282,City,181,Country 146243,City,181,Country 146283,City,181,Country 146284,City,181,Country 146285,City,181,Country 146244,City,181,Country 146245,City,181,Country 146278,City,181,Country 146286,City,181,Country 146287,City,181,Country 146279,City,181,Country 146280,City,181,Country 146281,City,181,Country 146246,City,181,Country 146247,City,181,Country 146248,City,181,Country 146249,City,181,Country 146250,City,181,Country 146251,City,181,Country 146252,City,181,Country 146253,City,181,Country 146254,City,181,Country 146255,City,181,Country 146256,City,181,Country 146257,City,181,Country 146258,City,181,Country 146259,City,181,Country 146260,City,181,Country 146261,City,181,Country 146262,City,181,Country 146263,City,181,Country 146264,City,181,Country 146265,City,181,Country 146266,City,181,Country 146267,City,181,Country 146268,City,181,Country 146269,City,181,Country 146270,City,181,Country 146271,City,181,Country 146274,City,181,Country 146273,City,181,Country 146272,City,181,Country 146275,City,181,Country 146276,City,181,Country 146277,City,181,Country 146345,City,181,Country 146346,City,181,Country 146347,City,181,Country 146348,City,181,Country 146349,City,181,Country 146342,City,181,Country 146343,City,181,Country 146344,City,181,Country 146352,City,181,Country 146350,City,181,Country 146351,City,181,Country 146288,City,181,Country 146289,City,181,Country 146290,City,181,Country 146291,City,181,Country 146292,City,181,Country 146293,City,181,Country 146294,City,181,Country 146295,City,181,Country 146296,City,181,Country 146297,City,181,Country 146298,City,181,Country 146299,City,181,Country 146300,City,181,Country 146301,City,181,Country 146302,City,181,Country 146303,City,181,Country 146304,City,181,Country 146305,City,181,Country 146306,City,181,Country 146307,City,181,Country 146308,City,181,Country 146309,City,181,Country 146310,City,181,Country 146311,City,181,Country 146312,City,181,Country 146313,City,181,Country 146314,City,181,Country 146315,City,181,Country 146316,City,181,Country 146317,City,181,Country 146318,City,181,Country 146319,City,181,Country 146320,City,181,Country 146321,City,181,Country 146322,City,181,Country 146323,City,181,Country 146324,City,181,Country 146325,City,181,Country 146326,City,181,Country 146327,City,181,Country 146328,City,181,Country 146329,City,181,Country 146332,City,181,Country 146333,City,181,Country 146331,City,181,Country 146330,City,181,Country 146334,City,181,Country 146335,City,181,Country 146336,City,181,Country 146337,City,181,Country 146338,City,181,Country 146339,City,181,Country 146340,City,181,Country 146341,City,181,Country 146353,City,181,Country 146354,City,181,Country 146374,City,181,Country 146373,City,181,Country 146375,City,181,Country 146355,City,181,Country 146376,City,181,Country 146356,City,181,Country 146357,City,181,Country 146358,City,181,Country 146359,City,181,Country 146360,City,181,Country 146361,City,181,Country 146362,City,181,Country 146363,City,181,Country 146365,City,181,Country 146364,City,181,Country 146366,City,181,Country 146367,City,181,Country 146368,City,181,Country 146369,City,181,Country 146370,City,181,Country 146371,City,181,Country 146372,City,181,Country 146377,City,181,Country 146378,City,181,Country 146379,City,181,Country 146380,City,181,Country 146391,City,181,Country 146392,City,181,Country 146393,City,181,Country 146394,City,181,Country 146395,City,181,Country 146396,City,181,Country 146381,City,181,Country 146382,City,181,Country 146383,City,181,Country 146384,City,181,Country 146385,City,181,Country 146386,City,181,Country 146387,City,181,Country 146388,City,181,Country 146390,City,181,Country 146389,City,181,Country 146418,City,181,Country 146420,City,181,Country 146421,City,181,Country 146419,City,181,Country 146417,City,181,Country 146422,City,181,Country 146397,City,181,Country 146398,City,181,Country 146399,City,181,Country 146400,City,181,Country 146401,City,181,Country 146402,City,181,Country 146403,City,181,Country 146404,City,181,Country 146406,City,181,Country 146405,City,181,Country 146407,City,181,Country 146408,City,181,Country 146409,City,181,Country 146415,City,181,Country 146414,City,181,Country 146410,City,181,Country 146411,City,181,Country 146412,City,181,Country 146413,City,181,Country 146416,City,181,Country 146423,City,181,Country 146431,City,181,Country 146424,City,181,Country 146432,City,181,Country 146433,City,181,Country 146425,City,181,Country 146426,City,181,Country 146427,City,181,Country 146428,City,181,Country 146429,City,181,Country 146430,City,181,Country 146434,City,181,Country 146435,City,181,Country 146436,City,181,Country 146437,City,181,Country 146438,City,181,Country 146440,City,181,Country 146441,City,181,Country 146442,City,181,Country 146443,City,181,Country 146444,City,181,Country 146445,City,181,Country 146446,City,181,Country 146447,City,181,Country 146448,City,181,Country 146449,City,181,Country 146450,City,181,Country 146451,City,181,Country 146453,City,181,Country 146454,City,181,Country 146452,City,181,Country 146455,City,181,Country 146456,City,181,Country 146457,City,181,Country 146478,City,181,Country 146458,City,181,Country 146479,City,181,Country 146459,City,181,Country 146460,City,181,Country 146480,City,181,Country 146461,City,181,Country 146462,City,181,Country 146463,City,181,Country 146464,City,181,Country 146465,City,181,Country 146466,City,181,Country 146467,City,181,Country 146468,City,181,Country 146469,City,181,Country 146470,City,181,Country 146471,City,181,Country 146472,City,181,Country 146473,City,181,Country 146474,City,181,Country 146475,City,181,Country 146476,City,181,Country 146477,City,181,Country 146508,City,181,Country 146509,City,181,Country 146510,City,181,Country 146511,City,181,Country 146512,City,181,Country 146481,City,181,Country 146482,City,181,Country 146483,City,181,Country 146513,City,181,Country 146484,City,181,Country 146485,City,181,Country 146515,City,181,Country 146514,City,181,Country 146516,City,181,Country 146486,City,181,Country 146487,City,181,Country 146488,City,181,Country 146489,City,181,Country 146490,City,181,Country 146491,City,181,Country 146492,City,181,Country 146493,City,181,Country 146494,City,181,Country 146495,City,181,Country 146496,City,181,Country 146497,City,181,Country 146498,City,181,Country 146501,City,181,Country 146499,City,181,Country 146500,City,181,Country 146502,City,181,Country 146503,City,181,Country 146504,City,181,Country 146505,City,181,Country 146506,City,181,Country 146507,City,181,Country 146518,City,181,Country 146517,City,181,Country 146519,City,181,Country 146520,City,181,Country 146521,City,181,Country 146522,City,181,Country 146523,City,181,Country 146524,City,181,Country 146525,City,181,Country 146526,City,181,Country 146527,City,181,Country 146528,City,181,Country 146529,City,181,Country 146530,City,181,Country 146531,City,181,Country 146532,City,181,Country 146533,City,181,Country 146534,City,181,Country 146535,City,181,Country 146536,City,181,Country 146555,City,181,Country 146556,City,181,Country 146557,City,181,Country 146558,City,181,Country 146559,City,181,Country 146537,City,181,Country 146553,City,181,Country 146554,City,181,Country 146560,City,181,Country 146561,City,181,Country 146562,City,181,Country 146538,City,181,Country 146539,City,181,Country 146540,City,181,Country 146541,City,181,Country 146542,City,181,Country 146543,City,181,Country 146544,City,181,Country 146545,City,181,Country 146546,City,181,Country 146547,City,181,Country 146548,City,181,Country 146549,City,181,Country 146550,City,181,Country 146551,City,181,Country 146552,City,181,Country 146563,City,181,Country 146573,City,181,Country 146564,City,181,Country 146574,City,181,Country 146575,City,181,Country 146576,City,181,Country 146565,City,181,Country 146182,City,181,Country 146566,City,181,Country 146567,City,181,Country 146568,City,181,Country 146571,City,181,Country 146569,City,181,Country 146570,City,181,Country 146572,City,181,Country 146618,City,181,Country 146620,City,181,Country 146619,City,181,Country 146621,City,181,Country 146702,City,181,Country 146622,City,181,Country 146623,City,181,Country 146624,City,181,Country 146598,City,181,Country 146599,City,181,Country 146703,City,181,Country 146600,City,181,Country 146601,City,181,Country 146602,City,181,Country 146603,City,181,Country 146604,City,181,Country 146605,City,181,Country 146606,City,181,Country 146608,City,181,Country 146609,City,181,Country 146607,City,181,Country 146610,City,181,Country 146611,City,181,Country 146612,City,181,Country 146613,City,181,Country 146614,City,181,Country 146615,City,181,Country 146616,City,181,Country 146617,City,181,Country 146704,City,181,Country 146627,City,181,Country 146705,City,181,Country 146626,City,181,Country 146625,City,181,Country 146577,City,181,Country 146578,City,181,Country 146717,City,181,Country 146718,City,181,Country 146719,City,181,Country 146579,City,181,Country 146580,City,181,Country 146581,City,181,Country 146582,City,181,Country 146706,City,181,Country 146583,City,181,Country 146707,City,181,Country 146584,City,181,Country 146585,City,181,Country 146586,City,181,Country 146708,City,181,Country 146709,City,181,Country 146710,City,181,Country 146711,City,181,Country 146587,City,181,Country 146712,City,181,Country 146588,City,181,Country 146589,City,181,Country 146713,City,181,Country 146714,City,181,Country 146590,City,181,Country 146593,City,181,Country 146715,City,181,Country 146716,City,181,Country 146592,City,181,Country 146591,City,181,Country 146594,City,181,Country 146595,City,181,Country 146596,City,181,Country 146597,City,181,Country 146645,City,181,Country 146642,City,181,Country 146643,City,181,Country 146644,City,181,Country 146646,City,181,Country 146647,City,181,Country 146628,City,181,Country 146720,City,181,Country 146721,City,181,Country 146629,City,181,Country 146630,City,181,Country 146631,City,181,Country 146632,City,181,Country 146633,City,181,Country 146634,City,181,Country 146635,City,181,Country 146636,City,181,Country 146637,City,181,Country 146722,City,181,Country 146638,City,181,Country 146639,City,181,Country 146640,City,181,Country 146641,City,181,Country 146648,City,181,Country 146649,City,181,Country 146650,City,181,Country 146651,City,181,Country 146652,City,181,Country 146653,City,181,Country 146654,City,181,Country 146690,City,181,Country 146655,City,181,Country 146656,City,181,Country 146657,City,181,Country 146658,City,181,Country 146659,City,181,Country 146660,City,181,Country 146661,City,181,Country 146662,City,181,Country 146663,City,181,Country 146664,City,181,Country 146665,City,181,Country 146666,City,181,Country 146667,City,181,Country 146668,City,181,Country 146671,City,181,Country 146672,City,181,Country 146676,City,181,Country 146669,City,181,Country 146670,City,181,Country 146677,City,181,Country 146673,City,181,Country 146674,City,181,Country 146675,City,181,Country 146691,City,181,Country 146692,City,181,Country 146693,City,181,Country 146694,City,181,Country 146695,City,181,Country 146689,City,181,Country 146696,City,181,Country 146697,City,181,Country 146678,City,181,Country 146679,City,181,Country 146680,City,181,Country 146681,City,181,Country 146682,City,181,Country 146683,City,181,Country 146684,City,181,Country 146685,City,181,Country 146686,City,181,Country 146687,City,181,Country 146688,City,181,Country 146698,City,181,Country 146701,City,181,Country 146699,City,181,Country 146700,City,181,Country 89882,City,181,Country 89892,City,181,Country 90026,City,181,Country 90527,City,181,Country 90518,City,181,Country 90445,City,181,Country 90543,City,181,Country 90448,City,181,Country 90062,City,181,Country 90126,City,181,Country 90127,City,181,Country 90128,City,181,Country 90151,City,181,Country 90170,City,181,Country 90180,City,181,Country 90182,City,181,Country 90198,City,181,Country 90220,City,181,Country 90228,City,181,Country 90243,City,181,Country 90252,City,181,Country 90315,City,181,Country 90384,City,181,Country 90422,City,181,Country 93807,City,181,Country 90599,City,181,Country 90667,City,181,Country 90670,City,181,Country 90829,City,181,Country 90847,City,181,Country 90915,City,181,Country 91229,City,181,Country 91184,City,181,Country 91187,City,181,Country 90983,City,181,Country 90984,City,181,Country 91018,City,181,Country 91031,City,181,Country 91045,City,181,Country 91050,City,181,Country 91060,City,181,Country 91066,City,181,Country 91107,City,181,Country 91546,City,181,Country 91271,City,181,Country 91432,City,181,Country 91460,City,181,Country 91517,City,181,Country 91735,City,181,Country 91634,City,181,Country 91648,City,181,Country 91656,City,181,Country 91701,City,181,Country 91674,City,181,Country 91709,City,181,Country 91713,City,181,Country 91823,City,181,Country 91817,City,181,Country 91961,City,181,Country 91969,City,181,Country 91848,City,181,Country 91859,City,181,Country 91872,City,181,Country 91919,City,181,Country 91932,City,181,Country 91992,City,181,Country 92019,City,181,Country 92061,City,181,Country 92082,City,181,Country 92407,City,181,Country 92327,City,181,Country 92432,City,181,Country 92501,City,181,Country 92703,City,181,Country 92704,City,181,Country 92722,City,181,Country 92565,City,181,Country 92574,City,181,Country 92585,City,181,Country 92615,City,181,Country 92633,City,181,Country 92635,City,181,Country 92852,City,181,Country 92832,City,181,Country 92759,City,181,Country 92788,City,181,Country 92809,City,181,Country 93078,City,181,Country 92862,City,181,Country 93117,City,181,Country 92914,City,181,Country 93021,City,181,Country 93551,City,181,Country 93237,City,181,Country 93126,City,181,Country 93130,City,181,Country 93129,City,181,Country 93571,City,181,Country 93155,City,181,Country 93192,City,181,Country 93208,City,181,Country 93280,City,181,Country 93327,City,181,Country 93458,City,181,Country 93436,City,181,Country 93486,City,181,Country 93623,City,181,Country 93668,City,181,Country 93677,City,181,Country 93753,City,181,Country 93702,City,181,Country 93764,City,181,Country 93781,City,181,Country 94121,City,181,Country 93951,City,181,Country 93974,City,181,Country 93976,City,181,Country 93984,City,181,Country 93987,City,181,Country 94063,City,181,Country 94015,City,181,Country 94073,City,181,Country 94080,City,181,Country 94081,City,181,Country 94260,City,181,Country 94270,City,181,Country 94173,City,181,Country 94476,City,181,Country 94487,City,181,Country 94312,City,181,Country 94328,City,181,Country 94348,City,181,Country 94397,City,181,Country 94414,City,181,Country 94431,City,181,Country 94522,City,181,Country 94539,City,181,Country 94541,City,181,Country 94563,City,181,Country 94577,City,181,Country 94637,City,181,Country 94674,City,181,Country 94703,City,181,Country 94850,City,181,Country 94855,City,181,Country 95268,City,181,Country 94933,City,181,Country 95018,City,181,Country 95066,City,181,Country 95168,City,181,Country 95172,City,181,Country 95318,City,181,Country 95326,City,181,Country 95349,City,181,Country 95380,City,181,Country 95413,City,181,Country 95441,City,181,Country 95463,City,181,Country 95579,City,181,Country 95608,City,181,Country 95993,City,181,Country 95996,City,181,Country 95995,City,181,Country 96022,City,181,Country 95751,City,181,Country 95771,City,181,Country 95773,City,181,Country 95792,City,181,Country 95794,City,181,Country 95848,City,181,Country 95872,City,181,Country 95882,City,181,Country 95885,City,181,Country 95890,City,181,Country 95900,City,181,Country 96193,City,181,Country 96211,City,181,Country 96215,City,181,Country 96076,City,181,Country 96105,City,181,Country 96115,City,181,Country 96120,City,181,Country 96125,City,181,Country 96149,City,181,Country 96161,City,181,Country 105988,City,181,Country 96219,City,181,Country 96228,City,181,Country 106047,City,181,Country 96315,City,181,Country 96343,City,181,Country 96368,City,181,Country 96471,City,181,Country 96482,City,181,Country 97080,City,181,Country 96427,City,181,Country 96607,City,181,Country 106060,City,181,Country 96586,City,181,Country 106065,City,181,Country 106064,City,181,Country 106077,City,181,Country 97102,City,181,Country 106101,City,181,Country 97141,City,181,Country 106134,City,181,Country 106146,City,181,Country 106155,City,181,Country 96550,City,181,Country 96674,City,181,Country 96955,City,181,Country 96709,City,181,Country 96755,City,181,Country 96761,City,181,Country 96960,City,181,Country 96933,City,181,Country 96818,City,181,Country 97011,City,181,Country 89933,City,181,Country 89942,City,181,Country 90472,City,181,Country 90021,City,181,Country 90524,City,181,Country 90041,City,181,Country 90050,City,181,Country 90515,City,181,Country 90549,City,181,Country 90065,City,181,Country 90140,City,181,Country 90168,City,181,Country 90320,City,181,Country 90267,City,181,Country 90273,City,181,Country 90291,City,181,Country 90349,City,181,Country 90437,City,181,Country 93841,City,181,Country 93847,City,181,Country 90572,City,181,Country 93816,City,181,Country 90590,City,181,Country 90616,City,181,Country 90651,City,181,Country 90702,City,181,Country 90798,City,181,Country 90807,City,181,Country 90810,City,181,Country 91201,City,181,Country 90925,City,181,Country 91218,City,181,Country 91198,City,181,Country 91196,City,181,Country 91011,City,181,Country 91110,City,181,Country 91081,City,181,Country 91091,City,181,Country 91128,City,181,Country 91562,City,181,Country 91553,City,181,Country 91307,City,181,Country 91337,City,181,Country 91399,City,181,Country 91428,City,181,Country 91463,City,181,Country 91512,City,181,Country 91525,City,181,Country 91530,City,181,Country 91737,City,181,Country 91620,City,181,Country 91638,City,181,Country 91640,City,181,Country 91641,City,181,Country 91645,City,181,Country 91688,City,181,Country 91819,City,181,Country 91821,City,181,Country 91824,City,181,Country 91986,City,181,Country 91970,City,181,Country 91988,City,181,Country 91857,City,181,Country 91878,City,181,Country 91906,City,181,Country 91933,City,181,Country 91934,City,181,Country 91923,City,181,Country 91950,City,181,Country 92053,City,181,Country 92054,City,181,Country 92060,City,181,Country 92090,City,181,Country 92101,City,181,Country 92104,City,181,Country 92145,City,181,Country 92415,City,181,Country 92279,City,181,Country 92289,City,181,Country 92334,City,181,Country 92342,City,181,Country 92443,City,181,Country 92473,City,181,Country 92470,City,181,Country 92502,City,181,Country 92504,City,181,Country 92509,City,181,Country 92515,City,181,Country 92516,City,181,Country 92709,City,181,Country 92552,City,181,Country 92595,City,181,Country 92608,City,181,Country 92677,City,181,Country 92742,City,181,Country 92758,City,181,Country 92792,City,181,Country 92816,City,181,Country 93045,City,181,Country 93073,City,181,Country 92906,City,181,Country 92887,City,181,Country 92907,City,181,Country 93509,City,181,Country 92961,City,181,Country 93542,City,181,Country 92982,City,181,Country 92984,City,181,Country 93549,City,181,Country 92991,City,181,Country 92995,City,181,Country 93002,City,181,Country 93010,City,181,Country 93243,City,181,Country 93144,City,181,Country 93147,City,181,Country 93174,City,181,Country 93186,City,181,Country 93201,City,181,Country 93285,City,181,Country 93453,City,181,Country 93455,City,181,Country 93427,City,181,Country 93312,City,181,Country 93459,City,181,Country 93344,City,181,Country 93377,City,181,Country 93378,City,181,Country 93370,City,181,Country 93392,City,181,Country 93396,City,181,Country 93415,City,181,Country 93419,City,181,Country 93610,City,181,Country 93617,City,181,Country 93672,City,181,Country 93750,City,181,Country 93746,City,181,Country 93745,City,181,Country 93770,City,181,Country 93777,City,181,Country 94125,City,181,Country 93912,City,181,Country 93930,City,181,Country 93943,City,181,Country 93956,City,181,Country 93963,City,181,Country 93964,City,181,Country 93967,City,181,Country 93970,City,181,Country 94061,City,181,Country 94038,City,181,Country 94028,City,181,Country 94098,City,181,Country 94255,City,181,Country 94258,City,181,Country 94262,City,181,Country 94264,City,181,Country 94509,City,181,Country 94488,City,181,Country 94516,City,181,Country 94324,City,181,Country 94326,City,181,Country 94331,City,181,Country 94356,City,181,Country 94392,City,181,Country 94434,City,181,Country 94410,City,181,Country 94418,City,181,Country 94421,City,181,Country 94452,City,181,Country 94457,City,181,Country 94619,City,181,Country 94621,City,181,Country 94635,City,181,Country 94685,City,181,Country 94699,City,181,Country 94704,City,181,Country 94734,City,181,Country 94772,City,181,Country 95270,City,181,Country 95282,City,181,Country 94989,City,181,Country 95074,City,181,Country 95082,City,181,Country 95123,City,181,Country 95183,City,181,Country 95315,City,181,Country 95339,City,181,Country 95389,City,181,Country 95386,City,181,Country 95425,City,181,Country 95442,City,181,Country 95444,City,181,Country 95457,City,181,Country 95498,City,181,Country 95510,City,181,Country 95567,City,181,Country 95572,City,181,Country 95584,City,181,Country 95659,City,181,Country 95660,City,181,Country 95672,City,181,Country 95673,City,181,Country 96003,City,181,Country 95733,City,181,Country 95768,City,181,Country 95772,City,181,Country 95812,City,181,Country 95837,City,181,Country 95928,City,181,Country 95929,City,181,Country 95930,City,181,Country 95932,City,181,Country 95954,City,181,Country 96053,City,181,Country 96074,City,181,Country 96121,City,181,Country 96162,City,181,Country 96518,City,181,Country 96297,City,181,Country 96269,City,181,Country 96278,City,181,Country 96298,City,181,Country 97039,City,181,Country 96354,City,181,Country 96361,City,181,Country 96384,City,181,Country 96385,City,181,Country 97072,City,181,Country 96418,City,181,Country 96484,City,181,Country 97079,City,181,Country 96432,City,181,Country 96438,City,181,Country 96450,City,181,Country 96451,City,181,Country 96465,City,181,Country 96466,City,181,Country 96616,City,181,Country 106087,City,181,Country 106092,City,181,Country 106128,City,181,Country 106150,City,181,Country 106170,City,181,Country 96683,City,181,Country 96685,City,181,Country 96953,City,181,Country 96956,City,181,Country 96919,City,181,Country 96924,City,181,Country 96733,City,181,Country 96740,City,181,Country 96961,City,181,Country 96788,City,181,Country 96850,City,181,Country 96853,City,181,Country 96842,City,181,Country 96840,City,181,Country 96868,City,181,Country 96878,City,181,Country 96906,City,181,Country 96909,City,181,Country 89884,City,181,Country 89920,City,181,Country 89918,City,181,Country 89940,City,181,Country 89974,City,181,Country 89991,City,181,Country 89990,City,181,Country 90013,City,181,Country 90017,City,181,Country 90486,City,181,Country 90048,City,181,Country 90528,City,181,Country 90533,City,181,Country 90544,City,181,Country 90552,City,181,Country 90554,City,181,Country 90098,City,181,Country 90114,City,181,Country 90158,City,181,Country 90171,City,181,Country 90209,City,181,Country 90210,City,181,Country 90225,City,181,Country 90280,City,181,Country 90283,City,181,Country 90287,City,181,Country 90288,City,181,Country 90294,City,181,Country 90293,City,181,Country 90357,City,181,Country 90371,City,181,Country 90393,City,181,Country 90436,City,181,Country 93846,City,181,Country 93798,City,181,Country 93868,City,181,Country 93878,City,181,Country 90619,City,181,Country 90620,City,181,Country 90621,City,181,Country 90672,City,181,Country 90692,City,181,Country 90723,City,181,Country 90724,City,181,Country 90772,City,181,Country 90782,City,181,Country 90783,City,181,Country 90793,City,181,Country 90812,City,181,Country 90822,City,181,Country 90843,City,181,Country 90859,City,181,Country 90881,City,181,Country 90890,City,181,Country 90891,City,181,Country 90913,City,181,Country 90930,City,181,Country 91228,City,181,Country 91232,City,181,Country 91241,City,181,Country 91247,City,181,Country 90960,City,181,Country 90972,City,181,Country 91003,City,181,Country 91038,City,181,Country 91086,City,181,Country 91093,City,181,Country 91134,City,181,Country 91574,City,181,Country 91588,City,181,Country 91285,City,181,Country 91286,City,181,Country 91318,City,181,Country 91353,City,181,Country 91389,City,181,Country 91390,City,181,Country 91396,City,181,Country 91442,City,181,Country 91451,City,181,Country 91699,City,181,Country 91679,City,181,Country 91711,City,181,Country 91714,City,181,Country 91805,City,181,Country 91764,City,181,Country 91765,City,181,Country 91771,City,181,Country 91797,City,181,Country 91847,City,181,Country 91902,City,181,Country 91903,City,181,Country 91904,City,181,Country 91953,City,181,Country 91954,City,181,Country 92087,City,181,Country 92105,City,181,Country 92133,City,181,Country 92137,City,181,Country 92170,City,181,Country 92392,City,181,Country 92393,City,181,Country 92401,City,181,Country 92402,City,181,Country 92494,City,181,Country 92714,City,181,Country 92727,City,181,Country 92599,City,181,Country 92613,City,181,Country 92627,City,181,Country 92636,City,181,Country 92664,City,181,Country 92669,City,181,Country 92682,City,181,Country 92683,City,181,Country 92691,City,181,Country 92820,City,181,Country 92863,City,181,Country 93093,City,181,Country 93053,City,181,Country 92895,City,181,Country 92917,City,181,Country 93531,City,181,Country 93536,City,181,Country 93543,City,181,Country 92986,City,181,Country 93553,City,181,Country 93036,City,181,Country 93120,City,181,Country 93226,City,181,Country 93242,City,181,Country 93134,City,181,Country 93136,City,181,Country 93157,City,181,Country 93171,City,181,Country 93295,City,181,Country 93430,City,181,Country 93302,City,181,Country 93304,City,181,Country 93463,City,181,Country 93591,City,181,Country 93627,City,181,Country 93640,City,181,Country 93641,City,181,Country 93655,City,181,Country 93729,City,181,Country 94107,City,181,Country 93942,City,181,Country 93978,City,181,Country 94056,City,181,Country 94057,City,181,Country 94026,City,181,Country 94027,City,181,Country 94077,City,181,Country 94087,City,181,Country 94253,City,181,Country 94240,City,181,Country 94176,City,181,Country 94177,City,181,Country 94186,City,181,Country 94222,City,181,Country 94223,City,181,Country 94497,City,181,Country 94295,City,181,Country 94307,City,181,Country 94335,City,181,Country 94385,City,181,Country 94387,City,181,Country 94388,City,181,Country 94390,City,181,Country 94399,City,181,Country 94426,City,181,Country 94450,City,181,Country 94462,City,181,Country 94463,City,181,Country 94555,City,181,Country 94670,City,181,Country 94681,City,181,Country 94712,City,181,Country 94752,City,181,Country 94760,City,181,Country 94797,City,181,Country 94807,City,181,Country 94816,City,181,Country 94831,City,181,Country 94869,City,181,Country 94905,City,181,Country 95244,City,181,Country 95245,City,181,Country 95257,City,181,Country 95258,City,181,Country 95272,City,181,Country 94957,City,181,Country 95008,City,181,Country 95017,City,181,Country 95023,City,181,Country 95029,City,181,Country 95034,City,181,Country 95044,City,181,Country 95131,City,181,Country 95170,City,181,Country 95306,City,181,Country 95309,City,181,Country 95392,City,181,Country 95415,City,181,Country 95423,City,181,Country 95428,City,181,Country 95452,City,181,Country 95481,City,181,Country 95465,City,181,Country 95470,City,181,Country 95479,City,181,Country 95495,City,181,Country 95543,City,181,Country 95568,City,181,Country 95588,City,181,Country 95590,City,181,Country 95613,City,181,Country 95622,City,181,Country 95679,City,181,Country 96004,City,181,Country 95698,City,181,Country 95705,City,181,Country 95713,City,181,Country 96029,City,181,Country 95742,City,181,Country 95781,City,181,Country 95791,City,181,Country 95807,City,181,Country 95814,City,181,Country 95815,City,181,Country 95819,City,181,Country 95823,City,181,Country 95844,City,181,Country 95845,City,181,Country 95864,City,181,Country 95873,City,181,Country 95870,City,181,Country 95884,City,181,Country 95887,City,181,Country 95888,City,181,Country 95915,City,181,Country 95925,City,181,Country 95926,City,181,Country 95931,City,181,Country 95969,City,181,Country 95962,City,181,Country 95963,City,181,Country 95973,City,181,Country 95974,City,181,Country 96038,City,181,Country 96165,City,181,Country 96112,City,181,Country 96231,City,181,Country 106008,City,181,Country 96530,City,181,Country 96275,City,181,Country 96280,City,181,Country 96288,City,181,Country 96318,City,181,Country 96306,City,181,Country 96350,City,181,Country 97128,City,181,Country 97060,City,181,Country 96381,City,181,Country 96380,City,181,Country 97065,City,181,Country 97073,City,181,Country 96423,City,181,Country 97083,City,181,Country 96436,City,181,Country 96452,City,181,Country 96505,City,181,Country 106051,City,181,Country 96591,City,181,Country 96611,City,181,Country 96618,City,181,Country 96614,City,181,Country 106073,City,181,Country 106078,City,181,Country 106090,City,181,Country 106104,City,181,Country 97139,City,181,Country 106126,City,181,Country 106163,City,181,Country 106169,City,181,Country 96679,City,181,Country 96681,City,181,Country 96700,City,181,Country 96703,City,181,Country 96925,City,181,Country 96720,City,181,Country 96718,City,181,Country 96724,City,181,Country 96760,City,181,Country 96965,City,181,Country 96970,City,181,Country 96971,City,181,Country 96774,City,181,Country 89893,City,181,Country 89900,City,181,Country 89936,City,181,Country 90468,City,181,Country 90502,City,181,Country 90536,City,181,Country 90093,City,181,Country 90172,City,181,Country 90177,City,181,Country 90199,City,181,Country 90356,City,181,Country 90567,City,181,Country 90576,City,181,Country 90609,City,181,Country 90610,City,181,Country 90655,City,181,Country 90665,City,181,Country 90762,City,181,Country 90832,City,181,Country 90856,City,181,Country 91200,City,181,Country 91211,City,181,Country 91234,City,181,Country 90957,City,181,Country 91012,City,181,Country 91016,City,181,Country 91032,City,181,Country 91133,City,181,Country 91256,City,181,Country 91258,City,181,Country 91277,City,181,Country 91313,City,181,Country 91378,City,181,Country 91473,City,181,Country 91487,City,181,Country 91488,City,181,Country 91506,City,181,Country 91501,City,181,Country 91538,City,181,Country 91639,City,181,Country 91678,City,181,Country 91761,City,181,Country 91962,City,181,Country 91964,City,181,Country 91990,City,181,Country 91997,City,181,Country 91999,City,181,Country 92021,City,181,Country 92069,City,181,Country 92088,City,181,Country 92156,City,181,Country 92186,City,181,Country 92385,City,181,Country 92240,City,181,Country 93586,City,181,Country 92304,City,181,Country 92464,City,181,Country 92459,City,181,Country 92549,City,181,Country 92598,City,181,Country 92625,City,181,Country 92785,City,181,Country 92814,City,181,Country 93044,City,181,Country 93101,City,181,Country 93497,City,181,Country 93057,City,181,Country 93566,City,181,Country 93522,City,181,Country 92975,City,181,Country 93039,City,181,Country 93191,City,181,Country 93297,City,181,Country 93448,City,181,Country 93470,City,181,Country 93478,City,181,Country 93689,City,181,Country 93707,City,181,Country 93709,City,181,Country 93735,City,181,Country 93725,City,181,Country 93789,City,181,Country 93911,City,181,Country 93924,City,181,Country 93940,City,181,Country 93959,City,181,Country 94024,City,181,Country 94169,City,181,Country 94478,City,181,Country 94479,City,181,Country 94482,City,181,Country 94355,City,181,Country 94519,City,181,Country 94531,City,181,Country 94534,City,181,Country 94565,City,181,Country 94655,City,181,Country 94682,City,181,Country 94730,City,181,Country 94785,City,181,Country 94835,City,181,Country 95236,City,181,Country 94909,City,181,Country 94925,City,181,Country 94931,City,181,Country 94961,City,181,Country 95026,City,181,Country 95197,City,181,Country 95373,City,181,Country 95366,City,181,Country 95640,City,181,Country 95629,City,181,Country 95719,City,181,Country 95729,City,181,Country 95821,City,181,Country 95868,City,181,Country 95986,City,181,Country 96109,City,181,Country 96157,City,181,Country 96516,City,181,Country 106024,City,181,Country 97029,City,181,Country 96534,City,181,Country 97098,City,181,Country 97124,City,181,Country 97052,City,181,Country 96408,City,181,Country 96474,City,181,Country 96508,City,181,Country 106098,City,181,Country 106154,City,181,Country 96706,City,181,Country 96949,City,181,Country 96982,City,181,Country 96981,City,181,Country 97019,City,181,Country 96994,City,181,Country 89878,City,181,Country 89901,City,181,Country 89957,City,181,Country 89967,City,181,Country 89983,City,181,Country 90020,City,181,Country 90458,City,181,Country 90551,City,181,Country 90092,City,181,Country 90116,City,181,Country 90154,City,181,Country 90190,City,181,Country 90204,City,181,Country 90244,City,181,Country 93840,City,181,Country 93855,City,181,Country 93853,City,181,Country 93858,City,181,Country 93872,City,181,Country 90580,City,181,Country 93882,City,181,Country 90608,City,181,Country 90641,City,181,Country 90700,City,181,Country 90752,City,181,Country 90820,City,181,Country 90833,City,181,Country 90869,City,181,Country 90875,City,181,Country 91195,City,181,Country 91245,City,181,Country 90956,City,181,Country 90974,City,181,Country 91000,City,181,Country 91025,City,181,Country 91061,City,181,Country 91559,City,181,Country 91581,City,181,Country 91563,City,181,Country 91583,City,181,Country 91596,City,181,Country 91276,City,181,Country 91298,City,181,Country 91371,City,181,Country 91484,City,181,Country 91510,City,181,Country 91523,City,181,Country 91631,City,181,Country 91667,City,181,Country 91776,City,181,Country 91850,City,181,Country 91989,City,181,Country 92005,City,181,Country 92012,City,181,Country 92141,City,181,Country 92250,City,181,Country 92268,City,181,Country 92316,City,181,Country 92483,City,181,Country 92505,City,181,Country 92713,City,181,Country 92562,City,181,Country 92586,City,181,Country 92590,City,181,Country 92648,City,181,Country 92663,City,181,Country 92741,City,181,Country 93088,City,181,Country 92870,City,181,Country 92872,City,181,Country 93113,City,181,Country 92970,City,181,Country 93034,City,181,Country 93127,City,181,Country 93231,City,181,Country 93140,City,181,Country 93158,City,181,Country 93218,City,181,Country 93217,City,181,Country 93286,City,181,Country 93329,City,181,Country 93331,City,181,Country 93347,City,181,Country 93357,City,181,Country 93703,City,181,Country 93743,City,181,Country 93767,City,181,Country 93893,City,181,Country 93906,City,181,Country 93944,City,181,Country 93946,City,181,Country 93994,City,181,Country 94007,City,181,Country 94054,City,181,Country 94078,City,181,Country 94196,City,181,Country 94315,City,181,Country 94314,City,181,Country 94518,City,181,Country 94542,City,181,Country 94554,City,181,Country 94586,City,181,Country 94672,City,181,Country 94766,City,181,Country 94813,City,181,Country 94840,City,181,Country 95233,City,181,Country 94944,City,181,Country 94970,City,181,Country 95049,City,181,Country 95050,City,181,Country 95060,City,181,Country 95125,City,181,Country 95178,City,181,Country 95317,City,181,Country 95381,City,181,Country 95409,City,181,Country 95636,City,181,Country 95641,City,181,Country 95549,City,181,Country 95650,City,181,Country 95634,City,181,Country 96030,City,181,Country 95747,City,181,Country 95795,City,181,Country 95805,City,181,Country 95869,City,181,Country 95903,City,181,Country 95924,City,181,Country 95935,City,181,Country 96050,City,181,Country 106002,City,181,Country 96239,City,181,Country 96241,City,181,Country 106036,City,181,Country 106041,City,181,Country 96256,City,181,Country 106042,City,181,Country 96398,City,181,Country 96470,City,181,Country 96503,City,181,Country 106062,City,181,Country 96597,City,181,Country 96598,City,181,Country 96630,City,181,Country 106083,City,181,Country 106105,City,181,Country 106157,City,181,Country 96551,City,181,Country 96569,City,181,Country 96568,City,181,Country 96687,City,181,Country 96752,City,181,Country 96763,City,181,Country 96770,City,181,Country 96795,City,181,Country 96816,City,181,Country 89903,City,181,Country 89898,City,181,Country 89945,City,181,Country 89934,City,181,Country 89946,City,181,Country 89973,City,181,Country 89998,City,181,Country 89999,City,181,Country 90016,City,181,Country 90008,City,181,Country 90011,City,181,Country 90447,City,181,Country 90072,City,181,Country 90130,City,181,Country 90166,City,181,Country 90202,City,181,Country 90207,City,181,Country 90322,City,181,Country 90261,City,181,Country 90275,City,181,Country 90314,City,181,Country 93819,City,181,Country 93821,City,181,Country 90680,City,181,Country 90737,City,181,Country 90854,City,181,Country 90862,City,181,Country 90880,City,181,Country 90897,City,181,Country 90912,City,181,Country 90908,City,181,Country 91186,City,181,Country 90941,City,181,Country 90985,City,181,Country 91009,City,181,Country 91036,City,181,Country 91112,City,181,Country 91083,City,181,Country 91105,City,181,Country 91556,City,181,Country 91557,City,181,Country 91323,City,181,Country 91499,City,181,Country 91729,City,181,Country 91951,City,181,Country 92006,City,181,Country 92051,City,181,Country 92125,City,181,Country 92139,City,181,Country 92181,City,181,Country 92191,City,181,Country 92244,City,181,Country 92260,City,181,Country 92269,City,181,Country 92284,City,181,Country 92346,City,181,Country 92451,City,181,Country 92508,City,181,Country 92725,City,181,Country 92631,City,181,Country 92657,City,181,Country 92661,City,181,Country 92735,City,181,Country 92855,City,181,Country 92826,City,181,Country 92796,City,181,Country 92860,City,181,Country 93501,City,181,Country 93502,City,181,Country 93505,City,181,Country 92950,City,181,Country 93562,City,181,Country 93563,City,181,Country 93228,City,181,Country 93154,City,181,Country 93215,City,181,Country 93328,City,181,Country 93424,City,181,Country 93609,City,181,Country 93722,City,181,Country 94110,City,181,Country 94084,City,181,Country 94459,City,181,Country 94546,City,181,Country 94616,City,181,Country 94649,City,181,Country 94739,City,181,Country 94763,City,181,Country 94828,City,181,Country 94843,City,181,Country 95256,City,181,Country 94932,City,181,Country 95225,City,181,Country 94943,City,181,Country 94956,City,181,Country 94971,City,181,Country 94972,City,181,Country 94991,City,181,Country 95089,City,181,Country 95155,City,181,Country 95181,City,181,Country 95353,City,181,Country 95355,City,181,Country 95396,City,181,Country 95447,City,181,Country 95451,City,181,Country 95494,City,181,Country 95497,City,181,Country 95511,City,181,Country 95540,City,181,Country 95557,City,181,Country 95599,City,181,Country 95610,City,181,Country 95658,City,181,Country 96027,City,181,Country 95880,City,181,Country 95916,City,181,Country 95922,City,181,Country 96044,City,181,Country 96218,City,181,Country 96175,City,181,Country 96126,City,181,Country 96151,City,181,Country 96226,City,181,Country 106017,City,181,Country 97115,City,181,Country 97041,City,181,Country 97033,City,181,Country 97036,City,181,Country 96332,City,181,Country 96366,City,181,Country 97094,City,181,Country 97095,City,181,Country 96602,City,181,Country 96601,City,181,Country 96593,City,181,Country 106100,City,181,Country 96566,City,181,Country 96762,City,181,Country 96799,City,181,Country 96916,City,181,Country 89888,City,181,Country 89978,City,181,Country 89986,City,181,Country 89989,City,181,Country 90482,City,181,Country 90028,City,181,Country 90499,City,181,Country 90520,City,181,Country 90507,City,181,Country 90534,City,181,Country 90068,City,181,Country 90100,City,181,Country 90135,City,181,Country 90153,City,181,Country 90184,City,181,Country 90191,City,181,Country 90230,City,181,Country 90240,City,181,Country 90247,City,181,Country 90333,City,181,Country 90286,City,181,Country 90305,City,181,Country 90308,City,181,Country 90370,City,181,Country 90379,City,181,Country 90411,City,181,Country 90419,City,181,Country 90420,City,181,Country 90559,City,181,Country 90561,City,181,Country 90563,City,181,Country 93842,City,181,Country 93801,City,181,Country 90570,City,181,Country 90569,City,181,Country 93813,City,181,Country 90716,City,181,Country 90731,City,181,Country 90768,City,181,Country 90792,City,181,Country 93588,City,181,Country 90824,City,181,Country 90882,City,181,Country 90916,City,181,Country 91222,City,181,Country 91212,City,181,Country 90962,City,181,Country 90988,City,181,Country 91026,City,181,Country 91051,City,181,Country 91058,City,181,Country 91064,City,181,Country 91090,City,181,Country 91101,City,181,Country 91164,City,181,Country 91171,City,181,Country 91252,City,181,Country 91253,City,181,Country 91257,City,181,Country 91551,City,181,Country 91347,City,181,Country 91358,City,181,Country 91410,City,181,Country 91443,City,181,Country 91476,City,181,Country 91509,City,181,Country 91744,City,181,Country 91654,City,181,Country 91661,City,181,Country 91662,City,181,Country 91663,City,181,Country 91683,City,181,Country 91694,City,181,Country 91715,City,181,Country 91804,City,181,Country 91809,City,181,Country 91779,City,181,Country 91795,City,181,Country 91796,City,181,Country 91785,City,181,Country 91802,City,181,Country 91982,City,181,Country 91942,City,181,Country 91944,City,181,Country 92042,City,181,Country 92034,City,181,Country 92022,City,181,Country 92023,City,181,Country 92024,City,181,Country 92050,City,181,Country 92056,City,181,Country 92072,City,181,Country 92091,City,181,Country 92108,City,181,Country 92398,City,181,Country 92370,City,181,Country 92243,City,181,Country 92307,City,181,Country 92312,City,181,Country 92324,City,181,Country 92328,City,181,Country 92363,City,181,Country 92517,City,181,Country 92718,City,181,Country 92533,City,181,Country 92721,City,181,Country 92723,City,181,Country 92632,City,181,Country 92641,City,181,Country 92645,City,181,Country 92672,City,181,Country 92701,City,181,Country 92846,City,181,Country 92828,City,181,Country 92859,City,181,Country 93500,City,181,Country 92881,City,181,Country 92883,City,181,Country 93510,City,181,Country 92936,City,181,Country 92947,City,181,Country 93001,City,181,Country 93005,City,181,Country 93011,City,181,Country 93026,City,181,Country 93164,City,181,Country 93254,City,181,Country 93259,City,181,Country 93292,City,181,Country 93316,City,181,Country 93332,City,181,Country 93336,City,181,Country 93343,City,181,Country 93350,City,181,Country 93402,City,181,Country 93404,City,181,Country 93421,City,181,Country 93472,City,181,Country 93481,City,181,Country 93639,City,181,Country 93645,City,181,Country 93698,City,181,Country 93670,City,181,Country 93740,City,181,Country 94130,City,181,Country 93918,City,181,Country 93982,City,181,Country 93985,City,181,Country 93986,City,181,Country 93997,City,181,Country 93998,City,181,Country 93999,City,181,Country 94044,City,181,Country 94050,City,181,Country 94085,City,181,Country 94092,City,181,Country 94149,City,181,Country 94259,City,181,Country 94235,City,181,Country 94236,City,181,Country 94200,City,181,Country 94201,City,181,Country 94220,City,181,Country 94221,City,181,Country 94209,City,181,Country 94229,City,181,Country 94501,City,181,Country 94505,City,181,Country 94443,City,181,Country 94445,City,181,Country 94448,City,181,Country 94454,City,181,Country 94458,City,181,Country 94604,City,181,Country 94592,City,181,Country 94532,City,181,Country 94566,City,181,Country 94567,City,181,Country 94568,City,181,Country 94576,City,181,Country 94582,City,181,Country 94615,City,181,Country 94625,City,181,Country 94658,City,181,Country 94684,City,181,Country 94713,City,181,Country 94893,City,181,Country 94811,City,181,Country 95253,City,181,Country 95262,City,181,Country 94930,City,181,Country 95278,City,181,Country 95294,City,181,Country 94990,City,181,Country 94986,City,181,Country 95005,City,181,Country 95020,City,181,Country 95031,City,181,Country 95039,City,181,Country 95042,City,181,Country 95062,City,181,Country 95067,City,181,Country 95133,City,181,Country 95143,City,181,Country 95176,City,181,Country 95184,City,181,Country 95196,City,181,Country 95209,City,181,Country 95303,City,181,Country 95312,City,181,Country 95320,City,181,Country 95440,City,181,Country 95472,City,181,Country 95489,City,181,Country 95509,City,181,Country 95519,City,181,Country 95525,City,181,Country 95539,City,181,Country 95542,City,181,Country 95583,City,181,Country 95589,City,181,Country 95592,City,181,Country 95616,City,181,Country 95675,City,181,Country 96015,City,181,Country 95703,City,181,Country 95997,City,181,Country 96020,City,181,Country 96021,City,181,Country 96023,City,181,Country 95835,City,181,Country 95817,City,181,Country 95833,City,181,Country 95878,City,181,Country 95881,City,181,Country 95892,City,181,Country 95899,City,181,Country 95945,City,181,Country 95946,City,181,Country 95958,City,181,Country 95990,City,181,Country 96203,City,181,Country 96201,City,181,Country 96177,City,181,Country 96135,City,181,Country 96119,City,181,Country 96224,City,181,Country 96229,City,181,Country 97031,City,181,Country 96253,City,181,Country 96264,City,181,Country 97119,City,181,Country 97120,City,181,Country 96347,City,181,Country 96358,City,181,Country 96362,City,181,Country 96404,City,181,Country 96406,City,181,Country 96421,City,181,Country 96447,City,181,Country 96462,City,181,Country 96457,City,181,Country 96467,City,181,Country 96488,City,181,Country 96490,City,181,Country 97138,City,181,Country 106116,City,181,Country 96638,City,181,Country 96644,City,181,Country 96697,City,181,Country 96741,City,181,Country 96771,City,181,Country 96969,City,181,Country 96777,City,181,Country 96778,City,181,Country 96787,City,181,Country 96800,City,181,Country 96801,City,181,Country 96875,City,181,Country 96885,City,181,Country 96888,City,181,Country 96911,City,181,Country 96984,City,181,Country 97006,City,181,Country 89925,City,181,Country 90473,City,181,Country 90478,City,181,Country 90023,City,181,Country 90485,City,181,Country 90037,City,181,Country 90529,City,181,Country 90466,City,181,Country 90078,City,181,Country 90082,City,181,Country 90121,City,181,Country 90157,City,181,Country 90189,City,181,Country 90246,City,181,Country 90263,City,181,Country 90318,City,181,Country 90319,City,181,Country 90398,City,181,Country 90400,City,181,Country 90431,City,181,Country 93837,City,181,Country 93843,City,181,Country 93844,City,181,Country 90564,City,181,Country 90632,City,181,Country 90643,City,181,Country 90738,City,181,Country 90754,City,181,Country 91202,City,181,Country 90921,City,181,Country 90946,City,181,Country 90979,City,181,Country 91002,City,181,Country 91024,City,181,Country 91063,City,181,Country 91074,City,181,Country 91109,City,181,Country 91156,City,181,Country 91157,City,181,Country 91179,City,181,Country 91573,City,181,Country 91560,City,181,Country 91561,City,181,Country 91300,City,181,Country 91351,City,181,Country 91373,City,181,Country 91415,City,181,Country 91450,City,181,Country 91513,City,181,Country 91514,City,181,Country 91491,City,181,Country 91624,City,181,Country 91642,City,181,Country 91669,City,181,Country 91682,City,181,Country 91702,City,181,Country 91703,City,181,Country 91808,City,181,Country 91793,City,181,Country 91783,City,181,Country 91803,City,181,Country 91984,City,181,Country 91911,City,181,Country 92093,City,181,Country 92106,City,181,Country 92172,City,181,Country 92180,City,181,Country 92200,City,181,Country 92390,City,181,Country 92396,City,181,Country 92372,City,181,Country 92248,City,181,Country 92257,City,181,Country 92350,City,181,Country 92426,City,181,Country 92466,City,181,Country 92427,City,181,Country 92437,City,181,Country 92497,City,181,Country 92506,City,181,Country 92547,City,181,Country 92573,City,181,Country 92581,City,181,Country 92597,City,181,Country 92601,City,181,Country 92618,City,181,Country 92660,City,181,Country 92698,City,181,Country 92699,City,181,Country 92830,City,181,Country 92848,City,181,Country 93084,City,181,Country 92861,City,181,Country 92864,City,181,Country 93071,City,181,Country 92897,City,181,Country 92899,City,181,Country 92908,City,181,Country 92918,City,181,Country 92922,City,181,Country 92930,City,181,Country 92934,City,181,Country 92959,City,181,Country 92966,City,181,Country 92989,City,181,Country 93000,City,181,Country 93029,City,181,Country 93121,City,181,Country 93248,City,181,Country 93249,City,181,Country 93575,City,181,Country 93188,City,181,Country 93195,City,181,Country 93196,City,181,Country 93253,City,181,Country 93445,City,181,Country 93340,City,181,Country 93359,City,181,Country 93371,City,181,Country 93482,City,181,Country 93596,City,181,Country 93653,City,181,Country 93747,City,181,Country 93748,City,181,Country 93712,City,181,Country 93759,City,181,Country 93921,City,181,Country 93935,City,181,Country 93950,City,181,Country 93965,City,181,Country 94009,City,181,Country 94034,City,181,Country 94035,City,181,Country 94060,City,181,Country 94062,City,181,Country 94040,City,181,Country 94072,City,181,Country 94237,City,181,Country 94218,City,181,Country 94207,City,181,Country 94233,City,181,Country 94507,City,181,Country 94512,City,181,Country 94401,City,181,Country 94473,City,181,Country 94691,City,181,Country 94711,City,181,Country 94888,City,181,Country 94808,City,181,Country 94826,City,181,Country 94860,City,181,Country 95239,City,181,Country 95251,City,181,Country 95221,City,181,Country 94937,City,181,Country 94953,City,181,Country 94954,City,181,Country 94960,City,181,Country 95065,City,181,Country 95096,City,181,Country 95108,City,181,Country 95173,City,181,Country 95190,City,181,Country 95302,City,181,Country 95375,City,181,Country 95378,City,181,Country 95304,City,181,Country 95327,City,181,Country 95429,City,181,Country 95432,City,181,Country 95618,City,181,Country 95623,City,181,Country 95653,City,181,Country 95654,City,181,Country 95727,City,181,Country 95734,City,181,Country 95770,City,181,Country 95789,City,181,Country 95808,City,181,Country 95820,City,181,Country 95827,City,181,Country 95853,City,181,Country 95860,City,181,Country 95917,City,181,Country 95921,City,181,Country 95965,City,181,Country 95983,City,181,Country 95989,City,181,Country 96198,City,181,Country 96207,City,181,Country 96141,City,181,Country 105995,City,181,Country 96227,City,181,Country 96230,City,181,Country 105983,City,181,Country 96284,City,181,Country 96290,City,181,Country 96299,City,181,Country 96320,City,181,Country 96321,City,181,Country 96327,City,181,Country 96339,City,181,Country 96344,City,181,Country 96379,City,181,Country 96392,City,181,Country 96394,City,181,Country 96420,City,181,Country 96428,City,181,Country 96446,City,181,Country 96495,City,181,Country 106052,City,181,Country 106053,City,181,Country 96594,City,181,Country 96623,City,181,Country 96624,City,181,Country 106070,City,181,Country 106079,City,181,Country 97107,City,181,Country 106148,City,181,Country 106160,City,181,Country 106161,City,181,Country 106167,City,181,Country 96565,City,181,Country 96636,City,181,Country 96637,City,181,Country 96639,City,181,Country 96716,City,181,Country 96746,City,181,Country 96945,City,181,Country 96946,City,181,Country 96781,City,181,Country 96807,City,181,Country 96822,City,181,Country 96841,City,181,Country 97007,City,181,Country 96995,City,181,Country 96996,City,181,Country 90024,City,181,Country 90044,City,181,Country 90055,City,181,Country 90056,City,181,Country 90452,City,181,Country 90074,City,181,Country 90077,City,181,Country 90089,City,181,Country 90101,City,181,Country 90120,City,181,Country 90137,City,181,Country 90141,City,181,Country 90186,City,181,Country 90212,City,181,Country 90297,City,181,Country 90361,City,181,Country 90402,City,181,Country 90432,City,181,Country 90574,City,181,Country 93870,City,181,Country 90613,City,181,Country 90615,City,181,Country 90652,City,181,Country 90659,City,181,Country 90690,City,181,Country 90693,City,181,Country 90800,City,181,Country 90814,City,181,Country 90926,City,181,Country 90934,City,181,Country 90935,City,181,Country 91189,City,181,Country 90943,City,181,Country 90945,City,181,Country 90953,City,181,Country 90978,City,181,Country 90990,City,181,Country 90993,City,181,Country 91021,City,181,Country 91040,City,181,Country 91095,City,181,Country 91135,City,181,Country 91590,City,181,Country 91280,City,181,Country 91282,City,181,Country 91308,City,181,Country 91310,City,181,Country 91409,City,181,Country 91478,City,181,Country 91494,City,181,Country 91528,City,181,Country 91604,City,181,Country 91614,City,181,Country 91707,City,181,Country 91708,City,181,Country 91710,City,181,Country 91717,City,181,Country 91811,City,181,Country 91760,City,181,Country 91775,City,181,Country 91834,City,181,Country 91854,City,181,Country 91863,City,181,Country 91864,City,181,Country 91865,City,181,Country 91866,City,181,Country 91871,City,181,Country 91875,City,181,Country 91908,City,181,Country 92062,City,181,Country 92114,City,181,Country 92116,City,181,Country 92150,City,181,Country 92163,City,181,Country 92178,City,181,Country 92185,City,181,Country 92404,City,181,Country 92242,City,181,Country 92249,City,181,Country 92331,City,181,Country 92348,City,181,Country 92460,City,181,Country 92450,City,181,Country 92488,City,181,Country 92514,City,181,Country 92521,City,181,Country 92715,City,181,Country 92541,City,181,Country 92545,City,181,Country 92548,City,181,Country 92558,City,181,Country 92579,City,181,Country 92589,City,181,Country 92734,City,181,Country 92766,City,181,Country 93086,City,181,Country 92856,City,181,Country 93495,City,181,Country 93048,City,181,Country 93498,City,181,Country 93058,City,181,Country 93064,City,181,Country 92874,City,181,Country 92879,City,181,Country 92911,City,181,Country 93557,City,181,Country 93142,City,181,Country 93169,City,181,Country 93170,City,181,Country 93179,City,181,Country 93182,City,181,Country 93190,City,181,Country 93256,City,181,Country 93457,City,181,Country 93334,City,181,Country 93351,City,181,Country 93401,City,181,Country 93693,City,181,Country 93716,City,181,Country 93773,City,181,Country 93895,City,181,Country 93896,City,181,Country 93920,City,181,Country 93927,City,181,Country 94071,City,181,Country 94070,City,181,Country 94075,City,181,Country 94090,City,181,Country 94251,City,181,Country 94244,City,181,Country 94163,City,181,Country 94194,City,181,Country 94513,City,181,Country 94284,City,181,Country 94287,City,181,Country 94320,City,181,Country 94337,City,181,Country 94339,City,181,Country 94340,City,181,Country 94341,City,181,Country 94342,City,181,Country 94347,City,181,Country 94351,City,181,Country 94395,City,181,Country 94398,City,181,Country 94543,City,181,Country 94639,City,181,Country 94640,City,181,Country 94652,City,181,Country 94701,City,181,Country 94722,City,181,Country 94724,City,181,Country 94738,City,181,Country 94777,City,181,Country 94794,City,181,Country 94824,City,181,Country 94834,City,181,Country 94846,City,181,Country 95263,City,181,Country 94929,City,181,Country 94941,City,181,Country 95070,City,181,Country 95090,City,181,Country 95095,City,181,Country 95151,City,181,Country 95187,City,181,Country 95368,City,181,Country 95331,City,181,Country 95352,City,181,Country 95418,City,181,Country 95478,City,181,Country 95493,City,181,Country 95508,City,181,Country 95521,City,181,Country 95527,City,181,Country 95536,City,181,Country 95577,City,181,Country 95596,City,181,Country 95670,City,181,Country 95681,City,181,Country 96008,City,181,Country 95716,City,181,Country 95724,City,181,Country 95728,City,181,Country 95743,City,181,Country 95783,City,181,Country 95804,City,181,Country 96184,City,181,Country 96043,City,181,Country 96067,City,181,Country 96084,City,181,Country 106000,City,181,Country 96221,City,181,Country 96220,City,181,Country 97027,City,181,Country 96522,City,181,Country 97030,City,181,Country 96535,City,181,Country 96540,City,181,Country 96545,City,181,Country 96245,City,181,Country 96252,City,181,Country 96285,City,181,Country 96305,City,181,Country 97089,City,181,Country 106085,City,181,Country 106102,City,181,Country 106120,City,181,Country 106124,City,181,Country 106137,City,181,Country 106140,City,181,Country 106151,City,181,Country 96642,City,181,Country 96684,City,181,Country 96692,City,181,Country 96958,City,181,Country 96773,City,181,Country 96802,City,181,Country 96883,City,181,Country 89897,City,181,Country 90018,City,181,Country 90027,City,181,Country 90081,City,181,Country 90124,City,181,Country 90557,City,181,Country 90579,City,181,Country 90583,City,181,Country 90588,City,181,Country 90600,City,181,Country 90601,City,181,Country 90604,City,181,Country 90628,City,181,Country 90666,City,181,Country 90743,City,181,Country 90917,City,181,Country 90948,City,181,Country 90981,City,181,Country 91250,City,181,Country 91261,City,181,Country 91263,City,181,Country 91272,City,181,Country 91274,City,181,Country 91291,City,181,Country 91314,City,181,Country 91365,City,181,Country 91504,City,181,Country 91732,City,181,Country 91664,City,181,Country 91782,City,181,Country 91915,City,181,Country 91918,City,181,Country 91991,City,181,Country 92018,City,181,Country 92048,City,181,Country 92107,City,181,Country 92122,City,181,Country 92135,City,181,Country 92208,City,181,Country 92229,City,181,Country 92232,City,181,Country 92271,City,181,Country 92275,City,181,Country 92362,City,181,Country 92424,City,181,Country 92446,City,181,Country 92457,City,181,Country 92519,City,181,Country 92537,City,181,Country 92542,City,181,Country 92875,City,181,Country 92924,City,181,Country 92949,City,181,Country 92965,City,181,Country 92976,City,181,Country 92988,City,181,Country 93178,City,181,Country 93211,City,181,Country 93451,City,181,Country 93319,City,181,Country 93326,City,181,Country 93733,City,181,Country 94116,City,181,Country 94000,City,181,Country 94142,City,181,Country 94204,City,181,Country 94283,City,181,Country 94409,City,181,Country 94413,City,181,Country 94521,City,181,Country 94562,City,181,Country 94611,City,181,Country 94629,City,181,Country 94688,City,181,Country 94708,City,181,Country 94735,City,181,Country 94755,City,181,Country 94857,City,181,Country 94876,City,181,Country 95229,City,181,Country 94906,City,181,Country 94911,City,181,Country 94912,City,181,Country 94975,City,181,Country 94982,City,181,Country 95007,City,181,Country 95188,City,181,Country 95208,City,181,Country 95300,City,181,Country 95335,City,181,Country 95343,City,181,Country 95363,City,181,Country 95453,City,181,Country 95535,City,181,Country 95545,City,181,Country 95594,City,181,Country 95677,City,181,Country 95711,City,181,Country 95720,City,181,Country 96037,City,181,Country 106010,City,181,Country 96246,City,181,Country 96328,City,181,Country 96364,City,181,Country 96365,City,181,Country 96391,City,181,Country 96409,City,181,Country 96426,City,181,Country 96499,City,181,Country 106135,City,181,Country 106147,City,181,Country 106173,City,181,Country 96556,City,181,Country 96557,City,181,Country 96951,City,181,Country 96744,City,181,Country 96759,City,181,Country 96986,City,181,Country 89944,City,181,Country 89951,City,181,Country 90470,City,181,Country 90471,City,181,Country 90490,City,181,Country 90492,City,181,Country 90505,City,181,Country 90540,City,181,Country 90070,City,181,Country 90095,City,181,Country 90110,City,181,Country 90150,City,181,Country 90181,City,181,Country 90206,City,181,Country 90303,City,181,Country 90380,City,181,Country 90399,City,181,Country 90408,City,181,Country 93790,City,181,Country 93835,City,181,Country 93836,City,181,Country 90636,City,181,Country 90653,City,181,Country 90861,City,181,Country 90865,City,181,Country 91239,City,181,Country 90969,City,181,Country 91035,City,181,Country 91147,City,181,Country 91155,City,181,Country 91163,City,181,Country 91539,City,181,Country 91294,City,181,Country 91419,City,181,Country 91456,City,181,Country 91492,City,181,Country 91733,City,181,Country 91742,City,181,Country 91623,City,181,Country 91690,City,181,Country 91813,City,181,Country 91826,City,181,Country 91791,City,181,Country 91830,City,181,Country 91862,City,181,Country 91885,City,181,Country 91897,City,181,Country 91940,City,181,Country 91960,City,181,Country 92085,City,181,Country 92219,City,181,Country 92220,City,181,Country 92136,City,181,Country 92222,City,181,Country 92174,City,181,Country 92212,City,181,Country 92380,City,181,Country 92381,City,181,Country 92231,City,181,Country 92397,City,181,Country 92246,City,181,Country 92280,City,181,Country 92288,City,181,Country 92309,City,181,Country 92354,City,181,Country 92439,City,181,Country 92492,City,181,Country 92510,City,181,Country 92522,City,181,Country 92730,City,181,Country 92731,City,181,Country 92554,City,181,Country 92560,City,181,Country 92577,City,181,Country 92656,City,181,Country 92684,City,181,Country 92736,City,181,Country 92778,City,181,Country 92801,City,181,Country 92812,City,181,Country 93099,City,181,Country 92898,City,181,Country 92938,City,181,Country 93530,City,181,Country 92960,City,181,Country 93018,City,181,Country 93555,City,181,Country 92993,City,181,Country 92996,City,181,Country 93004,City,181,Country 93564,City,181,Country 93042,City,181,Country 93146,City,181,Country 93160,City,181,Country 93172,City,181,Country 93296,City,181,Country 93314,City,181,Country 93389,City,181,Country 93394,City,181,Country 93397,City,181,Country 93490,City,181,Country 93604,City,181,Country 93606,City,181,Country 93697,City,181,Country 93658,City,181,Country 93713,City,181,Country 94117,City,181,Country 93901,City,181,Country 93902,City,181,Country 93934,City,181,Country 93971,City,181,Country 94064,City,181,Country 94041,City,181,Country 94267,City,181,Country 94271,City,181,Country 94277,City,181,Country 94334,City,181,Country 94365,City,181,Country 94381,City,181,Country 94439,City,181,Country 94403,City,181,Country 94460,City,181,Country 94474,City,181,Country 94558,City,181,Country 94651,City,181,Country 94678,City,181,Country 94729,City,181,Country 94891,City,181,Country 94892,City,181,Country 94757,City,181,Country 94817,City,181,Country 94819,City,181,Country 94881,City,181,Country 95231,City,181,Country 94910,City,181,Country 95252,City,181,Country 95260,City,181,Country 94935,City,181,Country 94987,City,181,Country 95001,City,181,Country 95033,City,181,Country 95051,City,181,Country 95098,City,181,Country 95139,City,181,Country 95175,City,181,Country 95435,City,181,Country 95422,City,181,Country 95480,City,181,Country 95482,City,181,Country 95484,City,181,Country 95487,City,181,Country 95461,City,181,Country 95471,City,181,Country 95505,City,181,Country 95529,City,181,Country 95558,City,181,Country 95661,City,181,Country 95683,City,181,Country 95682,City,181,Country 95685,City,181,Country 96034,City,181,Country 96035,City,181,Country 95736,City,181,Country 95744,City,181,Country 95777,City,181,Country 95778,City,181,Country 95910,City,181,Country 95939,City,181,Country 95964,City,181,Country 96042,City,181,Country 96166,City,181,Country 96171,City,181,Country 96100,City,181,Country 96114,City,181,Country 96131,City,181,Country 96152,City,181,Country 106022,City,181,Country 96286,City,181,Country 96351,City,181,Country 97059,City,181,Country 96479,City,181,Country 97085,City,181,Country 96434,City,181,Country 96439,City,181,Country 96441,City,181,Country 96454,City,181,Country 97096,City,181,Country 96514,City,181,Country 106089,City,181,Country 106109,City,181,Country 106125,City,181,Country 96554,City,181,Country 96690,City,181,Country 96705,City,181,Country 96736,City,181,Country 96866,City,181,Country 96874,City,181,Country 96877,City,181,Country 97018,City,181,Country 97000,City,181,Country 89913,City,181,Country 89928,City,181,Country 90000,City,181,Country 90474,City,181,Country 90475,City,181,Country 90479,City,181,Country 90489,City,181,Country 90514,City,181,Country 90053,City,181,Country 90450,City,181,Country 90461,City,181,Country 90103,City,181,Country 90163,City,181,Country 90188,City,181,Country 90194,City,181,Country 90195,City,181,Country 90256,City,181,Country 90306,City,181,Country 90372,City,181,Country 90410,City,181,Country 93810,City,181,Country 90676,City,181,Country 90691,City,181,Country 90706,City,181,Country 90786,City,181,Country 90841,City,181,Country 90850,City,181,Country 90898,City,181,Country 91203,City,181,Country 91204,City,181,Country 91219,City,181,Country 90933,City,181,Country 90964,City,181,Country 91007,City,181,Country 91023,City,181,Country 91027,City,181,Country 91029,City,181,Country 91070,City,181,Country 91166,City,181,Country 91340,City,181,Country 91392,City,181,Country 91447,City,181,Country 91454,City,181,Country 91470,City,181,Country 91493,City,181,Country 91738,City,181,Country 91610,City,181,Country 91612,City,181,Country 91626,City,181,Country 91650,City,181,Country 91672,City,181,Country 91681,City,181,Country 91705,City,181,Country 91721,City,181,Country 91748,City,181,Country 91820,City,181,Country 91759,City,181,Country 91790,City,181,Country 91978,City,181,Country 91968,City,181,Country 91846,City,181,Country 91920,City,181,Country 92004,City,181,Country 92052,City,181,Country 92057,City,181,Country 92100,City,181,Country 92099,City,181,Country 92140,City,181,Country 92169,City,181,Country 92201,City,181,Country 92400,City,181,Country 92267,City,181,Country 92358,City,181,Country 92359,City,181,Country 92496,City,181,Country 92524,City,181,Country 92716,City,181,Country 92550,City,181,Country 92609,City,181,Country 92619,City,181,Country 92620,City,181,Country 92639,City,181,Country 92694,City,181,Country 92696,City,181,Country 92702,City,181,Country 92745,City,181,Country 92751,City,181,Country 92800,City,181,Country 92973,City,181,Country 93019,City,181,Country 93552,City,181,Country 93560,City,181,Country 93236,City,181,Country 93123,City,181,Country 93246,City,181,Country 93163,City,181,Country 93219,City,181,Country 93449,City,181,Country 93348,City,181,Country 93361,City,181,Country 93364,City,181,Country 93400,City,181,Country 93420,City,181,Country 93425,City,181,Country 93487,City,181,Country 93479,City,181,Country 93638,City,181,Country 93648,City,181,Country 93660,City,181,Country 93687,City,181,Country 93715,City,181,Country 94126,City,181,Country 93914,City,181,Country 93917,City,181,Country 93977,City,181,Country 94017,City,181,Country 94033,City,181,Country 94067,City,181,Country 94095,City,181,Country 94141,City,181,Country 94143,City,181,Country 94257,City,181,Country 94247,City,181,Country 94159,City,181,Country 94215,City,181,Country 94498,City,181,Country 94486,City,181,Country 94306,City,181,Country 94310,City,181,Country 94416,City,181,Country 94447,City,181,Country 94601,City,181,Country 94540,City,181,Country 94580,City,181,Country 94587,City,181,Country 94618,City,181,Country 94633,City,181,Country 94698,City,181,Country 94697,City,181,Country 94764,City,181,Country 94806,City,181,Country 94861,City,181,Country 95255,City,181,Country 94969,City,181,Country 95040,City,181,Country 95041,City,181,Country 95120,City,181,Country 95149,City,181,Country 95195,City,181,Country 95202,City,181,Country 95203,City,181,Country 95206,City,181,Country 95316,City,181,Country 95430,City,181,Country 95643,City,181,Country 95548,City,181,Country 95688,City,181,Country 96007,City,181,Country 95731,City,181,Country 95838,City,181,Country 95854,City,181,Country 95858,City,181,Country 95857,City,181,Country 95889,City,181,Country 95907,City,181,Country 95947,City,181,Country 95979,City,181,Country 95981,City,181,Country 95991,City,181,Country 96057,City,181,Country 96173,City,181,Country 96180,City,181,Country 96065,City,181,Country 96077,City,181,Country 96130,City,181,Country 96258,City,181,Country 96263,City,181,Country 96405,City,181,Country 96480,City,181,Country 97081,City,181,Country 97092,City,181,Country 96600,City,181,Country 106057,City,181,Country 96621,City,181,Country 106117,City,181,Country 106152,City,181,Country 96572,City,181,Country 96725,City,181,Country 96962,City,181,Country 96776,City,181,Country 96796,City,181,Country 96819,City,181,Country 96830,City,181,Country 96880,City,181,Country 96910,City,181,Country 96917,City,181,Country 97013,City,181,Country 97004,City,181,Country 89881,City,181,Country 89883,City,181,Country 89956,City,181,Country 89960,City,181,Country 90511,City,181,Country 90456,City,181,Country 90138,City,181,Country 90197,City,181,Country 90200,City,181,Country 90215,City,181,Country 90223,City,181,Country 90226,City,181,Country 90309,City,181,Country 90385,City,181,Country 90415,City,181,Country 93799,City,181,Country 93804,City,181,Country 93805,City,181,Country 93814,City,181,Country 90603,City,181,Country 90673,City,181,Country 90722,City,181,Country 90729,City,181,Country 90761,City,181,Country 90868,City,181,Country 91215,City,181,Country 91193,City,181,Country 90991,City,181,Country 91030,City,181,Country 91042,City,181,Country 91048,City,181,Country 91104,City,181,Country 91543,City,181,Country 91545,City,181,Country 91552,City,181,Country 91319,City,181,Country 91357,City,181,Country 91427,City,181,Country 91464,City,181,Country 93584,City,181,Country 91723,City,181,Country 91768,City,181,Country 91833,City,181,Country 91896,City,181,Country 91898,City,181,Country 91945,City,181,Country 91946,City,181,Country 92011,City,181,Country 92115,City,181,Country 92127,City,181,Country 92394,City,181,Country 92254,City,181,Country 92290,City,181,Country 92344,City,181,Country 92463,City,181,Country 92465,City,181,Country 92435,City,181,Country 92438,City,181,Country 92449,City,181,Country 92472,City,181,Country 92532,City,181,Country 92726,City,181,Country 92729,City,181,Country 92603,City,181,Country 92626,City,181,Country 92655,City,181,Country 92692,City,181,Country 92839,City,181,Country 92849,City,181,Country 92762,City,181,Country 92807,City,181,Country 92928,City,181,Country 92955,City,181,Country 92958,City,181,Country 92979,City,181,Country 92985,City,181,Country 93009,City,181,Country 93035,City,181,Country 93222,City,181,Country 93238,City,181,Country 93235,City,181,Country 93573,City,181,Country 93205,City,181,Country 93281,City,181,Country 93325,City,181,Country 93435,City,181,Country 93444,City,181,Country 93356,City,181,Country 93366,City,181,Country 93372,City,181,Country 93411,City,181,Country 93422,City,181,Country 93616,City,181,Country 93632,City,181,Country 93674,City,181,Country 93992,City,181,Country 94022,City,181,Country 94086,City,181,Country 94099,City,181,Country 94180,City,181,Country 94193,City,181,Country 94499,City,181,Country 94282,City,181,Country 94377,City,181,Country 94379,City,181,Country 94446,City,181,Country 94451,City,181,Country 94552,City,181,Country 94646,City,181,Country 94687,City,181,Country 94723,City,181,Country 94742,City,181,Country 94747,City,181,Country 94783,City,181,Country 95248,City,181,Country 95286,City,181,Country 95289,City,181,Country 94949,City,181,Country 94996,City,181,Country 95002,City,181,Country 95015,City,181,Country 95085,City,181,Country 95101,City,181,Country 95141,City,181,Country 95372,City,181,Country 95374,City,181,Country 95321,City,181,Country 95329,City,181,Country 95330,City,181,Country 95350,City,181,Country 95388,City,181,Country 95407,City,181,Country 95427,City,181,Country 95547,City,181,Country 95559,City,181,Country 95564,City,181,Country 95702,City,181,Country 95704,City,181,Country 96031,City,181,Country 96033,City,181,Country 95829,City,181,Country 95871,City,181,Country 95914,City,181,Country 95976,City,181,Country 96189,City,181,Country 96169,City,181,Country 96208,City,181,Country 96080,City,181,Country 96145,City,181,Country 96147,City,181,Country 96337,City,181,Country 97127,City,181,Country 96374,City,181,Country 96378,City,181,Country 96377,City,181,Country 96419,City,181,Country 96463,City,181,Country 96504,City,181,Country 96576,City,181,Country 96609,City,181,Country 96619,City,181,Country 97105,City,181,Country 106175,City,181,Country 96665,City,181,Country 96675,City,181,Country 96701,City,181,Country 96758,City,181,Country 96929,City,181,Country 96944,City,181,Country 96810,City,181,Country 96827,City,181,Country 96835,City,181,Country 96843,City,181,Country 96873,City,181,Country 96898,City,181,Country 96905,City,181,Country 96914,City,181,Country 97586,City,182,Country 97587,City,182,Country 97603,City,182,Country 97641,City,182,Country 97726,City,182,Country 97795,City,182,Country 97796,City,182,Country 97808,City,182,Country 97823,City,182,Country 97827,City,182,Country 97856,City,182,Country 97868,City,182,Country 97905,City,182,Country 97942,City,182,Country 97947,City,182,Country 97956,City,182,Country 98036,City,182,Country 98082,City,182,Country 98102,City,182,Country 98103,City,182,Country 98120,City,182,Country 98149,City,182,Country 98454,City,182,Country 98515,City,182,Country 98537,City,182,Country 98590,City,182,Country 98680,City,182,Country 98796,City,182,Country 98797,City,182,Country 98824,City,182,Country 98950,City,182,Country 98951,City,182,Country 99111,City,182,Country 99231,City,182,Country 99232,City,182,Country 99311,City,182,Country 99333,City,182,Country 99379,City,182,Country 99403,City,182,Country 99437,City,182,Country 99438,City,182,Country 99481,City,182,Country 99484,City,182,Country 99523,City,182,Country 99556,City,182,Country 99600,City,182,Country 99650,City,182,Country 99655,City,182,Country 99757,City,182,Country 99765,City,182,Country 99779,City,182,Country 99780,City,182,Country 99805,City,182,Country 99902,City,182,Country 99906,City,182,Country 100047,City,182,Country 100053,City,182,Country 100064,City,182,Country 100066,City,182,Country 100135,City,182,Country 100214,City,182,Country 100215,City,182,Country 100216,City,182,Country 100224,City,182,Country 100304,City,182,Country 100318,City,182,Country 100363,City,182,Country 100538,City,182,Country 100539,City,182,Country 100573,City,182,Country 100582,City,182,Country 100620,City,182,Country 100623,City,182,Country 100628,City,182,Country 100655,City,182,Country 100656,City,182,Country 100732,City,182,Country 100786,City,182,Country 100787,City,182,Country 100954,City,182,Country 100955,City,182,Country 100973,City,182,Country 100974,City,182,Country 100989,City,182,Country 100991,City,182,Country 101019,City,182,Country 101020,City,182,Country 101101,City,182,Country 101201,City,182,Country 101236,City,182,Country 101290,City,182,Country 101291,City,182,Country 101324,City,182,Country 101325,City,182,Country 101342,City,182,Country 101345,City,182,Country 101367,City,182,Country 101399,City,182,Country 101400,City,182,Country 101417,City,182,Country 101418,City,182,Country 101437,City,182,Country 101464,City,182,Country 101465,City,182,Country 101468,City,182,Country 101469,City,182,Country 101478,City,182,Country 101518,City,182,Country 101550,City,182,Country 101551,City,182,Country 101571,City,182,Country 101574,City,182,Country 101608,City,182,Country 101636,City,182,Country 101722,City,182,Country 101739,City,182,Country 101757,City,182,Country 101758,City,182,Country 101870,City,182,Country 101871,City,182,Country 101893,City,182,Country 101896,City,182,Country 101924,City,182,Country 101940,City,182,Country 102006,City,182,Country 102007,City,182,Country 102038,City,182,Country 102117,City,182,Country 102120,City,182,Country 102124,City,182,Country 102143,City,182,Country 102148,City,182,Country 102231,City,182,Country 102233,City,182,Country 102251,City,182,Country 102287,City,182,Country 102331,City,182,Country 102340,City,182,Country 102341,City,182,Country 102504,City,182,Country 102526,City,182,Country 102552,City,182,Country 102618,City,182,Country 102638,City,182,Country 102658,City,182,Country 102659,City,182,Country 102662,City,182,Country 102667,City,182,Country 102682,City,182,Country 102684,City,182,Country 102752,City,182,Country 102769,City,182,Country 102776,City,182,Country 97548,City,182,Country 97684,City,182,Country 97876,City,182,Country 98141,City,182,Country 98158,City,182,Country 98212,City,182,Country 98384,City,182,Country 98529,City,182,Country 98679,City,182,Country 98684,City,182,Country 99226,City,182,Country 99787,City,182,Country 99824,City,182,Country 99825,City,182,Country 100448,City,182,Country 100449,City,182,Country 101282,City,182,Country 101283,City,182,Country 101502,City,182,Country 101785,City,182,Country 101980,City,182,Country 102127,City,182,Country 102131,City,182,Country 102132,City,182,Country 102141,City,182,Country 97666,City,182,Country 97667,City,182,Country 97853,City,182,Country 97854,City,182,Country 97949,City,182,Country 97950,City,182,Country 98079,City,182,Country 98080,City,182,Country 98383,City,182,Country 98546,City,182,Country 98554,City,182,Country 98733,City,182,Country 99187,City,182,Country 99193,City,182,Country 99735,City,182,Country 99736,City,182,Country 99837,City,182,Country 99904,City,182,Country 100117,City,182,Country 100232,City,182,Country 100287,City,182,Country 100414,City,182,Country 100514,City,182,Country 100797,City,182,Country 100946,City,182,Country 100992,City,182,Country 100993,City,182,Country 101150,City,182,Country 101194,City,182,Country 101195,City,182,Country 101318,City,182,Country 101319,City,182,Country 101330,City,182,Country 101383,City,182,Country 101392,City,182,Country 101393,City,182,Country 101467,City,182,Country 101541,City,182,Country 101712,City,182,Country 101714,City,182,Country 101744,City,182,Country 101746,City,182,Country 101749,City,182,Country 101763,City,182,Country 101764,City,182,Country 101875,City,182,Country 101950,City,182,Country 101991,City,182,Country 101993,City,182,Country 101994,City,182,Country 102089,City,182,Country 102095,City,182,Country 102528,City,182,Country 102570,City,182,Country 102673,City,182,Country 102674,City,182,Country 102708,City,182,Country 102709,City,182,Country 97664,City,182,Country 97903,City,182,Country 98153,City,182,Country 98358,City,182,Country 98655,City,182,Country 98646,City,182,Country 98698,City,182,Country 98809,City,182,Country 98879,City,182,Country 98880,City,182,Country 98884,City,182,Country 98909,City,182,Country 98964,City,182,Country 98994,City,182,Country 98995,City,182,Country 99088,City,182,Country 99126,City,182,Country 99197,City,182,Country 99186,City,182,Country 99221,City,182,Country 99246,City,182,Country 99247,City,182,Country 99297,City,182,Country 99435,City,182,Country 99580,City,182,Country 99588,City,182,Country 99589,City,182,Country 99675,City,182,Country 99689,City,182,Country 99876,City,182,Country 99875,City,182,Country 99924,City,182,Country 100240,City,182,Country 100374,City,182,Country 100375,City,182,Country 100407,City,182,Country 100446,City,182,Country 100447,City,182,Country 100675,City,182,Country 100677,City,182,Country 100701,City,182,Country 100734,City,182,Country 100834,City,182,Country 100845,City,182,Country 100890,City,182,Country 100972,City,182,Country 101089,City,182,Country 101217,City,182,Country 101243,City,182,Country 101256,City,182,Country 101300,City,182,Country 101301,City,182,Country 101323,City,182,Country 101474,City,182,Country 101448,City,182,Country 102022,City,182,Country 102074,City,182,Country 102138,City,182,Country 102144,City,182,Country 102162,City,182,Country 102203,City,182,Country 102221,City,182,Country 102222,City,182,Country 102274,City,182,Country 102360,City,182,Country 102427,City,182,Country 102462,City,182,Country 102494,City,182,Country 102557,City,182,Country 102558,City,182,Country 102575,City,182,Country 97530,City,182,Country 97531,City,182,Country 97539,City,182,Country 97706,City,182,Country 98228,City,182,Country 98640,City,182,Country 98831,City,182,Country 98849,City,182,Country 98867,City,182,Country 98963,City,182,Country 99067,City,182,Country 99347,City,182,Country 99377,City,182,Country 99382,City,182,Country 99628,City,182,Country 99629,City,182,Country 99792,City,182,Country 100002,City,182,Country 100038,City,182,Country 100058,City,182,Country 100163,City,182,Country 100456,City,182,Country 100752,City,182,Country 100849,City,182,Country 101129,City,182,Country 101386,City,182,Country 101471,City,182,Country 101583,City,182,Country 101762,City,182,Country 101931,City,182,Country 101968,City,182,Country 102156,City,182,Country 102250,City,182,Country 102343,City,182,Country 102352,City,182,Country 102472,City,182,Country 102482,City,182,Country 102562,City,182,Country 102706,City,182,Country 102759,City,182,Country 97579,City,182,Country 97837,City,182,Country 97848,City,182,Country 97849,City,182,Country 97914,City,182,Country 98028,City,182,Country 98029,City,182,Country 98178,City,182,Country 98179,City,182,Country 98507,City,182,Country 98577,City,182,Country 98578,City,182,Country 98603,City,182,Country 98647,City,182,Country 98739,City,182,Country 98740,City,182,Country 99212,City,182,Country 99213,City,182,Country 99286,City,182,Country 99288,City,182,Country 99314,City,182,Country 99318,City,182,Country 99348,City,182,Country 99350,City,182,Country 99643,City,182,Country 99810,City,182,Country 99831,City,182,Country 100210,City,182,Country 100276,City,182,Country 100348,City,182,Country 100857,City,182,Country 100858,City,182,Country 100864,City,182,Country 100911,City,182,Country 100932,City,182,Country 100933,City,182,Country 100952,City,182,Country 100984,City,182,Country 101010,City,182,Country 101208,City,182,Country 101284,City,182,Country 101285,City,182,Country 101390,City,182,Country 101607,City,182,Country 101631,City,182,Country 101883,City,182,Country 101917,City,182,Country 102073,City,182,Country 102183,City,182,Country 102184,City,182,Country 102299,City,182,Country 102358,City,182,Country 102359,City,182,Country 102467,City,182,Country 102469,City,182,Country 102665,City,182,Country 97606,City,182,Country 97659,City,182,Country 97882,City,182,Country 98051,City,182,Country 98060,City,182,Country 98061,City,182,Country 98104,City,182,Country 98226,City,182,Country 98295,City,182,Country 98345,City,182,Country 98346,City,182,Country 98362,City,182,Country 98363,City,182,Country 98498,City,182,Country 98520,City,182,Country 98521,City,182,Country 98547,City,182,Country 98550,City,182,Country 98729,City,182,Country 98743,City,182,Country 98859,City,182,Country 99098,City,182,Country 99099,City,182,Country 99101,City,182,Country 99103,City,182,Country 99106,City,182,Country 99107,City,182,Country 99130,City,182,Country 99131,City,182,Country 99158,City,182,Country 99159,City,182,Country 99223,City,182,Country 99277,City,182,Country 99308,City,182,Country 99654,City,182,Country 99661,City,182,Country 99719,City,182,Country 99720,City,182,Country 99887,City,182,Country 99888,City,182,Country 100071,City,182,Country 100072,City,182,Country 100114,City,182,Country 100337,City,182,Country 100338,City,182,Country 100349,City,182,Country 100706,City,182,Country 100707,City,182,Country 100735,City,182,Country 100736,City,182,Country 100907,City,182,Country 100924,City,182,Country 100982,City,182,Country 100983,City,182,Country 101058,City,182,Country 101063,City,182,Country 101161,City,182,Country 101198,City,182,Country 101224,City,182,Country 101225,City,182,Country 101612,City,182,Country 101577,City,182,Country 101578,City,182,Country 101671,City,182,Country 101673,City,182,Country 101674,City,182,Country 101694,City,182,Country 101692,City,182,Country 101697,City,182,Country 101928,City,182,Country 101929,City,182,Country 102058,City,182,Country 102059,City,182,Country 102430,City,182,Country 102431,City,182,Country 102440,City,182,Country 102640,City,182,Country 102686,City,182,Country 102735,City,182,Country 102736,City,182,Country 102741,City,182,Country 102744,City,182,Country 102751,City,182,Country 97499,City,182,Country 97500,City,182,Country 97593,City,182,Country 97594,City,182,Country 97595,City,182,Country 97597,City,182,Country 97601,City,182,Country 97662,City,182,Country 97705,City,182,Country 97725,City,182,Country 97749,City,182,Country 97787,City,182,Country 97847,City,182,Country 97886,City,182,Country 98045,City,182,Country 98130,City,182,Country 98196,City,182,Country 98333,City,182,Country 98365,City,182,Country 98373,City,182,Country 98388,City,182,Country 98397,City,182,Country 98473,City,182,Country 98484,City,182,Country 98485,City,182,Country 98516,City,182,Country 98573,City,182,Country 98582,City,182,Country 98593,City,182,Country 98594,City,182,Country 98606,City,182,Country 98607,City,182,Country 98644,City,182,Country 98702,City,182,Country 98707,City,182,Country 98724,City,182,Country 98725,City,182,Country 98794,City,182,Country 98876,City,182,Country 98911,City,182,Country 98956,City,182,Country 98960,City,182,Country 99429,City,182,Country 99456,City,182,Country 99537,City,182,Country 99541,City,182,Country 99804,City,182,Country 99829,City,182,Country 99871,City,182,Country 100041,City,182,Country 100067,City,182,Country 100068,City,182,Country 100189,City,182,Country 100356,City,182,Country 100365,City,182,Country 100366,City,182,Country 100516,City,182,Country 100615,City,182,Country 100654,City,182,Country 100820,City,182,Country 101000,City,182,Country 101087,City,182,Country 101186,City,182,Country 101196,City,182,Country 101227,City,182,Country 101244,City,182,Country 101245,City,182,Country 101246,City,182,Country 101269,City,182,Country 101365,City,182,Country 101292,City,182,Country 101566,City,182,Country 101610,City,182,Country 101880,City,182,Country 101943,City,182,Country 101953,City,182,Country 102087,City,182,Country 102088,City,182,Country 102182,City,182,Country 102208,City,182,Country 102209,City,182,Country 102474,City,182,Country 102634,City,182,Country 102642,City,182,Country 102761,City,182,Country 97513,City,182,Country 97514,City,182,Country 97660,City,182,Country 97696,City,182,Country 97698,City,182,Country 97756,City,182,Country 97832,City,182,Country 97889,City,182,Country 97957,City,182,Country 98054,City,182,Country 98057,City,182,Country 98125,City,182,Country 98126,City,182,Country 98140,City,182,Country 98151,City,182,Country 98192,City,182,Country 98299,City,182,Country 98421,City,182,Country 98536,City,182,Country 98549,City,182,Country 98834,City,182,Country 98853,City,182,Country 98887,City,182,Country 98888,City,182,Country 98899,City,182,Country 98906,City,182,Country 98907,City,182,Country 99092,City,182,Country 99199,City,182,Country 99207,City,182,Country 99257,City,182,Country 99306,City,182,Country 99398,City,182,Country 99445,City,182,Country 99483,City,182,Country 99521,City,182,Country 99568,City,182,Country 99652,City,182,Country 99738,City,182,Country 99739,City,182,Country 99883,City,182,Country 99889,City,182,Country 99890,City,182,Country 100020,City,182,Country 100045,City,182,Country 100177,City,182,Country 100244,City,182,Country 100306,City,182,Country 100376,City,182,Country 100377,City,182,Country 100413,City,182,Country 100519,City,182,Country 100550,City,182,Country 100694,City,182,Country 100754,City,182,Country 100789,City,182,Country 100999,City,182,Country 101012,City,182,Country 101118,City,182,Country 101132,City,182,Country 101133,City,182,Country 101154,City,182,Country 101370,City,182,Country 101423,City,182,Country 101496,City,182,Country 101581,City,182,Country 101729,City,182,Country 101803,City,182,Country 101859,City,182,Country 101935,City,182,Country 101914,City,182,Country 101975,City,182,Country 101999,City,182,Country 102114,City,182,Country 102129,City,182,Country 102158,City,182,Country 102159,City,182,Country 102163,City,182,Country 102164,City,182,Country 102176,City,182,Country 102192,City,182,Country 102195,City,182,Country 102217,City,182,Country 102242,City,182,Country 102258,City,182,Country 102318,City,182,Country 102423,City,182,Country 102553,City,182,Country 102554,City,182,Country 102578,City,182,Country 102601,City,182,Country 102617,City,182,Country 102719,City,182,Country 102750,City,182,Country 97618,City,182,Country 97619,City,182,Country 97897,City,182,Country 97928,City,182,Country 98381,City,182,Country 99547,City,182,Country 99664,City,182,Country 100669,City,182,Country 100872,City,182,Country 100873,City,182,Country 97560,City,182,Country 97559,City,182,Country 97590,City,182,Country 97591,City,182,Country 97714,City,182,Country 97815,City,182,Country 97816,City,182,Country 98070,City,182,Country 98127,City,182,Country 98128,City,182,Country 98626,City,182,Country 98627,City,182,Country 98708,City,182,Country 98833,City,182,Country 98835,City,182,Country 99076,City,182,Country 99168,City,182,Country 99176,City,182,Country 99266,City,182,Country 99269,City,182,Country 99294,City,182,Country 99295,City,182,Country 99299,City,182,Country 99383,City,182,Country 99424,City,182,Country 99796,City,182,Country 99797,City,182,Country 99962,City,182,Country 99963,City,182,Country 100233,City,182,Country 100361,City,182,Country 100775,City,182,Country 100776,City,182,Country 101296,City,182,Country 101297,City,182,Country 101311,City,182,Country 101346,City,182,Country 101347,City,182,Country 101951,City,182,Country 101952,City,182,Country 102081,City,182,Country 102082,City,182,Country 102416,City,182,Country 102417,City,182,Country 102459,City,182,Country 102460,City,182,Country 102476,City,182,Country 102487,City,182,Country 102488,City,182,Country 97669,City,182,Country 97972,City,182,Country 98352,City,182,Country 98442,City,182,Country 98461,City,182,Country 98658,City,182,Country 98731,City,182,Country 98732,City,182,Country 98812,City,182,Country 98826,City,182,Country 99048,City,182,Country 99049,City,182,Country 99083,City,182,Country 99129,City,182,Country 99138,City,182,Country 99172,City,182,Country 99175,City,182,Country 99506,City,182,Country 99619,City,182,Country 99620,City,182,Country 99683,City,182,Country 99686,City,182,Country 99800,City,182,Country 100073,City,182,Country 100109,City,182,Country 100220,City,182,Country 100281,City,182,Country 100333,City,182,Country 100359,City,182,Country 100529,City,182,Country 100530,City,182,Country 100643,City,182,Country 100644,City,182,Country 100663,City,182,Country 100685,City,182,Country 100705,City,182,Country 100846,City,182,Country 100850,City,182,Country 100885,City,182,Country 100886,City,182,Country 100977,City,182,Country 100980,City,182,Country 101135,City,182,Country 101137,City,182,Country 101360,City,182,Country 101362,City,182,Country 101568,City,182,Country 101753,City,182,Country 101847,City,182,Country 101848,City,182,Country 102240,City,182,Country 102254,City,182,Country 102300,City,182,Country 102301,City,182,Country 102605,City,182,Country 102606,City,182,Country 102612,City,182,Country 102622,City,182,Country 102652,City,182,Country 102678,City,182,Country 102679,City,182,Country 97615,City,182,Country 97742,City,182,Country 97932,City,182,Country 97933,City,182,Country 97935,City,182,Country 97936,City,182,Country 98760,City,182,Country 98982,City,182,Country 99439,City,182,Country 99574,City,182,Country 99578,City,182,Country 99660,City,182,Country 100385,City,182,Country 100415,City,182,Country 100813,City,182,Country 101411,City,182,Country 101412,City,182,Country 102349,City,182,Country 97571,City,182,Country 97604,City,182,Country 97661,City,182,Country 97720,City,182,Country 97743,City,182,Country 97762,City,182,Country 97763,City,182,Country 97764,City,182,Country 97844,City,182,Country 98099,City,182,Country 98132,City,182,Country 98133,City,182,Country 98146,City,182,Country 98272,City,182,Country 98348,City,182,Country 98390,City,182,Country 98391,City,182,Country 98483,City,182,Country 98611,City,182,Country 98713,City,182,Country 98777,City,182,Country 98811,City,182,Country 98817,City,182,Country 98860,City,182,Country 98896,City,182,Country 98940,City,182,Country 99080,City,182,Country 99249,City,182,Country 99413,City,182,Country 99524,City,182,Country 99559,City,182,Country 99590,City,182,Country 99759,City,182,Country 99834,City,182,Country 100054,City,182,Country 100061,City,182,Country 100062,City,182,Country 100165,City,182,Country 100170,City,182,Country 100693,City,182,Country 100828,City,182,Country 100855,City,182,Country 100856,City,182,Country 100883,City,182,Country 101119,City,182,Country 101248,City,182,Country 101446,City,182,Country 101604,City,182,Country 101609,City,182,Country 101827,City,182,Country 101838,City,182,Country 101840,City,182,Country 101997,City,182,Country 102086,City,182,Country 102092,City,182,Country 102091,City,182,Country 102253,City,182,Country 102265,City,182,Country 102373,City,182,Country 102639,City,182,Country 102687,City,182,Country 102711,City,182,Country 102724,City,182,Country 102768,City,182,Country 97755,City,182,Country 97784,City,182,Country 97989,City,182,Country 98177,City,182,Country 98316,City,182,Country 98616,City,182,Country 98618,City,182,Country 98624,City,182,Country 98787,City,182,Country 99013,City,182,Country 99356,City,182,Country 99534,City,182,Country 99769,City,182,Country 99777,City,182,Country 100100,City,182,Country 100101,City,182,Country 100111,City,182,Country 100113,City,182,Country 100507,City,182,Country 100524,City,182,Country 100520,City,182,Country 100680,City,182,Country 100753,City,182,Country 100802,City,182,Country 100830,City,182,Country 101402,City,182,Country 101403,City,182,Country 101504,City,182,Country 101701,City,182,Country 101705,City,182,Country 102350,City,182,Country 102456,City,182,Country 102486,City,182,Country 102619,City,182,Country 102699,City,182,Country 102718,City,182,Country 102758,City,182,Country 97746,City,182,Country 97747,City,182,Country 97766,City,182,Country 97801,City,182,Country 97802,City,182,Country 97866,City,182,Country 97916,City,182,Country 98040,City,182,Country 98042,City,182,Country 98268,City,182,Country 98270,City,182,Country 98354,City,182,Country 98355,City,182,Country 98359,City,182,Country 98369,City,182,Country 98422,City,182,Country 98423,City,182,Country 98755,City,182,Country 98756,City,182,Country 98802,City,182,Country 99025,City,182,Country 99026,City,182,Country 99060,City,182,Country 99072,City,182,Country 99183,City,182,Country 99260,City,182,Country 99261,City,182,Country 99388,City,182,Country 99421,City,182,Country 99472,City,182,Country 99495,City,182,Country 99724,City,182,Country 99725,City,182,Country 99767,City,182,Country 99768,City,182,Country 99850,City,182,Country 99849,City,182,Country 99869,City,182,Country 99870,City,182,Country 99970,City,182,Country 99971,City,182,Country 99991,City,182,Country 100027,City,182,Country 100132,City,182,Country 100386,City,182,Country 100601,City,182,Country 100602,City,182,Country 100756,City,182,Country 100912,City,182,Country 101178,City,182,Country 101482,City,182,Country 101522,City,182,Country 101523,City,182,Country 101649,City,182,Country 101650,City,182,Country 101782,City,182,Country 101783,City,182,Country 101908,City,182,Country 102054,City,182,Country 102385,City,182,Country 102445,City,182,Country 102568,City,182,Country 102590,City,182,Country 102591,City,182,Country 102657,City,182,Country 102731,City,182,Country 102738,City,182,Country 102739,City,182,Country 102742,City,182,Country 102745,City,182,Country 97585,City,182,Country 97715,City,182,Country 98100,City,182,Country 98404,City,182,Country 98863,City,182,Country 99112,City,182,Country 99270,City,182,Country 99914,City,182,Country 99915,City,182,Country 100430,City,182,Country 100489,City,182,Country 100518,City,182,Country 100527,City,182,Country 100543,City,182,Country 100596,City,182,Country 100652,City,182,Country 101428,City,182,Country 101849,City,182,Country 101850,City,182,Country 101856,City,182,Country 102116,City,182,Country 102125,City,182,Country 102126,City,182,Country 102308,City,182,Country 102544,City,182,Country 102545,City,182,Country 97505,City,182,Country 97588,City,182,Country 97911,City,182,Country 98160,City,182,Country 98328,City,182,Country 98638,City,182,Country 98714,City,182,Country 98857,City,182,Country 98858,City,182,Country 98873,City,182,Country 98914,City,182,Country 98952,City,182,Country 99366,City,182,Country 99443,City,182,Country 99458,City,182,Country 99528,City,182,Country 99763,City,182,Country 99841,City,182,Country 100162,City,182,Country 100344,City,182,Country 100460,City,182,Country 100624,City,182,Country 100805,City,182,Country 100809,City,182,Country 100825,City,182,Country 100884,City,182,Country 101125,City,182,Country 101623,City,182,Country 101830,City,182,Country 102014,City,182,Country 102016,City,182,Country 102019,City,182,Country 102119,City,182,Country 102689,City,182,Country 97477,City,182,Country 97646,City,182,Country 97685,City,182,Country 97748,City,182,Country 97806,City,182,Country 97852,City,182,Country 97867,City,182,Country 97907,City,182,Country 98039,City,182,Country 98199,City,182,Country 98576,City,182,Country 98617,City,182,Country 98677,City,182,Country 98723,City,182,Country 98749,City,182,Country 98799,City,182,Country 98862,City,182,Country 98921,City,182,Country 98933,City,182,Country 98937,City,182,Country 99078,City,182,Country 99272,City,182,Country 99298,City,182,Country 99307,City,182,Country 99352,City,182,Country 99499,City,182,Country 99569,City,182,Country 99570,City,182,Country 99639,City,182,Country 99795,City,182,Country 99880,City,182,Country 100003,City,182,Country 100033,City,182,Country 100131,City,182,Country 100257,City,182,Country 100258,City,182,Country 100279,City,182,Country 100487,City,182,Country 100679,City,182,Country 100703,City,182,Country 100764,City,182,Country 100842,City,182,Country 100859,City,182,Country 100860,City,182,Country 100866,City,182,Country 100867,City,182,Country 101023,City,182,Country 101077,City,182,Country 101305,City,182,Country 101490,City,182,Country 101527,City,182,Country 101572,City,182,Country 101590,City,182,Country 101684,City,182,Country 101788,City,182,Country 101789,City,182,Country 101802,City,182,Country 101806,City,182,Country 101815,City,182,Country 101864,City,182,Country 101894,City,182,Country 101930,City,182,Country 101990,City,182,Country 102085,City,182,Country 102230,City,182,Country 102463,City,182,Country 102464,City,182,Country 102510,City,182,Country 102517,City,182,Country 102593,City,182,Country 102595,City,182,Country 102697,City,182,Country 97614,City,182,Country 97727,City,182,Country 97908,City,182,Country 97926,City,182,Country 97927,City,182,Country 97974,City,182,Country 98131,City,182,Country 98221,City,182,Country 98253,City,182,Country 98525,City,182,Country 98542,City,182,Country 98665,City,182,Country 98948,City,182,Country 98949,City,182,Country 99004,City,182,Country 99021,City,182,Country 99115,City,182,Country 99171,City,182,Country 99206,City,182,Country 99548,City,182,Country 99585,City,182,Country 99641,City,182,Country 99668,City,182,Country 99740,City,182,Country 99833,City,182,Country 99936,City,182,Country 99996,City,182,Country 100092,City,182,Country 100136,City,182,Country 100353,City,182,Country 100403,City,182,Country 101155,City,182,Country 101459,City,182,Country 101508,City,182,Country 101895,City,182,Country 101996,City,182,Country 102186,City,182,Country 102421,City,182,Country 102447,City,182,Country 102671,City,182,Country 97519,City,182,Country 97625,City,182,Country 97797,City,182,Country 97869,City,182,Country 97906,City,182,Country 98417,City,182,Country 98531,City,182,Country 98635,City,182,Country 98750,City,182,Country 98962,City,182,Country 99017,City,182,Country 99128,City,182,Country 99167,City,182,Country 99179,City,182,Country 99441,City,182,Country 99544,City,182,Country 99653,City,182,Country 99705,City,182,Country 99758,City,182,Country 99851,City,182,Country 99881,City,182,Country 99968,City,182,Country 100088,City,182,Country 100158,City,182,Country 100160,City,182,Country 100221,City,182,Country 100373,City,182,Country 100681,City,182,Country 100739,City,182,Country 100798,City,182,Country 100836,City,182,Country 100917,City,182,Country 100927,City,182,Country 101030,City,182,Country 101082,City,182,Country 101109,City,182,Country 101307,City,182,Country 101375,City,182,Country 101452,City,182,Country 101511,City,182,Country 101676,City,182,Country 102071,City,182,Country 102588,City,182,Country 102691,City,182,Country 97508,City,182,Country 97653,City,182,Country 97671,City,182,Country 97843,City,182,Country 97861,City,182,Country 97973,City,182,Country 98229,City,182,Country 98247,City,182,Country 98263,City,182,Country 98344,City,182,Country 98412,City,182,Country 98413,City,182,Country 99037,City,182,Country 99038,City,182,Country 99041,City,182,Country 99059,City,182,Country 99062,City,182,Country 99063,City,182,Country 99073,City,182,Country 99233,City,182,Country 99239,City,182,Country 99244,City,182,Country 99282,City,182,Country 99444,City,182,Country 99543,City,182,Country 99577,City,182,Country 99593,City,182,Country 99601,City,182,Country 99695,City,182,Country 99699,City,182,Country 99704,City,182,Country 99760,City,182,Country 99761,City,182,Country 99803,City,182,Country 99844,City,182,Country 99925,City,182,Country 100005,City,182,Country 100006,City,182,Country 100018,City,182,Country 100048,City,182,Country 100049,City,182,Country 100099,City,182,Country 100103,City,182,Country 100154,City,182,Country 100196,City,182,Country 100197,City,182,Country 100445,City,182,Country 100453,City,182,Country 100467,City,182,Country 100468,City,182,Country 100470,City,182,Country 100475,City,182,Country 100559,City,182,Country 100635,City,182,Country 100678,City,182,Country 100690,City,182,Country 100691,City,182,Country 100726,City,182,Country 100727,City,182,Country 100930,City,182,Country 101022,City,182,Country 101095,City,182,Country 101096,City,182,Country 101228,City,182,Country 101409,City,182,Country 101410,City,182,Country 101487,City,182,Country 101503,City,182,Country 101513,City,182,Country 101521,City,182,Country 101629,City,182,Country 101637,City,182,Country 101662,City,182,Country 101663,City,182,Country 101696,City,182,Country 101704,City,182,Country 101898,City,182,Country 101987,City,182,Country 102060,City,182,Country 102061,City,182,Country 102094,City,182,Country 102177,City,182,Country 102276,City,182,Country 102398,City,182,Country 102420,City,182,Country 102491,City,182,Country 102492,City,182,Country 102602,City,182,Country 102777,City,182,Country 97729,City,182,Country 97952,City,182,Country 98037,City,182,Country 98410,City,182,Country 98678,City,182,Country 98748,City,182,Country 99116,City,182,Country 99220,City,182,Country 99234,City,182,Country 99258,City,182,Country 99259,City,182,Country 99265,City,182,Country 99606,City,182,Country 99878,City,182,Country 99909,City,182,Country 99960,City,182,Country 100174,City,182,Country 100552,City,182,Country 100587,City,182,Country 100827,City,182,Country 100868,City,182,Country 100904,City,182,Country 101148,City,182,Country 101343,City,182,Country 101371,City,182,Country 101484,City,182,Country 101512,City,182,Country 101724,City,182,Country 101728,City,182,Country 101919,City,182,Country 101920,City,182,Country 101941,City,182,Country 102043,City,182,Country 102096,City,182,Country 102100,City,182,Country 102110,City,182,Country 102134,City,182,Country 102140,City,182,Country 102266,City,182,Country 102268,City,182,Country 102323,City,182,Country 102334,City,182,Country 102376,City,182,Country 102377,City,182,Country 102405,City,182,Country 102415,City,182,Country 102493,City,182,Country 102559,City,182,Country 102648,City,182,Country 102690,City,182,Country 102726,City,182,Country 97642,City,182,Country 97643,City,182,Country 97978,City,182,Country 98090,City,182,Country 98093,City,182,Country 98203,City,182,Country 98218,City,182,Country 98450,City,182,Country 98451,City,182,Country 98478,City,182,Country 98773,City,182,Country 98774,City,182,Country 99140,City,182,Country 99235,City,182,Country 99241,City,182,Country 99242,City,182,Country 99332,City,182,Country 99354,City,182,Country 99742,City,182,Country 99785,City,182,Country 99786,City,182,Country 100107,City,182,Country 100108,City,182,Country 100122,City,182,Country 100123,City,182,Country 100499,City,182,Country 100500,City,182,Country 100545,City,182,Country 100546,City,182,Country 100564,City,182,Country 100766,City,182,Country 100767,City,182,Country 100915,City,182,Country 101265,City,182,Country 101266,City,182,Country 101449,City,182,Country 101450,City,182,Country 101642,City,182,Country 101643,City,182,Country 101682,City,182,Country 102296,City,182,Country 102335,City,182,Country 102336,City,182,Country 102345,City,182,Country 97486,City,182,Country 97487,City,182,Country 97490,City,182,Country 97503,City,182,Country 97509,City,182,Country 97520,City,182,Country 97521,City,182,Country 97529,City,182,Country 97534,City,182,Country 97580,City,182,Country 97620,City,182,Country 97621,City,182,Country 97623,City,182,Country 97651,City,182,Country 97668,City,182,Country 97673,City,182,Country 97708,City,182,Country 97736,City,182,Country 97814,City,182,Country 97840,City,182,Country 97862,City,182,Country 97863,City,182,Country 97872,City,182,Country 97893,City,182,Country 97912,City,182,Country 97913,City,182,Country 97951,City,182,Country 98062,City,182,Country 98111,City,182,Country 98138,City,182,Country 98173,City,182,Country 98174,City,182,Country 98233,City,182,Country 98277,City,182,Country 98280,City,182,Country 98283,City,182,Country 98289,City,182,Country 98304,City,182,Country 98360,City,182,Country 98378,City,182,Country 98379,City,182,Country 98414,City,182,Country 98466,City,182,Country 98474,City,182,Country 98491,City,182,Country 98494,City,182,Country 98502,City,182,Country 98510,City,182,Country 98533,City,182,Country 98570,City,182,Country 98571,City,182,Country 98592,City,182,Country 98605,City,182,Country 98609,City,182,Country 98649,City,182,Country 98660,City,182,Country 98692,City,182,Country 98765,City,182,Country 98789,City,182,Country 98798,City,182,Country 98828,City,182,Country 98840,City,182,Country 98841,City,182,Country 98913,City,182,Country 98928,City,182,Country 98953,City,182,Country 98997,City,182,Country 99009,City,182,Country 99082,City,182,Country 99086,City,182,Country 99185,City,182,Country 99191,City,182,Country 99195,City,182,Country 99198,City,182,Country 99203,City,182,Country 99222,City,182,Country 99251,City,182,Country 99283,City,182,Country 99292,City,182,Country 99300,City,182,Country 99351,City,182,Country 99399,City,182,Country 99405,City,182,Country 99406,City,182,Country 99408,City,182,Country 99409,City,182,Country 99415,City,182,Country 99417,City,182,Country 99419,City,182,Country 99460,City,182,Country 99485,City,182,Country 99530,City,182,Country 99533,City,182,Country 99549,City,182,Country 99562,City,182,Country 99564,City,182,Country 99587,City,182,Country 99672,City,182,Country 99822,City,182,Country 99845,City,182,Country 99901,City,182,Country 99926,City,182,Country 99981,City,182,Country 99982,City,182,Country 100032,City,182,Country 100081,City,182,Country 100083,City,182,Country 100093,City,182,Country 100223,City,182,Country 100229,City,182,Country 100237,City,182,Country 100238,City,182,Country 100241,City,182,Country 100252,City,182,Country 100254,City,182,Country 100255,City,182,Country 100260,City,182,Country 100263,City,182,Country 100265,City,182,Country 100267,City,182,Country 100268,City,182,Country 100270,City,182,Country 100282,City,182,Country 100286,City,182,Country 100288,City,182,Country 100289,City,182,Country 100299,City,182,Country 100314,City,182,Country 100319,City,182,Country 100320,City,182,Country 100327,City,182,Country 100432,City,182,Country 100435,City,182,Country 100483,City,182,Country 100504,City,182,Country 100509,City,182,Country 100551,City,182,Country 100562,City,182,Country 100574,City,182,Country 100579,City,182,Country 100597,City,182,Country 100603,City,182,Country 100610,City,182,Country 100653,City,182,Country 100662,City,182,Country 100696,City,182,Country 100697,City,182,Country 100773,City,182,Country 100824,City,182,Country 100835,City,182,Country 100854,City,182,Country 100877,City,182,Country 100879,City,182,Country 100880,City,182,Country 100947,City,182,Country 100979,City,182,Country 100985,City,182,Country 101042,City,182,Country 101115,City,182,Country 101223,City,182,Country 101229,City,182,Country 101287,City,182,Country 101303,City,182,Country 101328,City,182,Country 101335,City,182,Country 101405,City,182,Country 101406,City,182,Country 101416,City,182,Country 101429,City,182,Country 101439,City,182,Country 101506,City,182,Country 101519,City,182,Country 101540,City,182,Country 101564,City,182,Country 101576,City,182,Country 101580,City,182,Country 101582,City,182,Country 101585,City,182,Country 101586,City,182,Country 101587,City,182,Country 101588,City,182,Country 101594,City,182,Country 101597,City,182,Country 101599,City,182,Country 101626,City,182,Country 101655,City,182,Country 101760,City,182,Country 101808,City,182,Country 101814,City,182,Country 101816,City,182,Country 101820,City,182,Country 101821,City,182,Country 101832,City,182,Country 101851,City,182,Country 101852,City,182,Country 101858,City,182,Country 101915,City,182,Country 101932,City,182,Country 101946,City,182,Country 101957,City,182,Country 101958,City,182,Country 102023,City,182,Country 102065,City,182,Country 102103,City,182,Country 102104,City,182,Country 102135,City,182,Country 102187,City,182,Country 102188,City,182,Country 102202,City,182,Country 102219,City,182,Country 102225,City,182,Country 102236,City,182,Country 102313,City,182,Country 102322,City,182,Country 102328,City,182,Country 102382,City,182,Country 102408,City,182,Country 102436,City,182,Country 102437,City,182,Country 102439,City,182,Country 102450,City,182,Country 102500,City,182,Country 102507,City,182,Country 102542,City,182,Country 102579,City,182,Country 102580,City,182,Country 102600,City,182,Country 102620,City,182,Country 102670,City,182,Country 97481,City,182,Country 97482,City,182,Country 97495,City,182,Country 97496,City,182,Country 97517,City,182,Country 97768,City,182,Country 97769,City,182,Country 97825,City,182,Country 97904,City,182,Country 97896,City,182,Country 97934,City,182,Country 97976,City,182,Country 97977,City,182,Country 97981,City,182,Country 97982,City,182,Country 98004,City,182,Country 98007,City,182,Country 98020,City,182,Country 98030,City,182,Country 98222,City,182,Country 98275,City,182,Country 98279,City,182,Country 98334,City,182,Country 98347,City,182,Country 98370,City,182,Country 98407,City,182,Country 98426,City,182,Country 98628,City,182,Country 98629,City,182,Country 98631,City,182,Country 98650,City,182,Country 98642,City,182,Country 98643,City,182,Country 98687,City,182,Country 98688,City,182,Country 98693,City,182,Country 98844,City,182,Country 98845,City,182,Country 98871,City,182,Country 98920,City,182,Country 98922,City,182,Country 98923,City,182,Country 98936,City,182,Country 98972,City,182,Country 99127,City,182,Country 99230,City,182,Country 99321,City,182,Country 99336,City,182,Country 99343,City,182,Country 99452,City,182,Country 99604,City,182,Country 99783,City,182,Country 99788,City,182,Country 99918,City,182,Country 99919,City,182,Country 99983,City,182,Country 100075,City,182,Country 100076,City,182,Country 100153,City,182,Country 100167,City,182,Country 100185,City,182,Country 100198,City,182,Country 100230,City,182,Country 100236,City,182,Country 100513,City,182,Country 100556,City,182,Country 100557,City,182,Country 100684,City,182,Country 100808,City,182,Country 100945,City,182,Country 100949,City,182,Country 101140,City,182,Country 101141,City,182,Country 101213,City,182,Country 101214,City,182,Country 101247,City,182,Country 101263,City,182,Country 101264,City,182,Country 101356,City,182,Country 101357,City,182,Country 101425,City,182,Country 101457,City,182,Country 101494,City,182,Country 101627,City,182,Country 101652,City,182,Country 101702,City,182,Country 101754,City,182,Country 101767,City,182,Country 101784,City,182,Country 101804,City,182,Country 101846,City,182,Country 101861,City,182,Country 101972,City,182,Country 101982,City,182,Country 102001,City,182,Country 102069,City,182,Country 102160,City,182,Country 102161,City,182,Country 102165,City,182,Country 102185,City,182,Country 102555,City,182,Country 102556,City,182,Country 102560,City,182,Country 102561,City,182,Country 102564,City,182,Country 102696,City,182,Country 102703,City,182,Country 102721,City,182,Country 102786,City,182,Country 97875,City,182,Country 98236,City,182,Country 98504,City,182,Country 98639,City,182,Country 98908,City,182,Country 98945,City,182,Country 99371,City,182,Country 99459,City,182,Country 99477,City,182,Country 99557,City,182,Country 99558,City,182,Country 99592,City,182,Country 99748,City,182,Country 99929,City,182,Country 99944,City,182,Country 99945,City,182,Country 100666,City,182,Country 100758,City,182,Country 100870,City,182,Country 101067,City,182,Country 101068,City,182,Country 101233,City,182,Country 101270,City,182,Country 101349,City,182,Country 101351,City,182,Country 101939,City,182,Country 102189,City,182,Country 102190,City,182,Country 102418,City,182,Country 102594,City,182,Country 102782,City,182,Country 97839,City,182,Country 98147,City,182,Country 98148,City,182,Country 98168,City,182,Country 98415,City,182,Country 98416,City,182,Country 98503,City,182,Country 98565,City,182,Country 98566,City,182,Country 98727,City,182,Country 98903,City,182,Country 98904,City,182,Country 99001,City,182,Country 99068,City,182,Country 99196,City,182,Country 99204,City,182,Country 99410,City,182,Country 99457,City,182,Country 99474,City,182,Country 99476,City,182,Country 99726,City,182,Country 99727,City,182,Country 99784,City,182,Country 99846,City,182,Country 99896,City,182,Country 100389,City,182,Country 100388,City,182,Country 100427,City,182,Country 100613,City,182,Country 100770,City,182,Country 100841,City,182,Country 100840,City,182,Country 100875,City,182,Country 101055,City,182,Country 101278,City,182,Country 101461,City,182,Country 101462,City,182,Country 101515,City,182,Country 101647,City,182,Country 101857,City,182,Country 102383,City,182,Country 102720,City,182,Country 102765,City,182,Country 102766,City,182,Country 97512,City,182,Country 97528,City,182,Country 97635,City,182,Country 97835,City,182,Country 97986,City,182,Country 97987,City,182,Country 97999,City,182,Country 98027,City,182,Country 98064,City,182,Country 98066,City,182,Country 98165,City,182,Country 98332,City,182,Country 98444,City,182,Country 98428,City,182,Country 98434,City,182,Country 98457,City,182,Country 98460,City,182,Country 98497,City,182,Country 98519,City,182,Country 98568,City,182,Country 98572,City,182,Country 98651,City,182,Country 98663,City,182,Country 98667,City,182,Country 98716,City,182,Country 98726,City,182,Country 98790,City,182,Country 98813,City,182,Country 98815,City,182,Country 99022,City,182,Country 99036,City,182,Country 99050,City,182,Country 99051,City,182,Country 99052,City,182,Country 99057,City,182,Country 99065,City,182,Country 99071,City,182,Country 99117,City,182,Country 99137,City,182,Country 99150,City,182,Country 99164,City,182,Country 99200,City,182,Country 99211,City,182,Country 99360,City,182,Country 99390,City,182,Country 99469,City,182,Country 99498,City,182,Country 99507,City,182,Country 99555,City,182,Country 99576,City,182,Country 99591,City,182,Country 99603,City,182,Country 99648,City,182,Country 99649,City,182,Country 99658,City,182,Country 99680,City,182,Country 99693,City,182,Country 99697,City,182,Country 99712,City,182,Country 99770,City,182,Country 99798,City,182,Country 99885,City,182,Country 99893,City,182,Country 99989,City,182,Country 100008,City,182,Country 100146,City,182,Country 100204,City,182,Country 100332,City,182,Country 100372,City,182,Country 100434,City,182,Country 100485,City,182,Country 100506,City,182,Country 100553,City,182,Country 100560,City,182,Country 100569,City,182,Country 100625,City,182,Country 100671,City,182,Country 100729,City,182,Country 100728,City,182,Country 100826,City,182,Country 100831,City,182,Country 100839,City,182,Country 100838,City,182,Country 100987,City,182,Country 100998,City,182,Country 101013,City,182,Country 101034,City,182,Country 101041,City,182,Country 101047,City,182,Country 101091,City,182,Country 101102,City,182,Country 101167,City,182,Country 101193,City,182,Country 101274,City,182,Country 101336,City,182,Country 101377,City,182,Country 101379,City,182,Country 101385,City,182,Country 101397,City,182,Country 101398,City,182,Country 101491,City,182,Country 101498,City,182,Country 101509,City,182,Country 101556,City,182,Country 101561,City,182,Country 101699,City,182,Country 101709,City,182,Country 101719,City,182,Country 101805,City,182,Country 101853,City,182,Country 101854,City,182,Country 101874,City,182,Country 101877,City,182,Country 101903,City,182,Country 101904,City,182,Country 102020,City,182,Country 102053,City,182,Country 102062,City,182,Country 102136,City,182,Country 102200,City,182,Country 102207,City,182,Country 102262,City,182,Country 102288,City,182,Country 102312,City,182,Country 102320,City,182,Country 102346,City,182,Country 102348,City,182,Country 102361,City,182,Country 102362,City,182,Country 102404,City,182,Country 102411,City,182,Country 102413,City,182,Country 102414,City,182,Country 102426,City,182,Country 102435,City,182,Country 102451,City,182,Country 102468,City,182,Country 102483,City,182,Country 102498,City,182,Country 102522,City,182,Country 102541,City,182,Country 98010,City,182,Country 98023,City,182,Country 98116,City,182,Country 98117,City,182,Country 98244,City,182,Country 98245,City,182,Country 98291,City,182,Country 98292,City,182,Country 98293,City,182,Country 98294,City,182,Country 98301,City,182,Country 98302,City,182,Country 98315,City,182,Country 98596,City,182,Country 98597,City,182,Country 98751,City,182,Country 98752,City,182,Country 98784,City,182,Country 98925,City,182,Country 98932,City,182,Country 98986,City,182,Country 98987,City,182,Country 99289,City,182,Country 99349,City,182,Country 99512,City,182,Country 99554,City,182,Country 99553,City,182,Country 99609,City,182,Country 99610,City,182,Country 99632,City,182,Country 99633,City,182,Country 100664,City,182,Country 100700,City,182,Country 100819,City,182,Country 101552,City,182,Country 101553,City,182,Country 101730,City,182,Country 101825,City,182,Country 101826,City,182,Country 102099,City,182,Country 102098,City,182,Country 102365,City,182,Country 102367,City,182,Country 102538,City,182,Country 102539,City,182,Country 102626,City,182,Country 102627,City,182,Country 97672,City,182,Country 98349,City,182,Country 98409,City,182,Country 98552,City,182,Country 98999,City,182,Country 99730,City,182,Country 100028,City,182,Country 100439,City,182,Country 100419,City,182,Country 100441,City,182,Country 100442,City,182,Country 100476,City,182,Country 100528,City,182,Country 101226,City,182,Country 101372,City,182,Country 101435,City,182,Country 101542,City,182,Country 101685,City,182,Country 101748,City,182,Country 102068,City,182,Country 102137,City,182,Country 102461,City,182,Country 98530,City,182,Country 99039,City,182,Country 99040,City,182,Country 99271,City,182,Country 99305,City,182,Country 99500,City,182,Country 99501,City,182,Country 99793,City,182,Country 99794,City,182,Country 99842,City,182,Country 99843,City,182,Country 99937,City,182,Country 99964,City,182,Country 99965,City,182,Country 100315,City,182,Country 100478,City,182,Country 100479,City,182,Country 100541,City,182,Country 100542,City,182,Country 100765,City,182,Country 100848,City,182,Country 101188,City,182,Country 101189,City,182,Country 101510,City,182,Country 101514,City,182,Country 101678,City,182,Country 101683,City,182,Country 102306,City,182,Country 102369,City,182,Country 102371,City,182,Country 102581,City,182,Country 102597,City,182,Country 102598,City,182,Country 102779,City,182,Country 102780,City,182,Country 97605,City,182,Country 97613,City,182,Country 97634,City,182,Country 97744,City,182,Country 97924,City,182,Country 97938,City,182,Country 97971,City,182,Country 98052,City,182,Country 98190,City,182,Country 98185,City,182,Country 98250,City,182,Country 98514,City,182,Country 98509,City,182,Country 98735,City,182,Country 98848,City,182,Country 99132,City,182,Country 99142,City,182,Country 99248,City,182,Country 99262,City,182,Country 99281,City,182,Country 99482,City,182,Country 99511,City,182,Country 99561,City,182,Country 99582,City,182,Country 99621,City,182,Country 99622,City,182,Country 99529,City,182,Country 99696,City,182,Country 99718,City,182,Country 99808,City,182,Country 99817,City,182,Country 99874,City,182,Country 99894,City,182,Country 99972,City,182,Country 99977,City,182,Country 100046,City,182,Country 100091,City,182,Country 100147,City,182,Country 100148,City,182,Country 100219,City,182,Country 100243,City,182,Country 100250,City,182,Country 100259,City,182,Country 100328,City,182,Country 100358,City,182,Country 100360,City,182,Country 100395,City,182,Country 100461,City,182,Country 100462,City,182,Country 100490,City,182,Country 100505,City,182,Country 100750,City,182,Country 100812,City,182,Country 100934,City,182,Country 101005,City,182,Country 101018,City,182,Country 101043,City,182,Country 101200,City,182,Country 101206,City,182,Country 101277,City,182,Country 101279,City,182,Country 101408,City,182,Country 101432,City,182,Country 101441,City,182,Country 101460,City,182,Country 101630,City,182,Country 101710,City,182,Country 101741,City,182,Country 101812,City,182,Country 101879,City,182,Country 101912,City,182,Country 101926,City,182,Country 101937,City,182,Country 101945,City,182,Country 101995,City,182,Country 102174,City,182,Country 102204,City,182,Country 102205,City,182,Country 102291,City,182,Country 102333,City,182,Country 102379,City,182,Country 102395,City,182,Country 102397,City,182,Country 102432,City,182,Country 102501,City,182,Country 102506,City,182,Country 102629,City,182,Country 102641,City,182,Country 102698,City,182,Country 102746,City,182,Country 102784,City,182,Country 102791,City,182,Country 97553,City,182,Country 97578,City,182,Country 97628,City,182,Country 97630,City,182,Country 97636,City,182,Country 97650,City,182,Country 97665,City,182,Country 97699,City,182,Country 97700,City,182,Country 97710,City,182,Country 97722,City,182,Country 97723,City,182,Country 97760,City,182,Country 97765,City,182,Country 97773,City,182,Country 97774,City,182,Country 97800,City,182,Country 97803,City,182,Country 97858,City,182,Country 97860,City,182,Country 97883,City,182,Country 97931,City,182,Country 97939,City,182,Country 97970,City,182,Country 97988,City,182,Country 98000,City,182,Country 98013,City,182,Country 97998,City,182,Country 98053,City,182,Country 98058,City,182,Country 98063,City,182,Country 98098,City,182,Country 98121,City,182,Country 98135,City,182,Country 98161,City,182,Country 98169,City,182,Country 98187,City,182,Country 98207,City,182,Country 98211,City,182,Country 98224,City,182,Country 98243,City,182,Country 98252,City,182,Country 98255,City,182,Country 98257,City,182,Country 98260,City,182,Country 98285,City,182,Country 98287,City,182,Country 98288,City,182,Country 98300,City,182,Country 98307,City,182,Country 98308,City,182,Country 98320,City,182,Country 98321,City,182,Country 98325,City,182,Country 98329,City,182,Country 98337,City,182,Country 98343,City,182,Country 98368,City,182,Country 98371,City,182,Country 98385,City,182,Country 98386,City,182,Country 98387,City,182,Country 98418,City,182,Country 98424,City,182,Country 98425,City,182,Country 98431,City,182,Country 98435,City,182,Country 98439,City,182,Country 98440,City,182,Country 98441,City,182,Country 98506,City,182,Country 98527,City,182,Country 98528,City,182,Country 98567,City,182,Country 98583,City,182,Country 98625,City,182,Country 98641,City,182,Country 98653,City,182,Country 98654,City,182,Country 98657,City,182,Country 98668,City,182,Country 98671,City,182,Country 98720,City,182,Country 98721,City,182,Country 98736,City,182,Country 98754,City,182,Country 98763,City,182,Country 98881,City,182,Country 98893,City,182,Country 98902,City,182,Country 98942,City,182,Country 98980,City,182,Country 98981,City,182,Country 99006,City,182,Country 99008,City,182,Country 99010,City,182,Country 99035,City,182,Country 99102,City,182,Country 99104,City,182,Country 99105,City,182,Country 99141,City,182,Country 99143,City,182,Country 99152,City,182,Country 99166,City,182,Country 99184,City,182,Country 99188,City,182,Country 99201,City,182,Country 99205,City,182,Country 99214,City,182,Country 99215,City,182,Country 99238,City,182,Country 99243,City,182,Country 99245,City,182,Country 99264,City,182,Country 99276,City,182,Country 99285,City,182,Country 99291,City,182,Country 99303,City,182,Country 99309,City,182,Country 99355,City,182,Country 99357,City,182,Country 99374,City,182,Country 99386,City,182,Country 99394,City,182,Country 99416,City,182,Country 99449,City,182,Country 99461,City,182,Country 99471,City,182,Country 99489,City,182,Country 99728,City,182,Country 99573,City,182,Country 99575,City,182,Country 99595,City,182,Country 99597,City,182,Country 99602,City,182,Country 99616,City,182,Country 99627,City,182,Country 99646,City,182,Country 99663,City,182,Country 99666,City,182,Country 99669,City,182,Country 99670,City,182,Country 99676,City,182,Country 99681,City,182,Country 99684,City,182,Country 99711,City,182,Country 99713,City,182,Country 99714,City,182,Country 99721,City,182,Country 99749,City,182,Country 99750,City,182,Country 99756,City,182,Country 99772,City,182,Country 99778,City,182,Country 99791,City,182,Country 99847,City,182,Country 99856,City,182,Country 99861,City,182,Country 99868,City,182,Country 99907,City,182,Country 99908,City,182,Country 99927,City,182,Country 99953,City,182,Country 99959,City,182,Country 99980,City,182,Country 99985,City,182,Country 99986,City,182,Country 100004,City,182,Country 100034,City,182,Country 100035,City,182,Country 100051,City,182,Country 100059,City,182,Country 100074,City,182,Country 100094,City,182,Country 100102,City,182,Country 100139,City,182,Country 100191,City,182,Country 100192,City,182,Country 100193,City,182,Country 100218,City,182,Country 100246,City,182,Country 100280,City,182,Country 100283,City,182,Country 100307,City,182,Country 100331,City,182,Country 100341,City,182,Country 100367,City,182,Country 100387,City,182,Country 100391,City,182,Country 100398,City,182,Country 100399,City,182,Country 100412,City,182,Country 100418,City,182,Country 100452,City,182,Country 100463,City,182,Country 100464,City,182,Country 100481,City,182,Country 100493,City,182,Country 100501,City,182,Country 100525,City,182,Country 100521,City,182,Country 100522,City,182,Country 100575,City,182,Country 100577,City,182,Country 100583,City,182,Country 100606,City,182,Country 100619,City,182,Country 100632,City,182,Country 100634,City,182,Country 100657,City,182,Country 100661,City,182,Country 100683,City,182,Country 100724,City,182,Country 100725,City,182,Country 100772,City,182,Country 100788,City,182,Country 100783,City,182,Country 100790,City,182,Country 100791,City,182,Country 100803,City,182,Country 100865,City,182,Country 100871,City,182,Country 100894,City,182,Country 100895,City,182,Country 100898,City,182,Country 100900,City,182,Country 100925,City,182,Country 100926,City,182,Country 100928,City,182,Country 100931,City,182,Country 100935,City,182,Country 100936,City,182,Country 100953,City,182,Country 100956,City,182,Country 100965,City,182,Country 100967,City,182,Country 100978,City,182,Country 100981,City,182,Country 100997,City,182,Country 101014,City,182,Country 101027,City,182,Country 101037,City,182,Country 101040,City,182,Country 101054,City,182,Country 101059,City,182,Country 101081,City,182,Country 101136,City,182,Country 101138,City,182,Country 101160,City,182,Country 101170,City,182,Country 101168,City,182,Country 101175,City,182,Country 101177,City,182,Country 101182,City,182,Country 101183,City,182,Country 101191,City,182,Country 101192,City,182,Country 101207,City,182,Country 101232,City,182,Country 101237,City,182,Country 101238,City,182,Country 101272,City,182,Country 101273,City,182,Country 101275,City,182,Country 101281,City,182,Country 101299,City,182,Country 101306,City,182,Country 101308,City,182,Country 101332,City,182,Country 101387,City,182,Country 101388,City,182,Country 101391,City,182,Country 101422,City,182,Country 101430,City,182,Country 101453,City,182,Country 101454,City,182,Country 101525,City,182,Country 101560,City,182,Country 101622,City,182,Country 101632,City,182,Country 101638,City,182,Country 101639,City,182,Country 101695,City,182,Country 101698,City,182,Country 101723,City,182,Country 101750,City,182,Country 101751,City,182,Country 101769,City,182,Country 101841,City,182,Country 101884,City,182,Country 101922,City,182,Country 101960,City,182,Country 101961,City,182,Country 102021,City,182,Country 102154,City,182,Country 102167,City,182,Country 102227,City,182,Country 102229,City,182,Country 102302,City,182,Country 102314,City,182,Country 102317,City,182,Country 102332,City,182,Country 102353,City,182,Country 102356,City,182,Country 102357,City,182,Country 102388,City,182,Country 102390,City,182,Country 102402,City,182,Country 102449,City,182,Country 102465,City,182,Country 102471,City,182,Country 102477,City,182,Country 102479,City,182,Country 102497,City,182,Country 102525,City,182,Country 102549,City,182,Country 102569,City,182,Country 102573,City,182,Country 102583,City,182,Country 102628,City,182,Country 102649,City,182,Country 102650,City,182,Country 102656,City,182,Country 102663,City,182,Country 102700,City,182,Country 102715,City,182,Country 102717,City,182,Country 102732,City,182,Country 102737,City,182,Country 102740,City,182,Country 102743,City,182,Country 102778,City,182,Country 97488,City,182,Country 97511,City,182,Country 97556,City,182,Country 97649,City,182,Country 98445,City,182,Country 98837,City,182,Country 98838,City,182,Country 99064,City,182,Country 99156,City,182,Country 99136,City,182,Country 99252,City,182,Country 99253,City,182,Country 99673,City,182,Country 99674,City,182,Country 99950,City,182,Country 99957,City,182,Country 100009,City,182,Country 100010,City,182,Country 100130,City,182,Country 100420,City,182,Country 100497,City,182,Country 100584,City,182,Country 100585,City,182,Country 100762,City,182,Country 100763,City,182,Country 100796,City,182,Country 100968,City,182,Country 101002,City,182,Country 101069,City,182,Country 101218,City,182,Country 101219,City,182,Country 101338,City,182,Country 101424,City,182,Country 101831,City,182,Country 101839,City,182,Country 102055,City,182,Country 102241,City,182,Country 102303,City,182,Country 102446,City,182,Country 102645,City,182,Country 102647,City,182,Country 102692,City,182,Country 98710,City,182,Country 100057,City,182,Country 97510,City,182,Country 97691,City,182,Country 97655,City,182,Country 97657,City,182,Country 97688,City,182,Country 97689,City,182,Country 97741,City,182,Country 97954,City,182,Country 97968,City,182,Country 97969,City,182,Country 98003,City,182,Country 98012,City,182,Country 98014,City,182,Country 98015,City,182,Country 98019,City,182,Country 98021,City,182,Country 98078,City,182,Country 98087,City,182,Country 98175,City,182,Country 98202,City,182,Country 98206,City,182,Country 98239,City,182,Country 98240,City,182,Country 98278,City,182,Country 98322,City,182,Country 98367,City,182,Country 98436,City,182,Country 98448,City,182,Country 98488,City,182,Country 98517,City,182,Country 98518,City,182,Country 98558,City,182,Country 98559,City,182,Country 98585,City,182,Country 98648,City,182,Country 98662,City,182,Country 98666,City,182,Country 99114,City,182,Country 99254,City,182,Country 99279,City,182,Country 99330,City,182,Country 99381,City,182,Country 99411,City,182,Country 99430,City,182,Country 99630,City,182,Country 99687,City,182,Country 99690,City,182,Country 99691,City,182,Country 99707,City,182,Country 99999,City,182,Country 100000,City,182,Country 100070,City,182,Country 100089,City,182,Country 100173,City,182,Country 100199,City,182,Country 100308,City,182,Country 100533,City,182,Country 100570,City,182,Country 100578,City,182,Country 100609,City,182,Country 100614,City,182,Country 100616,City,182,Country 100630,City,182,Country 100672,City,182,Country 100673,City,182,Country 100692,City,182,Country 100708,City,182,Country 100709,City,182,Country 100723,City,182,Country 100874,City,182,Country 100891,City,182,Country 100914,City,182,Country 100921,City,182,Country 100964,City,182,Country 101122,City,182,Country 101131,City,182,Country 101134,City,182,Country 101145,City,182,Country 101146,City,182,Country 101169,City,182,Country 101179,City,182,Country 101180,City,182,Country 101242,City,182,Country 101259,City,182,Country 101260,City,182,Country 101268,City,182,Country 101320,City,182,Country 101380,City,182,Country 101419,City,182,Country 101443,City,182,Country 101495,City,182,Country 101497,City,182,Country 101530,City,182,Country 101533,City,182,Country 101651,City,182,Country 101679,City,182,Country 101720,City,182,Country 101773,City,182,Country 101889,City,182,Country 101891,City,182,Country 101944,City,182,Country 101969,City,182,Country 102072,City,182,Country 102076,City,182,Country 102168,City,182,Country 102169,City,182,Country 102170,City,182,Country 102178,City,182,Country 102193,City,182,Country 102194,City,182,Country 102197,City,182,Country 102295,City,182,Country 102297,City,182,Country 102298,City,182,Country 102307,City,182,Country 102329,City,182,Country 102351,City,182,Country 102384,City,182,Country 102387,City,182,Country 102389,City,182,Country 102393,City,182,Country 102410,City,182,Country 102433,City,182,Country 102455,City,182,Country 102586,City,182,Country 102680,City,182,Country 102702,City,182,Country 97812,City,182,Country 97813,City,182,Country 98034,City,182,Country 98035,City,182,Country 98214,City,182,Country 98215,City,182,Country 98261,City,182,Country 98262,City,182,Country 98992,City,182,Country 98998,City,182,Country 99029,City,182,Country 99030,City,182,Country 99301,City,182,Country 99387,City,182,Country 99389,City,182,Country 99391,City,182,Country 99434,City,182,Country 99722,City,182,Country 99723,City,182,Country 99753,City,182,Country 99766,City,182,Country 99789,City,182,Country 99790,City,182,Country 99973,City,182,Country 99974,City,182,Country 100080,City,182,Country 100213,City,182,Country 100416,City,182,Country 100417,City,182,Country 100454,City,182,Country 100537,City,182,Country 100547,City,182,Country 100548,City,182,Country 100638,City,182,Country 100639,City,182,Country 100712,City,182,Country 100711,City,182,Country 100862,City,182,Country 101321,City,182,Country 101322,City,182,Country 101473,City,182,Country 101447,City,182,Country 101563,City,182,Country 101592,City,182,Country 102036,City,182,Country 102151,City,182,Country 102179,City,182,Country 102180,City,182,Country 102211,City,182,Country 102347,City,182,Country 102363,City,182,Country 102364,City,182,Country 102521,City,182,Country 102660,City,182,Country 97527,City,182,Country 97751,City,182,Country 97790,City,182,Country 97805,City,182,Country 97888,City,182,Country 97997,City,182,Country 98114,City,182,Country 98154,City,182,Country 98219,City,182,Country 98318,City,182,Country 98342,City,182,Country 98541,City,182,Country 98711,City,182,Country 98712,City,182,Country 98869,City,182,Country 98878,City,182,Country 99119,City,182,Country 99121,City,182,Country 99157,City,182,Country 99153,City,182,Country 99329,City,182,Country 99358,City,182,Country 99392,City,182,Country 99422,City,182,Country 99451,City,182,Country 99493,City,182,Country 99520,City,182,Country 99631,City,182,Country 99640,City,182,Country 99812,City,182,Country 99813,City,182,Country 99938,City,182,Country 99975,City,182,Country 99976,City,182,Country 100264,City,182,Country 100302,City,182,Country 100303,City,182,Country 100394,City,182,Country 100458,City,182,Country 100459,City,182,Country 100757,City,182,Country 100861,City,182,Country 101066,City,182,Country 101205,City,182,Country 101209,City,182,Country 101444,City,182,Country 101555,City,182,Country 101693,City,182,Country 101786,City,182,Country 101792,City,182,Country 101795,City,182,Country 101869,City,182,Country 101878,City,182,Country 102012,City,182,Country 102139,City,182,Country 102224,City,182,Country 102234,City,182,Country 102496,City,182,Country 102688,City,182,Country 97735,City,182,Country 97891,City,182,Country 98005,City,182,Country 98162,City,182,Country 98694,City,182,Country 98779,City,182,Country 99145,City,182,Country 99209,City,182,Country 99342,City,182,Country 99380,City,182,Country 99402,City,182,Country 99404,City,182,Country 99698,City,182,Country 99717,City,182,Country 100014,City,182,Country 100016,City,182,Country 100079,City,182,Country 100184,City,182,Country 100272,City,182,Country 100326,City,182,Country 100397,City,182,Country 100406,City,182,Country 100440,City,182,Country 100566,City,182,Country 100759,City,182,Country 101008,City,182,Country 101029,City,182,Country 101117,City,182,Country 101147,City,182,Country 101304,City,182,Country 101768,City,182,Country 101801,City,182,Country 101845,City,182,Country 101913,City,182,Country 102000,City,182,Country 102121,City,182,Country 102324,City,182,Country 102763,City,182,Country 97485,City,182,Country 97501,City,182,Country 97557,City,182,Country 97695,City,182,Country 97877,City,182,Country 98069,City,182,Country 98096,City,182,Country 98305,City,182,Country 98396,City,182,Country 98465,City,182,Country 98645,City,182,Country 98872,City,182,Country 99149,City,182,Country 99312,City,182,Country 99323,City,182,Country 99345,City,182,Country 99365,City,182,Country 99467,City,182,Country 99490,City,182,Country 99513,City,182,Country 99514,City,182,Country 99816,City,182,Country 99840,City,182,Country 100127,City,182,Country 100157,City,182,Country 100274,City,182,Country 100275,City,182,Country 100290,City,182,Country 100296,City,182,Country 100316,City,182,Country 100465,City,182,Country 100480,City,182,Country 100608,City,182,Country 100702,City,182,Country 100718,City,182,Country 100821,City,182,Country 101076,City,182,Country 101106,City,182,Country 101107,City,182,Country 101204,City,182,Country 101262,City,182,Country 101317,City,182,Country 101472,City,182,Country 101477,City,182,Country 101557,City,182,Country 101708,City,182,Country 101787,City,182,Country 101793,City,182,Country 101906,City,182,Country 102004,City,182,Country 102515,City,182,Country 102540,City,182,Country 97991,City,182,Country 97992,City,182,Country 98286,City,182,Country 98496,City,182,Country 99002,City,182,Country 99011,City,182,Country 99148,City,182,Country 99219,City,182,Country 99287,City,182,Country 99396,City,182,Country 99644,City,182,Country 99762,City,182,Country 99992,City,182,Country 100063,City,182,Country 100305,City,182,Country 100482,City,182,Country 100748,City,182,Country 101230,City,182,Country 101483,City,182,Country 101535,City,182,Country 101927,City,182,Country 102280,City,182,Country 102442,City,182,Country 102637,City,182,Country 102755,City,182,Country 102757,City,182,Country 102762,City,182,Country 97807,City,182,Country 97838,City,182,Country 97851,City,182,Country 97915,City,182,Country 97975,City,182,Country 98106,City,182,Country 98142,City,182,Country 98560,City,182,Country 98574,City,182,Country 98673,City,182,Country 98715,City,182,Country 98717,City,182,Country 98836,City,182,Country 99151,City,182,Country 99180,City,182,Country 99508,City,182,Country 99509,City,182,Country 99586,City,182,Country 99662,City,182,Country 99692,City,182,Country 99744,City,182,Country 99752,City,182,Country 99946,City,182,Country 100060,City,182,Country 100118,City,182,Country 100119,City,182,Country 100144,City,182,Country 100171,City,182,Country 100526,City,182,Country 100595,City,182,Country 100738,City,182,Country 100782,City,182,Country 101033,City,182,Country 101174,City,182,Country 101298,City,182,Country 101493,City,182,Country 101526,City,182,Country 101547,City,182,Country 101672,City,182,Country 101680,City,182,Country 101759,City,182,Country 102171,City,182,Country 102255,City,182,Country 102283,City,182,Country 102651,City,182,Country 102664,City,182,Country 102704,City,182,Country 97568,City,182,Country 97793,City,182,Country 97895,City,182,Country 97900,City,182,Country 98122,City,182,Country 98123,City,182,Country 98124,City,182,Country 98145,City,182,Country 98164,City,182,Country 98176,City,182,Country 98227,City,182,Country 98296,City,182,Country 98420,City,182,Country 98427,City,182,Country 98432,City,182,Country 98437,City,182,Country 98455,City,182,Country 98467,City,182,Country 98534,City,182,Country 98586,City,182,Country 98601,City,182,Country 98792,City,182,Country 98861,City,182,Country 98941,City,182,Country 99087,City,182,Country 99120,City,182,Country 99160,City,182,Country 99182,City,182,Country 99224,City,182,Country 99322,City,182,Country 99340,City,182,Country 99423,City,182,Country 99428,City,182,Country 99436,City,182,Country 99446,City,182,Country 99497,City,182,Country 99645,City,182,Country 99703,City,182,Country 99710,City,182,Country 99823,City,182,Country 99860,City,182,Country 100362,City,182,Country 100379,City,182,Country 100380,City,182,Country 100396,City,182,Country 100402,City,182,Country 100457,City,182,Country 100484,City,182,Country 100511,City,182,Country 100561,City,182,Country 100576,City,182,Country 100611,City,182,Country 100751,City,182,Country 100799,City,182,Country 101111,City,182,Country 101124,City,182,Country 101210,City,182,Country 101239,City,182,Country 101331,City,182,Country 101350,City,182,Country 101382,City,182,Country 101433,City,182,Country 101451,City,182,Country 101658,City,182,Country 101725,City,182,Country 102009,City,182,Country 102032,City,182,Country 102041,City,182,Country 102101,City,182,Country 102123,City,182,Country 102130,City,182,Country 102228,City,182,Country 102237,City,182,Country 102518,City,182,Country 102547,City,182,Country 102584,City,182,Country 102585,City,182,Country 102587,City,182,Country 102599,City,182,Country 102609,City,182,Country 102621,City,182,Country 102783,City,182,Country 102789,City,182,Country 97644,City,182,Country 97645,City,182,Country 97678,City,182,Country 97686,City,182,Country 97789,City,182,Country 97946,City,182,Country 98008,City,182,Country 98166,City,182,Country 98167,City,182,Country 98182,City,182,Country 98208,City,182,Country 98217,City,182,Country 98237,City,182,Country 98238,City,182,Country 98323,City,182,Country 98356,City,182,Country 98392,City,182,Country 98433,City,182,Country 98532,City,182,Country 98545,City,182,Country 98580,City,182,Country 98730,City,182,Country 98823,City,182,Country 98814,City,182,Country 98912,City,182,Country 98969,City,182,Country 99007,City,182,Country 99069,City,182,Country 99113,City,182,Country 99275,City,182,Country 99331,City,182,Country 99550,City,182,Country 99551,City,182,Country 99605,City,182,Country 99635,City,182,Country 99642,City,182,Country 99678,City,182,Country 99679,City,182,Country 99700,City,182,Country 99898,City,182,Country 99903,City,182,Country 99935,City,182,Country 99955,City,182,Country 100040,City,182,Country 100052,City,182,Country 100271,City,182,Country 100285,City,182,Country 100298,City,182,Country 100312,City,182,Country 100339,City,182,Country 100431,City,182,Country 100555,City,182,Country 100695,City,182,Country 100737,City,182,Country 100743,City,182,Country 100771,City,182,Country 100811,City,182,Country 100832,City,182,Country 100905,City,182,Country 100950,City,182,Country 100966,City,182,Country 100988,City,182,Country 101021,City,182,Country 101026,City,182,Country 101031,City,182,Country 101181,City,182,Country 101333,City,182,Country 101334,City,182,Country 101341,City,182,Country 101384,City,182,Country 101404,City,182,Country 101420,City,182,Country 101528,City,182,Country 101532,City,182,Country 101534,City,182,Country 101700,City,182,Country 101800,City,182,Country 101833,City,182,Country 101933,City,182,Country 102030,City,182,Country 102037,City,182,Country 102105,City,182,Country 102327,City,182,Country 102330,City,182,Country 102372,City,182,Country 102338,City,182,Country 102400,City,182,Country 102406,City,182,Country 102412,City,182,Country 102466,City,182,Country 102470,City,182,Country 102502,City,182,Country 102530,City,182,Country 102661,City,182,Country 102677,City,182,Country 102712,City,182,Country 97919,City,182,Country 98256,City,182,Country 98290,City,182,Country 98470,City,182,Country 98471,City,182,Country 98630,City,182,Country 98745,City,182,Country 99302,City,182,Country 99368,City,182,Country 99448,City,182,Country 99651,City,182,Country 100115,City,182,Country 100291,City,182,Country 100292,City,182,Country 100309,City,182,Country 100310,City,182,Country 100343,City,182,Country 100455,City,182,Country 100496,City,182,Country 100498,City,182,Country 100531,City,182,Country 100532,City,182,Country 100588,City,182,Country 100589,City,182,Country 100704,City,182,Country 100777,City,182,Country 100778,City,182,Country 100881,City,182,Country 100882,City,182,Country 100899,City,182,Country 100901,City,182,Country 100902,City,182,Country 100903,City,182,Country 100918,City,182,Country 100919,City,182,Country 101143,City,182,Country 101144,City,182,Country 101197,City,182,Country 101633,City,182,Country 101634,City,182,Country 102147,City,182,Country 102213,City,182,Country 102215,City,182,Country 102425,City,182,Country 97476,City,182,Country 97506,City,182,Country 97507,City,182,Country 97871,City,182,Country 97953,City,182,Country 98309,City,182,Country 98395,City,182,Country 98486,City,182,Country 98487,City,182,Country 98816,City,182,Country 98961,City,182,Country 98974,City,182,Country 98988,City,182,Country 99227,City,182,Country 99228,City,182,Country 99315,City,182,Country 99317,City,182,Country 99503,City,182,Country 99819,City,182,Country 99820,City,182,Country 99821,City,182,Country 100065,City,182,Country 100768,City,182,Country 101339,City,182,Country 101340,City,182,Country 101742,City,182,Country 101743,City,182,Country 101844,City,182,Country 101867,City,182,Country 102458,City,182,Country 97492,City,182,Country 97493,City,182,Country 97516,City,182,Country 97552,City,182,Country 97535,City,182,Country 97538,City,182,Country 97610,City,182,Country 97577,City,182,Country 97616,City,182,Country 97692,City,182,Country 97702,City,182,Country 97703,City,182,Country 97721,City,182,Country 97757,City,182,Country 97758,City,182,Country 97826,City,182,Country 97833,City,182,Country 97846,City,182,Country 97864,City,182,Country 97865,City,182,Country 97937,City,182,Country 97943,City,182,Country 97948,City,182,Country 98075,City,182,Country 98077,City,182,Country 98081,City,182,Country 98094,City,182,Country 98095,City,182,Country 98137,City,182,Country 98193,City,182,Country 98198,City,182,Country 98249,City,182,Country 98282,City,182,Country 98357,City,182,Country 98366,City,182,Country 98443,City,182,Country 98632,City,182,Country 98682,City,182,Country 98705,City,182,Country 98722,City,182,Country 98762,City,182,Country 98800,City,182,Country 98839,City,182,Country 98864,City,182,Country 98882,City,182,Country 98975,City,182,Country 99054,City,182,Country 99280,City,182,Country 99324,City,182,Country 99364,City,182,Country 99420,City,182,Country 99440,City,182,Country 99487,City,182,Country 99659,City,182,Country 99737,City,182,Country 99818,City,182,Country 99839,City,182,Country 99855,City,182,Country 99872,City,182,Country 99877,City,182,Country 99897,City,182,Country 99916,City,182,Country 99928,City,182,Country 99930,City,182,Country 99933,City,182,Country 99988,City,182,Country 100017,City,182,Country 100086,City,182,Country 100140,City,182,Country 100159,City,182,Country 100227,City,182,Country 100369,City,182,Country 100411,City,182,Country 100567,City,182,Country 100853,City,182,Country 100948,City,182,Country 101078,City,182,Country 101164,City,182,Country 101173,City,182,Country 101234,City,182,Country 101258,City,182,Country 101366,City,182,Country 101573,City,182,Country 101595,City,182,Country 101618,City,182,Country 101619,City,182,Country 101640,City,182,Country 101822,City,182,Country 101862,City,182,Country 101876,City,182,Country 101959,City,182,Country 101964,City,182,Country 101986,City,182,Country 102013,City,182,Country 102025,City,182,Country 102049,City,182,Country 102050,City,182,Country 102080,City,182,Country 102246,City,182,Country 102249,City,182,Country 102261,City,182,Country 102264,City,182,Country 102394,City,182,Country 102480,City,182,Country 102481,City,182,Country 102520,City,182,Country 102565,City,182,Country 102567,City,182,Country 102592,City,182,Country 102747,City,182,Country 102749,City,182,Country 97745,City,182,Country 97753,City,182,Country 97794,City,182,Country 97822,City,182,Country 97925,City,182,Country 98011,City,182,Country 98377,City,182,Country 98620,City,182,Country 98621,City,182,Country 98652,City,182,Country 98659,City,182,Country 98718,City,182,Country 98741,City,182,Country 98742,City,182,Country 98764,City,182,Country 99000,City,182,Country 99003,City,182,Country 99005,City,182,Country 99031,City,182,Country 99089,City,182,Country 99418,City,182,Country 99478,City,182,Country 99516,City,182,Country 99519,City,182,Country 99998,City,182,Country 99997,City,182,Country 100024,City,182,Country 100069,City,182,Country 100145,City,182,Country 100138,City,182,Country 100150,City,182,Country 100175,City,182,Country 100200,City,182,Country 100251,City,182,Country 100351,City,182,Country 100355,City,182,Country 100404,City,182,Country 100405,City,182,Country 100451,City,182,Country 100469,City,182,Country 100651,City,182,Country 100816,City,182,Country 100957,City,182,Country 101072,City,182,Country 101151,City,182,Country 101152,City,182,Country 101211,City,182,Country 101216,City,182,Country 101220,City,182,Country 101257,City,182,Country 101434,City,182,Country 101492,City,182,Country 101500,City,182,Country 101745,City,182,Country 101766,City,182,Country 101772,City,182,Country 101796,City,182,Country 101978,City,182,Country 101983,City,182,Country 102044,City,182,Country 102115,City,182,Country 102428,City,182,Country 102630,City,182,Country 102633,City,182,Country 102655,City,182,Country 102723,City,182,Country 97497,City,182,Country 97502,City,182,Country 97524,City,182,Country 97525,City,182,Country 97532,City,182,Country 97533,City,182,Country 97536,City,182,Country 97537,City,182,Country 97541,City,182,Country 97550,City,182,Country 97551,City,182,Country 97624,City,182,Country 97639,City,182,Country 97697,City,182,Country 97739,City,182,Country 97740,City,182,Country 97786,City,182,Country 97820,City,182,Country 97850,City,182,Country 97922,City,182,Country 98048,City,182,Country 98049,City,182,Country 98050,City,182,Country 98085,City,182,Country 98091,City,182,Country 98092,City,182,Country 98119,City,182,Country 98195,City,182,Country 98197,City,182,Country 98210,City,182,Country 98232,City,182,Country 98234,City,182,Country 98265,City,182,Country 98266,City,182,Country 98298,City,182,Country 98317,City,182,Country 98330,City,182,Country 98335,City,182,Country 98364,City,182,Country 98394,City,182,Country 98400,City,182,Country 98447,City,182,Country 98456,City,182,Country 98472,City,182,Country 98479,City,182,Country 98480,City,182,Country 98481,City,182,Country 98482,City,182,Country 98490,City,182,Country 98602,City,182,Country 98610,City,182,Country 98613,City,182,Country 98614,City,182,Country 98615,City,182,Country 98691,City,182,Country 98744,City,182,Country 98775,City,182,Country 98786,City,182,Country 98854,City,182,Country 98855,City,182,Country 98868,City,182,Country 98870,City,182,Country 98900,City,182,Country 98905,City,182,Country 98915,City,182,Country 98916,City,182,Country 98919,City,182,Country 98931,City,182,Country 98954,City,182,Country 98955,City,182,Country 98970,City,182,Country 98971,City,182,Country 98976,City,182,Country 98977,City,182,Country 98984,City,182,Country 98985,City,182,Country 99016,City,182,Country 99019,City,182,Country 99020,City,182,Country 99079,City,182,Country 99090,City,182,Country 99091,City,182,Country 99094,City,182,Country 99095,City,182,Country 99124,City,182,Country 99133,City,182,Country 99173,City,182,Country 99208,City,182,Country 99236,City,182,Country 99414,City,182,Country 99432,City,182,Country 99433,City,182,Country 99442,City,182,Country 99453,City,182,Country 99454,City,182,Country 99464,City,182,Country 99480,City,182,Country 99517,City,182,Country 99542,City,182,Country 99563,City,182,Country 99565,City,182,Country 99612,City,182,Country 99613,City,182,Country 99694,City,182,Country 99729,City,182,Country 99732,City,182,Country 99733,City,182,Country 99743,City,182,Country 99776,City,182,Country 99781,City,182,Country 99782,City,182,Country 99891,City,182,Country 99931,City,182,Country 99994,City,182,Country 100022,City,182,Country 100036,City,182,Country 100161,City,182,Country 100166,City,182,Country 100190,City,182,Country 100207,City,182,Country 100242,City,182,Country 100247,City,182,Country 100261,City,182,Country 100262,City,182,Country 100342,City,182,Country 100345,City,182,Country 100346,City,182,Country 100350,City,182,Country 100368,City,182,Country 100544,City,182,Country 100626,City,182,Country 100746,City,182,Country 101035,City,182,Country 101036,City,182,Country 101062,City,182,Country 101093,City,182,Country 101184,City,182,Country 101185,City,182,Country 101252,City,182,Country 101253,City,182,Country 101254,City,182,Country 101255,City,182,Country 101381,City,182,Country 101456,City,182,Country 101659,City,182,Country 101660,City,182,Country 101731,City,182,Country 101737,City,182,Country 101775,City,182,Country 101780,City,182,Country 101781,City,182,Country 101813,City,182,Country 101828,City,182,Country 101865,City,182,Country 101866,City,182,Country 101910,City,182,Country 101954,City,182,Country 101955,City,182,Country 101956,City,182,Country 101998,City,182,Country 102015,City,182,Country 102047,City,182,Country 102048,City,182,Country 102063,City,182,Country 102064,City,182,Country 102078,City,182,Country 102079,City,182,Country 102097,City,182,Country 102146,City,182,Country 102149,City,182,Country 102152,City,182,Country 102210,City,182,Country 102248,City,182,Country 102616,City,182,Country 102775,City,182,Country 97589,City,182,Country 97592,City,182,Country 98235,City,182,Country 98374,City,182,Country 98375,City,182,Country 98382,City,182,Country 98449,City,182,Country 98847,City,182,Country 98856,City,182,Country 99734,City,182,Country 99754,City,182,Country 99755,City,182,Country 100078,City,182,Country 100077,City,182,Country 100112,City,182,Country 100178,City,182,Country 100878,City,182,Country 101073,City,182,Country 101605,City,182,Country 101666,City,182,Country 101668,City,182,Country 101677,City,182,Country 101916,City,182,Country 102260,City,182,Country 102409,City,182,Country 97680,City,182,Country 98389,City,182,Country 98562,City,182,Country 98563,City,182,Country 98636,City,182,Country 98637,City,182,Country 98901,City,182,Country 99174,City,182,Country 99773,City,182,Country 100852,City,182,Country 101065,City,182,Country 101123,City,182,Country 101516,City,182,Country 101921,City,182,Country 101936,City,182,Country 102508,City,182,Country 102509,City,182,Country 102511,City,182,Country 97857,City,182,Country 98038,City,182,Country 98223,City,182,Country 98405,City,182,Country 98492,City,182,Country 98782,City,182,Country 98939,City,182,Country 98965,City,182,Country 98978,City,182,Country 99181,City,182,Country 99240,City,182,Country 99515,City,182,Country 99538,City,182,Country 99560,City,182,Country 99671,City,182,Country 99706,City,182,Country 99814,City,182,Country 99848,City,182,Country 100023,City,182,Country 100042,City,182,Country 100424,City,182,Country 100665,City,182,Country 100674,City,182,Country 100688,City,182,Country 100689,City,182,Country 100780,City,182,Country 100792,City,182,Country 100837,City,182,Country 100876,City,182,Country 100888,City,182,Country 100908,City,182,Country 100920,City,182,Country 101028,City,182,Country 101080,City,182,Country 101149,City,182,Country 101250,City,182,Country 101294,City,182,Country 101353,City,182,Country 101361,City,182,Country 101481,City,182,Country 101480,City,182,Country 101656,City,182,Country 101669,City,182,Country 101670,City,182,Country 102419,City,182,Country 102485,City,182,Country 102484,City,182,Country 102608,City,182,Country 97478,City,182,Country 97479,City,182,Country 97484,City,182,Country 97602,City,182,Country 97704,City,182,Country 97880,City,182,Country 97917,City,182,Country 97941,City,182,Country 97979,City,182,Country 97980,City,182,Country 98191,City,182,Country 98170,City,182,Country 99165,City,182,Country 99827,City,182,Country 100730,City,182,Country 101139,City,182,Country 101326,City,182,Country 101479,City,182,Country 101790,City,182,Country 101963,City,182,Country 102113,City,182,Country 102284,City,182,Country 97654,City,182,Country 97656,City,182,Country 97709,City,182,Country 97717,City,182,Country 97718,City,182,Country 97719,City,182,Country 97792,City,182,Country 98002,City,182,Country 98112,City,182,Country 98113,City,182,Country 98675,City,182,Country 98676,City,182,Country 98770,City,182,Country 98938,City,182,Country 99122,City,182,Country 99123,City,182,Country 99256,City,182,Country 99334,City,182,Country 99335,City,182,Country 99583,City,182,Country 99685,City,182,Country 99702,City,182,Country 99701,City,182,Country 100133,City,182,Country 100558,City,182,Country 100994,City,182,Country 100995,City,182,Country 101038,City,182,Country 101039,City,182,Country 101110,City,182,Country 101327,City,182,Country 101489,City,182,Country 101593,City,182,Country 101794,City,182,Country 101818,City,182,Country 101819,City,182,Country 101823,City,182,Country 101824,City,182,Country 101897,City,182,Country 101974,City,182,Country 102018,City,182,Country 102056,City,182,Country 102438,City,182,Country 102516,City,182,Country 102550,City,182,Country 102770,City,182,Country 102772,City,182,Country 102785,City,182,Country 97554,City,182,Country 97555,City,182,Country 97658,City,182,Country 97670,City,182,Country 97910,City,182,Country 98163,City,182,Country 98194,City,182,Country 98230,City,182,Country 98273,City,182,Country 98274,City,182,Country 98493,City,182,Country 98686,City,182,Country 98807,City,182,Country 98875,City,182,Country 99018,City,182,Country 99070,City,182,Country 99093,City,182,Country 99905,City,182,Country 99934,City,182,Country 99984,City,182,Country 100194,City,182,Country 100565,City,182,Country 100804,City,182,Country 100822,City,182,Country 101667,City,182,Country 101779,City,182,Country 101837,City,182,Country 101923,City,182,Country 102252,City,182,Country 102325,City,182,Country 102754,City,182,Country 97522,City,182,Country 97523,City,182,Country 97545,City,182,Country 97546,City,182,Country 97547,City,182,Country 97549,City,182,Country 97607,City,182,Country 97608,City,182,Country 97609,City,182,Country 97581,City,182,Country 97582,City,182,Country 97647,City,182,Country 97648,City,182,Country 97681,City,182,Country 97682,City,182,Country 97716,City,182,Country 97730,City,182,Country 97733,City,182,Country 97780,City,182,Country 97781,City,182,Country 97818,City,182,Country 97819,City,182,Country 97831,City,182,Country 97930,City,182,Country 97964,City,182,Country 97990,City,182,Country 98067,City,182,Country 98068,City,182,Country 98071,City,182,Country 98072,City,182,Country 98150,City,182,Country 98152,City,182,Country 98200,City,182,Country 98201,City,182,Country 98327,City,182,Country 98372,City,182,Country 98548,City,182,Country 98551,City,182,Country 98553,City,182,Country 98555,City,182,Country 98556,City,182,Country 98557,City,182,Country 98827,City,182,Country 98852,City,182,Country 98918,City,182,Country 98926,City,182,Country 99425,City,182,Country 99426,City,182,Country 99496,City,182,Country 99535,City,182,Country 99536,City,182,Country 99566,City,182,Country 99567,City,182,Country 99677,City,182,Country 99774,City,182,Country 99775,City,182,Country 99863,City,182,Country 99865,City,182,Country 99866,City,182,Country 99867,City,182,Country 100019,City,182,Country 100021,City,182,Country 100037,City,182,Country 100155,City,182,Country 100156,City,182,Country 100180,City,182,Country 100183,City,182,Country 100300,City,182,Country 100301,City,182,Country 100370,City,182,Country 100371,City,182,Country 100488,City,182,Country 100641,City,182,Country 100642,City,182,Country 101032,City,182,Country 101050,City,182,Country 101051,City,182,Country 101061,City,182,Country 101120,City,182,Country 101121,City,182,Country 101295,City,182,Country 101344,City,182,Country 101531,City,182,Country 101600,City,182,Country 101601,City,182,Country 101621,City,182,Country 101711,City,182,Country 101842,City,182,Country 101843,City,182,Country 101965,City,182,Country 102002,City,182,Country 102003,City,182,Country 102090,City,182,Country 102198,City,182,Country 102243,City,182,Country 102259,City,182,Country 102444,City,182,Country 102448,City,182,Country 102532,City,182,Country 102533,City,182,Country 102610,City,182,Country 102631,City,182,Country 102632,City,182,Country 102694,City,182,Country 102693,City,182,Country 97542,City,182,Country 97598,City,182,Country 97622,City,182,Country 97731,City,182,Country 97734,City,182,Country 97752,City,182,Country 97811,City,182,Country 97842,City,182,Country 97985,City,182,Country 98101,City,182,Country 98110,City,182,Country 98186,City,182,Country 98310,City,182,Country 98311,City,182,Country 98340,City,182,Country 98489,City,182,Country 98501,City,182,Country 98538,City,182,Country 98540,City,182,Country 98595,City,182,Country 98608,City,182,Country 98612,City,182,Country 98776,City,182,Country 98785,City,182,Country 98818,City,182,Country 98819,City,182,Country 98890,City,182,Country 98927,City,182,Country 99066,City,182,Country 99134,City,182,Country 99189,City,182,Country 99284,City,182,Country 99293,City,182,Country 99341,City,182,Country 99344,City,182,Country 99373,City,182,Country 99385,City,182,Country 99395,City,182,Country 99407,City,182,Country 99431,City,182,Country 99494,City,182,Country 99607,City,182,Country 99625,City,182,Country 99626,City,182,Country 99806,City,182,Country 99809,City,182,Country 99815,City,182,Country 99832,City,182,Country 99838,City,182,Country 99857,City,182,Country 99910,City,182,Country 99912,City,182,Country 99913,City,182,Country 99966,City,182,Country 100082,City,182,Country 100137,City,182,Country 100226,City,182,Country 100228,City,182,Country 100235,City,182,Country 100297,City,182,Country 100354,City,182,Country 100384,City,182,Country 100436,City,182,Country 100473,City,182,Country 100612,City,182,Country 100631,City,182,Country 100633,City,182,Country 100747,City,182,Country 100781,City,182,Country 100829,City,182,Country 100863,City,182,Country 100944,City,182,Country 100960,City,182,Country 100975,City,182,Country 100976,City,182,Country 100990,City,182,Country 101007,City,182,Country 101083,City,182,Country 101086,City,182,Country 101088,City,182,Country 101097,City,182,Country 101163,City,182,Country 101241,City,182,Country 101337,City,182,Country 101374,City,182,Country 101378,City,182,Country 101438,City,182,Country 101507,City,182,Country 101565,City,182,Country 101575,City,182,Country 101740,City,182,Country 101756,City,182,Country 101765,City,182,Country 101770,City,182,Country 101798,City,182,Country 101938,City,182,Country 101949,City,182,Country 102028,City,182,Country 102031,City,182,Country 102118,City,182,Country 102292,City,182,Country 102289,City,182,Country 102344,City,182,Country 102524,City,182,Country 102668,City,182,Country 102707,City,182,Country 102734,City,182,Country 102748,City,182,Country 102781,City,182,Country 97564,City,182,Country 97754,City,182,Country 98213,City,182,Country 98623,City,182,Country 98747,City,182,Country 98769,City,182,Country 98897,City,182,Country 98898,City,182,Country 99058,City,182,Country 99097,City,182,Country 99202,City,182,Country 99545,City,182,Country 99594,City,182,Country 99895,City,182,Country 99911,City,182,Country 100011,City,182,Country 100266,City,182,Country 100409,City,182,Country 100563,City,182,Country 100686,City,182,Country 100761,City,182,Country 100869,City,182,Country 100906,City,182,Country 101045,City,182,Country 101044,City,182,Country 101046,City,182,Country 101052,City,182,Country 101053,City,182,Country 101103,City,182,Country 101105,City,182,Country 101128,City,182,Country 101271,City,182,Country 101315,City,182,Country 101389,City,182,Country 101466,City,182,Country 101524,City,182,Country 101529,City,182,Country 101603,City,182,Country 101727,City,182,Country 101967,City,182,Country 102042,City,182,Country 102305,City,182,Country 102478,City,182,Country 102537,City,182,Country 102566,City,182,Country 102635,City,182,Country 102636,City,182,Country 102653,City,182,Country 97504,City,182,Country 97570,City,182,Country 97724,City,182,Country 97859,City,182,Country 98105,City,182,Country 98231,City,182,Country 98438,City,182,Country 98523,City,182,Country 98579,City,182,Country 99144,City,182,Country 99147,City,182,Country 99161,City,182,Country 99162,City,182,Country 99319,City,182,Country 99353,City,182,Country 99397,City,182,Country 99450,City,182,Country 99470,City,182,Country 99486,City,182,Country 99539,City,182,Country 99614,City,182,Country 99636,City,182,Country 99657,City,182,Country 99873,City,182,Country 99951,City,182,Country 100203,City,182,Country 100392,City,182,Country 100433,City,182,Country 100517,City,182,Country 100549,City,182,Country 100571,City,182,Country 100637,City,182,Country 100645,City,182,Country 100647,City,182,Country 100648,City,182,Country 100649,City,182,Country 100769,City,182,Country 100833,City,182,Country 100896,City,182,Country 100951,City,182,Country 100961,City,182,Country 101074,City,182,Country 101104,City,182,Country 101199,City,182,Country 101355,City,182,Country 101359,City,182,Country 101455,City,182,Country 101485,City,182,Country 101486,City,182,Country 101558,City,182,Country 101624,City,182,Country 101774,City,182,Country 101989,City,182,Country 102077,City,182,Country 102122,City,182,Country 102196,City,182,Country 102201,City,182,Country 102695,City,182,Country 97491,City,182,Country 97561,City,182,Country 97596,City,182,Country 97599,City,182,Country 97612,City,182,Country 97617,City,182,Country 97728,City,182,Country 97809,City,182,Country 97810,City,182,Country 97841,City,182,Country 97887,City,182,Country 97898,City,182,Country 98032,City,182,Country 98076,City,182,Country 98181,City,182,Country 98184,City,182,Country 98209,City,182,Country 98220,City,182,Country 98225,City,182,Country 98264,City,182,Country 98376,City,182,Country 98408,City,182,Country 98543,City,182,Country 98842,City,182,Country 98958,City,182,Country 98973,City,182,Country 99118,City,182,Country 99522,City,182,Country 99552,City,182,Country 99572,City,182,Country 99579,City,182,Country 99731,City,182,Country 99799,City,182,Country 99836,City,182,Country 99920,City,182,Country 99921,City,182,Country 99942,City,182,Country 99954,City,182,Country 100055,City,182,Country 100056,City,182,Country 100110,City,182,Country 100126,City,182,Country 100164,City,182,Country 100169,City,182,Country 100382,City,182,Country 100383,City,182,Country 100422,City,182,Country 100423,City,182,Country 100428,City,182,Country 100429,City,182,Country 100515,City,182,Country 100591,City,182,Country 100745,City,182,Country 101100,City,182,Country 101127,City,182,Country 101176,City,182,Country 101458,City,182,Country 101543,City,182,Country 101544,City,182,Country 101664,City,182,Country 101665,City,182,Country 101736,City,182,Country 101855,City,182,Country 101885,City,182,Country 101886,City,182,Country 102017,City,182,Country 102106,City,182,Country 102107,City,182,Country 102108,City,182,Country 102109,City,182,Country 102142,City,182,Country 102239,City,182,Country 102244,City,182,Country 102245,City,182,Country 102281,City,182,Country 102282,City,182,Country 102309,City,182,Country 102310,City,182,Country 102311,City,182,Country 102321,City,182,Country 102473,City,182,Country 102582,City,182,Country 102714,City,182,Country 102727,City,182,Country 102728,City,182,Country 102787,City,182,Country 97569,City,182,Country 97632,City,182,Country 98047,City,182,Country 98097,City,182,Country 98136,City,182,Country 98303,City,182,Country 98459,City,182,Country 98535,City,182,Country 98996,City,182,Country 99218,City,182,Country 99304,City,182,Country 99463,City,182,Country 99462,City,182,Country 99581,City,182,Country 99741,City,182,Country 99886,City,182,Country 100116,City,182,Country 100195,City,182,Country 100401,City,182,Country 100503,City,182,Country 100779,City,182,Country 100801,City,182,Country 101212,City,182,Country 101240,City,182,Country 101286,City,182,Country 101312,City,182,Country 101373,City,182,Country 101413,City,182,Country 101436,City,182,Country 101882,City,182,Country 101925,City,182,Country 101970,City,182,Country 101992,City,182,Country 102027,City,182,Country 102029,City,182,Country 102033,City,182,Country 102175,City,182,Country 102401,City,182,Country 102457,City,182,Country 102613,City,182,Country 102614,City,182,Country 102615,City,182,Country 97761,City,182,Country 97772,City,182,Country 97902,City,182,Country 97918,City,182,Country 97962,City,182,Country 97963,City,182,Country 98043,City,182,Country 98115,City,182,Country 98139,City,182,Country 98341,City,182,Country 98475,City,182,Country 98697,City,182,Country 98829,City,182,Country 99015,City,182,Country 99028,City,182,Country 99045,City,182,Country 99046,City,182,Country 99047,City,182,Country 99108,City,182,Country 99229,City,182,Country 99296,City,182,Country 99346,City,182,Country 99376,City,182,Country 99400,City,182,Country 99479,City,182,Country 99835,City,182,Country 99879,City,182,Country 99923,City,182,Country 100084,City,182,Country 100085,City,182,Country 100256,City,182,Country 100295,City,182,Country 100340,City,182,Country 100390,City,182,Country 100408,City,182,Country 100486,City,182,Country 100508,City,182,Country 100607,City,182,Country 100640,City,182,Country 100646,City,182,Country 100731,City,182,Country 100733,City,182,Country 100740,City,182,Country 100793,City,182,Country 100817,City,182,Country 100996,City,182,Country 101015,City,182,Country 101085,City,182,Country 101187,City,182,Country 101302,City,182,Country 101309,City,182,Country 101421,City,182,Country 101536,City,182,Country 101653,City,182,Country 101675,City,182,Country 101735,City,182,Country 101881,City,182,Country 102150,City,182,Country 102191,City,182,Country 102370,City,182,Country 102546,City,182,Country 102729,City,182,Country 102730,City,182,Country 102767,City,182,Country 97566,City,182,Country 97576,City,182,Country 97663,City,182,Country 97712,City,182,Country 97713,City,182,Country 97771,City,182,Country 97775,City,182,Country 97782,City,182,Country 97783,City,182,Country 97828,City,182,Country 97829,City,182,Country 98009,City,182,Country 98159,City,182,Country 98267,City,182,Country 98350,City,182,Country 98398,City,182,Country 98399,City,182,Country 98539,City,182,Country 98737,City,182,Country 98788,City,182,Country 98821,City,182,Country 99023,City,182,Country 99024,City,182,Country 99027,City,182,Country 99210,City,182,Country 99290,City,182,Country 99367,City,182,Country 99369,City,182,Country 99375,City,182,Country 99709,City,182,Country 99801,City,182,Country 99802,City,182,Country 99943,City,182,Country 100325,City,182,Country 100357,City,182,Country 100600,City,182,Country 100658,City,182,Country 100676,City,182,Country 100687,City,182,Country 100721,City,182,Country 100847,City,182,Country 100851,City,182,Country 100889,City,182,Country 100897,City,182,Country 100962,City,182,Country 100986,City,182,Country 101011,City,182,Country 101017,City,182,Country 101090,City,182,Country 101114,City,182,Country 101116,City,182,Country 101172,City,182,Country 101310,City,182,Country 101348,City,182,Country 101376,City,182,Country 101440,City,182,Country 101517,City,182,Country 101611,City,182,Country 101616,City,182,Country 101706,City,182,Country 101713,City,182,Country 101797,City,182,Country 101836,City,182,Country 101979,City,182,Country 102374,City,182,Country 102375,City,182,Country 102391,City,182,Country 102392,City,182,Country 102529,City,182,Country 102548,City,182,Country 102572,City,182,Country 105829,City,182,Country 105830,City,182,Country 105831,City,182,Country 105832,City,182,Country 105833,City,182,Country 105834,City,182,Country 105835,City,182,Country 105836,City,182,Country 105837,City,182,Country 105838,City,182,Country 105839,City,182,Country 105840,City,182,Country 105841,City,182,Country 105842,City,182,Country 105843,City,182,Country 105844,City,182,Country 105845,City,182,Country 105846,City,182,Country 105847,City,182,Country 105848,City,182,Country 105849,City,182,Country 105850,City,182,Country 105851,City,182,Country 105852,City,182,Country 105853,City,182,Country 105854,City,182,Country 105855,City,182,Country 105856,City,182,Country 105857,City,182,Country 105858,City,182,Country 105859,City,182,Country 105860,City,182,Country 105861,City,182,Country 105862,City,182,Country 105863,City,182,Country 105864,City,182,Country 105865,City,182,Country 105866,City,182,Country 105867,City,182,Country 105868,City,182,Country 105869,City,182,Country 105870,City,182,Country 105871,City,182,Country 105872,City,182,Country 105873,City,182,Country 105874,City,182,Country 105875,City,182,Country 105876,City,182,Country 105877,City,182,Country 105878,City,182,Country 105879,City,182,Country 105880,City,182,Country 105881,City,182,Country 105882,City,182,Country 105883,City,182,Country 105884,City,182,Country 105885,City,182,Country 105886,City,182,Country 105887,City,182,Country 105888,City,182,Country 105889,City,182,Country 105890,City,182,Country 105891,City,182,Country 105892,City,182,Country 105893,City,182,Country 105894,City,182,Country 105895,City,182,Country 105896,City,182,Country 105897,City,182,Country 105898,City,182,Country 105899,City,182,Country 105900,City,182,Country 105901,City,182,Country 105902,City,182,Country 105903,City,182,Country 105904,City,182,Country 105905,City,182,Country 105906,City,182,Country 105907,City,182,Country 105908,City,182,Country 105909,City,182,Country 105910,City,182,Country 105911,City,182,Country 105912,City,182,Country 105913,City,182,Country 105914,City,182,Country 105915,City,182,Country 105916,City,182,Country 105917,City,182,Country 105918,City,182,Country 105919,City,182,Country 105920,City,182,Country 105921,City,182,Country 105922,City,182,Country 105923,City,182,Country 105924,City,182,Country 105925,City,182,Country 105926,City,182,Country 105927,City,182,Country 105928,City,182,Country 105929,City,182,Country 105930,City,182,Country 105931,City,182,Country 105932,City,182,Country 105933,City,182,Country 105934,City,182,Country 105935,City,182,Country 105936,City,182,Country 105937,City,182,Country 105938,City,182,Country 105939,City,182,Country 105940,City,182,Country 105941,City,182,Country 105942,City,182,Country 105943,City,182,Country 105944,City,182,Country 105945,City,182,Country 105946,City,182,Country 105947,City,182,Country 105948,City,182,Country 105949,City,182,Country 105950,City,182,Country 105951,City,182,Country 105952,City,182,Country 105953,City,182,Country 105954,City,182,Country 105955,City,182,Country 105956,City,182,Country 105957,City,182,Country 105958,City,182,Country 105959,City,182,Country 105960,City,182,Country 105961,City,182,Country 105962,City,182,Country 105963,City,182,Country 105964,City,182,Country 105965,City,182,Country 105966,City,182,Country 105967,City,182,Country 105968,City,182,Country 105969,City,182,Country 105970,City,182,Country 105971,City,182,Country 105972,City,182,Country 105973,City,182,Country 105974,City,182,Country 105975,City,182,Country 98259,City,182,Country 98269,City,182,Country 98319,City,182,Country 98351,City,182,Country 98446,City,182,Country 98499,City,182,Country 98511,City,182,Country 98874,City,182,Country 98910,City,182,Country 98983,City,182,Country 98993,City,182,Country 99956,City,182,Country 100239,City,182,Country 100494,City,182,Country 100523,City,182,Country 100586,City,182,Country 100710,City,182,Country 101001,City,182,Country 101025,City,182,Country 101070,City,182,Country 101071,City,182,Country 101267,City,182,Country 101352,City,182,Country 101415,City,182,Country 101620,City,182,Country 101721,City,182,Country 101747,City,182,Country 102008,City,182,Country 102040,City,182,Country 102220,City,182,Country 102238,City,182,Country 102424,City,182,Country 102505,City,182,Country 102531,City,182,Country 102551,City,182,Country 102571,City,182,Country 97494,City,182,Country 97562,City,182,Country 97563,City,182,Country 97574,City,182,Country 97631,City,182,Country 97690,City,182,Country 97767,City,182,Country 97799,City,182,Country 97836,City,182,Country 97909,City,182,Country 97923,City,182,Country 97944,City,182,Country 97945,City,182,Country 98022,City,182,Country 98065,City,182,Country 98083,City,182,Country 98172,City,182,Country 98281,City,182,Country 98284,City,182,Country 98313,City,182,Country 98380,City,182,Country 98406,City,182,Country 98453,City,182,Country 98476,City,182,Country 98477,City,182,Country 98505,City,182,Country 98569,City,182,Country 98581,City,182,Country 98584,City,182,Country 98589,City,182,Country 98674,City,182,Country 98685,City,182,Country 98690,City,182,Country 98734,City,182,Country 98757,City,182,Country 98795,City,182,Country 98843,City,182,Country 98850,City,182,Country 98917,City,182,Country 98946,City,182,Country 99081,City,182,Country 99125,City,182,Country 99169,City,182,Country 99190,City,182,Country 99194,City,182,Country 99316,City,182,Country 99326,City,182,Country 99401,City,182,Country 99473,City,182,Country 99475,City,182,Country 99532,City,182,Country 99584,City,182,Country 99608,City,182,Country 99617,City,182,Country 99618,City,182,Country 99708,City,182,Country 99899,City,182,Country 99917,City,182,Country 99979,City,182,Country 100039,City,182,Country 100050,City,182,Country 100087,City,182,Country 100120,City,182,Country 100128,City,182,Country 100129,City,182,Country 100149,City,182,Country 100222,City,182,Country 100231,City,182,Country 100278,City,182,Country 100294,City,182,Country 100313,City,182,Country 100317,City,182,Country 100334,City,182,Country 100471,City,182,Country 100502,City,182,Country 100512,City,182,Country 100590,City,182,Country 100715,City,182,Country 100720,City,182,Country 100741,City,182,Country 100800,City,182,Country 100806,City,182,Country 100810,City,182,Country 100909,City,182,Country 100910,City,182,Country 100941,City,182,Country 101056,City,182,Country 101203,City,182,Country 101445,City,182,Country 101463,City,182,Country 101470,City,182,Country 101501,City,182,Country 101505,City,182,Country 101539,City,182,Country 101579,City,182,Country 101589,City,182,Country 101613,City,182,Country 101617,City,182,Country 101648,City,182,Country 101688,City,182,Country 101703,City,182,Country 101716,City,182,Country 101791,City,182,Country 101817,City,182,Country 101863,City,182,Country 101934,City,182,Country 102083,City,182,Country 102315,City,182,Country 102396,City,182,Country 102452,City,182,Country 102512,City,182,Country 102543,City,182,Country 102576,City,182,Country 102577,City,182,Country 102611,City,182,Country 102666,City,182,Country 102669,City,182,Country 102701,City,182,Country 102722,City,182,Country 102753,City,182,Country 97498,City,182,Country 97558,City,182,Country 97652,City,182,Country 97687,City,182,Country 97683,City,182,Country 97693,City,182,Country 97694,City,182,Country 97711,City,182,Country 97732,City,182,Country 97788,City,182,Country 97791,City,182,Country 97824,City,182,Country 97870,City,182,Country 97901,City,182,Country 97929,City,182,Country 97940,City,182,Country 97958,City,182,Country 97965,City,182,Country 98074,City,182,Country 98086,City,182,Country 98189,City,182,Country 98171,City,182,Country 98258,City,182,Country 98331,City,182,Country 98361,City,182,Country 98458,City,182,Country 98544,City,182,Country 98598,City,182,Country 98689,City,182,Country 98696,City,182,Country 98701,City,182,Country 98719,City,182,Country 98738,City,182,Country 98759,City,182,Country 98766,City,182,Country 98793,City,182,Country 98820,City,182,Country 98830,City,182,Country 98883,City,182,Country 98885,City,182,Country 98934,City,182,Country 99061,City,182,Country 99109,City,182,Country 99313,City,182,Country 99337,City,182,Country 99338,City,182,Country 99339,City,182,Country 99488,City,182,Country 99505,City,182,Country 99596,City,182,Country 99615,City,182,Country 99647,City,182,Country 99667,City,182,Country 99682,City,182,Country 99771,City,182,Country 99807,City,182,Country 99900,City,182,Country 99958,City,182,Country 100121,City,182,Country 100124,City,182,Country 100125,City,182,Country 100141,City,182,Country 100179,City,182,Country 100181,City,182,Country 100182,City,182,Country 100186,City,182,Country 100188,City,182,Country 100206,City,182,Country 100225,City,182,Country 100322,City,182,Country 100324,City,182,Country 100393,City,182,Country 100510,City,182,Country 100592,City,182,Country 100629,City,182,Country 100650,City,182,Country 100749,City,182,Country 100755,City,182,Country 100760,City,182,Country 100916,City,182,Country 100959,City,182,Country 100969,City,182,Country 100971,City,182,Country 101024,City,182,Country 101108,City,182,Country 101190,City,182,Country 101202,City,182,Country 101221,City,182,Country 101231,City,182,Country 101249,City,182,Country 101251,City,182,Country 101276,City,182,Country 101329,City,182,Country 101358,City,182,Country 101499,City,182,Country 101520,City,182,Country 101545,City,182,Country 101591,City,182,Country 101598,City,182,Country 101654,City,182,Country 101715,City,182,Country 101726,City,182,Country 101733,City,182,Country 101732,City,182,Country 101738,City,182,Country 101752,City,182,Country 101799,City,182,Country 101911,City,182,Country 101918,City,182,Country 101942,City,182,Country 101962,City,182,Country 101976,City,182,Country 101977,City,182,Country 102026,City,182,Country 102070,City,182,Country 102181,City,182,Country 102232,City,182,Country 102247,City,182,Country 102257,City,182,Country 102263,City,182,Country 102269,City,182,Country 102270,City,182,Country 102271,City,182,Country 102272,City,182,Country 102275,City,182,Country 102277,City,182,Country 102319,City,182,Country 102339,City,182,Country 102399,City,182,Country 102527,City,182,Country 102534,City,182,Country 102623,City,182,Country 102574,City,182,Country 102607,City,182,Country 102654,City,182,Country 102676,City,182,Country 102685,City,182,Country 102790,City,182,Country 97984,City,182,Country 98018,City,182,Country 98314,City,182,Country 98464,City,182,Country 98524,City,182,Country 98683,City,182,Country 99074,City,182,Country 99075,City,182,Country 99170,City,182,Country 99250,City,182,Country 99892,City,182,Country 99961,City,182,Country 99967,City,182,Country 99993,City,182,Country 100205,City,182,Country 100284,City,182,Country 100618,City,182,Country 100670,City,182,Country 100698,City,182,Country 100744,City,182,Country 100942,City,182,Country 100943,City,182,Country 101057,City,182,Country 101092,City,182,Country 101130,City,182,Country 101153,City,182,Country 101488,City,182,Country 101602,City,182,Country 101761,City,182,Country 101873,City,182,Country 102155,City,182,Country 102681,City,182,Country 102725,City,182,Country 102756,City,182,Country 102760,City,182,Country 97575,City,182,Country 97701,City,182,Country 97759,City,182,Country 97881,City,182,Country 97961,City,182,Country 98801,City,182,Country 98877,City,182,Country 98935,City,182,Country 99146,City,182,Country 99263,City,182,Country 99378,City,182,Country 99393,City,182,Country 99859,City,182,Country 99947,City,182,Country 99948,City,182,Country 99969,City,182,Country 100540,City,182,Country 100627,City,182,Country 100717,City,182,Country 101094,City,182,Country 101222,City,182,Country 101628,City,182,Country 101707,City,182,Country 101810,City,182,Country 101811,City,182,Country 101860,City,182,Country 101872,City,182,Country 101887,City,182,Country 101888,City,182,Country 102788,City,182,Country 97515,City,182,Country 97583,City,182,Country 97584,City,182,Country 97679,City,182,Country 97798,City,182,Country 97834,City,182,Country 97884,City,182,Country 97967,City,182,Country 98017,City,182,Country 97996,City,182,Country 98031,City,182,Country 98059,City,182,Country 98134,City,182,Country 98155,City,182,Country 98183,City,182,Country 98312,City,182,Country 98338,City,182,Country 98339,City,182,Country 98522,City,182,Country 98591,City,182,Country 98808,City,182,Country 98924,City,182,Country 98959,City,182,Country 99042,City,182,Country 99053,City,182,Country 99225,City,182,Country 99273,City,182,Country 99465,City,182,Country 99571,City,182,Country 99656,City,182,Country 99830,City,182,Country 99864,City,182,Country 100245,City,182,Country 100269,City,182,Country 100400,City,182,Country 100554,City,182,Country 100617,City,182,Country 100699,City,182,Country 100722,City,182,Country 100843,City,182,Country 100970,City,182,Country 101016,City,182,Country 101215,City,182,Country 101280,City,182,Country 101364,City,182,Country 101394,City,182,Country 101401,City,182,Country 101687,City,182,Country 101689,City,182,Country 102010,City,182,Country 102011,City,182,Country 101909,City,182,Country 101966,City,182,Country 102166,City,182,Country 102226,City,182,Country 102223,City,182,Country 102366,City,182,Country 102513,City,182,Country 102514,City,182,Country 102523,City,182,Country 102563,City,182,Country 102643,City,182,Country 102644,City,182,Country 102716,City,182,Country 97526,City,182,Country 97779,City,182,Country 97821,City,182,Country 98107,City,182,Country 98403,City,182,Country 98761,City,182,Country 98957,City,182,Country 99012,City,182,Country 99447,City,182,Country 99525,City,182,Country 99526,City,182,Country 99527,City,182,Country 99995,City,182,Country 101084,City,182,Country 101126,City,182,Country 101235,City,182,Country 101657,City,182,Country 101686,City,182,Country 101809,City,182,Country 101892,City,182,Country 101973,City,182,Country 97626,City,182,Country 97627,City,182,Country 97885,City,182,Country 97878,City,182,Country 97879,City,182,Country 97894,City,182,Country 97899,City,182,Country 97920,City,182,Country 97921,City,182,Country 97993,City,182,Country 97994,City,182,Country 97995,City,182,Country 98393,City,182,Country 98429,City,182,Country 98430,City,182,Country 98561,City,182,Country 98656,City,182,Country 98758,City,182,Country 98781,City,182,Country 98791,City,182,Country 98803,City,182,Country 98804,City,182,Country 98891,City,182,Country 98892,City,182,Country 98943,City,182,Country 98944,City,182,Country 99043,City,182,Country 99044,City,182,Country 99177,City,182,Country 99178,City,182,Country 99268,City,182,Country 99325,City,182,Country 99328,City,182,Country 99363,City,182,Country 99491,City,182,Country 99492,City,182,Country 99502,City,182,Country 99598,City,182,Country 99599,City,182,Country 99623,City,182,Country 99624,City,182,Country 99746,City,182,Country 99747,City,182,Country 99952,City,182,Country 100098,City,182,Country 100335,City,182,Country 100421,City,182,Country 100477,City,182,Country 100491,City,182,Country 100492,City,182,Country 100593,City,182,Country 100594,City,182,Country 100922,City,182,Country 100937,City,182,Country 100938,City,182,Country 100958,City,182,Country 101060,City,182,Country 101075,City,182,Country 101098,City,182,Country 101099,City,182,Country 101156,City,182,Country 101157,City,182,Country 101158,City,182,Country 101476,City,182,Country 101537,City,182,Country 101538,City,182,Country 101554,City,182,Country 101567,City,182,Country 101569,City,182,Country 101570,City,182,Country 101899,City,182,Country 101900,City,182,Country 101901,City,182,Country 101902,City,182,Country 101988,City,182,Country 102024,City,182,Country 102199,City,182,Country 102216,City,182,Country 102293,City,182,Country 102294,City,182,Country 102429,City,182,Country 102434,City,182,Country 102441,City,182,Country 102443,City,182,Country 102646,City,182,Country 102672,City,182,Country 102713,City,182,Country 102773,City,182,Country 102774,City,182,Country 97480,City,182,Country 97483,City,182,Country 97640,City,182,Country 97674,City,182,Country 97675,City,182,Country 97676,City,182,Country 97890,City,182,Country 97960,City,182,Country 98041,City,182,Country 98188,City,182,Country 98512,City,182,Country 98513,City,182,Country 98695,City,182,Country 98699,City,182,Country 98700,City,182,Country 98704,City,182,Country 98706,City,182,Country 98929,City,182,Country 98930,City,182,Country 99858,City,182,Country 99862,City,182,Country 99978,City,182,Country 100187,City,182,Country 100212,City,182,Country 100293,City,182,Country 100443,City,182,Country 100444,City,182,Country 100450,City,182,Country 101395,City,182,Country 101396,City,182,Country 101661,City,182,Country 101868,City,182,Country 101981,City,182,Country 102005,City,182,Country 102066,City,182,Country 102067,City,182,Country 102102,City,182,Country 102157,City,182,Country 102172,City,182,Country 102173,City,182,Country 102304,City,182,Country 102316,City,182,Country 102475,City,182,Country 102495,City,182,Country 102596,City,182,Country 102675,City,182,Country 97600,City,182,Country 97778,City,182,Country 98254,City,182,Country 98411,City,182,Country 98495,City,182,Country 98575,City,182,Country 98634,City,182,Country 98746,City,182,Country 98805,City,182,Country 98806,City,182,Country 98865,City,182,Country 98866,City,182,Country 98947,City,182,Country 98990,City,182,Country 99084,City,182,Country 99085,City,182,Country 99096,City,182,Country 99310,City,182,Country 99751,City,182,Country 99764,City,182,Country 99987,City,182,Country 100682,City,182,Country 100887,City,182,Country 100913,City,182,Country 101112,City,182,Country 101113,City,182,Country 101159,City,182,Country 101261,City,182,Country 101368,City,182,Country 101734,City,182,Country 102153,City,182,Country 102206,City,182,Country 102403,City,182,Country 102489,City,182,Country 102589,City,182,Country 102683,City,182,Country 97804,City,182,Country 97830,City,182,Country 98143,City,182,Country 98144,City,182,Country 98216,City,182,Country 98276,City,182,Country 98500,City,182,Country 98633,City,182,Country 98669,City,182,Country 98681,City,182,Country 98703,City,182,Country 98753,City,182,Country 98832,City,182,Country 98886,City,182,Country 99362,City,182,Country 99510,City,182,Country 99826,City,182,Country 99828,City,182,Country 99922,City,182,Country 100001,City,182,Country 100134,City,182,Country 100208,City,182,Country 100209,City,182,Country 100234,City,182,Country 100311,City,182,Country 100321,City,182,Country 100568,City,182,Country 100581,City,182,Country 100923,City,182,Country 101171,City,182,Country 101369,City,182,Country 101559,City,182,Country 101562,City,182,Country 101584,City,182,Country 101596,City,182,Country 101681,City,182,Country 101829,City,182,Country 101947,City,182,Country 101948,City,182,Country 102051,City,182,Country 102052,City,182,Country 102057,City,182,Country 102290,City,182,Country 102519,City,182,Country 102710,City,182,Country 97565,City,182,Country 97572,City,182,Country 97629,City,182,Country 97638,City,182,Country 97677,City,182,Country 97770,City,182,Country 97817,City,182,Country 97845,City,182,Country 97966,City,182,Country 98297,City,182,Country 98452,City,182,Country 98508,City,182,Country 98564,City,182,Country 98622,City,182,Country 98619,City,182,Country 98670,City,182,Country 98728,City,182,Country 98825,City,182,Country 98851,City,182,Country 99034,City,182,Country 99077,City,182,Country 99154,City,182,Country 99155,City,182,Country 99163,City,182,Country 99237,City,182,Country 99255,City,182,Country 99278,City,182,Country 99359,City,182,Country 99370,City,182,Country 99466,City,182,Country 99540,City,182,Country 99688,City,182,Country 99852,City,182,Country 99853,City,182,Country 99854,City,182,Country 99884,City,182,Country 99990,City,182,Country 100012,City,182,Country 100013,City,182,Country 100015,City,182,Country 100142,City,182,Country 100217,City,182,Country 100330,City,182,Country 100410,City,182,Country 100466,City,182,Country 100667,City,182,Country 100668,City,182,Country 100742,City,182,Country 100929,City,182,Country 101426,City,182,Country 101427,City,182,Country 101614,City,182,Country 101615,City,182,Country 101635,City,182,Country 101644,City,182,Country 101645,City,182,Country 101690,City,182,Country 101691,City,182,Country 102084,City,182,Country 102214,City,182,Country 102326,City,182,Country 102386,City,182,Country 102422,City,182,Country 102603,City,182,Country 102604,City,182,Country 102764,City,182,Country 146860,City,182,Country 146861,City,182,Country 146862,City,182,Country 146863,City,182,Country 146864,City,182,Country 146865,City,182,Country 146866,City,182,Country 146867,City,182,Country 146868,City,182,Country 146869,City,182,Country 146870,City,182,Country 146871,City,182,Country 146872,City,182,Country 146873,City,182,Country 146874,City,182,Country 146875,City,182,Country 146876,City,182,Country 146877,City,182,Country 146878,City,182,Country 146879,City,182,Country 146880,City,182,Country 146881,City,182,Country 146882,City,182,Country 146883,City,182,Country 146884,City,182,Country 146885,City,182,Country 146886,City,182,Country 146887,City,182,Country 146888,City,182,Country 146889,City,182,Country 146890,City,182,Country 146891,City,182,Country 146892,City,182,Country 146893,City,182,Country 146894,City,182,Country 146895,City,182,Country 146896,City,182,Country 146897,City,182,Country 146898,City,182,Country 146899,City,182,Country 146900,City,182,Country 146901,City,182,Country 146902,City,182,Country 146903,City,182,Country 146904,City,182,Country 146905,City,182,Country 146906,City,182,Country 146907,City,182,Country 146908,City,182,Country 146909,City,182,Country 146910,City,182,Country 146911,City,182,Country 146912,City,182,Country 146913,City,182,Country 146914,City,182,Country 146915,City,182,Country 146916,City,182,Country 146917,City,182,Country 146918,City,182,Country 146919,City,182,Country 146920,City,182,Country 146921,City,182,Country 146922,City,182,Country 146923,City,182,Country 146924,City,182,Country 146925,City,182,Country 146926,City,182,Country 146927,City,182,Country 146928,City,182,Country 146929,City,182,Country 146930,City,182,Country 146931,City,182,Country 146932,City,182,Country 146933,City,182,Country 146934,City,182,Country 146935,City,182,Country 146936,City,182,Country 146937,City,182,Country 146938,City,182,Country 146939,City,182,Country 146940,City,182,Country 146941,City,182,Country 97737,City,182,Country 97738,City,182,Country 97873,City,182,Country 97874,City,182,Country 98108,City,182,Country 98109,City,182,Country 98129,City,182,Country 98156,City,182,Country 98157,City,182,Country 98419,City,182,Country 98526,City,182,Country 98599,City,182,Country 98600,City,182,Country 98661,City,182,Country 98672,City,182,Country 98768,City,182,Country 98771,City,182,Country 98772,City,182,Country 98966,City,182,Country 98967,City,182,Country 98989,City,182,Country 99032,City,182,Country 99033,City,182,Country 99055,City,182,Country 99056,City,182,Country 99274,City,182,Country 99504,City,182,Country 99634,City,182,Country 99882,City,182,Country 99949,City,182,Country 100026,City,182,Country 100097,City,182,Country 100143,City,182,Country 100381,City,182,Country 101142,City,182,Country 101288,City,182,Country 101289,City,182,Country 101363,City,182,Country 101431,City,182,Country 101442,City,182,Country 101641,City,182,Country 101717,City,182,Country 101718,City,182,Country 101777,City,182,Country 101778,City,182,Country 101890,City,182,Country 101907,City,182,Country 101905,City,182,Country 102133,City,182,Country 102145,City,182,Country 102111,City,182,Country 102112,City,182,Country 102212,City,182,Country 102218,City,182,Country 102279,City,182,Country 102278,City,182,Country 102337,City,182,Country 102354,City,182,Country 102355,City,182,Country 102407,City,182,Country 102453,City,182,Country 102454,City,182,Country 102771,City,182,Country 97489,City,182,Country 97633,City,182,Country 97637,City,182,Country 97855,City,182,Country 97955,City,182,Country 97959,City,182,Country 97983,City,182,Country 98024,City,182,Country 98088,City,182,Country 98089,City,182,Country 98251,City,182,Country 98271,City,182,Country 98324,City,182,Country 98401,City,182,Country 98402,City,182,Country 98587,City,182,Country 98588,City,182,Country 98664,City,182,Country 98778,City,182,Country 98810,City,182,Country 98822,City,182,Country 98846,City,182,Country 98894,City,182,Country 98895,City,182,Country 99014,City,182,Country 99139,City,182,Country 99217,City,182,Country 99267,City,182,Country 99327,City,182,Country 99546,City,182,Country 99637,City,182,Country 99638,City,182,Country 99665,City,182,Country 99811,City,182,Country 99932,City,182,Country 100151,City,182,Country 100152,City,182,Country 100168,City,182,Country 100172,City,182,Country 100202,City,182,Country 100211,City,182,Country 100249,City,182,Country 100248,City,182,Country 100323,City,182,Country 100329,City,182,Country 100336,City,182,Country 100437,City,182,Country 100438,City,182,Country 100472,City,182,Country 100495,City,182,Country 100535,City,182,Country 100536,City,182,Country 100572,City,182,Country 100580,City,182,Country 100598,City,182,Country 100599,City,182,Country 100713,City,182,Country 100714,City,182,Country 100716,City,182,Country 100719,City,182,Country 100794,City,182,Country 100795,City,182,Country 100818,City,182,Country 100940,City,182,Country 100939,City,182,Country 100963,City,182,Country 101004,City,182,Country 101003,City,182,Country 101064,City,182,Country 101165,City,182,Country 101166,City,182,Country 101316,City,182,Country 101407,City,182,Country 101475,City,182,Country 101546,City,182,Country 101625,City,182,Country 101755,City,182,Country 101834,City,182,Country 101835,City,182,Country 102039,City,182,Country 102093,City,182,Country 102256,City,182,Country 102267,City,182,Country 102273,City,182,Country 102368,City,182,Country 102378,City,182,Country 102380,City,182,Country 102381,City,182,Country 102535,City,182,Country 102536,City,182,Country 102625,City,182,Country 102705,City,182,Country 97540,City,182,Country 98604,City,182,Country 98968,City,182,Country 99216,City,182,Country 99531,City,182,Country 100007,City,182,Country 100025,City,182,Country 100029,City,182,Country 100043,City,182,Country 100044,City,182,Country 100352,City,182,Country 100364,City,182,Country 100378,City,182,Country 100534,City,182,Country 100844,City,182,Country 100892,City,182,Country 100893,City,182,Country 101079,City,182,Country 101354,City,182,Country 101606,City,182,Country 101776,City,182,Country 101807,City,182,Country 102075,City,182,Country 102490,City,182,Country 97892,City,182,Country 98006,City,182,Country 98016,City,182,Country 98025,City,182,Country 98026,City,182,Country 98033,City,182,Country 98055,City,182,Country 98056,City,182,Country 98084,City,182,Country 98241,City,182,Country 98242,City,182,Country 98336,City,182,Country 98462,City,182,Country 98463,City,182,Country 98709,City,182,Country 99192,City,182,Country 99372,City,182,Country 99384,City,182,Country 99427,City,182,Country 99455,City,182,Country 99611,City,182,Country 99715,City,182,Country 99716,City,182,Country 100030,City,182,Country 100031,City,182,Country 100090,City,182,Country 100095,City,182,Country 100096,City,182,Country 100347,City,182,Country 100604,City,182,Country 100605,City,182,Country 100622,City,182,Country 100636,City,182,Country 100659,City,182,Country 100774,City,182,Country 100785,City,182,Country 100784,City,182,Country 100807,City,182,Country 101006,City,182,Country 101009,City,182,Country 101048,City,182,Country 101049,City,182,Country 101162,City,182,Country 101646,City,182,Country 101971,City,182,Country 101984,City,182,Country 101985,City,182,Country 102034,City,182,Country 102035,City,182,Country 102342,City,182,Country 102499,City,182,Country 102503,City,182,Country 97518,City,182,Country 97543,City,182,Country 97544,City,182,Country 97567,City,182,Country 97573,City,182,Country 97611,City,182,Country 97707,City,182,Country 97750,City,182,Country 97776,City,182,Country 97777,City,182,Country 97785,City,182,Country 98001,City,182,Country 98044,City,182,Country 98046,City,182,Country 98073,City,182,Country 98118,City,182,Country 98180,City,182,Country 98204,City,182,Country 98205,City,182,Country 98246,City,182,Country 98248,City,182,Country 98306,City,182,Country 98326,City,182,Country 98353,City,182,Country 98468,City,182,Country 98469,City,182,Country 98767,City,182,Country 98780,City,182,Country 98783,City,182,Country 98889,City,182,Country 98979,City,182,Country 98991,City,182,Country 99100,City,182,Country 99110,City,182,Country 99135,City,182,Country 99320,City,182,Country 99361,City,182,Country 99412,City,182,Country 99468,City,182,Country 99518,City,182,Country 99745,City,182,Country 99939,City,182,Country 99940,City,182,Country 99941,City,182,Country 100104,City,182,Country 100105,City,182,Country 100106,City,182,Country 100176,City,182,Country 100201,City,182,Country 100253,City,182,Country 100273,City,182,Country 100277,City,182,Country 100425,City,182,Country 100426,City,182,Country 100474,City,182,Country 100621,City,182,Country 100660,City,182,Country 100814,City,182,Country 100815,City,182,Country 100823,City,182,Country 101293,City,182,Country 101313,City,182,Country 101314,City,182,Country 101414,City,182,Country 101548,City,182,Country 101549,City,182,Country 101771,City,182,Country 102045,City,182,Country 102046,City,182,Country 102128,City,182,Country 102235,City,182,Country 102285,City,182,Country 102286,City,182,Country 102624,City,182,Country 102733,City,182,Country 104693,City,192,Country 104694,City,192,Country 104699,City,192,Country 104695,City,192,Country 104696,City,192,Country 104697,City,192,Country 104698,City,192,Country 104700,City,192,Country 104701,City,192,Country 97147,City,196,Country 97148,City,196,Country 97149,City,196,Country 97150,City,196,Country 97157,City,196,Country 97160,City,196,Country 97174,City,196,Country 97170,City,196,Country 97172,City,196,Country 97176,City,196,Country 97177,City,196,Country 97179,City,196,Country 97181,City,196,Country 97182,City,196,Country 97186,City,196,Country 97187,City,196,Country 97457,City,196,Country 97456,City,196,Country 97454,City,196,Country 97462,City,196,Country 97190,City,196,Country 97455,City,196,Country 97193,City,196,Country 97195,City,196,Country 97196,City,196,Country 97197,City,196,Country 97199,City,196,Country 97200,City,196,Country 97201,City,196,Country 97202,City,196,Country 97452,City,196,Country 97209,City,196,Country 97210,City,196,Country 97212,City,196,Country 97214,City,196,Country 97215,City,196,Country 97226,City,196,Country 97227,City,196,Country 97228,City,196,Country 97231,City,196,Country 97235,City,196,Country 97237,City,196,Country 97238,City,196,Country 97239,City,196,Country 97245,City,196,Country 97247,City,196,Country 97248,City,196,Country 97255,City,196,Country 97256,City,196,Country 97258,City,196,Country 97259,City,196,Country 97260,City,196,Country 97261,City,196,Country 97268,City,196,Country 97269,City,196,Country 97270,City,196,Country 97272,City,196,Country 97273,City,196,Country 97274,City,196,Country 97275,City,196,Country 97276,City,196,Country 97277,City,196,Country 97281,City,196,Country 97289,City,196,Country 97284,City,196,Country 97285,City,196,Country 97286,City,196,Country 97287,City,196,Country 97292,City,196,Country 97295,City,196,Country 97298,City,196,Country 97301,City,196,Country 97305,City,196,Country 97306,City,196,Country 97314,City,196,Country 97318,City,196,Country 97319,City,196,Country 97323,City,196,Country 97324,City,196,Country 97326,City,196,Country 97327,City,196,Country 97331,City,196,Country 97351,City,196,Country 97334,City,196,Country 97337,City,196,Country 97340,City,196,Country 97341,City,196,Country 97342,City,196,Country 97343,City,196,Country 97344,City,196,Country 97346,City,196,Country 97347,City,196,Country 97348,City,196,Country 97349,City,196,Country 97352,City,196,Country 97355,City,196,Country 97356,City,196,Country 97357,City,196,Country 97361,City,196,Country 97362,City,196,Country 97366,City,196,Country 97368,City,196,Country 97465,City,196,Country 97371,City,196,Country 97373,City,196,Country 97468,City,196,Country 97469,City,196,Country 97380,City,196,Country 97381,City,196,Country 97382,City,196,Country 97383,City,196,Country 97384,City,196,Country 97385,City,196,Country 97390,City,196,Country 97399,City,196,Country 97471,City,196,Country 97400,City,196,Country 97472,City,196,Country 97402,City,196,Country 97404,City,196,Country 97406,City,196,Country 97412,City,196,Country 97416,City,196,Country 97415,City,196,Country 97417,City,196,Country 97418,City,196,Country 97419,City,196,Country 97421,City,196,Country 97424,City,196,Country 97423,City,196,Country 97425,City,196,Country 97426,City,196,Country 97428,City,196,Country 97434,City,196,Country 97439,City,196,Country 97440,City,196,Country 97443,City,196,Country 97445,City,196,Country 97446,City,196,Country 97447,City,196,Country 97449,City,196,Country 97475,City,196,Country 97451,City,196,Country 97142,City,196,Country 97143,City,196,Country 97144,City,196,Country 97145,City,196,Country 97146,City,196,Country 97161,City,196,Country 97162,City,196,Country 97163,City,196,Country 97164,City,196,Country 97165,City,196,Country 97166,City,196,Country 97151,City,196,Country 97152,City,196,Country 97153,City,196,Country 97154,City,196,Country 97155,City,196,Country 97156,City,196,Country 97158,City,196,Country 97159,City,196,Country 97167,City,196,Country 97173,City,196,Country 97168,City,196,Country 97169,City,196,Country 97171,City,196,Country 97175,City,196,Country 97185,City,196,Country 97178,City,196,Country 97180,City,196,Country 97183,City,196,Country 97184,City,196,Country 97188,City,196,Country 97458,City,196,Country 97459,City,196,Country 97460,City,196,Country 97461,City,196,Country 97463,City,196,Country 97189,City,196,Country 97464,City,196,Country 97191,City,196,Country 97192,City,196,Country 97194,City,196,Country 97198,City,196,Country 97453,City,196,Country 97204,City,196,Country 97203,City,196,Country 97205,City,196,Country 97206,City,196,Country 97207,City,196,Country 97208,City,196,Country 97211,City,196,Country 97213,City,196,Country 97216,City,196,Country 97217,City,196,Country 97218,City,196,Country 97219,City,196,Country 97220,City,196,Country 97221,City,196,Country 97222,City,196,Country 97223,City,196,Country 97224,City,196,Country 97225,City,196,Country 97229,City,196,Country 97230,City,196,Country 97232,City,196,Country 97234,City,196,Country 97233,City,196,Country 97236,City,196,Country 97240,City,196,Country 97241,City,196,Country 97242,City,196,Country 97243,City,196,Country 97244,City,196,Country 97246,City,196,Country 97249,City,196,Country 97250,City,196,Country 97251,City,196,Country 97252,City,196,Country 97253,City,196,Country 97254,City,196,Country 97257,City,196,Country 97262,City,196,Country 97263,City,196,Country 97264,City,196,Country 97265,City,196,Country 97266,City,196,Country 97267,City,196,Country 97271,City,196,Country 97278,City,196,Country 97279,City,196,Country 97280,City,196,Country 97282,City,196,Country 97290,City,196,Country 97283,City,196,Country 97288,City,196,Country 97293,City,196,Country 97291,City,196,Country 97294,City,196,Country 97296,City,196,Country 97297,City,196,Country 97299,City,196,Country 97300,City,196,Country 97302,City,196,Country 97303,City,196,Country 97304,City,196,Country 97307,City,196,Country 97308,City,196,Country 97309,City,196,Country 97310,City,196,Country 97311,City,196,Country 97312,City,196,Country 97313,City,196,Country 97315,City,196,Country 97316,City,196,Country 97317,City,196,Country 97320,City,196,Country 97321,City,196,Country 97322,City,196,Country 97325,City,196,Country 97328,City,196,Country 97329,City,196,Country 97330,City,196,Country 97332,City,196,Country 97336,City,196,Country 97333,City,196,Country 97335,City,196,Country 97338,City,196,Country 97339,City,196,Country 97345,City,196,Country 97350,City,196,Country 97353,City,196,Country 97354,City,196,Country 97358,City,196,Country 97359,City,196,Country 97360,City,196,Country 97363,City,196,Country 97364,City,196,Country 97365,City,196,Country 97367,City,196,Country 97369,City,196,Country 97466,City,196,Country 97370,City,196,Country 97372,City,196,Country 97374,City,196,Country 97375,City,196,Country 97467,City,196,Country 97379,City,196,Country 97376,City,196,Country 97377,City,196,Country 97378,City,196,Country 97470,City,196,Country 97386,City,196,Country 97387,City,196,Country 97388,City,196,Country 97389,City,196,Country 97391,City,196,Country 97392,City,196,Country 97393,City,196,Country 97394,City,196,Country 97395,City,196,Country 97396,City,196,Country 97397,City,196,Country 97398,City,196,Country 97401,City,196,Country 97403,City,196,Country 97405,City,196,Country 97407,City,196,Country 97408,City,196,Country 97409,City,196,Country 97410,City,196,Country 97411,City,196,Country 97413,City,196,Country 97414,City,196,Country 97420,City,196,Country 97422,City,196,Country 97427,City,196,Country 97429,City,196,Country 97430,City,196,Country 97431,City,196,Country 97432,City,196,Country 97433,City,196,Country 97435,City,196,Country 97436,City,196,Country 97437,City,196,Country 97438,City,196,Country 97441,City,196,Country 97442,City,196,Country 97444,City,196,Country 97473,City,196,Country 97474,City,196,Country 97448,City,196,Country 97450,City,196,Country 104370,City,200,Country 104371,City,200,Country 104376,City,200,Country 104589,City,200,Country 104381,City,200,Country 104385,City,200,Country 104388,City,200,Country 104397,City,200,Country 104398,City,200,Country 104408,City,200,Country 104415,City,200,Country 104417,City,200,Country 104426,City,200,Country 104440,City,200,Country 104447,City,200,Country 104448,City,200,Country 104455,City,200,Country 104458,City,200,Country 104469,City,200,Country 104474,City,200,Country 104487,City,200,Country 104493,City,200,Country 104512,City,200,Country 104518,City,200,Country 104519,City,200,Country 104515,City,200,Country 104527,City,200,Country 104535,City,200,Country 104536,City,200,Country 104559,City,200,Country 104562,City,200,Country 104573,City,200,Country 104597,City,200,Country 104601,City,200,Country 104585,City,200,Country 104374,City,200,Country 104375,City,200,Country 104386,City,200,Country 104403,City,200,Country 104428,City,200,Country 104429,City,200,Country 104434,City,200,Country 104450,City,200,Country 104451,City,200,Country 104452,City,200,Country 104453,City,200,Country 104454,City,200,Country 104475,City,200,Country 104485,City,200,Country 104497,City,200,Country 104524,City,200,Country 104540,City,200,Country 104555,City,200,Country 104560,City,200,Country 104576,City,200,Country 104588,City,200,Country 104382,City,200,Country 104392,City,200,Country 104404,City,200,Country 104409,City,200,Country 104410,City,200,Country 104411,City,200,Country 104412,City,200,Country 104413,City,200,Country 104416,City,200,Country 104431,City,200,Country 104433,City,200,Country 104435,City,200,Country 104462,City,200,Country 104468,City,200,Country 104478,City,200,Country 104494,City,200,Country 104501,City,200,Country 104502,City,200,Country 104507,City,200,Country 104537,City,200,Country 104542,City,200,Country 104547,City,200,Country 104549,City,200,Country 104554,City,200,Country 104565,City,200,Country 104575,City,200,Country 104599,City,200,Country 104400,City,200,Country 104406,City,200,Country 104407,City,200,Country 104421,City,200,Country 104438,City,200,Country 104445,City,200,Country 104467,City,200,Country 104471,City,200,Country 104481,City,200,Country 104483,City,200,Country 104517,City,200,Country 104506,City,200,Country 104514,City,200,Country 104591,City,200,Country 104593,City,200,Country 104595,City,200,Country 104596,City,200,Country 104558,City,200,Country 104563,City,200,Country 104564,City,200,Country 104580,City,200,Country 104600,City,200,Country 104584,City,200,Country 104372,City,200,Country 104380,City,200,Country 104393,City,200,Country 104399,City,200,Country 104405,City,200,Country 104422,City,200,Country 104423,City,200,Country 104590,City,200,Country 104432,City,200,Country 104442,City,200,Country 104449,City,200,Country 104464,City,200,Country 104466,City,200,Country 104472,City,200,Country 104477,City,200,Country 104488,City,200,Country 104490,City,200,Country 104496,City,200,Country 104500,City,200,Country 104503,City,200,Country 104504,City,200,Country 104505,City,200,Country 104513,City,200,Country 104526,City,200,Country 104528,City,200,Country 104530,City,200,Country 104539,City,200,Country 104546,City,200,Country 104548,City,200,Country 104550,City,200,Country 104552,City,200,Country 104594,City,200,Country 104553,City,200,Country 104556,City,200,Country 104557,City,200,Country 104577,City,200,Country 104578,City,200,Country 104583,City,200,Country 104582,City,200,Country 104598,City,200,Country 104379,City,200,Country 104373,City,200,Country 104377,City,200,Country 104586,City,200,Country 104384,City,200,Country 104394,City,200,Country 104402,City,200,Country 104419,City,200,Country 104436,City,200,Country 104437,City,200,Country 104441,City,200,Country 104443,City,200,Country 104444,City,200,Country 104457,City,200,Country 104465,City,200,Country 104479,City,200,Country 104482,City,200,Country 104484,City,200,Country 104489,City,200,Country 104491,City,200,Country 104492,City,200,Country 104508,City,200,Country 104523,City,200,Country 104529,City,200,Country 104532,City,200,Country 104533,City,200,Country 104551,City,200,Country 104566,City,200,Country 104567,City,200,Country 104387,City,200,Country 104389,City,200,Country 104390,City,200,Country 104391,City,200,Country 104395,City,200,Country 104396,City,200,Country 104420,City,200,Country 104460,City,200,Country 104461,City,200,Country 104463,City,200,Country 104486,City,200,Country 104498,City,200,Country 104499,City,200,Country 104509,City,200,Country 104525,City,200,Country 104592,City,200,Country 104541,City,200,Country 104543,City,200,Country 104544,City,200,Country 104545,City,200,Country 104568,City,200,Country 104574,City,200,Country 104579,City,200,Country 104378,City,200,Country 104587,City,200,Country 104383,City,200,Country 104401,City,200,Country 104414,City,200,Country 104418,City,200,Country 104424,City,200,Country 104425,City,200,Country 104427,City,200,Country 104430,City,200,Country 104446,City,200,Country 104439,City,200,Country 104456,City,200,Country 104516,City,200,Country 104459,City,200,Country 104470,City,200,Country 104473,City,200,Country 104476,City,200,Country 104480,City,200,Country 104495,City,200,Country 104510,City,200,Country 104511,City,200,Country 104520,City,200,Country 104521,City,200,Country 104522,City,200,Country 104531,City,200,Country 104534,City,200,Country 104538,City,200,Country 104561,City,200,Country 104569,City,200,Country 104571,City,200,Country 104570,City,200,Country 104572,City,200,Country 104581,City,200,Country 104602,City,200,Country 104059,City,201,Country 104084,City,201,Country 104174,City,201,Country 104060,City,201,Country 104063,City,201,Country 104104,City,201,Country 104166,City,201,Country 104331,City,201,Country 104064,City,201,Country 104067,City,201,Country 104069,City,201,Country 104144,City,201,Country 104326,City,201,Country 104207,City,201,Country 104070,City,201,Country 104100,City,201,Country 104172,City,201,Country 104071,City,201,Country 104180,City,201,Country 104072,City,201,Country 104190,City,201,Country 104073,City,201,Country 104094,City,201,Country 104195,City,201,Country 104076,City,201,Country 104227,City,201,Country 104075,City,201,Country 104205,City,201,Country 104214,City,201,Country 104254,City,201,Country 104316,City,201,Country 104078,City,201,Country 104080,City,201,Country 104081,City,201,Country 104246,City,201,Country 104082,City,201,Country 104083,City,201,Country 104079,City,201,Country 104168,City,201,Country 104299,City,201,Country 104208,City,201,Country 104337,City,201,Country 104338,City,201,Country 104339,City,201,Country 104087,City,201,Country 104088,City,201,Country 104090,City,201,Country 104309,City,201,Country 104091,City,201,Country 104092,City,201,Country 104093,City,201,Country 104096,City,201,Country 104097,City,201,Country 104089,City,201,Country 104098,City,201,Country 104244,City,201,Country 104312,City,201,Country 104099,City,201,Country 104102,City,201,Country 104283,City,201,Country 104334,City,201,Country 104106,City,201,Country 104107,City,201,Country 104108,City,201,Country 104109,City,201,Country 104110,City,201,Country 104112,City,201,Country 104113,City,201,Country 104357,City,201,Country 104279,City,201,Country 104116,City,201,Country 104242,City,201,Country 104260,City,201,Country 104281,City,201,Country 104114,City,201,Country 104115,City,201,Country 104095,City,201,Country 104118,City,201,Country 104147,City,201,Country 104122,City,201,Country 104280,City,201,Country 104123,City,201,Country 104125,City,201,Country 104350,City,201,Country 104127,City,201,Country 104128,City,201,Country 104120,City,201,Country 104130,City,201,Country 104143,City,201,Country 104274,City,201,Country 104332,City,201,Country 104131,City,201,Country 104133,City,201,Country 104184,City,201,Country 104355,City,201,Country 104086,City,201,Country 104134,City,201,Country 104135,City,201,Country 104137,City,201,Country 104138,City,201,Country 104149,City,201,Country 104140,City,201,Country 104141,City,201,Country 104199,City,201,Country 104085,City,201,Country 104121,City,201,Country 104142,City,201,Country 104223,City,201,Country 104231,City,201,Country 104282,City,201,Country 104288,City,201,Country 104145,City,201,Country 104148,City,201,Country 104077,City,201,Country 104105,City,201,Country 104139,City,201,Country 104150,City,201,Country 104193,City,201,Country 104330,City,201,Country 104151,City,201,Country 104194,City,201,Country 104152,City,201,Country 104328,City,201,Country 104156,City,201,Country 104158,City,201,Country 104160,City,201,Country 104161,City,201,Country 104167,City,201,Country 104101,City,201,Country 104129,City,201,Country 104169,City,201,Country 104211,City,201,Country 104212,City,201,Country 104213,City,201,Country 104262,City,201,Country 104349,City,201,Country 104278,City,201,Country 104300,City,201,Country 104315,City,201,Country 104170,City,201,Country 104171,City,201,Country 104173,City,201,Country 104163,City,201,Country 104119,City,201,Country 104175,City,201,Country 104178,City,201,Country 104177,City,201,Country 104179,City,201,Country 104074,City,201,Country 104132,City,201,Country 104165,City,201,Country 104181,City,201,Country 104219,City,201,Country 104251,City,201,Country 104182,City,201,Country 104183,City,201,Country 104215,City,201,Country 104333,City,201,Country 104185,City,201,Country 104235,City,201,Country 104186,City,201,Country 104187,City,201,Country 104188,City,201,Country 104065,City,201,Country 104189,City,201,Country 104191,City,201,Country 104192,City,201,Country 104197,City,201,Country 104196,City,201,Country 104200,City,201,Country 104061,City,201,Country 104124,City,201,Country 104155,City,201,Country 104164,City,201,Country 104267,City,201,Country 104157,City,201,Country 104354,City,201,Country 104062,City,201,Country 104336,City,201,Country 104153,City,201,Country 104201,City,201,Country 104247,City,201,Country 104202,City,201,Country 104203,City,201,Country 104204,City,201,Country 104154,City,201,Country 104206,City,201,Country 104237,City,201,Country 104342,City,201,Country 104276,City,201,Country 104209,City,201,Country 104210,City,201,Country 104216,City,201,Country 104217,City,201,Country 104220,City,201,Country 104176,City,201,Country 104221,City,201,Country 104229,City,201,Country 104269,City,201,Country 104222,City,201,Country 104226,City,201,Country 104224,City,201,Country 104225,City,201,Country 104228,City,201,Country 104230,City,201,Country 104233,City,201,Country 104234,City,201,Country 104236,City,201,Country 104238,City,201,Country 104239,City,201,Country 104103,City,201,Country 104198,City,201,Country 104252,City,201,Country 104241,City,201,Country 104240,City,201,Country 104243,City,201,Country 104162,City,201,Country 104245,City,201,Country 104146,City,201,Country 104249,City,201,Country 104250,City,201,Country 104253,City,201,Country 104319,City,201,Country 104255,City,201,Country 104256,City,201,Country 104258,City,201,Country 104259,City,201,Country 104257,City,201,Country 104066,City,201,Country 104263,City,201,Country 104341,City,201,Country 104264,City,201,Country 104266,City,201,Country 104261,City,201,Country 104343,City,201,Country 104322,City,201,Country 104117,City,201,Country 104351,City,201,Country 104265,City,201,Country 104345,City,201,Country 104346,City,201,Country 104347,City,201,Country 104348,City,201,Country 104268,City,201,Country 104270,City,201,Country 104352,City,201,Country 104353,City,201,Country 104289,City,201,Country 104159,City,201,Country 104218,City,201,Country 104271,City,201,Country 104361,City,201,Country 104232,City,201,Country 104272,City,201,Country 104329,City,201,Country 104273,City,201,Country 104356,City,201,Country 104358,City,201,Country 104359,City,201,Country 104360,City,201,Country 104275,City,201,Country 104277,City,201,Country 104248,City,201,Country 104362,City,201,Country 104296,City,201,Country 104284,City,201,Country 104285,City,201,Country 104363,City,201,Country 104286,City,201,Country 104287,City,201,Country 104290,City,201,Country 104314,City,201,Country 104291,City,201,Country 104292,City,201,Country 104293,City,201,Country 104294,City,201,Country 104295,City,201,Country 104297,City,201,Country 104298,City,201,Country 104301,City,201,Country 104068,City,201,Country 104303,City,201,Country 104340,City,201,Country 104302,City,201,Country 104304,City,201,Country 104305,City,201,Country 104306,City,201,Country 104308,City,201,Country 104310,City,201,Country 104311,City,201,Country 104313,City,201,Country 104317,City,201,Country 104318,City,201,Country 104320,City,201,Country 104307,City,201,Country 104321,City,201,Country 104323,City,201,Country 104126,City,201,Country 104136,City,201,Country 104325,City,201,Country 104111,City,201,Country 104344,City,201,Country 104324,City,201,Country 104364,City,201,Country 104327,City,201,Country 104365,City,201,Country 104366,City,201,Country 104367,City,201,Country 104368,City,201,Country 104335,City,201,Country 104369,City,201,Country 31915,City,207,Country 31918,City,207,Country 31929,City,207,Country 31936,City,207,Country 31950,City,207,Country 31951,City,207,Country 31958,City,207,Country 32346,City,207,Country 31994,City,207,Country 31996,City,207,Country 32000,City,207,Country 32015,City,207,Country 32063,City,207,Country 32048,City,207,Country 32049,City,207,Country 32056,City,207,Country 32062,City,207,Country 32060,City,207,Country 32061,City,207,Country 32070,City,207,Country 32076,City,207,Country 32079,City,207,Country 32080,City,207,Country 32081,City,207,Country 32087,City,207,Country 32090,City,207,Country 32091,City,207,Country 32103,City,207,Country 32109,City,207,Country 32138,City,207,Country 32130,City,207,Country 32167,City,207,Country 32180,City,207,Country 32188,City,207,Country 32196,City,207,Country 32197,City,207,Country 32231,City,207,Country 32210,City,207,Country 32212,City,207,Country 32214,City,207,Country 32215,City,207,Country 32216,City,207,Country 32223,City,207,Country 32232,City,207,Country 32233,City,207,Country 32235,City,207,Country 32238,City,207,Country 32239,City,207,Country 32240,City,207,Country 32245,City,207,Country 32246,City,207,Country 32251,City,207,Country 32315,City,207,Country 32262,City,207,Country 32270,City,207,Country 32277,City,207,Country 32279,City,207,Country 32289,City,207,Country 32290,City,207,Country 32316,City,207,Country 32295,City,207,Country 32297,City,207,Country 32305,City,207,Country 32314,City,207,Country 32320,City,207,Country 32321,City,207,Country 32323,City,207,Country 32324,City,207,Country 32334,City,207,Country 32336,City,207,Country 32376,City,207,Country 32596,City,207,Country 32390,City,207,Country 32392,City,207,Country 32399,City,207,Country 32426,City,207,Country 38575,City,207,Country 32431,City,207,Country 32437,City,207,Country 32441,City,207,Country 32444,City,207,Country 32448,City,207,Country 32482,City,207,Country 32483,City,207,Country 32488,City,207,Country 32491,City,207,Country 32496,City,207,Country 32499,City,207,Country 32506,City,207,Country 32512,City,207,Country 32514,City,207,Country 32543,City,207,Country 32550,City,207,Country 32571,City,207,Country 32584,City,207,Country 32585,City,207,Country 32604,City,207,Country 32607,City,207,Country 32608,City,207,Country 32615,City,207,Country 32709,City,207,Country 32646,City,207,Country 32699,City,207,Country 32696,City,207,Country 32700,City,207,Country 32716,City,207,Country 32717,City,207,Country 32718,City,207,Country 32719,City,207,Country 33057,City,207,Country 32730,City,207,Country 32732,City,207,Country 32734,City,207,Country 33059,City,207,Country 33060,City,207,Country 32757,City,207,Country 32762,City,207,Country 32763,City,207,Country 32764,City,207,Country 32765,City,207,Country 32767,City,207,Country 32768,City,207,Country 32766,City,207,Country 32769,City,207,Country 32770,City,207,Country 32771,City,207,Country 32772,City,207,Country 32773,City,207,Country 32774,City,207,Country 32775,City,207,Country 32779,City,207,Country 32823,City,207,Country 32824,City,207,Country 32827,City,207,Country 33061,City,207,Country 32853,City,207,Country 32868,City,207,Country 32938,City,207,Country 32939,City,207,Country 32944,City,207,Country 32956,City,207,Country 32957,City,207,Country 32977,City,207,Country 32997,City,207,Country 33014,City,207,Country 33027,City,207,Country 33036,City,207,Country 33084,City,207,Country 33098,City,207,Country 33100,City,207,Country 33893,City,207,Country 33117,City,207,Country 33894,City,207,Country 33120,City,207,Country 33135,City,207,Country 33144,City,207,Country 33172,City,207,Country 33175,City,207,Country 33189,City,207,Country 33195,City,207,Country 33200,City,207,Country 33212,City,207,Country 33526,City,207,Country 33901,City,207,Country 33536,City,207,Country 33231,City,207,Country 33540,City,207,Country 33541,City,207,Country 33239,City,207,Country 33241,City,207,Country 33242,City,207,Country 33245,City,207,Country 33257,City,207,Country 33260,City,207,Country 33268,City,207,Country 33276,City,207,Country 33285,City,207,Country 33288,City,207,Country 33290,City,207,Country 33298,City,207,Country 33310,City,207,Country 33325,City,207,Country 33333,City,207,Country 33337,City,207,Country 33898,City,207,Country 33338,City,207,Country 33343,City,207,Country 33348,City,207,Country 33350,City,207,Country 33352,City,207,Country 33900,City,207,Country 33412,City,207,Country 33420,City,207,Country 33419,City,207,Country 33447,City,207,Country 33454,City,207,Country 33455,City,207,Country 33456,City,207,Country 33468,City,207,Country 33464,City,207,Country 33474,City,207,Country 33488,City,207,Country 33491,City,207,Country 33522,City,207,Country 33523,City,207,Country 33524,City,207,Country 33568,City,207,Country 33619,City,207,Country 33627,City,207,Country 33631,City,207,Country 33630,City,207,Country 33635,City,207,Country 33637,City,207,Country 33641,City,207,Country 33643,City,207,Country 33648,City,207,Country 33652,City,207,Country 33666,City,207,Country 33902,City,207,Country 33723,City,207,Country 33831,City,207,Country 33741,City,207,Country 33747,City,207,Country 33751,City,207,Country 33903,City,207,Country 33761,City,207,Country 33762,City,207,Country 33765,City,207,Country 33904,City,207,Country 33790,City,207,Country 33791,City,207,Country 33806,City,207,Country 33807,City,207,Country 33810,City,207,Country 33812,City,207,Country 33820,City,207,Country 33869,City,207,Country 33874,City,207,Country 33876,City,207,Country 33877,City,207,Country 33878,City,207,Country 33906,City,207,Country 33883,City,207,Country 33907,City,207,Country 33911,City,207,Country 33914,City,207,Country 33920,City,207,Country 33921,City,207,Country 33934,City,207,Country 33965,City,207,Country 33940,City,207,Country 33954,City,207,Country 33949,City,207,Country 33950,City,207,Country 33966,City,207,Country 33967,City,207,Country 38577,City,207,Country 33977,City,207,Country 33981,City,207,Country 33986,City,207,Country 33991,City,207,Country 33992,City,207,Country 33993,City,207,Country 33995,City,207,Country 33996,City,207,Country 33998,City,207,Country 34013,City,207,Country 34016,City,207,Country 34017,City,207,Country 34018,City,207,Country 34019,City,207,Country 34023,City,207,Country 34026,City,207,Country 34028,City,207,Country 34047,City,207,Country 34051,City,207,Country 34060,City,207,Country 34075,City,207,Country 34084,City,207,Country 34094,City,207,Country 34109,City,207,Country 34112,City,207,Country 34114,City,207,Country 34115,City,207,Country 34116,City,207,Country 34136,City,207,Country 34141,City,207,Country 34143,City,207,Country 34162,City,207,Country 34175,City,207,Country 34176,City,207,Country 34194,City,207,Country 34188,City,207,Country 34205,City,207,Country 34206,City,207,Country 34238,City,207,Country 34243,City,207,Country 34266,City,207,Country 34282,City,207,Country 34290,City,207,Country 34297,City,207,Country 34304,City,207,Country 34292,City,207,Country 34293,City,207,Country 34294,City,207,Country 34306,City,207,Country 34316,City,207,Country 34338,City,207,Country 34362,City,207,Country 34558,City,207,Country 34375,City,207,Country 34380,City,207,Country 34427,City,207,Country 34438,City,207,Country 34448,City,207,Country 34451,City,207,Country 34561,City,207,Country 34454,City,207,Country 34562,City,207,Country 34462,City,207,Country 34463,City,207,Country 34467,City,207,Country 34473,City,207,Country 34563,City,207,Country 34484,City,207,Country 34497,City,207,Country 34507,City,207,Country 34519,City,207,Country 34522,City,207,Country 34523,City,207,Country 34531,City,207,Country 34533,City,207,Country 34538,City,207,Country 34539,City,207,Country 34570,City,207,Country 34567,City,207,Country 34548,City,207,Country 34593,City,207,Country 34608,City,207,Country 34609,City,207,Country 34612,City,207,Country 34620,City,207,Country 34621,City,207,Country 34622,City,207,Country 34627,City,207,Country 34660,City,207,Country 34706,City,207,Country 34708,City,207,Country 34684,City,207,Country 34685,City,207,Country 34710,City,207,Country 34711,City,207,Country 34712,City,207,Country 34694,City,207,Country 34717,City,207,Country 34718,City,207,Country 34719,City,207,Country 34720,City,207,Country 34702,City,207,Country 34731,City,207,Country 34740,City,207,Country 34746,City,207,Country 34749,City,207,Country 34757,City,207,Country 34766,City,207,Country 34767,City,207,Country 34768,City,207,Country 38580,City,207,Country 34782,City,207,Country 34779,City,207,Country 34780,City,207,Country 34781,City,207,Country 34785,City,207,Country 34786,City,207,Country 34811,City,207,Country 34795,City,207,Country 34810,City,207,Country 34812,City,207,Country 34836,City,207,Country 34816,City,207,Country 34817,City,207,Country 34818,City,207,Country 34838,City,207,Country 34826,City,207,Country 34829,City,207,Country 34834,City,207,Country 34839,City,207,Country 34853,City,207,Country 34855,City,207,Country 34862,City,207,Country 34864,City,207,Country 34865,City,207,Country 34875,City,207,Country 34882,City,207,Country 34884,City,207,Country 34886,City,207,Country 34888,City,207,Country 34892,City,207,Country 34891,City,207,Country 34895,City,207,Country 34899,City,207,Country 34910,City,207,Country 34912,City,207,Country 34913,City,207,Country 34915,City,207,Country 34916,City,207,Country 34917,City,207,Country 34922,City,207,Country 34933,City,207,Country 35174,City,207,Country 34967,City,207,Country 34969,City,207,Country 34977,City,207,Country 34982,City,207,Country 34983,City,207,Country 34984,City,207,Country 35004,City,207,Country 35011,City,207,Country 35029,City,207,Country 35030,City,207,Country 35052,City,207,Country 35055,City,207,Country 35096,City,207,Country 35102,City,207,Country 35108,City,207,Country 35110,City,207,Country 35111,City,207,Country 35118,City,207,Country 35119,City,207,Country 35126,City,207,Country 35131,City,207,Country 35136,City,207,Country 35147,City,207,Country 35148,City,207,Country 35177,City,207,Country 35149,City,207,Country 35152,City,207,Country 35160,City,207,Country 35178,City,207,Country 35168,City,207,Country 35169,City,207,Country 35179,City,207,Country 35212,City,207,Country 35213,City,207,Country 35703,City,207,Country 35242,City,207,Country 35250,City,207,Country 35271,City,207,Country 35275,City,207,Country 35281,City,207,Country 35283,City,207,Country 35285,City,207,Country 35312,City,207,Country 35291,City,207,Country 35295,City,207,Country 35307,City,207,Country 35302,City,207,Country 35350,City,207,Country 35369,City,207,Country 35405,City,207,Country 35427,City,207,Country 35463,City,207,Country 35462,City,207,Country 35468,City,207,Country 35473,City,207,Country 35489,City,207,Country 35490,City,207,Country 35494,City,207,Country 35503,City,207,Country 35533,City,207,Country 35548,City,207,Country 35550,City,207,Country 35551,City,207,Country 35557,City,207,Country 35558,City,207,Country 35577,City,207,Country 35578,City,207,Country 35579,City,207,Country 35583,City,207,Country 35585,City,207,Country 35600,City,207,Country 35629,City,207,Country 35636,City,207,Country 35645,City,207,Country 35686,City,207,Country 35781,City,207,Country 35802,City,207,Country 35804,City,207,Country 35805,City,207,Country 35809,City,207,Country 35844,City,207,Country 35845,City,207,Country 35812,City,207,Country 35834,City,207,Country 35853,City,207,Country 35862,City,207,Country 35863,City,207,Country 35870,City,207,Country 35888,City,207,Country 35914,City,207,Country 35915,City,207,Country 35917,City,207,Country 35936,City,207,Country 35937,City,207,Country 38583,City,207,Country 35948,City,207,Country 35975,City,207,Country 35982,City,207,Country 35981,City,207,Country 35996,City,207,Country 35997,City,207,Country 36024,City,207,Country 36029,City,207,Country 36037,City,207,Country 36041,City,207,Country 36043,City,207,Country 36058,City,207,Country 36061,City,207,Country 36072,City,207,Country 36078,City,207,Country 36079,City,207,Country 36081,City,207,Country 36085,City,207,Country 36088,City,207,Country 36096,City,207,Country 36098,City,207,Country 36100,City,207,Country 36102,City,207,Country 36114,City,207,Country 36126,City,207,Country 36163,City,207,Country 36174,City,207,Country 36149,City,207,Country 36188,City,207,Country 36229,City,207,Country 36211,City,207,Country 36212,City,207,Country 36224,City,207,Country 36267,City,207,Country 36265,City,207,Country 36277,City,207,Country 36486,City,207,Country 36303,City,207,Country 36316,City,207,Country 36323,City,207,Country 36346,City,207,Country 36354,City,207,Country 36358,City,207,Country 36369,City,207,Country 36370,City,207,Country 36372,City,207,Country 36374,City,207,Country 36380,City,207,Country 36388,City,207,Country 36401,City,207,Country 36415,City,207,Country 36417,City,207,Country 36436,City,207,Country 36441,City,207,Country 36447,City,207,Country 36450,City,207,Country 36466,City,207,Country 36468,City,207,Country 36469,City,207,Country 36470,City,207,Country 36475,City,207,Country 36477,City,207,Country 36532,City,207,Country 36498,City,207,Country 36714,City,207,Country 36584,City,207,Country 36627,City,207,Country 36716,City,207,Country 36630,City,207,Country 36673,City,207,Country 36675,City,207,Country 36676,City,207,Country 36680,City,207,Country 36692,City,207,Country 36705,City,207,Country 36706,City,207,Country 36724,City,207,Country 36746,City,207,Country 36747,City,207,Country 36774,City,207,Country 36779,City,207,Country 36810,City,207,Country 36827,City,207,Country 36835,City,207,Country 36841,City,207,Country 36842,City,207,Country 36844,City,207,Country 36852,City,207,Country 36896,City,207,Country 36903,City,207,Country 36919,City,207,Country 36921,City,207,Country 36923,City,207,Country 36947,City,207,Country 36948,City,207,Country 36949,City,207,Country 37006,City,207,Country 37009,City,207,Country 37047,City,207,Country 37049,City,207,Country 37059,City,207,Country 37094,City,207,Country 37104,City,207,Country 37105,City,207,Country 37113,City,207,Country 37131,City,207,Country 37133,City,207,Country 37143,City,207,Country 37182,City,207,Country 37188,City,207,Country 37197,City,207,Country 37228,City,207,Country 37236,City,207,Country 37239,City,207,Country 37246,City,207,Country 37248,City,207,Country 37254,City,207,Country 37288,City,207,Country 37296,City,207,Country 37298,City,207,Country 37302,City,207,Country 37305,City,207,Country 37331,City,207,Country 37343,City,207,Country 37350,City,207,Country 37381,City,207,Country 37390,City,207,Country 37406,City,207,Country 37667,City,207,Country 37439,City,207,Country 37448,City,207,Country 37449,City,207,Country 37487,City,207,Country 37501,City,207,Country 37503,City,207,Country 37506,City,207,Country 37511,City,207,Country 37513,City,207,Country 37530,City,207,Country 37561,City,207,Country 37566,City,207,Country 37569,City,207,Country 37571,City,207,Country 37592,City,207,Country 37605,City,207,Country 37625,City,207,Country 37634,City,207,Country 37637,City,207,Country 37656,City,207,Country 37657,City,207,Country 38584,City,207,Country 37670,City,207,Country 37675,City,207,Country 37679,City,207,Country 37685,City,207,Country 37697,City,207,Country 37711,City,207,Country 37758,City,207,Country 37783,City,207,Country 37796,City,207,Country 37815,City,207,Country 37809,City,207,Country 37822,City,207,Country 37823,City,207,Country 38413,City,207,Country 37893,City,207,Country 37921,City,207,Country 37926,City,207,Country 38414,City,207,Country 37927,City,207,Country 38415,City,207,Country 38416,City,207,Country 37941,City,207,Country 37947,City,207,Country 37961,City,207,Country 38417,City,207,Country 38006,City,207,Country 38014,City,207,Country 38016,City,207,Country 38026,City,207,Country 38056,City,207,Country 38081,City,207,Country 38102,City,207,Country 38124,City,207,Country 38132,City,207,Country 38136,City,207,Country 38171,City,207,Country 38180,City,207,Country 38200,City,207,Country 38205,City,207,Country 38208,City,207,Country 38210,City,207,Country 38189,City,207,Country 38192,City,207,Country 38212,City,207,Country 38213,City,207,Country 38217,City,207,Country 38223,City,207,Country 38222,City,207,Country 38224,City,207,Country 38264,City,207,Country 38268,City,207,Country 38294,City,207,Country 38301,City,207,Country 38350,City,207,Country 38356,City,207,Country 38410,City,207,Country 38418,City,207,Country 38441,City,207,Country 38449,City,207,Country 38453,City,207,Country 38454,City,207,Country 38455,City,207,Country 38459,City,207,Country 38501,City,207,Country 38505,City,207,Country 38507,City,207,Country 38512,City,207,Country 38510,City,207,Country 31898,City,207,Country 31904,City,207,Country 31913,City,207,Country 31914,City,207,Country 31927,City,207,Country 31971,City,207,Country 31952,City,207,Country 31954,City,207,Country 31955,City,207,Country 31972,City,207,Country 31964,City,207,Country 31966,City,207,Country 32594,City,207,Country 31982,City,207,Country 31988,City,207,Country 31989,City,207,Country 31991,City,207,Country 32004,City,207,Country 32009,City,207,Country 32022,City,207,Country 32025,City,207,Country 32026,City,207,Country 32029,City,207,Country 32033,City,207,Country 32039,City,207,Country 32040,City,207,Country 32041,City,207,Country 32042,City,207,Country 32044,City,207,Country 32054,City,207,Country 32066,City,207,Country 32069,City,207,Country 32071,City,207,Country 32074,City,207,Country 32073,City,207,Country 32078,City,207,Country 32094,City,207,Country 32105,City,207,Country 32116,City,207,Country 32120,City,207,Country 32124,City,207,Country 32176,City,207,Country 32185,City,207,Country 32191,City,207,Country 32192,City,207,Country 32193,City,207,Country 32206,City,207,Country 32205,City,207,Country 32234,City,207,Country 32242,City,207,Country 32255,City,207,Country 32257,City,207,Country 32258,City,207,Country 32292,City,207,Country 32298,City,207,Country 32302,City,207,Country 32303,City,207,Country 32309,City,207,Country 32311,City,207,Country 32312,City,207,Country 32317,City,207,Country 32326,City,207,Country 32330,City,207,Country 32335,City,207,Country 32350,City,207,Country 32365,City,207,Country 32373,City,207,Country 32377,City,207,Country 32384,City,207,Country 32389,City,207,Country 32395,City,207,Country 32401,City,207,Country 32408,City,207,Country 32530,City,207,Country 32440,City,207,Country 32450,City,207,Country 32465,City,207,Country 32470,City,207,Country 32474,City,207,Country 32481,City,207,Country 32480,City,207,Country 32525,City,207,Country 32553,City,207,Country 32554,City,207,Country 32573,City,207,Country 32581,City,207,Country 32583,City,207,Country 32589,City,207,Country 33048,City,207,Country 32605,City,207,Country 32606,City,207,Country 33049,City,207,Country 32610,City,207,Country 32614,City,207,Country 32622,City,207,Country 32625,City,207,Country 32631,City,207,Country 32712,City,207,Country 32645,City,207,Country 33050,City,207,Country 32649,City,207,Country 32650,City,207,Country 33051,City,207,Country 32660,City,207,Country 32668,City,207,Country 32713,City,207,Country 32737,City,207,Country 32741,City,207,Country 32753,City,207,Country 32777,City,207,Country 32780,City,207,Country 32834,City,207,Country 32845,City,207,Country 32850,City,207,Country 32884,City,207,Country 32887,City,207,Country 32888,City,207,Country 32891,City,207,Country 32894,City,207,Country 32896,City,207,Country 32898,City,207,Country 32899,City,207,Country 32900,City,207,Country 32901,City,207,Country 32902,City,207,Country 32907,City,207,Country 32912,City,207,Country 32940,City,207,Country 32943,City,207,Country 32949,City,207,Country 32950,City,207,Country 32951,City,207,Country 32953,City,207,Country 32954,City,207,Country 32966,City,207,Country 32974,City,207,Country 32991,City,207,Country 32992,City,207,Country 32996,City,207,Country 33008,City,207,Country 33016,City,207,Country 33017,City,207,Country 33021,City,207,Country 33023,City,207,Country 33070,City,207,Country 33097,City,207,Country 33099,City,207,Country 33119,City,207,Country 33123,City,207,Country 33128,City,207,Country 33130,City,207,Country 33132,City,207,Country 33134,City,207,Country 33136,City,207,Country 33147,City,207,Country 33148,City,207,Country 33173,City,207,Country 33165,City,207,Country 33168,City,207,Country 33179,City,207,Country 33187,City,207,Country 33208,City,207,Country 33528,City,207,Country 33527,City,207,Country 33225,City,207,Country 33236,City,207,Country 33544,City,207,Country 33256,City,207,Country 33265,City,207,Country 33266,City,207,Country 33305,City,207,Country 33306,City,207,Country 33383,City,207,Country 33387,City,207,Country 33393,City,207,Country 33400,City,207,Country 33406,City,207,Country 33402,City,207,Country 33403,City,207,Country 33404,City,207,Country 33405,City,207,Country 33407,City,207,Country 33408,City,207,Country 33409,City,207,Country 33433,City,207,Country 33439,City,207,Country 33440,City,207,Country 33442,City,207,Country 33443,City,207,Country 33452,City,207,Country 33453,City,207,Country 33558,City,207,Country 33564,City,207,Country 33598,City,207,Country 33603,City,207,Country 33608,City,207,Country 33613,City,207,Country 33653,City,207,Country 33638,City,207,Country 33642,City,207,Country 33645,City,207,Country 33675,City,207,Country 33676,City,207,Country 33704,City,207,Country 33718,City,207,Country 33748,City,207,Country 33769,City,207,Country 33773,City,207,Country 33808,City,207,Country 33815,City,207,Country 33823,City,207,Country 33838,City,207,Country 33844,City,207,Country 33846,City,207,Country 33858,City,207,Country 33862,City,207,Country 33871,City,207,Country 33870,City,207,Country 33913,City,207,Country 33924,City,207,Country 33971,City,207,Country 33974,City,207,Country 33976,City,207,Country 33982,City,207,Country 33990,City,207,Country 38530,City,207,Country 34041,City,207,Country 34045,City,207,Country 38579,City,207,Country 34067,City,207,Country 34083,City,207,Country 34090,City,207,Country 34091,City,207,Country 34128,City,207,Country 34137,City,207,Country 34138,City,207,Country 34144,City,207,Country 34154,City,207,Country 34157,City,207,Country 34165,City,207,Country 34170,City,207,Country 34181,City,207,Country 34187,City,207,Country 34191,City,207,Country 34202,City,207,Country 34207,City,207,Country 34218,City,207,Country 34223,City,207,Country 34368,City,207,Country 34229,City,207,Country 34235,City,207,Country 34237,City,207,Country 34270,City,207,Country 34272,City,207,Country 34279,City,207,Country 34280,City,207,Country 34281,City,207,Country 34336,City,207,Country 34337,City,207,Country 34343,City,207,Country 34344,City,207,Country 34350,City,207,Country 34356,City,207,Country 34395,City,207,Country 34396,City,207,Country 34397,City,207,Country 34414,City,207,Country 34443,City,207,Country 34447,City,207,Country 34472,City,207,Country 34476,City,207,Country 34490,City,207,Country 34508,City,207,Country 34506,City,207,Country 34510,City,207,Country 34514,City,207,Country 34515,City,207,Country 34521,City,207,Country 34566,City,207,Country 34554,City,207,Country 34598,City,207,Country 34722,City,207,Country 34624,City,207,Country 34681,City,207,Country 34693,City,207,Country 34695,City,207,Country 34696,City,207,Country 34725,City,207,Country 34728,City,207,Country 34738,City,207,Country 34743,City,207,Country 34750,City,207,Country 34769,City,207,Country 34784,City,207,Country 34787,City,207,Country 34796,City,207,Country 34803,City,207,Country 34804,City,207,Country 34805,City,207,Country 34806,City,207,Country 34807,City,207,Country 34822,City,207,Country 34824,City,207,Country 34854,City,207,Country 34877,City,207,Country 34885,City,207,Country 34937,City,207,Country 34941,City,207,Country 34944,City,207,Country 34954,City,207,Country 34955,City,207,Country 34958,City,207,Country 34964,City,207,Country 34970,City,207,Country 34971,City,207,Country 34997,City,207,Country 34998,City,207,Country 34999,City,207,Country 35005,City,207,Country 35176,City,207,Country 35012,City,207,Country 35013,City,207,Country 35038,City,207,Country 35047,City,207,Country 35049,City,207,Country 35053,City,207,Country 35057,City,207,Country 35058,City,207,Country 35072,City,207,Country 35093,City,207,Country 35094,City,207,Country 35106,City,207,Country 35107,City,207,Country 35109,City,207,Country 35142,City,207,Country 35143,City,207,Country 35150,City,207,Country 35153,City,207,Country 35157,City,207,Country 35158,City,207,Country 35165,City,207,Country 35166,City,207,Country 35197,City,207,Country 35200,City,207,Country 35209,City,207,Country 35210,City,207,Country 35220,City,207,Country 35222,City,207,Country 35224,City,207,Country 35234,City,207,Country 35232,City,207,Country 35244,City,207,Country 35270,City,207,Country 35274,City,207,Country 35313,City,207,Country 35296,City,207,Country 35308,City,207,Country 35316,City,207,Country 35351,City,207,Country 35406,City,207,Country 35411,City,207,Country 35414,City,207,Country 35415,City,207,Country 35417,City,207,Country 35447,City,207,Country 35482,City,207,Country 35508,City,207,Country 35510,City,207,Country 35514,City,207,Country 35521,City,207,Country 35522,City,207,Country 35524,City,207,Country 35532,City,207,Country 35543,City,207,Country 35546,City,207,Country 35563,City,207,Country 35564,City,207,Country 35589,City,207,Country 35590,City,207,Country 35594,City,207,Country 35614,City,207,Country 35615,City,207,Country 35634,City,207,Country 35633,City,207,Country 35638,City,207,Country 35639,City,207,Country 35648,City,207,Country 35650,City,207,Country 35655,City,207,Country 35667,City,207,Country 35665,City,207,Country 35672,City,207,Country 35740,City,207,Country 35766,City,207,Country 35810,City,207,Country 35818,City,207,Country 35819,City,207,Country 35823,City,207,Country 35824,City,207,Country 35826,City,207,Country 35827,City,207,Country 35830,City,207,Country 35832,City,207,Country 35839,City,207,Country 35836,City,207,Country 35854,City,207,Country 35860,City,207,Country 35868,City,207,Country 35874,City,207,Country 35881,City,207,Country 35893,City,207,Country 35918,City,207,Country 35927,City,207,Country 35935,City,207,Country 35945,City,207,Country 35965,City,207,Country 35951,City,207,Country 35961,City,207,Country 35970,City,207,Country 36033,City,207,Country 36035,City,207,Country 36047,City,207,Country 36048,City,207,Country 36054,City,207,Country 36055,City,207,Country 36103,City,207,Country 36165,City,207,Country 36130,City,207,Country 36134,City,207,Country 36140,City,207,Country 36143,City,207,Country 36146,City,207,Country 36153,City,207,Country 36185,City,207,Country 36190,City,207,Country 36214,City,207,Country 36220,City,207,Country 36221,City,207,Country 36233,City,207,Country 36237,City,207,Country 36242,City,207,Country 36243,City,207,Country 36246,City,207,Country 36259,City,207,Country 36269,City,207,Country 36339,City,207,Country 36325,City,207,Country 36328,City,207,Country 36329,City,207,Country 36332,City,207,Country 36342,City,207,Country 36373,City,207,Country 36390,City,207,Country 36393,City,207,Country 36408,City,207,Country 36410,City,207,Country 36440,City,207,Country 36479,City,207,Country 36458,City,207,Country 36460,City,207,Country 36476,City,207,Country 36499,City,207,Country 36528,City,207,Country 36711,City,207,Country 36573,City,207,Country 36585,City,207,Country 36620,City,207,Country 36624,City,207,Country 36629,City,207,Country 36658,City,207,Country 36719,City,207,Country 36672,City,207,Country 36683,City,207,Country 36689,City,207,Country 36691,City,207,Country 36690,City,207,Country 36700,City,207,Country 36725,City,207,Country 37335,City,207,Country 36742,City,207,Country 36748,City,207,Country 36749,City,207,Country 36753,City,207,Country 36759,City,207,Country 36761,City,207,Country 36762,City,207,Country 36769,City,207,Country 36784,City,207,Country 36793,City,207,Country 36794,City,207,Country 36798,City,207,Country 36877,City,207,Country 36878,City,207,Country 36944,City,207,Country 37029,City,207,Country 37040,City,207,Country 37030,City,207,Country 37033,City,207,Country 37054,City,207,Country 37056,City,207,Country 37109,City,207,Country 37163,City,207,Country 37173,City,207,Country 37336,City,207,Country 37186,City,207,Country 37189,City,207,Country 37198,City,207,Country 37200,City,207,Country 37214,City,207,Country 37211,City,207,Country 37230,City,207,Country 37234,City,207,Country 37235,City,207,Country 37245,City,207,Country 37269,City,207,Country 37253,City,207,Country 37262,City,207,Country 37265,City,207,Country 37272,City,207,Country 37307,City,207,Country 37346,City,207,Country 37355,City,207,Country 37364,City,207,Country 37374,City,207,Country 37379,City,207,Country 37385,City,207,Country 37411,City,207,Country 37412,City,207,Country 37415,City,207,Country 37423,City,207,Country 37437,City,207,Country 37471,City,207,Country 37475,City,207,Country 37479,City,207,Country 37483,City,207,Country 37484,City,207,Country 37482,City,207,Country 37486,City,207,Country 37490,City,207,Country 37498,City,207,Country 37502,City,207,Country 37505,City,207,Country 37515,City,207,Country 37523,City,207,Country 37534,City,207,Country 37544,City,207,Country 37548,City,207,Country 37572,City,207,Country 37573,City,207,Country 37574,City,207,Country 37575,City,207,Country 37583,City,207,Country 37586,City,207,Country 37587,City,207,Country 37588,City,207,Country 37603,City,207,Country 37616,City,207,Country 37617,City,207,Country 37618,City,207,Country 37621,City,207,Country 37622,City,207,Country 37642,City,207,Country 37687,City,207,Country 37688,City,207,Country 37695,City,207,Country 37696,City,207,Country 37704,City,207,Country 37708,City,207,Country 37712,City,207,Country 37720,City,207,Country 37721,City,207,Country 37722,City,207,Country 37729,City,207,Country 37742,City,207,Country 37751,City,207,Country 37760,City,207,Country 37762,City,207,Country 37793,City,207,Country 37826,City,207,Country 37832,City,207,Country 37867,City,207,Country 37871,City,207,Country 37880,City,207,Country 37920,City,207,Country 37929,City,207,Country 37930,City,207,Country 37948,City,207,Country 37969,City,207,Country 38042,City,207,Country 38050,City,207,Country 38058,City,207,Country 38063,City,207,Country 38083,City,207,Country 38094,City,207,Country 38112,City,207,Country 38142,City,207,Country 38227,City,207,Country 38184,City,207,Country 38186,City,207,Country 38191,City,207,Country 38221,City,207,Country 38249,City,207,Country 38254,City,207,Country 38262,City,207,Country 38286,City,207,Country 38291,City,207,Country 38295,City,207,Country 38298,City,207,Country 38299,City,207,Country 38300,City,207,Country 38329,City,207,Country 38367,City,207,Country 38397,City,207,Country 38399,City,207,Country 38404,City,207,Country 38430,City,207,Country 38447,City,207,Country 38457,City,207,Country 38470,City,207,Country 38504,City,207,Country 31992,City,207,Country 32007,City,207,Country 32139,City,207,Country 32209,City,207,Country 32375,City,207,Country 32478,City,207,Country 32526,City,207,Country 32633,City,207,Country 32897,City,207,Country 33064,City,207,Country 33020,City,207,Country 33122,City,207,Country 33121,City,207,Country 33149,City,207,Country 33155,City,207,Country 33180,City,207,Country 33182,City,207,Country 33210,City,207,Country 33217,City,207,Country 33219,City,207,Country 33264,City,207,Country 33699,City,207,Country 33729,City,207,Country 33749,City,207,Country 33764,City,207,Country 33821,City,207,Country 33922,City,207,Country 34022,City,207,Country 34073,City,207,Country 34074,City,207,Country 34089,City,207,Country 34131,City,207,Country 34140,City,207,Country 34171,City,207,Country 34179,City,207,Country 34224,City,207,Country 34729,City,207,Country 34747,City,207,Country 34752,City,207,Country 35085,City,207,Country 35087,City,207,Country 35088,City,207,Country 35089,City,207,Country 35201,City,207,Country 35239,City,207,Country 35246,City,207,Country 35363,City,207,Country 35289,City,207,Country 35297,City,207,Country 35407,City,207,Country 35586,City,207,Country 35681,City,207,Country 36027,City,207,Country 36030,City,207,Country 36116,City,207,Country 36157,City,207,Country 36262,City,207,Country 36279,City,207,Country 36281,City,207,Country 36282,City,207,Country 36283,City,207,Country 36295,City,207,Country 36297,City,207,Country 36464,City,207,Country 38569,City,207,Country 38570,City,207,Country 36957,City,207,Country 36967,City,207,Country 36971,City,207,Country 36973,City,207,Country 36980,City,207,Country 36983,City,207,Country 36984,City,207,Country 37052,City,207,Country 37058,City,207,Country 37064,City,207,Country 37099,City,207,Country 37107,City,207,Country 37205,City,207,Country 37209,City,207,Country 37229,City,207,Country 37261,City,207,Country 37337,City,207,Country 37290,City,207,Country 37291,City,207,Country 37843,City,207,Country 37983,City,207,Country 31942,City,207,Country 31970,City,207,Country 31978,City,207,Country 31984,City,207,Country 32046,City,207,Country 32227,City,207,Country 32253,City,207,Country 32319,City,207,Country 32354,City,207,Country 32356,City,207,Country 32357,City,207,Country 32361,City,207,Country 32372,City,207,Country 32386,City,207,Country 32396,City,207,Country 32398,City,207,Country 32403,City,207,Country 32404,City,207,Country 32458,City,207,Country 32489,City,207,Country 32502,City,207,Country 32507,City,207,Country 32538,City,207,Country 32539,City,207,Country 32552,City,207,Country 32557,City,207,Country 32566,City,207,Country 32570,City,207,Country 32582,City,207,Country 32587,City,207,Country 32618,City,207,Country 32623,City,207,Country 32638,City,207,Country 32688,City,207,Country 32692,City,207,Country 32720,City,207,Country 32733,City,207,Country 32831,City,207,Country 32832,City,207,Country 32847,City,207,Country 32859,City,207,Country 32863,City,207,Country 32866,City,207,Country 32867,City,207,Country 32895,City,207,Country 32903,City,207,Country 33917,City,207,Country 33927,City,207,Country 33946,City,207,Country 33961,City,207,Country 33968,City,207,Country 33972,City,207,Country 34032,City,207,Country 34034,City,207,Country 34035,City,207,Country 34038,City,207,Country 34066,City,207,Country 34069,City,207,Country 34070,City,207,Country 34071,City,207,Country 34097,City,207,Country 34098,City,207,Country 34232,City,207,Country 34378,City,207,Country 34433,City,207,Country 34436,City,207,Country 34442,City,207,Country 34457,City,207,Country 34460,City,207,Country 34461,City,207,Country 34469,City,207,Country 34568,City,207,Country 34588,City,207,Country 34590,City,207,Country 34633,City,207,Country 34724,City,207,Country 34733,City,207,Country 34762,City,207,Country 34763,City,207,Country 34783,City,207,Country 34942,City,207,Country 34943,City,207,Country 34959,City,207,Country 34961,City,207,Country 34973,City,207,Country 34980,City,207,Country 34996,City,207,Country 35003,City,207,Country 35009,City,207,Country 35024,City,207,Country 35025,City,207,Country 35026,City,207,Country 35028,City,207,Country 35039,City,207,Country 35041,City,207,Country 35042,City,207,Country 35059,City,207,Country 35361,City,207,Country 35294,City,207,Country 35398,City,207,Country 35400,City,207,Country 35623,City,207,Country 35662,City,207,Country 35664,City,207,Country 35673,City,207,Country 35689,City,207,Country 35690,City,207,Country 35770,City,207,Country 35866,City,207,Country 35872,City,207,Country 35989,City,207,Country 35924,City,207,Country 35941,City,207,Country 35944,City,207,Country 35946,City,207,Country 35949,City,207,Country 35952,City,207,Country 35955,City,207,Country 35964,City,207,Country 36073,City,207,Country 36244,City,207,Country 36300,City,207,Country 36789,City,207,Country 37155,City,207,Country 37156,City,207,Country 37194,City,207,Country 37233,City,207,Country 37292,City,207,Country 37295,City,207,Country 37297,City,207,Country 37447,City,207,Country 37692,City,207,Country 37693,City,207,Country 37706,City,207,Country 38018,City,207,Country 38194,City,207,Country 38460,City,207,Country 38461,City,207,Country 38464,City,207,Country 38466,City,207,Country 38472,City,207,Country 38474,City,207,Country 38490,City,207,Country 38491,City,207,Country 38492,City,207,Country 38493,City,207,Country 38494,City,207,Country 38508,City,207,Country 38509,City,207,Country 31931,City,207,Country 31944,City,207,Country 31973,City,207,Country 31969,City,207,Country 31993,City,207,Country 32393,City,207,Country 32400,City,207,Country 32497,City,207,Country 32504,City,207,Country 32523,City,207,Country 32528,City,207,Country 32666,City,207,Country 32980,City,207,Country 32981,City,207,Country 33005,City,207,Country 33226,City,207,Country 33328,City,207,Country 33802,City,207,Country 33818,City,207,Country 33819,City,207,Country 33839,City,207,Country 33994,City,207,Country 34004,City,207,Country 34167,City,207,Country 34190,City,207,Country 34268,City,207,Country 34276,City,207,Country 34559,City,207,Country 34405,City,207,Country 34406,City,207,Country 34498,City,207,Country 34541,City,207,Country 34557,City,207,Country 34569,City,207,Country 34573,City,207,Country 34586,City,207,Country 34732,City,207,Country 34754,City,207,Country 34880,City,207,Country 34887,City,207,Country 34894,City,207,Country 34897,City,207,Country 34898,City,207,Country 34934,City,207,Country 34988,City,207,Country 34990,City,207,Country 35105,City,207,Country 35122,City,207,Country 35124,City,207,Country 35132,City,207,Country 35135,City,207,Country 35702,City,207,Country 35324,City,207,Country 35357,City,207,Country 35469,City,207,Country 35647,City,207,Country 35794,City,207,Country 36480,City,207,Country 36239,City,207,Country 36240,City,207,Country 36241,City,207,Country 36376,City,207,Country 36386,City,207,Country 36454,City,207,Country 36455,City,207,Country 36456,City,207,Country 36448,City,207,Country 36471,City,207,Country 36472,City,207,Country 36473,City,207,Country 36553,City,207,Country 36806,City,207,Country 36809,City,207,Country 36839,City,207,Country 36848,City,207,Country 36879,City,207,Country 36895,City,207,Country 36920,City,207,Country 37007,City,207,Country 37038,City,207,Country 37036,City,207,Country 37062,City,207,Country 37102,City,207,Country 37119,City,207,Country 37180,City,207,Country 37347,City,207,Country 37368,City,207,Country 37389,City,207,Country 37391,City,207,Country 37392,City,207,Country 37397,City,207,Country 37400,City,207,Country 37405,City,207,Country 37666,City,207,Country 37425,City,207,Country 37427,City,207,Country 37652,City,207,Country 37850,City,207,Country 37857,City,207,Country 37875,City,207,Country 37881,City,207,Country 37900,City,207,Country 37907,City,207,Country 37982,City,207,Country 38425,City,207,Country 32360,City,207,Country 32445,City,207,Country 32472,City,207,Country 32495,City,207,Country 32505,City,207,Country 33053,City,207,Country 33054,City,207,Country 32661,City,207,Country 33094,City,207,Country 33092,City,207,Country 33167,City,207,Country 33340,City,207,Country 33492,City,207,Country 33728,City,207,Country 33753,City,207,Country 33978,City,207,Country 34076,City,207,Country 34575,City,207,Country 34976,City,207,Country 35051,City,207,Country 35120,City,207,Country 35172,City,207,Country 35337,City,207,Country 35421,City,207,Country 35485,City,207,Country 35820,City,207,Country 36127,City,207,Country 36155,City,207,Country 36257,City,207,Country 36304,City,207,Country 36365,City,207,Country 36434,City,207,Country 36544,City,207,Country 36548,City,207,Country 36568,City,207,Country 36580,City,207,Country 36699,City,207,Country 36864,City,207,Country 36880,City,207,Country 36882,City,207,Country 36911,City,207,Country 36928,City,207,Country 37027,City,207,Country 37074,City,207,Country 37106,City,207,Country 37130,City,207,Country 37134,City,207,Country 37135,City,207,Country 37150,City,207,Country 37164,City,207,Country 37202,City,207,Country 37286,City,207,Country 37327,City,207,Country 37546,City,207,Country 37905,City,207,Country 38025,City,207,Country 38045,City,207,Country 38068,City,207,Country 31921,City,207,Country 31908,City,207,Country 31909,City,207,Country 31916,City,207,Country 31934,City,207,Country 31956,City,207,Country 31987,City,207,Country 31997,City,207,Country 31998,City,207,Country 32005,City,207,Country 32006,City,207,Country 32008,City,207,Country 32013,City,207,Country 32017,City,207,Country 32018,City,207,Country 32024,City,207,Country 32023,City,207,Country 32028,City,207,Country 32030,City,207,Country 32031,City,207,Country 32035,City,207,Country 32036,City,207,Country 32053,City,207,Country 32064,City,207,Country 32065,City,207,Country 32075,City,207,Country 32077,City,207,Country 32095,City,207,Country 32085,City,207,Country 32088,City,207,Country 32136,City,207,Country 32137,City,207,Country 32096,City,207,Country 32098,City,207,Country 32102,City,207,Country 32104,City,207,Country 32107,City,207,Country 32106,City,207,Country 32108,City,207,Country 32117,City,207,Country 32121,City,207,Country 32128,City,207,Country 32146,City,207,Country 32157,City,207,Country 32160,City,207,Country 32161,City,207,Country 32211,City,207,Country 32213,City,207,Country 32225,City,207,Country 32237,City,207,Country 32241,City,207,Country 32243,City,207,Country 32247,City,207,Country 32261,City,207,Country 32260,City,207,Country 32263,City,207,Country 32266,City,207,Country 32276,City,207,Country 32287,City,207,Country 32293,City,207,Country 32294,City,207,Country 32296,City,207,Country 32301,City,207,Country 32304,City,207,Country 32307,City,207,Country 32318,City,207,Country 32322,City,207,Country 32329,City,207,Country 32339,City,207,Country 32343,City,207,Country 32369,City,207,Country 32382,City,207,Country 32598,City,207,Country 32387,City,207,Country 32388,City,207,Country 32410,City,207,Country 32414,City,207,Country 32421,City,207,Country 32423,City,207,Country 32432,City,207,Country 32439,City,207,Country 32446,City,207,Country 32460,City,207,Country 32461,City,207,Country 32467,City,207,Country 32475,City,207,Country 32485,City,207,Country 32492,City,207,Country 32501,City,207,Country 32511,City,207,Country 32545,City,207,Country 32547,City,207,Country 32555,City,207,Country 32563,City,207,Country 32575,City,207,Country 32591,City,207,Country 32592,City,207,Country 32613,City,207,Country 32620,City,207,Country 32624,City,207,Country 32627,City,207,Country 32707,City,207,Country 32710,City,207,Country 32637,City,207,Country 32655,City,207,Country 32658,City,207,Country 32662,City,207,Country 32671,City,207,Country 32678,City,207,Country 32691,City,207,Country 32715,City,207,Country 32739,City,207,Country 32748,City,207,Country 32751,City,207,Country 32755,City,207,Country 32862,City,207,Country 32881,City,207,Country 32889,City,207,Country 32930,City,207,Country 32935,City,207,Country 32946,City,207,Country 32947,City,207,Country 32959,City,207,Country 32971,City,207,Country 32984,City,207,Country 32998,City,207,Country 32999,City,207,Country 33000,City,207,Country 33002,City,207,Country 33006,City,207,Country 33015,City,207,Country 33028,City,207,Country 33033,City,207,Country 33037,City,207,Country 33074,City,207,Country 33073,City,207,Country 33069,City,207,Country 33082,City,207,Country 33083,City,207,Country 33141,City,207,Country 33143,City,207,Country 33164,City,207,Country 33166,City,207,Country 33186,City,207,Country 33192,City,207,Country 33194,City,207,Country 33196,City,207,Country 33197,City,207,Country 33199,City,207,Country 33202,City,207,Country 33214,City,207,Country 33529,City,207,Country 33530,City,207,Country 33221,City,207,Country 33532,City,207,Country 33537,City,207,Country 33538,City,207,Country 33539,City,207,Country 33543,City,207,Country 33545,City,207,Country 33247,City,207,Country 33253,City,207,Country 33286,City,207,Country 33295,City,207,Country 33297,City,207,Country 33303,City,207,Country 33309,City,207,Country 33317,City,207,Country 33321,City,207,Country 33323,City,207,Country 33327,City,207,Country 33331,City,207,Country 33330,City,207,Country 33342,City,207,Country 33353,City,207,Country 33358,City,207,Country 33362,City,207,Country 33363,City,207,Country 33364,City,207,Country 33365,City,207,Country 33366,City,207,Country 33367,City,207,Country 33373,City,207,Country 33371,City,207,Country 33372,City,207,Country 33357,City,207,Country 33376,City,207,Country 33379,City,207,Country 33394,City,207,Country 33401,City,207,Country 33421,City,207,Country 33418,City,207,Country 33450,City,207,Country 33457,City,207,Country 33461,City,207,Country 33462,City,207,Country 33463,City,207,Country 33466,City,207,Country 33469,City,207,Country 33518,City,207,Country 33521,City,207,Country 33549,City,207,Country 33557,City,207,Country 33567,City,207,Country 33571,City,207,Country 33574,City,207,Country 33599,City,207,Country 33600,City,207,Country 33621,City,207,Country 33625,City,207,Country 33633,City,207,Country 33634,City,207,Country 33636,City,207,Country 33639,City,207,Country 33647,City,207,Country 33649,City,207,Country 33651,City,207,Country 33660,City,207,Country 33677,City,207,Country 33685,City,207,Country 33686,City,207,Country 33697,City,207,Country 33707,City,207,Country 33708,City,207,Country 33710,City,207,Country 33721,City,207,Country 33724,City,207,Country 33754,City,207,Country 33755,City,207,Country 33760,City,207,Country 33768,City,207,Country 33772,City,207,Country 33784,City,207,Country 33798,City,207,Country 33800,City,207,Country 33801,City,207,Country 33825,City,207,Country 33905,City,207,Country 33864,City,207,Country 33866,City,207,Country 33868,City,207,Country 33909,City,207,Country 33939,City,207,Country 33951,City,207,Country 33958,City,207,Country 33964,City,207,Country 33980,City,207,Country 33987,City,207,Country 33989,City,207,Country 34005,City,207,Country 34011,City,207,Country 34012,City,207,Country 34014,City,207,Country 34015,City,207,Country 34021,City,207,Country 34027,City,207,Country 34031,City,207,Country 34040,City,207,Country 34059,City,207,Country 34072,City,207,Country 34077,City,207,Country 34079,City,207,Country 34080,City,207,Country 34082,City,207,Country 34088,City,207,Country 34120,City,207,Country 34124,City,207,Country 34126,City,207,Country 34134,City,207,Country 34135,City,207,Country 34148,City,207,Country 34367,City,207,Country 34211,City,207,Country 34212,City,207,Country 34244,City,207,Country 34246,City,207,Country 34274,City,207,Country 34275,City,207,Country 34278,City,207,Country 34285,City,207,Country 34288,City,207,Country 34289,City,207,Country 34296,City,207,Country 34300,City,207,Country 34307,City,207,Country 34309,City,207,Country 34317,City,207,Country 34320,City,207,Country 34321,City,207,Country 34322,City,207,Country 34324,City,207,Country 34326,City,207,Country 34329,City,207,Country 34335,City,207,Country 34363,City,207,Country 34369,City,207,Country 34371,City,207,Country 34399,City,207,Country 34398,City,207,Country 34560,City,207,Country 34404,City,207,Country 34431,City,207,Country 34432,City,207,Country 34456,City,207,Country 34480,City,207,Country 34493,City,207,Country 34494,City,207,Country 34520,City,207,Country 34525,City,207,Country 34527,City,207,Country 34576,City,207,Country 34577,City,207,Country 34578,City,207,Country 34581,City,207,Country 34602,City,207,Country 34601,City,207,Country 34606,City,207,Country 34616,City,207,Country 34618,City,207,Country 34625,City,207,Country 34629,City,207,Country 34630,City,207,Country 34632,City,207,Country 34636,City,207,Country 34639,City,207,Country 34642,City,207,Country 34644,City,207,Country 34645,City,207,Country 34651,City,207,Country 34655,City,207,Country 34656,City,207,Country 34672,City,207,Country 34683,City,207,Country 34709,City,207,Country 34686,City,207,Country 34714,City,207,Country 34716,City,207,Country 34689,City,207,Country 34688,City,207,Country 34690,City,207,Country 34692,City,207,Country 34697,City,207,Country 34698,City,207,Country 34700,City,207,Country 34751,City,207,Country 34745,City,207,Country 34748,City,207,Country 34753,City,207,Country 34755,City,207,Country 34756,City,207,Country 34761,City,207,Country 34789,City,207,Country 34819,City,207,Country 34823,City,207,Country 34849,City,207,Country 34851,City,207,Country 34861,City,207,Country 34872,City,207,Country 34878,City,207,Country 34881,City,207,Country 34909,City,207,Country 34911,City,207,Country 34914,City,207,Country 34921,City,207,Country 34929,City,207,Country 34930,City,207,Country 34939,City,207,Country 34950,City,207,Country 34951,City,207,Country 34960,City,207,Country 34986,City,207,Country 34989,City,207,Country 34995,City,207,Country 35006,City,207,Country 35015,City,207,Country 35014,City,207,Country 35020,City,207,Country 35037,City,207,Country 35043,City,207,Country 35062,City,207,Country 35050,City,207,Country 35104,City,207,Country 35112,City,207,Country 35123,City,207,Country 35129,City,207,Country 35130,City,207,Country 35137,City,207,Country 35154,City,207,Country 35167,City,207,Country 35171,City,207,Country 35173,City,207,Country 35188,City,207,Country 35194,City,207,Country 35205,City,207,Country 35208,City,207,Country 35216,City,207,Country 35704,City,207,Country 35219,City,207,Country 35218,City,207,Country 35230,City,207,Country 35247,City,207,Country 35259,City,207,Country 35265,City,207,Country 35269,City,207,Country 35273,City,207,Country 35276,City,207,Country 35284,City,207,Country 35290,City,207,Country 35293,City,207,Country 35318,City,207,Country 35320,City,207,Country 35321,City,207,Country 35322,City,207,Country 35339,City,207,Country 35346,City,207,Country 35352,City,207,Country 35353,City,207,Country 35358,City,207,Country 35377,City,207,Country 35380,City,207,Country 35383,City,207,Country 35395,City,207,Country 35396,City,207,Country 35397,City,207,Country 35706,City,207,Country 35412,City,207,Country 35420,City,207,Country 35423,City,207,Country 35424,City,207,Country 35430,City,207,Country 35435,City,207,Country 35436,City,207,Country 35437,City,207,Country 35439,City,207,Country 35441,City,207,Country 35445,City,207,Country 35460,City,207,Country 35461,City,207,Country 35470,City,207,Country 35471,City,207,Country 35477,City,207,Country 35480,City,207,Country 35495,City,207,Country 35507,City,207,Country 35523,City,207,Country 35530,City,207,Country 35531,City,207,Country 35534,City,207,Country 35537,City,207,Country 35541,City,207,Country 35544,City,207,Country 35545,City,207,Country 35571,City,207,Country 35575,City,207,Country 35593,City,207,Country 35597,City,207,Country 35619,City,207,Country 35625,City,207,Country 35640,City,207,Country 35641,City,207,Country 35643,City,207,Country 35644,City,207,Country 35646,City,207,Country 35653,City,207,Country 35663,City,207,Country 35711,City,207,Country 35712,City,207,Country 35736,City,207,Country 35745,City,207,Country 35753,City,207,Country 35757,City,207,Country 35763,City,207,Country 35778,City,207,Country 35779,City,207,Country 35796,City,207,Country 35803,City,207,Country 35813,City,207,Country 35814,City,207,Country 35822,City,207,Country 35831,City,207,Country 35838,City,207,Country 35840,City,207,Country 35855,City,207,Country 35856,City,207,Country 35919,City,207,Country 35890,City,207,Country 35895,City,207,Country 35896,City,207,Country 35897,City,207,Country 35898,City,207,Country 35899,City,207,Country 35929,City,207,Country 35928,City,207,Country 35942,City,207,Country 35947,City,207,Country 35957,City,207,Country 35969,City,207,Country 35973,City,207,Country 35977,City,207,Country 36005,City,207,Country 36004,City,207,Country 36481,City,207,Country 36036,City,207,Country 36039,City,207,Country 36049,City,207,Country 36052,City,207,Country 36064,City,207,Country 36065,City,207,Country 36067,City,207,Country 36068,City,207,Country 36071,City,207,Country 36076,City,207,Country 36080,City,207,Country 36101,City,207,Country 36119,City,207,Country 36169,City,207,Country 36168,City,207,Country 36175,City,207,Country 36137,City,207,Country 36144,City,207,Country 36484,City,207,Country 36179,City,207,Country 36180,City,207,Country 36193,City,207,Country 36196,City,207,Country 36201,City,207,Country 36202,City,207,Country 36217,City,207,Country 36218,City,207,Country 36219,City,207,Country 36254,City,207,Country 36266,City,207,Country 36290,City,207,Country 36293,City,207,Country 36301,City,207,Country 36307,City,207,Country 36309,City,207,Country 36317,City,207,Country 36318,City,207,Country 36320,City,207,Country 36321,City,207,Country 36324,City,207,Country 36326,City,207,Country 36330,City,207,Country 36333,City,207,Country 36405,City,207,Country 36348,City,207,Country 36353,City,207,Country 36359,City,207,Country 36361,City,207,Country 36366,City,207,Country 36367,City,207,Country 36371,City,207,Country 36411,City,207,Country 36414,City,207,Country 36416,City,207,Country 36430,City,207,Country 36431,City,207,Country 36452,City,207,Country 36446,City,207,Country 36457,City,207,Country 36467,City,207,Country 36494,City,207,Country 36495,City,207,Country 36511,City,207,Country 36513,City,207,Country 36531,City,207,Country 36538,City,207,Country 36556,City,207,Country 36557,City,207,Country 36601,City,207,Country 36578,City,207,Country 36586,City,207,Country 36591,City,207,Country 36606,City,207,Country 36623,City,207,Country 36625,City,207,Country 36641,City,207,Country 36649,City,207,Country 36653,City,207,Country 36655,City,207,Country 36670,City,207,Country 36671,City,207,Country 36685,City,207,Country 36698,City,207,Country 36703,City,207,Country 36727,City,207,Country 36728,City,207,Country 36729,City,207,Country 36730,City,207,Country 36733,City,207,Country 36735,City,207,Country 36766,City,207,Country 36770,City,207,Country 36773,City,207,Country 36780,City,207,Country 36802,City,207,Country 36804,City,207,Country 36811,City,207,Country 36813,City,207,Country 36818,City,207,Country 36857,City,207,Country 36860,City,207,Country 36863,City,207,Country 36865,City,207,Country 36866,City,207,Country 36899,City,207,Country 36902,City,207,Country 37005,City,207,Country 37042,City,207,Country 37043,City,207,Country 37031,City,207,Country 37032,City,207,Country 37044,City,207,Country 37086,City,207,Country 37090,City,207,Country 37092,City,207,Country 37136,City,207,Country 37175,City,207,Country 37184,City,207,Country 37183,City,207,Country 37199,City,207,Country 37201,City,207,Country 37206,City,207,Country 37231,City,207,Country 37237,City,207,Country 37241,City,207,Country 37243,City,207,Country 37252,City,207,Country 37266,City,207,Country 37276,City,207,Country 37277,City,207,Country 37280,City,207,Country 37287,City,207,Country 37294,City,207,Country 37315,City,207,Country 37322,City,207,Country 37358,City,207,Country 37362,City,207,Country 37371,City,207,Country 37372,City,207,Country 37373,City,207,Country 37376,City,207,Country 37384,City,207,Country 37664,City,207,Country 37395,City,207,Country 37401,City,207,Country 37402,City,207,Country 37413,City,207,Country 37416,City,207,Country 37424,City,207,Country 37426,City,207,Country 37436,City,207,Country 37443,City,207,Country 37450,City,207,Country 37456,City,207,Country 37457,City,207,Country 37460,City,207,Country 37465,City,207,Country 37478,City,207,Country 37480,City,207,Country 37481,City,207,Country 37493,City,207,Country 37500,City,207,Country 37517,City,207,Country 37527,City,207,Country 37528,City,207,Country 37541,City,207,Country 37537,City,207,Country 37556,City,207,Country 37558,City,207,Country 37559,City,207,Country 37560,City,207,Country 37567,City,207,Country 37585,City,207,Country 37589,City,207,Country 37593,City,207,Country 37595,City,207,Country 37596,City,207,Country 37668,City,207,Country 37598,City,207,Country 37599,City,207,Country 37607,City,207,Country 37631,City,207,Country 37635,City,207,Country 37639,City,207,Country 37640,City,207,Country 37655,City,207,Country 37671,City,207,Country 37673,City,207,Country 37674,City,207,Country 37676,City,207,Country 37713,City,207,Country 37690,City,207,Country 37707,City,207,Country 37727,City,207,Country 37732,City,207,Country 37733,City,207,Country 37736,City,207,Country 37741,City,207,Country 37748,City,207,Country 37749,City,207,Country 37759,City,207,Country 37766,City,207,Country 37768,City,207,Country 37773,City,207,Country 37775,City,207,Country 37779,City,207,Country 37782,City,207,Country 37784,City,207,Country 37791,City,207,Country 37801,City,207,Country 37806,City,207,Country 37824,City,207,Country 37827,City,207,Country 37830,City,207,Country 37831,City,207,Country 37869,City,207,Country 37873,City,207,Country 37876,City,207,Country 37885,City,207,Country 37892,City,207,Country 37897,City,207,Country 37899,City,207,Country 37914,City,207,Country 37922,City,207,Country 37934,City,207,Country 37940,City,207,Country 37959,City,207,Country 38008,City,207,Country 38010,City,207,Country 38028,City,207,Country 38035,City,207,Country 38061,City,207,Country 38073,City,207,Country 38079,City,207,Country 38082,City,207,Country 38098,City,207,Country 38103,City,207,Country 38113,City,207,Country 38121,City,207,Country 38127,City,207,Country 38130,City,207,Country 38140,City,207,Country 38144,City,207,Country 38155,City,207,Country 38157,City,207,Country 38163,City,207,Country 38169,City,207,Country 38170,City,207,Country 38173,City,207,Country 38175,City,207,Country 38198,City,207,Country 38199,City,207,Country 38203,City,207,Country 38188,City,207,Country 38229,City,207,Country 38235,City,207,Country 38238,City,207,Country 38247,City,207,Country 38241,City,207,Country 38255,City,207,Country 38256,City,207,Country 38259,City,207,Country 38271,City,207,Country 38274,City,207,Country 38272,City,207,Country 38277,City,207,Country 38278,City,207,Country 38282,City,207,Country 38296,City,207,Country 38303,City,207,Country 38302,City,207,Country 38304,City,207,Country 38306,City,207,Country 38307,City,207,Country 38319,City,207,Country 38321,City,207,Country 38320,City,207,Country 38325,City,207,Country 38330,City,207,Country 38332,City,207,Country 38338,City,207,Country 38344,City,207,Country 38351,City,207,Country 38368,City,207,Country 38392,City,207,Country 38411,City,207,Country 38398,City,207,Country 38406,City,207,Country 38428,City,207,Country 38429,City,207,Country 38444,City,207,Country 38445,City,207,Country 38433,City,207,Country 38446,City,207,Country 38435,City,207,Country 38438,City,207,Country 38439,City,207,Country 38440,City,207,Country 38442,City,207,Country 38451,City,207,Country 38452,City,207,Country 38467,City,207,Country 38480,City,207,Country 38484,City,207,Country 38485,City,207,Country 38497,City,207,Country 31917,City,207,Country 38571,City,207,Country 31948,City,207,Country 31963,City,207,Country 31967,City,207,Country 31980,City,207,Country 31981,City,207,Country 31983,City,207,Country 32345,City,207,Country 32043,City,207,Country 32050,City,207,Country 32083,City,207,Country 32086,City,207,Country 32089,City,207,Country 32110,City,207,Country 32122,City,207,Country 32183,City,207,Country 32201,City,207,Country 32207,City,207,Country 32204,City,207,Country 32218,City,207,Country 32228,City,207,Country 32250,City,207,Country 32259,City,207,Country 32280,City,207,Country 32308,City,207,Country 32328,City,207,Country 32331,City,207,Country 32338,City,207,Country 32358,City,207,Country 32379,City,207,Country 32378,City,207,Country 32422,City,207,Country 32427,City,207,Country 32451,City,207,Country 32452,City,207,Country 32468,City,207,Country 32471,City,207,Country 32527,City,207,Country 32524,City,207,Country 32534,City,207,Country 32535,City,207,Country 32568,City,207,Country 32602,City,207,Country 32609,City,207,Country 32619,City,207,Country 32628,City,207,Country 32634,City,207,Country 32647,City,207,Country 32653,City,207,Country 32686,City,207,Country 32675,City,207,Country 32674,City,207,Country 32673,City,207,Country 33047,City,207,Country 32693,City,207,Country 32728,City,207,Country 32729,City,207,Country 32740,City,207,Country 32742,City,207,Country 32743,City,207,Country 32745,City,207,Country 32746,City,207,Country 32803,City,207,Country 32846,City,207,Country 32877,City,207,Country 32878,City,207,Country 32883,City,207,Country 32893,City,207,Country 32906,City,207,Country 32909,City,207,Country 32942,City,207,Country 32945,City,207,Country 32952,City,207,Country 32960,City,207,Country 32963,City,207,Country 32964,City,207,Country 32976,City,207,Country 33066,City,207,Country 33104,City,207,Country 33111,City,207,Country 33116,City,207,Country 33124,City,207,Country 33125,City,207,Country 33138,City,207,Country 33139,City,207,Country 33150,City,207,Country 33163,City,207,Country 33177,City,207,Country 33215,City,207,Country 33185,City,207,Country 33198,City,207,Country 33213,City,207,Country 33216,City,207,Country 33218,City,207,Country 33234,City,207,Country 33246,City,207,Country 33890,City,207,Country 33252,City,207,Country 33261,City,207,Country 33262,City,207,Country 33267,City,207,Country 33271,City,207,Country 33296,City,207,Country 33304,City,207,Country 33395,City,207,Country 33413,City,207,Country 33422,City,207,Country 33423,City,207,Country 33424,City,207,Country 33425,City,207,Country 33426,City,207,Country 33427,City,207,Country 33429,City,207,Country 33436,City,207,Country 33431,City,207,Country 33434,City,207,Country 33435,City,207,Country 33566,City,207,Country 33573,City,207,Country 33580,City,207,Country 33594,City,207,Country 33595,City,207,Country 33605,City,207,Country 33692,City,207,Country 33700,City,207,Country 33701,City,207,Country 33702,City,207,Country 33726,City,207,Country 33730,City,207,Country 33738,City,207,Country 33739,City,207,Country 33740,City,207,Country 33750,City,207,Country 33756,City,207,Country 33766,City,207,Country 33775,City,207,Country 33777,City,207,Country 33794,City,207,Country 33795,City,207,Country 33832,City,207,Country 33833,City,207,Country 33840,City,207,Country 33847,City,207,Country 33848,City,207,Country 33884,City,207,Country 33912,City,207,Country 33925,City,207,Country 33932,City,207,Country 33952,City,207,Country 33957,City,207,Country 33973,City,207,Country 38514,City,207,Country 38515,City,207,Country 38516,City,207,Country 38517,City,207,Country 38518,City,207,Country 33985,City,207,Country 38519,City,207,Country 38520,City,207,Country 38521,City,207,Country 38522,City,207,Country 38523,City,207,Country 38524,City,207,Country 34001,City,207,Country 38525,City,207,Country 38526,City,207,Country 34007,City,207,Country 34008,City,207,Country 38527,City,207,Country 34010,City,207,Country 38528,City,207,Country 38529,City,207,Country 38531,City,207,Country 34025,City,207,Country 38578,City,207,Country 38532,City,207,Country 34043,City,207,Country 34108,City,207,Country 34127,City,207,Country 34129,City,207,Country 34130,City,207,Country 34132,City,207,Country 34159,City,207,Country 34166,City,207,Country 34183,City,207,Country 34184,City,207,Country 34195,City,207,Country 34199,City,207,Country 34209,City,207,Country 34233,City,207,Country 34225,City,207,Country 34227,City,207,Country 34230,City,207,Country 34364,City,207,Country 34392,City,207,Country 34402,City,207,Country 34408,City,207,Country 34425,City,207,Country 34424,City,207,Country 34441,City,207,Country 34446,City,207,Country 34468,City,207,Country 34470,City,207,Country 34471,City,207,Country 34479,City,207,Country 34565,City,207,Country 34517,City,207,Country 34499,City,207,Country 34503,City,207,Country 34534,City,207,Country 34549,City,207,Country 34553,City,207,Country 34665,City,207,Country 34666,City,207,Country 34670,City,207,Country 34671,City,207,Country 34739,City,207,Country 34777,City,207,Country 34790,City,207,Country 34821,City,207,Country 34827,City,207,Country 34831,City,207,Country 34832,City,207,Country 34843,City,207,Country 34844,City,207,Country 38536,City,207,Country 38537,City,207,Country 38538,City,207,Country 34846,City,207,Country 38539,City,207,Country 38540,City,207,Country 34857,City,207,Country 34858,City,207,Country 34863,City,207,Country 38541,City,207,Country 38542,City,207,Country 38543,City,207,Country 38544,City,207,Country 34874,City,207,Country 38545,City,207,Country 34879,City,207,Country 38546,City,207,Country 38547,City,207,Country 38548,City,207,Country 34890,City,207,Country 38549,City,207,Country 38550,City,207,Country 38551,City,207,Country 38552,City,207,Country 38553,City,207,Country 34903,City,207,Country 34905,City,207,Country 38555,City,207,Country 38556,City,207,Country 34920,City,207,Country 34924,City,207,Country 38557,City,207,Country 34926,City,207,Country 34927,City,207,Country 34928,City,207,Country 38558,City,207,Country 38559,City,207,Country 38560,City,207,Country 38561,City,207,Country 38562,City,207,Country 38564,City,207,Country 38563,City,207,Country 34994,City,207,Country 35034,City,207,Country 38565,City,207,Country 35035,City,207,Country 35036,City,207,Country 38566,City,207,Country 38567,City,207,Country 38568,City,207,Country 35056,City,207,Country 35063,City,207,Country 35064,City,207,Country 35066,City,207,Country 35070,City,207,Country 35073,City,207,Country 35074,City,207,Country 35077,City,207,Country 35078,City,207,Country 35081,City,207,Country 35079,City,207,Country 35080,City,207,Country 35084,City,207,Country 35185,City,207,Country 35223,City,207,Country 35254,City,207,Country 35256,City,207,Country 35288,City,207,Country 35301,City,207,Country 35315,City,207,Country 35319,City,207,Country 35325,City,207,Country 35327,City,207,Country 35332,City,207,Country 35340,City,207,Country 35376,City,207,Country 35444,City,207,Country 35454,City,207,Country 35472,City,207,Country 35484,City,207,Country 35486,City,207,Country 35487,City,207,Country 35488,City,207,Country 35517,City,207,Country 35528,City,207,Country 35538,City,207,Country 35539,City,207,Country 35540,City,207,Country 35572,City,207,Country 35573,City,207,Country 35580,City,207,Country 35582,City,207,Country 35668,City,207,Country 35765,City,207,Country 35776,City,207,Country 35786,City,207,Country 35825,City,207,Country 38581,City,207,Country 35878,City,207,Country 35879,City,207,Country 35880,City,207,Country 35883,City,207,Country 35891,City,207,Country 35911,City,207,Country 35912,City,207,Country 35940,City,207,Country 35966,City,207,Country 35953,City,207,Country 35960,City,207,Country 38582,City,207,Country 35968,City,207,Country 35974,City,207,Country 36014,City,207,Country 36015,City,207,Country 36017,City,207,Country 36026,City,207,Country 36034,City,207,Country 36042,City,207,Country 36069,City,207,Country 36083,City,207,Country 36091,City,207,Country 36186,City,207,Country 36197,City,207,Country 36235,City,207,Country 36253,City,207,Country 36260,City,207,Country 36271,City,207,Country 36274,City,207,Country 36276,City,207,Country 36275,City,207,Country 36284,City,207,Country 36287,City,207,Country 36350,City,207,Country 36357,City,207,Country 36395,City,207,Country 36397,City,207,Country 36398,City,207,Country 36399,City,207,Country 36462,City,207,Country 36463,City,207,Country 36465,City,207,Country 36489,City,207,Country 36496,City,207,Country 36537,City,207,Country 36543,City,207,Country 36549,City,207,Country 36564,City,207,Country 36576,City,207,Country 36592,City,207,Country 36617,City,207,Country 36632,City,207,Country 36633,City,207,Country 36634,City,207,Country 36635,City,207,Country 36636,City,207,Country 36637,City,207,Country 36638,City,207,Country 36661,City,207,Country 36679,City,207,Country 36694,City,207,Country 36704,City,207,Country 36721,City,207,Country 36722,City,207,Country 36740,City,207,Country 36738,City,207,Country 36760,City,207,Country 36768,City,207,Country 36775,City,207,Country 36777,City,207,Country 36778,City,207,Country 36951,City,207,Country 36952,City,207,Country 36955,City,207,Country 36954,City,207,Country 36953,City,207,Country 36956,City,207,Country 36958,City,207,Country 36959,City,207,Country 36960,City,207,Country 36961,City,207,Country 36962,City,207,Country 36963,City,207,Country 36964,City,207,Country 36965,City,207,Country 36966,City,207,Country 36968,City,207,Country 36969,City,207,Country 36970,City,207,Country 36976,City,207,Country 36974,City,207,Country 36975,City,207,Country 36972,City,207,Country 36977,City,207,Country 36979,City,207,Country 36981,City,207,Country 36982,City,207,Country 36985,City,207,Country 36988,City,207,Country 36989,City,207,Country 36990,City,207,Country 36986,City,207,Country 36987,City,207,Country 36991,City,207,Country 36993,City,207,Country 36994,City,207,Country 36992,City,207,Country 36995,City,207,Country 36996,City,207,Country 36997,City,207,Country 36998,City,207,Country 36999,City,207,Country 37000,City,207,Country 37001,City,207,Country 37002,City,207,Country 37008,City,207,Country 37012,City,207,Country 37015,City,207,Country 37016,City,207,Country 37017,City,207,Country 37022,City,207,Country 37053,City,207,Country 37057,City,207,Country 37065,City,207,Country 37066,City,207,Country 37067,City,207,Country 37095,City,207,Country 37096,City,207,Country 37097,City,207,Country 37100,City,207,Country 37151,City,207,Country 37152,City,207,Country 37153,City,207,Country 37170,City,207,Country 37171,City,207,Country 37172,City,207,Country 37212,City,207,Country 37227,City,207,Country 37219,City,207,Country 37238,City,207,Country 37242,City,207,Country 37257,City,207,Country 37267,City,207,Country 37268,City,207,Country 37285,City,207,Country 37304,City,207,Country 37308,City,207,Country 37328,City,207,Country 37338,City,207,Country 37334,City,207,Country 37349,City,207,Country 37353,City,207,Country 37370,City,207,Country 37383,City,207,Country 37661,City,207,Country 37388,City,207,Country 37393,City,207,Country 37665,City,207,Country 37409,City,207,Country 37419,City,207,Country 37432,City,207,Country 37433,City,207,Country 37446,City,207,Country 37452,City,207,Country 37600,City,207,Country 37458,City,207,Country 37463,City,207,Country 37472,City,207,Country 37488,City,207,Country 37529,City,207,Country 37531,City,207,Country 37549,City,207,Country 37565,City,207,Country 37576,City,207,Country 37590,City,207,Country 37591,City,207,Country 37597,City,207,Country 37604,City,207,Country 37628,City,207,Country 37683,City,207,Country 37680,City,207,Country 37681,City,207,Country 37682,City,207,Country 37684,City,207,Country 37702,City,207,Country 37839,City,207,Country 37840,City,207,Country 37841,City,207,Country 37842,City,207,Country 37858,City,207,Country 37859,City,207,Country 37861,City,207,Country 37862,City,207,Country 37863,City,207,Country 37865,City,207,Country 37939,City,207,Country 37950,City,207,Country 37949,City,207,Country 37953,City,207,Country 37962,City,207,Country 37967,City,207,Country 37966,City,207,Country 37968,City,207,Country 37973,City,207,Country 37974,City,207,Country 37975,City,207,Country 37976,City,207,Country 37977,City,207,Country 37978,City,207,Country 37979,City,207,Country 37980,City,207,Country 37981,City,207,Country 37984,City,207,Country 37986,City,207,Country 37988,City,207,Country 37989,City,207,Country 37990,City,207,Country 37992,City,207,Country 37993,City,207,Country 37995,City,207,Country 37996,City,207,Country 37997,City,207,Country 37998,City,207,Country 37999,City,207,Country 38000,City,207,Country 38001,City,207,Country 38003,City,207,Country 38004,City,207,Country 38382,City,207,Country 38387,City,207,Country 38389,City,207,Country 38393,City,207,Country 32829,City,207,Country 33609,City,207,Country 31900,City,207,Country 31910,City,207,Country 31923,City,207,Country 31924,City,207,Country 31925,City,207,Country 31926,City,207,Country 31974,City,207,Country 31977,City,207,Country 31999,City,207,Country 32027,City,207,Country 32059,City,207,Country 32135,City,207,Country 32111,City,207,Country 32115,City,207,Country 32118,City,207,Country 32132,City,207,Country 32143,City,207,Country 32147,City,207,Country 32164,City,207,Country 32165,City,207,Country 32347,City,207,Country 32248,City,207,Country 32252,City,207,Country 32268,City,207,Country 32286,City,207,Country 32288,City,207,Country 32299,City,207,Country 32510,City,207,Country 32508,City,207,Country 32515,City,207,Country 32544,City,207,Country 32588,City,207,Country 32601,City,207,Country 32704,City,207,Country 32652,City,207,Country 32670,City,207,Country 32694,City,207,Country 32826,City,207,Country 32854,City,207,Country 32871,City,207,Country 32890,City,207,Country 32927,City,207,Country 32931,City,207,Country 32965,City,207,Country 32993,City,207,Country 33029,City,207,Country 33075,City,207,Country 33077,City,207,Country 33079,City,207,Country 33080,City,207,Country 33089,City,207,Country 33106,City,207,Country 33892,City,207,Country 33113,City,207,Country 33114,City,207,Country 33129,City,207,Country 33140,City,207,Country 33161,City,207,Country 33178,City,207,Country 33181,City,207,Country 33191,City,207,Country 33193,City,207,Country 33533,City,207,Country 33535,City,207,Country 33269,City,207,Country 33280,City,207,Country 33289,City,207,Country 33311,City,207,Country 33320,City,207,Country 33346,City,207,Country 33347,City,207,Country 33351,City,207,Country 33359,City,207,Country 33360,City,207,Country 33361,City,207,Country 33368,City,207,Country 33369,City,207,Country 33370,City,207,Country 33374,City,207,Country 33375,City,207,Country 33381,City,207,Country 33389,City,207,Country 33397,City,207,Country 33446,City,207,Country 33512,City,207,Country 33553,City,207,Country 33555,City,207,Country 33587,City,207,Country 33622,City,207,Country 33667,City,207,Country 33731,City,207,Country 33763,City,207,Country 33780,City,207,Country 33789,City,207,Country 33805,City,207,Country 33836,City,207,Country 33923,City,207,Country 33928,City,207,Country 33942,City,207,Country 33941,City,207,Country 33988,City,207,Country 34037,City,207,Country 34064,City,207,Country 34092,City,207,Country 34105,City,207,Country 34107,City,207,Country 34106,City,207,Country 34173,City,207,Country 34242,City,207,Country 34251,City,207,Country 34284,City,207,Country 34295,City,207,Country 34299,City,207,Country 34345,City,207,Country 34385,City,207,Country 34407,City,207,Country 34417,City,207,Country 34418,City,207,Country 34419,City,207,Country 34420,City,207,Country 34426,City,207,Country 34428,City,207,Country 34434,City,207,Country 34502,City,207,Country 34526,City,207,Country 34537,City,207,Country 34542,City,207,Country 34543,City,207,Country 34544,City,207,Country 34545,City,207,Country 34582,City,207,Country 34591,City,207,Country 34594,City,207,Country 34599,City,207,Country 34604,City,207,Country 34607,City,207,Country 34611,City,207,Country 34610,City,207,Country 34614,City,207,Country 34619,City,207,Country 34628,City,207,Country 34631,City,207,Country 34659,City,207,Country 34677,City,207,Country 34707,City,207,Country 34723,City,207,Country 34798,City,207,Country 34802,City,207,Country 34801,City,207,Country 34813,City,207,Country 34814,City,207,Country 34852,City,207,Country 34867,City,207,Country 34868,City,207,Country 34870,City,207,Country 34876,City,207,Country 34883,City,207,Country 34896,City,207,Country 34900,City,207,Country 34902,City,207,Country 34919,City,207,Country 34938,City,207,Country 35075,City,207,Country 35076,City,207,Country 35097,City,207,Country 35100,City,207,Country 35133,City,207,Country 35141,City,207,Country 35189,City,207,Country 35192,City,207,Country 35196,City,207,Country 35199,City,207,Country 35204,City,207,Country 35215,City,207,Country 35221,City,207,Country 35227,City,207,Country 35229,City,207,Country 35228,City,207,Country 35243,City,207,Country 35282,City,207,Country 35329,City,207,Country 35367,City,207,Country 35372,City,207,Country 35403,City,207,Country 35707,City,207,Country 35408,City,207,Country 35416,City,207,Country 35431,City,207,Country 35440,City,207,Country 35452,City,207,Country 35509,City,207,Country 35588,City,207,Country 35549,City,207,Country 35561,City,207,Country 35568,City,207,Country 35576,City,207,Country 35601,City,207,Country 35622,City,207,Country 35732,City,207,Country 35752,City,207,Country 35760,City,207,Country 35761,City,207,Country 35782,City,207,Country 35789,City,207,Country 35816,City,207,Country 35841,City,207,Country 35887,City,207,Country 35885,City,207,Country 35886,City,207,Country 35892,City,207,Country 35943,City,207,Country 36038,City,207,Country 36040,City,207,Country 36113,City,207,Country 36167,City,207,Country 36133,City,207,Country 36132,City,207,Country 36141,City,207,Country 36154,City,207,Country 36184,City,207,Country 36210,City,207,Country 36216,City,207,Country 36236,City,207,Country 36238,City,207,Country 36285,City,207,Country 36289,City,207,Country 36335,City,207,Country 36363,City,207,Country 36368,City,207,Country 36409,City,207,Country 36426,City,207,Country 36427,City,207,Country 36419,City,207,Country 36424,City,207,Country 36428,City,207,Country 36429,City,207,Country 36453,City,207,Country 36502,City,207,Country 36567,City,207,Country 36575,City,207,Country 36615,City,207,Country 36717,City,207,Country 36648,City,207,Country 36652,City,207,Country 36650,City,207,Country 36656,City,207,Country 36669,City,207,Country 36677,City,207,Country 36687,City,207,Country 36776,City,207,Country 36783,City,207,Country 36788,City,207,Country 36786,City,207,Country 36868,City,207,Country 36907,City,207,Country 36926,City,207,Country 37003,City,207,Country 37004,City,207,Country 37041,City,207,Country 37034,City,207,Country 37069,City,207,Country 37070,City,207,Country 37117,City,207,Country 37128,City,207,Country 37129,City,207,Country 37177,City,207,Country 37195,City,207,Country 37196,City,207,Country 37221,City,207,Country 37226,City,207,Country 37244,City,207,Country 37264,City,207,Country 37279,City,207,Country 37356,City,207,Country 37359,City,207,Country 37357,City,207,Country 37360,City,207,Country 37663,City,207,Country 37367,City,207,Country 37398,City,207,Country 37466,City,207,Country 37474,City,207,Country 37491,City,207,Country 37494,City,207,Country 37496,City,207,Country 37520,City,207,Country 37526,City,207,Country 37542,City,207,Country 37536,City,207,Country 37552,City,207,Country 37553,City,207,Country 37554,City,207,Country 37555,City,207,Country 37568,City,207,Country 37570,City,207,Country 37619,City,207,Country 37644,City,207,Country 37645,City,207,Country 37703,City,207,Country 37728,City,207,Country 37737,City,207,Country 37740,City,207,Country 37745,City,207,Country 37752,City,207,Country 37753,City,207,Country 37755,City,207,Country 37771,City,207,Country 37778,City,207,Country 37803,City,207,Country 37817,City,207,Country 37819,City,207,Country 37820,City,207,Country 37821,City,207,Country 37848,City,207,Country 37845,City,207,Country 37846,City,207,Country 37883,City,207,Country 37890,City,207,Country 37886,City,207,Country 37887,City,207,Country 37888,City,207,Country 37894,City,207,Country 37960,City,207,Country 38011,City,207,Country 38013,City,207,Country 38060,City,207,Country 38072,City,207,Country 38076,City,207,Country 38100,City,207,Country 38153,City,207,Country 38154,City,207,Country 38201,City,207,Country 38202,City,207,Country 38204,City,207,Country 38218,City,207,Country 38243,City,207,Country 38244,City,207,Country 38258,City,207,Country 38260,City,207,Country 38308,City,207,Country 38316,City,207,Country 38450,City,207,Country 38456,City,207,Country 38458,City,207,Country 38477,City,207,Country 38478,City,207,Country 38479,City,207,Country 38481,City,207,Country 38495,City,207,Country 31892,City,207,Country 31893,City,207,Country 31894,City,207,Country 31895,City,207,Country 31896,City,207,Country 31897,City,207,Country 31901,City,207,Country 31906,City,207,Country 32254,City,207,Country 32352,City,207,Country 32364,City,207,Country 32355,City,207,Country 32411,City,207,Country 32425,City,207,Country 32455,City,207,Country 32522,City,207,Country 32529,City,207,Country 32533,City,207,Country 32569,City,207,Country 32616,City,207,Country 32630,City,207,Country 32632,City,207,Country 32703,City,207,Country 32639,City,207,Country 32672,City,207,Country 32714,City,207,Country 32723,City,207,Country 32727,City,207,Country 32851,City,207,Country 32879,City,207,Country 32908,City,207,Country 32921,City,207,Country 32933,City,207,Country 32934,City,207,Country 33007,City,207,Country 33022,City,207,Country 33137,City,207,Country 33156,City,207,Country 33169,City,207,Country 33174,City,207,Country 33176,City,207,Country 33237,City,207,Country 33282,City,207,Country 33283,City,207,Country 33307,City,207,Country 33312,City,207,Country 33316,City,207,Country 33339,City,207,Country 33473,City,207,Country 33486,City,207,Country 33487,City,207,Country 33490,City,207,Country 33509,City,207,Country 33515,City,207,Country 33547,City,207,Country 33554,City,207,Country 33559,City,207,Country 33563,City,207,Country 33572,City,207,Country 33581,City,207,Country 33606,City,207,Country 33607,City,207,Country 33617,City,207,Country 33725,City,207,Country 33727,City,207,Country 33752,City,207,Country 33779,City,207,Country 33788,City,207,Country 33792,City,207,Country 33828,City,207,Country 33843,City,207,Country 33882,City,207,Country 33885,City,207,Country 33887,City,207,Country 33953,City,207,Country 33960,City,207,Country 34063,City,207,Country 34095,City,207,Country 34172,City,207,Country 34182,City,207,Country 34192,City,207,Country 34210,City,207,Country 34226,City,207,Country 34234,City,207,Country 34267,City,207,Country 34483,City,207,Country 34552,City,207,Country 34744,City,207,Country 34759,City,207,Country 34956,City,207,Country 34957,City,207,Country 35175,City,207,Country 34974,City,207,Country 35007,City,207,Country 35095,City,207,Country 35144,City,207,Country 35159,City,207,Country 35161,City,207,Country 35181,City,207,Country 35231,City,207,Country 35268,City,207,Country 35314,City,207,Country 35323,City,207,Country 35354,City,207,Country 35364,City,207,Country 35381,City,207,Country 35382,City,207,Country 35392,City,207,Country 35410,City,207,Country 35457,City,207,Country 35459,City,207,Country 35465,City,207,Country 35504,City,207,Country 35505,City,207,Country 35506,City,207,Country 35512,City,207,Country 35513,City,207,Country 35547,City,207,Country 35565,City,207,Country 35621,City,207,Country 35637,City,207,Country 35658,City,207,Country 35659,City,207,Country 35660,City,207,Country 35669,City,207,Country 35685,City,207,Country 35720,City,207,Country 35790,City,207,Country 35797,City,207,Country 35808,City,207,Country 35817,City,207,Country 35846,City,207,Country 35847,City,207,Country 35848,City,207,Country 35849,City,207,Country 35850,City,207,Country 35851,City,207,Country 35864,City,207,Country 35865,City,207,Country 35876,City,207,Country 35939,City,207,Country 35959,City,207,Country 35983,City,207,Country 35984,City,207,Country 35985,City,207,Country 35986,City,207,Country 35987,City,207,Country 35993,City,207,Country 35995,City,207,Country 36031,City,207,Country 36050,City,207,Country 36059,City,207,Country 36075,City,207,Country 36147,City,207,Country 36159,City,207,Country 36232,City,207,Country 36255,City,207,Country 36256,City,207,Country 36272,City,207,Country 36273,City,207,Country 36278,City,207,Country 36280,City,207,Country 36286,City,207,Country 36296,City,207,Country 36298,City,207,Country 36299,City,207,Country 36360,City,207,Country 36378,City,207,Country 36382,City,207,Country 36384,City,207,Country 36433,City,207,Country 36527,City,207,Country 36529,City,207,Country 36707,City,207,Country 36542,City,207,Country 36561,City,207,Country 36603,City,207,Country 36607,City,207,Country 36608,City,207,Country 36609,City,207,Country 36614,City,207,Country 36642,City,207,Country 36718,City,207,Country 36663,City,207,Country 36732,City,207,Country 36785,City,207,Country 36792,City,207,Country 36801,City,207,Country 36915,City,207,Country 37021,City,207,Country 37071,City,207,Country 37101,City,207,Country 37114,City,207,Country 37132,City,207,Country 37157,City,207,Country 37167,City,207,Country 37168,City,207,Country 37256,City,207,Country 37270,City,207,Country 37271,City,207,Country 37274,City,207,Country 37289,City,207,Country 37344,City,207,Country 37345,City,207,Country 37404,City,207,Country 37610,City,207,Country 37451,City,207,Country 37608,City,207,Country 37611,City,207,Country 37620,City,207,Country 37624,City,207,Country 37651,City,207,Country 37812,City,207,Country 37828,City,207,Country 37902,City,207,Country 37951,City,207,Country 37955,City,207,Country 37970,City,207,Country 37985,City,207,Country 37987,City,207,Country 37994,City,207,Country 38002,City,207,Country 38005,City,207,Country 38388,City,207,Country 38403,City,207,Country 38422,City,207,Country 38488,City,207,Country 38572,City,207,Country 31946,City,207,Country 31965,City,207,Country 31986,City,207,Country 32034,City,207,Country 32038,City,207,Country 32082,City,207,Country 32158,City,207,Country 32186,City,207,Country 32187,City,207,Country 32198,City,207,Country 32272,City,207,Country 32380,City,207,Country 32381,City,207,Country 32453,City,207,Country 32454,City,207,Country 32493,City,207,Country 32494,City,207,Country 32518,City,207,Country 32558,City,207,Country 32562,City,207,Country 32586,City,207,Country 32603,City,207,Country 32701,City,207,Country 32706,City,207,Country 32705,City,207,Country 32837,City,207,Country 32848,City,207,Country 32849,City,207,Country 32919,City,207,Country 32983,City,207,Country 32990,City,207,Country 32988,City,207,Country 33091,City,207,Country 33126,City,207,Country 33223,City,207,Country 33534,City,207,Country 33244,City,207,Country 33896,City,207,Country 33345,City,207,Country 33398,City,207,Country 33565,City,207,Country 33569,City,207,Country 33602,City,207,Country 33656,City,207,Country 33665,City,207,Country 33688,City,207,Country 33705,City,207,Country 33783,City,207,Country 33786,City,207,Country 33793,City,207,Country 33797,City,207,Country 34055,City,207,Country 34062,City,207,Country 34146,City,207,Country 34153,City,207,Country 34204,City,207,Country 34219,City,207,Country 34286,City,207,Country 34377,City,207,Country 34381,City,207,Country 34393,City,207,Country 34466,City,207,Country 34509,City,207,Country 34518,City,207,Country 34572,City,207,Country 34580,City,207,Country 34592,City,207,Country 34605,City,207,Country 34657,City,207,Country 34658,City,207,Country 34661,City,207,Country 34664,City,207,Country 34713,City,207,Country 34735,City,207,Country 34793,City,207,Country 34946,City,207,Country 34953,City,207,Country 34975,City,207,Country 35017,City,207,Country 35027,City,207,Country 35040,City,207,Country 35101,City,207,Country 35164,City,207,Country 35253,City,207,Country 35266,City,207,Country 35347,City,207,Country 35378,City,207,Country 35666,City,207,Country 35678,City,207,Country 35682,City,207,Country 35684,City,207,Country 35842,City,207,Country 35710,City,207,Country 35739,City,207,Country 35807,City,207,Country 35857,City,207,Country 35859,City,207,Country 35867,City,207,Country 35894,City,207,Country 36087,City,207,Country 36112,City,207,Country 36208,City,207,Country 36341,City,207,Country 36343,City,207,Country 36407,City,207,Country 36375,City,207,Country 36492,City,207,Country 36534,City,207,Country 36626,City,207,Country 36659,City,207,Country 36664,City,207,Country 36743,City,207,Country 36805,City,207,Country 36891,City,207,Country 36890,City,207,Country 36916,City,207,Country 36924,City,207,Country 36930,City,207,Country 37014,City,207,Country 37055,City,207,Country 37141,City,207,Country 37154,City,207,Country 37278,City,207,Country 37306,City,207,Country 37319,City,207,Country 37414,City,207,Country 37429,City,207,Country 37438,City,207,Country 37468,City,207,Country 37504,City,207,Country 37524,City,207,Country 37525,City,207,Country 37562,City,207,Country 37633,City,207,Country 37636,City,207,Country 37650,City,207,Country 37700,City,207,Country 37763,City,207,Country 37829,City,207,Country 37942,City,207,Country 37945,City,207,Country 37971,City,207,Country 38095,City,207,Country 38115,City,207,Country 38149,City,207,Country 38176,City,207,Country 38246,City,207,Country 38270,City,207,Country 38297,City,207,Country 38309,City,207,Country 38340,City,207,Country 38348,City,207,Country 38377,City,207,Country 38394,City,207,Country 38395,City,207,Country 38476,City,207,Country 38483,City,207,Country 38499,City,207,Country 31899,City,207,Country 31902,City,207,Country 31907,City,207,Country 31911,City,207,Country 31912,City,207,Country 31919,City,207,Country 31922,City,207,Country 31928,City,207,Country 31930,City,207,Country 31937,City,207,Country 31938,City,207,Country 31939,City,207,Country 31940,City,207,Country 31945,City,207,Country 38573,City,207,Country 31953,City,207,Country 31957,City,207,Country 31959,City,207,Country 31960,City,207,Country 31961,City,207,Country 31976,City,207,Country 31975,City,207,Country 31990,City,207,Country 32002,City,207,Country 32003,City,207,Country 32010,City,207,Country 32011,City,207,Country 32012,City,207,Country 32045,City,207,Country 32055,City,207,Country 32093,City,207,Country 32092,City,207,Country 32100,City,207,Country 32112,City,207,Country 32113,City,207,Country 32114,City,207,Country 32125,City,207,Country 32127,City,207,Country 32126,City,207,Country 32142,City,207,Country 32145,City,207,Country 32141,City,207,Country 32148,City,207,Country 32149,City,207,Country 32150,City,207,Country 32151,City,207,Country 32152,City,207,Country 32153,City,207,Country 32154,City,207,Country 32155,City,207,Country 32156,City,207,Country 32159,City,207,Country 32163,City,207,Country 32162,City,207,Country 32166,City,207,Country 32168,City,207,Country 32169,City,207,Country 32170,City,207,Country 32171,City,207,Country 32172,City,207,Country 32173,City,207,Country 32174,City,207,Country 32175,City,207,Country 32178,City,207,Country 32177,City,207,Country 32179,City,207,Country 32181,City,207,Country 32184,City,207,Country 32208,City,207,Country 32224,City,207,Country 32249,City,207,Country 32264,City,207,Country 32265,City,207,Country 32267,City,207,Country 32269,City,207,Country 32271,City,207,Country 32275,City,207,Country 32274,City,207,Country 32281,City,207,Country 32283,City,207,Country 32284,City,207,Country 32285,City,207,Country 32325,City,207,Country 32337,City,207,Country 32348,City,207,Country 32349,City,207,Country 32353,City,207,Country 32359,City,207,Country 32362,City,207,Country 32363,City,207,Country 32366,City,207,Country 32367,City,207,Country 32595,City,207,Country 32383,City,207,Country 32599,City,207,Country 32394,City,207,Country 32402,City,207,Country 32406,City,207,Country 32407,City,207,Country 32409,City,207,Country 32415,City,207,Country 32417,City,207,Country 32418,City,207,Country 32419,City,207,Country 32428,City,207,Country 32429,City,207,Country 32433,City,207,Country 32434,City,207,Country 32435,City,207,Country 32436,City,207,Country 32438,City,207,Country 32442,City,207,Country 32447,City,207,Country 32449,City,207,Country 32459,City,207,Country 32531,City,207,Country 32532,City,207,Country 32466,City,207,Country 32463,City,207,Country 32476,City,207,Country 32479,City,207,Country 32484,City,207,Country 32487,City,207,Country 32490,City,207,Country 32498,City,207,Country 32500,City,207,Country 32503,City,207,Country 32509,City,207,Country 32536,City,207,Country 32540,City,207,Country 32541,City,207,Country 32542,City,207,Country 32548,City,207,Country 32549,City,207,Country 32559,City,207,Country 32560,City,207,Country 32561,City,207,Country 32564,City,207,Country 32565,City,207,Country 32567,City,207,Country 38576,City,207,Country 32574,City,207,Country 32577,City,207,Country 32578,City,207,Country 32600,City,207,Country 32611,City,207,Country 32612,City,207,Country 32621,City,207,Country 32629,City,207,Country 32702,City,207,Country 32708,City,207,Country 32711,City,207,Country 32635,City,207,Country 32641,City,207,Country 32642,City,207,Country 32643,City,207,Country 32644,City,207,Country 32648,City,207,Country 32651,City,207,Country 33052,City,207,Country 32654,City,207,Country 32656,City,207,Country 32657,City,207,Country 32659,City,207,Country 32665,City,207,Country 32669,City,207,Country 32676,City,207,Country 32679,City,207,Country 32680,City,207,Country 32681,City,207,Country 32682,City,207,Country 32687,City,207,Country 32689,City,207,Country 33055,City,207,Country 32690,City,207,Country 32697,City,207,Country 32698,City,207,Country 32721,City,207,Country 32722,City,207,Country 32724,City,207,Country 32726,City,207,Country 33058,City,207,Country 32736,City,207,Country 32738,City,207,Country 32749,City,207,Country 32752,City,207,Country 32754,City,207,Country 32756,City,207,Country 32758,City,207,Country 32781,City,207,Country 32782,City,207,Country 32784,City,207,Country 32828,City,207,Country 32833,City,207,Country 32835,City,207,Country 32838,City,207,Country 32839,City,207,Country 32840,City,207,Country 32841,City,207,Country 32842,City,207,Country 32843,City,207,Country 32844,City,207,Country 32855,City,207,Country 32856,City,207,Country 32857,City,207,Country 32858,City,207,Country 32860,City,207,Country 32861,City,207,Country 32869,City,207,Country 32870,City,207,Country 32872,City,207,Country 32873,City,207,Country 32874,City,207,Country 32876,City,207,Country 32904,City,207,Country 32910,City,207,Country 32911,City,207,Country 32913,City,207,Country 32914,City,207,Country 32915,City,207,Country 32916,City,207,Country 32920,City,207,Country 32922,City,207,Country 32924,City,207,Country 32925,City,207,Country 32926,City,207,Country 32928,City,207,Country 32929,City,207,Country 32932,City,207,Country 32936,City,207,Country 32967,City,207,Country 32948,City,207,Country 32955,City,207,Country 32958,City,207,Country 32961,City,207,Country 33063,City,207,Country 32968,City,207,Country 32973,City,207,Country 32970,City,207,Country 32972,City,207,Country 32979,City,207,Country 32978,City,207,Country 32982,City,207,Country 32985,City,207,Country 32986,City,207,Country 32987,City,207,Country 32989,City,207,Country 32995,City,207,Country 33001,City,207,Country 33003,City,207,Country 33004,City,207,Country 33011,City,207,Country 33012,City,207,Country 33019,City,207,Country 33024,City,207,Country 33025,City,207,Country 33026,City,207,Country 33034,City,207,Country 33039,City,207,Country 33040,City,207,Country 33041,City,207,Country 33042,City,207,Country 33043,City,207,Country 33044,City,207,Country 33065,City,207,Country 33071,City,207,Country 33072,City,207,Country 33076,City,207,Country 33078,City,207,Country 33081,City,207,Country 33085,City,207,Country 33086,City,207,Country 33087,City,207,Country 33090,City,207,Country 33095,City,207,Country 33093,City,207,Country 33088,City,207,Country 33096,City,207,Country 33102,City,207,Country 33103,City,207,Country 33105,City,207,Country 33107,City,207,Country 33108,City,207,Country 33109,City,207,Country 33110,City,207,Country 33112,City,207,Country 33127,City,207,Country 33133,City,207,Country 33142,City,207,Country 33152,City,207,Country 33153,City,207,Country 33154,City,207,Country 33157,City,207,Country 33159,City,207,Country 33158,City,207,Country 33160,City,207,Country 33162,City,207,Country 33171,City,207,Country 33183,City,207,Country 33184,City,207,Country 33188,City,207,Country 33190,City,207,Country 33203,City,207,Country 33204,City,207,Country 33205,City,207,Country 33206,City,207,Country 33207,City,207,Country 33220,City,207,Country 33222,City,207,Country 33531,City,207,Country 33227,City,207,Country 33228,City,207,Country 33229,City,207,Country 33230,City,207,Country 33238,City,207,Country 33240,City,207,Country 33243,City,207,Country 33542,City,207,Country 33546,City,207,Country 33248,City,207,Country 33249,City,207,Country 33250,City,207,Country 33251,City,207,Country 33254,City,207,Country 33255,City,207,Country 33258,City,207,Country 33259,City,207,Country 33270,City,207,Country 33273,City,207,Country 33275,City,207,Country 33278,City,207,Country 33279,City,207,Country 33281,City,207,Country 33284,City,207,Country 33287,City,207,Country 33293,City,207,Country 33294,City,207,Country 33299,City,207,Country 33300,City,207,Country 33301,City,207,Country 33302,City,207,Country 33897,City,207,Country 33313,City,207,Country 33314,City,207,Country 33315,City,207,Country 33318,City,207,Country 33319,City,207,Country 33322,City,207,Country 33324,City,207,Country 33326,City,207,Country 33332,City,207,Country 33329,City,207,Country 33334,City,207,Country 33341,City,207,Country 33344,City,207,Country 33349,City,207,Country 33377,City,207,Country 33378,City,207,Country 33380,City,207,Country 33382,City,207,Country 33384,City,207,Country 33385,City,207,Country 33388,City,207,Country 33390,City,207,Country 33392,City,207,Country 33414,City,207,Country 33415,City,207,Country 33416,City,207,Country 33417,City,207,Country 33444,City,207,Country 33445,City,207,Country 33448,City,207,Country 33449,City,207,Country 33451,City,207,Country 33458,City,207,Country 33459,City,207,Country 33460,City,207,Country 33470,City,207,Country 33471,City,207,Country 33472,City,207,Country 33475,City,207,Country 33476,City,207,Country 33477,City,207,Country 33480,City,207,Country 33481,City,207,Country 33482,City,207,Country 33483,City,207,Country 33478,City,207,Country 33479,City,207,Country 33484,City,207,Country 33485,City,207,Country 33489,City,207,Country 33493,City,207,Country 33494,City,207,Country 33495,City,207,Country 33496,City,207,Country 33497,City,207,Country 33498,City,207,Country 33499,City,207,Country 33500,City,207,Country 33501,City,207,Country 33502,City,207,Country 33503,City,207,Country 33504,City,207,Country 33505,City,207,Country 33506,City,207,Country 33507,City,207,Country 33508,City,207,Country 33510,City,207,Country 33511,City,207,Country 33520,City,207,Country 33525,City,207,Country 33548,City,207,Country 33550,City,207,Country 33551,City,207,Country 33552,City,207,Country 33556,City,207,Country 33561,City,207,Country 33562,City,207,Country 33575,City,207,Country 33576,City,207,Country 33577,City,207,Country 33578,City,207,Country 33583,City,207,Country 33584,City,207,Country 33585,City,207,Country 33586,City,207,Country 33588,City,207,Country 33589,City,207,Country 33590,City,207,Country 33591,City,207,Country 33592,City,207,Country 33593,City,207,Country 33597,City,207,Country 33604,City,207,Country 33612,City,207,Country 33611,City,207,Country 33614,City,207,Country 33620,City,207,Country 33646,City,207,Country 33655,City,207,Country 33657,City,207,Country 33661,City,207,Country 33662,City,207,Country 33663,City,207,Country 33664,City,207,Country 33672,City,207,Country 33668,City,207,Country 33669,City,207,Country 33670,City,207,Country 33671,City,207,Country 33673,City,207,Country 33674,City,207,Country 33680,City,207,Country 33683,City,207,Country 33687,City,207,Country 33689,City,207,Country 33690,City,207,Country 33691,City,207,Country 33694,City,207,Country 33693,City,207,Country 33698,City,207,Country 33711,City,207,Country 33712,City,207,Country 33713,City,207,Country 33714,City,207,Country 33715,City,207,Country 33717,City,207,Country 33720,City,207,Country 33722,City,207,Country 33734,City,207,Country 33735,City,207,Country 33732,City,207,Country 33737,City,207,Country 33743,City,207,Country 33758,City,207,Country 33759,City,207,Country 33767,City,207,Country 33770,City,207,Country 33771,City,207,Country 33776,City,207,Country 33778,City,207,Country 33781,City,207,Country 33782,City,207,Country 33787,City,207,Country 33799,City,207,Country 33803,City,207,Country 33804,City,207,Country 33813,City,207,Country 33814,City,207,Country 33816,City,207,Country 33826,City,207,Country 33827,City,207,Country 33830,City,207,Country 33841,City,207,Country 33834,City,207,Country 33837,City,207,Country 33842,City,207,Country 33849,City,207,Country 33850,City,207,Country 33853,City,207,Country 33851,City,207,Country 33852,City,207,Country 33854,City,207,Country 33855,City,207,Country 33856,City,207,Country 33857,City,207,Country 33859,City,207,Country 33860,City,207,Country 33861,City,207,Country 33863,City,207,Country 33888,City,207,Country 33865,City,207,Country 33867,City,207,Country 33872,City,207,Country 33873,City,207,Country 33879,City,207,Country 33886,City,207,Country 33918,City,207,Country 33919,City,207,Country 33930,City,207,Country 33931,City,207,Country 33935,City,207,Country 33938,City,207,Country 33944,City,207,Country 33955,City,207,Country 33956,City,207,Country 33945,City,207,Country 33947,City,207,Country 33959,City,207,Country 33962,City,207,Country 33963,City,207,Country 33975,City,207,Country 33979,City,207,Country 33983,City,207,Country 34000,City,207,Country 34020,City,207,Country 34044,City,207,Country 34046,City,207,Country 34048,City,207,Country 34049,City,207,Country 34050,City,207,Country 34052,City,207,Country 34053,City,207,Country 34054,City,207,Country 34056,City,207,Country 34057,City,207,Country 34061,City,207,Country 34078,City,207,Country 34081,City,207,Country 34085,City,207,Country 34086,City,207,Country 34087,City,207,Country 34093,City,207,Country 34096,City,207,Country 34101,City,207,Country 34102,City,207,Country 34110,City,207,Country 34111,City,207,Country 34113,City,207,Country 34117,City,207,Country 34118,City,207,Country 34119,City,207,Country 34122,City,207,Country 34121,City,207,Country 34123,City,207,Country 34125,City,207,Country 34142,City,207,Country 34150,City,207,Country 34155,City,207,Country 34163,City,207,Country 34164,City,207,Country 34174,City,207,Country 34177,City,207,Country 34178,City,207,Country 34180,City,207,Country 34186,City,207,Country 34196,City,207,Country 34197,City,207,Country 34200,City,207,Country 34201,City,207,Country 34203,City,207,Country 34208,City,207,Country 34215,City,207,Country 34216,City,207,Country 34217,City,207,Country 34221,City,207,Country 34236,City,207,Country 34239,City,207,Country 34240,City,207,Country 34241,City,207,Country 34245,City,207,Country 34247,City,207,Country 34248,City,207,Country 34250,City,207,Country 34252,City,207,Country 34253,City,207,Country 34255,City,207,Country 34256,City,207,Country 34260,City,207,Country 34261,City,207,Country 34262,City,207,Country 34263,City,207,Country 34257,City,207,Country 34258,City,207,Country 34264,City,207,Country 34254,City,207,Country 34271,City,207,Country 34265,City,207,Country 34273,City,207,Country 34269,City,207,Country 34287,City,207,Country 34298,City,207,Country 34301,City,207,Country 34303,City,207,Country 34291,City,207,Country 34310,City,207,Country 34311,City,207,Country 34312,City,207,Country 34313,City,207,Country 34314,City,207,Country 34315,City,207,Country 34318,City,207,Country 34319,City,207,Country 34323,City,207,Country 34325,City,207,Country 34327,City,207,Country 34328,City,207,Country 34330,City,207,Country 34332,City,207,Country 34331,City,207,Country 34333,City,207,Country 34340,City,207,Country 34341,City,207,Country 34342,City,207,Country 34346,City,207,Country 34347,City,207,Country 34348,City,207,Country 34349,City,207,Country 34351,City,207,Country 34352,City,207,Country 34353,City,207,Country 34354,City,207,Country 34355,City,207,Country 34357,City,207,Country 34358,City,207,Country 34359,City,207,Country 34360,City,207,Country 34372,City,207,Country 34376,City,207,Country 34379,City,207,Country 34382,City,207,Country 34383,City,207,Country 34384,City,207,Country 34386,City,207,Country 34387,City,207,Country 34388,City,207,Country 34389,City,207,Country 34390,City,207,Country 34391,City,207,Country 34400,City,207,Country 34401,City,207,Country 34409,City,207,Country 34410,City,207,Country 34411,City,207,Country 34412,City,207,Country 34416,City,207,Country 34421,City,207,Country 34423,City,207,Country 34437,City,207,Country 34440,City,207,Country 34444,City,207,Country 34449,City,207,Country 34450,City,207,Country 34455,City,207,Country 34465,City,207,Country 34478,City,207,Country 34481,City,207,Country 34564,City,207,Country 34482,City,207,Country 34485,City,207,Country 34486,City,207,Country 34488,City,207,Country 34489,City,207,Country 34492,City,207,Country 34495,City,207,Country 34496,City,207,Country 34500,City,207,Country 34504,City,207,Country 34511,City,207,Country 34512,City,207,Country 34513,City,207,Country 34532,City,207,Country 34536,City,207,Country 34540,City,207,Country 34546,City,207,Country 34547,City,207,Country 34551,City,207,Country 34555,City,207,Country 34556,City,207,Country 34571,City,207,Country 34574,City,207,Country 34583,City,207,Country 34584,City,207,Country 34585,City,207,Country 34721,City,207,Country 34587,City,207,Country 34589,City,207,Country 34595,City,207,Country 34596,City,207,Country 34597,City,207,Country 34600,City,207,Country 34603,City,207,Country 34613,City,207,Country 34623,City,207,Country 34626,City,207,Country 34637,City,207,Country 34638,City,207,Country 34640,City,207,Country 34641,City,207,Country 34643,City,207,Country 34646,City,207,Country 34648,City,207,Country 34647,City,207,Country 34649,City,207,Country 34653,City,207,Country 34650,City,207,Country 34662,City,207,Country 34663,City,207,Country 34668,City,207,Country 34669,City,207,Country 34673,City,207,Country 34675,City,207,Country 34676,City,207,Country 34678,City,207,Country 34679,City,207,Country 34680,City,207,Country 34715,City,207,Country 34687,City,207,Country 34691,City,207,Country 34699,City,207,Country 34703,City,207,Country 34704,City,207,Country 34705,City,207,Country 34726,City,207,Country 34730,City,207,Country 34736,City,207,Country 34737,City,207,Country 34742,City,207,Country 34760,City,207,Country 34764,City,207,Country 34765,City,207,Country 34770,City,207,Country 34771,City,207,Country 34772,City,207,Country 34773,City,207,Country 34778,City,207,Country 34794,City,207,Country 34800,City,207,Country 34799,City,207,Country 34820,City,207,Country 34825,City,207,Country 34830,City,207,Country 34833,City,207,Country 34835,City,207,Country 34848,City,207,Country 34850,City,207,Country 34856,City,207,Country 34859,City,207,Country 34866,City,207,Country 34869,City,207,Country 34873,City,207,Country 34889,City,207,Country 34901,City,207,Country 34908,City,207,Country 34918,City,207,Country 34925,City,207,Country 34936,City,207,Country 34940,City,207,Country 34945,City,207,Country 34947,City,207,Country 34948,City,207,Country 34949,City,207,Country 34952,City,207,Country 34962,City,207,Country 34963,City,207,Country 34965,City,207,Country 34966,City,207,Country 34968,City,207,Country 34981,City,207,Country 34987,City,207,Country 35000,City,207,Country 35001,City,207,Country 35016,City,207,Country 35018,City,207,Country 35019,City,207,Country 35045,City,207,Country 35032,City,207,Country 35048,City,207,Country 35054,City,207,Country 35065,City,207,Country 35068,City,207,Country 35069,City,207,Country 35103,City,207,Country 35139,City,207,Country 35140,City,207,Country 35146,City,207,Country 35156,City,207,Country 35163,City,207,Country 35170,City,207,Country 35182,City,207,Country 35183,City,207,Country 35184,City,207,Country 35187,City,207,Country 35190,City,207,Country 35191,City,207,Country 35193,City,207,Country 35195,City,207,Country 35198,City,207,Country 35203,City,207,Country 35202,City,207,Country 35206,City,207,Country 35207,City,207,Country 35211,City,207,Country 35217,City,207,Country 35225,City,207,Country 35226,City,207,Country 35233,City,207,Country 35235,City,207,Country 35236,City,207,Country 35237,City,207,Country 35238,City,207,Country 35240,City,207,Country 35241,City,207,Country 35245,City,207,Country 35248,City,207,Country 35249,City,207,Country 35252,City,207,Country 35255,City,207,Country 35258,City,207,Country 35257,City,207,Country 35260,City,207,Country 35262,City,207,Country 35263,City,207,Country 35264,City,207,Country 35272,City,207,Country 35279,City,207,Country 35277,City,207,Country 35278,City,207,Country 35287,City,207,Country 35298,City,207,Country 35299,City,207,Country 35306,City,207,Country 35303,City,207,Country 35304,City,207,Country 35305,City,207,Country 35300,City,207,Country 35309,City,207,Country 35310,City,207,Country 35311,City,207,Country 35328,City,207,Country 35330,City,207,Country 35331,City,207,Country 35333,City,207,Country 35334,City,207,Country 35335,City,207,Country 35336,City,207,Country 35338,City,207,Country 35342,City,207,Country 35343,City,207,Country 35344,City,207,Country 35345,City,207,Country 35348,City,207,Country 35349,City,207,Country 35355,City,207,Country 35359,City,207,Country 35360,City,207,Country 35365,City,207,Country 35368,City,207,Country 35370,City,207,Country 35371,City,207,Country 35373,City,207,Country 35374,City,207,Country 35375,City,207,Country 35379,City,207,Country 35385,City,207,Country 35386,City,207,Country 35387,City,207,Country 35388,City,207,Country 35389,City,207,Country 35393,City,207,Country 35394,City,207,Country 35402,City,207,Country 35404,City,207,Country 35409,City,207,Country 35418,City,207,Country 35419,City,207,Country 35422,City,207,Country 35425,City,207,Country 35426,City,207,Country 35429,City,207,Country 35434,City,207,Country 35438,City,207,Country 35458,City,207,Country 35449,City,207,Country 35450,City,207,Country 35451,City,207,Country 35453,City,207,Country 35455,City,207,Country 35464,City,207,Country 35466,City,207,Country 35474,City,207,Country 35475,City,207,Country 35476,City,207,Country 35479,City,207,Country 35481,City,207,Country 35483,City,207,Country 35491,City,207,Country 35492,City,207,Country 35493,City,207,Country 35498,City,207,Country 35496,City,207,Country 35497,City,207,Country 35500,City,207,Country 35511,City,207,Country 35515,City,207,Country 35519,City,207,Country 35518,City,207,Country 35525,City,207,Country 35526,City,207,Country 35535,City,207,Country 35542,City,207,Country 35552,City,207,Country 35553,City,207,Country 35556,City,207,Country 35554,City,207,Country 35559,City,207,Country 35560,City,207,Country 35562,City,207,Country 35566,City,207,Country 35567,City,207,Country 35569,City,207,Country 35581,City,207,Country 35591,City,207,Country 35595,City,207,Country 35599,City,207,Country 35598,City,207,Country 35605,City,207,Country 35603,City,207,Country 35604,City,207,Country 35606,City,207,Country 35607,City,207,Country 35608,City,207,Country 35609,City,207,Country 35610,City,207,Country 35611,City,207,Country 35613,City,207,Country 35620,City,207,Country 35628,City,207,Country 35627,City,207,Country 35630,City,207,Country 35631,City,207,Country 35635,City,207,Country 35632,City,207,Country 35642,City,207,Country 35651,City,207,Country 35649,City,207,Country 35652,City,207,Country 35654,City,207,Country 35656,City,207,Country 35657,City,207,Country 35692,City,207,Country 35693,City,207,Country 35694,City,207,Country 35695,City,207,Country 35696,City,207,Country 35697,City,207,Country 35698,City,207,Country 35699,City,207,Country 35700,City,207,Country 35701,City,207,Country 35674,City,207,Country 35676,City,207,Country 35675,City,207,Country 35709,City,207,Country 35714,City,207,Country 35713,City,207,Country 35715,City,207,Country 35716,City,207,Country 35717,City,207,Country 35718,City,207,Country 35719,City,207,Country 35721,City,207,Country 35722,City,207,Country 35723,City,207,Country 35726,City,207,Country 35724,City,207,Country 35725,City,207,Country 35727,City,207,Country 35728,City,207,Country 35729,City,207,Country 35730,City,207,Country 35733,City,207,Country 35734,City,207,Country 35735,City,207,Country 35737,City,207,Country 35741,City,207,Country 35746,City,207,Country 35747,City,207,Country 35748,City,207,Country 35749,City,207,Country 35750,City,207,Country 35751,City,207,Country 35754,City,207,Country 35755,City,207,Country 35756,City,207,Country 35759,City,207,Country 35762,City,207,Country 35764,City,207,Country 35767,City,207,Country 35768,City,207,Country 35769,City,207,Country 35771,City,207,Country 35772,City,207,Country 35773,City,207,Country 35774,City,207,Country 35777,City,207,Country 35780,City,207,Country 35785,City,207,Country 35787,City,207,Country 35788,City,207,Country 35791,City,207,Country 35795,City,207,Country 35798,City,207,Country 35799,City,207,Country 35800,City,207,Country 35801,City,207,Country 35806,City,207,Country 35811,City,207,Country 35815,City,207,Country 35821,City,207,Country 35829,City,207,Country 35833,City,207,Country 35861,City,207,Country 35869,City,207,Country 35875,City,207,Country 35889,City,207,Country 35900,City,207,Country 35901,City,207,Country 35902,City,207,Country 35903,City,207,Country 35904,City,207,Country 35905,City,207,Country 35906,City,207,Country 35907,City,207,Country 35910,City,207,Country 35916,City,207,Country 35988,City,207,Country 35921,City,207,Country 35930,City,207,Country 35931,City,207,Country 35934,City,207,Country 35962,City,207,Country 35963,City,207,Country 35971,City,207,Country 35972,City,207,Country 35978,City,207,Country 35979,City,207,Country 35990,City,207,Country 35991,City,207,Country 35992,City,207,Country 35994,City,207,Country 35999,City,207,Country 36000,City,207,Country 36001,City,207,Country 36002,City,207,Country 36003,City,207,Country 36006,City,207,Country 36008,City,207,Country 36009,City,207,Country 36007,City,207,Country 36010,City,207,Country 36011,City,207,Country 36012,City,207,Country 36013,City,207,Country 36018,City,207,Country 36019,City,207,Country 36021,City,207,Country 36020,City,207,Country 36022,City,207,Country 36023,City,207,Country 36025,City,207,Country 36044,City,207,Country 36046,City,207,Country 36051,City,207,Country 36056,City,207,Country 36057,City,207,Country 36060,City,207,Country 36482,City,207,Country 36483,City,207,Country 36063,City,207,Country 36066,City,207,Country 36074,City,207,Country 36086,City,207,Country 36089,City,207,Country 36092,City,207,Country 36093,City,207,Country 36094,City,207,Country 36099,City,207,Country 36104,City,207,Country 36105,City,207,Country 36107,City,207,Country 36106,City,207,Country 36108,City,207,Country 36109,City,207,Country 36110,City,207,Country 36111,City,207,Country 36117,City,207,Country 36118,City,207,Country 36120,City,207,Country 36121,City,207,Country 36123,City,207,Country 36124,City,207,Country 36125,City,207,Country 36161,City,207,Country 36162,City,207,Country 36164,City,207,Country 36166,City,207,Country 36170,City,207,Country 36171,City,207,Country 36172,City,207,Country 36173,City,207,Country 36176,City,207,Country 36129,City,207,Country 36131,City,207,Country 36135,City,207,Country 36136,City,207,Country 36138,City,207,Country 36145,City,207,Country 36148,City,207,Country 36150,City,207,Country 36151,City,207,Country 36152,City,207,Country 36485,City,207,Country 36181,City,207,Country 36182,City,207,Country 36226,City,207,Country 36227,City,207,Country 36228,City,207,Country 36194,City,207,Country 36195,City,207,Country 36198,City,207,Country 36199,City,207,Country 36230,City,207,Country 36231,City,207,Country 36204,City,207,Country 36205,City,207,Country 36203,City,207,Country 36206,City,207,Country 36209,City,207,Country 36222,City,207,Country 36225,City,207,Country 36247,City,207,Country 36248,City,207,Country 36249,City,207,Country 36250,City,207,Country 36251,City,207,Country 36252,City,207,Country 36258,City,207,Country 36263,City,207,Country 36268,City,207,Country 36270,City,207,Country 36291,City,207,Country 36292,City,207,Country 36294,City,207,Country 36302,City,207,Country 36306,City,207,Country 36308,City,207,Country 36310,City,207,Country 36311,City,207,Country 36312,City,207,Country 36313,City,207,Country 36314,City,207,Country 36315,City,207,Country 36319,City,207,Country 36322,City,207,Country 36327,City,207,Country 36336,City,207,Country 36334,City,207,Country 36337,City,207,Country 36340,City,207,Country 36402,City,207,Country 36403,City,207,Country 36404,City,207,Country 36344,City,207,Country 36345,City,207,Country 36347,City,207,Country 36349,City,207,Country 36351,City,207,Country 36352,City,207,Country 36356,City,207,Country 36394,City,207,Country 36364,City,207,Country 36377,City,207,Country 36383,City,207,Country 36385,City,207,Country 36387,City,207,Country 36389,City,207,Country 36391,City,207,Country 36392,City,207,Country 36413,City,207,Country 36418,City,207,Country 36420,City,207,Country 36421,City,207,Country 36423,City,207,Country 36425,City,207,Country 36432,City,207,Country 36435,City,207,Country 36438,City,207,Country 36442,City,207,Country 36443,City,207,Country 36444,City,207,Country 36451,City,207,Country 36449,City,207,Country 36474,City,207,Country 36493,City,207,Country 36503,City,207,Country 36504,City,207,Country 36505,City,207,Country 36506,City,207,Country 36501,City,207,Country 36507,City,207,Country 36508,City,207,Country 36516,City,207,Country 36509,City,207,Country 36510,City,207,Country 36512,City,207,Country 36514,City,207,Country 36515,City,207,Country 36517,City,207,Country 36522,City,207,Country 36519,City,207,Country 36518,City,207,Country 36520,City,207,Country 36521,City,207,Country 36523,City,207,Country 36524,City,207,Country 36525,City,207,Country 36526,City,207,Country 36530,City,207,Country 36533,City,207,Country 36535,City,207,Country 36708,City,207,Country 36709,City,207,Country 36710,City,207,Country 36536,City,207,Country 36713,City,207,Country 36545,City,207,Country 36546,City,207,Country 36550,City,207,Country 36554,City,207,Country 36555,City,207,Country 36558,City,207,Country 36559,City,207,Country 36560,City,207,Country 36565,City,207,Country 36566,City,207,Country 36569,City,207,Country 36570,City,207,Country 36572,City,207,Country 36574,City,207,Country 36577,City,207,Country 36579,City,207,Country 36582,City,207,Country 36583,City,207,Country 36588,City,207,Country 36589,City,207,Country 36590,City,207,Country 36593,City,207,Country 36594,City,207,Country 36595,City,207,Country 36596,City,207,Country 36597,City,207,Country 36598,City,207,Country 36599,City,207,Country 36600,City,207,Country 36602,City,207,Country 36605,City,207,Country 36604,City,207,Country 36612,City,207,Country 36616,City,207,Country 36619,City,207,Country 36622,City,207,Country 36628,City,207,Country 36715,City,207,Country 36640,City,207,Country 36643,City,207,Country 36644,City,207,Country 36645,City,207,Country 36646,City,207,Country 36647,City,207,Country 36657,City,207,Country 36662,City,207,Country 36666,City,207,Country 36667,City,207,Country 36668,City,207,Country 36674,City,207,Country 36682,City,207,Country 36684,City,207,Country 36688,City,207,Country 36695,City,207,Country 36693,City,207,Country 36696,City,207,Country 36697,City,207,Country 36701,City,207,Country 36723,City,207,Country 36731,City,207,Country 36734,City,207,Country 36736,City,207,Country 36741,City,207,Country 36744,City,207,Country 36750,City,207,Country 36751,City,207,Country 36752,City,207,Country 36754,City,207,Country 36755,City,207,Country 36756,City,207,Country 36757,City,207,Country 36765,City,207,Country 36767,City,207,Country 36771,City,207,Country 36772,City,207,Country 36781,City,207,Country 36782,City,207,Country 36787,City,207,Country 36790,City,207,Country 36791,City,207,Country 36796,City,207,Country 36797,City,207,Country 36800,City,207,Country 36803,City,207,Country 36807,City,207,Country 36808,City,207,Country 36814,City,207,Country 36815,City,207,Country 36816,City,207,Country 36817,City,207,Country 36819,City,207,Country 36820,City,207,Country 36821,City,207,Country 36823,City,207,Country 36824,City,207,Country 36825,City,207,Country 36822,City,207,Country 36826,City,207,Country 36828,City,207,Country 36830,City,207,Country 36831,City,207,Country 36829,City,207,Country 36832,City,207,Country 36833,City,207,Country 36834,City,207,Country 36837,City,207,Country 36838,City,207,Country 36846,City,207,Country 36847,City,207,Country 36850,City,207,Country 36851,City,207,Country 36853,City,207,Country 36854,City,207,Country 36855,City,207,Country 36856,City,207,Country 36859,City,207,Country 36861,City,207,Country 36862,City,207,Country 36874,City,207,Country 36867,City,207,Country 36871,City,207,Country 36872,City,207,Country 36875,City,207,Country 36876,City,207,Country 36881,City,207,Country 36886,City,207,Country 36884,City,207,Country 36885,City,207,Country 36887,City,207,Country 36888,City,207,Country 36889,City,207,Country 36892,City,207,Country 36893,City,207,Country 36894,City,207,Country 36897,City,207,Country 36898,City,207,Country 36900,City,207,Country 36904,City,207,Country 36905,City,207,Country 36906,City,207,Country 36908,City,207,Country 36909,City,207,Country 36912,City,207,Country 36901,City,207,Country 36913,City,207,Country 36914,City,207,Country 36917,City,207,Country 36918,City,207,Country 36927,City,207,Country 36929,City,207,Country 36931,City,207,Country 36932,City,207,Country 36933,City,207,Country 36934,City,207,Country 36935,City,207,Country 36939,City,207,Country 36940,City,207,Country 36936,City,207,Country 36937,City,207,Country 36938,City,207,Country 36941,City,207,Country 36943,City,207,Country 37010,City,207,Country 37011,City,207,Country 37013,City,207,Country 37018,City,207,Country 37020,City,207,Country 37019,City,207,Country 37024,City,207,Country 37023,City,207,Country 37025,City,207,Country 37028,City,207,Country 37039,City,207,Country 37035,City,207,Country 37037,City,207,Country 37045,City,207,Country 37046,City,207,Country 37048,City,207,Country 37050,City,207,Country 37051,City,207,Country 37060,City,207,Country 37061,City,207,Country 37075,City,207,Country 37080,City,207,Country 37081,City,207,Country 37082,City,207,Country 37083,City,207,Country 37076,City,207,Country 37077,City,207,Country 37078,City,207,Country 37084,City,207,Country 37085,City,207,Country 37087,City,207,Country 37088,City,207,Country 37089,City,207,Country 37091,City,207,Country 37068,City,207,Country 37072,City,207,Country 37073,City,207,Country 37093,City,207,Country 37108,City,207,Country 37110,City,207,Country 37111,City,207,Country 37115,City,207,Country 37118,City,207,Country 37112,City,207,Country 37120,City,207,Country 37121,City,207,Country 37125,City,207,Country 37126,City,207,Country 37122,City,207,Country 37123,City,207,Country 37124,City,207,Country 37127,City,207,Country 37137,City,207,Country 37138,City,207,Country 37142,City,207,Country 37139,City,207,Country 37140,City,207,Country 37144,City,207,Country 37147,City,207,Country 37148,City,207,Country 37149,City,207,Country 37158,City,207,Country 37159,City,207,Country 37160,City,207,Country 37161,City,207,Country 37162,City,207,Country 37165,City,207,Country 37176,City,207,Country 37178,City,207,Country 37179,City,207,Country 37185,City,207,Country 37192,City,207,Country 37208,City,207,Country 37215,City,207,Country 37216,City,207,Country 37217,City,207,Country 37220,City,207,Country 37222,City,207,Country 37223,City,207,Country 37224,City,207,Country 37250,City,207,Country 37251,City,207,Country 37258,City,207,Country 37263,City,207,Country 37273,City,207,Country 37275,City,207,Country 37281,City,207,Country 37282,City,207,Country 37284,City,207,Country 37299,City,207,Country 37300,City,207,Country 37301,City,207,Country 37311,City,207,Country 37312,City,207,Country 37313,City,207,Country 37314,City,207,Country 37316,City,207,Country 37317,City,207,Country 37318,City,207,Country 37320,City,207,Country 37321,City,207,Country 37323,City,207,Country 37324,City,207,Country 37325,City,207,Country 37326,City,207,Country 37330,City,207,Country 37333,City,207,Country 37339,City,207,Country 37340,City,207,Country 37341,City,207,Country 37662,City,207,Country 37342,City,207,Country 37351,City,207,Country 37352,City,207,Country 37363,City,207,Country 37365,City,207,Country 37366,City,207,Country 37369,City,207,Country 37375,City,207,Country 37380,City,207,Country 37377,City,207,Country 37378,City,207,Country 37382,City,207,Country 37394,City,207,Country 37396,City,207,Country 37399,City,207,Country 37403,City,207,Country 37407,City,207,Country 37408,City,207,Country 37421,City,207,Country 37434,City,207,Country 37435,City,207,Country 37442,City,207,Country 37445,City,207,Country 37453,City,207,Country 37454,City,207,Country 37455,City,207,Country 37459,City,207,Country 37461,City,207,Country 37462,City,207,Country 37464,City,207,Country 37467,City,207,Country 37469,City,207,Country 37473,City,207,Country 37476,City,207,Country 37477,City,207,Country 37492,City,207,Country 37495,City,207,Country 37499,City,207,Country 37489,City,207,Country 37508,City,207,Country 37509,City,207,Country 37512,City,207,Country 37516,City,207,Country 37518,City,207,Country 37519,City,207,Country 37521,City,207,Country 37522,City,207,Country 37532,City,207,Country 37533,City,207,Country 37535,City,207,Country 37545,City,207,Country 37550,City,207,Country 37563,City,207,Country 37578,City,207,Country 37580,City,207,Country 37581,City,207,Country 37582,City,207,Country 37594,City,207,Country 37669,City,207,Country 37602,City,207,Country 37612,City,207,Country 37613,City,207,Country 37614,City,207,Country 37623,City,207,Country 37626,City,207,Country 37627,City,207,Country 37630,City,207,Country 37632,City,207,Country 37638,City,207,Country 37641,City,207,Country 37643,City,207,Country 37646,City,207,Country 37647,City,207,Country 37649,City,207,Country 37654,City,207,Country 37658,City,207,Country 37672,City,207,Country 37686,City,207,Country 37714,City,207,Country 37691,City,207,Country 37694,City,207,Country 37698,City,207,Country 37699,City,207,Country 37715,City,207,Country 37716,City,207,Country 37717,City,207,Country 37718,City,207,Country 37719,City,207,Country 37723,City,207,Country 37724,City,207,Country 37725,City,207,Country 37730,City,207,Country 37731,City,207,Country 37734,City,207,Country 37738,City,207,Country 37739,City,207,Country 37743,City,207,Country 37744,City,207,Country 37746,City,207,Country 37747,City,207,Country 37750,City,207,Country 37754,City,207,Country 37756,City,207,Country 37757,City,207,Country 37761,City,207,Country 37764,City,207,Country 37769,City,207,Country 37770,City,207,Country 37776,City,207,Country 37777,City,207,Country 37780,City,207,Country 37785,City,207,Country 37787,City,207,Country 37788,City,207,Country 37789,City,207,Country 37790,City,207,Country 37798,City,207,Country 37792,City,207,Country 37794,City,207,Country 37795,City,207,Country 37797,City,207,Country 37799,City,207,Country 37800,City,207,Country 37802,City,207,Country 37805,City,207,Country 37807,City,207,Country 37808,City,207,Country 37811,City,207,Country 37813,City,207,Country 37814,City,207,Country 37818,City,207,Country 37825,City,207,Country 37836,City,207,Country 37838,City,207,Country 37844,City,207,Country 37847,City,207,Country 37849,City,207,Country 37851,City,207,Country 37852,City,207,Country 37853,City,207,Country 37854,City,207,Country 37855,City,207,Country 37856,City,207,Country 37864,City,207,Country 37868,City,207,Country 37870,City,207,Country 37872,City,207,Country 37874,City,207,Country 37877,City,207,Country 37878,City,207,Country 37884,City,207,Country 37891,City,207,Country 37889,City,207,Country 37895,City,207,Country 37896,City,207,Country 37898,City,207,Country 37901,City,207,Country 37903,City,207,Country 37904,City,207,Country 37906,City,207,Country 37908,City,207,Country 37909,City,207,Country 37910,City,207,Country 37911,City,207,Country 37912,City,207,Country 37913,City,207,Country 37915,City,207,Country 37916,City,207,Country 37917,City,207,Country 37918,City,207,Country 37919,City,207,Country 37923,City,207,Country 37924,City,207,Country 37925,City,207,Country 37928,City,207,Country 37932,City,207,Country 37933,City,207,Country 37935,City,207,Country 37936,City,207,Country 37937,City,207,Country 37943,City,207,Country 37944,City,207,Country 37954,City,207,Country 37956,City,207,Country 37957,City,207,Country 37958,City,207,Country 37964,City,207,Country 37965,City,207,Country 38007,City,207,Country 38023,City,207,Country 38015,City,207,Country 38017,City,207,Country 38020,City,207,Country 38019,City,207,Country 38021,City,207,Country 38022,City,207,Country 38024,City,207,Country 38027,City,207,Country 38029,City,207,Country 38030,City,207,Country 38031,City,207,Country 38032,City,207,Country 38033,City,207,Country 38036,City,207,Country 38037,City,207,Country 38038,City,207,Country 38039,City,207,Country 38040,City,207,Country 38041,City,207,Country 38043,City,207,Country 38044,City,207,Country 38046,City,207,Country 38047,City,207,Country 38048,City,207,Country 38069,City,207,Country 38051,City,207,Country 38052,City,207,Country 38053,City,207,Country 38054,City,207,Country 38057,City,207,Country 38059,City,207,Country 38062,City,207,Country 38065,City,207,Country 38066,City,207,Country 38067,City,207,Country 38070,City,207,Country 38071,City,207,Country 38074,City,207,Country 38075,City,207,Country 38080,City,207,Country 38077,City,207,Country 38078,City,207,Country 38087,City,207,Country 38085,City,207,Country 38086,City,207,Country 38089,City,207,Country 38125,City,207,Country 38090,City,207,Country 38091,City,207,Country 38092,City,207,Country 38093,City,207,Country 38096,City,207,Country 38097,City,207,Country 38099,City,207,Country 38101,City,207,Country 38104,City,207,Country 38106,City,207,Country 38107,City,207,Country 38108,City,207,Country 38109,City,207,Country 38110,City,207,Country 38111,City,207,Country 38114,City,207,Country 38117,City,207,Country 38116,City,207,Country 38126,City,207,Country 38119,City,207,Country 38120,City,207,Country 38122,City,207,Country 38123,City,207,Country 38147,City,207,Country 38129,City,207,Country 38135,City,207,Country 38137,City,207,Country 38138,City,207,Country 38139,City,207,Country 38141,City,207,Country 38146,City,207,Country 38145,City,207,Country 38148,City,207,Country 38150,City,207,Country 38151,City,207,Country 38152,City,207,Country 38156,City,207,Country 38158,City,207,Country 38159,City,207,Country 38160,City,207,Country 38161,City,207,Country 38162,City,207,Country 38164,City,207,Country 38165,City,207,Country 38166,City,207,Country 38380,City,207,Country 38226,City,207,Country 38167,City,207,Country 38168,City,207,Country 38172,City,207,Country 38174,City,207,Country 38177,City,207,Country 38178,City,207,Country 38181,City,207,Country 38185,City,207,Country 38182,City,207,Country 38183,City,207,Country 38197,City,207,Country 38206,City,207,Country 38207,City,207,Country 38209,City,207,Country 38190,City,207,Country 38193,City,207,Country 38211,City,207,Country 38214,City,207,Country 38215,City,207,Country 38216,City,207,Country 38220,City,207,Country 38225,City,207,Country 38228,City,207,Country 38230,City,207,Country 38231,City,207,Country 38232,City,207,Country 38233,City,207,Country 38234,City,207,Country 38236,City,207,Country 38237,City,207,Country 38239,City,207,Country 38240,City,207,Country 38248,City,207,Country 38242,City,207,Country 38245,City,207,Country 38250,City,207,Country 38252,City,207,Country 38253,City,207,Country 38261,City,207,Country 38263,City,207,Country 38265,City,207,Country 38266,City,207,Country 38267,City,207,Country 38381,City,207,Country 38269,City,207,Country 38275,City,207,Country 38276,City,207,Country 38280,City,207,Country 38281,City,207,Country 38279,City,207,Country 38284,City,207,Country 38285,City,207,Country 38287,City,207,Country 38288,City,207,Country 38289,City,207,Country 38290,City,207,Country 38292,City,207,Country 38293,City,207,Country 38305,City,207,Country 38310,City,207,Country 38311,City,207,Country 38312,City,207,Country 38313,City,207,Country 38314,City,207,Country 38315,City,207,Country 38317,City,207,Country 38318,City,207,Country 38322,City,207,Country 38323,City,207,Country 38324,City,207,Country 38326,City,207,Country 38327,City,207,Country 38328,City,207,Country 38331,City,207,Country 38333,City,207,Country 38335,City,207,Country 38336,City,207,Country 38337,City,207,Country 38339,City,207,Country 38341,City,207,Country 38342,City,207,Country 38345,City,207,Country 38346,City,207,Country 38347,City,207,Country 38349,City,207,Country 38352,City,207,Country 38353,City,207,Country 38354,City,207,Country 38355,City,207,Country 38359,City,207,Country 38361,City,207,Country 38362,City,207,Country 38363,City,207,Country 38364,City,207,Country 38365,City,207,Country 38366,City,207,Country 38370,City,207,Country 38371,City,207,Country 38372,City,207,Country 38376,City,207,Country 38374,City,207,Country 38375,City,207,Country 38378,City,207,Country 38379,City,207,Country 38383,City,207,Country 38384,City,207,Country 38385,City,207,Country 38386,City,207,Country 38409,City,207,Country 38396,City,207,Country 38401,City,207,Country 38402,City,207,Country 38407,City,207,Country 38408,City,207,Country 38412,City,207,Country 38419,City,207,Country 38426,City,207,Country 38427,City,207,Country 38432,City,207,Country 38434,City,207,Country 38448,City,207,Country 38462,City,207,Country 38463,City,207,Country 38465,City,207,Country 38468,City,207,Country 38469,City,207,Country 38471,City,207,Country 38473,City,207,Country 38486,City,207,Country 38487,City,207,Country 38489,City,207,Country 38496,City,207,Country 38500,City,207,Country 38511,City,207,Country 31985,City,207,Country 31995,City,207,Country 32072,City,207,Country 32097,City,207,Country 32119,City,207,Country 32144,City,207,Country 32219,City,207,Country 32327,City,207,Country 32351,City,207,Country 32368,City,207,Country 32412,City,207,Country 32462,City,207,Country 32464,City,207,Country 32513,City,207,Country 32636,City,207,Country 32695,City,207,Country 32725,City,207,Country 32750,City,207,Country 32875,City,207,Country 32917,City,207,Country 32918,City,207,Country 32969,City,207,Country 32975,City,207,Country 32994,City,207,Country 33013,City,207,Country 33038,City,207,Country 33068,City,207,Country 33115,City,207,Country 33170,City,207,Country 33201,City,207,Country 33232,City,207,Country 33274,City,207,Country 33272,City,207,Country 33354,City,207,Country 33570,City,207,Country 33579,City,207,Country 33596,City,207,Country 33615,City,207,Country 33616,City,207,Country 33618,City,207,Country 33640,City,207,Country 33658,City,207,Country 33695,City,207,Country 33696,City,207,Country 33709,City,207,Country 33733,City,207,Country 33736,City,207,Country 33744,City,207,Country 33745,City,207,Country 33742,City,207,Country 33746,City,207,Country 33796,City,207,Country 33817,City,207,Country 33845,City,207,Country 33908,City,207,Country 34029,City,207,Country 33997,City,207,Country 34002,City,207,Country 34003,City,207,Country 34024,City,207,Country 34147,City,207,Country 34249,City,207,Country 34259,City,207,Country 34277,City,207,Country 34283,City,207,Country 34302,City,207,Country 34361,City,207,Country 34373,City,207,Country 34415,City,207,Country 34430,City,207,Country 34459,City,207,Country 34516,City,207,Country 34524,City,207,Country 34528,City,207,Country 34652,City,207,Country 34654,City,207,Country 34667,City,207,Country 34674,City,207,Country 34701,City,207,Country 34860,City,207,Country 34985,City,207,Country 34991,City,207,Country 34992,City,207,Country 35002,City,207,Country 35021,City,207,Country 35099,City,207,Country 35127,City,207,Country 35134,City,207,Country 35145,City,207,Country 35186,City,207,Country 35214,City,207,Country 35267,City,207,Country 35366,City,207,Country 35384,City,207,Country 35442,City,207,Country 35501,City,207,Country 35555,City,207,Country 35602,City,207,Country 35612,City,207,Country 35616,City,207,Country 35617,City,207,Country 35708,City,207,Country 35731,City,207,Country 35742,City,207,Country 35743,City,207,Country 35744,City,207,Country 35758,City,207,Country 35783,City,207,Country 35835,City,207,Country 36053,City,207,Country 36070,City,207,Country 36082,City,207,Country 36097,City,207,Country 36122,City,207,Country 36139,City,207,Country 36160,City,207,Country 36192,City,207,Country 36207,City,207,Country 36215,City,207,Country 36331,City,207,Country 36338,City,207,Country 36406,City,207,Country 36379,City,207,Country 36437,City,207,Country 36500,City,207,Country 36547,City,207,Country 36563,City,207,Country 36587,City,207,Country 36613,City,207,Country 36639,City,207,Country 36651,City,207,Country 36654,City,207,Country 36686,City,207,Country 36745,City,207,Country 36799,City,207,Country 36812,City,207,Country 36836,City,207,Country 36858,City,207,Country 36873,City,207,Country 36870,City,207,Country 36922,City,207,Country 37079,City,207,Country 37146,City,207,Country 37225,City,207,Country 37240,City,207,Country 37354,City,207,Country 37417,City,207,Country 37422,City,207,Country 37431,City,207,Country 37538,City,207,Country 37540,City,207,Country 37539,City,207,Country 37543,City,207,Country 37551,City,207,Country 37557,City,207,Country 37577,City,207,Country 37629,City,207,Country 37705,City,207,Country 37726,City,207,Country 37735,City,207,Country 37765,City,207,Country 37767,City,207,Country 37772,City,207,Country 37774,City,207,Country 37781,City,207,Country 37786,City,207,Country 37804,City,207,Country 37810,City,207,Country 37882,City,207,Country 37931,City,207,Country 37946,City,207,Country 37963,City,207,Country 38009,City,207,Country 38012,City,207,Country 38034,City,207,Country 38105,City,207,Country 38131,City,207,Country 38133,City,207,Country 38134,City,207,Country 38196,City,207,Country 38187,City,207,Country 38219,City,207,Country 38257,City,207,Country 38273,City,207,Country 38343,City,207,Country 38357,City,207,Country 38360,City,207,Country 38482,City,207,Country 35391,City,207,Country 31903,City,207,Country 31905,City,207,Country 38574,City,207,Country 32057,City,207,Country 32084,City,207,Country 32182,City,207,Country 32229,City,207,Country 32236,City,207,Country 32430,City,207,Country 32546,City,207,Country 32677,City,207,Country 32800,City,207,Country 32905,City,207,Country 33018,City,207,Country 33131,City,207,Country 33211,City,207,Country 33277,City,207,Country 33336,City,207,Country 33560,City,207,Country 33610,City,207,Country 33659,City,207,Country 33706,City,207,Country 34009,City,207,Country 34104,City,207,Country 34231,City,207,Country 34308,City,207,Country 34828,City,207,Country 34893,City,207,Country 34931,City,207,Country 34932,City,207,Country 34993,City,207,Country 35046,City,207,Country 35092,City,207,Country 35113,City,207,Country 35115,City,207,Country 35116,City,207,Country 35121,City,207,Country 35125,City,207,Country 35356,City,207,Country 35478,City,207,Country 35618,City,207,Country 35661,City,207,Country 35671,City,207,Country 35871,City,207,Country 36245,City,207,Country 36445,City,207,Country 36621,City,207,Country 36840,City,207,Country 36910,City,207,Country 36945,City,207,Country 37026,City,207,Country 37116,City,207,Country 37145,City,207,Country 37507,City,207,Country 37606,City,207,Country 37678,City,207,Country 38431,City,207,Country 31920,City,207,Country 31933,City,207,Country 31962,City,207,Country 32256,City,207,Country 32341,City,207,Country 32370,City,207,Country 32374,City,207,Country 32597,City,207,Country 32397,City,207,Country 32405,City,207,Country 32413,City,207,Country 32416,City,207,Country 32424,City,207,Country 32443,City,207,Country 32457,City,207,Country 32473,City,207,Country 32477,City,207,Country 32486,City,207,Country 32517,City,207,Country 32516,City,207,Country 32519,City,207,Country 32521,City,207,Country 32551,City,207,Country 32572,City,207,Country 32580,City,207,Country 32590,City,207,Country 32617,City,207,Country 32640,City,207,Country 32685,City,207,Country 32663,City,207,Country 32664,City,207,Country 32731,City,207,Country 32735,City,207,Country 32830,City,207,Country 32836,City,207,Country 32852,City,207,Country 32864,City,207,Country 32865,City,207,Country 32880,City,207,Country 33046,City,207,Country 33031,City,207,Country 33101,City,207,Country 33118,City,207,Country 33263,City,207,Country 33895,City,207,Country 33292,City,207,Country 33386,City,207,Country 33899,City,207,Country 33399,City,207,Country 33467,City,207,Country 33679,City,207,Country 33682,City,207,Country 33684,City,207,Country 33703,City,207,Country 33785,City,207,Country 33929,City,207,Country 33933,City,207,Country 33943,City,207,Country 33969,City,207,Country 33970,City,207,Country 34036,City,207,Country 34039,City,207,Country 34065,City,207,Country 34068,City,207,Country 34099,City,207,Country 34133,City,207,Country 34139,City,207,Country 34151,City,207,Country 34152,City,207,Country 34158,City,207,Country 34193,City,207,Country 34214,City,207,Country 34365,City,207,Country 34366,City,207,Country 34374,City,207,Country 34394,City,207,Country 34413,City,207,Country 34429,City,207,Country 34422,City,207,Country 34452,City,207,Country 34477,City,207,Country 34491,City,207,Country 34550,City,207,Country 34682,City,207,Country 34734,City,207,Country 34741,City,207,Country 34758,City,207,Country 34774,City,207,Country 34775,City,207,Country 34776,City,207,Country 34809,City,207,Country 34972,City,207,Country 34978,City,207,Country 34979,City,207,Country 35008,City,207,Country 35010,City,207,Country 35022,City,207,Country 35023,City,207,Country 35031,City,207,Country 35033,City,207,Country 35044,City,207,Country 35061,City,207,Country 35060,City,207,Country 35098,City,207,Country 35117,City,207,Country 35162,City,207,Country 35362,City,207,Country 35280,City,207,Country 35286,City,207,Country 35705,City,207,Country 35399,City,207,Country 35401,City,207,Country 35413,City,207,Country 35428,City,207,Country 35443,City,207,Country 35448,City,207,Country 35520,City,207,Country 35626,City,207,Country 35670,City,207,Country 35677,City,207,Country 35679,City,207,Country 35687,City,207,Country 35784,City,207,Country 35793,City,207,Country 35852,City,207,Country 35858,City,207,Country 35873,City,207,Country 35877,City,207,Country 35882,City,207,Country 35920,City,207,Country 35913,City,207,Country 35933,City,207,Country 35967,City,207,Country 35954,City,207,Country 35956,City,207,Country 35976,City,207,Country 36045,City,207,Country 36142,City,207,Country 36156,City,207,Country 36183,City,207,Country 36223,City,207,Country 36355,City,207,Country 36381,City,207,Country 36439,City,207,Country 36459,City,207,Country 36610,City,207,Country 36758,City,207,Country 36764,City,207,Country 36795,City,207,Country 36869,City,207,Country 36946,City,207,Country 36950,City,207,Country 37103,City,207,Country 37169,City,207,Country 37174,City,207,Country 37193,City,207,Country 37232,City,207,Country 37303,City,207,Country 37348,City,207,Country 37428,City,207,Country 37579,City,207,Country 37648,City,207,Country 37653,City,207,Country 37677,City,207,Country 37689,City,207,Country 37701,City,207,Country 37709,City,207,Country 37879,City,207,Country 38055,City,207,Country 38143,City,207,Country 38334,City,207,Country 38436,City,207,Country 38437,City,207,Country 38502,City,207,Country 38506,City,207,Country 38513,City,207,Country 31932,City,207,Country 31935,City,207,Country 31941,City,207,Country 31943,City,207,Country 31947,City,207,Country 31949,City,207,Country 31968,City,207,Country 31979,City,207,Country 32001,City,207,Country 32014,City,207,Country 32016,City,207,Country 32019,City,207,Country 32020,City,207,Country 32021,City,207,Country 32032,City,207,Country 32037,City,207,Country 32047,City,207,Country 32051,City,207,Country 32052,City,207,Country 32058,City,207,Country 32068,City,207,Country 32067,City,207,Country 32133,City,207,Country 32134,City,207,Country 32101,City,207,Country 32099,City,207,Country 32123,City,207,Country 32129,City,207,Country 32131,City,207,Country 32140,City,207,Country 32189,City,207,Country 32190,City,207,Country 32194,City,207,Country 32195,City,207,Country 32199,City,207,Country 32200,City,207,Country 32202,City,207,Country 32203,City,207,Country 32217,City,207,Country 32220,City,207,Country 32221,City,207,Country 32222,City,207,Country 32226,City,207,Country 32230,City,207,Country 32244,City,207,Country 32273,City,207,Country 32278,City,207,Country 32282,City,207,Country 32291,City,207,Country 32300,City,207,Country 32306,City,207,Country 32310,City,207,Country 32313,City,207,Country 32332,City,207,Country 32333,City,207,Country 32340,City,207,Country 32342,City,207,Country 32344,City,207,Country 32371,City,207,Country 32385,City,207,Country 32391,City,207,Country 32420,City,207,Country 32456,City,207,Country 32469,City,207,Country 32520,City,207,Country 32537,City,207,Country 32556,City,207,Country 32579,City,207,Country 32576,City,207,Country 32593,City,207,Country 32626,City,207,Country 32667,City,207,Country 32683,City,207,Country 32684,City,207,Country 33056,City,207,Country 32744,City,207,Country 32747,City,207,Country 32759,City,207,Country 32761,City,207,Country 32760,City,207,Country 32776,City,207,Country 32778,City,207,Country 32783,City,207,Country 32785,City,207,Country 32786,City,207,Country 32787,City,207,Country 32788,City,207,Country 32789,City,207,Country 32790,City,207,Country 32791,City,207,Country 32792,City,207,Country 32793,City,207,Country 32794,City,207,Country 32795,City,207,Country 32797,City,207,Country 32796,City,207,Country 32798,City,207,Country 32799,City,207,Country 32802,City,207,Country 32801,City,207,Country 32804,City,207,Country 32805,City,207,Country 32806,City,207,Country 32807,City,207,Country 32808,City,207,Country 32809,City,207,Country 32810,City,207,Country 32811,City,207,Country 32812,City,207,Country 32813,City,207,Country 32814,City,207,Country 32815,City,207,Country 32816,City,207,Country 32817,City,207,Country 32818,City,207,Country 32819,City,207,Country 32820,City,207,Country 32821,City,207,Country 32822,City,207,Country 32825,City,207,Country 33062,City,207,Country 32882,City,207,Country 32885,City,207,Country 32886,City,207,Country 32892,City,207,Country 32923,City,207,Country 32937,City,207,Country 32941,City,207,Country 32962,City,207,Country 33009,City,207,Country 33010,City,207,Country 33045,City,207,Country 33030,City,207,Country 33032,City,207,Country 33035,City,207,Country 33067,City,207,Country 33889,City,207,Country 33145,City,207,Country 33146,City,207,Country 33151,City,207,Country 33209,City,207,Country 33224,City,207,Country 33233,City,207,Country 33235,City,207,Country 33291,City,207,Country 33891,City,207,Country 33308,City,207,Country 33335,City,207,Country 33355,City,207,Country 33356,City,207,Country 33391,City,207,Country 33396,City,207,Country 33410,City,207,Country 33411,City,207,Country 33428,City,207,Country 33430,City,207,Country 33438,City,207,Country 33437,City,207,Country 33432,City,207,Country 33441,City,207,Country 33465,City,207,Country 33513,City,207,Country 33514,City,207,Country 33517,City,207,Country 33516,City,207,Country 33519,City,207,Country 33582,City,207,Country 33601,City,207,Country 33623,City,207,Country 33624,City,207,Country 33626,City,207,Country 33628,City,207,Country 33629,City,207,Country 33632,City,207,Country 33644,City,207,Country 33654,City,207,Country 33650,City,207,Country 33678,City,207,Country 33681,City,207,Country 33716,City,207,Country 33719,City,207,Country 33757,City,207,Country 33774,City,207,Country 33809,City,207,Country 33811,City,207,Country 33822,City,207,Country 33824,City,207,Country 33829,City,207,Country 33835,City,207,Country 33875,City,207,Country 33880,City,207,Country 33881,City,207,Country 33910,City,207,Country 33915,City,207,Country 33916,City,207,Country 33926,City,207,Country 33936,City,207,Country 33937,City,207,Country 33948,City,207,Country 33984,City,207,Country 33999,City,207,Country 34006,City,207,Country 34030,City,207,Country 34033,City,207,Country 38533,City,207,Country 34042,City,207,Country 34058,City,207,Country 34100,City,207,Country 34103,City,207,Country 34145,City,207,Country 34149,City,207,Country 34156,City,207,Country 34160,City,207,Country 34161,City,207,Country 34168,City,207,Country 34169,City,207,Country 34185,City,207,Country 34189,City,207,Country 34198,City,207,Country 34213,City,207,Country 34220,City,207,Country 34222,City,207,Country 34228,City,207,Country 34305,City,207,Country 34334,City,207,Country 34339,City,207,Country 34370,City,207,Country 34403,City,207,Country 34435,City,207,Country 34439,City,207,Country 34445,City,207,Country 34453,City,207,Country 34458,City,207,Country 34464,City,207,Country 34474,City,207,Country 34475,City,207,Country 34487,City,207,Country 34501,City,207,Country 34505,City,207,Country 34529,City,207,Country 34530,City,207,Country 34535,City,207,Country 34579,City,207,Country 34615,City,207,Country 34617,City,207,Country 34634,City,207,Country 34635,City,207,Country 34727,City,207,Country 34788,City,207,Country 34791,City,207,Country 34792,City,207,Country 34797,City,207,Country 34808,City,207,Country 34837,City,207,Country 34815,City,207,Country 38534,City,207,Country 34840,City,207,Country 34841,City,207,Country 38535,City,207,Country 34842,City,207,Country 34845,City,207,Country 34847,City,207,Country 34871,City,207,Country 38554,City,207,Country 34906,City,207,Country 34907,City,207,Country 34904,City,207,Country 34923,City,207,Country 34935,City,207,Country 35067,City,207,Country 35071,City,207,Country 35091,City,207,Country 35082,City,207,Country 35083,City,207,Country 35086,City,207,Country 35090,City,207,Country 35114,City,207,Country 35128,City,207,Country 35138,City,207,Country 35151,City,207,Country 35155,City,207,Country 35180,City,207,Country 35251,City,207,Country 35261,City,207,Country 35292,City,207,Country 35317,City,207,Country 35326,City,207,Country 35341,City,207,Country 35390,City,207,Country 35432,City,207,Country 35433,City,207,Country 35446,City,207,Country 35456,City,207,Country 35467,City,207,Country 35499,City,207,Country 35502,City,207,Country 35516,City,207,Country 35592,City,207,Country 35527,City,207,Country 35529,City,207,Country 35587,City,207,Country 35536,City,207,Country 35570,City,207,Country 35574,City,207,Country 35584,City,207,Country 35596,City,207,Country 35624,City,207,Country 35680,City,207,Country 35683,City,207,Country 35688,City,207,Country 35691,City,207,Country 35843,City,207,Country 35738,City,207,Country 35775,City,207,Country 35828,City,207,Country 35837,City,207,Country 35884,City,207,Country 35908,City,207,Country 35909,City,207,Country 35922,City,207,Country 35923,City,207,Country 35925,City,207,Country 35926,City,207,Country 35932,City,207,Country 35938,City,207,Country 35950,City,207,Country 35958,City,207,Country 35980,City,207,Country 35998,City,207,Country 36016,City,207,Country 36028,City,207,Country 36032,City,207,Country 36062,City,207,Country 36077,City,207,Country 36084,City,207,Country 36090,City,207,Country 36095,City,207,Country 36115,City,207,Country 36128,City,207,Country 36158,City,207,Country 36177,City,207,Country 36178,City,207,Country 36187,City,207,Country 36189,City,207,Country 36191,City,207,Country 36200,City,207,Country 36213,City,207,Country 36234,City,207,Country 36261,City,207,Country 36264,City,207,Country 36288,City,207,Country 36305,City,207,Country 36362,City,207,Country 36396,City,207,Country 36400,City,207,Country 36478,City,207,Country 36412,City,207,Country 36422,City,207,Country 36461,City,207,Country 36488,City,207,Country 36487,City,207,Country 36490,City,207,Country 36491,City,207,Country 36497,City,207,Country 36539,City,207,Country 36540,City,207,Country 36541,City,207,Country 36712,City,207,Country 36551,City,207,Country 36552,City,207,Country 36562,City,207,Country 36571,City,207,Country 36581,City,207,Country 36611,City,207,Country 36618,City,207,Country 36631,City,207,Country 36660,City,207,Country 36665,City,207,Country 36678,City,207,Country 36681,City,207,Country 36720,City,207,Country 36702,City,207,Country 36726,City,207,Country 36737,City,207,Country 36739,City,207,Country 36763,City,207,Country 36843,City,207,Country 36849,City,207,Country 36845,City,207,Country 36883,City,207,Country 36925,City,207,Country 36942,City,207,Country 36978,City,207,Country 37063,City,207,Country 37098,City,207,Country 37166,City,207,Country 37181,City,207,Country 37187,City,207,Country 37190,City,207,Country 37191,City,207,Country 37203,City,207,Country 37204,City,207,Country 37207,City,207,Country 37210,City,207,Country 37213,City,207,Country 37218,City,207,Country 37247,City,207,Country 37249,City,207,Country 37255,City,207,Country 37259,City,207,Country 37260,City,207,Country 37283,City,207,Country 37293,City,207,Country 37309,City,207,Country 37310,City,207,Country 37329,City,207,Country 37332,City,207,Country 37361,City,207,Country 37386,City,207,Country 37387,City,207,Country 37410,City,207,Country 37418,City,207,Country 37420,City,207,Country 37430,City,207,Country 37440,City,207,Country 37441,City,207,Country 37444,City,207,Country 37601,City,207,Country 37470,City,207,Country 37485,City,207,Country 37497,City,207,Country 37510,City,207,Country 37514,City,207,Country 37547,City,207,Country 37564,City,207,Country 37584,City,207,Country 37609,City,207,Country 37615,City,207,Country 37660,City,207,Country 37659,City,207,Country 37710,City,207,Country 37816,City,207,Country 37833,City,207,Country 37834,City,207,Country 37835,City,207,Country 37837,City,207,Country 37866,City,207,Country 37860,City,207,Country 37938,City,207,Country 37952,City,207,Country 37972,City,207,Country 37991,City,207,Country 38049,City,207,Country 38064,City,207,Country 38084,City,207,Country 38088,City,207,Country 38118,City,207,Country 38128,City,207,Country 38179,City,207,Country 38195,City,207,Country 38251,City,207,Country 38283,City,207,Country 38358,City,207,Country 38369,City,207,Country 38373,City,207,Country 38390,City,207,Country 38391,City,207,Country 38400,City,207,Country 38405,City,207,Country 38424,City,207,Country 38420,City,207,Country 38421,City,207,Country 38423,City,207,Country 38443,City,207,Country 38475,City,207,Country 38498,City,207,Country 38503,City,207,Country 103094,City,213,Country 103321,City,213,Country 103270,City,213,Country 103359,City,213,Country 103360,City,213,Country 103371,City,213,Country 103377,City,213,Country 103378,City,213,Country 103381,City,213,Country 103382,City,213,Country 103539,City,213,Country 103570,City,213,Country 103605,City,213,Country 103612,City,213,Country 103613,City,213,Country 103672,City,213,Country 103655,City,213,Country 103656,City,213,Country 103830,City,213,Country 103831,City,213,Country 103779,City,213,Country 103801,City,213,Country 102985,City,213,Country 103989,City,213,Country 103990,City,213,Country 103022,City,213,Country 103023,City,213,Country 103046,City,213,Country 103075,City,213,Country 103076,City,213,Country 103093,City,213,Country 103122,City,213,Country 103142,City,213,Country 103161,City,213,Country 103162,City,213,Country 103197,City,213,Country 103198,City,213,Country 103226,City,213,Country 103225,City,213,Country 103274,City,213,Country 103275,City,213,Country 103297,City,213,Country 103347,City,213,Country 103364,City,213,Country 103419,City,213,Country 103504,City,213,Country 103456,City,213,Country 103457,City,213,Country 103491,City,213,Country 103492,City,213,Country 103518,City,213,Country 103519,City,213,Country 103542,City,213,Country 103545,City,213,Country 103546,City,213,Country 103595,City,213,Country 103617,City,213,Country 103618,City,213,Country 103619,City,213,Country 103665,City,213,Country 103666,City,213,Country 103654,City,213,Country 103807,City,213,Country 103808,City,213,Country 103688,City,213,Country 103728,City,213,Country 103729,City,213,Country 103730,City,213,Country 103802,City,213,Country 103920,City,213,Country 103921,City,213,Country 103941,City,213,Country 102990,City,213,Country 103009,City,213,Country 104014,City,213,Country 103033,City,213,Country 103038,City,213,Country 103067,City,213,Country 103068,City,213,Country 103118,City,213,Country 103129,City,213,Country 103193,City,213,Country 103177,City,213,Country 103240,City,213,Country 103241,City,213,Country 103214,City,213,Country 103276,City,213,Country 103293,City,213,Country 103294,City,213,Country 103305,City,213,Country 103306,City,213,Country 103344,City,213,Country 103361,City,213,Country 103365,City,213,Country 103389,City,213,Country 103485,City,213,Country 103486,City,213,Country 103488,City,213,Country 103581,City,213,Country 103607,City,213,Country 103608,City,213,Country 103626,City,213,Country 103680,City,213,Country 103681,City,213,Country 103682,City,213,Country 103819,City,213,Country 103820,City,213,Country 103832,City,213,Country 103768,City,213,Country 103912,City,213,Country 103219,City,213,Country 103279,City,213,Country 103398,City,213,Country 103940,City,213,Country 103957,City,213,Country 104005,City,213,Country 104016,City,213,Country 103096,City,213,Country 103157,City,213,Country 103158,City,213,Country 103172,City,213,Country 103182,City,213,Country 103186,City,213,Country 103190,City,213,Country 103207,City,213,Country 103212,City,213,Country 103231,City,213,Country 103258,City,213,Country 103259,City,213,Country 103269,City,213,Country 103271,City,213,Country 103313,City,213,Country 103314,City,213,Country 103405,City,213,Country 103423,City,213,Country 103424,City,213,Country 103447,City,213,Country 103448,City,213,Country 103535,City,213,Country 103538,City,213,Country 103616,City,213,Country 103625,City,213,Country 103806,City,213,Country 103711,City,213,Country 103750,City,213,Country 103868,City,213,Country 103879,City,213,Country 103880,City,213,Country 103883,City,213,Country 103917,City,213,Country 103924,City,213,Country 103925,City,213,Country 103974,City,213,Country 103932,City,213,Country 103933,City,213,Country 102999,City,213,Country 103001,City,213,Country 103002,City,213,Country 103026,City,213,Country 103060,City,213,Country 103071,City,213,Country 103083,City,213,Country 103132,City,213,Country 103136,City,213,Country 103137,City,213,Country 103178,City,213,Country 103181,City,213,Country 103209,City,213,Country 103210,City,213,Country 103217,City,213,Country 103218,City,213,Country 103227,City,213,Country 103249,City,213,Country 103250,City,213,Country 103284,City,213,Country 103285,City,213,Country 103310,City,213,Country 103366,City,213,Country 103367,City,213,Country 103387,City,213,Country 103450,City,213,Country 103514,City,213,Country 103523,City,213,Country 103526,City,213,Country 103550,City,213,Country 103551,City,213,Country 103602,City,213,Country 103603,City,213,Country 103610,City,213,Country 103644,City,213,Country 103662,City,213,Country 103814,City,213,Country 103815,City,213,Country 103704,City,213,Country 103732,City,213,Country 103757,City,213,Country 103835,City,213,Country 103840,City,213,Country 103871,City,213,Country 103872,City,213,Country 103909,City,213,Country 103910,City,213,Country 103968,City,213,Country 103969,City,213,Country 103937,City,213,Country 103938,City,213,Country 103961,City,213,Country 103004,City,213,Country 103035,City,213,Country 103059,City,213,Country 103073,City,213,Country 103074,City,213,Country 103140,City,213,Country 103141,City,213,Country 103194,City,213,Country 103201,City,213,Country 103234,City,213,Country 103331,City,213,Country 103332,City,213,Country 103307,City,213,Country 103308,City,213,Country 103372,City,213,Country 103373,City,213,Country 103413,City,213,Country 103473,City,213,Country 103481,City,213,Country 103559,City,213,Country 103565,City,213,Country 103566,City,213,Country 103568,City,213,Country 103569,City,213,Country 103593,City,213,Country 103594,City,213,Country 103623,City,213,Country 103624,City,213,Country 104056,City,213,Country 103641,City,213,Country 103649,City,213,Country 103727,City,213,Country 103827,City,213,Country 103829,City,213,Country 103762,City,213,Country 103849,City,213,Country 103866,City,213,Country 103867,City,213,Country 103873,City,213,Country 103970,City,213,Country 103971,City,213,Country 103947,City,213,Country 103948,City,213,Country 103956,City,213,Country 103985,City,213,Country 103986,City,213,Country 102995,City,213,Country 102996,City,213,Country 104018,City,213,Country 103082,City,213,Country 103205,City,213,Country 103301,City,213,Country 103346,City,213,Country 103446,City,213,Country 103449,City,213,Country 103458,City,213,Country 103461,City,213,Country 103462,City,213,Country 103478,City,213,Country 103479,City,213,Country 103531,City,213,Country 103532,City,213,Country 103543,City,213,Country 103659,City,213,Country 103660,City,213,Country 103774,City,213,Country 103852,City,213,Country 103853,City,213,Country 103905,City,213,Country 103975,City,213,Country 103976,City,213,Country 103959,City,213,Country 103993,City,213,Country 103994,City,213,Country 103010,City,213,Country 103011,City,213,Country 103015,City,213,Country 103016,City,213,Country 103036,City,213,Country 103039,City,213,Country 103054,City,213,Country 103061,City,213,Country 103062,City,213,Country 103237,City,213,Country 103238,City,213,Country 103202,City,213,Country 103267,City,213,Country 103268,City,213,Country 103299,City,213,Country 103353,City,213,Country 103354,City,213,Country 103369,City,213,Country 103370,City,213,Country 103394,City,213,Country 103395,City,213,Country 103493,City,213,Country 103494,City,213,Country 103513,City,213,Country 103528,City,213,Country 103585,City,213,Country 104052,City,213,Country 104053,City,213,Country 104054,City,213,Country 104055,City,213,Country 103630,City,213,Country 103631,City,213,Country 103637,City,213,Country 103638,City,213,Country 103668,City,213,Country 103652,City,213,Country 103653,City,213,Country 103658,City,213,Country 103812,City,213,Country 103828,City,213,Country 103891,City,213,Country 104017,City,213,Country 103019,City,213,Country 103020,City,213,Country 103115,City,213,Country 103116,City,213,Country 103131,City,213,Country 103163,City,213,Country 103170,City,213,Country 103187,City,213,Country 103204,City,213,Country 103316,City,213,Country 103318,City,213,Country 103319,City,213,Country 103253,City,213,Country 103254,City,213,Country 103302,City,213,Country 103379,City,213,Country 103380,City,213,Country 103409,City,213,Country 103420,City,213,Country 103421,City,213,Country 103453,City,213,Country 103454,City,213,Country 103455,City,213,Country 103469,City,213,Country 103470,City,213,Country 103487,City,213,Country 103577,City,213,Country 103578,City,213,Country 103609,City,213,Country 104034,City,213,Country 104035,City,213,Country 103640,City,213,Country 103723,City,213,Country 103770,City,213,Country 103955,City,213,Country 103999,City,213,Country 104023,City,213,Country 104024,City,213,Country 103032,City,213,Country 103072,City,213,Country 103079,City,213,Country 103080,City,213,Country 103138,City,213,Country 103166,City,213,Country 103167,City,213,Country 103221,City,213,Country 103236,City,213,Country 103281,City,213,Country 103358,City,213,Country 103391,City,213,Country 103392,City,213,Country 103396,City,213,Country 103418,City,213,Country 103474,City,213,Country 103475,City,213,Country 103476,City,213,Country 103477,City,213,Country 103483,City,213,Country 103516,City,213,Country 103522,City,213,Country 103540,City,213,Country 103541,City,213,Country 103548,City,213,Country 103549,City,213,Country 103586,City,213,Country 103587,City,213,Country 104027,City,213,Country 104028,City,213,Country 104044,City,213,Country 103647,City,213,Country 103661,City,213,Country 103718,City,213,Country 103719,City,213,Country 103821,City,213,Country 103822,City,213,Country 103752,City,213,Country 103778,City,213,Country 103803,City,213,Country 103836,City,213,Country 103907,City,213,Country 103908,City,213,Country 103913,City,213,Country 103914,City,213,Country 103944,City,213,Country 103982,City,213,Country 104000,City,213,Country 104002,City,213,Country 102998,City,213,Country 103996,City,213,Country 103997,City,213,Country 103012,City,213,Country 103021,City,213,Country 104021,City,213,Country 104022,City,213,Country 103028,City,213,Country 103104,City,213,Country 103105,City,213,Country 103106,City,213,Country 103041,City,213,Country 103042,City,213,Country 103049,City,213,Country 103050,City,213,Country 103047,City,213,Country 103048,City,213,Country 103058,City,213,Country 103087,City,213,Country 103089,City,213,Country 103090,City,213,Country 103097,City,213,Country 103099,City,213,Country 103109,City,213,Country 103114,City,213,Country 103130,City,213,Country 103152,City,213,Country 103153,City,213,Country 103195,City,213,Country 103171,City,213,Country 103196,City,213,Country 103188,City,213,Country 103203,City,213,Country 103239,City,213,Country 103206,City,213,Country 103211,City,213,Country 103213,City,213,Country 103315,City,213,Country 103260,City,213,Country 103263,City,213,Country 103325,City,213,Country 103326,City,213,Country 103327,City,213,Country 103277,City,213,Country 103287,City,213,Country 103291,City,213,Country 103292,City,213,Country 103295,City,213,Country 103329,City,213,Country 103330,City,213,Country 103334,City,213,Country 103335,City,213,Country 103342,City,213,Country 103343,City,213,Country 103338,City,213,Country 103339,City,213,Country 103312,City,213,Country 103356,City,213,Country 103440,City,213,Country 103437,City,213,Country 103438,City,213,Country 103401,City,213,Country 103399,City,213,Country 103400,City,213,Country 103402,City,213,Country 103443,City,213,Country 103414,City,213,Country 103415,City,213,Country 103433,City,213,Country 103451,City,213,Country 103480,City,213,Country 103482,City,213,Country 103506,City,213,Country 103507,City,213,Country 103489,City,213,Country 103490,City,213,Country 103509,City,213,Country 103495,City,213,Country 103496,City,213,Country 103517,City,213,Country 103527,City,213,Country 103567,City,213,Country 103552,City,213,Country 103604,City,213,Country 103584,City,213,Country 104030,City,213,Country 104032,City,213,Country 104037,City,213,Country 104038,City,213,Country 103621,City,213,Country 103622,City,213,Country 104050,City,213,Country 104051,City,213,Country 103629,City,213,Country 103639,City,213,Country 103635,City,213,Country 103636,City,213,Country 103663,City,213,Country 103664,City,213,Country 103810,City,213,Country 103683,City,213,Country 103685,City,213,Country 103689,City,213,Country 103690,City,213,Country 103692,City,213,Country 103693,City,213,Country 103695,City,213,Country 103721,City,213,Country 103699,City,213,Country 103707,City,213,Country 103714,City,213,Country 103715,City,213,Country 103731,City,213,Country 103826,City,213,Country 103834,City,213,Country 103744,City,213,Country 103745,City,213,Country 103781,City,213,Country 103748,City,213,Country 103777,City,213,Country 103794,City,213,Country 103795,City,213,Country 103797,City,213,Country 103798,City,213,Country 103839,City,213,Country 103856,City,213,Country 103857,City,213,Country 103858,City,213,Country 103859,City,213,Country 103860,City,213,Country 103861,City,213,Country 103874,City,213,Country 103875,City,213,Country 103884,City,213,Country 103886,City,213,Country 103915,City,213,Country 103931,City,213,Country 103934,City,213,Country 103935,City,213,Country 103936,City,213,Country 103943,City,213,Country 103954,City,213,Country 103960,City,213,Country 103983,City,213,Country 103984,City,213,Country 104003,City,213,Country 103998,City,213,Country 103013,City,213,Country 103027,City,213,Country 103150,City,213,Country 103151,City,213,Country 103173,City,213,Country 103174,City,213,Country 103215,City,213,Country 103216,City,213,Country 103317,City,213,Country 103320,City,213,Country 103385,City,213,Country 103386,City,213,Country 103432,City,213,Country 103515,City,213,Country 103525,City,213,Country 103598,City,213,Country 103599,City,213,Country 103614,City,213,Country 103627,City,213,Country 103628,City,213,Country 103709,City,213,Country 103746,City,213,Country 103756,City,213,Country 103771,City,213,Country 103772,City,213,Country 103793,City,213,Country 103864,City,213,Country 103877,City,213,Country 103878,City,213,Country 103911,City,213,Country 103916,City,213,Country 103951,City,213,Country 103952,City,213,Country 102986,City,213,Country 104004,City,213,Country 102988,City,213,Country 103987,City,213,Country 103988,City,213,Country 103014,City,213,Country 104013,City,213,Country 103037,City,213,Country 103066,City,213,Country 103070,City,213,Country 103078,City,213,Country 103085,City,213,Country 103086,City,213,Country 103088,City,213,Country 103091,City,213,Country 103092,City,213,Country 103108,City,213,Country 103113,City,213,Country 103123,City,213,Country 103121,City,213,Country 103133,City,213,Country 103134,City,213,Country 103143,City,213,Country 103147,City,213,Country 103168,City,213,Country 103169,City,213,Country 103199,City,213,Country 103235,City,213,Country 103257,City,213,Country 103264,City,213,Country 103265,City,213,Country 103266,City,213,Country 103278,City,213,Country 103336,City,213,Country 103303,City,213,Country 103304,City,213,Country 103351,City,213,Country 103362,City,213,Country 103363,City,213,Country 103357,City,213,Country 103397,City,213,Country 103410,City,213,Country 103422,City,213,Country 103427,City,213,Country 103426,City,213,Country 103505,City,213,Country 103463,City,213,Country 103471,City,213,Country 103558,City,213,Country 103561,City,213,Country 103571,City,213,Country 103572,City,213,Country 103573,City,213,Country 103588,City,213,Country 103589,City,213,Country 103596,City,213,Country 103597,City,213,Country 103600,City,213,Country 103601,City,213,Country 104042,City,213,Country 104047,City,213,Country 104045,City,213,Country 103634,City,213,Country 103669,City,213,Country 103645,City,213,Country 103646,City,213,Country 103648,City,213,Country 103673,City,213,Country 103657,City,213,Country 103677,City,213,Country 103678,City,213,Country 103684,City,213,Country 103686,City,213,Country 103687,City,213,Country 103717,City,213,Country 103823,City,213,Country 103824,City,213,Country 103825,City,213,Country 103737,City,213,Country 103738,City,213,Country 103739,City,213,Country 103740,City,213,Country 103747,City,213,Country 103749,City,213,Country 103758,City,213,Country 103759,City,213,Country 103773,City,213,Country 103783,City,213,Country 103784,City,213,Country 103887,City,213,Country 103841,City,213,Country 103881,City,213,Country 103882,City,213,Country 103885,City,213,Country 103900,City,213,Country 103901,City,213,Country 103902,City,213,Country 103918,City,213,Country 103919,City,213,Country 103978,City,213,Country 103967,City,213,Country 103981,City,213,Country 103927,City,213,Country 103929,City,213,Country 103930,City,213,Country 102993,City,213,Country 102994,City,213,Country 103991,City,213,Country 103992,City,213,Country 103005,City,213,Country 103102,City,213,Country 103103,City,213,Country 103053,City,213,Country 103145,City,213,Country 103146,City,213,Country 103200,City,213,Country 103208,City,213,Country 103222,City,213,Country 103328,City,213,Country 103272,City,213,Country 103273,City,213,Country 103350,City,213,Country 103374,City,213,Country 103403,City,213,Country 103404,City,213,Country 103511,City,213,Country 103524,City,213,Country 103547,City,213,Country 104033,City,213,Country 104036,City,213,Country 104041,City,213,Country 104043,City,213,Country 104046,City,213,Country 104048,City,213,Country 104049,City,213,Country 103813,City,213,Country 103716,City,213,Country 103817,City,213,Country 103769,City,213,Country 103889,City,213,Country 103846,City,213,Country 103847,City,213,Country 103903,City,213,Country 103904,City,213,Country 103928,City,213,Country 104006,City,213,Country 104011,City,213,Country 104012,City,213,Country 103017,City,213,Country 103018,City,213,Country 103057,City,213,Country 103107,City,213,Country 103117,City,213,Country 103128,City,213,Country 103135,City,213,Country 103164,City,213,Country 103165,City,213,Country 103179,City,213,Country 103180,City,213,Country 103223,City,213,Country 103224,City,213,Country 103251,City,213,Country 103252,City,213,Country 103262,City,213,Country 103383,City,213,Country 103384,City,213,Country 103388,City,213,Country 103390,City,213,Country 103416,City,213,Country 103417,City,213,Country 103544,City,213,Country 103555,City,213,Country 103556,City,213,Country 103670,City,213,Country 103804,City,213,Country 103805,City,213,Country 103722,City,213,Country 103698,City,213,Country 103708,City,213,Country 103726,City,213,Country 103763,City,213,Country 103764,City,213,Country 103788,City,213,Country 103789,City,213,Country 103890,City,213,Country 103862,City,213,Country 103863,City,213,Country 103977,City,213,Country 104019,City,213,Country 104020,City,213,Country 103025,City,213,Country 103044,City,213,Country 103045,City,213,Country 103063,City,213,Country 103098,City,213,Country 103100,City,213,Country 103101,City,213,Country 103125,City,213,Country 103126,City,213,Country 103149,City,213,Country 103176,City,213,Country 103296,City,213,Country 103340,City,213,Country 103348,City,213,Country 103439,City,213,Country 103503,City,213,Country 103497,City,213,Country 103498,City,213,Country 103520,City,213,Country 103521,City,213,Country 103582,City,213,Country 103583,City,213,Country 103590,City,213,Country 103591,City,213,Country 103606,City,213,Country 103671,City,213,Country 103650,City,213,Country 103651,City,213,Country 103811,City,213,Country 103701,City,213,Country 103702,City,213,Country 103700,City,213,Country 103818,City,213,Country 103741,City,213,Country 103742,City,213,Country 103765,City,213,Country 103766,City,213,Country 103767,City,213,Country 103888,City,213,Country 103898,City,213,Country 103899,City,213,Country 103906,City,213,Country 103964,City,213,Country 103965,City,213,Country 103966,City,213,Country 103942,City,213,Country 103945,City,213,Country 103946,City,213,Country 103949,City,213,Country 103950,City,213,Country 104009,City,213,Country 104010,City,213,Country 104015,City,213,Country 103034,City,213,Country 103051,City,213,Country 103069,City,213,Country 103084,City,213,Country 103185,City,213,Country 103322,City,213,Country 103323,City,213,Country 103311,City,213,Country 103352,City,213,Country 103445,City,213,Country 103411,City,213,Country 103412,City,213,Country 103434,City,213,Country 103502,City,213,Country 103534,City,213,Country 103574,City,213,Country 103575,City,213,Country 104039,City,213,Country 104040,City,213,Country 103710,City,213,Country 103735,City,213,Country 103736,City,213,Country 103833,City,213,Country 103760,City,213,Country 103785,City,213,Country 103786,City,213,Country 103787,City,213,Country 103850,City,213,Country 103851,City,213,Country 103939,City,213,Country 103007,City,213,Country 103008,City,213,Country 103029,City,213,Country 103119,City,213,Country 103144,City,213,Country 103155,City,213,Country 103156,City,213,Country 103255,City,213,Country 103256,City,213,Country 103333,City,213,Country 103349,City,213,Country 103407,City,213,Country 103408,City,213,Country 103442,City,213,Country 103444,City,213,Country 103428,City,213,Country 103429,City,213,Country 103579,City,213,Country 103580,City,213,Country 103642,City,213,Country 103675,City,213,Country 103676,City,213,Country 103705,City,213,Country 103706,City,213,Country 103713,City,213,Country 103790,City,213,Country 103791,City,213,Country 103848,City,213,Country 103972,City,213,Country 104001,City,213,Country 102987,City,213,Country 102989,City,213,Country 102991,City,213,Country 102992,City,213,Country 103995,City,213,Country 104007,City,213,Country 104008,City,213,Country 102997,City,213,Country 103000,City,213,Country 103003,City,213,Country 103006,City,213,Country 103024,City,213,Country 103030,City,213,Country 103031,City,213,Country 103040,City,213,Country 103043,City,213,Country 103052,City,213,Country 103055,City,213,Country 103056,City,213,Country 103064,City,213,Country 103065,City,213,Country 103077,City,213,Country 103095,City,213,Country 103081,City,213,Country 103110,City,213,Country 103111,City,213,Country 103112,City,213,Country 103120,City,213,Country 103124,City,213,Country 103127,City,213,Country 103139,City,213,Country 103148,City,213,Country 103154,City,213,Country 103159,City,213,Country 103160,City,213,Country 103191,City,213,Country 103192,City,213,Country 103175,City,213,Country 103183,City,213,Country 103184,City,213,Country 103189,City,213,Country 103242,City,213,Country 103243,City,213,Country 103244,City,213,Country 103245,City,213,Country 103246,City,213,Country 103247,City,213,Country 103248,City,213,Country 103230,City,213,Country 103228,City,213,Country 103229,City,213,Country 103220,City,213,Country 103232,City,213,Country 103233,City,213,Country 103261,City,213,Country 103324,City,213,Country 103280,City,213,Country 103282,City,213,Country 103283,City,213,Country 103286,City,213,Country 103288,City,213,Country 103289,City,213,Country 103290,City,213,Country 103337,City,213,Country 103298,City,213,Country 103300,City,213,Country 103341,City,213,Country 103309,City,213,Country 103345,City,213,Country 103355,City,213,Country 103368,City,213,Country 103436,City,213,Country 103441,City,213,Country 103375,City,213,Country 103376,City,213,Country 103393,City,213,Country 103406,City,213,Country 103430,City,213,Country 103431,City,213,Country 103425,City,213,Country 103435,City,213,Country 103452,City,213,Country 103501,City,213,Country 103459,City,213,Country 103460,City,213,Country 103464,City,213,Country 103465,City,213,Country 103466,City,213,Country 103467,City,213,Country 103468,City,213,Country 103472,City,213,Country 103484,City,213,Country 103508,City,213,Country 103510,City,213,Country 103499,City,213,Country 103500,City,213,Country 103512,City,213,Country 103529,City,213,Country 103530,City,213,Country 103533,City,213,Country 103536,City,213,Country 103537,City,213,Country 103560,City,213,Country 103562,City,213,Country 103563,City,213,Country 103564,City,213,Country 103553,City,213,Country 103554,City,213,Country 103557,City,213,Country 103576,City,213,Country 103592,City,213,Country 104025,City,213,Country 104026,City,213,Country 104029,City,213,Country 104031,City,213,Country 103611,City,213,Country 103615,City,213,Country 103620,City,213,Country 103632,City,213,Country 103633,City,213,Country 103643,City,213,Country 103667,City,213,Country 103674,City,213,Country 103816,City,213,Country 103679,City,213,Country 103809,City,213,Country 103694,City,213,Country 103691,City,213,Country 103696,City,213,Country 103697,City,213,Country 103720,City,213,Country 103703,City,213,Country 103724,City,213,Country 103725,City,213,Country 103712,City,213,Country 103733,City,213,Country 103734,City,213,Country 103743,City,213,Country 103751,City,213,Country 103753,City,213,Country 103754,City,213,Country 103755,City,213,Country 103782,City,213,Country 103761,City,213,Country 103775,City,213,Country 103776,City,213,Country 103780,City,213,Country 103792,City,213,Country 103796,City,213,Country 103799,City,213,Country 103800,City,213,Country 103837,City,213,Country 103838,City,213,Country 103842,City,213,Country 103843,City,213,Country 103844,City,213,Country 103845,City,213,Country 103855,City,213,Country 103854,City,213,Country 103892,City,213,Country 103893,City,213,Country 103865,City,213,Country 103869,City,213,Country 103870,City,213,Country 103876,City,213,Country 103894,City,213,Country 103895,City,213,Country 103896,City,213,Country 103897,City,213,Country 103962,City,213,Country 103963,City,213,Country 103922,City,213,Country 103923,City,213,Country 103979,City,213,Country 103980,City,213,Country 103926,City,213,Country 103973,City,213,Country 103953,City,213,Country 103958,City,213,Country 17357,City,214,Country 17359,City,214,Country 17407,City,214,Country 17424,City,214,Country 17431,City,214,Country 17432,City,214,Country 17460,City,214,Country 17467,City,214,Country 17471,City,214,Country 17475,City,214,Country 17476,City,214,Country 17477,City,214,Country 17491,City,214,Country 17494,City,214,Country 17496,City,214,Country 17501,City,214,Country 17506,City,214,Country 17521,City,214,Country 17522,City,214,Country 17536,City,214,Country 17537,City,214,Country 17549,City,214,Country 17558,City,214,Country 17565,City,214,Country 17570,City,214,Country 17579,City,214,Country 17588,City,214,Country 17682,City,214,Country 17705,City,214,Country 17717,City,214,Country 17732,City,214,Country 17734,City,214,Country 17737,City,214,Country 17749,City,214,Country 17810,City,214,Country 17824,City,214,Country 17834,City,214,Country 17853,City,214,Country 17880,City,214,Country 17939,City,214,Country 17895,City,214,Country 17960,City,214,Country 17966,City,214,Country 17967,City,214,Country 17978,City,214,Country 17985,City,214,Country 17999,City,214,Country 18010,City,214,Country 18012,City,214,Country 18020,City,214,Country 18043,City,214,Country 18044,City,214,Country 18062,City,214,Country 18066,City,214,Country 18115,City,214,Country 18144,City,214,Country 18148,City,214,Country 18151,City,214,Country 18154,City,214,Country 18191,City,214,Country 18176,City,214,Country 18177,City,214,Country 18181,City,214,Country 18182,City,214,Country 18215,City,214,Country 18227,City,214,Country 18228,City,214,Country 18250,City,214,Country 18257,City,214,Country 18263,City,214,Country 18264,City,214,Country 18266,City,214,Country 18281,City,214,Country 18293,City,214,Country 18363,City,214,Country 18366,City,214,Country 18394,City,214,Country 18397,City,214,Country 18399,City,214,Country 18419,City,214,Country 18446,City,214,Country 18456,City,214,Country 18462,City,214,Country 18463,City,214,Country 18483,City,214,Country 18474,City,214,Country 18501,City,214,Country 18511,City,214,Country 18523,City,214,Country 18534,City,214,Country 18544,City,214,Country 18548,City,214,Country 18551,City,214,Country 18559,City,214,Country 18562,City,214,Country 18564,City,214,Country 18577,City,214,Country 18580,City,214,Country 18614,City,214,Country 18625,City,214,Country 18633,City,214,Country 18634,City,214,Country 18636,City,214,Country 18664,City,214,Country 18683,City,214,Country 18684,City,214,Country 18685,City,214,Country 18692,City,214,Country 18719,City,214,Country 18728,City,214,Country 18736,City,214,Country 18757,City,214,Country 18760,City,214,Country 18761,City,214,Country 18782,City,214,Country 18788,City,214,Country 18789,City,214,Country 18796,City,214,Country 17487,City,214,Country 17500,City,214,Country 17517,City,214,Country 17597,City,214,Country 17819,City,214,Country 17901,City,214,Country 17907,City,214,Country 18359,City,214,Country 18477,City,214,Country 18532,City,214,Country 18579,City,214,Country 18605,City,214,Country 18643,City,214,Country 18712,City,214,Country 18720,City,214,Country 17400,City,214,Country 17852,City,214,Country 17894,City,214,Country 18245,City,214,Country 17371,City,214,Country 17386,City,214,Country 17406,City,214,Country 17408,City,214,Country 17474,City,214,Country 17493,City,214,Country 17497,City,214,Country 17510,City,214,Country 17518,City,214,Country 17530,City,214,Country 17538,City,214,Country 17553,City,214,Country 17563,City,214,Country 17575,City,214,Country 17589,City,214,Country 17684,City,214,Country 17775,City,214,Country 17808,City,214,Country 17817,City,214,Country 17825,City,214,Country 17867,City,214,Country 17942,City,214,Country 17956,City,214,Country 18034,City,214,Country 18109,City,214,Country 18042,City,214,Country 18050,City,214,Country 18082,City,214,Country 18083,City,214,Country 18200,City,214,Country 18185,City,214,Country 18244,City,214,Country 18270,City,214,Country 18287,City,214,Country 18307,City,214,Country 18324,City,214,Country 18362,City,214,Country 18403,City,214,Country 18484,City,214,Country 18505,City,214,Country 18526,City,214,Country 18589,City,214,Country 18699,City,214,Country 18710,City,214,Country 18803,City,214,Country 18807,City,214,Country 17358,City,214,Country 17360,City,214,Country 17362,City,214,Country 17373,City,214,Country 17404,City,214,Country 17417,City,214,Country 17592,City,214,Country 17593,City,214,Country 17447,City,214,Country 17454,City,214,Country 17456,City,214,Country 17462,City,214,Country 17463,City,214,Country 17594,City,214,Country 17526,City,214,Country 17527,City,214,Country 17528,City,214,Country 17542,City,214,Country 17545,City,214,Country 17546,City,214,Country 17595,City,214,Country 17556,City,214,Country 17560,City,214,Country 17572,City,214,Country 17577,City,214,Country 17583,City,214,Country 17584,City,214,Country 17653,City,214,Country 17664,City,214,Country 17665,City,214,Country 17708,City,214,Country 17686,City,214,Country 17716,City,214,Country 17731,City,214,Country 17747,City,214,Country 17758,City,214,Country 17759,City,214,Country 17764,City,214,Country 17767,City,214,Country 17777,City,214,Country 17784,City,214,Country 17802,City,214,Country 17805,City,214,Country 17812,City,214,Country 17813,City,214,Country 17870,City,214,Country 17874,City,214,Country 17884,City,214,Country 17885,City,214,Country 17902,City,214,Country 17903,City,214,Country 17908,City,214,Country 17910,City,214,Country 17913,City,214,Country 17915,City,214,Country 17936,City,214,Country 17952,City,214,Country 17953,City,214,Country 17954,City,214,Country 17957,City,214,Country 17963,City,214,Country 17968,City,214,Country 17970,City,214,Country 17971,City,214,Country 17972,City,214,Country 17981,City,214,Country 17982,City,214,Country 18011,City,214,Country 18002,City,214,Country 18003,City,214,Country 18004,City,214,Country 18023,City,214,Country 18036,City,214,Country 18037,City,214,Country 18045,City,214,Country 18047,City,214,Country 18051,City,214,Country 18063,City,214,Country 18064,City,214,Country 18077,City,214,Country 18085,City,214,Country 18093,City,214,Country 18112,City,214,Country 18107,City,214,Country 18108,City,214,Country 18113,City,214,Country 18118,City,214,Country 18129,City,214,Country 18142,City,214,Country 18143,City,214,Country 18146,City,214,Country 18175,City,214,Country 18195,City,214,Country 18197,City,214,Country 18199,City,214,Country 18201,City,214,Country 18204,City,214,Country 18206,City,214,Country 18183,City,214,Country 18219,City,214,Country 18220,City,214,Country 18239,City,214,Country 18240,City,214,Country 18242,City,214,Country 18243,City,214,Country 18267,City,214,Country 18289,City,214,Country 18291,City,214,Country 18332,City,214,Country 18314,City,214,Country 18334,City,214,Country 18343,City,214,Country 18376,City,214,Country 18377,City,214,Country 18382,City,214,Country 18385,City,214,Country 18396,City,214,Country 18404,City,214,Country 18405,City,214,Country 18408,City,214,Country 18415,City,214,Country 18425,City,214,Country 18443,City,214,Country 18488,City,214,Country 18491,City,214,Country 18493,City,214,Country 18494,City,214,Country 18502,City,214,Country 18519,City,214,Country 18520,City,214,Country 18533,City,214,Country 18550,City,214,Country 18558,City,214,Country 18566,City,214,Country 18617,City,214,Country 18576,City,214,Country 18590,City,214,Country 18591,City,214,Country 18592,City,214,Country 18597,City,214,Country 18598,City,214,Country 18599,City,214,Country 18608,City,214,Country 18609,City,214,Country 18626,City,214,Country 18635,City,214,Country 18644,City,214,Country 18651,City,214,Country 18653,City,214,Country 18663,City,214,Country 18714,City,214,Country 18723,City,214,Country 18724,City,214,Country 18744,City,214,Country 18745,City,214,Country 18752,City,214,Country 18756,City,214,Country 18762,City,214,Country 18768,City,214,Country 18769,City,214,Country 18770,City,214,Country 18771,City,214,Country 18772,City,214,Country 18808,City,214,Country 18798,City,214,Country 18806,City,214,Country 17390,City,214,Country 17415,City,214,Country 17426,City,214,Country 17440,City,214,Country 17450,City,214,Country 17596,City,214,Country 17566,City,214,Country 17568,City,214,Country 17581,City,214,Country 17627,City,214,Country 17641,City,214,Country 17654,City,214,Country 17661,City,214,Country 17671,City,214,Country 17702,City,214,Country 17714,City,214,Country 17723,City,214,Country 17757,City,214,Country 17774,City,214,Country 17790,City,214,Country 17809,City,214,Country 17832,City,214,Country 17837,City,214,Country 17845,City,214,Country 17871,City,214,Country 17876,City,214,Country 17877,City,214,Country 17904,City,214,Country 17974,City,214,Country 18025,City,214,Country 18028,City,214,Country 18031,City,214,Country 18122,City,214,Country 18123,City,214,Country 18190,City,214,Country 18184,City,214,Country 18265,City,214,Country 18315,City,214,Country 18323,City,214,Country 18342,City,214,Country 18368,City,214,Country 18389,City,214,Country 18398,City,214,Country 18569,City,214,Country 18437,City,214,Country 18445,City,214,Country 18473,City,214,Country 18510,City,214,Country 18570,City,214,Country 18601,City,214,Country 18623,City,214,Country 18674,City,214,Country 18679,City,214,Country 18681,City,214,Country 18695,City,214,Country 17383,City,214,Country 17399,City,214,Country 17451,City,214,Country 17464,City,214,Country 17612,City,214,Country 17625,City,214,Country 17643,City,214,Country 17644,City,214,Country 17649,City,214,Country 17656,City,214,Country 17676,City,214,Country 17827,City,214,Country 17965,City,214,Country 18032,City,214,Country 18055,City,214,Country 18068,City,214,Country 18141,City,214,Country 18158,City,214,Country 18284,City,214,Country 18316,City,214,Country 18330,City,214,Country 18448,City,214,Country 18595,City,214,Country 18606,City,214,Country 18661,City,214,Country 18670,City,214,Country 18672,City,214,Country 18676,City,214,Country 17385,City,214,Country 17442,City,214,Country 17548,City,214,Country 17659,City,214,Country 17660,City,214,Country 17662,City,214,Country 17663,City,214,Country 17666,City,214,Country 17680,City,214,Country 17681,City,214,Country 17799,City,214,Country 17801,City,214,Country 17844,City,214,Country 18060,City,214,Country 18069,City,214,Country 18071,City,214,Country 18319,City,214,Country 18320,City,214,Country 18420,City,214,Country 18677,City,214,Country 17363,City,214,Country 17391,City,214,Country 17437,City,214,Country 17466,City,214,Country 17578,City,214,Country 17604,City,214,Country 17587,City,214,Country 17674,City,214,Country 17718,City,214,Country 17735,City,214,Country 17746,City,214,Country 17753,City,214,Country 17754,City,214,Country 17772,City,214,Country 17776,City,214,Country 17797,City,214,Country 17831,City,214,Country 17875,City,214,Country 17887,City,214,Country 17893,City,214,Country 17912,City,214,Country 17920,City,214,Country 17921,City,214,Country 17922,City,214,Country 17926,City,214,Country 17935,City,214,Country 17955,City,214,Country 17998,City,214,Country 18008,City,214,Country 18087,City,214,Country 18095,City,214,Country 18096,City,214,Country 18103,City,214,Country 18106,City,214,Country 18119,City,214,Country 18136,City,214,Country 18138,City,214,Country 18139,City,214,Country 18153,City,214,Country 18208,City,214,Country 18214,City,214,Country 18216,City,214,Country 18230,City,214,Country 18256,City,214,Country 18306,City,214,Country 18361,City,214,Country 18402,City,214,Country 18390,City,214,Country 18401,City,214,Country 18459,City,214,Country 18486,City,214,Country 18489,City,214,Country 18476,City,214,Country 18508,City,214,Country 18567,City,214,Country 18568,City,214,Country 18602,City,214,Country 18622,City,214,Country 18690,City,214,Country 18726,City,214,Country 18729,City,214,Country 18735,City,214,Country 18748,City,214,Country 18754,City,214,Country 18755,City,214,Country 18766,City,214,Country 18792,City,214,Country 17423,City,214,Country 17469,City,214,Country 17554,City,214,Country 17555,City,214,Country 17619,City,214,Country 17642,City,214,Country 17655,City,214,Country 17657,City,214,Country 17667,City,214,Country 17701,City,214,Country 17792,City,214,Country 17798,City,214,Country 17855,City,214,Country 17861,City,214,Country 18021,City,214,Country 18022,City,214,Country 18056,City,214,Country 18057,City,214,Country 18058,City,214,Country 18070,City,214,Country 18072,City,214,Country 18073,City,214,Country 18121,City,214,Country 18212,City,214,Country 18213,City,214,Country 18304,City,214,Country 18422,City,214,Country 18423,City,214,Country 18600,City,214,Country 18656,City,214,Country 18657,City,214,Country 17461,City,214,Country 17502,City,214,Country 17505,City,214,Country 17507,City,214,Country 17508,City,214,Country 17512,City,214,Country 17515,City,214,Country 17892,City,214,Country 18110,City,214,Country 18217,City,214,Country 18218,City,214,Country 18336,City,214,Country 18455,City,214,Country 18464,City,214,Country 18552,City,214,Country 18556,City,214,Country 18588,City,214,Country 18751,City,214,Country 17438,City,214,Country 17468,City,214,Country 17478,City,214,Country 17482,City,214,Country 17485,City,214,Country 17486,City,214,Country 17495,City,214,Country 17503,City,214,Country 17511,City,214,Country 17513,City,214,Country 17514,City,214,Country 17519,City,214,Country 17525,City,214,Country 17557,City,214,Country 17605,City,214,Country 17679,City,214,Country 17683,City,214,Country 17704,City,214,Country 17728,City,214,Country 17765,City,214,Country 17814,City,214,Country 17828,City,214,Country 17868,City,214,Country 17886,City,214,Country 17937,City,214,Country 17914,City,214,Country 17924,City,214,Country 17984,City,214,Country 18007,City,214,Country 18035,City,214,Country 18046,City,214,Country 18092,City,214,Country 18102,City,214,Country 18134,City,214,Country 18156,City,214,Country 18224,City,214,Country 18232,City,214,Country 18241,City,214,Country 18254,City,214,Country 18279,City,214,Country 18283,City,214,Country 18375,City,214,Country 18381,City,214,Country 18384,City,214,Country 18485,City,214,Country 18506,City,214,Country 18528,City,214,Country 18561,City,214,Country 18603,City,214,Country 18721,City,214,Country 18734,City,214,Country 18765,City,214,Country 18800,City,214,Country 17393,City,214,Country 17394,City,214,Country 17398,City,214,Country 17419,City,214,Country 17430,City,214,Country 17435,City,214,Country 17458,City,214,Country 17567,City,214,Country 17580,City,214,Country 17606,City,214,Country 17678,City,214,Country 17687,City,214,Country 17720,City,214,Country 17730,City,214,Country 17736,City,214,Country 17769,City,214,Country 17791,City,214,Country 17794,City,214,Country 17821,City,214,Country 17822,City,214,Country 17847,City,214,Country 17849,City,214,Country 17850,City,214,Country 17856,City,214,Country 17859,City,214,Country 17890,City,214,Country 17938,City,214,Country 17934,City,214,Country 17959,City,214,Country 17962,City,214,Country 17969,City,214,Country 17980,City,214,Country 18009,City,214,Country 18081,City,214,Country 18111,City,214,Country 18160,City,214,Country 18194,City,214,Country 18173,City,214,Country 18178,City,214,Country 18221,City,214,Country 18226,City,214,Country 18255,City,214,Country 18262,City,214,Country 18269,City,214,Country 18333,City,214,Country 18338,City,214,Country 18341,City,214,Country 18365,City,214,Country 18392,City,214,Country 18410,City,214,Country 18438,City,214,Country 18439,City,214,Country 18440,City,214,Country 18442,City,214,Country 18444,City,214,Country 18482,City,214,Country 18472,City,214,Country 18509,City,214,Country 18515,City,214,Country 18581,City,214,Country 18654,City,214,Country 18655,City,214,Country 18700,City,214,Country 18701,City,214,Country 18702,City,214,Country 18703,City,214,Country 18704,City,214,Country 18705,City,214,Country 18706,City,214,Country 18707,City,214,Country 18711,City,214,Country 18713,City,214,Country 18725,City,214,Country 18727,City,214,Country 18749,City,214,Country 18753,City,214,Country 18759,City,214,Country 18805,City,214,Country 17405,City,214,Country 17427,City,214,Country 17433,City,214,Country 17439,City,214,Country 17441,City,214,Country 17561,City,214,Country 17562,City,214,Country 17621,City,214,Country 17623,City,214,Country 17624,City,214,Country 17628,City,214,Country 17632,City,214,Country 17637,City,214,Country 17646,City,214,Country 17650,City,214,Country 17651,City,214,Country 17755,City,214,Country 17778,City,214,Country 17779,City,214,Country 17788,City,214,Country 17815,City,214,Country 17820,City,214,Country 17851,City,214,Country 17879,City,214,Country 17869,City,214,Country 17881,City,214,Country 17941,City,214,Country 17940,City,214,Country 18065,City,214,Country 18074,City,214,Country 18075,City,214,Country 18076,City,214,Country 18080,City,214,Country 18125,City,214,Country 18126,City,214,Country 18127,City,214,Country 18165,City,214,Country 18167,City,214,Country 18168,City,214,Country 18207,City,214,Country 18290,City,214,Country 18337,City,214,Country 18339,City,214,Country 18340,City,214,Country 18374,City,214,Country 18416,City,214,Country 18417,City,214,Country 18421,City,214,Country 18427,City,214,Country 18428,City,214,Country 18429,City,214,Country 18432,City,214,Country 18434,City,214,Country 18441,City,214,Country 18452,City,214,Country 18453,City,214,Country 18517,City,214,Country 18518,City,214,Country 18524,City,214,Country 18527,City,214,Country 18545,City,214,Country 18573,City,214,Country 18607,City,214,Country 18615,City,214,Country 18662,City,214,Country 18668,City,214,Country 18669,City,214,Country 18697,City,214,Country 18675,City,214,Country 18686,City,214,Country 18687,City,214,Country 18688,City,214,Country 18689,City,214,Country 18694,City,214,Country 18793,City,214,Country 17381,City,214,Country 17382,City,214,Country 17401,City,214,Country 17412,City,214,Country 17422,City,214,Country 17425,City,214,Country 17436,City,214,Country 17446,City,214,Country 17449,City,214,Country 17455,City,214,Country 17465,City,214,Country 17470,City,214,Country 17539,City,214,Country 17543,City,214,Country 17541,City,214,Country 17551,City,214,Country 17569,City,214,Country 17586,City,214,Country 17616,City,214,Country 17626,City,214,Country 17640,City,214,Country 17629,City,214,Country 17630,City,214,Country 17631,City,214,Country 17633,City,214,Country 17634,City,214,Country 17635,City,214,Country 17647,City,214,Country 17652,City,214,Country 17658,City,214,Country 17668,City,214,Country 17669,City,214,Country 17672,City,214,Country 17721,City,214,Country 17722,City,214,Country 17756,City,214,Country 17785,City,214,Country 17800,City,214,Country 17811,City,214,Country 17826,City,214,Country 17833,City,214,Country 17838,City,214,Country 17860,City,214,Country 17862,City,214,Country 17872,City,214,Country 17878,City,214,Country 17961,City,214,Country 17964,City,214,Country 18026,City,214,Country 18027,City,214,Country 18048,City,214,Country 18049,City,214,Country 18052,City,214,Country 18054,City,214,Country 18059,City,214,Country 18061,City,214,Country 18079,City,214,Country 18094,City,214,Country 18104,City,214,Country 18137,City,214,Country 18161,City,214,Country 18164,City,214,Country 18169,City,214,Country 18171,City,214,Country 18172,City,214,Country 18174,City,214,Country 18233,City,214,Country 18234,City,214,Country 18282,City,214,Country 18286,City,214,Country 18288,City,214,Country 18295,City,214,Country 18296,City,214,Country 18297,City,214,Country 18298,City,214,Country 18299,City,214,Country 18300,City,214,Country 18301,City,214,Country 18302,City,214,Country 18303,City,214,Country 18317,City,214,Country 18322,City,214,Country 18327,City,214,Country 18326,City,214,Country 18328,City,214,Country 18329,City,214,Country 18364,City,214,Country 18380,City,214,Country 18386,City,214,Country 18387,City,214,Country 18424,City,214,Country 18426,City,214,Country 18430,City,214,Country 18431,City,214,Country 18450,City,214,Country 18451,City,214,Country 18531,City,214,Country 18611,City,214,Country 18659,City,214,Country 18673,City,214,Country 18680,City,214,Country 18682,City,214,Country 18696,City,214,Country 18790,City,214,Country 18791,City,214,Country 17428,City,214,Country 17622,City,214,Country 17944,City,214,Country 18152,City,214,Country 18395,City,214,Country 18554,City,214,Country 18638,City,214,Country 18708,City,214,Country 18801,City,214,Country 17364,City,214,Country 17365,City,214,Country 17366,City,214,Country 17367,City,214,Country 17368,City,214,Country 17369,City,214,Country 17370,City,214,Country 17372,City,214,Country 17375,City,214,Country 17376,City,214,Country 17377,City,214,Country 17378,City,214,Country 17379,City,214,Country 17396,City,214,Country 17418,City,214,Country 17420,City,214,Country 17421,City,214,Country 17429,City,214,Country 17591,City,214,Country 17443,City,214,Country 17445,City,214,Country 17457,City,214,Country 17472,City,214,Country 17473,City,214,Country 17479,City,214,Country 17480,City,214,Country 17481,City,214,Country 17488,City,214,Country 17489,City,214,Country 17499,City,214,Country 17504,City,214,Country 17516,City,214,Country 17520,City,214,Country 17523,City,214,Country 17531,City,214,Country 17532,City,214,Country 17534,City,214,Country 17535,City,214,Country 17550,City,214,Country 17573,City,214,Country 17574,City,214,Country 17576,City,214,Country 17598,City,214,Country 17599,City,214,Country 17600,City,214,Country 17601,City,214,Country 17673,City,214,Country 17706,City,214,Country 17707,City,214,Country 17685,City,214,Country 17689,City,214,Country 17690,City,214,Country 17691,City,214,Country 17692,City,214,Country 17693,City,214,Country 17694,City,214,Country 17695,City,214,Country 17696,City,214,Country 17697,City,214,Country 17698,City,214,Country 17703,City,214,Country 17709,City,214,Country 17710,City,214,Country 17711,City,214,Country 17712,City,214,Country 17713,City,214,Country 17715,City,214,Country 17719,City,214,Country 17724,City,214,Country 17725,City,214,Country 17726,City,214,Country 17727,City,214,Country 17729,City,214,Country 17739,City,214,Country 17740,City,214,Country 17741,City,214,Country 17742,City,214,Country 17743,City,214,Country 17744,City,214,Country 17745,City,214,Country 17761,City,214,Country 17762,City,214,Country 17763,City,214,Country 17773,City,214,Country 17816,City,214,Country 17781,City,214,Country 17782,City,214,Country 17786,City,214,Country 17795,City,214,Country 17807,City,214,Country 17823,City,214,Country 17829,City,214,Country 17840,City,214,Country 17841,City,214,Country 17842,City,214,Country 17843,City,214,Country 17846,City,214,Country 17857,City,214,Country 17864,City,214,Country 17865,City,214,Country 17866,City,214,Country 17873,City,214,Country 17883,City,214,Country 17888,City,214,Country 17891,City,214,Country 17896,City,214,Country 17897,City,214,Country 17898,City,214,Country 17899,City,214,Country 17900,City,214,Country 17905,City,214,Country 17909,City,214,Country 17911,City,214,Country 17916,City,214,Country 17918,City,214,Country 17919,City,214,Country 17923,City,214,Country 17925,City,214,Country 17927,City,214,Country 17929,City,214,Country 17930,City,214,Country 17931,City,214,Country 17932,City,214,Country 17933,City,214,Country 17943,City,214,Country 17949,City,214,Country 17950,City,214,Country 17975,City,214,Country 17976,City,214,Country 17977,City,214,Country 17979,City,214,Country 17983,City,214,Country 17987,City,214,Country 17988,City,214,Country 17989,City,214,Country 17990,City,214,Country 17991,City,214,Country 17992,City,214,Country 17993,City,214,Country 17994,City,214,Country 17995,City,214,Country 17996,City,214,Country 17997,City,214,Country 18000,City,214,Country 18001,City,214,Country 18013,City,214,Country 18014,City,214,Country 18015,City,214,Country 18016,City,214,Country 18017,City,214,Country 18018,City,214,Country 18038,City,214,Country 18039,City,214,Country 18040,City,214,Country 18186,City,214,Country 18187,City,214,Country 18188,City,214,Country 18124,City,214,Country 18130,City,214,Country 18131,City,214,Country 18132,City,214,Country 18133,City,214,Country 18140,City,214,Country 18157,City,214,Country 18192,City,214,Country 18193,City,214,Country 18196,City,214,Country 18236,City,214,Country 18237,City,214,Country 18209,City,214,Country 18210,City,214,Country 18222,City,214,Country 18223,City,214,Country 18225,City,214,Country 18238,City,214,Country 18246,City,214,Country 18247,City,214,Country 18248,City,214,Country 18249,City,214,Country 18251,City,214,Country 18252,City,214,Country 18253,City,214,Country 18258,City,214,Country 18259,City,214,Country 18260,City,214,Country 18261,City,214,Country 18271,City,214,Country 18272,City,214,Country 18273,City,214,Country 18274,City,214,Country 18275,City,214,Country 18276,City,214,Country 18277,City,214,Country 18278,City,214,Country 18280,City,214,Country 18285,City,214,Country 18292,City,214,Country 18294,City,214,Country 18305,City,214,Country 18311,City,214,Country 18312,City,214,Country 18313,City,214,Country 18308,City,214,Country 18335,City,214,Country 18344,City,214,Country 18345,City,214,Country 18346,City,214,Country 18347,City,214,Country 18369,City,214,Country 18370,City,214,Country 18371,City,214,Country 18372,City,214,Country 18391,City,214,Country 18406,City,214,Country 18407,City,214,Country 18409,City,214,Country 18400,City,214,Country 18411,City,214,Country 18412,City,214,Country 18413,City,214,Country 18414,City,214,Country 18436,City,214,Country 18454,City,214,Country 18465,City,214,Country 18466,City,214,Country 18467,City,214,Country 18468,City,214,Country 18469,City,214,Country 18470,City,214,Country 18471,City,214,Country 18478,City,214,Country 18479,City,214,Country 18480,City,214,Country 18495,City,214,Country 18496,City,214,Country 18497,City,214,Country 18498,City,214,Country 18499,City,214,Country 18500,City,214,Country 18503,City,214,Country 18504,City,214,Country 18512,City,214,Country 18513,City,214,Country 18514,City,214,Country 18529,City,214,Country 18537,City,214,Country 18538,City,214,Country 18539,City,214,Country 18540,City,214,Country 18541,City,214,Country 18542,City,214,Country 18543,City,214,Country 18560,City,214,Country 18555,City,214,Country 18565,City,214,Country 18571,City,214,Country 18574,City,214,Country 18575,City,214,Country 18582,City,214,Country 18583,City,214,Country 18584,City,214,Country 18585,City,214,Country 18586,City,214,Country 18587,City,214,Country 18618,City,214,Country 18619,City,214,Country 18620,City,214,Country 18621,City,214,Country 18613,City,214,Country 18624,City,214,Country 18627,City,214,Country 18628,City,214,Country 18629,City,214,Country 18630,City,214,Country 18631,City,214,Country 18639,City,214,Country 18640,City,214,Country 18641,City,214,Country 18642,City,214,Country 18645,City,214,Country 18646,City,214,Country 18647,City,214,Country 18648,City,214,Country 18649,City,214,Country 18650,City,214,Country 18665,City,214,Country 18666,City,214,Country 18667,City,214,Country 18691,City,214,Country 18773,City,214,Country 18774,City,214,Country 18775,City,214,Country 18776,City,214,Country 18777,City,214,Country 18778,City,214,Country 18779,City,214,Country 18780,City,214,Country 18709,City,214,Country 18715,City,214,Country 18716,City,214,Country 18717,City,214,Country 18718,City,214,Country 18722,City,214,Country 18732,City,214,Country 18733,City,214,Country 18737,City,214,Country 18738,City,214,Country 18739,City,214,Country 18740,City,214,Country 18741,City,214,Country 18742,City,214,Country 18743,City,214,Country 18746,City,214,Country 18750,City,214,Country 18758,City,214,Country 18764,City,214,Country 18783,City,214,Country 18784,City,214,Country 18785,City,214,Country 18786,City,214,Country 18787,City,214,Country 18797,City,214,Country 18799,City,214,Country 18802,City,214,Country 18809,City,214,Country 18810,City,214,Country 18811,City,214,Country 18812,City,214,Country 18813,City,214,Country 18814,City,214,Country 18815,City,214,Country 18816,City,214,Country 18817,City,214,Country 18818,City,214,Country 18819,City,214,Country 18820,City,214,Country 18821,City,214,Country 18822,City,214,Country 18823,City,214,Country 18824,City,214,Country 18825,City,214,Country 18826,City,214,Country 18827,City,214,Country 18828,City,214,Country 18829,City,214,Country 18830,City,214,Country 18831,City,214,Country 18832,City,214,Country 18833,City,214,Country 18834,City,214,Country 18835,City,214,Country 18836,City,214,Country 18837,City,214,Country 18838,City,214,Country 18839,City,214,Country 18840,City,214,Country 18841,City,214,Country 18842,City,214,Country 18843,City,214,Country 18844,City,214,Country 18845,City,214,Country 18846,City,214,Country 18847,City,214,Country 18848,City,214,Country 18849,City,214,Country 18850,City,214,Country 18851,City,214,Country 18852,City,214,Country 18853,City,214,Country 18854,City,214,Country 18855,City,214,Country 18856,City,214,Country 18857,City,214,Country 18858,City,214,Country 17529,City,214,Country 17751,City,214,Country 17839,City,214,Country 18086,City,214,Country 18097,City,214,Country 18162,City,214,Country 18235,City,214,Country 18211,City,214,Country 18229,City,214,Country 18268,City,214,Country 18475,City,214,Country 17409,City,214,Country 17411,City,214,Country 17547,City,214,Country 17559,City,214,Country 17571,City,214,Country 17585,City,214,Country 17615,City,214,Country 17617,City,214,Country 17618,City,214,Country 17638,City,214,Country 17639,City,214,Country 17677,City,214,Country 17699,City,214,Country 17700,City,214,Country 17783,City,214,Country 17793,City,214,Country 17882,City,214,Country 17917,City,214,Country 17947,City,214,Country 17948,City,214,Country 17958,City,214,Country 17986,City,214,Country 18024,City,214,Country 18029,City,214,Country 18033,City,214,Country 18067,City,214,Country 18105,City,214,Country 18116,City,214,Country 18117,City,214,Country 18155,City,214,Country 18318,City,214,Country 18321,City,214,Country 18348,City,214,Country 18349,City,214,Country 18350,City,214,Country 18351,City,214,Country 18352,City,214,Country 18353,City,214,Country 18354,City,214,Country 18355,City,214,Country 18356,City,214,Country 18357,City,214,Country 18358,City,214,Country 18367,City,214,Country 18435,City,214,Country 18457,City,214,Country 18460,City,214,Country 18490,City,214,Country 18522,City,214,Country 18535,City,214,Country 18572,City,214,Country 18594,City,214,Country 18596,City,214,Country 18604,City,214,Country 18610,City,214,Country 18637,City,214,Country 18660,City,214,Country 18794,City,214,Country 18795,City,214,Country 18804,City,214,Country 17448,City,214,Country 17582,City,214,Country 17675,City,214,Country 17748,City,214,Country 17752,City,214,Country 17906,City,214,Country 18546,City,214,Country 18547,City,214,Country 18763,City,214,Country 17387,City,214,Country 17750,City,214,Country 17835,City,214,Country 17973,City,214,Country 18101,City,214,Country 18418,City,214,Country 18447,City,214,Country 17389,City,214,Country 17410,City,214,Country 17590,City,214,Country 17483,City,214,Country 17484,City,214,Country 17490,City,214,Country 17492,City,214,Country 17498,City,214,Country 17509,City,214,Country 17738,City,214,Country 17787,City,214,Country 17806,City,214,Country 17830,City,214,Country 17848,City,214,Country 17946,City,214,Country 17951,City,214,Country 18019,City,214,Country 18030,City,214,Country 18179,City,214,Country 18310,City,214,Country 18360,City,214,Country 18393,City,214,Country 18449,City,214,Country 18461,City,214,Country 18487,City,214,Country 18481,City,214,Country 18516,City,214,Country 18553,City,214,Country 18612,City,214,Country 18632,City,214,Country 18693,City,214,Country 18767,City,214,Country 17356,City,214,Country 17374,City,214,Country 17392,City,214,Country 17395,City,214,Country 17402,City,214,Country 17403,City,214,Country 17459,City,214,Country 17552,City,214,Country 17603,City,214,Country 17688,City,214,Country 17733,City,214,Country 17760,City,214,Country 17766,City,214,Country 17770,City,214,Country 17771,City,214,Country 17789,City,214,Country 17803,City,214,Country 17804,City,214,Country 17818,City,214,Country 17858,City,214,Country 17889,City,214,Country 17928,City,214,Country 17945,City,214,Country 18005,City,214,Country 18006,City,214,Country 18041,City,214,Country 18189,City,214,Country 18135,City,214,Country 18198,City,214,Country 18202,City,214,Country 18203,City,214,Country 18205,City,214,Country 18309,City,214,Country 18373,City,214,Country 18383,City,214,Country 18388,City,214,Country 18433,City,214,Country 18525,City,214,Country 18549,City,214,Country 18557,City,214,Country 18563,City,214,Country 18616,City,214,Country 18593,City,214,Country 18652,City,214,Country 18698,City,214,Country 18781,City,214,Country 18730,City,214,Country 18731,City,214,Country 18747,City,214,Country 17361,City,214,Country 17380,City,214,Country 17384,City,214,Country 17413,City,214,Country 17414,City,214,Country 17434,City,214,Country 17452,City,214,Country 17453,City,214,Country 17524,City,214,Country 17533,City,214,Country 17540,City,214,Country 17544,City,214,Country 17564,City,214,Country 17607,City,214,Country 17608,City,214,Country 17609,City,214,Country 17610,City,214,Country 17611,City,214,Country 17613,City,214,Country 17614,City,214,Country 17620,City,214,Country 17636,City,214,Country 17645,City,214,Country 17648,City,214,Country 17670,City,214,Country 17780,City,214,Country 17836,City,214,Country 17854,City,214,Country 17863,City,214,Country 18053,City,214,Country 18078,City,214,Country 18084,City,214,Country 18088,City,214,Country 18089,City,214,Country 18090,City,214,Country 18091,City,214,Country 18098,City,214,Country 18099,City,214,Country 18100,City,214,Country 18114,City,214,Country 18120,City,214,Country 18128,City,214,Country 18145,City,214,Country 18147,City,214,Country 18149,City,214,Country 18150,City,214,Country 18159,City,214,Country 18163,City,214,Country 18166,City,214,Country 18170,City,214,Country 18180,City,214,Country 18231,City,214,Country 18325,City,214,Country 18331,City,214,Country 18378,City,214,Country 18379,City,214,Country 18507,City,214,Country 18530,City,214,Country 18536,City,214,Country 18578,City,214,Country 18658,City,214,Country 18671,City,214,Country 18678,City,214,Country 17388,City,214,Country 17397,City,214,Country 17416,City,214,Country 17444,City,214,Country 17602,City,214,Country 17768,City,214,Country 17796,City,214,Country 18458,City,214,Country 18492,City,214,Country 18521,City,214,Country 109305,City,230,Country 109306,City,230,Country 109308,City,230,Country 109309,City,230,Country 109310,City,230,Country 109313,City,230,Country 109314,City,230,Country 109315,City,230,Country 109316,City,230,Country 109317,City,230,Country 109327,City,230,Country 109328,City,230,Country 109336,City,230,Country 109338,City,230,Country 109339,City,230,Country 109340,City,230,Country 109356,City,230,Country 109363,City,230,Country 109364,City,230,Country 109365,City,230,Country 109372,City,230,Country 109384,City,230,Country 109399,City,230,Country 109412,City,230,Country 109417,City,230,Country 109438,City,230,Country 109444,City,230,Country 109470,City,230,Country 109474,City,230,Country 109476,City,230,Country 109489,City,230,Country 109490,City,230,Country 109491,City,230,Country 109492,City,230,Country 109493,City,230,Country 109497,City,230,Country 109503,City,230,Country 109505,City,230,Country 109506,City,230,Country 109507,City,230,Country 109527,City,230,Country 109528,City,230,Country 109543,City,230,Country 109547,City,230,Country 109560,City,230,Country 109561,City,230,Country 109564,City,230,Country 109571,City,230,Country 109577,City,230,Country 109582,City,230,Country 109592,City,230,Country 109593,City,230,Country 109599,City,230,Country 109600,City,230,Country 109602,City,230,Country 109603,City,230,Country 109604,City,230,Country 109605,City,230,Country 109606,City,230,Country 109607,City,230,Country 109608,City,230,Country 109609,City,230,Country 109610,City,230,Country 109611,City,230,Country 109612,City,230,Country 109613,City,230,Country 109614,City,230,Country 109615,City,230,Country 109616,City,230,Country 109617,City,230,Country 109618,City,230,Country 109619,City,230,Country 109620,City,230,Country 109621,City,230,Country 109622,City,230,Country 109623,City,230,Country 109664,City,230,Country 109669,City,230,Country 109670,City,230,Country 109671,City,230,Country 109676,City,230,Country 109685,City,230,Country 109688,City,230,Country 109689,City,230,Country 109692,City,230,Country 109700,City,230,Country 109701,City,230,Country 109707,City,230,Country 109718,City,230,Country 109719,City,230,Country 109725,City,230,Country 109726,City,230,Country 109734,City,230,Country 109750,City,230,Country 109752,City,230,Country 109753,City,230,Country 109761,City,230,Country 109771,City,230,Country 109780,City,230,Country 109781,City,230,Country 109774,City,230,Country 109779,City,230,Country 109784,City,230,Country 109788,City,230,Country 109790,City,230,Country 109794,City,230,Country 109796,City,230,Country 109812,City,230,Country 109818,City,230,Country 109822,City,230,Country 109830,City,230,Country 109831,City,230,Country 109834,City,230,Country 109835,City,230,Country 109836,City,230,Country 109837,City,230,Country 109839,City,230,Country 109840,City,230,Country 109842,City,230,Country 109845,City,230,Country 109844,City,230,Country 109849,City,230,Country 109850,City,230,Country 109851,City,230,Country 109852,City,230,Country 109857,City,230,Country 109861,City,230,Country 109863,City,230,Country 109869,City,230,Country 109870,City,230,Country 109871,City,230,Country 109881,City,230,Country 109882,City,230,Country 109890,City,230,Country 109968,City,230,Country 109910,City,230,Country 109912,City,230,Country 109913,City,230,Country 109914,City,230,Country 109915,City,230,Country 109917,City,230,Country 109919,City,230,Country 109920,City,230,Country 109926,City,230,Country 109927,City,230,Country 109933,City,230,Country 109935,City,230,Country 109936,City,230,Country 109937,City,230,Country 109969,City,230,Country 109982,City,230,Country 109985,City,230,Country 109987,City,230,Country 110005,City,230,Country 109998,City,230,Country 110004,City,230,Country 110006,City,230,Country 110007,City,230,Country 110010,City,230,Country 110011,City,230,Country 110013,City,230,Country 110014,City,230,Country 110020,City,230,Country 110026,City,230,Country 110027,City,230,Country 110028,City,230,Country 110032,City,230,Country 110033,City,230,Country 110034,City,230,Country 110036,City,230,Country 110037,City,230,Country 110046,City,230,Country 110050,City,230,Country 110053,City,230,Country 110061,City,230,Country 110064,City,230,Country 110077,City,230,Country 110083,City,230,Country 110085,City,230,Country 110088,City,230,Country 110089,City,230,Country 110095,City,230,Country 110096,City,230,Country 110099,City,230,Country 110100,City,230,Country 110118,City,230,Country 110124,City,230,Country 110126,City,230,Country 110127,City,230,Country 110129,City,230,Country 110130,City,230,Country 110136,City,230,Country 110138,City,230,Country 110139,City,230,Country 110140,City,230,Country 110147,City,230,Country 110144,City,230,Country 110148,City,230,Country 110149,City,230,Country 110155,City,230,Country 110156,City,230,Country 110178,City,230,Country 110179,City,230,Country 110182,City,230,Country 110183,City,230,Country 110184,City,230,Country 110191,City,230,Country 110201,City,230,Country 110202,City,230,Country 110204,City,230,Country 110206,City,230,Country 110209,City,230,Country 110220,City,230,Country 110223,City,230,Country 110224,City,230,Country 110225,City,230,Country 110243,City,230,Country 110245,City,230,Country 110248,City,230,Country 110249,City,230,Country 110254,City,230,Country 110260,City,230,Country 110272,City,230,Country 110277,City,230,Country 110280,City,230,Country 110283,City,230,Country 110295,City,230,Country 110305,City,230,Country 110307,City,230,Country 110308,City,230,Country 110310,City,230,Country 110311,City,230,Country 110312,City,230,Country 110314,City,230,Country 110315,City,230,Country 110316,City,230,Country 110326,City,230,Country 110329,City,230,Country 110333,City,230,Country 110348,City,230,Country 110349,City,230,Country 110358,City,230,Country 110367,City,230,Country 110371,City,230,Country 110372,City,230,Country 110375,City,230,Country 110389,City,230,Country 110392,City,230,Country 110395,City,230,Country 110399,City,230,Country 110402,City,230,Country 110403,City,230,Country 110409,City,230,Country 110416,City,230,Country 110418,City,230,Country 110421,City,230,Country 110434,City,230,Country 110437,City,230,Country 110439,City,230,Country 110446,City,230,Country 110448,City,230,Country 110452,City,230,Country 110459,City,230,Country 110461,City,230,Country 110462,City,230,Country 110463,City,230,Country 110465,City,230,Country 110469,City,230,Country 110473,City,230,Country 110477,City,230,Country 110481,City,230,Country 110497,City,230,Country 110501,City,230,Country 110504,City,230,Country 110505,City,230,Country 110506,City,230,Country 110517,City,230,Country 110518,City,230,Country 110519,City,230,Country 110523,City,230,Country 110524,City,230,Country 110536,City,230,Country 110549,City,230,Country 110553,City,230,Country 110556,City,230,Country 110560,City,230,Country 110565,City,230,Country 110567,City,230,Country 110568,City,230,Country 110576,City,230,Country 110586,City,230,Country 110588,City,230,Country 110596,City,230,Country 110599,City,230,Country 110610,City,230,Country 110622,City,230,Country 110628,City,230,Country 110630,City,230,Country 110638,City,230,Country 110648,City,230,Country 110652,City,230,Country 110653,City,230,Country 110658,City,230,Country 110664,City,230,Country 110665,City,230,Country 110666,City,230,Country 110676,City,230,Country 110703,City,230,Country 110711,City,230,Country 110714,City,230,Country 110715,City,230,Country 110717,City,230,Country 110721,City,230,Country 110723,City,230,Country 110724,City,230,Country 110725,City,230,Country 110726,City,230,Country 110728,City,230,Country 110729,City,230,Country 110731,City,230,Country 110739,City,230,Country 110740,City,230,Country 110746,City,230,Country 110748,City,230,Country 110778,City,230,Country 110782,City,230,Country 110785,City,230,Country 110786,City,230,Country 110789,City,230,Country 110794,City,230,Country 110798,City,230,Country 110800,City,230,Country 110813,City,230,Country 110819,City,230,Country 110822,City,230,Country 110829,City,230,Country 110830,City,230,Country 110835,City,230,Country 110836,City,230,Country 110837,City,230,Country 110838,City,230,Country 110841,City,230,Country 110842,City,230,Country 110843,City,230,Country 110848,City,230,Country 110849,City,230,Country 110850,City,230,Country 110855,City,230,Country 110862,City,230,Country 110864,City,230,Country 110868,City,230,Country 110870,City,230,Country 109337,City,230,Country 109459,City,230,Country 109477,City,230,Country 109498,City,230,Country 109510,City,230,Country 109524,City,230,Country 109575,City,230,Country 109651,City,230,Country 109709,City,230,Country 109714,City,230,Country 109741,City,230,Country 109805,City,230,Country 109909,City,230,Country 109959,City,230,Country 109995,City,230,Country 110042,City,230,Country 110051,City,230,Country 110054,City,230,Country 110112,City,230,Country 110393,City,230,Country 110451,City,230,Country 110488,City,230,Country 110546,City,230,Country 110587,City,230,Country 110629,City,230,Country 110631,City,230,Country 110656,City,230,Country 110681,City,230,Country 110704,City,230,Country 110797,City,230,Country 110802,City,230,Country 110840,City,230,Country 110861,City,230,Country 110869,City,230,Country 109334,City,230,Country 109341,City,230,Country 109358,City,230,Country 109381,City,230,Country 109415,City,230,Country 109437,City,230,Country 109480,City,230,Country 109481,City,230,Country 109483,City,230,Country 109540,City,230,Country 109542,City,230,Country 109562,City,230,Country 109645,City,230,Country 109666,City,230,Country 109735,City,230,Country 109766,City,230,Country 109800,City,230,Country 109806,City,230,Country 109824,City,230,Country 109868,City,230,Country 109885,City,230,Country 109901,City,230,Country 109918,City,230,Country 109963,City,230,Country 110021,City,230,Country 110022,City,230,Country 110101,City,230,Country 110102,City,230,Country 110113,City,230,Country 110196,City,230,Country 110207,City,230,Country 110320,City,230,Country 110353,City,230,Country 110412,City,230,Country 110415,City,230,Country 110436,City,230,Country 110494,City,230,Country 110516,City,230,Country 110522,City,230,Country 110673,City,230,Country 110847,City,230,Country 109348,City,230,Country 109374,City,230,Country 109439,City,230,Country 109486,City,230,Country 109487,City,230,Country 109519,City,230,Country 109531,City,230,Country 109633,City,230,Country 109677,City,230,Country 109694,City,230,Country 109740,City,230,Country 109763,City,230,Country 109814,City,230,Country 109947,City,230,Country 110003,City,230,Country 110047,City,230,Country 110067,City,230,Country 110122,City,230,Country 110145,City,230,Country 110164,City,230,Country 110331,City,230,Country 110370,City,230,Country 110453,City,230,Country 110502,City,230,Country 110675,City,230,Country 110702,City,230,Country 110736,City,230,Country 110769,City,230,Country 110801,City,230,Country 110825,City,230,Country 109325,City,230,Country 109332,City,230,Country 109335,City,230,Country 109501,City,230,Country 109518,City,230,Country 109548,City,230,Country 109549,City,230,Country 109553,City,230,Country 109659,City,230,Country 109661,City,230,Country 109710,City,230,Country 109721,City,230,Country 109872,City,230,Country 109876,City,230,Country 109877,City,230,Country 109949,City,230,Country 109970,City,230,Country 109971,City,230,Country 109999,City,230,Country 110017,City,230,Country 110025,City,230,Country 110098,City,230,Country 110132,City,230,Country 110131,City,230,Country 110134,City,230,Country 110142,City,230,Country 110200,City,230,Country 110226,City,230,Country 110232,City,230,Country 110258,City,230,Country 110261,City,230,Country 110262,City,230,Country 110263,City,230,Country 110268,City,230,Country 110449,City,230,Country 110455,City,230,Country 110456,City,230,Country 110498,City,230,Country 110508,City,230,Country 110509,City,230,Country 110521,City,230,Country 110564,City,230,Country 110583,City,230,Country 110613,City,230,Country 110626,City,230,Country 110627,City,230,Country 110710,City,230,Country 110719,City,230,Country 110761,City,230,Country 110766,City,230,Country 110803,City,230,Country 110846,City,230,Country 109318,City,230,Country 109319,City,230,Country 109333,City,230,Country 109342,City,230,Country 109343,City,230,Country 109389,City,230,Country 109407,City,230,Country 109410,City,230,Country 109441,City,230,Country 109442,City,230,Country 109473,City,230,Country 109526,City,230,Country 109532,City,230,Country 109546,City,230,Country 109556,City,230,Country 109557,City,230,Country 109563,City,230,Country 109570,City,230,Country 109581,City,230,Country 109641,City,230,Country 109668,City,230,Country 109728,City,230,Country 109811,City,230,Country 109817,City,230,Country 109828,City,230,Country 109848,City,230,Country 109862,City,230,Country 109888,City,230,Country 109893,City,230,Country 109940,City,230,Country 109950,City,230,Country 109952,City,230,Country 109976,City,230,Country 109977,City,230,Country 109994,City,230,Country 109997,City,230,Country 110000,City,230,Country 110016,City,230,Country 110055,City,230,Country 110075,City,230,Country 110097,City,230,Country 110120,City,230,Country 110123,City,230,Country 110161,City,230,Country 110167,City,230,Country 110219,City,230,Country 110291,City,230,Country 110292,City,230,Country 110359,City,230,Country 110385,City,230,Country 110408,City,230,Country 110413,City,230,Country 110414,City,230,Country 110420,City,230,Country 110428,City,230,Country 110435,City,230,Country 110454,City,230,Country 110464,City,230,Country 110486,City,230,Country 110487,City,230,Country 110493,City,230,Country 110503,City,230,Country 110531,City,230,Country 110539,City,230,Country 110552,City,230,Country 110575,City,230,Country 110579,City,230,Country 110581,City,230,Country 110595,City,230,Country 110616,City,230,Country 110659,City,230,Country 110732,City,230,Country 110753,City,230,Country 110777,City,230,Country 110790,City,230,Country 110791,City,230,Country 110796,City,230,Country 110867,City,230,Country 109397,City,230,Country 109405,City,230,Country 109420,City,230,Country 109421,City,230,Country 109423,City,230,Country 109424,City,230,Country 109433,City,230,Country 109447,City,230,Country 109461,City,230,Country 109462,City,230,Country 109466,City,230,Country 109467,City,230,Country 109478,City,230,Country 109488,City,230,Country 109496,City,230,Country 109512,City,230,Country 109533,City,230,Country 109565,City,230,Country 109567,City,230,Country 109625,City,230,Country 109626,City,230,Country 109643,City,230,Country 109644,City,230,Country 109665,City,230,Country 109683,City,230,Country 109682,City,230,Country 109703,City,230,Country 109702,City,230,Country 109745,City,230,Country 109776,City,230,Country 109777,City,230,Country 109807,City,230,Country 109808,City,230,Country 109809,City,230,Country 109829,City,230,Country 109894,City,230,Country 109903,City,230,Country 109996,City,230,Country 110002,City,230,Country 110078,City,230,Country 110079,City,230,Country 110086,City,230,Country 110158,City,230,Country 110170,City,230,Country 110212,City,230,Country 110229,City,230,Country 110234,City,230,Country 110255,City,230,Country 110279,City,230,Country 110303,City,230,Country 110335,City,230,Country 110350,City,230,Country 110360,City,230,Country 110361,City,230,Country 110378,City,230,Country 110379,City,230,Country 110380,City,230,Country 110400,City,230,Country 110441,City,230,Country 110491,City,230,Country 110495,City,230,Country 110512,City,230,Country 110520,City,230,Country 110529,City,230,Country 110530,City,230,Country 110551,City,230,Country 110571,City,230,Country 110593,City,230,Country 110608,City,230,Country 110609,City,230,Country 110644,City,230,Country 110646,City,230,Country 110645,City,230,Country 110650,City,230,Country 110697,City,230,Country 110707,City,230,Country 110712,City,230,Country 110741,City,230,Country 110770,City,230,Country 110771,City,230,Country 110779,City,230,Country 110783,City,230,Country 110784,City,230,Country 110806,City,230,Country 110809,City,230,Country 110823,City,230,Country 109344,City,230,Country 109352,City,230,Country 109380,City,230,Country 109390,City,230,Country 109413,City,230,Country 109419,City,230,Country 109432,City,230,Country 109458,City,230,Country 109469,City,230,Country 109504,City,230,Country 109522,City,230,Country 109539,City,230,Country 109590,City,230,Country 109596,City,230,Country 109663,City,230,Country 109691,City,230,Country 109724,City,230,Country 109727,City,230,Country 109736,City,230,Country 109757,City,230,Country 109767,City,230,Country 109775,City,230,Country 109804,City,230,Country 109838,City,230,Country 109841,City,230,Country 109843,City,230,Country 109886,City,230,Country 109887,City,230,Country 109932,City,230,Country 109951,City,230,Country 109966,City,230,Country 109979,City,230,Country 109990,City,230,Country 109991,City,230,Country 110023,City,230,Country 110110,City,230,Country 110141,City,230,Country 110222,City,230,Country 110242,City,230,Country 110247,City,230,Country 110252,City,230,Country 110257,City,230,Country 110275,City,230,Country 110290,City,230,Country 110317,City,230,Country 110319,City,230,Country 110401,City,230,Country 110411,City,230,Country 110445,City,230,Country 110476,City,230,Country 110484,City,230,Country 110511,City,230,Country 110540,City,230,Country 110541,City,230,Country 110558,City,230,Country 110663,City,230,Country 110670,City,230,Country 110680,City,230,Country 110696,City,230,Country 110699,City,230,Country 110747,City,230,Country 110754,City,230,Country 110768,City,230,Country 110807,City,230,Country 110857,City,230,Country 110859,City,230,Country 109331,City,230,Country 109361,City,230,Country 109388,City,230,Country 109404,City,230,Country 109454,City,230,Country 109472,City,230,Country 109511,City,230,Country 109516,City,230,Country 109523,City,230,Country 109554,City,230,Country 109587,City,230,Country 109628,City,230,Country 109629,City,230,Country 109636,City,230,Country 109642,City,230,Country 109679,City,230,Country 109697,City,230,Country 109698,City,230,Country 109722,City,230,Country 109729,City,230,Country 109786,City,230,Country 109823,City,230,Country 109833,City,230,Country 109907,City,230,Country 109967,City,230,Country 109983,City,230,Country 110104,City,230,Country 110105,City,230,Country 110125,City,230,Country 110137,City,230,Country 110153,City,230,Country 110165,City,230,Country 110227,City,230,Country 110336,City,230,Country 110466,City,230,Country 110525,City,230,Country 110634,City,230,Country 110685,City,230,Country 110687,City,230,Country 110690,City,230,Country 110706,City,230,Country 110760,City,230,Country 110767,City,230,Country 110817,City,230,Country 109322,City,230,Country 109360,City,230,Country 109537,City,230,Country 109538,City,230,Country 109589,City,230,Country 109650,City,230,Country 109690,City,230,Country 109708,City,230,Country 109731,City,230,Country 109730,City,230,Country 109856,City,230,Country 109916,City,230,Country 109975,City,230,Country 110015,City,230,Country 110080,City,230,Country 110093,City,230,Country 110109,City,230,Country 110146,City,230,Country 110294,City,230,Country 110299,City,230,Country 110440,City,230,Country 110479,City,230,Country 110489,City,230,Country 110490,City,230,Country 110527,City,230,Country 110533,City,230,Country 110787,City,230,Country 110811,City,230,Country 110851,City,230,Country 109529,City,230,Country 109541,City,230,Country 109550,City,230,Country 109637,City,230,Country 109819,City,230,Country 109897,City,230,Country 110235,City,230,Country 110286,City,230,Country 110313,City,230,Country 110442,City,230,Country 110507,City,230,Country 110580,City,230,Country 109307,City,230,Country 109411,City,230,Country 109416,City,230,Country 109544,City,230,Country 109558,City,230,Country 109559,City,230,Country 109566,City,230,Country 109568,City,230,Country 109627,City,230,Country 109715,City,230,Country 109751,City,230,Country 109783,City,230,Country 109867,City,230,Country 109934,City,230,Country 109955,City,230,Country 109981,City,230,Country 109986,City,230,Country 110048,City,230,Country 110107,City,230,Country 110114,City,230,Country 110119,City,230,Country 110135,City,230,Country 110150,City,230,Country 110160,City,230,Country 110186,City,230,Country 110189,City,230,Country 110190,City,230,Country 110198,City,230,Country 110221,City,230,Country 110233,City,230,Country 110238,City,230,Country 110259,City,230,Country 110281,City,230,Country 110297,City,230,Country 110325,City,230,Country 110355,City,230,Country 110559,City,230,Country 110577,City,230,Country 110643,City,230,Country 110662,City,230,Country 110793,City,230,Country 110828,City,230,Country 110856,City,230,Country 110858,City,230,Country 109353,City,230,Country 109354,City,230,Country 109393,City,230,Country 109394,City,230,Country 109422,City,230,Country 109426,City,230,Country 109427,City,230,Country 109429,City,230,Country 109431,City,230,Country 109436,City,230,Country 109440,City,230,Country 109449,City,230,Country 109450,City,230,Country 109456,City,230,Country 109468,City,230,Country 109494,City,230,Country 109591,City,230,Country 109597,City,230,Country 109598,City,230,Country 109631,City,230,Country 109635,City,230,Country 109639,City,230,Country 109655,City,230,Country 109672,City,230,Country 109673,City,230,Country 109680,City,230,Country 109681,City,230,Country 109695,City,230,Country 109696,City,230,Country 109705,City,230,Country 109716,City,230,Country 109720,City,230,Country 109739,City,230,Country 109749,City,230,Country 109758,City,230,Country 109764,City,230,Country 109768,City,230,Country 109797,City,230,Country 109825,City,230,Country 109855,City,230,Country 109865,City,230,Country 109874,City,230,Country 109900,City,230,Country 109925,City,230,Country 109972,City,230,Country 109973,City,230,Country 110035,City,230,Country 110057,City,230,Country 110076,City,230,Country 110116,City,230,Country 110173,City,230,Country 110174,City,230,Country 110175,City,230,Country 110239,City,230,Country 110240,City,230,Country 110274,City,230,Country 110287,City,230,Country 110327,City,230,Country 110363,City,230,Country 110365,City,230,Country 110373,City,230,Country 110398,City,230,Country 110417,City,230,Country 110474,City,230,Country 110475,City,230,Country 110480,City,230,Country 110499,City,230,Country 110543,City,230,Country 110545,City,230,Country 110590,City,230,Country 110606,City,230,Country 110620,City,230,Country 110624,City,230,Country 110632,City,230,Country 110651,City,230,Country 110669,City,230,Country 110678,City,230,Country 110679,City,230,Country 110684,City,230,Country 110733,City,230,Country 110742,City,230,Country 110745,City,230,Country 110762,City,230,Country 110763,City,230,Country 110765,City,230,Country 110773,City,230,Country 110774,City,230,Country 110872,City,230,Country 110839,City,230,Country 109311,City,230,Country 109312,City,230,Country 109323,City,230,Country 109324,City,230,Country 109329,City,230,Country 109359,City,230,Country 109395,City,230,Country 109400,City,230,Country 109401,City,230,Country 109403,City,230,Country 109408,City,230,Country 109453,City,230,Country 109460,City,230,Country 109502,City,230,Country 109515,City,230,Country 109574,City,230,Country 109630,City,230,Country 109693,City,230,Country 109754,City,230,Country 109755,City,230,Country 109760,City,230,Country 109853,City,230,Country 109854,City,230,Country 109860,City,230,Country 109864,City,230,Country 109911,City,230,Country 109931,City,230,Country 109939,City,230,Country 109938,City,230,Country 109945,City,230,Country 109946,City,230,Country 109960,City,230,Country 109974,City,230,Country 110001,City,230,Country 110030,City,230,Country 110031,City,230,Country 110038,City,230,Country 110049,City,230,Country 110143,City,230,Country 110166,City,230,Country 110231,City,230,Country 110244,City,230,Country 110250,City,230,Country 110300,City,230,Country 110324,City,230,Country 110374,City,230,Country 110384,City,230,Country 110387,City,230,Country 110388,City,230,Country 110433,City,230,Country 110460,City,230,Country 110485,City,230,Country 110514,City,230,Country 110515,City,230,Country 110526,City,230,Country 110532,City,230,Country 110572,City,230,Country 110573,City,230,Country 110574,City,230,Country 110582,City,230,Country 110597,City,230,Country 110618,City,230,Country 110625,City,230,Country 110657,City,230,Country 110661,City,230,Country 110812,City,230,Country 110866,City,230,Country 110871,City,230,Country 109366,City,230,Country 109391,City,230,Country 109435,City,230,Country 109446,City,230,Country 109455,City,230,Country 109500,City,230,Country 109534,City,230,Country 109555,City,230,Country 109578,City,230,Country 109583,City,230,Country 109588,City,230,Country 109594,City,230,Country 109634,City,230,Country 109648,City,230,Country 109684,City,230,Country 109733,City,230,Country 109746,City,230,Country 109782,City,230,Country 109832,City,230,Country 109884,City,230,Country 109929,City,230,Country 109948,City,230,Country 110012,City,230,Country 110052,City,230,Country 110056,City,230,Country 110062,City,230,Country 110070,City,230,Country 110084,City,230,Country 110154,City,230,Country 110157,City,230,Country 110172,City,230,Country 110193,City,230,Country 110241,City,230,Country 110264,City,230,Country 110266,City,230,Country 110269,City,230,Country 110278,City,230,Country 110298,City,230,Country 110306,City,230,Country 110330,City,230,Country 110344,City,230,Country 110347,City,230,Country 110352,City,230,Country 110357,City,230,Country 110376,City,230,Country 110386,City,230,Country 110390,City,230,Country 110391,City,230,Country 110397,City,230,Country 110405,City,230,Country 110438,City,230,Country 110447,City,230,Country 110458,City,230,Country 110470,City,230,Country 110471,City,230,Country 110472,City,230,Country 110478,City,230,Country 110500,City,230,Country 110510,City,230,Country 110535,City,230,Country 110537,City,230,Country 110538,City,230,Country 110542,City,230,Country 110547,City,230,Country 110557,City,230,Country 110561,City,230,Country 110562,City,230,Country 110623,City,230,Country 110635,City,230,Country 110639,City,230,Country 110649,City,230,Country 110655,City,230,Country 110700,City,230,Country 110701,City,230,Country 110705,City,230,Country 110709,City,230,Country 110749,City,230,Country 110792,City,230,Country 110845,City,230,Country 110852,City,230,Country 110860,City,230,Country 109326,City,230,Country 109355,City,230,Country 109378,City,230,Country 109382,City,230,Country 109569,City,230,Country 109723,City,230,Country 109765,City,230,Country 109815,City,230,Country 109875,City,230,Country 109958,City,230,Country 110066,City,230,Country 110071,City,230,Country 110106,City,230,Country 110159,City,230,Country 110176,City,230,Country 110185,City,230,Country 110187,City,230,Country 110228,City,230,Country 110251,City,230,Country 110267,City,230,Country 110396,City,230,Country 110443,City,230,Country 110492,City,230,Country 110716,City,230,Country 110751,City,230,Country 110752,City,230,Country 110805,City,230,Country 109330,City,230,Country 109346,City,230,Country 109347,City,230,Country 109379,City,230,Country 109386,City,230,Country 109396,City,230,Country 109406,City,230,Country 109425,City,230,Country 109428,City,230,Country 109448,City,230,Country 109513,City,230,Country 109545,City,230,Country 109601,City,230,Country 109646,City,230,Country 109678,City,230,Country 109687,City,230,Country 109699,City,230,Country 109713,City,230,Country 109717,City,230,Country 109747,City,230,Country 109769,City,230,Country 109770,City,230,Country 109847,City,230,Country 109859,City,230,Country 109878,City,230,Country 109880,City,230,Country 109883,City,230,Country 109889,City,230,Country 109953,City,230,Country 109962,City,230,Country 110009,City,230,Country 110072,City,230,Country 110073,City,230,Country 110117,City,230,Country 110177,City,230,Country 110181,City,230,Country 110188,City,230,Country 110213,City,230,Country 110218,City,230,Country 110253,City,230,Country 110276,City,230,Country 110285,City,230,Country 110284,City,230,Country 110351,City,230,Country 110377,City,230,Country 110404,City,230,Country 110406,City,230,Country 110410,City,230,Country 110425,City,230,Country 110426,City,230,Country 110427,City,230,Country 110444,City,230,Country 110457,City,230,Country 110482,City,230,Country 110534,City,230,Country 110548,City,230,Country 110550,City,230,Country 110591,City,230,Country 110592,City,230,Country 110594,City,230,Country 110598,City,230,Country 110660,City,230,Country 110686,City,230,Country 110693,City,230,Country 110755,City,230,Country 110759,City,230,Country 110804,City,230,Country 110808,City,230,Country 110810,City,230,Country 110815,City,230,Country 110826,City,230,Country 110827,City,230,Country 110865,City,230,Country 109535,City,230,Country 109584,City,230,Country 109586,City,230,Country 109652,City,230,Country 109654,City,230,Country 109762,City,230,Country 109773,City,230,Country 109778,City,230,Country 109795,City,230,Country 109813,City,230,Country 110041,City,230,Country 110043,City,230,Country 110044,City,230,Country 110205,City,230,Country 110208,City,230,Country 110210,City,230,Country 110339,City,230,Country 110354,City,230,Country 110356,City,230,Country 110364,City,230,Country 110407,City,230,Country 110589,City,230,Country 110642,City,230,Country 110672,City,230,Country 110691,City,230,Country 110735,City,230,Country 110824,City,230,Country 110833,City,230,Country 110834,City,230,Country 109402,City,230,Country 109430,City,230,Country 109463,City,230,Country 109580,City,230,Country 109632,City,230,Country 109789,City,230,Country 109846,City,230,Country 109866,City,230,Country 109898,City,230,Country 109908,City,230,Country 109956,City,230,Country 110024,City,230,Country 110087,City,230,Country 110169,City,230,Country 110180,City,230,Country 110332,City,230,Country 110368,City,230,Country 110369,City,230,Country 110424,City,230,Country 110429,City,230,Country 110450,City,230,Country 110483,City,230,Country 110563,City,230,Country 110604,City,230,Country 110621,City,230,Country 110688,City,230,Country 110708,City,230,Country 110744,City,230,Country 110781,City,230,Country 110799,City,230,Country 109362,City,230,Country 109434,City,230,Country 109457,City,230,Country 109517,City,230,Country 109579,City,230,Country 109657,City,230,Country 109662,City,230,Country 109738,City,230,Country 109793,City,230,Country 109826,City,230,Country 109858,City,230,Country 109904,City,230,Country 110029,City,230,Country 110163,City,230,Country 110216,City,230,Country 110256,City,230,Country 110265,City,230,Country 110270,City,230,Country 110282,City,230,Country 110467,City,230,Country 110468,City,230,Country 110601,City,230,Country 110602,City,230,Country 110619,City,230,Country 110682,City,230,Country 110772,City,230,Country 110814,City,230,Country 110818,City,230,Country 110831,City,230,Country 110832,City,230,Country 110863,City,230,Country 110873,City,230,Country 109349,City,230,Country 109351,City,230,Country 109387,City,230,Country 109443,City,230,Country 109445,City,230,Country 109475,City,230,Country 109484,City,230,Country 109485,City,230,Country 109530,City,230,Country 109624,City,230,Country 109667,City,230,Country 109704,City,230,Country 109732,City,230,Country 109759,City,230,Country 109792,City,230,Country 109827,City,230,Country 109879,City,230,Country 109902,City,230,Country 109921,City,230,Country 109922,City,230,Country 109957,City,230,Country 110045,City,230,Country 110060,City,230,Country 110063,City,230,Country 110091,City,230,Country 110108,City,230,Country 110171,City,230,Country 110199,City,230,Country 110230,City,230,Country 110288,City,230,Country 110289,City,230,Country 110419,City,230,Country 110430,City,230,Country 110496,City,230,Country 110566,City,230,Country 110600,City,230,Country 110614,City,230,Country 110617,City,230,Country 110633,City,230,Country 110636,City,230,Country 110637,City,230,Country 110647,City,230,Country 110654,City,230,Country 110671,City,230,Country 110698,City,230,Country 110720,City,230,Country 110722,City,230,Country 110727,City,230,Country 110743,City,230,Country 110780,City,230,Country 110844,City,230,Country 109377,City,230,Country 109409,City,230,Country 109656,City,230,Country 109653,City,230,Country 109712,City,230,Country 109756,City,230,Country 109820,City,230,Country 109821,City,230,Country 109924,City,230,Country 109928,City,230,Country 109943,City,230,Country 109944,City,230,Country 109964,City,230,Country 109965,City,230,Country 109992,City,230,Country 109993,City,230,Country 110152,City,230,Country 110162,City,230,Country 110195,City,230,Country 110273,City,230,Country 110342,City,230,Country 110345,City,230,Country 110346,City,230,Country 110381,City,230,Country 110431,City,230,Country 110432,City,230,Country 110528,City,230,Country 110578,City,230,Country 110734,City,230,Country 109357,City,230,Country 109373,City,230,Country 109375,City,230,Country 109376,City,230,Country 109383,City,230,Country 109385,City,230,Country 109398,City,230,Country 109414,City,230,Country 109418,City,230,Country 109464,City,230,Country 109508,City,230,Country 109525,City,230,Country 109573,City,230,Country 109576,City,230,Country 109585,City,230,Country 109640,City,230,Country 109674,City,230,Country 109675,City,230,Country 109686,City,230,Country 109706,City,230,Country 109711,City,230,Country 109742,City,230,Country 109743,City,230,Country 109744,City,230,Country 109772,City,230,Country 109791,City,230,Country 109799,City,230,Country 109810,City,230,Country 109873,City,230,Country 109891,City,230,Country 109896,City,230,Country 109905,City,230,Country 109906,City,230,Country 109930,City,230,Country 109954,City,230,Country 109961,City,230,Country 110039,City,230,Country 110040,City,230,Country 110058,City,230,Country 110059,City,230,Country 110065,City,230,Country 110074,City,230,Country 110090,City,230,Country 110092,City,230,Country 110094,City,230,Country 110111,City,230,Country 110168,City,230,Country 110192,City,230,Country 110197,City,230,Country 110236,City,230,Country 110237,City,230,Country 110271,City,230,Country 110304,City,230,Country 110334,City,230,Country 110340,City,230,Country 110341,City,230,Country 110343,City,230,Country 110362,City,230,Country 110422,City,230,Country 110423,City,230,Country 110513,City,230,Country 110554,City,230,Country 110555,City,230,Country 110569,City,230,Country 110570,City,230,Country 110584,City,230,Country 110585,City,230,Country 110607,City,230,Country 110640,City,230,Country 110667,City,230,Country 110668,City,230,Country 110674,City,230,Country 110689,City,230,Country 110694,City,230,Country 110695,City,230,Country 110737,City,230,Country 110738,City,230,Country 110756,City,230,Country 110757,City,230,Country 110758,City,230,Country 110764,City,230,Country 110788,City,230,Country 109345,City,230,Country 109367,City,230,Country 109369,City,230,Country 109368,City,230,Country 109471,City,230,Country 109482,City,230,Country 109551,City,230,Country 109552,City,230,Country 109595,City,230,Country 109660,City,230,Country 109748,City,230,Country 109785,City,230,Country 109787,City,230,Country 109816,City,230,Country 109892,City,230,Country 109895,City,230,Country 109899,City,230,Country 109978,City,230,Country 109980,City,230,Country 109984,City,230,Country 110008,City,230,Country 110018,City,230,Country 110019,City,230,Country 110068,City,230,Country 110069,City,230,Country 110121,City,230,Country 110133,City,230,Country 110151,City,230,Country 110203,City,230,Country 110211,City,230,Country 110293,City,230,Country 110309,City,230,Country 110318,City,230,Country 110322,City,230,Country 110321,City,230,Country 110323,City,230,Country 110382,City,230,Country 110383,City,230,Country 110603,City,230,Country 110605,City,230,Country 110611,City,230,Country 110612,City,230,Country 110641,City,230,Country 110677,City,230,Country 110683,City,230,Country 110692,City,230,Country 110713,City,230,Country 110718,City,230,Country 110730,City,230,Country 110750,City,230,Country 110775,City,230,Country 110776,City,230,Country 110816,City,230,Country 110821,City,230,Country 110820,City,230,Country 109320,City,230,Country 109321,City,230,Country 109350,City,230,Country 109370,City,230,Country 109371,City,230,Country 109392,City,230,Country 109451,City,230,Country 109452,City,230,Country 109465,City,230,Country 109479,City,230,Country 109495,City,230,Country 109499,City,230,Country 109509,City,230,Country 109514,City,230,Country 109520,City,230,Country 109521,City,230,Country 109536,City,230,Country 109572,City,230,Country 109638,City,230,Country 109647,City,230,Country 109649,City,230,Country 109658,City,230,Country 109737,City,230,Country 109798,City,230,Country 109801,City,230,Country 109802,City,230,Country 109803,City,230,Country 109923,City,230,Country 109941,City,230,Country 109942,City,230,Country 109988,City,230,Country 109989,City,230,Country 110081,City,230,Country 110082,City,230,Country 110103,City,230,Country 110115,City,230,Country 110128,City,230,Country 110194,City,230,Country 110214,City,230,Country 110215,City,230,Country 110217,City,230,Country 110246,City,230,Country 110296,City,230,Country 110301,City,230,Country 110302,City,230,Country 110328,City,230,Country 110337,City,230,Country 110338,City,230,Country 110366,City,230,Country 110394,City,230,Country 110544,City,230,Country 110615,City,230,Country 110795,City,230,Country 110853,City,230,Country 110854,City,230,Country 48157,City,232,Country 48158,City,232,Country 48159,City,232,Country 48160,City,232,Country 48161,City,232,Country 48174,City,232,Country 48184,City,232,Country 48186,City,232,Country 48187,City,232,Country 48188,City,232,Country 48189,City,232,Country 48190,City,232,Country 48191,City,232,Country 48192,City,232,Country 48193,City,232,Country 48194,City,232,Country 48196,City,232,Country 48197,City,232,Country 48198,City,232,Country 48199,City,232,Country 48202,City,232,Country 48204,City,232,Country 48205,City,232,Country 48206,City,232,Country 48207,City,232,Country 48208,City,232,Country 48209,City,232,Country 48210,City,232,Country 48211,City,232,Country 48212,City,232,Country 48213,City,232,Country 48214,City,232,Country 48215,City,232,Country 48217,City,232,Country 48219,City,232,Country 48221,City,232,Country 48224,City,232,Country 48226,City,232,Country 48227,City,232,Country 48228,City,232,Country 48229,City,232,Country 48230,City,232,Country 48231,City,232,Country 48232,City,232,Country 48233,City,232,Country 48235,City,232,Country 48236,City,232,Country 48237,City,232,Country 48239,City,232,Country 48240,City,232,Country 48241,City,232,Country 48242,City,232,Country 48243,City,232,Country 48244,City,232,Country 48247,City,232,Country 48248,City,232,Country 48249,City,232,Country 48252,City,232,Country 48256,City,232,Country 48257,City,232,Country 48261,City,232,Country 48262,City,232,Country 48263,City,232,Country 48264,City,232,Country 48265,City,232,Country 48267,City,232,Country 48270,City,232,Country 48275,City,232,Country 48279,City,232,Country 48280,City,232,Country 48281,City,232,Country 48282,City,232,Country 48283,City,232,Country 48284,City,232,Country 48285,City,232,Country 48286,City,232,Country 48287,City,232,Country 48288,City,232,Country 48289,City,232,Country 48290,City,232,Country 48292,City,232,Country 48293,City,232,Country 48294,City,232,Country 48296,City,232,Country 48295,City,232,Country 48297,City,232,Country 48298,City,232,Country 48299,City,232,Country 48300,City,232,Country 48301,City,232,Country 48302,City,232,Country 48303,City,232,Country 48304,City,232,Country 48305,City,232,Country 48306,City,232,Country 48307,City,232,Country 48308,City,232,Country 48309,City,232,Country 48310,City,232,Country 48311,City,232,Country 48315,City,232,Country 48316,City,232,Country 48317,City,232,Country 48318,City,232,Country 48319,City,232,Country 48321,City,232,Country 48322,City,232,Country 48323,City,232,Country 48324,City,232,Country 48325,City,232,Country 48326,City,232,Country 48327,City,232,Country 48329,City,232,Country 48330,City,232,Country 48331,City,232,Country 48332,City,232,Country 48333,City,232,Country 48334,City,232,Country 48336,City,232,Country 48337,City,232,Country 48338,City,232,Country 48339,City,232,Country 48341,City,232,Country 48342,City,232,Country 48362,City,232,Country 48363,City,232,Country 48364,City,232,Country 48365,City,232,Country 48367,City,232,Country 48372,City,232,Country 48375,City,232,Country 48377,City,232,Country 48378,City,232,Country 48379,City,232,Country 48380,City,232,Country 48381,City,232,Country 48382,City,232,Country 48385,City,232,Country 48386,City,232,Country 48387,City,232,Country 48388,City,232,Country 48389,City,232,Country 48390,City,232,Country 48391,City,232,Country 48392,City,232,Country 48394,City,232,Country 48395,City,232,Country 48396,City,232,Country 48397,City,232,Country 48398,City,232,Country 48399,City,232,Country 48400,City,232,Country 48401,City,232,Country 48402,City,232,Country 48403,City,232,Country 48404,City,232,Country 48405,City,232,Country 48408,City,232,Country 48409,City,232,Country 48410,City,232,Country 48411,City,232,Country 48412,City,232,Country 48414,City,232,Country 48415,City,232,Country 48416,City,232,Country 48417,City,232,Country 48418,City,232,Country 48419,City,232,Country 48420,City,232,Country 48421,City,232,Country 48422,City,232,Country 48423,City,232,Country 48424,City,232,Country 48425,City,232,Country 48426,City,232,Country 48427,City,232,Country 48429,City,232,Country 48430,City,232,Country 48431,City,232,Country 48432,City,232,Country 48433,City,232,Country 48434,City,232,Country 48435,City,232,Country 48436,City,232,Country 48437,City,232,Country 48438,City,232,Country 48442,City,232,Country 48443,City,232,Country 48444,City,232,Country 48445,City,232,Country 48446,City,232,Country 48447,City,232,Country 48449,City,232,Country 48450,City,232,Country 48453,City,232,Country 48454,City,232,Country 48455,City,232,Country 48457,City,232,Country 48459,City,232,Country 48461,City,232,Country 48464,City,232,Country 48465,City,232,Country 48466,City,232,Country 48467,City,232,Country 48468,City,232,Country 48469,City,232,Country 48470,City,232,Country 48473,City,232,Country 48474,City,232,Country 48475,City,232,Country 48476,City,232,Country 48477,City,232,Country 48478,City,232,Country 48479,City,232,Country 48480,City,232,Country 48482,City,232,Country 48483,City,232,Country 48486,City,232,Country 48487,City,232,Country 48488,City,232,Country 48489,City,232,Country 48490,City,232,Country 48491,City,232,Country 48492,City,232,Country 48493,City,232,Country 48494,City,232,Country 48495,City,232,Country 48496,City,232,Country 48497,City,232,Country 48498,City,232,Country 48500,City,232,Country 48501,City,232,Country 48502,City,232,Country 48503,City,232,Country 48504,City,232,Country 48505,City,232,Country 48506,City,232,Country 48507,City,232,Country 48508,City,232,Country 48509,City,232,Country 48510,City,232,Country 48511,City,232,Country 48512,City,232,Country 48514,City,232,Country 48515,City,232,Country 48516,City,232,Country 48517,City,232,Country 48518,City,232,Country 48519,City,232,Country 48520,City,232,Country 48521,City,232,Country 48522,City,232,Country 48523,City,232,Country 48524,City,232,Country 48525,City,232,Country 48527,City,232,Country 48528,City,232,Country 48529,City,232,Country 48530,City,232,Country 48531,City,232,Country 48532,City,232,Country 48534,City,232,Country 48535,City,232,Country 48536,City,232,Country 48538,City,232,Country 48539,City,232,Country 48540,City,232,Country 48541,City,232,Country 48543,City,232,Country 48544,City,232,Country 48545,City,232,Country 48546,City,232,Country 48547,City,232,Country 48548,City,232,Country 48550,City,232,Country 48551,City,232,Country 48554,City,232,Country 48559,City,232,Country 48561,City,232,Country 48563,City,232,Country 48564,City,232,Country 48565,City,232,Country 48566,City,232,Country 48567,City,232,Country 48568,City,232,Country 48569,City,232,Country 48570,City,232,Country 48571,City,232,Country 48572,City,232,Country 48573,City,232,Country 48574,City,232,Country 48575,City,232,Country 48576,City,232,Country 48577,City,232,Country 48578,City,232,Country 48582,City,232,Country 48583,City,232,Country 48584,City,232,Country 48585,City,232,Country 48586,City,232,Country 48587,City,232,Country 48588,City,232,Country 48589,City,232,Country 48593,City,232,Country 48594,City,232,Country 48595,City,232,Country 48596,City,232,Country 48597,City,232,Country 48598,City,232,Country 48599,City,232,Country 48600,City,232,Country 48601,City,232,Country 48602,City,232,Country 48603,City,232,Country 48604,City,232,Country 48605,City,232,Country 48606,City,232,Country 48607,City,232,Country 48608,City,232,Country 48609,City,232,Country 48610,City,232,Country 48611,City,232,Country 48612,City,232,Country 48614,City,232,Country 48615,City,232,Country 48616,City,232,Country 48617,City,232,Country 48619,City,232,Country 48620,City,232,Country 48621,City,232,Country 48622,City,232,Country 48623,City,232,Country 48624,City,232,Country 48625,City,232,Country 48626,City,232,Country 48627,City,232,Country 48628,City,232,Country 48629,City,232,Country 48630,City,232,Country 48631,City,232,Country 48632,City,232,Country 48634,City,232,Country 48635,City,232,Country 48636,City,232,Country 48637,City,232,Country 48638,City,232,Country 48639,City,232,Country 48640,City,232,Country 48642,City,232,Country 48643,City,232,Country 48644,City,232,Country 48645,City,232,Country 48646,City,232,Country 48647,City,232,Country 48648,City,232,Country 48649,City,232,Country 48650,City,232,Country 48651,City,232,Country 48652,City,232,Country 48653,City,232,Country 48654,City,232,Country 48655,City,232,Country 48656,City,232,Country 48657,City,232,Country 48658,City,232,Country 48659,City,232,Country 48660,City,232,Country 48661,City,232,Country 48662,City,232,Country 48663,City,232,Country 48664,City,232,Country 48665,City,232,Country 48666,City,232,Country 48667,City,232,Country 48668,City,232,Country 48671,City,232,Country 48672,City,232,Country 48673,City,232,Country 48674,City,232,Country 48675,City,232,Country 48676,City,232,Country 48677,City,232,Country 48678,City,232,Country 48679,City,232,Country 48685,City,232,Country 48686,City,232,Country 48687,City,232,Country 48688,City,232,Country 48689,City,232,Country 48690,City,232,Country 48691,City,232,Country 48692,City,232,Country 48693,City,232,Country 48694,City,232,Country 48695,City,232,Country 48696,City,232,Country 48698,City,232,Country 48699,City,232,Country 48700,City,232,Country 48701,City,232,Country 48702,City,232,Country 48703,City,232,Country 48704,City,232,Country 48706,City,232,Country 48707,City,232,Country 48708,City,232,Country 48709,City,232,Country 48710,City,232,Country 48711,City,232,Country 48712,City,232,Country 48713,City,232,Country 48714,City,232,Country 48715,City,232,Country 48716,City,232,Country 48717,City,232,Country 48718,City,232,Country 48719,City,232,Country 48720,City,232,Country 48721,City,232,Country 48722,City,232,Country 48723,City,232,Country 48725,City,232,Country 48726,City,232,Country 48727,City,232,Country 48729,City,232,Country 48731,City,232,Country 48732,City,232,Country 48733,City,232,Country 48735,City,232,Country 48736,City,232,Country 48742,City,232,Country 48743,City,232,Country 48744,City,232,Country 48746,City,232,Country 48748,City,232,Country 48749,City,232,Country 48751,City,232,Country 48752,City,232,Country 48753,City,232,Country 48754,City,232,Country 48755,City,232,Country 48757,City,232,Country 48758,City,232,Country 48759,City,232,Country 48760,City,232,Country 48761,City,232,Country 48762,City,232,Country 48763,City,232,Country 48764,City,232,Country 48765,City,232,Country 48766,City,232,Country 48767,City,232,Country 48769,City,232,Country 48770,City,232,Country 48771,City,232,Country 48772,City,232,Country 48773,City,232,Country 48774,City,232,Country 48775,City,232,Country 48776,City,232,Country 48777,City,232,Country 48778,City,232,Country 48779,City,232,Country 48781,City,232,Country 48782,City,232,Country 48783,City,232,Country 48785,City,232,Country 48786,City,232,Country 48787,City,232,Country 48788,City,232,Country 48789,City,232,Country 48790,City,232,Country 48792,City,232,Country 48791,City,232,Country 48793,City,232,Country 48794,City,232,Country 48795,City,232,Country 48796,City,232,Country 48797,City,232,Country 48798,City,232,Country 48799,City,232,Country 48801,City,232,Country 48803,City,232,Country 48804,City,232,Country 48805,City,232,Country 48806,City,232,Country 48807,City,232,Country 48808,City,232,Country 48809,City,232,Country 48818,City,232,Country 48819,City,232,Country 48820,City,232,Country 48823,City,232,Country 48826,City,232,Country 48827,City,232,Country 48828,City,232,Country 48829,City,232,Country 48830,City,232,Country 48831,City,232,Country 48832,City,232,Country 48833,City,232,Country 48834,City,232,Country 48835,City,232,Country 48837,City,232,Country 48838,City,232,Country 48839,City,232,Country 48841,City,232,Country 48842,City,232,Country 48843,City,232,Country 48844,City,232,Country 48845,City,232,Country 48846,City,232,Country 48847,City,232,Country 48849,City,232,Country 48851,City,232,Country 48850,City,232,Country 48852,City,232,Country 48856,City,232,Country 48859,City,232,Country 48860,City,232,Country 48865,City,232,Country 48874,City,232,Country 48875,City,232,Country 48876,City,232,Country 48877,City,232,Country 48879,City,232,Country 48880,City,232,Country 48883,City,232,Country 48886,City,232,Country 48888,City,232,Country 48889,City,232,Country 48890,City,232,Country 48891,City,232,Country 48893,City,232,Country 48894,City,232,Country 48895,City,232,Country 48897,City,232,Country 48898,City,232,Country 48899,City,232,Country 48900,City,232,Country 48903,City,232,Country 48904,City,232,Country 48905,City,232,Country 48906,City,232,Country 48907,City,232,Country 48908,City,232,Country 48909,City,232,Country 48910,City,232,Country 48911,City,232,Country 48912,City,232,Country 48913,City,232,Country 48914,City,232,Country 48916,City,232,Country 48915,City,232,Country 48918,City,232,Country 48919,City,232,Country 48920,City,232,Country 48921,City,232,Country 48922,City,232,Country 48923,City,232,Country 48925,City,232,Country 48926,City,232,Country 48927,City,232,Country 48928,City,232,Country 48929,City,232,Country 48930,City,232,Country 48931,City,232,Country 48932,City,232,Country 48933,City,232,Country 48934,City,232,Country 48935,City,232,Country 48936,City,232,Country 48937,City,232,Country 48938,City,232,Country 48939,City,232,Country 48940,City,232,Country 48941,City,232,Country 48942,City,232,Country 48943,City,232,Country 48944,City,232,Country 48945,City,232,Country 48946,City,232,Country 48947,City,232,Country 48949,City,232,Country 48950,City,232,Country 48951,City,232,Country 48952,City,232,Country 48953,City,232,Country 48954,City,232,Country 48955,City,232,Country 48956,City,232,Country 48957,City,232,Country 48958,City,232,Country 48959,City,232,Country 48960,City,232,Country 48961,City,232,Country 48962,City,232,Country 48963,City,232,Country 48964,City,232,Country 48965,City,232,Country 48966,City,232,Country 48967,City,232,Country 48968,City,232,Country 48969,City,232,Country 48970,City,232,Country 48971,City,232,Country 48972,City,232,Country 48973,City,232,Country 48974,City,232,Country 48975,City,232,Country 48978,City,232,Country 48979,City,232,Country 48980,City,232,Country 48981,City,232,Country 48982,City,232,Country 48983,City,232,Country 48984,City,232,Country 48985,City,232,Country 48986,City,232,Country 48987,City,232,Country 48988,City,232,Country 48990,City,232,Country 48991,City,232,Country 48992,City,232,Country 48993,City,232,Country 48994,City,232,Country 48995,City,232,Country 48996,City,232,Country 48997,City,232,Country 48998,City,232,Country 48999,City,232,Country 49000,City,232,Country 49001,City,232,Country 49002,City,232,Country 49003,City,232,Country 49004,City,232,Country 49007,City,232,Country 49009,City,232,Country 49010,City,232,Country 49011,City,232,Country 49012,City,232,Country 49013,City,232,Country 49016,City,232,Country 49017,City,232,Country 49018,City,232,Country 49019,City,232,Country 49021,City,232,Country 49022,City,232,Country 49024,City,232,Country 49023,City,232,Country 49025,City,232,Country 49026,City,232,Country 49027,City,232,Country 49028,City,232,Country 49030,City,232,Country 49031,City,232,Country 49032,City,232,Country 49033,City,232,Country 49034,City,232,Country 49035,City,232,Country 49036,City,232,Country 49037,City,232,Country 49038,City,232,Country 49039,City,232,Country 49040,City,232,Country 49041,City,232,Country 49047,City,232,Country 49049,City,232,Country 49050,City,232,Country 49052,City,232,Country 49053,City,232,Country 49054,City,232,Country 49055,City,232,Country 49056,City,232,Country 49058,City,232,Country 49059,City,232,Country 49061,City,232,Country 49062,City,232,Country 49063,City,232,Country 49064,City,232,Country 49066,City,232,Country 49068,City,232,Country 49070,City,232,Country 49071,City,232,Country 49072,City,232,Country 49073,City,232,Country 49074,City,232,Country 49075,City,232,Country 49076,City,232,Country 49077,City,232,Country 49079,City,232,Country 49080,City,232,Country 49082,City,232,Country 49083,City,232,Country 49084,City,232,Country 49086,City,232,Country 49087,City,232,Country 49088,City,232,Country 49089,City,232,Country 49092,City,232,Country 49094,City,232,Country 49095,City,232,Country 49097,City,232,Country 49098,City,232,Country 49099,City,232,Country 49100,City,232,Country 49101,City,232,Country 49102,City,232,Country 49103,City,232,Country 49104,City,232,Country 49105,City,232,Country 49106,City,232,Country 49107,City,232,Country 49108,City,232,Country 49109,City,232,Country 49110,City,232,Country 49111,City,232,Country 49112,City,232,Country 49113,City,232,Country 49114,City,232,Country 49115,City,232,Country 49116,City,232,Country 49117,City,232,Country 49118,City,232,Country 49119,City,232,Country 49120,City,232,Country 49121,City,232,Country 49126,City,232,Country 49127,City,232,Country 49128,City,232,Country 49131,City,232,Country 49132,City,232,Country 49134,City,232,Country 49135,City,232,Country 49136,City,232,Country 49138,City,232,Country 49141,City,232,Country 49142,City,232,Country 49143,City,232,Country 49144,City,232,Country 49145,City,232,Country 49146,City,232,Country 49147,City,232,Country 49148,City,232,Country 49149,City,232,Country 49150,City,232,Country 49151,City,232,Country 49152,City,232,Country 49153,City,232,Country 49154,City,232,Country 49155,City,232,Country 49157,City,232,Country 49159,City,232,Country 49161,City,232,Country 49163,City,232,Country 49164,City,232,Country 49166,City,232,Country 49167,City,232,Country 49168,City,232,Country 49169,City,232,Country 49170,City,232,Country 49171,City,232,Country 49173,City,232,Country 49179,City,232,Country 49180,City,232,Country 49181,City,232,Country 49182,City,232,Country 49183,City,232,Country 49184,City,232,Country 49186,City,232,Country 49190,City,232,Country 49193,City,232,Country 49194,City,232,Country 49195,City,232,Country 49196,City,232,Country 49197,City,232,Country 49199,City,232,Country 49201,City,232,Country 49205,City,232,Country 49207,City,232,Country 49210,City,232,Country 49212,City,232,Country 49214,City,232,Country 49219,City,232,Country 49227,City,232,Country 49228,City,232,Country 49229,City,232,Country 49230,City,232,Country 49232,City,232,Country 49233,City,232,Country 49234,City,232,Country 49235,City,232,Country 49236,City,232,Country 49237,City,232,Country 49238,City,232,Country 49239,City,232,Country 49240,City,232,Country 49241,City,232,Country 49243,City,232,Country 49244,City,232,Country 49245,City,232,Country 49246,City,232,Country 49247,City,232,Country 49248,City,232,Country 49249,City,232,Country 49250,City,232,Country 49251,City,232,Country 49252,City,232,Country 49253,City,232,Country 49257,City,232,Country 49258,City,232,Country 49261,City,232,Country 49262,City,232,Country 49263,City,232,Country 49264,City,232,Country 49267,City,232,Country 49268,City,232,Country 49269,City,232,Country 49270,City,232,Country 49274,City,232,Country 49275,City,232,Country 49276,City,232,Country 49277,City,232,Country 49278,City,232,Country 49279,City,232,Country 49280,City,232,Country 49281,City,232,Country 49282,City,232,Country 49283,City,232,Country 49284,City,232,Country 49287,City,232,Country 49288,City,232,Country 49289,City,232,Country 49290,City,232,Country 49291,City,232,Country 49292,City,232,Country 49293,City,232,Country 49294,City,232,Country 49295,City,232,Country 49297,City,232,Country 49298,City,232,Country 49299,City,232,Country 49303,City,232,Country 49304,City,232,Country 49305,City,232,Country 49306,City,232,Country 49307,City,232,Country 49308,City,232,Country 49309,City,232,Country 49311,City,232,Country 49312,City,232,Country 49313,City,232,Country 49316,City,232,Country 49317,City,232,Country 49318,City,232,Country 49319,City,232,Country 49320,City,232,Country 49322,City,232,Country 49324,City,232,Country 49326,City,232,Country 49327,City,232,Country 49329,City,232,Country 49331,City,232,Country 49333,City,232,Country 49334,City,232,Country 49335,City,232,Country 49336,City,232,Country 49338,City,232,Country 49339,City,232,Country 49345,City,232,Country 49351,City,232,Country 49355,City,232,Country 49357,City,232,Country 49360,City,232,Country 49363,City,232,Country 49364,City,232,Country 49366,City,232,Country 49367,City,232,Country 49368,City,232,Country 49371,City,232,Country 49373,City,232,Country 49375,City,232,Country 49376,City,232,Country 49377,City,232,Country 49378,City,232,Country 49379,City,232,Country 49380,City,232,Country 49382,City,232,Country 49383,City,232,Country 49385,City,232,Country 49386,City,232,Country 49387,City,232,Country 49388,City,232,Country 49390,City,232,Country 49391,City,232,Country 49392,City,232,Country 49393,City,232,Country 49395,City,232,Country 49396,City,232,Country 49397,City,232,Country 49398,City,232,Country 49399,City,232,Country 49400,City,232,Country 49402,City,232,Country 49405,City,232,Country 49406,City,232,Country 49407,City,232,Country 49408,City,232,Country 49410,City,232,Country 49411,City,232,Country 49412,City,232,Country 49415,City,232,Country 49416,City,232,Country 49417,City,232,Country 49418,City,232,Country 49419,City,232,Country 49420,City,232,Country 49421,City,232,Country 49422,City,232,Country 49423,City,232,Country 49425,City,232,Country 49426,City,232,Country 49427,City,232,Country 49428,City,232,Country 49429,City,232,Country 49430,City,232,Country 49432,City,232,Country 49433,City,232,Country 49434,City,232,Country 49435,City,232,Country 49436,City,232,Country 49437,City,232,Country 49438,City,232,Country 49439,City,232,Country 49440,City,232,Country 49442,City,232,Country 49443,City,232,Country 49444,City,232,Country 49445,City,232,Country 49447,City,232,Country 49448,City,232,Country 49452,City,232,Country 49453,City,232,Country 49454,City,232,Country 49455,City,232,Country 49456,City,232,Country 49458,City,232,Country 49459,City,232,Country 49460,City,232,Country 49461,City,232,Country 49462,City,232,Country 49463,City,232,Country 49464,City,232,Country 49465,City,232,Country 49466,City,232,Country 49467,City,232,Country 49468,City,232,Country 49469,City,232,Country 49470,City,232,Country 49471,City,232,Country 49472,City,232,Country 49473,City,232,Country 49474,City,232,Country 49475,City,232,Country 49476,City,232,Country 49478,City,232,Country 49479,City,232,Country 49480,City,232,Country 49481,City,232,Country 49484,City,232,Country 49485,City,232,Country 49486,City,232,Country 49487,City,232,Country 49488,City,232,Country 49489,City,232,Country 49490,City,232,Country 49491,City,232,Country 49492,City,232,Country 49494,City,232,Country 49495,City,232,Country 49496,City,232,Country 49497,City,232,Country 49498,City,232,Country 49499,City,232,Country 49500,City,232,Country 49501,City,232,Country 49502,City,232,Country 49503,City,232,Country 49504,City,232,Country 49505,City,232,Country 49506,City,232,Country 49507,City,232,Country 49508,City,232,Country 49509,City,232,Country 49511,City,232,Country 49512,City,232,Country 49513,City,232,Country 49515,City,232,Country 49516,City,232,Country 49517,City,232,Country 49519,City,232,Country 49520,City,232,Country 49524,City,232,Country 49525,City,232,Country 49526,City,232,Country 49527,City,232,Country 49528,City,232,Country 49529,City,232,Country 49530,City,232,Country 49531,City,232,Country 49532,City,232,Country 49533,City,232,Country 49535,City,232,Country 49536,City,232,Country 49537,City,232,Country 49538,City,232,Country 49539,City,232,Country 49540,City,232,Country 49541,City,232,Country 49542,City,232,Country 49543,City,232,Country 49547,City,232,Country 49548,City,232,Country 49549,City,232,Country 49550,City,232,Country 49551,City,232,Country 49553,City,232,Country 49554,City,232,Country 49555,City,232,Country 49557,City,232,Country 49558,City,232,Country 49559,City,232,Country 49561,City,232,Country 49563,City,232,Country 49564,City,232,Country 49565,City,232,Country 49567,City,232,Country 49568,City,232,Country 49569,City,232,Country 49570,City,232,Country 49571,City,232,Country 49572,City,232,Country 49573,City,232,Country 49575,City,232,Country 49576,City,232,Country 49577,City,232,Country 49578,City,232,Country 49581,City,232,Country 49582,City,232,Country 49583,City,232,Country 49584,City,232,Country 49585,City,232,Country 49586,City,232,Country 49588,City,232,Country 49593,City,232,Country 49594,City,232,Country 49595,City,232,Country 49597,City,232,Country 49598,City,232,Country 49599,City,232,Country 49600,City,232,Country 49601,City,232,Country 49602,City,232,Country 49604,City,232,Country 49605,City,232,Country 49606,City,232,Country 49608,City,232,Country 49609,City,232,Country 49611,City,232,Country 49612,City,232,Country 49613,City,232,Country 49614,City,232,Country 49615,City,232,Country 49616,City,232,Country 49617,City,232,Country 49618,City,232,Country 49620,City,232,Country 49621,City,232,Country 49623,City,232,Country 49625,City,232,Country 49627,City,232,Country 49628,City,232,Country 49629,City,232,Country 49630,City,232,Country 49633,City,232,Country 49634,City,232,Country 49635,City,232,Country 49637,City,232,Country 49638,City,232,Country 49640,City,232,Country 49643,City,232,Country 49645,City,232,Country 49649,City,232,Country 49652,City,232,Country 49653,City,232,Country 49654,City,232,Country 49658,City,232,Country 49661,City,232,Country 49662,City,232,Country 49663,City,232,Country 49664,City,232,Country 49665,City,232,Country 49668,City,232,Country 49669,City,232,Country 49670,City,232,Country 49671,City,232,Country 49672,City,232,Country 49673,City,232,Country 49674,City,232,Country 49677,City,232,Country 49678,City,232,Country 49679,City,232,Country 49681,City,232,Country 49682,City,232,Country 49683,City,232,Country 49685,City,232,Country 49686,City,232,Country 49687,City,232,Country 49688,City,232,Country 49689,City,232,Country 49690,City,232,Country 49691,City,232,Country 49694,City,232,Country 49695,City,232,Country 49696,City,232,Country 49697,City,232,Country 49699,City,232,Country 49701,City,232,Country 49702,City,232,Country 49703,City,232,Country 49704,City,232,Country 49705,City,232,Country 49706,City,232,Country 49707,City,232,Country 49708,City,232,Country 49709,City,232,Country 49710,City,232,Country 49711,City,232,Country 49712,City,232,Country 49713,City,232,Country 49714,City,232,Country 49715,City,232,Country 49716,City,232,Country 49717,City,232,Country 49718,City,232,Country 49719,City,232,Country 49720,City,232,Country 49721,City,232,Country 49722,City,232,Country 49723,City,232,Country 49724,City,232,Country 49725,City,232,Country 49726,City,232,Country 49727,City,232,Country 49728,City,232,Country 49729,City,232,Country 49730,City,232,Country 49731,City,232,Country 49732,City,232,Country 49733,City,232,Country 49734,City,232,Country 49735,City,232,Country 49736,City,232,Country 49737,City,232,Country 49738,City,232,Country 49739,City,232,Country 49741,City,232,Country 49742,City,232,Country 49744,City,232,Country 49745,City,232,Country 49748,City,232,Country 49752,City,232,Country 49753,City,232,Country 49754,City,232,Country 49755,City,232,Country 49757,City,232,Country 49758,City,232,Country 49760,City,232,Country 49761,City,232,Country 49762,City,232,Country 49764,City,232,Country 49765,City,232,Country 49767,City,232,Country 49768,City,232,Country 49770,City,232,Country 49771,City,232,Country 49773,City,232,Country 49774,City,232,Country 49775,City,232,Country 49776,City,232,Country 49777,City,232,Country 49778,City,232,Country 49779,City,232,Country 49780,City,232,Country 49781,City,232,Country 49782,City,232,Country 49783,City,232,Country 49784,City,232,Country 49787,City,232,Country 49788,City,232,Country 49789,City,232,Country 49790,City,232,Country 49791,City,232,Country 49792,City,232,Country 49793,City,232,Country 49794,City,232,Country 49796,City,232,Country 49797,City,232,Country 49798,City,232,Country 49799,City,232,Country 49800,City,232,Country 49801,City,232,Country 49802,City,232,Country 49803,City,232,Country 49804,City,232,Country 49805,City,232,Country 49806,City,232,Country 49808,City,232,Country 49809,City,232,Country 49810,City,232,Country 49811,City,232,Country 49812,City,232,Country 49813,City,232,Country 49814,City,232,Country 49815,City,232,Country 49816,City,232,Country 49817,City,232,Country 49818,City,232,Country 49819,City,232,Country 49820,City,232,Country 49822,City,232,Country 49823,City,232,Country 49824,City,232,Country 49825,City,232,Country 49826,City,232,Country 49827,City,232,Country 49828,City,232,Country 49829,City,232,Country 49830,City,232,Country 49831,City,232,Country 49832,City,232,Country 49833,City,232,Country 49834,City,232,Country 49835,City,232,Country 49836,City,232,Country 49837,City,232,Country 49838,City,232,Country 49839,City,232,Country 49840,City,232,Country 49841,City,232,Country 49842,City,232,Country 49843,City,232,Country 49844,City,232,Country 49845,City,232,Country 49846,City,232,Country 49848,City,232,Country 49849,City,232,Country 49852,City,232,Country 49853,City,232,Country 49854,City,232,Country 49855,City,232,Country 49856,City,232,Country 49857,City,232,Country 49859,City,232,Country 49860,City,232,Country 49861,City,232,Country 49862,City,232,Country 49863,City,232,Country 49864,City,232,Country 49865,City,232,Country 49866,City,232,Country 49867,City,232,Country 49868,City,232,Country 49869,City,232,Country 49870,City,232,Country 49872,City,232,Country 49873,City,232,Country 49874,City,232,Country 49875,City,232,Country 49876,City,232,Country 49877,City,232,Country 49878,City,232,Country 49879,City,232,Country 49880,City,232,Country 49881,City,232,Country 49882,City,232,Country 49883,City,232,Country 49884,City,232,Country 49885,City,232,Country 49886,City,232,Country 49887,City,232,Country 49889,City,232,Country 49890,City,232,Country 49891,City,232,Country 49892,City,232,Country 49893,City,232,Country 49894,City,232,Country 49895,City,232,Country 49896,City,232,Country 49897,City,232,Country 49898,City,232,Country 49899,City,232,Country 49900,City,232,Country 49901,City,232,Country 49903,City,232,Country 49904,City,232,Country 49906,City,232,Country 49907,City,232,Country 49908,City,232,Country 49909,City,232,Country 49910,City,232,Country 49911,City,232,Country 49912,City,232,Country 49913,City,232,Country 49914,City,232,Country 49915,City,232,Country 49916,City,232,Country 49917,City,232,Country 49918,City,232,Country 49919,City,232,Country 49920,City,232,Country 49921,City,232,Country 49922,City,232,Country 49923,City,232,Country 49925,City,232,Country 49926,City,232,Country 49927,City,232,Country 49928,City,232,Country 49929,City,232,Country 49930,City,232,Country 49932,City,232,Country 49933,City,232,Country 49934,City,232,Country 49935,City,232,Country 49937,City,232,Country 49938,City,232,Country 49939,City,232,Country 49942,City,232,Country 49943,City,232,Country 49944,City,232,Country 49945,City,232,Country 49946,City,232,Country 49947,City,232,Country 49948,City,232,Country 49949,City,232,Country 49951,City,232,Country 49952,City,232,Country 49953,City,232,Country 49954,City,232,Country 49955,City,232,Country 49956,City,232,Country 49957,City,232,Country 49958,City,232,Country 49959,City,232,Country 49960,City,232,Country 49961,City,232,Country 49962,City,232,Country 49963,City,232,Country 49964,City,232,Country 49965,City,232,Country 49966,City,232,Country 49967,City,232,Country 49968,City,232,Country 49969,City,232,Country 49970,City,232,Country 49974,City,232,Country 49976,City,232,Country 49977,City,232,Country 49978,City,232,Country 49979,City,232,Country 49981,City,232,Country 49982,City,232,Country 49984,City,232,Country 49986,City,232,Country 49987,City,232,Country 49988,City,232,Country 49989,City,232,Country 49990,City,232,Country 49991,City,232,Country 49992,City,232,Country 49993,City,232,Country 49994,City,232,Country 49995,City,232,Country 49996,City,232,Country 49997,City,232,Country 49998,City,232,Country 49999,City,232,Country 50000,City,232,Country 50001,City,232,Country 50002,City,232,Country 50003,City,232,Country 50004,City,232,Country 50005,City,232,Country 50006,City,232,Country 50007,City,232,Country 50008,City,232,Country 50009,City,232,Country 50011,City,232,Country 50012,City,232,Country 50013,City,232,Country 50015,City,232,Country 50016,City,232,Country 50017,City,232,Country 50018,City,232,Country 50019,City,232,Country 50020,City,232,Country 50021,City,232,Country 50023,City,232,Country 50024,City,232,Country 50025,City,232,Country 50026,City,232,Country 50027,City,232,Country 50029,City,232,Country 50030,City,232,Country 50031,City,232,Country 50032,City,232,Country 50033,City,232,Country 50034,City,232,Country 50035,City,232,Country 50036,City,232,Country 50037,City,232,Country 50038,City,232,Country 50039,City,232,Country 50040,City,232,Country 50041,City,232,Country 50042,City,232,Country 50043,City,232,Country 50044,City,232,Country 50045,City,232,Country 50046,City,232,Country 50047,City,232,Country 50050,City,232,Country 50051,City,232,Country 50052,City,232,Country 50053,City,232,Country 50054,City,232,Country 50055,City,232,Country 50066,City,232,Country 50067,City,232,Country 50068,City,232,Country 50069,City,232,Country 50070,City,232,Country 50071,City,232,Country 50082,City,232,Country 50083,City,232,Country 50084,City,232,Country 50085,City,232,Country 50086,City,232,Country 50087,City,232,Country 50088,City,232,Country 50089,City,232,Country 50090,City,232,Country 50091,City,232,Country 50092,City,232,Country 50093,City,232,Country 50098,City,232,Country 50100,City,232,Country 50101,City,232,Country 50102,City,232,Country 50103,City,232,Country 50104,City,232,Country 50105,City,232,Country 50107,City,232,Country 50108,City,232,Country 50111,City,232,Country 50112,City,232,Country 50114,City,232,Country 50115,City,232,Country 50116,City,232,Country 50117,City,232,Country 50118,City,232,Country 50119,City,232,Country 50120,City,232,Country 50122,City,232,Country 50123,City,232,Country 50124,City,232,Country 50125,City,232,Country 50126,City,232,Country 50127,City,232,Country 50128,City,232,Country 50129,City,232,Country 50130,City,232,Country 50131,City,232,Country 50132,City,232,Country 50133,City,232,Country 50134,City,232,Country 50135,City,232,Country 50136,City,232,Country 50137,City,232,Country 50141,City,232,Country 50144,City,232,Country 50146,City,232,Country 50153,City,232,Country 50156,City,232,Country 50157,City,232,Country 50158,City,232,Country 50160,City,232,Country 50161,City,232,Country 50162,City,232,Country 50165,City,232,Country 50166,City,232,Country 50167,City,232,Country 50168,City,232,Country 50169,City,232,Country 50170,City,232,Country 50171,City,232,Country 50172,City,232,Country 50174,City,232,Country 50175,City,232,Country 50176,City,232,Country 50177,City,232,Country 50178,City,232,Country 50179,City,232,Country 50180,City,232,Country 50182,City,232,Country 50183,City,232,Country 50184,City,232,Country 50188,City,232,Country 50190,City,232,Country 50191,City,232,Country 50193,City,232,Country 50195,City,232,Country 50196,City,232,Country 50197,City,232,Country 50200,City,232,Country 50198,City,232,Country 50199,City,232,Country 50201,City,232,Country 50205,City,232,Country 50207,City,232,Country 50212,City,232,Country 50213,City,232,Country 50214,City,232,Country 50215,City,232,Country 50216,City,232,Country 50217,City,232,Country 50218,City,232,Country 50220,City,232,Country 50221,City,232,Country 50222,City,232,Country 50223,City,232,Country 50224,City,232,Country 50225,City,232,Country 50227,City,232,Country 50228,City,232,Country 50229,City,232,Country 50230,City,232,Country 50231,City,232,Country 50235,City,232,Country 50236,City,232,Country 50237,City,232,Country 50238,City,232,Country 50239,City,232,Country 50240,City,232,Country 50241,City,232,Country 50242,City,232,Country 50244,City,232,Country 50245,City,232,Country 50246,City,232,Country 50247,City,232,Country 50250,City,232,Country 50251,City,232,Country 50254,City,232,Country 50256,City,232,Country 50259,City,232,Country 50260,City,232,Country 50262,City,232,Country 50263,City,232,Country 50264,City,232,Country 50265,City,232,Country 50266,City,232,Country 50267,City,232,Country 50268,City,232,Country 50269,City,232,Country 50270,City,232,Country 50271,City,232,Country 50272,City,232,Country 50274,City,232,Country 50275,City,232,Country 50276,City,232,Country 50277,City,232,Country 50278,City,232,Country 50279,City,232,Country 50282,City,232,Country 50284,City,232,Country 50287,City,232,Country 50288,City,232,Country 50293,City,232,Country 50294,City,232,Country 50295,City,232,Country 50296,City,232,Country 50297,City,232,Country 50299,City,232,Country 50300,City,232,Country 50301,City,232,Country 50302,City,232,Country 50305,City,232,Country 50306,City,232,Country 50307,City,232,Country 50308,City,232,Country 50309,City,232,Country 50310,City,232,Country 50312,City,232,Country 50313,City,232,Country 50314,City,232,Country 50316,City,232,Country 50319,City,232,Country 50321,City,232,Country 50322,City,232,Country 50323,City,232,Country 50324,City,232,Country 50325,City,232,Country 50326,City,232,Country 50327,City,232,Country 50328,City,232,Country 50329,City,232,Country 50330,City,232,Country 50331,City,232,Country 50332,City,232,Country 50333,City,232,Country 50334,City,232,Country 50335,City,232,Country 50336,City,232,Country 50337,City,232,Country 50338,City,232,Country 50382,City,232,Country 50383,City,232,Country 50384,City,232,Country 50385,City,232,Country 50386,City,232,Country 50388,City,232,Country 50390,City,232,Country 50391,City,232,Country 50392,City,232,Country 50393,City,232,Country 50394,City,232,Country 50395,City,232,Country 50396,City,232,Country 50397,City,232,Country 50398,City,232,Country 50399,City,232,Country 50400,City,232,Country 50401,City,232,Country 50402,City,232,Country 50403,City,232,Country 50405,City,232,Country 50406,City,232,Country 50407,City,232,Country 50409,City,232,Country 50410,City,232,Country 50411,City,232,Country 50412,City,232,Country 50413,City,232,Country 50414,City,232,Country 50415,City,232,Country 50417,City,232,Country 50418,City,232,Country 50419,City,232,Country 50420,City,232,Country 50421,City,232,Country 50422,City,232,Country 50423,City,232,Country 50424,City,232,Country 50425,City,232,Country 50426,City,232,Country 50427,City,232,Country 50428,City,232,Country 50429,City,232,Country 50430,City,232,Country 50431,City,232,Country 50432,City,232,Country 50433,City,232,Country 50434,City,232,Country 50435,City,232,Country 50437,City,232,Country 50439,City,232,Country 50440,City,232,Country 50441,City,232,Country 50442,City,232,Country 50443,City,232,Country 50444,City,232,Country 50445,City,232,Country 50446,City,232,Country 50447,City,232,Country 50448,City,232,Country 50449,City,232,Country 50450,City,232,Country 50451,City,232,Country 50452,City,232,Country 50453,City,232,Country 50454,City,232,Country 50455,City,232,Country 50456,City,232,Country 50457,City,232,Country 50458,City,232,Country 50464,City,232,Country 50469,City,232,Country 50471,City,232,Country 50472,City,232,Country 50473,City,232,Country 50474,City,232,Country 50475,City,232,Country 50476,City,232,Country 50477,City,232,Country 50478,City,232,Country 50479,City,232,Country 50480,City,232,Country 50481,City,232,Country 50482,City,232,Country 50483,City,232,Country 50484,City,232,Country 50485,City,232,Country 50486,City,232,Country 50487,City,232,Country 50488,City,232,Country 50489,City,232,Country 50490,City,232,Country 50491,City,232,Country 50492,City,232,Country 50494,City,232,Country 50495,City,232,Country 50496,City,232,Country 50497,City,232,Country 50498,City,232,Country 50499,City,232,Country 50500,City,232,Country 50501,City,232,Country 50502,City,232,Country 50503,City,232,Country 50504,City,232,Country 50505,City,232,Country 50506,City,232,Country 50508,City,232,Country 50509,City,232,Country 50510,City,232,Country 50511,City,232,Country 50512,City,232,Country 50513,City,232,Country 50514,City,232,Country 50515,City,232,Country 50516,City,232,Country 50517,City,232,Country 50519,City,232,Country 50520,City,232,Country 50521,City,232,Country 50522,City,232,Country 50524,City,232,Country 50525,City,232,Country 50526,City,232,Country 50527,City,232,Country 50529,City,232,Country 50532,City,232,Country 50534,City,232,Country 50535,City,232,Country 50536,City,232,Country 50537,City,232,Country 50538,City,232,Country 50539,City,232,Country 50540,City,232,Country 50542,City,232,Country 50543,City,232,Country 50544,City,232,Country 50546,City,232,Country 50547,City,232,Country 50549,City,232,Country 50550,City,232,Country 50551,City,232,Country 50552,City,232,Country 50553,City,232,Country 50556,City,232,Country 50557,City,232,Country 50559,City,232,Country 50561,City,232,Country 50562,City,232,Country 50563,City,232,Country 50564,City,232,Country 50565,City,232,Country 50569,City,232,Country 50570,City,232,Country 50571,City,232,Country 50572,City,232,Country 50573,City,232,Country 50574,City,232,Country 50575,City,232,Country 50577,City,232,Country 50578,City,232,Country 50579,City,232,Country 50580,City,232,Country 50581,City,232,Country 50583,City,232,Country 50584,City,232,Country 50586,City,232,Country 50591,City,232,Country 50592,City,232,Country 50593,City,232,Country 50596,City,232,Country 50597,City,232,Country 50598,City,232,Country 50599,City,232,Country 50600,City,232,Country 50601,City,232,Country 50603,City,232,Country 50604,City,232,Country 50605,City,232,Country 50606,City,232,Country 50607,City,232,Country 50608,City,232,Country 50609,City,232,Country 50613,City,232,Country 50615,City,232,Country 50618,City,232,Country 50624,City,232,Country 50625,City,232,Country 50626,City,232,Country 50627,City,232,Country 50628,City,232,Country 50629,City,232,Country 50630,City,232,Country 50631,City,232,Country 50632,City,232,Country 50633,City,232,Country 50635,City,232,Country 50637,City,232,Country 50639,City,232,Country 50640,City,232,Country 50641,City,232,Country 50643,City,232,Country 50645,City,232,Country 50646,City,232,Country 50650,City,232,Country 50651,City,232,Country 50652,City,232,Country 50653,City,232,Country 50654,City,232,Country 50656,City,232,Country 50657,City,232,Country 50658,City,232,Country 50659,City,232,Country 50660,City,232,Country 50662,City,232,Country 50663,City,232,Country 50665,City,232,Country 50666,City,232,Country 50669,City,232,Country 50670,City,232,Country 50671,City,232,Country 50674,City,232,Country 50676,City,232,Country 50677,City,232,Country 50678,City,232,Country 50679,City,232,Country 50680,City,232,Country 50682,City,232,Country 50683,City,232,Country 50684,City,232,Country 50685,City,232,Country 50686,City,232,Country 50688,City,232,Country 50689,City,232,Country 50690,City,232,Country 50691,City,232,Country 50692,City,232,Country 50695,City,232,Country 50698,City,232,Country 50700,City,232,Country 50701,City,232,Country 50705,City,232,Country 50706,City,232,Country 50709,City,232,Country 50710,City,232,Country 50711,City,232,Country 50712,City,232,Country 50713,City,232,Country 50714,City,232,Country 50715,City,232,Country 50718,City,232,Country 50721,City,232,Country 50722,City,232,Country 50724,City,232,Country 50727,City,232,Country 50728,City,232,Country 50729,City,232,Country 50730,City,232,Country 50732,City,232,Country 50734,City,232,Country 50743,City,232,Country 50744,City,232,Country 50745,City,232,Country 50746,City,232,Country 50748,City,232,Country 50750,City,232,Country 50751,City,232,Country 50752,City,232,Country 50753,City,232,Country 50754,City,232,Country 50755,City,232,Country 50757,City,232,Country 50758,City,232,Country 50759,City,232,Country 50760,City,232,Country 50761,City,232,Country 50763,City,232,Country 50764,City,232,Country 50765,City,232,Country 50766,City,232,Country 50767,City,232,Country 50768,City,232,Country 50769,City,232,Country 50770,City,232,Country 50771,City,232,Country 50772,City,232,Country 50773,City,232,Country 50774,City,232,Country 50775,City,232,Country 50776,City,232,Country 50777,City,232,Country 50778,City,232,Country 50780,City,232,Country 50781,City,232,Country 50782,City,232,Country 50783,City,232,Country 50784,City,232,Country 50785,City,232,Country 50786,City,232,Country 50787,City,232,Country 50788,City,232,Country 50789,City,232,Country 50790,City,232,Country 50791,City,232,Country 50792,City,232,Country 50793,City,232,Country 50795,City,232,Country 50798,City,232,Country 50800,City,232,Country 50801,City,232,Country 50802,City,232,Country 50804,City,232,Country 50805,City,232,Country 50806,City,232,Country 50807,City,232,Country 50809,City,232,Country 50810,City,232,Country 50814,City,232,Country 50815,City,232,Country 50817,City,232,Country 50818,City,232,Country 50819,City,232,Country 50820,City,232,Country 50821,City,232,Country 50822,City,232,Country 50823,City,232,Country 50824,City,232,Country 50825,City,232,Country 50826,City,232,Country 50827,City,232,Country 50828,City,232,Country 50829,City,232,Country 50830,City,232,Country 50831,City,232,Country 50832,City,232,Country 50833,City,232,Country 50834,City,232,Country 50835,City,232,Country 50838,City,232,Country 50839,City,232,Country 50840,City,232,Country 50841,City,232,Country 50842,City,232,Country 50843,City,232,Country 50844,City,232,Country 50845,City,232,Country 50846,City,232,Country 50847,City,232,Country 50849,City,232,Country 50850,City,232,Country 50851,City,232,Country 50852,City,232,Country 50853,City,232,Country 50854,City,232,Country 50855,City,232,Country 50856,City,232,Country 50857,City,232,Country 50858,City,232,Country 50860,City,232,Country 50861,City,232,Country 50862,City,232,Country 50863,City,232,Country 50864,City,232,Country 50865,City,232,Country 50866,City,232,Country 50868,City,232,Country 50869,City,232,Country 50870,City,232,Country 50874,City,232,Country 50882,City,232,Country 50883,City,232,Country 50887,City,232,Country 50888,City,232,Country 50889,City,232,Country 50894,City,232,Country 50895,City,232,Country 50896,City,232,Country 50897,City,232,Country 50900,City,232,Country 50903,City,232,Country 50904,City,232,Country 50905,City,232,Country 50906,City,232,Country 50907,City,232,Country 50908,City,232,Country 50909,City,232,Country 50910,City,232,Country 50911,City,232,Country 50912,City,232,Country 50913,City,232,Country 50914,City,232,Country 50915,City,232,Country 50916,City,232,Country 50919,City,232,Country 50920,City,232,Country 50924,City,232,Country 50925,City,232,Country 50926,City,232,Country 50927,City,232,Country 50928,City,232,Country 50929,City,232,Country 50931,City,232,Country 50932,City,232,Country 50934,City,232,Country 50935,City,232,Country 50938,City,232,Country 50939,City,232,Country 50940,City,232,Country 50948,City,232,Country 50949,City,232,Country 50950,City,232,Country 50951,City,232,Country 50961,City,232,Country 50963,City,232,Country 50965,City,232,Country 50969,City,232,Country 50970,City,232,Country 50971,City,232,Country 50974,City,232,Country 50975,City,232,Country 50976,City,232,Country 50977,City,232,Country 50978,City,232,Country 50979,City,232,Country 50980,City,232,Country 50981,City,232,Country 50982,City,232,Country 50983,City,232,Country 50985,City,232,Country 50987,City,232,Country 50989,City,232,Country 50992,City,232,Country 50993,City,232,Country 50994,City,232,Country 50995,City,232,Country 50996,City,232,Country 50997,City,232,Country 50998,City,232,Country 50999,City,232,Country 51000,City,232,Country 51001,City,232,Country 51002,City,232,Country 51003,City,232,Country 51004,City,232,Country 51005,City,232,Country 51006,City,232,Country 51007,City,232,Country 51010,City,232,Country 51011,City,232,Country 51013,City,232,Country 51014,City,232,Country 51015,City,232,Country 51016,City,232,Country 51017,City,232,Country 51018,City,232,Country 51019,City,232,Country 51020,City,232,Country 51023,City,232,Country 51024,City,232,Country 51025,City,232,Country 51026,City,232,Country 51027,City,232,Country 51028,City,232,Country 51029,City,232,Country 51031,City,232,Country 51032,City,232,Country 51033,City,232,Country 51037,City,232,Country 51038,City,232,Country 51039,City,232,Country 51040,City,232,Country 51041,City,232,Country 51042,City,232,Country 51043,City,232,Country 51044,City,232,Country 51045,City,232,Country 51046,City,232,Country 51047,City,232,Country 51048,City,232,Country 51049,City,232,Country 51052,City,232,Country 51053,City,232,Country 51054,City,232,Country 51055,City,232,Country 51056,City,232,Country 51057,City,232,Country 51058,City,232,Country 51059,City,232,Country 51063,City,232,Country 51065,City,232,Country 51076,City,232,Country 51077,City,232,Country 51078,City,232,Country 51079,City,232,Country 51080,City,232,Country 51081,City,232,Country 51082,City,232,Country 51083,City,232,Country 51084,City,232,Country 51085,City,232,Country 51086,City,232,Country 51087,City,232,Country 51089,City,232,Country 51090,City,232,Country 51091,City,232,Country 51092,City,232,Country 51093,City,232,Country 51094,City,232,Country 51095,City,232,Country 51096,City,232,Country 51097,City,232,Country 51098,City,232,Country 51099,City,232,Country 51101,City,232,Country 51102,City,232,Country 51103,City,232,Country 51104,City,232,Country 51105,City,232,Country 51110,City,232,Country 51111,City,232,Country 51115,City,232,Country 51116,City,232,Country 51117,City,232,Country 51121,City,232,Country 51122,City,232,Country 51123,City,232,Country 51124,City,232,Country 51125,City,232,Country 51126,City,232,Country 51127,City,232,Country 51128,City,232,Country 51129,City,232,Country 51130,City,232,Country 51131,City,232,Country 51132,City,232,Country 51133,City,232,Country 51134,City,232,Country 51135,City,232,Country 51137,City,232,Country 51138,City,232,Country 51139,City,232,Country 51140,City,232,Country 51141,City,232,Country 51142,City,232,Country 51143,City,232,Country 51144,City,232,Country 51145,City,232,Country 51146,City,232,Country 51147,City,232,Country 51148,City,232,Country 51151,City,232,Country 51152,City,232,Country 51153,City,232,Country 51154,City,232,Country 51155,City,232,Country 51156,City,232,Country 51157,City,232,Country 51158,City,232,Country 51159,City,232,Country 51160,City,232,Country 51161,City,232,Country 51162,City,232,Country 51165,City,232,Country 51168,City,232,Country 51171,City,232,Country 51172,City,232,Country 51174,City,232,Country 51175,City,232,Country 51176,City,232,Country 51177,City,232,Country 51179,City,232,Country 51180,City,232,Country 51181,City,232,Country 51182,City,232,Country 51184,City,232,Country 51186,City,232,Country 51187,City,232,Country 51189,City,232,Country 51190,City,232,Country 51191,City,232,Country 51193,City,232,Country 51194,City,232,Country 51195,City,232,Country 51196,City,232,Country 51198,City,232,Country 51200,City,232,Country 51201,City,232,Country 51203,City,232,Country 51204,City,232,Country 51205,City,232,Country 51206,City,232,Country 51207,City,232,Country 51208,City,232,Country 51210,City,232,Country 51211,City,232,Country 51212,City,232,Country 51213,City,232,Country 51214,City,232,Country 51216,City,232,Country 51217,City,232,Country 51218,City,232,Country 51219,City,232,Country 51221,City,232,Country 51222,City,232,Country 51223,City,232,Country 51224,City,232,Country 51225,City,232,Country 51226,City,232,Country 51227,City,232,Country 51228,City,232,Country 51229,City,232,Country 51230,City,232,Country 51231,City,232,Country 51232,City,232,Country 51233,City,232,Country 51234,City,232,Country 51236,City,232,Country 51237,City,232,Country 51238,City,232,Country 51240,City,232,Country 51241,City,232,Country 51242,City,232,Country 51243,City,232,Country 51244,City,232,Country 51245,City,232,Country 51246,City,232,Country 51247,City,232,Country 51248,City,232,Country 51249,City,232,Country 51250,City,232,Country 51251,City,232,Country 51252,City,232,Country 51253,City,232,Country 51254,City,232,Country 51255,City,232,Country 51256,City,232,Country 51257,City,232,Country 51258,City,232,Country 51259,City,232,Country 51260,City,232,Country 51261,City,232,Country 51262,City,232,Country 51263,City,232,Country 51264,City,232,Country 51265,City,232,Country 51266,City,232,Country 51267,City,232,Country 51268,City,232,Country 51269,City,232,Country 51270,City,232,Country 51271,City,232,Country 51272,City,232,Country 51273,City,232,Country 51275,City,232,Country 51277,City,232,Country 51278,City,232,Country 51279,City,232,Country 51280,City,232,Country 51281,City,232,Country 51282,City,232,Country 51283,City,232,Country 51284,City,232,Country 51285,City,232,Country 51286,City,232,Country 51287,City,232,Country 51288,City,232,Country 51289,City,232,Country 51290,City,232,Country 51291,City,232,Country 51292,City,232,Country 51293,City,232,Country 51295,City,232,Country 51296,City,232,Country 51297,City,232,Country 51298,City,232,Country 51299,City,232,Country 51300,City,232,Country 51301,City,232,Country 51302,City,232,Country 51303,City,232,Country 51304,City,232,Country 51305,City,232,Country 51306,City,232,Country 51307,City,232,Country 51308,City,232,Country 51309,City,232,Country 51310,City,232,Country 51311,City,232,Country 51312,City,232,Country 51313,City,232,Country 51316,City,232,Country 51317,City,232,Country 51318,City,232,Country 51319,City,232,Country 51320,City,232,Country 51322,City,232,Country 51323,City,232,Country 51324,City,232,Country 51325,City,232,Country 51326,City,232,Country 51327,City,232,Country 51329,City,232,Country 51330,City,232,Country 51331,City,232,Country 51332,City,232,Country 51333,City,232,Country 51335,City,232,Country 51336,City,232,Country 51337,City,232,Country 51338,City,232,Country 51339,City,232,Country 51340,City,232,Country 51341,City,232,Country 51342,City,232,Country 51343,City,232,Country 51345,City,232,Country 51346,City,232,Country 51347,City,232,Country 51348,City,232,Country 51349,City,232,Country 51350,City,232,Country 51351,City,232,Country 51352,City,232,Country 51353,City,232,Country 51354,City,232,Country 51355,City,232,Country 51356,City,232,Country 51358,City,232,Country 51359,City,232,Country 51360,City,232,Country 51361,City,232,Country 51362,City,232,Country 51363,City,232,Country 51364,City,232,Country 51365,City,232,Country 51366,City,232,Country 51367,City,232,Country 51368,City,232,Country 51369,City,232,Country 51370,City,232,Country 51371,City,232,Country 51372,City,232,Country 51373,City,232,Country 51374,City,232,Country 51376,City,232,Country 51377,City,232,Country 51378,City,232,Country 51379,City,232,Country 51380,City,232,Country 51381,City,232,Country 51382,City,232,Country 51383,City,232,Country 51384,City,232,Country 51385,City,232,Country 51386,City,232,Country 51387,City,232,Country 51388,City,232,Country 51390,City,232,Country 51391,City,232,Country 51392,City,232,Country 51394,City,232,Country 51395,City,232,Country 51396,City,232,Country 51397,City,232,Country 51398,City,232,Country 51399,City,232,Country 51400,City,232,Country 51401,City,232,Country 51402,City,232,Country 51403,City,232,Country 51404,City,232,Country 51405,City,232,Country 51406,City,232,Country 51407,City,232,Country 51408,City,232,Country 51409,City,232,Country 51410,City,232,Country 51411,City,232,Country 51412,City,232,Country 51413,City,232,Country 51414,City,232,Country 51415,City,232,Country 51416,City,232,Country 51417,City,232,Country 51418,City,232,Country 51419,City,232,Country 51420,City,232,Country 51421,City,232,Country 51422,City,232,Country 51423,City,232,Country 51424,City,232,Country 51426,City,232,Country 51427,City,232,Country 51428,City,232,Country 51429,City,232,Country 51430,City,232,Country 51431,City,232,Country 51432,City,232,Country 51433,City,232,Country 51434,City,232,Country 51435,City,232,Country 51436,City,232,Country 51437,City,232,Country 51440,City,232,Country 51442,City,232,Country 51443,City,232,Country 51444,City,232,Country 51446,City,232,Country 51447,City,232,Country 51449,City,232,Country 51450,City,232,Country 51451,City,232,Country 51453,City,232,Country 51454,City,232,Country 51455,City,232,Country 51456,City,232,Country 51457,City,232,Country 51458,City,232,Country 51459,City,232,Country 51460,City,232,Country 51461,City,232,Country 51462,City,232,Country 51463,City,232,Country 51464,City,232,Country 51465,City,232,Country 51466,City,232,Country 51467,City,232,Country 51468,City,232,Country 51469,City,232,Country 51470,City,232,Country 51471,City,232,Country 51472,City,232,Country 51474,City,232,Country 51476,City,232,Country 51477,City,232,Country 51480,City,232,Country 51481,City,232,Country 51482,City,232,Country 51483,City,232,Country 51484,City,232,Country 51485,City,232,Country 51487,City,232,Country 51489,City,232,Country 51490,City,232,Country 51494,City,232,Country 51495,City,232,Country 51496,City,232,Country 51497,City,232,Country 51498,City,232,Country 51499,City,232,Country 51500,City,232,Country 51502,City,232,Country 51503,City,232,Country 51504,City,232,Country 51505,City,232,Country 51506,City,232,Country 51507,City,232,Country 51508,City,232,Country 51509,City,232,Country 51510,City,232,Country 51511,City,232,Country 51512,City,232,Country 51513,City,232,Country 51514,City,232,Country 51515,City,232,Country 51516,City,232,Country 51517,City,232,Country 51518,City,232,Country 51519,City,232,Country 51520,City,232,Country 51521,City,232,Country 51522,City,232,Country 51523,City,232,Country 51524,City,232,Country 51525,City,232,Country 51526,City,232,Country 51527,City,232,Country 51528,City,232,Country 51529,City,232,Country 51530,City,232,Country 51531,City,232,Country 51533,City,232,Country 51534,City,232,Country 51535,City,232,Country 51536,City,232,Country 51537,City,232,Country 51538,City,232,Country 51539,City,232,Country 51541,City,232,Country 51542,City,232,Country 51543,City,232,Country 51544,City,232,Country 51545,City,232,Country 51548,City,232,Country 51552,City,232,Country 51554,City,232,Country 51555,City,232,Country 51556,City,232,Country 51557,City,232,Country 51560,City,232,Country 51561,City,232,Country 51562,City,232,Country 51563,City,232,Country 51564,City,232,Country 51565,City,232,Country 51567,City,232,Country 51568,City,232,Country 51569,City,232,Country 51570,City,232,Country 51571,City,232,Country 51574,City,232,Country 51575,City,232,Country 51577,City,232,Country 51578,City,232,Country 51579,City,232,Country 51580,City,232,Country 51581,City,232,Country 51582,City,232,Country 51583,City,232,Country 51584,City,232,Country 51585,City,232,Country 51586,City,232,Country 51587,City,232,Country 51588,City,232,Country 51590,City,232,Country 51591,City,232,Country 51592,City,232,Country 51593,City,232,Country 51594,City,232,Country 51595,City,232,Country 51596,City,232,Country 51597,City,232,Country 51598,City,232,Country 51599,City,232,Country 51601,City,232,Country 51604,City,232,Country 51605,City,232,Country 51606,City,232,Country 51607,City,232,Country 51608,City,232,Country 51609,City,232,Country 51610,City,232,Country 51612,City,232,Country 51613,City,232,Country 51614,City,232,Country 51616,City,232,Country 51617,City,232,Country 51618,City,232,Country 51619,City,232,Country 51620,City,232,Country 51621,City,232,Country 51622,City,232,Country 51623,City,232,Country 51625,City,232,Country 51626,City,232,Country 51627,City,232,Country 51628,City,232,Country 51630,City,232,Country 51631,City,232,Country 51632,City,232,Country 51633,City,232,Country 51635,City,232,Country 51636,City,232,Country 51637,City,232,Country 51638,City,232,Country 51639,City,232,Country 51640,City,232,Country 51643,City,232,Country 51646,City,232,Country 51647,City,232,Country 51649,City,232,Country 51650,City,232,Country 51651,City,232,Country 51652,City,232,Country 51653,City,232,Country 51654,City,232,Country 51655,City,232,Country 51657,City,232,Country 51658,City,232,Country 51662,City,232,Country 51669,City,232,Country 51670,City,232,Country 51672,City,232,Country 51674,City,232,Country 51675,City,232,Country 51678,City,232,Country 51680,City,232,Country 51683,City,232,Country 51685,City,232,Country 51686,City,232,Country 51687,City,232,Country 51689,City,232,Country 51691,City,232,Country 51692,City,232,Country 51694,City,232,Country 51695,City,232,Country 51697,City,232,Country 51698,City,232,Country 51699,City,232,Country 51700,City,232,Country 51701,City,232,Country 51702,City,232,Country 51703,City,232,Country 51704,City,232,Country 51705,City,232,Country 51706,City,232,Country 51707,City,232,Country 51708,City,232,Country 51709,City,232,Country 51711,City,232,Country 51715,City,232,Country 51716,City,232,Country 51719,City,232,Country 51720,City,232,Country 51721,City,232,Country 51722,City,232,Country 51723,City,232,Country 51724,City,232,Country 51725,City,232,Country 51726,City,232,Country 51727,City,232,Country 51728,City,232,Country 51729,City,232,Country 51730,City,232,Country 51731,City,232,Country 51732,City,232,Country 51733,City,232,Country 51734,City,232,Country 51735,City,232,Country 51736,City,232,Country 51737,City,232,Country 51738,City,232,Country 51739,City,232,Country 51740,City,232,Country 51741,City,232,Country 51742,City,232,Country 51743,City,232,Country 51744,City,232,Country 51745,City,232,Country 51746,City,232,Country 51747,City,232,Country 51748,City,232,Country 51749,City,232,Country 51750,City,232,Country 51752,City,232,Country 51753,City,232,Country 51754,City,232,Country 51755,City,232,Country 51757,City,232,Country 51758,City,232,Country 51759,City,232,Country 51760,City,232,Country 51761,City,232,Country 51762,City,232,Country 51763,City,232,Country 51764,City,232,Country 51765,City,232,Country 51766,City,232,Country 51767,City,232,Country 51768,City,232,Country 51770,City,232,Country 51771,City,232,Country 51772,City,232,Country 51773,City,232,Country 51774,City,232,Country 51775,City,232,Country 51776,City,232,Country 51777,City,232,Country 51778,City,232,Country 51779,City,232,Country 51780,City,232,Country 51781,City,232,Country 51782,City,232,Country 51783,City,232,Country 51784,City,232,Country 51785,City,232,Country 51786,City,232,Country 51787,City,232,Country 51788,City,232,Country 51789,City,232,Country 51790,City,232,Country 51791,City,232,Country 51792,City,232,Country 51793,City,232,Country 51795,City,232,Country 51796,City,232,Country 51797,City,232,Country 51798,City,232,Country 51799,City,232,Country 51801,City,232,Country 51802,City,232,Country 51804,City,232,Country 51805,City,232,Country 51806,City,232,Country 51807,City,232,Country 51808,City,232,Country 51809,City,232,Country 51811,City,232,Country 51812,City,232,Country 51813,City,232,Country 51814,City,232,Country 51816,City,232,Country 51817,City,232,Country 51818,City,232,Country 51819,City,232,Country 51820,City,232,Country 51821,City,232,Country 51823,City,232,Country 51824,City,232,Country 51827,City,232,Country 51828,City,232,Country 51829,City,232,Country 51830,City,232,Country 51831,City,232,Country 51832,City,232,Country 51833,City,232,Country 51834,City,232,Country 51835,City,232,Country 51836,City,232,Country 51837,City,232,Country 51838,City,232,Country 51839,City,232,Country 51840,City,232,Country 51841,City,232,Country 51842,City,232,Country 51844,City,232,Country 51845,City,232,Country 51846,City,232,Country 51847,City,232,Country 51848,City,232,Country 51849,City,232,Country 51851,City,232,Country 51852,City,232,Country 51853,City,232,Country 51854,City,232,Country 51855,City,232,Country 51856,City,232,Country 51857,City,232,Country 51858,City,232,Country 51859,City,232,Country 51860,City,232,Country 51861,City,232,Country 51862,City,232,Country 51863,City,232,Country 51864,City,232,Country 51865,City,232,Country 51867,City,232,Country 51868,City,232,Country 51869,City,232,Country 51870,City,232,Country 51872,City,232,Country 51873,City,232,Country 51876,City,232,Country 51878,City,232,Country 51879,City,232,Country 51880,City,232,Country 51881,City,232,Country 51882,City,232,Country 51883,City,232,Country 51884,City,232,Country 51885,City,232,Country 51886,City,232,Country 51887,City,232,Country 51889,City,232,Country 51891,City,232,Country 51892,City,232,Country 51893,City,232,Country 51894,City,232,Country 51895,City,232,Country 51896,City,232,Country 51897,City,232,Country 51898,City,232,Country 51899,City,232,Country 51900,City,232,Country 51901,City,232,Country 51902,City,232,Country 51903,City,232,Country 51904,City,232,Country 51905,City,232,Country 51906,City,232,Country 51907,City,232,Country 51908,City,232,Country 51909,City,232,Country 51910,City,232,Country 51911,City,232,Country 51912,City,232,Country 51913,City,232,Country 51914,City,232,Country 51915,City,232,Country 51916,City,232,Country 51917,City,232,Country 51918,City,232,Country 51920,City,232,Country 51921,City,232,Country 51922,City,232,Country 51923,City,232,Country 51924,City,232,Country 51925,City,232,Country 51927,City,232,Country 51928,City,232,Country 51929,City,232,Country 51930,City,232,Country 51931,City,232,Country 51932,City,232,Country 51933,City,232,Country 51934,City,232,Country 51935,City,232,Country 51936,City,232,Country 51937,City,232,Country 51938,City,232,Country 51939,City,232,Country 51940,City,232,Country 51941,City,232,Country 51943,City,232,Country 51944,City,232,Country 51945,City,232,Country 51946,City,232,Country 51947,City,232,Country 51948,City,232,Country 51949,City,232,Country 51950,City,232,Country 51951,City,232,Country 51952,City,232,Country 51953,City,232,Country 51954,City,232,Country 51955,City,232,Country 51956,City,232,Country 51957,City,232,Country 51958,City,232,Country 51959,City,232,Country 51960,City,232,Country 51961,City,232,Country 51962,City,232,Country 51963,City,232,Country 51964,City,232,Country 51965,City,232,Country 51966,City,232,Country 51967,City,232,Country 51968,City,232,Country 51969,City,232,Country 51970,City,232,Country 51971,City,232,Country 51972,City,232,Country 51973,City,232,Country 51974,City,232,Country 51975,City,232,Country 51976,City,232,Country 51977,City,232,Country 51978,City,232,Country 51979,City,232,Country 51980,City,232,Country 51981,City,232,Country 51982,City,232,Country 51983,City,232,Country 51984,City,232,Country 51985,City,232,Country 51986,City,232,Country 51987,City,232,Country 51988,City,232,Country 51989,City,232,Country 51990,City,232,Country 51991,City,232,Country 51992,City,232,Country 51993,City,232,Country 51994,City,232,Country 51995,City,232,Country 51996,City,232,Country 51997,City,232,Country 51999,City,232,Country 52000,City,232,Country 52001,City,232,Country 52002,City,232,Country 52003,City,232,Country 52004,City,232,Country 52005,City,232,Country 52006,City,232,Country 52007,City,232,Country 52009,City,232,Country 52010,City,232,Country 52011,City,232,Country 52012,City,232,Country 52013,City,232,Country 52014,City,232,Country 52015,City,232,Country 52016,City,232,Country 52017,City,232,Country 52018,City,232,Country 52019,City,232,Country 52020,City,232,Country 52021,City,232,Country 52022,City,232,Country 52024,City,232,Country 52025,City,232,Country 52026,City,232,Country 48200,City,232,Country 48253,City,232,Country 48254,City,232,Country 48259,City,232,Country 48260,City,232,Country 48269,City,232,Country 48273,City,232,Country 48277,City,232,Country 48278,City,232,Country 48347,City,232,Country 48349,City,232,Country 48351,City,232,Country 48352,City,232,Country 48353,City,232,Country 48354,City,232,Country 48355,City,232,Country 48356,City,232,Country 48357,City,232,Country 48358,City,232,Country 48359,City,232,Country 48366,City,232,Country 48371,City,232,Country 48458,City,232,Country 48460,City,232,Country 48728,City,232,Country 48802,City,232,Country 48866,City,232,Country 48867,City,232,Country 48870,City,232,Country 48873,City,232,Country 48881,City,232,Country 48882,City,232,Country 48884,City,232,Country 48885,City,232,Country 48887,City,232,Country 48896,City,232,Country 49006,City,232,Country 49045,City,232,Country 49067,City,232,Country 49081,City,232,Country 49090,City,232,Country 49096,City,232,Country 49139,City,232,Country 49175,City,232,Country 49178,City,232,Country 49188,City,232,Country 49202,City,232,Country 49203,City,232,Country 49213,City,232,Country 49272,City,232,Country 49273,City,232,Country 49296,City,232,Country 49302,City,232,Country 49321,City,232,Country 49323,City,232,Country 49328,City,232,Country 49348,City,232,Country 49350,City,232,Country 49353,City,232,Country 49354,City,232,Country 49359,City,232,Country 49446,City,232,Country 49477,City,232,Country 49545,City,232,Country 49560,City,232,Country 49566,City,232,Country 49632,City,232,Country 49642,City,232,Country 49655,City,232,Country 49656,City,232,Country 49746,City,232,Country 49751,City,232,Country 49940,City,232,Country 49975,City,232,Country 50073,City,232,Country 50097,City,232,Country 50099,City,232,Country 50145,City,232,Country 50148,City,232,Country 50152,City,232,Country 50194,City,232,Country 50253,City,232,Country 50303,City,232,Country 50317,City,232,Country 50318,City,232,Country 50320,City,232,Country 50389,City,232,Country 50466,City,232,Country 50467,City,232,Country 50468,City,232,Country 50568,City,232,Country 50567,City,232,Country 50585,City,232,Country 50612,City,232,Country 50616,City,232,Country 50644,City,232,Country 50707,City,232,Country 50725,City,232,Country 50726,City,232,Country 50739,City,232,Country 50740,City,232,Country 50741,City,232,Country 50811,City,232,Country 50956,City,232,Country 50957,City,232,Country 50958,City,232,Country 50959,City,232,Country 50968,City,232,Country 50973,City,232,Country 51030,City,232,Country 51034,City,232,Country 51113,City,232,Country 51178,City,232,Country 51314,City,232,Country 51486,City,232,Country 51553,City,232,Country 51572,City,232,Country 51751,City,232,Country 51756,City,232,Country 51874,City,232,Country 48165,City,232,Country 48168,City,232,Country 48169,City,232,Country 48170,City,232,Country 48171,City,232,Country 48173,City,232,Country 48178,City,232,Country 48179,City,232,Country 48185,City,232,Country 48195,City,232,Country 48201,City,232,Country 48203,City,232,Country 48216,City,232,Country 48218,City,232,Country 48220,City,232,Country 48222,City,232,Country 48223,City,232,Country 48225,City,232,Country 48234,City,232,Country 48238,City,232,Country 48251,City,232,Country 48255,City,232,Country 48258,City,232,Country 48266,City,232,Country 48268,City,232,Country 48271,City,232,Country 48272,City,232,Country 48274,City,232,Country 48276,City,232,Country 48291,City,232,Country 48312,City,232,Country 48313,City,232,Country 48314,City,232,Country 48320,City,232,Country 48328,City,232,Country 48343,City,232,Country 48344,City,232,Country 48345,City,232,Country 48346,City,232,Country 48348,City,232,Country 48350,City,232,Country 48360,City,232,Country 48361,City,232,Country 48368,City,232,Country 48369,City,232,Country 48373,City,232,Country 48374,City,232,Country 48376,City,232,Country 48383,City,232,Country 48406,City,232,Country 48407,City,232,Country 48428,City,232,Country 48439,City,232,Country 48440,City,232,Country 48456,City,232,Country 48462,City,232,Country 48463,City,232,Country 48471,City,232,Country 48499,City,232,Country 48513,City,232,Country 48526,City,232,Country 48537,City,232,Country 48542,City,232,Country 48549,City,232,Country 48552,City,232,Country 48560,City,232,Country 48562,City,232,Country 48641,City,232,Country 48579,City,232,Country 48590,City,232,Country 48591,City,232,Country 48592,City,232,Country 48618,City,232,Country 48669,City,232,Country 48680,City,232,Country 48681,City,232,Country 48682,City,232,Country 48697,City,232,Country 48724,City,232,Country 48734,City,232,Country 48745,City,232,Country 48747,City,232,Country 48768,City,232,Country 48780,City,232,Country 48800,City,232,Country 48816,City,232,Country 48817,City,232,Country 48821,City,232,Country 48822,City,232,Country 48825,City,232,Country 48836,City,232,Country 48840,City,232,Country 48848,City,232,Country 48853,City,232,Country 48857,City,232,Country 48858,City,232,Country 48861,City,232,Country 48864,City,232,Country 48868,City,232,Country 48869,City,232,Country 48871,City,232,Country 48872,City,232,Country 48878,City,232,Country 48892,City,232,Country 48917,City,232,Country 48924,City,232,Country 48977,City,232,Country 48989,City,232,Country 49008,City,232,Country 49014,City,232,Country 49015,City,232,Country 49020,City,232,Country 49029,City,232,Country 49043,City,232,Country 49044,City,232,Country 49046,City,232,Country 49048,City,232,Country 49051,City,232,Country 49065,City,232,Country 49069,City,232,Country 49085,City,232,Country 49091,City,232,Country 49124,City,232,Country 49125,City,232,Country 49130,City,232,Country 49133,City,232,Country 49137,City,232,Country 49140,City,232,Country 49160,City,232,Country 49174,City,232,Country 49176,City,232,Country 49177,City,232,Country 49185,City,232,Country 49187,City,232,Country 49198,City,232,Country 49200,City,232,Country 49204,City,232,Country 49206,City,232,Country 49208,City,232,Country 49209,City,232,Country 49211,City,232,Country 49220,City,232,Country 49221,City,232,Country 49222,City,232,Country 49223,City,232,Country 49224,City,232,Country 49225,City,232,Country 49226,City,232,Country 49231,City,232,Country 49242,City,232,Country 49265,City,232,Country 49266,City,232,Country 49286,City,232,Country 49301,City,232,Country 49310,City,232,Country 49314,City,232,Country 49315,City,232,Country 49325,City,232,Country 49330,City,232,Country 49332,City,232,Country 49337,City,232,Country 49340,City,232,Country 49341,City,232,Country 49342,City,232,Country 49343,City,232,Country 49344,City,232,Country 49346,City,232,Country 49347,City,232,Country 49349,City,232,Country 49352,City,232,Country 49356,City,232,Country 49358,City,232,Country 49361,City,232,Country 49362,City,232,Country 49365,City,232,Country 49369,City,232,Country 49374,City,232,Country 49381,City,232,Country 49384,City,232,Country 49389,City,232,Country 49394,City,232,Country 49401,City,232,Country 49403,City,232,Country 49404,City,232,Country 49409,City,232,Country 49413,City,232,Country 49414,City,232,Country 49424,City,232,Country 49441,City,232,Country 49449,City,232,Country 49450,City,232,Country 49451,City,232,Country 49457,City,232,Country 49482,City,232,Country 49483,City,232,Country 49493,City,232,Country 49510,City,232,Country 49514,City,232,Country 49518,City,232,Country 49521,City,232,Country 49522,City,232,Country 49523,City,232,Country 49534,City,232,Country 49544,City,232,Country 49552,City,232,Country 49556,City,232,Country 49579,City,232,Country 49587,City,232,Country 49589,City,232,Country 49590,City,232,Country 49591,City,232,Country 49592,City,232,Country 49603,City,232,Country 49607,City,232,Country 49610,City,232,Country 49622,City,232,Country 49624,City,232,Country 49626,City,232,Country 49631,City,232,Country 49639,City,232,Country 49646,City,232,Country 49650,City,232,Country 49651,City,232,Country 49657,City,232,Country 49659,City,232,Country 49660,City,232,Country 49675,City,232,Country 49680,City,232,Country 49692,City,232,Country 49698,City,232,Country 49700,City,232,Country 49743,City,232,Country 49747,City,232,Country 49750,City,232,Country 49766,City,232,Country 49772,City,232,Country 49785,City,232,Country 49786,City,232,Country 49795,City,232,Country 49821,City,232,Country 49851,City,232,Country 49871,City,232,Country 49888,City,232,Country 49924,City,232,Country 49931,City,232,Country 49936,City,232,Country 49941,City,232,Country 49972,City,232,Country 49985,City,232,Country 50010,City,232,Country 50014,City,232,Country 50028,City,232,Country 50048,City,232,Country 50049,City,232,Country 50056,City,232,Country 50057,City,232,Country 50058,City,232,Country 50059,City,232,Country 50060,City,232,Country 50061,City,232,Country 50062,City,232,Country 50063,City,232,Country 50064,City,232,Country 50065,City,232,Country 50072,City,232,Country 50075,City,232,Country 50076,City,232,Country 50077,City,232,Country 50078,City,232,Country 50079,City,232,Country 50074,City,232,Country 50080,City,232,Country 50081,City,232,Country 50094,City,232,Country 50096,City,232,Country 50106,City,232,Country 50109,City,232,Country 50110,City,232,Country 50113,City,232,Country 50121,City,232,Country 50139,City,232,Country 50140,City,232,Country 50142,City,232,Country 50147,City,232,Country 50149,City,232,Country 50150,City,232,Country 50151,City,232,Country 50154,City,232,Country 50155,City,232,Country 50159,City,232,Country 50163,City,232,Country 50164,City,232,Country 50173,City,232,Country 50181,City,232,Country 50185,City,232,Country 50186,City,232,Country 50187,City,232,Country 50189,City,232,Country 50192,City,232,Country 50202,City,232,Country 50203,City,232,Country 50204,City,232,Country 50206,City,232,Country 50208,City,232,Country 50209,City,232,Country 50210,City,232,Country 50211,City,232,Country 50226,City,232,Country 50232,City,232,Country 50234,City,232,Country 50243,City,232,Country 50248,City,232,Country 50249,City,232,Country 50252,City,232,Country 50255,City,232,Country 50257,City,232,Country 50258,City,232,Country 50261,City,232,Country 50280,City,232,Country 50281,City,232,Country 50283,City,232,Country 50285,City,232,Country 50286,City,232,Country 50289,City,232,Country 50291,City,232,Country 50292,City,232,Country 50298,City,232,Country 50304,City,232,Country 50311,City,232,Country 50315,City,232,Country 50339,City,232,Country 50375,City,232,Country 50376,City,232,Country 50377,City,232,Country 50378,City,232,Country 50379,City,232,Country 50380,City,232,Country 50381,City,232,Country 50387,City,232,Country 50404,City,232,Country 50408,City,232,Country 50416,City,232,Country 50436,City,232,Country 50438,City,232,Country 50459,City,232,Country 50462,City,232,Country 50463,City,232,Country 50507,City,232,Country 50523,City,232,Country 50528,City,232,Country 50530,City,232,Country 50531,City,232,Country 50533,City,232,Country 50541,City,232,Country 50548,City,232,Country 50558,City,232,Country 50560,City,232,Country 50566,City,232,Country 50576,City,232,Country 50587,City,232,Country 50588,City,232,Country 50589,City,232,Country 50590,City,232,Country 50594,City,232,Country 50595,City,232,Country 50602,City,232,Country 50611,City,232,Country 50617,City,232,Country 50621,City,232,Country 50622,City,232,Country 50623,City,232,Country 50634,City,232,Country 50638,City,232,Country 50647,City,232,Country 50648,City,232,Country 50649,City,232,Country 50655,City,232,Country 50661,City,232,Country 50673,City,232,Country 50681,City,232,Country 50687,City,232,Country 50693,City,232,Country 50696,City,232,Country 50699,City,232,Country 50702,City,232,Country 50704,City,232,Country 50716,City,232,Country 50717,City,232,Country 50719,City,232,Country 50723,City,232,Country 50731,City,232,Country 50733,City,232,Country 50735,City,232,Country 50736,City,232,Country 50738,City,232,Country 50747,City,232,Country 50749,City,232,Country 50756,City,232,Country 50762,City,232,Country 50794,City,232,Country 50796,City,232,Country 50797,City,232,Country 50803,City,232,Country 50808,City,232,Country 50812,City,232,Country 50813,City,232,Country 50816,City,232,Country 50837,City,232,Country 50848,City,232,Country 50859,City,232,Country 50867,City,232,Country 50879,City,232,Country 50881,City,232,Country 50898,City,232,Country 50899,City,232,Country 50901,City,232,Country 50902,City,232,Country 50917,City,232,Country 50918,City,232,Country 50921,City,232,Country 50922,City,232,Country 50923,City,232,Country 50930,City,232,Country 50933,City,232,Country 50952,City,232,Country 50953,City,232,Country 50954,City,232,Country 50964,City,232,Country 50966,City,232,Country 50967,City,232,Country 50972,City,232,Country 50988,City,232,Country 50990,City,232,Country 51012,City,232,Country 51035,City,232,Country 51036,City,232,Country 51050,City,232,Country 51051,City,232,Country 51060,City,232,Country 51061,City,232,Country 51062,City,232,Country 51072,City,232,Country 51106,City,232,Country 51107,City,232,Country 51108,City,232,Country 51109,City,232,Country 51114,City,232,Country 51118,City,232,Country 51119,City,232,Country 51120,City,232,Country 51149,City,232,Country 51163,City,232,Country 51166,City,232,Country 51169,City,232,Country 51173,City,232,Country 51183,City,232,Country 51185,City,232,Country 51188,City,232,Country 51192,City,232,Country 51197,City,232,Country 51199,City,232,Country 51209,City,232,Country 51215,City,232,Country 51220,City,232,Country 51235,City,232,Country 51274,City,232,Country 51276,City,232,Country 51294,City,232,Country 51321,City,232,Country 51328,City,232,Country 51334,City,232,Country 51344,City,232,Country 51357,City,232,Country 51393,City,232,Country 51425,City,232,Country 51438,City,232,Country 51439,City,232,Country 51441,City,232,Country 51445,City,232,Country 51452,City,232,Country 51473,City,232,Country 51475,City,232,Country 51478,City,232,Country 51479,City,232,Country 51488,City,232,Country 51491,City,232,Country 51492,City,232,Country 51493,City,232,Country 51501,City,232,Country 51540,City,232,Country 51547,City,232,Country 51558,City,232,Country 51559,City,232,Country 51566,City,232,Country 51589,City,232,Country 51600,City,232,Country 51602,City,232,Country 51603,City,232,Country 51615,City,232,Country 51624,City,232,Country 51634,City,232,Country 51645,City,232,Country 51648,City,232,Country 51656,City,232,Country 51659,City,232,Country 51673,City,232,Country 51676,City,232,Country 51679,City,232,Country 51681,City,232,Country 51682,City,232,Country 51690,City,232,Country 51693,City,232,Country 51713,City,232,Country 51718,City,232,Country 51769,City,232,Country 51800,City,232,Country 51810,City,232,Country 51815,City,232,Country 51822,City,232,Country 51825,City,232,Country 51826,City,232,Country 51843,City,232,Country 51850,City,232,Country 51866,City,232,Country 51871,City,232,Country 51875,City,232,Country 51890,City,232,Country 51919,City,232,Country 51926,City,232,Country 51942,City,232,Country 48162,City,232,Country 48163,City,232,Country 48164,City,232,Country 48166,City,232,Country 48167,City,232,Country 48172,City,232,Country 48175,City,232,Country 48176,City,232,Country 48177,City,232,Country 48180,City,232,Country 48181,City,232,Country 48182,City,232,Country 48183,City,232,Country 48245,City,232,Country 48246,City,232,Country 48250,City,232,Country 48335,City,232,Country 48340,City,232,Country 48370,City,232,Country 48384,City,232,Country 48393,City,232,Country 48413,City,232,Country 48441,City,232,Country 48448,City,232,Country 48451,City,232,Country 48452,City,232,Country 48472,City,232,Country 48481,City,232,Country 48484,City,232,Country 48485,City,232,Country 48533,City,232,Country 48553,City,232,Country 48555,City,232,Country 48556,City,232,Country 48557,City,232,Country 48558,City,232,Country 48580,City,232,Country 48581,City,232,Country 48613,City,232,Country 48633,City,232,Country 48670,City,232,Country 48683,City,232,Country 48684,City,232,Country 48705,City,232,Country 48730,City,232,Country 48737,City,232,Country 48738,City,232,Country 48739,City,232,Country 48740,City,232,Country 48741,City,232,Country 48750,City,232,Country 48756,City,232,Country 48784,City,232,Country 48810,City,232,Country 48811,City,232,Country 48812,City,232,Country 48813,City,232,Country 48814,City,232,Country 48815,City,232,Country 48824,City,232,Country 48854,City,232,Country 48855,City,232,Country 48862,City,232,Country 48863,City,232,Country 48901,City,232,Country 48902,City,232,Country 48948,City,232,Country 48976,City,232,Country 49005,City,232,Country 49042,City,232,Country 49057,City,232,Country 49060,City,232,Country 49078,City,232,Country 49093,City,232,Country 49122,City,232,Country 49123,City,232,Country 49129,City,232,Country 49156,City,232,Country 49158,City,232,Country 49162,City,232,Country 49165,City,232,Country 49172,City,232,Country 49189,City,232,Country 49191,City,232,Country 49192,City,232,Country 49215,City,232,Country 49216,City,232,Country 49217,City,232,Country 49218,City,232,Country 49254,City,232,Country 49255,City,232,Country 49256,City,232,Country 49259,City,232,Country 49260,City,232,Country 49271,City,232,Country 49285,City,232,Country 49300,City,232,Country 49370,City,232,Country 49372,City,232,Country 49431,City,232,Country 49546,City,232,Country 49562,City,232,Country 49574,City,232,Country 49580,City,232,Country 49596,City,232,Country 49619,City,232,Country 49636,City,232,Country 49641,City,232,Country 49644,City,232,Country 49647,City,232,Country 49648,City,232,Country 49666,City,232,Country 49667,City,232,Country 49676,City,232,Country 49684,City,232,Country 49693,City,232,Country 49740,City,232,Country 49749,City,232,Country 49756,City,232,Country 49759,City,232,Country 49763,City,232,Country 49769,City,232,Country 49807,City,232,Country 49847,City,232,Country 49850,City,232,Country 49858,City,232,Country 49902,City,232,Country 49905,City,232,Country 49950,City,232,Country 49971,City,232,Country 49973,City,232,Country 49980,City,232,Country 49983,City,232,Country 50022,City,232,Country 50095,City,232,Country 50138,City,232,Country 50143,City,232,Country 50219,City,232,Country 50233,City,232,Country 50273,City,232,Country 50290,City,232,Country 50340,City,232,Country 50341,City,232,Country 50342,City,232,Country 50343,City,232,Country 50344,City,232,Country 50345,City,232,Country 50346,City,232,Country 50347,City,232,Country 50348,City,232,Country 50349,City,232,Country 50350,City,232,Country 50351,City,232,Country 50352,City,232,Country 50353,City,232,Country 50354,City,232,Country 50355,City,232,Country 50356,City,232,Country 50357,City,232,Country 50358,City,232,Country 50359,City,232,Country 50360,City,232,Country 50361,City,232,Country 50362,City,232,Country 50363,City,232,Country 50364,City,232,Country 50365,City,232,Country 50366,City,232,Country 50367,City,232,Country 50368,City,232,Country 50369,City,232,Country 50370,City,232,Country 50371,City,232,Country 50372,City,232,Country 50373,City,232,Country 50374,City,232,Country 50460,City,232,Country 50461,City,232,Country 50465,City,232,Country 50470,City,232,Country 50493,City,232,Country 50518,City,232,Country 50545,City,232,Country 50554,City,232,Country 50555,City,232,Country 50582,City,232,Country 50610,City,232,Country 50614,City,232,Country 50619,City,232,Country 50620,City,232,Country 50636,City,232,Country 50642,City,232,Country 50664,City,232,Country 50667,City,232,Country 50668,City,232,Country 50672,City,232,Country 50675,City,232,Country 50694,City,232,Country 50697,City,232,Country 50703,City,232,Country 50708,City,232,Country 50720,City,232,Country 50737,City,232,Country 50742,City,232,Country 50779,City,232,Country 50799,City,232,Country 50836,City,232,Country 50871,City,232,Country 50872,City,232,Country 50873,City,232,Country 50875,City,232,Country 50876,City,232,Country 50877,City,232,Country 50878,City,232,Country 50880,City,232,Country 50884,City,232,Country 50885,City,232,Country 50886,City,232,Country 50890,City,232,Country 50891,City,232,Country 50892,City,232,Country 50893,City,232,Country 50936,City,232,Country 50937,City,232,Country 50941,City,232,Country 50942,City,232,Country 50943,City,232,Country 50944,City,232,Country 50945,City,232,Country 50946,City,232,Country 50947,City,232,Country 50955,City,232,Country 50960,City,232,Country 50962,City,232,Country 50984,City,232,Country 50986,City,232,Country 50991,City,232,Country 51008,City,232,Country 51009,City,232,Country 51021,City,232,Country 51022,City,232,Country 51064,City,232,Country 51066,City,232,Country 51067,City,232,Country 51068,City,232,Country 51069,City,232,Country 51070,City,232,Country 51071,City,232,Country 51073,City,232,Country 51074,City,232,Country 51075,City,232,Country 51088,City,232,Country 51100,City,232,Country 51112,City,232,Country 51136,City,232,Country 51150,City,232,Country 51164,City,232,Country 51167,City,232,Country 51170,City,232,Country 51202,City,232,Country 51239,City,232,Country 51315,City,232,Country 51375,City,232,Country 51389,City,232,Country 51448,City,232,Country 51532,City,232,Country 51546,City,232,Country 51549,City,232,Country 51550,City,232,Country 51551,City,232,Country 51573,City,232,Country 51576,City,232,Country 51611,City,232,Country 51629,City,232,Country 51641,City,232,Country 51642,City,232,Country 51644,City,232,Country 51660,City,232,Country 51661,City,232,Country 51663,City,232,Country 51664,City,232,Country 51665,City,232,Country 51666,City,232,Country 51667,City,232,Country 51668,City,232,Country 51671,City,232,Country 51677,City,232,Country 51684,City,232,Country 51688,City,232,Country 51696,City,232,Country 51710,City,232,Country 51712,City,232,Country 51714,City,232,Country 51717,City,232,Country 51794,City,232,Country 51803,City,232,Country 51877,City,232,Country 51888,City,232,Country 51998,City,232,Country 52008,City,232,Country 52023,City,232,Country 52027,City,232,Country age-PG16-v1.5.0-rc0/regress/age_regression.conf000066400000000000000000000000351454606241200211130ustar00rootroot00000000000000#age.enable_containment = on age-PG16-v1.5.0-rc0/regress/expected/000077500000000000000000000000001454606241200170535ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/regress/expected/age_global_graph.out000066400000000000000000000226501454606241200230460ustar00rootroot00000000000000LOAD 'age'; SET search_path TO ag_catalog; -- -- delete_specific_GRAPH_global_contexts -- -- SELECT * FROM create_graph('ag_graph_1'); NOTICE: graph "ag_graph_1" has been created create_graph -------------- (1 row) SELECT * FROM cypher('ag_graph_1', $$ CREATE (v:vertex1) RETURN v $$) AS (v agtype); v ----------------------------------------------------------------------- {"id": 844424930131969, "label": "vertex1", "properties": {}}::vertex (1 row) SELECT * FROM create_graph('ag_graph_2'); NOTICE: graph "ag_graph_2" has been created create_graph -------------- (1 row) SELECT * FROM cypher('ag_graph_2', $$ CREATE (v:vertex2) RETURN v $$) AS (v agtype); v ----------------------------------------------------------------------- {"id": 844424930131969, "label": "vertex2", "properties": {}}::vertex (1 row) SELECT * FROM create_graph('ag_graph_3'); NOTICE: graph "ag_graph_3" has been created create_graph -------------- (1 row) SELECT * FROM cypher('ag_graph_3', $$ CREATE (v:vertex3) RETURN v $$) AS (v agtype); v ----------------------------------------------------------------------- {"id": 844424930131969, "label": "vertex3", "properties": {}}::vertex (1 row) -- load contexts using the vertex_stats command SELECT * FROM cypher('ag_graph_3', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); result ----------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "vertex3", "in_degree": 0, "out_degree": 0, "self_loops": 0} (1 row) SELECT * FROM cypher('ag_graph_2', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); result ----------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "vertex2", "in_degree": 0, "out_degree": 0, "self_loops": 0} (1 row) SELECT * FROM cypher('ag_graph_1', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); result ----------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "vertex1", "in_degree": 0, "out_degree": 0, "self_loops": 0} (1 row) --- loading undefined contexts --- should throw exception - graph "ag_graph_4" does not exist SELECT * FROM cypher('ag_graph_4', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); ERROR: graph "ag_graph_4" does not exist LINE 1: SELECT * FROM cypher('ag_graph_4', $$ MATCH (u) RETURN verte... ^ --- delete with invalid parameter ---should return false SELECT * FROM cypher('ag_graph_2', $$ RETURN delete_global_graphs('E1337') $$) AS (result agtype); result -------- false (1 row) -- delete ag_graph_2's context -- should return true SELECT * FROM cypher('ag_graph_2', $$ RETURN delete_global_graphs('ag_graph_2') $$) AS (result agtype); result -------- true (1 row) -- delete ag_graph_1's context -- should return true(succeed) because the previous command should not delete the 1st graph's context SELECT * FROM cypher('ag_graph_1', $$ RETURN delete_global_graphs('ag_graph_1') $$) AS (result agtype); result -------- true (1 row) -- delete ag_graph_3's context -- should return true(succeed) because the previous commands should not delete the 3rd graph's context SELECT * FROM cypher('ag_graph_3', $$ RETURN delete_global_graphs('ag_graph_3') $$) AS (result agtype); result -------- true (1 row) -- delete all graphs' context again -- should return false (did not succeed) for all of them because they are already removed SELECT * FROM cypher('ag_graph_2', $$ RETURN delete_global_graphs('ag_graph_2') $$) AS (result agtype); result -------- false (1 row) SELECT * FROM cypher('ag_graph_1', $$ RETURN delete_global_graphs('ag_graph_1') $$) AS (result agtype); result -------- false (1 row) SELECT * FROM cypher('ag_graph_3', $$ RETURN delete_global_graphs('ag_graph_3') $$) AS (result agtype); result -------- false (1 row) --- delete uninitialized graph context --- should throw exception graph "ag_graph_4" does not exist SELECT * FROM cypher('ag_graph_4', $$ RETURN delete_global_graphs('ag_graph_4') $$) AS (result agtype); ERROR: graph "ag_graph_4" does not exist LINE 1: SELECT * FROM cypher('ag_graph_4', $$ RETURN delete_global_g... ^ -- -- delete_GRAPH_global_contexts -- -- load contexts again SELECT * FROM cypher('ag_graph_3', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); result ----------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "vertex3", "in_degree": 0, "out_degree": 0, "self_loops": 0} (1 row) SELECT * FROM cypher('ag_graph_2', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); result ----------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "vertex2", "in_degree": 0, "out_degree": 0, "self_loops": 0} (1 row) SELECT * FROM cypher('ag_graph_1', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); result ----------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "vertex1", "in_degree": 0, "out_degree": 0, "self_loops": 0} (1 row) -- delete all graph contexts -- should return true SELECT * FROM cypher('ag_graph_1', $$ RETURN delete_global_graphs(NULL) $$) AS (result agtype); result -------- true (1 row) -- delete all graphs' context individually -- should return false for all of them because already removed SELECT * FROM cypher('ag_graph_1', $$ RETURN delete_global_graphs('ag_graph_1') $$) AS (result agtype); result -------- false (1 row) SELECT * FROM cypher('ag_graph_2', $$ RETURN delete_global_graphs('ag_graph_2') $$) AS (result agtype); result -------- false (1 row) SELECT * FROM cypher('ag_graph_3', $$ RETURN delete_global_graphs('ag_graph_3') $$) AS (result agtype); result -------- false (1 row) -- -- age_vertex_stats -- --checking validity of vertex_stats --adding unlabelled vertices to ag_graph_1 SELECT * FROM cypher('ag_graph_1', $$ CREATE (n), (m) $$) as (v agtype); v --- (0 rows) --adding labelled vertice to graph 2 SELECT * FROM cypher('ag_graph_2', $$ CREATE (:Person) $$) as (v agtype); v --- (0 rows) ---adding edges between nodes SELECT * FROM cypher('ag_graph_2', $$ MATCH (a:Person), (b:Person) WHERE a.name = 'A' AND b.name = 'B' CREATE (a)-[e:RELTYPE]->(b) RETURN e $$) as (e agtype); e --- (0 rows) --checking if vertex stats have been updated along with the new label --should return 3 vertices SELECT * FROM cypher('ag_graph_1', $$ MATCH (n) RETURN vertex_stats(n) $$) AS (result agtype); result ----------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "in_degree": 0, "out_degree": 0, "self_loops": 0} {"id": 281474976710658, "label": "", "in_degree": 0, "out_degree": 0, "self_loops": 0} {"id": 844424930131969, "label": "vertex1", "in_degree": 0, "out_degree": 0, "self_loops": 0} (3 rows) --should return 1 vertice and 1 label SELECT * FROM cypher('ag_graph_2', $$ MATCH (a) RETURN vertex_stats(a) $$) AS (result agtype); result ----------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "vertex2", "in_degree": 0, "out_degree": 0, "self_loops": 0} {"id": 1125899906842625, "label": "Person", "in_degree": 0, "out_degree": 0, "self_loops": 0} (2 rows) --drop graphs SELECT * FROM drop_graph('ag_graph_1', true); NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to table ag_graph_1._ag_label_vertex drop cascades to table ag_graph_1._ag_label_edge drop cascades to table ag_graph_1.vertex1 NOTICE: graph "ag_graph_1" has been dropped drop_graph ------------ (1 row) SELECT * FROM drop_graph('ag_graph_2', true); NOTICE: drop cascades to 5 other objects DETAIL: drop cascades to table ag_graph_2._ag_label_vertex drop cascades to table ag_graph_2._ag_label_edge drop cascades to table ag_graph_2.vertex2 drop cascades to table ag_graph_2."Person" drop cascades to table ag_graph_2."RELTYPE" NOTICE: graph "ag_graph_2" has been dropped drop_graph ------------ (1 row) SELECT * FROM drop_graph('ag_graph_3', true); NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to table ag_graph_3._ag_label_vertex drop cascades to table ag_graph_3._ag_label_edge drop cascades to table ag_graph_3.vertex3 NOTICE: graph "ag_graph_3" has been dropped drop_graph ------------ (1 row) ----------------------------------------------------------------------------------------------------------------------------- -- -- End of tests -- age-PG16-v1.5.0-rc0/regress/expected/age_load.out000066400000000000000000000144251454606241200213450ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ \! cp -r regress/age_load/data regress/instance/data/age_load LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('agload_test_graph'); NOTICE: graph "agload_test_graph" has been created create_graph -------------- (1 row) SELECT create_vlabel('agload_test_graph','Country'); NOTICE: VLabel "Country" has been created create_vlabel --------------- (1 row) SELECT load_labels_from_file('agload_test_graph', 'Country', 'age_load/countries.csv'); load_labels_from_file ----------------------- (1 row) SELECT create_vlabel('agload_test_graph','City'); NOTICE: VLabel "City" has been created create_vlabel --------------- (1 row) SELECT load_labels_from_file('agload_test_graph', 'City', 'age_load/cities.csv'); load_labels_from_file ----------------------- (1 row) SELECT create_elabel('agload_test_graph','has_city'); NOTICE: ELabel "has_city" has been created create_elabel --------------- (1 row) SELECT load_edges_from_file('agload_test_graph', 'has_city', 'age_load/edges.csv'); load_edges_from_file ---------------------- (1 row) SELECT table_catalog, table_schema, lower(table_name) as table_name, table_type FROM information_schema.tables WHERE table_schema = 'agload_test_graph' ORDER BY table_name ASC; table_catalog | table_schema | table_name | table_type --------------------+-------------------+------------------+------------ contrib_regression | agload_test_graph | _ag_label_edge | BASE TABLE contrib_regression | agload_test_graph | _ag_label_vertex | BASE TABLE contrib_regression | agload_test_graph | city | BASE TABLE contrib_regression | agload_test_graph | country | BASE TABLE contrib_regression | agload_test_graph | has_city | BASE TABLE (5 rows) SELECT COUNT(*) FROM agload_test_graph."Country"; count ------- 53 (1 row) SELECT COUNT(*) FROM agload_test_graph."City"; count ------- 72485 (1 row) SELECT COUNT(*) FROM agload_test_graph."has_city"; count ------- 72485 (1 row) SELECT COUNT(*) FROM cypher('agload_test_graph', $$MATCH(n) RETURN n$$) as (n agtype); count ------- 72538 (1 row) SELECT COUNT(*) FROM cypher('agload_test_graph', $$MATCH (a)-[e]->(b) RETURN e$$) as (n agtype); count ------- 72485 (1 row) SELECT create_vlabel('agload_test_graph','Country2'); NOTICE: VLabel "Country2" has been created create_vlabel --------------- (1 row) SELECT load_labels_from_file('agload_test_graph', 'Country2', 'age_load/countries.csv', false); load_labels_from_file ----------------------- (1 row) SELECT create_vlabel('agload_test_graph','City2'); NOTICE: VLabel "City2" has been created create_vlabel --------------- (1 row) SELECT load_labels_from_file('agload_test_graph', 'City2', 'age_load/cities.csv', false); load_labels_from_file ----------------------- (1 row) SELECT COUNT(*) FROM agload_test_graph."Country2"; count ------- 53 (1 row) SELECT COUNT(*) FROM agload_test_graph."City2"; count ------- 72485 (1 row) SELECT id FROM agload_test_graph."Country" LIMIT 10; id ----------------- 844424930131970 844424930131971 844424930131974 844424930131983 844424930131989 844424930131990 844424930131996 844424930132002 844424930132023 844424930132025 (10 rows) SELECT id FROM agload_test_graph."Country2" LIMIT 10; id ------------------ 1688849860263937 1688849860263938 1688849860263939 1688849860263940 1688849860263941 1688849860263942 1688849860263943 1688849860263944 1688849860263945 1688849860263946 (10 rows) SELECT * FROM cypher('agload_test_graph', $$MATCH(n:Country {iso2 : 'BE'}) RETURN id(n), n.name, n.iso2 $$) as ("id(n)" agtype, "n.name" agtype, "n.iso2" agtype); id(n) | n.name | n.iso2 -----------------+-----------+-------- 844424930131990 | "Belgium" | "BE" (1 row) SELECT * FROM cypher('agload_test_graph', $$MATCH(n:Country2 {iso2 : 'BE'}) RETURN id(n), n.name, n.iso2 $$) as ("id(n)" agtype, "n.name" agtype, "n.iso2" agtype); id(n) | n.name | n.iso2 ------------------+-----------+-------- 1688849860263942 | "Belgium" | "BE" (1 row) SELECT * FROM cypher('agload_test_graph', $$MATCH(n:Country {iso2 : 'AT'}) RETURN id(n), n.name, n.iso2 $$) as ("id(n)" agtype, "n.name" agtype, "n.iso2" agtype); id(n) | n.name | n.iso2 -----------------+-----------+-------- 844424930131983 | "Austria" | "AT" (1 row) SELECT * FROM cypher('agload_test_graph', $$MATCH(n:Country2 {iso2 : 'AT'}) RETURN id(n), n.name, n.iso2 $$) as ("id(n)" agtype, "n.name" agtype, "n.iso2" agtype); id(n) | n.name | n.iso2 ------------------+-----------+-------- 1688849860263940 | "Austria" | "AT" (1 row) SELECT * FROM cypher('agload_test_graph', $$ MATCH (u:Country {region : "Europe"}) WHERE u.name =~ 'Cro.*' RETURN u.name, u.region $$) AS (result_1 agtype, result_2 agtype); result_1 | result_2 -----------+---------- "Croatia" | "Europe" (1 row) SELECT drop_graph('agload_test_graph', true); NOTICE: drop cascades to 7 other objects DETAIL: drop cascades to table agload_test_graph._ag_label_vertex drop cascades to table agload_test_graph._ag_label_edge drop cascades to table agload_test_graph."Country" drop cascades to table agload_test_graph."City" drop cascades to table agload_test_graph.has_city drop cascades to table agload_test_graph."Country2" drop cascades to table agload_test_graph."City2" NOTICE: graph "agload_test_graph" has been dropped drop_graph ------------ (1 row) age-PG16-v1.5.0-rc0/regress/expected/agtype.out000066400000000000000000002726041454606241200211100ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ -- -- AGTYPE data type regression tests -- -- -- Load extension and set path -- LOAD 'age'; SET extra_float_digits = 0; SET search_path TO ag_catalog; -- -- Create a table using the AGTYPE type -- CREATE TABLE agtype_table (type text, agtype agtype); -- -- Insert values to exercise agtype_in/agtype_out -- INSERT INTO agtype_table VALUES ('bool', 'true'); INSERT INTO agtype_table VALUES ('bool', 'false'); INSERT INTO agtype_table VALUES ('null', 'null'); INSERT INTO agtype_table VALUES ('string', '""'); INSERT INTO agtype_table VALUES ('string', '"This is a string"'); INSERT INTO agtype_table VALUES ('integer', '0'); INSERT INTO agtype_table VALUES ('integer', '9223372036854775807'); INSERT INTO agtype_table VALUES ('integer', '-9223372036854775808'); INSERT INTO agtype_table VALUES ('float', '0.0'); INSERT INTO agtype_table VALUES ('float', '1.0'); INSERT INTO agtype_table VALUES ('float', '-1.0'); INSERT INTO agtype_table VALUES ('float', '100000000.000001'); INSERT INTO agtype_table VALUES ('float', '-100000000.000001'); INSERT INTO agtype_table VALUES ('float', '0.00000000000000012345'); INSERT INTO agtype_table VALUES ('float', '-0.00000000000000012345'); INSERT INTO agtype_table VALUES ('numeric', '100000000000.0000000000001::numeric'); INSERT INTO agtype_table VALUES ('numeric', '-100000000000.0000000000001::numeric'); INSERT INTO agtype_table VALUES ('integer array', '[-9223372036854775808, -1, 0, 1, 9223372036854775807]'); INSERT INTO agtype_table VALUES('float array', '[-0.00000000000000012345, -100000000.000001, -1.0, 0.0, 1.0, 100000000.000001, 0.00000000000000012345]'); INSERT INTO agtype_table VALUES('mixed array', '[true, false, null, "string", 1, 1.0, {"bool":true}, -1::numeric, [1,3,5]]'); INSERT INTO agtype_table VALUES('object', '{"bool":true, "null":null, "string":"string", "integer":1, "float":1.2, "arrayi":[-1,0,1], "arrayf":[-1.0, 0.0, 1.0], "object":{"bool":true, "null":null, "string":"string", "int":1, "float":8.0}}'); INSERT INTO agtype_table VALUES ('numeric array', '[-5::numeric, -1::numeric, 0::numeric, 1::numeric, 9223372036854775807::numeric]'); -- -- Special float values: NaN, +/- Infinity -- INSERT INTO agtype_table VALUES ('float nan', 'nan'); INSERT INTO agtype_table VALUES ('float Infinity', 'Infinity'); INSERT INTO agtype_table VALUES ('float -Infinity', '-Infinity'); INSERT INTO agtype_table VALUES ('float inf', 'inf'); INSERT INTO agtype_table VALUES ('float -inf', '-inf'); SELECT * FROM agtype_table; type | agtype -----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- bool | true bool | false null | null string | "" string | "This is a string" integer | 0 integer | 9223372036854775807 integer | -9223372036854775808 float | 0.0 float | 1.0 float | -1.0 float | 100000000.000001 float | -100000000.000001 float | 1.2345e-16 float | -1.2345e-16 numeric | 100000000000.0000000000001::numeric numeric | -100000000000.0000000000001::numeric integer array | [-9223372036854775808, -1, 0, 1, 9223372036854775807] float array | [-1.2345e-16, -100000000.000001, -1.0, 0.0, 1.0, 100000000.000001, 1.2345e-16] mixed array | [true, false, null, "string", 1, 1.0, {"bool": true}, -1::numeric, [1, 3, 5]] object | {"bool": true, "null": null, "float": 1.2, "arrayf": [-1.0, 0.0, 1.0], "arrayi": [-1, 0, 1], "object": {"int": 1, "bool": true, "null": null, "float": 8.0, "string": "string"}, "string": "string", "integer": 1} numeric array | [-5::numeric, -1::numeric, 0::numeric, 1::numeric, 9223372036854775807::numeric] float nan | NaN float Infinity | Infinity float -Infinity | -Infinity float inf | Infinity float -inf | -Infinity (27 rows) -- -- These should fail -- INSERT INTO agtype_table VALUES ('bad integer', '9223372036854775808'); ERROR: value "9223372036854775808" is out of range for type bigint LINE 1: INSERT INTO agtype_table VALUES ('bad integer', '92233720368... ^ INSERT INTO agtype_table VALUES ('bad integer', '-9223372036854775809'); ERROR: value "-9223372036854775809" is out of range for type bigint LINE 1: INSERT INTO agtype_table VALUES ('bad integer', '-9223372036... ^ INSERT INTO agtype_table VALUES ('bad float', '-NaN'); ERROR: invalid input syntax for type agtype LINE 1: INSERT INTO agtype_table VALUES ('bad float', '-NaN'); ^ DETAIL: Token "-NaN" is invalid. CONTEXT: agtype data, line 1: -NaN INSERT INTO agtype_table VALUES ('bad float', 'Infi'); ERROR: invalid input syntax for type agtype LINE 1: INSERT INTO agtype_table VALUES ('bad float', 'Infi'); ^ DETAIL: Expected agtype value, but found "Infi". CONTEXT: agtype data, line 1: Infi INSERT INTO agtype_table VALUES ('bad float', '-Infi'); ERROR: invalid input syntax for type agtype LINE 1: INSERT INTO agtype_table VALUES ('bad float', '-Infi'); ^ DETAIL: Token "-Infi" is invalid. CONTEXT: agtype data, line 1: -Infi -- -- Test agtype mathematical operator functions -- +, -, unary -, *, /, %, and ^ -- SELECT agtype_add('1', '-1'); agtype_add ------------ 0 (1 row) SELECT agtype_add('1', '-1.0'); agtype_add ------------ 0.0 (1 row) SELECT agtype_add('1.0', '-1'); agtype_add ------------ 0.0 (1 row) SELECT agtype_add('1.0', '-1.0'); agtype_add ------------ 0.0 (1 row) SELECT agtype_add('1', '-1.0::numeric'); agtype_add -------------- 0.0::numeric (1 row) SELECT agtype_add('1.0', '-1.0::numeric'); agtype_add -------------- 0.0::numeric (1 row) SELECT agtype_add('1::numeric', '-1.0::numeric'); agtype_add -------------- 0.0::numeric (1 row) SELECT agtype_sub('-1', '-1'); agtype_sub ------------ 0 (1 row) SELECT agtype_sub('-1', '-1.0'); agtype_sub ------------ 0.0 (1 row) SELECT agtype_sub('-1.0', '-1'); agtype_sub ------------ 0.0 (1 row) SELECT agtype_sub('-1.0', '-1.0'); agtype_sub ------------ 0.0 (1 row) SELECT agtype_sub('1', '-1.0::numeric'); agtype_sub -------------- 2.0::numeric (1 row) SELECT agtype_sub('1.0', '-1.0::numeric'); agtype_sub -------------- 2.0::numeric (1 row) SELECT agtype_sub('1::numeric', '-1.0::numeric'); agtype_sub -------------- 2.0::numeric (1 row) SELECT agtype_sub('[1, 2, 3]', '1'); agtype_sub ------------ [1, 3] (1 row) SELECT agtype_sub('{"a": 1, "b": 2, "c": 3}', '"a"'); agtype_sub ------------------ {"b": 2, "c": 3} (1 row) SELECT agtype_neg('-1'); agtype_neg ------------ 1 (1 row) SELECT agtype_neg('-1.0'); agtype_neg ------------ 1.0 (1 row) SELECT agtype_neg('0'); agtype_neg ------------ 0 (1 row) SELECT agtype_neg('0.0'); agtype_neg ------------ -0.0 (1 row) SELECT agtype_neg('0::numeric'); agtype_neg ------------ 0::numeric (1 row) SELECT agtype_neg('-1::numeric'); agtype_neg ------------ 1::numeric (1 row) SELECT agtype_neg('1::numeric'); agtype_neg ------------- -1::numeric (1 row) SELECT agtype_mul('-2', '3'); agtype_mul ------------ -6 (1 row) SELECT agtype_mul('2', '-3.0'); agtype_mul ------------ -6.0 (1 row) SELECT agtype_mul('-2.0', '3'); agtype_mul ------------ -6.0 (1 row) SELECT agtype_mul('2.0', '-3.0'); agtype_mul ------------ -6.0 (1 row) SELECT agtype_mul('-2', '3::numeric'); agtype_mul ------------- -6::numeric (1 row) SELECT agtype_mul('2.0', '-3::numeric'); agtype_mul ------------- -6::numeric (1 row) SELECT agtype_mul('-2.0::numeric', '3::numeric'); agtype_mul --------------- -6.0::numeric (1 row) SELECT agtype_div('-4', '3'); agtype_div ------------ -1 (1 row) SELECT agtype_div('4', '-3.0'); agtype_div ------------------- -1.33333333333333 (1 row) SELECT agtype_div('-4.0', '3'); agtype_div ------------------- -1.33333333333333 (1 row) SELECT agtype_div('4.0', '-3.0'); agtype_div ------------------- -1.33333333333333 (1 row) SELECT agtype_div('4', '-3.0::numeric'); agtype_div ------------------------------ -1.3333333333333333::numeric (1 row) SELECT agtype_div('-4.0', '3::numeric'); agtype_div ------------------------------ -1.3333333333333333::numeric (1 row) SELECT agtype_div('4.0::numeric', '-3::numeric'); agtype_div ------------------------------ -1.3333333333333333::numeric (1 row) SELECT agtype_mod('-11', '3'); agtype_mod ------------ -2 (1 row) SELECT agtype_mod('11', '-3.0'); agtype_mod ------------ 2.0 (1 row) SELECT agtype_mod('-11.0', '3'); agtype_mod ------------ -2.0 (1 row) SELECT agtype_mod('11.0', '-3.0'); agtype_mod ------------ 2.0 (1 row) SELECT agtype_mod('11', '-3.0::numeric'); agtype_mod -------------- 2.0::numeric (1 row) SELECT agtype_mod('-11.0', '3::numeric'); agtype_mod ------------- -2::numeric (1 row) SELECT agtype_mod('11.0::numeric', '-3::numeric'); agtype_mod -------------- 2.0::numeric (1 row) SELECT agtype_pow('-2', '3'); agtype_pow ------------ -8.0 (1 row) SELECT agtype_pow('2', '-1.0'); agtype_pow ------------ 0.5 (1 row) SELECT agtype_pow('2.0', '3'); agtype_pow ------------ 8.0 (1 row) SELECT agtype_pow('2.0', '-1.0'); agtype_pow ------------ 0.5 (1 row) SELECT agtype_pow('2::numeric', '3'); agtype_pow ----------------------------- 8.0000000000000000::numeric (1 row) SELECT agtype_pow('2::numeric', '-1.0'); agtype_pow ----------------------------- 0.5000000000000000::numeric (1 row) SELECT agtype_pow('-2', '3::numeric'); agtype_pow ------------------------------ -8.0000000000000000::numeric (1 row) SELECT agtype_pow('2.0', '-1.0::numeric'); agtype_pow ----------------------------- 0.5000000000000000::numeric (1 row) SELECT agtype_pow('2.0::numeric', '-1.0::numeric'); agtype_pow ----------------------------- 0.5000000000000000::numeric (1 row) -- -- Test overloaded agtype any mathematical operator functions -- +, -, *, /, and % -- SELECT agtype_any_add('1', -1); agtype_any_add ---------------- 0 (1 row) SELECT agtype_any_add('1.0', -1); agtype_any_add ---------------- 0.0 (1 row) SELECT agtype_any_add('1::numeric', 1); agtype_any_add ---------------- 2::numeric (1 row) SELECT agtype_any_add('1.0::numeric', 1); agtype_any_add ---------------- 2.0::numeric (1 row) SELECT agtype_any_sub('1', -1); agtype_any_sub ---------------- 2 (1 row) SELECT agtype_any_sub('1.0', -1); agtype_any_sub ---------------- 2.0 (1 row) SELECT agtype_any_sub('1::numeric', 1); agtype_any_sub ---------------- 0::numeric (1 row) SELECT agtype_any_sub('1.0::numeric', 1); agtype_any_sub ---------------- 0.0::numeric (1 row) SELECT agtype_any_mul('-2', 3); agtype_any_mul ---------------- -6 (1 row) SELECT agtype_any_mul('2.0', -3); agtype_any_mul ---------------- -6.0 (1 row) SELECT agtype_any_mul('-2::numeric', 3); agtype_any_mul ---------------- -6::numeric (1 row) SELECT agtype_any_mul('-2.0::numeric', 3); agtype_any_mul ---------------- -6.0::numeric (1 row) SELECT agtype_any_div('-4', 3); agtype_any_div ---------------- -1 (1 row) SELECT agtype_any_div('4.0', -3); agtype_any_div ------------------- -1.33333333333333 (1 row) SELECT agtype_any_div('-4::numeric', 3); agtype_any_div ------------------------------ -1.3333333333333333::numeric (1 row) SELECT agtype_any_div('-4.0::numeric', 3); agtype_any_div ------------------------------ -1.3333333333333333::numeric (1 row) SELECT agtype_any_mod('-11', 3); agtype_any_mod ---------------- -2 (1 row) SELECT agtype_any_mod('11.0', -3); agtype_any_mod ---------------- 2.0 (1 row) SELECT agtype_any_mod('-11::numeric', 3); agtype_any_mod ---------------- -2::numeric (1 row) SELECT agtype_any_mod('-11.0::numeric', 3); agtype_any_mod ---------------- -2.0::numeric (1 row) -- -- Should fail with divide by zero -- SELECT agtype_div('1', '0'); ERROR: division by zero SELECT agtype_div('1', '0.0'); ERROR: division by zero SELECT agtype_div('1.0', '0'); ERROR: division by zero SELECT agtype_div('1.0', '0.0'); ERROR: division by zero SELECT agtype_div('1', '0::numeric'); ERROR: division by zero SELECT agtype_div('1.0', '0::numeric'); ERROR: division by zero SELECT agtype_div('1::numeric', '0'); ERROR: division by zero SELECT agtype_div('1::numeric', '0.0'); ERROR: division by zero SELECT agtype_div('1::numeric', '0::numeric'); ERROR: division by zero SELECT agtype_any_div('1', 0); ERROR: division by zero SELECT agtype_any_div('1.0', 0); ERROR: division by zero SELECT agtype_any_div('-1::numeric', 0); ERROR: division by zero SELECT agtype_any_div('-1.0::numeric', 0); ERROR: division by zero -- -- Should get Infinity -- SELECT agtype_pow('0', '-1'); agtype_pow ------------ Infinity (1 row) SELECT agtype_pow('-0.0', '-1'); agtype_pow ------------ -Infinity (1 row) -- -- Should get - ERROR: zero raised to a negative power is undefined -- SELECT agtype_pow('0', '-1::numeric'); ERROR: zero raised to a negative power is undefined SELECT agtype_pow('-0.0', '-1::numeric'); ERROR: zero raised to a negative power is undefined SELECT agtype_pow('0::numeric', '-1'); ERROR: zero raised to a negative power is undefined SELECT agtype_pow('-0.0::numeric', '-1'); ERROR: zero raised to a negative power is undefined SELECT agtype_pow('-0.0::numeric', '-1'); ERROR: zero raised to a negative power is undefined -- -- Test operators +, -, unary -, *, /, %, and ^ -- SELECT '3.14'::agtype + '3.14'::agtype; ?column? ---------- 6.28 (1 row) SELECT '3.14'::agtype - '3.14'::agtype; ?column? ---------- 0.0 (1 row) SELECT -'3.14'::agtype; ?column? ---------- -3.14 (1 row) SELECT '3.14'::agtype * '3.14'::agtype; ?column? ---------- 9.8596 (1 row) SELECT '3.14'::agtype / '3.14'::agtype; ?column? ---------- 1.0 (1 row) SELECT '3.14'::agtype % '3.14'::agtype; ?column? ---------- 0.0 (1 row) SELECT '3.14'::agtype ^ '2'::agtype; ?column? ---------- 9.8596 (1 row) SELECT '3'::agtype + '3'::agtype; ?column? ---------- 6 (1 row) SELECT '3'::agtype + '3.14'::agtype; ?column? ---------- 6.14 (1 row) SELECT '3'::agtype + '3.14::numeric'::agtype; ?column? --------------- 6.14::numeric (1 row) SELECT '3.14'::agtype + '3.14::numeric'::agtype; ?column? --------------- 6.28::numeric (1 row) SELECT '3.14::numeric'::agtype + '3.14::numeric'::agtype; ?column? --------------- 6.28::numeric (1 row) -- -- Test operator - for extended functionality -- SELECT '{"a":1 , "b":2, "c":3}'::agtype - '"a"'; ?column? ------------------ {"b": 2, "c": 3} (1 row) SELECT '{"a":null , "b":2, "c":3}'::agtype - '"a"'; ?column? ------------------ {"b": 2, "c": 3} (1 row) SELECT '{"a":1 , "b":2, "c":3}'::agtype - '"b"'; ?column? ------------------ {"a": 1, "c": 3} (1 row) SELECT '{"a":1 , "b":2, "c":3}'::agtype - '"c"'; ?column? ------------------ {"a": 1, "b": 2} (1 row) SELECT '{"a":1 , "b":2, "c":3}'::agtype - '"d"'; ?column? -------------------------- {"a": 1, "b": 2, "c": 3} (1 row) SELECT '{"a":1 , "b":2, "c":3}'::agtype - '""'; ?column? -------------------------- {"a": 1, "b": 2, "c": 3} (1 row) SELECT '{"a":1 , "b":2, "c":3}'::agtype - '"1"'; ?column? -------------------------- {"a": 1, "b": 2, "c": 3} (1 row) SELECT '{"a":1 , "b":2, "c":3, "1": 4}'::agtype - '"1"'; ?column? -------------------------- {"a": 1, "b": 2, "c": 3} (1 row) SELECT '{"a":1 , "b":2, "c":3}'::agtype - age_tostring('a'); ?column? ------------------ {"b": 2, "c": 3} (1 row) SELECT '{"a":1 , "b":2, "c":3}'::agtype - age_tostring(1); ?column? -------------------------- {"a": 1, "b": 2, "c": 3} (1 row) SELECT '{"a":1 , "b":2, "c":3, "1": 4}'::agtype - age_tostring(1); ?column? -------------------------- {"a": 1, "b": 2, "c": 3} (1 row) SELECT '{}'::agtype - '"a"'; ?column? ---------- {} (1 row) SELECT '["a","b","c"]'::agtype - 3; ?column? ----------------- ["a", "b", "c"] (1 row) SELECT '["a","b","c"]'::agtype - 2; ?column? ------------ ["a", "b"] (1 row) SELECT '["a","b","c"]'::agtype - 1; ?column? ------------ ["a", "c"] (1 row) SELECT '["a","b","c"]'::agtype - 0; ?column? ------------ ["b", "c"] (1 row) SELECT '["a","b","c"]'::agtype - -1; ?column? ------------ ["a", "b"] (1 row) SELECT '["a","b","c"]'::agtype - -2; ?column? ------------ ["a", "c"] (1 row) SELECT '["a","b","c"]'::agtype - -3; ?column? ------------ ["b", "c"] (1 row) SELECT '["a","b","c"]'::agtype - -4; ?column? ----------------- ["a", "b", "c"] (1 row) SELECT '["a","b","c"]'::agtype - '2'; ?column? ------------ ["a", "b"] (1 row) SELECT '["a","b","c"]'::agtype - -(true::int); ?column? ------------ ["a", "b"] (1 row) SELECT '[]'::agtype - 1; ?column? ---------- [] (1 row) SELECT '{"a":1 , "b":2, "c":3}'::agtype - '["b"]'::agtype; ?column? ------------------ {"a": 1, "c": 3} (1 row) SELECT '{"a":1 , "b":2, "c":3}'::agtype - '["c","b"]'::agtype; ?column? ---------- {"a": 1} (1 row) SELECT '{"a":1 , "b":2, "c":3}'::agtype - '[]'::agtype; ?column? -------------------------- {"a": 1, "b": 2, "c": 3} (1 row) SELECT '["a","b","c"]'::agtype - '[]'; ?column? ----------------- ["a", "b", "c"] (1 row) SELECT '["a","b","c"]'::agtype - '[1]'; ?column? ------------ ["a", "c"] (1 row) SELECT '[1, 2, 3, 4, 5, 6]'::agtype - '[9]'; ?column? -------------------- [1, 2, 3, 4, 5, 6] (1 row) SELECT '["a","b","c"]'::agtype - '[1, -1]'; ?column? ---------- ["a"] (1 row) SELECT '["a","b","c"]'::agtype - '[1, -1, 3, 4]'; ?column? ---------- ["a"] (1 row) SELECT '["a","b","c"]'::agtype - '[1, -1, 3, 4, 0]'; ?column? ---------- [] (1 row) SELECT '["a","b","c"]'::agtype - '[-1, 1, 3, 4, 1]'; ?column? ---------- ["a"] (1 row) SELECT '["a","b","c"]'::agtype - '[-1, 1, 3, 4, 0]'; ?column? ---------- [] (1 row) SELECT '["a","b","c"]'::agtype - '[1, 1]'; ?column? ------------ ["a", "c"] (1 row) SELECT '["a","b","c"]'::agtype - '[1, 1, 1]'; ?column? ------------ ["a", "c"] (1 row) SELECT '["a","b","c"]'::agtype - '[1, 1, -1]'; ?column? ---------- ["a"] (1 row) SELECT '["a","b","c"]'::agtype - '[1, 1, -1, -1]'; ?column? ---------- ["a"] (1 row) SELECT '["a","b","c"]'::agtype - '[-2, -4, -5, -1]'; ?column? ---------- ["a"] (1 row) SELECT '[1, 2, 3, 4, 5, 6]'::agtype - '[0, 4, 3, 2]'; ?column? ---------- [2, 6] (1 row) SELECT '[1, 2, 3, 4, 5, 6]'::agtype - '[0, 4, 3, 2, -1]'; ?column? ---------- [2] (1 row) SELECT '[1, 2, 3, 4, 5, 6]'::agtype - '[3, 3, 4, 4, 6, 8, 9]'; ?column? -------------- [1, 2, 3, 6] (1 row) SELECT '[1, 2, 3, 4, 5, 6]'::agtype - '[8, 9, -7, -6]'; ?column? ----------------- [2, 3, 4, 5, 6] (1 row) -- multiple sub operations SELECT '{"a":1 , "b":2, "c":3, "1": 4}'::agtype - age_tostring(1) - age_tostring(1); ?column? -------------------------- {"a": 1, "b": 2, "c": 3} (1 row) SELECT '{"a":1 , "b":2, "c":3, "1": 4}'::agtype - age_tostring(1) - age_tostring('a'); ?column? ------------------ {"b": 2, "c": 3} (1 row) SELECT '{"a":1 , "b":2, "c":3, "1": 4}'::agtype - age_tostring(1) - age_tostring('a') - age_tostring('e') - age_tostring('c'); ?column? ---------- {"b": 2} (1 row) SELECT '{"a":1 , "b":2, "c":3}'::agtype - '["c","b"]' - '["a"]'; ?column? ---------- {} (1 row) SELECT '{"a":1 , "b":2, "c":3}'::agtype - '["c","b"]' - '["e"]' - '["a"]'; ?column? ---------- {} (1 row) SELECT '{"a":1 , "b":2, "c":3}'::agtype - '["c","b"]' - '[]'; ?column? ---------- {"a": 1} (1 row) SELECT '["a","b","c"]'::agtype - '[-1]' - '[-1]'; ?column? ---------- ["a"] (1 row) SELECT '["a","b","c"]'::agtype - '[-1]' - '[-2]' - '[-2]'; ?column? ---------- ["b"] (1 row) SELECT '["a","b","c"]'::agtype - '[-1]' - '[]' - '[-2]'; ?column? ---------- ["b"] (1 row) SELECT '["a","b","c"]'::agtype - '[-1]' - '[4]' - '[-2]'; ?column? ---------- ["b"] (1 row) SELECT '[1, 2, 3, 4, 5, 6]'::agtype - '[8, 9, -7, -6]' - '1'; ?column? -------------- [2, 4, 5, 6] (1 row) SELECT '[1, 2, 3, 4, 5, 6]'::agtype - '[8, 9, -7, -6]' - '[1, 0]'; ?column? ----------- [4, 5, 6] (1 row) SELECT '[1, 2, 3, 4, 5, 6]'::agtype - '[8, 9, -7, -6]' - 3 - '[]'; ?column? -------------- [2, 3, 4, 6] (1 row) -- errors out SELECT '["a","b","c"]'::agtype - '["1"]'; ERROR: expected agtype integer, not agtype string SELECT '["a","b","c"]'::agtype - '[null]'; ERROR: expected agtype integer, not agtype NULL SELECT '["a","b","c"]'::agtype - '"1"'; ERROR: expected agtype integer, not agtype string SELECT '["a","b","c"]'::agtype - 'null'; ERROR: expected agtype integer, not agtype NULL SELECT '["a","b","c"]'::agtype - '[-1]' - '["-2"]' - '[-2]'; ERROR: expected agtype integer, not agtype string SELECT '{"a":1 , "b":2, "c":3}'::agtype - '[1]'; ERROR: expected agtype string, not agtype integer SELECT '{"a":1 , "b":2, "c":3}'::agtype - '[null]'; ERROR: expected agtype string, not agtype NULL SELECT '{"a":1 , "b":2, "c":3}'::agtype - '1'; ERROR: expected agtype string, not agtype integer SELECT '{"a":1 , "b":2, "c":3}'::agtype - 'null'; ERROR: expected agtype string, not agtype NULL SELECT '{"a":1 , "b":2, "c":3}'::agtype - '["c","b"]' - '[1]' - '["a"]'; ERROR: expected agtype string, not agtype integer SELECT 'null'::agtype - '1'; ERROR: Invalid input parameter types for agtype_sub SELECT 'null'::agtype - '[1]'; ERROR: must be object or array, not a scalar value SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype - '"a"'; ERROR: Invalid input parameter types for agtype_sub SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype - '["a"]'; ERROR: must be object or array, not a scalar value SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype - '[1]'; ERROR: must be object or array, not a scalar value SELECT '{"id": 1688849860263951, "label": "e_var", "end_id": 281474976710664, "start_id": 281474976710663, "properties": {"id": 0}}::edge'::agtype - '{"id": 1688849860263951, "label": "e_var", "end_id": 281474976710664, "start_id": 281474976710663, "properties": {"id": 0}}::edge'::agtype; ERROR: Invalid input parameter types for agtype_sub SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype - '[]'; ERROR: must be object or array, not a scalar value -- -- Test operator + for extended functionality -- SELECT '[1, 2, 3]'::agtype + '[4, 5]'::agtype; ?column? ----------------- [1, 2, 3, 4, 5] (1 row) SELECT '[1, 2, true, "string", 1.4::numeric]'::agtype + '[4.5, -5::numeric, {"a": true}]'::agtype; ?column? --------------------------------------------------------------------- [1, 2, true, "string", 1.4::numeric, 4.5, -5::numeric, {"a": true}] (1 row) SELECT '[{"a":1 , "b":2, "c":3}]'::agtype + '[]'; ?column? ---------------------------- [{"a": 1, "b": 2, "c": 3}] (1 row) SELECT '[{"a":1 , "b":2, "c":3}]'::agtype + '[{"d": 4}]'; ?column? -------------------------------------- [{"a": 1, "b": 2, "c": 3}, {"d": 4}] (1 row) SELECT '{"a":1 , "b":2, "c":3}'::agtype + '["b", 2, {"d": 4}]'::agtype; ?column? ---------------------------------------------- [{"a": 1, "b": 2, "c": 3}, "b", 2, {"d": 4}] (1 row) SELECT '["b", 2, {"d": 4}]'::agtype + '{"a":1 , "b":2, "c":3}'::agtype; ?column? ---------------------------------------------- ["b", 2, {"d": 4}, {"a": 1, "b": 2, "c": 3}] (1 row) SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype + '[1]'; ?column? --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex, 1] (1 row) SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888}}::vertex'::agtype + '[1, "e", true]'; ?column? -------------------------------------------------------------------------------------------------------------------------- [{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888}}::vertex, 1, "e", true] (1 row) SELECT '[]'::agtype + '{}'; ?column? ---------- [{}] (1 row) SELECT '[]'::agtype + '{"a": 1}'; ?column? ------------ [{"a": 1}] (1 row) SELECT '{"a":1 , "b":2, "c":3}'::agtype + '{"b": 2}'; ?column? -------------------------- {"a": 1, "b": 2, "c": 3} (1 row) SELECT '{"a":1 , "b":2, "c":3}'::agtype + '{"": 2}'; ?column? --------------------------------- {"": 2, "a": 1, "b": 2, "c": 3} (1 row) SELECT '{"a":1 , "b":2, "c":3}'::agtype + '{"a":1 , "b":2, "c":3}'; ?column? -------------------------- {"a": 1, "b": 2, "c": 3} (1 row) SELECT '{"a":1 , "b":2, "c":3}'::agtype + '{}'; ?column? -------------------------- {"a": 1, "b": 2, "c": 3} (1 row) SELECT '{}'::agtype + '{}'; ?column? ---------- {} (1 row) SELECT '1'::agtype + '[{"a":1 , "b":2, "c":3}]'::agtype; ?column? ------------------------------- [1, {"a": 1, "b": 2, "c": 3}] (1 row) SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888}}::vertex'::agtype + '{"d": 4}'; ?column? ---------------------------------------------------------------------------------------------------------------------- [{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888}}::vertex, {"d": 4}] (1 row) SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888}}::vertex'::agtype + '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888}}::vertex'::agtype; ?column? ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888}}::vertex, {"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888}}::vertex] (1 row) SELECT '[{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path'::agtype + ' [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path'::agtype; ?column? -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [[{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path, [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path] (1 row) SELECT '[{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path'::agtype + '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype; ?column? ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [[{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path, {"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex] (1 row) SELECT '{"id": 1688849860263951, "label": "e_var", "end_id": 281474976710664, "start_id": 281474976710663, "properties": {"id": 0}}::edge'::agtype + '{"id": 1688849860263951, "label": "e_var", "end_id": 281474976710664, "start_id": 281474976710663, "properties": {"id": 0}}::edge'::agtype; ?column? ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [{"id": 1688849860263951, "label": "e_var", "end_id": 281474976710664, "start_id": 281474976710663, "properties": {"id": 0}}::edge, {"id": 1688849860263951, "label": "e_var", "end_id": 281474976710664, "start_id": 281474976710663, "properties": {"id": 0}}::edge] (1 row) SELECT '{"id": 1688849860263951, "label": "e_var", "end_id": 281474976710664, "start_id": 281474976710663, "properties": {"id": 0}}::edge'::agtype + '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888}}::vertex'::agtype; ?column? ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1688849860263951, "label": "e_var", "end_id": 281474976710664, "start_id": 281474976710663, "properties": {"id": 0}}::edge, {"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888}}::vertex] (1 row) -- errors out SELECT '1'::agtype + '{"a":1 , "b":2, "c":3}'::agtype; ERROR: invalid left operand for agtype concatenation SELECT '{"a":1 , "b":2, "c":3}'::agtype + '"string"'; ERROR: invalid right operand for agtype concatenation -- -- Test overloaded agytype any operators +, -, *, /, % -- SELECT '3'::agtype + 3; ?column? ---------- 6 (1 row) SELECT '3.14'::agtype + 3; ?column? ---------- 6.14 (1 row) SELECT '3.14::numeric'::agtype + 3; ?column? --------------- 6.14::numeric (1 row) SELECT 3 + '3'::agtype; ?column? ---------- 6 (1 row) SELECT 3 + '3.14'::agtype; ?column? ---------- 6.14 (1 row) SELECT 3 + '3.14::numeric'::agtype; ?column? --------------- 6.14::numeric (1 row) SELECT '3'::agtype - 3; ?column? ---------- 0 (1 row) SELECT '3.14'::agtype - 3; ?column? ---------- 0.14 (1 row) SELECT '3.14::numeric'::agtype - 3; ?column? --------------- 0.14::numeric (1 row) SELECT 3 - '3'::agtype; ?column? ---------- 0 (1 row) SELECT 3 - '3.14'::agtype; ?column? ---------- -0.14 (1 row) SELECT 3 - '3.14::numeric'::agtype; ?column? ---------------- -0.14::numeric (1 row) SELECT '3'::agtype * 3; ?column? ---------- 9 (1 row) SELECT '3.14'::agtype * 3; ?column? ---------- 9.42 (1 row) SELECT '3.14::numeric'::agtype * 3; ?column? --------------- 9.42::numeric (1 row) SELECT 3 * '3'::agtype; ?column? ---------- 9 (1 row) SELECT 3 * '3.14'::agtype; ?column? ---------- 9.42 (1 row) SELECT 3 * '3.14::numeric'::agtype; ?column? --------------- 9.42::numeric (1 row) SELECT '3'::agtype / 3; ?column? ---------- 1 (1 row) SELECT '3.14'::agtype / 3; ?column? ------------------ 1.04666666666667 (1 row) SELECT '3.14::numeric'::agtype / 3; ?column? --------------------------------- 1.04666666666666666667::numeric (1 row) SELECT 3 / '3'::agtype; ?column? ---------- 1 (1 row) SELECT 3 / '3.14'::agtype; ?column? ------------------- 0.955414012738854 (1 row) SELECT 3 / '3.14::numeric'::agtype; ?column? --------------------------------- 0.95541401273885350318::numeric (1 row) SELECT '3'::agtype % 3; ?column? ---------- 0 (1 row) SELECT '3.14'::agtype % 3; ?column? ---------- 0.14 (1 row) SELECT '3.14::numeric'::agtype % 3; ?column? --------------- 0.14::numeric (1 row) SELECT 3 % '3'::agtype; ?column? ---------- 0 (1 row) SELECT 3 % '3.14'::agtype; ?column? ---------- 3.0 (1 row) SELECT 3 % '3.14::numeric'::agtype; ?column? --------------- 3.00::numeric (1 row) -- -- Test overloaded agytype any functions and operators for NULL input -- +, -, *, /, %, =, <>, <, >, <=, >= -- These should all return null SELECT agtype_any_add('null'::agtype, 1); agtype_any_add ---------------- (1 row) SELECT agtype_any_sub('null'::agtype, 1); agtype_any_sub ---------------- (1 row) SELECT agtype_any_mul('null'::agtype, 1); agtype_any_mul ---------------- (1 row) SELECT agtype_any_div('null'::agtype, 1); agtype_any_div ---------------- (1 row) SELECT agtype_any_mod('null'::agtype, 1); agtype_any_mod ---------------- (1 row) SELECT agtype_any_add(null, '1'::agtype); agtype_any_add ---------------- (1 row) SELECT agtype_any_sub(null, '1'::agtype); agtype_any_sub ---------------- (1 row) SELECT agtype_any_mul(null, '1'::agtype); agtype_any_mul ---------------- (1 row) SELECT agtype_any_div(null, '1'::agtype); agtype_any_div ---------------- (1 row) SELECT agtype_any_mod(null, '1'::agtype); agtype_any_mod ---------------- (1 row) SELECT 1 + 'null'::agtype; ?column? ---------- (1 row) SELECT 1 - 'null'::agtype; ?column? ---------- (1 row) SELECT 1 * 'null'::agtype; ?column? ---------- (1 row) SELECT 1 / 'null'::agtype; ?column? ---------- (1 row) SELECT 1 % 'null'::agtype; ?column? ---------- (1 row) SELECT '1'::agtype + null; ?column? ---------- (1 row) SELECT '1'::agtype - null; ?column? ---------- (1 row) SELECT '1'::agtype * null; ?column? ---------- (1 row) SELECT '1'::agtype / null; ?column? ---------- (1 row) SELECT '1'::agtype % null; ?column? ---------- (1 row) SELECT 1 = 'null'::agtype; ?column? ---------- (1 row) SELECT 1 <> 'null'::agtype; ?column? ---------- (1 row) SELECT 1 < 'null'::agtype; ?column? ---------- (1 row) SELECT 1 > 'null'::agtype; ?column? ---------- (1 row) SELECT 1 <= 'null'::agtype; ?column? ---------- (1 row) SELECT 1 >= 'null'::agtype; ?column? ---------- (1 row) SELECT '1'::agtype = null; ?column? ---------- (1 row) SELECT '1'::agtype <> null; ?column? ---------- (1 row) SELECT '1'::agtype < null; ?column? ---------- (1 row) SELECT '1'::agtype > null; ?column? ---------- (1 row) SELECT '1'::agtype <= null; ?column? ---------- (1 row) SELECT '1'::agtype >= null; ?column? ---------- (1 row) SELECT agtype_any_eq('null'::agtype, 1); agtype_any_eq --------------- (1 row) SELECT agtype_any_ne('null'::agtype, 1); agtype_any_ne --------------- (1 row) SELECT agtype_any_lt('null'::agtype, 1); agtype_any_lt --------------- (1 row) SELECT agtype_any_gt('null'::agtype, 1); agtype_any_gt --------------- (1 row) SELECT agtype_any_le('null'::agtype, 1); agtype_any_le --------------- (1 row) SELECT agtype_any_ge('null'::agtype, 1); agtype_any_ge --------------- (1 row) SELECT agtype_any_eq(null, '1'::agtype); agtype_any_eq --------------- (1 row) SELECT agtype_any_ne(null, '1'::agtype); agtype_any_ne --------------- (1 row) SELECT agtype_any_lt(null, '1'::agtype); agtype_any_lt --------------- (1 row) SELECT agtype_any_gt(null, '1'::agtype); agtype_any_gt --------------- (1 row) SELECT agtype_any_le(null, '1'::agtype); agtype_any_le --------------- (1 row) SELECT agtype_any_ge(null, '1'::agtype); agtype_any_ge --------------- (1 row) -- -- Test orderability of comparison operators =, <>, <, >, <=, >= -- These should all return true -- Integer SELECT agtype_in('1') = agtype_in('1'); ?column? ---------- t (1 row) SELECT agtype_in('1') <> agtype_in('2'); ?column? ---------- t (1 row) SELECT agtype_in('1') <> agtype_in('-2'); ?column? ---------- t (1 row) SELECT agtype_in('1') < agtype_in('2'); ?column? ---------- t (1 row) SELECT agtype_in('1') > agtype_in('-2'); ?column? ---------- t (1 row) SELECT agtype_in('1') <= agtype_in('2'); ?column? ---------- t (1 row) SELECT agtype_in('1') >= agtype_in('-2'); ?column? ---------- t (1 row) -- Float SELECT agtype_in('1.01') = agtype_in('1.01'); ?column? ---------- t (1 row) SELECT agtype_in('1.01') <> agtype_in('1.001'); ?column? ---------- t (1 row) SELECT agtype_in('1.01') <> agtype_in('1.011'); ?column? ---------- t (1 row) SELECT agtype_in('1.01') < agtype_in('1.011'); ?column? ---------- t (1 row) SELECT agtype_in('1.01') > agtype_in('1.001'); ?column? ---------- t (1 row) SELECT agtype_in('1.01') <= agtype_in('1.011'); ?column? ---------- t (1 row) SELECT agtype_in('1.01') >= agtype_in('1.001'); ?column? ---------- t (1 row) SELECT agtype_in('1.01') < agtype_in('Infinity'); ?column? ---------- t (1 row) SELECT agtype_in('1.01') > agtype_in('-Infinity'); ?column? ---------- t (1 row) -- NaN, under ordering, is considered to be the biggest numeric value -- greater than positive infinity. So, greater than any other number. SELECT agtype_in('1.01') < agtype_in('NaN'); ?column? ---------- t (1 row) SELECT agtype_in('NaN') > agtype_in('Infinity'); ?column? ---------- t (1 row) SELECT agtype_in('NaN') > agtype_in('-Infinity'); ?column? ---------- t (1 row) SELECT agtype_in('NaN') = agtype_in('NaN'); ?column? ---------- t (1 row) -- Mixed Integer and Float SELECT agtype_in('1') = agtype_in('1.0'); ?column? ---------- t (1 row) SELECT agtype_in('1') <> agtype_in('1.001'); ?column? ---------- t (1 row) SELECT agtype_in('1') <> agtype_in('0.999999'); ?column? ---------- t (1 row) SELECT agtype_in('1') < agtype_in('1.001'); ?column? ---------- t (1 row) SELECT agtype_in('1') > agtype_in('0.999999'); ?column? ---------- t (1 row) SELECT agtype_in('1') <= agtype_in('1.001'); ?column? ---------- t (1 row) SELECT agtype_in('1') >= agtype_in('0.999999'); ?column? ---------- t (1 row) SELECT agtype_in('1') < agtype_in('Infinity'); ?column? ---------- t (1 row) SELECT agtype_in('1') > agtype_in('-Infinity'); ?column? ---------- t (1 row) SELECT agtype_in('1') < agtype_in('NaN'); ?column? ---------- t (1 row) -- Mixed Float and Integer SELECT agtype_in('1.0') = agtype_in('1'); ?column? ---------- t (1 row) SELECT agtype_in('1.001') <> agtype_in('1'); ?column? ---------- t (1 row) SELECT agtype_in('0.999999') <> agtype_in('1'); ?column? ---------- t (1 row) SELECT agtype_in('1.001') > agtype_in('1'); ?column? ---------- t (1 row) SELECT agtype_in('0.999999') < agtype_in('1'); ?column? ---------- t (1 row) -- Mixed Integer and Numeric SELECT agtype_in('1') = agtype_in('1::numeric'); ?column? ---------- t (1 row) SELECT agtype_in('1') <> agtype_in('2::numeric'); ?column? ---------- t (1 row) SELECT agtype_in('1') <> agtype_in('-2::numeric'); ?column? ---------- t (1 row) SELECT agtype_in('1') < agtype_in('2::numeric'); ?column? ---------- t (1 row) SELECT agtype_in('1') > agtype_in('-2::numeric'); ?column? ---------- t (1 row) SELECT agtype_in('1') <= agtype_in('2::numeric'); ?column? ---------- t (1 row) SELECT agtype_in('1') >= agtype_in('-2::numeric'); ?column? ---------- t (1 row) -- Mixed Float and Numeric SELECT agtype_in('1.01') = agtype_in('1.01::numeric'); ?column? ---------- t (1 row) SELECT agtype_in('1.01') <> agtype_in('1.001::numeric'); ?column? ---------- t (1 row) SELECT agtype_in('1.01') <> agtype_in('1.011::numeric'); ?column? ---------- t (1 row) SELECT agtype_in('1.01') < agtype_in('1.011::numeric'); ?column? ---------- t (1 row) SELECT agtype_in('1.01') > agtype_in('1.001::numeric'); ?column? ---------- t (1 row) SELECT agtype_in('1.01') <= agtype_in('1.011::numeric'); ?column? ---------- t (1 row) SELECT agtype_in('1.01') >= agtype_in('1.001::numeric'); ?column? ---------- t (1 row) -- Strings SELECT agtype_in('"a"') = agtype_in('"a"'); ?column? ---------- t (1 row) SELECT agtype_in('"a"') <> agtype_in('"b"'); ?column? ---------- t (1 row) SELECT agtype_in('"a"') < agtype_in('"aa"'); ?column? ---------- t (1 row) SELECT agtype_in('"b"') > agtype_in('"aa"'); ?column? ---------- t (1 row) SELECT agtype_in('"a"') <= agtype_in('"aa"'); ?column? ---------- t (1 row) SELECT agtype_in('"b"') >= agtype_in('"aa"'); ?column? ---------- t (1 row) -- Lists SELECT agtype_in('[0, 1, null, 2]') = agtype_in('[0, 1, null, 2]'); ?column? ---------- t (1 row) SELECT agtype_in('[0, 1, null, 2]') <> agtype_in('[2, null, 1, 0]'); ?column? ---------- t (1 row) SELECT agtype_in('[0, 1, null]') < agtype_in('[0, 1, null, 2]'); ?column? ---------- t (1 row) SELECT agtype_in('[1, 1, null, 2]') > agtype_in('[0, 1, null, 2]'); ?column? ---------- t (1 row) -- Objects (Maps) SELECT agtype_in('{"bool":true, "null": null}') = agtype_in('{"null":null, "bool":true}'); ?column? ---------- t (1 row) SELECT agtype_in('{"bool":true}') < agtype_in('{"bool":true, "null": null}'); ?column? ---------- t (1 row) -- Comparisons between types -- Path < Edge < Vertex < Object < List < String < Boolean < Integer = Float = Numeric < Null SELECT agtype_in('1') < agtype_in('null'); ?column? ---------- t (1 row) SELECT agtype_in('NaN') < agtype_in('null'); ?column? ---------- t (1 row) SELECT agtype_in('Infinity') < agtype_in('null'); ?column? ---------- t (1 row) SELECT agtype_in('true') < agtype_in('1'); ?column? ---------- t (1 row) SELECT agtype_in('true') < agtype_in('NaN'); ?column? ---------- t (1 row) SELECT agtype_in('true') < agtype_in('Infinity'); ?column? ---------- t (1 row) SELECT agtype_in('"string"') < agtype_in('true'); ?column? ---------- t (1 row) SELECT agtype_in('[1,3,5,7,9,11]') < agtype_in('"string"'); ?column? ---------- t (1 row) SELECT agtype_in('{"bool":true, "integer":1}') < agtype_in('[1,3,5,7,9,11]'); ?column? ---------- t (1 row) SELECT agtype_in('[1, "string"]') < agtype_in('[1, 1]'); ?column? ---------- t (1 row) SELECT agtype_in('{"bool":true, "integer":1}') < agtype_in('{"bool":true, "integer":null}'); ?column? ---------- t (1 row) SELECT agtype_in('{"id":0, "label": "v", "properties":{"i":0}}::vertex') < agtype_in('{"bool":true, "i":0}'); ?column? ---------- t (1 row) SELECT agtype_in('{"id":2, "start_id":0, "end_id":1, "label": "e", "properties":{"i":0}}::edge') < agtype_in('{"id":0, "label": "v", "properties":{"i":0}}::vertex'); ?column? ---------- t (1 row) SELECT agtype_in('[{"id": 0, "label": "v", "properties": {"i": 0}}::vertex, {"id": 2, "start_id": 0, "end_id": 1, "label": "e", "properties": {"i": 0}}::edge, {"id": 1, "label": "v", "properties": {"i": 0}}::vertex]::path') < agtype_in('{"id":2, "start_id":0, "end_id":1, "label": "e", "properties":{"i":0}}::edge'); ?column? ---------- t (1 row) SELECT agtype_in('1::numeric') < agtype_in('null'); ?column? ---------- t (1 row) SELECT agtype_in('true') < agtype_in('1::numeric'); ?column? ---------- t (1 row) -- Testing orderability between types SELECT * FROM create_graph('orderability_graph'); NOTICE: graph "orderability_graph" has been created create_graph -------------- (1 row) SELECT * FROM cypher('orderability_graph', $$ CREATE (:vertex {prop: null}), (:vertex {prop: 1}), (:vertex {prop: 1.01}),(:vertex {prop: true}), (:vertex {prop:"string"}),(:vertex {prop:"string_2"}), (:vertex {prop:[1, 2, 3]}), (:vertex {prop:[1, 2, 3, 4, 5]}), (:vertex {prop:{bool:true, i:0}}), (:vertex {prop:{bool:true, i:null}}), (:vertex {prop: {id:0, label: "v", properties:{i:0}}::vertex}), (:vertex {prop: {id: 2, start_id: 0, end_id: 1, label: "e", properties: {i: 0}}::edge}), (:vertex {prop: [{id: 0, label: "v", properties: {i: 0}}::vertex, {id: 2, start_id: 0, end_id: 1, label: "e", properties: {i: 0}}::edge, {id: 1, label: "v", properties: {i: 0}}::vertex]::path}) $$) AS (x agtype); x --- (0 rows) SELECT * FROM cypher('orderability_graph', $$ MATCH (n) RETURN n ORDER BY n.prop $$) AS (sorted agtype); sorted ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 844424930131981, "label": "vertex", "properties": {"prop": [{"id": 0, "label": "v", "properties": {"i": 0}}::vertex, {"id": 2, "label": "e", "end_id": 1, "start_id": 0, "properties": {"i": 0}}::edge, {"id": 1, "label": "v", "properties": {"i": 0}}::vertex]::path}}::vertex {"id": 844424930131980, "label": "vertex", "properties": {"prop": {"id": 2, "label": "e", "end_id": 1, "start_id": 0, "properties": {"i": 0}}::edge}}::vertex {"id": 844424930131979, "label": "vertex", "properties": {"prop": {"id": 0, "label": "v", "properties": {"i": 0}}::vertex}}::vertex {"id": 844424930131978, "label": "vertex", "properties": {"prop": {"bool": true}}}::vertex {"id": 844424930131977, "label": "vertex", "properties": {"prop": {"i": 0, "bool": true}}}::vertex {"id": 844424930131975, "label": "vertex", "properties": {"prop": [1, 2, 3]}}::vertex {"id": 844424930131976, "label": "vertex", "properties": {"prop": [1, 2, 3, 4, 5]}}::vertex {"id": 844424930131973, "label": "vertex", "properties": {"prop": "string"}}::vertex {"id": 844424930131974, "label": "vertex", "properties": {"prop": "string_2"}}::vertex {"id": 844424930131972, "label": "vertex", "properties": {"prop": true}}::vertex {"id": 844424930131970, "label": "vertex", "properties": {"prop": 1}}::vertex {"id": 844424930131971, "label": "vertex", "properties": {"prop": 1.01}}::vertex {"id": 844424930131969, "label": "vertex", "properties": {}}::vertex (13 rows) SELECT * FROM cypher('orderability_graph', $$ MATCH (n) RETURN n ORDER BY n.prop DESC $$) AS (sorted agtype); sorted ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "vertex", "properties": {}}::vertex {"id": 844424930131971, "label": "vertex", "properties": {"prop": 1.01}}::vertex {"id": 844424930131970, "label": "vertex", "properties": {"prop": 1}}::vertex {"id": 844424930131972, "label": "vertex", "properties": {"prop": true}}::vertex {"id": 844424930131974, "label": "vertex", "properties": {"prop": "string_2"}}::vertex {"id": 844424930131973, "label": "vertex", "properties": {"prop": "string"}}::vertex {"id": 844424930131976, "label": "vertex", "properties": {"prop": [1, 2, 3, 4, 5]}}::vertex {"id": 844424930131975, "label": "vertex", "properties": {"prop": [1, 2, 3]}}::vertex {"id": 844424930131977, "label": "vertex", "properties": {"prop": {"i": 0, "bool": true}}}::vertex {"id": 844424930131978, "label": "vertex", "properties": {"prop": {"bool": true}}}::vertex {"id": 844424930131979, "label": "vertex", "properties": {"prop": {"id": 0, "label": "v", "properties": {"i": 0}}::vertex}}::vertex {"id": 844424930131980, "label": "vertex", "properties": {"prop": {"id": 2, "label": "e", "end_id": 1, "start_id": 0, "properties": {"i": 0}}::edge}}::vertex {"id": 844424930131981, "label": "vertex", "properties": {"prop": [{"id": 0, "label": "v", "properties": {"i": 0}}::vertex, {"id": 2, "label": "e", "end_id": 1, "start_id": 0, "properties": {"i": 0}}::edge, {"id": 1, "label": "v", "properties": {"i": 0}}::vertex]::path}}::vertex (13 rows) SELECT * FROM drop_graph('orderability_graph', true); NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to table orderability_graph._ag_label_vertex drop cascades to table orderability_graph._ag_label_edge drop cascades to table orderability_graph.vertex NOTICE: graph "orderability_graph" has been dropped drop_graph ------------ (1 row) -- -- Test overloaded agytype any comparison operators =, <>, <, >, <=, >=, -- -- Integer SELECT agtype_in('1') = 1; ?column? ---------- t (1 row) SELECT agtype_in('1') <> 2; ?column? ---------- t (1 row) SELECT agtype_in('1') <> -2; ?column? ---------- t (1 row) SELECT agtype_in('1') < 2; ?column? ---------- t (1 row) SELECT agtype_in('1') > -2; ?column? ---------- t (1 row) SELECT agtype_in('1') <= 2; ?column? ---------- t (1 row) SELECT agtype_in('1') >= -2; ?column? ---------- t (1 row) -- Float SELECT agtype_in('1.01') = 1.01; ?column? ---------- t (1 row) SELECT agtype_in('1.01') <> 1.001; ?column? ---------- t (1 row) SELECT agtype_in('1.01') <> 1.011; ?column? ---------- t (1 row) SELECT agtype_in('1.01') < 1.011; ?column? ---------- t (1 row) SELECT agtype_in('1.01') > 1.001; ?column? ---------- t (1 row) SELECT agtype_in('1.01') <= 1.011; ?column? ---------- t (1 row) SELECT agtype_in('1.01') >= 1.001; ?column? ---------- t (1 row) SELECT agtype_in('1.01') < 'Infinity'; ?column? ---------- t (1 row) SELECT agtype_in('1.01') > '-Infinity'; ?column? ---------- t (1 row) -- NaN, under ordering, is considered to be the biggest numeric value -- greater than positive infinity. So, greater than any other number. SELECT agtype_in('1.01') < 'NaN'; ?column? ---------- t (1 row) SELECT agtype_in('NaN') > 'Infinity'; ?column? ---------- t (1 row) SELECT agtype_in('NaN') > '-Infinity'; ?column? ---------- t (1 row) SELECT agtype_in('NaN') = 'NaN'; ?column? ---------- t (1 row) -- Mixed Integer and Float SELECT agtype_in('1') = 1.0; ?column? ---------- t (1 row) SELECT agtype_in('1') <> 1.001; ?column? ---------- t (1 row) SELECT agtype_in('1') <> 0.999999; ?column? ---------- t (1 row) SELECT agtype_in('1') < 1.001; ?column? ---------- t (1 row) SELECT agtype_in('1') > 0.999999; ?column? ---------- t (1 row) SELECT agtype_in('1') <= 1.001; ?column? ---------- t (1 row) SELECT agtype_in('1') >= 0.999999; ?column? ---------- t (1 row) SELECT agtype_in('1') < 'Infinity'; ?column? ---------- t (1 row) SELECT agtype_in('1') > '-Infinity'; ?column? ---------- t (1 row) SELECT agtype_in('1') < 'NaN'; ?column? ---------- t (1 row) -- Mixed Float and Integer SELECT agtype_in('1.0') = 1; ?column? ---------- t (1 row) SELECT agtype_in('1.001') <> 1; ?column? ---------- t (1 row) SELECT agtype_in('0.999999') <> 1; ?column? ---------- t (1 row) SELECT agtype_in('1.001') > 1; ?column? ---------- t (1 row) SELECT agtype_in('0.999999') < 1; ?column? ---------- t (1 row) -- Mixed Integer and Numeric SELECT agtype_in('1') = 1::numeric; ?column? ---------- t (1 row) SELECT agtype_in('1') <> 2::numeric; ?column? ---------- t (1 row) SELECT agtype_in('1') <> -2::numeric; ?column? ---------- t (1 row) SELECT agtype_in('1') < 2::numeric; ?column? ---------- t (1 row) SELECT agtype_in('1') > -2::numeric; ?column? ---------- t (1 row) SELECT agtype_in('1') <= 2::numeric; ?column? ---------- t (1 row) SELECT agtype_in('1') >= -2::numeric; ?column? ---------- t (1 row) -- Mixed Float and Numeric SELECT agtype_in('1.01') = 1.01::numeric; ?column? ---------- t (1 row) SELECT agtype_in('1.01') <> 1.001::numeric; ?column? ---------- t (1 row) SELECT agtype_in('1.01') <> 1.011::numeric; ?column? ---------- t (1 row) SELECT agtype_in('1.01') < 1.011::numeric; ?column? ---------- t (1 row) SELECT agtype_in('1.01') > 1.001::numeric; ?column? ---------- t (1 row) SELECT agtype_in('1.01') <= 1.011::numeric; ?column? ---------- t (1 row) SELECT agtype_in('1.01') >= 1.001::numeric; ?column? ---------- t (1 row) -- Strings SELECT agtype_in('"a"') = '"a"'; ?column? ---------- t (1 row) SELECT agtype_in('"a"') <> '"b"'; ?column? ---------- t (1 row) SELECT agtype_in('"a"') < '"aa"'; ?column? ---------- t (1 row) SELECT agtype_in('"b"') > '"aa"'; ?column? ---------- t (1 row) SELECT agtype_in('"a"') <= '"aa"'; ?column? ---------- t (1 row) SELECT agtype_in('"b"') >= '"aa"'; ?column? ---------- t (1 row) -- Lists SELECT agtype_in('[0, 1, null, 2]') = '[0, 1, null, 2]'; ?column? ---------- t (1 row) SELECT agtype_in('[0, 1, null, 2]') <> '[2, null, 1, 0]'; ?column? ---------- t (1 row) SELECT agtype_in('[0, 1, null]') < '[0, 1, null, 2]'; ?column? ---------- t (1 row) SELECT agtype_in('[1, 1, null, 2]') > '[0, 1, null, 2]'; ?column? ---------- t (1 row) -- Objects (Maps) SELECT agtype_in('{"bool":true, "null": null}') = '{"null":null, "bool":true}'; ?column? ---------- t (1 row) SELECT agtype_in('{"bool":true}') < '{"bool":true, "null": null}'; ?column? ---------- t (1 row) -- Comparisons between types -- Object < List < String < Boolean < Integer = Float = Numeric < Null SELECT agtype_in('1') < 'null'; ?column? ---------- t (1 row) SELECT agtype_in('NaN') < 'null'; ?column? ---------- t (1 row) SELECT agtype_in('Infinity') < 'null'; ?column? ---------- t (1 row) SELECT agtype_in('true') < '1'; ?column? ---------- t (1 row) SELECT agtype_in('true') < 'NaN'; ?column? ---------- t (1 row) SELECT agtype_in('true') < 'Infinity'; ?column? ---------- t (1 row) SELECT agtype_in('"string"') < 'true'; ?column? ---------- t (1 row) SELECT agtype_in('[1,3,5,7,9,11]') < '"string"'; ?column? ---------- t (1 row) SELECT agtype_in('{"bool":true, "integer":1}') < '[1,3,5,7,9,11]'; ?column? ---------- t (1 row) SELECT agtype_in('[1, "string"]') < '[1, 1]'; ?column? ---------- t (1 row) SELECT agtype_in('{"bool":true, "integer":1}') < '{"bool":true, "integer":null}'; ?column? ---------- t (1 row) SELECT agtype_in('1::numeric') < 'null'; ?column? ---------- t (1 row) SELECT agtype_in('true') < '1::numeric'; ?column? ---------- t (1 row) -- -- Test agtype to boolean cast -- SELECT agtype_to_bool(agtype_in('true')); agtype_to_bool ---------------- t (1 row) SELECT agtype_to_bool(agtype_in('false')); agtype_to_bool ---------------- f (1 row) -- These should all fail SELECT agtype_to_bool(agtype_in('1')); ERROR: cannot cast agtype integer to type boolean SELECT agtype_to_bool(agtype_in('null')); ERROR: cannot cast agtype null to type boolean SELECT agtype_to_bool(agtype_in('1.0')); ERROR: cannot cast agtype float to type boolean SELECT agtype_to_bool(agtype_in('"string"')); ERROR: cannot cast agtype string to type boolean SELECT agtype_to_bool(agtype_in('[1,2,3]')); ERROR: cannot cast agtype array to type boolean SELECT agtype_to_bool(agtype_in('{"bool":true}')); ERROR: cannot cast agtype object to type boolean -- -- Test boolean to agtype cast -- SELECT bool_to_agtype(true); bool_to_agtype ---------------- true (1 row) SELECT bool_to_agtype(false); bool_to_agtype ---------------- false (1 row) SELECT bool_to_agtype(null); bool_to_agtype ---------------- (1 row) SELECT bool_to_agtype(true) = bool_to_agtype(true); ?column? ---------- t (1 row) SELECT bool_to_agtype(true) <> bool_to_agtype(false); ?column? ---------- t (1 row) -- -- Test boolean to pg_bigint cast -- SELECT agtype_to_int8(agtype_in('true')); agtype_to_int8 ---------------- 1 (1 row) SELECT agtype_to_int8(agtype_in('false')); agtype_to_int8 ---------------- 0 (1 row) -- should return SQL NULL SELECT agtype_to_int8(agtype_in('null')); agtype_to_int8 ---------------- (1 row) SELECT agtype_to_int8(NULL); agtype_to_int8 ---------------- (1 row) -- non agtype input SELECT agtype_to_int8(1); agtype_to_int8 ---------------- 1 (1 row) SELECT agtype_to_int8(3.14); agtype_to_int8 ---------------- 3 (1 row) SELECT agtype_to_int8(3.14::numeric); agtype_to_int8 ---------------- 3 (1 row) SELECT agtype_to_int8('3'); agtype_to_int8 ---------------- 3 (1 row) SELECT agtype_to_int8(true); agtype_to_int8 ---------------- 1 (1 row) SELECT agtype_to_int8(false); agtype_to_int8 ---------------- 0 (1 row) SELECT agtype_to_int8('3.14'); agtype_to_int8 ---------------- 3 (1 row) SELECT agtype_to_int8('true'); agtype_to_int8 ---------------- 1 (1 row) SELECT agtype_to_int8('false'); agtype_to_int8 ---------------- 0 (1 row) -- should fail SELECT agtype_to_int8('neither'); ERROR: invalid input syntax for type agtype DETAIL: Expected agtype value, but found "neither". CONTEXT: agtype data, line 1: neither SELECT agtype_to_int8('NaN'); ERROR: bigint out of range SELECT agtype_to_int8('Inf'); ERROR: bigint out of range SELECT agtype_to_int8(NaN); ERROR: column "nan" does not exist LINE 1: SELECT agtype_to_int8(NaN); ^ SELECT agtype_to_int8(Inf); ERROR: column "inf" does not exist LINE 1: SELECT agtype_to_int8(Inf); ^ SELECT agtype_to_int8('{"name":"John"}'); ERROR: invalid agtype string to int8 type: 17 SELECT agtype_to_int8('[1,2,3]'); ERROR: invalid agtype string to int8 type: 16 -- -- Test boolean to integer cast -- SELECT agtype_to_int4(agtype_in('true')); agtype_to_int4 ---------------- 1 (1 row) SELECT agtype_to_int4(agtype_in('false')); agtype_to_int4 ---------------- 0 (1 row) -- -- Test agtype to integer4 cast -- SELECT agtype_to_int4(agtype_in('1')); agtype_to_int4 ---------------- 1 (1 row) SELECT agtype_to_int4(agtype_in('1.45')); agtype_to_int4 ---------------- 1 (1 row) SELECT agtype_to_int4(agtype_in('1.444::numeric')); agtype_to_int4 ---------------- 1 (1 row) -- These should all fail SELECT agtype_to_int4(agtype_in('"string"')); ERROR: invalid input syntax for type agtype DETAIL: Expected agtype value, but found "string". CONTEXT: agtype data, line 1: string SELECT agtype_to_int4(agtype_in('[1, 2, 3]')); ERROR: cannot cast agtype array to type int SELECT agtype_to_int4(agtype_in('{"int":1}')); ERROR: cannot cast agtype object to type int -- should return SQL NULL SELECT agtype_to_int4(agtype_in('null')); agtype_to_int4 ---------------- (1 row) SELECT agtype_to_int4(NULL); agtype_to_int4 ---------------- (1 row) -- non agtype input SELECT agtype_to_int4(1); agtype_to_int4 ---------------- 1 (1 row) SELECT agtype_to_int4(3.14); agtype_to_int4 ---------------- 3 (1 row) SELECT agtype_to_int4(3.14::numeric); agtype_to_int4 ---------------- 3 (1 row) SELECT agtype_to_int4('3'); agtype_to_int4 ---------------- 3 (1 row) SELECT agtype_to_int4(true); agtype_to_int4 ---------------- 1 (1 row) SELECT agtype_to_int4(false); agtype_to_int4 ---------------- 0 (1 row) SELECT agtype_to_int4('3.14'); agtype_to_int4 ---------------- 3 (1 row) SELECT agtype_to_int4('true'); agtype_to_int4 ---------------- 1 (1 row) SELECT agtype_to_int4('false'); agtype_to_int4 ---------------- 0 (1 row) -- should error SELECT agtype_to_int4('neither'); ERROR: invalid input syntax for type agtype DETAIL: Expected agtype value, but found "neither". CONTEXT: agtype data, line 1: neither SELECT agtype_to_int4('NaN'); ERROR: integer out of range SELECT agtype_to_int4('Inf'); ERROR: integer out of range SELECT agtype_to_int4(NaN); ERROR: column "nan" does not exist LINE 1: SELECT agtype_to_int4(NaN); ^ SELECT agtype_to_int4(Inf); ERROR: column "inf" does not exist LINE 1: SELECT agtype_to_int4(Inf); ^ SELECT agtype_to_int4('{"name":"John"}'); ERROR: invalid agtype string to int4 type: 17 SELECT agtype_to_int4('[1,2,3]'); ERROR: invalid agtype string to int4 type: 16 -- -- Test boolean to integer2 cast -- SELECT agtype_to_int2(agtype_in('true')); agtype_to_int2 ---------------- 1 (1 row) SELECT agtype_to_int2(agtype_in('false')); agtype_to_int2 ---------------- 0 (1 row) -- -- Test agtype to integer2 cast -- SELECT agtype_to_int2(agtype_in('1')); agtype_to_int2 ---------------- 1 (1 row) SELECT agtype_to_int2(agtype_in('1.45')); agtype_to_int2 ---------------- 1 (1 row) SELECT agtype_to_int2(agtype_in('1.444::numeric')); agtype_to_int2 ---------------- 1 (1 row) -- These should all fail SELECT agtype_to_int2(agtype_in('"string"')); ERROR: invalid input syntax for type agtype DETAIL: Expected agtype value, but found "string". CONTEXT: agtype data, line 1: string SELECT agtype_to_int2(agtype_in('[1, 2, 3]')); ERROR: cannot cast agtype array to type int SELECT agtype_to_int2(agtype_in('{"int":1}')); ERROR: cannot cast agtype object to type int -- should return SQL NULL SELECT agtype_to_int2(agtype_in('null')); agtype_to_int2 ---------------- (1 row) SELECT agtype_to_int2(NULL); agtype_to_int2 ---------------- (1 row) -- non agtype input SELECT agtype_to_int2(1); agtype_to_int2 ---------------- 1 (1 row) SELECT agtype_to_int2(3.14); agtype_to_int2 ---------------- 3 (1 row) SELECT agtype_to_int2(3.14::numeric); agtype_to_int2 ---------------- 3 (1 row) SELECT agtype_to_int2('3'); agtype_to_int2 ---------------- 3 (1 row) SELECT agtype_to_int2(true); agtype_to_int2 ---------------- 1 (1 row) SELECT agtype_to_int2(false); agtype_to_int2 ---------------- 0 (1 row) SELECT agtype_to_int2('3.14'); agtype_to_int2 ---------------- 3 (1 row) SELECT agtype_to_int2('true'); agtype_to_int2 ---------------- 1 (1 row) SELECT agtype_to_int2('false'); agtype_to_int2 ---------------- 0 (1 row) -- should error SELECT agtype_to_int2('neither'); ERROR: invalid input syntax for type agtype DETAIL: Expected agtype value, but found "neither". CONTEXT: agtype data, line 1: neither SELECT agtype_to_int2('NaN'); ERROR: smallint out of range SELECT agtype_to_int2('Inf'); ERROR: smallint out of range SELECT agtype_to_int2(NaN); ERROR: column "nan" does not exist LINE 1: SELECT agtype_to_int2(NaN); ^ SELECT agtype_to_int2(Inf); ERROR: column "inf" does not exist LINE 1: SELECT agtype_to_int2(Inf); ^ SELECT agtype_to_int2('{"name":"John"}'); ERROR: invalid agtype string to int2 type: 17 SELECT agtype_to_int2('[1,2,3]'); ERROR: invalid agtype string to int2 type: 16 -- -- Test agtype to int[] -- SELECT agtype_to_int4_array(agtype_in('[1,2,3]')); agtype_to_int4_array ---------------------- {1,2,3} (1 row) SELECT agtype_to_int4_array(agtype_in('[1.6,2.3,3.66]')); agtype_to_int4_array ---------------------- {2,2,4} (1 row) SELECT agtype_to_int4_array(agtype_in('["6","7",3.66]')); agtype_to_int4_array ---------------------- {6,7,4} (1 row) -- should error SELECT agtype_to_int4_array(bool('true')); ERROR: argument must resolve to agtype SELECT agtype_to_int4_array((1,2,3,4,5)); ERROR: argument must resolve to agtype -- should return SQL NULL SELECT agtype_to_int4_array(NULL); agtype_to_int4_array ---------------------- (1 row) -- -- Map Literal -- --Invalid Map Key (should fail) SELECT agtype_build_map('[0]'::agtype, null); ERROR: key value must be scalar, not array, composite, or json -- -- Test agtype object/array access operators object.property, object["property"], and array[element] -- Note: At this point, object.property and object["property"] are equivalent. -- SELECT agtype_access_operator('{"bool":true, "array":[1,3,{"bool":false, "int":3, "float":3.14},7], "float":3.14}','"array"','2', '"float"'); agtype_access_operator ------------------------ 3.14 (1 row) -- empty map access SELECT agtype_access_operator('{}', '"array"'); agtype_access_operator ------------------------ (1 row) -- empty array access SELECT agtype_access_operator('[]', '0'); agtype_access_operator ------------------------ (1 row) -- out of bounds array access SELECT agtype_access_operator('[0, 1]', '2'); agtype_access_operator ------------------------ (1 row) SELECT agtype_access_operator('[0, 1]', '-3'); agtype_access_operator ------------------------ (1 row) -- array AGTV_NULL element SELECT agtype_access_operator('[1, 3, 5, 7]', 'null'); agtype_access_operator ------------------------ (1 row) -- map AGTV_NULL key SELECT agtype_access_operator('{"bool":false, "int":3, "float":3.14}', 'null'); agtype_access_operator ------------------------ (1 row) -- invalid map key types SELECT agtype_access_operator('{"bool":false, "int":3, "float":3.14}', 'true'); ERROR: AGTV_BOOL is not a valid key type SELECT agtype_access_operator('{"bool":false, "int":3, "float":3.14}', '2'); ERROR: AGTV_INTEGER is not a valid key type SELECT agtype_access_operator('{"bool":false, "int":3, "float":3.14}', '2.0'); ERROR: AGTV_FLOAT is not a valid key type -- Test duplicate keys and null value -- expected: only the latest key, among duplicates, will be kept; and null will be removed SELECT * FROM create_graph('agtype_null_duplicate_test'); NOTICE: graph "agtype_null_duplicate_test" has been created create_graph -------------- (1 row) SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:NULL, b:'bb', c:'cc', d:'dd' }) RETURN a $$) AS (a agtype); a ----------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"b": "bb", "c": "cc", "d": "dd"}}::vertex (1 row) SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:'aa', b:'bb', c:'cc', d:'dd' }) RETURN a $$) AS (a agtype); a ---------------------------------------------------------------------------------------------------------- {"id": 281474976710658, "label": "", "properties": {"a": "aa", "b": "bb", "c": "cc", "d": "dd"}}::vertex (1 row) SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:'aa', b:'bb', b:NULL , d:NULL }) RETURN a $$) AS (a agtype); a ------------------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {"a": "aa"}}::vertex (1 row) SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:'aa', b:'bb', b:'xx', d:NULL }) RETURN a $$) AS (a agtype); a ------------------------------------------------------------------------------------ {"id": 281474976710660, "label": "", "properties": {"a": "aa", "b": "xx"}}::vertex (1 row) SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:NULL }) RETURN a $$) AS (a agtype); a ---------------------------------------------------------------- {"id": 281474976710661, "label": "", "properties": {}}::vertex (1 row) SELECT * FROM drop_graph('agtype_null_duplicate_test', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table agtype_null_duplicate_test._ag_label_vertex drop cascades to table agtype_null_duplicate_test._ag_label_edge NOTICE: graph "agtype_null_duplicate_test" has been dropped drop_graph ------------ (1 row) -- -- Vertex -- --Basic Vertex Creation SELECT _agtype_build_vertex('1'::graphid, $$label_name$$, agtype_build_map()); _agtype_build_vertex ------------------------------------------------------------ {"id": 1, "label": "label_name", "properties": {}}::vertex (1 row) SELECT _agtype_build_vertex('1'::graphid, $$label$$, agtype_build_map('id', 2)); _agtype_build_vertex -------------------------------------------------------------- {"id": 1, "label": "label", "properties": {"id": 2}}::vertex (1 row) --Null properties SELECT _agtype_build_vertex('1'::graphid, $$label_name$$, NULL); _agtype_build_vertex ------------------------------------------------------------ {"id": 1, "label": "label_name", "properties": {}}::vertex (1 row) --Test access operator SELECT agtype_access_operator(_agtype_build_vertex('1'::graphid, $$label$$, agtype_build_map('id', 2)), '"id"'); agtype_access_operator ------------------------ 2 (1 row) SELECT _agtype_build_vertex('1'::graphid, $$label$$, agtype_build_list()); ERROR: _agtype_build_vertex() properties argument must be an object --Vertex in a map SELECT agtype_build_map( 'vertex', _agtype_build_vertex('1'::graphid, $$label_name$$, agtype_build_map())); agtype_build_map ------------------------------------------------------------------------ {"vertex": {"id": 1, "label": "label_name", "properties": {}}::vertex} (1 row) SELECT agtype_access_operator( agtype_build_map( 'vertex', _agtype_build_vertex('1'::graphid, $$label_name$$, agtype_build_map('key', 'value')), 'other_vertex', _agtype_build_vertex('1'::graphid, $$label_name$$, agtype_build_map('key', 'other_value'))), '"vertex"'); agtype_access_operator -------------------------------------------------------------------------- {"id": 1, "label": "label_name", "properties": {"key": "value"}}::vertex (1 row) --Vertex in a list SELECT agtype_build_list( _agtype_build_vertex('1'::graphid, $$label_name$$, agtype_build_map()), _agtype_build_vertex('2'::graphid, $$label_name$$, agtype_build_map())); agtype_build_list -------------------------------------------------------------------------------------------------------------------------- [{"id": 1, "label": "label_name", "properties": {}}::vertex, {"id": 2, "label": "label_name", "properties": {}}::vertex] (1 row) SELECT agtype_access_operator( agtype_build_list( _agtype_build_vertex('1'::graphid, $$label_name$$, agtype_build_map('id', 3)), _agtype_build_vertex('2'::graphid, $$label_name$$, agtype_build_map('id', 4))), '0'); agtype_access_operator ------------------------------------------------------------------- {"id": 1, "label": "label_name", "properties": {"id": 3}}::vertex (1 row) -- -- Edge -- --Basic Edge Creation SELECT _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map()); _agtype_build_edge -------------------------------------------------------------------------------------- {"id": 1, "label": "label_name", "end_id": 3, "start_id": 2, "properties": {}}::edge (1 row) SELECT _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label$$, agtype_build_map('id', 2)); _agtype_build_edge ---------------------------------------------------------------------------------------- {"id": 1, "label": "label", "end_id": 3, "start_id": 2, "properties": {"id": 2}}::edge (1 row) --Null properties SELECT _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, NULL); _agtype_build_edge -------------------------------------------------------------------------------------- {"id": 1, "label": "label_name", "end_id": 3, "start_id": 2, "properties": {}}::edge (1 row) --Test access operator SELECT agtype_access_operator(_agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label$$, agtype_build_map('id', 2)),'"id"'); agtype_access_operator ------------------------ 2 (1 row) --Edge in a map SELECT agtype_build_map( 'edge', _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map())); agtype_build_map ------------------------------------------------------------------------------------------------ {"edge": {"id": 1, "label": "label_name", "end_id": 3, "start_id": 2, "properties": {}}::edge} (1 row) SELECT agtype_access_operator( agtype_build_map( 'edge', _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map('key', 'value')), 'other_edge', _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map('key', 'other_value'))), '"edge"'); agtype_access_operator ---------------------------------------------------------------------------------------------------- {"id": 1, "label": "label_name", "end_id": 3, "start_id": 2, "properties": {"key": "value"}}::edge (1 row) --Edge in a list SELECT agtype_build_list( _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map()), _agtype_build_edge('2'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map())); agtype_build_list ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [{"id": 1, "label": "label_name", "end_id": 3, "start_id": 2, "properties": {}}::edge, {"id": 2, "label": "label_name", "end_id": 3, "start_id": 2, "properties": {}}::edge] (1 row) SELECT agtype_access_operator( agtype_build_list( _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map('id', 3)), _agtype_build_edge('2'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map('id', 4))), '0'); agtype_access_operator --------------------------------------------------------------------------------------------- {"id": 1, "label": "label_name", "end_id": 3, "start_id": 2, "properties": {"id": 3}}::edge (1 row) -- Path SELECT _agtype_build_path( _agtype_build_vertex('2'::graphid, $$label_name$$, agtype_build_map()), _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label$$, agtype_build_map('id', 2)), _agtype_build_vertex('3'::graphid, $$label_name$$, agtype_build_map()) ); _agtype_build_path ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [{"id": 2, "label": "label_name", "properties": {}}::vertex, {"id": 1, "label": "label", "end_id": 3, "start_id": 2, "properties": {"id": 2}}::edge, {"id": 3, "label": "label_name", "properties": {}}::vertex]::path (1 row) --All these paths should produce Errors SELECT _agtype_build_path( _agtype_build_vertex('2'::graphid, $$label_name$$, agtype_build_map()), _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label$$, agtype_build_map('id', 2)) ); ERROR: a path is of the form: [vertex, (edge, vertex)*i] where i >= 0 SELECT _agtype_build_path( _agtype_build_vertex('2'::graphid, $$label_name$$, agtype_build_map()), _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label$$, agtype_build_map('id', 2)), _agtype_build_vertex('3'::graphid, $$label_name$$, agtype_build_map()), _agtype_build_edge('1'::graphid, '4'::graphid, '5'::graphid, $$label$$, agtype_build_map('id', 2)) ); ERROR: a path is of the form: [vertex, (edge, vertex)*i] where i >= 0 SELECT _agtype_build_path( _agtype_build_vertex('2'::graphid, $$label_name$$, agtype_build_map()), _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label$$, agtype_build_map('id', 2)), NULL ); ERROR: argument 3 must not be null SELECT _agtype_build_path( _agtype_build_vertex('2'::graphid, $$label_name$$, agtype_build_map()), _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label$$, agtype_build_map('id', 2)), 1 ); ERROR: argument 3 must be an agtype SELECT _agtype_build_path( _agtype_build_vertex('2'::graphid, $$label_name$$, agtype_build_map()), _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label$$, agtype_build_map('id', 2)), _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label$$, agtype_build_map('id', 2)) ); ERROR: paths consist of alternating vertices and edges HINT: argument 3 must be an vertex -- -- id, startid, endid -- SELECT age_id(_agtype_build_vertex('1'::graphid, $$label_name$$, agtype_build_map())); age_id -------- 1 (1 row) SELECT age_id(_agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map('id', 2))); age_id -------- 1 (1 row) SELECT age_start_id(_agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map('id', 2))); age_start_id -------------- 2 (1 row) SELECT age_end_id(_agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map('id', 2))); age_end_id ------------ 3 (1 row) SELECT age_id(_agtype_build_path( _agtype_build_vertex('2'::graphid, $$label_name$$, agtype_build_map()), _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label$$, agtype_build_map('id', 2)), _agtype_build_vertex('3'::graphid, $$label$$, agtype_build_map('id', 2)) )); ERROR: id() argument must be a vertex, an edge or null SELECT age_id(agtype_in('1')); ERROR: id() argument must be a vertex, an edge or null SELECT age_id(NULL); age_id -------- (1 row) SELECT age_start_id(NULL); age_start_id -------------- (1 row) SELECT age_end_id(NULL); age_end_id ------------ (1 row) SELECT age_id(agtype_in('null')); age_id -------- (1 row) SELECT age_start_id(agtype_in('null')); age_start_id -------------- (1 row) SELECT age_end_id(agtype_in('null')); age_end_id ------------ (1 row) -- -- Test STARTS WITH, ENDS WITH, and CONTAINS -- SELECT agtype_string_match_starts_with('"abcdefghijklmnopqrstuvwxyz"', '"abcd"'); agtype_string_match_starts_with --------------------------------- true (1 row) SELECT agtype_string_match_ends_with('"abcdefghijklmnopqrstuvwxyz"', '"wxyz"'); agtype_string_match_ends_with ------------------------------- true (1 row) SELECT agtype_string_match_contains('"abcdefghijklmnopqrstuvwxyz"', '"abcd"'); agtype_string_match_contains ------------------------------ true (1 row) SELECT agtype_string_match_contains('"abcdefghijklmnopqrstuvwxyz"', '"hijk"'); agtype_string_match_contains ------------------------------ true (1 row) SELECT agtype_string_match_contains('"abcdefghijklmnopqrstuvwxyz"', '"wxyz"'); agtype_string_match_contains ------------------------------ true (1 row) -- should all fail SELECT agtype_string_match_starts_with('"abcdefghijklmnopqrstuvwxyz"', '"bcde"'); agtype_string_match_starts_with --------------------------------- false (1 row) SELECT agtype_string_match_ends_with('"abcdefghijklmnopqrstuvwxyz"', '"vwxy"'); agtype_string_match_ends_with ------------------------------- false (1 row) SELECT agtype_string_match_contains('"abcdefghijklmnopqrstuvwxyz"', '"hijl"'); agtype_string_match_contains ------------------------------ false (1 row) --Agtype Hash Comparison Function SELECT agtype_hash_cmp(NULL); agtype_hash_cmp ----------------- 0 (1 row) SELECT agtype_hash_cmp('1'::agtype); agtype_hash_cmp ----------------- -123017199 (1 row) SELECT agtype_hash_cmp('1.0'::agtype); agtype_hash_cmp ----------------- 614780178 (1 row) SELECT agtype_hash_cmp('"1"'::agtype); agtype_hash_cmp ----------------- -888576106 (1 row) SELECT agtype_hash_cmp('[1]'::agtype); agtype_hash_cmp ----------------- 434414509 (1 row) SELECT agtype_hash_cmp('[1, 1]'::agtype); agtype_hash_cmp ----------------- -1551022880 (1 row) SELECT agtype_hash_cmp('[1, 1, 1]'::agtype); agtype_hash_cmp ----------------- -3900769 (1 row) SELECT agtype_hash_cmp('[1, 1, 1, 1]'::agtype); agtype_hash_cmp ----------------- 1756986519 (1 row) SELECT agtype_hash_cmp('[1, 1, 1, 1, 1]'::agtype); agtype_hash_cmp ----------------- -47741579 (1 row) SELECT agtype_hash_cmp('[[1]]'::agtype); agtype_hash_cmp ----------------- 878744030 (1 row) SELECT agtype_hash_cmp('[[1, 1]]'::agtype); agtype_hash_cmp ----------------- -1254522284 (1 row) SELECT agtype_hash_cmp('[[1], 1]'::agtype); agtype_hash_cmp ----------------- -1005036 (1 row) SELECT agtype_hash_cmp('[1543872]'::agtype); agtype_hash_cmp ----------------- -1925093371 (1 row) SELECT agtype_hash_cmp('[1, "abcde", 2.0]'::agtype); agtype_hash_cmp ----------------- -1128310748 (1 row) SELECT agtype_hash_cmp(agtype_in('null')); agtype_hash_cmp ----------------- -505290271 (1 row) SELECT agtype_hash_cmp(agtype_in('[null]')); agtype_hash_cmp ----------------- 505290241 (1 row) SELECT agtype_hash_cmp(agtype_in('[null, null]')); agtype_hash_cmp ----------------- 3 (1 row) SELECT agtype_hash_cmp(agtype_in('[null, null, null]')); agtype_hash_cmp ----------------- 2021160967 (1 row) SELECT agtype_hash_cmp(agtype_in('[null, null, null, null]')); agtype_hash_cmp ----------------- 15 (1 row) SELECT agtype_hash_cmp(agtype_in('[null, null, null, null, null]')); agtype_hash_cmp ----------------- -505290721 (1 row) SELECT agtype_hash_cmp('{"id":1, "label":"test", "properties":{"id":100}}'::agtype); agtype_hash_cmp ----------------- 1116453668 (1 row) SELECT agtype_hash_cmp('{"id":1, "label":"test", "properties":{"id":100}}::vertex'::agtype); agtype_hash_cmp ----------------- 1848106598 (1 row) SELECT agtype_hash_cmp('{"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{}}'::agtype); agtype_hash_cmp ----------------- 1064722414 (1 row) SELECT agtype_hash_cmp('{"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{}}::edge'::agtype); agtype_hash_cmp ----------------- -1790838958 (1 row) SELECT agtype_hash_cmp(' [{"id":1, "label":"test", "properties":{"id":100}}::vertex, {"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{}}::edge, {"id":5, "label":"vlabel", "properties":{}}::vertex]'::agtype); agtype_hash_cmp ----------------- -231467898 (1 row) SELECT agtype_hash_cmp(' [{"id":1, "label":"test", "properties":{"id":100}}::vertex, {"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{}}::edge, {"id":5, "label":"vlabel", "properties":{}}::vertex]::path'::agtype); agtype_hash_cmp ----------------- 843330291 (1 row) --Agtype BTree Comparison Function SELECT agtype_btree_cmp('1'::agtype, '1'::agtype); agtype_btree_cmp ------------------ 0 (1 row) SELECT agtype_btree_cmp('1'::agtype, '1.0'::agtype); agtype_btree_cmp ------------------ 0 (1 row) SELECT agtype_btree_cmp('1'::agtype, '"1"'::agtype); agtype_btree_cmp ------------------ 1 (1 row) SELECT agtype_btree_cmp('"string"'::agtype, '"string"'::agtype); agtype_btree_cmp ------------------ 0 (1 row) SELECT agtype_btree_cmp('"string"'::agtype, '"string "'::agtype); agtype_btree_cmp ------------------ -1 (1 row) SELECT agtype_btree_cmp(NULL, NULL); agtype_btree_cmp ------------------ 0 (1 row) SELECT agtype_btree_cmp(NULL, '1'::agtype); agtype_btree_cmp ------------------ 1 (1 row) SELECT agtype_btree_cmp('1'::agtype, NULL); agtype_btree_cmp ------------------ -1 (1 row) SELECT agtype_btree_cmp(agtype_in('null'), NULL); agtype_btree_cmp ------------------ -1 (1 row) SELECT agtype_btree_cmp( '1'::agtype, '{"id":1, "label":"test", "properties":{"id":100}}::vertex'::agtype); agtype_btree_cmp ------------------ 1 (1 row) SELECT agtype_btree_cmp( '{"id":1, "label":"test", "properties":{"id":100}}'::agtype, '{"id":1, "label":"test", "properties":{"id":100}}'::agtype); agtype_btree_cmp ------------------ 0 (1 row) SELECT agtype_btree_cmp( '{"id":1, "label":"test", "properties":{"id":100}}'::agtype, '{"id":1, "label":"test", "properties":{"id":200}}'::agtype); agtype_btree_cmp ------------------ -1 (1 row) SELECT agtype_btree_cmp( '{"id":1, "label":"test", "properties":{"id":100}}::vertex'::agtype, '{"id":1, "label":"test", "properties":{"id":100}}::vertex'::agtype); agtype_btree_cmp ------------------ 0 (1 row) SELECT agtype_btree_cmp( '{"id":1, "label":"test", "properties":{"id":100}}::vertex'::agtype, '{"id":1, "label":"test", "properties":{"id":200}}::vertex'::agtype); agtype_btree_cmp ------------------ 0 (1 row) SELECT agtype_btree_cmp( '{"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{}}::edge'::agtype, '{"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{}}::edge'::agtype); agtype_btree_cmp ------------------ 0 (1 row) SELECT agtype_btree_cmp( '{"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{"prop1": 1}}::edge'::agtype, '{"id":2, "start_id":4, "end_id": 5, "label":"elabel", "properties":{"prop2": 2}}::edge'::agtype); agtype_btree_cmp ------------------ 0 (1 row) SELECT agtype_btree_cmp( '{"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{"prop1": 1}}::edge'::agtype, '{"id":8, "start_id":4, "end_id": 5, "label":"elabel", "properties":{"prop2": 2}}::edge'::agtype); agtype_btree_cmp ------------------ -1 (1 row) SELECT agtype_btree_cmp( '[{"id":1, "label":"test", "properties":{"id":100}}::vertex, {"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{}}::edge, {"id":3, "label":"vlabel", "properties":{}}::vertex]::path'::agtype, '[{"id":1, "label":"test", "properties":{"id":100}}::vertex, {"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{}}::edge, {"id":3, "label":"vlabel", "properties":{}}::vertex]::path'::agtype); agtype_btree_cmp ------------------ 0 (1 row) SELECT agtype_btree_cmp( '[{"id":1, "label":"test", "properties":{"id":100}}::vertex, {"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{}}::edge, {"id":3, "label":"vlabel", "properties":{}}::vertex]::path'::agtype, '[{"id":1, "label":"test", "properties":{"id":100}}::vertex, {"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{}}::edge, {"id":4, "label":"vlabel", "properties":{}}::vertex]::path'::agtype); agtype_btree_cmp ------------------ -1 (1 row) --Int2 to Agtype in agtype_volatile_wrapper SELECT ag_catalog.agtype_volatile_wrapper(1::int2); agtype_volatile_wrapper ------------------------- 1 (1 row) SELECT ag_catalog.agtype_volatile_wrapper(32767::int2); agtype_volatile_wrapper ------------------------- 32767 (1 row) SELECT ag_catalog.agtype_volatile_wrapper(-32767::int2); agtype_volatile_wrapper ------------------------- -32767 (1 row) -- These should fail SELECT ag_catalog.agtype_volatile_wrapper(32768::int2); ERROR: smallint out of range SELECT ag_catalog.agtype_volatile_wrapper(-32768::int2); ERROR: smallint out of range -- -- Cleanup -- DROP TABLE agtype_table; -- -- End of AGTYPE data type regression tests -- age-PG16-v1.5.0-rc0/regress/expected/analyze.out000066400000000000000000000112441454606241200212510ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; -- -- Start of tests -- SELECT * FROM create_graph('analyze'); NOTICE: graph "analyze" has been created create_graph -------------- (1 row) SELECT * FROM cypher('analyze', $$ CREATE (u) RETURN u $$) AS (result agtype); result ---------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {}}::vertex (1 row) -- should error due to invalid input to cypher function SELECT * FROM cypher(NULL, NULL) AS (result agtype); ERROR: a name constant is expected LINE 1: SELECT * FROM cypher(NULL, NULL) AS (result agtype); ^ SELECT * FROM cypher('analyze', NULL) AS (result agtype); ERROR: a dollar-quoted string constant is expected LINE 1: SELECT * FROM cypher('analyze', NULL) AS (result agtype); ^ SELECT * FROM cypher(NULL, '') AS (result agtype); ERROR: a name constant is expected LINE 1: SELECT * FROM cypher(NULL, '') AS (result agtype); ^ SELECT * FROM cypher('', '') AS (result agtype); ERROR: a dollar-quoted string constant is expected LINE 1: SELECT * FROM cypher('', '') AS (result agtype); ^ SELECT * FROM cypher('analyze', '') AS (result agtype); ERROR: a dollar-quoted string constant is expected LINE 1: SELECT * FROM cypher('analyze', '') AS (result agtype); ^ -- should error due to bad cypher statement SELECT * FROM cypher('analyze', $$ $$) AS (result agtype); ERROR: syntax error at end of input LINE 1: SELECT * FROM cypher('analyze', $$ $$) AS (result agtype); ^ -- should return false due to invalid input to age_prepare_function SELECT * FROM age_prepare_cypher(NULL, NULL); age_prepare_cypher -------------------- f (1 row) SELECT * FROM age_prepare_cypher('analyze', NULL); age_prepare_cypher -------------------- f (1 row) SELECT * FROM age_prepare_cypher(NULL, ''); age_prepare_cypher -------------------- f (1 row) -- should return true but cypher should fail SELECT * FROM age_prepare_cypher('analyze', ''); age_prepare_cypher -------------------- t (1 row) SELECT * FROM cypher(NULL, NULL) AS (result agtype); ERROR: syntax error at end of input LINE 1: SELECT * FROM cypher(NULL, NULL) AS (result agtype); ^ -- should return true and execute cypher command SELECT * FROM age_prepare_cypher('analyze', 'MATCH (u) RETURN (u)'); age_prepare_cypher -------------------- t (1 row) SELECT * FROM cypher(NULL, NULL) AS (result agtype); result ---------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {}}::vertex (1 row) -- should error due to invalid input to cypher function SELECT * FROM cypher(NULL, NULL) AS (result agtype); ERROR: a name constant is expected LINE 1: SELECT * FROM cypher(NULL, NULL) AS (result agtype); ^ -- should return true but cypher should fail SELECT * FROM age_prepare_cypher('analyze', '$$ $$'); age_prepare_cypher -------------------- t (1 row) SELECT * FROM cypher(NULL, NULL) AS (result agtype); ERROR: unexpected character at or near "$" LINE 1: SELECT * FROM cypher(NULL, NULL) AS (result agtype); ^ -- should return errors SELECT * FROM cypher() AS (result agtype); ERROR: cypher function requires a minimum of 2 arguments SELECT * FROM cypher(NULL) AS (result agtype); ERROR: cypher function requires a minimum of 2 arguments -- drop graphs SELECT * FROM drop_graph('analyze', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table "analyze"._ag_label_vertex drop cascades to table "analyze"._ag_label_edge NOTICE: graph "analyze" has been dropped drop_graph ------------ (1 row) -- -- End of tests -- age-PG16-v1.5.0-rc0/regress/expected/catalog.out000066400000000000000000000257171454606241200212320ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; -- -- create_graph(), drop_label(), and drop_graph() tests -- SELECT create_graph('graph'); NOTICE: graph "graph" has been created create_graph -------------- (1 row) SELECT name, namespace FROM ag_graph WHERE name = 'graph'; name | namespace -------+----------- graph | graph (1 row) -- create a label to test drop_label() SELECT * FROM cypher('graph', $$CREATE (:l)$$) AS r(a agtype); a --- (0 rows) -- test drop_label() SELECT drop_label('graph', 'l'); NOTICE: label "graph"."l" has been dropped drop_label ------------ (1 row) -- create a label to test drop_graph() SELECT * FROM cypher('graph', $$CREATE (:v)$$) AS r(a agtype); a --- (0 rows) -- DROP SCHEMA ... CASCADE should fail DROP SCHEMA graph CASCADE; NOTICE: drop cascades to 4 other objects DETAIL: drop cascades to sequence graph._label_id_seq drop cascades to table graph._ag_label_vertex drop cascades to table graph._ag_label_edge drop cascades to table graph.v ERROR: table "v" is for label "v" -- DROP TABLE ... should fail DROP TABLE graph.v; ERROR: table "v" is for label "v" -- should fail (cascade = false) SELECT drop_graph('graph'); ERROR: cannot drop schema graph because other objects depend on it DETAIL: table graph._ag_label_vertex depends on schema graph table graph._ag_label_edge depends on schema graph table graph.v depends on schema graph HINT: Use DROP ... CASCADE to drop the dependent objects too. SELECT drop_graph('graph', true); NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to table graph._ag_label_vertex drop cascades to table graph._ag_label_edge drop cascades to table graph.v NOTICE: graph "graph" has been dropped drop_graph ------------ (1 row) SELECT count(*) FROM ag_graph WHERE name = 'graph'; count ------- 0 (1 row) SELECT count(*) FROM pg_namespace WHERE nspname = 'graph'; count ------- 0 (1 row) -- invalid cases SELECT create_graph(NULL); ERROR: graph name can not be NULL SELECT drop_graph(NULL); ERROR: graph name can not be NULL SELECT create_graph(''); ERROR: graph name is invalid -- -- alter_graph() RENAME function tests -- -- create 2 graphs for test. SELECT create_graph('GraphA'); NOTICE: graph "GraphA" has been created create_graph -------------- (1 row) SELECT create_graph('GraphB'); NOTICE: graph "GraphB" has been created create_graph -------------- (1 row) -- Show GraphA's construction to verify case is preserved. SELECT name, namespace FROM ag_graph WHERE name = 'GraphA'; name | namespace --------+----------- GraphA | "GraphA" (1 row) SELECT nspname FROM pg_namespace WHERE nspname = 'GraphA'; nspname --------- GraphA (1 row) -- Rename GraphA to GraphX. SELECT alter_graph('GraphA', 'RENAME', 'GraphX'); NOTICE: graph "GraphA" renamed to "GraphX" alter_graph ------------- (1 row) -- Show GraphX's construction to verify case is preserved. SELECT name, namespace FROM ag_graph WHERE name = 'GraphX'; name | namespace --------+----------- GraphX | "GraphX" (1 row) SELECT nspname FROM pg_namespace WHERE nspname = 'GraphX'; nspname --------- GraphX (1 row) -- Verify there isn't a graph GraphA anymore. SELECT name, namespace FROM ag_graph WHERE name = 'GraphA'; name | namespace ------+----------- (0 rows) SELECT * FROM pg_namespace WHERE nspname = 'GraphA'; oid | nspname | nspowner | nspacl -----+---------+----------+-------- (0 rows) -- Sanity check that graphx does not exist - should return 0. SELECT count(*) FROM ag_graph where name = 'graphx'; count ------- 0 (1 row) -- Verify case sensitivity (graphx does not exist, but GraphX does) - should fail. SELECT alter_graph('graphx', 'RENAME', 'GRAPHX'); ERROR: graph "graphx" does not exist -- Checks for collisions (GraphB already exists) - should fail. SELECT alter_graph('GraphX', 'RENAME', 'GraphB'); ERROR: schema "GraphB" already exists -- Remove graphs. SELECT drop_graph('GraphX', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table "GraphX"._ag_label_vertex drop cascades to table "GraphX"._ag_label_edge NOTICE: graph "GraphX" has been dropped drop_graph ------------ (1 row) SELECT drop_graph('GraphB', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table "GraphB"._ag_label_vertex drop cascades to table "GraphB"._ag_label_edge NOTICE: graph "GraphB" has been dropped drop_graph ------------ (1 row) -- Verify that renaming a graph that does not exist fails. SELECT alter_graph('GraphB', 'RENAME', 'GraphA'); ERROR: graph "GraphB" does not exist -- Verify NULL input checks. SELECT alter_graph(NULL, 'RENAME', 'GraphA'); ERROR: graph_name must not be NULL SELECT alter_graph('GraphB', NULL, 'GraphA'); ERROR: operation must not be NULL SELECT alter_graph('GraphB', 'RENAME', NULL); ERROR: new_value must not be NULL -- Verify invalid input check for operation parameter. SELECT alter_graph('GraphB', 'DUMMY', 'GraphA'); ERROR: invalid operation "DUMMY" HINT: valid operations: RENAME -- -- label id test -- SELECT create_graph('graph'); NOTICE: graph "graph" has been created create_graph -------------- (1 row) -- label id starts from 1 SELECT * FROM cypher('graph', $$CREATE (:v1)$$) AS r(a agtype); a --- (0 rows) SELECT name, id, kind, relation FROM ag_label; name | id | kind | relation ------------------+----+------+------------------------ _ag_label_vertex | 1 | v | graph._ag_label_vertex _ag_label_edge | 2 | e | graph._ag_label_edge v1 | 3 | v | graph.v1 (3 rows) -- skip label id 2 to test the logic that gets an unused label id after cycle SELECT nextval('graph._label_id_seq'); nextval --------- 4 (1 row) -- label id is now 3 SELECT * FROM cypher('graph', $$CREATE (:v3)$$) as r(a agtype); a --- (0 rows) SELECT name, id, kind, relation FROM ag_label; name | id | kind | relation ------------------+----+------+------------------------ _ag_label_vertex | 1 | v | graph._ag_label_vertex _ag_label_edge | 2 | e | graph._ag_label_edge v1 | 3 | v | graph.v1 v3 | 5 | v | graph.v3 (4 rows) -- to use 65535 as the next label id, set label id to 65534 SELECT setval('graph._label_id_seq', 65534); setval -------- 65534 (1 row) -- label id is now 65535 SELECT * FROM cypher('graph', $$CREATE (:v65535)$$) as r(a agtype); a --- (0 rows) SELECT name, id, kind, relation FROM ag_label; name | id | kind | relation ------------------+-------+------+------------------------ _ag_label_vertex | 1 | v | graph._ag_label_vertex _ag_label_edge | 2 | e | graph._ag_label_edge v1 | 3 | v | graph.v1 v3 | 5 | v | graph.v3 v65535 | 65535 | v | graph.v65535 (5 rows) -- after cycle, label id is now 2 SELECT * FROM cypher('graph', $$CREATE (:v2)$$) as r(a agtype); a --- (0 rows) SELECT name, id, kind, relation FROM ag_label; name | id | kind | relation ------------------+-------+------+------------------------ _ag_label_vertex | 1 | v | graph._ag_label_vertex _ag_label_edge | 2 | e | graph._ag_label_edge v1 | 3 | v | graph.v1 v3 | 5 | v | graph.v3 v65535 | 65535 | v | graph.v65535 v2 | 4 | v | graph.v2 (6 rows) SELECT drop_graph('graph', true); NOTICE: drop cascades to 6 other objects DETAIL: drop cascades to table graph._ag_label_vertex drop cascades to table graph._ag_label_edge drop cascades to table graph.v1 drop cascades to table graph.v3 drop cascades to table graph.v65535 drop cascades to table graph.v2 NOTICE: graph "graph" has been dropped drop_graph ------------ (1 row) -- create labels SELECT create_graph('graph'); NOTICE: graph "graph" has been created create_graph -------------- (1 row) SELECT create_vlabel('graph', 'n'); NOTICE: VLabel "n" has been created create_vlabel --------------- (1 row) SELECT create_elabel('graph', 'r'); NOTICE: ELabel "r" has been created create_elabel --------------- (1 row) -- check if labels have been created or not SELECT name, id, kind, relation FROM ag_label; name | id | kind | relation ------------------+----+------+------------------------ _ag_label_vertex | 1 | v | graph._ag_label_vertex _ag_label_edge | 2 | e | graph._ag_label_edge n | 3 | v | graph.n r | 4 | e | graph.r (4 rows) -- try to create duplicate labels SELECT create_vlabel('graph', 'n'); ERROR: label "n" already exists SELECT create_elabel('graph', 'r'); ERROR: label "r" already exists -- remove the labels that have been created SELECT drop_label('graph', 'n', false); NOTICE: label "graph"."n" has been dropped drop_label ------------ (1 row) SELECT drop_label('graph', 'r', false); NOTICE: label "graph"."r" has been dropped drop_label ------------ (1 row) -- check if labels have been deleted or not SELECT name, id, kind, relation FROM ag_label; name | id | kind | relation ------------------+----+------+------------------------ _ag_label_vertex | 1 | v | graph._ag_label_vertex _ag_label_edge | 2 | e | graph._ag_label_edge (2 rows) -- try to remove labels that is not there SELECT drop_label('graph', 'n'); ERROR: label "n" does not exist SELECT drop_label('graph', 'r'); ERROR: label "r" does not exist -- Trying to call the functions with label null SELECT create_vlabel('graph', NULL); ERROR: label name must not be NULL SELECT create_elabel('graph', NULL); ERROR: label name must not be NULL -- Trying to call the functions with graph null SELECT create_vlabel(NULL, 'n'); ERROR: graph name must not be NULL SELECT create_elabel(NULL, 'r'); ERROR: graph name must not be NULL -- Trying to call the functions with both null SELECT create_vlabel(NULL, NULL); ERROR: graph name must not be NULL SELECT create_elabel(NULL, NULL); ERROR: graph name must not be NULL -- dropping the graph SELECT drop_graph('graph', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table graph._ag_label_vertex drop cascades to table graph._ag_label_edge NOTICE: graph "graph" has been dropped drop_graph ------------ (1 row) age-PG16-v1.5.0-rc0/regress/expected/cypher.out000066400000000000000000000103331454606241200210760ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher'); NOTICE: graph "cypher" has been created create_graph -------------- (1 row) -- cypher() function takes only a dollar-quoted string constant as an argument. -- All other cases throw an error. SELECT * FROM cypher('none', $$RETURN 0$$) as q(c agtype); ERROR: graph "none" does not exist LINE 1: SELECT * FROM cypher('none', $$RETURN 0$$) as q(c agtype); ^ SELECT * FROM cypher('cypher', $$RETURN 0$$) AS r(c agtype); c --- 0 (1 row) WITH r(c) AS ( SELECT * FROM cypher('cypher', $$RETURN 0$$) AS r(c agtype) ) SELECT * FROM r; c --- 0 (1 row) SELECT * FROM cypher('cypher', 'RETURN 0') AS r(c text); ERROR: a dollar-quoted string constant is expected LINE 1: SELECT * FROM cypher('cypher', 'RETURN 0') AS r(c text); ^ SELECT * FROM cypher('cypher', NULL) AS r(c text); ERROR: a dollar-quoted string constant is expected LINE 1: SELECT * FROM cypher('cypher', NULL) AS r(c text); ^ WITH q(s) AS ( VALUES (textout($$RETURN 0$$)) ) SELECT * FROM q, cypher('cypher', q.s) AS r(c text); ERROR: a dollar-quoted string constant is expected LINE 4: SELECT * FROM q, cypher('cypher', q.s) AS r(c text); ^ -- The numbers of the attributes must match. SELECT * FROM cypher('cypher', $$RETURN 0$$) AS r(c text, x text); ERROR: return row and column definition list do not match LINE 1: SELECT * FROM cypher('cypher', $$RETURN 0$$) AS r(c text, x ... ^ -- cypher() function can be called in ROWS FROM only if it is there solely. SELECT * FROM ROWS FROM (cypher('cypher', $$RETURN 0$$) AS (c agtype)); c --- 0 (1 row) SELECT * FROM ROWS FROM (cypher('cypher', $$RETURN 0$$) AS (c text), generate_series(1, 2)); ERROR: cypher(...) in ROWS FROM is not supported LINE 1: SELECT * FROM ROWS FROM (cypher('cypher', $$RETURN 0$$) AS (... ^ -- WITH ORDINALITY is not supported. SELECT * FROM ROWS FROM (cypher('cypher', $$RETURN 0$$) AS (c text)) WITH ORDINALITY; ERROR: WITH ORDINALITY is not supported LINE 2: FROM ROWS FROM (cypher('cypher', $$RETURN 0$$) AS (c text)) ... ^ -- cypher() function cannot be called in expressions. -- However, it can be called in subqueries. SELECT cypher('cypher', $$RETURN 0$$); ERROR: cypher(...) in expressions is not supported LINE 1: SELECT cypher('cypher', $$RETURN 0$$); ^ HINT: Use subquery instead if possible. SELECT (SELECT * FROM cypher('cypher', $$RETURN 0$$) AS r(c agtype)); c --- 0 (1 row) -- Attributes returned from cypher() function are agtype. If other than agtype -- is given in the column definition list and there is a type coercion from -- agtype to the given type, agtype will be coerced to that type. If there is -- not such a coercion, an error is thrown. SELECT * FROM cypher('cypher', $$RETURN true$$) AS (c bool); c --- t (1 row) SELECT * FROM cypher('cypher', $$RETURN 0$$) AS (c oid); ERROR: cannot cast type agtype to oid for column "c" LINE 1: SELECT * FROM cypher('cypher', $$RETURN 0$$) AS (c oid); ^ SELECT drop_graph('cypher', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table cypher._ag_label_vertex drop cascades to table cypher._ag_label_edge NOTICE: graph "cypher" has been dropped drop_graph ------------ (1 row) age-PG16-v1.5.0-rc0/regress/expected/cypher_call.out000066400000000000000000000241531454606241200220760ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher_call'); NOTICE: graph "cypher_call" has been created create_graph -------------- (1 row) SELECT * FROM cypher('cypher_call', $$CREATE ({n: 'a'})$$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_call', $$CREATE ({n: 'b'})$$) as (a agtype); a --- (0 rows) CREATE SCHEMA call_stmt_test; CREATE FUNCTION call_stmt_test.add_agtype(agtype, agtype) RETURNS agtype AS 'select $1 + $2;' LANGUAGE SQL IMMUTABLE RETURNS NULL ON NULL INPUT; /* * CALL (solo) */ SELECT * FROM cypher('cypher_call', $$CALL sqrt(64)$$) as (sqrt agtype); sqrt ------ 8.0 (1 row) /* CALL RETURN, should fail */ SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) RETURN sqrt$$) as (sqrt agtype); ERROR: Procedure call inside a query does not support naming results implicitly LINE 2: SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) RETURN s... ^ HINT: Name explicitly using `YIELD` instead /* CALL YIELD */ SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt$$) as (sqrt agtype); sqrt ------ 8.0 (1 row) /* incorrect variable should fail */ SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD squirt$$) as (sqrt agtype); ERROR: Unknown CALL output LINE 2: ... FROM cypher('cypher_call', $$CALL sqrt(64) YIELD squirt$$) ... ^ /* qualified name */ SELECT * FROM cypher('cypher_call', $$CALL call_stmt_test.add_agtype(1,2)$$) as (sqrt agtype); sqrt ------ 3 (1 row) /* nonexistent schema should fail */ SELECT * FROM cypher('cypher_call', $$CALL ag_catalog.add_agtype(1,2)$$) as (sqrt agtype); ERROR: function ag_catalog.add_agtype(agtype, agtype) does not exist LINE 2: ...cypher('cypher_call', $$CALL ag_catalog.add_agtype(1,2)$$) a... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. /* CALL YIELD WHERE, should fail */ SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt > 1$$) as (sqrt agtype); ERROR: Cannot use standalone CALL with WHERE LINE 2: SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sq... ^ HINT: Instead use `CALL ... WITH * WHERE ... RETURN *` /* * subquery */ /* CALL YIELD UPDATE/RETURN */ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt RETURN sqrt $$) as (sqrt agtype); sqrt ------ 8.0 (1 row) /* Unrecognized YIELD, correct RETURN, should fail*/ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD squirt RETURN sqrt $$) as (sqrt agtype); ERROR: Unknown CALL output LINE 2: ...FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD squirt RET... ^ /* CALL YIELD WHERE RETURN */ SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt > 1 RETURN sqrt $$) as (a agtype); a ----- 8.0 (1 row) SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt = 1 RETURN sqrt $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt = 8 RETURN sqrt $$) as (a agtype); a ----- 8.0 (1 row) /* should fail */ SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE a = 8 RETURN sqrt $$) as (a agtype); ERROR: could not find rte for a LINE 2: ...r('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE a = 8 RETU... ^ /* MATCH CALL RETURN, should fail */ SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) RETURN sqrt $$) as (sqrt agtype); ERROR: Procedure call inside a query does not support naming results implicitly LINE 2: SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(6... ^ HINT: Name explicitly using `YIELD` instead /* MATCH CALL YIELD RETURN */ SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt RETURN a, sqrt $$) as (a agtype, sqrt agtype); a | sqrt ------------------------------------------------------------------------+------ {"id": 281474976710657, "label": "", "properties": {"n": "a"}}::vertex | 8.0 {"id": 281474976710658, "label": "", "properties": {"n": "b"}}::vertex | 8.0 (2 rows) /* MATCH CALL YIELD WHERE UPDATE/RETURN */ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt WHERE sqrt > 1 CREATE ({n:'c'}) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE a.n = 'c' DELETE (a) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE a.n = 'c' RETURN a $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE sqrt = 1 RETURN a, sqrt $$) as (a agtype, sqrt agtype); a | sqrt ---+------ (0 rows) SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE sqrt = 8 RETURN a, sqrt $$) as (a agtype, sqrt agtype); a | sqrt ------------------------------------------------------------------------+------ {"id": 281474976710657, "label": "", "properties": {"n": "a"}}::vertex | 8.0 {"id": 281474976710658, "label": "", "properties": {"n": "b"}}::vertex | 8.0 (2 rows) SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE b = 8 RETURN a, sqrt $$) as (a agtype, sqrt agtype); ERROR: could not find rte for b LINE 1: ...all', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE b = 8 RETU... ^ /* CALL MATCH YIELD WHERE UPDATE/RETURN */ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt WHERE sqrt > 1 CREATE ({n:'c'}) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE a.n = 'c' DELETE (a) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE a.n = 'c' RETURN a $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE sqrt = 1 RETURN a, sqrt $$) as (a agtype, sqrt agtype); a | sqrt ---+------ (0 rows) SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE sqrt = 8 RETURN a, sqrt $$) as (a agtype, sqrt agtype); a | sqrt ------------------------------------------------------------------------+------ {"id": 281474976710657, "label": "", "properties": {"n": "a"}}::vertex | 8.0 {"id": 281474976710658, "label": "", "properties": {"n": "b"}}::vertex | 8.0 (2 rows) SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt WHERE sqrt = 8 MATCH (a) RETURN a, sqrt $$) as (a agtype, sqrt agtype); a | sqrt ------------------------------------------------------------------------+------ {"id": 281474976710657, "label": "", "properties": {"n": "a"}}::vertex | 8.0 {"id": 281474976710658, "label": "", "properties": {"n": "b"}}::vertex | 8.0 (2 rows) /* Multiple Calls: CALL YIELD CALL YIELD... RETURN */ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL agtype_sum(2,2) YIELD agtype_sum RETURN sqrt, agtype_sum $$) as (sqrt agtype, agtype_sum agtype); sqrt | agtype_sum ------+------------ 8.0 | 4 (1 row) /* should fail */ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL sqrt(81) YIELD sqrt RETURN sqrt, sqrt $$) as (a agtype, b agtype); ERROR: duplicate variable "sqrt" LINE 2: ..., $$ CALL sqrt(64) YIELD sqrt CALL sqrt(81) YIELD sqrt RETUR... ^ /* Aliasing: CALL YIELD AS CALL YIELD AS ... UPDATE/RETURN */ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL sqrt(81) YIELD sqrt AS sqrt1 RETURN sqrt, sqrt1 $$) as (sqrt agtype, sqrt1 agtype); sqrt | sqrt1 ------+------- 8.0 | 9.0 (1 row) SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt AS sqrt1 CALL sqrt(81) YIELD sqrt RETURN sqrt, sqrt1 $$) as (sqrt agtype, sqrt1 agtype); sqrt | sqrt1 ------+------- 9.0 | 8.0 (1 row) /* duplicated alias should fail */ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt AS sqrt1 CALL sqrt(81) YIELD sqrt AS sqrt1 RETURN sqrt1, sqrt1 $$) as (a agtype, b agtype); ERROR: duplicate variable "sqrt1" LINE 2: ... sqrt(64) YIELD sqrt AS sqrt1 CALL sqrt(81) YIELD sqrt AS sq... ^ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL agtype_sum(2,2) YIELD agtype_sum AS sqrt RETURN sqrt, sqrt $$) as (a agtype, b agtype); ERROR: duplicate variable "sqrt" LINE 1: ...LL sqrt(64) YIELD sqrt CALL agtype_sum(2,2) YIELD agtype_sum... ^ DROP SCHEMA call_stmt_test CASCADE; NOTICE: drop cascades to function call_stmt_test.add_agtype(agtype,agtype) SELECT drop_graph('cypher_call', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table cypher_call._ag_label_vertex drop cascades to table cypher_call._ag_label_edge NOTICE: graph "cypher_call" has been dropped drop_graph ------------ (1 row) age-PG16-v1.5.0-rc0/regress/expected/cypher_create.out000066400000000000000000001210111454606241200224150ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher_create'); NOTICE: graph "cypher_create" has been created create_graph -------------- (1 row) SELECT * FROM cypher('cypher_create', $$CREATE ()$$) AS (a agtype); a --- (0 rows) -- vertex graphid SELECT * FROM cypher('cypher_create', $$CREATE (:v)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_create', $$CREATE (:v {})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_create', $$CREATE (:v {key: 'value'})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_create', $$MATCH (n:v) RETURN n$$) AS (n agtype); n ------------------------------------------------------------------------------- {"id": 844424930131969, "label": "v", "properties": {}}::vertex {"id": 844424930131970, "label": "v", "properties": {}}::vertex {"id": 844424930131971, "label": "v", "properties": {"key": "value"}}::vertex (3 rows) -- Left relationship SELECT * FROM cypher('cypher_create', $$ CREATE (:v {id:"right rel, initial node"})-[:e {id:"right rel"}]->(:v {id:"right rel, end node"}) $$) AS (a agtype); a --- (0 rows) -- Right relationship SELECT * FROM cypher('cypher_create', $$ CREATE (:v {id:"left rel, initial node"})<-[:e {id:"left rel"}]-(:v {id:"left rel, end node"}) $$) AS (a agtype); a --- (0 rows) -- Pattern creates a path from the initial node to the last node SELECT * FROM cypher('cypher_create', $$ CREATE (:v {id: "path, initial node"})-[:e {id: "path, edge one"}]->(:v {id:"path, middle node"})-[:e {id:"path, edge two"}]->(:v {id:"path, last node"}) $$) AS (a agtype); a --- (0 rows) -- middle vertex points to the initial and last vertex SELECT * FROM cypher('cypher_create', $$ CREATE (:v {id: "divergent, initial node"})<-[:e {id: "divergent, edge one"}]-(:v {id: "divergent middle node"})-[:e {id: "divergent, edge two"}]->(:v {id: "divergent, end node"}) $$) AS (a agtype); a --- (0 rows) -- initial and last vertex point to the middle vertex SELECT * FROM cypher('cypher_create', $$ CREATE (:v {id: "convergent, initial node"})-[:e {id: "convergent, edge one"}]->(:v {id: "convergent middle node"})<-[:e {id: "convergent, edge two"}]-(:v {id: "convergent, end node"}) $$) AS (a agtype); a --- (0 rows) -- Validate Paths work correctly SELECT * FROM cypher('cypher_create', $$ CREATE (:v {id: "paths, vertex one"})-[:e {id: "paths, edge one"}]->(:v {id: "paths, vertex two"}), (:v {id: "paths, vertex three"})-[:e {id: "paths, edge two"}]->(:v {id: "paths, vertex four"}) $$) AS (a agtype); a --- (0 rows) --edge with double relationship will throw an error SELECT * FROM cypher('cypher_create', $$CREATE (:v)<-[:e]->()$$) AS (a agtype); ERROR: syntax error at or near ">" LINE 1: ... FROM cypher('cypher_create', $$CREATE (:v)<-[:e]->()$$) AS ... ^ --edge with no relationship will throw an error SELECT * FROM cypher('cypher_create', $$CREATE (:v)-[:e]-()$$) AS (a agtype); ERROR: only directed relationships are allowed in CREATE LINE 1: ...LECT * FROM cypher('cypher_create', $$CREATE (:v)-[:e]-()$$)... ^ --edges without labels are not supported SELECT * FROM cypher('cypher_create', $$CREATE (:v)-[]->(:v)$$) AS (a agtype); ERROR: relationships must be specify a label in CREATE. LINE 1: ...LECT * FROM cypher('cypher_create', $$CREATE (:v)-[]->(:v)$$... ^ SELECT * FROM cypher_create.e; id | start_id | end_id | properties ------------------+-----------------+-----------------+-------------------------------- 1125899906842625 | 844424930131972 | 844424930131973 | {"id": "right rel"} 1125899906842626 | 844424930131975 | 844424930131974 | {"id": "left rel"} 1125899906842627 | 844424930131977 | 844424930131978 | {"id": "path, edge two"} 1125899906842628 | 844424930131976 | 844424930131977 | {"id": "path, edge one"} 1125899906842629 | 844424930131980 | 844424930131981 | {"id": "divergent, edge two"} 1125899906842630 | 844424930131980 | 844424930131979 | {"id": "divergent, edge one"} 1125899906842631 | 844424930131984 | 844424930131983 | {"id": "convergent, edge two"} 1125899906842632 | 844424930131982 | 844424930131983 | {"id": "convergent, edge one"} 1125899906842633 | 844424930131985 | 844424930131986 | {"id": "paths, edge one"} 1125899906842634 | 844424930131987 | 844424930131988 | {"id": "paths, edge two"} (10 rows) SELECT * FROM cypher_create.v; id | properties -----------------+------------------------------------ 844424930131969 | {} 844424930131970 | {} 844424930131971 | {"key": "value"} 844424930131972 | {"id": "right rel, initial node"} 844424930131973 | {"id": "right rel, end node"} 844424930131974 | {"id": "left rel, initial node"} 844424930131975 | {"id": "left rel, end node"} 844424930131976 | {"id": "path, initial node"} 844424930131977 | {"id": "path, middle node"} 844424930131978 | {"id": "path, last node"} 844424930131979 | {"id": "divergent, initial node"} 844424930131980 | {"id": "divergent middle node"} 844424930131981 | {"id": "divergent, end node"} 844424930131982 | {"id": "convergent, initial node"} 844424930131983 | {"id": "convergent middle node"} 844424930131984 | {"id": "convergent, end node"} 844424930131985 | {"id": "paths, vertex one"} 844424930131986 | {"id": "paths, vertex two"} 844424930131987 | {"id": "paths, vertex three"} 844424930131988 | {"id": "paths, vertex four"} (20 rows) SELECT * FROM cypher('cypher_create', $$ CREATE (:n_var {name: 'Node A'}) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_create', $$ CREATE (:n_var {name: 'Node B'}) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_create', $$ CREATE (:n_var {name: 'Node C'}) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var), (b:n_var) WHERE a.name <> b.name CREATE (a)-[:e_var {name: a.name + ' -> ' + b.name}]->(b) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var) CREATE (a)-[:e_var {name: a.name + ' -> ' + a.name}]->(a) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var) CREATE (a)-[:e_var {name: a.name + ' -> new node'}]->(:n_other_node) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var) WHERE a.name = 'Node A' CREATE (a)-[b:e_var]->() $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_create', $$ CREATE (a)-[:b_var]->() RETURN a, id(a) $$) as (a agtype, b agtype); a | b ----------------------------------------------------------------+----------------- {"id": 281474976710659, "label": "", "properties": {}}::vertex | 281474976710659 (1 row) SELECT * FROM cypher('cypher_create', $$ CREATE ()-[b:e_var]->() RETURN b, id(b) $$) as (a agtype, b agtype); a | b ----------------------------------------------------------------------------------------------------------------------------+------------------ {"id": 1688849860263950, "label": "e_var", "end_id": 281474976710662, "start_id": 281474976710661, "properties": {}}::edge | 1688849860263950 (1 row) SELECT * FROM cypher('cypher_create', $$ CREATE (a)-[b:e_var {id: 0}]->() RETURN a, b, b.id, b.id + 1 $$) as (a agtype, b agtype, c agtype, d agtype); a | b | c | d ----------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+---+--- {"id": 281474976710663, "label": "", "properties": {}}::vertex | {"id": 1688849860263951, "label": "e_var", "end_id": 281474976710664, "start_id": 281474976710663, "properties": {"id": 0}}::edge | 0 | 1 (1 row) SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var) CREATE (a)-[b:e_var]->(a) RETURN a, b $$) as (a agtype, b agtype); a | b --------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------ {"id": 1407374883553281, "label": "n_var", "properties": {"name": "Node A"}}::vertex | {"id": 1688849860263952, "label": "e_var", "end_id": 1407374883553281, "start_id": 1407374883553281, "properties": {}}::edge {"id": 1407374883553282, "label": "n_var", "properties": {"name": "Node B"}}::vertex | {"id": 1688849860263953, "label": "e_var", "end_id": 1407374883553282, "start_id": 1407374883553282, "properties": {}}::edge {"id": 1407374883553283, "label": "n_var", "properties": {"name": "Node C"}}::vertex | {"id": 1688849860263954, "label": "e_var", "end_id": 1407374883553283, "start_id": 1407374883553283, "properties": {}}::edge (3 rows) SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var) CREATE (a)-[b:e_var]->(c) RETURN a, b, c $$) as (a agtype, b agtype, c agtype); a | b | c --------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------- {"id": 1407374883553281, "label": "n_var", "properties": {"name": "Node A"}}::vertex | {"id": 1688849860263955, "label": "e_var", "end_id": 281474976710665, "start_id": 1407374883553281, "properties": {}}::edge | {"id": 281474976710665, "label": "", "properties": {}}::vertex {"id": 1407374883553282, "label": "n_var", "properties": {"name": "Node B"}}::vertex | {"id": 1688849860263956, "label": "e_var", "end_id": 281474976710666, "start_id": 1407374883553282, "properties": {}}::edge | {"id": 281474976710666, "label": "", "properties": {}}::vertex {"id": 1407374883553283, "label": "n_var", "properties": {"name": "Node C"}}::vertex | {"id": 1688849860263957, "label": "e_var", "end_id": 281474976710667, "start_id": 1407374883553283, "properties": {}}::edge | {"id": 281474976710667, "label": "", "properties": {}}::vertex (3 rows) SELECT * FROM cypher('cypher_create', $$ CREATE (a)-[:e_var]->() RETURN a $$) as (b agtype); b ---------------------------------------------------------------- {"id": 281474976710668, "label": "", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_create', $$ CREATE ()-[b:e_var]->() RETURN b $$) as (b agtype); b ---------------------------------------------------------------------------------------------------------------------------- {"id": 1688849860263959, "label": "e_var", "end_id": 281474976710671, "start_id": 281474976710670, "properties": {}}::edge (1 row) SELECT * FROM cypher('cypher_create', $$ CREATE p=()-[:e_var]->() RETURN p $$) as (b agtype); b -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710672, "label": "", "properties": {}}::vertex, {"id": 1688849860263960, "label": "e_var", "end_id": 281474976710673, "start_id": 281474976710672, "properties": {}}::edge, {"id": 281474976710673, "label": "", "properties": {}}::vertex]::path (1 row) SELECT * FROM cypher('cypher_create', $$ CREATE p=(a {id:0})-[:e_var]->(a) RETURN p $$) as (b agtype); b ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710674, "label": "", "properties": {"id": 0}}::vertex, {"id": 1688849860263961, "label": "e_var", "end_id": 281474976710674, "start_id": 281474976710674, "properties": {}}::edge, {"id": 281474976710674, "label": "", "properties": {"id": 0}}::vertex]::path (1 row) SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var) CREATE p=(a)-[:e_var]->(a) RETURN p $$) as (b agtype); b ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [{"id": 1407374883553281, "label": "n_var", "properties": {"name": "Node A"}}::vertex, {"id": 1688849860263962, "label": "e_var", "end_id": 1407374883553281, "start_id": 1407374883553281, "properties": {}}::edge, {"id": 1407374883553281, "label": "n_var", "properties": {"name": "Node A"}}::vertex]::path [{"id": 1407374883553282, "label": "n_var", "properties": {"name": "Node B"}}::vertex, {"id": 1688849860263963, "label": "e_var", "end_id": 1407374883553282, "start_id": 1407374883553282, "properties": {}}::edge, {"id": 1407374883553282, "label": "n_var", "properties": {"name": "Node B"}}::vertex]::path [{"id": 1407374883553283, "label": "n_var", "properties": {"name": "Node C"}}::vertex, {"id": 1688849860263964, "label": "e_var", "end_id": 1407374883553283, "start_id": 1407374883553283, "properties": {}}::edge, {"id": 1407374883553283, "label": "n_var", "properties": {"name": "Node C"}}::vertex]::path (3 rows) SELECT * FROM cypher('cypher_create', $$ CREATE p=(a)-[:e_var]->(), (a)-[b:e_var]->(a) RETURN p, b $$) as (a agtype, b agtype); a | b --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710675, "label": "", "properties": {}}::vertex, {"id": 1688849860263965, "label": "e_var", "end_id": 281474976710676, "start_id": 281474976710675, "properties": {}}::edge, {"id": 281474976710676, "label": "", "properties": {}}::vertex]::path | {"id": 1688849860263966, "label": "e_var", "end_id": 281474976710675, "start_id": 281474976710675, "properties": {}}::edge (1 row) SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var) WHERE a.name = 'Node Z' CREATE (a)-[:e_var {name: a.name + ' -> does not exist'}]->(:n_other_node) RETURN a $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher_create.n_var; id | properties ------------------+-------------------- 1407374883553281 | {"name": "Node A"} 1407374883553282 | {"name": "Node B"} 1407374883553283 | {"name": "Node C"} (3 rows) SELECT * FROM cypher_create.e_var; id | start_id | end_id | properties ------------------+------------------+------------------+-------------------------------- 1688849860263937 | 1407374883553281 | 1407374883553282 | {"name": "Node A -> Node B"} 1688849860263938 | 1407374883553281 | 1407374883553283 | {"name": "Node A -> Node C"} 1688849860263939 | 1407374883553282 | 1407374883553281 | {"name": "Node B -> Node A"} 1688849860263940 | 1407374883553282 | 1407374883553283 | {"name": "Node B -> Node C"} 1688849860263941 | 1407374883553283 | 1407374883553281 | {"name": "Node C -> Node A"} 1688849860263942 | 1407374883553283 | 1407374883553282 | {"name": "Node C -> Node B"} 1688849860263943 | 1407374883553281 | 1407374883553281 | {"name": "Node A -> Node A"} 1688849860263944 | 1407374883553282 | 1407374883553282 | {"name": "Node B -> Node B"} 1688849860263945 | 1407374883553283 | 1407374883553283 | {"name": "Node C -> Node C"} 1688849860263946 | 1407374883553281 | 1970324836974593 | {"name": "Node A -> new node"} 1688849860263947 | 1407374883553282 | 1970324836974594 | {"name": "Node B -> new node"} 1688849860263948 | 1407374883553283 | 1970324836974595 | {"name": "Node C -> new node"} 1688849860263949 | 1407374883553281 | 281474976710658 | {} 1688849860263950 | 281474976710661 | 281474976710662 | {} 1688849860263951 | 281474976710663 | 281474976710664 | {"id": 0} 1688849860263952 | 1407374883553281 | 1407374883553281 | {} 1688849860263953 | 1407374883553282 | 1407374883553282 | {} 1688849860263954 | 1407374883553283 | 1407374883553283 | {} 1688849860263955 | 1407374883553281 | 281474976710665 | {} 1688849860263956 | 1407374883553282 | 281474976710666 | {} 1688849860263957 | 1407374883553283 | 281474976710667 | {} 1688849860263958 | 281474976710668 | 281474976710669 | {} 1688849860263959 | 281474976710670 | 281474976710671 | {} 1688849860263960 | 281474976710672 | 281474976710673 | {} 1688849860263961 | 281474976710674 | 281474976710674 | {} 1688849860263962 | 1407374883553281 | 1407374883553281 | {} 1688849860263963 | 1407374883553282 | 1407374883553282 | {} 1688849860263964 | 1407374883553283 | 1407374883553283 | {} 1688849860263965 | 281474976710675 | 281474976710676 | {} 1688849860263966 | 281474976710675 | 281474976710675 | {} (30 rows) --Check every label has been created SELECT name, kind FROM ag_label ORDER BY name; name | kind ------------------+------ _ag_label_edge | e _ag_label_vertex | v b_var | e e | e e_var | e n_other_node | v n_var | v v | v (8 rows) --Validate every vertex has the correct label SELECT * FROM cypher('cypher_create', $$MATCH (n) RETURN n$$) AS (n agtype); n ------------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {}}::vertex {"id": 281474976710658, "label": "", "properties": {}}::vertex {"id": 281474976710659, "label": "", "properties": {}}::vertex {"id": 281474976710660, "label": "", "properties": {}}::vertex {"id": 281474976710661, "label": "", "properties": {}}::vertex {"id": 281474976710662, "label": "", "properties": {}}::vertex {"id": 281474976710663, "label": "", "properties": {}}::vertex {"id": 281474976710664, "label": "", "properties": {}}::vertex {"id": 281474976710665, "label": "", "properties": {}}::vertex {"id": 281474976710666, "label": "", "properties": {}}::vertex {"id": 281474976710667, "label": "", "properties": {}}::vertex {"id": 281474976710668, "label": "", "properties": {}}::vertex {"id": 281474976710669, "label": "", "properties": {}}::vertex {"id": 281474976710670, "label": "", "properties": {}}::vertex {"id": 281474976710671, "label": "", "properties": {}}::vertex {"id": 281474976710672, "label": "", "properties": {}}::vertex {"id": 281474976710673, "label": "", "properties": {}}::vertex {"id": 281474976710674, "label": "", "properties": {"id": 0}}::vertex {"id": 281474976710675, "label": "", "properties": {}}::vertex {"id": 281474976710676, "label": "", "properties": {}}::vertex {"id": 844424930131969, "label": "v", "properties": {}}::vertex {"id": 844424930131970, "label": "v", "properties": {}}::vertex {"id": 844424930131971, "label": "v", "properties": {"key": "value"}}::vertex {"id": 844424930131972, "label": "v", "properties": {"id": "right rel, initial node"}}::vertex {"id": 844424930131973, "label": "v", "properties": {"id": "right rel, end node"}}::vertex {"id": 844424930131974, "label": "v", "properties": {"id": "left rel, initial node"}}::vertex {"id": 844424930131975, "label": "v", "properties": {"id": "left rel, end node"}}::vertex {"id": 844424930131976, "label": "v", "properties": {"id": "path, initial node"}}::vertex {"id": 844424930131977, "label": "v", "properties": {"id": "path, middle node"}}::vertex {"id": 844424930131978, "label": "v", "properties": {"id": "path, last node"}}::vertex {"id": 844424930131979, "label": "v", "properties": {"id": "divergent, initial node"}}::vertex {"id": 844424930131980, "label": "v", "properties": {"id": "divergent middle node"}}::vertex {"id": 844424930131981, "label": "v", "properties": {"id": "divergent, end node"}}::vertex {"id": 844424930131982, "label": "v", "properties": {"id": "convergent, initial node"}}::vertex {"id": 844424930131983, "label": "v", "properties": {"id": "convergent middle node"}}::vertex {"id": 844424930131984, "label": "v", "properties": {"id": "convergent, end node"}}::vertex {"id": 844424930131985, "label": "v", "properties": {"id": "paths, vertex one"}}::vertex {"id": 844424930131986, "label": "v", "properties": {"id": "paths, vertex two"}}::vertex {"id": 844424930131987, "label": "v", "properties": {"id": "paths, vertex three"}}::vertex {"id": 844424930131988, "label": "v", "properties": {"id": "paths, vertex four"}}::vertex {"id": 1407374883553281, "label": "n_var", "properties": {"name": "Node A"}}::vertex {"id": 1407374883553282, "label": "n_var", "properties": {"name": "Node B"}}::vertex {"id": 1407374883553283, "label": "n_var", "properties": {"name": "Node C"}}::vertex {"id": 1970324836974593, "label": "n_other_node", "properties": {}}::vertex {"id": 1970324836974594, "label": "n_other_node", "properties": {}}::vertex {"id": 1970324836974595, "label": "n_other_node", "properties": {}}::vertex (46 rows) -- prepared statements PREPARE p_1 AS SELECT * FROM cypher('cypher_create', $$CREATE (v:new_vertex {key: 'value'}) RETURN v$$) AS (a agtype); EXECUTE p_1; a ----------------------------------------------------------------------------------------- {"id": 2533274790395905, "label": "new_vertex", "properties": {"key": "value"}}::vertex (1 row) EXECUTE p_1; a ----------------------------------------------------------------------------------------- {"id": 2533274790395906, "label": "new_vertex", "properties": {"key": "value"}}::vertex (1 row) PREPARE p_2 AS SELECT * FROM cypher('cypher_create', $$CREATE (v:new_vertex {key: $var_name}) RETURN v$$, $1) AS (a agtype); EXECUTE p_2('{"var_name": "Hello Prepared Statements"}'); a ------------------------------------------------------------------------------------------------------------- {"id": 2533274790395907, "label": "new_vertex", "properties": {"key": "Hello Prepared Statements"}}::vertex (1 row) EXECUTE p_2('{"var_name": "Hello Prepared Statements 2"}'); a --------------------------------------------------------------------------------------------------------------- {"id": 2533274790395908, "label": "new_vertex", "properties": {"key": "Hello Prepared Statements 2"}}::vertex (1 row) -- pl/pgsql CREATE FUNCTION create_test() RETURNS TABLE(vertex agtype) LANGUAGE plpgsql VOLATILE AS $BODY$ BEGIN RETURN QUERY SELECT * FROM cypher('cypher_create', $$CREATE (v:new_vertex {key: 'value'}) RETURN v$$) AS (a agtype); END $BODY$; SELECT create_test(); create_test ----------------------------------------------------------------------------------------- {"id": 2533274790395909, "label": "new_vertex", "properties": {"key": "value"}}::vertex (1 row) SELECT create_test(); create_test ----------------------------------------------------------------------------------------- {"id": 2533274790395910, "label": "new_vertex", "properties": {"key": "value"}}::vertex (1 row) -- -- Errors -- -- Var 'a' cannot have properties in the create clause SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var) WHERE a.name = 'Node A' CREATE (a {test:1})-[:e_var]->() $$) as (a agtype); ERROR: previously declared nodes in a create clause cannot have properties LINE 4: CREATE (a {test:1})-[:e_var]->() ^ -- Var 'a' cannot change labels SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var) WHERE a.name = 'Node A' CREATE (a:new_label)-[:e_var]->() $$) as (a agtype); ERROR: previously declared variables cannot have a label LINE 4: CREATE (a:new_label)-[:e_var]->() ^ SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var)-[b]-() WHERE a.name = 'Node A' CREATE (a)-[b:e_var]->() $$) as (a agtype); ERROR: variable b already exists LINE 4: CREATE (a)-[b:e_var]->() ^ -- A valid single vertex path SELECT * FROM cypher('cypher_create', $$ CREATE p=(a) RETURN p $$) as (a agtype); a ------------------------------------------------------------------------ [{"id": 281474976710677, "label": "", "properties": {}}::vertex]::path (1 row) --CREATE with joins SELECT * FROM cypher('cypher_create', $$ CREATE (a) RETURN a $$) as q(a agtype), cypher('cypher_create', $$ CREATE (b) RETURN b $$) as t(b agtype); ERROR: cypher create clause cannot be rescanned HINT: its unsafe to use joins in a query with a Cypher CREATE clause -- column definition list for CREATE clause must contain a single agtype -- attribute SELECT * FROM cypher('cypher_create', $$CREATE ()$$) AS (a int); ERROR: column definition list for CREATE clause must contain a single agtype attribute LINE 1: SELECT * FROM cypher('cypher_create', $$CREATE ()$$) AS (a i... ^ HINT: ... cypher($$ ... CREATE ... $$) AS t(c agtype) ... SELECT * FROM cypher('cypher_create', $$CREATE ()$$) AS (a agtype, b int); ERROR: column definition list for CREATE clause must contain a single agtype attribute LINE 1: SELECT * FROM cypher('cypher_create', $$CREATE ()$$) AS (a a... ^ HINT: ... cypher($$ ... CREATE ... $$) AS t(c agtype) ... -- nodes cannot use edge labels and edge labels cannot use node labels SELECT * FROM cypher('cypher_create', $$ CREATE (:existing_vlabel {id: 1}) -[c:existing_elabel {id: 3}]-> (:existing_vlabel {id: 2}) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_create', $$ MATCH(a), (b) WHERE a.id = 1 AND b.id = 2 CREATE (a)-[c:existing_vlabel { id: 4}]->(b) RETURN c.id $$) as (c agtype); ERROR: label existing_vlabel is for vertices, not edges LINE 4: CREATE (a)-[c:existing_vlabel { id: 4}]->(b) ^ SELECT * FROM cypher('cypher_create', $$ CREATE (a:existing_elabel { id: 5}) RETURN a.id $$) as (a agtype); ERROR: label existing_elabel is for edges, not vertices LINE 2: CREATE (a:existing_elabel { id: 5}) ^ -- -- check the cypher CREATE clause inside an INSERT INTO -- CREATE TABLE simple_path (u agtype, e agtype, v agtype); INSERT INTO simple_path(SELECT * FROM cypher('cypher_create', $$CREATE (u)-[e:knows]->(v) return u, e, v $$) AS (u agtype, e agtype, v agtype)); SELECT count(*) FROM simple_path; count ------- 1 (1 row) -- -- check the cypher CREATE clause inside of a BEGIN/END/COMMIT block -- BEGIN; SELECT * FROM cypher('cypher_create', $$ CREATE (a:Part {part_num: '670'}) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_create', $$ MATCH (a:Part) RETURN a $$) as (a agtype); a -------------------------------------------------------------------------------------- {"id": 3659174697238529, "label": "Part", "properties": {"part_num": "670"}}::vertex (1 row) SELECT * FROM cypher('cypher_create', $$ CREATE (a:Part {part_num: '671'}) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_create', $$ CREATE (a:Part {part_num: '672'}) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_create', $$ MATCH (a:Part) RETURN a $$) as (a agtype); a -------------------------------------------------------------------------------------- {"id": 3659174697238529, "label": "Part", "properties": {"part_num": "670"}}::vertex {"id": 3659174697238530, "label": "Part", "properties": {"part_num": "671"}}::vertex {"id": 3659174697238531, "label": "Part", "properties": {"part_num": "672"}}::vertex (3 rows) SELECT * FROM cypher('cypher_create', $$ CREATE (a:Part {part_num: '673'}) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_create', $$ MATCH (a:Part) RETURN a $$) as (a agtype); a -------------------------------------------------------------------------------------- {"id": 3659174697238529, "label": "Part", "properties": {"part_num": "670"}}::vertex {"id": 3659174697238530, "label": "Part", "properties": {"part_num": "671"}}::vertex {"id": 3659174697238531, "label": "Part", "properties": {"part_num": "672"}}::vertex {"id": 3659174697238532, "label": "Part", "properties": {"part_num": "673"}}::vertex (4 rows) END; -- -- variable reuse -- -- Valid variable reuse SELECT * FROM cypher('cypher_create', $$ CREATE (p)-[a:new]->(p) RETURN p,a,p $$) as (n1 agtype, e agtype, n2 agtype); n1 | e | n2 ----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------- {"id": 281474976710681, "label": "", "properties": {}}::vertex | {"id": 3940649673949185, "label": "new", "end_id": 281474976710681, "start_id": 281474976710681, "properties": {}}::edge | {"id": 281474976710681, "label": "", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_create', $$ CREATE (p:node)-[e:new]->(p) RETURN p,e,p $$) as (n1 agtype, e agtype, n2 agtype); n1 | e | n2 ---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------- {"id": 4222124650659841, "label": "node", "properties": {}}::vertex | {"id": 3940649673949186, "label": "new", "end_id": 4222124650659841, "start_id": 4222124650659841, "properties": {}}::edge | {"id": 4222124650659841, "label": "node", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_create', $$ CREATE (p) CREATE (p)-[a:new]->(p) RETURN p,a,p $$) as (n1 agtype, e agtype, n2 agtype); n1 | e | n2 ----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------- {"id": 281474976710682, "label": "", "properties": {}}::vertex | {"id": 3940649673949187, "label": "new", "end_id": 281474976710682, "start_id": 281474976710682, "properties": {}}::edge | {"id": 281474976710682, "label": "", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_create', $$ CREATE (p:n1) CREATE (p)-[a:new]->(p) RETURN p,a,p $$) as (n1 agtype, e agtype, n2 agtype); n1 | e | n2 -------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------- {"id": 4503599627370497, "label": "n1", "properties": {}}::vertex | {"id": 3940649673949188, "label": "new", "end_id": 4503599627370497, "start_id": 4503599627370497, "properties": {}}::edge | {"id": 4503599627370497, "label": "n1", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_create', $$ MATCH (p:node) CREATE (p)-[a:new]->(p) RETURN p,a,p $$) as (n1 agtype, e agtype, n2 agtype); n1 | e | n2 ---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------- {"id": 4222124650659841, "label": "node", "properties": {}}::vertex | {"id": 3940649673949189, "label": "new", "end_id": 4222124650659841, "start_id": 4222124650659841, "properties": {}}::edge | {"id": 4222124650659841, "label": "node", "properties": {}}::vertex (1 row) -- Invalid variable reuse SELECT * FROM cypher('cypher_create', $$ CREATE (p)-[a:new]->(p {n0:'n1'}) $$) as (a agtype); ERROR: previously declared nodes in a create clause cannot have properties LINE 2: CREATE (p)-[a:new]->(p {n0:'n1'}) ^ SELECT * FROM cypher('cypher_create', $$ CREATE (p:n0)-[a:new]->(p:n1) $$) as (a agtype); ERROR: previously declared variables cannot have a label LINE 2: CREATE (p:n0)-[a:new]->(p:n1) ^ SELECT * FROM cypher('cypher_create', $$ CREATE p=(p) $$) as (a agtype); ERROR: variable "p" already exists LINE 2: CREATE p=(p) ^ SELECT * FROM cypher('cypher_create', $$ CREATE p=() CREATE (p) $$) as (a agtype); ERROR: agtype must resolve to a vertex SELECT * FROM cypher('cypher_create', $$ CREATE p=(a)-[p:b]->(a) $$) as (a agtype); ERROR: variable "p" already exists LINE 2: CREATE p=(a)-[p:b]->(a) ^ SELECT * FROM cypher('cypher_create', $$ CREATE p=(a)-[:new]->(p) $$) as (a agtype); ERROR: variable "p" already exists LINE 2: CREATE p=(a)-[:new]->(p) ^ SELECT * FROM cypher('cypher_create', $$ MATCH (p) CREATE p=() $$) as (a agtype); ERROR: variable "p" already exists LINE 2: MATCH (p) CREATE p=() ^ SELECT * FROM cypher('cypher_create', $$ MATCH (p) CREATE p=(p) $$) as (a agtype); ERROR: variable "p" already exists LINE 2: MATCH (p) CREATE p=(p) ^ SELECT * FROM cypher('cypher_create', $$ MATCH (p) CREATE (a)-[p:b]->(a) $$) as (a agtype); ERROR: variable p already exists LINE 2: MATCH (p) CREATE (a)-[p:b]->(a) ^ SELECT * FROM cypher('cypher_create', $$ CREATE (a)-[e:new]->(p)-[e]->(a) $$) as (a agtype); ERROR: relationships must be specify a label in CREATE. LINE 2: CREATE (a)-[e:new]->(p)-[e]->(a) ^ SELECT * FROM cypher('cypher_create', $$ CREATE (a)-[e:new]->(p) CREATE (p)-[e:new]->(a) $$) as (a agtype); ERROR: variable e already exists LINE 3: CREATE (p)-[e:new]->(a) ^ SELECT * FROM cypher('cypher_create', $$ MATCH (a)-[e:new]->(p) CREATE (p)-[e:new]->(a) $$) as (a agtype); ERROR: variable e already exists LINE 3: CREATE (p)-[e:new]->(a) ^ -- Validate usage of keywords as labels is supported and case sensitive SELECT * FROM cypher('cypher_create', $$ CREATE (a:CREATE) RETURN a $$) as (a agtype); a ----------------------------------------------------------------------- {"id": 5348024557502465, "label": "CREATE", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_create', $$ CREATE (a:create) RETURN a $$) as (a agtype); a ----------------------------------------------------------------------- {"id": 5629499534213121, "label": "create", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_create', $$ CREATE (a:CrEaTe) RETURN a $$) as (a agtype); a ----------------------------------------------------------------------- {"id": 5910974510923777, "label": "CrEaTe", "properties": {}}::vertex (1 row) -- -- Clean up -- DROP TABLE simple_path; DROP FUNCTION create_test; SELECT drop_graph('cypher_create', true); NOTICE: drop cascades to 19 other objects DETAIL: drop cascades to table cypher_create._ag_label_vertex drop cascades to table cypher_create._ag_label_edge drop cascades to table cypher_create.v drop cascades to table cypher_create.e drop cascades to table cypher_create.n_var drop cascades to table cypher_create.e_var drop cascades to table cypher_create.n_other_node drop cascades to table cypher_create.b_var drop cascades to table cypher_create.new_vertex drop cascades to table cypher_create.existing_vlabel drop cascades to table cypher_create.existing_elabel drop cascades to table cypher_create.knows drop cascades to table cypher_create."Part" drop cascades to table cypher_create.new drop cascades to table cypher_create.node drop cascades to table cypher_create.n1 drop cascades to table cypher_create."CREATE" drop cascades to table cypher_create."create" drop cascades to table cypher_create."CrEaTe" NOTICE: graph "cypher_create" has been dropped drop_graph ------------ (1 row) -- -- End -- age-PG16-v1.5.0-rc0/regress/expected/cypher_delete.out000066400000000000000000000765461454606241200224420ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher_delete'); NOTICE: graph "cypher_delete" has been created create_graph -------------- (1 row) --Test 1: Delete Vertices SELECT * FROM cypher('cypher_delete', $$CREATE (:v)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$CREATE (:v {i: 0, j: 5, a: 0})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$CREATE (:v {i: 1})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n RETURN n$$) AS (a agtype); a --------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "v", "properties": {}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 0, "j": 5}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 1}}::vertex (3 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); a --- (0 rows) --Test 2: Delete Edges SELECT * FROM cypher('cypher_delete', $$CREATE (:v)-[:e]->(:v)$$) AS (a agtype); a --- (0 rows) --Should Fail SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->(n2) DELETE n1 RETURN n1$$) AS (a agtype); ERROR: Cannot delete a vertex that has edge(s). Delete the edge(s) first, or try DETACH DELETE. SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->(n2) DELETE n2 RETURN n2$$) AS (a agtype); ERROR: Cannot delete a vertex that has edge(s). Delete the edge(s) first, or try DETACH DELETE. SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->(n2) DELETE e RETURN e$$) AS (a agtype); a ------------------------------------------------------------------------------------------------------------------------ {"id": 1125899906842625, "label": "e", "end_id": 844424930131973, "start_id": 844424930131972, "properties": {}}::edge (1 row) SELECT * FROM cypher('cypher_delete', $$MATCH()-[e]->() DELETE e RETURN e$$) AS (a agtype); a --- (0 rows) --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n RETURN n$$) AS (a agtype); a ----------------------------------------------------------------- {"id": 844424930131972, "label": "v", "properties": {}}::vertex {"id": 844424930131973, "label": "v", "properties": {}}::vertex (2 rows) --Test 4: DETACH DELETE a vertex SELECT * FROM cypher('cypher_delete', $$CREATE (:v)-[:e]->(:v)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->(n2) DETACH DELETE n1 RETURN e$$) AS (a agtype); a ------------------------------------------------------------------------------------------------------------------------ {"id": 1125899906842626, "label": "e", "end_id": 844424930131975, "start_id": 844424930131974, "properties": {}}::edge (1 row) --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); a ----------------------------------------------------------------- {"id": 844424930131975, "label": "v", "properties": {}}::vertex (1 row) --Test 4: DETACH DELETE two vertices tied to the same edge SELECT * FROM cypher('cypher_delete', $$CREATE (:v)-[:e]->(:v)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->(n2) DETACH DELETE n1, n2 RETURN e$$) AS (a agtype); a ------------------------------------------------------------------------------------------------------------------------ {"id": 1125899906842627, "label": "e", "end_id": 844424930131977, "start_id": 844424930131976, "properties": {}}::edge (1 row) --Test 4: DETACH DELETE a vertex SELECT * FROM cypher('cypher_delete', $$CREATE (:v)-[:e]->(:v)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->(n2) DETACH DELETE n1, n2 RETURN e$$) AS (a agtype); a ------------------------------------------------------------------------------------------------------------------------ {"id": 1125899906842628, "label": "e", "end_id": 844424930131979, "start_id": 844424930131978, "properties": {}}::edge (1 row) --Test 5: DETACH DELETE a vertex that points to itself SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->(n)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->() DETACH DELETE n1 RETURN e$$) AS (a agtype); a ------------------------------------------------------------------------------------------------------------------------ {"id": 1125899906842629, "label": "e", "end_id": 844424930131980, "start_id": 844424930131980, "properties": {}}::edge (1 row) --Test 6: DETACH Delete a vertex twice SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->(n)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->(n2) DETACH DELETE n1, n2 RETURN e$$) AS (a agtype); a ------------------------------------------------------------------------------------------------------------------------ {"id": 1125899906842630, "label": "e", "end_id": 844424930131981, "start_id": 844424930131981, "properties": {}}::edge (1 row) --Test 7: Test the SET Clause on DELETED node SELECT * FROM cypher('cypher_delete', $$CREATE (:v)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$CREATE (:v {i: 0, j: 5, a: 0})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$CREATE (:v {i: 1})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n SET n.lol = 'ftw' RETURN n$$) AS (a agtype); a ----------------------------------------------------------------------------------------------------- {"id": 844424930131975, "label": "v", "properties": {"lol": "ftw"}}::vertex {"id": 844424930131982, "label": "v", "properties": {"lol": "ftw"}}::vertex {"id": 844424930131983, "label": "v", "properties": {"a": 0, "i": 0, "j": 5, "lol": "ftw"}}::vertex {"id": 844424930131984, "label": "v", "properties": {"i": 1, "lol": "ftw"}}::vertex (4 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); a --- (0 rows) --Test 8: SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->(:v) CREATE (n)-[:e]->(:v)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[]->() DELETE n1 RETURN n1$$) AS (a agtype); ERROR: Cannot delete a vertex that has edge(s). Delete the edge(s) first, or try DETACH DELETE. --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) DETACH DELETE n RETURN n$$) AS (a agtype); a ----------------------------------------------------------------- {"id": 844424930131985, "label": "v", "properties": {}}::vertex {"id": 844424930131986, "label": "v", "properties": {}}::vertex {"id": 844424930131987, "label": "v", "properties": {}}::vertex (3 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); a --- (0 rows) --Test 9: SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->(:v)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->() DELETE e, n1 RETURN n1$$) AS (a agtype); a ----------------------------------------------------------------- {"id": 844424930131988, "label": "v", "properties": {}}::vertex (1 row) --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) DETACH DELETE n RETURN n$$) AS (a agtype); a ----------------------------------------------------------------- {"id": 844424930131989, "label": "v", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); a --- (0 rows) --Test 10: SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->(:v)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->() DELETE n1, e RETURN n1$$) AS (a agtype); a ----------------------------------------------------------------- {"id": 844424930131990, "label": "v", "properties": {}}::vertex (1 row) --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) DETACH DELETE n RETURN n$$) AS (a agtype); a ----------------------------------------------------------------- {"id": 844424930131991, "label": "v", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); a --- (0 rows) --Test 11: Delete a vertex twice SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->(:v), (n)-[:e]->(:v) RETURN n$$) AS (a agtype); a ----------------------------------------------------------------- {"id": 844424930131992, "label": "v", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->() DETACH DELETE n1 RETURN n1, e$$) AS (a agtype, b agtype); a | b -----------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------ {"id": 844424930131992, "label": "v", "properties": {}}::vertex | {"id": 1125899906842635, "label": "e", "end_id": 844424930131993, "start_id": 844424930131992, "properties": {}}::edge {"id": 844424930131992, "label": "v", "properties": {}}::vertex | {"id": 1125899906842636, "label": "e", "end_id": 844424930131994, "start_id": 844424930131992, "properties": {}}::edge (2 rows) --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n RETURN n$$) AS (a agtype); a ----------------------------------------------------------------- {"id": 844424930131993, "label": "v", "properties": {}}::vertex {"id": 844424930131994, "label": "v", "properties": {}}::vertex (2 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); a --- (0 rows) --Test 12: SELECT * FROM cypher('cypher_delete', $$CREATE (:v)-[:e]->(:v)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n)-[e]->() DETACH DELETE n CREATE (n)-[:e2]->(:v) RETURN e$$) AS (a agtype); ERROR: vertex assigned to variable n was deleted --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) DETACH DELETE n RETURN n$$) AS (a agtype); a ----------------------------------------------------------------- {"id": 844424930131995, "label": "v", "properties": {}}::vertex {"id": 844424930131996, "label": "v", "properties": {}}::vertex (2 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); a --- (0 rows) --Test 13: SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->(n)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n)-[e]->(m) DETACH DELETE n CREATE (m)-[:e2]->(:v) RETURN e$$) AS (a agtype); ERROR: vertex assigned to variable m was deleted --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) DETACH DELETE n RETURN n$$) AS (a agtype); a ----------------------------------------------------------------- {"id": 844424930131997, "label": "v", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); a --- (0 rows) --Test 14: SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->(n)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$CREATE (:v)-[:e]->(:v)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n)-[e]->(m) DETACH DELETE n CREATE (m)-[:e2]->(:v) RETURN e$$) AS (a agtype); ERROR: vertex assigned to variable m was deleted --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) DETACH DELETE n RETURN n$$) AS (a agtype); a ----------------------------------------------------------------- {"id": 844424930131998, "label": "v", "properties": {}}::vertex {"id": 844424930131999, "label": "v", "properties": {}}::vertex {"id": 844424930132000, "label": "v", "properties": {}}::vertex (3 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); a --- (0 rows) --Test 15: SELECT * FROM cypher('cypher_delete', $$CREATE (:v)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n) SET n.i = 0 DELETE n RETURN n$$) AS (a agtype); a ----------------------------------------------------------------------- {"id": 844424930132001, "label": "v", "properties": {"i": 0}}::vertex (1 row) --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); a --- (0 rows) --Test 16: SELECT * FROM cypher('cypher_delete', $$CREATE (:v)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n SET n.i = 0 RETURN n$$) AS (a agtype); a ----------------------------------------------------------------------- {"id": 844424930132002, "label": "v", "properties": {"i": 0}}::vertex (1 row) --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); a --- (0 rows) --Test 17: SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->(:v)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n)-[e]->(m) DETACH DELETE n SET e.i = 1 RETURN e$$) AS (a agtype); a ------------------------------------------------------------------------------------------------------------------------------ {"id": 1125899906842641, "label": "e", "end_id": 844424930132004, "start_id": 844424930132003, "properties": {"i": 1}}::edge (1 row) --Cleanup --Note: Expect 1 vertex SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n RETURN n$$) AS (a agtype); a ----------------------------------------------------------------- {"id": 844424930132004, "label": "v", "properties": {}}::vertex (1 row) --Test 18: SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->(:v)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n)-[e]->(m) SET e.i = 1 DETACH DELETE n RETURN e$$) AS (a agtype); a ------------------------------------------------------------------------------------------------------------------------------ {"id": 1125899906842642, "label": "e", "end_id": 844424930132006, "start_id": 844424930132005, "properties": {"i": 1}}::edge (1 row) --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n RETURN n$$) AS (a agtype); a ----------------------------------------------------------------- {"id": 844424930132006, "label": "v", "properties": {}}::vertex (1 row) --Test 19: SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH (n) DELETE n CREATE (n)-[:e]->(:v) RETURN n$$) AS (a agtype); ERROR: vertex assigned to variable n was deleted --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n RETURN n$$) AS (a agtype); a ----------------------------------------------------------------- {"id": 844424930132007, "label": "v", "properties": {}}::vertex (1 row) --Test 20 Undefined Reference: SELECT * FROM cypher('cypher_delete', $$MATCH (n) DELETE m RETURN n$$) AS (a agtype); ERROR: undefined reference to variable m in DELETE clause LINE 1: ...* FROM cypher('cypher_delete', $$MATCH (n) DELETE m RETURN n... ^ --Test 21 Prepared Statements SELECT * FROM cypher('cypher_delete', $$CREATE (v:v)$$) AS (a agtype); a --- (0 rows) PREPARE d AS SELECT * FROM cypher('cypher_delete', $$MATCH (v) DELETE (v) RETURN v$$) AS (a agtype); EXECUTE d; a ----------------------------------------------------------------- {"id": 844424930132008, "label": "v", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_delete', $$CREATE (v:v)$$) AS (a agtype); a --- (0 rows) EXECUTE d; a ----------------------------------------------------------------- {"id": 844424930132009, "label": "v", "properties": {}}::vertex (1 row) --Test 22 pl/pgsql Functions SELECT * FROM cypher('cypher_delete', $$CREATE (v:v)$$) AS (a agtype); a --- (0 rows) CREATE FUNCTION delete_test() RETURNS TABLE(vertex agtype) LANGUAGE plpgsql VOLATILE AS $BODY$ BEGIN RETURN QUERY SELECT * FROM cypher('cypher_delete', $$MATCH (v) DELETE (v) RETURN v$$) AS (a agtype); END $BODY$; SELECT delete_test(); delete_test ----------------------------------------------------------------- {"id": 844424930132010, "label": "v", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_delete', $$CREATE (v:v)$$) AS (a agtype); a --- (0 rows) SELECT delete_test(); delete_test ----------------------------------------------------------------- {"id": 844424930132011, "label": "v", "properties": {}}::vertex (1 row) -- Clean Up SELECT * FROM cypher('cypher_delete', $$MATCH(n) DETACH DELETE n RETURN n$$) AS (a agtype); a --- (0 rows) --Test 23 SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->()$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e2]->()$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); a ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [{"id": 844424930132012, "label": "v", "properties": {}}::vertex, {"id": 1125899906842643, "label": "e", "end_id": 281474976710657, "start_id": 844424930132012, "properties": {}}::edge, {"id": 281474976710657, "label": "", "properties": {}}::vertex]::path [{"id": 844424930132013, "label": "v", "properties": {}}::vertex, {"id": 2251799813685249, "label": "e2", "end_id": 281474976710658, "start_id": 844424930132013, "properties": {}}::edge, {"id": 281474976710658, "label": "", "properties": {}}::vertex]::path (2 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n)-[e]->(m) DELETE e$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); a --- (0 rows) -- Clean Up SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n RETURN n$$) AS (a agtype); a ----------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {}}::vertex {"id": 281474976710658, "label": "", "properties": {}}::vertex {"id": 844424930132012, "label": "v", "properties": {}}::vertex {"id": 844424930132013, "label": "v", "properties": {}}::vertex (4 rows) --Test 24 SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->()$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e2]->()$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); a ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [{"id": 844424930132014, "label": "v", "properties": {}}::vertex, {"id": 1125899906842644, "label": "e", "end_id": 281474976710659, "start_id": 844424930132014, "properties": {}}::edge, {"id": 281474976710659, "label": "", "properties": {}}::vertex]::path [{"id": 844424930132015, "label": "v", "properties": {}}::vertex, {"id": 2251799813685250, "label": "e2", "end_id": 281474976710660, "start_id": 844424930132015, "properties": {}}::edge, {"id": 281474976710660, "label": "", "properties": {}}::vertex]::path (2 rows) SELECT * FROM cypher('cypher_delete', $$MATCH(n)-[]->() DETACH DELETE n$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_delete', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); a --- (0 rows) -- Clean Up SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n RETURN n$$) AS (a agtype); a ---------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {}}::vertex {"id": 281474976710660, "label": "", "properties": {}}::vertex (2 rows) -- test DELETE in transaction block SELECT * FROM cypher('cypher_delete', $$CREATE (u:vertices) RETURN u $$) AS (result agtype); result ------------------------------------------------------------------------- {"id": 2533274790395905, "label": "vertices", "properties": {}}::vertex (1 row) BEGIN; SELECT * FROM cypher('cypher_delete', $$MATCH (u:vertices) RETURN u $$) AS (result agtype); result ------------------------------------------------------------------------- {"id": 2533274790395905, "label": "vertices", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_delete', $$MATCH (u:vertices) DELETE u RETURN u $$) AS (result agtype); result ------------------------------------------------------------------------- {"id": 2533274790395905, "label": "vertices", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_delete', $$MATCH (u:vertices) RETURN u $$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('cypher_delete', $$CREATE (u:vertices) RETURN u $$) AS (result agtype); result ------------------------------------------------------------------------- {"id": 2533274790395906, "label": "vertices", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_delete', $$MATCH (u:vertices) RETURN u $$) AS (result agtype); result ------------------------------------------------------------------------- {"id": 2533274790395906, "label": "vertices", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_delete', $$MATCH (u:vertices) DELETE u RETURN u $$) AS (result agtype); result ------------------------------------------------------------------------- {"id": 2533274790395906, "label": "vertices", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_delete', $$MATCH (u:vertices) RETURN u $$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('cypher_delete', $$CREATE (u:vertices) RETURN u $$) AS (result agtype); result ------------------------------------------------------------------------- {"id": 2533274790395907, "label": "vertices", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_delete', $$MATCH (u:vertices) RETURN u $$) AS (result agtype); result ------------------------------------------------------------------------- {"id": 2533274790395907, "label": "vertices", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_delete', $$MATCH (u:vertices) DELETE u SET u.i = 1 RETURN u $$) AS (result agtype); result ------------------------------------------------------------------------------- {"id": 2533274790395907, "label": "vertices", "properties": {"i": 1}}::vertex (1 row) SELECT * FROM cypher('cypher_delete', $$MATCH (u:vertices) RETURN u $$) AS (result agtype); result -------- (0 rows) END; SELECT * FROM cypher('cypher_delete', $$MATCH (u:vertices) RETURN u $$) AS (result agtype); result -------- (0 rows) -- -- Detach Delete -- SELECT create_graph('detach_delete'); NOTICE: graph "detach_delete" has been created create_graph -------------- (1 row) SELECT * FROM cypher('detach_delete', $$ CREATE (x:Label3{name:'x', delete: true}), (y:Label3{name:'y', delete: true}), (a:Label1{name:'a', delete: true}), (b:Label5{name:'b'}), (c:Label5{name:'c'}), (d:Label5{name:'d'}), (m:Label7{name:'m', delete: true}), (n:Label2{name:'n'}), (p:Label2{name:'p'}), (q:Label2{name:'q'}), (a)-[:rel1{name:'ab'}]->(b), (c)-[:rel2{name:'cd'}]->(d), (n)-[:rel3{name:'nm'}]->(m), (a)-[:rel4{name:'am'}]->(m), (p)-[:rel5{name:'pq'}]->(q) $$ ) as (a agtype); a --- (0 rows) -- no vertices or edges are deleted (error is expected) SELECT * FROM cypher('detach_delete', $$ MATCH (x:Label1), (y:Label3), (z:Label7) DELETE x, y, z RETURN 1 $$) as (a agtype); ERROR: Cannot delete a vertex that has edge(s). Delete the edge(s) first, or try DETACH DELETE. SELECT * FROM cypher('detach_delete', $$ MATCH (v) RETURN v.name $$) as (vname agtype); vname ------- "x" "y" "a" "b" "c" "d" "m" "n" "p" "q" (10 rows) SELECT * FROM cypher('detach_delete', $$ MATCH ()-[e]->() RETURN e.name $$) as (ename agtype); ename ------- "ab" "cd" "am" "nm" "pq" (5 rows) -- x, y, a, m, ab, nm, am are deleted SELECT * FROM cypher('detach_delete', $$ MATCH (x:Label1), (y:Label3), (z:Label7) DETACH DELETE x, y, z RETURN 1 $$) as (a agtype); a --- 1 1 (2 rows) SELECT * FROM cypher('detach_delete', $$ MATCH (v) RETURN v.name $$) as (vname agtype); vname ------- "b" "c" "d" "n" "p" "q" (6 rows) SELECT * FROM cypher('detach_delete', $$ MATCH ()-[e]->() RETURN e.name $$) as (ename agtype); ename ------- "cd" "pq" (2 rows) SELECT drop_graph('detach_delete', true); NOTICE: drop cascades to 12 other objects DETAIL: drop cascades to table detach_delete._ag_label_vertex drop cascades to table detach_delete._ag_label_edge drop cascades to table detach_delete."Label3" drop cascades to table detach_delete."Label1" drop cascades to table detach_delete."Label5" drop cascades to table detach_delete."Label7" drop cascades to table detach_delete."Label2" drop cascades to table detach_delete.rel1 drop cascades to table detach_delete.rel2 drop cascades to table detach_delete.rel3 drop cascades to table detach_delete.rel4 drop cascades to table detach_delete.rel5 NOTICE: graph "detach_delete" has been dropped drop_graph ------------ (1 row) -- -- SET followed by DELETE -- SELECT create_graph('setdelete'); NOTICE: graph "setdelete" has been created create_graph -------------- (1 row) -- MATCH (x) SET x DELETE x SELECT * FROM cypher('setdelete', $$ CREATE (:A), (:A), (:A) $$) as ("CREATE" agtype); CREATE -------- (0 rows) SELECT * FROM cypher('setdelete', $$ MATCH (x:A) SET x.age = 24 DELETE x $$) as ("SET + DELETE" agtype); SET + DELETE -------------- (0 rows) SELECT id as "expected: 0 rows" FROM setdelete._ag_label_vertex; expected: 0 rows ------------------ (0 rows) -- MATCH (n)-[e]->(m) SET e DETACH DELETE n SELECT * FROM cypher('setdelete', $$ CREATE (:n)-[:e]->(:m), (:n)-[:e]->(:m) $$) AS ("CREATE" agtype); CREATE -------- (0 rows) SELECT * FROM cypher('setdelete', $$ MATCH (n)-[e]->(m) SET e.i = 1 DETACH DELETE n RETURN id(m) $$) AS ("SET + DETACH DELETE" agtype); SET + DETACH DELETE --------------------- 1688849860263937 1688849860263938 (2 rows) SELECT id as "expected: 2 rows (m vertices)" FROM setdelete._ag_label_vertex; expected: 2 rows (m vertices) ------------------------------- 1688849860263937 1688849860263938 (2 rows) SELECT id as "expected: 0 rows" FROM setdelete._ag_label_edge; expected: 0 rows ------------------ (0 rows) -- clean up SELECT drop_graph('setdelete', true); NOTICE: drop cascades to 6 other objects DETAIL: drop cascades to table setdelete._ag_label_vertex drop cascades to table setdelete._ag_label_edge drop cascades to table setdelete."A" drop cascades to table setdelete.n drop cascades to table setdelete.e drop cascades to table setdelete.m NOTICE: graph "setdelete" has been dropped drop_graph ------------ (1 row) -- -- Clean up -- DROP FUNCTION delete_test; SELECT drop_graph('cypher_delete', true); NOTICE: drop cascades to 6 other objects DETAIL: drop cascades to table cypher_delete._ag_label_vertex drop cascades to table cypher_delete._ag_label_edge drop cascades to table cypher_delete.v drop cascades to table cypher_delete.e drop cascades to table cypher_delete.e2 drop cascades to table cypher_delete.vertices NOTICE: graph "cypher_delete" has been dropped drop_graph ------------ (1 row) -- -- End -- age-PG16-v1.5.0-rc0/regress/expected/cypher_match.out000066400000000000000000006242541454606241200222670ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher_match'); NOTICE: graph "cypher_match" has been created create_graph -------------- (1 row) SELECT * FROM cypher('cypher_match', $$CREATE (:v)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_match', $$CREATE (:v {i: 0})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_match', $$CREATE (:v {i: 1})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_match', $$MATCH (n:v) RETURN n$$) AS (n agtype); n ----------------------------------------------------------------------- {"id": 844424930131969, "label": "v", "properties": {}}::vertex {"id": 844424930131970, "label": "v", "properties": {"i": 0}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 1}}::vertex (3 rows) SELECT * FROM cypher('cypher_match', $$MATCH (n:v) RETURN n.i$$) AS (i agtype); i --- 0 1 (3 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (n:v) WHERE n.i > 0 RETURN n.i $$) AS (i agtype); i --- 1 (1 row) --Directed Paths SELECT * FROM cypher('cypher_match', $$ CREATE (:v1 {id:'initial'})-[:e1]->(:v1 {id:'middle'})-[:e1]->(:v1 {id:'end'}) $$) AS (a agtype); a --- (0 rows) --Undirected Path Tests SELECT * FROM cypher('cypher_match', $$ MATCH p=(:v1)-[:e1]-(:v1)-[:e1]-(:v1) RETURN p $$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex]::path [{"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex]::path (2 rows) SELECT * FROM cypher('cypher_match', $$ MATCH p=(a:v1)-[]-()-[]-() RETURN a $$) AS (a agtype); a ---------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex (2 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]-()-[]-(a:v1) RETURN a $$) AS (a agtype); a ---------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex (2 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]-(a:v1)-[]-() RETURN a $$) AS (a agtype); a --------------------------------------------------------------------------------- {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex (2 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[b:e1]-()-[]-() RETURN b $$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge (2 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)-[]->(), ()-[]->(a) RETURN a $$) AS (a agtype); a --------------------------------------------------------------------------------- {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH p=()-[e]-() RETURN e $$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge (4 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (:v1)-[e]-() RETURN e $$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge (4 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (:v1)-[e]-(:v1) RETURN e $$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge (4 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]-()-[e]-(:v1) RETURN e $$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge (2 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]-()-[]-(:v1) RETURN a $$) AS (a agtype); a ---------------------------------------------------------------------------------- {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex (2 rows) -- Right Path Test SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)-[:e1]->(b:v1)-[:e1]->(c:v1) RETURN a, b, c $$) AS (a agtype, b agtype, c agtype); a | b | c ----------------------------------------------------------------------------------+---------------------------------------------------------------------------------+------------------------------------------------------------------------------ {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex | {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex | {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH p=(a:v1)-[]-()-[]->() RETURN a $$) AS (a agtype); a ---------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH p=(a:v1)-[]->()-[]-() RETURN a $$) AS (a agtype); a ---------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]-()-[]->(a:v1) RETURN a $$) AS (a agtype); a ------------------------------------------------------------------------------ {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]-(a:v1)-[]->() RETURN a $$) AS (a agtype); a --------------------------------------------------------------------------------- {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[b:e1]-()-[]->() RETURN b $$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH (:v1)-[e]->() RETURN e $$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge (2 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[e]->(:v1) RETURN e $$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge (2 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (:v1)-[e]->(:v1) RETURN e $$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge (2 rows) --Left Path Test SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)<-[:e1]-(b:v1)<-[:e1]-(c:v1) RETURN a, b, c $$) AS (a agtype, b agtype, c agtype); a | b | c ------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------- {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex | {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex | {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH p=(a:v1)<-[]-()-[]-() RETURN a $$) AS (a agtype); a ------------------------------------------------------------------------------ {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH p=(a:v1)-[]-()<-[]-() RETURN a $$) AS (a agtype); a ------------------------------------------------------------------------------ {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH ()<-[]-()-[]-(a:v1) RETURN a $$) AS (a agtype); a ---------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH ()<-[]-(a:v1)-[]-() RETURN a $$) AS (a agtype); a --------------------------------------------------------------------------------- {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH ()<-[b:e1]-()-[]-() RETURN b $$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH (:v1)<-[e]-(:v1) RETURN e $$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge (2 rows) --Divergent Path Tests SELECT * FROM cypher('cypher_match', $$ CREATE (:v2 {id:'initial'})<-[:e2]-(:v2 {id:'middle'})-[:e2]->(:v2 {id:'end'}) $$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()<-[]-(n:v2)-[]->() MATCH p=()-[]->(n) RETURN p $$) AS (i agtype); i --- (0 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()<-[]-(n:v2)-[]->() MATCH p=(n)-[]->() RETURN p $$) AS (i agtype); i ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex]::path [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex]::path (4 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]-(n:v2) RETURN n $$) AS (i agtype); i ---------------------------------------------------------------------------------- {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex {"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex {"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex (4 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (:v2)<-[]-(:v2)-[]->(:v2) MATCH p=()-[]->() RETURN p $$) AS (i agtype); i ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex]::path [{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex]::path [{"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex]::path [{"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex]::path [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex]::path [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex]::path (8 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()<-[]-(:v2)-[]->() MATCH p=()-[]->() RETURN p $$) AS (i agtype); i ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex]::path [{"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex]::path [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex]::path [{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex]::path [{"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex]::path [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex]::path (8 rows) --Convergent Path Tests SELECT * FROM cypher('cypher_match', $$ CREATE (:v3 {id:'initial'})-[:e3]->(:v3 {id:'middle'})<-[:e3]-(:v3 {id:'end'}) $$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[b:e1]->() RETURN b $$) AS (i agtype); i --------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge (2 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (:v3)-[b:e3]->() RETURN b $$) AS (i agtype); i --------------------------------------------------------------------------------------------------------------------------- {"id": 2533274790395906, "label": "e3", "end_id": 2251799813685250, "start_id": 2251799813685249, "properties": {}}::edge {"id": 2533274790395905, "label": "e3", "end_id": 2251799813685250, "start_id": 2251799813685251, "properties": {}}::edge (2 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]->(n:v1)<-[]-() MATCH p=(n)<-[]-() RETURN p $$) AS (i agtype); i --- (0 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]->(n:v1)<-[]-() MATCH p=()-[]->(n) RETURN p $$) AS (i agtype); i --- (0 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]->(n:v1)<-[]-() MATCH p=(n)-[]->() RETURN p $$) AS (i agtype); i --- (0 rows) SELECT * FROM cypher('cypher_match', $$ MATCH con_path=(a)-[]->()<-[]-() where a.id = 'initial' RETURN con_path $$) AS (con_path agtype); con_path --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 2251799813685249, "label": "v3", "properties": {"id": "initial"}}::vertex, {"id": 2533274790395906, "label": "e3", "end_id": 2251799813685250, "start_id": 2251799813685249, "properties": {}}::edge, {"id": 2251799813685250, "label": "v3", "properties": {"id": "middle"}}::vertex, {"id": 2533274790395905, "label": "e3", "end_id": 2251799813685250, "start_id": 2251799813685251, "properties": {}}::edge, {"id": 2251799813685251, "label": "v3", "properties": {"id": "end"}}::vertex]::path (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH div_path=(b)<-[]-()-[]->() where b.id = 'initial' RETURN div_path $$) AS (div_path agtype); div_path --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex]::path (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]->(:v3)<-[]-(b) where a.id = 'initial' RETURN b $$) AS (con_path agtype); con_path ------------------------------------------------------------------------------ {"id": 2251799813685251, "label": "v3", "properties": {"id": "end"}}::vertex (1 row) --Patterns SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1), p=(a)-[]-()-[]-() where a.id = 'initial' RETURN p $$) AS (p agtype); p --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex]::path (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH con_path=(a)-[]->()<-[]-(), div_path=(b)<-[]-()-[]->() where a.id = 'initial' and b.id = 'initial' RETURN con_path, div_path $$) AS (con_path agtype, div_path agtype); con_path | div_path ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 2251799813685249, "label": "v3", "properties": {"id": "initial"}}::vertex, {"id": 2533274790395906, "label": "e3", "end_id": 2251799813685250, "start_id": 2251799813685249, "properties": {}}::edge, {"id": 2251799813685250, "label": "v3", "properties": {"id": "middle"}}::vertex, {"id": 2533274790395905, "label": "e3", "end_id": 2251799813685250, "start_id": 2251799813685251, "properties": {}}::edge, {"id": 2251799813685251, "label": "v3", "properties": {"id": "end"}}::vertex]::path | [{"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex]::path (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH (a:v), p=()-[]->()-[]->() RETURN a.i, p $$) AS (i agtype, p agtype); i | p ---+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | [{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex]::path 0 | [{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex]::path 1 | [{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex]::path (3 rows) --Multiple Match Clauses SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1) where a.id = 'initial' MATCH p=(a)-[]-()-[]-() RETURN p $$) AS (p agtype); p --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex]::path (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH (a:v) MATCH p=()-[]->()-[]->() RETURN a.i, p $$) AS (i agtype, p agtype); i | p ---+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | [{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex]::path 0 | [{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex]::path 1 | [{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex]::path (3 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (a:v) MATCH (b:v1)-[]-(c) RETURN a.i, b.id, c.id $$) AS (i agtype, b agtype, c agtype); i | b | c ---+-----------+----------- | "end" | "middle" 0 | "end" | "middle" 1 | "end" | "middle" | "middle" | "end" 0 | "middle" | "end" 1 | "middle" | "end" | "middle" | "initial" 0 | "middle" | "initial" 1 | "middle" | "initial" | "initial" | "middle" 0 | "initial" | "middle" 1 | "initial" | "middle" (12 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (a:v) MATCH (:v1)-[]-(c) RETURN a.i, c.id $$) AS (i agtype, c agtype); i | c ---+----------- | "middle" 0 | "middle" 1 | "middle" | "end" 0 | "end" 1 | "end" | "initial" 0 | "initial" 1 | "initial" | "middle" 0 | "middle" 1 | "middle" (12 rows) -- -- Property constraints -- SELECT * FROM cypher('cypher_match', $$CREATE ({string_key: "test", int_key: 1, float_key: 3.14, map_key: {key: "value"}, list_key: [1, 2, 3]}) $$) AS (p agtype); p --- (0 rows) SELECT * FROM cypher('cypher_match', $$CREATE ({lst: [1, NULL, 3.14, "string", {key: "value"}, []]}) $$) AS (p agtype); p --- (0 rows) SELECT * FROM cypher('cypher_match', $$MATCH (n {string_key: NULL}) RETURN n $$) AS (n agtype); n --- (0 rows) SELECT * FROM cypher('cypher_match', $$MATCH (n {string_key: "wrong value"}) RETURN n $$) AS (n agtype); n --- (0 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (n {string_key: "test", int_key: 1, float_key: 3.14, map_key: {key: "value"}, list_key: [1, 2, 3]}) RETURN n $$) AS (p agtype); p ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"int_key": 1, "map_key": {"key": "value"}, "list_key": [1, 2, 3], "float_key": 3.14, "string_key": "test"}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$MATCH (n {string_key: "test"}) RETURN n $$) AS (p agtype); p ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"int_key": 1, "map_key": {"key": "value"}, "list_key": [1, 2, 3], "float_key": 3.14, "string_key": "test"}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$MATCH (n {lst: [1, NULL, 3.14, "string", {key: "value"}, []]}) RETURN n $$) AS (p agtype); p ---------------------------------------------------------------------------------------------------------------------- {"id": 281474976710658, "label": "", "properties": {"lst": [1, null, 3.14, "string", {"key": "value"}, []]}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$MATCH (n {lst: [1, NULL, 3.14, "string", {key: "value"}, [], "extra value"]}) RETURN n $$) AS (p agtype); p --- (0 rows) -- -- Prepared Statement Property Constraint -- PREPARE property_ps(agtype) AS SELECT * FROM cypher('cypher_match', $$MATCH (n $props) RETURN n $$, $1) AS (p agtype); EXECUTE property_ps(agtype_build_map('props', agtype_build_map('string_key', 'test'))); p ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"int_key": 1, "map_key": {"key": "value"}, "list_key": [1, 2, 3], "float_key": 3.14, "string_key": "test"}}::vertex (1 row) -- need a following RETURN clause (should fail) SELECT * FROM cypher('cypher_match', $$MATCH (n:v)$$) AS (a agtype); ERROR: syntax error at end of input LINE 1: SELECT * FROM cypher('cypher_match', $$MATCH (n:v)$$) AS (a ... ^ --invalid variable reuse, these should fail SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]-()-[]-(a:v1) RETURN a $$) AS (a agtype); ERROR: multiple labels for variable 'a' are not supported LINE 2: MATCH (a)-[]-()-[]-(a:v1) RETURN a ^ SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]-(a:v2)-[]-(a) RETURN a $$) AS (a agtype); ERROR: multiple labels for variable 'a' are not supported LINE 2: MATCH (a)-[]-(a:v2)-[]-(a) RETURN a ^ SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]-(a:v1) RETURN a $$) AS (a agtype); ERROR: multiple labels for variable 'a' are not supported LINE 2: MATCH (a)-[]-(a:v1) RETURN a ^ SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]-(a)-[]-(a:v1) RETURN a $$) AS (a agtype); ERROR: multiple labels for variable 'a' are not supported LINE 2: MATCH (a)-[]-(a)-[]-(a:v1) RETURN a ^ SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]-(a)-[]-(a:invalid_label) RETURN a $$) AS (a agtype); ERROR: multiple labels for variable 'a' are not supported LINE 2: MATCH (a)-[]-(a)-[]-(a:invalid_label) RETURN a ^ SELECT * FROM cypher('cypher_match', $$ MATCH (a) MATCH (a:v1) RETURN a $$) AS (a agtype); ERROR: multiple labels for variable 'a' are not supported LINE 2: MATCH (a) MATCH (a:v1) RETURN a ^ SELECT * FROM cypher('cypher_match', $$ MATCH (a) MATCH (a:invalid_label) RETURN a $$) AS (a agtype); ERROR: multiple labels for variable 'a' are not supported LINE 2: MATCH (a) MATCH (a:invalid_label) RETURN a ^ SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)-[]-()-[a]-() RETURN a $$) AS (a agtype); ERROR: variable 'a' is for a vertex LINE 2: MATCH (a:v1)-[]-()-[a]-() RETURN a ^ -- valid variable reuse for edge labels across clauses SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0]->() MATCH ()-[r0]->() RETURN r0 $$) AS (r0 agtype); r0 --------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge {"id": 2533274790395906, "label": "e3", "end_id": 2251799813685250, "start_id": 2251799813685249, "properties": {}}::edge {"id": 2533274790395905, "label": "e3", "end_id": 2251799813685250, "start_id": 2251799813685251, "properties": {}}::edge (6 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e1]->() MATCH ()-[r0:e1]->() RETURN r0 $$) AS (r0 agtype); r0 --------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge (2 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e2]->() MATCH ()-[r0:e2]->() RETURN r0 $$) AS (r0 agtype); r0 --------------------------------------------------------------------------------------------------------------------------- {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge (2 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e1]->()-[r1]->() RETURN r0,r1 $$) AS (r0 agtype, r1 agtype); r0 | r1 ---------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge | {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH p0=()-[:e1]->() MATCH p1=()-[:e2]->() RETURN p1 $$) AS (p1 agtype); p1 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex]::path [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex]::path (4 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e1]->()-[r1]->() MATCH ()-[r0:e1]->()-[r1]->() RETURN r0,r1 $$) AS (r0 agtype, r1 agtype); r0 | r1 ---------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge | {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]->() MATCH ()-[r1:e2]->() RETURN r1 $$) AS (r1 agtype); r1 --------------------------------------------------------------------------------------------------------------------------- {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge (12 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e1]->() MATCH ()-[r1:e2]->() RETURN r0,r1 $$) AS (r0 agtype, r1 agtype); r0 | r1 ---------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge | {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge | {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge | {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge | {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge (4 rows) -- valid variable reuse for vertex labels across clauses SELECT * FROM cypher('cypher_match', $$ MATCH (r1:invalid), (r1:invalid) return r1 $$) AS (r1 agtype); r1 ---- (0 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (r1), (r1) return r1 $$) AS (r1 agtype); r1 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"int_key": 1, "map_key": {"key": "value"}, "list_key": [1, 2, 3], "float_key": 3.14, "string_key": "test"}}::vertex {"id": 281474976710658, "label": "", "properties": {"lst": [1, null, 3.14, "string", {"key": "value"}, []]}}::vertex {"id": 844424930131969, "label": "v", "properties": {}}::vertex {"id": 844424930131970, "label": "v", "properties": {"i": 0}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 1}}::vertex {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex {"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex {"id": 2251799813685249, "label": "v3", "properties": {"id": "initial"}}::vertex {"id": 2251799813685250, "label": "v3", "properties": {"id": "middle"}}::vertex {"id": 2251799813685251, "label": "v3", "properties": {"id": "end"}}::vertex (14 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (r1:invalid), (r1) return r1 $$) AS (r1 agtype); r1 ---- (0 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (r1:invalid), (r1), (r1), (r1:invalid) return r1 $$) AS (r1 agtype); r1 ---- (0 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (r1:invalid)-[]->(r1)-[]->(r1:invalid)-[]->(r1) return r1 $$) AS (r1 agtype); r1 ---- (0 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (r1:invalid)-[]->()-[]->()-[]->(r1:invalid) return r1 $$) AS (r1 agtype); r1 ---- (0 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e1]->()-[r1]->() MATCH ()-[r0:e1]->()-[r0]->() RETURN r0 $$) AS (r0 agtype); r0 ---- (0 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e1]->() MATCH ()-[r0]->() RETURN r0 $$) AS (r0 agtype); r0 --------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge (2 rows) -- invalid variable reuse for vertex SELECT * FROM cypher('cypher_match', $$ MATCH (r1:invalid)-[]->(r1)-[]->(r1)-[]->(r1:invalids) return r1 $$) AS (r1 agtype); ERROR: multiple labels for variable 'r1' are not supported LINE 2: ... MATCH (r1:invalid)-[]->(r1)-[]->(r1)-[]->(r1:invalid... ^ SELECT * FROM cypher('cypher_match', $$ MATCH (r1:invalid)-[]->(r1)-[]->(r1)-[]->(r1)-[r1]->() return r1 $$) AS (r1 agtype); ERROR: variable 'r1' is for a vertex LINE 2: ... MATCH (r1:invalid)-[]->(r1)-[]->(r1)-[]->(r1)-[r1]->() r... ^ -- invalid variable reuse for labels across clauses SELECT * FROM cypher('cypher_match', $$ MATCH (r1:e1), (r1:e2) return r1 $$) AS (r1 agtype); ERROR: multiple labels for variable 'r1' are not supported LINE 2: MATCH (r1:e1), (r1:e2) return r1 ^ SELECT * FROM cypher('cypher_match', $$ MATCH (r1:invalid), (r1:e2) return r1 $$) AS (r1 agtype); ERROR: multiple labels for variable 'r1' are not supported LINE 2: MATCH (r1:invalid), (r1:e2) return r1 ^ SELECT * FROM cypher('cypher_match', $$ MATCH (r1:e1), (r1:invalid) return r1 $$) AS (r1 agtype); ERROR: multiple labels for variable 'r1' are not supported LINE 2: MATCH (r1:e1), (r1:invalid) return r1 ^ SELECT * FROM cypher('cypher_match', $$ MATCH (r1:e1), (r1), (r1:invalid) return r1 $$) AS (r1 agtype); ERROR: multiple labels for variable 'r1' are not supported LINE 2: MATCH (r1:e1), (r1), (r1:invalid) return r1 ^ SELECT * FROM cypher('cypher_match', $$ MATCH (r0)-[r0]->() MATCH ()-[]->() RETURN r0 $$) AS (r0 agtype); ERROR: variable 'r0' is for a vertex LINE 2: MATCH (r0)-[r0]->() MATCH ()-[]->() RETURN r0 ^ SELECT * FROM cypher('cypher_match', $$ MATCH (r0)-[]->() MATCH ()-[r0]->() RETURN r0 $$) AS (r0 agtype); ERROR: variable 'r0' is for a vertex LINE 2: MATCH (r0)-[]->() MATCH ()-[r0]->() RETURN r0 ^ SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0]->() MATCH ()-[]->(r0) RETURN r0 $$) AS (r0 agtype); ERROR: variable 'r0' is for an edge LINE 2: MATCH ()-[r0]->() MATCH ()-[]->(r0) RETURN r0 ^ SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e1]->() MATCH ()-[r0:e2]->() RETURN r0 $$) AS (r0 agtype); ERROR: multiple labels for variable 'r0' are not supported LINE 2: MATCH ()-[r0:e1]->() MATCH ()-[r0:e2]->() RETURN r0 ^ SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0]->() MATCH ()-[r0:e2]->() RETURN r0 $$) AS (r0 agtype); ERROR: multiple labels for variable 'r0' are not supported LINE 2: MATCH ()-[r0]->() MATCH ()-[r0:e2]->() RETURN r0 ^ SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e1]->() MATCH ()-[r0:e2]->() RETURN r0 $$) AS (r0 agtype); ERROR: multiple labels for variable 'r0' are not supported LINE 2: MATCH ()-[r0:e1]->() MATCH ()-[r0:e2]->() RETURN r0 ^ SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e1]->()-[r0]->() MATCH ()-[r0:e2]->() RETURN r0 $$) AS (r0 agtype); ERROR: duplicate edge variable 'r0' within a clause LINE 2: MATCH ()-[r0:e1]->()-[r0]->() MATCH ()-[r0:e2]->() R... ^ SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e1]->()-[r1]->() MATCH ()-[r1:e1]->()-[r0]->() RETURN r0 $$) AS (r0 agtype); ERROR: multiple labels for variable 'r1' are not supported LINE 2: MATCH ()-[r0:e1]->()-[r1]->() MATCH ()-[r1:e1]->()-[... ^ -- Labels that don't exist but do match SELECT * FROM cypher('cypher_match', $$ MATCH (r0)-[r1:related]->() MATCH ()-[r1:related]->() RETURN r0 $$) AS (r0 agtype); r0 ---- (0 rows) -- Labels that don't exist and don't match SELECT * FROM cypher('cypher_match', $$ MATCH (r0)-[r1]->() MATCH ()-[r1:related]->() RETURN r0 $$) AS (r0 agtype); ERROR: multiple labels for variable 'r1' are not supported LINE 2: MATCH (r0)-[r1]->() MATCH ()-[r1:related]->() RETURN... ^ SELECT * FROM cypher('cypher_match', $$ MATCH (r0)-[r1:related]->() MATCH ()-[r1:relateds]->() RETURN r0 $$) AS (r0 agtype); ERROR: multiple labels for variable 'r1' are not supported LINE 2: MATCH (r0)-[r1:related]->() MATCH ()-[r1:relateds]->... ^ --Valid variable reuse, although why would you want to do it this way? SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)-[]-()-[]-(a {id:'will_not_fail'}) RETURN a $$) AS (a agtype); a --- (0 rows) --Incorrect Labels SELECT * FROM cypher('cypher_match', $$MATCH (n)-[:v]-() RETURN n$$) AS (n agtype); n --- (0 rows) SELECT * FROM cypher('cypher_match', $$MATCH (n)-[:emissing]-() RETURN n$$) AS (n agtype); n --- (0 rows) SELECT * FROM cypher('cypher_match', $$MATCH (n:e1)-[]-() RETURN n$$) AS (n agtype); n --- (0 rows) SELECT * FROM cypher('cypher_match', $$MATCH (n:vmissing)-[]-() RETURN n$$) AS (n agtype); n --- (0 rows) SELECT * FROM cypher('cypher_match', $$MATCH (:e1)-[r]-() RETURN r$$) AS (r agtype); r --- (0 rows) SELECT * FROM cypher('cypher_match', $$MATCH (:vmissing)-[r]-() RETURN r$$) AS (r agtype); r --- (0 rows) SELECT * FROM cypher('cypher_match', $$MATCH (n),(:e1) RETURN n$$) AS (n agtype); n --- (0 rows) SELECT * FROM cypher('cypher_match', $$MATCH (n),()-[:v]-() RETURN n$$) AS (n agtype); n --- (0 rows) -- -- Path of one vertex. This should select 14 -- SELECT * FROM cypher('cypher_match', $$ MATCH p=() RETURN p $$) AS (p agtype); p --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710657, "label": "", "properties": {"int_key": 1, "map_key": {"key": "value"}, "list_key": [1, 2, 3], "float_key": 3.14, "string_key": "test"}}::vertex]::path [{"id": 281474976710658, "label": "", "properties": {"lst": [1, null, 3.14, "string", {"key": "value"}, []]}}::vertex]::path [{"id": 844424930131969, "label": "v", "properties": {}}::vertex]::path [{"id": 844424930131970, "label": "v", "properties": {"i": 0}}::vertex]::path [{"id": 844424930131971, "label": "v", "properties": {"i": 1}}::vertex]::path [{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex]::path [{"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex]::path [{"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex]::path [{"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex]::path [{"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex]::path [{"id": 2251799813685249, "label": "v3", "properties": {"id": "initial"}}::vertex]::path [{"id": 2251799813685250, "label": "v3", "properties": {"id": "middle"}}::vertex]::path [{"id": 2251799813685251, "label": "v3", "properties": {"id": "end"}}::vertex]::path (14 rows) -- -- MATCH with WHERE EXISTS(pattern) -- SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); u | e | v ----------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex | {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge | {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex | {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge | {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex {"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex | {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge | {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex {"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex | {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge | {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex {"id": 2251799813685249, "label": "v3", "properties": {"id": "initial"}}::vertex | {"id": 2533274790395906, "label": "e3", "end_id": 2251799813685250, "start_id": 2251799813685249, "properties": {}}::edge | {"id": 2251799813685250, "label": "v3", "properties": {"id": "middle"}}::vertex {"id": 2251799813685251, "label": "v3", "properties": {"id": "end"}}::vertex | {"id": 2533274790395905, "label": "e3", "end_id": 2251799813685250, "start_id": 2251799813685251, "properties": {}}::edge | {"id": 2251799813685250, "label": "v3", "properties": {"id": "middle"}}::vertex (6 rows) SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((u)-[e]->(v)) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); u | e | v ----------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex | {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge | {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex | {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge | {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex {"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex | {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge | {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex {"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex | {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge | {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex {"id": 2251799813685249, "label": "v3", "properties": {"id": "initial"}}::vertex | {"id": 2533274790395906, "label": "e3", "end_id": 2251799813685250, "start_id": 2251799813685249, "properties": {}}::edge | {"id": 2251799813685250, "label": "v3", "properties": {"id": "middle"}}::vertex {"id": 2251799813685251, "label": "v3", "properties": {"id": "end"}}::vertex | {"id": 2533274790395905, "label": "e3", "end_id": 2251799813685250, "start_id": 2251799813685251, "properties": {}}::edge | {"id": 2251799813685250, "label": "v3", "properties": {"id": "middle"}}::vertex (6 rows) -- Property Constraint in EXISTS SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE EXISTS((u)-[]->({id: "middle"})) RETURN u $$) AS (u agtype); u ---------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex {"id": 2251799813685249, "label": "v3", "properties": {"id": "initial"}}::vertex {"id": 2251799813685251, "label": "v3", "properties": {"id": "end"}}::vertex (3 rows) SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE EXISTS((u)-[]->({id: "not a valid id"})) RETURN u $$) AS (u agtype); u --- (0 rows) SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE EXISTS((u)-[]->({id: NULL})) RETURN u $$) AS (u agtype); u --- (0 rows) -- Exists checks for a loop. There shouldn't be any. SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((u)-[e]->(u)) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); u | e | v ---+---+--- (0 rows) -- Create a loop SELECT * FROM cypher('cypher_match', $$ CREATE (u:loop {id:'initial'})-[:self]->(u) $$) AS (a agtype); a --- (0 rows) -- dump paths SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((u)-[e]->(v)) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); u | e | v ------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------ {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex | {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge | {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex | {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge | {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex {"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex | {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge | {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex {"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex | {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge | {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex {"id": 2251799813685249, "label": "v3", "properties": {"id": "initial"}}::vertex | {"id": 2533274790395906, "label": "e3", "end_id": 2251799813685250, "start_id": 2251799813685249, "properties": {}}::edge | {"id": 2251799813685250, "label": "v3", "properties": {"id": "middle"}}::vertex {"id": 2251799813685251, "label": "v3", "properties": {"id": "end"}}::vertex | {"id": 2533274790395905, "label": "e3", "end_id": 2251799813685250, "start_id": 2251799813685251, "properties": {}}::edge | {"id": 2251799813685250, "label": "v3", "properties": {"id": "middle"}}::vertex {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex | {"id": 3096224743817217, "label": "self", "end_id": 2814749767106561, "start_id": 2814749767106561, "properties": {}}::edge | {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex (7 rows) -- Exists checks for a loop. There should be one. SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((u)-[e]->(u)) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); u | e | v ------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------ {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex | {"id": 3096224743817217, "label": "self", "end_id": 2814749767106561, "start_id": 2814749767106561, "properties": {}}::edge | {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex (1 row) -- Exists checks for a loop. There should be one. SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((v)-[e]->(v)) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); u | e | v ------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------ {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex | {"id": 3096224743817217, "label": "self", "end_id": 2814749767106561, "start_id": 2814749767106561, "properties": {}}::edge | {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex (1 row) -- Multiple exists SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((u)) AND EXISTS((v)) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); u | e | v ------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------ {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex | {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge | {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex | {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge | {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex {"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex | {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge | {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex {"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex | {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge | {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex {"id": 2251799813685249, "label": "v3", "properties": {"id": "initial"}}::vertex | {"id": 2533274790395906, "label": "e3", "end_id": 2251799813685250, "start_id": 2251799813685249, "properties": {}}::edge | {"id": 2251799813685250, "label": "v3", "properties": {"id": "middle"}}::vertex {"id": 2251799813685251, "label": "v3", "properties": {"id": "end"}}::vertex | {"id": 2533274790395905, "label": "e3", "end_id": 2251799813685250, "start_id": 2251799813685251, "properties": {}}::edge | {"id": 2251799813685250, "label": "v3", "properties": {"id": "middle"}}::vertex {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex | {"id": 3096224743817217, "label": "self", "end_id": 2814749767106561, "start_id": 2814749767106561, "properties": {}}::edge | {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex (7 rows) SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((u)-[e]->(u)) AND EXISTS((v)-[e]->(v)) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); u | e | v ------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------ {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex | {"id": 3096224743817217, "label": "self", "end_id": 2814749767106561, "start_id": 2814749767106561, "properties": {}}::edge | {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex (1 row) -- Return exists(pattern) SELECT * FROM cypher('cypher_match', $$MATCH (u) RETURN EXISTS((u)-[]->()) $$) AS (exists agtype); exists -------- false false false false false true true false false true false true false true true (15 rows) SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) RETURN EXISTS((u)-[e]->(v)-[e]->(u))$$) AS (exists agtype); exists -------- false false false false false false false (7 rows) -- These should error -- Bad pattern SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((u)) AND EXISTS([e]) AND EXISTS((v)) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); ERROR: syntax error at or near "[" LINE 2: ...$$MATCH (u)-[e]->(v) WHERE EXISTS((u)) AND EXISTS([e]) AND E... ^ -- variable creation error SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((u)-[e]->(x)) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); ERROR: variable `x` does not exist LINE 2: $$MATCH (u)-[e]->(v) WHERE EXISTS((u)-[e]->(x)) RETURN u, e... ^ -- path variable not allowed in EXISTS SELECT * FROM cypher('cypher_match', $$MATCH p=(u)-[e]->(v) RETURN EXISTS((p)) $$) AS (exists agtype); ERROR: a path variable 'p' is not allowed here LINE 2: $$MATCH p=(u)-[e]->(v) RETURN EXISTS((p)) $$) ^ -- -- Tests for EXISTS(property) -- -- dump all vertices SELECT * FROM cypher('cypher_match', $$MATCH (u) RETURN u $$) AS (u agtype); u ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"int_key": 1, "map_key": {"key": "value"}, "list_key": [1, 2, 3], "float_key": 3.14, "string_key": "test"}}::vertex {"id": 281474976710658, "label": "", "properties": {"lst": [1, null, 3.14, "string", {"key": "value"}, []]}}::vertex {"id": 844424930131969, "label": "v", "properties": {}}::vertex {"id": 844424930131970, "label": "v", "properties": {"i": 0}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 1}}::vertex {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex {"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex {"id": 2251799813685249, "label": "v3", "properties": {"id": "initial"}}::vertex {"id": 2251799813685250, "label": "v3", "properties": {"id": "middle"}}::vertex {"id": 2251799813685251, "label": "v3", "properties": {"id": "end"}}::vertex {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex (15 rows) -- select vertices with id as a property SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE EXISTS(u.id) RETURN u $$) AS (u agtype); u ------------------------------------------------------------------------------------ {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex {"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex {"id": 2251799813685249, "label": "v3", "properties": {"id": "initial"}}::vertex {"id": 2251799813685250, "label": "v3", "properties": {"id": "middle"}}::vertex {"id": 2251799813685251, "label": "v3", "properties": {"id": "end"}}::vertex {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex (10 rows) -- select vertices without id as a property SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE NOT EXISTS(u.id) RETURN u $$) AS (u agtype); u ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"int_key": 1, "map_key": {"key": "value"}, "list_key": [1, 2, 3], "float_key": 3.14, "string_key": "test"}}::vertex {"id": 281474976710658, "label": "", "properties": {"lst": [1, null, 3.14, "string", {"key": "value"}, []]}}::vertex {"id": 844424930131969, "label": "v", "properties": {}}::vertex {"id": 844424930131970, "label": "v", "properties": {"i": 0}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 1}}::vertex (5 rows) -- select vertices without id as a property but with a property i SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE NOT EXISTS(u.id) AND EXISTS(u.i) RETURN u $$) AS (u agtype); u ----------------------------------------------------------------------- {"id": 844424930131970, "label": "v", "properties": {"i": 0}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 1}}::vertex (2 rows) -- select vertices with id as a property and have a self loop SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE EXISTS(u.id) AND EXISTS((u)-[]->(u)) RETURN u$$) AS (u agtype); u ------------------------------------------------------------------------------------ {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex (1 row) -- Return exists(property) SELECT * FROM cypher('cypher_match', $$MATCH (u) RETURN EXISTS(u.id), properties(u) $$) AS (exists agtype, properties agtype); exists | properties --------+------------------------------------------------------------------------------------------------------------- false | {"int_key": 1, "map_key": {"key": "value"}, "list_key": [1, 2, 3], "float_key": 3.14, "string_key": "test"} false | {"lst": [1, null, 3.14, "string", {"key": "value"}, []]} false | {} false | {"i": 0} false | {"i": 1} true | {"id": "initial"} true | {"id": "middle"} true | {"id": "end"} true | {"id": "initial"} true | {"id": "middle"} true | {"id": "end"} true | {"id": "initial"} true | {"id": "middle"} true | {"id": "end"} true | {"id": "initial"} (15 rows) SELECT * FROM cypher('cypher_match', $$MATCH (u) RETURN EXISTS(u.name), properties(u) $$) AS (exists agtype, properties agtype); exists | properties --------+------------------------------------------------------------------------------------------------------------- false | {"int_key": 1, "map_key": {"key": "value"}, "list_key": [1, 2, 3], "float_key": 3.14, "string_key": "test"} false | {"lst": [1, null, 3.14, "string", {"key": "value"}, []]} false | {} false | {"i": 0} false | {"i": 1} false | {"id": "initial"} false | {"id": "middle"} false | {"id": "end"} false | {"id": "initial"} false | {"id": "middle"} false | {"id": "end"} false | {"id": "initial"} false | {"id": "middle"} false | {"id": "end"} false | {"id": "initial"} (15 rows) -- should give an error SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE EXISTS(u) RETURN u$$) AS (u agtype); ERROR: syntax error at or near ")" LINE 2: $$MATCH (u) WHERE EXISTS(u) RETURN u$$) ^ -- -- MATCH with WHERE isEmpty(property) -- SELECT create_graph('for_isEmpty'); NOTICE: graph "for_isEmpty" has been created create_graph -------------- (1 row) -- Create vertices SELECT * FROM cypher('for_isEmpty', $$CREATE (u:for_pred {id:1, type: "empty", list: [], map: {}, string: ""}), (v:for_pred {id:2, type: "filled", list: [1], map: {a:1}, string: "a"}), (w:for_pred)$$) AS (a agtype); a --- (0 rows) -- Match vertices with empty properties SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE isEmpty(u.list) RETURN properties(u) $$) AS (u agtype); u ----------------------------------------------------------------- {"id": 1, "map": {}, "list": [], "type": "empty", "string": ""} (1 row) SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE isEmpty(u.map) RETURN properties(u) $$) AS (u agtype); u ----------------------------------------------------------------- {"id": 1, "map": {}, "list": [], "type": "empty", "string": ""} (1 row) SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE isEmpty(u.string) RETURN properties(u) $$) AS (u agtype); u ----------------------------------------------------------------- {"id": 1, "map": {}, "list": [], "type": "empty", "string": ""} (1 row) -- Match vertices with non-empty properties SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE NOT isEmpty(u.list) RETURN properties(u) $$) AS (u agtype); u -------------------------------------------------------------------------- {"id": 2, "map": {"a": 1}, "list": [1], "type": "filled", "string": "a"} (1 row) SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE NOT isEmpty(u.map) RETURN properties(u) $$) AS (u agtype); u -------------------------------------------------------------------------- {"id": 2, "map": {"a": 1}, "list": [1], "type": "filled", "string": "a"} (1 row) SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE NOT isEmpty(u.string) RETURN properties(u) $$) AS (u agtype); u -------------------------------------------------------------------------- {"id": 2, "map": {"a": 1}, "list": [1], "type": "filled", "string": "a"} (1 row) -- Match vertices with no properties SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE isEmpty(properties(u)) RETURN properties(u) $$) AS (u agtype); u ---- {} (1 row) -- Match vertices with properties SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE NOT isEmpty(properties(u)) RETURN properties(u) $$) AS (u agtype); u -------------------------------------------------------------------------- {"id": 1, "map": {}, "list": [], "type": "empty", "string": ""} {"id": 2, "map": {"a": 1}, "list": [1], "type": "filled", "string": "a"} (2 rows) -- Match vertices with null property (should return nothing since WHERE null) SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE isEmpty(u.tree) RETURN properties(u) $$) AS (u agtype); u --- (0 rows) -- Match and Return bool SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE isEmpty(u.list) RETURN isEmpty(u.list), u.type $$) AS (b agtype, type agtype); b | type ------+--------- true | "empty" (1 row) SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE NOT isEmpty(u.list) RETURN isEmpty(u.list), u.type $$) AS (b agtype, type agtype); b | type -------+---------- false | "filled" (1 row) -- Return null on null SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) RETURN isEmpty(u.tree) $$) AS (b agtype); b --- (3 rows) -- Should give an error SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE isEmpty(u) RETURN properties(u) $$) AS (u agtype); ERROR: isEmpty() unsupported argument, expected a List, Map, or String SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE isEmpty(1) RETURN properties(u) $$) AS (u agtype); ERROR: isEmpty() unsupported argument, expected a List, Map, or String SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE isEmpty(1,2,3) RETURN properties(u) $$) AS (u agtype); ERROR: function ag_catalog.age_isempty(agtype, agtype, agtype) does not exist LINE 2: $$MATCH (u:for_pred) WHERE isEmpty(1,2,3) RETURN properties... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE isEmpty() RETURN properties(u) $$) AS (u agtype); ERROR: function ag_catalog.age_isempty() does not exist LINE 2: $$MATCH (u:for_pred) WHERE isEmpty() RETURN properties(u) $... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- clean up SELECT drop_graph('for_isEmpty', true); NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to table "for_isEmpty"._ag_label_vertex drop cascades to table "for_isEmpty"._ag_label_edge drop cascades to table "for_isEmpty".for_pred NOTICE: graph "for_isEmpty" has been dropped drop_graph ------------ (1 row) -- --Distinct -- SELECT * FROM cypher('cypher_match', $$ MATCH (u) RETURN DISTINCT u.id $$) AS (i agtype); i ----------- "end" "initial" "middle" (4 rows) SELECT * FROM cypher('cypher_match', $$ CREATE (u:duplicate)-[:dup_edge {id:1 }]->(:other_v) $$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (u:duplicate) CREATE (u)-[:dup_edge {id:2 }]->(:other_v) $$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (u:duplicate)-[]-(:other_v) RETURN DISTINCT u $$) AS (i agtype); i -------------------------------------------------------------------------- {"id": 3377699720527873, "label": "duplicate", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH p=(:duplicate)-[]-(:other_v) RETURN DISTINCT p $$) AS (i agtype); i -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 3377699720527873, "label": "duplicate", "properties": {}}::vertex, {"id": 3659174697238529, "label": "dup_edge", "end_id": 3940649673949185, "start_id": 3377699720527873, "properties": {"id": 1}}::edge, {"id": 3940649673949185, "label": "other_v", "properties": {}}::vertex]::path [{"id": 3377699720527873, "label": "duplicate", "properties": {}}::vertex, {"id": 3659174697238530, "label": "dup_edge", "end_id": 3940649673949186, "start_id": 3377699720527873, "properties": {"id": 2}}::edge, {"id": 3940649673949186, "label": "other_v", "properties": {}}::vertex]::path (2 rows) -- -- Limit -- SELECT * FROM cypher('cypher_match', $$ MATCH (u) RETURN u $$) AS (i agtype); i ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"int_key": 1, "map_key": {"key": "value"}, "list_key": [1, 2, 3], "float_key": 3.14, "string_key": "test"}}::vertex {"id": 281474976710658, "label": "", "properties": {"lst": [1, null, 3.14, "string", {"key": "value"}, []]}}::vertex {"id": 844424930131969, "label": "v", "properties": {}}::vertex {"id": 844424930131970, "label": "v", "properties": {"i": 0}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 1}}::vertex {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex {"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex {"id": 2251799813685249, "label": "v3", "properties": {"id": "initial"}}::vertex {"id": 2251799813685250, "label": "v3", "properties": {"id": "middle"}}::vertex {"id": 2251799813685251, "label": "v3", "properties": {"id": "end"}}::vertex {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex {"id": 3377699720527873, "label": "duplicate", "properties": {}}::vertex {"id": 3940649673949185, "label": "other_v", "properties": {}}::vertex {"id": 3940649673949186, "label": "other_v", "properties": {}}::vertex (18 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (u) RETURN u LIMIT 3 $$) AS (i agtype); i ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"int_key": 1, "map_key": {"key": "value"}, "list_key": [1, 2, 3], "float_key": 3.14, "string_key": "test"}}::vertex {"id": 281474976710658, "label": "", "properties": {"lst": [1, null, 3.14, "string", {"key": "value"}, []]}}::vertex {"id": 844424930131969, "label": "v", "properties": {}}::vertex (3 rows) -- -- Skip -- SELECT * FROM cypher('cypher_match', $$ MATCH (u) RETURN u SKIP 7 $$) AS (i agtype); i ------------------------------------------------------------------------------------ {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex {"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex {"id": 2251799813685249, "label": "v3", "properties": {"id": "initial"}}::vertex {"id": 2251799813685250, "label": "v3", "properties": {"id": "middle"}}::vertex {"id": 2251799813685251, "label": "v3", "properties": {"id": "end"}}::vertex {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex {"id": 3377699720527873, "label": "duplicate", "properties": {}}::vertex {"id": 3940649673949185, "label": "other_v", "properties": {}}::vertex {"id": 3940649673949186, "label": "other_v", "properties": {}}::vertex (11 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (u) RETURN u SKIP 7 LIMIT 3 $$) AS (i agtype); i ---------------------------------------------------------------------------------- {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex {"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex (3 rows) -- -- Optional Match -- SELECT * FROM cypher('cypher_match', $$ CREATE (:opt_match_v {name: 'someone'})-[:opt_match_e]->(:opt_match_v {name: 'somebody'}), (:opt_match_v {name: 'anybody'})-[:opt_match_e]->(:opt_match_v {name: 'nobody'}) $$) AS (u agtype); u --- (0 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (u:opt_match_v) OPTIONAL MATCH (u)-[m]-(l) RETURN u.name as u, type(m), l.name as l ORDER BY u, m, l $$) AS (u agtype, m agtype, l agtype); u | m | l ------------+---------------+------------ "someone" | "opt_match_e" | "somebody" "somebody" | "opt_match_e" | "someone" "anybody" | "opt_match_e" | "nobody" "nobody" | "opt_match_e" | "anybody" (4 rows) SELECT * FROM cypher('cypher_match', $$ OPTIONAL MATCH (n:opt_match_v)-[r]->(p), (m:opt_match_v)-[s]->(q) WHERE id(n) <> id(m) RETURN n.name as n, type(r) AS r, p.name as p, m.name AS m, type(s) AS s, q.name AS q ORDER BY n, p, m, q $$) AS (n agtype, r agtype, p agtype, m agtype, s agtype, q agtype); n | r | p | m | s | q -----------+---------------+------------+-----------+---------------+------------ "someone" | "opt_match_e" | "somebody" | "anybody" | "opt_match_e" | "nobody" "anybody" | "opt_match_e" | "nobody" | "someone" | "opt_match_e" | "somebody" (2 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (n:opt_match_v), (m:opt_match_v) WHERE id(n) <> id(m) OPTIONAL MATCH (n)-[r]->(p), (m)-[s]->(q) RETURN n.name AS n, type(r) AS r, p.name AS p, m.name AS m, type(s) AS s, q.name AS q ORDER BY n, p, m, q $$) AS (n agtype, r agtype, p agtype, m agtype, s agtype, q agtype); n | r | p | m | s | q ------------+---------------+------------+------------+---------------+------------ "someone" | "opt_match_e" | "somebody" | "anybody" | "opt_match_e" | "nobody" "someone" | | | "somebody" | | "someone" | | | "nobody" | | "somebody" | | | "someone" | | "somebody" | | | "anybody" | | "somebody" | | | "nobody" | | "anybody" | "opt_match_e" | "nobody" | "someone" | "opt_match_e" | "somebody" "anybody" | | | "somebody" | | "anybody" | | | "nobody" | | "nobody" | | | "someone" | | "nobody" | | | "somebody" | | "nobody" | | | "anybody" | | (12 rows) -- Tests to catch match following optional match logic -- this syntax is invalid in cypher SELECT * FROM cypher('cypher_match', $$ OPTIONAL MATCH (n) MATCH (m) RETURN n,m $$) AS (n agtype, m agtype); ERROR: MATCH cannot follow OPTIONAL MATCH LINE 1: SELECT * FROM cypher('cypher_match', $$ ^ SELECT * FROM cypher('cypher_match', $$ MATCH (n) OPTIONAL MATCH (m) MATCH (o) RETURN n,m $$) AS (n agtype, m agtype); ERROR: MATCH cannot follow OPTIONAL MATCH LINE 1: SELECT * FROM cypher('cypher_match', $$ ^ -- -- Tests retrieving Var from some parent's cpstate during transformation -- SELECT create_graph('test_retrieve_var'); NOTICE: graph "test_retrieve_var" has been created create_graph -------------- (1 row) SELECT * FROM cypher('test_retrieve_var', $$ CREATE (:A)-[:incs]->(:C) $$) as (a agtype); a --- (0 rows) -- Tests with node Var -- both queries should return the same result -- first query does not retrieve any variable from any parent's cpstate -- second query retrieves variable 'a', inside WHERE, from parent's parent's cpstate SELECT * FROM cypher('test_retrieve_var', $$ MATCH (a:A) WITH a OPTIONAL MATCH (a)-[:incs]->(c) WHERE EXISTS((c)<-[:incs]-()) RETURN a, c $$) AS (a agtype, c agtype); a | c -----------------------------------------------------------------+------------------------------------------------------------------ {"id": 844424930131969, "label": "A", "properties": {}}::vertex | {"id": 1407374883553281, "label": "C", "properties": {}}::vertex (1 row) SELECT * FROM cypher('test_retrieve_var', $$ MATCH (a:A) WITH a OPTIONAL MATCH (a)-[:incs]->(c) WHERE EXISTS((c)<-[:incs]-(a)) RETURN a, c $$) AS (a agtype, c agtype); a | c -----------------------------------------------------------------+------------------------------------------------------------------ {"id": 844424930131969, "label": "A", "properties": {}}::vertex | {"id": 1407374883553281, "label": "C", "properties": {}}::vertex (1 row) -- Tests with edge Var -- both queries should return the same result -- first query does not retrieve any variable from any parent's cpstate -- second query retrieves variable 'r', inside WHERE, from parent's parent's cpstate SELECT * FROM cypher('test_retrieve_var', $$ MATCH (a:A)-[r:incs]->() WITH a, r OPTIONAL MATCH (a)-[r]->(c) WHERE EXISTS(()<-[]-(c)) RETURN a, r $$) AS (a agtype, r agtype); a | r -----------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "A", "properties": {}}::vertex | {"id": 1125899906842625, "label": "incs", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {}}::edge (1 row) SELECT * FROM cypher('test_retrieve_var', $$ MATCH (a:A)-[r:incs]->() WITH a, r OPTIONAL MATCH (a)-[r]->(c) WHERE EXISTS((:A)<-[]-(c)) RETURN a, r $$) AS (a agtype, r agtype); a | r -----------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "A", "properties": {}}::vertex | {"id": 1125899906842625, "label": "incs", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {}}::edge (1 row) SELECT * FROM cypher('test_retrieve_var', $$ MATCH (a:A)-[r:incs]->() WITH a, r OPTIONAL MATCH (a)-[r]->(c) WHERE EXISTS((c)<-[]-(:A)) RETURN a, r $$) AS (a agtype, r agtype); a | r -----------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "A", "properties": {}}::vertex | {"id": 1125899906842625, "label": "incs", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {}}::edge (1 row) SELECT * FROM cypher('test_retrieve_var', $$ MATCH (a:A)-[r:incs]->() WITH a, r OPTIONAL MATCH (a)-[r]->(c) WHERE EXISTS((:C)<-[]-(:A)) RETURN a, r $$) AS (a agtype, r agtype); a | r -----------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "A", "properties": {}}::vertex | {"id": 1125899906842625, "label": "incs", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {}}::edge (1 row) SELECT * FROM cypher('test_retrieve_var', $$ MATCH (a:A)-[r:incs]->() WITH a, r OPTIONAL MATCH (a)-[r]->(c) WHERE EXISTS(()<-[r]-(c)) RETURN a, r $$) AS (a agtype, r agtype); a | r -----------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "A", "properties": {}}::vertex | {"id": 1125899906842625, "label": "incs", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {}}::edge (1 row) -- -- JIRA: AGE2-544 -- -- Clean up SELECT DISTINCT * FROM cypher('cypher_match', $$ MATCH (u) DETACH DELETE (u) $$) AS (i agtype); i --- (0 rows) -- Prepare SELECT * FROM cypher('cypher_match', $$ CREATE (u {name: "orphan"}) CREATE (u1 {name: "F"})-[u2:e1]->(u3 {name: "T"}) RETURN u1, u2, u3 $$) as (u1 agtype, u2 agtype, u3 agtype); u1 | u2 | u3 ---------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------- {"id": 281474976710660, "label": "", "properties": {"name": "F"}}::vertex | {"id": 1407374883553283, "label": "e1", "end_id": 281474976710661, "start_id": 281474976710660, "properties": {}}::edge | {"id": 281474976710661, "label": "", "properties": {"name": "T"}}::vertex (1 row) -- Querying NOT EXISTS syntax SELECT * FROM cypher('cypher_match', $$ MATCH (f),(t) WHERE NOT EXISTS((f)-[]->(t)) RETURN f.name, t.name $$) as (f agtype, t agtype); f | t ----------+---------- "orphan" | "orphan" "orphan" | "F" "orphan" | "T" "F" | "orphan" "F" | "F" "T" | "orphan" "T" | "F" "T" | "T" (8 rows) -- Querying EXISTS syntax SELECT * FROM cypher('cypher_match', $$ MATCH (f),(t) WHERE EXISTS((f)-[]->(t)) RETURN f.name, t.name $$) as (f agtype, t agtype); f | t -----+----- "F" | "T" (1 row) -- Querying ALL SELECT * FROM cypher('cypher_match', $$ MATCH (f),(t) WHERE NOT EXISTS((f)-[]->(t)) or true RETURN f.name, t.name $$) as (f agtype, t agtype); f | t ----------+---------- "orphan" | "orphan" "orphan" | "F" "orphan" | "T" "F" | "orphan" "F" | "F" "F" | "T" "T" | "orphan" "T" | "F" "T" | "T" (9 rows) -- Querying ALL SELECT * FROM cypher('cypher_match', $$ MATCH (f),(t) RETURN f.name, t.name $$) as (f agtype, t agtype); f | t ----------+---------- "orphan" | "orphan" "orphan" | "F" "orphan" | "T" "F" | "orphan" "F" | "F" "F" | "T" "T" | "orphan" "T" | "F" "T" | "T" (9 rows) -- -- Constraints and WHERE clause together -- SELECT * FROM cypher('cypher_match', $$ CREATE ({i: 1, j: 2, k: 3}), ({i: 1, j: 3}), ({i:2, k: 3}) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (n {j: 2}) WHERE n.i = 1 RETURN n $$) as (n agtype); n -------------------------------------------------------------------------------------- {"id": 281474976710662, "label": "", "properties": {"i": 1, "j": 2, "k": 3}}::vertex (1 row) -- -- Regression tests to check previous clause variable refs -- -- set up initial state and show what we're working with SELECT * FROM cypher('cypher_match', $$ CREATE (a {age: 4}) RETURN a $$) as (a agtype); a ------------------------------------------------------------------------ {"id": 281474976710665, "label": "", "properties": {"age": 4}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ CREATE (b {age: 6}) RETURN b $$) as (b agtype); b ------------------------------------------------------------------------ {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH (a) RETURN a $$) as (a agtype); a -------------------------------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {"name": "orphan"}}::vertex {"id": 281474976710660, "label": "", "properties": {"name": "F"}}::vertex {"id": 281474976710661, "label": "", "properties": {"name": "T"}}::vertex {"id": 281474976710662, "label": "", "properties": {"i": 1, "j": 2, "k": 3}}::vertex {"id": 281474976710663, "label": "", "properties": {"i": 1, "j": 3}}::vertex {"id": 281474976710664, "label": "", "properties": {"i": 2, "k": 3}}::vertex {"id": 281474976710665, "label": "", "properties": {"age": 4}}::vertex {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex (8 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (a) WHERE EXISTS(a.name) RETURN a $$) as (a agtype); a -------------------------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {"name": "orphan"}}::vertex {"id": 281474976710660, "label": "", "properties": {"name": "F"}}::vertex {"id": 281474976710661, "label": "", "properties": {"name": "T"}}::vertex (3 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (a) WHERE EXISTS(a.name) SET a.age = 4 RETURN a $$) as (a agtype); a ------------------------------------------------------------------------------------------ {"id": 281474976710659, "label": "", "properties": {"age": 4, "name": "orphan"}}::vertex {"id": 281474976710660, "label": "", "properties": {"age": 4, "name": "F"}}::vertex {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex (3 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (a),(b) WHERE a.age = 4 AND a.name = "T" AND b.age = 6 RETURN a,b $$) as (a agtype, b agtype); a | b -------------------------------------------------------------------------------------+------------------------------------------------------------------------ {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex | {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH (a),(b) WHERE a.age = 4 AND a.name = "T" AND b.age = 6 CREATE (a)-[:knows {relationship: "friends", years: 3}]->(b) $$) as (r agtype); r --- (0 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (a),(b) WHERE a.age = 4 AND a.name = "orphan" AND b.age = 6 CREATE (a)-[:knows {relationship: "enemies", years: 4}]->(b) $$) as (r agtype); r --- (0 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[r]-(b) RETURN r $$) as (r agtype); r ----------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge {"id": 1407374883553283, "label": "e1", "end_id": 281474976710661, "start_id": 281474976710660, "properties": {}}::edge {"id": 1407374883553283, "label": "e1", "end_id": 281474976710661, "start_id": 281474976710660, "properties": {}}::edge (6 rows) -- check reuse of 'a' clause-to-clause - vertices SELECT * FROM cypher('cypher_match', $$ MATCH (a {age:4}) RETURN a $$) as (a agtype); a ------------------------------------------------------------------------------------------ {"id": 281474976710665, "label": "", "properties": {"age": 4}}::vertex {"id": 281474976710659, "label": "", "properties": {"age": 4, "name": "orphan"}}::vertex {"id": 281474976710660, "label": "", "properties": {"age": 4, "name": "F"}}::vertex {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex (4 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (a) MATCH (a {age:4}) RETURN a $$) as (a agtype); a ------------------------------------------------------------------------------------------ {"id": 281474976710665, "label": "", "properties": {"age": 4}}::vertex {"id": 281474976710659, "label": "", "properties": {"age": 4, "name": "orphan"}}::vertex {"id": 281474976710660, "label": "", "properties": {"age": 4, "name": "F"}}::vertex {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex (4 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (a {age:4, name: "orphan"}) RETURN a $$) as (a agtype); a ------------------------------------------------------------------------------------------ {"id": 281474976710659, "label": "", "properties": {"age": 4, "name": "orphan"}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH (a) MATCH (a {age:4}) MATCH (a {name: "orphan"}) RETURN a $$) as (a agtype); a ------------------------------------------------------------------------------------------ {"id": 281474976710659, "label": "", "properties": {"age": 4, "name": "orphan"}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH (a {age:4}) MATCH (a {name: "orphan"}) RETURN a $$) as (a agtype); a ------------------------------------------------------------------------------------------ {"id": 281474976710659, "label": "", "properties": {"age": 4, "name": "orphan"}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH (a) MATCH (a {age:4}) MATCH (a {name: "orphan"}) SET a.age = 3 RETURN a $$) as (a agtype); a ------------------------------------------------------------------------------------------ {"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH (a) MATCH (a {age:3}) MATCH (a {name: "orphan"}) RETURN a $$) as (a agtype); a ------------------------------------------------------------------------------------------ {"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH (a {name: "orphan"}) MATCH (a {age:3}) RETURN a $$) as (a agtype); a ------------------------------------------------------------------------------------------ {"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH (a) WHERE EXISTS(a.age) AND EXISTS(a.name) RETURN a $$) as (a agtype); a ------------------------------------------------------------------------------------------ {"id": 281474976710660, "label": "", "properties": {"age": 4, "name": "F"}}::vertex {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex {"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex (3 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (a) WHERE EXISTS(a.age) AND NOT EXISTS(a.name) RETURN a $$) as (a agtype); a ------------------------------------------------------------------------ {"id": 281474976710665, "label": "", "properties": {"age": 4}}::vertex {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex (2 rows) -- check reuse of 'r' clause-to-clause - edges SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r]-() RETURN r $$) as (r agtype); r ----------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge {"id": 1407374883553283, "label": "e1", "end_id": 281474976710661, "start_id": 281474976710660, "properties": {}}::edge {"id": 1407374883553283, "label": "e1", "end_id": 281474976710661, "start_id": 281474976710660, "properties": {}}::edge (6 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r]-() MATCH ()-[r {relationship: "friends"}]-() RETURN r $$) as (r agtype); r ----------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge (4 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r {years:3, relationship: "friends"}]-() RETURN r $$) as (r agtype); r ----------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge (2 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r {years:3}]-() MATCH ()-[r {relationship: "friends"}]-() RETURN r $$) as (r agtype); r ----------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge (4 rows) --mismatch year #, should return nothing SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r {years:2}]-() MATCH ()-[r {relationship: "friends"}]-() RETURN r $$) as (r agtype); r --- (0 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r {relationship:"enemies"}]-() MATCH ()-[r {years:4}]-() RETURN r $$) as (r agtype); r ----------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge (4 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r {relationship:"enemies"}]-() MATCH ()-[r {relationship:"friends"}]-() RETURN r $$) as (r agtype); r --- (0 rows) -- check reuse within clause - vertices SELECT * FROM cypher('cypher_match', $$ CREATE (u {name: "Dave"})-[:knows]->({name: "John"})-[:knows]->(u) RETURN u $$) as (u agtype); u ------------------------------------------------------------------------------ {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH p=(u)-[]-()-[]-(u) RETURN p $$)as (p agtype); p ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex]::path [{"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex]::path [{"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex]::path [{"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex]::path (4 rows) SELECT * FROM cypher('cypher_match', $$ MATCH p=(u)-[]->()-[]->(u) RETURN p $$)as (p agtype); p ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex]::path [{"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex]::path (2 rows) SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[]->()-[]->(a {name: "Dave"}) RETURN p $$)as (p agtype); p ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex]::path (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[]->()-[]->(a {name: "John"}) RETURN p $$)as (p agtype); p ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex]::path (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name: "Dave"})-[]->()-[]->(a {name: "Dave"}) RETURN p $$)as (p agtype); p ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex]::path (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name: "John"})-[]->()-[]->(a {name: "John"}) RETURN p $$)as (p agtype); p ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex]::path (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name: "Dave"})-[]->()-[]->(a) RETURN p $$)as (p agtype); p ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex]::path (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name: "John"})-[]->()-[]->(a) RETURN p $$)as (p agtype); p ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex]::path (1 row) -- these are illegal and should fail SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b:knows]->(a) RETURN p $$)as (p agtype); ERROR: duplicate edge variable 'b' within a clause LINE 1: ...ROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b:knows]-... ^ SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b]->(a) RETURN p $$)as (p agtype); ERROR: duplicate edge variable 'b' within a clause LINE 1: ...ROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b]->(a) R... ^ SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b:knows]->(a) RETURN p $$)as (p agtype); ERROR: duplicate edge variable 'b' within a clause LINE 1: ...pher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b:knows]-... ^ SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b]->(a) RETURN p $$)as (p agtype); ERROR: duplicate edge variable 'b' within a clause LINE 1: ...pher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b]->(a) R... ^ SELECT * FROM cypher('cypher_match', $$ MATCH p=(p) RETURN p $$)as (p agtype); ERROR: variable "p" is for a path LINE 1: SELECT * FROM cypher('cypher_match', $$ MATCH p=(p) RETURN p... ^ SELECT * FROM cypher('cypher_match', $$ MATCH p=(p)-[]->() RETURN p $$)as (p agtype); ERROR: variable "p" is for a path LINE 1: SELECT * FROM cypher('cypher_match', $$ MATCH p=(p)-[]->() R... ^ SELECT * FROM cypher('cypher_match', $$ MATCH p=()-[p]->() RETURN p $$)as (p agtype); ERROR: variable "p" is for a path LINE 1: ...ELECT * FROM cypher('cypher_match', $$ MATCH p=()-[p]->() RE... ^ SELECT * FROM cypher('cypher_match', $$ MATCH p=() MATCH (p) RETURN p $$)as (p agtype); ERROR: variable 'p' is for a path LINE 1: ... FROM cypher('cypher_match', $$ MATCH p=() MATCH (p) RETURN ... ^ SELECT * FROM cypher('cypher_match', $$ MATCH p=() MATCH (p)-[]->() RETURN p $$)as (p agtype); ERROR: variable 'p' is for a path LINE 1: ... FROM cypher('cypher_match', $$ MATCH p=() MATCH (p)-[]->() ... ^ SELECT * FROM cypher('cypher_match', $$ MATCH p=() MATCH ()-[p]->() RETURN p $$)as (p agtype); ERROR: variable 'p' is for a path LINE 1: ...ROM cypher('cypher_match', $$ MATCH p=() MATCH ()-[p]->() RE... ^ SELECT * FROM cypher('cypher_match', $$ MATCH (p) MATCH p=() RETURN p $$)as (p agtype); ERROR: variable "p" already exists LINE 1: ... * FROM cypher('cypher_match', $$ MATCH (p) MATCH p=() RETUR... ^ SELECT * FROM cypher('cypher_match', $$ MATCH ()-[p]->() MATCH p=() RETURN p $$)as (p agtype); ERROR: variable "p" already exists LINE 1: ... cypher('cypher_match', $$ MATCH ()-[p]->() MATCH p=() RETUR... ^ SELECT * FROM cypher('cypher_match', $$ MATCH ()-[p *]-()-[p]-() RETURN 0 $$)as (p agtype); ERROR: variable 'p' is for a VLE edge LINE 1: ... FROM cypher('cypher_match', $$ MATCH ()-[p *]-()-[p]-() RET... ^ SELECT * FROM cypher('cypher_match', $$ CREATE (p) WITH p MATCH p=() RETURN p $$)as (p agtype); ERROR: variable "p" already exists LINE 1: ...cypher('cypher_match', $$ CREATE (p) WITH p MATCH p=() RETUR... ^ SELECT * FROM cypher('cypher_match', $$ CREATE p=() WITH p MATCH (p) RETURN p $$)as (p agtype); ERROR: variable 'p' already exists LINE 1: ...pher('cypher_match', $$ CREATE p=() WITH p MATCH (p) RETURN ... ^ SELECT * FROM cypher('cypher_match', $$ CREATE ()-[p:knows]->() WITH p MATCH p=() RETURN p $$)as (p agtype); ERROR: variable "p" already exists LINE 1: ...r_match', $$ CREATE ()-[p:knows]->() WITH p MATCH p=() RETUR... ^ SELECT * FROM cypher('cypher_match', $$ CREATE p=() WITH p MATCH ()-[p]->() RETURN p $$)as (p agtype); ERROR: variable 'p' already exists LINE 1: ...er('cypher_match', $$ CREATE p=() WITH p MATCH ()-[p]->() RE... ^ -- -- Default alias check (issue #883) -- SELECT * FROM cypher('cypher_match', $$ MATCH (_) RETURN _ $$) as (a agtype); a ------------------------------------------------------------------------------------------ {"id": 281474976710662, "label": "", "properties": {"i": 1, "j": 2, "k": 3}}::vertex {"id": 281474976710663, "label": "", "properties": {"i": 1, "j": 3}}::vertex {"id": 281474976710664, "label": "", "properties": {"i": 2, "k": 3}}::vertex {"id": 281474976710665, "label": "", "properties": {"age": 4}}::vertex {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex {"id": 281474976710660, "label": "", "properties": {"age": 4, "name": "F"}}::vertex {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex {"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex (10 rows) SELECT * FROM cypher('cypher_match', $$ MATCH () MATCH (_{name: "Dave"}) RETURN 0 $$) as (a agtype); a --- 0 0 0 0 0 0 0 0 0 0 (10 rows) SELECT * FROM cypher('cypher_match', $$ MATCH () MATCH (_{name: "Dave"}) RETURN _ $$) as (a agtype); a ------------------------------------------------------------------------------ {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex (10 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (my_age_default_{name: "Dave"}) RETURN my_age_default_$$) as (a agtype); a ------------------------------------------------------------------------------ {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex (1 row) SELECT * FROM cypher('cypher_match', $$ MATCH () MATCH (my_age_default_{name: "Dave"}) RETURN my_age_default_$$) as (a agtype); a ------------------------------------------------------------------------------ {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex (10 rows) -- these should fail as they are prefixed with _age_default_ which is only for internal use SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_) RETURN _age_default_ $$) as (a agtype); ERROR: _age_default_ is only for internal use LINE 1: SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_... ^ SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_a) RETURN _age_default_a $$) as (a agtype); ERROR: _age_default_ is only for internal use LINE 1: SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_... ^ SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_whatever) RETURN 0 $$) as (a agtype); ERROR: _age_default_ is only for internal use LINE 1: SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_... ^ -- issue 876 SELECT * FROM cypher('cypher_match', $$ MATCH ({name: "Dave"}) MATCH ({name: "Dave"}) MATCH ({name: "Dave"}) RETURN 0 $$) as (a agtype); a --- 0 (1 row) SELECT * FROM cypher('cypher_match', $$MATCH ({n0:0}) MATCH ()-[]->() MATCH ({n1:0})-[]-() RETURN 0 AS n2$$) as (a agtype); a --- (0 rows) -- -- self referencing property constraints (issue #898) -- SELECT * FROM cypher('cypher_match', $$ MATCH (a {name:a.name}) RETURN a $$) as (a agtype); a ------------------------------------------------------------------------------------------ {"id": 281474976710660, "label": "", "properties": {"age": 4, "name": "F"}}::vertex {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex {"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex (5 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (a {name:a.name, age:a.age}) RETURN a $$) as (a agtype); a ------------------------------------------------------------------------------------------ {"id": 281474976710660, "label": "", "properties": {"age": 4, "name": "F"}}::vertex {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex {"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex (3 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (a {name:a.name}) MATCH (a {age:a.age}) RETURN a $$) as (a agtype); a ------------------------------------------------------------------------------------------ {"id": 281474976710660, "label": "", "properties": {"age": 4, "name": "F"}}::vertex {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex {"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex (3 rows) SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[u {relationship: u.relationship}]->(b) RETURN p $$) as (a agtype); a ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex, {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge, {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex]::path [{"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex, {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge, {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex]::path (2 rows) SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[u {relationship: u.relationship, years: u.years}]->(b) RETURN p $$) as (a agtype); a ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex, {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge, {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex]::path [{"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex, {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge, {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex]::path (2 rows) SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name:a.name})-[u {relationship: u.relationship}]->(b {age:b.age}) RETURN p $$) as (a agtype); a ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex, {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge, {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex]::path [{"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex, {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge, {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex]::path (2 rows) SELECT * FROM cypher('cypher_match', $$ CREATE () WITH * MATCH (x{n0:x.n1}) RETURN 0 $$) as (a agtype); a --- (0 rows) -- these should fail due to multiple labels for a variable SELECT * FROM cypher('cypher_match', $$ MATCH p=(x)-[]->(x:R) RETURN p, x $$) AS (p agtype, x agtype); ERROR: multiple labels for variable 'x' are not supported LINE 1: ...* FROM cypher('cypher_match', $$ MATCH p=(x)-[]->(x:R) RETUR... ^ SELECT * FROM cypher('cypher_match', $$ MATCH p=(x:r)-[]->(x:R) RETURN p, x $$) AS (p agtype, x agtype); ERROR: multiple labels for variable 'x' are not supported LINE 1: ...FROM cypher('cypher_match', $$ MATCH p=(x:r)-[]->(x:R) RETUR... ^ -- -- Test age.enable_containment configuration parameter -- -- Test queries are run before and after switching off this parameter. -- When on, the containment operator should be used to filter properties. -- When off, the access operator should be used. -- SELECT create_graph('test_enable_containment'); NOTICE: graph "test_enable_containment" has been created create_graph -------------- (1 row) SELECT * FROM cypher('test_enable_containment', $$ CREATE (x:Customer { name: 'Bob', school: { name: 'XYZ College', program: { major: 'Psyc', degree: 'BSc' } }, phone: [ 123456789, 987654321, 456987123 ], addr: [ {city: 'Vancouver', street: 30}, {city: 'Toronto', street: 40} ] }) RETURN x $$) as (a agtype); a ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "Customer", "properties": {"addr": [{"city": "Vancouver", "street": 30}, {"city": "Toronto", "street": 40}], "name": "Bob", "phone": [123456789, 987654321, 456987123], "school": {"name": "XYZ College", "program": {"major": "Psyc", "degree": "BSc"}}}}::vertex (1 row) -- With enable_containment on SET age.enable_containment = on; SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {addr:[{city:'Toronto'}]}) RETURN x $$) as (a agtype); count ------- 1 (1 row) SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {addr:[{city:'Toronto'}, {city: 'Vancouver'}]}) RETURN x $$) as (a agtype); count ------- 1 (1 row) SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {addr:[{city:'Alberta'}]}) RETURN x $$) as (a agtype); count ------- 0 (1 row) SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {school:{program:{major:'Psyc'}}}) RETURN x $$) as (a agtype); count ------- 1 (1 row) SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {name:'Bob',school:{program:{degree:'BSc'}}}) RETURN x $$) as (a agtype); count ------- 1 (1 row) SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {school:{program:{major:'Cs'}}}) RETURN x $$) as (a agtype); count ------- 0 (1 row) SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {name:'Bob',school:{program:{degree:'PHd'}}}) RETURN x $$) as (a agtype); count ------- 0 (1 row) SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {phone:[987654321]}) RETURN x $$) as (a agtype); count ------- 1 (1 row) SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {phone:[654765876]}) RETURN x $$) as (a agtype); count ------- 0 (1 row) SELECT * FROM cypher('test_enable_containment', $$ EXPLAIN (COSTS OFF) MATCH (x:Customer {school:{name:'XYZ',program:{degree:'BSc'}},phone:[987654321],parents:{}}) RETURN x $$) as (a agtype); QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------ Seq Scan on "Customer" x Filter: (properties @> '{"phone": [987654321], "school": {"name": "XYZ", "program": {"degree": "BSc"}}, "parents": {}}'::agtype) (2 rows) -- Previous set of queries, with enable_containment off SET age.enable_containment = off; SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {addr:[{city:'Toronto'}]}) RETURN x $$) as (a agtype); count ------- 1 (1 row) SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {addr:[{city:'Toronto'}, {city: 'Vancouver'}]}) RETURN x $$) as (a agtype); count ------- 1 (1 row) SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {addr:[{city:'Alberta'}]}) RETURN x $$) as (a agtype); count ------- 0 (1 row) SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {school:{program:{major:'Psyc'}}}) RETURN x $$) as (a agtype); count ------- 1 (1 row) SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {name:'Bob',school:{program:{degree:'BSc'}}}) RETURN x $$) as (a agtype); count ------- 1 (1 row) SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {school:{program:{major:'Cs'}}}) RETURN x $$) as (a agtype); count ------- 0 (1 row) SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {name:'Bob',school:{program:{degree:'PHd'}}}) RETURN x $$) as (a agtype); count ------- 0 (1 row) SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {phone:[987654321]}) RETURN x $$) as (a agtype); count ------- 1 (1 row) SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {phone:[654765876]}) RETURN x $$) as (a agtype); count ------- 0 (1 row) SELECT * FROM cypher('test_enable_containment', $$ EXPLAIN (COSTS OFF) MATCH (x:Customer {school:{name:'XYZ',program:{degree:'BSc'}},phone:[987654321],parents:{}}) RETURN x $$) as (a agtype); QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Seq Scan on "Customer" x Filter: ((agtype_access_operator(VARIADIC ARRAY[properties, '"school"'::agtype, '"name"'::agtype]) = '"XYZ"'::agtype) AND (agtype_access_operator(VARIADIC ARRAY[properties, '"school"'::agtype, '"program"'::agtype, '"degree"'::agtype]) = '"BSc"'::agtype) AND (agtype_access_operator(VARIADIC ARRAY[properties, '"phone"'::agtype]) @> '[987654321]'::agtype) AND (agtype_access_operator(VARIADIC ARRAY[properties, '"parents"'::agtype]) @> '{}'::agtype)) (2 rows) -- -- Issue 945 -- SELECT create_graph('issue_945'); NOTICE: graph "issue_945" has been created create_graph -------------- (1 row) SELECT * FROM cypher('issue_945', $$ CREATE (a:Part {part_num: '123'}), (b:Part {part_num: '345'}), (c:Part {part_num: '456'}), (d:Part {part_num: '789'}) $$) as (result agtype); result -------- (0 rows) -- should match 4 SELECT * FROM cypher('issue_945', $$ MATCH (a:Part) RETURN a $$) as (result agtype); result ------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "Part", "properties": {"part_num": "123"}}::vertex {"id": 844424930131970, "label": "Part", "properties": {"part_num": "345"}}::vertex {"id": 844424930131971, "label": "Part", "properties": {"part_num": "456"}}::vertex {"id": 844424930131972, "label": "Part", "properties": {"part_num": "789"}}::vertex (4 rows) -- each should return 4 SELECT * FROM cypher('issue_945', $$ MATCH (:Part) RETURN count(*) $$) as (result agtype); result -------- 4 (1 row) SELECT * FROM cypher('issue_945', $$ MATCH (a:Part) RETURN count(*) $$) as (result agtype); result -------- 4 (1 row) -- each should return 4 rows of 0 SELECT * FROM cypher('issue_945', $$ MATCH (:Part) RETURN 0 $$) as (result agtype); result -------- 0 0 0 0 (4 rows) SELECT * FROM cypher('issue_945', $$ MATCH (a:Part) RETURN 0 $$) as (result agtype); result -------- 0 0 0 0 (4 rows) -- each should return 16 rows of 0 SELECT * FROM cypher('issue_945', $$ MATCH (:Part) MATCH (:Part) RETURN 0 $$) as (result agtype); result -------- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (16 rows) SELECT * FROM cypher('issue_945', $$ MATCH (a:Part) MATCH (:Part) RETURN 0 $$) as (result agtype); result -------- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (16 rows) SELECT * FROM cypher('issue_945', $$ MATCH (:Part) MATCH (b:Part) RETURN 0 $$) as (result agtype); result -------- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (16 rows) SELECT * FROM cypher('issue_945', $$ MATCH (a:Part) MATCH (b:Part) RETURN 0 $$) as (result agtype); result -------- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (16 rows) -- each should return a count of 16 SELECT * FROM cypher('issue_945', $$ MATCH (:Part) MATCH (:Part) RETURN count(*) $$) as (result agtype); result -------- 16 (1 row) SELECT * FROM cypher('issue_945', $$ MATCH (a:Part) MATCH (:Part) RETURN count(*) $$) as (result agtype); result -------- 16 (1 row) SELECT * FROM cypher('issue_945', $$ MATCH (:Part) MATCH (b:Part) RETURN count(*) $$) as (result agtype); result -------- 16 (1 row) SELECT * FROM cypher('issue_945', $$ MATCH (a:Part) MATCH (b:Part) RETURN count(*) $$) as (result agtype); result -------- 16 (1 row) -- -- Issue 1045 -- SELECT * FROM cypher('cypher_match', $$ MATCH p=()-[*]->() RETURN length(p) $$) as (length agtype); length -------- 1 2 1 1 1 2 1 2 (8 rows) SELECT * FROM cypher('cypher_match', $$ MATCH p=()-[*]->() WHERE length(p) > 1 RETURN length(p) $$) as (length agtype); length -------- 2 2 2 (3 rows) SELECT * FROM cypher('cypher_match', $$ MATCH p=()-[*]->() WHERE size(nodes(p)) = 3 RETURN nodes(p)[0] $$) as (nodes agtype); nodes ----------------------------------------------------------------------------------------------------- {"id": 281474976710660, "label": "_ag_label_vertex", "properties": {"age": 4, "name": "F"}}::vertex {"id": 281474976710667, "label": "_ag_label_vertex", "properties": {"name": "Dave"}}::vertex {"id": 281474976710668, "label": "_ag_label_vertex", "properties": {"name": "John"}}::vertex (3 rows) SELECT * FROM cypher('cypher_match', $$ MATCH (n {name:'Dave'}) MATCH p=()-[*]->() WHERE nodes(p)[0] = n RETURN length(p) $$) as (length agtype); length -------- 1 2 (2 rows) SELECT * FROM cypher('cypher_match', $$ MATCH p1=(n {name:'Dave'})-[]->() MATCH p2=()-[*]->() WHERE p2=p1 RETURN p2=p1 $$) as (path agtype); path ------ true (1 row) -- -- Issue 1399 EXISTS leads to an error if a relation label does not exists as database table -- SELECT create_graph('issue_1399'); NOTICE: graph "issue_1399" has been created create_graph -------------- (1 row) -- this is an empty graph so these should return 0 SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE EXISTS((foo)-[]->()) RETURN foo $$) as (c agtype); c --- (0 rows) SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE NOT EXISTS((foo)-[]->()) RETURN foo $$) as (c agtype); c --- (0 rows) SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE EXISTS((foo)-[:BAR]->()) RETURN foo $$) as (c agtype); c --- (0 rows) SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE NOT EXISTS((foo)-[:BAR]->()) RETURN foo $$) as (c agtype); c --- (0 rows) -- this is an empty graph so these should return false SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE EXISTS((foo)-[]->()) RETURN count(foo) > 0 $$) as (c agtype); c ------- false (1 row) SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE NOT EXISTS((foo)-[]->()) RETURN count(foo) > 0 $$) as (c agtype); c ------- false (1 row) SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE EXISTS((foo)-[:BAR]->()) RETURN count(foo) > 0 $$) as (c agtype); c ------- false (1 row) SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE NOT EXISTS((foo)-[:BAR]->()) RETURN count(foo) > 0 $$) as (c agtype); c ------- false (1 row) -- create 1 path SELECT * FROM cypher('issue_1399', $$ CREATE (foo)-[:BAR]->() RETURN foo $$) as (c agtype); c ---------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {}}::vertex (1 row) -- these should each return 1 row as it is a directed edge and -- only one vertex can match. SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE EXISTS((foo)-[]->()) RETURN foo $$) as (c agtype); c ---------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {}}::vertex (1 row) SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE NOT EXISTS((foo)-[]->()) RETURN foo $$) as (c agtype); c ---------------------------------------------------------------- {"id": 281474976710658, "label": "", "properties": {}}::vertex (1 row) SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE EXISTS((foo)-[:BAR]->()) RETURN foo $$) as (c agtype); c ---------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {}}::vertex (1 row) SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE NOT EXISTS((foo)-[:BAR]->()) RETURN foo $$) as (c agtype); c ---------------------------------------------------------------- {"id": 281474976710658, "label": "", "properties": {}}::vertex (1 row) -- this should return 0 rows as it can't exist - that path isn't in BAR2 SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE EXISTS((foo)-[:BAR2]->()) RETURN foo $$) as (c agtype); c --- (0 rows) -- this should return 2 rows as they all exist SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE NOT EXISTS((foo)-[:BAR2]->()) RETURN foo $$) as (c agtype); c ---------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {}}::vertex {"id": 281474976710658, "label": "", "properties": {}}::vertex (2 rows) -- Issue 1393 EXISTS doesn't see previous clauses' variables SELECT FROM create_graph('issue_1393'); NOTICE: graph "issue_1393" has been created -- (1 row) SELECT * FROM cypher('issue_1393', $$ CREATE (n1:Object) RETURN n1 $$) AS (n1 agtype); n1 ---------------------------------------------------------------------- {"id": 844424930131969, "label": "Object", "properties": {}}::vertex (1 row) -- vertex cases SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE EXISTS((n1)-[]->(n2)) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); n1 | n2 ----+---- (0 rows) SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE EXISTS((n1:Object)-[]->(n2:Object)) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); n1 | n2 ----+---- (0 rows) SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE NOT EXISTS((n1)-[]->(n2)) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); n1 | n2 ----------------------------------------------------------------------+---------------------------------------------------------------------- {"id": 844424930131969, "label": "Object", "properties": {}}::vertex | {"id": 844424930131969, "label": "Object", "properties": {}}::vertex (1 row) SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE NOT EXISTS((n1:Object)-[]->(n2:Object)) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); n1 | n2 ----------------------------------------------------------------------+---------------------------------------------------------------------- {"id": 844424930131969, "label": "Object", "properties": {}}::vertex | {"id": 844424930131969, "label": "Object", "properties": {}}::vertex (1 row) SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE EXISTS((n1)-[]->()) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); n1 | n2 ----+---- (0 rows) SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE NOT EXISTS((n1)-[]->()) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); n1 | n2 ----------------------------------------------------------------------+---------------------------------------------------------------------- {"id": 844424930131969, "label": "Object", "properties": {}}::vertex | {"id": 844424930131969, "label": "Object", "properties": {}}::vertex (1 row) SELECT * FROM cypher('issue_1393', $$ CREATE (n1:Object)-[e:knows]->(n2:Object) RETURN n1, e, n2 $$) AS (n1 agtype, e agtype, n2 agtype); n1 | e | n2 ----------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------- {"id": 844424930131970, "label": "Object", "properties": {}}::vertex | {"id": 1125899906842625, "label": "knows", "end_id": 844424930131971, "start_id": 844424930131970, "properties": {}}::edge | {"id": 844424930131971, "label": "Object", "properties": {}}::vertex (1 row) SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE EXISTS((n1)-[]->(n2)) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); n1 | n2 ----------------------------------------------------------------------+---------------------------------------------------------------------- {"id": 844424930131970, "label": "Object", "properties": {}}::vertex | {"id": 844424930131971, "label": "Object", "properties": {}}::vertex (1 row) SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE EXISTS((n1:Object)-[]->(n2:Object)) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); n1 | n2 ----------------------------------------------------------------------+---------------------------------------------------------------------- {"id": 844424930131970, "label": "Object", "properties": {}}::vertex | {"id": 844424930131971, "label": "Object", "properties": {}}::vertex (1 row) SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE NOT EXISTS((n1)-[]->(n2)) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); n1 | n2 ----------------------------------------------------------------------+---------------------------------------------------------------------- {"id": 844424930131969, "label": "Object", "properties": {}}::vertex | {"id": 844424930131969, "label": "Object", "properties": {}}::vertex {"id": 844424930131969, "label": "Object", "properties": {}}::vertex | {"id": 844424930131970, "label": "Object", "properties": {}}::vertex {"id": 844424930131969, "label": "Object", "properties": {}}::vertex | {"id": 844424930131971, "label": "Object", "properties": {}}::vertex {"id": 844424930131970, "label": "Object", "properties": {}}::vertex | {"id": 844424930131969, "label": "Object", "properties": {}}::vertex {"id": 844424930131970, "label": "Object", "properties": {}}::vertex | {"id": 844424930131970, "label": "Object", "properties": {}}::vertex {"id": 844424930131971, "label": "Object", "properties": {}}::vertex | {"id": 844424930131969, "label": "Object", "properties": {}}::vertex {"id": 844424930131971, "label": "Object", "properties": {}}::vertex | {"id": 844424930131970, "label": "Object", "properties": {}}::vertex {"id": 844424930131971, "label": "Object", "properties": {}}::vertex | {"id": 844424930131971, "label": "Object", "properties": {}}::vertex (8 rows) SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE NOT EXISTS((n1:Object)-[]->(n2:Object)) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); n1 | n2 ----------------------------------------------------------------------+---------------------------------------------------------------------- {"id": 844424930131969, "label": "Object", "properties": {}}::vertex | {"id": 844424930131969, "label": "Object", "properties": {}}::vertex {"id": 844424930131969, "label": "Object", "properties": {}}::vertex | {"id": 844424930131970, "label": "Object", "properties": {}}::vertex {"id": 844424930131969, "label": "Object", "properties": {}}::vertex | {"id": 844424930131971, "label": "Object", "properties": {}}::vertex {"id": 844424930131970, "label": "Object", "properties": {}}::vertex | {"id": 844424930131969, "label": "Object", "properties": {}}::vertex {"id": 844424930131970, "label": "Object", "properties": {}}::vertex | {"id": 844424930131970, "label": "Object", "properties": {}}::vertex {"id": 844424930131971, "label": "Object", "properties": {}}::vertex | {"id": 844424930131969, "label": "Object", "properties": {}}::vertex {"id": 844424930131971, "label": "Object", "properties": {}}::vertex | {"id": 844424930131970, "label": "Object", "properties": {}}::vertex {"id": 844424930131971, "label": "Object", "properties": {}}::vertex | {"id": 844424930131971, "label": "Object", "properties": {}}::vertex (8 rows) SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE EXISTS((n1)-[]->()) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); n1 | n2 ----------------------------------------------------------------------+---------------------------------------------------------------------- {"id": 844424930131970, "label": "Object", "properties": {}}::vertex | {"id": 844424930131969, "label": "Object", "properties": {}}::vertex {"id": 844424930131970, "label": "Object", "properties": {}}::vertex | {"id": 844424930131970, "label": "Object", "properties": {}}::vertex {"id": 844424930131970, "label": "Object", "properties": {}}::vertex | {"id": 844424930131971, "label": "Object", "properties": {}}::vertex (3 rows) SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE NOT EXISTS((n1)-[]->()) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); n1 | n2 ----------------------------------------------------------------------+---------------------------------------------------------------------- {"id": 844424930131969, "label": "Object", "properties": {}}::vertex | {"id": 844424930131969, "label": "Object", "properties": {}}::vertex {"id": 844424930131971, "label": "Object", "properties": {}}::vertex | {"id": 844424930131969, "label": "Object", "properties": {}}::vertex {"id": 844424930131969, "label": "Object", "properties": {}}::vertex | {"id": 844424930131970, "label": "Object", "properties": {}}::vertex {"id": 844424930131971, "label": "Object", "properties": {}}::vertex | {"id": 844424930131970, "label": "Object", "properties": {}}::vertex {"id": 844424930131969, "label": "Object", "properties": {}}::vertex | {"id": 844424930131971, "label": "Object", "properties": {}}::vertex {"id": 844424930131971, "label": "Object", "properties": {}}::vertex | {"id": 844424930131971, "label": "Object", "properties": {}}::vertex (6 rows) SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE EXISTS((n1:Object)-[]->()) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); n1 | n2 ----------------------------------------------------------------------+---------------------------------------------------------------------- {"id": 844424930131970, "label": "Object", "properties": {}}::vertex | {"id": 844424930131969, "label": "Object", "properties": {}}::vertex {"id": 844424930131970, "label": "Object", "properties": {}}::vertex | {"id": 844424930131970, "label": "Object", "properties": {}}::vertex {"id": 844424930131970, "label": "Object", "properties": {}}::vertex | {"id": 844424930131971, "label": "Object", "properties": {}}::vertex (3 rows) SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE NOT EXISTS((n1:Object)-[]->()) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); n1 | n2 ----------------------------------------------------------------------+---------------------------------------------------------------------- {"id": 844424930131969, "label": "Object", "properties": {}}::vertex | {"id": 844424930131969, "label": "Object", "properties": {}}::vertex {"id": 844424930131971, "label": "Object", "properties": {}}::vertex | {"id": 844424930131969, "label": "Object", "properties": {}}::vertex {"id": 844424930131969, "label": "Object", "properties": {}}::vertex | {"id": 844424930131970, "label": "Object", "properties": {}}::vertex {"id": 844424930131971, "label": "Object", "properties": {}}::vertex | {"id": 844424930131970, "label": "Object", "properties": {}}::vertex {"id": 844424930131969, "label": "Object", "properties": {}}::vertex | {"id": 844424930131971, "label": "Object", "properties": {}}::vertex {"id": 844424930131971, "label": "Object", "properties": {}}::vertex | {"id": 844424930131971, "label": "Object", "properties": {}}::vertex (6 rows) -- should error SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE EXISTS((n1:object)-[]->()) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); ERROR: multiple labels for variable 'n1' are not supported LINE 2: ...MATCH (n1:Object) MATCH (n2:Object) WHERE EXISTS((n1:object)... ^ SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE NOT EXISTS((n1:object)-[]->()) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); ERROR: multiple labels for variable 'n1' are not supported LINE 2: ...H (n1:Object) MATCH (n2:Object) WHERE NOT EXISTS((n1:object)... ^ SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE NOT EXISTS((n1)-[e]->()) RETURN n1,n2,e $$) AS (n1 agtype, n2 agtype, e agtype); ERROR: variable `e` does not exist LINE 2: ...1:Object) MATCH (n2:Object) WHERE NOT EXISTS((n1)-[e]->()) R... ^ -- edge cases SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE EXISTS((n1)-[e1]->(n2)) RETURN e1 $$) AS (e1 agtype); e1 ---------------------------------------------------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "knows", "end_id": 844424930131971, "start_id": 844424930131970, "properties": {}}::edge (1 row) SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE EXISTS((n1:Object)-[e1:knows]->(n2:Object)) RETURN e1 $$) AS (e1 agtype); e1 ---------------------------------------------------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "knows", "end_id": 844424930131971, "start_id": 844424930131970, "properties": {}}::edge (1 row) SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE NOT EXISTS((n1)-[e1]->(n2)) RETURN e1 $$) AS (e1 agtype); e1 ---------------------------------------------------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "knows", "end_id": 844424930131971, "start_id": 844424930131970, "properties": {}}::edge {"id": 1125899906842625, "label": "knows", "end_id": 844424930131971, "start_id": 844424930131970, "properties": {}}::edge (2 rows) SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE NOT EXISTS((n1:Object)-[e1:knows]->(n2:Object)) RETURN e1 $$) AS (e1 agtype); e1 ---------------------------------------------------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "knows", "end_id": 844424930131971, "start_id": 844424930131970, "properties": {}}::edge {"id": 1125899906842625, "label": "knows", "end_id": 844424930131971, "start_id": 844424930131970, "properties": {}}::edge (2 rows) SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE EXISTS((n1)-[e1]->()) RETURN e1 $$) AS (e1 agtype); e1 ---------------------------------------------------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "knows", "end_id": 844424930131971, "start_id": 844424930131970, "properties": {}}::edge {"id": 1125899906842625, "label": "knows", "end_id": 844424930131971, "start_id": 844424930131970, "properties": {}}::edge {"id": 1125899906842625, "label": "knows", "end_id": 844424930131971, "start_id": 844424930131970, "properties": {}}::edge (3 rows) SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE EXISTS((n1:Object)-[e1:knows]->(n2:Object)) RETURN e1 $$) AS (e1 agtype); e1 ---------------------------------------------------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "knows", "end_id": 844424930131971, "start_id": 844424930131970, "properties": {}}::edge (1 row) SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE NOT EXISTS((n1)-[e1]->()) RETURN e1 $$) AS (e1 agtype); e1 ---- (0 rows) SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE NOT EXISTS((n1:Object)-[e1:knows]->(n2:Object)) RETURN e1 $$) AS (e1 agtype); e1 ---------------------------------------------------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "knows", "end_id": 844424930131971, "start_id": 844424930131970, "properties": {}}::edge {"id": 1125899906842625, "label": "knows", "end_id": 844424930131971, "start_id": 844424930131970, "properties": {}}::edge (2 rows) -- should error SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE EXISTS((n1:Object)-[e1:Knows]->(n2:Object)) RETURN e1 $$) AS (e1 agtype); ERROR: multiple labels for variable 'e1' are not supported LINE 2: ...s]->() MATCH (n2:Object) WHERE EXISTS((n1:Object)-[e1:Knows]... ^ SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE NOT EXISTS((n1:Object)-[e1:Knows]->(n2:Object)) RETURN e1 $$) AS (e1 agtype); ERROR: multiple labels for variable 'e1' are not supported LINE 2: ...() MATCH (n2:Object) WHERE NOT EXISTS((n1:Object)-[e1:Knows]... ^ SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE EXISTS((e1:Object)-[e1:Knows]->(n2:Object)) RETURN e1 $$) AS (e1 agtype); ERROR: variable 'e1' is for an edge LINE 2: ...t)-[e1:knows]->() MATCH (n2:Object) WHERE EXISTS((e1:Object)... ^ SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE NOT EXISTS((n1:Object)-[e1:knows]->(e1)) RETURN e1 $$) AS (e1 agtype); ERROR: variable 'e1' is for an edge LINE 2: ...Object) WHERE NOT EXISTS((n1:Object)-[e1:knows]->(e1)) RETUR... ^ SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE NOT EXISTS((n1:Object)-[e1:knows]->(e2)) RETURN e1 $$) AS (e1 agtype); ERROR: variable `e2` does not exist LINE 2: ...Object) WHERE NOT EXISTS((n1:Object)-[e1:knows]->(e2)) RETUR... ^ SELECT * FROM cypher('issue_1393', $$ MATCH p=(n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE EXISTS((n1:Object)-[p]->(e2)) RETURN e1 $$) AS (e1 agtype); ERROR: variable 'p' is for a path LINE 2: ...s]->() MATCH (n2:Object) WHERE EXISTS((n1:Object)-[p]->(e2))... ^ SELECT * FROM cypher('issue_1393', $$ MATCH p=(n1)-[e1]->() MATCH (n2) WHERE EXISTS((n1)-[p]->(e2)) RETURN p $$) AS (e1 agtype); ERROR: variable 'p' is for a path LINE 2: ...ATCH p=(n1)-[e1]->() MATCH (n2) WHERE EXISTS((n1)-[p]->(e2))... ^ -- long cases SELECT * FROM cypher('issue_1393', $$ MATCH (n1) MATCH (n2) MATCH (n1)-[e1]->() MATCH (n2)<-[e2]-(n1) MATCH (n3) WHERE EXISTS((n3)-[e1]->(n2)) RETURN n1,n2,n3,e1 $$) AS (n1 agtype, n2 agtype, n3 agtype, e1 agtype); n1 | n2 | n3 | e1 ----------------------------------------------------------------------+----------------------------------------------------------------------+----------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------- {"id": 844424930131970, "label": "Object", "properties": {}}::vertex | {"id": 844424930131971, "label": "Object", "properties": {}}::vertex | {"id": 844424930131970, "label": "Object", "properties": {}}::vertex | {"id": 1125899906842625, "label": "knows", "end_id": 844424930131971, "start_id": 844424930131970, "properties": {}}::edge (1 row) SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) MATCH (n1)-[e1:knows]->() MATCH (n2)<-[e2:knows]-(n1) MATCH (n3:Object) WHERE EXISTS((n3:Object)-[e1:knows]->(n2:Object)) RETURN n1,n2,n3,e1 $$) AS (n1 agtype, n2 agtype, n3 agtype, e1 agtype); n1 | n2 | n3 | e1 ----------------------------------------------------------------------+----------------------------------------------------------------------+----------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------- {"id": 844424930131970, "label": "Object", "properties": {}}::vertex | {"id": 844424930131971, "label": "Object", "properties": {}}::vertex | {"id": 844424930131970, "label": "Object", "properties": {}}::vertex | {"id": 1125899906842625, "label": "knows", "end_id": 844424930131971, "start_id": 844424930131970, "properties": {}}::edge (1 row) -- -- Clean up -- SELECT drop_graph('cypher_match', true); NOTICE: drop cascades to 17 other objects DETAIL: drop cascades to table cypher_match._ag_label_vertex drop cascades to table cypher_match._ag_label_edge drop cascades to table cypher_match.v drop cascades to table cypher_match.v1 drop cascades to table cypher_match.e1 drop cascades to table cypher_match.v2 drop cascades to table cypher_match.e2 drop cascades to table cypher_match.v3 drop cascades to table cypher_match.e3 drop cascades to table cypher_match.loop drop cascades to table cypher_match.self drop cascades to table cypher_match.duplicate drop cascades to table cypher_match.dup_edge drop cascades to table cypher_match.other_v drop cascades to table cypher_match.opt_match_v drop cascades to table cypher_match.opt_match_e drop cascades to table cypher_match.knows NOTICE: graph "cypher_match" has been dropped drop_graph ------------ (1 row) SELECT drop_graph('test_retrieve_var', true); NOTICE: drop cascades to 5 other objects DETAIL: drop cascades to table test_retrieve_var._ag_label_vertex drop cascades to table test_retrieve_var._ag_label_edge drop cascades to table test_retrieve_var."A" drop cascades to table test_retrieve_var.incs drop cascades to table test_retrieve_var."C" NOTICE: graph "test_retrieve_var" has been dropped drop_graph ------------ (1 row) SELECT drop_graph('test_enable_containment', true); NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to table test_enable_containment._ag_label_vertex drop cascades to table test_enable_containment._ag_label_edge drop cascades to table test_enable_containment."Customer" NOTICE: graph "test_enable_containment" has been dropped drop_graph ------------ (1 row) SELECT drop_graph('issue_945', true); NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to table issue_945._ag_label_vertex drop cascades to table issue_945._ag_label_edge drop cascades to table issue_945."Part" NOTICE: graph "issue_945" has been dropped drop_graph ------------ (1 row) SELECT drop_graph('issue_1399', true); NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to table issue_1399._ag_label_vertex drop cascades to table issue_1399._ag_label_edge drop cascades to table issue_1399."BAR" NOTICE: graph "issue_1399" has been dropped drop_graph ------------ (1 row) SELECT drop_graph('issue_1393', true); NOTICE: drop cascades to 4 other objects DETAIL: drop cascades to table issue_1393._ag_label_vertex drop cascades to table issue_1393._ag_label_edge drop cascades to table issue_1393."Object" drop cascades to table issue_1393.knows NOTICE: graph "issue_1393" has been dropped drop_graph ------------ (1 row) -- -- End -- age-PG16-v1.5.0-rc0/regress/expected/cypher_merge.out000066400000000000000000001771111454606241200222650ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher_merge'); NOTICE: graph "cypher_merge" has been created create_graph -------------- (1 row) /* * Section 1: MERGE with single vertex */ /* * test 1: Single MERGE Clause, path doesn't exist */ --test query SELECT * FROM cypher('cypher_merge', $$MERGE (n {i: "Hello Merge", j: (null IS NULL), k: (null IS NOT NULL)})$$) AS (a agtype); a --- (0 rows) --validate SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype); n --------------------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"i": "Hello Merge", "j": true, "k": false}}::vertex (1 row) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 2: Single MERGE Clause, path exists */ --data setup SELECT * FROM cypher('cypher_merge', $$CREATE ({i: "Hello Merge", j: (null IS NULL)}) $$) AS (a agtype); a --- (0 rows) --test_query SELECT * FROM cypher('cypher_merge', $$MERGE ({i: "Hello Merge"})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_merge', $$MERGE ({j: (null IS NULL)})$$) AS (a agtype); a --- (0 rows) --validate SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype); n --------------------------------------------------------------------------------------------- {"id": 281474976710658, "label": "", "properties": {"i": "Hello Merge", "j": true}}::vertex (1 row) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 3: Prev clause returns no results, no data created */ --test query SELECT * FROM cypher('cypher_merge', $$MATCH (n) MERGE ({i: n.i})$$) AS (a agtype); a --- (0 rows) --validate SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype); n --- (0 rows) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 4: Prev clause has results, path exists */ --test query SELECT * FROM cypher('cypher_merge', $$CREATE ({i: "Hello Merge"}) $$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_merge', $$MATCH (n) MERGE ({i: n.i})$$) AS (a agtype); a --- (0 rows) --validate SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype); n ---------------------------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {"i": "Hello Merge"}}::vertex (1 row) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 5: Prev clause has results, path does not exist (different property name) */ --data setup SELECT * FROM cypher('cypher_merge', $$CREATE ({i: "Hello Merge"}) $$) AS (a agtype); a --- (0 rows) --test query SELECT * FROM cypher('cypher_merge', $$MATCH (n) MERGE ({j: n.i})$$) AS (a agtype); a --- (0 rows) --validate SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype); n ---------------------------------------------------------------------------------- {"id": 281474976710660, "label": "", "properties": {"i": "Hello Merge"}}::vertex {"id": 281474976710661, "label": "", "properties": {"j": "Hello Merge"}}::vertex (2 rows) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 6: MERGE with no prev clause, filters correctly, data created */ -- setup SELECT * FROM cypher('cypher_merge', $$CREATE ({i: 2}) $$) AS (a agtype); a --- (0 rows) --test query SELECT * FROM cypher('cypher_merge', $$MERGE (n {i: 1}) RETURN n$$) AS (a agtype); a ---------------------------------------------------------------------- {"id": 281474976710663, "label": "", "properties": {"i": 1}}::vertex (1 row) --validate SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype); n ---------------------------------------------------------------------- {"id": 281474976710662, "label": "", "properties": {"i": 2}}::vertex {"id": 281474976710663, "label": "", "properties": {"i": 1}}::vertex (2 rows) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 7: MERGE with no prev clause, filters correctly, no data created */ -- setup SELECT * FROM cypher('cypher_merge', $$CREATE ({i: 1}) $$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_merge', $$CREATE ({i: 1}) $$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_merge', $$CREATE ({i: 2}) $$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_merge', $$CREATE () $$) AS (a agtype); a --- (0 rows) --test query SELECT * FROM cypher('cypher_merge', $$MERGE (n {i: 1}) RETURN n$$) AS (a agtype); a ---------------------------------------------------------------------- {"id": 281474976710664, "label": "", "properties": {"i": 1}}::vertex {"id": 281474976710665, "label": "", "properties": {"i": 1}}::vertex (2 rows) --validate SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype); n ---------------------------------------------------------------------- {"id": 281474976710664, "label": "", "properties": {"i": 1}}::vertex {"id": 281474976710665, "label": "", "properties": {"i": 1}}::vertex {"id": 281474976710666, "label": "", "properties": {"i": 2}}::vertex {"id": 281474976710667, "label": "", "properties": {}}::vertex (4 rows) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * Section 2: MERGE with edges */ /* * test 8: MERGE creates edge */ -- setup SELECT * FROM cypher('cypher_merge', $$CREATE () $$) AS (a agtype); a --- (0 rows) --test query SELECT * FROM cypher('cypher_merge', $$MATCH (n) MERGE (n)-[:e]->(:v)$$) AS (a agtype); a --- (0 rows) --validate SELECT * FROM cypher('cypher_merge', $$MATCH (n)-[e:e]->(m:v) RETURN n, e, m$$) AS (n agtype, e agtype, m agtype); n | e | m ----------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------ {"id": 281474976710668, "label": "", "properties": {}}::vertex | {"id": 844424930131969, "label": "e", "end_id": 1125899906842625, "start_id": 281474976710668, "properties": {}}::edge | {"id": 1125899906842625, "label": "v", "properties": {}}::vertex (1 row) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 9: edge already exists */ -- setup SELECT * FROM cypher('cypher_merge', $$CREATE ()-[:e]->() $$) AS (a agtype); a --- (0 rows) --test query SELECT * FROM cypher('cypher_merge', $$MERGE (n)-[:e]->(:v)$$) AS (a agtype); a --- (0 rows) --validate SELECT * FROM cypher('cypher_merge', $$MATCH (n)-[e:e]->(m:v) RETURN n, e, m$$) AS (n agtype, e agtype, m agtype); n | e | m ----------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------ {"id": 281474976710671, "label": "", "properties": {}}::vertex | {"id": 844424930131971, "label": "e", "end_id": 1125899906842626, "start_id": 281474976710671, "properties": {}}::edge | {"id": 1125899906842626, "label": "v", "properties": {}}::vertex (1 row) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 10: edge doesn't exist, using MATCH */ -- setup SELECT * FROM cypher('cypher_merge', $$CREATE () $$) AS (a agtype); a --- (0 rows) --test query SELECT * FROM cypher('cypher_merge', $$MATCH (n) MERGE (n)-[:e]->(:v)$$) AS (a agtype); a --- (0 rows) --validate created correctly SELECT * FROM cypher('cypher_merge', $$MATCH (n)-[e:e]->(m:v) RETURN n, e, m$$) AS (n agtype, e agtype, m agtype); n | e | m ----------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------ {"id": 281474976710672, "label": "", "properties": {}}::vertex | {"id": 844424930131972, "label": "e", "end_id": 1125899906842627, "start_id": 281474976710672, "properties": {}}::edge | {"id": 1125899906842627, "label": "v", "properties": {}}::vertex (1 row) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 11: edge already exists, using MATCH */ -- setup SELECT * FROM cypher('cypher_merge', $$CREATE ()-[:e]->() $$) AS (a agtype); a --- (0 rows) --test query SELECT * FROM cypher('cypher_merge', $$MATCH (n) MERGE (n)-[:e]->(:v)$$) AS (a agtype); a --- (0 rows) --validate created correctly SELECT * FROM cypher('cypher_merge', $$MATCH (n)-[e:e]->(m:v) RETURN n, e, m$$) AS (n agtype, e agtype, m agtype); n | e | m ----------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------ {"id": 281474976710673, "label": "", "properties": {}}::vertex | {"id": 844424930131974, "label": "e", "end_id": 1125899906842628, "start_id": 281474976710673, "properties": {}}::edge | {"id": 1125899906842628, "label": "v", "properties": {}}::vertex {"id": 281474976710674, "label": "", "properties": {}}::vertex | {"id": 844424930131975, "label": "e", "end_id": 1125899906842629, "start_id": 281474976710674, "properties": {}}::edge | {"id": 1125899906842629, "label": "v", "properties": {}}::vertex (2 rows) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 12: Partial Path Exists, creates whole path */ -- setup SELECT * FROM cypher('cypher_merge', $$CREATE ()-[:e]->() $$) AS (a agtype); a --- (0 rows) --test query SELECT * FROM cypher('cypher_merge', $$MERGE ()-[:e]->()-[:e]->()$$) AS (a agtype); a --- (0 rows) --validate created correctly --Returns 3. One for the data setup and 2 for the longer path in MERGE SELECT count(*) FROM cypher('cypher_merge', $$MATCH p=()-[e:e]->() RETURN p$$) AS (p agtype); count ------- 3 (1 row) -- Returns 1, the path created in MERGE SELECT count(*) FROM cypher('cypher_merge', $$MATCH p=()-[:e]->()-[]->() RETURN p$$) AS (p agtype); count ------- 1 (1 row) -- 5 vertices total should have been created SELECT count(*) FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype); count ------- 5 (1 row) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 13: edge doesn't exists (different label), using MATCH */ -- setup SELECT * FROM cypher('cypher_merge', $$CREATE ()-[:e]->() $$) AS (a agtype); a --- (0 rows) --test query SELECT * FROM cypher('cypher_merge', $$MATCH (n) MERGE (n)-[:e_new]->(:v)$$) AS (a agtype); a --- (0 rows) --validate created correctly SELECT * FROM cypher('cypher_merge', $$MATCH (n)-[e]->(m:v) RETURN n, e, m$$) AS (n agtype, e agtype, m agtype); n | e | m ----------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------ {"id": 281474976710680, "label": "", "properties": {}}::vertex | {"id": 1407374883553281, "label": "e_new", "end_id": 1125899906842630, "start_id": 281474976710680, "properties": {}}::edge | {"id": 1125899906842630, "label": "v", "properties": {}}::vertex {"id": 281474976710681, "label": "", "properties": {}}::vertex | {"id": 1407374883553282, "label": "e_new", "end_id": 1125899906842631, "start_id": 281474976710681, "properties": {}}::edge | {"id": 1125899906842631, "label": "v", "properties": {}}::vertex (2 rows) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 14: edge doesn't exists (different label), without MATCH */ -- setup SELECT * FROM cypher('cypher_merge', $$CREATE ()-[:e]->() $$) AS (a agtype); a --- (0 rows) --test query SELECT * FROM cypher('cypher_merge', $$MERGE (n)-[:e_new]->(:v)$$) AS (a agtype); a --- (0 rows) --validate created correctly SELECT * FROM cypher('cypher_merge', $$MATCH (n)-[e]->(m:v) RETURN n, e, m$$) AS (n agtype, e agtype, m agtype); n | e | m ----------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------ {"id": 281474976710684, "label": "", "properties": {}}::vertex | {"id": 1407374883553283, "label": "e_new", "end_id": 1125899906842632, "start_id": 281474976710684, "properties": {}}::edge | {"id": 1125899906842632, "label": "v", "properties": {}}::vertex (1 row) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * Section 3: MERGE with writing clauses */ /* * test 15: */ --test query SELECT * FROM cypher('cypher_merge', $$CREATE () MERGE (n)$$) AS (a agtype); a --- (0 rows) --validate created correctly SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype); n ---------------------------------------------------------------- {"id": 281474976710685, "label": "", "properties": {}}::vertex (1 row) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 16: */ --test query SELECT * FROM cypher('cypher_merge', $$CREATE (n) WITH n as a MERGE (a)-[:e]->() $$) AS (a agtype); a --- (0 rows) --validate created correctly SELECT * FROM cypher('cypher_merge', $$MATCH p=()-[:e]->() RETURN p$$) AS (p agtype); p --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710687, "label": "", "properties": {}}::vertex, {"id": 844424930131981, "label": "e", "end_id": 281474976710688, "start_id": 281474976710687, "properties": {}}::edge, {"id": 281474976710688, "label": "", "properties": {}}::vertex]::path (1 row) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 17: */ --test query SELECT * FROM cypher('cypher_merge', $$CREATE (n) MERGE (n)-[:e]->() $$) AS (a agtype); a --- (0 rows) --validate created correctly SELECT * FROM cypher('cypher_merge', $$MATCH p=()-[:e]->() RETURN p$$) AS (p agtype); p --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710689, "label": "", "properties": {}}::vertex, {"id": 844424930131982, "label": "e", "end_id": 281474976710690, "start_id": 281474976710689, "properties": {}}::edge, {"id": 281474976710690, "label": "", "properties": {}}::vertex]::path (1 row) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 18: */ --test query SELECT * FROM cypher('cypher_merge', $$CREATE (n {i : 1}) SET n.i = 2 MERGE ({i: 2}) $$) AS (a agtype); a --- (0 rows) --validate created correctly SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------------- {"id": 281474976710691, "label": "", "properties": {"i": 2}}::vertex (1 row) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 19: */ --test query SELECT * FROM cypher('cypher_merge', $$CREATE (n {i : 1}) SET n.i = 2 WITH n as a MERGE ({i: 2}) $$) AS (a agtype); a --- (0 rows) --validate created correctly SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------------- {"id": 281474976710692, "label": "", "properties": {"i": 2}}::vertex (1 row) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 20: */ --data setup SELECT * FROM cypher('cypher_merge', $$CREATE (n {i : 1})$$) AS (a agtype); a --- (0 rows) --test query SELECT * FROM cypher('cypher_merge', $$MATCH (n {i : 1}) SET n.i = 2 WITH n as a MERGE ({i: 2}) $$) AS (a agtype); a --- (0 rows) --validate created correctly SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------------- {"id": 281474976710693, "label": "", "properties": {"i": 2}}::vertex (1 row) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 21: */ --data setup SELECT * FROM cypher('cypher_merge', $$CREATE (n {i : 1})$$) AS (a agtype); a --- (0 rows) --test query SELECT * FROM cypher('cypher_merge', $$MATCH (n {i : 1}) DELETE n MERGE (n)-[:e]->() $$) AS (a agtype); ERROR: vertex assigned to variable n was deleted --validate, transaction was rolled back because of the error message SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------------- {"id": 281474976710694, "label": "", "properties": {"i": 1}}::vertex (1 row) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 22: * MERGE after MERGE */ SELECT * FROM cypher('cypher_merge', $$ CREATE (n:Person {name : "Rob Reiner", bornIn: "New York"}) $$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_merge', $$ CREATE (n:Person {name : "Michael Douglas", bornIn: "New Jersey"}) $$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_merge', $$ CREATE (n:Person {name : "Martin Sheen", bornIn: "Ohio"}) $$) AS (a agtype); a --- (0 rows) --test query SELECT * FROM cypher('cypher_merge', $$ MATCH (person:Person) MERGE (city:City {name: person.bornIn}) MERGE (person)-[r:BORN_IN]->(city) RETURN person.name, person.bornIn, city $$) AS (name agtype, bornIn agtype, city agtype); name | bornin | city -------------------+--------------+----------------------------------------------------------------------------------------- "Rob Reiner" | "New York" | {"id": 1970324836974593, "label": "City", "properties": {"name": "New York"}}::vertex "Martin Sheen" | "Ohio" | {"id": 1970324836974595, "label": "City", "properties": {"name": "Ohio"}}::vertex "Michael Douglas" | "New Jersey" | {"id": 1970324836974594, "label": "City", "properties": {"name": "New Jersey"}}::vertex (3 rows) --validate SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); a ------------------------------------------------------------------------------------------------------------------------ {"id": 1688849860263937, "label": "Person", "properties": {"name": "Rob Reiner", "bornIn": "New York"}}::vertex {"id": 1688849860263938, "label": "Person", "properties": {"name": "Michael Douglas", "bornIn": "New Jersey"}}::vertex {"id": 1688849860263939, "label": "Person", "properties": {"name": "Martin Sheen", "bornIn": "Ohio"}}::vertex {"id": 1970324836974593, "label": "City", "properties": {"name": "New York"}}::vertex {"id": 1970324836974594, "label": "City", "properties": {"name": "New Jersey"}}::vertex {"id": 1970324836974595, "label": "City", "properties": {"name": "Ohio"}}::vertex (6 rows) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 23: */ SELECT * FROM cypher('cypher_merge', $$MERGE ()-[:e]-()$$) AS (a agtype); a --- (0 rows) --validate SELECT * FROM cypher('cypher_merge', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710695, "label": "", "properties": {}}::vertex, {"id": 844424930131983, "label": "e", "end_id": 281474976710696, "start_id": 281474976710695, "properties": {}}::edge, {"id": 281474976710696, "label": "", "properties": {}}::vertex]::path (1 row) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 24: */ SELECT * FROM cypher('cypher_merge', $$MERGE (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------- {"id": 281474976710697, "label": "", "properties": {}}::vertex (1 row) --validate SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------- {"id": 281474976710697, "label": "", "properties": {}}::vertex (1 row) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 25: */ SELECT * FROM cypher('cypher_merge', $$MERGE p=()-[:e]-() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710698, "label": "", "properties": {}}::vertex, {"id": 844424930131984, "label": "e", "end_id": 281474976710699, "start_id": 281474976710698, "properties": {}}::edge, {"id": 281474976710699, "label": "", "properties": {}}::vertex]::path (1 row) --validate SELECT * FROM cypher('cypher_merge', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710698, "label": "", "properties": {}}::vertex, {"id": 844424930131984, "label": "e", "end_id": 281474976710699, "start_id": 281474976710698, "properties": {}}::edge, {"id": 281474976710699, "label": "", "properties": {}}::vertex]::path (1 row) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 26: */ SELECT * FROM cypher('cypher_merge', $$MERGE (a)-[:e]-(b) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------- {"id": 281474976710700, "label": "", "properties": {}}::vertex (1 row) --validate SELECT * FROM cypher('cypher_merge', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710700, "label": "", "properties": {}}::vertex, {"id": 844424930131985, "label": "e", "end_id": 281474976710701, "start_id": 281474976710700, "properties": {}}::edge, {"id": 281474976710701, "label": "", "properties": {}}::vertex]::path (1 row) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * test 27: */ SELECT * FROM cypher('cypher_merge', $$CREATE p=()-[:e]->() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710702, "label": "", "properties": {}}::vertex, {"id": 844424930131986, "label": "e", "end_id": 281474976710703, "start_id": 281474976710702, "properties": {}}::edge, {"id": 281474976710703, "label": "", "properties": {}}::vertex]::path (1 row) SELECT * FROM cypher('cypher_merge', $$MERGE p=()-[:e]-() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710702, "label": "", "properties": {}}::vertex, {"id": 844424930131986, "label": "e", "end_id": 281474976710703, "start_id": 281474976710702, "properties": {}}::edge, {"id": 281474976710703, "label": "", "properties": {}}::vertex]::path [{"id": 281474976710703, "label": "", "properties": {}}::vertex, {"id": 844424930131986, "label": "e", "end_id": 281474976710703, "start_id": 281474976710702, "properties": {}}::edge, {"id": 281474976710702, "label": "", "properties": {}}::vertex]::path (2 rows) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * Section 4: Error Messages */ /* * test 28: * Only single paths allowed */ SELECT * FROM cypher('cypher_merge', $$MERGE (n), (m) RETURN n, m$$) AS (a agtype, b agtype); ERROR: syntax error at or near "," LINE 8: SELECT * FROM cypher('cypher_merge', $$MERGE (n), (m) RETURN... ^ /* * test 29: * Edges cannot reference existing variables */ SELECT * FROM cypher('cypher_merge', $$MATCH ()-[e]-() MERGE ()-[e]->()$$) AS (a agtype); ERROR: variable e already exists LINE 5: ...cypher('cypher_merge', $$MATCH ()-[e]-() MERGE ()-[e]->()$$)... ^ /* * test 30: * NULL vertex given to MERGE */ --data setup SELECT * FROM cypher('cypher_merge', $$CREATE (n)$$) AS (a agtype); a --- (0 rows) --test query SELECT * FROM cypher('cypher_merge', $$MATCH (n) OPTIONAL MATCH (n)-[:e]->(m) MERGE (m)$$) AS (a agtype); ERROR: Existing variable m cannot be NULL in MERGE clause -- validate only 1 vertex exits SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (a agtype); a ---------------------------------------------------------------- {"id": 281474976710704, "label": "", "properties": {}}::vertex (1 row) -- -- MERGE/SET test -- Node does exist, then set (github issue #235) SELECT * FROM cypher('cypher_merge', $$ CREATE (n:node {name: 'Jason'}) RETURN n $$) AS (n agtype); n ------------------------------------------------------------------------------------ {"id": 2533274790395905, "label": "node", "properties": {"name": "Jason"}}::vertex (1 row) SELECT * FROM cypher('cypher_merge', $$ MATCH (n:node) RETURN n $$) AS (n agtype); n ------------------------------------------------------------------------------------ {"id": 2533274790395905, "label": "node", "properties": {"name": "Jason"}}::vertex (1 row) SELECT * FROM cypher('cypher_merge', $$ MERGE (n:node {name: 'Jason'}) SET n.name = 'Lisa' RETURN n $$) AS (n agtype); n ----------------------------------------------------------------------------------- {"id": 2533274790395905, "label": "node", "properties": {"name": "Lisa"}}::vertex (1 row) SELECT * FROM cypher('cypher_merge', $$ MATCH (n:node) RETURN n $$) AS (n agtype); n ----------------------------------------------------------------------------------- {"id": 2533274790395905, "label": "node", "properties": {"name": "Lisa"}}::vertex (1 row) -- Node doesn't exist, is created, then set SELECT * FROM cypher('cypher_merge', $$ MATCH (n:node) DELETE n $$) AS (n agtype); n --- (0 rows) SELECT * FROM cypher('cypher_merge', $$ MATCH (n:node) RETURN n $$) AS (n agtype); n --- (0 rows) SELECT * FROM cypher('cypher_merge', $$ MERGE (n:node {name: 'Jason'}) SET n.name = 'Lisa' RETURN n $$) AS (n agtype); n ----------------------------------------------------------------------------------- {"id": 2533274790395906, "label": "node", "properties": {"name": "Lisa"}}::vertex (1 row) SELECT * FROM cypher('cypher_merge', $$ MATCH (n:node) RETURN n $$) AS (n agtype); n ----------------------------------------------------------------------------------- {"id": 2533274790395906, "label": "node", "properties": {"name": "Lisa"}}::vertex (1 row) -- Multiple SETs SELECT * FROM cypher('cypher_merge', $$ MERGE (n:node {name: 'Lisa'}) SET n.age = 23, n.gender = "Female" RETURN n $$) AS (n agtype); n ------------------------------------------------------------------------------------------------------------------ {"id": 2533274790395906, "label": "node", "properties": {"age": 23, "name": "Lisa", "gender": "Female"}}::vertex (1 row) SELECT * FROM cypher('cypher_merge', $$ MATCH (n:node) RETURN n $$) AS (n agtype); n ------------------------------------------------------------------------------------------------------------------ {"id": 2533274790395906, "label": "node", "properties": {"age": 23, "name": "Lisa", "gender": "Female"}}::vertex (1 row) SELECT * FROM cypher('cypher_merge', $$ MERGE (n:node {name: 'Jason'}) SET n.name = 'Lisa', n.age = 23, n.gender = 'Female' RETURN n $$) AS (n agtype); n ------------------------------------------------------------------------------------------------------------------ {"id": 2533274790395907, "label": "node", "properties": {"age": 23, "name": "Lisa", "gender": "Female"}}::vertex (1 row) SELECT * FROM cypher('cypher_merge', $$ MATCH (n:node) RETURN n $$) AS (n agtype); n ------------------------------------------------------------------------------------------------------------------ {"id": 2533274790395906, "label": "node", "properties": {"age": 23, "name": "Lisa", "gender": "Female"}}::vertex {"id": 2533274790395907, "label": "node", "properties": {"age": 23, "name": "Lisa", "gender": "Female"}}::vertex (2 rows) -- -- Complex MERGE w/wo RETURN values -- -- The first one should create a path, the others should just return parts of it. SELECT * FROM cypher('cypher_merge', $$ MERGE ()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) $$) AS (x agtype); x --- (0 rows) SELECT * FROM cypher('cypher_merge', $$ MERGE ()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) RETURN x $$) AS (x agtype); x ------------------------------------------------------------------ {"id": 3096224743817217, "label": "C", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_merge', $$ MERGE p=()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) $$) AS (p agtype); p --- (0 rows) SELECT * FROM cypher('cypher_merge', $$ MERGE p=()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) RETURN p $$) AS (p agtype); p ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710705, "label": "", "properties": {}}::vertex, {"id": 2814749767106561, "label": "B", "end_id": 3096224743817217, "start_id": 281474976710705, "properties": {}}::edge, {"id": 3096224743817217, "label": "C", "properties": {}}::vertex, {"id": 3377699720527873, "label": "E", "end_id": 3096224743817217, "start_id": 3096224743817217, "properties": {}}::edge, {"id": 3096224743817217, "label": "C", "properties": {}}::vertex, {"id": 3659174697238529, "label": "F", "end_id": 3096224743817217, "start_id": 3940649673949185, "properties": {}}::edge, {"id": 3940649673949185, "label": "I", "properties": {}}::vertex]::path (1 row) SELECT * FROM cypher('cypher_merge', $$ MERGE p=()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) RETURN p $$) AS (p agtype); p ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710705, "label": "", "properties": {}}::vertex, {"id": 2814749767106561, "label": "B", "end_id": 3096224743817217, "start_id": 281474976710705, "properties": {}}::edge, {"id": 3096224743817217, "label": "C", "properties": {}}::vertex, {"id": 3377699720527873, "label": "E", "end_id": 3096224743817217, "start_id": 3096224743817217, "properties": {}}::edge, {"id": 3096224743817217, "label": "C", "properties": {}}::vertex, {"id": 3659174697238529, "label": "F", "end_id": 3096224743817217, "start_id": 3940649673949185, "properties": {}}::edge, {"id": 3940649673949185, "label": "I", "properties": {}}::vertex]::path (1 row) -- This should only return 1 row, as the path should already exist. SELECT * FROM cypher('cypher_merge', $$ MATCH p=()-[:B]->(:C)-[:E]->(:C)<-[:F]-(:I) RETURN p $$) AS (p agtype); p ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710705, "label": "", "properties": {}}::vertex, {"id": 2814749767106561, "label": "B", "end_id": 3096224743817217, "start_id": 281474976710705, "properties": {}}::edge, {"id": 3096224743817217, "label": "C", "properties": {}}::vertex, {"id": 3377699720527873, "label": "E", "end_id": 3096224743817217, "start_id": 3096224743817217, "properties": {}}::edge, {"id": 3096224743817217, "label": "C", "properties": {}}::vertex, {"id": 3659174697238529, "label": "F", "end_id": 3096224743817217, "start_id": 3940649673949185, "properties": {}}::edge, {"id": 3940649673949185, "label": "I", "properties": {}}::vertex]::path (1 row) -- test variable reuse in MERGE - the first MERGE of each group should create, -- the second MERGE shouldn't. SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:P)-[:E]->(x:P) RETURN p, x $$) AS (p agtype, x agtype); p | x ---+--- (0 rows) SELECT * FROM cypher('cypher_merge', $$ MERGE (x:P)-[:E]->(x:P) $$) AS (x agtype); x --- (0 rows) SELECT * FROM cypher('cypher_merge', $$ MERGE (x:P)-[:E]->(x) $$) AS (x agtype); x --- (0 rows) SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:P)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); p | x ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------ [{"id": 4222124650659841, "label": "P", "properties": {}}::vertex, {"id": 3377699720527874, "label": "E", "end_id": 4222124650659841, "start_id": 4222124650659841, "properties": {}}::edge, {"id": 4222124650659841, "label": "P", "properties": {}}::vertex]::path | {"id": 4222124650659841, "label": "P", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:Q)-[:E]->(x:Q) RETURN p, x $$) AS (p agtype, x agtype); p | x ---+--- (0 rows) SELECT * FROM cypher('cypher_merge', $$ MERGE (x:Q)-[:E]->(x) $$) AS (x agtype); x --- (0 rows) SELECT * FROM cypher('cypher_merge', $$ MERGE (x:Q)-[:E]->(x:Q) $$) AS (x agtype); x --- (0 rows) SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:Q)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); p | x ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------ [{"id": 4503599627370497, "label": "Q", "properties": {}}::vertex, {"id": 3377699720527875, "label": "E", "end_id": 4503599627370497, "start_id": 4503599627370497, "properties": {}}::edge, {"id": 4503599627370497, "label": "Q", "properties": {}}::vertex]::path | {"id": 4503599627370497, "label": "Q", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:R)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); p | x ---+--- (0 rows) SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:R)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); p | x ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------ [{"id": 4785074604081153, "label": "R", "properties": {}}::vertex, {"id": 3377699720527876, "label": "E", "end_id": 4785074604081153, "start_id": 4785074604081153, "properties": {}}::edge, {"id": 4785074604081153, "label": "R", "properties": {}}::vertex]::path | {"id": 4785074604081153, "label": "R", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:R)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); p | x ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------ [{"id": 4785074604081153, "label": "R", "properties": {}}::vertex, {"id": 3377699720527876, "label": "E", "end_id": 4785074604081153, "start_id": 4785074604081153, "properties": {}}::edge, {"id": 4785074604081153, "label": "R", "properties": {}}::vertex]::path | {"id": 4785074604081153, "label": "R", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:R)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); p | x ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------ [{"id": 4785074604081153, "label": "R", "properties": {}}::vertex, {"id": 3377699720527876, "label": "E", "end_id": 4785074604081153, "start_id": 4785074604081153, "properties": {}}::edge, {"id": 4785074604081153, "label": "R", "properties": {}}::vertex]::path | {"id": 4785074604081153, "label": "R", "properties": {}}::vertex (1 row) -- should return 4 rows SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); p | x ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------ [{"id": 3096224743817217, "label": "C", "properties": {}}::vertex, {"id": 3377699720527873, "label": "E", "end_id": 3096224743817217, "start_id": 3096224743817217, "properties": {}}::edge, {"id": 3096224743817217, "label": "C", "properties": {}}::vertex]::path | {"id": 3096224743817217, "label": "C", "properties": {}}::vertex [{"id": 4222124650659841, "label": "P", "properties": {}}::vertex, {"id": 3377699720527874, "label": "E", "end_id": 4222124650659841, "start_id": 4222124650659841, "properties": {}}::edge, {"id": 4222124650659841, "label": "P", "properties": {}}::vertex]::path | {"id": 4222124650659841, "label": "P", "properties": {}}::vertex [{"id": 4503599627370497, "label": "Q", "properties": {}}::vertex, {"id": 3377699720527875, "label": "E", "end_id": 4503599627370497, "start_id": 4503599627370497, "properties": {}}::edge, {"id": 4503599627370497, "label": "Q", "properties": {}}::vertex]::path | {"id": 4503599627370497, "label": "Q", "properties": {}}::vertex [{"id": 4785074604081153, "label": "R", "properties": {}}::vertex, {"id": 3377699720527876, "label": "E", "end_id": 4785074604081153, "start_id": 4785074604081153, "properties": {}}::edge, {"id": 4785074604081153, "label": "R", "properties": {}}::vertex]::path | {"id": 4785074604081153, "label": "R", "properties": {}}::vertex (4 rows) -- should create 1 row SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x)-[:E1]->(x) RETURN p, x $$) AS (p agtype, x agtype); p | x -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------- [{"id": 281474976710706, "label": "", "properties": {}}::vertex, {"id": 5066549580791809, "label": "E1", "end_id": 281474976710706, "start_id": 281474976710706, "properties": {}}::edge, {"id": 281474976710706, "label": "", "properties": {}}::vertex]::path | {"id": 281474976710706, "label": "", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x)-[:E1]->(x) RETURN p, x $$) AS (p agtype, x agtype); p | x -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------- [{"id": 281474976710706, "label": "", "properties": {}}::vertex, {"id": 5066549580791809, "label": "E1", "end_id": 281474976710706, "start_id": 281474976710706, "properties": {}}::edge, {"id": 281474976710706, "label": "", "properties": {}}::vertex]::path | {"id": 281474976710706, "label": "", "properties": {}}::vertex (1 row) -- the following should fail due to multiple labels SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x)-[:E]->(x:R) RETURN p, x $$) AS (p agtype, x agtype); ERROR: multiple labels for variable 'x' are not supported LINE 1: ...FROM cypher('cypher_merge', $$ MERGE p=(x)-[:E]->(x:R) RETUR... ^ SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:r)-[:E]->(x:R) RETURN p, x $$) AS (p agtype, x agtype); ERROR: multiple labels for variable 'x' are not supported LINE 1: ...OM cypher('cypher_merge', $$ MERGE p=(x:r)-[:E]->(x:R) RETUR... ^ SELECT * FROM cypher('cypher_merge', $$ MERGE (x)-[:E]->(x:R) $$) AS (x agtype); ERROR: multiple labels for variable 'x' are not supported LINE 1: ...* FROM cypher('cypher_merge', $$ MERGE (x)-[:E]->(x:R) $$) A... ^ SELECT * FROM cypher('cypher_merge', $$ MERGE (x:r)-[:E]->(x:R) $$) AS (x agtype); ERROR: multiple labels for variable 'x' are not supported LINE 1: ...FROM cypher('cypher_merge', $$ MERGE (x:r)-[:E]->(x:R) $$) A... ^ -- the following should fail due to reuse issues SELECT * FROM cypher('cypher_merge', $$ MERGE (x:r)-[y:E]->(x)-[y]->(x) $$) AS (x agtype); ERROR: a duplicate edge variable "y" is not permitted within a path LINE 1: ... cypher('cypher_merge', $$ MERGE (x:r)-[y:E]->(x)-[y]->(x) $... ^ SELECT * FROM cypher('cypher_merge', $$ MERGE (x:r)-[y:E]->(x)-[x]->(y) $$) AS (x agtype); ERROR: variable "x" is for an vertex LINE 1: ... cypher('cypher_merge', $$ MERGE (x:r)-[y:E]->(x)-[x]->(y) $... ^ SELECT * FROM cypher('cypher_merge', $$ MERGE (x:r)-[y:E]->(x)-[z:E]->(y) $$) AS (x agtype); ERROR: variable "y" is for a edge LINE 1: ...'cypher_merge', $$ MERGE (x:r)-[y:E]->(x)-[z:E]->(y) $$) AS ... ^ SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:r)-[y:E]->(x)-[p]->(x) $$) AS (x agtype); ERROR: variable "p" is for a path LINE 1: ...ypher('cypher_merge', $$ MERGE p=(x:r)-[y:E]->(x)-[p]->(x) $... ^ SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:r)-[y:E]->(x)-[p:E]->(x) $$) AS (x agtype); ERROR: variable "p" is for a path LINE 1: ...ypher('cypher_merge', $$ MERGE p=(x:r)-[y:E]->(x)-[p:E]->(x)... ^ SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:r)-[y:E]->(p)-[x]->(y) $$) AS (x agtype); ERROR: variable "p" is for a path LINE 1: ...M cypher('cypher_merge', $$ MERGE p=(x:r)-[y:E]->(p)-[x]->(y... ^ -- issue 1219 SELECT * FROM create_graph('issue_1219'); NOTICE: graph "issue_1219" has been created create_graph -------------- (1 row) SELECT * FROM cypher('issue_1219', $$ CREATE (x:Label1{arr:[1,2,3,4]}) RETURN x $$) as (a agtype); a ----------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "Label1", "properties": {"arr": [1, 2, 3, 4]}}::vertex (1 row) SELECT * FROM cypher('issue_1219', $$ MATCH (x:Label1{arr:[1,2,3,4]}) MERGE (y:Label2{key1:2, key2:x.arr, key3:3}) RETURN y $$) as (result agtype); result ----------------------------------------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "Label2", "properties": {"key1": 2, "key2": [1, 2, 3, 4], "key3": 3}}::vertex (1 row) SELECT * FROM cypher('issue_1219', $$ MATCH (x:Label1{arr:[1,2,3,4]}) MERGE (y:Label2{key2:id(x)}) RETURN y $$) as (result agtype); result ---------------------------------------------------------------------------------------------- {"id": 1125899906842626, "label": "Label2", "properties": {"key2": 844424930131969}}::vertex (1 row) SELECT * FROM cypher('issue_1219', $$ MATCH (x) RETURN x $$) as (a agtype); a ----------------------------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "Label1", "properties": {"arr": [1, 2, 3, 4]}}::vertex {"id": 1125899906842625, "label": "Label2", "properties": {"key1": 2, "key2": [1, 2, 3, 4], "key3": 3}}::vertex {"id": 1125899906842626, "label": "Label2", "properties": {"key2": 844424930131969}}::vertex (3 rows) -- these shouldn't create more SELECT * FROM cypher('issue_1219', $$ MATCH (x:Label1{arr:[1,2,3,4]}) MERGE (y:Label2{key1:2, key2:x.arr, key3:3}) RETURN y $$) as (result agtype); result ----------------------------------------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "Label2", "properties": {"key1": 2, "key2": [1, 2, 3, 4], "key3": 3}}::vertex (1 row) SELECT * FROM cypher('issue_1219', $$ MATCH (x:Label1{arr:[1,2,3,4]}) MERGE (y:Label2{key2:id(x)}) RETURN y $$) as (result agtype); result ---------------------------------------------------------------------------------------------- {"id": 1125899906842626, "label": "Label2", "properties": {"key2": 844424930131969}}::vertex (1 row) SELECT * FROM cypher('issue_1219', $$ MATCH (x) RETURN x $$) as (a agtype); a ----------------------------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "Label1", "properties": {"arr": [1, 2, 3, 4]}}::vertex {"id": 1125899906842625, "label": "Label2", "properties": {"key1": 2, "key2": [1, 2, 3, 4], "key3": 3}}::vertex {"id": 1125899906842626, "label": "Label2", "properties": {"key2": 844424930131969}}::vertex (3 rows) -- create a path SELECT * FROM cypher('issue_1219', $$ CREATE (u:Label1{name: "John"})-[e:knows]->(v:Label1{name: "Jane"}) $$) as (result agtype); result -------- (0 rows) SELECT * FROM cypher('issue_1219', $$ MATCH (u:Label1{name:"John"})-[e:knows]->(v:Label1{name: "Jane"}) MERGE (y:Label2{start_id:id(u), edge_id:id(e), end_id:id(v)}) RETURN y $$) as (result agtype); result ---------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 1125899906842627, "label": "Label2", "properties": {"end_id": 844424930131971, "edge_id": 1407374883553281, "start_id": 844424930131970}}::vertex (1 row) SELECT * FROM cypher('issue_1219', $$ MATCH (x) RETURN x $$) as (result agtype); result ---------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "Label1", "properties": {"arr": [1, 2, 3, 4]}}::vertex {"id": 844424930131970, "label": "Label1", "properties": {"name": "John"}}::vertex {"id": 844424930131971, "label": "Label1", "properties": {"name": "Jane"}}::vertex {"id": 1125899906842625, "label": "Label2", "properties": {"key1": 2, "key2": [1, 2, 3, 4], "key3": 3}}::vertex {"id": 1125899906842626, "label": "Label2", "properties": {"key2": 844424930131969}}::vertex {"id": 1125899906842627, "label": "Label2", "properties": {"end_id": 844424930131971, "edge_id": 1407374883553281, "start_id": 844424930131970}}::vertex (6 rows) SELECT * FROM cypher('issue_1219', $$ MATCH ()-[e]->() RETURN e $$) as (result agtype); result ---------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553281, "label": "knows", "end_id": 844424930131971, "start_id": 844424930131970, "properties": {}}::edge (1 row) SELECT drop_graph('issue_1219', true); NOTICE: drop cascades to 5 other objects DETAIL: drop cascades to table issue_1219._ag_label_vertex drop cascades to table issue_1219._ag_label_edge drop cascades to table issue_1219."Label1" drop cascades to table issue_1219."Label2" drop cascades to table issue_1219.knows NOTICE: graph "issue_1219" has been dropped drop_graph ------------ (1 row) --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * Clean up graph */ SELECT drop_graph('cypher_merge', true); NOTICE: drop cascades to 18 other objects DETAIL: drop cascades to table cypher_merge._ag_label_vertex drop cascades to table cypher_merge._ag_label_edge drop cascades to table cypher_merge.e drop cascades to table cypher_merge.v drop cascades to table cypher_merge.e_new drop cascades to table cypher_merge."Person" drop cascades to table cypher_merge."City" drop cascades to table cypher_merge."BORN_IN" drop cascades to table cypher_merge.node drop cascades to table cypher_merge."B" drop cascades to table cypher_merge."C" drop cascades to table cypher_merge."E" drop cascades to table cypher_merge."F" drop cascades to table cypher_merge."I" drop cascades to table cypher_merge."P" drop cascades to table cypher_merge."Q" drop cascades to table cypher_merge."R" drop cascades to table cypher_merge."E1" NOTICE: graph "cypher_merge" has been dropped drop_graph ------------ (1 row) age-PG16-v1.5.0-rc0/regress/expected/cypher_remove.out000066400000000000000000000650761454606241200224710ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher_remove'); NOTICE: graph "cypher_remove" has been created create_graph -------------- (1 row) --test 1 SELECT * FROM cypher('cypher_remove', $$CREATE (:test_1)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_remove', $$CREATE (:test_1 {i: 0, j: 5, a: 0})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_remove', $$CREATE (:test_1 {i: 1})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_remove', $$MATCH (n:test_1) REMOVE n.i $$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_remove', $$MATCH (n:test_1) RETURN n$$) AS (a agtype); a ------------------------------------------------------------------------------------ {"id": 844424930131969, "label": "test_1", "properties": {}}::vertex {"id": 844424930131970, "label": "test_1", "properties": {"a": 0, "j": 5}}::vertex {"id": 844424930131971, "label": "test_1", "properties": {}}::vertex (3 rows) --test 2 SELECT * FROM cypher('cypher_remove', $$CREATE (:test_2)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_remove', $$CREATE (:test_2 {i: 0, j: 5, a: 0})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_remove', $$CREATE (:test_2 {i: 1})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_remove', $$MATCH (n:test_2) REMOVE n.j RETURN n$$) AS (a agtype); a ------------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "test_2", "properties": {}}::vertex {"id": 1125899906842626, "label": "test_2", "properties": {"a": 0, "i": 0}}::vertex {"id": 1125899906842627, "label": "test_2", "properties": {"i": 1}}::vertex (3 rows) SELECT * FROM cypher('cypher_remove', $$MATCH (n:test_2) RETURN n$$) AS (a agtype); a ------------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "test_2", "properties": {}}::vertex {"id": 1125899906842626, "label": "test_2", "properties": {"a": 0, "i": 0}}::vertex {"id": 1125899906842627, "label": "test_2", "properties": {"i": 1}}::vertex (3 rows) --test 3 Validate Paths are updated SELECT * FROM cypher('cypher_remove', $$CREATE (:test_3 { i : 20 } )-[:test_3_edge {j:20}]->(:test_3 {i:10})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_remove', $$MATCH p=(n)-[:test_3_edge]->() REMOVE n.i RETURN p$$) AS (a agtype); a -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1407374883553281, "label": "test_3", "properties": {}}::vertex, {"id": 1688849860263937, "label": "test_3_edge", "end_id": 1407374883553282, "start_id": 1407374883553281, "properties": {"j": 20}}::edge, {"id": 1407374883553282, "label": "test_3", "properties": {"i": 10}}::vertex]::path (1 row) --test 4 Edges SELECT * FROM cypher('cypher_remove', $$CREATE (:test_4 { i : 20 } )-[:test_4_edge {j:20}]->(:test_4 {i:10})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_remove', $$MATCH ()-[n]->(:test_4) REMOVE n.i RETURN n$$) AS (a agtype); a ------------------------------------------------------------------------------------------------------------------------------------------- {"id": 2251799813685249, "label": "test_4_edge", "end_id": 1970324836974594, "start_id": 1970324836974593, "properties": {"j": 20}}::edge (1 row) SELECT * FROM cypher('cypher_remove', $$MATCH ()-[n]->(:test_4) RETURN n$$) AS (a agtype); a ------------------------------------------------------------------------------------------------------------------------------------------- {"id": 2251799813685249, "label": "test_4_edge", "end_id": 1970324836974594, "start_id": 1970324836974593, "properties": {"j": 20}}::edge (1 row) --test 5 two REMOVE clauses SELECT * FROM cypher('cypher_remove', $$CREATE (:test_5 {i: 1, j : 2, k : 3}) $$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_remove', $$ MATCH (n:test_5) REMOVE n.i REMOVE n.j RETURN n $$) AS (a agtype); a ----------------------------------------------------------------------------- {"id": 2533274790395905, "label": "test_5", "properties": {"k": 3}}::vertex (1 row) SELECT * FROM cypher('cypher_remove', $$ MATCH (n:test_5) RETURN n $$) AS (a agtype); a ----------------------------------------------------------------------------- {"id": 2533274790395905, "label": "test_5", "properties": {"k": 3}}::vertex (1 row) --test 6 Create a loop and see that set can work after create SELECT * FROM cypher('cypher_remove', $$CREATE (:test_6 {j: 5, y: 99})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_remove', $$ MATCH (n {j: 5}) CREATE p=(n)-[e:e {j:34}]->(n) REMOVE n.y RETURN n, p $$) AS (a agtype, b agtype); a | b ------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 844424930131970, "label": "test_1", "properties": {"a": 0, "j": 5}}::vertex | [{"id": 844424930131970, "label": "test_1", "properties": {"a": 0, "j": 5}}::vertex, {"id": 3096224743817217, "label": "e", "end_id": 844424930131970, "start_id": 844424930131970, "properties": {"j": 34}}::edge, {"id": 844424930131970, "label": "test_1", "properties": {"a": 0, "j": 5}}::vertex]::path {"id": 2814749767106561, "label": "test_6", "properties": {"j": 5}}::vertex | [{"id": 2814749767106561, "label": "test_6", "properties": {"j": 5}}::vertex, {"id": 3096224743817218, "label": "e", "end_id": 2814749767106561, "start_id": 2814749767106561, "properties": {"j": 34}}::edge, {"id": 2814749767106561, "label": "test_6", "properties": {"j": 5}}::vertex]::path (2 rows) SELECT * FROM cypher('cypher_remove', $$MATCH (n:test_6) RETURN n$$) AS (a agtype); a ----------------------------------------------------------------------------- {"id": 2814749767106561, "label": "test_6", "properties": {"j": 5}}::vertex (1 row) --test 7 Create a loop and see that set can work after create SELECT * FROM cypher('cypher_remove', $$ CREATE (:test_7)-[e:e {j:34}]->() REMOVE e.y RETURN e $$) AS (a agtype); a -------------------------------------------------------------------------------------------------------------------------------- {"id": 3096224743817219, "label": "e", "end_id": 281474976710657, "start_id": 3377699720527873, "properties": {"j": 34}}::edge (1 row) SELECT * FROM cypher('cypher_remove', $$MATCH (n:test_7) RETURN n$$) AS (a agtype); a ----------------------------------------------------------------------- {"id": 3377699720527873, "label": "test_7", "properties": {}}::vertex (1 row) --test 8 SELECT * FROM cypher('cypher_remove', $$ MATCH (n:test_7) MATCH (n)-[e:e {j:34}]->() REMOVE n.y RETURN n $$) AS (a agtype); a ----------------------------------------------------------------------- {"id": 3377699720527873, "label": "test_7", "properties": {}}::vertex (1 row) --Handle Inheritance SELECT * FROM cypher('cypher_remove', $$CREATE ( {i : 1 })$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_remove', $$MATCH (n) REMOVE n.i RETURN n$$) AS (a agtype); a ------------------------------------------------------------------------------------ {"id": 281474976710657, "label": "", "properties": {}}::vertex {"id": 281474976710658, "label": "", "properties": {}}::vertex {"id": 844424930131969, "label": "test_1", "properties": {}}::vertex {"id": 844424930131971, "label": "test_1", "properties": {}}::vertex {"id": 844424930131970, "label": "test_1", "properties": {"a": 0, "j": 5}}::vertex {"id": 1125899906842625, "label": "test_2", "properties": {}}::vertex {"id": 1125899906842626, "label": "test_2", "properties": {"a": 0}}::vertex {"id": 1125899906842627, "label": "test_2", "properties": {}}::vertex {"id": 1407374883553282, "label": "test_3", "properties": {}}::vertex {"id": 1407374883553281, "label": "test_3", "properties": {}}::vertex {"id": 1970324836974593, "label": "test_4", "properties": {}}::vertex {"id": 1970324836974594, "label": "test_4", "properties": {}}::vertex {"id": 2533274790395905, "label": "test_5", "properties": {"k": 3}}::vertex {"id": 2814749767106561, "label": "test_6", "properties": {"j": 5}}::vertex {"id": 3377699720527873, "label": "test_7", "properties": {}}::vertex (15 rows) SELECT * FROM cypher('cypher_remove', $$MATCH (n) RETURN n$$) AS (a agtype); a ------------------------------------------------------------------------------------ {"id": 281474976710657, "label": "", "properties": {}}::vertex {"id": 281474976710658, "label": "", "properties": {}}::vertex {"id": 844424930131969, "label": "test_1", "properties": {}}::vertex {"id": 844424930131971, "label": "test_1", "properties": {}}::vertex {"id": 844424930131970, "label": "test_1", "properties": {"a": 0, "j": 5}}::vertex {"id": 1125899906842625, "label": "test_2", "properties": {}}::vertex {"id": 1125899906842626, "label": "test_2", "properties": {"a": 0}}::vertex {"id": 1125899906842627, "label": "test_2", "properties": {}}::vertex {"id": 1407374883553282, "label": "test_3", "properties": {}}::vertex {"id": 1407374883553281, "label": "test_3", "properties": {}}::vertex {"id": 1970324836974593, "label": "test_4", "properties": {}}::vertex {"id": 1970324836974594, "label": "test_4", "properties": {}}::vertex {"id": 2533274790395905, "label": "test_5", "properties": {"k": 3}}::vertex {"id": 2814749767106561, "label": "test_6", "properties": {"j": 5}}::vertex {"id": 3377699720527873, "label": "test_7", "properties": {}}::vertex (15 rows) -- prepared statements SELECT * FROM cypher('cypher_remove', $$CREATE ( {i : 1 })$$) AS (a agtype); a --- (0 rows) PREPARE p_1 AS SELECT * FROM cypher('cypher_remove', $$MATCH (n) REMOVE n.i RETURN n $$) AS (a agtype); EXECUTE p_1; a ------------------------------------------------------------------------------------ {"id": 281474976710657, "label": "", "properties": {}}::vertex {"id": 281474976710658, "label": "", "properties": {}}::vertex {"id": 281474976710659, "label": "", "properties": {}}::vertex {"id": 844424930131969, "label": "test_1", "properties": {}}::vertex {"id": 844424930131971, "label": "test_1", "properties": {}}::vertex {"id": 844424930131970, "label": "test_1", "properties": {"a": 0, "j": 5}}::vertex {"id": 1125899906842625, "label": "test_2", "properties": {}}::vertex {"id": 1125899906842626, "label": "test_2", "properties": {"a": 0}}::vertex {"id": 1125899906842627, "label": "test_2", "properties": {}}::vertex {"id": 1407374883553282, "label": "test_3", "properties": {}}::vertex {"id": 1407374883553281, "label": "test_3", "properties": {}}::vertex {"id": 1970324836974593, "label": "test_4", "properties": {}}::vertex {"id": 1970324836974594, "label": "test_4", "properties": {}}::vertex {"id": 2533274790395905, "label": "test_5", "properties": {"k": 3}}::vertex {"id": 2814749767106561, "label": "test_6", "properties": {"j": 5}}::vertex {"id": 3377699720527873, "label": "test_7", "properties": {}}::vertex (16 rows) SELECT * FROM cypher('cypher_remove', $$CREATE ( {i : 1 })$$) AS (a agtype); a --- (0 rows) EXECUTE p_1; a ------------------------------------------------------------------------------------ {"id": 281474976710657, "label": "", "properties": {}}::vertex {"id": 281474976710658, "label": "", "properties": {}}::vertex {"id": 281474976710659, "label": "", "properties": {}}::vertex {"id": 281474976710660, "label": "", "properties": {}}::vertex {"id": 844424930131969, "label": "test_1", "properties": {}}::vertex {"id": 844424930131971, "label": "test_1", "properties": {}}::vertex {"id": 844424930131970, "label": "test_1", "properties": {"a": 0, "j": 5}}::vertex {"id": 1125899906842625, "label": "test_2", "properties": {}}::vertex {"id": 1125899906842626, "label": "test_2", "properties": {"a": 0}}::vertex {"id": 1125899906842627, "label": "test_2", "properties": {}}::vertex {"id": 1407374883553282, "label": "test_3", "properties": {}}::vertex {"id": 1407374883553281, "label": "test_3", "properties": {}}::vertex {"id": 1970324836974593, "label": "test_4", "properties": {}}::vertex {"id": 1970324836974594, "label": "test_4", "properties": {}}::vertex {"id": 2533274790395905, "label": "test_5", "properties": {"k": 3}}::vertex {"id": 2814749767106561, "label": "test_6", "properties": {"j": 5}}::vertex {"id": 3377699720527873, "label": "test_7", "properties": {}}::vertex (17 rows) -- pl/pgsql SELECT * FROM cypher('cypher_remove', $$CREATE ( {i : 1 })$$) AS (a agtype); a --- (0 rows) CREATE FUNCTION remove_test() RETURNS TABLE(vertex agtype) LANGUAGE plpgsql VOLATILE AS $BODY$ BEGIN RETURN QUERY SELECT * FROM cypher('cypher_remove', $$MATCH (n) REMOVE n.i RETURN n$$) AS (a agtype); END $BODY$; SELECT remove_test(); remove_test ------------------------------------------------------------------------------------ {"id": 281474976710657, "label": "", "properties": {}}::vertex {"id": 281474976710658, "label": "", "properties": {}}::vertex {"id": 281474976710659, "label": "", "properties": {}}::vertex {"id": 281474976710660, "label": "", "properties": {}}::vertex {"id": 281474976710661, "label": "", "properties": {}}::vertex {"id": 844424930131969, "label": "test_1", "properties": {}}::vertex {"id": 844424930131971, "label": "test_1", "properties": {}}::vertex {"id": 844424930131970, "label": "test_1", "properties": {"a": 0, "j": 5}}::vertex {"id": 1125899906842625, "label": "test_2", "properties": {}}::vertex {"id": 1125899906842626, "label": "test_2", "properties": {"a": 0}}::vertex {"id": 1125899906842627, "label": "test_2", "properties": {}}::vertex {"id": 1407374883553282, "label": "test_3", "properties": {}}::vertex {"id": 1407374883553281, "label": "test_3", "properties": {}}::vertex {"id": 1970324836974593, "label": "test_4", "properties": {}}::vertex {"id": 1970324836974594, "label": "test_4", "properties": {}}::vertex {"id": 2533274790395905, "label": "test_5", "properties": {"k": 3}}::vertex {"id": 2814749767106561, "label": "test_6", "properties": {"j": 5}}::vertex {"id": 3377699720527873, "label": "test_7", "properties": {}}::vertex (18 rows) SELECT * FROM cypher('cypher_remove', $$CREATE ( {i : 1 })$$) AS (a agtype); a --- (0 rows) SELECT remove_test(); remove_test ------------------------------------------------------------------------------------ {"id": 281474976710657, "label": "", "properties": {}}::vertex {"id": 281474976710658, "label": "", "properties": {}}::vertex {"id": 281474976710659, "label": "", "properties": {}}::vertex {"id": 281474976710660, "label": "", "properties": {}}::vertex {"id": 281474976710661, "label": "", "properties": {}}::vertex {"id": 281474976710662, "label": "", "properties": {}}::vertex {"id": 844424930131969, "label": "test_1", "properties": {}}::vertex {"id": 844424930131971, "label": "test_1", "properties": {}}::vertex {"id": 844424930131970, "label": "test_1", "properties": {"a": 0, "j": 5}}::vertex {"id": 1125899906842625, "label": "test_2", "properties": {}}::vertex {"id": 1125899906842626, "label": "test_2", "properties": {"a": 0}}::vertex {"id": 1125899906842627, "label": "test_2", "properties": {}}::vertex {"id": 1407374883553282, "label": "test_3", "properties": {}}::vertex {"id": 1407374883553281, "label": "test_3", "properties": {}}::vertex {"id": 1970324836974593, "label": "test_4", "properties": {}}::vertex {"id": 1970324836974594, "label": "test_4", "properties": {}}::vertex {"id": 2533274790395905, "label": "test_5", "properties": {"k": 3}}::vertex {"id": 2814749767106561, "label": "test_6", "properties": {"j": 5}}::vertex {"id": 3377699720527873, "label": "test_7", "properties": {}}::vertex (19 rows) -- -- Updating Multiple Fields -- SELECT * FROM cypher('cypher_remove', $$MATCH (n) RETURN n$$) AS (a agtype); a ------------------------------------------------------------------------------------ {"id": 281474976710657, "label": "", "properties": {}}::vertex {"id": 281474976710658, "label": "", "properties": {}}::vertex {"id": 281474976710659, "label": "", "properties": {}}::vertex {"id": 281474976710660, "label": "", "properties": {}}::vertex {"id": 281474976710661, "label": "", "properties": {}}::vertex {"id": 281474976710662, "label": "", "properties": {}}::vertex {"id": 844424930131969, "label": "test_1", "properties": {}}::vertex {"id": 844424930131971, "label": "test_1", "properties": {}}::vertex {"id": 844424930131970, "label": "test_1", "properties": {"a": 0, "j": 5}}::vertex {"id": 1125899906842625, "label": "test_2", "properties": {}}::vertex {"id": 1125899906842626, "label": "test_2", "properties": {"a": 0}}::vertex {"id": 1125899906842627, "label": "test_2", "properties": {}}::vertex {"id": 1407374883553282, "label": "test_3", "properties": {}}::vertex {"id": 1407374883553281, "label": "test_3", "properties": {}}::vertex {"id": 1970324836974593, "label": "test_4", "properties": {}}::vertex {"id": 1970324836974594, "label": "test_4", "properties": {}}::vertex {"id": 2533274790395905, "label": "test_5", "properties": {"k": 3}}::vertex {"id": 2814749767106561, "label": "test_6", "properties": {"j": 5}}::vertex {"id": 3377699720527873, "label": "test_7", "properties": {}}::vertex (19 rows) SELECT * FROM cypher('cypher_remove', $$MATCH (n) REMOVE n.i, n.j, n.k RETURN n$$) AS (a agtype); a ----------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {}}::vertex {"id": 281474976710658, "label": "", "properties": {}}::vertex {"id": 281474976710659, "label": "", "properties": {}}::vertex {"id": 281474976710660, "label": "", "properties": {}}::vertex {"id": 281474976710661, "label": "", "properties": {}}::vertex {"id": 281474976710662, "label": "", "properties": {}}::vertex {"id": 844424930131969, "label": "test_1", "properties": {}}::vertex {"id": 844424930131971, "label": "test_1", "properties": {}}::vertex {"id": 844424930131970, "label": "test_1", "properties": {"a": 0}}::vertex {"id": 1125899906842625, "label": "test_2", "properties": {}}::vertex {"id": 1125899906842626, "label": "test_2", "properties": {"a": 0}}::vertex {"id": 1125899906842627, "label": "test_2", "properties": {}}::vertex {"id": 1407374883553282, "label": "test_3", "properties": {}}::vertex {"id": 1407374883553281, "label": "test_3", "properties": {}}::vertex {"id": 1970324836974593, "label": "test_4", "properties": {}}::vertex {"id": 1970324836974594, "label": "test_4", "properties": {}}::vertex {"id": 2533274790395905, "label": "test_5", "properties": {}}::vertex {"id": 2814749767106561, "label": "test_6", "properties": {}}::vertex {"id": 3377699720527873, "label": "test_7", "properties": {}}::vertex (19 rows) SELECT * FROM cypher('cypher_remove', $$MATCH (n) RETURN n$$) AS (a agtype); a ----------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {}}::vertex {"id": 281474976710658, "label": "", "properties": {}}::vertex {"id": 281474976710659, "label": "", "properties": {}}::vertex {"id": 281474976710660, "label": "", "properties": {}}::vertex {"id": 281474976710661, "label": "", "properties": {}}::vertex {"id": 281474976710662, "label": "", "properties": {}}::vertex {"id": 844424930131969, "label": "test_1", "properties": {}}::vertex {"id": 844424930131971, "label": "test_1", "properties": {}}::vertex {"id": 844424930131970, "label": "test_1", "properties": {"a": 0}}::vertex {"id": 1125899906842625, "label": "test_2", "properties": {}}::vertex {"id": 1125899906842626, "label": "test_2", "properties": {"a": 0}}::vertex {"id": 1125899906842627, "label": "test_2", "properties": {}}::vertex {"id": 1407374883553282, "label": "test_3", "properties": {}}::vertex {"id": 1407374883553281, "label": "test_3", "properties": {}}::vertex {"id": 1970324836974593, "label": "test_4", "properties": {}}::vertex {"id": 1970324836974594, "label": "test_4", "properties": {}}::vertex {"id": 2533274790395905, "label": "test_5", "properties": {}}::vertex {"id": 2814749767106561, "label": "test_6", "properties": {}}::vertex {"id": 3377699720527873, "label": "test_7", "properties": {}}::vertex (19 rows) SELECT * FROM cypher('cypher_remove', $$CREATE ()-[:edge_multi_property { i: 5, j: 20}]->()$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_remove', $$MATCH ()-[e:edge_multi_property]-() RETURN e$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 3659174697238529, "label": "edge_multi_property", "end_id": 281474976710664, "start_id": 281474976710663, "properties": {"i": 5, "j": 20}}::edge {"id": 3659174697238529, "label": "edge_multi_property", "end_id": 281474976710664, "start_id": 281474976710663, "properties": {"i": 5, "j": 20}}::edge (2 rows) SELECT * FROM cypher('cypher_remove', $$MATCH ()-[e:edge_multi_property]-() REMOVE e.i, e.j RETURN e$$) AS (a agtype); a ------------------------------------------------------------------------------------------------------------------------------------------ {"id": 3659174697238529, "label": "edge_multi_property", "end_id": 281474976710664, "start_id": 281474976710663, "properties": {}}::edge {"id": 3659174697238529, "label": "edge_multi_property", "end_id": 281474976710664, "start_id": 281474976710663, "properties": {}}::edge (2 rows) --Errors SELECT * FROM cypher('cypher_remove', $$REMOVE n.i$$) AS (a agtype); ERROR: REMOVE cannot be the first clause in a Cypher query LINE 1: SELECT * FROM cypher('cypher_remove', $$REMOVE n.i$$) AS (a ... ^ SELECT * FROM cypher('cypher_remove', $$MATCH (n) REMOVE n.i = NULL$$) AS (a agtype); ERROR: REMOVE clause must be in the format: REMOVE variable.property_name LINE 1: SELECT * FROM cypher('cypher_remove', $$MATCH (n) REMOVE n.i... ^ SELECT * FROM cypher('cypher_remove', $$MATCH (n) REMOVE wrong_var.i$$) AS (a agtype); ERROR: undefined reference to variable wrong_var in REMOVE clause LINE 1: SELECT * FROM cypher('cypher_remove', $$MATCH (n) REMOVE wro... ^ -- -- Clean up -- DROP FUNCTION remove_test; SELECT drop_graph('cypher_remove', true); NOTICE: drop cascades to 13 other objects DETAIL: drop cascades to table cypher_remove._ag_label_vertex drop cascades to table cypher_remove._ag_label_edge drop cascades to table cypher_remove.test_1 drop cascades to table cypher_remove.test_2 drop cascades to table cypher_remove.test_3 drop cascades to table cypher_remove.test_3_edge drop cascades to table cypher_remove.test_4 drop cascades to table cypher_remove.test_4_edge drop cascades to table cypher_remove.test_5 drop cascades to table cypher_remove.test_6 drop cascades to table cypher_remove.e drop cascades to table cypher_remove.test_7 drop cascades to table cypher_remove.edge_multi_property NOTICE: graph "cypher_remove" has been dropped drop_graph ------------ (1 row) -- -- End -- age-PG16-v1.5.0-rc0/regress/expected/cypher_set.out000066400000000000000000002214421454606241200217560ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher_set'); NOTICE: graph "cypher_set" has been created create_graph -------------- (1 row) SELECT * FROM cypher('cypher_set', $$CREATE (:v)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_set', $$CREATE (:v {i: 0, j: 5, a: 0})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_set', $$CREATE (:v {i: 1})$$) AS (a agtype); a --- (0 rows) --Simple SET test case SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = 3$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_set', $$MATCH (n) WHERE n.j = 5 SET n.i = NULL RETURN n$$) AS (a agtype); a ------------------------------------------------------------------------------- {"id": 844424930131970, "label": "v", "properties": {"a": 0, "j": 5}}::vertex (1 row) SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); a ------------------------------------------------------------------------------- {"id": 844424930131969, "label": "v", "properties": {"i": 3}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 3}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "j": 5}}::vertex (3 rows) SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = NULL RETURN n$$) AS (a agtype); a ------------------------------------------------------------------------------- {"id": 844424930131969, "label": "v", "properties": {}}::vertex {"id": 844424930131971, "label": "v", "properties": {}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "j": 5}}::vertex (3 rows) SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); a ------------------------------------------------------------------------------- {"id": 844424930131969, "label": "v", "properties": {}}::vertex {"id": 844424930131971, "label": "v", "properties": {}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "j": 5}}::vertex (3 rows) SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = 3 RETURN n$$) AS (a agtype); a --------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "v", "properties": {"i": 3}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 3}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 3, "j": 5}}::vertex (3 rows) SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); a --------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "v", "properties": {"i": 3}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 3}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 3, "j": 5}}::vertex (3 rows) --Test assigning properties to rand() and pi() SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = rand() RETURN n.i < 1 AND n.i >= 0$$) AS (a agtype); a ------ true true true (3 rows) SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = pi() RETURN n$$) AS (a agtype); a ------------------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "v", "properties": {"i": 3.141592653589793}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 3.141592653589793}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 3.141592653589793, "j": 5}}::vertex (3 rows) --Handle Inheritance SELECT * FROM cypher('cypher_set', $$CREATE ()$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = 3 RETURN n$$) AS (a agtype); a --------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"i": 3}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": 3}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 3}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 3, "j": 5}}::vertex (4 rows) SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); a --------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"i": 3}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": 3}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 3}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 3, "j": 5}}::vertex (4 rows) --Validate Paths are updated SELECT * FROM cypher('cypher_set', $$MATCH (n) CREATE (n)-[:e {j:20}]->(:other_v {k:10}) RETURN n$$) AS (a agtype); a --------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"i": 3}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": 3}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 3}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 3, "j": 5}}::vertex (4 rows) SELECT * FROM cypher('cypher_set', $$MATCH p=(n)-[]->() SET n.i = 50 RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710657, "label": "", "properties": {"i": 50}}::vertex, {"id": 1125899906842625, "label": "e", "end_id": 1407374883553281, "start_id": 281474976710657, "properties": {"j": 20}}::edge, {"id": 1407374883553281, "label": "other_v", "properties": {"k": 10}}::vertex]::path [{"id": 844424930131969, "label": "v", "properties": {"i": 50}}::vertex, {"id": 1125899906842626, "label": "e", "end_id": 1407374883553282, "start_id": 844424930131969, "properties": {"j": 20}}::edge, {"id": 1407374883553282, "label": "other_v", "properties": {"k": 10}}::vertex]::path [{"id": 844424930131971, "label": "v", "properties": {"i": 50}}::vertex, {"id": 1125899906842627, "label": "e", "end_id": 1407374883553283, "start_id": 844424930131971, "properties": {"j": 20}}::edge, {"id": 1407374883553283, "label": "other_v", "properties": {"k": 10}}::vertex]::path [{"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5}}::vertex, {"id": 1125899906842628, "label": "e", "end_id": 1407374883553284, "start_id": 844424930131970, "properties": {"j": 20}}::edge, {"id": 1407374883553284, "label": "other_v", "properties": {"k": 10}}::vertex]::path (4 rows) --Edges SELECT * FROM cypher('cypher_set', $$MATCH ()-[n]-(:other_v) SET n.i = 3 RETURN n$$) AS (a agtype); a ---------------------------------------------------------------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "e", "end_id": 1407374883553281, "start_id": 281474976710657, "properties": {"i": 3, "j": 20}}::edge {"id": 1125899906842626, "label": "e", "end_id": 1407374883553282, "start_id": 844424930131969, "properties": {"i": 3, "j": 20}}::edge {"id": 1125899906842627, "label": "e", "end_id": 1407374883553283, "start_id": 844424930131971, "properties": {"i": 3, "j": 20}}::edge {"id": 1125899906842628, "label": "e", "end_id": 1407374883553284, "start_id": 844424930131970, "properties": {"i": 3, "j": 20}}::edge (4 rows) SELECT * FROM cypher('cypher_set', $$MATCH ()-[n]->(:other_v) RETURN n$$) AS (a agtype); a ---------------------------------------------------------------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "e", "end_id": 1407374883553281, "start_id": 281474976710657, "properties": {"i": 3, "j": 20}}::edge {"id": 1125899906842626, "label": "e", "end_id": 1407374883553282, "start_id": 844424930131969, "properties": {"i": 3, "j": 20}}::edge {"id": 1125899906842628, "label": "e", "end_id": 1407374883553284, "start_id": 844424930131970, "properties": {"i": 3, "j": 20}}::edge {"id": 1125899906842627, "label": "e", "end_id": 1407374883553283, "start_id": 844424930131971, "properties": {"i": 3, "j": 20}}::edge (4 rows) SELECT * FROM cypher('cypher_set', $$ MATCH (n {j: 5}) SET n.y = 50 SET n.z = 99 RETURN n $$) AS (a agtype); a ---------------------------------------------------------------------------------------------------------- {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "y": 50, "z": 99}}::vertex (1 row) SELECT * FROM cypher('cypher_set', $$ MATCH (n {j: 5}) SET n.y = 53 SET n.y = 50 SET n.z = 99 SET n.arr = [n.y, n.z] RETURN n $$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------- {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "y": 50, "z": 99, "arr": [50, 99]}}::vertex (1 row) SELECT * FROM cypher('cypher_set', $$ MATCH (n {j: 5}) REMOVE n.arr RETURN n $$) AS (a agtype); a ---------------------------------------------------------------------------------------------------------- {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "y": 50, "z": 99}}::vertex (1 row) SELECT * FROM cypher('cypher_set', $$ MATCH (n {j: 5}) RETURN n $$) AS (a agtype); a ---------------------------------------------------------------------------------------------------------- {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "y": 50, "z": 99}}::vertex (1 row) --Create a loop and see that set can work after create SELECT * FROM cypher('cypher_set', $$ MATCH (n {j: 5}) CREATE p=(n)-[e:e {j:34}]->(n) SET n.y = 99 RETURN n, p $$) AS (a agtype, b agtype); a | b ----------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "y": 99, "z": 99}}::vertex | [{"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "y": 99, "z": 99}}::vertex, {"id": 1125899906842629, "label": "e", "end_id": 844424930131970, "start_id": 844424930131970, "properties": {"j": 34}}::edge, {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "y": 99, "z": 99}}::vertex]::path (1 row) --Create a loop and see that set can work after create SELECT * FROM cypher('cypher_set', $$ CREATE ()-[e:e {j:34}]->() SET e.y = 99 RETURN e $$) AS (a agtype); a ---------------------------------------------------------------------------------------------------------------------------------------- {"id": 1125899906842630, "label": "e", "end_id": 281474976710659, "start_id": 281474976710658, "properties": {"j": 34, "y": 99}}::edge (1 row) SELECT * FROM cypher('cypher_set', $$ MATCH (n) MATCH (n)-[e:e {j:34}]->() SET n.y = 1 RETURN n $$) AS (a agtype); a --------------------------------------------------------------------------------------------------------- {"id": 281474976710658, "label": "", "properties": {"y": 1}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "y": 1, "z": 99}}::vertex (2 rows) SELECT * FROM cypher('cypher_set', $$ MATCH (n) MATCH ()-[e:e {j:34}]->(n) SET n.y = 2 RETURN n $$) AS (a agtype); a --------------------------------------------------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {"y": 2}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "y": 2, "z": 99}}::vertex (2 rows) -- Test that SET works with nodes(path) and relationships(path) SELECT * FROM cypher('cypher_set', $$ MATCH p=(n)-[e:e {j:34}]->() WITH nodes(p) AS ns WITH ns[0] AS n SET n.k = 99 SET n.k = 999 RETURN n $$) AS (a agtype); a ------------------------------------------------------------------------------------------------------------------- {"id": 281474976710658, "label": "", "properties": {"k": 999, "y": 1}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "k": 999, "y": 2, "z": 99}}::vertex (2 rows) SELECT * FROM cypher('cypher_set', $$ MATCH p=(n)-[e:e {j:34}]->() WITH relationships(p) AS rs WITH rs[0] AS r SET r.l = 99 SET r.l = 999 RETURN r $$) AS (a agtype); a -------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 1125899906842630, "label": "e", "end_id": 281474976710659, "start_id": 281474976710658, "properties": {"j": 34, "l": 999, "y": 99}}::edge {"id": 1125899906842629, "label": "e", "end_id": 844424930131970, "start_id": 844424930131970, "properties": {"j": 34, "l": 999}}::edge (2 rows) SELECT * FROM cypher('cypher_set', $$ MATCH p=(n)-[e:e {j:34}]->() REMOVE n.k, e.l RETURN p $$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710658, "label": "", "properties": {"y": 1}}::vertex, {"id": 1125899906842630, "label": "e", "end_id": 281474976710659, "start_id": 281474976710658, "properties": {"j": 34, "y": 99}}::edge, {"id": 281474976710659, "label": "", "properties": {"y": 2}}::vertex]::path [{"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "y": 2, "z": 99}}::vertex, {"id": 1125899906842629, "label": "e", "end_id": 844424930131970, "start_id": 844424930131970, "properties": {"j": 34}}::edge, {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "y": 2, "z": 99}}::vertex]::path (2 rows) SELECT * FROM cypher('cypher_set', $$MATCH (n)-[]->(n) SET n.y = 99 RETURN n$$) AS (a agtype); a ---------------------------------------------------------------------------------------------------------- {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "y": 99, "z": 99}}::vertex (1 row) SELECT * FROM cypher('cypher_set', $$MATCH (n) MATCH (n)-[]->(m) SET n.t = 150 RETURN n$$) AS (a agtype); a -------------------------------------------------------------------------------------------------------------------- {"id": 281474976710658, "label": "", "properties": {"t": 150, "y": 1}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": 50, "t": 150}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": 50, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 50, "t": 150}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex (6 rows) -- prepared statements PREPARE p_1 AS SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = 3 RETURN n $$) AS (a agtype); EXECUTE p_1; a ------------------------------------------------------------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {"i": 3, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": 3, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": 3, "t": 150}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": 3, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 3, "t": 150}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 3, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": 3, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": 3, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": 3, "k": 10}}::vertex {"id": 1407374883553284, "label": "other_v", "properties": {"i": 3, "k": 10}}::vertex (10 rows) EXECUTE p_1; a ------------------------------------------------------------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {"i": 3, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": 3, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": 3, "t": 150}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": 3, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 3, "t": 150}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 3, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": 3, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": 3, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": 3, "k": 10}}::vertex {"id": 1407374883553284, "label": "other_v", "properties": {"i": 3, "k": 10}}::vertex (10 rows) PREPARE p_2 AS SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = $var_name RETURN n $$, $1) AS (a agtype); EXECUTE p_2('{"var_name": 4}'); a ------------------------------------------------------------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {"i": 4, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": 4, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": 4, "t": 150}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": 4, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 4, "t": 150}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 4, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": 4, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": 4, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": 4, "k": 10}}::vertex {"id": 1407374883553284, "label": "other_v", "properties": {"i": 4, "k": 10}}::vertex (10 rows) EXECUTE p_2('{"var_name": 6}'); a ------------------------------------------------------------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {"i": 6, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": 6, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": 6, "t": 150}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": 6, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 6, "t": 150}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 6, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": 6, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": 6, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": 6, "k": 10}}::vertex {"id": 1407374883553284, "label": "other_v", "properties": {"i": 6, "k": 10}}::vertex (10 rows) CREATE FUNCTION set_test() RETURNS TABLE(vertex agtype) LANGUAGE plpgsql VOLATILE AS $BODY$ BEGIN RETURN QUERY SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = 7 RETURN n $$) AS (a agtype); END $BODY$; SELECT set_test(); set_test ------------------------------------------------------------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {"i": 7, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": 7, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": 7, "t": 150}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": 7, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 7, "t": 150}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 7, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": 7, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": 7, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": 7, "k": 10}}::vertex {"id": 1407374883553284, "label": "other_v", "properties": {"i": 7, "k": 10}}::vertex (10 rows) SELECT set_test(); set_test ------------------------------------------------------------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {"i": 7, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": 7, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": 7, "t": 150}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": 7, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 7, "t": 150}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 7, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": 7, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": 7, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": 7, "k": 10}}::vertex {"id": 1407374883553284, "label": "other_v", "properties": {"i": 7, "k": 10}}::vertex (10 rows) -- -- Updating multiple fields -- SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = 3, n.j = 5 RETURN n $$) AS (a agtype); a ------------------------------------------------------------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {"i": 3, "j": 5, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": 3, "j": 5, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": 3, "j": 5, "t": 150}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": 3, "j": 5, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 3, "j": 5, "t": 150}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 3, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": 3, "j": 5, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": 3, "j": 5, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": 3, "j": 5, "k": 10}}::vertex {"id": 1407374883553284, "label": "other_v", "properties": {"i": 3, "j": 5, "k": 10}}::vertex (10 rows) SELECT * FROM cypher('cypher_set', $$MATCH (n)-[m]->(n) SET m.y = n.y RETURN n, m$$) AS (a agtype, b agtype); a | b -------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------- {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 3, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex | {"id": 1125899906842629, "label": "e", "end_id": 844424930131970, "start_id": 844424930131970, "properties": {"j": 34, "y": 99}}::edge (1 row) --Errors SELECT * FROM cypher('cypher_set', $$SET n.i = NULL$$) AS (a agtype); ERROR: SET cannot be the first clause in a Cypher query LINE 1: SELECT * FROM cypher('cypher_set', $$SET n.i = NULL$$) AS (a... ^ SELECT * FROM cypher('cypher_set', $$MATCH (n) SET wrong_var.i = 3$$) AS (a agtype); ERROR: undefined reference to variable wrong_var in SET clause LINE 1: ...ELECT * FROM cypher('cypher_set', $$MATCH (n) SET wrong_var.... ^ SELECT * FROM cypher('cypher_set', $$MATCH (n) SET i = 3$$) AS (a agtype); ERROR: SET clause expects a map LINE 1: ...ELECT * FROM cypher('cypher_set', $$MATCH (n) SET i = 3$$) A... ^ -- -- SET refactor regression tests -- -- INSERT INTO CREATE TABLE tbl (result agtype); SELECT * FROM cypher('cypher_set', $$CREATE (u:vertices) $$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('cypher_set', $$CREATE (u:begin)-[:edge]->(v:end) $$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) return u $$) AS (result agtype); result ------------------------------------------------------------------------- {"id": 1688849860263937, "label": "vertices", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_set', $$MATCH (u:begin)-[:edge]->(v:end) return u, v $$) AS (u agtype, v agtype); u | v ----------------------------------------------------------------------+-------------------------------------------------------------------- {"id": 1970324836974593, "label": "begin", "properties": {}}::vertex | {"id": 2533274790395905, "label": "end", "properties": {}}::vertex (1 row) INSERT INTO tbl (SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) SET u.i = 7 return u $$) AS (result agtype)); INSERT INTO tbl (SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) SET u.i = 13 return u $$) AS (result agtype)); SELECT * FROM tbl; result -------------------------------------------------------------------------------- {"id": 1688849860263937, "label": "vertices", "properties": {"i": 7}}::vertex {"id": 1688849860263937, "label": "vertices", "properties": {"i": 13}}::vertex (2 rows) SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) return u $$) AS (result agtype); result -------------------------------------------------------------------------------- {"id": 1688849860263937, "label": "vertices", "properties": {"i": 13}}::vertex (1 row) BEGIN; SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) SET u.i = 1, u.j = 3, u.k = 5 return u $$) AS (result agtype); result ----------------------------------------------------------------------------------------------- {"id": 1688849860263937, "label": "vertices", "properties": {"i": 1, "j": 3, "k": 5}}::vertex (1 row) SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) return u $$) AS (result agtype); result ----------------------------------------------------------------------------------------------- {"id": 1688849860263937, "label": "vertices", "properties": {"i": 1, "j": 3, "k": 5}}::vertex (1 row) SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) SET u.i = 2, u.j = 4, u.k = 6 return u $$) AS (result agtype); result ----------------------------------------------------------------------------------------------- {"id": 1688849860263937, "label": "vertices", "properties": {"i": 2, "j": 4, "k": 6}}::vertex (1 row) SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) return u $$) AS (result agtype); result ----------------------------------------------------------------------------------------------- {"id": 1688849860263937, "label": "vertices", "properties": {"i": 2, "j": 4, "k": 6}}::vertex (1 row) SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) SET u.i = 3, u.j = 6, u.k = 9 return u $$) AS (result agtype); result ----------------------------------------------------------------------------------------------- {"id": 1688849860263937, "label": "vertices", "properties": {"i": 3, "j": 6, "k": 9}}::vertex (1 row) SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) return u $$) AS (result agtype); result ----------------------------------------------------------------------------------------------- {"id": 1688849860263937, "label": "vertices", "properties": {"i": 3, "j": 6, "k": 9}}::vertex (1 row) SELECT * FROM cypher('cypher_set', $$MATCH (u:begin)-[:edge]->(v:end) SET u.i = 1, v.i = 2, u.j = 3, v.j = 4 return u, v $$) AS (u agtype, v agtype); u | v ------------------------------------------------------------------------------------+---------------------------------------------------------------------------------- {"id": 1970324836974593, "label": "begin", "properties": {"i": 1, "j": 3}}::vertex | {"id": 2533274790395905, "label": "end", "properties": {"i": 2, "j": 4}}::vertex (1 row) SELECT * FROM cypher('cypher_set', $$MATCH (u:begin)-[:edge]->(v:end) return u, v $$) AS (u agtype, v agtype); u | v ------------------------------------------------------------------------------------+---------------------------------------------------------------------------------- {"id": 1970324836974593, "label": "begin", "properties": {"i": 1, "j": 3}}::vertex | {"id": 2533274790395905, "label": "end", "properties": {"i": 2, "j": 4}}::vertex (1 row) SELECT * FROM cypher('cypher_set', $$MATCH (u:begin)-[:edge]->(v:end) SET u.i = 2, v.i = 1, u.j = 4, v.j = 3 return u, v $$) AS (u agtype, v agtype); u | v ------------------------------------------------------------------------------------+---------------------------------------------------------------------------------- {"id": 1970324836974593, "label": "begin", "properties": {"i": 2, "j": 4}}::vertex | {"id": 2533274790395905, "label": "end", "properties": {"i": 1, "j": 3}}::vertex (1 row) SELECT * FROM cypher('cypher_set', $$MATCH (u:begin)-[:edge]->(v:end) return u, v $$) AS (u agtype, v agtype); u | v ------------------------------------------------------------------------------------+---------------------------------------------------------------------------------- {"id": 1970324836974593, "label": "begin", "properties": {"i": 2, "j": 4}}::vertex | {"id": 2533274790395905, "label": "end", "properties": {"i": 1, "j": 3}}::vertex (1 row) END; SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) return u $$) AS (result agtype); result ----------------------------------------------------------------------------------------------- {"id": 1688849860263937, "label": "vertices", "properties": {"i": 3, "j": 6, "k": 9}}::vertex (1 row) SELECT * FROM cypher('cypher_set', $$MATCH (u:begin)-[:edge]->(v:end) return u, v $$) AS (u agtype, v agtype); u | v ------------------------------------------------------------------------------------+---------------------------------------------------------------------------------- {"id": 1970324836974593, "label": "begin", "properties": {"i": 2, "j": 4}}::vertex | {"id": 2533274790395905, "label": "end", "properties": {"i": 1, "j": 3}}::vertex (1 row) -- test lists SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = [3, 'test', [1, 2, 3], {id: 1}, 1.0, 1.0::numeric] RETURN n$$) AS (a agtype); a -------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "k": 10}}::vertex {"id": 1407374883553284, "label": "other_v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "k": 10}}::vertex {"id": 1688849860263937, "label": "vertices", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 6, "k": 9}}::vertex {"id": 1970324836974593, "label": "begin", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 4}}::vertex {"id": 2533274790395905, "label": "end", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 3}}::vertex (13 rows) SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); a -------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "k": 10}}::vertex {"id": 1407374883553284, "label": "other_v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "k": 10}}::vertex {"id": 1688849860263937, "label": "vertices", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 6, "k": 9}}::vertex {"id": 1970324836974593, "label": "begin", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 4}}::vertex {"id": 2533274790395905, "label": "end", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 3}}::vertex (13 rows) -- test that lists get updated in paths SELECT * FROM cypher('cypher_set', $$MATCH p=(u:begin)-[:edge]->(v:end) SET u.i = [1, 2, 3] return u, p $$) AS (u agtype, p agtype); u | p --------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 1970324836974593, "label": "begin", "properties": {"i": [1, 2, 3], "j": 4}}::vertex | [{"id": 1970324836974593, "label": "begin", "properties": {"i": [1, 2, 3], "j": 4}}::vertex, {"id": 2251799813685249, "label": "edge", "end_id": 2533274790395905, "start_id": 1970324836974593, "properties": {}}::edge, {"id": 2533274790395905, "label": "end", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 3}}::vertex]::path (1 row) SELECT * FROM cypher('cypher_set', $$MATCH p=(u:begin)-[:edge]->(v:end) return u, p $$) AS (u agtype, p agtype); u | p --------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 1970324836974593, "label": "begin", "properties": {"i": [1, 2, 3], "j": 4}}::vertex | [{"id": 1970324836974593, "label": "begin", "properties": {"i": [1, 2, 3], "j": 4}}::vertex, {"id": 2251799813685249, "label": "edge", "end_id": 2533274790395905, "start_id": 1970324836974593, "properties": {}}::edge, {"id": 2533274790395905, "label": "end", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 3}}::vertex]::path (1 row) -- test empty lists SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = [] RETURN n$$) AS (a agtype); a -------------------------------------------------------------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {"i": [], "j": 5, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": [], "j": 5, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": [], "j": 5, "t": 150}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": [], "j": 5, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": [], "j": 5, "t": 150}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": [], "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": [], "j": 5, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": [], "j": 5, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": [], "j": 5, "k": 10}}::vertex {"id": 1407374883553284, "label": "other_v", "properties": {"i": [], "j": 5, "k": 10}}::vertex {"id": 1688849860263937, "label": "vertices", "properties": {"i": [], "j": 6, "k": 9}}::vertex {"id": 1970324836974593, "label": "begin", "properties": {"i": [], "j": 4}}::vertex {"id": 2533274790395905, "label": "end", "properties": {"i": [], "j": 3}}::vertex (13 rows) SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); a -------------------------------------------------------------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {"i": [], "j": 5, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": [], "j": 5, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": [], "j": 5, "t": 150}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": [], "j": 5, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": [], "j": 5, "t": 150}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": [], "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": [], "j": 5, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": [], "j": 5, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": [], "j": 5, "k": 10}}::vertex {"id": 1407374883553284, "label": "other_v", "properties": {"i": [], "j": 5, "k": 10}}::vertex {"id": 1688849860263937, "label": "vertices", "properties": {"i": [], "j": 6, "k": 9}}::vertex {"id": 1970324836974593, "label": "begin", "properties": {"i": [], "j": 4}}::vertex {"id": 2533274790395905, "label": "end", "properties": {"i": [], "j": 3}}::vertex (13 rows) -- test maps SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = {prop1: 3, prop2:'test', prop3: [1, 2, 3], prop4: {id: 1}, prop5: 1.0, prop6:1.0::numeric} RETURN n$$) AS (a agtype); a -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "k": 10}}::vertex {"id": 1407374883553284, "label": "other_v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "k": 10}}::vertex {"id": 1688849860263937, "label": "vertices", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 6, "k": 9}}::vertex {"id": 1970324836974593, "label": "begin", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 4}}::vertex {"id": 2533274790395905, "label": "end", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 3}}::vertex (13 rows) SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); a -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "k": 10}}::vertex {"id": 1407374883553284, "label": "other_v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "k": 10}}::vertex {"id": 1688849860263937, "label": "vertices", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 6, "k": 9}}::vertex {"id": 1970324836974593, "label": "begin", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 4}}::vertex {"id": 2533274790395905, "label": "end", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 3}}::vertex (13 rows) -- test maps in paths SELECT * FROM cypher('cypher_set', $$MATCH p=(u:begin)-[:edge]->(v:end) SET u.i = {prop1: 1, prop2: 2, prop3: 3} return u, p $$) AS (u agtype, p agtype); u | p -----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 1970324836974593, "label": "begin", "properties": {"i": {"prop1": 1, "prop2": 2, "prop3": 3}, "j": 4}}::vertex | [{"id": 1970324836974593, "label": "begin", "properties": {"i": {"prop1": 1, "prop2": 2, "prop3": 3}, "j": 4}}::vertex, {"id": 2251799813685249, "label": "edge", "end_id": 2533274790395905, "start_id": 1970324836974593, "properties": {}}::edge, {"id": 2533274790395905, "label": "end", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 3}}::vertex]::path (1 row) SELECT * FROM cypher('cypher_set', $$MATCH p=(u:begin)-[:edge]->(v:end) return u, p $$) AS (u agtype, p agtype); u | p -----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 1970324836974593, "label": "begin", "properties": {"i": {"prop1": 1, "prop2": 2, "prop3": 3}, "j": 4}}::vertex | [{"id": 1970324836974593, "label": "begin", "properties": {"i": {"prop1": 1, "prop2": 2, "prop3": 3}, "j": 4}}::vertex, {"id": 2251799813685249, "label": "edge", "end_id": 2533274790395905, "start_id": 1970324836974593, "properties": {}}::edge, {"id": 2533274790395905, "label": "end", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 3}}::vertex]::path (1 row) -- test empty maps SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = {} RETURN n$$) AS (a agtype); a -------------------------------------------------------------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {"i": {}, "j": 5, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": {}, "j": 5, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": {}, "j": 5, "t": 150}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": {}, "j": 5, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": {}, "j": 5, "t": 150}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": {}, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": {}, "j": 5, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": {}, "j": 5, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": {}, "j": 5, "k": 10}}::vertex {"id": 1407374883553284, "label": "other_v", "properties": {"i": {}, "j": 5, "k": 10}}::vertex {"id": 1688849860263937, "label": "vertices", "properties": {"i": {}, "j": 6, "k": 9}}::vertex {"id": 1970324836974593, "label": "begin", "properties": {"i": {}, "j": 4}}::vertex {"id": 2533274790395905, "label": "end", "properties": {"i": {}, "j": 3}}::vertex (13 rows) SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); a -------------------------------------------------------------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {"i": {}, "j": 5, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": {}, "j": 5, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": {}, "j": 5, "t": 150}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": {}, "j": 5, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": {}, "j": 5, "t": 150}}::vertex {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": {}, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": {}, "j": 5, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": {}, "j": 5, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": {}, "j": 5, "k": 10}}::vertex {"id": 1407374883553284, "label": "other_v", "properties": {"i": {}, "j": 5, "k": 10}}::vertex {"id": 1688849860263937, "label": "vertices", "properties": {"i": {}, "j": 6, "k": 9}}::vertex {"id": 1970324836974593, "label": "begin", "properties": {"i": {}, "j": 4}}::vertex {"id": 2533274790395905, "label": "end", "properties": {"i": {}, "j": 3}}::vertex (13 rows) -- -- Test entire property update -- SELECT * FROM create_graph('cypher_set_1'); NOTICE: graph "cypher_set_1" has been created create_graph -------------- (1 row) SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Andy {name:'Andy', age:36, hungry:true}) $$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Peter {name:'Peter', age:34}) $$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Kevin {name:'Kevin', age:32, hungry:false}) $$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Matt {name:'Matt', city:'Toronto'}) $$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Juan {name:'Juan', role:'admin'}) $$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Robert {name:'Robert', role:'manager', city:'London'}) $$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_set_1',$$ CREATE (a: VertexA {map: {a: 1, b: {c: 2, d: []}, c: [{d: -100, e: []}]}, list: [1, "string", [{a: []}, [[1, 2]]]], bool: true, num: -1.9::numeric, str: "string"})$$) as (a agtype); a --- (0 rows) -- test copying properties between entities SELECT * FROM cypher('cypher_set_1', $$ MATCH (at {name: 'Andy'}), (pn {name: 'Peter'}) SET at = properties(pn) RETURN at, pn $$) AS (at agtype, pn agtype); at | pn ----------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------ {"id": 844424930131969, "label": "Andy", "properties": {"age": 34, "name": "Peter"}}::vertex | {"id": 1125899906842625, "label": "Peter", "properties": {"age": 34, "name": "Peter"}}::vertex (1 row) SELECT * FROM cypher('cypher_set_1', $$ MATCH (at {name: 'Kevin'}), (pn {name: 'Matt'}) SET at = pn RETURN at, pn $$) AS (at agtype, pn agtype); at | pn -------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------ {"id": 1407374883553281, "label": "Kevin", "properties": {"city": "Toronto", "name": "Matt"}}::vertex | {"id": 1688849860263937, "label": "Matt", "properties": {"city": "Toronto", "name": "Matt"}}::vertex (1 row) -- test replacing all properties using a map and = SELECT * FROM cypher('cypher_set_1', $$ MATCH (m {name: 'Matt'}) SET m = {name: 'Peter Smith', position: 'Entrepreneur', city:NULL} RETURN m $$) AS (m agtype); m ----------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553281, "label": "Kevin", "properties": {"name": "Peter Smith", "position": "Entrepreneur"}}::vertex {"id": 1688849860263937, "label": "Matt", "properties": {"name": "Peter Smith", "position": "Entrepreneur"}}::vertex (2 rows) -- test removing all properties using an empty map and = SELECT * FROM cypher('cypher_set_1', $$ MATCH (p {name: 'Juan'}) SET p = {} RETURN p $$) AS (p agtype); p --------------------------------------------------------------------- {"id": 1970324836974593, "label": "Juan", "properties": {}}::vertex (1 row) -- test assigning non-map to an entity SELECT * FROM cypher('cypher_set_1', $$ MATCH (p {name: 'Peter'}) SET p = "Peter" RETURN p $$) AS (p agtype); ERROR: SET clause expects a map LINE 3: SET p = "Peter" ^ SELECT * FROM cypher('cypher_set_1', $$ MATCH (p {name: 'Peter'}) SET p = sqrt(4) RETURN p $$) AS (p agtype); ERROR: a map is expected -- test plus-equal -- expected: {name:'Rob', age:47, city:London} SELECT * FROM cypher('cypher_set_1', $$ MATCH (p {name: 'Robert'}) SET p += {name:'Rob', role:NULL, age:47} RETURN p $$) AS (p agtype); p ----------------------------------------------------------------------------------------------------------------- {"id": 2251799813685249, "label": "Robert", "properties": {"age": 47, "city": "London", "name": "Rob"}}::vertex (1 row) -- expected: no change SELECT * FROM cypher('cypher_set_1', $$ MATCH (p {name: 'Rob'}) SET p += {} RETURN p $$) AS (p agtype); p ----------------------------------------------------------------------------------------------------------------- {"id": 2251799813685249, "label": "Robert", "properties": {"age": 47, "city": "London", "name": "Rob"}}::vertex (1 row) -- test plus-equal with original properties having non-scalar values SELECT * FROM cypher('cypher_set_1', $$ MATCH (p {map: {}}) SET p += {json: {a: -1, b: ['a', -1, true], c: {d: 'string'}}} RETURN p $$) AS (p agtype); p -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 2533274790395905, "label": "VertexA", "properties": {"map": {"a": 1, "b": {"c": 2, "d": []}, "c": [{"d": -100, "e": []}]}, "num": -1.9::numeric, "str": "string", "bool": true, "json": {"a": -1, "b": ["a", -1, true], "c": {"d": "string"}}, "list": [1, "string", [{"a": []}, [[1, 2]]]]}}::vertex (1 row) SELECT * FROM cypher('cypher_set_1', $$ MATCH (p: VertexA {map: {}}) SET p += {list_upd: [1, 2, 3, 4, 5]} RETURN p $$) AS (p agtype); p ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 2533274790395905, "label": "VertexA", "properties": {"map": {"a": 1, "b": {"c": 2, "d": []}, "c": [{"d": -100, "e": []}]}, "num": -1.9::numeric, "str": "string", "bool": true, "json": {"a": -1, "b": ["a", -1, true], "c": {"d": "string"}}, "list": [1, "string", [{"a": []}, [[1, 2]]]], "list_upd": [1, 2, 3, 4, 5]}}::vertex (1 row) SELECT * FROM cypher('cypher_set_1', $$ MATCH (p: VertexA) SET p += {vertex: {id: 281474976710659, label: "", properties: {a: 1, b: [1, 2, 3]}}::vertex} RETURN p $$) AS (p agtype); p ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 2533274790395905, "label": "VertexA", "properties": {"map": {"a": 1, "b": {"c": 2, "d": []}, "c": [{"d": -100, "e": []}]}, "num": -1.9::numeric, "str": "string", "bool": true, "json": {"a": -1, "b": ["a", -1, true], "c": {"d": "string"}}, "list": [1, "string", [{"a": []}, [[1, 2]]]], "vertex": {"id": 281474976710659, "label": "", "properties": {"a": 1, "b": [1, 2, 3]}}::vertex, "list_upd": [1, 2, 3, 4, 5]}}::vertex (1 row) SELECT * FROM cypher('cypher_set_1', $$ MATCH (p {map: {}}) SET p += {} RETURN p $$) AS (p agtype); p ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 2533274790395905, "label": "VertexA", "properties": {"map": {"a": 1, "b": {"c": 2, "d": []}, "c": [{"d": -100, "e": []}]}, "num": -1.9::numeric, "str": "string", "bool": true, "json": {"a": -1, "b": ["a", -1, true], "c": {"d": "string"}}, "list": [1, "string", [{"a": []}, [[1, 2]]]], "vertex": {"id": 281474976710659, "label": "", "properties": {"a": 1, "b": [1, 2, 3]}}::vertex, "list_upd": [1, 2, 3, 4, 5]}}::vertex (1 row) -- -- Check passing mismatched types with SET -- Issue 899 -- SELECT * FROM cypher('cypher_set_1', $$ CREATE (x) SET x.n0 = (true OR true) RETURN x $$) AS (p agtype); p -------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"n0": true}}::vertex (1 row) SELECT * FROM cypher('cypher_set_1', $$ CREATE (x) SET x.n0 = (true OR false), x.n1 = (false AND false), x.n2 = (false = false) RETURN x $$) AS (p agtype); p --------------------------------------------------------------------------------------------------- {"id": 281474976710658, "label": "", "properties": {"n0": true, "n1": false, "n2": true}}::vertex (1 row) -- -- Clean up -- DROP TABLE tbl; DROP FUNCTION set_test; SELECT drop_graph('cypher_set', true); NOTICE: drop cascades to 9 other objects DETAIL: drop cascades to table cypher_set._ag_label_vertex drop cascades to table cypher_set._ag_label_edge drop cascades to table cypher_set.v drop cascades to table cypher_set.e drop cascades to table cypher_set.other_v drop cascades to table cypher_set.vertices drop cascades to table cypher_set.begin drop cascades to table cypher_set.edge drop cascades to table cypher_set."end" NOTICE: graph "cypher_set" has been dropped drop_graph ------------ (1 row) SELECT drop_graph('cypher_set_1', true); NOTICE: drop cascades to 9 other objects DETAIL: drop cascades to table cypher_set_1._ag_label_vertex drop cascades to table cypher_set_1._ag_label_edge drop cascades to table cypher_set_1."Andy" drop cascades to table cypher_set_1."Peter" drop cascades to table cypher_set_1."Kevin" drop cascades to table cypher_set_1."Matt" drop cascades to table cypher_set_1."Juan" drop cascades to table cypher_set_1."Robert" drop cascades to table cypher_set_1."VertexA" NOTICE: graph "cypher_set_1" has been dropped drop_graph ------------ (1 row) -- age-PG16-v1.5.0-rc0/regress/expected/cypher_union.out000066400000000000000000000136451454606241200223170ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher_union'); NOTICE: graph "cypher_union" has been created create_graph -------------- (1 row) SELECT * FROM cypher('cypher_union', $$CREATE ()$$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_union', $$MATCH (n) RETURN n UNION MATCH (n) RETURN n$$) as (a agtype); a ---------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_union', $$MATCH (n) RETURN n UNION ALL MATCH (n) RETURN n$$) as (a agtype); a ---------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {}}::vertex {"id": 281474976710657, "label": "", "properties": {}}::vertex (2 rows) SELECT * FROM cypher('cypher_union', $$MATCH (n) RETURN n UNION RETURN 1$$) as (a agtype); a ---------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {}}::vertex 1 (2 rows) SELECT * FROM cypher('cypher_union', $$MATCH (n) RETURN n UNION RETURN NULL$$) as (a agtype); a ---------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {}}::vertex (2 rows) SELECT * FROM cypher('cypher_union', $$RETURN [1,2,3] UNION RETURN 1$$) as (a agtype); a ----------- [1, 2, 3] 1 (2 rows) /*should return 1 row*/ SELECT * FROM cypher('cypher_union', $$RETURN NULL UNION RETURN NULL$$) AS (result agtype); result -------- (1 row) /*should return 2 rows*/ SELECT * FROM cypher('cypher_union', $$RETURN NULL UNION ALL RETURN NULL$$) AS (result agtype); result -------- (2 rows) /* *multiple unions, precedence */ SELECT * FROM cypher('cypher_union', $$MATCH (n) RETURN n UNION MATCH (n) RETURN n UNION MATCH (n) RETURN n$$) AS (result agtype); result ---------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {}}::vertex (1 row) /*should return triple*/ SELECT * FROM cypher('cypher_union', $$MATCH (n) RETURN n UNION ALL MATCH (n) RETURN n UNION ALL MATCH(n) RETURN n$$) AS (result agtype); result ---------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {}}::vertex {"id": 281474976710657, "label": "", "properties": {}}::vertex {"id": 281474976710657, "label": "", "properties": {}}::vertex (3 rows) /*should return single*/ SELECT * FROM cypher('cypher_union', $$MATCH (n) RETURN n UNION ALL MATCH (n) RETURN n UNION MATCH(n) RETURN n$$) AS (result agtype); result ---------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {}}::vertex (1 row) /*should return just a pair*/ SELECT * FROM cypher('cypher_union', $$MATCH (n) RETURN n UNION MATCH (n) RETURN n UNION ALL MATCH(n) RETURN n$$) AS (result agtype); result ---------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {}}::vertex {"id": 281474976710657, "label": "", "properties": {}}::vertex (2 rows) /*should return 3 null rows*/ SELECT * FROM cypher('cypher_union', $$RETURN NULL UNION ALL RETURN NULL UNION ALL RETURN NULL$$) AS (result agtype); result -------- (3 rows) /*should return 1 null row*/ SELECT * FROM cypher('cypher_union', $$RETURN NULL UNION ALL RETURN NULL UNION RETURN NULL$$) AS (result agtype); result -------- (1 row) /*should return 2 null rows*/ SELECT * FROM cypher('cypher_union', $$RETURN NULL UNION RETURN NULL UNION ALL RETURN NULL$$) AS (result agtype); result -------- (2 rows) /* scoping */ SELECT * FROM cypher('cypher_union', $$MATCH (n) RETURN n UNION ALL MATCH (m) RETURN n$$) AS (result agtype); ERROR: could not find rte for n LINE 2: ..., $$MATCH (n) RETURN n UNION ALL MATCH (m) RETURN n$$) AS (r... ^ /* *UNION and UNION ALL, type casting */ SELECT * FROM cypher('cypher_union', $$RETURN 1.0::int UNION RETURN 1::float UNION ALL RETURN 2.0::float$$) AS (result agtype); result -------- 1 2.0 (2 rows) SELECT * FROM cypher('cypher_union', $$RETURN 1.0::int UNION RETURN 1.0::float UNION ALL RETURN 1::int$$) AS (result agtype); result -------- 1 1 (2 rows) SELECT * FROM cypher('cypher_union', $$RETURN 1.0::float UNION RETURN 1::int UNION RETURN 1::float$$) AS (result agtype); result -------- 1.0 (1 row) SELECT drop_graph('cypher_union', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table cypher_union._ag_label_vertex drop cascades to table cypher_union._ag_label_edge NOTICE: graph "cypher_union" has been dropped drop_graph ------------ (1 row) age-PG16-v1.5.0-rc0/regress/expected/cypher_unwind.out000066400000000000000000000241751454606241200224730ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher_unwind'); NOTICE: graph "cypher_unwind" has been created create_graph -------------- (1 row) -- Create nodes and relations SELECT * FROM cypher('cypher_unwind', $$ CREATE (n {name: 'node1', a: [1, 2, 3]}), (m {name: 'node2', a: [4, 5, 6]}), (o {name: 'node3', a: [7, 8, 9]}), (n)-[:KNOWS]->(m), (m)-[:KNOWS]->(o) $$) as (i agtype); i --- (0 rows) SELECT * FROM cypher('cypher_unwind', $$ MATCH (n) RETURN n $$) as (i agtype); i ----------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"a": [1, 2, 3], "name": "node1"}}::vertex {"id": 281474976710658, "label": "", "properties": {"a": [4, 5, 6], "name": "node2"}}::vertex {"id": 281474976710659, "label": "", "properties": {"a": [7, 8, 9], "name": "node3"}}::vertex (3 rows) -- -- Test UNWIND clause -- SELECT * FROM cypher('cypher_unwind', $$ UNWIND [1, 2, 3] AS i RETURN i $$) as (i agtype); i --- 1 2 3 (3 rows) SELECT * FROM cypher('cypher_unwind', $$ MATCH (n) WITH n.a AS a UNWIND a AS i RETURN * $$) as (i agtype, j agtype); i | j -----------+--- [1, 2, 3] | 1 [1, 2, 3] | 2 [1, 2, 3] | 3 [4, 5, 6] | 4 [4, 5, 6] | 5 [4, 5, 6] | 6 [7, 8, 9] | 7 [7, 8, 9] | 8 [7, 8, 9] | 9 (9 rows) SELECT * FROM cypher('cypher_unwind', $$ WITH [[1, 2], [3, 4], 5] AS nested UNWIND nested AS x UNWIND x AS y RETURN y $$) as (i agtype); i --- 1 2 3 4 5 (5 rows) -- UNWIND vertices SELECT * FROM cypher('cypher_unwind', $$ MATCH p=(n)-[:KNOWS]->(m) UNWIND nodes(p) as node RETURN node $$) as (i agtype); i ----------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"a": [1, 2, 3], "name": "node1"}}::vertex {"id": 281474976710658, "label": "", "properties": {"a": [4, 5, 6], "name": "node2"}}::vertex {"id": 281474976710658, "label": "", "properties": {"a": [4, 5, 6], "name": "node2"}}::vertex {"id": 281474976710659, "label": "", "properties": {"a": [7, 8, 9], "name": "node3"}}::vertex (4 rows) SELECT * FROM cypher('cypher_unwind', $$ MATCH p=(n)-[:KNOWS]->(m) UNWIND nodes(p) as node RETURN node.name $$) as (i agtype); i --------- "node1" "node2" "node2" "node3" (4 rows) -- UNWIND edges SELECT * FROM cypher('cypher_unwind', $$ MATCH p=(n)-[:KNOWS]->(m) UNWIND relationships(p) as relation RETURN relation $$) as (i agtype); i --------------------------------------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "KNOWS", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge {"id": 844424930131970, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710658, "properties": {}}::edge (2 rows) SELECT * FROM cypher('cypher_unwind', $$ MATCH p=(n)-[:KNOWS]->(m) UNWIND relationships(p) as relation RETURN type(relation) $$) as (i agtype); i --------- "KNOWS" "KNOWS" (2 rows) -- UNWIND paths (vle) SELECT * FROM cypher('cypher_unwind', $$ MATCH p=({name:'node1'})-[e:KNOWS*]->({name:'node3'}) UNWIND [p] as path RETURN path $$) as (i agtype); i ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710657, "label": "_ag_label_vertex", "properties": {"a": [1, 2, 3], "name": "node1"}}::vertex, {"id": 844424930131969, "label": "KNOWS", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge, {"id": 281474976710658, "label": "_ag_label_vertex", "properties": {"a": [4, 5, 6], "name": "node2"}}::vertex, {"id": 844424930131970, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710658, "properties": {}}::edge, {"id": 281474976710659, "label": "_ag_label_vertex", "properties": {"a": [7, 8, 9], "name": "node3"}}::vertex]::path (1 row) SELECT * FROM cypher('cypher_unwind', $$ MATCH p=({name:'node1'})-[e:KNOWS*]->({name:'node3'}) UNWIND [p] as path RETURN relationships(path) $$) as (i agtype); i -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 844424930131969, "label": "KNOWS", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge, {"id": 844424930131970, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710658, "properties": {}}::edge] (1 row) SELECT * FROM cypher('cypher_unwind', $$ MATCH p=({name:'node1'})-[e:KNOWS*]->({name:'node3'}) UNWIND [p] as path UNWIND relationships(path) as edge RETURN edge $$) as (i agtype); i --------------------------------------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "KNOWS", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge {"id": 844424930131970, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710658, "properties": {}}::edge (2 rows) -- Unwind with SET clause SELECT * FROM cypher('cypher_unwind', $$ MATCH p=(n)-[:KNOWS]->(m) UNWIND nodes(p) as node SET node.type = 'vertex' $$) as (i agtype); i --- (0 rows) SELECT * FROM cypher('cypher_unwind', $$ MATCH (n) RETURN n $$) as (i agtype); i ----------------------------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"a": [1, 2, 3], "name": "node1", "type": "vertex"}}::vertex {"id": 281474976710658, "label": "", "properties": {"a": [4, 5, 6], "name": "node2", "type": "vertex"}}::vertex {"id": 281474976710659, "label": "", "properties": {"a": [7, 8, 9], "name": "node3", "type": "vertex"}}::vertex (3 rows) -- -- Issue 1302 -- SELECT create_graph('issue_1302'); NOTICE: graph "issue_1302" has been created create_graph -------------- (1 row) SELECT * FROM cypher('cypher_unwind', $$ CREATE (agtype {name: 'node1', a: [1, 2, 3]}), (m {name: 'node2', a: [4, 5, 6]}), (o {name: 'node3', a: [7, 8, 9]}), (n)-[:KNOWS]->(m), (m)-[:KNOWS]->(o) $$) as (i agtype); i --- (0 rows) SELECT * FROM cypher('cypher_unwind', $$ MATCH (n) WITH n.a AS a UNWIND a AS i RETURN * $$) as (i agtype, j agtype); i | j -----------+--- [1, 2, 3] | 1 [1, 2, 3] | 2 [1, 2, 3] | 3 [4, 5, 6] | 4 [4, 5, 6] | 5 [4, 5, 6] | 6 [7, 8, 9] | 7 [7, 8, 9] | 8 [7, 8, 9] | 9 [1, 2, 3] | 1 [1, 2, 3] | 2 [1, 2, 3] | 3 [4, 5, 6] | 4 [4, 5, 6] | 5 [4, 5, 6] | 6 [7, 8, 9] | 7 [7, 8, 9] | 8 [7, 8, 9] | 9 | (19 rows) SELECT * FROM cypher('cypher_unwind', $$ UNWIND NULL as i RETURN i $$) as (i agtype); i --- (1 row) -- -- Clean up -- SELECT drop_graph('cypher_unwind', true); NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to table cypher_unwind._ag_label_vertex drop cascades to table cypher_unwind._ag_label_edge drop cascades to table cypher_unwind."KNOWS" NOTICE: graph "cypher_unwind" has been dropped drop_graph ------------ (1 row) SELECT drop_graph('issue_1302', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table issue_1302._ag_label_vertex drop cascades to table issue_1302._ag_label_edge NOTICE: graph "issue_1302" has been dropped drop_graph ------------ (1 row) age-PG16-v1.5.0-rc0/regress/expected/cypher_vle.out000066400000000000000000003060341454606241200217520ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher_vle'); NOTICE: graph "cypher_vle" has been created create_graph -------------- (1 row) -- -- Create table to hold the start and end vertices to test the SRF -- CREATE TABLE start_and_end_points (start_vertex agtype, end_vertex agtype); -- Create a graph to test SELECT * FROM cypher('cypher_vle', $$CREATE (b:begin)-[:edge {name: 'main edge', number: 1, dangerous: {type: "all", level: "all"}}]->(u1:middle)-[:edge {name: 'main edge', number: 2, dangerous: {type: "all", level: "all"}, packages: [2,4,6]}]->(u2:middle)-[:edge {name: 'main edge', number: 3, dangerous: {type: "all", level: "all"}}]->(u3:middle)-[:edge {name: 'main edge', number: 4, dangerous: {type: "all", level: "all"}}]->(e:end), (u1)-[:self_loop {name: 'self loop', number: 1, dangerous: {type: "all", level: "all"}}]->(u1), (e)-[:self_loop {name: 'self loop', number: 2, dangerous: {type: "all", level: "all"}}]->(e), (b)-[:alternate_edge {name: 'alternate edge', number: 1, packages: [2,4,6], dangerous: {type: "poisons", level: "all"}}]->(u1), (u2)-[:alternate_edge {name: 'alternate edge', number: 2, packages: [2,4,6], dangerous: {type: "poisons", level: "all"}}]->(u3), (u3)-[:alternate_edge {name: 'alternate edge', number: 3, packages: [2,4,6], dangerous: {type: "poisons", level: "all"}}]->(e), (u2)-[:bypass_edge {name: 'bypass edge', number: 1, packages: [1,3,5,7]}]->(e), (e)-[:alternate_edge {name: 'backup edge', number: 1, packages: [1,3,5,7]}]->(u3), (u3)-[:alternate_edge {name: 'backup edge', number: 2, packages: [1,3,5,7]}]->(u2), (u2)-[:bypass_edge {name: 'bypass edge', number: 2, packages: [1,3,5,7], dangerous: {type: "poisons", level: "all"}}]->(b) RETURN b, e $$) AS (b agtype, e agtype); b | e ---------------------------------------------------------------------+-------------------------------------------------------------------- {"id": 844424930131969, "label": "begin", "properties": {}}::vertex | {"id": 1688849860263937, "label": "end", "properties": {}}::vertex (1 row) -- Insert start and end points for graph INSERT INTO start_and_end_points (SELECT * FROM cypher('cypher_vle', $$MATCH (b:begin)-[:edge]->()-[:edge]->()-[:edge]->()-[:edge]->(e:end) RETURN b, e $$) AS (b agtype, e agtype)); -- Display our points SELECT * FROM start_and_end_points; start_vertex | end_vertex ---------------------------------------------------------------------+-------------------------------------------------------------------- {"id": 844424930131969, "label": "begin", "properties": {}}::vertex | {"id": 1688849860263937, "label": "end", "properties": {}}::vertex (1 row) -- Count the total paths from left (start) to right (end) -[]-> should be 400 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {}}::edge'::agtype, '1'::agtype, 'null'::agtype, '1'::agtype) group by ctid; count ------- 400 (1 row) -- Count the total paths from right (end) to left (start) <-[]- should be 2 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {}}::edge'::agtype, '1'::agtype, 'null'::agtype, '-1'::agtype) group by ctid; count ------- 2 (1 row) -- Count the total paths undirectional -[]- should be 7092 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {}}::edge'::agtype, '1'::agtype, 'null'::agtype, '0'::agtype) group by ctid; count ------- 7092 (1 row) -- All paths of length 3 -[]-> should be 2 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {}}::edge'::agtype, '3'::agtype, '3'::agtype, '1'::agtype); count ------- 2 (1 row) -- All paths of length 3 <-[]- should be 1 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {}}::edge'::agtype, '3'::agtype, '3'::agtype, '-1'::agtype); count ------- 1 (1 row) -- All paths of length 3 -[]- should be 12 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {}}::edge'::agtype, '3'::agtype, '3'::agtype, '0'::agtype); count ------- 12 (1 row) -- Test edge label matching - should match 1 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "edge", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {}}::edge'::agtype, '1'::agtype, 'null'::agtype, '1'::agtype); count ------- 1 (1 row) -- Test scalar property matching - should match 1 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {"name": "main edge"}}::edge'::agtype, '1'::agtype, 'null'::agtype, '1'::agtype); count ------- 1 (1 row) -- Test object property matching - should match 4 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {"dangerous": {"type": "all", "level": "all"}}}::edge'::agtype, '1'::agtype, 'null'::agtype, '1'::agtype); count ------- 4 (1 row) -- Test array property matching - should match 2 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {"packages": [1,3,5,7]}}::edge'::agtype, '1'::agtype, 'null'::agtype, '0'::agtype); count ------- 2 (1 row) -- Test array property matching - should match 1 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {"packages": [2,4,6]}}::edge'::agtype, '1'::agtype, 'null'::agtype, '0'::agtype); count ------- 1 (1 row) -- Test object property matching - should match 1 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {"dangerous": {"type": "poisons", "level": "all"}}}::edge'::agtype, '1'::agtype, 'null'::agtype, '0'::agtype); count ------- 1 (1 row) -- Test the VLE match integration -- Each should find 400 SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[*]->(v:end) RETURN count(*) $$) AS (e agtype); e ----- 400 (1 row) SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[*..]->(v:end) RETURN count(*) $$) AS (e agtype); e ----- 400 (1 row) SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[*0..]->(v:end) RETURN count(*) $$) AS (e agtype); e ----- 400 (1 row) SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[*1..]->(v:end) RETURN count(*) $$) AS (e agtype); e ----- 400 (1 row) SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[*1..200]->(v:end) RETURN count(*) $$) AS (e agtype); e ----- 400 (1 row) -- Each should find 2 SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)<-[*]-(v:end) RETURN count(*) $$) AS (e agtype); e --- 2 (1 row) SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)<-[*..]-(v:end) RETURN count(*) $$) AS (e agtype); e --- 2 (1 row) SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)<-[*0..]-(v:end) RETURN count(*) $$) AS (e agtype); e --- 2 (1 row) SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)<-[*1..]-(v:end) RETURN count(*) $$) AS (e agtype); e --- 2 (1 row) SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)<-[*1..200]-(v:end) RETURN count(*) $$) AS (e agtype); e --- 2 (1 row) -- Each should find 7092 SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[*]-(v:end) RETURN count(*) $$) AS (e agtype); e ------ 7092 (1 row) SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[*..]-(v:end) RETURN count(*) $$) AS (e agtype); e ------ 7092 (1 row) SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[*0..]-(v:end) RETURN count(*) $$) AS (e agtype); e ------ 7092 (1 row) SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[*1..]-(v:end) RETURN count(*) $$) AS (e agtype); e ------ 7092 (1 row) SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[*1..200]-(v:end) RETURN count(*) $$) AS (e agtype); e ------ 7092 (1 row) -- Each should find 1 SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[:edge*]-(v:end) RETURN count(*) $$) AS (e agtype); e --- 1 (1 row) SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[:edge* {name: "main edge"}]-(v:end) RETURN count(*) $$) AS (e agtype); e --- 1 (1 row) SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[* {name: "main edge"}]-(v:end) RETURN count(*) $$) AS (e agtype); e --- 1 (1 row) -- Each should find 1 SELECT * FROM cypher('cypher_vle', $$MATCH ()<-[*4..4 {name: "main edge"}]-() RETURN count(*) $$) AS (e agtype); e --- 1 (1 row) SELECT * FROM cypher('cypher_vle', $$MATCH (u)<-[*4..4 {name: "main edge"}]-() RETURN count(*) $$) AS (e agtype); e --- 1 (1 row) SELECT * FROM cypher('cypher_vle', $$MATCH ()<-[*4..4 {name: "main edge"}]-(v) RETURN count(*) $$) AS (e agtype); e --- 1 (1 row) -- Each should find 2922 SELECT * FROM cypher('cypher_vle', $$MATCH ()-[*]->() RETURN count(*) $$) AS (e agtype); e ------ 2922 (1 row) SELECT * FROM cypher('cypher_vle', $$MATCH (u)-[*]->() RETURN count(*) $$) AS (e agtype); e ------ 2922 (1 row) SELECT * FROM cypher('cypher_vle', $$MATCH ()-[*]->(v) RETURN count(*) $$) AS (e agtype); e ------ 2922 (1 row) -- Should find 2 SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)<-[e*]-(v:end) RETURN e $$) AS (e agtype); e ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 2251799813685253, "label": "alternate_edge", "end_id": 1407374883553282, "start_id": 1407374883553283, "properties": {"name": "backup edge", "number": 2, "packages": [1, 3, 5, 7]}}::edge, {"id": 2251799813685252, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1688849860263937, "properties": {"name": "backup edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge] [{"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 2251799813685253, "label": "alternate_edge", "end_id": 1407374883553282, "start_id": 1407374883553283, "properties": {"name": "backup edge", "number": 2, "packages": [1, 3, 5, 7]}}::edge, {"id": 2251799813685252, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1688849860263937, "properties": {"name": "backup edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1970324836974594, "label": "self_loop", "end_id": 1688849860263937, "start_id": 1688849860263937, "properties": {"name": "self loop", "number": 2, "dangerous": {"type": "all", "level": "all"}}}::edge] (2 rows) -- Should find 5 SELECT * FROM cypher('cypher_vle', $$MATCH p=(:begin)<-[*1..1]-()-[]-() RETURN p ORDER BY p $$) AS (e agtype); e --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 1125899906842626, "label": "edge", "end_id": 1407374883553283, "start_id": 1407374883553282, "properties": {"name": "main edge", "number": 3, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 1125899906842627, "label": "edge", "end_id": 1407374883553282, "start_id": 1407374883553281, "properties": {"name": "main edge", "number": 2, "packages": [2, 4, 6], "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1407374883553281, "label": "middle", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685250, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1407374883553282, "properties": {"name": "alternate edge", "number": 2, "packages": [2, 4, 6], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685253, "label": "alternate_edge", "end_id": 1407374883553282, "start_id": 1407374883553283, "properties": {"name": "backup edge", "number": 2, "packages": [1, 3, 5, 7]}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2533274790395905, "label": "bypass_edge", "end_id": 1688849860263937, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path (5 rows) -- Should find 2922 SELECT * FROM cypher('cypher_vle', $$MATCH p=()-[*]->(v) RETURN count(*) $$) AS (e agtype); e ------ 2922 (1 row) -- Should find 2 SELECT * FROM cypher('cypher_vle', $$MATCH p=(u:begin)-[*3..3]->(v:end) RETURN p $$) AS (e agtype); e ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2251799813685249, "label": "alternate_edge", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {"name": "alternate edge", "number": 1, "packages": [2, 4, 6], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553281, "label": "middle", "properties": {}}::vertex, {"id": 1125899906842627, "label": "edge", "end_id": 1407374883553282, "start_id": 1407374883553281, "properties": {"name": "main edge", "number": 2, "packages": [2, 4, 6], "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2533274790395905, "label": "bypass_edge", "end_id": 1688849860263937, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 1125899906842628, "label": "edge", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {"name": "main edge", "number": 1, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1407374883553281, "label": "middle", "properties": {}}::vertex, {"id": 1125899906842627, "label": "edge", "end_id": 1407374883553282, "start_id": 1407374883553281, "properties": {"name": "main edge", "number": 2, "packages": [2, 4, 6], "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2533274790395905, "label": "bypass_edge", "end_id": 1688849860263937, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path (2 rows) -- Should find 12 SELECT * FROM cypher('cypher_vle', $$MATCH p=(u:begin)-[*3..3]-(v:end) RETURN p $$) AS (e agtype); e ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685253, "label": "alternate_edge", "end_id": 1407374883553282, "start_id": 1407374883553283, "properties": {"name": "backup edge", "number": 2, "packages": [1, 3, 5, 7]}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685252, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1688849860263937, "properties": {"name": "backup edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685253, "label": "alternate_edge", "end_id": 1407374883553282, "start_id": 1407374883553283, "properties": {"name": "backup edge", "number": 2, "packages": [1, 3, 5, 7]}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685251, "label": "alternate_edge", "end_id": 1688849860263937, "start_id": 1407374883553283, "properties": {"name": "alternate edge", "number": 3, "packages": [2, 4, 6], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685253, "label": "alternate_edge", "end_id": 1407374883553282, "start_id": 1407374883553283, "properties": {"name": "backup edge", "number": 2, "packages": [1, 3, 5, 7]}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 1125899906842625, "label": "edge", "end_id": 1688849860263937, "start_id": 1407374883553283, "properties": {"name": "main edge", "number": 4, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2533274790395905, "label": "bypass_edge", "end_id": 1688849860263937, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex, {"id": 1970324836974594, "label": "self_loop", "end_id": 1688849860263937, "start_id": 1688849860263937, "properties": {"name": "self loop", "number": 2, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685250, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1407374883553282, "properties": {"name": "alternate edge", "number": 2, "packages": [2, 4, 6], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685252, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1688849860263937, "properties": {"name": "backup edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685250, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1407374883553282, "properties": {"name": "alternate edge", "number": 2, "packages": [2, 4, 6], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685251, "label": "alternate_edge", "end_id": 1688849860263937, "start_id": 1407374883553283, "properties": {"name": "alternate edge", "number": 3, "packages": [2, 4, 6], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685250, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1407374883553282, "properties": {"name": "alternate edge", "number": 2, "packages": [2, 4, 6], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 1125899906842625, "label": "edge", "end_id": 1688849860263937, "start_id": 1407374883553283, "properties": {"name": "main edge", "number": 4, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 1125899906842626, "label": "edge", "end_id": 1407374883553283, "start_id": 1407374883553282, "properties": {"name": "main edge", "number": 3, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685252, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1688849860263937, "properties": {"name": "backup edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 1125899906842626, "label": "edge", "end_id": 1407374883553283, "start_id": 1407374883553282, "properties": {"name": "main edge", "number": 3, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685251, "label": "alternate_edge", "end_id": 1688849860263937, "start_id": 1407374883553283, "properties": {"name": "alternate edge", "number": 3, "packages": [2, 4, 6], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 1125899906842626, "label": "edge", "end_id": 1407374883553283, "start_id": 1407374883553282, "properties": {"name": "main edge", "number": 3, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 1125899906842625, "label": "edge", "end_id": 1688849860263937, "start_id": 1407374883553283, "properties": {"name": "main edge", "number": 4, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2251799813685249, "label": "alternate_edge", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {"name": "alternate edge", "number": 1, "packages": [2, 4, 6], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553281, "label": "middle", "properties": {}}::vertex, {"id": 1125899906842627, "label": "edge", "end_id": 1407374883553282, "start_id": 1407374883553281, "properties": {"name": "main edge", "number": 2, "packages": [2, 4, 6], "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2533274790395905, "label": "bypass_edge", "end_id": 1688849860263937, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 1125899906842628, "label": "edge", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {"name": "main edge", "number": 1, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1407374883553281, "label": "middle", "properties": {}}::vertex, {"id": 1125899906842627, "label": "edge", "end_id": 1407374883553282, "start_id": 1407374883553281, "properties": {"name": "main edge", "number": 2, "packages": [2, 4, 6], "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2533274790395905, "label": "bypass_edge", "end_id": 1688849860263937, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path (12 rows) -- Each should find 2 SELECT * FROM cypher('cypher_vle', $$MATCH p=(u:begin)<-[*]-(v:end) RETURN p $$) AS (e agtype); e ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685253, "label": "alternate_edge", "end_id": 1407374883553282, "start_id": 1407374883553283, "properties": {"name": "backup edge", "number": 2, "packages": [1, 3, 5, 7]}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685252, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1688849860263937, "properties": {"name": "backup edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685253, "label": "alternate_edge", "end_id": 1407374883553282, "start_id": 1407374883553283, "properties": {"name": "backup edge", "number": 2, "packages": [1, 3, 5, 7]}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685252, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1688849860263937, "properties": {"name": "backup edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex, {"id": 1970324836974594, "label": "self_loop", "end_id": 1688849860263937, "start_id": 1688849860263937, "properties": {"name": "self loop", "number": 2, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path (2 rows) SELECT * FROM cypher('cypher_vle', $$MATCH p=(u:begin)<-[e*]-(v:end) RETURN p $$) AS (e agtype); e ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685253, "label": "alternate_edge", "end_id": 1407374883553282, "start_id": 1407374883553283, "properties": {"name": "backup edge", "number": 2, "packages": [1, 3, 5, 7]}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685252, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1688849860263937, "properties": {"name": "backup edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685253, "label": "alternate_edge", "end_id": 1407374883553282, "start_id": 1407374883553283, "properties": {"name": "backup edge", "number": 2, "packages": [1, 3, 5, 7]}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685252, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1688849860263937, "properties": {"name": "backup edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex, {"id": 1970324836974594, "label": "self_loop", "end_id": 1688849860263937, "start_id": 1688849860263937, "properties": {"name": "self loop", "number": 2, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path (2 rows) SELECT * FROM cypher('cypher_vle', $$MATCH p=(u:begin)<-[e*]-(v:end) RETURN e $$) AS (e agtype); e ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 2251799813685253, "label": "alternate_edge", "end_id": 1407374883553282, "start_id": 1407374883553283, "properties": {"name": "backup edge", "number": 2, "packages": [1, 3, 5, 7]}}::edge, {"id": 2251799813685252, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1688849860263937, "properties": {"name": "backup edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge] [{"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 2251799813685253, "label": "alternate_edge", "end_id": 1407374883553282, "start_id": 1407374883553283, "properties": {"name": "backup edge", "number": 2, "packages": [1, 3, 5, 7]}}::edge, {"id": 2251799813685252, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1688849860263937, "properties": {"name": "backup edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1970324836974594, "label": "self_loop", "end_id": 1688849860263937, "start_id": 1688849860263937, "properties": {"name": "self loop", "number": 2, "dangerous": {"type": "all", "level": "all"}}}::edge] (2 rows) SELECT * FROM cypher('cypher_vle', $$MATCH p=(:begin)<-[*]-()<-[]-(:end) RETURN p $$) AS (e agtype); e ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685253, "label": "alternate_edge", "end_id": 1407374883553282, "start_id": 1407374883553283, "properties": {"name": "backup edge", "number": 2, "packages": [1, 3, 5, 7]}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685252, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1688849860263937, "properties": {"name": "backup edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685253, "label": "alternate_edge", "end_id": 1407374883553282, "start_id": 1407374883553283, "properties": {"name": "backup edge", "number": 2, "packages": [1, 3, 5, 7]}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685252, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1688849860263937, "properties": {"name": "backup edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex, {"id": 1970324836974594, "label": "self_loop", "end_id": 1688849860263937, "start_id": 1688849860263937, "properties": {"name": "self loop", "number": 2, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path (2 rows) -- Each should return 31 SELECT count(*) FROM cypher('cypher_vle', $$ MATCH ()-[e1]->(v)-[e2]->() RETURN e1,e2 $$) AS (e1 agtype, e2 agtype); count ------- 31 (1 row) SELECT count(*) FROM cypher('cypher_vle', $$ MATCH ()-[e1*1..1]->(v)-[e2*1..1]->() RETURN e1, e2 $$) AS (e1 agtype, e2 agtype); count ------- 31 (1 row) SELECT count(*) FROM cypher('cypher_vle', $$ MATCH (v)-[e1*1..1]->()-[e2*1..1]->() RETURN e1, e2 $$) AS (e1 agtype, e2 agtype); count ------- 31 (1 row) SELECT count(*) FROM cypher('cypher_vle', $$ MATCH ()-[e1]->(v)-[e2*1..1]->() RETURN e1, e2 $$) AS (e1 agtype, e2 agtype); count ------- 31 (1 row) SELECT count(*) FROM cypher('cypher_vle', $$ MATCH ()-[e1]->()-[e2*1..1]->() RETURN e1, e2 $$) AS (e1 agtype, e2 agtype); count ------- 31 (1 row) SELECT count(*) FROM cypher('cypher_vle', $$ MATCH ()-[e1*1..1]->(v)-[e2]->() RETURN e1, e2 $$) AS (e1 agtype, e2 agtype); count ------- 31 (1 row) SELECT count(*) FROM cypher('cypher_vle', $$ MATCH ()-[e1*1..1]->()-[e2]->() RETURN e1, e2 $$) AS (e1 agtype, e2 agtype); count ------- 31 (1 row) SELECT count(*) FROM cypher('cypher_vle', $$ MATCH (a)-[e1]->(a)-[e2*1..1]->() RETURN e1, e2 $$) AS (e1 agtype, e2 agtype); count ------- 2 (1 row) SELECT count(*) FROM cypher('cypher_vle', $$ MATCH (a) MATCH (a)-[e1*1..1]->(v) RETURN e1 $$) AS (e1 agtype); count ------- 13 (1 row) SELECT count(*) FROM cypher('cypher_vle', $$ MATCH (a) MATCH ()-[e1*1..1]->(a) RETURN e1 $$) AS (e1 agtype); count ------- 13 (1 row) SELECT count(*) FROM cypher('cypher_vle', $$ MATCH (a)-[e*1..1]->() RETURN a, e $$) AS (e1 agtype, e2 agtype); count ------- 13 (1 row) -- Should return 1 path SELECT * FROM cypher('cypher_vle', $$ MATCH p=()<-[e1*]-(:end)-[e2*]->(:begin) RETURN p $$) AS (result agtype); result ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [{"id": 1688849860263937, "label": "end", "properties": {}}::vertex, {"id": 1970324836974594, "label": "self_loop", "end_id": 1688849860263937, "start_id": 1688849860263937, "properties": {"name": "self loop", "number": 2, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex, {"id": 2251799813685252, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1688849860263937, "properties": {"name": "backup edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685253, "label": "alternate_edge", "end_id": 1407374883553282, "start_id": 1407374883553283, "properties": {"name": "backup edge", "number": 2, "packages": [1, 3, 5, 7]}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 844424930131969, "label": "begin", "properties": {}}::vertex]::path (1 row) -- Each should return 3 SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[e*0..1]->(v) RETURN id(u), e, id(v) $$) AS (u agtype, e agtype, v agtype); u | e | v -----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------ 844424930131969 | [] | 844424930131969 844424930131969 | [{"id": 2251799813685249, "label": "alternate_edge", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {"name": "alternate edge", "number": 1, "packages": [2, 4, 6], "dangerous": {"type": "poisons", "level": "all"}}}::edge] | 1407374883553281 844424930131969 | [{"id": 1125899906842628, "label": "edge", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {"name": "main edge", "number": 1, "dangerous": {"type": "all", "level": "all"}}}::edge] | 1407374883553281 (3 rows) SELECT * FROM cypher('cypher_vle', $$MATCH p=(u:begin)-[e*0..1]->(v) RETURN p $$) AS (p agtype); p -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2251799813685249, "label": "alternate_edge", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {"name": "alternate edge", "number": 1, "packages": [2, 4, 6], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553281, "label": "middle", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 1125899906842628, "label": "edge", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {"name": "main edge", "number": 1, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1407374883553281, "label": "middle", "properties": {}}::vertex]::path (3 rows) -- Each should return 5 SELECT * FROM cypher('cypher_vle', $$MATCH (u)-[e*0..0]->(v) RETURN id(u), e, id(v) $$) AS (u agtype, e agtype, v agtype); u | e | v ------------------+----+------------------ 844424930131969 | [] | 844424930131969 1407374883553281 | [] | 1407374883553281 1407374883553282 | [] | 1407374883553282 1407374883553283 | [] | 1407374883553283 1688849860263937 | [] | 1688849860263937 (5 rows) SELECT * FROM cypher('cypher_vle', $$MATCH p=(u)-[e*0..0]->(v) RETURN id(u), p, id(v) $$) AS (u agtype, p agtype, v agtype); u | p | v ------------------+-------------------------------------------------------------------------------+------------------ 844424930131969 | [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex]::path | 844424930131969 1407374883553281 | [{"id": 1407374883553281, "label": "middle", "properties": {}}::vertex]::path | 1407374883553281 1407374883553282 | [{"id": 1407374883553282, "label": "middle", "properties": {}}::vertex]::path | 1407374883553282 1407374883553283 | [{"id": 1407374883553283, "label": "middle", "properties": {}}::vertex]::path | 1407374883553283 1688849860263937 | [{"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path | 1688849860263937 (5 rows) -- Each should return 13 and will be the same SELECT * FROM cypher('cypher_vle', $$MATCH p=()-[*0..0]->()-[]->() RETURN p $$) AS (p agtype); p ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2251799813685249, "label": "alternate_edge", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {"name": "alternate edge", "number": 1, "packages": [2, 4, 6], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553281, "label": "middle", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 1125899906842628, "label": "edge", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {"name": "main edge", "number": 1, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1407374883553281, "label": "middle", "properties": {}}::vertex]::path [{"id": 1407374883553281, "label": "middle", "properties": {}}::vertex, {"id": 1125899906842627, "label": "edge", "end_id": 1407374883553282, "start_id": 1407374883553281, "properties": {"name": "main edge", "number": 2, "packages": [2, 4, 6], "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex]::path [{"id": 1407374883553281, "label": "middle", "properties": {}}::vertex, {"id": 1970324836974593, "label": "self_loop", "end_id": 1407374883553281, "start_id": 1407374883553281, "properties": {"name": "self loop", "number": 1, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1407374883553281, "label": "middle", "properties": {}}::vertex]::path [{"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 1125899906842626, "label": "edge", "end_id": 1407374883553283, "start_id": 1407374883553282, "properties": {"name": "main edge", "number": 3, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex]::path [{"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685250, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1407374883553282, "properties": {"name": "alternate edge", "number": 2, "packages": [2, 4, 6], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex]::path [{"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2533274790395905, "label": "bypass_edge", "end_id": 1688849860263937, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path [{"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 844424930131969, "label": "begin", "properties": {}}::vertex]::path [{"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 1125899906842625, "label": "edge", "end_id": 1688849860263937, "start_id": 1407374883553283, "properties": {"name": "main edge", "number": 4, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path [{"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685253, "label": "alternate_edge", "end_id": 1407374883553282, "start_id": 1407374883553283, "properties": {"name": "backup edge", "number": 2, "packages": [1, 3, 5, 7]}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex]::path [{"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685251, "label": "alternate_edge", "end_id": 1688849860263937, "start_id": 1407374883553283, "properties": {"name": "alternate edge", "number": 3, "packages": [2, 4, 6], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path [{"id": 1688849860263937, "label": "end", "properties": {}}::vertex, {"id": 2251799813685252, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1688849860263937, "properties": {"name": "backup edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex]::path [{"id": 1688849860263937, "label": "end", "properties": {}}::vertex, {"id": 1970324836974594, "label": "self_loop", "end_id": 1688849860263937, "start_id": 1688849860263937, "properties": {"name": "self loop", "number": 2, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path (13 rows) SELECT * FROM cypher('cypher_vle', $$MATCH p=()-[]->()-[*0..0]->() RETURN p $$) AS (p agtype); p ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2533274790395906, "label": "bypass_edge", "end_id": 844424930131969, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 2, "packages": [1, 3, 5, 7], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 844424930131969, "label": "begin", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 2251799813685249, "label": "alternate_edge", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {"name": "alternate edge", "number": 1, "packages": [2, 4, 6], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553281, "label": "middle", "properties": {}}::vertex]::path [{"id": 844424930131969, "label": "begin", "properties": {}}::vertex, {"id": 1125899906842628, "label": "edge", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {"name": "main edge", "number": 1, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1407374883553281, "label": "middle", "properties": {}}::vertex]::path [{"id": 1407374883553281, "label": "middle", "properties": {}}::vertex, {"id": 1970324836974593, "label": "self_loop", "end_id": 1407374883553281, "start_id": 1407374883553281, "properties": {"name": "self loop", "number": 1, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1407374883553281, "label": "middle", "properties": {}}::vertex]::path [{"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685253, "label": "alternate_edge", "end_id": 1407374883553282, "start_id": 1407374883553283, "properties": {"name": "backup edge", "number": 2, "packages": [1, 3, 5, 7]}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex]::path [{"id": 1407374883553281, "label": "middle", "properties": {}}::vertex, {"id": 1125899906842627, "label": "edge", "end_id": 1407374883553282, "start_id": 1407374883553281, "properties": {"name": "main edge", "number": 2, "packages": [2, 4, 6], "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1407374883553282, "label": "middle", "properties": {}}::vertex]::path [{"id": 1688849860263937, "label": "end", "properties": {}}::vertex, {"id": 2251799813685252, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1688849860263937, "properties": {"name": "backup edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex]::path [{"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 1125899906842626, "label": "edge", "end_id": 1407374883553283, "start_id": 1407374883553282, "properties": {"name": "main edge", "number": 3, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex]::path [{"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685250, "label": "alternate_edge", "end_id": 1407374883553283, "start_id": 1407374883553282, "properties": {"name": "alternate edge", "number": 2, "packages": [2, 4, 6], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1407374883553283, "label": "middle", "properties": {}}::vertex]::path [{"id": 1407374883553282, "label": "middle", "properties": {}}::vertex, {"id": 2533274790395905, "label": "bypass_edge", "end_id": 1688849860263937, "start_id": 1407374883553282, "properties": {"name": "bypass edge", "number": 1, "packages": [1, 3, 5, 7]}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path [{"id": 1688849860263937, "label": "end", "properties": {}}::vertex, {"id": 1970324836974594, "label": "self_loop", "end_id": 1688849860263937, "start_id": 1688849860263937, "properties": {"name": "self loop", "number": 2, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path [{"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 1125899906842625, "label": "edge", "end_id": 1688849860263937, "start_id": 1407374883553283, "properties": {"name": "main edge", "number": 4, "dangerous": {"type": "all", "level": "all"}}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path [{"id": 1407374883553283, "label": "middle", "properties": {}}::vertex, {"id": 2251799813685251, "label": "alternate_edge", "end_id": 1688849860263937, "start_id": 1407374883553283, "properties": {"name": "alternate edge", "number": 3, "packages": [2, 4, 6], "dangerous": {"type": "poisons", "level": "all"}}}::edge, {"id": 1688849860263937, "label": "end", "properties": {}}::vertex]::path (13 rows) -- -- Test VLE inside of a BEGIN/COMMIT block -- BEGIN; SELECT create_graph('mygraph'); NOTICE: graph "mygraph" has been created create_graph -------------- (1 row) /* should create 1 path with 1 edge */ SELECT * FROM cypher('mygraph', $$ CREATE (a:Node {name: 'a'})-[:Edge]->(c:Node {name: 'c'}) $$) AS (g1 agtype); g1 ---- (0 rows) /* should return 1 path with 1 edge */ SELECT * FROM cypher('mygraph', $$ MATCH p = ()-[:Edge*]->() RETURN p $$) AS (g2 agtype); g2 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 844424930131969, "label": "Node", "properties": {"name": "a"}}::vertex, {"id": 1125899906842625, "label": "Edge", "end_id": 844424930131970, "start_id": 844424930131969, "properties": {}}::edge, {"id": 844424930131970, "label": "Node", "properties": {"name": "c"}}::vertex]::path (1 row) /* should delete the original path and replace it with a path with 2 edges */ SELECT * FROM cypher('mygraph', $$ MATCH (a:Node {name: 'a'})-[e:Edge]->(c:Node {name: 'c'}) DELETE e CREATE (a)-[:Edge]->(:Node {name: 'b'})-[:Edge]->(c) $$) AS (g3 agtype); g3 ---- (0 rows) /* should find 2 paths with 1 edge */ SELECT * FROM cypher('mygraph', $$ MATCH p = ()-[:Edge]->() RETURN p $$) AS (g4 agtype); g4 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 844424930131971, "label": "Node", "properties": {"name": "b"}}::vertex, {"id": 1125899906842626, "label": "Edge", "end_id": 844424930131970, "start_id": 844424930131971, "properties": {}}::edge, {"id": 844424930131970, "label": "Node", "properties": {"name": "c"}}::vertex]::path [{"id": 844424930131969, "label": "Node", "properties": {"name": "a"}}::vertex, {"id": 1125899906842627, "label": "Edge", "end_id": 844424930131971, "start_id": 844424930131969, "properties": {}}::edge, {"id": 844424930131971, "label": "Node", "properties": {"name": "b"}}::vertex]::path (2 rows) /* should return 3 paths, 2 with 1 edge, 1 with 2 edges */ SELECT * FROM cypher('mygraph', $$ MATCH p = ()-[:Edge*]->() RETURN p $$) AS (g5 agtype); g5 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 844424930131969, "label": "Node", "properties": {"name": "a"}}::vertex, {"id": 1125899906842627, "label": "Edge", "end_id": 844424930131971, "start_id": 844424930131969, "properties": {}}::edge, {"id": 844424930131971, "label": "Node", "properties": {"name": "b"}}::vertex]::path [{"id": 844424930131969, "label": "Node", "properties": {"name": "a"}}::vertex, {"id": 1125899906842627, "label": "Edge", "end_id": 844424930131971, "start_id": 844424930131969, "properties": {}}::edge, {"id": 844424930131971, "label": "Node", "properties": {"name": "b"}}::vertex, {"id": 1125899906842626, "label": "Edge", "end_id": 844424930131970, "start_id": 844424930131971, "properties": {}}::edge, {"id": 844424930131970, "label": "Node", "properties": {"name": "c"}}::vertex]::path [{"id": 844424930131971, "label": "Node", "properties": {"name": "b"}}::vertex, {"id": 1125899906842626, "label": "Edge", "end_id": 844424930131970, "start_id": 844424930131971, "properties": {}}::edge, {"id": 844424930131970, "label": "Node", "properties": {"name": "c"}}::vertex]::path (3 rows) SELECT drop_graph('mygraph', true); NOTICE: drop cascades to 4 other objects DETAIL: drop cascades to table mygraph._ag_label_vertex drop cascades to table mygraph._ag_label_edge drop cascades to table mygraph."Node" drop cascades to table mygraph."Edge" NOTICE: graph "mygraph" has been dropped drop_graph ------------ (1 row) COMMIT; -- -- Test VLE inside procedures -- SELECT create_graph('mygraph'); NOTICE: graph "mygraph" has been created create_graph -------------- (1 row) SELECT create_vlabel('mygraph', 'head'); NOTICE: VLabel "head" has been created create_vlabel --------------- (1 row) SELECT create_vlabel('mygraph', 'tail'); NOTICE: VLabel "tail" has been created create_vlabel --------------- (1 row) SELECT create_vlabel('mygraph', 'node'); NOTICE: VLabel "node" has been created create_vlabel --------------- (1 row) SELECT create_elabel('mygraph', 'next'); NOTICE: ELabel "next" has been created create_elabel --------------- (1 row) CREATE OR REPLACE FUNCTION create_list(list_name text) RETURNS void LANGUAGE 'plpgsql' AS $$ DECLARE ag_param agtype; BEGIN ag_param = FORMAT('{"list_name": "%s"}', $1)::agtype; PERFORM * FROM cypher('mygraph', $CYPHER$ MERGE (:head {name: $list_name})-[:next]->(:tail {name: $list_name}) $CYPHER$, ag_param) AS (a agtype); END $$; CREATE OR REPLACE FUNCTION prepend_node(list_name text, node_content text) RETURNS void LANGUAGE 'plpgsql' AS $$ DECLARE ag_param agtype; BEGIN ag_param = FORMAT('{"list_name": "%s", "node_content": "%s"}', $1, $2)::agtype; PERFORM * FROM cypher('mygraph', $CYPHER$ MATCH (h:head {name: $list_name})-[e:next]->(v) DELETE e CREATE (h)-[:next]->(:node {content: $node_content})-[:next]->(v) $CYPHER$, ag_param) AS (a agtype); END $$; CREATE OR REPLACE FUNCTION show_list_use_vle(list_name text) RETURNS TABLE(node agtype) LANGUAGE 'plpgsql' AS $$ DECLARE ag_param agtype; BEGIN ag_param = FORMAT('{"list_name": "%s"}', $1)::agtype; RETURN QUERY SELECT * FROM cypher('mygraph', $CYPHER$ MATCH (h:head {name: $list_name})-[e:next*]->(v:node) RETURN v $CYPHER$, ag_param) AS (node agtype); END $$; -- create a list SELECT create_list('list01'); create_list ------------- (1 row) -- prepend a node 'a' -- should find 1 row SELECT prepend_node('list01', 'a'); prepend_node -------------- (1 row) SELECT * FROM show_list_use_vle('list01'); node ----------------------------------------------------------------------------------- {"id": 1407374883553281, "label": "node", "properties": {"content": "a"}}::vertex (1 row) -- prepend a node 'b' -- should find 2 rows SELECT prepend_node('list01', 'b'); prepend_node -------------- (1 row) SELECT * FROM show_list_use_vle('list01'); node ----------------------------------------------------------------------------------- {"id": 1407374883553281, "label": "node", "properties": {"content": "a"}}::vertex {"id": 1407374883553282, "label": "node", "properties": {"content": "b"}}::vertex (2 rows) -- prepend a node 'c' -- should find 3 rows SELECT prepend_node('list01', 'c'); prepend_node -------------- (1 row) SELECT * FROM show_list_use_vle('list01'); node ----------------------------------------------------------------------------------- {"id": 1407374883553281, "label": "node", "properties": {"content": "a"}}::vertex {"id": 1407374883553282, "label": "node", "properties": {"content": "b"}}::vertex {"id": 1407374883553283, "label": "node", "properties": {"content": "c"}}::vertex (3 rows) DROP FUNCTION show_list_use_vle; SELECT drop_graph('mygraph', true); NOTICE: drop cascades to 6 other objects DETAIL: drop cascades to table mygraph._ag_label_vertex drop cascades to table mygraph._ag_label_edge drop cascades to table mygraph.head drop cascades to table mygraph.tail drop cascades to table mygraph.node drop cascades to table mygraph.next NOTICE: graph "mygraph" has been dropped drop_graph ------------ (1 row) -- invalid reuse of VLE SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p]-()-[p *]-() RETURN p $$)as (p agtype); ERROR: variable 'p' is for an edge LINE 1: ...CT * FROM cypher('cypher_vle', $$ MATCH ()-[p]-()-[p *]-() R... ^ SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-()-[p]-() RETURN p $$)as (p agtype); ERROR: variable 'p' is for a VLE edge LINE 1: ... * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-()-[p]-() RET... ^ SELECT * FROM cypher('cypher_vle', $$ MATCH (p)-[p *]-() RETURN p $$)as (p agtype); ERROR: variable 'p' is for a vertex LINE 1: SELECT * FROM cypher('cypher_vle', $$ MATCH (p)-[p *]-() RET... ^ SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-(p) RETURN p $$)as (p agtype); ERROR: variable 'p' is for a VLE edge LINE 1: ...CT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-(p) RETURN ... ^ SELECT * FROM cypher('cypher_vle', $$ MATCH p=()-[p *]-() RETURN p $$)as (p agtype); ERROR: variable "p" is for a path LINE 1: SELECT * FROM cypher('cypher_vle', $$ MATCH p=()-[p *]-() RE... ^ SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-()-[p *]-() RETURN p $$)as (p agtype); ERROR: duplicate variable 'p' LINE 1: ... * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-()-[p *]-() R... ^ SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p]-() MATCH ()-[p *]-() RETURN p $$)as (p agtype); ERROR: variable 'p' is for an edge LINE 1: ... cypher('cypher_vle', $$ MATCH ()-[p]-() MATCH ()-[p *]-() R... ^ SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH ()-[p]-() RETURN p $$)as (p agtype); ERROR: variable 'p' is for a VLE edge LINE 1: ...ypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH ()-[p]-() RET... ^ SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH ()-[p *]-() RETURN p $$)as (p agtype); ERROR: duplicate variable 'p' LINE 1: ...ypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH ()-[p *]-() R... ^ SELECT * FROM cypher('cypher_vle', $$ MATCH (p) MATCH ()-[p *]-() RETURN p $$)as (p agtype); ERROR: variable 'p' is for a vertex LINE 1: ...* FROM cypher('cypher_vle', $$ MATCH (p) MATCH ()-[p *]-() R... ^ SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH (p) RETURN p $$)as (p agtype); ERROR: variable 'p' is for a VLE edge LINE 1: ... cypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH (p) RETURN ... ^ SELECT * FROM cypher('cypher_vle', $$ MATCH p=() MATCH ()-[p *]-() RETURN p $$)as (p agtype); ERROR: variable 'p' is for a path LINE 1: ... FROM cypher('cypher_vle', $$ MATCH p=() MATCH ()-[p *]-() R... ^ SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH p=() RETURN p $$)as (p agtype); ERROR: variable "p" already exists LINE 1: ...M cypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH p=() RETUR... ^ -- issue 1033, agtype_access_operator not working on containerized edges SELECT create_graph('access'); NOTICE: graph "access" has been created create_graph -------------- (1 row) SELECT * FROM cypher('access',$$ CREATE ()-[:knows]->() $$) as (results agtype); results --------- (0 rows) SELECT * FROM cypher('access',$$ CREATE ()-[:knows]->()-[:knows]->()$$) as (results agtype); results --------- (0 rows) SELECT * FROM cypher('access',$$ CREATE ()-[:knows {id:0}]->()-[:knows {id: 1}]->() $$) as (results agtype); results --------- (0 rows) SELECT * FROM cypher('access',$$ CREATE ()-[:knows {id:2, arry:[0,1,2,3,{name: "joe"}]}]->()-[:knows {id: 3, arry:[1,3,{name:"john", stats: {age: 1000}}]}]->() $$) as (results agtype); results --------- (0 rows) SELECT * FROM cypher('access', $$ MATCH (u)-[e*]->(v) RETURN e $$)as (edges agtype); edges ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 844424930131969, "label": "knows", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge] [{"id": 844424930131971, "label": "knows", "end_id": 281474976710660, "start_id": 281474976710659, "properties": {}}::edge] [{"id": 844424930131971, "label": "knows", "end_id": 281474976710660, "start_id": 281474976710659, "properties": {}}::edge, {"id": 844424930131970, "label": "knows", "end_id": 281474976710661, "start_id": 281474976710660, "properties": {}}::edge] [{"id": 844424930131970, "label": "knows", "end_id": 281474976710661, "start_id": 281474976710660, "properties": {}}::edge] [{"id": 844424930131973, "label": "knows", "end_id": 281474976710663, "start_id": 281474976710662, "properties": {"id": 0}}::edge] [{"id": 844424930131973, "label": "knows", "end_id": 281474976710663, "start_id": 281474976710662, "properties": {"id": 0}}::edge, {"id": 844424930131972, "label": "knows", "end_id": 281474976710664, "start_id": 281474976710663, "properties": {"id": 1}}::edge] [{"id": 844424930131972, "label": "knows", "end_id": 281474976710664, "start_id": 281474976710663, "properties": {"id": 1}}::edge] [{"id": 844424930131975, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710665, "properties": {"id": 2, "arry": [0, 1, 2, 3, {"name": "joe"}]}}::edge] [{"id": 844424930131975, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710665, "properties": {"id": 2, "arry": [0, 1, 2, 3, {"name": "joe"}]}}::edge, {"id": 844424930131974, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710666, "properties": {"id": 3, "arry": [1, 3, {"name": "john", "stats": {"age": 1000}}]}}::edge] [{"id": 844424930131974, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710666, "properties": {"id": 3, "arry": [1, 3, {"name": "john", "stats": {"age": 1000}}]}}::edge] (10 rows) SELECT * FROM cypher('access', $$ MATCH (u)-[e*2..2]->(v) RETURN e $$)as (edges agtype); edges ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 844424930131971, "label": "knows", "end_id": 281474976710660, "start_id": 281474976710659, "properties": {}}::edge, {"id": 844424930131970, "label": "knows", "end_id": 281474976710661, "start_id": 281474976710660, "properties": {}}::edge] [{"id": 844424930131973, "label": "knows", "end_id": 281474976710663, "start_id": 281474976710662, "properties": {"id": 0}}::edge, {"id": 844424930131972, "label": "knows", "end_id": 281474976710664, "start_id": 281474976710663, "properties": {"id": 1}}::edge] [{"id": 844424930131975, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710665, "properties": {"id": 2, "arry": [0, 1, 2, 3, {"name": "joe"}]}}::edge, {"id": 844424930131974, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710666, "properties": {"id": 3, "arry": [1, 3, {"name": "john", "stats": {"age": 1000}}]}}::edge] (3 rows) SELECT * FROM cypher('access',$$ MATCH ()-[e*2..2]->() RETURN properties(e[0]) $$) as (prop_first_edge agtype); prop_first_edge -------------------------------------------------- {} {"id": 0} {"id": 2, "arry": [0, 1, 2, 3, {"name": "joe"}]} (3 rows) SELECT * FROM cypher('access',$$ MATCH ()-[e*2..2]->() RETURN e[0].id $$) as (results agtype); results --------- 0 2 (3 rows) SELECT * FROM cypher('access',$$ MATCH ()-[e*2..2]->() RETURN e[0].arry[2] $$) as (results agtype); results --------- 2 (3 rows) SELECT * FROM cypher('access',$$ MATCH ()-[e*2..2]->() RETURN properties(e[1]) $$) as (prop_second_edge agtype); prop_second_edge --------------------------------------------------------------------- {} {"id": 1} {"id": 3, "arry": [1, 3, {"name": "john", "stats": {"age": 1000}}]} (3 rows) SELECT * FROM cypher('access',$$ MATCH ()-[e*2..2]->() RETURN e[1].id $$) as (results agtype); results --------- 1 3 (3 rows) SELECT * FROM cypher('access',$$ MATCH ()-[e*2..2]->() RETURN e[1].arry[2] $$) as (results agtype); results ------------------------------------------ {"name": "john", "stats": {"age": 1000}} (3 rows) SELECT * FROM cypher('access',$$ MATCH ()-[e*2..2]->() RETURN e[1].arry[2].stats $$) as (results agtype); results --------------- {"age": 1000} (3 rows) SELECT * FROM cypher('access',$$ MATCH ()-[e*2..2]->() RETURN properties(e[2]) $$) as (prop_third_edge agtype); prop_third_edge ----------------- (3 rows) SELECT * FROM cypher('access',$$ MATCH ()-[e*]->() RETURN properties(e[0]), properties(e[1]) $$) as (prop_1st agtype, prop_2nd agtype); prop_1st | prop_2nd ---------------------------------------------------------------------+--------------------------------------------------------------------- {} | {} | {} | {} {} | {"id": 0} | {"id": 0} | {"id": 1} {"id": 1} | {"id": 2, "arry": [0, 1, 2, 3, {"name": "joe"}]} | {"id": 2, "arry": [0, 1, 2, 3, {"name": "joe"}]} | {"id": 3, "arry": [1, 3, {"name": "john", "stats": {"age": 1000}}]} {"id": 3, "arry": [1, 3, {"name": "john", "stats": {"age": 1000}}]} | (10 rows) SELECT * FROM cypher('access',$$ MATCH ()-[e*]->() RETURN e[0].id, e[1].id $$) as (results_1st agtype, results_2nd agtype); results_1st | results_2nd -------------+------------- | | | | 0 | 0 | 1 1 | 2 | 2 | 3 3 | (10 rows) SELECT * FROM cypher('access',$$ MATCH ()-[e*]->() RETURN e[0].arry, e[1].arry $$) as (results_1st agtype, results_2nd agtype); results_1st | results_2nd --------------------------------------------------+-------------------------------------------------- | | | | | | | [0, 1, 2, 3, {"name": "joe"}] | [0, 1, 2, 3, {"name": "joe"}] | [1, 3, {"name": "john", "stats": {"age": 1000}}] [1, 3, {"name": "john", "stats": {"age": 1000}}] | (10 rows) SELECT * FROM cypher('access',$$ MATCH ()-[e*]->() RETURN e[0].arry[2], e[1].arry[2] $$) as (results_1st agtype, results_2nd agtype); results_1st | results_2nd ------------------------------------------+------------------------------------------ | | | | | | | 2 | 2 | {"name": "john", "stats": {"age": 1000}} {"name": "john", "stats": {"age": 1000}} | (10 rows) SELECT drop_graph('access', true); NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to table access._ag_label_vertex drop cascades to table access._ag_label_edge drop cascades to table access.knows NOTICE: graph "access" has been dropped drop_graph ------------ (1 row) -- issue 1043 SELECT create_graph('issue_1043'); NOTICE: graph "issue_1043" has been created create_graph -------------- (1 row) SELECT * FROM cypher('issue_1043', $$ CREATE (n)-[:KNOWS {n:'hello'}]->({n:'hello'}) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('issue_1043', $$ MATCH (x)<-[y *]-(),({n:y[0].n}) RETURN x $$) as (a agtype); a ---------------------------------------------------------------------------- {"id": 281474976710658, "label": "", "properties": {"n": "hello"}}::vertex (1 row) SELECT * FROM cypher('issue_1043', $$ CREATE (n)-[:KNOWS {n:'hello'}]->({n:'hello'}) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('issue_1043', $$ MATCH (x)<-[y *]-(),({n:y[0].n}) RETURN x $$) as (a agtype); a ---------------------------------------------------------------------------- {"id": 281474976710658, "label": "", "properties": {"n": "hello"}}::vertex {"id": 281474976710658, "label": "", "properties": {"n": "hello"}}::vertex {"id": 281474976710660, "label": "", "properties": {"n": "hello"}}::vertex {"id": 281474976710660, "label": "", "properties": {"n": "hello"}}::vertex (4 rows) SELECT drop_graph('issue_1043', true); NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to table issue_1043._ag_label_vertex drop cascades to table issue_1043._ag_label_edge drop cascades to table issue_1043."KNOWS" NOTICE: graph "issue_1043" has been dropped drop_graph ------------ (1 row) -- -- Clean up -- DROP TABLE start_and_end_points; SELECT drop_graph('cypher_vle', true); NOTICE: drop cascades to 9 other objects DETAIL: drop cascades to table cypher_vle._ag_label_vertex drop cascades to table cypher_vle._ag_label_edge drop cascades to table cypher_vle.begin drop cascades to table cypher_vle.edge drop cascades to table cypher_vle.middle drop cascades to table cypher_vle."end" drop cascades to table cypher_vle.self_loop drop cascades to table cypher_vle.alternate_edge drop cascades to table cypher_vle.bypass_edge NOTICE: graph "cypher_vle" has been dropped drop_graph ------------ (1 row) -- -- End -- age-PG16-v1.5.0-rc0/regress/expected/cypher_with.out000066400000000000000000000402211454606241200221300ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; -- -- Load data -- SELECT create_graph('cypher_with'); NOTICE: graph "cypher_with" has been created create_graph -------------- (1 row) SELECT * FROM cypher('cypher_with', $$ CREATE (andres {name : 'Andres', age : 36}), (caesar {name : 'Caesar', age : 25}), (bossman {name : 'Bossman', age : 55}), (david {name : 'David', age : 35}), (george {name : 'George', age : 37}), (andres)-[:BLOCKS]->(caesar), (andres)-[:KNOWS]->(bossman), (caesar)-[:KNOWS]->(george), (bossman)-[:BLOCKS]->(david), (bossman)-[:KNOWS]->(george), (david)-[:KNOWS]->(andres) $$) as (a agtype); a --- (0 rows) -- -- Test WITH clause -- SELECT * FROM cypher('cypher_with', $$ MATCH (n)-[e]->(m) WITH n,e,m RETURN n,e,m $$) AS (N1 agtype, edge agtype, N2 agtype); n1 | edge | n2 --------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"age": 36, "name": "Andres"}}::vertex | {"id": 844424930131969, "label": "BLOCKS", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge | {"id": 281474976710658, "label": "", "properties": {"age": 25, "name": "Caesar"}}::vertex {"id": 281474976710659, "label": "", "properties": {"age": 55, "name": "Bossman"}}::vertex | {"id": 844424930131970, "label": "BLOCKS", "end_id": 281474976710660, "start_id": 281474976710659, "properties": {}}::edge | {"id": 281474976710660, "label": "", "properties": {"age": 35, "name": "David"}}::vertex {"id": 281474976710657, "label": "", "properties": {"age": 36, "name": "Andres"}}::vertex | {"id": 1125899906842625, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710657, "properties": {}}::edge | {"id": 281474976710659, "label": "", "properties": {"age": 55, "name": "Bossman"}}::vertex {"id": 281474976710658, "label": "", "properties": {"age": 25, "name": "Caesar"}}::vertex | {"id": 1125899906842626, "label": "KNOWS", "end_id": 281474976710661, "start_id": 281474976710658, "properties": {}}::edge | {"id": 281474976710661, "label": "", "properties": {"age": 37, "name": "George"}}::vertex {"id": 281474976710659, "label": "", "properties": {"age": 55, "name": "Bossman"}}::vertex | {"id": 1125899906842627, "label": "KNOWS", "end_id": 281474976710661, "start_id": 281474976710659, "properties": {}}::edge | {"id": 281474976710661, "label": "", "properties": {"age": 37, "name": "George"}}::vertex {"id": 281474976710660, "label": "", "properties": {"age": 35, "name": "David"}}::vertex | {"id": 1125899906842628, "label": "KNOWS", "end_id": 281474976710657, "start_id": 281474976710660, "properties": {}}::edge | {"id": 281474976710657, "label": "", "properties": {"age": 36, "name": "Andres"}}::vertex (6 rows) -- WITH/AS SELECT * FROM cypher('cypher_with', $$ MATCH (n)-[e]->(m) WITH n.name AS n1, e as edge, m.name as n2 RETURN n1,label(edge),n2 $$) AS (start_node agtype,edge agtype, end_node agtype); start_node | edge | end_node ------------+----------+----------- "Andres" | "BLOCKS" | "Caesar" "Bossman" | "BLOCKS" | "David" "Andres" | "KNOWS" | "Bossman" "Caesar" | "KNOWS" | "George" "Bossman" | "KNOWS" | "George" "David" | "KNOWS" | "Andres" (6 rows) SELECT * FROM cypher('cypher_with',$$ MATCH (person)-[r]->(otherPerson) WITH *, type(r) AS connectionType RETURN person.name, connectionType, otherPerson.name $$) AS (start_node agtype, connection agtype, end_node agtype); start_node | connection | end_node ------------+------------+----------- "Andres" | "BLOCKS" | "Caesar" "Bossman" | "BLOCKS" | "David" "Andres" | "KNOWS" | "Bossman" "Caesar" | "KNOWS" | "George" "Bossman" | "KNOWS" | "George" "David" | "KNOWS" | "Andres" (6 rows) SELECT * FROM cypher('cypher_with', $$ WITH true AS b RETURN b $$) AS (b bool); b --- t (1 row) -- WITH/WHERE SELECT * FROM cypher('cypher_with', $$ MATCH (george {name: 'George'})<-[]-(otherPerson) WITH otherPerson, toUpper(otherPerson.name) AS upperCaseName WHERE upperCaseName STARTS WITH 'C' RETURN otherPerson.name $$) as (name agtype); name ---------- "Caesar" (1 row) SELECT * FROM cypher('cypher_with', $$ MATCH (david {name: 'David'})-[]-(otherPerson)-[]->() WITH otherPerson, count(*) AS foaf WHERE foaf > 1 RETURN otherPerson.name $$) as (name agtype); name ---------- "Andres" (1 row) SELECT * FROM cypher('cypher_with', $$ MATCH p = (m)-[*1..2]->(b) WITH p, length(p) AS path_length WHERE path_length > 1 RETURN p $$) AS (pattern agtype); pattern -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710657, "label": "_ag_label_vertex", "properties": {"age": 36, "name": "Andres"}}::vertex, {"id": 1125899906842625, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710657, "properties": {}}::edge, {"id": 281474976710659, "label": "_ag_label_vertex", "properties": {"age": 55, "name": "Bossman"}}::vertex, {"id": 1125899906842627, "label": "KNOWS", "end_id": 281474976710661, "start_id": 281474976710659, "properties": {}}::edge, {"id": 281474976710661, "label": "_ag_label_vertex", "properties": {"age": 37, "name": "George"}}::vertex]::path [{"id": 281474976710657, "label": "_ag_label_vertex", "properties": {"age": 36, "name": "Andres"}}::vertex, {"id": 1125899906842625, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710657, "properties": {}}::edge, {"id": 281474976710659, "label": "_ag_label_vertex", "properties": {"age": 55, "name": "Bossman"}}::vertex, {"id": 844424930131970, "label": "BLOCKS", "end_id": 281474976710660, "start_id": 281474976710659, "properties": {}}::edge, {"id": 281474976710660, "label": "_ag_label_vertex", "properties": {"age": 35, "name": "David"}}::vertex]::path [{"id": 281474976710657, "label": "_ag_label_vertex", "properties": {"age": 36, "name": "Andres"}}::vertex, {"id": 844424930131969, "label": "BLOCKS", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge, {"id": 281474976710658, "label": "_ag_label_vertex", "properties": {"age": 25, "name": "Caesar"}}::vertex, {"id": 1125899906842626, "label": "KNOWS", "end_id": 281474976710661, "start_id": 281474976710658, "properties": {}}::edge, {"id": 281474976710661, "label": "_ag_label_vertex", "properties": {"age": 37, "name": "George"}}::vertex]::path [{"id": 281474976710659, "label": "_ag_label_vertex", "properties": {"age": 55, "name": "Bossman"}}::vertex, {"id": 844424930131970, "label": "BLOCKS", "end_id": 281474976710660, "start_id": 281474976710659, "properties": {}}::edge, {"id": 281474976710660, "label": "_ag_label_vertex", "properties": {"age": 35, "name": "David"}}::vertex, {"id": 1125899906842628, "label": "KNOWS", "end_id": 281474976710657, "start_id": 281474976710660, "properties": {}}::edge, {"id": 281474976710657, "label": "_ag_label_vertex", "properties": {"age": 36, "name": "Andres"}}::vertex]::path [{"id": 281474976710660, "label": "_ag_label_vertex", "properties": {"age": 35, "name": "David"}}::vertex, {"id": 1125899906842628, "label": "KNOWS", "end_id": 281474976710657, "start_id": 281474976710660, "properties": {}}::edge, {"id": 281474976710657, "label": "_ag_label_vertex", "properties": {"age": 36, "name": "Andres"}}::vertex, {"id": 1125899906842625, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710657, "properties": {}}::edge, {"id": 281474976710659, "label": "_ag_label_vertex", "properties": {"age": 55, "name": "Bossman"}}::vertex]::path [{"id": 281474976710660, "label": "_ag_label_vertex", "properties": {"age": 35, "name": "David"}}::vertex, {"id": 1125899906842628, "label": "KNOWS", "end_id": 281474976710657, "start_id": 281474976710660, "properties": {}}::edge, {"id": 281474976710657, "label": "_ag_label_vertex", "properties": {"age": 36, "name": "Andres"}}::vertex, {"id": 844424930131969, "label": "BLOCKS", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge, {"id": 281474976710658, "label": "_ag_label_vertex", "properties": {"age": 25, "name": "Caesar"}}::vertex]::path (6 rows) -- MATCH/WHERE with WITH/WHERE SELECT * FROM cypher('cypher_with', $$ MATCH (m)-[e]->(b) WHERE label(e) = 'KNOWS' WITH * WHERE m.name = 'Andres' RETURN m.name,label(e),b.name $$) AS (N1 agtype, edge agtype, N2 agtype); n1 | edge | n2 ----------+---------+----------- "Andres" | "KNOWS" | "Bossman" (1 row) -- WITH/ORDER BY SELECT * FROM cypher('cypher_with', $$ MATCH (n) WITH n ORDER BY id(n) RETURN n $$) as (name agtype); name -------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"age": 36, "name": "Andres"}}::vertex {"id": 281474976710658, "label": "", "properties": {"age": 25, "name": "Caesar"}}::vertex {"id": 281474976710659, "label": "", "properties": {"age": 55, "name": "Bossman"}}::vertex {"id": 281474976710660, "label": "", "properties": {"age": 35, "name": "David"}}::vertex {"id": 281474976710661, "label": "", "properties": {"age": 37, "name": "George"}}::vertex (5 rows) -- WITH/ORDER BY/DESC SELECT * FROM cypher('cypher_with', $$ MATCH (n) WITH n ORDER BY n.name DESC LIMIT 3 RETURN collect(n.name) $$) as (names agtype); names ------------------------------- ["George", "David", "Caesar"] (1 row) SELECT * FROM cypher('cypher_with', $$ MATCH (n {name: 'Andres'})-[]-(m) WITH m ORDER BY m.name DESC LIMIT 1 MATCH (m)-[]-(o) RETURN o.name ORDER BY o.name $$) as (name agtype); name ----------- "Andres" "Bossman" (2 rows) -- multiple WITH clauses SELECT * FROM cypher('cypher_with', $$ MATCH (n)-[e]->(m) WITH n, e, m WHERE label(e) = 'KNOWS' WITH n.name as n1, label(e) as edge, m.name as n2 WHERE n1 = 'Andres' RETURN n1,edge,n2 $$) AS (N1 agtype, edge agtype, N2 agtype); n1 | edge | n2 ----------+---------+----------- "Andres" | "KNOWS" | "Bossman" (1 row) SELECT * FROM cypher('cypher_with', $$ UNWIND [1, 2, 3, 4, 5, 6] AS x WITH x WHERE x > 2 WITH x LIMIT 5 RETURN x $$) as (name agtype); name ------ 3 4 5 6 (4 rows) SELECT * FROM cypher('cypher_with', $$ MATCH (m)-[]->(b) WITH m,b ORDER BY id(m) DESC LIMIT 5 WITH m as start_node, b as end_node WHERE end_node.name = 'George' RETURN id(start_node),start_node.name,id(end_node),end_node.name $$) AS (id1 agtype, name1 agtype, id2 agtype, name2 agtype); id1 | name1 | id2 | name2 -----------------+-----------+-----------------+---------- 281474976710659 | "Bossman" | 281474976710661 | "George" 281474976710658 | "Caesar" | 281474976710661 | "George" (2 rows) -- Expression item must be aliased. SELECT * FROM cypher('cypher_with', $$ WITH 1 + 1 RETURN i $$) AS (i int); ERROR: expression item must be aliased LINE 2: WITH 1 + 1 ^ HINT: Items can be aliased by using AS. SELECT * FROM cypher('cypher_with', $$ MATCH (m)-[]->(b) WITH id(m) RETURN m $$) AS (id agtype); ERROR: expression item must be aliased LINE 3: WITH id(m) ^ HINT: Items can be aliased by using AS. -- Reference undefined variable in WITH clause (should error out) SELECT count(*) FROM cypher('cypher_with', $$ MATCH (m)-[]->(b) WITH m RETURN m,b $$) AS (a agtype, b agtype); ERROR: could not find rte for b LINE 4: RETURN m,b ^ SELECT * FROM cypher('cypher_with', $$ MATCH (m)-[]->(b) WITH m AS start_node,b AS end_node WHERE start_node.name = 'Andres' WITH start_node WHERE start_node.name = 'George' RETURN id(start_node),end_node.name $$) AS (id agtype, node agtype); ERROR: could not find rte for end_node LINE 7: RETURN id(start_node),end_node.name ^ -- Clean up SELECT drop_graph('cypher_with', true); NOTICE: drop cascades to 4 other objects DETAIL: drop cascades to table cypher_with._ag_label_vertex drop cascades to table cypher_with._ag_label_edge drop cascades to table cypher_with."BLOCKS" drop cascades to table cypher_with."KNOWS" NOTICE: graph "cypher_with" has been dropped drop_graph ------------ (1 row) -- Issue 329 (should error out) SELECT create_graph('graph'); NOTICE: graph "graph" has been created create_graph -------------- (1 row) SELECT * FROM cypher('graph', $$ CREATE (a:A)-[:incs]->(:C), (a)-[:incs]->(:C) RETURN a $$) AS (n agtype); n ----------------------------------------------------------------- {"id": 844424930131969, "label": "A", "properties": {}}::vertex (1 row) SELECT * FROM cypher('graph', $$ MATCH (a:A) WHERE ID(a)=0 WITH a OPTIONAL MATCH (a)-[:incs]->(c)-[d:incs]-() WITH a,c,COUNT(d) AS deps WHERE deps<=1 RETURN c,d $$) AS (n agtype, d agtype); ERROR: could not find rte for d LINE 8: RETURN c,d ^ -- Issue 396 (should error out) SELECT * FROM cypher('graph',$$ CREATE (v),(u),(w), (v)-[:hasFriend]->(u), (u)-[:hasFriend]->(w) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('graph',$$ MATCH p=(v)-[*1..2]->(u) WITH p,length(p) AS path_length RETURN v,path_length $$) as (a agtype,b agtype); ERROR: could not find rte for v LINE 4: RETURN v,path_length ^ -- Clean up SELECT drop_graph('graph', true); NOTICE: drop cascades to 6 other objects DETAIL: drop cascades to table graph._ag_label_vertex drop cascades to table graph._ag_label_edge drop cascades to table graph."A" drop cascades to table graph.incs drop cascades to table graph."C" drop cascades to table graph."hasFriend" NOTICE: graph "graph" has been dropped drop_graph ------------ (1 row) -- -- End of test -- age-PG16-v1.5.0-rc0/regress/expected/drop.out000066400000000000000000000076631454606241200205640ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('drop'); NOTICE: graph "drop" has been created create_graph -------------- (1 row) DROP EXTENSION age; NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table drop._ag_label_vertex drop cascades to table drop._ag_label_edge NOTICE: graph "drop" has been dropped SELECT nspname FROM pg_catalog.pg_namespace WHERE nspname = 'drop'; nspname --------- (0 rows) SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = 'ag_catalog'; tablename ----------- (0 rows) -- Recreate the extension and validate we can recreate a graph CREATE EXTENSION age; SELECT create_graph('drop'); NOTICE: graph "drop" has been created create_graph -------------- (1 row) -- Create a schema that uses the agtype, so we can't just drop age. CREATE SCHEMA other_schema; CREATE TABLE other_schema.tbl (id agtype); -- Should Fail because agtype can't be dropped DROP EXTENSION age; NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table drop._ag_label_vertex drop cascades to table drop._ag_label_edge NOTICE: graph "drop" has been dropped ERROR: cannot drop extension age because other objects depend on it DETAIL: column id of table other_schema.tbl depends on type agtype HINT: Use DROP ... CASCADE to drop the dependent objects too. -- Check the graph still exist, because the DROP command failed SELECT nspname FROM pg_catalog.pg_namespace WHERE nspname = 'drop'; nspname --------- drop (1 row) -- Should succeed, delete the 'drop' schema and leave 'other_schema' DROP EXTENSION age CASCADE; NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table drop._ag_label_vertex drop cascades to table drop._ag_label_edge NOTICE: graph "drop" has been dropped NOTICE: drop cascades to column id of table other_schema.tbl -- 'other_schema' should exist, 'drop' should be deleted SELECT nspname FROM pg_catalog.pg_namespace WHERE nspname IN ('other_schema', 'drop'); nspname -------------- other_schema (1 row) -- issue 1305 CREATE EXTENSION age; LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('issue_1305'); NOTICE: graph "issue_1305" has been created create_graph -------------- (1 row) SELECT create_vlabel('issue_1305', 'n'); NOTICE: VLabel "n" has been created create_vlabel --------------- (1 row) SELECT create_elabel('issue_1305', 'r'); NOTICE: ELabel "r" has been created create_elabel --------------- (1 row) SELECT drop_label('issue_1305', 'r', false); NOTICE: label "issue_1305"."r" has been dropped drop_label ------------ (1 row) SELECT drop_label('issue_1305', 'r'); ERROR: rel_name not found for label "r" SELECT drop_label('issue_1305', 'n', false); NOTICE: label "issue_1305"."n" has been dropped drop_label ------------ (1 row) SELECT drop_label('issue_1305', 'n'); ERROR: rel_name not found for label "n" SELECT * FROM drop_graph('issue_1305', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table issue_1305._ag_label_vertex drop cascades to table issue_1305._ag_label_edge NOTICE: graph "issue_1305" has been dropped drop_graph ------------ (1 row) -- END DROP EXTENSION age CASCADE; age-PG16-v1.5.0-rc0/regress/expected/expr.out000066400000000000000000011626551454606241200206020ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ SET extra_float_digits = 0; LOAD 'age'; SET search_path TO ag_catalog; SELECT * FROM create_graph('expr'); NOTICE: graph "expr" has been created create_graph -------------- (1 row) -- -- map literal -- -- empty map SELECT * FROM cypher('expr', $$RETURN {}$$) AS r(c agtype); c ---- {} (1 row) -- map of scalar values SELECT * FROM cypher('expr', $$ RETURN {s: 's', i: 1, f: 1.0, b: true, z: null} $$) AS r(c agtype); c ----------------------------------------- {"b": true, "f": 1.0, "i": 1, "s": "s"} (1 row) -- nested maps SELECT * FROM cypher('expr', $$ RETURN {s: {s: 's'}, t: {i: 1, e: {f: 1.0}, s: {a: {b: true}}}, z: null} $$) AS r(c agtype); c ---------------------------------------------------------------------------- {"s": {"s": "s"}, "t": {"e": {"f": 1.0}, "i": 1, "s": {"a": {"b": true}}}} (1 row) -- -- list literal -- -- empty list SELECT * FROM cypher('expr', $$RETURN []$$) AS r(c agtype); c ---- [] (1 row) -- list of scalar values SELECT * FROM cypher('expr', $$ RETURN ['str', 1, 1.0, true, null] $$) AS r(c agtype); c ----------------------------- ["str", 1, 1.0, true, null] (1 row) -- nested lists SELECT * FROM cypher('expr', $$ RETURN [['str'], [1, [1.0], [[true]]], null] $$) AS r(c agtype); c --------------------------------------- [["str"], [1, [1.0], [[true]]], null] (1 row) -- -- parameter -- PREPARE cypher_parameter(agtype) AS SELECT * FROM cypher('expr', $$ RETURN $var $$, $1) AS t(i agtype); EXECUTE cypher_parameter('{"var": 1}'); i --- 1 (1 row) PREPARE cypher_parameter_object(agtype) AS SELECT * FROM cypher('expr', $$ RETURN $var.innervar $$, $1) AS t(i agtype); EXECUTE cypher_parameter_object('{"var": {"innervar": 1}}'); i --- 1 (1 row) PREPARE cypher_parameter_array(agtype) AS SELECT * FROM cypher('expr', $$ RETURN $var[$indexvar] $$, $1) AS t(i agtype); EXECUTE cypher_parameter_array('{"var": [1, 2, 3], "indexvar": 1}'); i --- 2 (1 row) -- missing parameter PREPARE cypher_parameter_missing_argument(agtype) AS SELECT * FROM cypher('expr', $$ RETURN $var, $missingvar $$, $1) AS t(i agtype, j agtype); EXECUTE cypher_parameter_missing_argument('{"var": 1}'); i | j ---+--- 1 | (1 row) -- invalid parameter PREPARE cypher_parameter_invalid_argument(agtype) AS SELECT * FROM cypher('expr', $$ RETURN $var $$, $1) AS t(i agtype); EXECUTE cypher_parameter_invalid_argument('[1]'); ERROR: array index must resolve to an integer value -- missing parameters argument PREPARE cypher_missing_params_argument(int) AS SELECT $1, * FROM cypher('expr', $$ RETURN $var $$) AS t(i agtype); ERROR: parameters argument is missing from cypher() function call LINE 3: RETURN $var ^ SELECT * FROM cypher('expr', $$ RETURN $var $$) AS t(i agtype); ERROR: parameters argument is missing from cypher() function call LINE 2: RETURN $var ^ --list concatenation SELECT * FROM cypher('expr', $$RETURN ['str', 1, 1.0] + [true, null]$$) AS r(c agtype); c ----------------------------- ["str", 1, 1.0, true, null] (1 row) --list IN (contains), should all be true SELECT * FROM cypher('expr', $$RETURN 1 IN ['str', 1, 1.0, true, null]$$) AS r(c boolean); c --- t (1 row) SELECT * FROM cypher('expr', $$RETURN 'str' IN ['str', 1, 1.0, true, null]$$) AS r(c boolean); c --- t (1 row) SELECT * FROM cypher('expr', $$RETURN 1.0 IN ['str', 1, 1.0, true, null]$$) AS r(c boolean); c --- t (1 row) SELECT * FROM cypher('expr', $$RETURN true IN ['str', 1, 1.0, true, null]$$) AS r(c boolean); c --- t (1 row) SELECT * FROM cypher('expr', $$RETURN [1,3,5,[2,4,6]] IN ['str', 1, 1.0, true, null, [1,3,5,[2,4,6]]]$$) AS r(c boolean); c --- t (1 row) SELECT * FROM cypher('expr', $$RETURN {bool: true, int: 1} IN ['str', 1, 1.0, true, null, {bool: true, int: 1}, [1,3,5,[2,4,6]]]$$) AS r(c boolean); c --- t (1 row) SELECT * FROM cypher('expr', $$RETURN 1 IN [1.0, [NULL]]$$) AS r(c boolean); c --- t (1 row) SELECT * FROM cypher('expr', $$RETURN [NULL] IN [1.0, [NULL]]$$) AS r(c boolean); c --- t (1 row) -- should return SQL null, nothing SELECT * FROM cypher('expr', $$RETURN true IN NULL $$) AS r(c boolean); c --- (1 row) SELECT * FROM cypher('expr', $$RETURN null IN ['str', 1, 1.0, true, null]$$) AS r(c boolean); c --- (1 row) SELECT * FROM cypher('expr', $$RETURN null IN ['str', 1, 1.0, true]$$) AS r(c boolean); c --- (1 row) SELECT * FROM cypher('expr', $$RETURN 'str' IN null $$) AS r(c boolean); c --- (1 row) SELECT * FROM cypher('expr', $$RETURN 0 IN ['str', 1, 1.0, true, null]$$) AS r(c boolean); c --- (1 row) SELECT * FROM cypher('expr', $$RETURN 1.1 IN ['str', 1, 1.0, true, null]$$) AS r(c boolean); c --- (1 row) SELECT * FROM cypher('expr', $$RETURN 'Str' IN ['str', 1, 1.0, true, null]$$) AS r(c boolean); c --- (1 row) SELECT * FROM cypher('expr', $$RETURN [1,3,5,[2,4,5]] IN ['str', 1, 1.0, true, null, [1,3,5,[2,4,6]]]$$) AS r(c boolean); c --- (1 row) SELECT * FROM cypher('expr', $$RETURN {bool: true, int: 2} IN ['str', 1, 1.0, true, null, {bool: true, int: 1}, [1,3,5,[2,4,6]]]$$) AS r(c boolean); c --- (1 row) -- should return false SELECT * FROM cypher('expr', $$RETURN 'str' IN ['StR', 1, true]$$) AS r(c boolean); c --- f (1 row) SELECT * FROM cypher('expr', $$RETURN 2 IN ['StR', 1, true]$$) AS r(c boolean); c --- f (1 row) SELECT * FROM cypher('expr', $$RETURN false IN ['StR', 1, true]$$) AS r(c boolean); c --- f (1 row) SELECT * FROM cypher('expr', $$RETURN [1,2] IN ['StR', 1, 2, true]$$) AS r(c boolean); c --- f (1 row) SELECT * FROM cypher('expr', $$RETURN 1 in [[1]]$$) AS r(c boolean); c --- f (1 row) SELECT * FROM cypher('expr', $$RETURN 1 IN [[null]]$$) AS r(c boolean); c --- f (1 row) -- should error - ERROR: object of IN must be a list SELECT * FROM cypher('expr', $$RETURN null IN 'str' $$) AS r(c boolean); ERROR: object of IN must be a list SELECT * FROM cypher('expr', $$RETURN 'str' IN 'str' $$) AS r(c boolean); ERROR: object of IN must be a list -- list access SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][0]$$) AS r(c agtype); c --- 0 (1 row) SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][5]$$) AS r(c agtype); c --- 5 (1 row) SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][10]$$) AS r(c agtype); c ---- 10 (1 row) SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][-1]$$) AS r(c agtype); c ---- 10 (1 row) SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][-3]$$) AS r(c agtype); c --- 8 (1 row) -- should return null SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][11]$$) AS r(c agtype); c --- (1 row) -- list slice SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][0..]$$) AS r(c agtype); c ------------------------------------ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] (1 row) SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][..11]$$) AS r(c agtype); c ------------------------------------ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] (1 row) SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][0..0]$$) AS r(c agtype); c ---- [] (1 row) SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][10..10]$$) AS r(c agtype); c ---- [] (1 row) SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][0..1]$$) AS r(c agtype); c ----- [0] (1 row) SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][9..10]$$) AS r(c agtype); c ----- [9] (1 row) SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][-1..]$$) AS r(c agtype); c ------ [10] (1 row) SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][-1..11]$$) AS r(c agtype); c ------ [10] (1 row) SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][-3..11]$$) AS r(c agtype); c ------------ [8, 9, 10] (1 row) -- this one should return null SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][-1..10]$$) AS r(c agtype); c ---- [] (1 row) SELECT agtype_access_slice('[0]'::agtype, 'null'::agtype, '1'::agtype); agtype_access_slice --------------------- [0] (1 row) SELECT agtype_access_slice('[0]'::agtype, '0'::agtype, 'null'::agtype); agtype_access_slice --------------------- [0] (1 row) -- should error - ERROR: slice must access a list SELECT * from cypher('expr', $$RETURN 0[0..1]$$) as r(a agtype); ERROR: slice must access a list SELECT * from cypher('expr', $$RETURN 0[[0]..[1]]$$) as r(a agtype); ERROR: slice must access a list -- should return nothing SELECT * from cypher('expr', $$RETURN [0][0..-2147483649]$$) as r(a agtype); a ---- [] (1 row) -- access and slice operators nested SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[0] $$) as (results agtype); results --------- 0 (1 row) SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[2] $$) as (results agtype); results ----------- [2, 3, 4] (1 row) SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-1] $$) as (results agtype); results --------- 9 (1 row) SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[2][-2] $$) as (results agtype); results --------- 3 (1 row) SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[2][-2..] $$) as (results agtype); results --------- [3, 4] (1 row) SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-2..] $$) as (results agtype); results ---------------- [[6, 7, 8], 9] (1 row) SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-2..][-1..][-1..] $$) as (results agtype); results --------- [9] (1 row) SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-2..][-1..][0] $$) as (results agtype); results --------- 9 (1 row) SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-2..][-1..][-1] $$) as (results agtype); results --------- 9 (1 row) SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-2..][-2..-1] $$) as (results agtype); results ------------- [[6, 7, 8]] (1 row) SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-4..-2] $$) as (results agtype); results ---------------- [[2, 3, 4], 5] (1 row) SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-4..-2][-2] $$) as (results agtype); results ----------- [2, 3, 4] (1 row) SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-4..-2][0] $$) as (results agtype); results ----------- [2, 3, 4] (1 row) SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-4..-2][-2][-2..] $$) as (results agtype); results --------- [3, 4] (1 row) SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-4..-2][-2][-2..][0] $$) as (results agtype); results --------- 3 (1 row) -- empty list SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-2..][-1..][-2..-2] $$) as (results agtype); results --------- [] (1 row) -- should return null SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[2][3] $$) as (results agtype); results --------- (1 row) SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-2..][-1..][-2] $$) as (results agtype); results --------- (1 row) -- -- String operators -- -- String LHS + String RHS SELECT * FROM cypher('expr', $$RETURN 'str' + 'str'$$) AS r(c agtype); c ---------- "strstr" (1 row) -- String LHS + Integer RHS SELECT * FROM cypher('expr', $$RETURN 'str' + 1$$) AS r(c agtype); c -------- "str1" (1 row) -- String LHS + Float RHS SELECT * FROM cypher('expr', $$RETURN 'str' + 1.0$$) AS r(c agtype); c ---------- "str1.0" (1 row) -- Integer LHS + String LHS SELECT * FROM cypher('expr', $$RETURN 1 + 'str'$$) AS r(c agtype); c -------- "1str" (1 row) -- Float LHS + String RHS SELECT * FROM cypher('expr', $$RETURN 1.0 + 'str'$$) AS r(c agtype); c ---------- "1.0str" (1 row) -- -- Test transform logic for operators -- SELECT * FROM cypher('expr', $$ RETURN (-(3 * 2 - 4.0) ^ ((10 / 5) + 1)) % -3 $$) AS r(result agtype); result -------- -2.0 (1 row) -- -- Test transform logic for comparison operators -- SELECT * FROM cypher('expr', $$ RETURN 1 = 1.0 $$) AS r(result boolean); result -------- t (1 row) SELECT * FROM cypher('expr', $$ RETURN 1 > -1.0 $$) AS r(result boolean); result -------- t (1 row) SELECT * FROM cypher('expr', $$ RETURN -1.0 < 1 $$) AS r(result boolean); result -------- t (1 row) SELECT * FROM cypher('expr', $$ RETURN "aaa" < "z" $$) AS r(result boolean); result -------- t (1 row) SELECT * FROM cypher('expr', $$ RETURN "z" > "aaa" $$) AS r(result boolean); result -------- t (1 row) SELECT * FROM cypher('expr', $$ RETURN false = false $$) AS r(result boolean); result -------- t (1 row) SELECT * FROM cypher('expr', $$ RETURN ("string" < true) $$) AS r(result boolean); result -------- t (1 row) SELECT * FROM cypher('expr', $$ RETURN true < 1 $$) AS r(result boolean); result -------- t (1 row) SELECT * FROM cypher('expr', $$ RETURN (1 + 1.0) = (7 % 5) $$) AS r(result boolean); result -------- t (1 row) -- -- Test chained comparisons -- SELECT * FROM create_graph('chained'); NOTICE: graph "chained" has been created create_graph -------------- (1 row) SELECT * FROM cypher('chained', $$ CREATE (:people {name: "Jason", age:50}) $$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('chained', $$ CREATE (:people {name: "Amy", age:25}) $$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('chained', $$ CREATE (:people {name: "Samantha", age:35}) $$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('chained', $$ CREATE (:people {name: "Mark", age:40}) $$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('chained', $$ CREATE (:people {name: "David", age:15}) $$) AS (result agtype); result -------- (0 rows) -- should return 1 SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE 35 < u.age <= 49 RETURN u $$) AS (result agtype); result ----------------------------------------------------------------------------------------------- {"id": 844424930131972, "label": "people", "properties": {"age": 40, "name": "Mark"}}::vertex (1 row) SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE 25 <= u.age <= 25 RETURN u $$) AS (result agtype); result ---------------------------------------------------------------------------------------------- {"id": 844424930131970, "label": "people", "properties": {"age": 25, "name": "Amy"}}::vertex (1 row) SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE 35 = u.age = 35 RETURN u $$) AS (result agtype); result --------------------------------------------------------------------------------------------------- {"id": 844424930131971, "label": "people", "properties": {"age": 35, "name": "Samantha"}}::vertex (1 row) SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE 50 > u.age > 35 RETURN u $$) AS (result agtype); result ----------------------------------------------------------------------------------------------- {"id": 844424930131972, "label": "people", "properties": {"age": 40, "name": "Mark"}}::vertex (1 row) -- should return 3 SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE 40 <> u.age <> 35 RETURN u $$) AS (result agtype); result ------------------------------------------------------------------------------------------------ {"id": 844424930131969, "label": "people", "properties": {"age": 50, "name": "Jason"}}::vertex {"id": 844424930131970, "label": "people", "properties": {"age": 25, "name": "Amy"}}::vertex {"id": 844424930131973, "label": "people", "properties": {"age": 15, "name": "David"}}::vertex (3 rows) -- should return 2 SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE 30 <= u.age <= 49 > u.age RETURN u $$) AS (result agtype); result --------------------------------------------------------------------------------------------------- {"id": 844424930131971, "label": "people", "properties": {"age": 35, "name": "Samantha"}}::vertex {"id": 844424930131972, "label": "people", "properties": {"age": 40, "name": "Mark"}}::vertex (2 rows) -- should return 0 SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE 30 <= u.age <= 49 = u.age RETURN u $$) AS (result agtype); result -------- (0 rows) -- should return 2 SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE 35 < u.age + 1 <= 50 RETURN u $$) AS (result agtype); result --------------------------------------------------------------------------------------------------- {"id": 844424930131971, "label": "people", "properties": {"age": 35, "name": "Samantha"}}::vertex {"id": 844424930131972, "label": "people", "properties": {"age": 40, "name": "Mark"}}::vertex (2 rows) -- should return 3 SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE NOT 35 < u.age + 1 <= 50 RETURN u $$) AS (result agtype); result ------------------------------------------------------------------------------------------------ {"id": 844424930131969, "label": "people", "properties": {"age": 50, "name": "Jason"}}::vertex {"id": 844424930131970, "label": "people", "properties": {"age": 25, "name": "Amy"}}::vertex {"id": 844424930131973, "label": "people", "properties": {"age": 15, "name": "David"}}::vertex (3 rows) -- order of operations -- expressions SELECT * FROM cypher('chained', $$ RETURN 1 = 1 = 1 $$) AS (result agtype); result -------- true (1 row) SELECT * FROM cypher('chained', $$ RETURN 1 = 2 = 1 $$) AS (result agtype); result -------- false (1 row) SELECT * FROM cypher('chained', $$ RETURN (1 = 1) = 1 $$) AS (result agtype); result -------- false (1 row) SELECT * FROM cypher('chained', $$ RETURN 1 = (1 = 1) $$) AS (result agtype); result -------- false (1 row) SELECT * FROM cypher('chained', $$ RETURN 1 = 1 = true $$) AS (result agtype); result -------- false (1 row) SELECT * FROM cypher('chained', $$ RETURN (1 = 1) = true $$) AS (result agtype); result -------- true (1 row) SELECT * FROM cypher('chained', $$ RETURN true = ((1 = 1) = true) $$) AS (result agtype); result -------- true (1 row) SELECT * FROM cypher('chained', $$ RETURN ((1 = 1) = 1) = 1 $$) AS (result agtype); result -------- false (1 row) SELECT * FROM cypher('chained', $$ RETURN (1 = (1 = 1)) = 1 $$) AS (result agtype); result -------- false (1 row) SELECT * FROM cypher('chained', $$ RETURN ((1 = (1 = 1)) = 1) = 1 $$) AS (result agtype); result -------- false (1 row) -- in clause SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE 35 = u.age = 35 RETURN u $$) AS (result agtype); result --------------------------------------------------------------------------------------------------- {"id": 844424930131971, "label": "people", "properties": {"age": 35, "name": "Samantha"}}::vertex (1 row) SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE (35 = u.age) = 35 RETURN u $$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE (35 = 35) = u.age RETURN u $$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE u.age = u.age = u.age RETURN u $$) AS (result agtype); result --------------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "people", "properties": {"age": 50, "name": "Jason"}}::vertex {"id": 844424930131970, "label": "people", "properties": {"age": 25, "name": "Amy"}}::vertex {"id": 844424930131971, "label": "people", "properties": {"age": 35, "name": "Samantha"}}::vertex {"id": 844424930131972, "label": "people", "properties": {"age": 40, "name": "Mark"}}::vertex {"id": 844424930131973, "label": "people", "properties": {"age": 15, "name": "David"}}::vertex (5 rows) SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE (u.age = u.age) = u.age RETURN u $$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE u.age = (u.age = u.age) RETURN u $$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE (u.age = u.age) = (u.age = u.age) RETURN u $$) AS (result agtype); result --------------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "people", "properties": {"age": 50, "name": "Jason"}}::vertex {"id": 844424930131970, "label": "people", "properties": {"age": 25, "name": "Amy"}}::vertex {"id": 844424930131971, "label": "people", "properties": {"age": 35, "name": "Samantha"}}::vertex {"id": 844424930131972, "label": "people", "properties": {"age": 40, "name": "Mark"}}::vertex {"id": 844424930131973, "label": "people", "properties": {"age": 15, "name": "David"}}::vertex (5 rows) SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE u.age = (u.age = (u.age = u.age)) RETURN u $$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE u.age = 35 = ((u.age = u.age) = u.age) RETURN u $$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE ((u.age = u.age) = (u.age = u.age)) = (u.age = u.age) RETURN u $$) AS (result agtype); result --------------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "people", "properties": {"age": 50, "name": "Jason"}}::vertex {"id": 844424930131970, "label": "people", "properties": {"age": 25, "name": "Amy"}}::vertex {"id": 844424930131971, "label": "people", "properties": {"age": 35, "name": "Samantha"}}::vertex {"id": 844424930131972, "label": "people", "properties": {"age": 40, "name": "Mark"}}::vertex {"id": 844424930131973, "label": "people", "properties": {"age": 15, "name": "David"}}::vertex (5 rows) -- -- Test transform logic for IS NULL & IS NOT NULL -- SELECT * FROM cypher('expr', $$ RETURN null IS NULL $$) AS r(result boolean); result -------- t (1 row) SELECT * FROM cypher('expr', $$ RETURN 1 IS NULL $$) AS r(result boolean); result -------- f (1 row) SELECT * FROM cypher('expr', $$ RETURN 1 IS NOT NULL $$) AS r(result boolean); result -------- t (1 row) SELECT * FROM cypher('expr', $$ RETURN null IS NOT NULL $$) AS r(result boolean); result -------- f (1 row) -- -- Test transform logic for AND, OR, NOT and XOR -- SELECT * FROM cypher('expr', $$ RETURN NOT false $$) AS r(result boolean); result -------- t (1 row) SELECT * FROM cypher('expr', $$ RETURN NOT true $$) AS r(result boolean); result -------- f (1 row) SELECT * FROM cypher('expr', $$ RETURN true AND true $$) AS r(result boolean); result -------- t (1 row) SELECT * FROM cypher('expr', $$ RETURN true AND false $$) AS r(result boolean); result -------- f (1 row) SELECT * FROM cypher('expr', $$ RETURN false AND true $$) AS r(result boolean); result -------- f (1 row) SELECT * FROM cypher('expr', $$ RETURN false AND false $$) AS r(result boolean); result -------- f (1 row) SELECT * FROM cypher('expr', $$ RETURN true OR true $$) AS r(result boolean); result -------- t (1 row) SELECT * FROM cypher('expr', $$ RETURN true OR false $$) AS r(result boolean); result -------- t (1 row) SELECT * FROM cypher('expr', $$ RETURN false OR true $$) AS r(result boolean); result -------- t (1 row) SELECT * FROM cypher('expr', $$ RETURN false OR false $$) AS r(result boolean); result -------- f (1 row) SELECT * FROM cypher('expr', $$ RETURN NOT ((true OR false) AND (false OR true)) $$) AS r(result boolean); result -------- f (1 row) SELECT * FROM cypher('expr', $$ RETURN true XOR true $$) AS r(result boolean); result -------- f (1 row) SELECT * FROM cypher('expr', $$ RETURN true XOR false $$) AS r(result boolean); result -------- t (1 row) SELECT * FROM cypher('expr', $$ RETURN false XOR true $$) AS r(result boolean); result -------- t (1 row) SELECT * FROM cypher('expr', $$ RETURN false XOR false $$) AS r(result boolean); result -------- f (1 row) SELECT * FROM cypher('expr', $$ RETURN false OR 1::bool $$) AS (result boolean); result -------- t (1 row) SELECT * FROM cypher('expr', $$ RETURN false AND NOT 1::bool $$) AS (result boolean); result -------- f (1 row) SELECT * FROM cypher('expr', $$ RETURN NOT 1::bool::int::bool $$) AS (result boolean); result -------- f (1 row) -- Invalid operands for AND, OR, NOT, XOR SELECT * FROM cypher('expr', $$ RETURN 1 AND true $$) AS r(result boolean); ERROR: cannot cast agtype integer to type boolean SELECT * FROM cypher('expr', $$ RETURN true AND 0 $$) AS r(result boolean); ERROR: cannot cast agtype integer to type boolean SELECT * FROM cypher('expr', $$ RETURN false OR 1 $$) AS r(result boolean); ERROR: cannot cast agtype integer to type boolean SELECT * FROM cypher('expr', $$ RETURN 0 OR true $$) AS r(result boolean); ERROR: cannot cast agtype integer to type boolean SELECT * FROM cypher('expr', $$ RETURN NOT 1 $$) AS r(result boolean); ERROR: cannot cast agtype integer to type boolean SELECT * FROM cypher('expr', $$ RETURN true XOR 0 $$) AS r(result boolean); ERROR: cannot cast agtype integer to type boolean SELECT * FROM cypher('expr', $$ RETURN 1 XOR 0 $$) AS r(result boolean); ERROR: cannot cast agtype integer to type boolean SELECT * FROM cypher('expr', $$ RETURN NOT ((1 OR 0) AND (0 OR 1)) $$) AS r(result boolean); ERROR: cannot cast agtype integer to type boolean SELECT * FROM cypher('expr', $$ RETURN 1.0 AND true $$) AS (result agtype); ERROR: cannot cast agtype float to type boolean SELECT * FROM cypher('expr', $$ RETURN false OR 'string' $$) AS (result agtype); ERROR: cannot cast agtype string to type boolean SELECT * FROM cypher('expr', $$ RETURN false XOR 1::numeric $$) AS (result agtype); ERROR: cannot cast agtype numeric to type boolean SELECT * FROM cypher('expr', $$ RETURN false OR 1::bool::int $$) AS (result boolean); ERROR: cannot cast agtype integer to type boolean -- -- Test indirection transform logic for object.property, object["property"], -- and array[element] -- SELECT * FROM cypher('expr', $$ RETURN [ 1, { bool: true, int: 3, array: [ 9, 11, { boom: false, float: 3.14 }, 13 ] }, 5, 7, 9 ][1].array[2]["float"] $$) AS r(result agtype); result -------- 3.14 (1 row) SELECT * FROM cypher('expr', $$ WITH {bool_val: false, int_val: 3, float_val: 3.14, array: [1, 2, 3]} as a RETURN a - 'array' $$) as (a agtype); a ------------------------------------------------------ {"int_val": 3, "bool_val": false, "float_val": 3.14} (1 row) SELECT * FROM cypher('expr', $$ WITH {bool_val: false, int_val: 3, float_val: 3.14, array: [1, 2, 3]} as a RETURN a - 'int_val' $$) as (a agtype); a ------------------------------------------------------------ {"array": [1, 2, 3], "bool_val": false, "float_val": 3.14} (1 row) SELECT * FROM cypher('expr', $$ WITH {bool_val: false, int_val: 3, float_val: 3.14, array: [1, 2, 3]} as a RETURN a.array - 1 $$) as (a agtype); a -------- [1, 3] (1 row) SELECT * FROM cypher('expr', $$ WITH {bool_val: false, int_val: 3, float_val: 3.14, array: [1, 2, 3]} as a RETURN a.array + 1 $$) as (a agtype); a -------------- [1, 2, 3, 1] (1 row) -- -- Test STARTS WITH, ENDS WITH, and CONTAINS transform logic -- SELECT * FROM cypher('expr', $$ RETURN "abcdefghijklmnopqrstuvwxyz" STARTS WITH "abcd" $$) AS r(result agtype); result -------- true (1 row) SELECT * FROM cypher('expr', $$ RETURN "abcdefghijklmnopqrstuvwxyz" ENDS WITH "wxyz" $$) AS r(result agtype); result -------- true (1 row) SELECT * FROM cypher('expr', $$ RETURN "abcdefghijklmnopqrstuvwxyz" CONTAINS "klmn" $$) AS r(result agtype); result -------- true (1 row) -- these should return false SELECT * FROM cypher('expr', $$ RETURN "abcdefghijklmnopqrstuvwxyz" STARTS WITH "bcde" $$) AS r(result agtype); result -------- false (1 row) SELECT * FROM cypher('expr', $$ RETURN "abcdefghijklmnopqrstuvwxyz" ENDS WITH "vwxy" $$) AS r(result agtype); result -------- false (1 row) SELECT * FROM cypher('expr', $$ RETURN "abcdefghijklmnopqrstuvwxyz" CONTAINS "klmo" $$) AS r(result agtype); result -------- false (1 row) -- these should return SQL NULL SELECT * FROM cypher('expr', $$ RETURN "abcdefghijklmnopqrstuvwxyz" STARTS WITH NULL $$) AS r(result agtype); result -------- (1 row) SELECT * FROM cypher('expr', $$ RETURN "abcdefghijklmnopqrstuvwxyz" ENDS WITH NULL $$) AS r(result agtype); result -------- (1 row) SELECT * FROM cypher('expr', $$ RETURN "abcdefghijklmnopqrstuvwxyz" CONTAINS NULL $$) AS r(result agtype); result -------- (1 row) -- -- Test =~ aka regular expression comparisons -- SELECT create_graph('regex'); NOTICE: graph "regex" has been created create_graph -------------- (1 row) SELECT * FROM cypher('regex', $$ CREATE (n:Person {name: 'John'}) RETURN n $$) AS r(result agtype); result ------------------------------------------------------------------------------------ {"id": 844424930131969, "label": "Person", "properties": {"name": "John"}}::vertex (1 row) SELECT * FROM cypher('regex', $$ CREATE (n:Person {name: 'Jeff'}) RETURN n $$) AS r(result agtype); result ------------------------------------------------------------------------------------ {"id": 844424930131970, "label": "Person", "properties": {"name": "Jeff"}}::vertex (1 row) SELECT * FROM cypher('regex', $$ CREATE (n:Person {name: 'Joan'}) RETURN n $$) AS r(result agtype); result ------------------------------------------------------------------------------------ {"id": 844424930131971, "label": "Person", "properties": {"name": "Joan"}}::vertex (1 row) SELECT * FROM cypher('regex', $$ MATCH (n:Person) WHERE n.name =~ 'JoHn' RETURN n $$) AS r(result agtype); result -------- (0 rows) SELECT * FROM cypher('regex', $$ MATCH (n:Person) WHERE n.name =~ '(?i)JoHn' RETURN n $$) AS r(result agtype); result ------------------------------------------------------------------------------------ {"id": 844424930131969, "label": "Person", "properties": {"name": "John"}}::vertex (1 row) SELECT * FROM cypher('regex', $$ MATCH (n:Person) WHERE n.name =~ 'Jo.n' RETURN n $$) AS r(result agtype); result ------------------------------------------------------------------------------------ {"id": 844424930131969, "label": "Person", "properties": {"name": "John"}}::vertex {"id": 844424930131971, "label": "Person", "properties": {"name": "Joan"}}::vertex (2 rows) SELECT * FROM cypher('regex', $$ MATCH (n:Person) WHERE n.name =~ 'J.*' RETURN n $$) AS r(result agtype); result ------------------------------------------------------------------------------------ {"id": 844424930131969, "label": "Person", "properties": {"name": "John"}}::vertex {"id": 844424930131970, "label": "Person", "properties": {"name": "Jeff"}}::vertex {"id": 844424930131971, "label": "Person", "properties": {"name": "Joan"}}::vertex (3 rows) -- --Coerce to Postgres 3 int types (smallint, int, bigint) -- SELECT create_graph('type_coercion'); NOTICE: graph "type_coercion" has been created create_graph -------------- (1 row) SELECT * FROM cypher('type_coercion', $$ RETURN NULL $$) AS (i bigint); i --- (1 row) SELECT * FROM cypher('type_coercion', $$ RETURN 1 $$) AS (i smallint); i --- 1 (1 row) SELECT * FROM cypher('type_coercion', $$ RETURN 1 $$) AS (i int); i --- 1 (1 row) SELECT * FROM cypher('type_coercion', $$ RETURN 1 $$) AS (i bigint); i --- 1 (1 row) SELECT * FROM cypher('type_coercion', $$ RETURN 1.0 $$) AS (i bigint); i --- 1 (1 row) SELECT * FROM cypher('type_coercion', $$ RETURN 1.0::numeric $$) AS (i bigint); i --- 1 (1 row) SELECT * FROM cypher('type_coercion', $$ RETURN '1' $$) AS (i bigint); i --- 1 (1 row) SELECT * FROM cypher('type_coercion', $$ RETURN true $$) AS (i bigint); i --- 1 (1 row) SELECT * FROM cypher('type_coercion', $$ RETURN true $$) AS (i int); i --- 1 (1 row) SELECT * FROM cypher('type_coercion', $$ RETURN '1.0' $$) AS (i bigint); i --- 1 (1 row) -- Casting to ints that will cause overflow SELECT * FROM cypher('type_coercion', $$ RETURN 10000000000000000000 $$) AS (i smallint); ERROR: smallint out of range SELECT * FROM cypher('type_coercion', $$ RETURN 10000000000000000000 $$) AS (i int); ERROR: integer out of range --Invalid types SELECT * FROM cypher('type_coercion', $$ RETURN {key: 1} $$) AS (i bigint); ERROR: cannot cast agtype object to type int SELECT * FROM cypher('type_coercion', $$ RETURN [1] $$) AS (i bigint); ERROR: cannot cast agtype array to type int SELECT * FROM cypher('type_coercion', $$ RETURN 1 $$) AS (i bool); ERROR: cannot cast agtype integer to type boolean SELECT * FROM cypher('type_coercion', $$CREATE ()-[:edge]->()$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('type_coercion', $$ MATCH (v) RETURN v $$) AS (i bigint); ERROR: cannot cast agtype vertex to type int SELECT * FROM cypher('type_coercion', $$ MATCH ()-[e]-() RETURN e $$) AS (i bigint); ERROR: cannot cast agtype edge to type int SELECT * FROM cypher('type_coercion', $$ MATCH p=()-[]-() RETURN p $$) AS (i bigint); ERROR: cannot cast agtype path to type int -- -- Test typecasting '::' transform and execution logic -- -- -- Test from an agtype value to agtype int -- SELECT * FROM cypher('expr', $$ RETURN 0.0::int $$) AS r(result agtype); result -------- 0 (1 row) SELECT * FROM cypher('expr', $$ RETURN 0.0::integer $$) AS r(result agtype); result -------- 0 (1 row) SELECT * FROM cypher('expr', $$ RETURN '0'::int $$) AS r(result agtype); result -------- 0 (1 row) SELECT * FROM cypher('expr', $$ RETURN '0'::integer $$) AS r(result agtype); result -------- 0 (1 row) SELECT * FROM cypher('expr', $$ RETURN 0.0::numeric::int $$) AS r(result agtype); result -------- 0 (1 row) SELECT * FROM cypher('expr', $$ RETURN 2.71::int $$) AS r(result agtype); result -------- 3 (1 row) SELECT * FROM cypher('expr', $$ RETURN 2.71::numeric::int $$) AS r(result agtype); result -------- 3 (1 row) SELECT * FROM cypher('expr', $$ RETURN true::int $$) AS r(result agtype); result -------- 1 (1 row) SELECT * FROM cypher('expr', $$ RETURN false::int $$) AS r(result agtype); result -------- 0 (1 row) SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1.0, pie: 3.1415927, e: 2::numeric}, 2, null][1].one)::int $$) AS r(result agtype); result -------- 1 (1 row) SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1.0::int, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].one) $$) AS r(result agtype); result -------- 1 (1 row) SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1::float, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].one)::int $$) AS r(result agtype); result -------- 1 (1 row) SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2, null][3])::int $$) AS r(result agtype); result -------- (1 row) -- should return SQL null SELECT agtype_typecast_int('null'::agtype); agtype_typecast_int --------------------- (1 row) SELECT agtype_typecast_int(null); agtype_typecast_int --------------------- (1 row) SELECT * FROM cypher('expr', $$ RETURN null::int $$) AS r(result agtype); result -------- (1 row) -- should return JSON null SELECT agtype_in('null::int'); agtype_in ----------- null (1 row) -- these should fail SELECT * FROM cypher('expr', $$ RETURN '0.0'::int $$) AS r(result agtype); ERROR: invalid input syntax for type bigint: "0.0" SELECT * FROM cypher('expr', $$ RETURN '1.5'::int $$) AS r(result agtype); ERROR: invalid input syntax for type bigint: "1.5" SELECT * FROM cypher('graph_name', $$ RETURN "15555555555555555555555555555"::int $$) AS (string_result agtype); ERROR: graph "graph_name" does not exist LINE 1: SELECT * FROM cypher('graph_name', $$ ^ SELECT * FROM cypher('expr', $$ RETURN 'NaN'::float::int $$) AS r(result agtype); ERROR: bigint out of range SELECT * FROM cypher('expr', $$ RETURN 'infinity'::float::int $$) AS r(result agtype); ERROR: bigint out of range SELECT * FROM cypher('expr', $$ RETURN ''::int $$) AS r(result agtype); ERROR: invalid input syntax for type bigint: "" SELECT * FROM cypher('expr', $$ RETURN 'false_'::int $$) AS r(result agtype); ERROR: invalid input syntax for type bigint: "false_" -- -- Test from an agtype value to agtype int -- SELECT * FROM cypher('expr', $$ RETURN 0::bool $$) AS r(result agtype); result -------- false (1 row) -- these should fail SELECT * FROM cypher('expr', $$ RETURN 1.23::bool $$) AS r(result agtype); ERROR: typecast expression must be an integer or a boolean SELECT * FROM cypher('expr', $$ RETURN ''::bool $$) AS r(result agtype); ERROR: typecast expression must be an integer or a boolean SELECT * FROM cypher('expr', $$ RETURN 'false_'::bool $$) AS r(result agtype); ERROR: typecast expression must be an integer or a boolean -- Test from an agtype value to an agtype numeric -- SELECT * FROM cypher('expr', $$ RETURN 0::numeric $$) AS r(result agtype); result ------------ 0::numeric (1 row) SELECT * FROM cypher('expr', $$ RETURN 2.71::numeric $$) AS r(result agtype); result --------------- 2.71::numeric (1 row) SELECT * FROM cypher('expr', $$ RETURN '2.71'::numeric $$) AS r(result agtype); result --------------- 2.71::numeric (1 row) SELECT * FROM cypher('expr', $$ RETURN (2.71::numeric)::numeric $$) AS r(result agtype); result --------------- 2.71::numeric (1 row) SELECT * FROM cypher('expr', $$ RETURN ('2.71'::numeric)::numeric $$) AS r(result agtype); result --------------- 2.71::numeric (1 row) SELECT * FROM cypher('expr', $$ RETURN ('NaN'::numeric)::numeric $$) AS r(result agtype); result -------------- NaN::numeric (1 row) SELECT * FROM cypher('expr', $$ RETURN ((1 + 2.71) * 3)::numeric $$) AS r(result agtype); result ---------------- 11.13::numeric (1 row) SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].pie)::numeric $$) AS r(result agtype); result -------------------- 3.1415927::numeric (1 row) SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].e) $$) AS r(result agtype); result ------------------- 2.718281::numeric (1 row) SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].e)::numeric $$) AS r(result agtype); result ------------------- 2.718281::numeric (1 row) SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2, null][3])::numeric $$) AS r(result agtype); result -------- (1 row) SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2::numeric, null]) $$) AS r(result agtype); result ----------------------------------------------------------------------------- [0, {"e": 2.718281::numeric, "one": 1, "pie": 3.1415927}, 2::numeric, null] (1 row) -- should return SQL null SELECT agtype_typecast_numeric('null'::agtype); agtype_typecast_numeric ------------------------- (1 row) SELECT agtype_typecast_numeric(null); agtype_typecast_numeric ------------------------- (1 row) SELECT * FROM cypher('expr', $$ RETURN null::numeric $$) AS r(result agtype); result -------- (1 row) -- should return JSON null SELECT agtype_in('null::numeric'); agtype_in ----------- null (1 row) -- these should fail SELECT * FROM cypher('expr', $$ RETURN ('2:71'::numeric)::numeric $$) AS r(result agtype); ERROR: invalid input syntax for type numeric: "2:71" SELECT * FROM cypher('expr', $$ RETURN ('inf'::numeric)::numeric $$) AS r(result agtype); result ------------------- Infinity::numeric (1 row) SELECT * FROM cypher('expr', $$ RETURN ('infinity'::numeric)::numeric $$) AS r(result agtype); result ------------------- Infinity::numeric (1 row) -- verify that output can be accepted and reproduced correctly via agtype_in SELECT agtype_in('2.71::numeric'); agtype_in --------------- 2.71::numeric (1 row) SELECT agtype_in('[0, {"e": 2.718281::numeric, "one": 1, "pie": 3.1415927}, 2::numeric, null]'); agtype_in ----------------------------------------------------------------------------- [0, {"e": 2.718281::numeric, "one": 1, "pie": 3.1415927}, 2::numeric, null] (1 row) SELECT * FROM cypher('expr', $$ RETURN (['NaN'::numeric, {one: 1, pie: 3.1415927, nan: 'nAn'::numeric}, 2::numeric, null]) $$) AS r(result agtype); result ------------------------------------------------------------------------------------- [NaN::numeric, {"nan": NaN::numeric, "one": 1, "pie": 3.1415927}, 2::numeric, null] (1 row) SELECT agtype_in('[NaN::numeric, {"nan": NaN::numeric, "one": 1, "pie": 3.1415927}, 2::numeric, null]'); agtype_in ------------------------------------------------------------------------------------- [NaN::numeric, {"nan": NaN::numeric, "one": 1, "pie": 3.1415927}, 2::numeric, null] (1 row) -- -- Test from an agtype value to agtype float -- SELECT * FROM cypher('expr', $$ RETURN 0::float $$) AS r(result agtype); result -------- 0.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN '2.71'::float $$) AS r(result agtype); result -------- 2.71 (1 row) SELECT * FROM cypher('expr', $$ RETURN 2.71::float $$) AS r(result agtype); result -------- 2.71 (1 row) SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2::numeric}, 2, null][1].one)::float $$) AS r(result agtype); result -------- 1.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1::float, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].one) $$) AS r(result agtype); result -------- 1.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1::float, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].one)::float $$) AS r(result agtype); result -------- 1.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2, null][3])::float $$) AS r(result agtype); result -------- (1 row) -- test NaN, infinity, and -infinity SELECT * FROM cypher('expr', $$ RETURN 'NaN'::float $$) AS r(result agtype); result -------- NaN (1 row) SELECT * FROM cypher('expr', $$ RETURN 'inf'::float $$) AS r(result agtype); result ---------- Infinity (1 row) SELECT * FROM cypher('expr', $$ RETURN '-inf'::float $$) AS r(result agtype); result ----------- -Infinity (1 row) SELECT * FROM cypher('expr', $$ RETURN 'infinity'::float $$) AS r(result agtype); result ---------- Infinity (1 row) SELECT * FROM cypher('expr', $$ RETURN '-infinity'::float $$) AS r(result agtype); result ----------- -Infinity (1 row) -- should return SQL null SELECT agtype_typecast_float('null'::agtype); agtype_typecast_float ----------------------- (1 row) SELECT agtype_typecast_float(null); agtype_typecast_float ----------------------- (1 row) SELECT * FROM cypher('expr', $$ RETURN null::float $$) AS r(result agtype); result -------- (1 row) -- should return JSON null SELECT agtype_in('null::float'); agtype_in ----------- null (1 row) -- these should fail SELECT * FROM cypher('expr', $$ RETURN '2:71'::float $$) AS r(result agtype); ERROR: invalid input syntax for type double precision: "2:71" SELECT * FROM cypher('expr', $$ RETURN 'infi'::float $$) AS r(result agtype); ERROR: invalid input syntax for type double precision: "infi" -- verify that output can be accepted and reproduced correctly via agtype_in SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1::float, pie: 3.1415927, e: 2.718281::numeric}, 2::numeric, null]) $$) AS r(result agtype); result ------------------------------------------------------------------------------- [0, {"e": 2.718281::numeric, "one": 1.0, "pie": 3.1415927}, 2::numeric, null] (1 row) SELECT agtype_in('[0, {"e": 2.718281::numeric, "one": 1.0, "pie": 3.1415927}, 2::numeric, null]'); agtype_in ------------------------------------------------------------------------------- [0, {"e": 2.718281::numeric, "one": 1.0, "pie": 3.1415927}, 2::numeric, null] (1 row) SELECT * FROM cypher('expr', $$ RETURN (['NaN'::float, {one: 'inf'::float, pie: 3.1415927, e: 2.718281::numeric}, 2::numeric, null]) $$) AS r(result agtype); result -------------------------------------------------------------------------------------- [NaN, {"e": 2.718281::numeric, "one": Infinity, "pie": 3.1415927}, 2::numeric, null] (1 row) SELECT agtype_in('[NaN, {"e": 2.718281::numeric, "one": Infinity, "pie": 3.1415927}, 2::numeric, null]'); agtype_in -------------------------------------------------------------------------------------- [NaN, {"e": 2.718281::numeric, "one": Infinity, "pie": 3.1415927}, 2::numeric, null] (1 row) -- -- Test typecast ::pg_float8 -- SELECT * FROM cypher('expr', $$ RETURN 0::pg_float8 $$) AS r(result agtype); result -------- 0.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN '2.71'::pg_float8 $$) AS r(result agtype); result -------- 2.71 (1 row) SELECT * FROM cypher('expr', $$ RETURN 2.71::pg_float8 $$) AS r(result agtype); result -------- 2.71 (1 row) SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2::numeric}, 2, null][1].one)::pg_float8 $$) AS r(result agtype); result -------- 1.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1::pg_float8, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].one) $$) AS r(result agtype); result -------- 1.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1::pg_float8, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].one)::float $$) AS r(result agtype); result -------- 1.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2, null][3])::pg_float8 $$) AS r(result agtype); result -------- (1 row) SELECT * FROM cypher('expr', $$ RETURN (['NaN'::pg_float8, {one: 'inf'::pg_float8, pie: 3.1415927, e: 2.718281::numeric}, 2::numeric, null]) $$) AS r(result agtype); result -------------------------------------------------------------------------------------- [NaN, {"e": 2.718281::numeric, "one": Infinity, "pie": 3.1415927}, 2::numeric, null] (1 row) SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].e)::pg_float8 $$) AS r(result agtype); result ---------- 2.718281 (1 row) -- test NaN, Infinity and -Infinity SELECT * FROM cypher('expr', $$ RETURN 'NaN'::pg_float8 $$) AS r(result agtype); result -------- NaN (1 row) SELECT * FROM cypher('expr', $$ RETURN 'inf'::pg_float8 $$) AS r(result agtype); result ---------- Infinity (1 row) SELECT * FROM cypher('expr', $$ RETURN '-inf'::pg_float8 $$) AS r(result agtype); result ----------- -Infinity (1 row) SELECT * FROM cypher('expr', $$ RETURN 'infinity'::pg_float8 $$) AS r(result agtype); result ---------- Infinity (1 row) SELECT * FROM cypher('expr', $$ RETURN '-infinity'::pg_float8 $$) AS r(result agtype); result ----------- -Infinity (1 row) SELECT * FROM cypher('expr', $$ RETURN null::pg_float8 $$) AS r(result agtype); result -------- (1 row) -- these should fail SELECT * FROM cypher('expr', $$ RETURN ''::pg_float8 $$) AS r(result agtype); ERROR: invalid input syntax for type double precision: "" SELECT * FROM cypher('expr', $$ RETURN '2:71'::pg_float8 $$) AS r(result agtype); ERROR: invalid input syntax for type double precision: "2:71" SELECT * FROM cypher('expr', $$ RETURN 'infi'::pg_float8 $$) AS r(result agtype); ERROR: invalid input syntax for type double precision: "infi" -- -- Test typecast :: transform and execution logic for object (vertex & edge) -- SELECT * FROM cypher('expr', $$ RETURN {id:0, label:"vertex 0", properties:{}}::vertex $$) AS r(result agtype); result ---------------------------------------------------------- {"id": 0, "label": "vertex 0", "properties": {}}::vertex (1 row) SELECT * FROM cypher('expr', $$ RETURN {vertex_0:{id:0, label:"vertex 0", properties:{}}::vertex} $$) AS r(result agtype); result ------------------------------------------------------------------------ {"vertex_0": {"id": 0, "label": "vertex 0", "properties": {}}::vertex} (1 row) SELECT * FROM cypher('expr', $$ RETURN {name:"container 0", vertices:[{vertex_0:{id:0, label:"vertex 0", properties:{}}::vertex}, {vertex_0:{id:0, label:"vertex 0", properties:{}}::vertex}]} $$) AS r(result agtype); result --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"name": "container 0", "vertices": [{"vertex_0": {"id": 0, "label": "vertex 0", "properties": {}}::vertex}, {"vertex_0": {"id": 0, "label": "vertex 0", "properties": {}}::vertex}]} (1 row) SELECT * FROM cypher('expr', $$ RETURN {id:3, label:"edge 0", properties:{}, start_id:0, end_id:1}::edge $$) AS r(result agtype); result ---------------------------------------------------------------------------------- {"id": 3, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge (1 row) SELECT * FROM cypher('expr', $$ RETURN {edge_0:{id:3, label:"edge 0", properties:{}, start_id:0, end_id:1}::edge} $$) AS r(result agtype); result ---------------------------------------------------------------------------------------------- {"edge_0": {"id": 3, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge} (1 row) --invalid edge typecast SELECT * FROM cypher('expr', $$ RETURN {edge_0:{id:3, label:"edge 0", properties:{}, startid:0, end_id:1}::edge} $$) AS r(result agtype); ERROR: edge typecast object has an invalid or missing start_id SELECT * FROM cypher('expr', $$ RETURN {edge_0:{id:3, label:"edge 0", properties:{}, start_id:0, endid:1}::edge} $$) AS r(result agtype); ERROR: edge typecast object has an invalid or missing end_id SELECT * FROM cypher('expr', $$ RETURN {name:"container 1", edges:[{id:3, label:"edge 0", properties:{}, start_id:0, end_id:1}::edge, {id:4, label:"edge 1", properties:{}, start_id:1, end_id:0}::edge]} $$) AS r(result agtype); result -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"name": "container 1", "edges": [{"id": 3, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 4, "label": "edge 1", "end_id": 0, "start_id": 1, "properties": {}}::edge]} (1 row) SELECT * FROM cypher('expr', $$ RETURN {name:"path 1", path:[{id:0, label:"vertex 0", properties:{}}::vertex, {id:2, label:"edge 0", properties:{}, start_id:0, end_id:1}::edge, {id:1, label:"vertex 1", properties:{}}::vertex]} $$) AS r(result agtype); result ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ {"name": "path 1", "path": [{"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 1, "label": "vertex 1", "properties": {}}::vertex]} (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN NULL::vertex $$) AS r(result agtype); result -------- (1 row) SELECT * FROM cypher('expr', $$ RETURN NULL::edge $$) AS r(result agtype); result -------- (1 row) SELECT agtype_typecast_vertex('null'::agtype); agtype_typecast_vertex ------------------------ (1 row) SELECT agtype_typecast_vertex(null); agtype_typecast_vertex ------------------------ (1 row) SELECT agtype_typecast_edge('null'::agtype); agtype_typecast_edge ---------------------- (1 row) SELECT agtype_typecast_edge(null); agtype_typecast_edge ---------------------- (1 row) -- should return JSON null SELECT agtype_in('null::vertex'); agtype_in ----------- null (1 row) SELECT agtype_in('null::edge'); agtype_in ----------- null (1 row) -- should all fail SELECT * FROM cypher('expr', $$ RETURN {id:0, labelz:"vertex 0", properties:{}}::vertex $$) AS r(result agtype); ERROR: vertex typecast object has invalid or missing label SELECT * FROM cypher('expr', $$ RETURN {id:0, label:"vertex 0"}::vertex $$) AS r(result agtype); ERROR: typecast object is not a vertex SELECT * FROM cypher('expr', $$ RETURN {id:"0", label:"vertex 0", properties:{}}::vertex $$) AS r(result agtype); ERROR: vertex typecast object has invalid or missing id SELECT * FROM cypher('expr', $$ RETURN {}::vertex $$) AS r(result agtype); ERROR: typecast object is not a vertex SELECT * FROM cypher('expr', $$ RETURN {id:3, labelz:"edge 0", properties:{}, start_id:0, end_id:1}::edge $$) AS r(result agtype); ERROR: edge typecast object has an invalid or missing label SELECT * FROM cypher('expr', $$ RETURN {id:3, label:"edge 0", start_id:0, end_id:1}::edge $$) AS r(result agtype); ERROR: typecast object is not an edge SELECT * FROM cypher('expr', $$ RETURN {}::edge $$) AS r(result agtype); ERROR: typecast object is not an edge -- make sure that output can be read back in and reproduce the output SELECT agtype_in('{"name": "container 0", "vertices": [{"vertex_0": {"id": 0, "label": "vertex 0", "properties": {}}::vertex}, {"vertex_0": {"id": 0, "label": "vertex 0", "properties": {}}::vertex}]}'); agtype_in --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"name": "container 0", "vertices": [{"vertex_0": {"id": 0, "label": "vertex 0", "properties": {}}::vertex}, {"vertex_0": {"id": 0, "label": "vertex 0", "properties": {}}::vertex}]} (1 row) SELECT agtype_in('{"name": "container 1", "edges": [{"id": 3, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 4, "label": "edge 1", "end_id": 0, "start_id": 1, "properties": {}}::edge]}'); agtype_in -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"name": "container 1", "edges": [{"id": 3, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 4, "label": "edge 1", "end_id": 0, "start_id": 1, "properties": {}}::edge]} (1 row) SELECT agtype_in('{"name": "path 1", "path": [{"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 1, "label": "vertex 1", "properties": {}}::vertex]}'); agtype_in ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ {"name": "path 1", "path": [{"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 1, "label": "vertex 1", "properties": {}}::vertex]} (1 row) -- typecast to path SELECT agtype_in('[{"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 1, "label": "vertex 1", "properties": {}}::vertex]::path'); agtype_in -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 1, "label": "vertex 1", "properties": {}}::vertex]::path (1 row) SELECT agtype_in('{"Path" : [{"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 1, "label": "vertex 1", "properties": {}}::vertex]::path}'); agtype_in ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ {"Path": [{"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 1, "label": "vertex 1", "properties": {}}::vertex]::path} (1 row) SELECT * FROM cypher('expr', $$ RETURN [{id: 0, label: "vertex 0", properties: {}}::vertex, {id: 2, label: "edge 0", end_id: 1, start_id: 0, properties: {}}::edge, {id: 1, label: "vertex 1", properties: {}}::vertex]::path $$) AS r(result agtype); result -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 1, "label": "vertex 1", "properties": {}}::vertex]::path (1 row) SELECT * FROM cypher('expr', $$ RETURN {path : [{id: 0, label: "vertex 0", properties: {}}::vertex, {id: 2, label: "edge 0", end_id: 1, start_id: 0, properties: {}}::edge, {id: 1, label: "vertex 1", properties: {}}::vertex]::path} $$) AS r(result agtype); result ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ {"path": [{"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 1, "label": "vertex 1", "properties": {}}::vertex]::path} (1 row) -- verify that the output can be input SELECT agtype_in('[{"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 1, "label": "vertex 1", "properties": {}}::vertex]::path'); agtype_in -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 1, "label": "vertex 1", "properties": {}}::vertex]::path (1 row) SELECT agtype_in('{"path": [{"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 1, "label": "vertex 1", "properties": {}}::vertex]::path}'); agtype_in ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ {"path": [{"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 1, "label": "vertex 1", "properties": {}}::vertex]::path} (1 row) -- invalid paths should fail SELECT agtype_in('[{"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge]::path'); ERROR: array is not a valid path SELECT agtype_in('{"Path" : [{"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 1, "label": "vertex 1", "properties": {}}::vertex]::path}'); ERROR: array is not a valid path SELECT * FROM cypher('expr', $$ RETURN [{id: 0, label: "vertex 0", properties: {}}::vertex]::path $$) AS r(result agtype); ERROR: typecast argument is not a valid path SELECT * FROM cypher('expr', $$ RETURN [{id: 2, label: "edge 0", end_id: 1, start_id: 0, properties: {}}::edge]::path $$) AS r(result agtype); ERROR: typecast argument is not a valid path SELECT * FROM cypher('expr', $$ RETURN []::path $$) AS r(result agtype); ERROR: typecast argument is not a valid path -- should be JSON null SELECT agtype_in('null::path'); agtype_in ----------- null (1 row) -- should be SQL null SELECT * FROM cypher('expr', $$ RETURN null::path $$) AS r(result agtype); result -------- (1 row) SELECT agtype_typecast_path(agtype_in('null')); agtype_typecast_path ---------------------- (1 row) SELECT agtype_typecast_path(null); agtype_typecast_path ---------------------- (1 row) -- test functions -- create some vertices and edges SELECT * FROM cypher('expr', $$CREATE (:v)$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('expr', $$CREATE (:v {i: 0})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('expr', $$CREATE (:v {i: 1})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('expr', $$ CREATE (:v1 {id:'initial'})-[:e1]->(:v1 {id:'middle'})-[:e1]->(:v1 {id:'end'}) $$) AS (a agtype); a --- (0 rows) -- show them SELECT * FROM cypher('expr', $$ MATCH (v) RETURN v $$) AS (expression agtype); expression ---------------------------------------------------------------------------------- {"id": 844424930131969, "label": "v", "properties": {}}::vertex {"id": 844424930131970, "label": "v", "properties": {"i": 0}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 1}}::vertex {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex (6 rows) SELECT * FROM cypher('expr', $$ MATCH ()-[e]-() RETURN e $$) AS (expression agtype); expression --------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge (4 rows) -- id() SELECT * FROM cypher('expr', $$ MATCH ()-[e]-() RETURN id(e) $$) AS (id agtype); id ------------------ 1407374883553281 1407374883553281 1407374883553282 1407374883553282 (4 rows) SELECT * FROM cypher('expr', $$ MATCH (v) RETURN id(v) $$) AS (id agtype); id ------------------ 844424930131969 844424930131970 844424930131971 1125899906842625 1125899906842626 1125899906842627 (6 rows) -- should return null SELECT * FROM cypher('expr', $$ RETURN id(null) $$) AS (id agtype); id ---- (1 row) -- should error SELECT * FROM cypher('expr', $$ RETURN id() $$) AS (id agtype); ERROR: function ag_catalog.age_id() does not exist LINE 2: RETURN id() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- start_id() SELECT * FROM cypher('expr', $$ MATCH ()-[e]-() RETURN start_id(e) $$) AS (start_id agtype); start_id ------------------ 1125899906842626 1125899906842626 1125899906842625 1125899906842625 (4 rows) -- should return null SELECT * FROM cypher('expr', $$ RETURN start_id(null) $$) AS (start_id agtype); start_id ---------- (1 row) -- should error SELECT * FROM cypher('expr', $$ MATCH (v) RETURN start_id(v) $$) AS (start_id agtype); ERROR: start_id() argument must be an edge or null SELECT * FROM cypher('expr', $$ RETURN start_id() $$) AS (start_id agtype); ERROR: function ag_catalog.age_start_id() does not exist LINE 2: RETURN start_id() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- end_id() SELECT * FROM cypher('expr', $$ MATCH ()-[e]-() RETURN end_id(e) $$) AS (end_id agtype); end_id ------------------ 1125899906842627 1125899906842627 1125899906842626 1125899906842626 (4 rows) -- should return null SELECT * FROM cypher('expr', $$ RETURN end_id(null) $$) AS (end_id agtype); end_id -------- (1 row) -- should error SELECT * FROM cypher('expr', $$ MATCH (v) RETURN end_id(v) $$) AS (end_id agtype); ERROR: end_id() argument must be an edge or null SELECT * FROM cypher('expr', $$ RETURN end_id() $$) AS (end_id agtype); ERROR: function ag_catalog.age_end_id() does not exist LINE 2: RETURN end_id() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- startNode() SELECT * FROM cypher('expr', $$ MATCH ()-[e]-() RETURN id(e), start_id(e), startNode(e) $$) AS (id agtype, start_id agtype, startNode agtype); id | start_id | startnode ------------------+------------------+---------------------------------------------------------------------------------- 1407374883553281 | 1125899906842626 | {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex 1407374883553281 | 1125899906842626 | {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex 1407374883553282 | 1125899906842625 | {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex 1407374883553282 | 1125899906842625 | {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex (4 rows) -- should return null SELECT * FROM cypher('expr', $$ RETURN startNode(null) $$) AS (startNode agtype); startnode ----------- (1 row) -- should error SELECT * FROM cypher('expr', $$ MATCH (v) RETURN startNode(v) $$) AS (startNode agtype); ERROR: startNode() argument must be an edge or null SELECT * FROM cypher('expr', $$ RETURN startNode() $$) AS (startNode agtype); ERROR: function ag_catalog.age_startnode() does not exist LINE 2: RETURN startNode() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- endNode() SELECT * FROM cypher('expr', $$ MATCH ()-[e]-() RETURN id(e), end_id(e), endNode(e) $$) AS (id agtype, end_id agtype, endNode agtype); id | end_id | endnode ------------------+------------------+--------------------------------------------------------------------------------- 1407374883553281 | 1125899906842627 | {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex 1407374883553281 | 1125899906842627 | {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex 1407374883553282 | 1125899906842626 | {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex 1407374883553282 | 1125899906842626 | {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex (4 rows) -- should return null SELECT * FROM cypher('expr', $$ RETURN endNode(null) $$) AS (endNode agtype); endnode --------- (1 row) -- should error SELECT * FROM cypher('expr', $$ MATCH (v) RETURN endNode(v) $$) AS (endNode agtype); ERROR: endNode() argument must be an edge or null SELECT * FROM cypher('expr', $$ RETURN endNode() $$) AS (endNode agtype); ERROR: function ag_catalog.age_endnode() does not exist LINE 2: RETURN endNode() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- type() SELECT * FROM cypher('expr', $$ MATCH ()-[e]-() RETURN type(e) $$) AS (type agtype); type ------ "e1" "e1" "e1" "e1" (4 rows) -- should return null SELECT * FROM cypher('expr', $$ RETURN type(null) $$) AS (type agtype); type ------ (1 row) -- should error SELECT * FROM cypher('expr', $$ MATCH (v) RETURN type(v) $$) AS (type agtype); ERROR: type() argument must be an edge or null SELECT * FROM cypher('expr', $$ RETURN type() $$) AS (type agtype); ERROR: function ag_catalog.age_type() does not exist LINE 2: RETURN type() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- label () SELECT * FROM cypher('expr', $$ MATCH (v) RETURN label(v) $$) AS (label agtype); label ------- "v" "v" "v" "v1" "v1" "v1" (6 rows) SELECT * FROM cypher('expr', $$ MATCH ()-[e]->() RETURN label(e) $$) AS (label agtype); label ------- "e1" "e1" (2 rows) SELECT * FROM cypher('expr', $$ RETURN label({id: 0, label: 'typecast', properties: {}}::vertex) $$) AS (label agtype); label ------------ "typecast" (1 row) -- return NULL SELECT * FROM cypher('expr', $$ RETURN label(NULL) $$) AS (label agtype); label ------- (1 row) SELECT ag_catalog.age_label(NULL); age_label ----------- (1 row) -- should error SELECT * FROM cypher('expr', $$ MATCH p=()-[]->() RETURN label(p) $$) AS (label agtype); ERROR: label() argument must resolve to an edge or vertex SELECT * FROM cypher('expr', $$ RETURN label(1) $$) AS (label agtype); ERROR: label() argument must resolve to an edge or vertex SELECT * FROM cypher('expr', $$ MATCH (n) RETURN label([n]) $$) AS (label agtype); ERROR: label() argument must resolve to an edge or vertex SELECT * FROM cypher('expr', $$ RETURN label({id: 0, label: 'failed', properties: {}}) $$) AS (label agtype); ERROR: label() argument must resolve to an edge or vertex -- timestamp() can't be done as it will always have a different value -- size() of a string SELECT * FROM cypher('expr', $$ RETURN size('12345') $$) AS (size agtype); size ------ 5 (1 row) SELECT * FROM cypher('expr', $$ RETURN size("1234567890") $$) AS (size agtype); size ------ 10 (1 row) -- size() of an array SELECT * FROM cypher('expr', $$ RETURN size([1, 2, 3, 4, 5]) $$) AS (size agtype); size ------ 5 (1 row) SELECT * FROM cypher('expr', $$ RETURN size([]) $$) AS (size agtype); size ------ 0 (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN size(null) $$) AS (size agtype); size ------ (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN size(1234567890) $$) AS (size agtype); ERROR: size() unsupported argument SELECT * FROM cypher('expr', $$ RETURN size() $$) AS (size agtype); ERROR: function ag_catalog.age_size() does not exist LINE 2: RETURN size() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE size(vle_array[0]) = 0 RETURN vle_array $$) AS (vle_array agtype); ERROR: size() unsupported argument SELECT * FROM cypher('expr', $$ RETURN size({id: 0, status:'it_will_fail'}) $$) AS (size agtype); ERROR: size() unsupported argument -- head() of an array SELECT * FROM cypher('expr', $$ RETURN head([1, 2, 3, 4, 5]) $$) AS (head agtype); head ------ 1 (1 row) SELECT * FROM cypher('expr', $$ RETURN head([1]) $$) AS (head agtype); head ------ 1 (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN head([]) $$) AS (head agtype); head ------ (1 row) SELECT * FROM cypher('expr', $$ RETURN head(null) $$) AS (head agtype); head ------ (1 row) SELECT * FROM cypher('expr', $$ RETURN head([null, null]) $$) AS (head agtype); head ------ (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN head(1234567890) $$) AS (head agtype); ERROR: head() argument must resolve to a list or null SELECT * FROM cypher('expr', $$ RETURN head() $$) AS (head agtype); ERROR: function ag_catalog.age_head() does not exist LINE 2: RETURN head() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() RETURN head(vle_array[0]) $$) AS (head agtype); ERROR: head() argument must resolve to a list or null SELECT * FROM cypher('expr', $$ RETURN head({id: 0, status:'it_will_fail'}) $$) AS (head agtype); ERROR: head() argument must resolve to a list or null -- last() SELECT * FROM cypher('expr', $$ RETURN last([1, 2, 3, 4, 5]) $$) AS (last agtype); last ------ 5 (1 row) SELECT * FROM cypher('expr', $$ RETURN last([1]) $$) AS (last agtype); last ------ 1 (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN last([]) $$) AS (last agtype); last ------ (1 row) SELECT * FROM cypher('expr', $$ RETURN last(null) $$) AS (last agtype); last ------ (1 row) SELECT * FROM cypher('expr', $$ RETURN last([null, null]) $$) AS (last agtype); last ------ (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN last(1234567890) $$) AS (last agtype); ERROR: last() argument must resolve to a list or null SELECT * FROM cypher('expr', $$ RETURN last() $$) AS (last agtype); ERROR: function ag_catalog.age_last() does not exist LINE 2: RETURN last() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() RETURN last(vle_array[0]) $$) AS (last agtype); ERROR: last() argument must resolve to a list or null SELECT * FROM cypher('expr', $$ RETURN last({id: 0, status:'it_will_fail'}) $$) AS (last agtype); ERROR: last() argument must resolve to a list or null -- properties() SELECT * FROM cypher('expr', $$ MATCH (v) RETURN properties(v) $$) AS (properties agtype); properties ------------------- {} {"i": 0} {"i": 1} {"id": "initial"} {"id": "middle"} {"id": "end"} (6 rows) SELECT * FROM cypher('expr', $$ MATCH ()-[e]-() RETURN properties(e) $$) AS (properties agtype); properties ------------ {} {} {} {} (4 rows) -- should return null SELECT * FROM cypher('expr', $$ RETURN properties(null) $$) AS (properties agtype); properties ------------ (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN properties(1234) $$) AS (properties agtype); ERROR: properties() argument must be a vertex, an edge or null SELECT * FROM cypher('expr', $$ RETURN properties() $$) AS (properties agtype); ERROR: function ag_catalog.age_properties() does not exist LINE 2: RETURN properties() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- coalesce SELECT * FROM cypher('expr', $$ RETURN coalesce(null, 1, null, null) $$) AS (coalesce agtype); coalesce ---------- 1 (1 row) SELECT * FROM cypher('expr', $$ RETURN coalesce(null, -3.14, null, null) $$) AS (coalesce agtype); coalesce ---------- -3.14 (1 row) SELECT * FROM cypher('expr', $$ RETURN coalesce(null, "string", null, null) $$) AS (coalesce agtype); coalesce ---------- "string" (1 row) SELECT * FROM cypher('expr', $$ RETURN coalesce(null, null, null, []) $$) AS (coalesce agtype); coalesce ---------- [] (1 row) SELECT * FROM cypher('expr', $$ RETURN coalesce(null, null, null, {}) $$) AS (coalesce agtype); coalesce ---------- {} (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN coalesce(null, id(null), null) $$) AS (coalesce agtype); coalesce ---------- (1 row) SELECT * FROM cypher('expr', $$ RETURN coalesce(null) $$) AS (coalesce agtype); coalesce ---------- (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN coalesce() $$) AS (coalesce agtype); ERROR: syntax error at or near ")" LINE 2: RETURN coalesce() ^ -- toBoolean() SELECT * FROM cypher('expr', $$ RETURN toBoolean(true) $$) AS (toBoolean agtype); toboolean ----------- true (1 row) SELECT * FROM cypher('expr', $$ RETURN toBoolean(false) $$) AS (toBoolean agtype); toboolean ----------- false (1 row) SELECT * FROM cypher('expr', $$ RETURN toBoolean("true") $$) AS (toBoolean agtype); toboolean ----------- true (1 row) SELECT * FROM cypher('expr', $$ RETURN toBoolean("false") $$) AS (toBoolean agtype); toboolean ----------- false (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN toBoolean("false_") $$) AS (toBoolean agtype); toboolean ----------- (1 row) SELECT * FROM cypher('expr', $$ RETURN toBoolean(null) $$) AS (toBoolean agtype); toboolean ----------- (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN toBoolean(1) $$) AS (toBoolean agtype); ERROR: toBoolean() unsupported argument agtype 3 SELECT * FROM cypher('expr', $$ RETURN toBoolean() $$) AS (toBoolean agtype); ERROR: function ag_catalog.age_toboolean() does not exist LINE 2: RETURN toBoolean() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- toBooleanList() SELECT * FROM cypher('expr', $$ RETURN toBooleanList([true, false, true]) $$) AS (toBooleanList agtype); tobooleanlist --------------------- [true, false, true] (1 row) SELECT * FROM cypher('expr', $$ RETURN toBooleanList(["true", "false", "true"]) $$) AS (toBooleanList agtype); tobooleanlist --------------------- [true, false, true] (1 row) SELECT * FROM cypher('expr', $$ RETURN toBooleanList(["True", "False", "True"]) $$) AS (toBooleanList agtype); tobooleanlist --------------------- [true, false, true] (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN toBooleanList([]) $$) AS (toBooleanList agtype); tobooleanlist --------------- (1 row) SELECT * FROM cypher('expr', $$ RETURN toBooleanList([null, null, null]) $$) AS (toBooleanList agtype); tobooleanlist -------------------- [null, null, null] (1 row) SELECT * FROM cypher('expr', $$ RETURN toBooleanList(["Hello", "world!"]) $$) AS (toBooleanList agtype); tobooleanlist --------------- [null, null] (1 row) SELECT * FROM cypher('expr', $$ RETURN toBooleanList([["A", "B"], ["C", "D"]]) $$) AS (toBooleanList agtype); tobooleanlist --------------- [null, null] (1 row) SELECT * FROM cypher('expr', $$ RETURN toBooleanList([0,1,2,3,4]) $$) AS (toBooleanList agtype); tobooleanlist -------------------------------- [null, null, null, null, null] (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN toBooleanList(fail) $$) AS (toBooleanList agtype); ERROR: could not find rte for fail LINE 2: RETURN toBooleanList(fail) ^ SELECT * FROM cypher('expr', $$ RETURN toBooleanList("fail") $$) AS (toBooleanList agtype); ERROR: toBooleanList() argument must resolve to a list or null SELECT * FROM cypher('expr', $$ RETURN toBooleanList(123) $$) AS (toBooleanList agtype); ERROR: toBooleanList() argument must resolve to a list or null -- toFloat() SELECT * FROM cypher('expr', $$ RETURN toFloat(1) $$) AS (toFloat agtype); tofloat --------- 1.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN toFloat(1.2) $$) AS (toFloat agtype); tofloat --------- 1.2 (1 row) SELECT * FROM cypher('expr', $$ RETURN toFloat("1") $$) AS (toFloat agtype); tofloat --------- 1.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN toFloat("1.2") $$) AS (toFloat agtype); tofloat --------- 1.2 (1 row) SELECT * FROM cypher('expr', $$ RETURN toFloat("1.2"::numeric) $$) AS (toFloat agtype); tofloat --------- 1.2 (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN toFloat("false_") $$) AS (toFloat agtype); tofloat --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN toFloat(null) $$) AS (toFloat agtype); tofloat --------- (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN toFloat(true) $$) AS (toFloat agtype); ERROR: toFloat() unsupported argument agtype 5 SELECT * FROM cypher('expr', $$ RETURN toFloat() $$) AS (toFloat agtype); ERROR: function ag_catalog.age_tofloat() does not exist LINE 2: RETURN toFloat() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- toFloatList() SELECT * FROM cypher('expr', $$ RETURN toFloatList([1.3]) $$) AS (toFloatList agtype); tofloatlist ------------- [1.3] (1 row) SELECT * FROM cypher('expr', $$ RETURN toFloatList([1.2, '4.654']) $$) AS (toFloatList agtype); tofloatlist -------------- [1.2, 4.654] (1 row) SELECT * FROM cypher('expr', $$ RETURN toFloatList(['1.9432', 8.6222, '9.4111212', 344.22]) $$) AS (toFloatList agtype); tofloatlist ------------------------------------- [1.9432, 8.6222, 9.4111212, 344.22] (1 row) SELECT * FROM cypher('expr', $$ RETURN toFloatList(['999.2']) $$) AS (toFloatList agtype); tofloatlist ------------- [999.2] (1 row) SELECT * FROM cypher('expr', $$ RETURN toFloatList([1.20002]) $$) AS (toFloatList agtype); tofloatlist ------------- [1.20002] (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN toFloatList(['true']) $$) AS (toFloatList agtype); tofloatlist ------------- [null] (1 row) SELECT * FROM cypher('expr', $$ RETURN toFloatList([null]) $$) AS (toFloatList agtype); tofloatlist ------------- [null] (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN toFloatList([failed]) $$) AS (toFloatList agtype); ERROR: could not find rte for failed LINE 2: RETURN toFloatList([failed]) ^ SELECT * FROM cypher('expr', $$ RETURN toFloatList("failed") $$) AS (toFloatList agtype); ERROR: toFloatList() argument must resolve to a list or null SELECT * FROM cypher('expr', $$ RETURN toFloatList(555) $$) AS (toFloatList agtype); ERROR: toFloatList() argument must resolve to a list or null -- toInteger() SELECT * FROM cypher('expr', $$ RETURN toInteger(1) $$) AS (toInteger agtype); tointeger ----------- 1 (1 row) SELECT * FROM cypher('expr', $$ RETURN toInteger(1.2) $$) AS (toInteger agtype); tointeger ----------- 1 (1 row) SELECT * FROM cypher('expr', $$ RETURN toInteger("1") $$) AS (toInteger agtype); tointeger ----------- 1 (1 row) SELECT * FROM cypher('expr', $$ RETURN toInteger("1.2") $$) AS (toInteger agtype); tointeger ----------- 1 (1 row) SELECT * FROM cypher('expr', $$ RETURN toInteger("1.2"::numeric) $$) AS (toInteger agtype); tointeger ----------- 1 (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN toInteger("false_") $$) AS (toInteger agtype); tointeger ----------- (1 row) SELECT * FROM cypher('expr', $$ RETURN toInteger(null) $$) AS (toInteger agtype); tointeger ----------- (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN toInteger(true) $$) AS (toInteger agtype); ERROR: toInteger() unsupported argument agtype 5 SELECT * FROM cypher('expr', $$ RETURN toInteger() $$) AS (toInteger agtype); ERROR: function ag_catalog.age_tointeger() does not exist LINE 2: RETURN toInteger() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- toIntegerList() SELECT * FROM cypher('expr', $$ RETURN toIntegerList([1, 7.8, 9.0, '88']) $$) AS (toIntegerList agtype); tointegerlist --------------- [1, 7, 9, 88] (1 row) SELECT * FROM cypher('expr', $$ RETURN toIntegerList([4.2, '123', '8', 8]) $$) AS (toIntegerList agtype); tointegerlist ---------------- [4, 123, 8, 8] (1 row) SELECT * FROM cypher('expr', $$ RETURN toIntegerList(['41', '12', 2]) $$) AS (toIntegerList agtype); tointegerlist --------------- [41, 12, 2] (1 row) SELECT * FROM cypher('expr', $$ RETURN toIntegerList([1, 2, 3, '10.2']) $$) AS (toIntegerList agtype); tointegerlist --------------- [1, 2, 3, 10] (1 row) SELECT * FROM cypher('expr', $$ RETURN toIntegerList([0000]) $$) AS (toIntegerList agtype); tointegerlist --------------- [0] (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN toIntegerList(["false_", 'asdsad', '123k1kdk1']) $$) AS (toIntegerList agtype); tointegerlist -------------------- [null, null, null] (1 row) SELECT * FROM cypher('expr', $$ RETURN toIntegerList([null, '123false', 'one']) $$) AS (toIntegerList agtype); tointegerlist -------------------- [null, null, null] (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN toIntegerList(123, '123') $$) AS (toIntegerList agtype); ERROR: toIntegerList() argument must resolve to a list or null SELECT * FROM cypher('expr', $$ RETURN toIntegerList(32[]) $$) AS (toIntegerList agtype); ERROR: syntax error at or near "]" LINE 2: RETURN toIntegerList(32[]) ^ -- length() of a path SELECT * FROM cypher('expr', $$ RETURN length([{id: 0, label: "vertex 0", properties: {}}::vertex, {id: 2, label: "edge 0", end_id: 1, start_id: 0, properties: {}}::edge, {id: 1, label: "vertex 1", properties: {}}::vertex]::path) $$) AS (length agtype); length -------- 1 (1 row) SELECT * FROM cypher('expr', $$ RETURN length([{id: 0, label: "vertex 0", properties: {}}::vertex, {id: 2, label: "edge 0", end_id: 1, start_id: 0, properties: {}}::edge, {id: 1, label: "vertex 1", properties: {}}::vertex, {id: 2, label: "edge 0", end_id: 1, start_id: 0, properties: {}}::edge, {id: 1, label: "vertex 1", properties: {}}::vertex]::path) $$) AS (length agtype); length -------- 2 (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN length(null) $$) AS (length agtype); length -------- (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN length(true) $$) AS (length agtype); ERROR: length() argument must resolve to a path or null SELECT * FROM cypher('expr', $$ RETURN length() $$) AS (length agtype); ERROR: function ag_catalog.age_length() does not exist LINE 2: RETURN length() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- -- toString() -- -- PG types SELECT * FROM age_toString(3); age_tostring -------------- "3" (1 row) SELECT * FROM age_toString(3.14); age_tostring -------------- "3.14" (1 row) SELECT * FROM age_toString(3.14::float); age_tostring -------------- "3.14" (1 row) SELECT * FROM age_toString(3.14::numeric); age_tostring -------------- "3.14" (1 row) SELECT * FROM age_toString(true); age_tostring -------------- "true" (1 row) SELECT * FROM age_toString(false); age_tostring -------------- "false" (1 row) SELECT * FROM age_toString('a string'); age_tostring -------------- "a string" (1 row) SELECT * FROM age_toString('a cstring'::cstring); age_tostring -------------- "a cstring" (1 row) SELECT * FROM age_toString('a text string'::text); age_tostring ----------------- "a text string" (1 row) SELECT * FROM age_toString(pg_typeof(3.14)); age_tostring -------------- "numeric" (1 row) -- agtypes SELECT * FROM age_toString(agtype_in('3')); age_tostring -------------- "3" (1 row) SELECT * FROM age_toString(agtype_in('3.14')); age_tostring -------------- "3.14" (1 row) SELECT * FROM age_toString(agtype_in('3.14::float')); age_tostring -------------- "3.14" (1 row) SELECT * FROM age_toString(agtype_in('3.14::numeric')); age_tostring -------------- "3.14" (1 row) SELECT * FROM age_toString(agtype_in('true')); age_tostring -------------- "true" (1 row) SELECT * FROM age_toString(agtype_in('false')); age_tostring -------------- "false" (1 row) SELECT * FROM age_toString(agtype_in('"a string"')); age_tostring -------------- "a string" (1 row) SELECT * FROM cypher('expr', $$ RETURN toString(3.14::numeric) $$) AS (results agtype); results --------- "3.14" (1 row) -- should return null SELECT * FROM age_toString(NULL); age_tostring -------------- (1 row) SELECT * FROM age_toString(agtype_in(null)); age_tostring -------------- (1 row) -- should fail SELECT * FROM age_toString(); ERROR: function age_tostring() does not exist LINE 1: SELECT * FROM age_toString(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ RETURN toString() $$) AS (results agtype); ERROR: function ag_catalog.age_tostring() does not exist LINE 1: SELECT * FROM cypher('expr', $$ RETURN toString() $$) AS (re... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- toStringList() -- SELECT * FROM cypher('expr', $$ RETURN toStringList([5, 10, 7.8, 9, 1.3]) $$) AS (toStringList agtype); tostringlist -------------------------------- ["5", "10", "7.8", "9", "1.3"] (1 row) SELECT * FROM cypher('expr', $$ RETURN toStringList(['test', 89, 'again', 7.1, 9]) $$) AS (toStringList agtype); tostringlist ------------------------------------- ["test", "89", "again", "7.1", "9"] (1 row) SELECT * FROM cypher('expr', $$ RETURN toStringList([null, false, true, 'string']) $$) AS (toStringList agtype); tostringlist ------------------------------ [null, null, null, "string"] (1 row) SELECT * FROM cypher('expr', $$ RETURN toStringList([9.123456789, 5.123, 1.12345, 0.123123]) $$) AS (toStringList agtype); tostringlist ------------------------------------------------- ["9.123456789", "5.123", "1.12345", "0.123123"] (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN toStringList([null]) $$) AS (toStringList agtype); tostringlist -------------- [null] (1 row) SELECT * FROM cypher('expr', $$ RETURN toStringList([true, false, true, true]) $$) AS (toStringList agtype); tostringlist -------------------------- [null, null, null, null] (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN toStringList([['a', b]]) $$) AS (toStringList agtype); ERROR: could not find rte for b LINE 2: RETURN toStringList([['a', b]]) ^ SELECT * FROM cypher('expr', $$ RETURN toStringList([test]) $$) AS (toStringList agtype); ERROR: could not find rte for test LINE 2: RETURN toStringList([test]) ^ -- -- reverse(string) -- SELECT * FROM cypher('expr', $$ RETURN reverse("gnirts a si siht") $$) AS (results agtype); results -------------------- "this is a string" (1 row) SELECT * FROM age_reverse('gnirts a si siht'); age_reverse -------------------- "this is a string" (1 row) SELECT * FROM age_reverse('gnirts a si siht'::text); age_reverse -------------------- "this is a string" (1 row) SELECT * FROM age_reverse('gnirts a si siht'::cstring); age_reverse -------------------- "this is a string" (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN reverse(null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM age_reverse(null); age_reverse ------------- (1 row) -- should return error SELECT * FROM age_reverse([4923, 'abc', 521, NULL, 487]); ERROR: syntax error at or near "[" LINE 1: SELECT * FROM age_reverse([4923, 'abc', 521, NULL, 487]); ^ -- Should return the reversed list SELECT * FROM cypher('expr', $$ RETURN reverse([4923, 'abc', 521, NULL, 487]) $$) AS (u agtype); u ------------------------------- [487, null, 521, "abc", 4923] (1 row) SELECT * FROM cypher('expr', $$ RETURN reverse([4923]) $$) AS (u agtype); u -------- [4923] (1 row) SELECT * FROM cypher('expr', $$ RETURN reverse([4923, 257]) $$) as (u agtype); u ------------- [257, 4923] (1 row) SELECT * FROM cypher('expr', $$ RETURN reverse([4923, 257, null]) $$) as (u agtype); u ------------------- [null, 257, 4923] (1 row) SELECT * FROM cypher('expr', $$ RETURN reverse([4923, 257, 'tea']) $$) as (u agtype); u -------------------- ["tea", 257, 4923] (1 row) SELECT * FROM cypher('expr', $$ RETURN reverse([[1, 4, 7], 4923, [1, 2, 3], 'abc', 521, NULL, 487, ['fgt', 7, 10]]) $$) as (u agtype); u --------------------------------------------------------------------- [["fgt", 7, 10], 487, null, 521, "abc", [1, 2, 3], 4923, [1, 4, 7]] (1 row) SELECT * FROM cypher('expr', $$ RETURN reverse([4923, 257, {test1: "key"}]) $$) as (u agtype); u ------------------------------- [{"test1": "key"}, 257, 4923] (1 row) SELECT * FROM cypher('expr', $$ RETURN reverse([4923, 257, {test2: [1, 2, 3]}]) $$) as (u agtype); u ----------------------------------- [{"test2": [1, 2, 3]}, 257, 4923] (1 row) SELECT * FROM cypher('expr', $$ CREATE ({test: [1, 2, 3]}) $$) as (u agtype); u --- (0 rows) SELECT * FROM cypher('expr', $$ MATCH (v) WHERE exists(v.test) RETURN reverse(v.test) $$) as (u agtype); u ----------- [3, 2, 1] (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN reverse(true) $$) AS (results agtype); ERROR: reverse() unsupported argument agtype 5 SELECT * FROM age_reverse(true); ERROR: reverse() unsupported argument type 16 SELECT * FROM cypher('expr', $$ RETURN reverse(3.14) $$) AS (results agtype); ERROR: reverse() unsupported argument agtype 4 SELECT * FROM age_reverse(3.14); ERROR: reverse() unsupported argument type 1700 SELECT * FROM cypher('expr', $$ RETURN reverse() $$) AS (results agtype); ERROR: function ag_catalog.age_reverse() does not exist LINE 2: RETURN reverse() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM age_reverse(); ERROR: function age_reverse() does not exist LINE 1: SELECT * FROM age_reverse(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ MATCH (v) RETURN reverse(v) $$) AS (results agtype); ERROR: reverse() unsupported argument agtype 6 SELECT * FROM cypher('expr', $$ RETURN reverse({}) $$) AS (results agtype); ERROR: reverse() unsupported argument agtype -- -- toUpper() and toLower() -- SELECT * FROM cypher('expr', $$ RETURN toUpper('to uppercase') $$) AS (toUpper agtype); toupper ---------------- "TO UPPERCASE" (1 row) SELECT * FROM cypher('expr', $$ RETURN toLower('TO LOWERCASE') $$) AS (toLower agtype); tolower ---------------- "to lowercase" (1 row) SELECT * FROM age_toupper('text'::text); age_toupper ------------- "TEXT" (1 row) SELECT * FROM age_toupper('cstring'::cstring); age_toupper ------------- "CSTRING" (1 row) SELECT * FROM age_tolower('TEXT'::text); age_tolower ------------- "text" (1 row) SELECT * FROM age_tolower('CSTRING'::cstring); age_tolower ------------- "cstring" (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN toUpper(null) $$) AS (toUpper agtype); toupper --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN toLower(null) $$) AS (toLower agtype); tolower --------- (1 row) SELECT * FROM age_toupper(null); age_toupper ------------- (1 row) SELECT * FROM age_tolower(null); age_tolower ------------- (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN toUpper(true) $$) AS (toUpper agtype); ERROR: toUpper() unsupported argument agtype 5 SELECT * FROM cypher('expr', $$ RETURN toUpper() $$) AS (toUpper agtype); ERROR: function ag_catalog.age_toupper() does not exist LINE 2: RETURN toUpper() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ RETURN toLower(true) $$) AS (toLower agtype); ERROR: toLower() unsupported argument agtype 5 SELECT * FROM cypher('expr', $$ RETURN toLower() $$) AS (toLower agtype); ERROR: function ag_catalog.age_tolower() does not exist LINE 2: RETURN toLower() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM age_toupper(); ERROR: function age_toupper() does not exist LINE 1: SELECT * FROM age_toupper(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM age_tolower(); ERROR: function age_tolower() does not exist LINE 1: SELECT * FROM age_tolower(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- -- lTrim(), rTrim(), trim() -- SELECT * FROM cypher('expr', $$ RETURN lTrim(" string ") $$) AS (results agtype); results ------------- "string " (1 row) SELECT * FROM cypher('expr', $$ RETURN rTrim(" string ") $$) AS (results agtype); results ------------ " string" (1 row) SELECT * FROM cypher('expr', $$ RETURN trim(" string ") $$) AS (results agtype); results ---------- "string" (1 row) SELECT * FROM age_ltrim(' string '); age_ltrim ------------- "string " (1 row) SELECT * FROM age_rtrim(' string '); age_rtrim ------------ " string" (1 row) SELECT * FROM age_trim(' string '); age_trim ---------- "string" (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN lTrim(null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN rTrim(null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN trim(null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM age_ltrim(null); age_ltrim ----------- (1 row) SELECT * FROM age_rtrim(null); age_rtrim ----------- (1 row) SELECT * FROM age_trim(null); age_trim ---------- (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN lTrim(true) $$) AS (results agtype); ERROR: lTrim() unsupported argument agtype 5 SELECT * FROM cypher('expr', $$ RETURN rTrim(true) $$) AS (results agtype); ERROR: rTrim() unsupported argument agtype 5 SELECT * FROM cypher('expr', $$ RETURN trim(true) $$) AS (results agtype); ERROR: trim() unsupported argument agtype 5 SELECT * FROM cypher('expr', $$ RETURN lTrim() $$) AS (results agtype); ERROR: function ag_catalog.age_ltrim() does not exist LINE 2: RETURN lTrim() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ RETURN rTrim() $$) AS (results agtype); ERROR: function ag_catalog.age_rtrim() does not exist LINE 2: RETURN rTrim() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ RETURN trim() $$) AS (results agtype); ERROR: function ag_catalog.age_trim() does not exist LINE 2: RETURN trim() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM age_ltrim(); ERROR: function age_ltrim() does not exist LINE 1: SELECT * FROM age_ltrim(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM age_rtrim(); ERROR: function age_rtrim() does not exist LINE 1: SELECT * FROM age_rtrim(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM age_trim(); ERROR: function age_trim() does not exist LINE 1: SELECT * FROM age_trim(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- -- left(), right(), & substring() -- left() SELECT * FROM cypher('expr', $$ RETURN left("123456789", 1) $$) AS (results agtype); results --------- "1" (1 row) SELECT * FROM cypher('expr', $$ RETURN left("123456789", 3) $$) AS (results agtype); results --------- "123" (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN left("123456789", 0) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN left(null, 1) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN left(null, null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM age_left(null, 1); age_left ---------- (1 row) SELECT * FROM age_left(null, null); age_left ---------- (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN left("123456789", null) $$) AS (results agtype); ERROR: left() length parameter cannot be null SELECT * FROM cypher('expr', $$ RETURN left("123456789", -1) $$) AS (results agtype); ERROR: left() negative values are not supported for length SELECT * FROM cypher('expr', $$ RETURN left() $$) AS (results agtype); ERROR: function ag_catalog.age_left() does not exist LINE 2: RETURN left() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM age_left('123456789', null); ERROR: left() length parameter cannot be null SELECT * FROM age_left('123456789', -1); ERROR: left() negative values are not supported for length SELECT * FROM age_left(); ERROR: function age_left() does not exist LINE 1: SELECT * FROM age_left(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. --right() SELECT * FROM cypher('expr', $$ RETURN right("123456789", 1) $$) AS (results agtype); results --------- "9" (1 row) SELECT * FROM cypher('expr', $$ RETURN right("123456789", 3) $$) AS (results agtype); results --------- "789" (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN right("123456789", 0) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN right(null, 1) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN right(null, null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM age_right(null, 1); age_right ----------- (1 row) SELECT * FROM age_right(null, null); age_right ----------- (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN right("123456789", null) $$) AS (results agtype); ERROR: right() length parameter cannot be null SELECT * FROM cypher('expr', $$ RETURN right("123456789", -1) $$) AS (results agtype); ERROR: right() negative values are not supported for length SELECT * FROM cypher('expr', $$ RETURN right() $$) AS (results agtype); ERROR: function ag_catalog.age_right() does not exist LINE 2: RETURN right() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM age_right('123456789', null); ERROR: right() length parameter cannot be null SELECT * FROM age_right('123456789', -1); ERROR: right() negative values are not supported for length SELECT * FROM age_right(); ERROR: function age_right() does not exist LINE 1: SELECT * FROM age_right(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- substring() SELECT * FROM cypher('expr', $$ RETURN substring("0123456789", 0, 1) $$) AS (results agtype); results --------- "0" (1 row) SELECT * FROM cypher('expr', $$ RETURN substring("0123456789", 1, 3) $$) AS (results agtype); results --------- "123" (1 row) SELECT * FROM cypher('expr', $$ RETURN substring("0123456789", 3) $$) AS (results agtype); results ----------- "3456789" (1 row) SELECT * FROM cypher('expr', $$ RETURN substring("0123456789", 0) $$) AS (results agtype); results -------------- "0123456789" (1 row) SELECT * FROM age_substring('0123456789', 3, 2); age_substring --------------- "34" (1 row) SELECT * FROM age_substring('0123456789', 1); age_substring --------------- "123456789" (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN substring(null, null, null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN substring(null, null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN substring(null, 1) $$) AS (results agtype); results --------- (1 row) SELECT * FROM age_substring(null, null, null); age_substring --------------- (1 row) SELECT * FROM age_substring(null, null); age_substring --------------- (1 row) SELECT * FROM age_substring(null, 1); age_substring --------------- (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN substring("123456789", null) $$) AS (results agtype); ERROR: substring() offset or length cannot be null SELECT * FROM cypher('expr', $$ RETURN substring("123456789", 0, -1) $$) AS (results agtype); ERROR: substring() negative values are not supported for offset or length SELECT * FROM cypher('expr', $$ RETURN substring("123456789", -1) $$) AS (results agtype); ERROR: substring() negative values are not supported for offset or length SELECT * FROM cypher('expr', $$ RETURN substring("123456789") $$) AS (results agtype); ERROR: substring() invalid number of arguments SELECT * FROM age_substring('123456789', null); ERROR: substring() offset or length cannot be null SELECT * FROM age_substring('123456789', 0, -1); ERROR: substring() negative values are not supported for offset or length SELECT * FROM age_substring('123456789', -1); ERROR: substring() negative values are not supported for offset or length SELECT * FROM age_substring(); ERROR: function age_substring() does not exist LINE 1: SELECT * FROM age_substring(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- -- split() -- SELECT * FROM cypher('expr', $$ RETURN split("a,b,c,d,e,f", ",") $$) AS (results agtype); results -------------------------------- ["a", "b", "c", "d", "e", "f"] (1 row) SELECT * FROM cypher('expr', $$ RETURN split("a,b,c,d,e,f", "") $$) AS (results agtype); results --------------------------------------------------------- ["a", ",", "b", ",", "c", ",", "d", ",", "e", ",", "f"] (1 row) SELECT * FROM cypher('expr', $$ RETURN split("a,b,c,d,e,f", " ") $$) AS (results agtype); results ----------------- ["a,b,c,d,e,f"] (1 row) SELECT * FROM cypher('expr', $$ RETURN split("a,b,cd e,f", " ") $$) AS (results agtype); results ----------------------- ["a,b,cd", "", "e,f"] (1 row) SELECT * FROM cypher('expr', $$ RETURN split("a,b,cd e,f", " ") $$) AS (results agtype); results ------------------- ["a,b,cd", "e,f"] (1 row) SELECT * FROM cypher('expr', $$ RETURN split("a,b,c,d,e,f", "c,") $$) AS (results agtype); results ------------------- ["a,b,", "d,e,f"] (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN split(null, null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN split("a,b,c,d,e,f", null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN split(null, ",") $$) AS (results agtype); results --------- (1 row) SELECT * FROM age_split(null, null); age_split ----------- (1 row) SELECT * FROM age_split('a,b,c,d,e,f', null); age_split ----------- (1 row) SELECT * FROM age_split(null, ','); age_split ----------- (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN split(123456789, ",") $$) AS (results agtype); ERROR: split() unsupported argument agtype 3 SELECT * FROM cypher('expr', $$ RETURN split("a,b,c,d,e,f", -1) $$) AS (results agtype); ERROR: split() unsupported argument agtype 3 SELECT * FROM cypher('expr', $$ RETURN split("a,b,c,d,e,f") $$) AS (results agtype); ERROR: split() invalid number of arguments SELECT * FROM cypher('expr', $$ RETURN split() $$) AS (results agtype); ERROR: function ag_catalog.age_split() does not exist LINE 2: RETURN split() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM age_split(123456789, ','); ERROR: split() unsupported argument type 23 SELECT * FROM age_split('a,b,c,d,e,f', -1); ERROR: split() unsupported argument type 23 SELECT * FROM age_split('a,b,c,d,e,f'); ERROR: split() invalid number of arguments SELECT * FROM age_split(); ERROR: function age_split() does not exist LINE 1: SELECT * FROM age_split(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- -- replace() -- SELECT * FROM cypher('expr', $$ RETURN replace("Hello", "lo", "p") $$) AS (results agtype); results --------- "Help" (1 row) SELECT * FROM cypher('expr', $$ RETURN replace("Hello", "hello", "Good bye") $$) AS (results agtype); results --------- "Hello" (1 row) SELECT * FROM cypher('expr', $$ RETURN replace("abcabcabc", "abc", "a") $$) AS (results agtype); results --------- "aaa" (1 row) SELECT * FROM cypher('expr', $$ RETURN replace("abcabcabc", "ab", "") $$) AS (results agtype); results --------- "ccc" (1 row) SELECT * FROM cypher('expr', $$ RETURN replace("ababab", "ab", "ab") $$) AS (results agtype); results ---------- "ababab" (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN replace(null, null, null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN replace("Hello", null, null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN replace("Hello", "", null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN replace("", "", "") $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN replace("Hello", "Hello", "") $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN replace("", "Hello", "Mellow") $$) AS (results agtype); results --------- (1 row) SELECT * FROM age_replace(null, null, null); age_replace ------------- (1 row) SELECT * FROM age_replace('Hello', null, null); age_replace ------------- (1 row) SELECT * FROM age_replace('Hello', '', null); age_replace ------------- (1 row) SELECT * FROM age_replace('', '', ''); age_replace ------------- (1 row) SELECT * FROM age_replace('Hello', 'Hello', ''); age_replace ------------- (1 row) SELECT * FROM age_replace('', 'Hello', 'Mellow'); age_replace ------------- (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN replace() $$) AS (results agtype); ERROR: function ag_catalog.age_replace() does not exist LINE 2: RETURN replace() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ RETURN replace("Hello") $$) AS (results agtype); ERROR: replace() invalid number of arguments SELECT * FROM cypher('expr', $$ RETURN replace("Hello", null) $$) AS (results agtype); ERROR: replace() invalid number of arguments SELECT * FROM cypher('expr', $$ RETURN replace("Hello", "e", 1) $$) AS (results agtype); ERROR: replace() unsupported argument agtype 3 SELECT * FROM cypher('expr', $$ RETURN replace("Hello", 1, "e") $$) AS (results agtype); ERROR: replace() unsupported argument agtype 3 SELECT * FROM age_replace(); ERROR: function age_replace() does not exist LINE 1: SELECT * FROM age_replace(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM age_replace(null); ERROR: replace() invalid number of arguments SELECT * FROM age_replace(null, null); ERROR: replace() invalid number of arguments SELECT * FROM age_replace('Hello', 'e', 1); ERROR: replace() unsupported argument type 23 SELECT * FROM age_replace('Hello', 1, 'E'); ERROR: replace() unsupported argument type 23 -- -- sin, cos, tan, cot -- SELECT sin = results FROM cypher('expr', $$ RETURN sin(3.1415) $$) AS (results agtype), sin(3.1415); ?column? ---------- t (1 row) SELECT cos = results FROM cypher('expr', $$ RETURN cos(3.1415) $$) AS (results agtype), cos(3.1415); ?column? ---------- t (1 row) SELECT tan = results FROM cypher('expr', $$ RETURN tan(3.1415) $$) AS (results agtype), tan(3.1415); ?column? ---------- t (1 row) SELECT cot = results FROM cypher('expr', $$ RETURN cot(3.1415) $$) AS (results agtype), cot(3.1415); ?column? ---------- t (1 row) SELECT sin = age_sin FROM sin(3.1415), age_sin(3.1415); ?column? ---------- t (1 row) SELECT cos = age_cos FROM cos(3.1415), age_cos(3.1415); ?column? ---------- t (1 row) SELECT tan = age_tan FROM tan(3.1415), age_tan(3.1415); ?column? ---------- t (1 row) SELECT cot = age_cot FROM cot(3.1415), age_cot(3.1415); ?column? ---------- t (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN sin(null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN cos(null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN tan(null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN cot(null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM age_sin(null); age_sin --------- (1 row) SELECT * FROM age_cos(null); age_cos --------- (1 row) SELECT * FROM age_tan(null); age_tan --------- (1 row) SELECT * FROM age_cot(null); age_cot --------- (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN sin("0") $$) AS (results agtype); ERROR: sin() unsupported argument agtype 1 SELECT * FROM cypher('expr', $$ RETURN cos("0") $$) AS (results agtype); ERROR: cos() unsupported argument agtype 1 SELECT * FROM cypher('expr', $$ RETURN tan("0") $$) AS (results agtype); ERROR: tan() unsupported argument agtype 1 SELECT * FROM cypher('expr', $$ RETURN cot("0") $$) AS (results agtype); ERROR: cot() unsupported argument agtype 1 SELECT * FROM cypher('expr', $$ RETURN sin() $$) AS (results agtype); ERROR: function ag_catalog.age_sin() does not exist LINE 2: RETURN sin() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ RETURN cos() $$) AS (results agtype); ERROR: function ag_catalog.age_cos() does not exist LINE 2: RETURN cos() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ RETURN tan() $$) AS (results agtype); ERROR: function ag_catalog.age_tan() does not exist LINE 2: RETURN tan() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ RETURN cot() $$) AS (results agtype); ERROR: function ag_catalog.age_cot() does not exist LINE 2: RETURN cot() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM age_sin('0'); ERROR: sin() unsupported argument type 25 SELECT * FROM age_cos('0'); ERROR: cos() unsupported argument type 25 SELECT * FROM age_tan('0'); ERROR: tan() unsupported argument type 25 SELECT * FROM age_cot('0'); ERROR: cot() unsupported argument type 25 SELECT * FROM age_sin(); ERROR: function age_sin() does not exist LINE 1: SELECT * FROM age_sin(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM age_cos(); ERROR: function age_cos() does not exist LINE 1: SELECT * FROM age_cos(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM age_tan(); ERROR: function age_tan() does not exist LINE 1: SELECT * FROM age_tan(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM age_cot(); ERROR: function age_cot() does not exist LINE 1: SELECT * FROM age_cot(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- -- Arc functions: asin, acos, atan, & atan2 -- SELECT * FROM cypher('expr', $$ RETURN asin(1)*2 $$) AS (results agtype); results ------------------ 3.14159265358979 (1 row) SELECT * FROM cypher('expr', $$ RETURN acos(0)*2 $$) AS (results agtype); results ------------------ 3.14159265358979 (1 row) SELECT * FROM cypher('expr', $$ RETURN atan(1)*4 $$) AS (results agtype); results ------------------ 3.14159265358979 (1 row) SELECT * FROM cypher('expr', $$ RETURN atan2(1, 1)*4 $$) AS (results agtype); results ------------------ 3.14159265358979 (1 row) SELECT * FROM asin(1), age_asin(1); asin | age_asin -----------------+----------------- 1.5707963267949 | 1.5707963267949 (1 row) SELECT * FROM acos(0), age_acos(0); acos | age_acos -----------------+----------------- 1.5707963267949 | 1.5707963267949 (1 row) SELECT * FROM atan(1), age_atan(1); atan | age_atan -------------------+------------------- 0.785398163397448 | 0.785398163397448 (1 row) SELECT * FROM atan2(1, 1), age_atan2(1, 1); atan2 | age_atan2 -------------------+------------------- 0.785398163397448 | 0.785398163397448 (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN asin(1.1) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN acos(1.1) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN asin(-1.1) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN acos(-1.1) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN asin(null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN acos(null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN atan(null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN atan2(null, null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN atan2(null, 1) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN atan2(1, null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM age_asin(null); age_asin ---------- (1 row) SELECT * FROM age_acos(null); age_acos ---------- (1 row) SELECT * FROM age_atan(null); age_atan ---------- (1 row) SELECT * FROM age_atan2(null, null); age_atan2 ----------- (1 row) SELECT * FROM age_atan2(1, null); age_atan2 ----------- (1 row) SELECT * FROM age_atan2(null, 1); age_atan2 ----------- (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN asin("0") $$) AS (results agtype); ERROR: asin() unsupported argument agtype 1 SELECT * FROM cypher('expr', $$ RETURN acos("0") $$) AS (results agtype); ERROR: acos() unsupported argument agtype 1 SELECT * FROM cypher('expr', $$ RETURN atan("0") $$) AS (results agtype); ERROR: atan() unsupported argument agtype 1 SELECT * FROM cypher('expr', $$ RETURN atan2("0", 1) $$) AS (results agtype); ERROR: atan2() unsupported argument agtype 1 SELECT * FROM cypher('expr', $$ RETURN atan2(0, "1") $$) AS (results agtype); ERROR: atan2() unsupported argument agtype 1 SELECT * FROM cypher('expr', $$ RETURN asin() $$) AS (results agtype); ERROR: function ag_catalog.age_asin() does not exist LINE 2: RETURN asin() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ RETURN acos() $$) AS (results agtype); ERROR: function ag_catalog.age_acos() does not exist LINE 2: RETURN acos() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ RETURN atan() $$) AS (results agtype); ERROR: function ag_catalog.age_atan() does not exist LINE 2: RETURN atan() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ RETURN atan2() $$) AS (results agtype); ERROR: function ag_catalog.age_atan2() does not exist LINE 2: RETURN atan2() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ RETURN atan2(null) $$) AS (results agtype); ERROR: atan2() invalid number of arguments SELECT * FROM age_asin('0'); ERROR: asin() unsupported argument type 25 SELECT * FROM age_acos('0'); ERROR: acos() unsupported argument type 25 SELECT * FROM age_atan('0'); ERROR: atan() unsupported argument type 25 SELECT * FROM age_atan2('0', 1); ERROR: atan2() unsupported argument type 25 SELECT * FROM age_atan2(1, '0'); ERROR: atan2() unsupported argument type 25 SELECT * FROM age_asin(); ERROR: function age_asin() does not exist LINE 1: SELECT * FROM age_asin(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM age_acos(); ERROR: function age_acos() does not exist LINE 1: SELECT * FROM age_acos(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM age_atan(); ERROR: function age_atan() does not exist LINE 1: SELECT * FROM age_atan(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM age_atan2(); ERROR: function age_atan2() does not exist LINE 1: SELECT * FROM age_atan2(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM age_atan2(1); ERROR: atan2() invalid number of arguments -- -- pi -- SELECT * FROM cypher('expr', $$ RETURN pi() $$) AS (results agtype); results ------------------ 3.14159265358979 (1 row) SELECT * FROM cypher('expr', $$ RETURN sin(pi()) $$) AS (results agtype); results ---------------------- 1.22464679914735e-16 (1 row) SELECT * FROM cypher('expr', $$ RETURN sin(pi()/4) $$) AS (results agtype); results ------------------- 0.707106781186547 (1 row) SELECT * FROM cypher('expr', $$ RETURN cos(pi()) $$) AS (results agtype); results --------- -1.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN cos(pi()/2) $$) AS (results agtype); results ---------------------- 6.12323399573677e-17 (1 row) SELECT * FROM cypher('expr', $$ RETURN sin(pi()/2) $$) AS (results agtype); results --------- 1.0 (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN pi(null) $$) AS (results agtype); ERROR: function ag_catalog.age_pi(agtype) does not exist LINE 2: RETURN pi(null) ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ RETURN pi(1) $$) AS (results agtype); ERROR: function ag_catalog.age_pi(agtype) does not exist LINE 2: RETURN pi(1) ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- -- radians() & degrees() -- SELECT * FROM cypher('expr', $$ RETURN radians(0) $$) AS (results agtype); results --------- 0.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN degrees(0) $$) AS (results agtype); results --------- 0.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN radians(360), 2*pi() $$) AS (results agtype, Two_PI agtype); results | two_pi ------------------+------------------ 6.28318530717959 | 6.28318530717959 (1 row) SELECT * FROM cypher('expr', $$ RETURN degrees(2*pi()) $$) AS (results agtype); results --------- 360.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN radians(180), pi() $$) AS (results agtype, PI agtype); results | pi ------------------+------------------ 3.14159265358979 | 3.14159265358979 (1 row) SELECT * FROM cypher('expr', $$ RETURN degrees(pi()) $$) AS (results agtype); results --------- 180.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN radians(90), pi()/2 $$) AS (results agtype, Half_PI agtype); results | half_pi -----------------+----------------- 1.5707963267949 | 1.5707963267949 (1 row) SELECT * FROM cypher('expr', $$ RETURN degrees(pi()/2) $$) AS (results agtype); results --------- 90.0 (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN radians(null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN degrees(null) $$) AS (results agtype); results --------- (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN radians() $$) AS (results agtype); ERROR: function ag_catalog.age_radians() does not exist LINE 2: RETURN radians() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ RETURN degrees() $$) AS (results agtype); ERROR: function ag_catalog.age_degrees() does not exist LINE 2: RETURN degrees() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ RETURN radians("1") $$) AS (results agtype); ERROR: radians() unsupported argument agtype 1 SELECT * FROM cypher('expr', $$ RETURN degrees("1") $$) AS (results agtype); ERROR: degrees() unsupported argument agtype 1 -- -- abs(), ceil(), floor(), & round() -- SELECT * FROM cypher('expr', $$ RETURN abs(0) $$) AS (results agtype); results --------- 0 (1 row) SELECT * FROM cypher('expr', $$ RETURN abs(10) $$) AS (results agtype); results --------- 10 (1 row) SELECT * FROM cypher('expr', $$ RETURN abs(-10) $$) AS (results agtype); results --------- 10 (1 row) SELECT * FROM cypher('expr', $$ RETURN ceil(0) $$) AS (results agtype); results --------- 0.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN ceil(1) $$) AS (results agtype); results --------- 1.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN ceil(-1) $$) AS (results agtype); results --------- -1.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN ceil(1.01) $$) AS (results agtype); results --------- 2.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN ceil(-1.01) $$) AS (results agtype); results --------- -1.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN floor(0) $$) AS (results agtype); results --------- 0.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN floor(1) $$) AS (results agtype); results --------- 1.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN floor(-1) $$) AS (results agtype); results --------- -1.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN floor(1.01) $$) AS (results agtype); results --------- 1.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN floor(-1.01) $$) AS (results agtype); results --------- -2.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN round(0) $$) AS (results agtype); results --------- 0.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN round(4.49999999) $$) AS (results agtype); results --------- 4.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN round(4.5) $$) AS (results agtype); results --------- 5.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN round(-4.49999999) $$) AS (results agtype); results --------- -4.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN round(-4.5) $$) AS (results agtype); results --------- -5.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN round(7.4163, 3) $$) AS (results agtype); results --------- 7.416 (1 row) SELECT * FROM cypher('expr', $$ RETURN round(7.416343479, 8) $$) AS (results agtype); results ------------ 7.41634348 (1 row) SELECT * FROM cypher('expr', $$ RETURN round(7.416343479, NULL) $$) AS (results agtype); results --------- 7.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN round(NULL, 7) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN round(7, 2) $$) AS (results agtype); results --------- 7.0 (1 row) SELECT * FROM cypher('expr', $$ RETURN round(7.4342, 2.1123) $$) AS (results agtype); results --------- 7.43 (1 row) SELECT * FROM cypher('expr', $$ RETURN round(NULL, NULL) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN sign(10) $$) AS (results agtype); results --------- 1 (1 row) SELECT * FROM cypher('expr', $$ RETURN sign(-10) $$) AS (results agtype); results --------- -1 (1 row) SELECT * FROM cypher('expr', $$ RETURN sign(0) $$) AS (results agtype); results --------- 0 (1 row) -- should return null SELECT * FROM cypher('expr', $$ RETURN abs(null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN ceil(null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN floor(null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN round(null) $$) AS (results agtype); results --------- (1 row) SELECT * FROM cypher('expr', $$ RETURN sign(null) $$) AS (results agtype); results --------- (1 row) -- should fail SELECT * FROM cypher('expr', $$ RETURN abs() $$) AS (results agtype); ERROR: function ag_catalog.age_abs() does not exist LINE 2: RETURN abs() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ RETURN ceil() $$) AS (results agtype); ERROR: function ag_catalog.age_ceil() does not exist LINE 2: RETURN ceil() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ RETURN floor() $$) AS (results agtype); ERROR: function ag_catalog.age_floor() does not exist LINE 2: RETURN floor() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ RETURN round() $$) AS (results agtype); ERROR: function ag_catalog.age_round() does not exist LINE 2: RETURN round() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ RETURN sign() $$) AS (results agtype); ERROR: function ag_catalog.age_sign() does not exist LINE 2: RETURN sign() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ RETURN abs("1") $$) AS (results agtype); ERROR: abs() unsupported argument agtype 1 SELECT * FROM cypher('expr', $$ RETURN ceil("1") $$) AS (results agtype); ERROR: ceil() unsupported argument agtype 1 SELECT * FROM cypher('expr', $$ RETURN floor("1") $$) AS (results agtype); ERROR: floor() unsupported argument agtype 1 SELECT * FROM cypher('expr', $$ RETURN round("1") $$) AS (results agtype); ERROR: round() unsupported argument agtype 1 SELECT * FROM cypher('expr', $$ RETURN sign("1") $$) AS (results agtype); ERROR: sign() unsupported argument agtype 1 -- -- rand() -- -- should select 0 rows as rand() is in [0,1) SELECT * FROM cypher('expr', $$ RETURN rand() $$) AS (result agtype) WHERE result >= 1 or result < 0; result -------- (0 rows) -- should select 0 rows as rand() should not return the same value SELECT * FROM cypher('expr', $$ RETURN rand() $$) AS cypher_1(result agtype), cypher('expr', $$ RETURN rand() $$) AS cypher_2(result agtype) WHERE cypher_1.result = cypher_2.result; result | result --------+-------- (0 rows) -- -- log (ln) and log10 -- SELECT * from cypher('expr', $$ RETURN log(2.718281828459045) $$) as (result agtype); result -------- 1.0 (1 row) SELECT * from cypher('expr', $$ RETURN log10(10) $$) as (result agtype); result -------- 1.0 (1 row) -- should return null SELECT * from cypher('expr', $$ RETURN log(null) $$) as (result agtype); result -------- (1 row) SELECT * from cypher('expr', $$ RETURN log10(null) $$) as (result agtype); result -------- (1 row) SELECT * from cypher('expr', $$ RETURN log(0) $$) as (result agtype); result -------- (1 row) SELECT * from cypher('expr', $$ RETURN log10(0) $$) as (result agtype); result -------- (1 row) SELECT * from cypher('expr', $$ RETURN log(-1) $$) as (result agtype); result -------- (1 row) SELECT * from cypher('expr', $$ RETURN log10(-1) $$) as (result agtype); result -------- (1 row) -- should fail SELECT * from cypher('expr', $$ RETURN log() $$) as (result agtype); ERROR: function ag_catalog.age_log() does not exist LINE 2: RETURN log() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * from cypher('expr', $$ RETURN log10() $$) as (result agtype); ERROR: function ag_catalog.age_log10() does not exist LINE 2: RETURN log10() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- -- e() -- SELECT * from cypher('expr', $$ RETURN e() $$) as (result agtype); result ------------------ 2.71828182845905 (1 row) SELECT * from cypher('expr', $$ RETURN log(e()) $$) as (result agtype); result -------- 1.0 (1 row) -- -- exp() aka e^x -- SELECT * from cypher('expr', $$ RETURN exp(1) $$) as (result agtype); result ------------------ 2.71828182845905 (1 row) SELECT * from cypher('expr', $$ RETURN exp(0) $$) as (result agtype); result -------- 1.0 (1 row) -- should return null SELECT * from cypher('expr', $$ RETURN exp(null) $$) as (result agtype); result -------- (1 row) -- should fail SELECT * from cypher('expr', $$ RETURN exp() $$) as (result agtype); ERROR: function ag_catalog.age_exp() does not exist LINE 2: RETURN exp() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * from cypher('expr', $$ RETURN exp("1") $$) as (result agtype); ERROR: exp() unsupported argument agtype 1 -- -- sqrt() -- SELECT * from cypher('expr', $$ RETURN sqrt(25) $$) as (result agtype); result -------- 5.0 (1 row) SELECT * from cypher('expr', $$ RETURN sqrt(1) $$) as (result agtype); result -------- 1.0 (1 row) SELECT * from cypher('expr', $$ RETURN sqrt(0) $$) as (result agtype); result -------- 0.0 (1 row) -- should return null SELECT * from cypher('expr', $$ RETURN sqrt(-1) $$) as (result agtype); result -------- (1 row) SELECT * from cypher('expr', $$ RETURN sqrt(null) $$) as (result agtype); result -------- (1 row) -- should fail SELECT * from cypher('expr', $$ RETURN sqrt() $$) as (result agtype); ERROR: function ag_catalog.age_sqrt() does not exist LINE 2: RETURN sqrt() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * from cypher('expr', $$ RETURN sqrt("1") $$) as (result agtype); ERROR: sqrt() unsupported argument agtype 1 -- -- user defined function expressions - using pg functions for these tests -- SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt(25::pg_float8) $$) as (result agtype); result -------- 5.0 (1 row) SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt("25"::pg_float8) $$) as (result agtype); result -------- 5.0 (1 row) SELECT * from cypher('expr', $$ RETURN ag_catalog.age_sqrt(25) $$) as (result agtype); result -------- 5.0 (1 row) -- should return null SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt(null::pg_float8) $$) as (result agtype); result -------- (1 row) -- should fail SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt() $$) as (result agtype); ERROR: function pg_catalog.sqrt() does not exist LINE 2: RETURN pg_catalog.sqrt() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt(-1::pg_float8) $$) as (result agtype); ERROR: cannot take square root of a negative number SELECT * from cypher('expr', $$ RETURN something.pg_catalog.sqrt("1"::pg_float8) $$) as (result agtype); ERROR: invalid indirection syntax LINE 2: RETURN something.pg_catalog.sqrt("1"::pg_float8) ^ -- should fail do to schema but using a reserved_keyword SELECT * from cypher('expr', $$ RETURN distinct.age_sqrt(25) $$) as (result agtype); ERROR: schema "distinct" does not exist LINE 2: RETURN distinct.age_sqrt(25) ^ SELECT * from cypher('expr', $$ RETURN contains.age_sqrt(25) $$) as (result agtype); ERROR: schema "contains" does not exist LINE 2: RETURN contains.age_sqrt(25) ^ -- -- aggregate functions avg(), sum(), count(), & count(*) -- SELECT create_graph('UCSC'); NOTICE: graph "UCSC" has been created create_graph -------------- (1 row) SELECT * FROM cypher('UCSC', $$CREATE (:students {name: "Jack", gpa: 3.0, age: 21, zip: 94110})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('UCSC', $$CREATE (:students {name: "Jill", gpa: 3.5, age: 27, zip: 95060})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('UCSC', $$CREATE (:students {name: "Jim", gpa: 3.75, age: 32, zip: 96062})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('UCSC', $$CREATE (:students {name: "Rick", gpa: 2.5, age: 24, zip: "95060"})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('UCSC', $$CREATE (:students {name: "Ann", gpa: 3.8::numeric, age: 23})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('UCSC', $$CREATE (:students {name: "Derek", gpa: 4.0, age: 19, zip: 90210})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('UCSC', $$CREATE (:students {name: "Jessica", gpa: 3.9::numeric, age: 20})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN (u) $$) AS (vertex agtype); vertex ----------------------------------------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "students", "properties": {"age": 21, "gpa": 3.0, "zip": 94110, "name": "Jack"}}::vertex {"id": 844424930131970, "label": "students", "properties": {"age": 27, "gpa": 3.5, "zip": 95060, "name": "Jill"}}::vertex {"id": 844424930131971, "label": "students", "properties": {"age": 32, "gpa": 3.75, "zip": 96062, "name": "Jim"}}::vertex {"id": 844424930131972, "label": "students", "properties": {"age": 24, "gpa": 2.5, "zip": "95060", "name": "Rick"}}::vertex {"id": 844424930131973, "label": "students", "properties": {"age": 23, "gpa": 3.8::numeric, "name": "Ann"}}::vertex {"id": 844424930131974, "label": "students", "properties": {"age": 19, "gpa": 4.0, "zip": 90210, "name": "Derek"}}::vertex {"id": 844424930131975, "label": "students", "properties": {"age": 20, "gpa": 3.9::numeric, "name": "Jessica"}}::vertex (7 rows) SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN avg(u.gpa), sum(u.gpa), sum(u.gpa)/count(u.gpa), count(u.gpa), count(*) $$) AS (avg agtype, sum agtype, sum_divided_by_count agtype, count agtype, count_star agtype); avg | sum | sum_divided_by_count | count | count_star ------------------+----------------+-----------------------------+-------+------------ 3.49285714285714 | 24.45::numeric | 3.4928571428571429::numeric | 7 | 7 (1 row) -- add in 2 null gpa records SELECT * FROM cypher('UCSC', $$CREATE (:students {name: "Dave", age: 24})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('UCSC', $$CREATE (:students {name: "Mike", age: 18})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN (u) $$) AS (vertex agtype); vertex ----------------------------------------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "students", "properties": {"age": 21, "gpa": 3.0, "zip": 94110, "name": "Jack"}}::vertex {"id": 844424930131970, "label": "students", "properties": {"age": 27, "gpa": 3.5, "zip": 95060, "name": "Jill"}}::vertex {"id": 844424930131971, "label": "students", "properties": {"age": 32, "gpa": 3.75, "zip": 96062, "name": "Jim"}}::vertex {"id": 844424930131972, "label": "students", "properties": {"age": 24, "gpa": 2.5, "zip": "95060", "name": "Rick"}}::vertex {"id": 844424930131973, "label": "students", "properties": {"age": 23, "gpa": 3.8::numeric, "name": "Ann"}}::vertex {"id": 844424930131974, "label": "students", "properties": {"age": 19, "gpa": 4.0, "zip": 90210, "name": "Derek"}}::vertex {"id": 844424930131975, "label": "students", "properties": {"age": 20, "gpa": 3.9::numeric, "name": "Jessica"}}::vertex {"id": 844424930131976, "label": "students", "properties": {"age": 24, "name": "Dave"}}::vertex {"id": 844424930131977, "label": "students", "properties": {"age": 18, "name": "Mike"}}::vertex (9 rows) SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN avg(u.gpa), sum(u.gpa), sum(u.gpa)/count(u.gpa), count(u.gpa), count(*) $$) AS (avg agtype, sum agtype, sum_divided_by_count agtype, count agtype, count_star agtype); avg | sum | sum_divided_by_count | count | count_star ------------------+----------------+-----------------------------+-------+------------ 3.49285714285714 | 24.45::numeric | 3.4928571428571429::numeric | 7 | 9 (1 row) -- should return null SELECT * FROM cypher('UCSC', $$ RETURN avg(NULL) $$) AS (avg agtype); avg ----- (1 row) SELECT * FROM cypher('UCSC', $$ RETURN sum(NULL) $$) AS (sum agtype); sum ----- (1 row) -- should return 0 SELECT * FROM cypher('UCSC', $$ RETURN count(NULL) $$) AS (count agtype); count ------- 0 (1 row) -- should fail SELECT * FROM cypher('UCSC', $$ RETURN avg() $$) AS (avg agtype); ERROR: function ag_catalog.age_avg() does not exist LINE 1: SELECT * FROM cypher('UCSC', $$ RETURN avg() $$) AS (avg agt... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('UCSC', $$ RETURN sum() $$) AS (sum agtype); ERROR: function ag_catalog.age_sum() does not exist LINE 1: SELECT * FROM cypher('UCSC', $$ RETURN sum() $$) AS (sum agt... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('UCSC', $$ RETURN count() $$) AS (count agtype); ERROR: pg_catalog.count(*) must be used to call a parameterless aggregate function LINE 1: SELECT * FROM cypher('UCSC', $$ RETURN count() $$) AS (count... ^ -- -- aggregate functions min() & max() -- SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN min(u.gpa), max(u.gpa), count(u.gpa), count(*) $$) AS (min agtype, max agtype, count agtype, count_star agtype); min | max | count | count_star -----+-----+-------+------------ 2.5 | 4.0 | 7 | 9 (1 row) SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN min(u.gpa), max(u.gpa), count(u.gpa), count(*) $$) AS (min agtype, max agtype, count agtype, count_star agtype); min | max | count | count_star -----+-----+-------+------------ 2.5 | 4.0 | 7 | 9 (1 row) SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN min(u.name), max(u.name), count(u.name), count(*) $$) AS (min agtype, max agtype, count agtype, count_star agtype); min | max | count | count_star -------+--------+-------+------------ "Ann" | "Rick" | 9 | 9 (1 row) -- check that min() & max() can work against mixed types SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN min(u.zip), max(u.zip), count(u.zip), count(*) $$) AS (min agtype, max agtype, count agtype, count_star agtype); min | max | count | count_star ---------+-------+-------+------------ "95060" | 96062 | 5 | 9 (1 row) CREATE TABLE min_max_tbl (oid oid); insert into min_max_tbl VALUES (16), (17188), (1000), (869); SELECT age_min(oid::int), age_max(oid::int) FROM min_max_tbl; age_min | age_max ---------+--------- 16 | 17188 (1 row) SELECT age_min(oid::int::float), age_max(oid::int::float) FROM min_max_tbl; age_min | age_max ---------+--------- 16.0 | 17188.0 (1 row) SELECT age_min(oid::int::float::numeric), age_max(oid::int::float::numeric) FROM min_max_tbl; age_min | age_max -------------+---------------- 16::numeric | 17188::numeric (1 row) SELECT age_min(oid::text), age_max(oid::text) FROM min_max_tbl; age_min | age_max ---------+--------- "1000" | "869" (1 row) DROP TABLE min_max_tbl; -- should return null SELECT * FROM cypher('UCSC', $$ RETURN min(NULL) $$) AS (min agtype); min ----- (1 row) SELECT * FROM cypher('UCSC', $$ RETURN max(NULL) $$) AS (max agtype); max ----- (1 row) SELECT age_min(NULL); age_min --------- (1 row) SELECT age_min(agtype_in('null')); age_min --------- (1 row) SELECT age_max(NULL); age_max --------- (1 row) SELECT age_max(agtype_in('null')); age_max --------- (1 row) -- should fail SELECT * FROM cypher('UCSC', $$ RETURN min() $$) AS (min agtype); ERROR: function ag_catalog.age_min() does not exist LINE 1: SELECT * FROM cypher('UCSC', $$ RETURN min() $$) AS (min agt... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('UCSC', $$ RETURN max() $$) AS (max agtype); ERROR: function ag_catalog.age_max() does not exist LINE 1: SELECT * FROM cypher('UCSC', $$ RETURN max() $$) AS (max agt... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT age_min(); ERROR: function age_min() does not exist LINE 1: SELECT age_min(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT age_min(); ERROR: function age_min() does not exist LINE 1: SELECT age_min(); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- -- aggregate functions stDev() & stDevP() -- SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN stDev(u.gpa), stDevP(u.gpa) $$) AS (stDev agtype, stDevP agtype); stdev | stdevp -------------------+------------------- 0.549566929066706 | 0.508800109100232 (1 row) -- should return 0 SELECT * FROM cypher('UCSC', $$ RETURN stDev(NULL) $$) AS (stDev agtype); stdev ------- 0.0 (1 row) SELECT * FROM cypher('UCSC', $$ RETURN stDevP(NULL) $$) AS (stDevP agtype); stdevp -------- 0.0 (1 row) -- should fail SELECT * FROM cypher('UCSC', $$ RETURN stDev() $$) AS (stDev agtype); ERROR: function ag_catalog.age_stdev() does not exist LINE 1: SELECT * FROM cypher('UCSC', $$ RETURN stDev() $$) AS (stDev... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('UCSC', $$ RETURN stDevP() $$) AS (stDevP agtype); ERROR: function ag_catalog.age_stdevp() does not exist LINE 1: SELECT * FROM cypher('UCSC', $$ RETURN stDevP() $$) AS (stDe... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- -- aggregate functions percentileCont() & percentileDisc() -- SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN percentileCont(u.gpa, .55), percentileDisc(u.gpa, .55), percentileCont(u.gpa, .9), percentileDisc(u.gpa, .9) $$) AS (percentileCont1 agtype, percentileDisc1 agtype, percentileCont2 agtype, percentileDisc2 agtype); percentilecont1 | percentiledisc1 | percentilecont2 | percentiledisc2 -----------------+-----------------+-----------------+----------------- 3.765 | 3.75 | 3.94 | 4.0 (1 row) SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN percentileCont(u.gpa, .55) $$) AS (percentileCont agtype); percentilecont ---------------- 3.765 (1 row) SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN percentileDisc(u.gpa, .55) $$) AS (percentileDisc agtype); percentiledisc ---------------- 3.75 (1 row) -- should return null SELECT * FROM cypher('UCSC', $$ RETURN percentileCont(NULL, .5) $$) AS (percentileCont agtype); percentilecont ---------------- (1 row) SELECT * FROM cypher('UCSC', $$ RETURN percentileDisc(NULL, .5) $$) AS (percentileDisc agtype); percentiledisc ---------------- (1 row) -- should fail SELECT * FROM cypher('UCSC', $$ RETURN percentileCont(.5, NULL) $$) AS (percentileCont agtype); ERROR: percentile value NULL is not a valid numeric value SELECT * FROM cypher('UCSC', $$ RETURN percentileDisc(.5, NULL) $$) AS (percentileDisc agtype); ERROR: percentile value NULL is not a valid numeric value -- -- aggregate function collect() -- SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN collect(u.name), collect(u.age), collect(u.gpa), collect(u.zip) $$) AS (name agtype, age agtype, gqa agtype, zip agtype); name | age | gqa | zip ----------------------------------------------------------------------------+--------------------------------------+--------------------------------------------------------+--------------------------------------- ["Jack", "Jill", "Jim", "Rick", "Ann", "Derek", "Jessica", "Dave", "Mike"] | [21, 27, 32, 24, 23, 19, 20, 24, 18] | [3.0, 3.5, 3.75, 2.5, 3.8::numeric, 4.0, 3.9::numeric] | [94110, 95060, 96062, "95060", 90210] (1 row) SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN collect(u.gpa), collect(u.gpa) $$) AS (gpa1 agtype, gpa2 agtype); gpa1 | gpa2 --------------------------------------------------------+-------------------------------------------------------- [3.0, 3.5, 3.75, 2.5, 3.8::numeric, 4.0, 3.9::numeric] | [3.0, 3.5, 3.75, 2.5, 3.8::numeric, 4.0, 3.9::numeric] (1 row) SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN collect(u.zip), collect(u.zip) $$) AS (zip1 agtype, zip2 agtype); zip1 | zip2 ---------------------------------------+--------------------------------------- [94110, 95060, 96062, "95060", 90210] | [94110, 95060, 96062, "95060", 90210] (1 row) SELECT * FROM cypher('UCSC', $$ RETURN collect(5) $$) AS (result agtype); result -------- [5] (1 row) -- should return an empty array SELECT * FROM cypher('UCSC', $$ RETURN collect(NULL) $$) AS (empty agtype); empty ------- [] (1 row) SELECT * FROM cypher('UCSC', $$ MATCH (u) WHERE u.name =~ "doesn't exist" RETURN collect(u.name) $$) AS (name agtype); name ------ [] (1 row) -- should fail SELECT * FROM cypher('UCSC', $$ RETURN collect() $$) AS (collect agtype); ERROR: function ag_catalog.age_collect() does not exist LINE 1: SELECT * FROM cypher('UCSC', $$ RETURN collect() $$) AS (col... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- test DISTINCT inside aggregate functions SELECT * FROM cypher('UCSC', $$CREATE (:students {name: "Sven", gpa: 3.2, age: 27, zip: 94110})$$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN (u) $$) AS (vertex agtype); vertex ----------------------------------------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "students", "properties": {"age": 21, "gpa": 3.0, "zip": 94110, "name": "Jack"}}::vertex {"id": 844424930131970, "label": "students", "properties": {"age": 27, "gpa": 3.5, "zip": 95060, "name": "Jill"}}::vertex {"id": 844424930131971, "label": "students", "properties": {"age": 32, "gpa": 3.75, "zip": 96062, "name": "Jim"}}::vertex {"id": 844424930131972, "label": "students", "properties": {"age": 24, "gpa": 2.5, "zip": "95060", "name": "Rick"}}::vertex {"id": 844424930131973, "label": "students", "properties": {"age": 23, "gpa": 3.8::numeric, "name": "Ann"}}::vertex {"id": 844424930131974, "label": "students", "properties": {"age": 19, "gpa": 4.0, "zip": 90210, "name": "Derek"}}::vertex {"id": 844424930131975, "label": "students", "properties": {"age": 20, "gpa": 3.9::numeric, "name": "Jessica"}}::vertex {"id": 844424930131976, "label": "students", "properties": {"age": 24, "name": "Dave"}}::vertex {"id": 844424930131977, "label": "students", "properties": {"age": 18, "name": "Mike"}}::vertex {"id": 844424930131978, "label": "students", "properties": {"age": 27, "gpa": 3.2, "zip": 94110, "name": "Sven"}}::vertex (10 rows) SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN count(u.zip), count(DISTINCT u.zip) $$) AS (zip agtype, distinct_zip agtype); zip | distinct_zip -----+-------------- 6 | 5 (1 row) SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN count(u.age), count(DISTINCT u.age) $$) AS (age agtype, distinct_age agtype); age | distinct_age -----+-------------- 10 | 8 (1 row) -- test AUTO GROUP BY for aggregate functions SELECT create_graph('group_by'); NOTICE: graph "group_by" has been created create_graph -------------- (1 row) SELECT * FROM cypher('group_by', $$CREATE (:row {i: 1, j: 2, k:3})$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('group_by', $$CREATE (:row {i: 1, j: 2, k:4})$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('group_by', $$CREATE (:row {i: 1, j: 3, k:5})$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('group_by', $$CREATE (:row {i: 2, j: 3, k:6})$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('group_by', $$MATCH (u:row) RETURN u.i, u.j, u.k$$) AS (i agtype, j agtype, k agtype); i | j | k ---+---+--- 1 | 2 | 3 1 | 2 | 4 1 | 3 | 5 2 | 3 | 6 (4 rows) SELECT * FROM cypher('group_by', $$MATCH (u:row) RETURN u.i, u.j, sum(u.k)$$) AS (i agtype, j agtype, sumk agtype); i | j | sumk ---+---+------ 1 | 2 | 7 2 | 3 | 6 1 | 3 | 5 (3 rows) SELECT * FROM cypher('group_by', $$CREATE (:L {a: 1, b: 2, c:3})$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('group_by', $$CREATE (:L {a: 2, b: 3, c:1})$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('group_by', $$CREATE (:L {a: 3, b: 1, c:2})$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('group_by', $$MATCH (x:L) RETURN x.a, x.b, x.c, x.a + count(*) + x.b + count(*) + x.c$$) AS (a agtype, b agtype, c agtype, result agtype); a | b | c | result ---+---+---+-------- 3 | 1 | 2 | 8 2 | 3 | 1 | 8 1 | 2 | 3 | 8 (3 rows) SELECT * FROM cypher('group_by', $$MATCH (x:L) RETURN x.a + x.b + x.c, x.a + x.b + x.c + count(*) + count(*) $$) AS (a_b_c agtype, result agtype); a_b_c | result -------+-------- 6 | 12 (1 row) -- with WITH clause SELECT * FROM cypher('group_by', $$MATCH(x:L) WITH x, count(x) AS c RETURN x.a + x.b + x.c + c$$) AS (result agtype); result -------- 7 7 7 (3 rows) SELECT * FROM cypher('group_by', $$MATCH(x:L) WITH x, count(x) AS c RETURN x.a + x.b + x.c + c + c$$) AS (result agtype); result -------- 8 8 8 (3 rows) SELECT * FROM cypher('group_by', $$MATCH(x:L) WITH x.a + x.b + x.c AS v, count(x) as c RETURN v + c + c $$) AS (result agtype); result -------- 12 (1 row) -- should fail SELECT * FROM cypher('group_by', $$MATCH (x:L) RETURN x.a, x.a + count(*) + x.b + count(*) + x.c$$) AS (a agtype, result agtype); ERROR: "x" must be either part of an explicitly listed key or used inside an aggregate function LINE 1: ...p_by', $$MATCH (x:L) RETURN x.a, x.a + count(*) + x.b + coun... ^ SELECT * FROM cypher('group_by', $$MATCH (x:L) RETURN x.a + count(*) + x.b + count(*) + x.c$$) AS (result agtype); ERROR: "x" must be either part of an explicitly listed key or used inside an aggregate function LINE 1: ...CT * FROM cypher('group_by', $$MATCH (x:L) RETURN x.a + coun... ^ --ORDER BY SELECT create_graph('order_by'); NOTICE: graph "order_by" has been created create_graph -------------- (1 row) SELECT * FROM cypher('order_by', $$CREATE ()$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('order_by', $$CREATE ({i: '1'})$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('order_by', $$CREATE ({i: 1})$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('order_by', $$CREATE ({i: 1.0})$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('order_by', $$CREATE ({i: 1::numeric})$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('order_by', $$CREATE ({i: true})$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('order_by', $$CREATE ({i: false})$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('order_by', $$CREATE ({i: {key: 'value'}})$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('order_by', $$CREATE ({i: [1]})$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('order_by', $$ MATCH (u) RETURN u.i ORDER BY u.i $$) AS (i agtype); i ------------------ {"key": "value"} [1] "1" false true 1::numeric 1 1.0 (9 rows) SELECT * FROM cypher('order_by', $$ MATCH (u) RETURN u.i ORDER BY u.i DESC $$) AS (i agtype); i ------------------ 1 1.0 1::numeric true false "1" [1] {"key": "value"} (9 rows) --CASE SELECT create_graph('case_statement'); NOTICE: graph "case_statement" has been created create_graph -------------- (1 row) SELECT * FROM cypher('case_statement', $$CREATE ({id: 1, i: 1, j: null})-[:connected_to {id: 1, k:0}]->({id: 2, i: 'a', j: 'b'})$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('case_statement', $$CREATE ({id: 3, i: 0, j: 1})-[:connected_to {id: 2, k:1}]->({id: 4, i: true, j: false})$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('case_statement', $$CREATE ({id: 5, i: [], j: [0,1,2]})$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('case_statement', $$CREATE ({id: 6, i: {}, j: {i:1}})$$) AS (result agtype); result -------- (0 rows) --standalone case & edge cases --base case SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN true THEN true END) $$) as (a agtype); a ------ true (1 row) --should return 1 empty row SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN false THEN true END) $$) as (a agtype); a --- (1 row) --should return 'false' SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN true THEN false END) $$) as (a agtype); a ------- false (1 row) --invalid case (WHEN should be boolean) SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN 1 THEN 'fail' END) $$) as (a agtype); ERROR: cannot cast agtype integer to type boolean -- booleans + logic gates SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN true THEN (true AND true) END) $$) as (a agtype); a ------ true (1 row) -- invalid mixed logic gate SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN true THEN (true AND 1) END) $$) as (a agtype); ERROR: cannot cast agtype integer to type boolean --CASE WHEN condition THEN result END SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN n.i, n.j, CASE WHEN null THEN 'should not return me' WHEN n.i = 1 THEN 'i is 1' WHEN n.j = 'b' THEN 'j is b' WHEN n.i = 0 AND n.j = 1 THEN '0 AND 1' WHEN n.i = true OR n.j = true THEN 'i or j true' ELSE 'default' END $$ ) AS (i agtype, j agtype, case_statement agtype); i | j | case_statement ------+-----------+---------------- 1 | | "i is 1" "a" | "b" | "j is b" 0 | 1 | "0 AND 1" true | false | "i or j true" [] | [0, 1, 2] | "default" {} | {"i": 1} | "default" (6 rows) --CASE expression WHEN value THEN result END SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN n.j, CASE n.j WHEN null THEN 'should not return me' WHEN 'b' THEN 'b' WHEN 1 THEN 1 WHEN false THEN false WHEN [0,1,2] THEN [0,1,2] WHEN {i:1} THEN {i:1} ELSE 'not a or b' END $$ ) AS (j agtype, case_statement agtype); j | case_statement -----------+---------------- | "not a or b" "b" | "b" 1 | 1 false | false [0, 1, 2] | [0, 1, 2] {"i": 1} | {"i": 1} (6 rows) --CASE agtype_vertex WHEN value THEN result END SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE n WHEN null THEN 'should not return me' WHEN 'agtype_string' THEN 'wrong' WHEN n THEN n ELSE 'no n' END $$ ) AS (case_statement agtype); case_statement ------------------------------------------------------------------------------------------------ {"id": 281474976710657, "label": "", "properties": {"i": 1, "id": 1}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": "a", "j": "b", "id": 2}}::vertex {"id": 281474976710659, "label": "", "properties": {"i": 0, "j": 1, "id": 3}}::vertex {"id": 281474976710660, "label": "", "properties": {"i": true, "j": false, "id": 4}}::vertex {"id": 281474976710661, "label": "", "properties": {"i": [], "j": [0, 1, 2], "id": 5}}::vertex {"id": 281474976710662, "label": "", "properties": {"i": {}, "j": {"i": 1}, "id": 6}}::vertex (6 rows) --CASE with match and edges SELECT * FROM cypher('case_statement', $$ MATCH (n)-[e]->(m) RETURN CASE WHEN null THEN 'should not return me' WHEN n.i = 1 THEN n WHEN n.i = 0 THEN m ELSE 'none' END $$ ) AS (case_statement agtype); case_statement ---------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"i": 1, "id": 1}}::vertex {"id": 281474976710660, "label": "", "properties": {"i": true, "j": false, "id": 4}}::vertex (2 rows) SELECT * FROM cypher('case_statement', $$ MATCH (n)-[e]->(m) RETURN CASE WHEN null THEN 'should not return me' WHEN e.k = 1 THEN e WHEN e.k = 0 THEN e ELSE 'none' END $$ ) AS (case_statement agtype); case_statement ------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "connected_to", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {"k": 0, "id": 1}}::edge {"id": 844424930131970, "label": "connected_to", "end_id": 281474976710660, "start_id": 281474976710659, "properties": {"k": 1, "id": 2}}::edge (2 rows) --CASE chained expressions SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE WHEN null THEN 'should not return me' WHEN n.i = 1 = 1 THEN n ELSE 'none' END $$ ) AS (case_statement agtype); case_statement ------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"i": 1, "id": 1}}::vertex "none" "none" "none" "none" "none" (6 rows) SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE WHEN null THEN 'should not return me' WHEN n.i = (1 = 1) THEN n ELSE 'none' END $$ ) AS (case_statement agtype); case_statement ---------------------------------------------------------------------------------------------- "none" "none" "none" {"id": 281474976710660, "label": "", "properties": {"i": true, "j": false, "id": 4}}::vertex "none" "none" (6 rows) SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE n WHEN null THEN 'should not return me' WHEN n.i = 1 THEN n ELSE 'none' END $$ ) AS (case_statement agtype); case_statement ---------------- "none" "none" "none" "none" "none" "none" (6 rows) SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE n = 1 WHEN null THEN 'should not return me' WHEN n.i = 1 = 1 THEN n ELSE 'none' END $$ ) AS (case_statement agtype); case_statement ------------------------------------------------------------------------------------------------ "none" {"id": 281474976710658, "label": "", "properties": {"i": "a", "j": "b", "id": 2}}::vertex {"id": 281474976710659, "label": "", "properties": {"i": 0, "j": 1, "id": 3}}::vertex {"id": 281474976710660, "label": "", "properties": {"i": true, "j": false, "id": 4}}::vertex {"id": 281474976710661, "label": "", "properties": {"i": [], "j": [0, 1, 2], "id": 5}}::vertex {"id": 281474976710662, "label": "", "properties": {"i": {}, "j": {"i": 1}, "id": 6}}::vertex (6 rows) SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE n = 1 WHEN null THEN 'should not return me' WHEN n.i = (1 = 1) THEN n ELSE 'none' END $$ ) AS (case_statement agtype); case_statement ------------------------------------------------------------------------------------------------ {"id": 281474976710657, "label": "", "properties": {"i": 1, "id": 1}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": "a", "j": "b", "id": 2}}::vertex {"id": 281474976710659, "label": "", "properties": {"i": 0, "j": 1, "id": 3}}::vertex "none" {"id": 281474976710661, "label": "", "properties": {"i": [], "j": [0, 1, 2], "id": 5}}::vertex {"id": 281474976710662, "label": "", "properties": {"i": {}, "j": {"i": 1}, "id": 6}}::vertex (6 rows) --should return n SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE n = 1 WHEN null THEN 'should not return me' WHEN n = 1 = 1 THEN n ELSE 'none' END $$ ) AS (case_statement agtype); case_statement ------------------------------------------------------------------------------------------------ {"id": 281474976710657, "label": "", "properties": {"i": 1, "id": 1}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": "a", "j": "b", "id": 2}}::vertex {"id": 281474976710659, "label": "", "properties": {"i": 0, "j": 1, "id": 3}}::vertex {"id": 281474976710660, "label": "", "properties": {"i": true, "j": false, "id": 4}}::vertex {"id": 281474976710661, "label": "", "properties": {"i": [], "j": [0, 1, 2], "id": 5}}::vertex {"id": 281474976710662, "label": "", "properties": {"i": {}, "j": {"i": 1}, "id": 6}}::vertex (6 rows) --chained expression in THEN SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE WHEN null THEN 'should not return me' WHEN n.i = 1 THEN n.i = 1 = 1 ELSE 'none' END $$ ) AS (case_statement agtype); case_statement ---------------- true "none" "none" "none" "none" "none" (6 rows) --order of operations in then SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE n WHEN null THEN 'should not return me' WHEN n THEN (n.i = 1) = 1 ELSE 'none' END $$ ) AS (case_statement agtype); case_statement ---------------- false false false false false false (6 rows) SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE n WHEN null THEN 'should not return me' WHEN n THEN n.i = (1 = 1) ELSE 'none' END $$ ) AS (case_statement agtype); case_statement ---------------- false false false true false false (6 rows) SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE n WHEN null THEN 'should not return me' WHEN n THEN n.i = (1 = 0) ELSE 'none' END $$ ) AS (case_statement agtype); case_statement ---------------- false false false false false false (6 rows) --CASE with count() --count(*) SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN n, CASE n.j WHEN 1 THEN count(*) ELSE 'not count' END $$ ) AS (n agtype, case_statement agtype); n | case_statement ------------------------------------------------------------------------------------------------+---------------- {"id": 281474976710658, "label": "", "properties": {"i": "a", "j": "b", "id": 2}}::vertex | "not count" {"id": 281474976710661, "label": "", "properties": {"i": [], "j": [0, 1, 2], "id": 5}}::vertex | "not count" {"id": 281474976710657, "label": "", "properties": {"i": 1, "id": 1}}::vertex | "not count" {"id": 281474976710659, "label": "", "properties": {"i": 0, "j": 1, "id": 3}}::vertex | 1 {"id": 281474976710660, "label": "", "properties": {"i": true, "j": false, "id": 4}}::vertex | "not count" {"id": 281474976710662, "label": "", "properties": {"i": {}, "j": {"i": 1}, "id": 6}}::vertex | "not count" (6 rows) --concatenated SELECT * FROM cypher('case_statement', $$ MATCH (n) MATCH (m) RETURN n, CASE n.j WHEN 1 THEN count(*) ELSE 'not count' END $$ ) AS (n agtype, case_statement agtype); n | case_statement ------------------------------------------------------------------------------------------------+---------------- {"id": 281474976710658, "label": "", "properties": {"i": "a", "j": "b", "id": 2}}::vertex | "not count" {"id": 281474976710661, "label": "", "properties": {"i": [], "j": [0, 1, 2], "id": 5}}::vertex | "not count" {"id": 281474976710657, "label": "", "properties": {"i": 1, "id": 1}}::vertex | "not count" {"id": 281474976710659, "label": "", "properties": {"i": 0, "j": 1, "id": 3}}::vertex | 6 {"id": 281474976710660, "label": "", "properties": {"i": true, "j": false, "id": 4}}::vertex | "not count" {"id": 281474976710662, "label": "", "properties": {"i": {}, "j": {"i": 1}, "id": 6}}::vertex | "not count" (6 rows) --count(n) SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN n, CASE n.j WHEN 1 THEN count(n) ELSE 'not count' END $$ ) AS (n agtype, case_statement agtype); n | case_statement ------------------------------------------------------------------------------------------------+---------------- {"id": 281474976710658, "label": "", "properties": {"i": "a", "j": "b", "id": 2}}::vertex | "not count" {"id": 281474976710661, "label": "", "properties": {"i": [], "j": [0, 1, 2], "id": 5}}::vertex | "not count" {"id": 281474976710657, "label": "", "properties": {"i": 1, "id": 1}}::vertex | "not count" {"id": 281474976710659, "label": "", "properties": {"i": 0, "j": 1, "id": 3}}::vertex | 1 {"id": 281474976710660, "label": "", "properties": {"i": true, "j": false, "id": 4}}::vertex | "not count" {"id": 281474976710662, "label": "", "properties": {"i": {}, "j": {"i": 1}, "id": 6}}::vertex | "not count" (6 rows) --concatenated SELECT * FROM cypher('case_statement', $$ MATCH (n) MATCH (m) RETURN n, CASE n.j WHEN 1 THEN count(n) ELSE 'not count' END $$ ) AS (n agtype, case_statement agtype); n | case_statement ------------------------------------------------------------------------------------------------+---------------- {"id": 281474976710658, "label": "", "properties": {"i": "a", "j": "b", "id": 2}}::vertex | "not count" {"id": 281474976710661, "label": "", "properties": {"i": [], "j": [0, 1, 2], "id": 5}}::vertex | "not count" {"id": 281474976710657, "label": "", "properties": {"i": 1, "id": 1}}::vertex | "not count" {"id": 281474976710659, "label": "", "properties": {"i": 0, "j": 1, "id": 3}}::vertex | 6 {"id": 281474976710660, "label": "", "properties": {"i": true, "j": false, "id": 4}}::vertex | "not count" {"id": 281474976710662, "label": "", "properties": {"i": {}, "j": {"i": 1}, "id": 6}}::vertex | "not count" (6 rows) --count(1) SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN n, CASE n.j WHEN 1 THEN count(1) ELSE 'not count' END $$ ) AS (n agtype, case_statement agtype); n | case_statement ------------------------------------------------------------------------------------------------+---------------- {"id": 281474976710658, "label": "", "properties": {"i": "a", "j": "b", "id": 2}}::vertex | "not count" {"id": 281474976710661, "label": "", "properties": {"i": [], "j": [0, 1, 2], "id": 5}}::vertex | "not count" {"id": 281474976710657, "label": "", "properties": {"i": 1, "id": 1}}::vertex | "not count" {"id": 281474976710659, "label": "", "properties": {"i": 0, "j": 1, "id": 3}}::vertex | 1 {"id": 281474976710660, "label": "", "properties": {"i": true, "j": false, "id": 4}}::vertex | "not count" {"id": 281474976710662, "label": "", "properties": {"i": {}, "j": {"i": 1}, "id": 6}}::vertex | "not count" (6 rows) --concatenated SELECT * FROM cypher('case_statement', $$ MATCH (n) MATCH (m) RETURN n, CASE n.j WHEN 1 THEN count(1) ELSE 'not count' END $$ ) AS (n agtype, case_statement agtype); n | case_statement ------------------------------------------------------------------------------------------------+---------------- {"id": 281474976710658, "label": "", "properties": {"i": "a", "j": "b", "id": 2}}::vertex | "not count" {"id": 281474976710661, "label": "", "properties": {"i": [], "j": [0, 1, 2], "id": 5}}::vertex | "not count" {"id": 281474976710657, "label": "", "properties": {"i": 1, "id": 1}}::vertex | "not count" {"id": 281474976710659, "label": "", "properties": {"i": 0, "j": 1, "id": 3}}::vertex | 6 {"id": 281474976710660, "label": "", "properties": {"i": true, "j": false, "id": 4}}::vertex | "not count" {"id": 281474976710662, "label": "", "properties": {"i": {}, "j": {"i": 1}, "id": 6}}::vertex | "not count" (6 rows) --CASE with EXISTS() --exists(n.property) SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN n, CASE exists(n.j) WHEN true THEN 'property j exists' ELSE 'property j does not exist' END $$ ) AS (n agtype, case_statement agtype); n | case_statement ------------------------------------------------------------------------------------------------+----------------------------- {"id": 281474976710657, "label": "", "properties": {"i": 1, "id": 1}}::vertex | "property j does not exist" {"id": 281474976710658, "label": "", "properties": {"i": "a", "j": "b", "id": 2}}::vertex | "property j exists" {"id": 281474976710659, "label": "", "properties": {"i": 0, "j": 1, "id": 3}}::vertex | "property j exists" {"id": 281474976710660, "label": "", "properties": {"i": true, "j": false, "id": 4}}::vertex | "property j exists" {"id": 281474976710661, "label": "", "properties": {"i": [], "j": [0, 1, 2], "id": 5}}::vertex | "property j exists" {"id": 281474976710662, "label": "", "properties": {"i": {}, "j": {"i": 1}, "id": 6}}::vertex | "property j exists" (6 rows) --CASE evaluates to boolean true, is not a boolean, should hit ELSE SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN n, CASE exists(n.j) WHEN 1 THEN 'should not output me' ELSE '1 is not a boolean' END $$ ) AS (n agtype, case_statement agtype); n | case_statement ------------------------------------------------------------------------------------------------+---------------------- {"id": 281474976710657, "label": "", "properties": {"i": 1, "id": 1}}::vertex | "1 is not a boolean" {"id": 281474976710658, "label": "", "properties": {"i": "a", "j": "b", "id": 2}}::vertex | "1 is not a boolean" {"id": 281474976710659, "label": "", "properties": {"i": 0, "j": 1, "id": 3}}::vertex | "1 is not a boolean" {"id": 281474976710660, "label": "", "properties": {"i": true, "j": false, "id": 4}}::vertex | "1 is not a boolean" {"id": 281474976710661, "label": "", "properties": {"i": [], "j": [0, 1, 2], "id": 5}}::vertex | "1 is not a boolean" {"id": 281474976710662, "label": "", "properties": {"i": {}, "j": {"i": 1}, "id": 6}}::vertex | "1 is not a boolean" (6 rows) --exists in WHEN, vacuously false because exists(n.j) evaluates to a boolean, n is a vertex SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN n, CASE n WHEN exists(n.j) THEN 'should not output me' ELSE 'n is a vertex, not a boolean' END $$ ) AS (j agtype, case_statement agtype); j | case_statement ------------------------------------------------------------------------------------------------+-------------------------------- {"id": 281474976710657, "label": "", "properties": {"i": 1, "id": 1}}::vertex | "n is a vertex, not a boolean" {"id": 281474976710658, "label": "", "properties": {"i": "a", "j": "b", "id": 2}}::vertex | "n is a vertex, not a boolean" {"id": 281474976710659, "label": "", "properties": {"i": 0, "j": 1, "id": 3}}::vertex | "n is a vertex, not a boolean" {"id": 281474976710660, "label": "", "properties": {"i": true, "j": false, "id": 4}}::vertex | "n is a vertex, not a boolean" {"id": 281474976710661, "label": "", "properties": {"i": [], "j": [0, 1, 2], "id": 5}}::vertex | "n is a vertex, not a boolean" {"id": 281474976710662, "label": "", "properties": {"i": {}, "j": {"i": 1}, "id": 6}}::vertex | "n is a vertex, not a boolean" (6 rows) --exists(*) (should fail) SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN n, CASE n.j WHEN 1 THEN exists(*) ELSE 'not count' END $$ ) AS (j agtype, case_statement agtype); ERROR: syntax error at or near "*" LINE 4: WHEN 1 THEN exists(*) ^ -- RETURN * and (u)--(v) optional forms SELECT create_graph('opt_forms'); NOTICE: graph "opt_forms" has been created create_graph -------------- (1 row) SELECT * FROM cypher('opt_forms', $$CREATE ({i:1})-[:KNOWS]->({i:2})<-[:KNOWS]-({i:3})$$)AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('opt_forms', $$MATCH (u) RETURN u$$) AS (result agtype); result ---------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"i": 1}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": 2}}::vertex {"id": 281474976710659, "label": "", "properties": {"i": 3}}::vertex (3 rows) SELECT * FROM cypher('opt_forms', $$MATCH (u) RETURN *$$) AS (result agtype); result ---------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"i": 1}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": 2}}::vertex {"id": 281474976710659, "label": "", "properties": {"i": 3}}::vertex (3 rows) SELECT * FROM cypher('opt_forms', $$MATCH (u)--(v) RETURN u.i, v.i$$) AS (u agtype, v agtype); u | v ---+--- 2 | 3 3 | 2 1 | 2 2 | 1 (4 rows) SELECT * FROM cypher('opt_forms', $$MATCH (u)-->(v) RETURN u.i, v.i$$) AS (u agtype, v agtype); u | v ---+--- 3 | 2 1 | 2 (2 rows) SELECT * FROM cypher('opt_forms', $$MATCH (u)<--(v) RETURN u.i, v.i$$) AS (u agtype, v agtype); u | v ---+--- 2 | 3 2 | 1 (2 rows) SELECT * FROM cypher('opt_forms', $$MATCH (u)-->()<--(v) RETURN u.i, v.i$$) AS (u agtype, v agtype); u | v ---+--- 3 | 1 1 | 3 (2 rows) SELECT * FROM cypher('opt_forms', $$MATCH (u) CREATE (u)-[:edge]->() RETURN *$$) AS (results agtype); results ---------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"i": 1}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": 2}}::vertex {"id": 281474976710659, "label": "", "properties": {"i": 3}}::vertex (3 rows) SELECT * FROM cypher('opt_forms', $$MATCH (u)-->()<--(v) RETURN *$$) AS (col1 agtype, col2 agtype); col1 | col2 ----------------------------------------------------------------------+---------------------------------------------------------------------- {"id": 281474976710659, "label": "", "properties": {"i": 3}}::vertex | {"id": 281474976710657, "label": "", "properties": {"i": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": 1}}::vertex | {"id": 281474976710659, "label": "", "properties": {"i": 3}}::vertex (2 rows) -- Added typecasts ::pg_bigint and ::pg_float8 SELECT * FROM cypher('expr', $$ RETURN true::pg_bigint $$) AS (result agtype); result -------- 1 (1 row) SELECT * FROM cypher('expr', $$ RETURN "1.0"::pg_float8 $$) AS (result agtype); result -------- 1.0 (1 row) SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt(pg_catalog.sqrt(pg_catalog.sqrt(256::pg_bigint))) $$) as (result agtype); result -------- 2.0 (1 row) SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt(pg_catalog.sqrt(pg_catalog.sqrt(256::pg_float8))) $$) as (result agtype); result -------- 2.0 (1 row) -- VLE SELECT create_graph('VLE'); NOTICE: graph "VLE" has been created create_graph -------------- (1 row) -- should return 0 rows SELECT * FROM cypher('VLE', $$MATCH (u)-[*]-(v) RETURN u, v$$) AS (u agtype, v agtype); u | v ---+--- (0 rows) SELECT * FROM cypher('VLE', $$MATCH (u)-[*0..1]-(v) RETURN u, v$$) AS (u agtype, v agtype); u | v ---+--- (0 rows) SELECT * FROM cypher('VLE', $$MATCH (u)-[*..1]-(v) RETURN u, v$$) AS (u agtype, v agtype); u | v ---+--- (0 rows) SELECT * FROM cypher('VLE', $$MATCH (u)-[*..5]-(v) RETURN u, v$$) AS (u agtype, v agtype); u | v ---+--- (0 rows) -- Create a graph to test SELECT * FROM cypher('VLE', $$CREATE (b:begin)-[:edge {name: 'main edge', number: 1, dangerous: {type: "all", level: "all"}}]->(u1:middle)-[:edge {name: 'main edge', number: 2, dangerous: {type: "all", level: "all"}, packages: [2,4,6]}]->(u2:middle)-[:edge {name: 'main edge', number: 3, dangerous: {type: "all", level: "all"}}]->(u3:middle)-[:edge {name: 'main edge', number: 4, dangerous: {type: "all", level: "all"}}]->(e:end), (u1)-[:self_loop {name: 'self loop', number: 1, dangerous: {type: "all", level: "all"}}]->(u1), (e)-[:self_loop {name: 'self loop', number: 2, dangerous: {type: "all", level: "all"}}]->(e), (b)-[:alternate_edge {name: 'alternate edge', number: 1, packages: [2,4,6], dangerous: {type: "poisons", level: "all"}}]->(u1), (u2)-[:alternate_edge {name: 'alternate edge', number: 2, packages: [2,4,6], dangerous: {type: "poisons", level: "all"}}]->(u3), (u3)-[:alternate_edge {name: 'alternate edge', number: 3, packages: [2,4,6], dangerous: {type: "poisons", level: "all"}}]->(e), (u2)-[:bypass_edge {name: 'bypass edge', number: 1, packages: [1,3,5,7]}]->(e), (e)-[:alternate_edge {name: 'backup edge', number: 1, packages: [1,3,5,7]}]->(u3), (u3)-[:alternate_edge {name: 'backup edge', number: 2, packages: [1,3,5,7]}]->(u2), (u2)-[:bypass_edge {name: 'bypass edge', number: 2, packages: [1,3,5,7], dangerous: {type: "poisons", level: "all"}}]->(b) RETURN b, e $$) AS (b agtype, e agtype); b | e ---------------------------------------------------------------------+-------------------------------------------------------------------- {"id": 844424930131969, "label": "begin", "properties": {}}::vertex | {"id": 1688849860263937, "label": "end", "properties": {}}::vertex (1 row) -- test vertex_stats command SELECT * FROM cypher('VLE', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); result ----------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "begin", "in_degree": 1, "out_degree": 2, "self_loops": 0} {"id": 1407374883553281, "label": "middle", "in_degree": 3, "out_degree": 2, "self_loops": 1} {"id": 1407374883553282, "label": "middle", "in_degree": 2, "out_degree": 4, "self_loops": 0} {"id": 1407374883553283, "label": "middle", "in_degree": 3, "out_degree": 3, "self_loops": 0} {"id": 1688849860263937, "label": "end", "in_degree": 4, "out_degree": 2, "self_loops": 1} (5 rows) -- test indirection operator for a function SELECT * FROM cypher('VLE', $$ MATCH (u) WHERE vertex_stats(u).self_loops <> 0 RETURN vertex_stats(u) $$) AS (result agtype); result ----------------------------------------------------------------------------------------------- {"id": 1407374883553281, "label": "middle", "in_degree": 3, "out_degree": 2, "self_loops": 1} {"id": 1688849860263937, "label": "end", "in_degree": 4, "out_degree": 2, "self_loops": 1} (2 rows) SELECT * FROM cypher('VLE', $$ MATCH (u) WHERE vertex_stats(u).in_degree < vertex_stats(u).out_degree RETURN vertex_stats(u) $$) AS (result agtype); result ----------------------------------------------------------------------------------------------- {"id": 844424930131969, "label": "begin", "in_degree": 1, "out_degree": 2, "self_loops": 0} {"id": 1407374883553282, "label": "middle", "in_degree": 2, "out_degree": 4, "self_loops": 0} (2 rows) SELECT * FROM cypher('VLE', $$ MATCH (u) WHERE vertex_stats(u).out_degree < vertex_stats(u).in_degree RETURN vertex_stats(u) $$) AS (result agtype); result ----------------------------------------------------------------------------------------------- {"id": 1407374883553281, "label": "middle", "in_degree": 3, "out_degree": 2, "self_loops": 1} {"id": 1688849860263937, "label": "end", "in_degree": 4, "out_degree": 2, "self_loops": 1} (2 rows) -- list functions relationships(), range(), keys() SELECT create_graph('keys'); NOTICE: graph "keys" has been created create_graph -------------- (1 row) -- keys() SELECT * FROM cypher('keys', $$CREATE ({name: 'hikaru utada', age: 38, job: 'singer'})-[:collaborated_with {song:"face my fears"}]->( {name: 'sonny moore', age: 33, stage_name: 'skrillex', job: 'producer'})$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('keys', $$CREATE ({name: 'alexander guy cook', age: 31, stage_name:"a. g. cook", job: 'producer'})$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('keys', $$CREATE ({name: 'keiko fuji', age: 62, job: 'singer'})$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('keys', $$MATCH (a),(b) WHERE a.name = 'hikaru utada' AND b.name = 'alexander guy cook' CREATE (a)-[:collaborated_with {song:"one last kiss"}]->(b)$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('keys', $$MATCH (a),(b) WHERE a.name = 'hikaru utada' AND b.name = 'keiko fuji' CREATE (a)-[:knows]->(b)$$) AS (result agtype); result -------- (0 rows) SELECT * FROM cypher('keys', $$MATCH (v) RETURN keys(v)$$) AS (vertex_keys agtype); vertex_keys -------------------------------------- ["age", "job", "name"] ["age", "job", "name", "stage_name"] ["age", "job", "name", "stage_name"] ["age", "job", "name"] (4 rows) SELECT * FROM cypher('keys', $$MATCH ()-[e]-() RETURN keys(e)$$) AS (edge_keys agtype); edge_keys ----------- [] [] ["song"] ["song"] ["song"] ["song"] (6 rows) SELECT * FROM cypher('keys', $$RETURN keys({a:1,b:'two',c:[1,2,3]})$$) AS (keys agtype); keys ----------------- ["a", "b", "c"] (1 row) --should return empty list SELECT * FROM cypher('keys', $$RETURN keys({})$$) AS (keys agtype); keys ------ [] (1 row) --should return sql null SELECT * FROM cypher('keys', $$RETURN keys(null)$$) AS (keys agtype); keys ------ (1 row) --should return error SELECT * from cypher('keys', $$RETURN keys([1,2,3])$$) as (keys agtype); ERROR: keys() argument must be a vertex, edge, object or null SELECT * from cypher('keys', $$RETURN keys("string")$$) as (keys agtype); ERROR: keys() argument must be a vertex, edge, object or null SELECT * from cypher('keys', $$MATCH u=()-[]-() RETURN keys(u)$$) as (keys agtype); ERROR: keys() argument must be a vertex, edge, object or null SELECT create_graph('list'); NOTICE: graph "list" has been created create_graph -------------- (1 row) SELECT * from cypher('list', $$CREATE p=({name:"rick"})-[:knows]->({name:"morty"}) RETURN p$$) as (path agtype); path ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [{"id": 281474976710657, "label": "", "properties": {"name": "rick"}}::vertex, {"id": 844424930131969, "label": "knows", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge, {"id": 281474976710658, "label": "", "properties": {"name": "morty"}}::vertex]::path (1 row) SELECT * from cypher('list', $$CREATE p=({name:'rachael'})-[:knows]->({name:'monica'})-[:knows]->({name:'phoebe'}) RETURN p$$) as (path agtype); path --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710659, "label": "", "properties": {"name": "rachael"}}::vertex, {"id": 844424930131971, "label": "knows", "end_id": 281474976710660, "start_id": 281474976710659, "properties": {}}::edge, {"id": 281474976710660, "label": "", "properties": {"name": "monica"}}::vertex, {"id": 844424930131970, "label": "knows", "end_id": 281474976710661, "start_id": 281474976710660, "properties": {}}::edge, {"id": 281474976710661, "label": "", "properties": {"name": "phoebe"}}::vertex]::path (1 row) -- nodes() SELECT * from cypher('list', $$MATCH p=()-[]->() RETURN nodes(p)$$) as (nodes agtype); nodes ------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710657, "label": "", "properties": {"name": "rick"}}::vertex, {"id": 281474976710658, "label": "", "properties": {"name": "morty"}}::vertex] [{"id": 281474976710660, "label": "", "properties": {"name": "monica"}}::vertex, {"id": 281474976710661, "label": "", "properties": {"name": "phoebe"}}::vertex] [{"id": 281474976710659, "label": "", "properties": {"name": "rachael"}}::vertex, {"id": 281474976710660, "label": "", "properties": {"name": "monica"}}::vertex] (3 rows) SELECT * from cypher('list', $$MATCH p=()-[]->()-[]->() RETURN nodes(p)$$) as (nodes agtype); nodes --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710659, "label": "", "properties": {"name": "rachael"}}::vertex, {"id": 281474976710660, "label": "", "properties": {"name": "monica"}}::vertex, {"id": 281474976710661, "label": "", "properties": {"name": "phoebe"}}::vertex] (1 row) -- should return nothing SELECT * from cypher('list', $$MATCH p=()-[]->()-[]->()-[]->() RETURN nodes(p)$$) as (nodes agtype); nodes ------- (0 rows) -- should return SQL NULL SELECT * from cypher('list', $$RETURN nodes(NULL)$$) as (nodes agtype); nodes ------- (1 row) -- should return an error SELECT * from cypher('list', $$MATCH (u) RETURN nodes([1,2,3])$$) as (nodes agtype); ERROR: nodes() argument must resolve to a scalar value SELECT * from cypher('list', $$MATCH (u) RETURN nodes("string")$$) as (nodes agtype); ERROR: nodes() argument must be a path SELECT * from cypher('list', $$MATCH (u) RETURN nodes(u)$$) as (nodes agtype); ERROR: nodes() argument must be a path SELECT * from cypher('list', $$MATCH (u)-[]->() RETURN nodes(u)$$) as (nodes agtype); ERROR: nodes() argument must be a path -- relationships() SELECT * from cypher('list', $$MATCH p=()-[]->() RETURN relationships(p)$$) as (relationships agtype); relationships ----------------------------------------------------------------------------------------------------------------------------- [{"id": 844424930131969, "label": "knows", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge] [{"id": 844424930131970, "label": "knows", "end_id": 281474976710661, "start_id": 281474976710660, "properties": {}}::edge] [{"id": 844424930131971, "label": "knows", "end_id": 281474976710660, "start_id": 281474976710659, "properties": {}}::edge] (3 rows) SELECT * from cypher('list', $$MATCH p=()-[]->()-[]->() RETURN relationships(p)$$) as (relationships agtype); relationships -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 844424930131971, "label": "knows", "end_id": 281474976710660, "start_id": 281474976710659, "properties": {}}::edge, {"id": 844424930131970, "label": "knows", "end_id": 281474976710661, "start_id": 281474976710660, "properties": {}}::edge] (1 row) -- should return nothing SELECT * from cypher('list', $$MATCH p=()-[]->()-[]->()-[]->() RETURN relationships(p)$$) as (relationships agtype); relationships --------------- (0 rows) -- should return SQL NULL SELECT * from cypher('list', $$RETURN relationships(NULL)$$) as (relationships agtype); relationships --------------- (1 row) -- should return an error SELECT * from cypher('list', $$MATCH (u) RETURN relationships([1,2,3])$$) as (relationships agtype); ERROR: relationships() argument must resolve to a scalar value SELECT * from cypher('list', $$MATCH (u) RETURN relationships("string")$$) as (relationships agtype); ERROR: relationships() argument must be a path SELECT * from cypher('list', $$MATCH (u) RETURN relationships(u)$$) as (relationships agtype); ERROR: relationships() argument must be a path SELECT * from cypher('list', $$MATCH ()-[e]->() RETURN relationships(e)$$) as (relationships agtype); ERROR: relationships() argument must be a path -- range() SELECT * from cypher('list', $$RETURN range(0, 10)$$) as (range agtype); range ------------------------------------ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] (1 row) SELECT * from cypher('list', $$RETURN range(0, 10, null)$$) as (range agtype); range ------------------------------------ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] (1 row) SELECT * from cypher('list', $$RETURN range(0, 10, 1)$$) as (range agtype); range ------------------------------------ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] (1 row) SELECT * from cypher('list', $$RETURN range(0, 10, 3)$$) as (range agtype); range -------------- [0, 3, 6, 9] (1 row) SELECT * from cypher('list', $$RETURN range(0, -10, -1)$$) as (range agtype); range ---------------------------------------------- [0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10] (1 row) SELECT * from cypher('list', $$RETURN range(0, -10, -3)$$) as (range agtype); range ----------------- [0, -3, -6, -9] (1 row) SELECT * from cypher('list', $$RETURN range(0, 10, 11)$$) as (range agtype); range ------- [0] (1 row) SELECT * from cypher('list', $$RETURN range(-20, 10, 5)$$) as (range agtype); range ------------------------------- [-20, -15, -10, -5, 0, 5, 10] (1 row) -- should return an empty list [] SELECT * from cypher('list', $$RETURN range(0, -10)$$) as (range agtype); range ------- [] (1 row) SELECT * from cypher('list', $$RETURN range(0, 10, -1)$$) as (range agtype); range ------- [] (1 row) SELECT * from cypher('list', $$RETURN range(-10, 10, -1)$$) as (range agtype); range ------- [] (1 row) -- should return an error SELECT * from cypher('list', $$RETURN range(null, -10, -3)$$) as (range agtype); ERROR: range(): neither start or end can be NULL SELECT * from cypher('list', $$RETURN range(0, null, -3)$$) as (range agtype); ERROR: range(): neither start or end can be NULL SELECT * from cypher('list', $$RETURN range(0, -10.0, -3.0)$$) as (range agtype); ERROR: range() unsupported argument type -- tail() -- should return the last elements of the list SELECT * FROM cypher('list', $$ RETURN tail([1,2,3,4,5]) $$) AS (tail agtype); tail -------------- [2, 3, 4, 5] (1 row) SELECT * FROM cypher('list', $$ RETURN tail(["a","b","c","d","e"]) $$) AS (tail agtype); tail ---------------------- ["b", "c", "d", "e"] (1 row) -- should return null SELECT * FROM cypher('list', $$ RETURN tail([1]) $$) AS (tail agtype); tail ------ (1 row) SELECT * FROM cypher('list', $$ RETURN tail([]) $$) AS (tail agtype); tail ------ (1 row) -- should throw errors SELECT * FROM cypher('list', $$ RETURN tail(123) $$) AS (tail agtype); ERROR: tail() argument must resolve to a list or null SELECT * FROM cypher('list', $$ RETURN tail(abc) $$) AS (tail agtype); ERROR: could not find rte for abc LINE 1: SELECT * FROM cypher('list', $$ RETURN tail(abc) $$) AS (tai... ^ SELECT * FROM cypher('list', $$ RETURN tail() $$) AS (tail agtype); ERROR: function ag_catalog.age_tail() does not exist LINE 1: SELECT * FROM cypher('list', $$ RETURN tail() $$) AS (tail a... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -- labels() SELECT * from cypher('list', $$CREATE (u:People {name: "John"}) RETURN u$$) as (Vertices agtype); vertices ------------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "People", "properties": {"name": "John"}}::vertex (1 row) SELECT * from cypher('list', $$CREATE (u:People {name: "Larry"}) RETURN u$$) as (Vertices agtype); vertices -------------------------------------------------------------------------------------- {"id": 1125899906842626, "label": "People", "properties": {"name": "Larry"}}::vertex (1 row) SELECT * from cypher('list', $$CREATE (u:Cars {name: "G35"}) RETURN u$$) as (Vertices agtype); vertices ---------------------------------------------------------------------------------- {"id": 1407374883553281, "label": "Cars", "properties": {"name": "G35"}}::vertex (1 row) SELECT * from cypher('list', $$CREATE (u:Cars {name: "MR2"}) RETURN u$$) as (Vertices agtype); vertices ---------------------------------------------------------------------------------- {"id": 1407374883553282, "label": "Cars", "properties": {"name": "MR2"}}::vertex (1 row) SELECT * from cypher('list', $$MATCH (u) RETURN labels(u), u$$) as (Labels agtype, Vertices agtype); labels | vertices ------------+-------------------------------------------------------------------------------------- [""] | {"id": 281474976710657, "label": "", "properties": {"name": "rick"}}::vertex [""] | {"id": 281474976710658, "label": "", "properties": {"name": "morty"}}::vertex [""] | {"id": 281474976710659, "label": "", "properties": {"name": "rachael"}}::vertex [""] | {"id": 281474976710660, "label": "", "properties": {"name": "monica"}}::vertex [""] | {"id": 281474976710661, "label": "", "properties": {"name": "phoebe"}}::vertex ["People"] | {"id": 1125899906842625, "label": "People", "properties": {"name": "John"}}::vertex ["People"] | {"id": 1125899906842626, "label": "People", "properties": {"name": "Larry"}}::vertex ["Cars"] | {"id": 1407374883553281, "label": "Cars", "properties": {"name": "G35"}}::vertex ["Cars"] | {"id": 1407374883553282, "label": "Cars", "properties": {"name": "MR2"}}::vertex (9 rows) -- should return SQL NULL SELECT * from cypher('list', $$RETURN labels(NULL)$$) as (Labels agtype); labels -------- (1 row) -- should return an error SELECT * from cypher('list', $$RETURN labels("string")$$) as (Labels agtype); ERROR: labels() argument must be a vertex -- Issue 989: Impossible to create an object with an array field of more than -- 100 elements. SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [] }) RETURN any_vertex $$) AS (u agtype); u ------------------------------------------------------------------------------------------- {"id": 1688849860263937, "label": "test_label", "properties": {"largeArray": []}}::vertex (1 row) SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0] }) RETURN any_vertex $$) AS (u agtype); u -------------------------------------------------------------------------------------------- {"id": 1688849860263938, "label": "test_label", "properties": {"largeArray": [0]}}::vertex (1 row) SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] }) RETURN any_vertex $$) AS (u agtype); u ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 1688849860263939, "label": "test_label", "properties": {"largeArray": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]}}::vertex (1 row) SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100] }) RETURN any_vertex $$) AS (u agtype); u ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 1688849860263940, "label": "test_label", "properties": {"largeArray": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]}}::vertex (1 row) SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] }) RETURN any_vertex $$) AS (u agtype); u ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 1688849860263941, "label": "test_label", "properties": {"largeArray": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]}}::vertex (1 row) SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] }) RETURN any_vertex $$) AS (u agtype); u ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 1688849860263942, "label": "test_label", "properties": {"largeArray": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]}}::vertex (1 row) SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] }) RETURN any_vertex $$) AS (u agtype); u ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 1688849860263943, "label": "test_label", "properties": {"largeArray": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]}}::vertex (1 row) -- should return 7 rows with counts: 0, 1, 100, 101, 200, 400, 800 SELECT * FROM cypher('list', $$ MATCH (u:test_label) RETURN size(u.largeArray) $$) AS (u agtype); u ----- 0 1 100 101 200 400 800 (7 rows) -- nested cases SELECT * FROM cypher('list',$$ CREATE (n:xyz {array:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], 100]}) return n $$) as (a agtype); a ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 1970324836974593, "label": "xyz", "properties": {"array": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], 100]}}::vertex (1 row) SELECT * FROM cypher('list',$$ MATCH (n:xyz) CREATE (m:xyz {array:[0,1,2,3,n.array,5,6,7,8,9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]}) return m $$) as (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 1970324836974594, "label": "xyz", "properties": {"array": [0, 1, 2, 3, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], 100], 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]}}::vertex (1 row) SELECT * FROM cypher('list',$$ MATCH (n:xyz) CREATE (m:xyz {array:[n.array,[n.array,[n.array]]]}) return m $$) as (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 1970324836974595, "label": "xyz", "properties": {"array": [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], 100], [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], 100], [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], 100]]]]}}::vertex {"id": 1970324836974596, "label": "xyz", "properties": {"array": [[0, 1, 2, 3, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], 100], 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], [[0, 1, 2, 3, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], 100], 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], [[0, 1, 2, 3, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], 100], 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]]]]}}::vertex (2 rows) -- SET SELECT * FROM cypher('list',$$ CREATE (n:xyz)-[e:KNOWS {array:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]}]->(m:xyz) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('list',$$ MATCH p=(n:xyz)-[e]->() SET n.array=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100] return n,e $$) as (a agtype, b agtype); a | b ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 1970324836974597, "label": "xyz", "properties": {"array": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]}}::vertex | {"id": 2251799813685249, "label": "KNOWS", "end_id": 1970324836974598, "start_id": 1970324836974597, "properties": {"array": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]}}::edge (1 row) SELECT * FROM cypher('list',$$ MATCH p=(n:xyz)-[e]->() SET n.array=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, e.array, 100] return n,e $$) as (a agtype, b agtype); a | b -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 1970324836974597, "label": "xyz", "properties": {"array": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], 100]}}::vertex | {"id": 2251799813685249, "label": "KNOWS", "end_id": 1970324836974598, "start_id": 1970324836974597, "properties": {"array": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]}}::edge (1 row) -- pg_typeof SELECT * FROM cypher('expr', $$MATCH (u) RETURN toString(pg_catalog.pg_typeof(u.id)) $$) AS (u agtype); u ---------- "agtype" "agtype" "agtype" "agtype" "agtype" "agtype" "agtype" (7 rows) -- issue: 395 aggregate function collect() incorrect container for operation SELECT create_graph('graph_395'); NOTICE: graph "graph_395" has been created create_graph -------------- (1 row) SELECT * FROM cypher('graph_395', $$ CREATE (n:Project {name: 'Project A'}), (m:Project {name: 'Project B'}), (a:Task {name: 'Task A', size: 10}), (b:Task {name: 'Task B', size: 5}), (c:Task {name: 'Task C', size: 7}), (x:Person {name: 'John', age: 55}), (y:Person {name: 'Bob', age: 43}), (z:Person {name: 'Alice', age: 33}), (n)-[:Has]->(a), (n)-[:Has]->(b), (m)-[:Has]->(c), (a)-[:AssignedTo]->(x), (b)-[:AssignedTo]->(y), (c)-[:AssignedTo]->(y) $$) as (n agtype); n --- (0 rows) SELECT * FROM cypher('graph_395', $$ MATCH (p:Project)-[:Has]->(t:Task)-[:AssignedTo]->(u:Person) WITH p, t, collect(u) AS users WITH p, {tn: t.name, users: users} AS task RETURN task $$) AS (p agtype); p ----------------------------------------------------------------------------------------------------------------------------- {"tn": "Task A", "users": [{"id": 1407374883553281, "label": "Person", "properties": {"age": 55, "name": "John"}}::vertex]} {"tn": "Task B", "users": [{"id": 1407374883553282, "label": "Person", "properties": {"age": 43, "name": "Bob"}}::vertex]} {"tn": "Task C", "users": [{"id": 1407374883553282, "label": "Person", "properties": {"age": 43, "name": "Bob"}}::vertex]} (3 rows) SELECT * FROM cypher('graph_395', $$ MATCH (p:Project)-[:Has]->(t:Task)-[:AssignedTo]->(u:Person) WITH p, t, collect(u) AS users WITH p, {tn: t.name, users: users} AS task WITH p, collect(task) AS tasks RETURN tasks $$) AS (p agtype); p ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"tn": "Task A", "users": [{"id": 1407374883553281, "label": "Person", "properties": {"age": 55, "name": "John"}}::vertex]}, {"tn": "Task B", "users": [{"id": 1407374883553282, "label": "Person", "properties": {"age": 43, "name": "Bob"}}::vertex]}] [{"tn": "Task C", "users": [{"id": 1407374883553282, "label": "Person", "properties": {"age": 43, "name": "Bob"}}::vertex]}] (2 rows) SELECT * FROM cypher('graph_395', $$ MATCH (p:Project)-[:Has]->(t:Task)-[:AssignedTo]->(u:Person) WITH p, t, collect(u) AS users WITH p, {tn: t.name, users: users} AS task WITH p, collect(task) AS tasks WITH {pn: p.name, tasks:tasks} AS project RETURN project $$) AS (p agtype); p ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"pn": "Project A", "tasks": [{"tn": "Task A", "users": [{"id": 1407374883553281, "label": "Person", "properties": {"age": 55, "name": "John"}}::vertex]}, {"tn": "Task B", "users": [{"id": 1407374883553282, "label": "Person", "properties": {"age": 43, "name": "Bob"}}::vertex]}]} {"pn": "Project B", "tasks": [{"tn": "Task C", "users": [{"id": 1407374883553282, "label": "Person", "properties": {"age": 43, "name": "Bob"}}::vertex]}]} (2 rows) -- -- issue 1044 - array functions not recognizing vpc -- -- size SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE size(vle_array) > 0 RETURN vle_array $$) AS (vle_array agtype); vle_array -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] (6 rows) SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE size(vle_array) > 1 RETURN vle_array $$) AS (vle_array agtype); vle_array -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] (2 rows) SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE size(vle_array) > 2 RETURN vle_array $$) AS (vle_array agtype); vle_array ----------- (0 rows) SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE size(vle_array) = size(vle_array) RETURN vle_array $$) AS (vle_array agtype); vle_array -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] (6 rows) -- head SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() RETURN head(vle_array) $$) AS (head agtype); head --------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge (6 rows) SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE head(vle_array) = vle_array[0] RETURN vle_array $$) AS (head agtype); head -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] (6 rows) SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE head(vle_array) = vle_array[size(vle_array) - size(vle_array)] RETURN vle_array $$) AS (head agtype); head -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] (6 rows) SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE head(vle_array) = head([vle_array[0]]) RETURN vle_array LIMIT 1 $$) AS (head agtype); head ----------------------------------------------------------------------------------------------------------------------------- [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] (1 row) -- last SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() RETURN last(vle_array) $$) AS (head agtype); head --------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge (6 rows) SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE last(vle_array) = vle_array[0] RETURN vle_array $$) AS (head agtype); head ----------------------------------------------------------------------------------------------------------------------------- [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] (4 rows) SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE last(vle_array) = vle_array[size(vle_array)-1] RETURN vle_array $$) AS (head agtype); head -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] (6 rows) SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE last(vle_array) = head([vle_array[size(vle_array)-1]]) RETURN vle_array LIMIT 1 $$) AS (head agtype); head ----------------------------------------------------------------------------------------------------------------------------- [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] (1 row) -- isEmpty SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE isEmpty(vle_array) RETURN vle_array $$) AS (head agtype); head ------ (0 rows) SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE isEmpty(vle_array) = false RETURN vle_array $$) AS (head agtype); head -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] (6 rows) SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE isEmpty(vle_array[0..0]) RETURN vle_array $$) AS (head agtype); head -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] (6 rows) SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE isEmpty([vle_array[3]]) = false RETURN vle_array $$) AS (head agtype); head -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] (6 rows) -- reverse SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() RETURN reverse(vle_array) $$) as (u agtype); u -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] (6 rows) SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE reverse(vle_array)[0] = last(vle_array) RETURN reverse(vle_array) $$) as (u agtype); u -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] (6 rows) -- IN operator SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]->() WHERE vle_array[0] IN vle_array RETURN vle_array $$) AS (a agtype); a -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] (3 rows) -- access slice SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]->() WHERE vle_array[0..1] = [vle_array[0]] RETURN vle_array $$) AS (a agtype); a -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge] [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] [{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] (3 rows) SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]->() WHERE vle_array[1..2] = [last(vle_array)] RETURN vle_array $$) AS (a agtype); a -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge] (1 row) SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]->() WHERE vle_array[0..1] = [vle_array[0], vle_array[1]] RETURN vle_array $$) AS (a agtype); a --- (0 rows) --- --- Fix: Segmentation fault when using specific names for tables #1124 --- --- The following are just a few commands to test SQLValueFunction types --- SELECT count(*) FROM CURRENT_ROLE; count ------- 1 (1 row) SELECT count(*) FROM CURRENT_USER; count ------- 1 (1 row) SELECT count(*) FROM USER; count ------- 1 (1 row) SELECT count(*) FROM SESSION_USER; count ------- 1 (1 row) SELECT * FROM CURRENT_CATALOG; current_catalog -------------------- contrib_regression (1 row) SELECT * FROM CURRENT_SCHEMA; current_schema ---------------- ag_catalog (1 row) SELECT * FROM create_graph('issue_1124'); NOTICE: graph "issue_1124" has been created create_graph -------------- (1 row) SELECT results, pg_typeof(user) FROM cypher('issue_1124', $$ CREATE (u) RETURN u $$) AS (results agtype), user; results | pg_typeof ----------------------------------------------------------------+----------- {"id": 281474976710657, "label": "", "properties": {}}::vertex | name (1 row) SELECT results, pg_typeof(user) FROM cypher('issue_1124', $$ MATCH (u) RETURN u $$) AS (results agtype), user; results | pg_typeof ----------------------------------------------------------------+----------- {"id": 281474976710657, "label": "", "properties": {}}::vertex | name (1 row) -- -- issue 1303: segmentation fault on queries like SELECT * FROM agtype(null); -- -- Test Const and CoerceViaIO expression node types SELECT * FROM agtype(null); agtype -------- (1 row) SELECT * FROM agtype('1'); agtype -------- 1 (1 row) SELECT * FROM agtype('[1, 2, 3]'); agtype ----------- [1, 2, 3] (1 row) SELECT * FROM agtype('{"a": 1}'); agtype ---------- {"a": 1} (1 row) SELECT * FROM agtype('{"id": 844424930131971, "label": "v", "properties": {"i": 1}}::vertex'); agtype ----------------------------------------------------------------------- {"id": 844424930131971, "label": "v", "properties": {"i": 1}}::vertex (1 row) SELECT * FROM agtype('{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge'); agtype --------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge (1 row) SELECT * FROM agtype('[{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex]::path'); agtype --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex]::path (1 row) SELECT * FROM text(1); text ------ 1 (1 row) SELECT * FROM text('1'); text ------ 1 (1 row) SELECT * FROM int4(1); int4 ------ 1 (1 row) SELECT * FROM json('1'); json ------ 1 (1 row) SELECT * FROM jsonb('1'); jsonb ------- 1 (1 row) SELECT * FROM bytea('1'); bytea ------- \x31 (1 row) -- Test Var expression node types SELECT create_graph('issue_1303'); NOTICE: graph "issue_1303" has been created create_graph -------------- (1 row) SELECT result, agtype('[1, 2, 3]') FROM cypher('issue_1303', $$ CREATE (u) RETURN u $$) AS (result agtype); result | agtype ----------------------------------------------------------------+----------- {"id": 281474976710657, "label": "", "properties": {}}::vertex | [1, 2, 3] (1 row) SELECT result, result2, pg_typeof(result2) FROM cypher('issue_1303', $$ MATCH (u) RETURN u $$) AS (result agtype), agtype('[1, 2, 3]') AS result2; result | result2 | pg_typeof ----------------------------------------------------------------+-----------+----------- {"id": 281474976710657, "label": "", "properties": {}}::vertex | [1, 2, 3] | agtype (1 row) SELECT result, result2, pg_typeof(result2) FROM cypher('issue_1303', $$ MATCH (u) RETURN u $$) AS (result agtype), text(1) AS result2; result | result2 | pg_typeof ----------------------------------------------------------------+---------+----------- {"id": 281474976710657, "label": "", "properties": {}}::vertex | 1 | text (1 row) SELECT result, result2, pg_typeof(result2), result3, pg_typeof(result3) FROM cypher('issue_1303', $$ MATCH (u) RETURN u $$) AS (result agtype), text(1) AS result2, agtype(result) AS result3; result | result2 | pg_typeof | result3 | pg_typeof ----------------------------------------------------------------+---------+-----------+----------------------------------------------------------------+----------- {"id": 281474976710657, "label": "", "properties": {}}::vertex | 1 | text | {"id": 281474976710657, "label": "", "properties": {}}::vertex | agtype (1 row) SELECT result, result2, pg_typeof(result2), result3, pg_typeof(result3) FROM cypher('issue_1303', $$ MATCH (u) RETURN u $$) AS (result agtype), text(1) AS result2, agtype(result2) AS result3; result | result2 | pg_typeof | result3 | pg_typeof ----------------------------------------------------------------+---------+-----------+---------+----------- {"id": 281474976710657, "label": "", "properties": {}}::vertex | 1 | text | 1 | agtype (1 row) -- Text OpExpr expression node types SELECT * FROM agtype('[1, 2, 3]'::agtype || '[5, 6, 7]'); agtype -------------------- [1, 2, 3, 5, 6, 7] (1 row) SELECT * FROM agtype('[1, 2, 3]'::agtype -> 2); agtype -------- 3 (1 row) SELECT * FROM agtype('{"a": 1, "b": 2}'::agtype -> 'a'::text); agtype -------- 1 (1 row) -- Text BoolExpr expression node types SELECT * FROM bool(true AND false); bool ------ f (1 row) -- Issue 1329 -- returns 1 SELECT agtype_to_int2(bool('true')); agtype_to_int2 ---------------- 1 (1 row) SELECT agtype_to_int4(bool('true')); agtype_to_int4 ---------------- 1 (1 row) SELECT agtype_to_int8(bool('true')); agtype_to_int8 ---------------- 1 (1 row) -- returns 0 SELECT agtype_to_int2(bool('false')); agtype_to_int2 ---------------- 0 (1 row) SELECT agtype_to_int4(bool('false')); agtype_to_int4 ---------------- 0 (1 row) SELECT agtype_to_int8(bool('false')); agtype_to_int8 ---------------- 0 (1 row) -- should error SELECT agtype_to_int2(bool('neither')); ERROR: invalid input syntax for type boolean: "neither" LINE 1: SELECT agtype_to_int2(bool('neither')); ^ SELECT agtype_to_int4(bool('neither')); ERROR: invalid input syntax for type boolean: "neither" LINE 1: SELECT agtype_to_int4(bool('neither')); ^ SELECT agtype_to_int8(bool('neither')); ERROR: invalid input syntax for type boolean: "neither" LINE 1: SELECT agtype_to_int8(bool('neither')); ^ -- -- Cleanup -- SELECT * FROM drop_graph('issue_1124', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table issue_1124._ag_label_vertex drop cascades to table issue_1124._ag_label_edge NOTICE: graph "issue_1124" has been dropped drop_graph ------------ (1 row) SELECT * FROM drop_graph('issue_1303', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table issue_1303._ag_label_vertex drop cascades to table issue_1303._ag_label_edge NOTICE: graph "issue_1303" has been dropped drop_graph ------------ (1 row) SELECT * FROM drop_graph('graph_395', true); NOTICE: drop cascades to 7 other objects DETAIL: drop cascades to table graph_395._ag_label_vertex drop cascades to table graph_395._ag_label_edge drop cascades to table graph_395."Project" drop cascades to table graph_395."Task" drop cascades to table graph_395."Person" drop cascades to table graph_395."Has" drop cascades to table graph_395."AssignedTo" NOTICE: graph "graph_395" has been dropped drop_graph ------------ (1 row) SELECT * FROM drop_graph('chained', true); NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to table chained._ag_label_vertex drop cascades to table chained._ag_label_edge drop cascades to table chained.people NOTICE: graph "chained" has been dropped drop_graph ------------ (1 row) SELECT * FROM drop_graph('VLE', true); NOTICE: drop cascades to 9 other objects DETAIL: drop cascades to table "VLE"._ag_label_vertex drop cascades to table "VLE"._ag_label_edge drop cascades to table "VLE".begin drop cascades to table "VLE".edge drop cascades to table "VLE".middle drop cascades to table "VLE"."end" drop cascades to table "VLE".self_loop drop cascades to table "VLE".alternate_edge drop cascades to table "VLE".bypass_edge NOTICE: graph "VLE" has been dropped drop_graph ------------ (1 row) SELECT * FROM drop_graph('case_statement', true); NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to table case_statement._ag_label_vertex drop cascades to table case_statement._ag_label_edge drop cascades to table case_statement.connected_to NOTICE: graph "case_statement" has been dropped drop_graph ------------ (1 row) SELECT * FROM drop_graph('opt_forms', true); NOTICE: drop cascades to 4 other objects DETAIL: drop cascades to table opt_forms._ag_label_vertex drop cascades to table opt_forms._ag_label_edge drop cascades to table opt_forms."KNOWS" drop cascades to table opt_forms.edge NOTICE: graph "opt_forms" has been dropped drop_graph ------------ (1 row) SELECT * FROM drop_graph('type_coercion', true); NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to table type_coercion._ag_label_vertex drop cascades to table type_coercion._ag_label_edge drop cascades to table type_coercion.edge NOTICE: graph "type_coercion" has been dropped drop_graph ------------ (1 row) SELECT * FROM drop_graph('order_by', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table order_by._ag_label_vertex drop cascades to table order_by._ag_label_edge NOTICE: graph "order_by" has been dropped drop_graph ------------ (1 row) SELECT * FROM drop_graph('group_by', true); NOTICE: drop cascades to 4 other objects DETAIL: drop cascades to table group_by._ag_label_vertex drop cascades to table group_by._ag_label_edge drop cascades to table group_by."row" drop cascades to table group_by."L" NOTICE: graph "group_by" has been dropped drop_graph ------------ (1 row) SELECT * FROM drop_graph('UCSC', true); NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to table "UCSC"._ag_label_vertex drop cascades to table "UCSC"._ag_label_edge drop cascades to table "UCSC".students NOTICE: graph "UCSC" has been dropped drop_graph ------------ (1 row) SELECT * FROM drop_graph('expr', true); NOTICE: drop cascades to 5 other objects DETAIL: drop cascades to table expr._ag_label_vertex drop cascades to table expr._ag_label_edge drop cascades to table expr.v drop cascades to table expr.v1 drop cascades to table expr.e1 NOTICE: graph "expr" has been dropped drop_graph ------------ (1 row) SELECT * FROM drop_graph('regex', true); NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to table regex._ag_label_vertex drop cascades to table regex._ag_label_edge drop cascades to table regex."Person" NOTICE: graph "regex" has been dropped drop_graph ------------ (1 row) SELECT * FROM drop_graph('keys', true); NOTICE: drop cascades to 4 other objects DETAIL: drop cascades to table keys._ag_label_vertex drop cascades to table keys._ag_label_edge drop cascades to table keys.collaborated_with drop cascades to table keys.knows NOTICE: graph "keys" has been dropped drop_graph ------------ (1 row) SELECT * FROM drop_graph('list', true); NOTICE: drop cascades to 8 other objects DETAIL: drop cascades to table list._ag_label_vertex drop cascades to table list._ag_label_edge drop cascades to table list.knows drop cascades to table list."People" drop cascades to table list."Cars" drop cascades to table list.test_label drop cascades to table list.xyz drop cascades to table list."KNOWS" NOTICE: graph "list" has been dropped drop_graph ------------ (1 row) -- -- End of tests -- age-PG16-v1.5.0-rc0/regress/expected/graph_generation.out000066400000000000000000000230271454606241200231240ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path = ag_catalog; SELECT * FROM create_complete_graph('gp1',5,'edges','vertices'); NOTICE: graph "gp1" has been created NOTICE: VLabel "vertices" has been created NOTICE: ELabel "edges" has been created create_complete_graph ----------------------- (1 row) SELECT COUNT(*) FROM gp1."edges"; count ------- 10 (1 row) SELECT COUNT(*) FROM gp1."vertices"; count ------- 5 (1 row) SELECT * FROM cypher('gp1', $$MATCH (a)-[e]->(b) RETURN e$$) as (n agtype); n ---------------------------------------------------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "edges", "end_id": 844424930131970, "start_id": 844424930131969, "properties": {}}::edge {"id": 1125899906842629, "label": "edges", "end_id": 844424930131971, "start_id": 844424930131970, "properties": {}}::edge {"id": 1125899906842626, "label": "edges", "end_id": 844424930131971, "start_id": 844424930131969, "properties": {}}::edge {"id": 1125899906842630, "label": "edges", "end_id": 844424930131972, "start_id": 844424930131970, "properties": {}}::edge {"id": 1125899906842627, "label": "edges", "end_id": 844424930131972, "start_id": 844424930131969, "properties": {}}::edge {"id": 1125899906842632, "label": "edges", "end_id": 844424930131972, "start_id": 844424930131971, "properties": {}}::edge {"id": 1125899906842631, "label": "edges", "end_id": 844424930131973, "start_id": 844424930131970, "properties": {}}::edge {"id": 1125899906842634, "label": "edges", "end_id": 844424930131973, "start_id": 844424930131972, "properties": {}}::edge {"id": 1125899906842633, "label": "edges", "end_id": 844424930131973, "start_id": 844424930131971, "properties": {}}::edge {"id": 1125899906842628, "label": "edges", "end_id": 844424930131973, "start_id": 844424930131969, "properties": {}}::edge (10 rows) SELECT * FROM create_complete_graph('gp1',5,'edges','vertices'); create_complete_graph ----------------------- (1 row) SELECT COUNT(*) FROM gp1."edges"; count ------- 20 (1 row) SELECT COUNT(*) FROM gp1."vertices"; count ------- 10 (1 row) SELECT * FROM create_complete_graph('gp2',5,'edges'); NOTICE: graph "gp2" has been created NOTICE: ELabel "edges" has been created create_complete_graph ----------------------- (1 row) -- SHOULD FAIL SELECT * FROM create_complete_graph('gp3',5, NULL); ERROR: edge label can not be NULL SELECT * FROM create_complete_graph('gp4',NULL,NULL); ERROR: number of nodes can not be NULL SELECT * FROM create_complete_graph(NULL,NULL,NULL); ERROR: graph name can not be NULL -- Should error out because same labels are used for both vertices and edges SELECT * FROM create_complete_graph('gp5',5,'label','label'); ERROR: vertex and edge label can not be same -- DROPPING GRAPHS SELECT drop_graph('gp1', true); NOTICE: drop cascades to 4 other objects DETAIL: drop cascades to table gp1._ag_label_vertex drop cascades to table gp1._ag_label_edge drop cascades to table gp1.vertices drop cascades to table gp1.edges NOTICE: graph "gp1" has been dropped drop_graph ------------ (1 row) SELECT drop_graph('gp2', true); NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to table gp2._ag_label_vertex drop cascades to table gp2._ag_label_edge drop cascades to table gp2.edges NOTICE: graph "gp2" has been dropped drop_graph ------------ (1 row) -- Tests for barbell graph generation SELECT * FROM age_create_barbell_graph('gp1',5,0,'vertices',NULL,'edges',NULL); NOTICE: graph "gp1" has been created NOTICE: VLabel "vertices" has been created NOTICE: ELabel "edges" has been created age_create_barbell_graph -------------------------- (1 row) SELECT COUNT(*) FROM gp1."edges"; count ------- 21 (1 row) SELECT COUNT(*) FROM gp1."vertices"; count ------- 10 (1 row) SELECT * FROM cypher('gp1', $$MATCH (a)-[e]->(b) RETURN e$$) as (n agtype); n ---------------------------------------------------------------------------------------------------------------------------- {"id": 1125899906842625, "label": "edges", "end_id": 844424930131970, "start_id": 844424930131969, "properties": {}}::edge {"id": 1125899906842629, "label": "edges", "end_id": 844424930131971, "start_id": 844424930131970, "properties": {}}::edge {"id": 1125899906842626, "label": "edges", "end_id": 844424930131971, "start_id": 844424930131969, "properties": {}}::edge {"id": 1125899906842627, "label": "edges", "end_id": 844424930131972, "start_id": 844424930131969, "properties": {}}::edge {"id": 1125899906842632, "label": "edges", "end_id": 844424930131972, "start_id": 844424930131971, "properties": {}}::edge {"id": 1125899906842630, "label": "edges", "end_id": 844424930131972, "start_id": 844424930131970, "properties": {}}::edge {"id": 1125899906842634, "label": "edges", "end_id": 844424930131973, "start_id": 844424930131972, "properties": {}}::edge {"id": 1125899906842628, "label": "edges", "end_id": 844424930131973, "start_id": 844424930131969, "properties": {}}::edge {"id": 1125899906842631, "label": "edges", "end_id": 844424930131973, "start_id": 844424930131970, "properties": {}}::edge {"id": 1125899906842633, "label": "edges", "end_id": 844424930131973, "start_id": 844424930131971, "properties": {}}::edge {"id": 1125899906842635, "label": "edges", "end_id": 844424930131975, "start_id": 844424930131974, "properties": {}}::edge {"id": 1125899906842639, "label": "edges", "end_id": 844424930131976, "start_id": 844424930131975, "properties": {}}::edge {"id": 1125899906842636, "label": "edges", "end_id": 844424930131976, "start_id": 844424930131974, "properties": {}}::edge {"id": 1125899906842637, "label": "edges", "end_id": 844424930131977, "start_id": 844424930131974, "properties": {}}::edge {"id": 1125899906842642, "label": "edges", "end_id": 844424930131977, "start_id": 844424930131976, "properties": {}}::edge {"id": 1125899906842640, "label": "edges", "end_id": 844424930131977, "start_id": 844424930131975, "properties": {}}::edge {"id": 1125899906842644, "label": "edges", "end_id": 844424930131978, "start_id": 844424930131977, "properties": {}}::edge {"id": 1125899906842638, "label": "edges", "end_id": 844424930131978, "start_id": 844424930131974, "properties": {}}::edge {"id": 1125899906842641, "label": "edges", "end_id": 844424930131978, "start_id": 844424930131975, "properties": {}}::edge {"id": 1125899906842643, "label": "edges", "end_id": 844424930131978, "start_id": 844424930131976, "properties": {}}::edge {"id": 1125899906842645, "label": "edges", "end_id": 844424930131978, "start_id": 844424930131969, "properties": {}}::edge (21 rows) SELECT * FROM age_create_barbell_graph('gp1',5,0,'vertices',NULL,'edges',NULL); age_create_barbell_graph -------------------------- (1 row) SELECT COUNT(*) FROM gp1."edges"; count ------- 42 (1 row) SELECT COUNT(*) FROM gp1."vertices"; count ------- 20 (1 row) SELECT * FROM age_create_barbell_graph('gp2',5,10,'vertices',NULL,'edges',NULL); NOTICE: graph "gp2" has been created NOTICE: VLabel "vertices" has been created NOTICE: ELabel "edges" has been created age_create_barbell_graph -------------------------- (1 row) -- SHOULD FAIL SELECT * FROM age_create_barbell_graph(NULL,NULL,NULL,NULL,NULL,NULL,NULL); ERROR: Graph name cannot be NULL SELECT * FROM age_create_barbell_graph('gp2',NULL,0,'vertices',NULL,'edges',NULL); ERROR: Graph size cannot be NULL or lower than 3 SELECT * FROM age_create_barbell_graph('gp3',5,NULL,'vertices',NULL,'edges',NULL); ERROR: Bridge size cannot be NULL or lower than 0 SELECT * FROM age_create_barbell_graph('gp4',NULL,0,'vertices',NULL,'edges',NULL); ERROR: Graph size cannot be NULL or lower than 3 SELECT * FROM age_create_barbell_graph('gp5',5,0,'vertices',NULL,NULL,NULL); ERROR: edge label can not be NULL -- Should error out because same labels are used for both vertices and edges SELECT * FROM age_create_barbell_graph('gp6',5,10,'label',NULL,'label',NULL); ERROR: vertex and edge label can not be same -- DROPPING GRAPHS SELECT drop_graph('gp1', true); NOTICE: drop cascades to 4 other objects DETAIL: drop cascades to table gp1._ag_label_vertex drop cascades to table gp1._ag_label_edge drop cascades to table gp1.vertices drop cascades to table gp1.edges NOTICE: graph "gp1" has been dropped drop_graph ------------ (1 row) SELECT drop_graph('gp2', true); NOTICE: drop cascades to 4 other objects DETAIL: drop cascades to table gp2._ag_label_vertex drop cascades to table gp2._ag_label_edge drop cascades to table gp2.vertices drop cascades to table gp2.edges NOTICE: graph "gp2" has been dropped drop_graph ------------ (1 row) age-PG16-v1.5.0-rc0/regress/expected/graphid.out000066400000000000000000000053621454606241200212300ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; -- basic comparisons SELECT '0'::graphid = '0'::graphid, '0'::graphid = '1'::graphid; ?column? | ?column? ----------+---------- t | f (1 row) SELECT '0'::graphid <> '0'::graphid, '0'::graphid <> '1'::graphid; ?column? | ?column? ----------+---------- f | t (1 row) SELECT '0'::graphid < '1'::graphid, '0'::graphid < '0'::graphid, '1'::graphid < '0'::graphid; ?column? | ?column? | ?column? ----------+----------+---------- t | f | f (1 row) SELECT '0'::graphid > '1'::graphid, '0'::graphid > '0'::graphid, '1'::graphid > '0'::graphid; ?column? | ?column? | ?column? ----------+----------+---------- f | f | t (1 row) SELECT '0'::graphid <= '1'::graphid, '0'::graphid <= '0'::graphid, '1'::graphid <= '0'::graphid; ?column? | ?column? | ?column? ----------+----------+---------- t | t | f (1 row) SELECT '0'::graphid >= '1'::graphid, '0'::graphid >= '0'::graphid, '1'::graphid >= '0'::graphid; ?column? | ?column? | ?column? ----------+----------+---------- f | t | t (1 row) -- b-tree index CREATE TABLE graphid_table (gid graphid); INSERT INTO graphid_table VALUES ('0'), ('1'), ('2'); CREATE INDEX ON graphid_table (gid); SET enable_seqscan = OFF; EXPLAIN (COSTS FALSE) SELECT * FROM graphid_table WHERE gid = '1'; QUERY PLAN -------------------------------------------------------------- Index Only Scan using graphid_table_gid_idx on graphid_table Index Cond: (gid = '1'::graphid) (2 rows) EXPLAIN (COSTS FALSE) SELECT * FROM graphid_table WHERE gid > '0'; QUERY PLAN -------------------------------------------------------------- Index Only Scan using graphid_table_gid_idx on graphid_table Index Cond: (gid > '0'::graphid) (2 rows) SET enable_seqscan = ON; DROP TABLE graphid_table; age-PG16-v1.5.0-rc0/regress/expected/index.out000066400000000000000000000354551454606241200207270ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ \! cp -r regress/age_load/data regress/instance/data/age_load LOAD 'age'; SET search_path TO ag_catalog; SET enable_mergejoin = ON; SET enable_hashjoin = ON; SET enable_nestloop = ON; SET enable_seqscan = false; SELECT create_graph('cypher_index'); NOTICE: graph "cypher_index" has been created create_graph -------------- (1 row) /* * Section 1: Unique Index on Properties */ --Section 1 Setup SELECT create_vlabel('cypher_index', 'idx'); NOTICE: VLabel "idx" has been created create_vlabel --------------- (1 row) CREATE UNIQUE INDEX cypher_index_idx_props_uq ON cypher_index.idx(properties); --Test 1 SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); ERROR: duplicate key value violates unique constraint "cypher_index_idx_props_uq" DETAIL: Key (properties)=({"i": 1}) already exists. --Clean Up SELECT * FROM cypher('cypher_index', $$ MATCH(n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) --Test 2 SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}), (:idx {i: 1}) $$) AS (a agtype); ERROR: duplicate key value violates unique constraint "cypher_index_idx_props_uq" DETAIL: Key (properties)=({"i": 1}) already exists. --Clean Up SELECT * FROM cypher('cypher_index', $$ MATCH(n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) --Test 3 --Data Setup SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); a --- (0 rows) SELECT * FROM cypher('cypher_index', $$ CREATE (:idx) $$) AS (a agtype); a --- (0 rows) --Query SELECT * FROM cypher('cypher_index', $$ MATCH(n) SET n.i = 1$$) AS (a agtype); ERROR: duplicate key value violates unique constraint "cypher_index_idx_props_uq" DETAIL: Key (properties)=({"i": 1}) already exists. --Clean Up SELECT * FROM cypher('cypher_index', $$ MATCH(n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) --Test 4 --create a vertex with i = 1 SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); a --- (0 rows) --delete the vertex SELECT * FROM cypher('cypher_index', $$ MATCH(n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) --we should be able to create a new vertex with the same value SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); a --- (0 rows) --data cleanup SELECT * FROM cypher('cypher_index', $$ MATCH(n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * Test 5 * * Same queries as Test 4, only in 1 transaction */ BEGIN TRANSACTION; --create a vertex with i = 1 SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); a --- (0 rows) --delete the vertex SELECT * FROM cypher('cypher_index', $$ MATCH(n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) --we should be able to create a new vertex with the same value SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); a --- (0 rows) COMMIT; --data cleanup SELECT * FROM cypher('cypher_index', $$ MATCH(n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) --Test 6 --create a vertex with i = 1 SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); a --- (0 rows) -- change the value SELECT * FROM cypher('cypher_index', $$ MATCH(n) SET n.i = 2 $$) AS (a agtype); a --- (0 rows) --we should be able to create a new vertex with the same value SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); a --- (0 rows) --validate the data SELECT * FROM cypher('cypher_index', $$ MATCH(n) RETURN n $$) AS (a agtype); a ------------------------------------------------------------------------- {"id": 844424930131979, "label": "idx", "properties": {"i": 2}}::vertex {"id": 844424930131980, "label": "idx", "properties": {"i": 1}}::vertex (2 rows) --data cleanup SELECT * FROM cypher('cypher_index', $$ MATCH(n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * Test 7 * * Same queries as Test 6, only in 1 transaction */ BEGIN TRANSACTION; --create a vertex with i = 1 SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); a --- (0 rows) -- change the value SELECT * FROM cypher('cypher_index', $$ MATCH(n) SET n.i = 2 $$) AS (a agtype); a --- (0 rows) --we should be able to create a new vertex with the same value SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); a --- (0 rows) --validate the data SELECT * FROM cypher('cypher_index', $$ MATCH(n) RETURN n $$) AS (a agtype); a ------------------------------------------------------------------------- {"id": 844424930131981, "label": "idx", "properties": {"i": 2}}::vertex {"id": 844424930131982, "label": "idx", "properties": {"i": 1}}::vertex (2 rows) COMMIT; --validate the data again out of the transaction, just in case SELECT * FROM cypher('cypher_index', $$ MATCH(n) RETURN n $$) AS (a agtype); a ------------------------------------------------------------------------- {"id": 844424930131981, "label": "idx", "properties": {"i": 2}}::vertex {"id": 844424930131982, "label": "idx", "properties": {"i": 1}}::vertex (2 rows) --data cleanup SELECT * FROM cypher('cypher_index', $$ MATCH(n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) --Test 8 --create a vertex with i = 1 SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); a --- (0 rows) -- Use Merge and force an index error SELECT * FROM cypher('cypher_index', $$ MATCH(n) MERGE (n)-[:e]->(:idx {i: n.i}) $$) AS (a agtype); ERROR: duplicate key value violates unique constraint "cypher_index_idx_props_uq" DETAIL: Key (properties)=({"i": 1}) already exists. --data cleanup SELECT * FROM cypher('cypher_index', $$ MATCH(n) DETACH DELETE n $$) AS (a agtype); a --- (0 rows) /* * Section 2: Graphid Indices to Improve Join Performance */ SELECT * FROM cypher('cypher_index', $$ CREATE (us:Country {name: "United States", country_code: "US", life_expectancy: 78.79, gdp: 20.94::numeric}), (ca:Country {name: "Canada", country_code: "CA", life_expectancy: 82.05, gdp: 1.643::numeric}), (mx:Country {name: "Mexico", country_code: "MX", life_expectancy: 75.05, gdp: 1.076::numeric}), (us)<-[:has_city]-(:City {city_id: 1, name:"New York", west_coast: false, country_code:"US"}), (us)<-[:has_city]-(:City {city_id: 2, name:"San Fransisco", west_coast: true, country_code:"US"}), (us)<-[:has_city]-(:City {city_id: 3, name:"Los Angeles", west_coast: true, country_code:"US"}), (us)<-[:has_city]-(:City {city_id: 4, name:"Seattle", west_coast: true, country_code:"US"}), (ca)<-[:has_city]-(:City {city_id: 5, name:"Vancouver", west_coast: true, country_code:"CA"}), (ca)<-[:has_city]-(:City {city_id: 6, name:"Toronto", west_coast: false, country_code:"CA"}), (ca)<-[:has_city]-(:City {city_id: 7, name:"Montreal", west_coast: false, country_code:"CA"}), (mx)<-[:has_city]-(:City {city_id: 8, name:"Mexico City", west_coast: false, country_code:"MX"}), (mx)<-[:has_city]-(:City {city_id: 9, name:"Monterrey", west_coast: false, country_code:"MX"}), (mx)<-[:has_city]-(:City {city_id: 10, name:"Tijuana", west_coast: false, country_code:"MX"}) $$) as (n agtype); n --- (0 rows) ALTER TABLE cypher_index."Country" ADD PRIMARY KEY (id); CREATE UNIQUE INDEX CONCURRENTLY cntry_id_idx ON cypher_index."Country" (id); ALTER TABLE cypher_index."Country" CLUSTER ON cntry_id_idx; ALTER TABLE cypher_index."City" ADD PRIMARY KEY (id); CREATE UNIQUE INDEX city_id_idx ON cypher_index."City" (id); ALTER TABLE cypher_index."City" CLUSTER ON city_id_idx; ALTER TABLE cypher_index.has_city ADD CONSTRAINT has_city_end_fk FOREIGN KEY (end_id) REFERENCES cypher_index."Country"(id) MATCH FULL; CREATE INDEX load_has_city_eid_idx ON cypher_index.has_city (end_id); CREATE INDEX load_has_city_sid_idx ON cypher_index.has_city (start_id); ALTER TABLE cypher_index."has_city" CLUSTER ON load_has_city_eid_idx; SET enable_mergejoin = ON; SET enable_hashjoin = OFF; SET enable_nestloop = OFF; SELECT COUNT(*) FROM cypher('cypher_index', $$ MATCH (a:Country)<-[e:has_city]-() RETURN e $$) as (n agtype); count ------- 10 (1 row) SET enable_mergejoin = OFF; SET enable_hashjoin = ON; SET enable_nestloop = OFF; SELECT COUNT(*) FROM cypher('cypher_index', $$ MATCH (a:Country)<-[e:has_city]-() RETURN e $$) as (n agtype); count ------- 10 (1 row) SET enable_mergejoin = OFF; SET enable_hashjoin = OFF; SET enable_nestloop = ON; SELECT COUNT(*) FROM cypher('cypher_index', $$ MATCH (a:Country)<-[e:has_city]-() RETURN e $$) as (n agtype); count ------- 10 (1 row) SET enable_mergejoin = ON; SET enable_hashjoin = ON; SET enable_nestloop = ON; -- -- Section 3: Agtype GIN Indices to Improve WHERE clause Performance -- CREATE INDEX load_city_gin_idx ON cypher_index."City" USING gin (properties); CREATE INDEX load_country_gin_idx ON cypher_index."Country" USING gin (properties); SELECT * FROM cypher('cypher_index', $$ MATCH (c:City {city_id: 1}) RETURN c $$) as (n agtype); n ------------------------------------------------------------------------------------------------------------------------------------------------ {"id": 1970324836974593, "label": "City", "properties": {"name": "New York", "city_id": 1, "west_coast": false, "country_code": "US"}}::vertex (1 row) SELECT * FROM cypher('cypher_index', $$ MATCH (:Country {country_code: "US"})<-[]-(city:City) RETURN city $$) as (n agtype); n ---------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 1970324836974593, "label": "City", "properties": {"name": "New York", "city_id": 1, "west_coast": false, "country_code": "US"}}::vertex {"id": 1970324836974594, "label": "City", "properties": {"name": "San Fransisco", "city_id": 2, "west_coast": true, "country_code": "US"}}::vertex {"id": 1970324836974595, "label": "City", "properties": {"name": "Los Angeles", "city_id": 3, "west_coast": true, "country_code": "US"}}::vertex {"id": 1970324836974596, "label": "City", "properties": {"name": "Seattle", "city_id": 4, "west_coast": true, "country_code": "US"}}::vertex (4 rows) SELECT * FROM cypher('cypher_index', $$ MATCH (c:City {west_coast: true}) RETURN c $$) as (n agtype); n ---------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 1970324836974594, "label": "City", "properties": {"name": "San Fransisco", "city_id": 2, "west_coast": true, "country_code": "US"}}::vertex {"id": 1970324836974595, "label": "City", "properties": {"name": "Los Angeles", "city_id": 3, "west_coast": true, "country_code": "US"}}::vertex {"id": 1970324836974596, "label": "City", "properties": {"name": "Seattle", "city_id": 4, "west_coast": true, "country_code": "US"}}::vertex {"id": 1970324836974597, "label": "City", "properties": {"name": "Vancouver", "city_id": 5, "west_coast": true, "country_code": "CA"}}::vertex (4 rows) SELECT * FROM cypher('cypher_index', $$ MATCH (c:Country {life_expectancy: 82.05}) RETURN c $$) as (n agtype); n --------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553282, "label": "Country", "properties": {"gdp": 1.643::numeric, "name": "Canada", "country_code": "CA", "life_expectancy": 82.05}}::vertex (1 row) SELECT * FROM cypher('cypher_index', $$ MATCH (c:Country {gdp: 20.94::numeric}) RETURN c $$) as (n agtype); n ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 1407374883553281, "label": "Country", "properties": {"gdp": 20.94::numeric, "name": "United States", "country_code": "US", "life_expectancy": 78.79}}::vertex (1 row) DROP INDEX cypher_index.load_city_gin_idx; DROP INDEX cypher_index.load_country_gin_idx; -- -- Section 4: Index use with WHERE clause -- SELECT COUNT(*) FROM cypher('cypher_index', $$ MATCH (a:City) WHERE a.country_code = 'RS' RETURN a $$) as (n agtype); count ------- 0 (1 row) CREATE INDEX CONCURRENTLY cntry_ode_idx ON cypher_index."City" (ag_catalog.agtype_access_operator(properties, '"country_code"'::agtype)); SELECT COUNT(*) FROM cypher('agload_test_graph', $$ MATCH (a:City) WHERE a.country_code = 'RS' RETURN a $$) as (n agtype); ERROR: graph "agload_test_graph" does not exist LINE 1: SELECT COUNT(*) FROM cypher('agload_test_graph', $$ ^ -- -- General Cleanup -- SELECT drop_graph('cypher_index', true); NOTICE: drop cascades to 6 other objects DETAIL: drop cascades to table cypher_index._ag_label_vertex drop cascades to table cypher_index._ag_label_edge drop cascades to table cypher_index.idx drop cascades to table cypher_index."Country" drop cascades to table cypher_index.has_city drop cascades to table cypher_index."City" NOTICE: graph "cypher_index" has been dropped drop_graph ------------ (1 row) SELECT drop_graph('agload_test_graph', true); ERROR: graph "agload_test_graph" does not exist age-PG16-v1.5.0-rc0/regress/expected/jsonb_operators.out000066400000000000000000003116441454606241200230260ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; -- -- jsonb operators in AGE (?, ?&, ?|, ->, ->>, #>, #>>, ||, @>, <@) -- -- -- Agtype exists operator -- -- exists (?) -- should return 't' SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '"n"'; ?column? ---------- t (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '"a"'; ?column? ---------- t (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '"b"'; ?column? ---------- t (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '"d"'; ?column? ---------- t (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ? '"label"'; ?column? ---------- t (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ? '"n"'; ?column? ---------- t (1 row) SELECT '["1","2"]'::agtype ? '"1"'; ?column? ---------- t (1 row) SELECT '["hello", "world"]'::agtype ? '"hello"'; ?column? ---------- t (1 row) SELECT agtype_exists('{"id": 1}','id'::text); agtype_exists --------------- t (1 row) SELECT '{"id": 1}'::agtype ? 'id'::text; ?column? ---------- t (1 row) -- should return 'f' SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '"e"'; ?column? ---------- f (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '"e1"'; ?column? ---------- f (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '"1"'; ?column? ---------- f (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '1'; ?column? ---------- f (1 row) SELECT '[{"id": 281474976710658, "label": "", "properties": {"n": 100}}]'::agtype ? '"id"'; ?column? ---------- f (1 row) SELECT '[{"id": 281474976710658, "label": "", "properties": {"n": 100}}]'::agtype ? 'null'; ?column? ---------- f (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ? 'null'; ?column? ---------- f (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ? 'null'; ?column? ---------- f (1 row) SELECT '["hello", "world"]'::agtype ? '"hell"'; ?column? ---------- f (1 row) SELECT agtype_exists('{"id": 1}','not_id'::text); agtype_exists --------------- f (1 row) SELECT '{"id": 1}'::agtype ? 'not_id'::text; ?column? ---------- f (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '["e1", "n"]'; ?column? ---------- f (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '["n"]'; ?column? ---------- f (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '["n", "a", "e"]'; ?column? ---------- f (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '{"n": null}'; ?column? ---------- f (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '{"n": null, "b": true}'; ?column? ---------- f (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '["e1"]'; ?column? ---------- f (1 row) -- errors out SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? 'e1'; ERROR: invalid input syntax for type agtype LINE 1: ...a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? 'e1'; ^ DETAIL: Expected agtype value, but found "e1". CONTEXT: agtype data, line 1: e1 SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? 'e'; ERROR: invalid input syntax for type agtype LINE 1: ..."a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? 'e'; ^ DETAIL: Expected agtype value, but found "e". CONTEXT: agtype data, line 1: e -- Exists any (?|) -- should return 't' SELECT '{"a":null, "b":"qq"}'::agtype ?| '["a","b"]'; ?column? ---------- t (1 row) SELECT '{"a":null, "b":"qq"}'::agtype ?| '["b","a"]'; ?column? ---------- t (1 row) SELECT '{"a":null, "b":"qq"}'::agtype ?| '["c","a"]'; ?column? ---------- t (1 row) SELECT '{"1":null, "b":"qq"}'::agtype ?| '["c","1"]'; ?column? ---------- t (1 row) SELECT '{"a":null, "b":"qq"}'::agtype ?| '["a","a", "b", "b", "b"]'::agtype; ?column? ---------- t (1 row) SELECT '[1,2,3]'::agtype ?| '[1,2,3,4]'; ?column? ---------- t (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?| '[null,"id"]'::agtype; ?column? ---------- t (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?| '["id",null]'::agtype; ?column? ---------- t (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?| '[true,"id"]'::agtype; ?column? ---------- t (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?| '[1,"id"]'::agtype; ?column? ---------- t (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?| '[null,null,"n"]'::agtype; ?column? ---------- t (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?| '["n",null]'::agtype; ?column? ---------- t (1 row) SELECT agtype_exists_any('{"id": 1}', array['id']); agtype_exists_any ------------------- t (1 row) SELECT '{"id": 1}'::agtype ?| array['id']; ?column? ---------- t (1 row) -- should return 'f' SELECT '{"a":null, "b":"qq"}'::agtype ?| '["c","d"]'; ?column? ---------- f (1 row) SELECT '{"a":null, "b":"qq"}'::agtype ?| '["1","2"]'; ?column? ---------- f (1 row) SELECT '{"a":null, "b":"qq"}'::agtype ?| '["c","1"]'; ?column? ---------- f (1 row) SELECT '{"a":null, "b":"qq"}'::agtype ?| '[]'; ?column? ---------- f (1 row) SELECT '{"a":null, "b":"qq"}'::agtype ?| '["c","d"]'::agtype; ?column? ---------- f (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?| '[null]'; ?column? ---------- f (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?| '[]'; ?column? ---------- f (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?| '[null,null]'::agtype; ?column? ---------- f (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?| '[null, "idk"]'; ?column? ---------- f (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?| '[""]'; ?column? ---------- f (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex' ?| '[null,"idk"]'::agtype; ?column? ---------- f (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ?| '[null,null,"idk"]'::agtype; ?column? ---------- f (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ?| '["idk",null]'::agtype; ?column? ---------- f (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?| '[null]'; ?column? ---------- f (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?| '[]'; ?column? ---------- f (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?| '[null,null]'::agtype; ?column? ---------- f (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?| '[[""]]'; ?column? ---------- f (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?| '[null,null, "idk"]'::agtype; ?column? ---------- f (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?| '[null,null,"idk"]'::agtype; ?column? ---------- f (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?| '["start_idk",null]'::agtype; ?column? ---------- f (1 row) SELECT '{"a":null, "b":"qq"}'::agtype ?| '[["a"], ["b"]]'; ?column? ---------- f (1 row) SELECT '{"a":null, "b":"qq"}'::agtype ?| '[["a"], ["b"], ["c"]]'; ?column? ---------- f (1 row) SELECT '[null]'::agtype ?| '[null]'::agtype; ?column? ---------- f (1 row) SELECT agtype_exists_any('{"id": 1}', array['not_id']); agtype_exists_any ------------------- f (1 row) SELECT '{"id": 1}'::agtype ?| array['not_id']; ?column? ---------- f (1 row) -- errors out SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ?| '"b"'; ERROR: invalid agtype value for right operand SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ?| '"d"'; ERROR: invalid agtype value for right operand SELECT '{"a":null, "b":"qq"}'::agtype ?| '{"a", "b"}'; ERROR: invalid input syntax for type agtype LINE 1: SELECT '{"a":null, "b":"qq"}'::agtype ?| '{"a", "b"}'; ^ DETAIL: Expected ":", but found ",". CONTEXT: agtype data, line 1: {"a",... SELECT '{"a":null, "b":"qq"}'::agtype ?| ''; ERROR: invalid input syntax for type agtype LINE 1: SELECT '{"a":null, "b":"qq"}'::agtype ?| ''; ^ DETAIL: The input string ended unexpectedly. CONTEXT: agtype data, line 1: SELECT '{"a":null, "b":"qq"}'::agtype ?| '""'; ERROR: invalid agtype value for right operand SELECT '{"a":null, "b":"qq"}'::agtype ?| '{""}'; ERROR: invalid input syntax for type agtype LINE 1: SELECT '{"a":null, "b":"qq"}'::agtype ?| '{""}'; ^ DETAIL: Expected ":", but found "}". CONTEXT: agtype data, line 1: {""} SELECT '{"a":null, "b":"qq"}'::agtype ?| '{}'; ERROR: invalid agtype value for right operand SELECT '{"a":null, "b":"qq"}'::agtype ?| '0'::agtype; ERROR: invalid agtype value for right operand SELECT '{"a":null, "b":"qq"}'::agtype ?| '0'; ERROR: invalid agtype value for right operand -- Exists all (?&) -- should return 't' SELECT '{"a":null, "b":"qq"}'::agtype ?& '["a","b"]'; ?column? ---------- t (1 row) SELECT '{"a":null, "b":"qq"}'::agtype ?& '["b","a"]'; ?column? ---------- t (1 row) SELECT '{"a":null, "b":"qq"}'::agtype ?& '["a","a", "b", "b", "b"]'::agtype; ?column? ---------- t (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?& '[null]'; ?column? ---------- t (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?& '[]'; ?column? ---------- t (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?& '[null,null]'::agtype; ?column? ---------- t (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?& '[null,null,"id"]'::agtype; ?column? ---------- t (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?& '["id",null]'::agtype; ?column? ---------- t (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ?& '[null]'::agtype; ?column? ---------- t (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ?& '[]'; ?column? ---------- t (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ?& '[null,null]'::agtype; ?column? ---------- t (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ?& '[null,null,"n"]'::agtype; ?column? ---------- t (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ?& '["n",null]'::agtype; ?column? ---------- t (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?& '[null]'; ?column? ---------- t (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?& '[]'; ?column? ---------- t (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?& '[null,null]'::agtype; ?column? ---------- t (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?& '[null,null,"n"]'::agtype; ?column? ---------- t (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?& '["n",null]'::agtype; ?column? ---------- t (1 row) SELECT '[1,2,3]'::agtype ?& '[1,2,3]'; ?column? ---------- t (1 row) SELECT '[1,2,3]'::agtype ?& '[1,2,3,null]'; ?column? ---------- t (1 row) SELECT '[1,2,3]'::agtype ?& '[null, null]'; ?column? ---------- t (1 row) SELECT '[1,2,3]'::agtype ?& '[null, null, null]'; ?column? ---------- t (1 row) SELECT '[1,2,3]'::agtype ?& '[]'; ?column? ---------- t (1 row) SELECT '{"a":null, "b":"qq"}'::agtype ?& '[]'; ?column? ---------- t (1 row) SELECT '[null]'::agtype ?& '[null]'::agtype; ?column? ---------- t (1 row) SELECT agtype_exists_all('{"id": 1}', array['id']); agtype_exists_all ------------------- t (1 row) SELECT '{"id": 1}'::agtype ?& array['id']; ?column? ---------- t (1 row) -- should return 'f' SELECT '{"a":null, "b":"qq"}'::agtype ?& '["c","a"]'; ?column? ---------- f (1 row) SELECT '{"a":null, "b":"qq"}'::agtype ?& '["a","b", "c"]'; ?column? ---------- f (1 row) SELECT '{"a":null, "b":"qq"}'::agtype ?& '["c","d"]'::agtype; ?column? ---------- f (1 row) SELECT '[1,2,3]'::agtype ?& '[1,2,3,4]'; ?column? ---------- f (1 row) SELECT '{"a":null, "b":"qq"}'::agtype ?& '[["a"]]'; ?column? ---------- f (1 row) SELECT '{"a":null, "b":"qq"}'::agtype ?& '[["a"], ["b"]]'; ?column? ---------- f (1 row) SELECT '{"a":null, "b":"qq"}'::agtype ?& '[["a"], ["b"], ["c"]]'; ?column? ---------- f (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?& '[null, "idk"]'; ?column? ---------- f (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?& '[""]'; ?column? ---------- f (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex' ?& '[null,"idk"]'::agtype; ?column? ---------- f (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ?& '[null,null,"idk"]'::agtype; ?column? ---------- f (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ?& '["idk",null]'::agtype; ?column? ---------- f (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?& '[1,"id"]'::agtype; ?column? ---------- f (1 row) SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?& '[true,"id"]'::agtype; ?column? ---------- f (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?& '[null, "idk"]'; ?column? ---------- f (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?& '[[""]]'; ?column? ---------- f (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?& '[null,null, "idk"]'::agtype; ?column? ---------- f (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?& '[null,null,"idk"]'::agtype; ?column? ---------- f (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?& '["start_idk",null]'::agtype; ?column? ---------- f (1 row) SELECT '{"a":null, "b":"qq"}'::agtype ?& '[null, "c", "a"]'; ?column? ---------- f (1 row) SELECT agtype_exists_all('{"id": 1}', array['not_id']); agtype_exists_all ------------------- f (1 row) SELECT '{"id": 1}'::agtype ?& array['not_id']; ?column? ---------- f (1 row) -- errors out SELECT '{"a":null, "b":"qq"}'::agtype ?& '"d"'; ERROR: invalid agtype value for right operand SELECT '{"a":null, "b":"qq"}'::agtype ?& '"a"'; ERROR: invalid agtype value for right operand SELECT '{"a":null, "b":"qq"}'::agtype ?& '" "'; ERROR: invalid agtype value for right operand SELECT '{"a":null, "b":"qq"}'::agtype ?& '""'; ERROR: invalid agtype value for right operand SELECT '{"a":null, "b":"qq"}'::agtype ?& '"null"'; ERROR: invalid agtype value for right operand SELECT '{"a":null, "b":"qq"}'::agtype ?& '{"a", "b", "c"}'; ERROR: invalid input syntax for type agtype LINE 1: SELECT '{"a":null, "b":"qq"}'::agtype ?& '{"a", "b", "c"}'; ^ DETAIL: Expected ":", but found ",". CONTEXT: agtype data, line 1: {"a",... SELECT '{"a":null, "b":"qq"}'::agtype ?& '{}'; ERROR: invalid agtype value for right operand SELECT '{"a":null, "b":"qq"}'::agtype ?& '{""}'; ERROR: invalid input syntax for type agtype LINE 1: SELECT '{"a":null, "b":"qq"}'::agtype ?& '{""}'; ^ DETAIL: Expected ":", but found "}". CONTEXT: agtype data, line 1: {""} SELECT '{"a":null, "b":"qq"}'::agtype ?& '{null}'; ERROR: invalid input syntax for type agtype LINE 1: SELECT '{"a":null, "b":"qq"}'::agtype ?& '{null}'; ^ DETAIL: Expected string or "}", but found "null". CONTEXT: agtype data, line 1: {null... SELECT '{"a":null, "b":"qq"}'::agtype ?& '{"null"}'; ERROR: invalid input syntax for type agtype LINE 1: SELECT '{"a":null, "b":"qq"}'::agtype ?& '{"null"}'; ^ DETAIL: Expected ":", but found "}". CONTEXT: agtype data, line 1: {"null"} -- -- Agtype access operators (->, ->>) -- SELECT i, pg_typeof(i) FROM (SELECT '{"bool":true, "array":[1,3,{"bool":false, "int":3, "float":3.14},7], "float":3.14}'::agtype->'array'::text->2->'float'::text as i) a; i | pg_typeof ------+----------- 3.14 | agtype (1 row) SELECT i, pg_typeof(i) FROM (SELECT '{"bool":true, "array":[1,3,{"bool":false, "int":3, "float":3.14},7], "float":3.14}'::agtype->'array'::text->2->>'float'::text as i) a; i | pg_typeof ------+----------- 3.14 | text (1 row) SELECT i, pg_typeof(i) FROM (SELECT '[0, 1]'::agtype->0 as i) a; i | pg_typeof ---+----------- 0 | agtype (1 row) SELECT i, pg_typeof(i) FROM (SELECT '[0, 1]'::agtype->>0 as i) a; i | pg_typeof ---+----------- 0 | text (1 row) /* * access agtype object field or array element (->) */ -- LHS is an object SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype -> '"n"'::agtype; ?column? ---------- null (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype -> '"a"'::agtype; ?column? ---------- 1 (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype -> '"b"'::agtype; ?column? ---------- [1, 2] (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype -> '"c"'::agtype; ?column? ---------- {"1": 2} (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype -> '"d"'::agtype; ?column? --------------- {"1": [2, 3]} (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype -> '"d"'::agtype -> '"1"'::agtype; ?column? ---------- [2, 3] (1 row) SELECT '{"a": [-1, -2, -3]}'::agtype -> 'a'::text; ?column? -------------- [-1, -2, -3] (1 row) SELECT '{"a": 9, "b": 11, "c": {"ca": [[], {}, null]}, "d": true, "1": false}'::agtype -> '"1"'::text::agtype; ?column? ---------- false (1 row) SELECT '{"a": true, "b": null, "c": -1.99, "d": {"e": []}, "1": [{}, [[[]]]], " ": [{}]}'::agtype -> ' '::text; ?column? ---------- [{}] (1 row) SELECT '{"a": true, "b": null, "c": -1.99, "d": {"e": []}, "1": [{}, [[[]]]], " ": [{}]}'::agtype -> '" "'::agtype; ?column? ---------- [{}] (1 row) -- should return null SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype -> '"e"'::agtype; ?column? ---------- (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}, "1": -19}'::agtype -> '1'::agtype; ?column? ---------- (1 row) SELECT '{"a": [{"b": "c"}, {"b": "cc"}]}'::agtype -> '""'::agtype; ?column? ---------- (1 row) SELECT '{"a": [{"b": "c"}, {"b": "cc"}]}'::agtype -> null::text; ?column? ---------- (1 row) SELECT '{"a": [{"b": "c"}, {"b": "cc"}]}'::agtype -> null::int; ?column? ---------- (1 row) SELECT '{"a": [-1, -2, -3]}'::agtype -> '"a"'::text; ?column? ---------- (1 row) SELECT '{"a": 9, "b": 11, "c": {"ca": [[], {}, null]}, "d": true, "1": false}'::agtype -> '1'::text::agtype; ?column? ---------- (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"automatically":{"1":[2,3]}}'::agtype -> '"n"'::agtype -> '"1"'::agtype; ?column? ---------- (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"automatically":{"1":[2,3]}}'::agtype -> '"n"'::agtype -> 1::text; ?column? ---------- (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"automatically":{"1":[2,3]}}'::agtype -> '"n"'::agtype -> '"a"'; ?column? ---------- (1 row) SELECT 'null'::agtype -> '"1"'; ?column? ---------- (1 row) -- LHS is an array SELECT '["a","b","c",[1,2],null]'::agtype -> '0'::agtype; ?column? ---------- "a" (1 row) SELECT '["a","b","c",[1,2],null]'::agtype -> 1; ?column? ---------- "b" (1 row) SELECT '["a","b","c",[1,2],null]'::agtype -> '2'::agtype; ?column? ---------- "c" (1 row) SELECT '["a","b","c",[1,2],null]'::agtype -> 3; ?column? ---------- [1, 2] (1 row) SELECT '["a","b","c",[1,2],null]'::agtype -> '3'::agtype -> '1'::agtype; ?column? ---------- 2 (1 row) SELECT '["a","b","c",[1,2],null]'::agtype -> '3'::agtype -> '-1'::agtype; ?column? ---------- 2 (1 row) SELECT '["a","b","c",[1,2],null]'::agtype -> '3'::agtype -> -1; ?column? ---------- 2 (1 row) SELECT '["a","b","c",[1,2],null]'::agtype -> 4; ?column? ---------- null (1 row) SELECT '["a","b","c",[1,2],null]'::agtype -> '-1'::agtype; ?column? ---------- null (1 row) SELECT '["a","b","c",[1,2],null]'::agtype -> '-5'::agtype; ?column? ---------- "a" (1 row) SELECT '[1, 2, 3]'::agtype -> '1'::text::agtype; ?column? ---------- 2 (1 row) SELECT '[1, 2, 3]'::agtype -> '1'::text::agtype::int; ?column? ---------- 2 (1 row) SELECT '[1, 2, 3]'::agtype -> '1'::text::agtype::int::bool::int; ?column? ---------- 2 (1 row) SELECT '[1, 2, 3]'::agtype -> '1'::text::int; ?column? ---------- 2 (1 row) SELECT '[1, "e", {"a": 1}, {}, [{}, {}, -9]]'::agtype -> true::int; ?column? ---------- "e" (1 row) SELECT '[1, "e", {"a": 1}, {}, [{}, {}, -9]]'::agtype -> 1.9::int; ?column? ---------- {"a": 1} (1 row) SELECT '[1, "e", {"a": 1}, {}, [{}, {}, -9]]'::agtype -> 1.1::int; ?column? ---------- "e" (1 row) SELECT 'true'::agtype -> 0.1::int; ?column? ---------- true (1 row) SELECT 'true'::agtype -> 0; ?column? ---------- true (1 row) SELECT 'true'::agtype -> false::int; ?column? ---------- true (1 row) SELECT 'true'::agtype -> 0.1::int::bool::int; ?column? ---------- true (1 row) SELECT '[1, 9]'::agtype -> -1.2::int; ?column? ---------- 9 (1 row) SELECT 'true'::agtype -> 0.1::bigint::int; ?column? ---------- true (1 row) -- should return null SELECT '["a","b","c",[1,2],null]'::agtype -> '5'::agtype; ?column? ---------- (1 row) SELECT '["a","b","c",[1,2],null]'::agtype -> '-6'::agtype; ?column? ---------- (1 row) SELECT '["a","b","c",[1,2],null]'::agtype -> '"a"'::agtype; ?column? ---------- (1 row) SELECT '"foo"'::agtype -> '1'::agtype; ?column? ---------- (1 row) SELECT '[1, 2, 3, "string", {"a": 1}, {"a": []}]'::agtype -> '5'::text; ?column? ---------- (1 row) SELECT '[1, 2, 3]'::agtype -> '[1]'; ?column? ---------- (1 row) SELECT '[1, "e", {"a": 1}, {}, [{}, {}, -9]]'::agtype -> '{"a": 1}'::agtype; ?column? ---------- (1 row) SELECT 'true'::agtype -> 0::text; ?column? ---------- (1 row) SELECT 'true'::agtype -> false::int::text; ?column? ---------- (1 row) -- LHS is vertex/edge/path SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype -> '"a"'; ?column? ---------- "xyz" (1 row) SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype -> '"e"' -> 'g'::text; ?column? ---------- {} (1 row) SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype -> '"e"' -> 'h'::text -> -1; ?column? ---------- {} (1 row) SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype -> '"e"' -> 'h'::text -> -1 -> 0; ?column? ---------- (1 row) SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype -> '"id"'; ?column? ---------- (1 row) -- access array element nested inside object or object field nested inside array on LHS SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype -> '"d"'::agtype -> '"1"'::agtype -> '1'::agtype; ?column? ---------- 3 (1 row) SELECT '{"a": 9, "b": 11, "c": {"ca": [[], {}, null]}, "d": true}'::agtype -> 'c'::text -> '"ca"'::agtype -> 0; ?column? ---------- [] (1 row) SELECT '{"a":[1, 2, 3], "b": {"c": ["cc", "cd"]}}'::agtype -> '"b"'::agtype -> 'c'::text -> 1 -> 0; ?column? ---------- "cd" (1 row) SELECT '{"a":[1, 2, 3], "b": {"c": 1}}'::agtype -> '"b"'::agtype -> 1; ?column? ---------- (1 row) /* * access agtype object field or array element as text (->>) */ -- LHS is an object SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ->> '"a"'::agtype; ?column? ---------- 1 (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ->> '"d"'::agtype; ?column? --------------- {"1": [2, 3]} (1 row) SELECT '{"1": -1.99, "a": 1, "b": 2, "c": {"d": [{}, [[[], [9]]]]}, "1": true}'::agtype ->> '"1"'; ?column? ---------- true (1 row) SELECT '{"1": -1.99, "a": 1, "b": 2, "c": {"d": [{}, [[[], [9]]]]}, "1": true}'::agtype ->> '1'::text; ?column? ---------- true (1 row) -- should return null SELECT '{"1": -1.99, "a": 1, "b": 2, "c": {"d": [{}, [[[], [9]]]]}, "1": true}'::agtype ->> 1; ?column? ---------- (1 row) SELECT '{"1": -1.99, "a": 1, "b": 2, "c": {"d": [{}, [[[], [9]]]]}, "1": true}'::agtype ->> '1'; ?column? ---------- (1 row) SELECT '{"a": [{"b": "c"}, {"b": "cc"}]}'::agtype ->> null::text; ?column? ---------- (1 row) SELECT '{"a": [{"b": "c"}, {"b": "cc"}]}'::agtype ->> null::int; ?column? ---------- (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"automatically":{"1":[2,3]}}'::agtype -> '"n"'::agtype ->> '"1"'::agtype; ?column? ---------- (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"automatically":{"1":[2,3]}}'::agtype -> '"n"'::agtype ->> 1::text; ?column? ---------- (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"automatically":{"1":[2,3]}}'::agtype -> '"n"'::agtype ->> '"a"'; ?column? ---------- (1 row) SELECT 'null'::agtype ->> '"1"'; ?column? ---------- (1 row) -- LHS is an array SELECT '["a","b","c",[1,2],null]'::agtype ->> 0; ?column? ---------- a (1 row) SELECT '["a","b","c",[1,2],null]'::agtype ->> '1'::agtype; ?column? ---------- b (1 row) SELECT '["a","b","c",[1,2],null]'::agtype ->> '2'::int; ?column? ---------- c (1 row) SELECT '["a","b","c",[1,2],null]'::agtype ->> 3::int; ?column? ---------- [1, 2] (1 row) SELECT '["a","b","c",[1,2],null]'::agtype ->> '4'::agtype; ?column? ---------- (1 row) SELECT '[1, 2, "e", true, null, {"a": true, "b": {}, "c": [{}, [[], {}]]}, null]'::agtype ->> 0.1::float::bigint::int; ?column? ---------- 1 (1 row) SELECT '"foo"'::agtype ->> '0'::agtype; ?column? ---------- foo (1 row) SELECT '[false, {}]'::agtype ->> 1::bool::int::bigint::int; ?column? ---------- {} (1 row) -- should return null SELECT '["a","b","c",[1,2],null]'::agtype ->> '-1'::agtype; ?column? ---------- (1 row) SELECT '[1, 2, "e", true, null, {"a": true, "b": {}, "c": [{}, [[], {}]]}, null]'::agtype ->> 2::text; ?column? ---------- (1 row) SELECT '[1, 2, "e", true, null, {"a": true, "b": {}, "c": [{}, [[], {}]]}, null]'::agtype ->> '2'::text; ?column? ---------- (1 row) SELECT '[1, 2, "e", true, null, {"a": true, "b": {}, "c": [{}, [[], {}]]}, null]'::agtype ->> 'null'::text; ?column? ---------- (1 row) SELECT '"foo"'::agtype ->> '1'::agtype; ?column? ---------- (1 row) -- LHS is vertex/edge/path SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype ->> '"a"'; ?column? ---------- xyz (1 row) SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype ->> '"id"'; ?column? ---------- (1 row) -- using -> and ->> in single query SELECT '{"1": -1.99, "a": 1, "b": 2, "c": {"d": [{}, [[[], [9]]]]}}'::agtype -> '"1"' ->> '0'; ?column? ---------- -1.99 (1 row) SELECT '["a","b","c",[1,2],null]'::agtype -> '3'::agtype ->> '1'::agtype; ?column? ---------- 2 (1 row) SELECT ('["a","b","c",[1,2],null]'::agtype -> '3'::agtype) ->> 0; ?column? ---------- 1 (1 row) SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype -> '"d"'::agtype ->> '1'::agtype; ?column? ---------- (1 row) SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype -> '"e"' -> 'h'::text -> -1 ->> 0; ?column? ---------- (1 row) -- should give error SELECT '["a","b","c",[1,2],null]'::agtype ->> '3'::agtype ->> '1'::agtype; ERROR: operator does not exist: text ->> agtype LINE 1: ...["a","b","c",[1,2],null]'::agtype ->> '3'::agtype ->> '1'::a... ^ HINT: No operator matches the given name and argument types. You might need to add explicit type casts. SELECT '["a","b","c",[1,2],null]'::agtype ->> '3'::agtype -> '1'::agtype; ERROR: operator does not exist: text -> agtype LINE 1: ...["a","b","c",[1,2],null]'::agtype ->> '3'::agtype -> '1'::ag... ^ HINT: No operator matches the given name and argument types. You might need to add explicit type casts. SELECT '[1, 2, "e", true, null, {"a": true, "b": {}, "c": [{}, [[], {}]]}, null]'::agtype ->> 0.1::float::bigint; ERROR: operator does not exist: agtype ->> bigint LINE 1: ...ue, "b": {}, "c": [{}, [[], {}]]}, null]'::agtype ->> 0.1::f... ^ HINT: No operator matches the given name and argument types. You might need to add explicit type casts. SELECT '{"a": [{"b": "c"}, {"b": "cc"}]}'::agtype ->> "'z'"::agtype; ERROR: column "'z'" does not exist LINE 1: ...CT '{"a": [{"b": "c"}, {"b": "cc"}]}'::agtype ->> "'z'"::agt... ^ -- -- Agtype path extraction operators (#>, #>>) -- /* * #> operator to return the extracted value as agtype */ SELECT pg_typeof('{"a":"b","c":[1,2,3]}'::agtype #> '["a"]'); pg_typeof ----------- agtype (1 row) SELECT pg_typeof('[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[-1,"5"]'); pg_typeof ----------- agtype (1 row) -- left operand is agtype object, right operand should be an array of strings SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '["a"]'; ?column? ---------- "b" (1 row) SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '["c"]'; ?column? ----------- [1, 2, 3] (1 row) SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '[]'; ?column? ---------------------------- {"a": "b", "c": [1, 2, 3]} (1 row) SELECT '{"0": true}'::agtype #> '["0"]'; ?column? ---------- true (1 row) SELECT '{"a":"b","c":{"d": [1,2,3]}}'::agtype #> '["c", "d"]'; ?column? ----------- [1, 2, 3] (1 row) SELECT '{"a":"b","c":{"d": {"e": -1}}}'::agtype #> '["c", "d", "e"]'; ?column? ---------- -1 (1 row) -- left operand is vertex/edge/path, right operand should be an array of strings SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype #> '[]'; ?column? --------------------------------------------------------------------------------------------------------------------------- {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}} (1 row) SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype #> '["e", "h", -2]'; ?column? ---------- [] (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"a": "xyz", "b" : true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::edge'::agtype #> '[]'; ?column? --------------------------------------------------------------------------------------------------------------------------- {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}} (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"a": "xyz", "b" : true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::edge'::agtype #> '["i", "k", "l"]'; ?column? ---------- "mnopq" (1 row) -- left operand is agtype array, right operand should be an array of integers or valid integer strings SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[0]'; ?column? ---------- 0 (1 row) SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[4]'; ?column? --------------- {"5": "five"} (1 row) SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[]'; ?column? ---------------------------------- [0, 1, 2, [3, 4], {"5": "five"}] (1 row) SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[-2]'; ?column? ---------- [3, 4] (1 row) SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[-2, -1]'; ?column? ---------- 4 (1 row) SELECT '[[-3, 1]]'::agtype #> '[0, 1]'; ?column? ---------- 1 (1 row) SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '["0"]'; ?column? ---------- 0 (1 row) SELECT '[[-3, 1]]'::agtype #> '["0", "1"]'; ?column? ---------- 1 (1 row) SELECT '[[-3, 1]]'::agtype #> '["0", 1]'; ?column? ---------- 1 (1 row) SELECT '[[-3, 1]]'::agtype #> '["0", "-1"]'; ?column? ---------- 1 (1 row) -- path extraction pattern for arrays nested in object or object nested in array as left operand -- having object at top level SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '["c",0]'; ?column? ---------- 1 (1 row) SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '["c",-3]'; ?column? ---------- 1 (1 row) SELECT '{"a":["b"],"c":[1,2,3]}'::agtype #> '["a", 0]'; ?column? ---------- "b" (1 row) SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3]]]}'::agtype #> '["1", 2, 0, 0]'; ?column? ---------- -3 (1 row) SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": true}]]]}'::agtype #> '["1", -1, -1, -1, "a"]'; ?column? ---------- true (1 row) SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a"]'; ?column? -------------------------------------------------- {"b": {"d": [-1.9::numeric, false]}, "c": "foo"} (1 row) SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a", "c"]'; ?column? ---------- "foo" (1 row) SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a", "b", "d", -2]'; ?column? --------------- -1.9::numeric (1 row) -- having array at top level SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[4,"5"]'; ?column? ---------- "five" (1 row) SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[-1,"5"]'; ?column? ---------- "five" (1 row) SELECT '[0,1,2,[3,4],{"5":["five", "six"]}]'::agtype #> '[-1,"5",-1]'; ?column? ---------- "six" (1 row) -- should return null SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '[0]'; ?column? ---------- (1 row) SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '["c",3]'; ?column? ---------- (1 row) SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '["c","3"]'; ?column? ---------- (1 row) SELECT '{"a":"b","c":[1,2,3,4]}'::agtype #> '["c",4]'; ?column? ---------- (1 row) SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '["c",-4]'; ?column? ---------- (1 row) SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '["a","b"]'; ?column? ---------- (1 row) SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '["a","c"]'; ?column? ---------- (1 row) SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '["a", []]'; ?column? ---------- (1 row) SELECT '{"a":["b"],"c":[1,2,3]}'::agtype #> '["a", []]'; ?column? ---------- (1 row) SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a", "c", "d"]'; ?column? ---------- (1 row) SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a", "b", "d", -2, 0]'; ?column? ---------- (1 row) SELECT '{"0": true}'::agtype #> '[0]'; ?column? ---------- (1 row) SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '[null]'; ?column? ---------- (1 row) SELECT '{}'::agtype #> '[null]'; ?column? ---------- (1 row) SELECT '{}'::agtype #> '[{}]'; ?column? ---------- (1 row) SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype #> '["id"]'; ?column? ---------- (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"a": "xyz", "b" : true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::edge'::agtype #> '["start_id"]'; ?column? ---------- (1 row) SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[4,5]'; ?column? ---------- (1 row) SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[-1,5]'; ?column? ---------- (1 row) SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[3, -1, 0]'; ?column? ---------- (1 row) SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[{}]'::agtype; ?column? ---------- (1 row) SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[{"5":"five"}]'::agtype; ?column? ---------- (1 row) SELECT '[0,1,2,[3,4],{"5":"five"},6,7]'::agtype #> '["6", "7"]'::agtype; ?column? ---------- (1 row) SELECT '[0,1,2,[3,4],{"5":"five"},6,7]'::agtype #> '[6, 7]'::agtype; ?column? ---------- (1 row) SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[null]'; ?column? ---------- (1 row) SELECT '[null]'::agtype #> '[null]'; ?column? ---------- (1 row) SELECT '[]'::agtype #> '[null]'; ?column? ---------- (1 row) SELECT '[[-3, 1]]'::agtype #> '["0", "1.1"]'; ?column? ---------- (1 row) SELECT '[[-3, 1]]'::agtype #> '["0", "true"]'; ?column? ---------- (1 row) SELECT '[[-3, 1]]'::agtype #> '["0", "string"]'; ?column? ---------- (1 row) SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a", "b", "d", "false"]'; ?column? ---------- (1 row) SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a", "b", "d", "a"]'; ?column? ---------- (1 row) -- errors out SELECT '{"0": true}'::agtype #> '"0"'; ERROR: right operand must be an array SELECT '{"n": 1}'::agtype #> '{"n": 1}'; ERROR: right operand must be an array SELECT '[{"n": 1}]'::agtype #> '{"n": 1}'; ERROR: right operand must be an array SELECT '[{"n": 100}]'::agtype #> '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'; ERROR: right operand must be an array SELECT '-19'::agtype #> '[-1]'::agtype; ERROR: scalar object must be a vertex or edge SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype #> '"a"'; ERROR: right operand must be an array /* * #>> operator to return the extracted value as text */ SELECT pg_typeof('{"a":"b","c":[1,2,3]}'::agtype #>> '["a"]'); pg_typeof ----------- text (1 row) SELECT pg_typeof('[0,1,2,[3,4],{"5":"five"}]'::agtype #>> '[-1,"5"]'); pg_typeof ----------- text (1 row) /* * All the tests added for #> are also valid for #>> */ /* * test the combination of #> and #>> operators below * (left and right operands have to be agtype for #> and #>>, * errors out when left operand is a text, i.e., the output of #>> operator) */ SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a"]' #> '["b", "d", -1]'; ?column? ---------- false (1 row) SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a"]' #> '["b", "d", "-1"]'; ?column? ---------- false (1 row) SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a"]' #>> '["b", "d", -1]'; ?column? ---------- false (1 row) SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a"]' #>> '["b", "d", "-1"]'; ?column? ---------- false (1 row) SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype #> '["e"]' #>> '["h", "-1"]'; ?column? ---------- {} (1 row) SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype #> '["e"]' #> '["h", "-1"]' #>> '[]'; ?column? ---------- {} (1 row) SELECT '[[-3, [1]]]'::agtype #> '["0", "1"]' #>> '[]'; ?column? ---------- [1] (1 row) SELECT '[[-3, [1]]]'::agtype #> '["0", "1"]' #>> '[-1]'; ?column? ---------- 1 (1 row) -- errors out SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #>> '[-1, "5"]' #> '[]'; ERROR: operator does not exist: text #> unknown LINE 1: ...[0,1,2,[3,4],{"5":"five"}]'::agtype #>> '[-1, "5"]' #> '[]'; ^ HINT: No operator matches the given name and argument types. You might need to add explicit type casts. SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #>> '["1", -1, -1, -1, "a"]' #> '["b", "d", -1]'; ERROR: operator does not exist: text #> unknown LINE 1: ..."foo"}}]]]}'::agtype #>> '["1", -1, -1, -1, "a"]' #> '["b", ... ^ HINT: No operator matches the given name and argument types. You might need to add explicit type casts. -- -- concat || operator -- SELECT i, pg_typeof(i) FROM (SELECT '[0, 1]'::agtype || '[0, 1]'::agtype as i) a; i | pg_typeof --------------+----------- [0, 1, 0, 1] | agtype (1 row) SELECT i, pg_typeof(i) FROM (SELECT '2'::agtype || '[0, 1]'::agtype as i) a; i | pg_typeof -----------+----------- [2, 0, 1] | agtype (1 row) SELECT i, pg_typeof(i) FROM (SELECT '[0, 1]'::agtype || '2'::agtype as i) a; i | pg_typeof -----------+----------- [0, 1, 2] | agtype (1 row) SELECT i, pg_typeof(i) FROM (SELECT '{"a": 1}'::agtype || '[0, 1]'::agtype as i) a; i | pg_typeof ------------------+----------- [{"a": 1}, 0, 1] | agtype (1 row) SELECT i, pg_typeof(i) FROM (SELECT '[0, 1]'::agtype || '{"a": 1}'::agtype as i) a; i | pg_typeof ------------------+----------- [0, 1, {"a": 1}] | agtype (1 row) SELECT i, pg_typeof(i) FROM (SELECT '[]'::agtype || '[0, 1]'::agtype as i) a; i | pg_typeof --------+----------- [0, 1] | agtype (1 row) SELECT i, pg_typeof(i) FROM (SELECT '[0, 1]'::agtype || '[]'::agtype as i) a; i | pg_typeof --------+----------- [0, 1] | agtype (1 row) SELECT i, pg_typeof(i) FROM (SELECT 'null'::agtype || '[0, 1]'::agtype as i) a; i | pg_typeof --------------+----------- [null, 0, 1] | agtype (1 row) SELECT i, pg_typeof(i) FROM (SELECT '[0, 1]'::agtype || 'null'::agtype as i) a; i | pg_typeof --------------+----------- [0, 1, null] | agtype (1 row) SELECT i, pg_typeof(i) FROM (SELECT '[null]'::agtype || '[0, 1]'::agtype as i) a; i | pg_typeof --------------+----------- [null, 0, 1] | agtype (1 row) SELECT i, pg_typeof(i) FROM (SELECT '[0, 1]'::agtype || '[null]'::agtype as i) a; i | pg_typeof --------------+----------- [0, 1, null] | agtype (1 row) SELECT i, pg_typeof(i) FROM (SELECT NULL || '[0, 1]'::agtype as i) a; i | pg_typeof ---+----------- | agtype (1 row) SELECT i, pg_typeof(i) FROM (SELECT '[0, 1]'::agtype || NULL as i) a; i | pg_typeof ---+----------- | agtype (1 row) -- both operands are objects SELECT '{"aa":1 , "b":2, "cq":3}'::agtype || '{"cq":"l", "b":"g", "fg":false}'; ?column? --------------------------------------------- {"b": "g", "aa": 1, "cq": "l", "fg": false} (1 row) SELECT '{"aa":1 , "b":2, "cq":3}'::agtype || '{"aq":"l"}'; ?column? --------------------------------------- {"b": 2, "aa": 1, "aq": "l", "cq": 3} (1 row) SELECT '{"aa":1 , "b":2, "cq":3}'::agtype || '{"aa":"l"}'; ?column? ------------------------------ {"b": 2, "aa": "l", "cq": 3} (1 row) SELECT '{"aa":1 , "b":2, "cq":3}'::agtype || '{}'; ?column? ---------------------------- {"b": 2, "aa": 1, "cq": 3} (1 row) SELECT '{"aa":1 , "b":2, "cq":3, "cj": {"fg": true}}'::agtype || '{"cq":"l", "b":"g", "fg":false}'; ?column? ----------------------------------------------------------------- {"b": "g", "aa": 1, "cj": {"fg": true}, "cq": "l", "fg": false} (1 row) SELECT '{"a": 13}'::agtype || '{"a": 13}'::agtype; ?column? ----------- {"a": 13} (1 row) SELECT '{}'::agtype || '{"a":"b"}'::agtype; ?column? ------------ {"a": "b"} (1 row) SELECT '{}'::agtype || '{}'::agtype; ?column? ---------- {} (1 row) -- both operands are arrays SELECT '["a", "b"]'::agtype || '["c"]'; ?column? ----------------- ["a", "b", "c"] (1 row) SELECT '["a", "b"]'::agtype || '["c", "d"]'; ?column? ---------------------- ["a", "b", "c", "d"] (1 row) SELECT '["a", "b"]'::agtype || '["c", "d", "d"]'; ?column? --------------------------- ["a", "b", "c", "d", "d"] (1 row) SELECT '["c"]' || '["a", "b"]'::agtype; ?column? ----------------- ["c", "a", "b"] (1 row) SELECT '[]'::agtype || '["a"]'::agtype; ?column? ---------- ["a"] (1 row) SELECT '[]'::agtype || '[]'::agtype; ?column? ---------- [] (1 row) SELECT '["a", "b"]'::agtype || '"c"'; ?column? ----------------- ["a", "b", "c"] (1 row) SELECT '"c"' || '["a", "b"]'::agtype; ?column? ----------------- ["c", "a", "b"] (1 row) SELECT '[]'::agtype || '"a"'::agtype; ?column? ---------- ["a"] (1 row) SELECT '"b"'::agtype || '"a"'::agtype; ?column? ------------ ["b", "a"] (1 row) SELECT '3'::agtype || '[]'::agtype; ?column? ---------- [3] (1 row) SELECT '3'::agtype || '4'::agtype; ?column? ---------- [3, 4] (1 row) SELECT '3'::agtype || '[4]'; ?column? ---------- [3, 4] (1 row) SELECT '3::numeric'::agtype || '[[]]'::agtype; ?column? ------------------ [3::numeric, []] (1 row) SELECT null::agtype || null::agtype; ?column? ---------- (1 row) -- array and object as operands SELECT '{"aa":1 , "b":2, "cq":3}'::agtype || '[{"aa":"l"}]'; ?column? ------------------------------------------- [{"b": 2, "aa": 1, "cq": 3}, {"aa": "l"}] (1 row) SELECT '{"aa":1 , "b":2, "cq":3}'::agtype || '[{"aa":"l", "aa": "k"}]'; ?column? ------------------------------------------- [{"b": 2, "aa": 1, "cq": 3}, {"aa": "k"}] (1 row) SELECT '{"a": 13}'::agtype || '[{"a": 13}]'::agtype; ?column? ------------------------ [{"a": 13}, {"a": 13}] (1 row) SELECT '[]'::agtype || '{"a":"b"}'::agtype; ?column? -------------- [{"a": "b"}] (1 row) SELECT '{"a":"b"}'::agtype || '[]'::agtype; ?column? -------------- [{"a": "b"}] (1 row) SELECT '[]'::agtype || '{}'::agtype; ?column? ---------- [{}] (1 row) SELECT '[3]'::agtype || '{}'::agtype; ?column? ---------- [3, {}] (1 row) SELECT '{}'::agtype || '[null]'::agtype; ?column? ------------ [{}, null] (1 row) SELECT '[null]'::agtype || '{"a": null}'::agtype; ?column? --------------------- [null, {"a": null}] (1 row) SELECT '""'::agtype || '[]'::agtype; ?column? ---------- [""] (1 row) -- vertex/edge/path as operand(s) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"a": "xyz", "b" : true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::edge'::agtype || '"id"'; ?column? ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::edge, "id"] (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"a": "xyz", "b" : true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::edge'::agtype || '"m"'; ?column? ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::edge, "m"] (1 row) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"a": "xyz", "b" : true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::edge'::agtype || '{"m": []}'; ?column? ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::edge, {"m": []}] (1 row) SELECT '{"id": 844424930131969, "label": "v", "properties": {}}::vertex'::agtype || '{"id": 844424930131971, "label": "v", "properties": {"key": "value"}}::vertex'::agtype; ?column? -------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 844424930131969, "label": "v", "properties": {}}::vertex, {"id": 844424930131971, "label": "v", "properties": {"key": "value"}}::vertex] (1 row) SELECT '{"id": 844424930131969, "label": "v", "properties": {}}::vertex'::agtype || '[]'::agtype; ?column? ------------------------------------------------------------------- [{"id": 844424930131969, "label": "v", "properties": {}}::vertex] (1 row) SELECT '{"id": 844424930131969, "label": "v", "properties": {}}::vertex'::agtype || '{}'::agtype; ?column? ----------------------------------------------------------------------- [{"id": 844424930131969, "label": "v", "properties": {}}::vertex, {}] (1 row) SELECT '{}'::agtype || '{"id": 844424930131969, "label": "v", "properties": {}}::vertex'::agtype; ?column? ----------------------------------------------------------------------- [{}, {"id": 844424930131969, "label": "v", "properties": {}}::vertex] (1 row) SELECT '"id"'::agtype || '{"id": 844424930131969, "label": "v", "properties": {}}::vertex'::agtype; ?column? ------------------------------------------------------------------------- ["id", {"id": 844424930131969, "label": "v", "properties": {}}::vertex] (1 row) SELECT '{"id": 844424930131969, "label": "v", "properties": {}}::vertex'::agtype || '{"id": 1688849860263950, "label": "e_var", "end_id": 281474976710662, "start_id": 281474976710661, "properties": {}}::edge'::agtype; ?column? ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 844424930131969, "label": "v", "properties": {}}::vertex, {"id": 1688849860263950, "label": "e_var", "end_id": 281474976710662, "start_id": 281474976710661, "properties": {}}::edge] (1 row) SELECT '[{"id": 281474976710672, "label": "", "properties": {}}::vertex, {"id": 1688849860263960, "label": "e_var", "end_id": 281474976710673, "start_id": 281474976710672, "properties": {}}::edge, {"id": 281474976710673, "label": "", "properties": {}}::vertex]::path'::agtype || '{"id": 844424930131969, "label": "v", "properties": {}}::vertex'::agtype; ?column? --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [[{"id": 281474976710672, "label": "", "properties": {}}::vertex, {"id": 1688849860263960, "label": "e_var", "end_id": 281474976710673, "start_id": 281474976710672, "properties": {}}::edge, {"id": 281474976710673, "label": "", "properties": {}}::vertex]::path, {"id": 844424930131969, "label": "v", "properties": {}}::vertex] (1 row) SELECT '[{"id": 281474976710672, "label": "", "properties": {}}::vertex, {"id": 1688849860263960, "label": "e_var", "end_id": 281474976710673, "start_id": 281474976710672, "properties": {}}::edge, {"id": 281474976710673, "label": "", "properties": {}}::vertex]::path'::agtype || '[{"id": 281474976710672, "label": "", "properties": {}}::vertex, {"id": 1688849860263960, "label": "e_var", "end_id": 281474976710673, "start_id": 281474976710672, "properties": {}}::edge, {"id": 281474976710673, "label": "", "properties": {}}::vertex]::path'::agtype; ?column? ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [[{"id": 281474976710672, "label": "", "properties": {}}::vertex, {"id": 1688849860263960, "label": "e_var", "end_id": 281474976710673, "start_id": 281474976710672, "properties": {}}::edge, {"id": 281474976710673, "label": "", "properties": {}}::vertex]::path, [{"id": 281474976710672, "label": "", "properties": {}}::vertex, {"id": 1688849860263960, "label": "e_var", "end_id": 281474976710673, "start_id": 281474976710672, "properties": {}}::edge, {"id": 281474976710673, "label": "", "properties": {}}::vertex]::path] (1 row) -- using concat more than once in a query SELECT '{}'::agtype || '{}'::agtype || '[{}]'::agtype; ?column? ---------- [{}, {}] (1 row) SELECT '{"y": {}}'::agtype || '{"b": "5"}'::agtype || '{"a": {}}'::agtype || '{"z": []}'::agtype; ?column? --------------------------------------- {"a": {}, "b": "5", "y": {}, "z": []} (1 row) SELECT '{"y": {}}'::agtype || '{"b": "5"}'::agtype || '{"a": {}}'::agtype || '{"z": []}'::agtype || '[]'::agtype; ?column? ----------------------------------------- [{"a": {}, "b": "5", "y": {}, "z": []}] (1 row) SELECT '{"y": {}}'::agtype || '{"b": "5"}'::agtype || '{"a": {}}'::agtype || '{"z": []}'::agtype || '[]'::agtype || '{}'; ?column? --------------------------------------------- [{"a": {}, "b": "5", "y": {}, "z": []}, {}] (1 row) SELECT '"e"'::agtype || '1'::agtype || '{}'::agtype; ?column? -------------- ["e", 1, {}] (1 row) SELECT ('"e"'::agtype || '1'::agtype) || '{"[]": "p"}'::agtype; ?column? ----------------------- ["e", 1, {"[]": "p"}] (1 row) SELECT '{"{}": {"a": []}}'::agtype || '{"{}": {"[]": []}}'::agtype || '{"{}": {}}'::agtype; ?column? ------------ {"{}": {}} (1 row) SELECT '{}'::agtype || '{}'::agtype || '[{}]'::agtype || '[{}]'::agtype || '{}'::agtype; ?column? ------------------ [{}, {}, {}, {}] (1 row) -- should give an error SELECT '{"a": 13}'::agtype || 'null'::agtype; ERROR: invalid right operand for agtype concatenation SELECT '"a"'::agtype || '{"a":1}'; ERROR: invalid left operand for agtype concatenation SELECT '3'::agtype || '{}'::agtype; ERROR: invalid left operand for agtype concatenation SELECT '{"a":1}' || '"a"'::agtype; ERROR: invalid right operand for agtype concatenation SELECT '{"b": [1, 2, {"[{}, {}]": "a"}, {"1": {}}]}'::agtype || true::agtype; ERROR: invalid right operand for agtype concatenation SELECT '{"b": [1, 2, {"[{}, {}]": "a"}, {"1": {}}]}'::agtype || 'true'::agtype; ERROR: invalid right operand for agtype concatenation SELECT '{"b": [1, 2, {"[{}, {}]": "a"}, {"1": {}}]}'::agtype || age_agtype_sum('1', '2'); ERROR: invalid right operand for agtype concatenation SELECT ('{"a": "5"}'::agtype || '{"a": {}}'::agtype) || '5'::agtype; ERROR: invalid right operand for agtype concatenation SELECT ('{"a": "5"}'::agtype || '{"a": {}}'::agtype || '5') || '[5]'::agtype; ERROR: invalid right operand for agtype concatenation -- both operands have to be of agtype SELECT '3'::agtype || 4; ERROR: operator does not exist: agtype || integer LINE 1: SELECT '3'::agtype || 4; ^ HINT: No operator matches the given name and argument types. You might need to add explicit type casts. SELECT '3'::agtype || true; ERROR: operator does not exist: agtype || boolean LINE 1: SELECT '3'::agtype || true; ^ HINT: No operator matches the given name and argument types. You might need to add explicit type casts. -- -- Agtype containment operator -- /* * right contains @> operator */ -- returns true SELECT '{"a":"b", "b":1, "c":null}'::agtype @> '{"a":"b"}'; ?column? ---------- t (1 row) SELECT '{"a":"b", "b":1, "c":null}'::agtype @> '{"a":"b", "c":null}'; ?column? ---------- t (1 row) SELECT '{"a":"b", "b":1, "c":null}'::agtype @> '{}'; ?column? ---------- t (1 row) SELECT '{"name": "Bob", "tags": ["enim", "qui"]}'::agtype @> '{"tags":["qui"]}'; ?column? ---------- t (1 row) SELECT '{"name": "Bob", "tags": ["enim", "qui"]}'::agtype @> '{"tags":[]}'; ?column? ---------- t (1 row) SELECT '[1,2]'::agtype @> '[1,2,2]'::agtype; ?column? ---------- t (1 row) SELECT '[1,1,2]'::agtype @> '[1,2,2]'::agtype; ?column? ---------- t (1 row) SELECT '[[1,2]]'::agtype @> '[[1,2,2]]'::agtype; ?column? ---------- t (1 row) SELECT '[1,2,2]'::agtype @> '[]'::agtype; ?column? ---------- t (1 row) SELECT '[[1,2]]'::agtype @> '[[]]'::agtype; ?column? ---------- t (1 row) SELECT '[[1,2]]'::agtype @> '[[1,2,2], []]'::agtype; ?column? ---------- t (1 row) SELECT '{"id": 281474976710657, "label": "", "properties": {"name": "A"}}::vertex'::agtype @> '{"name": "A"}'; ?column? ---------- t (1 row) SELECT '{"name": "A"}' @> '{"id": 281474976710657, "label": "", "properties": {"name": "A"}}::vertex'::agtype; ?column? ---------- t (1 row) SELECT '{"id": 281474976710657, "label": "", "properties": {"name": "A"}}::vertex'::agtype @> '{"id": 281474976710657, "label": "", "properties": {"name": "A"}}::vertex'; ?column? ---------- t (1 row) SELECT agtype_contains('{"id": 1}','{"id": 1}'); agtype_contains ----------------- t (1 row) SELECT agtype_contains('[1, 2, 3]','[3, 3]'); agtype_contains ----------------- t (1 row) -- In general, one thing should always contain itself SELECT '["9", ["7", "3"], 1]'::agtype @> '["9", ["7", "3"], 1]'::agtype; ?column? ---------- t (1 row) SELECT '{"a":"b", "b":1, "c":null}'::agtype @> '{"a":"b", "b":1, "c":null}'; ?column? ---------- t (1 row) -- returns false SELECT '{"a":"b", "b":1, "c":null}'::agtype @> '{"a":"b", "g":null}'; ?column? ---------- f (1 row) SELECT '{"a":"b", "b":1, "c":null}'::agtype @> '{"g":null}'; ?column? ---------- f (1 row) SELECT '{"a":"b", "b":1, "c":null}'::agtype @> '{"a":"c"}'; ?column? ---------- f (1 row) SELECT '{"a":"b", "b":1, "c":null}'::agtype @> '{"a":"b", "c":"q"}'; ?column? ---------- f (1 row) SELECT '{"a":"b", "b":1, "c":null}'::agtype @> '[]'; ?column? ---------- f (1 row) SELECT '{"name": "Bob", "tags": ["enim", "qui"]}'::agtype @> '{"tags":{}}'; ?column? ---------- f (1 row) SELECT '[1,1,2]'::agtype @> '[1,2,[2]]'::agtype; ?column? ---------- f (1 row) SELECT '[1,2,2]'::agtype @> '{}'::agtype; ?column? ---------- f (1 row) SELECT '[[1,2]]'::agtype @> '[[{}]]'::agtype; ?column? ---------- f (1 row) SELECT '[[1,2]]'::agtype @> '[[1,2,2, []], []]'::agtype; ?column? ---------- f (1 row) SELECT '[[1,2]]'::agtype @> '[[1,2,2, []], [[]]]'::agtype; ?column? ---------- f (1 row) SELECT agtype_contains('{"id": 1}','{"id": 2}'); agtype_contains ----------------- f (1 row) SELECT agtype_contains('[1, 2, 3]','[3, 3, []]'); agtype_contains ----------------- f (1 row) -- Raw scalar may contain another raw scalar, array may contain a raw scalar SELECT '[5]'::agtype @> '[5]'; ?column? ---------- t (1 row) SELECT '5'::agtype @> '5'; ?column? ---------- t (1 row) SELECT '[5]'::agtype @> '5'; ?column? ---------- t (1 row) -- But a raw scalar cannot contain an array SELECT '5'::agtype @> '[5]'; ?column? ---------- f (1 row) -- object/array containment is different from agtype_string_match_contains SELECT '{ "name": "Bob", "tags": [ "enim", "qui"]}'::agtype @> '{"tags":["qu"]}'; ?column? ---------- f (1 row) /* * left contains <@ operator */ -- returns true SELECT '{"a":"b"}'::agtype <@ '{"a":"b", "b":1, "c":null}'; ?column? ---------- t (1 row) SELECT '{"a":"b", "c":null}'::agtype <@ '{"a":"b", "b":1, "c":null}'; ?column? ---------- t (1 row) SELECT '[1,2,2]'::agtype <@ '[1,2]'::agtype; ?column? ---------- t (1 row) SELECT '[1,2,2]'::agtype <@ '[1,1,2]'::agtype; ?column? ---------- t (1 row) SELECT '[[1,2,2]]'::agtype <@ '[[1,2]]'::agtype; ?column? ---------- t (1 row) SELECT '[]'::agtype <@ '[1,2,2]'::agtype; ?column? ---------- t (1 row) SELECT '{"name": "A"}' <@ '{"id": 281474976710657, "label": "", "properties": {"name": "A"}}::vertex'::agtype; ?column? ---------- t (1 row) SELECT '{"id": 281474976710657, "label": "", "properties": {"name": "A"}}::vertex'::agtype <@ '{"name": "A"}'; ?column? ---------- t (1 row) SELECT '{"id": 281474976710657, "label": "", "properties": {"name": "A"}}::vertex'::agtype <@ '{"id": 281474976710657, "label": "", "properties": {"name": "A"}}::vertex'; ?column? ---------- t (1 row) SELECT agtype_contained_by('{"id": 1}','{"id": 1}'); agtype_contained_by --------------------- t (1 row) -- returns false SELECT '[1,2,2]'::agtype <@ '[]'::agtype; ?column? ---------- f (1 row) SELECT '{"a":"b", "g":null}'::agtype <@ '{"a":"b", "b":1, "c":null}'; ?column? ---------- f (1 row) SELECT '{"g":null}'::agtype <@ '{"a":"b", "b":1, "c":null}'; ?column? ---------- f (1 row) SELECT '{"a":"c"}'::agtype <@ '{"a":"b", "b":1, "c":null}'; ?column? ---------- f (1 row) SELECT '{"id": 281474976710657, "label": "", "properties": {"name": "A"}}::vertex'::agtype <@ '{"id": 281474976710657, "label": "", "properties": {"name": "B"}}::vertex'; ?column? ---------- f (1 row) SELECT agtype_contained_by('{"id": 1}','{"id": 2}'); agtype_contained_by --------------------- f (1 row) -- In general, one thing should always contain itself SELECT '["9", ["7", "3"], ["1"]]'::agtype <@ '["9", ["7", "3"], ["1"]]'::agtype; ?column? ---------- t (1 row) SELECT '{"a":"b", "b":1, "c":null}'::agtype <@ '{"a":"b", "b":1, "c":null}'; ?column? ---------- t (1 row) -- -- jsonb operators inside cypher queries -- SELECT create_graph('jsonb_operators'); NOTICE: graph "jsonb_operators" has been created create_graph -------------- (1 row) SELECT * FROM cypher('jsonb_operators',$$CREATE ({list:['a', 'b', 'c'], json:{a:1, b:['a', 'b'], c:{d:'a'}}})$$) as (a agtype); a --- (0 rows) /* * ?, ?|, ?& key existence operators */ -- Exists (?) -- should return true SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ? 'list' $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json ? 'a' $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.list ? 'c' $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.b ? 'a' $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.c ? 'd' $$) as (a agtype); a ------ true (1 row) -- should return false SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ? 'a' $$) as (a agtype); a ------- false (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json ? 'd' $$) as (a agtype); a ------- false (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.list ? 'd' $$) as (a agtype); a ------- false (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.b ? 'c' $$) as (a agtype); a ------- false (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.c ? 'e' $$) as (a agtype); a ------- false (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ? [] $$) as (a agtype); a ------- false (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ? ['d'] $$) as (a agtype); a ------- false (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ? {d: 'e'} $$) as (a agtype); a ------- false (1 row) -- Exists (?|) -- should return true SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| ['list'] $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| ['list', 'd'] $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| ['json', 'a'] $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| ['list', 'json'] $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.b ?| ['a'] $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.b ?| ['a', 'b'] $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.c ?| ['d'] $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.c ?| ['d', 'e'] $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| keys(n) $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json ?| keys(n.json) $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return [n.json ?| keys(n.json)] ?| [true] $$) as (a agtype); a ------ true (1 row) -- should return false SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| [] $$) as (a agtype); a ------- false (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| ['a', 'b'] $$) as (a agtype); a ------- false (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.b ?| [] $$) as (a agtype); a ------- false (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.c ?| ['c'] $$) as (a agtype); a ------- false (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| [['list']] $$) as (a agtype); a ------- false (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| keys(n.json) $$) as (a agtype); a ------- false (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json ?| keys(n) $$) as (a agtype); a ------- false (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return [n.json ?| keys(n.json)] ?| [false] $$) as (a agtype); a ------- false (1 row) -- errors out SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| 'list' $$) as (a agtype); ERROR: invalid agtype value for right operand SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| n $$) as (a agtype); ERROR: invalid agtype value for right operand SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& 1 $$) as (a agtype); ERROR: invalid agtype value for right operand SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& '' $$) as (a agtype); ERROR: invalid agtype value for right operand SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& '1' $$) as (a agtype); ERROR: invalid agtype value for right operand SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& '{}' $$) as (a agtype); ERROR: invalid agtype value for right operand SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& n.json $$) as (a agtype); ERROR: invalid agtype value for right operand -- Exists (?&) -- should return true SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& ['list', 'json'] $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.b ?& ['a', 'b'] $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.c ?& ['d'] $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& keys(n) $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json ?& keys(n.json) $$) as (a agtype); a ------ true (1 row) -- should return false SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& [] $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& ['a', 'b'] $$) as (a agtype); a ------- false (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.b ?& [] $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.b ?& ['a', 'b', 'c'] $$) as (a agtype); a ------- false (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.c ?& ['d', 'e'] $$) as (a agtype); a ------- false (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& [['list']] $$) as (a agtype); a ------- false (1 row) -- errors out SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& 'list' $$) as (a agtype); ERROR: invalid agtype value for right operand SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& 1 $$) as (a agtype); ERROR: invalid agtype value for right operand SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& '' $$) as (a agtype); ERROR: invalid agtype value for right operand SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& '1' $$) as (a agtype); ERROR: invalid agtype value for right operand SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& n $$) as (a agtype); ERROR: invalid agtype value for right operand SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& '{}' $$) as (a agtype); ERROR: invalid agtype value for right operand SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& n.json $$) as (a agtype); ERROR: invalid agtype value for right operand -- -- agtype access operator (->) -- SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->-1 $$) AS r(result agtype); result -------- 9 (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->1 $$) AS r(result agtype); result -------------------------------------------------------------------------------- {"int": 3, "bool": true, "array": [9, 11, {"bool": false, "float": 3.14}, 13]} (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->-4 $$) AS r(result agtype); result -------------------------------------------------------------------------------- {"int": 3, "bool": true, "array": [9, 11, {"bool": false, "float": 3.14}, 13]} (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->-4->'array' $$) AS r(result agtype); result --------------------------------------------- [9, 11, {"bool": false, "float": 3.14}, 13] (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->-4->'array'->-2->'bool' $$) AS r(result agtype); result -------- false (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->-4->'array'->-2->'bool'->-1 $$) AS r(result agtype); result -------- false (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->(size(lst)-1) $$) AS r(result agtype); result -------- 9 (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->(size(lst)%size(lst)) $$) AS r(result agtype); result -------- 1 (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->-4->'array'->-2->'float' $$) AS r(result agtype); result -------- 3.14 (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->-4->'array'->-2->'float'->0 $$) AS r(result agtype); result -------- 3.14 (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json' $$) as (a agtype); a -------------------------------------------- {"a": 1, "b": ["a", "b"], "c": {"d": "a"}} (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'a' $$) as (a agtype); a --- 1 (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'a'->-1 $$) as (a agtype); a --- 1 (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'b' $$) as (a agtype); a ------------ ["a", "b"] (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'b'->-2 $$) as (a agtype); a ----- "a" (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'b'->1 $$) as (a agtype); a ----- "b" (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'c' $$) as (a agtype); a ------------ {"d": "a"} (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'c'->0 $$) as (a agtype); a --- (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'c'->'d' $$) as (a agtype); a ----- "a" (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'c'->'d'->-1->0 $$) as (a agtype); a ----- "a" (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'list' $$) as (a agtype); a ----------------- ["a", "b", "c"] (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'list'->-1 $$) as (a agtype); a ----- "c" (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'list'->2->0 $$) as (a agtype); a ----- "c" (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) WITH n->'list' AS lst RETURN lst $$) as (a agtype); a ----------------- ["a", "b", "c"] (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) WITH n->'list' AS lst RETURN lst->0 $$) as (a agtype); a ----- "a" (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) WITH n->'list' AS lst RETURN lst->(size(lst)-1) $$) as (a agtype); a ----- "c" (1 row) -- should return null SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->(size(lst)) $$) AS r(result agtype); result -------- (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'d' $$) as (a agtype); a --- (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'list'->'c' $$) as (a agtype); a --- (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) WITH n->'list' AS lst RETURN lst->(size(lst)) $$) as (a agtype); a --- (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'b'->'a' $$) as (a agtype); a --- (1 row) -- -- path extraction #> operator -- SELECT * FROM cypher('jsonb_operators', $$ WITH {json: {a: 1, b: ['a', 'b'], c: {d: ['a']}}, list: ['a', 'b', 'c']} AS map RETURN map #> [] $$) AS (result agtype); result --------------------------------------------------------------------------------- {"json": {"a": 1, "b": ["a", "b"], "c": {"d": ["a"]}}, "list": ["a", "b", "c"]} (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH {json: {a: 1, b: ['a', 'b'], c: {d: ['a']}}, list: ['a', 'b', 'c']} AS map RETURN map #> ['json', 'c', 'd'] $$) AS (result agtype); result -------- ["a"] (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH {json: {a: 1, b: ['a', 'b'], c: {d: ['a']}}, list: ['a', 'b', 'c']} AS map RETURN map #> ['json', 'c', 'd', -1] $$) AS (result agtype); result -------- "a" (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH {json: {a: 1, b: ['a', 'b'], c: {d: ['a']}}, list: ['a', 'b', 'c']} AS map RETURN map #> ['json', 'c', 'd', -1, -1] $$) AS (result agtype); result -------- (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH {json: {a: 1, b: ['a', 'b'], c: {d: ['a']}}, list: ['a', 'b', 'c']} AS map RETURN map #> ['list', "-1"] $$) AS (result agtype); result -------- "c" (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH {json: {a: 1, b: ['a', 'b'], c: {d: ['a']}}, list: ['a', 'b', ['c', 'd']]} AS map RETURN map #> ['list', "-1", "-1"] $$) AS (result agtype); result -------- "d" (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH {json: {a: 1, b: ['a', 'b'], c: {d: ['a']}}, list: ['a', 'b', ['c', 'd']]} AS map RETURN map #> ['list', "-1", -1] $$) AS (result agtype); result -------- "d" (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH [[-3, 1]] AS list RETURN list #> [] $$) AS (result agtype); result ----------- [[-3, 1]] (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH [[-3, 1]] AS list RETURN list #> [0] $$) AS (result agtype); result --------- [-3, 1] (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH [[-3, 1]] AS list RETURN list #> [-1, -1] $$) AS (result agtype); result -------- 1 (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH [[-3, 1]] AS list RETURN list #> [-1, -1, -1] $$) AS (result agtype); result -------- (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH [[-3, 1]] AS list RETURN list #> [{}] $$) AS (result agtype); result -------- (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH [null] AS list RETURN list #> [] $$) AS (result agtype); result -------- [null] (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH [null] AS list RETURN list #> [-1, -1, -1] $$) AS (result agtype); result -------- (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH [] AS list RETURN list #> [] $$) AS (result agtype); result -------- [] (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH [] AS list RETURN list #> ["a", 1] $$) AS (result agtype); result -------- (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> []$$) as (a agtype); a ------------------------------------------------------------------------------- {"json": {"a": 1, "b": ["a", "b"], "c": {"d": "a"}}, "list": ["a", "b", "c"]} (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["json"]$$) as (a agtype); a -------------------------------------------- {"a": 1, "b": ["a", "b"], "c": {"d": "a"}} (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["jsonb"]$$) as (a agtype); a --- (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["json", "a"]$$) as (a agtype); a --- 1 (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["json", "a", 0]$$) as (a agtype); a --- (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["json", "b"]$$) as (a agtype); a ------------ ["a", "b"] (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["json", "b", -1]$$) as (a agtype); a ----- "b" (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["json", "b", "-1"]$$) as (a agtype); a ----- "b" (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["json", "b", -1, 0]$$) as (a agtype); a --- (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["json", "c"]$$) as (a agtype); a ------------ {"d": "a"} (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["json", "c", "d"]$$) as (a agtype); a ----- "a" (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["json", "c", "d", -1]$$) as (a agtype); a --- (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ['list', -1]$$) as (a agtype); a ----- "c" (1 row) SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ['list', 4]$$) as (a agtype); a --- (1 row) -- errors out SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> "json"$$) as (a agtype); ERROR: right operand must be an array SELECT * FROM cypher('jsonb_operators', $$ WITH {json: {a: 1, b: ['a', 'b'], c: {d: ['a']}}, list: ['a', 'b', 'c']} AS map RETURN map #> 'jsonb' $$) AS (result agtype); ERROR: right operand must be an array SELECT * FROM cypher('jsonb_operators', $$ WITH [[-3, 1]] AS list RETURN list #> 0 $$) AS (result agtype); ERROR: right operand must be an array SELECT * FROM cypher('jsonb_operators', $$ WITH 3 AS elem RETURN elem #> [0] $$) AS (result agtype); ERROR: scalar object must be a vertex or edge SELECT * FROM cypher('jsonb_operators', $$ WITH 'string' AS elem RETURN elem #> [0] $$) AS (result agtype); ERROR: scalar object must be a vertex or edge -- -- concat || operator -- SELECT * FROM cypher('jsonb_operators', $$ RETURN [1,2] || 2 $$) AS (result agtype); result ----------- [1, 2, 2] (1 row) SELECT * FROM cypher('jsonb_operators', $$ RETURN true || false $$) AS (result agtype); result --------------- [true, false] (1 row) SELECT * FROM cypher('jsonb_operators', $$ RETURN true || false || {a: 'string'} $$) AS (result agtype); result -------------------------------- [true, false, {"a": "string"}] (1 row) SELECT * FROM cypher('jsonb_operators', $$ RETURN true || false || {a: 'string'} || true $$) AS (result agtype); result -------------------------------------- [true, false, {"a": "string"}, true] (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH [1,2,3] AS m WITH m, m || 'string' AS n RETURN n $$) AS (result agtype); result --------------------- [1, 2, 3, "string"] (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH [1,2,3] AS m WITH m, m || {a: 1::numeric} AS n RETURN n $$) AS (result agtype); result ------------------------------ [1, 2, 3, {"a": 1::numeric}] (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH {a: [1,2,3]} AS m WITH m, m || {a: 1::numeric} AS n RETURN n $$) AS (result agtype); result ------------------- {"a": 1::numeric} (1 row) SELECT * FROM cypher('jsonb_operators', $$ WITH {b: [1,2,3]} AS m WITH m, m || {a: 1::numeric} AS n RETURN n $$) AS (result agtype); result ----------------------------------- {"a": 1::numeric, "b": [1, 2, 3]} (1 row) SELECT * FROM cypher('jsonb_operators', $$ MATCH(n) RETURN n || 1 || 'string' $$) AS (result agtype); result ---------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710657, "label": "", "properties": {"json": {"a": 1, "b": ["a", "b"], "c": {"d": "a"}}, "list": ["a", "b", "c"]}}::vertex, 1, "string"] (1 row) SELECT * FROM cypher('jsonb_operators', $$ MATCH(n) RETURN n || {list: [true, null]} $$) AS (result agtype); result --------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710657, "label": "", "properties": {"json": {"a": 1, "b": ["a", "b"], "c": {"d": "a"}}, "list": ["a", "b", "c"]}}::vertex, {"list": [true, null]}] (1 row) SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) MATCH(m) RETURN n || m $$) AS (result agtype); result ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"id": 281474976710657, "label": "", "properties": {"json": {"a": 1, "b": ["a", "b"], "c": {"d": "a"}}, "list": ["a", "b", "c"]}}::vertex, {"id": 281474976710657, "label": "", "properties": {"json": {"a": 1, "b": ["a", "b"], "c": {"d": "a"}}, "list": ["a", "b", "c"]}}::vertex] (1 row) SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) RETURN n.list || [1, 2, 3] $$) AS (result agtype); result -------------------------- ["a", "b", "c", 1, 2, 3] (1 row) SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) RETURN n.json || [1, 2, 3] $$) AS (result agtype); result ------------------------------------------------------- [{"a": 1, "b": ["a", "b"], "c": {"d": "a"}}, 1, 2, 3] (1 row) SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) RETURN n.json || n.json $$) AS (result agtype); result -------------------------------------------- {"a": 1, "b": ["a", "b"], "c": {"d": "a"}} (1 row) SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) RETURN n.json || n $$) AS (result agtype); result ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [{"a": 1, "b": ["a", "b"], "c": {"d": "a"}}, {"id": 281474976710657, "label": "", "properties": {"json": {"a": 1, "b": ["a", "b"], "c": {"d": "a"}}, "list": ["a", "b", "c"]}}::vertex] (1 row) -- should give an error SELECT * FROM cypher('jsonb_operators', $$ RETURN true || {a: 'string'} || true $$) AS (result agtype); ERROR: invalid left operand for agtype concatenation SELECT * FROM cypher('jsonb_operators', $$ WITH 'b' AS m WITH m, m || {a: 1} AS n RETURN n $$) AS (result agtype); ERROR: invalid left operand for agtype concatenation SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) RETURN n.json || 1 $$) AS (result agtype); ERROR: invalid right operand for agtype concatenation /* * @> and <@ contains operators */ -- right contains @> operator SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE n @> {json: {a: 1, b: ["a", "b"], c: {d: "a"}}, list: ["a", "b", "c"]} RETURN n $$) as (a agtype); a ------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"json": {"a": 1, "b": ["a", "b"], "c": {"d": "a"}}, "list": ["a", "b", "c"]}}::vertex (1 row) SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE n.json @> {c: {d: "a"}} RETURN n $$) as (a agtype); a ------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"json": {"a": 1, "b": ["a", "b"], "c": {"d": "a"}}, "list": ["a", "b", "c"]}}::vertex (1 row) SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE n.json @> {c: {}} RETURN n $$) as (a agtype); a ------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"json": {"a": 1, "b": ["a", "b"], "c": {"d": "a"}}, "list": ["a", "b", "c"]}}::vertex (1 row) SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE n.json @> {b: ["a"]} RETURN n $$) as (a agtype); a ------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"json": {"a": 1, "b": ["a", "b"], "c": {"d": "a"}}, "list": ["a", "b", "c"]}}::vertex (1 row) SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE n.json @> {b: ["a", "a"]} RETURN n $$) as (a agtype); a ------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"json": {"a": 1, "b": ["a", "b"], "c": {"d": "a"}}, "list": ["a", "b", "c"]}}::vertex (1 row) SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE n.list @> [] RETURN n $$) as (a agtype); a ------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"json": {"a": 1, "b": ["a", "b"], "c": {"d": "a"}}, "list": ["a", "b", "c"]}}::vertex (1 row) SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE n.list[2] @> "c" RETURN n $$) as (a agtype); a ------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"json": {"a": 1, "b": ["a", "b"], "c": {"d": "a"}}, "list": ["a", "b", "c"]}}::vertex (1 row) SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE n @> {} RETURN n $$) as (a agtype); a ------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"json": {"a": 1, "b": ["a", "b"], "c": {"d": "a"}}, "list": ["a", "b", "c"]}}::vertex (1 row) SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) RETURN properties(n).json @> {c: {d: "a"}} $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) RETURN properties(n).json @> {c: {d: "b"}} $$) as (a agtype); a ------- false (1 row) SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE n.json @> {b: ["e"]} RETURN n $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE n.list[2] @> [] RETURN n $$) as (a agtype); a --- (0 rows) -- left contains <@ operator SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) RETURN {c: {d: "a"}} <@ properties(n).json $$) as (a agtype); a ------ true (1 row) SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE {c: {d: "a"}} <@ n.json RETURN n $$) as (a agtype); a ------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"json": {"a": 1, "b": ["a", "b"], "c": {"d": "a"}}, "list": ["a", "b", "c"]}}::vertex (1 row) SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE [] <@ n.list RETURN n $$) as (a agtype); a ------------------------------------------------------------------------------------------------------------------------------------------- {"id": 281474976710657, "label": "", "properties": {"json": {"a": 1, "b": ["a", "b"], "c": {"d": "a"}}, "list": ["a", "b", "c"]}}::vertex (1 row) SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE {c: {d: "b"}} <@ n.json RETURN n $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE [] <@ n.json RETURN n $$) as (a agtype); a --- (0 rows) -- clean up SELECT drop_graph('jsonb_operators', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table jsonb_operators._ag_label_vertex drop cascades to table jsonb_operators._ag_label_edge NOTICE: graph "jsonb_operators" has been dropped drop_graph ------------ (1 row) age-PG16-v1.5.0-rc0/regress/expected/name_validation.out000066400000000000000000000241141454606241200227400ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; -- -- Test graph names -- -- length -- invalid (length < 3) SELECT create_graph('db'); ERROR: graph name is invalid -- valid (though length > 63, it's truncated automatically before reaching validation function) SELECT create_graph('oiblpsacrufgxiilyevvoiblpsacrufgxiilyevvoiblpsacrufgxiilyevvsdss'); NOTICE: graph "oiblpsacrufgxiilyevvoiblpsacrufgxiilyevvoiblpsacrufgxiilyevvsds" has been created create_graph -------------- (1 row) -- valid SELECT create_graph('mydatabase'); NOTICE: graph "mydatabase" has been created create_graph -------------- (1 row) -- numeric characters -- invalid (first character numeric; only alphabetic allowed) SELECT create_graph('2mydatabase'); ERROR: graph name is invalid -- valid SELECT create_graph('mydatabase2'); NOTICE: graph "mydatabase2" has been created create_graph -------------- (1 row) -- special characters -- invalid (newline character) SELECT create_graph('my database'); ERROR: graph name is invalid -- invalid (space character) SELECT create_graph('my database'); ERROR: graph name is invalid -- invalid (symbol character) SELECT create_graph('my&database'); ERROR: graph name is invalid -- valid (non-ascii alphabet) SELECT create_graph('mydätabase'); NOTICE: graph "mydätabase" has been created create_graph -------------- (1 row) SELECT create_graph('mydঅtabase'); NOTICE: graph "mydঅtabase" has been created create_graph -------------- (1 row) -- dots, dashes, underscore -- valid SELECT create_graph('main.db'); NOTICE: graph "main.db" has been created create_graph -------------- (1 row) -- invalid (ends with dot) SELECT create_graph('main.db.'); ERROR: graph name is invalid -- valid SELECT create_graph('main-db'); NOTICE: graph "main-db" has been created create_graph -------------- (1 row) -- invalid (ends with dash) SELECT create_graph('main.db-'); ERROR: graph name is invalid -- valid SELECT create_graph('_mydatabase'); NOTICE: graph "_mydatabase" has been created create_graph -------------- (1 row) SELECT create_graph('my_database'); NOTICE: graph "my_database" has been created create_graph -------------- (1 row) -- test rename -- invalid SELECT alter_graph('mydatabase', 'RENAME', '1mydatabase'); ERROR: new graph name is invalid -- valid SELECT alter_graph('mydatabase', 'RENAME', 'mydatabase1'); NOTICE: graph "mydatabase" renamed to "mydatabase1" alter_graph ------------- (1 row) -- clean up SELECT drop_graph('mydatabase1', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table mydatabase1._ag_label_vertex drop cascades to table mydatabase1._ag_label_edge NOTICE: graph "mydatabase1" has been dropped drop_graph ------------ (1 row) SELECT drop_graph('mydätabase', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table "mydätabase"._ag_label_vertex drop cascades to table "mydätabase"._ag_label_edge NOTICE: graph "mydätabase" has been dropped drop_graph ------------ (1 row) SELECT drop_graph('mydঅtabase', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table "mydঅtabase"._ag_label_vertex drop cascades to table "mydঅtabase"._ag_label_edge NOTICE: graph "mydঅtabase" has been dropped drop_graph ------------ (1 row) SELECT drop_graph('mydatabase2', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table mydatabase2._ag_label_vertex drop cascades to table mydatabase2._ag_label_edge NOTICE: graph "mydatabase2" has been dropped drop_graph ------------ (1 row) SELECT drop_graph('main.db', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table "main.db"._ag_label_vertex drop cascades to table "main.db"._ag_label_edge NOTICE: graph "main.db" has been dropped drop_graph ------------ (1 row) SELECT drop_graph('main-db', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table "main-db"._ag_label_vertex drop cascades to table "main-db"._ag_label_edge NOTICE: graph "main-db" has been dropped drop_graph ------------ (1 row) SELECT drop_graph('_mydatabase', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table _mydatabase._ag_label_vertex drop cascades to table _mydatabase._ag_label_edge NOTICE: graph "_mydatabase" has been dropped drop_graph ------------ (1 row) SELECT drop_graph('my_database', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table my_database._ag_label_vertex drop cascades to table my_database._ag_label_edge NOTICE: graph "my_database" has been dropped drop_graph ------------ (1 row) SELECT drop_graph('oiblpsacrufgxiilyevvoiblpsacrufgxiilyevvoiblpsacrufgxiilyevvsds', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table oiblpsacrufgxiilyevvoiblpsacrufgxiilyevvoiblpsacrufgxiilyevvsds._ag_label_vertex drop cascades to table oiblpsacrufgxiilyevvoiblpsacrufgxiilyevvoiblpsacrufgxiilyevvsds._ag_label_edge NOTICE: graph "oiblpsacrufgxiilyevvoiblpsacrufgxiilyevvoiblpsacrufgxiilyevvsds" has been dropped drop_graph ------------ (1 row) -- -- Test label names -- SELECT create_graph('graph123'); NOTICE: graph "graph123" has been created create_graph -------------- (1 row) -- length -- invalid SELECT create_vlabel('graph123', ''); ERROR: label name is invalid SELECT create_elabel('graph123', ''); ERROR: label name is invalid -- valid SELECT create_vlabel('graph123', 'labelx'); NOTICE: VLabel "labelx" has been created create_vlabel --------------- (1 row) SELECT create_elabel('graph123', 'labely'); NOTICE: ELabel "labely" has been created create_elabel --------------- (1 row) -- special characters -- invalid (newline character) SELECT create_vlabel('graph123', 'my label'); ERROR: label name is invalid SELECT create_elabel('graph123', 'my label'); ERROR: label name is invalid -- invalid (space character) SELECT create_vlabel('graph123', 'my label'); ERROR: label name is invalid SELECT create_elabel('graph123', 'my label'); ERROR: label name is invalid -- invalid (symbol character) SELECT create_vlabel('graph123', 'my&label'); ERROR: label name is invalid SELECT create_elabel('graph123', 'my&label'); ERROR: label name is invalid -- valid (non-ascii alphabet) SELECT create_vlabel('graph123', 'myläbelx'); NOTICE: VLabel "myläbelx" has been created create_vlabel --------------- (1 row) SELECT create_elabel('graph123', 'myläbely'); NOTICE: ELabel "myläbely" has been created create_elabel --------------- (1 row) SELECT create_vlabel('graph123', 'mylঅbelx'); NOTICE: VLabel "mylঅbelx" has been created create_vlabel --------------- (1 row) SELECT create_elabel('graph123', 'mylঅbely'); NOTICE: ELabel "mylঅbely" has been created create_elabel --------------- (1 row) -- valid (underscore) SELECT create_vlabel('graph123', '_labelx'); NOTICE: VLabel "_labelx" has been created create_vlabel --------------- (1 row) SELECT create_elabel('graph123', '_labely'); NOTICE: ELabel "_labely" has been created create_elabel --------------- (1 row) SELECT create_vlabel('graph123', 'label_x'); NOTICE: VLabel "label_x" has been created create_vlabel --------------- (1 row) SELECT create_elabel('graph123', 'label_y'); NOTICE: ELabel "label_y" has been created create_elabel --------------- (1 row) -- numeric -- invalid SELECT create_vlabel('graph123', '1label'); ERROR: label name is invalid SELECT create_elabel('graph123', '2label'); ERROR: label name is invalid -- valid SELECT create_vlabel('graph123', 'label1'); NOTICE: VLabel "label1" has been created create_vlabel --------------- (1 row) SELECT create_elabel('graph123', 'label2'); NOTICE: ELabel "label2" has been created create_elabel --------------- (1 row) -- label creation with cypher -- invalid SELECT * from cypher('graph123', $$ CREATE (a:`my&label`) $$) as (a agtype); ERROR: label name is invalid LINE 1: SELECT * from cypher('graph123', $$ CREATE (a:`my&label`) $$... ^ SELECT * from cypher('graph123', $$ CREATE (:A)-[:`my&label2`]->(:C) $$) as (a agtype); ERROR: label name is invalid LINE 1: SELECT * from cypher('graph123', $$ CREATE (:A)-[:`my&label2... ^ -- valid SELECT * from cypher('graph123', $$ CREATE (a:`mylabel`) $$) as (a agtype); a --- (0 rows) SELECT * from cypher('graph123', $$ CREATE (:A)-[:`mylabel2`]->(:C) $$) as (a agtype); a --- (0 rows) -- clean up SELECT drop_graph('graph123', true); NOTICE: drop cascades to 18 other objects DETAIL: drop cascades to table graph123._ag_label_vertex drop cascades to table graph123._ag_label_edge drop cascades to table graph123.labelx drop cascades to table graph123.labely drop cascades to table graph123."myläbelx" drop cascades to table graph123."myläbely" drop cascades to table graph123."mylঅbelx" drop cascades to table graph123."mylঅbely" drop cascades to table graph123._labelx drop cascades to table graph123._labely drop cascades to table graph123.label_x drop cascades to table graph123.label_y drop cascades to table graph123.label1 drop cascades to table graph123.label2 drop cascades to table graph123.mylabel drop cascades to table graph123."A" drop cascades to table graph123.mylabel2 drop cascades to table graph123."C" NOTICE: graph "graph123" has been dropped drop_graph ------------ (1 row) -- -- End of test -- age-PG16-v1.5.0-rc0/regress/expected/scan.out000066400000000000000000000563721454606241200205450ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ SET extra_float_digits = 0; LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('scan'); NOTICE: graph "scan" has been created create_graph -------------- (1 row) SELECT create_graph('scan'); ERROR: graph "scan" already exists -- -- multi-line comment -- SELECT * FROM cypher('scan', $$ /* * multi-line comment */ RETURN 0 /**/ $$) AS t(a agtype); a --- 0 (1 row) SELECT * FROM cypher('scan', $$ /* unterminated /* comment RETURN 0 $$) AS t(a int); ERROR: unterminated /* comment at or near "/* unterminated /* comment RETURN 0 " LINE 2: /* unterminated /* comment ^ -- recover syntax highlighting */ -- -- single-line comment -- SELECT * FROM cypher('scan', $$ // single-line // comment RETURN 0 $$) AS t(a agtype); a --- 0 (1 row) -- -- decimal integer -- SELECT * FROM cypher('scan', $$ RETURN 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 $$) AS t(a agtype, b agtype, c agtype, d agtype, e agtype, f agtype, g agtype, h agtype, i agtype, j agtype); a | b | c | d | e | f | g | h | i | j ---+---+---+---+---+---+---+---+---+---- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 (1 row) SELECT * FROM cypher('scan', $$ RETURN 11, 22, 33, 44, 55, 66, 77, 88, 99 $$) AS t(a agtype, b agtype, c agtype, d agtype, e agtype, f agtype, g agtype, h agtype, i agtype); a | b | c | d | e | f | g | h | i ----+----+----+----+----+----+----+----+---- 11 | 22 | 33 | 44 | 55 | 66 | 77 | 88 | 99 (1 row) -- 2^31 - 1, 2^31 SELECT * FROM cypher('scan', $$ RETURN 2147483647, 2147483648 $$) AS t(a agtype, b agtype); a | b ------------+------------ 2147483647 | 2147483648 (1 row) -- -- octal integer -- SELECT * FROM cypher('scan', $$ RETURN 00, 01, 02, 03, 04, 05, 06, 07, 010 $$) AS t(a agtype, b agtype, c agtype, d agtype, e agtype, f agtype, g agtype, h agtype, i agtype); a | b | c | d | e | f | g | h | i ---+---+---+---+---+---+---+---+--- 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 (1 row) SELECT * FROM cypher('scan', $$ RETURN 000, 011, 022, 033, 044, 055, 066, 077 $$) AS t(a agtype, b agtype, c agtype, d agtype, e agtype, f agtype, g agtype, h agtype); a | b | c | d | e | f | g | h ---+---+----+----+----+----+----+---- 0 | 9 | 18 | 27 | 36 | 45 | 54 | 63 (1 row) -- 2^31 - 1, 2^31 SELECT * FROM cypher('scan', $$ RETURN 000000000000, 017777777777, 0020000000000 $$) AS t(a agtype, b agtype, c agtype); a | b | c ---+------------+------------ 0 | 2147483647 | 2147483648 (1 row) -- 2^60 - 1, 2^64 - 1 SELECT * FROM cypher('scan', $$ RETURN 077777777777777777777, 01777777777777777777777 $$) AS t(a agtype, b agtype); a | b ---------------------+---------------------- 1152921504606846975 | 1.84467440737096e+19 (1 row) -- an invalid character after reading valid digits SELECT * FROM cypher('scan', $$ RETURN 012345678 $$) AS t(a int); ERROR: invalid octal integer literal at or near "012345678" LINE 2: RETURN 012345678 ^ -- an invalid character after the leading "0" SELECT * FROM cypher('scan', $$ RETURN 09 $$) AS t(a int); ERROR: invalid octal integer literal at or near "09" LINE 2: RETURN 09 ^ -- -- hexadecimal integer -- SELECT * FROM cypher('scan', $$ RETURN 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9 $$) AS t(a agtype, b agtype, c agtype, d agtype, e agtype, f agtype, g agtype, h agtype, i agtype, j agtype); a | b | c | d | e | f | g | h | i | j ---+---+---+---+---+---+---+---+---+--- 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (1 row) SELECT * FROM cypher('scan', $$ RETURN 0xA, 0xB, 0xC, 0xD, 0xE, 0xF $$) AS t(a agtype, b agtype, c agtype, d agtype, e agtype, f agtype); a | b | c | d | e | f ----+----+----+----+----+---- 10 | 11 | 12 | 13 | 14 | 15 (1 row) SELECT * FROM cypher('scan', $$ RETURN 0X00, 0X11, 0X22, 0X33, 0X44, 0X55, 0X66, 0X77, 0X88, 0X99 $$) AS t(a agtype, b agtype, c agtype, d agtype, e agtype, f agtype, g agtype, h agtype, i agtype, j agtype); a | b | c | d | e | f | g | h | i | j ---+----+----+----+----+----+-----+-----+-----+----- 0 | 17 | 34 | 51 | 68 | 85 | 102 | 119 | 136 | 153 (1 row) SELECT * FROM cypher('scan', $$ RETURN 0XAa, 0XBb, 0XCc, 0XDd, 0XEe, 0xFf $$) AS t(a agtype, b agtype, c agtype, d agtype, e agtype, f agtype); a | b | c | d | e | f -----+-----+-----+-----+-----+----- 170 | 187 | 204 | 221 | 238 | 255 (1 row) -- 2^31 - 1, 2^31 SELECT * FROM cypher('scan', $$ RETURN 0x00000000, 0x7FFFFFFF, 0x080000000 $$) AS t(a agtype, b agtype, c agtype); a | b | c ---+------------+------------ 0 | 2147483647 | 2147483648 (1 row) -- 10^18, 2^64 - 1 SELECT * FROM cypher('scan', $$ RETURN 0xde0b6b3a7640000, 0xffffffffffffffff $$) AS t(a agtype, b agtype); a | b ---------------------+---------------------- 1000000000000000000 | 1.84467440737096e+19 (1 row) -- an invalid character after reading valid digits SELECT * FROM cypher('scan', $$ RETURN 0xF~ $$) AS t(a int); ERROR: unexpected character at or near "~" LINE 2: RETURN 0xF~ ^ -- an invalid character after the leading "0x" SELECT * FROM cypher('scan', $$ RETURN 0x~ $$) AS t(a int); ERROR: invalid hexadecimal integer literal at or near "0x" LINE 2: RETURN 0x~ ^ -- "0x" followed by nothing SELECT * FROM cypher('scan', $$ RETURN 0x $$) AS t(a int); ERROR: invalid hexadecimal integer literal at or near "0x" LINE 2: RETURN 0x ^ -- -- decimal -- SELECT * FROM cypher('scan', $$ RETURN 03., 3.141592, .141592 $$) AS t(a agtype, b agtype, c agtype); a | b | c -----+----------+---------- 3.0 | 3.141592 | 0.141592 (1 row) -- "0" and ".." SELECT * FROM cypher('scan', $$ RETURN 0.. $$) AS t(a text, b text, c text); ERROR: syntax error at or near ".." LINE 2: RETURN 0.. ^ -- -- scientific notation -- SELECT * FROM cypher('scan', $$ RETURN 3141592e-6, 3.141592E0, .3141592e+1 $$) AS t(a agtype, b agtype, c agtype); a | b | c ----------+----------+---------- 3.141592 | 3.141592 | 3.141592 (1 row) -- invalid exponent parts SELECT * FROM cypher('scan', $$ RETURN 3141592e- $$) AS t(a text); ERROR: invalid scientific notation literal at or near "3141592e-" LINE 2: RETURN 3141592e- ^ SELECT * FROM cypher('scan', $$ RETURN 3.141592E $$) AS t(a text); ERROR: invalid scientific notation literal at or near "3.141592E" LINE 2: RETURN 3.141592E ^ SELECT * FROM cypher('scan', $$ RETURN .3141592e+ $$) AS t(a text); ERROR: invalid scientific notation literal at or near ".3141592e+" LINE 2: RETURN .3141592e+ ^ -- -- quoted string -- -- a long string SELECT * FROM cypher('scan', $$ RETURN " !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" $$) AS t(a agtype); a ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ " !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" (1 row) -- escape sequences SELECT * FROM cypher('scan', $$ RETURN " \" \" ' \' ", ' \' \' " \" ', " / \/ \\ \b \f \n \r \t " $$) AS t(a agtype, b agtype, c agtype); a | b | c ---------------+---------------+--------------------------- " \" \" ' ' " | " ' ' \" \" " | " / / \\ \b \f \n \r \t " (1 row) -- invalid escape sequence SELECT * FROM cypher('scan', $$ RETURN "\a" $$) AS t(a text); ERROR: invalid escape sequence at or near "\a" LINE 2: RETURN "\a" ^ DETAIL: Valid escape sequences are \", \', \/, \\, \b, \f, \n, \r, \t, \uXXXX, and \UXXXXXXXX. -- Unicode escape sequences SELECT * FROM cypher('scan', $$ RETURN "\u03A9 (GREEK CAPITAL LETTER OMEGA, U+03A9, Ω)", "\U0001d6e9 (MATHEMATICAL ITALIC CAPITAL THETA, U+1D6E9, 𝛩)", "\ud835\U0000DEF0 (MATHEMATICAL ITALIC CAPITAL OMICRON, U+1D6F0, 𝛰)", "\u002E (FULL STOP, U+002E, .)" $$) AS t(a agtype, b agtype, c agtype, d agtype); a | b | c | d ---------------------------------------------+-----------------------------------------------------+-------------------------------------------------------+---------------------------- "Ω (GREEK CAPITAL LETTER OMEGA, U+03A9, Ω)" | "𝛩 (MATHEMATICAL ITALIC CAPITAL THETA, U+1D6E9, 𝛩)" | "𝛰 (MATHEMATICAL ITALIC CAPITAL OMICRON, U+1D6F0, 𝛰)" | ". (FULL STOP, U+002E, .)" (1 row) -- invalid Unicode surrogate pair (need a low surrogate) SELECT * FROM cypher('scan', $$ RETURN "\uD835" $$) AS t(a text); ERROR: invalid Unicode surrogate pair at or near """ LINE 2: RETURN "\uD835" ^ DETAIL: A low surrogate must follow a high surrogate. -- invalid Unicode surrogate pair (not a low surrogate) SELECT * FROM cypher('scan', $$ RETURN "\uD835\u002E" $$) AS t(a text); ERROR: invalid Unicode surrogate pair at or near "\u002E" LINE 2: RETURN "\uD835\u002E" ^ DETAIL: A low surrogate must follow a high surrogate. -- invalid Unicode surrogate pair (need a high surrogate) SELECT * FROM cypher('scan', $$ RETURN "\uDEF0" $$) AS t(a text); ERROR: invalid Unicode surrogate pair at or near "\uDEF0" LINE 2: RETURN "\uDEF0" ^ DETAIL: A low surrogate must follow a high surrogate. -- invalid Unicode escape value (must be less than or equal to 10FFFF) SELECT * FROM cypher('scan', $$ RETURN "\U00110000" $$) AS t(a text); ERROR: invalid Unicode escape value at or near "\U00110000" LINE 2: RETURN "\U00110000" ^ DETAIL: Unicode escape values cannot be greater than 10FFFF, which is the maximum value of a code point. -- unsupported Unicode escape value ('\0' is not allowed) SELECT * FROM cypher('scan', $$ RETURN "\u0000" $$) AS t(a text); ERROR: unsupported Unicode escape value at or near "\u0000" LINE 2: RETURN "\u0000" ^ DETAIL: Unicode code point value 0000 is not allowed in quoted strings. -- unsupported Unicode escape value (the server encoding is not UTF8) CREATE DATABASE contrib_regression_age_euc_kr TEMPLATE template0 ENCODING EUC_KR LC_COLLATE 'C' LC_CTYPE 'C'; \c contrib_regression_age_euc_kr CREATE EXTENSION age; LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('scan'); NOTICE: graph "scan" has been created create_graph -------------- (1 row) SELECT * FROM cypher('scan', $$ RETURN "\U0001D706" $$) AS t(a text); ERROR: unsupported Unicode escape value at or near "\U0001D706" LINE 2: RETURN "\U0001D706" ^ DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. SELECT drop_graph('scan', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table scan._ag_label_vertex drop cascades to table scan._ag_label_edge NOTICE: graph "scan" has been dropped drop_graph ------------ (1 row) \c contrib_regression DROP DATABASE contrib_regression_age_euc_kr; LOAD 'age'; SET search_path TO ag_catalog; -- invalid Unicode escape sequence (must be \uXXXX or \UXXXXXXXX) SELECT * FROM cypher('scan', $$ RETURN "\UD835" $$) AS t(a text); ERROR: invalid Unicode escape sequence at or near "\UD835" LINE 2: RETURN "\UD835" ^ HINT: Unicode escape sequences must be \uXXXX or \UXXXXXXXX. SELECT * FROM cypher('scan', $$ RETURN "\uD835\uDEF" $$) AS t(a text); ERROR: invalid Unicode escape sequence at or near "\uDEF" LINE 2: RETURN "\uD835\uDEF" ^ HINT: Unicode escape sequences must be \uXXXX or \UXXXXXXXX. -- unterminated quoted strings SELECT * FROM cypher('scan', $$RETURN "unterminated quoted string$$) AS t(a text); ERROR: unterminated quoted string at or near ""unterminated quoted string" LINE 1: SELECT * FROM cypher('scan', $$RETURN "unterminated quoted s... ^ -- recover syntax highlighting " SELECT * FROM cypher('scan', $$RETURN 'unterminated quoted string$$) AS t(a text); ERROR: unterminated quoted string at or near "'unterminated quoted string" LINE 1: SELECT * FROM cypher('scan', $$RETURN 'unterminated quoted s... ^ -- recover syntax highlighting ' SELECT * FROM cypher('scan', $$RETURN "escape \$$) AS t(a text); ERROR: unterminated quoted string at or near ""escape \" LINE 1: SELECT * FROM cypher('scan', $$RETURN "escape \$$) AS t(a te... ^ -- recover syntax highlighting " SELECT * FROM cypher('scan', $$RETURN "high surrogate \uD835$$) AS t(a text); ERROR: unterminated quoted string at or near ""high surrogate \uD835" LINE 1: SELECT * FROM cypher('scan', $$RETURN "high surrogate \uD835... ^ -- recover syntax highlighting " -- -- identifier -- -- check that they are accepted as identifier (all tests throw an error) SELECT * FROM cypher('scan', $$ RETURN _$09A_z $$) AS t(id text); ERROR: could not find rte for _$09A_z LINE 2: RETURN _$09A_z ^ SELECT * FROM cypher('scan', $$ RETURN A $$) AS t(id text); ERROR: could not find rte for A LINE 2: RETURN A ^ SELECT * FROM cypher('scan', $$ RETURN z $$) AS t(id text); ERROR: could not find rte for z LINE 2: RETURN z ^ SELECT * FROM cypher('scan', $$ RETURN `$` $$) AS t(id text); ERROR: could not find rte for $ LINE 2: RETURN `$` ^ SELECT * FROM cypher('scan', $$ RETURN `0` $$) AS t(id text); ERROR: could not find rte for 0 LINE 2: RETURN `0` ^ SELECT * FROM cypher('scan', $$ RETURN ```` $$) AS t(id text); ERROR: could not find rte for ` LINE 2: RETURN ```` ^ -- zero-length quoted identifier SELECT * FROM cypher('scan', $$ RETURN `` $$) AS t(a text); ERROR: zero-length quoted identifier at or near "``" LINE 2: RETURN `` ^ SELECT * FROM cypher('scan', $$ RETURN `unterminated quoted identifier $$) AS t(a text); ERROR: unterminated quoted identifier at or near "`unterminated quoted identifier " LINE 2: RETURN `unterminated quoted identifier ^ -- recover syntax highlighting ` -- -- parameter -- -- invalid parameter names SELECT * FROM cypher('scan', $cypher$ RETURN $$ $cypher$) AS t(a text); ERROR: unexpected character at or near "$" LINE 2: RETURN $$ ^ SELECT * FROM cypher('scan', $$ RETURN $0 $$) AS t(a text); ERROR: unexpected character at or near "$" LINE 2: RETURN $0 ^ SELECT drop_graph('scan', true); NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table scan._ag_label_vertex drop cascades to table scan._ag_label_edge NOTICE: graph "scan" has been dropped drop_graph ------------ (1 row) age-PG16-v1.5.0-rc0/regress/sql/000077500000000000000000000000001454606241200160515ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/regress/sql/age_global_graph.sql000066400000000000000000000105641454606241200220350ustar00rootroot00000000000000LOAD 'age'; SET search_path TO ag_catalog; -- -- delete_specific_GRAPH_global_contexts -- -- SELECT * FROM create_graph('ag_graph_1'); SELECT * FROM cypher('ag_graph_1', $$ CREATE (v:vertex1) RETURN v $$) AS (v agtype); SELECT * FROM create_graph('ag_graph_2'); SELECT * FROM cypher('ag_graph_2', $$ CREATE (v:vertex2) RETURN v $$) AS (v agtype); SELECT * FROM create_graph('ag_graph_3'); SELECT * FROM cypher('ag_graph_3', $$ CREATE (v:vertex3) RETURN v $$) AS (v agtype); -- load contexts using the vertex_stats command SELECT * FROM cypher('ag_graph_3', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); SELECT * FROM cypher('ag_graph_2', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); SELECT * FROM cypher('ag_graph_1', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); --- loading undefined contexts --- should throw exception - graph "ag_graph_4" does not exist SELECT * FROM cypher('ag_graph_4', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); --- delete with invalid parameter ---should return false SELECT * FROM cypher('ag_graph_2', $$ RETURN delete_global_graphs('E1337') $$) AS (result agtype); -- delete ag_graph_2's context -- should return true SELECT * FROM cypher('ag_graph_2', $$ RETURN delete_global_graphs('ag_graph_2') $$) AS (result agtype); -- delete ag_graph_1's context -- should return true(succeed) because the previous command should not delete the 1st graph's context SELECT * FROM cypher('ag_graph_1', $$ RETURN delete_global_graphs('ag_graph_1') $$) AS (result agtype); -- delete ag_graph_3's context -- should return true(succeed) because the previous commands should not delete the 3rd graph's context SELECT * FROM cypher('ag_graph_3', $$ RETURN delete_global_graphs('ag_graph_3') $$) AS (result agtype); -- delete all graphs' context again -- should return false (did not succeed) for all of them because they are already removed SELECT * FROM cypher('ag_graph_2', $$ RETURN delete_global_graphs('ag_graph_2') $$) AS (result agtype); SELECT * FROM cypher('ag_graph_1', $$ RETURN delete_global_graphs('ag_graph_1') $$) AS (result agtype); SELECT * FROM cypher('ag_graph_3', $$ RETURN delete_global_graphs('ag_graph_3') $$) AS (result agtype); --- delete uninitialized graph context --- should throw exception graph "ag_graph_4" does not exist SELECT * FROM cypher('ag_graph_4', $$ RETURN delete_global_graphs('ag_graph_4') $$) AS (result agtype); -- -- delete_GRAPH_global_contexts -- -- load contexts again SELECT * FROM cypher('ag_graph_3', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); SELECT * FROM cypher('ag_graph_2', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); SELECT * FROM cypher('ag_graph_1', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); -- delete all graph contexts -- should return true SELECT * FROM cypher('ag_graph_1', $$ RETURN delete_global_graphs(NULL) $$) AS (result agtype); -- delete all graphs' context individually -- should return false for all of them because already removed SELECT * FROM cypher('ag_graph_1', $$ RETURN delete_global_graphs('ag_graph_1') $$) AS (result agtype); SELECT * FROM cypher('ag_graph_2', $$ RETURN delete_global_graphs('ag_graph_2') $$) AS (result agtype); SELECT * FROM cypher('ag_graph_3', $$ RETURN delete_global_graphs('ag_graph_3') $$) AS (result agtype); -- -- age_vertex_stats -- --checking validity of vertex_stats --adding unlabelled vertices to ag_graph_1 SELECT * FROM cypher('ag_graph_1', $$ CREATE (n), (m) $$) as (v agtype); --adding labelled vertice to graph 2 SELECT * FROM cypher('ag_graph_2', $$ CREATE (:Person) $$) as (v agtype); ---adding edges between nodes SELECT * FROM cypher('ag_graph_2', $$ MATCH (a:Person), (b:Person) WHERE a.name = 'A' AND b.name = 'B' CREATE (a)-[e:RELTYPE]->(b) RETURN e $$) as (e agtype); --checking if vertex stats have been updated along with the new label --should return 3 vertices SELECT * FROM cypher('ag_graph_1', $$ MATCH (n) RETURN vertex_stats(n) $$) AS (result agtype); --should return 1 vertice and 1 label SELECT * FROM cypher('ag_graph_2', $$ MATCH (a) RETURN vertex_stats(a) $$) AS (result agtype); --drop graphs SELECT * FROM drop_graph('ag_graph_1', true); SELECT * FROM drop_graph('ag_graph_2', true); SELECT * FROM drop_graph('ag_graph_3', true); ----------------------------------------------------------------------------------------------------------------------------- -- -- End of tests -- age-PG16-v1.5.0-rc0/regress/sql/age_load.sql000066400000000000000000000064411454606241200203320ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ \! cp -r regress/age_load/data regress/instance/data/age_load LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('agload_test_graph'); SELECT create_vlabel('agload_test_graph','Country'); SELECT load_labels_from_file('agload_test_graph', 'Country', 'age_load/countries.csv'); SELECT create_vlabel('agload_test_graph','City'); SELECT load_labels_from_file('agload_test_graph', 'City', 'age_load/cities.csv'); SELECT create_elabel('agload_test_graph','has_city'); SELECT load_edges_from_file('agload_test_graph', 'has_city', 'age_load/edges.csv'); SELECT table_catalog, table_schema, lower(table_name) as table_name, table_type FROM information_schema.tables WHERE table_schema = 'agload_test_graph' ORDER BY table_name ASC; SELECT COUNT(*) FROM agload_test_graph."Country"; SELECT COUNT(*) FROM agload_test_graph."City"; SELECT COUNT(*) FROM agload_test_graph."has_city"; SELECT COUNT(*) FROM cypher('agload_test_graph', $$MATCH(n) RETURN n$$) as (n agtype); SELECT COUNT(*) FROM cypher('agload_test_graph', $$MATCH (a)-[e]->(b) RETURN e$$) as (n agtype); SELECT create_vlabel('agload_test_graph','Country2'); SELECT load_labels_from_file('agload_test_graph', 'Country2', 'age_load/countries.csv', false); SELECT create_vlabel('agload_test_graph','City2'); SELECT load_labels_from_file('agload_test_graph', 'City2', 'age_load/cities.csv', false); SELECT COUNT(*) FROM agload_test_graph."Country2"; SELECT COUNT(*) FROM agload_test_graph."City2"; SELECT id FROM agload_test_graph."Country" LIMIT 10; SELECT id FROM agload_test_graph."Country2" LIMIT 10; SELECT * FROM cypher('agload_test_graph', $$MATCH(n:Country {iso2 : 'BE'}) RETURN id(n), n.name, n.iso2 $$) as ("id(n)" agtype, "n.name" agtype, "n.iso2" agtype); SELECT * FROM cypher('agload_test_graph', $$MATCH(n:Country2 {iso2 : 'BE'}) RETURN id(n), n.name, n.iso2 $$) as ("id(n)" agtype, "n.name" agtype, "n.iso2" agtype); SELECT * FROM cypher('agload_test_graph', $$MATCH(n:Country {iso2 : 'AT'}) RETURN id(n), n.name, n.iso2 $$) as ("id(n)" agtype, "n.name" agtype, "n.iso2" agtype); SELECT * FROM cypher('agload_test_graph', $$MATCH(n:Country2 {iso2 : 'AT'}) RETURN id(n), n.name, n.iso2 $$) as ("id(n)" agtype, "n.name" agtype, "n.iso2" agtype); SELECT * FROM cypher('agload_test_graph', $$ MATCH (u:Country {region : "Europe"}) WHERE u.name =~ 'Cro.*' RETURN u.name, u.region $$) AS (result_1 agtype, result_2 agtype); SELECT drop_graph('agload_test_graph', true); age-PG16-v1.5.0-rc0/regress/sql/agtype.sql000066400000000000000000001312421454606241200200660ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ -- -- AGTYPE data type regression tests -- -- -- Load extension and set path -- LOAD 'age'; SET extra_float_digits = 0; SET search_path TO ag_catalog; -- -- Create a table using the AGTYPE type -- CREATE TABLE agtype_table (type text, agtype agtype); -- -- Insert values to exercise agtype_in/agtype_out -- INSERT INTO agtype_table VALUES ('bool', 'true'); INSERT INTO agtype_table VALUES ('bool', 'false'); INSERT INTO agtype_table VALUES ('null', 'null'); INSERT INTO agtype_table VALUES ('string', '""'); INSERT INTO agtype_table VALUES ('string', '"This is a string"'); INSERT INTO agtype_table VALUES ('integer', '0'); INSERT INTO agtype_table VALUES ('integer', '9223372036854775807'); INSERT INTO agtype_table VALUES ('integer', '-9223372036854775808'); INSERT INTO agtype_table VALUES ('float', '0.0'); INSERT INTO agtype_table VALUES ('float', '1.0'); INSERT INTO agtype_table VALUES ('float', '-1.0'); INSERT INTO agtype_table VALUES ('float', '100000000.000001'); INSERT INTO agtype_table VALUES ('float', '-100000000.000001'); INSERT INTO agtype_table VALUES ('float', '0.00000000000000012345'); INSERT INTO agtype_table VALUES ('float', '-0.00000000000000012345'); INSERT INTO agtype_table VALUES ('numeric', '100000000000.0000000000001::numeric'); INSERT INTO agtype_table VALUES ('numeric', '-100000000000.0000000000001::numeric'); INSERT INTO agtype_table VALUES ('integer array', '[-9223372036854775808, -1, 0, 1, 9223372036854775807]'); INSERT INTO agtype_table VALUES('float array', '[-0.00000000000000012345, -100000000.000001, -1.0, 0.0, 1.0, 100000000.000001, 0.00000000000000012345]'); INSERT INTO agtype_table VALUES('mixed array', '[true, false, null, "string", 1, 1.0, {"bool":true}, -1::numeric, [1,3,5]]'); INSERT INTO agtype_table VALUES('object', '{"bool":true, "null":null, "string":"string", "integer":1, "float":1.2, "arrayi":[-1,0,1], "arrayf":[-1.0, 0.0, 1.0], "object":{"bool":true, "null":null, "string":"string", "int":1, "float":8.0}}'); INSERT INTO agtype_table VALUES ('numeric array', '[-5::numeric, -1::numeric, 0::numeric, 1::numeric, 9223372036854775807::numeric]'); -- -- Special float values: NaN, +/- Infinity -- INSERT INTO agtype_table VALUES ('float nan', 'nan'); INSERT INTO agtype_table VALUES ('float Infinity', 'Infinity'); INSERT INTO agtype_table VALUES ('float -Infinity', '-Infinity'); INSERT INTO agtype_table VALUES ('float inf', 'inf'); INSERT INTO agtype_table VALUES ('float -inf', '-inf'); SELECT * FROM agtype_table; -- -- These should fail -- INSERT INTO agtype_table VALUES ('bad integer', '9223372036854775808'); INSERT INTO agtype_table VALUES ('bad integer', '-9223372036854775809'); INSERT INTO agtype_table VALUES ('bad float', '-NaN'); INSERT INTO agtype_table VALUES ('bad float', 'Infi'); INSERT INTO agtype_table VALUES ('bad float', '-Infi'); -- -- Test agtype mathematical operator functions -- +, -, unary -, *, /, %, and ^ -- SELECT agtype_add('1', '-1'); SELECT agtype_add('1', '-1.0'); SELECT agtype_add('1.0', '-1'); SELECT agtype_add('1.0', '-1.0'); SELECT agtype_add('1', '-1.0::numeric'); SELECT agtype_add('1.0', '-1.0::numeric'); SELECT agtype_add('1::numeric', '-1.0::numeric'); SELECT agtype_sub('-1', '-1'); SELECT agtype_sub('-1', '-1.0'); SELECT agtype_sub('-1.0', '-1'); SELECT agtype_sub('-1.0', '-1.0'); SELECT agtype_sub('1', '-1.0::numeric'); SELECT agtype_sub('1.0', '-1.0::numeric'); SELECT agtype_sub('1::numeric', '-1.0::numeric'); SELECT agtype_sub('[1, 2, 3]', '1'); SELECT agtype_sub('{"a": 1, "b": 2, "c": 3}', '"a"'); SELECT agtype_neg('-1'); SELECT agtype_neg('-1.0'); SELECT agtype_neg('0'); SELECT agtype_neg('0.0'); SELECT agtype_neg('0::numeric'); SELECT agtype_neg('-1::numeric'); SELECT agtype_neg('1::numeric'); SELECT agtype_mul('-2', '3'); SELECT agtype_mul('2', '-3.0'); SELECT agtype_mul('-2.0', '3'); SELECT agtype_mul('2.0', '-3.0'); SELECT agtype_mul('-2', '3::numeric'); SELECT agtype_mul('2.0', '-3::numeric'); SELECT agtype_mul('-2.0::numeric', '3::numeric'); SELECT agtype_div('-4', '3'); SELECT agtype_div('4', '-3.0'); SELECT agtype_div('-4.0', '3'); SELECT agtype_div('4.0', '-3.0'); SELECT agtype_div('4', '-3.0::numeric'); SELECT agtype_div('-4.0', '3::numeric'); SELECT agtype_div('4.0::numeric', '-3::numeric'); SELECT agtype_mod('-11', '3'); SELECT agtype_mod('11', '-3.0'); SELECT agtype_mod('-11.0', '3'); SELECT agtype_mod('11.0', '-3.0'); SELECT agtype_mod('11', '-3.0::numeric'); SELECT agtype_mod('-11.0', '3::numeric'); SELECT agtype_mod('11.0::numeric', '-3::numeric'); SELECT agtype_pow('-2', '3'); SELECT agtype_pow('2', '-1.0'); SELECT agtype_pow('2.0', '3'); SELECT agtype_pow('2.0', '-1.0'); SELECT agtype_pow('2::numeric', '3'); SELECT agtype_pow('2::numeric', '-1.0'); SELECT agtype_pow('-2', '3::numeric'); SELECT agtype_pow('2.0', '-1.0::numeric'); SELECT agtype_pow('2.0::numeric', '-1.0::numeric'); -- -- Test overloaded agtype any mathematical operator functions -- +, -, *, /, and % -- SELECT agtype_any_add('1', -1); SELECT agtype_any_add('1.0', -1); SELECT agtype_any_add('1::numeric', 1); SELECT agtype_any_add('1.0::numeric', 1); SELECT agtype_any_sub('1', -1); SELECT agtype_any_sub('1.0', -1); SELECT agtype_any_sub('1::numeric', 1); SELECT agtype_any_sub('1.0::numeric', 1); SELECT agtype_any_mul('-2', 3); SELECT agtype_any_mul('2.0', -3); SELECT agtype_any_mul('-2::numeric', 3); SELECT agtype_any_mul('-2.0::numeric', 3); SELECT agtype_any_div('-4', 3); SELECT agtype_any_div('4.0', -3); SELECT agtype_any_div('-4::numeric', 3); SELECT agtype_any_div('-4.0::numeric', 3); SELECT agtype_any_mod('-11', 3); SELECT agtype_any_mod('11.0', -3); SELECT agtype_any_mod('-11::numeric', 3); SELECT agtype_any_mod('-11.0::numeric', 3); -- -- Should fail with divide by zero -- SELECT agtype_div('1', '0'); SELECT agtype_div('1', '0.0'); SELECT agtype_div('1.0', '0'); SELECT agtype_div('1.0', '0.0'); SELECT agtype_div('1', '0::numeric'); SELECT agtype_div('1.0', '0::numeric'); SELECT agtype_div('1::numeric', '0'); SELECT agtype_div('1::numeric', '0.0'); SELECT agtype_div('1::numeric', '0::numeric'); SELECT agtype_any_div('1', 0); SELECT agtype_any_div('1.0', 0); SELECT agtype_any_div('-1::numeric', 0); SELECT agtype_any_div('-1.0::numeric', 0); -- -- Should get Infinity -- SELECT agtype_pow('0', '-1'); SELECT agtype_pow('-0.0', '-1'); -- -- Should get - ERROR: zero raised to a negative power is undefined -- SELECT agtype_pow('0', '-1::numeric'); SELECT agtype_pow('-0.0', '-1::numeric'); SELECT agtype_pow('0::numeric', '-1'); SELECT agtype_pow('-0.0::numeric', '-1'); SELECT agtype_pow('-0.0::numeric', '-1'); -- -- Test operators +, -, unary -, *, /, %, and ^ -- SELECT '3.14'::agtype + '3.14'::agtype; SELECT '3.14'::agtype - '3.14'::agtype; SELECT -'3.14'::agtype; SELECT '3.14'::agtype * '3.14'::agtype; SELECT '3.14'::agtype / '3.14'::agtype; SELECT '3.14'::agtype % '3.14'::agtype; SELECT '3.14'::agtype ^ '2'::agtype; SELECT '3'::agtype + '3'::agtype; SELECT '3'::agtype + '3.14'::agtype; SELECT '3'::agtype + '3.14::numeric'::agtype; SELECT '3.14'::agtype + '3.14::numeric'::agtype; SELECT '3.14::numeric'::agtype + '3.14::numeric'::agtype; -- -- Test operator - for extended functionality -- SELECT '{"a":1 , "b":2, "c":3}'::agtype - '"a"'; SELECT '{"a":null , "b":2, "c":3}'::agtype - '"a"'; SELECT '{"a":1 , "b":2, "c":3}'::agtype - '"b"'; SELECT '{"a":1 , "b":2, "c":3}'::agtype - '"c"'; SELECT '{"a":1 , "b":2, "c":3}'::agtype - '"d"'; SELECT '{"a":1 , "b":2, "c":3}'::agtype - '""'; SELECT '{"a":1 , "b":2, "c":3}'::agtype - '"1"'; SELECT '{"a":1 , "b":2, "c":3, "1": 4}'::agtype - '"1"'; SELECT '{"a":1 , "b":2, "c":3}'::agtype - age_tostring('a'); SELECT '{"a":1 , "b":2, "c":3}'::agtype - age_tostring(1); SELECT '{"a":1 , "b":2, "c":3, "1": 4}'::agtype - age_tostring(1); SELECT '{}'::agtype - '"a"'; SELECT '["a","b","c"]'::agtype - 3; SELECT '["a","b","c"]'::agtype - 2; SELECT '["a","b","c"]'::agtype - 1; SELECT '["a","b","c"]'::agtype - 0; SELECT '["a","b","c"]'::agtype - -1; SELECT '["a","b","c"]'::agtype - -2; SELECT '["a","b","c"]'::agtype - -3; SELECT '["a","b","c"]'::agtype - -4; SELECT '["a","b","c"]'::agtype - '2'; SELECT '["a","b","c"]'::agtype - -(true::int); SELECT '[]'::agtype - 1; SELECT '{"a":1 , "b":2, "c":3}'::agtype - '["b"]'::agtype; SELECT '{"a":1 , "b":2, "c":3}'::agtype - '["c","b"]'::agtype; SELECT '{"a":1 , "b":2, "c":3}'::agtype - '[]'::agtype; SELECT '["a","b","c"]'::agtype - '[]'; SELECT '["a","b","c"]'::agtype - '[1]'; SELECT '[1, 2, 3, 4, 5, 6]'::agtype - '[9]'; SELECT '["a","b","c"]'::agtype - '[1, -1]'; SELECT '["a","b","c"]'::agtype - '[1, -1, 3, 4]'; SELECT '["a","b","c"]'::agtype - '[1, -1, 3, 4, 0]'; SELECT '["a","b","c"]'::agtype - '[-1, 1, 3, 4, 1]'; SELECT '["a","b","c"]'::agtype - '[-1, 1, 3, 4, 0]'; SELECT '["a","b","c"]'::agtype - '[1, 1]'; SELECT '["a","b","c"]'::agtype - '[1, 1, 1]'; SELECT '["a","b","c"]'::agtype - '[1, 1, -1]'; SELECT '["a","b","c"]'::agtype - '[1, 1, -1, -1]'; SELECT '["a","b","c"]'::agtype - '[-2, -4, -5, -1]'; SELECT '[1, 2, 3, 4, 5, 6]'::agtype - '[0, 4, 3, 2]'; SELECT '[1, 2, 3, 4, 5, 6]'::agtype - '[0, 4, 3, 2, -1]'; SELECT '[1, 2, 3, 4, 5, 6]'::agtype - '[3, 3, 4, 4, 6, 8, 9]'; SELECT '[1, 2, 3, 4, 5, 6]'::agtype - '[8, 9, -7, -6]'; -- multiple sub operations SELECT '{"a":1 , "b":2, "c":3, "1": 4}'::agtype - age_tostring(1) - age_tostring(1); SELECT '{"a":1 , "b":2, "c":3, "1": 4}'::agtype - age_tostring(1) - age_tostring('a'); SELECT '{"a":1 , "b":2, "c":3, "1": 4}'::agtype - age_tostring(1) - age_tostring('a') - age_tostring('e') - age_tostring('c'); SELECT '{"a":1 , "b":2, "c":3}'::agtype - '["c","b"]' - '["a"]'; SELECT '{"a":1 , "b":2, "c":3}'::agtype - '["c","b"]' - '["e"]' - '["a"]'; SELECT '{"a":1 , "b":2, "c":3}'::agtype - '["c","b"]' - '[]'; SELECT '["a","b","c"]'::agtype - '[-1]' - '[-1]'; SELECT '["a","b","c"]'::agtype - '[-1]' - '[-2]' - '[-2]'; SELECT '["a","b","c"]'::agtype - '[-1]' - '[]' - '[-2]'; SELECT '["a","b","c"]'::agtype - '[-1]' - '[4]' - '[-2]'; SELECT '[1, 2, 3, 4, 5, 6]'::agtype - '[8, 9, -7, -6]' - '1'; SELECT '[1, 2, 3, 4, 5, 6]'::agtype - '[8, 9, -7, -6]' - '[1, 0]'; SELECT '[1, 2, 3, 4, 5, 6]'::agtype - '[8, 9, -7, -6]' - 3 - '[]'; -- errors out SELECT '["a","b","c"]'::agtype - '["1"]'; SELECT '["a","b","c"]'::agtype - '[null]'; SELECT '["a","b","c"]'::agtype - '"1"'; SELECT '["a","b","c"]'::agtype - 'null'; SELECT '["a","b","c"]'::agtype - '[-1]' - '["-2"]' - '[-2]'; SELECT '{"a":1 , "b":2, "c":3}'::agtype - '[1]'; SELECT '{"a":1 , "b":2, "c":3}'::agtype - '[null]'; SELECT '{"a":1 , "b":2, "c":3}'::agtype - '1'; SELECT '{"a":1 , "b":2, "c":3}'::agtype - 'null'; SELECT '{"a":1 , "b":2, "c":3}'::agtype - '["c","b"]' - '[1]' - '["a"]'; SELECT 'null'::agtype - '1'; SELECT 'null'::agtype - '[1]'; SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype - '"a"'; SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype - '["a"]'; SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype - '[1]'; SELECT '{"id": 1688849860263951, "label": "e_var", "end_id": 281474976710664, "start_id": 281474976710663, "properties": {"id": 0}}::edge'::agtype - '{"id": 1688849860263951, "label": "e_var", "end_id": 281474976710664, "start_id": 281474976710663, "properties": {"id": 0}}::edge'::agtype; SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype - '[]'; -- -- Test operator + for extended functionality -- SELECT '[1, 2, 3]'::agtype + '[4, 5]'::agtype; SELECT '[1, 2, true, "string", 1.4::numeric]'::agtype + '[4.5, -5::numeric, {"a": true}]'::agtype; SELECT '[{"a":1 , "b":2, "c":3}]'::agtype + '[]'; SELECT '[{"a":1 , "b":2, "c":3}]'::agtype + '[{"d": 4}]'; SELECT '{"a":1 , "b":2, "c":3}'::agtype + '["b", 2, {"d": 4}]'::agtype; SELECT '["b", 2, {"d": 4}]'::agtype + '{"a":1 , "b":2, "c":3}'::agtype; SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype + '[1]'; SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888}}::vertex'::agtype + '[1, "e", true]'; SELECT '[]'::agtype + '{}'; SELECT '[]'::agtype + '{"a": 1}'; SELECT '{"a":1 , "b":2, "c":3}'::agtype + '{"b": 2}'; SELECT '{"a":1 , "b":2, "c":3}'::agtype + '{"": 2}'; SELECT '{"a":1 , "b":2, "c":3}'::agtype + '{"a":1 , "b":2, "c":3}'; SELECT '{"a":1 , "b":2, "c":3}'::agtype + '{}'; SELECT '{}'::agtype + '{}'; SELECT '1'::agtype + '[{"a":1 , "b":2, "c":3}]'::agtype; SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888}}::vertex'::agtype + '{"d": 4}'; SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888}}::vertex'::agtype + '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888}}::vertex'::agtype; SELECT '[{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path'::agtype + ' [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path'::agtype; SELECT '[{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path'::agtype + '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype; SELECT '{"id": 1688849860263951, "label": "e_var", "end_id": 281474976710664, "start_id": 281474976710663, "properties": {"id": 0}}::edge'::agtype + '{"id": 1688849860263951, "label": "e_var", "end_id": 281474976710664, "start_id": 281474976710663, "properties": {"id": 0}}::edge'::agtype; SELECT '{"id": 1688849860263951, "label": "e_var", "end_id": 281474976710664, "start_id": 281474976710663, "properties": {"id": 0}}::edge'::agtype + '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888}}::vertex'::agtype; -- errors out SELECT '1'::agtype + '{"a":1 , "b":2, "c":3}'::agtype; SELECT '{"a":1 , "b":2, "c":3}'::agtype + '"string"'; -- -- Test overloaded agytype any operators +, -, *, /, % -- SELECT '3'::agtype + 3; SELECT '3.14'::agtype + 3; SELECT '3.14::numeric'::agtype + 3; SELECT 3 + '3'::agtype; SELECT 3 + '3.14'::agtype; SELECT 3 + '3.14::numeric'::agtype; SELECT '3'::agtype - 3; SELECT '3.14'::agtype - 3; SELECT '3.14::numeric'::agtype - 3; SELECT 3 - '3'::agtype; SELECT 3 - '3.14'::agtype; SELECT 3 - '3.14::numeric'::agtype; SELECT '3'::agtype * 3; SELECT '3.14'::agtype * 3; SELECT '3.14::numeric'::agtype * 3; SELECT 3 * '3'::agtype; SELECT 3 * '3.14'::agtype; SELECT 3 * '3.14::numeric'::agtype; SELECT '3'::agtype / 3; SELECT '3.14'::agtype / 3; SELECT '3.14::numeric'::agtype / 3; SELECT 3 / '3'::agtype; SELECT 3 / '3.14'::agtype; SELECT 3 / '3.14::numeric'::agtype; SELECT '3'::agtype % 3; SELECT '3.14'::agtype % 3; SELECT '3.14::numeric'::agtype % 3; SELECT 3 % '3'::agtype; SELECT 3 % '3.14'::agtype; SELECT 3 % '3.14::numeric'::agtype; -- -- Test overloaded agytype any functions and operators for NULL input -- +, -, *, /, %, =, <>, <, >, <=, >= -- These should all return null SELECT agtype_any_add('null'::agtype, 1); SELECT agtype_any_sub('null'::agtype, 1); SELECT agtype_any_mul('null'::agtype, 1); SELECT agtype_any_div('null'::agtype, 1); SELECT agtype_any_mod('null'::agtype, 1); SELECT agtype_any_add(null, '1'::agtype); SELECT agtype_any_sub(null, '1'::agtype); SELECT agtype_any_mul(null, '1'::agtype); SELECT agtype_any_div(null, '1'::agtype); SELECT agtype_any_mod(null, '1'::agtype); SELECT 1 + 'null'::agtype; SELECT 1 - 'null'::agtype; SELECT 1 * 'null'::agtype; SELECT 1 / 'null'::agtype; SELECT 1 % 'null'::agtype; SELECT '1'::agtype + null; SELECT '1'::agtype - null; SELECT '1'::agtype * null; SELECT '1'::agtype / null; SELECT '1'::agtype % null; SELECT 1 = 'null'::agtype; SELECT 1 <> 'null'::agtype; SELECT 1 < 'null'::agtype; SELECT 1 > 'null'::agtype; SELECT 1 <= 'null'::agtype; SELECT 1 >= 'null'::agtype; SELECT '1'::agtype = null; SELECT '1'::agtype <> null; SELECT '1'::agtype < null; SELECT '1'::agtype > null; SELECT '1'::agtype <= null; SELECT '1'::agtype >= null; SELECT agtype_any_eq('null'::agtype, 1); SELECT agtype_any_ne('null'::agtype, 1); SELECT agtype_any_lt('null'::agtype, 1); SELECT agtype_any_gt('null'::agtype, 1); SELECT agtype_any_le('null'::agtype, 1); SELECT agtype_any_ge('null'::agtype, 1); SELECT agtype_any_eq(null, '1'::agtype); SELECT agtype_any_ne(null, '1'::agtype); SELECT agtype_any_lt(null, '1'::agtype); SELECT agtype_any_gt(null, '1'::agtype); SELECT agtype_any_le(null, '1'::agtype); SELECT agtype_any_ge(null, '1'::agtype); -- -- Test orderability of comparison operators =, <>, <, >, <=, >= -- These should all return true -- Integer SELECT agtype_in('1') = agtype_in('1'); SELECT agtype_in('1') <> agtype_in('2'); SELECT agtype_in('1') <> agtype_in('-2'); SELECT agtype_in('1') < agtype_in('2'); SELECT agtype_in('1') > agtype_in('-2'); SELECT agtype_in('1') <= agtype_in('2'); SELECT agtype_in('1') >= agtype_in('-2'); -- Float SELECT agtype_in('1.01') = agtype_in('1.01'); SELECT agtype_in('1.01') <> agtype_in('1.001'); SELECT agtype_in('1.01') <> agtype_in('1.011'); SELECT agtype_in('1.01') < agtype_in('1.011'); SELECT agtype_in('1.01') > agtype_in('1.001'); SELECT agtype_in('1.01') <= agtype_in('1.011'); SELECT agtype_in('1.01') >= agtype_in('1.001'); SELECT agtype_in('1.01') < agtype_in('Infinity'); SELECT agtype_in('1.01') > agtype_in('-Infinity'); -- NaN, under ordering, is considered to be the biggest numeric value -- greater than positive infinity. So, greater than any other number. SELECT agtype_in('1.01') < agtype_in('NaN'); SELECT agtype_in('NaN') > agtype_in('Infinity'); SELECT agtype_in('NaN') > agtype_in('-Infinity'); SELECT agtype_in('NaN') = agtype_in('NaN'); -- Mixed Integer and Float SELECT agtype_in('1') = agtype_in('1.0'); SELECT agtype_in('1') <> agtype_in('1.001'); SELECT agtype_in('1') <> agtype_in('0.999999'); SELECT agtype_in('1') < agtype_in('1.001'); SELECT agtype_in('1') > agtype_in('0.999999'); SELECT agtype_in('1') <= agtype_in('1.001'); SELECT agtype_in('1') >= agtype_in('0.999999'); SELECT agtype_in('1') < agtype_in('Infinity'); SELECT agtype_in('1') > agtype_in('-Infinity'); SELECT agtype_in('1') < agtype_in('NaN'); -- Mixed Float and Integer SELECT agtype_in('1.0') = agtype_in('1'); SELECT agtype_in('1.001') <> agtype_in('1'); SELECT agtype_in('0.999999') <> agtype_in('1'); SELECT agtype_in('1.001') > agtype_in('1'); SELECT agtype_in('0.999999') < agtype_in('1'); -- Mixed Integer and Numeric SELECT agtype_in('1') = agtype_in('1::numeric'); SELECT agtype_in('1') <> agtype_in('2::numeric'); SELECT agtype_in('1') <> agtype_in('-2::numeric'); SELECT agtype_in('1') < agtype_in('2::numeric'); SELECT agtype_in('1') > agtype_in('-2::numeric'); SELECT agtype_in('1') <= agtype_in('2::numeric'); SELECT agtype_in('1') >= agtype_in('-2::numeric'); -- Mixed Float and Numeric SELECT agtype_in('1.01') = agtype_in('1.01::numeric'); SELECT agtype_in('1.01') <> agtype_in('1.001::numeric'); SELECT agtype_in('1.01') <> agtype_in('1.011::numeric'); SELECT agtype_in('1.01') < agtype_in('1.011::numeric'); SELECT agtype_in('1.01') > agtype_in('1.001::numeric'); SELECT agtype_in('1.01') <= agtype_in('1.011::numeric'); SELECT agtype_in('1.01') >= agtype_in('1.001::numeric'); -- Strings SELECT agtype_in('"a"') = agtype_in('"a"'); SELECT agtype_in('"a"') <> agtype_in('"b"'); SELECT agtype_in('"a"') < agtype_in('"aa"'); SELECT agtype_in('"b"') > agtype_in('"aa"'); SELECT agtype_in('"a"') <= agtype_in('"aa"'); SELECT agtype_in('"b"') >= agtype_in('"aa"'); -- Lists SELECT agtype_in('[0, 1, null, 2]') = agtype_in('[0, 1, null, 2]'); SELECT agtype_in('[0, 1, null, 2]') <> agtype_in('[2, null, 1, 0]'); SELECT agtype_in('[0, 1, null]') < agtype_in('[0, 1, null, 2]'); SELECT agtype_in('[1, 1, null, 2]') > agtype_in('[0, 1, null, 2]'); -- Objects (Maps) SELECT agtype_in('{"bool":true, "null": null}') = agtype_in('{"null":null, "bool":true}'); SELECT agtype_in('{"bool":true}') < agtype_in('{"bool":true, "null": null}'); -- Comparisons between types -- Path < Edge < Vertex < Object < List < String < Boolean < Integer = Float = Numeric < Null SELECT agtype_in('1') < agtype_in('null'); SELECT agtype_in('NaN') < agtype_in('null'); SELECT agtype_in('Infinity') < agtype_in('null'); SELECT agtype_in('true') < agtype_in('1'); SELECT agtype_in('true') < agtype_in('NaN'); SELECT agtype_in('true') < agtype_in('Infinity'); SELECT agtype_in('"string"') < agtype_in('true'); SELECT agtype_in('[1,3,5,7,9,11]') < agtype_in('"string"'); SELECT agtype_in('{"bool":true, "integer":1}') < agtype_in('[1,3,5,7,9,11]'); SELECT agtype_in('[1, "string"]') < agtype_in('[1, 1]'); SELECT agtype_in('{"bool":true, "integer":1}') < agtype_in('{"bool":true, "integer":null}'); SELECT agtype_in('{"id":0, "label": "v", "properties":{"i":0}}::vertex') < agtype_in('{"bool":true, "i":0}'); SELECT agtype_in('{"id":2, "start_id":0, "end_id":1, "label": "e", "properties":{"i":0}}::edge') < agtype_in('{"id":0, "label": "v", "properties":{"i":0}}::vertex'); SELECT agtype_in('[{"id": 0, "label": "v", "properties": {"i": 0}}::vertex, {"id": 2, "start_id": 0, "end_id": 1, "label": "e", "properties": {"i": 0}}::edge, {"id": 1, "label": "v", "properties": {"i": 0}}::vertex]::path') < agtype_in('{"id":2, "start_id":0, "end_id":1, "label": "e", "properties":{"i":0}}::edge'); SELECT agtype_in('1::numeric') < agtype_in('null'); SELECT agtype_in('true') < agtype_in('1::numeric'); -- Testing orderability between types SELECT * FROM create_graph('orderability_graph'); SELECT * FROM cypher('orderability_graph', $$ CREATE (:vertex {prop: null}), (:vertex {prop: 1}), (:vertex {prop: 1.01}),(:vertex {prop: true}), (:vertex {prop:"string"}),(:vertex {prop:"string_2"}), (:vertex {prop:[1, 2, 3]}), (:vertex {prop:[1, 2, 3, 4, 5]}), (:vertex {prop:{bool:true, i:0}}), (:vertex {prop:{bool:true, i:null}}), (:vertex {prop: {id:0, label: "v", properties:{i:0}}::vertex}), (:vertex {prop: {id: 2, start_id: 0, end_id: 1, label: "e", properties: {i: 0}}::edge}), (:vertex {prop: [{id: 0, label: "v", properties: {i: 0}}::vertex, {id: 2, start_id: 0, end_id: 1, label: "e", properties: {i: 0}}::edge, {id: 1, label: "v", properties: {i: 0}}::vertex]::path}) $$) AS (x agtype); SELECT * FROM cypher('orderability_graph', $$ MATCH (n) RETURN n ORDER BY n.prop $$) AS (sorted agtype); SELECT * FROM cypher('orderability_graph', $$ MATCH (n) RETURN n ORDER BY n.prop DESC $$) AS (sorted agtype); SELECT * FROM drop_graph('orderability_graph', true); -- -- Test overloaded agytype any comparison operators =, <>, <, >, <=, >=, -- -- Integer SELECT agtype_in('1') = 1; SELECT agtype_in('1') <> 2; SELECT agtype_in('1') <> -2; SELECT agtype_in('1') < 2; SELECT agtype_in('1') > -2; SELECT agtype_in('1') <= 2; SELECT agtype_in('1') >= -2; -- Float SELECT agtype_in('1.01') = 1.01; SELECT agtype_in('1.01') <> 1.001; SELECT agtype_in('1.01') <> 1.011; SELECT agtype_in('1.01') < 1.011; SELECT agtype_in('1.01') > 1.001; SELECT agtype_in('1.01') <= 1.011; SELECT agtype_in('1.01') >= 1.001; SELECT agtype_in('1.01') < 'Infinity'; SELECT agtype_in('1.01') > '-Infinity'; -- NaN, under ordering, is considered to be the biggest numeric value -- greater than positive infinity. So, greater than any other number. SELECT agtype_in('1.01') < 'NaN'; SELECT agtype_in('NaN') > 'Infinity'; SELECT agtype_in('NaN') > '-Infinity'; SELECT agtype_in('NaN') = 'NaN'; -- Mixed Integer and Float SELECT agtype_in('1') = 1.0; SELECT agtype_in('1') <> 1.001; SELECT agtype_in('1') <> 0.999999; SELECT agtype_in('1') < 1.001; SELECT agtype_in('1') > 0.999999; SELECT agtype_in('1') <= 1.001; SELECT agtype_in('1') >= 0.999999; SELECT agtype_in('1') < 'Infinity'; SELECT agtype_in('1') > '-Infinity'; SELECT agtype_in('1') < 'NaN'; -- Mixed Float and Integer SELECT agtype_in('1.0') = 1; SELECT agtype_in('1.001') <> 1; SELECT agtype_in('0.999999') <> 1; SELECT agtype_in('1.001') > 1; SELECT agtype_in('0.999999') < 1; -- Mixed Integer and Numeric SELECT agtype_in('1') = 1::numeric; SELECT agtype_in('1') <> 2::numeric; SELECT agtype_in('1') <> -2::numeric; SELECT agtype_in('1') < 2::numeric; SELECT agtype_in('1') > -2::numeric; SELECT agtype_in('1') <= 2::numeric; SELECT agtype_in('1') >= -2::numeric; -- Mixed Float and Numeric SELECT agtype_in('1.01') = 1.01::numeric; SELECT agtype_in('1.01') <> 1.001::numeric; SELECT agtype_in('1.01') <> 1.011::numeric; SELECT agtype_in('1.01') < 1.011::numeric; SELECT agtype_in('1.01') > 1.001::numeric; SELECT agtype_in('1.01') <= 1.011::numeric; SELECT agtype_in('1.01') >= 1.001::numeric; -- Strings SELECT agtype_in('"a"') = '"a"'; SELECT agtype_in('"a"') <> '"b"'; SELECT agtype_in('"a"') < '"aa"'; SELECT agtype_in('"b"') > '"aa"'; SELECT agtype_in('"a"') <= '"aa"'; SELECT agtype_in('"b"') >= '"aa"'; -- Lists SELECT agtype_in('[0, 1, null, 2]') = '[0, 1, null, 2]'; SELECT agtype_in('[0, 1, null, 2]') <> '[2, null, 1, 0]'; SELECT agtype_in('[0, 1, null]') < '[0, 1, null, 2]'; SELECT agtype_in('[1, 1, null, 2]') > '[0, 1, null, 2]'; -- Objects (Maps) SELECT agtype_in('{"bool":true, "null": null}') = '{"null":null, "bool":true}'; SELECT agtype_in('{"bool":true}') < '{"bool":true, "null": null}'; -- Comparisons between types -- Object < List < String < Boolean < Integer = Float = Numeric < Null SELECT agtype_in('1') < 'null'; SELECT agtype_in('NaN') < 'null'; SELECT agtype_in('Infinity') < 'null'; SELECT agtype_in('true') < '1'; SELECT agtype_in('true') < 'NaN'; SELECT agtype_in('true') < 'Infinity'; SELECT agtype_in('"string"') < 'true'; SELECT agtype_in('[1,3,5,7,9,11]') < '"string"'; SELECT agtype_in('{"bool":true, "integer":1}') < '[1,3,5,7,9,11]'; SELECT agtype_in('[1, "string"]') < '[1, 1]'; SELECT agtype_in('{"bool":true, "integer":1}') < '{"bool":true, "integer":null}'; SELECT agtype_in('1::numeric') < 'null'; SELECT agtype_in('true') < '1::numeric'; -- -- Test agtype to boolean cast -- SELECT agtype_to_bool(agtype_in('true')); SELECT agtype_to_bool(agtype_in('false')); -- These should all fail SELECT agtype_to_bool(agtype_in('1')); SELECT agtype_to_bool(agtype_in('null')); SELECT agtype_to_bool(agtype_in('1.0')); SELECT agtype_to_bool(agtype_in('"string"')); SELECT agtype_to_bool(agtype_in('[1,2,3]')); SELECT agtype_to_bool(agtype_in('{"bool":true}')); -- -- Test boolean to agtype cast -- SELECT bool_to_agtype(true); SELECT bool_to_agtype(false); SELECT bool_to_agtype(null); SELECT bool_to_agtype(true) = bool_to_agtype(true); SELECT bool_to_agtype(true) <> bool_to_agtype(false); -- -- Test boolean to pg_bigint cast -- SELECT agtype_to_int8(agtype_in('true')); SELECT agtype_to_int8(agtype_in('false')); -- should return SQL NULL SELECT agtype_to_int8(agtype_in('null')); SELECT agtype_to_int8(NULL); -- non agtype input SELECT agtype_to_int8(1); SELECT agtype_to_int8(3.14); SELECT agtype_to_int8(3.14::numeric); SELECT agtype_to_int8('3'); SELECT agtype_to_int8(true); SELECT agtype_to_int8(false); SELECT agtype_to_int8('3.14'); SELECT agtype_to_int8('true'); SELECT agtype_to_int8('false'); -- should fail SELECT agtype_to_int8('neither'); SELECT agtype_to_int8('NaN'); SELECT agtype_to_int8('Inf'); SELECT agtype_to_int8(NaN); SELECT agtype_to_int8(Inf); SELECT agtype_to_int8('{"name":"John"}'); SELECT agtype_to_int8('[1,2,3]'); -- -- Test boolean to integer cast -- SELECT agtype_to_int4(agtype_in('true')); SELECT agtype_to_int4(agtype_in('false')); -- -- Test agtype to integer4 cast -- SELECT agtype_to_int4(agtype_in('1')); SELECT agtype_to_int4(agtype_in('1.45')); SELECT agtype_to_int4(agtype_in('1.444::numeric')); -- These should all fail SELECT agtype_to_int4(agtype_in('"string"')); SELECT agtype_to_int4(agtype_in('[1, 2, 3]')); SELECT agtype_to_int4(agtype_in('{"int":1}')); -- should return SQL NULL SELECT agtype_to_int4(agtype_in('null')); SELECT agtype_to_int4(NULL); -- non agtype input SELECT agtype_to_int4(1); SELECT agtype_to_int4(3.14); SELECT agtype_to_int4(3.14::numeric); SELECT agtype_to_int4('3'); SELECT agtype_to_int4(true); SELECT agtype_to_int4(false); SELECT agtype_to_int4('3.14'); SELECT agtype_to_int4('true'); SELECT agtype_to_int4('false'); -- should error SELECT agtype_to_int4('neither'); SELECT agtype_to_int4('NaN'); SELECT agtype_to_int4('Inf'); SELECT agtype_to_int4(NaN); SELECT agtype_to_int4(Inf); SELECT agtype_to_int4('{"name":"John"}'); SELECT agtype_to_int4('[1,2,3]'); -- -- Test boolean to integer2 cast -- SELECT agtype_to_int2(agtype_in('true')); SELECT agtype_to_int2(agtype_in('false')); -- -- Test agtype to integer2 cast -- SELECT agtype_to_int2(agtype_in('1')); SELECT agtype_to_int2(agtype_in('1.45')); SELECT agtype_to_int2(agtype_in('1.444::numeric')); -- These should all fail SELECT agtype_to_int2(agtype_in('"string"')); SELECT agtype_to_int2(agtype_in('[1, 2, 3]')); SELECT agtype_to_int2(agtype_in('{"int":1}')); -- should return SQL NULL SELECT agtype_to_int2(agtype_in('null')); SELECT agtype_to_int2(NULL); -- non agtype input SELECT agtype_to_int2(1); SELECT agtype_to_int2(3.14); SELECT agtype_to_int2(3.14::numeric); SELECT agtype_to_int2('3'); SELECT agtype_to_int2(true); SELECT agtype_to_int2(false); SELECT agtype_to_int2('3.14'); SELECT agtype_to_int2('true'); SELECT agtype_to_int2('false'); -- should error SELECT agtype_to_int2('neither'); SELECT agtype_to_int2('NaN'); SELECT agtype_to_int2('Inf'); SELECT agtype_to_int2(NaN); SELECT agtype_to_int2(Inf); SELECT agtype_to_int2('{"name":"John"}'); SELECT agtype_to_int2('[1,2,3]'); -- -- Test agtype to int[] -- SELECT agtype_to_int4_array(agtype_in('[1,2,3]')); SELECT agtype_to_int4_array(agtype_in('[1.6,2.3,3.66]')); SELECT agtype_to_int4_array(agtype_in('["6","7",3.66]')); -- should error SELECT agtype_to_int4_array(bool('true')); SELECT agtype_to_int4_array((1,2,3,4,5)); -- should return SQL NULL SELECT agtype_to_int4_array(NULL); -- -- Map Literal -- --Invalid Map Key (should fail) SELECT agtype_build_map('[0]'::agtype, null); -- -- Test agtype object/array access operators object.property, object["property"], and array[element] -- Note: At this point, object.property and object["property"] are equivalent. -- SELECT agtype_access_operator('{"bool":true, "array":[1,3,{"bool":false, "int":3, "float":3.14},7], "float":3.14}','"array"','2', '"float"'); -- empty map access SELECT agtype_access_operator('{}', '"array"'); -- empty array access SELECT agtype_access_operator('[]', '0'); -- out of bounds array access SELECT agtype_access_operator('[0, 1]', '2'); SELECT agtype_access_operator('[0, 1]', '-3'); -- array AGTV_NULL element SELECT agtype_access_operator('[1, 3, 5, 7]', 'null'); -- map AGTV_NULL key SELECT agtype_access_operator('{"bool":false, "int":3, "float":3.14}', 'null'); -- invalid map key types SELECT agtype_access_operator('{"bool":false, "int":3, "float":3.14}', 'true'); SELECT agtype_access_operator('{"bool":false, "int":3, "float":3.14}', '2'); SELECT agtype_access_operator('{"bool":false, "int":3, "float":3.14}', '2.0'); -- Test duplicate keys and null value -- expected: only the latest key, among duplicates, will be kept; and null will be removed SELECT * FROM create_graph('agtype_null_duplicate_test'); SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:NULL, b:'bb', c:'cc', d:'dd' }) RETURN a $$) AS (a agtype); SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:'aa', b:'bb', c:'cc', d:'dd' }) RETURN a $$) AS (a agtype); SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:'aa', b:'bb', b:NULL , d:NULL }) RETURN a $$) AS (a agtype); SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:'aa', b:'bb', b:'xx', d:NULL }) RETURN a $$) AS (a agtype); SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:NULL }) RETURN a $$) AS (a agtype); SELECT * FROM drop_graph('agtype_null_duplicate_test', true); -- -- Vertex -- --Basic Vertex Creation SELECT _agtype_build_vertex('1'::graphid, $$label_name$$, agtype_build_map()); SELECT _agtype_build_vertex('1'::graphid, $$label$$, agtype_build_map('id', 2)); --Null properties SELECT _agtype_build_vertex('1'::graphid, $$label_name$$, NULL); --Test access operator SELECT agtype_access_operator(_agtype_build_vertex('1'::graphid, $$label$$, agtype_build_map('id', 2)), '"id"'); SELECT _agtype_build_vertex('1'::graphid, $$label$$, agtype_build_list()); --Vertex in a map SELECT agtype_build_map( 'vertex', _agtype_build_vertex('1'::graphid, $$label_name$$, agtype_build_map())); SELECT agtype_access_operator( agtype_build_map( 'vertex', _agtype_build_vertex('1'::graphid, $$label_name$$, agtype_build_map('key', 'value')), 'other_vertex', _agtype_build_vertex('1'::graphid, $$label_name$$, agtype_build_map('key', 'other_value'))), '"vertex"'); --Vertex in a list SELECT agtype_build_list( _agtype_build_vertex('1'::graphid, $$label_name$$, agtype_build_map()), _agtype_build_vertex('2'::graphid, $$label_name$$, agtype_build_map())); SELECT agtype_access_operator( agtype_build_list( _agtype_build_vertex('1'::graphid, $$label_name$$, agtype_build_map('id', 3)), _agtype_build_vertex('2'::graphid, $$label_name$$, agtype_build_map('id', 4))), '0'); -- -- Edge -- --Basic Edge Creation SELECT _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map()); SELECT _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label$$, agtype_build_map('id', 2)); --Null properties SELECT _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, NULL); --Test access operator SELECT agtype_access_operator(_agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label$$, agtype_build_map('id', 2)),'"id"'); --Edge in a map SELECT agtype_build_map( 'edge', _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map())); SELECT agtype_access_operator( agtype_build_map( 'edge', _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map('key', 'value')), 'other_edge', _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map('key', 'other_value'))), '"edge"'); --Edge in a list SELECT agtype_build_list( _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map()), _agtype_build_edge('2'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map())); SELECT agtype_access_operator( agtype_build_list( _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map('id', 3)), _agtype_build_edge('2'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map('id', 4))), '0'); -- Path SELECT _agtype_build_path( _agtype_build_vertex('2'::graphid, $$label_name$$, agtype_build_map()), _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label$$, agtype_build_map('id', 2)), _agtype_build_vertex('3'::graphid, $$label_name$$, agtype_build_map()) ); --All these paths should produce Errors SELECT _agtype_build_path( _agtype_build_vertex('2'::graphid, $$label_name$$, agtype_build_map()), _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label$$, agtype_build_map('id', 2)) ); SELECT _agtype_build_path( _agtype_build_vertex('2'::graphid, $$label_name$$, agtype_build_map()), _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label$$, agtype_build_map('id', 2)), _agtype_build_vertex('3'::graphid, $$label_name$$, agtype_build_map()), _agtype_build_edge('1'::graphid, '4'::graphid, '5'::graphid, $$label$$, agtype_build_map('id', 2)) ); SELECT _agtype_build_path( _agtype_build_vertex('2'::graphid, $$label_name$$, agtype_build_map()), _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label$$, agtype_build_map('id', 2)), NULL ); SELECT _agtype_build_path( _agtype_build_vertex('2'::graphid, $$label_name$$, agtype_build_map()), _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label$$, agtype_build_map('id', 2)), 1 ); SELECT _agtype_build_path( _agtype_build_vertex('2'::graphid, $$label_name$$, agtype_build_map()), _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label$$, agtype_build_map('id', 2)), _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label$$, agtype_build_map('id', 2)) ); -- -- id, startid, endid -- SELECT age_id(_agtype_build_vertex('1'::graphid, $$label_name$$, agtype_build_map())); SELECT age_id(_agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map('id', 2))); SELECT age_start_id(_agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map('id', 2))); SELECT age_end_id(_agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label_name$$, agtype_build_map('id', 2))); SELECT age_id(_agtype_build_path( _agtype_build_vertex('2'::graphid, $$label_name$$, agtype_build_map()), _agtype_build_edge('1'::graphid, '2'::graphid, '3'::graphid, $$label$$, agtype_build_map('id', 2)), _agtype_build_vertex('3'::graphid, $$label$$, agtype_build_map('id', 2)) )); SELECT age_id(agtype_in('1')); SELECT age_id(NULL); SELECT age_start_id(NULL); SELECT age_end_id(NULL); SELECT age_id(agtype_in('null')); SELECT age_start_id(agtype_in('null')); SELECT age_end_id(agtype_in('null')); -- -- Test STARTS WITH, ENDS WITH, and CONTAINS -- SELECT agtype_string_match_starts_with('"abcdefghijklmnopqrstuvwxyz"', '"abcd"'); SELECT agtype_string_match_ends_with('"abcdefghijklmnopqrstuvwxyz"', '"wxyz"'); SELECT agtype_string_match_contains('"abcdefghijklmnopqrstuvwxyz"', '"abcd"'); SELECT agtype_string_match_contains('"abcdefghijklmnopqrstuvwxyz"', '"hijk"'); SELECT agtype_string_match_contains('"abcdefghijklmnopqrstuvwxyz"', '"wxyz"'); -- should all fail SELECT agtype_string_match_starts_with('"abcdefghijklmnopqrstuvwxyz"', '"bcde"'); SELECT agtype_string_match_ends_with('"abcdefghijklmnopqrstuvwxyz"', '"vwxy"'); SELECT agtype_string_match_contains('"abcdefghijklmnopqrstuvwxyz"', '"hijl"'); --Agtype Hash Comparison Function SELECT agtype_hash_cmp(NULL); SELECT agtype_hash_cmp('1'::agtype); SELECT agtype_hash_cmp('1.0'::agtype); SELECT agtype_hash_cmp('"1"'::agtype); SELECT agtype_hash_cmp('[1]'::agtype); SELECT agtype_hash_cmp('[1, 1]'::agtype); SELECT agtype_hash_cmp('[1, 1, 1]'::agtype); SELECT agtype_hash_cmp('[1, 1, 1, 1]'::agtype); SELECT agtype_hash_cmp('[1, 1, 1, 1, 1]'::agtype); SELECT agtype_hash_cmp('[[1]]'::agtype); SELECT agtype_hash_cmp('[[1, 1]]'::agtype); SELECT agtype_hash_cmp('[[1], 1]'::agtype); SELECT agtype_hash_cmp('[1543872]'::agtype); SELECT agtype_hash_cmp('[1, "abcde", 2.0]'::agtype); SELECT agtype_hash_cmp(agtype_in('null')); SELECT agtype_hash_cmp(agtype_in('[null]')); SELECT agtype_hash_cmp(agtype_in('[null, null]')); SELECT agtype_hash_cmp(agtype_in('[null, null, null]')); SELECT agtype_hash_cmp(agtype_in('[null, null, null, null]')); SELECT agtype_hash_cmp(agtype_in('[null, null, null, null, null]')); SELECT agtype_hash_cmp('{"id":1, "label":"test", "properties":{"id":100}}'::agtype); SELECT agtype_hash_cmp('{"id":1, "label":"test", "properties":{"id":100}}::vertex'::agtype); SELECT agtype_hash_cmp('{"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{}}'::agtype); SELECT agtype_hash_cmp('{"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{}}::edge'::agtype); SELECT agtype_hash_cmp(' [{"id":1, "label":"test", "properties":{"id":100}}::vertex, {"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{}}::edge, {"id":5, "label":"vlabel", "properties":{}}::vertex]'::agtype); SELECT agtype_hash_cmp(' [{"id":1, "label":"test", "properties":{"id":100}}::vertex, {"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{}}::edge, {"id":5, "label":"vlabel", "properties":{}}::vertex]::path'::agtype); --Agtype BTree Comparison Function SELECT agtype_btree_cmp('1'::agtype, '1'::agtype); SELECT agtype_btree_cmp('1'::agtype, '1.0'::agtype); SELECT agtype_btree_cmp('1'::agtype, '"1"'::agtype); SELECT agtype_btree_cmp('"string"'::agtype, '"string"'::agtype); SELECT agtype_btree_cmp('"string"'::agtype, '"string "'::agtype); SELECT agtype_btree_cmp(NULL, NULL); SELECT agtype_btree_cmp(NULL, '1'::agtype); SELECT agtype_btree_cmp('1'::agtype, NULL); SELECT agtype_btree_cmp(agtype_in('null'), NULL); SELECT agtype_btree_cmp( '1'::agtype, '{"id":1, "label":"test", "properties":{"id":100}}::vertex'::agtype); SELECT agtype_btree_cmp( '{"id":1, "label":"test", "properties":{"id":100}}'::agtype, '{"id":1, "label":"test", "properties":{"id":100}}'::agtype); SELECT agtype_btree_cmp( '{"id":1, "label":"test", "properties":{"id":100}}'::agtype, '{"id":1, "label":"test", "properties":{"id":200}}'::agtype); SELECT agtype_btree_cmp( '{"id":1, "label":"test", "properties":{"id":100}}::vertex'::agtype, '{"id":1, "label":"test", "properties":{"id":100}}::vertex'::agtype); SELECT agtype_btree_cmp( '{"id":1, "label":"test", "properties":{"id":100}}::vertex'::agtype, '{"id":1, "label":"test", "properties":{"id":200}}::vertex'::agtype); SELECT agtype_btree_cmp( '{"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{}}::edge'::agtype, '{"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{}}::edge'::agtype); SELECT agtype_btree_cmp( '{"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{"prop1": 1}}::edge'::agtype, '{"id":2, "start_id":4, "end_id": 5, "label":"elabel", "properties":{"prop2": 2}}::edge'::agtype); SELECT agtype_btree_cmp( '{"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{"prop1": 1}}::edge'::agtype, '{"id":8, "start_id":4, "end_id": 5, "label":"elabel", "properties":{"prop2": 2}}::edge'::agtype); SELECT agtype_btree_cmp( '[{"id":1, "label":"test", "properties":{"id":100}}::vertex, {"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{}}::edge, {"id":3, "label":"vlabel", "properties":{}}::vertex]::path'::agtype, '[{"id":1, "label":"test", "properties":{"id":100}}::vertex, {"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{}}::edge, {"id":3, "label":"vlabel", "properties":{}}::vertex]::path'::agtype); SELECT agtype_btree_cmp( '[{"id":1, "label":"test", "properties":{"id":100}}::vertex, {"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{}}::edge, {"id":3, "label":"vlabel", "properties":{}}::vertex]::path'::agtype, '[{"id":1, "label":"test", "properties":{"id":100}}::vertex, {"id":2, "start_id":1, "end_id": 3, "label":"elabel", "properties":{}}::edge, {"id":4, "label":"vlabel", "properties":{}}::vertex]::path'::agtype); --Int2 to Agtype in agtype_volatile_wrapper SELECT ag_catalog.agtype_volatile_wrapper(1::int2); SELECT ag_catalog.agtype_volatile_wrapper(32767::int2); SELECT ag_catalog.agtype_volatile_wrapper(-32767::int2); -- These should fail SELECT ag_catalog.agtype_volatile_wrapper(32768::int2); SELECT ag_catalog.agtype_volatile_wrapper(-32768::int2); -- -- Cleanup -- DROP TABLE agtype_table; -- -- End of AGTYPE data type regression tests -- age-PG16-v1.5.0-rc0/regress/sql/analyze.sql000066400000000000000000000045471454606241200202470ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; -- -- Start of tests -- SELECT * FROM create_graph('analyze'); SELECT * FROM cypher('analyze', $$ CREATE (u) RETURN u $$) AS (result agtype); -- should error due to invalid input to cypher function SELECT * FROM cypher(NULL, NULL) AS (result agtype); SELECT * FROM cypher('analyze', NULL) AS (result agtype); SELECT * FROM cypher(NULL, '') AS (result agtype); SELECT * FROM cypher('', '') AS (result agtype); SELECT * FROM cypher('analyze', '') AS (result agtype); -- should error due to bad cypher statement SELECT * FROM cypher('analyze', $$ $$) AS (result agtype); -- should return false due to invalid input to age_prepare_function SELECT * FROM age_prepare_cypher(NULL, NULL); SELECT * FROM age_prepare_cypher('analyze', NULL); SELECT * FROM age_prepare_cypher(NULL, ''); -- should return true but cypher should fail SELECT * FROM age_prepare_cypher('analyze', ''); SELECT * FROM cypher(NULL, NULL) AS (result agtype); -- should return true and execute cypher command SELECT * FROM age_prepare_cypher('analyze', 'MATCH (u) RETURN (u)'); SELECT * FROM cypher(NULL, NULL) AS (result agtype); -- should error due to invalid input to cypher function SELECT * FROM cypher(NULL, NULL) AS (result agtype); -- should return true but cypher should fail SELECT * FROM age_prepare_cypher('analyze', '$$ $$'); SELECT * FROM cypher(NULL, NULL) AS (result agtype); -- should return errors SELECT * FROM cypher() AS (result agtype); SELECT * FROM cypher(NULL) AS (result agtype); -- drop graphs SELECT * FROM drop_graph('analyze', true); -- -- End of tests -- age-PG16-v1.5.0-rc0/regress/sql/catalog.sql000066400000000000000000000121031454606241200202010ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; -- -- create_graph(), drop_label(), and drop_graph() tests -- SELECT create_graph('graph'); SELECT name, namespace FROM ag_graph WHERE name = 'graph'; -- create a label to test drop_label() SELECT * FROM cypher('graph', $$CREATE (:l)$$) AS r(a agtype); -- test drop_label() SELECT drop_label('graph', 'l'); -- create a label to test drop_graph() SELECT * FROM cypher('graph', $$CREATE (:v)$$) AS r(a agtype); -- DROP SCHEMA ... CASCADE should fail DROP SCHEMA graph CASCADE; -- DROP TABLE ... should fail DROP TABLE graph.v; -- should fail (cascade = false) SELECT drop_graph('graph'); SELECT drop_graph('graph', true); SELECT count(*) FROM ag_graph WHERE name = 'graph'; SELECT count(*) FROM pg_namespace WHERE nspname = 'graph'; -- invalid cases SELECT create_graph(NULL); SELECT drop_graph(NULL); SELECT create_graph(''); -- -- alter_graph() RENAME function tests -- -- create 2 graphs for test. SELECT create_graph('GraphA'); SELECT create_graph('GraphB'); -- Show GraphA's construction to verify case is preserved. SELECT name, namespace FROM ag_graph WHERE name = 'GraphA'; SELECT nspname FROM pg_namespace WHERE nspname = 'GraphA'; -- Rename GraphA to GraphX. SELECT alter_graph('GraphA', 'RENAME', 'GraphX'); -- Show GraphX's construction to verify case is preserved. SELECT name, namespace FROM ag_graph WHERE name = 'GraphX'; SELECT nspname FROM pg_namespace WHERE nspname = 'GraphX'; -- Verify there isn't a graph GraphA anymore. SELECT name, namespace FROM ag_graph WHERE name = 'GraphA'; SELECT * FROM pg_namespace WHERE nspname = 'GraphA'; -- Sanity check that graphx does not exist - should return 0. SELECT count(*) FROM ag_graph where name = 'graphx'; -- Verify case sensitivity (graphx does not exist, but GraphX does) - should fail. SELECT alter_graph('graphx', 'RENAME', 'GRAPHX'); -- Checks for collisions (GraphB already exists) - should fail. SELECT alter_graph('GraphX', 'RENAME', 'GraphB'); -- Remove graphs. SELECT drop_graph('GraphX', true); SELECT drop_graph('GraphB', true); -- Verify that renaming a graph that does not exist fails. SELECT alter_graph('GraphB', 'RENAME', 'GraphA'); -- Verify NULL input checks. SELECT alter_graph(NULL, 'RENAME', 'GraphA'); SELECT alter_graph('GraphB', NULL, 'GraphA'); SELECT alter_graph('GraphB', 'RENAME', NULL); -- Verify invalid input check for operation parameter. SELECT alter_graph('GraphB', 'DUMMY', 'GraphA'); -- -- label id test -- SELECT create_graph('graph'); -- label id starts from 1 SELECT * FROM cypher('graph', $$CREATE (:v1)$$) AS r(a agtype); SELECT name, id, kind, relation FROM ag_label; -- skip label id 2 to test the logic that gets an unused label id after cycle SELECT nextval('graph._label_id_seq'); -- label id is now 3 SELECT * FROM cypher('graph', $$CREATE (:v3)$$) as r(a agtype); SELECT name, id, kind, relation FROM ag_label; -- to use 65535 as the next label id, set label id to 65534 SELECT setval('graph._label_id_seq', 65534); -- label id is now 65535 SELECT * FROM cypher('graph', $$CREATE (:v65535)$$) as r(a agtype); SELECT name, id, kind, relation FROM ag_label; -- after cycle, label id is now 2 SELECT * FROM cypher('graph', $$CREATE (:v2)$$) as r(a agtype); SELECT name, id, kind, relation FROM ag_label; SELECT drop_graph('graph', true); -- create labels SELECT create_graph('graph'); SELECT create_vlabel('graph', 'n'); SELECT create_elabel('graph', 'r'); -- check if labels have been created or not SELECT name, id, kind, relation FROM ag_label; -- try to create duplicate labels SELECT create_vlabel('graph', 'n'); SELECT create_elabel('graph', 'r'); -- remove the labels that have been created SELECT drop_label('graph', 'n', false); SELECT drop_label('graph', 'r', false); -- check if labels have been deleted or not SELECT name, id, kind, relation FROM ag_label; -- try to remove labels that is not there SELECT drop_label('graph', 'n'); SELECT drop_label('graph', 'r'); -- Trying to call the functions with label null SELECT create_vlabel('graph', NULL); SELECT create_elabel('graph', NULL); -- Trying to call the functions with graph null SELECT create_vlabel(NULL, 'n'); SELECT create_elabel(NULL, 'r'); -- Trying to call the functions with both null SELECT create_vlabel(NULL, NULL); SELECT create_elabel(NULL, NULL); -- dropping the graph SELECT drop_graph('graph', true); age-PG16-v1.5.0-rc0/regress/sql/cypher.sql000066400000000000000000000050201454606241200200610ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher'); -- cypher() function takes only a dollar-quoted string constant as an argument. -- All other cases throw an error. SELECT * FROM cypher('none', $$RETURN 0$$) as q(c agtype); SELECT * FROM cypher('cypher', $$RETURN 0$$) AS r(c agtype); WITH r(c) AS ( SELECT * FROM cypher('cypher', $$RETURN 0$$) AS r(c agtype) ) SELECT * FROM r; SELECT * FROM cypher('cypher', 'RETURN 0') AS r(c text); SELECT * FROM cypher('cypher', NULL) AS r(c text); WITH q(s) AS ( VALUES (textout($$RETURN 0$$)) ) SELECT * FROM q, cypher('cypher', q.s) AS r(c text); -- The numbers of the attributes must match. SELECT * FROM cypher('cypher', $$RETURN 0$$) AS r(c text, x text); -- cypher() function can be called in ROWS FROM only if it is there solely. SELECT * FROM ROWS FROM (cypher('cypher', $$RETURN 0$$) AS (c agtype)); SELECT * FROM ROWS FROM (cypher('cypher', $$RETURN 0$$) AS (c text), generate_series(1, 2)); -- WITH ORDINALITY is not supported. SELECT * FROM ROWS FROM (cypher('cypher', $$RETURN 0$$) AS (c text)) WITH ORDINALITY; -- cypher() function cannot be called in expressions. -- However, it can be called in subqueries. SELECT cypher('cypher', $$RETURN 0$$); SELECT (SELECT * FROM cypher('cypher', $$RETURN 0$$) AS r(c agtype)); -- Attributes returned from cypher() function are agtype. If other than agtype -- is given in the column definition list and there is a type coercion from -- agtype to the given type, agtype will be coerced to that type. If there is -- not such a coercion, an error is thrown. SELECT * FROM cypher('cypher', $$RETURN true$$) AS (c bool); SELECT * FROM cypher('cypher', $$RETURN 0$$) AS (c oid); SELECT drop_graph('cypher', true); age-PG16-v1.5.0-rc0/regress/sql/cypher_call.sql000066400000000000000000000134141454606241200210620ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher_call'); SELECT * FROM cypher('cypher_call', $$CREATE ({n: 'a'})$$) as (a agtype); SELECT * FROM cypher('cypher_call', $$CREATE ({n: 'b'})$$) as (a agtype); CREATE SCHEMA call_stmt_test; CREATE FUNCTION call_stmt_test.add_agtype(agtype, agtype) RETURNS agtype AS 'select $1 + $2;' LANGUAGE SQL IMMUTABLE RETURNS NULL ON NULL INPUT; /* * CALL (solo) */ SELECT * FROM cypher('cypher_call', $$CALL sqrt(64)$$) as (sqrt agtype); /* CALL RETURN, should fail */ SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) RETURN sqrt$$) as (sqrt agtype); /* CALL YIELD */ SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt$$) as (sqrt agtype); /* incorrect variable should fail */ SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD squirt$$) as (sqrt agtype); /* qualified name */ SELECT * FROM cypher('cypher_call', $$CALL call_stmt_test.add_agtype(1,2)$$) as (sqrt agtype); /* nonexistent schema should fail */ SELECT * FROM cypher('cypher_call', $$CALL ag_catalog.add_agtype(1,2)$$) as (sqrt agtype); /* CALL YIELD WHERE, should fail */ SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt > 1$$) as (sqrt agtype); /* * subquery */ /* CALL YIELD UPDATE/RETURN */ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt RETURN sqrt $$) as (sqrt agtype); /* Unrecognized YIELD, correct RETURN, should fail*/ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD squirt RETURN sqrt $$) as (sqrt agtype); /* CALL YIELD WHERE RETURN */ SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt > 1 RETURN sqrt $$) as (a agtype); SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt = 1 RETURN sqrt $$) as (a agtype); SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt = 8 RETURN sqrt $$) as (a agtype); /* should fail */ SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE a = 8 RETURN sqrt $$) as (a agtype); /* MATCH CALL RETURN, should fail */ SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) RETURN sqrt $$) as (sqrt agtype); /* MATCH CALL YIELD RETURN */ SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt RETURN a, sqrt $$) as (a agtype, sqrt agtype); /* MATCH CALL YIELD WHERE UPDATE/RETURN */ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt WHERE sqrt > 1 CREATE ({n:'c'}) $$) as (a agtype); SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE a.n = 'c' DELETE (a) $$) as (a agtype); SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE a.n = 'c' RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE sqrt = 1 RETURN a, sqrt $$) as (a agtype, sqrt agtype); SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE sqrt = 8 RETURN a, sqrt $$) as (a agtype, sqrt agtype); SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE b = 8 RETURN a, sqrt $$) as (a agtype, sqrt agtype); /* CALL MATCH YIELD WHERE UPDATE/RETURN */ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt WHERE sqrt > 1 CREATE ({n:'c'}) $$) as (a agtype); SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE a.n = 'c' DELETE (a) $$) as (a agtype); SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE a.n = 'c' RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE sqrt = 1 RETURN a, sqrt $$) as (a agtype, sqrt agtype); SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE sqrt = 8 RETURN a, sqrt $$) as (a agtype, sqrt agtype); SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt WHERE sqrt = 8 MATCH (a) RETURN a, sqrt $$) as (a agtype, sqrt agtype); /* Multiple Calls: CALL YIELD CALL YIELD... RETURN */ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL agtype_sum(2,2) YIELD agtype_sum RETURN sqrt, agtype_sum $$) as (sqrt agtype, agtype_sum agtype); /* should fail */ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL sqrt(81) YIELD sqrt RETURN sqrt, sqrt $$) as (a agtype, b agtype); /* Aliasing: CALL YIELD AS CALL YIELD AS ... UPDATE/RETURN */ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL sqrt(81) YIELD sqrt AS sqrt1 RETURN sqrt, sqrt1 $$) as (sqrt agtype, sqrt1 agtype); SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt AS sqrt1 CALL sqrt(81) YIELD sqrt RETURN sqrt, sqrt1 $$) as (sqrt agtype, sqrt1 agtype); /* duplicated alias should fail */ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt AS sqrt1 CALL sqrt(81) YIELD sqrt AS sqrt1 RETURN sqrt1, sqrt1 $$) as (a agtype, b agtype); SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL agtype_sum(2,2) YIELD agtype_sum AS sqrt RETURN sqrt, sqrt $$) as (a agtype, b agtype); DROP SCHEMA call_stmt_test CASCADE; SELECT drop_graph('cypher_call', true); age-PG16-v1.5.0-rc0/regress/sql/cypher_create.sql000066400000000000000000000263701454606241200214170ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher_create'); SELECT * FROM cypher('cypher_create', $$CREATE ()$$) AS (a agtype); -- vertex graphid SELECT * FROM cypher('cypher_create', $$CREATE (:v)$$) AS (a agtype); SELECT * FROM cypher('cypher_create', $$CREATE (:v {})$$) AS (a agtype); SELECT * FROM cypher('cypher_create', $$CREATE (:v {key: 'value'})$$) AS (a agtype); SELECT * FROM cypher('cypher_create', $$MATCH (n:v) RETURN n$$) AS (n agtype); -- Left relationship SELECT * FROM cypher('cypher_create', $$ CREATE (:v {id:"right rel, initial node"})-[:e {id:"right rel"}]->(:v {id:"right rel, end node"}) $$) AS (a agtype); -- Right relationship SELECT * FROM cypher('cypher_create', $$ CREATE (:v {id:"left rel, initial node"})<-[:e {id:"left rel"}]-(:v {id:"left rel, end node"}) $$) AS (a agtype); -- Pattern creates a path from the initial node to the last node SELECT * FROM cypher('cypher_create', $$ CREATE (:v {id: "path, initial node"})-[:e {id: "path, edge one"}]->(:v {id:"path, middle node"})-[:e {id:"path, edge two"}]->(:v {id:"path, last node"}) $$) AS (a agtype); -- middle vertex points to the initial and last vertex SELECT * FROM cypher('cypher_create', $$ CREATE (:v {id: "divergent, initial node"})<-[:e {id: "divergent, edge one"}]-(:v {id: "divergent middle node"})-[:e {id: "divergent, edge two"}]->(:v {id: "divergent, end node"}) $$) AS (a agtype); -- initial and last vertex point to the middle vertex SELECT * FROM cypher('cypher_create', $$ CREATE (:v {id: "convergent, initial node"})-[:e {id: "convergent, edge one"}]->(:v {id: "convergent middle node"})<-[:e {id: "convergent, edge two"}]-(:v {id: "convergent, end node"}) $$) AS (a agtype); -- Validate Paths work correctly SELECT * FROM cypher('cypher_create', $$ CREATE (:v {id: "paths, vertex one"})-[:e {id: "paths, edge one"}]->(:v {id: "paths, vertex two"}), (:v {id: "paths, vertex three"})-[:e {id: "paths, edge two"}]->(:v {id: "paths, vertex four"}) $$) AS (a agtype); --edge with double relationship will throw an error SELECT * FROM cypher('cypher_create', $$CREATE (:v)<-[:e]->()$$) AS (a agtype); --edge with no relationship will throw an error SELECT * FROM cypher('cypher_create', $$CREATE (:v)-[:e]-()$$) AS (a agtype); --edges without labels are not supported SELECT * FROM cypher('cypher_create', $$CREATE (:v)-[]->(:v)$$) AS (a agtype); SELECT * FROM cypher_create.e; SELECT * FROM cypher_create.v; SELECT * FROM cypher('cypher_create', $$ CREATE (:n_var {name: 'Node A'}) $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ CREATE (:n_var {name: 'Node B'}) $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ CREATE (:n_var {name: 'Node C'}) $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var), (b:n_var) WHERE a.name <> b.name CREATE (a)-[:e_var {name: a.name + ' -> ' + b.name}]->(b) $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var) CREATE (a)-[:e_var {name: a.name + ' -> ' + a.name}]->(a) $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var) CREATE (a)-[:e_var {name: a.name + ' -> new node'}]->(:n_other_node) $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var) WHERE a.name = 'Node A' CREATE (a)-[b:e_var]->() $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ CREATE (a)-[:b_var]->() RETURN a, id(a) $$) as (a agtype, b agtype); SELECT * FROM cypher('cypher_create', $$ CREATE ()-[b:e_var]->() RETURN b, id(b) $$) as (a agtype, b agtype); SELECT * FROM cypher('cypher_create', $$ CREATE (a)-[b:e_var {id: 0}]->() RETURN a, b, b.id, b.id + 1 $$) as (a agtype, b agtype, c agtype, d agtype); SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var) CREATE (a)-[b:e_var]->(a) RETURN a, b $$) as (a agtype, b agtype); SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var) CREATE (a)-[b:e_var]->(c) RETURN a, b, c $$) as (a agtype, b agtype, c agtype); SELECT * FROM cypher('cypher_create', $$ CREATE (a)-[:e_var]->() RETURN a $$) as (b agtype); SELECT * FROM cypher('cypher_create', $$ CREATE ()-[b:e_var]->() RETURN b $$) as (b agtype); SELECT * FROM cypher('cypher_create', $$ CREATE p=()-[:e_var]->() RETURN p $$) as (b agtype); SELECT * FROM cypher('cypher_create', $$ CREATE p=(a {id:0})-[:e_var]->(a) RETURN p $$) as (b agtype); SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var) CREATE p=(a)-[:e_var]->(a) RETURN p $$) as (b agtype); SELECT * FROM cypher('cypher_create', $$ CREATE p=(a)-[:e_var]->(), (a)-[b:e_var]->(a) RETURN p, b $$) as (a agtype, b agtype); SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var) WHERE a.name = 'Node Z' CREATE (a)-[:e_var {name: a.name + ' -> does not exist'}]->(:n_other_node) RETURN a $$) as (a agtype); SELECT * FROM cypher_create.n_var; SELECT * FROM cypher_create.e_var; --Check every label has been created SELECT name, kind FROM ag_label ORDER BY name; --Validate every vertex has the correct label SELECT * FROM cypher('cypher_create', $$MATCH (n) RETURN n$$) AS (n agtype); -- prepared statements PREPARE p_1 AS SELECT * FROM cypher('cypher_create', $$CREATE (v:new_vertex {key: 'value'}) RETURN v$$) AS (a agtype); EXECUTE p_1; EXECUTE p_1; PREPARE p_2 AS SELECT * FROM cypher('cypher_create', $$CREATE (v:new_vertex {key: $var_name}) RETURN v$$, $1) AS (a agtype); EXECUTE p_2('{"var_name": "Hello Prepared Statements"}'); EXECUTE p_2('{"var_name": "Hello Prepared Statements 2"}'); -- pl/pgsql CREATE FUNCTION create_test() RETURNS TABLE(vertex agtype) LANGUAGE plpgsql VOLATILE AS $BODY$ BEGIN RETURN QUERY SELECT * FROM cypher('cypher_create', $$CREATE (v:new_vertex {key: 'value'}) RETURN v$$) AS (a agtype); END $BODY$; SELECT create_test(); SELECT create_test(); -- -- Errors -- -- Var 'a' cannot have properties in the create clause SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var) WHERE a.name = 'Node A' CREATE (a {test:1})-[:e_var]->() $$) as (a agtype); -- Var 'a' cannot change labels SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var) WHERE a.name = 'Node A' CREATE (a:new_label)-[:e_var]->() $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var)-[b]-() WHERE a.name = 'Node A' CREATE (a)-[b:e_var]->() $$) as (a agtype); -- A valid single vertex path SELECT * FROM cypher('cypher_create', $$ CREATE p=(a) RETURN p $$) as (a agtype); --CREATE with joins SELECT * FROM cypher('cypher_create', $$ CREATE (a) RETURN a $$) as q(a agtype), cypher('cypher_create', $$ CREATE (b) RETURN b $$) as t(b agtype); -- column definition list for CREATE clause must contain a single agtype -- attribute SELECT * FROM cypher('cypher_create', $$CREATE ()$$) AS (a int); SELECT * FROM cypher('cypher_create', $$CREATE ()$$) AS (a agtype, b int); -- nodes cannot use edge labels and edge labels cannot use node labels SELECT * FROM cypher('cypher_create', $$ CREATE (:existing_vlabel {id: 1}) -[c:existing_elabel {id: 3}]-> (:existing_vlabel {id: 2}) $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ MATCH(a), (b) WHERE a.id = 1 AND b.id = 2 CREATE (a)-[c:existing_vlabel { id: 4}]->(b) RETURN c.id $$) as (c agtype); SELECT * FROM cypher('cypher_create', $$ CREATE (a:existing_elabel { id: 5}) RETURN a.id $$) as (a agtype); -- -- check the cypher CREATE clause inside an INSERT INTO -- CREATE TABLE simple_path (u agtype, e agtype, v agtype); INSERT INTO simple_path(SELECT * FROM cypher('cypher_create', $$CREATE (u)-[e:knows]->(v) return u, e, v $$) AS (u agtype, e agtype, v agtype)); SELECT count(*) FROM simple_path; -- -- check the cypher CREATE clause inside of a BEGIN/END/COMMIT block -- BEGIN; SELECT * FROM cypher('cypher_create', $$ CREATE (a:Part {part_num: '670'}) $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ MATCH (a:Part) RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ CREATE (a:Part {part_num: '671'}) $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ CREATE (a:Part {part_num: '672'}) $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ MATCH (a:Part) RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ CREATE (a:Part {part_num: '673'}) $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ MATCH (a:Part) RETURN a $$) as (a agtype); END; -- -- variable reuse -- -- Valid variable reuse SELECT * FROM cypher('cypher_create', $$ CREATE (p)-[a:new]->(p) RETURN p,a,p $$) as (n1 agtype, e agtype, n2 agtype); SELECT * FROM cypher('cypher_create', $$ CREATE (p:node)-[e:new]->(p) RETURN p,e,p $$) as (n1 agtype, e agtype, n2 agtype); SELECT * FROM cypher('cypher_create', $$ CREATE (p) CREATE (p)-[a:new]->(p) RETURN p,a,p $$) as (n1 agtype, e agtype, n2 agtype); SELECT * FROM cypher('cypher_create', $$ CREATE (p:n1) CREATE (p)-[a:new]->(p) RETURN p,a,p $$) as (n1 agtype, e agtype, n2 agtype); SELECT * FROM cypher('cypher_create', $$ MATCH (p:node) CREATE (p)-[a:new]->(p) RETURN p,a,p $$) as (n1 agtype, e agtype, n2 agtype); -- Invalid variable reuse SELECT * FROM cypher('cypher_create', $$ CREATE (p)-[a:new]->(p {n0:'n1'}) $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ CREATE (p:n0)-[a:new]->(p:n1) $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ CREATE p=(p) $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ CREATE p=() CREATE (p) $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ CREATE p=(a)-[p:b]->(a) $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ CREATE p=(a)-[:new]->(p) $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ MATCH (p) CREATE p=() $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ MATCH (p) CREATE p=(p) $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ MATCH (p) CREATE (a)-[p:b]->(a) $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ CREATE (a)-[e:new]->(p)-[e]->(a) $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ CREATE (a)-[e:new]->(p) CREATE (p)-[e:new]->(a) $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ MATCH (a)-[e:new]->(p) CREATE (p)-[e:new]->(a) $$) as (a agtype); -- Validate usage of keywords as labels is supported and case sensitive SELECT * FROM cypher('cypher_create', $$ CREATE (a:CREATE) RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ CREATE (a:create) RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_create', $$ CREATE (a:CrEaTe) RETURN a $$) as (a agtype); -- -- Clean up -- DROP TABLE simple_path; DROP FUNCTION create_test; SELECT drop_graph('cypher_create', true); -- -- End -- age-PG16-v1.5.0-rc0/regress/sql/cypher_delete.sql000066400000000000000000000324711454606241200214150ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher_delete'); --Test 1: Delete Vertices SELECT * FROM cypher('cypher_delete', $$CREATE (:v)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$CREATE (:v {i: 0, j: 5, a: 0})$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$CREATE (:v {i: 1})$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); --Test 2: Delete Edges SELECT * FROM cypher('cypher_delete', $$CREATE (:v)-[:e]->(:v)$$) AS (a agtype); --Should Fail SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->(n2) DELETE n1 RETURN n1$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->(n2) DELETE n2 RETURN n2$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->(n2) DELETE e RETURN e$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH()-[e]->() DELETE e RETURN e$$) AS (a agtype); --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n RETURN n$$) AS (a agtype); --Test 4: DETACH DELETE a vertex SELECT * FROM cypher('cypher_delete', $$CREATE (:v)-[:e]->(:v)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->(n2) DETACH DELETE n1 RETURN e$$) AS (a agtype); --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); --Test 4: DETACH DELETE two vertices tied to the same edge SELECT * FROM cypher('cypher_delete', $$CREATE (:v)-[:e]->(:v)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->(n2) DETACH DELETE n1, n2 RETURN e$$) AS (a agtype); --Test 4: DETACH DELETE a vertex SELECT * FROM cypher('cypher_delete', $$CREATE (:v)-[:e]->(:v)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->(n2) DETACH DELETE n1, n2 RETURN e$$) AS (a agtype); --Test 5: DETACH DELETE a vertex that points to itself SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->(n)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->() DETACH DELETE n1 RETURN e$$) AS (a agtype); --Test 6: DETACH Delete a vertex twice SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->(n)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->(n2) DETACH DELETE n1, n2 RETURN e$$) AS (a agtype); --Test 7: Test the SET Clause on DELETED node SELECT * FROM cypher('cypher_delete', $$CREATE (:v)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$CREATE (:v {i: 0, j: 5, a: 0})$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$CREATE (:v {i: 1})$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n SET n.lol = 'ftw' RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); --Test 8: SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->(:v) CREATE (n)-[:e]->(:v)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[]->() DELETE n1 RETURN n1$$) AS (a agtype); --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) DETACH DELETE n RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); --Test 9: SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->(:v)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->() DELETE e, n1 RETURN n1$$) AS (a agtype); --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) DETACH DELETE n RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); --Test 10: SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->(:v)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->() DELETE n1, e RETURN n1$$) AS (a agtype); --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) DETACH DELETE n RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); --Test 11: Delete a vertex twice SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->(:v), (n)-[:e]->(:v) RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->() DETACH DELETE n1 RETURN n1, e$$) AS (a agtype, b agtype); --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); --Test 12: SELECT * FROM cypher('cypher_delete', $$CREATE (:v)-[:e]->(:v)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n)-[e]->() DETACH DELETE n CREATE (n)-[:e2]->(:v) RETURN e$$) AS (a agtype); --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) DETACH DELETE n RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); --Test 13: SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->(n)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n)-[e]->(m) DETACH DELETE n CREATE (m)-[:e2]->(:v) RETURN e$$) AS (a agtype); --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) DETACH DELETE n RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); --Test 14: SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->(n)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$CREATE (:v)-[:e]->(:v)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n)-[e]->(m) DETACH DELETE n CREATE (m)-[:e2]->(:v) RETURN e$$) AS (a agtype); --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) DETACH DELETE n RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); --Test 15: SELECT * FROM cypher('cypher_delete', $$CREATE (:v)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n) SET n.i = 0 DELETE n RETURN n$$) AS (a agtype); --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); --Test 16: SELECT * FROM cypher('cypher_delete', $$CREATE (:v)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n SET n.i = 0 RETURN n$$) AS (a agtype); --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); --Test 17: SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->(:v)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n)-[e]->(m) DETACH DELETE n SET e.i = 1 RETURN e$$) AS (a agtype); --Cleanup --Note: Expect 1 vertex SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n RETURN n$$) AS (a agtype); --Test 18: SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->(:v)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n)-[e]->(m) SET e.i = 1 DETACH DELETE n RETURN e$$) AS (a agtype); --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n RETURN n$$) AS (a agtype); --Test 19: SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH (n) DELETE n CREATE (n)-[:e]->(:v) RETURN n$$) AS (a agtype); --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n RETURN n$$) AS (a agtype); --Test 20 Undefined Reference: SELECT * FROM cypher('cypher_delete', $$MATCH (n) DELETE m RETURN n$$) AS (a agtype); --Test 21 Prepared Statements SELECT * FROM cypher('cypher_delete', $$CREATE (v:v)$$) AS (a agtype); PREPARE d AS SELECT * FROM cypher('cypher_delete', $$MATCH (v) DELETE (v) RETURN v$$) AS (a agtype); EXECUTE d; SELECT * FROM cypher('cypher_delete', $$CREATE (v:v)$$) AS (a agtype); EXECUTE d; --Test 22 pl/pgsql Functions SELECT * FROM cypher('cypher_delete', $$CREATE (v:v)$$) AS (a agtype); CREATE FUNCTION delete_test() RETURNS TABLE(vertex agtype) LANGUAGE plpgsql VOLATILE AS $BODY$ BEGIN RETURN QUERY SELECT * FROM cypher('cypher_delete', $$MATCH (v) DELETE (v) RETURN v$$) AS (a agtype); END $BODY$; SELECT delete_test(); SELECT * FROM cypher('cypher_delete', $$CREATE (v:v)$$) AS (a agtype); SELECT delete_test(); -- Clean Up SELECT * FROM cypher('cypher_delete', $$MATCH(n) DETACH DELETE n RETURN n$$) AS (a agtype); --Test 23 SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->()$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e2]->()$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n)-[e]->(m) DELETE e$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); -- Clean Up SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n RETURN n$$) AS (a agtype); --Test 24 SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e]->()$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$CREATE (n:v)-[:e2]->()$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n)-[]->() DETACH DELETE n$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); -- Clean Up SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n RETURN n$$) AS (a agtype); -- test DELETE in transaction block SELECT * FROM cypher('cypher_delete', $$CREATE (u:vertices) RETURN u $$) AS (result agtype); BEGIN; SELECT * FROM cypher('cypher_delete', $$MATCH (u:vertices) RETURN u $$) AS (result agtype); SELECT * FROM cypher('cypher_delete', $$MATCH (u:vertices) DELETE u RETURN u $$) AS (result agtype); SELECT * FROM cypher('cypher_delete', $$MATCH (u:vertices) RETURN u $$) AS (result agtype); SELECT * FROM cypher('cypher_delete', $$CREATE (u:vertices) RETURN u $$) AS (result agtype); SELECT * FROM cypher('cypher_delete', $$MATCH (u:vertices) RETURN u $$) AS (result agtype); SELECT * FROM cypher('cypher_delete', $$MATCH (u:vertices) DELETE u RETURN u $$) AS (result agtype); SELECT * FROM cypher('cypher_delete', $$MATCH (u:vertices) RETURN u $$) AS (result agtype); SELECT * FROM cypher('cypher_delete', $$CREATE (u:vertices) RETURN u $$) AS (result agtype); SELECT * FROM cypher('cypher_delete', $$MATCH (u:vertices) RETURN u $$) AS (result agtype); SELECT * FROM cypher('cypher_delete', $$MATCH (u:vertices) DELETE u SET u.i = 1 RETURN u $$) AS (result agtype); SELECT * FROM cypher('cypher_delete', $$MATCH (u:vertices) RETURN u $$) AS (result agtype); END; SELECT * FROM cypher('cypher_delete', $$MATCH (u:vertices) RETURN u $$) AS (result agtype); -- -- Detach Delete -- SELECT create_graph('detach_delete'); SELECT * FROM cypher('detach_delete', $$ CREATE (x:Label3{name:'x', delete: true}), (y:Label3{name:'y', delete: true}), (a:Label1{name:'a', delete: true}), (b:Label5{name:'b'}), (c:Label5{name:'c'}), (d:Label5{name:'d'}), (m:Label7{name:'m', delete: true}), (n:Label2{name:'n'}), (p:Label2{name:'p'}), (q:Label2{name:'q'}), (a)-[:rel1{name:'ab'}]->(b), (c)-[:rel2{name:'cd'}]->(d), (n)-[:rel3{name:'nm'}]->(m), (a)-[:rel4{name:'am'}]->(m), (p)-[:rel5{name:'pq'}]->(q) $$ ) as (a agtype); -- no vertices or edges are deleted (error is expected) SELECT * FROM cypher('detach_delete', $$ MATCH (x:Label1), (y:Label3), (z:Label7) DELETE x, y, z RETURN 1 $$) as (a agtype); SELECT * FROM cypher('detach_delete', $$ MATCH (v) RETURN v.name $$) as (vname agtype); SELECT * FROM cypher('detach_delete', $$ MATCH ()-[e]->() RETURN e.name $$) as (ename agtype); -- x, y, a, m, ab, nm, am are deleted SELECT * FROM cypher('detach_delete', $$ MATCH (x:Label1), (y:Label3), (z:Label7) DETACH DELETE x, y, z RETURN 1 $$) as (a agtype); SELECT * FROM cypher('detach_delete', $$ MATCH (v) RETURN v.name $$) as (vname agtype); SELECT * FROM cypher('detach_delete', $$ MATCH ()-[e]->() RETURN e.name $$) as (ename agtype); SELECT drop_graph('detach_delete', true); -- -- SET followed by DELETE -- SELECT create_graph('setdelete'); -- MATCH (x) SET x DELETE x SELECT * FROM cypher('setdelete', $$ CREATE (:A), (:A), (:A) $$) as ("CREATE" agtype); SELECT * FROM cypher('setdelete', $$ MATCH (x:A) SET x.age = 24 DELETE x $$) as ("SET + DELETE" agtype); SELECT id as "expected: 0 rows" FROM setdelete._ag_label_vertex; -- MATCH (n)-[e]->(m) SET e DETACH DELETE n SELECT * FROM cypher('setdelete', $$ CREATE (:n)-[:e]->(:m), (:n)-[:e]->(:m) $$) AS ("CREATE" agtype); SELECT * FROM cypher('setdelete', $$ MATCH (n)-[e]->(m) SET e.i = 1 DETACH DELETE n RETURN id(m) $$) AS ("SET + DETACH DELETE" agtype); SELECT id as "expected: 2 rows (m vertices)" FROM setdelete._ag_label_vertex; SELECT id as "expected: 0 rows" FROM setdelete._ag_label_edge; -- clean up SELECT drop_graph('setdelete', true); -- -- Clean up -- DROP FUNCTION delete_test; SELECT drop_graph('cypher_delete', true); -- -- End -- age-PG16-v1.5.0-rc0/regress/sql/cypher_match.sql000066400000000000000000001420541454606241200212460ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher_match'); SELECT * FROM cypher('cypher_match', $$CREATE (:v)$$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$CREATE (:v {i: 0})$$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$CREATE (:v {i: 1})$$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$MATCH (n:v) RETURN n$$) AS (n agtype); SELECT * FROM cypher('cypher_match', $$MATCH (n:v) RETURN n.i$$) AS (i agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (n:v) WHERE n.i > 0 RETURN n.i $$) AS (i agtype); --Directed Paths SELECT * FROM cypher('cypher_match', $$ CREATE (:v1 {id:'initial'})-[:e1]->(:v1 {id:'middle'})-[:e1]->(:v1 {id:'end'}) $$) AS (a agtype); --Undirected Path Tests SELECT * FROM cypher('cypher_match', $$ MATCH p=(:v1)-[:e1]-(:v1)-[:e1]-(:v1) RETURN p $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a:v1)-[]-()-[]-() RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]-()-[]-(a:v1) RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]-(a:v1)-[]-() RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[b:e1]-()-[]-() RETURN b $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)-[]->(), ()-[]->(a) RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=()-[e]-() RETURN e $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (:v1)-[e]-() RETURN e $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (:v1)-[e]-(:v1) RETURN e $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]-()-[e]-(:v1) RETURN e $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]-()-[]-(:v1) RETURN a $$) AS (a agtype); -- Right Path Test SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)-[:e1]->(b:v1)-[:e1]->(c:v1) RETURN a, b, c $$) AS (a agtype, b agtype, c agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a:v1)-[]-()-[]->() RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a:v1)-[]->()-[]-() RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]-()-[]->(a:v1) RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]-(a:v1)-[]->() RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[b:e1]-()-[]->() RETURN b $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (:v1)-[e]->() RETURN e $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[e]->(:v1) RETURN e $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (:v1)-[e]->(:v1) RETURN e $$) AS (a agtype); --Left Path Test SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)<-[:e1]-(b:v1)<-[:e1]-(c:v1) RETURN a, b, c $$) AS (a agtype, b agtype, c agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a:v1)<-[]-()-[]-() RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a:v1)-[]-()<-[]-() RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()<-[]-()-[]-(a:v1) RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()<-[]-(a:v1)-[]-() RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()<-[b:e1]-()-[]-() RETURN b $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (:v1)<-[e]-(:v1) RETURN e $$) AS (a agtype); --Divergent Path Tests SELECT * FROM cypher('cypher_match', $$ CREATE (:v2 {id:'initial'})<-[:e2]-(:v2 {id:'middle'})-[:e2]->(:v2 {id:'end'}) $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()<-[]-(n:v2)-[]->() MATCH p=()-[]->(n) RETURN p $$) AS (i agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()<-[]-(n:v2)-[]->() MATCH p=(n)-[]->() RETURN p $$) AS (i agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]-(n:v2) RETURN n $$) AS (i agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (:v2)<-[]-(:v2)-[]->(:v2) MATCH p=()-[]->() RETURN p $$) AS (i agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()<-[]-(:v2)-[]->() MATCH p=()-[]->() RETURN p $$) AS (i agtype); --Convergent Path Tests SELECT * FROM cypher('cypher_match', $$ CREATE (:v3 {id:'initial'})-[:e3]->(:v3 {id:'middle'})<-[:e3]-(:v3 {id:'end'}) $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[b:e1]->() RETURN b $$) AS (i agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (:v3)-[b:e3]->() RETURN b $$) AS (i agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]->(n:v1)<-[]-() MATCH p=(n)<-[]-() RETURN p $$) AS (i agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]->(n:v1)<-[]-() MATCH p=()-[]->(n) RETURN p $$) AS (i agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]->(n:v1)<-[]-() MATCH p=(n)-[]->() RETURN p $$) AS (i agtype); SELECT * FROM cypher('cypher_match', $$ MATCH con_path=(a)-[]->()<-[]-() where a.id = 'initial' RETURN con_path $$) AS (con_path agtype); SELECT * FROM cypher('cypher_match', $$ MATCH div_path=(b)<-[]-()-[]->() where b.id = 'initial' RETURN div_path $$) AS (div_path agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]->(:v3)<-[]-(b) where a.id = 'initial' RETURN b $$) AS (con_path agtype); --Patterns SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1), p=(a)-[]-()-[]-() where a.id = 'initial' RETURN p $$) AS (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH con_path=(a)-[]->()<-[]-(), div_path=(b)<-[]-()-[]->() where a.id = 'initial' and b.id = 'initial' RETURN con_path, div_path $$) AS (con_path agtype, div_path agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a:v), p=()-[]->()-[]->() RETURN a.i, p $$) AS (i agtype, p agtype); --Multiple Match Clauses SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1) where a.id = 'initial' MATCH p=(a)-[]-()-[]-() RETURN p $$) AS (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a:v) MATCH p=()-[]->()-[]->() RETURN a.i, p $$) AS (i agtype, p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a:v) MATCH (b:v1)-[]-(c) RETURN a.i, b.id, c.id $$) AS (i agtype, b agtype, c agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a:v) MATCH (:v1)-[]-(c) RETURN a.i, c.id $$) AS (i agtype, c agtype); -- -- Property constraints -- SELECT * FROM cypher('cypher_match', $$CREATE ({string_key: "test", int_key: 1, float_key: 3.14, map_key: {key: "value"}, list_key: [1, 2, 3]}) $$) AS (p agtype); SELECT * FROM cypher('cypher_match', $$CREATE ({lst: [1, NULL, 3.14, "string", {key: "value"}, []]}) $$) AS (p agtype); SELECT * FROM cypher('cypher_match', $$MATCH (n {string_key: NULL}) RETURN n $$) AS (n agtype); SELECT * FROM cypher('cypher_match', $$MATCH (n {string_key: "wrong value"}) RETURN n $$) AS (n agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (n {string_key: "test", int_key: 1, float_key: 3.14, map_key: {key: "value"}, list_key: [1, 2, 3]}) RETURN n $$) AS (p agtype); SELECT * FROM cypher('cypher_match', $$MATCH (n {string_key: "test"}) RETURN n $$) AS (p agtype); SELECT * FROM cypher('cypher_match', $$MATCH (n {lst: [1, NULL, 3.14, "string", {key: "value"}, []]}) RETURN n $$) AS (p agtype); SELECT * FROM cypher('cypher_match', $$MATCH (n {lst: [1, NULL, 3.14, "string", {key: "value"}, [], "extra value"]}) RETURN n $$) AS (p agtype); -- -- Prepared Statement Property Constraint -- PREPARE property_ps(agtype) AS SELECT * FROM cypher('cypher_match', $$MATCH (n $props) RETURN n $$, $1) AS (p agtype); EXECUTE property_ps(agtype_build_map('props', agtype_build_map('string_key', 'test'))); -- need a following RETURN clause (should fail) SELECT * FROM cypher('cypher_match', $$MATCH (n:v)$$) AS (a agtype); --invalid variable reuse, these should fail SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]-()-[]-(a:v1) RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]-(a:v2)-[]-(a) RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]-(a:v1) RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]-(a)-[]-(a:v1) RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]-(a)-[]-(a:invalid_label) RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a) MATCH (a:v1) RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a) MATCH (a:invalid_label) RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)-[]-()-[a]-() RETURN a $$) AS (a agtype); -- valid variable reuse for edge labels across clauses SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0]->() MATCH ()-[r0]->() RETURN r0 $$) AS (r0 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e1]->() MATCH ()-[r0:e1]->() RETURN r0 $$) AS (r0 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e2]->() MATCH ()-[r0:e2]->() RETURN r0 $$) AS (r0 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e1]->()-[r1]->() RETURN r0,r1 $$) AS (r0 agtype, r1 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p0=()-[:e1]->() MATCH p1=()-[:e2]->() RETURN p1 $$) AS (p1 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e1]->()-[r1]->() MATCH ()-[r0:e1]->()-[r1]->() RETURN r0,r1 $$) AS (r0 agtype, r1 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]->() MATCH ()-[r1:e2]->() RETURN r1 $$) AS (r1 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e1]->() MATCH ()-[r1:e2]->() RETURN r0,r1 $$) AS (r0 agtype, r1 agtype); -- valid variable reuse for vertex labels across clauses SELECT * FROM cypher('cypher_match', $$ MATCH (r1:invalid), (r1:invalid) return r1 $$) AS (r1 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (r1), (r1) return r1 $$) AS (r1 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (r1:invalid), (r1) return r1 $$) AS (r1 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (r1:invalid), (r1), (r1), (r1:invalid) return r1 $$) AS (r1 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (r1:invalid)-[]->(r1)-[]->(r1:invalid)-[]->(r1) return r1 $$) AS (r1 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (r1:invalid)-[]->()-[]->()-[]->(r1:invalid) return r1 $$) AS (r1 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e1]->()-[r1]->() MATCH ()-[r0:e1]->()-[r0]->() RETURN r0 $$) AS (r0 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e1]->() MATCH ()-[r0]->() RETURN r0 $$) AS (r0 agtype); -- invalid variable reuse for vertex SELECT * FROM cypher('cypher_match', $$ MATCH (r1:invalid)-[]->(r1)-[]->(r1)-[]->(r1:invalids) return r1 $$) AS (r1 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (r1:invalid)-[]->(r1)-[]->(r1)-[]->(r1)-[r1]->() return r1 $$) AS (r1 agtype); -- invalid variable reuse for labels across clauses SELECT * FROM cypher('cypher_match', $$ MATCH (r1:e1), (r1:e2) return r1 $$) AS (r1 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (r1:invalid), (r1:e2) return r1 $$) AS (r1 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (r1:e1), (r1:invalid) return r1 $$) AS (r1 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (r1:e1), (r1), (r1:invalid) return r1 $$) AS (r1 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (r0)-[r0]->() MATCH ()-[]->() RETURN r0 $$) AS (r0 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (r0)-[]->() MATCH ()-[r0]->() RETURN r0 $$) AS (r0 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0]->() MATCH ()-[]->(r0) RETURN r0 $$) AS (r0 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e1]->() MATCH ()-[r0:e2]->() RETURN r0 $$) AS (r0 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0]->() MATCH ()-[r0:e2]->() RETURN r0 $$) AS (r0 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e1]->() MATCH ()-[r0:e2]->() RETURN r0 $$) AS (r0 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e1]->()-[r0]->() MATCH ()-[r0:e2]->() RETURN r0 $$) AS (r0 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e1]->()-[r1]->() MATCH ()-[r1:e1]->()-[r0]->() RETURN r0 $$) AS (r0 agtype); -- Labels that don't exist but do match SELECT * FROM cypher('cypher_match', $$ MATCH (r0)-[r1:related]->() MATCH ()-[r1:related]->() RETURN r0 $$) AS (r0 agtype); -- Labels that don't exist and don't match SELECT * FROM cypher('cypher_match', $$ MATCH (r0)-[r1]->() MATCH ()-[r1:related]->() RETURN r0 $$) AS (r0 agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (r0)-[r1:related]->() MATCH ()-[r1:relateds]->() RETURN r0 $$) AS (r0 agtype); --Valid variable reuse, although why would you want to do it this way? SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)-[]-()-[]-(a {id:'will_not_fail'}) RETURN a $$) AS (a agtype); --Incorrect Labels SELECT * FROM cypher('cypher_match', $$MATCH (n)-[:v]-() RETURN n$$) AS (n agtype); SELECT * FROM cypher('cypher_match', $$MATCH (n)-[:emissing]-() RETURN n$$) AS (n agtype); SELECT * FROM cypher('cypher_match', $$MATCH (n:e1)-[]-() RETURN n$$) AS (n agtype); SELECT * FROM cypher('cypher_match', $$MATCH (n:vmissing)-[]-() RETURN n$$) AS (n agtype); SELECT * FROM cypher('cypher_match', $$MATCH (:e1)-[r]-() RETURN r$$) AS (r agtype); SELECT * FROM cypher('cypher_match', $$MATCH (:vmissing)-[r]-() RETURN r$$) AS (r agtype); SELECT * FROM cypher('cypher_match', $$MATCH (n),(:e1) RETURN n$$) AS (n agtype); SELECT * FROM cypher('cypher_match', $$MATCH (n),()-[:v]-() RETURN n$$) AS (n agtype); -- -- Path of one vertex. This should select 14 -- SELECT * FROM cypher('cypher_match', $$ MATCH p=() RETURN p $$) AS (p agtype); -- -- MATCH with WHERE EXISTS(pattern) -- SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((u)-[e]->(v)) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); -- Property Constraint in EXISTS SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE EXISTS((u)-[]->({id: "middle"})) RETURN u $$) AS (u agtype); SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE EXISTS((u)-[]->({id: "not a valid id"})) RETURN u $$) AS (u agtype); SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE EXISTS((u)-[]->({id: NULL})) RETURN u $$) AS (u agtype); -- Exists checks for a loop. There shouldn't be any. SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((u)-[e]->(u)) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); -- Create a loop SELECT * FROM cypher('cypher_match', $$ CREATE (u:loop {id:'initial'})-[:self]->(u) $$) AS (a agtype); -- dump paths SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((u)-[e]->(v)) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); -- Exists checks for a loop. There should be one. SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((u)-[e]->(u)) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); -- Exists checks for a loop. There should be one. SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((v)-[e]->(v)) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); -- Multiple exists SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((u)) AND EXISTS((v)) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((u)-[e]->(u)) AND EXISTS((v)-[e]->(v)) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); -- Return exists(pattern) SELECT * FROM cypher('cypher_match', $$MATCH (u) RETURN EXISTS((u)-[]->()) $$) AS (exists agtype); SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) RETURN EXISTS((u)-[e]->(v)-[e]->(u))$$) AS (exists agtype); -- These should error -- Bad pattern SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((u)) AND EXISTS([e]) AND EXISTS((v)) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); -- variable creation error SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((u)-[e]->(x)) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); -- path variable not allowed in EXISTS SELECT * FROM cypher('cypher_match', $$MATCH p=(u)-[e]->(v) RETURN EXISTS((p)) $$) AS (exists agtype); -- -- Tests for EXISTS(property) -- -- dump all vertices SELECT * FROM cypher('cypher_match', $$MATCH (u) RETURN u $$) AS (u agtype); -- select vertices with id as a property SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE EXISTS(u.id) RETURN u $$) AS (u agtype); -- select vertices without id as a property SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE NOT EXISTS(u.id) RETURN u $$) AS (u agtype); -- select vertices without id as a property but with a property i SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE NOT EXISTS(u.id) AND EXISTS(u.i) RETURN u $$) AS (u agtype); -- select vertices with id as a property and have a self loop SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE EXISTS(u.id) AND EXISTS((u)-[]->(u)) RETURN u$$) AS (u agtype); -- Return exists(property) SELECT * FROM cypher('cypher_match', $$MATCH (u) RETURN EXISTS(u.id), properties(u) $$) AS (exists agtype, properties agtype); SELECT * FROM cypher('cypher_match', $$MATCH (u) RETURN EXISTS(u.name), properties(u) $$) AS (exists agtype, properties agtype); -- should give an error SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE EXISTS(u) RETURN u$$) AS (u agtype); -- -- MATCH with WHERE isEmpty(property) -- SELECT create_graph('for_isEmpty'); -- Create vertices SELECT * FROM cypher('for_isEmpty', $$CREATE (u:for_pred {id:1, type: "empty", list: [], map: {}, string: ""}), (v:for_pred {id:2, type: "filled", list: [1], map: {a:1}, string: "a"}), (w:for_pred)$$) AS (a agtype); -- Match vertices with empty properties SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE isEmpty(u.list) RETURN properties(u) $$) AS (u agtype); SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE isEmpty(u.map) RETURN properties(u) $$) AS (u agtype); SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE isEmpty(u.string) RETURN properties(u) $$) AS (u agtype); -- Match vertices with non-empty properties SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE NOT isEmpty(u.list) RETURN properties(u) $$) AS (u agtype); SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE NOT isEmpty(u.map) RETURN properties(u) $$) AS (u agtype); SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE NOT isEmpty(u.string) RETURN properties(u) $$) AS (u agtype); -- Match vertices with no properties SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE isEmpty(properties(u)) RETURN properties(u) $$) AS (u agtype); -- Match vertices with properties SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE NOT isEmpty(properties(u)) RETURN properties(u) $$) AS (u agtype); -- Match vertices with null property (should return nothing since WHERE null) SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE isEmpty(u.tree) RETURN properties(u) $$) AS (u agtype); -- Match and Return bool SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE isEmpty(u.list) RETURN isEmpty(u.list), u.type $$) AS (b agtype, type agtype); SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE NOT isEmpty(u.list) RETURN isEmpty(u.list), u.type $$) AS (b agtype, type agtype); -- Return null on null SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) RETURN isEmpty(u.tree) $$) AS (b agtype); -- Should give an error SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE isEmpty(u) RETURN properties(u) $$) AS (u agtype); SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE isEmpty(1) RETURN properties(u) $$) AS (u agtype); SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE isEmpty(1,2,3) RETURN properties(u) $$) AS (u agtype); SELECT * FROM cypher('for_isEmpty', $$MATCH (u:for_pred) WHERE isEmpty() RETURN properties(u) $$) AS (u agtype); -- clean up SELECT drop_graph('for_isEmpty', true); -- --Distinct -- SELECT * FROM cypher('cypher_match', $$ MATCH (u) RETURN DISTINCT u.id $$) AS (i agtype); SELECT * FROM cypher('cypher_match', $$ CREATE (u:duplicate)-[:dup_edge {id:1 }]->(:other_v) $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (u:duplicate) CREATE (u)-[:dup_edge {id:2 }]->(:other_v) $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (u:duplicate)-[]-(:other_v) RETURN DISTINCT u $$) AS (i agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(:duplicate)-[]-(:other_v) RETURN DISTINCT p $$) AS (i agtype); -- -- Limit -- SELECT * FROM cypher('cypher_match', $$ MATCH (u) RETURN u $$) AS (i agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (u) RETURN u LIMIT 3 $$) AS (i agtype); -- -- Skip -- SELECT * FROM cypher('cypher_match', $$ MATCH (u) RETURN u SKIP 7 $$) AS (i agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (u) RETURN u SKIP 7 LIMIT 3 $$) AS (i agtype); -- -- Optional Match -- SELECT * FROM cypher('cypher_match', $$ CREATE (:opt_match_v {name: 'someone'})-[:opt_match_e]->(:opt_match_v {name: 'somebody'}), (:opt_match_v {name: 'anybody'})-[:opt_match_e]->(:opt_match_v {name: 'nobody'}) $$) AS (u agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (u:opt_match_v) OPTIONAL MATCH (u)-[m]-(l) RETURN u.name as u, type(m), l.name as l ORDER BY u, m, l $$) AS (u agtype, m agtype, l agtype); SELECT * FROM cypher('cypher_match', $$ OPTIONAL MATCH (n:opt_match_v)-[r]->(p), (m:opt_match_v)-[s]->(q) WHERE id(n) <> id(m) RETURN n.name as n, type(r) AS r, p.name as p, m.name AS m, type(s) AS s, q.name AS q ORDER BY n, p, m, q $$) AS (n agtype, r agtype, p agtype, m agtype, s agtype, q agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (n:opt_match_v), (m:opt_match_v) WHERE id(n) <> id(m) OPTIONAL MATCH (n)-[r]->(p), (m)-[s]->(q) RETURN n.name AS n, type(r) AS r, p.name AS p, m.name AS m, type(s) AS s, q.name AS q ORDER BY n, p, m, q $$) AS (n agtype, r agtype, p agtype, m agtype, s agtype, q agtype); -- Tests to catch match following optional match logic -- this syntax is invalid in cypher SELECT * FROM cypher('cypher_match', $$ OPTIONAL MATCH (n) MATCH (m) RETURN n,m $$) AS (n agtype, m agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (n) OPTIONAL MATCH (m) MATCH (o) RETURN n,m $$) AS (n agtype, m agtype); -- -- Tests retrieving Var from some parent's cpstate during transformation -- SELECT create_graph('test_retrieve_var'); SELECT * FROM cypher('test_retrieve_var', $$ CREATE (:A)-[:incs]->(:C) $$) as (a agtype); -- Tests with node Var -- both queries should return the same result -- first query does not retrieve any variable from any parent's cpstate -- second query retrieves variable 'a', inside WHERE, from parent's parent's cpstate SELECT * FROM cypher('test_retrieve_var', $$ MATCH (a:A) WITH a OPTIONAL MATCH (a)-[:incs]->(c) WHERE EXISTS((c)<-[:incs]-()) RETURN a, c $$) AS (a agtype, c agtype); SELECT * FROM cypher('test_retrieve_var', $$ MATCH (a:A) WITH a OPTIONAL MATCH (a)-[:incs]->(c) WHERE EXISTS((c)<-[:incs]-(a)) RETURN a, c $$) AS (a agtype, c agtype); -- Tests with edge Var -- both queries should return the same result -- first query does not retrieve any variable from any parent's cpstate -- second query retrieves variable 'r', inside WHERE, from parent's parent's cpstate SELECT * FROM cypher('test_retrieve_var', $$ MATCH (a:A)-[r:incs]->() WITH a, r OPTIONAL MATCH (a)-[r]->(c) WHERE EXISTS(()<-[]-(c)) RETURN a, r $$) AS (a agtype, r agtype); SELECT * FROM cypher('test_retrieve_var', $$ MATCH (a:A)-[r:incs]->() WITH a, r OPTIONAL MATCH (a)-[r]->(c) WHERE EXISTS((:A)<-[]-(c)) RETURN a, r $$) AS (a agtype, r agtype); SELECT * FROM cypher('test_retrieve_var', $$ MATCH (a:A)-[r:incs]->() WITH a, r OPTIONAL MATCH (a)-[r]->(c) WHERE EXISTS((c)<-[]-(:A)) RETURN a, r $$) AS (a agtype, r agtype); SELECT * FROM cypher('test_retrieve_var', $$ MATCH (a:A)-[r:incs]->() WITH a, r OPTIONAL MATCH (a)-[r]->(c) WHERE EXISTS((:C)<-[]-(:A)) RETURN a, r $$) AS (a agtype, r agtype); SELECT * FROM cypher('test_retrieve_var', $$ MATCH (a:A)-[r:incs]->() WITH a, r OPTIONAL MATCH (a)-[r]->(c) WHERE EXISTS(()<-[r]-(c)) RETURN a, r $$) AS (a agtype, r agtype); -- -- JIRA: AGE2-544 -- -- Clean up SELECT DISTINCT * FROM cypher('cypher_match', $$ MATCH (u) DETACH DELETE (u) $$) AS (i agtype); -- Prepare SELECT * FROM cypher('cypher_match', $$ CREATE (u {name: "orphan"}) CREATE (u1 {name: "F"})-[u2:e1]->(u3 {name: "T"}) RETURN u1, u2, u3 $$) as (u1 agtype, u2 agtype, u3 agtype); -- Querying NOT EXISTS syntax SELECT * FROM cypher('cypher_match', $$ MATCH (f),(t) WHERE NOT EXISTS((f)-[]->(t)) RETURN f.name, t.name $$) as (f agtype, t agtype); -- Querying EXISTS syntax SELECT * FROM cypher('cypher_match', $$ MATCH (f),(t) WHERE EXISTS((f)-[]->(t)) RETURN f.name, t.name $$) as (f agtype, t agtype); -- Querying ALL SELECT * FROM cypher('cypher_match', $$ MATCH (f),(t) WHERE NOT EXISTS((f)-[]->(t)) or true RETURN f.name, t.name $$) as (f agtype, t agtype); -- Querying ALL SELECT * FROM cypher('cypher_match', $$ MATCH (f),(t) RETURN f.name, t.name $$) as (f agtype, t agtype); -- -- Constraints and WHERE clause together -- SELECT * FROM cypher('cypher_match', $$ CREATE ({i: 1, j: 2, k: 3}), ({i: 1, j: 3}), ({i:2, k: 3}) $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (n {j: 2}) WHERE n.i = 1 RETURN n $$) as (n agtype); -- -- Regression tests to check previous clause variable refs -- -- set up initial state and show what we're working with SELECT * FROM cypher('cypher_match', $$ CREATE (a {age: 4}) RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ CREATE (b {age: 6}) RETURN b $$) as (b agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a) RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a) WHERE EXISTS(a.name) RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a) WHERE EXISTS(a.name) SET a.age = 4 RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a),(b) WHERE a.age = 4 AND a.name = "T" AND b.age = 6 RETURN a,b $$) as (a agtype, b agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a),(b) WHERE a.age = 4 AND a.name = "T" AND b.age = 6 CREATE (a)-[:knows {relationship: "friends", years: 3}]->(b) $$) as (r agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a),(b) WHERE a.age = 4 AND a.name = "orphan" AND b.age = 6 CREATE (a)-[:knows {relationship: "enemies", years: 4}]->(b) $$) as (r agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[r]-(b) RETURN r $$) as (r agtype); -- check reuse of 'a' clause-to-clause - vertices SELECT * FROM cypher('cypher_match', $$ MATCH (a {age:4}) RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a) MATCH (a {age:4}) RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a {age:4, name: "orphan"}) RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a) MATCH (a {age:4}) MATCH (a {name: "orphan"}) RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a {age:4}) MATCH (a {name: "orphan"}) RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a) MATCH (a {age:4}) MATCH (a {name: "orphan"}) SET a.age = 3 RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a) MATCH (a {age:3}) MATCH (a {name: "orphan"}) RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a {name: "orphan"}) MATCH (a {age:3}) RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a) WHERE EXISTS(a.age) AND EXISTS(a.name) RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a) WHERE EXISTS(a.age) AND NOT EXISTS(a.name) RETURN a $$) as (a agtype); -- check reuse of 'r' clause-to-clause - edges SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r]-() RETURN r $$) as (r agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r]-() MATCH ()-[r {relationship: "friends"}]-() RETURN r $$) as (r agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r {years:3, relationship: "friends"}]-() RETURN r $$) as (r agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r {years:3}]-() MATCH ()-[r {relationship: "friends"}]-() RETURN r $$) as (r agtype); --mismatch year #, should return nothing SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r {years:2}]-() MATCH ()-[r {relationship: "friends"}]-() RETURN r $$) as (r agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r {relationship:"enemies"}]-() MATCH ()-[r {years:4}]-() RETURN r $$) as (r agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r {relationship:"enemies"}]-() MATCH ()-[r {relationship:"friends"}]-() RETURN r $$) as (r agtype); -- check reuse within clause - vertices SELECT * FROM cypher('cypher_match', $$ CREATE (u {name: "Dave"})-[:knows]->({name: "John"})-[:knows]->(u) RETURN u $$) as (u agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(u)-[]-()-[]-(u) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(u)-[]->()-[]->(u) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[]->()-[]->(a {name: "Dave"}) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[]->()-[]->(a {name: "John"}) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name: "Dave"})-[]->()-[]->(a {name: "Dave"}) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name: "John"})-[]->()-[]->(a {name: "John"}) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name: "Dave"})-[]->()-[]->(a) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name: "John"})-[]->()-[]->(a) RETURN p $$)as (p agtype); -- these are illegal and should fail SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b:knows]->(a) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b]->(a) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b:knows]->(a) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b]->(a) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(p) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(p)-[]->() RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=()-[p]->() RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=() MATCH (p) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=() MATCH (p)-[]->() RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=() MATCH ()-[p]->() RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (p) MATCH p=() RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[p]->() MATCH p=() RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[p *]-()-[p]-() RETURN 0 $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ CREATE (p) WITH p MATCH p=() RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ CREATE p=() WITH p MATCH (p) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ CREATE ()-[p:knows]->() WITH p MATCH p=() RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ CREATE p=() WITH p MATCH ()-[p]->() RETURN p $$)as (p agtype); -- -- Default alias check (issue #883) -- SELECT * FROM cypher('cypher_match', $$ MATCH (_) RETURN _ $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH () MATCH (_{name: "Dave"}) RETURN 0 $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH () MATCH (_{name: "Dave"}) RETURN _ $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (my_age_default_{name: "Dave"}) RETURN my_age_default_$$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH () MATCH (my_age_default_{name: "Dave"}) RETURN my_age_default_$$) as (a agtype); -- these should fail as they are prefixed with _age_default_ which is only for internal use SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_) RETURN _age_default_ $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_a) RETURN _age_default_a $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_whatever) RETURN 0 $$) as (a agtype); -- issue 876 SELECT * FROM cypher('cypher_match', $$ MATCH ({name: "Dave"}) MATCH ({name: "Dave"}) MATCH ({name: "Dave"}) RETURN 0 $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$MATCH ({n0:0}) MATCH ()-[]->() MATCH ({n1:0})-[]-() RETURN 0 AS n2$$) as (a agtype); -- -- self referencing property constraints (issue #898) -- SELECT * FROM cypher('cypher_match', $$ MATCH (a {name:a.name}) RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a {name:a.name, age:a.age}) RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a {name:a.name}) MATCH (a {age:a.age}) RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[u {relationship: u.relationship}]->(b) RETURN p $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[u {relationship: u.relationship, years: u.years}]->(b) RETURN p $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name:a.name})-[u {relationship: u.relationship}]->(b {age:b.age}) RETURN p $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ CREATE () WITH * MATCH (x{n0:x.n1}) RETURN 0 $$) as (a agtype); -- these should fail due to multiple labels for a variable SELECT * FROM cypher('cypher_match', $$ MATCH p=(x)-[]->(x:R) RETURN p, x $$) AS (p agtype, x agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(x:r)-[]->(x:R) RETURN p, x $$) AS (p agtype, x agtype); -- -- Test age.enable_containment configuration parameter -- -- Test queries are run before and after switching off this parameter. -- When on, the containment operator should be used to filter properties. -- When off, the access operator should be used. -- SELECT create_graph('test_enable_containment'); SELECT * FROM cypher('test_enable_containment', $$ CREATE (x:Customer { name: 'Bob', school: { name: 'XYZ College', program: { major: 'Psyc', degree: 'BSc' } }, phone: [ 123456789, 987654321, 456987123 ], addr: [ {city: 'Vancouver', street: 30}, {city: 'Toronto', street: 40} ] }) RETURN x $$) as (a agtype); -- With enable_containment on SET age.enable_containment = on; SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {addr:[{city:'Toronto'}]}) RETURN x $$) as (a agtype); SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {addr:[{city:'Toronto'}, {city: 'Vancouver'}]}) RETURN x $$) as (a agtype); SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {addr:[{city:'Alberta'}]}) RETURN x $$) as (a agtype); SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {school:{program:{major:'Psyc'}}}) RETURN x $$) as (a agtype); SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {name:'Bob',school:{program:{degree:'BSc'}}}) RETURN x $$) as (a agtype); SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {school:{program:{major:'Cs'}}}) RETURN x $$) as (a agtype); SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {name:'Bob',school:{program:{degree:'PHd'}}}) RETURN x $$) as (a agtype); SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {phone:[987654321]}) RETURN x $$) as (a agtype); SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {phone:[654765876]}) RETURN x $$) as (a agtype); SELECT * FROM cypher('test_enable_containment', $$ EXPLAIN (COSTS OFF) MATCH (x:Customer {school:{name:'XYZ',program:{degree:'BSc'}},phone:[987654321],parents:{}}) RETURN x $$) as (a agtype); -- Previous set of queries, with enable_containment off SET age.enable_containment = off; SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {addr:[{city:'Toronto'}]}) RETURN x $$) as (a agtype); SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {addr:[{city:'Toronto'}, {city: 'Vancouver'}]}) RETURN x $$) as (a agtype); SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {addr:[{city:'Alberta'}]}) RETURN x $$) as (a agtype); SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {school:{program:{major:'Psyc'}}}) RETURN x $$) as (a agtype); SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {name:'Bob',school:{program:{degree:'BSc'}}}) RETURN x $$) as (a agtype); SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {school:{program:{major:'Cs'}}}) RETURN x $$) as (a agtype); SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {name:'Bob',school:{program:{degree:'PHd'}}}) RETURN x $$) as (a agtype); SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {phone:[987654321]}) RETURN x $$) as (a agtype); SELECT count(*) FROM cypher('test_enable_containment', $$ MATCH (x:Customer {phone:[654765876]}) RETURN x $$) as (a agtype); SELECT * FROM cypher('test_enable_containment', $$ EXPLAIN (COSTS OFF) MATCH (x:Customer {school:{name:'XYZ',program:{degree:'BSc'}},phone:[987654321],parents:{}}) RETURN x $$) as (a agtype); -- -- Issue 945 -- SELECT create_graph('issue_945'); SELECT * FROM cypher('issue_945', $$ CREATE (a:Part {part_num: '123'}), (b:Part {part_num: '345'}), (c:Part {part_num: '456'}), (d:Part {part_num: '789'}) $$) as (result agtype); -- should match 4 SELECT * FROM cypher('issue_945', $$ MATCH (a:Part) RETURN a $$) as (result agtype); -- each should return 4 SELECT * FROM cypher('issue_945', $$ MATCH (:Part) RETURN count(*) $$) as (result agtype); SELECT * FROM cypher('issue_945', $$ MATCH (a:Part) RETURN count(*) $$) as (result agtype); -- each should return 4 rows of 0 SELECT * FROM cypher('issue_945', $$ MATCH (:Part) RETURN 0 $$) as (result agtype); SELECT * FROM cypher('issue_945', $$ MATCH (a:Part) RETURN 0 $$) as (result agtype); -- each should return 16 rows of 0 SELECT * FROM cypher('issue_945', $$ MATCH (:Part) MATCH (:Part) RETURN 0 $$) as (result agtype); SELECT * FROM cypher('issue_945', $$ MATCH (a:Part) MATCH (:Part) RETURN 0 $$) as (result agtype); SELECT * FROM cypher('issue_945', $$ MATCH (:Part) MATCH (b:Part) RETURN 0 $$) as (result agtype); SELECT * FROM cypher('issue_945', $$ MATCH (a:Part) MATCH (b:Part) RETURN 0 $$) as (result agtype); -- each should return a count of 16 SELECT * FROM cypher('issue_945', $$ MATCH (:Part) MATCH (:Part) RETURN count(*) $$) as (result agtype); SELECT * FROM cypher('issue_945', $$ MATCH (a:Part) MATCH (:Part) RETURN count(*) $$) as (result agtype); SELECT * FROM cypher('issue_945', $$ MATCH (:Part) MATCH (b:Part) RETURN count(*) $$) as (result agtype); SELECT * FROM cypher('issue_945', $$ MATCH (a:Part) MATCH (b:Part) RETURN count(*) $$) as (result agtype); -- -- Issue 1045 -- SELECT * FROM cypher('cypher_match', $$ MATCH p=()-[*]->() RETURN length(p) $$) as (length agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=()-[*]->() WHERE length(p) > 1 RETURN length(p) $$) as (length agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=()-[*]->() WHERE size(nodes(p)) = 3 RETURN nodes(p)[0] $$) as (nodes agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (n {name:'Dave'}) MATCH p=()-[*]->() WHERE nodes(p)[0] = n RETURN length(p) $$) as (length agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p1=(n {name:'Dave'})-[]->() MATCH p2=()-[*]->() WHERE p2=p1 RETURN p2=p1 $$) as (path agtype); -- -- Issue 1399 EXISTS leads to an error if a relation label does not exists as database table -- SELECT create_graph('issue_1399'); -- this is an empty graph so these should return 0 SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE EXISTS((foo)-[]->()) RETURN foo $$) as (c agtype); SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE NOT EXISTS((foo)-[]->()) RETURN foo $$) as (c agtype); SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE EXISTS((foo)-[:BAR]->()) RETURN foo $$) as (c agtype); SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE NOT EXISTS((foo)-[:BAR]->()) RETURN foo $$) as (c agtype); -- this is an empty graph so these should return false SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE EXISTS((foo)-[]->()) RETURN count(foo) > 0 $$) as (c agtype); SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE NOT EXISTS((foo)-[]->()) RETURN count(foo) > 0 $$) as (c agtype); SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE EXISTS((foo)-[:BAR]->()) RETURN count(foo) > 0 $$) as (c agtype); SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE NOT EXISTS((foo)-[:BAR]->()) RETURN count(foo) > 0 $$) as (c agtype); -- create 1 path SELECT * FROM cypher('issue_1399', $$ CREATE (foo)-[:BAR]->() RETURN foo $$) as (c agtype); -- these should each return 1 row as it is a directed edge and -- only one vertex can match. SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE EXISTS((foo)-[]->()) RETURN foo $$) as (c agtype); SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE NOT EXISTS((foo)-[]->()) RETURN foo $$) as (c agtype); SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE EXISTS((foo)-[:BAR]->()) RETURN foo $$) as (c agtype); SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE NOT EXISTS((foo)-[:BAR]->()) RETURN foo $$) as (c agtype); -- this should return 0 rows as it can't exist - that path isn't in BAR2 SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE EXISTS((foo)-[:BAR2]->()) RETURN foo $$) as (c agtype); -- this should return 2 rows as they all exist SELECT * FROM cypher('issue_1399', $$ MATCH (foo) WHERE NOT EXISTS((foo)-[:BAR2]->()) RETURN foo $$) as (c agtype); -- Issue 1393 EXISTS doesn't see previous clauses' variables SELECT FROM create_graph('issue_1393'); SELECT * FROM cypher('issue_1393', $$ CREATE (n1:Object) RETURN n1 $$) AS (n1 agtype); -- vertex cases SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE EXISTS((n1)-[]->(n2)) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE EXISTS((n1:Object)-[]->(n2:Object)) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE NOT EXISTS((n1)-[]->(n2)) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE NOT EXISTS((n1:Object)-[]->(n2:Object)) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE EXISTS((n1)-[]->()) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE NOT EXISTS((n1)-[]->()) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); SELECT * FROM cypher('issue_1393', $$ CREATE (n1:Object)-[e:knows]->(n2:Object) RETURN n1, e, n2 $$) AS (n1 agtype, e agtype, n2 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE EXISTS((n1)-[]->(n2)) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE EXISTS((n1:Object)-[]->(n2:Object)) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE NOT EXISTS((n1)-[]->(n2)) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE NOT EXISTS((n1:Object)-[]->(n2:Object)) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE EXISTS((n1)-[]->()) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE NOT EXISTS((n1)-[]->()) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE EXISTS((n1:Object)-[]->()) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE NOT EXISTS((n1:Object)-[]->()) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); -- should error SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE EXISTS((n1:object)-[]->()) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE NOT EXISTS((n1:object)-[]->()) RETURN n1,n2 $$) AS (n1 agtype, n2 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) WHERE NOT EXISTS((n1)-[e]->()) RETURN n1,n2,e $$) AS (n1 agtype, n2 agtype, e agtype); -- edge cases SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE EXISTS((n1)-[e1]->(n2)) RETURN e1 $$) AS (e1 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE EXISTS((n1:Object)-[e1:knows]->(n2:Object)) RETURN e1 $$) AS (e1 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE NOT EXISTS((n1)-[e1]->(n2)) RETURN e1 $$) AS (e1 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE NOT EXISTS((n1:Object)-[e1:knows]->(n2:Object)) RETURN e1 $$) AS (e1 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE EXISTS((n1)-[e1]->()) RETURN e1 $$) AS (e1 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE EXISTS((n1:Object)-[e1:knows]->(n2:Object)) RETURN e1 $$) AS (e1 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE NOT EXISTS((n1)-[e1]->()) RETURN e1 $$) AS (e1 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE NOT EXISTS((n1:Object)-[e1:knows]->(n2:Object)) RETURN e1 $$) AS (e1 agtype); -- should error SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE EXISTS((n1:Object)-[e1:Knows]->(n2:Object)) RETURN e1 $$) AS (e1 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE NOT EXISTS((n1:Object)-[e1:Knows]->(n2:Object)) RETURN e1 $$) AS (e1 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE EXISTS((e1:Object)-[e1:Knows]->(n2:Object)) RETURN e1 $$) AS (e1 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE NOT EXISTS((n1:Object)-[e1:knows]->(e1)) RETURN e1 $$) AS (e1 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE NOT EXISTS((n1:Object)-[e1:knows]->(e2)) RETURN e1 $$) AS (e1 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH p=(n1:Object)-[e1:knows]->() MATCH (n2:Object) WHERE EXISTS((n1:Object)-[p]->(e2)) RETURN e1 $$) AS (e1 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH p=(n1)-[e1]->() MATCH (n2) WHERE EXISTS((n1)-[p]->(e2)) RETURN p $$) AS (e1 agtype); -- long cases SELECT * FROM cypher('issue_1393', $$ MATCH (n1) MATCH (n2) MATCH (n1)-[e1]->() MATCH (n2)<-[e2]-(n1) MATCH (n3) WHERE EXISTS((n3)-[e1]->(n2)) RETURN n1,n2,n3,e1 $$) AS (n1 agtype, n2 agtype, n3 agtype, e1 agtype); SELECT * FROM cypher('issue_1393', $$ MATCH (n1:Object) MATCH (n2:Object) MATCH (n1)-[e1:knows]->() MATCH (n2)<-[e2:knows]-(n1) MATCH (n3:Object) WHERE EXISTS((n3:Object)-[e1:knows]->(n2:Object)) RETURN n1,n2,n3,e1 $$) AS (n1 agtype, n2 agtype, n3 agtype, e1 agtype); -- -- Clean up -- SELECT drop_graph('cypher_match', true); SELECT drop_graph('test_retrieve_var', true); SELECT drop_graph('test_enable_containment', true); SELECT drop_graph('issue_945', true); SELECT drop_graph('issue_1399', true); SELECT drop_graph('issue_1393', true); -- -- End -- age-PG16-v1.5.0-rc0/regress/sql/cypher_merge.sql000066400000000000000000000471201454606241200212470ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher_merge'); /* * Section 1: MERGE with single vertex */ /* * test 1: Single MERGE Clause, path doesn't exist */ --test query SELECT * FROM cypher('cypher_merge', $$MERGE (n {i: "Hello Merge", j: (null IS NULL), k: (null IS NOT NULL)})$$) AS (a agtype); --validate SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 2: Single MERGE Clause, path exists */ --data setup SELECT * FROM cypher('cypher_merge', $$CREATE ({i: "Hello Merge", j: (null IS NULL)}) $$) AS (a agtype); --test_query SELECT * FROM cypher('cypher_merge', $$MERGE ({i: "Hello Merge"})$$) AS (a agtype); SELECT * FROM cypher('cypher_merge', $$MERGE ({j: (null IS NULL)})$$) AS (a agtype); --validate SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 3: Prev clause returns no results, no data created */ --test query SELECT * FROM cypher('cypher_merge', $$MATCH (n) MERGE ({i: n.i})$$) AS (a agtype); --validate SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 4: Prev clause has results, path exists */ --test query SELECT * FROM cypher('cypher_merge', $$CREATE ({i: "Hello Merge"}) $$) AS (a agtype); SELECT * FROM cypher('cypher_merge', $$MATCH (n) MERGE ({i: n.i})$$) AS (a agtype); --validate SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 5: Prev clause has results, path does not exist (different property name) */ --data setup SELECT * FROM cypher('cypher_merge', $$CREATE ({i: "Hello Merge"}) $$) AS (a agtype); --test query SELECT * FROM cypher('cypher_merge', $$MATCH (n) MERGE ({j: n.i})$$) AS (a agtype); --validate SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 6: MERGE with no prev clause, filters correctly, data created */ -- setup SELECT * FROM cypher('cypher_merge', $$CREATE ({i: 2}) $$) AS (a agtype); --test query SELECT * FROM cypher('cypher_merge', $$MERGE (n {i: 1}) RETURN n$$) AS (a agtype); --validate SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 7: MERGE with no prev clause, filters correctly, no data created */ -- setup SELECT * FROM cypher('cypher_merge', $$CREATE ({i: 1}) $$) AS (a agtype); SELECT * FROM cypher('cypher_merge', $$CREATE ({i: 1}) $$) AS (a agtype); SELECT * FROM cypher('cypher_merge', $$CREATE ({i: 2}) $$) AS (a agtype); SELECT * FROM cypher('cypher_merge', $$CREATE () $$) AS (a agtype); --test query SELECT * FROM cypher('cypher_merge', $$MERGE (n {i: 1}) RETURN n$$) AS (a agtype); --validate SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * Section 2: MERGE with edges */ /* * test 8: MERGE creates edge */ -- setup SELECT * FROM cypher('cypher_merge', $$CREATE () $$) AS (a agtype); --test query SELECT * FROM cypher('cypher_merge', $$MATCH (n) MERGE (n)-[:e]->(:v)$$) AS (a agtype); --validate SELECT * FROM cypher('cypher_merge', $$MATCH (n)-[e:e]->(m:v) RETURN n, e, m$$) AS (n agtype, e agtype, m agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 9: edge already exists */ -- setup SELECT * FROM cypher('cypher_merge', $$CREATE ()-[:e]->() $$) AS (a agtype); --test query SELECT * FROM cypher('cypher_merge', $$MERGE (n)-[:e]->(:v)$$) AS (a agtype); --validate SELECT * FROM cypher('cypher_merge', $$MATCH (n)-[e:e]->(m:v) RETURN n, e, m$$) AS (n agtype, e agtype, m agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 10: edge doesn't exist, using MATCH */ -- setup SELECT * FROM cypher('cypher_merge', $$CREATE () $$) AS (a agtype); --test query SELECT * FROM cypher('cypher_merge', $$MATCH (n) MERGE (n)-[:e]->(:v)$$) AS (a agtype); --validate created correctly SELECT * FROM cypher('cypher_merge', $$MATCH (n)-[e:e]->(m:v) RETURN n, e, m$$) AS (n agtype, e agtype, m agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 11: edge already exists, using MATCH */ -- setup SELECT * FROM cypher('cypher_merge', $$CREATE ()-[:e]->() $$) AS (a agtype); --test query SELECT * FROM cypher('cypher_merge', $$MATCH (n) MERGE (n)-[:e]->(:v)$$) AS (a agtype); --validate created correctly SELECT * FROM cypher('cypher_merge', $$MATCH (n)-[e:e]->(m:v) RETURN n, e, m$$) AS (n agtype, e agtype, m agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 12: Partial Path Exists, creates whole path */ -- setup SELECT * FROM cypher('cypher_merge', $$CREATE ()-[:e]->() $$) AS (a agtype); --test query SELECT * FROM cypher('cypher_merge', $$MERGE ()-[:e]->()-[:e]->()$$) AS (a agtype); --validate created correctly --Returns 3. One for the data setup and 2 for the longer path in MERGE SELECT count(*) FROM cypher('cypher_merge', $$MATCH p=()-[e:e]->() RETURN p$$) AS (p agtype); -- Returns 1, the path created in MERGE SELECT count(*) FROM cypher('cypher_merge', $$MATCH p=()-[:e]->()-[]->() RETURN p$$) AS (p agtype); -- 5 vertices total should have been created SELECT count(*) FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 13: edge doesn't exists (different label), using MATCH */ -- setup SELECT * FROM cypher('cypher_merge', $$CREATE ()-[:e]->() $$) AS (a agtype); --test query SELECT * FROM cypher('cypher_merge', $$MATCH (n) MERGE (n)-[:e_new]->(:v)$$) AS (a agtype); --validate created correctly SELECT * FROM cypher('cypher_merge', $$MATCH (n)-[e]->(m:v) RETURN n, e, m$$) AS (n agtype, e agtype, m agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 14: edge doesn't exists (different label), without MATCH */ -- setup SELECT * FROM cypher('cypher_merge', $$CREATE ()-[:e]->() $$) AS (a agtype); --test query SELECT * FROM cypher('cypher_merge', $$MERGE (n)-[:e_new]->(:v)$$) AS (a agtype); --validate created correctly SELECT * FROM cypher('cypher_merge', $$MATCH (n)-[e]->(m:v) RETURN n, e, m$$) AS (n agtype, e agtype, m agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * Section 3: MERGE with writing clauses */ /* * test 15: */ --test query SELECT * FROM cypher('cypher_merge', $$CREATE () MERGE (n)$$) AS (a agtype); --validate created correctly SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 16: */ --test query SELECT * FROM cypher('cypher_merge', $$CREATE (n) WITH n as a MERGE (a)-[:e]->() $$) AS (a agtype); --validate created correctly SELECT * FROM cypher('cypher_merge', $$MATCH p=()-[:e]->() RETURN p$$) AS (p agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 17: */ --test query SELECT * FROM cypher('cypher_merge', $$CREATE (n) MERGE (n)-[:e]->() $$) AS (a agtype); --validate created correctly SELECT * FROM cypher('cypher_merge', $$MATCH p=()-[:e]->() RETURN p$$) AS (p agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 18: */ --test query SELECT * FROM cypher('cypher_merge', $$CREATE (n {i : 1}) SET n.i = 2 MERGE ({i: 2}) $$) AS (a agtype); --validate created correctly SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 19: */ --test query SELECT * FROM cypher('cypher_merge', $$CREATE (n {i : 1}) SET n.i = 2 WITH n as a MERGE ({i: 2}) $$) AS (a agtype); --validate created correctly SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 20: */ --data setup SELECT * FROM cypher('cypher_merge', $$CREATE (n {i : 1})$$) AS (a agtype); --test query SELECT * FROM cypher('cypher_merge', $$MATCH (n {i : 1}) SET n.i = 2 WITH n as a MERGE ({i: 2}) $$) AS (a agtype); --validate created correctly SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 21: */ --data setup SELECT * FROM cypher('cypher_merge', $$CREATE (n {i : 1})$$) AS (a agtype); --test query SELECT * FROM cypher('cypher_merge', $$MATCH (n {i : 1}) DELETE n MERGE (n)-[:e]->() $$) AS (a agtype); --validate, transaction was rolled back because of the error message SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 22: * MERGE after MERGE */ SELECT * FROM cypher('cypher_merge', $$ CREATE (n:Person {name : "Rob Reiner", bornIn: "New York"}) $$) AS (a agtype); SELECT * FROM cypher('cypher_merge', $$ CREATE (n:Person {name : "Michael Douglas", bornIn: "New Jersey"}) $$) AS (a agtype); SELECT * FROM cypher('cypher_merge', $$ CREATE (n:Person {name : "Martin Sheen", bornIn: "Ohio"}) $$) AS (a agtype); --test query SELECT * FROM cypher('cypher_merge', $$ MATCH (person:Person) MERGE (city:City {name: person.bornIn}) MERGE (person)-[r:BORN_IN]->(city) RETURN person.name, person.bornIn, city $$) AS (name agtype, bornIn agtype, city agtype); --validate SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 23: */ SELECT * FROM cypher('cypher_merge', $$MERGE ()-[:e]-()$$) AS (a agtype); --validate SELECT * FROM cypher('cypher_merge', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 24: */ SELECT * FROM cypher('cypher_merge', $$MERGE (a) RETURN a$$) AS (a agtype); --validate SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 25: */ SELECT * FROM cypher('cypher_merge', $$MERGE p=()-[:e]-() RETURN p$$) AS (a agtype); --validate SELECT * FROM cypher('cypher_merge', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 26: */ SELECT * FROM cypher('cypher_merge', $$MERGE (a)-[:e]-(b) RETURN a$$) AS (a agtype); --validate SELECT * FROM cypher('cypher_merge', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * test 27: */ SELECT * FROM cypher('cypher_merge', $$CREATE p=()-[:e]->() RETURN p$$) AS (a agtype); SELECT * FROM cypher('cypher_merge', $$MERGE p=()-[:e]-() RETURN p$$) AS (a agtype); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * Section 4: Error Messages */ /* * test 28: * Only single paths allowed */ SELECT * FROM cypher('cypher_merge', $$MERGE (n), (m) RETURN n, m$$) AS (a agtype, b agtype); /* * test 29: * Edges cannot reference existing variables */ SELECT * FROM cypher('cypher_merge', $$MATCH ()-[e]-() MERGE ()-[e]->()$$) AS (a agtype); /* * test 30: * NULL vertex given to MERGE */ --data setup SELECT * FROM cypher('cypher_merge', $$CREATE (n)$$) AS (a agtype); --test query SELECT * FROM cypher('cypher_merge', $$MATCH (n) OPTIONAL MATCH (n)-[:e]->(m) MERGE (m)$$) AS (a agtype); -- validate only 1 vertex exits SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (a agtype); -- -- MERGE/SET test -- Node does exist, then set (github issue #235) SELECT * FROM cypher('cypher_merge', $$ CREATE (n:node {name: 'Jason'}) RETURN n $$) AS (n agtype); SELECT * FROM cypher('cypher_merge', $$ MATCH (n:node) RETURN n $$) AS (n agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE (n:node {name: 'Jason'}) SET n.name = 'Lisa' RETURN n $$) AS (n agtype); SELECT * FROM cypher('cypher_merge', $$ MATCH (n:node) RETURN n $$) AS (n agtype); -- Node doesn't exist, is created, then set SELECT * FROM cypher('cypher_merge', $$ MATCH (n:node) DELETE n $$) AS (n agtype); SELECT * FROM cypher('cypher_merge', $$ MATCH (n:node) RETURN n $$) AS (n agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE (n:node {name: 'Jason'}) SET n.name = 'Lisa' RETURN n $$) AS (n agtype); SELECT * FROM cypher('cypher_merge', $$ MATCH (n:node) RETURN n $$) AS (n agtype); -- Multiple SETs SELECT * FROM cypher('cypher_merge', $$ MERGE (n:node {name: 'Lisa'}) SET n.age = 23, n.gender = "Female" RETURN n $$) AS (n agtype); SELECT * FROM cypher('cypher_merge', $$ MATCH (n:node) RETURN n $$) AS (n agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE (n:node {name: 'Jason'}) SET n.name = 'Lisa', n.age = 23, n.gender = 'Female' RETURN n $$) AS (n agtype); SELECT * FROM cypher('cypher_merge', $$ MATCH (n:node) RETURN n $$) AS (n agtype); -- -- Complex MERGE w/wo RETURN values -- -- The first one should create a path, the others should just return parts of it. SELECT * FROM cypher('cypher_merge', $$ MERGE ()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) $$) AS (x agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE ()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) RETURN x $$) AS (x agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE p=()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) $$) AS (p agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE p=()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) RETURN p $$) AS (p agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE p=()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) RETURN p $$) AS (p agtype); -- This should only return 1 row, as the path should already exist. SELECT * FROM cypher('cypher_merge', $$ MATCH p=()-[:B]->(:C)-[:E]->(:C)<-[:F]-(:I) RETURN p $$) AS (p agtype); -- test variable reuse in MERGE - the first MERGE of each group should create, -- the second MERGE shouldn't. SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:P)-[:E]->(x:P) RETURN p, x $$) AS (p agtype, x agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE (x:P)-[:E]->(x:P) $$) AS (x agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE (x:P)-[:E]->(x) $$) AS (x agtype); SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:P)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:Q)-[:E]->(x:Q) RETURN p, x $$) AS (p agtype, x agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE (x:Q)-[:E]->(x) $$) AS (x agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE (x:Q)-[:E]->(x:Q) $$) AS (x agtype); SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:Q)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:R)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:R)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:R)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:R)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); -- should return 4 rows SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); -- should create 1 row SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x)-[:E1]->(x) RETURN p, x $$) AS (p agtype, x agtype); SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x)-[:E1]->(x) RETURN p, x $$) AS (p agtype, x agtype); -- the following should fail due to multiple labels SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x)-[:E]->(x:R) RETURN p, x $$) AS (p agtype, x agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:r)-[:E]->(x:R) RETURN p, x $$) AS (p agtype, x agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE (x)-[:E]->(x:R) $$) AS (x agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE (x:r)-[:E]->(x:R) $$) AS (x agtype); -- the following should fail due to reuse issues SELECT * FROM cypher('cypher_merge', $$ MERGE (x:r)-[y:E]->(x)-[y]->(x) $$) AS (x agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE (x:r)-[y:E]->(x)-[x]->(y) $$) AS (x agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE (x:r)-[y:E]->(x)-[z:E]->(y) $$) AS (x agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:r)-[y:E]->(x)-[p]->(x) $$) AS (x agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:r)-[y:E]->(x)-[p:E]->(x) $$) AS (x agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:r)-[y:E]->(p)-[x]->(y) $$) AS (x agtype); -- issue 1219 SELECT * FROM create_graph('issue_1219'); SELECT * FROM cypher('issue_1219', $$ CREATE (x:Label1{arr:[1,2,3,4]}) RETURN x $$) as (a agtype); SELECT * FROM cypher('issue_1219', $$ MATCH (x:Label1{arr:[1,2,3,4]}) MERGE (y:Label2{key1:2, key2:x.arr, key3:3}) RETURN y $$) as (result agtype); SELECT * FROM cypher('issue_1219', $$ MATCH (x:Label1{arr:[1,2,3,4]}) MERGE (y:Label2{key2:id(x)}) RETURN y $$) as (result agtype); SELECT * FROM cypher('issue_1219', $$ MATCH (x) RETURN x $$) as (a agtype); -- these shouldn't create more SELECT * FROM cypher('issue_1219', $$ MATCH (x:Label1{arr:[1,2,3,4]}) MERGE (y:Label2{key1:2, key2:x.arr, key3:3}) RETURN y $$) as (result agtype); SELECT * FROM cypher('issue_1219', $$ MATCH (x:Label1{arr:[1,2,3,4]}) MERGE (y:Label2{key2:id(x)}) RETURN y $$) as (result agtype); SELECT * FROM cypher('issue_1219', $$ MATCH (x) RETURN x $$) as (a agtype); -- create a path SELECT * FROM cypher('issue_1219', $$ CREATE (u:Label1{name: "John"})-[e:knows]->(v:Label1{name: "Jane"}) $$) as (result agtype); SELECT * FROM cypher('issue_1219', $$ MATCH (u:Label1{name:"John"})-[e:knows]->(v:Label1{name: "Jane"}) MERGE (y:Label2{start_id:id(u), edge_id:id(e), end_id:id(v)}) RETURN y $$) as (result agtype); SELECT * FROM cypher('issue_1219', $$ MATCH (x) RETURN x $$) as (result agtype); SELECT * FROM cypher('issue_1219', $$ MATCH ()-[e]->() RETURN e $$) as (result agtype); SELECT drop_graph('issue_1219', true); --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* * Clean up graph */ SELECT drop_graph('cypher_merge', true); age-PG16-v1.5.0-rc0/regress/sql/cypher_remove.sql000066400000000000000000000126411454606241200214450ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher_remove'); --test 1 SELECT * FROM cypher('cypher_remove', $$CREATE (:test_1)$$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$CREATE (:test_1 {i: 0, j: 5, a: 0})$$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$CREATE (:test_1 {i: 1})$$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$MATCH (n:test_1) REMOVE n.i $$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$MATCH (n:test_1) RETURN n$$) AS (a agtype); --test 2 SELECT * FROM cypher('cypher_remove', $$CREATE (:test_2)$$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$CREATE (:test_2 {i: 0, j: 5, a: 0})$$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$CREATE (:test_2 {i: 1})$$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$MATCH (n:test_2) REMOVE n.j RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$MATCH (n:test_2) RETURN n$$) AS (a agtype); --test 3 Validate Paths are updated SELECT * FROM cypher('cypher_remove', $$CREATE (:test_3 { i : 20 } )-[:test_3_edge {j:20}]->(:test_3 {i:10})$$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$MATCH p=(n)-[:test_3_edge]->() REMOVE n.i RETURN p$$) AS (a agtype); --test 4 Edges SELECT * FROM cypher('cypher_remove', $$CREATE (:test_4 { i : 20 } )-[:test_4_edge {j:20}]->(:test_4 {i:10})$$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$MATCH ()-[n]->(:test_4) REMOVE n.i RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$MATCH ()-[n]->(:test_4) RETURN n$$) AS (a agtype); --test 5 two REMOVE clauses SELECT * FROM cypher('cypher_remove', $$CREATE (:test_5 {i: 1, j : 2, k : 3}) $$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$ MATCH (n:test_5) REMOVE n.i REMOVE n.j RETURN n $$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$ MATCH (n:test_5) RETURN n $$) AS (a agtype); --test 6 Create a loop and see that set can work after create SELECT * FROM cypher('cypher_remove', $$CREATE (:test_6 {j: 5, y: 99})$$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$ MATCH (n {j: 5}) CREATE p=(n)-[e:e {j:34}]->(n) REMOVE n.y RETURN n, p $$) AS (a agtype, b agtype); SELECT * FROM cypher('cypher_remove', $$MATCH (n:test_6) RETURN n$$) AS (a agtype); --test 7 Create a loop and see that set can work after create SELECT * FROM cypher('cypher_remove', $$ CREATE (:test_7)-[e:e {j:34}]->() REMOVE e.y RETURN e $$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$MATCH (n:test_7) RETURN n$$) AS (a agtype); --test 8 SELECT * FROM cypher('cypher_remove', $$ MATCH (n:test_7) MATCH (n)-[e:e {j:34}]->() REMOVE n.y RETURN n $$) AS (a agtype); --Handle Inheritance SELECT * FROM cypher('cypher_remove', $$CREATE ( {i : 1 })$$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$MATCH (n) REMOVE n.i RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$MATCH (n) RETURN n$$) AS (a agtype); -- prepared statements SELECT * FROM cypher('cypher_remove', $$CREATE ( {i : 1 })$$) AS (a agtype); PREPARE p_1 AS SELECT * FROM cypher('cypher_remove', $$MATCH (n) REMOVE n.i RETURN n $$) AS (a agtype); EXECUTE p_1; SELECT * FROM cypher('cypher_remove', $$CREATE ( {i : 1 })$$) AS (a agtype); EXECUTE p_1; -- pl/pgsql SELECT * FROM cypher('cypher_remove', $$CREATE ( {i : 1 })$$) AS (a agtype); CREATE FUNCTION remove_test() RETURNS TABLE(vertex agtype) LANGUAGE plpgsql VOLATILE AS $BODY$ BEGIN RETURN QUERY SELECT * FROM cypher('cypher_remove', $$MATCH (n) REMOVE n.i RETURN n$$) AS (a agtype); END $BODY$; SELECT remove_test(); SELECT * FROM cypher('cypher_remove', $$CREATE ( {i : 1 })$$) AS (a agtype); SELECT remove_test(); -- -- Updating Multiple Fields -- SELECT * FROM cypher('cypher_remove', $$MATCH (n) RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$MATCH (n) REMOVE n.i, n.j, n.k RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$MATCH (n) RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$CREATE ()-[:edge_multi_property { i: 5, j: 20}]->()$$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$MATCH ()-[e:edge_multi_property]-() RETURN e$$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$MATCH ()-[e:edge_multi_property]-() REMOVE e.i, e.j RETURN e$$) AS (a agtype); --Errors SELECT * FROM cypher('cypher_remove', $$REMOVE n.i$$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$MATCH (n) REMOVE n.i = NULL$$) AS (a agtype); SELECT * FROM cypher('cypher_remove', $$MATCH (n) REMOVE wrong_var.i$$) AS (a agtype); -- -- Clean up -- DROP FUNCTION remove_test; SELECT drop_graph('cypher_remove', true); -- -- End -- age-PG16-v1.5.0-rc0/regress/sql/cypher_set.sql000066400000000000000000000311571454606241200207460ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher_set'); SELECT * FROM cypher('cypher_set', $$CREATE (:v)$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$CREATE (:v {i: 0, j: 5, a: 0})$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$CREATE (:v {i: 1})$$) AS (a agtype); --Simple SET test case SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = 3$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n) WHERE n.j = 5 SET n.i = NULL RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = NULL RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = 3 RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); --Test assigning properties to rand() and pi() SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = rand() RETURN n.i < 1 AND n.i >= 0$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = pi() RETURN n$$) AS (a agtype); --Handle Inheritance SELECT * FROM cypher('cypher_set', $$CREATE ()$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = 3 RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); --Validate Paths are updated SELECT * FROM cypher('cypher_set', $$MATCH (n) CREATE (n)-[:e {j:20}]->(:other_v {k:10}) RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH p=(n)-[]->() SET n.i = 50 RETURN p$$) AS (a agtype); --Edges SELECT * FROM cypher('cypher_set', $$MATCH ()-[n]-(:other_v) SET n.i = 3 RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH ()-[n]->(:other_v) RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$ MATCH (n {j: 5}) SET n.y = 50 SET n.z = 99 RETURN n $$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$ MATCH (n {j: 5}) SET n.y = 53 SET n.y = 50 SET n.z = 99 SET n.arr = [n.y, n.z] RETURN n $$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$ MATCH (n {j: 5}) REMOVE n.arr RETURN n $$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$ MATCH (n {j: 5}) RETURN n $$) AS (a agtype); --Create a loop and see that set can work after create SELECT * FROM cypher('cypher_set', $$ MATCH (n {j: 5}) CREATE p=(n)-[e:e {j:34}]->(n) SET n.y = 99 RETURN n, p $$) AS (a agtype, b agtype); --Create a loop and see that set can work after create SELECT * FROM cypher('cypher_set', $$ CREATE ()-[e:e {j:34}]->() SET e.y = 99 RETURN e $$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$ MATCH (n) MATCH (n)-[e:e {j:34}]->() SET n.y = 1 RETURN n $$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$ MATCH (n) MATCH ()-[e:e {j:34}]->(n) SET n.y = 2 RETURN n $$) AS (a agtype); -- Test that SET works with nodes(path) and relationships(path) SELECT * FROM cypher('cypher_set', $$ MATCH p=(n)-[e:e {j:34}]->() WITH nodes(p) AS ns WITH ns[0] AS n SET n.k = 99 SET n.k = 999 RETURN n $$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$ MATCH p=(n)-[e:e {j:34}]->() WITH relationships(p) AS rs WITH rs[0] AS r SET r.l = 99 SET r.l = 999 RETURN r $$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$ MATCH p=(n)-[e:e {j:34}]->() REMOVE n.k, e.l RETURN p $$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n)-[]->(n) SET n.y = 99 RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n) MATCH (n)-[]->(m) SET n.t = 150 RETURN n$$) AS (a agtype); -- prepared statements PREPARE p_1 AS SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = 3 RETURN n $$) AS (a agtype); EXECUTE p_1; EXECUTE p_1; PREPARE p_2 AS SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = $var_name RETURN n $$, $1) AS (a agtype); EXECUTE p_2('{"var_name": 4}'); EXECUTE p_2('{"var_name": 6}'); CREATE FUNCTION set_test() RETURNS TABLE(vertex agtype) LANGUAGE plpgsql VOLATILE AS $BODY$ BEGIN RETURN QUERY SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = 7 RETURN n $$) AS (a agtype); END $BODY$; SELECT set_test(); SELECT set_test(); -- -- Updating multiple fields -- SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = 3, n.j = 5 RETURN n $$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n)-[m]->(n) SET m.y = n.y RETURN n, m$$) AS (a agtype, b agtype); --Errors SELECT * FROM cypher('cypher_set', $$SET n.i = NULL$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n) SET wrong_var.i = 3$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n) SET i = 3$$) AS (a agtype); -- -- SET refactor regression tests -- -- INSERT INTO CREATE TABLE tbl (result agtype); SELECT * FROM cypher('cypher_set', $$CREATE (u:vertices) $$) AS (result agtype); SELECT * FROM cypher('cypher_set', $$CREATE (u:begin)-[:edge]->(v:end) $$) AS (result agtype); SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) return u $$) AS (result agtype); SELECT * FROM cypher('cypher_set', $$MATCH (u:begin)-[:edge]->(v:end) return u, v $$) AS (u agtype, v agtype); INSERT INTO tbl (SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) SET u.i = 7 return u $$) AS (result agtype)); INSERT INTO tbl (SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) SET u.i = 13 return u $$) AS (result agtype)); SELECT * FROM tbl; SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) return u $$) AS (result agtype); BEGIN; SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) SET u.i = 1, u.j = 3, u.k = 5 return u $$) AS (result agtype); SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) return u $$) AS (result agtype); SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) SET u.i = 2, u.j = 4, u.k = 6 return u $$) AS (result agtype); SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) return u $$) AS (result agtype); SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) SET u.i = 3, u.j = 6, u.k = 9 return u $$) AS (result agtype); SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) return u $$) AS (result agtype); SELECT * FROM cypher('cypher_set', $$MATCH (u:begin)-[:edge]->(v:end) SET u.i = 1, v.i = 2, u.j = 3, v.j = 4 return u, v $$) AS (u agtype, v agtype); SELECT * FROM cypher('cypher_set', $$MATCH (u:begin)-[:edge]->(v:end) return u, v $$) AS (u agtype, v agtype); SELECT * FROM cypher('cypher_set', $$MATCH (u:begin)-[:edge]->(v:end) SET u.i = 2, v.i = 1, u.j = 4, v.j = 3 return u, v $$) AS (u agtype, v agtype); SELECT * FROM cypher('cypher_set', $$MATCH (u:begin)-[:edge]->(v:end) return u, v $$) AS (u agtype, v agtype); END; SELECT * FROM cypher('cypher_set', $$MATCH (u:vertices) return u $$) AS (result agtype); SELECT * FROM cypher('cypher_set', $$MATCH (u:begin)-[:edge]->(v:end) return u, v $$) AS (u agtype, v agtype); -- test lists SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = [3, 'test', [1, 2, 3], {id: 1}, 1.0, 1.0::numeric] RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); -- test that lists get updated in paths SELECT * FROM cypher('cypher_set', $$MATCH p=(u:begin)-[:edge]->(v:end) SET u.i = [1, 2, 3] return u, p $$) AS (u agtype, p agtype); SELECT * FROM cypher('cypher_set', $$MATCH p=(u:begin)-[:edge]->(v:end) return u, p $$) AS (u agtype, p agtype); -- test empty lists SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = [] RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); -- test maps SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = {prop1: 3, prop2:'test', prop3: [1, 2, 3], prop4: {id: 1}, prop5: 1.0, prop6:1.0::numeric} RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); -- test maps in paths SELECT * FROM cypher('cypher_set', $$MATCH p=(u:begin)-[:edge]->(v:end) SET u.i = {prop1: 1, prop2: 2, prop3: 3} return u, p $$) AS (u agtype, p agtype); SELECT * FROM cypher('cypher_set', $$MATCH p=(u:begin)-[:edge]->(v:end) return u, p $$) AS (u agtype, p agtype); -- test empty maps SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = {} RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); -- -- Test entire property update -- SELECT * FROM create_graph('cypher_set_1'); SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Andy {name:'Andy', age:36, hungry:true}) $$) AS (a agtype); SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Peter {name:'Peter', age:34}) $$) AS (a agtype); SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Kevin {name:'Kevin', age:32, hungry:false}) $$) AS (a agtype); SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Matt {name:'Matt', city:'Toronto'}) $$) AS (a agtype); SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Juan {name:'Juan', role:'admin'}) $$) AS (a agtype); SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Robert {name:'Robert', role:'manager', city:'London'}) $$) AS (a agtype); SELECT * FROM cypher('cypher_set_1',$$ CREATE (a: VertexA {map: {a: 1, b: {c: 2, d: []}, c: [{d: -100, e: []}]}, list: [1, "string", [{a: []}, [[1, 2]]]], bool: true, num: -1.9::numeric, str: "string"})$$) as (a agtype); -- test copying properties between entities SELECT * FROM cypher('cypher_set_1', $$ MATCH (at {name: 'Andy'}), (pn {name: 'Peter'}) SET at = properties(pn) RETURN at, pn $$) AS (at agtype, pn agtype); SELECT * FROM cypher('cypher_set_1', $$ MATCH (at {name: 'Kevin'}), (pn {name: 'Matt'}) SET at = pn RETURN at, pn $$) AS (at agtype, pn agtype); -- test replacing all properties using a map and = SELECT * FROM cypher('cypher_set_1', $$ MATCH (m {name: 'Matt'}) SET m = {name: 'Peter Smith', position: 'Entrepreneur', city:NULL} RETURN m $$) AS (m agtype); -- test removing all properties using an empty map and = SELECT * FROM cypher('cypher_set_1', $$ MATCH (p {name: 'Juan'}) SET p = {} RETURN p $$) AS (p agtype); -- test assigning non-map to an entity SELECT * FROM cypher('cypher_set_1', $$ MATCH (p {name: 'Peter'}) SET p = "Peter" RETURN p $$) AS (p agtype); SELECT * FROM cypher('cypher_set_1', $$ MATCH (p {name: 'Peter'}) SET p = sqrt(4) RETURN p $$) AS (p agtype); -- test plus-equal -- expected: {name:'Rob', age:47, city:London} SELECT * FROM cypher('cypher_set_1', $$ MATCH (p {name: 'Robert'}) SET p += {name:'Rob', role:NULL, age:47} RETURN p $$) AS (p agtype); -- expected: no change SELECT * FROM cypher('cypher_set_1', $$ MATCH (p {name: 'Rob'}) SET p += {} RETURN p $$) AS (p agtype); -- test plus-equal with original properties having non-scalar values SELECT * FROM cypher('cypher_set_1', $$ MATCH (p {map: {}}) SET p += {json: {a: -1, b: ['a', -1, true], c: {d: 'string'}}} RETURN p $$) AS (p agtype); SELECT * FROM cypher('cypher_set_1', $$ MATCH (p: VertexA {map: {}}) SET p += {list_upd: [1, 2, 3, 4, 5]} RETURN p $$) AS (p agtype); SELECT * FROM cypher('cypher_set_1', $$ MATCH (p: VertexA) SET p += {vertex: {id: 281474976710659, label: "", properties: {a: 1, b: [1, 2, 3]}}::vertex} RETURN p $$) AS (p agtype); SELECT * FROM cypher('cypher_set_1', $$ MATCH (p {map: {}}) SET p += {} RETURN p $$) AS (p agtype); -- -- Check passing mismatched types with SET -- Issue 899 -- SELECT * FROM cypher('cypher_set_1', $$ CREATE (x) SET x.n0 = (true OR true) RETURN x $$) AS (p agtype); SELECT * FROM cypher('cypher_set_1', $$ CREATE (x) SET x.n0 = (true OR false), x.n1 = (false AND false), x.n2 = (false = false) RETURN x $$) AS (p agtype); -- -- Clean up -- DROP TABLE tbl; DROP FUNCTION set_test; SELECT drop_graph('cypher_set', true); SELECT drop_graph('cypher_set_1', true); -- age-PG16-v1.5.0-rc0/regress/sql/cypher_union.sql000066400000000000000000000064451454606241200213050ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher_union'); SELECT * FROM cypher('cypher_union', $$CREATE ()$$) as (a agtype); SELECT * FROM cypher('cypher_union', $$MATCH (n) RETURN n UNION MATCH (n) RETURN n$$) as (a agtype); SELECT * FROM cypher('cypher_union', $$MATCH (n) RETURN n UNION ALL MATCH (n) RETURN n$$) as (a agtype); SELECT * FROM cypher('cypher_union', $$MATCH (n) RETURN n UNION RETURN 1$$) as (a agtype); SELECT * FROM cypher('cypher_union', $$MATCH (n) RETURN n UNION RETURN NULL$$) as (a agtype); SELECT * FROM cypher('cypher_union', $$RETURN [1,2,3] UNION RETURN 1$$) as (a agtype); /*should return 1 row*/ SELECT * FROM cypher('cypher_union', $$RETURN NULL UNION RETURN NULL$$) AS (result agtype); /*should return 2 rows*/ SELECT * FROM cypher('cypher_union', $$RETURN NULL UNION ALL RETURN NULL$$) AS (result agtype); /* *multiple unions, precedence */ SELECT * FROM cypher('cypher_union', $$MATCH (n) RETURN n UNION MATCH (n) RETURN n UNION MATCH (n) RETURN n$$) AS (result agtype); /*should return triple*/ SELECT * FROM cypher('cypher_union', $$MATCH (n) RETURN n UNION ALL MATCH (n) RETURN n UNION ALL MATCH(n) RETURN n$$) AS (result agtype); /*should return single*/ SELECT * FROM cypher('cypher_union', $$MATCH (n) RETURN n UNION ALL MATCH (n) RETURN n UNION MATCH(n) RETURN n$$) AS (result agtype); /*should return just a pair*/ SELECT * FROM cypher('cypher_union', $$MATCH (n) RETURN n UNION MATCH (n) RETURN n UNION ALL MATCH(n) RETURN n$$) AS (result agtype); /*should return 3 null rows*/ SELECT * FROM cypher('cypher_union', $$RETURN NULL UNION ALL RETURN NULL UNION ALL RETURN NULL$$) AS (result agtype); /*should return 1 null row*/ SELECT * FROM cypher('cypher_union', $$RETURN NULL UNION ALL RETURN NULL UNION RETURN NULL$$) AS (result agtype); /*should return 2 null rows*/ SELECT * FROM cypher('cypher_union', $$RETURN NULL UNION RETURN NULL UNION ALL RETURN NULL$$) AS (result agtype); /* scoping */ SELECT * FROM cypher('cypher_union', $$MATCH (n) RETURN n UNION ALL MATCH (m) RETURN n$$) AS (result agtype); /* *UNION and UNION ALL, type casting */ SELECT * FROM cypher('cypher_union', $$RETURN 1.0::int UNION RETURN 1::float UNION ALL RETURN 2.0::float$$) AS (result agtype); SELECT * FROM cypher('cypher_union', $$RETURN 1.0::int UNION RETURN 1.0::float UNION ALL RETURN 1::int$$) AS (result agtype); SELECT * FROM cypher('cypher_union', $$RETURN 1.0::float UNION RETURN 1::int UNION RETURN 1::float$$) AS (result agtype); SELECT drop_graph('cypher_union', true); age-PG16-v1.5.0-rc0/regress/sql/cypher_unwind.sql000066400000000000000000000072661454606241200214630ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher_unwind'); -- Create nodes and relations SELECT * FROM cypher('cypher_unwind', $$ CREATE (n {name: 'node1', a: [1, 2, 3]}), (m {name: 'node2', a: [4, 5, 6]}), (o {name: 'node3', a: [7, 8, 9]}), (n)-[:KNOWS]->(m), (m)-[:KNOWS]->(o) $$) as (i agtype); SELECT * FROM cypher('cypher_unwind', $$ MATCH (n) RETURN n $$) as (i agtype); -- -- Test UNWIND clause -- SELECT * FROM cypher('cypher_unwind', $$ UNWIND [1, 2, 3] AS i RETURN i $$) as (i agtype); SELECT * FROM cypher('cypher_unwind', $$ MATCH (n) WITH n.a AS a UNWIND a AS i RETURN * $$) as (i agtype, j agtype); SELECT * FROM cypher('cypher_unwind', $$ WITH [[1, 2], [3, 4], 5] AS nested UNWIND nested AS x UNWIND x AS y RETURN y $$) as (i agtype); -- UNWIND vertices SELECT * FROM cypher('cypher_unwind', $$ MATCH p=(n)-[:KNOWS]->(m) UNWIND nodes(p) as node RETURN node $$) as (i agtype); SELECT * FROM cypher('cypher_unwind', $$ MATCH p=(n)-[:KNOWS]->(m) UNWIND nodes(p) as node RETURN node.name $$) as (i agtype); -- UNWIND edges SELECT * FROM cypher('cypher_unwind', $$ MATCH p=(n)-[:KNOWS]->(m) UNWIND relationships(p) as relation RETURN relation $$) as (i agtype); SELECT * FROM cypher('cypher_unwind', $$ MATCH p=(n)-[:KNOWS]->(m) UNWIND relationships(p) as relation RETURN type(relation) $$) as (i agtype); -- UNWIND paths (vle) SELECT * FROM cypher('cypher_unwind', $$ MATCH p=({name:'node1'})-[e:KNOWS*]->({name:'node3'}) UNWIND [p] as path RETURN path $$) as (i agtype); SELECT * FROM cypher('cypher_unwind', $$ MATCH p=({name:'node1'})-[e:KNOWS*]->({name:'node3'}) UNWIND [p] as path RETURN relationships(path) $$) as (i agtype); SELECT * FROM cypher('cypher_unwind', $$ MATCH p=({name:'node1'})-[e:KNOWS*]->({name:'node3'}) UNWIND [p] as path UNWIND relationships(path) as edge RETURN edge $$) as (i agtype); -- Unwind with SET clause SELECT * FROM cypher('cypher_unwind', $$ MATCH p=(n)-[:KNOWS]->(m) UNWIND nodes(p) as node SET node.type = 'vertex' $$) as (i agtype); SELECT * FROM cypher('cypher_unwind', $$ MATCH (n) RETURN n $$) as (i agtype); -- -- Issue 1302 -- SELECT create_graph('issue_1302'); SELECT * FROM cypher('cypher_unwind', $$ CREATE (agtype {name: 'node1', a: [1, 2, 3]}), (m {name: 'node2', a: [4, 5, 6]}), (o {name: 'node3', a: [7, 8, 9]}), (n)-[:KNOWS]->(m), (m)-[:KNOWS]->(o) $$) as (i agtype); SELECT * FROM cypher('cypher_unwind', $$ MATCH (n) WITH n.a AS a UNWIND a AS i RETURN * $$) as (i agtype, j agtype); SELECT * FROM cypher('cypher_unwind', $$ UNWIND NULL as i RETURN i $$) as (i agtype); -- -- Clean up -- SELECT drop_graph('cypher_unwind', true); SELECT drop_graph('issue_1302', true);age-PG16-v1.5.0-rc0/regress/sql/cypher_vle.sql000066400000000000000000000466231454606241200207450ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher_vle'); -- -- Create table to hold the start and end vertices to test the SRF -- CREATE TABLE start_and_end_points (start_vertex agtype, end_vertex agtype); -- Create a graph to test SELECT * FROM cypher('cypher_vle', $$CREATE (b:begin)-[:edge {name: 'main edge', number: 1, dangerous: {type: "all", level: "all"}}]->(u1:middle)-[:edge {name: 'main edge', number: 2, dangerous: {type: "all", level: "all"}, packages: [2,4,6]}]->(u2:middle)-[:edge {name: 'main edge', number: 3, dangerous: {type: "all", level: "all"}}]->(u3:middle)-[:edge {name: 'main edge', number: 4, dangerous: {type: "all", level: "all"}}]->(e:end), (u1)-[:self_loop {name: 'self loop', number: 1, dangerous: {type: "all", level: "all"}}]->(u1), (e)-[:self_loop {name: 'self loop', number: 2, dangerous: {type: "all", level: "all"}}]->(e), (b)-[:alternate_edge {name: 'alternate edge', number: 1, packages: [2,4,6], dangerous: {type: "poisons", level: "all"}}]->(u1), (u2)-[:alternate_edge {name: 'alternate edge', number: 2, packages: [2,4,6], dangerous: {type: "poisons", level: "all"}}]->(u3), (u3)-[:alternate_edge {name: 'alternate edge', number: 3, packages: [2,4,6], dangerous: {type: "poisons", level: "all"}}]->(e), (u2)-[:bypass_edge {name: 'bypass edge', number: 1, packages: [1,3,5,7]}]->(e), (e)-[:alternate_edge {name: 'backup edge', number: 1, packages: [1,3,5,7]}]->(u3), (u3)-[:alternate_edge {name: 'backup edge', number: 2, packages: [1,3,5,7]}]->(u2), (u2)-[:bypass_edge {name: 'bypass edge', number: 2, packages: [1,3,5,7], dangerous: {type: "poisons", level: "all"}}]->(b) RETURN b, e $$) AS (b agtype, e agtype); -- Insert start and end points for graph INSERT INTO start_and_end_points (SELECT * FROM cypher('cypher_vle', $$MATCH (b:begin)-[:edge]->()-[:edge]->()-[:edge]->()-[:edge]->(e:end) RETURN b, e $$) AS (b agtype, e agtype)); -- Display our points SELECT * FROM start_and_end_points; -- Count the total paths from left (start) to right (end) -[]-> should be 400 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {}}::edge'::agtype, '1'::agtype, 'null'::agtype, '1'::agtype) group by ctid; -- Count the total paths from right (end) to left (start) <-[]- should be 2 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {}}::edge'::agtype, '1'::agtype, 'null'::agtype, '-1'::agtype) group by ctid; -- Count the total paths undirectional -[]- should be 7092 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {}}::edge'::agtype, '1'::agtype, 'null'::agtype, '0'::agtype) group by ctid; -- All paths of length 3 -[]-> should be 2 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {}}::edge'::agtype, '3'::agtype, '3'::agtype, '1'::agtype); -- All paths of length 3 <-[]- should be 1 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {}}::edge'::agtype, '3'::agtype, '3'::agtype, '-1'::agtype); -- All paths of length 3 -[]- should be 12 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {}}::edge'::agtype, '3'::agtype, '3'::agtype, '0'::agtype); -- Test edge label matching - should match 1 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "edge", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {}}::edge'::agtype, '1'::agtype, 'null'::agtype, '1'::agtype); -- Test scalar property matching - should match 1 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {"name": "main edge"}}::edge'::agtype, '1'::agtype, 'null'::agtype, '1'::agtype); -- Test object property matching - should match 4 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {"dangerous": {"type": "all", "level": "all"}}}::edge'::agtype, '1'::agtype, 'null'::agtype, '1'::agtype); -- Test array property matching - should match 2 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {"packages": [1,3,5,7]}}::edge'::agtype, '1'::agtype, 'null'::agtype, '0'::agtype); -- Test array property matching - should match 1 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {"packages": [2,4,6]}}::edge'::agtype, '1'::agtype, 'null'::agtype, '0'::agtype); -- Test object property matching - should match 1 SELECT count(edges) FROM start_and_end_points, age_vle( '"cypher_vle"'::agtype, start_vertex, end_vertex, '{"id": 1111111111111111, "label": "", "end_id": 2222222222222222, "start_id": 333333333333333, "properties": {"dangerous": {"type": "poisons", "level": "all"}}}::edge'::agtype, '1'::agtype, 'null'::agtype, '0'::agtype); -- Test the VLE match integration -- Each should find 400 SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[*]->(v:end) RETURN count(*) $$) AS (e agtype); SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[*..]->(v:end) RETURN count(*) $$) AS (e agtype); SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[*0..]->(v:end) RETURN count(*) $$) AS (e agtype); SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[*1..]->(v:end) RETURN count(*) $$) AS (e agtype); SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[*1..200]->(v:end) RETURN count(*) $$) AS (e agtype); -- Each should find 2 SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)<-[*]-(v:end) RETURN count(*) $$) AS (e agtype); SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)<-[*..]-(v:end) RETURN count(*) $$) AS (e agtype); SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)<-[*0..]-(v:end) RETURN count(*) $$) AS (e agtype); SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)<-[*1..]-(v:end) RETURN count(*) $$) AS (e agtype); SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)<-[*1..200]-(v:end) RETURN count(*) $$) AS (e agtype); -- Each should find 7092 SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[*]-(v:end) RETURN count(*) $$) AS (e agtype); SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[*..]-(v:end) RETURN count(*) $$) AS (e agtype); SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[*0..]-(v:end) RETURN count(*) $$) AS (e agtype); SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[*1..]-(v:end) RETURN count(*) $$) AS (e agtype); SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[*1..200]-(v:end) RETURN count(*) $$) AS (e agtype); -- Each should find 1 SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[:edge*]-(v:end) RETURN count(*) $$) AS (e agtype); SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[:edge* {name: "main edge"}]-(v:end) RETURN count(*) $$) AS (e agtype); SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[* {name: "main edge"}]-(v:end) RETURN count(*) $$) AS (e agtype); -- Each should find 1 SELECT * FROM cypher('cypher_vle', $$MATCH ()<-[*4..4 {name: "main edge"}]-() RETURN count(*) $$) AS (e agtype); SELECT * FROM cypher('cypher_vle', $$MATCH (u)<-[*4..4 {name: "main edge"}]-() RETURN count(*) $$) AS (e agtype); SELECT * FROM cypher('cypher_vle', $$MATCH ()<-[*4..4 {name: "main edge"}]-(v) RETURN count(*) $$) AS (e agtype); -- Each should find 2922 SELECT * FROM cypher('cypher_vle', $$MATCH ()-[*]->() RETURN count(*) $$) AS (e agtype); SELECT * FROM cypher('cypher_vle', $$MATCH (u)-[*]->() RETURN count(*) $$) AS (e agtype); SELECT * FROM cypher('cypher_vle', $$MATCH ()-[*]->(v) RETURN count(*) $$) AS (e agtype); -- Should find 2 SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)<-[e*]-(v:end) RETURN e $$) AS (e agtype); -- Should find 5 SELECT * FROM cypher('cypher_vle', $$MATCH p=(:begin)<-[*1..1]-()-[]-() RETURN p ORDER BY p $$) AS (e agtype); -- Should find 2922 SELECT * FROM cypher('cypher_vle', $$MATCH p=()-[*]->(v) RETURN count(*) $$) AS (e agtype); -- Should find 2 SELECT * FROM cypher('cypher_vle', $$MATCH p=(u:begin)-[*3..3]->(v:end) RETURN p $$) AS (e agtype); -- Should find 12 SELECT * FROM cypher('cypher_vle', $$MATCH p=(u:begin)-[*3..3]-(v:end) RETURN p $$) AS (e agtype); -- Each should find 2 SELECT * FROM cypher('cypher_vle', $$MATCH p=(u:begin)<-[*]-(v:end) RETURN p $$) AS (e agtype); SELECT * FROM cypher('cypher_vle', $$MATCH p=(u:begin)<-[e*]-(v:end) RETURN p $$) AS (e agtype); SELECT * FROM cypher('cypher_vle', $$MATCH p=(u:begin)<-[e*]-(v:end) RETURN e $$) AS (e agtype); SELECT * FROM cypher('cypher_vle', $$MATCH p=(:begin)<-[*]-()<-[]-(:end) RETURN p $$) AS (e agtype); -- Each should return 31 SELECT count(*) FROM cypher('cypher_vle', $$ MATCH ()-[e1]->(v)-[e2]->() RETURN e1,e2 $$) AS (e1 agtype, e2 agtype); SELECT count(*) FROM cypher('cypher_vle', $$ MATCH ()-[e1*1..1]->(v)-[e2*1..1]->() RETURN e1, e2 $$) AS (e1 agtype, e2 agtype); SELECT count(*) FROM cypher('cypher_vle', $$ MATCH (v)-[e1*1..1]->()-[e2*1..1]->() RETURN e1, e2 $$) AS (e1 agtype, e2 agtype); SELECT count(*) FROM cypher('cypher_vle', $$ MATCH ()-[e1]->(v)-[e2*1..1]->() RETURN e1, e2 $$) AS (e1 agtype, e2 agtype); SELECT count(*) FROM cypher('cypher_vle', $$ MATCH ()-[e1]->()-[e2*1..1]->() RETURN e1, e2 $$) AS (e1 agtype, e2 agtype); SELECT count(*) FROM cypher('cypher_vle', $$ MATCH ()-[e1*1..1]->(v)-[e2]->() RETURN e1, e2 $$) AS (e1 agtype, e2 agtype); SELECT count(*) FROM cypher('cypher_vle', $$ MATCH ()-[e1*1..1]->()-[e2]->() RETURN e1, e2 $$) AS (e1 agtype, e2 agtype); SELECT count(*) FROM cypher('cypher_vle', $$ MATCH (a)-[e1]->(a)-[e2*1..1]->() RETURN e1, e2 $$) AS (e1 agtype, e2 agtype); SELECT count(*) FROM cypher('cypher_vle', $$ MATCH (a) MATCH (a)-[e1*1..1]->(v) RETURN e1 $$) AS (e1 agtype); SELECT count(*) FROM cypher('cypher_vle', $$ MATCH (a) MATCH ()-[e1*1..1]->(a) RETURN e1 $$) AS (e1 agtype); SELECT count(*) FROM cypher('cypher_vle', $$ MATCH (a)-[e*1..1]->() RETURN a, e $$) AS (e1 agtype, e2 agtype); -- Should return 1 path SELECT * FROM cypher('cypher_vle', $$ MATCH p=()<-[e1*]-(:end)-[e2*]->(:begin) RETURN p $$) AS (result agtype); -- Each should return 3 SELECT * FROM cypher('cypher_vle', $$MATCH (u:begin)-[e*0..1]->(v) RETURN id(u), e, id(v) $$) AS (u agtype, e agtype, v agtype); SELECT * FROM cypher('cypher_vle', $$MATCH p=(u:begin)-[e*0..1]->(v) RETURN p $$) AS (p agtype); -- Each should return 5 SELECT * FROM cypher('cypher_vle', $$MATCH (u)-[e*0..0]->(v) RETURN id(u), e, id(v) $$) AS (u agtype, e agtype, v agtype); SELECT * FROM cypher('cypher_vle', $$MATCH p=(u)-[e*0..0]->(v) RETURN id(u), p, id(v) $$) AS (u agtype, p agtype, v agtype); -- Each should return 13 and will be the same SELECT * FROM cypher('cypher_vle', $$MATCH p=()-[*0..0]->()-[]->() RETURN p $$) AS (p agtype); SELECT * FROM cypher('cypher_vle', $$MATCH p=()-[]->()-[*0..0]->() RETURN p $$) AS (p agtype); -- -- Test VLE inside of a BEGIN/COMMIT block -- BEGIN; SELECT create_graph('mygraph'); /* should create 1 path with 1 edge */ SELECT * FROM cypher('mygraph', $$ CREATE (a:Node {name: 'a'})-[:Edge]->(c:Node {name: 'c'}) $$) AS (g1 agtype); /* should return 1 path with 1 edge */ SELECT * FROM cypher('mygraph', $$ MATCH p = ()-[:Edge*]->() RETURN p $$) AS (g2 agtype); /* should delete the original path and replace it with a path with 2 edges */ SELECT * FROM cypher('mygraph', $$ MATCH (a:Node {name: 'a'})-[e:Edge]->(c:Node {name: 'c'}) DELETE e CREATE (a)-[:Edge]->(:Node {name: 'b'})-[:Edge]->(c) $$) AS (g3 agtype); /* should find 2 paths with 1 edge */ SELECT * FROM cypher('mygraph', $$ MATCH p = ()-[:Edge]->() RETURN p $$) AS (g4 agtype); /* should return 3 paths, 2 with 1 edge, 1 with 2 edges */ SELECT * FROM cypher('mygraph', $$ MATCH p = ()-[:Edge*]->() RETURN p $$) AS (g5 agtype); SELECT drop_graph('mygraph', true); COMMIT; -- -- Test VLE inside procedures -- SELECT create_graph('mygraph'); SELECT create_vlabel('mygraph', 'head'); SELECT create_vlabel('mygraph', 'tail'); SELECT create_vlabel('mygraph', 'node'); SELECT create_elabel('mygraph', 'next'); CREATE OR REPLACE FUNCTION create_list(list_name text) RETURNS void LANGUAGE 'plpgsql' AS $$ DECLARE ag_param agtype; BEGIN ag_param = FORMAT('{"list_name": "%s"}', $1)::agtype; PERFORM * FROM cypher('mygraph', $CYPHER$ MERGE (:head {name: $list_name})-[:next]->(:tail {name: $list_name}) $CYPHER$, ag_param) AS (a agtype); END $$; CREATE OR REPLACE FUNCTION prepend_node(list_name text, node_content text) RETURNS void LANGUAGE 'plpgsql' AS $$ DECLARE ag_param agtype; BEGIN ag_param = FORMAT('{"list_name": "%s", "node_content": "%s"}', $1, $2)::agtype; PERFORM * FROM cypher('mygraph', $CYPHER$ MATCH (h:head {name: $list_name})-[e:next]->(v) DELETE e CREATE (h)-[:next]->(:node {content: $node_content})-[:next]->(v) $CYPHER$, ag_param) AS (a agtype); END $$; CREATE OR REPLACE FUNCTION show_list_use_vle(list_name text) RETURNS TABLE(node agtype) LANGUAGE 'plpgsql' AS $$ DECLARE ag_param agtype; BEGIN ag_param = FORMAT('{"list_name": "%s"}', $1)::agtype; RETURN QUERY SELECT * FROM cypher('mygraph', $CYPHER$ MATCH (h:head {name: $list_name})-[e:next*]->(v:node) RETURN v $CYPHER$, ag_param) AS (node agtype); END $$; -- create a list SELECT create_list('list01'); -- prepend a node 'a' -- should find 1 row SELECT prepend_node('list01', 'a'); SELECT * FROM show_list_use_vle('list01'); -- prepend a node 'b' -- should find 2 rows SELECT prepend_node('list01', 'b'); SELECT * FROM show_list_use_vle('list01'); -- prepend a node 'c' -- should find 3 rows SELECT prepend_node('list01', 'c'); SELECT * FROM show_list_use_vle('list01'); DROP FUNCTION show_list_use_vle; SELECT drop_graph('mygraph', true); -- invalid reuse of VLE SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p]-()-[p *]-() RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-()-[p]-() RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_vle', $$ MATCH (p)-[p *]-() RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-(p) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_vle', $$ MATCH p=()-[p *]-() RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-()-[p *]-() RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p]-() MATCH ()-[p *]-() RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH ()-[p]-() RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH ()-[p *]-() RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_vle', $$ MATCH (p) MATCH ()-[p *]-() RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH (p) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_vle', $$ MATCH p=() MATCH ()-[p *]-() RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH p=() RETURN p $$)as (p agtype); -- issue 1033, agtype_access_operator not working on containerized edges SELECT create_graph('access'); SELECT * FROM cypher('access',$$ CREATE ()-[:knows]->() $$) as (results agtype); SELECT * FROM cypher('access',$$ CREATE ()-[:knows]->()-[:knows]->()$$) as (results agtype); SELECT * FROM cypher('access',$$ CREATE ()-[:knows {id:0}]->()-[:knows {id: 1}]->() $$) as (results agtype); SELECT * FROM cypher('access',$$ CREATE ()-[:knows {id:2, arry:[0,1,2,3,{name: "joe"}]}]->()-[:knows {id: 3, arry:[1,3,{name:"john", stats: {age: 1000}}]}]->() $$) as (results agtype); SELECT * FROM cypher('access', $$ MATCH (u)-[e*]->(v) RETURN e $$)as (edges agtype); SELECT * FROM cypher('access', $$ MATCH (u)-[e*2..2]->(v) RETURN e $$)as (edges agtype); SELECT * FROM cypher('access',$$ MATCH ()-[e*2..2]->() RETURN properties(e[0]) $$) as (prop_first_edge agtype); SELECT * FROM cypher('access',$$ MATCH ()-[e*2..2]->() RETURN e[0].id $$) as (results agtype); SELECT * FROM cypher('access',$$ MATCH ()-[e*2..2]->() RETURN e[0].arry[2] $$) as (results agtype); SELECT * FROM cypher('access',$$ MATCH ()-[e*2..2]->() RETURN properties(e[1]) $$) as (prop_second_edge agtype); SELECT * FROM cypher('access',$$ MATCH ()-[e*2..2]->() RETURN e[1].id $$) as (results agtype); SELECT * FROM cypher('access',$$ MATCH ()-[e*2..2]->() RETURN e[1].arry[2] $$) as (results agtype); SELECT * FROM cypher('access',$$ MATCH ()-[e*2..2]->() RETURN e[1].arry[2].stats $$) as (results agtype); SELECT * FROM cypher('access',$$ MATCH ()-[e*2..2]->() RETURN properties(e[2]) $$) as (prop_third_edge agtype); SELECT * FROM cypher('access',$$ MATCH ()-[e*]->() RETURN properties(e[0]), properties(e[1]) $$) as (prop_1st agtype, prop_2nd agtype); SELECT * FROM cypher('access',$$ MATCH ()-[e*]->() RETURN e[0].id, e[1].id $$) as (results_1st agtype, results_2nd agtype); SELECT * FROM cypher('access',$$ MATCH ()-[e*]->() RETURN e[0].arry, e[1].arry $$) as (results_1st agtype, results_2nd agtype); SELECT * FROM cypher('access',$$ MATCH ()-[e*]->() RETURN e[0].arry[2], e[1].arry[2] $$) as (results_1st agtype, results_2nd agtype); SELECT drop_graph('access', true); -- issue 1043 SELECT create_graph('issue_1043'); SELECT * FROM cypher('issue_1043', $$ CREATE (n)-[:KNOWS {n:'hello'}]->({n:'hello'}) $$) as (a agtype); SELECT * FROM cypher('issue_1043', $$ MATCH (x)<-[y *]-(),({n:y[0].n}) RETURN x $$) as (a agtype); SELECT * FROM cypher('issue_1043', $$ CREATE (n)-[:KNOWS {n:'hello'}]->({n:'hello'}) $$) as (a agtype); SELECT * FROM cypher('issue_1043', $$ MATCH (x)<-[y *]-(),({n:y[0].n}) RETURN x $$) as (a agtype); SELECT drop_graph('issue_1043', true); -- -- Clean up -- DROP TABLE start_and_end_points; SELECT drop_graph('cypher_vle', true); -- -- End -- age-PG16-v1.5.0-rc0/regress/sql/cypher_with.sql000066400000000000000000000131721454606241200211230ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; -- -- Load data -- SELECT create_graph('cypher_with'); SELECT * FROM cypher('cypher_with', $$ CREATE (andres {name : 'Andres', age : 36}), (caesar {name : 'Caesar', age : 25}), (bossman {name : 'Bossman', age : 55}), (david {name : 'David', age : 35}), (george {name : 'George', age : 37}), (andres)-[:BLOCKS]->(caesar), (andres)-[:KNOWS]->(bossman), (caesar)-[:KNOWS]->(george), (bossman)-[:BLOCKS]->(david), (bossman)-[:KNOWS]->(george), (david)-[:KNOWS]->(andres) $$) as (a agtype); -- -- Test WITH clause -- SELECT * FROM cypher('cypher_with', $$ MATCH (n)-[e]->(m) WITH n,e,m RETURN n,e,m $$) AS (N1 agtype, edge agtype, N2 agtype); -- WITH/AS SELECT * FROM cypher('cypher_with', $$ MATCH (n)-[e]->(m) WITH n.name AS n1, e as edge, m.name as n2 RETURN n1,label(edge),n2 $$) AS (start_node agtype,edge agtype, end_node agtype); SELECT * FROM cypher('cypher_with',$$ MATCH (person)-[r]->(otherPerson) WITH *, type(r) AS connectionType RETURN person.name, connectionType, otherPerson.name $$) AS (start_node agtype, connection agtype, end_node agtype); SELECT * FROM cypher('cypher_with', $$ WITH true AS b RETURN b $$) AS (b bool); -- WITH/WHERE SELECT * FROM cypher('cypher_with', $$ MATCH (george {name: 'George'})<-[]-(otherPerson) WITH otherPerson, toUpper(otherPerson.name) AS upperCaseName WHERE upperCaseName STARTS WITH 'C' RETURN otherPerson.name $$) as (name agtype); SELECT * FROM cypher('cypher_with', $$ MATCH (david {name: 'David'})-[]-(otherPerson)-[]->() WITH otherPerson, count(*) AS foaf WHERE foaf > 1 RETURN otherPerson.name $$) as (name agtype); SELECT * FROM cypher('cypher_with', $$ MATCH p = (m)-[*1..2]->(b) WITH p, length(p) AS path_length WHERE path_length > 1 RETURN p $$) AS (pattern agtype); -- MATCH/WHERE with WITH/WHERE SELECT * FROM cypher('cypher_with', $$ MATCH (m)-[e]->(b) WHERE label(e) = 'KNOWS' WITH * WHERE m.name = 'Andres' RETURN m.name,label(e),b.name $$) AS (N1 agtype, edge agtype, N2 agtype); -- WITH/ORDER BY SELECT * FROM cypher('cypher_with', $$ MATCH (n) WITH n ORDER BY id(n) RETURN n $$) as (name agtype); -- WITH/ORDER BY/DESC SELECT * FROM cypher('cypher_with', $$ MATCH (n) WITH n ORDER BY n.name DESC LIMIT 3 RETURN collect(n.name) $$) as (names agtype); SELECT * FROM cypher('cypher_with', $$ MATCH (n {name: 'Andres'})-[]-(m) WITH m ORDER BY m.name DESC LIMIT 1 MATCH (m)-[]-(o) RETURN o.name ORDER BY o.name $$) as (name agtype); -- multiple WITH clauses SELECT * FROM cypher('cypher_with', $$ MATCH (n)-[e]->(m) WITH n, e, m WHERE label(e) = 'KNOWS' WITH n.name as n1, label(e) as edge, m.name as n2 WHERE n1 = 'Andres' RETURN n1,edge,n2 $$) AS (N1 agtype, edge agtype, N2 agtype); SELECT * FROM cypher('cypher_with', $$ UNWIND [1, 2, 3, 4, 5, 6] AS x WITH x WHERE x > 2 WITH x LIMIT 5 RETURN x $$) as (name agtype); SELECT * FROM cypher('cypher_with', $$ MATCH (m)-[]->(b) WITH m,b ORDER BY id(m) DESC LIMIT 5 WITH m as start_node, b as end_node WHERE end_node.name = 'George' RETURN id(start_node),start_node.name,id(end_node),end_node.name $$) AS (id1 agtype, name1 agtype, id2 agtype, name2 agtype); -- Expression item must be aliased. SELECT * FROM cypher('cypher_with', $$ WITH 1 + 1 RETURN i $$) AS (i int); SELECT * FROM cypher('cypher_with', $$ MATCH (m)-[]->(b) WITH id(m) RETURN m $$) AS (id agtype); -- Reference undefined variable in WITH clause (should error out) SELECT count(*) FROM cypher('cypher_with', $$ MATCH (m)-[]->(b) WITH m RETURN m,b $$) AS (a agtype, b agtype); SELECT * FROM cypher('cypher_with', $$ MATCH (m)-[]->(b) WITH m AS start_node,b AS end_node WHERE start_node.name = 'Andres' WITH start_node WHERE start_node.name = 'George' RETURN id(start_node),end_node.name $$) AS (id agtype, node agtype); -- Clean up SELECT drop_graph('cypher_with', true); -- Issue 329 (should error out) SELECT create_graph('graph'); SELECT * FROM cypher('graph', $$ CREATE (a:A)-[:incs]->(:C), (a)-[:incs]->(:C) RETURN a $$) AS (n agtype); SELECT * FROM cypher('graph', $$ MATCH (a:A) WHERE ID(a)=0 WITH a OPTIONAL MATCH (a)-[:incs]->(c)-[d:incs]-() WITH a,c,COUNT(d) AS deps WHERE deps<=1 RETURN c,d $$) AS (n agtype, d agtype); -- Issue 396 (should error out) SELECT * FROM cypher('graph',$$ CREATE (v),(u),(w), (v)-[:hasFriend]->(u), (u)-[:hasFriend]->(w) $$) as (a agtype); SELECT * FROM cypher('graph',$$ MATCH p=(v)-[*1..2]->(u) WITH p,length(p) AS path_length RETURN v,path_length $$) as (a agtype,b agtype); -- Clean up SELECT drop_graph('graph', true); -- -- End of test -- age-PG16-v1.5.0-rc0/regress/sql/drop.sql000066400000000000000000000042211454606241200175350ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('drop'); DROP EXTENSION age; SELECT nspname FROM pg_catalog.pg_namespace WHERE nspname = 'drop'; SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = 'ag_catalog'; -- Recreate the extension and validate we can recreate a graph CREATE EXTENSION age; SELECT create_graph('drop'); -- Create a schema that uses the agtype, so we can't just drop age. CREATE SCHEMA other_schema; CREATE TABLE other_schema.tbl (id agtype); -- Should Fail because agtype can't be dropped DROP EXTENSION age; -- Check the graph still exist, because the DROP command failed SELECT nspname FROM pg_catalog.pg_namespace WHERE nspname = 'drop'; -- Should succeed, delete the 'drop' schema and leave 'other_schema' DROP EXTENSION age CASCADE; -- 'other_schema' should exist, 'drop' should be deleted SELECT nspname FROM pg_catalog.pg_namespace WHERE nspname IN ('other_schema', 'drop'); -- issue 1305 CREATE EXTENSION age; LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('issue_1305'); SELECT create_vlabel('issue_1305', 'n'); SELECT create_elabel('issue_1305', 'r'); SELECT drop_label('issue_1305', 'r', false); SELECT drop_label('issue_1305', 'r'); SELECT drop_label('issue_1305', 'n', false); SELECT drop_label('issue_1305', 'n'); SELECT * FROM drop_graph('issue_1305', true); -- END DROP EXTENSION age CASCADE; age-PG16-v1.5.0-rc0/regress/sql/expr.sql000066400000000000000000003731021454606241200175560ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ SET extra_float_digits = 0; LOAD 'age'; SET search_path TO ag_catalog; SELECT * FROM create_graph('expr'); -- -- map literal -- -- empty map SELECT * FROM cypher('expr', $$RETURN {}$$) AS r(c agtype); -- map of scalar values SELECT * FROM cypher('expr', $$ RETURN {s: 's', i: 1, f: 1.0, b: true, z: null} $$) AS r(c agtype); -- nested maps SELECT * FROM cypher('expr', $$ RETURN {s: {s: 's'}, t: {i: 1, e: {f: 1.0}, s: {a: {b: true}}}, z: null} $$) AS r(c agtype); -- -- list literal -- -- empty list SELECT * FROM cypher('expr', $$RETURN []$$) AS r(c agtype); -- list of scalar values SELECT * FROM cypher('expr', $$ RETURN ['str', 1, 1.0, true, null] $$) AS r(c agtype); -- nested lists SELECT * FROM cypher('expr', $$ RETURN [['str'], [1, [1.0], [[true]]], null] $$) AS r(c agtype); -- -- parameter -- PREPARE cypher_parameter(agtype) AS SELECT * FROM cypher('expr', $$ RETURN $var $$, $1) AS t(i agtype); EXECUTE cypher_parameter('{"var": 1}'); PREPARE cypher_parameter_object(agtype) AS SELECT * FROM cypher('expr', $$ RETURN $var.innervar $$, $1) AS t(i agtype); EXECUTE cypher_parameter_object('{"var": {"innervar": 1}}'); PREPARE cypher_parameter_array(agtype) AS SELECT * FROM cypher('expr', $$ RETURN $var[$indexvar] $$, $1) AS t(i agtype); EXECUTE cypher_parameter_array('{"var": [1, 2, 3], "indexvar": 1}'); -- missing parameter PREPARE cypher_parameter_missing_argument(agtype) AS SELECT * FROM cypher('expr', $$ RETURN $var, $missingvar $$, $1) AS t(i agtype, j agtype); EXECUTE cypher_parameter_missing_argument('{"var": 1}'); -- invalid parameter PREPARE cypher_parameter_invalid_argument(agtype) AS SELECT * FROM cypher('expr', $$ RETURN $var $$, $1) AS t(i agtype); EXECUTE cypher_parameter_invalid_argument('[1]'); -- missing parameters argument PREPARE cypher_missing_params_argument(int) AS SELECT $1, * FROM cypher('expr', $$ RETURN $var $$) AS t(i agtype); SELECT * FROM cypher('expr', $$ RETURN $var $$) AS t(i agtype); --list concatenation SELECT * FROM cypher('expr', $$RETURN ['str', 1, 1.0] + [true, null]$$) AS r(c agtype); --list IN (contains), should all be true SELECT * FROM cypher('expr', $$RETURN 1 IN ['str', 1, 1.0, true, null]$$) AS r(c boolean); SELECT * FROM cypher('expr', $$RETURN 'str' IN ['str', 1, 1.0, true, null]$$) AS r(c boolean); SELECT * FROM cypher('expr', $$RETURN 1.0 IN ['str', 1, 1.0, true, null]$$) AS r(c boolean); SELECT * FROM cypher('expr', $$RETURN true IN ['str', 1, 1.0, true, null]$$) AS r(c boolean); SELECT * FROM cypher('expr', $$RETURN [1,3,5,[2,4,6]] IN ['str', 1, 1.0, true, null, [1,3,5,[2,4,6]]]$$) AS r(c boolean); SELECT * FROM cypher('expr', $$RETURN {bool: true, int: 1} IN ['str', 1, 1.0, true, null, {bool: true, int: 1}, [1,3,5,[2,4,6]]]$$) AS r(c boolean); SELECT * FROM cypher('expr', $$RETURN 1 IN [1.0, [NULL]]$$) AS r(c boolean); SELECT * FROM cypher('expr', $$RETURN [NULL] IN [1.0, [NULL]]$$) AS r(c boolean); -- should return SQL null, nothing SELECT * FROM cypher('expr', $$RETURN true IN NULL $$) AS r(c boolean); SELECT * FROM cypher('expr', $$RETURN null IN ['str', 1, 1.0, true, null]$$) AS r(c boolean); SELECT * FROM cypher('expr', $$RETURN null IN ['str', 1, 1.0, true]$$) AS r(c boolean); SELECT * FROM cypher('expr', $$RETURN 'str' IN null $$) AS r(c boolean); SELECT * FROM cypher('expr', $$RETURN 0 IN ['str', 1, 1.0, true, null]$$) AS r(c boolean); SELECT * FROM cypher('expr', $$RETURN 1.1 IN ['str', 1, 1.0, true, null]$$) AS r(c boolean); SELECT * FROM cypher('expr', $$RETURN 'Str' IN ['str', 1, 1.0, true, null]$$) AS r(c boolean); SELECT * FROM cypher('expr', $$RETURN [1,3,5,[2,4,5]] IN ['str', 1, 1.0, true, null, [1,3,5,[2,4,6]]]$$) AS r(c boolean); SELECT * FROM cypher('expr', $$RETURN {bool: true, int: 2} IN ['str', 1, 1.0, true, null, {bool: true, int: 1}, [1,3,5,[2,4,6]]]$$) AS r(c boolean); -- should return false SELECT * FROM cypher('expr', $$RETURN 'str' IN ['StR', 1, true]$$) AS r(c boolean); SELECT * FROM cypher('expr', $$RETURN 2 IN ['StR', 1, true]$$) AS r(c boolean); SELECT * FROM cypher('expr', $$RETURN false IN ['StR', 1, true]$$) AS r(c boolean); SELECT * FROM cypher('expr', $$RETURN [1,2] IN ['StR', 1, 2, true]$$) AS r(c boolean); SELECT * FROM cypher('expr', $$RETURN 1 in [[1]]$$) AS r(c boolean); SELECT * FROM cypher('expr', $$RETURN 1 IN [[null]]$$) AS r(c boolean); -- should error - ERROR: object of IN must be a list SELECT * FROM cypher('expr', $$RETURN null IN 'str' $$) AS r(c boolean); SELECT * FROM cypher('expr', $$RETURN 'str' IN 'str' $$) AS r(c boolean); -- list access SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][0]$$) AS r(c agtype); SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][5]$$) AS r(c agtype); SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][10]$$) AS r(c agtype); SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][-1]$$) AS r(c agtype); SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][-3]$$) AS r(c agtype); -- should return null SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][11]$$) AS r(c agtype); -- list slice SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][0..]$$) AS r(c agtype); SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][..11]$$) AS r(c agtype); SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][0..0]$$) AS r(c agtype); SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][10..10]$$) AS r(c agtype); SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][0..1]$$) AS r(c agtype); SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][9..10]$$) AS r(c agtype); SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][-1..]$$) AS r(c agtype); SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][-1..11]$$) AS r(c agtype); SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][-3..11]$$) AS r(c agtype); -- this one should return null SELECT * FROM cypher('expr', $$RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][-1..10]$$) AS r(c agtype); SELECT agtype_access_slice('[0]'::agtype, 'null'::agtype, '1'::agtype); SELECT agtype_access_slice('[0]'::agtype, '0'::agtype, 'null'::agtype); -- should error - ERROR: slice must access a list SELECT * from cypher('expr', $$RETURN 0[0..1]$$) as r(a agtype); SELECT * from cypher('expr', $$RETURN 0[[0]..[1]]$$) as r(a agtype); -- should return nothing SELECT * from cypher('expr', $$RETURN [0][0..-2147483649]$$) as r(a agtype); -- access and slice operators nested SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[0] $$) as (results agtype); SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[2] $$) as (results agtype); SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-1] $$) as (results agtype); SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[2][-2] $$) as (results agtype); SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[2][-2..] $$) as (results agtype); SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-2..] $$) as (results agtype); SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-2..][-1..][-1..] $$) as (results agtype); SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-2..][-1..][0] $$) as (results agtype); SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-2..][-1..][-1] $$) as (results agtype); SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-2..][-2..-1] $$) as (results agtype); SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-4..-2] $$) as (results agtype); SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-4..-2][-2] $$) as (results agtype); SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-4..-2][0] $$) as (results agtype); SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-4..-2][-2][-2..] $$) as (results agtype); SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-4..-2][-2][-2..][0] $$) as (results agtype); -- empty list SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-2..][-1..][-2..-2] $$) as (results agtype); -- should return null SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[2][3] $$) as (results agtype); SELECT * from cypher('expr', $$ WITH [0, 1, [2, 3, 4], 5, [6, 7, 8], 9] as l RETURN l[-2..][-1..][-2] $$) as (results agtype); -- -- String operators -- -- String LHS + String RHS SELECT * FROM cypher('expr', $$RETURN 'str' + 'str'$$) AS r(c agtype); -- String LHS + Integer RHS SELECT * FROM cypher('expr', $$RETURN 'str' + 1$$) AS r(c agtype); -- String LHS + Float RHS SELECT * FROM cypher('expr', $$RETURN 'str' + 1.0$$) AS r(c agtype); -- Integer LHS + String LHS SELECT * FROM cypher('expr', $$RETURN 1 + 'str'$$) AS r(c agtype); -- Float LHS + String RHS SELECT * FROM cypher('expr', $$RETURN 1.0 + 'str'$$) AS r(c agtype); -- -- Test transform logic for operators -- SELECT * FROM cypher('expr', $$ RETURN (-(3 * 2 - 4.0) ^ ((10 / 5) + 1)) % -3 $$) AS r(result agtype); -- -- Test transform logic for comparison operators -- SELECT * FROM cypher('expr', $$ RETURN 1 = 1.0 $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN 1 > -1.0 $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN -1.0 < 1 $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN "aaa" < "z" $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN "z" > "aaa" $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN false = false $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN ("string" < true) $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN true < 1 $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN (1 + 1.0) = (7 % 5) $$) AS r(result boolean); -- -- Test chained comparisons -- SELECT * FROM create_graph('chained'); SELECT * FROM cypher('chained', $$ CREATE (:people {name: "Jason", age:50}) $$) AS (result agtype); SELECT * FROM cypher('chained', $$ CREATE (:people {name: "Amy", age:25}) $$) AS (result agtype); SELECT * FROM cypher('chained', $$ CREATE (:people {name: "Samantha", age:35}) $$) AS (result agtype); SELECT * FROM cypher('chained', $$ CREATE (:people {name: "Mark", age:40}) $$) AS (result agtype); SELECT * FROM cypher('chained', $$ CREATE (:people {name: "David", age:15}) $$) AS (result agtype); -- should return 1 SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE 35 < u.age <= 49 RETURN u $$) AS (result agtype); SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE 25 <= u.age <= 25 RETURN u $$) AS (result agtype); SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE 35 = u.age = 35 RETURN u $$) AS (result agtype); SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE 50 > u.age > 35 RETURN u $$) AS (result agtype); -- should return 3 SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE 40 <> u.age <> 35 RETURN u $$) AS (result agtype); -- should return 2 SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE 30 <= u.age <= 49 > u.age RETURN u $$) AS (result agtype); -- should return 0 SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE 30 <= u.age <= 49 = u.age RETURN u $$) AS (result agtype); -- should return 2 SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE 35 < u.age + 1 <= 50 RETURN u $$) AS (result agtype); -- should return 3 SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE NOT 35 < u.age + 1 <= 50 RETURN u $$) AS (result agtype); -- order of operations -- expressions SELECT * FROM cypher('chained', $$ RETURN 1 = 1 = 1 $$) AS (result agtype); SELECT * FROM cypher('chained', $$ RETURN 1 = 2 = 1 $$) AS (result agtype); SELECT * FROM cypher('chained', $$ RETURN (1 = 1) = 1 $$) AS (result agtype); SELECT * FROM cypher('chained', $$ RETURN 1 = (1 = 1) $$) AS (result agtype); SELECT * FROM cypher('chained', $$ RETURN 1 = 1 = true $$) AS (result agtype); SELECT * FROM cypher('chained', $$ RETURN (1 = 1) = true $$) AS (result agtype); SELECT * FROM cypher('chained', $$ RETURN true = ((1 = 1) = true) $$) AS (result agtype); SELECT * FROM cypher('chained', $$ RETURN ((1 = 1) = 1) = 1 $$) AS (result agtype); SELECT * FROM cypher('chained', $$ RETURN (1 = (1 = 1)) = 1 $$) AS (result agtype); SELECT * FROM cypher('chained', $$ RETURN ((1 = (1 = 1)) = 1) = 1 $$) AS (result agtype); -- in clause SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE 35 = u.age = 35 RETURN u $$) AS (result agtype); SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE (35 = u.age) = 35 RETURN u $$) AS (result agtype); SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE (35 = 35) = u.age RETURN u $$) AS (result agtype); SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE u.age = u.age = u.age RETURN u $$) AS (result agtype); SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE (u.age = u.age) = u.age RETURN u $$) AS (result agtype); SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE u.age = (u.age = u.age) RETURN u $$) AS (result agtype); SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE (u.age = u.age) = (u.age = u.age) RETURN u $$) AS (result agtype); SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE u.age = (u.age = (u.age = u.age)) RETURN u $$) AS (result agtype); SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE u.age = 35 = ((u.age = u.age) = u.age) RETURN u $$) AS (result agtype); SELECT * FROM cypher('chained', $$ MATCH (u:people) WHERE ((u.age = u.age) = (u.age = u.age)) = (u.age = u.age) RETURN u $$) AS (result agtype); -- -- Test transform logic for IS NULL & IS NOT NULL -- SELECT * FROM cypher('expr', $$ RETURN null IS NULL $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN 1 IS NULL $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN 1 IS NOT NULL $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN null IS NOT NULL $$) AS r(result boolean); -- -- Test transform logic for AND, OR, NOT and XOR -- SELECT * FROM cypher('expr', $$ RETURN NOT false $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN NOT true $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN true AND true $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN true AND false $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN false AND true $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN false AND false $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN true OR true $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN true OR false $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN false OR true $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN false OR false $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN NOT ((true OR false) AND (false OR true)) $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN true XOR true $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN true XOR false $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN false XOR true $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN false XOR false $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN false OR 1::bool $$) AS (result boolean); SELECT * FROM cypher('expr', $$ RETURN false AND NOT 1::bool $$) AS (result boolean); SELECT * FROM cypher('expr', $$ RETURN NOT 1::bool::int::bool $$) AS (result boolean); -- Invalid operands for AND, OR, NOT, XOR SELECT * FROM cypher('expr', $$ RETURN 1 AND true $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN true AND 0 $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN false OR 1 $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN 0 OR true $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN NOT 1 $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN true XOR 0 $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN 1 XOR 0 $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN NOT ((1 OR 0) AND (0 OR 1)) $$) AS r(result boolean); SELECT * FROM cypher('expr', $$ RETURN 1.0 AND true $$) AS (result agtype); SELECT * FROM cypher('expr', $$ RETURN false OR 'string' $$) AS (result agtype); SELECT * FROM cypher('expr', $$ RETURN false XOR 1::numeric $$) AS (result agtype); SELECT * FROM cypher('expr', $$ RETURN false OR 1::bool::int $$) AS (result boolean); -- -- Test indirection transform logic for object.property, object["property"], -- and array[element] -- SELECT * FROM cypher('expr', $$ RETURN [ 1, { bool: true, int: 3, array: [ 9, 11, { boom: false, float: 3.14 }, 13 ] }, 5, 7, 9 ][1].array[2]["float"] $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ WITH {bool_val: false, int_val: 3, float_val: 3.14, array: [1, 2, 3]} as a RETURN a - 'array' $$) as (a agtype); SELECT * FROM cypher('expr', $$ WITH {bool_val: false, int_val: 3, float_val: 3.14, array: [1, 2, 3]} as a RETURN a - 'int_val' $$) as (a agtype); SELECT * FROM cypher('expr', $$ WITH {bool_val: false, int_val: 3, float_val: 3.14, array: [1, 2, 3]} as a RETURN a.array - 1 $$) as (a agtype); SELECT * FROM cypher('expr', $$ WITH {bool_val: false, int_val: 3, float_val: 3.14, array: [1, 2, 3]} as a RETURN a.array + 1 $$) as (a agtype); -- -- Test STARTS WITH, ENDS WITH, and CONTAINS transform logic -- SELECT * FROM cypher('expr', $$ RETURN "abcdefghijklmnopqrstuvwxyz" STARTS WITH "abcd" $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN "abcdefghijklmnopqrstuvwxyz" ENDS WITH "wxyz" $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN "abcdefghijklmnopqrstuvwxyz" CONTAINS "klmn" $$) AS r(result agtype); -- these should return false SELECT * FROM cypher('expr', $$ RETURN "abcdefghijklmnopqrstuvwxyz" STARTS WITH "bcde" $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN "abcdefghijklmnopqrstuvwxyz" ENDS WITH "vwxy" $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN "abcdefghijklmnopqrstuvwxyz" CONTAINS "klmo" $$) AS r(result agtype); -- these should return SQL NULL SELECT * FROM cypher('expr', $$ RETURN "abcdefghijklmnopqrstuvwxyz" STARTS WITH NULL $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN "abcdefghijklmnopqrstuvwxyz" ENDS WITH NULL $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN "abcdefghijklmnopqrstuvwxyz" CONTAINS NULL $$) AS r(result agtype); -- -- Test =~ aka regular expression comparisons -- SELECT create_graph('regex'); SELECT * FROM cypher('regex', $$ CREATE (n:Person {name: 'John'}) RETURN n $$) AS r(result agtype); SELECT * FROM cypher('regex', $$ CREATE (n:Person {name: 'Jeff'}) RETURN n $$) AS r(result agtype); SELECT * FROM cypher('regex', $$ CREATE (n:Person {name: 'Joan'}) RETURN n $$) AS r(result agtype); SELECT * FROM cypher('regex', $$ MATCH (n:Person) WHERE n.name =~ 'JoHn' RETURN n $$) AS r(result agtype); SELECT * FROM cypher('regex', $$ MATCH (n:Person) WHERE n.name =~ '(?i)JoHn' RETURN n $$) AS r(result agtype); SELECT * FROM cypher('regex', $$ MATCH (n:Person) WHERE n.name =~ 'Jo.n' RETURN n $$) AS r(result agtype); SELECT * FROM cypher('regex', $$ MATCH (n:Person) WHERE n.name =~ 'J.*' RETURN n $$) AS r(result agtype); -- --Coerce to Postgres 3 int types (smallint, int, bigint) -- SELECT create_graph('type_coercion'); SELECT * FROM cypher('type_coercion', $$ RETURN NULL $$) AS (i bigint); SELECT * FROM cypher('type_coercion', $$ RETURN 1 $$) AS (i smallint); SELECT * FROM cypher('type_coercion', $$ RETURN 1 $$) AS (i int); SELECT * FROM cypher('type_coercion', $$ RETURN 1 $$) AS (i bigint); SELECT * FROM cypher('type_coercion', $$ RETURN 1.0 $$) AS (i bigint); SELECT * FROM cypher('type_coercion', $$ RETURN 1.0::numeric $$) AS (i bigint); SELECT * FROM cypher('type_coercion', $$ RETURN '1' $$) AS (i bigint); SELECT * FROM cypher('type_coercion', $$ RETURN true $$) AS (i bigint); SELECT * FROM cypher('type_coercion', $$ RETURN true $$) AS (i int); SELECT * FROM cypher('type_coercion', $$ RETURN '1.0' $$) AS (i bigint); -- Casting to ints that will cause overflow SELECT * FROM cypher('type_coercion', $$ RETURN 10000000000000000000 $$) AS (i smallint); SELECT * FROM cypher('type_coercion', $$ RETURN 10000000000000000000 $$) AS (i int); --Invalid types SELECT * FROM cypher('type_coercion', $$ RETURN {key: 1} $$) AS (i bigint); SELECT * FROM cypher('type_coercion', $$ RETURN [1] $$) AS (i bigint); SELECT * FROM cypher('type_coercion', $$ RETURN 1 $$) AS (i bool); SELECT * FROM cypher('type_coercion', $$CREATE ()-[:edge]->()$$) AS (result agtype); SELECT * FROM cypher('type_coercion', $$ MATCH (v) RETURN v $$) AS (i bigint); SELECT * FROM cypher('type_coercion', $$ MATCH ()-[e]-() RETURN e $$) AS (i bigint); SELECT * FROM cypher('type_coercion', $$ MATCH p=()-[]-() RETURN p $$) AS (i bigint); -- -- Test typecasting '::' transform and execution logic -- -- -- Test from an agtype value to agtype int -- SELECT * FROM cypher('expr', $$ RETURN 0.0::int $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN 0.0::integer $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN '0'::int $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN '0'::integer $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN 0.0::numeric::int $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN 2.71::int $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN 2.71::numeric::int $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN true::int $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN false::int $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1.0, pie: 3.1415927, e: 2::numeric}, 2, null][1].one)::int $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1.0::int, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].one) $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1::float, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].one)::int $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2, null][3])::int $$) AS r(result agtype); -- should return SQL null SELECT agtype_typecast_int('null'::agtype); SELECT agtype_typecast_int(null); SELECT * FROM cypher('expr', $$ RETURN null::int $$) AS r(result agtype); -- should return JSON null SELECT agtype_in('null::int'); -- these should fail SELECT * FROM cypher('expr', $$ RETURN '0.0'::int $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN '1.5'::int $$) AS r(result agtype); SELECT * FROM cypher('graph_name', $$ RETURN "15555555555555555555555555555"::int $$) AS (string_result agtype); SELECT * FROM cypher('expr', $$ RETURN 'NaN'::float::int $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN 'infinity'::float::int $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ''::int $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN 'false_'::int $$) AS r(result agtype); -- -- Test from an agtype value to agtype int -- SELECT * FROM cypher('expr', $$ RETURN 0::bool $$) AS r(result agtype); -- these should fail SELECT * FROM cypher('expr', $$ RETURN 1.23::bool $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ''::bool $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN 'false_'::bool $$) AS r(result agtype); -- Test from an agtype value to an agtype numeric -- SELECT * FROM cypher('expr', $$ RETURN 0::numeric $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN 2.71::numeric $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN '2.71'::numeric $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN (2.71::numeric)::numeric $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ('2.71'::numeric)::numeric $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ('NaN'::numeric)::numeric $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ((1 + 2.71) * 3)::numeric $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].pie)::numeric $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].e) $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].e)::numeric $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2, null][3])::numeric $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2::numeric, null]) $$) AS r(result agtype); -- should return SQL null SELECT agtype_typecast_numeric('null'::agtype); SELECT agtype_typecast_numeric(null); SELECT * FROM cypher('expr', $$ RETURN null::numeric $$) AS r(result agtype); -- should return JSON null SELECT agtype_in('null::numeric'); -- these should fail SELECT * FROM cypher('expr', $$ RETURN ('2:71'::numeric)::numeric $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ('inf'::numeric)::numeric $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ('infinity'::numeric)::numeric $$) AS r(result agtype); -- verify that output can be accepted and reproduced correctly via agtype_in SELECT agtype_in('2.71::numeric'); SELECT agtype_in('[0, {"e": 2.718281::numeric, "one": 1, "pie": 3.1415927}, 2::numeric, null]'); SELECT * FROM cypher('expr', $$ RETURN (['NaN'::numeric, {one: 1, pie: 3.1415927, nan: 'nAn'::numeric}, 2::numeric, null]) $$) AS r(result agtype); SELECT agtype_in('[NaN::numeric, {"nan": NaN::numeric, "one": 1, "pie": 3.1415927}, 2::numeric, null]'); -- -- Test from an agtype value to agtype float -- SELECT * FROM cypher('expr', $$ RETURN 0::float $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN '2.71'::float $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN 2.71::float $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2::numeric}, 2, null][1].one)::float $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1::float, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].one) $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1::float, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].one)::float $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2, null][3])::float $$) AS r(result agtype); -- test NaN, infinity, and -infinity SELECT * FROM cypher('expr', $$ RETURN 'NaN'::float $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN 'inf'::float $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN '-inf'::float $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN 'infinity'::float $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN '-infinity'::float $$) AS r(result agtype); -- should return SQL null SELECT agtype_typecast_float('null'::agtype); SELECT agtype_typecast_float(null); SELECT * FROM cypher('expr', $$ RETURN null::float $$) AS r(result agtype); -- should return JSON null SELECT agtype_in('null::float'); -- these should fail SELECT * FROM cypher('expr', $$ RETURN '2:71'::float $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN 'infi'::float $$) AS r(result agtype); -- verify that output can be accepted and reproduced correctly via agtype_in SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1::float, pie: 3.1415927, e: 2.718281::numeric}, 2::numeric, null]) $$) AS r(result agtype); SELECT agtype_in('[0, {"e": 2.718281::numeric, "one": 1.0, "pie": 3.1415927}, 2::numeric, null]'); SELECT * FROM cypher('expr', $$ RETURN (['NaN'::float, {one: 'inf'::float, pie: 3.1415927, e: 2.718281::numeric}, 2::numeric, null]) $$) AS r(result agtype); SELECT agtype_in('[NaN, {"e": 2.718281::numeric, "one": Infinity, "pie": 3.1415927}, 2::numeric, null]'); -- -- Test typecast ::pg_float8 -- SELECT * FROM cypher('expr', $$ RETURN 0::pg_float8 $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN '2.71'::pg_float8 $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN 2.71::pg_float8 $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2::numeric}, 2, null][1].one)::pg_float8 $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1::pg_float8, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].one) $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1::pg_float8, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].one)::float $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2, null][3])::pg_float8 $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN (['NaN'::pg_float8, {one: 'inf'::pg_float8, pie: 3.1415927, e: 2.718281::numeric}, 2::numeric, null]) $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].e)::pg_float8 $$) AS r(result agtype); -- test NaN, Infinity and -Infinity SELECT * FROM cypher('expr', $$ RETURN 'NaN'::pg_float8 $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN 'inf'::pg_float8 $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN '-inf'::pg_float8 $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN 'infinity'::pg_float8 $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN '-infinity'::pg_float8 $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN null::pg_float8 $$) AS r(result agtype); -- these should fail SELECT * FROM cypher('expr', $$ RETURN ''::pg_float8 $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN '2:71'::pg_float8 $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN 'infi'::pg_float8 $$) AS r(result agtype); -- -- Test typecast :: transform and execution logic for object (vertex & edge) -- SELECT * FROM cypher('expr', $$ RETURN {id:0, label:"vertex 0", properties:{}}::vertex $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN {vertex_0:{id:0, label:"vertex 0", properties:{}}::vertex} $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN {name:"container 0", vertices:[{vertex_0:{id:0, label:"vertex 0", properties:{}}::vertex}, {vertex_0:{id:0, label:"vertex 0", properties:{}}::vertex}]} $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN {id:3, label:"edge 0", properties:{}, start_id:0, end_id:1}::edge $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN {edge_0:{id:3, label:"edge 0", properties:{}, start_id:0, end_id:1}::edge} $$) AS r(result agtype); --invalid edge typecast SELECT * FROM cypher('expr', $$ RETURN {edge_0:{id:3, label:"edge 0", properties:{}, startid:0, end_id:1}::edge} $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN {edge_0:{id:3, label:"edge 0", properties:{}, start_id:0, endid:1}::edge} $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN {name:"container 1", edges:[{id:3, label:"edge 0", properties:{}, start_id:0, end_id:1}::edge, {id:4, label:"edge 1", properties:{}, start_id:1, end_id:0}::edge]} $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN {name:"path 1", path:[{id:0, label:"vertex 0", properties:{}}::vertex, {id:2, label:"edge 0", properties:{}, start_id:0, end_id:1}::edge, {id:1, label:"vertex 1", properties:{}}::vertex]} $$) AS r(result agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN NULL::vertex $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN NULL::edge $$) AS r(result agtype); SELECT agtype_typecast_vertex('null'::agtype); SELECT agtype_typecast_vertex(null); SELECT agtype_typecast_edge('null'::agtype); SELECT agtype_typecast_edge(null); -- should return JSON null SELECT agtype_in('null::vertex'); SELECT agtype_in('null::edge'); -- should all fail SELECT * FROM cypher('expr', $$ RETURN {id:0, labelz:"vertex 0", properties:{}}::vertex $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN {id:0, label:"vertex 0"}::vertex $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN {id:"0", label:"vertex 0", properties:{}}::vertex $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN {}::vertex $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN {id:3, labelz:"edge 0", properties:{}, start_id:0, end_id:1}::edge $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN {id:3, label:"edge 0", start_id:0, end_id:1}::edge $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN {}::edge $$) AS r(result agtype); -- make sure that output can be read back in and reproduce the output SELECT agtype_in('{"name": "container 0", "vertices": [{"vertex_0": {"id": 0, "label": "vertex 0", "properties": {}}::vertex}, {"vertex_0": {"id": 0, "label": "vertex 0", "properties": {}}::vertex}]}'); SELECT agtype_in('{"name": "container 1", "edges": [{"id": 3, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 4, "label": "edge 1", "end_id": 0, "start_id": 1, "properties": {}}::edge]}'); SELECT agtype_in('{"name": "path 1", "path": [{"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 1, "label": "vertex 1", "properties": {}}::vertex]}'); -- typecast to path SELECT agtype_in('[{"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 1, "label": "vertex 1", "properties": {}}::vertex]::path'); SELECT agtype_in('{"Path" : [{"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 1, "label": "vertex 1", "properties": {}}::vertex]::path}'); SELECT * FROM cypher('expr', $$ RETURN [{id: 0, label: "vertex 0", properties: {}}::vertex, {id: 2, label: "edge 0", end_id: 1, start_id: 0, properties: {}}::edge, {id: 1, label: "vertex 1", properties: {}}::vertex]::path $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN {path : [{id: 0, label: "vertex 0", properties: {}}::vertex, {id: 2, label: "edge 0", end_id: 1, start_id: 0, properties: {}}::edge, {id: 1, label: "vertex 1", properties: {}}::vertex]::path} $$) AS r(result agtype); -- verify that the output can be input SELECT agtype_in('[{"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 1, "label": "vertex 1", "properties": {}}::vertex]::path'); SELECT agtype_in('{"path": [{"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 1, "label": "vertex 1", "properties": {}}::vertex]::path}'); -- invalid paths should fail SELECT agtype_in('[{"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge]::path'); SELECT agtype_in('{"Path" : [{"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 0, "label": "vertex 0", "properties": {}}::vertex, {"id": 2, "label": "edge 0", "end_id": 1, "start_id": 0, "properties": {}}::edge, {"id": 1, "label": "vertex 1", "properties": {}}::vertex]::path}'); SELECT * FROM cypher('expr', $$ RETURN [{id: 0, label: "vertex 0", properties: {}}::vertex]::path $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN [{id: 2, label: "edge 0", end_id: 1, start_id: 0, properties: {}}::edge]::path $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN []::path $$) AS r(result agtype); -- should be JSON null SELECT agtype_in('null::path'); -- should be SQL null SELECT * FROM cypher('expr', $$ RETURN null::path $$) AS r(result agtype); SELECT agtype_typecast_path(agtype_in('null')); SELECT agtype_typecast_path(null); -- test functions -- create some vertices and edges SELECT * FROM cypher('expr', $$CREATE (:v)$$) AS (a agtype); SELECT * FROM cypher('expr', $$CREATE (:v {i: 0})$$) AS (a agtype); SELECT * FROM cypher('expr', $$CREATE (:v {i: 1})$$) AS (a agtype); SELECT * FROM cypher('expr', $$ CREATE (:v1 {id:'initial'})-[:e1]->(:v1 {id:'middle'})-[:e1]->(:v1 {id:'end'}) $$) AS (a agtype); -- show them SELECT * FROM cypher('expr', $$ MATCH (v) RETURN v $$) AS (expression agtype); SELECT * FROM cypher('expr', $$ MATCH ()-[e]-() RETURN e $$) AS (expression agtype); -- id() SELECT * FROM cypher('expr', $$ MATCH ()-[e]-() RETURN id(e) $$) AS (id agtype); SELECT * FROM cypher('expr', $$ MATCH (v) RETURN id(v) $$) AS (id agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN id(null) $$) AS (id agtype); -- should error SELECT * FROM cypher('expr', $$ RETURN id() $$) AS (id agtype); -- start_id() SELECT * FROM cypher('expr', $$ MATCH ()-[e]-() RETURN start_id(e) $$) AS (start_id agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN start_id(null) $$) AS (start_id agtype); -- should error SELECT * FROM cypher('expr', $$ MATCH (v) RETURN start_id(v) $$) AS (start_id agtype); SELECT * FROM cypher('expr', $$ RETURN start_id() $$) AS (start_id agtype); -- end_id() SELECT * FROM cypher('expr', $$ MATCH ()-[e]-() RETURN end_id(e) $$) AS (end_id agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN end_id(null) $$) AS (end_id agtype); -- should error SELECT * FROM cypher('expr', $$ MATCH (v) RETURN end_id(v) $$) AS (end_id agtype); SELECT * FROM cypher('expr', $$ RETURN end_id() $$) AS (end_id agtype); -- startNode() SELECT * FROM cypher('expr', $$ MATCH ()-[e]-() RETURN id(e), start_id(e), startNode(e) $$) AS (id agtype, start_id agtype, startNode agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN startNode(null) $$) AS (startNode agtype); -- should error SELECT * FROM cypher('expr', $$ MATCH (v) RETURN startNode(v) $$) AS (startNode agtype); SELECT * FROM cypher('expr', $$ RETURN startNode() $$) AS (startNode agtype); -- endNode() SELECT * FROM cypher('expr', $$ MATCH ()-[e]-() RETURN id(e), end_id(e), endNode(e) $$) AS (id agtype, end_id agtype, endNode agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN endNode(null) $$) AS (endNode agtype); -- should error SELECT * FROM cypher('expr', $$ MATCH (v) RETURN endNode(v) $$) AS (endNode agtype); SELECT * FROM cypher('expr', $$ RETURN endNode() $$) AS (endNode agtype); -- type() SELECT * FROM cypher('expr', $$ MATCH ()-[e]-() RETURN type(e) $$) AS (type agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN type(null) $$) AS (type agtype); -- should error SELECT * FROM cypher('expr', $$ MATCH (v) RETURN type(v) $$) AS (type agtype); SELECT * FROM cypher('expr', $$ RETURN type() $$) AS (type agtype); -- label () SELECT * FROM cypher('expr', $$ MATCH (v) RETURN label(v) $$) AS (label agtype); SELECT * FROM cypher('expr', $$ MATCH ()-[e]->() RETURN label(e) $$) AS (label agtype); SELECT * FROM cypher('expr', $$ RETURN label({id: 0, label: 'typecast', properties: {}}::vertex) $$) AS (label agtype); -- return NULL SELECT * FROM cypher('expr', $$ RETURN label(NULL) $$) AS (label agtype); SELECT ag_catalog.age_label(NULL); -- should error SELECT * FROM cypher('expr', $$ MATCH p=()-[]->() RETURN label(p) $$) AS (label agtype); SELECT * FROM cypher('expr', $$ RETURN label(1) $$) AS (label agtype); SELECT * FROM cypher('expr', $$ MATCH (n) RETURN label([n]) $$) AS (label agtype); SELECT * FROM cypher('expr', $$ RETURN label({id: 0, label: 'failed', properties: {}}) $$) AS (label agtype); -- timestamp() can't be done as it will always have a different value -- size() of a string SELECT * FROM cypher('expr', $$ RETURN size('12345') $$) AS (size agtype); SELECT * FROM cypher('expr', $$ RETURN size("1234567890") $$) AS (size agtype); -- size() of an array SELECT * FROM cypher('expr', $$ RETURN size([1, 2, 3, 4, 5]) $$) AS (size agtype); SELECT * FROM cypher('expr', $$ RETURN size([]) $$) AS (size agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN size(null) $$) AS (size agtype); -- should fail SELECT * FROM cypher('expr', $$ RETURN size(1234567890) $$) AS (size agtype); SELECT * FROM cypher('expr', $$ RETURN size() $$) AS (size agtype); SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE size(vle_array[0]) = 0 RETURN vle_array $$) AS (vle_array agtype); SELECT * FROM cypher('expr', $$ RETURN size({id: 0, status:'it_will_fail'}) $$) AS (size agtype); -- head() of an array SELECT * FROM cypher('expr', $$ RETURN head([1, 2, 3, 4, 5]) $$) AS (head agtype); SELECT * FROM cypher('expr', $$ RETURN head([1]) $$) AS (head agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN head([]) $$) AS (head agtype); SELECT * FROM cypher('expr', $$ RETURN head(null) $$) AS (head agtype); SELECT * FROM cypher('expr', $$ RETURN head([null, null]) $$) AS (head agtype); -- should fail SELECT * FROM cypher('expr', $$ RETURN head(1234567890) $$) AS (head agtype); SELECT * FROM cypher('expr', $$ RETURN head() $$) AS (head agtype); SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() RETURN head(vle_array[0]) $$) AS (head agtype); SELECT * FROM cypher('expr', $$ RETURN head({id: 0, status:'it_will_fail'}) $$) AS (head agtype); -- last() SELECT * FROM cypher('expr', $$ RETURN last([1, 2, 3, 4, 5]) $$) AS (last agtype); SELECT * FROM cypher('expr', $$ RETURN last([1]) $$) AS (last agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN last([]) $$) AS (last agtype); SELECT * FROM cypher('expr', $$ RETURN last(null) $$) AS (last agtype); SELECT * FROM cypher('expr', $$ RETURN last([null, null]) $$) AS (last agtype); -- should fail SELECT * FROM cypher('expr', $$ RETURN last(1234567890) $$) AS (last agtype); SELECT * FROM cypher('expr', $$ RETURN last() $$) AS (last agtype); SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() RETURN last(vle_array[0]) $$) AS (last agtype); SELECT * FROM cypher('expr', $$ RETURN last({id: 0, status:'it_will_fail'}) $$) AS (last agtype); -- properties() SELECT * FROM cypher('expr', $$ MATCH (v) RETURN properties(v) $$) AS (properties agtype); SELECT * FROM cypher('expr', $$ MATCH ()-[e]-() RETURN properties(e) $$) AS (properties agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN properties(null) $$) AS (properties agtype); -- should fail SELECT * FROM cypher('expr', $$ RETURN properties(1234) $$) AS (properties agtype); SELECT * FROM cypher('expr', $$ RETURN properties() $$) AS (properties agtype); -- coalesce SELECT * FROM cypher('expr', $$ RETURN coalesce(null, 1, null, null) $$) AS (coalesce agtype); SELECT * FROM cypher('expr', $$ RETURN coalesce(null, -3.14, null, null) $$) AS (coalesce agtype); SELECT * FROM cypher('expr', $$ RETURN coalesce(null, "string", null, null) $$) AS (coalesce agtype); SELECT * FROM cypher('expr', $$ RETURN coalesce(null, null, null, []) $$) AS (coalesce agtype); SELECT * FROM cypher('expr', $$ RETURN coalesce(null, null, null, {}) $$) AS (coalesce agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN coalesce(null, id(null), null) $$) AS (coalesce agtype); SELECT * FROM cypher('expr', $$ RETURN coalesce(null) $$) AS (coalesce agtype); -- should fail SELECT * FROM cypher('expr', $$ RETURN coalesce() $$) AS (coalesce agtype); -- toBoolean() SELECT * FROM cypher('expr', $$ RETURN toBoolean(true) $$) AS (toBoolean agtype); SELECT * FROM cypher('expr', $$ RETURN toBoolean(false) $$) AS (toBoolean agtype); SELECT * FROM cypher('expr', $$ RETURN toBoolean("true") $$) AS (toBoolean agtype); SELECT * FROM cypher('expr', $$ RETURN toBoolean("false") $$) AS (toBoolean agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN toBoolean("false_") $$) AS (toBoolean agtype); SELECT * FROM cypher('expr', $$ RETURN toBoolean(null) $$) AS (toBoolean agtype); -- should fail SELECT * FROM cypher('expr', $$ RETURN toBoolean(1) $$) AS (toBoolean agtype); SELECT * FROM cypher('expr', $$ RETURN toBoolean() $$) AS (toBoolean agtype); -- toBooleanList() SELECT * FROM cypher('expr', $$ RETURN toBooleanList([true, false, true]) $$) AS (toBooleanList agtype); SELECT * FROM cypher('expr', $$ RETURN toBooleanList(["true", "false", "true"]) $$) AS (toBooleanList agtype); SELECT * FROM cypher('expr', $$ RETURN toBooleanList(["True", "False", "True"]) $$) AS (toBooleanList agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN toBooleanList([]) $$) AS (toBooleanList agtype); SELECT * FROM cypher('expr', $$ RETURN toBooleanList([null, null, null]) $$) AS (toBooleanList agtype); SELECT * FROM cypher('expr', $$ RETURN toBooleanList(["Hello", "world!"]) $$) AS (toBooleanList agtype); SELECT * FROM cypher('expr', $$ RETURN toBooleanList([["A", "B"], ["C", "D"]]) $$) AS (toBooleanList agtype); SELECT * FROM cypher('expr', $$ RETURN toBooleanList([0,1,2,3,4]) $$) AS (toBooleanList agtype); -- should fail SELECT * FROM cypher('expr', $$ RETURN toBooleanList(fail) $$) AS (toBooleanList agtype); SELECT * FROM cypher('expr', $$ RETURN toBooleanList("fail") $$) AS (toBooleanList agtype); SELECT * FROM cypher('expr', $$ RETURN toBooleanList(123) $$) AS (toBooleanList agtype); -- toFloat() SELECT * FROM cypher('expr', $$ RETURN toFloat(1) $$) AS (toFloat agtype); SELECT * FROM cypher('expr', $$ RETURN toFloat(1.2) $$) AS (toFloat agtype); SELECT * FROM cypher('expr', $$ RETURN toFloat("1") $$) AS (toFloat agtype); SELECT * FROM cypher('expr', $$ RETURN toFloat("1.2") $$) AS (toFloat agtype); SELECT * FROM cypher('expr', $$ RETURN toFloat("1.2"::numeric) $$) AS (toFloat agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN toFloat("false_") $$) AS (toFloat agtype); SELECT * FROM cypher('expr', $$ RETURN toFloat(null) $$) AS (toFloat agtype); -- should fail SELECT * FROM cypher('expr', $$ RETURN toFloat(true) $$) AS (toFloat agtype); SELECT * FROM cypher('expr', $$ RETURN toFloat() $$) AS (toFloat agtype); -- toFloatList() SELECT * FROM cypher('expr', $$ RETURN toFloatList([1.3]) $$) AS (toFloatList agtype); SELECT * FROM cypher('expr', $$ RETURN toFloatList([1.2, '4.654']) $$) AS (toFloatList agtype); SELECT * FROM cypher('expr', $$ RETURN toFloatList(['1.9432', 8.6222, '9.4111212', 344.22]) $$) AS (toFloatList agtype); SELECT * FROM cypher('expr', $$ RETURN toFloatList(['999.2']) $$) AS (toFloatList agtype); SELECT * FROM cypher('expr', $$ RETURN toFloatList([1.20002]) $$) AS (toFloatList agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN toFloatList(['true']) $$) AS (toFloatList agtype); SELECT * FROM cypher('expr', $$ RETURN toFloatList([null]) $$) AS (toFloatList agtype); -- should fail SELECT * FROM cypher('expr', $$ RETURN toFloatList([failed]) $$) AS (toFloatList agtype); SELECT * FROM cypher('expr', $$ RETURN toFloatList("failed") $$) AS (toFloatList agtype); SELECT * FROM cypher('expr', $$ RETURN toFloatList(555) $$) AS (toFloatList agtype); -- toInteger() SELECT * FROM cypher('expr', $$ RETURN toInteger(1) $$) AS (toInteger agtype); SELECT * FROM cypher('expr', $$ RETURN toInteger(1.2) $$) AS (toInteger agtype); SELECT * FROM cypher('expr', $$ RETURN toInteger("1") $$) AS (toInteger agtype); SELECT * FROM cypher('expr', $$ RETURN toInteger("1.2") $$) AS (toInteger agtype); SELECT * FROM cypher('expr', $$ RETURN toInteger("1.2"::numeric) $$) AS (toInteger agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN toInteger("false_") $$) AS (toInteger agtype); SELECT * FROM cypher('expr', $$ RETURN toInteger(null) $$) AS (toInteger agtype); -- should fail SELECT * FROM cypher('expr', $$ RETURN toInteger(true) $$) AS (toInteger agtype); SELECT * FROM cypher('expr', $$ RETURN toInteger() $$) AS (toInteger agtype); -- toIntegerList() SELECT * FROM cypher('expr', $$ RETURN toIntegerList([1, 7.8, 9.0, '88']) $$) AS (toIntegerList agtype); SELECT * FROM cypher('expr', $$ RETURN toIntegerList([4.2, '123', '8', 8]) $$) AS (toIntegerList agtype); SELECT * FROM cypher('expr', $$ RETURN toIntegerList(['41', '12', 2]) $$) AS (toIntegerList agtype); SELECT * FROM cypher('expr', $$ RETURN toIntegerList([1, 2, 3, '10.2']) $$) AS (toIntegerList agtype); SELECT * FROM cypher('expr', $$ RETURN toIntegerList([0000]) $$) AS (toIntegerList agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN toIntegerList(["false_", 'asdsad', '123k1kdk1']) $$) AS (toIntegerList agtype); SELECT * FROM cypher('expr', $$ RETURN toIntegerList([null, '123false', 'one']) $$) AS (toIntegerList agtype); -- should fail SELECT * FROM cypher('expr', $$ RETURN toIntegerList(123, '123') $$) AS (toIntegerList agtype); SELECT * FROM cypher('expr', $$ RETURN toIntegerList(32[]) $$) AS (toIntegerList agtype); -- length() of a path SELECT * FROM cypher('expr', $$ RETURN length([{id: 0, label: "vertex 0", properties: {}}::vertex, {id: 2, label: "edge 0", end_id: 1, start_id: 0, properties: {}}::edge, {id: 1, label: "vertex 1", properties: {}}::vertex]::path) $$) AS (length agtype); SELECT * FROM cypher('expr', $$ RETURN length([{id: 0, label: "vertex 0", properties: {}}::vertex, {id: 2, label: "edge 0", end_id: 1, start_id: 0, properties: {}}::edge, {id: 1, label: "vertex 1", properties: {}}::vertex, {id: 2, label: "edge 0", end_id: 1, start_id: 0, properties: {}}::edge, {id: 1, label: "vertex 1", properties: {}}::vertex]::path) $$) AS (length agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN length(null) $$) AS (length agtype); -- should fail SELECT * FROM cypher('expr', $$ RETURN length(true) $$) AS (length agtype); SELECT * FROM cypher('expr', $$ RETURN length() $$) AS (length agtype); -- -- toString() -- -- PG types SELECT * FROM age_toString(3); SELECT * FROM age_toString(3.14); SELECT * FROM age_toString(3.14::float); SELECT * FROM age_toString(3.14::numeric); SELECT * FROM age_toString(true); SELECT * FROM age_toString(false); SELECT * FROM age_toString('a string'); SELECT * FROM age_toString('a cstring'::cstring); SELECT * FROM age_toString('a text string'::text); SELECT * FROM age_toString(pg_typeof(3.14)); -- agtypes SELECT * FROM age_toString(agtype_in('3')); SELECT * FROM age_toString(agtype_in('3.14')); SELECT * FROM age_toString(agtype_in('3.14::float')); SELECT * FROM age_toString(agtype_in('3.14::numeric')); SELECT * FROM age_toString(agtype_in('true')); SELECT * FROM age_toString(agtype_in('false')); SELECT * FROM age_toString(agtype_in('"a string"')); SELECT * FROM cypher('expr', $$ RETURN toString(3.14::numeric) $$) AS (results agtype); -- should return null SELECT * FROM age_toString(NULL); SELECT * FROM age_toString(agtype_in(null)); -- should fail SELECT * FROM age_toString(); SELECT * FROM cypher('expr', $$ RETURN toString() $$) AS (results agtype); -- toStringList() -- SELECT * FROM cypher('expr', $$ RETURN toStringList([5, 10, 7.8, 9, 1.3]) $$) AS (toStringList agtype); SELECT * FROM cypher('expr', $$ RETURN toStringList(['test', 89, 'again', 7.1, 9]) $$) AS (toStringList agtype); SELECT * FROM cypher('expr', $$ RETURN toStringList([null, false, true, 'string']) $$) AS (toStringList agtype); SELECT * FROM cypher('expr', $$ RETURN toStringList([9.123456789, 5.123, 1.12345, 0.123123]) $$) AS (toStringList agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN toStringList([null]) $$) AS (toStringList agtype); SELECT * FROM cypher('expr', $$ RETURN toStringList([true, false, true, true]) $$) AS (toStringList agtype); -- should fail SELECT * FROM cypher('expr', $$ RETURN toStringList([['a', b]]) $$) AS (toStringList agtype); SELECT * FROM cypher('expr', $$ RETURN toStringList([test]) $$) AS (toStringList agtype); -- -- reverse(string) -- SELECT * FROM cypher('expr', $$ RETURN reverse("gnirts a si siht") $$) AS (results agtype); SELECT * FROM age_reverse('gnirts a si siht'); SELECT * FROM age_reverse('gnirts a si siht'::text); SELECT * FROM age_reverse('gnirts a si siht'::cstring); -- should return null SELECT * FROM cypher('expr', $$ RETURN reverse(null) $$) AS (results agtype); SELECT * FROM age_reverse(null); -- should return error SELECT * FROM age_reverse([4923, 'abc', 521, NULL, 487]); -- Should return the reversed list SELECT * FROM cypher('expr', $$ RETURN reverse([4923, 'abc', 521, NULL, 487]) $$) AS (u agtype); SELECT * FROM cypher('expr', $$ RETURN reverse([4923]) $$) AS (u agtype); SELECT * FROM cypher('expr', $$ RETURN reverse([4923, 257]) $$) as (u agtype); SELECT * FROM cypher('expr', $$ RETURN reverse([4923, 257, null]) $$) as (u agtype); SELECT * FROM cypher('expr', $$ RETURN reverse([4923, 257, 'tea']) $$) as (u agtype); SELECT * FROM cypher('expr', $$ RETURN reverse([[1, 4, 7], 4923, [1, 2, 3], 'abc', 521, NULL, 487, ['fgt', 7, 10]]) $$) as (u agtype); SELECT * FROM cypher('expr', $$ RETURN reverse([4923, 257, {test1: "key"}]) $$) as (u agtype); SELECT * FROM cypher('expr', $$ RETURN reverse([4923, 257, {test2: [1, 2, 3]}]) $$) as (u agtype); SELECT * FROM cypher('expr', $$ CREATE ({test: [1, 2, 3]}) $$) as (u agtype); SELECT * FROM cypher('expr', $$ MATCH (v) WHERE exists(v.test) RETURN reverse(v.test) $$) as (u agtype); -- should fail SELECT * FROM cypher('expr', $$ RETURN reverse(true) $$) AS (results agtype); SELECT * FROM age_reverse(true); SELECT * FROM cypher('expr', $$ RETURN reverse(3.14) $$) AS (results agtype); SELECT * FROM age_reverse(3.14); SELECT * FROM cypher('expr', $$ RETURN reverse() $$) AS (results agtype); SELECT * FROM age_reverse(); SELECT * FROM cypher('expr', $$ MATCH (v) RETURN reverse(v) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN reverse({}) $$) AS (results agtype); -- -- toUpper() and toLower() -- SELECT * FROM cypher('expr', $$ RETURN toUpper('to uppercase') $$) AS (toUpper agtype); SELECT * FROM cypher('expr', $$ RETURN toLower('TO LOWERCASE') $$) AS (toLower agtype); SELECT * FROM age_toupper('text'::text); SELECT * FROM age_toupper('cstring'::cstring); SELECT * FROM age_tolower('TEXT'::text); SELECT * FROM age_tolower('CSTRING'::cstring); -- should return null SELECT * FROM cypher('expr', $$ RETURN toUpper(null) $$) AS (toUpper agtype); SELECT * FROM cypher('expr', $$ RETURN toLower(null) $$) AS (toLower agtype); SELECT * FROM age_toupper(null); SELECT * FROM age_tolower(null); -- should fail SELECT * FROM cypher('expr', $$ RETURN toUpper(true) $$) AS (toUpper agtype); SELECT * FROM cypher('expr', $$ RETURN toUpper() $$) AS (toUpper agtype); SELECT * FROM cypher('expr', $$ RETURN toLower(true) $$) AS (toLower agtype); SELECT * FROM cypher('expr', $$ RETURN toLower() $$) AS (toLower agtype); SELECT * FROM age_toupper(); SELECT * FROM age_tolower(); -- -- lTrim(), rTrim(), trim() -- SELECT * FROM cypher('expr', $$ RETURN lTrim(" string ") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN rTrim(" string ") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN trim(" string ") $$) AS (results agtype); SELECT * FROM age_ltrim(' string '); SELECT * FROM age_rtrim(' string '); SELECT * FROM age_trim(' string '); -- should return null SELECT * FROM cypher('expr', $$ RETURN lTrim(null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN rTrim(null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN trim(null) $$) AS (results agtype); SELECT * FROM age_ltrim(null); SELECT * FROM age_rtrim(null); SELECT * FROM age_trim(null); -- should fail SELECT * FROM cypher('expr', $$ RETURN lTrim(true) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN rTrim(true) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN trim(true) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN lTrim() $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN rTrim() $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN trim() $$) AS (results agtype); SELECT * FROM age_ltrim(); SELECT * FROM age_rtrim(); SELECT * FROM age_trim(); -- -- left(), right(), & substring() -- left() SELECT * FROM cypher('expr', $$ RETURN left("123456789", 1) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN left("123456789", 3) $$) AS (results agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN left("123456789", 0) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN left(null, 1) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN left(null, null) $$) AS (results agtype); SELECT * FROM age_left(null, 1); SELECT * FROM age_left(null, null); -- should fail SELECT * FROM cypher('expr', $$ RETURN left("123456789", null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN left("123456789", -1) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN left() $$) AS (results agtype); SELECT * FROM age_left('123456789', null); SELECT * FROM age_left('123456789', -1); SELECT * FROM age_left(); --right() SELECT * FROM cypher('expr', $$ RETURN right("123456789", 1) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN right("123456789", 3) $$) AS (results agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN right("123456789", 0) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN right(null, 1) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN right(null, null) $$) AS (results agtype); SELECT * FROM age_right(null, 1); SELECT * FROM age_right(null, null); -- should fail SELECT * FROM cypher('expr', $$ RETURN right("123456789", null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN right("123456789", -1) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN right() $$) AS (results agtype); SELECT * FROM age_right('123456789', null); SELECT * FROM age_right('123456789', -1); SELECT * FROM age_right(); -- substring() SELECT * FROM cypher('expr', $$ RETURN substring("0123456789", 0, 1) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN substring("0123456789", 1, 3) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN substring("0123456789", 3) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN substring("0123456789", 0) $$) AS (results agtype); SELECT * FROM age_substring('0123456789', 3, 2); SELECT * FROM age_substring('0123456789', 1); -- should return null SELECT * FROM cypher('expr', $$ RETURN substring(null, null, null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN substring(null, null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN substring(null, 1) $$) AS (results agtype); SELECT * FROM age_substring(null, null, null); SELECT * FROM age_substring(null, null); SELECT * FROM age_substring(null, 1); -- should fail SELECT * FROM cypher('expr', $$ RETURN substring("123456789", null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN substring("123456789", 0, -1) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN substring("123456789", -1) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN substring("123456789") $$) AS (results agtype); SELECT * FROM age_substring('123456789', null); SELECT * FROM age_substring('123456789', 0, -1); SELECT * FROM age_substring('123456789', -1); SELECT * FROM age_substring(); -- -- split() -- SELECT * FROM cypher('expr', $$ RETURN split("a,b,c,d,e,f", ",") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN split("a,b,c,d,e,f", "") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN split("a,b,c,d,e,f", " ") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN split("a,b,cd e,f", " ") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN split("a,b,cd e,f", " ") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN split("a,b,c,d,e,f", "c,") $$) AS (results agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN split(null, null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN split("a,b,c,d,e,f", null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN split(null, ",") $$) AS (results agtype); SELECT * FROM age_split(null, null); SELECT * FROM age_split('a,b,c,d,e,f', null); SELECT * FROM age_split(null, ','); -- should fail SELECT * FROM cypher('expr', $$ RETURN split(123456789, ",") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN split("a,b,c,d,e,f", -1) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN split("a,b,c,d,e,f") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN split() $$) AS (results agtype); SELECT * FROM age_split(123456789, ','); SELECT * FROM age_split('a,b,c,d,e,f', -1); SELECT * FROM age_split('a,b,c,d,e,f'); SELECT * FROM age_split(); -- -- replace() -- SELECT * FROM cypher('expr', $$ RETURN replace("Hello", "lo", "p") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN replace("Hello", "hello", "Good bye") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN replace("abcabcabc", "abc", "a") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN replace("abcabcabc", "ab", "") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN replace("ababab", "ab", "ab") $$) AS (results agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN replace(null, null, null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN replace("Hello", null, null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN replace("Hello", "", null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN replace("", "", "") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN replace("Hello", "Hello", "") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN replace("", "Hello", "Mellow") $$) AS (results agtype); SELECT * FROM age_replace(null, null, null); SELECT * FROM age_replace('Hello', null, null); SELECT * FROM age_replace('Hello', '', null); SELECT * FROM age_replace('', '', ''); SELECT * FROM age_replace('Hello', 'Hello', ''); SELECT * FROM age_replace('', 'Hello', 'Mellow'); -- should fail SELECT * FROM cypher('expr', $$ RETURN replace() $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN replace("Hello") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN replace("Hello", null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN replace("Hello", "e", 1) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN replace("Hello", 1, "e") $$) AS (results agtype); SELECT * FROM age_replace(); SELECT * FROM age_replace(null); SELECT * FROM age_replace(null, null); SELECT * FROM age_replace('Hello', 'e', 1); SELECT * FROM age_replace('Hello', 1, 'E'); -- -- sin, cos, tan, cot -- SELECT sin = results FROM cypher('expr', $$ RETURN sin(3.1415) $$) AS (results agtype), sin(3.1415); SELECT cos = results FROM cypher('expr', $$ RETURN cos(3.1415) $$) AS (results agtype), cos(3.1415); SELECT tan = results FROM cypher('expr', $$ RETURN tan(3.1415) $$) AS (results agtype), tan(3.1415); SELECT cot = results FROM cypher('expr', $$ RETURN cot(3.1415) $$) AS (results agtype), cot(3.1415); SELECT sin = age_sin FROM sin(3.1415), age_sin(3.1415); SELECT cos = age_cos FROM cos(3.1415), age_cos(3.1415); SELECT tan = age_tan FROM tan(3.1415), age_tan(3.1415); SELECT cot = age_cot FROM cot(3.1415), age_cot(3.1415); -- should return null SELECT * FROM cypher('expr', $$ RETURN sin(null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN cos(null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN tan(null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN cot(null) $$) AS (results agtype); SELECT * FROM age_sin(null); SELECT * FROM age_cos(null); SELECT * FROM age_tan(null); SELECT * FROM age_cot(null); -- should fail SELECT * FROM cypher('expr', $$ RETURN sin("0") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN cos("0") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN tan("0") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN cot("0") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN sin() $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN cos() $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN tan() $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN cot() $$) AS (results agtype); SELECT * FROM age_sin('0'); SELECT * FROM age_cos('0'); SELECT * FROM age_tan('0'); SELECT * FROM age_cot('0'); SELECT * FROM age_sin(); SELECT * FROM age_cos(); SELECT * FROM age_tan(); SELECT * FROM age_cot(); -- -- Arc functions: asin, acos, atan, & atan2 -- SELECT * FROM cypher('expr', $$ RETURN asin(1)*2 $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN acos(0)*2 $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN atan(1)*4 $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN atan2(1, 1)*4 $$) AS (results agtype); SELECT * FROM asin(1), age_asin(1); SELECT * FROM acos(0), age_acos(0); SELECT * FROM atan(1), age_atan(1); SELECT * FROM atan2(1, 1), age_atan2(1, 1); -- should return null SELECT * FROM cypher('expr', $$ RETURN asin(1.1) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN acos(1.1) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN asin(-1.1) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN acos(-1.1) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN asin(null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN acos(null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN atan(null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN atan2(null, null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN atan2(null, 1) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN atan2(1, null) $$) AS (results agtype); SELECT * FROM age_asin(null); SELECT * FROM age_acos(null); SELECT * FROM age_atan(null); SELECT * FROM age_atan2(null, null); SELECT * FROM age_atan2(1, null); SELECT * FROM age_atan2(null, 1); -- should fail SELECT * FROM cypher('expr', $$ RETURN asin("0") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN acos("0") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN atan("0") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN atan2("0", 1) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN atan2(0, "1") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN asin() $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN acos() $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN atan() $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN atan2() $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN atan2(null) $$) AS (results agtype); SELECT * FROM age_asin('0'); SELECT * FROM age_acos('0'); SELECT * FROM age_atan('0'); SELECT * FROM age_atan2('0', 1); SELECT * FROM age_atan2(1, '0'); SELECT * FROM age_asin(); SELECT * FROM age_acos(); SELECT * FROM age_atan(); SELECT * FROM age_atan2(); SELECT * FROM age_atan2(1); -- -- pi -- SELECT * FROM cypher('expr', $$ RETURN pi() $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN sin(pi()) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN sin(pi()/4) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN cos(pi()) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN cos(pi()/2) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN sin(pi()/2) $$) AS (results agtype); -- should fail SELECT * FROM cypher('expr', $$ RETURN pi(null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN pi(1) $$) AS (results agtype); -- -- radians() & degrees() -- SELECT * FROM cypher('expr', $$ RETURN radians(0) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN degrees(0) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN radians(360), 2*pi() $$) AS (results agtype, Two_PI agtype); SELECT * FROM cypher('expr', $$ RETURN degrees(2*pi()) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN radians(180), pi() $$) AS (results agtype, PI agtype); SELECT * FROM cypher('expr', $$ RETURN degrees(pi()) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN radians(90), pi()/2 $$) AS (results agtype, Half_PI agtype); SELECT * FROM cypher('expr', $$ RETURN degrees(pi()/2) $$) AS (results agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN radians(null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN degrees(null) $$) AS (results agtype); -- should fail SELECT * FROM cypher('expr', $$ RETURN radians() $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN degrees() $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN radians("1") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN degrees("1") $$) AS (results agtype); -- -- abs(), ceil(), floor(), & round() -- SELECT * FROM cypher('expr', $$ RETURN abs(0) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN abs(10) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN abs(-10) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN ceil(0) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN ceil(1) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN ceil(-1) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN ceil(1.01) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN ceil(-1.01) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN floor(0) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN floor(1) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN floor(-1) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN floor(1.01) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN floor(-1.01) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN round(0) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN round(4.49999999) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN round(4.5) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN round(-4.49999999) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN round(-4.5) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN round(7.4163, 3) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN round(7.416343479, 8) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN round(7.416343479, NULL) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN round(NULL, 7) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN round(7, 2) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN round(7.4342, 2.1123) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN round(NULL, NULL) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN sign(10) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN sign(-10) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN sign(0) $$) AS (results agtype); -- should return null SELECT * FROM cypher('expr', $$ RETURN abs(null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN ceil(null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN floor(null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN round(null) $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN sign(null) $$) AS (results agtype); -- should fail SELECT * FROM cypher('expr', $$ RETURN abs() $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN ceil() $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN floor() $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN round() $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN sign() $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN abs("1") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN ceil("1") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN floor("1") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN round("1") $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN sign("1") $$) AS (results agtype); -- -- rand() -- -- should select 0 rows as rand() is in [0,1) SELECT * FROM cypher('expr', $$ RETURN rand() $$) AS (result agtype) WHERE result >= 1 or result < 0; -- should select 0 rows as rand() should not return the same value SELECT * FROM cypher('expr', $$ RETURN rand() $$) AS cypher_1(result agtype), cypher('expr', $$ RETURN rand() $$) AS cypher_2(result agtype) WHERE cypher_1.result = cypher_2.result; -- -- log (ln) and log10 -- SELECT * from cypher('expr', $$ RETURN log(2.718281828459045) $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN log10(10) $$) as (result agtype); -- should return null SELECT * from cypher('expr', $$ RETURN log(null) $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN log10(null) $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN log(0) $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN log10(0) $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN log(-1) $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN log10(-1) $$) as (result agtype); -- should fail SELECT * from cypher('expr', $$ RETURN log() $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN log10() $$) as (result agtype); -- -- e() -- SELECT * from cypher('expr', $$ RETURN e() $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN log(e()) $$) as (result agtype); -- -- exp() aka e^x -- SELECT * from cypher('expr', $$ RETURN exp(1) $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN exp(0) $$) as (result agtype); -- should return null SELECT * from cypher('expr', $$ RETURN exp(null) $$) as (result agtype); -- should fail SELECT * from cypher('expr', $$ RETURN exp() $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN exp("1") $$) as (result agtype); -- -- sqrt() -- SELECT * from cypher('expr', $$ RETURN sqrt(25) $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN sqrt(1) $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN sqrt(0) $$) as (result agtype); -- should return null SELECT * from cypher('expr', $$ RETURN sqrt(-1) $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN sqrt(null) $$) as (result agtype); -- should fail SELECT * from cypher('expr', $$ RETURN sqrt() $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN sqrt("1") $$) as (result agtype); -- -- user defined function expressions - using pg functions for these tests -- SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt(25::pg_float8) $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt("25"::pg_float8) $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN ag_catalog.age_sqrt(25) $$) as (result agtype); -- should return null SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt(null::pg_float8) $$) as (result agtype); -- should fail SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt() $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt(-1::pg_float8) $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN something.pg_catalog.sqrt("1"::pg_float8) $$) as (result agtype); -- should fail do to schema but using a reserved_keyword SELECT * from cypher('expr', $$ RETURN distinct.age_sqrt(25) $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN contains.age_sqrt(25) $$) as (result agtype); -- -- aggregate functions avg(), sum(), count(), & count(*) -- SELECT create_graph('UCSC'); SELECT * FROM cypher('UCSC', $$CREATE (:students {name: "Jack", gpa: 3.0, age: 21, zip: 94110})$$) AS (a agtype); SELECT * FROM cypher('UCSC', $$CREATE (:students {name: "Jill", gpa: 3.5, age: 27, zip: 95060})$$) AS (a agtype); SELECT * FROM cypher('UCSC', $$CREATE (:students {name: "Jim", gpa: 3.75, age: 32, zip: 96062})$$) AS (a agtype); SELECT * FROM cypher('UCSC', $$CREATE (:students {name: "Rick", gpa: 2.5, age: 24, zip: "95060"})$$) AS (a agtype); SELECT * FROM cypher('UCSC', $$CREATE (:students {name: "Ann", gpa: 3.8::numeric, age: 23})$$) AS (a agtype); SELECT * FROM cypher('UCSC', $$CREATE (:students {name: "Derek", gpa: 4.0, age: 19, zip: 90210})$$) AS (a agtype); SELECT * FROM cypher('UCSC', $$CREATE (:students {name: "Jessica", gpa: 3.9::numeric, age: 20})$$) AS (a agtype); SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN (u) $$) AS (vertex agtype); SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN avg(u.gpa), sum(u.gpa), sum(u.gpa)/count(u.gpa), count(u.gpa), count(*) $$) AS (avg agtype, sum agtype, sum_divided_by_count agtype, count agtype, count_star agtype); -- add in 2 null gpa records SELECT * FROM cypher('UCSC', $$CREATE (:students {name: "Dave", age: 24})$$) AS (a agtype); SELECT * FROM cypher('UCSC', $$CREATE (:students {name: "Mike", age: 18})$$) AS (a agtype); SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN (u) $$) AS (vertex agtype); SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN avg(u.gpa), sum(u.gpa), sum(u.gpa)/count(u.gpa), count(u.gpa), count(*) $$) AS (avg agtype, sum agtype, sum_divided_by_count agtype, count agtype, count_star agtype); -- should return null SELECT * FROM cypher('UCSC', $$ RETURN avg(NULL) $$) AS (avg agtype); SELECT * FROM cypher('UCSC', $$ RETURN sum(NULL) $$) AS (sum agtype); -- should return 0 SELECT * FROM cypher('UCSC', $$ RETURN count(NULL) $$) AS (count agtype); -- should fail SELECT * FROM cypher('UCSC', $$ RETURN avg() $$) AS (avg agtype); SELECT * FROM cypher('UCSC', $$ RETURN sum() $$) AS (sum agtype); SELECT * FROM cypher('UCSC', $$ RETURN count() $$) AS (count agtype); -- -- aggregate functions min() & max() -- SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN min(u.gpa), max(u.gpa), count(u.gpa), count(*) $$) AS (min agtype, max agtype, count agtype, count_star agtype); SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN min(u.gpa), max(u.gpa), count(u.gpa), count(*) $$) AS (min agtype, max agtype, count agtype, count_star agtype); SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN min(u.name), max(u.name), count(u.name), count(*) $$) AS (min agtype, max agtype, count agtype, count_star agtype); -- check that min() & max() can work against mixed types SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN min(u.zip), max(u.zip), count(u.zip), count(*) $$) AS (min agtype, max agtype, count agtype, count_star agtype); CREATE TABLE min_max_tbl (oid oid); insert into min_max_tbl VALUES (16), (17188), (1000), (869); SELECT age_min(oid::int), age_max(oid::int) FROM min_max_tbl; SELECT age_min(oid::int::float), age_max(oid::int::float) FROM min_max_tbl; SELECT age_min(oid::int::float::numeric), age_max(oid::int::float::numeric) FROM min_max_tbl; SELECT age_min(oid::text), age_max(oid::text) FROM min_max_tbl; DROP TABLE min_max_tbl; -- should return null SELECT * FROM cypher('UCSC', $$ RETURN min(NULL) $$) AS (min agtype); SELECT * FROM cypher('UCSC', $$ RETURN max(NULL) $$) AS (max agtype); SELECT age_min(NULL); SELECT age_min(agtype_in('null')); SELECT age_max(NULL); SELECT age_max(agtype_in('null')); -- should fail SELECT * FROM cypher('UCSC', $$ RETURN min() $$) AS (min agtype); SELECT * FROM cypher('UCSC', $$ RETURN max() $$) AS (max agtype); SELECT age_min(); SELECT age_min(); -- -- aggregate functions stDev() & stDevP() -- SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN stDev(u.gpa), stDevP(u.gpa) $$) AS (stDev agtype, stDevP agtype); -- should return 0 SELECT * FROM cypher('UCSC', $$ RETURN stDev(NULL) $$) AS (stDev agtype); SELECT * FROM cypher('UCSC', $$ RETURN stDevP(NULL) $$) AS (stDevP agtype); -- should fail SELECT * FROM cypher('UCSC', $$ RETURN stDev() $$) AS (stDev agtype); SELECT * FROM cypher('UCSC', $$ RETURN stDevP() $$) AS (stDevP agtype); -- -- aggregate functions percentileCont() & percentileDisc() -- SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN percentileCont(u.gpa, .55), percentileDisc(u.gpa, .55), percentileCont(u.gpa, .9), percentileDisc(u.gpa, .9) $$) AS (percentileCont1 agtype, percentileDisc1 agtype, percentileCont2 agtype, percentileDisc2 agtype); SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN percentileCont(u.gpa, .55) $$) AS (percentileCont agtype); SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN percentileDisc(u.gpa, .55) $$) AS (percentileDisc agtype); -- should return null SELECT * FROM cypher('UCSC', $$ RETURN percentileCont(NULL, .5) $$) AS (percentileCont agtype); SELECT * FROM cypher('UCSC', $$ RETURN percentileDisc(NULL, .5) $$) AS (percentileDisc agtype); -- should fail SELECT * FROM cypher('UCSC', $$ RETURN percentileCont(.5, NULL) $$) AS (percentileCont agtype); SELECT * FROM cypher('UCSC', $$ RETURN percentileDisc(.5, NULL) $$) AS (percentileDisc agtype); -- -- aggregate function collect() -- SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN collect(u.name), collect(u.age), collect(u.gpa), collect(u.zip) $$) AS (name agtype, age agtype, gqa agtype, zip agtype); SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN collect(u.gpa), collect(u.gpa) $$) AS (gpa1 agtype, gpa2 agtype); SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN collect(u.zip), collect(u.zip) $$) AS (zip1 agtype, zip2 agtype); SELECT * FROM cypher('UCSC', $$ RETURN collect(5) $$) AS (result agtype); -- should return an empty array SELECT * FROM cypher('UCSC', $$ RETURN collect(NULL) $$) AS (empty agtype); SELECT * FROM cypher('UCSC', $$ MATCH (u) WHERE u.name =~ "doesn't exist" RETURN collect(u.name) $$) AS (name agtype); -- should fail SELECT * FROM cypher('UCSC', $$ RETURN collect() $$) AS (collect agtype); -- test DISTINCT inside aggregate functions SELECT * FROM cypher('UCSC', $$CREATE (:students {name: "Sven", gpa: 3.2, age: 27, zip: 94110})$$) AS (a agtype); SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN (u) $$) AS (vertex agtype); SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN count(u.zip), count(DISTINCT u.zip) $$) AS (zip agtype, distinct_zip agtype); SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN count(u.age), count(DISTINCT u.age) $$) AS (age agtype, distinct_age agtype); -- test AUTO GROUP BY for aggregate functions SELECT create_graph('group_by'); SELECT * FROM cypher('group_by', $$CREATE (:row {i: 1, j: 2, k:3})$$) AS (result agtype); SELECT * FROM cypher('group_by', $$CREATE (:row {i: 1, j: 2, k:4})$$) AS (result agtype); SELECT * FROM cypher('group_by', $$CREATE (:row {i: 1, j: 3, k:5})$$) AS (result agtype); SELECT * FROM cypher('group_by', $$CREATE (:row {i: 2, j: 3, k:6})$$) AS (result agtype); SELECT * FROM cypher('group_by', $$MATCH (u:row) RETURN u.i, u.j, u.k$$) AS (i agtype, j agtype, k agtype); SELECT * FROM cypher('group_by', $$MATCH (u:row) RETURN u.i, u.j, sum(u.k)$$) AS (i agtype, j agtype, sumk agtype); SELECT * FROM cypher('group_by', $$CREATE (:L {a: 1, b: 2, c:3})$$) AS (result agtype); SELECT * FROM cypher('group_by', $$CREATE (:L {a: 2, b: 3, c:1})$$) AS (result agtype); SELECT * FROM cypher('group_by', $$CREATE (:L {a: 3, b: 1, c:2})$$) AS (result agtype); SELECT * FROM cypher('group_by', $$MATCH (x:L) RETURN x.a, x.b, x.c, x.a + count(*) + x.b + count(*) + x.c$$) AS (a agtype, b agtype, c agtype, result agtype); SELECT * FROM cypher('group_by', $$MATCH (x:L) RETURN x.a + x.b + x.c, x.a + x.b + x.c + count(*) + count(*) $$) AS (a_b_c agtype, result agtype); -- with WITH clause SELECT * FROM cypher('group_by', $$MATCH(x:L) WITH x, count(x) AS c RETURN x.a + x.b + x.c + c$$) AS (result agtype); SELECT * FROM cypher('group_by', $$MATCH(x:L) WITH x, count(x) AS c RETURN x.a + x.b + x.c + c + c$$) AS (result agtype); SELECT * FROM cypher('group_by', $$MATCH(x:L) WITH x.a + x.b + x.c AS v, count(x) as c RETURN v + c + c $$) AS (result agtype); -- should fail SELECT * FROM cypher('group_by', $$MATCH (x:L) RETURN x.a, x.a + count(*) + x.b + count(*) + x.c$$) AS (a agtype, result agtype); SELECT * FROM cypher('group_by', $$MATCH (x:L) RETURN x.a + count(*) + x.b + count(*) + x.c$$) AS (result agtype); --ORDER BY SELECT create_graph('order_by'); SELECT * FROM cypher('order_by', $$CREATE ()$$) AS (result agtype); SELECT * FROM cypher('order_by', $$CREATE ({i: '1'})$$) AS (result agtype); SELECT * FROM cypher('order_by', $$CREATE ({i: 1})$$) AS (result agtype); SELECT * FROM cypher('order_by', $$CREATE ({i: 1.0})$$) AS (result agtype); SELECT * FROM cypher('order_by', $$CREATE ({i: 1::numeric})$$) AS (result agtype); SELECT * FROM cypher('order_by', $$CREATE ({i: true})$$) AS (result agtype); SELECT * FROM cypher('order_by', $$CREATE ({i: false})$$) AS (result agtype); SELECT * FROM cypher('order_by', $$CREATE ({i: {key: 'value'}})$$) AS (result agtype); SELECT * FROM cypher('order_by', $$CREATE ({i: [1]})$$) AS (result agtype); SELECT * FROM cypher('order_by', $$ MATCH (u) RETURN u.i ORDER BY u.i $$) AS (i agtype); SELECT * FROM cypher('order_by', $$ MATCH (u) RETURN u.i ORDER BY u.i DESC $$) AS (i agtype); --CASE SELECT create_graph('case_statement'); SELECT * FROM cypher('case_statement', $$CREATE ({id: 1, i: 1, j: null})-[:connected_to {id: 1, k:0}]->({id: 2, i: 'a', j: 'b'})$$) AS (result agtype); SELECT * FROM cypher('case_statement', $$CREATE ({id: 3, i: 0, j: 1})-[:connected_to {id: 2, k:1}]->({id: 4, i: true, j: false})$$) AS (result agtype); SELECT * FROM cypher('case_statement', $$CREATE ({id: 5, i: [], j: [0,1,2]})$$) AS (result agtype); SELECT * FROM cypher('case_statement', $$CREATE ({id: 6, i: {}, j: {i:1}})$$) AS (result agtype); --standalone case & edge cases --base case SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN true THEN true END) $$) as (a agtype); --should return 1 empty row SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN false THEN true END) $$) as (a agtype); --should return 'false' SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN true THEN false END) $$) as (a agtype); --invalid case (WHEN should be boolean) SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN 1 THEN 'fail' END) $$) as (a agtype); -- booleans + logic gates SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN true THEN (true AND true) END) $$) as (a agtype); -- invalid mixed logic gate SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN true THEN (true AND 1) END) $$) as (a agtype); --CASE WHEN condition THEN result END SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN n.i, n.j, CASE WHEN null THEN 'should not return me' WHEN n.i = 1 THEN 'i is 1' WHEN n.j = 'b' THEN 'j is b' WHEN n.i = 0 AND n.j = 1 THEN '0 AND 1' WHEN n.i = true OR n.j = true THEN 'i or j true' ELSE 'default' END $$ ) AS (i agtype, j agtype, case_statement agtype); --CASE expression WHEN value THEN result END SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN n.j, CASE n.j WHEN null THEN 'should not return me' WHEN 'b' THEN 'b' WHEN 1 THEN 1 WHEN false THEN false WHEN [0,1,2] THEN [0,1,2] WHEN {i:1} THEN {i:1} ELSE 'not a or b' END $$ ) AS (j agtype, case_statement agtype); --CASE agtype_vertex WHEN value THEN result END SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE n WHEN null THEN 'should not return me' WHEN 'agtype_string' THEN 'wrong' WHEN n THEN n ELSE 'no n' END $$ ) AS (case_statement agtype); --CASE with match and edges SELECT * FROM cypher('case_statement', $$ MATCH (n)-[e]->(m) RETURN CASE WHEN null THEN 'should not return me' WHEN n.i = 1 THEN n WHEN n.i = 0 THEN m ELSE 'none' END $$ ) AS (case_statement agtype); SELECT * FROM cypher('case_statement', $$ MATCH (n)-[e]->(m) RETURN CASE WHEN null THEN 'should not return me' WHEN e.k = 1 THEN e WHEN e.k = 0 THEN e ELSE 'none' END $$ ) AS (case_statement agtype); --CASE chained expressions SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE WHEN null THEN 'should not return me' WHEN n.i = 1 = 1 THEN n ELSE 'none' END $$ ) AS (case_statement agtype); SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE WHEN null THEN 'should not return me' WHEN n.i = (1 = 1) THEN n ELSE 'none' END $$ ) AS (case_statement agtype); SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE n WHEN null THEN 'should not return me' WHEN n.i = 1 THEN n ELSE 'none' END $$ ) AS (case_statement agtype); SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE n = 1 WHEN null THEN 'should not return me' WHEN n.i = 1 = 1 THEN n ELSE 'none' END $$ ) AS (case_statement agtype); SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE n = 1 WHEN null THEN 'should not return me' WHEN n.i = (1 = 1) THEN n ELSE 'none' END $$ ) AS (case_statement agtype); --should return n SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE n = 1 WHEN null THEN 'should not return me' WHEN n = 1 = 1 THEN n ELSE 'none' END $$ ) AS (case_statement agtype); --chained expression in THEN SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE WHEN null THEN 'should not return me' WHEN n.i = 1 THEN n.i = 1 = 1 ELSE 'none' END $$ ) AS (case_statement agtype); --order of operations in then SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE n WHEN null THEN 'should not return me' WHEN n THEN (n.i = 1) = 1 ELSE 'none' END $$ ) AS (case_statement agtype); SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE n WHEN null THEN 'should not return me' WHEN n THEN n.i = (1 = 1) ELSE 'none' END $$ ) AS (case_statement agtype); SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN CASE n WHEN null THEN 'should not return me' WHEN n THEN n.i = (1 = 0) ELSE 'none' END $$ ) AS (case_statement agtype); --CASE with count() --count(*) SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN n, CASE n.j WHEN 1 THEN count(*) ELSE 'not count' END $$ ) AS (n agtype, case_statement agtype); --concatenated SELECT * FROM cypher('case_statement', $$ MATCH (n) MATCH (m) RETURN n, CASE n.j WHEN 1 THEN count(*) ELSE 'not count' END $$ ) AS (n agtype, case_statement agtype); --count(n) SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN n, CASE n.j WHEN 1 THEN count(n) ELSE 'not count' END $$ ) AS (n agtype, case_statement agtype); --concatenated SELECT * FROM cypher('case_statement', $$ MATCH (n) MATCH (m) RETURN n, CASE n.j WHEN 1 THEN count(n) ELSE 'not count' END $$ ) AS (n agtype, case_statement agtype); --count(1) SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN n, CASE n.j WHEN 1 THEN count(1) ELSE 'not count' END $$ ) AS (n agtype, case_statement agtype); --concatenated SELECT * FROM cypher('case_statement', $$ MATCH (n) MATCH (m) RETURN n, CASE n.j WHEN 1 THEN count(1) ELSE 'not count' END $$ ) AS (n agtype, case_statement agtype); --CASE with EXISTS() --exists(n.property) SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN n, CASE exists(n.j) WHEN true THEN 'property j exists' ELSE 'property j does not exist' END $$ ) AS (n agtype, case_statement agtype); --CASE evaluates to boolean true, is not a boolean, should hit ELSE SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN n, CASE exists(n.j) WHEN 1 THEN 'should not output me' ELSE '1 is not a boolean' END $$ ) AS (n agtype, case_statement agtype); --exists in WHEN, vacuously false because exists(n.j) evaluates to a boolean, n is a vertex SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN n, CASE n WHEN exists(n.j) THEN 'should not output me' ELSE 'n is a vertex, not a boolean' END $$ ) AS (j agtype, case_statement agtype); --exists(*) (should fail) SELECT * FROM cypher('case_statement', $$ MATCH (n) RETURN n, CASE n.j WHEN 1 THEN exists(*) ELSE 'not count' END $$ ) AS (j agtype, case_statement agtype); -- RETURN * and (u)--(v) optional forms SELECT create_graph('opt_forms'); SELECT * FROM cypher('opt_forms', $$CREATE ({i:1})-[:KNOWS]->({i:2})<-[:KNOWS]-({i:3})$$)AS (result agtype); SELECT * FROM cypher('opt_forms', $$MATCH (u) RETURN u$$) AS (result agtype); SELECT * FROM cypher('opt_forms', $$MATCH (u) RETURN *$$) AS (result agtype); SELECT * FROM cypher('opt_forms', $$MATCH (u)--(v) RETURN u.i, v.i$$) AS (u agtype, v agtype); SELECT * FROM cypher('opt_forms', $$MATCH (u)-->(v) RETURN u.i, v.i$$) AS (u agtype, v agtype); SELECT * FROM cypher('opt_forms', $$MATCH (u)<--(v) RETURN u.i, v.i$$) AS (u agtype, v agtype); SELECT * FROM cypher('opt_forms', $$MATCH (u)-->()<--(v) RETURN u.i, v.i$$) AS (u agtype, v agtype); SELECT * FROM cypher('opt_forms', $$MATCH (u) CREATE (u)-[:edge]->() RETURN *$$) AS (results agtype); SELECT * FROM cypher('opt_forms', $$MATCH (u)-->()<--(v) RETURN *$$) AS (col1 agtype, col2 agtype); -- Added typecasts ::pg_bigint and ::pg_float8 SELECT * FROM cypher('expr', $$ RETURN true::pg_bigint $$) AS (result agtype); SELECT * FROM cypher('expr', $$ RETURN "1.0"::pg_float8 $$) AS (result agtype); SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt(pg_catalog.sqrt(pg_catalog.sqrt(256::pg_bigint))) $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt(pg_catalog.sqrt(pg_catalog.sqrt(256::pg_float8))) $$) as (result agtype); -- VLE SELECT create_graph('VLE'); -- should return 0 rows SELECT * FROM cypher('VLE', $$MATCH (u)-[*]-(v) RETURN u, v$$) AS (u agtype, v agtype); SELECT * FROM cypher('VLE', $$MATCH (u)-[*0..1]-(v) RETURN u, v$$) AS (u agtype, v agtype); SELECT * FROM cypher('VLE', $$MATCH (u)-[*..1]-(v) RETURN u, v$$) AS (u agtype, v agtype); SELECT * FROM cypher('VLE', $$MATCH (u)-[*..5]-(v) RETURN u, v$$) AS (u agtype, v agtype); -- Create a graph to test SELECT * FROM cypher('VLE', $$CREATE (b:begin)-[:edge {name: 'main edge', number: 1, dangerous: {type: "all", level: "all"}}]->(u1:middle)-[:edge {name: 'main edge', number: 2, dangerous: {type: "all", level: "all"}, packages: [2,4,6]}]->(u2:middle)-[:edge {name: 'main edge', number: 3, dangerous: {type: "all", level: "all"}}]->(u3:middle)-[:edge {name: 'main edge', number: 4, dangerous: {type: "all", level: "all"}}]->(e:end), (u1)-[:self_loop {name: 'self loop', number: 1, dangerous: {type: "all", level: "all"}}]->(u1), (e)-[:self_loop {name: 'self loop', number: 2, dangerous: {type: "all", level: "all"}}]->(e), (b)-[:alternate_edge {name: 'alternate edge', number: 1, packages: [2,4,6], dangerous: {type: "poisons", level: "all"}}]->(u1), (u2)-[:alternate_edge {name: 'alternate edge', number: 2, packages: [2,4,6], dangerous: {type: "poisons", level: "all"}}]->(u3), (u3)-[:alternate_edge {name: 'alternate edge', number: 3, packages: [2,4,6], dangerous: {type: "poisons", level: "all"}}]->(e), (u2)-[:bypass_edge {name: 'bypass edge', number: 1, packages: [1,3,5,7]}]->(e), (e)-[:alternate_edge {name: 'backup edge', number: 1, packages: [1,3,5,7]}]->(u3), (u3)-[:alternate_edge {name: 'backup edge', number: 2, packages: [1,3,5,7]}]->(u2), (u2)-[:bypass_edge {name: 'bypass edge', number: 2, packages: [1,3,5,7], dangerous: {type: "poisons", level: "all"}}]->(b) RETURN b, e $$) AS (b agtype, e agtype); -- test vertex_stats command SELECT * FROM cypher('VLE', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); -- test indirection operator for a function SELECT * FROM cypher('VLE', $$ MATCH (u) WHERE vertex_stats(u).self_loops <> 0 RETURN vertex_stats(u) $$) AS (result agtype); SELECT * FROM cypher('VLE', $$ MATCH (u) WHERE vertex_stats(u).in_degree < vertex_stats(u).out_degree RETURN vertex_stats(u) $$) AS (result agtype); SELECT * FROM cypher('VLE', $$ MATCH (u) WHERE vertex_stats(u).out_degree < vertex_stats(u).in_degree RETURN vertex_stats(u) $$) AS (result agtype); -- list functions relationships(), range(), keys() SELECT create_graph('keys'); -- keys() SELECT * FROM cypher('keys', $$CREATE ({name: 'hikaru utada', age: 38, job: 'singer'})-[:collaborated_with {song:"face my fears"}]->( {name: 'sonny moore', age: 33, stage_name: 'skrillex', job: 'producer'})$$) AS (result agtype); SELECT * FROM cypher('keys', $$CREATE ({name: 'alexander guy cook', age: 31, stage_name:"a. g. cook", job: 'producer'})$$) AS (result agtype); SELECT * FROM cypher('keys', $$CREATE ({name: 'keiko fuji', age: 62, job: 'singer'})$$) AS (result agtype); SELECT * FROM cypher('keys', $$MATCH (a),(b) WHERE a.name = 'hikaru utada' AND b.name = 'alexander guy cook' CREATE (a)-[:collaborated_with {song:"one last kiss"}]->(b)$$) AS (result agtype); SELECT * FROM cypher('keys', $$MATCH (a),(b) WHERE a.name = 'hikaru utada' AND b.name = 'keiko fuji' CREATE (a)-[:knows]->(b)$$) AS (result agtype); SELECT * FROM cypher('keys', $$MATCH (v) RETURN keys(v)$$) AS (vertex_keys agtype); SELECT * FROM cypher('keys', $$MATCH ()-[e]-() RETURN keys(e)$$) AS (edge_keys agtype); SELECT * FROM cypher('keys', $$RETURN keys({a:1,b:'two',c:[1,2,3]})$$) AS (keys agtype); --should return empty list SELECT * FROM cypher('keys', $$RETURN keys({})$$) AS (keys agtype); --should return sql null SELECT * FROM cypher('keys', $$RETURN keys(null)$$) AS (keys agtype); --should return error SELECT * from cypher('keys', $$RETURN keys([1,2,3])$$) as (keys agtype); SELECT * from cypher('keys', $$RETURN keys("string")$$) as (keys agtype); SELECT * from cypher('keys', $$MATCH u=()-[]-() RETURN keys(u)$$) as (keys agtype); SELECT create_graph('list'); SELECT * from cypher('list', $$CREATE p=({name:"rick"})-[:knows]->({name:"morty"}) RETURN p$$) as (path agtype); SELECT * from cypher('list', $$CREATE p=({name:'rachael'})-[:knows]->({name:'monica'})-[:knows]->({name:'phoebe'}) RETURN p$$) as (path agtype); -- nodes() SELECT * from cypher('list', $$MATCH p=()-[]->() RETURN nodes(p)$$) as (nodes agtype); SELECT * from cypher('list', $$MATCH p=()-[]->()-[]->() RETURN nodes(p)$$) as (nodes agtype); -- should return nothing SELECT * from cypher('list', $$MATCH p=()-[]->()-[]->()-[]->() RETURN nodes(p)$$) as (nodes agtype); -- should return SQL NULL SELECT * from cypher('list', $$RETURN nodes(NULL)$$) as (nodes agtype); -- should return an error SELECT * from cypher('list', $$MATCH (u) RETURN nodes([1,2,3])$$) as (nodes agtype); SELECT * from cypher('list', $$MATCH (u) RETURN nodes("string")$$) as (nodes agtype); SELECT * from cypher('list', $$MATCH (u) RETURN nodes(u)$$) as (nodes agtype); SELECT * from cypher('list', $$MATCH (u)-[]->() RETURN nodes(u)$$) as (nodes agtype); -- relationships() SELECT * from cypher('list', $$MATCH p=()-[]->() RETURN relationships(p)$$) as (relationships agtype); SELECT * from cypher('list', $$MATCH p=()-[]->()-[]->() RETURN relationships(p)$$) as (relationships agtype); -- should return nothing SELECT * from cypher('list', $$MATCH p=()-[]->()-[]->()-[]->() RETURN relationships(p)$$) as (relationships agtype); -- should return SQL NULL SELECT * from cypher('list', $$RETURN relationships(NULL)$$) as (relationships agtype); -- should return an error SELECT * from cypher('list', $$MATCH (u) RETURN relationships([1,2,3])$$) as (relationships agtype); SELECT * from cypher('list', $$MATCH (u) RETURN relationships("string")$$) as (relationships agtype); SELECT * from cypher('list', $$MATCH (u) RETURN relationships(u)$$) as (relationships agtype); SELECT * from cypher('list', $$MATCH ()-[e]->() RETURN relationships(e)$$) as (relationships agtype); -- range() SELECT * from cypher('list', $$RETURN range(0, 10)$$) as (range agtype); SELECT * from cypher('list', $$RETURN range(0, 10, null)$$) as (range agtype); SELECT * from cypher('list', $$RETURN range(0, 10, 1)$$) as (range agtype); SELECT * from cypher('list', $$RETURN range(0, 10, 3)$$) as (range agtype); SELECT * from cypher('list', $$RETURN range(0, -10, -1)$$) as (range agtype); SELECT * from cypher('list', $$RETURN range(0, -10, -3)$$) as (range agtype); SELECT * from cypher('list', $$RETURN range(0, 10, 11)$$) as (range agtype); SELECT * from cypher('list', $$RETURN range(-20, 10, 5)$$) as (range agtype); -- should return an empty list [] SELECT * from cypher('list', $$RETURN range(0, -10)$$) as (range agtype); SELECT * from cypher('list', $$RETURN range(0, 10, -1)$$) as (range agtype); SELECT * from cypher('list', $$RETURN range(-10, 10, -1)$$) as (range agtype); -- should return an error SELECT * from cypher('list', $$RETURN range(null, -10, -3)$$) as (range agtype); SELECT * from cypher('list', $$RETURN range(0, null, -3)$$) as (range agtype); SELECT * from cypher('list', $$RETURN range(0, -10.0, -3.0)$$) as (range agtype); -- tail() -- should return the last elements of the list SELECT * FROM cypher('list', $$ RETURN tail([1,2,3,4,5]) $$) AS (tail agtype); SELECT * FROM cypher('list', $$ RETURN tail(["a","b","c","d","e"]) $$) AS (tail agtype); -- should return null SELECT * FROM cypher('list', $$ RETURN tail([1]) $$) AS (tail agtype); SELECT * FROM cypher('list', $$ RETURN tail([]) $$) AS (tail agtype); -- should throw errors SELECT * FROM cypher('list', $$ RETURN tail(123) $$) AS (tail agtype); SELECT * FROM cypher('list', $$ RETURN tail(abc) $$) AS (tail agtype); SELECT * FROM cypher('list', $$ RETURN tail() $$) AS (tail agtype); -- labels() SELECT * from cypher('list', $$CREATE (u:People {name: "John"}) RETURN u$$) as (Vertices agtype); SELECT * from cypher('list', $$CREATE (u:People {name: "Larry"}) RETURN u$$) as (Vertices agtype); SELECT * from cypher('list', $$CREATE (u:Cars {name: "G35"}) RETURN u$$) as (Vertices agtype); SELECT * from cypher('list', $$CREATE (u:Cars {name: "MR2"}) RETURN u$$) as (Vertices agtype); SELECT * from cypher('list', $$MATCH (u) RETURN labels(u), u$$) as (Labels agtype, Vertices agtype); -- should return SQL NULL SELECT * from cypher('list', $$RETURN labels(NULL)$$) as (Labels agtype); -- should return an error SELECT * from cypher('list', $$RETURN labels("string")$$) as (Labels agtype); -- Issue 989: Impossible to create an object with an array field of more than -- 100 elements. SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [] }) RETURN any_vertex $$) AS (u agtype); SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0] }) RETURN any_vertex $$) AS (u agtype); SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] }) RETURN any_vertex $$) AS (u agtype); SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100] }) RETURN any_vertex $$) AS (u agtype); SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] }) RETURN any_vertex $$) AS (u agtype); SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] }) RETURN any_vertex $$) AS (u agtype); SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] }) RETURN any_vertex $$) AS (u agtype); -- should return 7 rows with counts: 0, 1, 100, 101, 200, 400, 800 SELECT * FROM cypher('list', $$ MATCH (u:test_label) RETURN size(u.largeArray) $$) AS (u agtype); -- nested cases SELECT * FROM cypher('list',$$ CREATE (n:xyz {array:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], 100]}) return n $$) as (a agtype); SELECT * FROM cypher('list',$$ MATCH (n:xyz) CREATE (m:xyz {array:[0,1,2,3,n.array,5,6,7,8,9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]}) return m $$) as (a agtype); SELECT * FROM cypher('list',$$ MATCH (n:xyz) CREATE (m:xyz {array:[n.array,[n.array,[n.array]]]}) return m $$) as (a agtype); -- SET SELECT * FROM cypher('list',$$ CREATE (n:xyz)-[e:KNOWS {array:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]}]->(m:xyz) $$) as (a agtype); SELECT * FROM cypher('list',$$ MATCH p=(n:xyz)-[e]->() SET n.array=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100] return n,e $$) as (a agtype, b agtype); SELECT * FROM cypher('list',$$ MATCH p=(n:xyz)-[e]->() SET n.array=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, e.array, 100] return n,e $$) as (a agtype, b agtype); -- pg_typeof SELECT * FROM cypher('expr', $$MATCH (u) RETURN toString(pg_catalog.pg_typeof(u.id)) $$) AS (u agtype); -- issue: 395 aggregate function collect() incorrect container for operation SELECT create_graph('graph_395'); SELECT * FROM cypher('graph_395', $$ CREATE (n:Project {name: 'Project A'}), (m:Project {name: 'Project B'}), (a:Task {name: 'Task A', size: 10}), (b:Task {name: 'Task B', size: 5}), (c:Task {name: 'Task C', size: 7}), (x:Person {name: 'John', age: 55}), (y:Person {name: 'Bob', age: 43}), (z:Person {name: 'Alice', age: 33}), (n)-[:Has]->(a), (n)-[:Has]->(b), (m)-[:Has]->(c), (a)-[:AssignedTo]->(x), (b)-[:AssignedTo]->(y), (c)-[:AssignedTo]->(y) $$) as (n agtype); SELECT * FROM cypher('graph_395', $$ MATCH (p:Project)-[:Has]->(t:Task)-[:AssignedTo]->(u:Person) WITH p, t, collect(u) AS users WITH p, {tn: t.name, users: users} AS task RETURN task $$) AS (p agtype); SELECT * FROM cypher('graph_395', $$ MATCH (p:Project)-[:Has]->(t:Task)-[:AssignedTo]->(u:Person) WITH p, t, collect(u) AS users WITH p, {tn: t.name, users: users} AS task WITH p, collect(task) AS tasks RETURN tasks $$) AS (p agtype); SELECT * FROM cypher('graph_395', $$ MATCH (p:Project)-[:Has]->(t:Task)-[:AssignedTo]->(u:Person) WITH p, t, collect(u) AS users WITH p, {tn: t.name, users: users} AS task WITH p, collect(task) AS tasks WITH {pn: p.name, tasks:tasks} AS project RETURN project $$) AS (p agtype); -- -- issue 1044 - array functions not recognizing vpc -- -- size SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE size(vle_array) > 0 RETURN vle_array $$) AS (vle_array agtype); SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE size(vle_array) > 1 RETURN vle_array $$) AS (vle_array agtype); SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE size(vle_array) > 2 RETURN vle_array $$) AS (vle_array agtype); SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE size(vle_array) = size(vle_array) RETURN vle_array $$) AS (vle_array agtype); -- head SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() RETURN head(vle_array) $$) AS (head agtype); SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE head(vle_array) = vle_array[0] RETURN vle_array $$) AS (head agtype); SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE head(vle_array) = vle_array[size(vle_array) - size(vle_array)] RETURN vle_array $$) AS (head agtype); SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE head(vle_array) = head([vle_array[0]]) RETURN vle_array LIMIT 1 $$) AS (head agtype); -- last SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() RETURN last(vle_array) $$) AS (head agtype); SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE last(vle_array) = vle_array[0] RETURN vle_array $$) AS (head agtype); SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE last(vle_array) = vle_array[size(vle_array)-1] RETURN vle_array $$) AS (head agtype); SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE last(vle_array) = head([vle_array[size(vle_array)-1]]) RETURN vle_array LIMIT 1 $$) AS (head agtype); -- isEmpty SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE isEmpty(vle_array) RETURN vle_array $$) AS (head agtype); SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE isEmpty(vle_array) = false RETURN vle_array $$) AS (head agtype); SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE isEmpty(vle_array[0..0]) RETURN vle_array $$) AS (head agtype); SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE isEmpty([vle_array[3]]) = false RETURN vle_array $$) AS (head agtype); -- reverse SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() RETURN reverse(vle_array) $$) as (u agtype); SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]-() WHERE reverse(vle_array)[0] = last(vle_array) RETURN reverse(vle_array) $$) as (u agtype); -- IN operator SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]->() WHERE vle_array[0] IN vle_array RETURN vle_array $$) AS (a agtype); -- access slice SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]->() WHERE vle_array[0..1] = [vle_array[0]] RETURN vle_array $$) AS (a agtype); SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]->() WHERE vle_array[1..2] = [last(vle_array)] RETURN vle_array $$) AS (a agtype); SELECT * FROM cypher('expr', $$ MATCH ()-[vle_array *]->() WHERE vle_array[0..1] = [vle_array[0], vle_array[1]] RETURN vle_array $$) AS (a agtype); --- --- Fix: Segmentation fault when using specific names for tables #1124 --- --- The following are just a few commands to test SQLValueFunction types --- SELECT count(*) FROM CURRENT_ROLE; SELECT count(*) FROM CURRENT_USER; SELECT count(*) FROM USER; SELECT count(*) FROM SESSION_USER; SELECT * FROM CURRENT_CATALOG; SELECT * FROM CURRENT_SCHEMA; SELECT * FROM create_graph('issue_1124'); SELECT results, pg_typeof(user) FROM cypher('issue_1124', $$ CREATE (u) RETURN u $$) AS (results agtype), user; SELECT results, pg_typeof(user) FROM cypher('issue_1124', $$ MATCH (u) RETURN u $$) AS (results agtype), user; -- -- issue 1303: segmentation fault on queries like SELECT * FROM agtype(null); -- -- Test Const and CoerceViaIO expression node types SELECT * FROM agtype(null); SELECT * FROM agtype('1'); SELECT * FROM agtype('[1, 2, 3]'); SELECT * FROM agtype('{"a": 1}'); SELECT * FROM agtype('{"id": 844424930131971, "label": "v", "properties": {"i": 1}}::vertex'); SELECT * FROM agtype('{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge'); SELECT * FROM agtype('[{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex]::path'); SELECT * FROM text(1); SELECT * FROM text('1'); SELECT * FROM int4(1); SELECT * FROM json('1'); SELECT * FROM jsonb('1'); SELECT * FROM bytea('1'); -- Test Var expression node types SELECT create_graph('issue_1303'); SELECT result, agtype('[1, 2, 3]') FROM cypher('issue_1303', $$ CREATE (u) RETURN u $$) AS (result agtype); SELECT result, result2, pg_typeof(result2) FROM cypher('issue_1303', $$ MATCH (u) RETURN u $$) AS (result agtype), agtype('[1, 2, 3]') AS result2; SELECT result, result2, pg_typeof(result2) FROM cypher('issue_1303', $$ MATCH (u) RETURN u $$) AS (result agtype), text(1) AS result2; SELECT result, result2, pg_typeof(result2), result3, pg_typeof(result3) FROM cypher('issue_1303', $$ MATCH (u) RETURN u $$) AS (result agtype), text(1) AS result2, agtype(result) AS result3; SELECT result, result2, pg_typeof(result2), result3, pg_typeof(result3) FROM cypher('issue_1303', $$ MATCH (u) RETURN u $$) AS (result agtype), text(1) AS result2, agtype(result2) AS result3; -- Text OpExpr expression node types SELECT * FROM agtype('[1, 2, 3]'::agtype || '[5, 6, 7]'); SELECT * FROM agtype('[1, 2, 3]'::agtype -> 2); SELECT * FROM agtype('{"a": 1, "b": 2}'::agtype -> 'a'::text); -- Text BoolExpr expression node types SELECT * FROM bool(true AND false); -- Issue 1329 -- returns 1 SELECT agtype_to_int2(bool('true')); SELECT agtype_to_int4(bool('true')); SELECT agtype_to_int8(bool('true')); -- returns 0 SELECT agtype_to_int2(bool('false')); SELECT agtype_to_int4(bool('false')); SELECT agtype_to_int8(bool('false')); -- should error SELECT agtype_to_int2(bool('neither')); SELECT agtype_to_int4(bool('neither')); SELECT agtype_to_int8(bool('neither')); -- -- Cleanup -- SELECT * FROM drop_graph('issue_1124', true); SELECT * FROM drop_graph('issue_1303', true); SELECT * FROM drop_graph('graph_395', true); SELECT * FROM drop_graph('chained', true); SELECT * FROM drop_graph('VLE', true); SELECT * FROM drop_graph('case_statement', true); SELECT * FROM drop_graph('opt_forms', true); SELECT * FROM drop_graph('type_coercion', true); SELECT * FROM drop_graph('order_by', true); SELECT * FROM drop_graph('group_by', true); SELECT * FROM drop_graph('UCSC', true); SELECT * FROM drop_graph('expr', true); SELECT * FROM drop_graph('regex', true); SELECT * FROM drop_graph('keys', true); SELECT * FROM drop_graph('list', true); -- -- End of tests -- age-PG16-v1.5.0-rc0/regress/sql/graph_generation.sql000066400000000000000000000054101454606241200221060ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path = ag_catalog; SELECT * FROM create_complete_graph('gp1',5,'edges','vertices'); SELECT COUNT(*) FROM gp1."edges"; SELECT COUNT(*) FROM gp1."vertices"; SELECT * FROM cypher('gp1', $$MATCH (a)-[e]->(b) RETURN e$$) as (n agtype); SELECT * FROM create_complete_graph('gp1',5,'edges','vertices'); SELECT COUNT(*) FROM gp1."edges"; SELECT COUNT(*) FROM gp1."vertices"; SELECT * FROM create_complete_graph('gp2',5,'edges'); -- SHOULD FAIL SELECT * FROM create_complete_graph('gp3',5, NULL); SELECT * FROM create_complete_graph('gp4',NULL,NULL); SELECT * FROM create_complete_graph(NULL,NULL,NULL); -- Should error out because same labels are used for both vertices and edges SELECT * FROM create_complete_graph('gp5',5,'label','label'); -- DROPPING GRAPHS SELECT drop_graph('gp1', true); SELECT drop_graph('gp2', true); -- Tests for barbell graph generation SELECT * FROM age_create_barbell_graph('gp1',5,0,'vertices',NULL,'edges',NULL); SELECT COUNT(*) FROM gp1."edges"; SELECT COUNT(*) FROM gp1."vertices"; SELECT * FROM cypher('gp1', $$MATCH (a)-[e]->(b) RETURN e$$) as (n agtype); SELECT * FROM age_create_barbell_graph('gp1',5,0,'vertices',NULL,'edges',NULL); SELECT COUNT(*) FROM gp1."edges"; SELECT COUNT(*) FROM gp1."vertices"; SELECT * FROM age_create_barbell_graph('gp2',5,10,'vertices',NULL,'edges',NULL); -- SHOULD FAIL SELECT * FROM age_create_barbell_graph(NULL,NULL,NULL,NULL,NULL,NULL,NULL); SELECT * FROM age_create_barbell_graph('gp2',NULL,0,'vertices',NULL,'edges',NULL); SELECT * FROM age_create_barbell_graph('gp3',5,NULL,'vertices',NULL,'edges',NULL); SELECT * FROM age_create_barbell_graph('gp4',NULL,0,'vertices',NULL,'edges',NULL); SELECT * FROM age_create_barbell_graph('gp5',5,0,'vertices',NULL,NULL,NULL); -- Should error out because same labels are used for both vertices and edges SELECT * FROM age_create_barbell_graph('gp6',5,10,'label',NULL,'label',NULL); -- DROPPING GRAPHS SELECT drop_graph('gp1', true); SELECT drop_graph('gp2', true); age-PG16-v1.5.0-rc0/regress/sql/graphid.sql000066400000000000000000000034131454606241200202110ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; -- basic comparisons SELECT '0'::graphid = '0'::graphid, '0'::graphid = '1'::graphid; SELECT '0'::graphid <> '0'::graphid, '0'::graphid <> '1'::graphid; SELECT '0'::graphid < '1'::graphid, '0'::graphid < '0'::graphid, '1'::graphid < '0'::graphid; SELECT '0'::graphid > '1'::graphid, '0'::graphid > '0'::graphid, '1'::graphid > '0'::graphid; SELECT '0'::graphid <= '1'::graphid, '0'::graphid <= '0'::graphid, '1'::graphid <= '0'::graphid; SELECT '0'::graphid >= '1'::graphid, '0'::graphid >= '0'::graphid, '1'::graphid >= '0'::graphid; -- b-tree index CREATE TABLE graphid_table (gid graphid); INSERT INTO graphid_table VALUES ('0'), ('1'), ('2'); CREATE INDEX ON graphid_table (gid); SET enable_seqscan = OFF; EXPLAIN (COSTS FALSE) SELECT * FROM graphid_table WHERE gid = '1'; EXPLAIN (COSTS FALSE) SELECT * FROM graphid_table WHERE gid > '0'; SET enable_seqscan = ON; DROP TABLE graphid_table; age-PG16-v1.5.0-rc0/regress/sql/index.sql000066400000000000000000000217431454606241200177100ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ \! cp -r regress/age_load/data regress/instance/data/age_load LOAD 'age'; SET search_path TO ag_catalog; SET enable_mergejoin = ON; SET enable_hashjoin = ON; SET enable_nestloop = ON; SET enable_seqscan = false; SELECT create_graph('cypher_index'); /* * Section 1: Unique Index on Properties */ --Section 1 Setup SELECT create_vlabel('cypher_index', 'idx'); CREATE UNIQUE INDEX cypher_index_idx_props_uq ON cypher_index.idx(properties); --Test 1 SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); --Clean Up SELECT * FROM cypher('cypher_index', $$ MATCH(n) DETACH DELETE n $$) AS (a agtype); --Test 2 SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}), (:idx {i: 1}) $$) AS (a agtype); --Clean Up SELECT * FROM cypher('cypher_index', $$ MATCH(n) DETACH DELETE n $$) AS (a agtype); --Test 3 --Data Setup SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); SELECT * FROM cypher('cypher_index', $$ CREATE (:idx) $$) AS (a agtype); --Query SELECT * FROM cypher('cypher_index', $$ MATCH(n) SET n.i = 1$$) AS (a agtype); --Clean Up SELECT * FROM cypher('cypher_index', $$ MATCH(n) DETACH DELETE n $$) AS (a agtype); --Test 4 --create a vertex with i = 1 SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); --delete the vertex SELECT * FROM cypher('cypher_index', $$ MATCH(n) DETACH DELETE n $$) AS (a agtype); --we should be able to create a new vertex with the same value SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); --data cleanup SELECT * FROM cypher('cypher_index', $$ MATCH(n) DETACH DELETE n $$) AS (a agtype); /* * Test 5 * * Same queries as Test 4, only in 1 transaction */ BEGIN TRANSACTION; --create a vertex with i = 1 SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); --delete the vertex SELECT * FROM cypher('cypher_index', $$ MATCH(n) DETACH DELETE n $$) AS (a agtype); --we should be able to create a new vertex with the same value SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); COMMIT; --data cleanup SELECT * FROM cypher('cypher_index', $$ MATCH(n) DETACH DELETE n $$) AS (a agtype); --Test 6 --create a vertex with i = 1 SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); -- change the value SELECT * FROM cypher('cypher_index', $$ MATCH(n) SET n.i = 2 $$) AS (a agtype); --we should be able to create a new vertex with the same value SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); --validate the data SELECT * FROM cypher('cypher_index', $$ MATCH(n) RETURN n $$) AS (a agtype); --data cleanup SELECT * FROM cypher('cypher_index', $$ MATCH(n) DETACH DELETE n $$) AS (a agtype); /* * Test 7 * * Same queries as Test 6, only in 1 transaction */ BEGIN TRANSACTION; --create a vertex with i = 1 SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); -- change the value SELECT * FROM cypher('cypher_index', $$ MATCH(n) SET n.i = 2 $$) AS (a agtype); --we should be able to create a new vertex with the same value SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); --validate the data SELECT * FROM cypher('cypher_index', $$ MATCH(n) RETURN n $$) AS (a agtype); COMMIT; --validate the data again out of the transaction, just in case SELECT * FROM cypher('cypher_index', $$ MATCH(n) RETURN n $$) AS (a agtype); --data cleanup SELECT * FROM cypher('cypher_index', $$ MATCH(n) DETACH DELETE n $$) AS (a agtype); --Test 8 --create a vertex with i = 1 SELECT * FROM cypher('cypher_index', $$ CREATE (:idx {i: 1}) $$) AS (a agtype); -- Use Merge and force an index error SELECT * FROM cypher('cypher_index', $$ MATCH(n) MERGE (n)-[:e]->(:idx {i: n.i}) $$) AS (a agtype); --data cleanup SELECT * FROM cypher('cypher_index', $$ MATCH(n) DETACH DELETE n $$) AS (a agtype); /* * Section 2: Graphid Indices to Improve Join Performance */ SELECT * FROM cypher('cypher_index', $$ CREATE (us:Country {name: "United States", country_code: "US", life_expectancy: 78.79, gdp: 20.94::numeric}), (ca:Country {name: "Canada", country_code: "CA", life_expectancy: 82.05, gdp: 1.643::numeric}), (mx:Country {name: "Mexico", country_code: "MX", life_expectancy: 75.05, gdp: 1.076::numeric}), (us)<-[:has_city]-(:City {city_id: 1, name:"New York", west_coast: false, country_code:"US"}), (us)<-[:has_city]-(:City {city_id: 2, name:"San Fransisco", west_coast: true, country_code:"US"}), (us)<-[:has_city]-(:City {city_id: 3, name:"Los Angeles", west_coast: true, country_code:"US"}), (us)<-[:has_city]-(:City {city_id: 4, name:"Seattle", west_coast: true, country_code:"US"}), (ca)<-[:has_city]-(:City {city_id: 5, name:"Vancouver", west_coast: true, country_code:"CA"}), (ca)<-[:has_city]-(:City {city_id: 6, name:"Toronto", west_coast: false, country_code:"CA"}), (ca)<-[:has_city]-(:City {city_id: 7, name:"Montreal", west_coast: false, country_code:"CA"}), (mx)<-[:has_city]-(:City {city_id: 8, name:"Mexico City", west_coast: false, country_code:"MX"}), (mx)<-[:has_city]-(:City {city_id: 9, name:"Monterrey", west_coast: false, country_code:"MX"}), (mx)<-[:has_city]-(:City {city_id: 10, name:"Tijuana", west_coast: false, country_code:"MX"}) $$) as (n agtype); ALTER TABLE cypher_index."Country" ADD PRIMARY KEY (id); CREATE UNIQUE INDEX CONCURRENTLY cntry_id_idx ON cypher_index."Country" (id); ALTER TABLE cypher_index."Country" CLUSTER ON cntry_id_idx; ALTER TABLE cypher_index."City" ADD PRIMARY KEY (id); CREATE UNIQUE INDEX city_id_idx ON cypher_index."City" (id); ALTER TABLE cypher_index."City" CLUSTER ON city_id_idx; ALTER TABLE cypher_index.has_city ADD CONSTRAINT has_city_end_fk FOREIGN KEY (end_id) REFERENCES cypher_index."Country"(id) MATCH FULL; CREATE INDEX load_has_city_eid_idx ON cypher_index.has_city (end_id); CREATE INDEX load_has_city_sid_idx ON cypher_index.has_city (start_id); ALTER TABLE cypher_index."has_city" CLUSTER ON load_has_city_eid_idx; SET enable_mergejoin = ON; SET enable_hashjoin = OFF; SET enable_nestloop = OFF; SELECT COUNT(*) FROM cypher('cypher_index', $$ MATCH (a:Country)<-[e:has_city]-() RETURN e $$) as (n agtype); SET enable_mergejoin = OFF; SET enable_hashjoin = ON; SET enable_nestloop = OFF; SELECT COUNT(*) FROM cypher('cypher_index', $$ MATCH (a:Country)<-[e:has_city]-() RETURN e $$) as (n agtype); SET enable_mergejoin = OFF; SET enable_hashjoin = OFF; SET enable_nestloop = ON; SELECT COUNT(*) FROM cypher('cypher_index', $$ MATCH (a:Country)<-[e:has_city]-() RETURN e $$) as (n agtype); SET enable_mergejoin = ON; SET enable_hashjoin = ON; SET enable_nestloop = ON; -- -- Section 3: Agtype GIN Indices to Improve WHERE clause Performance -- CREATE INDEX load_city_gin_idx ON cypher_index."City" USING gin (properties); CREATE INDEX load_country_gin_idx ON cypher_index."Country" USING gin (properties); SELECT * FROM cypher('cypher_index', $$ MATCH (c:City {city_id: 1}) RETURN c $$) as (n agtype); SELECT * FROM cypher('cypher_index', $$ MATCH (:Country {country_code: "US"})<-[]-(city:City) RETURN city $$) as (n agtype); SELECT * FROM cypher('cypher_index', $$ MATCH (c:City {west_coast: true}) RETURN c $$) as (n agtype); SELECT * FROM cypher('cypher_index', $$ MATCH (c:Country {life_expectancy: 82.05}) RETURN c $$) as (n agtype); SELECT * FROM cypher('cypher_index', $$ MATCH (c:Country {gdp: 20.94::numeric}) RETURN c $$) as (n agtype); DROP INDEX cypher_index.load_city_gin_idx; DROP INDEX cypher_index.load_country_gin_idx; -- -- Section 4: Index use with WHERE clause -- SELECT COUNT(*) FROM cypher('cypher_index', $$ MATCH (a:City) WHERE a.country_code = 'RS' RETURN a $$) as (n agtype); CREATE INDEX CONCURRENTLY cntry_ode_idx ON cypher_index."City" (ag_catalog.agtype_access_operator(properties, '"country_code"'::agtype)); SELECT COUNT(*) FROM cypher('agload_test_graph', $$ MATCH (a:City) WHERE a.country_code = 'RS' RETURN a $$) as (n agtype); -- -- General Cleanup -- SELECT drop_graph('cypher_index', true); SELECT drop_graph('agload_test_graph', true); age-PG16-v1.5.0-rc0/regress/sql/issue_369.sql000066400000000000000000000025331454606241200203260ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('cypher'); SELECT * from cypher('cypher', $$ CREATE (a {x:1})-[:foo]->(b {x:2}),(c {x:3}) $$) as (v0 agtype); SELECT * from cypher('cypher', $$ MATCH ()-[a:foo]->(), (b {x:2}),(c {x:3}) MERGE (b)-[d:bar]->(c) RETURN d $$) as (v0 agtype); SELECT * from cypher('cypher', $$ MATCH (x)-[a:foo]->(), (b {x:2}),(c {x:3}) MERGE (b)-[d:bar]->(c) RETURN d $$) as (v0 agtype); SELECT * from cypher('cypher', $$ MATCH ()-[a:foo]->(y), (b {x:2}),(c {x:3}) MERGE (b)-[d:bar]->(c) RETURN d $$) as (v0 agtype); age-PG16-v1.5.0-rc0/regress/sql/jsonb_operators.sql000066400000000000000000001656531454606241200220230ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; -- -- jsonb operators in AGE (?, ?&, ?|, ->, ->>, #>, #>>, ||, @>, <@) -- -- -- Agtype exists operator -- -- exists (?) -- should return 't' SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '"n"'; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '"a"'; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '"b"'; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '"d"'; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ? '"label"'; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ? '"n"'; SELECT '["1","2"]'::agtype ? '"1"'; SELECT '["hello", "world"]'::agtype ? '"hello"'; SELECT agtype_exists('{"id": 1}','id'::text); SELECT '{"id": 1}'::agtype ? 'id'::text; -- should return 'f' SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '"e"'; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '"e1"'; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '"1"'; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '1'; SELECT '[{"id": 281474976710658, "label": "", "properties": {"n": 100}}]'::agtype ? '"id"'; SELECT '[{"id": 281474976710658, "label": "", "properties": {"n": 100}}]'::agtype ? 'null'; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ? 'null'; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ? 'null'; SELECT '["hello", "world"]'::agtype ? '"hell"'; SELECT agtype_exists('{"id": 1}','not_id'::text); SELECT '{"id": 1}'::agtype ? 'not_id'::text; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '["e1", "n"]'; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '["n"]'; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '["n", "a", "e"]'; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '{"n": null}'; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '{"n": null, "b": true}'; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? '["e1"]'; -- errors out SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? 'e1'; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ? 'e'; -- Exists any (?|) -- should return 't' SELECT '{"a":null, "b":"qq"}'::agtype ?| '["a","b"]'; SELECT '{"a":null, "b":"qq"}'::agtype ?| '["b","a"]'; SELECT '{"a":null, "b":"qq"}'::agtype ?| '["c","a"]'; SELECT '{"1":null, "b":"qq"}'::agtype ?| '["c","1"]'; SELECT '{"a":null, "b":"qq"}'::agtype ?| '["a","a", "b", "b", "b"]'::agtype; SELECT '[1,2,3]'::agtype ?| '[1,2,3,4]'; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?| '[null,"id"]'::agtype; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?| '["id",null]'::agtype; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?| '[true,"id"]'::agtype; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?| '[1,"id"]'::agtype; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?| '[null,null,"n"]'::agtype; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?| '["n",null]'::agtype; SELECT agtype_exists_any('{"id": 1}', array['id']); SELECT '{"id": 1}'::agtype ?| array['id']; -- should return 'f' SELECT '{"a":null, "b":"qq"}'::agtype ?| '["c","d"]'; SELECT '{"a":null, "b":"qq"}'::agtype ?| '["1","2"]'; SELECT '{"a":null, "b":"qq"}'::agtype ?| '["c","1"]'; SELECT '{"a":null, "b":"qq"}'::agtype ?| '[]'; SELECT '{"a":null, "b":"qq"}'::agtype ?| '["c","d"]'::agtype; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?| '[null]'; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?| '[]'; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?| '[null,null]'::agtype; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?| '[null, "idk"]'; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?| '[""]'; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex' ?| '[null,"idk"]'::agtype; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ?| '[null,null,"idk"]'::agtype; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ?| '["idk",null]'::agtype; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?| '[null]'; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?| '[]'; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?| '[null,null]'::agtype; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?| '[[""]]'; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?| '[null,null, "idk"]'::agtype; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?| '[null,null,"idk"]'::agtype; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?| '["start_idk",null]'::agtype; SELECT '{"a":null, "b":"qq"}'::agtype ?| '[["a"], ["b"]]'; SELECT '{"a":null, "b":"qq"}'::agtype ?| '[["a"], ["b"], ["c"]]'; SELECT '[null]'::agtype ?| '[null]'::agtype; SELECT agtype_exists_any('{"id": 1}', array['not_id']); SELECT '{"id": 1}'::agtype ?| array['not_id']; -- errors out SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ?| '"b"'; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ?| '"d"'; SELECT '{"a":null, "b":"qq"}'::agtype ?| '{"a", "b"}'; SELECT '{"a":null, "b":"qq"}'::agtype ?| ''; SELECT '{"a":null, "b":"qq"}'::agtype ?| '""'; SELECT '{"a":null, "b":"qq"}'::agtype ?| '{""}'; SELECT '{"a":null, "b":"qq"}'::agtype ?| '{}'; SELECT '{"a":null, "b":"qq"}'::agtype ?| '0'::agtype; SELECT '{"a":null, "b":"qq"}'::agtype ?| '0'; -- Exists all (?&) -- should return 't' SELECT '{"a":null, "b":"qq"}'::agtype ?& '["a","b"]'; SELECT '{"a":null, "b":"qq"}'::agtype ?& '["b","a"]'; SELECT '{"a":null, "b":"qq"}'::agtype ?& '["a","a", "b", "b", "b"]'::agtype; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?& '[null]'; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?& '[]'; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?& '[null,null]'::agtype; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?& '[null,null,"id"]'::agtype; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?& '["id",null]'::agtype; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ?& '[null]'::agtype; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ?& '[]'; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ?& '[null,null]'::agtype; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ?& '[null,null,"n"]'::agtype; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ?& '["n",null]'::agtype; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?& '[null]'; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?& '[]'; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?& '[null,null]'::agtype; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?& '[null,null,"n"]'::agtype; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?& '["n",null]'::agtype; SELECT '[1,2,3]'::agtype ?& '[1,2,3]'; SELECT '[1,2,3]'::agtype ?& '[1,2,3,null]'; SELECT '[1,2,3]'::agtype ?& '[null, null]'; SELECT '[1,2,3]'::agtype ?& '[null, null, null]'; SELECT '[1,2,3]'::agtype ?& '[]'; SELECT '{"a":null, "b":"qq"}'::agtype ?& '[]'; SELECT '[null]'::agtype ?& '[null]'::agtype; SELECT agtype_exists_all('{"id": 1}', array['id']); SELECT '{"id": 1}'::agtype ?& array['id']; -- should return 'f' SELECT '{"a":null, "b":"qq"}'::agtype ?& '["c","a"]'; SELECT '{"a":null, "b":"qq"}'::agtype ?& '["a","b", "c"]'; SELECT '{"a":null, "b":"qq"}'::agtype ?& '["c","d"]'::agtype; SELECT '[1,2,3]'::agtype ?& '[1,2,3,4]'; SELECT '{"a":null, "b":"qq"}'::agtype ?& '[["a"]]'; SELECT '{"a":null, "b":"qq"}'::agtype ?& '[["a"], ["b"]]'; SELECT '{"a":null, "b":"qq"}'::agtype ?& '[["a"], ["b"], ["c"]]'; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?& '[null, "idk"]'; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?& '[""]'; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex' ?& '[null,"idk"]'::agtype; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ?& '[null,null,"idk"]'::agtype; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'::agtype ?& '["idk",null]'::agtype; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?& '[1,"id"]'::agtype; SELECT '{"id": 281474976710658, "label": "", "properties": {"n": 100}}'::agtype ?& '[true,"id"]'::agtype; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?& '[null, "idk"]'; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?& '[[""]]'; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?& '[null,null, "idk"]'::agtype; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?& '[null,null,"idk"]'::agtype; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"n": 100}}::edge'::agtype ?& '["start_idk",null]'::agtype; SELECT '{"a":null, "b":"qq"}'::agtype ?& '[null, "c", "a"]'; SELECT agtype_exists_all('{"id": 1}', array['not_id']); SELECT '{"id": 1}'::agtype ?& array['not_id']; -- errors out SELECT '{"a":null, "b":"qq"}'::agtype ?& '"d"'; SELECT '{"a":null, "b":"qq"}'::agtype ?& '"a"'; SELECT '{"a":null, "b":"qq"}'::agtype ?& '" "'; SELECT '{"a":null, "b":"qq"}'::agtype ?& '""'; SELECT '{"a":null, "b":"qq"}'::agtype ?& '"null"'; SELECT '{"a":null, "b":"qq"}'::agtype ?& '{"a", "b", "c"}'; SELECT '{"a":null, "b":"qq"}'::agtype ?& '{}'; SELECT '{"a":null, "b":"qq"}'::agtype ?& '{""}'; SELECT '{"a":null, "b":"qq"}'::agtype ?& '{null}'; SELECT '{"a":null, "b":"qq"}'::agtype ?& '{"null"}'; -- -- Agtype access operators (->, ->>) -- SELECT i, pg_typeof(i) FROM (SELECT '{"bool":true, "array":[1,3,{"bool":false, "int":3, "float":3.14},7], "float":3.14}'::agtype->'array'::text->2->'float'::text as i) a; SELECT i, pg_typeof(i) FROM (SELECT '{"bool":true, "array":[1,3,{"bool":false, "int":3, "float":3.14},7], "float":3.14}'::agtype->'array'::text->2->>'float'::text as i) a; SELECT i, pg_typeof(i) FROM (SELECT '[0, 1]'::agtype->0 as i) a; SELECT i, pg_typeof(i) FROM (SELECT '[0, 1]'::agtype->>0 as i) a; /* * access agtype object field or array element (->) */ -- LHS is an object SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype -> '"n"'::agtype; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype -> '"a"'::agtype; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype -> '"b"'::agtype; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype -> '"c"'::agtype; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype -> '"d"'::agtype; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype -> '"d"'::agtype -> '"1"'::agtype; SELECT '{"a": [-1, -2, -3]}'::agtype -> 'a'::text; SELECT '{"a": 9, "b": 11, "c": {"ca": [[], {}, null]}, "d": true, "1": false}'::agtype -> '"1"'::text::agtype; SELECT '{"a": true, "b": null, "c": -1.99, "d": {"e": []}, "1": [{}, [[[]]]], " ": [{}]}'::agtype -> ' '::text; SELECT '{"a": true, "b": null, "c": -1.99, "d": {"e": []}, "1": [{}, [[[]]]], " ": [{}]}'::agtype -> '" "'::agtype; -- should return null SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype -> '"e"'::agtype; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}, "1": -19}'::agtype -> '1'::agtype; SELECT '{"a": [{"b": "c"}, {"b": "cc"}]}'::agtype -> '""'::agtype; SELECT '{"a": [{"b": "c"}, {"b": "cc"}]}'::agtype -> null::text; SELECT '{"a": [{"b": "c"}, {"b": "cc"}]}'::agtype -> null::int; SELECT '{"a": [-1, -2, -3]}'::agtype -> '"a"'::text; SELECT '{"a": 9, "b": 11, "c": {"ca": [[], {}, null]}, "d": true, "1": false}'::agtype -> '1'::text::agtype; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"automatically":{"1":[2,3]}}'::agtype -> '"n"'::agtype -> '"1"'::agtype; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"automatically":{"1":[2,3]}}'::agtype -> '"n"'::agtype -> 1::text; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"automatically":{"1":[2,3]}}'::agtype -> '"n"'::agtype -> '"a"'; SELECT 'null'::agtype -> '"1"'; -- LHS is an array SELECT '["a","b","c",[1,2],null]'::agtype -> '0'::agtype; SELECT '["a","b","c",[1,2],null]'::agtype -> 1; SELECT '["a","b","c",[1,2],null]'::agtype -> '2'::agtype; SELECT '["a","b","c",[1,2],null]'::agtype -> 3; SELECT '["a","b","c",[1,2],null]'::agtype -> '3'::agtype -> '1'::agtype; SELECT '["a","b","c",[1,2],null]'::agtype -> '3'::agtype -> '-1'::agtype; SELECT '["a","b","c",[1,2],null]'::agtype -> '3'::agtype -> -1; SELECT '["a","b","c",[1,2],null]'::agtype -> 4; SELECT '["a","b","c",[1,2],null]'::agtype -> '-1'::agtype; SELECT '["a","b","c",[1,2],null]'::agtype -> '-5'::agtype; SELECT '[1, 2, 3]'::agtype -> '1'::text::agtype; SELECT '[1, 2, 3]'::agtype -> '1'::text::agtype::int; SELECT '[1, 2, 3]'::agtype -> '1'::text::agtype::int::bool::int; SELECT '[1, 2, 3]'::agtype -> '1'::text::int; SELECT '[1, "e", {"a": 1}, {}, [{}, {}, -9]]'::agtype -> true::int; SELECT '[1, "e", {"a": 1}, {}, [{}, {}, -9]]'::agtype -> 1.9::int; SELECT '[1, "e", {"a": 1}, {}, [{}, {}, -9]]'::agtype -> 1.1::int; SELECT 'true'::agtype -> 0.1::int; SELECT 'true'::agtype -> 0; SELECT 'true'::agtype -> false::int; SELECT 'true'::agtype -> 0.1::int::bool::int; SELECT '[1, 9]'::agtype -> -1.2::int; SELECT 'true'::agtype -> 0.1::bigint::int; -- should return null SELECT '["a","b","c",[1,2],null]'::agtype -> '5'::agtype; SELECT '["a","b","c",[1,2],null]'::agtype -> '-6'::agtype; SELECT '["a","b","c",[1,2],null]'::agtype -> '"a"'::agtype; SELECT '"foo"'::agtype -> '1'::agtype; SELECT '[1, 2, 3, "string", {"a": 1}, {"a": []}]'::agtype -> '5'::text; SELECT '[1, 2, 3]'::agtype -> '[1]'; SELECT '[1, "e", {"a": 1}, {}, [{}, {}, -9]]'::agtype -> '{"a": 1}'::agtype; SELECT 'true'::agtype -> 0::text; SELECT 'true'::agtype -> false::int::text; -- LHS is vertex/edge/path SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype -> '"a"'; SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype -> '"e"' -> 'g'::text; SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype -> '"e"' -> 'h'::text -> -1; SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype -> '"e"' -> 'h'::text -> -1 -> 0; SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype -> '"id"'; -- access array element nested inside object or object field nested inside array on LHS SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype -> '"d"'::agtype -> '"1"'::agtype -> '1'::agtype; SELECT '{"a": 9, "b": 11, "c": {"ca": [[], {}, null]}, "d": true}'::agtype -> 'c'::text -> '"ca"'::agtype -> 0; SELECT '{"a":[1, 2, 3], "b": {"c": ["cc", "cd"]}}'::agtype -> '"b"'::agtype -> 'c'::text -> 1 -> 0; SELECT '{"a":[1, 2, 3], "b": {"c": 1}}'::agtype -> '"b"'::agtype -> 1; /* * access agtype object field or array element as text (->>) */ -- LHS is an object SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ->> '"a"'::agtype; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype ->> '"d"'::agtype; SELECT '{"1": -1.99, "a": 1, "b": 2, "c": {"d": [{}, [[[], [9]]]]}, "1": true}'::agtype ->> '"1"'; SELECT '{"1": -1.99, "a": 1, "b": 2, "c": {"d": [{}, [[[], [9]]]]}, "1": true}'::agtype ->> '1'::text; -- should return null SELECT '{"1": -1.99, "a": 1, "b": 2, "c": {"d": [{}, [[[], [9]]]]}, "1": true}'::agtype ->> 1; SELECT '{"1": -1.99, "a": 1, "b": 2, "c": {"d": [{}, [[[], [9]]]]}, "1": true}'::agtype ->> '1'; SELECT '{"a": [{"b": "c"}, {"b": "cc"}]}'::agtype ->> null::text; SELECT '{"a": [{"b": "c"}, {"b": "cc"}]}'::agtype ->> null::int; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"automatically":{"1":[2,3]}}'::agtype -> '"n"'::agtype ->> '"1"'::agtype; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"automatically":{"1":[2,3]}}'::agtype -> '"n"'::agtype ->> 1::text; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"automatically":{"1":[2,3]}}'::agtype -> '"n"'::agtype ->> '"a"'; SELECT 'null'::agtype ->> '"1"'; -- LHS is an array SELECT '["a","b","c",[1,2],null]'::agtype ->> 0; SELECT '["a","b","c",[1,2],null]'::agtype ->> '1'::agtype; SELECT '["a","b","c",[1,2],null]'::agtype ->> '2'::int; SELECT '["a","b","c",[1,2],null]'::agtype ->> 3::int; SELECT '["a","b","c",[1,2],null]'::agtype ->> '4'::agtype; SELECT '[1, 2, "e", true, null, {"a": true, "b": {}, "c": [{}, [[], {}]]}, null]'::agtype ->> 0.1::float::bigint::int; SELECT '"foo"'::agtype ->> '0'::agtype; SELECT '[false, {}]'::agtype ->> 1::bool::int::bigint::int; -- should return null SELECT '["a","b","c",[1,2],null]'::agtype ->> '-1'::agtype; SELECT '[1, 2, "e", true, null, {"a": true, "b": {}, "c": [{}, [[], {}]]}, null]'::agtype ->> 2::text; SELECT '[1, 2, "e", true, null, {"a": true, "b": {}, "c": [{}, [[], {}]]}, null]'::agtype ->> '2'::text; SELECT '[1, 2, "e", true, null, {"a": true, "b": {}, "c": [{}, [[], {}]]}, null]'::agtype ->> 'null'::text; SELECT '"foo"'::agtype ->> '1'::agtype; -- LHS is vertex/edge/path SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype ->> '"a"'; SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype ->> '"id"'; -- using -> and ->> in single query SELECT '{"1": -1.99, "a": 1, "b": 2, "c": {"d": [{}, [[[], [9]]]]}}'::agtype -> '"1"' ->> '0'; SELECT '["a","b","c",[1,2],null]'::agtype -> '3'::agtype ->> '1'::agtype; SELECT ('["a","b","c",[1,2],null]'::agtype -> '3'::agtype) ->> 0; SELECT '{"n":null,"a":1,"b":[1,2],"c":{"1":2},"d":{"1":[2,3]}}'::agtype -> '"d"'::agtype ->> '1'::agtype; SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype -> '"e"' -> 'h'::text -> -1 ->> 0; -- should give error SELECT '["a","b","c",[1,2],null]'::agtype ->> '3'::agtype ->> '1'::agtype; SELECT '["a","b","c",[1,2],null]'::agtype ->> '3'::agtype -> '1'::agtype; SELECT '[1, 2, "e", true, null, {"a": true, "b": {}, "c": [{}, [[], {}]]}, null]'::agtype ->> 0.1::float::bigint; SELECT '{"a": [{"b": "c"}, {"b": "cc"}]}'::agtype ->> "'z'"::agtype; -- -- Agtype path extraction operators (#>, #>>) -- /* * #> operator to return the extracted value as agtype */ SELECT pg_typeof('{"a":"b","c":[1,2,3]}'::agtype #> '["a"]'); SELECT pg_typeof('[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[-1,"5"]'); -- left operand is agtype object, right operand should be an array of strings SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '["a"]'; SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '["c"]'; SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '[]'; SELECT '{"0": true}'::agtype #> '["0"]'; SELECT '{"a":"b","c":{"d": [1,2,3]}}'::agtype #> '["c", "d"]'; SELECT '{"a":"b","c":{"d": {"e": -1}}}'::agtype #> '["c", "d", "e"]'; -- left operand is vertex/edge/path, right operand should be an array of strings SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype #> '[]'; SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype #> '["e", "h", -2]'; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"a": "xyz", "b" : true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::edge'::agtype #> '[]'; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"a": "xyz", "b" : true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::edge'::agtype #> '["i", "k", "l"]'; -- left operand is agtype array, right operand should be an array of integers or valid integer strings SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[0]'; SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[4]'; SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[]'; SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[-2]'; SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[-2, -1]'; SELECT '[[-3, 1]]'::agtype #> '[0, 1]'; SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '["0"]'; SELECT '[[-3, 1]]'::agtype #> '["0", "1"]'; SELECT '[[-3, 1]]'::agtype #> '["0", 1]'; SELECT '[[-3, 1]]'::agtype #> '["0", "-1"]'; -- path extraction pattern for arrays nested in object or object nested in array as left operand -- having object at top level SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '["c",0]'; SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '["c",-3]'; SELECT '{"a":["b"],"c":[1,2,3]}'::agtype #> '["a", 0]'; SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3]]]}'::agtype #> '["1", 2, 0, 0]'; SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": true}]]]}'::agtype #> '["1", -1, -1, -1, "a"]'; SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a"]'; SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a", "c"]'; SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a", "b", "d", -2]'; -- having array at top level SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[4,"5"]'; SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[-1,"5"]'; SELECT '[0,1,2,[3,4],{"5":["five", "six"]}]'::agtype #> '[-1,"5",-1]'; -- should return null SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '[0]'; SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '["c",3]'; SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '["c","3"]'; SELECT '{"a":"b","c":[1,2,3,4]}'::agtype #> '["c",4]'; SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '["c",-4]'; SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '["a","b"]'; SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '["a","c"]'; SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '["a", []]'; SELECT '{"a":["b"],"c":[1,2,3]}'::agtype #> '["a", []]'; SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a", "c", "d"]'; SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a", "b", "d", -2, 0]'; SELECT '{"0": true}'::agtype #> '[0]'; SELECT '{"a":"b","c":[1,2,3]}'::agtype #> '[null]'; SELECT '{}'::agtype #> '[null]'; SELECT '{}'::agtype #> '[{}]'; SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype #> '["id"]'; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"a": "xyz", "b" : true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::edge'::agtype #> '["start_id"]'; SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[4,5]'; SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[-1,5]'; SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[3, -1, 0]'; SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[{}]'::agtype; SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[{"5":"five"}]'::agtype; SELECT '[0,1,2,[3,4],{"5":"five"},6,7]'::agtype #> '["6", "7"]'::agtype; SELECT '[0,1,2,[3,4],{"5":"five"},6,7]'::agtype #> '[6, 7]'::agtype; SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #> '[null]'; SELECT '[null]'::agtype #> '[null]'; SELECT '[]'::agtype #> '[null]'; SELECT '[[-3, 1]]'::agtype #> '["0", "1.1"]'; SELECT '[[-3, 1]]'::agtype #> '["0", "true"]'; SELECT '[[-3, 1]]'::agtype #> '["0", "string"]'; SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a", "b", "d", "false"]'; SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a", "b", "d", "a"]'; -- errors out SELECT '{"0": true}'::agtype #> '"0"'; SELECT '{"n": 1}'::agtype #> '{"n": 1}'; SELECT '[{"n": 1}]'::agtype #> '{"n": 1}'; SELECT '[{"n": 100}]'::agtype #> '{"id": 281474976710658, "label": "", "properties": {"n": 100}}::vertex'; SELECT '-19'::agtype #> '[-1]'::agtype; SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype #> '"a"'; /* * #>> operator to return the extracted value as text */ SELECT pg_typeof('{"a":"b","c":[1,2,3]}'::agtype #>> '["a"]'); SELECT pg_typeof('[0,1,2,[3,4],{"5":"five"}]'::agtype #>> '[-1,"5"]'); /* * All the tests added for #> are also valid for #>> */ /* * test the combination of #> and #>> operators below * (left and right operands have to be agtype for #> and #>>, * errors out when left operand is a text, i.e., the output of #>> operator) */ SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a"]' #> '["b", "d", -1]'; SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a"]' #> '["b", "d", "-1"]'; SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a"]' #>> '["b", "d", -1]'; SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #> '["1", -1, -1, -1, "a"]' #>> '["b", "d", "-1"]'; SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype #> '["e"]' #>> '["h", "-1"]'; SELECT '{"id": 1125899906842625, "label": "Vertex", "properties": {"a": "xyz", "b": true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::vertex'::agtype #> '["e"]' #> '["h", "-1"]' #>> '[]'; SELECT '[[-3, [1]]]'::agtype #> '["0", "1"]' #>> '[]'; SELECT '[[-3, [1]]]'::agtype #> '["0", "1"]' #>> '[-1]'; -- errors out SELECT '[0,1,2,[3,4],{"5":"five"}]'::agtype #>> '[-1, "5"]' #> '[]'; SELECT '{"a":"b","c":[1,2,3], "1" : [{}, {}, [[-3, {"a": {"b": {"d": [-1.9::numeric, false]}, "c": "foo"}}]]]}'::agtype #>> '["1", -1, -1, -1, "a"]' #> '["b", "d", -1]'; -- -- concat || operator -- SELECT i, pg_typeof(i) FROM (SELECT '[0, 1]'::agtype || '[0, 1]'::agtype as i) a; SELECT i, pg_typeof(i) FROM (SELECT '2'::agtype || '[0, 1]'::agtype as i) a; SELECT i, pg_typeof(i) FROM (SELECT '[0, 1]'::agtype || '2'::agtype as i) a; SELECT i, pg_typeof(i) FROM (SELECT '{"a": 1}'::agtype || '[0, 1]'::agtype as i) a; SELECT i, pg_typeof(i) FROM (SELECT '[0, 1]'::agtype || '{"a": 1}'::agtype as i) a; SELECT i, pg_typeof(i) FROM (SELECT '[]'::agtype || '[0, 1]'::agtype as i) a; SELECT i, pg_typeof(i) FROM (SELECT '[0, 1]'::agtype || '[]'::agtype as i) a; SELECT i, pg_typeof(i) FROM (SELECT 'null'::agtype || '[0, 1]'::agtype as i) a; SELECT i, pg_typeof(i) FROM (SELECT '[0, 1]'::agtype || 'null'::agtype as i) a; SELECT i, pg_typeof(i) FROM (SELECT '[null]'::agtype || '[0, 1]'::agtype as i) a; SELECT i, pg_typeof(i) FROM (SELECT '[0, 1]'::agtype || '[null]'::agtype as i) a; SELECT i, pg_typeof(i) FROM (SELECT NULL || '[0, 1]'::agtype as i) a; SELECT i, pg_typeof(i) FROM (SELECT '[0, 1]'::agtype || NULL as i) a; -- both operands are objects SELECT '{"aa":1 , "b":2, "cq":3}'::agtype || '{"cq":"l", "b":"g", "fg":false}'; SELECT '{"aa":1 , "b":2, "cq":3}'::agtype || '{"aq":"l"}'; SELECT '{"aa":1 , "b":2, "cq":3}'::agtype || '{"aa":"l"}'; SELECT '{"aa":1 , "b":2, "cq":3}'::agtype || '{}'; SELECT '{"aa":1 , "b":2, "cq":3, "cj": {"fg": true}}'::agtype || '{"cq":"l", "b":"g", "fg":false}'; SELECT '{"a": 13}'::agtype || '{"a": 13}'::agtype; SELECT '{}'::agtype || '{"a":"b"}'::agtype; SELECT '{}'::agtype || '{}'::agtype; -- both operands are arrays SELECT '["a", "b"]'::agtype || '["c"]'; SELECT '["a", "b"]'::agtype || '["c", "d"]'; SELECT '["a", "b"]'::agtype || '["c", "d", "d"]'; SELECT '["c"]' || '["a", "b"]'::agtype; SELECT '[]'::agtype || '["a"]'::agtype; SELECT '[]'::agtype || '[]'::agtype; SELECT '["a", "b"]'::agtype || '"c"'; SELECT '"c"' || '["a", "b"]'::agtype; SELECT '[]'::agtype || '"a"'::agtype; SELECT '"b"'::agtype || '"a"'::agtype; SELECT '3'::agtype || '[]'::agtype; SELECT '3'::agtype || '4'::agtype; SELECT '3'::agtype || '[4]'; SELECT '3::numeric'::agtype || '[[]]'::agtype; SELECT null::agtype || null::agtype; -- array and object as operands SELECT '{"aa":1 , "b":2, "cq":3}'::agtype || '[{"aa":"l"}]'; SELECT '{"aa":1 , "b":2, "cq":3}'::agtype || '[{"aa":"l", "aa": "k"}]'; SELECT '{"a": 13}'::agtype || '[{"a": 13}]'::agtype; SELECT '[]'::agtype || '{"a":"b"}'::agtype; SELECT '{"a":"b"}'::agtype || '[]'::agtype; SELECT '[]'::agtype || '{}'::agtype; SELECT '[3]'::agtype || '{}'::agtype; SELECT '{}'::agtype || '[null]'::agtype; SELECT '[null]'::agtype || '{"a": null}'::agtype; SELECT '""'::agtype || '[]'::agtype; -- vertex/edge/path as operand(s) SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"a": "xyz", "b" : true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::edge'::agtype || '"id"'; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"a": "xyz", "b" : true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::edge'::agtype || '"m"'; SELECT '{"id": 1688849860263937, "label": "EDGE", "end_id": 1970324836974593, "start_id": 1407374883553281, "properties": {"a": "xyz", "b" : true, "c": -19.888, "e": {"f": "abcdef", "g": {}, "h": [[], {}]}, "i": {"j": 199, "k": {"l": "mnopq"}}}}::edge'::agtype || '{"m": []}'; SELECT '{"id": 844424930131969, "label": "v", "properties": {}}::vertex'::agtype || '{"id": 844424930131971, "label": "v", "properties": {"key": "value"}}::vertex'::agtype; SELECT '{"id": 844424930131969, "label": "v", "properties": {}}::vertex'::agtype || '[]'::agtype; SELECT '{"id": 844424930131969, "label": "v", "properties": {}}::vertex'::agtype || '{}'::agtype; SELECT '{}'::agtype || '{"id": 844424930131969, "label": "v", "properties": {}}::vertex'::agtype; SELECT '"id"'::agtype || '{"id": 844424930131969, "label": "v", "properties": {}}::vertex'::agtype; SELECT '{"id": 844424930131969, "label": "v", "properties": {}}::vertex'::agtype || '{"id": 1688849860263950, "label": "e_var", "end_id": 281474976710662, "start_id": 281474976710661, "properties": {}}::edge'::agtype; SELECT '[{"id": 281474976710672, "label": "", "properties": {}}::vertex, {"id": 1688849860263960, "label": "e_var", "end_id": 281474976710673, "start_id": 281474976710672, "properties": {}}::edge, {"id": 281474976710673, "label": "", "properties": {}}::vertex]::path'::agtype || '{"id": 844424930131969, "label": "v", "properties": {}}::vertex'::agtype; SELECT '[{"id": 281474976710672, "label": "", "properties": {}}::vertex, {"id": 1688849860263960, "label": "e_var", "end_id": 281474976710673, "start_id": 281474976710672, "properties": {}}::edge, {"id": 281474976710673, "label": "", "properties": {}}::vertex]::path'::agtype || '[{"id": 281474976710672, "label": "", "properties": {}}::vertex, {"id": 1688849860263960, "label": "e_var", "end_id": 281474976710673, "start_id": 281474976710672, "properties": {}}::edge, {"id": 281474976710673, "label": "", "properties": {}}::vertex]::path'::agtype; -- using concat more than once in a query SELECT '{}'::agtype || '{}'::agtype || '[{}]'::agtype; SELECT '{"y": {}}'::agtype || '{"b": "5"}'::agtype || '{"a": {}}'::agtype || '{"z": []}'::agtype; SELECT '{"y": {}}'::agtype || '{"b": "5"}'::agtype || '{"a": {}}'::agtype || '{"z": []}'::agtype || '[]'::agtype; SELECT '{"y": {}}'::agtype || '{"b": "5"}'::agtype || '{"a": {}}'::agtype || '{"z": []}'::agtype || '[]'::agtype || '{}'; SELECT '"e"'::agtype || '1'::agtype || '{}'::agtype; SELECT ('"e"'::agtype || '1'::agtype) || '{"[]": "p"}'::agtype; SELECT '{"{}": {"a": []}}'::agtype || '{"{}": {"[]": []}}'::agtype || '{"{}": {}}'::agtype; SELECT '{}'::agtype || '{}'::agtype || '[{}]'::agtype || '[{}]'::agtype || '{}'::agtype; -- should give an error SELECT '{"a": 13}'::agtype || 'null'::agtype; SELECT '"a"'::agtype || '{"a":1}'; SELECT '3'::agtype || '{}'::agtype; SELECT '{"a":1}' || '"a"'::agtype; SELECT '{"b": [1, 2, {"[{}, {}]": "a"}, {"1": {}}]}'::agtype || true::agtype; SELECT '{"b": [1, 2, {"[{}, {}]": "a"}, {"1": {}}]}'::agtype || 'true'::agtype; SELECT '{"b": [1, 2, {"[{}, {}]": "a"}, {"1": {}}]}'::agtype || age_agtype_sum('1', '2'); SELECT ('{"a": "5"}'::agtype || '{"a": {}}'::agtype) || '5'::agtype; SELECT ('{"a": "5"}'::agtype || '{"a": {}}'::agtype || '5') || '[5]'::agtype; -- both operands have to be of agtype SELECT '3'::agtype || 4; SELECT '3'::agtype || true; -- -- Agtype containment operator -- /* * right contains @> operator */ -- returns true SELECT '{"a":"b", "b":1, "c":null}'::agtype @> '{"a":"b"}'; SELECT '{"a":"b", "b":1, "c":null}'::agtype @> '{"a":"b", "c":null}'; SELECT '{"a":"b", "b":1, "c":null}'::agtype @> '{}'; SELECT '{"name": "Bob", "tags": ["enim", "qui"]}'::agtype @> '{"tags":["qui"]}'; SELECT '{"name": "Bob", "tags": ["enim", "qui"]}'::agtype @> '{"tags":[]}'; SELECT '[1,2]'::agtype @> '[1,2,2]'::agtype; SELECT '[1,1,2]'::agtype @> '[1,2,2]'::agtype; SELECT '[[1,2]]'::agtype @> '[[1,2,2]]'::agtype; SELECT '[1,2,2]'::agtype @> '[]'::agtype; SELECT '[[1,2]]'::agtype @> '[[]]'::agtype; SELECT '[[1,2]]'::agtype @> '[[1,2,2], []]'::agtype; SELECT '{"id": 281474976710657, "label": "", "properties": {"name": "A"}}::vertex'::agtype @> '{"name": "A"}'; SELECT '{"name": "A"}' @> '{"id": 281474976710657, "label": "", "properties": {"name": "A"}}::vertex'::agtype; SELECT '{"id": 281474976710657, "label": "", "properties": {"name": "A"}}::vertex'::agtype @> '{"id": 281474976710657, "label": "", "properties": {"name": "A"}}::vertex'; SELECT agtype_contains('{"id": 1}','{"id": 1}'); SELECT agtype_contains('[1, 2, 3]','[3, 3]'); -- In general, one thing should always contain itself SELECT '["9", ["7", "3"], 1]'::agtype @> '["9", ["7", "3"], 1]'::agtype; SELECT '{"a":"b", "b":1, "c":null}'::agtype @> '{"a":"b", "b":1, "c":null}'; -- returns false SELECT '{"a":"b", "b":1, "c":null}'::agtype @> '{"a":"b", "g":null}'; SELECT '{"a":"b", "b":1, "c":null}'::agtype @> '{"g":null}'; SELECT '{"a":"b", "b":1, "c":null}'::agtype @> '{"a":"c"}'; SELECT '{"a":"b", "b":1, "c":null}'::agtype @> '{"a":"b", "c":"q"}'; SELECT '{"a":"b", "b":1, "c":null}'::agtype @> '[]'; SELECT '{"name": "Bob", "tags": ["enim", "qui"]}'::agtype @> '{"tags":{}}'; SELECT '[1,1,2]'::agtype @> '[1,2,[2]]'::agtype; SELECT '[1,2,2]'::agtype @> '{}'::agtype; SELECT '[[1,2]]'::agtype @> '[[{}]]'::agtype; SELECT '[[1,2]]'::agtype @> '[[1,2,2, []], []]'::agtype; SELECT '[[1,2]]'::agtype @> '[[1,2,2, []], [[]]]'::agtype; SELECT agtype_contains('{"id": 1}','{"id": 2}'); SELECT agtype_contains('[1, 2, 3]','[3, 3, []]'); -- Raw scalar may contain another raw scalar, array may contain a raw scalar SELECT '[5]'::agtype @> '[5]'; SELECT '5'::agtype @> '5'; SELECT '[5]'::agtype @> '5'; -- But a raw scalar cannot contain an array SELECT '5'::agtype @> '[5]'; -- object/array containment is different from agtype_string_match_contains SELECT '{ "name": "Bob", "tags": [ "enim", "qui"]}'::agtype @> '{"tags":["qu"]}'; /* * left contains <@ operator */ -- returns true SELECT '{"a":"b"}'::agtype <@ '{"a":"b", "b":1, "c":null}'; SELECT '{"a":"b", "c":null}'::agtype <@ '{"a":"b", "b":1, "c":null}'; SELECT '[1,2,2]'::agtype <@ '[1,2]'::agtype; SELECT '[1,2,2]'::agtype <@ '[1,1,2]'::agtype; SELECT '[[1,2,2]]'::agtype <@ '[[1,2]]'::agtype; SELECT '[]'::agtype <@ '[1,2,2]'::agtype; SELECT '{"name": "A"}' <@ '{"id": 281474976710657, "label": "", "properties": {"name": "A"}}::vertex'::agtype; SELECT '{"id": 281474976710657, "label": "", "properties": {"name": "A"}}::vertex'::agtype <@ '{"name": "A"}'; SELECT '{"id": 281474976710657, "label": "", "properties": {"name": "A"}}::vertex'::agtype <@ '{"id": 281474976710657, "label": "", "properties": {"name": "A"}}::vertex'; SELECT agtype_contained_by('{"id": 1}','{"id": 1}'); -- returns false SELECT '[1,2,2]'::agtype <@ '[]'::agtype; SELECT '{"a":"b", "g":null}'::agtype <@ '{"a":"b", "b":1, "c":null}'; SELECT '{"g":null}'::agtype <@ '{"a":"b", "b":1, "c":null}'; SELECT '{"a":"c"}'::agtype <@ '{"a":"b", "b":1, "c":null}'; SELECT '{"id": 281474976710657, "label": "", "properties": {"name": "A"}}::vertex'::agtype <@ '{"id": 281474976710657, "label": "", "properties": {"name": "B"}}::vertex'; SELECT agtype_contained_by('{"id": 1}','{"id": 2}'); -- In general, one thing should always contain itself SELECT '["9", ["7", "3"], ["1"]]'::agtype <@ '["9", ["7", "3"], ["1"]]'::agtype; SELECT '{"a":"b", "b":1, "c":null}'::agtype <@ '{"a":"b", "b":1, "c":null}'; -- -- jsonb operators inside cypher queries -- SELECT create_graph('jsonb_operators'); SELECT * FROM cypher('jsonb_operators',$$CREATE ({list:['a', 'b', 'c'], json:{a:1, b:['a', 'b'], c:{d:'a'}}})$$) as (a agtype); /* * ?, ?|, ?& key existence operators */ -- Exists (?) -- should return true SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ? 'list' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json ? 'a' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.list ? 'c' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.b ? 'a' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.c ? 'd' $$) as (a agtype); -- should return false SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ? 'a' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json ? 'd' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.list ? 'd' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.b ? 'c' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.c ? 'e' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ? [] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ? ['d'] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ? {d: 'e'} $$) as (a agtype); -- Exists (?|) -- should return true SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| ['list'] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| ['list', 'd'] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| ['json', 'a'] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| ['list', 'json'] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.b ?| ['a'] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.b ?| ['a', 'b'] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.c ?| ['d'] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.c ?| ['d', 'e'] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| keys(n) $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json ?| keys(n.json) $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return [n.json ?| keys(n.json)] ?| [true] $$) as (a agtype); -- should return false SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| [] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| ['a', 'b'] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.b ?| [] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.c ?| ['c'] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| [['list']] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| keys(n.json) $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json ?| keys(n) $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return [n.json ?| keys(n.json)] ?| [false] $$) as (a agtype); -- errors out SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| 'list' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?| n $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& 1 $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& '' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& '1' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& '{}' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& n.json $$) as (a agtype); -- Exists (?&) -- should return true SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& ['list', 'json'] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.b ?& ['a', 'b'] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.c ?& ['d'] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& keys(n) $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json ?& keys(n.json) $$) as (a agtype); -- should return false SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& [] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& ['a', 'b'] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.b ?& [] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.b ?& ['a', 'b', 'c'] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n.json.c ?& ['d', 'e'] $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& [['list']] $$) as (a agtype); -- errors out SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& 'list' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& 1 $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& '' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& '1' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& n $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& '{}' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n ?& n.json $$) as (a agtype); -- -- agtype access operator (->) -- SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->-1 $$) AS r(result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->1 $$) AS r(result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->-4 $$) AS r(result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->-4->'array' $$) AS r(result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->-4->'array'->-2->'bool' $$) AS r(result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->-4->'array'->-2->'bool'->-1 $$) AS r(result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->(size(lst)-1) $$) AS r(result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->(size(lst)%size(lst)) $$) AS r(result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->-4->'array'->-2->'float' $$) AS r(result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->-4->'array'->-2->'float'->0 $$) AS r(result agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'a' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'a'->-1 $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'b' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'b'->-2 $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'b'->1 $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'c' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'c'->0 $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'c'->'d' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'c'->'d'->-1->0 $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'list' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'list'->-1 $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'list'->2->0 $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) WITH n->'list' AS lst RETURN lst $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) WITH n->'list' AS lst RETURN lst->0 $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) WITH n->'list' AS lst RETURN lst->(size(lst)-1) $$) as (a agtype); -- should return null SELECT * FROM cypher('jsonb_operators', $$ WITH [1, {bool: true, int: 3, array: [9, 11, {bool: false, float: 3.14}, 13]}, 5, 7, 9] as lst RETURN lst->(size(lst)) $$) AS r(result agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'d' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'list'->'c' $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) WITH n->'list' AS lst RETURN lst->(size(lst)) $$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) return n->'json'->'b'->'a' $$) as (a agtype); -- -- path extraction #> operator -- SELECT * FROM cypher('jsonb_operators', $$ WITH {json: {a: 1, b: ['a', 'b'], c: {d: ['a']}}, list: ['a', 'b', 'c']} AS map RETURN map #> [] $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH {json: {a: 1, b: ['a', 'b'], c: {d: ['a']}}, list: ['a', 'b', 'c']} AS map RETURN map #> ['json', 'c', 'd'] $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH {json: {a: 1, b: ['a', 'b'], c: {d: ['a']}}, list: ['a', 'b', 'c']} AS map RETURN map #> ['json', 'c', 'd', -1] $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH {json: {a: 1, b: ['a', 'b'], c: {d: ['a']}}, list: ['a', 'b', 'c']} AS map RETURN map #> ['json', 'c', 'd', -1, -1] $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH {json: {a: 1, b: ['a', 'b'], c: {d: ['a']}}, list: ['a', 'b', 'c']} AS map RETURN map #> ['list', "-1"] $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH {json: {a: 1, b: ['a', 'b'], c: {d: ['a']}}, list: ['a', 'b', ['c', 'd']]} AS map RETURN map #> ['list', "-1", "-1"] $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH {json: {a: 1, b: ['a', 'b'], c: {d: ['a']}}, list: ['a', 'b', ['c', 'd']]} AS map RETURN map #> ['list', "-1", -1] $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH [[-3, 1]] AS list RETURN list #> [] $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH [[-3, 1]] AS list RETURN list #> [0] $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH [[-3, 1]] AS list RETURN list #> [-1, -1] $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH [[-3, 1]] AS list RETURN list #> [-1, -1, -1] $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH [[-3, 1]] AS list RETURN list #> [{}] $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH [null] AS list RETURN list #> [] $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH [null] AS list RETURN list #> [-1, -1, -1] $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH [] AS list RETURN list #> [] $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH [] AS list RETURN list #> ["a", 1] $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> []$$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["json"]$$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["jsonb"]$$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["json", "a"]$$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["json", "a", 0]$$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["json", "b"]$$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["json", "b", -1]$$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["json", "b", "-1"]$$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["json", "b", -1, 0]$$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["json", "c"]$$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["json", "c", "d"]$$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ["json", "c", "d", -1]$$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ['list', -1]$$) as (a agtype); SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> ['list', 4]$$) as (a agtype); -- errors out SELECT * FROM cypher('jsonb_operators',$$MATCH (n) RETURN n #> "json"$$) as (a agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH {json: {a: 1, b: ['a', 'b'], c: {d: ['a']}}, list: ['a', 'b', 'c']} AS map RETURN map #> 'jsonb' $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH [[-3, 1]] AS list RETURN list #> 0 $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH 3 AS elem RETURN elem #> [0] $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH 'string' AS elem RETURN elem #> [0] $$) AS (result agtype); -- -- concat || operator -- SELECT * FROM cypher('jsonb_operators', $$ RETURN [1,2] || 2 $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ RETURN true || false $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ RETURN true || false || {a: 'string'} $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ RETURN true || false || {a: 'string'} || true $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH [1,2,3] AS m WITH m, m || 'string' AS n RETURN n $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH [1,2,3] AS m WITH m, m || {a: 1::numeric} AS n RETURN n $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH {a: [1,2,3]} AS m WITH m, m || {a: 1::numeric} AS n RETURN n $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH {b: [1,2,3]} AS m WITH m, m || {a: 1::numeric} AS n RETURN n $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH(n) RETURN n || 1 || 'string' $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH(n) RETURN n || {list: [true, null]} $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) MATCH(m) RETURN n || m $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) RETURN n.list || [1, 2, 3] $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) RETURN n.json || [1, 2, 3] $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) RETURN n.json || n.json $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) RETURN n.json || n $$) AS (result agtype); -- should give an error SELECT * FROM cypher('jsonb_operators', $$ RETURN true || {a: 'string'} || true $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ WITH 'b' AS m WITH m, m || {a: 1} AS n RETURN n $$) AS (result agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) RETURN n.json || 1 $$) AS (result agtype); /* * @> and <@ contains operators */ -- right contains @> operator SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE n @> {json: {a: 1, b: ["a", "b"], c: {d: "a"}}, list: ["a", "b", "c"]} RETURN n $$) as (a agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE n.json @> {c: {d: "a"}} RETURN n $$) as (a agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE n.json @> {c: {}} RETURN n $$) as (a agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE n.json @> {b: ["a"]} RETURN n $$) as (a agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE n.json @> {b: ["a", "a"]} RETURN n $$) as (a agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE n.list @> [] RETURN n $$) as (a agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE n.list[2] @> "c" RETURN n $$) as (a agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE n @> {} RETURN n $$) as (a agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) RETURN properties(n).json @> {c: {d: "a"}} $$) as (a agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) RETURN properties(n).json @> {c: {d: "b"}} $$) as (a agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE n.json @> {b: ["e"]} RETURN n $$) as (a agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE n.list[2] @> [] RETURN n $$) as (a agtype); -- left contains <@ operator SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) RETURN {c: {d: "a"}} <@ properties(n).json $$) as (a agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE {c: {d: "a"}} <@ n.json RETURN n $$) as (a agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE [] <@ n.list RETURN n $$) as (a agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE {c: {d: "b"}} <@ n.json RETURN n $$) as (a agtype); SELECT * FROM cypher('jsonb_operators', $$ MATCH (n) WHERE [] <@ n.json RETURN n $$) as (a agtype); -- clean up SELECT drop_graph('jsonb_operators', true);age-PG16-v1.5.0-rc0/regress/sql/name_validation.sql000066400000000000000000000102711454606241200217250ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ LOAD 'age'; SET search_path TO ag_catalog; -- -- Test graph names -- -- length -- invalid (length < 3) SELECT create_graph('db'); -- valid (though length > 63, it's truncated automatically before reaching validation function) SELECT create_graph('oiblpsacrufgxiilyevvoiblpsacrufgxiilyevvoiblpsacrufgxiilyevvsdss'); -- valid SELECT create_graph('mydatabase'); -- numeric characters -- invalid (first character numeric; only alphabetic allowed) SELECT create_graph('2mydatabase'); -- valid SELECT create_graph('mydatabase2'); -- special characters -- invalid (newline character) SELECT create_graph('my database'); -- invalid (space character) SELECT create_graph('my database'); -- invalid (symbol character) SELECT create_graph('my&database'); -- valid (non-ascii alphabet) SELECT create_graph('mydätabase'); SELECT create_graph('mydঅtabase'); -- dots, dashes, underscore -- valid SELECT create_graph('main.db'); -- invalid (ends with dot) SELECT create_graph('main.db.'); -- valid SELECT create_graph('main-db'); -- invalid (ends with dash) SELECT create_graph('main.db-'); -- valid SELECT create_graph('_mydatabase'); SELECT create_graph('my_database'); -- test rename -- invalid SELECT alter_graph('mydatabase', 'RENAME', '1mydatabase'); -- valid SELECT alter_graph('mydatabase', 'RENAME', 'mydatabase1'); -- clean up SELECT drop_graph('mydatabase1', true); SELECT drop_graph('mydätabase', true); SELECT drop_graph('mydঅtabase', true); SELECT drop_graph('mydatabase2', true); SELECT drop_graph('main.db', true); SELECT drop_graph('main-db', true); SELECT drop_graph('_mydatabase', true); SELECT drop_graph('my_database', true); SELECT drop_graph('oiblpsacrufgxiilyevvoiblpsacrufgxiilyevvoiblpsacrufgxiilyevvsds', true); -- -- Test label names -- SELECT create_graph('graph123'); -- length -- invalid SELECT create_vlabel('graph123', ''); SELECT create_elabel('graph123', ''); -- valid SELECT create_vlabel('graph123', 'labelx'); SELECT create_elabel('graph123', 'labely'); -- special characters -- invalid (newline character) SELECT create_vlabel('graph123', 'my label'); SELECT create_elabel('graph123', 'my label'); -- invalid (space character) SELECT create_vlabel('graph123', 'my label'); SELECT create_elabel('graph123', 'my label'); -- invalid (symbol character) SELECT create_vlabel('graph123', 'my&label'); SELECT create_elabel('graph123', 'my&label'); -- valid (non-ascii alphabet) SELECT create_vlabel('graph123', 'myläbelx'); SELECT create_elabel('graph123', 'myläbely'); SELECT create_vlabel('graph123', 'mylঅbelx'); SELECT create_elabel('graph123', 'mylঅbely'); -- valid (underscore) SELECT create_vlabel('graph123', '_labelx'); SELECT create_elabel('graph123', '_labely'); SELECT create_vlabel('graph123', 'label_x'); SELECT create_elabel('graph123', 'label_y'); -- numeric -- invalid SELECT create_vlabel('graph123', '1label'); SELECT create_elabel('graph123', '2label'); -- valid SELECT create_vlabel('graph123', 'label1'); SELECT create_elabel('graph123', 'label2'); -- label creation with cypher -- invalid SELECT * from cypher('graph123', $$ CREATE (a:`my&label`) $$) as (a agtype); SELECT * from cypher('graph123', $$ CREATE (:A)-[:`my&label2`]->(:C) $$) as (a agtype); -- valid SELECT * from cypher('graph123', $$ CREATE (a:`mylabel`) $$) as (a agtype); SELECT * from cypher('graph123', $$ CREATE (:A)-[:`mylabel2`]->(:C) $$) as (a agtype); -- clean up SELECT drop_graph('graph123', true); -- -- End of test -- age-PG16-v1.5.0-rc0/regress/sql/scan.sql000066400000000000000000000237011454606241200175210ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ SET extra_float_digits = 0; LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('scan'); SELECT create_graph('scan'); -- -- multi-line comment -- SELECT * FROM cypher('scan', $$ /* * multi-line comment */ RETURN 0 /**/ $$) AS t(a agtype); SELECT * FROM cypher('scan', $$ /* unterminated /* comment RETURN 0 $$) AS t(a int); -- recover syntax highlighting */ -- -- single-line comment -- SELECT * FROM cypher('scan', $$ // single-line // comment RETURN 0 $$) AS t(a agtype); -- -- decimal integer -- SELECT * FROM cypher('scan', $$ RETURN 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 $$) AS t(a agtype, b agtype, c agtype, d agtype, e agtype, f agtype, g agtype, h agtype, i agtype, j agtype); SELECT * FROM cypher('scan', $$ RETURN 11, 22, 33, 44, 55, 66, 77, 88, 99 $$) AS t(a agtype, b agtype, c agtype, d agtype, e agtype, f agtype, g agtype, h agtype, i agtype); -- 2^31 - 1, 2^31 SELECT * FROM cypher('scan', $$ RETURN 2147483647, 2147483648 $$) AS t(a agtype, b agtype); -- -- octal integer -- SELECT * FROM cypher('scan', $$ RETURN 00, 01, 02, 03, 04, 05, 06, 07, 010 $$) AS t(a agtype, b agtype, c agtype, d agtype, e agtype, f agtype, g agtype, h agtype, i agtype); SELECT * FROM cypher('scan', $$ RETURN 000, 011, 022, 033, 044, 055, 066, 077 $$) AS t(a agtype, b agtype, c agtype, d agtype, e agtype, f agtype, g agtype, h agtype); -- 2^31 - 1, 2^31 SELECT * FROM cypher('scan', $$ RETURN 000000000000, 017777777777, 0020000000000 $$) AS t(a agtype, b agtype, c agtype); -- 2^60 - 1, 2^64 - 1 SELECT * FROM cypher('scan', $$ RETURN 077777777777777777777, 01777777777777777777777 $$) AS t(a agtype, b agtype); -- an invalid character after reading valid digits SELECT * FROM cypher('scan', $$ RETURN 012345678 $$) AS t(a int); -- an invalid character after the leading "0" SELECT * FROM cypher('scan', $$ RETURN 09 $$) AS t(a int); -- -- hexadecimal integer -- SELECT * FROM cypher('scan', $$ RETURN 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9 $$) AS t(a agtype, b agtype, c agtype, d agtype, e agtype, f agtype, g agtype, h agtype, i agtype, j agtype); SELECT * FROM cypher('scan', $$ RETURN 0xA, 0xB, 0xC, 0xD, 0xE, 0xF $$) AS t(a agtype, b agtype, c agtype, d agtype, e agtype, f agtype); SELECT * FROM cypher('scan', $$ RETURN 0X00, 0X11, 0X22, 0X33, 0X44, 0X55, 0X66, 0X77, 0X88, 0X99 $$) AS t(a agtype, b agtype, c agtype, d agtype, e agtype, f agtype, g agtype, h agtype, i agtype, j agtype); SELECT * FROM cypher('scan', $$ RETURN 0XAa, 0XBb, 0XCc, 0XDd, 0XEe, 0xFf $$) AS t(a agtype, b agtype, c agtype, d agtype, e agtype, f agtype); -- 2^31 - 1, 2^31 SELECT * FROM cypher('scan', $$ RETURN 0x00000000, 0x7FFFFFFF, 0x080000000 $$) AS t(a agtype, b agtype, c agtype); -- 10^18, 2^64 - 1 SELECT * FROM cypher('scan', $$ RETURN 0xde0b6b3a7640000, 0xffffffffffffffff $$) AS t(a agtype, b agtype); -- an invalid character after reading valid digits SELECT * FROM cypher('scan', $$ RETURN 0xF~ $$) AS t(a int); -- an invalid character after the leading "0x" SELECT * FROM cypher('scan', $$ RETURN 0x~ $$) AS t(a int); -- "0x" followed by nothing SELECT * FROM cypher('scan', $$ RETURN 0x $$) AS t(a int); -- -- decimal -- SELECT * FROM cypher('scan', $$ RETURN 03., 3.141592, .141592 $$) AS t(a agtype, b agtype, c agtype); -- "0" and ".." SELECT * FROM cypher('scan', $$ RETURN 0.. $$) AS t(a text, b text, c text); -- -- scientific notation -- SELECT * FROM cypher('scan', $$ RETURN 3141592e-6, 3.141592E0, .3141592e+1 $$) AS t(a agtype, b agtype, c agtype); -- invalid exponent parts SELECT * FROM cypher('scan', $$ RETURN 3141592e- $$) AS t(a text); SELECT * FROM cypher('scan', $$ RETURN 3.141592E $$) AS t(a text); SELECT * FROM cypher('scan', $$ RETURN .3141592e+ $$) AS t(a text); -- -- quoted string -- -- a long string SELECT * FROM cypher('scan', $$ RETURN " !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" $$) AS t(a agtype); -- escape sequences SELECT * FROM cypher('scan', $$ RETURN " \" \" ' \' ", ' \' \' " \" ', " / \/ \\ \b \f \n \r \t " $$) AS t(a agtype, b agtype, c agtype); -- invalid escape sequence SELECT * FROM cypher('scan', $$ RETURN "\a" $$) AS t(a text); -- Unicode escape sequences SELECT * FROM cypher('scan', $$ RETURN "\u03A9 (GREEK CAPITAL LETTER OMEGA, U+03A9, Ω)", "\U0001d6e9 (MATHEMATICAL ITALIC CAPITAL THETA, U+1D6E9, 𝛩)", "\ud835\U0000DEF0 (MATHEMATICAL ITALIC CAPITAL OMICRON, U+1D6F0, 𝛰)", "\u002E (FULL STOP, U+002E, .)" $$) AS t(a agtype, b agtype, c agtype, d agtype); -- invalid Unicode surrogate pair (need a low surrogate) SELECT * FROM cypher('scan', $$ RETURN "\uD835" $$) AS t(a text); -- invalid Unicode surrogate pair (not a low surrogate) SELECT * FROM cypher('scan', $$ RETURN "\uD835\u002E" $$) AS t(a text); -- invalid Unicode surrogate pair (need a high surrogate) SELECT * FROM cypher('scan', $$ RETURN "\uDEF0" $$) AS t(a text); -- invalid Unicode escape value (must be less than or equal to 10FFFF) SELECT * FROM cypher('scan', $$ RETURN "\U00110000" $$) AS t(a text); -- unsupported Unicode escape value ('\0' is not allowed) SELECT * FROM cypher('scan', $$ RETURN "\u0000" $$) AS t(a text); -- unsupported Unicode escape value (the server encoding is not UTF8) CREATE DATABASE contrib_regression_age_euc_kr TEMPLATE template0 ENCODING EUC_KR LC_COLLATE 'C' LC_CTYPE 'C'; \c contrib_regression_age_euc_kr CREATE EXTENSION age; LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('scan'); SELECT * FROM cypher('scan', $$ RETURN "\U0001D706" $$) AS t(a text); SELECT drop_graph('scan', true); \c contrib_regression DROP DATABASE contrib_regression_age_euc_kr; LOAD 'age'; SET search_path TO ag_catalog; -- invalid Unicode escape sequence (must be \uXXXX or \UXXXXXXXX) SELECT * FROM cypher('scan', $$ RETURN "\UD835" $$) AS t(a text); SELECT * FROM cypher('scan', $$ RETURN "\uD835\uDEF" $$) AS t(a text); -- unterminated quoted strings SELECT * FROM cypher('scan', $$RETURN "unterminated quoted string$$) AS t(a text); -- recover syntax highlighting " SELECT * FROM cypher('scan', $$RETURN 'unterminated quoted string$$) AS t(a text); -- recover syntax highlighting ' SELECT * FROM cypher('scan', $$RETURN "escape \$$) AS t(a text); -- recover syntax highlighting " SELECT * FROM cypher('scan', $$RETURN "high surrogate \uD835$$) AS t(a text); -- recover syntax highlighting " -- -- identifier -- -- check that they are accepted as identifier (all tests throw an error) SELECT * FROM cypher('scan', $$ RETURN _$09A_z $$) AS t(id text); SELECT * FROM cypher('scan', $$ RETURN A $$) AS t(id text); SELECT * FROM cypher('scan', $$ RETURN z $$) AS t(id text); SELECT * FROM cypher('scan', $$ RETURN `$` $$) AS t(id text); SELECT * FROM cypher('scan', $$ RETURN `0` $$) AS t(id text); SELECT * FROM cypher('scan', $$ RETURN ```` $$) AS t(id text); -- zero-length quoted identifier SELECT * FROM cypher('scan', $$ RETURN `` $$) AS t(a text); SELECT * FROM cypher('scan', $$ RETURN `unterminated quoted identifier $$) AS t(a text); -- recover syntax highlighting ` -- -- parameter -- -- invalid parameter names SELECT * FROM cypher('scan', $cypher$ RETURN $$ $cypher$) AS t(a text); SELECT * FROM cypher('scan', $$ RETURN $0 $$) AS t(a text); SELECT drop_graph('scan', true); age-PG16-v1.5.0-rc0/sql/000077500000000000000000000000001454606241200143775ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/sql/age_aggregate.sql000066400000000000000000000134671454606241200176750ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ -- -- aggregate function components for stdev(internal, agtype) -- and stdevp(internal, agtype) -- -- wrapper for the stdev final function to pass 0 instead of null CREATE FUNCTION ag_catalog.age_float8_stddev_samp_aggfinalfn(_float8) RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; -- wrapper for the float8_accum to use agtype input CREATE FUNCTION ag_catalog.age_agtype_float8_accum(_float8, agtype) RETURNS _float8 LANGUAGE c IMMUTABLE STRICT PARALLEL SAFE AS 'MODULE_PATHNAME'; -- aggregate definition for age_stdev(agtype) CREATE AGGREGATE ag_catalog.age_stdev(agtype) ( stype = _float8, sfunc = ag_catalog.age_agtype_float8_accum, finalfunc = ag_catalog.age_float8_stddev_samp_aggfinalfn, combinefunc = float8_combine, finalfunc_modify = read_only, initcond = '{0,0,0}', parallel = safe ); -- wrapper for the stdevp final function to pass 0 instead of null CREATE FUNCTION ag_catalog.age_float8_stddev_pop_aggfinalfn(_float8) RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; -- aggregate definition for age_stdevp(agtype) CREATE AGGREGATE ag_catalog.age_stdevp(agtype) ( stype = _float8, sfunc = age_agtype_float8_accum, finalfunc = ag_catalog.age_float8_stddev_pop_aggfinalfn, combinefunc = float8_combine, finalfunc_modify = read_only, initcond = '{0,0,0}', parallel = safe ); -- -- aggregate function components for avg(agtype) and sum(agtype) -- -- aggregate definition for avg(agytpe) CREATE AGGREGATE ag_catalog.age_avg(agtype) ( stype = _float8, sfunc = ag_catalog.age_agtype_float8_accum, finalfunc = float8_avg, combinefunc = float8_combine, finalfunc_modify = read_only, initcond = '{0,0,0}', parallel = safe ); -- sum aggtransfn CREATE FUNCTION ag_catalog.age_agtype_sum(agtype, agtype) RETURNS agtype LANGUAGE c IMMUTABLE STRICT PARALLEL SAFE AS 'MODULE_PATHNAME'; -- aggregate definition for sum(agytpe) CREATE AGGREGATE ag_catalog.age_sum(agtype) ( stype = agtype, sfunc = ag_catalog.age_agtype_sum, combinefunc = ag_catalog.age_agtype_sum, finalfunc_modify = read_only, parallel = safe ); -- -- aggregate functions for min(variadic "any") and max(variadic "any") -- -- max transfer function CREATE FUNCTION ag_catalog.age_agtype_larger_aggtransfn(agtype, variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; -- aggregate definition for max(variadic "any") CREATE AGGREGATE ag_catalog.age_max(variadic "any") ( stype = agtype, sfunc = ag_catalog.age_agtype_larger_aggtransfn, combinefunc = ag_catalog.age_agtype_larger_aggtransfn, finalfunc_modify = read_only, parallel = safe ); -- min transfer function CREATE FUNCTION ag_catalog.age_agtype_smaller_aggtransfn(agtype, variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; -- aggregate definition for min(variadic "any") CREATE AGGREGATE ag_catalog.age_min(variadic "any") ( stype = agtype, sfunc = ag_catalog.age_agtype_smaller_aggtransfn, combinefunc = ag_catalog.age_agtype_smaller_aggtransfn, finalfunc_modify = read_only, parallel = safe ); -- -- aggregate functions percentileCont(internal, agtype) and -- percentileDisc(internal, agtype) -- -- percentile transfer function CREATE FUNCTION ag_catalog.age_percentile_aggtransfn(internal, agtype, agtype) RETURNS internal LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; -- percentile_cont final function CREATE FUNCTION ag_catalog.age_percentile_cont_aggfinalfn(internal) RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; -- percentile_disc final function CREATE FUNCTION ag_catalog.age_percentile_disc_aggfinalfn(internal) RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; -- aggregate definition for _percentilecont(agtype, agytpe) CREATE AGGREGATE ag_catalog.age_percentilecont(agtype, agtype) ( stype = internal, sfunc = ag_catalog.age_percentile_aggtransfn, finalfunc = ag_catalog.age_percentile_cont_aggfinalfn, parallel = safe ); -- aggregate definition for percentiledisc(agtype, agytpe) CREATE AGGREGATE ag_catalog.age_percentiledisc(agtype, agtype) ( stype = internal, sfunc = ag_catalog.age_percentile_aggtransfn, finalfunc = ag_catalog.age_percentile_disc_aggfinalfn, parallel = safe ); -- -- aggregate functions for collect(variadic "any") -- -- collect transfer function CREATE FUNCTION ag_catalog.age_collect_aggtransfn(internal, variadic "any") RETURNS internal LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; -- collect final function CREATE FUNCTION ag_catalog.age_collect_aggfinalfn(internal) RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; -- aggregate definition for age_collect(variadic "any") CREATE AGGREGATE ag_catalog.age_collect(variadic "any") ( stype = internal, sfunc = ag_catalog.age_collect_aggtransfn, finalfunc = ag_catalog.age_collect_aggfinalfn, parallel = safe ); age-PG16-v1.5.0-rc0/sql/age_agtype.sql000066400000000000000000000513321454606241200172310ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ -- -- agtype type and its support functions -- -- define agtype as a shell type first CREATE TYPE agtype; CREATE FUNCTION ag_catalog.agtype_in(cstring) RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.agtype_out(agtype) RETURNS cstring LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; -- binary I/O functions CREATE FUNCTION ag_catalog.agtype_send(agtype) RETURNS bytea LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.agtype_recv(internal) RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE TYPE agtype ( INPUT = ag_catalog.agtype_in, OUTPUT = ag_catalog.agtype_out, SEND = ag_catalog.agtype_send, RECEIVE = ag_catalog.agtype_recv, LIKE = jsonb ); -- -- agtype - mathematical operators (+, -, *, /, %, ^) -- CREATE FUNCTION ag_catalog.agtype_add(agtype, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR + ( FUNCTION = ag_catalog.agtype_add, LEFTARG = agtype, RIGHTARG = agtype, COMMUTATOR = + ); CREATE FUNCTION ag_catalog.agtype_any_add(agtype, smallint) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR + ( FUNCTION = ag_catalog.agtype_any_add, LEFTARG = agtype, RIGHTARG = smallint, COMMUTATOR = + ); CREATE FUNCTION ag_catalog.agtype_any_add(smallint, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR + ( FUNCTION = ag_catalog.agtype_any_add, LEFTARG = smallint, RIGHTARG = agtype, COMMUTATOR = + ); CREATE FUNCTION ag_catalog.agtype_any_add(agtype, integer) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR + ( FUNCTION = ag_catalog.agtype_any_add, LEFTARG = agtype, RIGHTARG = integer, COMMUTATOR = + ); CREATE FUNCTION ag_catalog.agtype_any_add(integer, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR + ( FUNCTION = ag_catalog.agtype_any_add, LEFTARG = integer, RIGHTARG = agtype, COMMUTATOR = + ); CREATE FUNCTION ag_catalog.agtype_any_add(agtype, bigint) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR + ( FUNCTION = ag_catalog.agtype_any_add, LEFTARG = agtype, RIGHTARG = bigint, COMMUTATOR = + ); CREATE FUNCTION ag_catalog.agtype_any_add(bigint, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR + ( FUNCTION = ag_catalog.agtype_any_add, LEFTARG = bigint, RIGHTARG = agtype, COMMUTATOR = + ); CREATE FUNCTION ag_catalog.agtype_any_add(agtype, real) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR + ( FUNCTION = ag_catalog.agtype_any_add, LEFTARG = agtype, RIGHTARG = real, COMMUTATOR = + ); CREATE FUNCTION ag_catalog.agtype_any_add(real, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR + ( FUNCTION = ag_catalog.agtype_any_add, LEFTARG = real, RIGHTARG = agtype, COMMUTATOR = + ); CREATE FUNCTION ag_catalog.agtype_any_add(agtype, double precision) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR + ( FUNCTION = ag_catalog.agtype_any_add, LEFTARG = agtype, RIGHTARG = double precision, COMMUTATOR = + ); CREATE FUNCTION ag_catalog.agtype_any_add(double precision, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR + ( FUNCTION = ag_catalog.agtype_any_add, LEFTARG = double precision, RIGHTARG = agtype, COMMUTATOR = + ); CREATE FUNCTION ag_catalog.agtype_any_add(agtype, numeric) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR + ( FUNCTION = ag_catalog.agtype_any_add, LEFTARG = agtype, RIGHTARG = numeric, COMMUTATOR = + ); CREATE FUNCTION ag_catalog.agtype_any_add(numeric, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR + ( FUNCTION = ag_catalog.agtype_any_add, LEFTARG = numeric, RIGHTARG = agtype, COMMUTATOR = + ); CREATE FUNCTION ag_catalog.agtype_sub(agtype, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR - ( FUNCTION = ag_catalog.agtype_sub, LEFTARG = agtype, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_any_sub(agtype, smallint) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR - ( FUNCTION = ag_catalog.agtype_any_sub, LEFTARG = agtype, RIGHTARG = smallint ); CREATE FUNCTION ag_catalog.agtype_any_sub(smallint, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR - ( FUNCTION = ag_catalog.agtype_any_sub, LEFTARG = smallint, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_any_sub(agtype, integer) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR - ( FUNCTION = ag_catalog.agtype_any_sub, LEFTARG = agtype, RIGHTARG = integer ); CREATE FUNCTION ag_catalog.agtype_any_sub(integer, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR - ( FUNCTION = ag_catalog.agtype_any_sub, LEFTARG = integer, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_any_sub(agtype, bigint) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR - ( FUNCTION = ag_catalog.agtype_any_sub, LEFTARG = agtype, RIGHTARG = bigint ); CREATE FUNCTION ag_catalog.agtype_any_sub(bigint, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR - ( FUNCTION = ag_catalog.agtype_any_sub, LEFTARG = bigint, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_any_sub(agtype, real) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR - ( FUNCTION = ag_catalog.agtype_any_sub, LEFTARG = agtype, RIGHTARG = real ); CREATE FUNCTION ag_catalog.agtype_any_sub(real, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR - ( FUNCTION = ag_catalog.agtype_any_sub, LEFTARG = real, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_any_sub(agtype, double precision) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR - ( FUNCTION = ag_catalog.agtype_any_sub, LEFTARG = agtype, RIGHTARG = double precision ); CREATE FUNCTION ag_catalog.agtype_any_sub(double precision, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR - ( FUNCTION = ag_catalog.agtype_any_sub, LEFTARG = double precision, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_any_sub(agtype, numeric) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR - ( FUNCTION = ag_catalog.agtype_any_sub, LEFTARG = agtype, RIGHTARG = numeric ); CREATE FUNCTION ag_catalog.agtype_any_sub(numeric, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR - ( FUNCTION = ag_catalog.agtype_any_sub, LEFTARG = numeric, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_neg(agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR - ( FUNCTION = ag_catalog.agtype_neg, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_mul(agtype, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR * ( FUNCTION = ag_catalog.agtype_mul, LEFTARG = agtype, RIGHTARG = agtype, COMMUTATOR = * ); CREATE FUNCTION ag_catalog.agtype_any_mul(agtype, smallint) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR * ( FUNCTION = ag_catalog.agtype_any_mul, LEFTARG = agtype, RIGHTARG = smallint, COMMUTATOR = * ); CREATE FUNCTION ag_catalog.agtype_any_mul(smallint, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR * ( FUNCTION = ag_catalog.agtype_any_mul, LEFTARG = smallint, RIGHTARG = agtype, COMMUTATOR = * ); CREATE FUNCTION ag_catalog.agtype_any_mul(agtype, integer) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR * ( FUNCTION = ag_catalog.agtype_any_mul, LEFTARG = agtype, RIGHTARG = integer, COMMUTATOR = * ); CREATE FUNCTION ag_catalog.agtype_any_mul(integer, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR * ( FUNCTION = ag_catalog.agtype_any_mul, LEFTARG = integer, RIGHTARG = agtype, COMMUTATOR = * ); CREATE FUNCTION ag_catalog.agtype_any_mul(agtype, bigint) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR * ( FUNCTION = ag_catalog.agtype_any_mul, LEFTARG = agtype, RIGHTARG = bigint, COMMUTATOR = * ); CREATE FUNCTION ag_catalog.agtype_any_mul(bigint, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR * ( FUNCTION = ag_catalog.agtype_any_mul, LEFTARG = bigint, RIGHTARG = agtype, COMMUTATOR = * ); CREATE FUNCTION ag_catalog.agtype_any_mul(agtype, real) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR * ( FUNCTION = ag_catalog.agtype_any_mul, LEFTARG = agtype, RIGHTARG = real, COMMUTATOR = * ); CREATE FUNCTION ag_catalog.agtype_any_mul(real, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR * ( FUNCTION = ag_catalog.agtype_any_mul, LEFTARG = real, RIGHTARG = agtype, COMMUTATOR = * ); CREATE FUNCTION ag_catalog.agtype_any_mul(agtype, double precision) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR * ( FUNCTION = ag_catalog.agtype_any_mul, LEFTARG = agtype, RIGHTARG = double precision, COMMUTATOR = * ); CREATE FUNCTION ag_catalog.agtype_any_mul(double precision, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR * ( FUNCTION = ag_catalog.agtype_any_mul, LEFTARG = double precision, RIGHTARG = agtype, COMMUTATOR = * ); CREATE FUNCTION ag_catalog.agtype_any_mul(agtype, numeric) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR * ( FUNCTION = ag_catalog.agtype_any_mul, LEFTARG = agtype, RIGHTARG = numeric, COMMUTATOR = * ); CREATE FUNCTION ag_catalog.agtype_any_mul(numeric, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR * ( FUNCTION = ag_catalog.agtype_any_mul, LEFTARG = numeric, RIGHTARG = agtype, COMMUTATOR = * ); CREATE FUNCTION ag_catalog.agtype_div(agtype, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR / ( FUNCTION = ag_catalog.agtype_div, LEFTARG = agtype, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_any_div(agtype, smallint) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR / ( FUNCTION = ag_catalog.agtype_any_div, LEFTARG = agtype, RIGHTARG = smallint ); CREATE FUNCTION ag_catalog.agtype_any_div(smallint, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR / ( FUNCTION = ag_catalog.agtype_any_div, LEFTARG = smallint, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_any_div(agtype, integer) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR / ( FUNCTION = ag_catalog.agtype_any_div, LEFTARG = agtype, RIGHTARG = integer ); CREATE FUNCTION ag_catalog.agtype_any_div(integer, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR / ( FUNCTION = ag_catalog.agtype_any_div, LEFTARG = integer, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_any_div(agtype, bigint) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR / ( FUNCTION = ag_catalog.agtype_any_div, LEFTARG = agtype, RIGHTARG = bigint ); CREATE FUNCTION ag_catalog.agtype_any_div(bigint, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR / ( FUNCTION = ag_catalog.agtype_any_div, LEFTARG = bigint, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_any_div(agtype, real) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR / ( FUNCTION = ag_catalog.agtype_any_div, LEFTARG = agtype, RIGHTARG = real ); CREATE FUNCTION ag_catalog.agtype_any_div(real, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR / ( FUNCTION = ag_catalog.agtype_any_div, LEFTARG = real, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_any_div(agtype, double precision) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR / ( FUNCTION = ag_catalog.agtype_any_div, LEFTARG = agtype, RIGHTARG = double precision ); CREATE FUNCTION ag_catalog.agtype_any_div(double precision, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR / ( FUNCTION = ag_catalog.agtype_any_div, LEFTARG = double precision, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_any_div(agtype, numeric) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR / ( FUNCTION = ag_catalog.agtype_any_div, LEFTARG = agtype, RIGHTARG = numeric ); CREATE FUNCTION ag_catalog.agtype_any_div(numeric, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR / ( FUNCTION = ag_catalog.agtype_any_div, LEFTARG = numeric, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_mod(agtype, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR % ( FUNCTION = ag_catalog.agtype_mod, LEFTARG = agtype, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_any_mod(agtype, smallint) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR % ( FUNCTION = ag_catalog.agtype_any_mod, LEFTARG = agtype, RIGHTARG = smallint ); CREATE FUNCTION ag_catalog.agtype_any_mod(smallint, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR % ( FUNCTION = ag_catalog.agtype_any_mod, LEFTARG = smallint, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_any_mod(agtype, integer) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR % ( FUNCTION = ag_catalog.agtype_any_mod, LEFTARG = agtype, RIGHTARG = integer ); CREATE FUNCTION ag_catalog.agtype_any_mod(integer, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR % ( FUNCTION = ag_catalog.agtype_any_mod, LEFTARG = integer, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_any_mod(agtype, bigint) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR % ( FUNCTION = ag_catalog.agtype_any_mod, LEFTARG = agtype, RIGHTARG = bigint ); CREATE FUNCTION ag_catalog.agtype_any_mod(bigint, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR % ( FUNCTION = ag_catalog.agtype_any_mod, LEFTARG = bigint, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_any_mod(agtype, real) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR % ( FUNCTION = ag_catalog.agtype_any_mod, LEFTARG = agtype, RIGHTARG = real ); CREATE FUNCTION ag_catalog.agtype_any_mod(real, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR % ( FUNCTION = ag_catalog.agtype_any_mod, LEFTARG = real, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_any_mod(agtype, double precision) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR % ( FUNCTION = ag_catalog.agtype_any_mod, LEFTARG = agtype, RIGHTARG = double precision ); CREATE FUNCTION ag_catalog.agtype_any_mod(double precision, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR % ( FUNCTION = ag_catalog.agtype_any_mod, LEFTARG = double precision, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_any_mod(agtype, numeric) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR % ( FUNCTION = ag_catalog.agtype_any_mod, LEFTARG = agtype, RIGHTARG = numeric ); CREATE FUNCTION ag_catalog.agtype_any_mod(numeric, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR % ( FUNCTION = ag_catalog.agtype_any_mod, LEFTARG = numeric, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_pow(agtype, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR ^ ( FUNCTION = ag_catalog.agtype_pow, LEFTARG = agtype, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.agtype_concat(agtype, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR || ( FUNCTION = ag_catalog.agtype_concat, LEFTARG = agtype, RIGHTARG = agtype ); CREATE FUNCTION ag_catalog.graphid_hash_cmp(graphid) RETURNS INTEGER LANGUAGE c STABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR CLASS graphid_ops_hash DEFAULT FOR TYPE graphid USING hash AS OPERATOR 1 =, FUNCTION 1 ag_catalog.graphid_hash_cmp(graphid); age-PG16-v1.5.0-rc0/sql/age_main.sql000066400000000000000000000222301454606241200166570ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ -- complain if script is sourced in psql, rather than via CREATE EXTENSION \echo Use "CREATE EXTENSION age" to load this file. \quit -- -- catalog tables -- CREATE TABLE ag_graph ( graphid oid NOT NULL, name name NOT NULL, namespace regnamespace NOT NULL ); CREATE UNIQUE INDEX ag_graph_graphid_index ON ag_graph USING btree (graphid); -- include content of the ag_graph table into the pg_dump output SELECT pg_catalog.pg_extension_config_dump('ag_graph', ''); CREATE UNIQUE INDEX ag_graph_name_index ON ag_graph USING btree (name); CREATE UNIQUE INDEX ag_graph_namespace_index ON ag_graph USING btree (namespace); -- 0 is an invalid label ID CREATE DOMAIN label_id AS int NOT NULL CHECK (VALUE > 0 AND VALUE <= 65535); CREATE DOMAIN label_kind AS "char" NOT NULL CHECK (VALUE = 'v' OR VALUE = 'e'); CREATE TABLE ag_label ( name name NOT NULL, graph oid NOT NULL, id label_id, kind label_kind, relation regclass NOT NULL, seq_name name NOT NULL, CONSTRAINT fk_graph_oid FOREIGN KEY(graph) REFERENCES ag_graph(graphid) ); -- include content of the ag_label table into the pg_dump output SELECT pg_catalog.pg_extension_config_dump('ag_label', ''); CREATE UNIQUE INDEX ag_label_name_graph_index ON ag_label USING btree (name, graph); CREATE UNIQUE INDEX ag_label_graph_oid_index ON ag_label USING btree (graph, id); CREATE UNIQUE INDEX ag_label_relation_index ON ag_label USING btree (relation); CREATE UNIQUE INDEX ag_label_seq_name_graph_index ON ag_label USING btree (seq_name, graph); -- -- catalog lookup functions -- CREATE FUNCTION ag_catalog._label_id(graph_name name, label_name name) RETURNS label_id LANGUAGE c STABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; -- -- utility functions -- CREATE FUNCTION ag_catalog.create_graph(graph_name name) RETURNS void LANGUAGE c AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.drop_graph(graph_name name, cascade boolean = false) RETURNS void LANGUAGE c AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.create_vlabel(graph_name name, label_name name) RETURNS void LANGUAGE c AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.create_elabel(graph_name name, label_name name) RETURNS void LANGUAGE c AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.alter_graph(graph_name name, operation cstring, new_value name) RETURNS void LANGUAGE c AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.drop_label(graph_name name, label_name name, force boolean = false) RETURNS void LANGUAGE c AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.load_labels_from_file(graph_name name, label_name name, file_path text, id_field_exists bool default true) RETURNS void LANGUAGE c AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.load_edges_from_file(graph_name name, label_name name, file_path text) RETURNS void LANGUAGE c AS 'MODULE_PATHNAME'; -- -- graphid type -- -- define graphid as a shell type first CREATE TYPE graphid; CREATE FUNCTION ag_catalog.graphid_in(cstring) RETURNS graphid LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.graphid_out(graphid) RETURNS cstring LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; -- binary I/O functions CREATE FUNCTION ag_catalog.graphid_send(graphid) RETURNS bytea LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.graphid_recv(internal) RETURNS graphid LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE TYPE graphid ( INPUT = ag_catalog.graphid_in, OUTPUT = ag_catalog.graphid_out, SEND = ag_catalog.graphid_send, RECEIVE = ag_catalog.graphid_recv, INTERNALLENGTH = 8, PASSEDBYVALUE, ALIGNMENT = float8, STORAGE = plain ); -- -- graphid - comparison operators (=, <>, <, >, <=, >=) -- CREATE FUNCTION ag_catalog.graphid_eq(graphid, graphid) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR = ( FUNCTION = ag_catalog.graphid_eq, LEFTARG = graphid, RIGHTARG = graphid, COMMUTATOR = =, NEGATOR = <>, RESTRICT = eqsel, JOIN = eqjoinsel, HASHES, MERGES ); CREATE FUNCTION ag_catalog.graphid_ne(graphid, graphid) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <> ( FUNCTION = ag_catalog.graphid_ne, LEFTARG = graphid, RIGHTARG = graphid, COMMUTATOR = <>, NEGATOR = =, RESTRICT = neqsel, JOIN = neqjoinsel ); CREATE FUNCTION ag_catalog.graphid_lt(graphid, graphid) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR < ( FUNCTION = ag_catalog.graphid_lt, LEFTARG = graphid, RIGHTARG = graphid, COMMUTATOR = >, NEGATOR = >=, RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); CREATE FUNCTION ag_catalog.graphid_gt(graphid, graphid) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR > ( FUNCTION = ag_catalog.graphid_gt, LEFTARG = graphid, RIGHTARG = graphid, COMMUTATOR = <, NEGATOR = <=, RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); CREATE FUNCTION ag_catalog.graphid_le(graphid, graphid) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <= ( FUNCTION = ag_catalog.graphid_le, LEFTARG = graphid, RIGHTARG = graphid, COMMUTATOR = >=, NEGATOR = >, RESTRICT = scalarlesel, JOIN = scalarlejoinsel ); CREATE FUNCTION ag_catalog.graphid_ge(graphid, graphid) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR >= ( FUNCTION = ag_catalog.graphid_ge, LEFTARG = graphid, RIGHTARG = graphid, COMMUTATOR = <=, NEGATOR = <, RESTRICT = scalargesel, JOIN = scalargejoinsel ); -- -- graphid - B-tree support functions -- -- comparison support CREATE FUNCTION ag_catalog.graphid_btree_cmp(graphid, graphid) RETURNS int LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; -- sort support CREATE FUNCTION ag_catalog.graphid_btree_sort(internal) RETURNS void LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; -- -- define operator classes for graphid -- -- B-tree strategies -- 1: less than -- 2: less than or equal -- 3: equal -- 4: greater than or equal -- 5: greater than -- -- B-tree support functions -- 1: compare two keys and return an integer less than zero, zero, or greater -- than zero, indicating whether the first key is less than, equal to, or -- greater than the second -- 2: return the addresses of C-callable sort support function(s) (optional) -- 3: compare a test value to a base value plus/minus an offset, and return -- true or false according to the comparison result (optional) CREATE OPERATOR CLASS graphid_ops DEFAULT FOR TYPE graphid USING btree AS OPERATOR 1 <, OPERATOR 2 <=, OPERATOR 3 =, OPERATOR 4 >=, OPERATOR 5 >, FUNCTION 1 ag_catalog.graphid_btree_cmp (graphid, graphid), FUNCTION 2 ag_catalog.graphid_btree_sort (internal); -- -- graphid functions -- CREATE FUNCTION ag_catalog._graphid(label_id int, entry_id bigint) RETURNS graphid LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog._label_name(graph_oid oid, graphid) RETURNS cstring LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog._extract_label_id(graphid) RETURNS label_id LANGUAGE c STABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; age-PG16-v1.5.0-rc0/sql/age_query.sql000066400000000000000000000036761454606241200171150ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ -- -- functions for updating clauses -- -- This function is defined as a VOLATILE function to prevent the optimizer -- from pulling up Query's for CREATE clauses. CREATE FUNCTION ag_catalog._cypher_create_clause(internal) RETURNS void LANGUAGE c AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog._cypher_set_clause(internal) RETURNS void LANGUAGE c AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog._cypher_delete_clause(internal) RETURNS void LANGUAGE c AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog._cypher_merge_clause(internal) RETURNS void LANGUAGE c AS 'MODULE_PATHNAME'; -- -- query functions -- CREATE FUNCTION ag_catalog.cypher(graph_name name = NULL, query_string cstring = NULL, params agtype = NULL) RETURNS SETOF record LANGUAGE c AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.get_cypher_keywords(OUT word text, OUT catcode "char", OUT catdesc text) RETURNS SETOF record LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE COST 10 ROWS 60 AS 'MODULE_PATHNAME'; -- -- End -- age-PG16-v1.5.0-rc0/sql/age_scalar.sql000066400000000000000000000107111454606241200172010ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ -- -- Scalar Functions -- CREATE FUNCTION ag_catalog.age_id(agtype) RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_start_id(agtype) RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_end_id(agtype) RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_head(agtype) RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_last(agtype) RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_tail(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_properties(agtype) RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_startnode(agtype, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_endnode(agtype, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_length(agtype) RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_toboolean(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_tobooleanlist(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_tofloat(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_tofloatlist(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_tointeger(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_tointegerlist(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_tostring(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_tostringlist(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_size(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_type(agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_exists(agtype) RETURNS boolean LANGUAGE c STABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_isempty(agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_label(agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; age-PG16-v1.5.0-rc0/sql/age_string.sql000066400000000000000000000047321454606241200172500ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ -- -- String functions -- CREATE FUNCTION ag_catalog.age_reverse(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_toupper(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_tolower(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_ltrim(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_rtrim(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_trim(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_right(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_left(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_substring(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_split(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_replace(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; age-PG16-v1.5.0-rc0/sql/age_trig.sql000066400000000000000000000075321454606241200167100ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ -- -- Trig functions - radian input -- CREATE FUNCTION ag_catalog.age_sin(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_cos(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_tan(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_cot(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_asin(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_acos(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_atan(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_atan2(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_degrees(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_radians(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_round(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_ceil(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_floor(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_abs(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_sign(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_log(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_log10(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_e() RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_pi() RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_rand() RETURNS agtype LANGUAGE c PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_exp(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_sqrt(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_timestamp() RETURNS agtype LANGUAGE c STABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; age-PG16-v1.5.0-rc0/sql/agtype_access.sql000066400000000000000000000077351454606241200177460ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ -- -- agtype - access operators ( ->, ->> ) -- CREATE FUNCTION ag_catalog.agtype_object_field(agtype, text) RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; -- get agtype object field CREATE OPERATOR -> ( LEFTARG = agtype, RIGHTARG = text, FUNCTION = ag_catalog.agtype_object_field ); CREATE FUNCTION ag_catalog.agtype_object_field_text(agtype, text) RETURNS text LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; -- get agtype object field as text CREATE OPERATOR ->> ( LEFTARG = agtype, RIGHTARG = text, FUNCTION = ag_catalog.agtype_object_field_text ); CREATE FUNCTION ag_catalog.agtype_object_field_agtype(agtype, agtype) RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; -- get agtype object field or array element CREATE OPERATOR -> ( LEFTARG = agtype, RIGHTARG = agtype, FUNCTION = ag_catalog.agtype_object_field_agtype ); CREATE FUNCTION ag_catalog.agtype_object_field_text_agtype(agtype, agtype) RETURNS text LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; -- get agtype object field or array element as text CREATE OPERATOR ->> ( LEFTARG = agtype, RIGHTARG = agtype, FUNCTION = ag_catalog.agtype_object_field_text_agtype ); CREATE FUNCTION ag_catalog.agtype_array_element(agtype, int4) RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; -- get agtype array element CREATE OPERATOR -> ( LEFTARG = agtype, RIGHTARG = int4, FUNCTION = ag_catalog.agtype_array_element ); CREATE FUNCTION ag_catalog.agtype_array_element_text(agtype, int4) RETURNS text LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; -- get agtype array element as text CREATE OPERATOR ->> ( LEFTARG = agtype, RIGHTARG = int4, FUNCTION = ag_catalog.agtype_array_element_text ); CREATE FUNCTION ag_catalog.agtype_extract_path(agtype, agtype) RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; -- return the extracted path as agtype CREATE OPERATOR #> ( LEFTARG = agtype, RIGHTARG = agtype, FUNCTION = ag_catalog.agtype_extract_path ); CREATE FUNCTION ag_catalog.agtype_extract_path_text(agtype, agtype) RETURNS text LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; -- return the extracted path as text CREATE OPERATOR #>> ( LEFTARG = agtype, RIGHTARG = agtype, FUNCTION = ag_catalog.agtype_extract_path_text ); -- -- agtype - access operators -- -- for series of `map.key` and `container[expr]` CREATE FUNCTION ag_catalog.agtype_access_operator(VARIADIC agtype[]) RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.agtype_access_slice(agtype, agtype, agtype) RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.agtype_in_operator(agtype, agtype) RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; age-PG16-v1.5.0-rc0/sql/agtype_coercions.sql000066400000000000000000000071241454606241200204610ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ -- -- agtype - type coercions -- -- agtype -> text (explicit) CREATE FUNCTION ag_catalog.agtype_to_text(agtype) RETURNS text LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE CAST (agtype AS text) WITH FUNCTION ag_catalog.agtype_to_text(agtype); -- agtype -> boolean (implicit) CREATE FUNCTION ag_catalog.agtype_to_bool(agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE CAST (agtype AS boolean) WITH FUNCTION ag_catalog.agtype_to_bool(agtype) AS IMPLICIT; -- boolean -> agtype (explicit) CREATE FUNCTION ag_catalog.bool_to_agtype(boolean) RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE CAST (boolean AS agtype) WITH FUNCTION ag_catalog.bool_to_agtype(boolean); -- float8 -> agtype (explicit) CREATE FUNCTION ag_catalog.float8_to_agtype(float8) RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE CAST (float8 AS agtype) WITH FUNCTION ag_catalog.float8_to_agtype(float8); -- agtype -> float8 (implicit) CREATE FUNCTION ag_catalog.agtype_to_float8(agtype) RETURNS float8 LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE CAST (agtype AS float8) WITH FUNCTION ag_catalog.agtype_to_float8(agtype); -- int8 -> agtype (explicit) CREATE FUNCTION ag_catalog.int8_to_agtype(int8) RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE CAST (int8 AS agtype) WITH FUNCTION ag_catalog.int8_to_agtype(int8); -- agtype -> int8 CREATE FUNCTION ag_catalog.agtype_to_int8(variadic "any") RETURNS bigint LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE CAST (agtype AS bigint) WITH FUNCTION ag_catalog.agtype_to_int8(variadic "any") AS ASSIGNMENT; -- agtype -> int4 CREATE FUNCTION ag_catalog.agtype_to_int4(variadic "any") RETURNS int LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE CAST (agtype AS int) WITH FUNCTION ag_catalog.agtype_to_int4(variadic "any"); -- agtype -> int2 CREATE FUNCTION ag_catalog.agtype_to_int2(variadic "any") RETURNS smallint LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE CAST (agtype AS smallint) WITH FUNCTION ag_catalog.agtype_to_int2(variadic "any"); -- agtype -> int4[] CREATE FUNCTION ag_catalog.agtype_to_int4_array(variadic "any") RETURNS int[] LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE CAST (agtype AS int[]) WITH FUNCTION ag_catalog.agtype_to_int4_array(variadic "any"); age-PG16-v1.5.0-rc0/sql/agtype_comparison.sql000066400000000000000000000715271454606241200206570ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ -- -- agtype - comparison operators (=, <>, <, >, <=, >=) -- CREATE FUNCTION ag_catalog.agtype_eq(agtype, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR = ( FUNCTION = ag_catalog.agtype_eq, LEFTARG = agtype, RIGHTARG = agtype, COMMUTATOR = =, NEGATOR = <>, RESTRICT = eqsel, JOIN = eqjoinsel, HASHES ); CREATE FUNCTION ag_catalog.agtype_any_eq(agtype, smallint) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR = ( FUNCTION = ag_catalog.agtype_any_eq, LEFTARG = agtype, RIGHTARG = smallint, COMMUTATOR = =, NEGATOR = <>, RESTRICT = eqsel, JOIN = eqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_eq(smallint, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR = ( FUNCTION = ag_catalog.agtype_any_eq, LEFTARG = smallint, RIGHTARG = agtype, COMMUTATOR = =, NEGATOR = <>, RESTRICT = eqsel, JOIN = eqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_eq(agtype, integer) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR = ( FUNCTION = ag_catalog.agtype_any_eq, LEFTARG = agtype, RIGHTARG = integer, COMMUTATOR = =, NEGATOR = <>, RESTRICT = eqsel, JOIN = eqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_eq(integer, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR = ( FUNCTION = ag_catalog.agtype_any_eq, LEFTARG = integer, RIGHTARG = agtype, COMMUTATOR = =, NEGATOR = <>, RESTRICT = eqsel, JOIN = eqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_eq(agtype, bigint) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR = ( FUNCTION = ag_catalog.agtype_any_eq, LEFTARG = agtype, RIGHTARG = bigint, COMMUTATOR = =, NEGATOR = <>, RESTRICT = eqsel, JOIN = eqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_eq(bigint, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR = ( FUNCTION = ag_catalog.agtype_any_eq, LEFTARG = bigint, RIGHTARG = agtype, COMMUTATOR = =, NEGATOR = <>, RESTRICT = eqsel, JOIN = eqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_eq(agtype, real) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR = ( FUNCTION = ag_catalog.agtype_any_eq, LEFTARG = agtype, RIGHTARG = real, COMMUTATOR = =, NEGATOR = <>, RESTRICT = eqsel, JOIN = eqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_eq(real, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR = ( FUNCTION = ag_catalog.agtype_any_eq, LEFTARG = real, RIGHTARG = agtype, COMMUTATOR = =, NEGATOR = <>, RESTRICT = eqsel, JOIN = eqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_eq(agtype, double precision) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR = ( FUNCTION = ag_catalog.agtype_any_eq, LEFTARG = agtype, RIGHTARG = double precision, COMMUTATOR = =, NEGATOR = <>, RESTRICT = eqsel, JOIN = eqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_eq(double precision, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR = ( FUNCTION = ag_catalog.agtype_any_eq, LEFTARG = double precision, RIGHTARG = agtype, COMMUTATOR = =, NEGATOR = <>, RESTRICT = eqsel, JOIN = eqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_eq(agtype, numeric) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR = ( FUNCTION = ag_catalog.agtype_any_eq, LEFTARG = agtype, RIGHTARG = numeric, COMMUTATOR = =, NEGATOR = <>, RESTRICT = eqsel, JOIN = eqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_eq(numeric, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR = ( FUNCTION = ag_catalog.agtype_any_eq, LEFTARG = numeric, RIGHTARG = agtype, COMMUTATOR = =, NEGATOR = <>, RESTRICT = eqsel, JOIN = eqjoinsel ); CREATE FUNCTION ag_catalog.agtype_ne(agtype, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <> ( FUNCTION = ag_catalog.agtype_ne, LEFTARG = agtype, RIGHTARG = agtype, COMMUTATOR = <>, NEGATOR = =, RESTRICT = neqsel, JOIN = neqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ne(agtype, smallint) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <> ( FUNCTION = ag_catalog.agtype_any_ne, LEFTARG = agtype, RIGHTARG = smallint, COMMUTATOR = <>, NEGATOR = =, RESTRICT = neqsel, JOIN = neqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ne(smallint, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <> ( FUNCTION = ag_catalog.agtype_any_ne, LEFTARG = smallint, RIGHTARG = agtype, COMMUTATOR = <>, NEGATOR = =, RESTRICT = neqsel, JOIN = neqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ne(agtype, integer) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <> ( FUNCTION = ag_catalog.agtype_any_ne, LEFTARG = agtype, RIGHTARG = integer, COMMUTATOR = <>, NEGATOR = =, RESTRICT = neqsel, JOIN = neqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ne(integer, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <> ( FUNCTION = ag_catalog.agtype_any_ne, LEFTARG = integer, RIGHTARG = agtype, COMMUTATOR = <>, NEGATOR = =, RESTRICT = neqsel, JOIN = neqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ne(agtype, bigint) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <> ( FUNCTION = ag_catalog.agtype_any_ne, LEFTARG = agtype, RIGHTARG = bigint, COMMUTATOR = <>, NEGATOR = =, RESTRICT = neqsel, JOIN = neqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ne(bigint, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <> ( FUNCTION = ag_catalog.agtype_any_ne, LEFTARG = bigint, RIGHTARG = agtype, COMMUTATOR = <>, NEGATOR = =, RESTRICT = neqsel, JOIN = neqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ne(agtype, real) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <> ( FUNCTION = ag_catalog.agtype_any_ne, LEFTARG = agtype, RIGHTARG = real, COMMUTATOR = <>, NEGATOR = =, RESTRICT = neqsel, JOIN = neqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ne(real, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <> ( FUNCTION = ag_catalog.agtype_any_ne, LEFTARG = real, RIGHTARG = agtype, COMMUTATOR = <>, NEGATOR = =, RESTRICT = neqsel, JOIN = neqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ne(agtype, double precision) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <> ( FUNCTION = ag_catalog.agtype_any_ne, LEFTARG = agtype, RIGHTARG = double precision, COMMUTATOR = <>, NEGATOR = =, RESTRICT = neqsel, JOIN = neqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ne(double precision, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <> ( FUNCTION = ag_catalog.agtype_any_ne, LEFTARG = double precision, RIGHTARG = agtype, COMMUTATOR = <>, NEGATOR = =, RESTRICT = neqsel, JOIN = neqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ne(agtype, numeric) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <> ( FUNCTION = ag_catalog.agtype_any_ne, LEFTARG = agtype, RIGHTARG = numeric, COMMUTATOR = <>, NEGATOR = =, RESTRICT = neqsel, JOIN = neqjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ne(numeric, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <> ( FUNCTION = ag_catalog.agtype_any_ne, LEFTARG = numeric, RIGHTARG = agtype, COMMUTATOR = <>, NEGATOR = =, RESTRICT = neqsel, JOIN = neqjoinsel ); CREATE FUNCTION ag_catalog.agtype_lt(agtype, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR < ( FUNCTION = ag_catalog.agtype_lt, LEFTARG = agtype, RIGHTARG = agtype, COMMUTATOR = >, NEGATOR = >=, RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_lt(agtype, smallint) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR < ( FUNCTION = ag_catalog.agtype_any_lt, LEFTARG = agtype, RIGHTARG = smallint, COMMUTATOR = >, NEGATOR = >=, RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_lt(smallint, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR < ( FUNCTION = ag_catalog.agtype_any_lt, LEFTARG = smallint, RIGHTARG = agtype, COMMUTATOR = >, NEGATOR = >=, RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_lt(agtype, integer) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR < ( FUNCTION = ag_catalog.agtype_any_lt, LEFTARG = agtype, RIGHTARG = integer, COMMUTATOR = >, NEGATOR = >=, RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_lt(integer, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR < ( FUNCTION = ag_catalog.agtype_any_lt, LEFTARG = integer, RIGHTARG = agtype, COMMUTATOR = >, NEGATOR = >=, RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_lt(agtype, bigint) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR < ( FUNCTION = ag_catalog.agtype_any_lt, LEFTARG = agtype, RIGHTARG = bigint, COMMUTATOR = >, NEGATOR = >=, RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_lt(bigint, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR < ( FUNCTION = ag_catalog.agtype_any_lt, LEFTARG = bigint, RIGHTARG = agtype, COMMUTATOR = >, NEGATOR = >=, RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_lt(agtype, real) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR < ( FUNCTION = ag_catalog.agtype_any_lt, LEFTARG = agtype, RIGHTARG = real, COMMUTATOR = >, NEGATOR = >=, RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_lt(real, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR < ( FUNCTION = ag_catalog.agtype_any_lt, LEFTARG = real, RIGHTARG = agtype, COMMUTATOR = >, NEGATOR = >=, RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_lt(agtype, double precision) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR < ( FUNCTION = ag_catalog.agtype_any_lt, LEFTARG = agtype, RIGHTARG = double precision, COMMUTATOR = >, NEGATOR = >=, RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_lt(double precision, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR < ( FUNCTION = ag_catalog.agtype_any_lt, LEFTARG = double precision, RIGHTARG = agtype, COMMUTATOR = >, NEGATOR = >=, RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_lt(agtype, numeric) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR < ( FUNCTION = ag_catalog.agtype_any_lt, LEFTARG = agtype, RIGHTARG = numeric, COMMUTATOR = >, NEGATOR = >=, RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_lt(numeric, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR < ( FUNCTION = ag_catalog.agtype_any_lt, LEFTARG = numeric, RIGHTARG = agtype, COMMUTATOR = >, NEGATOR = >=, RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); CREATE FUNCTION ag_catalog.agtype_gt(agtype, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR > ( FUNCTION = ag_catalog.agtype_gt, LEFTARG = agtype, RIGHTARG = agtype, COMMUTATOR = <, NEGATOR = <=, RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_gt(agtype, smallint) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR > ( FUNCTION = ag_catalog.agtype_any_gt, LEFTARG = agtype, RIGHTARG = smallint, COMMUTATOR = <, NEGATOR = <=, RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_gt(smallint, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR > ( FUNCTION = ag_catalog.agtype_any_gt, LEFTARG = smallint, RIGHTARG = agtype, COMMUTATOR = <, NEGATOR = <=, RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_gt(agtype, integer) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR > ( FUNCTION = ag_catalog.agtype_any_gt, LEFTARG = agtype, RIGHTARG = integer, COMMUTATOR = <, NEGATOR = <=, RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_gt(integer, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR > ( FUNCTION = ag_catalog.agtype_any_gt, LEFTARG = integer, RIGHTARG = agtype, COMMUTATOR = <, NEGATOR = <=, RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_gt(agtype, bigint) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR > ( FUNCTION = ag_catalog.agtype_any_gt, LEFTARG = agtype, RIGHTARG = bigint, COMMUTATOR = <, NEGATOR = <=, RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_gt(bigint, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR > ( FUNCTION = ag_catalog.agtype_any_gt, LEFTARG = bigint, RIGHTARG = agtype, COMMUTATOR = <, NEGATOR = <=, RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_gt(agtype, real) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR > ( FUNCTION = ag_catalog.agtype_any_gt, LEFTARG = agtype, RIGHTARG = real, COMMUTATOR = <, NEGATOR = <=, RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_gt(real, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR > ( FUNCTION = ag_catalog.agtype_any_gt, LEFTARG = real, RIGHTARG = agtype, COMMUTATOR = <, NEGATOR = <=, RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_gt(agtype, double precision) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR > ( FUNCTION = ag_catalog.agtype_any_gt, LEFTARG = agtype, RIGHTARG = double precision, COMMUTATOR = <, NEGATOR = <=, RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_gt(double precision, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR > ( FUNCTION = ag_catalog.agtype_any_gt, LEFTARG = double precision, RIGHTARG = agtype, COMMUTATOR = <, NEGATOR = <=, RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_gt(agtype, numeric) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR > ( FUNCTION = ag_catalog.agtype_any_gt, LEFTARG = agtype, RIGHTARG = numeric, COMMUTATOR = <, NEGATOR = <=, RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); CREATE FUNCTION ag_catalog.agtype_any_gt(numeric, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR > ( FUNCTION = ag_catalog.agtype_any_gt, LEFTARG = numeric, RIGHTARG = agtype, COMMUTATOR = <, NEGATOR = <=, RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); CREATE FUNCTION ag_catalog.agtype_le(agtype, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <= ( FUNCTION = ag_catalog.agtype_le, LEFTARG = agtype, RIGHTARG = agtype, COMMUTATOR = >=, NEGATOR = >, RESTRICT = scalarlesel, JOIN = scalarlejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_le(agtype, smallint) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <= ( FUNCTION = ag_catalog.agtype_any_le, LEFTARG = agtype, RIGHTARG = smallint, COMMUTATOR = >=, NEGATOR = >, RESTRICT = scalarlesel, JOIN = scalarlejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_le(smallint, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <= ( FUNCTION = ag_catalog.agtype_any_le, LEFTARG = smallint, RIGHTARG = agtype, COMMUTATOR = >=, NEGATOR = >, RESTRICT = scalarlesel, JOIN = scalarlejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_le(agtype, integer) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <= ( FUNCTION = ag_catalog.agtype_any_le, LEFTARG = agtype, RIGHTARG = integer, COMMUTATOR = >=, NEGATOR = >, RESTRICT = scalarlesel, JOIN = scalarlejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_le(integer, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <= ( FUNCTION = ag_catalog.agtype_any_le, LEFTARG = integer, RIGHTARG = agtype, COMMUTATOR = >=, NEGATOR = >, RESTRICT = scalarlesel, JOIN = scalarlejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_le(agtype, bigint) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <= ( FUNCTION = ag_catalog.agtype_any_le, LEFTARG = agtype, RIGHTARG = bigint, COMMUTATOR = >=, NEGATOR = >, RESTRICT = scalarlesel, JOIN = scalarlejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_le(bigint, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <= ( FUNCTION = ag_catalog.agtype_any_le, LEFTARG = bigint, RIGHTARG = agtype, COMMUTATOR = >=, NEGATOR = >, RESTRICT = scalarlesel, JOIN = scalarlejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_le(agtype, real) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <= ( FUNCTION = ag_catalog.agtype_any_le, LEFTARG = agtype, RIGHTARG = real, COMMUTATOR = >=, NEGATOR = >, RESTRICT = scalarlesel, JOIN = scalarlejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_le(real, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <= ( FUNCTION = ag_catalog.agtype_any_le, LEFTARG = real, RIGHTARG = agtype, COMMUTATOR = >=, NEGATOR = >, RESTRICT = scalarlesel, JOIN = scalarlejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_le(agtype, double precision) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <= ( FUNCTION = ag_catalog.agtype_any_le, LEFTARG = agtype, RIGHTARG = double precision, COMMUTATOR = >=, NEGATOR = >, RESTRICT = scalarlesel, JOIN = scalarlejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_le(double precision, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <= ( FUNCTION = ag_catalog.agtype_any_le, LEFTARG = double precision, RIGHTARG = agtype, COMMUTATOR = >=, NEGATOR = >, RESTRICT = scalarlesel, JOIN = scalarlejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_le(agtype, numeric) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <= ( FUNCTION = ag_catalog.agtype_any_le, LEFTARG = agtype, RIGHTARG = numeric, COMMUTATOR = >=, NEGATOR = >, RESTRICT = scalarlesel, JOIN = scalarlejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_le(numeric, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <= ( FUNCTION = ag_catalog.agtype_any_le, LEFTARG = numeric, RIGHTARG = agtype, COMMUTATOR = >=, NEGATOR = >, RESTRICT = scalarlesel, JOIN = scalarlejoinsel ); CREATE FUNCTION ag_catalog.agtype_ge(agtype, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR >= ( FUNCTION = ag_catalog.agtype_ge, LEFTARG = agtype, RIGHTARG = agtype, COMMUTATOR = <=, NEGATOR = <, RESTRICT = scalargesel, JOIN = scalargejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ge(agtype, smallint) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR >= ( FUNCTION = ag_catalog.agtype_any_ge, LEFTARG = agtype, RIGHTARG = smallint, COMMUTATOR = <=, NEGATOR = <, RESTRICT = scalargesel, JOIN = scalargejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ge(smallint, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR >= ( FUNCTION = ag_catalog.agtype_any_ge, LEFTARG = smallint, RIGHTARG = agtype, COMMUTATOR = <=, NEGATOR = <, RESTRICT = scalargesel, JOIN = scalargejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ge(agtype, integer) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR >= ( FUNCTION = ag_catalog.agtype_any_ge, LEFTARG = agtype, RIGHTARG = integer, COMMUTATOR = <=, NEGATOR = <, RESTRICT = scalargesel, JOIN = scalargejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ge(integer, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR >= ( FUNCTION = ag_catalog.agtype_any_ge, LEFTARG = integer, RIGHTARG = agtype, COMMUTATOR = <=, NEGATOR = <, RESTRICT = scalargesel, JOIN = scalargejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ge(agtype, bigint) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR >= ( FUNCTION = ag_catalog.agtype_any_ge, LEFTARG = agtype, RIGHTARG = bigint, COMMUTATOR = <=, NEGATOR = <, RESTRICT = scalargesel, JOIN = scalargejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ge(bigint, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR >= ( FUNCTION = ag_catalog.agtype_any_ge, LEFTARG = bigint, RIGHTARG = agtype, COMMUTATOR = <=, NEGATOR = <, RESTRICT = scalargesel, JOIN = scalargejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ge(agtype, real) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR >= ( FUNCTION = ag_catalog.agtype_any_ge, LEFTARG = agtype, RIGHTARG = real, COMMUTATOR = <=, NEGATOR = <, RESTRICT = scalargesel, JOIN = scalargejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ge(real, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR >= ( FUNCTION = ag_catalog.agtype_any_ge, LEFTARG = real, RIGHTARG = agtype, COMMUTATOR = <=, NEGATOR = <, RESTRICT = scalargesel, JOIN = scalargejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ge(agtype, double precision) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR >= ( FUNCTION = ag_catalog.agtype_any_ge, LEFTARG = agtype, RIGHTARG = double precision, COMMUTATOR = <=, NEGATOR = <, RESTRICT = scalargesel, JOIN = scalargejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ge(double precision, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR >= ( FUNCTION = ag_catalog.agtype_any_ge, LEFTARG = double precision, RIGHTARG = agtype, COMMUTATOR = <=, NEGATOR = <, RESTRICT = scalargesel, JOIN = scalargejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ge(agtype, numeric) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR >= ( FUNCTION = ag_catalog.agtype_any_ge, LEFTARG = agtype, RIGHTARG = numeric, COMMUTATOR = <=, NEGATOR = <, RESTRICT = scalargesel, JOIN = scalargejoinsel ); CREATE FUNCTION ag_catalog.agtype_any_ge(numeric, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR >= ( FUNCTION = ag_catalog.agtype_any_ge, LEFTARG = numeric, RIGHTARG = agtype, COMMUTATOR = <=, NEGATOR = <, RESTRICT = scalargesel, JOIN = scalargejoinsel ); CREATE FUNCTION ag_catalog.agtype_btree_cmp(agtype, agtype) RETURNS INTEGER LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR CLASS agtype_ops_btree DEFAULT FOR TYPE agtype USING btree AS OPERATOR 1 <, OPERATOR 2 <=, OPERATOR 3 =, OPERATOR 4 >, OPERATOR 5 >=, FUNCTION 1 ag_catalog.agtype_btree_cmp(agtype, agtype); CREATE FUNCTION ag_catalog.agtype_hash_cmp(agtype) RETURNS INTEGER LANGUAGE c STABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR CLASS agtype_ops_hash DEFAULT FOR TYPE agtype USING hash AS OPERATOR 1 =, FUNCTION 1 ag_catalog.agtype_hash_cmp(agtype); age-PG16-v1.5.0-rc0/sql/agtype_exists.sql000066400000000000000000000054571454606241200200230ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ -- -- Key Existence Operators ? ?| ?& -- CREATE FUNCTION ag_catalog.agtype_exists(agtype, text) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR ? ( LEFTARG = agtype, RIGHTARG = text, FUNCTION = ag_catalog.agtype_exists, COMMUTATOR = '?', RESTRICT = contsel, JOIN = contjoinsel ); CREATE FUNCTION ag_catalog.agtype_exists_agtype(agtype, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR ? ( LEFTARG = agtype, RIGHTARG = agtype, FUNCTION = ag_catalog.agtype_exists_agtype, COMMUTATOR = '?', RESTRICT = contsel, JOIN = contjoinsel ); CREATE FUNCTION ag_catalog.agtype_exists_any(agtype, text[]) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR ?| ( LEFTARG = agtype, RIGHTARG = text[], FUNCTION = ag_catalog.agtype_exists_any, RESTRICT = contsel, JOIN = contjoinsel ); CREATE FUNCTION ag_catalog.agtype_exists_any_agtype(agtype, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR ?| ( LEFTARG = agtype, RIGHTARG = agtype, FUNCTION = ag_catalog.agtype_exists_any_agtype, RESTRICT = contsel, JOIN = contjoinsel ); CREATE FUNCTION ag_catalog.agtype_exists_all(agtype, text[]) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR ?& ( LEFTARG = agtype, RIGHTARG = text[], FUNCTION = ag_catalog.agtype_exists_all, RESTRICT = contsel, JOIN = contjoinsel ); CREATE FUNCTION ag_catalog.agtype_exists_all_agtype(agtype, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR ?& ( LEFTARG = agtype, RIGHTARG = agtype, FUNCTION = ag_catalog.agtype_exists_all_agtype, RESTRICT = contsel, JOIN = contjoinsel ); age-PG16-v1.5.0-rc0/sql/agtype_gin.sql000066400000000000000000000051321454606241200172470ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ -- -- agtype GIN support -- CREATE FUNCTION ag_catalog.gin_compare_agtype(text, text) RETURNS int AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION gin_extract_agtype(agtype, internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION ag_catalog.gin_extract_agtype_query(agtype, internal, int2, internal, internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION ag_catalog.gin_consistent_agtype(internal, int2, agtype, int4, internal, internal) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION ag_catalog.gin_triconsistent_agtype(internal, int2, agtype, int4, internal, internal, internal) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE OPERATOR CLASS ag_catalog.gin_agtype_ops DEFAULT FOR TYPE agtype USING gin AS OPERATOR 7 @>(agtype, agtype), OPERATOR 8 <@(agtype, agtype), OPERATOR 9 ?(agtype, agtype), OPERATOR 10 ?|(agtype, agtype), OPERATOR 11 ?&(agtype, agtype), FUNCTION 1 ag_catalog.gin_compare_agtype(text,text), FUNCTION 2 ag_catalog.gin_extract_agtype(agtype, internal), FUNCTION 3 ag_catalog.gin_extract_agtype_query(agtype, internal, int2, internal, internal), FUNCTION 4 ag_catalog.gin_consistent_agtype(internal, int2, agtype, int4, internal, internal), FUNCTION 6 ag_catalog.gin_triconsistent_agtype(internal, int2, agtype, int4, internal, internal, internal), STORAGE text; age-PG16-v1.5.0-rc0/sql/agtype_graphid.sql000066400000000000000000000065761454606241200201250ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ -- -- graph id conversion function -- CREATE FUNCTION ag_catalog.graphid_to_agtype(graphid) RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE CAST (graphid AS agtype) WITH FUNCTION ag_catalog.graphid_to_agtype(graphid); CREATE FUNCTION ag_catalog.agtype_to_graphid(agtype) RETURNS graphid LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE CAST (agtype AS graphid) WITH FUNCTION ag_catalog.agtype_to_graphid(agtype) AS IMPLICIT; -- -- agtype - path -- CREATE FUNCTION ag_catalog._agtype_build_path(VARIADIC "any") RETURNS agtype LANGUAGE c IMMUTABLE CALLED ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; -- -- agtype - vertex -- CREATE FUNCTION ag_catalog._agtype_build_vertex(graphid, cstring, agtype) RETURNS agtype LANGUAGE c IMMUTABLE CALLED ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; -- -- agtype - edge -- CREATE FUNCTION ag_catalog._agtype_build_edge(graphid, graphid, graphid, cstring, agtype) RETURNS agtype LANGUAGE c IMMUTABLE CALLED ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog._ag_enforce_edge_uniqueness(VARIADIC "any") RETURNS bool LANGUAGE c STABLE PARALLEL SAFE as 'MODULE_PATHNAME'; -- -- agtype - map literal (`{key: expr, ...}`) -- CREATE FUNCTION ag_catalog.agtype_build_map(VARIADIC "any") RETURNS agtype LANGUAGE c IMMUTABLE CALLED ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.agtype_build_map() RETURNS agtype LANGUAGE c IMMUTABLE CALLED ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME', 'agtype_build_map_noargs'; CREATE FUNCTION ag_catalog.agtype_build_map_nonull(VARIADIC "any") RETURNS agtype LANGUAGE c IMMUTABLE CALLED ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; -- -- There are times when the optimizer might eliminate -- functions we need. Wrap the function with this to -- prevent that from happening -- CREATE FUNCTION ag_catalog.agtype_volatile_wrapper("any") RETURNS agtype LANGUAGE c VOLATILE CALLED ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; -- -- agtype - list literal (`[expr, ...]`) -- CREATE FUNCTION ag_catalog.agtype_build_list(VARIADIC "any") RETURNS agtype LANGUAGE c IMMUTABLE CALLED ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.agtype_build_list() RETURNS agtype LANGUAGE c IMMUTABLE CALLED ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME', 'agtype_build_list_noargs'; age-PG16-v1.5.0-rc0/sql/agtype_operators.sql000066400000000000000000000027761454606241200205230ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ -- -- Contains operators @> <@ -- CREATE FUNCTION ag_catalog.agtype_contains(agtype, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR @> ( LEFTARG = agtype, RIGHTARG = agtype, FUNCTION = ag_catalog.agtype_contains, COMMUTATOR = '<@', RESTRICT = contsel, JOIN = contjoinsel ); CREATE FUNCTION ag_catalog.agtype_contained_by(agtype, agtype) RETURNS boolean LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE OPERATOR <@ ( LEFTARG = agtype, RIGHTARG = agtype, FUNCTION = ag_catalog.agtype_contained_by, COMMUTATOR = '@>', RESTRICT = contsel, JOIN = contjoinsel ); age-PG16-v1.5.0-rc0/sql/agtype_string.sql000066400000000000000000000030501454606241200177750ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ -- -- agtype - string matching (`STARTS WITH`, `ENDS WITH`, `CONTAINS`, & =~) -- CREATE FUNCTION ag_catalog.agtype_string_match_starts_with(agtype, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.agtype_string_match_ends_with(agtype, agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.agtype_string_match_contains(agtype, agtype) RETURNS agtype LANGUAGE c IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_eq_tilde(agtype, agtype) RETURNS agtype LANGUAGE c STABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; age-PG16-v1.5.0-rc0/sql/agtype_typecast.sql000066400000000000000000000141401454606241200203250ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ -- -- function for typecasting an agtype value to another agtype value -- CREATE FUNCTION ag_catalog.agtype_typecast_int(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.agtype_typecast_numeric(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.agtype_typecast_float(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.agtype_typecast_bool(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.agtype_typecast_vertex(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.agtype_typecast_edge(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.agtype_typecast_path(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; -- original VLE function definition CREATE FUNCTION ag_catalog.age_vle(IN agtype, IN agtype, IN agtype, IN agtype, IN agtype, IN agtype, IN agtype, OUT edges agtype) RETURNS SETOF agtype LANGUAGE C STABLE CALLED ON NULL INPUT PARALLEL UNSAFE -- might be safe AS 'MODULE_PATHNAME'; -- This is an overloaded function definition to allow for the VLE local context -- caching mechanism to coexist with the previous VLE version. CREATE FUNCTION ag_catalog.age_vle(IN agtype, IN agtype, IN agtype, IN agtype, IN agtype, IN agtype, IN agtype, IN agtype, OUT edges agtype) RETURNS SETOF agtype LANGUAGE C STABLE CALLED ON NULL INPUT PARALLEL UNSAFE -- might be safe AS 'MODULE_PATHNAME'; -- function to build an edge for a VLE match CREATE FUNCTION ag_catalog.age_build_vle_match_edge(agtype, agtype) RETURNS agtype LANGUAGE C IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; -- function to match a terminal vle edge CREATE FUNCTION ag_catalog.age_match_vle_terminal_edge(variadic "any") RETURNS boolean LANGUAGE C STABLE CALLED ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; -- function to create an AGTV_PATH from a VLE_path_container CREATE FUNCTION ag_catalog.age_materialize_vle_path(agtype) RETURNS agtype LANGUAGE C STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; -- function to create an AGTV_ARRAY of edges from a VLE_path_container CREATE FUNCTION ag_catalog.age_materialize_vle_edges(agtype) RETURNS agtype LANGUAGE C STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_match_vle_edge_to_id_qual(variadic "any") RETURNS boolean LANGUAGE C STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_match_two_vle_edges(agtype, agtype) RETURNS boolean LANGUAGE C STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; -- list functions CREATE FUNCTION ag_catalog.age_keys(agtype) RETURNS agtype LANGUAGE c STABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_labels(agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_nodes(agtype) RETURNS agtype LANGUAGE c STABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_relationships(agtype) RETURNS agtype LANGUAGE c STABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_range(variadic "any") RETURNS agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_unnest(agtype) RETURNS SETOF agtype LANGUAGE c IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_vertex_stats(agtype, agtype) RETURNS agtype LANGUAGE c STABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_delete_global_graphs(agtype) RETURNS boolean LANGUAGE c STABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.create_complete_graph(graph_name name, nodes int, edge_label name, node_label name = NULL) RETURNS void LANGUAGE c CALLED ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_create_barbell_graph(graph_name name, graph_size int, bridge_size int, node_label name = NULL, node_properties agtype = NULL, edge_label name = NULL, edge_properties agtype = NULL) RETURNS void LANGUAGE c CALLED ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_prepare_cypher(cstring, cstring) RETURNS boolean LANGUAGE c STABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; -- -- End -- age-PG16-v1.5.0-rc0/sql/sql_files000066400000000000000000000003231454606241200163010ustar00rootroot00000000000000age_main age_agtype agtype_comparison agtype_access agtype_operators agtype_exists agtype_gin agtype_graphid agtype_coercions agtype_string age_query age_scalar age_string age_trig age_aggregate agtype_typecast age-PG16-v1.5.0-rc0/src/000077500000000000000000000000001454606241200143675ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/src/backend/000077500000000000000000000000001454606241200157565ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/src/backend/age.c000066400000000000000000000025411454606241200166600ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "catalog/ag_catalog.h" #include "nodes/ag_nodes.h" #include "optimizer/cypher_paths.h" #include "parser/cypher_analyze.h" #include "utils/ag_guc.h" PG_MODULE_MAGIC; void _PG_init(void); void _PG_init(void) { register_ag_nodes(); set_rel_pathlist_init(); object_access_hook_init(); process_utility_hook_init(); post_parse_analyze_init(); define_config_params(); } void _PG_fini(void); void _PG_fini(void) { post_parse_analyze_fini(); process_utility_hook_fini(); object_access_hook_fini(); set_rel_pathlist_fini(); } age-PG16-v1.5.0-rc0/src/backend/catalog/000077500000000000000000000000001454606241200173705ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/src/backend/catalog/ag_catalog.c000066400000000000000000000171061454606241200216220ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "catalog/dependency.h" #include "catalog/objectaccess.h" #include "catalog/pg_class_d.h" #include "catalog/pg_namespace_d.h" #include "commands/defrem.h" #include "tcop/utility.h" #include "utils/lsyscache.h" #include "catalog/ag_catalog.h" #include "catalog/ag_graph.h" #include "catalog/ag_label.h" #include "catalog/ag_namespace.h" #include "utils/ag_cache.h" static object_access_hook_type prev_object_access_hook; static ProcessUtility_hook_type prev_process_utility_hook; static bool prev_object_hook_is_set; static void object_access(ObjectAccessType access, Oid class_id, Oid object_id, int sub_id, void *arg); void ag_ProcessUtility_hook(PlannedStmt *pstmt, const char *queryString, bool readOnlyTree, ProcessUtilityContext context, ParamListInfo params, QueryEnvironment *queryEnv, DestReceiver *dest, QueryCompletion *qc); static bool is_age_drop(PlannedStmt *pstmt); static void drop_age_extension(DropStmt *stmt); void object_access_hook_init(void) { prev_object_access_hook = object_access_hook; object_access_hook = object_access; prev_object_hook_is_set = true; } void object_access_hook_fini(void) { if (prev_object_hook_is_set) { object_access_hook = prev_object_access_hook; prev_object_access_hook = NULL; prev_object_hook_is_set = false; } } void process_utility_hook_init(void) { prev_process_utility_hook = ProcessUtility_hook; ProcessUtility_hook = ag_ProcessUtility_hook; } void process_utility_hook_fini(void) { ProcessUtility_hook = prev_process_utility_hook; } /* * When Postgres tries to drop AGE using the standard logic, two issues occur: * * 1. The schema that graphs in stored in are not dropped. * * 2. While dropping ag_catalog, the object hook is run. Which uses the * information in the indexes and tables being dropped. To prevent an error * from being thrown, we need to disable the object_access_hook before dropping * the extension. */ void ag_ProcessUtility_hook(PlannedStmt *pstmt, const char *queryString, bool readOnlyTree, ProcessUtilityContext context, ParamListInfo params, QueryEnvironment *queryEnv, DestReceiver *dest, QueryCompletion *qc) { if (is_age_drop(pstmt)) { drop_age_extension((DropStmt *)pstmt->utilityStmt); } else if (prev_process_utility_hook) { (*prev_process_utility_hook) (pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc); } else { Assert(IsA(pstmt, PlannedStmt)); Assert(pstmt->commandType == CMD_UTILITY); Assert(queryString != NULL); /* required as of 8.4 */ Assert(qc == NULL || qc->commandTag == CMDTAG_UNKNOWN); standard_ProcessUtility(pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc); } } static void drop_age_extension(DropStmt *stmt) { // Remove all graphs drop_graphs(get_graphnames()); // Remove the object access hook object_access_hook_fini(); /* * Run Postgres' logic to perform the remaining work to drop the * extension. */ RemoveObjects(stmt); /* reset global variables for OIDs */ clear_global_Oids_AGTYPE(); clear_global_Oids_GRAPHID(); } // Check to see if the Utility Command is to drop the AGE Extension. static bool is_age_drop(PlannedStmt *pstmt) { ListCell *lc; DropStmt *drop_stmt; if (!IsA(pstmt->utilityStmt, DropStmt)) return false; drop_stmt = (DropStmt *)pstmt->utilityStmt; foreach(lc, drop_stmt->objects) { Node *obj = lfirst(lc); if (IsA(obj, String)) { String *val = (String *)obj; char *str = val->sval; if (!pg_strcasecmp(str, "age")) return true; } } return false; } /* * object_access_hook is called before actual deletion. So, looking up ag_cache * is still valid at this point. For labels, once a backed table is deleted, * its corresponding ag_label cache entry will be removed by cache * invalidation. */ static void object_access(ObjectAccessType access, Oid class_id, Oid object_id, int sub_id, void *arg) { ObjectAccessDrop *drop_arg; if (prev_object_access_hook) prev_object_access_hook(access, class_id, object_id, sub_id, arg); // We are interested in DROP SCHEMA and DROP TABLE commands. if (access != OAT_DROP) return; drop_arg = arg; /* * PERFORM_DELETION_INTERNAL flag will be set when remove_schema() calls * performDeletion(). However, if PostgreSQL does performDeletion() with * PERFORM_DELETION_INTERNAL flag over backed schemas of graphs due to * side effects of other commands run by user, it is impossible to * distinguish between this and drop_graph(). * * The above applies to DROP TABLE command too. */ if (class_id == NamespaceRelationId) { graph_cache_data *cache_data; if (drop_arg->dropflags & PERFORM_DELETION_INTERNAL) return; cache_data = search_graph_namespace_cache(object_id); if (cache_data) { char *nspname = get_namespace_name(object_id); ereport(ERROR, (errcode(ERRCODE_DEPENDENT_OBJECTS_STILL_EXIST), errmsg("schema \"%s\" is for graph \"%s\"", nspname, NameStr(cache_data->name)))); } return; } if (class_id == RelationRelationId) { label_cache_data *cache_data; cache_data = search_label_relation_cache(object_id); // We are interested in only tables that are labels. if (!cache_data) return; if (drop_arg->dropflags & PERFORM_DELETION_INTERNAL) { /* * Remove the corresponding ag_label entry here first. We don't * know whether this operation is drop_label() or a part of * drop_graph(). */ delete_label(object_id); } else { char *relname = get_rel_name(object_id); ereport(ERROR, (errcode(ERRCODE_DEPENDENT_OBJECTS_STILL_EXIST), errmsg("table \"%s\" is for label \"%s\"", relname, NameStr(cache_data->name)))); } } } Oid ag_relation_id(const char *name, const char *kind) { Oid id; id = get_relname_relid(name, ag_catalog_namespace_id()); if (!OidIsValid(id)) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_TABLE), errmsg("%s \"%s\" does not exist", kind, name))); } return id; } age-PG16-v1.5.0-rc0/src/backend/catalog/ag_graph.c000066400000000000000000000131731454606241200213110ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "access/genam.h" #include "access/heapam.h" #include "access/htup.h" #include "access/htup_details.h" #include "access/skey.h" #include "access/stratnum.h" #include "catalog/indexing.h" #include "catalog/namespace.h" #include "nodes/makefuncs.h" #include "storage/lockdefs.h" #include "utils/fmgroids.h" #include "utils/fmgrprotos.h" #include "utils/lsyscache.h" #include "utils/rel.h" #include "utils/relcache.h" #include "catalog/ag_graph.h" #include "utils/ag_cache.h" static Oid get_graph_namespace(const char *graph_name); // INSERT INTO ag_catalog.ag_graph VALUES (graph_name, nsp_id) void insert_graph(const Name graph_name, const Oid nsp_id) { Datum values[Natts_ag_graph]; bool nulls[Natts_ag_graph]; Relation ag_graph; HeapTuple tuple; Assert(graph_name); Assert(OidIsValid(nsp_id)); ag_graph = table_open(ag_graph_relation_id(), RowExclusiveLock); values[Anum_ag_graph_oid - 1] = ObjectIdGetDatum(nsp_id); nulls[Anum_ag_graph_oid - 1] = false; values[Anum_ag_graph_name - 1] = NameGetDatum(graph_name); nulls[Anum_ag_graph_name - 1] = false; values[Anum_ag_graph_namespace - 1] = ObjectIdGetDatum(nsp_id); nulls[Anum_ag_graph_namespace - 1] = false; tuple = heap_form_tuple(RelationGetDescr(ag_graph), values, nulls); /* * CatalogTupleInsert() is originally for PostgreSQL's catalog. However, * it is used at here for convenience. */ CatalogTupleInsert(ag_graph, tuple); table_close(ag_graph, RowExclusiveLock); } // DELETE FROM ag_catalog.ag_graph WHERE name = graph_name void delete_graph(const Name graph_name) { ScanKeyData scan_keys[1]; Relation ag_graph; SysScanDesc scan_desc; HeapTuple tuple; ScanKeyInit(&scan_keys[0], Anum_ag_graph_name, BTEqualStrategyNumber, F_NAMEEQ, NameGetDatum(graph_name)); ag_graph = table_open(ag_graph_relation_id(), RowExclusiveLock); scan_desc = systable_beginscan(ag_graph, ag_graph_name_index_id(), true, NULL, 1, scan_keys); tuple = systable_getnext(scan_desc); if (!HeapTupleIsValid(tuple)) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_SCHEMA), errmsg("graph \"%s\" does not exist", NameStr(*graph_name)))); } CatalogTupleDelete(ag_graph, &tuple->t_self); systable_endscan(scan_desc); table_close(ag_graph, RowExclusiveLock); } // Function updates graph name in ag_graph table. void update_graph_name(const Name graph_name, const Name new_name) { ScanKeyData scan_keys[1]; Relation ag_graph; SysScanDesc scan_desc; HeapTuple cur_tuple; Datum repl_values[Natts_ag_graph]; bool repl_isnull[Natts_ag_graph]; bool do_replace[Natts_ag_graph]; HeapTuple new_tuple; // open and scan ag_graph for graph name ScanKeyInit(&scan_keys[0], Anum_ag_graph_name, BTEqualStrategyNumber, F_NAMEEQ, NameGetDatum(graph_name)); ag_graph = table_open(ag_graph_relation_id(), RowExclusiveLock); scan_desc = systable_beginscan(ag_graph, ag_graph_name_index_id(), true, NULL, 1, scan_keys); cur_tuple = systable_getnext(scan_desc); if (!HeapTupleIsValid(cur_tuple)) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_SCHEMA), errmsg("graph \"%s\" does not exist", NameStr(*graph_name)))); } // modify (which creates a new tuple) the current tuple's graph name MemSet(repl_values, 0, sizeof(repl_values)); MemSet(repl_isnull, false, sizeof(repl_isnull)); MemSet(do_replace, false, sizeof(do_replace)); repl_values[Anum_ag_graph_name - 1] = NameGetDatum(new_name); repl_isnull[Anum_ag_graph_name - 1] = false; do_replace[Anum_ag_graph_name - 1] = true; new_tuple = heap_modify_tuple(cur_tuple, RelationGetDescr(ag_graph), repl_values, repl_isnull, do_replace); // update the current tuple with the new tuple CatalogTupleUpdate(ag_graph, &cur_tuple->t_self, new_tuple); // end scan and close ag_graph systable_endscan(scan_desc); table_close(ag_graph, RowExclusiveLock); } Oid get_graph_oid(const char *graph_name) { graph_cache_data *cache_data; cache_data = search_graph_name_cache(graph_name); if (cache_data) { return cache_data->oid; } else { return InvalidOid; } } static Oid get_graph_namespace(const char *graph_name) { graph_cache_data *cache_data; cache_data = search_graph_name_cache(graph_name); if (!cache_data) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_SCHEMA), errmsg("graph \"%s\" does not exist", graph_name))); } return cache_data->namespace; } char *get_graph_namespace_name(const char *graph_name) { return get_namespace_name(get_graph_namespace(graph_name)); } age-PG16-v1.5.0-rc0/src/backend/catalog/ag_label.c000066400000000000000000000226131454606241200212660ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "access/genam.h" #include "access/heapam.h" #include "access/htup.h" #include "access/htup_details.h" #include "access/skey.h" #include "access/stratnum.h" #include "catalog/indexing.h" #include "catalog/namespace.h" #include "fmgr.h" #include "nodes/execnodes.h" #include "nodes/makefuncs.h" #include "storage/lockdefs.h" #include "utils/builtins.h" #include "utils/fmgroids.h" #include "utils/lsyscache.h" #include "utils/rel.h" #include "utils/relcache.h" #include "catalog/ag_graph.h" #include "catalog/ag_label.h" #include "commands/label_commands.h" #include "executor/cypher_utils.h" #include "utils/ag_cache.h" #include "utils/graphid.h" /* * INSERT INTO ag_catalog.ag_label * VALUES (label_name, label_graph, label_id, label_kind, * label_relation, seq_name) */ void insert_label(const char *label_name, Oid graph_oid, int32 label_id, char label_kind, Oid label_relation, const char *seq_name) { NameData label_name_data; NameData seq_name_data; Datum values[Natts_ag_label]; bool nulls[Natts_ag_label]; Relation ag_label; HeapTuple tuple; /* * NOTE: Is it better to make use of label_id and label_kind domain types * than to use assert to check label_id and label_kind are valid? */ Assert(label_name); Assert(label_id_is_valid(label_id)); Assert(label_kind == LABEL_KIND_VERTEX || label_kind == LABEL_KIND_EDGE); Assert(OidIsValid(label_relation)); Assert(seq_name); ag_label = table_open(ag_label_relation_id(), RowExclusiveLock); namestrcpy(&label_name_data, label_name); values[Anum_ag_label_name - 1] = NameGetDatum(&label_name_data); nulls[Anum_ag_label_name - 1] = false; values[Anum_ag_label_graph - 1] = ObjectIdGetDatum(graph_oid); nulls[Anum_ag_label_graph - 1] = false; values[Anum_ag_label_id - 1] = Int32GetDatum(label_id); nulls[Anum_ag_label_id - 1] = false; values[Anum_ag_label_kind - 1] = CharGetDatum(label_kind); nulls[Anum_ag_label_kind - 1] = false; values[Anum_ag_label_relation - 1] = ObjectIdGetDatum(label_relation); nulls[Anum_ag_label_relation - 1] = false; namestrcpy(&seq_name_data, seq_name); values[Anum_ag_label_seq_name - 1] = NameGetDatum(&seq_name_data); nulls[Anum_ag_label_seq_name - 1] = false; tuple = heap_form_tuple(RelationGetDescr(ag_label), values, nulls); /* * CatalogTupleInsert() is originally for PostgreSQL's catalog. However, * it is used at here for convenience. */ CatalogTupleInsert(ag_label, tuple); table_close(ag_label, RowExclusiveLock); } // DELETE FROM ag_catalog.ag_label WHERE relation = relation void delete_label(Oid relation) { ScanKeyData scan_keys[1]; Relation ag_label; SysScanDesc scan_desc; HeapTuple tuple; ScanKeyInit(&scan_keys[0], Anum_ag_label_relation, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(relation)); ag_label = table_open(ag_label_relation_id(), RowExclusiveLock); scan_desc = systable_beginscan(ag_label, ag_label_relation_index_id(), true, NULL, 1, scan_keys); tuple = systable_getnext(scan_desc); if (!HeapTupleIsValid(tuple)) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_TABLE), errmsg("label (relation=%u) does not exist", relation))); } CatalogTupleDelete(ag_label, &tuple->t_self); systable_endscan(scan_desc); table_close(ag_label, RowExclusiveLock); } int32 get_label_id(const char *label_name, Oid graph_oid) { label_cache_data *cache_data; cache_data = search_label_name_graph_cache(label_name, graph_oid); if (cache_data) return cache_data->id; else return INVALID_LABEL_ID; } Oid get_label_relation(const char *label_name, Oid graph_oid) { label_cache_data *cache_data; cache_data = search_label_name_graph_cache(label_name, graph_oid); if (cache_data) return cache_data->relation; else return InvalidOid; } char *get_label_relation_name(const char *label_name, Oid graph_oid) { return get_rel_name(get_label_relation(label_name, graph_oid)); } char get_label_kind(const char *label_name, Oid label_graph) { label_cache_data *cache_data; cache_data = search_label_name_graph_cache(label_name, label_graph); if (cache_data) { return cache_data->kind; } else { return INVALID_LABEL_ID; } } PG_FUNCTION_INFO_V1(_label_name); /* * Using the graph name and the vertex/edge's graphid, find * the correct label name from ag_catalog.label */ Datum _label_name(PG_FUNCTION_ARGS) { char *label_name; label_cache_data *label_cache; Oid graph; uint32 label_id; if (PG_ARGISNULL(0) || PG_ARGISNULL(1)) { ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("graph_oid and label_id must not be null"))); } graph = PG_GETARG_OID(0); label_id = (int32)(((uint64)AG_GETARG_GRAPHID(1)) >> ENTRY_ID_BITS); label_cache = search_label_graph_oid_cache(graph, label_id); label_name = NameStr(label_cache->name); if (IS_AG_DEFAULT_LABEL(label_name)) PG_RETURN_CSTRING(""); PG_RETURN_CSTRING(label_name); } PG_FUNCTION_INFO_V1(_label_id); Datum _label_id(PG_FUNCTION_ARGS) { Name graph_name; Name label_name; Oid graph; int32 id; if (PG_ARGISNULL(0) || PG_ARGISNULL(1)) { ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("graph_name and label_name must not be null"))); } graph_name = PG_GETARG_NAME(0); label_name = PG_GETARG_NAME(1); graph = get_graph_oid(NameStr(*graph_name)); id = get_label_id(NameStr(*label_name), graph); PG_RETURN_INT32(id); } PG_FUNCTION_INFO_V1(_extract_label_id); Datum _extract_label_id(PG_FUNCTION_ARGS) { graphid graph_oid; if (PG_ARGISNULL(0)) { ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("graph_oid must not be null"))); } graph_oid = AG_GETARG_GRAPHID(0); PG_RETURN_INT64(get_graphid_label_id(graph_oid)); } bool label_id_exists(Oid graph_oid, int32 label_id) { label_cache_data *cache_data; cache_data = search_label_graph_oid_cache(graph_oid, label_id); if (cache_data) return true; else return false; } /* * Creates A RangeVar for the given label. */ RangeVar *get_label_range_var(char *graph_name, Oid graph_oid, char *label_name) { char *relname; label_cache_data *label_cache; label_cache = search_label_name_graph_cache(label_name, graph_oid); relname = get_rel_name(label_cache->relation); return makeRangeVar(graph_name, relname, 2); } /* * Retrieves a list of all the names of a graph. * * XXX: We may want to use the cache system for this function, * however the cache system currently requires us to know the * name of the label we want. */ List *get_all_edge_labels_per_graph(EState *estate, Oid graph_oid) { List *labels = NIL; ScanKeyData scan_keys[2]; Relation ag_label; TableScanDesc scan_desc; HeapTuple tuple; TupleTableSlot *slot; ResultRelInfo *resultRelInfo; // setup scan keys to get all edges for the given graph oid ScanKeyInit(&scan_keys[1], Anum_ag_label_graph, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(graph_oid)); ScanKeyInit(&scan_keys[0], Anum_ag_label_kind, BTEqualStrategyNumber, F_CHAREQ, CharGetDatum(LABEL_TYPE_EDGE)); // setup the table to be scanned ag_label = table_open(ag_label_relation_id(), RowExclusiveLock); scan_desc = table_beginscan(ag_label, estate->es_snapshot, 2, scan_keys); resultRelInfo = create_entity_result_rel_info(estate, "ag_catalog", "ag_label"); slot = ExecInitExtraTupleSlot( estate, RelationGetDescr(resultRelInfo->ri_RelationDesc), &TTSOpsHeapTuple); // scan through the results and get all the label names. while(true) { Name label; bool isNull; Datum datum; tuple = heap_getnext(scan_desc, ForwardScanDirection); // no more labels to process if (!HeapTupleIsValid(tuple)) break; ExecStoreHeapTuple(tuple, slot, false); datum = slot_getattr(slot, Anum_ag_label_name, &isNull); label = DatumGetName(datum); labels = lappend(labels, label); } table_endscan(scan_desc); destroy_entity_result_rel_info(resultRelInfo); table_close(resultRelInfo->ri_RelationDesc, RowExclusiveLock); return labels; } age-PG16-v1.5.0-rc0/src/backend/catalog/ag_namespace.c000066400000000000000000000020641454606241200221410ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "catalog/namespace.h" #include "catalog/ag_namespace.h" Oid ag_catalog_namespace_id(void) { return get_namespace_oid("ag_catalog", false); } Oid pg_catalog_namespace_id(void) { return get_namespace_oid("pg_catalog", false); } age-PG16-v1.5.0-rc0/src/backend/commands/000077500000000000000000000000001454606241200175575ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/src/backend/commands/graph_commands.c000066400000000000000000000310131454606241200227030ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "access/genam.h" #include "access/heapam.h" #include "access/xact.h" #include "catalog/dependency.h" #include "catalog/objectaddress.h" #include "commands/defrem.h" #include "commands/schemacmds.h" #include "commands/tablecmds.h" #include "fmgr.h" #include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodes.h" #include "nodes/parsenodes.h" #include "nodes/pg_list.h" #include "nodes/value.h" #include "parser/parser.h" #include "utils/rel.h" #include "utils/relcache.h" #include "catalog/ag_graph.h" #include "catalog/ag_label.h" #include "commands/label_commands.h" #include "utils/graphid.h" #include "utils/name_validation.h" /* * Schema name doesn't have to be graph name but the same name is used so * that users can find the backed schema for a graph only by its name. */ #define gen_graph_namespace_name(graph_name) (graph_name) static Oid create_schema_for_graph(const Name graph_name); static void drop_schema_for_graph(char *graph_name_str, const bool cascade); static void remove_schema(Node *schema_name, DropBehavior behavior); static void rename_graph(const Name graph_name, const Name new_name); PG_FUNCTION_INFO_V1(create_graph); /* function that is evoked for creating a graph */ Datum create_graph(PG_FUNCTION_ARGS) { char *graph; Name graph_name; char *graph_name_str; Oid nsp_id; //if no argument is passed with the function, graph name cannot be null if (PG_ARGISNULL(0)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("graph name can not be NULL"))); } //gets graph name as function argument graph_name = PG_GETARG_NAME(0); graph_name_str = NameStr(*graph_name); //checking if the name of the graph falls under the pre-decided graph naming conventions(regex) if (!is_valid_graph_name(graph_name_str)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("graph name is invalid"))); } //graph name must be unique, a graph with the same name should not exist if (graph_exists(graph_name_str)) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_SCHEMA), errmsg("graph \"%s\" already exists", graph_name_str))); } nsp_id = create_schema_for_graph(graph_name); //inserts the graph info into the relation which has all the other existing graphs info insert_graph(graph_name, nsp_id); //Increment the Command counter before create the generic labels. CommandCounterIncrement(); //Create the default label tables graph = graph_name->data; create_label(graph, AG_DEFAULT_LABEL_VERTEX, LABEL_TYPE_VERTEX, NIL); create_label(graph, AG_DEFAULT_LABEL_EDGE, LABEL_TYPE_EDGE, NIL); ereport(NOTICE, (errmsg("graph \"%s\" has been created", NameStr(*graph_name)))); //according to postgres specification of c-language functions if function returns void this is the syntax PG_RETURN_VOID(); } static Oid create_schema_for_graph(const Name graph_name) { char *graph_name_str = NameStr(*graph_name); CreateSchemaStmt *schema_stmt; CreateSeqStmt *seq_stmt; TypeName *integer; DefElem *data_type; DefElem *maxvalue; DefElem *cycle; Oid nsp_id; /* * This is the same with running the following SQL statement. * * CREATE SCHEMA `graph_name` * CREATE SEQUENCE `LABEL_ID_SEQ_NAME` * AS integer * MAXVALUE `LABEL_ID_MAX` * CYCLE * * The sequence will be used to assign a unique id to a label in the graph. * * schemaname doesn't have to be graph_name but the same name is used so * that users can find the backed schema for a graph only by its name. * * ProcessUtilityContext of this command is PROCESS_UTILITY_SUBCOMMAND * so the event trigger will not be fired. */ schema_stmt = makeNode(CreateSchemaStmt); schema_stmt->schemaname = gen_graph_namespace_name(graph_name_str); schema_stmt->authrole = NULL; seq_stmt = makeNode(CreateSeqStmt); seq_stmt->sequence = makeRangeVar(graph_name_str, LABEL_ID_SEQ_NAME, -1); integer = SystemTypeName("int4"); data_type = makeDefElem("as", (Node *)integer, -1); maxvalue = makeDefElem("maxvalue", (Node *)makeInteger(LABEL_ID_MAX), -1); cycle = makeDefElem("cycle", (Node *)makeBoolean(true), -1); seq_stmt->options = list_make3(data_type, maxvalue, cycle); seq_stmt->ownerId = InvalidOid; seq_stmt->for_identity = false; seq_stmt->if_not_exists = false; schema_stmt->schemaElts = list_make1(seq_stmt); schema_stmt->if_not_exists = false; nsp_id = CreateSchemaCommand(schema_stmt, "(generated CREATE SCHEMA command)", -1, -1); // CommandCounterIncrement() is called in CreateSchemaCommand() return nsp_id; } PG_FUNCTION_INFO_V1(drop_graph); Datum drop_graph(PG_FUNCTION_ARGS) { Name graph_name; char *graph_name_str; bool cascade; if (PG_ARGISNULL(0)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("graph name can not be NULL"))); } graph_name = PG_GETARG_NAME(0); cascade = PG_GETARG_BOOL(1); graph_name_str = NameStr(*graph_name); if (!graph_exists(graph_name_str)) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_SCHEMA), errmsg("graph \"%s\" does not exist", graph_name_str))); } drop_schema_for_graph(graph_name_str, cascade); delete_graph(graph_name); CommandCounterIncrement(); ereport(NOTICE, (errmsg("graph \"%s\" has been dropped", graph_name_str))); PG_RETURN_VOID(); } static void drop_schema_for_graph(char *graph_name_str, const bool cascade) { DropStmt *drop_stmt; String *schema_name; List *label_id_seq_name; DropBehavior behavior; /* * ProcessUtilityContext of commands below is PROCESS_UTILITY_SUBCOMMAND * so the event triggers will not be fired. */ // DROP SEQUENCE `graph_name_str`.`LABEL_ID_SEQ_NAME` drop_stmt = makeNode(DropStmt); schema_name = makeString(get_graph_namespace_name(graph_name_str)); label_id_seq_name = list_make2(schema_name, makeString(LABEL_ID_SEQ_NAME)); drop_stmt->objects = list_make1(label_id_seq_name); drop_stmt->removeType = OBJECT_SEQUENCE; drop_stmt->behavior = DROP_RESTRICT; drop_stmt->missing_ok = false; drop_stmt->concurrent = false; RemoveRelations(drop_stmt); // CommandCounterIncrement() is called in RemoveRelations() // DROP SCHEMA `graph_name_str` [ CASCADE ] behavior = cascade ? DROP_CASCADE : DROP_RESTRICT; remove_schema((Node *)schema_name, behavior); // CommandCounterIncrement() is called in performDeletion() } // See RemoveObjects() for more details. static void remove_schema(Node *schema_name, DropBehavior behavior) { ObjectAddress address; Relation relation; address = get_object_address(OBJECT_SCHEMA, schema_name, &relation, AccessExclusiveLock, false); // since the target object is always a schema, relation is NULL Assert(!relation); if (!OidIsValid(address.objectId)) { // missing_ok is always false /* * before calling this function, this condition is already checked in * drop_graph() */ ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR), errmsg("ag_graph catalog is corrupted"), errhint("Schema \"%s\" does not exist", strVal(schema_name)))); } // removeType is always OBJECT_SCHEMA /* * Check permissions. Since the target object is always a schema, the * original logic is simplified. */ check_object_ownership(GetUserId(), OBJECT_SCHEMA, address, schema_name, NULL); // the target schema is not temporary // the target object is always a schema /* * set PERFORM_DELETION_INTERNAL flag so that object_access_hook can ignore * this deletion */ performDeletion(&address, behavior, PERFORM_DELETION_INTERNAL); } PG_FUNCTION_INFO_V1(alter_graph); /* * Function alter_graph, invoked by the sql function - * alter_graph(graph_name name, operation cstring, new_value name) * NOTE: Currently only RENAME is supported. * graph_name and new_value are case sensitive. * operation is case insensitive. */ Datum alter_graph(PG_FUNCTION_ARGS) { Name graph_name; Name new_value; char *operation; if (PG_ARGISNULL(0)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("graph_name must not be NULL"))); } if (PG_ARGISNULL(1)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("operation must not be NULL"))); } if (PG_ARGISNULL(2)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("new_value must not be NULL"))); } graph_name = PG_GETARG_NAME(0); operation = PG_GETARG_CSTRING(1); new_value = PG_GETARG_NAME(2); if (strcasecmp("RENAME", operation) == 0) { rename_graph(graph_name, new_value); } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid operation \"%s\"", operation), errhint("valid operations: RENAME"))); } PG_RETURN_VOID(); } /* * Function to rename a graph by renaming the schema (which is also the * namespace) and updating the name in ag_graph */ static void rename_graph(const Name graph_name, const Name new_name) { char *oldname = NameStr(*graph_name); char *newname = NameStr(*new_name); char *schema_name; if (!is_valid_graph_name(newname)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("new graph name is invalid"))); } /* * ProcessUtilityContext of this command is PROCESS_UTILITY_SUBCOMMAND * so the event trigger will not be fired. * * CommandCounterIncrement() does not have to be called after this. * * NOTE: If graph_name and schema_name are decoupled, this operation does * not required. */ schema_name = get_graph_namespace_name(oldname); RenameSchema(schema_name, newname); update_graph_name(graph_name, new_name); CommandCounterIncrement(); ereport(NOTICE, (errmsg("graph \"%s\" renamed to \"%s\"", oldname, newname))); } // returns a list containing the name of every graph in the database List *get_graphnames(void) { TupleTableSlot *slot; Relation ag_graph; SysScanDesc scan_desc; HeapTuple tuple; List *graphnames = NIL; char *str; ag_graph = table_open(ag_graph_relation_id(), RowExclusiveLock); scan_desc = systable_beginscan(ag_graph, ag_graph_name_index_id(), true, NULL, 0, NULL); slot = MakeTupleTableSlot(RelationGetDescr(ag_graph), &TTSOpsHeapTuple); for (;;) { tuple = systable_getnext(scan_desc); if (!HeapTupleIsValid(tuple)) break; ExecClearTuple(slot); ExecStoreHeapTuple(tuple, slot, false); slot_getallattrs(slot); str = DatumGetCString(slot->tts_values[Anum_ag_graph_name - 1]); graphnames = lappend(graphnames, str); } ExecDropSingleTupleTableSlot(slot); systable_endscan(scan_desc); table_close(ag_graph, RowExclusiveLock); return graphnames; } // deletes all the graphs in the list. void drop_graphs(List *graphnames) { ListCell *lc; foreach(lc, graphnames) { char *graphname = lfirst(lc); DirectFunctionCall2( drop_graph, CStringGetDatum(graphname), BoolGetDatum(true)); } } age-PG16-v1.5.0-rc0/src/backend/commands/label_commands.c000066400000000000000000000705261454606241200226750ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "access/heapam.h" #include "access/xact.h" #include "catalog/dependency.h" #include "catalog/namespace.h" #include "catalog/objectaddress.h" #include "catalog/pg_class_d.h" #include "commands/defrem.h" #include "commands/sequence.h" #include "commands/tablecmds.h" #include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodes.h" #include "nodes/parsenodes.h" #include "nodes/pg_list.h" #include "nodes/plannodes.h" #include "nodes/primnodes.h" #include "nodes/value.h" #include "parser/parse_node.h" #include "parser/parser.h" #include "storage/lockdefs.h" #include "tcop/dest.h" #include "tcop/utility.h" #include "utils/acl.h" #include "utils/builtins.h" #include "utils/inval.h" #include "utils/lsyscache.h" #include "catalog/ag_graph.h" #include "catalog/ag_label.h" #include "commands/label_commands.h" #include "utils/ag_cache.h" #include "utils/agtype.h" #include "utils/graphid.h" #include "utils/name_validation.h" /* * Relation name doesn't have to be label name but the same name is used so * that users can find the backed relation for a label only by its name. */ #define gen_label_relation_name(label_name) (label_name) static void create_table_for_label(char *graph_name, char *label_name, char *schema_name, char *rel_name, char *seq_name, char label_type, List *parents); // common static List *create_edge_table_elements(char *graph_name, char *label_name, char *schema_name, char *rel_name, char *seq_name); static List *create_vertex_table_elements(char *graph_name, char *label_name, char *schema_name, char *rel_name, char *seq_name); static void create_sequence_for_label(RangeVar *seq_range_var); static Constraint *build_pk_constraint(void); static Constraint *build_id_default(char *graph_name, char *label_name, char *schema_name, char *seq_name); static FuncCall *build_id_default_func_expr(char *graph_name, char *label_name, char *schema_name, char *seq_name); static Constraint *build_not_null_constraint(void); static Constraint *build_properties_default(void); static void alter_sequence_owned_by_for_label(RangeVar *seq_range_var, char *rel_name); static int32 get_new_label_id(Oid graph_oid, Oid nsp_id); static void change_label_id_default(char *graph_name, char *label_name, char *schema_name, char *seq_name, Oid relid); // drop static void remove_relation(List *qname); static void range_var_callback_for_remove_relation(const RangeVar *rel, Oid rel_oid, Oid odl_rel_oid, void *arg); PG_FUNCTION_INFO_V1(create_vlabel); /* * This is a callback function * This function will be called when the user will call SELECT create_vlabel. * The function takes two parameters * 1. Graph name * 2. Label Name * Function will create a vertex label * Function returns an error if graph or label names or not provided */ Datum create_vlabel(PG_FUNCTION_ARGS) { char *graph; Name graph_name; char *graph_name_str; Oid graph_oid; List *parent; RangeVar *rv; char *label; Name label_name; char *label_name_str; // checking if user has not provided the graph name if (PG_ARGISNULL(0)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("graph name must not be NULL"))); } // checking if user has not provided the label name if (PG_ARGISNULL(1)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("label name must not be NULL"))); } graph_name = PG_GETARG_NAME(0); label_name = PG_GETARG_NAME(1); graph_name_str = NameStr(*graph_name); label_name_str = NameStr(*label_name); // Check if graph does not exist if (!graph_exists(graph_name_str)) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_SCHEMA), errmsg("graph \"%s\" does not exist.", graph_name_str))); } graph_oid = get_graph_oid(graph_name_str); // Check if label with the input name already exists if (label_exists(label_name_str, graph_oid)) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_SCHEMA), errmsg("label \"%s\" already exists", label_name_str))); } //Create the default label tables graph = graph_name->data; label = label_name->data; rv = get_label_range_var(graph, graph_oid, AG_DEFAULT_LABEL_VERTEX); parent = list_make1(rv); create_label(graph, label, LABEL_TYPE_VERTEX, parent); ereport(NOTICE, (errmsg("VLabel \"%s\" has been created", NameStr(*label_name)))); PG_RETURN_VOID(); } PG_FUNCTION_INFO_V1(create_elabel); /* * This is a callback function * This function will be called when the user will call SELECT create_elabel. * The function takes two parameters * 1. Graph name * 2. Label Name * Function will create an edge label * Function returns an error if graph or label names or not provided */ Datum create_elabel(PG_FUNCTION_ARGS) { char *graph; Name graph_name; char *graph_name_str; Oid graph_oid; List *parent; RangeVar *rv; char *label; Name label_name; char *label_name_str; // checking if user has not provided the graph name if (PG_ARGISNULL(0)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("graph name must not be NULL"))); } // checking if user has not provided the label name if (PG_ARGISNULL(1)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("label name must not be NULL"))); } graph_name = PG_GETARG_NAME(0); label_name = PG_GETARG_NAME(1); graph_name_str = NameStr(*graph_name); label_name_str = NameStr(*label_name); // Check if graph does not exist if (!graph_exists(graph_name_str)) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_SCHEMA), errmsg("graph \"%s\" does not exist.", graph_name_str))); } graph_oid = get_graph_oid(graph_name_str); // Check if label with the input name already exists if (label_exists(label_name_str, graph_oid)) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_SCHEMA), errmsg("label \"%s\" already exists", label_name_str))); } //Create the default label tables graph = graph_name->data; label = label_name->data; rv = get_label_range_var(graph, graph_oid, AG_DEFAULT_LABEL_EDGE); parent = list_make1(rv); create_label(graph, label, LABEL_TYPE_EDGE, parent); ereport(NOTICE, (errmsg("ELabel \"%s\" has been created", NameStr(*label_name)))); PG_RETURN_VOID(); } /* * For the new label, create an entry in ag_catalog.ag_label, create a * new table and sequence. Returns the oid from the new tuple in * ag_catalog.ag_label. */ void create_label(char *graph_name, char *label_name, char label_type, List *parents) { graph_cache_data *cache_data; Oid graph_oid; Oid nsp_id; char *schema_name; char *rel_name; char *seq_name; RangeVar *seq_range_var; int32 label_id; Oid relation_id; if (!is_valid_label(label_name, label_type)) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_SCHEMA), errmsg("label name is invalid"))); } if (!is_valid_label(label_name, label_type)) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_SCHEMA), errmsg("label name is invalid"))); } cache_data = search_graph_name_cache(graph_name); if (!cache_data) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_SCHEMA), errmsg("graph \"%s\" does not exist", graph_name))); } graph_oid = cache_data->oid; nsp_id = cache_data->namespace; // create a sequence for the new label to generate unique IDs for vertices schema_name = get_namespace_name(nsp_id); rel_name = gen_label_relation_name(label_name); seq_name = ChooseRelationName(rel_name, "id", "seq", nsp_id, false); seq_range_var = makeRangeVar(schema_name, seq_name, -1); create_sequence_for_label(seq_range_var); // create a table for the new label create_table_for_label(graph_name, label_name, schema_name, rel_name, seq_name, label_type, parents); // record the new label in ag_label relation_id = get_relname_relid(rel_name, nsp_id); // If a label has parents, switch the parents id default, with its own. if (list_length(parents) != 0) change_label_id_default(graph_name, label_name, schema_name, seq_name, relation_id); // associate the sequence with the "id" column alter_sequence_owned_by_for_label(seq_range_var, rel_name); // get a new "id" for the new label label_id = get_new_label_id(graph_oid, nsp_id); insert_label(label_name, graph_oid, label_id, label_type, relation_id, seq_name); CommandCounterIncrement(); } // CREATE TABLE `schema_name`.`rel_name` ( // "id" graphid PRIMARY KEY DEFAULT "ag_catalog"."_graphid"(...), // "start_id" graphid NOT NULL note: only for edge labels // "end_id" graphid NOT NULL note: only for edge labels // "properties" agtype NOT NULL DEFAULT "ag_catalog"."agtype_build_map"() // ) static void create_table_for_label(char *graph_name, char *label_name, char *schema_name, char *rel_name, char *seq_name, char label_type, List *parents) { CreateStmt *create_stmt; PlannedStmt *wrapper; create_stmt = makeNode(CreateStmt); // relpersistence is set to RELPERSISTENCE_PERMANENT by makeRangeVar() create_stmt->relation = makeRangeVar(schema_name, rel_name, -1); /* * When a new table has parents, do not create a column definition list. * Use the parents' column definition list instead, via Postgres' * inheritance system. */ if (list_length(parents) != 0) create_stmt->tableElts = NIL; else if (label_type == LABEL_TYPE_EDGE) create_stmt->tableElts = create_edge_table_elements( graph_name, label_name, schema_name, rel_name, seq_name); else if (label_type == LABEL_TYPE_VERTEX) create_stmt->tableElts = create_vertex_table_elements( graph_name, label_name, schema_name, rel_name, seq_name); else ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR), errmsg("undefined label type \'%c\'", label_type))); create_stmt->inhRelations = parents; create_stmt->partbound = NULL; create_stmt->ofTypename = NULL; create_stmt->constraints = NIL; create_stmt->options = NIL; create_stmt->oncommit = ONCOMMIT_NOOP; create_stmt->tablespacename = NULL; create_stmt->if_not_exists = false; wrapper = makeNode(PlannedStmt); wrapper->commandType = CMD_UTILITY; wrapper->canSetTag = false; wrapper->utilityStmt = (Node *)create_stmt; wrapper->stmt_location = -1; wrapper->stmt_len = 0; ProcessUtility(wrapper, "(generated CREATE TABLE command)", false, PROCESS_UTILITY_SUBCOMMAND, NULL, NULL, None_Receiver, NULL); // CommandCounterIncrement() is called in ProcessUtility() } // CREATE TABLE `schema_name`.`rel_name` ( // "id" graphid PRIMARY KEY DEFAULT "ag_catalog"."_graphid"(...), // "start_id" graphid NOT NULL // "end_id" graphid NOT NULL // "properties" agtype NOT NULL DEFAULT "ag_catalog"."agtype_build_map"() // ) static List *create_edge_table_elements(char *graph_name, char *label_name, char *schema_name, char *rel_name, char *seq_name) { ColumnDef *id; ColumnDef *start_id; ColumnDef *end_id; ColumnDef *props; // "id" graphid PRIMARY KEY DEFAULT "ag_catalog"."_graphid"(...) id = makeColumnDef(AG_EDGE_COLNAME_ID, GRAPHIDOID, -1, InvalidOid); id->constraints = list_make2(build_pk_constraint(), build_id_default(graph_name, label_name, schema_name, seq_name)); // "start_id" graphid NOT NULL start_id = makeColumnDef(AG_EDGE_COLNAME_START_ID, GRAPHIDOID, -1, InvalidOid); start_id->constraints = list_make1(build_not_null_constraint()); // "end_id" graphid NOT NULL end_id = makeColumnDef(AG_EDGE_COLNAME_END_ID, GRAPHIDOID, -1, InvalidOid); end_id->constraints = list_make1(build_not_null_constraint()); // "properties" agtype NOT NULL DEFAULT "ag_catalog"."agtype_build_map"() props = makeColumnDef(AG_EDGE_COLNAME_PROPERTIES, AGTYPEOID, -1, InvalidOid); props->constraints = list_make2(build_not_null_constraint(), build_properties_default()); return list_make4(id, start_id, end_id, props); } // CREATE TABLE `schema_name`.`rel_name` ( // "id" graphid PRIMARY KEY DEFAULT "ag_catalog"."_graphid"(...), // "properties" agtype NOT NULL DEFAULT "ag_catalog"."agtype_build_map"() // ) static List *create_vertex_table_elements(char *graph_name, char *label_name, char *schema_name, char *rel_name, char *seq_name) { ColumnDef *id; ColumnDef *props; // "id" graphid PRIMARY KEY DEFAULT "ag_catalog"."_graphid"(...) id = makeColumnDef(AG_VERTEX_COLNAME_ID, GRAPHIDOID, -1, InvalidOid); id->constraints = list_make2(build_pk_constraint(), build_id_default(graph_name, label_name, schema_name, seq_name)); // "properties" agtype NOT NULL DEFAULT "ag_catalog"."agtype_build_map"() props = makeColumnDef(AG_VERTEX_COLNAME_PROPERTIES, AGTYPEOID, -1, InvalidOid); props->constraints = list_make2(build_not_null_constraint(), build_properties_default()); return list_make2(id, props); } // CREATE SEQUENCE `seq_range_var` MAXVALUE `LOCAL_ID_MAX` static void create_sequence_for_label(RangeVar *seq_range_var) { ParseState *pstate; CreateSeqStmt *seq_stmt; char buf[32]; // greater than MAXINT8LEN+1 DefElem *maxvalue; pstate = make_parsestate(NULL); pstate->p_sourcetext = "(generated CREATE SEQUENCE command)"; seq_stmt = makeNode(CreateSeqStmt); seq_stmt->sequence = seq_range_var; pg_lltoa(ENTRY_ID_MAX, buf); maxvalue = makeDefElem("maxvalue", (Node *)makeFloat(pstrdup(buf)), -1); seq_stmt->options = list_make1(maxvalue); seq_stmt->ownerId = InvalidOid; seq_stmt->for_identity = false; seq_stmt->if_not_exists = false; DefineSequence(pstate, seq_stmt); CommandCounterIncrement(); } /* * Builds the primary key constraint for when a table is created. */ static Constraint *build_pk_constraint(void) { Constraint *pk; pk = makeNode(Constraint); pk->contype = CONSTR_PRIMARY; pk->location = -1; pk->keys = NULL; pk->options = NIL; pk->indexname = NULL; pk->indexspace = NULL; return pk; } /* * Construct a FuncCall node that will create the default logic for the label's * id. */ static FuncCall *build_id_default_func_expr(char *graph_name, char *label_name, char *schema_name, char *seq_name) { List *label_id_func_name; A_Const *graph_name_const; A_Const *label_name_const; List *label_id_func_args; FuncCall *label_id_func; List *nextval_func_name; char *qualified_seq_name; A_Const *qualified_seq_name_const; TypeCast *regclass_cast; List *nextval_func_args; FuncCall *nextval_func; List *graphid_func_name; List *graphid_func_args; FuncCall *graphid_func; // Build a node that gets the label id label_id_func_name = list_make2(makeString("ag_catalog"), makeString("_label_id")); graph_name_const = makeNode(A_Const); graph_name_const->val.sval.type = T_String; graph_name_const->val.sval.sval = graph_name; graph_name_const->location = -1; label_name_const = makeNode(A_Const); label_name_const->val.sval.type = T_String; label_name_const->val.sval.sval = label_name; label_name_const->location = -1; label_id_func_args = list_make2(graph_name_const, label_name_const); label_id_func = makeFuncCall(label_id_func_name, label_id_func_args, COERCE_SQL_SYNTAX, -1); //Build a node that will get the next val from the label's sequence nextval_func_name = SystemFuncName("nextval"); qualified_seq_name = quote_qualified_identifier(schema_name, seq_name); qualified_seq_name_const = makeNode(A_Const); qualified_seq_name_const->val.sval.type = T_String; qualified_seq_name_const->val.sval.sval = qualified_seq_name; qualified_seq_name_const->location = -1; regclass_cast = makeNode(TypeCast); regclass_cast->typeName = SystemTypeName("regclass"); regclass_cast->arg = (Node *)qualified_seq_name_const; regclass_cast->location = -1; nextval_func_args = list_make1(regclass_cast); nextval_func = makeFuncCall(nextval_func_name, nextval_func_args, COERCE_SQL_SYNTAX, -1); /* * Build a node that constructs the graphid from the label id function * and the next val function for the given sequence. */ graphid_func_name = list_make2(makeString("ag_catalog"), makeString("_graphid")); graphid_func_args = list_make2(label_id_func, nextval_func); graphid_func = makeFuncCall(graphid_func_name, graphid_func_args, COERCE_SQL_SYNTAX, -1); return graphid_func; } /* * Construct a default constraint on the id column for a newly created table */ static Constraint *build_id_default(char *graph_name, char *label_name, char *schema_name, char *seq_name) { FuncCall *graphid_func; Constraint *id_default; graphid_func = build_id_default_func_expr(graph_name, label_name, schema_name, seq_name); id_default = makeNode(Constraint); id_default->contype = CONSTR_DEFAULT; id_default->location = -1; id_default->raw_expr = (Node *)graphid_func; id_default->cooked_expr = NULL; return id_default; } // NOT NULL static Constraint *build_not_null_constraint(void) { Constraint *not_null; not_null = makeNode(Constraint); not_null->contype = CONSTR_NOTNULL; not_null->location = -1; return not_null; } // DEFAULT "ag_catalog"."agtype_build_map"() static Constraint *build_properties_default(void) { List *func_name; FuncCall *func; Constraint *props_default; // "ag_catalog"."agtype_build_map"() func_name = list_make2(makeString("ag_catalog"), makeString("agtype_build_map")); func = makeFuncCall(func_name, NIL, COERCE_SQL_SYNTAX, -1); props_default = makeNode(Constraint); props_default->contype = CONSTR_DEFAULT; props_default->location = -1; props_default->raw_expr = (Node *)func; props_default->cooked_expr = NULL; return props_default; } /* * Alter the default constraint on the label's id to the use the given * sequence. */ static void change_label_id_default(char *graph_name, char *label_name, char *schema_name, char *seq_name, Oid relid) { ParseState *pstate; AlterTableStmt *tbl_stmt; AlterTableCmd *tbl_cmd; RangeVar *rv; FuncCall *func_call; AlterTableUtilityContext atuc; func_call = build_id_default_func_expr(graph_name, label_name, schema_name, seq_name); rv = makeRangeVar(schema_name, label_name, -1); pstate = make_parsestate(NULL); pstate->p_sourcetext = "(generated ALTER TABLE command)"; tbl_stmt = makeNode(AlterTableStmt); tbl_stmt->relation = rv; tbl_stmt->missing_ok = false; tbl_cmd = makeNode(AlterTableCmd); tbl_cmd->subtype = AT_ColumnDefault; tbl_cmd->name = "id"; tbl_cmd->def = (Node *)func_call; tbl_stmt->cmds = list_make1(tbl_cmd); atuc.relid = relid; atuc.queryEnv = pstate->p_queryEnv; atuc.queryString = pstate->p_sourcetext; AlterTable(tbl_stmt, AccessExclusiveLock, &atuc); CommandCounterIncrement(); } // CREATE SEQUENCE `seq_range_var` OWNED BY `schema_name`.`rel_name`."id" static void alter_sequence_owned_by_for_label(RangeVar *seq_range_var, char *rel_name) { ParseState *pstate; AlterSeqStmt *seq_stmt; char *schema_name; List *id; DefElem *owned_by; pstate = make_parsestate(NULL); pstate->p_sourcetext = "(generated ALTER SEQUENCE command)"; seq_stmt = makeNode(AlterSeqStmt); seq_stmt->sequence = seq_range_var; schema_name = seq_range_var->schemaname; id = list_make3(makeString(schema_name), makeString(rel_name), makeString("id")); owned_by = makeDefElem("owned_by", (Node *)id, -1); seq_stmt->options = list_make1(owned_by); seq_stmt->for_identity = false; seq_stmt->missing_ok = false; AlterSequence(pstate, seq_stmt); CommandCounterIncrement(); } static int32 get_new_label_id(Oid graph_oid, Oid nsp_id) { Oid seq_id; int cnt; // get the OID of the sequence seq_id = get_relname_relid(LABEL_ID_SEQ_NAME, nsp_id); if (!OidIsValid(seq_id)) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_TABLE), errmsg("sequence \"%s\" does not exists", LABEL_ID_SEQ_NAME))); } for (cnt = LABEL_ID_MIN; cnt <= LABEL_ID_MAX; cnt++) { int32 label_id; // the data type of the sequence is integer (int4) label_id = (int32) nextval_internal(seq_id, true); Assert(label_id_is_valid(label_id)); if (!label_id_exists(graph_oid, label_id)) { return (int32) label_id; } } ereport(ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), errmsg("no more new labels are available"), errhint("The maximum number of labels in a graph is %d", LABEL_ID_MAX))); return 0; } PG_FUNCTION_INFO_V1(drop_label); Datum drop_label(PG_FUNCTION_ARGS) { Name graph_name; Name label_name; bool force; char *graph_name_str; graph_cache_data *cache_data; Oid graph_oid; Oid nsp_id; char *label_name_str; Oid label_relation; char *schema_name; char *rel_name; List *qname; if (PG_ARGISNULL(0)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("graph name must not be NULL"))); } if (PG_ARGISNULL(1)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("label name must not be NULL"))); } graph_name = PG_GETARG_NAME(0); label_name = PG_GETARG_NAME(1); force = PG_GETARG_BOOL(2); graph_name_str = NameStr(*graph_name); cache_data = search_graph_name_cache(graph_name_str); if (!cache_data) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_SCHEMA), errmsg("graph \"%s\" does not exist", graph_name_str))); } graph_oid = cache_data->oid; nsp_id = cache_data->namespace; label_name_str = NameStr(*label_name); label_relation = get_label_relation(label_name_str, graph_oid); if (!OidIsValid(label_relation)) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_TABLE), errmsg("label \"%s\" does not exist", label_name_str))); } if (force) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("force option is not supported yet"))); } /* validate schema_name */ schema_name = get_namespace_name(nsp_id); if (schema_name == NULL) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_TABLE), errmsg("schema_name not found for namespace id \"%d\"", nsp_id))); } /* validate rel_name */ rel_name = get_rel_name(label_relation); if (rel_name == NULL) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_TABLE), errmsg("rel_name not found for label \"%s\"", label_name_str))); } /* build qualified name */ qname = list_make2(makeString(schema_name), makeString(rel_name)); remove_relation(qname); // CommandCounterIncrement() is called in performDeletion() // delete_label() will be called in object_access() ereport(NOTICE, (errmsg("label \"%s\".\"%s\" has been dropped", graph_name_str, label_name_str))); PG_RETURN_VOID(); } // See RemoveRelations() for more details. static void remove_relation(List *qname) { RangeVar *rel; Oid rel_oid; ObjectAddress address; Assert(list_length(qname) == 2); // concurrent is false so lockmode is AccessExclusiveLock // relkind is RELKIND_RELATION AcceptInvalidationMessages(); rel = makeRangeVarFromNameList(qname); rel_oid = RangeVarGetRelidExtended(rel, AccessExclusiveLock, RVR_MISSING_OK, range_var_callback_for_remove_relation, NULL); if (!OidIsValid(rel_oid)) { /* * before calling this function, this condition is already checked in * drop_graph() */ ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR), errmsg("ag_label catalog is corrupted"), errhint("Table \"%s\".\"%s\" does not exist", rel->schemaname, rel->relname))); } // concurrent is false ObjectAddressSet(address, RelationRelationId, rel_oid); /* * set PERFORM_DELETION_INTERNAL flag so that object_access_hook can ignore * this deletion */ performDeletion(&address, DROP_RESTRICT, PERFORM_DELETION_INTERNAL); } // See RangeVarCallbackForDropRelation() for more details. static void range_var_callback_for_remove_relation(const RangeVar *rel, Oid rel_oid, Oid odl_rel_oid, void *arg) { /* * arg is NULL because relkind is always RELKIND_RELATION, heapOid is * always InvalidOid, partParentOid is always InvalidOid, and concurrent is * always false. See RemoveRelations() for more details. */ // heapOid is always InvalidOid // partParentOid is always InvalidOid if (!OidIsValid(rel_oid)) return; // classform->relkind is always RELKIND_RELATION // relkind == expected_relkind if (!object_ownercheck(rel_oid, get_rel_namespace(rel_oid), GetUserId())) { aclcheck_error(ACLCHECK_NOT_OWNER, get_relkind_objtype(get_rel_relkind(rel_oid)), rel->relname); } // the target relation is not system class // relkind is always RELKIND_RELATION // is_partition is false } age-PG16-v1.5.0-rc0/src/backend/executor/000077500000000000000000000000001454606241200176145ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/src/backend/executor/cypher_create.c000066400000000000000000000511031454606241200225750ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "access/heapam.h" #include "access/htup_details.h" #include "access/xact.h" #include "executor/tuptable.h" #include "nodes/execnodes.h" #include "nodes/extensible.h" #include "nodes/nodes.h" #include "nodes/plannodes.h" #include "rewrite/rewriteHandler.h" #include "utils/rel.h" #include "catalog/ag_label.h" #include "executor/cypher_executor.h" #include "executor/cypher_utils.h" #include "nodes/cypher_nodes.h" #include "utils/agtype.h" #include "utils/graphid.h" static void begin_cypher_create(CustomScanState *node, EState *estate, int eflags); static TupleTableSlot *exec_cypher_create(CustomScanState *node); static void end_cypher_create(CustomScanState *node); static void rescan_cypher_create(CustomScanState *node); static void create_edge(cypher_create_custom_scan_state *css, cypher_target_node *node, Datum prev_vertex_id, ListCell *next, List *list); static Datum create_vertex(cypher_create_custom_scan_state *css, cypher_target_node *node, ListCell *next, List *list); static void process_pattern(cypher_create_custom_scan_state *css); const CustomExecMethods cypher_create_exec_methods = {CREATE_SCAN_STATE_NAME, begin_cypher_create, exec_cypher_create, end_cypher_create, rescan_cypher_create, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; static void begin_cypher_create(CustomScanState *node, EState *estate, int eflags) { cypher_create_custom_scan_state *css = (cypher_create_custom_scan_state *)node; ListCell *lc; Plan *subplan; Assert(list_length(css->cs->custom_plans) == 1); subplan = linitial(css->cs->custom_plans); node->ss.ps.lefttree = ExecInitNode(subplan, estate, eflags); ExecAssignExprContext(estate, &node->ss.ps); ExecInitScanTupleSlot(estate, &node->ss, ExecGetResultType(node->ss.ps.lefttree), &TTSOpsHeapTuple); if (!CYPHER_CLAUSE_IS_TERMINAL(css->flags)) { TupleDesc tupdesc = node->ss.ss_ScanTupleSlot->tts_tupleDescriptor; ExecAssignProjectionInfo(&node->ss.ps, tupdesc); } foreach (lc, css->pattern) { cypher_create_path *path = lfirst(lc); ListCell *lc2; foreach (lc2, path->target_nodes) { cypher_target_node *cypher_node = (cypher_target_node *)lfirst(lc2); Relation rel; if (!CYPHER_TARGET_NODE_INSERT_ENTITY(cypher_node->flags)) continue; // Open relation and acquire a row exclusive lock. rel = table_open(cypher_node->relid, RowExclusiveLock); // Initialize resultRelInfo for the vertex cypher_node->resultRelInfo = makeNode(ResultRelInfo); InitResultRelInfo(cypher_node->resultRelInfo, rel, list_length(estate->es_range_table), NULL, estate->es_instrument); // Open all indexes for the relation ExecOpenIndices(cypher_node->resultRelInfo, false); // Setup the relation's tuple slot cypher_node->elemTupleSlot = table_slot_create( rel, &estate->es_tupleTable); if (cypher_node->id_expr != NULL) { cypher_node->id_expr_state = ExecInitExpr(cypher_node->id_expr, (PlanState *)node); } if (cypher_node->prop_expr != NULL) { cypher_node->prop_expr_state = ExecInitExpr(cypher_node->prop_expr, (PlanState *)node); } } } /* * Postgres does not assign the es_output_cid in queries that do * not write to disk, ie: SELECT commands. We need the command id * for our clauses, and we may need to initialize it. We cannot use * GetCurrentCommandId because there may be other cypher clauses * that have modified the command id. */ if (estate->es_output_cid == 0) { estate->es_output_cid = estate->es_snapshot->curcid; } Increment_Estate_CommandId(estate); } /* * CREATE the vertices and edges for a CREATE clause pattern. */ static void process_pattern(cypher_create_custom_scan_state *css) { ListCell *lc2; foreach (lc2, css->pattern) { cypher_create_path *path = lfirst(lc2); List *list = path->target_nodes; ListCell *lc = list_head(list); /* * Create the first vertex. The create_vertex function will * create the rest of the path, if necessary. */ create_vertex(css, lfirst(lc), lnext(list, lc), list); /* * If this path is a variable, take the list that was accumulated * in the vertex/edge creation, create a path datum, and add to the * scantuple slot. */ if (path->path_attr_num != InvalidAttrNumber) { TupleTableSlot *scantuple; PlanState *ps; Datum result; ps = css->css.ss.ps.lefttree; scantuple = ps->ps_ExprContext->ecxt_scantuple; result = make_path(css->path_values); scantuple->tts_values[path->path_attr_num - 1] = result; scantuple->tts_isnull[path->path_attr_num - 1] = false; } css->path_values = NIL; } } static TupleTableSlot *exec_cypher_create(CustomScanState *node) { cypher_create_custom_scan_state *css = (cypher_create_custom_scan_state *)node; EState *estate = css->css.ss.ps.state; ExprContext *econtext = css->css.ss.ps.ps_ExprContext; TupleTableSlot *slot; bool terminal = CYPHER_CLAUSE_IS_TERMINAL(css->flags); bool used = false; /* * If the CREATE clause was the final cypher clause written then we aren't * returning anything from this result node. So the exec_cypher_create * function will only be called once. Therefore we will process all tuples * from the subtree at once. */ do { /*Process the subtree first */ Decrement_Estate_CommandId(estate) slot = ExecProcNode(node->ss.ps.lefttree); Increment_Estate_CommandId(estate) /* break when there are no tuples */ if (TupIsNull(slot)) { break; } /* setup the scantuple that the process_pattern needs */ econtext->ecxt_scantuple = node->ss.ps.lefttree->ps_ProjInfo->pi_exprContext->ecxt_scantuple; process_pattern(css); /* * This may not be necessary. If we have an empty pattern, nothing was * inserted and the current command Id was not used. So, only flag it * if there is a non empty pattern. */ if (list_length(css->pattern) > 0) { /* the current command Id has been used */ used = true; } } while (terminal); /* * If the current command Id wasn't used, nothing was inserted and we're * done. */ if (!used) { return NULL; } /* update the current command Id */ CommandCounterIncrement(); /* if this was a terminal CREATE just return NULL */ if (terminal) { return NULL; } econtext->ecxt_scantuple = ExecProject(node->ss.ps.lefttree->ps_ProjInfo); return ExecProject(node->ss.ps.ps_ProjInfo); } static void end_cypher_create(CustomScanState *node) { cypher_create_custom_scan_state *css = (cypher_create_custom_scan_state *)node; ListCell *lc; // increment the command counter CommandCounterIncrement(); ExecEndNode(node->ss.ps.lefttree); foreach (lc, css->pattern) { cypher_create_path *path = lfirst(lc); ListCell *lc2; foreach (lc2, path->target_nodes) { cypher_target_node *cypher_node = (cypher_target_node *)lfirst(lc2); if (!CYPHER_TARGET_NODE_INSERT_ENTITY(cypher_node->flags)) { continue; } // close all indices for the node ExecCloseIndices(cypher_node->resultRelInfo); // close the relation itself table_close(cypher_node->resultRelInfo->ri_RelationDesc, RowExclusiveLock); } } } static void rescan_cypher_create(CustomScanState *node) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("cypher create clause cannot be rescanned"), errhint("its unsafe to use joins in a query with a Cypher CREATE clause"))); } Node *create_cypher_create_plan_state(CustomScan *cscan) { cypher_create_custom_scan_state *cypher_css = palloc0(sizeof(cypher_create_custom_scan_state)); cypher_create_target_nodes *target_nodes; char *serialized_data; Const *c; cypher_css->cs = cscan; // get the serialized data structure from the Const and deserialize it. c = linitial(cscan->custom_private); serialized_data = (char *)c->constvalue; target_nodes = stringToNode(serialized_data); Assert(is_ag_node(target_nodes, cypher_create_target_nodes)); cypher_css->path_values = NIL; cypher_css->pattern = target_nodes->paths; cypher_css->flags = target_nodes->flags; cypher_css->graph_oid = target_nodes->graph_oid; cypher_css->css.ss.ps.type = T_CustomScanState; cypher_css->css.methods = &cypher_create_exec_methods; return (Node *)cypher_css; } /* * Create the edge entity. */ static void create_edge(cypher_create_custom_scan_state *css, cypher_target_node *node, Datum prev_vertex_id, ListCell *next, List *list) { bool isNull; EState *estate = css->css.ss.ps.state; ExprContext *econtext = css->css.ss.ps.ps_ExprContext; ResultRelInfo *resultRelInfo = node->resultRelInfo; ResultRelInfo **old_estate_es_result_relations = NULL; TupleTableSlot *elemTupleSlot = node->elemTupleSlot; TupleTableSlot *scanTupleSlot = econtext->ecxt_scantuple; Datum id; Datum start_id, end_id, next_vertex_id; List *prev_path = css->path_values; Assert(node->type == LABEL_KIND_EDGE); Assert(lfirst(next) != NULL); /* * Create the next vertex before creating the edge. We need the * next vertex's id. */ css->path_values = NIL; next_vertex_id = create_vertex(css, lfirst(next), lnext(list, next), list); /* * Set the start and end vertex ids */ if (node->dir == CYPHER_REL_DIR_RIGHT) { // create pattern (prev_vertex)-[edge]->(next_vertex) start_id = prev_vertex_id; end_id = next_vertex_id; } else if (node->dir == CYPHER_REL_DIR_LEFT) { // create pattern (prev_vertex)<-[edge]-(next_vertex) start_id = next_vertex_id; end_id = prev_vertex_id; } else { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("edge direction must be specified in a CREATE clause"))); } /* * Set estate's result relation to the vertex's result * relation. * * Note: This obliterates what was their previously */ /* save the old result relation info */ old_estate_es_result_relations = estate->es_result_relations; estate->es_result_relations = &resultRelInfo; ExecClearTuple(elemTupleSlot); // Graph Id for the edge id = ExecEvalExpr(node->id_expr_state, econtext, &isNull); elemTupleSlot->tts_values[edge_tuple_id] = id; elemTupleSlot->tts_isnull[edge_tuple_id] = isNull; // Graph id for the starting vertex elemTupleSlot->tts_values[edge_tuple_start_id] = start_id; elemTupleSlot->tts_isnull[edge_tuple_start_id] = false; // Graph id for the ending vertex elemTupleSlot->tts_values[edge_tuple_end_id] = end_id; elemTupleSlot->tts_isnull[edge_tuple_end_id] = false; // Edge's properties map elemTupleSlot->tts_values[edge_tuple_properties] = scanTupleSlot->tts_values[node->prop_attr_num]; elemTupleSlot->tts_isnull[edge_tuple_properties] = scanTupleSlot->tts_isnull[node->prop_attr_num]; // Insert the new edge insert_entity_tuple(resultRelInfo, elemTupleSlot, estate); /* restore the old result relation info */ estate->es_result_relations = old_estate_es_result_relations; /* * When the edge is used by clauses higher in the execution tree * we need to create an edge datum. When the edge is a variable, * add to the scantuple slot. When the edge is part of a path * variable, add to the list. */ if (CYPHER_TARGET_NODE_OUTPUT(node->flags)) { PlanState *ps = css->css.ss.ps.lefttree; TupleTableSlot *scantuple = ps->ps_ExprContext->ecxt_scantuple; Datum result; result = make_edge( id, start_id, end_id, CStringGetDatum(node->label_name), scanTupleSlot->tts_values[node->prop_attr_num]); if (CYPHER_TARGET_NODE_IN_PATH(node->flags)) { prev_path = lappend(prev_path, DatumGetPointer(result)); css->path_values = list_concat(prev_path, css->path_values); } if (CYPHER_TARGET_NODE_IS_VARIABLE(node->flags)) { scantuple->tts_values[node->tuple_position - 1] = result; scantuple->tts_isnull[node->tuple_position - 1] = false; } } } /* * Creates the vertex entity, returns the vertex's id in case the caller is * the create_edge function. */ static Datum create_vertex(cypher_create_custom_scan_state *css, cypher_target_node *node, ListCell *next, List *list) { bool isNull; Datum id; EState *estate = css->css.ss.ps.state; ExprContext *econtext = css->css.ss.ps.ps_ExprContext; ResultRelInfo *resultRelInfo = node->resultRelInfo; TupleTableSlot *elemTupleSlot = node->elemTupleSlot; TupleTableSlot *scanTupleSlot = econtext->ecxt_scantuple; Assert(node->type == LABEL_KIND_VERTEX); /* * Vertices in a path might already exists. If they do get the id * to pass to the edges before and after it. Otherwise, insert the * new vertex into it's table and then pass the id along. */ if (CYPHER_TARGET_NODE_INSERT_ENTITY(node->flags)) { ResultRelInfo **old_estate_es_result_relations = NULL; /* * Set estate's result relation to the vertex's result * relation. * * Note: This obliterates what was their previously */ /* save the old result relation info */ old_estate_es_result_relations = estate->es_result_relations; estate->es_result_relations = &resultRelInfo; ExecClearTuple(elemTupleSlot); // get the next graphid for this vertex. id = ExecEvalExpr(node->id_expr_state, econtext, &isNull); elemTupleSlot->tts_values[vertex_tuple_id] = id; elemTupleSlot->tts_isnull[vertex_tuple_id] = isNull; // get the properties for this vertex elemTupleSlot->tts_values[vertex_tuple_properties] = scanTupleSlot->tts_values[node->prop_attr_num]; elemTupleSlot->tts_isnull[vertex_tuple_properties] = scanTupleSlot->tts_isnull[node->prop_attr_num]; // Insert the new vertex insert_entity_tuple(resultRelInfo, elemTupleSlot, estate); /* restore the old result relation info */ estate->es_result_relations = old_estate_es_result_relations; /* * When the vertex is used by clauses higher in the execution tree * we need to create a vertex datum. When the vertex is a variable, * add to the scantuple slot. When the vertex is part of a path * variable, add to the list. */ if (CYPHER_TARGET_NODE_OUTPUT(node->flags)) { TupleTableSlot *scantuple; PlanState *ps; Datum result; ps = css->css.ss.ps.lefttree; scantuple = ps->ps_ExprContext->ecxt_scantuple; // make the vertex agtype result = make_vertex(id, CStringGetDatum(node->label_name), scanTupleSlot->tts_values[node->prop_attr_num]); // append to the path list if (CYPHER_TARGET_NODE_IN_PATH(node->flags)) { css->path_values = lappend(css->path_values, DatumGetPointer(result)); } /* * Put the vertex in the correct spot in the scantuple, so parent * execution nodes can reference the newly created variable. */ if (CYPHER_TARGET_NODE_IS_VARIABLE(node->flags)) { scantuple->tts_values[node->tuple_position - 1] = result; scantuple->tts_isnull[node->tuple_position - 1] = false; } } } else { agtype *a; agtype_value *v; agtype_value *id_value; TupleTableSlot *scantuple; PlanState *ps; ps = css->css.ss.ps.lefttree; scantuple = ps->ps_ExprContext->ecxt_scantuple; // get the vertex agtype in the scanTupleSlot a = DATUM_GET_AGTYPE_P(scantuple->tts_values[node->tuple_position - 1]); // Convert to an agtype value v = get_ith_agtype_value_from_container(&a->root, 0); if (v->type != AGTV_VERTEX) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("agtype must resolve to a vertex"))); } // extract the id agtype field id_value = GET_AGTYPE_VALUE_OBJECT_VALUE(v, "id"); // extract the graphid and cast to a Datum id = GRAPHID_GET_DATUM(id_value->val.int_value); /* * Its possible the variable has already been deleted. There are two * ways this can happen. One is the query explicitly deleted the * variable, the is_deleted flag will catch that. However, it is * possible the user deleted the vertex using another variable name. We * need to scan the table to find the vertex's current status relative * to this CREATE clause. If the variable was initially created in this * clause, we can skip this check, because the transaction system * guarantees that nothing can happen to that tuple, as far as we are * concerned with at this time. */ if (!SAFE_TO_SKIP_EXISTENCE_CHECK(node->flags)) { if (!entity_exists(estate, css->graph_oid, DATUM_GET_GRAPHID(id))) { ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("vertex assigned to variable %s was deleted", node->variable_name))); } } if (CYPHER_TARGET_NODE_IN_PATH(node->flags)) { Datum vertex = scanTupleSlot->tts_values[node->tuple_position - 1]; css->path_values = lappend(css->path_values, DatumGetPointer(vertex)); } } // If the path continues, create the next edge, passing the vertex's id. if (next != NULL) { create_edge(css, lfirst(next), id, lnext(list, next), list); } return id; } age-PG16-v1.5.0-rc0/src/backend/executor/cypher_delete.c000066400000000000000000000471641454606241200226100ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "access/heapam.h" #include "access/htup_details.h" #include "access/multixact.h" #include "access/table.h" #include "access/xact.h" #include "executor/tuptable.h" #include "nodes/execnodes.h" #include "nodes/extensible.h" #include "nodes/nodes.h" #include "nodes/plannodes.h" #include "parser/parsetree.h" #include "storage/bufmgr.h" #include "utils/rel.h" #include "common/hashfn.h" #include "catalog/ag_label.h" #include "executor/cypher_executor.h" #include "executor/cypher_utils.h" #include "nodes/cypher_nodes.h" #include "utils/agtype.h" #include "utils/graphid.h" static void begin_cypher_delete(CustomScanState *node, EState *estate, int eflags); static TupleTableSlot *exec_cypher_delete(CustomScanState *node); static void end_cypher_delete(CustomScanState *node); static void rescan_cypher_delete(CustomScanState *node); static void process_delete_list(CustomScanState *node); static void check_for_connected_edges(CustomScanState *node); static agtype_value *extract_entity(CustomScanState *node, TupleTableSlot *scanTupleSlot, int entity_position); static void delete_entity(EState *estate, ResultRelInfo *resultRelInfo, HeapTuple tuple); const CustomExecMethods cypher_delete_exec_methods = {DELETE_SCAN_STATE_NAME, begin_cypher_delete, exec_cypher_delete, end_cypher_delete, rescan_cypher_delete, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; /* * Initialization at the beginning of execution. Setup the child node, * setup its scan tuple slot and projection info, expression context, * collect metadata about visible edges, and alter the commandid for * the transaction. */ static void begin_cypher_delete(CustomScanState *node, EState *estate, int eflags) { cypher_delete_custom_scan_state *css = (cypher_delete_custom_scan_state *)node; Plan *subplan; HASHCTL hashctl; Assert(list_length(css->cs->custom_plans) == 1); // setup child subplan = linitial(css->cs->custom_plans); node->ss.ps.lefttree = ExecInitNode(subplan, estate, eflags); // setup expr context ExecAssignExprContext(estate, &node->ss.ps); // setup scan tuple slot and projection info ExecInitScanTupleSlot(estate, &node->ss, ExecGetResultType(node->ss.ps.lefttree), &TTSOpsHeapTuple); if (!CYPHER_CLAUSE_IS_TERMINAL(css->flags)) { TupleDesc tupdesc = node->ss.ss_ScanTupleSlot->tts_tupleDescriptor; ExecAssignProjectionInfo(&node->ss.ps, tupdesc); } /* * Get all the labels that are visible to this delete clause at this point * in the transaction. To be used later when the delete clause finds * vertices. */ css->edge_labels = get_all_edge_labels_per_graph(estate, css->delete_data->graph_oid); /* init vertex_id_htab */ MemSet(&hashctl, 0, sizeof(hashctl)); hashctl.keysize = sizeof(graphid); hashctl.entrysize = sizeof(graphid); // entries are not used, but entrysize must >= keysize hashctl.hash = tag_hash; css->vertex_id_htab = hash_create(DELETE_VERTEX_HTAB_NAME, DELETE_VERTEX_HTAB_SIZE, &hashctl, HASH_ELEM | HASH_FUNCTION); /* * Postgres does not assign the es_output_cid in queries that do * not write to disk, ie: SELECT commands. We need the command id * for our clauses, and we may need to initialize it. We cannot use * GetCurrentCommandId because there may be other cypher clauses * that have modified the command id. */ if (estate->es_output_cid == 0) estate->es_output_cid = estate->es_snapshot->curcid; Increment_Estate_CommandId(estate); } /* * Called once per tuple. If this is a terminal DELETE clause * process everyone of its child tuple, otherwise process the * next tuple. */ static TupleTableSlot *exec_cypher_delete(CustomScanState *node) { cypher_delete_custom_scan_state *css = (cypher_delete_custom_scan_state *)node; EState *estate = css->css.ss.ps.state; ExprContext *econtext = css->css.ss.ps.ps_ExprContext; TupleTableSlot *slot; if (CYPHER_CLAUSE_IS_TERMINAL(css->flags)) { /* * If the DELETE clause was the final cypher clause written * then we aren't returning anything from this result node. * So the exec_cypher_delete function will only be called once. * Therefore we will process all tuples from the subtree at once. */ while(true) { //Process the subtree first Decrement_Estate_CommandId(estate) slot = ExecProcNode(node->ss.ps.lefttree); Increment_Estate_CommandId(estate) if (TupIsNull(slot)) break; // setup the scantuple that the process_delete_list needs econtext->ecxt_scantuple = node->ss.ps.lefttree->ps_ProjInfo->pi_exprContext->ecxt_scantuple; process_delete_list(node); } return NULL; } else { //Process the subtree first Decrement_Estate_CommandId(estate) slot = ExecProcNode(node->ss.ps.lefttree); Increment_Estate_CommandId(estate) if (TupIsNull(slot)) return NULL; // setup the scantuple that the process_delete_list needs econtext->ecxt_scantuple = node->ss.ps.lefttree->ps_ProjInfo->pi_exprContext->ecxt_scantuple; process_delete_list(node); econtext->ecxt_scantuple = ExecProject(node->ss.ps.lefttree->ps_ProjInfo); return ExecProject(node->ss.ps.ps_ProjInfo); } } /* * Called at the end of execution. Tell its child to * end its execution. */ static void end_cypher_delete(CustomScanState *node) { check_for_connected_edges(node); hash_destroy(((cypher_delete_custom_scan_state *)node)->vertex_id_htab); ExecEndNode(node->ss.ps.lefttree); } /* * Used for rewinding the scan state and reprocessing the results. * * XXX: This is not currently supported. We need to find out * when this function will be called and determine a process * for allowing the Delete clause to run multiple times without * redundant edits to the database. */ static void rescan_cypher_delete(CustomScanState *node) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("cypher DELETE clause cannot be rescanned"), errhint("its unsafe to use joins in a query with a Cypher DELETE clause"))); } /* * Create the CustomScanState from the CustomScan and pass * necessary metadata. */ Node *create_cypher_delete_plan_state(CustomScan *cscan) { cypher_delete_custom_scan_state *cypher_css = palloc0(sizeof(cypher_delete_custom_scan_state)); cypher_delete_information *delete_data; char *serialized_data; Const *c; cypher_css->cs = cscan; // get the serialized data structure from the Const and deserialize it. c = linitial(cscan->custom_private); serialized_data = (char *)c->constvalue; delete_data = stringToNode(serialized_data); Assert(is_ag_node(delete_data, cypher_delete_information)); cypher_css->delete_data = delete_data; cypher_css->flags = delete_data->flags; cypher_css->css.ss.ps.type = T_CustomScanState; cypher_css->css.methods = &cypher_delete_exec_methods; return (Node *)cypher_css; } /* * Extract the vertex or edge to be deleted, perform some type checking to * validate datum is an agtype vertex or edge. */ static agtype_value *extract_entity(CustomScanState *node, TupleTableSlot *scanTupleSlot, int entity_position) { agtype_value *original_entity_value; agtype *original_entity; TupleDesc tupleDescriptor; tupleDescriptor = scanTupleSlot->tts_tupleDescriptor; // type checking, make sure the entity is an agtype vertex or edge if (tupleDescriptor->attrs[entity_position -1].atttypid != AGTYPEOID) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("DELETE clause can only delete agtype"))); original_entity = DATUM_GET_AGTYPE_P(scanTupleSlot->tts_values[entity_position - 1]); original_entity_value = get_ith_agtype_value_from_container(&original_entity->root, 0); if (original_entity_value->type != AGTV_VERTEX && original_entity_value->type != AGTV_EDGE) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("DELETE clause can only delete vertices and edges"))); return original_entity_value; } /* * Try and delete the entity that is describe by the HeapTuple in the table * described by the resultRelInfo. */ static void delete_entity(EState *estate, ResultRelInfo *resultRelInfo, HeapTuple tuple) { ResultRelInfo **saved_resultRels; LockTupleMode lockmode; TM_FailureData hufd; TM_Result lock_result; TM_Result delete_result; Buffer buffer; // Find the physical tuple, this variable is coming from saved_resultRels = estate->es_result_relations; estate->es_result_relations = &resultRelInfo; lockmode = ExecUpdateLockMode(estate, resultRelInfo); lock_result = heap_lock_tuple(resultRelInfo->ri_RelationDesc, tuple, GetCurrentCommandId(false), lockmode, LockWaitBlock, false, &buffer, &hufd); /* * It is possible the entity may have already been deleted. If the tuple * can be deleted, the lock result will be HeapTupleMayBeUpdated. If the * tuple was already deleted by this DELETE clause, the result would be * TM_SelfModified, if the result was deleted by a previous delete * clause, the result will TM_Invisible. Throw an error if any * other result was returned. */ if (lock_result == TM_Ok) { delete_result = heap_delete(resultRelInfo->ri_RelationDesc, &tuple->t_self, GetCurrentCommandId(true), estate->es_crosscheck_snapshot, true, &hufd, false); /* * Unlike locking, the heap_delete either succeeded * HeapTupleMayBeUpdate, or it failed and returned any other result. */ switch (delete_result) { case TM_Ok: break; case TM_SelfModified: ereport( ERROR, (errcode(ERRCODE_INTERNAL_ERROR), errmsg( "deleting the same entity more than once cannot happen"))); /* ereport never gets here */ break; case TM_Updated: ereport( ERROR, (errcode(ERRCODE_T_R_SERIALIZATION_FAILURE), errmsg("could not serialize access due to concurrent update"))); /* ereport never gets here */ break; default: elog(ERROR, "Entity failed to be update"); /* elog never gets here */ break; } /* increment the command counter */ CommandCounterIncrement(); } else if (lock_result != TM_Invisible && lock_result != TM_SelfModified) { ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR), errmsg("Entity could not be locked for updating"))); } ReleaseBuffer(buffer); estate->es_result_relations = saved_resultRels; } /* * After the delete's subtress has been processed, we then go through the list * of variables to be deleted. */ static void process_delete_list(CustomScanState *node) { cypher_delete_custom_scan_state *css = (cypher_delete_custom_scan_state *)node; ListCell *lc; ExprContext *econtext = css->css.ss.ps.ps_ExprContext; TupleTableSlot *scanTupleSlot = econtext->ecxt_scantuple; EState *estate = node->ss.ps.state; foreach(lc, css->delete_data->delete_items) { cypher_delete_item *item; agtype_value *original_entity_value, *id, *label; ScanKeyData scan_keys[1]; TableScanDesc scan_desc; ResultRelInfo *resultRelInfo; HeapTuple heap_tuple; char *label_name; Integer *pos; int entity_position; item = lfirst(lc); pos = item->entity_position; entity_position = pos->ival; /* skip if the entity is null */ if (scanTupleSlot->tts_isnull[entity_position - 1]) continue; original_entity_value = extract_entity(node, scanTupleSlot, entity_position); id = GET_AGTYPE_VALUE_OBJECT_VALUE(original_entity_value, "id"); label = GET_AGTYPE_VALUE_OBJECT_VALUE(original_entity_value, "label"); label_name = pnstrdup(label->val.string.val, label->val.string.len); resultRelInfo = create_entity_result_rel_info(estate, css->delete_data->graph_name, label_name); /* * Setup the scan key to require the id field on-disc to match the * entity's graphid. */ if (original_entity_value->type == AGTV_VERTEX) { ScanKeyInit(&scan_keys[0], Anum_ag_label_vertex_table_id, BTEqualStrategyNumber, F_GRAPHIDEQ, GRAPHID_GET_DATUM(id->val.int_value)); } else if (original_entity_value->type == AGTV_EDGE) { ScanKeyInit(&scan_keys[0], Anum_ag_label_edge_table_id, BTEqualStrategyNumber, F_GRAPHIDEQ, GRAPHID_GET_DATUM(id->val.int_value)); } else { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("DELETE clause can only delete vertices and edges"))); } /* * Setup the scan description, with the correct snapshot and scan keys. */ estate->es_snapshot->curcid = GetCurrentCommandId(false); estate->es_output_cid = GetCurrentCommandId(false); scan_desc = table_beginscan(resultRelInfo->ri_RelationDesc, estate->es_snapshot, 1, scan_keys); /* Retrieve the tuple. */ heap_tuple = heap_getnext(scan_desc, ForwardScanDirection); /* * If the heap tuple still exists (It wasn't deleted after this variable * was created) we can delete it. Otherwise, its safe to skip this * delete. */ if (!HeapTupleIsValid(heap_tuple)) { table_endscan(scan_desc); destroy_entity_result_rel_info(resultRelInfo); continue; } /* * For vertices, we insert the vertex ID in the hashtable * vertex_id_htab. This hashtable is used later to process * connected edges. */ if (original_entity_value->type == AGTV_VERTEX) { bool found; hash_search(css->vertex_id_htab, (void *)&(id->val.int_value), HASH_ENTER, &found); } /* At this point, we are ready to delete the node/vertex. */ delete_entity(estate, resultRelInfo, heap_tuple); /* Close the scan and the relation. */ table_endscan(scan_desc); destroy_entity_result_rel_info(resultRelInfo); } } /* * Scans the edge tables and checks if the deleted vertices are connected to * any edge(s). For DETACH DELETE, the connected edges are deleted. Otherwise, * an error is thrown. */ static void check_for_connected_edges(CustomScanState *node) { ListCell *lc; cypher_delete_custom_scan_state *css = (cypher_delete_custom_scan_state *)node; EState *estate = css->css.ss.ps.state; char *graph_name = css->delete_data->graph_name; /* scans each label from css->edge_labels */ foreach (lc, css->edge_labels) { char *label_name = lfirst(lc); ResultRelInfo *resultRelInfo; TableScanDesc scan_desc; HeapTuple tuple; TupleTableSlot *slot; resultRelInfo = create_entity_result_rel_info(estate, graph_name, label_name); estate->es_snapshot->curcid = GetCurrentCommandId(false); estate->es_output_cid = GetCurrentCommandId(false); scan_desc = table_beginscan(resultRelInfo->ri_RelationDesc, estate->es_snapshot, 0, NULL); slot = ExecInitExtraTupleSlot( estate, RelationGetDescr(resultRelInfo->ri_RelationDesc), &TTSOpsHeapTuple); /* for each row */ while (true) { graphid startid; graphid endid; bool isNull; bool found_startid = false; bool found_endid = false; tuple = heap_getnext(scan_desc, ForwardScanDirection); /* no more tuples to process, break and scan the next label. */ if (!HeapTupleIsValid(tuple)) { break; } ExecStoreHeapTuple(tuple, slot, false); startid = GRAPHID_GET_DATUM(slot_getattr( slot, Anum_ag_label_edge_table_start_id, &isNull)); endid = GRAPHID_GET_DATUM( slot_getattr(slot, Anum_ag_label_edge_table_end_id, &isNull)); hash_search(css->vertex_id_htab, (void *)&startid, HASH_FIND, &found_startid); if (!found_startid) { hash_search(css->vertex_id_htab, (void *)&endid, HASH_FIND, &found_endid); } if (found_startid || found_endid) { if (css->delete_data->detach) { delete_entity(estate, resultRelInfo, tuple); } else { ereport( ERROR, (errcode(ERRCODE_INTERNAL_ERROR), errmsg( "Cannot delete a vertex that has edge(s). " "Delete the edge(s) first, or try DETACH DELETE."))); } } } table_endscan(scan_desc); destroy_entity_result_rel_info(resultRelInfo); } } age-PG16-v1.5.0-rc0/src/backend/executor/cypher_merge.c000066400000000000000000001045101454606241200224320ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "access/htup_details.h" #include "access/table.h" #include "access/xact.h" #include "executor/tuptable.h" #include "nodes/execnodes.h" #include "nodes/extensible.h" #include "nodes/nodes.h" #include "nodes/plannodes.h" #include "utils/rel.h" #include "catalog/ag_label.h" #include "executor/cypher_executor.h" #include "executor/cypher_utils.h" #include "nodes/cypher_nodes.h" #include "utils/agtype.h" #include "utils/graphid.h" static void begin_cypher_merge(CustomScanState *node, EState *estate, int eflags); static TupleTableSlot *exec_cypher_merge(CustomScanState *node); static void end_cypher_merge(CustomScanState *node); static void rescan_cypher_merge(CustomScanState *node); static Datum merge_vertex(cypher_merge_custom_scan_state *css, cypher_target_node *node, ListCell *next, List* list); static void merge_edge(cypher_merge_custom_scan_state *css, cypher_target_node *node, Datum prev_vertex_id, ListCell *next, List *list); static void process_simple_merge(CustomScanState *node); static bool check_path(cypher_merge_custom_scan_state *css, TupleTableSlot *slot); static void process_path(cypher_merge_custom_scan_state *css); static void mark_tts_isnull(TupleTableSlot *slot); const CustomExecMethods cypher_merge_exec_methods = {MERGE_SCAN_STATE_NAME, begin_cypher_merge, exec_cypher_merge, end_cypher_merge, rescan_cypher_merge, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; /* * Initializes the MERGE Execution Node at the beginning of the execution * phase. */ static void begin_cypher_merge(CustomScanState *node, EState *estate, int eflags) { cypher_merge_custom_scan_state *css = (cypher_merge_custom_scan_state *)node; ListCell *lc = NULL; Plan *subplan = NULL; Assert(list_length(css->cs->custom_plans) == 1); // initialize the subplan subplan = linitial(css->cs->custom_plans); node->ss.ps.lefttree = ExecInitNode(subplan, estate, eflags); /* TODO is this necessary? Removing it seems to not have an impact */ ExecAssignExprContext(estate, &node->ss.ps); ExecInitScanTupleSlot(estate, &node->ss, ExecGetResultType(node->ss.ps.lefttree), &TTSOpsVirtual); /* * When MERGE is not the last clause in a cypher query. Setup projection * information to pass to the parent execution node. */ if (!CYPHER_CLAUSE_IS_TERMINAL(css->flags)) { TupleDesc tupdesc = node->ss.ss_ScanTupleSlot->tts_tupleDescriptor; ExecAssignProjectionInfo(&node->ss.ps, tupdesc); } /* * For each vertex and edge in the path, setup the information * needed if we need to create them. */ foreach(lc, css->path->target_nodes) { cypher_target_node *cypher_node = (cypher_target_node *)lfirst(lc); Relation rel = NULL; /* * This entity is references an entity that is already declared. Either * by a previous clause or an entity earlier in the MERGE path. In both * cases, this target_entry will not create data, only reference data * that already exists. */ if (!CYPHER_TARGET_NODE_INSERT_ENTITY(cypher_node->flags)) { continue; } // Open relation and acquire a row exclusive lock. rel = table_open(cypher_node->relid, RowExclusiveLock); // Initialize resultRelInfo for the vertex cypher_node->resultRelInfo = makeNode(ResultRelInfo); InitResultRelInfo(cypher_node->resultRelInfo, rel, list_length(estate->es_range_table), NULL, estate->es_instrument); // Open all indexes for the relation ExecOpenIndices(cypher_node->resultRelInfo, false); // Setup the relation's tuple slot cypher_node->elemTupleSlot = ExecInitExtraTupleSlot( estate, RelationGetDescr(cypher_node->resultRelInfo->ri_RelationDesc), &TTSOpsHeapTuple); if (cypher_node->id_expr != NULL) { cypher_node->id_expr_state = ExecInitExpr(cypher_node->id_expr, (PlanState *)node); } if (cypher_node->prop_expr != NULL) { cypher_node->prop_expr_state = ExecInitExpr(cypher_node->prop_expr, (PlanState *)node); } } /* * Postgres does not assign the es_output_cid in queries that do * not write to disk, ie: SELECT commands. We need the command id * for our clauses, and we may need to initialize it. We cannot use * GetCurrentCommandId because there may be other cypher clauses * that have modified the command id. */ if (estate->es_output_cid == 0) { estate->es_output_cid = estate->es_snapshot->curcid; } /* store the currentCommandId for this instance */ css->base_currentCommandId = GetCurrentCommandId(false); Increment_Estate_CommandId(estate); } /* * Checks the subtree to see if the lateral join representing the MERGE path * found results. Returns true if the path does not exist and must be created, * false otherwise. */ static bool check_path(cypher_merge_custom_scan_state *css, TupleTableSlot *slot) { cypher_create_path *path = css->path; ListCell *lc = NULL; foreach(lc, path->target_nodes) { cypher_target_node *node = lfirst(lc); /* * If target_node as a valid attribute number and is a node not * declared in a previous clause, check the tuple position in the * slot. If the slot is null, the path was not found. The rules * state that if one part of the path does not exists, the whole * path must be created. */ if (node->tuple_position != InvalidAttrNumber || ((node->flags & CYPHER_TARGET_NODE_MERGE_EXISTS) == 0)) { /* * Attribute number is 1 indexed and tts_values is 0 indexed, * offset by 1. */ if (slot->tts_isnull[node->tuple_position - 1]) { return true; } } } return false; } static void process_path(cypher_merge_custom_scan_state *css) { cypher_create_path *path = css->path; List *list = path->target_nodes; ListCell *lc = list_head(list); /* * Create the first vertex. The create_vertex function will * create the rest of the path, if necessary. */ merge_vertex(css, lfirst(lc), lnext(list, lc), list); /* * If this path is a variable, take the list that was accumulated * in the vertex/edge creation, create a path datum, and add to the * scantuple slot. */ if (path->path_attr_num != InvalidAttrNumber) { ExprContext *econtext = css->css.ss.ps.ps_ExprContext; TupleTableSlot *scantuple = econtext->ecxt_scantuple; Datum result; int tuple_position = path->path_attr_num - 1; bool debug_flag = false; /* * We need to make sure that the tuple_position is within the * boundaries of the tuple's number of attributes. Otherwise, it * will corrupt memory. The cases where it doesn't fit within are * usually due to a variable that is specified but there isn't a RETURN * clause. In these cases we just don't bother to store the * value. */ if (!debug_flag && (tuple_position < scantuple->tts_tupleDescriptor->natts || scantuple->tts_tupleDescriptor->natts != 1)) { result = make_path(css->path_values); /* store the result */ scantuple->tts_values[tuple_position] = result; scantuple->tts_isnull[tuple_position] = false; } } } /* * Function that handles the case where MERGE is the only clause in the query. */ static void process_simple_merge(CustomScanState *node) { cypher_merge_custom_scan_state *css = (cypher_merge_custom_scan_state *)node; EState *estate = css->css.ss.ps.state; TupleTableSlot *slot = NULL; /*Process the subtree first */ Decrement_Estate_CommandId(estate) slot = ExecProcNode(node->ss.ps.lefttree); Increment_Estate_CommandId(estate) if (TupIsNull(slot)) { ExprContext *econtext = node->ss.ps.ps_ExprContext; SubqueryScanState *sss = (SubqueryScanState *)node->ss.ps.lefttree; /* our child execution node should be a subquery */ Assert(IsA(sss, SubqueryScanState)); /* setup the scantuple that the process_path needs */ econtext->ecxt_scantuple = sss->ss.ss_ScanTupleSlot; process_path(css); } } /* * Iterate through the TupleTableSlot's tts_values and marks the isnull field * with true. */ static void mark_tts_isnull(TupleTableSlot *slot) { int numberOfAttributes = slot->tts_tupleDescriptor->natts; int i; for (i = 0; i < numberOfAttributes; i++) { Datum val; val = slot->tts_values[i]; if (val == (Datum)NULL) { slot->tts_isnull[i] = true; } } } /* * Function that is called mid-execution. This function will call * its subtree in the execution tree, and depending on the results * create the new path, and depending on the context of the MERGE * within the query pass data to the parent execution node. * * Returns a TupleTableSlot with the next tuple to it parent or * Returns NULL when MERGE has no more tuples to emit. */ static TupleTableSlot *exec_cypher_merge(CustomScanState *node) { cypher_merge_custom_scan_state *css = (cypher_merge_custom_scan_state *)node; EState *estate = css->css.ss.ps.state; ExprContext *econtext = css->css.ss.ps.ps_ExprContext; TupleTableSlot *slot = NULL; bool terminal = CYPHER_CLAUSE_IS_TERMINAL(css->flags); /* * There are three cases that dictate the flow of the execution logic. * * 1. MERGE is not the first clause in the cypher query. * 2. MERGE is the first clause and there are no following clauses. * 3. MERGE is the first clause and there are following clauses. * CYPHER_CLAUSE_FLAG_PREVIOUS_CLAUSE */ if (CYPHER_CLAUSE_HAS_PREVIOUS_CLAUSE(css->flags)) { /* * Case 1: MERGE is not the first clause in the cypher query. * * For this case, we need to process all tuples given to us by the * previous clause. When we receive a tuple from the previous clause: * check to see if the left lateral join found the pattern already. If * it did, we don't need to create the pattern. If the lateral join did * not find the whole path, create the whole path. * * If this is a terminal clause, process all tuples. If not, pass the * tuple to up the execution tree. */ do { /*Process the subtree first */ Decrement_Estate_CommandId(estate) slot = ExecProcNode(node->ss.ps.lefttree); Increment_Estate_CommandId(estate) /* * We are done processing the subtree, mark as terminal * so the function returns NULL. */ if (TupIsNull(slot)) { terminal = true; break; } /* setup the scantuple that the process_path needs */ econtext->ecxt_scantuple = node->ss.ps.lefttree->ps_ProjInfo->pi_exprContext->ecxt_scantuple; if (check_path(css, econtext->ecxt_scantuple)) { process_path(css); } } while (terminal); /* if this was a terminal MERGE just return NULL */ if (terminal) { return NULL; } econtext->ecxt_scantuple = ExecProject(node->ss.ps.lefttree->ps_ProjInfo); return ExecProject(node->ss.ps.ps_ProjInfo); } else if (terminal) { /* * Case 2: MERGE is the first clause and there are no following clauses * * For case 2, check to see if we found the pattern, if not create it. * Return NULL in either cases, because no rows are expected. */ process_simple_merge(node); /* * Case 2 always returns NULL the first time exec_cypher_merge is * called. */ return NULL; } else { /* * Case 3: MERGE is the first clause and there are following clauses. * * Case three has two subcases: * * 1. The already path exists. * 2. The path does not exist. */ /* * Part of Case 2. * * If created_new_path is marked as true. The path did not exist and * MERGE created it. We have already passed that information up the * execution tree, and now we tell MERGE's parents in the execution * tree there is no more tuples to pass. */ if (css->created_new_path) { /* * If the created_new_path is set to true. Then MERGE should not * have found a path, because this should only be set to true if * merge found sub-case 1 */ Assert(css->found_a_path == false); return NULL; } /* * Process the subtree. The subtree will only consist of the MERGE * path. */ Decrement_Estate_CommandId(estate) slot = ExecProcNode(node->ss.ps.lefttree); Increment_Estate_CommandId(estate) if (!TupIsNull(slot)) { /* * Part of Sub-Case 1. * * If we found a path, mark the found_a_path flag to true and * pass the tuple to the next execution tree. When the path * exists, we don't need to create/modify anything. */ css->found_a_path = true; econtext->ecxt_scantuple = ExecProject(node->ss.ps.lefttree->ps_ProjInfo); return ExecProject(node->ss.ps.ps_ProjInfo); } else if (TupIsNull(slot) && css->found_a_path) { /* * Part of Sub-Case 2. * * MERGE found the path(s) that already exists and we are done passing * all the found path(s) up the execution tree. */ return NULL; } else { /* * Part of Sub-Case 1. * * MERGE could not find the path in memory and the sub-node in the * execution tree returned NULL. We need to create the path and * pass the tuple to the next execution node. The subtrees will * begin its cleanup process when there are no more tuples found. * So we will need to create a TupleTableSlot and populate with the * information from the newly created path that the query needs. */ SubqueryScanState *sss = NULL; econtext = node->ss.ps.ps_ExprContext; sss = (SubqueryScanState *)node->ss.ps.lefttree; /* * Our child execution node is always a subquery. If not there * is an issue. */ Assert(IsA(sss, SubqueryScanState)); /* * found_a_path should only be set to true if MERGE is following * sub-case 2. */ Assert(css->found_a_path == false); /* * This block of sub-case 1 should only be executed once. To * create the single path if the path does not exist. If we find * ourselves here again, the internal state of the MERGE execution * node was incorrectly altered. */ Assert(css->created_new_path == false); /* * Postgres cleared the child tuple table slot, we need to remake * it. */ ExecInitScanTupleSlot(estate, &sss->ss, ExecGetResultType(sss->subplan), &TTSOpsVirtual); /* setup the scantuple that the process_path needs */ econtext->ecxt_scantuple = sss->ss.ss_ScanTupleSlot; // create the path process_path(css); // mark the create_new_path flag to true. css->created_new_path = true; /* * find the tts_values that process_path did not populate and * mark as null. */ mark_tts_isnull(econtext->ecxt_scantuple); // store the heap tuble ExecStoreVirtualTuple(econtext->ecxt_scantuple); /* * make the subquery's projection scan slot be the tuple table we * created and run the projection logic. */ sss->ss.ps.ps_ProjInfo->pi_exprContext->ecxt_scantuple = econtext->ecxt_scantuple; // assign this to be our scantuple econtext->ecxt_scantuple = ExecProject(node->ss.ps.lefttree->ps_ProjInfo); /* * run the merge's projection logic and pass to its parent * execution node */ return ExecProject(node->ss.ps.ps_ProjInfo); } } } /* * Function called at the end of the execution phase to cleanup * MERGE. */ static void end_cypher_merge(CustomScanState *node) { cypher_merge_custom_scan_state *css = (cypher_merge_custom_scan_state *)node; cypher_create_path *path = css->path; ListCell *lc = NULL; // increment the command counter CommandCounterIncrement(); ExecEndNode(node->ss.ps.lefttree); foreach (lc, path->target_nodes) { cypher_target_node *cypher_node = (cypher_target_node *)lfirst(lc); if (!CYPHER_TARGET_NODE_INSERT_ENTITY(cypher_node->flags)) { continue; } // close all indices for the node ExecCloseIndices(cypher_node->resultRelInfo); // close the relation itself table_close(cypher_node->resultRelInfo->ri_RelationDesc, RowExclusiveLock); } } /* * Rescan is mostly used by join execution nodes, and several others. * Since we are creating data here its not safe to rescan the node. Throw * an error and try to help the uer understand what went wrong. */ static void rescan_cypher_merge(CustomScanState *node) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("cypher merge clause cannot be rescanned"), errhint("its unsafe to use joins in a query with a Cypher MERGE clause"))); } /* * Extracts the metadata information that MERGE needs from the * merge_custom_scan node and creates the cypher_merge_custom_scan_state * for the execution phase. */ Node *create_cypher_merge_plan_state(CustomScan *cscan) { cypher_merge_custom_scan_state *cypher_css = palloc0(sizeof(cypher_merge_custom_scan_state)); cypher_merge_information *merge_information; char *serialized_data = NULL; Const *c = NULL; cypher_css->cs = cscan; // get the serialized data structure from the Const and deserialize it. c = linitial(cscan->custom_private); serialized_data = (char *)c->constvalue; merge_information = stringToNode(serialized_data); Assert(is_ag_node(merge_information, cypher_merge_information)); cypher_css->merge_information = merge_information; cypher_css->flags = merge_information->flags; cypher_css->merge_function_attr = merge_information->merge_function_attr; cypher_css->path = merge_information->path; cypher_css->created_new_path = false; cypher_css->found_a_path = false; cypher_css->graph_oid = merge_information->graph_oid; cypher_css->css.ss.ps.type = T_CustomScanState; cypher_css->css.methods = &cypher_merge_exec_methods; return (Node *)cypher_css; } /* * Creates the vertex entity, returns the vertex's id in case the caller is * the create_edge function. */ static Datum merge_vertex(cypher_merge_custom_scan_state *css, cypher_target_node *node, ListCell *next, List *list) { bool isNull; Datum id; EState *estate = css->css.ss.ps.state; ExprContext *econtext = css->css.ss.ps.ps_ExprContext; ResultRelInfo *resultRelInfo = node->resultRelInfo; TupleTableSlot *elemTupleSlot = node->elemTupleSlot; TupleTableSlot *scanTupleSlot = econtext->ecxt_scantuple; Assert(node->type == LABEL_KIND_VERTEX); /* * Vertices in a path might already exists. If they do get the id * to pass to the edges before and after it. Otherwise, insert the * new vertex into it's table and then pass the id along. */ if (CYPHER_TARGET_NODE_INSERT_ENTITY(node->flags)) { ResultRelInfo **old_estate_es_result_relations = NULL; Datum prop; /* * Set estate's result relation to the vertex's result * relation. * * Note: This obliterates what was their previously */ /* save the old result relation info */ old_estate_es_result_relations = estate->es_result_relations; estate->es_result_relations = &resultRelInfo; ExecClearTuple(elemTupleSlot); /* get the next graphid for this vertex */ id = ExecEvalExpr(node->id_expr_state, econtext, &isNull); elemTupleSlot->tts_values[vertex_tuple_id] = id; elemTupleSlot->tts_isnull[vertex_tuple_id] = isNull; /* get the properties for this vertex */ prop = ExecEvalExpr(node->prop_expr_state, econtext, &isNull); elemTupleSlot->tts_values[vertex_tuple_properties] = prop; elemTupleSlot->tts_isnull[vertex_tuple_properties] = isNull; /* * Insert the new vertex. * * Depending on the currentCommandId, we need to do this one of two * different ways - * * 1) If they are equal, the currentCommandId hasn't been used for an * update, or it hasn't been incremented after being used. In either * case, we need to use the current one and then increment it so that * the following commands will have visibility of this update. Note, * it isn't our job to update the currentCommandId first and then do * this check. * * 2) If they are not equal, the currentCommandId has been used and/or * updated. In this case, we can't use it. Otherwise our update won't * be visible to anything that follows, until the currentCommandId is * updated again. Remember, visibility is, greater than but not equal * to, the currentCommandID used for the update. So, in this case we * need to use the original currentCommandId when begin_cypher_merge * was initiated as everything under this instance of merge needs to * be based off of that initial currentCommandId. This allows the * following command to see the updates generated by this instance of * merge. */ if (css->base_currentCommandId == GetCurrentCommandId(false)) { insert_entity_tuple(resultRelInfo, elemTupleSlot, estate); /* * Increment the currentCommandId since we processed an update. We * don't want to do this outside of this block because we don't want * to inadvertently or unnecessarily update the commandCounterId of * another command. */ CommandCounterIncrement(); } else { insert_entity_tuple_cid(resultRelInfo, elemTupleSlot, estate, css->base_currentCommandId); } /* restore the old result relation info */ estate->es_result_relations = old_estate_es_result_relations; /* * When the vertex is used by clauses higher in the execution tree * we need to create a vertex datum. When the vertex is a variable, * add to the scantuple slot. When the vertex is part of a path * variable, add to the list. */ if (CYPHER_TARGET_NODE_OUTPUT(node->flags)) { Datum result; /* make the vertex agtype */ result = make_vertex(id, CStringGetDatum(node->label_name), prop); /* append to the path list */ if (CYPHER_TARGET_NODE_IN_PATH(node->flags)) { css->path_values = lappend(css->path_values, DatumGetPointer(result)); } /* * Put the vertex in the correct spot in the scantuple, so parent * execution nodes can reference the newly created variable. */ if (CYPHER_TARGET_NODE_IS_VARIABLE(node->flags)) { bool debug_flag = false; int tuple_position = node->tuple_position - 1; /* * We need to make sure that the tuple_position is within the * boundaries of the tuple's number of attributes. Otherwise, it * will corrupt memory. The cases where it doesn't fall within * are usually due to a variable that is specified but there * isn't a RETURN clause. In these cases we just don't bother to * store the value. */ if (!debug_flag && (tuple_position < scanTupleSlot->tts_tupleDescriptor->natts || scanTupleSlot->tts_tupleDescriptor->natts != 1)) { /* store the result */ scanTupleSlot->tts_values[tuple_position] = result; scanTupleSlot->tts_isnull[tuple_position] = false; } } } } else { agtype *a = NULL; Datum d; agtype_value *v = NULL; agtype_value *id_value = NULL; /* check that the variable isn't NULL */ if (scanTupleSlot->tts_isnull[node->tuple_position - 1]) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("Existing variable %s cannot be NULL in MERGE clause", node->variable_name))); } /* get the vertex agtype in the scanTupleSlot */ d = scanTupleSlot->tts_values[node->tuple_position - 1]; a = DATUM_GET_AGTYPE_P(d); /* Convert to an agtype value */ v = get_ith_agtype_value_from_container(&a->root, 0); if (v->type != AGTV_VERTEX) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("agtype must resolve to a vertex"))); } /* extract the id agtype field */ id_value = GET_AGTYPE_VALUE_OBJECT_VALUE(v, "id"); /* extract the graphid and cast to a Datum */ id = GRAPHID_GET_DATUM(id_value->val.int_value); /* * Its possible the variable has already been deleted. There are two * ways this can happen. One is the query explicitly deleted the * variable, the is_deleted flag will catch that. However, it is * possible the user deleted the vertex using another variable name. We * need to scan the table to find the vertex's current status relative * to this CREATE clause. If the variable was initially created in this * clause, we can skip this check, because the transaction system * guarantees that nothing can happen to that tuple, as far as we are * concerned with at this time. */ if (!SAFE_TO_SKIP_EXISTENCE_CHECK(node->flags)) { if (!entity_exists(estate, css->graph_oid, DATUM_GET_GRAPHID(id))) { ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("vertex assigned to variable %s was deleted", node->variable_name))); } } /* * Add the Datum to the list of entities for creating the path variable */ if (CYPHER_TARGET_NODE_IN_PATH(node->flags)) { Datum vertex = scanTupleSlot->tts_values[node->tuple_position - 1]; css->path_values = lappend(css->path_values, DatumGetPointer(vertex)); } } /* If the path continues, create the next edge, passing the vertex's id. */ if (next != NULL) { merge_edge(css, lfirst(next), id, lnext(list, next), list); } return id; } /* * Create the edge entity. */ static void merge_edge(cypher_merge_custom_scan_state *css, cypher_target_node *node, Datum prev_vertex_id, ListCell *next, List *list) { bool isNull; EState *estate = css->css.ss.ps.state; ExprContext *econtext = css->css.ss.ps.ps_ExprContext; ResultRelInfo *resultRelInfo = node->resultRelInfo; ResultRelInfo **old_estate_es_result_relations = NULL; TupleTableSlot *elemTupleSlot = node->elemTupleSlot; Datum id; Datum start_id, end_id, next_vertex_id; List *prev_path = css->path_values; Datum prop; Assert(node->type == LABEL_KIND_EDGE); Assert(lfirst(next) != NULL); /* * Create the next vertex before creating the edge. We need the * next vertex's id. */ css->path_values = NIL; next_vertex_id = merge_vertex(css, lfirst(next), lnext(list, next), list); /* * Set the start and end vertex ids */ if (node->dir == CYPHER_REL_DIR_RIGHT || node->dir == CYPHER_REL_DIR_NONE) { // create pattern (prev_vertex)-[edge]->(next_vertex) start_id = prev_vertex_id; end_id = next_vertex_id; } else if (node->dir == CYPHER_REL_DIR_LEFT) { // create pattern (prev_vertex)<-[edge]-(next_vertex) start_id = next_vertex_id; end_id = prev_vertex_id; } else { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("edge direction must be specified in a MERGE clause"))); } /* * Set estate's result relation to the vertex's result * relation. * * Note: This obliterates what was their previously */ /* save the old result relation info */ old_estate_es_result_relations = estate->es_result_relations; estate->es_result_relations = &resultRelInfo; ExecClearTuple(elemTupleSlot); // Graph Id for the edge id = ExecEvalExpr(node->id_expr_state, econtext, &isNull); elemTupleSlot->tts_values[edge_tuple_id] = id; elemTupleSlot->tts_isnull[edge_tuple_id] = isNull; // Graph id for the starting vertex elemTupleSlot->tts_values[edge_tuple_start_id] = start_id; elemTupleSlot->tts_isnull[edge_tuple_start_id] = false; // Graph id for the ending vertex elemTupleSlot->tts_values[edge_tuple_end_id] = end_id; elemTupleSlot->tts_isnull[edge_tuple_end_id] = false; // Edge's properties map prop = ExecEvalExpr(node->prop_expr_state, econtext, &isNull); elemTupleSlot->tts_values[edge_tuple_properties] = prop; elemTupleSlot->tts_isnull[edge_tuple_properties] = isNull; // Insert the new edge insert_entity_tuple(resultRelInfo, elemTupleSlot, estate); /* restore the old result relation info */ estate->es_result_relations = old_estate_es_result_relations; /* * When the edge is used by clauses higher in the execution tree * we need to create an edge datum. When the edge is a variable, * add to the scantuple slot. When the edge is part of a path * variable, add to the list. */ if (CYPHER_TARGET_NODE_OUTPUT(node->flags)) { Datum result; result = make_edge(id, start_id, end_id, CStringGetDatum(node->label_name), prop); // add the Datum to the list of entities for creating the path variable if (CYPHER_TARGET_NODE_IN_PATH(node->flags)) { prev_path = lappend(prev_path, DatumGetPointer(result)); css->path_values = list_concat(prev_path, css->path_values); } // Add the entity to the TupleTableSlot if necessary if (CYPHER_TARGET_NODE_IS_VARIABLE(node->flags)) { TupleTableSlot *scantuple = econtext->ecxt_scantuple; bool debug_flag = false; int tuple_position = node->tuple_position - 1; /* * We need to make sure that the tuple_position is within the * boundaries of the tuple's number of attributes. Otherwise, it * will corrupt memory. The cases where it doesn't fall within are * usually due to a variable that is specified but there isn't a * RETURN clause. In these cases we just don't bother to store the * value. */ if (!debug_flag && (tuple_position < scantuple->tts_tupleDescriptor->natts || scantuple->tts_tupleDescriptor->natts != 1)) { /* store the result */ scantuple->tts_values[tuple_position] = result; scantuple->tts_isnull[tuple_position] = false; } } } } age-PG16-v1.5.0-rc0/src/backend/executor/cypher_set.c000066400000000000000000000603611454606241200221330ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "access/heapam.h" #include "access/htup_details.h" #include "access/xact.h" #include "executor/tuptable.h" #include "nodes/execnodes.h" #include "nodes/extensible.h" #include "nodes/nodes.h" #include "nodes/plannodes.h" #include "rewrite/rewriteHandler.h" #include "storage/bufmgr.h" #include "utils/rel.h" #include "executor/cypher_executor.h" #include "executor/cypher_utils.h" #include "nodes/cypher_nodes.h" #include "utils/agtype.h" #include "utils/graphid.h" static void begin_cypher_set(CustomScanState *node, EState *estate, int eflags); static TupleTableSlot *exec_cypher_set(CustomScanState *node); static void end_cypher_set(CustomScanState *node); static void rescan_cypher_set(CustomScanState *node); static void process_update_list(CustomScanState *node); static HeapTuple update_entity_tuple(ResultRelInfo *resultRelInfo, TupleTableSlot *elemTupleSlot, EState *estate, HeapTuple old_tuple); const CustomExecMethods cypher_set_exec_methods = {SET_SCAN_STATE_NAME, begin_cypher_set, exec_cypher_set, end_cypher_set, rescan_cypher_set, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; static void begin_cypher_set(CustomScanState *node, EState *estate, int eflags) { cypher_set_custom_scan_state *css = (cypher_set_custom_scan_state *)node; Plan *subplan; Assert(list_length(css->cs->custom_plans) == 1); subplan = linitial(css->cs->custom_plans); node->ss.ps.lefttree = ExecInitNode(subplan, estate, eflags); ExecAssignExprContext(estate, &node->ss.ps); ExecInitScanTupleSlot(estate, &node->ss, ExecGetResultType(node->ss.ps.lefttree), &TTSOpsHeapTuple); if (!CYPHER_CLAUSE_IS_TERMINAL(css->flags)) { TupleDesc tupdesc = node->ss.ss_ScanTupleSlot->tts_tupleDescriptor; ExecAssignProjectionInfo(&node->ss.ps, tupdesc); } /* * Postgres does not assign the es_output_cid in queries that do * not write to disk, ie: SELECT commands. We need the command id * for our clauses, and we may need to initialize it. We cannot use * GetCurrentCommandId because there may be other cypher clauses * that have modified the command id. */ if (estate->es_output_cid == 0) { estate->es_output_cid = estate->es_snapshot->curcid; } Increment_Estate_CommandId(estate); } static HeapTuple update_entity_tuple(ResultRelInfo *resultRelInfo, TupleTableSlot *elemTupleSlot, EState *estate, HeapTuple old_tuple) { HeapTuple tuple = NULL; LockTupleMode lockmode; TM_FailureData hufd; TM_Result lock_result; Buffer buffer; TU_UpdateIndexes update_indexes; TM_Result result; CommandId cid = GetCurrentCommandId(true); ResultRelInfo **saved_resultRels = estate->es_result_relations; estate->es_result_relations = &resultRelInfo; lockmode = ExecUpdateLockMode(estate, resultRelInfo); lock_result = heap_lock_tuple(resultRelInfo->ri_RelationDesc, old_tuple, GetCurrentCommandId(false), lockmode, LockWaitBlock, false, &buffer, &hufd); if (lock_result == TM_Ok) { ExecOpenIndices(resultRelInfo, false); ExecStoreVirtualTuple(elemTupleSlot); tuple = ExecFetchSlotHeapTuple(elemTupleSlot, true, NULL); tuple->t_self = old_tuple->t_self; // Check the constraints of the tuple tuple->t_tableOid = RelationGetRelid(resultRelInfo->ri_RelationDesc); if (resultRelInfo->ri_RelationDesc->rd_att->constr != NULL) { ExecConstraints(resultRelInfo, elemTupleSlot, estate); } result = table_tuple_update(resultRelInfo->ri_RelationDesc, &tuple->t_self, elemTupleSlot, cid, estate->es_snapshot, estate->es_crosscheck_snapshot, true /* wait for commit */ , &hufd, &lockmode, &update_indexes); if (result == TM_SelfModified) { if (hufd.cmax != cid) { ereport(ERROR, (errcode(ERRCODE_TRIGGERED_DATA_CHANGE_VIOLATION), errmsg("tuple to be updated was already modified"))); } ExecCloseIndices(resultRelInfo); estate->es_result_relations = saved_resultRels; return tuple; } if (result != TM_Ok) { ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR), errmsg("Entity failed to be updated: %i", result))); } // Insert index entries for the tuple if (resultRelInfo->ri_NumIndices > 0 && update_indexes != TU_None) { ExecInsertIndexTuples(resultRelInfo, elemTupleSlot, estate, false, false, NULL, NIL, (update_indexes == TU_Summarizing)); } ExecCloseIndices(resultRelInfo); } else if (lock_result == TM_SelfModified) { if (hufd.cmax != cid) { ereport(ERROR, (errcode(ERRCODE_TRIGGERED_DATA_CHANGE_VIOLATION), errmsg("tuple to be updated was already modified"))); } } else { ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR), errmsg("Entity failed to be updated: %i", lock_result))); } ReleaseBuffer(buffer); estate->es_result_relations = saved_resultRels; return tuple; } /* * When the CREATE clause is the last cypher clause, consume all input from the * previous clause(s) in the first call of exec_cypher_create. */ static void process_all_tuples(CustomScanState *node) { cypher_set_custom_scan_state *css = (cypher_set_custom_scan_state *)node; TupleTableSlot *slot; EState *estate = css->css.ss.ps.state; do { process_update_list(node); Decrement_Estate_CommandId(estate) slot = ExecProcNode(node->ss.ps.lefttree); Increment_Estate_CommandId(estate) } while (!TupIsNull(slot)); } /* * Checks the path to see if the entities contained within * have the same graphid and the updated_id field. Returns * true if yes, false otherwise. */ static bool check_path(agtype_value *path, graphid updated_id) { int i; for (i = 0; i < path->val.array.num_elems; i++) { agtype_value *elem = &path->val.array.elems[i]; agtype_value *id = GET_AGTYPE_VALUE_OBJECT_VALUE(elem, "id"); if (updated_id == id->val.int_value) { return true; } } return false; } /* * Construct a new agtype path with the entity with updated_id * replacing all of its instances in path with updated_entity */ static agtype_value *replace_entity_in_path(agtype_value *path, graphid updated_id, agtype *updated_entity) { agtype_iterator *it; agtype_iterator_token tok = WAGT_DONE; agtype_parse_state *parse_state = NULL; agtype_value *r; agtype_value *parsed_agtype_value = NULL; agtype *prop_agtype; int i; r = palloc(sizeof(agtype_value)); prop_agtype = agtype_value_to_agtype(path); it = agtype_iterator_init(&prop_agtype->root); tok = agtype_iterator_next(&it, r, true); parsed_agtype_value = push_agtype_value(&parse_state, tok, tok < WAGT_BEGIN_ARRAY ? r : NULL); // Iterate through the path, replace entities as necessary. for (i = 0; i < path->val.array.num_elems; i++) { agtype_value *id, *elem; elem = &path->val.array.elems[i]; // something unexpected happened, throw an error. if (elem->type != AGTV_VERTEX && elem->type != AGTV_EDGE) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("unsupported agtype found in a path"))); } // extract the id field id = GET_AGTYPE_VALUE_OBJECT_VALUE(elem, "id"); /* * Either replace or keep the entity in the new path, depending on the id * check. */ if (updated_id == id->val.int_value) { parsed_agtype_value = push_agtype_value(&parse_state, WAGT_ELEM, get_ith_agtype_value_from_container(&updated_entity->root, 0)); } else { parsed_agtype_value = push_agtype_value(&parse_state, WAGT_ELEM, elem); } } parsed_agtype_value = push_agtype_value(&parse_state, WAGT_END_ARRAY, NULL); parsed_agtype_value->type = AGTV_PATH; return parsed_agtype_value; } /* * When a vertex or edge is updated, we need to update the vertex * or edge if it is contained within a path. Scan through scanTupleSlot * to find all paths and check if they need to be updated. */ static void update_all_paths(CustomScanState *node, graphid id, agtype *updated_entity) { cypher_set_custom_scan_state *css = (cypher_set_custom_scan_state *)node; ExprContext *econtext = css->css.ss.ps.ps_ExprContext; TupleTableSlot *scanTupleSlot = econtext->ecxt_scantuple; int i; for (i = 0; i < scanTupleSlot->tts_tupleDescriptor->natts; i++) { agtype *original_entity; agtype_value *original_entity_value; // skip nulls if (scanTupleSlot->tts_tupleDescriptor->attrs[i].atttypid != AGTYPEOID) { continue; } // skip non agtype values if (scanTupleSlot->tts_isnull[i]) { continue; } original_entity = DATUM_GET_AGTYPE_P(scanTupleSlot->tts_values[i]); // if the value is not a scalar type, its not a path if (!AGTYPE_CONTAINER_IS_SCALAR(&original_entity->root)) { continue; } original_entity_value = get_ith_agtype_value_from_container(&original_entity->root, 0); // we found a path if (original_entity_value->type == AGTV_PATH) { // check if the path contains the entity. if (check_path(original_entity_value, id)) { // the path does contain the entity replace with the new entity. agtype_value *new_path = replace_entity_in_path(original_entity_value, id, updated_entity); scanTupleSlot->tts_values[i] = AGTYPE_P_GET_DATUM(agtype_value_to_agtype(new_path)); } } } } static void process_update_list(CustomScanState *node) { cypher_set_custom_scan_state *css = (cypher_set_custom_scan_state *)node; ExprContext *econtext = css->css.ss.ps.ps_ExprContext; TupleTableSlot *scanTupleSlot = econtext->ecxt_scantuple; ListCell *lc; EState *estate = css->css.ss.ps.state; int *luindex = NULL; int lidx = 0; /* allocate an array to hold the last update index of each 'entity' */ luindex = palloc0(sizeof(int) * scanTupleSlot->tts_nvalid); /* * Iterate through the SET items list and store the loop index of each * 'entity' update. As there is only one entry for each entity, this will * have the effect of overwriting the previous loop index stored - if this * 'entity' is used more than once. This will create an array of the last * loop index for the update of that particular 'entity'. This will allow us * to correctly update an 'entity' after all other previous updates to that * 'entity' have been done. */ foreach (lc, css->set_list->set_items) { cypher_update_item *update_item = NULL; update_item = (cypher_update_item *)lfirst(lc); luindex[update_item->entity_position - 1] = lidx; /* increment the loop index */ lidx++; } /* reset loop index */ lidx = 0; /* iterate through SET set items */ foreach (lc, css->set_list->set_items) { agtype_value *altered_properties; agtype_value *original_entity_value; agtype_value *original_properties; agtype_value *id; agtype_value *label; agtype *original_entity; agtype *new_property_value; TupleTableSlot *slot; ResultRelInfo *resultRelInfo; ScanKeyData scan_keys[1]; TableScanDesc scan_desc; bool remove_property; char *label_name; cypher_update_item *update_item; Datum new_entity; HeapTuple heap_tuple; char *clause_name = css->set_list->clause_name; int cid; update_item = (cypher_update_item *)lfirst(lc); /* * If the entity is null, we can skip this update. this will be * possible when the OPTIONAL MATCH clause is implemented. */ if (scanTupleSlot->tts_isnull[update_item->entity_position - 1]) { continue; } if (scanTupleSlot->tts_tupleDescriptor->attrs[update_item->entity_position -1].atttypid != AGTYPEOID) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("age %s clause can only update agtype", clause_name))); } original_entity = DATUM_GET_AGTYPE_P(scanTupleSlot->tts_values[update_item->entity_position - 1]); original_entity_value = get_ith_agtype_value_from_container(&original_entity->root, 0); if (original_entity_value->type != AGTV_VERTEX && original_entity_value->type != AGTV_EDGE) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("age %s clause can only update vertex and edges", clause_name))); } /* get the id and label for later */ id = GET_AGTYPE_VALUE_OBJECT_VALUE(original_entity_value, "id"); label = GET_AGTYPE_VALUE_OBJECT_VALUE(original_entity_value, "label"); label_name = pnstrdup(label->val.string.val, label->val.string.len); /* get the properties we need to update */ original_properties = GET_AGTYPE_VALUE_OBJECT_VALUE(original_entity_value, "properties"); /* * Determine if the property should be removed. This will be because * this is a REMOVE clause or the variable references a variable that is * NULL. It will be possible for a variable to be NULL when OPTIONAL * MATCH is implemented. */ if (update_item->remove_item) { remove_property = true; } else { remove_property = scanTupleSlot->tts_isnull[update_item->prop_position - 1]; } /* * If we need to remove the property, set the value to NULL. Otherwise * fetch the evaluated expression from the tuple slot. */ if (remove_property) { new_property_value = NULL; } else { new_property_value = DATUM_GET_AGTYPE_P(scanTupleSlot->tts_values[update_item->prop_position - 1]); } // Alter the properties Agtype value. if (update_item->prop_name != NULL && strcmp(update_item->prop_name, "") != 0) { altered_properties = alter_property_value(original_properties, update_item->prop_name, new_property_value, remove_property); } else { altered_properties = alter_properties( update_item->is_add ? original_properties : NULL, new_property_value); /* * For SET clause with plus-equal operator, nulls are not removed * from the map during transformation because they are required in * the executor to alter (merge) properties correctly. Only after * that step, they can be removed. */ if (update_item->is_add) { remove_null_from_agtype_object(altered_properties); } } resultRelInfo = create_entity_result_rel_info( estate, css->set_list->graph_name, label_name); slot = ExecInitExtraTupleSlot( estate, RelationGetDescr(resultRelInfo->ri_RelationDesc), &TTSOpsHeapTuple); /* * Now that we have the updated properties, create a either a vertex or * edge Datum for the in-memory update, and setup the tupleTableSlot * for the on-disc update. */ if (original_entity_value->type == AGTV_VERTEX) { new_entity = make_vertex(GRAPHID_GET_DATUM(id->val.int_value), CStringGetDatum(label_name), AGTYPE_P_GET_DATUM(agtype_value_to_agtype(altered_properties))); slot = populate_vertex_tts(slot, id, altered_properties); } else if (original_entity_value->type == AGTV_EDGE) { agtype_value *startid = GET_AGTYPE_VALUE_OBJECT_VALUE(original_entity_value, "start_id"); agtype_value *endid = GET_AGTYPE_VALUE_OBJECT_VALUE(original_entity_value, "end_id"); new_entity = make_edge(GRAPHID_GET_DATUM(id->val.int_value), GRAPHID_GET_DATUM(startid->val.int_value), GRAPHID_GET_DATUM(endid->val.int_value), CStringGetDatum(label_name), AGTYPE_P_GET_DATUM(agtype_value_to_agtype(altered_properties))); slot = populate_edge_tts(slot, id, startid, endid, altered_properties); } else { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("age %s clause can only update vertex and edges", clause_name))); } /* place the datum in its tuple table slot position. */ scanTupleSlot->tts_values[update_item->entity_position - 1] = new_entity; /* * If the tuple table slot has paths, we need to inspect them to see if * the updated entity is contained within them and replace the entity * if it is. */ update_all_paths(node, id->val.int_value, DATUM_GET_AGTYPE_P(new_entity)); /* * If the last update index for the entity is equal to the current loop * index, then update this tuple. */ cid = estate->es_snapshot->curcid; estate->es_snapshot->curcid = GetCurrentCommandId(false); if (luindex[update_item->entity_position - 1] == lidx) { /* * Setup the scan key to require the id field on-disc to match the * entity's graphid. */ ScanKeyInit(&scan_keys[0], 1, BTEqualStrategyNumber, F_GRAPHIDEQ, GRAPHID_GET_DATUM(id->val.int_value)); /* * Setup the scan description, with the correct snapshot and scan * keys. */ scan_desc = table_beginscan(resultRelInfo->ri_RelationDesc, estate->es_snapshot, 1, scan_keys); /* Retrieve the tuple. */ heap_tuple = heap_getnext(scan_desc, ForwardScanDirection); /* * If the heap tuple still exists (It wasn't deleted between the * match and this SET/REMOVE) update the heap_tuple. */ if (HeapTupleIsValid(heap_tuple)) { heap_tuple = update_entity_tuple(resultRelInfo, slot, estate, heap_tuple); } /* close the ScanDescription */ table_endscan(scan_desc); } estate->es_snapshot->curcid = cid; /* close relation */ ExecCloseIndices(resultRelInfo); table_close(resultRelInfo->ri_RelationDesc, RowExclusiveLock); /* increment loop index */ lidx++; } /* free our lookup array */ pfree(luindex); } static TupleTableSlot *exec_cypher_set(CustomScanState *node) { cypher_set_custom_scan_state *css = (cypher_set_custom_scan_state *)node; ResultRelInfo **saved_resultRels; EState *estate = css->css.ss.ps.state; ExprContext *econtext = css->css.ss.ps.ps_ExprContext; TupleTableSlot *slot; saved_resultRels = estate->es_result_relations; //Process the subtree first Decrement_Estate_CommandId(estate); slot = ExecProcNode(node->ss.ps.lefttree); Increment_Estate_CommandId(estate); if (TupIsNull(slot)) { return NULL; } econtext->ecxt_scantuple = node->ss.ps.lefttree->ps_ProjInfo->pi_exprContext->ecxt_scantuple; if (CYPHER_CLAUSE_IS_TERMINAL(css->flags)) { estate->es_result_relations = saved_resultRels; process_all_tuples(node); /* increment the command counter to reflect the updates */ CommandCounterIncrement(); return NULL; } process_update_list(node); /* increment the command counter to reflect the updates */ CommandCounterIncrement(); estate->es_result_relations = saved_resultRels; econtext->ecxt_scantuple = ExecProject(node->ss.ps.lefttree->ps_ProjInfo); return ExecProject(node->ss.ps.ps_ProjInfo); } static void end_cypher_set(CustomScanState *node) { ExecEndNode(node->ss.ps.lefttree); } static void rescan_cypher_set(CustomScanState *node) { cypher_set_custom_scan_state *css = (cypher_set_custom_scan_state *)node; char *clause_name = css->set_list->clause_name; ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("cypher %s clause cannot be rescanned", clause_name), errhint("its unsafe to use joins in a query with a Cypher %s clause", clause_name))); } Node *create_cypher_set_plan_state(CustomScan *cscan) { cypher_set_custom_scan_state *cypher_css = palloc0(sizeof(cypher_set_custom_scan_state)); cypher_update_information *set_list; char *serialized_data; Const *c; cypher_css->cs = cscan; // get the serialized data structure from the Const and deserialize it. c = linitial(cscan->custom_private); serialized_data = (char *)c->constvalue; set_list = stringToNode(serialized_data); Assert(is_ag_node(set_list, cypher_update_information)); cypher_css->set_list = set_list; cypher_css->flags = set_list->flags; cypher_css->css.ss.ps.type = T_CustomScanState; cypher_css->css.methods = &cypher_set_exec_methods; return (Node *)cypher_css; } age-PG16-v1.5.0-rc0/src/backend/executor/cypher_utils.c000066400000000000000000000225111454606241200224730ustar00rootroot00000000000000/* * For PostgreSQL Database Management System: * (formerly known as Postgres, then as Postgres95) * * Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group * * Portions Copyright (c) 1994, The Regents of the University of California * * Permission to use, copy, modify, and distribute this software and its documentation for any purpose, * without fee, and without a written agreement is hereby granted, provided that the above copyright notice * and this paragraph and the following two paragraphs appear in all copies. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA * HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ #include "postgres.h" #include "access/htup_details.h" #include "access/sysattr.h" #include "access/xact.h" #include "access/heapam.h" #include "access/multixact.h" #include "access/xact.h" #include "nodes/extensible.h" #include "nodes/makefuncs.h" #include "nodes/nodes.h" #include "nodes/nodeFuncs.h" #include "nodes/plannodes.h" #include "parser/parsetree.h" #include "parser/parse_relation.h" #include "storage/procarray.h" #include "utils/rel.h" #include "catalog/ag_label.h" #include "commands/label_commands.h" #include "executor/cypher_executor.h" #include "executor/cypher_utils.h" #include "utils/agtype.h" #include "utils/ag_cache.h" #include "utils/agtype.h" #include "utils/graphid.h" /* * Given the graph name and the label name, create a ResultRelInfo for the table * those two variables represent. Open the Indices too. */ ResultRelInfo *create_entity_result_rel_info(EState *estate, char *graph_name, char *label_name) { RangeVar *rv = NULL; Relation label_relation = NULL; ResultRelInfo *resultRelInfo = NULL; ParseState *pstate = NULL; RangeTblEntry *rte = NULL; int pii = 0; /* create a new parse state for this operation */ pstate = make_parsestate(NULL); resultRelInfo = palloc(sizeof(ResultRelInfo)); if (strlen(label_name) == 0) { rv = makeRangeVar(graph_name, AG_DEFAULT_LABEL_VERTEX, -1); } else { rv = makeRangeVar(graph_name, label_name, -1); } label_relation = parserOpenTable(pstate, rv, RowExclusiveLock); /* * Get the rte to determine the correct perminfoindex value. Some rtes * may have it set up, some created here (executor) may not. * * Note: The RTEPermissionInfo structure was added in PostgreSQL version 16. * * Note: We use the list_length because exec_rt_fetch starts at 1, not 0. * Doing this gives us the last rte in the es_range_table list, which * is the rte in question. * * If the rte is created here and doesn't have a perminfoindex, we * need to pass on a 0. Otherwise, later on GetResultRTEPermissionInfo * will attempt to get the rte's RTEPermissionInfo data, which doesn't * exist. * * TODO: Ideally, we should consider creating the RTEPermissionInfo data, * but as this is just a read of the label relation, it is likely * unnecessary. */ rte = exec_rt_fetch(list_length(estate->es_range_table), estate); pii = (rte->perminfoindex == 0) ? 0 : list_length(estate->es_range_table); /* initialize the resultRelInfo */ InitResultRelInfo(resultRelInfo, label_relation, pii, NULL, estate->es_instrument); /* open the indices */ ExecOpenIndices(resultRelInfo, false); free_parsestate(pstate); return resultRelInfo; } // close the result_rel_info and close all the indices void destroy_entity_result_rel_info(ResultRelInfo *result_rel_info) { // close the indices ExecCloseIndices(result_rel_info); // close the rel table_close(result_rel_info->ri_RelationDesc, RowExclusiveLock); } TupleTableSlot *populate_vertex_tts( TupleTableSlot *elemTupleSlot, agtype_value *id, agtype_value *properties) { bool properties_isnull; if (id == NULL) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("vertex id field cannot be NULL"))); } properties_isnull = properties == NULL; elemTupleSlot->tts_values[vertex_tuple_id] = GRAPHID_GET_DATUM(id->val.int_value); elemTupleSlot->tts_isnull[vertex_tuple_id] = false; elemTupleSlot->tts_values[vertex_tuple_properties] = AGTYPE_P_GET_DATUM(agtype_value_to_agtype(properties)); elemTupleSlot->tts_isnull[vertex_tuple_properties] = properties_isnull; return elemTupleSlot; } TupleTableSlot *populate_edge_tts( TupleTableSlot *elemTupleSlot, agtype_value *id, agtype_value *startid, agtype_value *endid, agtype_value *properties) { bool properties_isnull; if (id == NULL) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("edge id field cannot be NULL"))); } if (startid == NULL) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("edge start_id field cannot be NULL"))); } if (endid == NULL) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("edge end_id field cannot be NULL"))); } properties_isnull = properties == NULL; elemTupleSlot->tts_values[edge_tuple_id] = GRAPHID_GET_DATUM(id->val.int_value); elemTupleSlot->tts_isnull[edge_tuple_id] = false; elemTupleSlot->tts_values[edge_tuple_start_id] = GRAPHID_GET_DATUM(startid->val.int_value); elemTupleSlot->tts_isnull[edge_tuple_start_id] = false; elemTupleSlot->tts_values[edge_tuple_end_id] = GRAPHID_GET_DATUM(endid->val.int_value); elemTupleSlot->tts_isnull[edge_tuple_end_id] = false; elemTupleSlot->tts_values[edge_tuple_properties] = AGTYPE_P_GET_DATUM(agtype_value_to_agtype(properties)); elemTupleSlot->tts_isnull[edge_tuple_properties] = properties_isnull; return elemTupleSlot; } /* * Find out if the entity still exists. This is for 'implicit' deletion * of an entity. */ bool entity_exists(EState *estate, Oid graph_oid, graphid id) { label_cache_data *label; ScanKeyData scan_keys[1]; TableScanDesc scan_desc; HeapTuple tuple; Relation rel; bool result = true; /* * Extract the label id from the graph id and get the table name * the entity is part of. */ label = search_label_graph_oid_cache(graph_oid, GET_LABEL_ID(id)); // Setup the scan key to be the graphid ScanKeyInit(&scan_keys[0], 1, BTEqualStrategyNumber, F_GRAPHIDEQ, GRAPHID_GET_DATUM(id)); rel = table_open(label->relation, RowExclusiveLock); scan_desc = table_beginscan(rel, estate->es_snapshot, 1, scan_keys); tuple = heap_getnext(scan_desc, ForwardScanDirection); /* * If a single tuple was returned, the tuple is still valid, otherwise' * set to false. */ if (!HeapTupleIsValid(tuple)) { result = false; } table_endscan(scan_desc); table_close(rel, RowExclusiveLock); return result; } /* * Insert the edge/vertex tuple into the table and indices. Check that the * table's constraints have not been violated. * * This function defaults to, and flags for update, the currentCommandId. If * you need to pass a specific cid and avoid using the currentCommandId, use * insert_entity_tuple_cid instead. */ HeapTuple insert_entity_tuple(ResultRelInfo *resultRelInfo, TupleTableSlot *elemTupleSlot, EState *estate) { return insert_entity_tuple_cid(resultRelInfo, elemTupleSlot, estate, GetCurrentCommandId(true)); } /* * Insert the edge/vertex tuple into the table and indices. Check that the * table's constraints have not been violated. * * This function uses the passed cid for updates. */ HeapTuple insert_entity_tuple_cid(ResultRelInfo *resultRelInfo, TupleTableSlot *elemTupleSlot, EState *estate, CommandId cid) { HeapTuple tuple = NULL; ExecStoreVirtualTuple(elemTupleSlot); tuple = ExecFetchSlotHeapTuple(elemTupleSlot, true, NULL); /* Check the constraints of the tuple */ tuple->t_tableOid = RelationGetRelid(resultRelInfo->ri_RelationDesc); if (resultRelInfo->ri_RelationDesc->rd_att->constr != NULL) { ExecConstraints(resultRelInfo, elemTupleSlot, estate); } // Insert the tuple normally table_tuple_insert(resultRelInfo->ri_RelationDesc, elemTupleSlot, GetCurrentCommandId(true), 0, NULL); // Insert index entries for the tuple if (resultRelInfo->ri_NumIndices > 0) { ExecInsertIndexTuples(resultRelInfo, elemTupleSlot, estate, false, false, NULL, NIL, false); } return tuple; } age-PG16-v1.5.0-rc0/src/backend/nodes/000077500000000000000000000000001454606241200170665ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/src/backend/nodes/ag_nodes.c000066400000000000000000000112471454606241200210160ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "nodes/extensible.h" #include "nodes/ag_nodes.h" #include "nodes/cypher_copyfuncs.h" #include "nodes/cypher_outfuncs.h" #include "nodes/cypher_readfuncs.h" #include "nodes/cypher_nodes.h" static bool equal_ag_node(const ExtensibleNode *a, const ExtensibleNode *b); // This list must match ag_node_tag. const char *node_names[] = { "ag_node_invalid", "cypher_return", "cypher_with", "cypher_match", "cypher_create", "cypher_set", "cypher_set_item", "cypher_delete", "cypher_unwind", "cypher_merge", "cypher_path", "cypher_node", "cypher_relationship", "cypher_bool_const", "cypher_param", "cypher_map", "cypher_list", "cypher_comparison_aexpr", "cypher_comparison_boolexpr", "cypher_string_match", "cypher_typecast", "cypher_integer_const", "cypher_sub_pattern", "cypher_call", "cypher_create_target_nodes", "cypher_create_path", "cypher_target_node", "cypher_update_information", "cypher_update_item", "cypher_delete_information", "cypher_delete_item", "cypher_merge_information" }; /* * Each node defined with this will have * an out function defined, but copy, equal, * and read will throw errors. */ #define DEFINE_NODE_METHODS(type) \ { \ CppAsString(type), \ sizeof(type), \ copy_ag_node, \ equal_ag_node, \ CppConcat(out_, type), \ read_ag_node \ } /* * Each node defined with this will have a * copy, read, and write function defined. * Equal will still throw an error. */ #define DEFINE_NODE_METHODS_EXTENDED(type) \ { \ CppAsString(type), \ sizeof(type), \ CppConcat(copy_, type), \ equal_ag_node, \ CppConcat(out_, type), \ CppConcat(read_, type) \ } // This list must match ag_node_tag. const ExtensibleNodeMethods node_methods[] = { DEFINE_NODE_METHODS(cypher_return), DEFINE_NODE_METHODS(cypher_with), DEFINE_NODE_METHODS(cypher_match), DEFINE_NODE_METHODS(cypher_create), DEFINE_NODE_METHODS(cypher_set), DEFINE_NODE_METHODS(cypher_set_item), DEFINE_NODE_METHODS(cypher_delete), DEFINE_NODE_METHODS(cypher_unwind), DEFINE_NODE_METHODS(cypher_merge), DEFINE_NODE_METHODS(cypher_path), DEFINE_NODE_METHODS(cypher_node), DEFINE_NODE_METHODS(cypher_relationship), DEFINE_NODE_METHODS(cypher_bool_const), DEFINE_NODE_METHODS(cypher_param), DEFINE_NODE_METHODS(cypher_map), DEFINE_NODE_METHODS(cypher_list), DEFINE_NODE_METHODS(cypher_comparison_aexpr), DEFINE_NODE_METHODS(cypher_comparison_boolexpr), DEFINE_NODE_METHODS(cypher_string_match), DEFINE_NODE_METHODS(cypher_typecast), DEFINE_NODE_METHODS(cypher_integer_const), DEFINE_NODE_METHODS(cypher_sub_pattern), DEFINE_NODE_METHODS(cypher_call), DEFINE_NODE_METHODS_EXTENDED(cypher_create_target_nodes), DEFINE_NODE_METHODS_EXTENDED(cypher_create_path), DEFINE_NODE_METHODS_EXTENDED(cypher_target_node), DEFINE_NODE_METHODS_EXTENDED(cypher_update_information), DEFINE_NODE_METHODS_EXTENDED(cypher_update_item), DEFINE_NODE_METHODS_EXTENDED(cypher_delete_information), DEFINE_NODE_METHODS_EXTENDED(cypher_delete_item), DEFINE_NODE_METHODS_EXTENDED(cypher_merge_information) }; static bool equal_ag_node(const ExtensibleNode *a, const ExtensibleNode *b) { ereport(ERROR, (errmsg("unexpected equal() over ag_node's"))); } void register_ag_nodes(void) { static bool initialized = false; int i; if (initialized) return; for (i = 0; i < lengthof(node_methods); i++) RegisterExtensibleNodeMethods(&node_methods[i]); initialized = true; } ExtensibleNode *_new_ag_node(Size size, ag_node_tag tag) { ExtensibleNode *n; n = (ExtensibleNode *)palloc0fast(size); n->type = T_ExtensibleNode; n->extnodename = node_names[tag]; return n; } age-PG16-v1.5.0-rc0/src/backend/nodes/cypher_copyfuncs.c000066400000000000000000000126331454606241200226220ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "nodes/bitmapset.h" #include "nodes/extensible.h" #include "nodes/nodes.h" #include "utils/palloc.h" #include "nodes/cypher_copyfuncs.h" #include "nodes/cypher_nodes.h" /* * Copied From Postgres * * Macros to simplify copying of different kinds of fields. Use these * wherever possible to reduce the chance for silly typos. Note that these * hard-wire the convention that the local variables in a Copy routine are * named 'extended_newnode' and 'extended_from'. */ // Declare the local fields needed to copy extensible nodes #define COPY_LOCALS(nodeTypeName) \ nodeTypeName *extended_newnode = (nodeTypeName *)newnode; \ nodeTypeName *extended_from = (nodeTypeName *)from; \ Assert(is_ag_node(newnode, nodeTypeName)); \ Assert(is_ag_node(from, nodeTypeName)); // Copy a simple scalar field (int, float, bool, enum, etc) #define COPY_SCALAR_FIELD(fldname) \ (extended_newnode->fldname = extended_from->fldname) // Copy a field that is a pointer to some kind of Node or Node tree #define COPY_NODE_FIELD(fldname) \ (extended_newnode->fldname = copyObject(extended_from->fldname)) // Copy a field that is a pointer to a Bitmapset #define COPY_BITMAPSET_FIELD(fldname) \ (extended_newnode->fldname = bms_copy(extended_from->fldname)) // Copy a field that is a pointer to a C string, or perhaps NULL #define COPY_STRING_FIELD(fldname) \ (extended_newnode->fldname = extended_from->fldname ? \ pstrdup(extended_from->fldname) : (char *) NULL) /* * Default copy function for cypher nodes. For most nodes, we don't expect * the node to ever be copied. So throw an error. */ void copy_ag_node(ExtensibleNode *newnode, const ExtensibleNode *oldnode) { ereport(ERROR, (errmsg("unexpected copyObject() over ag_node"))); } // copy function for cypher_create_target_nodes void copy_cypher_create_target_nodes(ExtensibleNode *newnode, const ExtensibleNode *from) { COPY_LOCALS(cypher_create_target_nodes); COPY_SCALAR_FIELD(flags); COPY_SCALAR_FIELD(graph_oid); COPY_NODE_FIELD(paths); } // copy function for cypher_create_path void copy_cypher_create_path(ExtensibleNode *newnode, const ExtensibleNode *from) { COPY_LOCALS(cypher_create_path); COPY_SCALAR_FIELD(path_attr_num); COPY_STRING_FIELD(var_name); COPY_NODE_FIELD(target_nodes); } // copy function for cypher_target_node void copy_cypher_target_node(ExtensibleNode *newnode, const ExtensibleNode *from) { COPY_LOCALS(cypher_target_node); COPY_SCALAR_FIELD(type); COPY_SCALAR_FIELD(flags); COPY_SCALAR_FIELD(dir); COPY_SCALAR_FIELD(prop_attr_num); COPY_SCALAR_FIELD(relid); COPY_SCALAR_FIELD(tuple_position); COPY_STRING_FIELD(label_name); COPY_STRING_FIELD(variable_name); COPY_NODE_FIELD(id_expr); COPY_NODE_FIELD(id_expr_state); COPY_NODE_FIELD(prop_expr); COPY_NODE_FIELD(prop_expr_state); COPY_NODE_FIELD(resultRelInfo); COPY_NODE_FIELD(elemTupleSlot); } // copy function for cypher_update_information void copy_cypher_update_information(ExtensibleNode *newnode, const ExtensibleNode *from) { COPY_LOCALS(cypher_update_information); COPY_NODE_FIELD(set_items); COPY_SCALAR_FIELD(flags); COPY_SCALAR_FIELD(tuple_position); COPY_STRING_FIELD(graph_name); COPY_STRING_FIELD(clause_name); } // copy function for cypher_update_item void copy_cypher_update_item(ExtensibleNode *newnode, const ExtensibleNode *from) { COPY_LOCALS(cypher_update_item); COPY_SCALAR_FIELD(prop_position); COPY_SCALAR_FIELD(entity_position); COPY_STRING_FIELD(var_name); COPY_STRING_FIELD(prop_name); COPY_NODE_FIELD(qualified_name); COPY_SCALAR_FIELD(remove_item); COPY_SCALAR_FIELD(is_add); } // copy function for cypher_delete_information void copy_cypher_delete_information(ExtensibleNode *newnode, const ExtensibleNode *from) { COPY_LOCALS(cypher_delete_information); COPY_NODE_FIELD(delete_items); COPY_SCALAR_FIELD(flags); COPY_STRING_FIELD(graph_name); COPY_SCALAR_FIELD(graph_oid); COPY_SCALAR_FIELD(detach); } // copy function for cypher_delete_item void copy_cypher_delete_item(ExtensibleNode *newnode, const ExtensibleNode *from) { COPY_LOCALS(cypher_delete_item); COPY_NODE_FIELD(entity_position); COPY_STRING_FIELD(var_name); } // copy function for cypher_merge_information void copy_cypher_merge_information(ExtensibleNode *newnode, const ExtensibleNode *from) { COPY_LOCALS(cypher_merge_information); COPY_SCALAR_FIELD(flags); COPY_SCALAR_FIELD(graph_oid); COPY_SCALAR_FIELD(merge_function_attr); COPY_NODE_FIELD(path); } age-PG16-v1.5.0-rc0/src/backend/nodes/cypher_outfuncs.c000066400000000000000000000311401454606241200224510ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "lib/stringinfo.h" #include "nodes/extensible.h" #include "nodes/nodes.h" #include "nodes/cypher_nodes.h" #include "nodes/cypher_outfuncs.h" static void outChar(StringInfo str, char c); #define DEFINE_AG_NODE(type) \ type *_node = (type *)node #define WRITE_NODE_FIELD(field_name) \ do \ { \ appendStringInfoString(str, " :" CppAsString(field_name) " "); \ outNode(str, _node->field_name); \ } while (0) #define WRITE_STRING_FIELD(field_name) \ do \ { \ appendStringInfoString(str, " :" CppAsString(field_name) " "); \ outToken(str, _node->field_name); \ } while (0) // Write a char field (ie, one ascii character) #define WRITE_CHAR_FIELD(fldname) \ do { \ (appendStringInfo(str, " :" CppAsString(fldname) " "), \ outChar(str, _node->fldname)); \ } while (0) #define WRITE_BOOL_FIELD(field_name) \ do \ { \ appendStringInfo(str, " :" CppAsString(field_name) " %s", \ _node->field_name ? "true" : "false"); \ } while (0) // write an enumerated-type field as an integer code #define WRITE_ENUM_FIELD(field_name, enum_type) \ do \ { \ appendStringInfo(str, " :" CppAsString(field_name) " %d", \ (int)_node->field_name); \ } while (0) #define WRITE_LOCATION_FIELD(field_name) \ do \ { \ appendStringInfo(str, " :" CppAsString(field_name) " %d", \ _node->field_name); \ } while (0) #define WRITE_INT64_FIELD(field_name) \ do \ { \ appendStringInfo(str, " :" CppAsString(field_name) " %ld", \ _node->field_name); \ } while (0) // Write an integer field (anything written as ":fldname %d") #define WRITE_INT32_FIELD(field_name) \ do { \ appendStringInfo(str, " :" CppAsString(field_name) " %d", \ _node->field_name); \ } while (0) // Write an OID field (don't hard-wire assumption that OID is same as uint) #define WRITE_OID_FIELD(fldname) \ do { \ appendStringInfo(str, " :" CppAsString(fldname) " %u", \ _node->fldname); \ } while(0); // serialization function for the cypher_return ExtensibleNode. void out_cypher_return(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_return); WRITE_BOOL_FIELD(distinct); WRITE_NODE_FIELD(items); WRITE_NODE_FIELD(order_by); WRITE_NODE_FIELD(skip); WRITE_NODE_FIELD(limit); WRITE_BOOL_FIELD(all_or_distinct); WRITE_ENUM_FIELD(op, SetOperation); WRITE_NODE_FIELD(larg); WRITE_NODE_FIELD(rarg); } // serialization function for the cypher_with ExtensibleNode. void out_cypher_with(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_with); WRITE_BOOL_FIELD(distinct); WRITE_NODE_FIELD(items); WRITE_NODE_FIELD(order_by); WRITE_NODE_FIELD(skip); WRITE_NODE_FIELD(limit); WRITE_NODE_FIELD(where); } // serialization function for the cypher_match ExtensibleNode. void out_cypher_match(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_match); WRITE_NODE_FIELD(pattern); WRITE_NODE_FIELD(where); WRITE_BOOL_FIELD(optional); } // serialization function for the cypher_create ExtensibleNode. void out_cypher_create(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_create); WRITE_NODE_FIELD(pattern); } // serialization function for the cypher_set ExtensibleNode. void out_cypher_set(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_set); WRITE_NODE_FIELD(items); WRITE_BOOL_FIELD(is_remove); } // serialization function for the cypher_set_item ExtensibleNode. void out_cypher_set_item(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_set_item); WRITE_NODE_FIELD(prop); WRITE_NODE_FIELD(expr); WRITE_BOOL_FIELD(is_add); } // serialization function for the cypher_delete ExtensibleNode. void out_cypher_delete(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_delete); WRITE_BOOL_FIELD(detach); WRITE_NODE_FIELD(exprs); } void out_cypher_unwind(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_unwind); WRITE_NODE_FIELD(target); } // serialization function for the cypher_delete ExtensibleNode. void out_cypher_merge(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_merge); WRITE_NODE_FIELD(path); } // serialization function for the cypher_path ExtensibleNode. void out_cypher_path(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_path); WRITE_NODE_FIELD(path); WRITE_STRING_FIELD(var_name); WRITE_STRING_FIELD(parsed_var_name); WRITE_LOCATION_FIELD(location); } // serialization function for the cypher_node ExtensibleNode. void out_cypher_node(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_node); WRITE_STRING_FIELD(name); WRITE_STRING_FIELD(parsed_name); WRITE_STRING_FIELD(label); WRITE_STRING_FIELD(parsed_label); WRITE_NODE_FIELD(props); WRITE_LOCATION_FIELD(location); } // serialization function for the cypher_relationship ExtensibleNode. void out_cypher_relationship(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_relationship); WRITE_STRING_FIELD(name); WRITE_STRING_FIELD(parsed_name); WRITE_STRING_FIELD(label); WRITE_STRING_FIELD(parsed_label); WRITE_NODE_FIELD(props); WRITE_NODE_FIELD(varlen); WRITE_ENUM_FIELD(dir, cypher_rel_dir); WRITE_LOCATION_FIELD(location); } // serialization function for the cypher_bool_const ExtensibleNode. void out_cypher_bool_const(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_bool_const); WRITE_BOOL_FIELD(boolean); WRITE_LOCATION_FIELD(location); } // serialization function for the cypher_param ExtensibleNode. void out_cypher_param(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_param); WRITE_STRING_FIELD(name); WRITE_LOCATION_FIELD(location); } // serialization function for the cypher_map ExtensibleNode. void out_cypher_map(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_map); WRITE_NODE_FIELD(keyvals); WRITE_LOCATION_FIELD(location); } // serialization function for the cypher_list ExtensibleNode. void out_cypher_list(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_list); WRITE_NODE_FIELD(elems); WRITE_LOCATION_FIELD(location); } // serialization function for the cypher_comparison_aexpr ExtensibleNode. void out_cypher_comparison_aexpr(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_comparison_aexpr); WRITE_ENUM_FIELD(kind, A_Expr_Kind); WRITE_NODE_FIELD(name); WRITE_NODE_FIELD(lexpr); WRITE_NODE_FIELD(rexpr); WRITE_LOCATION_FIELD(location); } // serialization function for the cypher_comparison_boolexpr ExtensibleNode. void out_cypher_comparison_boolexpr(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_comparison_boolexpr); WRITE_ENUM_FIELD(boolop, BoolExprType); WRITE_NODE_FIELD(args); WRITE_LOCATION_FIELD(location); } // serialization function for the cypher_string_match ExtensibleNode. void out_cypher_string_match(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_string_match); WRITE_ENUM_FIELD(operation, cypher_string_match_op); WRITE_NODE_FIELD(lhs); WRITE_NODE_FIELD(rhs); WRITE_LOCATION_FIELD(location); } // serialization function for the cypher_typecast ExtensibleNode. void out_cypher_typecast(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_typecast); WRITE_NODE_FIELD(expr); WRITE_STRING_FIELD(typecast); WRITE_LOCATION_FIELD(location); } // serialization function for the cypher_integer_const ExtensibleNode. void out_cypher_integer_const(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_integer_const); WRITE_INT64_FIELD(integer); WRITE_LOCATION_FIELD(location); } // serialization function for the cypher_sub_pattern ExtensibleNode. void out_cypher_sub_pattern(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_sub_pattern); WRITE_ENUM_FIELD(kind, csp_kind); WRITE_NODE_FIELD(pattern); } // serialization function for the cypher_call ExtensibleNode. void out_cypher_call(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_call); WRITE_NODE_FIELD(funccall); WRITE_NODE_FIELD(funcexpr); WRITE_NODE_FIELD(where); WRITE_NODE_FIELD(yield_items); } // serialization function for the cypher_create_target_nodes ExtensibleNode. void out_cypher_create_target_nodes(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_create_target_nodes); WRITE_NODE_FIELD(paths); WRITE_INT32_FIELD(flags); WRITE_INT32_FIELD(graph_oid); } // serialization function for the cypher_create_path ExtensibleNode. void out_cypher_create_path(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_create_path); WRITE_NODE_FIELD(target_nodes); WRITE_INT32_FIELD(path_attr_num); WRITE_STRING_FIELD(var_name); } // serialization function for the cypher_target_node ExtensibleNode. void out_cypher_target_node(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_target_node); WRITE_CHAR_FIELD(type); WRITE_INT32_FIELD(flags); WRITE_ENUM_FIELD(dir, cypher_rel_dir); WRITE_NODE_FIELD(id_expr); WRITE_NODE_FIELD(id_expr_state); WRITE_NODE_FIELD(prop_expr); WRITE_NODE_FIELD(prop_expr_state); WRITE_INT32_FIELD(prop_attr_num); WRITE_NODE_FIELD(resultRelInfo); WRITE_NODE_FIELD(elemTupleSlot); WRITE_OID_FIELD(relid); WRITE_STRING_FIELD(label_name); WRITE_STRING_FIELD(variable_name); WRITE_INT32_FIELD(tuple_position); } // serialization function for the cypher_update_information ExtensibleNode. void out_cypher_update_information(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_update_information); WRITE_NODE_FIELD(set_items); WRITE_INT32_FIELD(flags); WRITE_INT32_FIELD(tuple_position); WRITE_STRING_FIELD(graph_name); WRITE_STRING_FIELD(clause_name); } // serialization function for the cypher_update_item ExtensibleNode. void out_cypher_update_item(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_update_item); WRITE_INT32_FIELD(prop_position); WRITE_INT32_FIELD(entity_position); WRITE_STRING_FIELD(var_name); WRITE_STRING_FIELD(prop_name); WRITE_NODE_FIELD(qualified_name); WRITE_BOOL_FIELD(remove_item); WRITE_BOOL_FIELD(is_add); } // serialization function for the cypher_delete_information ExtensibleNode. void out_cypher_delete_information(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_delete_information); WRITE_NODE_FIELD(delete_items); WRITE_INT32_FIELD(flags); WRITE_STRING_FIELD(graph_name); WRITE_INT32_FIELD(graph_oid); WRITE_BOOL_FIELD(detach); } // serialization function for the cypher_delete_item ExtensibleNode. void out_cypher_delete_item(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_delete_item); WRITE_NODE_FIELD(entity_position); WRITE_STRING_FIELD(var_name); } // serialization function for the cypher_merge_information ExtensibleNode. void out_cypher_merge_information(StringInfo str, const ExtensibleNode *node) { DEFINE_AG_NODE(cypher_merge_information); WRITE_INT32_FIELD(flags); WRITE_INT32_FIELD(graph_oid); WRITE_INT32_FIELD(merge_function_attr); WRITE_NODE_FIELD(path); } /* * Copied from Postgres * * Convert one char. Goes through outToken() so that special characters are * escaped. */ static void outChar(StringInfo str, char c) { char in[2]; in[0] = c; in[1] = '\0'; outToken(str, in); } age-PG16-v1.5.0-rc0/src/backend/nodes/cypher_readfuncs.c000066400000000000000000000225521454606241200225640ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "nodes/readfuncs.h" #include "nodes/cypher_readfuncs.h" #include "nodes/cypher_nodes.h" static char *nullable_string(const char *token, int length); /* * Copied From Postgres * * Macros for declaring appropriate local variables. */ /* A few guys need only local_node */ #define READ_LOCALS_NO_FIELDS(nodeTypeName) \ nodeTypeName *local_node = (nodeTypeName *) node /* And a few guys need only the pg_strtok support fields */ #define READ_TEMP_LOCALS() \ const char *token; \ int length /* ... but most need both */ #define READ_LOCALS(nodeTypeName) \ READ_LOCALS_NO_FIELDS(nodeTypeName); \ READ_TEMP_LOCALS() /* * The READ_*_FIELD defines first skips the :fldname token (key) part of the string * and then converts the next token (value) to the correct data type. * * pg_strtok will split the passed string by whitespace, skipping whitespace in * strings. We do not setup pg_strtok. That is for the caller to do. By default * that is the responsibility of Postgres' nodeRead function. We assume that was setup * correctly. */ // Read an integer field (anything written as ":fldname %d") #define READ_INT_FIELD(fldname) \ token = pg_strtok(&length); \ token = pg_strtok(&length); \ local_node->fldname = strtol(token, 0, 10) // Read an unsigned integer field (anything written as ":fldname %u") #define READ_UINT_FIELD(fldname) \ token = pg_strtok(&length); \ token = pg_strtok(&length); \ local_node->fldname = atoui(token) // Read an unsigned integer field (anything written using UINT64_FORMAT) #define READ_UINT64_FIELD(fldname) \ token = pg_strtok(&length); \ token = pg_strtok(&length); \ local_node->fldname = pg_strtouint64(token, NULL, 10) // Read a long integer field (anything written as ":fldname %ld") #define READ_LONG_FIELD(fldname) \ token = pg_strtok(&length); \ token = pg_strtok(&length); \ local_node->fldname = atol(token) // Read an OID field (don't hard-wire assumption that OID is same as uint) #define READ_OID_FIELD(fldname) \ token = pg_strtok(&length); \ token = pg_strtok(&length); \ local_node->fldname = atooid(token) // Read a char field (ie, one ascii character) #define READ_CHAR_FIELD(fldname) \ token = pg_strtok(&length); \ token = pg_strtok(&length); \ /* avoid overhead of calling debackslash() for one char */ \ local_node->fldname = (length == 0) ? '\0' : (token[0] == '\\' ? token[1] : token[0]) // Read an enumerated-type field that was written as an integer code #define READ_ENUM_FIELD(fldname, enumtype) \ token = pg_strtok(&length); \ token = pg_strtok(&length); \ local_node->fldname = (enumtype) strtol(token, 0, 10) // Read a float field #define READ_FLOAT_FIELD(fldname) \ token = pg_strtok(&length); \ token = pg_strtok(&length); \ local_node->fldname = atof(token) // Read a boolean field #define READ_BOOL_FIELD(fldname) \ token = pg_strtok(&length); \ token = pg_strtok(&length); \ local_node->fldname = strtobool(token) // Read a character-string field #define READ_STRING_FIELD(fldname) \ token = pg_strtok(&length); \ token = pg_strtok(&length); \ local_node->fldname = nullable_string(token, length) // Read a parse location field (and throw away the value, per notes above) #define READ_LOCATION_FIELD(fldname) \ token = pg_strtok(&length); \ token = pg_strtok(&length); \ (void) token; \ local_node->fldname = -1 // Read a Node field #define READ_NODE_FIELD(fldname) \ token = pg_strtok(&length); \ (void) token; \ local_node->fldname = nodeRead(NULL, 0) // Read a bitmapset field #define READ_BITMAPSET_FIELD(fldname) \ token = pg_strtok(&length); \ (void) token; \ local_node->fldname = _readBitmapset() // Read an attribute number array #define READ_ATTRNUMBER_ARRAY(fldname, len) \ token = pg_strtok(&length); \ local_node->fldname = readAttrNumberCols(len); // Read an oid array #define READ_OID_ARRAY(fldname, len) \ token = pg_strtok(&length); \ local_node->fldname = readOidCols(len); // Read an int array #define READ_INT_ARRAY(fldname, len) \ token = pg_strtok(&length); \ local_node->fldname = readIntCols(len); // Read a bool array #define READ_BOOL_ARRAY(fldname, len) \ token = pg_strtok(&length); \ local_node->fldname = readBoolCols(len); /* * NOTE: use atoi() to read values written with %d, or atoui() to read * values written with %u in outfuncs.c. An exception is OID values, * for which use atooid(). (As of 7.1, outfuncs.c writes OIDs as %u, * but this will probably change in the future.) */ #define atoui(x) ((unsigned int) strtoul((x), NULL, 10)) #define strtobool(x) ((*(x) == 't') ? true : false) /* copied from PG16 function of the same name for consistency */ static char *nullable_string(const char *token, int length) { /* outToken emits <> for NULL, and pg_strtok makes that an empty string */ if (length == 0) { return NULL; } /* outToken emits "" for empty string */ if (length == 2 && token[0] == '"' && token[1] == '"') { return pstrdup(""); } /* otherwise, we must remove protective backslashes added by outToken */ return debackslash(token, length); } /* * Default read function for cypher nodes. For most nodes, we don't expect * the node to ever be read (deserialized). So throw an error. */ void read_ag_node(ExtensibleNode *node) { ereport(ERROR, (errmsg("unexpected parseNodeString() for ag_node"))); } /* * Deserialize a string representing the cypher_create_target_nodes * data structure. */ void read_cypher_create_target_nodes(struct ExtensibleNode *node) { READ_LOCALS(cypher_create_target_nodes); READ_NODE_FIELD(paths); READ_UINT_FIELD(flags); READ_UINT_FIELD(graph_oid); } /* * Deserialize a string representing the cypher_create_path * data structure. */ void read_cypher_create_path(struct ExtensibleNode *node) { READ_LOCALS(cypher_create_path); READ_NODE_FIELD(target_nodes); READ_INT_FIELD(path_attr_num); READ_STRING_FIELD(var_name); } /* * Deserialize a string representing the cypher_target_node * data structure. */ void read_cypher_target_node(struct ExtensibleNode *node) { READ_LOCALS(cypher_target_node); READ_CHAR_FIELD(type); READ_UINT_FIELD(flags); READ_ENUM_FIELD(dir, cypher_rel_dir); READ_NODE_FIELD(id_expr); READ_NODE_FIELD(id_expr_state); READ_NODE_FIELD(prop_expr); READ_NODE_FIELD(prop_expr_state); READ_INT_FIELD(prop_attr_num); READ_NODE_FIELD(resultRelInfo); READ_NODE_FIELD(elemTupleSlot); READ_OID_FIELD(relid); READ_STRING_FIELD(label_name); READ_STRING_FIELD(variable_name); READ_INT_FIELD(tuple_position); } /* * Deserialize a string representing the cypher_update_information * data structure. */ void read_cypher_update_information(struct ExtensibleNode *node) { READ_LOCALS(cypher_update_information); READ_NODE_FIELD(set_items); READ_UINT_FIELD(flags); READ_INT_FIELD(tuple_position); READ_STRING_FIELD(graph_name); READ_STRING_FIELD(clause_name); } /* * Deserialize a string representing the cypher_update_item * data structure. */ void read_cypher_update_item(struct ExtensibleNode *node) { READ_LOCALS(cypher_update_item); READ_INT_FIELD(prop_position); READ_INT_FIELD(entity_position); READ_STRING_FIELD(var_name); READ_STRING_FIELD(prop_name); READ_NODE_FIELD(qualified_name); READ_BOOL_FIELD(remove_item); READ_BOOL_FIELD(is_add); } /* * Deserialize a string representing the cypher_delete_information * data structure. */ void read_cypher_delete_information(struct ExtensibleNode *node) { READ_LOCALS(cypher_delete_information); READ_NODE_FIELD(delete_items); READ_UINT_FIELD(flags); READ_STRING_FIELD(graph_name); READ_UINT_FIELD(graph_oid); READ_BOOL_FIELD(detach); } /* * Deserialize a string representing the cypher_delete_item * data structure. */ void read_cypher_delete_item(struct ExtensibleNode *node) { READ_LOCALS(cypher_delete_item); READ_NODE_FIELD(entity_position); READ_STRING_FIELD(var_name); } /* * Deserialize a string representing the cypher_merge_information * data structure. */ void read_cypher_merge_information(struct ExtensibleNode *node) { READ_LOCALS(cypher_merge_information); READ_UINT_FIELD(flags); READ_UINT_FIELD(graph_oid); READ_INT_FIELD(merge_function_attr); READ_NODE_FIELD(path); } age-PG16-v1.5.0-rc0/src/backend/optimizer/000077500000000000000000000000001454606241200200005ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/src/backend/optimizer/cypher_createplan.c000066400000000000000000000172041454606241200236400ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "nodes/extensible.h" #include "nodes/nodes.h" #include "nodes/pg_list.h" #include "nodes/plannodes.h" #include "executor/cypher_executor.h" #include "optimizer/cypher_createplan.h" const CustomScanMethods cypher_create_plan_methods = { "Cypher Create", create_cypher_create_plan_state}; const CustomScanMethods cypher_set_plan_methods = { "Cypher Set", create_cypher_set_plan_state}; const CustomScanMethods cypher_delete_plan_methods = { "Cypher Delete", create_cypher_delete_plan_state}; const CustomScanMethods cypher_merge_plan_methods = { "Cypher Merge", create_cypher_merge_plan_state}; Plan *plan_cypher_create_path(PlannerInfo *root, RelOptInfo *rel, CustomPath *best_path, List *tlist, List *clauses, List *custom_plans) { CustomScan *cs; Plan *subplan = linitial(custom_plans); cs = makeNode(CustomScan); cs->scan.plan.startup_cost = best_path->path.startup_cost; cs->scan.plan.total_cost = best_path->path.total_cost; cs->scan.plan.plan_rows = best_path->path.rows; cs->scan.plan.plan_width = 0; cs->scan.plan.parallel_aware = best_path->path.parallel_aware; cs->scan.plan.parallel_safe = best_path->path.parallel_safe; cs->scan.plan.plan_node_id = 0; // Set later in set_plan_refs cs->scan.plan.targetlist = tlist; cs->scan.plan.qual = NIL; cs->scan.plan.lefttree = NULL; cs->scan.plan.righttree = NULL; cs->scan.plan.initPlan = NIL; cs->scan.plan.extParam = NULL; cs->scan.plan.allParam = NULL; cs->scan.scanrelid = 0; cs->flags = best_path->flags; cs->custom_plans = custom_plans; cs->custom_exprs = NIL; cs->custom_private = best_path->custom_private; cs->custom_scan_tlist = subplan->targetlist; cs->custom_relids = NULL; cs->methods = &cypher_create_plan_methods; return (Plan *)cs; } Plan *plan_cypher_set_path(PlannerInfo *root, RelOptInfo *rel, CustomPath *best_path, List *tlist, List *clauses, List *custom_plans) { CustomScan *cs; Plan *subplan = linitial(custom_plans); cs = makeNode(CustomScan); cs->scan.plan.startup_cost = best_path->path.startup_cost; cs->scan.plan.total_cost = best_path->path.total_cost; cs->scan.plan.plan_rows = best_path->path.rows; cs->scan.plan.plan_width = 0; cs->scan.plan.parallel_aware = best_path->path.parallel_aware; cs->scan.plan.parallel_safe = best_path->path.parallel_safe; cs->scan.plan.plan_node_id = 0; // Set later in set_plan_refs cs->scan.plan.targetlist = tlist; cs->scan.plan.qual = NIL; cs->scan.plan.lefttree = NULL; cs->scan.plan.righttree = NULL; cs->scan.plan.initPlan = NIL; cs->scan.plan.extParam = NULL; cs->scan.plan.allParam = NULL; cs->scan.scanrelid = 0; cs->flags = best_path->flags; cs->custom_plans = custom_plans; cs->custom_exprs = NIL; cs->custom_private = best_path->custom_private; cs->custom_scan_tlist = subplan->targetlist; cs->custom_relids = NULL; cs->methods = &cypher_set_plan_methods; return (Plan *)cs; } /* * Coverts the Scan node representing the DELETE clause * to the delete Plan node */ Plan *plan_cypher_delete_path(PlannerInfo *root, RelOptInfo *rel, CustomPath *best_path, List *tlist, List *clauses, List *custom_plans) { CustomScan *cs; Plan *subplan = linitial(custom_plans); cs = makeNode(CustomScan); cs->scan.plan.startup_cost = best_path->path.startup_cost; cs->scan.plan.total_cost = best_path->path.total_cost; cs->scan.plan.plan_rows = best_path->path.rows; cs->scan.plan.plan_width = 0; cs->scan.plan.parallel_aware = best_path->path.parallel_aware; cs->scan.plan.parallel_safe = best_path->path.parallel_safe; cs->scan.plan.plan_node_id = 0; // Set later in set_plan_refs /* * the scan list of the delete node, used for its ScanTupleSlot used * by its parent in the execution phase. */ cs->scan.plan.targetlist = tlist; cs->scan.plan.qual = NIL; cs->scan.plan.lefttree = NULL; cs->scan.plan.righttree = NULL; cs->scan.plan.initPlan = NIL; cs->scan.plan.extParam = NULL; cs->scan.plan.allParam = NULL; /* * We do not want Postgres to assume we are scanning a table, postgres' * optimizer will make assumptions about our targetlist that are false */ cs->scan.scanrelid = 0; cs->flags = best_path->flags; // child plan nodes are here, Postgres processed them for us. cs->custom_plans = custom_plans; cs->custom_exprs = NIL; // transfer delete metadata needed by the DELETE clause. cs->custom_private = best_path->custom_private; /* * the scan list of the delete node's children, used for ScanTupleSlot * in execution. */ cs->custom_scan_tlist = subplan->targetlist; cs->custom_relids = NULL; cs->methods = &cypher_delete_plan_methods; return (Plan *)cs; } /* * Coverts the Scan node representing the MERGE clause * to the merge Plan node */ Plan *plan_cypher_merge_path(PlannerInfo *root, RelOptInfo *rel, CustomPath *best_path, List *tlist, List *clauses, List *custom_plans) { CustomScan *cs; Plan *subplan = linitial(custom_plans); cs = makeNode(CustomScan); cs->scan.plan.startup_cost = best_path->path.startup_cost; cs->scan.plan.total_cost = best_path->path.total_cost; cs->scan.plan.plan_rows = best_path->path.rows; cs->scan.plan.plan_width = 0; cs->scan.plan.parallel_aware = best_path->path.parallel_aware; cs->scan.plan.parallel_safe = best_path->path.parallel_safe; cs->scan.plan.plan_node_id = 0; // Set later in set_plan_refs /* * the scan list of the merge node, used for its ScanTupleSlot used * by its parent in the execution phase. */ cs->scan.plan.targetlist = tlist; cs->scan.plan.qual = NIL; cs->scan.plan.lefttree = NULL; cs->scan.plan.righttree = NULL; cs->scan.plan.initPlan = NIL; cs->scan.plan.extParam = NULL; cs->scan.plan.allParam = NULL; /* * We do not want Postgres to assume we are scanning a table, postgres' * optimizer will make assumptions about our targetlist that are false */ cs->scan.scanrelid = 0; cs->flags = best_path->flags; // child plan nodes are here, Postgres processed them for us. cs->custom_plans = custom_plans; cs->custom_exprs = NIL; // transfer delete metadata needed by the MERGE clause. cs->custom_private = best_path->custom_private; /* * the scan list of the merge node's children, used for ScanTupleSlot * in execution. */ cs->custom_scan_tlist = subplan->targetlist; cs->custom_relids = NULL; cs->methods = &cypher_merge_plan_methods; return (Plan *)cs; } age-PG16-v1.5.0-rc0/src/backend/optimizer/cypher_pathnode.c000066400000000000000000000127251454606241200233270ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "nodes/extensible.h" #include "nodes/nodes.h" #include "nodes/pg_list.h" #include "optimizer/cypher_createplan.h" #include "optimizer/cypher_pathnode.h" const CustomPathMethods cypher_create_path_methods = { CREATE_PATH_NAME, plan_cypher_create_path, NULL}; const CustomPathMethods cypher_set_path_methods = { SET_PATH_NAME, plan_cypher_set_path, NULL}; const CustomPathMethods cypher_delete_path_methods = { DELETE_PATH_NAME, plan_cypher_delete_path, NULL}; const CustomPathMethods cypher_merge_path_methods = { MERGE_PATH_NAME, plan_cypher_merge_path, NULL}; CustomPath *create_cypher_create_path(PlannerInfo *root, RelOptInfo *rel, List *custom_private) { CustomPath *cp; cp = makeNode(CustomPath); cp->path.pathtype = T_CustomScan; cp->path.parent = rel; cp->path.pathtarget = rel->reltarget; cp->path.param_info = NULL; // Do not allow parallel methods cp->path.parallel_aware = false; cp->path.parallel_safe = false; cp->path.parallel_workers = 0; cp->path.rows = 0; // Basic CREATE will not return rows cp->path.startup_cost = 0; // Basic CREATE will not fetch any pages cp->path.total_cost = 0; // No output ordering for basic CREATE cp->path.pathkeys = NULL; // Disable all custom flags for now cp->flags = 0; cp->custom_paths = rel->pathlist; cp->custom_private = custom_private; cp->methods = &cypher_create_path_methods; return cp; } CustomPath *create_cypher_set_path(PlannerInfo *root, RelOptInfo *rel, List *custom_private) { CustomPath *cp; cp = makeNode(CustomPath); cp->path.pathtype = T_CustomScan; cp->path.parent = rel; cp->path.pathtarget = rel->reltarget; cp->path.param_info = NULL; // Do not allow parallel methods cp->path.parallel_aware = false; cp->path.parallel_safe = false; cp->path.parallel_workers = 0; cp->path.rows = 0; // Basic SET will not return rows cp->path.startup_cost = 0; // Basic SET will not fetch any pages cp->path.total_cost = 0; // No output ordering for basic SET cp->path.pathkeys = NULL; // Disable all custom flags for now cp->flags = 0; cp->custom_paths = rel->pathlist; cp->custom_private = custom_private; cp->methods = &cypher_set_path_methods; return cp; } /* * Creates a Delete Path. Makes the original path a child of the new * path. We leave it to the caller to replace the pathlist of the rel. */ CustomPath *create_cypher_delete_path(PlannerInfo *root, RelOptInfo *rel, List *custom_private) { CustomPath *cp; cp = makeNode(CustomPath); cp->path.pathtype = T_CustomScan; cp->path.parent = rel; cp->path.pathtarget = rel->reltarget; cp->path.param_info = NULL; // Do not allow parallel methods cp->path.parallel_aware = false; cp->path.parallel_safe = false; cp->path.parallel_workers = 0; cp->path.rows = 0; cp->path.startup_cost = 0; cp->path.total_cost = 0; // No output ordering for basic SET cp->path.pathkeys = NULL; // Disable all custom flags for now cp->flags = 0; // Make the original paths the children of the new path cp->custom_paths = rel->pathlist; // Store the metadata Delete will need in the execution phase. cp->custom_private = custom_private; // Tells Postgres how to turn this path to the correct CustomScan cp->methods = &cypher_delete_path_methods; return cp; } /* * Creates a merge path. Makes the original path a child of the new * path. We leave it to the caller to replace the pathlist of the rel. */ CustomPath *create_cypher_merge_path(PlannerInfo *root, RelOptInfo *rel, List *custom_private) { CustomPath *cp; cp = makeNode(CustomPath); cp->path.pathtype = T_CustomScan; cp->path.parent = rel; cp->path.pathtarget = rel->reltarget; cp->path.param_info = NULL; // Do not allow parallel methods cp->path.parallel_aware = false; cp->path.parallel_safe = false; cp->path.parallel_workers = 0; cp->path.rows = 0; cp->path.startup_cost = 0; cp->path.total_cost = 0; // No output ordering for basic SET cp->path.pathkeys = NULL; // Disable all custom flags for now cp->flags = 0; // Make the original paths the children of the new path cp->custom_paths = rel->pathlist; // Store the metadata Delete will need in the execution phase. cp->custom_private = custom_private; // Tells Postgres how to turn this path to the correct CustomScan cp->methods = &cypher_merge_path_methods; return cp; } age-PG16-v1.5.0-rc0/src/backend/optimizer/cypher_paths.c000066400000000000000000000164531454606241200226460ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "nodes/parsenodes.h" #include "nodes/primnodes.h" #include "optimizer/pathnode.h" #include "optimizer/paths.h" #include "optimizer/cypher_pathnode.h" #include "optimizer/cypher_paths.h" #include "utils/ag_func.h" typedef enum cypher_clause_kind { CYPHER_CLAUSE_NONE, CYPHER_CLAUSE_CREATE, CYPHER_CLAUSE_SET, CYPHER_CLAUSE_DELETE, CYPHER_CLAUSE_MERGE } cypher_clause_kind; static set_rel_pathlist_hook_type prev_set_rel_pathlist_hook; static void set_rel_pathlist(PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte); static cypher_clause_kind get_cypher_clause_kind(RangeTblEntry *rte); static void handle_cypher_create_clause(PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte); static void handle_cypher_set_clause(PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte); static void handle_cypher_delete_clause(PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte); static void handle_cypher_merge_clause(PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte); void set_rel_pathlist_init(void) { prev_set_rel_pathlist_hook = set_rel_pathlist_hook; set_rel_pathlist_hook = set_rel_pathlist; } void set_rel_pathlist_fini(void) { set_rel_pathlist_hook = prev_set_rel_pathlist_hook; } static void set_rel_pathlist(PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte) { if (prev_set_rel_pathlist_hook) prev_set_rel_pathlist_hook(root, rel, rti, rte); switch (get_cypher_clause_kind(rte)) { case CYPHER_CLAUSE_CREATE: handle_cypher_create_clause(root, rel, rti, rte); break; case CYPHER_CLAUSE_SET: handle_cypher_set_clause(root, rel, rti, rte); break; case CYPHER_CLAUSE_DELETE: handle_cypher_delete_clause(root, rel, rti, rte); break; case CYPHER_CLAUSE_MERGE: handle_cypher_merge_clause(root, rel, rti, rte); break; case CYPHER_CLAUSE_NONE: break; default: ereport(ERROR, (errmsg_internal("invalid cypher_clause_kind"))); } } /* * Check to see if the rte is a Cypher clause. An rte is only a Cypher clause * if it is a subquery, with the last entry in its target list, that is a * FuncExpr. */ static cypher_clause_kind get_cypher_clause_kind(RangeTblEntry *rte) { TargetEntry *te; FuncExpr *fe; // If it's not a subquery, it's not a Cypher clause. if (rte->rtekind != RTE_SUBQUERY) return CYPHER_CLAUSE_NONE; // Make sure the targetList isn't NULL. NULL means potential EXIST subclause if (rte->subquery->targetList == NULL) return CYPHER_CLAUSE_NONE; // A Cypher clause function is always the last entry. te = llast(rte->subquery->targetList); // If the last entry is not a FuncExpr, it's not a Cypher clause. if (!IsA(te->expr, FuncExpr)) return CYPHER_CLAUSE_NONE; fe = (FuncExpr *)te->expr; if (is_oid_ag_func(fe->funcid, CREATE_CLAUSE_FUNCTION_NAME)) return CYPHER_CLAUSE_CREATE; if (is_oid_ag_func(fe->funcid, SET_CLAUSE_FUNCTION_NAME)) return CYPHER_CLAUSE_SET; if (is_oid_ag_func(fe->funcid, DELETE_CLAUSE_FUNCTION_NAME)) return CYPHER_CLAUSE_DELETE; if (is_oid_ag_func(fe->funcid, MERGE_CLAUSE_FUNCTION_NAME)) return CYPHER_CLAUSE_MERGE; else return CYPHER_CLAUSE_NONE; } // replace all possible paths with our CustomPath static void handle_cypher_delete_clause(PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte) { TargetEntry *te; FuncExpr *fe; List *custom_private; CustomPath *cp; // Add the pattern to the CustomPath te = (TargetEntry *)llast(rte->subquery->targetList); fe = (FuncExpr *)te->expr; // pass the const that holds the data structure to the path. custom_private = fe->args; cp = create_cypher_delete_path(root, rel, custom_private); // Discard any preexisting paths rel->pathlist = NIL; rel->partial_pathlist = NIL; add_path(rel, (Path *)cp); } /* * Take the paths possible for the RelOptInfo that represents our * _cypher_delete_clause function replace them with our delete clause * path. The original paths will be children to the new delete path. */ static void handle_cypher_create_clause(PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte) { TargetEntry *te; FuncExpr *fe; List *custom_private; CustomPath *cp; // Add the pattern to the CustomPath te = (TargetEntry *)llast(rte->subquery->targetList); fe = (FuncExpr *)te->expr; // pass the const that holds the data structure to the path. custom_private = fe->args; cp = create_cypher_create_path(root, rel, custom_private); // Discard any preexisting paths, they should be under the cp path rel->pathlist = NIL; rel->partial_pathlist = NIL; // Add the new path to the rel. add_path(rel, (Path *)cp); } // replace all possible paths with our CustomPath static void handle_cypher_set_clause(PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte) { TargetEntry *te; FuncExpr *fe; List *custom_private; CustomPath *cp; // Add the pattern to the CustomPath te = (TargetEntry *)llast(rte->subquery->targetList); fe = (FuncExpr *)te->expr; // pass the const that holds the data structure to the path. custom_private = fe->args; cp = create_cypher_set_path(root, rel, custom_private); // Discard any preexisting paths rel->pathlist = NIL; rel->partial_pathlist = NIL; add_path(rel, (Path *)cp); } // replace all possible paths with our CustomPath static void handle_cypher_merge_clause(PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte) { TargetEntry *te; FuncExpr *fe; List *custom_private; CustomPath *cp; // Add the pattern to the CustomPath te = (TargetEntry *)llast(rte->subquery->targetList); fe = (FuncExpr *)te->expr; // pass the const that holds the data structure to the path. custom_private = fe->args; cp = create_cypher_merge_path(root, rel, custom_private); // Discard any preexisting paths rel->pathlist = NIL; rel->partial_pathlist = NIL; add_path(rel, (Path *)cp); } age-PG16-v1.5.0-rc0/src/backend/parser/000077500000000000000000000000001454606241200172525ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/src/backend/parser/.gitignore000066400000000000000000000000331454606241200212360ustar00rootroot00000000000000ag_scanner.c cypher_gram.c age-PG16-v1.5.0-rc0/src/backend/parser/ag_scanner.l000066400000000000000000000770741454606241200215460ustar00rootroot00000000000000%top{ /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* * The rules in this scanner implementation are based on the followings. * * - openCypher * - Cypher Query Language Reference (Version 9) * - Grammar Specification (M13) * - ANTLR Grammar (M13) * - JSON (RFC 8259) */ #include "postgres.h" #include "common/string.h" #include "mb/pg_wchar.h" #include "parser/ag_scanner.h" } %option 8bit %option never-interactive %option noyywrap %option reentrant %option extra-type="ag_yy_extra" %option prefix="ag_yy" %option nounistd %option fast noread %option backup %option perf-report perf-report %option nodefault %option warn /* to override the default memory management */ %option noyyalloc noyyrealloc noyyfree /* remove warnings */ %option noinput nounput /* remove unneeded routines */ %option noyy_scan_bytes noyy_scan_string %option noyyget_leng noyyget_text %option noyyget_lineno noyyset_lineno %option noyyget_in noyyset_in noyyget_out noyyset_out %option noyyget_lval noyyset_lval noyyget_lloc noyyset_lloc %option noyyget_debug noyyset_debug /* * whitespace rule in Cypher handles twenty-four characters out of the * twenty-five characters defined as whitespace characters, four extra control * characters (FS, GS, RS, and US), and Mongolian vowel separator in Unicode. * * Only six of them below have been considered as whitespace characters here. * This character set is a superset of whitespace characters in JSON. * * [\t\n\v\f\r ] * U+0009 CHARACTER TABULATION (HT, Horizontal Tab) * U+000A LINE FEED (LF) * U+000B LINE TABULATION (VT, Vertical Tab) * U+000C FORM FEED (FF) * U+000D CARRIAGE RETURN (CR) * U+0020 SPACE * * The other characters are listed below for future reference. To handle them, * you may use the patterns that match UTF-8 encoded code points of them. * * \xC2[\x85\xA0] * U+0085 NEXT LINE (NEL) -- not in Cypher * U+00A0 NO-BREAK SPACE * \xE1\x9A\x80 * U+1680 OGHAM SPACE MARK * \xE2\x80[\x80-\x8A\xA8\xA9\xAF] * U+2000 EN QUAD * U+2001 EM QUAD * U+2002 EN SPACE * U+2003 EM SPACE * U+2004 THREE-PER-EM SPACE * U+2005 FOUR-PER-EM SPACE * U+2006 SIX-PER-EM SPACE * U+2007 FIGURE SPACE * U+2008 PUNCTUATION SPACE * U+2009 THIN SPACE * U+200A HAIR SPACE * U+2028 LINE SEPARATOR * U+2029 PARAGRAPH SEPARATOR * U+202F NARROW NO-BREAK SPACE * \xE2\x81\x9F * U+205F MEDIUM MATHEMATICAL SPACE * \xE3\x80\x80 * U+3000 IDEOGRAPHIC SPACE * * [\x1C-\x1F] * U+001C INFORMATION SEPARATOR FOUR (FS, File Separator) * U+001D INFORMATION SEPARATOR THREE (GS, Group Separator) * U+001E INFORMATION SEPARATOR TWO (RS, Record Separator) * U+001F INFORMATION SEPARATOR ONE (US, Unit Separator) * * \xE1\xA0\x8E * U+180E MONGOLIAN VOWEL SEPARATOR -- not a whitespace anymore */ whitespace [\t\n\v\f\r ]+ /* * Comment rule for multi-line comment in Cypher does not match comments that * end with an odd number of "*"s before the closing sequence. * Therefore, the rule has been modified so that it can match such comments. */ %x mlcomment mlcstart "/*" mlcchars [^*]+|\*+ mlcstop \*+\/ slcomment "//"[^\n\r]* /* * For numbers, unary plus and minus are handled as operators later in Cypher * grammar although JSON numbers may be prefixed with an optional minus sign. * * JSON does not support octal and hexadecimal integer literals. */ digit [0-9] hexdigit [0-9A-Fa-f] /* * digitseq pattern covers DecimalInteger and OctalInteger rules in Cypher. * Integer in JSON is represented in "0|[1-9][0-9]*" pattern that is covered by * digitseq pattern. */ digitseq {digit}+ /* * hexint pattern covers HexInteger rule in Cypher and also accepts "0X" prefix * for convenience. */ hexint 0[Xx]{hexdigit}+ hexintfail 0[Xx] /* * decimal pattern covers RegularDecimalReal rule in Cypher and also accepts * "{digitseq}\." pattern (e.g. "1.") which RegularDecimalReal rule doesn't. * Decimal in JSON is represented in "(0|[1-9][0-9]*)\.[0-9]+" pattern that is * covered by decimal pattern. * * decimalfail pattern is for ranges (e.g. "0..1"). The action for the pattern * consumes digitseq and returns dot_dot back to the input stream so that * dot_dot can be matched next. */ decimal {digitseq}\.{digit}*|\.{digitseq} decimalfail {digitseq}\.\. /* * decimalsci pattern covers ExponentDecimalReal rule in Cypher. It also * accepts coefficients in "{digitseq}\." pattern and explicit positive * exponents ("+") which ExponentDecimalReal rule doesn't. * Scientific notation in JSON is represented in * "(0|[1-9][0-9]*)(\.[0-9]+)?[Ee][+-]?[0-9]+" pattern that is covered by * decimalsci pattern. */ decimalsci ({digitseq}|{decimal})[Ee][+-]?{digitseq} decimalscifail1 ({digitseq}|{decimal})[Ee] decimalscifail2 ({digitseq}|{decimal})[Ee][+-] /* * These patterns cover StringLiteral rule in Cypher and JSON strings. * The escape sequence "\/" has been added for JSON strings. * * esasciifail and esunicodefail patterns handle escape sequences that are not * accepted by esascii and esunicode patterns respectively. * * Since esasciifail pattern can match anything that esascii pattern can, * esascii must appear first before esasciifail in the rules section. * * qstru start condition is for Unicode low surrogates. */ %x dqstr sqstr qstru dquote \" dqchars [^"\\]+ squote ' sqchars [^'\\]+ esascii \\["'/\\bfnrt] esasciifail \\[^Uu]? esunicode \\(U{hexdigit}{8}|u{hexdigit}{4}) esunicodefail \\(U{hexdigit}{0,7}|u{hexdigit}{0,3}) any (?s:.) /* id pattern is for UnescapedSymbolicName rule in Cypher. */ id {idstart}{idcont}* idstart [A-Z_a-z\x80-\xFF] idcont [$0-9A-Z_a-z\x80-\xFF] /* These are for EscapedSymbolicName rule in Cypher. */ %x bqid bquote ` bqchars [^`]+ esbquote {bquote}{bquote} /* * Parameter rule in Cypher is "$" followed by SymbolicName or DecimalInteger * rule. However, according to "Cypher Query Language Reference", * * Parameters may consist of letters and numbers, and any combination of * these, but cannot start with a number or a currency symbol. * * So, a modified version of Parameter rule that follows the above explanation * has been used. */ param \${id} /* * These are tokens that are used as operators and language constructs in * Cypher, and some of them are structural characters in JSON. */ left_contains "<@" right_contains "@>" any_exists "?|" all_exists "?&" concat "||" access_path "#>" lt_gt "<>" lt_eq "<=" gt_eq ">=" dot_dot ".." plus_eq "+=" eq_tilde "=~" typecast "::" self [?%()*+,\-./:;<=>[\]^{|}] other . %{ typedef struct strbuf { char *buffer; int capacity; int length; } strbuf; static void strbuf_init(strbuf *sb, int capacity); static void strbuf_cleanup(strbuf *sb); static void strbuf_append_buf(strbuf *sb, const char *b, const int len); static void strbuf_append_char(strbuf *sb, const char c); static void strbuf_append_codepoint(strbuf *sb, const pg_wchar c); static void strbuf_ensure_capacity(strbuf *sb, int len); static const char *strbuf_get_str(strbuf *sb); static void strbuf_reset(strbuf *sb); typedef struct ag_yy_extra { /* * accumulate matched strings to build a complete literal if multiple rules * are needed to scan it, or keep a decimal integer literal that is * converted from a hexadecimal or an octal integer literal if it is too * large to fit in "int" type */ strbuf literal_buf; // for Unicode surrogate pair pg_wchar high_surrogate; int start_cond; // for the location of the current token and the actual position of it const char *scan_buf; int last_loc; } ag_yy_extra; static void integer_literal_to_token(const char *s, ag_token *token, ag_yy_extra *extra); #define hexadecimal_to_decimal(numstr, sb) _numstr_to_decimal(numstr, 16, sb) #define octal_to_decimal(numstr, sb) _numstr_to_decimal(numstr, 8, sb) static void _numstr_to_decimal(const char *numstr, const int base, strbuf *sb); static uint32 hexdigit_value(const char c); static uint32 octdigit_value(const char c); static bool is_high_surrogate(const pg_wchar c); static bool is_low_surrogate(const pg_wchar c); #define update_location() \ do \ { \ yyextra.last_loc = yytext - yyextra.scan_buf; \ } while (0) #define get_location() (yyextra.last_loc) #define scan_errmsg(msg) _scan_errmsg(msg, &yyextra) static int _scan_errmsg(const char *msg, const ag_yy_extra *extra); #define scan_errposition() _scan_errposition(yyextra.last_loc, &yyextra) static int _scan_errposition(const int location, const ag_yy_extra *extra); /* * Avoid exit() on fatal scanner errors. * Call yy_fatal_error() just to keep compiler quiet. */ #define YY_FATAL_ERROR(msg) \ do \ { \ ereport(ERROR, (errmsg_internal("%s", msg))); \ yy_fatal_error(NULL, NULL); \ } while (0) /* * "yyscanner" must be used for the name of the parameter because it is * referenced internally. "yyscan_t" is OK because it is actually "void *" * and is the same with "ag_scanner_t". */ #define YY_DECL ag_token ag_scanner_next_token(yyscan_t yyscanner) #define NDIGITS_PER_REMAINDER 9 %} %% %{ // This is used in the actions below. ag_token token; %} {whitespace} { // ignore } {mlcstart} { // update location in case of unterminated comment update_location(); BEGIN(mlcomment); } {mlcchars} { // ignore } {mlcstop} { BEGIN(INITIAL); } <> { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), scan_errmsg("unterminated /* comment"), scan_errposition())); } {slcomment} { // ignore } {digitseq} | {hexint} { update_location(); integer_literal_to_token(yytext, &token, &yyextra); token.location = get_location(); return token; } {hexintfail} { update_location(); ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), scan_errmsg("invalid hexadecimal integer literal"), scan_errposition())); } {decimal} | {decimalsci} { update_location(); token.type = AG_TOKEN_DECIMAL; token.value.s = yytext; token.location = get_location(); return token; } {decimalfail} { // return dot_dot back to the input stream yyless(yyleng - 2); update_location(); // consume digitseq integer_literal_to_token(yytext, &token, &yyextra); token.location = get_location(); return token; } {decimalscifail1} | {decimalscifail2} { update_location(); ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), scan_errmsg("invalid scientific notation literal"), scan_errposition())); } {dquote} { update_location(); strbuf_reset(&yyextra.literal_buf); BEGIN(dqstr); } {squote} { update_location(); strbuf_reset(&yyextra.literal_buf); BEGIN(sqstr); } {dqchars} | {sqchars} { strbuf_append_buf(&yyextra.literal_buf, yytext, yyleng); } {esascii} { char c; switch (yytext[1]) { case 'b': c = '\b'; break; case 'f': c = '\f'; break; case 'n': c = '\n'; break; case 'r': c = '\r'; break; case 't': c = '\t'; break; default: // '"', '\'', '/', and '\\' c = yytext[1]; break; } strbuf_append_char(&yyextra.literal_buf, c); } {esasciifail} { if (yyleng == 1) { /* * This happens when the scanner meets "\"<>. Just consume "\" * so that <> rule can do the rest. */ strbuf_append_char(&yyextra.literal_buf, '\\'); } else { update_location(); ereport(ERROR, (errcode(ERRCODE_INVALID_ESCAPE_SEQUENCE), scan_errmsg("invalid escape sequence"), errdetail("Valid escape sequences are \\\", \\', \\/, \\\\, \\b, \\f, \\n, \\r, \\t, \\uXXXX, and \\UXXXXXXXX."), scan_errposition())); } } {esunicode} { pg_wchar c; // It is unnecessary to check endptr and errno here. c = strtoul(yytext + 2, NULL, 16); if (c > 0x10FFFF) { // c is greater than the maximum value of a Unicode code point. update_location(); ereport(ERROR, (errcode(ERRCODE_INVALID_ESCAPE_SEQUENCE), scan_errmsg("invalid Unicode escape value"), errdetail("Unicode escape values cannot be greater than 10FFFF, which is the maximum value of a code point."), scan_errposition())); } else if (c > 0x7F) { if (GetDatabaseEncoding() != PG_UTF8) { update_location(); ereport(ERROR, (errcode(ERRCODE_INVALID_ESCAPE_SEQUENCE), scan_errmsg("unsupported Unicode escape value"), errdetail("Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8."), scan_errposition())); } if (is_high_surrogate(c)) { yyextra.high_surrogate = c; yyextra.start_cond = YY_START; BEGIN(qstru); } else if (is_low_surrogate(c)) { update_location(); ereport(ERROR, (errcode(ERRCODE_INVALID_ESCAPE_SEQUENCE), scan_errmsg("invalid Unicode surrogate pair"), errdetail("A low surrogate must follow a high surrogate."), scan_errposition())); } else { strbuf_append_codepoint(&yyextra.literal_buf, c); } } else if (c > 0) { // c is an ASCII character. strbuf_append_char(&yyextra.literal_buf, (char)c); } else { /* * U+0000 NUL is the minimum value of a Unicode code point. * However, it is invalid in quoted strings as well as query strings. */ update_location(); ereport(ERROR, (errcode(ERRCODE_INVALID_ESCAPE_SEQUENCE), scan_errmsg("unsupported Unicode escape value"), errdetail("Unicode code point value 0000 is not allowed in quoted strings."), scan_errposition())); } } {esunicode} { pg_wchar c; c = strtoul(yytext + 2, NULL, 16); if (is_low_surrogate(c)) { c = surrogate_pair_to_codepoint(yyextra.high_surrogate, c); // 0x010000 <= c <= 0x10FFFF always holds for surrogate pairs. strbuf_append_codepoint(&yyextra.literal_buf, c); BEGIN(yyextra.start_cond); } else { update_location(); ereport(ERROR, (errcode(ERRCODE_INVALID_ESCAPE_SEQUENCE), scan_errmsg("invalid Unicode surrogate pair"), errdetail("A low surrogate must follow a high surrogate."), scan_errposition())); } } {esunicodefail} { update_location(); ereport(ERROR, (errcode(ERRCODE_INVALID_ESCAPE_SEQUENCE), scan_errmsg("invalid Unicode escape sequence"), errhint("Unicode escape sequences must be \\uXXXX or \\UXXXXXXXX."), scan_errposition())); } {any} { update_location(); ereport(ERROR, (errcode(ERRCODE_INVALID_ESCAPE_SEQUENCE), scan_errmsg("invalid Unicode surrogate pair"), errdetail("A low surrogate must follow a high surrogate."), scan_errposition())); } {dquote} | {squote} { BEGIN(INITIAL); /* * In quoted strings, only Unicode escape sequences need to be verified, * and the actions for {esunicode} and {esunicode} * rules verify the code point values. So, quoted strings are always valid. */ token.type = AG_TOKEN_STRING; token.value.s = strbuf_get_str(&yyextra.literal_buf); token.location = get_location(); return token; } <> { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), scan_errmsg("unterminated quoted string"), scan_errposition())); } {id} { update_location(); token.type = AG_TOKEN_IDENTIFIER; token.value.s = yytext; token.location = get_location(); return token; } {bquote} { update_location(); strbuf_reset(&yyextra.literal_buf); BEGIN(bqid); } {bqchars} { strbuf_append_buf(&yyextra.literal_buf, yytext, yyleng); } {esbquote} { strbuf_append_char(&yyextra.literal_buf, '`'); } {bquote} { BEGIN(INITIAL); if (yyextra.literal_buf.length == 0) { ereport(ERROR, (errcode(ERRCODE_INVALID_NAME), scan_errmsg("zero-length quoted identifier"), scan_errposition())); } token.type = AG_TOKEN_IDENTIFIER; token.value.s = strbuf_get_str(&yyextra.literal_buf); token.location = get_location(); return token; } <> { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), scan_errmsg("unterminated quoted identifier"), scan_errposition())); } {param} { update_location(); token.type = AG_TOKEN_PARAMETER; token.value.s = yytext + 1; token.location = get_location(); return token; } {concat} { update_location(); token.type = AG_TOKEN_CONCAT; token.value.s = yytext; token.location = get_location(); return token; } {access_path} { update_location(); token.type = AG_TOKEN_ACCESS_PATH; token.value.s = yytext; token.location = get_location(); return token; } {any_exists} { update_location(); token.type = AG_TOKEN_ANY_EXISTS; token.value.s = yytext; token.location = get_location(); return token; } {left_contains} { update_location(); token.type = AG_TOKEN_LEFT_CONTAINS; token.value.s = yytext; token.location = get_location(); return token; } {right_contains} { update_location(); token.type = AG_TOKEN_RIGHT_CONTAINS; token.value.s = yytext; token.location = get_location(); return token; } {all_exists} { update_location(); token.type = AG_TOKEN_ALL_EXISTS; token.value.s = yytext; token.location = get_location(); return token; } {lt_gt} { update_location(); token.type = AG_TOKEN_LT_GT; token.value.s = yytext; token.location = get_location(); return token; } {lt_eq} { update_location(); token.type = AG_TOKEN_LT_EQ; token.value.s = yytext; token.location = get_location(); return token; } {gt_eq} { update_location(); token.type = AG_TOKEN_GT_EQ; token.value.s = yytext; token.location = get_location(); return token; } {dot_dot} { update_location(); token.type = AG_TOKEN_DOT_DOT; token.value.s = yytext; token.location = get_location(); return token; } {plus_eq} { update_location(); token.type = AG_TOKEN_PLUS_EQ; token.value.s = yytext; token.location = get_location(); return token; } {eq_tilde} { update_location(); token.type = AG_TOKEN_EQ_TILDE; token.value.s = yytext; token.location = get_location(); return token; } {typecast} { update_location(); token.type = AG_TOKEN_TYPECAST; token.value.s = yytext; token.location = get_location(); return token; } {self} { update_location(); token.type = AG_TOKEN_CHAR; token.value.c = yytext[0]; token.location = get_location(); return token; } {other} { update_location(); ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), scan_errmsg("unexpected character"), scan_errposition())); } <> { update_location(); token.type = AG_TOKEN_NULL; token.value.c = '\0'; token.location = get_location(); return token; } %% /* * Override the default memory management to make flex use palloc() instead of * malloc(). */ void *ag_yyalloc(yy_size_t size, yyscan_t yyscanner) { return palloc(size); } void *ag_yyrealloc(void *ptr, yy_size_t size, yyscan_t yyscanner) { // see realloc(3) if (ptr) { if (size == 0) { pfree(ptr); return NULL; } else { return repalloc(ptr, size); } } else { return palloc(size); } } void ag_yyfree(void *ptr, yyscan_t yyscanner) { if (ptr) pfree(ptr); } static void strbuf_init(strbuf *sb, int capacity) { sb->buffer = palloc(capacity); sb->capacity = capacity; sb->length = 0; } static void strbuf_cleanup(strbuf *sb) { if (sb->buffer) pfree(sb->buffer); } static void strbuf_append_buf(strbuf *sb, const char *b, const int len) { strbuf_ensure_capacity(sb, sb->length + len); memcpy(sb->buffer + sb->length, b, len); sb->length += len; } static void strbuf_append_char(strbuf *sb, const char c) { strbuf_ensure_capacity(sb, sb->length + 1); sb->buffer[sb->length] = c; sb->length += 1; } static void strbuf_append_codepoint(strbuf *sb, const pg_wchar c) { unsigned char buf[6]; unicode_to_utf8(c, buf); strbuf_append_buf(sb, (char *)buf, pg_utf_mblen(buf)); } /* * len cannot be greater than MaxAllocSize because ReadCommand() reads * a message and places the message body in StringInfo. */ static void strbuf_ensure_capacity(strbuf *sb, int len) { // consider additional 1 byte for the last '\0' character if (len < sb->capacity) return; do { sb->capacity *= 2; } while (sb->capacity <= len); sb->buffer = repalloc(sb->buffer, sb->capacity); } static const char *strbuf_get_str(strbuf *sb) { sb->buffer[sb->length] = '\0'; return sb->buffer; } static void strbuf_reset(strbuf *sb) { sb->length = 0; } static void integer_literal_to_token(const char *s, ag_token *token, ag_yy_extra *extra) { char *endptr; int i; errno = 0; i = strtoint(s, &endptr, 0); /* * This is only needed for invalid octal integer literals. (e.g. "08") * Other cases cannot happen because of digitseq and hexint rules. */ if (*endptr != '\0') { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), _scan_errmsg("invalid octal integer literal", extra), _scan_errposition(extra->last_loc, extra))); } // Treat it as a decimal if it is too large to be an "int" value. if (errno == ERANGE) { /* * Accessing s[0] and s[1] is safe because ERANGE is returned only if * there are 10 or more characters in s. In this case, the shortest * integer literals for decimal, hexadecimal, and octal integers are * "2147483648", "0x80000000", and "020000000000" respectively. */ if (s[0] == '0') { strbuf_reset(&extra->literal_buf); /* * No matter how many characters s has, if all digits in s are * zeros, strtoint() returns 0 without an error. * So, _numstr_to_decimal() assumes that there is at least one * non-zero digit in s. */ if (s[1] == 'X' || s[1] == 'x') hexadecimal_to_decimal(s + 2, &extra->literal_buf); else octal_to_decimal(s + 1, &extra->literal_buf); s = strbuf_get_str(&extra->literal_buf); } token->type = AG_TOKEN_DECIMAL; token->value.s = s; return; } token->type = AG_TOKEN_INTEGER; token->value.i = i; } /* * convert a string of a hexadecimal or an octal integer to a string of the * corresponding decimal integer */ static void _numstr_to_decimal(const char *numstr, const int base, strbuf *sb) { // constants for each base int ndigits_per_word; int nbits_per_digit; uint32 (*digit_value)(const char); /* * constants for the conversion * * "divisor" is 10^9. * * At most 3 divisions are needed to eliminate 1 word. * hex: 4294967295999999999 -> 4294967295 -> 4 -> 0 * oct: 1073741823999999999 -> 1073741823 -> 1 -> 0 */ const uint64 divisor = 1000000000; const int ndivisions = 3; int ndigits; int nwords; uint32 *words; const char *digitp; int word_i; int ndigits_word0; uint32 word; uint32 *remainders; int nremainders; int i; // set constants for each base switch (base) { case 16: /* * Hexadecimal * * Maximum value for each word * 0xFFFFFFFF = 4294967295 * Divisor * 0x3B9ACA00 = 1000000000 * Maximum remainder * 0x3B9AC9FF = 999999999 * * Maximum dividend * 0x3B9AC9FFFFFFFFFF = 4294967295999999999 * Quotient of the maximum dividend and the divisor * 0xFFFFFFFF = 4294967295 * Remainer of the above division * 0x3B9AC9FF = 999999999 */ ndigits_per_word = 8; nbits_per_digit = 4; digit_value = hexdigit_value; break; case 8: /* * Octal * * Maximum value for each word * 07777777777 = 1073741823 * Divisor * 07346545000 = 1000000000 * Maximum remainder * 07346544777 = 999999999 * * Maximum dividend * 073465447777777777777 = 1073741823999999999 * Quotient of the maximum dividend and the divisor * 07777777777 = 1073741823 * Remainer of the above division * 07346544777 = 999999999 */ ndigits_per_word = 10; nbits_per_digit = 3; digit_value = octdigit_value; break; default: Assert(!"invalid base"); return; } // skip leading zeros while (*numstr == '0') numstr++; // number of digits in "numstr" ndigits = strlen(numstr); Assert(ndigits > 0); // prepare "words" to store "numstr" in two's complement representation nwords = (ndigits + (ndigits_per_word - 1)) / ndigits_per_word; words = palloc(sizeof(*words) * nwords); digitp = numstr; word_i = 0; // number of digits for the first word ndigits_word0 = ndigits % ndigits_per_word; if (ndigits_word0 == 0) ndigits_word0 = ndigits_per_word; // fill the first word word = digit_value(*digitp++); for (i = 1; i < ndigits_word0; i++) { word <<= nbits_per_digit; word |= digit_value(*digitp++); } words[word_i++] = word; // fill the rest of "words" while (word_i < nwords) { word = digit_value(*digitp++); for (i = 1; i < ndigits_per_word; i++) { word <<= nbits_per_digit; word |= digit_value(*digitp++); } words[word_i++] = word; } // At most "ndivisions" divisions are needed to eliminate 1 word. remainders = palloc(sizeof(*remainders) * (ndivisions * nwords)); nremainders = 0; word_i = 0; // repeat dividing "words" by "divisor" until the quotient becomes 0 while (word_i < nwords) { uint64 r; r = 0; // divide "words" by "divisor" for (i = word_i; i < nwords; i++) { uint64 d; uint64 q; d = (uint64)words[i]; d |= r << (nbits_per_digit * ndigits_per_word); q = d / divisor; r = d % divisor; words[i] = (uint32)q; } // collect the remainder to build the result remainders[nremainders++] = (uint32)r; /* * Divisions over the first effective word is done * and "words" is getting closer to 0. */ if (words[word_i] == 0) word_i++; } // convert the collected remainders to a string, starting from the last one for (i = nremainders - 1; i >= 0; i--) { char buf[NDIGITS_PER_REMAINDER]; int buf_i; uint32 tmp; buf_i = NDIGITS_PER_REMAINDER; for (tmp = remainders[i]; tmp > 0; tmp /= 10) buf[--buf_i] = '0' + (char)(tmp % 10); // leading zeros for intermediate digits if (i < nremainders - 1) { while (buf_i > 0) buf[--buf_i] = '0'; } strbuf_append_buf(sb, &buf[buf_i], NDIGITS_PER_REMAINDER - buf_i); } pfree(remainders); pfree(words); } static uint32 hexdigit_value(const char c) { if (c >= '0' && c <= '9') return c - '0'; if (c >= 'A' && c <= 'F') return 0xA + (c - 'A'); Assert(c >= 'a' && c <= 'f'); return 0xA + (c - 'a'); } static uint32 octdigit_value(const char c) { Assert(c >= '0' && c <= '7'); return c - '0'; } static bool is_high_surrogate(const pg_wchar c) { return (c >= 0xD800 && c <= 0xDBFF); } static bool is_low_surrogate(const pg_wchar c) { return (c >= 0xDC00 && c <= 0xDFFF); } static int _scan_errmsg(const char *msg, const ag_yy_extra *extra) { const char *t = extra->scan_buf + extra->last_loc; if (t[0] == YY_END_OF_BUFFER_CHAR) return errmsg("%s at end of input", msg); else return errmsg("%s at or near \"%s\"", msg, t); } static int _scan_errposition(const int location, const ag_yy_extra *extra) { int pos; // no-op if location is unknown if (location < 0) return 0; // convert byte offset to number of characters pos = pg_mbstrlen_with_len(extra->scan_buf, location) + 1; return errposition(pos); } ag_scanner_t ag_scanner_create(const char *s) { Size len; char *buf; yyscan_t yyscanner; ag_yy_extra extra; int ret; // The last two YY_END_OF_BUFFER_CHAR are required by flex. len = strlen(s); buf = palloc(len + 2); memcpy(buf, s, len); buf[len] = YY_END_OF_BUFFER_CHAR; buf[len + 1] = YY_END_OF_BUFFER_CHAR; ret = ag_yylex_init(&yyscanner); if (ret) elog(ERROR, "ag_yylex_init() failed: %m"); strbuf_init(&extra.literal_buf, 1024); extra.high_surrogate = 0; extra.start_cond = INITIAL; extra.scan_buf = buf; extra.last_loc = 0; ag_yyset_extra(extra, yyscanner); ag_yy_scan_buffer(buf, len + 2, yyscanner); return yyscanner; } void ag_scanner_destroy(ag_scanner_t scanner) { ag_yy_extra extra; extra = ag_yyget_extra(scanner); strbuf_cleanup(&extra.literal_buf); ag_yylex_destroy(scanner); } int ag_scanner_errmsg(const char *msg, ag_scanner_t *scanner) { ag_yy_extra extra; extra = ag_yyget_extra(scanner); return _scan_errmsg(msg, &extra); } int ag_scanner_errposition(const int location, ag_scanner_t *scanner) { ag_yy_extra extra; extra = ag_yyget_extra(scanner); return _scan_errposition(location, &extra); } age-PG16-v1.5.0-rc0/src/backend/parser/cypher_analyze.c000066400000000000000000000705201454606241200224370ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" #include "parser/analyze.h" #include "parser/parse_coerce.h" #include "parser/parse_collate.h" #include "parser/parse_relation.h" #include "parser/parse_target.h" #include "utils/builtins.h" #include "catalog/ag_graph.h" #include "parser/cypher_analyze.h" #include "parser/cypher_clause.h" #include "parser/cypher_parser.h" #include "utils/ag_func.h" #include "utils/age_session_info.h" /* * extra_node is a global variable to this source to store, at the moment, the * explain stmt node passed up by the parser. The return value from the parser * contains an 'extra' value, hence the name. */ static Node *extra_node = NULL; /* * Takes a query node and builds an explain stmt query node. It then replaces * the passed query node with the new explain stmt query node. */ static void build_explain_query(Query *query, Node *explain_node); static post_parse_analyze_hook_type prev_post_parse_analyze_hook; static void post_parse_analyze(ParseState *pstate, Query *query, JumbleState *jstate); static bool convert_cypher_walker(Node *node, ParseState *pstate); static bool is_rte_cypher(RangeTblEntry *rte); static bool is_func_cypher(FuncExpr *funcexpr); static void convert_cypher_to_subquery(RangeTblEntry *rte, ParseState *pstate); static Name expr_get_const_name(Node *expr); static const char *expr_get_const_cstring(Node *expr, const char *source_str); static int get_query_location(const int location, const char *source_str); static Query *analyze_cypher(List *stmt, ParseState *parent_pstate, const char *query_str, int query_loc, char *graph_name, uint32 graph_oid, Param *params); static Query *analyze_cypher_and_coerce(List *stmt, RangeTblFunction *rtfunc, ParseState *parent_pstate, const char *query_str, int query_loc, char *graph_name, uint32 graph_oid, Param *params); void post_parse_analyze_init(void) { prev_post_parse_analyze_hook = post_parse_analyze_hook; post_parse_analyze_hook = post_parse_analyze; } void post_parse_analyze_fini(void) { post_parse_analyze_hook = prev_post_parse_analyze_hook; } static void post_parse_analyze(ParseState *pstate, Query *query, JumbleState *jstate) { if (prev_post_parse_analyze_hook) { prev_post_parse_analyze_hook(pstate, query, jstate); } /* * extra_node is set in the parsing stage to keep track of EXPLAIN. * So it needs to be set to NULL prior to any cypher parsing. */ extra_node = NULL; convert_cypher_walker((Node *)query, pstate); /* * If there is an extra_node returned, we need to check to see if * it is an EXPLAIN. */ if (extra_node != NULL) { /* process the EXPLAIN node */ if (nodeTag(extra_node) == T_ExplainStmt) { build_explain_query(query, extra_node); } /* reset extra_node */ pfree(extra_node); extra_node = NULL; } } // find cypher() calls in FROM clauses and convert them to SELECT subqueries static bool convert_cypher_walker(Node *node, ParseState *pstate) { if (!node) return false; if (IsA(node, RangeTblEntry)) { RangeTblEntry *rte = (RangeTblEntry *)node; switch (rte->rtekind) { case RTE_SUBQUERY: // traverse other RTE_SUBQUERYs return convert_cypher_walker((Node *)rte->subquery, pstate); case RTE_FUNCTION: if (is_rte_cypher(rte)) convert_cypher_to_subquery(rte, pstate); return false; default: return false; } } /* * This handles a cypher() call with other function calls in a ROWS FROM * expression. We can let the FuncExpr case below handle it but do this * here to throw a better error message. */ if (IsA(node, RangeTblFunction)) { RangeTblFunction *rtfunc = (RangeTblFunction *)node; FuncExpr *funcexpr = (FuncExpr *)rtfunc->funcexpr; /* * It is better to throw a kind error message here instead of the * internal error message that cypher() throws later when it is called. */ if (is_func_cypher(funcexpr)) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("cypher(...) in ROWS FROM is not supported"), parser_errposition(pstate, exprLocation((Node *)funcexpr)))); } /* * From PG - * SQLValueFunction - parameterless functions with special grammar * productions. * CoerceViaIO - represents a type coercion between two types whose textual * representations are compatible * Var - expression node representing a variable (ie, a table column) * OpExpr - expression node for an operator invocation * Const - constant value or expression node * BoolExpr - expression node for the basic Boolean operators AND, OR, NOT * * These are a special case that needs to be ignored. * */ if (IsA(funcexpr, SQLValueFunction) || IsA(funcexpr, CoerceViaIO) || IsA(funcexpr, Var) || IsA(funcexpr, OpExpr) || IsA(funcexpr, Const) || IsA(funcexpr, BoolExpr)) { return false; } return expression_tree_walker((Node *)funcexpr->args, convert_cypher_walker, pstate); } /* * This handles cypher() calls in expressions. Those in RTE_FUNCTIONs are * handled by either convert_cypher_to_subquery() or the RangeTblFunction * case above. */ if (IsA(node, FuncExpr)) { FuncExpr *funcexpr = (FuncExpr *)node; if (is_func_cypher(funcexpr)) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("cypher(...) in expressions is not supported"), errhint("Use subquery instead if possible."), parser_errposition(pstate, exprLocation(node)))); } return expression_tree_walker((Node *)funcexpr->args, convert_cypher_walker, pstate); } if (IsA(node, Query)) { int flags; bool result = false; Query *query = (Query *)node; /* * QTW_EXAMINE_RTES * We convert RTE_FUNCTION (cypher()) to RTE_SUBQUERY (SELECT) * in-place. * * QTW_IGNORE_RT_SUBQUERIES * After the conversion, we don't need to traverse the resulting * RTE_SUBQUERY. However, we need to traverse other RTE_SUBQUERYs. * This is done manually by the RTE_SUBQUERY case above. * * QTW_IGNORE_JOINALIASES * We are not interested in this. */ flags = QTW_EXAMINE_RTES_BEFORE | QTW_IGNORE_RT_SUBQUERIES | QTW_IGNORE_JOINALIASES; /* recurse on query */ result = query_tree_walker(query, convert_cypher_walker, pstate, flags); return result; } return expression_tree_walker(node, convert_cypher_walker, pstate); } /* * Takes a query node and builds an explain stmt query node. It then replaces * the passed query node with the new explain stmt query node. */ static void build_explain_query(Query *query, Node *explain_node) { ExplainStmt *estmt = NULL; Query *query_copy = NULL; Query *query_node = NULL; /* * Create a copy of the query node. This is purposely a shallow copy * because we are only moving the contents to another pointer. */ query_copy = (Query *) palloc(sizeof(Query)); memcpy(query_copy, query, sizeof(Query)); /* build our Explain node and store the query node copy in it */ estmt = makeNode(ExplainStmt); estmt->query = (Node *)query_copy; estmt->options = ((ExplainStmt *)explain_node)->options; /* build our replacement query node */ query_node = makeNode(Query); query_node->commandType = CMD_UTILITY; query_node->utilityStmt = (Node *)estmt; query_node->canSetTag = true; /* now replace the top query node with our replacement query node */ memcpy(query, query_node, sizeof(Query)); /* * We need to free and clear the global variable when done. But, not * the ExplainStmt options. Those will get freed by PG when the * query is deleted. */ ((ExplainStmt *)explain_node)->options = NULL; /* we need to free query_node as it is no longer needed */ pfree(query_node); } static bool is_rte_cypher(RangeTblEntry *rte) { RangeTblFunction *rtfunc; FuncExpr *funcexpr; /* * The planner expects RangeTblFunction nodes in rte->functions list. * We cannot replace one of them to a SELECT subquery. */ if (list_length(rte->functions) != 1) return false; /* * A plain function call or a ROWS FROM expression with one function call * reaches here. At this point, it is impossible to distinguish between the * two. However, it doesn't matter because they are identical in terms of * their meaning. */ rtfunc = linitial(rte->functions); funcexpr = (FuncExpr *)rtfunc->funcexpr; return is_func_cypher(funcexpr); } /* * Return true if the qualified name of the given function is * <"ag_catalog"."cypher">. Otherwise, return false. */ static bool is_func_cypher(FuncExpr *funcexpr) { /* * From PG - * SQLValueFunction - parameterless functions with special grammar * productions. * CoerceViaIO - represents a type coercion between two types whose textual * representations are compatible * Var - expression node representing a variable (ie, a table column) * OpExpr - expression node for an operator invocation * Const - constant value or expression node * BoolExpr - expression node for the basic Boolean operators AND, OR, NOT * * These are a special case that needs to be ignored. * */ if (IsA(funcexpr, SQLValueFunction) || IsA(funcexpr, CoerceViaIO) || IsA(funcexpr, Var) || IsA(funcexpr, OpExpr) || IsA(funcexpr, Const) || IsA(funcexpr, BoolExpr)) { return false; } return is_oid_ag_func(funcexpr->funcid, "cypher"); } // convert cypher() call to SELECT subquery in-place static void convert_cypher_to_subquery(RangeTblEntry *rte, ParseState *pstate) { RangeTblFunction *rtfunc = linitial(rte->functions); FuncExpr *funcexpr = (FuncExpr *)rtfunc->funcexpr; Node *arg1 = NULL; Node *arg2 = NULL; Node *arg3 = NULL; Name graph_name = NULL; char *graph_name_str = NULL; Oid graph_oid = InvalidOid; const char *query_str = NULL; int query_loc = -1; Param *params = NULL; errpos_ecb_state ecb_state = {{0}}; List *stmt = NULL; Query *query = NULL; /* * We cannot apply this feature directly to SELECT subquery because the * planner does not support it. Adding a "row_number() OVER ()" expression * to the subquery as a result target might be a workaround but we throw an * error for now. */ if (rte->funcordinality) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("WITH ORDINALITY is not supported"), parser_errposition(pstate, exprLocation((Node *)funcexpr)))); } /* verify that we have 2 input parameters as it is possible to get 1 or 0 */ if (funcexpr->args == NULL || list_length(funcexpr->args) < 2) { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("cypher function requires a minimum of 2 arguments"), parser_errposition(pstate, -1))); } /* get our first 2 arguments */ arg1 = linitial(funcexpr->args); arg2 = lsecond(funcexpr->args); Assert(exprType(arg1) == NAMEOID); Assert(exprType(arg2) == CSTRINGOID); graph_name = expr_get_const_name(arg1); /* * Since cypher() function is nothing but an interface to get a Cypher * query, it must take a string constant as an argument so that the query * can be parsed and analyzed at this point to create a Query tree of it. * * Also, only dollar-quoted string constants are allowed because of the * following reasons. * * * If other kinds of string constants are used, the actual values of them * may differ from what they are shown. This will confuse users. * * In the case above, the error position may not be accurate. */ query_str = expr_get_const_cstring(arg2, pstate->p_sourcetext); /* * Validate appropriate cypher function usage - * * Session info OVERRIDES ANY INPUT PASSED and if any is passed, it will * cause the cypher function to error out. * * If this is using session info, both of the first 2 input parameters need * to be NULL, in addition to the session info being set up. Furthermore, * the input parameters passed in by session info need to both be non-NULL. * * If this is not using session info, both input parameters need to be * non-NULL. * */ if (is_session_info_prepared()) { /* check to see if either input parameter is non-NULL*/ if (graph_name != NULL || query_str != NULL) { Node *arg = (graph_name == NULL) ? arg1 : arg2; /* * Make sure to clean up session info because the ereport will * cause the function to exit. */ reset_session_info(); ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("session info requires cypher(NULL, NULL) to be passed"), parser_errposition(pstate, exprLocation(arg)))); } /* get our input parameters from session info */ else { graph_name_str = get_session_info_graph_name(); query_str = get_session_info_cypher_statement(); /* check to see if either are NULL */ if (graph_name_str == NULL || query_str == NULL) { /* * Make sure to clean up session info because the ereport will * cause the function to exit. */ reset_session_info(); ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("both session info parameters need to be non-NULL"), parser_errposition(pstate, -1))); } } } /* otherwise, we get the parameters from the passed function input */ else { /* get the graph name string from the passed parameters */ if (!graph_name) { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("a name constant is expected"), parser_errposition(pstate, exprLocation(arg1)))); } else { graph_name_str = NameStr(*graph_name); } /* get the query string from the passed parameters */ if (!query_str) { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("a dollar-quoted string constant is expected"), parser_errposition(pstate, exprLocation(arg2)))); } } /* * The session info is only valid for one cypher call. Now that we are done * with it, if it was used, we need to reset it to free the memory used. * Additionally, the query location is dependent on how we got the query * string, so set the location accordingly. */ if (is_session_info_prepared()) { reset_session_info(); query_loc = 0; } else { /* this call will crash if we use session info */ query_loc = get_query_location(((Const *)arg2)->location, pstate->p_sourcetext); } /* validate the graph exists */ graph_oid = get_graph_oid(graph_name_str); if (!OidIsValid(graph_oid)) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_SCHEMA), errmsg("graph \"%s\" does not exist", graph_name_str), parser_errposition(pstate, exprLocation(arg1)))); } /* * Check to see if the cypher function had a third parameter passed to it, * if so make sure Postgres parsed the second argument to a Param node. */ if (list_length(funcexpr->args) == 3) { arg3 = lthird(funcexpr->args); if (!IsA(arg3, Param)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("third argument of cypher function must be a parameter"), parser_errposition(pstate, exprLocation(arg3)))); } params = (Param *)arg3; } else { params = NULL; } /* * install error context callback to adjust an error position for * parse_cypher() since locations that parse_cypher() stores are 0 based */ setup_errpos_ecb(&ecb_state, pstate, query_loc); stmt = parse_cypher(query_str); /* * Extract any extra node passed up and assign it to the global variable * 'extra_node' - if it wasn't already set. It will be at the end of the * stmt list and needs to be removed for normal processing, regardless. * It is done this way to allow utility commands to be processed against the * AGE query tree. Currently, only EXPLAIN is passed here. But, it need not * just be EXPLAIN - so long as it is carefully documented and carefully * done. */ if (extra_node == NULL) { extra_node = llast(stmt); stmt = list_delete_ptr(stmt, extra_node); } else { Node *temp = llast(stmt); ereport(WARNING, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("too many extra_nodes passed from parser"))); stmt = list_delete_ptr(stmt, temp); } cancel_errpos_ecb(&ecb_state); Assert(pstate->p_expr_kind == EXPR_KIND_NONE); pstate->p_expr_kind = EXPR_KIND_FROM_SUBSELECT; // transformRangeFunction() always sets p_lateral_active to true. // FYI, rte is RTE_FUNCTION and is being converted to RTE_SUBQUERY here. pstate->p_lateral_active = true; /* * Cypher queries that end with CREATE clause do not need to have the * coercion logic applied to them because we are forcing the column * definition list to be a particular way in this case. */ if (is_ag_node(llast(stmt), cypher_create) || is_ag_node(llast(stmt), cypher_set) || is_ag_node(llast(stmt), cypher_delete) || is_ag_node(llast(stmt), cypher_merge)) { // column definition list must be ... AS relname(colname agtype) ... if (!(rtfunc->funccolcount == 1 && linitial_oid(rtfunc->funccoltypes) == AGTYPEOID)) { ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("column definition list for CREATE clause must contain a single agtype attribute"), errhint("... cypher($$ ... CREATE ... $$) AS t(c agtype) ..."), parser_errposition(pstate, exprLocation(rtfunc->funcexpr)))); } query = analyze_cypher(stmt, pstate, query_str, query_loc, graph_name_str, graph_oid, params); } else { query = analyze_cypher_and_coerce(stmt, rtfunc, pstate, query_str, query_loc, graph_name_str, graph_oid, params); } pstate->p_lateral_active = false; pstate->p_expr_kind = EXPR_KIND_NONE; // rte->functions and rte->funcordinality are kept for debugging. // rte->alias, rte->eref, and rte->lateral need to be the same. // rte->inh is always false for both RTE_FUNCTION and RTE_SUBQUERY. // rte->inFromCl is always true for RTE_FUNCTION. rte->rtekind = RTE_SUBQUERY; rte->subquery = query; } static Name expr_get_const_name(Node *expr) { Const *con; if (!IsA(expr, Const)) return NULL; con = (Const *)expr; if (con->constisnull) return NULL; return DatumGetName(con->constvalue); } static const char *expr_get_const_cstring(Node *expr, const char *source_str) { Const *con; const char *p; if (!IsA(expr, Const)) return NULL; con = (Const *)expr; if (con->constisnull) return NULL; Assert(con->location > -1); p = source_str + con->location; if (*p != '$') return NULL; return DatumGetCString(con->constvalue); } static int get_query_location(const int location, const char *source_str) { const char *p; Assert(location > -1); p = source_str + location; Assert(*p == '$'); return strchr(p + 1, '$') - source_str + 1; } static Query *analyze_cypher(List *stmt, ParseState *parent_pstate, const char *query_str, int query_loc, char *graph_name, uint32 graph_oid, Param *params) { cypher_clause *clause; ListCell *lc; cypher_parsestate parent_cpstate; cypher_parsestate *cpstate; ParseState *pstate; errpos_ecb_state ecb_state; Query *query; /* * Since the first clause in stmt is the innermost subquery, the order of * the clauses is inverted. */ clause = NULL; foreach (lc, stmt) { cypher_clause *next; next = palloc(sizeof(*next)); next->next = NULL; next->self = lfirst(lc); next->prev = clause; if (clause != NULL) clause->next = next; clause = next; } /* * convert ParseState into cypher_parsestate temporarily to pass it to * make_cypher_parsestate() */ parent_cpstate.pstate = *parent_pstate; parent_cpstate.graph_name = NULL; parent_cpstate.params = NULL; cpstate = make_cypher_parsestate(&parent_cpstate); pstate = (ParseState *)cpstate; /* we don't want functions that go up the pstate parent chain to access the * original SQL query pstate. */ pstate->parentParseState = NULL; /* * override p_sourcetext with query_str to make parser_errposition() work * correctly with errpos_ecb() */ pstate->p_sourcetext = query_str; cpstate->graph_name = graph_name; cpstate->graph_oid = graph_oid; cpstate->params = params; cpstate->default_alias_num = 0; cpstate->entities = NIL; /* * install error context callback to adjust an error position since * locations in stmt are 0 based */ setup_errpos_ecb(&ecb_state, parent_pstate, query_loc); query = transform_cypher_clause(cpstate, clause); cancel_errpos_ecb(&ecb_state); free_cypher_parsestate(cpstate); return query; } /* * Since some target entries of subquery may be referenced for sorting (ORDER * BY), we cannot apply the coercion directly to the expressions of the target * entries. Therefore, we do the coercion by doing SELECT over subquery. */ static Query *analyze_cypher_and_coerce(List *stmt, RangeTblFunction *rtfunc, ParseState *parent_pstate, const char *query_str, int query_loc, char *graph_name, uint32 graph_oid, Param *params) { ParseState *pstate; Query *query; const bool lateral = false; Query *subquery; ParseNamespaceItem *pnsi; int rtindex; ListCell *lt; ListCell *lc1; ListCell *lc2; ListCell *lc3; int attr_count = 0; pstate = make_parsestate(parent_pstate); query = makeNode(Query); query->commandType = CMD_SELECT; /* * Below is similar to transform_prev_cypher_clause(). */ Assert(pstate->p_expr_kind == EXPR_KIND_NONE); pstate->p_expr_kind = EXPR_KIND_FROM_SUBSELECT; pstate->p_lateral_active = lateral; subquery = analyze_cypher(stmt, pstate, query_str, query_loc, graph_name, graph_oid, (Param *)params); pstate->p_lateral_active = false; pstate->p_expr_kind = EXPR_KIND_NONE; // ALIAS Syntax makes `RESJUNK`. So, It must be skipping. foreach(lt, subquery->targetList) { TargetEntry *te = lfirst(lt); if (!te->resjunk) { attr_count++; } } // check the number of attributes first if (attr_count != rtfunc->funccolcount) { ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("return row and column definition list do not match"), parser_errposition(pstate, exprLocation(rtfunc->funcexpr)))); } pnsi = addRangeTableEntryForSubquery(pstate, subquery, makeAlias("_", NIL), lateral, true); rtindex = list_length(pstate->p_rtable); // rte is the only RangeTblEntry in pstate if (rtindex !=1 ) { ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("invalid value for rtindex"))); } addNSItemToQuery(pstate, pnsi, true, true, true); query->targetList = expandNSItemAttrs(pstate, pnsi, 0, true, -1); markTargetListOrigins(pstate, query->targetList); // do the type coercion for each target entry lc1 = list_head(rtfunc->funccolnames); lc2 = list_head(rtfunc->funccoltypes); lc3 = list_head(rtfunc->funccoltypmods); foreach (lt, query->targetList) { TargetEntry *te = lfirst(lt); Node *expr = (Node *)te->expr; Oid current_type; Oid target_type; Assert(!te->resjunk); current_type = exprType(expr); target_type = lfirst_oid(lc2); if (current_type != target_type) { int32 target_typmod = lfirst_int(lc3); Node *new_expr; /* * The coercion context of this coercion is COERCION_EXPLICIT * because the target type is explicitly mentioned in the column * definition list and we need to do this by looking up all * possible coercion. */ new_expr = coerce_to_target_type(pstate, expr, current_type, target_type, target_typmod, COERCION_EXPLICIT, COERCE_EXPLICIT_CAST, -1); if (!new_expr) { char *colname = strVal(lfirst(lc1)); ereport(ERROR, (errcode(ERRCODE_CANNOT_COERCE), errmsg("cannot cast type %s to %s for column \"%s\"", format_type_be(current_type), format_type_be(target_type), colname), parser_errposition(pstate, exprLocation(rtfunc->funcexpr)))); } te->expr = (Expr *)new_expr; } lc1 = lnext(rtfunc->funccolnames, lc1); lc2 = lnext(rtfunc->funccoltypes, lc2); lc3 = lnext(rtfunc->funccoltypmods, lc3); } query->rtable = pstate->p_rtable; query->rteperminfos = pstate->p_rteperminfos; query->jointree = makeFromExpr(pstate->p_joinlist, NULL); assign_query_collations(pstate, query); free_parsestate(pstate); return query; } age-PG16-v1.5.0-rc0/src/backend/parser/cypher_clause.c000066400000000000000000007464271454606241200222700ustar00rootroot00000000000000/* * For PostgreSQL Database Management System: * (formerly known as Postgres, then as Postgres95) * * Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group * * Portions Copyright (c) 1994, The Regents of the University of California * * Permission to use, copy, modify, and distribute this software and its documentation for any purpose, * without fee, and without a written agreement is hereby granted, provided that the above copyright notice * and this paragraph and the following two paragraphs appear in all copies. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA * HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ #include "postgres.h" #include "access/heapam.h" #include "miscadmin.h" #include "nodes/nodeFuncs.h" #include "optimizer/optimizer.h" #include "parser/parse_clause.h" #include "parser/parse_coerce.h" #include "parser/parse_collate.h" #include "parser/parse_expr.h" #include "parser/parse_func.h" #include "parser/parse_oper.h" #include "parser/parse_target.h" #include "parser/parsetree.h" #include "parser/parse_relation.h" #include "rewrite/rewriteHandler.h" #include "catalog/ag_graph.h" #include "catalog/ag_label.h" #include "commands/label_commands.h" #include "parser/cypher_clause.h" #include "parser/cypher_expr.h" #include "parser/cypher_item.h" #include "parser/cypher_parse_agg.h" #include "parser/cypher_transform_entity.h" #include "utils/ag_cache.h" #include "utils/ag_func.h" #include "utils/ag_guc.h" /* * Variable string names for makeTargetEntry. As they are going to be variable * names that will be hidden from the user, we need to do our best to make sure * they won't be picked by mistake. Additionally, their form needs to be easily * determined as ours. For now, prefix them as follows - * * #define AGE_VARNAME_SOMETHING AGE_DEFAULT_VARNAME_PREFIX"something" * * We should probably make an automated variable generator, like for aliases, * for this. * * Also, keep these here as nothing outside of this file needs to know these. */ #define AGE_VARNAME_CREATE_CLAUSE AGE_DEFAULT_VARNAME_PREFIX"create_clause" #define AGE_VARNAME_CREATE_NULL_VALUE AGE_DEFAULT_VARNAME_PREFIX"create_null_value" #define AGE_VARNAME_DELETE_CLAUSE AGE_DEFAULT_VARNAME_PREFIX"delete_clause" #define AGE_VARNAME_MERGE_CLAUSE AGE_DEFAULT_VARNAME_PREFIX"merge_clause" #define AGE_VARNAME_ID AGE_DEFAULT_VARNAME_PREFIX"id" #define AGE_VARNAME_SET_CLAUSE AGE_DEFAULT_VARNAME_PREFIX"set_clause" /* * In the transformation stage, we need to track * where a variable came from. When moving between * clauses, Postgres parsestate and Query data structures * are insufficient for some of the information we * need. */ /* * Rules to determine if a node must be included: * * 1. the node is in a path variable * 2. the node is a variable * 3. the node contains filter properties */ #define INCLUDE_NODE_IN_JOIN_TREE(path, node) \ (path->var_name || node->name || node->props) typedef Query *(*transform_method)(cypher_parsestate *cpstate, cypher_clause *clause); // projection static Query *transform_cypher_return(cypher_parsestate *cpstate, cypher_clause *clause); static List *transform_cypher_order_by(cypher_parsestate *cpstate, List *sort_items, List **target_list, ParseExprKind expr_kind); static TargetEntry *find_target_list_entry(cypher_parsestate *cpstate, Node *node, List **target_list, ParseExprKind expr_kind); static Node *transform_cypher_limit(cypher_parsestate *cpstate, Node *node, ParseExprKind expr_kind, const char *construct_name); static Query *transform_cypher_with(cypher_parsestate *cpstate, cypher_clause *clause); static Query *transform_cypher_clause_with_where(cypher_parsestate *cpstate, transform_method transform, cypher_clause *clause, Node *where); // match clause static Query *transform_cypher_match(cypher_parsestate *cpstate, cypher_clause *clause); static Query *transform_cypher_match_pattern(cypher_parsestate *cpstate, cypher_clause *clause); static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, cypher_path *path); static void transform_match_pattern(cypher_parsestate *cpstate, Query *query, List *pattern, Node *where); static List *transform_match_path(cypher_parsestate *cpstate, Query *query, cypher_path *path); static Expr *transform_cypher_edge(cypher_parsestate *cpstate, cypher_relationship *rel, List **target_list, bool valid_label); static Expr *transform_cypher_node(cypher_parsestate *cpstate, cypher_node *node, List **target_list, bool output_node, bool valid_label); static bool match_check_valid_label(cypher_match *match, cypher_parsestate *cpstate); static Node *make_vertex_expr(cypher_parsestate *cpstate, ParseNamespaceItem *pnsi); static Node *make_edge_expr(cypher_parsestate *cpstate, ParseNamespaceItem *pnsi); static Node *make_qual(cypher_parsestate *cpstate, transform_entity *entity, char *name); static TargetEntry * transform_match_create_path_variable(cypher_parsestate *cpstate, cypher_path *path, List *entities); static List *make_path_join_quals(cypher_parsestate *cpstate, List *entities); static List *make_directed_edge_join_conditions( cypher_parsestate *cpstate, transform_entity *prev_entity, transform_entity *next_entity, Node *prev_qual, Node *next_qual, char *prev_node_label, char *next_node_label); static List *join_to_entity(cypher_parsestate *cpstate, transform_entity *entity, Node *qual, enum transform_entity_join_side side); static List *make_join_condition_for_edge(cypher_parsestate *cpstate, transform_entity *prev_edge, transform_entity *prev_node, transform_entity *entity, transform_entity *next_node, transform_entity *next_edge); static List *make_edge_quals(cypher_parsestate *cpstate, transform_entity *edge, enum transform_entity_join_side side); static A_Expr *filter_vertices_on_label_id(cypher_parsestate *cpstate, Node *id_field, char *label); static Node *transform_map_to_ind(cypher_parsestate *cpstate, transform_entity *entity, cypher_map *map); static List *transform_map_to_ind_recursive(cypher_parsestate *cpstate, transform_entity *entity, cypher_map *map, List *parent_fields); static Node *create_property_constraints(cypher_parsestate *cpstate, transform_entity *entity, Node *property_constraints, Node *prop_expr); static TargetEntry *findTarget(List *targetList, char *resname); static transform_entity *transform_VLE_edge_entity(cypher_parsestate *cpstate, cypher_relationship *rel, Query *query); // create clause static Query *transform_cypher_create(cypher_parsestate *cpstate, cypher_clause *clause); static List *transform_cypher_create_pattern(cypher_parsestate *cpstate, Query *query, List *pattern); static cypher_create_path * transform_cypher_create_path(cypher_parsestate *cpstate, List **target_list, cypher_path *cp); static cypher_target_node * transform_create_cypher_node(cypher_parsestate *cpstate, List **target_list, cypher_node *node); static cypher_target_node * transform_create_cypher_new_node(cypher_parsestate *cpstate, List **target_list, cypher_node *node); static cypher_target_node *transform_create_cypher_existing_node( cypher_parsestate *cpstate, List **target_list, bool declared_in_current_clause, cypher_node *node); static cypher_target_node * transform_create_cypher_edge(cypher_parsestate *cpstate, List **target_list, cypher_relationship *edge); static Expr *cypher_create_properties(cypher_parsestate *cpstate, cypher_target_node *rel, Relation label_relation, Node *props, enum transform_entity_type type); static Expr *add_volatile_wrapper(Expr *node); static bool variable_exists(cypher_parsestate *cpstate, char *name); static void add_volatile_wrapper_to_target_entry(List *target_list, int resno); static int get_target_entry_resno(List *target_list, char *name); static void handle_prev_clause(cypher_parsestate *cpstate, Query *query, cypher_clause *clause, bool first_rte); static TargetEntry *placeholder_target_entry(cypher_parsestate *cpstate, char *name); static Query *transform_cypher_sub_pattern(cypher_parsestate *cpstate, cypher_clause *clause); // set and remove clause static Query *transform_cypher_set(cypher_parsestate *cpstate, cypher_clause *clause); static cypher_update_information *transform_cypher_set_item_list(cypher_parsestate *cpstate, List *set_item_list, Query *query); static cypher_update_information *transform_cypher_remove_item_list(cypher_parsestate *cpstate, List *remove_item_list, Query *query); // delete static Query *transform_cypher_delete(cypher_parsestate *cpstate, cypher_clause *clause); static List *transform_cypher_delete_item_list(cypher_parsestate *cpstate, List *delete_item_list, Query *query); //set operators static Query *transform_cypher_union(cypher_parsestate *cpstate, cypher_clause *clause); static Node * transform_cypher_union_tree(cypher_parsestate *cpstate, cypher_clause *clause, bool isTopLevel, List **targetlist); Query *cypher_parse_sub_analyze_union(cypher_clause *clause, cypher_parsestate *cpstate, CommonTableExpr *parentCTE, bool locked_from_parent, bool resolve_unknowns); static void get_res_cols(ParseState *pstate, ParseNamespaceItem *l_pnsi, ParseNamespaceItem *r_pnsi, List **res_colnames, List **res_colvars); // unwind static Query *transform_cypher_unwind(cypher_parsestate *cpstate, cypher_clause *clause); // merge static Query *transform_cypher_merge(cypher_parsestate *cpstate, cypher_clause *clause); static cypher_create_path * transform_merge_make_lateral_join(cypher_parsestate *cpstate, Query *query, cypher_clause *clause, cypher_clause *isolated_merge_clause); static cypher_create_path * transform_cypher_merge_path(cypher_parsestate *cpstate, List **target_list, cypher_path *path); static cypher_target_node * transform_merge_cypher_edge(cypher_parsestate *cpstate, List **target_list, cypher_relationship *edge); static cypher_target_node * transform_merge_cypher_node(cypher_parsestate *cpstate, List **target_list, cypher_node *node); static Node *transform_clause_for_join(cypher_parsestate *cpstate, cypher_clause *clause, RangeTblEntry **rte, ParseNamespaceItem **nsitem, Alias* alias); static cypher_clause *convert_merge_to_match(cypher_merge *merge); static void transform_cypher_merge_mark_tuple_position(cypher_parsestate *cpstate, List *target_list, cypher_create_path *path); static cypher_target_node *get_referenced_variable(ParseState *pstate, Node *node, List *transformed_path); //call...[yield] static Query *transform_cypher_call_stmt(cypher_parsestate *cpstate, cypher_clause *clause); static Query *transform_cypher_call_subquery(cypher_parsestate *cpstate, cypher_clause *clause); // transform #define PREV_CYPHER_CLAUSE_ALIAS AGE_DEFAULT_ALIAS_PREFIX"previous_cypher_clause" #define CYPHER_OPT_RIGHT_ALIAS AGE_DEFAULT_ALIAS_PREFIX"cypher_optional_right" #define transform_prev_cypher_clause(cpstate, prev_clause, add_rte_to_query) \ transform_cypher_clause_as_subquery(cpstate, transform_cypher_clause, \ prev_clause, NULL, add_rte_to_query) static ParseNamespaceItem *transform_cypher_clause_as_subquery(cypher_parsestate *cpstate, transform_method transform, cypher_clause *clause, Alias *alias, bool add_rte_to_query); static Query *analyze_cypher_clause(transform_method transform, cypher_clause *clause, cypher_parsestate *parent_cpstate); static List *transform_group_clause(cypher_parsestate *cpstate, List *grouplist, List **groupingSets, List **targetlist, List *sortClause, ParseExprKind exprKind); static Node *flatten_grouping_sets(Node *expr, bool toplevel, bool *hasGroupingSets); static Index transform_group_clause_expr(List **flatresult, Bitmapset *seen_local, cypher_parsestate *cpstate, Node *gexpr, List **targetlist, List *sortClause, ParseExprKind exprKind, bool toplevel); static List *add_target_to_group_list(cypher_parsestate *cpstate, TargetEntry *tle, List *grouplist, List *targetlist, int location); static void advance_transform_entities_to_next_clause(List *entities); static ParseNamespaceItem *get_namespace_item(ParseState *pstate, RangeTblEntry *rte); static List *make_target_list_from_join(ParseState *pstate, RangeTblEntry *rte); static FuncExpr *make_clause_func_expr(char *function_name, Node *clause_information); static void markRelsAsNulledBy(ParseState *pstate, Node *n, int jindex); /* for VLE support */ static ParseNamespaceItem *transform_RangeFunction(cypher_parsestate *cpstate, RangeFunction *r); static Node *transform_VLE_Function(cypher_parsestate *cpstate, Node *n, RangeTblEntry **top_rte, int *top_rti, List **namespace); static ParseNamespaceItem *append_VLE_Func_to_FromClause(cypher_parsestate *cpstate, Node *n); static void setNamespaceLateralState(List *namespace, bool lateral_only, bool lateral_ok); static bool isa_special_VLE_case(cypher_path *path); static ParseNamespaceItem *find_pnsi(cypher_parsestate *cpstate, char *varname); /* * transform a cypher_clause */ Query *transform_cypher_clause(cypher_parsestate *cpstate, cypher_clause *clause) { Node *self = clause->self; Query *result; // examine the type of clause and call the transform logic for it if (is_ag_node(self, cypher_return)) { cypher_return *n = (cypher_return *) self; if (n->op == SETOP_NONE) { result = transform_cypher_return(cpstate, clause); } else if (n->op == SETOP_UNION) { result = transform_cypher_union(cpstate, clause); } else { ereport(ERROR, (errmsg_internal("unexpected Node for cypher_return"))); } } else if (is_ag_node(self, cypher_with)) { result = transform_cypher_with(cpstate, clause); } else if (is_ag_node(self, cypher_match)) { result = transform_cypher_match(cpstate, clause); } else if (is_ag_node(self, cypher_create)) { result = transform_cypher_create(cpstate, clause); } else if (is_ag_node(self, cypher_set)) { result = transform_cypher_set(cpstate, clause); } else if (is_ag_node(self, cypher_delete)) { result = transform_cypher_delete(cpstate, clause); } else if (is_ag_node(self, cypher_merge)) { result = transform_cypher_merge(cpstate, clause); } else if (is_ag_node(self, cypher_sub_pattern)) { result = transform_cypher_sub_pattern(cpstate, clause); } else if (is_ag_node(self, cypher_unwind)) { result = transform_cypher_unwind(cpstate, clause); } else if (is_ag_node(self, cypher_call)) { result = transform_cypher_call_stmt(cpstate, clause); } else { ereport(ERROR, (errmsg_internal("unexpected Node for cypher_clause"))); } result->querySource = QSRC_ORIGINAL; result->canSetTag = true; return result; } /* * Transform the UNION operator/clause. Creates a cypher_union * node and the necessary information needed in the execution * phase */ static cypher_clause *make_cypher_clause(List *stmt) { cypher_clause *clause; ListCell *lc; /* * Since the first clause in stmt is the innermost subquery, the order of * the clauses is inverted. */ clause = NULL; foreach (lc, stmt) { cypher_clause *next; next = palloc(sizeof(*next)); next->next = NULL; next->self = lfirst(lc); next->prev = clause; if (clause != NULL) { clause->next = next; } clause = next; } return clause; } /* * transform_cypher_union - * transforms a union tree, derived from postgresql's * transformSetOperationStmt. A lot of the general logic is similar, * with adjustments made for AGE. * * A union tree is just a return, but with UNION structure to it. * We must transform each leaf SELECT and build up a top-level Query * that contains the leaf SELECTs as subqueries in its rangetable. * The tree of unions is converted into the setOperations field of * the top-level Query. */ static Query *transform_cypher_union(cypher_parsestate *cpstate, cypher_clause *clause) { ParseState *pstate = (ParseState *)cpstate; Query *qry = makeNode(Query); int leftmostRTI; Query *leftmostQuery; SetOperationStmt *cypher_union_statement; Node *skip = NULL; /* equivalent to postgres limitOffset */ Node *limit = NULL; /* equivalent to postgres limitCount */ List *order_by = NIL; Node *node; cypher_return *self = (cypher_return *)clause->self; ListCell *left_tlist, *lct, *lcm, *lcc; List *targetvars, *targetnames, *sv_namespace; int sv_rtable_length; int tllen; ParseNamespaceItem *nsitem; ParseNamespaceColumn *sortnscolumns; int sortcolindex; qry->commandType = CMD_SELECT; /* * Union is a node that should never have a previous node because * of where it is used in the parse logic. The query parts around it * are children located in larg or rarg. Something went wrong if the * previous clause field is not null. */ if (clause->prev) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("Union is a parent node, there are no previous"), parser_errposition(&cpstate->pstate, 0))); } order_by = self->order_by; skip = self->skip; limit = self->limit; self->order_by = NIL; self->skip = NULL; self->limit = NULL; /* * Recursively transform the components of the tree. */ cypher_union_statement = (SetOperationStmt *) transform_cypher_union_tree(cpstate, clause, true, NULL); Assert(cypher_union_statement); qry->setOperations = (Node *) cypher_union_statement; /* * Re-find leftmost return (now it's a sub-query in rangetable) */ node = cypher_union_statement->larg; while (node && IsA(node, SetOperationStmt)) { node = ((SetOperationStmt *) node)->larg; } Assert(node && IsA(node, RangeTblRef)); leftmostRTI = ((RangeTblRef *) node)->rtindex; leftmostQuery = rt_fetch(leftmostRTI, pstate->p_rtable)->subquery; Assert(leftmostQuery != NULL); /* * Generate dummy targetlist for outer query using column names of * leftmost return and common datatypes/collations of topmost set * operation. Also make lists of the dummy vars and their names for use * in parsing ORDER BY. * * Note: we use leftmostRTI as the varno of the dummy variables. It * shouldn't matter too much which RT index they have, as long as they * have one that corresponds to a real RT entry; else funny things may * happen when the tree is mashed by rule rewriting. */ qry->targetList = NIL; targetvars = NIL; targetnames = NIL; sortnscolumns = (ParseNamespaceColumn *) palloc0(list_length(cypher_union_statement->colTypes) * sizeof(ParseNamespaceColumn)); sortcolindex = 0; forfour(lct, cypher_union_statement->colTypes, lcm, cypher_union_statement->colTypmods, lcc, cypher_union_statement->colCollations, left_tlist, leftmostQuery->targetList) { Oid colType = lfirst_oid(lct); int32 colTypmod = lfirst_int(lcm); Oid colCollation = lfirst_oid(lcc); TargetEntry *lefttle = (TargetEntry *) lfirst(left_tlist); char *colName; TargetEntry *tle; Var *var; Assert(!lefttle->resjunk); colName = pstrdup(lefttle->resname); var = makeVar(leftmostRTI, lefttle->resno, colType, colTypmod, colCollation, 0); var->location = exprLocation((Node *) lefttle->expr); tle = makeTargetEntry((Expr *) var, (AttrNumber) pstate->p_next_resno++, colName, false); qry->targetList = lappend(qry->targetList, tle); targetvars = lappend(targetvars, var); targetnames = lappend(targetnames, makeString(colName)); sortnscolumns[sortcolindex].p_varno = leftmostRTI; sortnscolumns[sortcolindex].p_varattno = lefttle->resno; sortnscolumns[sortcolindex].p_vartype = colType; sortnscolumns[sortcolindex].p_vartypmod = colTypmod; sortnscolumns[sortcolindex].p_varcollid = colCollation; sortnscolumns[sortcolindex].p_varnosyn = leftmostRTI; sortnscolumns[sortcolindex].p_varattnosyn = lefttle->resno; sortcolindex++; } /* * As a first step towards supporting sort clauses that are expressions * using the output columns, generate a namespace entry that makes the * output columns visible. A Join RTE node is handy for this, since we * can easily control the Vars generated upon matches. * * Note: we don't yet do anything useful with such cases, but at least * "ORDER BY upper(foo)" will draw the right error message rather than * "foo not found". */ sv_rtable_length = list_length(pstate->p_rtable); nsitem = addRangeTableEntryForJoin(pstate, targetnames, sortnscolumns, JOIN_INNER, 0, targetvars, NIL, NIL, NULL, NULL, false); sv_namespace = pstate->p_namespace; pstate->p_namespace = NIL; /* add jrte to column namespace only */ addNSItemToQuery(pstate, nsitem, false, false, true); tllen = list_length(qry->targetList); qry->sortClause = transformSortClause(pstate, order_by, &qry->targetList, EXPR_KIND_ORDER_BY, false /* allow SQL92 rules */ ); /* restore namespace, remove jrte from rtable */ pstate->p_namespace = sv_namespace; pstate->p_rtable = list_truncate(pstate->p_rtable, sv_rtable_length); if (tllen != list_length(qry->targetList)) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("invalid UNION ORDER BY clause"), errdetail("Only result column names can be used, not expressions or functions."), parser_errposition(pstate, exprLocation(list_nth(qry->targetList, tllen))))); } qry->limitOffset = transform_cypher_limit(cpstate, skip, EXPR_KIND_OFFSET, "OFFSET"); qry->limitCount = transform_cypher_limit(cpstate, limit, EXPR_KIND_LIMIT, "LIMIT"); qry->rtable = pstate->p_rtable; qry->rteperminfos = pstate->p_rteperminfos; qry->jointree = makeFromExpr(pstate->p_joinlist, NULL); qry->hasAggs = pstate->p_hasAggs; assign_query_collations(pstate, qry); /* this must be done after collations, for reliable comparison of exprs */ if (pstate->p_hasAggs || qry->groupClause || qry->groupingSets || qry->havingQual) { parse_check_aggregates(pstate, qry); } return qry; } /* * transform_cypher_union_tree * Recursively transform leaves and internal nodes of a set-op tree, * derived from postgresql's transformSetOperationTree. A lot of * the general logic is similar, with adjustments made for AGE. * * In addition to returning the transformed node, if targetlist isn't NULL * then we return a list of its non-resjunk TargetEntry nodes. For a leaf * set-op node these are the actual targetlist entries; otherwise they are * dummy entries created to carry the type, typmod, collation, and location * (for error messages) of each output column of the set-op node. This info * is needed only during the internal recursion of this function, so outside * callers pass NULL for targetlist. Note: the reason for passing the * actual targetlist entries of a leaf node is so that upper levels can * replace UNKNOWN Consts with properly-coerced constants. */ static Node * transform_cypher_union_tree(cypher_parsestate *cpstate, cypher_clause *clause, bool isTopLevel, List **targetlist) { bool isLeaf; ParseState *pstate = (ParseState *)cpstate; cypher_return *cmp; ParseNamespaceItem *pnsi; /* Guard against stack overflow due to overly complex set-expressions */ check_stack_depth(); if (IsA(clause, List)) { clause = make_cypher_clause((List *)clause); } if (is_ag_node(clause->self, cypher_return)) { cmp = (cypher_return *) clause->self; } else { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("Cypher found an unsupported node"), parser_errposition(pstate, 0))); } if (cmp->op == SETOP_NONE) { Assert(cmp->larg == NULL && cmp->rarg == NULL); isLeaf = true; } else if (cmp->op == SETOP_UNION) { Assert(cmp->larg != NULL && cmp->rarg != NULL); if (cmp->order_by || cmp->limit || cmp->skip) { isLeaf = true; } else { isLeaf = false; } } else { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("Cypher found an unsupported SETOP"), parser_errposition(pstate, 0))); } if (isLeaf) { /*process leaf return */ Query *returnQuery; char returnName[32]; RangeTblEntry *rte PG_USED_FOR_ASSERTS_ONLY; RangeTblRef *rtr; ListCell *tl; /* * Transform SelectStmt into a Query. * * This works the same as RETURN transformation normally would, except * that we prevent resolving unknown-type outputs as TEXT. This does * not change the subquery's semantics since if the column type * matters semantically, it would have been resolved to something else * anyway. Doing this lets us resolve such outputs using * select_common_type(), below. * * Note: previously transformed sub-queries don't affect the parsing * of this sub-query, because they are not in the toplevel pstate's * namespace list. */ /* * Convert the List * that the grammar gave us to a cypher_clause. * cypher_analyze doesn't do this because the cypher_union clause * is hiding it. */ returnQuery = cypher_parse_sub_analyze_union((cypher_clause *) clause, cpstate, NULL, false, false); /* * Check for bogus references to Vars on the current query level (but * upper-level references are okay). Normally this can't happen * because the namespace will be empty, but it could happen if we are * inside a rule. */ if (pstate->p_namespace) { if (contain_vars_of_level((Node *) returnQuery, 1)) { ereport(ERROR, (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), errmsg("UNION member statement cannot refer to other relations of same query level"), parser_errposition(pstate, locate_var_of_level((Node *) returnQuery, 1)))); } } /* * Extract a list of the non-junk TLEs for upper-level processing. */ if (targetlist) { *targetlist = NIL; foreach(tl, returnQuery->targetList) { TargetEntry *tle = (TargetEntry *) lfirst(tl); if (!tle->resjunk) { *targetlist = lappend(*targetlist, tle); } } } /* * Make the leaf query be a subquery in the top-level rangetable. */ snprintf(returnName, sizeof(returnName), "*SELECT* %d ", list_length(pstate->p_rtable) + 1); pnsi = addRangeTableEntryForSubquery(pstate, returnQuery, makeAlias(returnName, NIL), false, false); rte = pnsi->p_rte; rtr = makeNode(RangeTblRef); /* assume new rte is at end */ rtr->rtindex = list_length(pstate->p_rtable); Assert(rte == rt_fetch(rtr->rtindex, pstate->p_rtable)); return (Node *) rtr; } else /*is not a leaf */ { /* Process an internal node (set operation node) */ SetOperationStmt *op = makeNode(SetOperationStmt); List *ltargetlist; List *rtargetlist; ListCell *ltl; ListCell *rtl; cypher_return *self = (cypher_return *) clause->self; const char *context; context = "UNION"; op->op = self->op; op->all = self->all_or_distinct; /* * Recursively transform the left child node. */ op->larg = transform_cypher_union_tree(cpstate, (cypher_clause *) self->larg, false, <argetlist); /* * If we find ourselves processing a recursive CTE here something * went horribly wrong. That is an SQL construct with no parallel in * cypher. */ if (isTopLevel && pstate->p_parent_cte && pstate->p_parent_cte->cterecursive) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("Cypher does not support recursive CTEs"), parser_errposition(pstate, 0))); } /* * Recursively transform the right child node. */ op->rarg = transform_cypher_union_tree(cpstate, (cypher_clause *) self->rarg, false, &rtargetlist); /* * Verify that the two children have the same number of non-junk * columns, and determine the types of the merged output columns. */ if (list_length(ltargetlist) != list_length(rtargetlist)) { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("each %s query must have the same number of columns", context), parser_errposition(pstate, exprLocation((Node *) rtargetlist)))); } if (targetlist) { *targetlist = NIL; } op->colTypes = NIL; op->colTypmods = NIL; op->colCollations = NIL; op->groupClauses = NIL; forboth(ltl, ltargetlist, rtl, rtargetlist) { TargetEntry *ltle = (TargetEntry *) lfirst(ltl); TargetEntry *rtle = (TargetEntry *) lfirst(rtl); Node *lcolnode = (Node *) ltle->expr; Node *rcolnode = (Node *) rtle->expr; Oid lcoltype = exprType(lcolnode); Oid rcoltype = exprType(rcolnode); int32 lcoltypmod = exprTypmod(lcolnode); int32 rcoltypmod = exprTypmod(rcolnode); Node *bestexpr; int bestlocation; Oid rescoltype; int32 rescoltypmod; Oid rescolcoll; /* select common type, same as CASE et al */ rescoltype = select_common_type(pstate, list_make2(lcolnode, rcolnode), context, &bestexpr); bestlocation = exprLocation(bestexpr); /* if same type and same typmod, use typmod; else default */ if (lcoltype == rcoltype && lcoltypmod == rcoltypmod) { rescoltypmod = lcoltypmod; } else { rescoltypmod = -1; } /* * Verify the coercions are actually possible. If not, we'd fail * later anyway, but we want to fail now while we have sufficient * context to produce an error cursor position. * * For all non-UNKNOWN-type cases, we verify coercibility but we * don't modify the child's expression, for fear of changing the * child query's semantics. * * If a child expression is an UNKNOWN-type Const or Param, we * want to replace it with the coerced expression. This can only * happen when the child is a leaf set-op node. It's safe to * replace the expression because if the child query's semantics * depended on the type of this output column, it'd have already * coerced the UNKNOWN to something else. We want to do this * because (a) we want to verify that a Const is valid for the * target type, or resolve the actual type of an UNKNOWN Param, * and (b) we want to avoid unnecessary discrepancies between the * output type of the child query and the resolved target type. * Such a discrepancy would disable optimization in the planner. * * If it's some other UNKNOWN-type node, eg a Var, we do nothing * (knowing that coerce_to_common_type would fail). The planner * is sometimes able to fold an UNKNOWN Var to a constant before * it has to coerce the type, so failing now would just break * cases that might work. */ if (lcoltype != UNKNOWNOID) { lcolnode = coerce_to_common_type(pstate, lcolnode, rescoltype, context); } else if (IsA(lcolnode, Const) || IsA(lcolnode, Param)) { lcolnode = coerce_to_common_type(pstate, lcolnode, rescoltype, context); ltle->expr = (Expr *) lcolnode; } if (rcoltype != UNKNOWNOID) { rcolnode = coerce_to_common_type(pstate, rcolnode, rescoltype, context); } else if (IsA(rcolnode, Const) || IsA(rcolnode, Param)) { rcolnode = coerce_to_common_type(pstate, rcolnode, rescoltype, context); rtle->expr = (Expr *) rcolnode; } /* * Select common collation. A common collation is required for * all set operators except UNION ALL; see SQL:2008 7.13 Syntax Rule 15c. (If we fail to identify a common * collation for a UNION ALL column, the curCollations element * will be set to InvalidOid, which may result in a runtime error * if something at a higher query level wants to use the column's * collation.) */ rescolcoll = select_common_collation(pstate, list_make2(lcolnode, rcolnode), (op->op == SETOP_UNION && op->all)); /* emit results */ op->colTypes = lappend_oid(op->colTypes, rescoltype); op->colTypmods = lappend_int(op->colTypmods, rescoltypmod); op->colCollations = lappend_oid(op->colCollations, rescolcoll); /* * For all cases except UNION ALL, identify the grouping operators * (and, if available, sorting operators) that will be used to * eliminate duplicates. */ if (op->op != SETOP_UNION || !op->all) { SortGroupClause *grpcl = makeNode(SortGroupClause); Oid sortop; Oid eqop; bool hashable = false; ParseCallbackState pcbstate; setup_parser_errposition_callback(&pcbstate, pstate, bestlocation); /* * determine the eqop and optional sortop * * NOTE: for UNION, we set hashable to false and pass a NULL to * isHashable in get_sort_group_operators to prevent a logic error * where UNION fails to exclude duplicate results. * */ get_sort_group_operators(rescoltype, false, true, false, &sortop, &eqop, NULL, NULL); cancel_parser_errposition_callback(&pcbstate); /* we don't have a tlist yet, so can't assign sortgrouprefs */ grpcl->tleSortGroupRef = 0; grpcl->eqop = eqop; grpcl->sortop = sortop; grpcl->nulls_first = false; /* OK with or without sortop */ grpcl->hashable = hashable; op->groupClauses = lappend(op->groupClauses, grpcl); } /* * Construct a dummy tlist entry to return. We use a SetToDefault * node for the expression, since it carries exactly the fields * needed, but any other expression node type would do as well. */ if (targetlist) { SetToDefault *rescolnode = makeNode(SetToDefault); TargetEntry *restle; rescolnode->typeId = rescoltype; rescolnode->typeMod = rescoltypmod; rescolnode->collation = rescolcoll; rescolnode->location = bestlocation; restle = makeTargetEntry((Expr *) rescolnode, 0, /* no need to set resno */ NULL, false); *targetlist = lappend(*targetlist, restle); } } return (Node *)op; }//end else (is not leaf) } /* * Function that takes a cypher call and returns the yielded result * This function also catches some cases that should fail that could not * be picked up by the grammar. transform_cypher_call_subquery handles the * call transformation itself. */ static Query *transform_cypher_call_stmt(cypher_parsestate *cpstate, cypher_clause *clause) { ParseState *pstate = (ParseState *)cpstate; cypher_call *self = (cypher_call *)clause->self; if (!clause->prev && !clause->next) /* CALL [YIELD] -- the most simple call */ { if (self->where) /* Error check for WHERE clause after YIELD without RETURN */ { Assert(self->yield_items); ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("Cannot use standalone CALL with WHERE"), errhint("Instead use `CALL ... WITH * WHERE ... RETURN *`"), parser_errposition(pstate, exprLocation((Node *) self->where)))); } return transform_cypher_call_subquery(cpstate, clause); } else /* subqueries */ { if (!self->yield_items) { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("Procedure call inside a query does not support naming results implicitly"), errhint("Name explicitly using `YIELD` instead"), parser_errposition(pstate, exprLocation((Node *) self)))); } Assert(self->yield_items); if (!clause->next) { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("Query cannot conclude with CALL"), errhint("Must be RETURN or an update clause"), parser_errposition(pstate, exprLocation((Node *) self)))); } return transform_cypher_clause_with_where(cpstate, transform_cypher_call_subquery, clause, self->where); } return NULL; } /* * Helper routine for transform_cypher_call_stmt. This routine transforms the * call statement and handles the YIELD clause. */ static Query *transform_cypher_call_subquery(cypher_parsestate *cpstate, cypher_clause *clause) { ParseState *pstate = (ParseState *)cpstate; ParseState *p_child_parse_state = make_parsestate(NULL); cypher_call *self = (cypher_call *)clause->self; Query *query; char *colName; FuncExpr *node = NULL; TargetEntry *tle; Expr *where_qual = NULL; query = makeNode(Query); query->commandType = CMD_SELECT; if (clause->prev) { /* we want to retain all previous range table entries */ handle_prev_clause(cpstate, query, clause->prev, false); } /* transform the funccall and store it in a funcexpr node */ node = castNode( FuncExpr, transform_cypher_expr(cpstate, (Node *) self->funccall, EXPR_KIND_FROM_FUNCTION)); /* retrieve the column name from funccall */ colName = strVal(linitial(self->funccall->funcname)); /* make a targetentry from the funcexpr node */ tle = makeTargetEntry((Expr *) node, (AttrNumber) p_child_parse_state->p_next_resno++, colName, false); if (self->yield_items) /* if there are yield items, we need to check them */ { List *yield_targetList; ListCell *lc; yield_targetList = list_make1(tle); foreach (lc, self->yield_items) { ResTarget *target = NULL; ColumnRef *var = NULL; TargetEntry *yielded_tle = NULL; target = (ResTarget *) lfirst(lc); if (!IsA(target->val, ColumnRef)) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("YIELD item must be ColumnRef"), parser_errposition(&cpstate->pstate, 0))); } var = (ColumnRef *) target->val; /* check if the restarget variable exists in the yield_targetList*/ if (findTarget(yield_targetList, strVal(linitial(var->fields))) != NULL) { /* check if an alias exists. if one does, we check if it is already declared in the targetlist */ if (target->name) { if (findTarget(query->targetList, target->name) != NULL) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("duplicate variable \"%s\"", target->name), parser_errposition((ParseState *) cpstate, exprLocation((Node *) target)))); } else { yielded_tle = makeTargetEntry((Expr *) node, (AttrNumber) pstate->p_next_resno++, target->name, false); query->targetList = lappend(query->targetList, yielded_tle); } } else/* if there is no alias, we check if the variable is already declared */ { if (findTarget(query->targetList, strVal(linitial(var->fields))) != NULL) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("duplicate variable \"%s\"", colName), parser_errposition((ParseState *) cpstate, exprLocation((Node *) target)))); } else { yielded_tle = makeTargetEntry((Expr *) node, (AttrNumber) pstate->p_next_resno++, colName, false); query->targetList = lappend(query->targetList, yielded_tle); } } } else { /* if the yield_item is not found and we return an error */ ereport(ERROR, (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), errmsg("Unknown CALL output"), parser_errposition(pstate, exprLocation((Node *) target)))); } } } else /* if there are no yield items this must be a solo call */ { tle = makeTargetEntry((Expr *) node, (AttrNumber) pstate->p_next_resno++, colName, false); query->targetList = list_make1(tle); } markTargetListOrigins(pstate, query->targetList); query->rtable = cpstate->pstate.p_rtable; query->rteperminfos = cpstate->pstate.p_rteperminfos; query->jointree = makeFromExpr(cpstate->pstate.p_joinlist, (Node *)where_qual); query->hasAggs = pstate->p_hasAggs; assign_query_collations(pstate, query); /* this must be done after collations, for reliable comparison of exprs */ if (pstate->p_hasAggs || query->groupClause || query->groupingSets || query->havingQual) { parse_check_aggregates(pstate, query); } free_parsestate(p_child_parse_state); return query; } /* * Transform the Delete clause. Creates a _cypher_delete_clause * and passes the necessary information that is needed in the * execution phase. */ static Query *transform_cypher_delete(cypher_parsestate *cpstate, cypher_clause *clause) { ParseState *pstate = (ParseState *)cpstate; cypher_delete *self = (cypher_delete *)clause->self; Query *query; TargetEntry *tle; FuncExpr *func_expr; cypher_delete_information *delete_data; delete_data = make_ag_node(cypher_delete_information); query = makeNode(Query); query->commandType = CMD_SELECT; query->targetList = NIL; if (!clause->prev) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("DELETE cannot be the first clause in a Cypher query"), parser_errposition(pstate, self->location))); } else { handle_prev_clause(cpstate, query, clause->prev, true); } delete_data->delete_items = transform_cypher_delete_item_list(cpstate, self->exprs, query); delete_data->graph_name = cpstate->graph_name; delete_data->graph_oid = cpstate->graph_oid; delete_data->detach = self->detach; if (!clause->next) { delete_data->flags |= CYPHER_CLAUSE_FLAG_TERMINAL; } func_expr = make_clause_func_expr(DELETE_CLAUSE_FUNCTION_NAME, (Node *)delete_data); // Create the target entry tle = makeTargetEntry((Expr *)func_expr, pstate->p_next_resno++, AGE_VARNAME_DELETE_CLAUSE, false); query->targetList = lappend(query->targetList, tle); query->rtable = pstate->p_rtable; query->rteperminfos = pstate->p_rteperminfos; query->jointree = makeFromExpr(pstate->p_joinlist, NULL); return query; } /* * transform_cypher_unwind * It contains logic to convert the form of an array into a row. Here, we * are simply calling `age_unnest` function, and the actual transformation * is handled by `age_unnest` function. */ static Query *transform_cypher_unwind(cypher_parsestate *cpstate, cypher_clause *clause) { ParseState *pstate = (ParseState *) cpstate; cypher_unwind *self = (cypher_unwind *) clause->self; int target_syntax_loc; Query *query; Node *expr; FuncCall *unwind; ParseExprKind old_expr_kind; Node *funcexpr; TargetEntry *te; ParseNamespaceItem *pnsi; query = makeNode(Query); query->commandType = CMD_SELECT; if (clause->prev) { int rtindex; pnsi = transform_prev_cypher_clause(cpstate, clause->prev, true); rtindex = list_length(pstate->p_rtable); // rte is the first RangeTblEntry in pstate if (rtindex != 1) { ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("invalid value for rtindex"))); } query->targetList = expandNSItemAttrs(pstate, pnsi, 0, true, -1); } target_syntax_loc = exprLocation((const Node *) self->target); if (findTarget(query->targetList, self->target->name) != NULL) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("duplicate variable \"%s\"", self->target->name), parser_errposition((ParseState *) cpstate, target_syntax_loc))); } expr = transform_cypher_expr(cpstate, self->target->val, EXPR_KIND_SELECT_TARGET); unwind = makeFuncCall(list_make1(makeString("age_unnest")), NIL, COERCE_SQL_SYNTAX, -1); old_expr_kind = pstate->p_expr_kind; pstate->p_expr_kind = EXPR_KIND_SELECT_TARGET; funcexpr = ParseFuncOrColumn(pstate, unwind->funcname, list_make1(expr), pstate->p_last_srf, unwind, false, target_syntax_loc); pstate->p_expr_kind = old_expr_kind; te = makeTargetEntry((Expr *) funcexpr, (AttrNumber) pstate->p_next_resno++, self->target->name, false); query->targetList = lappend(query->targetList, te); query->rtable = pstate->p_rtable; query->rteperminfos = pstate->p_rteperminfos; query->jointree = makeFromExpr(pstate->p_joinlist, NULL); query->hasTargetSRFs = pstate->p_hasTargetSRFs; assign_query_collations(pstate, query); return query; } /* * Iterate through the list of items to delete and extract the variable name. * Then find the resno that the variable name belongs to. */ static List *transform_cypher_delete_item_list(cypher_parsestate *cpstate, List *delete_item_list, Query *query) { ParseState *pstate = (ParseState *)cpstate; List *items = NIL; ListCell *lc; foreach(lc, delete_item_list) { Node *expr = lfirst(lc); ColumnRef *col; String *val; Integer *pos; int resno; cypher_delete_item *item = make_ag_node(cypher_delete_item); if (!IsA(expr, ColumnRef)) { ereport(ERROR, (errmsg_internal("unexpected Node for cypher_clause"))); } col = (ColumnRef *)expr; if (list_length(col->fields) != 1) { ereport(ERROR, (errmsg_internal("unexpected Node for cypher_clause"))); } val = linitial(col->fields); if (!IsA(val, String)) { ereport(ERROR, (errmsg_internal("unexpected Node for cypher_clause"))); } resno = get_target_entry_resno(query->targetList, val->sval); if (resno == -1) { ereport(ERROR, (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), errmsg("undefined reference to variable %s in DELETE clause", val->sval), parser_errposition(pstate, col->location))); } add_volatile_wrapper_to_target_entry(query->targetList, resno); pos = makeInteger(resno); item->var_name = val->sval; item->entity_position = pos; items = lappend(items, item); } return items; } static Query *transform_cypher_set(cypher_parsestate *cpstate, cypher_clause *clause) { ParseState *pstate = (ParseState *)cpstate; cypher_set *self = (cypher_set *)clause->self; Query *query; cypher_update_information *set_items_target_list; TargetEntry *tle; FuncExpr *func_expr; char *clause_name; query = makeNode(Query); query->commandType = CMD_SELECT; query->targetList = NIL; if (self->is_remove == true) { clause_name = UPDATE_CLAUSE_REMOVE; } else { clause_name = UPDATE_CLAUSE_SET; } if (!clause->prev) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("%s cannot be the first clause in a Cypher query", clause_name), parser_errposition(pstate, self->location))); } else { handle_prev_clause(cpstate, query, clause->prev, true); } if (self->is_remove == true) { set_items_target_list = transform_cypher_remove_item_list(cpstate, self->items, query); } else { set_items_target_list = transform_cypher_set_item_list(cpstate, self->items, query); } set_items_target_list->clause_name = clause_name; set_items_target_list->graph_name = cpstate->graph_name; if (!clause->next) { set_items_target_list->flags |= CYPHER_CLAUSE_FLAG_TERMINAL; } func_expr = make_clause_func_expr(SET_CLAUSE_FUNCTION_NAME, (Node *)set_items_target_list); // Create the target entry tle = makeTargetEntry((Expr *)func_expr, pstate->p_next_resno++, AGE_VARNAME_SET_CLAUSE, false); query->targetList = lappend(query->targetList, tle); query->rtable = pstate->p_rtable; query->rteperminfos = pstate->p_rteperminfos; query->jointree = makeFromExpr(pstate->p_joinlist, NULL); return query; } cypher_update_information *transform_cypher_remove_item_list( cypher_parsestate *cpstate, List *remove_item_list, Query *query) { ParseState *pstate = (ParseState *)cpstate; ListCell *li; cypher_update_information *info = make_ag_node(cypher_update_information); info->set_items = NIL; info->flags = 0; foreach (li, remove_item_list) { cypher_set_item *set_item = lfirst(li); cypher_update_item *item; ColumnRef *ref; A_Indirection *ind; char *variable_name, *property_name; String *property_node, *variable_node; item = make_ag_node(cypher_update_item); if (!is_ag_node(lfirst(li), cypher_set_item)) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("unexpected node in cypher update list"))); } if (set_item->is_add) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("REMOVE clause does not support adding properties from maps"), parser_errposition(pstate, set_item->location))); } set_item->is_add = false; item->remove_item = true; if (!IsA(set_item->prop, A_Indirection)) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("REMOVE clause must be in the format: REMOVE variable.property_name"), parser_errposition(pstate, set_item->location))); } ind = (A_Indirection *)set_item->prop; // extract variable name if (!IsA(ind->arg, ColumnRef)) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("REMOVE clause must be in the format: REMOVE variable.property_name"), parser_errposition(pstate, set_item->location))); } ref = (ColumnRef *)ind->arg; variable_node = linitial(ref->fields); variable_name = variable_node->sval; item->var_name = variable_name; item->entity_position = get_target_entry_resno(query->targetList, variable_name); if (item->entity_position == -1) { ereport(ERROR, (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), errmsg("undefined reference to variable %s in REMOVE clause", variable_name), parser_errposition(pstate, set_item->location))); } add_volatile_wrapper_to_target_entry(query->targetList, item->entity_position); // extract property name if (list_length(ind->indirection) != 1) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("REMOVE clause must be in the format: REMOVE variable.property_name"), parser_errposition(pstate, set_item->location))); } property_node = linitial(ind->indirection); if (!IsA(property_node, String)) { ereport(ERROR, (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), errmsg("REMOVE clause expects a property name"), parser_errposition(pstate, set_item->location))); } property_name = property_node->sval; item->prop_name = property_name; info->set_items = lappend(info->set_items, item); } return info; } cypher_update_information *transform_cypher_set_item_list( cypher_parsestate *cpstate, List *set_item_list, Query *query) { ParseState *pstate = (ParseState *)cpstate; ListCell *li; cypher_update_information *info = make_ag_node(cypher_update_information); info->set_items = NIL; info->flags = 0; foreach (li, set_item_list) { cypher_set_item *set_item = lfirst(li); TargetEntry *target_item; cypher_update_item *item; ColumnRef *ref; A_Indirection *ind; char *variable_name, *property_name; String *property_node, *variable_node; int is_entire_prop_update = 0; // true if a map is assigned to variable // LHS of set_item must be a variable or an indirection. if (IsA(set_item->prop, ColumnRef)) { /* * A variable can only be assigned a map, a function call that * evaluates to a map, or a variable. * * In case of a function call, whether it actually evaluates to * map is checked in the execution stage. */ if (!is_ag_node(set_item->expr, cypher_map) && !IsA(set_item->expr, FuncCall) && !IsA(set_item->expr, ColumnRef)) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("SET clause expects a map"), parser_errposition(pstate, set_item->location))); } is_entire_prop_update = 1; /* * In case of a variable, it is wrapped as an argument to * the 'properties' function. */ if (IsA(set_item->expr, ColumnRef)) { List *qualified_name, *args; qualified_name = list_make2(makeString("ag_catalog"), makeString("age_properties")); args = list_make1(set_item->expr); set_item->expr = (Node *)makeFuncCall(qualified_name, args, COERCE_SQL_SYNTAX, -1); } } else if (!IsA(set_item->prop, A_Indirection)) { ereport(ERROR, (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), errmsg("SET clause expects a variable name"), parser_errposition(pstate, set_item->location))); } item = make_ag_node(cypher_update_item); if (!is_ag_node(lfirst(li), cypher_set_item)) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("unexpected node in cypher update list"))); } item->remove_item = false; // set variable, is_add and extract property name if (is_entire_prop_update) { ref = (ColumnRef *)set_item->prop; item->is_add = set_item->is_add; item->prop_name = NULL; } else { ind = (A_Indirection *)set_item->prop; ref = (ColumnRef *)ind->arg; if (set_item->is_add) { ereport( ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg( "SET clause does not yet support incrementing a specific property"), parser_errposition(pstate, set_item->location))); } set_item->is_add = false; // extract property name if (list_length(ind->indirection) != 1) { ereport( ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("SET clause doesn't not support updating maps or lists in a property"), parser_errposition(pstate, set_item->location))); } property_node = linitial(ind->indirection); if (!IsA(property_node, String)) { ereport(ERROR, (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), errmsg("SET clause expects a property name"), parser_errposition(pstate, set_item->location))); } property_name = property_node->sval; item->prop_name = property_name; } // extract variable name variable_node = linitial(ref->fields); if (!IsA(variable_node, String)) { ereport(ERROR, (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), errmsg("SET clause expects a variable name"), parser_errposition(pstate, set_item->location))); } variable_name = variable_node->sval; item->var_name = variable_name; item->entity_position = get_target_entry_resno(query->targetList, variable_name); if (item->entity_position == -1) { ereport(ERROR, (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), errmsg("undefined reference to variable %s in SET clause", variable_name), parser_errposition(pstate, set_item->location))); } add_volatile_wrapper_to_target_entry(query->targetList, item->entity_position); // set keep_null property if (is_ag_node(set_item->expr, cypher_map)) { ((cypher_map*)set_item->expr)->keep_null = set_item->is_add; } // create target entry for the new property value item->prop_position = (AttrNumber)pstate->p_next_resno; target_item = transform_cypher_item(cpstate, set_item->expr, NULL, EXPR_KIND_SELECT_TARGET, NULL, false); target_item->expr = add_volatile_wrapper(target_item->expr); query->targetList = lappend(query->targetList, target_item); info->set_items = lappend(info->set_items, item); } return info; } /* from PG's static helper function */ static Node *flatten_grouping_sets(Node *expr, bool toplevel, bool *hasGroupingSets) { /* just in case of pathological input */ check_stack_depth(); if (expr == (Node *) NIL) { return (Node *) NIL; } switch (expr->type) { case T_RowExpr: { RowExpr *r = (RowExpr *) expr; if (r->row_format == COERCE_IMPLICIT_CAST) { return flatten_grouping_sets((Node *) r->args, false, NULL); } break; } case T_GroupingSet: ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("flattening of GroupingSet is not implemented"))); break; case T_List: { List *result = NIL; ListCell *l; foreach(l, (List *) expr) { Node *n = NULL; n = flatten_grouping_sets(lfirst(l), toplevel, hasGroupingSets); if (n != (Node *) NIL) { if (IsA(n, List)) { result = list_concat(result, (List *) n); } else { result = lappend(result, n); } } } return (Node *) result; } default: break; } return expr; } /* from PG's addTargetToGroupList */ static List *add_target_to_group_list(cypher_parsestate *cpstate, TargetEntry *tle, List *grouplist, List *targetlist, int location) { ParseState *pstate = &cpstate->pstate; Oid restype = exprType((Node *) tle->expr); /* if tlist item is an UNKNOWN literal, change it to TEXT */ if (restype == UNKNOWNOID) { tle->expr = (Expr *) coerce_type(pstate, (Node *) tle->expr, restype, TEXTOID, -1, COERCION_IMPLICIT, COERCE_IMPLICIT_CAST, -1); restype = TEXTOID; } /* avoid making duplicate grouplist entries */ if (!targetIsInSortList(tle, InvalidOid, grouplist)) { SortGroupClause *grpcl = makeNode(SortGroupClause); Oid sortop; Oid eqop; bool hashable; ParseCallbackState pcbstate; setup_parser_errposition_callback(&pcbstate, pstate, location); /* determine the eqop and optional sortop */ get_sort_group_operators(restype, false, true, false, &sortop, &eqop, NULL, &hashable); cancel_parser_errposition_callback(&pcbstate); grpcl->tleSortGroupRef = assignSortGroupRef(tle, targetlist); grpcl->eqop = eqop; grpcl->sortop = sortop; grpcl->nulls_first = false; /* OK with or without sortop */ grpcl->hashable = hashable; grouplist = lappend(grouplist, grpcl); } return grouplist; } /* from PG's transformGroupClauseExpr */ static Index transform_group_clause_expr(List **flatresult, Bitmapset *seen_local, cypher_parsestate *cpstate, Node *gexpr, List **targetlist, List *sortClause, ParseExprKind exprKind, bool toplevel) { TargetEntry *tle = NULL; bool found = false; tle = find_target_list_entry(cpstate, gexpr, targetlist, exprKind); if (tle->ressortgroupref > 0) { ListCell *sl; /* * Eliminate duplicates (GROUP BY x, x) but only at local level. * (Duplicates in grouping sets can affect the number of returned * rows, so can't be dropped indiscriminately.) * * Since we don't care about anything except the sortgroupref, we can * use a bitmapset rather than scanning lists. */ if (bms_is_member(tle->ressortgroupref, seen_local)) { return 0; } /* * If we're already in the flat clause list, we don't need to consider * adding ourselves again. */ found = targetIsInSortList(tle, InvalidOid, *flatresult); if (found) { return tle->ressortgroupref; } /* * If the GROUP BY tlist entry also appears in ORDER BY, copy operator * info from the (first) matching ORDER BY item. This means that if * you write something like "GROUP BY foo ORDER BY foo USING <<<", the * GROUP BY operation silently takes on the equality semantics implied * by the ORDER BY. There are two reasons to do this: it improves the * odds that we can implement both GROUP BY and ORDER BY with a single * sort step, and it allows the user to choose the equality semantics * used by GROUP BY, should she be working with a datatype that has * more than one equality operator. * * If we're in a grouping set, though, we force our requested ordering * to be NULLS LAST, because if we have any hope of using a sorted agg * for the job, we're going to be tacking on generated NULL values * after the corresponding groups. If the user demands nulls first, * another sort step is going to be inevitable, but that's the * planner's problem. */ foreach(sl, sortClause) { SortGroupClause *sc = (SortGroupClause *) lfirst(sl); if (sc->tleSortGroupRef == tle->ressortgroupref) { SortGroupClause *grpc = copyObject(sc); if (!toplevel) { grpc->nulls_first = false; } *flatresult = lappend(*flatresult, grpc); found = true; break; } } } /* * If no match in ORDER BY, just add it to the result using default * sort/group semantics. */ if (!found) { *flatresult = add_target_to_group_list(cpstate, tle, *flatresult, *targetlist, exprLocation(gexpr)); } /* _something_ must have assigned us a sortgroupref by now... */ return tle->ressortgroupref; } /* from PG's transformGroupClause */ static List * transform_group_clause(cypher_parsestate *cpstate, List *grouplist, List **groupingSets, List **targetlist, List *sortClause, ParseExprKind exprKind) { List *result = NIL; List *flat_grouplist; List *gsets = NIL; ListCell *gl; bool hasGroupingSets = false; Bitmapset *seen_local = NULL; /* * Recursively flatten implicit RowExprs. (Technically this is only needed * for GROUP BY, per the syntax rules for grouping sets, but we do it * anyway.) */ flat_grouplist = (List *) flatten_grouping_sets((Node *) grouplist, true, &hasGroupingSets); foreach(gl, flat_grouplist) { Node *gexpr = (Node *) lfirst(gl); if (IsA(gexpr, GroupingSet)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("GroupingSet is not implemented"))); break; } else { Index ref = transform_group_clause_expr(&result, seen_local, cpstate, gexpr, targetlist, sortClause, exprKind, true); if (ref > 0) { seen_local = bms_add_member(seen_local, ref); if (hasGroupingSets) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("GroupingSet is not implemented"))); } } } } /* parser should prevent this */ Assert(gsets == NIL || groupingSets != NULL); if (groupingSets) { *groupingSets = gsets; } return result; } static Query *transform_cypher_return(cypher_parsestate *cpstate, cypher_clause *clause) { ParseState *pstate = (ParseState *)cpstate; cypher_return *self = (cypher_return *)clause->self; Query *query; List *groupClause = NIL; query = makeNode(Query); query->commandType = CMD_SELECT; if (clause->prev) { transform_prev_cypher_clause(cpstate, clause->prev, true); } query->targetList = transform_cypher_item_list(cpstate, self->items, &groupClause, EXPR_KIND_SELECT_TARGET); markTargetListOrigins(pstate, query->targetList); // ORDER BY query->sortClause = transform_cypher_order_by(cpstate, self->order_by, &query->targetList, EXPR_KIND_ORDER_BY); /* 'auto' GROUP BY (from PG's transformGroupClause) */ query->groupClause = transform_group_clause(cpstate, groupClause, &query->groupingSets, &query->targetList, query->sortClause, EXPR_KIND_GROUP_BY); // DISTINCT if (self->distinct) { query->distinctClause = transformDistinctClause( pstate, &query->targetList, query->sortClause, false); query->hasDistinctOn = false; } else { query->distinctClause = NIL; query->hasDistinctOn = false; } // SKIP and LIMIT query->limitOffset = transform_cypher_limit(cpstate, self->skip, EXPR_KIND_OFFSET, "SKIP"); query->limitCount = transform_cypher_limit(cpstate, self->limit, EXPR_KIND_LIMIT, "LIMIT"); query->rtable = pstate->p_rtable; query->rteperminfos = pstate->p_rteperminfos; query->jointree = makeFromExpr(pstate->p_joinlist, NULL); query->hasAggs = pstate->p_hasAggs; assign_query_collations(pstate, query); /* this must be done after collations, for reliable comparison of exprs */ if (pstate->p_hasAggs || query->groupClause || query->groupingSets || query->havingQual) { parse_check_aggregates(pstate, query); } return query; } // see transformSortClause() static List *transform_cypher_order_by(cypher_parsestate *cpstate, List *sort_items, List **target_list, ParseExprKind expr_kind) { ParseState *pstate = (ParseState *)cpstate; List *sort_list = NIL; ListCell *li; foreach (li, sort_items) { SortBy *sort_by = lfirst(li); TargetEntry *te; te = find_target_list_entry(cpstate, sort_by->node, target_list, expr_kind); sort_list = addTargetToSortList(pstate, te, sort_list, *target_list, sort_by); } return sort_list; } // see findTargetlistEntrySQL99() static TargetEntry *find_target_list_entry(cypher_parsestate *cpstate, Node *node, List **target_list, ParseExprKind expr_kind) { Node *expr; ListCell *lt; TargetEntry *te; expr = transform_cypher_expr(cpstate, node, expr_kind); foreach (lt, *target_list) { Node *te_expr; te = lfirst(lt); te_expr = strip_implicit_coercions((Node *)te->expr); if (equal(expr, te_expr)) { return te; } } te = transform_cypher_item(cpstate, node, expr, expr_kind, NULL, true); *target_list = lappend(*target_list, te); return te; } // see transformLimitClause() static Node *transform_cypher_limit(cypher_parsestate *cpstate, Node *node, ParseExprKind expr_kind, const char *construct_name) { ParseState *pstate = (ParseState *)cpstate; Node *qual; if (!node) { return NULL; } qual = transform_cypher_expr(cpstate, node, expr_kind); qual = coerce_to_specific_type(pstate, qual, INT8OID, construct_name); // LIMIT can't refer to any variables of the current query. if (contain_vars_of_level(qual, 0)) { ereport(ERROR, (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), errmsg("argument of %s must not contain variables", construct_name), parser_errposition(pstate, locate_var_of_level(qual, 0)))); } return qual; } static Query *transform_cypher_with(cypher_parsestate *cpstate, cypher_clause *clause) { cypher_with *self = (cypher_with *)clause->self; cypher_return *return_clause; cypher_clause *wrapper; // TODO: check that all items have an alias for each // WITH clause is basically RETURN clause with optional WHERE subclause return_clause = make_ag_node(cypher_return); return_clause->distinct = self->distinct; return_clause->items = self->items; return_clause->order_by = self->order_by; return_clause->skip = self->skip; return_clause->limit = self->limit; wrapper = palloc(sizeof(*wrapper)); wrapper->self = (Node *)return_clause; wrapper->prev = clause->prev; return transform_cypher_clause_with_where(cpstate, transform_cypher_return, wrapper, self->where); } static bool match_check_valid_label(cypher_match *match, cypher_parsestate *cpstate) { ListCell *cell1; ListCell *cell2; cypher_path *path; foreach(cell1, match->pattern) { int i = 0; path = (cypher_path*) lfirst(cell1); foreach(cell2, path->path) { if (i % 2 == 0) { cypher_node *node = NULL; node = lfirst(cell2); if (node->label) { label_cache_data *lcd = search_label_name_graph_cache(node->label, cpstate->graph_oid); if (lcd == NULL || lcd->kind != LABEL_KIND_VERTEX) { return false; } } } else { cypher_relationship *rel = NULL; rel = lfirst(cell2); if (rel->label) { label_cache_data *lcd = search_label_name_graph_cache(rel->label, cpstate->graph_oid); if (lcd == NULL || lcd->kind != LABEL_KIND_EDGE) { return false; } } } i++; } } return true; } static Query *transform_cypher_clause_with_where(cypher_parsestate *cpstate, transform_method transform, cypher_clause *clause, Node *where) { ParseState *pstate = (ParseState *)cpstate; Query *query; Node *self = clause->self; Node *where_qual = NULL; if (where) { int rtindex; ParseNamespaceItem *pnsi; query = makeNode(Query); query->commandType = CMD_SELECT; pnsi = transform_cypher_clause_as_subquery(cpstate, transform, clause, NULL, true); Assert(pnsi != NULL); rtindex = list_length(pstate->p_rtable); // rte is the only RangeTblEntry in pstate if (rtindex != 1) { ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("invalid value for rtindex"))); } /* * add all the target entries in pnsi to the current target list to pass * all the variables that are introduced in the previous clause to the * next clause */ query->targetList = expandNSItemAttrs(pstate, pnsi, 0, true, -1); markTargetListOrigins(pstate, query->targetList); query->rtable = pstate->p_rtable; query->rteperminfos = pstate->p_rteperminfos; if (!is_ag_node(self, cypher_match)) { where_qual = transform_cypher_expr(cpstate, where, EXPR_KIND_WHERE); where_qual = coerce_to_boolean(pstate, where_qual, "WHERE"); } query->jointree = makeFromExpr(pstate->p_joinlist, where_qual); assign_query_collations(pstate, query); } else { query = transform(cpstate, clause); } query->hasSubLinks = pstate->p_hasSubLinks; query->hasTargetSRFs = pstate->p_hasTargetSRFs; query->hasAggs = pstate->p_hasAggs; return query; } static Query *transform_cypher_match(cypher_parsestate *cpstate, cypher_clause *clause) { cypher_match *match_self = (cypher_match*) clause->self; if(!match_check_valid_label(match_self, cpstate)) { cypher_bool_const *l = make_ag_node(cypher_bool_const); cypher_bool_const *r = make_ag_node(cypher_bool_const); l->boolean = true; l->location = -1; r->boolean = false; r->location = -1; /*if the label is invalid, create a paradoxical where to get null*/ match_self->where = (Node *)makeSimpleA_Expr(AEXPR_OP, "=", (Node *)l, (Node *)r, -1); } return transform_cypher_clause_with_where( cpstate, transform_cypher_match_pattern, clause, match_self->where); } /* * Transform the clause into a subquery. This subquery will be used * in a join so setup the namespace item and the created the rtr * for the join to use. */ static Node *transform_clause_for_join(cypher_parsestate *cpstate, cypher_clause *clause, RangeTblEntry **rte, ParseNamespaceItem **nsitem, Alias* alias) { RangeTblRef *rtr; *nsitem = transform_cypher_clause_as_subquery(cpstate, transform_cypher_clause, clause, alias, false); *rte = (*nsitem)->p_rte; rtr = makeNode(RangeTblRef); rtr->rtindex = (*nsitem)->p_rtindex; return (Node *) rtr; } /* * For cases where we need to join two subqueries together (OPTIONAL MATCH and * MERGE) we need to take the columns available in each rte and merge them * together. The l_rte has precedence when there is a conflict, because that * means that the pattern create in the current clause is referencing a * variable declared in a previous clause (the l_rte). The output is the * res_colnames and res_colvars that are passed in. */ static void get_res_cols(ParseState *pstate, ParseNamespaceItem *l_pnsi, ParseNamespaceItem *r_pnsi, List **res_colnames, List **res_colvars) { List *l_colnames, *l_colvars; List *r_colnames, *r_colvars; ListCell *r_lname, *r_lvar; List *colnames = NIL; List *colvars = NIL; expandRTE(l_pnsi->p_rte, l_pnsi->p_rtindex, 0, -1, false, &l_colnames, &l_colvars); expandRTE(r_pnsi->p_rte, r_pnsi->p_rtindex, 0, -1, false, &r_colnames, &r_colvars); // add in all colnames and colvars from the l_rte. *res_colnames = list_concat(*res_colnames, l_colnames); *res_colvars = list_concat(*res_colvars, l_colvars); // find new columns and if they are a var, pass them in. forboth(r_lname, r_colnames, r_lvar, r_colvars) { char *r_colname = strVal(lfirst(r_lname)); ListCell *lname; ListCell *lvar; Var *var = NULL; forboth(lname, *res_colnames, lvar, *res_colvars) { char *colname = strVal(lfirst(lname)); if (strcmp(r_colname, colname) == 0) { var = lfirst(lvar); break; } } if (var == NULL) { Var *v; /* * Each join (left) RTE's Var, that references a column of the * right RTE, needs to be marked 'nullable'. */ v = lfirst(r_lvar); markNullableIfNeeded(pstate, v); colnames = lappend(colnames, lfirst(r_lname)); colvars = lappend(colvars, v); } } *res_colnames = list_concat(*res_colnames, colnames); *res_colvars = list_concat(*res_colvars, colvars); } /* * transform_cypher_optional_match_clause * Transform the previous clauses and OPTIONAL MATCH clauses to be LATERAL LEFT JOIN * transform_cypher_optional_match_clause to construct a result value. */ static RangeTblEntry *transform_cypher_optional_match_clause(cypher_parsestate *cpstate, cypher_clause *clause) { cypher_clause *prevclause; RangeTblEntry *l_rte, *r_rte; ParseNamespaceItem *l_nsitem, *r_nsitem; ParseState *pstate = (ParseState *) cpstate; JoinExpr* j = makeNode(JoinExpr); List *res_colnames = NIL, *res_colvars = NIL; Alias *l_alias, *r_alias; ParseNamespaceItem *jnsitem; int i = 0; j->jointype = JOIN_LEFT; l_alias = makeAlias(PREV_CYPHER_CLAUSE_ALIAS, NIL); r_alias = makeAlias(CYPHER_OPT_RIGHT_ALIAS, NIL); j->larg = transform_clause_for_join(cpstate, clause->prev, &l_rte, &l_nsitem, l_alias); pstate->p_namespace = lappend(pstate->p_namespace, l_nsitem); /* * Remove the previous clause so when the transform_clause_for_join function * transforms the OPTIONAL MATCH, the previous clause will not be transformed * again. */ prevclause = clause->prev; clause->prev = NULL; //set the lateral flag to true pstate->p_lateral_active = true; j->rarg = transform_clause_for_join(cpstate, clause, &r_rte, &r_nsitem, r_alias); /* * Since this is a left join, we need to mark j->rarg as it may potentially * emit NULL. The jindex argument holds rtindex of the join's RTE, which is * created right after j->arg's RTE in this case. */ markRelsAsNulledBy(pstate, j->rarg, r_nsitem->p_rtindex + 1); // we are done transform the lateral left join pstate->p_lateral_active = false; /* * We are done with the previous clause in the transform phase, but * reattach the previous clause for semantics. */ clause->prev = prevclause; pstate->p_namespace = NIL; // get the colnames and colvars from the rtes get_res_cols(pstate, l_nsitem, r_nsitem, &res_colnames, &res_colvars); jnsitem = addRangeTableEntryForJoin(pstate, res_colnames, NULL, j->jointype, 0, res_colvars, NIL, NIL, j->alias, NULL, false); j->rtindex = jnsitem->p_rtindex; for (i = list_length(pstate->p_joinexprs) + 1; i < j->rtindex; i++) { pstate->p_joinexprs = lappend(pstate->p_joinexprs, NULL); } pstate->p_joinexprs = lappend(pstate->p_joinexprs, j); Assert(list_length(pstate->p_joinexprs) == j->rtindex); pstate->p_joinlist = lappend(pstate->p_joinlist, j); /* add jrte to column namespace only */ addNSItemToQuery(pstate, jnsitem, false, false, true); return jnsitem->p_rte; } static Query *transform_cypher_match_pattern(cypher_parsestate *cpstate, cypher_clause *clause) { ParseState *pstate = (ParseState *)cpstate; cypher_match *self = (cypher_match *)clause->self; Query *query; Node *where = self->where; query = makeNode(Query); query->commandType = CMD_SELECT; if(self->optional == true && clause->next) { cypher_clause *next = clause->next; if (is_ag_node(next->self, cypher_match)) { cypher_match *next_self = (cypher_match *)next->self; if (!next_self->optional) { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("MATCH cannot follow OPTIONAL MATCH"), parser_errposition(pstate, exprLocation((Node *) next_self)))); } } } // If there is no previous clause, transform to a general MATCH clause. if (self->optional == true && clause->prev != NULL) { RangeTblEntry *rte = transform_cypher_optional_match_clause(cpstate, clause); query->targetList = make_target_list_from_join(pstate, rte); query->rtable = pstate->p_rtable; query->rteperminfos = pstate->p_rteperminfos; query->jointree = makeFromExpr(pstate->p_joinlist, NULL); } else { if (clause->prev) { RangeTblEntry *rte; int rtindex; ParseNamespaceItem *pnsi; pnsi = transform_prev_cypher_clause(cpstate, clause->prev, true); rte = pnsi->p_rte; rtindex = list_length(pstate->p_rtable); // rte is the first RangeTblEntry in pstate if (rtindex != 1) { ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("invalid value for rtindex"))); } /* * add all the target entries in rte to the current target list to pass * all the variables that are introduced in the previous clause to the * next clause */ pnsi = get_namespace_item(pstate, rte); query->targetList = expandNSItemAttrs(pstate, pnsi, 0, true, -1); } transform_match_pattern(cpstate, query, self->pattern, where); } markTargetListOrigins(pstate, query->targetList); query->hasSubLinks = pstate->p_hasSubLinks; query->hasWindowFuncs = pstate->p_hasWindowFuncs; query->hasTargetSRFs = pstate->p_hasTargetSRFs; query->hasAggs = pstate->p_hasAggs; assign_query_collations(pstate, query); return query; } /* * Function to make a target list from an RTE. Taken from AgensGraph and PG */ static List *make_target_list_from_join(ParseState *pstate, RangeTblEntry *rte) { List *targetlist = NIL; ListCell *lt; ListCell *ln; Assert(rte->rtekind == RTE_JOIN); forboth(lt, rte->joinaliasvars, ln, rte->eref->colnames) { Var *varnode = lfirst(lt); char *resname = strVal(lfirst(ln)); TargetEntry *tmp; tmp = makeTargetEntry((Expr *) varnode, (AttrNumber) pstate->p_next_resno++, pstrdup(resname), false); targetlist = lappend(targetlist, tmp); } return targetlist; } /* * Function to make a target list from an RTE. Borrowed from AgensGraph and PG */ static List *makeTargetListFromPNSItem(ParseState *pstate, ParseNamespaceItem *pnsi) { List *targetlist = NIL; int rtindex; int varattno; ListCell *ln; ListCell *lt; RangeTblEntry *rte; Assert(pnsi->p_rte); rte = pnsi->p_rte; /* right now this is only for subqueries */ Assert(rte->rtekind == RTE_SUBQUERY); rtindex = pnsi->p_rtindex; varattno = 1; ln = list_head(rte->eref->colnames); foreach(lt, rte->subquery->targetList) { TargetEntry *te = lfirst(lt); Var *varnode; char *resname; TargetEntry *tmp; if (te->resjunk) { continue; } Assert(varattno == te->resno); /* no transform here, just use `te->expr` */ varnode = makeVar(rtindex, varattno, exprType((Node *) te->expr), exprTypmod((Node *) te->expr), exprCollation((Node *) te->expr), 0); resname = strVal(lfirst(ln)); tmp = makeTargetEntry((Expr *)varnode, (AttrNumber)pstate->p_next_resno++, resname, false); targetlist = lappend(targetlist, tmp); varattno++; ln = lnext(rte->eref->colnames, ln); } return targetlist; } /* * Transform a cypher sub pattern. This is put here because it is a sub clause. * This works in tandem with transform_Sublink in cypher_expr.c */ static Query *transform_cypher_sub_pattern(cypher_parsestate *cpstate, cypher_clause *clause) { cypher_match *match; cypher_clause *c; Query *qry; ParseState *pstate = (ParseState *)cpstate; cypher_sub_pattern *subpat = (cypher_sub_pattern*)clause->self; ParseNamespaceItem *pnsi; cypher_parsestate *child_parse_state = make_cypher_parsestate(cpstate); ParseState *p_child_parse_state = (ParseState *) child_parse_state; p_child_parse_state->p_expr_kind = pstate->p_expr_kind; /* create a cypher match node and assign it the sub pattern */ match = make_ag_node(cypher_match); match->pattern = subpat->pattern; match->where = NULL; /* wrap it in a clause */ c = palloc(sizeof(cypher_clause)); c->self = (Node *)match; c->prev = NULL; c->next = NULL; /* set up a select query and run it as a sub query to the parent match */ qry = makeNode(Query); qry->commandType = CMD_SELECT; pnsi = transform_cypher_clause_as_subquery(child_parse_state, transform_cypher_clause, c, NULL, true); qry->targetList = makeTargetListFromPNSItem(p_child_parse_state, pnsi); markTargetListOrigins(p_child_parse_state, qry->targetList); qry->rtable = p_child_parse_state->p_rtable; qry->rteperminfos = p_child_parse_state->p_rteperminfos; qry->jointree = makeFromExpr(p_child_parse_state->p_joinlist, NULL); /* the state will be destroyed so copy the data we need */ qry->hasSubLinks = p_child_parse_state->p_hasSubLinks; qry->hasTargetSRFs = p_child_parse_state->p_hasTargetSRFs; qry->hasAggs = p_child_parse_state->p_hasAggs; if (qry->hasAggs) { parse_check_aggregates(p_child_parse_state, qry); } assign_query_collations(p_child_parse_state, qry); free_cypher_parsestate(child_parse_state); return qry; } /* * Code borrowed and inspired by PG's transformFromClauseItem. This function * will transform the VLE function, depending on type. Currently, only * RangeFunctions are supported. But, others may be in the future. */ static Node *transform_VLE_Function(cypher_parsestate *cpstate, Node *n, RangeTblEntry **top_rte, int *top_rti, List **namespace) { ParseState *pstate = &cpstate->pstate; /* we only care about RangeFunctions at this time */ Assert(IsA(n, RangeFunction)); if (IsA(n, RangeFunction)) { /* function is like a plain relation */ RangeTblRef *rtr; RangeTblEntry *rte; ParseNamespaceItem *nsitem; int rtindex; nsitem = transform_RangeFunction(cpstate, (RangeFunction *) n); rte = nsitem->p_rte; /* assume new rte is at end */ rtindex = list_length(pstate->p_rtable); Assert(rte == rt_fetch(rtindex, pstate->p_rtable)); *top_rte = rte; *top_rti = rtindex; *namespace = list_make1(nsitem); rtr = makeNode(RangeTblRef); rtr->rtindex = rtindex; return (Node *) rtr; } /* if it isn't a RangeFunction, return NULL */ return NULL; } /* * static function borrowed from PG. * * setNamespaceLateralState - * Convenience subroutine to update LATERAL flags in a namespace list. */ static void setNamespaceLateralState(List *namespace, bool lateral_only, bool lateral_ok) { ListCell *lc; foreach(lc, namespace) { ParseNamespaceItem *nsitem = (ParseNamespaceItem *) lfirst(lc); nsitem->p_lateral_only = lateral_only; nsitem->p_lateral_ok = lateral_ok; } } /* * Code borrowed and inspired by PG's transformFromClauseItem. Static function * to add in the VLE function as a FROM clause entry. */ static ParseNamespaceItem *append_VLE_Func_to_FromClause(cypher_parsestate *cpstate, Node *n) { ParseState *pstate = &cpstate->pstate; RangeTblEntry *rte = NULL; List *namespace = NULL; int rtindex; /* * Following PG's FROM clause logic, just in case we need to expand it in * the future, we process the items in another function. */ n = transform_VLE_Function(cpstate, n, &rte, &rtindex, &namespace); /* this should not happen */ Assert(n != NULL); /* verify there aren't any conflicts */ checkNameSpaceConflicts(pstate, pstate->p_namespace, namespace); /* mark the new namespace items as visible only to LATERAL */ setNamespaceLateralState(namespace, true, true); /* add the entry to the joinlist and namespace */ pstate->p_joinlist = lappend(pstate->p_joinlist, n); pstate->p_namespace = list_concat(pstate->p_namespace, namespace); /* make all namespace items unconditionally visible */ setNamespaceLateralState(pstate->p_namespace, false, true); return lfirst(list_head(namespace)); } /* * Code borrowed from PG's transformRangeFunction * * --- transform a function call appearing in FROM */ static ParseNamespaceItem *transform_RangeFunction(cypher_parsestate *cpstate, RangeFunction *r) { ParseState *pstate = NULL; List *funcexprs = NIL; List *funcnames = NIL; List *coldeflists = NIL; bool is_lateral = false; ListCell *lc = NULL; ParseNamespaceItem *pnsi; pstate = &cpstate->pstate; Assert(!pstate->p_lateral_active); pstate->p_lateral_active = true; /* transform the raw expressions */ foreach(lc, r->functions) { List *pair = (List*)lfirst(lc); Node *fexpr; List *coldeflist; Node *newfexpr; Node *last_srf; /* Disassemble the function-call/column-def-list pairs */ Assert(list_length(pair) == 2); fexpr = (Node*) linitial(pair); coldeflist = (List*) lsecond(pair); /* normal case ... */ last_srf = pstate->p_last_srf; /* transform the function expression */ newfexpr = transform_cypher_expr(cpstate, fexpr, EXPR_KIND_FROM_FUNCTION); /* nodeFunctionscan.c requires SRFs to be at top level */ if (pstate->p_last_srf != last_srf && pstate->p_last_srf != newfexpr) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("set-returning functions must appear at top level of FROM"), parser_errposition(pstate, exprLocation(pstate->p_last_srf)))); } funcexprs = lappend(funcexprs, newfexpr); funcnames = lappend(funcnames, FigureColname(fexpr)); if (coldeflist && r->coldeflist) { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("multiple column definition lists are not allowed for the same function"), parser_errposition(pstate, exprLocation((Node *) r->coldeflist)))); } coldeflists = lappend(coldeflists, coldeflist); } pstate->p_lateral_active = false; /* * We must assign collations now so that the RTE exposes correct collation * info for Vars created from it. */ assign_list_collations(pstate, funcexprs); /* currently this is not used by the VLE */ Assert(r->coldeflist == NULL); /* mark the RTE as LATERAL */ is_lateral = r->lateral || contain_vars_of_level((Node *) funcexprs, 0); /* build an RTE for the function */ pnsi = addRangeTableEntryForFunction(pstate, funcnames, funcexprs, coldeflists, r, is_lateral, true); return pnsi; } static void transform_match_pattern(cypher_parsestate *cpstate, Query *query, List *pattern, Node *where) { ParseState *pstate = (ParseState *)cpstate; ListCell *lc; List *quals = NIL; Expr *q = NULL; Expr *expr = NULL; /* * Loop through a comma separated list of paths like (u)-[e]-(v), (w), (x) */ foreach (lc, pattern) { List *qual = NULL; cypher_path *path = NULL; /* get the path and transform it */ path = (cypher_path *) lfirst(lc); qual = transform_match_path(cpstate, query, path); quals = list_concat(quals, qual); } if (quals != NIL) { q = makeBoolExpr(AND_EXPR, quals, -1); expr = (Expr *)transformExpr(&cpstate->pstate, (Node *)q, EXPR_KIND_WHERE); } if (cpstate->property_constraint_quals != NIL) { Expr *prop_qual = makeBoolExpr(AND_EXPR, cpstate->property_constraint_quals, -1); if (expr == NULL) { expr = prop_qual; } else { expr = makeBoolExpr(AND_EXPR, list_make2(expr, prop_qual), -1); } } // transform the where clause quals and add to the quals, if (where != NULL) { Expr *where_qual; where_qual = (Expr *)transform_cypher_expr(cpstate, where, EXPR_KIND_WHERE); if (expr == NULL) { expr = where_qual; } else { /* * coerce the WHERE clause to a boolean before AND with the property * constraints, otherwise there could be evaluation issues. */ where_qual = (Expr *)coerce_to_boolean(pstate, (Node *)where_qual, "WHERE"); expr = makeBoolExpr(AND_EXPR, list_make2(expr, where_qual), -1); } } /* * Coerce to WHERE clause to a bool, denoting whether the constructed * clause is true or false. */ if (expr != NULL) { expr = (Expr *)coerce_to_boolean(pstate, (Node *)expr, "WHERE"); } query->rtable = cpstate->pstate.p_rtable; query->rteperminfos = cpstate->pstate.p_rteperminfos; query->jointree = makeFromExpr(cpstate->pstate.p_joinlist, (Node *)expr); } /* * Creates a FuncCall node that will prevent an edge from being joined * to twice. */ static FuncCall *prevent_duplicate_edges(cypher_parsestate *cpstate, List *entities) { List *edges = NIL; ListCell *lc; List *qualified_function_name; String *ag_catalog, *edge_fn; ag_catalog = makeString("ag_catalog"); edge_fn = makeString("_ag_enforce_edge_uniqueness"); qualified_function_name = list_make2(ag_catalog, edge_fn); // iterate through each entity, collecting the access node for each edge foreach (lc, entities) { transform_entity *entity = lfirst(lc); Node *edge; if (entity->type == ENT_EDGE) { edge = make_qual(cpstate, entity, AG_EDGE_COLNAME_ID); edges = lappend(edges, edge); } else if (entity->type == ENT_VLE_EDGE) { edges = lappend(edges, entity->expr); } } return makeFuncCall(qualified_function_name, edges, COERCE_SQL_SYNTAX, -1); } /* * For any given edge, the previous entity is joined with the edge * via the prev_qual node, and the next entity is join with the * next_qual node. If there is a filter on the previous vertex label, * create a filter, same with the next node. */ static List *make_directed_edge_join_conditions( cypher_parsestate *cpstate, transform_entity *prev_entity, transform_entity *next_entity, Node *prev_qual, Node *next_qual, char *prev_node_filter, char *next_node_filter) { List *quals = NIL; if (prev_entity->in_join_tree) { quals = list_concat(quals, join_to_entity(cpstate, prev_entity, prev_qual, JOIN_SIDE_LEFT)); } if (next_entity->in_join_tree && next_entity->type != ENT_VLE_EDGE) { quals = list_concat(quals, join_to_entity(cpstate, next_entity, next_qual, JOIN_SIDE_RIGHT)); } if (prev_node_filter != NULL && !IS_DEFAULT_LABEL_VERTEX(prev_node_filter)) { A_Expr *qual; qual = filter_vertices_on_label_id(cpstate, prev_qual, prev_node_filter); quals = lappend(quals, qual); } if (next_node_filter != NULL && !IS_DEFAULT_LABEL_VERTEX(next_node_filter)) { A_Expr *qual; qual = filter_vertices_on_label_id(cpstate, next_qual, next_node_filter); quals = lappend(quals, qual); } return quals; } /* * The joins are driven by edges. Under specific conditions, it becomes * necessary to have knowledge about the previous edge and vertex and * the next vertex and edge. * * [prev_edge]-(prev_node)-[edge]-(next_node)-[next_edge] * * prev_edge and next_edge are allowed to be null. * prev_node and next_node are not allowed to be null. */ static List *make_join_condition_for_edge(cypher_parsestate *cpstate, transform_entity *prev_edge, transform_entity *prev_node, transform_entity *entity, transform_entity *next_node, transform_entity *next_edge) { char *next_label_name_to_filter = NULL; char *prev_label_name_to_filter = NULL; transform_entity *next_entity; transform_entity *prev_entity; /* * When this edge is a vle edge, pass the prev and next * node to the match_vle_terminal_edge function to process * which rows match. */ if (entity->type == ENT_VLE_EDGE) { Node *left_id = NULL; Node *right_id = NULL; String *ag_catalog = makeString("ag_catalog"); String *func_name; List *qualified_func_name; List *args = NIL; List *quals = NIL; /* * If the next node is not in the join tree, we don't need to make any * quals. */ if (!next_node->in_join_tree) { return NIL; } /* * If the previous node and the next node are in the join tree, we need * to create the age_match_vle_terminal_edge to compare the vle returned * results against the two nodes. */ if (prev_node->in_join_tree) { func_name = makeString("age_match_vle_terminal_edge"); qualified_func_name = list_make2(ag_catalog, func_name); /* * Get the vertex's id and pass to the function. Pass in NULL * otherwise. */ left_id = (Node *)make_qual(cpstate, prev_node, "id"); right_id = (Node *)make_qual(cpstate, next_node, "id"); // create the argument list args = list_make3(left_id, right_id, entity->expr); // add to quals quals = lappend(quals, makeFuncCall(qualified_func_name, args, COERCE_EXPLICIT_CALL, -1)); } /* * When the previous node is not in the join tree, but there is a vle * edge before that join, then we need to compare this vle's start node * against the previous vle's end node. No need to check the next edge, * because that would be redundant. */ if (!prev_node->in_join_tree && prev_edge != NULL && prev_edge->type == ENT_VLE_EDGE) { List *qualified_name; String *match_qual; FuncCall *fc; match_qual = makeString("age_match_two_vle_edges"); // make the qualified function name qualified_name = list_make2(ag_catalog, match_qual); // make the args args = list_make2(prev_edge->expr, entity->expr); // create the function call fc = makeFuncCall(qualified_name, args, COERCE_EXPLICIT_CALL, -1); quals = lappend(quals, fc); } return quals; } /* * If the previous node is not in the join tree, set the previous * label filter. */ if (!prev_node->in_join_tree) { prev_label_name_to_filter = prev_node->entity.node->label; } /* * If the next node is not in the join tree and there is not * another edge, set the label filter. When there is another * edge, we don't need to set it, because that edge will set the * filter for that node. */ if (!next_node->in_join_tree && next_edge == NULL) { next_label_name_to_filter = next_node->entity.node->label; } /* * When the previous node is not in the join tree, and there * is a previous edge, set the previous entity to that edge. * Otherwise, use the previous node/ */ if (!prev_node->in_join_tree && prev_edge != NULL) { prev_entity = prev_edge; } else { prev_entity = prev_node; } /* * When the next node is not in the join tree, and there * is a next edge, set the next entity to that edge. * Otherwise, use the next node. */ if (!next_node->in_join_tree && next_edge != NULL) { next_entity = next_edge; } else { next_entity = next_node; } switch (entity->entity.rel->dir) { case CYPHER_REL_DIR_RIGHT: { Node *prev_qual = make_qual(cpstate, entity, AG_EDGE_COLNAME_START_ID); Node *next_qual = make_qual(cpstate, entity, AG_EDGE_COLNAME_END_ID); return make_directed_edge_join_conditions(cpstate, prev_entity, next_node, prev_qual, next_qual, prev_label_name_to_filter, next_label_name_to_filter); } case CYPHER_REL_DIR_LEFT: { Node *prev_qual = make_qual(cpstate, entity, AG_EDGE_COLNAME_END_ID); Node *next_qual = make_qual(cpstate, entity, AG_EDGE_COLNAME_START_ID); return make_directed_edge_join_conditions(cpstate, prev_entity, next_node, prev_qual, next_qual, prev_label_name_to_filter, next_label_name_to_filter); } case CYPHER_REL_DIR_NONE: { /* * For undirected relationships, we can use the left directed * relationship OR'd by the right directed relationship. */ Node *start_id_expr = make_qual(cpstate, entity, AG_EDGE_COLNAME_START_ID); Node *end_id_expr = make_qual(cpstate, entity, AG_EDGE_COLNAME_END_ID); List *first_join_quals = NIL, *second_join_quals = NIL; Expr *first_qual, *second_qual; Expr *or_qual; first_join_quals = make_directed_edge_join_conditions(cpstate, prev_entity, next_entity, start_id_expr, end_id_expr, prev_label_name_to_filter, next_label_name_to_filter); second_join_quals = make_directed_edge_join_conditions(cpstate, prev_entity, next_entity, end_id_expr, start_id_expr, prev_label_name_to_filter, next_label_name_to_filter); first_qual = makeBoolExpr(AND_EXPR, first_join_quals, -1); second_qual = makeBoolExpr(AND_EXPR, second_join_quals, -1); or_qual = makeBoolExpr(OR_EXPR, list_make2(first_qual, second_qual), -1); return list_make1(or_qual); } default: return NULL; } } // creates a type cast node to agtype static Node *make_type_cast_to_agtype(Node *arg) { TypeCast *n = makeNode(TypeCast); String *ag_catalog = makeString("ag_catalog"); String *agtype_str = makeString("agtype"); List *qualified_name = list_make2(ag_catalog, agtype_str); n->arg = arg; n->typeName = makeTypeNameFromNameList(qualified_name); n->location = -1; return (Node *) n; } /* * Makes an agtype bool node that Postgres' transform expression logic * can handle. Used when constructed the join quals for building the paths */ static Node *make_bool_a_const(bool state) { A_Const *n = makeNode(A_Const); n->val.sval.type = T_String; n->val.sval.sval = (state ? "true" : "false"); n->location = -1; // typecast to agtype return make_type_cast_to_agtype((Node *)n); } /* * For the given entity, join it to the current edge, via the passed * qual node. The side denotes if the entity is on the right * or left of the current edge. Which we will need to know if the * passed entity is a directed edge. */ static List *join_to_entity(cypher_parsestate *cpstate, transform_entity *entity, Node *qual, enum transform_entity_join_side side) { ParseState *pstate = (ParseState *)cpstate; A_Expr *expr; List *quals = NIL; if (entity->type == ENT_VERTEX) { Node *id_qual = make_qual(cpstate, entity, AG_EDGE_COLNAME_ID); expr = makeSimpleA_Expr(AEXPR_OP, "=", qual, (Node *)id_qual, -1); quals = lappend(quals, expr); } else if (entity->type == ENT_EDGE) { List *edge_quals = make_edge_quals(cpstate, entity, side); if (list_length(edge_quals) > 1) { expr = makeSimpleA_Expr(AEXPR_IN, "=", qual, (Node *)edge_quals, -1); } else { expr = makeSimpleA_Expr(AEXPR_OP, "=", qual, linitial(edge_quals), -1); } quals = lappend(quals, expr); } else if (entity->type == ENT_VLE_EDGE) { List *qualified_name, *args; String *ag_catalog, *match_qual; bool is_left_side; FuncCall *fc; ag_catalog = makeString("ag_catalog"); match_qual = makeString("age_match_vle_edge_to_id_qual"); /* * tells the function the location of the vle relative to the * edge we are joining it against. */ if (side == JOIN_SIDE_LEFT) { // [vle_edge]-()-[regular_edge] is_left_side = true; } else if (side == JOIN_SIDE_RIGHT) { // [edge]-()-[vle_edge] is_left_side = false; } else { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("unknown join side found"), parser_errposition(pstate, entity->entity.rel->location))); } // make the qualified function name qualified_name = list_make2(ag_catalog, match_qual); // make the args args = list_make3(entity->expr, qual, make_bool_a_const(is_left_side)); // create the function call fc = makeFuncCall(qualified_name, args, COERCE_EXPLICIT_CALL, -1); quals = lappend(quals, fc); } else { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("unknown entity type to join to"))); } return quals; } // makes the quals necessary when an edge is joining to another edge. static List *make_edge_quals(cypher_parsestate *cpstate, transform_entity *edge, enum transform_entity_join_side side) { ParseState *pstate = (ParseState *)cpstate; char *left_dir; char *right_dir; Assert(edge->type == ENT_EDGE); /* * When the rel is on the left side in a pattern, then a left directed path * is concerned with the start id and a right directed path is concerned * with the end id. When the rel is on the right side of a pattern, the * above statement is inverted. */ switch (side) { case JOIN_SIDE_LEFT: { left_dir = AG_EDGE_COLNAME_START_ID; right_dir = AG_EDGE_COLNAME_END_ID; break; } case JOIN_SIDE_RIGHT: { left_dir = AG_EDGE_COLNAME_END_ID; right_dir = AG_EDGE_COLNAME_START_ID; break; } default: ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("unknown join type found"), parser_errposition(pstate, edge->entity.rel->location))); } switch (edge->entity.rel->dir) { case CYPHER_REL_DIR_LEFT: { return list_make1(make_qual(cpstate, edge, left_dir)); } case CYPHER_REL_DIR_RIGHT: { return list_make1(make_qual(cpstate, edge, right_dir)); } case CYPHER_REL_DIR_NONE: { return list_make2(make_qual(cpstate, edge, left_dir), make_qual(cpstate, edge, right_dir)); } default: ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("Unknown relationship direction"))); } return NIL; } /* * Creates a node that will create a filter on the passed field node * that removes all labels that do not have the same label_id */ static A_Expr *filter_vertices_on_label_id(cypher_parsestate *cpstate, Node *id_field, char *label) { label_cache_data *lcd = search_label_name_graph_cache(label, cpstate->graph_oid); A_Const *n; FuncCall *fc; String *ag_catalog, *extract_label_id; int32 label_id = lcd->id; n = makeNode(A_Const); n->val.ival.type = T_Integer; n->val.ival.ival = label_id; n->location = -1; ag_catalog = makeString("ag_catalog"); extract_label_id = makeString("_extract_label_id"); fc = makeFuncCall(list_make2(ag_catalog, extract_label_id), list_make1(id_field), COERCE_EXPLICIT_CALL, -1); return makeSimpleA_Expr(AEXPR_OP, "=", (Node *)fc, (Node *)n, -1); } /* * Makes property constraint using indirection(s). This is an * alternative to using the containment operator (@>). * * In case of array and empty map, containment is used instead of equality. * * For example, the following query * * MATCH (x:Label{ * name: 'xyz', * address: { * city: 'abc', * street: { * name: 'pqr', * number: 123 * } * }, * phone: [9, 8, 7], * parents: {} * }) * * is transformed to- * * x.name = 'xyz' AND * x.address.city = 'abc' AND * x.address.street.name = 'pqr' AND * x.address.street.number = 123 AND * x.phone @> [6, 4, 3] AND * x.parents @> {} */ static Node *transform_map_to_ind(cypher_parsestate *cpstate, transform_entity *entity, cypher_map *map) { List *quals; // list of equality and/or containment qual node quals = transform_map_to_ind_recursive(cpstate, entity, map, NIL); Assert(quals != NIL); if (list_length(quals) > 1) { return (Node *)makeBoolExpr(AND_EXPR, quals, -1); } else { return (Node *)linitial(quals); } } /* * Helper function of `transform_map_to_ind`. * * This function is called when a value of the `map` is a non-empty map. * For example, the key `address.street` has a non-empty map. The * `parent_fields` parameter will be set to the list of parents of the * key `street` in order. In this case, only `address`. If no parent * fields, set it to NIL. */ static List *transform_map_to_ind_recursive(cypher_parsestate *cpstate, transform_entity *entity, cypher_map *map, List *parent_fields) { int i; ParseState *pstate; Node *last_srf; List *quals; pstate = (ParseState *)cpstate; last_srf = pstate->p_last_srf; quals = NIL; /* since this function recurses, it could be driven to stack overflow */ check_stack_depth(); Assert(list_length(map->keyvals) != 0); for (i = 0; i < map->keyvals->length; i += 2) { Node *key; Node *val; char *keystr; key = (Node *)map->keyvals->elements[i].ptr_value; val = (Node *)map->keyvals->elements[i + 1].ptr_value; Assert(IsA(key, String)); keystr = ((String *)key)->sval; if (is_ag_node(val, cypher_map) && list_length(((cypher_map *)val)->keyvals) != 0) { List *new_parent_fields; List *recursive_quals; new_parent_fields = lappend(list_copy(parent_fields), makeString(keystr)); recursive_quals = transform_map_to_ind_recursive( cpstate, entity, (cypher_map *)val, new_parent_fields); quals = list_concat(quals, recursive_quals); list_free(new_parent_fields); list_free(recursive_quals); } else { Node *qual; Node *lhs; Node *rhs; List *op; A_Indirection *indir; ColumnRef *variable; /* * Lists and empty maps are transformed to containment. If a map * makes it here, then it must be empty. Because non-empty maps * are processed in the upper if-block. */ if (is_ag_node(val, cypher_list) || is_ag_node(val, cypher_map)) { op = list_make1(makeString("@>")); } else { op = list_make1(makeString("=")); } variable = makeNode(ColumnRef); variable->fields = list_make1(makeString(entity->entity.node->name)); variable->location = -1; indir = makeNode(A_Indirection); indir->arg = (Node *)variable; indir->indirection = lappend(list_copy(parent_fields), makeString(keystr)); lhs = transform_cypher_expr(cpstate, (Node *)indir, EXPR_KIND_WHERE); rhs = transform_cypher_expr(cpstate, val, EXPR_KIND_WHERE); qual = (Node *)make_op(pstate, op, lhs, rhs, last_srf, -1); quals = lappend(quals, qual); } } return quals; } /* * Creates the property constraints for a vertex/edge in a MATCH clause. */ static Node *create_property_constraints(cypher_parsestate *cpstate, transform_entity *entity, Node *property_constraints, Node *prop_expr) { ParseState *pstate = (ParseState *)cpstate; char *entity_name; Node *const_expr; Node *last_srf = pstate->p_last_srf; ParseNamespaceItem *pnsi; /* * If the prop_expr node wasn't passed in, create it. Otherwise, skip * the creation step. */ if (prop_expr == NULL) { ColumnRef *cr = NULL; cr = makeNode(ColumnRef); entity_name = get_entity_name(entity); cr->fields = list_make2(makeString(entity_name), makeString("properties")); /* use Postgres to get the properties' transform node */ pnsi = find_pnsi(cpstate, entity_name); if (pnsi != NULL) { prop_expr = scanNSItemForColumn(pstate, pnsi, 0, AG_VERTEX_COLNAME_PROPERTIES, -1); } else { prop_expr = transformExpr(pstate, (Node *)cr, EXPR_KIND_WHERE); } } /* use cypher to get the constraints' transform node */ const_expr = transform_cypher_expr(cpstate, property_constraints, EXPR_KIND_WHERE); if (age_enable_containment) { return (Node *)make_op(pstate, list_make1(makeString("@>")), prop_expr, const_expr, last_srf, -1); } else { return (Node *)transform_map_to_ind( cpstate, entity, (cypher_map *)property_constraints); } } /* * For the given path, transform each entity within the path, create * the path variable if needed, and construct the quals to enforce the * correct join tree, and enforce edge uniqueness. */ static List *transform_match_path(cypher_parsestate *cpstate, Query *query, cypher_path *path) { ParseState *pstate = (ParseState *)cpstate; List *qual = NIL; List *entities = NIL; FuncCall *duplicate_edge_qual; List *join_quals; // transform the entities in the path entities = transform_match_entities(cpstate, query, path); // create the path variable, if needed. if (path->var_name != NULL) { TargetEntry *path_te; if (findTarget(query->targetList, path->var_name) != NULL) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("variable \"%s\" already exists", path->var_name), parser_errposition(pstate, path->location))); } path_te = transform_match_create_path_variable(cpstate, path, entities); query->targetList = lappend(query->targetList, path_te); } // construct the quals for the join tree join_quals = make_path_join_quals(cpstate, entities); qual = list_concat(qual, join_quals); // construct the qual to prevent duplicate edges if (list_length(entities) > 3) { duplicate_edge_qual = prevent_duplicate_edges(cpstate, entities); qual = lappend(qual, duplicate_edge_qual); } return qual; } static transform_entity *transform_VLE_edge_entity(cypher_parsestate *cpstate, cypher_relationship *rel, Query *query) { ParseState *pstate = NULL; TargetEntry *te = NULL; RangeFunction *rf = NULL; FuncCall *func = NULL; Alias *alias = NULL; Node *var = NULL; transform_entity *vle_entity = NULL; ParseNamespaceItem *pnsi; /* it better be a function call node */ Assert(IsA(rel->varlen, FuncCall)); /* get the function */ func = (FuncCall*)rel->varlen; /* only our functions are supported here */ if (list_length(func->funcname) != 1) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("only AGE functions are supported here"))); } /* set the pstate */ pstate = &cpstate->pstate; /* make a RangeFunction node */ rf = makeNode(RangeFunction); rf->lateral = false; rf->ordinality = false; rf->is_rowsfrom = false; rf->functions = list_make1(list_make2(rel->varlen, NIL)); /* * Build an alias for the RangeFunction. This is needed so we * can chain VLEs together */ alias = makeNode(Alias); alias->aliasname = get_next_default_alias(cpstate); alias->colnames = NIL; rf->alias = alias; /* * Add the RangeFunction to the FROM clause */ pnsi = append_VLE_Func_to_FromClause(cpstate, (Node*)rf); Assert(pnsi != NULL); /* Get the var node for the VLE functions column name. */ var = scanNSItemForColumn(pstate, pnsi, 0, "edges", -1); Assert(var != NULL); /* * If we have a variable name (rel name), make the target entry. Otherwise, * there isn't a reason to create one. Additionally, verify that it is not * reused. */ if (rel->name != NULL) { FuncExpr *fexpr; List *args = list_make1(var); Oid func_oid = InvalidOid; transform_entity *entity = NULL; te = findTarget(query->targetList, rel->name); entity = find_variable(cpstate, rel->name); /* If the variable already exists, error out */ if (te && entity) { if (entity->type == ENT_VERTEX) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("variable '%s' is for a vertex", rel->name), parser_errposition(pstate, rel->location))); } else if (entity->type == ENT_EDGE) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("variable '%s' is for an edge", rel->name), parser_errposition(pstate, rel->location))); } else if (entity->type == ENT_PATH) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("variable '%s' is for a path", rel->name), parser_errposition(pstate, rel->location))); } else { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("duplicate variable '%s'", rel->name), parser_errposition(pstate, rel->location))); } } else if (te && !entity) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("variable '%s' already exists", rel->name), parser_errposition(pstate, rel->location))); } /* * Get the oid for the materialize function that returns a list of * edges. For a VLE edge variable we need to return a list of edges, * not a path. */ func_oid = get_ag_func_oid("age_materialize_vle_edges", 1, AGTYPEOID); /* build the expr node for the function */ fexpr = makeFuncExpr(func_oid, AGTYPEOID, args, InvalidOid, InvalidOid, COERCE_EXPLICIT_CALL); /* make the target entry and apply the provided variable */ te = makeTargetEntry((Expr*)fexpr, pstate->p_next_resno++, rel->name, false); /* add it to the query */ query->targetList = lappend(query->targetList, te); } /* Make a transform entity for the vle. */ vle_entity = make_transform_entity(cpstate, ENT_VLE_EDGE, (Node *)rel, (Expr *)var); /* return the vle entity */ return vle_entity; } /* helper function to check for specific VLE cases */ static bool isa_special_VLE_case(cypher_path *path) { cypher_relationship *cr = NULL; if (path->var_name == NULL) { return false; } if (list_length(path->path) != 3) { return false; } cr = (cypher_relationship*)lfirst(lnext(path->path, list_head(path->path))); if (cr->varlen != NULL) { return true; } return false; } static bool path_check_valid_label(cypher_path *path, cypher_parsestate *cpstate) { ListCell *lc = NULL; int i = 0; foreach (lc, path->path) { if (i % 2 == 0) { cypher_node *node = NULL; node = lfirst(lc); if (node->label) { label_cache_data *lcd = search_label_name_graph_cache(node->label, cpstate->graph_oid); if (lcd == NULL || lcd->kind != LABEL_KIND_VERTEX) { return false; } } } else { cypher_relationship *rel = NULL; rel = lfirst(lc); if (rel->label) { label_cache_data *lcd = search_label_name_graph_cache(rel->label, cpstate->graph_oid); if (lcd == NULL || lcd->kind != LABEL_KIND_EDGE) { return false; } } } i++; } return true; } /* * Iterate through the path and construct all edges and necessary vertices */ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, cypher_path *path) { ParseState *pstate = (ParseState *)cpstate; ListCell *lc = NULL; List *entities = NIL; int i = 0; bool node_declared_in_prev_clause = false; transform_entity *prev_entity = NULL; bool special_VLE_case = false; bool valid_label = true; special_VLE_case = isa_special_VLE_case(path); valid_label = path_check_valid_label(path, cpstate); /* * Iterate through every node in the path, construct the expr node * that is needed for the remaining steps */ foreach (lc, path->path) { Expr *expr = NULL; transform_entity *entity = NULL; /* even increments of i are vertices */ if (i % 2 == 0) { cypher_node *node = NULL; bool output_node = false; node = lfirst(lc); /* * The vle needs to know if the start vertex was * created in a previous clause. Check to see if it * was so the edge logic can handle changing its argument * if necessary. */ if (node->name != NULL) { Node *expr; if (path->var_name && strcmp(node->name, path->var_name) == 0) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("variable \"%s\" is for a path", node->name), parser_errposition(pstate, node->location))); } /* * Checks the previous clauses to see if the variable already * exists. */ expr = colNameToVar(pstate, node->name, false, node->location); if (expr != NULL) { node_declared_in_prev_clause = true; } } /* should we make the node available */ output_node = (special_VLE_case && !node->name && !node->props) ? false : INCLUDE_NODE_IN_JOIN_TREE(path, node); /* * TODO * * We need to re-evaluate if we want to use output_node or not. * If output_node is set to false, then it basically short circuits * the match for instances where a variable isn't specified. While, * on the surface, this appears to be a good way to improve * execution time of commands that won't do anything, it also * causes chained commands to not work correctly. This is because * a match without a variable will still feed its tuples to the next * stage(s). With this set to false, it won't. So we likely need to * remove all of the output_node logic. This needs to be reviewed, * though. For now, we just set it to true and update the output of * the regression tests. */ output_node = true; /* transform vertex */ expr = transform_cypher_node(cpstate, node, &query->targetList, output_node, valid_label); entity = make_transform_entity(cpstate, ENT_VERTEX, (Node *)node, expr); /* * We want to add transformed entity to entities before transforming props * so that props referencing currently transformed entity can be resolved. */ cpstate->entities = lappend(cpstate->entities, entity); entities = lappend(entities, entity); /* transform the properties if they exist */ if (node->props) { Node *n = NULL; Node *prop_var = NULL; Node *prop_expr = NULL; /* * We need to build a transformed properties(prop_var) * expression IF the properties variable already exists from a * previous clause. Please note that the "found" prop_var was * previously transformed. */ /* get the prop_var if it was previously resolved */ if (node->name != NULL) { prop_var = colNameToVar(pstate, node->name, false, node->location); } /* * If prop_var exists and is an alias, just pass it through by * assigning the prop_expr the prop_var. */ if (prop_var != NULL && pg_strncasecmp(node->name, AGE_DEFAULT_ALIAS_PREFIX, strlen(AGE_DEFAULT_ALIAS_PREFIX)) == 0) { prop_expr = prop_var; } /* * Else, if it exists and is not an alias, create the prop_expr * as a transformed properties(prop_var) function node. */ else if (prop_var != NULL) { /* * Remember that prop_var is already transformed. We need * to built the transform manually. */ FuncCall *fc = NULL; List *targs = NIL; List *fname = NIL; targs = lappend(targs, prop_var); fname = list_make2(makeString("ag_catalog"), makeString("age_properties")); fc = makeFuncCall(fname, targs, COERCE_SQL_SYNTAX, -1); /* * Hand off to ParseFuncOrColumn to create the function * expression for properties(prop_var) */ prop_expr = ParseFuncOrColumn(pstate, fname, targs, pstate->p_last_srf, fc, false, -1); } ((cypher_map*)node->props)->keep_null = true; n = create_property_constraints(cpstate, entity, node->props, prop_expr); cpstate->property_constraint_quals = lappend(cpstate->property_constraint_quals, n); } prev_entity = entity; } /* odd increments of i are edges */ else { cypher_relationship *rel = NULL; rel = lfirst(lc); if (rel->name && path->var_name && strcmp(rel->name, path->var_name) == 0) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("variable \"%s\" is for a path", rel->name), parser_errposition(pstate, rel->location))); } /* * There are 2 edge cases - 1) a regular edge and 2) a VLE edge. * A VLE edge is not added like a regular edge - it is a function. */ /* if it is a regular edge */ if (rel->varlen == NULL) { /* * In the case where the MATCH is one edge and two vertices, the * edge is bidirectional, and neither vertex is included in the * join tree, we need to force one of the vertices into the join * tree to ensure the output is generated correctly. */ if (list_length(path->path) == 3 && rel->dir == CYPHER_REL_DIR_NONE && !prev_entity->in_join_tree) { cypher_node *node = (cypher_node *)lfirst(lnext(path->path, lc)); if (!INCLUDE_NODE_IN_JOIN_TREE(path, node)) { /* * Assigning a variable name here will ensure that when * the next vertex is processed, the vertex will be * included in the join tree. */ node->name = get_next_default_alias(cpstate); } } expr = transform_cypher_edge(cpstate, rel, &query->targetList, valid_label); entity = make_transform_entity(cpstate, ENT_EDGE, (Node *)rel, expr); /* * We want to add transformed entity to entities before transforming props * so that props referencing currently transformed entity can be resolved. */ cpstate->entities = lappend(cpstate->entities, entity); entities = lappend(entities, entity); if (rel->props) { Node *r = NULL; Node *prop_var = NULL; Node *prop_expr = NULL; /* * We need to build a transformed properties(prop_var) * expression IF the properties variable already exists from * a previous clause. Please note that the "found" prop_var * was previously transformed. */ /* get the prop_var if it was previously resolved */ if (rel->name != NULL) { prop_var = colNameToVar(pstate, rel->name, false, rel->location); } /* * If prop_var exists and is an alias, just pass it through by * assigning the prop_expr the prop_var. */ if (prop_var != NULL && pg_strncasecmp(rel->name, AGE_DEFAULT_ALIAS_PREFIX, strlen(AGE_DEFAULT_ALIAS_PREFIX)) == 0) { prop_expr = prop_var; } /* * Else, if it exists and is not an alias, create the prop_expr * as a transformed properties(prop_var) function node. */ else if (prop_var != NULL) { /* * Remember that prop_var is already transformed. We need * to built the transform manually. */ FuncCall *fc = NULL; List *targs = NIL; List *fname = NIL; targs = lappend(targs, prop_var); fname = list_make2(makeString("ag_catalog"), makeString("age_properties")); fc = makeFuncCall(fname, targs, COERCE_SQL_SYNTAX, -1); /* * Hand off to ParseFuncOrColumn to create the function * expression for properties(prop_var) */ prop_expr = ParseFuncOrColumn(pstate, fname, targs, pstate->p_last_srf, fc, false, -1); } ((cypher_map*)rel->props)->keep_null = true; r = create_property_constraints(cpstate, entity, rel->props, prop_expr); cpstate->property_constraint_quals = lappend(cpstate->property_constraint_quals, r); } prev_entity = entity; } /* if we have a VLE edge */ else { transform_entity *vle_entity = NULL; /* * Check to see if the previous node was originally created * in a preceding clause. If it was, then remove the id field * from the column ref. Just reference the agtype vertex * variable that the prev clause created and the vle will handle * extracting the id. */ if (node_declared_in_prev_clause) { FuncCall *func = (FuncCall*)rel->varlen; ColumnRef *cr = linitial(func->args); Assert(IsA(cr, ColumnRef)); Assert(list_length(cr->fields) == 2); cr->fields = list_make1(linitial(cr->fields)); } /* make a transform entity for the vle */ vle_entity = transform_VLE_edge_entity(cpstate, rel, query); /* add the entity in */ cpstate->entities = lappend(cpstate->entities, vle_entity); entities = lappend(entities, vle_entity); prev_entity = entity; } node_declared_in_prev_clause = false; } i++; } return entities; } /* * Iterate through the list of entities setup the join conditions. Joins * are driven through edges. To correctly setup the joins, we must * acquire information about the previous edge and vertex, and the next * edge and vertex. */ static List *make_path_join_quals(cypher_parsestate *cpstate, List *entities) { transform_entity *prev_node = NULL, *prev_edge = NULL, *edge = NULL, *next_node = NULL, *next_edge = NULL; ListCell *lc; List *quals = NIL; List *join_quals; // for vertex only queries, there is no work to do if (list_length(entities) < 3) { return NIL; } lc = list_head(entities); for (;;) { /* * Initial setup, set the initial vertex as the previous vertex * and get the first edge */ if (prev_node == NULL) { prev_node = lfirst(lc); lc = lnext(entities, lc); edge = lfirst(lc); } // Retrieve the next node and edge in the pattern. if (lnext(entities, lc) != NULL) { lc = lnext(entities, lc); next_node = lfirst(lc); if (lnext(entities, lc) != NULL) { lc = lnext(entities, lc); next_edge = lfirst(lc); } } // create the join quals for the node join_quals = make_join_condition_for_edge(cpstate, prev_edge, prev_node, edge, next_node, next_edge); quals = list_concat(quals, join_quals); /* Set the edge as the previous edge and the next edge as * the current edge. If there is not a new edge, exit the * for loop. */ prev_edge = edge; prev_node = next_node; edge = next_edge; next_node = NULL; next_edge = NULL; if (edge == NULL) { return quals; } } } /* * Create the path variable. Takes the list of entities, extracts the variable * and passes as the argument list for the _agtype_build_path function. */ static TargetEntry * transform_match_create_path_variable(cypher_parsestate *cpstate, cypher_path *path, List *entities) { ParseState *pstate = (ParseState *)cpstate; Oid build_path_oid = InvalidOid; Expr *expr = NULL; int resno = -1; List *entity_exprs = NIL; ListCell *lc = NULL; bool null_path_entity = false; if (list_length(entities) < 1) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("paths require at least 1 vertex"), parser_errposition(pstate, path->location))); } /* extract the expr for each entity */ foreach (lc, entities) { transform_entity *entity = lfirst(lc); if (entity->expr != NULL) { /* * Is it a NULL constant, meaning there was an invalid label? * If so, flag it for later */ if (IsA(entity->expr, Const) && ((Const*)(entity->expr))->constisnull) { null_path_entity = true; } entity_exprs = lappend(entity_exprs, entity->expr); } } /* get the oid for the path creation function */ build_path_oid = get_ag_func_oid("_agtype_build_path", 1, ANYOID); /* * If we have a NULL in the path, there is an invalid label, so there aren't * any paths to be selected - the path variable will be NULL. In this case * we need to return a NULL constant instead. */ if (null_path_entity) { expr = (Expr*)makeNullConst(AGTYPEOID, -1, InvalidOid); } /* otherwise, build the expr node for the function */ else { transform_entity *entity; expr = (Expr*)makeFuncExpr(build_path_oid, AGTYPEOID, entity_exprs, InvalidOid, InvalidOid, COERCE_EXPLICIT_CALL); entity = make_transform_entity(cpstate, ENT_PATH, (Node *)path, expr); cpstate->entities = lappend(cpstate->entities, entity); } resno = cpstate->pstate.p_next_resno++; /* create the target entry */ return makeTargetEntry(expr, resno, path->var_name, false); } /* * Maps a column name to the a function access name. In others word when * passed the name for the vertex's id column name, return the function name * for the vertex's agtype id element, etc. */ static char *get_accessor_function_name(enum transform_entity_type type, char *name) { if (type == ENT_VERTEX) { // id if (!strcmp(AG_VERTEX_COLNAME_ID, name)) { return AG_VERTEX_ACCESS_FUNCTION_ID; } // props else if (!strcmp(AG_VERTEX_COLNAME_PROPERTIES, name)) { return AG_VERTEX_ACCESS_FUNCTION_PROPERTIES; } } if (type == ENT_EDGE) { // id if (!strcmp(AG_EDGE_COLNAME_ID, name)) { return AG_EDGE_ACCESS_FUNCTION_ID; } // start id else if (!strcmp(AG_EDGE_COLNAME_START_ID, name)) { return AG_EDGE_ACCESS_FUNCTION_START_ID; } // end id else if (!strcmp(AG_EDGE_COLNAME_END_ID, name)) { return AG_EDGE_ACCESS_FUNCTION_END_ID; } // props else if (!strcmp(AG_VERTEX_COLNAME_PROPERTIES, name)) { return AG_VERTEX_ACCESS_FUNCTION_PROPERTIES; } } ereport(ERROR, (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), errmsg("column %s does not have an accessor function", name))); // keeps compiler silent return NULL; } /* * For the given entity and column name, construct an expression that will * access the column or get the access function if the entity is a variable. */ static Node *make_qual(cypher_parsestate *cpstate, transform_entity *entity, char *col_name) { List *qualified_name, *args; Node *node; if (IsA(entity->expr, Var)) { char *function_name; function_name = get_accessor_function_name(entity->type, col_name); qualified_name = list_make2(makeString("ag_catalog"), makeString(function_name)); args = list_make1(entity->expr); node = (Node *)makeFuncCall(qualified_name, args, COERCE_EXPLICIT_CALL, -1); } else { char *entity_name; ColumnRef *cr = makeNode(ColumnRef); if (entity->type == ENT_EDGE) { entity_name = entity->entity.node->name; } else if (entity->type == ENT_VERTEX) { entity_name = entity->entity.rel->name; } else { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("unknown entity type"))); } cr->fields = list_make2(makeString(entity_name), makeString(col_name)); node = (Node *)cr; } return node; } static Expr *transform_cypher_edge(cypher_parsestate *cpstate, cypher_relationship *rel, List **target_list, bool valid_label) { ParseState *pstate = (ParseState *)cpstate; char *schema_name = NULL; char *rel_name = NULL; RangeVar *label_range_var = NULL; Alias *alias = NULL; int resno = -1; TargetEntry *te = NULL; transform_entity *entity = NULL; cypher_relationship *cr = NULL; Node *expr = NULL; Var *previous_clause_var = NULL; bool refs_var = false; ParseNamespaceItem *pnsi = NULL; /* * If we have an edge name, get any potential variable or column * references. Additionally, verify that they are for edges. */ if (rel->name != NULL) { te = findTarget(*target_list, rel->name); entity = find_variable(cpstate, rel->name); previous_clause_var = (Var *)colNameToVar(pstate, rel->name, false, rel->location); /* * If we have a valid entity and te for this rel name, go ahead and get * the cypher relationship as we will need this for later and flag that * we have a variable reference. */ if ((te != NULL && entity != NULL) || (entity != NULL && previous_clause_var != NULL)) { cr = (cypher_relationship *)entity->entity.rel; refs_var = true; } /* If the variable already exists, verify that it is for an edge */ if (refs_var) { if (entity->type == ENT_VERTEX) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("variable '%s' is for a vertex", rel->name), parser_errposition(pstate, rel->location))); } else if (entity->type == ENT_VLE_EDGE) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("variable '%s' is for a VLE edge", rel->name), parser_errposition(pstate, rel->location))); } else if (entity->type == ENT_PATH && pstate->p_expr_kind != EXPR_KIND_SELECT_TARGET) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("variable '%s' is for a path", rel->name), parser_errposition(pstate, rel->location))); } } else if (te && !entity) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("variable '%s' already exists", rel->name), parser_errposition(pstate, rel->location))); } } /* * If we do not have a label for this edge, we either need to find one * from a referenced variable or we need to set it to the default label. */ if (rel->label == NULL) { /* if there is a variable for this rel name */ if (refs_var) { /* * If the referenced var has a non NULL label, copy it. This is * usually the case when it uses a variable that is already defined. * Fx - * * MATCH (u:people)-[e:knows]->(v:people), (v)-[e]->(u) RETURN e * MATCH (u:people)-[]->()-[]->(u) RETURN u * * We copy it so that we know what label it is referencing. */ if (cr->parsed_label != NULL) { rel->parsed_label = cr->parsed_label; rel->label = cr->label; } else { rel->label = AG_DEFAULT_LABEL_EDGE; } } /* otherwise, just give it the default label */ else { rel->label = AG_DEFAULT_LABEL_EDGE; } } /* if we do have a label, is it valid */ else if (!valid_label) { /* * XXX: Need to determine proper rules, for when label does not exist * or is for an vertex. Maybe labels and edges should share names, like * in openCypher. But these are stand in errors, to prevent * segmentation faults, and other errors. * * Update: Nonexistent and mismatched labels now return a NULL value to * prevent segmentation faults, and other errors. We can also consider * if an all-purpose label would be useful. */ rel->label = NULL; } /* * Variables for edges are not allowed to be used multiple times within the * same clause. */ if (previous_clause_var == NULL && refs_var) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("duplicate edge variable '%s' within a clause", rel->name), parser_errposition(pstate, rel->location))); } /* * If this edge uses a variable that already exists, verify that the label * names are the same. */ if (refs_var && (cr->parsed_label != NULL || rel->parsed_label != NULL) && (cr->parsed_label == NULL || rel->parsed_label == NULL || (strcmp(cr->parsed_label, rel->parsed_label) != 0))) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("multiple labels for variable '%s' are not supported", rel->name), parser_errposition(pstate, rel->location))); } /* * Now we need to do a few checks and either return the existing var or * or build a new edge. */ if (rel->name != NULL) { /* * If we are in a WHERE clause transform, we don't want to create new * variables, we want to use the existing ones. So, error if otherwise. */ if (pstate->p_expr_kind == EXPR_KIND_WHERE) { cypher_parsestate *parent_cpstate = (cypher_parsestate *)pstate->parentParseState->parentParseState; /* * If expr_kind is WHERE, the expressions are in the parent's * parent's parsestate, due to the way we transform sublinks. */ transform_entity *tentity = NULL; /* if we have the referenced var, just return it */ if (previous_clause_var != NULL) { return (Expr *)previous_clause_var; } tentity = find_variable(parent_cpstate, rel->name); if (tentity != NULL) { return get_relative_expr(tentity, 2); } else { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("variable `%s` does not exist", rel->name), parser_errposition(pstate, rel->location))); } } /* if this vertex is referencing an existing te var, return its expr */ if (refs_var) { return (te != NULL) ? te->expr : (Expr *)previous_clause_var; } } /* if we aren't using a variable, build the edge */ if (!rel->name) { rel->name = get_next_default_alias(cpstate); } schema_name = get_graph_namespace_name(cpstate->graph_name); if (valid_label) { rel_name = get_label_relation_name(rel->label, cpstate->graph_oid); } else { rel_name = AG_DEFAULT_LABEL_EDGE; } label_range_var = makeRangeVar(schema_name, rel_name, -1); alias = makeAlias(rel->name, NIL); pnsi = addRangeTableEntry(pstate, label_range_var, alias, label_range_var->inh, true); Assert(pnsi != NULL); /* * relation is visible (r.a in expression works) but attributes in the * relation are not visible (a in expression doesn't work) */ addNSItemToQuery(pstate, pnsi, true, true, false); resno = pstate->p_next_resno++; if (valid_label) { expr = make_edge_expr(cpstate, pnsi); } else { expr = (Node *)makeNullConst(AGTYPEOID, -1, InvalidOid); } if (rel->name) { te = makeTargetEntry((Expr *)expr, resno, rel->name, false); *target_list = lappend(*target_list, te); } return (Expr *)expr; } static Expr *transform_cypher_node(cypher_parsestate *cpstate, cypher_node *node, List **target_list, bool output_node, bool valid_label) { ParseState *pstate = (ParseState *)cpstate; char *schema_name = NULL; char *rel_name = NULL; RangeVar *label_range_var = NULL; Alias *alias = NULL; int resno = -1; TargetEntry *te = NULL; Expr *expr = NULL; transform_entity *entity = NULL; cypher_node *cn = NULL; bool refs_var = false; ParseNamespaceItem *pnsi = NULL; Var *previous_clause_var = NULL; /* if we have a node name, get any potential variable references */ if (node->name != NULL) { te = findTarget(*target_list, node->name); entity = find_variable(cpstate, node->name); previous_clause_var = (Var *)colNameToVar(pstate, node->name, false, node->location); /* * If we have a valid entity and te or a valid entity and a previous var * ref for this rel name, go ahead and get the cypher relationship. We * will need this information for later. Additionally, flag that we have * a variable reference. */ if ((te != NULL && entity != NULL) || (entity != NULL && previous_clause_var != NULL)) { cn = (cypher_node *)entity->entity.node; refs_var = true; } /* If the variable already exists, verify that it is for a vertex */ if (refs_var) { if (entity->type == ENT_EDGE) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("variable '%s' is for an edge", node->name), parser_errposition(pstate, node->location))); } else if (entity->type == ENT_VLE_EDGE) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("variable '%s' is for a VLE edge", node->name), parser_errposition(pstate, node->location))); } /* gets non EXISTS cases */ else if (entity->type == ENT_PATH && pstate->p_expr_kind != EXPR_KIND_SELECT_TARGET) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("variable '%s' is for a path", node->name), parser_errposition(pstate, node->location))); } /* gets EXISTS cases */ else if (entity->type == ENT_PATH && pstate->p_expr_kind == EXPR_KIND_SELECT_TARGET) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("a path variable '%s' is not allowed here", node->name), parser_errposition(pstate, node->location))); } } /* If their is a te but no entity, it implies that their is * some variable that exists but not an edge,vle or a vertex */ else if (te && !entity) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("variable '%s' already exists", node->name), parser_errposition(pstate, node->location))); } } /* * If we do not have a label for this vertex, we either need to find one * from a referenced variable or we need to set it to the default label. */ if (node->label == NULL) { if (refs_var) { /* * If the referenced var has a non NULL label, copy it. This is * usually the case when it uses a variable that is already defined. * Fx - * * MATCH (u:people)-[e:knows]->(v:people), (v)-[e]->(u) RETURN e * MATCH (u:people)-[]->()-[]->(u) RETURN u * * We copy it so that we know what label it is referencing. */ if (cn->parsed_label != NULL) { node->parsed_label = cn->parsed_label; node->label = cn->label; } else { node->label = AG_DEFAULT_LABEL_VERTEX; } } /* otherwise, just give it the default label */ else { node->label = AG_DEFAULT_LABEL_VERTEX; } } /* if we do have a label, is it valid */ else if (!valid_label) { /* * XXX: Need to determine proper rules, for when label does not exist * or is for an edge. Maybe labels and edges should share names, like * in openCypher. But these are stand in errors, to prevent * segmentation faults, and other errors. * * Update: Nonexistent and mismatched labels now return a NULL value to * prevent segmentation faults, and other errors. We can also consider * if an all-purpose label would be useful. */ node->label = NULL; } /* * If this vertex uses a variable that already exists, verify that the label * being used is of the same name. */ if (refs_var && (cn->parsed_label != NULL || node->parsed_label != NULL) && (cn->parsed_label == NULL || node->parsed_label == NULL || (strcmp(cn->parsed_label, node->parsed_label) != 0))) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("multiple labels for variable '%s' are not supported", node->name), parser_errposition(pstate, node->location))); } /* if it is not an output node, just return null */ if (!output_node) { return NULL; } /* * Now we need to do a few checks and either return the existing var or * or build a new vertex. */ if (node->name != NULL) { Node *expr = NULL; /* * If we are in a WHERE clause transform, we don't want to create new * variables, we want to use the existing ones. So, error if otherwise. */ if (pstate->p_expr_kind == EXPR_KIND_WHERE) { cypher_parsestate *parent_cpstate = (cypher_parsestate *)pstate->parentParseState->parentParseState; /* * If expr_kind is WHERE, the expressions are in the parent's * parent's parsestate, due to the way we transform sublinks. */ transform_entity *tentity = NULL; /* if we have the referenced var, just return it */ if (previous_clause_var != NULL) { return (Expr *)previous_clause_var; } tentity = find_variable(parent_cpstate, node->name); if (tentity != NULL) { return get_relative_expr(tentity, 2); } else { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("variable `%s` does not exist", node->name), parser_errposition(pstate, node->location))); } } /* if this vertex is referencing an existing var, return its expr */ if (refs_var) { return (te != NULL) ? te->expr : (Expr *)previous_clause_var; } /* if this vertex is referencing an existing col var, return its expr */ expr = colNameToVar(pstate, node->name, false, node->location); if (expr != NULL) { return (Expr*)expr; } } else { node->name = get_next_default_alias(cpstate); } /* now build a new vertex */ schema_name = get_graph_namespace_name(cpstate->graph_name); if (valid_label) { rel_name = get_label_relation_name(node->label, cpstate->graph_oid); } else { rel_name = AG_DEFAULT_LABEL_VERTEX; } label_range_var = makeRangeVar(schema_name, rel_name, -1); alias = makeAlias(node->name, NIL); pnsi = addRangeTableEntry(pstate, label_range_var, alias, label_range_var->inh, true); Assert(pnsi != NULL); /* * relation is visible (r.a in expression works) but attributes in the * relation are not visible (a in expression doesn't work) */ addNSItemToQuery(pstate, pnsi, true, true, true); resno = pstate->p_next_resno++; if (valid_label) { expr = (Expr *)make_vertex_expr(cpstate, pnsi); } else { expr = (Expr*)makeNullConst(AGTYPEOID, -1, InvalidOid); } /* make target entry and add it */ te = makeTargetEntry(expr, resno, node->name, false); *target_list = lappend(*target_list, te); return expr; } static Node *make_edge_expr(cypher_parsestate *cpstate, ParseNamespaceItem *pnsi) { ParseState *pstate = (ParseState *)cpstate; Oid label_name_func_oid; Oid func_oid; Node *id, *start_id, *end_id; Const *graph_oid_const; Node *props; List *args, *label_name_args; FuncExpr *func_expr; FuncExpr *label_name_func_expr; func_oid = get_ag_func_oid("_agtype_build_edge", 5, GRAPHIDOID, GRAPHIDOID, GRAPHIDOID, CSTRINGOID, AGTYPEOID); id = scanNSItemForColumn(pstate, pnsi, 0, AG_EDGE_COLNAME_ID, -1); start_id = scanNSItemForColumn(pstate, pnsi, 0, AG_EDGE_COLNAME_START_ID, -1); end_id = scanNSItemForColumn(pstate, pnsi, 0, AG_EDGE_COLNAME_END_ID, -1); label_name_func_oid = get_ag_func_oid("_label_name", 2, OIDOID, GRAPHIDOID); graph_oid_const = makeConst(OIDOID, -1, InvalidOid, sizeof(Oid), ObjectIdGetDatum(cpstate->graph_oid), false, true); label_name_args = list_make2(graph_oid_const, id); label_name_func_expr = makeFuncExpr(label_name_func_oid, CSTRINGOID, label_name_args, InvalidOid, InvalidOid, COERCE_EXPLICIT_CALL); label_name_func_expr->location = -1; props = scanNSItemForColumn(pstate, pnsi, 0, AG_EDGE_COLNAME_PROPERTIES, -1); args = list_make4(id, start_id, end_id, label_name_func_expr); args = lappend(args, props); func_expr = makeFuncExpr(func_oid, AGTYPEOID, args, InvalidOid, InvalidOid, COERCE_EXPLICIT_CALL); func_expr->location = -1; return (Node *)func_expr; } static Node *make_vertex_expr(cypher_parsestate *cpstate, ParseNamespaceItem *pnsi) { ParseState *pstate = (ParseState *)cpstate; Oid label_name_func_oid; Oid func_oid; Node *id; Const *graph_oid_const; Node *props; List *args, *label_name_args; FuncExpr *func_expr; FuncExpr *label_name_func_expr; Assert(pnsi != NULL); func_oid = get_ag_func_oid("_agtype_build_vertex", 3, GRAPHIDOID, CSTRINGOID, AGTYPEOID); id = scanNSItemForColumn(pstate, pnsi, 0, AG_VERTEX_COLNAME_ID, -1); label_name_func_oid = get_ag_func_oid("_label_name", 2, OIDOID, GRAPHIDOID); graph_oid_const = makeConst(OIDOID, -1, InvalidOid, sizeof(Oid), ObjectIdGetDatum(cpstate->graph_oid), false, true); label_name_args = list_make2(graph_oid_const, id); label_name_func_expr = makeFuncExpr(label_name_func_oid, CSTRINGOID, label_name_args, InvalidOid, InvalidOid, COERCE_EXPLICIT_CALL); label_name_func_expr->location = -1; props = scanNSItemForColumn(pstate, pnsi, 0, AG_VERTEX_COLNAME_PROPERTIES, -1); args = list_make3(id, label_name_func_expr, props); func_expr = makeFuncExpr(func_oid, AGTYPEOID, args, InvalidOid, InvalidOid, COERCE_EXPLICIT_CALL); func_expr->location = -1; return (Node *)func_expr; } static Query *transform_cypher_create(cypher_parsestate *cpstate, cypher_clause *clause) { ParseState *pstate = (ParseState *)cpstate; cypher_create *self = (cypher_create *)clause->self; cypher_create_target_nodes *target_nodes; Const *null_const; List *transformed_pattern; FuncExpr *func_expr; Query *query; TargetEntry *tle; target_nodes = make_ag_node(cypher_create_target_nodes); target_nodes->flags = CYPHER_CLAUSE_FLAG_NONE; target_nodes->graph_oid = cpstate->graph_oid; query = makeNode(Query); query->commandType = CMD_SELECT; query->targetList = NIL; if (clause->prev) { handle_prev_clause(cpstate, query, clause->prev, true); target_nodes->flags |= CYPHER_CLAUSE_FLAG_PREVIOUS_CLAUSE; } null_const = makeNullConst(AGTYPEOID, -1, InvalidOid); tle = makeTargetEntry((Expr *)null_const, pstate->p_next_resno++, AGE_VARNAME_CREATE_NULL_VALUE, false); query->targetList = lappend(query->targetList, tle); /* * Create the Const Node to hold the pattern. skip the parse node, * because we would not be able to control how our pointer to the * internal type is copied. */ transformed_pattern = transform_cypher_create_pattern(cpstate, query, self->pattern); target_nodes->paths = transformed_pattern; if (!clause->next) { target_nodes->flags |= CYPHER_CLAUSE_FLAG_TERMINAL; } func_expr = make_clause_func_expr(CREATE_CLAUSE_FUNCTION_NAME, (Node *)target_nodes); // Create the target entry tle = makeTargetEntry((Expr *)func_expr, pstate->p_next_resno++, AGE_VARNAME_CREATE_CLAUSE, false); query->targetList = lappend(query->targetList, tle); query->rtable = pstate->p_rtable; query->rteperminfos = pstate->p_rteperminfos; query->jointree = makeFromExpr(pstate->p_joinlist, NULL); return query; } static List *transform_cypher_create_pattern(cypher_parsestate *cpstate, Query *query, List *pattern) { ListCell *lc; List *transformed_pattern = NIL; foreach (lc, pattern) { cypher_create_path *transformed_path; transformed_path = transform_cypher_create_path(cpstate, &query->targetList, lfirst(lc)); transformed_pattern = lappend(transformed_pattern, transformed_path); } return transformed_pattern; } static cypher_create_path * transform_cypher_create_path(cypher_parsestate *cpstate, List **target_list, cypher_path *path) { ParseState *pstate = (ParseState *)cpstate; ListCell *lc; List *transformed_path = NIL; cypher_create_path *ccp = make_ag_node(cypher_create_path); bool in_path = path->var_name != NULL; ccp->path_attr_num = InvalidAttrNumber; if (in_path) { if (findTarget(*target_list, path->var_name) != NULL) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("variable \"%s\" already exists", path->var_name), parser_errposition(pstate, path->location))); } } foreach (lc, path->path) { if (is_ag_node(lfirst(lc), cypher_node)) { cypher_node *node = lfirst(lc); transform_entity *entity; cypher_target_node *rel = transform_create_cypher_node(cpstate, target_list, node); if (in_path) { if (node->name && strcmp(node->name, path->var_name) == 0) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("variable \"%s\" already exists", path->var_name), parser_errposition(pstate, path->location))); } rel->flags |= CYPHER_TARGET_NODE_IN_PATH_VAR; } transformed_path = lappend(transformed_path, rel); entity = make_transform_entity(cpstate, ENT_VERTEX, (Node *)node, NULL); cpstate->entities = lappend(cpstate->entities, entity); } else if (is_ag_node(lfirst(lc), cypher_relationship)) { cypher_relationship *edge = lfirst(lc); transform_entity *entity; cypher_target_node *rel = transform_create_cypher_edge(cpstate, target_list, edge); if (in_path) { if (edge->name && strcmp(edge->name, path->var_name) == 0) { ereport(ERROR, (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("variable \"%s\" already exists", path->var_name), parser_errposition(pstate, path->location))); } rel->flags |= CYPHER_TARGET_NODE_IN_PATH_VAR; } transformed_path = lappend(transformed_path, rel); entity = make_transform_entity(cpstate, ENT_EDGE, (Node *)edge, NULL); cpstate->entities = lappend(cpstate->entities, entity); } else { ereport(ERROR, (errmsg_internal("unrecognized node in create pattern"))); } } ccp->target_nodes = transformed_path; /* * If this path a variable, create a placeholder entry that we can fill * in with during the execution phase. */ if (path->var_name) { TargetEntry *te; if (list_length(transformed_path) < 1) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("paths require at least 1 vertex"), parser_errposition(pstate, path->location))); } te = placeholder_target_entry(cpstate, path->var_name); ccp->path_attr_num = te->resno; *target_list = lappend(*target_list, te); } return ccp; } static cypher_target_node * transform_create_cypher_edge(cypher_parsestate *cpstate, List **target_list, cypher_relationship *edge) { ParseState *pstate = (ParseState *)cpstate; cypher_target_node *rel = make_ag_node(cypher_target_node); Expr *props; Relation label_relation; RangeVar *rv; RTEPermissionInfo *rte_pi; TargetEntry *te; char *alias; AttrNumber resno; ParseNamespaceItem *pnsi; if (edge->label) { if (get_label_kind(edge->label, cpstate->graph_oid) == LABEL_KIND_VERTEX) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("label %s is for vertices, not edges", edge->label), parser_errposition(pstate, edge->location))); } } rel->type = LABEL_KIND_EDGE; rel->flags = CYPHER_TARGET_NODE_FLAG_INSERT; rel->label_name = edge->label; rel->resultRelInfo = NULL; if (edge->name) { /* * Variables can be declared in a CREATE clause, but not used if * it already exists. */ transform_entity *entity; entity = find_variable(cpstate, edge->name); if ((entity && entity->type != ENT_EDGE) || variable_exists(cpstate, edge->name)) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("variable %s already exists", edge->name), parser_errposition(pstate, edge->location))); } rel->variable_name = edge->name; te = placeholder_target_entry(cpstate, edge->name); rel->tuple_position = te->resno; *target_list = lappend(*target_list, te); rel->flags |= CYPHER_TARGET_NODE_IS_VAR; } else { rel->variable_name = NULL; rel->tuple_position = 0; } if (edge->dir == CYPHER_REL_DIR_NONE) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("only directed relationships are allowed in CREATE"), parser_errposition(&cpstate->pstate, edge->location))); } rel->dir = edge->dir; if (!edge->label) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("relationships must be specify a label in CREATE."), parser_errposition(&cpstate->pstate, edge->location))); } // create the label entry if it does not exist if (!label_exists(edge->label, cpstate->graph_oid)) { List *parent; rv = get_label_range_var(cpstate->graph_name, cpstate->graph_oid, AG_DEFAULT_LABEL_EDGE); parent = list_make1(rv); create_label(cpstate->graph_name, edge->label, LABEL_TYPE_EDGE, parent); } // lock the relation of the label rv = makeRangeVar(cpstate->graph_name, edge->label, -1); label_relation = parserOpenTable(&cpstate->pstate, rv, RowExclusiveLock); // Store the relid rel->relid = RelationGetRelid(label_relation); pnsi = addRangeTableEntryForRelation((ParseState *)cpstate, label_relation, AccessShareLock, NULL, false, false); rte_pi = pnsi->p_perminfo; rte_pi->requiredPerms = ACL_INSERT; // Build Id expression, always use the default logic rel->id_expr = (Expr *)build_column_default(label_relation, Anum_ag_label_edge_table_id); // Build properties expression, if no map is given, use the default logic alias = get_next_default_alias(cpstate); resno = pstate->p_next_resno++; props = cypher_create_properties(cpstate, rel, label_relation, edge->props, ENT_EDGE); rel->prop_attr_num = resno - 1; te = makeTargetEntry(props, resno, alias, false); *target_list = lappend(*target_list, te); // Keep the lock table_close(label_relation, NoLock); return rel; } static bool variable_exists(cypher_parsestate *cpstate, char *name) { ParseState *pstate = (ParseState *)cpstate; Node *id; ParseNamespaceItem *pnsi; if (name == NULL) { return false; } pnsi = find_pnsi(cpstate, PREV_CYPHER_CLAUSE_ALIAS); if (pnsi) { id = scanNSItemForColumn(pstate, pnsi, 0, name, -1); return id != NULL; } return false; } // transform nodes, check to see if the variable name already exists. static cypher_target_node * transform_create_cypher_node(cypher_parsestate *cpstate, List **target_list, cypher_node *node) { ParseState *pstate = (ParseState *)cpstate; if (node->label) { if (get_label_kind(node->label, cpstate->graph_oid) == LABEL_KIND_EDGE) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("label %s is for edges, not vertices", node->label), parser_errposition(pstate, node->location))); } } /* * Check if the variable already exists, if so find the entity and * setup the target node */ if (node->name) { transform_entity *entity; TargetEntry *te = findTarget(*target_list, node->name); entity = find_variable(cpstate, node->name); /* * If we find an entity as well as a target Entry with same name, * that means that the variable is either vertex, edge or vle. * but if we find a target entry but not an entity that means * that the variable can be other than vertex, edge or vle e.g path. */ if (entity && te) { if (entity->type != ENT_VERTEX) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("variable %s already exists", node->name), parser_errposition(pstate, node->location))); } return transform_create_cypher_existing_node(cpstate, target_list, entity->declared_in_current_clause, node); } else if (te) { /* * Here we are not sure if the te is a vertex, path or something * else. So we will let it pass and the execution stage will catch * the error if variable was not vertex. */ return transform_create_cypher_existing_node(cpstate, target_list, te, node); } } // otherwise transform the target node as a new node return transform_create_cypher_new_node(cpstate, target_list, node); } /* * Returns the resno for the TargetEntry with the resname equal to the name * passed. Returns -1 otherwise. */ static int get_target_entry_resno(List *target_list, char *name) { ListCell *lc; foreach (lc, target_list) { TargetEntry *te = (TargetEntry *)lfirst(lc); if (!strcmp(te->resname, name)) { return te->resno; } } return -1; } /* adds the volatile wrapper to the specified target entry */ static void add_volatile_wrapper_to_target_entry(List *target_list, int resno) { ListCell *lc; Assert(target_list != NULL); Assert(resno >= 0); /* find the resource */ foreach (lc, target_list) { TargetEntry *te = (TargetEntry *)lfirst(lc); if (te->resno == resno) { /* wrap it */ te->expr = add_volatile_wrapper(te->expr); return; } } /* if we didn't find anything, there was a problem */ ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("add_volatile_wrapper_to_target_entry: resno not found"))); } /* * Transform logic for a previously declared variable in a CREATE clause. * All we need from the variable node is its id, and whether we can skip * some tests in the execution phase.. */ static cypher_target_node *transform_create_cypher_existing_node( cypher_parsestate *cpstate, List **target_list, bool declared_in_current_clause, cypher_node *node) { cypher_target_node *rel = make_ag_node(cypher_target_node); ParseState *pstate = (ParseState *)cpstate; rel->type = LABEL_KIND_VERTEX; rel->flags = CYPHER_TARGET_NODE_FLAG_NONE; rel->resultRelInfo = NULL; rel->variable_name = node->name; if (node->props) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("previously declared nodes in a create clause cannot have properties"), parser_errposition(pstate, node->location))); } if (node->label) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("previously declared variables cannot have a label"), parser_errposition(pstate, node->location))); } /* * When the variable is declared in the same clause this vertex is a part of * we can skip some expensive checks in the execution phase. */ if (declared_in_current_clause) { rel->flags |= EXISTING_VARIABLE_DECLARED_SAME_CLAUSE; } /* * Get the AttrNumber the variable is stored in, so we can extract the id * later. */ rel->tuple_position = get_target_entry_resno(*target_list, node->name); add_volatile_wrapper_to_target_entry(*target_list, rel->tuple_position); return rel; } /* * Transform logic for a node in a create clause that was not previously * declared. */ static cypher_target_node * transform_create_cypher_new_node(cypher_parsestate *cpstate, List **target_list, cypher_node *node) { ParseState *pstate = (ParseState *)cpstate; cypher_target_node *rel = make_ag_node(cypher_target_node); Relation label_relation; RangeVar *rv; RTEPermissionInfo *rte_pi; TargetEntry *te; Expr *props; char *alias; int resno; ParseNamespaceItem *pnsi; rel->type = LABEL_KIND_VERTEX; rel->tuple_position = InvalidAttrNumber; rel->variable_name = NULL; rel->resultRelInfo = NULL; if (!node->label) { rel->label_name = ""; /* * If no label is specified, assign the generic label name that * all labels are descendents of. */ node->label = AG_DEFAULT_LABEL_VERTEX; } else { rel->label_name = node->label; } // create the label entry if it does not exist if (!label_exists(node->label, cpstate->graph_oid)) { List *parent; rv = get_label_range_var(cpstate->graph_name, cpstate->graph_oid, AG_DEFAULT_LABEL_VERTEX); parent = list_make1(rv); create_label(cpstate->graph_name, node->label, LABEL_TYPE_VERTEX, parent); } rel->flags = CYPHER_TARGET_NODE_FLAG_INSERT; rv = makeRangeVar(cpstate->graph_name, node->label, -1); label_relation = parserOpenTable(&cpstate->pstate, rv, RowExclusiveLock); // Store the relid rel->relid = RelationGetRelid(label_relation); pnsi = addRangeTableEntryForRelation((ParseState *)cpstate, label_relation, AccessShareLock, NULL, false, false); rte_pi = pnsi->p_perminfo; rte_pi->requiredPerms = ACL_INSERT; // id rel->id_expr = (Expr *)build_column_default(label_relation, Anum_ag_label_vertex_table_id); // properties alias = get_next_default_alias(cpstate); resno = pstate->p_next_resno++; props = cypher_create_properties(cpstate, rel, label_relation, node->props, ENT_VERTEX); rel->prop_attr_num = resno - 1; te = makeTargetEntry(props, resno, alias, false); *target_list = lappend(*target_list, te); table_close(label_relation, NoLock); if (node->name) { rel->variable_name = node->name; te = placeholder_target_entry(cpstate, node->name); rel->tuple_position = te->resno; *target_list = lappend(*target_list, te); rel->flags |= CYPHER_TARGET_NODE_IS_VAR; } else { node->name = get_next_default_alias(cpstate); } return rel; } /* * Variable Edges cannot be created until the executor phase, because we * don't know what their start and end node ids will be. Therefore, path * variables cannot be created either. Create a placeholder entry that we * will replace in the execution phase. Do this for nodes too, to be * consistent. */ static TargetEntry *placeholder_target_entry(cypher_parsestate *cpstate, char *name) { ParseState *pstate = (ParseState *)cpstate; Expr *n; int resno; n = (Expr *)makeNullConst(AGTYPEOID, -1, InvalidOid); n = add_volatile_wrapper(n); resno = pstate->p_next_resno++; return makeTargetEntry(n, resno, name, false); } /* * Build the target list for an entity that is not a previously declared * variable. */ static Expr *cypher_create_properties(cypher_parsestate *cpstate, cypher_target_node *rel, Relation label_relation, Node *props, enum transform_entity_type type) { Expr *properties; if (props != NULL && is_ag_node(props, cypher_param)) { ParseState *pstate = (ParseState *) cpstate; cypher_param *param = (cypher_param *)props; ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("properties in a CREATE clause as a parameter is not supported"), parser_errposition(pstate, param->location))); } if (props) { ((cypher_map*)props)->keep_null = false; properties = (Expr *)transform_cypher_expr(cpstate, props, EXPR_KIND_INSERT_TARGET); } else if (type == ENT_VERTEX) { properties = (Expr *)build_column_default( label_relation, Anum_ag_label_vertex_table_properties); } else if (type == ENT_EDGE) { properties = (Expr *)build_column_default( label_relation, Anum_ag_label_edge_table_properties); } else { ereport(ERROR, (errmsg_internal("unrecognized entity type"))); } // add a volatile wrapper call to prevent the optimizer from removing it return (Expr *)add_volatile_wrapper(properties); } /* * This function is similar to transformFromClause() that is called with a * single RangeSubselect. */ static ParseNamespaceItem * transform_cypher_clause_as_subquery(cypher_parsestate *cpstate, transform_method transform, cypher_clause *clause, Alias *alias, bool add_rte_to_query) { ParseState *pstate = (ParseState *)cpstate; Query *query; RangeTblEntry *rte; ParseExprKind old_expr_kind = pstate->p_expr_kind; bool lateral = pstate->p_lateral_active; ParseNamespaceItem *pnsi; /* * We allow expression kinds of none, where, and subselect. Others MAY need * to be added depending. However, at this time, only these are needed. */ Assert(pstate->p_expr_kind == EXPR_KIND_NONE || pstate->p_expr_kind == EXPR_KIND_OTHER || pstate->p_expr_kind == EXPR_KIND_WHERE || pstate->p_expr_kind == EXPR_KIND_SELECT_TARGET || pstate->p_expr_kind == EXPR_KIND_FROM_SUBSELECT); /* * As these are all sub queries, if this is just of type NONE, note it as a * SUBSELECT. Other types will be dealt with as needed. */ if (pstate->p_expr_kind == EXPR_KIND_NONE) { pstate->p_expr_kind = EXPR_KIND_FROM_SUBSELECT; } else if (pstate->p_expr_kind == EXPR_KIND_OTHER) { // this is a lateral subselect for the MERGE pstate->p_expr_kind = EXPR_KIND_FROM_SUBSELECT; lateral = true; } /* * If this is a WHERE, pass it through and set lateral to true because it * needs to see what comes before it. */ query = analyze_cypher_clause(transform, clause, cpstate); /* set pstate kind back */ pstate->p_expr_kind = old_expr_kind; if (alias == NULL) { alias = makeAlias(PREV_CYPHER_CLAUSE_ALIAS, NIL); } pnsi = addRangeTableEntryForSubquery(pstate, query, alias, lateral, true); rte = pnsi->p_rte; /* * NOTE: skip namespace conflicts check if the rte will be the only * RangeTblEntry in pstate */ if (list_length(pstate->p_rtable) > 1) { List *namespace = NULL; int rtindex = 0; /* get the index of the last entry */ rtindex = list_length(pstate->p_rtable); /* the rte at the end should be the rte just added */ if (rte != rt_fetch(rtindex, pstate->p_rtable)) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("rte must be last entry in p_rtable"))); } namespace = list_make1(pnsi); checkNameSpaceConflicts(pstate, pstate->p_namespace, namespace); } if (add_rte_to_query) { // all variables(attributes) from the previous clause(subquery) are visible addNSItemToQuery(pstate, pnsi, true, false, true); } return pnsi; } /* * When we are done transforming a clause, before transforming the next clause * iterate through the transform entities and mark them as not belonging to * the clause that is currently being transformed. */ static void advance_transform_entities_to_next_clause(List *entities) { ListCell *lc; foreach (lc, entities) { transform_entity *entity = lfirst(lc); entity->declared_in_current_clause = false; } } static Query *analyze_cypher_clause(transform_method transform, cypher_clause *clause, cypher_parsestate *parent_cpstate) { cypher_parsestate *cpstate; Query *query; ParseState *parent_pstate = (ParseState*)parent_cpstate; ParseState *pstate; cpstate = make_cypher_parsestate(parent_cpstate); pstate = (ParseState*)cpstate; /* copy the expr_kind down to the child */ pstate->p_expr_kind = parent_pstate->p_expr_kind; query = transform(cpstate, clause); advance_transform_entities_to_next_clause(cpstate->entities); parent_cpstate->entities = list_concat(parent_cpstate->entities, cpstate->entities); free_cypher_parsestate(cpstate); return query; } static TargetEntry *findTarget(List *targetList, char *resname) { ListCell *lt; TargetEntry *te = NULL; if (resname == NULL) { return NULL; } foreach (lt, targetList) { te = lfirst(lt); if (te->resjunk) { continue; } if (strcmp(te->resname, resname) == 0) { return te; } } return NULL; } /* * Wrap the expression with a volatile function, to prevent the optimizer from * eliminating the expression. */ static Expr *add_volatile_wrapper(Expr *node) { Oid oid; /* if the passed Expr node is NULL it will cause a crash, so notify us */ if (node == NULL) { ereport(ERROR, (errmsg_internal("add_volatile_wrapper: NULL expr"))); } oid = get_ag_func_oid("agtype_volatile_wrapper", 1, ANYOID); /* if the passed Expr node is already wrapped, just return it */ if (IsA(node, FuncExpr) && oid == ((FuncExpr*)node)->funcid) { return node; } return (Expr *)makeFuncExpr(oid, AGTYPEOID, list_make1(node), InvalidOid, InvalidOid, COERCE_EXPLICIT_CALL); } /* * from postgresql parse_sub_analyze * Modified entry point for recursively analyzing a sub-statement in union. */ Query *cypher_parse_sub_analyze_union(cypher_clause *clause, cypher_parsestate *cpstate, CommonTableExpr *parentCTE, bool locked_from_parent, bool resolve_unknowns) { cypher_parsestate *state = make_cypher_parsestate(cpstate); Query *query; state->pstate.p_parent_cte = parentCTE; state->pstate.p_locked_from_parent = locked_from_parent; state->pstate.p_resolve_unknowns = resolve_unknowns; query = transform_cypher_clause(state, clause); free_cypher_parsestate(state); return query; } /* * from postgresql parse_sub_analyze * Entry point for recursively analyzing a sub-statement. */ Query *cypher_parse_sub_analyze(Node *parseTree, cypher_parsestate *cpstate, CommonTableExpr *parentCTE, bool locked_from_parent, bool resolve_unknowns) { ParseState *pstate = make_parsestate((ParseState*)cpstate); cypher_clause *clause; Query *query; pstate->p_parent_cte = parentCTE; pstate->p_locked_from_parent = locked_from_parent; pstate->p_resolve_unknowns = resolve_unknowns; clause = palloc0(sizeof(cypher_clause)); clause->self = parseTree; query = transform_cypher_clause(cpstate, clause); free_parsestate(pstate); return query; } /* * Function for transforming MERGE. * * There are two cases for the form Query that is returned from here will * take: * * 1. If there is no previous clause, the query will have a subquery that * represents the path as a select statement, similar to match with a targetList * that is all declared variables and the FuncExpr that represents the MERGE * clause with its needed metadata information, that will be caught in the * planner phase and converted into a path. * * 2. If there is a previous clause then the query will have two subqueries. * The first query will be for the previous clause that we recursively handle. * The second query will be for the path that this MERGE clause defines. The * two subqueries will be joined together using a LATERAL LEFT JOIN with the * previous query on the left and the MERGE path subquery on the right. Like * case 1 the targetList will have all the declared variables and a FuncExpr * that represents the MERGE clause with its needed metadata information, that * will be caught in the planner phase and converted into a path. * * This will allow us to be capable of handling the 2 cases that exist with a * MERGE clause correctly. * * Case 1: the path already exists. In this case we do not need to create * the path and MERGE will simply pass the tuple information up the execution * tree. * * Case 2: the path does not exist. In this case the LEFT part of the join * will not prevent the tuples from the previous clause from being emitted. We * can catch when this happens in the execution phase and create the missing * data, before passing up the execution tree. * * It should be noted that both cases can happen in the same query. If the * MERGE clause references a variable from a previous clause, it could be that * for one tuple the path exists (or there is multiple paths that exist and all * paths must be emitted) and for another the path does not exist. This is * similar to OPTIONAL MATCH, however with the added feature of creating the * path if not there, rather than just emitting NULL. */ static Query *transform_cypher_merge(cypher_parsestate *cpstate, cypher_clause *clause) { ParseState *pstate = (ParseState *) cpstate; cypher_clause *merge_clause_as_match; cypher_create_path *merge_path; cypher_merge *self = (cypher_merge *)clause->self; cypher_merge_information *merge_information; Query *query; FuncExpr *func_expr; TargetEntry *tle; Assert(is_ag_node(self->path, cypher_path)); merge_information = make_ag_node(cypher_merge_information); query = makeNode(Query); query->commandType = CMD_SELECT; query->targetList = NIL; merge_information->flags = CYPHER_CLAUSE_FLAG_NONE; // make the merge node into a match node merge_clause_as_match = convert_merge_to_match(self); /* * If there is a previous clause we need to turn this query into a lateral * join. See the function transform_merge_make_lateral_join for details. */ if (clause->prev != NULL) { merge_path = transform_merge_make_lateral_join(cpstate, query, clause, merge_clause_as_match); merge_information->flags |= CYPHER_CLAUSE_FLAG_PREVIOUS_CLAUSE; } else { // make the merge node into a match node // TODO this is called above and appears redundant but needs to be // looked into //cypher_clause *merge_clause_as_match = convert_merge_to_match(self); /* * Create the metadata needed for creating missing paths. */ merge_path = transform_cypher_merge_path(cpstate, &query->targetList, (cypher_path *)self->path); /* * If there is not a previous clause, then treat the MERGE's path * itself as the previous clause. We need to do this because if the * pattern exists, then we need to path all paths that match the * query patterns in the execution phase. WE way to do that by * converting the merge to a match and have the match logic create the * query. the merge execution phase will just pass the results up the * execution tree if the path exists. */ handle_prev_clause(cpstate, query, merge_clause_as_match, false); /* * For the metadata need to create paths, find the tuple position that * will represent the entity in the execution phase. */ transform_cypher_merge_mark_tuple_position(cpstate, query->targetList, merge_path); } merge_information->graph_oid = cpstate->graph_oid; merge_information->path = merge_path; if (!clause->next) { merge_information->flags |= CYPHER_CLAUSE_FLAG_TERMINAL; } /* * Creates the function expression that the planner will find and * convert to a MERGE path. */ func_expr = make_clause_func_expr(MERGE_CLAUSE_FUNCTION_NAME, (Node *)merge_information); // Create the target entry tle = makeTargetEntry((Expr *)func_expr, pstate->p_next_resno++, AGE_VARNAME_MERGE_CLAUSE, false); merge_information->merge_function_attr = tle->resno; query->targetList = lappend(query->targetList, tle); markTargetListOrigins(pstate, query->targetList); query->rtable = pstate->p_rtable; query->rteperminfos = pstate->p_rteperminfos; query->jointree = makeFromExpr(pstate->p_joinlist, NULL); query->hasSubLinks = pstate->p_hasSubLinks; assign_query_collations(pstate, query); return query; } /* * This function does the heavy lifting of transforming a MERGE clause that has * a clause before it in the query of turning that into a lateral left join. * The previous clause will still be able to emit tuples if the path defined in * MERGE clause is not found. In that case variable assigned in the MERGE * clause will be emitted as NULL (same as OPTIONAL MATCH). */ static cypher_create_path * transform_merge_make_lateral_join(cypher_parsestate *cpstate, Query *query, cypher_clause *clause, cypher_clause *isolated_merge_clause) { cypher_create_path *merge_path; ParseState *pstate = (ParseState *) cpstate; int i; Alias *l_alias; Alias *r_alias; RangeTblEntry *l_rte, *r_rte; ParseNamespaceItem *l_nsitem, *r_nsitem; JoinExpr *j = makeNode(JoinExpr); List *res_colnames = NIL, *res_colvars = NIL; ParseNamespaceItem *jnsitem; ParseExprKind tmp; cypher_merge *self = (cypher_merge *)clause->self; cypher_path *path; Assert(is_ag_node(self->path, cypher_path)); path = (cypher_path *)self->path; r_alias = makeAlias(CYPHER_OPT_RIGHT_ALIAS, NIL); l_alias = makeAlias(PREV_CYPHER_CLAUSE_ALIAS, NIL); j->jointype = JOIN_LEFT; /* * transform the previous clause */ j->larg = transform_clause_for_join(cpstate, clause->prev, &l_rte, &l_nsitem, l_alias); pstate->p_namespace = lappend(pstate->p_namespace, l_nsitem); /* * Get the merge path now. This is the only moment where it is simple * to know if a variable was declared in the MERGE clause or a previous * clause. Unlike create, we do not add these missing variables to the * targetList, we just create all the metadata necessary to make the * potentially missing parts of the path. */ merge_path = transform_cypher_merge_path(cpstate, &query->targetList, path); /* * Transform this MERGE clause as a match clause, mark the parsestate * with the flag that a lateral join is active */ pstate->p_lateral_active = true; tmp = pstate->p_expr_kind; pstate->p_expr_kind = EXPR_KIND_OTHER; // transform MERGE j->rarg = transform_clause_for_join(cpstate, isolated_merge_clause, &r_rte, &r_nsitem, r_alias); /* * Since this is a left join, we need to mark j->rarg as it may potentially * emit NULL. The jindex argument holds rtindex of the join's RTE, which is * created right after j->arg's RTE in this case. */ markRelsAsNulledBy(pstate, j->rarg, r_nsitem->p_rtindex + 1); // deactivate the lateral flag pstate->p_lateral_active = false; pstate->p_namespace = NIL; /* * Resolve the column names and variables between the two subqueries, * in most cases, we can expect there to be overlap */ get_res_cols(pstate, l_nsitem, r_nsitem, &res_colnames, &res_colvars); // make the RTE for the join jnsitem = addRangeTableEntryForJoin(pstate, res_colnames, NULL, j->jointype, 0, res_colvars, NIL, NIL, j->alias, NULL, true); j->rtindex = jnsitem->p_rtindex; /* * The index of a node in the p_joinexpr list is expected to match the * rtindex the join expression is for. Add NULLs for all the previous * rtindexes and add the JoinExpr. */ for (i = list_length(pstate->p_joinexprs) + 1; i < j->rtindex; i++) { pstate->p_joinexprs = lappend(pstate->p_joinexprs, NULL); } pstate->p_joinexprs = lappend(pstate->p_joinexprs, j); Assert(list_length(pstate->p_joinexprs) == j->rtindex); pstate->p_joinlist = lappend(pstate->p_joinlist, j); pstate->p_expr_kind = tmp; /* add jnsitem to column namespace only */ addNSItemToQuery(pstate, jnsitem, false, true, true); /* * Create the targetList from the joined subqueries, add everything. */ query->targetList = list_concat(query->targetList, make_target_list_from_join(pstate, jnsitem->p_rte)); /* * For the metadata need to create paths, find the tuple position that * will represent the entity in the execution phase. */ transform_cypher_merge_mark_tuple_position(cpstate, query->targetList, merge_path); return merge_path; } /* * Iterate through the path and find the TargetEntry in the target_list * that each cypher_target_node is referencing. Add the volatile wrapper * function to keep the optimizer from removing the TargetEntry. */ static void transform_cypher_merge_mark_tuple_position(cypher_parsestate *cpstate, List *target_list, cypher_create_path *path) { ListCell *lc = NULL; if (path->var_name) { TargetEntry *te = findTarget(target_list, path->var_name); /* * Add the volatile wrapper function around the expression, this * ensures the optimizer will not remove the expression, if nothing * other than a private data structure needs it. */ te->expr = add_volatile_wrapper(te->expr); // Mark the tuple position the target_node is for. path->path_attr_num = te->resno; } foreach (lc, path->target_nodes) { cypher_target_node *node = lfirst(lc); TargetEntry *te = findTarget(target_list, node->variable_name); /* * Add the volatile wrapper function around the expression, this * ensures the optimizer will not remove the expression, if nothing * other than a private data structure needs it. */ te->expr = add_volatile_wrapper(te->expr); // Mark the tuple position the target_node is for. node->tuple_position = te->resno; } /* Iterate through the entities wrapping Var nodes with the volatile * wrapper, if not already done. * * NOTE: add_volatile_wrapper function will not wrap itself so the following * is safe to do. * * TODO: This ideally needs to be rewritten using a walker, to be more * selective. However, walkers are tricky and take time to set up. For * now, we brute force it. It is already restricted to explicitly * named variables. * * TODO: We need to understand why add_volatile_wrapper is needed. Meaning, * we need to understand why variables are removed by the function * remove_unused_subquery_outputs. It "appears" that some linkage may * not be set up properly, not allowing the PG logic to see that a * variable is used from a previous clause. Right now, the volatile * wrapper will suffice, but it is still a hack imho. * * TODO: There may be other locations where something similar may need to be * done. This needs to be researched. */ foreach (lc, cpstate->entities) { transform_entity *te = lfirst(lc); Node *node = (Node*) te->entity.node; char *name = NULL; if (is_ag_node(node, cypher_node)) { name = te->entity.node->parsed_name; } else if (is_ag_node(node, cypher_relationship)) { name = te->entity.rel->parsed_name; } else if (is_ag_node(node, cypher_path)) { name = te->entity.path->parsed_var_name; } else { ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION), errmsg("unexpected transform_entity entity type"))); } /* node needs to have a parsed_name, meaning a name from the query */ if (name != NULL) { TargetEntry *tle = findTarget(target_list, name); if (tle != NULL && IsA(tle->expr, Var)) { tle->expr = add_volatile_wrapper(tle->expr); } } } } /* * Helper function to return a shallow copy of an existing, already transformed, * matching variable. The copy returned will be flagged as such. If none are * found, it will return NULL. If it finds a mismatched type, it will error * stating that. */ static cypher_target_node *get_referenced_variable(ParseState *pstate, Node *node, List *transformed_path) { ListCell *lc = NULL; char *node_name = NULL; char *node_label = NULL; char node_type = 0; int node_loc = -1; /* passed node should only be a vertex or an edge */ Assert(is_ag_node(node, cypher_node) || is_ag_node(node, cypher_relationship)); /* set up our search based on our input type */ if (is_ag_node(node, cypher_node)) { node_name = ((cypher_node *)node)->name; node_label = ((cypher_node *)node)->label; node_loc = ((cypher_node *)node)->location; node_type = 'v'; } else { node_name = ((cypher_relationship *)node)->name; node_label = ((cypher_relationship *)node)->label; node_loc = ((cypher_relationship *)node)->location; node_type = 'e'; } /* look through the list of previously transformed nodes and edges */ foreach (lc, transformed_path) { cypher_target_node *ctn = NULL; bool is_name = false; bool is_label = false; /* list items should be of type cypher_target_node */ Assert(is_ag_node(lfirst(lc), cypher_target_node)); ctn = lfirst(lc); /* do they have names? if so, do they match? */ is_name = (node_name == NULL || ctn->variable_name == NULL) ? false : strcmp(node_name, ctn->variable_name) == 0; /* do they have labels? if so, do they match? */ is_label = (ctn->label_name != NULL) ? ((node_label == NULL) ? true : strcmp(ctn->label_name, node_label) == 0) : false; /* if the types don't match, error or skip */ if (node_type != ctn->type) { /* is the name a match, generate an error. otherwise, skip it. */ if (is_name) { if (node_type == 'v') { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("variable \"%s\" is for a edge", node_name), parser_errposition(pstate, node_loc))); } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("variable \"%s\" is for an vertex", node_name), parser_errposition(pstate, node_loc))); } } else { continue; } } if (is_name && !is_label) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("multiple labels for variable '%s' are not supported", node_name), parser_errposition(pstate, node_loc))); } /* * If this is a match, make a shallow copy of it, modify the copy to be * flagged as a previously declared variable, and then return it. */ if (is_name && is_label) { cypher_target_node *_cpy = make_ag_node(cypher_target_node); /* make a shallow copy */ _cpy->type = ctn->type; _cpy->flags = ctn->flags; _cpy->dir = ctn->dir; _cpy->id_expr = ctn->id_expr; _cpy->id_expr_state = ctn->id_expr_state; _cpy->prop_expr = ctn->prop_expr; _cpy->prop_expr_state = ctn->prop_expr_state; _cpy->prop_attr_num = ctn->prop_attr_num; _cpy->resultRelInfo = ctn->resultRelInfo; _cpy->elemTupleSlot = ctn->elemTupleSlot; _cpy->relid = ctn->relid; _cpy->label_name = ctn->label_name; _cpy->variable_name = ctn->variable_name; _cpy->tuple_position = ctn->tuple_position; /* set it to a declared variable */ _cpy->flags &= 0xfffffffe; _cpy->flags |= EXISTING_VARIABLE_DECLARED_SAME_CLAUSE; return _cpy; } } return NULL; } /* * Creates the target nodes for a merge path. If MERGE has a path that doesn't * exist then in the MERGE clause we act like a CREATE clause. This function * sets up the metadata needed for that process. */ static cypher_create_path * transform_cypher_merge_path(cypher_parsestate *cpstate, List **target_list, cypher_path *path) { ParseState *pstate = (ParseState *)cpstate; ListCell *lc; List *transformed_path = NIL; cypher_create_path *ccp = make_ag_node(cypher_create_path); bool in_path = path->var_name != NULL; ccp->path_attr_num = InvalidAttrNumber; foreach (lc, path->path) { if (is_ag_node(lfirst(lc), cypher_node)) { cypher_node *node = lfirst(lc); cypher_target_node *rel = NULL; if (path->var_name != NULL && node->name != NULL && strcmp(path->var_name, node->name) == 0) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("variable \"%s\" is for a path", node->name), parser_errposition(pstate, node->location))); } /* * If the variable was already transformed, get a referenced copy of * it. This copy will make sure the executor phase doesn't create a * new node from it. */ rel = get_referenced_variable(pstate, (Node *)node, transformed_path); /* if there wasn't a transformed variable, transform the node */ if (rel == NULL) { rel = transform_merge_cypher_node(cpstate, target_list, node); } if (in_path) { rel->flags |= CYPHER_TARGET_NODE_IN_PATH_VAR; } transformed_path = lappend(transformed_path, rel); } else if (is_ag_node(lfirst(lc), cypher_relationship)) { cypher_relationship *edge = NULL; cypher_target_node *rel = NULL; edge = lfirst(lc); if (path->var_name != NULL && edge->name != NULL && strcmp(path->var_name, edge->name) == 0) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("variable \"%s\" is for a path", edge->name), parser_errposition(pstate, edge->location))); } /* * Get a referenced edge variable. This should not happen as edges * can not be duplicated within a path. */ rel = get_referenced_variable(pstate, (Node *)edge, transformed_path); if (rel != NULL) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("a duplicate edge variable \"%s\" is not permitted within a path", edge->name), parser_errposition(pstate, edge->location))); } /* transform the edge */ rel = transform_merge_cypher_edge(cpstate, target_list, edge); if (in_path) { rel->flags |= CYPHER_TARGET_NODE_IN_PATH_VAR; } transformed_path = lappend(transformed_path, rel); } else { ereport(ERROR, (errmsg_internal("unrecognized node in create pattern"))); } } // store the path's variable name if (path->var_name) { ccp->var_name = path->var_name; } ccp->target_nodes = transformed_path; return ccp; } /* * Transforms the parse cypher_relationship to a target_entry for merge. * All edges that have variables assigned in a merge must be declared in * the merge. Throw an error otherwise. */ static cypher_target_node * transform_merge_cypher_edge(cypher_parsestate *cpstate, List **target_list, cypher_relationship *edge) { ParseState *pstate = (ParseState *)cpstate; cypher_target_node *rel = make_ag_node(cypher_target_node); Relation label_relation; RangeVar *rv; RTEPermissionInfo *rte_pi; ParseNamespaceItem *pnsi; if (edge->name != NULL) { transform_entity *entity = find_transform_entity(cpstate, edge->name, ENT_EDGE); // We found a variable with this variable name, throw an error. if (entity != NULL) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("variable %s already exists", edge->name), parser_errposition(pstate, edge->location))); } rel->flags |= CYPHER_TARGET_NODE_IS_VAR; } else { // assign a default variable name. edge->name = get_next_default_alias(cpstate); } rel->type = LABEL_KIND_EDGE; // all edges are marked with insert rel->flags |= CYPHER_TARGET_NODE_FLAG_INSERT; rel->label_name = edge->label; rel->variable_name = edge->name; rel->resultRelInfo = NULL; rel->dir = edge->dir; if (!edge->label) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("edges declared in a MERGE clause must have a label"), parser_errposition(&cpstate->pstate, edge->location))); } // check to see if the label exists, create the label entry if it does not. if (edge->label && !label_exists(edge->label, cpstate->graph_oid)) { List *parent; /* * setup the default edge table as the parent table, that we * will inherit from. */ rv = get_label_range_var(cpstate->graph_name, cpstate->graph_oid, AG_DEFAULT_LABEL_EDGE); parent = list_make1(rv); // create the label create_label(cpstate->graph_name, edge->label, LABEL_TYPE_EDGE, parent); } // lock the relation of the label rv = makeRangeVar(cpstate->graph_name, edge->label, -1); label_relation = parserOpenTable(&cpstate->pstate, rv, RowExclusiveLock); /* * TODO * It is possible for a vertex label to be retrieved, instead of an edge, * due to the above logic. So, we need to check if it is a vertex label. * This whole section needs to be fixed because it could be a relation that * isn't either and has the correct number of columns. However, for now, * we just check the number of columns. */ if (label_relation->rd_att->natts == 2) // TODO temporarily hardcoded { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("Expecting edge label, found existing vertex label"), parser_errposition(&cpstate->pstate, edge->location))); } // Store the relid rel->relid = RelationGetRelid(label_relation); pnsi = addRangeTableEntryForRelation((ParseState *)cpstate, label_relation, AccessShareLock, NULL, false, false); rte_pi = pnsi->p_perminfo; rte_pi->requiredPerms = ACL_INSERT; // Build Id expression, always use the default logic rel->id_expr = (Expr *)build_column_default(label_relation, Anum_ag_label_edge_table_id); rel->prop_expr = cypher_create_properties(cpstate, rel, label_relation, edge->props, ENT_EDGE); // Keep the lock table_close(label_relation, NoLock); return rel; } /* * Function for creating the metadata MERGE will need if MERGE does not find * a path to exist */ static cypher_target_node * transform_merge_cypher_node(cypher_parsestate *cpstate, List **target_list, cypher_node *node) { cypher_target_node *rel = make_ag_node(cypher_target_node); Relation label_relation; RangeVar *rv; RTEPermissionInfo *rte_pi; ParseNamespaceItem *pnsi; if (node->name != NULL) { transform_entity *entity = find_transform_entity(cpstate, node->name, ENT_VERTEX); /* * the vertex was previously declared, we do not need to do any setup * to create the node. */ if (entity != NULL) { rel->type = LABEL_KIND_VERTEX; rel->tuple_position = InvalidAttrNumber; rel->variable_name = node->name; rel->resultRelInfo = NULL; rel->flags |= CYPHER_TARGET_NODE_MERGE_EXISTS; return rel; } rel->flags |= CYPHER_TARGET_NODE_IS_VAR; } else { // assign a default variable name. node->name = get_next_default_alias(cpstate); } rel->type = LABEL_KIND_VERTEX; rel->tuple_position = InvalidAttrNumber; rel->variable_name = node->name; rel->resultRelInfo = NULL; if (!node->label) { rel->label_name = ""; /* * If no label is specified, assign the generic label name that * all labels are descendents of. */ node->label = AG_DEFAULT_LABEL_VERTEX; } else { rel->label_name = node->label; } // check to see if the label exists, create the label entry if it does not. if (node->label && !label_exists(node->label, cpstate->graph_oid)) { List *parent; /* * setup the default vertex table as the parent table, that we * will inherit from. */ rv = get_label_range_var(cpstate->graph_name, cpstate->graph_oid, AG_DEFAULT_LABEL_VERTEX); parent = list_make1(rv); // create the label create_label(cpstate->graph_name, node->label, LABEL_TYPE_VERTEX, parent); } rel->flags |= CYPHER_TARGET_NODE_FLAG_INSERT; rv = makeRangeVar(cpstate->graph_name, node->label, -1); label_relation = parserOpenTable(&cpstate->pstate, rv, RowExclusiveLock); /* * TODO * It is possible for an edge label to be retrieved, instead of a vertex, * due to the above logic. So, we need to check if it is an edge label. * This whole section needs to be fixed because it could be a relation that * isn't either and has the correct number of columns. However, for now, * we just check the number of columns. */ if (label_relation->rd_att->natts == 4) // TODO temporarily hardcoded { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("Expecting vertex label, found existing edge label"), parser_errposition(&cpstate->pstate, node->location))); } // Store the relid rel->relid = RelationGetRelid(label_relation); pnsi = addRangeTableEntryForRelation((ParseState *)cpstate, label_relation, AccessShareLock, NULL, false, false); rte_pi = pnsi->p_perminfo; rte_pi->requiredPerms = ACL_INSERT; // id rel->id_expr = (Expr *)build_column_default(label_relation, Anum_ag_label_vertex_table_id); rel->prop_expr = cypher_create_properties(cpstate, rel, label_relation, node->props, ENT_VERTEX); table_close(label_relation, NoLock); return rel; } /* * Takes a MERGE parse node and converts it to a MATCH parse node */ static cypher_clause *convert_merge_to_match(cypher_merge *merge) { cypher_match *match = make_ag_node(cypher_match); cypher_clause *clause = palloc(sizeof(cypher_clause)); // match supports multiple paths, whereas merge only supports one. match->pattern = list_make1(merge->path); // MERGE does not support where match->where = NULL; /* * We do not want the transform logic to transform the previous clauses * with this, just handle this one clause. */ clause->prev = NULL; clause->self = (Node *)match; clause->next = NULL; return clause; } /* * Creates a namespace item for the given rte. boolean arguments will * let the rest of the ParseState know if the relation and/or columns are * visible, whether the rte is only usable in lateral joins, and if the rte * is accessible in lateral joins. */ static ParseNamespaceItem *get_namespace_item(ParseState *pstate, RangeTblEntry *rte) { ParseNamespaceItem *nsitem = NULL; ListCell *l; foreach(l, pstate->p_namespace) { nsitem = lfirst(l); if (rte == nsitem->p_rte) { return nsitem; } } Assert(nsitem != NULL); return NULL; } /* * Creates the function expression that represents the clause. Adds the * extensible node that represents the metadata that the clause needs to * handle the clause in the execution phase. */ static FuncExpr *make_clause_func_expr(char *function_name, Node *clause_information) { Const *clause_information_const; Oid func_oid; FuncExpr *func_expr; StringInfo str = makeStringInfo(); /* * Serialize the clause_information data structure. In certain * cases (Prepared Statements and PL/pgsql), the MemoryContext that * it is stored in will be destroyed. We need to get it into a format * that Postgres' can copy between MemoryContexts. Just making it into * an ExtensibleNode does not work, because there are certain parts of * Postgres that cannot handle an ExtensibleNode in a function call. * So we serialize the data structure and place it into a Const node * that can handle these situations AND be copied correctly. */ outNode(str, clause_information); clause_information_const = makeConst(INTERNALOID, -1, InvalidOid, str->len, PointerGetDatum(str->data), false, false); func_oid = get_ag_func_oid(function_name, 1, INTERNALOID); func_expr = makeFuncExpr(func_oid, AGTYPEOID, list_make1(clause_information_const), InvalidOid, InvalidOid, COERCE_EXPLICIT_CALL); return func_expr; } /* * This function is borrowed from PG version 16.1. * * It is used in transformations involving left join in Optional Match and * Merge in a similar way PG16's transformFromClauseItem() uses it. */ static void markRelsAsNulledBy(ParseState *pstate, Node *n, int jindex) { int varno; ListCell *lc; /* Note: we can't see FromExpr here */ if (IsA(n, RangeTblRef)) { varno = ((RangeTblRef *) n)->rtindex; } else if (IsA(n, JoinExpr)) { JoinExpr *j = (JoinExpr *) n; /* recurse to children */ markRelsAsNulledBy(pstate, j->larg, jindex); markRelsAsNulledBy(pstate, j->rarg, jindex); varno = j->rtindex; } else { elog(ERROR, "unrecognized node type: %d", (int) nodeTag(n)); varno = 0; /* keep compiler quiet */ } /* * Now add jindex to the p_nullingrels set for relation varno. Since we * maintain the p_nullingrels list lazily, we might need to extend it to * make the varno'th entry exist. */ while (list_length(pstate->p_nullingrels) < varno) { pstate->p_nullingrels = lappend(pstate->p_nullingrels, NULL); } lc = list_nth_cell(pstate->p_nullingrels, varno - 1); lfirst(lc) = bms_add_member((Bitmapset *) lfirst(lc), jindex); } /* * Utility function that helps a clause add the information needed to * the query from the previous clause. */ static void handle_prev_clause(cypher_parsestate *cpstate, Query *query, cypher_clause *clause, bool first_rte) { ParseState *pstate = (ParseState *) cpstate; int rtindex; ParseNamespaceItem *pnsi; pnsi = transform_prev_cypher_clause(cpstate, clause, true); rtindex = list_length(pstate->p_rtable); // rte is the first RangeTblEntry in pstate if (first_rte) { if (rtindex != 1) { ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("invalid value for rtindex"))); } } // add all the rte's attributes to the current queries targetlist query->targetList = expandNSItemAttrs(pstate, pnsi, 0, true, -1); } ParseNamespaceItem *find_pnsi(cypher_parsestate *cpstate, char *varname) { ParseState *pstate = (ParseState *) cpstate; ListCell *lc; foreach (lc, pstate->p_namespace) { ParseNamespaceItem *pnsi = (ParseNamespaceItem *)lfirst(lc); Alias *alias = pnsi->p_rte->alias; if (!alias) { continue; } if (!strcmp(alias->aliasname, varname)) { return pnsi; } } return NULL; } age-PG16-v1.5.0-rc0/src/backend/parser/cypher_expr.c000066400000000000000000001554041454606241200217570ustar00rootroot00000000000000/* * For PostgreSQL Database Management System: * (formerly known as Postgres, then as Postgres95) * * Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group * * Portions Copyright (c) 1994, The Regents of the University of California * * Permission to use, copy, modify, and distribute this software and its documentation for any purpose, * without fee, and without a written agreement is hereby granted, provided that the above copyright notice * and this paragraph and the following two paragraphs appear in all copies. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA * HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ #include "postgres.h" #include "miscadmin.h" #include "nodes/nodeFuncs.h" #include "optimizer/optimizer.h" #include "parser/parse_coerce.h" #include "parser/parse_collate.h" #include "parser/parse_func.h" #include "parser/cypher_clause.h" #include "parser/parse_oper.h" #include "parser/parse_relation.h" #include "utils/builtins.h" #include "utils/float.h" #include "utils/lsyscache.h" #include "parser/cypher_expr.h" #include "parser/cypher_transform_entity.h" #include "utils/ag_func.h" #include "utils/agtype.h" /* names of typecast functions */ #define FUNC_AGTYPE_TYPECAST_EDGE "agtype_typecast_edge" #define FUNC_AGTYPE_TYPECAST_PATH "agtype_typecast_path" #define FUNC_AGTYPE_TYPECAST_VERTEX "agtype_typecast_vertex" #define FUNC_AGTYPE_TYPECAST_NUMERIC "agtype_typecast_numeric" #define FUNC_AGTYPE_TYPECAST_FLOAT "agtype_typecast_float" #define FUNC_AGTYPE_TYPECAST_INT "agtype_typecast_int" #define FUNC_AGTYPE_TYPECAST_PG_FLOAT8 "agtype_to_float8" #define FUNC_AGTYPE_TYPECAST_PG_BIGINT "agtype_to_int8" #define FUNC_AGTYPE_TYPECAST_BOOL "agtype_typecast_bool" static Node *transform_cypher_expr_recurse(cypher_parsestate *cpstate, Node *expr); static Node *transform_A_Const(cypher_parsestate *cpstate, A_Const *ac); static Node *transform_ColumnRef(cypher_parsestate *cpstate, ColumnRef *cref); static Node *transform_A_Indirection(cypher_parsestate *cpstate, A_Indirection *a_ind); static Node *transform_AEXPR_OP(cypher_parsestate *cpstate, A_Expr *a); static Node *transform_cypher_comparison_aexpr_OP(cypher_parsestate *cpstate, cypher_comparison_aexpr *a); static Node *transform_BoolExpr(cypher_parsestate *cpstate, BoolExpr *expr); static Node *transform_cypher_comparison_boolexpr(cypher_parsestate *cpstate, cypher_comparison_boolexpr *b); static Node *transform_cypher_bool_const(cypher_parsestate *cpstate, cypher_bool_const *bc); static Node *transform_cypher_integer_const(cypher_parsestate *cpstate, cypher_integer_const *ic); static Node *transform_AEXPR_IN(cypher_parsestate *cpstate, A_Expr *a); static Node *transform_cypher_param(cypher_parsestate *cpstate, cypher_param *cp); static Node *transform_cypher_map(cypher_parsestate *cpstate, cypher_map *cm); static Node *transform_cypher_list(cypher_parsestate *cpstate, cypher_list *cl); static Node *transform_cypher_string_match(cypher_parsestate *cpstate, cypher_string_match *csm_node); static Node *transform_cypher_typecast(cypher_parsestate *cpstate, cypher_typecast *ctypecast); static Node *transform_CaseExpr(cypher_parsestate *cpstate, CaseExpr *cexpr); static Node *transform_CoalesceExpr(cypher_parsestate *cpstate, CoalesceExpr *cexpr); static Node *transform_SubLink(cypher_parsestate *cpstate, SubLink *sublink); static Node *transform_FuncCall(cypher_parsestate *cpstate, FuncCall *fn); static Node *transform_WholeRowRef(ParseState *pstate, ParseNamespaceItem *pnsi, int location, int sublevels_up); static ArrayExpr *make_agtype_array_expr(List *args); static Node *transform_column_ref_for_indirection(cypher_parsestate *cpstate, ColumnRef *cr); /* transform a cypher expression */ Node *transform_cypher_expr(cypher_parsestate *cpstate, Node *expr, ParseExprKind expr_kind) { ParseState *pstate = (ParseState *)cpstate; ParseExprKind old_expr_kind; Node *result; // save and restore identity of expression type we're parsing Assert(expr_kind != EXPR_KIND_NONE); old_expr_kind = pstate->p_expr_kind; pstate->p_expr_kind = expr_kind; result = transform_cypher_expr_recurse(cpstate, expr); pstate->p_expr_kind = old_expr_kind; return result; } static Node *transform_cypher_expr_recurse(cypher_parsestate *cpstate, Node *expr) { if (!expr) return NULL; // guard against stack overflow due to overly complex expressions check_stack_depth(); switch (nodeTag(expr)) { case T_A_Const: return transform_A_Const(cpstate, (A_Const *)expr); case T_ColumnRef: return transform_ColumnRef(cpstate, (ColumnRef *)expr); case T_A_Indirection: return transform_A_Indirection(cpstate, (A_Indirection *)expr); case T_A_Expr: { A_Expr *a = (A_Expr *)expr; switch (a->kind) { case AEXPR_OP: return transform_AEXPR_OP(cpstate, a); case AEXPR_IN: return transform_AEXPR_IN(cpstate, a); default: ereport(ERROR, (errmsg_internal("unrecognized A_Expr kind: %d", a->kind))); } break; } case T_BoolExpr: return transform_BoolExpr(cpstate, (BoolExpr *)expr); case T_NullTest: { NullTest *n = (NullTest *)expr; NullTest *transformed_expr = makeNode(NullTest); transformed_expr->arg = (Expr *)transform_cypher_expr_recurse(cpstate, (Node *)n->arg); transformed_expr->nulltesttype = n->nulltesttype; transformed_expr->argisrow = type_is_rowtype(exprType((Node *)transformed_expr->arg)); transformed_expr->location = n->location; return (Node *) transformed_expr; } case T_CaseExpr: return transform_CaseExpr(cpstate, (CaseExpr *) expr); case T_CaseTestExpr: return expr; case T_CoalesceExpr: return transform_CoalesceExpr(cpstate, (CoalesceExpr *) expr); case T_ExtensibleNode: if (is_ag_node(expr, cypher_bool_const)) return transform_cypher_bool_const(cpstate, (cypher_bool_const *)expr); if (is_ag_node(expr, cypher_integer_const)) return transform_cypher_integer_const(cpstate, (cypher_integer_const *)expr); if (is_ag_node(expr, cypher_param)) return transform_cypher_param(cpstate, (cypher_param *)expr); if (is_ag_node(expr, cypher_map)) return transform_cypher_map(cpstate, (cypher_map *)expr); if (is_ag_node(expr, cypher_list)) return transform_cypher_list(cpstate, (cypher_list *)expr); if (is_ag_node(expr, cypher_string_match)) return transform_cypher_string_match(cpstate, (cypher_string_match *)expr); if (is_ag_node(expr, cypher_typecast)) return transform_cypher_typecast(cpstate, (cypher_typecast *)expr); if (is_ag_node(expr, cypher_comparison_aexpr)) return transform_cypher_comparison_aexpr_OP(cpstate, (cypher_comparison_aexpr *)expr); if (is_ag_node(expr, cypher_comparison_boolexpr)) return transform_cypher_comparison_boolexpr(cpstate, (cypher_comparison_boolexpr *)expr); ereport(ERROR, (errmsg_internal("unrecognized ExtensibleNode: %s", ((ExtensibleNode *)expr)->extnodename))); return NULL; case T_FuncCall: return transform_FuncCall(cpstate, (FuncCall *)expr); case T_SubLink: return transform_SubLink(cpstate, (SubLink *)expr); break; default: ereport(ERROR, (errmsg_internal("unrecognized node type: %d", nodeTag(expr)))); } return NULL; } static Node *transform_A_Const(cypher_parsestate *cpstate, A_Const *ac) { ParseState *pstate = (ParseState *)cpstate; ParseCallbackState pcbstate; Datum d = (Datum)0; bool is_null = false; Const *c; setup_parser_errposition_callback(&pcbstate, pstate, ac->location); switch (nodeTag(&ac->val)) { case T_Integer: d = integer_to_agtype((int64)intVal(&ac->val)); break; case T_Float: { char *n = ac->val.sval.sval; char *endptr; int64 i; errno = 0; i = strtoi64(ac->val.fval.fval, &endptr, 10); if (errno == 0 && *endptr == '\0') { d = integer_to_agtype(i); } else { float8 f = float8in_internal(n, NULL, "double precision", n, NULL); d = float_to_agtype(f); } } break; case T_String: d = string_to_agtype(strVal(&ac->val)); break; case T_Boolean: d = boolean_to_agtype(boolVal(&ac->val)); break; default: if (ac->isnull) { is_null = true; } else { ereport(ERROR, (errmsg_internal("unrecognized node type: %d", nodeTag(&ac->val)))); return NULL; } } cancel_parser_errposition_callback(&pcbstate); // typtypmod, typcollation, typlen, and typbyval of agtype are hard-coded. c = makeConst(AGTYPEOID, -1, InvalidOid, -1, d, is_null, false); c->location = ac->location; return (Node *)c; } /* * Private function borrowed from PG's transformWholeRowRef. * Construct a whole-row reference to represent the notation "relation.*". */ static Node *transform_WholeRowRef(ParseState *pstate, ParseNamespaceItem *pnsi, int location, int sublevels_up) { Var *result; int vnum; RangeTblEntry *rte; Assert(pnsi->p_rte != NULL); rte = pnsi->p_rte; /* Find the RTE's rangetable location */ vnum = pnsi->p_rtindex; /* * Build the appropriate referencing node. Note that if the RTE is a * function returning scalar, we create just a plain reference to the * function value, not a composite containing a single column. This is * pretty inconsistent at first sight, but it's what we've done * historically. One argument for it is that "rel" and "rel.*" mean the * same thing for composite relations, so why not for scalar functions... */ result = makeWholeRowVar(rte, vnum, sublevels_up, true); /* location is not filled in by makeWholeRowVar */ result->location = location; /* mark relation as requiring whole-row SELECT access */ markVarForSelectPriv(pstate, result); return (Node *)result; } /* * Function to transform a ColumnRef node from the grammar into a Var node * Code borrowed from PG's transformColumnRef. */ static Node *transform_ColumnRef(cypher_parsestate *cpstate, ColumnRef *cref) { ParseState *pstate = (ParseState *)cpstate; Node *field1 = NULL; Node *field2 = NULL; char *colname = NULL; char *nspname = NULL; char *relname = NULL; Node *node = NULL; ParseNamespaceItem *pnsi = NULL; int levels_up; switch (list_length(cref->fields)) { case 1: { transform_entity *te; field1 = (Node*)linitial(cref->fields); Assert(IsA(field1, String)); colname = strVal(field1); /* Try to identify as an unqualified column */ node = colNameToVar(pstate, colname, false, cref->location); if (node != NULL) { break; } /* * Try to find the columnRef as a transform_entity * and extract the expr. */ te = find_variable(cpstate, colname) ; if (te != NULL && te->expr != NULL && te->declared_in_current_clause) { node = (Node *)te->expr; break; } /* * Not known as a column of any range-table entry. * Try to find the name as a relation. Note that only * relations already entered into the rangetable will be * recognized. * * This is a hack for backwards compatibility with * PostQUEL-inspired syntax. The preferred form now is * "rel.*". */ pnsi = refnameNamespaceItem(pstate, NULL, colname, cref->location, &levels_up); if (pnsi) { node = transform_WholeRowRef(pstate, pnsi, cref->location, levels_up); } else { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_COLUMN), errmsg("could not find rte for %s", colname), parser_errposition(pstate, cref->location))); } if (node == NULL) { ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION), errmsg("unable to transform whole row for %s", colname), parser_errposition(pstate, cref->location))); } break; } case 2: { Oid inputTypeId = InvalidOid; Oid targetTypeId = InvalidOid; field1 = (Node*)linitial(cref->fields); field2 = (Node*)lsecond(cref->fields); Assert(IsA(field1, String)); relname = strVal(field1); if (IsA(field2, String)) { colname = strVal(field2); } /* locate the referenced RTE */ pnsi = refnameNamespaceItem(pstate, nspname, relname, cref->location, &levels_up); if (pnsi == NULL) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_COLUMN), errmsg("could not find rte for %s.%s", relname, colname), parser_errposition(pstate, cref->location))); break; } /* * TODO: Left in for potential future use. * Is it a whole-row reference? */ if (IsA(field2, A_Star)) { node = transform_WholeRowRef(pstate, pnsi, cref->location, levels_up); break; } Assert(IsA(field2, String)); /* try to identify as a column of the RTE */ node = scanNSItemForColumn(pstate, pnsi, 0, colname, cref->location); if (node == NULL) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_COLUMN), errmsg("could not find column %s in rel %s of rte", colname, relname), parser_errposition(pstate, cref->location))); } /* coerce it to AGTYPE if possible */ inputTypeId = exprType(node); targetTypeId = AGTYPEOID; if (can_coerce_type(1, &inputTypeId, &targetTypeId, COERCION_EXPLICIT)) { node = coerce_type(pstate, node, inputTypeId, targetTypeId, -1, COERCION_EXPLICIT, COERCE_EXPLICIT_CAST, -1); } break; } default: { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("improper qualified name (too many dotted names): %s", NameListToString(cref->fields)), parser_errposition(pstate, cref->location))); break; } } if (node == NULL) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_COLUMN), errmsg("variable `%s` does not exist", colname), parser_errposition(pstate, cref->location))); } return node; } static Node *transform_AEXPR_OP(cypher_parsestate *cpstate, A_Expr *a) { ParseState *pstate = (ParseState *)cpstate; Node *last_srf = pstate->p_last_srf; Node *lexpr = transform_cypher_expr_recurse(cpstate, a->lexpr); Node *rexpr = transform_cypher_expr_recurse(cpstate, a->rexpr); return (Node *)make_op(pstate, a->name, lexpr, rexpr, last_srf, a->location); } /* * function for transforming cypher comparision A_Expr. Since this node is a * wrapper to let us know when a comparison occurs in a chained comparison, * we convert it to a regular A_expr and transform it. */ static Node *transform_cypher_comparison_aexpr_OP(cypher_parsestate *cpstate, cypher_comparison_aexpr *a) { A_Expr *n = makeNode(A_Expr); n->kind = a->kind; n->name = a->name; n->lexpr = a->lexpr; n->rexpr = a->rexpr; n->location = a->location; return (Node *)transform_AEXPR_OP(cpstate, n); } static Node *transform_AEXPR_IN(cypher_parsestate *cpstate, A_Expr *a) { ParseState *pstate = (ParseState *)cpstate; cypher_list *rexpr; Node *result = NULL; Node *lexpr; List *rexprs; List *rvars; List *rnonvars; bool useOr; ListCell *l; if (!is_ag_node(a->rexpr, cypher_list)) { /* * We need to build a function call here if the rexpr is already * tranformed. It can be already tranformed cypher_list as columnref. */ Oid func_in_oid; FuncExpr *func_in_expr; List *args = NIL; args = lappend(args, transform_cypher_expr_recurse(cpstate, a->rexpr)); args = lappend(args, transform_cypher_expr_recurse(cpstate, a->lexpr)); /* get the agtype_in_operator function */ func_in_oid = get_ag_func_oid("agtype_in_operator", 2, AGTYPEOID, AGTYPEOID); func_in_expr = makeFuncExpr(func_in_oid, AGTYPEOID, args, InvalidOid, InvalidOid, COERCE_EXPLICIT_CALL); func_in_expr->location = exprLocation(a->lexpr); return (Node *)func_in_expr; } Assert(is_ag_node(a->rexpr, cypher_list)); // If the operator is <>, combine with AND not OR. if (strcmp(strVal(linitial(a->name)), "<>") == 0) { useOr = false; } else { useOr = true; } lexpr = transform_cypher_expr_recurse(cpstate, a->lexpr); rexprs = rvars = rnonvars = NIL; rexpr = (cypher_list *)a->rexpr; foreach(l, (List *) rexpr->elems) { Node *rexpr = transform_cypher_expr_recurse(cpstate, lfirst(l)); rexprs = lappend(rexprs, rexpr); if (contain_vars_of_level(rexpr, 0)) { rvars = lappend(rvars, rexpr); } else { rnonvars = lappend(rnonvars, rexpr); } } /* * ScalarArrayOpExpr is only going to be useful if there's more than one * non-Var righthand item. */ if (list_length(rnonvars) > 1) { List *allexprs; Oid scalar_type; List *aexprs; ArrayExpr *newa; allexprs = list_concat(list_make1(lexpr), rnonvars); scalar_type = AGTYPEOID; /* verify they are a common type */ if (!verify_common_type(scalar_type, allexprs)) { ereport(ERROR, errmsg_internal("not a common type: %d", scalar_type)); } /* * coerce all the right-hand non-Var inputs to the common type * and build an ArrayExpr for them. */ aexprs = NIL; foreach(l, rnonvars) { Node *rexpr = (Node *) lfirst(l); rexpr = coerce_to_common_type(pstate, rexpr, AGTYPEOID, "IN"); aexprs = lappend(aexprs, rexpr); } newa = makeNode(ArrayExpr); newa->array_typeid = get_array_type(AGTYPEOID); /* array_collid will be set by parse_collate.c */ newa->element_typeid = AGTYPEOID; newa->elements = aexprs; newa->multidims = false; result = (Node *) make_scalar_array_op(pstate, a->name, useOr, lexpr, (Node *) newa, a->location); /* Consider only the Vars (if any) in the loop below */ rexprs = rvars; } // Must do it the hard way, with a boolean expression tree. foreach(l, rexprs) { Node *rexpr = (Node *) lfirst(l); Node *cmp; // Ordinary scalar operator cmp = (Node *) make_op(pstate, a->name, copyObject(lexpr), rexpr, pstate->p_last_srf, a->location); cmp = coerce_to_boolean(pstate, cmp, "IN"); if (result == NULL) { result = cmp; } else { result = (Node *) makeBoolExpr(useOr ? OR_EXPR : AND_EXPR, list_make2(result, cmp), a->location); } } return result; } static Node *transform_BoolExpr(cypher_parsestate *cpstate, BoolExpr *expr) { ParseState *pstate = (ParseState *)cpstate; List *args = NIL; const char *opname; ListCell *la; switch (expr->boolop) { case AND_EXPR: opname = "AND"; break; case OR_EXPR: opname = "OR"; break; case NOT_EXPR: opname = "NOT"; break; default: ereport(ERROR, (errmsg_internal("unrecognized boolop: %d", (int)expr->boolop))); return NULL; } foreach (la, expr->args) { Node *arg = lfirst(la); arg = transform_cypher_expr_recurse(cpstate, arg); arg = coerce_to_boolean(pstate, arg, opname); args = lappend(args, arg); } return (Node *)makeBoolExpr(expr->boolop, args, expr->location); } /* * function for transforming cypher_comparison_boolexpr. Since this node is a * wrapper to let us know when a comparison occurs in a chained comparison, * we convert it to a PG BoolExpr and transform it. */ static Node *transform_cypher_comparison_boolexpr(cypher_parsestate *cpstate, cypher_comparison_boolexpr *b) { BoolExpr *n = makeNode(BoolExpr); n->boolop = b->boolop; n->args = b->args; n->location = b->location; return transform_BoolExpr(cpstate, n); } static Node *transform_cypher_bool_const(cypher_parsestate *cpstate, cypher_bool_const *bc) { ParseState *pstate = (ParseState *)cpstate; ParseCallbackState pcbstate; Datum agt; Const *c; setup_parser_errposition_callback(&pcbstate, pstate, bc->location); agt = boolean_to_agtype(bc->boolean); cancel_parser_errposition_callback(&pcbstate); // typtypmod, typcollation, typlen, and typbyval of agtype are hard-coded. c = makeConst(AGTYPEOID, -1, InvalidOid, -1, agt, false, false); c->location = bc->location; return (Node *)c; } static Node *transform_cypher_integer_const(cypher_parsestate *cpstate, cypher_integer_const *ic) { ParseState *pstate = (ParseState *)cpstate; ParseCallbackState pcbstate; Datum agt; Const *c; setup_parser_errposition_callback(&pcbstate, pstate, ic->location); agt = integer_to_agtype(ic->integer); cancel_parser_errposition_callback(&pcbstate); // typtypmod, typcollation, typlen, and typbyval of agtype are hard-coded. c = makeConst(AGTYPEOID, -1, InvalidOid, -1, agt, false, false); c->location = ic->location; return (Node *)c; } static Node *transform_cypher_param(cypher_parsestate *cpstate, cypher_param *cp) { ParseState *pstate = (ParseState *)cpstate; Const *const_str; FuncExpr *func_expr; Oid func_access_oid; List *args = NIL; if (!cpstate->params) { ereport( ERROR, (errcode(ERRCODE_UNDEFINED_PARAMETER), errmsg( "parameters argument is missing from cypher() function call"), parser_errposition(pstate, cp->location))); } /* get the agtype_access_operator function */ func_access_oid = get_ag_func_oid("agtype_access_operator", 1, AGTYPEARRAYOID); args = lappend(args, copyObject(cpstate->params)); const_str = makeConst(AGTYPEOID, -1, InvalidOid, -1, string_to_agtype(cp->name), false, false); args = lappend(args, const_str); func_expr = makeFuncExpr(func_access_oid, AGTYPEOID, args, InvalidOid, InvalidOid, COERCE_EXPLICIT_CALL); func_expr->location = cp->location; return (Node *)func_expr; } static Node *transform_cypher_map(cypher_parsestate *cpstate, cypher_map *cm) { ParseState *pstate = (ParseState *)cpstate; List *newkeyvals = NIL; ListCell *le; FuncExpr *fexpr; Oid func_oid; Assert(list_length(cm->keyvals) % 2 == 0); le = list_head(cm->keyvals); while (le != NULL) { Node *key; Node *val; Node *newval; ParseCallbackState pcbstate; Const *newkey; key = lfirst(le); le = lnext(cm->keyvals, le); val = lfirst(le); le = lnext(cm->keyvals, le); newval = transform_cypher_expr_recurse(cpstate, val); setup_parser_errposition_callback(&pcbstate, pstate, cm->location); // typtypmod, typcollation, typlen, and typbyval of agtype are // hard-coded. newkey = makeConst(TEXTOID, -1, InvalidOid, -1, CStringGetTextDatum(strVal(key)), false, false); cancel_parser_errposition_callback(&pcbstate); newkeyvals = lappend(lappend(newkeyvals, newkey), newval); } if (list_length(newkeyvals) == 0) { func_oid = get_ag_func_oid("agtype_build_map", 0); } else if (!cm->keep_null) { func_oid = get_ag_func_oid("agtype_build_map_nonull", 1, ANYOID); } else { func_oid = get_ag_func_oid("agtype_build_map", 1, ANYOID); } fexpr = makeFuncExpr(func_oid, AGTYPEOID, newkeyvals, InvalidOid, InvalidOid, COERCE_EXPLICIT_CALL); fexpr->location = cm->location; return (Node *)fexpr; } /* * Helper function to transform a cypher list into an agtype list. The function * will use agtype_add to concatenate lists when the number of parameters * exceeds 100, a PG limitation. */ static Node *transform_cypher_list(cypher_parsestate *cpstate, cypher_list *cl) { List *abl_args = NIL; ListCell *le = NULL; FuncExpr *aa_lhs_arg = NULL; FuncExpr *fexpr = NULL; Oid abl_func_oid = InvalidOid; Oid aa_func_oid = InvalidOid; int nelems = 0; int i = 0; /* determine which build function we need */ nelems = list_length(cl->elems); if (nelems == 0) { abl_func_oid = get_ag_func_oid("agtype_build_list", 0); } else { abl_func_oid = get_ag_func_oid("agtype_build_list", 1, ANYOID); } /* get the concat function oid, if necessary */ if (nelems > 100) { aa_func_oid = get_ag_func_oid("agtype_add", 2, AGTYPEOID, AGTYPEOID); } /* iterate through the list of elements */ foreach (le, cl->elems) { Node *texpr = NULL; /* transform the argument */ texpr = transform_cypher_expr_recurse(cpstate, lfirst(le)); /* * If we have more than 100 elements we will need to add in the list * concatenation function. */ if (i >= 100) { /* build the list function node argument for concatenate */ fexpr = makeFuncExpr(abl_func_oid, AGTYPEOID, abl_args, InvalidOid, InvalidOid, COERCE_EXPLICIT_CALL); fexpr->location = cl->location; /* initial case, set up for concatenating 2 lists */ if (aa_lhs_arg == NULL) { aa_lhs_arg = fexpr; } /* * For every other case, concatenate the list on to the previous * concatenate operation. */ else { List *aa_args = list_make2(aa_lhs_arg, fexpr); fexpr = makeFuncExpr(aa_func_oid, AGTYPEOID, aa_args, InvalidOid, InvalidOid, COERCE_EXPLICIT_CALL); fexpr->location = cl->location; /* set the lhs to the concatenation operation */ aa_lhs_arg = fexpr; } /* reset */ abl_args = NIL; i = 0; fexpr = NULL; } /* now add the latest transformed expression to the list */ abl_args = lappend(abl_args, texpr); i++; } /* now build the final list function */ fexpr = makeFuncExpr(abl_func_oid, AGTYPEOID, abl_args, InvalidOid, InvalidOid, COERCE_EXPLICIT_CALL); fexpr->location = cl->location; /* * If there was a previous concatenation or list function, build a final * concatenation function node */ if (aa_lhs_arg != NULL) { List *aa_args = list_make2(aa_lhs_arg, fexpr); fexpr = makeFuncExpr(aa_func_oid, AGTYPEOID, aa_args, InvalidOid, InvalidOid, COERCE_EXPLICIT_CALL); } return (Node *)fexpr; } // makes a VARIADIC agtype array static ArrayExpr *make_agtype_array_expr(List *args) { ArrayExpr *newa = makeNode(ArrayExpr); newa->elements = args; /* assume all the variadic arguments were coerced to the same type */ newa->element_typeid = AGTYPEOID; newa->array_typeid = AGTYPEARRAYOID; if (!OidIsValid(newa->array_typeid)) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_OBJECT), errmsg("could not find array type for data type %s", format_type_be(newa->element_typeid)))); } /* array_collid will be set by parse_collate.c */ newa->multidims = false; return newa; } /* * Transform a ColumnRef for indirection. Try to find the rte that the ColumnRef * references and pass the properties of that rte as what the ColumnRef is * referencing. Otherwise, reference the Var. */ static Node *transform_column_ref_for_indirection(cypher_parsestate *cpstate, ColumnRef *cr) { ParseState *pstate = (ParseState *)cpstate; ParseNamespaceItem *pnsi = NULL; Node *field1 = linitial(cr->fields); char *relname = NULL; Node *node = NULL; int levels_up = 0; Assert(IsA(field1, String)); relname = strVal(field1); /* locate the referenced RTE (used to be find_rte(cpstate, relname)) */ pnsi = refnameNamespaceItem(pstate, NULL, relname, cr->location, &levels_up); /* * If we didn't find anything, try looking for a previous variable * reference. Otherwise, return NULL (colNameToVar will return NULL * if nothing is found). */ if (!pnsi) { Node *prev_var = colNameToVar(pstate, relname, false, cr->location); return prev_var; } /* find the properties column of the NSI and return a var for it */ node = scanNSItemForColumn(pstate, pnsi, 0, "properties", cr->location); /* * Error out if we couldn't find it. * * TODO: Should we error out or return NULL for further processing? * For now, just error out. */ if (!node) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_OBJECT), errmsg("could not find properties for %s", relname))); } return node; } static Node *transform_A_Indirection(cypher_parsestate *cpstate, A_Indirection *a_ind) { int location; ListCell *lc = NULL; Node *ind_arg_expr = NULL; FuncExpr *func_expr = NULL; Oid func_access_oid = InvalidOid; Oid func_slice_oid = InvalidOid; List *args = NIL; bool is_access = false; /* validate that we have an indirection with at least 1 entry */ Assert(a_ind != NULL && list_length(a_ind->indirection)); /* get the agtype_access_operator function */ func_access_oid = get_ag_func_oid("agtype_access_operator", 1, AGTYPEARRAYOID); /* get the agtype_access_slice function */ func_slice_oid = get_ag_func_oid("agtype_access_slice", 3, AGTYPEOID, AGTYPEOID, AGTYPEOID); /* * If the indirection argument is a ColumnRef, we want to pull out the * properties, as a var node, if possible. */ if (IsA(a_ind->arg, ColumnRef)) { ColumnRef *cr = (ColumnRef *)a_ind->arg; ind_arg_expr = transform_column_ref_for_indirection(cpstate, cr); } /* * If we didn't get the properties from a ColumnRef, just transform the * indirection argument. */ if (ind_arg_expr == NULL) { ind_arg_expr = transform_cypher_expr_recurse(cpstate, a_ind->arg); } /* get the location of the expression */ location = exprLocation(ind_arg_expr); /* add the expression as the first entry */ args = lappend(args, ind_arg_expr); /* iterate through the indirections */ foreach (lc, a_ind->indirection) { Node *node = lfirst(lc); /* is this a slice? */ if (IsA(node, A_Indices) && ((A_Indices *)node)->is_slice) { A_Indices *indices = (A_Indices *)node; /* were we working on an access? if so, wrap and close it */ if (is_access) { ArrayExpr *newa = make_agtype_array_expr(args); func_expr = makeFuncExpr(func_access_oid, AGTYPEOID, list_make1(newa), InvalidOid, InvalidOid, COERCE_EXPLICIT_CALL); func_expr->funcvariadic = true; func_expr->location = location; /* * The result of this function is the input to the next access * or slice operator. So we need to start out with a new arg * list with this function expression. */ args = lappend(NIL, func_expr); /* we are no longer working on an access */ is_access = false; } /* add slice bounds to args */ if (!indices->lidx) { A_Const *n = makeNode(A_Const); n->isnull = true; n->location = -1; node = transform_cypher_expr_recurse(cpstate, (Node *)n); } else { node = transform_cypher_expr_recurse(cpstate, indices->lidx); } args = lappend(args, node); if (!indices->uidx) { A_Const *n = makeNode(A_Const); n->isnull = true; n->location = -1; node = transform_cypher_expr_recurse(cpstate, (Node *)n); } else { node = transform_cypher_expr_recurse(cpstate, indices->uidx); } args = lappend(args, node); /* wrap and close it */ func_expr = makeFuncExpr(func_slice_oid, AGTYPEOID, args, InvalidOid, InvalidOid, COERCE_EXPLICIT_CALL); func_expr->location = location; /* * The result of this function is the input to the next access * or slice operator. So we need to start out with a new arg * list with this function expression. */ args = lappend(NIL, func_expr); } /* is this a string or index?*/ else if (IsA(node, String) || IsA(node, A_Indices)) { /* we are working on an access */ is_access = true; /* is this an index? */ if (IsA(node, A_Indices)) { A_Indices *indices = (A_Indices *)node; node = transform_cypher_expr_recurse(cpstate, indices->uidx); args = lappend(args, node); } /* it must be a string */ else { Const *const_str = makeConst(AGTYPEOID, -1, InvalidOid, -1, string_to_agtype(strVal(node)), false, false); args = lappend(args, const_str); } } /* not an indirection we understand */ else { ereport(ERROR, (errmsg("invalid indirection node %d", nodeTag(node)))); } } /* if we were doing an access, we need wrap the args with access func. */ if (is_access) { ArrayExpr *newa = make_agtype_array_expr(args); func_expr = makeFuncExpr(func_access_oid, AGTYPEOID, list_make1(newa), InvalidOid, InvalidOid, COERCE_EXPLICIT_CALL); func_expr->funcvariadic = true; } Assert(func_expr != NULL); func_expr->location = location; return (Node *)func_expr; } static Node *transform_cypher_string_match(cypher_parsestate *cpstate, cypher_string_match *csm_node) { Node *expr; FuncExpr *func_expr; Oid func_access_oid; List *args = NIL; const char *func_name; switch (csm_node->operation) { case CSMO_STARTS_WITH: func_name = "agtype_string_match_starts_with"; break; case CSMO_ENDS_WITH: func_name = "agtype_string_match_ends_with"; break; case CSMO_CONTAINS: func_name = "agtype_string_match_contains"; break; default: ereport(ERROR, (errmsg_internal("unknown Cypher string match operation"))); } func_access_oid = get_ag_func_oid(func_name, 2, AGTYPEOID, AGTYPEOID); expr = transform_cypher_expr_recurse(cpstate, csm_node->lhs); args = lappend(args, expr); expr = transform_cypher_expr_recurse(cpstate, csm_node->rhs); args = lappend(args, expr); func_expr = makeFuncExpr(func_access_oid, AGTYPEOID, args, InvalidOid, InvalidOid, COERCE_EXPLICIT_CALL); func_expr->location = csm_node->location; return (Node *)func_expr; } /* * Function to create a typecasting node */ static Node *transform_cypher_typecast(cypher_parsestate *cpstate, cypher_typecast *ctypecast) { List *fname; FuncCall *fnode; /* verify input parameter */ Assert (cpstate != NULL); Assert (ctypecast != NULL); /* create the qualified function name, schema first */ fname = list_make1(makeString("ag_catalog")); /* append the name of the requested typecast function */ if (pg_strcasecmp(ctypecast->typecast, "edge") == 0) { fname = lappend(fname, makeString(FUNC_AGTYPE_TYPECAST_EDGE)); } else if (pg_strcasecmp(ctypecast->typecast, "path") == 0) { fname = lappend(fname, makeString(FUNC_AGTYPE_TYPECAST_PATH)); } else if (pg_strcasecmp(ctypecast->typecast, "vertex") == 0) { fname = lappend(fname, makeString(FUNC_AGTYPE_TYPECAST_VERTEX)); } else if (pg_strcasecmp(ctypecast->typecast, "numeric") == 0) { fname = lappend(fname, makeString(FUNC_AGTYPE_TYPECAST_NUMERIC)); } else if (pg_strcasecmp(ctypecast->typecast, "float") == 0) { fname = lappend(fname, makeString(FUNC_AGTYPE_TYPECAST_FLOAT)); } else if (pg_strcasecmp(ctypecast->typecast, "int") == 0 || pg_strcasecmp(ctypecast->typecast, "integer") == 0) { fname = lappend(fname, makeString(FUNC_AGTYPE_TYPECAST_INT)); } else if (pg_strcasecmp(ctypecast->typecast, "pg_float8") == 0) { fname = lappend(fname, makeString(FUNC_AGTYPE_TYPECAST_PG_FLOAT8)); } else if (pg_strcasecmp(ctypecast->typecast, "pg_bigint") == 0) { fname = lappend(fname, makeString(FUNC_AGTYPE_TYPECAST_PG_BIGINT)); } else if ((pg_strcasecmp(ctypecast->typecast, "bool") == 0 || pg_strcasecmp(ctypecast->typecast, "boolean") == 0)) { fname = lappend(fname, makeString(FUNC_AGTYPE_TYPECAST_BOOL)); } /* if none was found, error out */ else { ereport(ERROR, (errmsg_internal("typecast \'%s\' not supported", ctypecast->typecast))); } /* make a function call node */ fnode = makeFuncCall(fname, list_make1(ctypecast->expr), COERCE_SQL_SYNTAX, ctypecast->location); /* return the transformed function */ return transform_FuncCall(cpstate, fnode); } /* * Code borrowed from PG's transformFuncCall and updated for AGE */ static Node *transform_FuncCall(cypher_parsestate *cpstate, FuncCall *fn) { ParseState *pstate = &cpstate->pstate; Node *last_srf = pstate->p_last_srf; List *targs = NIL; List *fname = NIL; ListCell *arg; Node *retval = NULL; /* Transform the list of arguments ... */ foreach(arg, fn->args) { Node *farg = NULL; farg = (Node *)lfirst(arg); targs = lappend(targs, transform_cypher_expr_recurse(cpstate, farg)); } /* within group should not happen */ Assert(!fn->agg_within_group); /* * If the function name is not qualified, then it is one of ours. We need to * construct its name, and qualify it, so that PG can find it. */ if (list_length(fn->funcname) == 1) { /* get the name, size, and the ag name allocated */ char *name = ((String*)linitial(fn->funcname))->sval; int pnlen = strlen(name); char *ag_name = palloc(pnlen + 5); int i; /* copy in the prefix - all AGE functions are prefixed with age_ */ strncpy(ag_name, "age_", 4); /* * All AGE function names are in lower case. So, copy in the name * in lower case. */ for (i = 0; i < pnlen; i++) ag_name[i + 4] = tolower(name[i]); /* terminate it with 0 */ ag_name[i + 4] = 0; /* qualify the name with our schema name */ fname = list_make2(makeString("ag_catalog"), makeString(ag_name)); /* * Currently 3 functions need the graph name passed in as the first * argument - in addition to the other arguments: startNode, endNode, * and vle. So, check for those 3 functions here and that the arg list * is not empty. Then prepend the graph name if necessary. */ if ((list_length(targs) != 0) && (strcmp("startNode", name) == 0 || strcmp("endNode", name) == 0 || strcmp("vle", name) == 0 || strcmp("vertex_stats", name) == 0)) { char *graph_name = cpstate->graph_name; Datum d = string_to_agtype(graph_name); Const *c = makeConst(AGTYPEOID, -1, InvalidOid, -1, d, false, false); targs = lcons(c, targs); } } /* If it is not one of our functions, pass the name list through */ else { fname = fn->funcname; } /* ... and hand off to ParseFuncOrColumn */ retval = ParseFuncOrColumn(pstate, fname, targs, last_srf, fn, false, fn->location); /* flag that an aggregate was found during a transform */ if (retval != NULL && retval->type == T_Aggref) { cpstate->exprHasAgg = true; } return retval; } /* * Code borrowed from PG's transformCoalesceExpr and updated for AGE */ static Node *transform_CoalesceExpr(cypher_parsestate *cpstate, CoalesceExpr *cexpr) { ParseState *pstate = &cpstate->pstate; CoalesceExpr *newcexpr = makeNode(CoalesceExpr); Node *last_srf = pstate->p_last_srf; List *newargs = NIL; List *newcoercedargs = NIL; ListCell *args; foreach(args, cexpr->args) { Node *e = (Node *)lfirst(args); Node *newe; newe = transform_cypher_expr_recurse(cpstate, e); newargs = lappend(newargs, newe); } newcexpr->coalescetype = select_common_type(pstate, newargs, "COALESCE", NULL); /* coalescecollid will be set by parse_collate.c */ /* Convert arguments if necessary */ foreach(args, newargs) { Node *e = (Node *)lfirst(args); Node *newe; newe = coerce_to_common_type(pstate, e, newcexpr->coalescetype, "COALESCE"); newcoercedargs = lappend(newcoercedargs, newe); } /* if any subexpression contained a SRF, complain */ if (pstate->p_last_srf != last_srf) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), /* translator: %s is name of a SQL construct, eg GROUP BY */ errmsg("set-returning functions are not allowed in %s", "COALESCE"), parser_errposition(pstate, exprLocation(pstate->p_last_srf)))); } newcexpr->args = newcoercedargs; newcexpr->location = cexpr->location; return (Node *) newcexpr; } /* * Code borrowed from PG's transformCaseExpr and updated for AGE */ static Node *transform_CaseExpr(cypher_parsestate *cpstate, CaseExpr *cexpr) { ParseState *pstate = &cpstate->pstate; CaseExpr *newcexpr = makeNode(CaseExpr); Node *last_srf = pstate->p_last_srf; Node *arg; CaseTestExpr *placeholder; List *newargs; List *resultexprs; ListCell *l; Node *defresult; Oid ptype; /* transform the test expression, if any */ arg = transform_cypher_expr_recurse(cpstate, (Node *) cexpr->arg); /* generate placeholder for test expression */ if (arg) { if (exprType(arg) == UNKNOWNOID) arg = coerce_to_common_type(pstate, arg, TEXTOID, "CASE"); assign_expr_collations(pstate, arg); placeholder = makeNode(CaseTestExpr); placeholder->typeId = exprType(arg); placeholder->typeMod = exprTypmod(arg); placeholder->collation = exprCollation(arg); } else { placeholder = NULL; } newcexpr->arg = (Expr *) arg; /* transform the list of arguments */ newargs = NIL; resultexprs = NIL; foreach(l, cexpr->args) { CaseWhen *w = lfirst_node(CaseWhen, l); CaseWhen *neww = makeNode(CaseWhen); Node *warg; warg = (Node *) w->expr; if (placeholder) { if(is_ag_node(warg, cypher_comparison_aexpr) || is_ag_node(warg, cypher_comparison_boolexpr) ) { List *funcname = list_make1(makeString("ag_catalog")); funcname = lappend(funcname, makeString("bool_to_agtype")); warg = (Node *) makeFuncCall(funcname, list_make1(warg), COERCE_EXPLICIT_CAST, cexpr->location); } /* shorthand form was specified, so expand... */ warg = (Node *) makeSimpleA_Expr(AEXPR_OP, "=", (Node *) placeholder, warg, w->location); } neww->expr = (Expr *) transform_cypher_expr_recurse(cpstate, warg); neww->expr = (Expr *) coerce_to_boolean(pstate, (Node *) neww->expr, "CASE/WHEN"); warg = (Node *) w->result; if(is_ag_node(warg, cypher_comparison_aexpr) || is_ag_node(warg, cypher_comparison_boolexpr) ) { List *funcname = list_make1(makeString("ag_catalog")); funcname = lappend(funcname, makeString("bool_to_agtype")); warg = (Node *) makeFuncCall(funcname, list_make1(warg), COERCE_EXPLICIT_CAST, cexpr->location); } neww->result = (Expr *) transform_cypher_expr_recurse(cpstate, warg); neww->location = w->location; newargs = lappend(newargs, neww); resultexprs = lappend(resultexprs, neww->result); } newcexpr->args = newargs; /* transform the default clause */ defresult = (Node *) cexpr->defresult; if (defresult == NULL) { A_Const *n = makeNode(A_Const); n->isnull = true; n->location = -1; defresult = (Node *) n; } newcexpr->defresult = (Expr *) transform_cypher_expr_recurse(cpstate, defresult); resultexprs = lcons(newcexpr->defresult, resultexprs); /* * we pass a NULL context to select_common_type because the common types can * only be AGTYPEOID or BOOLOID. If it returns invalidoid, we know there is a * boolean involved. */ ptype = select_common_type(pstate, resultexprs, NULL, NULL); //InvalidOid shows that there is a boolean in the result expr. if (ptype == InvalidOid) { //we manually set the type to boolean here to handle the bool casting. ptype = BOOLOID; } Assert(OidIsValid(ptype)); newcexpr->casetype = ptype; /* casecollid will be set by parse_collate.c */ /* Convert default result clause, if necessary */ newcexpr->defresult = (Expr *) coerce_to_common_type(pstate, (Node *) newcexpr->defresult, ptype, "CASE/ELSE"); /* Convert when-clause results, if necessary */ foreach(l, newcexpr->args) { CaseWhen *w = (CaseWhen *) lfirst(l); w->result = (Expr *) coerce_to_common_type(pstate, (Node *) w->result, ptype, "CASE/WHEN"); } /* if any subexpression contained a SRF, complain */ if (pstate->p_last_srf != last_srf) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), /* translator: %s is name of a SQL construct, eg GROUP BY */ errmsg("set-returning functions are not allowed in %s", "CASE"), errhint("You might be able to move the set-returning function into a LATERAL FROM item."), parser_errposition(pstate, exprLocation(pstate->p_last_srf)))); newcexpr->location = cexpr->location; return (Node *) newcexpr; } /* from PG's transformSubLink but reduced and hooked into our parser */ static Node *transform_SubLink(cypher_parsestate *cpstate, SubLink *sublink) { Node *result = (Node*)sublink; Query *qtree; ParseState *pstate = (ParseState*)cpstate; const char *err = NULL; /* * Check to see if the sublink is in an invalid place within the query. We * allow sublinks everywhere in SELECT/INSERT/UPDATE/DELETE, but generally * not in utility statements. */ switch (pstate->p_expr_kind) { case EXPR_KIND_NONE: Assert(false); /* can't happen */ break; case EXPR_KIND_OTHER: /* Accept sublink here; caller must throw error if wanted */ break; case EXPR_KIND_SELECT_TARGET: case EXPR_KIND_FROM_SUBSELECT: case EXPR_KIND_WHERE: /* okay */ break; default: ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg_internal("unsupported SubLink"), parser_errposition(pstate, sublink->location))); } if (err) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg_internal("%s", err), parser_errposition(pstate, sublink->location))); pstate->p_hasSubLinks = true; /* * OK, let's transform the sub-SELECT. */ qtree = cypher_parse_sub_analyze(sublink->subselect, cpstate, NULL, false, true); /* * Check that we got a SELECT. Anything else should be impossible given * restrictions of the grammar, but check anyway. */ if (!IsA(qtree, Query) || qtree->commandType != CMD_SELECT) elog(ERROR, "unexpected non-SELECT command in SubLink"); sublink->subselect = (Node *)qtree; if (sublink->subLinkType == EXISTS_SUBLINK) { /* * EXISTS needs no test expression or combining operator. These fields * should be null already, but make sure. */ sublink->testexpr = NULL; sublink->operName = NIL; } else elog(ERROR, "unsupported SubLink type"); return result; } age-PG16-v1.5.0-rc0/src/backend/parser/cypher_gram.y000066400000000000000000002172061454606241200217540ustar00rootroot00000000000000%{ /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "nodes/makefuncs.h" #include "parser/parser.h" #include "parser/cypher_gram.h" #include "parser/cypher_parse_node.h" #include "parser/scansup.h" // override the default action for locations #define YYLLOC_DEFAULT(current, rhs, n) \ do \ { \ if ((n) > 0) \ current = (rhs)[1]; \ else \ current = -1; \ } while (0) #define YYMALLOC palloc #define YYFREE pfree %} %locations %name-prefix="cypher_yy" %pure-parser %lex-param {ag_scanner_t scanner} %parse-param {ag_scanner_t scanner} %parse-param {cypher_yy_extra *extra} %union { /* types in cypher_yylex() */ int integer; char *string; const char *keyword; /* extra types */ bool boolean; Node *node; List *list; } %token INTEGER %token DECIMAL STRING %token IDENTIFIER %token PARAMETER /* operators that have more than 1 character */ %token NOT_EQ LT_EQ GT_EQ DOT_DOT TYPECAST PLUS_EQ EQ_TILDE CONCAT %token ACCESS_PATH LEFT_CONTAINS RIGHT_CONTAINS ANY_EXISTS ALL_EXISTS /* keywords in alphabetical order */ %token ALL ANALYZE AND AS ASC ASCENDING BY CALL CASE COALESCE CONTAINS CREATE DELETE DESC DESCENDING DETACH DISTINCT ELSE END_P ENDS EXISTS EXPLAIN FALSE_P IN IS LIMIT MATCH MERGE NOT NULL_P OPTIONAL OR ORDER REMOVE RETURN SET SKIP STARTS THEN TRUE_P UNION UNWIND VERBOSE WHEN WHERE WITH XOR YIELD /* query */ %type stmt %type single_query query_part_init query_part_last cypher_stmt reading_clause_list updating_clause_list_0 updating_clause_list_1 %type reading_clause updating_clause /* RETURN and WITH clause */ %type return return_item sort_item skip_opt limit_opt with %type return_item_list order_by_opt sort_item_list %type order_opt /* MATCH clause */ %type match cypher_varlen_opt cypher_range_opt cypher_range_idx cypher_range_idx_opt %type Iconst %type optional_opt /* CREATE clause */ %type create /* UNWIND clause */ %type unwind /* SET and REMOVE clause */ %type set set_item remove remove_item %type set_item_list remove_item_list /* DELETE clause */ %type delete %type detach_opt /* MERGE clause */ %type merge /* CALL ... YIELD clause */ %type call_stmt yield_item %type yield_item_list /* common */ %type where_opt /* pattern */ %type pattern simple_path_opt_parens simple_path %type path anonymous_path path_node path_relationship path_relationship_body properties_opt %type label_opt /* expression */ %type expr expr_opt expr_atom expr_literal map list %type expr_case expr_case_when expr_case_default %type expr_case_when_list %type expr_var expr_func expr_func_norm expr_func_subexpr %type expr_list expr_list_opt map_keyval_list_opt map_keyval_list %type property_value /* names */ %type property_key_name var_name var_name_opt label_name %type symbolic_name schema_name %type reserved_keyword safe_keywords conflicted_keywords %type func_name /* precedence: lowest to highest */ %left UNION %left OR %left AND %left XOR %right NOT %left '=' NOT_EQ '<' LT_EQ '>' GT_EQ %left '@' '|' '&' '?' LEFT_CONTAINS RIGHT_CONTAINS ANY_EXISTS ALL_EXISTS %left '+' '-' CONCAT %left '*' '/' '%' %left '^' %nonassoc IN IS %right UNARY_MINUS %nonassoc CONTAINS ENDS EQ_TILDE STARTS %left '[' ']' '(' ')' %left '.' ACCESS_PATH %left TYPECAST /*set operations*/ %type all_or_distinct /* utility options */ %type utility_option_list %type utility_option_elem utility_option_arg %type utility_option_name %{ // // internal alias check static bool has_internal_default_prefix(char *str); // unique name generation #define UNIQUE_NAME_NULL_PREFIX AGE_DEFAULT_PREFIX"unique_null_prefix" static char *create_unique_name(char *prefix_name); static unsigned long get_a_unique_number(void); // logical operators static Node *make_or_expr(Node *lexpr, Node *rexpr, int location); static Node *make_and_expr(Node *lexpr, Node *rexpr, int location); static Node *make_xor_expr(Node *lexpr, Node *rexpr, int location); static Node *make_not_expr(Node *expr, int location); static Node *make_comparison_and_expr(Node *lexpr, Node *rexpr, int location); static Node *make_cypher_comparison_aexpr(A_Expr_Kind kind, char *name, Node *lexpr, Node *rexpr, int location); static Node *make_cypher_comparison_boolexpr(BoolExprType boolop, List *args, int location); // arithmetic operators static Node *do_negate(Node *n, int location); static void do_negate_float(Float *v); // indirection static Node *append_indirection(Node *expr, Node *selector); // literals static Node *make_int_const(int i, int location); static Node *make_float_const(char *s, int location); static Node *make_string_const(char *s, int location); static Node *make_bool_const(bool b, int location); static Node *make_null_const(int location); // typecast static Node *make_typecast_expr(Node *expr, char *typecast, int location); // functions static Node *make_function_expr(List *func_name, List *exprs, int location); static Node *make_star_function_expr(List *func_name, List *exprs, int location); static Node *make_distinct_function_expr(List *func_name, List *exprs, int location); static FuncCall *node_to_agtype(Node* fnode, char *type, int location); // setops static Node *make_set_op(SetOperation op, bool all_or_distinct, List *larg, List *rarg); // VLE static cypher_relationship *build_VLE_relation(List *left_arg, cypher_relationship *cr, Node *right_arg, int left_arg_location, int cr_location); // comparison static bool is_A_Expr_a_comparison_operation(cypher_comparison_aexpr *a); static Node *build_comparison_expression(Node *left_grammar_node, Node *right_grammar_node, char *opr_name, int location); %} %% /* * query */ stmt: cypher_stmt semicolon_opt { /* * If there is no transition for the lookahead token and the * clauses can be reduced to single_query, the parsing is * considered successful although it actually isn't. * * For example, when `MATCH ... CREATE ... MATCH ... ;` query is * being parsed, there is no transition for the second `MATCH ...` * because the query is wrong but `MATCH .. CREATE ...` is correct * so it will be reduced to query_part_last anyway even if there * are more tokens to read. * * Throw syntax error in this case. */ if (yychar != YYEOF) yyerror(&yylloc, scanner, extra, "syntax error"); extra->result = $1; extra->extra = NULL; } | EXPLAIN cypher_stmt semicolon_opt { ExplainStmt *estmt = NULL; if (yychar != YYEOF) yyerror(&yylloc, scanner, extra, "syntax error"); extra->result = $2; estmt = makeNode(ExplainStmt); estmt->query = NULL; estmt->options = NIL; extra->extra = (Node *)estmt; } | EXPLAIN VERBOSE cypher_stmt semicolon_opt { ExplainStmt *estmt = NULL; if (yychar != YYEOF) yyerror(&yylloc, scanner, extra, "syntax error"); extra->result = $3; estmt = makeNode(ExplainStmt); estmt->query = NULL; estmt->options = list_make1(makeDefElem("verbose", NULL, @2));; extra->extra = (Node *)estmt; } | EXPLAIN ANALYZE cypher_stmt semicolon_opt { ExplainStmt *estmt = NULL; if (yychar != YYEOF) yyerror(&yylloc, scanner, extra, "syntax error"); extra->result = $3; estmt = makeNode(ExplainStmt); estmt->query = NULL; estmt->options = list_make1(makeDefElem("analyze", NULL, @2));; extra->extra = (Node *)estmt; } | EXPLAIN ANALYZE VERBOSE cypher_stmt semicolon_opt { ExplainStmt *estmt = NULL; if (yychar != YYEOF) yyerror(&yylloc, scanner, extra, "syntax error"); extra->result = $4; estmt = makeNode(ExplainStmt); estmt->query = NULL; estmt->options = list_make2(makeDefElem("analyze", NULL, @2), makeDefElem("verbose", NULL, @3));; extra->extra = (Node *)estmt; } | EXPLAIN '(' utility_option_list ')' cypher_stmt semicolon_opt { ExplainStmt *estmt = NULL; if (yychar != YYEOF) yyerror(&yylloc, scanner, extra, "syntax error"); extra->result = $5; estmt = makeNode(ExplainStmt); estmt->query = NULL; estmt->options = $3; extra->extra = (Node *)estmt; } ; cypher_stmt: single_query { $$ = $1; } | cypher_stmt UNION all_or_distinct cypher_stmt { $$ = list_make1(make_set_op(SETOP_UNION, $3, $1, $4)); } ; call_stmt: CALL expr_func_norm { cypher_call *n = make_ag_node(cypher_call); n->funccall = castNode (FuncCall, $2); $$ = (Node *)n; } | CALL expr '.' expr { cypher_call *n = make_ag_node(cypher_call); if (IsA($4, FuncCall) && IsA($2, ColumnRef)) { FuncCall *fc = (FuncCall*)$4; ColumnRef *cr = (ColumnRef*)$2; List *fields = cr->fields; String *string = linitial(fields); /* * A function can only be qualified with a single schema. So, we * check to see that the function isn't already qualified. There * may be unforeseen cases where we might need to remove this in * the future. */ if (list_length(fc->funcname) == 1) { fc->funcname = lcons(string, fc->funcname); $$ = (Node*)fc; } else ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("function already qualified"), ag_scanner_errposition(@1, scanner))); n->funccall = fc; $$ = (Node *)n; } else { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("CALL statement must be a qualified function"), ag_scanner_errposition(@1, scanner))); } } | CALL expr_func_norm YIELD yield_item_list where_opt { cypher_call *n = make_ag_node(cypher_call); n->funccall = castNode (FuncCall, $2); n->yield_items = $4; n->where = $5; $$ = (Node *)n; } | CALL expr '.' expr YIELD yield_item_list where_opt { cypher_call *n = make_ag_node(cypher_call); if (IsA($4, FuncCall) && IsA($2, ColumnRef)) { FuncCall *fc = (FuncCall*)$4; ColumnRef *cr = (ColumnRef*)$2; List *fields = cr->fields; String *string = linitial(fields); /* * A function can only be qualified with a single schema. So, we * check to see that the function isn't already qualified. There * may be unforeseen cases where we might need to remove this in * the future. */ if (list_length(fc->funcname) == 1) { fc->funcname = lcons(string, fc->funcname); $$ = (Node*)fc; } else ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("function already qualified"), ag_scanner_errposition(@1, scanner))); n->funccall = fc; n->yield_items = $6; n->where = $7; $$ = (Node *)n; } else { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("CALL statement must be a qualified function"), ag_scanner_errposition(@1, scanner))); } } ; yield_item_list: yield_item { $$ = list_make1($1); } | yield_item_list ',' yield_item { $$ = lappend($1, $3); } ; yield_item: expr AS var_name { ResTarget *n; n = makeNode(ResTarget); n->name = $3; n->indirection = NIL; n->val = $1; n->location = @1; $$ = (Node *)n; } | expr { ResTarget *n; n = makeNode(ResTarget); n->name = NULL; n->indirection = NIL; n->val = $1; n->location = @1; $$ = (Node *)n; } ; semicolon_opt: /* empty */ | ';' ; all_or_distinct: ALL { $$ = true; } | DISTINCT { $$ = false; } | /*EMPTY*/ { $$ = false; } /* * The overall structure of single_query looks like below. * * ( reading_clause* updating_clause* with )* * reading_clause* ( updating_clause+ | updating_clause* return ) */ single_query: query_part_init query_part_last { $$ = list_concat($1, $2); } ; query_part_init: /* empty */ { $$ = NIL; } | query_part_init reading_clause_list updating_clause_list_0 with { $$ = lappend(list_concat(list_concat($1, $2), $3), $4); } ; query_part_last: reading_clause_list updating_clause_list_1 { $$ = list_concat($1, $2); } | reading_clause_list updating_clause_list_0 return { $$ = lappend(list_concat($1, $2), $3); } | reading_clause_list call_stmt { $$ = list_concat($1, list_make1($2)); } ; reading_clause_list: /* empty */ { $$ = NIL; } | reading_clause_list reading_clause { $$ = lappend($1, $2); } ; reading_clause: match | unwind | call_stmt ; updating_clause_list_0: /* empty */ { $$ = NIL; } | updating_clause_list_1 ; updating_clause_list_1: updating_clause { $$ = list_make1($1); } | updating_clause_list_1 updating_clause { $$ = lappend($1, $2); } ; updating_clause: create | set | remove | delete | merge ; cypher_varlen_opt: '*' cypher_range_opt { A_Indices *n = (A_Indices *) $2; if (n->lidx == NULL) n->lidx = make_int_const(1, @2); if (n->uidx != NULL) { A_Const *lidx = (A_Const *) n->lidx; A_Const *uidx = (A_Const *) n->uidx; if (lidx->val.ival.ival > uidx->val.ival.ival) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("invalid range"), ag_scanner_errposition(@2, scanner))); } $$ = (Node *) n; } | /* EMPTY */ { $$ = NULL; } ; cypher_range_opt: cypher_range_idx { A_Indices *n; n = makeNode(A_Indices); n->lidx = copyObject($1); n->uidx = $1; $$ = (Node *) n; } | cypher_range_idx_opt DOT_DOT cypher_range_idx_opt { A_Indices *n; n = makeNode(A_Indices); n->lidx = $1; n->uidx = $3; $$ = (Node *) n; } | /* EMPTY */ { $$ = (Node *) makeNode(A_Indices); } ; cypher_range_idx: Iconst { $$ = make_int_const($1, @1); } ; cypher_range_idx_opt: cypher_range_idx | /* EMPTY */ { $$ = NULL; } ; Iconst: INTEGER /* * RETURN and WITH clause */ return: RETURN DISTINCT return_item_list order_by_opt skip_opt limit_opt { cypher_return *n; n = make_ag_node(cypher_return); n->distinct = true; n->items = $3; n->order_by = $4; n->skip = $5; n->limit = $6; $$ = (Node *)n; } | RETURN return_item_list order_by_opt skip_opt limit_opt { cypher_return *n; n = make_ag_node(cypher_return); n->distinct = false; n->items = $2; n->order_by = $3; n->skip = $4; n->limit = $5; $$ = (Node *)n; } ; return_item_list: return_item { $$ = list_make1($1); } | return_item_list ',' return_item { $$ = lappend($1, $3); } ; return_item: expr AS var_name { ResTarget *n; n = makeNode(ResTarget); n->name = $3; n->indirection = NIL; n->val = $1; n->location = @1; $$ = (Node *)n; } | expr { ResTarget *n; n = makeNode(ResTarget); n->name = NULL; n->indirection = NIL; n->val = $1; n->location = @1; $$ = (Node *)n; } | '*' { ColumnRef *cr; ResTarget *rt; cr = makeNode(ColumnRef); cr->fields = list_make1(makeNode(A_Star)); cr->location = @1; rt = makeNode(ResTarget); rt->name = NULL; rt->indirection = NIL; rt->val = (Node *)cr; rt->location = @1; $$ = (Node *)rt; } ; order_by_opt: /* empty */ { $$ = NIL; } | ORDER BY sort_item_list { $$ = $3; } ; sort_item_list: sort_item { $$ = list_make1($1); } | sort_item_list ',' sort_item { $$ = lappend($1, $3); } ; sort_item: expr order_opt { SortBy *n; n = makeNode(SortBy); n->node = $1; n->sortby_dir = $2; n->sortby_nulls = SORTBY_NULLS_DEFAULT; n->useOp = NIL; n->location = -1; // no operator $$ = (Node *)n; } ; order_opt: /* empty */ { $$ = SORTBY_DEFAULT; // is the same with SORTBY_ASC } | ASC { $$ = SORTBY_ASC; } | ASCENDING { $$ = SORTBY_ASC; } | DESC { $$ = SORTBY_DESC; } | DESCENDING { $$ = SORTBY_DESC; } ; skip_opt: /* empty */ { $$ = NULL; } | SKIP expr { $$ = $2; } ; limit_opt: /* empty */ { $$ = NULL; } | LIMIT expr { $$ = $2; } ; with: WITH DISTINCT return_item_list order_by_opt skip_opt limit_opt where_opt { ListCell *li; cypher_with *n; // check expressions are aliased foreach (li, $3) { ResTarget *item = lfirst(li); // variable does not have to be aliased if (IsA(item->val, ColumnRef) || item->name) continue; ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("expression item must be aliased"), errhint("Items can be aliased by using AS."), ag_scanner_errposition(item->location, scanner))); } n = make_ag_node(cypher_with); n->distinct = true; n->items = $3; n->order_by = $4; n->skip = $5; n->limit = $6; n->where = $7; $$ = (Node *)n; } | WITH return_item_list order_by_opt skip_opt limit_opt where_opt { ListCell *li; cypher_with *n; // check expressions are aliased foreach (li, $2) { ResTarget *item = lfirst(li); // variable does not have to be aliased if (IsA(item->val, ColumnRef) || item->name) continue; ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("expression item must be aliased"), errhint("Items can be aliased by using AS."), ag_scanner_errposition(item->location, scanner))); } n = make_ag_node(cypher_with); n->distinct = false; n->items = $2; n->order_by = $3; n->skip = $4; n->limit = $5; n->where = $6; $$ = (Node *)n; } ; /* * MATCH clause */ match: optional_opt MATCH pattern where_opt { cypher_match *n; n = make_ag_node(cypher_match); n->optional = $1; n->pattern = $3; n->where = $4; $$ = (Node *)n; } ; optional_opt: OPTIONAL { $$ = true; } | /* EMPTY */ { $$ = false; } ; unwind: UNWIND expr AS var_name { ResTarget *res; cypher_unwind *n; res = makeNode(ResTarget); res->name = $4; res->val = (Node *) $2; res->location = @2; n = make_ag_node(cypher_unwind); n->target = res; $$ = (Node *) n; } /* * CREATE clause */ create: CREATE pattern { cypher_create *n; n = make_ag_node(cypher_create); n->pattern = $2; $$ = (Node *)n; } ; /* * SET and REMOVE clause */ set: SET set_item_list { cypher_set *n; n = make_ag_node(cypher_set); n->items = $2; n->is_remove = false; n->location = @1; $$ = (Node *)n; } ; set_item_list: set_item { $$ = list_make1($1); } | set_item_list ',' set_item { $$ = lappend($1, $3); } ; set_item: expr '=' expr { cypher_set_item *n; n = make_ag_node(cypher_set_item); n->prop = $1; n->expr = $3; n->is_add = false; n->location = @1; $$ = (Node *)n; } | expr PLUS_EQ expr { cypher_set_item *n; n = make_ag_node(cypher_set_item); n->prop = $1; n->expr = $3; n->is_add = true; n->location = @1; $$ = (Node *)n; } ; remove: REMOVE remove_item_list { cypher_set *n; n = make_ag_node(cypher_set); n->items = $2; n->is_remove = true; n->location = @1; $$ = (Node *)n; } ; remove_item_list: remove_item { $$ = list_make1($1); } | remove_item_list ',' remove_item { $$ = lappend($1, $3); } ; remove_item: expr { cypher_set_item *n; n = make_ag_node(cypher_set_item); n->prop = $1; n->expr = make_null_const(-1); n->is_add = false; $$ = (Node *)n; } ; /* * DELETE clause */ delete: detach_opt DELETE expr_list { cypher_delete *n; n = make_ag_node(cypher_delete); n->detach = $1; n->exprs = $3; n->location = @1; $$ = (Node *)n; } ; detach_opt: DETACH { $$ = true; } | /* EMPTY */ { $$ = false; } ; /* * MERGE clause */ merge: MERGE path { cypher_merge *n; n = make_ag_node(cypher_merge); n->path = $2; $$ = (Node *)n; } ; /* * common */ where_opt: /* empty */ { $$ = NULL; } | WHERE expr { $$ = $2; } ; utility_option_list: utility_option_elem { $$ = list_make1($1); } | utility_option_list ',' utility_option_elem { $$ = lappend($1, $3); } ; utility_option_elem: utility_option_name utility_option_arg { $$ = (Node *)makeDefElem($1, $2, @1); } ; utility_option_name: IDENTIFIER { char *modified_name = downcase_truncate_identifier($1, strlen($1), true); $$ = modified_name; } | safe_keywords { char *name = pstrdup($1); char *modified_name = downcase_truncate_identifier(name, strlen(name), true); $$ = modified_name; } ; utility_option_arg: IDENTIFIER { char *modified_val = downcase_truncate_identifier($1, strlen($1), true); $$ = (Node *)makeString(modified_val); } | INTEGER { $$ = (Node *)makeInteger($1); } | TRUE_P { $$ = (Node *)makeString("true"); } | FALSE_P { $$ = (Node *)makeString("false"); } | /* EMPTY */ { $$ = NULL; } ; /* * pattern */ /* pattern is a set of one or more paths */ pattern: path { $$ = list_make1($1); } | pattern ',' path { $$ = lappend($1, $3); } ; /* path is a series of connected nodes and relationships */ path: anonymous_path | var_name '=' anonymous_path /* named path */ { cypher_path *p; p = (cypher_path *)$3; p->var_name = $1; p->parsed_var_name = $1; p->location = @1; $$ = (Node *)p; } ; anonymous_path: simple_path_opt_parens { cypher_path *n; n = make_ag_node(cypher_path); n->path = $1; n->var_name = NULL; n->parsed_var_name = NULL; n->location = @1; $$ = (Node *)n; } ; simple_path_opt_parens: simple_path | '(' simple_path ')' { $$ = $2; } ; simple_path: path_node { $$ = list_make1($1); } | simple_path path_relationship path_node { cypher_relationship *cr = NULL; /* get the relationship */ cr = (cypher_relationship *)$2; /* if this is a VLE relation node */ if (cr->varlen != NULL) { /* build the VLE relation */ cr = build_VLE_relation($1, cr, $3, @1, @2); /* return the VLE relation in the path */ $$ = lappend(lappend($1, cr), $3); } /* otherwise, it is a regular relationship node */ else { $$ = lappend(lappend($1, $2), $3); } } ; path_node: '(' var_name_opt label_opt properties_opt ')' { cypher_node *n; n = make_ag_node(cypher_node); n->name = $2; n->parsed_name = $2; n->label = $3; n->parsed_label = $3; n->props = $4; n->location = @2; $$ = (Node *)n; } ; path_relationship: '-' path_relationship_body '-' { cypher_relationship *n = (cypher_relationship *)$2; n->dir = CYPHER_REL_DIR_NONE; n->location = @2; $$ = $2; } | '-' path_relationship_body '-' '>' { cypher_relationship *n = (cypher_relationship *)$2; n->dir = CYPHER_REL_DIR_RIGHT; n->location = @2; $$ = $2; } | '<' '-' path_relationship_body '-' { cypher_relationship *n = (cypher_relationship *)$3; n->dir = CYPHER_REL_DIR_LEFT; n->location = @3; $$ = $3; } ; path_relationship_body: '[' var_name_opt label_opt cypher_varlen_opt properties_opt ']' { cypher_relationship *n; n = make_ag_node(cypher_relationship); n->name = $2; n->parsed_name = $2; n->label = $3; n->parsed_label = $3; n->varlen = $4; n->props = $5; $$ = (Node *)n; } | /* empty */ { cypher_relationship *n; n = make_ag_node(cypher_relationship); n->name = NULL; n->parsed_name = NULL; n->label = NULL; n->parsed_label = NULL; n->varlen = NULL; n->props = NULL; $$ = (Node *)n; } ; label_opt: /* empty */ { $$ = NULL; } | ':' label_name { $$ = $2; } ; properties_opt: /* empty */ { $$ = NULL; } | map | PARAMETER { cypher_param *n; n = make_ag_node(cypher_param); n->name = $1; n->location = @1; $$ = (Node *)n; } ; /* * expression */ expr: expr OR expr { $$ = make_or_expr($1, $3, @2); } | expr AND expr { $$ = make_and_expr($1, $3, @2); } | expr XOR expr { $$ = make_xor_expr($1, $3, @2); } | NOT expr { $$ = make_not_expr($2, @1); } | expr '=' expr { $$ = build_comparison_expression($1, $3, "=", @2); } | expr NOT_EQ expr { $$ = build_comparison_expression($1, $3, "<>", @2); } | expr '<' expr { $$ = build_comparison_expression($1, $3, "<", @2); } | expr LT_EQ expr { $$ = build_comparison_expression($1, $3, "<=", @2); } | expr '>' expr { $$ = build_comparison_expression($1, $3, ">", @2); } | expr GT_EQ expr { $$ = build_comparison_expression($1, $3, ">=", @2); } | expr LEFT_CONTAINS expr { $$ = (Node *)makeSimpleA_Expr(AEXPR_OP, "<@", $1, $3, @2); } | expr RIGHT_CONTAINS expr { $$ = (Node *)makeSimpleA_Expr(AEXPR_OP, "@>", $1, $3, @2); } | expr '?' expr %prec '.' { $$ = (Node *)makeSimpleA_Expr(AEXPR_OP, "?", $1, $3, @2); } | expr ANY_EXISTS expr { $$ = (Node *)makeSimpleA_Expr(AEXPR_OP, "?|", $1, $3, @2); } | expr ALL_EXISTS expr { $$ = (Node *)makeSimpleA_Expr(AEXPR_OP, "?&", $1, $3, @2); } | expr CONCAT expr { $$ = (Node *)makeSimpleA_Expr(AEXPR_OP, "||", $1, $3, @2); } | expr ACCESS_PATH expr { $$ = (Node *)makeSimpleA_Expr(AEXPR_OP, "#>", $1, $3, @2); } | expr '+' expr { $$ = (Node *)makeSimpleA_Expr(AEXPR_OP, "+", $1, $3, @2); } | expr '-' expr { $$ = (Node *)makeSimpleA_Expr(AEXPR_OP, "-", $1, $3, @2); } | expr '*' expr { $$ = (Node *)makeSimpleA_Expr(AEXPR_OP, "*", $1, $3, @2); } | expr '/' expr { $$ = (Node *)makeSimpleA_Expr(AEXPR_OP, "/", $1, $3, @2); } | expr '%' expr { $$ = (Node *)makeSimpleA_Expr(AEXPR_OP, "%", $1, $3, @2); } | expr '^' expr { $$ = (Node *)makeSimpleA_Expr(AEXPR_OP, "^", $1, $3, @2); } | expr IN expr { $$ = (Node *)makeSimpleA_Expr(AEXPR_IN, "=", $1, $3, @2); } | expr IS NULL_P %prec IS { NullTest *n; n = makeNode(NullTest); n->arg = (Expr *)$1; n->nulltesttype = IS_NULL; n->location = @2; $$ = (Node *)n; } | expr IS NOT NULL_P %prec IS { NullTest *n; n = makeNode(NullTest); n->arg = (Expr *)$1; n->nulltesttype = IS_NOT_NULL; n->location = @2; $$ = (Node *)n; } | '-' expr %prec UNARY_MINUS { $$ = do_negate($2, @1); } | expr STARTS WITH expr %prec STARTS { cypher_string_match *n; n = make_ag_node(cypher_string_match); n->operation = CSMO_STARTS_WITH; n->lhs = $1; n->rhs = $4; n->location = @2; $$ = (Node *)n; } | expr ENDS WITH expr %prec ENDS { cypher_string_match *n; n = make_ag_node(cypher_string_match); n->operation = CSMO_ENDS_WITH; n->lhs = $1; n->rhs = $4; n->location = @2; $$ = (Node *)n; } | expr CONTAINS expr { cypher_string_match *n; n = make_ag_node(cypher_string_match); n->operation = CSMO_CONTAINS; n->lhs = $1; n->rhs = $3; n->location = @2; $$ = (Node *)n; } | expr EQ_TILDE expr { $$ = make_function_expr(list_make1(makeString("eq_tilde")), list_make2($1, $3), @2); } | expr '[' expr ']' { A_Indices *i; i = makeNode(A_Indices); i->is_slice = false; i->lidx = NULL; i->uidx = $3; $$ = append_indirection($1, (Node *)i); } | expr '[' expr_opt DOT_DOT expr_opt ']' { A_Indices *i; i = makeNode(A_Indices); i->is_slice = true; i->lidx = $3; i->uidx = $5; $$ = append_indirection($1, (Node *)i); } /* * This is a catch all grammar rule that allows us to avoid some * shift/reduce errors between expression indirection rules by collapsing * those rules into one generic rule. We can then inspect the expressions to * decide what specific rule needs to be applied and then construct the * required result. */ | expr '.' expr { /* * This checks for the grammar rule - * expr '.' property_key_name * where the expr can be anything. * Note: A property_key_name ends up as a ColumnRef. * Note: We restrict some of what the expr can be, for now. More may * need to be added later to loosen the restrictions. Or, it * may need to be removed. */ if (IsA($3, ColumnRef) && (IsA($1, ExtensibleNode) || IsA($1, ColumnRef) || IsA($1, A_Indirection))) { ColumnRef *cr = (ColumnRef*)$3; List *fields = cr->fields; String *string = linitial(fields); $$ = append_indirection($1, (Node*)string); } /* * This checks for the grammar rule - * symbolic_name '.' expr * Where expr is a function call. * Note: symbolic_name ends up as a ColumnRef */ else if (IsA($3, FuncCall) && IsA($1, ColumnRef)) { FuncCall *fc = (FuncCall*)$3; ColumnRef *cr = (ColumnRef*)$1; List *fields = cr->fields; String *string = linitial(fields); /* * A function can only be qualified with a single schema. So, we * check to see that the function isn't already qualified. There * may be unforeseen cases where we might need to remove this in * the future. */ if (list_length(fc->funcname) == 1) { fc->funcname = lcons(string, fc->funcname); $$ = (Node*)fc; } else ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("function already qualified"), ag_scanner_errposition(@1, scanner))); } /* allow a function to be used as a parent of an indirection */ else if (IsA($1, FuncCall) && IsA($3, ColumnRef)) { ColumnRef *cr = (ColumnRef*)$3; List *fields = cr->fields; String *string = linitial(fields); $$ = append_indirection($1, (Node*)string); } else if (IsA($1, FuncCall) && IsA($3, A_Indirection)) { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("not supported A_Indirection indirection"), ag_scanner_errposition(@1, scanner))); } /* * All other types of expression indirections are currently not * supported */ else { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("invalid indirection syntax"), ag_scanner_errposition(@1, scanner))); } } | expr '-' '>' expr %prec '.' { $$ = (Node *)makeSimpleA_Expr(AEXPR_OP, "->", $1, $4, @2); } | expr TYPECAST symbolic_name { $$ = make_typecast_expr($1, $3, @2); } | expr_atom ; expr_opt: /* empty */ { $$ = NULL; } | expr ; expr_list: expr { $$ = list_make1($1); } | expr_list ',' expr { $$ = lappend($1, $3); } ; expr_list_opt: /* empty */ { $$ = NIL; } | expr_list ; expr_func: expr_func_norm | expr_func_subexpr ; expr_func_norm: func_name '(' ')' { $$ = make_function_expr($1, NIL, @1); } | func_name '(' expr_list ')' { $$ = make_function_expr($1, $3, @2); } /* borrowed from PG's grammar */ | func_name '(' '*' ')' { /* * We consider AGGREGATE(*) to invoke a parameterless * aggregate. This does the right thing for COUNT(*), * and there are no other aggregates in SQL that accept * '*' as parameter. * * The FuncCall node is marked agg_star = true by make_star_function_expr, * so that later processing can detect what the argument * really was. */ FuncCall *n = (FuncCall *)make_star_function_expr($1, NIL, @1); $$ = (Node *)n; } | func_name '(' DISTINCT expr_list ')' { FuncCall *n = (FuncCall *)make_distinct_function_expr($1, $4, @1); $$ = (Node *)n; } ; expr_func_subexpr: COALESCE '(' expr_list ')' { CoalesceExpr *c; c = makeNode(CoalesceExpr); c->args = $3; c->location = @1; $$ = (Node *) c; } | EXISTS '(' anonymous_path ')' { cypher_sub_pattern *sub; SubLink *n; sub = make_ag_node(cypher_sub_pattern); sub->kind = CSP_EXISTS; sub->pattern = list_make1($3); n = makeNode(SubLink); n->subLinkType = EXISTS_SUBLINK; n->subLinkId = 0; n->testexpr = NULL; n->operName = NIL; n->subselect = (Node *) sub; n->location = @1; $$ = (Node *)node_to_agtype((Node *)n, "boolean", @1); } | EXISTS '(' property_value ')' { FuncCall *n; n = makeFuncCall(list_make1(makeString("exists")), list_make1($3), COERCE_SQL_SYNTAX, @2); $$ = (Node *)node_to_agtype((Node *)n, "boolean", @2); } ; property_value: expr_var '.' property_key_name { $$ = append_indirection($1, (Node *)makeString($3)); } ; expr_atom: expr_literal | PARAMETER { cypher_param *n; n = make_ag_node(cypher_param); n->name = $1; n->location = @1; $$ = (Node *)n; } | '(' expr ')' { Node *n = $2; if (is_ag_node(n, cypher_comparison_aexpr) || is_ag_node(n, cypher_comparison_boolexpr)) { n = (Node *)node_to_agtype(n, "boolean", @2); } $$ = n; } | expr_case | expr_var | expr_func ; expr_literal: INTEGER { $$ = make_int_const($1, @1); } | DECIMAL { $$ = make_float_const($1, @1); } | STRING { $$ = make_string_const($1, @1); } | TRUE_P { $$ = make_bool_const(true, @1); } | FALSE_P { $$ = make_bool_const(false, @1); } | NULL_P { $$ = make_null_const(@1); } | map | list ; map: '{' map_keyval_list_opt '}' { cypher_map *n; n = make_ag_node(cypher_map); n->keyvals = $2; $$ = (Node *)n; } ; map_keyval_list_opt: /* empty */ { $$ = NIL; } | map_keyval_list ; map_keyval_list: property_key_name ':' expr { $$ = list_make2(makeString($1), $3); } | map_keyval_list ',' property_key_name ':' expr { $$ = lappend(lappend($1, makeString($3)), $5); } ; list: '[' expr_list_opt ']' { cypher_list *n; n = make_ag_node(cypher_list); n->elems = $2; $$ = (Node *)n; } ; expr_case: CASE expr expr_case_when_list expr_case_default END_P { CaseExpr *n; n = makeNode(CaseExpr); n->casetype = InvalidOid; n->arg = (Expr *) $2; n->args = $3; n->defresult = (Expr *) $4; n->location = @1; $$ = (Node *) n; } | CASE expr_case_when_list expr_case_default END_P { CaseExpr *n; n = makeNode(CaseExpr); n->casetype = InvalidOid; n->args = $2; n->defresult = (Expr *) $3; n->location = @1; $$ = (Node *) n; } ; expr_case_when_list: expr_case_when { $$ = list_make1($1); } | expr_case_when_list expr_case_when { $$ = lappend($1, $2); } ; expr_case_when: WHEN expr THEN expr { CaseWhen *n; n = makeNode(CaseWhen); n->expr = (Expr *) $2; n->result = (Expr *) $4; n->location = @1; $$ = (Node *) n; } ; expr_case_default: ELSE expr { $$ = $2; } | /* EMPTY */ { $$ = NULL; } ; expr_var: var_name { ColumnRef *n; n = makeNode(ColumnRef); n->fields = list_make1(makeString($1)); n->location = @1; $$ = (Node *)n; } ; /* * names */ func_name: symbolic_name { $$ = list_make1(makeString($1)); } /* * symbolic_name '.' symbolic_name is already covered with the * rule expr '.' expr above. This rule is to allow most reserved * keywords to be used as well. So, it essentially makes the * rule schema_name '.' symbolic_name for func_name */ | safe_keywords '.' symbolic_name { $$ = list_make2(makeString((char *)$1), makeString($3)); } ; property_key_name: schema_name ; var_name: symbolic_name { if (has_internal_default_prefix($1)) { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("%s is only for internal use", AGE_DEFAULT_PREFIX), ag_scanner_errposition(@1, scanner))); } } ; var_name_opt: /* empty */ { $$ = NULL; } | var_name ; label_name: schema_name ; symbolic_name: IDENTIFIER ; schema_name: symbolic_name | reserved_keyword { /* we don't need to copy it, as it already has been */ $$ = (char *) $1; } ; reserved_keyword: safe_keywords | conflicted_keywords ; /* * All keywords need to be copied and properly terminated with a null before * using them, pnstrdup effectively does this for us. */ safe_keywords: ALL { $$ = pnstrdup($1, 3); } | ANALYZE { $$ = pnstrdup($1, 7); } | AND { $$ = pnstrdup($1, 3); } | AS { $$ = pnstrdup($1, 2); } | ASC { $$ = pnstrdup($1, 3); } | ASCENDING { $$ = pnstrdup($1, 9); } | BY { $$ = pnstrdup($1, 2); } | CALL { $$ = pnstrdup($1, 4); } | CASE { $$ = pnstrdup($1, 4); } | COALESCE { $$ = pnstrdup($1, 8); } | CONTAINS { $$ = pnstrdup($1, 8); } | CREATE { $$ = pnstrdup($1, 6); } | DELETE { $$ = pnstrdup($1, 6); } | DESC { $$ = pnstrdup($1, 4); } | DESCENDING { $$ = pnstrdup($1, 10); } | DETACH { $$ = pnstrdup($1, 6); } | DISTINCT { $$ = pnstrdup($1, 8); } | ELSE { $$ = pnstrdup($1, 4); } | ENDS { $$ = pnstrdup($1, 4); } | EXISTS { $$ = pnstrdup($1, 6); } | EXPLAIN { $$ = pnstrdup($1, 7); } | IN { $$ = pnstrdup($1, 2); } | IS { $$ = pnstrdup($1, 2); } | LIMIT { $$ = pnstrdup($1, 6); } | MATCH { $$ = pnstrdup($1, 6); } | MERGE { $$ = pnstrdup($1, 6); } | NOT { $$ = pnstrdup($1, 3); } | OPTIONAL { $$ = pnstrdup($1, 8); } | OR { $$ = pnstrdup($1, 2); } | ORDER { $$ = pnstrdup($1, 5); } | REMOVE { $$ = pnstrdup($1, 6); } | RETURN { $$ = pnstrdup($1, 6); } | SET { $$ = pnstrdup($1, 3); } | SKIP { $$ = pnstrdup($1, 4); } | STARTS { $$ = pnstrdup($1, 6); } | THEN { $$ = pnstrdup($1, 4); } | UNION { $$ = pnstrdup($1, 5); } | WHEN { $$ = pnstrdup($1, 4); } | VERBOSE { $$ = pnstrdup($1, 7); } | WHERE { $$ = pnstrdup($1, 5); } | WITH { $$ = pnstrdup($1, 4); } | XOR { $$ = pnstrdup($1, 3); } | YIELD { $$ = pnstrdup($1, 5); } ; conflicted_keywords: END_P { $$ = pnstrdup($1, 5); } | FALSE_P { $$ = pnstrdup($1, 7); } | NULL_P { $$ = pnstrdup($1, 6); } | TRUE_P { $$ = pnstrdup($1, 6); } ; %% /* * logical operators */ static Node *make_or_expr(Node *lexpr, Node *rexpr, int location) { // flatten "a OR b OR c ..." to a single BoolExpr on sight if (IsA(lexpr, BoolExpr)) { BoolExpr *bexpr = (BoolExpr *)lexpr; if (bexpr->boolop == OR_EXPR) { bexpr->args = lappend(bexpr->args, rexpr); return (Node *)bexpr; } } return (Node *)makeBoolExpr(OR_EXPR, list_make2(lexpr, rexpr), location); } static Node *make_and_expr(Node *lexpr, Node *rexpr, int location) { // flatten "a AND b AND c ..." to a single BoolExpr on sight if (IsA(lexpr, BoolExpr)) { BoolExpr *bexpr = (BoolExpr *)lexpr; if (bexpr->boolop == AND_EXPR) { bexpr->args = lappend(bexpr->args, rexpr); return (Node *)bexpr; } } return (Node *)makeBoolExpr(AND_EXPR, list_make2(lexpr, rexpr), location); } static Node *make_xor_expr(Node *lexpr, Node *rexpr, int location) { Expr *aorb; Expr *notaandb; // XOR is (A OR B) AND (NOT (A AND B)) aorb = makeBoolExpr(OR_EXPR, list_make2(lexpr, rexpr), location); notaandb = makeBoolExpr(AND_EXPR, list_make2(lexpr, rexpr), location); notaandb = makeBoolExpr(NOT_EXPR, list_make1(notaandb), location); return (Node *)makeBoolExpr(AND_EXPR, list_make2(aorb, notaandb), location); } static Node *make_not_expr(Node *expr, int location) { return (Node *)makeBoolExpr(NOT_EXPR, list_make1(expr), location); } /* * chained expression comparison operators */ static Node *make_cypher_comparison_aexpr(A_Expr_Kind kind, char *name, Node *lexpr, Node *rexpr, int location) { cypher_comparison_aexpr *a = make_ag_node(cypher_comparison_aexpr); a->kind = kind; a->name = list_make1(makeString((char *) name)); a->lexpr = lexpr; a->rexpr = rexpr; a->location = location; return (Node *)a; } static Node *make_cypher_comparison_boolexpr(BoolExprType boolop, List *args, int location) { cypher_comparison_boolexpr *b = make_ag_node(cypher_comparison_boolexpr); b->boolop = boolop; b->args = args; b->location = location; return (Node *)b; } static Node *make_comparison_and_expr(Node *lexpr, Node *rexpr, int location) { // flatten "a AND b AND c ..." to a single BoolExpr on sight if (is_ag_node(lexpr, cypher_comparison_boolexpr)) { cypher_comparison_boolexpr *bexpr = (cypher_comparison_boolexpr *)lexpr; if (bexpr->boolop == AND_EXPR) { bexpr->args = lappend(bexpr->args, rexpr); return (Node *)bexpr; } } return (Node *)make_cypher_comparison_boolexpr(AND_EXPR, list_make2(lexpr, rexpr), location); } /* * arithmetic operators */ static Node *do_negate(Node *n, int location) { if (IsA(n, A_Const)) { A_Const *c = (A_Const *)n; // report the constant's location as that of the '-' sign c->location = location; if (c->val.ival.type == T_Integer) { c->val.ival.ival = -c->val.ival.ival; return n; } else if (c->val.fval.type == T_Float) { do_negate_float(&c->val.fval); return n; } } return (Node *)makeSimpleA_Expr(AEXPR_OP, "-", NULL, n, location); } static void do_negate_float(Float *v) { char *oldval = NULL; Assert(v != NULL); Assert(IsA(v, Float)); oldval = v->fval; if (*oldval == '+') { oldval++; } if (*oldval == '-') { v->fval = oldval+1; /* just strip the '-' */ } else { v->fval = psprintf("-%s", oldval); } } /* * indirection */ static Node *append_indirection(Node *expr, Node *selector) { A_Indirection *indir; if (IsA(expr, A_Indirection)) { indir = (A_Indirection *)expr; indir->indirection = lappend(indir->indirection, selector); return expr; } else { indir = makeNode(A_Indirection); indir->arg = expr; indir->indirection = list_make1(selector); return (Node *)indir; } } /* * literals */ static Node *make_int_const(int i, int location) { A_Const *n = makeNode(A_Const); n->val.ival.type = T_Integer; n->val.ival.ival = i; n->location = location; return (Node *) n; } static Node *make_float_const(char *s, int location) { A_Const *n = makeNode(A_Const); n->val.fval.type = T_Float; n->val.fval.fval = s; n->location = location; return (Node *) n; } static Node *make_string_const(char *s, int location) { A_Const *n = makeNode(A_Const); n->val.sval.type = T_String; n->val.sval.sval = s; n->location = location; return (Node *) n; } static Node *make_bool_const(bool b, int location) { A_Const *n = makeNode(A_Const); n->val.boolval.type = T_Boolean; n->val.boolval.boolval = b; n->location = location; return (Node *) n; } static Node *make_null_const(int location) { A_Const *n = makeNode(A_Const); n->isnull = true; n->location = location; return (Node *) n; } /* * typecast */ static Node *make_typecast_expr(Node *expr, char *typecast, int location) { cypher_typecast *node; node = make_ag_node(cypher_typecast); node->expr = expr; node->typecast = typecast; node->location = location; return (Node *)node; } /* * functions */ static Node *make_function_expr(List *func_name, List *exprs, int location) { FuncCall *fnode; /* AGE function names are unqualified. So, their list size = 1 */ if (list_length(func_name) == 1) { List *funcname; char *name; /* get the name of the function */ name = ((String*)linitial(func_name))->sval; /* * Check for openCypher functions that are directly mapped to PG * functions. We may want to find a better way to do this, as there * could be many. */ if (pg_strcasecmp(name, "count") == 0) { funcname = SystemFuncName("count"); /* build the function call */ fnode = makeFuncCall(funcname, exprs, COERCE_SQL_SYNTAX, location); /* build the cast to wrap the function call to return agtype. */ fnode = node_to_agtype((Node *)fnode, "integer", location); return (Node *)fnode; } else { /* * We don't qualify AGE functions here. This is done in the * transform layer and allows us to know which functions are ours. */ funcname = func_name; /* build the function call */ fnode = makeFuncCall(funcname, exprs, COERCE_SQL_SYNTAX, location); } } /* all other functions are passed as is */ else { fnode = makeFuncCall(func_name, exprs, COERCE_SQL_SYNTAX, location); } /* return the node */ return (Node *)fnode; } /* * function to make a function that has received a star-argument */ static Node *make_star_function_expr(List *func_name, List *exprs, int location) { FuncCall *fnode; /* AGE function names are unqualified. So, their list size = 1 */ if (list_length(func_name) == 1) { List *funcname; char *name; /* get the name of the function */ name = ((String*)linitial(func_name))->sval; /* * Check for openCypher functions that are directly mapped to PG * functions. We may want to find a better way to do this, as there * could be many. */ if (pg_strcasecmp(name, "count") == 0) { funcname = SystemFuncName("count"); /* build the function call */ fnode = makeFuncCall(funcname, exprs, COERCE_SQL_SYNTAX, location); fnode->agg_star = true; /* build the cast to wrap the function call to return agtype. */ fnode = node_to_agtype((Node *)fnode, "integer", location); return (Node *)fnode; } else { /* * We don't qualify AGE functions here. This is done in the * transform layer and allows us to know which functions are ours. */ funcname = func_name; /* build the function call */ fnode = makeFuncCall(funcname, exprs, COERCE_SQL_SYNTAX, location); } } /* all other functions are passed as is */ else { fnode = makeFuncCall(func_name, exprs, COERCE_SQL_SYNTAX, location); } /* return the node */ fnode->agg_star = true; return (Node *)fnode; } /* * function to make a function that has received a distinct keyword */ static Node *make_distinct_function_expr(List *func_name, List *exprs, int location) { FuncCall *fnode; /* AGE function names are unqualified. So, their list size = 1 */ if (list_length(func_name) == 1) { List *funcname; char *name; /* get the name of the function */ name = ((String*)linitial(func_name))->sval; /* * Check for openCypher functions that are directly mapped to PG * functions. We may want to find a better way to do this, as there * could be many. */ if (pg_strcasecmp(name, "count") == 0) { funcname = SystemFuncName("count"); /* build the function call */ fnode = makeFuncCall(funcname, exprs, COERCE_SQL_SYNTAX, location); fnode->agg_order = NIL; fnode->agg_distinct = true; /* build the cast to wrap the function call to return agtype. */ fnode = node_to_agtype((Node *)fnode, "integer", location); return (Node *)fnode; } else { /* * We don't qualify AGE functions here. This is done in the * transform layer and allows us to know which functions are ours. */ funcname = func_name; /* build the function call */ fnode = makeFuncCall(funcname, exprs, COERCE_SQL_SYNTAX, location); } } /* all other functions are passed as is */ else { fnode = makeFuncCall(func_name, exprs, COERCE_SQL_SYNTAX, location); } /* return the node */ fnode->agg_order = NIL; fnode->agg_distinct = true; return (Node *)fnode; } /* * helper function to wrap pg_function in the appropiate typecast function to * interface with AGE components */ static FuncCall *node_to_agtype(Node * fnode, char *type, int location) { List *funcname = list_make1(makeString("ag_catalog")); if (pg_strcasecmp(type, "float") == 0) { funcname = lappend(funcname, makeString("float8_to_agtype")); } else if (pg_strcasecmp(type, "int") == 0 || pg_strcasecmp(type, "integer") == 0) { funcname = lappend(funcname, makeString("int8_to_agtype")); } else if (pg_strcasecmp(type, "bool") == 0 || pg_strcasecmp(type, "boolean") == 0) { funcname = lappend(funcname, makeString("bool_to_agtype")); } else { ereport(ERROR, (errmsg_internal("type \'%s\' not supported by AGE functions", type))); } return makeFuncCall(funcname, list_make1(fnode), COERCE_EXPLICIT_CAST, location); } /* function to create a unique name given a prefix */ static char *create_unique_name(char *prefix_name) { char *name = NULL; char *prefix = NULL; uint nlen = 0; unsigned long unique_number = 0; /* get a unique number */ unique_number = get_a_unique_number(); /* was a valid prefix supplied */ if (prefix_name == NULL || strlen(prefix_name) <= 0) { prefix = pnstrdup(UNIQUE_NAME_NULL_PREFIX, strlen(UNIQUE_NAME_NULL_PREFIX)); } else { prefix = prefix_name; } /* get the length of the combined string */ nlen = snprintf(NULL, 0, "%s_%lu", prefix, unique_number); /* allocate the space */ name = palloc0(nlen + 1); /* create the name */ snprintf(name, nlen + 1, "%s_%lu", prefix, unique_number); /* if we created the prefix, we need to free it */ if (prefix_name == NULL || strlen(prefix_name) <= 0) { pfree(prefix); } return name; } /* function to check if given string has internal alias as prefix */ static bool has_internal_default_prefix(char *str) { return strncmp(AGE_DEFAULT_PREFIX, str, strlen(AGE_DEFAULT_PREFIX)) == 0; } /* function to return a unique unsigned long number */ static unsigned long get_a_unique_number(void) { /* STATIC VARIABLE unique_counter for number uniqueness */ static unsigned long unique_counter = 0; return unique_counter++; } /*set operation function node to make a set op node*/ static Node *make_set_op(SetOperation op, bool all_or_distinct, List *larg, List *rarg) { cypher_return *n = make_ag_node(cypher_return); n->op = op; n->all_or_distinct = all_or_distinct; n->larg = (List *) larg; n->rarg = (List *) rarg; return (Node *) n; } /* check if A_Expr is a comparison expression */ static bool is_A_Expr_a_comparison_operation(cypher_comparison_aexpr *a) { String *v = NULL; char *opr_name = NULL; /* we don't support qualified comparison operators */ if (list_length(a->name) != 1) { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("qualified comparison operator names are not permitted"))); } /* get the value and verify that it is a string */ v = linitial(a->name); Assert(v->type == T_String); /* get the string value */ opr_name = v->sval; /* verify it is a comparison operation */ if (strcmp(opr_name, "<") == 0) { return true; } if (strcmp(opr_name, ">") == 0) { return true; } if (strcmp(opr_name, "<=") == 0) { return true; } if (strcmp(opr_name, "=>") == 0) { return true; } if (strcmp(opr_name, "=") == 0) { return true; } if (strcmp(opr_name, "<>") == 0) { return true; } return false; } /* * Helper function to build the comparison operator expression. It will also * build a chained comparison operator expression if it detects a chained * comparison. */ static Node *build_comparison_expression(Node *left_grammar_node, Node *right_grammar_node, char *opr_name, int location) { Node *result_expr = NULL; Assert(left_grammar_node != NULL); Assert(right_grammar_node != NULL); Assert(opr_name != NULL); /* * Case 1: * If the left expression is an A_Expr and it is also a * comparison, then this is part of a chained comparison. In this * specific case, the second chained element. */ if (is_ag_node(left_grammar_node, cypher_comparison_aexpr) && is_A_Expr_a_comparison_operation((cypher_comparison_aexpr *)left_grammar_node)) { cypher_comparison_aexpr *aexpr = NULL; Node *lexpr = NULL; Node *n = NULL; /* get the A_Expr on the left side */ aexpr = (cypher_comparison_aexpr *)left_grammar_node; /* get its rexpr which will be our lexpr */ lexpr = aexpr->rexpr; /* build our comparison operator */ n = (Node *)make_cypher_comparison_aexpr(AEXPR_OP, opr_name, lexpr, right_grammar_node, location); /* now add it (AND) to the other comparison */ result_expr = make_comparison_and_expr(left_grammar_node, n, location); } /* * Case 2: * If the left expression is a boolean AND and its right most * expression is an A_Expr and a comparison, then this is part of * a chained comparison. In this specific case, the third and * beyond chained element. */ else if (is_ag_node(left_grammar_node, cypher_comparison_boolexpr) && ((cypher_comparison_boolexpr*)left_grammar_node)->boolop == AND_EXPR) { cypher_comparison_boolexpr *bexpr = NULL; Node *last = NULL; /* cast the left to a boolean */ bexpr = (cypher_comparison_boolexpr *)left_grammar_node; /* extract the last node - ANDs are chained in a flat list */ last = llast(bexpr->args); /* is the last node an A_Expr and a comparison operator */ if (is_ag_node(last, cypher_comparison_aexpr) && is_A_Expr_a_comparison_operation((cypher_comparison_aexpr *)last)) { cypher_comparison_aexpr *aexpr = NULL; Node *lexpr = NULL; Node *n = NULL; /* get the last expressions right expression */ aexpr = (cypher_comparison_aexpr *) last; lexpr = aexpr->rexpr; /* make our comparison operator */ n = (Node *)make_cypher_comparison_aexpr(AEXPR_OP, opr_name, lexpr, right_grammar_node, location); /* now add it (AND) to the other comparisons */ result_expr = make_comparison_and_expr(left_grammar_node, n, location); } } /* * Case 3: * The left expression isn't a chained comparison. So, treat * it as a regular comparison expression. This is usually an initial * comparison expression. */ else if (result_expr == NULL) { result_expr = (Node *)make_cypher_comparison_aexpr(AEXPR_OP, opr_name, left_grammar_node, right_grammar_node, location); } return result_expr; } static cypher_relationship *build_VLE_relation(List *left_arg, cypher_relationship *cr, Node *right_arg, int left_arg_location, int cr_location) { ColumnRef *cref = NULL; A_Indices *ai = NULL; List *args = NIL; List *eargs = NIL; List *fname = NIL; cypher_node *cnl = NULL; cypher_node *cnr = NULL; Node *node = NULL; int length = 0; unsigned long unique_number = 0; int location = 0; /* get a unique number to identify this VLE node */ unique_number = get_a_unique_number(); /* get the location */ location = cr->location; /* get the left and right cypher_nodes */ cnl = (cypher_node*)llast(left_arg); cnr = (cypher_node*)right_arg; /* get the length of the left path */ length = list_length(left_arg); /* * If the left name is NULL and the left path is greater than 1 * If the left name is NULL and the left label is not NULL * If the left name is NULL and the left props is not NULL * If the left name is NULL and the right name is not NULL * If the left name is NULL and the right label is not NULL * If the left name is NULL and the right props is not NULL * we need to create a variable name for the left node. */ if ((cnl->name == NULL && length > 1) || (cnl->name == NULL && cnl->label != NULL) || (cnl->name == NULL && cnl->props != NULL) || (cnl->name == NULL && cnr->name != NULL) || (cnl->name == NULL && cnr->label != NULL) || (cnl->name == NULL && cnr->props != NULL)) { cnl->name = create_unique_name(AGE_DEFAULT_PREFIX"vle_function_start_var"); } /* add in the start vertex as a ColumnRef if necessary */ if (cnl->name != NULL) { cref = makeNode(ColumnRef); cref->fields = list_make2(makeString(cnl->name), makeString("id")); cref->location = left_arg_location; args = lappend(args, cref); } /* * If there aren't any variables in the VLE path, we can use * the FROM_ALL algorithm. */ else { args = lappend(args, make_null_const(-1)); } /* * Create a variable name for the end vertex if we have a label * name or props but we don't have a variable name. * * For example: ()-[*]-(:label) or ()-[*]-({name: "John"}) * * We need this so the addition of match_vle_terminal_edge is * done in the transform phase. */ if (cnr->name == NULL && (cnr->label != NULL || cnr->props != NULL)) { cnr->name = create_unique_name(AGE_DEFAULT_PREFIX"vle_function_end_var"); } /* * We need a NULL for the target vertex in the VLE match to * force the dfs_find_a_path_from algorithm. However, for now, * the default will be to only do that when a target isn't * supplied. * * TODO: We will likely want to force it to use * dfs_find_a_path_from. */ if (cnl->name == NULL && cnr->name != NULL) { cref = makeNode(ColumnRef); cref->fields = list_make2(makeString(cnr->name), makeString("id")); cref->location = left_arg_location; args = lappend(args, cref); } else { args = lappend(args, make_null_const(-1)); } /* build the required edge arguments */ if (cr->label == NULL) { eargs = lappend(eargs, make_null_const(location)); } else { eargs = lappend(eargs, make_string_const(cr->label, location)); } if (cr->props == NULL) { eargs = lappend(eargs, make_null_const(location)); } else { eargs = lappend(eargs, cr->props); } /* build the edge function name (schema.funcname) */ fname = list_make2(makeString("ag_catalog"), makeString("age_build_vle_match_edge")); /* build the edge function node */ node = make_function_expr(fname, eargs, location); /* add in the edge*/ args = lappend(args, node); /* add in the lidx and uidx range as Const */ ai = (A_Indices*)cr->varlen; if (ai == NULL || ai->lidx == NULL) { args = lappend(args, make_null_const(location)); } else { args = lappend(args, ai->lidx); } if (ai == NULL || ai->uidx == NULL) { args = lappend(args, make_null_const(location)); } else { args = lappend(args, ai->uidx); } /* add in the direction as Const */ args = lappend(args, make_int_const(cr->dir, cr_location)); /* add in the unique number used to identify this VLE node */ args = lappend(args, make_int_const(unique_number, -1)); /* build the VLE function node */ cr->varlen = make_function_expr(list_make1(makeString("vle")), args, cr_location); /* return the VLE relation node */ return cr; } age-PG16-v1.5.0-rc0/src/backend/parser/cypher_item.c000066400000000000000000000170701454606241200217330ustar00rootroot00000000000000/* * For PostgreSQL Database Management System: * (formerly known as Postgres, then as Postgres95) * * Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group * * Portions Copyright (c) 1994, The Regents of the University of California * * Permission to use, copy, modify, and distribute this software and its documentation for any purpose, * without fee, and without a written agreement is hereby granted, provided that the above copyright notice * and this paragraph and the following two paragraphs appear in all copies. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA * HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ #include "postgres.h" #include "nodes/makefuncs.h" #include "parser/parse_relation.h" #include "parser/parse_target.h" #include "parser/cypher_expr.h" #include "parser/cypher_item.h" static List *ExpandAllTables(ParseState *pstate, int location); static List *expand_pnsi_attrs(ParseState *pstate, ParseNamespaceItem *pnsi, int sublevels_up, bool require_col_privs, int location); // see transformTargetEntry() TargetEntry *transform_cypher_item(cypher_parsestate *cpstate, Node *node, Node *expr, ParseExprKind expr_kind, char *colname, bool resjunk) { ParseState *pstate = (ParseState *)cpstate; if (!expr) expr = transform_cypher_expr(cpstate, node, expr_kind); if (!colname && !resjunk) colname = FigureColname(node); return makeTargetEntry((Expr *)expr, (AttrNumber)pstate->p_next_resno++, colname, resjunk); } // see transformTargetList() List *transform_cypher_item_list(cypher_parsestate *cpstate, List *item_list, List **groupClause, ParseExprKind expr_kind) { List *target_list = NIL; ListCell *li; List *group_clause = NIL; bool hasAgg = false; bool expand_star; expand_star = (expr_kind != EXPR_KIND_UPDATE_SOURCE); foreach (li, item_list) { ResTarget *item = lfirst(li); TargetEntry *te; if (expand_star) { if (IsA(item->val, ColumnRef)) { ColumnRef *cref = (ColumnRef *) item->val; if (IsA(llast(cref->fields), A_Star)) { ParseState *pstate = &cpstate->pstate; /* we only allow a bare '*' */ if (list_length(cref->fields) != 1) { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("Invalid number of fields for *"), parser_errposition(pstate, cref->location))); } target_list = list_concat(target_list, ExpandAllTables(pstate, cref->location)); continue; } } } /* clear the exprHasAgg flag to check transform for an aggregate */ cpstate->exprHasAgg = false; /* transform the item */ te = transform_cypher_item(cpstate, item->val, NULL, expr_kind, item->name, false); target_list = lappend(target_list, te); /* * Did the transformed item contain an aggregate function? If it didn't, * add it to the potential group_clause. If it did, flag that we found * an aggregate in an expression */ if (!cpstate->exprHasAgg) { group_clause = lappend(group_clause, item->val); } else { hasAgg = true; } } /* * If we found an aggregate function, we need to return the group_clause, * even if NIL. parseCheckAggregates at the end of transform_cypher_return * will verify if it is valid. */ if (hasAgg) { *groupClause = group_clause; } return target_list; } /* * From PG's ExpandAllTables() * Transforms '*' (in the target list) into a list of targetlist entries. */ static List *ExpandAllTables(ParseState *pstate, int location) { List *target = NIL; bool found_table = false; ListCell *l; foreach(l, pstate->p_namespace) { ParseNamespaceItem *nsitem = (ParseNamespaceItem *) lfirst(l); /* Ignore table-only items */ if (!nsitem->p_cols_visible) continue; /* Should not have any lateral-only items when parsing targetlist */ Assert(!nsitem->p_lateral_only); /* Remember we found a p_cols_visible item */ found_table = true; target = list_concat(target, expand_pnsi_attrs(pstate, nsitem, 0, true, location)); } /* Check for "RETURN *;" */ if (!found_table) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("RETURN * without a pattern is not valid"), parser_errposition(pstate, location))); return target; } /* * From PG's expandNSItemAttrs * Modified to exclude hidden variables and aliases in RETURN * */ static List *expand_pnsi_attrs(ParseState *pstate, ParseNamespaceItem *pnsi, int sublevels_up, bool require_col_privs, int location) { RangeTblEntry *rte = pnsi->p_rte; RTEPermissionInfo *perminfo = pnsi->p_perminfo; List *names, *vars; ListCell *name, *var; List *te_list = NIL; int var_prefix_len = strlen(AGE_DEFAULT_VARNAME_PREFIX); int alias_prefix_len = strlen(AGE_DEFAULT_ALIAS_PREFIX); vars = expandNSItemVars(pstate, pnsi, sublevels_up, location, &names); /* * Require read access to the table. This is normally redundant with the * markVarForSelectPriv calls below, but not if the table has zero * columns. */ if (rte->rtekind == RTE_RELATION) { Assert(perminfo != NULL); perminfo->requiredPerms |= ACL_SELECT; } /* iterate through the variables */ forboth(name, names, var, vars) { char *label = strVal(lfirst(name)); Var *varnode = (Var *)lfirst(var); TargetEntry *te; /* we want to skip our "hidden" variables */ if (strncmp(AGE_DEFAULT_VARNAME_PREFIX, label, var_prefix_len) == 0) continue; /* we want to skip out "hidden" aliases */ if (strncmp(AGE_DEFAULT_ALIAS_PREFIX, label, alias_prefix_len) == 0) continue; /* add this variable to the list */ te = makeTargetEntry((Expr *)varnode, (AttrNumber)pstate->p_next_resno++, label, false); te_list = lappend(te_list, te); /* Require read access to each column */ markVarForSelectPriv(pstate, varnode); } Assert(name == NULL && var == NULL); /* lists not the same length? */ return te_list; } age-PG16-v1.5.0-rc0/src/backend/parser/cypher_keywords.c000066400000000000000000000074601454606241200226460ustar00rootroot00000000000000/* * For PostgreSQL Database Management System: * (formerly known as Postgres, then as Postgres95) * * Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group * * Portions Copyright (c) 1994, The Regents of the University of California * * Permission to use, copy, modify, and distribute this software and its documentation for any purpose, * without fee, and without a written agreement is hereby granted, provided that the above copyright notice * and this paragraph and the following two paragraphs appear in all copies. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA * HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ #include "postgres.h" #include "common/keywords.h" #include "funcapi.h" #include "parser/cypher_gram.h" #include "parser/cypher_kwlist_d.h" /* * This list must be sorted by ASCII name, because binary search is used to * locate entries. */ #define PG_KEYWORD(kwname, value, category) value, const uint16 CypherKeywordTokens[] = { #include "parser/cypher_kwlist.h" }; #undef PG_KEYWORD #define PG_KEYWORD(kwname, value, category) category, const uint16 CypherKeywordCategories[] = { #include "parser/cypher_kwlist.h" }; #undef PG_KEYWORD PG_FUNCTION_INFO_V1(get_cypher_keywords); // function to return the list of grammar keywords Datum get_cypher_keywords(PG_FUNCTION_ARGS) { FuncCallContext *func_ctx; if (SRF_IS_FIRSTCALL()) { MemoryContext old_mem_ctx; TupleDesc tup_desc; func_ctx = SRF_FIRSTCALL_INIT(); old_mem_ctx = MemoryContextSwitchTo(func_ctx->multi_call_memory_ctx); tup_desc = CreateTemplateTupleDesc(3); TupleDescInitEntry(tup_desc, (AttrNumber)1, "word", TEXTOID, -1, 0); TupleDescInitEntry(tup_desc, (AttrNumber)2, "catcode", CHAROID, -1, 0); TupleDescInitEntry(tup_desc, (AttrNumber)3, "catdesc", TEXTOID, -1, 0); func_ctx->attinmeta = TupleDescGetAttInMetadata(tup_desc); MemoryContextSwitchTo(old_mem_ctx); } func_ctx = SRF_PERCALL_SETUP(); if (func_ctx->call_cntr < CypherKeyword.num_keywords) { char *values[3]; HeapTuple tuple; // cast-away-const is ugly but alternatives aren't much better values[0] = (char *) GetScanKeyword((int) func_ctx->call_cntr, &CypherKeyword); switch (CypherKeywordCategories[func_ctx->call_cntr]) { case UNRESERVED_KEYWORD: values[1] = "U"; values[2] = "unreserved"; break; case COL_NAME_KEYWORD: values[1] = "C"; values[2] = "unreserved (cannot be function or type name)"; break; case TYPE_FUNC_NAME_KEYWORD: values[1] = "T"; values[2] = "reserved (can be function or type name)"; break; case RESERVED_KEYWORD: values[1] = "R"; values[2] = "reserved"; break; default: // shouldn't be possible values[1] = NULL; values[2] = NULL; break; } tuple = BuildTupleFromCStrings(func_ctx->attinmeta, values); SRF_RETURN_NEXT(func_ctx, HeapTupleGetDatum(tuple)); } SRF_RETURN_DONE(func_ctx); } age-PG16-v1.5.0-rc0/src/backend/parser/cypher_parse_agg.c000066400000000000000000000731001454606241200227210ustar00rootroot00000000000000/* * For PostgreSQL Database Management System: * (formerly known as Postgres, then as Postgres95) * * Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group * * Portions Copyright (c) 1994, The Regents of the University of California * * Permission to use, copy, modify, and distribute this software and its documentation for any purpose, * without fee, and without a written agreement is hereby granted, provided that the above copyright notice * and this paragraph and the following two paragraphs appear in all copies. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA * HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ #include "postgres.h" #include "catalog/pg_constraint.h" #include "nodes/nodeFuncs.h" #include "optimizer/tlist.h" #include "optimizer/optimizer.h" #include "parser/cypher_parse_agg.h" #include "parser/parsetree.h" #include "rewrite/rewriteManip.h" typedef struct { ParseState *pstate; int min_varlevel; int min_agglevel; int sublevels_up; } check_agg_arguments_context; typedef struct { ParseState *pstate; Query *qry; PlannerInfo *root; List *groupClauses; List *groupClauseCommonVars; bool have_non_var_grouping; List **func_grouped_rels; int sublevels_up; bool in_agg_direct_args; } check_ungrouped_columns_context; static void check_ungrouped_columns(Node *node, ParseState *pstate, Query *qry, List *groupClauses, List *groupClauseVars, bool have_non_var_grouping, List **func_grouped_rels); static bool check_ungrouped_columns_walker(Node *node, check_ungrouped_columns_context *context); static void finalize_grouping_exprs(Node *node, ParseState *pstate, Query *qry, List *groupClauses, PlannerInfo *root, bool have_non_var_grouping); static bool finalize_grouping_exprs_walker(Node *node, check_ungrouped_columns_context *context); static List *expand_groupingset_node(GroupingSet *gs); static List * expand_grouping_sets(List *groupingSets, int limit); /* * From PG's parseCheckAggregates * * Check for aggregates where they shouldn't be and improper grouping. * This function should be called after the target list and qualifications * are finalized. * * Misplaced aggregates are now mostly detected in transformAggregateCall, * but it seems more robust to check for aggregates in recursive queries * only after everything is finalized. In any case it's hard to detect * improper grouping on-the-fly, so we have to make another pass over the * query for that. */ void parse_check_aggregates(ParseState *pstate, Query *qry) { List *gset_common = NIL; List *groupClauses = NIL; List *groupClauseCommonVars = NIL; bool have_non_var_grouping; List *func_grouped_rels = NIL; ListCell *l; bool hasJoinRTEs; bool hasSelfRefRTEs; PlannerInfo *root = NULL; Node *clause; /* This should only be called if we found aggregates or grouping */ Assert(pstate->p_hasAggs || qry->groupClause || qry->havingQual || qry->groupingSets); /* * If we have grouping sets, expand them and find the intersection of all * sets. */ if (qry->groupingSets) { /* * The limit of 4096 is arbitrary and exists simply to avoid resource * issues from pathological constructs. */ List *gsets = expand_grouping_sets(qry->groupingSets, 4096); if (!gsets) ereport(ERROR, (errcode(ERRCODE_STATEMENT_TOO_COMPLEX), errmsg("too many grouping sets present (maximum 4096)"), parser_errposition(pstate, qry->groupClause ? exprLocation((Node *) qry->groupClause) : exprLocation((Node *) qry->groupingSets)))); /* * The intersection will often be empty, so help things along by * seeding the intersect with the smallest set. */ gset_common = linitial(gsets); if (gset_common) { for_each_cell(l, gsets, lnext(gsets, list_head(gsets))) { gset_common = list_intersection_int(gset_common, lfirst(l)); if (!gset_common) break; } } /* * If there was only one grouping set in the expansion, AND if the * groupClause is non-empty (meaning that the grouping set is not * empty either), then we can ditch the grouping set and pretend we * just had a normal GROUP BY. */ if (list_length(gsets) == 1 && qry->groupClause) qry->groupingSets = NIL; } /* * Scan the range table to see if there are JOIN or self-reference CTE * entries. We'll need this info below. */ hasJoinRTEs = hasSelfRefRTEs = false; foreach(l, pstate->p_rtable) { RangeTblEntry *rte = (RangeTblEntry *) lfirst(l); if (rte->rtekind == RTE_JOIN) hasJoinRTEs = true; else if (rte->rtekind == RTE_CTE && rte->self_reference) hasSelfRefRTEs = true; } /* * Build a list of the acceptable GROUP BY expressions for use by * check_ungrouped_columns(). * * We get the TLE, not just the expr, because GROUPING wants to know the * sortgroupref. */ foreach(l, qry->groupClause) { SortGroupClause *grpcl = (SortGroupClause *) lfirst(l); TargetEntry *expr; expr = get_sortgroupclause_tle(grpcl, qry->targetList); if (expr == NULL) continue; /* probably cannot happen */ groupClauses = lcons(expr, groupClauses); } /* * If there are join alias vars involved, we have to flatten them to the * underlying vars, so that aliased and unaliased vars will be correctly * taken as equal. We can skip the expense of doing this if no rangetable * entries are RTE_JOIN kind. We use the planner's flatten_join_alias_vars * routine to do the flattening; it wants a PlannerInfo root node, which * fortunately can be mostly dummy. */ if (hasJoinRTEs) { root = makeNode(PlannerInfo); root->parse = qry; root->planner_cxt = CurrentMemoryContext; root->hasJoinRTEs = true; groupClauses = (List *) flatten_join_alias_vars(root, qry, (Node *) groupClauses); } /* * Detect whether any of the grouping expressions aren't simple Vars; if * they're all Vars then we don't have to work so hard in the recursive * scans. (Note we have to flatten aliases before this.) * * Track Vars that are included in all grouping sets separately in * groupClauseCommonVars, since these are the only ones we can use to * check for functional dependencies. */ have_non_var_grouping = false; foreach(l, groupClauses) { TargetEntry *tle = lfirst(l); if (!IsA(tle->expr, Var)) { have_non_var_grouping = true; } else if (!qry->groupingSets || list_member_int(gset_common, tle->ressortgroupref)) { groupClauseCommonVars = lappend(groupClauseCommonVars, tle->expr); } } /* * Check the targetlist and HAVING clause for ungrouped variables. * * Note: because we check resjunk tlist elements as well as regular ones, * this will also find ungrouped variables that came from ORDER BY and * WINDOW clauses. For that matter, it's also going to examine the * grouping expressions themselves --- but they'll all pass the test ... * * We also finalize GROUPING expressions, but for that we need to traverse * the original (unflattened) clause in order to modify nodes. */ clause = (Node *) qry->targetList; finalize_grouping_exprs(clause, pstate, qry, groupClauses, root, have_non_var_grouping); if (hasJoinRTEs) { clause = flatten_join_alias_vars(root, qry, clause); } check_ungrouped_columns(clause, pstate, qry, groupClauses, groupClauseCommonVars, have_non_var_grouping, &func_grouped_rels); clause = (Node *) qry->havingQual; finalize_grouping_exprs(clause, pstate, qry, groupClauses, root, have_non_var_grouping); if (hasJoinRTEs) { clause = flatten_join_alias_vars(root, qry, clause); } check_ungrouped_columns(clause, pstate, qry, groupClauses, groupClauseCommonVars, have_non_var_grouping, &func_grouped_rels); /* * Per spec, aggregates can't appear in a recursive term. */ if (pstate->p_hasAggs && hasSelfRefRTEs) { ereport(ERROR, (errcode(ERRCODE_INVALID_RECURSION), errmsg("aggregate functions are not allowed in a recursive query's recursive term"), parser_errposition(pstate, locate_agg_of_level((Node *) qry, 0)))); } } /* * check_ungrouped_columns - * * Scan the given expression tree for ungrouped variables (variables * that are not listed in the groupClauses list and are not within * the arguments of aggregate functions). Emit a suitable error message * if any are found. * * NOTE: we assume that the given clause has been transformed suitably for * parser output. This means we can use expression_tree_walker. * * NOTE: we recognize grouping expressions in the main query, but only * grouping Vars in subqueries. For example, this will be rejected, * although it could be allowed: * SELECT (SELECT x FROM bar where y = (foo.a + foo.b)) * FROM foo * GROUP BY a + b; * The difficulty is the need to account for different sublevels_up. * This appears to require a whole custom version of equal(), which is * way more pain than the feature seems worth. */ static void check_ungrouped_columns(Node *node, ParseState *pstate, Query *qry, List *groupClauses, List *groupClauseCommonVars, bool have_non_var_grouping, List **func_grouped_rels) { check_ungrouped_columns_context context; context.pstate = pstate; context.qry = qry; context.root = NULL; context.groupClauses = groupClauses; context.groupClauseCommonVars = groupClauseCommonVars; context.have_non_var_grouping = have_non_var_grouping; context.func_grouped_rels = func_grouped_rels; context.sublevels_up = 0; context.in_agg_direct_args = false; check_ungrouped_columns_walker(node, &context); } static bool check_ungrouped_columns_walker(Node *node, check_ungrouped_columns_context *context) { ListCell *gl; if (node == NULL) return false; if (IsA(node, Const) || IsA(node, Param)) return false; /* constants are always acceptable */ if (IsA(node, Aggref)) { Aggref *agg = (Aggref *) node; if ((int) agg->agglevelsup == context->sublevels_up) { /* * If we find an aggregate call of the original level, do not * recurse into its normal arguments, ORDER BY arguments, or * filter; ungrouped vars there are not an error. But we should * check direct arguments as though they weren't in an aggregate. * We set a special flag in the context to help produce a useful * error message for ungrouped vars in direct arguments. */ bool result; Assert(!context->in_agg_direct_args); context->in_agg_direct_args = true; result = check_ungrouped_columns_walker((Node *) agg->aggdirectargs, context); context->in_agg_direct_args = false; return result; } /* * We can skip recursing into aggregates of higher levels altogether, * since they could not possibly contain Vars of concern to us (see * transformAggregateCall). We do need to look at aggregates of lower * levels, however. */ if ((int) agg->agglevelsup > context->sublevels_up) return false; } if (IsA(node, GroupingFunc)) { GroupingFunc *grp = (GroupingFunc *) node; /* handled GroupingFunc separately, no need to recheck at this level */ if ((int) grp->agglevelsup >= context->sublevels_up) return false; } /* * If we have any GROUP BY items that are not simple Vars, check to see if * subexpression as a whole matches any GROUP BY item. We need to do this * at every recursion level so that we recognize GROUPed-BY expressions * before reaching variables within them. But this only works at the outer * query level, as noted above. */ if (context->have_non_var_grouping && context->sublevels_up == 0) { foreach(gl, context->groupClauses) { TargetEntry *tle = lfirst(gl); if (equal(node, tle->expr)) return false; /* acceptable, do not descend more */ } } /* * If we have an ungrouped Var of the original query level, we have a * failure. Vars below the original query level are not a problem, and * neither are Vars from above it. (If such Vars are ungrouped as far as * their own query level is concerned, that's someone else's problem...) */ if (IsA(node, Var)) { Var *var = (Var *) node; RangeTblEntry *rte; char *attname; if (var->varlevelsup != context->sublevels_up) return false; /* it's not local to my query, ignore */ /* * Check for a match, if we didn't do it above. */ if (!context->have_non_var_grouping || context->sublevels_up != 0) { foreach(gl, context->groupClauses) { Var *gvar = (Var *) ((TargetEntry *) lfirst(gl))->expr; if (IsA(gvar, Var) && gvar->varno == var->varno && gvar->varattno == var->varattno && gvar->varlevelsup == 0) return false; /* acceptable, we're okay */ } } /* * Check whether the Var is known functionally dependent on the GROUP * BY columns. If so, we can allow the Var to be used, because the * grouping is really a no-op for this table. However, this deduction * depends on one or more constraints of the table, so we have to add * those constraints to the query's constraintDeps list, because it's * not semantically valid anymore if the constraint(s) get dropped. * (Therefore, this check must be the last-ditch effort before raising * error: we don't want to add dependencies unnecessarily.) * * Because this is a pretty expensive check, and will have the same * outcome for all columns of a table, we remember which RTEs we've * already proven functional dependency for in the func_grouped_rels * list. This test also prevents us from adding duplicate entries to * the constraintDeps list. */ if (list_member_int(*context->func_grouped_rels, var->varno)) return false; /* previously proven acceptable */ Assert(var->varno > 0 && (int) var->varno <= list_length(context->pstate->p_rtable)); rte = rt_fetch(var->varno, context->pstate->p_rtable); if (rte->rtekind == RTE_RELATION) { if (check_functional_grouping(rte->relid, var->varno, 0, context->groupClauseCommonVars, &context->qry->constraintDeps)) { *context->func_grouped_rels = lappend_int(*context->func_grouped_rels, var->varno); return false; /* acceptable */ } } /* Found an ungrouped local variable; generate error message */ attname = get_rte_attribute_name(rte, var->varattno); if (context->sublevels_up == 0) ereport(ERROR, (errcode(ERRCODE_GROUPING_ERROR), errmsg("\"%s\" must be either part of an explicitly listed key or used inside an aggregate function", attname), context->in_agg_direct_args ? errdetail("Direct arguments of an ordered-set aggregate must use only grouped columns.") : 0, parser_errposition(context->pstate, var->location))); else ereport(ERROR, (errcode(ERRCODE_GROUPING_ERROR), errmsg("subquery uses ungrouped column \"%s.%s\" from outer query", rte->eref->aliasname, attname), parser_errposition(context->pstate, var->location))); } if (IsA(node, Query)) { /* Recurse into subselects */ bool result; context->sublevels_up++; result = query_tree_walker((Query *) node, check_ungrouped_columns_walker, (void *) context, 0); context->sublevels_up--; return result; } return expression_tree_walker(node, check_ungrouped_columns_walker, (void *) context); } /* * finalize_grouping_exprs - * Scan the given expression tree for GROUPING() and related calls, * and validate and process their arguments. * * This is split out from check_ungrouped_columns above because it needs * to modify the nodes (which it does in-place, not via a mutator) while * check_ungrouped_columns may see only a copy of the original thanks to * flattening of join alias vars. So here, we flatten each individual * GROUPING argument as we see it before comparing it. */ static void finalize_grouping_exprs(Node *node, ParseState *pstate, Query *qry, List *groupClauses, PlannerInfo *root, bool have_non_var_grouping) { check_ungrouped_columns_context context; context.pstate = pstate; context.qry = qry; context.root = root; context.groupClauses = groupClauses; context.groupClauseCommonVars = NIL; context.have_non_var_grouping = have_non_var_grouping; context.func_grouped_rels = NULL; context.sublevels_up = 0; context.in_agg_direct_args = false; finalize_grouping_exprs_walker(node, &context); } static bool finalize_grouping_exprs_walker(Node *node, check_ungrouped_columns_context *context) { ListCell *gl; if (node == NULL) return false; if (IsA(node, Const) || IsA(node, Param)) return false; /* constants are always acceptable */ if (IsA(node, Aggref)) { Aggref *agg = (Aggref *) node; if ((int) agg->agglevelsup == context->sublevels_up) { /* * If we find an aggregate call of the original level, do not * recurse into its normal arguments, ORDER BY arguments, or * filter; GROUPING exprs of this level are not allowed there. But * check direct arguments as though they weren't in an aggregate. */ bool result; Assert(!context->in_agg_direct_args); context->in_agg_direct_args = true; result = finalize_grouping_exprs_walker((Node *) agg->aggdirectargs, context); context->in_agg_direct_args = false; return result; } /* * We can skip recursing into aggregates of higher levels altogether, * since they could not possibly contain exprs of concern to us (see * transformAggregateCall). We do need to look at aggregates of lower * levels, however. */ if ((int) agg->agglevelsup > context->sublevels_up) return false; } if (IsA(node, GroupingFunc)) { GroupingFunc *grp = (GroupingFunc *) node; /* * We only need to check GroupingFunc nodes at the exact level to * which they belong, since they cannot mix levels in arguments. */ if ((int) grp->agglevelsup == context->sublevels_up) { ListCell *lc; List *ref_list = NIL; foreach(lc, grp->args) { Node *expr = lfirst(lc); Index ref = 0; if (context->root) { expr = flatten_join_alias_vars(context->root, (Query *)context->root, expr); } /* * Each expression must match a grouping entry at the current * query level. Unlike the general expression case, we don't * allow functional dependencies or outer references. */ if (IsA(expr, Var)) { Var *var = (Var *) expr; if (var->varlevelsup == context->sublevels_up) { foreach(gl, context->groupClauses) { TargetEntry *tle = lfirst(gl); Var *gvar = (Var *) tle->expr; if (IsA(gvar, Var) && gvar->varno == var->varno && gvar->varattno == var->varattno && gvar->varlevelsup == 0) { ref = tle->ressortgroupref; break; } } } } else if (context->have_non_var_grouping && context->sublevels_up == 0) { foreach(gl, context->groupClauses) { TargetEntry *tle = lfirst(gl); if (equal(expr, tle->expr)) { ref = tle->ressortgroupref; break; } } } if (ref == 0) ereport(ERROR, (errcode(ERRCODE_GROUPING_ERROR), errmsg("arguments to GROUPING must be grouping expressions of the associated query level"), parser_errposition(context->pstate, exprLocation(expr)))); ref_list = lappend_int(ref_list, ref); } grp->refs = ref_list; } if ((int) grp->agglevelsup > context->sublevels_up) return false; } if (IsA(node, Query)) { /* Recurse into subselects */ bool result; context->sublevels_up++; result = query_tree_walker((Query *) node, finalize_grouping_exprs_walker, (void *) context, 0); context->sublevels_up--; return result; } return expression_tree_walker(node, finalize_grouping_exprs_walker, (void *) context); } /* * Given a GroupingSet node, expand it and return a list of lists. * * For EMPTY nodes, return a list of one empty list. * * For SIMPLE nodes, return a list of one list, which is the node content. * * For CUBE and ROLLUP nodes, return a list of the expansions. * * For SET nodes, recursively expand contained CUBE and ROLLUP. */ static List * expand_groupingset_node(GroupingSet *gs) { List *result = NIL; switch (gs->kind) { case GROUPING_SET_EMPTY: result = list_make1(NIL); break; case GROUPING_SET_SIMPLE: result = list_make1(gs->content); break; case GROUPING_SET_ROLLUP: { List *rollup_val = gs->content; ListCell *lc; int curgroup_size = list_length(gs->content); while (curgroup_size > 0) { List *current_result = NIL; int i = curgroup_size; foreach(lc, rollup_val) { GroupingSet *gs_current = (GroupingSet *) lfirst(lc); Assert(gs_current->kind == GROUPING_SET_SIMPLE); current_result = list_concat(current_result, list_copy(gs_current->content)); /* If we are done with making the current group, break */ if (--i == 0) break; } result = lappend(result, current_result); --curgroup_size; } result = lappend(result, NIL); } break; case GROUPING_SET_CUBE: { List *cube_list = gs->content; int number_bits = list_length(cube_list); uint32 num_sets; uint32 i; /* parser should cap this much lower */ Assert(number_bits < 31); num_sets = (1U << number_bits); for (i = 0; i < num_sets; i++) { List *current_result = NIL; ListCell *lc; uint32 mask = 1U; foreach(lc, cube_list) { GroupingSet *gs_current = (GroupingSet *) lfirst(lc); Assert(gs_current->kind == GROUPING_SET_SIMPLE); if (mask & i) { current_result = list_concat(current_result, list_copy(gs_current->content)); } mask <<= 1; } result = lappend(result, current_result); } } break; case GROUPING_SET_SETS: { ListCell *lc; foreach(lc, gs->content) { List *current_result = expand_groupingset_node(lfirst(lc)); result = list_concat(result, current_result); } } break; } return result; } static int cmp_list_len_asc(const void *a, const void *b) { int la = list_length(*(List *const *) a); int lb = list_length(*(List *const *) b); return (la > lb) ? 1 : (la == lb) ? 0 : -1; } /* * Expand a groupingSets clause to a flat list of grouping sets. * The returned list is sorted by length, shortest sets first. * * This is mainly for the planner, but we use it here too to do * some consistency checks. */ static List * expand_grouping_sets(List *groupingSets, int limit) { List *expanded_groups = NIL; List *result = NIL; double numsets = 1; ListCell *lc; if (groupingSets == NIL) return NIL; foreach(lc, groupingSets) { List *current_result = NIL; GroupingSet *gs = lfirst(lc); current_result = expand_groupingset_node(gs); Assert(current_result != NIL); numsets *= list_length(current_result); if (limit >= 0 && numsets > limit) return NIL; expanded_groups = lappend(expanded_groups, current_result); } /* * Do cartesian product between sublists of expanded_groups. While at it, * remove any duplicate elements from individual grouping sets (we must * NOT change the number of sets though) */ foreach(lc, (List *) linitial(expanded_groups)) { result = lappend(result, list_union_int(NIL, (List *) lfirst(lc))); } for_each_cell(lc, expanded_groups, lnext(expanded_groups, list_head(expanded_groups))) { List *p = lfirst(lc); List *new_result = NIL; ListCell *lc2; foreach(lc2, result) { List *q = lfirst(lc2); ListCell *lc3; foreach(lc3, p) { new_result = lappend(new_result, list_union_int(q,(List *) lfirst(lc3))); } } result = new_result; } if (list_length(result) > 1) { int result_len = list_length(result); List **buf = palloc(sizeof(List *) * result_len); List **ptr = buf; foreach(lc, result) { *ptr++ = lfirst(lc); } qsort(buf, result_len, sizeof(List *), cmp_list_len_asc); result = NIL; ptr = buf; while (result_len-- > 0) result = lappend(result, *ptr++); pfree(buf); } return result; } age-PG16-v1.5.0-rc0/src/backend/parser/cypher_parse_node.c000066400000000000000000000114261454606241200231130ustar00rootroot00000000000000/* * For PostgreSQL Database Management System: * (formerly known as Postgres, then as Postgres95) * * Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group * * Portions Copyright (c) 1994, The Regents of the University of California * * Permission to use, copy, modify, and distribute this software and its documentation for any purpose, * without fee, and without a written agreement is hereby granted, provided that the above copyright notice * and this paragraph and the following two paragraphs appear in all copies. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA * HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ #include "postgres.h" #include "mb/pg_wchar.h" #include "parser/cypher_parse_node.h" static void errpos_ecb(void *arg); // NOTE: sync the logic with make_parsestate() cypher_parsestate *make_cypher_parsestate(cypher_parsestate *parent_cpstate) { ParseState *parent_pstate = (ParseState *)parent_cpstate; cypher_parsestate *cpstate; ParseState *pstate; cpstate = palloc0(sizeof(*cpstate)); pstate = (ParseState *)cpstate; /* Fill in fields that don't start at null/false/zero */ pstate->parentParseState = parent_pstate; pstate->p_next_resno = 1; pstate->p_resolve_unknowns = true; if (parent_cpstate) { pstate->p_sourcetext = parent_pstate->p_sourcetext; pstate->p_queryEnv = parent_pstate->p_queryEnv; pstate->p_pre_columnref_hook = parent_pstate->p_pre_columnref_hook; pstate->p_post_columnref_hook = parent_pstate->p_post_columnref_hook; pstate->p_paramref_hook = parent_pstate->p_paramref_hook; pstate->p_coerce_param_hook = parent_pstate->p_coerce_param_hook; pstate->p_ref_hook_state = parent_pstate->p_ref_hook_state; cpstate->graph_name = parent_cpstate->graph_name; cpstate->graph_oid = parent_cpstate->graph_oid; cpstate->params = parent_cpstate->params; } return cpstate; } void free_cypher_parsestate(cypher_parsestate *cpstate) { free_parsestate((ParseState *)cpstate); } void setup_errpos_ecb(errpos_ecb_state *ecb_state, ParseState *pstate, int query_loc) { ecb_state->ecb.previous = error_context_stack; ecb_state->ecb.callback = errpos_ecb; ecb_state->ecb.arg = ecb_state; ecb_state->pstate = pstate; ecb_state->query_loc = query_loc; error_context_stack = &ecb_state->ecb; } void cancel_errpos_ecb(errpos_ecb_state *ecb_state) { error_context_stack = ecb_state->ecb.previous; } /* * adjust the current error position by adding the position of the current * query which is a subquery of a parent query */ static void errpos_ecb(void *arg) { errpos_ecb_state *ecb_state = arg; int query_pos; if (geterrcode() == ERRCODE_QUERY_CANCELED) return; Assert(ecb_state->query_loc > -1); query_pos = pg_mbstrlen_with_len(ecb_state->pstate->p_sourcetext, ecb_state->query_loc); errposition(query_pos + geterrposition()); } /* * Generates a default alias name for when a query needs on and the parse * state does not provide one. */ char *get_next_default_alias(cypher_parsestate *cpstate) { ParseState *pstate = (ParseState *)cpstate; cypher_parsestate *parent_cpstate = (cypher_parsestate *)pstate->parentParseState; char *alias_name; int nlen = 0; /* * Every clause transformed as a subquery has its own cpstate which is being * freed after it is transformed. The root cpstate is the one that has the * default alias number initialized. So we need to reach the root cpstate to * get the next correct default alias number. */ if (parent_cpstate) { return get_next_default_alias(parent_cpstate); } /* get the length of the combined string */ nlen = snprintf(NULL, 0, "%s%d", AGE_DEFAULT_ALIAS_PREFIX, cpstate->default_alias_num); /* allocate the space */ alias_name = palloc0(nlen + 1); /* create the name */ snprintf(alias_name, nlen + 1, "%s%d", AGE_DEFAULT_ALIAS_PREFIX, cpstate->default_alias_num); /* increment the default alias number */ cpstate->default_alias_num++; return alias_name; } age-PG16-v1.5.0-rc0/src/backend/parser/cypher_parser.c000066400000000000000000000104521454606241200222660ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "parser/scansup.h" #include "parser/cypher_gram.h" #include "parser/cypher_keywords.h" #include "parser/cypher_parser.h" int cypher_yylex(YYSTYPE *lvalp, YYLTYPE *llocp, ag_scanner_t scanner) { /* * This list must match ag_token_type. * 0 means end-of-input. */ const int type_map[] = { 0, INTEGER, DECIMAL, STRING, IDENTIFIER, PARAMETER, NOT_EQ, LT_EQ, GT_EQ, DOT_DOT, TYPECAST, PLUS_EQ, EQ_TILDE, LEFT_CONTAINS, RIGHT_CONTAINS, ACCESS_PATH, ANY_EXISTS, ALL_EXISTS, CONCAT }; ag_token token; token = ag_scanner_next_token(scanner); switch (token.type) { case AG_TOKEN_NULL: break; case AG_TOKEN_INTEGER: lvalp->integer = token.value.i; break; case AG_TOKEN_DECIMAL: case AG_TOKEN_STRING: lvalp->string = pstrdup(token.value.s); break; case AG_TOKEN_IDENTIFIER: { int kwnum; char *ident; kwnum = ScanKeywordLookup(token.value.s, &CypherKeyword); if (kwnum >= 0) { /* * use token.value.s instead of keyword->name to preserve * case sensitivity */ lvalp->keyword = GetScanKeyword(kwnum, &CypherKeyword); ident = pstrdup(token.value.s); truncate_identifier(ident, strlen(ident), true); lvalp->string = ident; *llocp = token.location; return CypherKeywordTokens[kwnum]; } ident = pstrdup(token.value.s); truncate_identifier(ident, strlen(ident), true); lvalp->string = ident; break; } case AG_TOKEN_PARAMETER: lvalp->string = pstrdup(token.value.s); break; case AG_TOKEN_LT_GT: case AG_TOKEN_LT_EQ: case AG_TOKEN_GT_EQ: case AG_TOKEN_DOT_DOT: case AG_TOKEN_PLUS_EQ: case AG_TOKEN_EQ_TILDE: case AG_TOKEN_ACCESS_PATH: case AG_TOKEN_ALL_EXISTS: case AG_TOKEN_ANY_EXISTS: case AG_TOKEN_LEFT_CONTAINS: case AG_TOKEN_RIGHT_CONTAINS: case AG_TOKEN_CONCAT: break; case AG_TOKEN_TYPECAST: break; case AG_TOKEN_CHAR: *llocp = token.location; return token.value.c; default: ereport(ERROR, (errmsg("unexpected ag_token_type: %d", token.type))); break; } *llocp = token.location; return type_map[token.type]; } void cypher_yyerror(YYLTYPE *llocp, ag_scanner_t scanner, cypher_yy_extra *extra, const char *msg) { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), ag_scanner_errmsg(msg, scanner), ag_scanner_errposition(*llocp, scanner))); } /* declaration to make mac os x compiler happy */ int cypher_yyparse(ag_scanner_t scanner, cypher_yy_extra *extra); List *parse_cypher(const char *s) { ag_scanner_t scanner; cypher_yy_extra extra; int yyresult; scanner = ag_scanner_create(s); extra.result = NIL; extra.extra = NULL; yyresult = cypher_yyparse(scanner, &extra); ag_scanner_destroy(scanner); /* * cypher_yyparse() returns 0 if parsing was successful. * Otherwise, it returns 1 (invalid input) or 2 (memory exhaustion). */ if (yyresult) return NIL; /* * Append the extra node regardless of its value. Currently the extra * node is only used by EXPLAIN */ return lappend(extra.result, extra.extra); } age-PG16-v1.5.0-rc0/src/backend/parser/cypher_transform_entity.c000066400000000000000000000136001454606241200243770ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "parser/cypher_transform_entity.h" // creates a transform entity transform_entity *make_transform_entity(cypher_parsestate *cpstate, enum transform_entity_type type, Node *node, Expr *expr) { transform_entity *entity; entity = palloc(sizeof(transform_entity)); entity->type = type; if (type == ENT_VERTEX) { entity->entity.node = (cypher_node *)node; } else if (entity->type == ENT_EDGE || entity->type == ENT_VLE_EDGE) { entity->entity.rel = (cypher_relationship *)node; } else if (entity->type == ENT_PATH) { entity->entity.path = (cypher_path *)node; } else { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("unknown entity type"))); } entity->declared_in_current_clause = true; entity->expr = expr; entity->in_join_tree = expr != NULL; return entity; } /* * Finds the transform_entity in the cypher_parstate for a the given name and * type. */ transform_entity *find_transform_entity(cypher_parsestate *cpstate, char *name, enum transform_entity_type type) { ListCell *lc; if (name == NULL) { return NULL; } foreach(lc, cpstate->entities) { transform_entity *entity = lfirst(lc); if (entity->type != type) { continue; } if (type == ENT_VERTEX) { if (entity->entity.node->name != NULL && !strcmp(entity->entity.node->name, name)) { return entity; } } else if (type == ENT_EDGE || type == ENT_VLE_EDGE) { if (entity->entity.rel->name != NULL && !strcmp(entity->entity.rel->name, name)) { return entity; } } else if (type == ENT_PATH) { if (entity->entity.path->var_name != NULL && !strcmp(entity->entity.path->var_name, name)) { return entity; } } } return NULL; } /* * Iterate through the cypher_parsestate's transform_entities and returns * the entity with name passed by name variable. */ transform_entity *find_variable(cypher_parsestate *cpstate, char *name) { ListCell *lc; /* while we have cypher_parsestates to check */ while (cpstate) { foreach (lc, cpstate->entities) { transform_entity *entity = lfirst(lc); char *entity_name = NULL; if (entity->type == ENT_VERTEX) { entity_name = entity->entity.node->name; } else if (entity->type == ENT_EDGE || entity->type == ENT_VLE_EDGE) { entity_name = entity->entity.rel->name; } else if (entity->type == ENT_PATH) { entity_name = entity->entity.path->var_name; } else { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("unknown entity type"))); } if (entity_name != NULL && !strcmp(name, entity_name)) { return entity; } } /* go up to the next parent parse state */ cpstate = (cypher_parsestate*)cpstate->pstate.parentParseState; } return NULL; } // helper function that extracts the name associated with the transform_entity. char *get_entity_name(transform_entity *entity) { if (entity->type == ENT_EDGE || entity->type == ENT_VLE_EDGE) { return entity->entity.rel->name; } else if (entity->type == ENT_VERTEX) { return entity->entity.node->name; } else if (entity->type == ENT_PATH) { return entity->entity.path->var_name; } else { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("cannot get entity name from transform_entity type %i", entity->type))); } return NULL; } /* * Returns entity->expr relative to the current cpstate. * * For example, * If entity is from current cpstate, its levelsup = 0. * If entity is from immediate parent cpstate, its levelsup = 1. * If entity is from parent's parent's cpstate, its levelsup = 2. * * Relative Expr is necessary when entity->expr is a Var and the entity * is not from the current cpstate. In this case, Var->varlevelsup must * reflect the distance between source cpstate of the entity and the * cpstate where the Var is being used. */ Expr *get_relative_expr(transform_entity *entity, Index levelsup) { Var *var; Var *updated_var; if (!IsA(entity->expr, Var)) { return entity->expr; } var = (Var *)entity->expr; updated_var = makeVar(var->varno, var->varattno, var->vartype, var->vartypmod, var->varcollid, var->varlevelsup + levelsup); return (Expr *)updated_var; } age-PG16-v1.5.0-rc0/src/backend/utils/000077500000000000000000000000001454606241200171165ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/src/backend/utils/adt/000077500000000000000000000000001454606241200176665ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/src/backend/utils/adt/ag_float8_supp.c000066400000000000000000000141351454606241200227510ustar00rootroot00000000000000/* * For PostgreSQL Database Management System: * (formerly known as Postgres, then as Postgres95) * * Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group * * Portions Copyright (c) 1994, The Regents of the University of California * * Permission to use, copy, modify, and distribute this software and its documentation for any purpose, * without fee, and without a written agreement is hereby granted, provided that the above copyright notice * and this paragraph and the following two paragraphs appear in all copies. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA * HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ #include "postgres.h" #include "utils/float.h" #include "utils/ag_float8_supp.h" /* * This is a copy of float8in_internal with a slight modification, it doesn't * error on bad input, it will set is_valid to false instead. * * float8in_internal_null - guts of float8in_null() * * This is exposed for use by functions that want a reasonably * platform-independent way of inputting doubles. The behavior is * essentially like strtod + ereport on error, but note the following * differences: * 1. Both leading and trailing whitespace are skipped. * 2. If endptr_p is NULL, we throw error if there's trailing junk. * Otherwise, it's up to the caller to complain about trailing junk. * 3. In event of a syntax error, the report mentions the given type_name * and prints orig_string as the input; this is meant to support use of * this function with types such as "box" and "point", where what we are * parsing here is just a substring of orig_string. * * "num" could validly be declared "const char *", but that results in an * unreasonable amount of extra casting both here and in callers, so we don't. */ float8 float8in_internal_null(char *num, char **endptr_p, const char *type_name, const char *orig_string, bool *is_valid) { double val; char *endptr; *is_valid = false; /* skip leading whitespace */ while (*num != '\0' && isspace((unsigned char) *num)) num++; /* * Check for an empty-string input to begin with, to avoid the vagaries of * strtod() on different platforms. */ if (*num == '\0') return 0; errno = 0; val = strtod(num, &endptr); /* did we not see anything that looks like a double? */ if (endptr == num || errno != 0) { int save_errno = errno; /* * C99 requires that strtod() accept NaN, [+-]Infinity, and [+-]Inf, * but not all platforms support all of these (and some accept them * but set ERANGE anyway...) Therefore, we check for these inputs * ourselves if strtod() fails. * * Note: C99 also requires hexadecimal input as well as some extended * forms of NaN, but we consider these forms unportable and don't try * to support them. You can use 'em if your strtod() takes 'em. */ if (pg_strncasecmp(num, "NaN", 3) == 0) { val = get_float8_nan(); endptr = num + 3; } else if (pg_strncasecmp(num, "Infinity", 8) == 0) { val = get_float8_infinity(); endptr = num + 8; } else if (pg_strncasecmp(num, "+Infinity", 9) == 0) { val = get_float8_infinity(); endptr = num + 9; } else if (pg_strncasecmp(num, "-Infinity", 9) == 0) { val = -get_float8_infinity(); endptr = num + 9; } else if (pg_strncasecmp(num, "inf", 3) == 0) { val = get_float8_infinity(); endptr = num + 3; } else if (pg_strncasecmp(num, "+inf", 4) == 0) { val = get_float8_infinity(); endptr = num + 4; } else if (pg_strncasecmp(num, "-inf", 4) == 0) { val = -get_float8_infinity(); endptr = num + 4; } else if (save_errno == ERANGE) { /* * Some platforms return ERANGE for denormalized numbers (those * that are not zero, but are too close to zero to have full * precision). We'd prefer not to throw error for that, so try to * detect whether it's a "real" out-of-range condition by checking * to see if the result is zero or huge. * * On error, we intentionally complain about double precision not * the given type name, and we print only the part of the string * that is the current number. */ if (val == 0.0 || val >= HUGE_VAL || val <= -HUGE_VAL) { char *errnumber = pstrdup(num); errnumber[endptr - num] = '\0'; return 0; } } else return 0; } #ifdef HAVE_BUGGY_SOLARIS_STRTOD else { /* * Many versions of Solaris have a bug wherein strtod sets endptr to * point one byte beyond the end of the string when given "inf" or * "infinity". */ if (endptr != num && endptr[-1] == '\0') endptr--; } #endif /* HAVE_BUGGY_SOLARIS_STRTOD */ /* skip trailing whitespace */ while (*endptr != '\0' && isspace((unsigned char) *endptr)) endptr++; /* report stopping point if wanted, else complain if not end of string */ if (endptr_p) *endptr_p = endptr; else if (*endptr != '\0') return 0; *is_valid = true; return val; } age-PG16-v1.5.0-rc0/src/backend/utils/adt/age_global_graph.c000066400000000000000000001141531454606241200232740ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "access/heapam.h" #include "catalog/namespace.h" #include "common/hashfn.h" #include "commands/label_commands.h" #include "utils/datum.h" #include "utils/lsyscache.h" #include "utils/memutils.h" #include "utils/snapmgr.h" #include "utils/age_global_graph.h" #include "catalog/ag_graph.h" #include "catalog/ag_label.h" /* defines */ #define VERTEX_HTAB_NAME "Vertex to edge lists " /* added a space at end for */ #define EDGE_HTAB_NAME "Edge to vertex mapping " /* the graph name to follow */ #define VERTEX_HTAB_INITIAL_SIZE 1000000 #define EDGE_HTAB_INITIAL_SIZE 1000000 /* internal data structures implementation */ /* vertex entry for the vertex_hashtable */ typedef struct vertex_entry { graphid vertex_id; /* vertex id, it is also the hash key */ ListGraphId *edges_in; /* List of entering edges graphids (int64) */ ListGraphId *edges_out; /* List of exiting edges graphids (int64) */ ListGraphId *edges_self; /* List of selfloop edges graphids (int64) */ Oid vertex_label_table_oid; /* the label table oid */ Datum vertex_properties; /* datum property value */ } vertex_entry; /* edge entry for the edge_hashtable */ typedef struct edge_entry { graphid edge_id; /* edge id, it is also the hash key */ Oid edge_label_table_oid; /* the label table oid */ Datum edge_properties; /* datum property value */ graphid start_vertex_id; /* start vertex */ graphid end_vertex_id; /* end vertex */ } edge_entry; /* * GRAPH global context per graph. They are chained together via next. * Be aware that the global pointer will point to the root BUT that * the root will change as new graphs are added to the top. */ typedef struct GRAPH_global_context { char *graph_name; /* graph name */ Oid graph_oid; /* graph oid for searching */ HTAB *vertex_hashtable; /* hashtable to hold vertex edge lists */ HTAB *edge_hashtable; /* hashtable to hold edge to vertex map */ TransactionId xmin; /* transaction ids for this graph */ TransactionId xmax; CommandId curcid; /* currentCommandId graph was created with */ int64 num_loaded_vertices; /* number of loaded vertices in this graph */ int64 num_loaded_edges; /* number of loaded edges in this graph */ ListGraphId *vertices; /* vertices for vertex hashtable cleanup */ struct GRAPH_global_context *next; /* next graph */ } GRAPH_global_context; /* global variable to hold the per process GRAPH global context */ static GRAPH_global_context *global_graph_contexts = NULL; /* declarations */ /* GRAPH global context functions */ static void free_specific_GRAPH_global_context(GRAPH_global_context *ggctx); static bool delete_specific_GRAPH_global_contexts(char *graph_name); static bool delete_GRAPH_global_contexts(void); static void create_GRAPH_global_hashtables(GRAPH_global_context *ggctx); static void load_GRAPH_global_hashtables(GRAPH_global_context *ggctx); static void load_vertex_hashtable(GRAPH_global_context *ggctx); static void load_edge_hashtable(GRAPH_global_context *ggctx); static void freeze_GRAPH_global_hashtables(GRAPH_global_context *ggctx); static List *get_ag_labels_names(Snapshot snapshot, Oid graph_oid, char label_type); static bool insert_edge(GRAPH_global_context *ggctx, graphid edge_id, Datum edge_properties, graphid start_vertex_id, graphid end_vertex_id, Oid edge_label_table_oid); static bool insert_vertex_edge(GRAPH_global_context *ggctx, graphid start_vertex_id, graphid end_vertex_id, graphid edge_id); static bool insert_vertex_entry(GRAPH_global_context *ggctx, graphid vertex_id, Oid vertex_label_table_oid, Datum vertex_properties); /* definitions */ /* * Helper function to determine validity of the passed GRAPH_global_context. * This is based off of the current active snapshot, to see if the graph could * have been modified. Ideally, we should find a way to more accurately know * whether the particular graph was modified. */ bool is_ggctx_invalid(GRAPH_global_context *ggctx) { Snapshot snap = GetActiveSnapshot(); /* * If the transaction ids (xmin or xmax) or currentCommandId (curcid) have * changed, then we have a graph that was updated. This means that the * global context for this graph is no longer valid. */ return (ggctx->xmin != snap->xmin || ggctx->xmax != snap->xmax || ggctx->curcid != snap->curcid); } /* * Helper function to create the global vertex and edge hashtables. One * hashtable will hold the vertex, its edges (both incoming and exiting) as a * list, and its properties datum. The other hashtable will hold the edge, its * properties datum, and its source and target vertex. */ static void create_GRAPH_global_hashtables(GRAPH_global_context *ggctx) { HASHCTL vertex_ctl; HASHCTL edge_ctl; char *graph_name = NULL; char *vhn = NULL; char *ehn = NULL; int glen; int vlen; int elen; /* get the graph name and length */ graph_name = ggctx->graph_name; glen = strlen(graph_name); /* get the vertex htab name length */ vlen = strlen(VERTEX_HTAB_NAME); /* get the edge htab name length */ elen = strlen(EDGE_HTAB_NAME); /* allocate the space and build the names */ vhn = palloc0(vlen + glen + 1); ehn = palloc0(elen + glen + 1); /* copy in the names */ strcpy(vhn, VERTEX_HTAB_NAME); strcpy(ehn, EDGE_HTAB_NAME); /* add in the graph name */ vhn = strncat(vhn, graph_name, glen); ehn = strncat(ehn, graph_name, glen); /* initialize the vertex hashtable */ MemSet(&vertex_ctl, 0, sizeof(vertex_ctl)); vertex_ctl.keysize = sizeof(int64); vertex_ctl.entrysize = sizeof(vertex_entry); vertex_ctl.hash = tag_hash; ggctx->vertex_hashtable = hash_create(vhn, VERTEX_HTAB_INITIAL_SIZE, &vertex_ctl, HASH_ELEM | HASH_FUNCTION); pfree(vhn); /* initialize the edge hashtable */ MemSet(&edge_ctl, 0, sizeof(edge_ctl)); edge_ctl.keysize = sizeof(int64); edge_ctl.entrysize = sizeof(edge_entry); edge_ctl.hash = tag_hash; ggctx->edge_hashtable = hash_create(ehn, EDGE_HTAB_INITIAL_SIZE, &edge_ctl, HASH_ELEM | HASH_FUNCTION); pfree(ehn); } /* helper function to get a List of all label names for the specified graph */ static List *get_ag_labels_names(Snapshot snapshot, Oid graph_oid, char label_type) { List *labels = NIL; ScanKeyData scan_keys[2]; Relation ag_label; TableScanDesc scan_desc; HeapTuple tuple; TupleDesc tupdesc; /* we need a valid snapshot */ Assert(snapshot != NULL); /* setup scan keys to get all edges for the given graph oid */ ScanKeyInit(&scan_keys[1], Anum_ag_label_graph, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(graph_oid)); ScanKeyInit(&scan_keys[0], Anum_ag_label_kind, BTEqualStrategyNumber, F_CHAREQ, CharGetDatum(label_type)); /* setup the table to be scanned, ag_label in this case */ ag_label = table_open(ag_label_relation_id(), ShareLock); scan_desc = table_beginscan(ag_label, snapshot, 2, scan_keys); /* get the tupdesc - we don't need to release this one */ tupdesc = RelationGetDescr(ag_label); /* bail if the number of columns differs - this table has 5 */ Assert(tupdesc->natts == Natts_ag_label); /* get all of the label names */ while((tuple = heap_getnext(scan_desc, ForwardScanDirection)) != NULL) { Name label; bool is_null = false; /* something is wrong if this tuple isn't valid */ Assert(HeapTupleIsValid(tuple)); /* get the label name */ label = DatumGetName(heap_getattr(tuple, Anum_ag_label_name, tupdesc, &is_null)); Assert(!is_null); /* add it to our list */ labels = lappend(labels, label); } /* close up scan */ table_endscan(scan_desc); table_close(ag_label, ShareLock); return labels; } /* * Helper function to insert one edge/edge->vertex, key/value pair, in the * current GRAPH global edge hashtable. */ static bool insert_edge(GRAPH_global_context *ggctx, graphid edge_id, Datum edge_properties, graphid start_vertex_id, graphid end_vertex_id, Oid edge_label_table_oid) { edge_entry *value = NULL; bool found = false; /* search for the edge */ value = (edge_entry *)hash_search(ggctx->edge_hashtable, (void *)&edge_id, HASH_ENTER, &found); /* * If we found the key, either we have a duplicate, or we made a mistake and * inserted it already. Either way, this isn't good so don't insert it and * return false. Likewise, if the value returned is NULL, don't do anything, * just return false. This way the caller can decide what to do. */ if (found || value == NULL) { return false; } /* not sure if we really need to zero out the entry, as we set everything */ MemSet(value, 0, sizeof(edge_entry)); /* * Set the edge id - this is important as this is the hash key value used * for hash function collisions. */ value->edge_id = edge_id; value->edge_properties = edge_properties; value->start_vertex_id = start_vertex_id; value->end_vertex_id = end_vertex_id; value->edge_label_table_oid = edge_label_table_oid; /* increment the number of loaded edges */ ggctx->num_loaded_edges++; return true; } /* * Helper function to insert an entire vertex into the current GRAPH global * vertex hashtable. It will return false if there is a duplicate. */ static bool insert_vertex_entry(GRAPH_global_context *ggctx, graphid vertex_id, Oid vertex_label_table_oid, Datum vertex_properties) { vertex_entry *ve = NULL; bool found = false; /* search for the vertex */ ve = (vertex_entry *)hash_search(ggctx->vertex_hashtable, (void *)&vertex_id, HASH_ENTER, &found); /* we should never have duplicates, return false */ if (found) { return false; } /* again, MemSet may not be needed here */ MemSet(ve, 0, sizeof(vertex_entry)); /* * Set the vertex id - this is important as this is the hash key value * used for hash function collisions. */ ve->vertex_id = vertex_id; /* set the label table oid for this vertex */ ve->vertex_label_table_oid = vertex_label_table_oid; /* set the datum vertex properties */ ve->vertex_properties = vertex_properties; /* set the NIL edge list */ ve->edges_in = NULL; ve->edges_out = NULL; ve->edges_self = NULL; /* we also need to store the vertex id for clean up of vertex lists */ ggctx->vertices = append_graphid(ggctx->vertices, vertex_id); /* increment the number of loaded vertices */ ggctx->num_loaded_vertices++; return true; } /* * Helper function to append one edge to an existing vertex in the current * global vertex hashtable. */ static bool insert_vertex_edge(GRAPH_global_context *ggctx, graphid start_vertex_id, graphid end_vertex_id, graphid edge_id) { vertex_entry *value = NULL; bool found = false; bool is_selfloop = false; /* is it a self loop */ is_selfloop = (start_vertex_id == end_vertex_id); /* search for the start vertex of the edge */ value = (vertex_entry *)hash_search(ggctx->vertex_hashtable, (void *)&start_vertex_id, HASH_FIND, &found); /* vertices were preloaded so it must be there */ Assert(found); if (!found) { return found; } /* if it is a self loop, add the edge to edges_self and we're done */ if (is_selfloop) { value->edges_self = append_graphid(value->edges_self, edge_id); return found; } /* add the edge to the edges_out list of the start vertex */ value->edges_out = append_graphid(value->edges_out, edge_id); /* search for the end vertex of the edge */ value = (vertex_entry *)hash_search(ggctx->vertex_hashtable, (void *)&end_vertex_id, HASH_FIND, &found); /* vertices were preloaded so it must be there */ Assert(found); if (!found) { return found; } /* add the edge to the edges_in list of the end vertex */ value->edges_in = append_graphid(value->edges_in, edge_id); return found; } /* helper routine to load all vertices into the GRAPH global vertex hashtable */ static void load_vertex_hashtable(GRAPH_global_context *ggctx) { Oid graph_oid; Oid graph_namespace_oid; Snapshot snapshot; List *vertex_label_names = NIL; ListCell *lc; /* get the specific graph OID and namespace (schema) OID */ graph_oid = ggctx->graph_oid; graph_namespace_oid = get_namespace_oid(ggctx->graph_name, false); /* get the active snapshot */ snapshot = GetActiveSnapshot(); /* get the names of all of the vertex label tables */ vertex_label_names = get_ag_labels_names(snapshot, graph_oid, LABEL_TYPE_VERTEX); /* go through all vertex label tables in list */ foreach (lc, vertex_label_names) { Relation graph_vertex_label; TableScanDesc scan_desc; HeapTuple tuple; char *vertex_label_name; Oid vertex_label_table_oid; TupleDesc tupdesc; /* get the vertex label name */ vertex_label_name = lfirst(lc); /* get the vertex label name's OID */ vertex_label_table_oid = get_relname_relid(vertex_label_name, graph_namespace_oid); /* open the relation (table) and begin the scan */ graph_vertex_label = table_open(vertex_label_table_oid, ShareLock); scan_desc = table_beginscan(graph_vertex_label, snapshot, 0, NULL); /* get the tupdesc - we don't need to release this one */ tupdesc = RelationGetDescr(graph_vertex_label); /* bail if the number of columns differs */ if (tupdesc->natts != 2) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_TABLE), errmsg("Invalid number of attributes for %s.%s", ggctx->graph_name, vertex_label_name))); } /* get all tuples in table and insert them into graph hashtables */ while((tuple = heap_getnext(scan_desc, ForwardScanDirection)) != NULL) { graphid vertex_id; Datum vertex_properties; bool inserted = false; /* something is wrong if this isn't true */ Assert(HeapTupleIsValid(tuple)); /* get the vertex id */ vertex_id = DatumGetInt64(column_get_datum(tupdesc, tuple, 0, "id", GRAPHIDOID, true)); /* get the vertex properties datum */ vertex_properties = column_get_datum(tupdesc, tuple, 1, "properties", AGTYPEOID, true); /* we need to make a copy of the properties datum */ vertex_properties = datumCopy(vertex_properties, false, -1); /* insert vertex into vertex hashtable */ inserted = insert_vertex_entry(ggctx, vertex_id, vertex_label_table_oid, vertex_properties); /* this insert must not fail, it means there is a duplicate */ if (!inserted) { elog(ERROR, "insert_vertex_entry: failed due to duplicate"); } } /* end the scan and close the relation */ table_endscan(scan_desc); table_close(graph_vertex_label, ShareLock); } } /* * Helper function to load all of the GRAPH global hashtables (vertex & edge) * for the current global context. */ static void load_GRAPH_global_hashtables(GRAPH_global_context *ggctx) { /* initialize statistics */ ggctx->num_loaded_vertices = 0; ggctx->num_loaded_edges = 0; /* insert all of our vertices */ load_vertex_hashtable(ggctx); /* insert all of our edges */ load_edge_hashtable(ggctx); } /* * Helper routine to load all edges into the GRAPH global edge and vertex * hashtables. */ static void load_edge_hashtable(GRAPH_global_context *ggctx) { Oid graph_oid; Oid graph_namespace_oid; Snapshot snapshot; List *edge_label_names = NIL; ListCell *lc; /* get the specific graph OID and namespace (schema) OID */ graph_oid = ggctx->graph_oid; graph_namespace_oid = get_namespace_oid(ggctx->graph_name, false); /* get the active snapshot */ snapshot = GetActiveSnapshot(); /* get the names of all of the edge label tables */ edge_label_names = get_ag_labels_names(snapshot, graph_oid, LABEL_TYPE_EDGE); /* go through all edge label tables in list */ foreach (lc, edge_label_names) { Relation graph_edge_label; TableScanDesc scan_desc; HeapTuple tuple; char *edge_label_name; Oid edge_label_table_oid; TupleDesc tupdesc; /* get the edge label name */ edge_label_name = lfirst(lc); /* get the edge label name's OID */ edge_label_table_oid = get_relname_relid(edge_label_name, graph_namespace_oid); /* open the relation (table) and begin the scan */ graph_edge_label = table_open(edge_label_table_oid, ShareLock); scan_desc = table_beginscan(graph_edge_label, snapshot, 0, NULL); /* get the tupdesc - we don't need to release this one */ tupdesc = RelationGetDescr(graph_edge_label); /* bail if the number of columns differs */ if (tupdesc->natts != 4) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_TABLE), errmsg("Invalid number of attributes for %s.%s", ggctx->graph_name, edge_label_name))); } /* get all tuples in table and insert them into graph hashtables */ while((tuple = heap_getnext(scan_desc, ForwardScanDirection)) != NULL) { graphid edge_id; graphid edge_vertex_start_id; graphid edge_vertex_end_id; Datum edge_properties; bool inserted = false; /* something is wrong if this isn't true */ Assert(HeapTupleIsValid(tuple)); /* get the edge id */ edge_id = DatumGetInt64(column_get_datum(tupdesc, tuple, 0, "id", GRAPHIDOID, true)); /* get the edge start_id (start vertex id) */ edge_vertex_start_id = DatumGetInt64(column_get_datum(tupdesc, tuple, 1, "start_id", GRAPHIDOID, true)); /* get the edge end_id (end vertex id)*/ edge_vertex_end_id = DatumGetInt64(column_get_datum(tupdesc, tuple, 2, "end_id", GRAPHIDOID, true)); /* get the edge properties datum */ edge_properties = column_get_datum(tupdesc, tuple, 3, "properties", AGTYPEOID, true); /* we need to make a copy of the properties datum */ edge_properties = datumCopy(edge_properties, false, -1); /* insert edge into edge hashtable */ inserted = insert_edge(ggctx, edge_id, edge_properties, edge_vertex_start_id, edge_vertex_end_id, edge_label_table_oid); /* this insert must not fail */ if (!inserted) { elog(ERROR, "insert_edge: failed to insert"); } /* insert the edge into the start and end vertices edge lists */ inserted = insert_vertex_edge(ggctx, edge_vertex_start_id, edge_vertex_end_id, edge_id); /* this insert must not fail */ if (!inserted) { elog(ERROR, "insert_vertex_edge: failed to insert"); } } /* end the scan and close the relation */ table_endscan(scan_desc); table_close(graph_edge_label, ShareLock); } } /* * Helper function to freeze the GRAPH global hashtables from additional * inserts. This may, or may not, be useful. Currently, these hashtables are * only seen by the creating process and only for reading. */ static void freeze_GRAPH_global_hashtables(GRAPH_global_context *ggctx) { hash_freeze(ggctx->vertex_hashtable); hash_freeze(ggctx->edge_hashtable); } /* * Helper function to free the entire specified GRAPH global context. After * running this you should not use the pointer in ggctx. */ static void free_specific_GRAPH_global_context(GRAPH_global_context *ggctx) { GraphIdNode *curr_vertex = NULL; /* don't do anything if NULL */ if (ggctx == NULL) { return; } /* free the graph name */ pfree(ggctx->graph_name); ggctx->graph_name = NULL; ggctx->graph_oid = InvalidOid; ggctx->next = NULL; /* free the vertex edge lists, starting with the head */ curr_vertex = peek_stack_head(ggctx->vertices); while (curr_vertex != NULL) { GraphIdNode *next_vertex = NULL; vertex_entry *value = NULL; bool found = false; graphid vertex_id; /* get the next vertex in the list, if any */ next_vertex = next_GraphIdNode(curr_vertex); /* get the current vertex id */ vertex_id = get_graphid(curr_vertex); /* retrieve the vertex entry */ value = (vertex_entry *)hash_search(ggctx->vertex_hashtable, (void *)&vertex_id, HASH_FIND, &found); /* this is bad if it isn't found */ Assert(found); /* free the edge list associated with this vertex */ free_ListGraphId(value->edges_in); free_ListGraphId(value->edges_out); free_ListGraphId(value->edges_self); value->edges_in = NULL; value->edges_out = NULL; value->edges_self = NULL; /* move to the next vertex */ curr_vertex = next_vertex; } /* free the vertices list */ free_ListGraphId(ggctx->vertices); ggctx->vertices = NULL; /* free the hashtables */ hash_destroy(ggctx->vertex_hashtable); hash_destroy(ggctx->edge_hashtable); ggctx->vertex_hashtable = NULL; ggctx->edge_hashtable = NULL; /* free the context */ pfree(ggctx); ggctx = NULL; } /* * Helper function to manage the GRAPH global contexts. It will create the * context for the graph specified, provided it isn't already built and valid. * During processing it will free (delete) all invalid GRAPH contexts. It * returns the GRAPH global context for the specified graph. */ GRAPH_global_context *manage_GRAPH_global_contexts(char *graph_name, Oid graph_oid) { GRAPH_global_context *new_ggctx = NULL; GRAPH_global_context *curr_ggctx = NULL; GRAPH_global_context *prev_ggctx = NULL; MemoryContext oldctx = NULL; /* we need a higher context, or one that isn't destroyed by SRF exit */ oldctx = MemoryContextSwitchTo(TopMemoryContext); /* * We need to see if any GRAPH global contexts already exist and if any do * for this particular graph. There are 5 possibilities - * * 1) There are no global contexts. * 2) One does exist for this graph but, is invalid. * 3) One does exist for this graph and is valid. * 4) One or more other contexts do exist and all are valid. * 5) One or more other contexts do exist but, one or more are invalid. */ /* free the invalidated GRAPH global contexts first */ prev_ggctx = NULL; curr_ggctx = global_graph_contexts; while (curr_ggctx != NULL) { GRAPH_global_context *next_ggctx = curr_ggctx->next; /* if the transaction ids have changed, we have an invalid graph */ if (is_ggctx_invalid(curr_ggctx)) { /* * If prev_ggctx is NULL then we are freeing the top of the * contexts. So, we need to point the global variable to the * new (next) top context, if there is one. */ if (prev_ggctx == NULL) { global_graph_contexts = next_ggctx; } else { prev_ggctx->next = curr_ggctx->next; } /* free the current graph context */ free_specific_GRAPH_global_context(curr_ggctx); } else { prev_ggctx = curr_ggctx; } /* advance to the next context */ curr_ggctx = next_ggctx; } /* find our graph's context. if it exists, we are done */ curr_ggctx = global_graph_contexts; while (curr_ggctx != NULL) { if (curr_ggctx->graph_oid == graph_oid) { /* switch our context back */ MemoryContextSwitchTo(oldctx); /* we are done */ return curr_ggctx; } curr_ggctx = curr_ggctx->next; } /* otherwise, we need to create one and possibly attach it */ new_ggctx = palloc0(sizeof(GRAPH_global_context)); if (global_graph_contexts != NULL) { new_ggctx->next = global_graph_contexts; } else { new_ggctx->next = NULL; } /* set the global context variable */ global_graph_contexts = new_ggctx; /* set the graph name and oid */ new_ggctx->graph_name = pstrdup(graph_name); new_ggctx->graph_oid = graph_oid; /* set the transaction ids */ new_ggctx->xmin = GetActiveSnapshot()->xmin; new_ggctx->xmax = GetActiveSnapshot()->xmax; new_ggctx->curcid = GetActiveSnapshot()->curcid; /* initialize our vertices list */ new_ggctx->vertices = NULL; /* build the hashtables for this graph */ create_GRAPH_global_hashtables(new_ggctx); load_GRAPH_global_hashtables(new_ggctx); freeze_GRAPH_global_hashtables(new_ggctx); /* switch back to the previous memory context */ MemoryContextSwitchTo(oldctx); return new_ggctx; } /* * Helper function to delete all of the global graph contexts used by the * process. When done the global global_graph_contexts will be NULL. */ static bool delete_GRAPH_global_contexts(void) { GRAPH_global_context *curr_ggctx = NULL; bool retval = false; /* get the first context, if any */ curr_ggctx = global_graph_contexts; /* free all GRAPH global contexts */ while (curr_ggctx != NULL) { GRAPH_global_context *next_ggctx = curr_ggctx->next; /* free the current graph context */ free_specific_GRAPH_global_context(curr_ggctx); /* advance to the next context */ curr_ggctx = next_ggctx; retval = true; } /* clear the global variable */ global_graph_contexts = NULL; return retval; } /* * Helper function to delete a specific global graph context used by the * process. */ static bool delete_specific_GRAPH_global_contexts(char *graph_name) { GRAPH_global_context *prev_ggctx = NULL; GRAPH_global_context *curr_ggctx = NULL; Oid graph_oid = InvalidOid; if (graph_name == NULL) { return false; } /* get the graph oid */ graph_oid = get_graph_oid(graph_name); /* get the first context, if any */ curr_ggctx = global_graph_contexts; /* find the specified GRAPH global context */ while (curr_ggctx != NULL) { GRAPH_global_context *next_ggctx = curr_ggctx->next; if (curr_ggctx->graph_oid == graph_oid) { /* * If prev_ggctx is NULL then we are freeing the top of the * contexts. So, we need to point the global variable to the * new (next) top context, if there is one. */ if (prev_ggctx == NULL) { global_graph_contexts = next_ggctx; } else { prev_ggctx->next = curr_ggctx->next; } /* free the current graph context */ free_specific_GRAPH_global_context(curr_ggctx); /* we found and freed it, return true */ return true; } /* save the current as previous and advance to the next one */ prev_ggctx = curr_ggctx; curr_ggctx = next_ggctx; } /* we didn't find it, return false */ return false; } /* * Helper function to retrieve a vertex_entry from the graph's vertex hash * table. If there isn't one, it returns a NULL. The latter is necessary for * checking if the vsid and veid entries exist. */ vertex_entry *get_vertex_entry(GRAPH_global_context *ggctx, graphid vertex_id) { vertex_entry *ve = NULL; bool found = false; /* retrieve the current vertex entry */ ve = (vertex_entry *)hash_search(ggctx->vertex_hashtable, (void *)&vertex_id, HASH_FIND, &found); return ve; } /* helper function to retrieve an edge_entry from the graph's edge hash table */ edge_entry *get_edge_entry(GRAPH_global_context *ggctx, graphid edge_id) { edge_entry *ee = NULL; bool found = false; /* retrieve the current edge entry */ ee = (edge_entry *)hash_search(ggctx->edge_hashtable, (void *)&edge_id, HASH_FIND, &found); /* it should be found, otherwise we have problems */ Assert(found); return ee; } /* * Helper function to find the GRAPH_global_context used by the specified * graph_oid. If not found, it returns NULL. */ GRAPH_global_context *find_GRAPH_global_context(Oid graph_oid) { GRAPH_global_context *ggctx = NULL; /* get the root */ ggctx = global_graph_contexts; while(ggctx != NULL) { /* if we found it return it */ if (ggctx->graph_oid == graph_oid) { return ggctx; } /* advance to the next context */ ggctx = ggctx->next; } /* we did not find it so return NULL */ return NULL; } /* graph vertices accessor */ ListGraphId *get_graph_vertices(GRAPH_global_context *ggctx) { return ggctx->vertices; } /* vertex_entry accessor functions */ graphid get_vertex_entry_id(vertex_entry *ve) { return ve->vertex_id; } ListGraphId *get_vertex_entry_edges_in(vertex_entry *ve) { return ve->edges_in; } ListGraphId *get_vertex_entry_edges_out(vertex_entry *ve) { return ve->edges_out; } ListGraphId *get_vertex_entry_edges_self(vertex_entry *ve) { return ve->edges_self; } Oid get_vertex_entry_label_table_oid(vertex_entry *ve) { return ve->vertex_label_table_oid; } Datum get_vertex_entry_properties(vertex_entry *ve) { return ve->vertex_properties; } /* edge_entry accessor functions */ graphid get_edge_entry_id(edge_entry *ee) { return ee->edge_id; } Oid get_edge_entry_label_table_oid(edge_entry *ee) { return ee->edge_label_table_oid; } Datum get_edge_entry_properties(edge_entry *ee) { return ee->edge_properties; } graphid get_edge_entry_start_vertex_id(edge_entry *ee) { return ee->start_vertex_id; } graphid get_edge_entry_end_vertex_id(edge_entry *ee) { return ee->end_vertex_id; } /* PostgreSQL SQL facing functions */ /* PG wrapper function for age_delete_global_graphs */ PG_FUNCTION_INFO_V1(age_delete_global_graphs); Datum age_delete_global_graphs(PG_FUNCTION_ARGS) { agtype_value *agtv_temp = NULL; bool success = false; /* get the graph name if supplied */ if (!PG_ARGISNULL(0)) { agtv_temp = get_agtype_value("delete_global_graphs", AG_GET_ARG_AGTYPE_P(0), AGTV_STRING, false); } if (agtv_temp == NULL || agtv_temp->type == AGTV_NULL) { success = delete_GRAPH_global_contexts(); } else if (agtv_temp->type == AGTV_STRING) { char *graph_name = NULL; graph_name = agtv_temp->val.string.val; success = delete_specific_GRAPH_global_contexts(graph_name); } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("delete_global_graphs: invalid graph name type"))); } PG_RETURN_BOOL(success); } /* PG wrapper function for age_vertex_degree */ PG_FUNCTION_INFO_V1(age_vertex_stats); Datum age_vertex_stats(PG_FUNCTION_ARGS) { GRAPH_global_context *ggctx = NULL; vertex_entry *ve = NULL; ListGraphId *edges = NULL; agtype_value *agtv_vertex = NULL; agtype_value *agtv_temp = NULL; agtype_value agtv_integer; agtype_in_state result; char *graph_name = NULL; Oid graph_oid = InvalidOid; graphid vid = 0; int64 self_loops = 0; int64 degree = 0; /* the graph name is required, but this generally isn't user supplied */ if (PG_ARGISNULL(0)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("vertex_stats: graph name cannot be NULL"))); } /* get the graph name */ agtv_temp = get_agtype_value("vertex_stats", AG_GET_ARG_AGTYPE_P(0), AGTV_STRING, true); /* we need the vertex */ if (PG_ARGISNULL(1)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("vertex_stats: vertex cannot be NULL"))); } /* get the vertex */ agtv_vertex = get_agtype_value("vertex_stats", AG_GET_ARG_AGTYPE_P(1), AGTV_VERTEX, true); graph_name = pnstrdup(agtv_temp->val.string.val, agtv_temp->val.string.len); /* get the graph oid */ graph_oid = get_graph_oid(graph_name); /* * Create or retrieve the GRAPH global context for this graph. This function * will also purge off invalidated contexts. */ ggctx = manage_GRAPH_global_contexts(graph_name, graph_oid); /* free the graph name */ pfree(graph_name); /* get the id */ agtv_temp = GET_AGTYPE_VALUE_OBJECT_VALUE(agtv_vertex, "id"); vid = agtv_temp->val.int_value; /* get the vertex entry */ ve = get_vertex_entry(ggctx, vid); /* zero the state */ memset(&result, 0, sizeof(agtype_in_state)); /* start the object */ result.res = push_agtype_value(&result.parse_state, WAGT_BEGIN_OBJECT, NULL); /* store the id */ result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("id")); result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, agtv_temp); /* store the label */ agtv_temp = GET_AGTYPE_VALUE_OBJECT_VALUE(agtv_vertex, "label"); result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("label")); result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, agtv_temp); /* set up an integer for returning values */ agtv_temp = &agtv_integer; agtv_temp->type = AGTV_INTEGER; agtv_temp->val.int_value = 0; /* get and store the self_loops */ edges = get_vertex_entry_edges_self(ve); self_loops = (edges != NULL) ? get_list_size(edges) : 0; agtv_temp->val.int_value = self_loops; result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("self_loops")); result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, agtv_temp); /* get and store the in_degree */ edges = get_vertex_entry_edges_in(ve); degree = (edges != NULL) ? get_list_size(edges) : 0; agtv_temp->val.int_value = degree + self_loops; result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("in_degree")); result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, agtv_temp); /* get and store the out_degree */ edges = get_vertex_entry_edges_out(ve); degree = (edges != NULL) ? get_list_size(edges) : 0; agtv_temp->val.int_value = degree + self_loops; result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("out_degree")); result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, agtv_temp); /* close the object */ result.res = push_agtype_value(&result.parse_state, WAGT_END_OBJECT, NULL); result.res->type = AGTV_OBJECT; PG_RETURN_POINTER(agtype_value_to_agtype(result.res)); } age-PG16-v1.5.0-rc0/src/backend/utils/adt/age_graphid_ds.c000066400000000000000000000140311454606241200227510ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "utils/age_graphid_ds.h" /* defines */ /* * A simple linked list node for graphid lists (int64). PG's implementation * has too much overhead for this type of list as it only directly supports * regular ints, not int64s, of which a graphid currently is. */ typedef struct GraphIdNode { graphid id; struct GraphIdNode *next; } GraphIdNode; /* a container for a linked list of GraphIdNodes */ typedef struct ListGraphId { GraphIdNode *head; GraphIdNode *tail; int64 size; } ListGraphId; /* declarations */ /* definitions */ /* return the next GraphIdNode */ GraphIdNode *next_GraphIdNode(GraphIdNode *node) { return node->next; } /* return the graphid */ graphid get_graphid(GraphIdNode *node) { return node->id; } /* get the size of the passed stack */ int64 get_stack_size(ListGraphId *stack) { return stack->size; } /* return a reference to the head entry in the stack, or NULL if empty */ GraphIdNode *peek_stack_head(ListGraphId *stack) { if (stack == NULL) { return NULL; } return stack->head; } /* return a reference to the tail entry in the stack */ GraphIdNode *peek_stack_tail(ListGraphId *stack) { return stack->tail; } /* return a reference to the head entry of a list */ GraphIdNode *get_list_head(ListGraphId *list) { return list->head; } /* get the size of the passed list */ int64 get_list_size(ListGraphId *list) { return list->size; } /* * Helper function to add a graphid to the end of a ListGraphId container. * If the container is NULL, it creates the container with the entry. */ ListGraphId *append_graphid(ListGraphId *container, graphid id) { GraphIdNode *new_node = NULL; /* create the new link */ new_node = palloc0(sizeof(GraphIdNode)); new_node->id = id; new_node->next = NULL; /* * If the container is NULL then this is a new list. So, create the * container and add in the new link. */ if (container == NULL) { container = palloc0(sizeof(ListGraphId)); container->head = new_node; container->tail = new_node; container->size = 1; } /* otherwise, this is an existing list, append id */ else { container->tail->next = new_node; container->tail = new_node; container->size++; } return container; } /* free (delete) a ListGraphId list */ void free_ListGraphId(ListGraphId *container) { GraphIdNode *curr_node = NULL; GraphIdNode *next_node = NULL; /* if the container is NULL we don't need to delete anything */ if (container == NULL) { return; } /* otherwise, start from the head, free, and delete the links */ curr_node = container->head; while (curr_node != NULL) { next_node = curr_node->next; /* we can do this because this is just a list of ints */ pfree(curr_node); curr_node = next_node; } /* free the container */ pfree(container); } /* helper function to create a new, empty, graphid stack */ ListGraphId *new_graphid_stack(void) { ListGraphId *stack = NULL; /* allocate the container for the stack */ stack = palloc0(sizeof(ListGraphId)); /* set it to its initial values */ stack->head = NULL; stack->tail = NULL; stack->size = 0; /* return the new stack */ return stack; } /* helper function to free a graphid stack's contents but, not the container */ void free_graphid_stack(ListGraphId *stack) { Assert(stack != NULL); if (stack == NULL) { elog(ERROR, "free_graphid_stack: NULL stack"); } /* while there are entries */ while (stack->head != NULL) { /* get the next element in the stack */ GraphIdNode *next = stack->head->next; /* free the head element */ pfree(stack->head); /* move the head to the next */ stack->head = next; } /* reset the tail and size */ stack->tail = NULL; stack->size = 0; } /* * Helper function for a generic push graphid (int64) to a stack. If the stack * is NULL, it will error out. */ void push_graphid_stack(ListGraphId *stack, graphid id) { GraphIdNode *new_node = NULL; Assert(stack != NULL); if (stack == NULL) { elog(ERROR, "push_graphid_stack: NULL stack"); } /* create the new element */ new_node = palloc0(sizeof(GraphIdNode)); new_node->id = id; /* insert (push) the new element on the top */ new_node->next = stack->head; stack->head = new_node; stack->size++; } /* * Helper function for a generic pop graphid (int64) from a stack. If the stack * is empty, it will error out. You should verify that the stack isn't empty * prior to calling. */ graphid pop_graphid_stack(ListGraphId *stack) { GraphIdNode *node = NULL; graphid id; Assert(stack != NULL); Assert(stack->size != 0); if (stack == NULL) { elog(ERROR, "pop_graphid_stack: NULL stack"); } if (stack->size <= 0) { elog(ERROR, "pop_graphid_stack: empty stack"); } /* remove the element from the top of the stack */ node = stack->head; id = node->id; stack->head = stack->head->next; stack->size--; /* free the element */ pfree(node); /* return the id */ return id; } age-PG16-v1.5.0-rc0/src/backend/utils/adt/age_session_info.c000066400000000000000000000106401454606241200233450ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "funcapi.h" #include #include "utils/age_session_info.h" /* * static/global session info variables for use with the driver interface. */ static int session_info_pid = -1; static char *session_info_graph_name = NULL; static char *session_info_cypher_statement = NULL; static bool session_info_prepared = false; static void set_session_info(char *graph_name, char *cypher_statement); /* function to set the session info. it will clean it, if necessary. */ static void set_session_info(char *graph_name, char *cypher_statement) { MemoryContext oldctx = NULL; if (is_session_info_prepared()) { reset_session_info(); } /* we need to use a higher memory context for the data pointed to. */ oldctx = MemoryContextSwitchTo(TopMemoryContext); if (graph_name != NULL) { session_info_graph_name = pstrdup(graph_name); } else { session_info_graph_name = NULL; } if (cypher_statement != NULL) { session_info_cypher_statement = pstrdup(cypher_statement); } else { session_info_cypher_statement = NULL; } /* switch back to the original context */ MemoryContextSwitchTo(oldctx); session_info_pid = getpid(); session_info_prepared = true; } /* * Helper function to return the value of session_info_cypher_statement or NULL * if the value isn't set. The value returned is a copy, so please free it when * done. */ char *get_session_info_graph_name(void) { if (is_session_info_prepared() && session_info_graph_name != NULL) { return pstrdup(session_info_graph_name); } return NULL; } /* * Helper function to return the value of session_info_cypher_statement or NULL * if the value isn't set. The value returned is a copy, so please free it when * done. */ char *get_session_info_cypher_statement(void) { if (is_session_info_prepared() && session_info_cypher_statement != NULL) { return pstrdup(session_info_cypher_statement); } return NULL; } /* function to return the state of the session info data */ bool is_session_info_prepared(void) { /* is the session info prepared AND is the pid the same pid */ if (session_info_prepared == true && session_info_pid == getpid()) { return true; } return false; } /* function to clean and reset the session info back to default values */ void reset_session_info(void) { /* if the session info is prepared, free the strings */ if (session_info_prepared == true) { if (session_info_graph_name != NULL) { pfree(session_info_graph_name); } if (session_info_cypher_statement != NULL) { pfree(session_info_cypher_statement); } } /* reset the session info back to default unused values */ session_info_graph_name = NULL; session_info_cypher_statement = NULL; session_info_prepared = false; session_info_pid = -1; } /* AGE SQL function to prepare session info */ PG_FUNCTION_INFO_V1(age_prepare_cypher); Datum age_prepare_cypher(PG_FUNCTION_ARGS) { char *graph_name_str = NULL; char *cypher_statement_str = NULL; /* both arguments must be non-NULL */ if (PG_ARGISNULL(0) || PG_ARGISNULL(1)) { PG_RETURN_BOOL(false); } graph_name_str = PG_GETARG_CSTRING(0); cypher_statement_str = PG_GETARG_CSTRING(1); /* both strings must be non-NULL */ if (graph_name_str == NULL || cypher_statement_str == NULL) { PG_RETURN_BOOL(false); } set_session_info(graph_name_str, cypher_statement_str); PG_RETURN_BOOL(true); } age-PG16-v1.5.0-rc0/src/backend/utils/adt/age_vle.c000066400000000000000000002525221454606241200214440ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "common/hashfn.h" #include "funcapi.h" #include "utils/lsyscache.h" #include "utils/age_vle.h" #include "catalog/ag_graph.h" #include "nodes/cypher_nodes.h" /* defines */ #define GET_GRAPHID_ARRAY_FROM_CONTAINER(vpc) \ (graphid *) (&vpc->graphid_array_data) #define EDGE_STATE_HTAB_NAME "Edge state " #define EDGE_STATE_HTAB_INITIAL_SIZE 100000 #define EXISTS_HTAB_NAME "known edges" #define EXISTS_HTAB_NAME_INITIAL_SIZE 1000 #define MAXIMUM_NUMBER_OF_CACHED_LOCAL_CONTEXTS 5 /* edge state entry for the edge_state_hashtable */ typedef struct edge_state_entry { graphid edge_id; /* edge id, it is also the hash key */ bool used_in_path; /* like visited but more descriptive */ bool has_been_matched; /* have we checked for a match */ bool matched; /* is it a match */ } edge_state_entry; /* * VLE_path_function is an enum for the path function to use. This currently can * be one of two possibilities - where the target vertex is provided and where * it isn't. */ typedef enum { /* Given a path (u)-[e]-(v) */ VLE_FUNCTION_PATHS_FROM, /* Paths from a (u) without a provided (v) */ VLE_FUNCTION_PATHS_TO, /* Paths to a (v) without a provided (u) */ VLE_FUNCTION_PATHS_BETWEEN, /* Paths between a (u) and a provided (v) */ VLE_FUNCTION_PATHS_ALL, /* All paths without a provided (u) or (v) */ VLE_FUNCTION_NONE } VLE_path_function; /* VLE local context per each unique age_vle function activation */ typedef struct VLE_local_context { char *graph_name; /* name of the graph */ Oid graph_oid; /* graph oid for searching */ GRAPH_global_context *ggctx; /* global graph context pointer */ graphid vsid; /* starting vertex id */ graphid veid; /* ending vertex id */ char *edge_label_name; /* edge label name for match */ agtype *edge_property_constraint; /* edge property constraint as agtype */ int64 lidx; /* lower (start) bound index */ int64 uidx; /* upper (end) bound index */ bool uidx_infinite; /* flag if the upper bound is omitted */ cypher_rel_dir edge_direction; /* the direction of the edge */ HTAB *edge_state_hashtable; /* local state hashtable for our edges */ ListGraphId *dfs_vertex_stack; /* dfs stack for vertices */ ListGraphId *dfs_edge_stack; /* dfs stack for edges */ ListGraphId *dfs_path_stack; /* dfs stack containing the path */ VLE_path_function path_function; /* which path function to use */ GraphIdNode *next_vertex; /* for VLE_FUNCTION_PATHS_TO */ int64 vle_grammar_node_id; /* the unique VLE grammar assigned node id */ bool use_cache; /* are we using VLE_local_context cache */ struct VLE_local_context *next; /* the next chained VLE_local_context */ bool is_dirty; /* is this VLE context reusable */ } VLE_local_context; /* * Container to hold the graphid array that contains one valid path. This * structure will allow it to be easily passed as an AGTYPE pointer. The * structure is set up to contains a BINARY container that can be accessed by * functions that need to process the path. */ typedef struct VLE_path_container { char vl_len_[4]; /* Do not touch this field! */ uint32 header; uint32 graph_oid; int64 graphid_array_size; int64 container_size_bytes; graphid graphid_array_data; } VLE_path_container; /* declarations */ /* global variable to hold the per process global cached VLE_local contexts */ static VLE_local_context *global_vle_local_contexts = NULL; /* agtype functions */ static bool is_an_edge_match(VLE_local_context *vlelctx, edge_entry *ee); /* VLE local context functions */ static VLE_local_context *build_local_vle_context(FunctionCallInfo fcinfo, FuncCallContext *funcctx); static void create_VLE_local_state_hashtable(VLE_local_context *vlelctx); static void free_VLE_local_context(VLE_local_context *vlelctx); /* VLE graph traversal functions */ static edge_state_entry *get_edge_state(VLE_local_context *vlelctx, graphid edge_id); /* graphid data structures */ static void load_initial_dfs_stacks(VLE_local_context *vlelctx); static bool dfs_find_a_path_between(VLE_local_context *vlelctx); static bool dfs_find_a_path_from(VLE_local_context *vlelctx); static bool do_vsid_and_veid_exist(VLE_local_context *vlelctx); static void add_valid_vertex_edges(VLE_local_context *vlelctx, graphid vertex_id); static graphid get_next_vertex(VLE_local_context *vlelctx, edge_entry *ee); static bool is_edge_in_path(VLE_local_context *vlelctx, graphid edge_id); /* VLE path and edge building functions */ static VLE_path_container *create_VLE_path_container(int64 path_size); static VLE_path_container *build_VLE_path_container(VLE_local_context *vlelctx); static VLE_path_container *build_VLE_zero_container(VLE_local_context *vlelctx); static agtype_value *build_path(VLE_path_container *vpc); static agtype_value *build_edge_list(VLE_path_container *vpc); /* VLE_local_context cache management */ static VLE_local_context *get_cached_VLE_local_context(int64 vle_node_id); static void cache_VLE_local_context(VLE_local_context *vlelctx); /* definitions */ /* * Helper function to retrieve a cached VLE local context. It will also purge * off any contexts beyond the maximum defined number of cached contexts. It * will promote (a very basic LRU) the recently fetched context to the head of * the list. If a context doesn't exist or is dirty, it will purge it off and * return NULL. */ static VLE_local_context *get_cached_VLE_local_context(int64 vle_grammar_node_id) { VLE_local_context *vlelctx = global_vle_local_contexts; VLE_local_context *prev = NULL; VLE_local_context *next = NULL; int cache_size = 0; /* while we have contexts to check */ while (vlelctx != NULL) { /* purge any contexts past the maximum cache size */ if (cache_size >= MAXIMUM_NUMBER_OF_CACHED_LOCAL_CONTEXTS) { /* set the next pointer to the context that follows */ next = vlelctx->next; /* * Clear (unlink) the previous context's next pointer, if needed. * Also clear prev as we are at the end of available cached contexts * and just purging them off. Remember, this forms a loop that will * exit the while after purging. */ if (prev != NULL) { prev->next = NULL; prev = NULL; } /* free the context */ free_VLE_local_context(vlelctx); /* set to the next one */ vlelctx = next; /* if there is another context beyond the max, we will re-enter */ continue; } /* if this context belongs to this grammar node */ if (vlelctx->vle_grammar_node_id == vle_grammar_node_id) { /* and isn't dirty */ if (vlelctx->is_dirty == false) { GRAPH_global_context *ggctx = NULL; /* * Get the GRAPH global context associated with this local VLE * context. We need to verify it still exists and that the * pointer is valid. */ ggctx = find_GRAPH_global_context(vlelctx->graph_oid); /* * If ggctx == NULL, vlelctx is bad and vlelctx needs to be * removed. * If ggctx == vlelctx->ggctx, then vlelctx is good. * If ggctx != vlelctx->ggctx, then vlelctx needs to be updated. * In the end, vlelctx->ggctx will be set to ggctx. */ /* * If the returned ggctx isn't valid (there was some update to * the underlying graph), then set it to NULL. This will force a * rebuild of it. */ if (ggctx != NULL && is_ggctx_invalid(ggctx)) { ggctx = NULL; } vlelctx->ggctx = ggctx; /* * If the context is good and isn't at the head of the cache, * promote it to the head. */ if (ggctx != NULL && vlelctx != global_vle_local_contexts) { /* adjust the links to cut out the node */ prev->next = vlelctx->next; /* point the context to the old head of the list */ vlelctx->next = global_vle_local_contexts; /* point the head to this context */ global_vle_local_contexts = vlelctx; } /* if we have a good one, return it. */ if (ggctx != NULL) { return vlelctx; } } /* otherwise, clean and remove it, and return NULL */ /* set the top if necessary and unlink it */ if (prev == NULL) { global_vle_local_contexts = vlelctx->next; } else { prev->next = vlelctx->next; } /* now free it and return NULL */ free_VLE_local_context(vlelctx); return NULL; } /* save the previous context */ prev = vlelctx; /* get the next context */ vlelctx = vlelctx->next; /* keep track of cache size */ cache_size++; } return vlelctx; } static void cache_VLE_local_context(VLE_local_context *vlelctx) { /* if the context passed is null, just return */ if (vlelctx == NULL) { return; } /* if the global link is null, just assign it the local context */ if (global_vle_local_contexts == NULL) { global_vle_local_contexts = vlelctx; return; } /* if there is a global link, add the local context to the top */ vlelctx->next = global_vle_local_contexts; global_vle_local_contexts = vlelctx; } /* helper function to create the local VLE edge state hashtable. */ static void create_VLE_local_state_hashtable(VLE_local_context *vlelctx) { HASHCTL edge_state_ctl; char *graph_name = NULL; char *eshn = NULL; int glen; int elen; /* get the graph name and length */ graph_name = vlelctx->graph_name; glen = strlen(graph_name); /* get the edge state htab name length */ elen = strlen(EDGE_STATE_HTAB_NAME); /* allocate the space and build the name */ eshn = palloc0(elen + glen + 1); /* copy in the name */ strcpy(eshn, EDGE_STATE_HTAB_NAME); /* add in the graph name */ eshn = strncat(eshn, graph_name, glen); /* initialize the edge state hashtable */ MemSet(&edge_state_ctl, 0, sizeof(edge_state_ctl)); edge_state_ctl.keysize = sizeof(int64); edge_state_ctl.entrysize = sizeof(edge_state_entry); edge_state_ctl.hash = tag_hash; vlelctx->edge_state_hashtable = hash_create(eshn, EDGE_STATE_HTAB_INITIAL_SIZE, &edge_state_ctl, HASH_ELEM | HASH_FUNCTION); pfree(eshn); } /* * Helper function to compare the edge constraint (properties we are looking * for in a matching edge) against an edge entry's property. */ static bool is_an_edge_match(VLE_local_context *vlelctx, edge_entry *ee) { agtype *edge_property = NULL; agtype_container *agtc_edge_property = NULL; agtype_container *agtc_edge_property_constraint = NULL; agtype_iterator *constraint_it = NULL; agtype_iterator *property_it = NULL; char *edge_label_name = NULL; int num_edge_property_constraints = 0; int num_edge_properties = 0; /* get the number of conditions from the prototype edge */ num_edge_property_constraints = AGT_ROOT_COUNT(vlelctx->edge_property_constraint); /* * We only care about verifying that we have all of the property conditions. * We don't care about extra unmatched properties. If there aren't any edge * constraints, then the edge passes by default. */ if (vlelctx->edge_label_name == NULL && num_edge_property_constraints == 0) { return true; } /* get the edge label name from the oid */ edge_label_name = get_rel_name(get_edge_entry_label_table_oid(ee)); /* get our edge's properties */ edge_property = DATUM_GET_AGTYPE_P(get_edge_entry_properties(ee)); /* get the containers */ agtc_edge_property_constraint = &vlelctx->edge_property_constraint->root; agtc_edge_property = &edge_property->root; /* get the number of properties in the edge to be matched */ num_edge_properties = AGTYPE_CONTAINER_SIZE(agtc_edge_property); /* * Check to see if the edge_properties object has AT LEAST as many pairs * to compare as the edge_property_constraint object has pairs. If not, it * can't possibly match. */ if (num_edge_property_constraints > num_edge_properties) { return false; } /* * Check for a label constraint. If the label name is NULL, there isn't one. */ if (vlelctx->edge_label_name != NULL && strcmp(vlelctx->edge_label_name, edge_label_name) != 0) { return false; } /* get the iterators */ constraint_it = agtype_iterator_init(agtc_edge_property_constraint); property_it = agtype_iterator_init(agtc_edge_property); /* return the value of deep contains */ return agtype_deep_contains(&property_it, &constraint_it); } /* * Helper function to free up the memory used by the VLE_local_context. * * Currently, the only structures that needs to be freed are the edge state * hashtable and the dfs stacks (vertex, edge, and path). The hashtable is easy * because hash_create packages everything into its own memory context. So, you * only need to do a destroy. */ static void free_VLE_local_context(VLE_local_context *vlelctx) { /* if the VLE context is NULL, do nothing */ if (vlelctx == NULL) { return; } /* free the stored graph name */ if (vlelctx->graph_name != NULL) { pfree(vlelctx->graph_name); vlelctx->graph_name = NULL; } /* free the stored edge label name */ if (vlelctx->edge_label_name != NULL) { pfree(vlelctx->edge_label_name); vlelctx->edge_label_name = NULL; } /* we need to free our state hashtable */ hash_destroy(vlelctx->edge_state_hashtable); vlelctx->edge_state_hashtable = NULL; /* * We need to free the contents of our stacks if the context is not dirty. * These stacks are created in a more volatile memory context. If the * process was interrupted, they will be garbage collected by PG. The only * time we will ever clean them here is if the cache isn't being used. */ if (vlelctx->is_dirty == false) { free_graphid_stack(vlelctx->dfs_vertex_stack); free_graphid_stack(vlelctx->dfs_edge_stack); free_graphid_stack(vlelctx->dfs_path_stack); } /* free the containers */ pfree(vlelctx->dfs_vertex_stack); pfree(vlelctx->dfs_edge_stack); pfree(vlelctx->dfs_path_stack); vlelctx->dfs_vertex_stack = NULL; vlelctx->dfs_edge_stack = NULL; vlelctx->dfs_path_stack = NULL; /* and finally the context itself */ pfree(vlelctx); vlelctx = NULL; } /* helper function to check if our start and end vertices exist */ static bool do_vsid_and_veid_exist(VLE_local_context *vlelctx) { /* if we are only using the starting vertex */ if (vlelctx->path_function == VLE_FUNCTION_PATHS_FROM || vlelctx->path_function == VLE_FUNCTION_PATHS_ALL) { return (get_vertex_entry(vlelctx->ggctx, vlelctx->vsid) != NULL); } /* if we are only using the ending vertex */ if (vlelctx->path_function == VLE_FUNCTION_PATHS_TO) { return (get_vertex_entry(vlelctx->ggctx, vlelctx->veid) != NULL); } /* if we are using both start and end */ return ((get_vertex_entry(vlelctx->ggctx, vlelctx->vsid) != NULL) && (get_vertex_entry(vlelctx->ggctx, vlelctx->veid) != NULL)); } /* load the initial edges into the dfs_edge_stack */ static void load_initial_dfs_stacks(VLE_local_context *vlelctx) { /* * If either the vsid or veid don't exist - don't load anything because * there won't be anything to find. */ if (!do_vsid_and_veid_exist(vlelctx)) { return; } /* add in the edges for the start vertex */ add_valid_vertex_edges(vlelctx, vlelctx->vsid); } /* * Helper function to build the local VLE context. This is also the point * where, if necessary, the global GRAPH contexts are created and freed. */ static VLE_local_context *build_local_vle_context(FunctionCallInfo fcinfo, FuncCallContext *funcctx) { MemoryContext oldctx = NULL; GRAPH_global_context *ggctx = NULL; VLE_local_context *vlelctx = NULL; agtype_value *agtv_temp = NULL; agtype_value *agtv_object = NULL; char *graph_name = NULL; Oid graph_oid = InvalidOid; int64 vle_grammar_node_id = 0; bool use_cache = false; /* * Get the VLE grammar node id, if it exists. Remember, we overload the * age_vle function, for now, for backwards compatibility */ if (PG_NARGS() == 8) { /* get the VLE grammar node id */ agtv_temp = get_agtype_value("age_vle", AG_GET_ARG_AGTYPE_P(7), AGTV_INTEGER, true); vle_grammar_node_id = agtv_temp->val.int_value; /* we are using the VLE local context cache, so set it */ use_cache = true; } /* fetch the VLE_local_context if it is cached */ vlelctx = get_cached_VLE_local_context(vle_grammar_node_id); /* if we are caching VLE_local_contexts and this grammar node is cached */ if (use_cache && vlelctx != NULL) { /* * No context change is needed here as the cache entry is in the proper * context. Additionally, all of the modifications are either pointers * to objects already in the proper context or primitive types that will * be stored in that context since the memory is allocated there. */ /* get and update the start vertex id */ if (PG_ARGISNULL(1) || is_agtype_null(AG_GET_ARG_AGTYPE_P(1))) { vlelctx->vsid = get_graphid(vlelctx->next_vertex); /* increment to the next vertex */ vlelctx->next_vertex = next_GraphIdNode(vlelctx->next_vertex); } else { agtv_temp = get_agtype_value("age_vle", AG_GET_ARG_AGTYPE_P(1), AGTV_VERTEX, false); if (agtv_temp != NULL && agtv_temp->type == AGTV_VERTEX) { agtv_temp = GET_AGTYPE_VALUE_OBJECT_VALUE(agtv_temp, "id"); } else if (agtv_temp == NULL || agtv_temp->type != AGTV_INTEGER) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("start vertex argument must be a vertex or the integer id"))); } vlelctx->vsid = agtv_temp->val.int_value; } /* get and update the end vertex id */ if (PG_ARGISNULL(2) || is_agtype_null(AG_GET_ARG_AGTYPE_P(2))) { vlelctx->veid = 0; } else { agtv_temp = get_agtype_value("age_vle", AG_GET_ARG_AGTYPE_P(2), AGTV_VERTEX, false); if (agtv_temp != NULL && agtv_temp->type == AGTV_VERTEX) { agtv_temp = GET_AGTYPE_VALUE_OBJECT_VALUE(agtv_temp, "id"); } else if (agtv_temp == NULL || agtv_temp->type != AGTV_INTEGER) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("end vertex argument must be a vertex or the integer id"))); } vlelctx->veid = agtv_temp->val.int_value; } vlelctx->is_dirty = true; /* we need the SRF context to add in the edges to the stacks */ oldctx = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); /* load the initial edges into the dfs stacks */ load_initial_dfs_stacks(vlelctx); /* switch back to the original context */ MemoryContextSwitchTo(oldctx); /* return the context */ return vlelctx; } /* we are not using a cached VLE_local_context, so create a new one */ /* * If we are going to cache this context, we need to use TopMemoryContext * to save the contents of the context. Otherwise, we just use a regular * context for SRFs */ if (use_cache == true) { oldctx = MemoryContextSwitchTo(TopMemoryContext); } else { oldctx = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); } /* get the graph name - this is a required argument */ agtv_temp = get_agtype_value("age_vle", AG_GET_ARG_AGTYPE_P(0), AGTV_STRING, true); graph_name = pnstrdup(agtv_temp->val.string.val, agtv_temp->val.string.len); /* get the graph oid */ graph_oid = get_graph_oid(graph_name); /* * Create or retrieve the GRAPH global context for this graph. This function * will also purge off invalidated contexts. */ ggctx = manage_GRAPH_global_contexts(graph_name, graph_oid); /* allocate and initialize local VLE context */ vlelctx = palloc0(sizeof(VLE_local_context)); /* store the cache usage */ vlelctx->use_cache = use_cache; /* set the VLE grammar node id */ vlelctx->vle_grammar_node_id = vle_grammar_node_id; /* set the graph name and id */ vlelctx->graph_name = graph_name; vlelctx->graph_oid = graph_oid; /* set the global context referenced by this local VLE context */ vlelctx->ggctx = ggctx; /* initialize the path function */ vlelctx->path_function = VLE_FUNCTION_PATHS_BETWEEN; /* initialize the next vertex, in this case the first */ vlelctx->next_vertex = peek_stack_head(get_graph_vertices(ggctx)); /* if there isn't one, the graph is empty */ if (vlelctx->next_vertex == NULL) { elog(ERROR, "age_vle: empty graph"); } /* * Get the start vertex id - this is an optional parameter and determines * which path function is used. If a start vertex isn't provided, we * retrieve them incrementally from the vertices list. */ if (PG_ARGISNULL(1) || is_agtype_null(AG_GET_ARG_AGTYPE_P(1))) { /* set _TO */ vlelctx->path_function = VLE_FUNCTION_PATHS_TO; /* get the start vertex */ vlelctx->vsid = get_graphid(vlelctx->next_vertex); /* increment to the next vertex */ vlelctx->next_vertex = next_GraphIdNode(vlelctx->next_vertex); } else { agtv_temp = get_agtype_value("age_vle", AG_GET_ARG_AGTYPE_P(1), AGTV_VERTEX, false); if (agtv_temp != NULL && agtv_temp->type == AGTV_VERTEX) { agtv_temp = GET_AGTYPE_VALUE_OBJECT_VALUE(agtv_temp, "id"); } else if (agtv_temp == NULL || agtv_temp->type != AGTV_INTEGER) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("start vertex argument must be a vertex or the integer id"))); } vlelctx->vsid = agtv_temp->val.int_value; } /* * Get the end vertex id - this is an optional parameter and determines * which path function is used. */ if (PG_ARGISNULL(2) || is_agtype_null(AG_GET_ARG_AGTYPE_P(2))) { if (vlelctx->path_function == VLE_FUNCTION_PATHS_TO) { vlelctx->path_function = VLE_FUNCTION_PATHS_ALL; } else { vlelctx->path_function = VLE_FUNCTION_PATHS_FROM; } vlelctx->veid = 0; } else { agtv_temp = get_agtype_value("age_vle", AG_GET_ARG_AGTYPE_P(2), AGTV_VERTEX, false); if (agtv_temp != NULL && agtv_temp->type == AGTV_VERTEX) { agtv_temp = GET_AGTYPE_VALUE_OBJECT_VALUE(agtv_temp, "id"); } else if (agtv_temp == NULL || agtv_temp->type != AGTV_INTEGER) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("end vertex argument must be a vertex or the integer id"))); } vlelctx->path_function = VLE_FUNCTION_PATHS_BETWEEN; vlelctx->veid = agtv_temp->val.int_value; } /* get the VLE edge prototype */ agtv_temp = get_agtype_value("age_vle", AG_GET_ARG_AGTYPE_P(3), AGTV_EDGE, true); /* get the edge prototype's property conditions */ agtv_object = GET_AGTYPE_VALUE_OBJECT_VALUE(agtv_temp, "properties"); /* store the properties as an agtype */ vlelctx->edge_property_constraint = agtype_value_to_agtype(agtv_object); /* get the edge prototype's label name */ agtv_temp = GET_AGTYPE_VALUE_OBJECT_VALUE(agtv_temp, "label"); if (agtv_temp->type == AGTV_STRING && agtv_temp->val.string.len != 0) { vlelctx->edge_label_name = pnstrdup(agtv_temp->val.string.val, agtv_temp->val.string.len); } else { vlelctx->edge_label_name = NULL; } /* get the left range index */ if (PG_ARGISNULL(4) || is_agtype_null(AG_GET_ARG_AGTYPE_P(4))) { vlelctx->lidx = 1; } else { agtv_temp = get_agtype_value("age_vle", AG_GET_ARG_AGTYPE_P(4), AGTV_INTEGER, true); vlelctx->lidx = agtv_temp->val.int_value; } /* get the right range index. NULL means infinite */ if (PG_ARGISNULL(5) || is_agtype_null(AG_GET_ARG_AGTYPE_P(5))) { vlelctx->uidx_infinite = true; vlelctx->uidx = 0; } else { agtv_temp = get_agtype_value("age_vle", AG_GET_ARG_AGTYPE_P(5), AGTV_INTEGER, true); vlelctx->uidx = agtv_temp->val.int_value; vlelctx->uidx_infinite = false; } /* get edge direction */ agtv_temp = get_agtype_value("age_vle", AG_GET_ARG_AGTYPE_P(6), AGTV_INTEGER, true); vlelctx->edge_direction = agtv_temp->val.int_value; /* create the local state hashtable */ create_VLE_local_state_hashtable(vlelctx); /* initialize the dfs stacks */ vlelctx->dfs_vertex_stack = new_graphid_stack(); vlelctx->dfs_edge_stack = new_graphid_stack(); vlelctx->dfs_path_stack = new_graphid_stack(); /* load in the starting edge(s) */ load_initial_dfs_stacks(vlelctx); /* this is a new one so nothing follows it */ vlelctx->next = NULL; /* mark as dirty */ vlelctx->is_dirty = true; /* if this is to be cached, cache it */ if (use_cache == true) { cache_VLE_local_context(vlelctx); } /* switch back to the original context */ MemoryContextSwitchTo(oldctx); /* return the new context */ return vlelctx; } /* * Helper function to get the specified edge's state. If it does not find it, it * creates and initializes it. */ static edge_state_entry *get_edge_state(VLE_local_context *vlelctx, graphid edge_id) { edge_state_entry *ese = NULL; bool found = false; /* retrieve the edge_state_entry from the edge state hashtable */ ese = (edge_state_entry *)hash_search(vlelctx->edge_state_hashtable, (void *)&edge_id, HASH_ENTER, &found); /* if it isn't found, it needs to be created and initialized */ if (!found) { /* the edge id is also the hash key for resolving collisions */ ese->edge_id = edge_id; ese->used_in_path = false; ese->has_been_matched = false; ese->matched = false; } return ese; } /* * Helper function to get the id of the next vertex to move to. This is to * simplify finding the next vertex due to the VLE edge's direction. */ static graphid get_next_vertex(VLE_local_context *vlelctx, edge_entry *ee) { graphid terminal_vertex_id; /* get the result based on the specified VLE edge direction */ switch (vlelctx->edge_direction) { case CYPHER_REL_DIR_RIGHT: terminal_vertex_id = get_edge_entry_end_vertex_id(ee); break; case CYPHER_REL_DIR_LEFT: terminal_vertex_id = get_edge_entry_start_vertex_id(ee); break; case CYPHER_REL_DIR_NONE: { ListGraphId *vertex_stack = NULL; graphid parent_vertex_id; vertex_stack = vlelctx->dfs_vertex_stack; /* * Get the parent vertex of this edge. When we are looking at edges * as un-directional, where we go to next depends on where we came * from. This is because we can go against an edge. */ parent_vertex_id = PEEK_GRAPHID_STACK(vertex_stack); /* find the terminal vertex */ if (get_edge_entry_start_vertex_id(ee) == parent_vertex_id) { terminal_vertex_id = get_edge_entry_end_vertex_id(ee); } else if (get_edge_entry_end_vertex_id(ee) == parent_vertex_id) { terminal_vertex_id = get_edge_entry_start_vertex_id(ee); } else { elog(ERROR, "get_next_vertex: no parent match"); } break; } default: elog(ERROR, "get_next_vertex: unknown edge direction"); } return terminal_vertex_id; } /* * Helper function to find one path BETWEEN two vertices. * * Note: On the very first entry into this function, the starting vertex's edges * should have already been loaded into the edge stack (this should have been * done by the SRF initialization phase). * * This function will always return on either a valid path found (true) or none * found (false). If one is found, the position (vertex & edge) will still be in * the stack. Each successive invocation within the SRF will then look for the * next available path until there aren't any left. */ static bool dfs_find_a_path_between(VLE_local_context *vlelctx) { ListGraphId *vertex_stack = NULL; ListGraphId *edge_stack = NULL; ListGraphId *path_stack = NULL; graphid end_vertex_id; Assert(vlelctx != NULL); /* for ease of reading */ vertex_stack = vlelctx->dfs_vertex_stack; edge_stack = vlelctx->dfs_edge_stack; path_stack = vlelctx->dfs_path_stack; end_vertex_id = vlelctx->veid; /* while we have edges to process */ while (!(IS_GRAPHID_STACK_EMPTY(edge_stack))) { graphid edge_id; graphid next_vertex_id; edge_state_entry *ese = NULL; edge_entry *ee = NULL; bool found = false; /* get an edge, but leave it on the stack for now */ edge_id = PEEK_GRAPHID_STACK(edge_stack); /* get the edge's state */ ese = get_edge_state(vlelctx, edge_id); /* * If the edge is already in use, it means that the edge is in the path. * So, we need to see if it is the last path entry (we are backing up - * we need to remove the edge from the path stack and reset its state * and from the edge stack as we are done with it) or an interior edge * in the path (loop - we need to remove the edge from the edge stack * and start with the next edge). */ if (ese->used_in_path) { graphid path_edge_id; /* get the edge id on the top of the path stack (last edge) */ path_edge_id = PEEK_GRAPHID_STACK(path_stack); /* * If the ids are the same, we're backing up. So, remove it from the * path stack and reset used_in_path. */ if (edge_id == path_edge_id) { pop_graphid_stack(path_stack); ese->used_in_path = false; } /* now remove it from the edge stack */ pop_graphid_stack(edge_stack); /* * Remove its source vertex, if we are looking at edges as * un-directional. We only maintain the vertex stack when the * edge_direction is CYPHER_REL_DIR_NONE. This is to save space * and time. */ if (vlelctx->edge_direction == CYPHER_REL_DIR_NONE) { pop_graphid_stack(vertex_stack); } /* move to the next edge */ continue; } /* * Mark it and push it on the path stack. There is no need to push it on * the edge stack as it is already there. */ ese->used_in_path = true; push_graphid_stack(path_stack, edge_id); /* now get the edge entry so we can get the next vertex to move to */ ee = get_edge_entry(vlelctx->ggctx, edge_id); next_vertex_id = get_next_vertex(vlelctx, ee); /* * Is this the end of a path that meets our requirements? Is its length * within the bounds specified? */ if (next_vertex_id == end_vertex_id && get_stack_size(path_stack) >= vlelctx->lidx && (vlelctx->uidx_infinite || get_stack_size(path_stack) <= vlelctx->uidx)) { /* we found one */ found = true; } /* * If we have found the end vertex but, we are not within our upper * bounds, we need to back up. We still need to continue traversing * the graph if we aren't within our lower bounds, though. */ if (next_vertex_id == end_vertex_id && !vlelctx->uidx_infinite && get_stack_size(path_stack) > vlelctx->uidx) { continue; } /* add in the edges for the next vertex if we won't exceed the bounds */ if (vlelctx->uidx_infinite || get_stack_size(path_stack) < vlelctx->uidx) { add_valid_vertex_edges(vlelctx, next_vertex_id); } if (found) { return true; } } return false; } /* * Helper function to find one path FROM a start vertex. * * Note: On the very first entry into this function, the starting vertex's edges * should have already been loaded into the edge stack (this should have been * done by the SRF initialization phase). * * This function will always return on either a valid path found (true) or none * found (false). If one is found, the position (vertex & edge) will still be in * the stack. Each successive invocation within the SRF will then look for the * next available path until there aren't any left. */ static bool dfs_find_a_path_from(VLE_local_context *vlelctx) { ListGraphId *vertex_stack = NULL; ListGraphId *edge_stack = NULL; ListGraphId *path_stack = NULL; Assert(vlelctx != NULL); /* for ease of reading */ vertex_stack = vlelctx->dfs_vertex_stack; edge_stack = vlelctx->dfs_edge_stack; path_stack = vlelctx->dfs_path_stack; /* while we have edges to process */ while (!(IS_GRAPHID_STACK_EMPTY(edge_stack))) { graphid edge_id; graphid next_vertex_id; edge_state_entry *ese = NULL; edge_entry *ee = NULL; bool found = false; /* get an edge, but leave it on the stack for now */ edge_id = PEEK_GRAPHID_STACK(edge_stack); /* get the edge's state */ ese = get_edge_state(vlelctx, edge_id); /* * If the edge is already in use, it means that the edge is in the path. * So, we need to see if it is the last path entry (we are backing up - * we need to remove the edge from the path stack and reset its state * and from the edge stack as we are done with it) or an interior edge * in the path (loop - we need to remove the edge from the edge stack * and start with the next edge). */ if (ese->used_in_path) { graphid path_edge_id; /* get the edge id on the top of the path stack (last edge) */ path_edge_id = PEEK_GRAPHID_STACK(path_stack); /* * If the ids are the same, we're backing up. So, remove it from the * path stack and reset used_in_path. */ if (edge_id == path_edge_id) { pop_graphid_stack(path_stack); ese->used_in_path = false; } /* now remove it from the edge stack */ pop_graphid_stack(edge_stack); /* * Remove its source vertex, if we are looking at edges as * un-directional. We only maintain the vertex stack when the * edge_direction is CYPHER_REL_DIR_NONE. This is to save space * and time. */ if (vlelctx->edge_direction == CYPHER_REL_DIR_NONE) { pop_graphid_stack(vertex_stack); } /* move to the next edge */ continue; } /* * Mark it and push it on the path stack. There is no need to push it on * the edge stack as it is already there. */ ese->used_in_path = true; push_graphid_stack(path_stack, edge_id); /* now get the edge entry so we can get the next vertex to move to */ ee = get_edge_entry(vlelctx->ggctx, edge_id); next_vertex_id = get_next_vertex(vlelctx, ee); /* * Is this a path that meets our requirements? Is its length within the * bounds specified? */ if (get_stack_size(path_stack) >= vlelctx->lidx && (vlelctx->uidx_infinite || get_stack_size(path_stack) <= vlelctx->uidx)) { /* we found one */ found = true; } /* add in the edges for the next vertex if we won't exceed the bounds */ if (vlelctx->uidx_infinite || get_stack_size(path_stack) < vlelctx->uidx) { add_valid_vertex_edges(vlelctx, next_vertex_id); } if (found) { return true; } } return false; } /* * Helper routine to quickly check if an edge_id is in the path stack. It is * only meant as a quick check to avoid doing a much more costly hash search for * smaller sized lists. But, it is O(n) so it should only be used for small * path_stacks and where appropriate. */ static bool is_edge_in_path(VLE_local_context *vlelctx, graphid edge_id) { GraphIdNode *edge = NULL; /* start at the top of the stack */ edge = peek_stack_head(vlelctx->dfs_path_stack); /* go through the path stack, return true if we find the edge */ while (edge != NULL) { if (get_graphid(edge) == edge_id) { return true; } /* get the next stack element */ edge = next_GraphIdNode(edge); } /* we didn't find it if we get here */ return false; } /* * Helper function to add in valid vertex edges as part of the dfs path * algorithm. What constitutes a valid edge is the following - * * 1) Edge matches the correct direction specified. * 2) Edge is not currently in the path. * 3) Edge matches minimum edge properties specified. * * Note: The vertex must exist. */ static void add_valid_vertex_edges(VLE_local_context *vlelctx, graphid vertex_id) { ListGraphId *vertex_stack = NULL; ListGraphId *edge_stack = NULL; ListGraphId *edges = NULL; vertex_entry *ve = NULL; GraphIdNode *edge_in = NULL; GraphIdNode *edge_out = NULL; GraphIdNode *edge_self = NULL; /* get the vertex entry */ ve = get_vertex_entry(vlelctx->ggctx, vertex_id); /* there better be a valid vertex */ if (ve == NULL) { elog(ERROR, "add_valid_vertex_edges: no vertex found"); } /* point to stacks */ vertex_stack = vlelctx->dfs_vertex_stack; edge_stack = vlelctx->dfs_edge_stack; /* set to the first edge for each edge list for the specified direction */ if (vlelctx->edge_direction == CYPHER_REL_DIR_RIGHT || vlelctx->edge_direction == CYPHER_REL_DIR_NONE) { edges = get_vertex_entry_edges_out(ve); edge_out = (edges != NULL) ? get_list_head(edges) : NULL; } if (vlelctx->edge_direction == CYPHER_REL_DIR_LEFT || vlelctx->edge_direction == CYPHER_REL_DIR_NONE) { edges = get_vertex_entry_edges_in(ve); edge_in = (edges != NULL) ? get_list_head(edges) : NULL; } /* set to the first selfloop edge */ edges = get_vertex_entry_edges_self(ve); edge_self = (edges != NULL) ? get_list_head(edges) : NULL; /* add in valid vertex edges */ while (edge_out != NULL || edge_in != NULL || edge_self != NULL) { edge_entry *ee = NULL; edge_state_entry *ese = NULL; graphid edge_id; /* get the edge_id from the next available edge*/ if (edge_out != NULL) { edge_id = get_graphid(edge_out); } else if (edge_in != NULL) { edge_id = get_graphid(edge_in); } else { edge_id = get_graphid(edge_self); } /* * This is a fast existence check, relative to the hash search, for when * the path stack is small. If the edge is in the path, we skip it. */ if (get_stack_size(vlelctx->dfs_path_stack) < 10 && is_edge_in_path(vlelctx, edge_id)) { /* set to the next available edge */ if (edge_out != NULL) { edge_out = next_GraphIdNode(edge_out); } else if (edge_in != NULL) { edge_in = next_GraphIdNode(edge_in); } else { edge_self = next_GraphIdNode(edge_self); } continue; } /* get the edge entry */ ee = get_edge_entry(vlelctx->ggctx, edge_id); /* it better exist */ if (ee == NULL) { elog(ERROR, "add_valid_vertex_edges: no edge found"); } /* get its state */ ese = get_edge_state(vlelctx, edge_id); /* * Don't add any edges that we have already seen because they will * cause a loop to form. */ if (!ese->used_in_path) { /* validate the edge if it hasn't been already */ if (!ese->has_been_matched && is_an_edge_match(vlelctx, ee)) { ese->has_been_matched = true; ese->matched = true; } else if (!ese->has_been_matched) { ese->has_been_matched = true; ese->matched = false; } /* if it is a match, add it */ if (ese->has_been_matched && ese->matched) { /* * We need to maintain our source vertex for each edge added * if the edge_direction is CYPHER_REL_DIR_NONE. This is due * to the edges having a fixed direction and the dfs * algorithm working strictly through edges. With an * un-directional VLE edge, you don't know the vertex that * you just came from. So, we need to store it. */ if (vlelctx->edge_direction == CYPHER_REL_DIR_NONE) { push_graphid_stack(vertex_stack, get_vertex_entry_id(ve)); } push_graphid_stack(edge_stack, edge_id); } } /* get the next working edge */ if (edge_out != NULL) { edge_out = next_GraphIdNode(edge_out); } else if (edge_in != NULL) { edge_in = next_GraphIdNode(edge_in); } else { edge_self = next_GraphIdNode(edge_self); } } } /* * Helper function to create the VLE path container that holds the graphid array * containing the found path. The path_size is the total number of vertices and * edges in the path. */ static VLE_path_container *create_VLE_path_container(int64 path_size) { VLE_path_container *vpc = NULL; int container_size_bytes = 0; /* * For the total container size (in graphids int64s) we need to add the * following space (in graphids) to hold each of the following fields - * * One for the VARHDRSZ which is a int32 and a pad of 32. * One for both the header and graph oid (they are both 32 bits). * One for the size of the graphid_array_size. * One for the container_size_bytes. * */ container_size_bytes = sizeof(graphid) * (path_size + 4); /* allocate the container */ vpc = palloc0(container_size_bytes); /* initialize the PG headers */ SET_VARSIZE(vpc, container_size_bytes); /* initialize the container */ vpc->header = AGT_FBINARY | AGT_FBINARY_TYPE_VLE_PATH; vpc->graphid_array_size = path_size; vpc->container_size_bytes = container_size_bytes; /* the graphid array is already zeroed out */ /* all of the other fields are set by the caller */ return vpc; } /* * Helper function to build a VLE_path_container containing the graphid array * from the path_stack. The graphid array will be a complete path (vertices and * edges interleaved) - * * start vertex, first edge,... nth edge, end vertex * * The VLE_path_container is allocated in such a way as to wrap the array and * include the following additional data - * * The header is to allow the graphid array to be encoded as an agtype * container of type BINARY. This way the array doesn't need to be * transformed back and forth. * * The graph oid to facilitate the retrieval of the correct vertex and edge * entries. * * The total number of elements in the array. * * The total size of the container for copying. * * Note: Remember to pfree it when done. Even though it should be destroyed on * exiting the SRF context. */ static VLE_path_container *build_VLE_path_container(VLE_local_context *vlelctx) { ListGraphId *stack = vlelctx->dfs_path_stack; VLE_path_container *vpc = NULL; graphid *graphid_array = NULL; GraphIdNode *edge = NULL; graphid vid = 0; int index = 0; int ssize = 0; if (stack == NULL) { return NULL; } /* allocate the graphid array */ ssize = get_stack_size(stack); /* * Create the container. Note that the path size will always be 2 times the * number of edges plus 1 -> (u)-[e]-(v) */ vpc = create_VLE_path_container((ssize * 2) + 1); /* set the graph_oid */ vpc->graph_oid = vlelctx->graph_oid; /* get the graphid_array from the container */ graphid_array = GET_GRAPHID_ARRAY_FROM_CONTAINER(vpc); /* get and store the start vertex */ vid = vlelctx->vsid; graphid_array[0] = vid; /* get the head of the stack */ edge = peek_stack_head(stack); /* * We need to fill in the array from the back to the front. This is due * to the order of the path stack - last in first out. Remember that the * last entry is a vertex. */ index = vpc->graphid_array_size - 2; /* copy while we have an edge to copy */ while (edge != NULL) { /* 0 is the vsid, we should never get here */ Assert(index > 0); /* store and set to the next edge */ graphid_array[index] = get_graphid(edge); edge = next_GraphIdNode(edge); /* we need to skip over the interior vertices */ index -= 2; } /* now add in the interior vertices, starting from the first edge */ for (index = 1; index < vpc->graphid_array_size - 1; index += 2) { edge_entry *ee = NULL; ee = get_edge_entry(vlelctx->ggctx, graphid_array[index]); vid = (vid == get_edge_entry_start_vertex_id(ee)) ? get_edge_entry_end_vertex_id(ee) : get_edge_entry_start_vertex_id(ee); graphid_array[index+1] = vid; } /* return the container */ return vpc; } /* helper function to build a VPC for just the start vertex */ static VLE_path_container *build_VLE_zero_container(VLE_local_context *vlelctx) { ListGraphId *stack = vlelctx->dfs_path_stack; VLE_path_container *vpc = NULL; graphid *graphid_array = NULL; graphid vid = 0; /* we should have an empty stack */ if (get_stack_size(stack) != 0) { ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION), errmsg("build_VLE_zero_container: stack is not empty"))); } /* * Create the container. Note that the path size will always be 1 as this is * just the starting vertex. */ vpc = create_VLE_path_container(1); /* set the graph_oid */ vpc->graph_oid = vlelctx->graph_oid; /* get the graphid_array from the container */ graphid_array = GET_GRAPHID_ARRAY_FROM_CONTAINER(vpc); /* get and store the start vertex */ vid = vlelctx->vsid; graphid_array[0] = vid; return vpc; } /* * Helper function to build an AGTV_ARRAY of edges from an array of graphids. * * Note: You should free the array when done. Although, it should be freed * when the context is destroyed from the return of the SRF call. */ static agtype_value *build_edge_list(VLE_path_container *vpc) { GRAPH_global_context *ggctx = NULL; agtype_in_state edges_result; Oid graph_oid = InvalidOid; graphid *graphid_array = NULL; int64 graphid_array_size = 0; int index = 0; /* get the graph_oid */ graph_oid = vpc->graph_oid; /* get the GRAPH global context for this graph */ ggctx = find_GRAPH_global_context(graph_oid); /* verify we got a global context */ Assert(ggctx != NULL); /* get the graphid_array and size */ graphid_array = GET_GRAPHID_ARRAY_FROM_CONTAINER(vpc); graphid_array_size = vpc->graphid_array_size; /* initialize our agtype array */ MemSet(&edges_result, 0, sizeof(agtype_in_state)); edges_result.res = push_agtype_value(&edges_result.parse_state, WAGT_BEGIN_ARRAY, NULL); for (index = 1; index < graphid_array_size - 1; index += 2) { char *label_name = NULL; edge_entry *ee = NULL; agtype_value *agtv_edge = NULL; /* get the edge entry from the hashtable */ ee = get_edge_entry(ggctx, graphid_array[index]); /* get the label name from the oid */ label_name = get_rel_name(get_edge_entry_label_table_oid(ee)); /* reconstruct the edge */ agtv_edge = agtype_value_build_edge(get_edge_entry_id(ee), label_name, get_edge_entry_end_vertex_id(ee), get_edge_entry_start_vertex_id(ee), get_edge_entry_properties(ee)); /* push the edge*/ edges_result.res = push_agtype_value(&edges_result.parse_state, WAGT_ELEM, agtv_edge); } /* close our agtype array */ edges_result.res = push_agtype_value(&edges_result.parse_state, WAGT_END_ARRAY, NULL); /* make it an array */ edges_result.res->type = AGTV_ARRAY; /* return it */ return edges_result.res; } /* * Helper function to build an array of type AGTV_PATH from an array of * graphids. * * Note: You should free the array when done. Although, it should be freed * when the context is destroyed from the return of the SRF call. */ static agtype_value *build_path(VLE_path_container *vpc) { GRAPH_global_context *ggctx = NULL; agtype_in_state path_result; Oid graph_oid = InvalidOid; graphid *graphid_array = NULL; int64 graphid_array_size = 0; int index = 0; /* get the graph_oid */ graph_oid = vpc->graph_oid; /* get the GRAPH global context for this graph */ ggctx = find_GRAPH_global_context(graph_oid); /* verify we got a global context */ Assert(ggctx != NULL); /* get the graphid_array and size */ graphid_array = GET_GRAPHID_ARRAY_FROM_CONTAINER(vpc); graphid_array_size = vpc->graphid_array_size; /* initialize our agtype array */ MemSet(&path_result, 0, sizeof(agtype_in_state)); path_result.res = push_agtype_value(&path_result.parse_state, WAGT_BEGIN_ARRAY, NULL); for (index = 0; index < graphid_array_size; index += 2) { char *label_name = NULL; vertex_entry *ve = NULL; edge_entry *ee = NULL; agtype_value *agtv_vertex = NULL; agtype_value *agtv_edge = NULL; /* get the vertex entry from the hashtable */ ve = get_vertex_entry(ggctx, graphid_array[index]); /* get the label name from the oid */ label_name = get_rel_name(get_vertex_entry_label_table_oid(ve)); /* reconstruct the vertex */ agtv_vertex = agtype_value_build_vertex(get_vertex_entry_id(ve), label_name, get_vertex_entry_properties(ve)); /* push the vertex */ path_result.res = push_agtype_value(&path_result.parse_state, WAGT_ELEM, agtv_vertex); /* * Remember that we have more vertices than edges. So, we need to check * if the above vertex was the last vertex in the path. */ if (index + 1 >= graphid_array_size) { break; } /* get the edge entry from the hashtable */ ee = get_edge_entry(ggctx, graphid_array[index+1]); /* get the label name from the oid */ label_name = get_rel_name(get_edge_entry_label_table_oid(ee)); /* reconstruct the edge */ agtv_edge = agtype_value_build_edge(get_edge_entry_id(ee), label_name, get_edge_entry_end_vertex_id(ee), get_edge_entry_start_vertex_id(ee), get_edge_entry_properties(ee)); /* push the edge*/ path_result.res = push_agtype_value(&path_result.parse_state, WAGT_ELEM, agtv_edge); } /* close our agtype array */ path_result.res = push_agtype_value(&path_result.parse_state, WAGT_END_ARRAY, NULL); /* make it a path */ path_result.res->type = AGTV_PATH; /* return the path */ return path_result.res; } /* * All front facing PG and exposed functions below */ /* * PG VLE function that takes the following input and returns a row called edges * of type agtype BINARY VLE_path_container (this is an internal structure for * returning a graphid array of the path. You need to use internal routines to * properly use this data) - * * 0 - agtype REQUIRED (graph name as string) * Note: This is automatically added by transform_FuncCall. * * 1 - agtype OPTIONAL (start vertex as a vertex or the integer id) * Note: Leaving this NULL switches the path algorithm from * VLE_FUNCTION_PATHS_BETWEEN to VLE_FUNCTION_PATHS_TO * 2 - agtype OPTIONAL (end vertex as a vertex or the integer id) * Note: Leaving this NULL switches the path algorithm from * VLE_FUNCTION_PATHS_BETWEEN to VLE_FUNCTION_PATHS_FROM * or - if the starting vertex is NULL - from * VLE_FUNCTION_PATHS_TO to VLE_FUNCTION_PATHS_ALL * 3 - agtype REQUIRED (edge prototype to match as an edge) * Note: Only the label and properties are used. The * rest is ignored. * 4 - agtype OPTIONAL lidx (lower range index) * Note: 0 itself is currently not supported but here it is * equivalent to 1. * A NULL is appropriate here for a 0 lower bound. * 5 - agtype OPTIONAL uidx (upper range index) * Note: A NULL is appropriate here for an infinite upper bound. * 6 - agtype REQUIRED edge direction (enum) as an integer. REQUIRED * * This is a set returning function. This means that the first call sets * up the initial structures and then outputs the first row. After that each * subsequent call generates one row of output data. PG will continue to call * the function until the function tells PG that it doesn't have any more rows * to output. At that point, the function needs to clean up all of its data * structures that are not meant to last between SRFs. */ PG_FUNCTION_INFO_V1(age_vle); Datum age_vle(PG_FUNCTION_ARGS) { FuncCallContext *funcctx; VLE_local_context *vlelctx = NULL; bool found_a_path = false; bool done = false; bool is_zero_bound = false; MemoryContext oldctx; /* Initialization for the first call to the SRF */ if (SRF_IS_FIRSTCALL()) { /* all of these arguments need to be non NULL */ if (PG_ARGISNULL(0) || /* graph name */ PG_ARGISNULL(3) || /* edge prototype */ PG_ARGISNULL(6)) /* direction */ { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("age_vle: invalid NULL argument passed"))); } /* create a function context for cross-call persistence */ funcctx = SRF_FIRSTCALL_INIT(); /* build the local vle context */ vlelctx = build_local_vle_context(fcinfo, funcctx); /* * Point the function call context's user pointer to the local VLE * context just created */ funcctx->user_fctx = vlelctx; /* if we are starting from zero [*0..x] flag it */ if (vlelctx->lidx == 0) { is_zero_bound = true; done = true; } } /* stuff done on every call of the function */ funcctx = SRF_PERCALL_SETUP(); /* restore our VLE local context */ vlelctx = (VLE_local_context *)funcctx->user_fctx; /* * All work done in dfs_find_a_path needs to be done in a context that * survives multiple SRF calls. So switch to the appropriate context. */ oldctx = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); while (done == false) { /* find one path based on specific input */ switch (vlelctx->path_function) { case VLE_FUNCTION_PATHS_TO: case VLE_FUNCTION_PATHS_BETWEEN: found_a_path = dfs_find_a_path_between(vlelctx); break; case VLE_FUNCTION_PATHS_ALL: case VLE_FUNCTION_PATHS_FROM: found_a_path = dfs_find_a_path_from(vlelctx); break; default: found_a_path = false; break; } /* if we found a path, or are done, flag it so we can output the data */ if (found_a_path == true || (found_a_path == false && vlelctx->next_vertex == NULL) || (found_a_path == false && (vlelctx->path_function == VLE_FUNCTION_PATHS_BETWEEN || vlelctx->path_function == VLE_FUNCTION_PATHS_FROM))) { done = true; } /* if we need to fetch a new vertex and rerun the find */ else if ((vlelctx->path_function == VLE_FUNCTION_PATHS_ALL) || (vlelctx->path_function == VLE_FUNCTION_PATHS_TO)) { /* get the next start vertex id */ vlelctx->vsid = get_graphid(vlelctx->next_vertex); /* increment to the next vertex */ vlelctx->next_vertex = next_GraphIdNode(vlelctx->next_vertex); /* load in the starting edge(s) */ load_initial_dfs_stacks(vlelctx); /* if we are starting from zero [*0..x] flag it */ if (vlelctx->lidx == 0) { is_zero_bound = true; done = true; } /* otherwise we need to loop back around */ else { done = false; } } /* we shouldn't get here */ else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("age_vle() invalid path function"))); } } /* switch back to a more volatile context */ MemoryContextSwitchTo(oldctx); /* * If we find a path, we need to convert the path_stack into a list that * the outside world can use. */ if (found_a_path || is_zero_bound) { VLE_path_container *vpc = NULL; /* if this isn't the zero boundary case generate a normal vpc */ if (!is_zero_bound) { /* the path_stack should have something in it if we have a path */ Assert(vlelctx->dfs_path_stack > 0); /* * Build the graphid array into a VLE_path_container from the * path_stack. This will also correct for the path_stack being last * in, first out. */ vpc = build_VLE_path_container(vlelctx); } /* otherwise, this is the zero boundary case [*0..x] */ else { vpc = build_VLE_zero_container(vlelctx); } /* return the result and signal that the function is not yet done */ SRF_RETURN_NEXT(funcctx, PointerGetDatum(vpc)); } /* otherwise, we are done and we need to cleanup and signal done */ else { /* mark local context as clean */ vlelctx->is_dirty = false; /* free the local context, if we aren't caching it */ if (vlelctx->use_cache == false) { free_VLE_local_context(vlelctx); } /* signal that we are done */ SRF_RETURN_DONE(funcctx); } } /* * Exposed helper function to make an agtype AGTV_PATH from a * VLE_path_container. */ agtype *agt_materialize_vle_path(agtype *agt_arg_vpc) { /* convert the agtype_value to agtype and return it */ return agtype_value_to_agtype(agtv_materialize_vle_path(agt_arg_vpc)); } /* * Exposed helper function to make an agtype_value AGTV_PATH from a * VLE_path_container. */ agtype_value *agtv_materialize_vle_path(agtype *agt_arg_vpc) { VLE_path_container *vpc = NULL; agtype_value *agtv_path = NULL; /* the passed argument should not be NULL */ Assert(agt_arg_vpc != NULL); /* * The path must be a binary container and the type of the object in the * container must be an AGT_FBINARY_TYPE_VLE_PATH. */ Assert(AGT_ROOT_IS_BINARY(agt_arg_vpc)); Assert(AGT_ROOT_BINARY_FLAGS(agt_arg_vpc) == AGT_FBINARY_TYPE_VLE_PATH); /* get the container */ vpc = (VLE_path_container *)agt_arg_vpc; /* it should not be null */ Assert(vpc != NULL); /* build the AGTV_PATH from the VLE_path_container */ agtv_path = build_path(vpc); return agtv_path; } /* PG function to match 2 VLE edges */ PG_FUNCTION_INFO_V1(age_match_two_vle_edges); Datum age_match_two_vle_edges(PG_FUNCTION_ARGS) { agtype *agt_arg_vpc = NULL; VLE_path_container *left_path = NULL, *right_path = NULL; graphid *left_array, *right_array; int left_array_size; /* get the VLE_path_container argument */ agt_arg_vpc = AG_GET_ARG_AGTYPE_P(0); if (!AGT_ROOT_IS_BINARY(agt_arg_vpc) || AGT_ROOT_BINARY_FLAGS(agt_arg_vpc) != AGT_FBINARY_TYPE_VLE_PATH) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("argument 1 of age_match_two_vle_edges must be a VLE_Path_Container"))); } /* cast argument as a VLE_Path_Container and extract graphid array */ left_path = (VLE_path_container *)agt_arg_vpc; left_array_size = left_path->graphid_array_size; left_array = GET_GRAPHID_ARRAY_FROM_CONTAINER(left_path); agt_arg_vpc = AG_GET_ARG_AGTYPE_P(1); if (!AGT_ROOT_IS_BINARY(agt_arg_vpc) || AGT_ROOT_BINARY_FLAGS(agt_arg_vpc) != AGT_FBINARY_TYPE_VLE_PATH) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("argument 2 of age_match_two_vle_edges must be a VLE_Path_Container"))); } /* cast argument as a VLE_Path_Container and extract graphid array */ right_path = (VLE_path_container *)agt_arg_vpc; right_array = GET_GRAPHID_ARRAY_FROM_CONTAINER(right_path); if (left_array[left_array_size - 1] != right_array[0]) { PG_RETURN_BOOL(false); } PG_RETURN_BOOL(true); } /* * This function is used when we need to know if the passed in id is at the end * of a path. The first arg is the path, the second is the vertex id to check and * the last is a boolean that says whether to check the start or the end of the * vle path. */ PG_FUNCTION_INFO_V1(age_match_vle_edge_to_id_qual); Datum age_match_vle_edge_to_id_qual(PG_FUNCTION_ARGS) { int nargs = 0; Datum *args = NULL; bool *nulls = NULL; Oid *types = NULL; agtype *agt_arg_vpc = NULL; agtype *edge_id = NULL; agtype *pos_agt = NULL; agtype_value *id, *position; VLE_path_container *vle_path = NULL; graphid *array = NULL; bool vle_is_on_left = false; graphid gid = 0; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); if (nargs != 3) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("age_match_vle_edge_to_id_qual() invalid number of arguments"))); } /* the arguments cannot be NULL */ if (nulls[0] || nulls[1] || nulls[2]) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("age_match_vle_edge_to_id_qual() arguments must be non NULL"))); } /* get the VLE_path_container argument */ agt_arg_vpc = DATUM_GET_AGTYPE_P(args[0]); if (!AGT_ROOT_IS_BINARY(agt_arg_vpc) || AGT_ROOT_BINARY_FLAGS(agt_arg_vpc) != AGT_FBINARY_TYPE_VLE_PATH) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("argument 1 of age_match_vle_edge_to_edge_qual must be a VLE_Path_Container"))); } /* cast argument as a VLE_Path_Container and extract graphid array */ vle_path = (VLE_path_container *)agt_arg_vpc; array = GET_GRAPHID_ARRAY_FROM_CONTAINER(vle_path); if (types[1] == AGTYPEOID) { /* Get the edge id we are checking the end of the list too */ edge_id = AG_GET_ARG_AGTYPE_P(1); if (!AGT_ROOT_IS_SCALAR(edge_id)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("argument 2 of age_match_vle_edge_to_edge_qual must be an integer"))); } id = get_ith_agtype_value_from_container(&edge_id->root, 0); if (id->type != AGTV_INTEGER) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("argument 2 of age_match_vle_edge_to_edge_qual must be an integer"))); } gid = id->val.int_value; } else if (types[1] == GRAPHIDOID) { gid = DATUM_GET_GRAPHID(args[1]); } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("match_vle_terminal_edge() argument 1 must be an agtype integer or a graphid"))); } pos_agt = AG_GET_ARG_AGTYPE_P(2); if (!AGT_ROOT_IS_SCALAR(pos_agt)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("argument 3 of age_match_vle_edge_to_edge_qual must be an integer"))); } position = get_ith_agtype_value_from_container(&pos_agt->root, 0); if (position->type != AGTV_BOOL) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("argument 3 of age_match_vle_edge_to_edge_qual must be an integer"))); } vle_is_on_left = position->val.boolean; if (vle_is_on_left) { int array_size = vle_path->graphid_array_size; /* * Path is like ...[vle_edge]-()-[regular_edge]... Get the graphid of * the vertex at the endof the path and check that it matches the id * that was passed in the second arg. The transform logic is responsible * for making that the start or end id, depending on its direction. */ if (gid != array[array_size - 1]) { PG_RETURN_BOOL(false); } PG_RETURN_BOOL(true); } else { /* * Path is like ...[edge]-()-[vle_edge]... Get the vertex at the start * of the vle edge and check against id. */ if (gid != array[0]) { PG_RETURN_BOOL(false); } PG_RETURN_BOOL(true); } } /* * Exposed helper function to make an agtype_value AGTV_ARRAY of edges from a * VLE_path_container. */ agtype_value *agtv_materialize_vle_edges(agtype *agt_arg_vpc) { VLE_path_container *vpc = NULL; agtype_value *agtv_array = NULL; /* the passed argument should not be NULL */ Assert(agt_arg_vpc != NULL); /* * The path must be a binary container and the type of the object in the * container must be an AGT_FBINARY_TYPE_VLE_PATH. */ Assert(AGT_ROOT_IS_BINARY(agt_arg_vpc)); Assert(AGT_ROOT_BINARY_FLAGS(agt_arg_vpc) == AGT_FBINARY_TYPE_VLE_PATH); /* get the container */ vpc = (VLE_path_container *)agt_arg_vpc; /* it should not be null */ Assert(vpc != NULL); /* build the AGTV_ARRAY of edges from the VLE_path_container */ agtv_array = build_edge_list(vpc); /* convert the agtype_value to agtype and return it */ return agtv_array; } /* PG wrapper function for agtv_materialize_vle_edges */ PG_FUNCTION_INFO_V1(age_materialize_vle_edges); Datum age_materialize_vle_edges(PG_FUNCTION_ARGS) { agtype *agt_arg_vpc = NULL; agtype_value *agtv_array = NULL; /* if we have a NULL VLE_path_container, return NULL */ if (PG_ARGISNULL(0)) { PG_RETURN_NULL(); } /* get the VLE_path_container argument */ agt_arg_vpc = AG_GET_ARG_AGTYPE_P(0); /* if NULL, return NULL */ if (is_agtype_null(agt_arg_vpc)) { PG_RETURN_NULL(); } agtv_array = agtv_materialize_vle_edges(agt_arg_vpc); PG_RETURN_POINTER(agtype_value_to_agtype(agtv_array)); } /* PG wrapper function for age_materialize_vle_path */ PG_FUNCTION_INFO_V1(age_materialize_vle_path); Datum age_materialize_vle_path(PG_FUNCTION_ARGS) { agtype *agt_arg_vpc = NULL; /* if we have a NULL VLE_path_container, return NULL */ if (PG_ARGISNULL(0)) { PG_RETURN_NULL(); } /* get the VLE_path_container argument */ agt_arg_vpc = AG_GET_ARG_AGTYPE_P(0); /* if NULL, return NULL */ if (is_agtype_null(agt_arg_vpc)) { PG_RETURN_NULL(); } PG_RETURN_POINTER(agt_materialize_vle_path(agt_arg_vpc)); } /* * PG function to take a VLE_path_container and return whether the supplied end * vertex (target/veid) matches against the last edge in the VLE path. The VLE * path is encoded in a BINARY container. */ PG_FUNCTION_INFO_V1(age_match_vle_terminal_edge); Datum age_match_vle_terminal_edge(PG_FUNCTION_ARGS) { int nargs = 0; Datum *args = NULL; bool *nulls = NULL; Oid *types = NULL; VLE_path_container *vpc = NULL; agtype *agt_arg_vsid = NULL; agtype *agt_arg_veid = NULL; agtype *agt_arg_path = NULL; agtype_value *agtv_temp = NULL; graphid vsid = 0; graphid veid = 0; graphid *gida = NULL; int gidasize = 0; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); if (nargs != 3) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("age_match_terminal_edge() invalid number of arguments"))); } /* the arguments cannot be NULL */ if (nulls[0] || nulls[1] || nulls[2]) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("match_vle_terminal_edge() arguments cannot be NULL"))); } /* get the vpc */ agt_arg_path = DATUM_GET_AGTYPE_P(args[2]); /* it cannot be NULL */ if (is_agtype_null(agt_arg_path)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("match_vle_terminal_edge() argument 3 cannot be NULL"))); } /* * The vpc (path) must be a binary container and the type of the object in * the container must be an AGT_FBINARY_TYPE_VLE_PATH. */ Assert(AGT_ROOT_IS_BINARY(agt_arg_path)); Assert(AGT_ROOT_BINARY_FLAGS(agt_arg_path) == AGT_FBINARY_TYPE_VLE_PATH); /* get the container */ vpc = (VLE_path_container *)agt_arg_path; /* get the graphid array from the container */ gida = GET_GRAPHID_ARRAY_FROM_CONTAINER(vpc); /* get the gida array size */ gidasize = vpc->graphid_array_size; /* verify the minimum size is 3 or 1 */ Assert(gidasize >= 3 || gidasize == 1); /* get the vsid */ if (types[0] == AGTYPEOID) { agt_arg_vsid = DATUM_GET_AGTYPE_P(args[0]); if (!is_agtype_null(agt_arg_vsid)) { agtv_temp = get_ith_agtype_value_from_container(&agt_arg_vsid->root, 0); Assert(agtv_temp->type == AGTV_INTEGER); vsid = agtv_temp->val.int_value; } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("match_vle_terminal_edge() argument 1 must be non NULL"))); } } else if (types[0] == GRAPHIDOID) { vsid = DATUM_GET_GRAPHID(args[0]); } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("match_vle_terminal_edge() argument 1 must be an agtype integer or a graphid"))); } /* get the veid */ if (types[1] == AGTYPEOID) { agt_arg_veid = DATUM_GET_AGTYPE_P(args[1]); if (!is_agtype_null(agt_arg_veid)) { agtv_temp = get_ith_agtype_value_from_container(&agt_arg_veid->root, 0); Assert(agtv_temp->type == AGTV_INTEGER); veid = agtv_temp->val.int_value; } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("match_vle_terminal_edge() argument 2 must be non NULL"))); } } else if (types[1] == GRAPHIDOID) { veid = DATUM_GET_GRAPHID(args[1]); } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("match_vle_terminal_edge() argument 2 must be an agtype integer or a graphid"))); } /* compare the path beginning or end points */ PG_RETURN_BOOL(gida[0] == vsid && veid == gida[gidasize - 1]); } /* PG helper function to build an agtype (Datum) edge for matching */ PG_FUNCTION_INFO_V1(age_build_vle_match_edge); Datum age_build_vle_match_edge(PG_FUNCTION_ARGS) { agtype_in_state result; agtype_value agtv_zero; agtype_value agtv_nstr; agtype_value *agtv_temp = NULL; /* create an agtype_value integer 0 */ agtv_zero.type = AGTV_INTEGER; agtv_zero.val.int_value = 0; /* create an agtype_value null string */ agtv_nstr.type = AGTV_STRING; agtv_nstr.val.string.len = 0; agtv_nstr.val.string.val = NULL; /* zero the state */ memset(&result, 0, sizeof(agtype_in_state)); /* start the object */ result.res = push_agtype_value(&result.parse_state, WAGT_BEGIN_OBJECT, NULL); /* create dummy graph id */ result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("id")); result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, &agtv_zero); /* process the label */ result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("label")); if (!PG_ARGISNULL(0)) { agtv_temp = get_agtype_value("build_vle_match_edge", AG_GET_ARG_AGTYPE_P(0), AGTV_STRING, true); result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, agtv_temp); } else { result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, &agtv_nstr); } /* create dummy end_id */ result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("end_id")); result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, &agtv_zero); /* create dummy start_id */ result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("start_id")); result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, &agtv_zero); /* process the properties */ result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("properties")); if (!PG_ARGISNULL(1)) { agtype *properties = NULL; properties = AG_GET_ARG_AGTYPE_P(1); if (!AGT_ROOT_IS_OBJECT(properties)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("build_vle_match_edge(): properties argument must be an object"))); } add_agtype((Datum)properties, false, &result, AGTYPEOID, false); } else { result.res = push_agtype_value(&result.parse_state, WAGT_BEGIN_OBJECT, NULL); result.res = push_agtype_value(&result.parse_state, WAGT_END_OBJECT, NULL); } result.res = push_agtype_value(&result.parse_state, WAGT_END_OBJECT, NULL); result.res->type = AGTV_EDGE; PG_RETURN_POINTER(agtype_value_to_agtype(result.res)); } /* * This function checks the edges in a MATCH clause to see if they are unique or * not. Filters out all the paths where the edge uniques rules are not met. * Arguments can be a combination of agtype ints and VLE_path_containers. */ PG_FUNCTION_INFO_V1(_ag_enforce_edge_uniqueness); Datum _ag_enforce_edge_uniqueness(PG_FUNCTION_ARGS) { HTAB *exists_hash = NULL; HASHCTL exists_ctl; Datum *args = NULL; bool *nulls = NULL; Oid *types = NULL; int nargs = 0; int i = 0; /* extract our arguments */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* verify the arguments */ for (i = 0; i < nargs; i++) { if (nulls[i]) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("_ag_enforce_edge_uniqueness argument %d must not be NULL", i))); } if (types[i] != AGTYPEOID && types[i] != INT8OID && types[i] != GRAPHIDOID) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("_ag_enforce_edge_uniqueness argument %d must be AGTYPE, INT8, or GRAPHIDOID", i))); } } /* configure the hash table */ MemSet(&exists_ctl, 0, sizeof(exists_ctl)); exists_ctl.keysize = sizeof(int64); exists_ctl.entrysize = sizeof(int64); exists_ctl.hash = tag_hash; /* create exists_hash table */ exists_hash = hash_create(EXISTS_HTAB_NAME, EXISTS_HTAB_NAME_INITIAL_SIZE, &exists_ctl, HASH_ELEM | HASH_FUNCTION); /* insert arguments into hash table */ for (i = 0; i < nargs; i++) { /* if it is an INT8OID or a GRAPHIDOID */ if (types[i] == INT8OID || types[i] == GRAPHIDOID) { graphid edge_id = 0; bool found = false; int64 *value = NULL; edge_id = DatumGetInt64(args[i]); /* insert the edge_id */ value = (int64 *)hash_search(exists_hash, (void *)&edge_id, HASH_ENTER, &found); /* if we found it, we're done, we have a duplicate */ if (found) { hash_destroy(exists_hash); PG_RETURN_BOOL(false); } /* otherwise, add it to the returned bucket */ else { *value = edge_id; } continue; } else if (types[i] == AGTYPEOID) { /* get the argument */ agtype *agt_i = DATUM_GET_AGTYPE_P(args[i]); /* if the argument is an AGTYPE VLE_path_container */ if (AGT_ROOT_IS_BINARY(agt_i) && AGT_ROOT_BINARY_FLAGS(agt_i) == AGT_FBINARY_TYPE_VLE_PATH) { VLE_path_container *vpc = NULL; graphid *graphid_array = NULL; int64 graphid_array_size = 0; int64 j = 0; /* cast to VLE_path_container */ vpc = (VLE_path_container *)agt_i; /* get the graphid array */ graphid_array = GET_GRAPHID_ARRAY_FROM_CONTAINER(vpc); /* get the graphid array size */ graphid_array_size = vpc->graphid_array_size; /* insert all the edges in the vpc, into the hash table */ for (j = 1; j < graphid_array_size - 1; j+=2) { int64 *value = NULL; bool found = false; graphid edge_id = 0; /* get the edge id */ edge_id = graphid_array[j]; /* insert the edge id */ value = (int64 *)hash_search(exists_hash, (void *)&edge_id, HASH_ENTER, &found); /* if we found it, we're done, we have a duplicate */ if (found) { hash_destroy(exists_hash); PG_RETURN_BOOL(false); } /* otherwise, add it to the returned bucket */ else { *value = edge_id; } } } /* if it is a regular AGTYPE scalar */ else if (AGT_ROOT_IS_SCALAR(agt_i)) { agtype_value *agtv_id = NULL; int64 *value = NULL; bool found = false; graphid edge_id = 0; agtv_id = get_ith_agtype_value_from_container(&agt_i->root, 0); if (agtv_id->type != AGTV_INTEGER) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("_ag_enforce_edge_uniqueness parameter %d must resolve to an agtype integer", i))); } edge_id = agtv_id->val.int_value; /* insert the edge_id */ value = (int64 *)hash_search(exists_hash, (void *)&edge_id, HASH_ENTER, &found); /* if we found it, we're done, we have a duplicate */ if (found) { hash_destroy(exists_hash); PG_RETURN_BOOL(false); } /* otherwise, add it to the returned bucket */ else { *value = edge_id; } } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("_ag_enforce_edge_uniqueness invalid parameter type %d", i))); } } /* it is neither a VLE_path_container, AGTYPE, INT8, or a GRAPHIDOID */ else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("_ag_enforce_edge_uniqueness invalid parameter type %d", i))); } } /* if all entries were successfully inserted, we have no duplicates */ hash_destroy(exists_hash); PG_RETURN_BOOL(true); } age-PG16-v1.5.0-rc0/src/backend/utils/adt/agtype.c000066400000000000000000013045251454606241200213350ustar00rootroot00000000000000/* * For PostgreSQL Database Management System: * (formerly known as Postgres, then as Postgres95) * * Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group * * Portions Copyright (c) 1994, The Regents of the University of California * * Permission to use, copy, modify, and distribute this software and its documentation for any purpose, * without fee, and without a written agreement is hereby granted, provided that the above copyright notice * and this paragraph and the following two paragraphs appear in all copies. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA * HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ /* * I/O routines for agtype type * * Portions Copyright (c) 2014-2018, PostgreSQL Global Development Group */ #include "postgres.h" #include "varatt.h" #include #include #include "access/genam.h" #include "access/heapam.h" #include "catalog/namespace.h" #include "catalog/pg_collation_d.h" #include "catalog/pg_operator_d.h" #include "funcapi.h" #include "libpq/pqformat.h" #include "miscadmin.h" #include "parser/parse_coerce.h" #include "utils/builtins.h" #include "utils/float.h" #include "utils/lsyscache.h" #include "utils/snapmgr.h" #include "utils/typcache.h" #include "utils/age_vle.h" #include "utils/agtype_parser.h" #include "utils/ag_float8_supp.h" #include "utils/agtype_raw.h" #include "catalog/ag_graph.h" #include "catalog/ag_label.h" /* State structure for Percentile aggregate functions */ typedef struct PercentileGroupAggState { /* percentile value */ float8 percentile; /* Sort object we're accumulating data in: */ Tuplesortstate *sortstate; /* Number of normal rows inserted into sortstate: */ int64 number_of_rows; /* Have we already done tuplesort_performsort? */ bool sort_done; } PercentileGroupAggState; typedef enum /* type categories for datum_to_agtype */ { AGT_TYPE_NULL, /* null, so we didn't bother to identify */ AGT_TYPE_BOOL, /* boolean (built-in types only) */ AGT_TYPE_INTEGER, /* Cypher Integer type */ AGT_TYPE_FLOAT, /* Cypher Float type */ AGT_TYPE_NUMERIC, /* numeric (ditto) */ AGT_TYPE_DATE, /* we use special formatting for datetimes */ AGT_TYPE_TIMESTAMP, /* we use special formatting for timestamp */ AGT_TYPE_TIMESTAMPTZ, /* ... and timestamptz */ AGT_TYPE_AGTYPE, /* AGTYPE */ AGT_TYPE_JSON, /* JSON */ AGT_TYPE_JSONB, /* JSONB */ AGT_TYPE_ARRAY, /* array */ AGT_TYPE_COMPOSITE, /* composite */ AGT_TYPE_JSONCAST, /* something with an explicit cast to JSON */ AGT_TYPE_VERTEX, AGT_TYPE_OTHER /* all else */ } agt_type_category; static inline Datum agtype_from_cstring(char *str, int len); static inline agtype_value *agtype_value_from_cstring(char *str, int len); size_t check_string_length(size_t len); static void agtype_in_agtype_annotation(void *pstate, char *annotation); static void agtype_in_object_start(void *pstate); static void agtype_in_object_end(void *pstate); static void agtype_in_array_start(void *pstate); static void agtype_in_array_end(void *pstate); static void agtype_in_object_field_start(void *pstate, char *fname, bool isnull); static void agtype_put_escaped_value(StringInfo out, agtype_value *scalar_val); static void escape_agtype(StringInfo buf, const char *str); bool is_decimal_needed(char *numstr); static void agtype_in_scalar(void *pstate, char *token, agtype_token_type tokentype, char *annotation); static void agtype_categorize_type(Oid typoid, agt_type_category *tcategory, Oid *outfuncoid); static void composite_to_agtype(Datum composite, agtype_in_state *result); static void array_dim_to_agtype(agtype_in_state *result, int dim, int ndims, int *dims, Datum *vals, bool *nulls, int *valcount, agt_type_category tcategory, Oid outfuncoid); static void array_to_agtype_internal(Datum array, agtype_in_state *result); static void datum_to_agtype(Datum val, bool is_null, agtype_in_state *result, agt_type_category tcategory, Oid outfuncoid, bool key_scalar); static char *agtype_to_cstring_worker(StringInfo out, agtype_container *in, int estimated_len, bool indent); static text *agtype_value_to_text(agtype_value *scalar_val, bool err_not_scalar); static void add_indent(StringInfo out, bool indent, int level); static void cannot_cast_agtype_value(enum agtype_value_type type, const char *sqltype); static bool agtype_extract_scalar(agtype_container *agtc, agtype_value *res); static agtype_value *execute_array_access_operator(agtype *array, agtype_value *array_value, agtype *array_index); static agtype_value *execute_array_access_operator_internal(agtype *array, agtype_value *array_value, int64 array_index); static agtype_value *execute_map_access_operator(agtype *map, agtype_value* map_value, agtype *key); static agtype_value *execute_map_access_operator_internal(agtype *map, agtype_value *map_value, char *key, int key_len); static Datum agtype_object_field_impl(FunctionCallInfo fcinfo, agtype *agtype_in, char *key, int key_len, bool as_text); static Datum agtype_array_element_impl(FunctionCallInfo fcinfo, agtype *agtype_in, int element, bool as_text); static Datum process_access_operator_result(FunctionCallInfo fcinfo, agtype_value *agtv, bool as_text); /* typecast functions */ static void agtype_typecast_object(agtype_in_state *state, char *annotation); static void agtype_typecast_array(agtype_in_state *state, char *annotation); /* validation functions */ static bool is_object_vertex(agtype_value *agtv); static bool is_object_edge(agtype_value *agtv); static bool is_array_path(agtype_value *agtv); /* graph entity retrieval */ static Datum get_vertex(const char *graph, const char *vertex_label, int64 graphid); static char *get_label_name(const char *graph_name, graphid element_graphid); static float8 get_float_compatible_arg(Datum arg, Oid type, char *funcname, bool *is_null); static Numeric get_numeric_compatible_arg(Datum arg, Oid type, char *funcname, bool *is_null, enum agtype_value_type *ag_type); agtype *get_one_agtype_from_variadic_args(FunctionCallInfo fcinfo, int variadic_offset, int expected_nargs); static int64 get_int64_from_int_datums(Datum d, Oid type, char *funcname, bool *is_agnull); static agtype_iterator *get_next_object_key(agtype_iterator *it, agtype_container *agtc, agtype_value *key); static int extract_variadic_args_min(FunctionCallInfo fcinfo, int variadic_start, bool convert_unknown, Datum **args, Oid **types, bool **nulls, int min_num_args); static agtype_value *agtype_build_map_as_agtype_value(FunctionCallInfo fcinfo); agtype_value *agtype_composite_to_agtype_value_binary(agtype *a); /* global storage of OID for agtype and _agtype */ static Oid g_AGTYPEOID = InvalidOid; static Oid g_AGTYPEARRAYOID = InvalidOid; /* helper function to quickly set, if necessary, and retrieve AGTYPEOID */ Oid get_AGTYPEOID(void) { if (g_AGTYPEOID == InvalidOid) { g_AGTYPEOID = GetSysCacheOid2(TYPENAMENSP, Anum_pg_type_oid, CStringGetDatum("agtype"), ObjectIdGetDatum(ag_catalog_namespace_id())); } return g_AGTYPEOID; } /* helper function to quickly set, if necessary, and retrieve AGTYPEARRAYOID */ Oid get_AGTYPEARRAYOID(void) { if (g_AGTYPEARRAYOID == InvalidOid) { g_AGTYPEARRAYOID = GetSysCacheOid2(TYPENAMENSP,Anum_pg_type_oid, CStringGetDatum("_agtype"), ObjectIdGetDatum(ag_catalog_namespace_id())); } return g_AGTYPEARRAYOID; } /* helper function to clear the AGTYPEOIDs after a drop extension */ void clear_global_Oids_AGTYPE(void) { g_AGTYPEOID = InvalidOid; g_AGTYPEARRAYOID = InvalidOid; } /* fast helper function to test for AGTV_NULL in an agtype */ bool is_agtype_null(agtype *agt_arg) { agtype_container *agtc = &agt_arg->root; if (AGTYPE_CONTAINER_IS_SCALAR(agtc) && AGTE_IS_NULL(agtc->children[0])) { return true; } return false; } /* * graphid_recv - converts external binary format to a graphid. * * Copied from PGs int8recv as a graphid is an int64. */ PG_FUNCTION_INFO_V1(graphid_recv); Datum graphid_recv(PG_FUNCTION_ARGS) { StringInfo buf = (StringInfo) PG_GETARG_POINTER(0); PG_RETURN_INT64(pq_getmsgint64(buf)); } /* * graphid_send - converts a graphid to binary format. * * Copied from PGs int8send as a graphid is an int64. */ PG_FUNCTION_INFO_V1(graphid_send); Datum graphid_send(PG_FUNCTION_ARGS) { int64 arg1 = PG_GETARG_INT64(0); StringInfoData buf; pq_begintypsend(&buf); pq_sendint64(&buf, arg1); PG_RETURN_BYTEA_P(pq_endtypsend(&buf)); } /* * agtype recv function copied from PGs jsonb_recv as agtype is based * off of jsonb * * The type is sent as text in binary mode, so this is almost the same * as the input function, but it's prefixed with a version number so we * can change the binary format sent in future if necessary. For now, * only version 1 is supported. */ PG_FUNCTION_INFO_V1(agtype_recv); Datum agtype_recv(PG_FUNCTION_ARGS) { StringInfo buf = (StringInfo) PG_GETARG_POINTER(0); int version = pq_getmsgint(buf, 1); char *str = NULL; int nbytes = 0; if (version == 1) { str = pq_getmsgtext(buf, buf->len - buf->cursor, &nbytes); } else { elog(ERROR, "unsupported agtype version number %d", version); } return agtype_from_cstring(str, nbytes); } /* * agtype send function copied from PGs jsonb_send as agtype is based * off of jsonb * * Just send agtype as a version number, then a string of text */ PG_FUNCTION_INFO_V1(agtype_send); Datum agtype_send(PG_FUNCTION_ARGS) { agtype *agt = AG_GET_ARG_AGTYPE_P(0); StringInfoData buf; StringInfo agtype_text = makeStringInfo(); int version = 1; (void) agtype_to_cstring(agtype_text, &agt->root, VARSIZE(agt)); pq_begintypsend(&buf); pq_sendint8(&buf, version); pq_sendtext(&buf, agtype_text->data, agtype_text->len); pfree(agtype_text->data); pfree(agtype_text); PG_RETURN_BYTEA_P(pq_endtypsend(&buf)); } PG_FUNCTION_INFO_V1(agtype_in); /* * agtype type input function */ Datum agtype_in(PG_FUNCTION_ARGS) { char *str = PG_GETARG_CSTRING(0); return agtype_from_cstring(str, strlen(str)); } PG_FUNCTION_INFO_V1(agtype_out); /* * agtype type output function */ Datum agtype_out(PG_FUNCTION_ARGS) { agtype *agt = NULL; char *out = NULL; agt = AG_GET_ARG_AGTYPE_P(0); out = agtype_to_cstring(NULL, &agt->root, VARSIZE(agt)); PG_RETURN_CSTRING(out); } /* * agtype_value_from_cstring * * Helper function to turn an agtype string into an agtype_value. * * Uses the agtype parser (with hooks) to construct an agtype. */ static inline agtype_value *agtype_value_from_cstring(char *str, int len) { agtype_lex_context *lex; agtype_in_state state; agtype_sem_action sem; memset(&state, 0, sizeof(state)); memset(&sem, 0, sizeof(sem)); lex = make_agtype_lex_context_cstring_len(str, len, true); sem.semstate = (void *)&state; sem.object_start = agtype_in_object_start; sem.array_start = agtype_in_array_start; sem.object_end = agtype_in_object_end; sem.array_end = agtype_in_array_end; sem.scalar = agtype_in_scalar; sem.object_field_start = agtype_in_object_field_start; /* callback for annotation (typecasts) */ sem.agtype_annotation = agtype_in_agtype_annotation; parse_agtype(lex, &sem); /* after parsing, the item member has the composed agtype structure */ return state.res; } /* * agtype_from_cstring * * Turns agtype string into a Datum of agtype. * * Calls helper function */ static inline Datum agtype_from_cstring(char *str, int len) { agtype_value *agtv = agtype_value_from_cstring(str, len); PG_RETURN_POINTER(agtype_value_to_agtype(agtv)); } size_t check_string_length(size_t len) { if (len > AGTENTRY_OFFLENMASK) { ereport(ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), errmsg("string too long to represent as agtype string"), errdetail("Due to an implementation restriction, agtype strings cannot exceed %d bytes.", AGTENTRY_OFFLENMASK))); } return len; } static void agtype_in_object_start(void *pstate) { agtype_in_state *_state = (agtype_in_state *)pstate; _state->res = push_agtype_value(&_state->parse_state, WAGT_BEGIN_OBJECT, NULL); } static void agtype_in_object_end(void *pstate) { agtype_in_state *_state = (agtype_in_state *)pstate; _state->res = push_agtype_value(&_state->parse_state, WAGT_END_OBJECT, NULL); } static void agtype_in_array_start(void *pstate) { agtype_in_state *_state = (agtype_in_state *)pstate; _state->res = push_agtype_value(&_state->parse_state, WAGT_BEGIN_ARRAY, NULL); } static void agtype_in_array_end(void *pstate) { agtype_in_state *_state = (agtype_in_state *)pstate; _state->res = push_agtype_value(&_state->parse_state, WAGT_END_ARRAY, NULL); } static void agtype_in_object_field_start(void *pstate, char *fname, bool isnull) { agtype_in_state *_state = (agtype_in_state *)pstate; agtype_value v; Assert(fname != NULL); v.type = AGTV_STRING; v.val.string.len = check_string_length(strlen(fname)); v.val.string.val = fname; _state->res = push_agtype_value(&_state->parse_state, WAGT_KEY, &v); } /* main in function to process annotations */ static void agtype_in_agtype_annotation(void *pstate, char *annotation) { agtype_in_state *_state = (agtype_in_state *)pstate; /* verify that our required params are not null */ Assert(pstate != NULL); Assert(annotation != NULL); /* pass to the appropriate typecast routine */ switch (_state->res->type) { case AGTV_OBJECT: agtype_typecast_object(_state, annotation); break; case AGTV_ARRAY: agtype_typecast_array(_state, annotation); break; /* * Maybe we need to eventually move scalar annotations here. However, * we need to think about how an actual scalar value may be incorporated * into another object. Remember, the scalar is copied in on close, before * we would apply the annotation. */ default: ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("unsupported type to annotate"))); break; } } /* function to handle object typecasts */ static void agtype_typecast_object(agtype_in_state *state, char *annotation) { agtype_value *agtv = NULL; agtype_value *last_updated_value = NULL; int len; bool top = true; /* verify that our required params are not null */ Assert(annotation != NULL); Assert(state != NULL); len = strlen(annotation); agtv = state->res; /* * If the parse_state is not NULL, then we are not at the top level * and the following must be valid for a nested object with a typecast * at the end. */ if (state->parse_state != NULL) { top = false; last_updated_value = state->parse_state->last_updated_value; /* make sure there is a value just copied in */ Assert(last_updated_value != NULL); /* and that it is of type object */ Assert(last_updated_value->type == AGTV_OBJECT); } /* check for a cast to a vertex */ if (len == 6 && pg_strncasecmp(annotation, "vertex", len) == 0) { /* verify that the structure conforms to a valid vertex */ if (is_object_vertex(agtv)) { agtv->type = AGTV_VERTEX; /* if it isn't the top, we need to adjust the copied value */ if (!top) last_updated_value->type = AGTV_VERTEX; } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("object is not a vertex"))); } } /* check for a cast to an edge */ else if (len == 4 && pg_strncasecmp(annotation, "edge", len) == 0) { /* verify that the structure conforms to a valid edge */ if (is_object_edge(agtv)) { agtv->type = AGTV_EDGE; /* if it isn't the top, we need to adjust the copied value */ if (!top) last_updated_value->type = AGTV_EDGE; } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("object is not a edge"))); } } /* otherwise this isn't a supported typecast */ else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid annotation value for object"))); } } /* function to handle array typecasts */ static void agtype_typecast_array(agtype_in_state *state, char *annotation) { agtype_value *agtv = NULL; agtype_value *last_updated_value = NULL; int len; bool top = true; /* verify that our required params are not null */ Assert(annotation != NULL); Assert(state != NULL); len = strlen(annotation); agtv = state->res; /* * If the parse_state is not NULL, then we are not at the top level * and the following must be valid for a nested array with a typecast * at the end. */ if (state->parse_state != NULL) { top = false; last_updated_value = state->parse_state->last_updated_value; /* make sure there is a value just copied in */ Assert(last_updated_value != NULL); /* and that it is of type object */ Assert(last_updated_value->type == AGTV_ARRAY); } /* check for a cast to a path */ if (len == 4 && pg_strncasecmp(annotation, "path", len) == 0) { /* verify that the array conforms to a valid path */ if (is_array_path(agtv)) { agtv->type = AGTV_PATH; /* if it isn't the top, we need to adjust the copied value */ if (!top) last_updated_value->type = AGTV_PATH; } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("array is not a valid path"))); } } /* otherwise this isn't a supported typecast */ else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid annotation value for object"))); } } /* helper function to check if an object fits a vertex */ static bool is_object_vertex(agtype_value *agtv) { bool has_id = false; bool has_label = false; bool has_properties = false; int i; /* we require a valid object */ Assert(agtv != NULL); Assert(agtv->type == AGTV_OBJECT); /* we need 3 pairs for a vertex */ if (agtv->val.object.num_pairs != 3) { return false; } /* iterate through all pairs */ for (i = 0; i < agtv->val.object.num_pairs; i++) { agtype_value *key = &agtv->val.object.pairs[i].key; agtype_value *value = &agtv->val.object.pairs[i].value; char *key_val = key->val.string.val; int key_len = key->val.string.len; Assert(key->type == AGTV_STRING); /* check for an id of type integer */ if (key_len == 2 && pg_strncasecmp(key_val, "id", key_len) == 0 && value->type == AGTV_INTEGER) { has_id = true; } /* check for a label of type string */ else if (key_len == 5 && pg_strncasecmp(key_val, "label", key_len) == 0 && value->type == AGTV_STRING) { has_label = true; } /* check for properties of type object */ else if (key_len == 10 && pg_strncasecmp(key_val, "properties", key_len) == 0 && value->type == AGTV_OBJECT) { has_properties = true; } /* if it gets to this point, it can't be a vertex */ else { return false; } } return (has_id && has_label && has_properties); } /* helper function to check if an object fits an edge */ static bool is_object_edge(agtype_value *agtv) { bool has_id = false; bool has_label = false; bool has_properties = false; bool has_start_id = false; bool has_end_id = false; int i; /* we require a valid object */ Assert(agtv != NULL); Assert(agtv->type == AGTV_OBJECT); /* we need 5 pairs for an edge */ if (agtv->val.object.num_pairs != 5) { return false; } /* iterate through the pairs */ for (i = 0; i < agtv->val.object.num_pairs; i++) { agtype_value *key = &agtv->val.object.pairs[i].key; agtype_value *value = &agtv->val.object.pairs[i].value; char *key_val = key->val.string.val; int key_len = key->val.string.len; Assert(key->type == AGTV_STRING); /* check for an id of type integer */ if (key_len == 2 && pg_strncasecmp(key_val, "id", key_len) == 0 && value->type == AGTV_INTEGER) { has_id = true; } /* check for a label of type string */ else if (key_len == 5 && pg_strncasecmp(key_val, "label", key_len) == 0 && value->type == AGTV_STRING) { has_label = true; } /* check for properties of type object */ else if (key_len == 10 && pg_strncasecmp(key_val, "properties", key_len) == 0 && value->type == AGTV_OBJECT) { has_properties = true; } /* check for a start_id of type integer */ else if (key_len == 8 && pg_strncasecmp(key_val, "start_id", key_len) == 0 && value->type == AGTV_INTEGER) { has_start_id = true; } /* check for an end_id of type integer */ else if (key_len == 6 && pg_strncasecmp(key_val, "end_id", key_len) == 0 && value->type == AGTV_INTEGER) { has_end_id = true; } /* if it gets to this point, it can't be an edge */ else { return false; } } return (has_id && has_label && has_properties && has_start_id && has_end_id); } /* helper function to check if an array fits a path */ static bool is_array_path(agtype_value *agtv) { agtype_value *element = NULL; int i; /* we require a valid array */ Assert(agtv != NULL); Assert(agtv->type == AGTV_ARRAY); /* the array needs to have an odd number of elements */ if (agtv->val.array.num_elems < 1 || (agtv->val.array.num_elems - 1) % 2 != 0) return false; /* iterate through all elements */ for (i = 0; (i + 1) < agtv->val.array.num_elems; i+=2) { element = &agtv->val.array.elems[i]; if (element->type != AGTV_VERTEX) return false; element = &agtv->val.array.elems[i+1]; if (element->type != AGTV_EDGE) return false; } /* check the last element */ element = &agtv->val.array.elems[i]; if (element->type != AGTV_VERTEX) return false; return true; } static void agtype_put_escaped_value(StringInfo out, agtype_value *scalar_val) { char *numstr; switch (scalar_val->type) { case AGTV_NULL: appendBinaryStringInfo(out, "null", 4); break; case AGTV_STRING: escape_agtype(out, pnstrdup(scalar_val->val.string.val, scalar_val->val.string.len)); break; case AGTV_NUMERIC: appendStringInfoString( out, DatumGetCString(DirectFunctionCall1( numeric_out, PointerGetDatum(scalar_val->val.numeric)))); appendBinaryStringInfo(out, "::numeric", 9); break; case AGTV_INTEGER: appendStringInfoString( out, DatumGetCString(DirectFunctionCall1( int8out, Int64GetDatum(scalar_val->val.int_value)))); break; case AGTV_FLOAT: numstr = DatumGetCString(DirectFunctionCall1( float8out, Float8GetDatum(scalar_val->val.float_value))); appendStringInfoString(out, numstr); if (is_decimal_needed(numstr)) appendBinaryStringInfo(out, ".0", 2); break; case AGTV_BOOL: if (scalar_val->val.boolean) appendBinaryStringInfo(out, "true", 4); else appendBinaryStringInfo(out, "false", 5); break; case AGTV_VERTEX: { agtype *prop; scalar_val->type = AGTV_OBJECT; prop = agtype_value_to_agtype(scalar_val); agtype_to_cstring_worker(out, &prop->root, prop->vl_len_, false); appendBinaryStringInfo(out, "::vertex", 8); break; } case AGTV_EDGE: { agtype *prop; scalar_val->type = AGTV_OBJECT; prop = agtype_value_to_agtype(scalar_val); agtype_to_cstring_worker(out, &prop->root, prop->vl_len_, false); appendBinaryStringInfo(out, "::edge", 6); break; } case AGTV_PATH: { agtype *prop; scalar_val->type = AGTV_ARRAY; prop = agtype_value_to_agtype(scalar_val); agtype_to_cstring_worker(out, &prop->root, prop->vl_len_, false); appendBinaryStringInfo(out, "::path", 6); break; } default: elog(ERROR, "unknown agtype scalar type"); } } /* * Produce an agtype string literal, properly escaping characters in the text. */ static void escape_agtype(StringInfo buf, const char *str) { const char *p; appendStringInfoCharMacro(buf, '"'); for (p = str; *p; p++) { switch (*p) { case '\b': appendStringInfoString(buf, "\\b"); break; case '\f': appendStringInfoString(buf, "\\f"); break; case '\n': appendStringInfoString(buf, "\\n"); break; case '\r': appendStringInfoString(buf, "\\r"); break; case '\t': appendStringInfoString(buf, "\\t"); break; case '"': appendStringInfoString(buf, "\\\""); break; case '\\': appendStringInfoString(buf, "\\\\"); break; default: if ((unsigned char)*p < ' ') appendStringInfo(buf, "\\u%04x", (int)*p); else appendStringInfoCharMacro(buf, *p); break; } } appendStringInfoCharMacro(buf, '"'); } bool is_decimal_needed(char *numstr) { int i; Assert(numstr); i = (numstr[0] == '-') ? 1 : 0; while (numstr[i] != '\0') { if (numstr[i] < '0' || numstr[i] > '9') return false; i++; } return true; } /* * For agtype we always want the de-escaped value - that's what's in token */ static void agtype_in_scalar(void *pstate, char *token, agtype_token_type tokentype, char *annotation) { agtype_in_state *_state = (agtype_in_state *)pstate; agtype_value v; Datum numd; /* * Process the scalar typecast annotations, if present, but not if the * argument is a null. Typecasting a null is a null. */ if (annotation != NULL && tokentype != AGTYPE_TOKEN_NULL) { int len = strlen(annotation); if (len == 7 && pg_strcasecmp(annotation, "numeric") == 0) tokentype = AGTYPE_TOKEN_NUMERIC; else if (len == 7 && pg_strcasecmp(annotation, "integer") == 0) tokentype = AGTYPE_TOKEN_INTEGER; else if (len == 5 && pg_strcasecmp(annotation, "float") == 0) tokentype = AGTYPE_TOKEN_FLOAT; else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid annotation value for scalar"))); } switch (tokentype) { case AGTYPE_TOKEN_STRING: Assert(token != NULL); v.type = AGTV_STRING; v.val.string.len = check_string_length(strlen(token)); v.val.string.val = token; break; case AGTYPE_TOKEN_INTEGER: Assert(token != NULL); v.type = AGTV_INTEGER; v.val.int_value = pg_strtoint64(token); break; case AGTYPE_TOKEN_FLOAT: Assert(token != NULL); v.type = AGTV_FLOAT; v.val.float_value = float8in_internal(token, NULL, "double precision", token, NULL); break; case AGTYPE_TOKEN_NUMERIC: Assert(token != NULL); v.type = AGTV_NUMERIC; numd = DirectFunctionCall3(numeric_in, CStringGetDatum(token), ObjectIdGetDatum(InvalidOid), Int32GetDatum(-1)); v.val.numeric = DatumGetNumeric(numd); break; case AGTYPE_TOKEN_TRUE: v.type = AGTV_BOOL; v.val.boolean = true; break; case AGTYPE_TOKEN_FALSE: v.type = AGTV_BOOL; v.val.boolean = false; break; case AGTYPE_TOKEN_NULL: v.type = AGTV_NULL; break; default: /* should not be possible */ elog(ERROR, "invalid agtype token type"); break; } if (_state->parse_state == NULL) { /* single scalar */ agtype_value va; va.type = AGTV_ARRAY; va.val.array.raw_scalar = true; va.val.array.num_elems = 1; _state->res = push_agtype_value(&_state->parse_state, WAGT_BEGIN_ARRAY, &va); _state->res = push_agtype_value(&_state->parse_state, WAGT_ELEM, &v); _state->res = push_agtype_value(&_state->parse_state, WAGT_END_ARRAY, NULL); } else { agtype_value *o = &_state->parse_state->cont_val; switch (o->type) { case AGTV_ARRAY: _state->res = push_agtype_value(&_state->parse_state, WAGT_ELEM, &v); break; case AGTV_OBJECT: _state->res = push_agtype_value(&_state->parse_state, WAGT_VALUE, &v); break; default: elog(ERROR, "unexpected parent of nested structure"); } } } /* * agtype_to_cstring * Converts agtype value to a C-string. * * If 'out' argument is non-null, the resulting C-string is stored inside the * StringBuffer. The resulting string is always returned. * * A typical case for passing the StringInfo in rather than NULL is where the * caller wants access to the len attribute without having to call strlen, e.g. * if they are converting it to a text* object. */ char *agtype_to_cstring(StringInfo out, agtype_container *in, int estimated_len) { return agtype_to_cstring_worker(out, in, estimated_len, false); } /* * same thing but with indentation turned on */ char *agtype_to_cstring_indent(StringInfo out, agtype_container *in, int estimated_len) { return agtype_to_cstring_worker(out, in, estimated_len, true); } /* * common worker for above two functions */ static char *agtype_to_cstring_worker(StringInfo out, agtype_container *in, int estimated_len, bool indent) { bool first = true; agtype_iterator *it; agtype_value v; agtype_iterator_token type = WAGT_DONE; int level = 0; bool redo_switch = false; /* If we are indenting, don't add a space after a comma */ int ispaces = indent ? 1 : 2; /* * Don't indent the very first item. This gets set to the indent flag at * the bottom of the loop. */ bool use_indent = false; bool raw_scalar = false; bool last_was_key = false; if (out == NULL) out = makeStringInfo(); enlargeStringInfo(out, (estimated_len >= 0) ? estimated_len : 64); it = agtype_iterator_init(in); while (redo_switch || ((type = agtype_iterator_next(&it, &v, false)) != WAGT_DONE)) { redo_switch = false; switch (type) { case WAGT_BEGIN_ARRAY: if (!first) appendBinaryStringInfo(out, ", ", ispaces); if (!v.val.array.raw_scalar) { add_indent(out, use_indent && !last_was_key, level); appendStringInfoCharMacro(out, '['); } else { raw_scalar = true; } first = true; level++; break; case WAGT_BEGIN_OBJECT: if (!first) appendBinaryStringInfo(out, ", ", ispaces); add_indent(out, use_indent && !last_was_key, level); appendStringInfoCharMacro(out, '{'); first = true; level++; break; case WAGT_KEY: if (!first) appendBinaryStringInfo(out, ", ", ispaces); first = true; add_indent(out, use_indent, level); /* agtype rules guarantee this is a string */ agtype_put_escaped_value(out, &v); appendBinaryStringInfo(out, ": ", 2); type = agtype_iterator_next(&it, &v, false); if (type == WAGT_VALUE) { first = false; agtype_put_escaped_value(out, &v); } else { Assert(type == WAGT_BEGIN_OBJECT || type == WAGT_BEGIN_ARRAY); /* * We need to rerun the current switch() since we need to * output the object which we just got from the iterator * before calling the iterator again. */ redo_switch = true; } break; case WAGT_ELEM: if (!first) appendBinaryStringInfo(out, ", ", ispaces); first = false; if (!raw_scalar) add_indent(out, use_indent, level); agtype_put_escaped_value(out, &v); break; case WAGT_END_ARRAY: level--; if (!raw_scalar) { add_indent(out, use_indent, level); appendStringInfoCharMacro(out, ']'); } first = false; break; case WAGT_END_OBJECT: level--; add_indent(out, use_indent, level); appendStringInfoCharMacro(out, '}'); first = false; break; default: elog(ERROR, "unknown agtype iterator token type"); } use_indent = indent; last_was_key = redo_switch; } Assert(level == 0); return out->data; } /* * Convert agtype_value(scalar) to text */ static text *agtype_value_to_text(agtype_value *scalar_val, bool err_not_scalar) { text *result = NULL; switch (scalar_val->type) { case AGTV_INTEGER: result = cstring_to_text(DatumGetCString(DirectFunctionCall1( int8out, Int64GetDatum(scalar_val->val.int_value)))); break; case AGTV_FLOAT: result = cstring_to_text(DatumGetCString(DirectFunctionCall1( float8out, Float8GetDatum(scalar_val->val.float_value)))); break; case AGTV_STRING: result = cstring_to_text_with_len(scalar_val->val.string.val, scalar_val->val.string.len); break; case AGTV_NUMERIC: result = cstring_to_text(DatumGetCString(DirectFunctionCall1( numeric_out, PointerGetDatum(scalar_val->val.numeric)))); break; case AGTV_BOOL: result = cstring_to_text((scalar_val->val.boolean) ? "true" : "false"); break; case AGTV_NULL: result = NULL; break; default: if (err_not_scalar) { ereport( ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("agtype_value_to_text: unsupported argument agtype %d", scalar_val->type))); } } return result; } static void add_indent(StringInfo out, bool indent, int level) { if (indent) { int i; appendStringInfoCharMacro(out, '\n'); for (i = 0; i < level; i++) appendBinaryStringInfo(out, " ", 4); } } Datum integer_to_agtype(int64 i) { agtype_value agtv; agtype *agt; agtv.type = AGTV_INTEGER; agtv.val.int_value = i; agt = agtype_value_to_agtype(&agtv); return AGTYPE_P_GET_DATUM(agt); } Datum float_to_agtype(float8 f) { agtype_value agtv; agtype *agt; agtv.type = AGTV_FLOAT; agtv.val.float_value = f; agt = agtype_value_to_agtype(&agtv); return AGTYPE_P_GET_DATUM(agt); } /* * s must be a UTF-8 encoded, unescaped, and null-terminated string which is * a valid string for internal storage of agtype. */ Datum string_to_agtype(char *s) { agtype_value agtv; agtype *agt; agtv.type = AGTV_STRING; agtv.val.string.len = check_string_length(strlen(s)); agtv.val.string.val = s; agt = agtype_value_to_agtype(&agtv); return AGTYPE_P_GET_DATUM(agt); } Datum boolean_to_agtype(bool b) { agtype_value agtv; agtype *agt; agtv.type = AGTV_BOOL; agtv.val.boolean = b; agt = agtype_value_to_agtype(&agtv); return AGTYPE_P_GET_DATUM(agt); } /* * Determine how we want to render values of a given type in datum_to_agtype. * * Given the datatype OID, return its agt_type_category, as well as the type's * output function OID. If the returned category is AGT_TYPE_JSONCAST, * we return the OID of the relevant cast function instead. */ static void agtype_categorize_type(Oid typoid, agt_type_category *tcategory, Oid *outfuncoid) { bool typisvarlena; /* Look through any domain */ typoid = getBaseType(typoid); *outfuncoid = InvalidOid; /* * We need to get the output function for everything except date and * timestamp types, booleans, array and composite types, json and jsonb, * and non-builtin types where there's a cast to json. In this last case * we return the oid of the cast function instead. */ switch (typoid) { case BOOLOID: *tcategory = AGT_TYPE_BOOL; break; case INT2OID: case INT4OID: case INT8OID: getTypeOutputInfo(typoid, outfuncoid, &typisvarlena); *tcategory = AGT_TYPE_INTEGER; break; case FLOAT8OID: getTypeOutputInfo(typoid, outfuncoid, &typisvarlena); *tcategory = AGT_TYPE_FLOAT; break; case FLOAT4OID: case NUMERICOID: getTypeOutputInfo(typoid, outfuncoid, &typisvarlena); *tcategory = AGT_TYPE_NUMERIC; break; case DATEOID: *tcategory = AGT_TYPE_DATE; break; case TIMESTAMPOID: *tcategory = AGT_TYPE_TIMESTAMP; break; case TIMESTAMPTZOID: *tcategory = AGT_TYPE_TIMESTAMPTZ; break; case JSONBOID: *tcategory = AGT_TYPE_JSONB; break; case JSONOID: *tcategory = AGT_TYPE_JSON; break; default: /* Check for arrays and composites */ if (typoid == AGTYPEOID) { *tcategory = AGT_TYPE_AGTYPE; } else if (OidIsValid(get_element_type(typoid)) || typoid == ANYARRAYOID || typoid == RECORDARRAYOID) { *tcategory = AGT_TYPE_ARRAY; } else if (type_is_rowtype(typoid)) /* includes RECORDOID */ { *tcategory = AGT_TYPE_COMPOSITE; } else if (typoid == GRAPHIDOID) { getTypeOutputInfo(typoid, outfuncoid, &typisvarlena); *tcategory = AGT_TYPE_INTEGER; } else { /* It's probably the general case ... */ *tcategory = AGT_TYPE_OTHER; /* * but first let's look for a cast to json (note: not to * jsonb) if it's not built-in. */ if (typoid >= FirstNormalObjectId) { Oid castfunc; CoercionPathType ctype; ctype = find_coercion_pathway(JSONOID, typoid, COERCION_EXPLICIT, &castfunc); if (ctype == COERCION_PATH_FUNC && OidIsValid(castfunc)) { *tcategory = AGT_TYPE_JSONCAST; *outfuncoid = castfunc; } else { /* not a cast type, so just get the usual output func */ getTypeOutputInfo(typoid, outfuncoid, &typisvarlena); } } else { /* any other builtin type */ getTypeOutputInfo(typoid, outfuncoid, &typisvarlena); } break; } } } /* * Turn a Datum into agtype, adding it to the result agtype_in_state. * * tcategory and outfuncoid are from a previous call to agtype_categorize_type, * except that if is_null is true then they can be invalid. * * If key_scalar is true, the value is stored as a key, so insist * it's of an acceptable type, and force it to be a AGTV_STRING. */ static void datum_to_agtype(Datum val, bool is_null, agtype_in_state *result, agt_type_category tcategory, Oid outfuncoid, bool key_scalar) { char *outputstr; bool numeric_error; agtype_value agtv; bool scalar_agtype = false; check_stack_depth(); /* Convert val to an agtype_value in agtv (in most cases) */ if (is_null) { Assert(!key_scalar); agtv.type = AGTV_NULL; } else if (key_scalar && (tcategory == AGT_TYPE_ARRAY || tcategory == AGT_TYPE_COMPOSITE || tcategory == AGT_TYPE_JSON || tcategory == AGT_TYPE_JSONB || tcategory == AGT_TYPE_AGTYPE || tcategory == AGT_TYPE_JSONCAST)) { ereport( ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg( "key value must be scalar, not array, composite, or json"))); } else { if (tcategory == AGT_TYPE_JSONCAST) val = OidFunctionCall1(outfuncoid, val); switch (tcategory) { case AGT_TYPE_ARRAY: array_to_agtype_internal(val, result); break; case AGT_TYPE_COMPOSITE: composite_to_agtype(val, result); break; case AGT_TYPE_BOOL: if (key_scalar) { outputstr = DatumGetBool(val) ? "true" : "false"; agtv.type = AGTV_STRING; agtv.val.string.len = strlen(outputstr); agtv.val.string.val = outputstr; } else { agtv.type = AGTV_BOOL; agtv.val.boolean = DatumGetBool(val); } break; case AGT_TYPE_INTEGER: outputstr = OidOutputFunctionCall(outfuncoid, val); if (key_scalar) { agtv.type = AGTV_STRING; agtv.val.string.len = strlen(outputstr); agtv.val.string.val = outputstr; } else { Datum intd; intd = DirectFunctionCall1(int8in, CStringGetDatum(outputstr)); agtv.type = AGTV_INTEGER; agtv.val.int_value = DatumGetInt64(intd); pfree(outputstr); } break; case AGT_TYPE_FLOAT: outputstr = OidOutputFunctionCall(outfuncoid, val); if (key_scalar) { agtv.type = AGTV_STRING; agtv.val.string.len = strlen(outputstr); agtv.val.string.val = outputstr; } else { agtv.type = AGTV_FLOAT; agtv.val.float_value = DatumGetFloat8(val); } break; case AGT_TYPE_NUMERIC: outputstr = OidOutputFunctionCall(outfuncoid, val); if (key_scalar) { /* always quote keys */ agtv.type = AGTV_STRING; agtv.val.string.len = strlen(outputstr); agtv.val.string.val = outputstr; } else { /* * Make it numeric if it's a valid agtype number, otherwise * a string. Invalid numeric output will always have an * 'N' or 'n' in it (I think). */ numeric_error = (strchr(outputstr, 'N') != NULL || strchr(outputstr, 'n') != NULL); if (!numeric_error) { Datum numd; agtv.type = AGTV_NUMERIC; numd = DirectFunctionCall3(numeric_in, CStringGetDatum(outputstr), ObjectIdGetDatum(InvalidOid), Int32GetDatum(-1)); agtv.val.numeric = DatumGetNumeric(numd); pfree(outputstr); } else { agtv.type = AGTV_STRING; agtv.val.string.len = strlen(outputstr); agtv.val.string.val = outputstr; } } break; case AGT_TYPE_DATE: agtv.type = AGTV_STRING; agtv.val.string.val = agtype_encode_date_time(NULL, val, DATEOID); agtv.val.string.len = strlen(agtv.val.string.val); break; case AGT_TYPE_TIMESTAMP: agtv.type = AGTV_STRING; agtv.val.string.val = agtype_encode_date_time(NULL, val, TIMESTAMPOID); agtv.val.string.len = strlen(agtv.val.string.val); break; case AGT_TYPE_TIMESTAMPTZ: agtv.type = AGTV_STRING; agtv.val.string.val = agtype_encode_date_time(NULL, val, TIMESTAMPTZOID); agtv.val.string.len = strlen(agtv.val.string.val); break; case AGT_TYPE_JSONCAST: case AGT_TYPE_JSON: { /* * Parse the json right into the existing result object. * We can handle it as an agtype because agtype is currently an * extension of json. * Unlike AGT_TYPE_JSONB, numbers will be stored as either * an integer or a float, not a numeric. */ agtype_lex_context *lex; agtype_sem_action sem; text *json = DatumGetTextPP(val); lex = make_agtype_lex_context(json, true); memset(&sem, 0, sizeof(sem)); sem.semstate = (void *)result; sem.object_start = agtype_in_object_start; sem.array_start = agtype_in_array_start; sem.object_end = agtype_in_object_end; sem.array_end = agtype_in_array_end; sem.scalar = agtype_in_scalar; sem.object_field_start = agtype_in_object_field_start; parse_agtype(lex, &sem); } break; case AGT_TYPE_AGTYPE: case AGT_TYPE_JSONB: { agtype *jsonb = DATUM_GET_AGTYPE_P(val); agtype_iterator *it; /* * val is actually jsonb datum but we can handle it as an agtype * datum because agtype is currently an extension of jsonb. */ it = agtype_iterator_init(&jsonb->root); if (AGT_ROOT_IS_SCALAR(jsonb)) { agtype_iterator_next(&it, &agtv, true); Assert(agtv.type == AGTV_ARRAY); agtype_iterator_next(&it, &agtv, true); scalar_agtype = true; } else { agtype_iterator_token type; while ((type = agtype_iterator_next(&it, &agtv, false)) != WAGT_DONE) { if (type == WAGT_END_ARRAY || type == WAGT_END_OBJECT || type == WAGT_BEGIN_ARRAY || type == WAGT_BEGIN_OBJECT) { result->res = push_agtype_value(&result->parse_state, type, NULL); } else { result->res = push_agtype_value(&result->parse_state, type, &agtv); } } } } break; default: outputstr = OidOutputFunctionCall(outfuncoid, val); agtv.type = AGTV_STRING; agtv.val.string.len = check_string_length(strlen(outputstr)); agtv.val.string.val = outputstr; break; } } /* Now insert agtv into result, unless we did it recursively */ if (!is_null && !scalar_agtype && tcategory >= AGT_TYPE_AGTYPE && tcategory <= AGT_TYPE_JSONCAST) { /* work has been done recursively */ return; } else if (result->parse_state == NULL) { /* single root scalar */ agtype_value va; va.type = AGTV_ARRAY; va.val.array.raw_scalar = true; va.val.array.num_elems = 1; result->res = push_agtype_value(&result->parse_state, WAGT_BEGIN_ARRAY, &va); result->res = push_agtype_value(&result->parse_state, WAGT_ELEM, &agtv); result->res = push_agtype_value(&result->parse_state, WAGT_END_ARRAY, NULL); } else { agtype_value *o = &result->parse_state->cont_val; switch (o->type) { case AGTV_ARRAY: result->res = push_agtype_value(&result->parse_state, WAGT_ELEM, &agtv); break; case AGTV_OBJECT: result->res = push_agtype_value(&result->parse_state, key_scalar ? WAGT_KEY : WAGT_VALUE, &agtv); break; default: elog(ERROR, "unexpected parent of nested structure"); } } } /* * Process a single dimension of an array. * If it's the innermost dimension, output the values, otherwise call * ourselves recursively to process the next dimension. */ static void array_dim_to_agtype(agtype_in_state *result, int dim, int ndims, int *dims, Datum *vals, bool *nulls, int *valcount, agt_type_category tcategory, Oid outfuncoid) { int i; Assert(dim < ndims); result->res = push_agtype_value(&result->parse_state, WAGT_BEGIN_ARRAY, NULL); for (i = 1; i <= dims[dim]; i++) { if (dim + 1 == ndims) { datum_to_agtype(vals[*valcount], nulls[*valcount], result, tcategory, outfuncoid, false); (*valcount)++; } else { array_dim_to_agtype(result, dim + 1, ndims, dims, vals, nulls, valcount, tcategory, outfuncoid); } } result->res = push_agtype_value(&result->parse_state, WAGT_END_ARRAY, NULL); } /* * Turn an array into agtype. */ static void array_to_agtype_internal(Datum array, agtype_in_state *result) { ArrayType *v = DatumGetArrayTypeP(array); Oid element_type = ARR_ELEMTYPE(v); int *dim; int ndim; int nitems; int count = 0; Datum *elements; bool *nulls; int16 typlen; bool typbyval; char typalign; agt_type_category tcategory; Oid outfuncoid; ndim = ARR_NDIM(v); dim = ARR_DIMS(v); nitems = ArrayGetNItems(ndim, dim); if (nitems <= 0) { result->res = push_agtype_value(&result->parse_state, WAGT_BEGIN_ARRAY, NULL); result->res = push_agtype_value(&result->parse_state, WAGT_END_ARRAY, NULL); return; } get_typlenbyvalalign(element_type, &typlen, &typbyval, &typalign); agtype_categorize_type(element_type, &tcategory, &outfuncoid); deconstruct_array(v, element_type, typlen, typbyval, typalign, &elements, &nulls, &nitems); array_dim_to_agtype(result, 0, ndim, dim, elements, nulls, &count, tcategory, outfuncoid); pfree(elements); pfree(nulls); } /* * Turn a composite / record into agtype. */ static void composite_to_agtype(Datum composite, agtype_in_state *result) { HeapTupleHeader td; Oid tup_type; int32 tup_typmod; TupleDesc tupdesc; HeapTupleData tmptup, *tuple; int i; td = DatumGetHeapTupleHeader(composite); /* Extract rowtype info and find a tupdesc */ tup_type = HeapTupleHeaderGetTypeId(td); tup_typmod = HeapTupleHeaderGetTypMod(td); tupdesc = lookup_rowtype_tupdesc(tup_type, tup_typmod); /* Build a temporary HeapTuple control structure */ tmptup.t_len = HeapTupleHeaderGetDatumLength(td); tmptup.t_data = td; tuple = &tmptup; result->res = push_agtype_value(&result->parse_state, WAGT_BEGIN_OBJECT, NULL); for (i = 0; i < tupdesc->natts; i++) { Datum val; bool isnull; char *attname; agt_type_category tcategory; Oid outfuncoid; agtype_value v; Form_pg_attribute att = TupleDescAttr(tupdesc, i); if (att->attisdropped) continue; attname = NameStr(att->attname); v.type = AGTV_STRING; /* * don't need check_string_length here * - can't exceed maximum name length */ v.val.string.len = strlen(attname); v.val.string.val = attname; result->res = push_agtype_value(&result->parse_state, WAGT_KEY, &v); val = heap_getattr(tuple, i + 1, tupdesc, &isnull); if (isnull) { tcategory = AGT_TYPE_NULL; outfuncoid = InvalidOid; } else { agtype_categorize_type(att->atttypid, &tcategory, &outfuncoid); } datum_to_agtype(val, isnull, result, tcategory, outfuncoid, false); } result->res = push_agtype_value(&result->parse_state, WAGT_END_OBJECT, NULL); ReleaseTupleDesc(tupdesc); } /* * Removes properties with null value from the given agtype object. */ void remove_null_from_agtype_object(agtype_value *object) { agtype_pair *avail; // next available position agtype_pair *ptr; if (object->type != AGTV_OBJECT) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("a map is expected"))); } avail = object->val.object.pairs; ptr = object->val.object.pairs; while (ptr - object->val.object.pairs < object->val.object.num_pairs) { if (ptr->value.type != AGTV_NULL) { if (ptr != avail) { memcpy(avail, ptr, sizeof(agtype_pair)); } avail++; } ptr++; } object->val.object.num_pairs = avail - object->val.object.pairs; } /* * Append agtype text for "val" to "result". * * This is just a thin wrapper around datum_to_agtype. If the same type * will be printed many times, avoid using this; better to do the * agtype_categorize_type lookups only once. */ void add_agtype(Datum val, bool is_null, agtype_in_state *result, Oid val_type, bool key_scalar) { agt_type_category tcategory; Oid outfuncoid; if (val_type == InvalidOid) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("could not determine input data type"))); } if (is_null) { tcategory = AGT_TYPE_NULL; outfuncoid = InvalidOid; } else { agtype_categorize_type(val_type, &tcategory, &outfuncoid); } datum_to_agtype(val, is_null, result, tcategory, outfuncoid, key_scalar); } agtype_value *string_to_agtype_value(char *s) { agtype_value *agtv = palloc0(sizeof(agtype_value)); agtv->type = AGTV_STRING; agtv->val.string.len = check_string_length(strlen(s)); agtv->val.string.val = s; return agtv; } /* helper function to create an agtype_value integer from an integer */ agtype_value *integer_to_agtype_value(int64 int_value) { agtype_value *agtv = palloc0(sizeof(agtype_value)); agtv->type = AGTV_INTEGER; agtv->val.int_value = int_value; return agtv; } PG_FUNCTION_INFO_V1(_agtype_build_path); /* * SQL function agtype_build_path(VARIADIC agtype) */ Datum _agtype_build_path(PG_FUNCTION_ARGS) { agtype_in_state result; Datum *args = NULL; bool *nulls = NULL; Oid *types = NULL; int nargs = 0; int i = 0; bool is_zero_boundary_case = false; /* build argument values to build the object */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); if (nargs < 1) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("paths require at least 1 vertex"))); } /* * If this path is only 1 to 3 elements in length, check to see if the * contained edge is actually a path (made by the VLE). If so, just * materialize the vle path because it already contains the two outside * vertices. */ if (nargs >= 1 && nargs <= 3) { i = 0; for (i = 0; i < nargs; i++) { agtype *agt = NULL; if (nulls[i] || types[i] != AGTYPEOID) { break; } agt = DATUM_GET_AGTYPE_P(args[i]); if (AGT_ROOT_IS_BINARY(agt) && AGT_ROOT_BINARY_FLAGS(agt) == AGT_FBINARY_TYPE_VLE_PATH) { agtype *path = agt_materialize_vle_path(agt); PG_RETURN_POINTER(path); } } } if (nargs % 2 == 0) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("a path is of the form: [vertex, (edge, vertex)*i] where i >= 0"))); } /* initialize the result */ memset(&result, 0, sizeof(agtype_in_state)); /* push in the beginning of the agtype array */ result.res = push_agtype_value(&result.parse_state, WAGT_BEGIN_ARRAY, NULL); /* loop through the path components */ for (i = 0; i < nargs; i++) { agtype *agt = NULL; if (nulls[i]) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("argument %d must not be null", i + 1))); } else if (types[i] != AGTYPEOID) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("argument %d must be an agtype", i + 1))); } /* get the agtype pointer */ agt = DATUM_GET_AGTYPE_P(args[i]); /* is this a VLE path edge */ if (i % 2 == 1 && AGT_ROOT_IS_BINARY(agt) && AGT_ROOT_BINARY_FLAGS(agt) == AGT_FBINARY_TYPE_VLE_PATH) { agtype_value *agtv_path = NULL; int j = 0; /* get the VLE path from the container as an agtype_value */ agtv_path = agtv_materialize_vle_path(agt); /* it better be an AGTV_PATH */ Assert(agtv_path->type == AGTV_PATH); /* * If the VLE path is the zero boundary case, there isn't an edge to * process. Additionally, the start and end vertices are the same. * We need to flag this condition so that we can skip processing the * following vertex. */ if (agtv_path->val.array.num_elems == 1) { is_zero_boundary_case = true; continue; } /* * Add in the interior path - excluding the start and end vertices. * The other iterations of the for loop has handled start and will * handle end. */ for (j = 1; j <= agtv_path->val.array.num_elems - 2; j++) { result.res = push_agtype_value(&result.parse_state, WAGT_ELEM, &agtv_path->val.array.elems[j]); } } else if (i % 2 == 1 && (!AGTE_IS_AGTYPE(agt->root.children[0]) || agt->root.children[1] != AGT_HEADER_EDGE)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("paths consist of alternating vertices and edges"), errhint("argument %d must be an edge", i + 1))); } else if (i % 2 == 0 && (!AGTE_IS_AGTYPE(agt->root.children[0]) || agt->root.children[1] != AGT_HEADER_VERTEX)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("paths consist of alternating vertices and edges"), errhint("argument %d must be an vertex", i + 1))); } /* * This will always add in vertices or edges depending on the loop * iteration. However, when it is a vertex, there is the possibility * that the previous iteration flagged a zero boundary case. We can only * add it if this is not the case. If this is an edge, it is not * possible to be a zero boundary case. */ else if (is_zero_boundary_case == false) { add_agtype(AGTYPE_P_GET_DATUM(agt), false, &result, types[i], false); } /* If we got here, we had a zero boundary case. So, clear it */ else { is_zero_boundary_case = false; } } /* push the end of the array */ result.res = push_agtype_value(&result.parse_state, WAGT_END_ARRAY, NULL); /* set it to a path type */ result.res->type = AGTV_PATH; PG_RETURN_POINTER(agtype_value_to_agtype(result.res)); } Datum make_path(List *path) { ListCell *lc; agtype_in_state result; int i = 1; memset(&result, 0, sizeof(agtype_in_state)); result.res = push_agtype_value(&result.parse_state, WAGT_BEGIN_ARRAY, NULL); if (list_length(path) < 1) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("paths require at least 1 vertex"))); } if (list_length(path) % 2 != 1) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("a path is of the form: [vertex, (edge, vertex)*i] where i >= 0"))); } foreach (lc, path) { agtype *agt= DATUM_GET_AGTYPE_P(PointerGetDatum(lfirst(lc))); agtype_value *elem; elem = get_ith_agtype_value_from_container(&agt->root, 0); if (!agt) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("argument must not be null"))); } else if (i % 2 == 1 && elem->type != AGTV_VERTEX) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("argument %i must be a vertex", i))); } else if (i % 2 == 0 && elem->type != AGTV_EDGE) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("argument %i must be an edge", i))); } add_agtype((Datum)agt, false, &result, AGTYPEOID, false); i++; } result.res = push_agtype_value(&result.parse_state, WAGT_END_ARRAY, NULL); result.res->type = AGTV_PATH; PG_RETURN_POINTER(agtype_value_to_agtype(result.res)); } PG_FUNCTION_INFO_V1(_agtype_build_vertex); /* * SQL function agtype_build_vertex(graphid, cstring, agtype) */ Datum _agtype_build_vertex(PG_FUNCTION_ARGS) { graphid id; char *label; agtype *properties; agtype_build_state *bstate; agtype *rawscalar; agtype *vertex; /* handles null */ if (fcinfo->args[0].isnull) { /* ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("_agtype_build_vertex() graphid cannot be NULL"))); */ PG_RETURN_NULL(); } if (fcinfo->args[1].isnull) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("_agtype_build_vertex() label cannot be NULL"))); } id = AG_GETARG_GRAPHID(0); label = PG_GETARG_CSTRING(1); if (fcinfo->args[2].isnull) { bstate = init_agtype_build_state(0, AGT_FOBJECT); properties = build_agtype(bstate); pfree_agtype_build_state(bstate); } else { properties = AG_GET_ARG_AGTYPE_P(2); if (!AGT_ROOT_IS_OBJECT(properties)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("_agtype_build_vertex() properties argument must be an object"))); } } bstate = init_agtype_build_state(3, AGT_FOBJECT); write_string(bstate, "id"); write_string(bstate, "label"); write_string(bstate, "properties"); write_graphid(bstate, id); write_string(bstate, label); write_container(bstate, properties); vertex = build_agtype(bstate); pfree_agtype_build_state(bstate); bstate = init_agtype_build_state(1, AGT_FARRAY | AGT_FSCALAR); write_extended(bstate, vertex, AGT_HEADER_VERTEX); rawscalar = build_agtype(bstate); pfree_agtype_build_state(bstate); PG_RETURN_POINTER(rawscalar); } Datum make_vertex(Datum id, Datum label, Datum properties) { return DirectFunctionCall3(_agtype_build_vertex, id, label, properties); } PG_FUNCTION_INFO_V1(_agtype_build_edge); /* * SQL function agtype_build_edge(graphid, graphid, graphid, cstring, agtype) */ Datum _agtype_build_edge(PG_FUNCTION_ARGS) { agtype_build_state *bstate; agtype *edge, *rawscalar; graphid id, start_id, end_id; char *label; agtype *properties; /* process graph id */ if (fcinfo->args[0].isnull) { PG_RETURN_NULL(); /* ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("_agtype_build_edge() graphid cannot be NULL"))); */ } id = AG_GETARG_GRAPHID(0); /* process label */ if (fcinfo->args[3].isnull) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("_agtype_build_vertex() label cannot be NULL"))); } label = PG_GETARG_CSTRING(3); /* process end_id */ if (fcinfo->args[2].isnull) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("_agtype_build_edge() endid cannot be NULL"))); } end_id = AG_GETARG_GRAPHID(2); /* process start_id */ if (fcinfo->args[1].isnull) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("_agtype_build_edge() startid cannot be NULL"))); } start_id = AG_GETARG_GRAPHID(1); /* process properties */ /* if the properties object is null, push an empty object */ if (fcinfo->args[4].isnull) { bstate = init_agtype_build_state(0, AGT_FOBJECT); properties = build_agtype(bstate); pfree_agtype_build_state(bstate); } else { properties = AG_GET_ARG_AGTYPE_P(4); if (!AGT_ROOT_IS_OBJECT(properties)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("_agtype_build_edge() properties argument must be an object"))); } } bstate = init_agtype_build_state(5, AGT_FOBJECT); write_string(bstate, "id"); write_string(bstate, "label"); write_string(bstate, "end_id"); write_string(bstate, "start_id"); write_string(bstate, "properties"); write_graphid(bstate, id); write_string(bstate, label); write_graphid(bstate, end_id); write_graphid(bstate, start_id); write_container(bstate, properties); edge = build_agtype(bstate); pfree_agtype_build_state(bstate); bstate = init_agtype_build_state(1, AGT_FARRAY | AGT_FSCALAR); write_extended(bstate, edge, AGT_HEADER_EDGE); rawscalar = build_agtype(bstate); pfree_agtype_build_state(bstate); PG_RETURN_POINTER(rawscalar); } Datum make_edge(Datum id, Datum startid, Datum endid, Datum label, Datum properties) { return DirectFunctionCall5(_agtype_build_edge, id, startid, endid, label, properties); } static agtype_value *agtype_build_map_as_agtype_value(FunctionCallInfo fcinfo) { int nargs; int i; agtype_in_state result; Datum *args; bool *nulls; Oid *types; /* build argument values to build the object */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); if (nargs < 0) { return NULL; } if (nargs % 2 != 0) { ereport( ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("argument list must have been even number of elements"), errhint("The arguments of agtype_build_map() must consist of alternating keys and values."))); } memset(&result, 0, sizeof(agtype_in_state)); result.res = push_agtype_value(&result.parse_state, WAGT_BEGIN_OBJECT, NULL); for (i = 0; i < nargs; i += 2) { /* process key */ if (nulls[i]) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("argument %d: key must not be null", i + 1))); } add_agtype(args[i], false, &result, types[i], true); /* process value */ add_agtype(args[i + 1], nulls[i + 1], &result, types[i + 1], false); } result.res = push_agtype_value(&result.parse_state, WAGT_END_OBJECT, NULL); return result.res; } PG_FUNCTION_INFO_V1(agtype_build_map); /* * SQL function agtype_build_map(variadic "any") */ Datum agtype_build_map(PG_FUNCTION_ARGS) { agtype_value *result = NULL; result = agtype_build_map_as_agtype_value(fcinfo); if (result == NULL) { PG_RETURN_NULL(); } PG_RETURN_POINTER(agtype_value_to_agtype(result)); } PG_FUNCTION_INFO_V1(agtype_build_map_noargs); /* * degenerate case of agtype_build_map where it gets 0 arguments. */ Datum agtype_build_map_noargs(PG_FUNCTION_ARGS) { agtype_in_state result; memset(&result, 0, sizeof(agtype_in_state)); push_agtype_value(&result.parse_state, WAGT_BEGIN_OBJECT, NULL); result.res = push_agtype_value(&result.parse_state, WAGT_END_OBJECT, NULL); PG_RETURN_POINTER(agtype_value_to_agtype(result.res)); } PG_FUNCTION_INFO_V1(agtype_build_map_nonull); /* * Similar to agtype_build_map except null properties are removed. */ Datum agtype_build_map_nonull(PG_FUNCTION_ARGS) { agtype_value *result = NULL; result = agtype_build_map_as_agtype_value(fcinfo); if (result == NULL) { PG_RETURN_NULL(); } remove_null_from_agtype_object(result); PG_RETURN_POINTER(agtype_value_to_agtype(result)); } PG_FUNCTION_INFO_V1(agtype_build_list); /* * SQL function agtype_build_list(variadic "any") */ Datum agtype_build_list(PG_FUNCTION_ARGS) { int nargs; int i; agtype_in_state result; Datum *args; bool *nulls; Oid *types; /*build argument values to build the array */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); if (nargs < 0) PG_RETURN_NULL(); memset(&result, 0, sizeof(agtype_in_state)); result.res = push_agtype_value(&result.parse_state, WAGT_BEGIN_ARRAY, NULL); for (i = 0; i < nargs; i++) add_agtype(args[i], nulls[i], &result, types[i], false); result.res = push_agtype_value(&result.parse_state, WAGT_END_ARRAY, NULL); PG_RETURN_POINTER(agtype_value_to_agtype(result.res)); } PG_FUNCTION_INFO_V1(agtype_build_list_noargs); /* * degenerate case of agtype_build_list where it gets 0 arguments. */ Datum agtype_build_list_noargs(PG_FUNCTION_ARGS) { agtype_in_state result; memset(&result, 0, sizeof(agtype_in_state)); push_agtype_value(&result.parse_state, WAGT_BEGIN_ARRAY, NULL); result.res = push_agtype_value(&result.parse_state, WAGT_END_ARRAY, NULL); PG_RETURN_POINTER(agtype_value_to_agtype(result.res)); } /* * Extract scalar value from raw-scalar pseudo-array agtype. */ static bool agtype_extract_scalar(agtype_container *agtc, agtype_value *res) { agtype_iterator *it; agtype_iterator_token tok PG_USED_FOR_ASSERTS_ONLY; agtype_value tmp; if (!AGTYPE_CONTAINER_IS_ARRAY(agtc) || !AGTYPE_CONTAINER_IS_SCALAR(agtc)) { /* inform caller about actual type of container */ res->type = AGTYPE_CONTAINER_IS_ARRAY(agtc) ? AGTV_ARRAY : AGTV_OBJECT; return false; } /* * A root scalar is stored as an array of one element, so we get the array * and then its first (and only) member. */ it = agtype_iterator_init(agtc); tok = agtype_iterator_next(&it, &tmp, true); Assert(tok == WAGT_BEGIN_ARRAY); Assert(tmp.val.array.num_elems == 1 && tmp.val.array.raw_scalar); tok = agtype_iterator_next(&it, res, true); Assert(tok == WAGT_ELEM); Assert(IS_A_AGTYPE_SCALAR(res)); tok = agtype_iterator_next(&it, &tmp, true); Assert(tok == WAGT_END_ARRAY); tok = agtype_iterator_next(&it, &tmp, true); Assert(tok == WAGT_DONE); return true; } /* * Emit correct, translatable cast error message */ static void cannot_cast_agtype_value(enum agtype_value_type type, const char *sqltype) { static const struct { enum agtype_value_type type; const char *msg; } messages[] = { {AGTV_NULL, gettext_noop("cannot cast agtype null to type %s")}, {AGTV_STRING, gettext_noop("cannot cast agtype string to type %s")}, {AGTV_NUMERIC, gettext_noop("cannot cast agtype numeric to type %s")}, {AGTV_INTEGER, gettext_noop("cannot cast agtype integer to type %s")}, {AGTV_FLOAT, gettext_noop("cannot cast agtype float to type %s")}, {AGTV_BOOL, gettext_noop("cannot cast agtype boolean to type %s")}, {AGTV_ARRAY, gettext_noop("cannot cast agtype array to type %s")}, {AGTV_OBJECT, gettext_noop("cannot cast agtype object to type %s")}, {AGTV_VERTEX, gettext_noop("cannot cast agtype vertex to type %s")}, {AGTV_EDGE, gettext_noop("cannot cast agtype edge to type %s")}, {AGTV_PATH, gettext_noop("cannot cast agtype path to type %s")}, {AGTV_BINARY, gettext_noop("cannot cast agtype array or object to type %s")}}; int i; for (i = 0; i < lengthof(messages); i++) { if (messages[i].type == type) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg(messages[i].msg, sqltype))); } } /* should be unreachable */ elog(ERROR, "unknown agtype type: %d", (int)type); } PG_FUNCTION_INFO_V1(agtype_to_bool); /* * Cast agtype to boolean. From jsonb_bool(). */ Datum agtype_to_bool(PG_FUNCTION_ARGS) { agtype *agtype_in = AG_GET_ARG_AGTYPE_P(0); agtype_value agtv; if (!agtype_extract_scalar(&agtype_in->root, &agtv) || agtv.type != AGTV_BOOL) { cannot_cast_agtype_value(agtv.type, "boolean"); } PG_FREE_IF_COPY(agtype_in, 0); PG_RETURN_BOOL(agtv.val.boolean); } PG_FUNCTION_INFO_V1(agtype_to_int8); /* * Cast agtype to int8. */ Datum agtype_to_int8(PG_FUNCTION_ARGS) { agtype_value agtv; agtype_value *agtv_p = NULL; agtype_value *container = NULL; int64 result = 0x0; agtype *arg_agt = NULL; /* get the agtype equivalence of any convertable input type */ arg_agt = get_one_agtype_from_variadic_args(fcinfo, 0, 1); /* Return null if arg_agt is null. This covers SQL and Agtype NULLS */ if (arg_agt == NULL) { PG_RETURN_NULL(); } if (!agtype_extract_scalar(&arg_agt->root, &agtv) || (agtv.type != AGTV_FLOAT && agtv.type != AGTV_INTEGER && agtv.type != AGTV_NUMERIC && agtv.type != AGTV_STRING && agtv.type != AGTV_BOOL)) { cannot_cast_agtype_value(agtv.type, "int"); } agtv_p = &agtv; /* * If it is an agtype string, we need to convert the string component first. * We need to do this because the string could be any type of value. Fx, * integer, float, boolean, numeric, object, or array. Once converted, we * need to remember scalar values are returned as a scalar array. We only * care about scalar arrays. */ if (agtv_p->type == AGTV_STRING) { agtype_value *temp = NULL; /* * Convert the string to an agtype_value. Remember that a returned * scalar value is returned in a one element array. */ temp = agtype_value_from_cstring(agtv_p->val.string.val, agtv_p->val.string.len); /* this will catch anything that isn't an array and isn't a scalar */ if (temp->type != AGTV_ARRAY || !temp->val.array.raw_scalar) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid agtype string to int8 type: %d", (int)temp->type))); } /* save the top agtype_value */ container = temp; /* get the wrapped agtype_value */ temp = &temp->val.array.elems[0]; /* these we expect */ if (temp->type == AGTV_FLOAT || temp->type == AGTV_INTEGER || temp->type == AGTV_NUMERIC || temp->type == AGTV_BOOL) { agtv_p = temp; } else { elog(ERROR, "unexpected string type: %d in agtype_to_int8", (int)temp->type); } } /* now check the rest */ if (agtv_p->type == AGTV_INTEGER) { result = agtv_p->val.int_value; } else if (agtv_p->type == AGTV_FLOAT) { result = DatumGetInt64(DirectFunctionCall1(dtoi8, Float8GetDatum(agtv_p->val.float_value))); } else if (agtv_p->type == AGTV_NUMERIC) { result = DatumGetInt64(DirectFunctionCall1(numeric_int8, NumericGetDatum(agtv_p->val.numeric))); } else if(agtv_p->type == AGTV_BOOL) { result = (agtv_p->val.boolean) ? 1 : 0; } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid conversion type in agtype_to_int8: %d", (int)agtv_p->type))); } /* free the container, if it was used */ if (container) { pfree(container); } PG_FREE_IF_COPY(arg_agt, 0); PG_RETURN_INT64(result); } PG_FUNCTION_INFO_V1(agtype_to_int4); /* * Cast agtype to int4. */ Datum agtype_to_int4(PG_FUNCTION_ARGS) { agtype_value agtv; agtype_value *agtv_p = NULL; agtype_value *container = NULL; int32 result = 0x0; agtype *arg_agt = NULL; /* get the agtype equivalence of any convertable input type */ arg_agt = get_one_agtype_from_variadic_args(fcinfo, 0, 1); /* Return null if arg_agt is null. This covers SQL and Agtype NULLS */ if (arg_agt == NULL) { PG_RETURN_NULL(); } if (!agtype_extract_scalar(&arg_agt->root, &agtv) || (agtv.type != AGTV_FLOAT && agtv.type != AGTV_INTEGER && agtv.type != AGTV_NUMERIC && agtv.type != AGTV_STRING && agtv.type != AGTV_BOOL)) { cannot_cast_agtype_value(agtv.type, "int"); } agtv_p = &agtv; /* * If it is an agtype string, we need to convert the string component first. * We need to do this because the string could be any type of value. Fx, * integer, float, boolean, numeric, object, or array. Once converted, we * need to remember scalar values are returned as a scalar array. We only * care about scalar arrays. */ if (agtv_p->type == AGTV_STRING) { agtype_value *temp = NULL; /* * Convert the string to an agtype_value. Remember that a returned * scalar value is returned in a one element array. */ temp = agtype_value_from_cstring(agtv_p->val.string.val, agtv_p->val.string.len); /* this will catch anything that isn't an array and isn't a scalar */ if (temp->type != AGTV_ARRAY || !temp->val.array.raw_scalar) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid agtype string to int4 type: %d", (int)temp->type))); } /* save the top agtype_value */ container = temp; /* get the wrapped agtype_value */ temp = &temp->val.array.elems[0]; /* these we expect */ if (temp->type == AGTV_FLOAT || temp->type == AGTV_INTEGER || temp->type == AGTV_NUMERIC || temp->type == AGTV_BOOL) { agtv_p = temp; } else { elog(ERROR, "unexpected string type: %d in agtype_to_int4", (int)temp->type); } } /* now check the rest */ if (agtv_p->type == AGTV_INTEGER) { result = DatumGetInt32(DirectFunctionCall1(int84, Int64GetDatum(agtv_p->val.int_value))); } else if (agtv_p->type == AGTV_FLOAT) { result = DatumGetInt32(DirectFunctionCall1(dtoi4, Float8GetDatum(agtv_p->val.float_value))); } else if (agtv_p->type == AGTV_NUMERIC) { result = DatumGetInt32(DirectFunctionCall1(numeric_int4, NumericGetDatum(agtv_p->val.numeric))); } else if (agtv_p->type == AGTV_BOOL) { result = (agtv_p->val.boolean) ? 1 : 0; } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid conversion type in agtype_to_int4: %d", (int)agtv_p->type))); } /* free the container, if it was used */ if (container) { pfree(container); } PG_FREE_IF_COPY(arg_agt, 0); PG_RETURN_INT32(result); } PG_FUNCTION_INFO_V1(agtype_to_int2); /* * Cast agtype to int2. */ Datum agtype_to_int2(PG_FUNCTION_ARGS) { agtype_value agtv; agtype_value *agtv_p = NULL; agtype_value *container = NULL; int16 result = 0x0; agtype *arg_agt = NULL; /* get the agtype equivalence of any convertable input type */ arg_agt = get_one_agtype_from_variadic_args(fcinfo, 0, 1); /* Return null if arg_agt is null. This covers SQL and Agtype NULLS */ if (arg_agt == NULL) { PG_RETURN_NULL(); } if (!agtype_extract_scalar(&arg_agt->root, &agtv) || (agtv.type != AGTV_FLOAT && agtv.type != AGTV_INTEGER && agtv.type != AGTV_NUMERIC && agtv.type != AGTV_STRING && agtv.type != AGTV_BOOL)) { cannot_cast_agtype_value(agtv.type, "int"); } agtv_p = &agtv; /* * If it is an agtype string, we need to convert the string component first. * We need to do this because the string could be any type of value. Fx, * integer, float, boolean, numeric, object, or array. Once converted, we * need to remember scalar values are returned as a scalar array. We only * care about scalar arrays. */ if (agtv_p->type == AGTV_STRING) { agtype_value *temp = NULL; /* * Convert the string to an agtype_value. Remember that a returned * scalar value is returned in a one element array. */ temp = agtype_value_from_cstring(agtv_p->val.string.val, agtv_p->val.string.len); /* this will catch anything that isn't an array and isn't a scalar */ if (temp->type != AGTV_ARRAY || !temp->val.array.raw_scalar) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid agtype string to int2 type: %d", (int)temp->type))); } /* save the top agtype_value */ container = temp; /* get the wrapped agtype_value */ temp = &temp->val.array.elems[0]; /* these we expect */ if (temp->type == AGTV_FLOAT || temp->type == AGTV_INTEGER || temp->type == AGTV_NUMERIC || temp->type == AGTV_BOOL) { agtv_p = temp; } else { elog(ERROR, "unexpected string type: %d in agtype_to_int2", (int)temp->type); } } /* now check the rest */ if (agtv_p->type == AGTV_INTEGER) { result = DatumGetInt16(DirectFunctionCall1(int82, Int64GetDatum(agtv_p->val.int_value))); } else if (agtv_p->type == AGTV_FLOAT) { result = DatumGetInt16(DirectFunctionCall1(dtoi2, Float8GetDatum(agtv_p->val.float_value))); } else if (agtv_p->type == AGTV_NUMERIC) { result = DatumGetInt16(DirectFunctionCall1(numeric_int2, NumericGetDatum(agtv_p->val.numeric))); } else if (agtv_p->type == AGTV_BOOL) { result = (agtv_p->val.boolean) ? 1 : 0; } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid conversion type in agtype_to_int2: %d", (int)agtv_p->type))); } /* free the container, if it was used */ if (container) { pfree(container); } PG_FREE_IF_COPY(arg_agt, 0); PG_RETURN_INT64(result); } PG_FUNCTION_INFO_V1(agtype_to_float8); /* * Cast agtype to float8. */ Datum agtype_to_float8(PG_FUNCTION_ARGS) { agtype *agtype_in = AG_GET_ARG_AGTYPE_P(0); agtype_value agtv; float8 result; if (!agtype_extract_scalar(&agtype_in->root, &agtv) || (agtv.type != AGTV_FLOAT && agtv.type != AGTV_INTEGER && agtv.type != AGTV_NUMERIC && agtv.type != AGTV_STRING)) { cannot_cast_agtype_value(agtv.type, "float"); } PG_FREE_IF_COPY(agtype_in, 0); if (agtv.type == AGTV_FLOAT) { result = agtv.val.float_value; } else if (agtv.type == AGTV_INTEGER) { /* * Get the string representation of the integer because it could be * too large to fit in a float. Let the float routine determine * what to do with it. */ char *string = DatumGetCString(DirectFunctionCall1(int8out, Int64GetDatum(agtv.val.int_value))); bool is_valid = false; /* turn it into a float */ result = float8in_internal_null(string, NULL, "double precision", string, &is_valid); /* return null if it was not a invalid float */ if (!is_valid) ereport(ERROR, (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), errmsg("cannot cast to float8, integer value out of range"))); } else if (agtv.type == AGTV_NUMERIC) { result = DatumGetFloat8(DirectFunctionCall1(numeric_float8, NumericGetDatum(agtv.val.numeric))); } else if (agtv.type == AGTV_STRING) { result = DatumGetFloat8(DirectFunctionCall1(float8in, CStringGetDatum(agtv.val.string.val))); } else { elog(ERROR, "invalid agtype type: %d", (int)agtv.type); } PG_RETURN_FLOAT8(result); } PG_FUNCTION_INFO_V1(agtype_to_text); /* * Cast agtype to text. */ Datum agtype_to_text(PG_FUNCTION_ARGS) { agtype *arg_agt; agtype_value *arg_value; text *text_value; /* get the agtype equivalence of any convertable input type */ arg_agt = get_one_agtype_from_variadic_args(fcinfo, 0, 1); /* Return null if arg_agt is null. This covers SQL and Agtype NULLS */ if (arg_agt == NULL) PG_RETURN_NULL(); /* check that we have a scalar value */ if (!AGT_ROOT_IS_SCALAR(arg_agt)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("agtype argument must resolve to a scalar value"))); /* get the arg parameter */ arg_value = get_ith_agtype_value_from_container(&arg_agt->root, 0); text_value = agtype_value_to_text(arg_value, true); if (text_value == NULL) { PG_RETURN_NULL(); } PG_RETURN_TEXT_P(text_value); } PG_FUNCTION_INFO_V1(bool_to_agtype); /* * Cast boolean to agtype. */ Datum bool_to_agtype(PG_FUNCTION_ARGS) { return boolean_to_agtype(PG_GETARG_BOOL(0)); } PG_FUNCTION_INFO_V1(float8_to_agtype); /* * Cast float8 to agtype. */ Datum float8_to_agtype(PG_FUNCTION_ARGS) { return float_to_agtype(PG_GETARG_FLOAT8(0)); } PG_FUNCTION_INFO_V1(int8_to_agtype); /* * Cast float8 to agtype. */ Datum int8_to_agtype(PG_FUNCTION_ARGS) { return integer_to_agtype(PG_GETARG_INT64(0)); } PG_FUNCTION_INFO_V1(agtype_to_int4_array); /* * Cast agtype to int4[]. * * TODO: * * We either need to change the function definition in age--x.x.x.sql * to something like agtype[] or we need to make this function work * for "any" type input. Right now it only works for an agtype array but * it takes "any" input. Hence the additional code added to block anything * other than agtype. */ Datum agtype_to_int4_array(PG_FUNCTION_ARGS) { agtype_iterator *agtype_iterator = NULL; agtype *agtype_in = NULL; agtype_value agtv; agtype_iterator_token agtv_token; Datum *array_value; ArrayType *result; Oid arg_type = InvalidOid; int element_size; int i; /* get the input data type */ arg_type = get_fn_expr_argtype(fcinfo->flinfo, 0); /* verify the input is agtype */ if (arg_type != AGTYPEOID) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("argument must resolve to agtype"))); } agtype_in = AG_GET_ARG_AGTYPE_P(0); agtype_iterator = agtype_iterator_init(&agtype_in->root); agtv_token = agtype_iterator_next(&agtype_iterator, &agtv, false); if (agtv.type != AGTV_ARRAY) { cannot_cast_agtype_value(agtv.type, "int4[]"); } element_size = agtv.val.array.num_elems; array_value = (Datum *) palloc(sizeof(Datum) * element_size); i = 0; while ((agtv_token = agtype_iterator_next(&agtype_iterator, &agtv, true)) != WAGT_END_ARRAY) { int32 element_value = 0; if (agtv.type == AGTV_INTEGER) element_value = DatumGetInt32(DirectFunctionCall1(int84, Int64GetDatum(agtv.val.int_value))); else if (agtv.type == AGTV_FLOAT) element_value = DatumGetInt32(DirectFunctionCall1(dtoi4, Float8GetDatum(agtv.val.float_value))); else if (agtv.type == AGTV_NUMERIC) element_value = DatumGetInt32(DirectFunctionCall1(numeric_int4, NumericGetDatum(agtv.val.numeric))); else if (agtv.type == AGTV_STRING) element_value = DatumGetInt32(DirectFunctionCall1(int4in, CStringGetDatum(agtv.val.string.val))); array_value[i++] = element_value; } result = construct_array(array_value, element_size, INT4OID, 4, true, 'i'); PG_RETURN_ARRAYTYPE_P(result); } /* * Helper function for agtype_access_operator map access. * Note: This function expects that a map and a scalar key are being passed. */ static agtype_value *execute_map_access_operator(agtype *map, agtype_value *map_value, agtype *key) { agtype_value *key_value; char *key_str; int key_len = 0; /* get the key from the container */ key_value = get_ith_agtype_value_from_container(&key->root, 0); switch (key_value->type) { case AGTV_NULL: return NULL; case AGTV_INTEGER: ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("AGTV_INTEGER is not a valid key type"))); break; case AGTV_FLOAT: ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("AGTV_FLOAT is not a valid key type"))); break; case AGTV_NUMERIC: ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("AGTV_NUMERIC is not a valid key type"))); break; case AGTV_BOOL: ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("AGTV_BOOL is not a valid key type"))); break; case AGTV_STRING: key_str = key_value->val.string.val; key_len = key_value->val.string.len; break; default: ereport(ERROR, (errmsg("unknown agtype scalar type"))); break; } return execute_map_access_operator_internal(map, map_value, key_str, key_len); } static agtype_value *execute_map_access_operator_internal( agtype *map, agtype_value *map_value, char *key, int key_len) { agtype_value new_key_value; new_key_value.type = AGTV_STRING; new_key_value.val.string.val = key; new_key_value.val.string.len = key_len; /* if we were passed an agtype */ if (map_value == NULL) { map_value = find_agtype_value_from_container(&map->root, AGT_FOBJECT, &new_key_value); } /* if we were passed an agtype_value OBJECT (BINARY) */ else if (map_value != NULL && map_value->type == AGTV_BINARY) { map_value = find_agtype_value_from_container(map_value->val.binary.data, AGT_FOBJECT, &new_key_value); } /* if we were passed an agtype_value OBJECT */ else if (map_value != NULL && map_value->type == AGTV_OBJECT) { map_value = get_agtype_value_object_value(map_value, key, key_len); } /* otherwise, we don't know how to process it */ else { ereport(ERROR, (errmsg("unknown map_value type"))); } /* return the agtype_value */ return map_value; } /* * Helper function for agtype_access_operator array access. * Note: This function expects that an array and a scalar int are being passed. */ static agtype_value *execute_array_access_operator(agtype *array, agtype_value *array_value, agtype *array_index) { agtype_value *array_index_value = NULL; /* unpack the array index value */ array_index_value = get_ith_agtype_value_from_container(&array_index->root, 0); /* if AGTV_NULL return NULL */ if (array_index_value->type == AGTV_NULL) { return NULL; } /* index must be an integer */ if (array_index_value->type != AGTV_INTEGER) { ereport(ERROR, (errmsg("array index must resolve to an integer value"))); } return execute_array_access_operator_internal( array, array_value, array_index_value->val.int_value); } static agtype_value *execute_array_access_operator_internal(agtype *array, agtype_value *array_value, int64 array_index) { agtype_value *array_element_value = NULL; uint32 size = 0; /* get the size of the array, given the type of the input */ if (array_value == NULL) { size = AGT_ROOT_COUNT(array); } else if (array_value->type == AGTV_ARRAY) { size = array_value->val.array.num_elems; } else if (array_value->type == AGTV_BINARY) { size = AGTYPE_CONTAINER_SIZE(array_value->val.binary.data); } else { elog(ERROR, "execute_array_access_operator_internal: unexpected type"); } /* adjust for negative index values */ if (array_index < 0) { array_index = size + array_index; } /* check array bounds */ if ((array_index >= size) || (array_index < 0)) { return NULL; } /* if we were passed an agtype */ if (array_value == NULL) { array_element_value = get_ith_agtype_value_from_container(&array->root, array_index); } /* if we were passed an agtype_value ARRAY (BINARY) */ else if (array_value != NULL && array_value->type == AGTV_BINARY) { array_element_value = get_ith_agtype_value_from_container( array_value->val.binary.data, array_index); } /* if we were passed an agtype_value ARRAY */ else if (array_value != NULL && array_value->type == AGTV_ARRAY) { array_element_value = &array_value->val.array.elems[array_index]; } /* otherwise, we don't know how to process it */ else { ereport(ERROR, (errmsg("unknown array_value type"))); } return array_element_value; } /* * Helper function to do a binary search through an object's key/value pairs, * looking for a specific key. It will return the key or NULL if not found. */ agtype_value *get_agtype_value_object_value(const agtype_value *agtv_object, char *search_key, int search_key_length) { agtype_value *agtv_key = NULL; int current_key_length = 0; int middle = 0; int num_pairs = 0; int left = 0; int right = 0; int result = 0; if (agtv_object == NULL || search_key == NULL || search_key_length <= 0) { return NULL; } /* get the number of object pairs */ num_pairs = agtv_object->val.object.num_pairs; /* do a binary search through the pairs */ right = num_pairs - 1; middle = num_pairs / 2; /* while middle is within the constraints */ while (middle >= left && middle <= right) { /* get the current key length */ agtv_key = &agtv_object->val.object.pairs[middle].key; current_key_length = agtv_key->val.string.len; /* if not the same length, divide the search space and continue */ if (current_key_length != search_key_length) { /* if we need to search in the lower half */ if (search_key_length < current_key_length) { middle -= 1; right = middle; middle = ((middle - left) / 2) + left; } /* else we need to search in the upper half */ else { middle += 1; left = middle; middle = ((right - middle) / 2) + left; } continue; } /* they are the same length so compare the keys */ result = strncmp(search_key, agtv_key->val.string.val, search_key_length); /* if they don't match */ if (result != 0) { /* if smaller */ if (result < 0) { middle -= 1; right = middle; middle = ((middle - left) / 2) + left; } /* if larger */ else { middle += 1; left = middle; middle = ((right - middle) / 2) + left; } continue; } /* they match */ return (&agtv_object->val.object.pairs[middle].value); } /* they don't match */ return NULL; } /* * From PG's extract_variadic_args * * This function allows you to pass the minimum number of required arguments * so that you can have it bail out early (without allocating and building * the output arrays). In this case, the returned number of args will be 0 * and the args array will be NULL. */ static int extract_variadic_args_min(FunctionCallInfo fcinfo, int variadic_start, bool convert_unknown, Datum **args, Oid **types, bool **nulls, int min_num_args) { bool variadic = get_fn_expr_variadic(fcinfo->flinfo); Datum *args_res = NULL; bool *nulls_res = NULL; Oid *types_res = NULL; int nargs = 0; int i = 0; *args = NULL; *types = NULL; *nulls = NULL; if (variadic) { ArrayType *array_in = NULL; Oid element_type = InvalidOid; bool typbyval = false; char typalign = 0; int16 typlen = 0; Assert(PG_NARGS() == variadic_start + 1); if (PG_ARGISNULL(variadic_start)) { return -1; } /* get the array */ array_in = PG_GETARG_ARRAYTYPE_P(variadic_start); /* verify that we have the minimum number of args */ if (ArrayGetNItems(ARR_NDIM(array_in), ARR_DIMS(array_in)) < min_num_args) { return 0; } /* get the element type */ element_type = ARR_ELEMTYPE(array_in); get_typlenbyvalalign(element_type, &typlen, &typbyval, &typalign); deconstruct_array(array_in, element_type, typlen, typbyval, typalign, &args_res, &nulls_res, &nargs); /* All the elements of the array have the same type */ types_res = (Oid *) palloc0(nargs * sizeof(Oid)); for (i = 0; i < nargs; i++) { types_res[i] = element_type; } } else { /* get the number of arguments */ nargs = PG_NARGS() - variadic_start; Assert(nargs > 0); /* verify that we have the minimum number of args */ if (nargs < min_num_args) { return 0; } /* allocate result memory */ nulls_res = (bool *) palloc0(nargs * sizeof(bool)); args_res = (Datum *) palloc0(nargs * sizeof(Datum)); types_res = (Oid *) palloc0(nargs * sizeof(Oid)); for (i = 0; i < nargs; i++) { nulls_res[i] = PG_ARGISNULL(i + variadic_start); types_res[i] = get_fn_expr_argtype(fcinfo->flinfo, i + variadic_start); /* * Turn a constant (more or less literal) value that's of unknown * type into text if required. Unknowns come in as a cstring * pointer. Note: for functions declared as taking type "any", the * parser will not do any type conversion on unknown-type literals * (that is, undecorated strings or NULLs). */ if (convert_unknown && types_res[i] == UNKNOWNOID && get_fn_expr_arg_stable(fcinfo->flinfo, i + variadic_start)) { types_res[i] = TEXTOID; if (PG_ARGISNULL(i + variadic_start)) { args_res[i] = (Datum) 0; } else { args_res[i] = CStringGetTextDatum(PG_GETARG_POINTER(i + variadic_start)); } } else { /* no conversion needed, just take the datum as given */ args_res[i] = PG_GETARG_DATUM(i + variadic_start); } if (!OidIsValid(types_res[i]) || (convert_unknown && types_res[i] == UNKNOWNOID)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("could not determine data type for argument %d", i + 1))); } } } /* Fill in results */ *args = args_res; *nulls = nulls_res; *types = types_res; return nargs; } static Datum process_access_operator_result(FunctionCallInfo fcinfo, agtype_value *agtv, bool as_text) { if (agtv != NULL) { if (as_text) { text *result; if (agtv->type == AGTV_BINARY) { StringInfo out = makeStringInfo(); agtype_container *agtc = (agtype_container *)agtv->val.binary.data; char *str; str = agtype_to_cstring_worker(out, agtc, agtv->val.binary.len, false); result = cstring_to_text(str); } else { result = agtype_value_to_text(agtv, false); } if (result) { PG_RETURN_TEXT_P(result); } } else { AG_RETURN_AGTYPE_P(agtype_value_to_agtype(agtv)); } } PG_RETURN_NULL(); } Datum agtype_array_element_impl(FunctionCallInfo fcinfo, agtype *agtype_in, int element, bool as_text) { agtype_value *v; if (!AGT_ROOT_IS_ARRAY(agtype_in)) { PG_RETURN_NULL(); } v = execute_array_access_operator_internal(agtype_in, NULL, element); return process_access_operator_result(fcinfo, v, as_text); } Datum agtype_object_field_impl(FunctionCallInfo fcinfo, agtype *agtype_in, char *key, int key_len, bool as_text) { agtype_value *v; agtype* process_agtype; if (AGT_ROOT_IS_SCALAR(agtype_in)) { agtype_value *process_agtv = extract_entity_properties(agtype_in, false); if (!process_agtv) { PG_RETURN_NULL(); } process_agtype = agtype_value_to_agtype(process_agtv); } else { process_agtype = agtype_in; } if (!AGT_ROOT_IS_OBJECT(process_agtype)) { PG_RETURN_NULL(); } v = execute_map_access_operator_internal(process_agtype, NULL, key, key_len); return process_access_operator_result(fcinfo, v, as_text); } PG_FUNCTION_INFO_V1(agtype_object_field_agtype); Datum agtype_object_field_agtype(PG_FUNCTION_ARGS) { agtype *agt = AG_GET_ARG_AGTYPE_P(0); agtype *key = AG_GET_ARG_AGTYPE_P(1); agtype_value *key_value; if (!AGT_ROOT_IS_SCALAR(key)) { PG_RETURN_NULL(); } key_value = get_ith_agtype_value_from_container(&key->root, 0); if (key_value->type == AGTV_INTEGER) { PG_RETURN_TEXT_P((const void*)agtype_array_element_impl(fcinfo, agt, key_value->val.int_value, false)); } else if (key_value->type == AGTV_STRING) { AG_RETURN_AGTYPE_P((const void*)agtype_object_field_impl(fcinfo, agt, key_value->val.string.val, key_value->val.string.len, false)); } else { PG_RETURN_NULL(); } } PG_FUNCTION_INFO_V1(agtype_object_field_text_agtype); Datum agtype_object_field_text_agtype(PG_FUNCTION_ARGS) { agtype *agt = AG_GET_ARG_AGTYPE_P(0); agtype *key = AG_GET_ARG_AGTYPE_P(1); agtype_value *key_value; if (!AGT_ROOT_IS_SCALAR(key)) { PG_RETURN_NULL(); } key_value = get_ith_agtype_value_from_container(&key->root, 0); if (key_value->type == AGTV_INTEGER) { PG_RETURN_TEXT_P((const void*)agtype_array_element_impl(fcinfo, agt, key_value->val.int_value, true)); } else if (key_value->type == AGTV_STRING) { AG_RETURN_AGTYPE_P((const void*)agtype_object_field_impl(fcinfo, agt, key_value->val.string.val, key_value->val.string.len, true)); } else { PG_RETURN_NULL(); } } PG_FUNCTION_INFO_V1(agtype_object_field); Datum agtype_object_field(PG_FUNCTION_ARGS) { agtype *agt = AG_GET_ARG_AGTYPE_P(0); text *key = PG_GETARG_TEXT_PP(1); AG_RETURN_AGTYPE_P((const void*)agtype_object_field_impl(fcinfo, agt, VARDATA_ANY(key), VARSIZE_ANY_EXHDR(key), false)); } PG_FUNCTION_INFO_V1(agtype_object_field_text); Datum agtype_object_field_text(PG_FUNCTION_ARGS) { agtype *agt = AG_GET_ARG_AGTYPE_P(0); text *key = PG_GETARG_TEXT_PP(1); PG_RETURN_TEXT_P((const void*)agtype_object_field_impl(fcinfo, agt, VARDATA_ANY(key), VARSIZE_ANY_EXHDR(key), true)); } PG_FUNCTION_INFO_V1(agtype_array_element); Datum agtype_array_element(PG_FUNCTION_ARGS) { agtype *agt = AG_GET_ARG_AGTYPE_P(0); int elem = PG_GETARG_INT32(1); AG_RETURN_AGTYPE_P((const void*) agtype_array_element_impl(fcinfo, agt, elem, false)); } PG_FUNCTION_INFO_V1(agtype_array_element_text); Datum agtype_array_element_text(PG_FUNCTION_ARGS) { agtype *agt = AG_GET_ARG_AGTYPE_P(0); int elem = PG_GETARG_INT32(1); PG_RETURN_TEXT_P((const void*) agtype_array_element_impl(fcinfo, agt, elem, true)); } PG_FUNCTION_INFO_V1(agtype_access_operator); /* * Execution function for object.property, object["property"], * and array[element] */ Datum agtype_access_operator(PG_FUNCTION_ARGS) { Datum *args = NULL; bool *nulls = NULL; Oid *types = NULL; int nargs = 0; agtype *container = NULL; agtype_value *container_value = NULL; int i = 0; /* extract our args, we need at least 2 */ nargs = extract_variadic_args_min(fcinfo, 0, true, &args, &types, &nulls, 2); /* * Return NULL if - * * 1) Our args are all null - nothing passed at all. * 2) We don't have the minimum number of args. We require an object or * an array along with either a key or element number. Note that the * function extract_variadic_args_min will return 0 (nargs) if we * don't have at least 2 args. * */ if (args == NULL || nargs == 0 || nulls[0] == true) { PG_RETURN_NULL(); } /* check for individual NULLs */ for (i = 0; i < nargs; i++) { /* if we have a NULL, return NULL */ if (nulls[i] == true) { PG_RETURN_NULL(); } } /* get the container argument. It could be an object or array */ container = DATUM_GET_AGTYPE_P(args[0]); /* if it is a binary container, check for a VLE vpc */ if (AGT_ROOT_IS_BINARY(container)) { if (AGT_ROOT_BINARY_FLAGS(container) == AGT_FBINARY_TYPE_VLE_PATH) { /* retrieve an array of edges from the vpc */ container_value = agtv_materialize_vle_edges(container); /* clear the container reference */ container = NULL; } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("binary container must be a VLE vpc"))); } } /* if it is a scalar, open it and pull out the value */ else if (AGT_ROOT_IS_SCALAR(container)) { container_value = get_ith_agtype_value_from_container(&container->root, 0); /* it must be either a vertex or an edge */ if (container_value->type != AGTV_EDGE && container_value->type != AGTV_VERTEX) { ereport(ERROR,(errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("scalar object must be a vertex or edge"))); } /* clear the container reference */ container = NULL; } /* iterate through the keys (object fields or array elements) */ for (i = 1; i < nargs; i++) { agtype *key = NULL; /* get the key */ key = DATUM_GET_AGTYPE_P(args[i]); /* the key must be a scalar */ if (!(AGT_ROOT_IS_SCALAR(key))) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("key must resolve to a scalar value"))); } /* * Check for a vertex or edge container_value and extract the properties * object. */ if ((container_value != NULL && (container_value->type == AGTV_EDGE || container_value->type == AGTV_VERTEX))) { /* both are objects, get the properties object */ container_value = (container_value->type == AGTV_EDGE) ? &container_value->val.object.pairs[4].value : &container_value->val.object.pairs[2].value; } /* * If we are dealing with a type of object, which can be an - * agtype OBJECT, an agtype_value OBJECT serialized (BINARY), or an * agtype_value OBJECT deserialized. */ if ((container_value != NULL && (container_value->type == AGTV_OBJECT || (container_value->type == AGTV_BINARY && AGTYPE_CONTAINER_IS_OBJECT(container_value->val.binary.data)))) || (container != NULL && AGT_ROOT_IS_OBJECT(container))) { container_value = execute_map_access_operator(container, container_value, key); } /* * If we are dealing with a type of array, which can be an - * agtype ARRAY, an agtype_value ARRAY serialized (BINARY), or an * agtype_value ARRAY deserialized. */ else if ((container_value != NULL && (container_value->type == AGTV_ARRAY || (container_value->type == AGTV_BINARY && AGTYPE_CONTAINER_IS_ARRAY(container_value->val.binary.data)))) || (container != NULL && AGT_ROOT_IS_ARRAY(container))) { container_value = execute_array_access_operator(container, container_value, key); } else { /* this is unexpected */ ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("container must be an array or object"))); } /* for NULL values return NULL */ if (container_value == NULL || container_value->type == AGTV_NULL) { PG_RETURN_NULL(); } /* clear the container reference */ container = NULL; } /* serialize and return the result */ return AGTYPE_P_GET_DATUM(agtype_value_to_agtype(container_value)); } PG_FUNCTION_INFO_V1(agtype_access_slice); /* * Execution function for list slices */ Datum agtype_access_slice(PG_FUNCTION_ARGS) { agtype_value *lidx_value = NULL; agtype_value *uidx_value = NULL; agtype_in_state result; agtype *agt_array = NULL; agtype_value *agtv_array = NULL; int64 upper_index = 0; int64 lower_index = 0; uint32 array_size = 0; int64 i = 0; /* return null if the array to slice is null */ if (PG_ARGISNULL(0)) { PG_RETURN_NULL(); } /* return an error if both indices are NULL */ if (PG_ARGISNULL(1) && PG_ARGISNULL(2)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("slice start and/or end is required"))); } /* get the array parameter and verify that it is a list */ agt_array = AG_GET_ARG_AGTYPE_P(0); if ((!AGT_ROOT_IS_ARRAY(agt_array) && !AGT_ROOT_IS_VPC(agt_array)) || AGT_ROOT_IS_SCALAR(agt_array)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("slice must access a list"))); } /* If we have a vpc, decode it and get AGTV_ARRAY agtype_value */ if (AGT_ROOT_IS_VPC(agt_array)) { agtv_array = agtv_materialize_vle_edges(agt_array); /* get the size of array */ array_size = agtv_array->val.array.num_elems; } else { array_size = AGT_ROOT_COUNT(agt_array); } /* if we don't have a lower bound, make it 0 */ if (PG_ARGISNULL(1)) { lower_index = 0; } else { lidx_value = get_ith_agtype_value_from_container( &(AG_GET_ARG_AGTYPE_P(1))->root, 0); /* adjust for AGTV_NULL */ if (lidx_value->type == AGTV_NULL) { lower_index = 0; lidx_value = NULL; } } /* if we don't have an upper bound, make it the size of the array */ if (PG_ARGISNULL(2)) { upper_index = array_size; } else { uidx_value = get_ith_agtype_value_from_container( &(AG_GET_ARG_AGTYPE_P(2))->root, 0); /* adjust for AGTV_NULL */ if (uidx_value->type == AGTV_NULL) { upper_index = array_size; uidx_value = NULL; } } /* if both indices are NULL (AGTV_NULL) return an error */ if (lidx_value == NULL && uidx_value == NULL) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("slice start and/or end is required"))); } /* key must be an integer or NULL */ if ((lidx_value != NULL && lidx_value->type != AGTV_INTEGER) || (uidx_value != NULL && uidx_value->type != AGTV_INTEGER)) { ereport(ERROR, (errmsg("array slices must resolve to an integer value"))); } /* set indices if not already set */ if (lidx_value) { lower_index = lidx_value->val.int_value; } if (uidx_value) { upper_index = uidx_value->val.int_value; } /* adjust for negative and out of bounds index values */ if (lower_index < 0) { lower_index = array_size + lower_index; } if (lower_index < 0) { lower_index = 0; } if (lower_index > array_size) { lower_index = array_size; } if (upper_index < 0) { upper_index = array_size + upper_index; } if (upper_index < 0) { upper_index = 0; } if (upper_index > array_size) { upper_index = array_size; } /* build our result array */ memset(&result, 0, sizeof(agtype_in_state)); result.res = push_agtype_value(&result.parse_state, WAGT_BEGIN_ARRAY, NULL); /* if we have agtype_value, we need to iterate through the array */ if (agtv_array) { for (i = lower_index; i < upper_index; i++) { result.res = push_agtype_value(&result.parse_state, WAGT_ELEM, &agtv_array->val.array.elems[i]); } } else { /* get array elements from agtype_container */ for (i = lower_index; i < upper_index; i++) { result.res = push_agtype_value(&result.parse_state, WAGT_ELEM, get_ith_agtype_value_from_container(&agt_array->root, i)); } } result.res = push_agtype_value(&result.parse_state, WAGT_END_ARRAY, NULL); PG_RETURN_POINTER(agtype_value_to_agtype(result.res)); } PG_FUNCTION_INFO_V1(agtype_in_operator); /* * Execute function for IN operator */ Datum agtype_in_operator(PG_FUNCTION_ARGS) { agtype *agt_arg, *agt_item; agtype_iterator *it_array, *it_item; agtype_value *agtv_arg, agtv_item, agtv_elem; uint32 array_size = 0; bool result = false; uint32 i = 0; /* return null if the array is null */ if (PG_ARGISNULL(0)) { PG_RETURN_NULL(); } /* get the array parameter and verify that it is a list */ agt_arg = AG_GET_ARG_AGTYPE_P(0); if ((!AGT_ROOT_IS_ARRAY(agt_arg) && !AGT_ROOT_IS_VPC(agt_arg)) || AGT_ROOT_IS_SCALAR(agt_arg)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("object of IN must be a list"))); } /* If we have vpc as arg, get the agtype_value AGTV_ARRAY of edges */ if (AGT_ROOT_IS_VPC(agt_arg)) { agtv_arg = agtv_materialize_vle_edges(agt_arg); array_size = agtv_arg->val.array.num_elems; /* return null if the item to find is null */ if (PG_ARGISNULL(1)) { PG_RETURN_NULL(); } /* get the item to search for */ agt_item = AG_GET_ARG_AGTYPE_P(1); /* init item iterator */ it_item = agtype_iterator_init(&agt_item->root); /* get value of item */ agtype_iterator_next(&it_item, &agtv_item, false); if (agtv_item.type == AGTV_ARRAY && agtv_item.val.array.raw_scalar) { agtype_iterator_next(&it_item, &agtv_item, false); /* check for AGTYPE NULL */ if (agtv_item.type == AGTV_NULL) { PG_RETURN_NULL(); } } /* iterate through the array, but stop if we find it */ for (i = 0; i < array_size && !result; i++) { agtv_elem = agtv_arg->val.array.elems[i]; /* if both are containers, compare containers */ if (!IS_A_AGTYPE_SCALAR(&agtv_item) && !IS_A_AGTYPE_SCALAR(&agtv_elem)) { result = (compare_agtype_containers_orderability( &agt_item->root, agtv_elem.val.binary.data) == 0); } /* if both are scalars and of the same type, compare scalars */ else if (IS_A_AGTYPE_SCALAR(&agtv_item) && IS_A_AGTYPE_SCALAR(&agtv_elem) && agtv_item.type == agtv_elem.type) { result = (compare_agtype_scalar_values(&agtv_item, &agtv_elem) == 0); } } } /* Else we need to iterate agtype_container */ else { /* init array iterator */ it_array = agtype_iterator_init(&agt_arg->root); /* open array container */ agtype_iterator_next(&it_array, &agtv_elem, false); /* check for an array scalar value */ if (agtv_elem.type == AGTV_ARRAY && agtv_elem.val.array.raw_scalar) { agtype_iterator_next(&it_array, &agtv_elem, false); /* check for AGTYPE NULL */ if (agtv_elem.type == AGTV_NULL) { PG_RETURN_NULL(); } /* if it is a scalar, but not AGTV_NULL, error out */ ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("object of IN must be a list"))); } array_size = AGT_ROOT_COUNT(agt_arg); /* return null if the item to find is null */ if (PG_ARGISNULL(1)) { PG_RETURN_NULL(); } /* get the item to search for */ agt_item = AG_GET_ARG_AGTYPE_P(1); /* init item iterator */ it_item = agtype_iterator_init(&agt_item->root); /* get value of item */ agtype_iterator_next(&it_item, &agtv_item, false); if (agtv_item.type == AGTV_ARRAY && agtv_item.val.array.raw_scalar) { agtype_iterator_next(&it_item, &agtv_item, false); /* check for AGTYPE NULL */ if (agtv_item.type == AGTV_NULL) { PG_RETURN_NULL(); } } /* iterate through the array, but stop if we find it */ for (i = 0; i < array_size && !result; i++) { /* get next element */ agtype_iterator_next(&it_array, &agtv_elem, true); /* if both are containers, compare containers */ if (!IS_A_AGTYPE_SCALAR(&agtv_item) && !IS_A_AGTYPE_SCALAR(&agtv_elem)) { result = (compare_agtype_containers_orderability( &agt_item->root, agtv_elem.val.binary.data) == 0); } /* if both are scalars and of the same type, compare scalars */ else if (IS_A_AGTYPE_SCALAR(&agtv_item) && IS_A_AGTYPE_SCALAR(&agtv_elem) && agtv_item.type == agtv_elem.type) { result = (compare_agtype_scalar_values(&agtv_item, &agtv_elem) == 0); } } } return boolean_to_agtype(result); } PG_FUNCTION_INFO_V1(agtype_string_match_starts_with); /* * Execution function for STARTS WITH */ Datum agtype_string_match_starts_with(PG_FUNCTION_ARGS) { agtype *lhs = AG_GET_ARG_AGTYPE_P(0); agtype *rhs = AG_GET_ARG_AGTYPE_P(1); if (AGT_ROOT_IS_SCALAR(lhs) && AGT_ROOT_IS_SCALAR(rhs)) { agtype_value *lhs_value; agtype_value *rhs_value; lhs_value = get_ith_agtype_value_from_container(&lhs->root, 0); rhs_value = get_ith_agtype_value_from_container(&rhs->root, 0); if (lhs_value->type == AGTV_STRING && rhs_value->type == AGTV_STRING) { if (lhs_value->val.string.len < rhs_value->val.string.len) return boolean_to_agtype(false); if (strncmp(lhs_value->val.string.val, rhs_value->val.string.val, rhs_value->val.string.len) == 0) return boolean_to_agtype(true); else return boolean_to_agtype(false); } } ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("agtype string values expected"))); } PG_FUNCTION_INFO_V1(agtype_string_match_ends_with); /* * Execution function for ENDS WITH */ Datum agtype_string_match_ends_with(PG_FUNCTION_ARGS) { agtype *lhs = AG_GET_ARG_AGTYPE_P(0); agtype *rhs = AG_GET_ARG_AGTYPE_P(1); if (AGT_ROOT_IS_SCALAR(lhs) && AGT_ROOT_IS_SCALAR(rhs)) { agtype_value *lhs_value; agtype_value *rhs_value; lhs_value = get_ith_agtype_value_from_container(&lhs->root, 0); rhs_value = get_ith_agtype_value_from_container(&rhs->root, 0); if (lhs_value->type == AGTV_STRING && rhs_value->type == AGTV_STRING) { if (lhs_value->val.string.len < rhs_value->val.string.len) return boolean_to_agtype(false); if (strncmp(lhs_value->val.string.val + lhs_value->val.string.len - rhs_value->val.string.len, rhs_value->val.string.val, rhs_value->val.string.len) == 0) return boolean_to_agtype(true); else return boolean_to_agtype(false); } } ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("agtype string values expected"))); } PG_FUNCTION_INFO_V1(agtype_string_match_contains); /* * Execution function for CONTAINS */ Datum agtype_string_match_contains(PG_FUNCTION_ARGS) { agtype *lhs = AG_GET_ARG_AGTYPE_P(0); agtype *rhs = AG_GET_ARG_AGTYPE_P(1); if (AGT_ROOT_IS_SCALAR(lhs) && AGT_ROOT_IS_SCALAR(rhs)) { agtype_value *lhs_value; agtype_value *rhs_value; lhs_value = get_ith_agtype_value_from_container(&lhs->root, 0); rhs_value = get_ith_agtype_value_from_container(&rhs->root, 0); if (lhs_value->type == AGTV_STRING && rhs_value->type == AGTV_STRING) { char *l; char *r; if (lhs_value->val.string.len < rhs_value->val.string.len) return boolean_to_agtype(false); l = pnstrdup(lhs_value->val.string.val, lhs_value->val.string.len); r = pnstrdup(rhs_value->val.string.val, rhs_value->val.string.len); if (strstr(l, r) == NULL) return boolean_to_agtype(false); else return boolean_to_agtype(true); } } ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("agtype string values expected"))); } #define LEFT_ROTATE(n, i) ((n << i) | (n >> (64 - i))) #define RIGHT_ROTATE(n, i) ((n >> i) | (n << (64 - i))) //Hashing Function for Hash Indexes PG_FUNCTION_INFO_V1(agtype_hash_cmp); Datum agtype_hash_cmp(PG_FUNCTION_ARGS) { uint64 hash = 0; agtype *agt; agtype_iterator *it; agtype_iterator_token tok; agtype_value *r; uint64 seed = 0xF0F0F0F0; /* this function returns INTEGER which is 32 bits */ if (PG_ARGISNULL(0)) { PG_RETURN_INT32(0); } agt = AG_GET_ARG_AGTYPE_P(0); r = palloc0(sizeof(agtype_value)); it = agtype_iterator_init(&agt->root); while ((tok = agtype_iterator_next(&it, r, false)) != WAGT_DONE) { if (IS_A_AGTYPE_SCALAR(r) && AGTYPE_ITERATOR_TOKEN_IS_HASHABLE(tok)) agtype_hash_scalar_value_extended(r, &hash, seed); else if (tok == WAGT_BEGIN_ARRAY && !r->val.array.raw_scalar) seed = LEFT_ROTATE(seed, 4); else if (tok == WAGT_BEGIN_OBJECT) seed = LEFT_ROTATE(seed, 6); else if (tok == WAGT_END_ARRAY && !r->val.array.raw_scalar) seed = RIGHT_ROTATE(seed, 4); else if (tok == WAGT_END_OBJECT) seed = RIGHT_ROTATE(seed, 4); seed = LEFT_ROTATE(seed, 1); } PG_RETURN_INT32(hash); } // Comparison function for btree Indexes PG_FUNCTION_INFO_V1(agtype_btree_cmp); Datum agtype_btree_cmp(PG_FUNCTION_ARGS) { agtype *agtype_lhs; agtype *agtype_rhs; /* this function returns INTEGER which is 32bits */ if (PG_ARGISNULL(0) && PG_ARGISNULL(1)) { PG_RETURN_INT32(0); } else if (PG_ARGISNULL(0)) { PG_RETURN_INT32(1); } else if (PG_ARGISNULL(1)) { PG_RETURN_INT32(-1); } agtype_lhs = AG_GET_ARG_AGTYPE_P(0); agtype_rhs = AG_GET_ARG_AGTYPE_P(1); PG_RETURN_INT32(compare_agtype_containers_orderability(&agtype_lhs->root, &agtype_rhs->root)); } PG_FUNCTION_INFO_V1(agtype_typecast_numeric); /* * Execute function to typecast an agtype to an agtype numeric */ Datum agtype_typecast_numeric(PG_FUNCTION_ARGS) { agtype *arg_agt; agtype_value *arg_value; agtype_value result_value; Datum numd; char *string = NULL; /* get the agtype equivalence of any convertable input type */ arg_agt = get_one_agtype_from_variadic_args(fcinfo, 0, 1); /* Return null if arg_agt is null. This covers SQL and Agtype NULLS */ if (arg_agt == NULL) PG_RETURN_NULL(); /* check that we have a scalar value */ if (!AGT_ROOT_IS_SCALAR(arg_agt)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("typecast argument must resolve to a scalar value"))); /* get the arg parameter */ arg_value = get_ith_agtype_value_from_container(&arg_agt->root, 0); /* the input type drives the casting */ switch(arg_value->type) { case AGTV_INTEGER: numd = DirectFunctionCall1(int8_numeric, Int64GetDatum(arg_value->val.int_value)); break; case AGTV_FLOAT: numd = DirectFunctionCall1(float8_numeric, Float8GetDatum(arg_value->val.float_value)); break; case AGTV_NUMERIC: /* it is already a numeric so just return it */ PG_RETURN_POINTER(agtype_value_to_agtype(arg_value)); break; /* this allows string numbers and NaN */ case AGTV_STRING: /* we need a null terminated string */ string = (char *) palloc0(sizeof(char)*arg_value->val.string.len + 1); string = strncpy(string, arg_value->val.string.val, arg_value->val.string.len); string[arg_value->val.string.len] = '\0'; /* pass the string to the numeric in function for conversion */ numd = DirectFunctionCall3(numeric_in, CStringGetDatum(string), ObjectIdGetDatum(InvalidOid), Int32GetDatum(-1)); /* free the string */ pfree(string); string = NULL; break; /* what was given doesn't cast to a numeric */ default: ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("typecast expression must be a number or a string"))); break; } /* fill in and return our result */ result_value.type = AGTV_NUMERIC; result_value.val.numeric = DatumGetNumeric(numd); PG_RETURN_POINTER(agtype_value_to_agtype(&result_value)); } PG_FUNCTION_INFO_V1(agtype_typecast_int); /* * Execute function to typecast an agtype to an agtype int */ Datum agtype_typecast_int(PG_FUNCTION_ARGS) { agtype *arg_agt; agtype_value *arg_value; agtype_value result_value; Datum d; char *string = NULL; /* get the agtype equivalence of any convertable input type */ arg_agt = get_one_agtype_from_variadic_args(fcinfo, 0, 1); /* Return null if arg_agt is null. This covers SQL and Agtype NULLS */ if (arg_agt == NULL) { PG_RETURN_NULL(); } /* check that we have a scalar value */ if (!AGT_ROOT_IS_SCALAR(arg_agt)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("typecast argument must be a scalar value"))); } /* get the arg parameter */ arg_value = get_ith_agtype_value_from_container(&arg_agt->root, 0); /* check for agtype null */ if (arg_value->type == AGTV_NULL) { PG_RETURN_NULL(); } /* the input type drives the casting */ switch(arg_value->type) { case AGTV_INTEGER: PG_RETURN_POINTER(agtype_value_to_agtype(arg_value)); break; case AGTV_FLOAT: d = DirectFunctionCall1(dtoi8, Float8GetDatum(arg_value->val.float_value)); break; case AGTV_NUMERIC: d = DirectFunctionCall1(numeric_int8, NumericGetDatum(arg_value->val.numeric)); break; case AGTV_BOOL: d = DirectFunctionCall1(bool_int4, BoolGetDatum(arg_value->val.boolean)); break; case AGTV_STRING: /* we need a null terminated string */ string = (char *) palloc0(sizeof(char)*arg_value->val.string.len + 1); string = strncpy(string, arg_value->val.string.val, arg_value->val.string.len); string[arg_value->val.string.len] = '\0'; d = DirectFunctionCall1(int8in, CStringGetDatum(string)); /* free the string */ pfree(string); string = NULL; break; /* what was given doesn't cast to an int */ default: ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("typecast expression must be a number or a string"))); break; } /* set the result type and return our result */ result_value.type = AGTV_INTEGER; result_value.val.int_value = DatumGetInt64(d); PG_RETURN_POINTER(agtype_value_to_agtype(&result_value)); } PG_FUNCTION_INFO_V1(agtype_typecast_bool); /* * Execute function to typecast an agtype to an agtype bool */ Datum agtype_typecast_bool(PG_FUNCTION_ARGS) { agtype *arg_agt; agtype_value *arg_value; agtype_value result_value; Datum d; /* get the agtype equivalence of any convertable input type */ arg_agt = get_one_agtype_from_variadic_args(fcinfo, 0, 1); /* Return null if arg_agt is null. This covers SQL and Agtype NULLS */ if (arg_agt == NULL) { PG_RETURN_NULL(); } /* check that we have a scalar value */ if (!AGT_ROOT_IS_SCALAR(arg_agt)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("typecast argument must be a scalar value"))); } /* get the arg parameter */ arg_value = get_ith_agtype_value_from_container(&arg_agt->root, 0); /* check for agtype null */ if (arg_value->type == AGTV_NULL) { PG_RETURN_NULL(); } /* the input type drives the casting */ switch(arg_value->type) { case AGTV_BOOL: PG_RETURN_POINTER(agtype_value_to_agtype(arg_value)); break; case AGTV_INTEGER: d = DirectFunctionCall1(int4_bool, Int64GetDatum(arg_value->val.int_value)); break; /* what was given doesn't cast to a bool */ default: ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("typecast expression must be an integer or a boolean"))); break; } /* set the result type and return our result */ result_value.type = AGTV_BOOL; result_value.val.boolean = DatumGetBool(d); PG_RETURN_POINTER(agtype_value_to_agtype(&result_value)); } PG_FUNCTION_INFO_V1(agtype_typecast_float); /* * Execute function to typecast an agtype to an agtype float */ Datum agtype_typecast_float(PG_FUNCTION_ARGS) { agtype *arg_agt; agtype_value *arg_value; agtype_value result_value; Datum d; char *string = NULL; /* get the agtype equivalence of any convertable input type */ arg_agt = get_one_agtype_from_variadic_args(fcinfo, 0, 1); /* Return null if arg_agt is null. This covers SQL and Agtype NULLS */ if (arg_agt == NULL) PG_RETURN_NULL(); /* check that we have a scalar value */ if (!AGT_ROOT_IS_SCALAR(arg_agt)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("typecast argument must be a scalar value"))); /* get the arg parameter */ arg_value = get_ith_agtype_value_from_container(&arg_agt->root, 0); /* check for agtype null */ if (arg_value->type == AGTV_NULL) PG_RETURN_NULL(); /* the input type drives the casting */ switch(arg_value->type) { case AGTV_INTEGER: d = DirectFunctionCall1(int8out, Int64GetDatum(arg_value->val.int_value)); d = DirectFunctionCall1(float8in, d); break; case AGTV_FLOAT: /* it is already a float so just return it */ PG_RETURN_POINTER(agtype_value_to_agtype(arg_value)); break; case AGTV_NUMERIC: d = DirectFunctionCall1(numeric_float8, NumericGetDatum(arg_value->val.numeric)); break; /* this allows string numbers, NaN, Infinity, and -Infinity */ case AGTV_STRING: /* we need a null terminated string */ string = (char *) palloc0(sizeof(char)*arg_value->val.string.len + 1); string = strncpy(string, arg_value->val.string.val, arg_value->val.string.len); string[arg_value->val.string.len] = '\0'; d = DirectFunctionCall1(float8in, CStringGetDatum(string)); /* free the string */ pfree(string); string = NULL; break; /* what was given doesn't cast to a float */ default: ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("typecast expression must be a number or a string"))); break; } /* set the result type and return our result */ result_value.type = AGTV_FLOAT; result_value.val.float_value = DatumGetFloat8(d); PG_RETURN_POINTER(agtype_value_to_agtype(&result_value)); } PG_FUNCTION_INFO_V1(agtype_typecast_vertex); /* * Execute function for typecast to vertex */ Datum agtype_typecast_vertex(PG_FUNCTION_ARGS) { agtype *arg_agt; agtype_value agtv_key; agtype_value *agtv_graphid, *agtv_label, *agtv_properties; Datum result; int count; /* get the agtype equivalence of any convertable input type */ arg_agt = get_one_agtype_from_variadic_args(fcinfo, 0, 1); /* Return null if arg_agt is null. This covers SQL and Agtype NULLS */ if (arg_agt == NULL) PG_RETURN_NULL(); /* A vertex is an object so the arg needs to be one too */ if (!AGT_ROOT_IS_OBJECT(arg_agt)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("vertex typecast argument must resolve to an object"))); /* A vertex object has 3 key/value pairs */ count = AGTYPE_CONTAINER_SIZE(&arg_agt->root); if (count != 3) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("typecast object is not a vertex"))); /* * The 3 key/value pairs need to each exist and their names need to match * the names used for a vertex. */ agtv_key.type = AGTV_STRING; agtv_key.val.string.val = "id"; agtv_key.val.string.len = 2; agtv_graphid = find_agtype_value_from_container(&arg_agt->root, AGT_FOBJECT, &agtv_key); if (agtv_graphid == NULL || agtv_graphid->type != AGTV_INTEGER) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("vertex typecast object has invalid or missing id"))); agtv_key.val.string.val = "label"; agtv_key.val.string.len = 5; agtv_label = find_agtype_value_from_container(&arg_agt->root, AGT_FOBJECT, &agtv_key); if (agtv_label == NULL || agtv_label->type != AGTV_STRING) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("vertex typecast object has invalid or missing label"))); agtv_key.val.string.val = "properties"; agtv_key.val.string.len = 10; agtv_properties = find_agtype_value_from_container(&arg_agt->root, AGT_FOBJECT, &agtv_key); if (agtv_properties == NULL || (agtv_properties->type != AGTV_OBJECT && agtv_properties->type != AGTV_BINARY)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("vertex typecast object has invalid or missing properties"))); /* Hand it off to the build vertex routine */ result = DirectFunctionCall3(_agtype_build_vertex, Int64GetDatum(agtv_graphid->val.int_value), CStringGetDatum(agtv_label->val.string.val), PointerGetDatum(agtype_value_to_agtype(agtv_properties))); return result; } PG_FUNCTION_INFO_V1(agtype_typecast_edge); /* * Execute function for typecast to edge */ Datum agtype_typecast_edge(PG_FUNCTION_ARGS) { agtype *arg_agt; agtype_value agtv_key; agtype_value *agtv_graphid, *agtv_label, *agtv_properties, *agtv_startid, *agtv_endid; Datum result; int count; /* get the agtype equivalence of any convertable input type */ arg_agt = get_one_agtype_from_variadic_args(fcinfo, 0, 1); /* Return null if arg_agt is null. This covers SQL and Agtype NULLS */ if (arg_agt == NULL) PG_RETURN_NULL(); /* An edge is an object, so the arg needs to be one too */ if (!AGT_ROOT_IS_OBJECT(arg_agt)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("edge typecast argument must resolve to an object"))); /* An edge has 5 key/value pairs */ count = AGTYPE_CONTAINER_SIZE(&arg_agt->root); if (count != 5) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("typecast object is not an edge"))); /* * The 5 key/value pairs need to each exist and their names need to match * the names used for an edge. */ agtv_key.type = AGTV_STRING; agtv_key.val.string.val = "id"; agtv_key.val.string.len = 2; agtv_graphid = find_agtype_value_from_container(&arg_agt->root, AGT_FOBJECT, &agtv_key); if (agtv_graphid == NULL || agtv_graphid->type != AGTV_INTEGER) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("edge typecast object has an invalid or missing id"))); agtv_key.val.string.val = "label"; agtv_key.val.string.len = 5; agtv_label = find_agtype_value_from_container(&arg_agt->root, AGT_FOBJECT, &agtv_key); if (agtv_label == NULL || agtv_label->type != AGTV_STRING) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("edge typecast object has an invalid or missing label"))); agtv_key.val.string.val = "properties"; agtv_key.val.string.len = 10; agtv_properties = find_agtype_value_from_container(&arg_agt->root, AGT_FOBJECT, &agtv_key); if (agtv_properties == NULL || (agtv_properties->type != AGTV_OBJECT && agtv_properties->type != AGTV_BINARY)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("edge typecast object has invalid or missing properties"))); agtv_key.val.string.val = "start_id"; agtv_key.val.string.len = 8; agtv_startid = find_agtype_value_from_container(&arg_agt->root, AGT_FOBJECT, &agtv_key); if (agtv_startid == NULL || agtv_startid->type != AGTV_INTEGER) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("edge typecast object has an invalid or missing start_id"))); agtv_key.val.string.val = "end_id"; agtv_key.val.string.len = 6; agtv_endid = find_agtype_value_from_container(&arg_agt->root, AGT_FOBJECT, &agtv_key); if (agtv_endid == NULL || agtv_endid->type != AGTV_INTEGER) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("edge typecast object has an invalid or missing end_id"))); /* Hand it off to the build edge routine */ result = DirectFunctionCall5(_agtype_build_edge, Int64GetDatum(agtv_graphid->val.int_value), Int64GetDatum(agtv_startid->val.int_value), Int64GetDatum(agtv_endid->val.int_value), CStringGetDatum(agtv_label->val.string.val), PointerGetDatum(agtype_value_to_agtype(agtv_properties))); return result; } PG_FUNCTION_INFO_V1(agtype_typecast_path); /* * Execute function for typecast to path */ Datum agtype_typecast_path(PG_FUNCTION_ARGS) { agtype *arg_agt = NULL; agtype_in_state path; agtype_value *agtv_element = NULL; int count = 0; int i = 0; /* get the agtype equivalence of any convertable input type */ arg_agt = get_one_agtype_from_variadic_args(fcinfo, 0, 1); /* Return null if arg_agt is null. This covers SQL and Agtype NULLS */ if (arg_agt == NULL) PG_RETURN_NULL(); /* path needs to be an array */ if (!AGT_ROOT_IS_ARRAY(arg_agt)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("path typecast argument must resolve to an array"))); count = AGT_ROOT_COUNT(arg_agt); /* quick check for valid path lengths */ if (count < 3 || (count-1) % 2 != 0) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("typecast argument is not a valid path"))); /* create an agtype array */ memset(&path, 0, sizeof(agtype_in_state)); path.res = push_agtype_value(&path.parse_state, WAGT_BEGIN_ARRAY, NULL); /* * Iterate through the provided list, check that each value conforms, and * then add it if it does. Otherwise error out. */ for (i = 0; i+1 < count; i+=2) { /* get a potential vertex, check it, then add it */ agtv_element = get_ith_agtype_value_from_container(&arg_agt->root, i); if (agtv_element == NULL || agtv_element->type != AGTV_VERTEX) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("typecast argument is not a valid path"))); push_agtype_value(&path.parse_state, WAGT_ELEM, agtv_element); /* get a potential edge, check it, then add it */ agtv_element = get_ith_agtype_value_from_container(&arg_agt->root, i+1); if (agtv_element == NULL || agtv_element->type != AGTV_EDGE) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("typecast argument is not a valid path"))); push_agtype_value(&path.parse_state, WAGT_ELEM, agtv_element); } /* validate the last element is a vertex, add it if it is, fail otherwise */ agtv_element = get_ith_agtype_value_from_container(&arg_agt->root, i); if (agtv_element == NULL || agtv_element->type != AGTV_VERTEX) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("typecast argument is not a valid path"))); push_agtype_value(&path.parse_state, WAGT_ELEM, agtv_element); /* close the array */ path.res = push_agtype_value(&path.parse_state, WAGT_END_ARRAY, NULL); /* set it to a path */ path.res->type = AGTV_PATH; PG_RETURN_POINTER(agtype_value_to_agtype(path.res)); } PG_FUNCTION_INFO_V1(age_id); Datum age_id(PG_FUNCTION_ARGS) { agtype *agt_arg = NULL; agtype_value *agtv_object = NULL; agtype_value *agtv_result = NULL; /* check for null */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); agt_arg = AG_GET_ARG_AGTYPE_P(0); /* check for a scalar object */ if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("id() argument must resolve to a scalar value"))); /* get the object out of the array */ agtv_object = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* is it an agtype null? */ if (agtv_object->type == AGTV_NULL) PG_RETURN_NULL(); /* check for proper agtype */ if (agtv_object->type != AGTV_VERTEX && agtv_object->type != AGTV_EDGE) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("id() argument must be a vertex, an edge or null"))); agtv_result = GET_AGTYPE_VALUE_OBJECT_VALUE(agtv_object, "id"); Assert(agtv_result != NULL); Assert(agtv_result->type = AGTV_INTEGER); PG_RETURN_POINTER(agtype_value_to_agtype(agtv_result)); } PG_FUNCTION_INFO_V1(age_start_id); Datum age_start_id(PG_FUNCTION_ARGS) { agtype *agt_arg = NULL; agtype_value *agtv_object = NULL; agtype_value *agtv_result = NULL; /* check for null */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); agt_arg = AG_GET_ARG_AGTYPE_P(0); /* check for a scalar object */ if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("start_id() argument must resolve to a scalar value"))); /* get the object out of the array */ agtv_object = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* is it an agtype null? */ if (agtv_object->type == AGTV_NULL) PG_RETURN_NULL(); /* check for proper agtype */ if (agtv_object->type != AGTV_EDGE) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("start_id() argument must be an edge or null"))); agtv_result = GET_AGTYPE_VALUE_OBJECT_VALUE(agtv_object, "start_id"); Assert(agtv_result != NULL); Assert(agtv_result->type = AGTV_INTEGER); PG_RETURN_POINTER(agtype_value_to_agtype(agtv_result)); } PG_FUNCTION_INFO_V1(age_end_id); Datum age_end_id(PG_FUNCTION_ARGS) { agtype *agt_arg = NULL; agtype_value *agtv_object = NULL; agtype_value *agtv_result = NULL; /* check for null */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); agt_arg = AG_GET_ARG_AGTYPE_P(0); /* check for a scalar object */ if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("end_id() argument must resolve to a scalar value"))); /* get the object out of the array */ agtv_object = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* is it an agtype null? */ if (agtv_object->type == AGTV_NULL) PG_RETURN_NULL(); /* check for proper agtype */ if (agtv_object->type != AGTV_EDGE) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("end_id() argument must be an edge or null"))); agtv_result = GET_AGTYPE_VALUE_OBJECT_VALUE(agtv_object, "end_id"); Assert(agtv_result != NULL); Assert(agtv_result->type = AGTV_INTEGER); PG_RETURN_POINTER(agtype_value_to_agtype(agtv_result)); } /* * Helper function to return the Datum value of a column (attribute) in a heap * tuple (row) given the column number (starting from 0), attribute name, typid, * and whether it can be null. The function is designed to extract and validate * that the data (attribute) is what is expected. The function will error on any * issues. */ Datum column_get_datum(TupleDesc tupdesc, HeapTuple tuple, int column, const char *attname, Oid typid, bool isnull) { Form_pg_attribute att; HeapTupleHeader hth; HeapTupleData tmptup, *htd; Datum result; bool _isnull = true; /* build the heap tuple data */ hth = tuple->t_data; tmptup.t_len = HeapTupleHeaderGetDatumLength(hth); tmptup.t_data = hth; htd = &tmptup; /* get the description for the column from the tuple descriptor */ att = TupleDescAttr(tupdesc, column); /* get the datum (attribute) for that column*/ result = heap_getattr(htd, column + 1, tupdesc, &_isnull); /* verify that the attribute typid is as expected */ if (att->atttypid != typid) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_TABLE), errmsg("Invalid attribute typid. Expected %d, found %d", typid, att->atttypid))); /* verify that the attribute name is as expected */ if (strcmp(att->attname.data, attname) != 0) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_TABLE), errmsg("Invalid attribute name. Expected %s, found %s", attname, att->attname.data))); /* verify that if it is null, it is allowed to be null */ if (isnull == false && _isnull == true) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_TABLE), errmsg("Attribute was found to be null when null is not allowed."))); return result; } /* * Function to retrieve a label name, given the graph name and graphid of the * node or edge. The function returns a pointer to a duplicated string that * needs to be freed when you are finished using it. */ static char *get_label_name(const char *graph_name, graphid element_graphid) { ScanKeyData scan_keys[2]; Relation ag_label; SysScanDesc scan_desc; HeapTuple tuple; TupleDesc tupdesc; char *result = NULL; bool column_is_null = false; Oid graph_oid = get_graph_oid(graph_name); int32 label_id = get_graphid_label_id(element_graphid); /* scankey for first match in ag_label, column 2, graphoid, BTEQ, OidEQ */ ScanKeyInit(&scan_keys[0], Anum_ag_label_graph, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(graph_oid)); /* scankey for second match in ag_label, column 3, label id, BTEQ, Int4EQ */ ScanKeyInit(&scan_keys[1], Anum_ag_label_id, BTEqualStrategyNumber, F_INT4EQ, Int32GetDatum(label_id)); ag_label = table_open(ag_label_relation_id(), ShareLock); scan_desc = systable_beginscan(ag_label, ag_label_graph_oid_index_id(), true, NULL, 2, scan_keys); tuple = systable_getnext(scan_desc); if (!HeapTupleIsValid(tuple)) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_SCHEMA), errmsg("graphid %lu does not exist", element_graphid))); } /* get the tupdesc - we don't need to release this one */ tupdesc = RelationGetDescr(ag_label); /* bail if the number of columns differs */ if (tupdesc->natts != Natts_ag_label) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_TABLE), errmsg("Invalid number of attributes for ag_catalog.ag_label"))); } /* get the label name */ result = NameStr(*DatumGetName(heap_getattr(tuple, Anum_ag_label_name, tupdesc, &column_is_null))); /* duplicate it */ result = strdup(result); /* end the scan and close the relation */ systable_endscan(scan_desc); table_close(ag_label, ShareLock); return result; } static Datum get_vertex(const char *graph, const char *vertex_label, int64 graphid) { ScanKeyData scan_keys[1]; Relation graph_vertex_label; TableScanDesc scan_desc; HeapTuple tuple; TupleDesc tupdesc; Datum id, properties, result; /* get the specific graph namespace (schema) */ Oid graph_namespace_oid = get_namespace_oid(graph, false); /* get the specific vertex label table (schema.vertex_label) */ Oid vertex_label_table_oid = get_relname_relid(vertex_label, graph_namespace_oid); /* get the active snapshot */ Snapshot snapshot = GetActiveSnapshot(); /* initialize the scan key */ ScanKeyInit(&scan_keys[0], 1, BTEqualStrategyNumber, F_OIDEQ, Int64GetDatum(graphid)); /* open the relation (table), begin the scan, and get the tuple */ graph_vertex_label = table_open(vertex_label_table_oid, ShareLock); scan_desc = table_beginscan(graph_vertex_label, snapshot, 1, scan_keys); tuple = heap_getnext(scan_desc, ForwardScanDirection); /* bail if the tuple isn't valid */ if (!HeapTupleIsValid(tuple)) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_TABLE), errmsg("graphid %lu does not exist", graphid))); } /* get the tupdesc - we don't need to release this one */ tupdesc = RelationGetDescr(graph_vertex_label); /* bail if the number of columns differs */ if (tupdesc->natts != 2) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_TABLE), errmsg("Invalid number of attributes for %s.%s", graph, vertex_label ))); /* get the id */ id = column_get_datum(tupdesc, tuple, 0, "id", GRAPHIDOID, true); /* get the properties */ properties = column_get_datum(tupdesc, tuple, 1, "properties", AGTYPEOID, true); /* reconstruct the vertex */ result = DirectFunctionCall3(_agtype_build_vertex, id, CStringGetDatum(vertex_label), properties); /* end the scan and close the relation */ table_endscan(scan_desc); table_close(graph_vertex_label, ShareLock); /* return the vertex datum */ return result; } PG_FUNCTION_INFO_V1(age_startnode); Datum age_startnode(PG_FUNCTION_ARGS) { agtype *agt_arg = NULL; agtype_value *agtv_object = NULL; agtype_value *agtv_value = NULL; char *graph_name = NULL; char *label_name = NULL; graphid start_id; Datum result; /* we need the graph name */ Assert(PG_ARGISNULL(0) == false); /* check for null */ if (PG_ARGISNULL(1)) PG_RETURN_NULL(); /* get the graph name */ agt_arg = AG_GET_ARG_AGTYPE_P(0); /* it must be a scalar and must be a string */ Assert(AGT_ROOT_IS_SCALAR(agt_arg)); agtv_object = get_ith_agtype_value_from_container(&agt_arg->root, 0); Assert(agtv_object->type == AGTV_STRING); graph_name = strndup(agtv_object->val.string.val, agtv_object->val.string.len); /* get the edge */ agt_arg = AG_GET_ARG_AGTYPE_P(1); /* check for a scalar object */ if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("startNode() argument must resolve to a scalar value"))); /* get the object */ agtv_object = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* is it an agtype null, return null if it is */ if (agtv_object->type == AGTV_NULL) PG_RETURN_NULL(); /* check for proper agtype */ if (agtv_object->type != AGTV_EDGE) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("startNode() argument must be an edge or null"))); /* get the graphid for start_id */ agtv_value = GET_AGTYPE_VALUE_OBJECT_VALUE(agtv_object, "start_id"); /* it must not be null and must be an integer */ Assert(agtv_value != NULL); Assert(agtv_value->type = AGTV_INTEGER); start_id = agtv_value->val.int_value; /* get the label */ label_name = get_label_name(graph_name, start_id); /* it must not be null and must be a string */ Assert(label_name != NULL); result = get_vertex(graph_name, label_name, start_id); free(label_name); return result; } PG_FUNCTION_INFO_V1(age_endnode); Datum age_endnode(PG_FUNCTION_ARGS) { agtype *agt_arg = NULL; agtype_value *agtv_object = NULL; agtype_value *agtv_value = NULL; char *graph_name = NULL; char *label_name = NULL; graphid end_id; Datum result; /* we need the graph name */ Assert(PG_ARGISNULL(0) == false); /* check for null */ if (PG_ARGISNULL(1)) PG_RETURN_NULL(); /* get the graph name */ agt_arg = AG_GET_ARG_AGTYPE_P(0); /* it must be a scalar and must be a string */ Assert(AGT_ROOT_IS_SCALAR(agt_arg)); agtv_object = get_ith_agtype_value_from_container(&agt_arg->root, 0); Assert(agtv_object->type == AGTV_STRING); graph_name = strndup(agtv_object->val.string.val, agtv_object->val.string.len); /* get the edge */ agt_arg = AG_GET_ARG_AGTYPE_P(1); /* check for a scalar object */ if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("endNode() argument must resolve to a scalar value"))); /* get the object */ agtv_object = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* is it an agtype null, return null if it is */ if (agtv_object->type == AGTV_NULL) PG_RETURN_NULL(); /* check for proper agtype */ if (agtv_object->type != AGTV_EDGE) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("endNode() argument must be an edge or null"))); /* get the graphid for the end_id */ agtv_value = GET_AGTYPE_VALUE_OBJECT_VALUE(agtv_object, "end_id"); /* it must not be null and must be an integer */ Assert(agtv_value != NULL); Assert(agtv_value->type = AGTV_INTEGER); end_id = agtv_value->val.int_value; /* get the label */ label_name = get_label_name(graph_name, end_id); /* it must not be null and must be a string */ Assert(label_name != NULL); result = get_vertex(graph_name, label_name, end_id); free(label_name); return result; } PG_FUNCTION_INFO_V1(age_head); Datum age_head(PG_FUNCTION_ARGS) { agtype *agt_arg = NULL; agtype_value *agtv_arg = NULL; agtype_value *agtv_result = NULL; /* check for null */ if (PG_ARGISNULL(0)) { PG_RETURN_NULL(); } agt_arg = AG_GET_ARG_AGTYPE_P(0); /* check for an array */ if ((!AGT_ROOT_IS_ARRAY(agt_arg) && !AGT_ROOT_IS_VPC(agt_arg)) || AGT_ROOT_IS_SCALAR(agt_arg)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("head() argument must resolve to a list or null"))); } /* * If we have a vpc, materialize the edges to get AGTV_ARRAY * agtype_value, process it and return the result. */ if (AGT_ROOT_IS_VPC(agt_arg)) { agtv_arg = agtv_materialize_vle_edges(agt_arg); /* if we have an empty list, return a null */ if (agtv_arg->val.array.num_elems == 0) { PG_RETURN_NULL(); } /* get the first element of the array */ agtv_result = &agtv_arg->val.array.elems[0]; } else { /* if we have an empty list, return a null */ if (AGT_ROOT_COUNT(agt_arg) == 0) { PG_RETURN_NULL(); } /* get the first element of the array */ agtv_result = get_ith_agtype_value_from_container(&agt_arg->root, 0); } /* if it is AGTV_NULL, return null */ if (agtv_result->type == AGTV_NULL) { PG_RETURN_NULL(); } PG_RETURN_POINTER(agtype_value_to_agtype(agtv_result)); } PG_FUNCTION_INFO_V1(age_last); Datum age_last(PG_FUNCTION_ARGS) { agtype *agt_arg = NULL; agtype_value *agtv_arg = NULL; agtype_value *agtv_result = NULL; int size; /* check for null */ if (PG_ARGISNULL(0)) { PG_RETURN_NULL(); } agt_arg = AG_GET_ARG_AGTYPE_P(0); /* check for an array */ if ((!AGT_ROOT_IS_ARRAY(agt_arg) && !AGT_ROOT_IS_VPC(agt_arg)) || AGT_ROOT_IS_SCALAR(agt_arg)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("last() argument must resolve to a list or null"))); } /* * If we have a vpc, materialize the edges to get AGTV_ARRAY * agtype_value, process it and return the result. */ if (AGT_ROOT_IS_VPC(agt_arg)) { agtv_arg = agtv_materialize_vle_edges(agt_arg); size = agtv_arg->val.array.num_elems; /* if we have an empty list, return a null */ if (size == 0) { PG_RETURN_NULL(); } /* get the first element of the array */ agtv_result = &agtv_arg->val.array.elems[size-1]; } else { size = AGT_ROOT_COUNT(agt_arg); /* if we have an empty list, return a null */ if (size == 0) { PG_RETURN_NULL(); } /* get the first element of the array */ agtv_result = get_ith_agtype_value_from_container(&agt_arg->root, size-1); } /* if it is AGTV_NULL, return null */ if (agtv_result->type == AGTV_NULL) { PG_RETURN_NULL(); } PG_RETURN_POINTER(agtype_value_to_agtype(agtv_result)); } PG_FUNCTION_INFO_V1(age_tail); /* * Returns a list containing all the elements, excluding the first one, from a list. */ Datum age_tail(PG_FUNCTION_ARGS) { Oid arg_type; agtype *agt_arg = NULL; agtype *agt_result = NULL; agtype_in_state agis_result; int count; int i; /* check number of arguments */ if (PG_NARGS() < 1 || PG_NARGS() > 1) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("age_tail() requires only one argument"))); } /* get the data type */ arg_type = get_fn_expr_argtype(fcinfo->flinfo, 0); /* check the data type */ if (arg_type != AGTYPEOID) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("age_tail() argument must be of type agtype"))); } /* check for null */ if (PG_ARGISNULL(0)) { PG_RETURN_NULL(); } agt_arg = AG_GET_ARG_AGTYPE_P(0); /* check for an array */ if (!AGT_ROOT_IS_ARRAY(agt_arg) || AGT_ROOT_IS_SCALAR(agt_arg)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("tail() argument must resolve to a list or null"))); } count = AGT_ROOT_COUNT(agt_arg); /* if we have an empty list or only one element in the list, return null */ if (count <= 1) { PG_RETURN_NULL(); } /* clear the result structure */ MemSet(&agis_result, 0, sizeof(agtype_in_state)); /* push the beginning of the array */ agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_BEGIN_ARRAY, NULL); /* iterate through the list beginning with the second item */ for (i = 1; i < count; i++) { agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, get_ith_agtype_value_from_container(&agt_arg->root, i)); } /* push the end of the array */ agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_END_ARRAY, NULL); agt_result = agtype_value_to_agtype(agis_result.res); pfree_agtype_value(agis_result.res); PG_RETURN_POINTER(agt_result); } PG_FUNCTION_INFO_V1(age_properties); Datum age_properties(PG_FUNCTION_ARGS) { agtype *agt_arg = NULL; agtype_value *agtv_object = NULL; agtype_value *agtv_result = NULL; /* check for null */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); agt_arg = AG_GET_ARG_AGTYPE_P(0); /* check for a scalar object */ if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("properties() argument must resolve to a scalar value"))); /* get the object out of the array */ agtv_object = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* is it an agtype null? */ if (agtv_object->type == AGTV_NULL) PG_RETURN_NULL(); /* check for proper agtype */ if (agtv_object->type != AGTV_VERTEX && agtv_object->type != AGTV_EDGE) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("properties() argument must be a vertex, an edge or null"))); agtv_result = GET_AGTYPE_VALUE_OBJECT_VALUE(agtv_object, "properties"); Assert(agtv_result != NULL); Assert(agtv_result->type = AGTV_OBJECT); PG_RETURN_POINTER(agtype_value_to_agtype(agtv_result)); } PG_FUNCTION_INFO_V1(age_length); Datum age_length(PG_FUNCTION_ARGS) { agtype *agt_arg = NULL; agtype_value *agtv_path = NULL; agtype_value agtv_result; /* check for null */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); agt_arg = AG_GET_ARG_AGTYPE_P(0); /* check for a scalar */ if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("length() argument must resolve to a scalar"))); /* get the path array */ agtv_path = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* if it is AGTV_NULL, return null */ if (agtv_path->type == AGTV_NULL) PG_RETURN_NULL(); /* check for a path */ if (agtv_path ->type != AGTV_PATH) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("length() argument must resolve to a path or null"))); agtv_result.type = AGTV_INTEGER; agtv_result.val.int_value = (agtv_path->val.array.num_elems - 1) /2; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_toboolean); Datum age_toboolean(PG_FUNCTION_ARGS) { int nargs; Datum *args; Datum arg; bool *nulls; Oid *types; Oid type; agtype_value agtv_result; char *string = NULL; bool result = false; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs > 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toBoolean() only supports one argument"))); /* check for null */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* * toBoolean() supports bool, text, cstring, or the agtype bool, and string * input. */ arg = args[0]; type = types[0]; if (type != AGTYPEOID) { if (type == BOOLOID) result = DatumGetBool(arg); else if (type == CSTRINGOID || type == TEXTOID) { if (type == CSTRINGOID) string = DatumGetCString(arg); else string = text_to_cstring(DatumGetTextPP(arg)); if (pg_strcasecmp(string, "true") == 0) result = true; else if (pg_strcasecmp(string, "false") == 0) result = false; else PG_RETURN_NULL(); } else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toBoolean() unsupported argument type %d", type))); } else { agtype *agt_arg; agtype_value *agtv_value; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toBoolean() only supports scalar arguments"))); agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); if (agtv_value->type == AGTV_BOOL) result = agtv_value->val.boolean; else if (agtv_value->type == AGTV_STRING) { int len = agtv_value->val.string.len; string = agtv_value->val.string.val; if (len == 4 && pg_strncasecmp(string, "true", len) == 0) result = true; else if (len == 5 && pg_strncasecmp(string, "false", len) == 0) result = false; else PG_RETURN_NULL(); } else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toBoolean() unsupported argument agtype %d", agtv_value->type))); } /* build the result */ agtv_result.type = AGTV_BOOL; agtv_result.val.boolean = result; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_tobooleanlist); /* * Converts a list of values and returns a list of boolean values. * If any values are not convertible to boolean they will be null in the list returned. */ Datum age_tobooleanlist(PG_FUNCTION_ARGS) { agtype *agt_arg = NULL; agtype_in_state agis_result; agtype_value *elem; agtype_value bool_elem; char *string = NULL; int count; int i; /* check for null */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); agt_arg = AG_GET_ARG_AGTYPE_P(0); /* check for an array */ if (!AGT_ROOT_IS_ARRAY(agt_arg) || AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toBooleanList() argument must resolve to a list or null"))); count = AGT_ROOT_COUNT(agt_arg); /* if we have an empty list or only one element in the list, return null */ if (count == 0) PG_RETURN_NULL(); /* clear the result structure */ MemSet(&agis_result, 0, sizeof(agtype_in_state)); /* push the beginning of the array */ agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_BEGIN_ARRAY, NULL); /* iterate through the list */ for (i = 0; i < count; i++) { // TODO: check element's type, it's value, and convert it to boolean if possible. elem = get_ith_agtype_value_from_container(&agt_arg->root, i); bool_elem.type = AGTV_BOOL; switch (elem->type) { case AGTV_STRING: string = elem->val.string.val; if (pg_strcasecmp(string, "true") == 0) { bool_elem.val.boolean = true; agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, &bool_elem); } else if (pg_strcasecmp(string, "false") == 0) { bool_elem.val.boolean = false; agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, &bool_elem); } else { bool_elem.type = AGTV_NULL; agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, &bool_elem); } break; case AGTV_BOOL: bool_elem.val.boolean = elem->val.boolean; agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, &bool_elem); break; default: bool_elem.type = AGTV_NULL; agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, &bool_elem); break; } } /* push the end of the array */ agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_END_ARRAY, NULL); PG_RETURN_POINTER(agtype_value_to_agtype(agis_result.res)); } PG_FUNCTION_INFO_V1(age_tofloat); Datum age_tofloat(PG_FUNCTION_ARGS) { int nargs; Datum *args; Datum arg; bool *nulls; Oid *types; agtype_value agtv_result; char *string = NULL; bool is_valid = false; Oid type; float8 result; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs > 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toFloat() only supports one argument"))); /* check for null */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* * toFloat() supports integer, float, numeric, text, cstring, or the * agtype integer, float, numeric, and string input */ arg = args[0]; type = types[0]; if (type != AGTYPEOID) { if (type == INT2OID) result = (float8) DatumGetInt16(arg); else if (type == INT4OID) result = (float8) DatumGetInt32(arg); else if (type == INT8OID) { /* * Get the string representation of the integer because it could be * too large to fit in a float. Let the float routine determine * what to do with it. */ string = DatumGetCString(DirectFunctionCall1(int8out, arg)); /* turn it into a float */ result = float8in_internal_null(string, NULL, "double precision", string, &is_valid); /* return null if it was not a invalid float */ if (!is_valid) PG_RETURN_NULL(); } else if (type == FLOAT4OID) result = (float8) DatumGetFloat4(arg); else if (type == FLOAT8OID) result = DatumGetFloat8(arg); else if (type == NUMERICOID) result = DatumGetFloat8(DirectFunctionCall1( numeric_float8_no_overflow, arg)); else if (type == CSTRINGOID || type == TEXTOID) { if (type == CSTRINGOID) string = DatumGetCString(arg); else string = text_to_cstring(DatumGetTextPP(arg)); result = float8in_internal_null(string, NULL, "double precision", string, &is_valid); if (!is_valid) PG_RETURN_NULL(); } else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toFloat() unsupported argument type %d", type))); } else { agtype *agt_arg; agtype_value *agtv_value; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toFloat() only supports scalar arguments"))); agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); if (agtv_value->type == AGTV_INTEGER) { /* get the string representation of the integer */ string = DatumGetCString(DirectFunctionCall1(int8out, Int64GetDatum(agtv_value->val.int_value))); /* turn it into a float */ result = float8in_internal_null(string, NULL, "double precision", string, &is_valid); /* return null if it was an invalid float */ if (!is_valid) PG_RETURN_NULL(); } else if (agtv_value->type == AGTV_FLOAT) result = agtv_value->val.float_value; else if (agtv_value->type == AGTV_NUMERIC) result = DatumGetFloat8(DirectFunctionCall1( numeric_float8_no_overflow, NumericGetDatum(agtv_value->val.numeric))); else if (agtv_value->type == AGTV_STRING) { string = strndup(agtv_value->val.string.val, agtv_value->val.string.len); result = float8in_internal_null(string, NULL, "double precision", string, &is_valid); free(string); if (!is_valid) PG_RETURN_NULL(); } else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toFloat() unsupported argument agtype %d", agtv_value->type))); } /* build the result */ agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = result; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_tofloatlist); /* * toFloatList() converts a list of values and returns a list of floating point values. * If any values are not convertible to floating point they will be null in the list returned. */ Datum age_tofloatlist(PG_FUNCTION_ARGS) { agtype *agt_arg = NULL; agtype_in_state agis_result; agtype_value *elem; agtype_value float_elem; char *string = NULL; int count; int i; bool is_valid = false; float8 float_num; char buffer[64]; /* check for null */ if (PG_ARGISNULL(0)) { PG_RETURN_NULL(); } agt_arg = AG_GET_ARG_AGTYPE_P(0); /* check for an array */ if (!AGT_ROOT_IS_ARRAY(agt_arg) || AGT_ROOT_IS_SCALAR(agt_arg)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toFloatList() argument must resolve to a list or null"))); } count = AGT_ROOT_COUNT(agt_arg); /* if we have an empty list or only one element in the list, return null */ if (count == 0) { PG_RETURN_NULL(); } /* clear the result structure */ MemSet(&agis_result, 0, sizeof(agtype_in_state)); /* push the beginning of the array */ agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_BEGIN_ARRAY, NULL); /* iterate through the list */ for (i = 0; i < count; i++) { // TODO: check element's type, it's value, and convert it to float if possible. elem = get_ith_agtype_value_from_container(&agt_arg->root, i); float_elem.type = AGTV_FLOAT; switch (elem->type) { case AGTV_STRING: string = elem->val.string.val; if (atof(string)) { float_elem.type = AGTV_FLOAT; float_elem.val.float_value = float8in_internal_null(string, NULL, "double precision", string, &is_valid); agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, &float_elem); } else { float_elem.type = AGTV_NULL; agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, &float_elem); } break; case AGTV_FLOAT: float_elem.type = AGTV_FLOAT; float_num = elem->val.float_value; sprintf(buffer, "%f", float_num); string = buffer; float_elem.val.float_value = float8in_internal_null(string, NULL, "double precision", string, &is_valid); agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, &float_elem); break; default: float_elem.type = AGTV_NULL; agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, &float_elem); break; } } agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_END_ARRAY, NULL); PG_RETURN_POINTER(agtype_value_to_agtype(agis_result.res)); } PG_FUNCTION_INFO_V1(age_tointeger); Datum age_tointeger(PG_FUNCTION_ARGS) { int nargs; Datum *args; Datum arg; bool *nulls; Oid *types; agtype_value agtv_result; char *string = NULL; bool is_valid = false; Oid type; int64 result; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs > 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toInteger() only supports one argument"))); /* check for null */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* * toInteger() supports integer, float, numeric, text, cstring, or the * agtype integer, float, numeric, and string input */ arg = args[0]; type = types[0]; if (type != AGTYPEOID) { if (type == INT2OID) { result = (int64) DatumGetInt16(arg); } else if (type == INT4OID) { result = (int64) DatumGetInt32(arg); } else if (type == INT8OID) { result = (int64) DatumGetInt64(arg); } else if (type == FLOAT4OID) { float4 f = DatumGetFloat4(arg); if (isnan(f) || isinf(f) || f < (float4)PG_INT64_MIN || f > (float4)PG_INT64_MAX) { PG_RETURN_NULL(); } result = (int64) f; } else if (type == FLOAT8OID) { float8 f = DatumGetFloat8(arg); if (isnan(f) || isinf(f) || f < (float8)PG_INT64_MIN || f > (float8)PG_INT64_MAX) { PG_RETURN_NULL(); } result = (int64) f; } else if (type == NUMERICOID) { float8 f; f = DatumGetFloat8(DirectFunctionCall1( numeric_float8_no_overflow, arg)); if (isnan(f) || isinf(f) || f < (float8)PG_INT64_MIN || f > (float8)PG_INT64_MAX) { PG_RETURN_NULL(); } result = (int64) f; } else if (type == CSTRINGOID || type == TEXTOID) { char *endptr; if (type == CSTRINGOID) { string = DatumGetCString(arg); } else { string = text_to_cstring(DatumGetTextPP(arg)); } /* convert it if it is a regular integer string */ result = strtoi64(string, &endptr, 10); /* * If it isn't an integer string, try converting it as a float * string. */ result = float8in_internal_null(string, NULL, "double precision", string, &is_valid); if (*endptr != '\0') { float8 f; f = float8in_internal_null(string, NULL, "double precision", string, &is_valid); /* * If the conversions failed or it's a special float value, * return null. */ if (!is_valid || isnan(f) || isinf(f) || f < PG_INT64_MIN || f > (double)PG_INT64_MAX) { PG_RETURN_NULL(); } result = (int64) f; } } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toInteger() unsupported argument type %d", type))); } } else { agtype *agt_arg; agtype_value *agtv_value; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toInteger() only supports scalar arguments"))); agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); if (agtv_value->type == AGTV_INTEGER) result = agtv_value->val.int_value; else if (agtv_value->type == AGTV_FLOAT) { float8 f = agtv_value->val.float_value; if (isnan(f) || isinf(f) || f < (float8)PG_INT64_MIN || f > (float8)PG_INT64_MAX) { PG_RETURN_NULL(); } result = (int64) f; } else if (agtv_value->type == AGTV_NUMERIC) { float8 f; Datum num = NumericGetDatum(agtv_value->val.numeric); f = DatumGetFloat8(DirectFunctionCall1( numeric_float8_no_overflow, num)); if (isnan(f) || isinf(f) || f < (float8)PG_INT64_MIN || f > (float8)PG_INT64_MAX) { PG_RETURN_NULL(); } result = (int64) f; } else if (agtv_value->type == AGTV_STRING) { char *endptr; /* we need a null terminated cstring */ string = strndup(agtv_value->val.string.val, agtv_value->val.string.len); /* convert it if it is a regular integer string */ result = strtoi64(string, &endptr, 10); /* * If it isn't an integer string, try converting it as a float * string. */ if (*endptr != '\0') { float8 f; f = float8in_internal_null(string, NULL, "double precision", string, &is_valid); free(string); /* * If the conversions failed or it's a special float value, * return null. */ if (!is_valid || isnan(f) || isinf(f) || f < (float8)PG_INT64_MIN || f > (float8)PG_INT64_MAX) { PG_RETURN_NULL(); } result = (int64) f; } else { free(string); } } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toInteger() unsupported argument agtype %d", agtv_value->type))); } } /* build the result */ agtv_result.type = AGTV_INTEGER; agtv_result.val.int_value = result; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_tointegerlist); /* * toIntegerList() converts a list of values and returns a list of integers point values. * If any values are not convertible to integer they will be null in the list returned. */ Datum age_tointegerlist(PG_FUNCTION_ARGS) { agtype *agt_arg = NULL; agtype_in_state agis_result; agtype_value *elem; agtype_value integer_elem; int count; int i; char *string = NULL; int integer_num; float float_num; int is_float; /* check for null */ if (PG_ARGISNULL(0)) { PG_RETURN_NULL(); } agt_arg = AG_GET_ARG_AGTYPE_P(0); /* check for an array */ if (!AGT_ROOT_IS_ARRAY(agt_arg) || AGT_ROOT_IS_SCALAR(agt_arg)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toIntegerList() argument must resolve to a list or null"))); } count = AGT_ROOT_COUNT(agt_arg); /* if we have an empty list or only one element in the list, return null */ if (count == 0) { PG_RETURN_NULL(); } /* clear the result structure */ MemSet(&agis_result, 0, sizeof(agtype_in_state)); /* push the beginning of the array */ agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_BEGIN_ARRAY, NULL); /* iterate through the list */ for (i = 0; i < count; i++) { // TODO: check element's type, it's value, and convert it to integer if possible. elem = get_ith_agtype_value_from_container(&agt_arg->root, i); integer_elem.type = AGTV_INTEGER; switch (elem->type) { case AGTV_STRING: string = elem->val.string.val; integer_elem.type = AGTV_INTEGER; integer_elem.val.int_value = atoi(string); if (*string == '+' || *string == '-' || (*string >= '0' && *string <= '9')) { is_float = 1; while (*(++string)) { if(!(*string >= '0' && *string <= '9')) { if(*string == '.' && is_float) { is_float--; } else { integer_elem.type = AGTV_NULL; break; } } } } else { integer_elem.type = AGTV_NULL; } agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, &integer_elem); break; case AGTV_FLOAT: integer_elem.type = AGTV_INTEGER; float_num = elem->val.float_value; integer_elem.val.int_value = (int)float_num; agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, &integer_elem); break; case AGTV_INTEGER: integer_elem.type = AGTV_INTEGER; integer_num = elem->val.int_value; integer_elem.val.int_value = integer_num; agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, &integer_elem); break; default: integer_elem.type = AGTV_NULL; agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, &integer_elem); break; } } agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_END_ARRAY, NULL); PG_RETURN_POINTER(agtype_value_to_agtype(agis_result.res)); } PG_FUNCTION_INFO_V1(age_size); Datum age_size(PG_FUNCTION_ARGS) { int nargs; Datum *args; Datum arg; bool *nulls; Oid *types; agtype_value agtv_result; char *string = NULL; Oid type; int64 result; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs > 1) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("size() only supports one argument"))); } /* check for null */ if (nargs < 0 || nulls[0]) { PG_RETURN_NULL(); } /* * size() supports cstring, text, or the agtype string or list input */ arg = args[0]; type = types[0]; if (type == CSTRINGOID) { string = DatumGetCString(arg); result = strlen(string); } else if (type == TEXTOID) { string = text_to_cstring(DatumGetTextPP(arg)); result = strlen(string); } else if (type == AGTYPEOID) { agtype *agt_arg; agtype_value *agtv_value; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (AGT_ROOT_IS_SCALAR(agt_arg)) { agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); if (agtv_value->type == AGTV_STRING) { result = agtv_value->val.string.len; } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("size() unsupported argument"))); } } else if (AGT_ROOT_IS_VPC(agt_arg)) { agtv_value = agtv_materialize_vle_edges(agt_arg); result = agtv_value->val.array.num_elems; } else if (AGT_ROOT_IS_ARRAY(agt_arg)) { result = AGT_ROOT_COUNT(agt_arg); } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("size() unsupported argument"))); } } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("size() unsupported argument"))); } /* build the result */ agtv_result.type = AGTV_INTEGER; agtv_result.val.int_value = result; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(graphid_to_agtype); Datum graphid_to_agtype(PG_FUNCTION_ARGS) { PG_RETURN_POINTER((const void *) integer_to_agtype(AG_GETARG_GRAPHID(0))); } PG_FUNCTION_INFO_V1(agtype_to_graphid); Datum agtype_to_graphid(PG_FUNCTION_ARGS) { agtype *agtype_in = AG_GET_ARG_AGTYPE_P(0); agtype_value agtv; if (!agtype_extract_scalar(&agtype_in->root, &agtv) || agtv.type != AGTV_INTEGER) cannot_cast_agtype_value(agtv.type, "graphid"); PG_FREE_IF_COPY(agtype_in, 0); PG_RETURN_INT64(agtv.val.int_value); } PG_FUNCTION_INFO_V1(age_type); Datum age_type(PG_FUNCTION_ARGS) { agtype *agt_arg = NULL; agtype_value *agtv_object = NULL; agtype_value *agtv_result = NULL; /* check for null */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); agt_arg = AG_GET_ARG_AGTYPE_P(0); /* check for a scalar object */ if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("type() argument must resolve to a scalar value"))); /* get the object out of the array */ agtv_object = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* is it an agtype null? */ if (agtv_object->type == AGTV_NULL) PG_RETURN_NULL(); /* check for proper agtype */ if (agtv_object->type != AGTV_EDGE) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("type() argument must be an edge or null"))); agtv_result = GET_AGTYPE_VALUE_OBJECT_VALUE(agtv_object, "label"); Assert(agtv_result != NULL); Assert(agtv_result->type = AGTV_STRING); PG_RETURN_POINTER(agtype_value_to_agtype(agtv_result)); } PG_FUNCTION_INFO_V1(age_exists); /* * Executor function for EXISTS(property). * * Note: For most executor functions we want to return SQL NULL for NULL input. * However, in this case, NULL means false - it was not found. */ Datum age_exists(PG_FUNCTION_ARGS) { /* check for NULL, NULL is FALSE */ if (PG_ARGISNULL(0)) PG_RETURN_BOOL(false); /* otherwise, we have something, and something is TRUE */ PG_RETURN_BOOL(true); } PG_FUNCTION_INFO_V1(age_isempty); /* * Executor function for isEmpty(property). */ Datum age_isempty(PG_FUNCTION_ARGS) { Datum *args; Datum arg; bool *nulls; Oid *types; char *string = NULL; Oid type; int64 result; /* extract argument values */ extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* * isEmpty() supports cstring, text, or the agtype string or list input */ arg = args[0]; type = types[0]; if (type == CSTRINGOID) { string = DatumGetCString(arg); result = strlen(string); } else if (type == TEXTOID) { string = text_to_cstring(DatumGetTextPP(arg)); result = strlen(string); } else if (type == AGTYPEOID) { agtype *agt_arg; agtype_value *agtv_value; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (AGT_ROOT_IS_SCALAR(agt_arg)) { agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); if (agtv_value->type == AGTV_STRING) { result = agtv_value->val.string.len; } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("isEmpty() unsupported argument, expected a List, Map, or String"))); } } else if (AGT_ROOT_IS_VPC(agt_arg)) { agtv_value = agtv_materialize_vle_edges(agt_arg); result = agtv_value->val.array.num_elems; } else if (AGT_ROOT_IS_ARRAY(agt_arg)) { result = AGT_ROOT_COUNT(agt_arg); } else if (AGT_ROOT_IS_OBJECT(agt_arg)) { result = AGT_ROOT_COUNT(agt_arg); } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("isEmpty() unsupported argument, expected a List, Map, or String"))); } } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("isEmpty() unsupported argument, expected a List, Map, or String"))); } /* build the result */ PG_RETURN_BOOL(result == 0); } PG_FUNCTION_INFO_V1(age_label); /* * Executor function for label(edge/vertex). */ Datum age_label(PG_FUNCTION_ARGS) { agtype *agt_arg = NULL; agtype_value *agtv_value = NULL; agtype_value *label = NULL; /* check for NULL, NULL is FALSE */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); /* get the argument */ agt_arg = AG_GET_ARG_AGTYPE_P(0); // edges and vertices are considered scalars if (!AGT_ROOT_IS_SCALAR(agt_arg)) { if (AGTE_IS_NULL(agt_arg->root.children[0])) PG_RETURN_NULL(); ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("label() argument must resolve to an edge or vertex"))); } agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); // fail if agtype value isn't an edge or vertex if (agtv_value->type != AGTV_VERTEX && agtv_value->type != AGTV_EDGE) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("label() argument must resolve to an edge or vertex"))); } // extract the label agtype value from the vertex or edge label = GET_AGTYPE_VALUE_OBJECT_VALUE(agtv_value, "label"); PG_RETURN_POINTER(agtype_value_to_agtype(label)); } PG_FUNCTION_INFO_V1(age_tostring); Datum age_tostring(PG_FUNCTION_ARGS) { int nargs; Datum *args; Datum arg; bool *nulls; Oid *types; agtype_value agtv_result; char *string = NULL; Oid type; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs > 1) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toString() only supports one argument"))); } /* check for null */ if (nargs < 0 || nulls[0]) { PG_RETURN_NULL(); } /* * toString() supports integer, float, numeric, text, cstring, boolean, * regtype or the agtypes: integer, float, numeric, string, boolean input */ arg = args[0]; type = types[0]; if (type != AGTYPEOID) { if (type == INT2OID) { string = DatumGetCString(DirectFunctionCall1(int8out, Int64GetDatum((int64) DatumGetInt16(arg)))); } else if (type == INT4OID) { string = DatumGetCString(DirectFunctionCall1(int8out, Int64GetDatum((int64) DatumGetInt32(arg)))); } else if (type == INT8OID) { string = DatumGetCString(DirectFunctionCall1(int8out, arg)); } else if (type == FLOAT4OID) { string = DatumGetCString(DirectFunctionCall1(float8out, arg)); } else if (type == FLOAT8OID) { string = DatumGetCString(DirectFunctionCall1(float8out, arg)); } else if (type == NUMERICOID) { string = DatumGetCString(DirectFunctionCall1(numeric_out, arg)); } else if (type == CSTRINGOID) { string = DatumGetCString(arg); } else if (type == TEXTOID) { string = text_to_cstring(DatumGetTextPP(arg)); } else if (type == BOOLOID) { string = DatumGetBool(arg) ? "true" : "false"; } else if (type == REGTYPEOID) { string = DatumGetCString(DirectFunctionCall1(regtypeout, arg)); } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toString() unsupported argument type %d", type))); } } else { agtype *agt_arg; agtype_value *agtv_value; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (!AGT_ROOT_IS_SCALAR(agt_arg)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toString() only supports scalar arguments"))); } agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); if (agtv_value->type == AGTV_NULL) { PG_RETURN_NULL(); } else if (agtv_value->type == AGTV_INTEGER) { string = DatumGetCString(DirectFunctionCall1(int8out, Int64GetDatum(agtv_value->val.int_value))); } else if (agtv_value->type == AGTV_FLOAT) { string = DatumGetCString(DirectFunctionCall1(float8out, Float8GetDatum(agtv_value->val.float_value))); } else if (agtv_value->type == AGTV_STRING) { string = pnstrdup(agtv_value->val.string.val, agtv_value->val.string.len); } else if (agtv_value->type == AGTV_NUMERIC) { string = DatumGetCString(DirectFunctionCall1(numeric_out, PointerGetDatum(agtv_value->val.numeric))); } else if (agtv_value->type == AGTV_BOOL) { string = (agtv_value->val.boolean) ? "true" : "false"; } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toString() unsupported argument agtype %d", agtv_value->type))); } } /* build the result */ agtv_result.type = AGTV_STRING; agtv_result.val.string.val = string; agtv_result.val.string.len = strlen(string); PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_tostringlist); /* * toStringList() converts a list of values and returns a list of String values. * If any values are not convertible to string point they will be null in the list returned. */ Datum age_tostringlist(PG_FUNCTION_ARGS) { agtype *agt_arg = NULL; agtype_in_state agis_result; agtype_value *elem; agtype_value string_elem; int count; int i; char buffer[64]; /* check for null */ if (PG_ARGISNULL(0)) { PG_RETURN_NULL(); } agt_arg = AG_GET_ARG_AGTYPE_P(0); /* check for an array */ if (!AGT_ROOT_IS_ARRAY(agt_arg) || AGT_ROOT_IS_SCALAR(agt_arg)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toStringList() argument must resolve to a list or null"))); } count = AGT_ROOT_COUNT(agt_arg); /* if we have an empty list or only one element in the list, return null */ if (count == 0) { PG_RETURN_NULL(); } /* clear the result structure */ MemSet(&agis_result, 0, sizeof(agtype_in_state)); /* push the beginning of the array */ agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_BEGIN_ARRAY, NULL); /* iterate through the list */ for (i = 0; i < count; i++) { // TODO: check element's type, it's value, and convert it to string if possible. elem = get_ith_agtype_value_from_container(&agt_arg->root, i); string_elem.type = AGTV_STRING; switch (elem->type) { case AGTV_STRING: if(!elem) { string_elem.type = AGTV_NULL; agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, &string_elem); } string_elem.val.string.val = elem->val.string.val; string_elem.val.string.len = elem->val.string.len; agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, &string_elem); break; case AGTV_FLOAT: sprintf(buffer, "%.*g", DBL_DIG, elem->val.float_value); string_elem.val.string.val = pstrdup(buffer); string_elem.val.string.len = strlen(buffer); agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, &string_elem); break; case AGTV_INTEGER: sprintf(buffer, "%ld", elem->val.int_value); string_elem.val.string.val = pstrdup(buffer); string_elem.val.string.len = strlen(buffer); agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, &string_elem); break; default: string_elem.type = AGTV_NULL; agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, &string_elem); break; } } agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_END_ARRAY, NULL); PG_RETURN_POINTER(agtype_value_to_agtype(agis_result.res)); } agtype_iterator *get_next_list_element(agtype_iterator *it, agtype_container *agtc, agtype_value *elem) { agtype_iterator_token itok; agtype_value tmp; /* verify input params */ Assert(agtc != NULL); Assert(elem != NULL); /* check to see if the container is empty */ if (AGTYPE_CONTAINER_SIZE(agtc) == 0) { return NULL; } /* if the passed iterator is NULL, this is the first time, create it */ if (it == NULL) { /* initial the iterator */ it = agtype_iterator_init(agtc); /* get the first token */ itok = agtype_iterator_next(&it, &tmp, true); /* it should be WAGT_BEGIN_ARRAY */ Assert(itok == WAGT_BEGIN_ARRAY); } /* the next token should be an element or the end of the array */ itok = agtype_iterator_next(&it, &tmp, true); Assert(itok == WAGT_ELEM || itok == WAGT_END_ARRAY); /* if this is the end of the array return NULL */ if (itok == WAGT_END_ARRAY) { return NULL; } /* this should be the element, copy it */ if (itok == WAGT_ELEM) { *elem = tmp; } return it; } PG_FUNCTION_INFO_V1(age_reverse); Datum age_reverse(PG_FUNCTION_ARGS) { int nargs; Datum *args; Datum arg; bool *nulls; Oid *types; agtype_value agtv_result; text *text_string = NULL; char *string = NULL; int string_len; Oid type; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs > 1) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("reverse() only supports one argument"))); } /* check for null */ if (nargs < 0 || nulls[0]) { PG_RETURN_NULL(); } /* reverse() supports text, cstring, or the agtype string input */ arg = args[0]; type = types[0]; if (type != AGTYPEOID) { if (type == CSTRINGOID) { text_string = cstring_to_text(DatumGetCString(arg)); } else if (type == TEXTOID) { text_string = DatumGetTextPP(arg); } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("reverse() unsupported argument type %d", type))); } } else { agtype *agt_arg = NULL; agtype_value *agtv_value = NULL; agtype_in_state result; agtype_parse_state *parse_state = NULL; agtype_value elem = {0}; agtype_iterator *it = NULL; agtype_value tmp; agtype_value *elems = NULL; int num_elems; int i; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (AGT_ROOT_IS_SCALAR(agt_arg)) { agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* check for agtype null */ if (agtv_value->type == AGTV_NULL) { PG_RETURN_NULL(); } if (agtv_value->type == AGTV_STRING) { text_string = cstring_to_text_with_len(agtv_value->val.string.val, agtv_value->val.string.len); } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("reverse() unsupported argument agtype %d", agtv_value->type))); } } else if (AGT_ROOT_IS_ARRAY(agt_arg)) { agtv_value = push_agtype_value(&parse_state, WAGT_BEGIN_ARRAY, NULL); while ((it = get_next_list_element(it, &agt_arg->root, &elem))) { agtv_value = push_agtype_value(&parse_state, WAGT_ELEM, &elem); } /* now reverse the list */ elems = parse_state->cont_val.val.array.elems; num_elems = parse_state->cont_val.val.array.num_elems; for(i = 0; i < num_elems/2; i++) { tmp = elems[i]; elems[i] = elems[num_elems - 1 - i]; elems[num_elems - 1 - i] = tmp; } /* reverse done*/ elems = NULL; agtv_value = push_agtype_value(&parse_state, WAGT_END_ARRAY, NULL); Assert(agtv_value != NULL); Assert(agtv_value->type = AGTV_ARRAY); PG_RETURN_POINTER(agtype_value_to_agtype(agtv_value)); } else if (AGT_ROOT_IS_VPC(agt_arg)) { elems = agtv_materialize_vle_edges(agt_arg); num_elems = elems->val.array.num_elems; /* build our result array */ memset(&result, 0, sizeof(agtype_in_state)); result.res = push_agtype_value(&result.parse_state, WAGT_BEGIN_ARRAY, NULL); for (i = num_elems-1; i >= 0; i--) { result.res = push_agtype_value(&result.parse_state, WAGT_ELEM, &elems->val.array.elems[i]); } result.res = push_agtype_value(&result.parse_state, WAGT_END_ARRAY, NULL); PG_RETURN_POINTER(agtype_value_to_agtype(result.res)); } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("reverse() unsupported argument agtype"))); } } /* * We need the string as a text string so that we can let PG deal with * multibyte characters in reversing the string. */ text_string = DatumGetTextPP(DirectFunctionCall1(text_reverse, PointerGetDatum(text_string))); /* convert it back to a cstring */ string = text_to_cstring(text_string); string_len = strlen(string); /* if we have an empty string, return null */ if (string_len == 0) { PG_RETURN_NULL(); } /* build the result */ agtv_result.type = AGTV_STRING; agtv_result.val.string.val = string; agtv_result.val.string.len = string_len; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_toupper); Datum age_toupper(PG_FUNCTION_ARGS) { int nargs; Datum *args; Datum arg; bool *nulls; Oid *types; agtype_value agtv_result; char *string = NULL; char *result = NULL; int string_len; Oid type; int i; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs > 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toUpper() only supports one argument"))); /* check for null */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* toUpper() supports text, cstring, or the agtype string input */ arg = args[0]; type = types[0]; if (type != AGTYPEOID) { if (type == CSTRINGOID) string = DatumGetCString(arg); else if (type == TEXTOID) string = text_to_cstring(DatumGetTextPP(arg)); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toUpper() unsupported argument type %d", type))); string_len = strlen(string); } else { agtype *agt_arg; agtype_value *agtv_value; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toUpper() only supports scalar arguments"))); agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* check for agtype null */ if (agtv_value->type == AGTV_NULL) PG_RETURN_NULL(); if (agtv_value->type == AGTV_STRING) { string = agtv_value->val.string.val; string_len = agtv_value->val.string.len; } else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toUpper() unsupported argument agtype %d", agtv_value->type))); } /* if we have an empty string, return null */ if (string_len == 0) PG_RETURN_NULL(); /* allocate the new string */ result = palloc0(string_len); /* upcase the string */ for (i = 0; i < string_len; i++) result[i] = pg_toupper(string[i]); /* build the result */ agtv_result.type = AGTV_STRING; agtv_result.val.string.val = result; agtv_result.val.string.len = string_len; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_tolower); Datum age_tolower(PG_FUNCTION_ARGS) { int nargs; Datum *args; Datum arg; bool *nulls; Oid *types; agtype_value agtv_result; char *string = NULL; char *result = NULL; int string_len; Oid type; int i; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs > 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toLower() only supports one argument"))); /* check for null */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* toLower() supports text, cstring, or the agtype string input */ arg = args[0]; type = types[0]; if (type != AGTYPEOID) { if (type == CSTRINGOID) string = DatumGetCString(arg); else if (type == TEXTOID) string = text_to_cstring(DatumGetTextPP(arg)); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toLower() unsupported argument type %d", type))); string_len = strlen(string); } else { agtype *agt_arg; agtype_value *agtv_value; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toLower() only supports scalar arguments"))); agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* check for agtype null */ if (agtv_value->type == AGTV_NULL) PG_RETURN_NULL(); if (agtv_value->type == AGTV_STRING) { string = agtv_value->val.string.val; string_len = agtv_value->val.string.len; } else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("toLower() unsupported argument agtype %d", agtv_value->type))); } /* if we have an empty string, return null */ if (string_len == 0) PG_RETURN_NULL(); /* allocate the new string */ result = palloc0(string_len); /* downcase the string */ for (i = 0; i < string_len; i++) result[i] = pg_tolower(string[i]); /* build the result */ agtv_result.type = AGTV_STRING; agtv_result.val.string.val = result; agtv_result.val.string.len = string_len; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_rtrim); Datum age_rtrim(PG_FUNCTION_ARGS) { int nargs; Datum *args; Datum arg; bool *nulls; Oid *types; agtype_value agtv_result; text *text_string = NULL; char *string = NULL; int string_len; Oid type; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs > 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("rTrim() only supports one argument"))); /* check for null */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* rTrim() supports text, cstring, or the agtype string input */ arg = args[0]; type = types[0]; if (type != AGTYPEOID) { if (type == CSTRINGOID) text_string = cstring_to_text(DatumGetCString(arg)); else if (type == TEXTOID) text_string = DatumGetTextPP(arg); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("rTrim() unsupported argument type %d", type))); } else { agtype *agt_arg; agtype_value *agtv_value; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("rTrim() only supports scalar arguments"))); agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* check for agtype null */ if (agtv_value->type == AGTV_NULL) PG_RETURN_NULL(); if (agtv_value->type == AGTV_STRING) text_string = cstring_to_text_with_len(agtv_value->val.string.val, agtv_value->val.string.len); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("rTrim() unsupported argument agtype %d", agtv_value->type))); } /* * We need the string as a text string so that we can let PG deal with * multibyte characters in trimming the string. */ text_string = DatumGetTextPP(DirectFunctionCall1(rtrim1, PointerGetDatum(text_string))); /* convert it back to a cstring */ string = text_to_cstring(text_string); string_len = strlen(string); /* if we have an empty string, return null */ if (string_len == 0) PG_RETURN_NULL(); /* build the result */ agtv_result.type = AGTV_STRING; agtv_result.val.string.val = string; agtv_result.val.string.len = string_len; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_ltrim); Datum age_ltrim(PG_FUNCTION_ARGS) { int nargs; Datum *args; Datum arg; bool *nulls; Oid *types; agtype_value agtv_result; text *text_string = NULL; char *string = NULL; int string_len; Oid type; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs > 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("lTrim() only supports one argument"))); /* check for null */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* rTrim() supports text, cstring, or the agtype string input */ arg = args[0]; type = types[0]; if (type != AGTYPEOID) { if (type == CSTRINGOID) text_string = cstring_to_text(DatumGetCString(arg)); else if (type == TEXTOID) text_string = DatumGetTextPP(arg); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("lTrim() unsupported argument type %d", type))); } else { agtype *agt_arg; agtype_value *agtv_value; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("lTrim() only supports scalar arguments"))); agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* check for agtype null */ if (agtv_value->type == AGTV_NULL) PG_RETURN_NULL(); if (agtv_value->type == AGTV_STRING) text_string = cstring_to_text_with_len(agtv_value->val.string.val, agtv_value->val.string.len); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("lTrim() unsupported argument agtype %d", agtv_value->type))); } /* * We need the string as a text string so that we can let PG deal with * multibyte characters in trimming the string. */ text_string = DatumGetTextPP(DirectFunctionCall1(ltrim1, PointerGetDatum(text_string))); /* convert it back to a cstring */ string = text_to_cstring(text_string); string_len = strlen(string); /* if we have an empty string, return null */ if (string_len == 0) PG_RETURN_NULL(); /* build the result */ agtv_result.type = AGTV_STRING; agtv_result.val.string.val = string; agtv_result.val.string.len = string_len; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_trim); Datum age_trim(PG_FUNCTION_ARGS) { int nargs; Datum *args; Datum arg; bool *nulls; Oid *types; agtype_value agtv_result; text *text_string = NULL; char *string = NULL; int string_len; Oid type; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs > 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("trim() only supports one argument"))); /* check for null */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* trim() supports text, cstring, or the agtype string input */ arg = args[0]; type = types[0]; if (type != AGTYPEOID) { if (type == CSTRINGOID) text_string = cstring_to_text(DatumGetCString(arg)); else if (type == TEXTOID) text_string = DatumGetTextPP(arg); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("trim() unsupported argument type %d", type))); } else { agtype *agt_arg; agtype_value *agtv_value; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("trim() only supports scalar arguments"))); agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* check for agtype null */ if (agtv_value->type == AGTV_NULL) PG_RETURN_NULL(); if (agtv_value->type == AGTV_STRING) text_string = cstring_to_text_with_len(agtv_value->val.string.val, agtv_value->val.string.len); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("trim() unsupported argument agtype %d", agtv_value->type))); } /* * We need the string as a text string so that we can let PG deal with * multibyte characters in trimming the string. */ text_string = DatumGetTextPP(DirectFunctionCall1(btrim1, PointerGetDatum(text_string))); /* convert it back to a cstring */ string = text_to_cstring(text_string); string_len = strlen(string); /* if we have an empty string, return null */ if (string_len == 0) PG_RETURN_NULL(); /* build the result */ agtv_result.type = AGTV_STRING; agtv_result.val.string.val = string; agtv_result.val.string.len = string_len; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_right); Datum age_right(PG_FUNCTION_ARGS) { int nargs; Datum *args; Datum arg; bool *nulls; Oid *types; agtype_value agtv_result; text *text_string = NULL; char *string = NULL; int string_len; Oid type; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 2) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("right() invalid number of arguments"))); /* check for a null string */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* check for a null length */ if (nulls[1]) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("right() length parameter cannot be null"))); /* right() supports text, cstring, or the agtype string input */ arg = args[0]; type = types[0]; if (type != AGTYPEOID) { if (type == CSTRINGOID) text_string = cstring_to_text(DatumGetCString(arg)); else if (type == TEXTOID) text_string = DatumGetTextPP(arg); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("right() unsupported argument type %d", type))); } else { agtype *agt_arg; agtype_value *agtv_value; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("right() only supports scalar arguments"))); agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* check for agtype null */ if (agtv_value->type == AGTV_NULL) PG_RETURN_NULL(); if (agtv_value->type == AGTV_STRING) text_string = cstring_to_text_with_len(agtv_value->val.string.val, agtv_value->val.string.len); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("right() unsupported argument agtype %d", agtv_value->type))); } /* right() only supports integer and agtype integer for the second parameter. */ arg = args[1]; type = types[1]; if (type != AGTYPEOID) { if (type == INT2OID) string_len = (int64) DatumGetInt16(arg); else if (type == INT4OID) string_len = (int64) DatumGetInt32(arg); else if (type == INT8OID) string_len = (int64) DatumGetInt64(arg); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("right() unsupported argument type %d", type))); } else { agtype *agt_arg; agtype_value *agtv_value; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("right() only supports scalar arguments"))); agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* no need to check for agtype null because it is an error if found */ if (agtv_value->type != AGTV_INTEGER) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("right() unsupported argument agtype %d", agtv_value->type))); string_len = agtv_value->val.int_value; } /* negative values are not supported in the opencypher spec */ if (string_len < 0) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("right() negative values are not supported for length"))); /* * We need the string as a text string so that we can let PG deal with * multibyte characters in the string. */ text_string = DatumGetTextPP(DirectFunctionCall2(text_right, PointerGetDatum(text_string), Int64GetDatum(string_len))); /* convert it back to a cstring */ string = text_to_cstring(text_string); string_len = strlen(string); /* if we have an empty string, return null */ if (string_len == 0) PG_RETURN_NULL(); /* build the result */ agtv_result.type = AGTV_STRING; agtv_result.val.string.val = string; agtv_result.val.string.len = string_len; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_left); Datum age_left(PG_FUNCTION_ARGS) { int nargs; Datum *args; Datum arg; bool *nulls; Oid *types; agtype_value agtv_result; text *text_string = NULL; char *string = NULL; int string_len; Oid type; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 2) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("left() invalid number of arguments"))); /* check for a null string */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* check for a null length */ if (nulls[1]) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("left() length parameter cannot be null"))); /* left() supports text, cstring, or the agtype string input */ arg = args[0]; type = types[0]; if (type != AGTYPEOID) { if (type == CSTRINGOID) text_string = cstring_to_text(DatumGetCString(arg)); else if (type == TEXTOID) text_string = DatumGetTextPP(arg); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("left() unsupported argument type %d", type))); } else { agtype *agt_arg; agtype_value *agtv_value; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("left() only supports scalar arguments"))); agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* check for agtype null */ if (agtv_value->type == AGTV_NULL) PG_RETURN_NULL(); if (agtv_value->type == AGTV_STRING) text_string = cstring_to_text_with_len(agtv_value->val.string.val, agtv_value->val.string.len); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("left() unsupported argument agtype %d", agtv_value->type))); } /* left() only supports integer and agtype integer for the second parameter. */ arg = args[1]; type = types[1]; if (type != AGTYPEOID) { if (type == INT2OID) string_len = (int64) DatumGetInt16(arg); else if (type == INT4OID) string_len = (int64) DatumGetInt32(arg); else if (type == INT8OID) string_len = (int64) DatumGetInt64(arg); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("left() unsupported argument type %d", type))); } else { agtype *agt_arg; agtype_value *agtv_value; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("left() only supports scalar arguments"))); agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* no need to check for agtype null because it is an error if found */ if (agtv_value->type != AGTV_INTEGER) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("left() unsupported argument agtype %d", agtv_value->type))); string_len = agtv_value->val.int_value; } /* negative values are not supported in the opencypher spec */ if (string_len < 0) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("left() negative values are not supported for length"))); /* * We need the string as a text string so that we can let PG deal with * multibyte characters in the string. */ text_string = DatumGetTextPP(DirectFunctionCall2(text_left, PointerGetDatum(text_string), Int64GetDatum(string_len))); /* convert it back to a cstring */ string = text_to_cstring(text_string); string_len = strlen(string); /* if we have an empty string, return null */ if (string_len == 0) PG_RETURN_NULL(); /* build the result */ agtv_result.type = AGTV_STRING; agtv_result.val.string.val = string; agtv_result.val.string.len = string_len; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_substring); Datum age_substring(PG_FUNCTION_ARGS) { int nargs; Datum *args; Datum arg; bool *nulls; Oid *types; agtype_value agtv_result; text *text_string = NULL; char *string = NULL; int param; int string_start = 0; int string_len = 0; int i; Oid type; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs < 2 || nargs > 3) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("substring() invalid number of arguments"))); /* check for null */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* neither offset or length can be null if there is a valid string */ if ((nargs == 2 && nulls[1]) || (nargs == 3 && nulls[2])) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("substring() offset or length cannot be null"))); /* substring() supports text, cstring, or the agtype string input */ arg = args[0]; type = types[0]; if (type != AGTYPEOID) { if (type == CSTRINGOID) text_string = cstring_to_text(DatumGetCString(arg)); else if (type == TEXTOID) text_string = DatumGetTextPP(arg); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("substring() unsupported argument type %d", type))); } else { agtype *agt_arg; agtype_value *agtv_value; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("substring() only supports scalar arguments"))); agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* check for agtype null */ if (agtv_value->type == AGTV_NULL) PG_RETURN_NULL(); if (agtv_value->type == AGTV_STRING) text_string = cstring_to_text_with_len(agtv_value->val.string.val, agtv_value->val.string.len); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("substring() unsupported argument agtype %d", agtv_value->type))); } /* * substring() only supports integer and agtype integer for the second and * third parameters values. */ for (i = 1; i < nargs; i++) { arg = args[i]; type = types[i]; if (type != AGTYPEOID) { if (type == INT2OID) param = (int64) DatumGetInt16(arg); else if (type == INT4OID) param = (int64) DatumGetInt32(arg); else if (type == INT8OID) param = (int64) DatumGetInt64(arg); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("substring() unsupported argument type %d", type))); } else { agtype *agt_arg; agtype_value *agtv_value; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("substring() only supports scalar arguments"))); agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* no need to check for agtype null because it is an error if found */ if (agtv_value->type != AGTV_INTEGER) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("substring() unsupported argument agtype %d", agtv_value->type))); param = agtv_value->val.int_value; } if (i == 1) string_start = param; if (i == 2) string_len = param; } /* negative values are not supported in the opencypher spec */ if (string_start < 0 || string_len < 0) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("substring() negative values are not supported for offset or length"))); /* cypher substring is 0 based while PG's is 1 based */ string_start += 1; /* * We need the string as a text string so that we can let PG deal with * multibyte characters in the string. */ /* if optional length is left out */ if (nargs == 2) text_string = DatumGetTextPP(DirectFunctionCall2(text_substr_no_len, PointerGetDatum(text_string), Int64GetDatum(string_start))); /* if length is given */ else text_string = DatumGetTextPP(DirectFunctionCall3(text_substr, PointerGetDatum(text_string), Int64GetDatum(string_start), Int64GetDatum(string_len))); /* convert it back to a cstring */ string = text_to_cstring(text_string); string_len = strlen(string); /* if we have an empty string, return null */ if (string_len == 0) PG_RETURN_NULL(); /* build the result */ agtv_result.type = AGTV_STRING; agtv_result.val.string.val = string; agtv_result.val.string.len = string_len; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_split); Datum age_split(PG_FUNCTION_ARGS) { int nargs; Datum *args; Datum arg; bool *nulls; Oid *types; agtype_value *agtv_result; text *param = NULL; text *text_string = NULL; text *text_delimiter = NULL; Datum text_array; Oid type; int i; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 2) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("split() invalid number of arguments"))); /* check for a null string and delimiter */ if (nargs < 0 || nulls[0] || nulls[1]) PG_RETURN_NULL(); /* * split() supports text, cstring, or the agtype string input for the * string and delimiter values */ for (i = 0; i < 2; i++) { arg = args[i]; type = types[i]; if (type != AGTYPEOID) { if (type == CSTRINGOID) param = cstring_to_text(DatumGetCString(arg)); else if (type == TEXTOID) param = DatumGetTextPP(arg); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("split() unsupported argument type %d", type))); } else { agtype *agt_arg; agtype_value *agtv_value; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("split() only supports scalar arguments"))); agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* check for agtype null */ if (agtv_value->type == AGTV_NULL) PG_RETURN_NULL(); if (agtv_value->type == AGTV_STRING) param = cstring_to_text_with_len(agtv_value->val.string.val, agtv_value->val.string.len); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("split() unsupported argument agtype %d", agtv_value->type))); } if (i == 0) text_string = param; if (i == 1) text_delimiter = param; } /* * We need the strings as a text strings so that we can let PG deal with * multibyte characters in the string. The result is an ArrayType */ text_array = DirectFunctionCall2Coll(regexp_split_to_array, DEFAULT_COLLATION_OID, PointerGetDatum(text_string), PointerGetDatum(text_delimiter)); /* now build an agtype array of strings */ if (PointerIsValid(DatumGetPointer(text_array))) { ArrayType *array = DatumGetArrayTypeP(text_array); agtype_in_state result; Datum *elements; int nelements; /* zero the state and deconstruct the ArrayType to TEXTOID */ memset(&result, 0, sizeof(agtype_in_state)); deconstruct_array(array, TEXTOID, -1, false, 'i', &elements, NULL, &nelements); /* open the agtype array */ result.res = push_agtype_value(&result.parse_state, WAGT_BEGIN_ARRAY, NULL); /* add the values */ for (i = 0; i < nelements; i++) { char *string; int string_len; char *string_copy; agtype_value agtv_string; Datum d; /* get the string element from the array */ string = VARDATA(elements[i]); string_len = VARSIZE(elements[i]) - VARHDRSZ; /* make a copy */ string_copy = palloc0(string_len); memcpy(string_copy, string, string_len); /* build the agtype string */ agtv_string.type = AGTV_STRING; agtv_string.val.string.val = string_copy; agtv_string.val.string.len = string_len; /* get the datum */ d = PointerGetDatum(agtype_value_to_agtype(&agtv_string)); /* add the value */ add_agtype(d, false, &result, AGTYPEOID, false); } /* close the array */ result.res = push_agtype_value(&result.parse_state, WAGT_END_ARRAY, NULL); agtv_result = result.res; } else { elog(ERROR, "split() unexpected error"); } PG_RETURN_POINTER(agtype_value_to_agtype(agtv_result)); } PG_FUNCTION_INFO_V1(age_replace); Datum age_replace(PG_FUNCTION_ARGS) { int nargs; Datum *args; Datum arg; bool *nulls; Oid *types; agtype_value agtv_result; text *param = NULL; text *text_string = NULL; text *text_search = NULL; text *text_replace = NULL; text *text_result = NULL; char *string = NULL; int string_len; Oid type; int i; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 3) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("replace() invalid number of arguments"))); /* check for a null string, search, and replace */ if (nargs < 0 || nulls[0] || nulls[1] || nulls[2]) PG_RETURN_NULL(); /* * replace() supports text, cstring, or the agtype string input for the * string and delimiter values */ for (i = 0; i < 3; i++) { arg = args[i]; type = types[i]; if (type != AGTYPEOID) { if (type == CSTRINGOID) param = cstring_to_text(DatumGetCString(arg)); else if (type == TEXTOID) param = DatumGetTextPP(arg); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("replace() unsupported argument type %d", type))); } else { agtype *agt_arg; agtype_value *agtv_value; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("replace() only supports scalar arguments"))); agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* check for agtype null */ if (agtv_value->type == AGTV_NULL) PG_RETURN_NULL(); if (agtv_value->type == AGTV_STRING) param = cstring_to_text_with_len(agtv_value->val.string.val, agtv_value->val.string.len); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("replace() unsupported argument agtype %d", agtv_value->type))); } if (i == 0) text_string = param; if (i == 1) text_search = param; if (i == 2) text_replace = param; } /* * We need the strings as a text strings so that we can let PG deal with * multibyte characters in the string. */ text_result = DatumGetTextPP(DirectFunctionCall3Coll( replace_text, C_COLLATION_OID, PointerGetDatum(text_string), PointerGetDatum(text_search), PointerGetDatum(text_replace))); /* convert it back to a cstring */ string = text_to_cstring(text_result); string_len = strlen(string); /* if we have an empty string, return null */ if (string_len == 0) PG_RETURN_NULL(); /* build the result */ agtv_result.type = AGTV_STRING; agtv_result.val.string.val = string; agtv_result.val.string.len = string_len; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } /* * Helper function to extract one float8 compatible value from a variadic any. * It supports integer2/4/8, float4/8, and numeric or the agtype integer, float, * and numeric for the argument. It does not support a character based float, * otherwise we would just use tofloat. It returns a float on success or fails * with a message stating the funcname that called it and a specific message * stating the error. */ static float8 get_float_compatible_arg(Datum arg, Oid type, char *funcname, bool *is_null) { float8 result; /* Assume the value is null. Although, this is only necessary for agtypes */ *is_null = true; if (type != AGTYPEOID) { if (type == INT2OID) result = (float8) DatumGetInt16(arg); else if (type == INT4OID) result = (float8) DatumGetInt32(arg); else if (type == INT8OID) { /* * Get the string representation of the integer because it could be * too large to fit in a float. Let the float routine determine * what to do with it. */ char *string = DatumGetCString(DirectFunctionCall1(int8out, arg)); bool is_valid = false; /* turn it into a float */ result = float8in_internal_null(string, NULL, "double precision", string, &is_valid); /* return 0 if it was an invalid float */ if (!is_valid) return 0; } else if (type == FLOAT4OID) result = (float8) DatumGetFloat4(arg); else if (type == FLOAT8OID) result = DatumGetFloat8(arg); else if (type == NUMERICOID) result = DatumGetFloat8(DirectFunctionCall1( numeric_float8_no_overflow, arg)); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("%s() unsupported argument type %d", funcname, type))); } else { agtype *agt_arg; agtype_value *agtv_value; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("%s() only supports scalar arguments", funcname))); agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* check for agtype null */ if (agtv_value->type == AGTV_NULL) return 0; if (agtv_value->type == AGTV_INTEGER) { /* * Get the string representation of the integer because it could be * too large to fit in a float. Let the float routine determine * what to do with it. */ bool is_valid = false; char *string = DatumGetCString(DirectFunctionCall1(int8out, Int64GetDatum(agtv_value->val.int_value))); /* turn it into a float */ result = float8in_internal_null(string, NULL, "double precision", string, &is_valid); /* return null if it was not a valid float */ if (!is_valid) return 0; } else if (agtv_value->type == AGTV_FLOAT) result = agtv_value->val.float_value; else if (agtv_value->type == AGTV_NUMERIC) result = DatumGetFloat8(DirectFunctionCall1( numeric_float8_no_overflow, NumericGetDatum(agtv_value->val.numeric))); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("%s() unsupported argument agtype %d", funcname, agtv_value->type))); } /* there is a valid non null value */ *is_null = false; return result; } /* * Helper function to extract one numeric compatible value from a variadic any. * It supports integer2/4/8, float4/8, and numeric or the agtype integer, float, * and numeric for the argument. It does not support a character based numeric, * otherwise we would just cast it to numeric. It returns a numeric on success * or fails with a message stating the funcname that called it and a specific * message stating the error. */ static Numeric get_numeric_compatible_arg(Datum arg, Oid type, char *funcname, bool *is_null, enum agtype_value_type *ag_type) { Numeric result; /* Assume the value is null. Although, this is only necessary for agtypes */ *is_null = true; if (ag_type != NULL) *ag_type = AGTV_NULL; if (type != AGTYPEOID) { if (type == INT2OID) result = DatumGetNumeric(DirectFunctionCall1(int2_numeric, arg)); else if (type == INT4OID) result = DatumGetNumeric(DirectFunctionCall1(int4_numeric, arg)); else if (type == INT8OID) result = DatumGetNumeric(DirectFunctionCall1(int8_numeric, arg)); else if (type == FLOAT4OID) result = DatumGetNumeric(DirectFunctionCall1(float4_numeric, arg)); else if (type == FLOAT8OID) result = DatumGetNumeric(DirectFunctionCall1(float8_numeric, arg)); else if (type == NUMERICOID) result = DatumGetNumeric(arg); else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("%s() unsupported argument type %d", funcname, type))); } else { agtype *agt_arg; agtype_value *agtv_value; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(arg); if (!AGT_ROOT_IS_SCALAR(agt_arg)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("%s() only supports scalar arguments", funcname))); agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* check for agtype null */ if (agtv_value->type == AGTV_NULL) return 0; if (agtv_value->type == AGTV_INTEGER) { result = DatumGetNumeric(DirectFunctionCall1( int8_numeric, Int64GetDatum(agtv_value->val.int_value))); if (ag_type != NULL) *ag_type = AGTV_INTEGER; } else if (agtv_value->type == AGTV_FLOAT) { result = DatumGetNumeric(DirectFunctionCall1( float8_numeric, Float8GetDatum(agtv_value->val.float_value))); if (ag_type != NULL) *ag_type = AGTV_FLOAT; } else if (agtv_value->type == AGTV_NUMERIC) { result = agtv_value->val.numeric; if (ag_type != NULL) *ag_type = AGTV_NUMERIC; } else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("%s() unsupported argument agtype %d", funcname, agtv_value->type))); } /* there is a valid non null value */ *is_null = false; return result; } PG_FUNCTION_INFO_V1(age_sin); Datum age_sin(PG_FUNCTION_ARGS) { int nargs; Datum *args; bool *nulls; Oid *types; agtype_value agtv_result; float8 angle; float8 result; bool is_null = true; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("sin() invalid number of arguments"))); /* check for a null input */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* * sin() supports integer, float, and numeric or the agtype integer, float, * and numeric for the angle */ angle = get_float_compatible_arg(args[0], types[0], "sin", &is_null); /* check for a agtype null input */ if (is_null) PG_RETURN_NULL(); /* We need the numeric input as a float8 so that we can pass it off to PG */ result = DatumGetFloat8(DirectFunctionCall1(dsin, Float8GetDatum(angle))); /* build the result */ agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = result; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_cos); Datum age_cos(PG_FUNCTION_ARGS) { int nargs; Datum *args; bool *nulls; Oid *types; agtype_value agtv_result; float8 angle; float8 result; bool is_null = true; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("cos() invalid number of arguments"))); /* check for a null input */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* * cos() supports integer, float, and numeric or the agtype integer, float, * and numeric for the angle */ angle = get_float_compatible_arg(args[0], types[0], "cos", &is_null); /* check for a agtype null input */ if (is_null) PG_RETURN_NULL(); /* We need the numeric input as a float8 so that we can pass it off to PG */ result = DatumGetFloat8(DirectFunctionCall1(dcos, Float8GetDatum(angle))); /* build the result */ agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = result; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_tan); Datum age_tan(PG_FUNCTION_ARGS) { int nargs; Datum *args; bool *nulls; Oid *types; agtype_value agtv_result; float8 angle; float8 result; bool is_null = true; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("tan() invalid number of arguments"))); /* check for a null input */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* * tan() supports integer, float, and numeric or the agtype integer, float, * and numeric for the angle */ angle = get_float_compatible_arg(args[0], types[0], "tan", &is_null); /* check for a agtype null input */ if (is_null) PG_RETURN_NULL(); /* We need the numeric input as a float8 so that we can pass it off to PG */ result = DatumGetFloat8(DirectFunctionCall1(dtan, Float8GetDatum(angle))); /* build the result */ agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = result; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_cot); Datum age_cot(PG_FUNCTION_ARGS) { int nargs; Datum *args; bool *nulls; Oid *types; agtype_value agtv_result; float8 angle; float8 result; bool is_null = true; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("cot() invalid number of arguments"))); /* check for a null input */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* * cot() supports integer, float, and numeric or the agtype integer, float, * and numeric for the angle */ angle = get_float_compatible_arg(args[0], types[0], "cot", &is_null); /* check for a agtype null input */ if (is_null) PG_RETURN_NULL(); /* We need the numeric input as a float8 so that we can pass it off to PG */ result = DatumGetFloat8(DirectFunctionCall1(dcot, Float8GetDatum(angle))); /* build the result */ agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = result; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_asin); Datum age_asin(PG_FUNCTION_ARGS) { int nargs; Datum *args; bool *nulls; Oid *types; agtype_value agtv_result; float8 x; float8 angle; bool is_null = true; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("asin() invalid number of arguments"))); /* check for a null input */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* * asin() supports integer, float, and numeric or the agtype integer, float, * and numeric for the input expression. */ x = get_float_compatible_arg(args[0], types[0], "asin", &is_null); /* verify that x is within range */ if (x < -1 || x > 1) PG_RETURN_NULL(); /* check for a agtype null input */ if (is_null) PG_RETURN_NULL(); /* We need the numeric input as a float8 so that we can pass it off to PG */ angle = DatumGetFloat8(DirectFunctionCall1(dasin, Float8GetDatum(x))); /* build the result */ agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = angle; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_acos); Datum age_acos(PG_FUNCTION_ARGS) { int nargs; Datum *args; bool *nulls; Oid *types; agtype_value agtv_result; float8 x; float8 angle; bool is_null = true; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("acos() invalid number of arguments"))); /* check for a null input */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* * acos() supports integer, float, and numeric or the agtype integer, float, * and numeric for the input expression. */ x = get_float_compatible_arg(args[0], types[0], "acos", &is_null); /* verify that x is within range */ if (x < -1 || x > 1) PG_RETURN_NULL(); /* check for a agtype null input */ if (is_null) PG_RETURN_NULL(); /* We need the numeric input as a float8 so that we can pass it off to PG */ angle = DatumGetFloat8(DirectFunctionCall1(dacos, Float8GetDatum(x))); /* build the result */ agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = angle; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_atan); Datum age_atan(PG_FUNCTION_ARGS) { int nargs; Datum *args; bool *nulls; Oid *types; agtype_value agtv_result; float8 x; float8 angle; bool is_null = true; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("atan() invalid number of arguments"))); /* check for a null input */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* * atan() supports integer, float, and numeric or the agtype integer, float, * and numeric for the input expression. */ x = get_float_compatible_arg(args[0], types[0], "atan", &is_null); /* check for a agtype null input */ if (is_null) PG_RETURN_NULL(); /* We need the numeric input as a float8 so that we can pass it off to PG */ angle = DatumGetFloat8(DirectFunctionCall1(datan, Float8GetDatum(x))); /* build the result */ agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = angle; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_atan2); Datum age_atan2(PG_FUNCTION_ARGS) { int nargs; Datum *args; bool *nulls; Oid *types; agtype_value agtv_result; float8 x, y; float8 angle; bool is_null = true; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 2) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("atan2() invalid number of arguments"))); /* check for a null input */ if (nargs < 0 || nulls[0] || nulls[1]) PG_RETURN_NULL(); /* * atan2() supports integer, float, and numeric or the agtype integer, * float, and numeric for the input expressions. */ y = get_float_compatible_arg(args[0], types[0], "atan2", &is_null); /* check for a agtype null input */ if (is_null) PG_RETURN_NULL(); x = get_float_compatible_arg(args[1], types[1], "atan2", &is_null); /* check for a agtype null input */ if (is_null) PG_RETURN_NULL(); /* We need the numeric input as a float8 so that we can pass it off to PG */ angle = DatumGetFloat8(DirectFunctionCall2(datan2, Float8GetDatum(y), Float8GetDatum(x))); /* build the result */ agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = angle; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_degrees); Datum age_degrees(PG_FUNCTION_ARGS) { int nargs; Datum *args; bool *nulls; Oid *types; agtype_value agtv_result; float8 angle_degrees; float8 angle_radians; bool is_null = true; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("degrees() invalid number of arguments"))); /* check for a null input */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* * degrees_from_radians() supports integer, float, and numeric or the agtype * integer, float, and numeric for the input expression. */ angle_radians = get_float_compatible_arg(args[0], types[0], "degrees", &is_null); /* check for a agtype null input */ if (is_null) PG_RETURN_NULL(); /* We need the numeric input as a float8 so that we can pass it off to PG */ angle_degrees = DatumGetFloat8(DirectFunctionCall1(degrees, Float8GetDatum(angle_radians))); /* build the result */ agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = angle_degrees; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_radians); Datum age_radians(PG_FUNCTION_ARGS) { int nargs; Datum *args; bool *nulls; Oid *types; agtype_value agtv_result; float8 angle_degrees; float8 angle_radians; bool is_null = true; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("radians() invalid number of arguments"))); /* check for a null input */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* * radians_from_degrees() supports integer, float, and numeric or the agtype * integer, float, and numeric for the input expression. */ angle_degrees = get_float_compatible_arg(args[0], types[0], "radians", &is_null); /* check for a agtype null input */ if (is_null) PG_RETURN_NULL(); /* We need the numeric input as a float8 so that we can pass it off to PG */ angle_radians = DatumGetFloat8(DirectFunctionCall1(radians, Float8GetDatum(angle_degrees))); /* build the result */ agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = angle_radians; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_round); Datum age_round(PG_FUNCTION_ARGS) { Datum *args = NULL; bool *nulls = NULL; Oid *types = NULL; int nargs = 0; agtype_value agtv_result; Numeric arg, arg_precision; Numeric numeric_result; float8 float_result; bool is_null = true; int precision = 0; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 1 && nargs != 2) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("round() invalid number of arguments"))); } /* check for a null input */ if (nargs < 0 || nulls[0]) { PG_RETURN_NULL(); } /* * round() supports integer, float, and numeric or the agtype integer, * float, and numeric for the input expression. */ arg = get_numeric_compatible_arg(args[0], types[0], "round", &is_null, NULL); /* check for a agtype null input */ if (is_null) { PG_RETURN_NULL(); } /* We need the input as a numeric so that we can pass it off to PG */ if (nargs == 2 && !nulls[1]) { arg_precision = get_numeric_compatible_arg(args[1], types[1], "round", &is_null, NULL); if (!is_null) { precision = DatumGetInt64(DirectFunctionCall1(numeric_int8, NumericGetDatum(arg_precision))); numeric_result = DatumGetNumeric(DirectFunctionCall2(numeric_round, NumericGetDatum(arg), Int32GetDatum(precision))); } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("round() invalid NULL precision value"))); } } else { numeric_result = DatumGetNumeric(DirectFunctionCall2(numeric_round, NumericGetDatum(arg), Int32GetDatum(0))); } float_result = DatumGetFloat8(DirectFunctionCall1(numeric_float8_no_overflow, NumericGetDatum(numeric_result))); /* build the result */ agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = float_result; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_ceil); Datum age_ceil(PG_FUNCTION_ARGS) { int nargs; Datum *args; bool *nulls; Oid *types; agtype_value agtv_result; Numeric arg; Numeric numeric_result; float8 float_result; bool is_null = true; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("ceil() invalid number of arguments"))); /* check for a null input */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* * ceil() supports integer, float, and numeric or the agtype integer, * float, and numeric for the input expression. */ arg = get_numeric_compatible_arg(args[0], types[0], "ceil", &is_null, NULL); /* check for a agtype null input */ if (is_null) PG_RETURN_NULL(); /* We need the input as a numeric so that we can pass it off to PG */ numeric_result = DatumGetNumeric(DirectFunctionCall1(numeric_ceil, NumericGetDatum(arg))); float_result = DatumGetFloat8(DirectFunctionCall1(numeric_float8_no_overflow, NumericGetDatum(numeric_result))); /* build the result */ agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = float_result; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_floor); Datum age_floor(PG_FUNCTION_ARGS) { int nargs; Datum *args; bool *nulls; Oid *types; agtype_value agtv_result; Numeric arg; Numeric numeric_result; float8 float_result; bool is_null = true; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("floor() invalid number of arguments"))); /* check for a null input */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* * floor() supports integer, float, and numeric or the agtype integer, * float, and numeric for the input expression. */ arg = get_numeric_compatible_arg(args[0], types[0], "floor", &is_null, NULL); /* check for a agtype null input */ if (is_null) PG_RETURN_NULL(); /* We need the input as a numeric so that we can pass it off to PG */ numeric_result = DatumGetNumeric(DirectFunctionCall1(numeric_floor, NumericGetDatum(arg))); float_result = DatumGetFloat8(DirectFunctionCall1(numeric_float8_no_overflow, NumericGetDatum(numeric_result))); /* build the result */ agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = float_result; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_abs); Datum age_abs(PG_FUNCTION_ARGS) { int nargs; Datum *args; bool *nulls; Oid *types; agtype_value agtv_result; Numeric arg; Numeric numeric_result; bool is_null = true; enum agtype_value_type type = AGTV_NULL; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("abs() invalid number of arguments"))); /* check for a null input */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* * abs() supports integer, float, and numeric or the agtype integer, * float, and numeric for the input expression. */ arg = get_numeric_compatible_arg(args[0], types[0], "abs", &is_null, &type); /* check for a agtype null input */ if (is_null) PG_RETURN_NULL(); /* We need the input as a numeric so that we can pass it off to PG */ numeric_result = DatumGetNumeric(DirectFunctionCall1(numeric_abs, NumericGetDatum(arg))); /* build the result, based on the type */ if (types[0] == INT2OID || types[0] == INT4OID || types[0] == INT8OID || (types[0] == AGTYPEOID && type == AGTV_INTEGER)) { int64 int_result; int_result = DatumGetInt64(DirectFunctionCall1(numeric_int8, NumericGetDatum(numeric_result))); agtv_result.type = AGTV_INTEGER; agtv_result.val.int_value = int_result; } if (types[0] == FLOAT4OID || types[0] == FLOAT8OID || (types[0] == AGTYPEOID && type == AGTV_FLOAT)) { float8 float_result; float_result = DatumGetFloat8(DirectFunctionCall1(numeric_float8_no_overflow, NumericGetDatum(numeric_result))); agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = float_result; } if (types[0] == NUMERICOID || (types[0] == AGTYPEOID && type == AGTV_NUMERIC)) { agtv_result.type = AGTV_NUMERIC; agtv_result.val.numeric = numeric_result; } PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_sign); Datum age_sign(PG_FUNCTION_ARGS) { int nargs; Datum *args; bool *nulls; Oid *types; agtype_value agtv_result; Numeric arg; Numeric numeric_result; int int_result; bool is_null = true; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("sign() invalid number of arguments"))); /* check for a null input */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* * sign() supports integer, float, and numeric or the agtype integer, * float, and numeric for the input expression. */ arg = get_numeric_compatible_arg(args[0], types[0], "sign", &is_null, NULL); /* check for a agtype null input */ if (is_null) PG_RETURN_NULL(); /* We need the input as a numeric so that we can pass it off to PG */ numeric_result = DatumGetNumeric(DirectFunctionCall1(numeric_sign, NumericGetDatum(arg))); int_result = DatumGetInt64(DirectFunctionCall1(numeric_int8, NumericGetDatum(numeric_result))); /* build the result */ agtv_result.type = AGTV_INTEGER; agtv_result.val.int_value = int_result; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_log); Datum age_log(PG_FUNCTION_ARGS) { int nargs; Datum *args; bool *nulls; Oid *types; agtype_value agtv_result; Numeric arg; Numeric zero; Numeric numeric_result; float8 float_result; bool is_null = true; int test; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("log() invalid number of arguments"))); /* check for a null input */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* * log() supports integer, float, and numeric or the agtype integer, * float, and numeric for the input expression. */ arg = get_numeric_compatible_arg(args[0], types[0], "log", &is_null, NULL); /* check for a agtype null input */ if (is_null) PG_RETURN_NULL(); /* get a numeric 0 as a datum to test <= 0 log args */ zero = DatumGetNumeric(DirectFunctionCall1(int8_numeric, Int64GetDatum(0))); test = DatumGetInt32(DirectFunctionCall2(numeric_cmp, NumericGetDatum(arg), NumericGetDatum(zero))); /* return null if the argument is <= 0; these are invalid args for logs */ if (test <= 0) PG_RETURN_NULL(); /* We need the input as a numeric so that we can pass it off to PG */ numeric_result = DatumGetNumeric(DirectFunctionCall1(numeric_ln, NumericGetDatum(arg))); float_result = DatumGetFloat8(DirectFunctionCall1(numeric_float8_no_overflow, NumericGetDatum(numeric_result))); /* build the result */ agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = float_result; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_log10); Datum age_log10(PG_FUNCTION_ARGS) { int nargs; Datum *args; bool *nulls; Oid *types; agtype_value agtv_result; Numeric arg; Numeric zero; Numeric numeric_result; float8 float_result; Datum base; bool is_null = true; int test; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("log() invalid number of arguments"))); /* check for a null input */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* * log10() supports integer, float, and numeric or the agtype integer, * float, and numeric for the input expression. */ arg = get_numeric_compatible_arg(args[0], types[0], "log10", &is_null, NULL); /* check for a agtype null input */ if (is_null) PG_RETURN_NULL(); /* get a numeric 0 as a datum to test <= 0 log args */ zero = DatumGetNumeric(DirectFunctionCall1(int8_numeric, Int64GetDatum(0))); test = DatumGetInt32(DirectFunctionCall2(numeric_cmp, NumericGetDatum(arg), NumericGetDatum(zero))); /* return null if the argument is <= 0; these are invalid args for logs */ if (test <= 0) PG_RETURN_NULL(); /* get a numeric 10 as a datum for the base */ base = DirectFunctionCall1(float8_numeric, Float8GetDatum(10.0)); /* We need the input as a numeric so that we can pass it off to PG */ numeric_result = DatumGetNumeric(DirectFunctionCall2(numeric_log, base, NumericGetDatum(arg))); float_result = DatumGetFloat8(DirectFunctionCall1(numeric_float8_no_overflow, NumericGetDatum(numeric_result))); /* build the result */ agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = float_result; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_e); Datum age_e(PG_FUNCTION_ARGS) { agtype_value agtv_result; float8 float_result; /* get e by raising e to 1 - no, they don't have a constant e :/ */ float_result = DatumGetFloat8(DirectFunctionCall1(dexp, Float8GetDatum(1))); /* build the result */ agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = float_result; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_pi); Datum age_pi(PG_FUNCTION_ARGS) { agtype_value agtv_result; float8 float_result; float_result = DatumGetFloat8(DirectFunctionCall1(dpi, 0)); /* build the result */ agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = float_result; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_rand); Datum age_rand(PG_FUNCTION_ARGS) { agtype_value agtv_result; float8 float_result; float_result = DatumGetFloat8(DirectFunctionCall1(drandom, 0)); /* build the result */ agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = float_result; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_exp); Datum age_exp(PG_FUNCTION_ARGS) { int nargs; Datum *args; bool *nulls; Oid *types; agtype_value agtv_result; Numeric arg; Numeric numeric_result; float8 float_result; bool is_null = true; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("exp() invalid number of arguments"))); /* check for a null input */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* * exp() supports integer, float, and numeric or the agtype integer, * float, and numeric for the input expression. */ arg = get_numeric_compatible_arg(args[0], types[0], "exp", &is_null, NULL); /* check for a agtype null input */ if (is_null) PG_RETURN_NULL(); /* We need the input as a numeric so that we can pass it off to PG */ numeric_result = DatumGetNumeric(DirectFunctionCall1(numeric_exp, NumericGetDatum(arg))); float_result = DatumGetFloat8(DirectFunctionCall1(numeric_float8_no_overflow, NumericGetDatum(numeric_result))); /* build the result */ agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = float_result; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_sqrt); Datum age_sqrt(PG_FUNCTION_ARGS) { int nargs; Datum *args; bool *nulls; Oid *types; agtype_value agtv_result; Numeric arg; Numeric zero; Numeric numeric_result; float8 float_result; bool is_null = true; int test; /* extract argument values */ nargs = extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); /* check number of args */ if (nargs != 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("sqrt() invalid number of arguments"))); /* check for a null input */ if (nargs < 0 || nulls[0]) PG_RETURN_NULL(); /* * sqrt() supports integer, float, and numeric or the agtype integer, * float, and numeric for the input expression. */ arg = get_numeric_compatible_arg(args[0], types[0], "sqrt", &is_null, NULL); /* check for a agtype null input */ if (is_null) PG_RETURN_NULL(); /* get a numeric 0 as a datum to test < 0 sqrt args */ zero = DatumGetNumeric(DirectFunctionCall1(int8_numeric, Int64GetDatum(0))); test = DatumGetInt32(DirectFunctionCall2(numeric_cmp, NumericGetDatum(arg), NumericGetDatum(zero))); /* return null if the argument is < 0; these are invalid args for sqrt */ if (test < 0) PG_RETURN_NULL(); /* We need the input as a numeric so that we can pass it off to PG */ numeric_result = DatumGetNumeric(DirectFunctionCall1(numeric_sqrt, NumericGetDatum(arg))); float_result = DatumGetFloat8(DirectFunctionCall1(numeric_float8_no_overflow, NumericGetDatum(numeric_result))); /* build the result */ agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = float_result; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(age_timestamp); Datum age_timestamp(PG_FUNCTION_ARGS) { agtype_value agtv_result; struct timespec ts; long ms = 0; /* get the system time and convert it to milliseconds */ clock_gettime(CLOCK_REALTIME, &ts); ms += (ts.tv_sec * 1000) + (ts.tv_nsec / 1000000); /* build the result */ agtv_result.type = AGTV_INTEGER; agtv_result.val.int_value = ms; PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } /* * Converts an agtype object or array to a binary agtype_value. */ agtype_value *agtype_composite_to_agtype_value_binary(agtype *a) { agtype_value *result; if (AGTYPE_CONTAINER_IS_SCALAR(&a->root)) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("cannot convert agtype scalar objects to binary agtype_value objects"))); } result = palloc(sizeof(agtype_value)); // convert the agtype to a binary agtype_value result->type = AGTV_BINARY; result->val.binary.len = AGTYPE_CONTAINER_SIZE(&a->root); result->val.binary.data = &a->root; return result; } /* * For the given properties, update the property with the key equal * to var_name with the value defined in new_v. If the remove_property * flag is set, simply remove the property with the given property * name instead. */ agtype_value *alter_property_value(agtype_value *properties, char *var_name, agtype *new_v, bool remove_property) { agtype_iterator *it; agtype_iterator_token tok = WAGT_DONE; agtype_parse_state *parse_state = NULL; agtype_value *r; agtype *prop_agtype; agtype_value *parsed_agtype_value = NULL; bool found; // if no properties, return NULL if (properties == NULL) { return NULL; } // if properties is not an object, throw an error if (properties->type != AGTV_OBJECT) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("can only update objects"))); } r = palloc0(sizeof(agtype_value)); prop_agtype = agtype_value_to_agtype(properties); it = agtype_iterator_init(&prop_agtype->root); tok = agtype_iterator_next(&it, r, true); parsed_agtype_value = push_agtype_value(&parse_state, tok, tok < WAGT_BEGIN_ARRAY ? r : NULL); /* * If the new value is NULL, this is equivalent to the remove_property * flag set to true. */ if (new_v == NULL) { remove_property = true; } found = false; while (true) { char *str; tok = agtype_iterator_next(&it, r, true); if (tok == WAGT_DONE || tok == WAGT_END_OBJECT) { break; } str = pnstrdup(r->val.string.val, r->val.string.len); /* * Check the key value, if it is equal to the passed in * var_name, replace the value for this key with the passed * in agtype. Otherwise pass the existing value to the * new properties agtype_value. */ if (strcmp(str, var_name)) { // push the key parsed_agtype_value = push_agtype_value( &parse_state, tok, tok < WAGT_BEGIN_ARRAY ? r : NULL); // get the value and push the value tok = agtype_iterator_next(&it, r, true); parsed_agtype_value = push_agtype_value(&parse_state, tok, r); } else { agtype_value *new_agtype_value_v; // if the remove flag is set, don't push the key or any value if(remove_property) { // skip the value tok = agtype_iterator_next(&it, r, true); continue; } // push the key parsed_agtype_value = push_agtype_value( &parse_state, tok, tok < WAGT_BEGIN_ARRAY ? r : NULL); // skip the existing value for the key tok = agtype_iterator_next(&it, r, true); /* * If the new agtype is scalar, push the agtype_value to the * parse state. If the agtype is an object or array convert the * agtype to a binary agtype_value to pass to the parse_state. * This will save unnecessary deserialization and serialization * logic from running. */ if (AGTYPE_CONTAINER_IS_SCALAR(&new_v->root)) { //get the scalar value and push as the value new_agtype_value_v = get_ith_agtype_value_from_container(&new_v->root, 0); parsed_agtype_value = push_agtype_value(&parse_state, WAGT_VALUE, new_agtype_value_v); } else { agtype_value *result = agtype_composite_to_agtype_value_binary(new_v); parsed_agtype_value = push_agtype_value(&parse_state, WAGT_VALUE, result); } found = true; } } /* * If we have not found the property and we aren't trying to remove it, * add the key/value pair now. */ if (!found && !remove_property) { agtype_value *new_agtype_value_v; agtype_value *key = string_to_agtype_value(var_name); // push the new key parsed_agtype_value = push_agtype_value( &parse_state, WAGT_KEY, key); /* * If the new agtype is scalar, push the agtype_value to the * parse state. If the agtype is an object or array convert the * agtype to a binary agtype_value to pass to the parse_state. * This will save unnecessary deserialization and serialization * logic from running. */ if (AGTYPE_CONTAINER_IS_SCALAR(&new_v->root)) { new_agtype_value_v = get_ith_agtype_value_from_container(&new_v->root, 0); // convert the agtype array or object to a binary agtype_value parsed_agtype_value = push_agtype_value(&parse_state, WAGT_VALUE, new_agtype_value_v); } else { agtype_value *result = agtype_composite_to_agtype_value_binary(new_v); parsed_agtype_value = push_agtype_value(&parse_state, WAGT_VALUE, result); } } // push the end object token to parse state parsed_agtype_value = push_agtype_value(&parse_state, WAGT_END_OBJECT, NULL); return parsed_agtype_value; } /* * Appends new_properties into a copy of original_properties. If the * original_properties is NULL, returns new_properties. * * This is a helper function used by the SET clause executor for * updating properties with the equal, or plus-equal operator and a map. */ agtype_value *alter_properties(agtype_value *original_properties, agtype *new_properties) { agtype_iterator *it; agtype_iterator_token tok = WAGT_DONE; agtype_parse_state *parse_state = NULL; agtype_value *key; agtype_value *value; agtype_value *parsed_agtype_value = NULL; parsed_agtype_value = push_agtype_value(&parse_state, WAGT_BEGIN_OBJECT, NULL); // Copy original properties. if (original_properties) { if (original_properties->type != AGTV_OBJECT) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("a map is expected"))); } copy_agtype_value(parse_state, original_properties, &parsed_agtype_value, true); } // Append new properties. key = palloc0(sizeof(agtype_value)); value = palloc0(sizeof(agtype_value)); it = agtype_iterator_init(&new_properties->root); tok = agtype_iterator_next(&it, key, true); if (tok != WAGT_BEGIN_OBJECT) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("a map is expected"))); } while (true) { tok = agtype_iterator_next(&it, key, true); if (tok == WAGT_DONE || tok == WAGT_END_OBJECT) { break; } agtype_iterator_next(&it, value, true); parsed_agtype_value = push_agtype_value(&parse_state, WAGT_KEY, key); parsed_agtype_value = push_agtype_value(&parse_state, WAGT_VALUE, value); } parsed_agtype_value = push_agtype_value(&parse_state, WAGT_END_OBJECT, NULL); return parsed_agtype_value; } /* * Helper function to extract 1 datum from a variadic "any" and convert, if * possible, to an agtype, if it isn't already. * * If the value is a NULL or agtype NULL, the function returns NULL. * If the datum cannot be converted, the function will error out in * extract_variadic_args. */ agtype *get_one_agtype_from_variadic_args(FunctionCallInfo fcinfo, int variadic_offset, int expected_nargs) { int nargs; Datum *args = NULL; bool *nulls = NULL; Oid *types = NULL; agtype *agtype_result = NULL; nargs = extract_variadic_args(fcinfo, variadic_offset, false, &args, &types, &nulls); /* throw an error if the number of args is not the expected number */ if (nargs != expected_nargs) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("number of args %d does not match expected %d", nargs, expected_nargs))); } /* if null, return null */ if (nulls[0]) { return NULL; } /* if type is AGTYPEOID, we don't need to convert it */ if (types[0] == AGTYPEOID) { agtype_container *agtc; agtype_result = DATUM_GET_AGTYPE_P(args[0]); agtc = &agtype_result->root; /* * Is this a scalar (scalars are stored as one element arrays)? If so, * test for agtype NULL. */ if (AGTYPE_CONTAINER_IS_SCALAR(agtc) && AGTE_IS_NULL(agtc->children[0])) { return NULL; } } /* otherwise, try to convert it to an agtype */ else { agtype_in_state state; agt_type_category tcategory; Oid outfuncoid; /* we need an empty state */ state.parse_state = NULL; state.res = NULL; /* get the category for the datum */ agtype_categorize_type(types[0], &tcategory, &outfuncoid); /* convert it to an agtype_value */ datum_to_agtype(args[0], false, &state, tcategory, outfuncoid, false); /* convert it to an agtype */ agtype_result = agtype_value_to_agtype(state.res); } return agtype_result; } /* * Transfer function for age_sum(agtype, agtype). * * Note: that the running sum will change type depending on the * precision of the input. The most precise value determines the * result type. * * Note: The sql definition is STRICT so no input NULLs need to * be dealt with except for agtype. */ PG_FUNCTION_INFO_V1(age_agtype_sum); Datum age_agtype_sum(PG_FUNCTION_ARGS) { agtype *agt_arg0 = AG_GET_ARG_AGTYPE_P(0); agtype *agt_arg1 = AG_GET_ARG_AGTYPE_P(1); agtype_value *agtv_lhs; agtype_value *agtv_rhs; agtype_value agtv_result; /* get our args */ agt_arg0 = AG_GET_ARG_AGTYPE_P(0); agt_arg1 = AG_GET_ARG_AGTYPE_P(1); /* only scalars are allowed */ if (!AGT_ROOT_IS_SCALAR(agt_arg0) || !AGT_ROOT_IS_SCALAR(agt_arg1)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("arguments must resolve to a scalar"))); /* get the values */ agtv_lhs = get_ith_agtype_value_from_container(&agt_arg0->root, 0); agtv_rhs = get_ith_agtype_value_from_container(&agt_arg1->root, 0); /* only numbers are allowed */ if ((agtv_lhs->type != AGTV_INTEGER && agtv_lhs->type != AGTV_FLOAT && agtv_lhs->type != AGTV_NUMERIC) || (agtv_rhs->type != AGTV_INTEGER && agtv_rhs->type != AGTV_FLOAT && agtv_rhs->type != AGTV_NUMERIC)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("arguments must resolve to a number"))); /* check for agtype null */ if (agtv_lhs->type == AGTV_NULL) PG_RETURN_POINTER(agt_arg1); if (agtv_rhs->type == AGTV_NULL) PG_RETURN_POINTER(agt_arg0); /* we want to maintain the precision of the most precise input */ if (agtv_lhs->type == AGTV_NUMERIC || agtv_rhs->type == AGTV_NUMERIC) { agtv_result.type = AGTV_NUMERIC; } else if (agtv_lhs->type == AGTV_FLOAT || agtv_rhs->type == AGTV_FLOAT) { agtv_result.type = AGTV_FLOAT; } else { agtv_result.type = AGTV_INTEGER; } /* switch on the type to perform the correct addition */ switch(agtv_result.type) { /* if the type is integer, they are obviously both ints */ case AGTV_INTEGER: agtv_result.val.int_value = DatumGetInt64( DirectFunctionCall2(int8pl, Int64GetDatum(agtv_lhs->val.int_value), Int64GetDatum(agtv_rhs->val.int_value))); break; /* for float it can be either, float + float or float + int */ case AGTV_FLOAT: { Datum dfl; Datum dfr; Datum dresult; /* extract and convert the values as necessary */ /* float + float */ if (agtv_lhs->type == AGTV_FLOAT && agtv_rhs->type == AGTV_FLOAT) { dfl = Float8GetDatum(agtv_lhs->val.float_value); dfr = Float8GetDatum(agtv_rhs->val.float_value); } /* float + int */ else { int64 ival; float8 fval; bool is_null; ival = (agtv_lhs->type == AGTV_INTEGER) ? agtv_lhs->val.int_value : agtv_rhs->val.int_value; fval = (agtv_lhs->type == AGTV_FLOAT) ? agtv_lhs->val.float_value : agtv_rhs->val.float_value; dfl = Float8GetDatum(get_float_compatible_arg(Int64GetDatum(ival), INT8OID, "", &is_null)); dfr = Float8GetDatum(fval); } /* add the floats and set the result */ dresult = DirectFunctionCall2(float8pl, dfl, dfr); agtv_result.val.float_value = DatumGetFloat8(dresult); } break; /* * For numeric it can be either, numeric + numeric or numeric + float or * numeric + int */ case AGTV_NUMERIC: { Datum dnl; Datum dnr; Datum dresult; /* extract and convert the values as necessary */ /* numeric + numeric */ if (agtv_lhs->type == AGTV_NUMERIC && agtv_rhs->type == AGTV_NUMERIC) { dnl = NumericGetDatum(agtv_lhs->val.numeric); dnr = NumericGetDatum(agtv_rhs->val.numeric); } /* numeric + float */ else if (agtv_lhs->type == AGTV_FLOAT || agtv_rhs->type == AGTV_FLOAT) { float8 fval; Numeric nval; fval = (agtv_lhs->type == AGTV_FLOAT) ? agtv_lhs->val.float_value : agtv_rhs->val.float_value; nval = (agtv_lhs->type == AGTV_NUMERIC) ? agtv_lhs->val.numeric : agtv_rhs->val.numeric; dnl = DirectFunctionCall1(float8_numeric, Float8GetDatum(fval)); dnr = NumericGetDatum(nval); } /* numeric + int */ else { int64 ival; Numeric nval; ival = (agtv_lhs->type == AGTV_INTEGER) ? agtv_lhs->val.int_value : agtv_rhs->val.int_value; nval = (agtv_lhs->type == AGTV_NUMERIC) ? agtv_lhs->val.numeric : agtv_rhs->val.numeric; dnl = DirectFunctionCall1(int8_numeric, Int64GetDatum(ival)); dnr = NumericGetDatum(nval); } /* add the numerics and set the result */ dresult = DirectFunctionCall2(numeric_add, dnl, dnr); agtv_result.val.numeric = DatumGetNumeric(dresult); } break; default: elog(ERROR, "unexpected agtype"); break; } /* return the result */ PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } /* * Wrapper function for float8_accum to take an agtype input. * This function is defined as STRICT so it does not need to check * for NULL input parameters */ PG_FUNCTION_INFO_V1(age_agtype_float8_accum); Datum age_agtype_float8_accum(PG_FUNCTION_ARGS) { Datum dfloat; Datum result; /* convert to a float8 datum, if possible */ dfloat = DirectFunctionCall1(agtype_to_float8, PG_GETARG_DATUM(1)); /* pass the arguments off to float8_accum */ result = DirectFunctionCall2(float8_accum, PG_GETARG_DATUM(0), dfloat); PG_RETURN_DATUM(result); } /* Wrapper for stdDev function. */ PG_FUNCTION_INFO_V1(age_float8_stddev_samp_aggfinalfn); Datum age_float8_stddev_samp_aggfinalfn(PG_FUNCTION_ARGS) { Datum result; PGFunction func; agtype_value agtv_float; /* we can't use DirectFunctionCall1 as it errors for NULL values */ func = float8_stddev_samp; result = (*func) (fcinfo); agtv_float.type = AGTV_FLOAT; /* * Check to see if float8_stddev_samp returned null. If so, we need to * return a agtype float 0. */ if (fcinfo->isnull) { /* we need to clear the flag */ fcinfo->isnull = false; agtv_float.val.float_value = 0.0; } else { agtv_float.val.float_value = DatumGetFloat8(result); } PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_float)); } PG_FUNCTION_INFO_V1(age_float8_stddev_pop_aggfinalfn); Datum age_float8_stddev_pop_aggfinalfn(PG_FUNCTION_ARGS) { Datum result; PGFunction func; agtype_value agtv_float; /* we can't use DirectFunctionCall1 as it errors for NULL values */ func = float8_stddev_pop; result = (*func) (fcinfo); agtv_float.type = AGTV_FLOAT; /* * Check to see if float8_stddev_pop returned null. If so, we need to * return a agtype float 0. */ if (fcinfo->isnull) { /* we need to clear the flag */ fcinfo->isnull = false; agtv_float.val.float_value = 0.0; } else { agtv_float.val.float_value = DatumGetFloat8(result); } PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_float)); } PG_FUNCTION_INFO_V1(age_agtype_larger_aggtransfn); Datum age_agtype_larger_aggtransfn(PG_FUNCTION_ARGS) { agtype *agtype_arg1; agtype *agtype_arg2; agtype *agtype_larger; int test; /* for max we need to ignore NULL values */ /* extract the args as agtype */ agtype_arg1 = get_one_agtype_from_variadic_args(fcinfo, 0, 2); agtype_arg2 = get_one_agtype_from_variadic_args(fcinfo, 1, 1); /* return NULL if both are NULL */ if (agtype_arg1 == NULL && agtype_arg2 == NULL) PG_RETURN_NULL(); /* if one is NULL, return the other */ if (agtype_arg1 != NULL && agtype_arg2 == NULL) PG_RETURN_POINTER(agtype_arg1); if (agtype_arg1 == NULL && agtype_arg2 != NULL) PG_RETURN_POINTER(agtype_arg2); /* test for max value */ test = compare_agtype_containers_orderability(&agtype_arg1->root, &agtype_arg2->root); agtype_larger = (test >= 0) ? agtype_arg1 : agtype_arg2; PG_RETURN_POINTER(agtype_larger); } PG_FUNCTION_INFO_V1(age_agtype_smaller_aggtransfn); Datum age_agtype_smaller_aggtransfn(PG_FUNCTION_ARGS) { agtype *agtype_arg1 = NULL; agtype *agtype_arg2 = NULL; agtype *agtype_smaller; int test; /* for min we need to ignore NULL values */ /* extract the args as agtype */ agtype_arg1 = get_one_agtype_from_variadic_args(fcinfo, 0, 2); agtype_arg2 = get_one_agtype_from_variadic_args(fcinfo, 1, 1); /* return NULL if both are NULL */ if (agtype_arg1 == NULL && agtype_arg2 == NULL) PG_RETURN_NULL(); /* if one is NULL, return the other */ if (agtype_arg1 != NULL && agtype_arg2 == NULL) PG_RETURN_POINTER(agtype_arg1); if (agtype_arg1 == NULL && agtype_arg2 != NULL) PG_RETURN_POINTER(agtype_arg2); /* test for min value */ test = compare_agtype_containers_orderability(&agtype_arg1->root, &agtype_arg2->root); agtype_smaller = (test <= 0) ? agtype_arg1 : agtype_arg2; PG_RETURN_POINTER(agtype_smaller); } /* borrowed from PGs float8 routines for percentile_cont */ static Datum float8_lerp(Datum lo, Datum hi, double pct) { double loval = DatumGetFloat8(lo); double hival = DatumGetFloat8(hi); return Float8GetDatum(loval + (pct * (hival - loval))); } /* Code borrowed and adjusted from PG's ordered_set_transition function */ PG_FUNCTION_INFO_V1(age_percentile_aggtransfn); Datum age_percentile_aggtransfn(PG_FUNCTION_ARGS) { PercentileGroupAggState *pgastate; /* verify we are in an aggregate context */ Assert(AggCheckCallContext(fcinfo, NULL) == AGG_CONTEXT_AGGREGATE); /* if this is the first invocation, create the state */ if (PG_ARGISNULL(0)) { MemoryContext old_mcxt; float8 percentile; /* validate the percentile */ if (PG_ARGISNULL(2)) ereport(ERROR, (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), errmsg("percentile value NULL is not a valid numeric value"))); percentile = DatumGetFloat8(DirectFunctionCall1(agtype_to_float8, PG_GETARG_DATUM(2))); if (percentile < 0 || percentile > 1 || isnan(percentile)) ereport(ERROR, (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), errmsg("percentile value %g is not between 0 and 1", percentile))); /* switch to the correct aggregate context */ old_mcxt = MemoryContextSwitchTo(fcinfo->flinfo->fn_mcxt); /* create and initialize the state */ pgastate = palloc0(sizeof(PercentileGroupAggState)); pgastate->percentile = percentile; /* * Percentiles need to be calculated from a sorted set. We are only * using float8 values, using the less than operator, and flagging * randomAccess to true - as we can potentially be reusing this * sort multiple times in the same query. */ pgastate->sortstate = tuplesort_begin_datum(FLOAT8OID, Float8LessOperator, InvalidOid, false, work_mem, NULL, true); pgastate->number_of_rows = 0; pgastate->sort_done = false; /* restore the old context */ MemoryContextSwitchTo(old_mcxt); } /* otherwise, retrieve the state */ else pgastate = (PercentileGroupAggState *) PG_GETARG_POINTER(0); /* Load the datum into the tuplesort object, but only if it's not null */ if (!PG_ARGISNULL(1)) { Datum dfloat = DirectFunctionCall1(agtype_to_float8, PG_GETARG_DATUM(1)); tuplesort_putdatum(pgastate->sortstate, dfloat, false); pgastate->number_of_rows++; } /* return the state */ PG_RETURN_POINTER(pgastate); } /* Code borrowed and adjusted from PG's percentile_cont_final function */ PG_FUNCTION_INFO_V1(age_percentile_cont_aggfinalfn); Datum age_percentile_cont_aggfinalfn(PG_FUNCTION_ARGS) { PercentileGroupAggState *pgastate; float8 percentile; int64 first_row = 0; int64 second_row = 0; Datum val; Datum first_val; Datum second_val; double proportion; bool isnull; agtype_value agtv_float; /* verify we are in an aggregate context */ Assert(AggCheckCallContext(fcinfo, NULL) == AGG_CONTEXT_AGGREGATE); /* If there were no regular rows, the result is NULL */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); /* retrieve the state and percentile */ pgastate = (PercentileGroupAggState *) PG_GETARG_POINTER(0); percentile = pgastate->percentile; /* number_of_rows could be zero if we only saw NULL input values */ if (pgastate->number_of_rows == 0) PG_RETURN_NULL(); /* Finish the sort, or rescan if we already did */ if (!pgastate->sort_done) { tuplesort_performsort(pgastate->sortstate); pgastate->sort_done = true; } else tuplesort_rescan(pgastate->sortstate); /* calculate the percentile cont*/ first_row = floor(percentile * (pgastate->number_of_rows - 1)); second_row = ceil(percentile * (pgastate->number_of_rows - 1)); Assert(first_row < pgastate->number_of_rows); if (!tuplesort_skiptuples(pgastate->sortstate, first_row, true)) elog(ERROR, "missing row in percentile_cont"); if (!tuplesort_getdatum(pgastate->sortstate, true, false, &first_val, &isnull, NULL)) elog(ERROR, "missing row in percentile_cont"); if (isnull) PG_RETURN_NULL(); if (first_row == second_row) { val = first_val; } else { if (!tuplesort_getdatum(pgastate->sortstate, true, false, &second_val, &isnull, NULL)) elog(ERROR, "missing row in percentile_cont"); if (isnull) PG_RETURN_NULL(); proportion = (percentile * (pgastate->number_of_rows - 1)) - first_row; val = float8_lerp(first_val, second_val, proportion); } /* convert to an agtype float and return the result */ agtv_float.type = AGTV_FLOAT; agtv_float.val.float_value = DatumGetFloat8(val); PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_float)); } /* Code borrowed and adjusted from PG's percentile_disc_final function */ PG_FUNCTION_INFO_V1(age_percentile_disc_aggfinalfn); Datum age_percentile_disc_aggfinalfn(PG_FUNCTION_ARGS) { PercentileGroupAggState *pgastate; double percentile; Datum val; bool isnull; int64 rownum; agtype_value agtv_float; Assert(AggCheckCallContext(fcinfo, NULL) == AGG_CONTEXT_AGGREGATE); /* If there were no regular rows, the result is NULL */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgastate = (PercentileGroupAggState *) PG_GETARG_POINTER(0); percentile = pgastate->percentile; /* number_of_rows could be zero if we only saw NULL input values */ if (pgastate->number_of_rows == 0) PG_RETURN_NULL(); /* Finish the sort, or rescan if we already did */ if (!pgastate->sort_done) { tuplesort_performsort(pgastate->sortstate); pgastate->sort_done = true; } else tuplesort_rescan(pgastate->sortstate); /*---------- * We need the smallest K such that (K/N) >= percentile. * N>0, therefore K >= N*percentile, therefore K = ceil(N*percentile). * So we skip K-1 rows (if K>0) and return the next row fetched. *---------- */ rownum = (int64) ceil(percentile * pgastate->number_of_rows); Assert(rownum <= pgastate->number_of_rows); if (rownum > 1) { if (!tuplesort_skiptuples(pgastate->sortstate, rownum - 1, true)) elog(ERROR, "missing row in percentile_disc"); } if (!tuplesort_getdatum(pgastate->sortstate, true, false, &val, &isnull, NULL)) elog(ERROR, "missing row in percentile_disc"); /* We shouldn't have stored any nulls, but do the right thing anyway */ if (isnull) PG_RETURN_NULL(); /* convert to an agtype float and return the result */ agtv_float.type = AGTV_FLOAT; agtv_float.val.float_value = DatumGetFloat8(val); PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_float)); } /* functions to support the aggregate function COLLECT() */ PG_FUNCTION_INFO_V1(age_collect_aggtransfn); Datum age_collect_aggtransfn(PG_FUNCTION_ARGS) { agtype_in_state *castate; int nargs; Datum *args; bool *nulls; Oid *types; MemoryContext old_mcxt; /* verify we are in an aggregate context */ Assert(AggCheckCallContext(fcinfo, NULL) == AGG_CONTEXT_AGGREGATE); /* * Switch to the correct aggregate context. Otherwise, the data added to the * array will be lost. */ old_mcxt = MemoryContextSwitchTo(fcinfo->flinfo->fn_mcxt); /* if this is the first invocation, create the state */ if (PG_ARGISNULL(0)) { /* create and initialize the state */ castate = palloc0(sizeof(agtype_in_state)); memset(castate, 0, sizeof(agtype_in_state)); /* start the array */ castate->res = push_agtype_value(&castate->parse_state, WAGT_BEGIN_ARRAY, NULL); } /* otherwise, retrieve the state */ else { castate = (agtype_in_state *) PG_GETARG_POINTER(0); } /* * Extract the variadic args, of which there should only be one. * Insert the arg into the array, unless it is null. Nulls are * skipped over. */ if (PG_ARGISNULL(1)) { nargs = 0; } else { nargs = extract_variadic_args(fcinfo, 1, true, &args, &types, &nulls); } if (nargs == 1) { /* only add non null values */ if (nulls[0] == false) { agtype_value *agtv_value = NULL; /* we need to check for agtype null and skip it, if found */ if (types[0] == AGTYPEOID) { agtype *agt_arg; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(args[0]); /* get the scalar value */ if (AGTYPE_CONTAINER_IS_SCALAR(&agt_arg->root)) { agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); } } /* skip the arg if agtype null */ if (agtv_value == NULL || agtv_value->type != AGTV_NULL) { add_agtype(args[0], nulls[0], castate, types[0], false); } } } else if (nargs > 1) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("collect() invalid number of arguments"))); } /* restore the old context */ MemoryContextSwitchTo(old_mcxt); /* return the state */ PG_RETURN_POINTER(castate); } PG_FUNCTION_INFO_V1(age_collect_aggfinalfn); Datum age_collect_aggfinalfn(PG_FUNCTION_ARGS) { agtype_in_state *castate; MemoryContext old_mcxt; /* verify we are in an aggregate context */ Assert(AggCheckCallContext(fcinfo, NULL) == AGG_CONTEXT_AGGREGATE); /* * Get the state. There are cases where the age_collect_aggtransfn never * gets called. So, check to see if this is one. */ if (PG_ARGISNULL(0)) { /* create and initialize the state */ castate = palloc0(sizeof(agtype_in_state)); memset(castate, 0, sizeof(agtype_in_state)); /* start the array */ castate->res = push_agtype_value(&castate->parse_state, WAGT_BEGIN_ARRAY, NULL); } else { castate = (agtype_in_state *) PG_GETARG_POINTER(0); } /* switch to the correct aggregate context */ old_mcxt = MemoryContextSwitchTo(fcinfo->flinfo->fn_mcxt); /* Finish/close the array */ castate->res = push_agtype_value(&castate->parse_state, WAGT_END_ARRAY, NULL); /* restore the old context */ MemoryContextSwitchTo(old_mcxt); /* return the agtype array */ PG_RETURN_POINTER(agtype_value_to_agtype(castate->res)); } /* helper function to quickly build an agtype_value vertex */ agtype_value *agtype_value_build_vertex(graphid id, char *label, Datum properties) { agtype_in_state result; /* the label can't be NULL */ Assert(label != NULL); memset(&result, 0, sizeof(agtype_in_state)); /* push in the object beginning */ result.res = push_agtype_value(&result.parse_state, WAGT_BEGIN_OBJECT, NULL); /* push the graph id key/value pair */ result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("id")); result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, integer_to_agtype_value(id)); /* push the label key/value pair */ result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("label")); result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, string_to_agtype_value(label)); /* push the properties key/value pair */ result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("properties")); add_agtype((Datum)properties, false, &result, AGTYPEOID, false); /* push in the object end */ result.res = push_agtype_value(&result.parse_state, WAGT_END_OBJECT, NULL); /* set it as an edge */ result.res->type = AGTV_VERTEX; /* return the result that was build (allocated) inside the result */ return result.res; } /* helper function to quickly build an agtype_value edge */ agtype_value *agtype_value_build_edge(graphid id, char *label, graphid end_id, graphid start_id, Datum properties) { agtype_in_state result; /* the label can't be NULL */ Assert(label != NULL); memset(&result, 0, sizeof(agtype_in_state)); /* push in the object beginning */ result.res = push_agtype_value(&result.parse_state, WAGT_BEGIN_OBJECT, NULL); /* push the graph id key/value pair */ result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("id")); result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, integer_to_agtype_value(id)); /* push the label key/value pair */ result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("label")); result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, string_to_agtype_value(label)); /* push the end_id key/value pair */ result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("end_id")); result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, integer_to_agtype_value(end_id)); /* push the start_id key/value pair */ result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("start_id")); result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, integer_to_agtype_value(start_id)); /* push the properties key/value pair */ result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("properties")); add_agtype((Datum)properties, false, &result, AGTYPEOID, false); /* push in the object end */ result.res = push_agtype_value(&result.parse_state, WAGT_END_OBJECT, NULL); /* set it as an edge */ result.res->type = AGTV_EDGE; /* return the result that was build (allocated) inside the result */ return result.res; } /* * Extract an agtype_value from an agtype and optionally verify that it is of * the correct type. It will always complain if the passed argument is not a * scalar. * * Optionally, the function will throw an error, stating the calling function * name, for invalid values - including AGTV_NULL * * Note: This only works for scalars wrapped in an array container, not * in objects. */ agtype_value *get_agtype_value(char *funcname, agtype *agt_arg, enum agtype_value_type type, bool error) { agtype_value *agtv_value = NULL; /* we need these */ Assert(funcname != NULL); Assert(agt_arg != NULL); /* error if the argument is not a scalar */ if (!AGTYPE_CONTAINER_IS_SCALAR(&agt_arg->root)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("%s: agtype argument must be a scalar", funcname))); } /* is it AGTV_NULL? */ if (error && is_agtype_null(agt_arg)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("%s: agtype argument must not be AGTV_NULL", funcname))); } /* get the agtype value */ agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* is it the correct type? */ if (error && agtv_value->type != type) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("%s: agtype argument of wrong type", funcname))); } return agtv_value; } /* * Returns properties of an entity (vertex or edge) or NULL if there are none. * If the object passed is not a scalar, an error is thrown. * If the object is a scalar and error_on_scalar is false, the scalar is * returned, otherwise an error is thrown. */ agtype_value *extract_entity_properties(agtype *object, bool error_on_scalar) { agtype_value *scalar_value = NULL; agtype_value *return_value = NULL; if (!AGT_ROOT_IS_SCALAR(object)) { ereport(ERROR,(errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("expected a scalar value"))); } /* unpack the scalar */ scalar_value = get_ith_agtype_value_from_container(&object->root, 0); /* get the properties depending on the type or fail */ if (scalar_value->type == AGTV_VERTEX) { return_value = &scalar_value->val.object.pairs[2].value; } else if (scalar_value->type == AGTV_EDGE) { return_value = &scalar_value->val.object.pairs[4].value; } else if (scalar_value->type == AGTV_PATH) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("cannot extract properties from an agtype path"))); } else if (error_on_scalar) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("scalar object must be a vertex or edge"))); } else { return_value = scalar_value; } /* if the properties are NULL, return NULL */ if (return_value == NULL || return_value->type == AGTV_NULL) { return NULL; } /* set the object_value to the property_value. */ return return_value; } PG_FUNCTION_INFO_V1(age_eq_tilde); /* * Execution function for =~ aka regular expression comparisons * * Note: Everything must resolve to 2 agtype strings. All others types are * errors. */ Datum age_eq_tilde(PG_FUNCTION_ARGS) { agtype *agt_string = NULL; agtype *agt_pattern = NULL; /* if either are NULL return NULL */ if (PG_ARGISNULL(0) || PG_ARGISNULL(1)) { PG_RETURN_NULL(); } /* extract the input */ agt_string = AG_GET_ARG_AGTYPE_P(0); agt_pattern = AG_GET_ARG_AGTYPE_P(1); /* they both need to scalars */ if (AGT_ROOT_IS_SCALAR(agt_string) && AGT_ROOT_IS_SCALAR(agt_pattern)) { agtype_value *agtv_string; agtype_value *agtv_pattern; /* get the contents of each container */ agtv_string = get_ith_agtype_value_from_container(&agt_string->root, 0); agtv_pattern = get_ith_agtype_value_from_container(&agt_pattern->root, 0); /* if either are agtype null, return NULL */ if (agtv_string->type == AGTV_NULL || agtv_pattern->type == AGTV_NULL) { PG_RETURN_NULL(); } /* only strings can be compared, all others are errors */ if (agtv_string->type == AGTV_STRING && agtv_pattern->type == AGTV_STRING) { text *string = NULL; text *pattern = NULL; Datum result; string = cstring_to_text_with_len(agtv_string->val.string.val, agtv_string->val.string.len); pattern = cstring_to_text_with_len(agtv_pattern->val.string.val, agtv_pattern->val.string.len); result = (DirectFunctionCall2Coll(textregexeq, C_COLLATION_OID, PointerGetDatum(string), PointerGetDatum(pattern))); return boolean_to_agtype(DatumGetBool(result)); } } /* if we got here we have values that are invalid */ ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("agtype string values expected"))); } /* * Helper function to step through and retrieve keys from an object. * borrowed and modified from get_next_object_pair() in agtype_vle.c */ static agtype_iterator *get_next_object_key(agtype_iterator *it, agtype_container *agtc, agtype_value *key) { agtype_iterator_token itok; agtype_value tmp; /* verify input params */ Assert(agtc != NULL); Assert(key != NULL); /* check to see if the container is empty */ if (AGTYPE_CONTAINER_SIZE(agtc) == 0) { return NULL; } /* if the passed iterator is NULL, this is the first time, create it */ if (it == NULL) { /* initial the iterator */ it = agtype_iterator_init(agtc); /* get the first token */ itok = agtype_iterator_next(&it, &tmp, false); /* it should be WAGT_BEGIN_OBJECT */ Assert(itok == WAGT_BEGIN_OBJECT); } /* the next token should be a key or the end of the object */ itok = agtype_iterator_next(&it, &tmp, false); Assert(itok == WAGT_KEY || itok == WAGT_END_OBJECT); /* if this is the end of the object return NULL */ if (itok == WAGT_END_OBJECT) { return NULL; } /* this should be the key, copy it */ if (itok == WAGT_KEY) { *key = tmp; } /* * The next token should be a value but, it could be a begin tokens for * arrays or objects. For those we just return NULL to ignore them. */ itok = agtype_iterator_next(&it, &tmp, true); Assert(itok == WAGT_VALUE); /* return the iterator */ return it; } PG_FUNCTION_INFO_V1(age_keys); /* * Execution function to implement openCypher keys() function */ Datum age_keys(PG_FUNCTION_ARGS) { agtype *agt_arg = NULL; agtype_value *agtv_result = NULL; agtype_value obj_key = {0}; agtype_iterator *it = NULL; agtype_parse_state *parse_state = NULL; /* check for null */ if (PG_ARGISNULL(0)) { PG_RETURN_NULL(); } //needs to be a map, node, or relationship agt_arg = AG_GET_ARG_AGTYPE_P(0); /* * check for a scalar object. edges and vertexes are scalar, objects are not * scalar and will be handled separately */ if (AGT_ROOT_IS_SCALAR(agt_arg)) { agtv_result = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* is it an agtype null, return null if it is */ if (agtv_result->type == AGTV_NULL) PG_RETURN_NULL(); /* check for proper agtype and extract the properties field */ if (agtv_result->type == AGTV_EDGE || agtv_result->type == AGTV_VERTEX) { agtv_result = GET_AGTYPE_VALUE_OBJECT_VALUE(agtv_result, "properties"); Assert(agtv_result != NULL); Assert(agtv_result->type = AGTV_OBJECT); } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("keys() argument must be a vertex, edge, object or null"))); } agt_arg = agtype_value_to_agtype(agtv_result); agtv_result = NULL; } else if (!AGT_ROOT_IS_OBJECT(agt_arg)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("keys() argument must be a vertex, edge, object or null"))); } /* push the beginning of the array */ agtv_result = push_agtype_value(&parse_state, WAGT_BEGIN_ARRAY, NULL); /* populate the array with keys */ while ((it = get_next_object_key(it, &agt_arg->root, &obj_key))) { agtv_result = push_agtype_value(&parse_state, WAGT_ELEM, &obj_key); } /* push the end of the array*/ agtv_result = push_agtype_value(&parse_state, WAGT_END_ARRAY, NULL); Assert(agtv_result != NULL); Assert(agtv_result->type = AGTV_ARRAY); PG_RETURN_POINTER(agtype_value_to_agtype(agtv_result)); } PG_FUNCTION_INFO_V1(age_nodes); /* * Execution function to implement openCypher nodes() function */ Datum age_nodes(PG_FUNCTION_ARGS) { agtype *agt_arg = NULL; agtype_value *agtv_path = NULL; agtype_in_state agis_result; int i = 0; /* check for null */ if (PG_ARGISNULL(0)) { PG_RETURN_NULL(); } agt_arg = AG_GET_ARG_AGTYPE_P(0); /* check for a scalar object */ if (!AGT_ROOT_IS_SCALAR(agt_arg)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("nodes() argument must resolve to a scalar value"))); } /* get the potential path out of the array */ agtv_path = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* is it an agtype null? */ if (agtv_path->type == AGTV_NULL) { PG_RETURN_NULL(); } /* verify that it is an agtype path */ if (agtv_path->type != AGTV_PATH) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("nodes() argument must be a path"))); /* clear the result structure */ MemSet(&agis_result, 0, sizeof(agtype_in_state)); /* push the beginning of the array */ agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_BEGIN_ARRAY, NULL); /* push in each vertex (every other entry) from the path */ for (i = 0; i < agtv_path->val.array.num_elems; i += 2) { agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, &agtv_path->val.array.elems[i]); } /* push the end of the array */ agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_END_ARRAY, NULL); /* convert the agtype_value to a datum to return to the caller */ PG_RETURN_POINTER(agtype_value_to_agtype(agis_result.res)); } PG_FUNCTION_INFO_V1(age_labels); /* * Execution function to implement openCypher labels() function * * NOTE: * * This function is defined to return NULL on NULL input. So, no need to check * for SQL NULL input. */ Datum age_labels(PG_FUNCTION_ARGS) { agtype *agt_arg = NULL; agtype_value *agtv_temp = NULL; agtype_value *agtv_label = NULL; agtype_in_state agis_result; /* get the vertex argument */ agt_arg = AG_GET_ARG_AGTYPE_P(0); /* verify it is a scalar */ if (!AGT_ROOT_IS_SCALAR(agt_arg)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("labels() argument must resolve to a scalar value"))); } /* is it an agtype null? */ if (AGTYPE_CONTAINER_IS_SCALAR(&agt_arg->root) && AGTE_IS_NULL((&agt_arg->root)->children[0])) { PG_RETURN_NULL(); } /* get the potential vertex */ agtv_temp = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* verify that it is an agtype vertex */ if (agtv_temp->type != AGTV_VERTEX) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("labels() argument must be a vertex"))); } /* get the label from the vertex */ agtv_label = GET_AGTYPE_VALUE_OBJECT_VALUE(agtv_temp, "label"); /* it cannot be NULL */ Assert(agtv_label != NULL); /* clear the result structure */ MemSet(&agis_result, 0, sizeof(agtype_in_state)); /* push the beginning of the array */ agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_BEGIN_ARRAY, NULL); /* push in the label */ agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, agtv_label); /* push the end of the array */ agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_END_ARRAY, NULL); /* convert the agtype_value to a datum to return to the caller */ PG_RETURN_POINTER(agtype_value_to_agtype(agis_result.res)); } PG_FUNCTION_INFO_V1(age_relationships); /* * Execution function to implement openCypher relationships() function */ Datum age_relationships(PG_FUNCTION_ARGS) { agtype *agt_arg = NULL; agtype_value *agtv_path = NULL; agtype_in_state agis_result; int i = 0; /* check for null */ if (PG_ARGISNULL(0)) { PG_RETURN_NULL(); } agt_arg = AG_GET_ARG_AGTYPE_P(0); /* check for a scalar object */ if (!AGT_ROOT_IS_SCALAR(agt_arg)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("relationships() argument must resolve to a scalar value"))); } /* get the potential path out of the array */ agtv_path = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* is it an agtype null? */ if (agtv_path->type == AGTV_NULL) { PG_RETURN_NULL(); } /* verify that it is an agtype path */ if (agtv_path->type != AGTV_PATH) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("relationships() argument must be a path"))); /* clear the result structure */ MemSet(&agis_result, 0, sizeof(agtype_in_state)); /* push the beginning of the array */ agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_BEGIN_ARRAY, NULL); /* push in each edge (every other entry) from the path */ for (i = 1; i < agtv_path->val.array.num_elems; i += 2) { agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, &agtv_path->val.array.elems[i]); } /* push the end of the array */ agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_END_ARRAY, NULL); /* convert the agtype_value to a datum to return to the caller */ PG_RETURN_POINTER(agtype_value_to_agtype(agis_result.res)); } /* * Helper function to convert an integer type (PostgreSQL or agtype) datum into * an int64. The function will flag if an agtype null was found. The function * will error out on invalid information, printing out the funcname passed. */ static int64 get_int64_from_int_datums(Datum d, Oid type, char *funcname, bool *is_agnull) { int64 result = 0; /* test for PG integer types */ if (type == INT2OID) { result = (int64) DatumGetInt16(d); } else if (type == INT4OID) { result = (int64) DatumGetInt32(d); } else if (type == INT8OID) { result = (int64) DatumGetInt64(d); } /* test for agtype integer */ else if (type == AGTYPEOID) { agtype *agt_arg = NULL; agtype_value *agtv_value = NULL; agtype_container *agtc = NULL; /* get the agtype argument */ agt_arg = DATUM_GET_AGTYPE_P(d); if (!AGT_ROOT_IS_SCALAR(agt_arg)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("%s() only supports scalar arguments", funcname))); } /* check for agtype null*/ agtc = &agt_arg->root; if (AGTE_IS_NULL(agtc->children[0])) { *is_agnull = true; return 0; } /* extract it from the scalar array */ agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); /* check for agtype integer */ if (agtv_value->type == AGTV_INTEGER) { result = agtv_value->val.int_value; } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("%s() unsupported argument type", funcname))); } } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("%s() unsupported argument type", funcname))); } /* return the result */ *is_agnull = false; return result; } PG_FUNCTION_INFO_V1(age_range); /* * Execution function to implement openCypher range() function */ Datum age_range(PG_FUNCTION_ARGS) { Datum *args = NULL; bool *nulls = NULL; Oid *types = NULL; int nargs; int64 start_idx = 0; int64 end_idx = 0; /* step defaults to 1 */ int64 step = 1; bool is_agnull = false; agtype_in_state agis_result; int64 i = 0; /* get the arguments */ nargs = extract_variadic_args(fcinfo, 0, false, &args, &types, &nulls); /* throw an error if the number of args is not the expected number */ if (nargs != 2 && nargs != 3) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("range(): invalid number of input parameters"))); } /* check for NULL start and end input */ if (nulls[0] || nulls[1]) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("range(): neither start or end can be NULL"))); } /* get the start index */ start_idx = get_int64_from_int_datums(args[0], types[0], "range", &is_agnull); if (is_agnull) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("range(): start cannot be NULL"))); } /* get the end index */ end_idx = get_int64_from_int_datums(args[1], types[1], "range", &is_agnull); if (is_agnull) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("range(): end cannot be NULL"))); } /* get the step */ if (nargs == 3 && !nulls[2]) { step = get_int64_from_int_datums(args[2], types[2], "range", &is_agnull); if (is_agnull) { step = 1; } } /* the step cannot be zero */ if (step == 0) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("range(): step cannot be zero"))); } /* clear the result structure */ MemSet(&agis_result, 0, sizeof(agtype_in_state)); /* push the beginning of the array */ agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_BEGIN_ARRAY, NULL); /* push in each agtype integer in the range */ for (i = start_idx; (step > 0 && i <= end_idx) || (step < 0 && i >= end_idx); i += step) { agtype_value agtv; /* build the integer */ agtv.type = AGTV_INTEGER; agtv.val.int_value = i; /* add the value to the array */ agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_ELEM, &agtv); } /* push the end of the array */ agis_result.res = push_agtype_value(&agis_result.parse_state, WAGT_END_ARRAY, NULL); /* convert the agtype_value to a datum to return to the caller */ PG_RETURN_POINTER(agtype_value_to_agtype(agis_result.res)); } PG_FUNCTION_INFO_V1(age_unnest); /* * Function to convert the Array type of Agtype into each row. It is used for * Cypher `UNWIND` clause. */ Datum age_unnest(PG_FUNCTION_ARGS) { agtype *agtype_arg = NULL; ReturnSetInfo *rsi; Tuplestorestate *tuple_store; TupleDesc tupdesc; TupleDesc ret_tdesc; MemoryContext old_cxt, tmp_cxt; bool skipNested = false; agtype_iterator *it; agtype_value v; agtype_iterator_token r; // check for null if (PG_ARGISNULL(0)) { PG_RETURN_NULL(); } agtype_arg = AG_GET_ARG_AGTYPE_P(0); if (!AGT_ROOT_IS_ARRAY(agtype_arg)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("cannot extract elements from an object"))); } rsi = (ReturnSetInfo *) fcinfo->resultinfo; rsi->returnMode = SFRM_Materialize; /* it's a simple type, so don't use get_call_result_type() */ tupdesc = rsi->expectedDesc; old_cxt = MemoryContextSwitchTo(rsi->econtext->ecxt_per_query_memory); ret_tdesc = CreateTupleDescCopy(tupdesc); BlessTupleDesc(ret_tdesc); tuple_store = tuplestore_begin_heap(rsi->allowedModes & SFRM_Materialize_Random, false, work_mem); MemoryContextSwitchTo(old_cxt); tmp_cxt = AllocSetContextCreate(CurrentMemoryContext, "age_unnest temporary cxt", ALLOCSET_DEFAULT_SIZES); it = agtype_iterator_init(&agtype_arg->root); while ((r = agtype_iterator_next(&it, &v, skipNested)) != WAGT_DONE) { skipNested = true; if (r == WAGT_ELEM) { HeapTuple tuple; Datum values[1]; bool nulls[1] = {false}; agtype *val = agtype_value_to_agtype(&v); /* use the tmp context so we can clean up after each tuple is done */ old_cxt = MemoryContextSwitchTo(tmp_cxt); values[0] = PointerGetDatum(val); tuple = heap_form_tuple(ret_tdesc, values, nulls); tuplestore_puttuple(tuple_store, tuple); /* clean up and switch back */ MemoryContextSwitchTo(old_cxt); MemoryContextReset(tmp_cxt); } } MemoryContextDelete(tmp_cxt); rsi->setResult = tuple_store; rsi->setDesc = ret_tdesc; PG_RETURN_NULL(); } /* * Volatile wrapper replacement. The previous version was PL/SQL * and could only handle AGTYPE input and returned AGTYPE output. * This version will create the appropriate AGTYPE based off of * the input type. */ PG_FUNCTION_INFO_V1(agtype_volatile_wrapper); Datum agtype_volatile_wrapper(PG_FUNCTION_ARGS) { int nargs = PG_NARGS(); Oid type = InvalidOid; bool isnull = PG_ARGISNULL(0); /* check for null and pass it through */ if (isnull) { PG_RETURN_NULL(); } /* check for more than one argument */ if (nargs > 1) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("agtype_volatile_wrapper: too many args"))); } /* get the type of the input argument */ type = get_fn_expr_argtype(fcinfo->flinfo, 0); /* if it is NOT an AGTYPE, we need convert it to one, if possible */ if (type != AGTYPEOID) { agtype_value agtv_result; Datum arg = PG_GETARG_DATUM(0); /* check for PG types that easily translate to AGTYPE */ if (type == BOOLOID) { agtv_result.type = AGTV_BOOL; agtv_result.val.boolean = DatumGetBool(arg); } else if (type == INT2OID || type == INT4OID || type == INT8OID) { agtv_result.type = AGTV_INTEGER; if (type == INT8OID) { agtv_result.val.int_value = DatumGetInt64(arg); } else if (type == INT4OID) { agtv_result.val.int_value = (int64) DatumGetInt32(arg); } else if (type == INT2OID) { agtv_result.val.int_value = (int64) DatumGetInt16(arg); } } else if (type == FLOAT4OID || type == FLOAT8OID) { agtv_result.type = AGTV_FLOAT; if (type == FLOAT8OID) { agtv_result.val.float_value = DatumGetFloat8(arg); } else if (type == FLOAT4OID) { agtv_result.val.float_value = (float8) DatumGetFloat4(arg); } } else if (type == NUMERICOID) { agtv_result.type = AGTV_NUMERIC; agtv_result.val.numeric = DatumGetNumeric(arg); } else if (type == CSTRINGOID) { agtv_result.type = AGTV_STRING; agtv_result.val.string.val = DatumGetCString(arg); agtv_result.val.string.len = strlen(agtv_result.val.string.val); } else if (type == TEXTOID) { agtv_result.type = AGTV_STRING; agtv_result.val.string.val = text_to_cstring(DatumGetTextPP(arg)); agtv_result.val.string.len = strlen(agtv_result.val.string.val); } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("agtype_volatile_wrapper: unsupported arg type"))); } /* return the built result */ PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } /* otherwise, just pass it through */ PG_RETURN_POINTER((const void*) PG_GETARG_DATUM(0)); } age-PG16-v1.5.0-rc0/src/backend/utils/adt/agtype_ext.c000066400000000000000000000147431454606241200222140ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "utils/agtype_ext.h" /* define the type and size of the agt_header */ #define AGT_HEADER_TYPE uint32 #define AGT_HEADER_SIZE sizeof(AGT_HEADER_TYPE) static void ag_deserialize_composite(char *base, enum agtype_value_type type, agtype_value *result); static short ag_serialize_header(StringInfo buffer, uint32 type) { short padlen; int offset; padlen = pad_buffer_to_int(buffer); offset = reserve_from_buffer(buffer, AGT_HEADER_SIZE); *((AGT_HEADER_TYPE *)(buffer->data + offset)) = type; return padlen; } /* * Function serializes the data into the buffer provided. * Returns false if the type is not defined. Otherwise, true. */ bool ag_serialize_extended_type(StringInfo buffer, agtentry *agtentry, agtype_value *scalar_val) { short padlen; int numlen; int offset; switch (scalar_val->type) { case AGTV_INTEGER: padlen = ag_serialize_header(buffer, AGT_HEADER_INTEGER); /* copy in the int_value data */ numlen = sizeof(int64); offset = reserve_from_buffer(buffer, numlen); *((int64 *)(buffer->data + offset)) = scalar_val->val.int_value; *agtentry = AGTENTRY_IS_AGTYPE | (padlen + numlen + AGT_HEADER_SIZE); break; case AGTV_FLOAT: padlen = ag_serialize_header(buffer, AGT_HEADER_FLOAT); /* copy in the float_value data */ numlen = sizeof(scalar_val->val.float_value); offset = reserve_from_buffer(buffer, numlen); *((float8 *)(buffer->data + offset)) = scalar_val->val.float_value; *agtentry = AGTENTRY_IS_AGTYPE | (padlen + numlen + AGT_HEADER_SIZE); break; case AGTV_VERTEX: { uint32 object_ae = 0; padlen = ag_serialize_header(buffer, AGT_HEADER_VERTEX); convert_extended_object(buffer, &object_ae, scalar_val); /* * Make sure that the end of the buffer is padded to the next offset and * add this padding to the length of the buffer used. This ensures that * everything stays aligned and eliminates errors caused by compounded * offsets in the deserialization routines. */ object_ae += pad_buffer_to_int(buffer); *agtentry = AGTENTRY_IS_AGTYPE | ((AGTENTRY_OFFLENMASK & (int)object_ae) + AGT_HEADER_SIZE); break; } case AGTV_EDGE: { uint32 object_ae = 0; padlen = ag_serialize_header(buffer, AGT_HEADER_EDGE); convert_extended_object(buffer, &object_ae, scalar_val); /* * Make sure that the end of the buffer is padded to the next offset and * add this padding to the length of the buffer used. This ensures that * everything stays aligned and eliminates errors caused by compounded * offsets in the deserialization routines. */ object_ae += pad_buffer_to_int(buffer); *agtentry = AGTENTRY_IS_AGTYPE | ((AGTENTRY_OFFLENMASK & (int)object_ae) + AGT_HEADER_SIZE); break; } case AGTV_PATH: { uint32 object_ae = 0; padlen = ag_serialize_header(buffer, AGT_HEADER_PATH); convert_extended_array(buffer, &object_ae, scalar_val); /* * Make sure that the end of the buffer is padded to the next offset and * add this padding to the length of the buffer used. This ensures that * everything stays aligned and eliminates errors caused by compounded * offsets in the deserialization routines. */ object_ae += pad_buffer_to_int(buffer); *agtentry = AGTENTRY_IS_AGTYPE | ((AGTENTRY_OFFLENMASK & (int)object_ae) + AGT_HEADER_SIZE); break; } default: return false; } return true; } /* * Function deserializes the data from the buffer pointed to by base_addr. * NOTE: This function writes to the error log and exits for any UNKNOWN * AGT_HEADER type. */ void ag_deserialize_extended_type(char *base_addr, uint32 offset, agtype_value *result) { char *base = base_addr + INTALIGN(offset); AGT_HEADER_TYPE agt_header = *((AGT_HEADER_TYPE *)base); switch (agt_header) { case AGT_HEADER_INTEGER: result->type = AGTV_INTEGER; result->val.int_value = *((int64 *)(base + AGT_HEADER_SIZE)); break; case AGT_HEADER_FLOAT: result->type = AGTV_FLOAT; result->val.float_value = *((float8 *)(base + AGT_HEADER_SIZE)); break; case AGT_HEADER_VERTEX: ag_deserialize_composite(base, AGTV_VERTEX, result); break; case AGT_HEADER_EDGE: ag_deserialize_composite(base, AGTV_EDGE, result); break; case AGT_HEADER_PATH: ag_deserialize_composite(base, AGTV_PATH, result); break; default: elog(ERROR, "Invalid AGT header value."); } } /* * Deserializes a composite type. */ static void ag_deserialize_composite(char *base, enum agtype_value_type type, agtype_value *result) { agtype_iterator *it = NULL; agtype_iterator_token tok; agtype_parse_state *parse_state = NULL; agtype_value *r = NULL; agtype_value *parsed_agtype_value = NULL; //offset container by the extended type header char *container_base = base + AGT_HEADER_SIZE; r = palloc(sizeof(agtype_value)); it = agtype_iterator_init((agtype_container *)container_base); while ((tok = agtype_iterator_next(&it, r, true)) != WAGT_DONE) { parsed_agtype_value = push_agtype_value( &parse_state, tok, tok < WAGT_BEGIN_ARRAY ? r : NULL); } result->type = type; result->val = parsed_agtype_value->val; } age-PG16-v1.5.0-rc0/src/backend/utils/adt/agtype_gin.c000066400000000000000000000454651454606241200221760ustar00rootroot00000000000000/* * For PostgreSQL Database Management System: * (formerly known as Postgres, then as Postgres95) * * Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group * * Portions Copyright (c) 1994, The Regents of the University of California * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose, without fee, and without a written agreement * is hereby granted, provided that the above copyright notice and this * paragraph and the following two paragraphs appear in all copies. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING * LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, * EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE. * * THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF * CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, * ENHANCEMENTS, OR MODIFICATIONS. */ #include "postgres.h" #include "varatt.h" #include "access/gin.h" #include "access/hash.h" #include "catalog/pg_collation.h" #include "utils/agtype.h" #include "utils/float.h" #include "utils/builtins.h" #include "utils/varlena.h" typedef struct PathHashStack { uint32 hash; struct PathHashStack *parent; } PathHashStack; static Datum make_text_key(char flag, const char *str, int len); static Datum make_scalar_key(const agtype_value *scalar_val, bool is_key); /* * * agtype_ops GIN opclass support functions * */ /* * Compares two keys (not indexed items!) and returns an integer less than zero, * zero, or greater than zero, indicating whether the first key is less than, * equal to, or greater than the second. NULL keys are never passed to this * function. */ PG_FUNCTION_INFO_V1(gin_compare_agtype); Datum gin_compare_agtype(PG_FUNCTION_ARGS) { text *arg1, *arg2; int32 result; char *a1p, *a2p; int len1, len2; if (PG_ARGISNULL(0) || PG_ARGISNULL(1)) { PG_RETURN_NULL(); } arg1 = PG_GETARG_TEXT_PP(0); arg2 = PG_GETARG_TEXT_PP(1); a1p = VARDATA_ANY(arg1); a2p = VARDATA_ANY(arg2); len1 = VARSIZE_ANY_EXHDR(arg1); len2 = VARSIZE_ANY_EXHDR(arg2); /* Compare text as bttextcmp does, but always using C collation */ result = varstr_cmp(a1p, len1, a2p, len2, C_COLLATION_OID); PG_FREE_IF_COPY(arg1, 0); PG_FREE_IF_COPY(arg2, 1); PG_RETURN_INT32(result); } /* * Returns a palloc'd array of keys given an item to be indexed. The number of * returned keys must be stored into *nkeys. The return value can be NULL if the * item contains no keys. */ PG_FUNCTION_INFO_V1(gin_extract_agtype); Datum gin_extract_agtype(PG_FUNCTION_ARGS) { agtype *agt; int32 *nentries; int total; agtype_iterator *it; agtype_value v; agtype_iterator_token r; int i = 0; Datum *entries; if (PG_ARGISNULL(0) || PG_ARGISNULL(1)) { PG_RETURN_POINTER(NULL); } agt = (agtype *) AG_GET_ARG_AGTYPE_P(0); nentries = (int32 *) PG_GETARG_POINTER(1); total = 2 * AGT_ROOT_COUNT(agt); /* If the root level is empty, we certainly have no keys */ if (total == 0) { *nentries = 0; PG_RETURN_POINTER(NULL); } /* Otherwise, use 2 * root count as initial estimate of result size */ entries = (Datum *) palloc(sizeof(Datum) * total); it = agtype_iterator_init(&agt->root); while ((r = agtype_iterator_next(&it, &v, false)) != WAGT_DONE) { /* Since we recurse into the object, we might need more space */ if (i >= total) { total *= 2; entries = (Datum *) repalloc(entries, sizeof(Datum) * total); } switch (r) { case WAGT_KEY: entries[i++] = make_scalar_key(&v, true); break; case WAGT_ELEM: /* Pretend string array elements are keys */ entries[i++] = make_scalar_key(&v, (v.type == AGTV_STRING)); break; case WAGT_VALUE: entries[i++] = make_scalar_key(&v, false); break; default: /* we can ignore structural items */ break; } } *nentries = i; PG_RETURN_POINTER(entries); } /* * Returns a palloc'd array of keys given a value to be queried; that is, query * is the value on the right-hand side of an indexable operator whose left-hand * side is the indexed column. The number of returned keys must be stored into * *nkeys. If any of the keys can be null, also palloc an array of *nkeys bool * fields, store its address at *nullFlags, and set these null flags as needed. * *nullFlags can be left NULL (its initial value) if all keys are non-null. * The return value can be NULL if the query contains no keys. * * searchMode is an output argument that allows extractQuery to specify details * about how the search will be done. If *searchMode is set to * GIN_SEARCH_MODE_DEFAULT (which is the value it is initialized to before * call), only items that match at least one of the returned keys are considered * candidate matches. If *searchMode is set to GIN_SEARCH_MODE_ALL, then all * non-null items in the index are considered candidate matches, whether they * match any of the returned keys or not. This is only done when the contains * or exists all strategy are used and the passed map is empty. */ PG_FUNCTION_INFO_V1(gin_extract_agtype_query); Datum gin_extract_agtype_query(PG_FUNCTION_ARGS) { int32 *nentries; StrategyNumber strategy; int32 *searchMode; Datum *entries; if (PG_ARGISNULL(0) || PG_ARGISNULL(1) || PG_ARGISNULL(2) || PG_ARGISNULL(6)) { PG_RETURN_NULL(); } nentries = (int32 *) PG_GETARG_POINTER(1); strategy = PG_GETARG_UINT16(2); searchMode = (int32 *) PG_GETARG_POINTER(6); if (strategy == AGTYPE_CONTAINS_STRATEGY_NUMBER) { /* Query is a agtype, so just apply gin_extract_agtype... */ entries = (Datum *) DatumGetPointer(DirectFunctionCall2(gin_extract_agtype, PG_GETARG_DATUM(0), PointerGetDatum(nentries))); /* ...although "contains {}" requires a full index scan */ if (*nentries == 0) { *searchMode = GIN_SEARCH_MODE_ALL; } } else if (strategy == AGTYPE_EXISTS_STRATEGY_NUMBER) { /* Query is a text string, which we treat as a key */ text *query = PG_GETARG_TEXT_PP(0); *nentries = 1; entries = (Datum *)palloc(sizeof(Datum)); entries[0] = make_text_key(AGT_GIN_FLAG_KEY, VARDATA_ANY(query), VARSIZE_ANY_EXHDR(query)); } else if (strategy == AGTYPE_EXISTS_ANY_STRATEGY_NUMBER || strategy == AGTYPE_EXISTS_ALL_STRATEGY_NUMBER) { /* Query is a text array; each element is treated as a key */ agtype *agt = AG_GET_ARG_AGTYPE_P(0); agtype_iterator *it = NULL; agtype_value elem; agtype_iterator_token itok; int key_count = AGTYPE_CONTAINER_SIZE(&agt->root); int index = 0; if (AGTYPE_CONTAINER_IS_SCALAR(&agt->root) || !AGTYPE_CONTAINER_IS_ARRAY(&agt->root)) { elog(ERROR, "GIN query requires an agtype array"); } entries = (Datum *) palloc(sizeof(Datum) * key_count); it = agtype_iterator_init(&agt->root); /* it should be WAGT_BEGIN_ARRAY */ itok = agtype_iterator_next(&it, &elem, true); if (itok != WAGT_BEGIN_ARRAY) { elog(ERROR, "unexpected iterator token: %d", itok); } while (WAGT_END_ARRAY != agtype_iterator_next(&it, &elem, true)) { if (elem.type != AGTV_STRING) { elog(ERROR, "unsupport agtype for GIN lookup: %d", elem.type); } entries[index++] = make_text_key(AGT_GIN_FLAG_KEY, elem.val.string.val, elem.val.string.len); } *nentries = index; /* ExistsAll with no keys should match everything */ if (index == 0 && strategy == AGTYPE_EXISTS_ALL_STRATEGY_NUMBER) { *searchMode = GIN_SEARCH_MODE_ALL; } } else { elog(ERROR, "unrecognized strategy number: %d", strategy); entries = NULL; /* keep compiler quiet */ } PG_RETURN_POINTER(entries); } /* * Returns true if an indexed item satisfies the query operator for the given * strategy (or might satisfy it, if the recheck indication is returned). This * function does not have direct access to the indexed item's value, since GIN * does not store items explicitly. Rather, what is available is knowledge about * which key values extracted from the query appear in a given indexed item. The * check array has length nkeys, which is the same as the number of keys * previously returned by gin_extract_agtype_query for this query datum. Each * element of the check array is true if the indexed item contains the * corresponding query key, i.e., if (check[i] == true) the i-th key of the * gin_extract_agtype_query result array is present in the indexed item. The * original query datum is passed in case the consistent method needs to consult * it, and so are the queryKeys[] and nullFlags[] arrays previously returned by * gin_extract_agtype_query. * * When extractQuery returns a null key in queryKeys[], the corresponding * check[] element is true if the indexed item contains a null key; that is, the * semantics of check[] are like IS NOT DISTINCT FROM. The consistent function * can examine the corresponding nullFlags[] element if it needs to tell the * difference between a regular value match and a null match. * * On success, *recheck should be set to true if the heap tuple needs to be * rechecked against the query operator, or false if the index test is exact. * That is, a false return value guarantees that the heap tuple does not match * the query; a true return value with *recheck set to false guarantees that the * heap tuple does match the query; and a true return value with *recheck set to * true means that the heap tuple might match the query, so it needs to be * fetched and rechecked by evaluating the query operator directly against the * originally indexed item. */ PG_FUNCTION_INFO_V1(gin_consistent_agtype); Datum gin_consistent_agtype(PG_FUNCTION_ARGS) { bool *check; StrategyNumber strategy; int32 nkeys; bool *recheck; bool res = true; int32 i; if (PG_ARGISNULL(0) || PG_ARGISNULL(1) || PG_ARGISNULL(3) || PG_ARGISNULL(5)) { PG_RETURN_NULL(); } check = (bool *) PG_GETARG_POINTER(0); strategy = PG_GETARG_UINT16(1); nkeys = PG_GETARG_INT32(3); recheck = (bool *) PG_GETARG_POINTER(5); if (strategy == AGTYPE_CONTAINS_STRATEGY_NUMBER) { /* * We must always recheck, since we can't tell from the index whether * the positions of the matched items match the structure of the query * object. (Even if we could, we'd also have to worry about hashed * keys and the index's failure to distinguish keys from string array * elements.) However, the tuple certainly doesn't match unless it * contains all the query keys. */ *recheck = true; for (i = 0; i < nkeys; i++) { if (!check[i]) { res = false; break; } } } else if (strategy == AGTYPE_EXISTS_STRATEGY_NUMBER) { /* * Although the key is certainly present in the index, we must recheck * because (1) the key might be hashed, and (2) the index match might * be for a key that's not at top level of the JSON object. For (1), * we could look at the query key to see if it's hashed and not * recheck if not, but the index lacks enough info to tell about (2). */ *recheck = true; res = true; } else if (strategy == AGTYPE_EXISTS_ANY_STRATEGY_NUMBER) { /* As for plain exists, we must recheck */ *recheck = true; res = true; } else if (strategy == AGTYPE_EXISTS_ALL_STRATEGY_NUMBER) { /* As for plain exists, we must recheck */ *recheck = true; /* ... but unless all the keys are present, we can say "false" */ for (i = 0; i < nkeys; i++) { if (!check[i]) { res = false; break; } } } else { elog(ERROR, "unrecognized strategy number: %d", strategy); } PG_RETURN_BOOL(res); } /* * gin_triconsistent_agtype is similar to gin_consistent_agtype, but instead of * booleans in the check vector, there are three possible values for each key: * GIN_TRUE, GIN_FALSE and GIN_MAYBE. GIN_FALSE and GIN_TRUE have the same * meaning as regular boolean values, while GIN_MAYBE means that the presence of * that key is not known. When GIN_MAYBE values are present, the function should * only return GIN_TRUE if the item certainly matches whether or not the index * item contains the corresponding query keys. Likewise, the function must * return GIN_FALSE only if the item certainly does not match, whether or not it * contains the GIN_MAYBE keys. If the result depends on the GIN_MAYBE entries, * i.e., the match cannot be confirmed or refuted based on the known query keys, * the function must return GIN_MAYBE. * * When there are no GIN_MAYBE values in the check vector, a GIN_MAYBE return * value is the equivalent of setting the recheck flag in the boolean consistent * function. */ PG_FUNCTION_INFO_V1(gin_triconsistent_agtype); Datum gin_triconsistent_agtype(PG_FUNCTION_ARGS) { GinTernaryValue *check; StrategyNumber strategy; int32 nkeys; GinTernaryValue res = GIN_MAYBE; int32 i; if (PG_ARGISNULL(0) || PG_ARGISNULL(1) || PG_ARGISNULL(3)) { PG_RETURN_NULL(); } check = (GinTernaryValue *)PG_GETARG_POINTER(0); strategy = PG_GETARG_UINT16(1); nkeys = PG_GETARG_INT32(3); /* * Note that we never return GIN_TRUE, only GIN_MAYBE or GIN_FALSE; this * corresponds to always forcing recheck in the regular consistent * function, for the reasons listed there. */ if (strategy == AGTYPE_CONTAINS_STRATEGY_NUMBER || strategy == AGTYPE_EXISTS_ALL_STRATEGY_NUMBER) { /* All extracted keys must be present */ for (i = 0; i < nkeys; i++) { if (check[i] == GIN_FALSE) { res = GIN_FALSE; break; } } } else if (strategy == AGTYPE_EXISTS_STRATEGY_NUMBER || strategy == AGTYPE_EXISTS_ANY_STRATEGY_NUMBER) { /* At least one extracted key must be present */ res = GIN_FALSE; for (i = 0; i < nkeys; i++) { if (check[i] == GIN_TRUE || check[i] == GIN_MAYBE) { res = GIN_MAYBE; break; } } } else { elog(ERROR, "unrecognized strategy number: %d", strategy); } PG_RETURN_GIN_TERNARY_VALUE(res); } /* * Construct a agtype_ops GIN key from a flag byte and a textual representation * (which need not be null-terminated). This function is responsible * for hashing overlength text representations; it will add the * AGT_GIN_FLAG_HASHED bit to the flag value if it does that. */ static Datum make_text_key(char flag, const char *str, int len) { text *item; char hashbuf[10]; if (len > AGT_GIN_MAX_LENGTH) { uint32 hashval; hashval = DatumGetUInt32(hash_any((const unsigned char *) str, len)); snprintf(hashbuf, sizeof(hashbuf), "%08x", hashval); str = hashbuf; len = 8; flag |= AGT_GIN_FLAG_HASHED; } /* * Now build the text Datum. For simplicity we build a 4-byte-header * varlena text Datum here, but we expect it will get converted to short * header format when stored in the index. */ item = (text *)palloc(VARHDRSZ + len + 1); SET_VARSIZE(item, VARHDRSZ + len + 1); *VARDATA(item) = flag; memcpy(VARDATA(item) + 1, str, len); return PointerGetDatum(item); } /* * Create a textual representation of a agtype_value that will serve as a GIN * key in a agtype_ops index. is_key is true if the JsonbValue is a key, * or if it is a string array element (since we pretend those are keys, * see jsonb.h). */ static Datum make_scalar_key(const agtype_value *scalarVal, bool is_key) { Datum item = 0; char *cstr = NULL; char buf[MAXINT8LEN + 1]; switch (scalarVal->type) { case AGTV_NULL: Assert(!is_key); item = make_text_key(AGT_GIN_FLAG_NULL, "", 0); break; case AGTV_INTEGER: { char *result; Assert(!is_key); pg_lltoa(scalarVal->val.int_value, buf); result = pstrdup(buf); item = make_text_key(AGT_GIN_FLAG_NUM, result, strlen(result)); break; } case AGTV_FLOAT: Assert(!is_key); cstr = float8out_internal(scalarVal->val.float_value); item = make_text_key(AGT_GIN_FLAG_NUM, cstr, strlen(cstr)); break; case AGTV_BOOL: Assert(!is_key); item = make_text_key(AGT_GIN_FLAG_BOOL, scalarVal->val.boolean ? "t" : "f", 1); break; case AGTV_NUMERIC: Assert(!is_key); /* * A normalized textual representation, free of trailing zeroes, * is required so that numerically equal values will produce equal * strings. * * It isn't ideal that numerics are stored in a relatively bulky * textual format. However, it's a notationally convenient way of * storing a "union" type in the GIN B-Tree, and indexing Jsonb * strings takes precedence. */ cstr = numeric_normalize(scalarVal->val.numeric); item = make_text_key(AGT_GIN_FLAG_NUM, cstr, strlen(cstr)); pfree(cstr); break; case AGTV_STRING: item = make_text_key(is_key ? AGT_GIN_FLAG_KEY : AGT_GIN_FLAG_STR, scalarVal->val.string.val, scalarVal->val.string.len); break; case AGTV_VERTEX: case AGTV_EDGE: case AGTV_PATH: elog(ERROR, "agtype type: %d is not a scalar", scalarVal->type); break; default: elog(ERROR, "unrecognized agtype type: %d", scalarVal->type); break; } return item; } age-PG16-v1.5.0-rc0/src/backend/utils/adt/agtype_ops.c000066400000000000000000001732521454606241200222160ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* * Functions for operators in Cypher expressions. */ #include "postgres.h" #include "varatt.h" #include #include #include "utils/agtype.h" #include "utils/builtins.h" static agtype *agtype_concat_impl(agtype *agt1, agtype *agt2); static agtype_value *iterator_concat(agtype_iterator **it1, agtype_iterator **it2, agtype_parse_state **state); static void concat_to_agtype_string(agtype_value *result, char *lhs, int llen, char *rhs, int rlen); static char *get_string_from_agtype_value(agtype_value *agtv, int *length); static Datum get_agtype_path_all(FunctionCallInfo fcinfo, bool as_text); static agtype *delete_from_object(agtype *agt, char *keyptr, int keylen); static agtype *delete_from_array(agtype *agt, agtype* indexes); static void concat_to_agtype_string(agtype_value *result, char *lhs, int llen, char *rhs, int rlen) { int length = llen + rlen; char *buffer = result->val.string.val; Assert(llen >= 0 && rlen >= 0); check_string_length(length); buffer = palloc(length); strncpy(buffer, lhs, llen); strncpy(buffer + llen, rhs, rlen); result->type = AGTV_STRING; result->val.string.len = length; result->val.string.val = buffer; } static char *get_string_from_agtype_value(agtype_value *agtv, int *length) { Datum number; char *string; switch (agtv->type) { case AGTV_INTEGER: number = DirectFunctionCall1(int8out, Int8GetDatum(agtv->val.int_value)); string = DatumGetCString(number); *length = strlen(string); return string; case AGTV_FLOAT: number = DirectFunctionCall1(float8out, Float8GetDatum(agtv->val.float_value)); string = DatumGetCString(number); *length = strlen(string); if (is_decimal_needed(string)) { char *str = palloc(*length + 2); strncpy(str, string, *length); strncpy(str + *length, ".0", 2); *length += 2; string = str; } return string; case AGTV_STRING: *length = agtv->val.string.len; return agtv->val.string.val; case AGTV_NUMERIC: string = DatumGetCString(DirectFunctionCall1(numeric_out, PointerGetDatum(agtv->val.numeric))); *length = strlen(string); return string; case AGTV_NULL: case AGTV_BOOL: case AGTV_ARRAY: case AGTV_OBJECT: case AGTV_BINARY: default: *length = 0; return NULL; } return NULL; } Datum get_numeric_datum_from_agtype_value(agtype_value *agtv) { switch (agtv->type) { case AGTV_INTEGER: return DirectFunctionCall1(int8_numeric, Int8GetDatum(agtv->val.int_value)); case AGTV_FLOAT: return DirectFunctionCall1(float8_numeric, Float8GetDatum(agtv->val.float_value)); case AGTV_NUMERIC: return NumericGetDatum(agtv->val.numeric); default: break; } return 0; } bool is_numeric_result(agtype_value *lhs, agtype_value *rhs) { if (((lhs->type == AGTV_NUMERIC || rhs->type == AGTV_NUMERIC) && (lhs->type == AGTV_INTEGER || lhs->type == AGTV_FLOAT || rhs->type == AGTV_INTEGER || rhs->type == AGTV_FLOAT )) || (lhs->type == AGTV_NUMERIC && rhs->type == AGTV_NUMERIC)) { return true; } return false; } PG_FUNCTION_INFO_V1(agtype_add); /* agtype addition and concat function for + operator */ Datum agtype_add(PG_FUNCTION_ARGS) { agtype *lhs = AG_GET_ARG_AGTYPE_P(0); agtype *rhs = AG_GET_ARG_AGTYPE_P(1); agtype_value *agtv_lhs; agtype_value *agtv_rhs; agtype_value agtv_result; /* If both are not scalars */ if (!(AGT_ROOT_IS_SCALAR(lhs) && AGT_ROOT_IS_SCALAR(rhs))) { Datum agt = AGTYPE_P_GET_DATUM(agtype_concat_impl(lhs, rhs)); PG_RETURN_DATUM(agt); } /* Both are scalar */ agtv_lhs = get_ith_agtype_value_from_container(&lhs->root, 0); agtv_rhs = get_ith_agtype_value_from_container(&rhs->root, 0); /* * One or both values is a string OR one is a string and the other is * either an integer, float, or numeric. If so, concatenate them. */ if ((agtv_lhs->type == AGTV_STRING || agtv_rhs->type == AGTV_STRING) && (agtv_lhs->type == AGTV_INTEGER || agtv_lhs->type == AGTV_FLOAT || agtv_lhs->type == AGTV_NUMERIC || agtv_lhs->type == AGTV_STRING || agtv_rhs->type == AGTV_INTEGER || agtv_rhs->type == AGTV_FLOAT || agtv_rhs->type == AGTV_NUMERIC || agtv_rhs->type == AGTV_STRING)) { int llen = 0; char *lhs = get_string_from_agtype_value(agtv_lhs, &llen); int rlen = 0; char *rhs = get_string_from_agtype_value(agtv_rhs, &rlen); concat_to_agtype_string(&agtv_result, lhs, llen, rhs, rlen); } /* Both are integers - regular addition */ else if (agtv_lhs->type == AGTV_INTEGER && agtv_rhs->type == AGTV_INTEGER) { agtv_result.type = AGTV_INTEGER; agtv_result.val.int_value = agtv_lhs->val.int_value + agtv_rhs->val.int_value; } /* Both are floats - regular addition */ else if (agtv_lhs->type == AGTV_FLOAT && agtv_rhs->type == AGTV_FLOAT) { agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = agtv_lhs->val.float_value + agtv_rhs->val.float_value; } /* The left is a float, the right is an integer - regular addition */ else if (agtv_lhs->type == AGTV_FLOAT && agtv_rhs->type == AGTV_INTEGER) { agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = agtv_lhs->val.float_value + agtv_rhs->val.int_value; } /* The right is a float, the left is an integer - regular addition */ else if (agtv_lhs->type == AGTV_INTEGER && agtv_rhs->type == AGTV_FLOAT) { agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = agtv_lhs->val.int_value + agtv_rhs->val.float_value; } /* Is this a numeric result */ else if (is_numeric_result(agtv_lhs, agtv_rhs)) { Datum numd, lhsd, rhsd; lhsd = get_numeric_datum_from_agtype_value(agtv_lhs); rhsd = get_numeric_datum_from_agtype_value(agtv_rhs); numd = DirectFunctionCall2(numeric_add, lhsd, rhsd); agtv_result.type = AGTV_NUMERIC; agtv_result.val.numeric = DatumGetNumeric(numd); } /* if both operands are scalar(vertex/edge/path), concat the two */ else if (AGT_ROOT_IS_SCALAR(lhs) && AGT_ROOT_IS_SCALAR(rhs)) { Datum agt = AGTYPE_P_GET_DATUM(agtype_concat_impl(lhs, rhs)); PG_RETURN_DATUM(agt); } else { /* Not a covered case, error out */ ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Invalid input parameter types for agtype_add"))); } AG_RETURN_AGTYPE_P(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(agtype_any_add); /* agtype addition between bigint and agtype */ Datum agtype_any_add(PG_FUNCTION_ARGS) { agtype *lhs; agtype *rhs; Datum result; lhs = get_one_agtype_from_variadic_args(fcinfo, 0, 2); rhs = get_one_agtype_from_variadic_args(fcinfo, 1, 1); if (lhs == NULL || rhs == NULL) { PG_RETURN_NULL(); } result = DirectFunctionCall2(agtype_add, AGTYPE_P_GET_DATUM(lhs), AGTYPE_P_GET_DATUM(rhs)); AG_RETURN_AGTYPE_P(DATUM_GET_AGTYPE_P(result)); } /* * For the given indexes array, delete elements at those indexes * from the passed in agtype array. */ static agtype *delete_from_array(agtype *agt, agtype *indexes) { agtype_parse_state *state = NULL; agtype_iterator *it, *it_indexes = NULL; uint32 i = 0, n; agtype_value v, *res = NULL; agtype_iterator_token r; if (!AGT_ROOT_IS_ARRAY(agt) || AGT_ROOT_IS_SCALAR(agt)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("cannot delete from scalar or object" "using integer index"))); } // array is empty, pass the original array if (AGT_ROOT_COUNT(agt) == 0) { return agt; } // start buidiling the result agtype array it = agtype_iterator_init(&agt->root); r = agtype_iterator_next(&it, &v, false); Assert(r == WAGT_BEGIN_ARRAY); n = v.val.array.num_elems; push_agtype_value(&state, r, NULL); while ((r = agtype_iterator_next(&it, &v, true)) != WAGT_DONE) { if (r == WAGT_ELEM) { /* * use logic similar to agtype_contains to check * if the current index (itself or in inverted form) * is contained in the indexes array, * if yes, skip the element at that index in agt array * else add the element in result agtype array */ agtype_value cur_idx, neg_idx; agtype *cur_idx_agt, *neg_idx_agt; agtype_iterator *it_cur_idx, *it_neg_idx; bool contains_idx, contains_neg_idx; cur_idx.type = AGTV_INTEGER; cur_idx.val.int_value = i++; cur_idx_agt = agtype_value_to_agtype(&cur_idx); neg_idx.type = AGTV_INTEGER; neg_idx.val.int_value = cur_idx.val.int_value - n; neg_idx_agt = agtype_value_to_agtype(&neg_idx); it_cur_idx = agtype_iterator_init(&cur_idx_agt->root); it_neg_idx = agtype_iterator_init(&neg_idx_agt->root); it_indexes = agtype_iterator_init(&indexes->root); contains_idx = agtype_deep_contains(&it_indexes, &it_cur_idx); // re-initialize indexes array iterator it_indexes = agtype_iterator_init(&indexes->root); contains_neg_idx = agtype_deep_contains(&it_indexes, &it_neg_idx); if (contains_idx || contains_neg_idx) { continue; } } res = push_agtype_value(&state, r, r < WAGT_BEGIN_ARRAY ? &v : NULL); } Assert(res != NULL); return agtype_value_to_agtype(res); } /* * For the given key delete that property from the passed in agtype * object. */ static agtype *delete_from_object(agtype *agt, char *keyptr, int keylen) { agtype_parse_state *state = NULL; agtype_iterator *it; agtype_value v, *res = NULL; bool skipNested = false; agtype_iterator_token r; if (!AGT_ROOT_IS_OBJECT(agt)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("cannot delete from scalar or array" "using string key"))); } if (AGT_ROOT_COUNT(agt) == 0) { return agt; } it = agtype_iterator_init(&agt->root); while ((r = agtype_iterator_next(&it, &v, skipNested)) != WAGT_DONE) { skipNested = true; /* * Checks the key to compare against the passed in key to be * deleted. do not add the key and value to the new agtype being * constructed. */ if ((r == WAGT_ELEM || r == WAGT_KEY) && (v.type == AGTV_STRING && keylen == v.val.string.len && memcmp(keyptr, v.val.string.val, keylen) == 0)) { /* skip corresponding value as well */ if (r == WAGT_KEY) { (void) agtype_iterator_next(&it, &v, true); } continue; } res = push_agtype_value(&state, r, r < WAGT_BEGIN_ARRAY ? &v : NULL); } Assert(res != NULL); return agtype_value_to_agtype(res); } PG_FUNCTION_INFO_V1(agtype_sub); /* * agtype subtraction function for - operator */ Datum agtype_sub(PG_FUNCTION_ARGS) { agtype *lhs = AG_GET_ARG_AGTYPE_P(0); agtype *rhs = AG_GET_ARG_AGTYPE_P(1); agtype_value *agtv_lhs; agtype_value *agtv_rhs; agtype_value agtv_result; /* * Logic to handle when the rhs is a non scalar array. In this * case; * 1. if the lhs is an object, the values in the rhs array * are string keys to be removed from the object. * 2. if the lhs is an array, the values in the rhs array * are integer indexes at which values should be removed from array. * otherwise throw an error */ if (AGT_ROOT_IS_ARRAY(rhs) && !AGT_ROOT_IS_SCALAR(rhs)) { agtype_iterator *it = NULL; agtype_value elem; if (AGT_ROOT_IS_OBJECT(lhs)) { /* * if rhs array contains any non-string element, error out * else delete the given keys in the rhs array from lhs object */ while ((it = get_next_list_element(it, &rhs->root, &elem))) { if (elem.type == AGTV_STRING) { lhs = delete_from_object(lhs, elem.val.string.val, elem.val.string.len); } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("expected agtype string, not agtype %s", agtype_value_type_to_string(elem.type)))); } } } else if (AGT_ROOT_IS_ARRAY(lhs) && !(AGT_ROOT_IS_SCALAR(lhs))) { /* * if rhs array contains any non-integer element, error out * else delete the values at the given indexes in rhs array * from the lhs array */ while ((it = get_next_list_element(it, &rhs->root, &elem))) { if (elem.type != AGTV_INTEGER) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("expected agtype integer, not agtype %s", agtype_value_type_to_string(elem.type)))); } } lhs = delete_from_array(lhs, rhs); } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("must be object or array, not a scalar value"))); } AG_RETURN_AGTYPE_P(lhs); } /* * When the lhs is an object and rhs is a string, remove the key from * the object. * When the lhs is an array and the rhs is an integer then * remove the value at that index from the array, * otherwise give an error */ if(!AGT_ROOT_IS_SCALAR(lhs)) { agtype_value *key; key = get_ith_agtype_value_from_container(&rhs->root, 0); if (AGT_ROOT_IS_OBJECT(lhs) && key->type == AGTV_STRING) { AG_RETURN_AGTYPE_P(delete_from_object(lhs, key->val.string.val, key->val.string.len)); } else if (AGT_ROOT_IS_ARRAY(lhs) && key->type == AGTV_INTEGER) { AG_RETURN_AGTYPE_P(delete_from_array(lhs, rhs)); } else { if (AGT_ROOT_IS_OBJECT(lhs)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("expected agtype string, not agtype %s", agtype_value_type_to_string(key->type)))); } else if (AGT_ROOT_IS_ARRAY(lhs)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("expected agtype integer, not agtype %s", agtype_value_type_to_string(key->type)))); } } } agtv_lhs = get_ith_agtype_value_from_container(&lhs->root, 0); agtv_rhs = get_ith_agtype_value_from_container(&rhs->root, 0); if (agtv_lhs->type == AGTV_INTEGER && agtv_rhs->type == AGTV_INTEGER) { agtv_result.type = AGTV_INTEGER; agtv_result.val.int_value = agtv_lhs->val.int_value - agtv_rhs->val.int_value; } else if (agtv_lhs->type == AGTV_FLOAT && agtv_rhs->type == AGTV_FLOAT) { agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = agtv_lhs->val.float_value - agtv_rhs->val.float_value; } else if (agtv_lhs->type == AGTV_FLOAT && agtv_rhs->type == AGTV_INTEGER) { agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = agtv_lhs->val.float_value - agtv_rhs->val.int_value; } else if (agtv_lhs->type == AGTV_INTEGER && agtv_rhs->type == AGTV_FLOAT) { agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = agtv_lhs->val.int_value - agtv_rhs->val.float_value; } /* Is this a numeric result */ else if (is_numeric_result(agtv_lhs, agtv_rhs)) { Datum numd, lhsd, rhsd; lhsd = get_numeric_datum_from_agtype_value(agtv_lhs); rhsd = get_numeric_datum_from_agtype_value(agtv_rhs); numd = DirectFunctionCall2(numeric_sub, lhsd, rhsd); agtv_result.type = AGTV_NUMERIC; agtv_result.val.numeric = DatumGetNumeric(numd); } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Invalid input parameter types for agtype_sub"))); } AG_RETURN_AGTYPE_P(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(agtype_any_sub); /* agtype subtraction between bigint and agtype */ Datum agtype_any_sub(PG_FUNCTION_ARGS) { agtype *lhs; agtype *rhs; Datum result; lhs = get_one_agtype_from_variadic_args(fcinfo, 0, 2); rhs = get_one_agtype_from_variadic_args(fcinfo, 1, 1); if (lhs == NULL || rhs == NULL) { PG_RETURN_NULL(); } result = DirectFunctionCall2(agtype_sub, AGTYPE_P_GET_DATUM(lhs), AGTYPE_P_GET_DATUM(rhs)); AG_RETURN_AGTYPE_P(DATUM_GET_AGTYPE_P(result)); } PG_FUNCTION_INFO_V1(agtype_neg); /* * agtype negation function for unary - operator */ Datum agtype_neg(PG_FUNCTION_ARGS) { agtype *v = AG_GET_ARG_AGTYPE_P(0); agtype_value *agtv_value; agtype_value agtv_result; if (!(AGT_ROOT_IS_SCALAR(v))) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("must be scalar value, not array or object"))); PG_RETURN_NULL(); } agtv_value = get_ith_agtype_value_from_container(&v->root, 0); if (agtv_value->type == AGTV_INTEGER) { agtv_result.type = AGTV_INTEGER; agtv_result.val.int_value = -agtv_value->val.int_value; } else if (agtv_value->type == AGTV_FLOAT) { agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = -agtv_value->val.float_value; } else if (agtv_value->type == AGTV_NUMERIC) { Datum numd, vald; vald = NumericGetDatum(agtv_value->val.numeric); numd = DirectFunctionCall1(numeric_uminus, vald); agtv_result.type = AGTV_NUMERIC; agtv_result.val.numeric = DatumGetNumeric(numd); } else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Invalid input parameter type for agtype_neg"))); AG_RETURN_AGTYPE_P(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(agtype_mul); /* * agtype multiplication function for * operator */ Datum agtype_mul(PG_FUNCTION_ARGS) { agtype *lhs = AG_GET_ARG_AGTYPE_P(0); agtype *rhs = AG_GET_ARG_AGTYPE_P(1); agtype_value *agtv_lhs; agtype_value *agtv_rhs; agtype_value agtv_result; if (!(AGT_ROOT_IS_SCALAR(lhs)) || !(AGT_ROOT_IS_SCALAR(rhs))) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("must be scalar value, not array or object"))); PG_RETURN_NULL(); } agtv_lhs = get_ith_agtype_value_from_container(&lhs->root, 0); agtv_rhs = get_ith_agtype_value_from_container(&rhs->root, 0); if (agtv_lhs->type == AGTV_INTEGER && agtv_rhs->type == AGTV_INTEGER) { agtv_result.type = AGTV_INTEGER; agtv_result.val.int_value = agtv_lhs->val.int_value * agtv_rhs->val.int_value; } else if (agtv_lhs->type == AGTV_FLOAT && agtv_rhs->type == AGTV_FLOAT) { agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = agtv_lhs->val.float_value * agtv_rhs->val.float_value; } else if (agtv_lhs->type == AGTV_FLOAT && agtv_rhs->type == AGTV_INTEGER) { agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = agtv_lhs->val.float_value * agtv_rhs->val.int_value; } else if (agtv_lhs->type == AGTV_INTEGER && agtv_rhs->type == AGTV_FLOAT) { agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = agtv_lhs->val.int_value * agtv_rhs->val.float_value; } /* Is this a numeric result */ else if (is_numeric_result(agtv_lhs, agtv_rhs)) { Datum numd, lhsd, rhsd; lhsd = get_numeric_datum_from_agtype_value(agtv_lhs); rhsd = get_numeric_datum_from_agtype_value(agtv_rhs); numd = DirectFunctionCall2(numeric_mul, lhsd, rhsd); agtv_result.type = AGTV_NUMERIC; agtv_result.val.numeric = DatumGetNumeric(numd); } else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Invalid input parameter types for agtype_mul"))); AG_RETURN_AGTYPE_P(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(agtype_any_mul); /* agtype multiplication between bigint and agtype */ Datum agtype_any_mul(PG_FUNCTION_ARGS) { agtype *lhs; agtype *rhs; Datum result; lhs = get_one_agtype_from_variadic_args(fcinfo, 0, 2); rhs = get_one_agtype_from_variadic_args(fcinfo, 1, 1); if (lhs == NULL || rhs == NULL) { PG_RETURN_NULL(); } result = DirectFunctionCall2(agtype_mul, AGTYPE_P_GET_DATUM(lhs), AGTYPE_P_GET_DATUM(rhs)); AG_RETURN_AGTYPE_P(DATUM_GET_AGTYPE_P(result)); } PG_FUNCTION_INFO_V1(agtype_div); /* * agtype division function for / operator */ Datum agtype_div(PG_FUNCTION_ARGS) { agtype *lhs = AG_GET_ARG_AGTYPE_P(0); agtype *rhs = AG_GET_ARG_AGTYPE_P(1); agtype_value *agtv_lhs; agtype_value *agtv_rhs; agtype_value agtv_result; if (!(AGT_ROOT_IS_SCALAR(lhs)) || !(AGT_ROOT_IS_SCALAR(rhs))) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("must be scalar value, not array or object"))); PG_RETURN_NULL(); } agtv_lhs = get_ith_agtype_value_from_container(&lhs->root, 0); agtv_rhs = get_ith_agtype_value_from_container(&rhs->root, 0); if (agtv_lhs->type == AGTV_INTEGER && agtv_rhs->type == AGTV_INTEGER) { if (agtv_rhs->val.int_value == 0) { ereport(ERROR, (errcode(ERRCODE_DIVISION_BY_ZERO), errmsg("division by zero"))); PG_RETURN_NULL(); } agtv_result.type = AGTV_INTEGER; agtv_result.val.int_value = agtv_lhs->val.int_value / agtv_rhs->val.int_value; } else if (agtv_lhs->type == AGTV_FLOAT && agtv_rhs->type == AGTV_FLOAT) { if (agtv_rhs->val.float_value == 0) { ereport(ERROR, (errcode(ERRCODE_DIVISION_BY_ZERO), errmsg("division by zero"))); PG_RETURN_NULL(); } agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = agtv_lhs->val.float_value / agtv_rhs->val.float_value; } else if (agtv_lhs->type == AGTV_FLOAT && agtv_rhs->type == AGTV_INTEGER) { if (agtv_rhs->val.int_value == 0) { ereport(ERROR, (errcode(ERRCODE_DIVISION_BY_ZERO), errmsg("division by zero"))); PG_RETURN_NULL(); } agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = agtv_lhs->val.float_value / agtv_rhs->val.int_value; } else if (agtv_lhs->type == AGTV_INTEGER && agtv_rhs->type == AGTV_FLOAT) { if (agtv_rhs->val.float_value == 0) { ereport(ERROR, (errcode(ERRCODE_DIVISION_BY_ZERO), errmsg("division by zero"))); PG_RETURN_NULL(); } agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = agtv_lhs->val.int_value / agtv_rhs->val.float_value; } /* Is this a numeric result */ else if (is_numeric_result(agtv_lhs, agtv_rhs)) { Datum numd, lhsd, rhsd; lhsd = get_numeric_datum_from_agtype_value(agtv_lhs); rhsd = get_numeric_datum_from_agtype_value(agtv_rhs); numd = DirectFunctionCall2(numeric_div, lhsd, rhsd); agtv_result.type = AGTV_NUMERIC; agtv_result.val.numeric = DatumGetNumeric(numd); } else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Invalid input parameter types for agtype_div"))); AG_RETURN_AGTYPE_P(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(agtype_any_div); /* agtype division between bigint and agtype */ Datum agtype_any_div(PG_FUNCTION_ARGS) { agtype *lhs; agtype *rhs; Datum result; lhs = get_one_agtype_from_variadic_args(fcinfo, 0, 2); rhs = get_one_agtype_from_variadic_args(fcinfo, 1, 1); if (lhs == NULL || rhs == NULL) { PG_RETURN_NULL(); } result = DirectFunctionCall2(agtype_div, AGTYPE_P_GET_DATUM(lhs), AGTYPE_P_GET_DATUM(rhs)); AG_RETURN_AGTYPE_P(DATUM_GET_AGTYPE_P(result)); } PG_FUNCTION_INFO_V1(agtype_mod); /* * agtype modulo function for % operator */ Datum agtype_mod(PG_FUNCTION_ARGS) { agtype *lhs = AG_GET_ARG_AGTYPE_P(0); agtype *rhs = AG_GET_ARG_AGTYPE_P(1); agtype_value *agtv_lhs; agtype_value *agtv_rhs; agtype_value agtv_result; if (!(AGT_ROOT_IS_SCALAR(lhs)) || !(AGT_ROOT_IS_SCALAR(rhs))) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("must be scalar value, not array or object"))); PG_RETURN_NULL(); } agtv_lhs = get_ith_agtype_value_from_container(&lhs->root, 0); agtv_rhs = get_ith_agtype_value_from_container(&rhs->root, 0); if (agtv_lhs->type == AGTV_INTEGER && agtv_rhs->type == AGTV_INTEGER) { agtv_result.type = AGTV_INTEGER; agtv_result.val.int_value = agtv_lhs->val.int_value % agtv_rhs->val.int_value; } else if (agtv_lhs->type == AGTV_FLOAT && agtv_rhs->type == AGTV_FLOAT) { agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = fmod(agtv_lhs->val.float_value, agtv_rhs->val.float_value); } else if (agtv_lhs->type == AGTV_FLOAT && agtv_rhs->type == AGTV_INTEGER) { agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = fmod(agtv_lhs->val.float_value, agtv_rhs->val.int_value); } else if (agtv_lhs->type == AGTV_INTEGER && agtv_rhs->type == AGTV_FLOAT) { agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = fmod(agtv_lhs->val.int_value, agtv_rhs->val.float_value); } /* Is this a numeric result */ else if (is_numeric_result(agtv_lhs, agtv_rhs)) { Datum numd, lhsd, rhsd; lhsd = get_numeric_datum_from_agtype_value(agtv_lhs); rhsd = get_numeric_datum_from_agtype_value(agtv_rhs); numd = DirectFunctionCall2(numeric_mod, lhsd, rhsd); agtv_result.type = AGTV_NUMERIC; agtv_result.val.numeric = DatumGetNumeric(numd); } else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Invalid input parameter types for agtype_mod"))); AG_RETURN_AGTYPE_P(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(agtype_any_mod); /* agtype modulo between bigint and agtype */ Datum agtype_any_mod(PG_FUNCTION_ARGS) { agtype *lhs; agtype *rhs; Datum result; lhs = get_one_agtype_from_variadic_args(fcinfo, 0, 2); rhs = get_one_agtype_from_variadic_args(fcinfo, 1, 1); if (lhs == NULL || rhs == NULL) { PG_RETURN_NULL(); } result = DirectFunctionCall2(agtype_mod, AGTYPE_P_GET_DATUM(lhs), AGTYPE_P_GET_DATUM(rhs)); AG_RETURN_AGTYPE_P(DATUM_GET_AGTYPE_P(result)); } PG_FUNCTION_INFO_V1(agtype_pow); /* * agtype power function for ^ operator */ Datum agtype_pow(PG_FUNCTION_ARGS) { agtype *lhs = AG_GET_ARG_AGTYPE_P(0); agtype *rhs = AG_GET_ARG_AGTYPE_P(1); agtype_value *agtv_lhs; agtype_value *agtv_rhs; agtype_value agtv_result; if (!(AGT_ROOT_IS_SCALAR(lhs)) || !(AGT_ROOT_IS_SCALAR(rhs))) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("must be scalar value, not array or object"))); PG_RETURN_NULL(); } agtv_lhs = get_ith_agtype_value_from_container(&lhs->root, 0); agtv_rhs = get_ith_agtype_value_from_container(&rhs->root, 0); if (agtv_lhs->type == AGTV_INTEGER && agtv_rhs->type == AGTV_INTEGER) { agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = pow(agtv_lhs->val.int_value, agtv_rhs->val.int_value); } else if (agtv_lhs->type == AGTV_FLOAT && agtv_rhs->type == AGTV_FLOAT) { agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = pow(agtv_lhs->val.float_value, agtv_rhs->val.float_value); } else if (agtv_lhs->type == AGTV_FLOAT && agtv_rhs->type == AGTV_INTEGER) { agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = pow(agtv_lhs->val.float_value, agtv_rhs->val.int_value); } else if (agtv_lhs->type == AGTV_INTEGER && agtv_rhs->type == AGTV_FLOAT) { agtv_result.type = AGTV_FLOAT; agtv_result.val.float_value = pow(agtv_lhs->val.int_value, agtv_rhs->val.float_value); } /* Is this a numeric result */ else if (is_numeric_result(agtv_lhs, agtv_rhs)) { Datum numd, lhsd, rhsd; lhsd = get_numeric_datum_from_agtype_value(agtv_lhs); rhsd = get_numeric_datum_from_agtype_value(agtv_rhs); numd = DirectFunctionCall2(numeric_power, lhsd, rhsd); agtv_result.type = AGTV_NUMERIC; agtv_result.val.numeric = DatumGetNumeric(numd); } else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Invalid input parameter types for agtype_pow"))); AG_RETURN_AGTYPE_P(agtype_value_to_agtype(&agtv_result)); } PG_FUNCTION_INFO_V1(agtype_eq); Datum agtype_eq(PG_FUNCTION_ARGS) { agtype *agtype_lhs = AG_GET_ARG_AGTYPE_P(0); agtype *agtype_rhs = AG_GET_ARG_AGTYPE_P(1); bool result; result = (compare_agtype_containers_orderability(&agtype_lhs->root, &agtype_rhs->root) == 0); PG_FREE_IF_COPY(agtype_lhs, 0); PG_FREE_IF_COPY(agtype_rhs, 1); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(agtype_any_eq); Datum agtype_any_eq(PG_FUNCTION_ARGS) { agtype *lhs; agtype *rhs; Datum result; lhs = get_one_agtype_from_variadic_args(fcinfo, 0, 2); rhs = get_one_agtype_from_variadic_args(fcinfo, 1, 1); if (lhs == NULL || rhs == NULL) { PG_RETURN_NULL(); } result = DirectFunctionCall2(agtype_eq, AGTYPE_P_GET_DATUM(lhs), AGTYPE_P_GET_DATUM(rhs)); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(agtype_ne); Datum agtype_ne(PG_FUNCTION_ARGS) { agtype *agtype_lhs = AG_GET_ARG_AGTYPE_P(0); agtype *agtype_rhs = AG_GET_ARG_AGTYPE_P(1); bool result = true; result = (compare_agtype_containers_orderability(&agtype_lhs->root, &agtype_rhs->root) != 0); PG_FREE_IF_COPY(agtype_lhs, 0); PG_FREE_IF_COPY(agtype_rhs, 1); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(agtype_any_ne); Datum agtype_any_ne(PG_FUNCTION_ARGS) { agtype *lhs; agtype *rhs; Datum result; lhs = get_one_agtype_from_variadic_args(fcinfo, 0, 2); rhs = get_one_agtype_from_variadic_args(fcinfo, 1, 1); if (lhs == NULL || rhs == NULL) { PG_RETURN_NULL(); } result = DirectFunctionCall2(agtype_ne, AGTYPE_P_GET_DATUM(lhs), AGTYPE_P_GET_DATUM(rhs)); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(agtype_lt); Datum agtype_lt(PG_FUNCTION_ARGS) { agtype *agtype_lhs = AG_GET_ARG_AGTYPE_P(0); agtype *agtype_rhs = AG_GET_ARG_AGTYPE_P(1); bool result; result = (compare_agtype_containers_orderability(&agtype_lhs->root, &agtype_rhs->root) < 0); PG_FREE_IF_COPY(agtype_lhs, 0); PG_FREE_IF_COPY(agtype_rhs, 1); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(agtype_any_lt); Datum agtype_any_lt(PG_FUNCTION_ARGS) { agtype *lhs; agtype *rhs; Datum result; lhs = get_one_agtype_from_variadic_args(fcinfo, 0, 2); rhs = get_one_agtype_from_variadic_args(fcinfo, 1, 1); if (lhs == NULL || rhs == NULL) { PG_RETURN_NULL(); } result = DirectFunctionCall2(agtype_lt, AGTYPE_P_GET_DATUM(lhs), AGTYPE_P_GET_DATUM(rhs)); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(agtype_gt); Datum agtype_gt(PG_FUNCTION_ARGS) { agtype *agtype_lhs = AG_GET_ARG_AGTYPE_P(0); agtype *agtype_rhs = AG_GET_ARG_AGTYPE_P(1); bool result; result = (compare_agtype_containers_orderability(&agtype_lhs->root, &agtype_rhs->root) > 0); PG_FREE_IF_COPY(agtype_lhs, 0); PG_FREE_IF_COPY(agtype_rhs, 1); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(agtype_any_gt); Datum agtype_any_gt(PG_FUNCTION_ARGS) { agtype *lhs; agtype *rhs; Datum result; lhs = get_one_agtype_from_variadic_args(fcinfo, 0, 2); rhs = get_one_agtype_from_variadic_args(fcinfo, 1, 1); if (lhs == NULL || rhs == NULL) { PG_RETURN_NULL(); } result = DirectFunctionCall2(agtype_gt, AGTYPE_P_GET_DATUM(lhs), AGTYPE_P_GET_DATUM(rhs)); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(agtype_le); Datum agtype_le(PG_FUNCTION_ARGS) { agtype *agtype_lhs = AG_GET_ARG_AGTYPE_P(0); agtype *agtype_rhs = AG_GET_ARG_AGTYPE_P(1); bool result; result = (compare_agtype_containers_orderability(&agtype_lhs->root, &agtype_rhs->root) <= 0); PG_FREE_IF_COPY(agtype_lhs, 0); PG_FREE_IF_COPY(agtype_rhs, 1); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(agtype_any_le); Datum agtype_any_le(PG_FUNCTION_ARGS) { agtype *lhs; agtype *rhs; Datum result; lhs = get_one_agtype_from_variadic_args(fcinfo, 0, 2); rhs = get_one_agtype_from_variadic_args(fcinfo, 1, 1); if (lhs == NULL || rhs == NULL) { PG_RETURN_NULL(); } result = DirectFunctionCall2(agtype_le, AGTYPE_P_GET_DATUM(lhs), AGTYPE_P_GET_DATUM(rhs)); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(agtype_ge); Datum agtype_ge(PG_FUNCTION_ARGS) { agtype *agtype_lhs = AG_GET_ARG_AGTYPE_P(0); agtype *agtype_rhs = AG_GET_ARG_AGTYPE_P(1); bool result; result = (compare_agtype_containers_orderability(&agtype_lhs->root, &agtype_rhs->root) >= 0); PG_FREE_IF_COPY(agtype_lhs, 0); PG_FREE_IF_COPY(agtype_rhs, 1); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(agtype_any_ge); Datum agtype_any_ge(PG_FUNCTION_ARGS) { agtype *lhs; agtype *rhs; Datum result; lhs = get_one_agtype_from_variadic_args(fcinfo, 0, 2); rhs = get_one_agtype_from_variadic_args(fcinfo, 1, 1); if (lhs == NULL || rhs == NULL) { PG_RETURN_NULL(); } result = DirectFunctionCall2(agtype_ge, AGTYPE_P_GET_DATUM(lhs), AGTYPE_P_GET_DATUM(rhs)); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(agtype_exists_agtype); /* * ? operator for agtype. Returns true if the string exists as top-level keys */ Datum agtype_exists_agtype(PG_FUNCTION_ARGS) { agtype *agt = AG_GET_ARG_AGTYPE_P(0); agtype *key = AG_GET_ARG_AGTYPE_P(1); agtype_value *aval; agtype_value *v = NULL; if (AGT_ROOT_IS_SCALAR(agt)) { agt = agtype_value_to_agtype(extract_entity_properties(agt, false)); } if (AGT_ROOT_IS_SCALAR(key)) { aval = get_ith_agtype_value_from_container(&key->root, 0); } else { PG_RETURN_BOOL(false); } if (AGT_ROOT_IS_OBJECT(agt) && aval->type == AGTV_STRING) { v = find_agtype_value_from_container(&agt->root, AGT_FOBJECT, aval); } else if (AGT_ROOT_IS_ARRAY(agt) && aval->type != AGTV_NULL) { v = find_agtype_value_from_container(&agt->root, AGT_FARRAY, aval); } PG_RETURN_BOOL(v != NULL); } PG_FUNCTION_INFO_V1(agtype_exists_any_agtype); /* * ?| operator for agtype. Returns true if any of the array strings exist as * top-level keys */ Datum agtype_exists_any_agtype(PG_FUNCTION_ARGS) { agtype *agt = AG_GET_ARG_AGTYPE_P(0); agtype *keys = AG_GET_ARG_AGTYPE_P(1); agtype_value elem; agtype_iterator *it = NULL; if (AGT_ROOT_IS_SCALAR(agt)) { agt = agtype_value_to_agtype(extract_entity_properties(agt, true)); } if (!AGT_ROOT_IS_SCALAR(keys) && !AGT_ROOT_IS_OBJECT(keys)) { while ((it = get_next_list_element(it, &keys->root, &elem))) { if (IS_A_AGTYPE_SCALAR(&elem)) { if (AGT_ROOT_IS_OBJECT(agt) && (&elem)->type == AGTV_STRING && find_agtype_value_from_container(&agt->root, AGT_FOBJECT, &elem)) { PG_RETURN_BOOL(true); } else if (AGT_ROOT_IS_ARRAY(agt) && (&elem)->type != AGTV_NULL && find_agtype_value_from_container(&agt->root, AGT_FARRAY, &elem)) { PG_RETURN_BOOL(true); } } else { PG_RETURN_BOOL(false); } } } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid agtype value for right operand"))); } PG_RETURN_BOOL(false); } PG_FUNCTION_INFO_V1(agtype_exists_all_agtype); /* * ?& operator for agtype. Returns true if all of the array strings exist as * top-level keys */ Datum agtype_exists_all_agtype(PG_FUNCTION_ARGS) { agtype *agt = AG_GET_ARG_AGTYPE_P(0); agtype *keys = AG_GET_ARG_AGTYPE_P(1); agtype_value elem; agtype_iterator *it = NULL; if (AGT_ROOT_IS_SCALAR(agt)) { agt = agtype_value_to_agtype(extract_entity_properties(agt, true)); } if (!AGT_ROOT_IS_SCALAR(keys) && !AGT_ROOT_IS_OBJECT(keys)) { while ((it = get_next_list_element(it, &keys->root, &elem))) { if (IS_A_AGTYPE_SCALAR(&elem)) { if ((&elem)->type == AGTV_NULL) { continue; } else if (AGT_ROOT_IS_OBJECT(agt) && (&elem)->type == AGTV_STRING && find_agtype_value_from_container(&agt->root, AGT_FOBJECT, &elem)) { continue; } else if (AGT_ROOT_IS_ARRAY(agt) && find_agtype_value_from_container(&agt->root, AGT_FARRAY, &elem)) { continue; } else { PG_RETURN_BOOL(false); } } else { PG_RETURN_BOOL(false); } } } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid agtype value for right operand"))); } PG_RETURN_BOOL(true); } PG_FUNCTION_INFO_V1(agtype_contains); /* * @> operator for agtype. Returns true if the right agtype path/value entries * contained at the top level within the left agtype value */ Datum agtype_contains(PG_FUNCTION_ARGS) { agtype_iterator *constraint_it = NULL; agtype_iterator *property_it = NULL; agtype *properties = NULL; agtype *constraints = NULL; if (PG_ARGISNULL(0) || PG_ARGISNULL(1)) { PG_RETURN_BOOL(false); } properties = AG_GET_ARG_AGTYPE_P(0); constraints = AG_GET_ARG_AGTYPE_P(1); if (AGT_ROOT_IS_SCALAR(properties) && AGTE_IS_AGTYPE(properties->root.children[0])) { properties = agtype_value_to_agtype(extract_entity_properties(properties, false)); } if (AGT_ROOT_IS_SCALAR(constraints) && AGTE_IS_AGTYPE(constraints->root.children[0])) { constraints = agtype_value_to_agtype(extract_entity_properties(constraints, false)); } if (AGT_ROOT_IS_OBJECT(properties) != AGT_ROOT_IS_OBJECT(constraints)) { PG_RETURN_BOOL(false); } property_it = agtype_iterator_init(&properties->root); constraint_it = agtype_iterator_init(&constraints->root); PG_RETURN_BOOL(agtype_deep_contains(&property_it, &constraint_it)); } PG_FUNCTION_INFO_V1(agtype_contained_by); /* * <@ operator for agtype. Returns true if the left agtype path/value entries * contained at the top level within the right agtype value */ Datum agtype_contained_by(PG_FUNCTION_ARGS) { agtype_iterator *constraint_it, *property_it; agtype *properties, *constraints; if (PG_ARGISNULL(0) || PG_ARGISNULL(1)) { PG_RETURN_BOOL(false); } properties = AG_GET_ARG_AGTYPE_P(0); constraints = AG_GET_ARG_AGTYPE_P(1); if (AGT_ROOT_IS_SCALAR(properties) && AGTE_IS_AGTYPE(properties->root.children[0])) { properties = agtype_value_to_agtype(extract_entity_properties(properties, false)); } if (AGT_ROOT_IS_SCALAR(constraints) && AGTE_IS_AGTYPE(constraints->root.children[0])) { constraints = agtype_value_to_agtype(extract_entity_properties(constraints, false)); } constraint_it = agtype_iterator_init(&constraints->root); property_it = agtype_iterator_init(&properties->root); PG_RETURN_BOOL(agtype_deep_contains(&constraint_it, &property_it)); } PG_FUNCTION_INFO_V1(agtype_exists); /* * ? operator for agtype. Returns true if the string exists as top-level keys */ Datum agtype_exists(PG_FUNCTION_ARGS) { agtype *agt = AG_GET_ARG_AGTYPE_P(0); text *key = PG_GETARG_TEXT_PP(1); agtype_value aval; agtype_value *v = NULL; /* * We only match Object keys (which are naturally always Strings), or * string elements in arrays. In particular, we do not match non-string * scalar elements. Existence of a key/element is only considered at the * top level. No recursion occurs. */ aval.type = AGTV_STRING; aval.val.string.val = VARDATA_ANY(key); aval.val.string.len = VARSIZE_ANY_EXHDR(key); v = find_agtype_value_from_container(&agt->root, AGT_FOBJECT | AGT_FARRAY, &aval); PG_RETURN_BOOL(v != NULL); } PG_FUNCTION_INFO_V1(agtype_exists_any); /* * ?| operator for agtype. Returns true if any of the array strings exist as * top-level keys */ Datum agtype_exists_any(PG_FUNCTION_ARGS) { agtype *agt = AG_GET_ARG_AGTYPE_P(0); ArrayType *keys = PG_GETARG_ARRAYTYPE_P(1); int i; Datum *key_datums; bool *key_nulls; int elem_count; deconstruct_array(keys, TEXTOID, -1, false, 'i', &key_datums, &key_nulls, &elem_count); for (i = 0; i < elem_count; i++) { agtype_value strVal; if (key_nulls[i]) { continue; } strVal.type = AGTV_STRING; strVal.val.string.val = VARDATA(key_datums[i]); strVal.val.string.len = VARSIZE(key_datums[i]) - VARHDRSZ; if (find_agtype_value_from_container(&agt->root, AGT_FOBJECT | AGT_FARRAY, &strVal) != NULL) { PG_RETURN_BOOL(true); } } PG_RETURN_BOOL(false); } PG_FUNCTION_INFO_V1(agtype_exists_all); /* * ?& operator for agtype. Returns true if all of the array strings exist as * top-level keys */ Datum agtype_exists_all(PG_FUNCTION_ARGS) { agtype *agt = AG_GET_ARG_AGTYPE_P(0); ArrayType *keys = PG_GETARG_ARRAYTYPE_P(1); int i; Datum *key_datums; bool *key_nulls; int elem_count; deconstruct_array(keys, TEXTOID, -1, false, 'i', &key_datums, &key_nulls, &elem_count); for (i = 0; i < elem_count; i++) { agtype_value strVal; if (key_nulls[i]) { continue; } strVal.type = AGTV_STRING; strVal.val.string.val = VARDATA(key_datums[i]); strVal.val.string.len = VARSIZE(key_datums[i]) - VARHDRSZ; if (find_agtype_value_from_container(&agt->root, AGT_FOBJECT | AGT_FARRAY, &strVal) == NULL) { PG_RETURN_BOOL(false); } } PG_RETURN_BOOL(true); } PG_FUNCTION_INFO_V1(agtype_concat); Datum agtype_concat(PG_FUNCTION_ARGS) { agtype *agt_lhs = AG_GET_ARG_AGTYPE_P(0); agtype *agt_rhs = AG_GET_ARG_AGTYPE_P(1); /* * Jsonb returns NULL for PG Null, but not for jsonb's NULL value, * so we do the same. */ if (PG_ARGISNULL(0) || PG_ARGISNULL(1)) { PG_RETURN_NULL(); } AG_RETURN_AGTYPE_P(agtype_concat_impl(agt_lhs, agt_rhs)); } static agtype *agtype_concat_impl(agtype *agt1, agtype *agt2) { agtype_parse_state *state = NULL; agtype_value *res; agtype_iterator *it1; agtype_iterator *it2; /* * If one of the agtype is empty, just return the other if it's not scalar * and both are of the same kind. If it's a scalar or they are of * different kinds we need to perform the concatenation even if one is * empty. */ if (AGT_ROOT_IS_OBJECT(agt1) == AGT_ROOT_IS_OBJECT(agt2)) { if (AGT_ROOT_COUNT(agt1) == 0 && !AGT_ROOT_IS_SCALAR(agt2)) { return agt2; } else if (AGT_ROOT_COUNT(agt2) == 0 && !AGT_ROOT_IS_SCALAR(agt1)) { return agt1; } } it1 = agtype_iterator_init(&agt1->root); it2 = agtype_iterator_init(&agt2->root); res = iterator_concat(&it1, &it2, &state); Assert(res != NULL); return (agtype_value_to_agtype(res)); } /* * Iterate over all agtype objects and merge them into one. * The logic of this function copied from the same hstore function, * except the case, when it1 & it2 represents jbvObject. * In that case we just append the content of it2 to it1 without any * verifications. */ static agtype_value *iterator_concat(agtype_iterator **it1, agtype_iterator **it2, agtype_parse_state **state) { agtype_value v1, v2, *res = NULL; agtype_iterator_token r1, r2, rk1, rk2; r1 = rk1 = agtype_iterator_next(it1, &v1, false); r2 = rk2 = agtype_iterator_next(it2, &v2, false); /* * Both elements are objects. */ if (rk1 == WAGT_BEGIN_OBJECT && rk2 == WAGT_BEGIN_OBJECT) { /* * Append all tokens from v1 to res, except last WAGT_END_OBJECT * (because res will not be finished yet). */ push_agtype_value(state, r1, NULL); while ((r1 = agtype_iterator_next(it1, &v1, true)) != WAGT_END_OBJECT) { Assert(r1 == WAGT_KEY || r1 == WAGT_VALUE); push_agtype_value(state, r1, &v1); } /* * Append all tokens from v2 to res, except last WAGT_END_OBJECT */ while ((r2 = agtype_iterator_next(it2, &v2, true)) != WAGT_END_OBJECT) { Assert(r2 == WAGT_KEY || r2 == WAGT_VALUE); push_agtype_value(state, r2, &v2); } /* * Append the last token WAGT_END_OBJECT to complete res */ res = push_agtype_value(state, WAGT_END_OBJECT, NULL); } /* * Both elements are arrays (either can be scalar). */ else if (rk1 == WAGT_BEGIN_ARRAY && rk2 == WAGT_BEGIN_ARRAY) { push_agtype_value(state, r1, NULL); while ((r1 = agtype_iterator_next(it1, &v1, true)) != WAGT_END_ARRAY) { Assert(r1 == WAGT_ELEM); push_agtype_value(state, r1, &v1); } while ((r2 = agtype_iterator_next(it2, &v2, true)) != WAGT_END_ARRAY) { Assert(r2 == WAGT_ELEM); push_agtype_value(state, r2, &v2); } res = push_agtype_value(state, WAGT_END_ARRAY, NULL); } /* have we got array || object or object || array? */ else if (((rk1 == WAGT_BEGIN_ARRAY && !(*it1)->is_scalar) && rk2 == WAGT_BEGIN_OBJECT) || (rk1 == WAGT_BEGIN_OBJECT && (rk2 == WAGT_BEGIN_ARRAY && !(*it2)->is_scalar))) { agtype_iterator **it_array = rk1 == WAGT_BEGIN_ARRAY ? it1 : it2; agtype_iterator **it_object = rk1 == WAGT_BEGIN_OBJECT ? it1 : it2; bool prepend = (rk1 == WAGT_BEGIN_OBJECT); push_agtype_value(state, WAGT_BEGIN_ARRAY, NULL); if (prepend) { push_agtype_value(state, WAGT_BEGIN_OBJECT, NULL); while ((r1 = agtype_iterator_next(it_object, &v1, true)) != WAGT_END_OBJECT) { Assert(r1 == WAGT_KEY || r1 == WAGT_VALUE); push_agtype_value(state, r1, &v1); } push_agtype_value(state, WAGT_END_OBJECT, NULL); while ((r2 = agtype_iterator_next(it_array, &v2, true)) != WAGT_END_ARRAY) { Assert(r2 == WAGT_ELEM); push_agtype_value(state, r2, &v2); } res = push_agtype_value(state, WAGT_END_ARRAY, NULL); } else { while ((r1 = agtype_iterator_next(it_array, &v1, true)) != WAGT_END_ARRAY) { Assert(r1 == WAGT_ELEM); push_agtype_value(state, r1, &v1); } push_agtype_value(state, WAGT_BEGIN_OBJECT, NULL); while ((r2 = agtype_iterator_next(it_object, &v2, true)) != WAGT_END_OBJECT) { Assert(r2 == WAGT_KEY || r2 == WAGT_VALUE); push_agtype_value(state, r2,&v2); } push_agtype_value(state, WAGT_END_OBJECT, NULL); res = push_agtype_value(state, WAGT_END_ARRAY, NULL); } } else if (rk1 == WAGT_BEGIN_OBJECT) { /* * We have object || array. */ Assert(rk1 == WAGT_BEGIN_OBJECT); Assert(rk2 == WAGT_BEGIN_ARRAY); push_agtype_value(state, WAGT_BEGIN_ARRAY, NULL); push_agtype_value(state, WAGT_BEGIN_OBJECT, NULL); while ((r1 = agtype_iterator_next(it1, &v1, true)) != WAGT_END_OBJECT) { Assert(r1 == WAGT_KEY || r1 == WAGT_VALUE); push_agtype_value(state, r1, &v1); } push_agtype_value(state, WAGT_END_OBJECT, NULL); while ((r2 = agtype_iterator_next(it2, &v2, true)) != WAGT_END_ARRAY) { if (v2.type < AGTV_VERTEX || v2.type > AGTV_PATH) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid right operand for agtype " "concatenation"))); } Assert(r2 == WAGT_ELEM); push_agtype_value(state, r2, &v2); } res = push_agtype_value(state, WAGT_END_ARRAY, NULL); } else { /* * We have array || object. */ Assert(rk1 == WAGT_BEGIN_ARRAY); Assert(rk2 == WAGT_BEGIN_OBJECT); push_agtype_value(state, WAGT_BEGIN_ARRAY, NULL); while ((r1 = agtype_iterator_next(it1, &v1, true)) != WAGT_END_ARRAY) { if (v1.type < AGTV_VERTEX || v1.type > AGTV_PATH) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid left operand for agtype " "concatenation"))); } Assert(r1 == WAGT_ELEM); push_agtype_value(state, r1, &v1); } push_agtype_value(state, WAGT_BEGIN_OBJECT, NULL); while ((r2 = agtype_iterator_next(it2, &v2, true)) != WAGT_END_OBJECT) { Assert(r2 == WAGT_KEY || r2 == WAGT_VALUE); push_agtype_value(state, r2, &v2); } push_agtype_value(state, WAGT_END_OBJECT, NULL); res = push_agtype_value(state, WAGT_END_ARRAY, NULL); } return res; } /* * agtype path extraction operator '#>'. The right operand can * either be an array of object keys or array indexes for extracting * agtype sub-object or sub-array from the left operand. */ PG_FUNCTION_INFO_V1(agtype_extract_path); Datum agtype_extract_path(PG_FUNCTION_ARGS) { return get_agtype_path_all(fcinfo, false); } /* * agtype path extraction operator '#>>' that returns the extracted path * as text. */ PG_FUNCTION_INFO_V1(agtype_extract_path_text); Datum agtype_extract_path_text(PG_FUNCTION_ARGS) { return get_agtype_path_all(fcinfo, true); } static Datum get_agtype_path_all(FunctionCallInfo fcinfo, bool as_text) { agtype *agt = AG_GET_ARG_AGTYPE_P(0); agtype *path = AG_GET_ARG_AGTYPE_P(1); agtype *res; int npath; int i; bool have_object = false, have_array = false; agtype_value *agtvp = NULL; agtype_value tv; agtype_container *container; if (AGT_ROOT_IS_SCALAR(path) || AGT_ROOT_IS_OBJECT(path)) { ereport(ERROR,(errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("right operand must be an array"))); } if (AGT_ROOT_IS_SCALAR(agt)) { agt = agtype_value_to_agtype(extract_entity_properties(agt, true)); } npath = AGT_ROOT_COUNT(path); container = &agt->root; /* Identify whether we have object, array, or scalar at top-level */ if (AGT_ROOT_IS_OBJECT(agt)) { have_object = true; } else if (AGT_ROOT_IS_ARRAY(agt) && !AGT_ROOT_IS_SCALAR(agt)) { have_array = true; } else { Assert(AGT_ROOT_IS_ARRAY(agt) && AGT_ROOT_IS_SCALAR(agt)); /* Extract the scalar value */ if (npath <= 0) { agtvp = get_ith_agtype_value_from_container(container, 0); } } /* * If RHS array is empty, return the entire LHS object/array, based on the * assumption that we should not do any field or element extractions. In * case of non-scalar, we can just hand back the agtype without much * work but for the scalar case, fall through and deal with the value * below the loop (This inconsistency arises because there's no easy way to * generate an agtype_value directly for root-level containers) */ if (npath <= 0 && agtvp == NULL) { if (as_text) { PG_RETURN_TEXT_P(cstring_to_text(agtype_to_cstring(NULL, container, VARSIZE(agt)))); } else { /* not text mode - just hand back the agtype */ AG_RETURN_AGTYPE_P(agt); } } for (i = 0; i < npath; i++) { agtype_value *cur_key = get_ith_agtype_value_from_container(&path->root, i); if (have_object && cur_key->type == AGTV_STRING) { agtvp = find_agtype_value_from_container(container, AGT_FOBJECT, cur_key); } else if (have_array) { long lindex; uint32 index; /* * for array on LHS, there should be an integer or a * valid integer string on RHS */ if (cur_key->type == AGTV_INTEGER) { lindex = cur_key->val.int_value; } else if (cur_key->type == AGTV_STRING) { /* * extract the integer from the string, * if character other than a digit is found, return null */ char* str = NULL; lindex = strtol(cur_key->val.string.val, &str, 10); if (strcmp(str, "")) { PG_RETURN_NULL(); } } else { PG_RETURN_NULL(); } if (lindex > INT_MAX || lindex < INT_MIN) { PG_RETURN_NULL(); } if (lindex >= 0) { index = (uint32) lindex; } else { /* Handle negative subscript */ uint32 nelements; /* Container must be an array, but make sure */ if (!AGTYPE_CONTAINER_IS_ARRAY(container)) { elog(ERROR, "not an agtype array"); } nelements = AGTYPE_CONTAINER_SIZE(container); if (-lindex > nelements) { PG_RETURN_NULL(); } else { index = nelements + lindex; } } agtvp = get_ith_agtype_value_from_container(container, index); } else { PG_RETURN_NULL(); } if (agtvp == NULL) { PG_RETURN_NULL(); } else if (i == npath - 1) { break; } if (agtvp->type == AGTV_BINARY) { agtype_iterator_token r; agtype_iterator *it = agtype_iterator_init((agtype_container *) agtvp->val.binary.data); r = agtype_iterator_next(&it, &tv, true); container = (agtype_container *) agtvp->val.binary.data; have_object = r == WAGT_BEGIN_OBJECT; have_array = r == WAGT_BEGIN_ARRAY; } else { have_object = agtvp->type == AGTV_OBJECT; have_array = agtvp->type == AGTV_ARRAY; } } if (as_text) { /* special-case output for string and null values */ if (agtvp->type == AGTV_STRING) { PG_RETURN_TEXT_P(cstring_to_text_with_len(agtvp->val.string.val, agtvp->val.string.len)); } if (agtvp->type == AGTV_NULL) { PG_RETURN_NULL(); } } res = agtype_value_to_agtype(agtvp); if (as_text) { PG_RETURN_TEXT_P(cstring_to_text(agtype_to_cstring(NULL, &res->root, VARSIZE(res)))); } else { /* not text mode - just hand back the agtype */ AG_RETURN_AGTYPE_P(res); } } age-PG16-v1.5.0-rc0/src/backend/utils/adt/agtype_parser.c000066400000000000000000001402551454606241200227060ustar00rootroot00000000000000/* * For PostgreSQL Database Management System: * (formerly known as Postgres, then as Postgres95) * * Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group * * Portions Copyright (c) 1994, The Regents of the University of California * * Permission to use, copy, modify, and distribute this software and its documentation for any purpose, * without fee, and without a written agreement is hereby granted, provided that the above copyright notice * and this paragraph and the following two paragraphs appear in all copies. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA * HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ /* * agtype parser. * * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California */ #include "postgres.h" #include "varatt.h" #include "catalog/pg_type.h" #include "libpq/pqformat.h" #include "miscadmin.h" #include "utils/date.h" #include "utils/datetime.h" #include "utils/varlena.h" #include "utils/agtype.h" #include "utils/agtype_parser.h" /* * The context of the parser is maintained by the recursive descent * mechanism, but is passed explicitly to the error reporting routine * for better diagnostics. */ typedef enum /* contexts of agtype parser */ { AGTYPE_PARSE_VALUE, /* expecting a value */ AGTYPE_PARSE_STRING, /* expecting a string (for a field name) */ AGTYPE_PARSE_ARRAY_START, /* saw '[', expecting value or ']' */ AGTYPE_PARSE_ARRAY_NEXT, /* saw array element, expecting ',' or ']' */ AGTYPE_PARSE_OBJECT_START, /* saw '{', expecting label or '}' */ AGTYPE_PARSE_OBJECT_LABEL, /* saw object label, expecting ':' */ AGTYPE_PARSE_OBJECT_NEXT, /* saw object value, expecting ',' or '}' */ AGTYPE_PARSE_OBJECT_COMMA, /* saw object ',', expecting next label */ AGTYPE_PARSE_END /* saw the end of a document, expect nothing */ } agtype_parse_context; static inline void agtype_lex(agtype_lex_context *lex); static inline void agtype_lex_string(agtype_lex_context *lex); static inline void agtype_lex_number(agtype_lex_context *lex, char *s, bool *num_err, int *total_len); static void parse_scalar_annotation(agtype_lex_context *lex, void *func, char **annotation); static void parse_annotation(agtype_lex_context *lex, agtype_sem_action *sem); static inline void parse_scalar(agtype_lex_context *lex, agtype_sem_action *sem); static void parse_object_field(agtype_lex_context *lex, agtype_sem_action *sem); static void parse_object(agtype_lex_context *lex, agtype_sem_action *sem); static void parse_array_element(agtype_lex_context *lex, agtype_sem_action *sem); static void parse_array(agtype_lex_context *lex, agtype_sem_action *sem); static void report_parse_error(agtype_parse_context ctx, agtype_lex_context *lex) pg_attribute_noreturn(); static void report_invalid_token(agtype_lex_context *lex) pg_attribute_noreturn(); static int report_agtype_context(agtype_lex_context *lex); static char *extract_mb_char(char *s); /* Recursive Descent parser support routines */ /* * lex_peek * * what is the current look_ahead token? */ static inline agtype_token_type lex_peek(agtype_lex_context *lex) { return lex->token_type; } /* * lex_accept * * accept the look_ahead token and move the lexer to the next token if the * look_ahead token matches the token parameter. In that case, and if required, * also hand back the de-escaped lexeme. * * returns true if the token matched, false otherwise. */ static inline bool lex_accept(agtype_lex_context *lex, agtype_token_type token, char **lexeme) { if (lex->token_type == token) { if (lexeme != NULL) { if (lex->token_type == AGTYPE_TOKEN_STRING) { if (lex->strval != NULL) *lexeme = pstrdup(lex->strval->data); } else { int len = (lex->token_terminator - lex->token_start); char *tokstr = palloc(len + 1); memcpy(tokstr, lex->token_start, len); tokstr[len] = '\0'; *lexeme = tokstr; } } agtype_lex(lex); return true; } return false; } /* * lex_accept * * move the lexer to the next token if the current look_ahead token matches * the parameter token. Otherwise, report an error. */ static inline void lex_expect(agtype_parse_context ctx, agtype_lex_context *lex, agtype_token_type token) { if (!lex_accept(lex, token, NULL)) report_parse_error(ctx, lex); } /* chars to consider as part of an alphanumeric token */ #define AGTYPE_ALPHANUMERIC_CHAR(c) \ (((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && (c) <= 'Z') || \ ((c) >= '0' && (c) <= '9') || (c) == '_' || IS_HIGHBIT_SET(c)) /* * Utility function to check if a string is a valid agtype number. * * str is of length len, and need not be null-terminated. */ bool is_valid_agtype_number(const char *str, int len) { bool numeric_error; int total_len; agtype_lex_context dummy_lex; if (len <= 0) return false; /* * agtype_lex_number expects a leading '-' to have been eaten already. * * having to cast away the constness of str is ugly, but there's not much * easy alternative. */ if (*str == '-') { dummy_lex.input = (char *)str + 1; dummy_lex.input_length = len - 1; } else { dummy_lex.input = (char *)str; dummy_lex.input_length = len; } agtype_lex_number(&dummy_lex, dummy_lex.input, &numeric_error, &total_len); return (!numeric_error) && (total_len == dummy_lex.input_length); } /* * make_agtype_lex_context * * lex constructor, with or without StringInfo object * for de-escaped lexemes. * * Without is better as it makes the processing faster, so only make one * if really required. * * If you already have the agtype as a text* value, use the first of these * functions, otherwise use agtype_lex_context_cstring_len(). */ agtype_lex_context *make_agtype_lex_context(text *t, bool need_escapes) { return make_agtype_lex_context_cstring_len( VARDATA_ANY(t), VARSIZE_ANY_EXHDR(t), need_escapes); } agtype_lex_context *make_agtype_lex_context_cstring_len(char *str, int len, bool need_escapes) { agtype_lex_context *lex = palloc0(sizeof(agtype_lex_context)); lex->input = lex->token_terminator = lex->line_start = str; lex->line_number = 1; lex->input_length = len; if (need_escapes) lex->strval = makeStringInfo(); return lex; } /* * parse_agtype * * Publicly visible entry point for the agtype parser. * * lex is a lexing context, set up for the agtype to be processed by calling * make_agtype_lex_context(). sem is a structure of function pointers to * semantic action routines to be called at appropriate spots during parsing, * and a pointer to a state object to be passed to those routines. */ void parse_agtype(agtype_lex_context *lex, agtype_sem_action *sem) { agtype_token_type tok; /* get the initial token */ agtype_lex(lex); tok = lex_peek(lex); /* parse by recursive descent */ switch (tok) { case AGTYPE_TOKEN_OBJECT_START: parse_object(lex, sem); break; case AGTYPE_TOKEN_ARRAY_START: parse_array(lex, sem); break; default: parse_scalar(lex, sem); /* agtype can be a bare scalar */ } lex_expect(AGTYPE_PARSE_END, lex, AGTYPE_TOKEN_END); } static void parse_scalar_annotation(agtype_lex_context *lex, void *func, char **annotation) { /* check next token for annotations (typecasts, etc.) */ if (lex_peek(lex) == AGTYPE_TOKEN_ANNOTATION) { /* eat the annotation token */ lex_accept(lex, AGTYPE_TOKEN_ANNOTATION, NULL); if (lex_peek(lex) == AGTYPE_TOKEN_IDENTIFIER) { /* eat the identifier token and get the annotation value */ if (func != NULL) lex_accept(lex, AGTYPE_TOKEN_IDENTIFIER, annotation); else lex_accept(lex, AGTYPE_TOKEN_IDENTIFIER, NULL); } else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid value for annotation"))); } } static void parse_annotation(agtype_lex_context *lex, agtype_sem_action *sem) { char *annotation = NULL; agtype_annotation_action afunc = sem->agtype_annotation; /* check next token for annotations (typecasts, etc.) */ if (lex_peek(lex) == AGTYPE_TOKEN_ANNOTATION) { /* eat the annotation token */ lex_accept(lex, AGTYPE_TOKEN_ANNOTATION, NULL); if (lex_peek(lex) == AGTYPE_TOKEN_IDENTIFIER) { /* eat the identifier token and get the annotation value */ lex_accept(lex, AGTYPE_TOKEN_IDENTIFIER, &annotation); } else ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid value for annotation"))); /* pass to annotation callback */ if (afunc != NULL) (*afunc)(sem->semstate, annotation); } } /* * Recursive Descent parse routines. There is one for each structural * element in an agtype document: * - scalar (string, number, true, false, null) * - array ( [ ] ) * - array element * - object ( { } ) * - object field */ static inline void parse_scalar(agtype_lex_context *lex, agtype_sem_action *sem) { char *val = NULL; char *annotation = NULL; agtype_scalar_action sfunc = sem->scalar; char **valaddr; agtype_token_type tok = lex_peek(lex); valaddr = sfunc == NULL ? NULL : &val; /* a scalar must be a string, a number, true, false, or null */ switch (tok) { case AGTYPE_TOKEN_TRUE: lex_accept(lex, AGTYPE_TOKEN_TRUE, valaddr); break; case AGTYPE_TOKEN_FALSE: lex_accept(lex, AGTYPE_TOKEN_FALSE, valaddr); break; case AGTYPE_TOKEN_NULL: lex_accept(lex, AGTYPE_TOKEN_NULL, valaddr); break; case AGTYPE_TOKEN_INTEGER: lex_accept(lex, AGTYPE_TOKEN_INTEGER, valaddr); break; case AGTYPE_TOKEN_FLOAT: lex_accept(lex, AGTYPE_TOKEN_FLOAT, valaddr); break; case AGTYPE_TOKEN_STRING: lex_accept(lex, AGTYPE_TOKEN_STRING, valaddr); break; default: report_parse_error(AGTYPE_PARSE_VALUE, lex); } /* parse annotations (typecasts) */ parse_scalar_annotation(lex, sfunc, &annotation); if (sfunc != NULL) (*sfunc)(sem->semstate, val, tok, annotation); } static void parse_object_field(agtype_lex_context *lex, agtype_sem_action *sem) { /* * An object field is "fieldname" : value where value can be a scalar, * object or array. Note: in user-facing docs and error messages, we * generally call a field name a "key". */ char *fname = NULL; /* keep compiler quiet */ agtype_ofield_action ostart = sem->object_field_start; agtype_ofield_action oend = sem->object_field_end; bool isnull; char **fnameaddr = NULL; agtype_token_type tok; if (ostart != NULL || oend != NULL) fnameaddr = &fname; if (!lex_accept(lex, AGTYPE_TOKEN_STRING, fnameaddr)) report_parse_error(AGTYPE_PARSE_STRING, lex); lex_expect(AGTYPE_PARSE_OBJECT_LABEL, lex, AGTYPE_TOKEN_COLON); tok = lex_peek(lex); isnull = tok == AGTYPE_TOKEN_NULL; if (ostart != NULL) (*ostart)(sem->semstate, fname, isnull); switch (tok) { case AGTYPE_TOKEN_OBJECT_START: parse_object(lex, sem); break; case AGTYPE_TOKEN_ARRAY_START: parse_array(lex, sem); break; default: parse_scalar(lex, sem); } if (oend != NULL) (*oend)(sem->semstate, fname, isnull); } static void parse_object(agtype_lex_context *lex, agtype_sem_action *sem) { /* * an object is a possibly empty sequence of object fields, separated by * commas and surrounded by curly braces. */ agtype_struct_action ostart = sem->object_start; agtype_struct_action oend = sem->object_end; agtype_token_type tok; check_stack_depth(); if (ostart != NULL) (*ostart)(sem->semstate); /* * Data inside an object is at a higher nesting level than the object * itself. Note that we increment this after we call the semantic routine * for the object start and restore it before we call the routine for the * object end. */ lex->lex_level++; /* we know this will succeed, just clearing the token */ lex_expect(AGTYPE_PARSE_OBJECT_START, lex, AGTYPE_TOKEN_OBJECT_START); tok = lex_peek(lex); switch (tok) { case AGTYPE_TOKEN_STRING: parse_object_field(lex, sem); while (lex_accept(lex, AGTYPE_TOKEN_COMMA, NULL)) parse_object_field(lex, sem); break; case AGTYPE_TOKEN_OBJECT_END: break; default: /* case of an invalid initial token inside the object */ report_parse_error(AGTYPE_PARSE_OBJECT_START, lex); } lex_expect(AGTYPE_PARSE_OBJECT_NEXT, lex, AGTYPE_TOKEN_OBJECT_END); lex->lex_level--; if (oend != NULL) (*oend)(sem->semstate); /* parse annotations (typecasts) */ parse_annotation(lex, sem); } static void parse_array_element(agtype_lex_context *lex, agtype_sem_action *sem) { agtype_aelem_action astart = sem->array_element_start; agtype_aelem_action aend = sem->array_element_end; agtype_token_type tok = lex_peek(lex); bool isnull; isnull = tok == AGTYPE_TOKEN_NULL; if (astart != NULL) (*astart)(sem->semstate, isnull); /* an array element is any object, array or scalar */ switch (tok) { case AGTYPE_TOKEN_OBJECT_START: parse_object(lex, sem); break; case AGTYPE_TOKEN_ARRAY_START: parse_array(lex, sem); break; default: parse_scalar(lex, sem); } if (aend != NULL) (*aend)(sem->semstate, isnull); } static void parse_array(agtype_lex_context *lex, agtype_sem_action *sem) { /* * an array is a possibly empty sequence of array elements, separated by * commas and surrounded by square brackets. */ agtype_struct_action astart = sem->array_start; agtype_struct_action aend = sem->array_end; check_stack_depth(); if (astart != NULL) (*astart)(sem->semstate); /* * Data inside an array is at a higher nesting level than the array * itself. Note that we increment this after we call the semantic routine * for the array start and restore it before we call the routine for the * array end. */ lex->lex_level++; lex_expect(AGTYPE_PARSE_ARRAY_START, lex, AGTYPE_TOKEN_ARRAY_START); if (lex_peek(lex) != AGTYPE_TOKEN_ARRAY_END) { parse_array_element(lex, sem); while (lex_accept(lex, AGTYPE_TOKEN_COMMA, NULL)) parse_array_element(lex, sem); } lex_expect(AGTYPE_PARSE_ARRAY_NEXT, lex, AGTYPE_TOKEN_ARRAY_END); lex->lex_level--; if (aend != NULL) (*aend)(sem->semstate); /* parse annotations (typecasts) */ parse_annotation(lex, sem); } /* * Lex one token from the input stream. */ static inline void agtype_lex(agtype_lex_context *lex) { char *s; int len; /* Skip leading whitespace. */ s = lex->token_terminator; len = s - lex->input; while (len < lex->input_length && (*s == ' ' || *s == '\t' || *s == '\n' || *s == '\r')) { if (*s == '\n') ++lex->line_number; ++s; ++len; } lex->token_start = s; /* Determine token type. */ if (len >= lex->input_length) { lex->token_start = NULL; lex->prev_token_terminator = lex->token_terminator; lex->token_terminator = s; lex->token_type = AGTYPE_TOKEN_END; } else { switch (*s) { /* Single-character token, some kind of punctuation mark. */ case '{': lex->prev_token_terminator = lex->token_terminator; lex->token_terminator = s + 1; lex->token_type = AGTYPE_TOKEN_OBJECT_START; break; case '}': lex->prev_token_terminator = lex->token_terminator; lex->token_terminator = s + 1; lex->token_type = AGTYPE_TOKEN_OBJECT_END; break; case '[': lex->prev_token_terminator = lex->token_terminator; lex->token_terminator = s + 1; lex->token_type = AGTYPE_TOKEN_ARRAY_START; break; case ']': lex->prev_token_terminator = lex->token_terminator; lex->token_terminator = s + 1; lex->token_type = AGTYPE_TOKEN_ARRAY_END; break; case ',': lex->prev_token_terminator = lex->token_terminator; lex->token_terminator = s + 1; lex->token_type = AGTYPE_TOKEN_COMMA; break; case ':': /* if this is an annotation '::' */ if ((len < lex->input_length - 1) && *(s + 1) == ':') { s += 2; lex->prev_token_terminator = lex->token_terminator; lex->token_terminator = s; lex->token_type = AGTYPE_TOKEN_ANNOTATION; } else { lex->prev_token_terminator = lex->token_terminator; lex->token_terminator = s + 1; lex->token_type = AGTYPE_TOKEN_COLON; } break; case '"': /* string */ agtype_lex_string(lex); lex->token_type = AGTYPE_TOKEN_STRING; break; case '-': /* Negative numbers and special float values. */ if (*(s + 1) == 'i' || *(s + 1) == 'I') { char *s1 = s + 1; char *p = s1; /* advance p to the end of the token */ while (p - s < lex->input_length - len && ((*p >= 'a' && *p <= 'z') || (*p >= 'A' && *p <= 'Z'))) p++; /* update the terminators */ lex->prev_token_terminator = lex->token_terminator; lex->token_terminator = p; lex->token_type = AGTYPE_TOKEN_INVALID; len = p - s1; switch (len) { case 3: if (pg_strncasecmp(s1, "inf", len) == 0) lex->token_type = AGTYPE_TOKEN_FLOAT; break; case 8: if (pg_strncasecmp(s1, "Infinity", len) == 0) lex->token_type = AGTYPE_TOKEN_FLOAT; break; } if (lex->token_type == AGTYPE_TOKEN_INVALID) report_invalid_token(lex); } else { agtype_lex_number(lex, s + 1, NULL, NULL); } /* token is assigned in agtype_lex_number */ break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': /* Positive number. */ agtype_lex_number(lex, s, NULL, NULL); /* token is assigned in agtype_lex_number */ break; default: { char *p; /* * We're not dealing with a string, number, legal * punctuation mark, or end of string. The only legal * tokens we might find here are true, false, and null, * but for error reporting purposes we scan until we see a * non-alphanumeric character. That way, we can report * the whole word as an unexpected token, rather than just * some unintuitive prefix thereof. */ for (p = s; p - s < lex->input_length - len && AGTYPE_ALPHANUMERIC_CHAR(*p); p++) /* skip */; /* * We got some sort of unexpected punctuation or an * otherwise unexpected character, so just complain about * that one character. */ if (p == s) { lex->prev_token_terminator = lex->token_terminator; lex->token_terminator = s + 1; report_invalid_token(lex); } /* * We've got a real alphanumeric token here. If it * happens to be true, false, or null, all is well. If * not, error out. */ lex->prev_token_terminator = lex->token_terminator; lex->token_terminator = p; /* it is an identifier, unless proven otherwise */ lex->token_type = AGTYPE_TOKEN_IDENTIFIER; len = p - s; switch (len) { /* A note about the mixture of case and case insensitivity - * The original code adheres to the JSON spec where true, * false, and null are strictly lower case. The Postgres float * logic, on the other hand, is case insensitive, allowing for * possibly many different input sources for float values. Hence, * the mixture of the two. */ case 3: if ((pg_strncasecmp(s, "NaN", len) == 0) || (pg_strncasecmp(s, "inf", len) == 0)) lex->token_type = AGTYPE_TOKEN_FLOAT; break; case 4: if (memcmp(s, "true", len) == 0) lex->token_type = AGTYPE_TOKEN_TRUE; else if (memcmp(s, "null", len) == 0) lex->token_type = AGTYPE_TOKEN_NULL; break; case 5: if (memcmp(s, "false", len) == 0) lex->token_type = AGTYPE_TOKEN_FALSE; break; case 8: if (pg_strncasecmp(s, "Infinity", len) == 0) lex->token_type = AGTYPE_TOKEN_FLOAT; break; } } /* end of default case */ } /* end of switch */ } } /* * The next token in the input stream is known to be a string; lex it. */ static inline void agtype_lex_string(agtype_lex_context *lex) { char *s; int len; int hi_surrogate = -1; if (lex->strval != NULL) resetStringInfo(lex->strval); Assert(lex->input_length > 0); s = lex->token_start; len = lex->token_start - lex->input; for (;;) { s++; len++; /* Premature end of the string. */ if (len >= lex->input_length) { lex->token_terminator = s; report_invalid_token(lex); } else if (*s == '"') { break; } else if ((unsigned char)*s < 32) { /* Per RFC4627, these characters MUST be escaped. */ /* Since *s isn't printable, exclude it from the context string */ lex->token_terminator = s; ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s", "agtype"), errdetail("Character with value 0x%02x must be escaped.", (unsigned char)*s), report_agtype_context(lex))); } else if (*s == '\\') { /* OK, we have an escape character. */ s++; len++; if (len >= lex->input_length) { lex->token_terminator = s; report_invalid_token(lex); } else if (*s == 'u') { int i; int ch = 0; for (i = 1; i <= 4; i++) { s++; len++; if (len >= lex->input_length) { lex->token_terminator = s; report_invalid_token(lex); } else if (*s >= '0' && *s <= '9') { ch = (ch * 16) + (*s - '0'); } else if (*s >= 'a' && *s <= 'f') { ch = (ch * 16) + (*s - 'a') + 10; } else if (*s >= 'A' && *s <= 'F') { ch = (ch * 16) + (*s - 'A') + 10; } else { lex->token_terminator = s + pg_mblen(s); ereport( ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s", "agtype"), errdetail( "\"\\u\" must be followed by four hexadecimal digits."), report_agtype_context(lex))); } } if (lex->strval != NULL) { char utf8str[5]; int utf8len; if (ch >= 0xd800 && ch <= 0xdbff) { if (hi_surrogate != -1) { ereport( ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s", "agtype"), errdetail( "Unicode high surrogate must not follow a high surrogate."), report_agtype_context(lex))); } hi_surrogate = (ch & 0x3ff) << 10; continue; } else if (ch >= 0xdc00 && ch <= 0xdfff) { if (hi_surrogate == -1) { ereport( ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s", "agtype"), errdetail( "Unicode low surrogate must follow a high surrogate."), report_agtype_context(lex))); } ch = 0x10000 + hi_surrogate + (ch & 0x3ff); hi_surrogate = -1; } if (hi_surrogate != -1) { ereport( ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s", "agtype"), errdetail( "Unicode low surrogate must follow a high surrogate."), report_agtype_context(lex))); } /* * For UTF8, replace the escape sequence by the actual * utf8 character in lex->strval. Do this also for other * encodings if the escape designates an ASCII character, * otherwise raise an error. */ if (ch == 0) { /* We can't allow this, since our TEXT type doesn't */ ereport( ERROR, (errcode(ERRCODE_UNTRANSLATABLE_CHARACTER), errmsg("unsupported Unicode escape sequence"), errdetail("\\u0000 cannot be converted to text."), report_agtype_context(lex))); } else if (GetDatabaseEncoding() == PG_UTF8) { unicode_to_utf8(ch, (unsigned char *)utf8str); utf8len = pg_utf_mblen((unsigned char *)utf8str); appendBinaryStringInfo(lex->strval, utf8str, utf8len); } else if (ch <= 0x007f) { /* * This is the only way to designate things like a * form feed character in agtype, so it's useful in all * encodings. */ appendStringInfoChar(lex->strval, (char)ch); } else { ereport( ERROR, (errcode(ERRCODE_UNTRANSLATABLE_CHARACTER), errmsg("unsupported Unicode escape sequence"), errdetail( "Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8."), report_agtype_context(lex))); } } } else if (lex->strval != NULL) { if (hi_surrogate != -1) { ereport( ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s", "agtype"), errdetail( "Unicode low surrogate must follow a high surrogate."), report_agtype_context(lex))); } switch (*s) { case '"': case '\\': case '/': appendStringInfoChar(lex->strval, *s); break; case 'b': appendStringInfoChar(lex->strval, '\b'); break; case 'f': appendStringInfoChar(lex->strval, '\f'); break; case 'n': appendStringInfoChar(lex->strval, '\n'); break; case 'r': appendStringInfoChar(lex->strval, '\r'); break; case 't': appendStringInfoChar(lex->strval, '\t'); break; default: /* Not a valid string escape, so error out. */ lex->token_terminator = s + pg_mblen(s); ereport( ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s", "agtype"), errdetail("Escape sequence \"\\%s\" is invalid.", extract_mb_char(s)), report_agtype_context(lex))); } } else if (strchr("\"\\/bfnrt", *s) == NULL) { /* * Simpler processing if we're not bothered about de-escaping * * It's very tempting to remove the strchr() call here and * replace it with a switch statement, but testing so far has * shown it's not a performance win. */ lex->token_terminator = s + pg_mblen(s); ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s", "agtype"), errdetail("Escape sequence \"\\%s\" is invalid.", extract_mb_char(s)), report_agtype_context(lex))); } } else if (lex->strval != NULL) { if (hi_surrogate != -1) { ereport( ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s", "agtype"), errdetail( "Unicode low surrogate must follow a high surrogate."), report_agtype_context(lex))); } appendStringInfoChar(lex->strval, *s); } } if (hi_surrogate != -1) { ereport( ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s", "agtype"), errdetail("Unicode low surrogate must follow a high surrogate."), report_agtype_context(lex))); } /* Hooray, we found the end of the string! */ lex->prev_token_terminator = lex->token_terminator; lex->token_terminator = s + 1; } /* * The next token in the input stream is known to be a number; lex it. * * In agtype, a number consists of four parts: * * (1) An optional minus sign ('-'). * * (2) Either a single '0', or a string of one or more digits that does not * begin with a '0'. * * (3) An optional decimal part, consisting of a period ('.') followed by * one or more digits. (Note: While this part can be omitted * completely, it's not OK to have only the decimal point without * any digits afterwards.) * * (4) An optional exponent part, consisting of 'e' or 'E', optionally * followed by '+' or '-', followed by one or more digits. (Note: * As with the decimal part, if 'e' or 'E' is present, it must be * followed by at least one digit.) * * The 's' argument to this function points to the ostensible beginning * of part 2 - i.e. the character after any optional minus sign, or the * first character of the string if there is none. * * If num_err is not NULL, we return an error flag to *num_err rather than * raising an error for a badly-formed number. Also, if total_len is not NULL * the distance from lex->input to the token end+1 is returned to *total_len. */ static inline void agtype_lex_number(agtype_lex_context *lex, char *s, bool *num_err, int *total_len) { bool error = false; int len = s - lex->input; /* assume we have an integer until proven otherwise */ lex->token_type = AGTYPE_TOKEN_INTEGER; /* Part (1): leading sign indicator. */ /* Caller already did this for us; so do nothing. */ /* Part (2): parse main digit string. */ if (len < lex->input_length && *s == '0') { s++; len++; } else if (len < lex->input_length && *s >= '1' && *s <= '9') { do { s++; len++; } while (len < lex->input_length && *s >= '0' && *s <= '9'); } else { error = true; } /* Part (3): parse optional decimal portion. */ if (len < lex->input_length && *s == '.') { /* since we have a decimal point, we have a float */ lex->token_type = AGTYPE_TOKEN_FLOAT; s++; len++; if (len == lex->input_length || *s < '0' || *s > '9') { error = true; } else { do { s++; len++; } while (len < lex->input_length && *s >= '0' && *s <= '9'); } } /* Part (4): parse optional exponent. */ if (len < lex->input_length && (*s == 'e' || *s == 'E')) { /* since we have an exponent, we have a float */ lex->token_type = AGTYPE_TOKEN_FLOAT; s++; len++; if (len < lex->input_length && (*s == '+' || *s == '-')) { s++; len++; } if (len == lex->input_length || *s < '0' || *s > '9') { error = true; } else { do { s++; len++; } while (len < lex->input_length && *s >= '0' && *s <= '9'); } } /* * Check for trailing garbage. As in agtype_lex(), any alphanumeric stuff * here should be considered part of the token for error-reporting * purposes. */ for (; len < lex->input_length && AGTYPE_ALPHANUMERIC_CHAR(*s); s++, len++) error = true; if (total_len != NULL) *total_len = len; if (num_err != NULL) { /* let the caller handle any error */ *num_err = error; } else { /* return token endpoint */ lex->prev_token_terminator = lex->token_terminator; lex->token_terminator = s; /* handle error if any */ if (error) report_invalid_token(lex); } } /* * Report a parse error. * * lex->token_start and lex->token_terminator must identify the current token. */ static void report_parse_error(agtype_parse_context ctx, agtype_lex_context *lex) { char *token; int toklen; /* Handle case where the input ended prematurely. */ if (lex->token_start == NULL || lex->token_type == AGTYPE_TOKEN_END) { ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s", "agtype"), errdetail("The input string ended unexpectedly."), report_agtype_context(lex))); } /* Separate out the current token. */ toklen = lex->token_terminator - lex->token_start; token = palloc(toklen + 1); memcpy(token, lex->token_start, toklen); token[toklen] = '\0'; /* Complain, with the appropriate detail message. */ if (ctx == AGTYPE_PARSE_END) { ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s", "agtype"), errdetail("Expected end of input, but found \"%s\".", token), report_agtype_context(lex))); } else { switch (ctx) { case AGTYPE_PARSE_VALUE: ereport( ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s", "agtype"), errdetail("Expected agtype value, but found \"%s\".", token), report_agtype_context(lex))); break; case AGTYPE_PARSE_STRING: ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s", "agtype"), errdetail("Expected string, but found \"%s\".", token), report_agtype_context(lex))); break; case AGTYPE_PARSE_ARRAY_START: ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s", "agtype"), errdetail( "Expected array element or \"]\", but found \"%s\".", token), report_agtype_context(lex))); break; case AGTYPE_PARSE_ARRAY_NEXT: ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s", "agtype"), errdetail("Expected \",\" or \"]\", but found \"%s\".", token), report_agtype_context(lex))); break; case AGTYPE_PARSE_OBJECT_START: ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s", "agtype"), errdetail("Expected string or \"}\", but found \"%s\".", token), report_agtype_context(lex))); break; case AGTYPE_PARSE_OBJECT_LABEL: ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s", "agtype"), errdetail("Expected \":\", but found \"%s\".", token), report_agtype_context(lex))); break; case AGTYPE_PARSE_OBJECT_NEXT: ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s", "agtype"), errdetail("Expected \",\" or \"}\", but found \"%s\".", token), report_agtype_context(lex))); break; case AGTYPE_PARSE_OBJECT_COMMA: ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s", "agtype"), errdetail("Expected string, but found \"%s\".", token), report_agtype_context(lex))); break; default: elog(ERROR, "unexpected agtype parse state: %d", ctx); } } } /* * Report an invalid input token. * * lex->token_start and lex->token_terminator must identify the token. */ static void report_invalid_token(agtype_lex_context *lex) { char *token; int toklen; /* Separate out the offending token. */ toklen = lex->token_terminator - lex->token_start; token = palloc(toklen + 1); memcpy(token, lex->token_start, toklen); token[toklen] = '\0'; ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input syntax for type %s", "agtype"), errdetail("Token \"%s\" is invalid.", token), report_agtype_context(lex))); } /* * Report a CONTEXT line for bogus agtype input. * * lex->token_terminator must be set to identify the spot where we detected * the error. Note that lex->token_start might be NULL, in case we recognized * error at EOF. * * The return value isn't meaningful, but we make it non-void so that this * can be invoked inside ereport(). */ static int report_agtype_context(agtype_lex_context *lex) { const char *context_start; const char *context_end; const char *line_start; int line_number; char *ctxt; int ctxtlen; const char *prefix; const char *suffix; /* Choose boundaries for the part of the input we will display */ context_start = lex->input; context_end = lex->token_terminator; line_start = context_start; line_number = 1; for (;;) { /* Always advance over newlines */ if (context_start < context_end && *context_start == '\n') { context_start++; line_start = context_start; line_number++; continue; } /* Otherwise, done as soon as we are close enough to context_end */ if (context_end - context_start < 50) break; /* Advance to next multibyte character */ if (IS_HIGHBIT_SET(*context_start)) context_start += pg_mblen(context_start); else context_start++; } /* * We add "..." to indicate that the excerpt doesn't start at the * beginning of the line ... but if we're within 3 characters of the * beginning of the line, we might as well just show the whole line. */ if (context_start - line_start <= 3) context_start = line_start; /* Get a null-terminated copy of the data to present */ ctxtlen = context_end - context_start; ctxt = palloc(ctxtlen + 1); memcpy(ctxt, context_start, ctxtlen); ctxt[ctxtlen] = '\0'; /* * Show the context, prefixing "..." if not starting at start of line, and * suffixing "..." if not ending at end of line. */ prefix = (context_start > line_start) ? "..." : ""; if (lex->token_type != AGTYPE_TOKEN_END && context_end - lex->input < lex->input_length && *context_end != '\n' && *context_end != '\r') suffix = "..."; else suffix = ""; return errcontext("agtype data, line %d: %s%s%s", line_number, prefix, ctxt, suffix); } /* * Extract a single, possibly multi-byte char from the input string. */ static char *extract_mb_char(char *s) { char *res; int len; len = pg_mblen(s); res = palloc(len + 1); memcpy(res, s, len); res[len] = '\0'; return res; } /* * Encode 'value' of datetime type 'typid' into agtype string in ISO format * using optionally preallocated buffer 'buf'. */ char *agtype_encode_date_time(char *buf, Datum value, Oid typid) { if (!buf) buf = palloc(MAXDATELEN + 1); switch (typid) { case DATEOID: { DateADT date; struct pg_tm tm; date = DatumGetDateADT(value); /* Same as date_out(), but forcing DateStyle */ if (DATE_NOT_FINITE(date)) { EncodeSpecialDate(date, buf); } else { j2date(date + POSTGRES_EPOCH_JDATE, &(tm.tm_year), &(tm.tm_mon), &(tm.tm_mday)); EncodeDateOnly(&tm, USE_XSD_DATES, buf); } } break; case TIMEOID: { TimeADT time = DatumGetTimeADT(value); struct pg_tm tt, *tm = &tt; fsec_t fsec; /* Same as time_out(), but forcing DateStyle */ time2tm(time, tm, &fsec); EncodeTimeOnly(tm, fsec, false, 0, USE_XSD_DATES, buf); } break; case TIMETZOID: { TimeTzADT *time = DatumGetTimeTzADTP(value); struct pg_tm tt, *tm = &tt; fsec_t fsec; int tz; /* Same as timetz_out(), but forcing DateStyle */ timetz2tm(time, tm, &fsec, &tz); EncodeTimeOnly(tm, fsec, true, tz, USE_XSD_DATES, buf); } break; case TIMESTAMPOID: { Timestamp timestamp; struct pg_tm tm; fsec_t fsec; timestamp = DatumGetTimestamp(value); /* Same as timestamp_out(), but forcing DateStyle */ if (TIMESTAMP_NOT_FINITE(timestamp)) { EncodeSpecialTimestamp(timestamp, buf); } else if (timestamp2tm(timestamp, NULL, &tm, &fsec, NULL, NULL) == 0) { EncodeDateTime(&tm, fsec, false, 0, NULL, USE_XSD_DATES, buf); } else { ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); } } break; case TIMESTAMPTZOID: { TimestampTz timestamp; struct pg_tm tm; int tz; fsec_t fsec; const char *tzn = NULL; timestamp = DatumGetTimestampTz(value); /* Same as timestamptz_out(), but forcing DateStyle */ if (TIMESTAMP_NOT_FINITE(timestamp)) { EncodeSpecialTimestamp(timestamp, buf); } else if (timestamp2tm(timestamp, &tz, &tm, &fsec, &tzn, NULL) == 0) { EncodeDateTime(&tm, fsec, true, tz, tzn, USE_XSD_DATES, buf); } else { ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); } } break; default: elog(ERROR, "unknown agtype value datetime type oid %d", typid); return NULL; } return buf; } age-PG16-v1.5.0-rc0/src/backend/utils/adt/agtype_raw.c000066400000000000000000000151511454606241200221770ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "utils/agtype_raw.h" /* * Used for building an agtype container. */ struct agtype_build_state { int a_offset; // next location to write agtentry int i; // index of current agtentry being processed int d_start; // start of variable-length portion StringInfo buffer; }; /* * Define the type and size of the agt_header. * Copied from agtype_ext.c. */ #define AGT_HEADER_TYPE uint32 #define AGT_HEADER_SIZE sizeof(AGT_HEADER_TYPE) /* * Following macros are usable in the context where * agtype_build_state is available */ #define BUFFER_RESERVE(size) reserve_from_buffer(bstate->buffer, (size)) #define BUFFER_WRITE_PAD() pad_buffer_to_int(bstate->buffer) #define BUFFER_WRITE_CONST(offset, type, val) *((type *)(bstate->buffer->data + (offset))) = (val) #define BUFFER_WRITE_PTR(offset, ptr, len) memcpy(bstate->buffer->data + offset, ptr, len) static int write_pointer(agtype_build_state *bstate, char *ptr, int len); static void write_agtentry(agtype_build_state *bstate, agtentry agte); /* * Same as `write_ptr` except the content comes from * constant value instead of pointer. */ #define write_const(val, type) \ do \ { \ int len = sizeof(type); \ int offset = BUFFER_RESERVE(len); \ BUFFER_WRITE_CONST(offset, type, val); \ } \ while (0) #define write_ptr(ptr, len) write_pointer(bstate, ptr, len) #define write_agt(agte) write_agtentry(bstate, agte) /* * Copies the content of `ptr` to the tail of the buffer (variable-length * portion). */ static int write_pointer(agtype_build_state *bstate, char *ptr, int len) { int offset = BUFFER_RESERVE(len); BUFFER_WRITE_PTR(offset, ptr, len); return len; } /* * Copies the content of `agte` to the next available location in the agtentry * portion of the buffer. That location is pointed by `bstate->a_offset`. * * This function must be called after data is written to the variable-length * portion. */ static void write_agtentry(agtype_build_state *bstate, agtentry agte) { int totallen = bstate->buffer->len - bstate->d_start; /* * Bail out if total variable-length data exceeds what will fit in a * agtentry length field. We check this in each iteration, not just * once at the end, to forestall possible integer overflow. */ if (totallen > AGTENTRY_OFFLENMASK) { ereport( ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), errmsg( "total size of agtype array elements exceeds the maximum of %u bytes", AGTENTRY_OFFLENMASK))); } if (((bstate->i) % AGT_OFFSET_STRIDE) == 0) { agte = (agte & AGTENTRY_TYPEMASK) | totallen | AGTENTRY_HAS_OFF; } BUFFER_WRITE_CONST(bstate->a_offset, agtentry, agte); bstate->a_offset += sizeof(agtentry); } /* * `header_flag` = a valid agtype_container header field * `size` = size of container (number of pairs or elements) */ agtype_build_state *init_agtype_build_state(uint32 size, uint32 header_flag) { int agtentry_count; int agtentry_len; agtype_build_state *bstate; bstate = palloc0(sizeof(agtype_build_state)); bstate->buffer = makeStringInfo(); bstate->a_offset = 0; bstate->i = 0; // reserve for varlen header BUFFER_RESERVE(VARHDRSZ); bstate->a_offset += VARHDRSZ; // write container header BUFFER_RESERVE(sizeof(uint32)); BUFFER_WRITE_CONST(bstate->a_offset, uint32, header_flag | size); bstate->a_offset += sizeof(uint32); // reserve for agtentry headers if ((header_flag & AGT_FOBJECT) != 0) { agtentry_count = size * 2; } else if ((header_flag & AGT_FARRAY) != 0) { agtentry_count = size; } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Invalid container type."))); } agtentry_len = sizeof(agtentry) * agtentry_count; BUFFER_RESERVE(agtentry_len); bstate->d_start = bstate->a_offset + agtentry_len; return bstate; } agtype *build_agtype(agtype_build_state *bstate) { agtype *result = (agtype *) bstate->buffer->data; SET_VARSIZE(result, bstate->buffer->len); return result; } void pfree_agtype_build_state(agtype_build_state *bstate) { /* * bstate->buffer->data is not pfree'd because this pointer * is returned by the `build_agtype` function. */ pfree(bstate->buffer); pfree(bstate); } void write_string(agtype_build_state *bstate, char *str) { int length = strlen(str); write_ptr(str, length); write_agt(AGTENTRY_IS_STRING | length); bstate->i++; } void write_graphid(agtype_build_state *bstate, graphid graphid) { int length = 0; // padding length += BUFFER_WRITE_PAD(); // graphid header write_const(AGT_HEADER_INTEGER, AGT_HEADER_TYPE); length += AGT_HEADER_SIZE; // graphid value write_const(graphid, int64); length += sizeof(int64); // agtentry write_agt(AGTENTRY_IS_AGTYPE | length); bstate->i++; } void write_container(agtype_build_state *bstate, agtype *agtype) { int length = 0; // padding length += BUFFER_WRITE_PAD(); // varlen data length += write_ptr((char *) &agtype->root, VARSIZE(agtype)); // agtentry write_agt(AGTENTRY_IS_CONTAINER | length); bstate->i++; } /* * `val` = container of the extended type * `header` = AGT_HEADER_VERTEX, AGT_HEADER_EDGE or AGT_HEADER_PATH */ void write_extended(agtype_build_state *bstate, agtype *val, uint32 header) { int length = 0; // padding length += BUFFER_WRITE_PAD(); // vertex header write_const(header, AGT_HEADER_TYPE); length += AGT_HEADER_SIZE; // vertex data length += write_ptr((char *) &val->root, VARSIZE(val)); // agtentry write_agt(AGTENTRY_IS_AGTYPE | length); bstate->i++; } age-PG16-v1.5.0-rc0/src/backend/utils/adt/agtype_util.c000066400000000000000000002402261454606241200223660ustar00rootroot00000000000000/* * For PostgreSQL Database Management System: * (formerly known as Postgres, then as Postgres95) * * Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group * * Portions Copyright (c) 1994, The Regents of the University of California * * Permission to use, copy, modify, and distribute this software and its documentation for any purpose, * without fee, and without a written agreement is hereby granted, provided that the above copyright notice * and this paragraph and the following two paragraphs appear in all copies. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA * HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ /* * converting between agtype and agtype_values, and iterating. * * Portions Copyright (c) 2014-2018, PostgreSQL Global Development Group */ #include "postgres.h" #include #include "access/hash.h" #include "catalog/pg_collation.h" #include "miscadmin.h" #include "utils/builtins.h" #include "utils/memutils.h" #include "utils/varlena.h" #include "utils/agtype_ext.h" /* * Maximum number of elements in an array (or key/value pairs in an object). * This is limited by two things: the size of the agtentry array must fit * in MaxAllocSize, and the number of elements (or pairs) must fit in the bits * reserved for that in the agtype_container.header field. * * (The total size of an array's or object's elements is also limited by * AGTENTRY_OFFLENMASK, but we're not concerned about that here.) */ #define AGTYPE_MAX_ELEMS (Min(MaxAllocSize / sizeof(agtype_value), AGT_CMASK)) #define AGTYPE_MAX_PAIRS (Min(MaxAllocSize / sizeof(agtype_pair), AGT_CMASK)) static void fill_agtype_value(agtype_container *container, int index, char *base_addr, uint32 offset, agtype_value *result); static bool equals_agtype_scalar_value(agtype_value *a, agtype_value *b); static agtype *convert_to_agtype(agtype_value *val); static void convert_agtype_value(StringInfo buffer, agtentry *header, agtype_value *val, int level); static void convert_agtype_array(StringInfo buffer, agtentry *pheader, agtype_value *val, int level); static void convert_agtype_object(StringInfo buffer, agtentry *pheader, agtype_value *val, int level); static void convert_agtype_scalar(StringInfo buffer, agtentry *entry, agtype_value *scalar_val); static void append_to_buffer(StringInfo buffer, const char *data, int len); static void copy_to_buffer(StringInfo buffer, int offset, const char *data, int len); static agtype_iterator *iterator_from_container(agtype_container *container, agtype_iterator *parent); static agtype_iterator *free_and_get_parent(agtype_iterator *it); static agtype_parse_state *push_state(agtype_parse_state **pstate); static void append_key(agtype_parse_state *pstate, agtype_value *string); static void append_value(agtype_parse_state *pstate, agtype_value *scalar_val); static void append_element(agtype_parse_state *pstate, agtype_value *scalar_val); static int length_compare_agtype_string_value(const void *a, const void *b); static int length_compare_agtype_pair(const void *a, const void *b, void *binequal); static agtype_value *push_agtype_value_scalar(agtype_parse_state **pstate, agtype_iterator_token seq, agtype_value *scalar_val); static int compare_two_floats_orderability(float8 lhs, float8 rhs); static int get_type_sort_priority(enum agtype_value_type type); /* * Turn an in-memory agtype_value into an agtype for on-disk storage. * * There isn't an agtype_to_agtype_value(), because generally we find it more * convenient to directly iterate through the agtype representation and only * really convert nested scalar values. agtype_iterator_next() does this, so * that clients of the iteration code don't have to directly deal with the * binary representation (agtype_deep_contains() is a notable exception, * although all exceptions are internal to this module). In general, functions * that accept an agtype_value argument are concerned with the manipulation of * scalar values, or simple containers of scalar values, where it would be * inconvenient to deal with a great amount of other state. */ agtype *agtype_value_to_agtype(agtype_value *val) { agtype *out; if (IS_A_AGTYPE_SCALAR(val)) { /* Scalar value */ agtype_parse_state *pstate = NULL; agtype_value *res; agtype_value scalar_array; scalar_array.type = AGTV_ARRAY; scalar_array.val.array.raw_scalar = true; scalar_array.val.array.num_elems = 1; push_agtype_value(&pstate, WAGT_BEGIN_ARRAY, &scalar_array); push_agtype_value(&pstate, WAGT_ELEM, val); res = push_agtype_value(&pstate, WAGT_END_ARRAY, NULL); out = convert_to_agtype(res); } else if (val->type == AGTV_OBJECT || val->type == AGTV_ARRAY) { out = convert_to_agtype(val); } else { Assert(val->type == AGTV_BINARY); out = palloc(VARHDRSZ + val->val.binary.len); SET_VARSIZE(out, VARHDRSZ + val->val.binary.len); memcpy(VARDATA(out), val->val.binary.data, val->val.binary.len); } return out; } /* * Get the offset of the variable-length portion of an agtype node within * the variable-length-data part of its container. The node is identified * by index within the container's agtentry array. */ uint32 get_agtype_offset(const agtype_container *agtc, int index) { uint32 offset = 0; int i; /* * Start offset of this entry is equal to the end offset of the previous * entry. Walk backwards to the most recent entry stored as an end * offset, returning that offset plus any lengths in between. */ for (i = index - 1; i >= 0; i--) { offset += AGTE_OFFLENFLD(agtc->children[i]); if (AGTE_HAS_OFF(agtc->children[i])) break; } return offset; } /* * Get the length of the variable-length portion of an agtype node. * The node is identified by index within the container's agtentry array. */ uint32 get_agtype_length(const agtype_container *agtc, int index) { uint32 off; uint32 len; /* * If the length is stored directly in the agtentry, just return it. * Otherwise, get the begin offset of the entry, and subtract that from * the stored end+1 offset. */ if (AGTE_HAS_OFF(agtc->children[index])) { off = get_agtype_offset(agtc, index); len = AGTE_OFFLENFLD(agtc->children[index]) - off; } else { len = AGTE_OFFLENFLD(agtc->children[index]); } return len; } /* * Helper function to generate the sort priority of a type. Larger * numbers have higher priority. */ static int get_type_sort_priority(enum agtype_value_type type) { if (type == AGTV_PATH) { return 0; } if (type == AGTV_EDGE) { return 1; } if (type == AGTV_VERTEX) { return 2; } if (type == AGTV_OBJECT) { return 3; } if (type == AGTV_ARRAY) { return 4; } if (type == AGTV_STRING) { return 5; } if (type == AGTV_BOOL) { return 6; } if (type == AGTV_NUMERIC || type == AGTV_INTEGER || type == AGTV_FLOAT) { return 7; } if (type == AGTV_NULL) { return 8; } return -1; } /* * BT comparator worker function. Returns an integer less than, equal to, or * greater than zero, indicating whether a is less than, equal to, or greater * than b. Consistent with the requirements for a B-Tree operator class * * Strings are compared lexically, in contrast with other places where we use a * much simpler comparator logic for searching through Strings. Since this is * called from B-Tree support function 1, we're careful about not leaking * memory here. */ int compare_agtype_containers_orderability(agtype_container *a, agtype_container *b) { agtype_iterator *ita; agtype_iterator *itb; int res = 0; ita = agtype_iterator_init(a); itb = agtype_iterator_init(b); do { agtype_value va; agtype_value vb; agtype_iterator_token ra; agtype_iterator_token rb; ra = agtype_iterator_next(&ita, &va, false); rb = agtype_iterator_next(&itb, &vb, false); if (ra == rb) { if (ra == WAGT_DONE) { /* Decisively equal */ break; } if (ra == WAGT_END_ARRAY || ra == WAGT_END_OBJECT) { /* * There is no array or object to compare at this stage of * processing. AGTV_ARRAY/AGTV_OBJECT values are compared * initially, at the WAGT_BEGIN_ARRAY and WAGT_BEGIN_OBJECT * tokens. */ continue; } if ((va.type == vb.type) || ((va.type == AGTV_INTEGER || va.type == AGTV_FLOAT || va.type == AGTV_NUMERIC) && (vb.type == AGTV_INTEGER || vb.type == AGTV_FLOAT || vb.type == AGTV_NUMERIC))) { switch (va.type) { case AGTV_STRING: case AGTV_NULL: case AGTV_NUMERIC: case AGTV_BOOL: case AGTV_INTEGER: case AGTV_FLOAT: case AGTV_EDGE: case AGTV_VERTEX: case AGTV_PATH: res = compare_agtype_scalar_values(&va, &vb); break; case AGTV_ARRAY: /* * This could be a "raw scalar" pseudo array. That's * a special case here though, since we still want the * general type-based comparisons to apply, and as far * as we're concerned a pseudo array is just a scalar. */ if (va.val.array.raw_scalar != vb.val.array.raw_scalar) { if (va.val.array.raw_scalar) { /* advance iterator ita and get contained type */ ra = agtype_iterator_next(&ita, &va, false); res = (get_type_sort_priority(va.type) < get_type_sort_priority(vb.type)) ? -1 : 1; } else { /* advance iterator itb and get contained type */ rb = agtype_iterator_next(&itb, &vb, false); res = (get_type_sort_priority(va.type) < get_type_sort_priority(vb.type)) ? -1 : 1; } } break; case AGTV_OBJECT: break; case AGTV_BINARY: ereport(ERROR, (errmsg("unexpected AGTV_BINARY value"))); } } else { /* Type-defined order */ res = (get_type_sort_priority(va.type) < get_type_sort_priority(vb.type)) ? -1 : 1; } } else { /* * It's safe to assume that the types differed, and that the va * and vb values passed were set. * * If the two values were of the same container type, then there'd * have been a chance to observe the variation in the number of * elements/pairs (when processing WAGT_BEGIN_OBJECT, say). They're * either two heterogeneously-typed containers, or a container and * some scalar type. */ /* * Check for the premature array or object end. * If left side is shorter, less than. */ if (ra == WAGT_END_ARRAY || ra == WAGT_END_OBJECT) { res = -1; break; } /* If right side is shorter, greater than */ if (rb == WAGT_END_ARRAY || rb == WAGT_END_OBJECT) { res = 1; break; } /* Correction step because AGTV_ARRAY might be there just because of the container type */ /* Case 1: left side is assigned to an array, right is an object */ if(va.type == AGTV_ARRAY && vb.type == AGTV_OBJECT) { ra = agtype_iterator_next(&ita, &va, false); } /* Case 2: left side is an object, right side is assigned to an array */ else if(va.type == AGTV_OBJECT && vb.type == AGTV_ARRAY) { rb = agtype_iterator_next(&itb, &vb, false); } Assert(va.type != vb.type); Assert(va.type != AGTV_BINARY); Assert(vb.type != AGTV_BINARY); /* Type-defined order */ res = (get_type_sort_priority(va.type) < get_type_sort_priority(vb.type)) ? -1 : 1; } } while (res == 0); while (ita != NULL) { agtype_iterator *i = ita->parent; pfree(ita); ita = i; } while (itb != NULL) { agtype_iterator *i = itb->parent; pfree(itb); itb = i; } return res; } /* * Find value in object (i.e. the "value" part of some key/value pair in an * object), or find a matching element if we're looking through an array. Do * so on the basis of equality of the object keys only, or alternatively * element values only, with a caller-supplied value "key". The "flags" * argument allows the caller to specify which container types are of interest. * * This exported utility function exists to facilitate various cases concerned * with "containment". If asked to look through an object, the caller had * better pass an agtype String, because their keys can only be strings. * Otherwise, for an array, any type of agtype_value will do. * * In order to proceed with the search, it is necessary for callers to have * both specified an interest in exactly one particular container type with an * appropriate flag, as well as having the pointed-to agtype container be of * one of those same container types at the top level. (Actually, we just do * whichever makes sense to save callers the trouble of figuring it out - at * most one can make sense, because the container either points to an array * (possibly a "raw scalar" pseudo array) or an object.) * * Note that we can return an AGTV_BINARY agtype_value if this is called on an * object, but we never do so on an array. If the caller asks to look through * a container type that is not of the type pointed to by the container, * immediately fall through and return NULL. If we cannot find the value, * return NULL. Otherwise, return palloc()'d copy of value. */ agtype_value *find_agtype_value_from_container(agtype_container *container, uint32 flags, agtype_value *key) { agtentry *children = container->children; int count = AGTYPE_CONTAINER_SIZE(container); agtype_value *result; Assert((flags & ~(AGT_FARRAY | AGT_FOBJECT)) == 0); /* Quick out without a palloc cycle if object/array is empty */ if (count <= 0) { return NULL; } result = palloc(sizeof(agtype_value)); if ((flags & AGT_FARRAY) && AGTYPE_CONTAINER_IS_ARRAY(container)) { char *base_addr = (char *)(children + count); uint32 offset = 0; int i; for (i = 0; i < count; i++) { fill_agtype_value(container, i, base_addr, offset, result); if (key->type == result->type) { if (equals_agtype_scalar_value(key, result)) return result; } AGTE_ADVANCE_OFFSET(offset, children[i]); } } else if ((flags & AGT_FOBJECT) && AGTYPE_CONTAINER_IS_OBJECT(container)) { /* Since this is an object, account for *Pairs* of AGTentrys */ char *base_addr = (char *)(children + count * 2); uint32 stop_low = 0; uint32 stop_high = count; /* Object key passed by caller must be a string */ Assert(key->type == AGTV_STRING); /* Binary search on object/pair keys *only* */ while (stop_low < stop_high) { uint32 stop_middle; int difference; agtype_value candidate; stop_middle = stop_low + (stop_high - stop_low) / 2; candidate.type = AGTV_STRING; candidate.val.string.val = base_addr + get_agtype_offset(container, stop_middle); candidate.val.string.len = get_agtype_length(container, stop_middle); difference = length_compare_agtype_string_value(&candidate, key); if (difference == 0) { /* Found our key, return corresponding value */ int index = stop_middle + count; fill_agtype_value(container, index, base_addr, get_agtype_offset(container, index), result); return result; } else { if (difference < 0) stop_low = stop_middle + 1; else stop_high = stop_middle; } } } /* Not found */ pfree(result); return NULL; } /* * Get i-th value of an agtype array. * * Returns palloc()'d copy of the value, or NULL if it does not exist. */ agtype_value *get_ith_agtype_value_from_container(agtype_container *container, uint32 i) { agtype_value *result; char *base_addr; uint32 nelements; if (!AGTYPE_CONTAINER_IS_ARRAY(container)) ereport(ERROR, (errmsg("container is not an agtype array"))); nelements = AGTYPE_CONTAINER_SIZE(container); base_addr = (char *)&container->children[nelements]; if (i >= nelements) return NULL; result = palloc(sizeof(agtype_value)); fill_agtype_value(container, i, base_addr, get_agtype_offset(container, i), result); return result; } /* * A helper function to fill in an agtype_value to represent an element of an * array, or a key or value of an object. * * The node's agtentry is at container->children[index], and its variable-length * data is at base_addr + offset. We make the caller determine the offset * since in many cases the caller can amortize that work across multiple * children. When it can't, it can just call get_agtype_offset(). * * A nested array or object will be returned as AGTV_BINARY, ie. it won't be * expanded. */ static void fill_agtype_value(agtype_container *container, int index, char *base_addr, uint32 offset, agtype_value *result) { agtentry entry = container->children[index]; if (AGTE_IS_NULL(entry)) { result->type = AGTV_NULL; } else if (AGTE_IS_STRING(entry)) { char *string_val; int string_len; result->type = AGTV_STRING; /* get the position and length of the string */ string_val = base_addr + offset; string_len = get_agtype_length(container, index); /* we need to do a deep copy of the string value */ result->val.string.val = pnstrdup(string_val, string_len); result->val.string.len = string_len; Assert(result->val.string.len >= 0); } else if (AGTE_IS_NUMERIC(entry)) { Numeric numeric; Numeric numeric_copy; result->type = AGTV_NUMERIC; /* we need to do a deep copy here */ numeric = (Numeric)(base_addr + INTALIGN(offset)); numeric_copy = (Numeric) palloc(VARSIZE(numeric)); memcpy(numeric_copy, numeric, VARSIZE(numeric)); result->val.numeric = numeric_copy; } /* * If this is an agtype. * This is needed because we allow the original jsonb type to be * passed in. */ else if (AGTE_IS_AGTYPE(entry)) { ag_deserialize_extended_type(base_addr, offset, result); } else if (AGTE_IS_BOOL_TRUE(entry)) { result->type = AGTV_BOOL; result->val.boolean = true; } else if (AGTE_IS_BOOL_FALSE(entry)) { result->type = AGTV_BOOL; result->val.boolean = false; } else { Assert(AGTE_IS_CONTAINER(entry)); result->type = AGTV_BINARY; /* Remove alignment padding from data pointer and length */ result->val.binary.data = (agtype_container *)(base_addr + INTALIGN(offset)); result->val.binary.len = get_agtype_length(container, index) - (INTALIGN(offset) - offset); } } /* * Push agtype_value into agtype_parse_state. * * Used when parsing agtype tokens to form agtype, or when converting an * in-memory agtype_value to an agtype. * * Initial state of *agtype_parse_state is NULL, since it'll be allocated here * originally (caller will get agtype_parse_state back by reference). * * Only sequential tokens pertaining to non-container types should pass an * agtype_value. There is one exception -- WAGT_BEGIN_ARRAY callers may pass a * "raw scalar" pseudo array to append it - the actual scalar should be passed * next and it will be added as the only member of the array. * * Values of type AGTV_BINARY, which are rolled up arrays and objects, * are unpacked before being added to the result. */ agtype_value *push_agtype_value(agtype_parse_state **pstate, agtype_iterator_token seq, agtype_value *agtval) { agtype_iterator *it; agtype_value *res = NULL; agtype_value v; agtype_iterator_token tok; if (!agtval || (seq != WAGT_ELEM && seq != WAGT_VALUE) || agtval->type != AGTV_BINARY) { /* drop through */ return push_agtype_value_scalar(pstate, seq, agtval); } /* unpack the binary and add each piece to the pstate */ it = agtype_iterator_init(agtval->val.binary.data); while ((tok = agtype_iterator_next(&it, &v, false)) != WAGT_DONE) { res = push_agtype_value_scalar(pstate, tok, tok < WAGT_BEGIN_ARRAY ? &v : NULL); } return res; } /* * Do the actual pushing, with only scalar or pseudo-scalar-array values * accepted. */ static agtype_value *push_agtype_value_scalar(agtype_parse_state **pstate, agtype_iterator_token seq, agtype_value *scalar_val) { agtype_value *result = NULL; switch (seq) { case WAGT_BEGIN_ARRAY: Assert(!scalar_val || scalar_val->val.array.raw_scalar); *pstate = push_state(pstate); result = &(*pstate)->cont_val; (*pstate)->cont_val.type = AGTV_ARRAY; (*pstate)->cont_val.val.array.num_elems = 0; (*pstate)->cont_val.val.array.raw_scalar = (scalar_val && scalar_val->val.array.raw_scalar); if (scalar_val && scalar_val->val.array.num_elems > 0) { /* Assume that this array is still really a scalar */ Assert(scalar_val->type == AGTV_ARRAY); (*pstate)->size = scalar_val->val.array.num_elems; } else { (*pstate)->size = 4; } (*pstate)->cont_val.val.array.elems = palloc(sizeof(agtype_value) * (*pstate)->size); (*pstate)->last_updated_value = NULL; break; case WAGT_BEGIN_OBJECT: Assert(!scalar_val); *pstate = push_state(pstate); result = &(*pstate)->cont_val; (*pstate)->cont_val.type = AGTV_OBJECT; (*pstate)->cont_val.val.object.num_pairs = 0; (*pstate)->size = 4; (*pstate)->cont_val.val.object.pairs = palloc(sizeof(agtype_pair) * (*pstate)->size); (*pstate)->last_updated_value = NULL; break; case WAGT_KEY: Assert(scalar_val->type == AGTV_STRING); append_key(*pstate, scalar_val); break; case WAGT_VALUE: Assert(IS_A_AGTYPE_SCALAR(scalar_val)); append_value(*pstate, scalar_val); break; case WAGT_ELEM: Assert(IS_A_AGTYPE_SCALAR(scalar_val)); append_element(*pstate, scalar_val); break; case WAGT_END_OBJECT: uniqueify_agtype_object(&(*pstate)->cont_val); /* fall through! */ case WAGT_END_ARRAY: /* Steps here common to WAGT_END_OBJECT case */ Assert(!scalar_val); result = &(*pstate)->cont_val; /* * Pop stack and push current array/object as value in parent * array/object */ *pstate = (*pstate)->next; if (*pstate) { switch ((*pstate)->cont_val.type) { case AGTV_ARRAY: append_element(*pstate, result); break; case AGTV_OBJECT: append_value(*pstate, result); break; default: ereport(ERROR, (errmsg("invalid agtype container type %d", (*pstate)->cont_val.type))); } } break; default: ereport(ERROR, (errmsg("unrecognized agtype sequential processing token"))); } return result; } /* * push_agtype_value() worker: Iteration-like forming of agtype */ static agtype_parse_state *push_state(agtype_parse_state **pstate) { agtype_parse_state *ns = palloc(sizeof(agtype_parse_state)); ns->next = *pstate; return ns; } /* * push_agtype_value() worker: Append a pair key to state when generating * agtype */ static void append_key(agtype_parse_state *pstate, agtype_value *string) { agtype_value *object = &pstate->cont_val; Assert(object->type == AGTV_OBJECT); Assert(string->type == AGTV_STRING); if (object->val.object.num_pairs >= AGTYPE_MAX_PAIRS) ereport( ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), errmsg( "number of agtype object pairs exceeds the maximum allowed (%zu)", AGTYPE_MAX_PAIRS))); if (object->val.object.num_pairs >= pstate->size) { pstate->size *= 2; object->val.object.pairs = repalloc( object->val.object.pairs, sizeof(agtype_pair) * pstate->size); } object->val.object.pairs[object->val.object.num_pairs].key = *string; object->val.object.pairs[object->val.object.num_pairs].order = object->val.object.num_pairs; } /* * push_agtype_value() worker: Append a pair value to state when generating an * agtype */ static void append_value(agtype_parse_state *pstate, agtype_value *scalar_val) { agtype_value *object = &pstate->cont_val; Assert(object->type == AGTV_OBJECT); object->val.object.pairs[object->val.object.num_pairs].value = *scalar_val; pstate->last_updated_value = &object->val.object.pairs[object->val.object.num_pairs++].value; } /* * push_agtype_value() worker: Append an element to state when generating an * agtype */ static void append_element(agtype_parse_state *pstate, agtype_value *scalar_val) { agtype_value *array = &pstate->cont_val; Assert(array->type == AGTV_ARRAY); if (array->val.array.num_elems >= AGTYPE_MAX_ELEMS) ereport( ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), errmsg( "number of agtype array elements exceeds the maximum allowed (%zu)", AGTYPE_MAX_ELEMS))); if (array->val.array.num_elems >= pstate->size) { pstate->size *= 2; array->val.array.elems = repalloc(array->val.array.elems, sizeof(agtype_value) * pstate->size); } array->val.array.elems[array->val.array.num_elems] = *scalar_val; pstate->last_updated_value = &array->val.array.elems[array->val.array.num_elems++]; } /* * Given an agtype_container, expand to agtype_iterator to iterate over items * fully expanded to in-memory representation for manipulation. * * See agtype_iterator_next() for notes on memory management. */ agtype_iterator *agtype_iterator_init(agtype_container *container) { return iterator_from_container(container, NULL); } /* * Get next agtype_value while iterating * * Caller should initially pass their own, original iterator. They may get * back a child iterator palloc()'d here instead. The function can be relied * on to free those child iterators, lest the memory allocated for highly * nested objects become unreasonable, but only if callers don't end iteration * early (by breaking upon having found something in a search, for example). * * Callers in such a scenario, that are particularly sensitive to leaking * memory in a long-lived context may walk the ancestral tree from the final * iterator we left them with to its oldest ancestor, pfree()ing as they go. * They do not have to free any other memory previously allocated for iterators * but not accessible as direct ancestors of the iterator they're last passed * back. * * Returns "agtype sequential processing" token value. Iterator "state" * reflects the current stage of the process in a less granular fashion, and is * mostly used here to track things internally with respect to particular * iterators. * * Clients of this function should not have to handle any AGTV_BINARY values * (since recursive calls will deal with this), provided skip_nested is false. * It is our job to expand the AGTV_BINARY representation without bothering * them with it. However, clients should not take it upon themselves to touch * array or Object element/pair buffers, since their element/pair pointers are * garbage. Also, *val will not be set when returning WAGT_END_ARRAY or * WAGT_END_OBJECT, on the assumption that it's only useful to access values * when recursing in. */ agtype_iterator_token agtype_iterator_next(agtype_iterator **it, agtype_value *val, bool skip_nested) { if (*it == NULL) return WAGT_DONE; /* * When stepping into a nested container, we jump back here to start * processing the child. We will not recurse further in one call, because * processing the child will always begin in AGTI_ARRAY_START or * AGTI_OBJECT_START state. */ recurse: switch ((*it)->state) { case AGTI_ARRAY_START: /* Set v to array on first array call */ val->type = AGTV_ARRAY; val->val.array.num_elems = (*it)->num_elems; /* * v->val.array.elems is not actually set, because we aren't doing * a full conversion */ val->val.array.raw_scalar = (*it)->is_scalar; (*it)->curr_index = 0; (*it)->curr_data_offset = 0; (*it)->curr_value_offset = 0; /* not actually used */ /* Set state for next call */ (*it)->state = AGTI_ARRAY_ELEM; return WAGT_BEGIN_ARRAY; case AGTI_ARRAY_ELEM: if ((*it)->curr_index >= (*it)->num_elems) { /* * All elements within array already processed. Report this * to caller, and give it back original parent iterator (which * independently tracks iteration progress at its level of * nesting). */ *it = free_and_get_parent(*it); return WAGT_END_ARRAY; } fill_agtype_value((*it)->container, (*it)->curr_index, (*it)->data_proper, (*it)->curr_data_offset, val); AGTE_ADVANCE_OFFSET((*it)->curr_data_offset, (*it)->children[(*it)->curr_index]); (*it)->curr_index++; if (!IS_A_AGTYPE_SCALAR(val) && !skip_nested) { /* Recurse into container. */ *it = iterator_from_container(val->val.binary.data, *it); goto recurse; } else { /* * Scalar item in array, or a container and caller didn't want * us to recurse into it. */ return WAGT_ELEM; } case AGTI_OBJECT_START: /* Set v to object on first object call */ val->type = AGTV_OBJECT; val->val.object.num_pairs = (*it)->num_elems; /* * v->val.object.pairs is not actually set, because we aren't * doing a full conversion */ (*it)->curr_index = 0; (*it)->curr_data_offset = 0; (*it)->curr_value_offset = get_agtype_offset((*it)->container, (*it)->num_elems); /* Set state for next call */ (*it)->state = AGTI_OBJECT_KEY; return WAGT_BEGIN_OBJECT; case AGTI_OBJECT_KEY: if ((*it)->curr_index >= (*it)->num_elems) { /* * All pairs within object already processed. Report this to * caller, and give it back original containing iterator * (which independently tracks iteration progress at its level * of nesting). */ *it = free_and_get_parent(*it); return WAGT_END_OBJECT; } else { /* Return key of a key/value pair. */ fill_agtype_value((*it)->container, (*it)->curr_index, (*it)->data_proper, (*it)->curr_data_offset, val); if (val->type != AGTV_STRING) ereport(ERROR, (errmsg("unexpected agtype type as object key %d", val->type))); /* Set state for next call */ (*it)->state = AGTI_OBJECT_VALUE; return WAGT_KEY; } case AGTI_OBJECT_VALUE: /* Set state for next call */ (*it)->state = AGTI_OBJECT_KEY; fill_agtype_value((*it)->container, (*it)->curr_index + (*it)->num_elems, (*it)->data_proper, (*it)->curr_value_offset, val); AGTE_ADVANCE_OFFSET((*it)->curr_data_offset, (*it)->children[(*it)->curr_index]); AGTE_ADVANCE_OFFSET( (*it)->curr_value_offset, (*it)->children[(*it)->curr_index + (*it)->num_elems]); (*it)->curr_index++; /* * Value may be a container, in which case we recurse with new, * child iterator (unless the caller asked not to, by passing * skip_nested). */ if (!IS_A_AGTYPE_SCALAR(val) && !skip_nested) { *it = iterator_from_container(val->val.binary.data, *it); goto recurse; } else { return WAGT_VALUE; } } ereport(ERROR, (errmsg("invalid iterator state %d", (*it)->state))); return -1; } /* * Initialize an iterator for iterating all elements in a container. */ static agtype_iterator *iterator_from_container(agtype_container *container, agtype_iterator *parent) { agtype_iterator *it; it = palloc0(sizeof(agtype_iterator)); it->container = container; it->parent = parent; it->num_elems = AGTYPE_CONTAINER_SIZE(container); /* Array starts just after header */ it->children = container->children; switch (container->header & (AGT_FARRAY | AGT_FOBJECT)) { case AGT_FARRAY: it->data_proper = (char *)it->children + it->num_elems * sizeof(agtentry); it->is_scalar = AGTYPE_CONTAINER_IS_SCALAR(container); /* This is either a "raw scalar", or an array */ Assert(!it->is_scalar || it->num_elems == 1); it->state = AGTI_ARRAY_START; break; case AGT_FOBJECT: it->data_proper = (char *)it->children + it->num_elems * sizeof(agtentry) * 2; it->state = AGTI_OBJECT_START; break; default: ereport(ERROR, (errmsg("unknown type of agtype container %d", container->header & (AGT_FARRAY | AGT_FOBJECT)))); } return it; } /* * agtype_iterator_next() worker: Return parent, while freeing memory for * current iterator */ static agtype_iterator *free_and_get_parent(agtype_iterator *it) { agtype_iterator *v = it->parent; pfree(it); return v; } /* * Worker for "contains" operator's function * * Formally speaking, containment is top-down, unordered subtree isomorphism. * * Takes iterators that belong to some container type. These iterators * "belong" to those values in the sense that they've just been initialized in * respect of them by the caller (perhaps in a nested fashion). * * "val" is lhs agtype, and m_contained is rhs agtype when called from top * level. We determine if m_contained is contained within val. */ bool agtype_deep_contains(agtype_iterator **val, agtype_iterator **m_contained) { agtype_value vval; agtype_value vcontained; agtype_iterator_token rval; agtype_iterator_token rcont; /* * Guard against stack overflow due to overly complex agtype. * * Functions called here independently take this precaution, but that * might not be sufficient since this is also a recursive function. */ check_stack_depth(); rval = agtype_iterator_next(val, &vval, false); rcont = agtype_iterator_next(m_contained, &vcontained, false); if (rval != rcont) { /* * The differing return values can immediately be taken as indicating * two differing container types at this nesting level, which is * sufficient reason to give up entirely (but it should be the case * that they're both some container type). */ Assert(rval == WAGT_BEGIN_OBJECT || rval == WAGT_BEGIN_ARRAY); Assert(rcont == WAGT_BEGIN_OBJECT || rcont == WAGT_BEGIN_ARRAY); return false; } else if (rcont == WAGT_BEGIN_OBJECT) { Assert(vval.type == AGTV_OBJECT); Assert(vcontained.type == AGTV_OBJECT); /* * If the lhs has fewer pairs than the rhs, it can't possibly contain * the rhs. (This conclusion is safe only because we de-duplicate * keys in all agtype objects; thus there can be no corresponding * optimization in the array case.) The case probably won't arise * often, but since it's such a cheap check we may as well make it. */ if (vval.val.object.num_pairs < vcontained.val.object.num_pairs) return false; /* Work through rhs "is it contained within?" object */ for (;;) { agtype_value *lhs_val; /* lhs_val is from pair in lhs object */ rcont = agtype_iterator_next(m_contained, &vcontained, false); /* * When we get through caller's rhs "is it contained within?" * object without failing to find one of its values, it's * contained. */ if (rcont == WAGT_END_OBJECT) return true; Assert(rcont == WAGT_KEY); /* First, find value by key... */ lhs_val = find_agtype_value_from_container( (*val)->container, AGT_FOBJECT, &vcontained); if (!lhs_val) return false; /* * ...at this stage it is apparent that there is at least a key * match for this rhs pair. */ rcont = agtype_iterator_next(m_contained, &vcontained, true); Assert(rcont == WAGT_VALUE); /* * Compare rhs pair's value with lhs pair's value just found using * key */ if (lhs_val->type != vcontained.type) { return false; } else if (IS_A_AGTYPE_SCALAR(lhs_val)) { if (!equals_agtype_scalar_value(lhs_val, &vcontained)) return false; } else { /* Nested container value (object or array) */ agtype_iterator *nestval; agtype_iterator *nest_contained; Assert(lhs_val->type == AGTV_BINARY); Assert(vcontained.type == AGTV_BINARY); nestval = agtype_iterator_init(lhs_val->val.binary.data); nest_contained = agtype_iterator_init(vcontained.val.binary.data); /* * Match "value" side of rhs datum object's pair recursively. * It's a nested structure. * * Note that nesting still has to "match up" at the right * nesting sub-levels. However, there need only be zero or * more matching pairs (or elements) at each nesting level * (provided the *rhs* pairs/elements *all* match on each * level), which enables searching nested structures for a * single String or other primitive type sub-datum quite * effectively (provided the user constructed the rhs nested * structure such that we "know where to look"). * * In other words, the mapping of container nodes in the rhs * "vcontained" agtype to internal nodes on the lhs is * injective, and parent-child edges on the rhs must be mapped * to parent-child edges on the lhs to satisfy the condition * of containment (plus of course the mapped nodes must be * equal). */ if (!agtype_deep_contains(&nestval, &nest_contained)) return false; } } } else if (rcont == WAGT_BEGIN_ARRAY) { agtype_value *lhs_conts = NULL; uint32 num_lhs_elems = vval.val.array.num_elems; Assert(vval.type == AGTV_ARRAY); Assert(vcontained.type == AGTV_ARRAY); /* * Handle distinction between "raw scalar" pseudo arrays, and real * arrays. * * A raw scalar may contain another raw scalar, and an array may * contain a raw scalar, but a raw scalar may not contain an array. We * don't do something like this for the object case, since objects can * only contain pairs, never raw scalars (a pair is represented by an * rhs object argument with a single contained pair). */ if (vval.val.array.raw_scalar && !vcontained.val.array.raw_scalar) return false; /* Work through rhs "is it contained within?" array */ for (;;) { rcont = agtype_iterator_next(m_contained, &vcontained, true); /* * When we get through caller's rhs "is it contained within?" * array without failing to find one of its values, it's * contained. */ if (rcont == WAGT_END_ARRAY) return true; Assert(rcont == WAGT_ELEM); if (IS_A_AGTYPE_SCALAR(&vcontained)) { if (!find_agtype_value_from_container((*val)->container, AGT_FARRAY, &vcontained)) return false; } else { uint32 i; /* * If this is first container found in rhs array (at this * depth), initialize temp lhs array of containers */ if (lhs_conts == NULL) { uint32 j = 0; /* Make room for all possible values */ lhs_conts = palloc(sizeof(agtype_value) * num_lhs_elems); for (i = 0; i < num_lhs_elems; i++) { /* Store all lhs elements in temp array */ rcont = agtype_iterator_next(val, &vval, true); Assert(rcont == WAGT_ELEM); if (vval.type == AGTV_BINARY) lhs_conts[j++] = vval; } /* No container elements in temp array, so give up now */ if (j == 0) return false; /* We may have only partially filled array */ num_lhs_elems = j; } /* XXX: Nested array containment is O(N^2) */ for (i = 0; i < num_lhs_elems; i++) { /* Nested container value (object or array) */ agtype_iterator *nestval; agtype_iterator *nest_contained; bool contains; nestval = agtype_iterator_init(lhs_conts[i].val.binary.data); nest_contained = agtype_iterator_init(vcontained.val.binary.data); contains = agtype_deep_contains(&nestval, &nest_contained); if (nestval) pfree(nestval); if (nest_contained) pfree(nest_contained); if (contains) break; } /* * Report rhs container value is not contained if couldn't * match rhs container to *some* lhs cont */ if (i == num_lhs_elems) return false; } } } else { ereport(ERROR, (errmsg("invalid agtype container type"))); } ereport(ERROR, (errmsg("unexpectedly fell off end of agtype container"))); return false; } /* * Hash an agtype_value scalar value, mixing the hash value into an existing * hash provided by the caller. * * Some callers may wish to independently XOR in AGT_FOBJECT and AGT_FARRAY * flags. */ void agtype_hash_scalar_value(const agtype_value *scalar_val, uint32 *hash) { uint32 tmp; /* Compute hash value for scalar_val */ switch (scalar_val->type) { case AGTV_NULL: tmp = 0x01; break; case AGTV_STRING: tmp = DatumGetUInt32( hash_any((const unsigned char *)scalar_val->val.string.val, scalar_val->val.string.len)); break; case AGTV_NUMERIC: /* Must hash equal numerics to equal hash codes */ tmp = DatumGetUInt32(DirectFunctionCall1( hash_numeric, NumericGetDatum(scalar_val->val.numeric))); break; case AGTV_BOOL: tmp = scalar_val->val.boolean ? 0x02 : 0x04; break; case AGTV_INTEGER: tmp = DatumGetUInt32(DirectFunctionCall1( hashint8, Int64GetDatum(scalar_val->val.int_value))); break; case AGTV_FLOAT: tmp = DatumGetUInt32(DirectFunctionCall1( hashfloat8, Float8GetDatum(scalar_val->val.float_value))); break; default: ereport(ERROR, (errmsg("invalid agtype scalar type %d to compute hash", scalar_val->type))); tmp = 0; /* keep compiler quiet */ break; } /* * Combine hash values of successive keys, values and elements by rotating * the previous value left 1 bit, then XOR'ing in the new * key/value/element's hash value. */ *hash = (*hash << 1) | (*hash >> 31); *hash ^= tmp; } /* * Hash a value to a 64-bit value, with a seed. Otherwise, similar to * agtype_hash_scalar_value. */ void agtype_hash_scalar_value_extended(const agtype_value *scalar_val, uint64 *hash, uint64 seed) { uint64 tmp = 0; switch (scalar_val->type) { case AGTV_NULL: tmp = seed + 0x01; break; case AGTV_STRING: tmp = DatumGetUInt64(hash_any_extended( (const unsigned char *)scalar_val->val.string.val, scalar_val->val.string.len, seed)); break; case AGTV_NUMERIC: tmp = DatumGetUInt64(DirectFunctionCall2( hash_numeric_extended, NumericGetDatum(scalar_val->val.numeric), UInt64GetDatum(seed))); break; case AGTV_BOOL: if (seed) { tmp = DatumGetUInt64(DirectFunctionCall2( hashcharextended, BoolGetDatum(scalar_val->val.boolean), UInt64GetDatum(seed))); } else { tmp = scalar_val->val.boolean ? 0x02 : 0x04; } break; case AGTV_INTEGER: tmp = DatumGetUInt64(DirectFunctionCall2( hashint8extended, Int64GetDatum(scalar_val->val.int_value), UInt64GetDatum(seed))); break; case AGTV_FLOAT: tmp = DatumGetUInt64(DirectFunctionCall2( hashfloat8extended, Float8GetDatum(scalar_val->val.float_value), UInt64GetDatum(seed))); break; case AGTV_VERTEX: { graphid id; agtype_value *id_agt = GET_AGTYPE_VALUE_OBJECT_VALUE(scalar_val, "id"); id = id_agt->val.int_value; tmp = DatumGetUInt64(DirectFunctionCall2( hashint8extended, Float8GetDatum(id), UInt64GetDatum(seed))); break; } case AGTV_EDGE: { graphid id; agtype_value *id_agt = GET_AGTYPE_VALUE_OBJECT_VALUE(scalar_val, "id"); id = id_agt->val.int_value; tmp = DatumGetUInt64(DirectFunctionCall2( hashint8extended, Float8GetDatum(id), UInt64GetDatum(seed))); break; } case AGTV_PATH: { int i; for (i = 0; i < scalar_val->val.array.num_elems; i++) { agtype_value v; v = scalar_val->val.array.elems[i]; agtype_hash_scalar_value_extended(&v, &tmp, seed); } break; } default: ereport( ERROR, (errmsg("invalid agtype scalar type %d to compute hash extended", scalar_val->type))); break; } *hash = ROTATE_HIGH_AND_LOW_32BITS(*hash); *hash ^= tmp; } /* * Function to compare two floats, obviously. However, there are a few * special cases that we need to cover with regards to NaN and +/-Infinity. * NaN is not equal to any other number, including itself. However, for * ordering, we need to allow NaN = NaN and NaN > any number including * positive infinity - * * -Infinity < any number < +Infinity < NaN * * Note: This is copied from float8_cmp_internal. * Note: Special float values can cause exceptions, hence the order of the * comparisons. */ static int compare_two_floats_orderability(float8 lhs, float8 rhs) { /* * We consider all NANs to be equal and larger than any non-NAN. This is * somewhat arbitrary; the important thing is to have a consistent sort * order. */ if (isnan(lhs)) { if (isnan(rhs)) return 0; /* NAN = NAN */ else return 1; /* NAN > non-NAN */ } else if (isnan(rhs)) { return -1; /* non-NAN < NAN */ } else { if (lhs > rhs) return 1; else if (lhs < rhs) return -1; else return 0; } } /* * Are two scalar agtype_values of the same type a and b equal? */ static bool equals_agtype_scalar_value(agtype_value *a, agtype_value *b) { /* if the values are of the same type */ if (a->type == b->type) { switch (a->type) { case AGTV_NULL: return true; case AGTV_STRING: return length_compare_agtype_string_value(a, b) == 0; case AGTV_NUMERIC: return DatumGetBool(DirectFunctionCall2( numeric_eq, PointerGetDatum(a->val.numeric), PointerGetDatum(b->val.numeric))); case AGTV_BOOL: return a->val.boolean == b->val.boolean; case AGTV_INTEGER: return a->val.int_value == b->val.int_value; case AGTV_FLOAT: return a->val.float_value == b->val.float_value; case AGTV_VERTEX: { graphid a_graphid, b_graphid; a_graphid = a->val.object.pairs[0].value.val.int_value; b_graphid = b->val.object.pairs[0].value.val.int_value; return a_graphid == b_graphid; } default: ereport(ERROR, (errmsg("invalid agtype scalar type %d for equals", a->type))); } } /* otherwise, the values are of differing type */ else ereport(ERROR, (errmsg("agtype input scalars must be of same type"))); /* execution will never reach this point due to the ereport call */ return false; } /* * Compare two scalar agtype_values, returning -1, 0, or 1. * * Strings are compared using the default collation. Used by B-tree * operators, where a lexical sort order is generally expected. */ int compare_agtype_scalar_values(agtype_value *a, agtype_value *b) { if (a->type == b->type) { switch (a->type) { case AGTV_NULL: return 0; case AGTV_STRING: { /* varstr_cmp isn't guaranteed to return 1, 0, -1 */ int result = varstr_cmp(a->val.string.val, a->val.string.len, b->val.string.val, b->val.string.len, DEFAULT_COLLATION_OID); if (result > 0) { return 1; } else if (result < 0) { return -1; } else { return 0; } } case AGTV_NUMERIC: return DatumGetInt32(DirectFunctionCall2( numeric_cmp, PointerGetDatum(a->val.numeric), PointerGetDatum(b->val.numeric))); case AGTV_BOOL: if (a->val.boolean == b->val.boolean) { return 0; } else if (a->val.boolean > b->val.boolean) { return 1; } else { return -1; } case AGTV_INTEGER: if (a->val.int_value == b->val.int_value) { return 0; } else if (a->val.int_value > b->val.int_value) { return 1; } else { return -1; } case AGTV_FLOAT: return compare_two_floats_orderability(a->val.float_value, b->val.float_value); case AGTV_VERTEX: case AGTV_EDGE: { agtype_value *a_id, *b_id; graphid a_graphid, b_graphid; a_id = GET_AGTYPE_VALUE_OBJECT_VALUE(a, "id"); b_id = GET_AGTYPE_VALUE_OBJECT_VALUE(b, "id"); a_graphid = a_id->val.int_value; b_graphid = b_id->val.int_value; if (a_graphid == b_graphid) { return 0; } else if (a_graphid > b_graphid) { return 1; } else { return -1; } } case AGTV_PATH: { int i; if (a->val.array.num_elems != b->val.array.num_elems) return a->val.array.num_elems > b->val.array.num_elems ? 1 : -1; for (i = 0; i < a->val.array.num_elems; i++) { agtype_value a_elem, b_elem; int res; a_elem = a->val.array.elems[i]; b_elem = b->val.array.elems[i]; res = compare_agtype_scalar_values(&a_elem, &b_elem); if (res) { return res; } } return 0; } default: ereport(ERROR, (errmsg("invalid agtype scalar type %d for compare", a->type))); } } /* check for integer compared to float */ if (a->type == AGTV_INTEGER && b->type == AGTV_FLOAT) { return compare_two_floats_orderability((float8)a->val.int_value, b->val.float_value); } /* check for float compared to integer */ if (a->type == AGTV_FLOAT && b->type == AGTV_INTEGER) { return compare_two_floats_orderability(a->val.float_value, (float8)b->val.int_value); } /* check for integer or float compared to numeric */ if (is_numeric_result(a, b)) { Datum numd, lhsd, rhsd; lhsd = get_numeric_datum_from_agtype_value(a); rhsd = get_numeric_datum_from_agtype_value(b); numd = DirectFunctionCall2(numeric_cmp, lhsd, rhsd); return DatumGetInt32(numd); } ereport(ERROR, (errmsg("agtype input scalar type mismatch"))); return -1; } /* * Functions for manipulating the resizeable buffer used by convert_agtype and * its subroutines. */ /* * Reserve 'len' bytes, at the end of the buffer, enlarging it if necessary. * Returns the offset to the reserved area. The caller is expected to fill * the reserved area later with copy_to_buffer(). */ int reserve_from_buffer(StringInfo buffer, int len) { int offset; /* Make more room if needed */ enlargeStringInfo(buffer, len); /* remember current offset */ offset = buffer->len; /* reserve the space */ buffer->len += len; /* * Keep a trailing null in place, even though it's not useful for us; it * seems best to preserve the invariants of StringInfos. */ buffer->data[buffer->len] = '\0'; return offset; } /* * Copy 'len' bytes to a previously reserved area in buffer. */ static void copy_to_buffer(StringInfo buffer, int offset, const char *data, int len) { memcpy(buffer->data + offset, data, len); } /* * A shorthand for reserve_from_buffer + copy_to_buffer. */ static void append_to_buffer(StringInfo buffer, const char *data, int len) { int offset; offset = reserve_from_buffer(buffer, len); copy_to_buffer(buffer, offset, data, len); } /* * Append padding, so that the length of the StringInfo is int-aligned. * Returns the number of padding bytes appended. */ short pad_buffer_to_int(StringInfo buffer) { int padlen; int p; int offset; padlen = INTALIGN(buffer->len) - buffer->len; offset = reserve_from_buffer(buffer, padlen); /* padlen must be small, so this is probably faster than a memset */ for (p = 0; p < padlen; p++) buffer->data[offset + p] = '\0'; return padlen; } /* * Given an agtype_value, convert to agtype. The result is palloc'd. */ static agtype *convert_to_agtype(agtype_value *val) { StringInfoData buffer; agtentry aentry; agtype *res; /* Should not already have binary representation */ Assert(val->type != AGTV_BINARY); /* Allocate an output buffer. It will be enlarged as needed */ initStringInfo(&buffer); /* Make room for the varlena header */ reserve_from_buffer(&buffer, VARHDRSZ); convert_agtype_value(&buffer, &aentry, val, 0); /* * Note: the agtentry of the root is discarded. Therefore the root * agtype_container struct must contain enough information to tell what * kind of value it is. */ res = (agtype *)buffer.data; SET_VARSIZE(res, buffer.len); return res; } /* * Subroutine of convert_agtype: serialize a single agtype_value into buffer. * * The agtentry header for this node is returned in *header. It is filled in * with the length of this value and appropriate type bits. If we wish to * store an end offset rather than a length, it is the caller's responsibility * to adjust for that. * * If the value is an array or an object, this recurses. 'level' is only used * for debugging purposes. */ static void convert_agtype_value(StringInfo buffer, agtentry *header, agtype_value *val, int level) { check_stack_depth(); if (!val) return; /* * An agtype_value passed as val should never have a type of AGTV_BINARY, * and neither should any of its sub-components. Those values will be * produced by convert_agtype_array and convert_agtype_object, the results * of which will not be passed back to this function as an argument. */ if (IS_A_AGTYPE_SCALAR(val)) convert_agtype_scalar(buffer, header, val); else if (val->type == AGTV_ARRAY) convert_agtype_array(buffer, header, val, level); else if (val->type == AGTV_OBJECT) convert_agtype_object(buffer, header, val, level); else ereport(ERROR, (errmsg("unknown agtype type %d to convert", val->type))); } static void convert_agtype_array(StringInfo buffer, agtentry *pheader, agtype_value *val, int level) { int base_offset; int agtentry_offset; int i; int totallen; uint32 header; int num_elems = val->val.array.num_elems; /* Remember where in the buffer this array starts. */ base_offset = buffer->len; /* Align to 4-byte boundary (any padding counts as part of my data) */ pad_buffer_to_int(buffer); /* * Construct the header agtentry and store it in the beginning of the * variable-length payload. */ header = num_elems | AGT_FARRAY; if (val->val.array.raw_scalar) { Assert(num_elems == 1); Assert(level == 0); header |= AGT_FSCALAR; } append_to_buffer(buffer, (char *)&header, sizeof(uint32)); /* Reserve space for the agtentrys of the elements. */ agtentry_offset = reserve_from_buffer(buffer, sizeof(agtentry) * num_elems); totallen = 0; for (i = 0; i < num_elems; i++) { agtype_value *elem = &val->val.array.elems[i]; int len; agtentry meta; /* * Convert element, producing a agtentry and appending its * variable-length data to buffer */ convert_agtype_value(buffer, &meta, elem, level + 1); len = AGTE_OFFLENFLD(meta); totallen += len; /* * Bail out if total variable-length data exceeds what will fit in a * agtentry length field. We check this in each iteration, not just * once at the end, to forestall possible integer overflow. */ if (totallen > AGTENTRY_OFFLENMASK) { ereport( ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), errmsg( "total size of agtype array elements exceeds the maximum of %u bytes", AGTENTRY_OFFLENMASK))); } /* * Convert each AGT_OFFSET_STRIDE'th length to an offset. */ if ((i % AGT_OFFSET_STRIDE) == 0) meta = (meta & AGTENTRY_TYPEMASK) | totallen | AGTENTRY_HAS_OFF; copy_to_buffer(buffer, agtentry_offset, (char *)&meta, sizeof(agtentry)); agtentry_offset += sizeof(agtentry); } /* Total data size is everything we've appended to buffer */ totallen = buffer->len - base_offset; /* Check length again, since we didn't include the metadata above */ if (totallen > AGTENTRY_OFFLENMASK) { ereport( ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), errmsg( "total size of agtype array elements exceeds the maximum of %u bytes", AGTENTRY_OFFLENMASK))); } /* Initialize the header of this node in the container's agtentry array */ *pheader = AGTENTRY_IS_CONTAINER | totallen; } void convert_extended_array(StringInfo buffer, agtentry *pheader, agtype_value *val) { convert_agtype_array(buffer, pheader, val, 0); } void convert_extended_object(StringInfo buffer, agtentry *pheader, agtype_value *val) { convert_agtype_object(buffer, pheader, val, 0); } static void convert_agtype_object(StringInfo buffer, agtentry *pheader, agtype_value *val, int level) { int base_offset; int agtentry_offset; int i; int totallen; uint32 header; int num_pairs = val->val.object.num_pairs; /* Remember where in the buffer this object starts. */ base_offset = buffer->len; /* Align to 4-byte boundary (any padding counts as part of my data) */ pad_buffer_to_int(buffer); /* * Construct the header agtentry and store it in the beginning of the * variable-length payload. */ header = num_pairs | AGT_FOBJECT; append_to_buffer(buffer, (char *)&header, sizeof(uint32)); /* Reserve space for the agtentrys of the keys and values. */ agtentry_offset = reserve_from_buffer(buffer, sizeof(agtentry) * num_pairs * 2); /* * Iterate over the keys, then over the values, since that is the ordering * we want in the on-disk representation. */ totallen = 0; for (i = 0; i < num_pairs; i++) { agtype_pair *pair = &val->val.object.pairs[i]; int len; agtentry meta; /* * Convert key, producing an agtentry and appending its variable-length * data to buffer */ convert_agtype_scalar(buffer, &meta, &pair->key); len = AGTE_OFFLENFLD(meta); totallen += len; /* * Bail out if total variable-length data exceeds what will fit in a * agtentry length field. We check this in each iteration, not just * once at the end, to forestall possible integer overflow. */ if (totallen > AGTENTRY_OFFLENMASK) { ereport( ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), errmsg( "total size of agtype object elements exceeds the maximum of %u bytes", AGTENTRY_OFFLENMASK))); } /* * Convert each AGT_OFFSET_STRIDE'th length to an offset. */ if ((i % AGT_OFFSET_STRIDE) == 0) meta = (meta & AGTENTRY_TYPEMASK) | totallen | AGTENTRY_HAS_OFF; copy_to_buffer(buffer, agtentry_offset, (char *)&meta, sizeof(agtentry)); agtentry_offset += sizeof(agtentry); } for (i = 0; i < num_pairs; i++) { agtype_pair *pair = &val->val.object.pairs[i]; int len; agtentry meta; /* * Convert value, producing an agtentry and appending its * variable-length data to buffer */ convert_agtype_value(buffer, &meta, &pair->value, level + 1); len = AGTE_OFFLENFLD(meta); totallen += len; /* * Bail out if total variable-length data exceeds what will fit in a * agtentry length field. We check this in each iteration, not just * once at the end, to forestall possible integer overflow. */ if (totallen > AGTENTRY_OFFLENMASK) { ereport( ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), errmsg( "total size of agtype object elements exceeds the maximum of %u bytes", AGTENTRY_OFFLENMASK))); } /* * Convert each AGT_OFFSET_STRIDE'th length to an offset. */ if (((i + num_pairs) % AGT_OFFSET_STRIDE) == 0) meta = (meta & AGTENTRY_TYPEMASK) | totallen | AGTENTRY_HAS_OFF; copy_to_buffer(buffer, agtentry_offset, (char *)&meta, sizeof(agtentry)); agtentry_offset += sizeof(agtentry); } /* Total data size is everything we've appended to buffer */ totallen = buffer->len - base_offset; /* Check length again, since we didn't include the metadata above */ if (totallen > AGTENTRY_OFFLENMASK) { ereport( ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), errmsg( "total size of agtype object elements exceeds the maximum of %u bytes", AGTENTRY_OFFLENMASK))); } /* Initialize the header of this node in the container's agtentry array */ *pheader = AGTENTRY_IS_CONTAINER | totallen; } static void convert_agtype_scalar(StringInfo buffer, agtentry *entry, agtype_value *scalar_val) { int numlen; short padlen; bool status; switch (scalar_val->type) { case AGTV_NULL: *entry = AGTENTRY_IS_NULL; break; case AGTV_STRING: append_to_buffer(buffer, scalar_val->val.string.val, scalar_val->val.string.len); *entry = scalar_val->val.string.len; break; case AGTV_NUMERIC: numlen = VARSIZE_ANY(scalar_val->val.numeric); padlen = pad_buffer_to_int(buffer); append_to_buffer(buffer, (char *)scalar_val->val.numeric, numlen); *entry = AGTENTRY_IS_NUMERIC | (padlen + numlen); break; case AGTV_BOOL: *entry = (scalar_val->val.boolean) ? AGTENTRY_IS_BOOL_TRUE : AGTENTRY_IS_BOOL_FALSE; break; default: /* returns true if there was a valid extended type processed */ status = ag_serialize_extended_type(buffer, entry, scalar_val); /* if nothing was found, error log out */ if (!status) ereport(ERROR, (errmsg("invalid agtype scalar type %d to convert", scalar_val->type))); } } /* * Compare two AGTV_STRING agtype_value values, a and b. * * This is a special qsort() comparator used to sort strings in certain * internal contexts where it is sufficient to have a well-defined sort order. * In particular, object pair keys are sorted according to this criteria to * facilitate cheap binary searches where we don't care about lexical sort * order. * * a and b are first sorted based on their length. If a tie-breaker is * required, only then do we consider string binary equality. */ static int length_compare_agtype_string_value(const void *a, const void *b) { const agtype_value *va = (const agtype_value *)a; const agtype_value *vb = (const agtype_value *)b; int res; Assert(va->type == AGTV_STRING); Assert(vb->type == AGTV_STRING); if (va->val.string.len == vb->val.string.len) { res = memcmp(va->val.string.val, vb->val.string.val, va->val.string.len); } else { res = (va->val.string.len > vb->val.string.len) ? 1 : -1; } return res; } /* * qsort_arg() comparator to compare agtype_pair values. * * Third argument 'binequal' may point to a bool. If it's set, *binequal is set * to true iff a and b have full binary equality, since some callers have an * interest in whether the two values are equal or merely equivalent. * * N.B: String comparisons here are "length-wise" * * Pairs with equals keys are ordered such that the order field is respected. */ static int length_compare_agtype_pair(const void *a, const void *b, void *binequal) { const agtype_pair *pa = (const agtype_pair *)a; const agtype_pair *pb = (const agtype_pair *)b; int res; res = length_compare_agtype_string_value(&pa->key, &pb->key); if (res == 0 && binequal) *((bool *)binequal) = true; /* * Guarantee keeping order of equal pair. Unique algorithm will prefer * first element as value. */ if (res == 0) res = (pa->order > pb->order) ? -1 : 1; return res; } /* * Sort and unique-ify pairs in agtype_value object */ void uniqueify_agtype_object(agtype_value *object) { bool has_non_uniq = false; Assert(object->type == AGTV_OBJECT); if (object->val.object.num_pairs > 1) qsort_arg(object->val.object.pairs, object->val.object.num_pairs, sizeof(agtype_pair), length_compare_agtype_pair, &has_non_uniq); if (has_non_uniq) { agtype_pair *ptr = object->val.object.pairs + 1; agtype_pair *res = object->val.object.pairs; while (ptr - object->val.object.pairs < object->val.object.num_pairs) { /* Avoid copying over duplicate */ if (length_compare_agtype_string_value(ptr, res) != 0) { res++; if (ptr != res) memcpy(res, ptr, sizeof(agtype_pair)); } ptr++; } object->val.object.num_pairs = res + 1 - object->val.object.pairs; } } char *agtype_value_type_to_string(enum agtype_value_type type) { switch (type) { case AGTV_NULL: return "NULL"; case AGTV_STRING: return "string"; case AGTV_NUMERIC: return "numeric"; case AGTV_INTEGER: return "integer"; case AGTV_FLOAT: return "float"; case AGTV_BOOL: return "boolean"; case AGTV_VERTEX: return "vertex"; case AGTV_EDGE: return "edge"; case AGTV_ARRAY: return "array"; case AGTV_OBJECT: return "map"; case AGTV_BINARY: return "binary"; default: ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("unknown agtype"))); } return NULL; } /* * Deallocates the passed agtype_value recursively. */ void pfree_agtype_value(agtype_value* value) { pfree_agtype_value_content(value); pfree(value); } /* * Helper function that recursively deallocates the contents * of the passed agtype_value only. It does not deallocate * `value` itself. */ void pfree_agtype_value_content(agtype_value* value) { int i; // guards against stack overflow due to deeply nested agtype_value check_stack_depth(); switch (value->type) { case AGTV_NUMERIC: pfree(value->val.numeric); break; case AGTV_STRING: /* * The char pointer (val.string.val) is not free'd because * it is not allocated by an agtype helper function. */ break; case AGTV_ARRAY: case AGTV_PATH: for (i = 0; i < value->val.array.num_elems; i++) { pfree_agtype_value_content(&value->val.array.elems[i]); } pfree(value->val.array.elems); break; case AGTV_OBJECT: case AGTV_VERTEX: case AGTV_EDGE: for (i = 0; i < value->val.object.num_pairs; i++) { pfree_agtype_value_content(&value->val.object.pairs[i].key); pfree_agtype_value_content(&value->val.object.pairs[i].value); } pfree(value->val.object.pairs); break; case AGTV_BINARY: pfree(value->val.binary.data); break; case AGTV_NULL: case AGTV_INTEGER: case AGTV_FLOAT: case AGTV_BOOL: /* * These are deallocated by the calling function. */ break; default: ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("unknown agtype"))); break; } } void pfree_agtype_in_state(agtype_in_state* value) { pfree_agtype_value(value->res); free(value->parse_state); } /* * helper function that recursively unpacks the agtype_value to be copied * and pushes the scalar values into the copied agtype_value. * this helps skip the serialization part at some places where the original * properties passed to the function are in agtype_value format and * converting it to agtype for iteration can be expensive. * the caller of this function will need to push start and end object tokens * on its own as this function might be used in places where pushing only start * object token at top level is required (for example in alter_properties) */ void copy_agtype_value(agtype_parse_state* pstate, agtype_value* original_agtype_value, agtype_value **copied_agtype_value, bool is_top_level) { int i = 0; /* * guards against stack overflow due to deeply nested agtype_value */ check_stack_depth(); /* * directly pass the agtype_value to be pushed into the copied result * if type is scalar or binary (array or object) as push_agtype_value * can unpack binary on its own */ if (IS_A_AGTYPE_SCALAR(original_agtype_value) || original_agtype_value->type == AGTV_BINARY) { *copied_agtype_value = push_agtype_value(&pstate, WAGT_ELEM, original_agtype_value); } /* * if the passed in type is object or array, unpack it * until we are left with a scalar value to push to copied result */ else if (original_agtype_value->type == AGTV_OBJECT) { if (!is_top_level) { *copied_agtype_value = push_agtype_value(&pstate, WAGT_BEGIN_OBJECT, NULL); } for (; i < original_agtype_value->val.object.num_pairs; i ++) { agtype_pair *pair = original_agtype_value->val.object.pairs + i; *copied_agtype_value = push_agtype_value(&pstate, WAGT_KEY, &pair->key); if (IS_A_AGTYPE_SCALAR(&pair->value)) { *copied_agtype_value = push_agtype_value(&pstate, WAGT_VALUE, &pair->value); } else { /* do a recursive call once a non-scalar value is reached */ copy_agtype_value(pstate, &pair->value, copied_agtype_value, false); } } if (!is_top_level) { *copied_agtype_value = push_agtype_value(&pstate, WAGT_END_OBJECT, NULL); } } else if (original_agtype_value->type == AGTV_ARRAY) { *copied_agtype_value = push_agtype_value(&pstate, WAGT_BEGIN_ARRAY, NULL); for (; i < original_agtype_value->val.array.num_elems; i++) { agtype_value elem = original_agtype_value->val.array.elems[i]; if (IS_A_AGTYPE_SCALAR(&elem)) { *copied_agtype_value = push_agtype_value(&pstate, WAGT_ELEM, &elem); } else { /* do a recursive call once a non-scalar value is reached */ copy_agtype_value(pstate, &elem, copied_agtype_value, false); } } *copied_agtype_value = push_agtype_value(&pstate, WAGT_END_ARRAY, NULL); } else { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid type provided for copy_agtype_value"))); } } age-PG16-v1.5.0-rc0/src/backend/utils/adt/cypher_funcs.c000066400000000000000000000031121454606241200225170ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "fmgr.h" PG_FUNCTION_INFO_V1(cypher); Datum cypher(PG_FUNCTION_ARGS) { const char *s; s = PG_ARGISNULL(0) ? "NULL" : PG_GETARG_CSTRING(0); ereport(ERROR, (errmsg_internal("unhandled cypher(cstring) function call"), errdetail_internal("%s", s))); PG_RETURN_NULL(); } PG_FUNCTION_INFO_V1(_cypher_create_clause); Datum _cypher_create_clause(PG_FUNCTION_ARGS) { PG_RETURN_NULL(); } PG_FUNCTION_INFO_V1(_cypher_set_clause); Datum _cypher_set_clause(PG_FUNCTION_ARGS) { PG_RETURN_NULL(); } PG_FUNCTION_INFO_V1(_cypher_delete_clause); Datum _cypher_delete_clause(PG_FUNCTION_ARGS) { PG_RETURN_NULL(); } PG_FUNCTION_INFO_V1(_cypher_merge_clause); Datum _cypher_merge_clause(PG_FUNCTION_ARGS) { PG_RETURN_NULL(); } age-PG16-v1.5.0-rc0/src/backend/utils/adt/graphid.c000066400000000000000000000145171454606241200214600ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "utils/builtins.h" #include "utils/sortsupport.h" #include "utils/graphid.h" static int graphid_btree_fast_cmp(Datum x, Datum y, SortSupport ssup); /* global storage of OID for graphid and _graphid */ static Oid g_GRAPHIDOID = InvalidOid; static Oid g_GRAPHIDARRAYOID = InvalidOid; /* helper function to quickly set, if necessary, and retrieve GRAPHIDOID */ Oid get_GRAPHIDOID(void) { if (g_GRAPHIDOID == InvalidOid) { g_GRAPHIDOID = GetSysCacheOid2(TYPENAMENSP, Anum_pg_type_oid, CStringGetDatum("graphid"), ObjectIdGetDatum(ag_catalog_namespace_id())); } return g_GRAPHIDOID; } /* helper function to quickly set, if necessary, and retrieve GRAPHIDARRAYOID */ Oid get_GRAPHIDARRAYOID(void) { if (g_GRAPHIDARRAYOID == InvalidOid) { g_GRAPHIDARRAYOID = GetSysCacheOid2(TYPENAMENSP, Anum_pg_type_oid, CStringGetDatum("_graphid"), ObjectIdGetDatum(ag_catalog_namespace_id())); } return g_GRAPHIDARRAYOID; } /* helper function to clear the GRAPHOIDs after a drop extension */ void clear_global_Oids_GRAPHID(void) { g_GRAPHIDOID = InvalidOid; g_GRAPHIDARRAYOID = InvalidOid; } PG_FUNCTION_INFO_V1(graphid_in); // graphid type input function Datum graphid_in(PG_FUNCTION_ARGS) { char *str = PG_GETARG_CSTRING(0); char *endptr; int64 i; errno = 0; i = strtol(str, &endptr, 10); if (errno != 0 || endptr == str || *endptr != '\0') { ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid value for type graphid: \"%s\"", str))); } AG_RETURN_GRAPHID(i); } PG_FUNCTION_INFO_V1(graphid_out); // graphid type output function Datum graphid_out(PG_FUNCTION_ARGS) { graphid gid = AG_GETARG_GRAPHID(0); char buf[32]; // greater than MAXINT8LEN+1 char *out; pg_lltoa(gid, buf); out = pstrdup(buf); PG_RETURN_CSTRING(out); } PG_FUNCTION_INFO_V1(graphid_eq); Datum graphid_eq(PG_FUNCTION_ARGS) { graphid lgid = AG_GETARG_GRAPHID(0); graphid rgid = AG_GETARG_GRAPHID(1); PG_RETURN_BOOL(lgid == rgid); } PG_FUNCTION_INFO_V1(graphid_ne); Datum graphid_ne(PG_FUNCTION_ARGS) { graphid lgid = AG_GETARG_GRAPHID(0); graphid rgid = AG_GETARG_GRAPHID(1); PG_RETURN_BOOL(lgid != rgid); } PG_FUNCTION_INFO_V1(graphid_lt); Datum graphid_lt(PG_FUNCTION_ARGS) { graphid lgid = AG_GETARG_GRAPHID(0); graphid rgid = AG_GETARG_GRAPHID(1); PG_RETURN_BOOL(lgid < rgid); } PG_FUNCTION_INFO_V1(graphid_gt); Datum graphid_gt(PG_FUNCTION_ARGS) { graphid lgid = AG_GETARG_GRAPHID(0); graphid rgid = AG_GETARG_GRAPHID(1); PG_RETURN_BOOL(lgid > rgid); } PG_FUNCTION_INFO_V1(graphid_le); Datum graphid_le(PG_FUNCTION_ARGS) { graphid lgid = AG_GETARG_GRAPHID(0); graphid rgid = AG_GETARG_GRAPHID(1); PG_RETURN_BOOL(lgid <= rgid); } PG_FUNCTION_INFO_V1(graphid_ge); Datum graphid_ge(PG_FUNCTION_ARGS) { graphid lgid = AG_GETARG_GRAPHID(0); graphid rgid = AG_GETARG_GRAPHID(1); PG_RETURN_BOOL(lgid >= rgid); } PG_FUNCTION_INFO_V1(graphid_btree_cmp); Datum graphid_btree_cmp(PG_FUNCTION_ARGS) { graphid lgid = AG_GETARG_GRAPHID(0); graphid rgid = AG_GETARG_GRAPHID(1); if (lgid > rgid) PG_RETURN_INT32(1); else if (lgid == rgid) PG_RETURN_INT32(0); else PG_RETURN_INT32(-1); } PG_FUNCTION_INFO_V1(graphid_btree_sort); Datum graphid_btree_sort(PG_FUNCTION_ARGS) { SortSupport ssup = (SortSupport)PG_GETARG_POINTER(0); ssup->comparator = graphid_btree_fast_cmp; PG_RETURN_VOID(); } static int graphid_btree_fast_cmp(Datum x, Datum y, SortSupport ssup) { graphid lgid = DATUM_GET_GRAPHID(x); graphid rgid = DATUM_GET_GRAPHID(y); if (lgid > rgid) return 1; else if (lgid == rgid) return 0; else return -1; } graphid make_graphid(const int32 label_id, const int64 entry_id) { uint64 tmp; if (!label_id_is_valid(label_id)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("label_id must be %d .. %d", LABEL_ID_MIN, LABEL_ID_MAX))); } if (!entry_id_is_valid(entry_id)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("entry_id must be " INT64_FORMAT " .. " INT64_FORMAT, ENTRY_ID_MIN, ENTRY_ID_MAX))); } tmp = (((uint64)label_id) << ENTRY_ID_BITS) | (((uint64)entry_id) & ENTRY_ID_MASK); return (graphid)tmp; } int32 get_graphid_label_id(const graphid gid) { return (int32)(((uint64)gid) >> ENTRY_ID_BITS); } int64 get_graphid_entry_id(const graphid gid) { return (int64)(((uint64)gid) & ENTRY_ID_MASK); } PG_FUNCTION_INFO_V1(_graphid); Datum _graphid(PG_FUNCTION_ARGS) { int32 label_id; int64 entry_id; graphid gid; if (PG_ARGISNULL(0) || PG_ARGISNULL(1)) { ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("label_id and entry_id must not be null"))); } label_id = PG_GETARG_INT32(0); entry_id = PG_GETARG_INT64(1); gid = make_graphid(label_id, entry_id); AG_RETURN_GRAPHID(gid); } //Hashing Function for Hash Indexes PG_FUNCTION_INFO_V1(graphid_hash_cmp); Datum graphid_hash_cmp(PG_FUNCTION_ARGS) { graphid l = AG_GETARG_GRAPHID(0); int hash = (int) ((l >> 32) ^ l);// ^ seed; PG_RETURN_INT32(hash); } age-PG16-v1.5.0-rc0/src/backend/utils/ag_func.c000066400000000000000000000077271454606241200207010ustar00rootroot00000000000000/* * For PostgreSQL Database Management System: * (formerly known as Postgres, then as Postgres95) * * Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group * * Portions Copyright (c) 1994, The Regents of the University of California * * Permission to use, copy, modify, and distribute this software and its documentation for any purpose, * without fee, and without a written agreement is hereby granted, provided that the above copyright notice * and this paragraph and the following two paragraphs appear in all copies. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA * HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ #include "postgres.h" #include "access/htup_details.h" #include "catalog/pg_proc.h" #include "utils/builtins.h" #include "utils/lsyscache.h" #include "utils/syscache.h" #include "catalog/ag_namespace.h" #include "utils/ag_func.h" // checks that func_oid is of func_name function in ag_catalog bool is_oid_ag_func(Oid func_oid, const char *func_name) { HeapTuple proctup; Form_pg_proc proc; Oid nspid; const char *nspname; Assert(OidIsValid(func_oid)); Assert(func_name); proctup = SearchSysCache1(PROCOID, ObjectIdGetDatum(func_oid)); Assert(HeapTupleIsValid(proctup)); proc = (Form_pg_proc)GETSTRUCT(proctup); if (strncmp(NameStr(proc->proname), func_name, NAMEDATALEN) != 0) { ReleaseSysCache(proctup); return false; } nspid = proc->pronamespace; ReleaseSysCache(proctup); nspname = get_namespace_name_or_temp(nspid); Assert(nspname); return (strcmp(nspname, "ag_catalog") == 0); } // gets the function OID that matches with func_name and argument types Oid get_ag_func_oid(const char *func_name, const int nargs, ...) { Oid oids[FUNC_MAX_ARGS]; va_list ap; int i; oidvector *arg_types; Oid func_oid; Assert(func_name); Assert(nargs >= 0 && nargs <= FUNC_MAX_ARGS); va_start(ap, nargs); for (i = 0; i < nargs; i++) oids[i] = va_arg(ap, Oid); va_end(ap); arg_types = buildoidvector(oids, nargs); func_oid = GetSysCacheOid3(PROCNAMEARGSNSP, Anum_pg_proc_oid, CStringGetDatum(func_name), PointerGetDatum(arg_types), ObjectIdGetDatum(ag_catalog_namespace_id())); if (!OidIsValid(func_oid)) { ereport(ERROR, (errmsg_internal("ag function does not exist"), errdetail_internal("%s(%d)", func_name, nargs))); } return func_oid; } Oid get_pg_func_oid(const char *func_name, const int nargs, ...) { Oid oids[FUNC_MAX_ARGS]; va_list ap; int i; oidvector *arg_types; Oid func_oid; Assert(func_name); Assert(nargs >= 0 && nargs <= FUNC_MAX_ARGS); va_start(ap, nargs); for (i = 0; i < nargs; i++) oids[i] = va_arg(ap, Oid); va_end(ap); arg_types = buildoidvector(oids, nargs); func_oid = GetSysCacheOid3(PROCNAMEARGSNSP, Anum_pg_proc_oid, CStringGetDatum(func_name), PointerGetDatum(arg_types), ObjectIdGetDatum(pg_catalog_namespace_id())); if (!OidIsValid(func_oid)) { ereport(ERROR, (errmsg_internal("pg function does not exist"), errdetail_internal("%s(%d)", func_name, nargs))); } return func_oid; } age-PG16-v1.5.0-rc0/src/backend/utils/ag_guc.c000066400000000000000000000031331454606241200205070ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "utils/guc.h" #include "utils/ag_guc.h" bool age_enable_containment = true; /* * Defines AGE's custom configuration parameters. * * The name of the parameter must be `age.*`. This name is used for setting * value to the parameter. For example, `SET age.enable_containment = on;`. */ void define_config_params(void) { DefineCustomBoolVariable("age.enable_containment", "Use @> operator to transform MATCH's filter. Otherwise, use -> operator.", NULL, &age_enable_containment, true, PGC_SUSET, 0, NULL, NULL, NULL); } age-PG16-v1.5.0-rc0/src/backend/utils/cache/000077500000000000000000000000001454606241200201615ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/src/backend/utils/cache/ag_cache.c000066400000000000000000001065741454606241200220540ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "access/genam.h" #include "access/heapam.h" #include "catalog/pg_collation.h" #include "utils/builtins.h" #include "utils/catcache.h" #include "utils/inval.h" #include "catalog/ag_graph.h" #include "catalog/ag_label.h" #include "utils/ag_cache.h" typedef struct graph_name_cache_entry { NameData name; // hash key graph_cache_data data; } graph_name_cache_entry; typedef struct graph_namespace_cache_entry { Oid namespace; // hash key graph_cache_data data; } graph_namespace_cache_entry; typedef struct label_name_graph_cache_key { NameData name; Oid graph; } label_name_graph_cache_key; typedef struct label_name_graph_cache_entry { label_name_graph_cache_key key; // hash key label_cache_data data; } label_name_graph_cache_entry; typedef struct label_graph_oid_cache_key { Oid graph; int32 id; } label_graph_oid_cache_key; typedef struct label_graph_oid_cache_entry { label_graph_oid_cache_key key; // hash key label_cache_data data; } label_graph_oid_cache_entry; typedef struct label_relation_cache_entry { Oid relation; // hash key label_cache_data data; } label_relation_cache_entry; typedef struct label_seq_name_graph_cache_key { NameData name; Oid graph; } label_seq_name_graph_cache_key; typedef struct label_seq_name_graph_cache_entry { label_seq_name_graph_cache_key key; // hash key label_cache_data data; } label_seq_name_graph_cache_entry; // ag_graph.name static HTAB *graph_name_cache_hash = NULL; static ScanKeyData graph_name_scan_keys[1]; // ag_graph.namespace static HTAB *graph_namespace_cache_hash = NULL; static ScanKeyData graph_namespace_scan_keys[1]; // ag_label.name, ag_label.graph static HTAB *label_name_graph_cache_hash = NULL; static ScanKeyData label_name_graph_scan_keys[2]; // ag_label.graph, ag_label.id static HTAB *label_graph_oid_cache_hash = NULL; static ScanKeyData label_graph_oid_scan_keys[2]; // ag_label.relation static HTAB *label_relation_cache_hash = NULL; static ScanKeyData label_relation_scan_keys[1]; // ag_label.seq_name, ag_label.graph static HTAB *label_seq_name_graph_cache_hash = NULL; static ScanKeyData label_seq_name_graph_scan_keys[2]; // initialize all caches static void initialize_caches(void); // common static void ag_cache_scan_key_init(ScanKey entry, AttrNumber attno, RegProcedure func); static int name_hash_compare(const void *key1, const void *key2, Size keysize); // ag_graph static void initialize_graph_caches(void); static void create_graph_caches(void); static void create_graph_name_cache(void); static void create_graph_namespace_cache(void); static void invalidate_graph_caches(Datum arg, int cache_id, uint32 hash_value); static void flush_graph_name_cache(void); static void flush_graph_namespace_cache(void); static graph_cache_data *search_graph_name_cache_miss(Name name); static graph_cache_data *search_graph_namespace_cache_miss(Oid namespace); static void fill_graph_cache_data(graph_cache_data *cache_data, HeapTuple tuple, TupleDesc tuple_desc); // ag_label static void initialize_label_caches(void); static void create_label_caches(void); static void create_label_name_graph_cache(void); static void create_label_graph_oid_cache(void); static void create_label_relation_cache(void); static void create_label_seq_name_graph_cache(void); static void invalidate_label_caches(Datum arg, Oid relid); static void invalidate_label_name_graph_cache(Oid relid); static void flush_label_name_graph_cache(void); static void invalidate_label_graph_oid_cache(Oid relid); static void flush_label_graph_oid_cache(void); static void invalidate_label_relation_cache(Oid relid); static void flush_label_relation_cache(void); static void invalidate_label_seq_name_graph_cache(Oid relid); static void flush_label_seq_name_graph_cache(void); static label_cache_data *search_label_name_graph_cache_miss(Name name, Oid graph); static void *label_name_graph_cache_hash_search(Name name, Oid graph, HASHACTION action, bool *found); static label_cache_data *search_label_graph_oid_cache_miss(Oid graph, uint32 id); static void *label_graph_oid_cache_hash_search(uint32 graph, int32 id, HASHACTION action, bool *found); static label_cache_data *search_label_relation_cache_miss(Oid relation); static label_cache_data *search_label_seq_name_graph_cache_miss(Name name, Oid graph); static void *label_seq_name_graph_cache_hash_search(Name name, Oid graph, HASHACTION action, bool *found); static void fill_label_cache_data(label_cache_data *cache_data, HeapTuple tuple, TupleDesc tuple_desc); static void initialize_caches(void) { static bool initialized = false; if (initialized) { return; } if (!CacheMemoryContext) { CreateCacheMemoryContext(); } initialize_graph_caches(); initialize_label_caches(); initialized = true; } static void ag_cache_scan_key_init(ScanKey entry, AttrNumber attno, RegProcedure func) { entry->sk_flags = 0; entry->sk_attno = attno; entry->sk_strategy = BTEqualStrategyNumber; entry->sk_subtype = InvalidOid; entry->sk_collation = C_COLLATION_OID; fmgr_info_cxt(func, &entry->sk_func, CacheMemoryContext); entry->sk_argument = (Datum)0; } static int name_hash_compare(const void *key1, const void *key2, Size keysize) { Name name1 = (Name)key1; Name name2 = (Name)key2; // keysize parameter is superfluous here Assert(keysize == NAMEDATALEN); return strncmp(NameStr(*name1), NameStr(*name2), NAMEDATALEN); } static void initialize_graph_caches(void) { // ag_graph.name ag_cache_scan_key_init(&graph_name_scan_keys[0], Anum_ag_graph_name, F_NAMEEQ); // ag_graph.namespace ag_cache_scan_key_init(&graph_namespace_scan_keys[0], Anum_ag_graph_namespace, F_OIDEQ); create_graph_caches(); /* * A graph is backed by the bound namespace. So, register the invalidation * logic of the graph caches for invalidation events of NAMESPACEOID cache. */ CacheRegisterSyscacheCallback(NAMESPACEOID, invalidate_graph_caches, (Datum)0); } static void create_graph_caches(void) { /* * All the hash tables are created using their dedicated memory contexts * which are under TopMemoryContext. */ create_graph_name_cache(); create_graph_namespace_cache(); } static void create_graph_name_cache(void) { HASHCTL hash_ctl; MemSet(&hash_ctl, 0, sizeof(hash_ctl)); hash_ctl.keysize = sizeof(NameData); hash_ctl.entrysize = sizeof(graph_name_cache_entry); hash_ctl.match = name_hash_compare; /* * Please see the comment of hash_create() for the nelem value 16 here. * HASH_BLOBS flag is set because the key for this hash is fixed-size. */ graph_name_cache_hash = hash_create("ag_graph (name) cache", 16, &hash_ctl, HASH_ELEM | HASH_BLOBS | HASH_COMPARE); } static void create_graph_namespace_cache(void) { HASHCTL hash_ctl; MemSet(&hash_ctl, 0, sizeof(hash_ctl)); hash_ctl.keysize = sizeof(Oid); hash_ctl.entrysize = sizeof(graph_namespace_cache_entry); /* * Please see the comment of hash_create() for the nelem value 16 here. * HASH_BLOBS flag is set because the size of the key is sizeof(uint32). */ graph_namespace_cache_hash = hash_create("ag_graph (namespace) cache", 16, &hash_ctl, HASH_ELEM | HASH_BLOBS); } static void invalidate_graph_caches(Datum arg, int cache_id, uint32 hash_value) { Assert(graph_name_cache_hash); /* * Currently, all entries in the graph caches are flushed because * hash_value is for an entry in NAMESPACEOID cache. Since the caches * are not currently used in performance-critical paths, this seems OK. */ flush_graph_name_cache(); flush_graph_namespace_cache(); } static void flush_graph_name_cache(void) { HASH_SEQ_STATUS hash_seq; hash_seq_init(&hash_seq, graph_name_cache_hash); for (;;) { graph_name_cache_entry *entry; void *removed; entry = hash_seq_search(&hash_seq); if (!entry) { break; } removed = hash_search(graph_name_cache_hash, &entry->name, HASH_REMOVE, NULL); if (!removed) { ereport(ERROR, (errmsg_internal("graph (name) cache corrupted"))); } } } static void flush_graph_namespace_cache(void) { HASH_SEQ_STATUS hash_seq; hash_seq_init(&hash_seq, graph_namespace_cache_hash); for (;;) { graph_namespace_cache_entry *entry; void *removed; entry = hash_seq_search(&hash_seq); if (!entry) { break; } removed = hash_search(graph_namespace_cache_hash, &entry->namespace, HASH_REMOVE, NULL); if (!removed) { ereport(ERROR, (errmsg_internal("graph (namespace) cache corrupted"))); } } } graph_cache_data *search_graph_name_cache(const char *name) { NameData name_key; graph_name_cache_entry *entry; Assert(name); initialize_caches(); namestrcpy(&name_key, name); entry = hash_search(graph_name_cache_hash, &name_key, HASH_FIND, NULL); if (entry) { return &entry->data; } return search_graph_name_cache_miss(&name_key); } static graph_cache_data *search_graph_name_cache_miss(Name name) { ScanKeyData scan_keys[1]; Relation ag_graph; SysScanDesc scan_desc; HeapTuple tuple; bool found; graph_name_cache_entry *entry; memcpy(scan_keys, graph_name_scan_keys, sizeof(graph_name_scan_keys)); scan_keys[0].sk_argument = NameGetDatum(name); /* * Calling table_open() might call AcceptInvalidationMessage() and that * might flush the graph caches. This is OK because this function is called * when the desired entry is not in the cache. */ ag_graph = table_open(ag_graph_relation_id(), AccessShareLock); scan_desc = systable_beginscan(ag_graph, ag_graph_name_index_id(), true, NULL, 1, scan_keys); // don't need to loop over scan_desc because ag_graph_name_index is UNIQUE tuple = systable_getnext(scan_desc); if (!HeapTupleIsValid(tuple)) { systable_endscan(scan_desc); table_close(ag_graph, AccessShareLock); return NULL; } // get a new entry entry = hash_search(graph_name_cache_hash, name, HASH_ENTER, &found); Assert(!found); // no concurrent update on graph_name_cache_hash // fill the new entry with the retrieved tuple fill_graph_cache_data(&entry->data, tuple, RelationGetDescr(ag_graph)); systable_endscan(scan_desc); table_close(ag_graph, AccessShareLock); return &entry->data; } graph_cache_data *search_graph_namespace_cache(Oid namespace) { graph_namespace_cache_entry *entry; initialize_caches(); entry = hash_search(graph_namespace_cache_hash, &namespace, HASH_FIND, NULL); if (entry) { return &entry->data; } return search_graph_namespace_cache_miss(namespace); } static graph_cache_data *search_graph_namespace_cache_miss(Oid namespace) { ScanKeyData scan_keys[1]; Relation ag_graph; SysScanDesc scan_desc; HeapTuple tuple; bool found; graph_namespace_cache_entry *entry; memcpy(scan_keys, graph_namespace_scan_keys, sizeof(graph_namespace_scan_keys)); scan_keys[0].sk_argument = ObjectIdGetDatum(namespace); /* * Calling table_open() might call AcceptInvalidationMessage() and that * might flush the graph caches. This is OK because this function is called * when the desired entry is not in the cache. */ ag_graph = table_open(ag_graph_relation_id(), AccessShareLock); scan_desc = systable_beginscan(ag_graph, ag_graph_namespace_index_id(), true, NULL, 1, scan_keys); // don't need to loop over scan_desc because ag_graph_namespace_index is // UNIQUE tuple = systable_getnext(scan_desc); if (!HeapTupleIsValid(tuple)) { systable_endscan(scan_desc); table_close(ag_graph, AccessShareLock); return NULL; } // get a new entry entry = hash_search(graph_namespace_cache_hash, &namespace, HASH_ENTER, &found); Assert(!found); // no concurrent update on graph_namespace_cache_hash // fill the new entry with the retrieved tuple fill_graph_cache_data(&entry->data, tuple, RelationGetDescr(ag_graph)); systable_endscan(scan_desc); table_close(ag_graph, AccessShareLock); return &entry->data; } static void fill_graph_cache_data(graph_cache_data *cache_data, HeapTuple tuple, TupleDesc tuple_desc) { bool is_null; Datum value; Name name; // ag_graph.id value = heap_getattr(tuple, Anum_ag_graph_oid, tuple_desc, &is_null); Assert(!is_null); cache_data->oid = DatumGetObjectId(value); // ag_graph.name value = heap_getattr(tuple, Anum_ag_graph_name, tuple_desc, &is_null); Assert(!is_null); name = DatumGetName(value); Assert(name != NULL); namestrcpy(&cache_data->name, name->data); // ag_graph.namespace value = heap_getattr(tuple, Anum_ag_graph_namespace, tuple_desc, &is_null); Assert(!is_null); cache_data->namespace = DatumGetObjectId(value); } static void initialize_label_caches(void) { // ag_label.name, ag_label.graph ag_cache_scan_key_init(&label_name_graph_scan_keys[0], Anum_ag_label_name, F_NAMEEQ); ag_cache_scan_key_init(&label_name_graph_scan_keys[1], Anum_ag_label_graph, F_INT4EQ); // ag_label.graph, ag_label.id ag_cache_scan_key_init(&label_graph_oid_scan_keys[0], Anum_ag_label_graph, F_INT4EQ); ag_cache_scan_key_init(&label_graph_oid_scan_keys[1], Anum_ag_label_id, F_INT4EQ); // ag_label.relation ag_cache_scan_key_init(&label_relation_scan_keys[0], Anum_ag_label_relation, F_OIDEQ); // ag_label.seq_name, ag_label.graph ag_cache_scan_key_init(&label_seq_name_graph_scan_keys[0], Anum_ag_label_seq_name, F_NAMEEQ); ag_cache_scan_key_init(&label_seq_name_graph_scan_keys[1], Anum_ag_label_graph, F_OIDEQ); // ag_label.seq_name, ag_label.graph ag_cache_scan_key_init(&label_seq_name_graph_scan_keys[0], Anum_ag_label_seq_name, F_NAMEEQ); ag_cache_scan_key_init(&label_seq_name_graph_scan_keys[1], Anum_ag_label_graph, F_OIDEQ); // ag_label.seq_name, ag_label.graph ag_cache_scan_key_init(&label_seq_name_graph_scan_keys[0], Anum_ag_label_seq_name, F_NAMEEQ); ag_cache_scan_key_init(&label_seq_name_graph_scan_keys[1], Anum_ag_label_graph, F_OIDEQ); create_label_caches(); /* * A label is backed by the bound relation. So, register the invalidation * logic of the label caches for invalidation events of relation cache. */ CacheRegisterRelcacheCallback(invalidate_label_caches, (Datum)0); } static void create_label_caches(void) { /* * All the hash tables are created using their dedicated memory contexts * which are under TopMemoryContext. */ create_label_name_graph_cache(); create_label_graph_oid_cache(); create_label_relation_cache(); create_label_seq_name_graph_cache(); } static void create_label_name_graph_cache(void) { HASHCTL hash_ctl; MemSet(&hash_ctl, 0, sizeof(hash_ctl)); hash_ctl.keysize = sizeof(label_name_graph_cache_key); hash_ctl.entrysize = sizeof(label_name_graph_cache_entry); /* * Please see the comment of hash_create() for the nelem value 16 here. * HASH_BLOBS flag is set because the key for this hash is fixed-size. */ label_name_graph_cache_hash = hash_create("ag_label (name, graph) cache", 16, &hash_ctl, HASH_ELEM | HASH_BLOBS); } static void create_label_graph_oid_cache(void) { HASHCTL hash_ctl; MemSet(&hash_ctl, 0, sizeof(hash_ctl)); hash_ctl.keysize = sizeof(label_graph_oid_cache_key); hash_ctl.entrysize = sizeof(label_graph_oid_cache_entry); /* * Please see the comment of hash_create() for the nelem value 16 here. * HASH_BLOBS flag is set because the key for this hash is fixed-size. */ label_graph_oid_cache_hash = hash_create("ag_label (graph, id) cache", 16, &hash_ctl, HASH_ELEM | HASH_BLOBS); } static void create_label_relation_cache(void) { HASHCTL hash_ctl; MemSet(&hash_ctl, 0, sizeof(hash_ctl)); hash_ctl.keysize = sizeof(Oid); hash_ctl.entrysize = sizeof(label_relation_cache_entry); /* * Please see the comment of hash_create() for the nelem value 16 here. * HASH_BLOBS flag is set because the size of the key is sizeof(uint32). */ label_relation_cache_hash = hash_create("ag_label (relation) cache", 16, &hash_ctl, HASH_ELEM | HASH_BLOBS); } static void create_label_seq_name_graph_cache(void) { HASHCTL hash_ctl; MemSet(&hash_ctl, 0, sizeof(hash_ctl)); hash_ctl.keysize = sizeof(label_seq_name_graph_cache_key); hash_ctl.entrysize = sizeof(label_seq_name_graph_cache_entry); /* * Please see the comment of hash_create() for the nelem value 16 here. * HASH_BLOBS flag is set because the key for this hash is fixed-size. */ label_seq_name_graph_cache_hash = hash_create("ag_label (seq_name, graph) cache", 16, &hash_ctl, HASH_ELEM | HASH_BLOBS); } static void invalidate_label_caches(Datum arg, Oid relid) { Assert(label_name_graph_cache_hash); Assert(label_seq_name_graph_cache_hash); if (OidIsValid(relid)) { invalidate_label_name_graph_cache(relid); invalidate_label_graph_oid_cache(relid); invalidate_label_relation_cache(relid); invalidate_label_seq_name_graph_cache(relid); } else { flush_label_name_graph_cache(); flush_label_graph_oid_cache(); flush_label_relation_cache(); flush_label_seq_name_graph_cache(); } } static void invalidate_label_name_graph_cache(Oid relid) { HASH_SEQ_STATUS hash_seq; hash_seq_init(&hash_seq, label_name_graph_cache_hash); for (;;) { label_name_graph_cache_entry *entry; void *removed; entry = hash_seq_search(&hash_seq); if (!entry) { break; } if (entry->data.relation != relid) { continue; } removed = hash_search(label_name_graph_cache_hash, &entry->key, HASH_REMOVE, NULL); hash_seq_term(&hash_seq); if (!removed) { ereport(ERROR, (errmsg_internal("label (name, graph) cache corrupted"))); } break; } } static void flush_label_name_graph_cache(void) { HASH_SEQ_STATUS hash_seq; hash_seq_init(&hash_seq, label_name_graph_cache_hash); for (;;) { label_name_graph_cache_entry *entry; void *removed; entry = hash_seq_search(&hash_seq); if (!entry) { break; } removed = hash_search(label_name_graph_cache_hash, &entry->key, HASH_REMOVE, NULL); if (!removed) { ereport(ERROR, (errmsg_internal("label (name, graph) cache corrupted"))); } } } static void invalidate_label_graph_oid_cache(Oid relid) { HASH_SEQ_STATUS hash_seq; hash_seq_init(&hash_seq, label_graph_oid_cache_hash); for (;;) { label_graph_oid_cache_entry *entry; void *removed; entry = hash_seq_search(&hash_seq); if (!entry) { break; } if (entry->data.relation != relid) { continue; } removed = hash_search(label_graph_oid_cache_hash, &entry->key, HASH_REMOVE, NULL); hash_seq_term(&hash_seq); if (!removed) { ereport(ERROR, (errmsg_internal("label (graph, id) cache corrupted"))); } break; } } static void flush_label_graph_oid_cache(void) { HASH_SEQ_STATUS hash_seq; hash_seq_init(&hash_seq, label_graph_oid_cache_hash); for (;;) { label_graph_oid_cache_entry *entry; void *removed; entry = hash_seq_search(&hash_seq); if (!entry) { break; } removed = hash_search(label_graph_oid_cache_hash, &entry->key, HASH_REMOVE, NULL); if (!removed) { ereport(ERROR, (errmsg_internal("label (graph, id) cache corrupted"))); } } } static void invalidate_label_relation_cache(Oid relid) { label_relation_cache_entry *entry; void *removed; entry = hash_search(label_relation_cache_hash, &relid, HASH_FIND, NULL); if (!entry) { return; } removed = hash_search(label_relation_cache_hash, &relid, HASH_REMOVE, NULL); if (!removed) { ereport(ERROR, (errmsg_internal("label (namespace) cache corrupted"))); } } static void flush_label_relation_cache(void) { HASH_SEQ_STATUS hash_seq; hash_seq_init(&hash_seq, label_relation_cache_hash); for (;;) { label_relation_cache_entry *entry; void *removed; entry = hash_seq_search(&hash_seq); if (!entry) { break; } removed = hash_search(label_relation_cache_hash, &entry->relation, HASH_REMOVE, NULL); if (!removed) { ereport(ERROR, (errmsg_internal("label (relation) cache corrupted"))); } } } static void invalidate_label_seq_name_graph_cache(Oid relid) { HASH_SEQ_STATUS hash_seq; hash_seq_init(&hash_seq, label_seq_name_graph_cache_hash); for (;;) { label_seq_name_graph_cache_entry *entry; void *removed; entry = hash_seq_search(&hash_seq); if (!entry) { break; } if (entry->data.relation != relid) { continue; } removed = hash_search(label_seq_name_graph_cache_hash, &entry->key, HASH_REMOVE, NULL); hash_seq_term(&hash_seq); if (!removed) { ereport(ERROR, (errmsg_internal("label (seq_name, graph) cache corrupted"))); } break; } } static void flush_label_seq_name_graph_cache(void) { HASH_SEQ_STATUS hash_seq; hash_seq_init(&hash_seq, label_seq_name_graph_cache_hash); for (;;) { label_seq_name_graph_cache_entry *entry; void *removed; entry = hash_seq_search(&hash_seq); if (!entry) { break; } removed = hash_search(label_seq_name_graph_cache_hash, &entry->key, HASH_REMOVE, NULL); if (!removed) { ereport(ERROR, (errmsg_internal("label (seq_name, graph) cache corrupted"))); } } } label_cache_data *search_label_name_graph_cache(const char *name, Oid graph) { NameData name_key; label_name_graph_cache_entry *entry; Assert(name); initialize_caches(); namestrcpy(&name_key, name); entry = label_name_graph_cache_hash_search(&name_key, graph, HASH_FIND, NULL); if (entry) { return &entry->data; } return search_label_name_graph_cache_miss(&name_key, graph); } static label_cache_data *search_label_name_graph_cache_miss(Name name, Oid graph) { ScanKeyData scan_keys[2]; Relation ag_label; SysScanDesc scan_desc; HeapTuple tuple; bool found; label_name_graph_cache_entry *entry; memcpy(scan_keys, label_name_graph_scan_keys, sizeof(label_name_graph_scan_keys)); scan_keys[0].sk_argument = NameGetDatum(name); scan_keys[1].sk_argument = ObjectIdGetDatum(graph); /* * Calling table_open() might call AcceptInvalidationMessage() and that * might invalidate the label caches. This is OK because this function is * called when the desired entry is not in the cache. */ ag_label = table_open(ag_label_relation_id(), AccessShareLock); scan_desc = systable_beginscan(ag_label, ag_label_name_graph_index_id(), true, NULL, 2, scan_keys); /* * don't need to loop over scan_desc because ag_label_name_graph_index is * UNIQUE */ tuple = systable_getnext(scan_desc); if (!HeapTupleIsValid(tuple)) { systable_endscan(scan_desc); table_close(ag_label, AccessShareLock); return NULL; } // get a new entry entry = label_name_graph_cache_hash_search(name, graph, HASH_ENTER, &found); Assert(!found); // no concurrent update on label_name_graph_cache_hash // fill the new entry with the retrieved tuple fill_label_cache_data(&entry->data, tuple, RelationGetDescr(ag_label)); systable_endscan(scan_desc); table_close(ag_label, AccessShareLock); return &entry->data; } static void *label_name_graph_cache_hash_search(Name name, Oid graph, HASHACTION action, bool *found) { label_name_graph_cache_key key; // initialize the hash key for label_name_graph_cache_hash namestrcpy(&key.name, name->data); key.graph = graph; return hash_search(label_name_graph_cache_hash, &key, action, found); } label_cache_data *search_label_graph_oid_cache(uint32 graph_oid, int32 id) { label_graph_oid_cache_entry *entry; Assert(label_id_is_valid(id)); initialize_caches(); entry = label_graph_oid_cache_hash_search(graph_oid, id, HASH_FIND, NULL); if (entry) { return &entry->data; } return search_label_graph_oid_cache_miss(graph_oid, id); } static label_cache_data *search_label_graph_oid_cache_miss(Oid graph, uint32 id) { ScanKeyData scan_keys[2]; Relation ag_label; SysScanDesc scan_desc; HeapTuple tuple; bool found; label_graph_oid_cache_entry *entry; memcpy(scan_keys, label_graph_oid_scan_keys, sizeof(label_graph_oid_scan_keys)); scan_keys[0].sk_argument = ObjectIdGetDatum(graph); scan_keys[1].sk_argument = Int32GetDatum(id); /* * Calling table_open() might call AcceptInvalidationMessage() and that * might invalidate the label caches. This is OK because this function is * called when the desired entry is not in the cache. */ ag_label = table_open(ag_label_relation_id(), AccessShareLock); scan_desc = systable_beginscan(ag_label, ag_label_graph_oid_index_id(), true, NULL, 2, scan_keys); /* * don't need to loop over scan_desc because ag_label_graph_oid_index is * UNIQUE */ tuple = systable_getnext(scan_desc); if (!HeapTupleIsValid(tuple)) { systable_endscan(scan_desc); table_close(ag_label, AccessShareLock); return NULL; } // get a new entry entry = label_graph_oid_cache_hash_search(graph, id, HASH_ENTER, &found); Assert(!found); // no concurrent update on label_graph_oid_cache_hash // fill the new entry with the retrieved tuple fill_label_cache_data(&entry->data, tuple, RelationGetDescr(ag_label)); systable_endscan(scan_desc); table_close(ag_label, AccessShareLock); return &entry->data; } static void *label_graph_oid_cache_hash_search(uint32 graph, int32 id, HASHACTION action, bool *found) { label_graph_oid_cache_key key; // initialize the hash key for label_graph_oid_cache_hash key.graph = graph; key.id = id; return hash_search(label_graph_oid_cache_hash, &key, action, found); } label_cache_data *search_label_relation_cache(Oid relation) { label_relation_cache_entry *entry; initialize_caches(); entry = hash_search(label_relation_cache_hash, &relation, HASH_FIND, NULL); if (entry) { return &entry->data; } return search_label_relation_cache_miss(relation); } static label_cache_data *search_label_relation_cache_miss(Oid relation) { ScanKeyData scan_keys[1]; Relation ag_label; SysScanDesc scan_desc; HeapTuple tuple; bool found; label_cache_data *entry; memcpy(scan_keys, label_relation_scan_keys, sizeof(label_relation_scan_keys)); scan_keys[0].sk_argument = ObjectIdGetDatum(relation); /* * Calling table_open() might call AcceptInvalidationMessage() and that * might invalidate the label caches. This is OK because this function is * called when the desired entry is not in the cache. */ ag_label = table_open(ag_label_relation_id(), AccessShareLock); scan_desc = systable_beginscan(ag_label, ag_label_relation_index_id(), true, NULL, 1, scan_keys); // don't need to loop over scan_desc because ag_label_relation_index is // UNIQUE tuple = systable_getnext(scan_desc); if (!HeapTupleIsValid(tuple)) { systable_endscan(scan_desc); table_close(ag_label, AccessShareLock); return NULL; } // get a new entry entry = hash_search(label_relation_cache_hash, &relation, HASH_ENTER, &found); Assert(!found); // no concurrent update on label_relation_cache_hash // fill the new entry with the retrieved tuple fill_label_cache_data(entry, tuple, RelationGetDescr(ag_label)); systable_endscan(scan_desc); table_close(ag_label, AccessShareLock); return entry; } label_cache_data *search_label_seq_name_graph_cache(const char *name, Oid graph) { NameData name_key; label_seq_name_graph_cache_entry *entry; Assert(name); Assert(OidIsValid(graph)); initialize_caches(); namestrcpy(&name_key, name); entry = label_seq_name_graph_cache_hash_search(&name_key, graph, HASH_FIND, NULL); if (entry) { return &entry->data; } return search_label_seq_name_graph_cache_miss(&name_key, graph); } static label_cache_data *search_label_seq_name_graph_cache_miss(Name name, Oid graph) { ScanKeyData scan_keys[2]; Relation ag_label; SysScanDesc scan_desc; HeapTuple tuple; bool found; label_seq_name_graph_cache_entry *entry; memcpy(scan_keys, label_seq_name_graph_scan_keys, sizeof(label_seq_name_graph_scan_keys)); scan_keys[0].sk_argument = NameGetDatum(name); scan_keys[1].sk_argument = ObjectIdGetDatum(graph); /* * Calling table_open() might call AcceptInvalidationMessage() and that * might invalidate the label caches. This is OK because this function is * called when the desired entry is not in the cache. */ ag_label = table_open(ag_label_relation_id(), AccessShareLock); scan_desc = systable_beginscan(ag_label, ag_label_seq_name_graph_index_id(), true, NULL, 2, scan_keys); /* * don't need to loop over scan_desc because ag_label_seq_name_graph_index is * UNIQUE */ tuple = systable_getnext(scan_desc); if (!HeapTupleIsValid(tuple)) { systable_endscan(scan_desc); table_close(ag_label, AccessShareLock); return NULL; } // get a new entry entry = label_seq_name_graph_cache_hash_search(name, graph, HASH_ENTER, &found); Assert(!found); // no concurrent update on label_seq_name_graph_cache_hash // fill the new entry with the retrieved tuple fill_label_cache_data(&entry->data, tuple, RelationGetDescr(ag_label)); systable_endscan(scan_desc); table_close(ag_label, AccessShareLock); return &entry->data; } static void *label_seq_name_graph_cache_hash_search(Name name, Oid graph, HASHACTION action, bool *found) { label_seq_name_graph_cache_key key; // initialize the hash key for label_seq_name_graph_cache_hash namestrcpy(&key.name, name->data); key.graph = graph; return hash_search(label_seq_name_graph_cache_hash, &key, action, found); } static void fill_label_cache_data(label_cache_data *cache_data, HeapTuple tuple, TupleDesc tuple_desc) { bool is_null; Datum value; Name name; // ag_label.name value = heap_getattr(tuple, Anum_ag_label_name, tuple_desc, &is_null); Assert(!is_null); name = DatumGetName(value); Assert(name != NULL); namestrcpy(&cache_data->name, name->data); // ag_label.graph value = heap_getattr(tuple, Anum_ag_label_graph, tuple_desc, &is_null); Assert(!is_null); cache_data->graph = DatumGetObjectId(value); // ag_label.id value = heap_getattr(tuple, Anum_ag_label_id, tuple_desc, &is_null); Assert(!is_null); cache_data->id = DatumGetInt32(value); // ag_label.kind value = heap_getattr(tuple, Anum_ag_label_kind, tuple_desc, &is_null); Assert(!is_null); cache_data->kind = DatumGetChar(value); // ag_label.relation value = heap_getattr(tuple, Anum_ag_label_relation, tuple_desc, &is_null); Assert(!is_null); cache_data->relation = DatumGetObjectId(value); // ag_label.seq_name value = heap_getattr(tuple, Anum_ag_label_seq_name, tuple_desc, &is_null); Assert(!is_null); namestrcpy(&cache_data->seq_name, DatumGetName(value)->data); } age-PG16-v1.5.0-rc0/src/backend/utils/graph_generation.c000066400000000000000000000256421454606241200226070ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "access/genam.h" #include "commands/graph_commands.h" #include "utils/load/age_load.h" int64 get_nextval_internal(graph_cache_data* graph_cache, label_cache_data* label_cache); /* * Auxiliary function to get the next internal value in the graph, * so a new object (node or edge) graph id can be composed. */ int64 get_nextval_internal(graph_cache_data* graph_cache, label_cache_data* label_cache) { Oid obj_seq_id; char* label_seq_name_str; label_seq_name_str = NameStr(label_cache->seq_name); obj_seq_id = get_relname_relid(label_seq_name_str, graph_cache->namespace); return nextval_internal(obj_seq_id, true); } PG_FUNCTION_INFO_V1(create_complete_graph); /* * SELECT * FROM ag_catalog.create_complete_graph('graph_name',no_of_nodes, 'edge_label', 'node_label'=NULL); */ Datum create_complete_graph(PG_FUNCTION_ARGS) { Oid graph_oid; Name graph_name; int64 no_vertices; int64 i,j,vid = 1, eid, start_vid, end_vid; Name vtx_label_name = NULL; Name edge_label_name; int32 vtx_label_id; int32 edge_label_id; agtype *props = NULL; graphid object_graph_id; graphid start_vertex_graph_id; graphid end_vertex_graph_id; Oid vtx_seq_id; Oid edge_seq_id; char* graph_name_str; char* vtx_name_str; char* edge_name_str; graph_cache_data *graph_cache; label_cache_data *vertex_cache; label_cache_data *edge_cache; Oid nsp_id; Name vtx_seq_name; char *vtx_seq_name_str; Name edge_seq_name; char *edge_seq_name_str; int64 lid; if (PG_ARGISNULL(0)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("graph name can not be NULL"))); } if (PG_ARGISNULL(1)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("number of nodes can not be NULL"))); } if (PG_ARGISNULL(2)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("edge label can not be NULL"))); } graph_name = PG_GETARG_NAME(0); no_vertices = (int64) PG_GETARG_INT64(1); edge_label_name = PG_GETARG_NAME(2); graph_name_str = NameStr(*graph_name); vtx_name_str = AG_DEFAULT_LABEL_VERTEX; edge_name_str = NameStr(*edge_label_name); if (!PG_ARGISNULL(3)) { vtx_label_name = PG_GETARG_NAME(3); vtx_name_str = NameStr(*vtx_label_name); // Check if vertex and edge label are same if (strcmp(vtx_name_str, edge_name_str) == 0) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("vertex and edge label can not be same"))); } } if (!graph_exists(graph_name_str)) { DirectFunctionCall1(create_graph, CStringGetDatum(graph_name->data)); } graph_oid = get_graph_oid(graph_name_str); if (!PG_ARGISNULL(3)) { // Check if label with the input name already exists if (!label_exists(vtx_name_str, graph_oid)) { DirectFunctionCall2(create_vlabel, CStringGetDatum(graph_name->data), CStringGetDatum(vtx_label_name->data)); } } if (!label_exists(edge_name_str, graph_oid)) { DirectFunctionCall2(create_elabel, CStringGetDatum(graph_name->data), CStringGetDatum(edge_label_name->data)); } vtx_label_id = get_label_id(vtx_name_str, graph_oid); edge_label_id = get_label_id(edge_name_str, graph_oid); graph_cache = search_graph_name_cache(graph_name_str); vertex_cache = search_label_name_graph_cache(vtx_name_str, graph_oid); edge_cache = search_label_name_graph_cache(edge_name_str, graph_oid); nsp_id = graph_cache->namespace; vtx_seq_name = &(vertex_cache->seq_name); vtx_seq_name_str = NameStr(*vtx_seq_name); edge_seq_name = &(edge_cache->seq_name); edge_seq_name_str = NameStr(*edge_seq_name); vtx_seq_id = get_relname_relid(vtx_seq_name_str, nsp_id); edge_seq_id = get_relname_relid(edge_seq_name_str, nsp_id); props = create_empty_agtype(); /* Creating vertices*/ for (i=(int64)1; i<=no_vertices; i++) { vid = nextval_internal(vtx_seq_id, true); object_graph_id = make_graphid(vtx_label_id, vid); insert_vertex_simple(graph_oid, vtx_name_str, object_graph_id, props); } lid = vid; /* Creating edges*/ for (i = 1; i<=no_vertices-1; i++) { start_vid = lid-no_vertices+i; for(j=i+1; j<=no_vertices; j++) { end_vid = lid-no_vertices+j; eid = nextval_internal(edge_seq_id, true); object_graph_id = make_graphid(edge_label_id, eid); start_vertex_graph_id = make_graphid(vtx_label_id, start_vid); end_vertex_graph_id = make_graphid(vtx_label_id, end_vid); insert_edge_simple(graph_oid, edge_name_str, object_graph_id, start_vertex_graph_id, end_vertex_graph_id, props); } } PG_RETURN_VOID(); } PG_FUNCTION_INFO_V1(age_create_barbell_graph); /* * The barbell graph is two complete graphs connected by a bridge path * Syntax: * ag_catalog.age_create_barbell_graph(graph_name Name, * m int, * n int, * vertex_label_name Name DEFAULT = NULL, * vertex_properties agtype DEFAULT = NULL, * edge_label_name Name DEFAULT = NULL, * edge_properties agtype DEFAULT = NULL) * Input: * * graph_name - Name of the graph to be created. * m - number of vertices in one complete graph. * n - number of vertices in the bridge path. * vertex_label_name - Name of the label to assign each vertex to. * vertex_properties - Property values to assign each vertex. Default is NULL * edge_label_name - Name of the label to assign each edge to. * edge_properties - Property values to assign each edge. Default is NULL * * https://en.wikipedia.org/wiki/Barbell_graph */ Datum age_create_barbell_graph(PG_FUNCTION_ARGS) { FunctionCallInfo arguments; Oid graph_oid; Name graph_name; char* graph_name_str; int64 start_node_index, end_node_index, nextval; Name node_label_name = NULL; int32 node_label_id; char* node_label_str; Name edge_label_name; int32 edge_label_id; char* edge_label_str; graphid object_graph_id; graphid start_node_graph_id; graphid end_node_graph_id; graph_cache_data* graph_cache; label_cache_data* edge_cache; agtype* properties = NULL; arguments = fcinfo; // Checking for possible NULL arguments // Name graph_name if (PG_ARGISNULL(0)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Graph name cannot be NULL"))); } graph_name = PG_GETARG_NAME(0); graph_name_str = NameStr(*graph_name); // int graph size (number of nodes in each complete graph) if (PG_ARGISNULL(1) && PG_GETARG_INT32(1) < 3) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Graph size cannot be NULL or lower than 3"))); } /* * int64 bridge_size: currently only stays at zero. * to do: implement bridge with variable number of nodes. */ if (PG_ARGISNULL(2) || PG_GETARG_INT32(2) < 0 ) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Bridge size cannot be NULL or lower than 0"))); } // node label: if null, gets default label, which is "_ag_label_vertex" if (PG_ARGISNULL(3)) { namestrcpy(node_label_name, AG_DEFAULT_LABEL_VERTEX); } else { node_label_name = PG_GETARG_NAME(3); } node_label_str = NameStr(*node_label_name); /* Name edge_label */ if (PG_ARGISNULL(5)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("edge label can not be NULL"))); } edge_label_name = PG_GETARG_NAME(5); edge_label_str = NameStr(*edge_label_name); // create two separate complete graphs DirectFunctionCall4(create_complete_graph, arguments->args[0].value, arguments->args[1].value, arguments->args[5].value, arguments->args[3].value); DirectFunctionCall4(create_complete_graph, arguments->args[0].value, arguments->args[1].value, arguments->args[5].value, arguments->args[3].value); graph_oid = get_graph_oid(graph_name_str); node_label_id = get_label_id(node_label_str, graph_oid); edge_label_id = get_label_id(edge_label_str, graph_oid); /* * Fetching caches to get next values for graph id's, and access nodes * to be connected with edges. */ graph_cache = search_graph_name_cache(graph_name_str); edge_cache = search_label_name_graph_cache(edge_label_str,graph_oid); // connect a node from each graph start_node_index = 1; // first created node, from the first complete graph end_node_index = arguments->args[1].value*2; // last created node, second graph // next index to be assigned to a node or edge nextval = get_nextval_internal(graph_cache, edge_cache); // build the graph id's of the edge to be created object_graph_id = make_graphid(edge_label_id, nextval); start_node_graph_id = make_graphid(node_label_id, start_node_index); end_node_graph_id = make_graphid(node_label_id, end_node_index); properties = create_empty_agtype(); // connect two nodes insert_edge_simple(graph_oid, edge_label_str, object_graph_id, start_node_graph_id, end_node_graph_id, properties); PG_RETURN_VOID(); } age-PG16-v1.5.0-rc0/src/backend/utils/load/000077500000000000000000000000001454606241200200355ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/src/backend/utils/load/ag_load_edges.c000066400000000000000000000132711454606241200227420ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "utils/load/ag_load_edges.h" #include "utils/load/age_load.h" #include "utils/load/csv.h" void edge_field_cb(void *field, size_t field_len, void *data) { csv_edge_reader *cr = (csv_edge_reader*)data; if (cr->error) { cr->error = 1; ereport(NOTICE,(errmsg("There is some unknown error"))); } // check for space to store this field if (cr->cur_field == cr->alloc) { cr->alloc *= 2; cr->fields = realloc(cr->fields, sizeof(char *) * cr->alloc); cr->fields_len = realloc(cr->header, sizeof(size_t *) * cr->alloc); if (cr->fields == NULL) { cr->error = 1; ereport(ERROR, (errmsg("field_cb: failed to reallocate %zu bytes\n", sizeof(char *) * cr->alloc))); } } cr->fields_len[cr->cur_field] = field_len; cr->curr_row_length += field_len; cr->fields[cr->cur_field] = strndup((char*)field, field_len); cr->cur_field += 1; } // Parser calls this function when it detects end of a row void edge_row_cb(int delim __attribute__((unused)), void *data) { csv_edge_reader *cr = (csv_edge_reader*)data; size_t i, n_fields; int64 start_id_int; graphid start_vertex_graph_id; int start_vertex_type_id; int64 end_id_int; graphid end_vertex_graph_id; int end_vertex_type_id; graphid object_graph_id; agtype* props = NULL; n_fields = cr->cur_field; if (cr->row == 0) { cr->header_num = cr->cur_field; cr->header_row_length = cr->curr_row_length; cr->header_len = (size_t* )malloc(sizeof(size_t *) * cr->cur_field); cr->header = malloc((sizeof (char*) * cr->cur_field)); for (i = 0; icur_field; i++) { cr->header_len[i] = cr->fields_len[i]; cr->header[i] = strndup(cr->fields[i], cr->header_len[i]); } } else { object_graph_id = make_graphid(cr->object_id, (int64)cr->row); start_id_int = strtol(cr->fields[0], NULL, 10); start_vertex_type_id = get_label_id(cr->fields[1], cr->graph_oid); end_id_int = strtol(cr->fields[2], NULL, 10); end_vertex_type_id = get_label_id(cr->fields[3], cr->graph_oid); start_vertex_graph_id = make_graphid(start_vertex_type_id, start_id_int); end_vertex_graph_id = make_graphid(end_vertex_type_id, end_id_int); props = create_agtype_from_list_i(cr->header, cr->fields, n_fields, 3); insert_edge_simple(cr->graph_oid, cr->object_name, object_graph_id, start_vertex_graph_id, end_vertex_graph_id, props); pfree(props); } for (i = 0; i < n_fields; ++i) { free(cr->fields[i]); } if (cr->error) { ereport(NOTICE,(errmsg("THere is some error"))); } cr->cur_field = 0; cr->curr_row_length = 0; cr->row += 1; } static int is_space(unsigned char c) { if (c == CSV_SPACE || c == CSV_TAB) { return 1; } else { return 0; } } static int is_term(unsigned char c) { if (c == CSV_CR || c == CSV_LF) { return 1; } else { return 0; } } int create_edges_from_csv_file(char *file_path, char *graph_name, Oid graph_oid, char *object_name, int object_id ) { FILE *fp; struct csv_parser p; char buf[1024]; size_t bytes_read; unsigned char options = 0; csv_edge_reader cr; if (csv_init(&p, options) != 0) { ereport(ERROR, (errmsg("Failed to initialize csv parser\n"))); } csv_set_space_func(&p, is_space); csv_set_term_func(&p, is_term); fp = fopen(file_path, "rb"); if (!fp) { ereport(ERROR, (errmsg("Failed to open %s\n", file_path))); } memset((void*)&cr, 0, sizeof(csv_edge_reader)); cr.alloc = 128; cr.fields = malloc(sizeof(char *) * cr.alloc); cr.fields_len = malloc(sizeof(size_t *) * cr.alloc); cr.header_row_length = 0; cr.curr_row_length = 0; cr.graph_name = graph_name; cr.graph_oid = graph_oid; cr.object_name = object_name; cr.object_id = object_id; while ((bytes_read=fread(buf, 1, 1024, fp)) > 0) { if (csv_parse(&p, buf, bytes_read, edge_field_cb, edge_row_cb, &cr) != bytes_read) { ereport(ERROR, (errmsg("Error while parsing file: %s\n", csv_strerror(csv_error(&p))))); } } csv_fini(&p, edge_field_cb, edge_row_cb, &cr); if (ferror(fp)) { ereport(ERROR, (errmsg("Error while reading file %s\n", file_path))); } fclose(fp); free(cr.fields); csv_free(&p); return EXIT_SUCCESS; } age-PG16-v1.5.0-rc0/src/backend/utils/load/ag_load_labels.c000066400000000000000000000125511454606241200231150ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "utils/load/ag_load_labels.h" #include "utils/load/age_load.h" #include "utils/load/csv.h" void vertex_field_cb(void *field, size_t field_len, void *data) { csv_vertex_reader *cr = (csv_vertex_reader *) data; if (cr->error) { cr->error = 1; ereport(NOTICE,(errmsg("There is some unknown error"))); } // check for space to store this field if (cr->cur_field == cr->alloc) { cr->alloc *= 2; cr->fields = realloc(cr->fields, sizeof(char *) * cr->alloc); cr->fields_len = realloc(cr->header, sizeof(size_t *) * cr->alloc); if (cr->fields == NULL) { cr->error = 1; ereport(ERROR, (errmsg("field_cb: failed to reallocate %zu bytes\n", sizeof(char *) * cr->alloc))); } } cr->fields_len[cr->cur_field] = field_len; cr->curr_row_length += field_len; cr->fields[cr->cur_field] = strndup((char *) field, field_len); cr->cur_field += 1; } void vertex_row_cb(int delim __attribute__((unused)), void *data) { csv_vertex_reader *cr = (csv_vertex_reader*)data; agtype *props = NULL; size_t i, n_fields; graphid object_graph_id; int64 label_id_int; n_fields = cr->cur_field; if (cr->row == 0) { cr->header_num = cr->cur_field; cr->header_row_length = cr->curr_row_length; cr->header_len = (size_t* )malloc(sizeof(size_t *) * cr->cur_field); cr->header = malloc((sizeof (char*) * cr->cur_field)); for (i = 0; icur_field; i++) { cr->header_len[i] = cr->fields_len[i]; cr->header[i] = strndup(cr->fields[i], cr->header_len[i]); } } else { if (cr->id_field_exists) { label_id_int = strtol(cr->fields[0], NULL, 10); } else { label_id_int = (int64)cr->row; } object_graph_id = make_graphid(cr->object_id, label_id_int); props = create_agtype_from_list(cr->header, cr->fields, n_fields, label_id_int); insert_vertex_simple(cr->graph_oid, cr->object_name, object_graph_id, props); pfree(props); } for (i = 0; i < n_fields; ++i) { free(cr->fields[i]); } if (cr->error) { ereport(NOTICE,(errmsg("THere is some error"))); } cr->cur_field = 0; cr->curr_row_length = 0; cr->row += 1; } static int is_space(unsigned char c) { if (c == CSV_SPACE || c == CSV_TAB) { return 1; } else { return 0; } } static int is_term(unsigned char c) { if (c == CSV_CR || c == CSV_LF) { return 1; } else { return 0; } } int create_labels_from_csv_file(char *file_path, char *graph_name, Oid graph_oid, char *object_name, int object_id, bool id_field_exists) { FILE *fp; struct csv_parser p; char buf[1024]; size_t bytes_read; unsigned char options = 0; csv_vertex_reader cr; if (csv_init(&p, options) != 0) { ereport(ERROR, (errmsg("Failed to initialize csv parser\n"))); } csv_set_space_func(&p, is_space); csv_set_term_func(&p, is_term); fp = fopen(file_path, "rb"); if (!fp) { ereport(ERROR, (errmsg("Failed to open %s\n", file_path))); } memset((void*)&cr, 0, sizeof(csv_vertex_reader)); cr.alloc = 2048; cr.fields = malloc(sizeof(char *) * cr.alloc); cr.fields_len = malloc(sizeof(size_t *) * cr.alloc); cr.header_row_length = 0; cr.curr_row_length = 0; cr.graph_name = graph_name; cr.graph_oid = graph_oid; cr.object_name = object_name; cr.object_id = object_id; cr.id_field_exists = id_field_exists; while ((bytes_read=fread(buf, 1, 1024, fp)) > 0) { if (csv_parse(&p, buf, bytes_read, vertex_field_cb, vertex_row_cb, &cr) != bytes_read) { ereport(ERROR, (errmsg("Error while parsing file: %s\n", csv_strerror(csv_error(&p))))); } } csv_fini(&p, vertex_field_cb, vertex_row_cb, &cr); if (ferror(fp)) { ereport(ERROR, (errmsg("Error while reading file %s\n", file_path))); } fclose(fp); free(cr.fields); csv_free(&p); return EXIT_SUCCESS; } age-PG16-v1.5.0-rc0/src/backend/utils/load/age_load.c000066400000000000000000000220551454606241200217400ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "utils/load/ag_load_edges.h" #include "utils/load/ag_load_labels.h" #include "utils/load/age_load.h" agtype *create_empty_agtype(void) { agtype* out; agtype_in_state result; memset(&result, 0, sizeof(agtype_in_state)); result.res = push_agtype_value(&result.parse_state, WAGT_BEGIN_OBJECT, NULL); result.res = push_agtype_value(&result.parse_state, WAGT_END_OBJECT, NULL); out = agtype_value_to_agtype(result.res); pfree_agtype_in_state(&result); return out; } agtype *create_agtype_from_list(char **header, char **fields, size_t fields_len, int64 vertex_id) { agtype* out; agtype_value* key_agtype; agtype_value* value_agtype; agtype_in_state result; int i; memset(&result, 0, sizeof(agtype_in_state)); result.res = push_agtype_value(&result.parse_state, WAGT_BEGIN_OBJECT, NULL); key_agtype = string_to_agtype_value("__id__"); result.res = push_agtype_value(&result.parse_state, WAGT_KEY, key_agtype); value_agtype = integer_to_agtype_value(vertex_id); result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, value_agtype); pfree_agtype_value(key_agtype); pfree_agtype_value(value_agtype); for (i = 0; i #if __STDC_VERSION__ >= 199901L # include #else # define SIZE_MAX ((size_t)-1) /* C89 doesn't have stdint.h or SIZE_MAX */ #endif #include "utils/load/csv.h" #define VERSION "3.0.3" #define ROW_NOT_BEGUN 0 #define FIELD_NOT_BEGUN 1 #define FIELD_BEGUN 2 #define FIELD_MIGHT_HAVE_ENDED 3 /* Explanation of states ROW_NOT_BEGUN There have not been any fields encountered for this row FIELD_NOT_BEGUN There have been fields but we are currently not in one FIELD_BEGUN We are in a field FIELD_MIGHT_HAVE_ENDED We encountered a double quote inside a quoted field, the field is either ended or the quote is literal */ #define MEM_BLK_SIZE 128 #define SUBMIT_FIELD(p) \ do { \ if (!quoted) \ entry_pos -= spaces; \ if (p->options & CSV_APPEND_NULL) \ ((p)->entry_buf[entry_pos]) = '\0'; \ if (cb1 && (p->options & CSV_EMPTY_IS_NULL) && !quoted && entry_pos == 0) \ cb1(NULL, entry_pos, data); \ else if (cb1) \ cb1(p->entry_buf, entry_pos, data); \ pstate = FIELD_NOT_BEGUN; \ entry_pos = quoted = spaces = 0; \ } while (0) #define SUBMIT_ROW(p, c) \ do { \ if (cb2) \ cb2(c, data); \ pstate = ROW_NOT_BEGUN; \ entry_pos = quoted = spaces = 0; \ } while (0) #define SUBMIT_CHAR(p, c) ((p)->entry_buf[entry_pos++] = (c)) static const char *csv_errors[] = {"success", "error parsing data while strict checking enabled", "memory exhausted while increasing buffer size", "data size too large", "invalid status code"}; int csv_error(const struct csv_parser *p) { assert(p && "received null csv_parser"); /* Return the current status of the parser */ return p->status; } const char * csv_strerror(int status) { /* Return a textual description of status */ if (status >= CSV_EINVALID || status < 0) return csv_errors[CSV_EINVALID]; else return csv_errors[status]; } int csv_get_opts(const struct csv_parser *p) { /* Return the currently set options of parser */ if (p == NULL) return -1; return p->options; } int csv_set_opts(struct csv_parser *p, unsigned char options) { /* Set the options */ if (p == NULL) return -1; p->options = options; return 0; } int csv_init(struct csv_parser *p, unsigned char options) { /* Initialize a csv_parser object returns 0 on success, -1 on error */ if (p == NULL) return -1; p->entry_buf = NULL; p->pstate = ROW_NOT_BEGUN; p->quoted = 0; p->spaces = 0; p->entry_pos = 0; p->entry_size = 0; p->status = 0; p->options = options; p->quote_char = CSV_QUOTE; p->delim_char = CSV_COMMA; p->is_space = NULL; p->is_term = NULL; p->blk_size = MEM_BLK_SIZE; p->malloc_func = NULL; p->realloc_func = realloc; p->free_func = free; return 0; } void csv_free(struct csv_parser *p) { /* Free the entry_buffer of csv_parser object */ if (p == NULL) return; if (p->entry_buf && p->free_func) p->free_func(p->entry_buf); p->entry_buf = NULL; p->entry_size = 0; return; } int csv_fini(struct csv_parser *p, void (*cb1)(void *, size_t, void *), void (*cb2)(int c, void *), void *data) { int quoted; int pstate; size_t spaces; size_t entry_pos; if (p == NULL) return -1; /* Finalize parsing. Needed, for example, when file does not end in a newline */ quoted = p->quoted; pstate = p->pstate; spaces = p->spaces; entry_pos = p->entry_pos; if ((pstate == FIELD_BEGUN) && p->quoted && (p->options & CSV_STRICT) && (p->options & CSV_STRICT_FINI)) { /* Current field is quoted, no end-quote was seen, and CSV_STRICT_FINI is set */ p->status = CSV_EPARSE; return -1; } switch (pstate) { case FIELD_MIGHT_HAVE_ENDED: p->entry_pos -= p->spaces + 1; /* get rid of spaces and original quote */ entry_pos = p->entry_pos; /*lint -fallthrough */ case FIELD_NOT_BEGUN: case FIELD_BEGUN: /* Unnecessary: quoted = p->quoted, pstate = p->pstate; spaces = p->spaces, entry_pos = p->entry_pos; */ SUBMIT_FIELD(p); SUBMIT_ROW(p, -1); break; case ROW_NOT_BEGUN: /* Already ended properly */ ; } /* Reset parser */ p->spaces = p->quoted = p->entry_pos = p->status = 0; p->pstate = ROW_NOT_BEGUN; return 0; } void csv_set_delim(struct csv_parser *p, unsigned char c) { /* Set the delimiter */ if (p) p->delim_char = c; } void csv_set_quote(struct csv_parser *p, unsigned char c) { /* Set the quote character */ if (p) p->quote_char = c; } unsigned char csv_get_delim(const struct csv_parser *p) { assert(p && "received null csv_parser"); /* Get the delimiter */ return p->delim_char; } unsigned char csv_get_quote(const struct csv_parser *p) { assert(p && "received null csv_parser"); /* Get the quote character */ return p->quote_char; } void csv_set_space_func(struct csv_parser *p, int (*f)(unsigned char)) { /* Set the space function */ if (p) p->is_space = f; } void csv_set_term_func(struct csv_parser *p, int (*f)(unsigned char)) { /* Set the term function */ if (p) p->is_term = f; } void csv_set_realloc_func(struct csv_parser *p, void *(*f)(void *, size_t)) { /* Set the realloc function used to increase buffer size */ if (p && f) p->realloc_func = f; } void csv_set_free_func(struct csv_parser *p, void (*f)(void *)) { /* Set the free function used to free the buffer */ if (p && f) p->free_func = f; } void csv_set_blk_size(struct csv_parser *p, size_t size) { /* Set the block size used to increment buffer size */ if (p) p->blk_size = size; } size_t csv_get_buffer_size(const struct csv_parser *p) { /* Get the size of the entry buffer */ if (p) return p->entry_size; return 0; } static int csv_increase_buffer(struct csv_parser *p) { size_t to_add; void *vp; if (p == NULL) return 0; if (p->realloc_func == NULL) return 0; /* Increase the size of the entry buffer. Attempt to increase size by * p->blk_size, if this is larger than SIZE_MAX try to increase current * buffer size to SIZE_MAX. If allocation fails, try to allocate halve * the size and try again until successful or increment size is zero. */ to_add = p->blk_size; if ( p->entry_size >= SIZE_MAX - to_add ) to_add = SIZE_MAX - p->entry_size; if (!to_add) { p->status = CSV_ETOOBIG; return -1; } while ((vp = p->realloc_func(p->entry_buf, p->entry_size + to_add)) == NULL) { to_add /= 2; if (!to_add) { p->status = CSV_ENOMEM; return -1; } } /* Update entry buffer pointer and entry_size if successful */ p->entry_buf = vp; p->entry_size += to_add; return 0; } size_t csv_parse(struct csv_parser *p, const void *s, size_t len, void (*cb1)(void *, size_t, void *), void (*cb2)(int c, void *), void *data) { unsigned const char *us = s; /* Access input data as array of unsigned char */ unsigned char c; /* The character we are currently processing */ size_t pos = 0; /* The number of characters we have processed in this call */ /* Store key fields into local variables for performance */ unsigned char delim = p->delim_char; unsigned char quote = p->quote_char; int (*is_space)(unsigned char) = p->is_space; int (*is_term)(unsigned char) = p->is_term; int quoted = p->quoted; int pstate = p->pstate; size_t spaces = p->spaces; size_t entry_pos = p->entry_pos; if (!p->entry_buf && pos < len) { /* Buffer hasn't been allocated yet and len > 0 */ if (csv_increase_buffer(p) != 0) { p->quoted = quoted, p->pstate = pstate, p->spaces = spaces, p->entry_pos = entry_pos; return pos; } } while (pos < len) { /* Check memory usage, increase buffer if necessary */ if (entry_pos == ((p->options & CSV_APPEND_NULL) ? p->entry_size - 1 : p->entry_size) ) { if (csv_increase_buffer(p) != 0) { p->quoted = quoted, p->pstate = pstate, p->spaces = spaces, p->entry_pos = entry_pos; return pos; } } c = us[pos++]; switch (pstate) { case ROW_NOT_BEGUN: case FIELD_NOT_BEGUN: if ((is_space ? is_space(c) : c == CSV_SPACE || c == CSV_TAB) && c!=delim) { /* Space or Tab */ continue; } else if (is_term ? is_term(c) : c == CSV_CR || c == CSV_LF) { /* Carriage Return or Line Feed */ if (pstate == FIELD_NOT_BEGUN) { SUBMIT_FIELD(p); SUBMIT_ROW(p, c); } else { /* ROW_NOT_BEGUN */ /* Don't submit empty rows by default */ if (p->options & CSV_REPALL_NL) { SUBMIT_ROW(p, c); } } continue; } else if (c == delim) { /* Comma */ SUBMIT_FIELD(p); break; } else if (c == quote) { /* Quote */ pstate = FIELD_BEGUN; quoted = 1; } else { /* Anything else */ pstate = FIELD_BEGUN; quoted = 0; SUBMIT_CHAR(p, c); } break; case FIELD_BEGUN: if (c == quote) { /* Quote */ if (quoted) { SUBMIT_CHAR(p, c); pstate = FIELD_MIGHT_HAVE_ENDED; } else { /* STRICT ERROR - double quote inside non-quoted field */ if (p->options & CSV_STRICT) { p->status = CSV_EPARSE; p->quoted = quoted, p->pstate = pstate, p->spaces = spaces, p->entry_pos = entry_pos; return pos-1; } SUBMIT_CHAR(p, c); spaces = 0; } } else if (c == delim) { /* Comma */ if (quoted) { SUBMIT_CHAR(p, c); } else { SUBMIT_FIELD(p); } } else if (is_term ? is_term(c) : c == CSV_CR || c == CSV_LF) { /* Carriage Return or Line Feed */ if (!quoted) { SUBMIT_FIELD(p); SUBMIT_ROW(p, c); } else { SUBMIT_CHAR(p, c); } } else if (!quoted && (is_space? is_space(c) : c == CSV_SPACE || c == CSV_TAB)) { /* Tab or space for non-quoted field */ SUBMIT_CHAR(p, c); spaces++; } else { /* Anything else */ SUBMIT_CHAR(p, c); spaces = 0; } break; case FIELD_MIGHT_HAVE_ENDED: /* This only happens when a quote character is encountered in a quoted field */ if (c == delim) { /* Comma */ entry_pos -= spaces + 1; /* get rid of spaces and original quote */ SUBMIT_FIELD(p); } else if (is_term ? is_term(c) : c == CSV_CR || c == CSV_LF) { /* Carriage Return or Line Feed */ entry_pos -= spaces + 1; /* get rid of spaces and original quote */ SUBMIT_FIELD(p); SUBMIT_ROW(p, c); } else if (is_space ? is_space(c) : c == CSV_SPACE || c == CSV_TAB) { /* Space or Tab */ SUBMIT_CHAR(p, c); spaces++; } else if (c == quote) { /* Quote */ if (spaces) { /* STRICT ERROR - unescaped double quote */ if (p->options & CSV_STRICT) { p->status = CSV_EPARSE; p->quoted = quoted, p->pstate = pstate, p->spaces = spaces, p->entry_pos = entry_pos; return pos-1; } spaces = 0; SUBMIT_CHAR(p, c); } else { /* Two quotes in a row */ pstate = FIELD_BEGUN; } } else { /* Anything else */ /* STRICT ERROR - unescaped double quote */ if (p->options & CSV_STRICT) { p->status = CSV_EPARSE; p->quoted = quoted, p->pstate = pstate, p->spaces = spaces, p->entry_pos = entry_pos; return pos-1; } pstate = FIELD_BEGUN; spaces = 0; SUBMIT_CHAR(p, c); } break; default: break; } } p->quoted = quoted, p->pstate = pstate, p->spaces = spaces, p->entry_pos = entry_pos; return pos; } size_t csv_write (void *dest, size_t dest_size, const void *src, size_t src_size) { return csv_write2(dest, dest_size, src, src_size, CSV_QUOTE); } int csv_fwrite (FILE *fp, const void *src, size_t src_size) { return csv_fwrite2(fp, src, src_size, CSV_QUOTE); } size_t csv_write2 (void *dest, size_t dest_size, const void *src, size_t src_size, unsigned char quote) { unsigned char *cdest = dest; const unsigned char *csrc = src; size_t chars = 0; if (src == NULL) return 0; if (dest == NULL) dest_size = 0; if (dest_size > 0) *cdest++ = quote; chars++; while (src_size) { if (*csrc == quote) { if (dest_size > chars) *cdest++ = quote; if (chars < SIZE_MAX) chars++; } if (dest_size > chars) *cdest++ = *csrc; if (chars < SIZE_MAX) chars++; src_size--; csrc++; } if (dest_size > chars) *cdest = quote; if (chars < SIZE_MAX) chars++; return chars; } int csv_fwrite2 (FILE *fp, const void *src, size_t src_size, unsigned char quote) { const unsigned char *csrc = src; if (fp == NULL || src == NULL) return 0; if (fputc(quote, fp) == EOF) return EOF; while (src_size) { if (*csrc == quote) { if (fputc(quote, fp) == EOF) return EOF; } if (fputc(*csrc, fp) == EOF) return EOF; src_size--; csrc++; } if (fputc(quote, fp) == EOF) { return EOF; } return 0; } age-PG16-v1.5.0-rc0/src/backend/utils/name_validation.c000066400000000000000000000050121454606241200224120ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "catalog/pg_collation_d.h" #include "utils/builtins.h" #include "utils/name_validation.h" static int regex_match(const char *string, const char *pattern); /* * Returns whether the graph name is valid. * * @param graph_name name of the graph * @return int */ int is_valid_graph_name(const char *graph_name) { int len = strlen(graph_name); if (len < MIN_GRAPH_NAME_LEN || len > MAX_GRAPH_NAME_LEN) { return 0; } return regex_match(graph_name, REGEX_GRAPH_NAME); } /* * Returns whether the label name is valid. * * Note: label_type parameter is not used in this implementation. * It should be used if validation algorithm for edge and vertex * differs in future. * * @param label_name name of the label * @param label_type label type defined in label_commands.h * @return int */ int is_valid_label(char *label_name, char label_type) { int len = strlen(label_name); if (len < MIN_LABEL_NAME_LEN || len > MAX_LABEL_NAME_LEN) { return 0; } return regex_match(label_name, REGEX_LABEL_NAME); } /* * Returns whether there is a regex match. * * @param string source string * @param pattern regex pattern * @return int match returns non-zero */ static int regex_match(const char *string, const char *pattern) { text *t_string = NULL; text *t_pattern = NULL; Datum result; t_string = cstring_to_text_with_len(string, strlen(string)); t_pattern = cstring_to_text_with_len(pattern, strlen(pattern)); result = (DirectFunctionCall2Coll(textregexeq, C_COLLATION_OID, PointerGetDatum(t_string), PointerGetDatum(t_pattern))); return DatumGetBool(result); } age-PG16-v1.5.0-rc0/src/include/000077500000000000000000000000001454606241200160125ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/src/include/catalog/000077500000000000000000000000001454606241200174245ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/src/include/catalog/ag_catalog.h000066400000000000000000000021731454606241200216610ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_AG_CATALOG_H #define AG_AG_CATALOG_H #include "postgres.h" #include "utils/agtype.h" #include "utils/graphid.h" void object_access_hook_init(void); void object_access_hook_fini(void); void process_utility_hook_init(void); void process_utility_hook_fini(void); Oid ag_relation_id(const char *name, const char *kind); #endif age-PG16-v1.5.0-rc0/src/include/catalog/ag_graph.h000066400000000000000000000032301454606241200213430ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_AG_GRAPH_H #define AG_AG_GRAPH_H #include "postgres.h" #include "catalog/ag_catalog.h" #define Anum_ag_graph_oid 1 #define Anum_ag_graph_name 2 #define Anum_ag_graph_namespace 3 #define Natts_ag_graph 3 #define ag_graph_relation_id() ag_relation_id("ag_graph", "table") #define ag_graph_name_index_id() ag_relation_id("ag_graph_name_index", "index") #define ag_graph_namespace_index_id() \ ag_relation_id("ag_graph_namespace_index", "index") void insert_graph(const Name graph_name, const Oid nsp_id); void delete_graph(const Name graph_name); void update_graph_name(const Name graph_name, const Name new_name); uint32 get_graph_oid(const char *graph_name); char *get_graph_namespace_name(const char *graph_name); List *get_graphnames(void); void drop_graphs(List *graphnames); #define graph_exists(graph_name) OidIsValid(get_graph_oid(graph_name)) #endif age-PG16-v1.5.0-rc0/src/include/catalog/ag_label.h000066400000000000000000000062041454606241200213250ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_AG_LABEL_H #define AG_AG_LABEL_H #include "postgres.h" #include "nodes/execnodes.h" #include "catalog/ag_catalog.h" #define Anum_ag_label_vertex_table_id 1 #define Anum_ag_label_vertex_table_properties 2 #define Anum_ag_label_edge_table_id 1 #define Anum_ag_label_edge_table_start_id 2 #define Anum_ag_label_edge_table_end_id 3 #define Anum_ag_label_edge_table_properties 4 #define vertex_tuple_id Anum_ag_label_vertex_table_id - 1 #define vertex_tuple_properties Anum_ag_label_vertex_table_properties - 1 #define edge_tuple_id Anum_ag_label_edge_table_id - 1 #define edge_tuple_start_id Anum_ag_label_edge_table_start_id - 1 #define edge_tuple_end_id Anum_ag_label_edge_table_end_id - 1 #define edge_tuple_properties Anum_ag_label_edge_table_properties - 1 #define Anum_ag_label_name 1 #define Anum_ag_label_graph 2 #define Anum_ag_label_id 3 #define Anum_ag_label_kind 4 #define Anum_ag_label_relation 5 #define Anum_ag_label_seq_name 6 #define Natts_ag_label 6 #define ag_label_relation_id() ag_relation_id("ag_label", "table") #define ag_label_name_graph_index_id() \ ag_relation_id("ag_label_name_graph_index", "index") #define ag_label_graph_oid_index_id() \ ag_relation_id("ag_label_graph_oid_index", "index") #define ag_label_relation_index_id() \ ag_relation_id("ag_label_relation_index", "index") #define ag_label_seq_name_graph_index_id() \ ag_relation_id("ag_label_seq_name_graph_index", "index") #define LABEL_ID_SEQ_NAME "_label_id_seq" #define LABEL_KIND_VERTEX 'v' #define LABEL_KIND_EDGE 'e' void insert_label(const char *label_name, Oid graph_oid, int32 label_id, char label_kind, Oid label_relation, const char *seq_name); void delete_label(Oid relation); int32 get_label_id(const char *label_name, Oid graph_oid); Oid get_label_relation(const char *label_name, Oid graph_oid); char *get_label_relation_name(const char *label_name, Oid graph_oid); Oid get_label_oid(const char *label_name, Oid label_graph); char get_label_kind(const char *label_name, Oid label_graph); bool label_id_exists(Oid graph_oid, int32 label_id); RangeVar *get_label_range_var(char *graph_name, Oid graph_oid, char *label_name); List *get_all_edge_labels_per_graph(EState *estate, Oid graph_oid); #define label_exists(label_name, label_graph) \ OidIsValid(get_label_id(label_name, label_graph)) #endif age-PG16-v1.5.0-rc0/src/include/catalog/ag_namespace.h000066400000000000000000000017011454606241200221770ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_AG_NAMESPACE_H #define AG_AG_NAMESPACE_H #include "postgres.h" Oid ag_catalog_namespace_id(void); Oid pg_catalog_namespace_id(void); #endif age-PG16-v1.5.0-rc0/src/include/commands/000077500000000000000000000000001454606241200176135ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/src/include/commands/graph_commands.h000066400000000000000000000016441454606241200227530ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_GRAPH_COMMANDS_H #define AG_GRAPH_COMMANDS_H #include "postgres.h" Datum create_graph(PG_FUNCTION_ARGS); #endifage-PG16-v1.5.0-rc0/src/include/commands/label_commands.h000066400000000000000000000041421454606241200227250ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_LABEL_COMMANDS_H #define AG_LABEL_COMMANDS_H #include "postgres.h" #define LABEL_TYPE_VERTEX 'v' #define LABEL_TYPE_EDGE 'e' #define AG_DEFAULT_LABEL_EDGE "_ag_label_edge" #define AG_DEFAULT_LABEL_VERTEX "_ag_label_vertex" #define AG_VERTEX_COLNAME_ID "id" #define AG_VERTEX_COLNAME_PROPERTIES "properties" #define AG_ACCESS_FUNCTION_ID "age_id" #define AG_VERTEX_ACCESS_FUNCTION_ID "age_id" #define AG_VERTEX_ACCESS_FUNCTION_PROPERTIES "age_properties" #define AG_EDGE_COLNAME_ID "id" #define AG_EDGE_COLNAME_START_ID "start_id" #define AG_EDGE_COLNAME_END_ID "end_id" #define AG_EDGE_COLNAME_PROPERTIES "properties" #define AG_EDGE_ACCESS_FUNCTION_ID "age_id" #define AG_EDGE_ACCESS_FUNCTION_START_ID "age_start_id" #define AG_EDGE_ACCESS_FUNCTION_END_ID "age_end_id" #define AG_EDGE_ACCESS_FUNCTION_PROPERTIES "age_properties" #define IS_DEFAULT_LABEL_EDGE(str) \ (str != NULL && strcmp(AG_DEFAULT_LABEL_EDGE, str) == 0) #define IS_DEFAULT_LABEL_VERTEX(str) \ (str != NULL && strcmp(AG_DEFAULT_LABEL_VERTEX, str) == 0) #define IS_AG_DEFAULT_LABEL(x) \ (IS_DEFAULT_LABEL_EDGE(x) || IS_DEFAULT_LABEL_VERTEX(x)) void create_label(char *graph_name, char *label_name, char label_type, List *parents); Datum create_vlabel(PG_FUNCTION_ARGS); Datum create_elabel(PG_FUNCTION_ARGS); #endif age-PG16-v1.5.0-rc0/src/include/executor/000077500000000000000000000000001454606241200176505ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/src/include/executor/cypher_executor.h000066400000000000000000000031031454606241200232260ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_CYPHER_EXECUTOR_H #define AG_CYPHER_EXECUTOR_H #include "nodes/extensible.h" #include "nodes/nodes.h" #include "nodes/plannodes.h" #define DELETE_SCAN_STATE_NAME "Cypher Delete" #define SET_SCAN_STATE_NAME "Cypher Set" #define CREATE_SCAN_STATE_NAME "Cypher Create" #define MERGE_SCAN_STATE_NAME "Cypher Merge" Node *create_cypher_create_plan_state(CustomScan *cscan); extern const CustomExecMethods cypher_create_exec_methods; Node *create_cypher_set_plan_state(CustomScan *cscan); extern const CustomExecMethods cypher_set_exec_methods; Node *create_cypher_delete_plan_state(CustomScan *cscan); extern const CustomExecMethods cypher_delete_exec_methods; Node *create_cypher_merge_plan_state(CustomScan *cscan); extern const CustomExecMethods cypher_merge_exec_methods; #endif age-PG16-v1.5.0-rc0/src/include/executor/cypher_utils.h000066400000000000000000000112651454606241200225400ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_CYPHER_UTILS_H #define AG_CYPHER_UTILS_H #include "access/heapam.h" #include "access/table.h" #include "access/tableam.h" #include "nodes/execnodes.h" #include "nodes/extensible.h" #include "nodes/nodes.h" #include "nodes/plannodes.h" #include "nodes/cypher_nodes.h" #include "utils/agtype.h" // declaration of a useful postgres macro that isn't in a header file #define DatumGetItemPointer(X) ((ItemPointer) DatumGetPointer(X)) #define ItemPointerGetDatum(X) PointerGetDatum(X) /* * When executing the children of the CREATE, SET, REMOVE, and * DELETE clauses, we need to alter the command id in the estate * and the snapshot. That way we can hide the modified tuples from * the sub clauses that should not know what their parent clauses are * doing. */ #define Increment_Estate_CommandId(estate) \ estate->es_output_cid++; \ estate->es_snapshot->curcid++; #define Decrement_Estate_CommandId(estate) \ estate->es_output_cid--; \ estate->es_snapshot->curcid--; #define DELETE_VERTEX_HTAB_NAME "delete_vertex_htab" #define DELETE_VERTEX_HTAB_SIZE 1000000 typedef struct cypher_create_custom_scan_state { CustomScanState css; CustomScan *cs; List *pattern; List *path_values; uint32 flags; TupleTableSlot *slot; Oid graph_oid; } cypher_create_custom_scan_state; typedef struct cypher_set_custom_scan_state { CustomScanState css; CustomScan *cs; cypher_update_information *set_list; int flags; } cypher_set_custom_scan_state; typedef struct cypher_delete_custom_scan_state { CustomScanState css; CustomScan *cs; cypher_delete_information *delete_data; int flags; List *edge_labels; /* * Deleted vertex IDs are stored in this hashtable. * * When a vertex item is deleted, it must be checked if there is any edges * connected to it. The connected edges are either deleted or an error is * thrown depending on the DETACH option. However, the check for connected * edges is not done immediately. Instead the deleted vertex IDs are stored * in the hashtable. Once all vertices are deleted, this hashtable is used * to process the connected edges with only one scan of the edge tables. * * Note on performance: Additional performance gain may be possible if * the standard DELETE .. USING .. command can be used instead of this * hashtable. Because Postgres may create a better plan to execute that * command depending on the statistics and available indexes on start_id * and end_id column. */ HTAB *vertex_id_htab; } cypher_delete_custom_scan_state; typedef struct cypher_merge_custom_scan_state { CustomScanState css; CustomScan *cs; cypher_merge_information *merge_information; int flags; cypher_create_path *path; List *path_values; Oid graph_oid; AttrNumber merge_function_attr; bool created_new_path; bool found_a_path; CommandId base_currentCommandId; } cypher_merge_custom_scan_state; TupleTableSlot *populate_vertex_tts(TupleTableSlot *elemTupleSlot, agtype_value *id, agtype_value *properties); TupleTableSlot *populate_edge_tts( TupleTableSlot *elemTupleSlot, agtype_value *id, agtype_value *startid, agtype_value *endid, agtype_value *properties); ResultRelInfo *create_entity_result_rel_info(EState *estate, char *graph_name, char *label_name); void destroy_entity_result_rel_info(ResultRelInfo *result_rel_info); bool entity_exists(EState *estate, Oid graph_oid, graphid id); HeapTuple insert_entity_tuple(ResultRelInfo *resultRelInfo, TupleTableSlot *elemTupleSlot, EState *estate); HeapTuple insert_entity_tuple_cid(ResultRelInfo *resultRelInfo, TupleTableSlot *elemTupleSlot, EState *estate, CommandId cid); #endif age-PG16-v1.5.0-rc0/src/include/nodes/000077500000000000000000000000001454606241200171225ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/src/include/nodes/ag_nodes.h000066400000000000000000000055021454606241200210540ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_AG_NODES_H #define AG_AG_NODES_H #include "postgres.h" #include "nodes/extensible.h" #include "nodes/nodes.h" // This list must match node_names and node_methods. typedef enum ag_node_tag { ag_node_invalid_t = 0, // projection cypher_return_t, cypher_with_t, // reading clause cypher_match_t, // updating clause cypher_create_t, cypher_set_t, cypher_set_item_t, cypher_delete_t, cypher_unwind_t, cypher_merge_t, // pattern cypher_path_t, cypher_node_t, cypher_relationship_t, // expression cypher_bool_const_t, cypher_param_t, cypher_map_t, cypher_list_t, // comparison expression cypher_comparison_aexpr_t, cypher_comparison_boolexpr_t, // string match cypher_string_match_t, // typecast cypher_typecast_t, // integer constant cypher_integer_const_t, // sub patterns cypher_sub_pattern_t, // procedure calls cypher_call_t, // create data structures cypher_create_target_nodes_t, cypher_create_path_t, cypher_target_node_t, // set/remove data structures cypher_update_information_t, cypher_update_item_t, // delete data structures cypher_delete_information_t, cypher_delete_item_t, cypher_merge_information_t } ag_node_tag; void register_ag_nodes(void); ExtensibleNode *_new_ag_node(Size size, ag_node_tag tag); #define new_ag_node(size, tag) \ ( \ AssertMacro((size) >= sizeof(ExtensibleNode)), \ AssertMacro(tag != ag_node_invalid_t), \ _new_ag_node(size, tag) \ ) #define make_ag_node(type) \ ((type *)new_ag_node(sizeof(type), CppConcat(type, _t))) static inline bool _is_ag_node(Node *node, const char *extnodename) { ExtensibleNode *extnode; if (!IsA(node, ExtensibleNode)) return false; extnode = (ExtensibleNode *)node; if (strcmp(extnode->extnodename, extnodename) == 0) return true; return false; } #define is_ag_node(node, type) _is_ag_node((Node *)(node), CppAsString(type)) #endif age-PG16-v1.5.0-rc0/src/include/nodes/cypher_copyfuncs.h000066400000000000000000000040021454606241200226520ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_CYPHER_COPYFUNCS_H #define AG_CYPHER_COPYFUNCS_H #include "postgres.h" #include "nodes/nodes.h" /* * Functions that let AGE's ExtensibleNodes be compatible with * Postgres' copyObject. We assign each node to its copy function * in the DEFINE_NODE_METHODS and DEFINE_NODE_METHODS_EXTENDED * macros in ag_nodes.c */ void copy_ag_node(ExtensibleNode *newnode, const ExtensibleNode *oldnode); // create data structures void copy_cypher_create_target_nodes(ExtensibleNode *newnode, const ExtensibleNode *from); void copy_cypher_create_path(ExtensibleNode *newnode, const ExtensibleNode *from); void copy_cypher_target_node(ExtensibleNode *newnode, const ExtensibleNode *from); // set/remove data structures void copy_cypher_update_information(ExtensibleNode *newnode, const ExtensibleNode *from); void copy_cypher_update_item(ExtensibleNode *newnode, const ExtensibleNode *from); // delete data structures void copy_cypher_delete_information(ExtensibleNode *newnode, const ExtensibleNode *from); void copy_cypher_delete_item(ExtensibleNode *newnode, const ExtensibleNode *from); // merge data structure void copy_cypher_merge_information(ExtensibleNode *newnode, const ExtensibleNode *from); #endif age-PG16-v1.5.0-rc0/src/include/nodes/cypher_nodes.h000066400000000000000000000250661454606241200217660ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_CYPHER_NODE_H #define AG_CYPHER_NODE_H #include "postgres.h" #include "nodes/extensible.h" #include "nodes/parsenodes.h" #include "nodes/pg_list.h" #include "nodes/ag_nodes.h" /* cypher sub patterns */ typedef enum csp_kind { CSP_EXISTS, CSP_SIZE, CSP_FINDPATH /* shortestpath, allshortestpaths, dijkstra */ } csp_kind; typedef struct cypher_sub_pattern { ExtensibleNode extensible; csp_kind kind; List *pattern; } cypher_sub_pattern; /* * clauses */ typedef struct cypher_return { ExtensibleNode extensible; bool distinct; List *items; // a list of ResTarget's List *order_by; Node *skip; Node *limit; bool all_or_distinct; SetOperation op; List *larg; /* lefthand argument of the unions */ List *rarg; /*righthand argument of the unions */ } cypher_return; typedef struct cypher_with { ExtensibleNode extensible; bool distinct; List *items; // a list of ResTarget's List *order_by; Node *skip; Node *limit; Node *where; } cypher_with; typedef struct cypher_match { ExtensibleNode extensible; List *pattern; // a list of cypher_paths Node *where; // optional WHERE subclause (expression) bool optional; // OPTIONAL MATCH } cypher_match; typedef struct cypher_create { ExtensibleNode extensible; List *pattern; // a list of cypher_paths } cypher_create; typedef struct cypher_set { ExtensibleNode extensible; List *items; // a list of cypher_set_items bool is_remove; // true if this is REMOVE clause int location; } cypher_set; typedef struct cypher_set_item { ExtensibleNode extensible; Node *prop; // LHS Node *expr; // RHS bool is_add; // true if this is += int location; } cypher_set_item; typedef struct cypher_delete { ExtensibleNode extensible; bool detach; // true if DETACH is specified List *exprs; // targets of this deletion int location; } cypher_delete; typedef struct cypher_unwind { ExtensibleNode extensible; ResTarget *target; } cypher_unwind; typedef struct cypher_merge { ExtensibleNode extensible; Node *path; } cypher_merge; /* * pattern */ typedef struct cypher_path { ExtensibleNode extensible; List *path; // [ node ( , relationship , node , ... ) ] char *var_name; char *parsed_var_name; int location; } cypher_path; // ( name :label props ) typedef struct cypher_node { ExtensibleNode extensible; char *name; char *parsed_name; char *label; char *parsed_label; Node *props; // map or parameter int location; } cypher_node; typedef enum { CYPHER_REL_DIR_NONE = 0, CYPHER_REL_DIR_LEFT = -1, CYPHER_REL_DIR_RIGHT = 1 } cypher_rel_dir; // -[ name :label props ]- typedef struct cypher_relationship { ExtensibleNode extensible; char *name; char *parsed_name; char *label; char *parsed_label; Node *props; // map or parameter Node *varlen; // variable length relationships (A_Indices) cypher_rel_dir dir; int location; } cypher_relationship; /* * expression */ typedef struct cypher_bool_const { ExtensibleNode extensible; bool boolean; int location; } cypher_bool_const; typedef struct cypher_integer_const { ExtensibleNode extensible; int64 integer; int location; } cypher_integer_const; typedef struct cypher_param { ExtensibleNode extensible; char *name; int location; } cypher_param; typedef struct cypher_map { ExtensibleNode extensible; List *keyvals; int location; bool keep_null; // if false, keyvals with null value are removed } cypher_map; typedef struct cypher_list { ExtensibleNode extensible; List *elems; int location; } cypher_list; enum cypher_string_match_op { CSMO_STARTS_WITH, CSMO_ENDS_WITH, CSMO_CONTAINS }; typedef struct cypher_string_match { ExtensibleNode extensible; enum cypher_string_match_op operation; Node *lhs; Node *rhs; int location; } cypher_string_match; typedef struct cypher_create_target_nodes { ExtensibleNode extensible; List *paths; uint32 flags; uint32 graph_oid; } cypher_create_target_nodes; typedef struct cypher_create_path { ExtensibleNode extensible; List *target_nodes; AttrNumber path_attr_num; char *var_name; } cypher_create_path; /* * comparison expressions */ typedef struct cypher_comparison_aexpr { ExtensibleNode extensible; A_Expr_Kind kind; /* see above */ List *name; /* possibly-qualified name of operator */ Node *lexpr; /* left argument, or NULL if none */ Node *rexpr; /* right argument, or NULL if none */ int location; /* token location, or -1 if unknown */ } cypher_comparison_aexpr; typedef struct cypher_comparison_boolexpr { ExtensibleNode extensible; BoolExprType boolop; List *args; /* arguments to this expression */ int location; /* token location, or -1 if unknown */ } cypher_comparison_boolexpr; /* * procedure call */ typedef struct cypher_call { ExtensibleNode extensible; FuncCall *funccall; /*from the parser */ FuncExpr *funcexpr; /*transformed */ Node *where; List *yield_items; // optional yield subclause } cypher_call; #define CYPHER_CLAUSE_FLAG_NONE 0x0000 #define CYPHER_CLAUSE_FLAG_TERMINAL 0x0001 #define CYPHER_CLAUSE_FLAG_PREVIOUS_CLAUSE 0x0002 #define CYPHER_CLAUSE_IS_TERMINAL(flags) \ (flags & CYPHER_CLAUSE_FLAG_TERMINAL) #define CYPHER_CLAUSE_HAS_PREVIOUS_CLAUSE(flags) \ (flags & CYPHER_CLAUSE_FLAG_PREVIOUS_CLAUSE) /* * Structure that contains all information to create * a new entity in the create clause, or where to access * this information if it doesn't need to be created. * * NOTE: This structure may be used for the MERGE clause as * well */ typedef struct cypher_target_node { ExtensibleNode extensible; // 'v' for vertex or 'e' for edge char type; // flags defined below, prefaced with CYPHER_TARGET_NODE_FLAG_* uint32 flags; // if an edge, denotes direction cypher_rel_dir dir; /* * Used to create the id for the vertex/edge, * if the CYPHER_TARGET_NODE_FLAG_INSERT flag * is set. Doing it this way will protect us when * rescan gets implemented. By calling the function * that creates the id ourselves, we won't have an * issue where the id could be created then not used. * Since there is a limited number of ids available, we * don't want to waste them. */ Expr *id_expr; ExprState *id_expr_state; Expr *prop_expr; ExprState *prop_expr_state; /* * Attribute Number that this entity's properties * are stored in the CustomScanState's child TupleTableSlot */ AttrNumber prop_attr_num; // RelInfo for the table this entity will be stored in ResultRelInfo *resultRelInfo; // elemTupleSlot used to insert the entity into its table TupleTableSlot *elemTupleSlot; // relid that the label stores its entity Oid relid; // label this entity belongs to. char *label_name; // variable name for this entity char *variable_name; /* * Attribute number this entity needs to be stored in * for parent execution nodes to reference it. If the * entity is a variable (CYPHER_TARGET_NODE_IS_VAR). */ AttrNumber tuple_position; } cypher_target_node; #define CYPHER_TARGET_NODE_FLAG_NONE 0x0000 // node must insert data #define CYPHER_TARGET_NODE_FLAG_INSERT 0x0001 /* * Flag that denotes if this target node is referencing * a variable that was already created AND created in the * same clause. */ #define EXISTING_VARIABLE_DECLARED_SAME_CLAUSE 0x0002 //node is the first instance of a declared variable #define CYPHER_TARGET_NODE_IS_VAR 0x0004 // node is an element in a path variable #define CYPHER_TARGET_NODE_IN_PATH_VAR 0x0008 #define CYPHER_TARGET_NODE_MERGE_EXISTS 0x0010 #define CYPHER_TARGET_NODE_OUTPUT(flags) \ (flags & (CYPHER_TARGET_NODE_IS_VAR | CYPHER_TARGET_NODE_IN_PATH_VAR)) #define CYPHER_TARGET_NODE_IN_PATH(flags) \ (flags & CYPHER_TARGET_NODE_IN_PATH_VAR) #define CYPHER_TARGET_NODE_IS_VARIABLE(flags) \ (flags & CYPHER_TARGET_NODE_IS_VAR) /* * When a vertex is created and is reference in the same clause * later. We don't need to check to see if the vertex still exists. */ #define SAFE_TO_SKIP_EXISTENCE_CHECK(flags) \ (flags & EXISTING_VARIABLE_DECLARED_SAME_CLAUSE) #define CYPHER_TARGET_NODE_INSERT_ENTITY(flags) \ (flags & CYPHER_TARGET_NODE_FLAG_INSERT) #define UPDATE_CLAUSE_SET "SET" #define UPDATE_CLAUSE_REMOVE "REMOVE" /* Data Structures that contain information about a vertices and edges the need to be updated */ typedef struct cypher_update_information { ExtensibleNode extensible; List *set_items; uint32 flags; AttrNumber tuple_position; char *graph_name; char *clause_name; } cypher_update_information; typedef struct cypher_update_item { ExtensibleNode extensible; AttrNumber prop_position; AttrNumber entity_position; char *var_name; char *prop_name; List *qualified_name; bool remove_item; bool is_add; } cypher_update_item; typedef struct cypher_delete_information { ExtensibleNode extensible; List *delete_items; uint32 flags; char *graph_name; uint32 graph_oid; bool detach; } cypher_delete_information; typedef struct cypher_delete_item { ExtensibleNode extensible; Integer *entity_position; char *var_name; } cypher_delete_item; typedef struct cypher_merge_information { ExtensibleNode extensible; uint32 flags; uint32 graph_oid; AttrNumber merge_function_attr; cypher_create_path *path; } cypher_merge_information; /* grammar node for typecasts */ typedef struct cypher_typecast { ExtensibleNode extensible; Node *expr; char *typecast; int location; } cypher_typecast; #endif age-PG16-v1.5.0-rc0/src/include/nodes/cypher_outfuncs.h000066400000000000000000000071101454606241200225120ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_CYPHER_OUTFUNCS_H #define AG_CYPHER_OUTFUNCS_H #include "postgres.h" #include "nodes/extensible.h" #include "nodes/nodes.h" /* * Serialization functions for AGE's ExtensibleNodes. We assign * each node to its serialized function in the DEFINE_NODE_METHODS * and DEFINE_NODE_METHODS_EXTENDED macros in ag_nodes.c. */ // clauses void out_cypher_return(StringInfo str, const ExtensibleNode *node); void out_cypher_with(StringInfo str, const ExtensibleNode *node); void out_cypher_match(StringInfo str, const ExtensibleNode *node); void out_cypher_create(StringInfo str, const ExtensibleNode *node); void out_cypher_set(StringInfo str, const ExtensibleNode *node); void out_cypher_set_item(StringInfo str, const ExtensibleNode *node); void out_cypher_delete(StringInfo str, const ExtensibleNode *node); void out_cypher_unwind(StringInfo str, const ExtensibleNode *node); void out_cypher_merge(StringInfo str, const ExtensibleNode *node); // pattern void out_cypher_path(StringInfo str, const ExtensibleNode *node); void out_cypher_node(StringInfo str, const ExtensibleNode *node); void out_cypher_relationship(StringInfo str, const ExtensibleNode *node); // expression void out_cypher_bool_const(StringInfo str, const ExtensibleNode *node); void out_cypher_param(StringInfo str, const ExtensibleNode *node); void out_cypher_map(StringInfo str, const ExtensibleNode *node); void out_cypher_list(StringInfo str, const ExtensibleNode *node); // comparison expression void out_cypher_comparison_aexpr(StringInfo str, const ExtensibleNode *node); void out_cypher_comparison_boolexpr(StringInfo str, const ExtensibleNode *node); // string match void out_cypher_string_match(StringInfo str, const ExtensibleNode *node); // typecast void out_cypher_typecast(StringInfo str, const ExtensibleNode *node); // integer constant void out_cypher_integer_const(StringInfo str, const ExtensibleNode *node); // sub pattern void out_cypher_sub_pattern(StringInfo str, const ExtensibleNode *node); // procedure call void out_cypher_call(StringInfo str, const ExtensibleNode *node); // create private data structures void out_cypher_create_target_nodes(StringInfo str, const ExtensibleNode *node); void out_cypher_create_path(StringInfo str, const ExtensibleNode *node); void out_cypher_target_node(StringInfo str, const ExtensibleNode *node); // set/remove private data structures void out_cypher_update_information(StringInfo str, const ExtensibleNode *node); void out_cypher_update_item(StringInfo str, const ExtensibleNode *node); // delete private data structures void out_cypher_delete_information(StringInfo str, const ExtensibleNode *node); void out_cypher_delete_item(StringInfo str, const ExtensibleNode *node); // merge private data structures void out_cypher_merge_information(StringInfo str, const ExtensibleNode *node); #endif age-PG16-v1.5.0-rc0/src/include/nodes/cypher_readfuncs.h000066400000000000000000000037441454606241200226270ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_CYPHER_READFUNCS_H #define AG_CYPHER_READFUNCS_H #include "postgres.h" #include "nodes/extensible.h" #include "nodes/nodes.h" /* * Deserialization functions for AGE's ExtensibleNodes. We assign * each node to its deserialization function in the DEFINE_NODE_METHODS * and DEFINE_NODE_METHODS_EXTENDED macros in ag_nodes.c. * * All functions are dependent on the pg_strtok function. We do not * setup pg_strtok. That is for the caller to do. By default that * is the responsibility of Postgres' nodeRead function. We assume * that was setup correctly. */ void read_ag_node(ExtensibleNode *node); // create data structures void read_cypher_create_target_nodes(struct ExtensibleNode *node); void read_cypher_create_path(struct ExtensibleNode *node); void read_cypher_target_node(struct ExtensibleNode *node); // set/remove data structures void read_cypher_update_information(struct ExtensibleNode *node); void read_cypher_update_item(struct ExtensibleNode *node); // delete data structures void read_cypher_delete_information(struct ExtensibleNode *node); void read_cypher_delete_item(struct ExtensibleNode *node); void read_cypher_merge_information(struct ExtensibleNode *node); #endif age-PG16-v1.5.0-rc0/src/include/optimizer/000077500000000000000000000000001454606241200200345ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/src/include/optimizer/cypher_createplan.h000066400000000000000000000032661454606241200237040ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_CYPHER_CREATEPLAN_H #define AG_CYPHER_CREATEPLAN_H #include "nodes/pg_list.h" #include "nodes/plannodes.h" Plan *plan_cypher_create_path(PlannerInfo *root, RelOptInfo *rel, CustomPath *best_path, List *tlist, List *clauses, List *custom_plans); Plan *plan_cypher_set_path(PlannerInfo *root, RelOptInfo *rel, CustomPath *best_path, List *tlist, List *clauses, List *custom_plans); Plan *plan_cypher_delete_path(PlannerInfo *root, RelOptInfo *rel, CustomPath *best_path, List *tlist, List *clauses, List *custom_plans); Plan *plan_cypher_merge_path(PlannerInfo *root, RelOptInfo *rel, CustomPath *best_path, List *tlist, List *clauses, List *custom_plans); #endif age-PG16-v1.5.0-rc0/src/include/optimizer/cypher_pathnode.h000066400000000000000000000030671454606241200233670ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_CYPHER_PATHNODE_H #define AG_CYPHER_PATHNODE_H #include "nodes/pg_list.h" #define CREATE_PATH_NAME "Cypher Create" #define SET_PATH_NAME "Cypher Set" #define DELETE_PATH_NAME "Cypher Delete" #define MERGE_PATH_NAME "Cypher Merge" CustomPath *create_cypher_create_path(PlannerInfo *root, RelOptInfo *rel, List *custom_private); CustomPath *create_cypher_set_path(PlannerInfo *root, RelOptInfo *rel, List *custom_private); CustomPath *create_cypher_delete_path(PlannerInfo *root, RelOptInfo *rel, List *custom_private); CustomPath *create_cypher_merge_path(PlannerInfo *root, RelOptInfo *rel, List *custom_private); #endif age-PG16-v1.5.0-rc0/src/include/optimizer/cypher_paths.h000066400000000000000000000016501454606241200227000ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_CYPHER_PATHS_H #define AG_CYPHER_PATHS_H void set_rel_pathlist_init(void); void set_rel_pathlist_fini(void); #endif age-PG16-v1.5.0-rc0/src/include/parser/000077500000000000000000000000001454606241200173065ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/src/include/parser/.gitignore000066400000000000000000000000441454606241200212740ustar00rootroot00000000000000cypher_gram_def.h cypher_kwlist_d.h age-PG16-v1.5.0-rc0/src/include/parser/ag_scanner.h000066400000000000000000000057241454606241200215670ustar00rootroot00000000000000/* * For PostgreSQL Database Management System: * (formerly known as Postgres, then as Postgres95) * * Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group * * Portions Copyright (c) 1994, The Regents of the University of California * * Permission to use, copy, modify, and distribute this software and its documentation for any purpose, * without fee, and without a written agreement is hereby granted, provided that the above copyright notice * and this paragraph and the following two paragraphs appear in all copies. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA * HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ #ifndef AG_AG_SCANNER_H #define AG_AG_SCANNER_H /* * AG_TOKEN_NULL indicates the end of a scan. The name came from YY_NULL. * * AG_TOKEN_DECIMAL can be a decimal integer literal that does not fit in "int" * type. */ typedef enum ag_token_type { AG_TOKEN_NULL, AG_TOKEN_INTEGER, AG_TOKEN_DECIMAL, AG_TOKEN_STRING, AG_TOKEN_IDENTIFIER, AG_TOKEN_PARAMETER, AG_TOKEN_LT_GT, AG_TOKEN_LT_EQ, AG_TOKEN_GT_EQ, AG_TOKEN_DOT_DOT, AG_TOKEN_TYPECAST, AG_TOKEN_PLUS_EQ, AG_TOKEN_EQ_TILDE, AG_TOKEN_LEFT_CONTAINS, AG_TOKEN_RIGHT_CONTAINS, AG_TOKEN_ACCESS_PATH, AG_TOKEN_ANY_EXISTS, AG_TOKEN_ALL_EXISTS, AG_TOKEN_CONCAT, AG_TOKEN_CHAR, } ag_token_type; /* * Fields in value field are used with the following types. * * * c: AG_TOKEN_CHAR * * i: AG_TOKEN_INTEGER * * s: all other types except the types for c and i, and AG_TOKEN_NULL * * "int" type is chosen for value.i to line it up with Value in PostgreSQL. * * value.s is read-only because it points at an internal buffer and it changes * for every ag_scanner_next_token() call. So, users who want to keep or modify * the value need to copy it first. */ typedef struct ag_token { ag_token_type type; union { char c; int i; const char *s; } value; int location; } ag_token; // an opaque data structure encapsulating the current state of the scanner typedef void *ag_scanner_t; ag_scanner_t ag_scanner_create(const char *s); void ag_scanner_destroy(ag_scanner_t scanner); ag_token ag_scanner_next_token(ag_scanner_t scanner); int ag_scanner_errmsg(const char *msg, ag_scanner_t *scanner); int ag_scanner_errposition(const int location, ag_scanner_t *scanner); #endif age-PG16-v1.5.0-rc0/src/include/parser/cypher_analyze.h000066400000000000000000000016601454606241200224770ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_CYPHER_ANALYZE_H #define AG_CYPHER_ANALYZE_H void post_parse_analyze_init(void); void post_parse_analyze_fini(void); #endif age-PG16-v1.5.0-rc0/src/include/parser/cypher_clause.h000066400000000000000000000030351454606241200223060ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_CYPHER_CLAUSE_H #define AG_CYPHER_CLAUSE_H #include "nodes/parsenodes.h" #include "nodes/pg_list.h" #include "parser/parse_node.h" #include "parser/cypher_parse_node.h" typedef struct cypher_clause cypher_clause; struct cypher_clause { cypher_clause *next; //next clause Node *self; cypher_clause *prev; // previous clause }; Query *transform_cypher_clause(cypher_parsestate *cpstate, cypher_clause *clause); Query *cypher_parse_sub_analyze(Node *parseTree, cypher_parsestate *cpstate, CommonTableExpr *parentCTE, bool locked_from_parent, bool resolve_unknowns); #endif age-PG16-v1.5.0-rc0/src/include/parser/cypher_expr.h000066400000000000000000000030071454606241200220070ustar00rootroot00000000000000/* * For PostgreSQL Database Management System: * (formerly known as Postgres, then as Postgres95) * * Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group * * Portions Copyright (c) 1994, The Regents of the University of California * * Permission to use, copy, modify, and distribute this software and its documentation for any purpose, * without fee, and without a written agreement is hereby granted, provided that the above copyright notice * and this paragraph and the following two paragraphs appear in all copies. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA * HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ #ifndef AG_CYPHER_EXPR_H #define AG_CYPHER_EXPR_H #include "nodes/nodes.h" #include "parser/parse_node.h" #include "parser/cypher_parse_node.h" Node *transform_cypher_expr(cypher_parsestate *cpstate, Node *expr, ParseExprKind expr_kind); #endif age-PG16-v1.5.0-rc0/src/include/parser/cypher_gram.h000066400000000000000000000045261454606241200217660ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* * NOTE: this file is only meant to be included in the Cypher parsing files, * i.e., cypher_gram.y, cypher_keywords.c, and cypher_parser.c. * Definitions that are needed outside the Cypher parser should be in * cypher_parser.h. */ #ifndef AG_CYPHER_GRAM_H #define AG_CYPHER_GRAM_H #include "nodes/nodes.h" #include "nodes/pg_list.h" #include "parser/ag_scanner.h" // override the default data type of locations (yylloc) #define YYLTYPE int /* * Extra data that is passed to the generated parser. * The resulting abstract syntax tree is stored in result field. */ typedef struct cypher_yy_extra { List *result; /* * This node currently holds the EXPLAIN ExplainStmt node. It is generic in * the event we need to allow more than just EXPLAIN to be passed up. */ Node *extra; } cypher_yy_extra; /* * cypher_gram_def.h is generated by Bison. * * nodes/nodes.h and nodes/pg_list.h must be included before this due to the * use of Node and List in YYSTYPE. * * ag_scanner.h must be included before this because ag_scanner_t is one of the * parameters of cypher_yyparse() which is generated by Bison. * * YYLTYPE must be defined before this. (see above) * * cypher_yy_extra must be defined before this because it is another parameter * of cypher_yyparse(). */ #include "parser/cypher_gram_def.h" // cypher_parser.c int cypher_yylex(YYSTYPE *lvalp, YYLTYPE *llocp, ag_scanner_t scanner); void cypher_yyerror(YYLTYPE *llocp, ag_scanner_t scanner, cypher_yy_extra *extra, const char *msg); #endif age-PG16-v1.5.0-rc0/src/include/parser/cypher_item.h000066400000000000000000000026021454606241200217670ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_CYPHER_ITEM_H #define AG_CYPHER_ITEM_H #include "postgres.h" #include "nodes/nodes.h" #include "nodes/pg_list.h" #include "nodes/primnodes.h" #include "parser/parse_node.h" #include "parser/cypher_parse_node.h" TargetEntry *transform_cypher_item(cypher_parsestate *cpstate, Node *node, Node *expr, ParseExprKind expr_kind, char *colname, bool resjunk); List *transform_cypher_item_list(cypher_parsestate *cpstate, List *item_list, List **groupClause, ParseExprKind expr_kind); #endif age-PG16-v1.5.0-rc0/src/include/parser/cypher_keywords.h000066400000000000000000000020001454606241200226700ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_KEYWORDS_H #define AG_KEYWORDS_H #include "common/kwlookup.h" extern const ScanKeywordList CypherKeyword; extern const uint16 CypherKeywordTokens[]; extern const uint16 CypherKeywordCategories[]; #endif age-PG16-v1.5.0-rc0/src/include/parser/cypher_kwlist.h000066400000000000000000000041551454606241200223530ustar00rootroot00000000000000PG_KEYWORD("all", ALL, RESERVED_KEYWORD) PG_KEYWORD("analyze", ANALYZE, RESERVED_KEYWORD) PG_KEYWORD("and", AND, RESERVED_KEYWORD) PG_KEYWORD("as", AS, RESERVED_KEYWORD) PG_KEYWORD("asc", ASC, RESERVED_KEYWORD) PG_KEYWORD("ascending", ASCENDING, RESERVED_KEYWORD) PG_KEYWORD("by", BY, RESERVED_KEYWORD) PG_KEYWORD("call", CALL, RESERVED_KEYWORD) PG_KEYWORD("case", CASE, RESERVED_KEYWORD) PG_KEYWORD("coalesce", COALESCE, RESERVED_KEYWORD) PG_KEYWORD("contains", CONTAINS, RESERVED_KEYWORD) PG_KEYWORD("create", CREATE, RESERVED_KEYWORD) PG_KEYWORD("delete", DELETE, RESERVED_KEYWORD) PG_KEYWORD("desc", DESC, RESERVED_KEYWORD) PG_KEYWORD("descending", DESCENDING, RESERVED_KEYWORD) PG_KEYWORD("detach", DETACH, RESERVED_KEYWORD) PG_KEYWORD("distinct", DISTINCT, RESERVED_KEYWORD) PG_KEYWORD("else", ELSE, RESERVED_KEYWORD) PG_KEYWORD("end", END_P, RESERVED_KEYWORD) PG_KEYWORD("ends", ENDS, RESERVED_KEYWORD) PG_KEYWORD("exists", EXISTS, RESERVED_KEYWORD) PG_KEYWORD("explain", EXPLAIN, RESERVED_KEYWORD) PG_KEYWORD("false", FALSE_P, RESERVED_KEYWORD) PG_KEYWORD("in", IN, RESERVED_KEYWORD) PG_KEYWORD("is", IS, RESERVED_KEYWORD) PG_KEYWORD("limit", LIMIT, RESERVED_KEYWORD) PG_KEYWORD("match", MATCH, RESERVED_KEYWORD) PG_KEYWORD("merge", MERGE, RESERVED_KEYWORD) PG_KEYWORD("not", NOT, RESERVED_KEYWORD) PG_KEYWORD("null", NULL_P, RESERVED_KEYWORD) PG_KEYWORD("optional", OPTIONAL, RESERVED_KEYWORD) PG_KEYWORD("or", OR, RESERVED_KEYWORD) PG_KEYWORD("order", ORDER, RESERVED_KEYWORD) PG_KEYWORD("remove", REMOVE, RESERVED_KEYWORD) PG_KEYWORD("return", RETURN, RESERVED_KEYWORD) PG_KEYWORD("set", SET, RESERVED_KEYWORD) PG_KEYWORD("skip", SKIP, RESERVED_KEYWORD) PG_KEYWORD("starts", STARTS, RESERVED_KEYWORD) PG_KEYWORD("then", THEN, RESERVED_KEYWORD) PG_KEYWORD("true", TRUE_P, RESERVED_KEYWORD) PG_KEYWORD("union", UNION, RESERVED_KEYWORD) PG_KEYWORD("unwind", UNWIND, RESERVED_KEYWORD) PG_KEYWORD("verbose", VERBOSE, RESERVED_KEYWORD) PG_KEYWORD("when", WHEN, RESERVED_KEYWORD) PG_KEYWORD("where", WHERE, RESERVED_KEYWORD) PG_KEYWORD("with", WITH, RESERVED_KEYWORD) PG_KEYWORD("xor", XOR, RESERVED_KEYWORD) PG_KEYWORD("yield", YIELD, RESERVED_KEYWORD)age-PG16-v1.5.0-rc0/src/include/parser/cypher_parse_agg.h000066400000000000000000000026561454606241200227720ustar00rootroot00000000000000/* * For PostgreSQL Database Management System: * (formerly known as Postgres, then as Postgres95) * * Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group * * Portions Copyright (c) 1994, The Regents of the University of California * * Permission to use, copy, modify, and distribute this software and its documentation for any purpose, * without fee, and without a written agreement is hereby granted, provided that the above copyright notice * and this paragraph and the following two paragraphs appear in all copies. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA * HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ #ifndef CYPHER_PARSE_AGG_H #define CYPHER_PARSE_AGG_H #include "parser/parse_node.h" extern void parse_check_aggregates(ParseState *pstate, Query *qry); #endif /* CYPHER_PARSE_AGG_H */ age-PG16-v1.5.0-rc0/src/include/parser/cypher_parse_node.h000066400000000000000000000050741454606241200231560ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_CYPHER_PARSE_NODE_H #define AG_CYPHER_PARSE_NODE_H #include "nodes/primnodes.h" #include "parser/parse_node.h" #include "nodes/cypher_nodes.h" /* * Every internal alias or variable name should be prefixed * with AGE_DEFAULT_PREFIX. Grammer restricts variables * prefixed with _age_default_ in user query to be used. */ #define AGE_DEFAULT_PREFIX "_age_default_" #define AGE_DEFAULT_ALIAS_PREFIX AGE_DEFAULT_PREFIX"alias_" #define AGE_DEFAULT_VARNAME_PREFIX AGE_DEFAULT_PREFIX"varname_" typedef struct cypher_parsestate { ParseState pstate; char *graph_name; uint32 graph_oid; Param *params; int default_alias_num; List *entities; List *property_constraint_quals; /* * To flag when an aggregate has been found in an expression during an * expression transform. This is used during the return_item list transform * to know which expressions are group by keys (not an aggregate or a * composite expression with an aggregate), and which aren't (everything * else). It is only used by transform_cypher_item_list. */ bool exprHasAgg; bool p_opt_match; } cypher_parsestate; typedef struct errpos_ecb_state { ErrorContextCallback ecb; ParseState *pstate; // ParseState of query that has subquery being parsed int query_loc; // location of subquery starting from p_sourcetext } errpos_ecb_state; cypher_parsestate *make_cypher_parsestate(cypher_parsestate *parent_cpstate); void free_cypher_parsestate(cypher_parsestate *cpstate); #define get_parse_state(cpstate) ((ParseState *)(cpstate)) void setup_errpos_ecb(errpos_ecb_state *ecb_state, ParseState *pstate, int query_loc); void cancel_errpos_ecb(errpos_ecb_state *ecb_state); char *get_next_default_alias(cypher_parsestate *cpstate); #endif age-PG16-v1.5.0-rc0/src/include/parser/cypher_parser.h000066400000000000000000000016451454606241200223330ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_CYPHER_PARSER_H #define AG_CYPHER_PARSER_H #include "nodes/pg_list.h" List *parse_cypher(const char *s); #endif age-PG16-v1.5.0-rc0/src/include/parser/cypher_transform_entity.h000066400000000000000000000066611454606241200244510ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_CYPHER_TRANSFORM_ENTITY_H #define AG_CYPHER_TRANSFORM_ENTITY_H #include "nodes/primnodes.h" #include "parser/parse_node.h" #include "nodes/cypher_nodes.h" #include "nodes/makefuncs.h" #include "parser/cypher_parse_node.h" enum transform_entity_type { ENT_VERTEX = 0x0, ENT_EDGE, ENT_VLE_EDGE, ENT_PATH }; enum transform_entity_join_side { JOIN_SIDE_LEFT = 0x0, JOIN_SIDE_RIGHT }; /* * In the transformation stage, we need to track * where a variable came from. When moving between * clauses, Postgres parsestate and Query data structures * are insufficient for some of the information we * need. */ typedef struct { // denotes whether this entity is a vertex or edge enum transform_entity_type type; /* * MATCH clauses are transformed into a select * FROM ... JOIN, etc * We need to know whether the table that this entity represents is * part of the join tree. If a cypher_node does not meet the conditions * set in INCLUDE_NODE_IN_JOIN_TREE. Then we can skip the node when * constructing our join tree. The entities around this particular entity * need to know this for the join to get properly constructed. */ bool in_join_tree; /* * The parse data structure will be transformed into an Expr that represents * the entity. When constructing the join tree, we need to know what it was * turned into. If the entity was originally created in a previous clause, * this will be a Var that we need to reference to extract the id, startid, * endid for the join. If the entity was created in the current clause, then * this will be a FuncExpr that we can reference to get the id, startid, and * endid. */ Expr *expr; /* * tells each clause whether this variable was * declared by itself or a previous clause. */ bool declared_in_current_clause; // The parse data structure that we transformed union { cypher_node *node; cypher_relationship *rel; cypher_path *path; } entity; } transform_entity; transform_entity *find_variable(cypher_parsestate *cpstate, char *name); transform_entity *find_transform_entity(cypher_parsestate *cpstate, char *name, enum transform_entity_type type); transform_entity *make_transform_entity(cypher_parsestate *cpstate, enum transform_entity_type type, Node *node, Expr *expr); char *get_entity_name(transform_entity *entity); Expr *get_relative_expr(transform_entity *entity, Index levelsup); #endif age-PG16-v1.5.0-rc0/src/include/utils/000077500000000000000000000000001454606241200171525ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/src/include/utils/ag_cache.h000066400000000000000000000034511454606241200210400ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_AG_CACHE_H #define AG_AG_CACHE_H #include "postgres.h" // graph_cache_data contains the same fields that ag_graph catalog table has typedef struct graph_cache_data { Oid oid; NameData name; Oid namespace; } graph_cache_data; // label_cache_data contains the same fields that ag_label catalog table has typedef struct label_cache_data { NameData name; Oid graph; int32 id; char kind; Oid relation; NameData seq_name; } label_cache_data; // callers of these functions must not modify the returned struct graph_cache_data *search_graph_name_cache(const char *name); graph_cache_data *search_graph_namespace_cache(Oid namespace); label_cache_data *search_label_oid_cache(Oid oid); label_cache_data *search_label_name_graph_cache(const char *name, Oid graph); label_cache_data *search_label_graph_oid_cache(Oid graph, int32 id); label_cache_data *search_label_relation_cache(Oid relation); label_cache_data *search_label_seq_name_graph_cache(const char *name, Oid graph); #endif age-PG16-v1.5.0-rc0/src/include/utils/ag_float8_supp.h000066400000000000000000000027771454606241200222530ustar00rootroot00000000000000/* * For PostgreSQL Database Management System: * (formerly known as Postgres, then as Postgres95) * * Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group * * Portions Copyright (c) 1994, The Regents of the University of California * * Permission to use, copy, modify, and distribute this software and its documentation for any purpose, * without fee, and without a written agreement is hereby granted, provided that the above copyright notice * and this paragraph and the following two paragraphs appear in all copies. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA * HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ #ifndef AG_FLOAT_H #define AG_FLOAT_H #include "postgres.h" bool is_float8_special_number(float8 number); float8 float8in_internal_null(char *num, char **endptr_p, const char *type_name, const char *orig_string, bool *is_valid); #endif age-PG16-v1.5.0-rc0/src/include/utils/ag_func.h000066400000000000000000000033431454606241200207300ustar00rootroot00000000000000/* * For PostgreSQL Database Management System: * (formerly known as Postgres, then as Postgres95) * * Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group * * Portions Copyright (c) 1994, The Regents of the University of California * * Permission to use, copy, modify, and distribute this software and its documentation for any purpose, * without fee, and without a written agreement is hereby granted, provided that the above copyright notice * and this paragraph and the following two paragraphs appear in all copies. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA * HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ #ifndef AG_AG_FUNC_H #define AG_AG_FUNC_H #include "postgres.h" #define CREATE_CLAUSE_FUNCTION_NAME "_cypher_create_clause" #define SET_CLAUSE_FUNCTION_NAME "_cypher_set_clause" #define DELETE_CLAUSE_FUNCTION_NAME "_cypher_delete_clause" #define MERGE_CLAUSE_FUNCTION_NAME "_cypher_merge_clause" bool is_oid_ag_func(Oid func_oid, const char *func_name); Oid get_ag_func_oid(const char *func_name, const int nargs, ...); Oid get_pg_func_oid(const char *func_name, const int nargs, ...); #endif age-PG16-v1.5.0-rc0/src/include/utils/ag_guc.h000066400000000000000000000030161454606241200205500ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_GUC_H #define AG_GUC_H /* * AGE configuration parameters. * * Ideally, these parameters should be documented in a .sgml file. * * To add a new parameter, add a global variable. Add its definition * in the `define_config_params` function. Include this header file * to use the global variable. The parameters can be set just like * regular Postgres parameters. See guc.h for more details. */ /* * If set true, MATCH's property filter is transformed into the @> * (containment) operator. Otherwise, the -> operator is used. The former case * is useful when GIN index is desirable, the latter case is useful for Btree * expression index. */ extern bool age_enable_containment; void define_config_params(void); #endif age-PG16-v1.5.0-rc0/src/include/utils/ag_load.h000066400000000000000000000034241454606241200207140ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AGE_AG_LOAD_H #define AGE_AG_LOAD_H #include "postgres.h" #include "access/heapam.h" #include "access/xact.h" #include "catalog/dependency.h" #include "catalog/namespace.h" #include "catalog/objectaddress.h" #include "catalog/pg_class_d.h" #include "commands/defrem.h" #include "commands/sequence.h" #include "commands/tablecmds.h" #include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodes.h" #include "nodes/parsenodes.h" #include "nodes/pg_list.h" #include "nodes/plannodes.h" #include "nodes/primnodes.h" #include "nodes/value.h" #include "parser/parse_node.h" #include "parser/parser.h" #include "storage/lockdefs.h" #include "tcop/dest.h" #include "tcop/utility.h" #include "utils/acl.h" #include "utils/builtins.h" #include "utils/inval.h" #include "utils/lsyscache.h" #include "catalog/ag_graph.h" #include "catalog/ag_label.h" #include "commands/label_commands.h" #include "utils/ag_cache.h" #include "utils/agtype.h" #include "utils/graphid.h" #endif //AGE_AG_LOAD_H age-PG16-v1.5.0-rc0/src/include/utils/age_global_graph.h000066400000000000000000000050201454606241200225550ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_AGE_GLOBAL_GRAPH_H #define AG_AGE_GLOBAL_GRAPH_H #include "utils/graphid.h" #include "utils/age_graphid_ds.h" /* * We declare the graph nodes and edges here, and in this way, so that it may be * used elsewhere. However, we keep the contents private by defining it in * age_global_graph.c */ /* vertex entry for the vertex_hashtable */ typedef struct vertex_entry vertex_entry; /* edge entry for the edge_hashtable */ typedef struct edge_entry edge_entry; typedef struct GRAPH_global_context GRAPH_global_context; /* GRAPH global context functions */ GRAPH_global_context *manage_GRAPH_global_contexts(char *graph_name, Oid graph_oid); GRAPH_global_context *find_GRAPH_global_context(Oid graph_oid); bool is_ggctx_invalid(GRAPH_global_context *ggctx); /* GRAPH retrieval functions */ ListGraphId *get_graph_vertices(GRAPH_global_context *ggctx); vertex_entry *get_vertex_entry(GRAPH_global_context *ggctx, graphid vertex_id); edge_entry *get_edge_entry(GRAPH_global_context *ggctx, graphid edge_id); /* vertex entry accessor functions*/ graphid get_vertex_entry_id(vertex_entry *ve); ListGraphId *get_vertex_entry_edges_in(vertex_entry *ve); ListGraphId *get_vertex_entry_edges_out(vertex_entry *ve); ListGraphId *get_vertex_entry_edges_self(vertex_entry *ve); Oid get_vertex_entry_label_table_oid(vertex_entry *ve); Datum get_vertex_entry_properties(vertex_entry *ve); /* edge entry accessor functions */ graphid get_edge_entry_id(edge_entry *ee); Oid get_edge_entry_label_table_oid(edge_entry *ee); Datum get_edge_entry_properties(edge_entry *ee); graphid get_edge_entry_start_vertex_id(edge_entry *ee); graphid get_edge_entry_end_vertex_id(edge_entry *ee); #endif age-PG16-v1.5.0-rc0/src/include/utils/age_graphid_ds.h000066400000000000000000000053141454606241200222460ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_AGE_GRAPHID_DS_H #define AG_AGE_GRAPHID_DS_H #include "utils/graphid.h" #define IS_GRAPHID_STACK_EMPTY(stack) \ get_stack_size(stack) == 0 #define PEEK_GRAPHID_STACK(stack) \ (graphid) get_graphid(peek_stack_head(stack)) /* * We declare the GRAPHID data structures here, and in this way, so that they * may be used elsewhere. However, we keep the contents private by defining them * in age_graphid_ds.c */ /* declare the GraphIdNode */ typedef struct GraphIdNode GraphIdNode; /* declare the ListGraphId container */ typedef struct ListGraphId ListGraphId; /* GraphIdNode access functions */ GraphIdNode *next_GraphIdNode(GraphIdNode *node); graphid get_graphid(GraphIdNode *node); /* graphid stack functions */ /* create a new ListGraphId stack */ ListGraphId *new_graphid_stack(void); /* free a ListGraphId stack */ void free_graphid_stack(ListGraphId *stack); /* push a graphid onto a ListGraphId stack */ void push_graphid_stack(ListGraphId *stack, graphid id); /* pop (remove) a GraphIdNode from the top of the stack */ graphid pop_graphid_stack(ListGraphId *stack); /* peek (doesn't remove) at the head entry of a ListGraphId stack */ GraphIdNode *peek_stack_head(ListGraphId *stack); /* peek (doesn't remove) at the tail entry of a ListGraphId stack */ GraphIdNode *peek_stack_tail(ListGraphId *stack); /* return the size of a ListGraphId stack */ int64 get_stack_size(ListGraphId *stack); /* graphid list functions */ /* * Helper function to add a graphid to the end of a ListGraphId container. * If the container is NULL, it creates the container with the entry. */ ListGraphId *append_graphid(ListGraphId *container, graphid id); /* free a ListGraphId container */ void free_ListGraphId(ListGraphId *container); /* return a reference to the head entry of a list */ GraphIdNode *get_list_head(ListGraphId *list); /* get the size of the passed list */ int64 get_list_size(ListGraphId *list); #endif age-PG16-v1.5.0-rc0/src/include/utils/age_session_info.h000066400000000000000000000020031454606241200226300ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AGE_SESSION_INFO_H #define AGE_SESSION_INFO_H bool is_session_info_prepared(void); char *get_session_info_graph_name(void); char *get_session_info_cypher_statement(void); void reset_session_info(void); #endif age-PG16-v1.5.0-rc0/src/include/utils/age_vle.h000066400000000000000000000031531454606241200207270ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_AGTYPE_VLE_H #define AG_AGTYPE_VLE_H #include "utils/agtype.h" #include "utils/age_global_graph.h" /* * We declare the VLE_path_container here, and in this way, so that it may be * used elsewhere. However, we keep the contents private by defining it in * agtype_vle.c */ typedef struct VLE_path_container VLE_path_container; /* * Function to take an AGTV_BINARY VLE_path_container and return a path as an * agtype. */ agtype *agt_materialize_vle_path(agtype *agt_arg_vpc); /* * Function to take a AGTV_BINARY VLE_path_container and return a path as an * agtype_value. */ agtype_value *agtv_materialize_vle_path(agtype *agt_arg_vpc); /* * Exposed helper function to make an agtype_value AGTV_ARRAY of edges from a * VLE_path_container. */ agtype_value *agtv_materialize_vle_edges(agtype *agt_arg_vpc); #endif age-PG16-v1.5.0-rc0/src/include/utils/agtype.h000066400000000000000000000571171454606241200206270ustar00rootroot00000000000000/* * For PostgreSQL Database Management System: * (formerly known as Postgres, then as Postgres95) * * Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group * * Portions Copyright (c) 1994, The Regents of the University of California * * Permission to use, copy, modify, and distribute this software and its documentation for any purpose, * without fee, and without a written agreement is hereby granted, provided that the above copyright notice * and this paragraph and the following two paragraphs appear in all copies. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA * HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ /* * Declarations for agtype data type support. * * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group */ #ifndef AG_AGTYPE_H #define AG_AGTYPE_H #include "access/htup_details.h" #include "fmgr.h" #include "lib/stringinfo.h" #include "nodes/pg_list.h" #include "utils/array.h" #include "utils/numeric.h" #include "utils/syscache.h" #include "catalog/ag_namespace.h" #include "catalog/pg_type.h" #include "utils/graphid.h" /* Tokens used when sequentially processing an agtype value */ typedef enum { WAGT_DONE = 0x0, WAGT_KEY, WAGT_VALUE, WAGT_ELEM, WAGT_BEGIN_ARRAY, WAGT_END_ARRAY, WAGT_BEGIN_OBJECT, WAGT_END_OBJECT } agtype_iterator_token; #define AGTYPE_ITERATOR_TOKEN_IS_HASHABLE(x) \ (x > WAGT_DONE && x < WAGT_BEGIN_ARRAY) /* Strategy numbers for GIN index opclasses */ #define AGTYPE_CONTAINS_STRATEGY_NUMBER 7 #define AGTYPE_EXISTS_STRATEGY_NUMBER 9 #define AGTYPE_EXISTS_ANY_STRATEGY_NUMBER 10 #define AGTYPE_EXISTS_ALL_STRATEGY_NUMBER 11 /* * In the standard agtype_ops GIN opclass for agtype, we choose to index both * keys and values. The storage format is text. The first byte of the text * string distinguishes whether this is a key (always a string), null value, * boolean value, numeric value, or string value. However, array elements * that are strings are marked as though they were keys; this imprecision * supports the definition of the "exists" operator, which treats array * elements like keys. The remainder of the text string is empty for a null * value, "t" or "f" for a boolean value, a normalized print representation of * a numeric value, or the text of a string value. However, if the length of * this text representation would exceed AGT_GIN_MAX_LENGTH bytes, we instead * hash the text representation and store an 8-hex-digit representation of the * uint32 hash value, marking the prefix byte with an additional bit to * distinguish that this has happened. Hashing long strings saves space and * ensures that we won't overrun the maximum entry length for a GIN index. * (But AGT_GIN_MAX_LENGTH is quite a bit shorter than GIN's limit. It's * chosen to ensure that the on-disk text datum will have a short varlena * header.) Note that when any hashed item appears in a query, we must recheck * index matches against the heap tuple; currently, this costs nothing because * we must always recheck for other reasons. */ #define AGT_GIN_FLAG_KEY 0x01 /* key (or string array element) */ #define AGT_GIN_FLAG_NULL 0x02 /* null value */ #define AGT_GIN_FLAG_BOOL 0x03 /* boolean value */ #define AGT_GIN_FLAG_NUM 0x04 /* numeric value */ #define AGT_GIN_FLAG_STR 0x05 /* string value (if not an array element) */ #define AGT_GIN_FLAG_HASHED 0x10 /* OR'd into flag if value was hashed */ #define AGT_GIN_MAX_LENGTH 125 /* max length of text part before hashing */ /* Convenience macros */ #define DATUM_GET_AGTYPE_P(d) ((agtype *)PG_DETOAST_DATUM(d)) #define AGTYPE_P_GET_DATUM(p) PointerGetDatum(p) #define AG_GET_ARG_AGTYPE_P(x) DATUM_GET_AGTYPE_P(PG_GETARG_DATUM(x)) #define AG_RETURN_AGTYPE_P(x) PG_RETURN_POINTER(x) typedef struct agtype_pair agtype_pair; typedef struct agtype_value agtype_value; /* * agtypes are varlena objects, so must meet the varlena convention that the * first int32 of the object contains the total object size in bytes. Be sure * to use VARSIZE() and SET_VARSIZE() to access it, though! * * agtype is the on-disk representation, in contrast to the in-memory * agtype_value representation. Often, agtype_values are just shims through * which a agtype buffer is accessed, but they can also be deep copied and * passed around. * * agtype is a tree structure. Each node in the tree consists of an agtentry * header and a variable-length content (possibly of zero size). The agtentry * header indicates what kind of a node it is, e.g. a string or an array, * and provides the length of its variable-length portion. * * The agtentry and the content of a node are not stored physically together. * Instead, the container array or object has an array that holds the agtentrys * of all the child nodes, followed by their variable-length portions. * * The root node is an exception; it has no parent array or object that could * hold its agtentry. Hence, no agtentry header is stored for the root node. * It is implicitly known that the root node must be an array or an object, * so we can get away without the type indicator as long as we can distinguish * the two. For that purpose, both an array and an object begin with a uint32 * header field, which contains an AGT_FOBJECT or AGT_FARRAY flag. When a * naked scalar value needs to be stored as an agtype value, what we actually * store is an array with one element, with the flags in the array's header * field set to AGT_FSCALAR | AGT_FARRAY. * * Overall, the agtype struct requires 4-bytes alignment. Within the struct, * the variable-length portion of some node types is aligned to a 4-byte * boundary, while others are not. When alignment is needed, the padding is * in the beginning of the node that requires it. For example, if a numeric * node is stored after a string node, so that the numeric node begins at * offset 3, the variable-length portion of the numeric node will begin with * one padding byte so that the actual numeric data is 4-byte aligned. */ /* * agtentry format. * * The least significant 28 bits store either the data length of the entry, * or its end+1 offset from the start of the variable-length portion of the * containing object. The next three bits store the type of the entry, and * the high-order bit tells whether the least significant bits store a length * or an offset. * * The reason for the offset-or-length complication is to compromise between * access speed and data compressibility. In the initial design each agtentry * always stored an offset, but this resulted in agtentry arrays with horrible * compressibility properties, so that TOAST compression of an agtype did not * work well. Storing only lengths would greatly improve compressibility, * but it makes random access into large arrays expensive (O(N) not O(1)). * So what we do is store an offset in every AGT_OFFSET_STRIDE'th agtentry and * a length in the rest. This results in reasonably compressible data (as * long as the stride isn't too small). We may have to examine as many as * AGT_OFFSET_STRIDE agtentrys in order to find out the offset or length of any * given item, but that's still O(1) no matter how large the container is. * * We could avoid eating a flag bit for this purpose if we were to store * the stride in the container header, or if we were willing to treat the * stride as an unchangeable constant. Neither of those options is very * attractive though. */ typedef uint32 agtentry; #define AGTENTRY_OFFLENMASK 0x0FFFFFFF #define AGTENTRY_TYPEMASK 0x70000000 #define AGTENTRY_HAS_OFF 0x80000000 /* values stored in the type bits */ #define AGTENTRY_IS_STRING 0x00000000 #define AGTENTRY_IS_NUMERIC 0x10000000 #define AGTENTRY_IS_BOOL_FALSE 0x20000000 #define AGTENTRY_IS_BOOL_TRUE 0x30000000 #define AGTENTRY_IS_NULL 0x40000000 #define AGTENTRY_IS_CONTAINER 0x50000000 /* array or object */ #define AGTENTRY_IS_AGTYPE 0x70000000 /* our type designator */ /* Access macros. Note possible multiple evaluations */ #define AGTE_OFFLENFLD(agte_) ((agte_)&AGTENTRY_OFFLENMASK) #define AGTE_HAS_OFF(agte_) (((agte_)&AGTENTRY_HAS_OFF) != 0) #define AGTE_IS_STRING(agte_) \ (((agte_)&AGTENTRY_TYPEMASK) == AGTENTRY_IS_STRING) #define AGTE_IS_NUMERIC(agte_) \ (((agte_)&AGTENTRY_TYPEMASK) == AGTENTRY_IS_NUMERIC) #define AGTE_IS_CONTAINER(agte_) \ (((agte_)&AGTENTRY_TYPEMASK) == AGTENTRY_IS_CONTAINER) #define AGTE_IS_NULL(agte_) (((agte_)&AGTENTRY_TYPEMASK) == AGTENTRY_IS_NULL) #define AGTE_IS_BOOL_TRUE(agte_) \ (((agte_)&AGTENTRY_TYPEMASK) == AGTENTRY_IS_BOOL_TRUE) #define AGTE_IS_BOOL_FALSE(agte_) \ (((agte_)&AGTENTRY_TYPEMASK) == AGTENTRY_IS_BOOL_FALSE) #define AGTE_IS_BOOL(agte_) \ (AGTE_IS_BOOL_TRUE(agte_) || AGTE_IS_BOOL_FALSE(agte_)) #define AGTE_IS_AGTYPE(agte_) \ (((agte_)&AGTENTRY_TYPEMASK) == AGTENTRY_IS_AGTYPE) /* Macro for advancing an offset variable to the next agtentry */ #define AGTE_ADVANCE_OFFSET(offset, agte) \ do \ { \ agtentry agte_ = (agte); \ if (AGTE_HAS_OFF(agte_)) \ (offset) = AGTE_OFFLENFLD(agte_); \ else \ (offset) += AGTE_OFFLENFLD(agte_); \ } while (0) /* * We store an offset, not a length, every AGT_OFFSET_STRIDE children. * Caution: this macro should only be referenced when creating an agtype * value. When examining an existing value, pay attention to the HAS_OFF * bits instead. This allows changes in the offset-placement heuristic * without breaking on-disk compatibility. */ #define AGT_OFFSET_STRIDE 32 /* * An agtype array or object node, within an agtype Datum. * * An array has one child for each element, stored in array order. * * An object has two children for each key/value pair. The keys all appear * first, in key sort order; then the values appear, in an order matching the * key order. This arrangement keeps the keys compact in memory, making a * search for a particular key more cache-friendly. */ typedef struct agtype_container { uint32 header; /* number of elements or key/value pairs, and flags */ agtentry children[FLEXIBLE_ARRAY_MEMBER]; /* the data for each child node follows. */ } agtype_container; /* flags for the header-field in agtype_container*/ #define AGT_CMASK 0x0FFFFFFF /* mask for count field */ #define AGT_FSCALAR 0x10000000 /* flag bits */ #define AGT_FOBJECT 0x20000000 #define AGT_FARRAY 0x40000000 #define AGT_FBINARY 0x80000000 /* our binary objects */ /* * It should be noted that while AGT_FBINARY utilizes the AGTV_BINARY mechanism, * it is not necessarily an agtype serialized (binary) value. We are just using * that mechanism to pass blobs of data more quickly between components. In the * case of the path from the VLE routine, the blob is a graphid array where the * first element contains the header embedded in it. This way it is just cast to * the graphid array to be used after verifying that it is an AGT_FBINARY and an * AGT_FBINARY_TYPE_VLE_PATH. */ /* * Flags for the agtype_container type AGT_FBINARY are in the AGT_CMASK (count) * field. We put the flags here as this is a strictly AGTV_BINARY blob of data * and count is irrelevant because there is only one. The additional flags allow * for differing types of user defined binary blobs. To be consistent and clear, * we create binary specific masks, flags, and macros. */ #define AGT_FBINARY_MASK 0x0FFFFFFF /* mask for binary flags */ #define AGTYPE_FBINARY_CONTAINER_TYPE(agtc) ((agtc)->header &AGT_FBINARY_MASK) #define AGT_ROOT_DATA_FBINARY(agtp_) VARDATA(agtp_); #define AGT_FBINARY_TYPE_VLE_PATH 0x00000001 /* convenience macros for accessing an agtype_container struct */ #define AGTYPE_CONTAINER_SIZE(agtc) ((agtc)->header & AGT_CMASK) #define AGTYPE_CONTAINER_IS_SCALAR(agtc) (((agtc)->header & AGT_FSCALAR) != 0) #define AGTYPE_CONTAINER_IS_OBJECT(agtc) (((agtc)->header & AGT_FOBJECT) != 0) #define AGTYPE_CONTAINER_IS_ARRAY(agtc) (((agtc)->header & AGT_FARRAY) != 0) #define AGTYPE_CONTAINER_IS_BINARY(agtc) (((agtc)->header & AGT_FBINARY) != 0) /* The top-level on-disk format for an agtype datum. */ typedef struct { int32 vl_len_; /* varlena header (do not touch directly!) */ agtype_container root; } agtype; /* convenience macros for accessing the root container in an agtype datum */ #define AGT_ROOT_COUNT(agtp_) (*(uint32 *)VARDATA(agtp_) & AGT_CMASK) #define AGT_ROOT_IS_SCALAR(agtp_) \ ((*(uint32 *)VARDATA(agtp_) & AGT_FSCALAR) != 0) #define AGT_ROOT_IS_OBJECT(agtp_) \ ((*(uint32 *)VARDATA(agtp_) & AGT_FOBJECT) != 0) #define AGT_ROOT_IS_ARRAY(agtp_) \ ((*(uint32 *)VARDATA(agtp_) & AGT_FARRAY) != 0) #define AGT_ROOT_IS_BINARY(agtp_) \ ((*(uint32 *)VARDATA(agtp_) & AGT_FBINARY) != 0) #define AGT_ROOT_BINARY_FLAGS(agtp_) \ (*(uint32 *)VARDATA(agtp_) & AGT_FBINARY_MASK) #define AGT_ROOT_IS_VPC(agtp_) \ (AGT_ROOT_IS_BINARY(agtp_) && (AGT_ROOT_BINARY_FLAGS(agtp_) == AGT_FBINARY_TYPE_VLE_PATH)) /* values for the AGTYPE header field to denote the stored data type */ #define AGT_HEADER_INTEGER 0x00000000 #define AGT_HEADER_FLOAT 0x00000001 #define AGT_HEADER_VERTEX 0x00000002 #define AGT_HEADER_EDGE 0x00000003 #define AGT_HEADER_PATH 0x00000004 /* * IMPORTANT NOTE: For agtype_value_type, IS_A_AGTYPE_SCALAR() checks that the * type is between AGTV_NULL and AGTV_ARRAY, excluding AGTV_ARRAY. So, new scalars need to * be between these values. */ enum agtype_value_type { /* Scalar types */ AGTV_NULL = 0x0, AGTV_STRING, AGTV_NUMERIC, AGTV_INTEGER, AGTV_FLOAT, AGTV_BOOL, AGTV_VERTEX, AGTV_EDGE, AGTV_PATH, /* Composite types */ AGTV_ARRAY = 0x10, AGTV_OBJECT, /* Binary (i.e. struct agtype) AGTV_ARRAY/AGTV_OBJECT */ AGTV_BINARY }; /* * agtype_value: In-memory representation of agtype. This is a convenient * deserialized representation, that can easily support using the "val" * union across underlying types during manipulation. The agtype on-disk * representation has various alignment considerations. */ struct agtype_value { enum agtype_value_type type; /* Influences sort order */ union { int64 int_value; /* Cypher 8 byte Integer */ float8 float_value; /* Cypher 8 byte Float */ Numeric numeric; bool boolean; struct { int len; char *val; /* Not necessarily null-terminated */ } string; /* String primitive type */ struct { int num_elems; agtype_value *elems; bool raw_scalar; /* Top-level "raw scalar" array? */ } array; /* Array container type */ struct { int num_pairs; /* 1 pair, 2 elements */ agtype_pair *pairs; } object; /* Associative container type */ struct { int len; agtype_container *data; } binary; /* Array or object, in on-disk format */ } val; }; #define IS_A_AGTYPE_SCALAR(agtype_val) \ ((agtype_val)->type >= AGTV_NULL && (agtype_val)->type < AGTV_ARRAY) /* * Key/value pair within an Object. * * This struct type is only used briefly while constructing an agtype ; it is * *not* the on-disk representation. * * Pairs with duplicate keys are de-duplicated. We store the originally * observed pair ordering for the purpose of removing duplicates in a * well-defined way (which is "last observed wins"). */ struct agtype_pair { agtype_value key; /* Must be a AGTV_STRING */ agtype_value value; /* May be of any type */ uint32 order; /* Pair's index in original sequence */ }; /* Conversion state used when parsing agtype from text, or for type coercion */ typedef struct agtype_parse_state { agtype_value cont_val; Size size; struct agtype_parse_state *next; /* * This holds the last append_value scalar copy or the last append_element * scalar copy - it can only be one of the two. It is needed because when * an object or list is built, the upper level object or list will get a * copy of the result value on close. Our routines modify the value after * close and need this to update that value if necessary. Which is the * case for some casts. */ agtype_value *last_updated_value; } agtype_parse_state; /* * agtype_iterator holds details of the type for each iteration. It also stores * an agtype varlena buffer, which can be directly accessed in some contexts. */ typedef enum { AGTI_ARRAY_START, AGTI_ARRAY_ELEM, AGTI_OBJECT_START, AGTI_OBJECT_KEY, AGTI_OBJECT_VALUE } agt_iterator_state; typedef struct agtype_iterator { /* Container being iterated */ agtype_container *container; uint32 num_elems; /* * Number of elements in children array (will be * num_pairs for objects) */ bool is_scalar; /* Pseudo-array scalar value? */ agtentry *children; /* agtentrys for child nodes */ /* Data proper. This points to the beginning of the variable-length data */ char *data_proper; /* Current item in buffer (up to num_elems) */ int curr_index; /* Data offset corresponding to current item */ uint32 curr_data_offset; /* * If the container is an object, we want to return keys and values * alternately; so curr_data_offset points to the current key, and * curr_value_offset points to the current value. */ uint32 curr_value_offset; /* Private state */ agt_iterator_state state; struct agtype_iterator *parent; } agtype_iterator; /* agtype parse state */ typedef struct agtype_in_state { agtype_parse_state *parse_state; agtype_value *res; } agtype_in_state; /* Support functions */ int reserve_from_buffer(StringInfo buffer, int len); short pad_buffer_to_int(StringInfo buffer); uint32 get_agtype_offset(const agtype_container *agtc, int index); uint32 get_agtype_length(const agtype_container *agtc, int index); int compare_agtype_containers_orderability(agtype_container *a, agtype_container *b); agtype_value *find_agtype_value_from_container(agtype_container *container, uint32 flags, agtype_value *key); agtype_value *get_ith_agtype_value_from_container(agtype_container *container, uint32 i); agtype_value *push_agtype_value(agtype_parse_state **pstate, agtype_iterator_token seq, agtype_value *agtval); agtype_iterator *agtype_iterator_init(agtype_container *container); agtype_iterator_token agtype_iterator_next(agtype_iterator **it, agtype_value *val, bool skip_nested); agtype *agtype_value_to_agtype(agtype_value *val); bool agtype_deep_contains(agtype_iterator **val, agtype_iterator **m_contained); void agtype_hash_scalar_value(const agtype_value *scalar_val, uint32 *hash); void agtype_hash_scalar_value_extended(const agtype_value *scalar_val, uint64 *hash, uint64 seed); void convert_extended_array(StringInfo buffer, agtentry *pheader, agtype_value *val); void convert_extended_object(StringInfo buffer, agtentry *pheader, agtype_value *val); Datum get_numeric_datum_from_agtype_value(agtype_value *agtv); bool is_numeric_result(agtype_value *lhs, agtype_value *rhs); void copy_agtype_value(agtype_parse_state* pstate, agtype_value* original_agtype_value, agtype_value **copied_agtype_value, bool is_top_level); /* agtype.c support functions */ /* * This is a shortcut for when using string constants to call * get_agtype_value_object_value. * * Note: sizeof() works here because we use string constants. Normally, * however, you should not use sizeof() in place of strlen(). * * Note: We also subtract 1 from the value because sizeof() a string constant * includes the null terminator whereas strlen() does not and neither does * the string representation in agtype_value. */ #define GET_AGTYPE_VALUE_OBJECT_VALUE(agtv_object, search_key) \ get_agtype_value_object_value(agtv_object, search_key, \ sizeof(search_key) - 1) agtype_value *get_agtype_value_object_value(const agtype_value *agtv_object, char *search_key, int search_key_length); char *agtype_to_cstring(StringInfo out, agtype_container *in, int estimated_len); char *agtype_to_cstring_indent(StringInfo out, agtype_container *in, int estimated_len); size_t check_string_length(size_t len); Datum integer_to_agtype(int64 i); Datum float_to_agtype(float8 f); Datum string_to_agtype(char *s); Datum boolean_to_agtype(bool b); void uniqueify_agtype_object(agtype_value *object); char *agtype_value_type_to_string(enum agtype_value_type type); bool is_decimal_needed(char *numstr); int compare_agtype_scalar_values(agtype_value *a, agtype_value *b); agtype_value *alter_property_value(agtype_value *properties, char *var_name, agtype *new_v, bool remove_property); void remove_null_from_agtype_object(agtype_value *object); agtype_value *alter_properties(agtype_value *original_properties, agtype *new_properties); agtype *get_one_agtype_from_variadic_args(FunctionCallInfo fcinfo, int variadic_offset, int expected_nargs); Datum make_vertex(Datum id, Datum label, Datum properties); Datum make_edge(Datum id, Datum startid, Datum endid, Datum label, Datum properties); Datum make_path(List *path); Datum column_get_datum(TupleDesc tupdesc, HeapTuple tuple, int column, const char *attname, Oid typid, bool isnull); agtype_value *agtype_value_build_vertex(graphid id, char *label, Datum properties); agtype_value *agtype_value_build_edge(graphid id, char *label, graphid end_id, graphid start_id, Datum properties); agtype_value *get_agtype_value(char *funcname, agtype *agt_arg, enum agtype_value_type type, bool error); bool is_agtype_null(agtype *agt_arg); agtype_value *string_to_agtype_value(char *s); agtype_value *integer_to_agtype_value(int64 int_value); void add_agtype(Datum val, bool is_null, agtype_in_state *result, Oid val_type, bool key_scalar); agtype_value *extract_entity_properties(agtype *object, bool error_on_scalar); agtype_iterator *get_next_list_element(agtype_iterator *it, agtype_container *agtc, agtype_value *elem); void pfree_agtype_value(agtype_value* value); void pfree_agtype_value_content(agtype_value* value); void pfree_agtype_in_state(agtype_in_state* value); /* Oid accessors for AGTYPE */ Oid get_AGTYPEOID(void); Oid get_AGTYPEARRAYOID(void); void clear_global_Oids_AGTYPE(void); #define AGTYPEOID get_AGTYPEOID() #define AGTYPEARRAYOID get_AGTYPEARRAYOID() #endif age-PG16-v1.5.0-rc0/src/include/utils/agtype_ext.h000066400000000000000000000026761454606241200215070ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_AGTYPE_EXT_H #define AG_AGTYPE_EXT_H #include "postgres.h" #include "utils/agtype.h" /* * Function serializes the data into the buffer provided. * Returns false if the type is not defined. Otherwise, true. */ bool ag_serialize_extended_type(StringInfo buffer, agtentry *agtentry, agtype_value *scalar_val); /* * Function deserializes the data from the buffer pointed to by base_addr. * NOTE: This function writes to the error log and exits for any UNKNOWN * AGT_HEADER type. */ void ag_deserialize_extended_type(char *base_addr, uint32 offset, agtype_value *result); #endif age-PG16-v1.5.0-rc0/src/include/utils/agtype_parser.h000066400000000000000000000131671454606241200222000ustar00rootroot00000000000000/* * For PostgreSQL Database Management System: * (formerly known as Postgres, then as Postgres95) * * Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group * * Portions Copyright (c) 1994, The Regents of the University of California * * Permission to use, copy, modify, and distribute this software and its documentation for any purpose, * without fee, and without a written agreement is hereby granted, provided that the above copyright notice * and this paragraph and the following two paragraphs appear in all copies. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA * HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ /* * Declarations for agtype parser. * * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California */ #ifndef AG_AGTYPE_PARSER_H #define AG_AGTYPE_PARSER_H #include "lib/stringinfo.h" typedef enum { AGTYPE_TOKEN_INVALID, AGTYPE_TOKEN_STRING, AGTYPE_TOKEN_INTEGER, AGTYPE_TOKEN_FLOAT, AGTYPE_TOKEN_NUMERIC, AGTYPE_TOKEN_OBJECT_START, AGTYPE_TOKEN_OBJECT_END, AGTYPE_TOKEN_ARRAY_START, AGTYPE_TOKEN_ARRAY_END, AGTYPE_TOKEN_COMMA, AGTYPE_TOKEN_COLON, AGTYPE_TOKEN_ANNOTATION, AGTYPE_TOKEN_IDENTIFIER, AGTYPE_TOKEN_TRUE, AGTYPE_TOKEN_FALSE, AGTYPE_TOKEN_NULL, AGTYPE_TOKEN_END } agtype_token_type; /* * All the fields in this structure should be treated as read-only. * * If strval is not null, then it should contain the de-escaped value * of the lexeme if it's a string. Otherwise most of these field names * should be self-explanatory. * * line_number and line_start are principally for use by the parser's * error reporting routines. * token_terminator and prev_token_terminator point to the character * AFTER the end of the token, i.e. where there would be a nul byte * if we were using nul-terminated strings. */ typedef struct agtype_lex_context { char *input; int input_length; char *token_start; char *token_terminator; char *prev_token_terminator; agtype_token_type token_type; int lex_level; int line_number; char *line_start; StringInfo strval; } agtype_lex_context; typedef void (*agtype_struct_action)(void *state); typedef void (*agtype_ofield_action)(void *state, char *fname, bool isnull); typedef void (*agtype_aelem_action)(void *state, bool isnull); typedef void (*agtype_scalar_action)(void *state, char *token, agtype_token_type tokentype, char *annotation); typedef void (*agtype_annotation_action)(void *state, char *annotation); /* * Semantic Action structure for use in parsing agtype. * Any of these actions can be NULL, in which case nothing is done at that * point, Likewise, semstate can be NULL. Using an all-NULL structure amounts * to doing a pure parse with no side-effects, and is therefore exactly * what the agtype input routines do. * * The 'fname' and 'token' strings passed to these actions are palloc'd. * They are not free'd or used further by the parser, so the action function * is free to do what it wishes with them. */ typedef struct agtype_sem_action { void *semstate; agtype_struct_action object_start; agtype_struct_action object_end; agtype_struct_action array_start; agtype_struct_action array_end; agtype_ofield_action object_field_start; agtype_ofield_action object_field_end; agtype_aelem_action array_element_start; agtype_aelem_action array_element_end; agtype_scalar_action scalar; /* annotations (typecast) */ agtype_annotation_action agtype_annotation; } agtype_sem_action; /* * parse_agtype will parse the string in the lex calling the * action functions in sem at the appropriate points. It is * up to them to keep what state they need in semstate. If they * need access to the state of the lexer, then its pointer * should be passed to them as a member of whatever semstate * points to. If the action pointers are NULL the parser * does nothing and just continues. */ void parse_agtype(agtype_lex_context *lex, agtype_sem_action *sem); /* * constructors for agtype_lex_context, with or without strval element. * If supplied, the strval element will contain a de-escaped version of * the lexeme. However, doing this imposes a performance penalty, so * it should be avoided if the de-escaped lexeme is not required. * * If you already have the agtype as a text* value, use the first of these * functions, otherwise use ag_make_agtype_lex_context_cstring_len(). */ agtype_lex_context *make_agtype_lex_context(text *t, bool need_escapes); agtype_lex_context *make_agtype_lex_context_cstring_len(char *str, int len, bool need_escapes); /* * Utility function to check if a string is a valid agtype number. * * str argument does not need to be null-terminated. */ extern bool is_valid_agtype_number(const char *str, int len); extern char *agtype_encode_date_time(char *buf, Datum value, Oid typid); #endif age-PG16-v1.5.0-rc0/src/include/utils/agtype_raw.h000066400000000000000000000033021454606241200214630ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /* * This module provides functions for directly building agtype * without using agtype_value. */ #ifndef AG_AGTYPE_RAW_H #define AG_AGTYPE_RAW_H #include "postgres.h" #include "utils/agtype.h" #include "utils/agtype_ext.h" /* * We declare the agtype_build_state here, and in this way, so that it may be * used elsewhere. However, we keep the contents private by defining it in * agtype_raw.c */ typedef struct agtype_build_state agtype_build_state; agtype_build_state *init_agtype_build_state(uint32 size, uint32 header_flag); agtype *build_agtype(agtype_build_state *bstate); void pfree_agtype_build_state(agtype_build_state *bstate); void write_string(agtype_build_state *bstate, char *str); void write_graphid(agtype_build_state *bstate, graphid graphid); void write_container(agtype_build_state *bstate, agtype *agtype); void write_extended(agtype_build_state *bstate, agtype *val, uint32 header); #endif age-PG16-v1.5.0-rc0/src/include/utils/graphid.h000066400000000000000000000042221454606241200207410ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_GRAPHID_H #define AG_GRAPHID_H #include "postgres.h" #include "fmgr.h" #include "utils/fmgroids.h" #include "utils/syscache.h" #include "catalog/ag_namespace.h" #include "catalog/pg_type.h" typedef int64 graphid; #define F_GRAPHIDEQ F_INT8EQ #define LABEL_ID_MIN 1 #define LABEL_ID_MAX PG_UINT16_MAX #define INVALID_LABEL_ID 0 #define label_id_is_valid(id) (id >= LABEL_ID_MIN && id <= LABEL_ID_MAX) #define ENTRY_ID_MIN INT64CONST(1) #define ENTRY_ID_MAX INT64CONST(281474976710655) // 0x0000ffffffffffff #define INVALID_ENTRY_ID INT64CONST(0) #define entry_id_is_valid(id) (id >= ENTRY_ID_MIN && id <= ENTRY_ID_MAX) #define ENTRY_ID_BITS (32 + 16) #define ENTRY_ID_MASK INT64CONST(0x0000ffffffffffff) #define DATUM_GET_GRAPHID(d) DatumGetInt64(d) #define GRAPHID_GET_DATUM(x) Int64GetDatum(x) #define AG_GETARG_GRAPHID(a) DATUM_GET_GRAPHID(PG_GETARG_DATUM(a)) #define AG_RETURN_GRAPHID(x) return GRAPHID_GET_DATUM(x) /* Oid accessors for GRAPHID */ #define GRAPHIDOID get_GRAPHIDOID() #define GRAPHIDARRAYOID get_GRAPHIDARRAYOID() #define GET_LABEL_ID(id) \ (((uint64)id) >> ENTRY_ID_BITS) graphid make_graphid(const int32 label_id, const int64 entry_id); int32 get_graphid_label_id(const graphid gid); int64 get_graphid_entry_id(const graphid gid); Oid get_GRAPHIDOID(void); Oid get_GRAPHIDARRAYOID(void); void clear_global_Oids_GRAPHID(void); #endif age-PG16-v1.5.0-rc0/src/include/utils/load/000077500000000000000000000000001454606241200200715ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/src/include/utils/load/ag_load_edges.h000066400000000000000000000051041454606241200227770ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_LOAD_EDGES_H #define AG_LOAD_EDGES_H #include #include #include #include #include #include "postgres.h" #include "access/heapam.h" #include "access/xact.h" #include "catalog/dependency.h" #include "catalog/namespace.h" #include "catalog/objectaddress.h" #include "catalog/pg_class_d.h" #include "commands/defrem.h" #include "commands/sequence.h" #include "commands/tablecmds.h" #include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodes.h" #include "nodes/parsenodes.h" #include "nodes/pg_list.h" #include "nodes/plannodes.h" #include "nodes/primnodes.h" #include "nodes/value.h" #include "parser/parse_node.h" #include "parser/parser.h" #include "storage/lockdefs.h" #include "tcop/dest.h" #include "tcop/utility.h" #include "utils/acl.h" #include "utils/builtins.h" #include "utils/inval.h" #include "utils/lsyscache.h" #include "utils/rel.h" #include "catalog/ag_graph.h" #include "catalog/ag_label.h" #include "commands/label_commands.h" #include "utils/ag_cache.h" #include "utils/agtype.h" #include "utils/graphid.h" typedef struct { size_t row; char **header; size_t *header_len; size_t header_num; char **fields; size_t *fields_len; size_t alloc; size_t cur_field; int error; size_t header_row_length; size_t curr_row_length; char *graph_name; Oid graph_oid; char *object_name; int object_id; char *start_vertex; char *end_vertex; } csv_edge_reader; void edge_field_cb(void *field, size_t field_len, void *data); void edge_row_cb(int delim __attribute__((unused)), void *data); int create_edges_from_csv_file(char *file_path, char *graph_name, Oid graph_oid, char *object_name, int object_id ); #endif //AG_LOAD_EDGES_H age-PG16-v1.5.0-rc0/src/include/utils/load/ag_load_labels.h000066400000000000000000000053701454606241200231570ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_LOAD_LABELS_H #define AG_LOAD_LABELS_H #include #include #include #include #include #include "postgres.h" #include "access/heapam.h" #include "access/xact.h" #include "catalog/dependency.h" #include "catalog/namespace.h" #include "catalog/objectaddress.h" #include "catalog/pg_class_d.h" #include "commands/defrem.h" #include "commands/sequence.h" #include "commands/tablecmds.h" #include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodes.h" #include "nodes/parsenodes.h" #include "nodes/pg_list.h" #include "nodes/plannodes.h" #include "nodes/primnodes.h" #include "nodes/value.h" #include "parser/parse_node.h" #include "parser/parser.h" #include "storage/lockdefs.h" #include "tcop/dest.h" #include "tcop/utility.h" #include "utils/acl.h" #include "utils/builtins.h" #include "utils/inval.h" #include "utils/lsyscache.h" #include "utils/rel.h" #include "catalog/ag_graph.h" #include "catalog/ag_label.h" #include "commands/label_commands.h" #include "utils/ag_cache.h" #include "utils/agtype.h" #include "utils/graphid.h" #define AGE_VERTIX 1 #define AGE_EDGE 2 struct counts { long unsigned fields; long unsigned allvalues; long unsigned rows; }; typedef struct { size_t row; char **header; size_t *header_len; size_t header_num; char **fields; size_t *fields_len; size_t alloc; size_t cur_field; int error; size_t header_row_length; size_t curr_row_length; char *graph_name; Oid graph_oid; char *object_name; int object_id; bool id_field_exists; } csv_vertex_reader; void vertex_field_cb(void *field, size_t field_len, void *data); void vertex_row_cb(int delim __attribute__((unused)), void *data); int create_labels_from_csv_file(char *file_path, char *graph_name, Oid graph_oid, char *object_name, int object_id, bool id_field_exists); #endif //AG_LOAD_LABELS_H age-PG16-v1.5.0-rc0/src/include/utils/load/age_load.h000066400000000000000000000046521454606241200220040ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "postgres.h" #include "access/heapam.h" #include "access/xact.h" #include "catalog/dependency.h" #include "catalog/namespace.h" #include "catalog/objectaddress.h" #include "catalog/pg_class_d.h" #include "commands/defrem.h" #include "commands/sequence.h" #include "commands/tablecmds.h" #include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodes.h" #include "nodes/parsenodes.h" #include "nodes/pg_list.h" #include "nodes/plannodes.h" #include "nodes/primnodes.h" #include "nodes/value.h" #include "parser/parse_node.h" #include "parser/parser.h" #include "storage/lockdefs.h" #include "tcop/dest.h" #include "tcop/utility.h" #include "utils/acl.h" #include "utils/builtins.h" #include "utils/inval.h" #include "utils/lsyscache.h" #include "utils/rel.h" #include "catalog/ag_graph.h" #include "catalog/ag_label.h" #include "commands/label_commands.h" #include "utils/ag_cache.h" #include "utils/agtype.h" #include "utils/graphid.h" #ifndef AGE_ENTITY_CREATOR_H #define AGE_ENTITY_CREATOR_H agtype* create_empty_agtype(void); agtype* create_agtype_from_list(char **header, char **fields, size_t fields_len, int64 vertex_id); agtype* create_agtype_from_list_i(char **header, char **fields, size_t fields_len, size_t start_index); void insert_vertex_simple(Oid graph_oid, char *label_name, graphid vertex_id, agtype *vertex_properties); void insert_edge_simple(Oid graph_oid, char *label_name, graphid edge_id, graphid start_id, graphid end_id, agtype* end_properties); #endif //AGE_ENTITY_CREATOR_H age-PG16-v1.5.0-rc0/src/include/utils/load/csv.h000066400000000000000000000106001454606241200210320ustar00rootroot00000000000000// // Created by Shoaib on 12/5/2021. // /* libcsv - parse and write csv data Copyright (C) 2008-2021 Robert Gamble This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef LIBCSV_H__ #define LIBCSV_H__ #include #include #ifdef __cplusplus extern "C" { #endif #define CSV_MAJOR 3 #define CSV_MINOR 0 #define CSV_RELEASE 3 /* Error Codes */ #define CSV_SUCCESS 0 #define CSV_EPARSE 1 /* Parse error in strict mode */ #define CSV_ENOMEM 2 /* Out of memory while increasing buffer size */ #define CSV_ETOOBIG 3 /* Buffer larger than SIZE_MAX needed */ #define CSV_EINVALID 4 /* Invalid code,should never be received from csv_error*/ /* parser options */ #define CSV_STRICT 1 /* enable strict mode */ #define CSV_REPALL_NL 2 /* report all unquoted carriage returns and linefeeds */ #define CSV_STRICT_FINI 4 /* causes csv_fini to return CSV_EPARSE if last field is quoted and doesn't contain ending quote */ #define CSV_APPEND_NULL 8 /* Ensure that all fields are null-terminated */ #define CSV_EMPTY_IS_NULL 16 /* Pass null pointer to cb1 function when empty, unquoted fields are encountered */ /* Character values */ #define CSV_TAB 0x09 #define CSV_SPACE 0x20 #define CSV_CR 0x0d #define CSV_LF 0x0a #define CSV_COMMA 0x2c #define CSV_QUOTE 0x22 struct csv_parser { int pstate; /* Parser state */ int quoted; /* Is the current field a quoted field? */ size_t spaces; /* Number of continuous spaces after quote or in a non-quoted field */ unsigned char * entry_buf; /* Entry buffer */ size_t entry_pos; /* Current position in entry_buf (and current size of entry) */ size_t entry_size; /* Size of entry buffer */ int status; /* Operation status */ unsigned char options; unsigned char quote_char; unsigned char delim_char; int (*is_space)(unsigned char); int (*is_term)(unsigned char); size_t blk_size; void *(*malloc_func)(size_t); /* not used */ void *(*realloc_func)(void *, size_t); /* function used to allocate buffer memory */ void (*free_func)(void *); /* function used to free buffer memory */ }; /* Function Prototypes */ int csv_init(struct csv_parser *p, unsigned char options); int csv_fini(struct csv_parser *p, void (*cb1)(void *, size_t, void *), void (*cb2)(int, void *), void *data); void csv_free(struct csv_parser *p); int csv_error(const struct csv_parser *p); const char * csv_strerror(int error); size_t csv_parse(struct csv_parser *p, const void *s, size_t len, void (*cb1)(void *, size_t, void *), void (*cb2)(int, void *), void *data); size_t csv_write(void *dest, size_t dest_size, const void *src, size_t src_size); int csv_fwrite(FILE *fp, const void *src, size_t src_size); size_t csv_write2(void *dest, size_t dest_size, const void *src, size_t src_size, unsigned char quote); int csv_fwrite2(FILE *fp, const void *src, size_t src_size, unsigned char quote); int csv_get_opts(const struct csv_parser *p); int csv_set_opts(struct csv_parser *p, unsigned char options); void csv_set_delim(struct csv_parser *p, unsigned char c); void csv_set_quote(struct csv_parser *p, unsigned char c); unsigned char csv_get_delim(const struct csv_parser *p); unsigned char csv_get_quote(const struct csv_parser *p); void csv_set_space_func(struct csv_parser *p, int (*f)(unsigned char)); void csv_set_term_func(struct csv_parser *p, int (*f)(unsigned char)); void csv_set_realloc_func(struct csv_parser *p, void *(*)(void *, size_t)); void csv_set_free_func(struct csv_parser *p, void (*)(void *)); void csv_set_blk_size(struct csv_parser *p, size_t); size_t csv_get_buffer_size(const struct csv_parser *p); #ifdef __cplusplus } #endif #endif age-PG16-v1.5.0-rc0/src/include/utils/name_validation.h000066400000000000000000000261701454606241200224630ustar00rootroot00000000000000/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef AG_NAME_VALIDATION_H #define AG_NAME_VALIDATION_H /* * Following ID_Start and ID_Continue values are taken from: * https://util.unicode.org/UnicodeJsps/list-unicodeset.jsp */ #define REGEX_ID_STRT \ "A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑ ˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-Ρ Σ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײ ؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯ ݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪ ࡰ-ࢇࢉ-ࢎࢠ-ࣉऄ-हऽॐक़-ॡॱ-ঀঅ-ঌ এঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱ ৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜ ਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હ ઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହ ଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞ டணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హ ఽౘ-ౚౝౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹ ಽೝೞೠೡೱೲഄ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖ ൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะ าำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽ ເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿ ၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍ ა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍ ነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕ ጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚ ᚠ-ᛪᛮ-ᛸᜀ-ᜑᜟ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰ ក-ឳៗៜᠠ-ᡸᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭ ᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭌ ᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-Ჺ Ჽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕ ἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼ ιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼ ⁱⁿₐ-ₜℂℇℊ-ℓℕ℘-ℝℤΩℨK-ℹℼ-ℿ ⅅ-ⅉⅎⅠ-ↈⰀ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧ ⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎ ⷐ-ⷖⷘ-ⷞ々-〇〡-〩〱-〵〸-〼ぁ-ゖ ゛-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆿㇰ-ㇿ 㐀-䶿一-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝ ꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꟊꟐꟑꟓꟕ-ꟙꟲ-ꠁ ꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾ ꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾ ꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽ ꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦ ꬨ-ꬮꬰ-ꭚꭜ-ꭩꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ 豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּ מּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴ ﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲ ᅳ-ᅵ𐀀-𐀋𐀍-𐀦𐀨-𐀺𐀼𐀽𐀿-𐁍𐁐-𐁝𐂀-𐃺 𐅀-𐅴𐊀-𐊜𐊠-𐋐𐌀-𐌟𐌭-𐍊𐍐-𐍵𐎀-𐎝 𐎠-𐏃𐏈-𐏏𐏑-𐏕𐐀-𐒝𐒰-𐓓𐓘-𐓻𐔀-𐔧 𐔰-𐕣𐕰-𐕺𐕼-𐖊𐖌-𐖒𐖔𐖕𐖗-𐖡𐖣-𐖱𐖳-𐖹 𐖻𐖼𐘀-𐜶𐝀-𐝕𐝠-𐝧𐞀-𐞅𐞇-𐞰𐞲-𐞺𐠀-𐠅 𐠈𐠊-𐠵𐠷𐠸𐠼𐠿-𐡕𐡠-𐡶𐢀-𐢞𐣠-𐣲𐣴𐣵 𐤀-𐤕𐤠-𐤹𐦀-𐦷𐦾𐦿𐨀𐨐-𐨓𐨕-𐨗𐨙-𐨵 𐩠-𐩼𐪀-𐪜𐫀-𐫇𐫉-𐫤𐬀-𐬵𐭀-𐭕𐭠-𐭲 𐮀-𐮑𐰀-𐱈𐲀-𐲲𐳀-𐳲𐴀-𐴣𐺀-𐺩𐺰𐺱𐼀-𐼜 𐼧𐼰-𐽅𐽰-𐾁𐾰-𐿄𐿠-𐿶𑀃-𑀷𑁱𑁲𑁵𑂃-𑂯 𑃐-𑃨𑄃-𑄦𑅄𑅇𑅐-𑅲𑅶𑆃-𑆲𑇁-𑇄𑇚𑇜𑈀-𑈑 𑈓-𑈫𑈿𑉀𑊀-𑊆𑊈𑊊-𑊍𑊏-𑊝𑊟-𑊨𑊰-𑋞 𑌅-𑌌𑌏𑌐𑌓-𑌨𑌪-𑌰𑌲𑌳𑌵-𑌹𑌽𑍐𑍝-𑍡 𑐀-𑐴𑑇-𑑊𑑟-𑑡𑒀-𑒯𑓄𑓅𑓇𑖀-𑖮𑗘-𑗛 𑘀-𑘯𑙄𑚀-𑚪𑚸𑜀-𑜚𑝀-𑝆𑠀-𑠫𑢠-𑣟𑣿-𑤆 𑤉𑤌-𑤓𑤕𑤖𑤘-𑤯𑤿𑥁𑦠-𑦧𑦪-𑧐𑧡𑧣𑨀𑨋-𑨲 𑨺𑩐𑩜-𑪉𑪝𑪰-𑫸𑰀-𑰈𑰊-𑰮𑱀𑱲-𑲏𑴀-𑴆 𑴈𑴉𑴋-𑴰𑵆𑵠-𑵥𑵧𑵨𑵪-𑶉𑶘𑻠-𑻲𑼂𑼄-𑼐 𑼒-𑼳𑾰𒀀-𒎙𒐀-𒑮𒒀-𒕃𒾐-𒿰𓀀-𓐯𓑁-𓑆 𔐀-𔙆𖠀-𖨸𖩀-𖩞𖩰-𖪾𖫐-𖫭𖬀-𖬯𖭀-𖭃 𖭣-𖭷𖭽-𖮏𖹀-𖹿𖼀-𖽊𖽐𖾓-𖾟𖿠𖿡𖿣𗀀-𘟷 𘠀-𘳕𘴀-𘴈𚿰-𚿳𚿵-𚿻𚿽𚿾𛀀-𛄢𛄲𛅐-𛅒 𛅕𛅤-𛅧𛅰-𛋻𛰀-𛱪𛱰-𛱼𛲀-𛲈𛲐-𛲙𝐀-𝑔 𝑖-𝒜𝒞𝒟𝒢𝒥𝒦𝒩-𝒬𝒮-𝒹𝒻𝒽-𝓃𝓅-𝔅 𝔇-𝔊𝔍-𝔔𝔖-𝔜𝔞-𝔹𝔻-𝔾𝕀-𝕄𝕆𝕊-𝕐 𝕒-𝚥𝚨-𝛀𝛂-𝛚𝛜-𝛺𝛼-𝜔𝜖-𝜴𝜶-𝝎 𝝐-𝝮𝝰-𝞈𝞊-𝞨𝞪-𝟂𝟄-𝟋𝼀-𝼞𝼥-𝼪 𞀰-𞁭𞄀-𞄬𞄷-𞄽𞅎𞊐-𞊭𞋀-𞋫𞓐-𞓫𞟠-𞟦 𞟨-𞟫𞟭𞟮𞟰-𞟾𞠀-𞣄𞤀-𞥃𞥋𞸀-𞸃𞸅-𞸟 𞸡𞸢𞸤𞸧𞸩-𞸲𞸴-𞸷𞸹𞸻𞹂𞹇𞹉𞹋𞹍-𞹏𞹑𞹒 𞹔𞹗𞹙𞹛𞹝𞹟𞹡𞹢𞹤𞹧-𞹪𞹬-𞹲𞹴-𞹷𞹹-𞹼 𞹾𞺀-𞺉𞺋-𞺛𞺡-𞺣𞺥-𞺩𞺫-𞺻𠀀-𪛟𪜀-𫜹 𫝀-𫠝𫠠-𬺡𬺰-𮯠丽-𪘀𰀀-𱍊𱍐-𲎯" #define REGEX_ID_CONT \ "0-9A-Z_a-zªµ·ºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮ̀-ʹͶͷͺ-ͽͿΆ-ΊΌΎ-ΡΣ-ϵϷ-ҁ҃-҇Ҋ-ԯԱ-Ֆՙՠ-ֈ֑-ׇֽֿׁׂׅׄא-תׯ-ײؐ-ؚؠ-٩ٮ-ۓە-ۜ۟-۪ۨ-ۼۿܐ-݊ݍ-ޱ߀-ߵߺ߽ࠀ-࠭ࡀ-࡛ࡠ-ࡪࡰ-ࢇࢉ-ࢎ࢘-ࣣ࣡-ॣ०-९ॱ-ঃঅ-ঌএঐও-নপ-রলশ-হ়-ৄেৈো-ৎৗড়ঢ়য়-ৣ০-ৱৼ৾ਁ-ਃਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹ਼ਾ-ੂੇੈੋ-੍ੑਖ਼-ੜਫ਼੦-ੵઁ-ઃઅ-ઍએ-ઑઓ-નપ-રલળવ-હ઼-ૅે-ૉો-્ૐૠ-ૣ૦-૯ૹ-૿ଁ-ଃଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହ଼-ୄେୈୋ-୍୕-ୗଡ଼ଢ଼ୟ-ୣ୦-୯ୱஂஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹா-ூெ-ைொ-்ௐௗ௦-௯ఀ-ఌఎ-ఐఒ-నప-హ఼-ౄె-ైొ-్ౕౖౘ-ౚౝౠ-ౣ౦-౯ಀ-ಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹ಼-ೄೆ-ೈೊ-್ೕೖೝೞೠ-ೣ೦-೯ೱ-ೳഀ-ഌഎ-ഐഒ-ൄെ-ൈൊ-ൎൔ-ൗൟ-ൣ൦-൯ൺ-ൿඁ-ඃඅ-ඖක-නඳ-රලව-ෆ්ා-ුූෘ-ෟ෦-෯ෲෳก-ฺเ-๎๐-๙ກຂຄຆ-ຊຌ-ຣລວ-ຽເ-ໄໆ່-໎໐-໙ໜ-ໟༀ༘༙༠-༩༹༵༷༾-ཇཉ-ཬཱ-྄྆-ྗྙ-ྼ࿆က-၉ၐ-ႝႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚ፝-፟፩-፱ᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛸᜀ-᜕ᜟ-᜴ᝀ-ᝓᝠ-ᝬᝮ-ᝰᝲᝳក-៓ៗៜ៝០-៩᠋-᠍᠏-᠙ᠠ-ᡸᢀ-ᢪᢰ-ᣵᤀ-ᤞᤠ-ᤫᤰ-᤻᥆-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉ᧐-᧚ᨀ-ᨛᨠ-ᩞ᩠-᩿᩼-᪉᪐-᪙ᪧ᪰-᪽ᪿ-ᫎᬀ-ᭌ᭐-᭙᭫-᭳ᮀ-᯳ᰀ-᰷᱀-᱉ᱍ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿ᳐-᳔᳒-ᳺᴀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼ‿⁀⁔ⁱⁿₐ-ₜ⃐-⃥⃜⃡-⃰ℂℇℊ-ℓℕ℘-ℝℤΩℨK-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-ⳤⳫ-ⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯ⵿-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⷠ-ⷿ々-〇〡-〯〱-〵〸-〼ぁ-ゖ゙-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆿㇰ-ㇿ㐀-䶿一-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘫꙀ-꙯ꙴ-꙽ꙿ-꛱ꜗ-ꜟꜢ-ꞈꞋ-ꟊꟐꟑꟓꟕ-ꟙꟲ-ꠧ꠬ꡀ-ꡳꢀ-ꣅ꣐-꣙꣠-ꣷꣻꣽ-꤭ꤰ-꥓ꥠ-ꥼꦀ-꧀ꧏ-꧙ꧠ-ꧾꨀ-ꨶꩀ-ꩍ꩐-꩙ꩠ-ꩶꩺ-ꫂꫛ-ꫝꫠ-ꫯꫲ-꫶ꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭩꭰ-ꯪ꯬꯭꯰-꯹가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻ︀-️︠-︯︳︴﹍-﹏ﹰ-ﹴﹶ-ﻼ0-9A-Z_a-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ𐀀-𐀋𐀍-𐀦𐀨-𐀺𐀼𐀽𐀿-𐁍𐁐-𐁝𐂀-𐃺𐅀-𐅴𐇽𐊀-𐊜𐊠-𐋐𐋠𐌀-𐌟𐌭-𐍊𐍐-𐍺𐎀-𐎝𐎠-𐏃𐏈-𐏏𐏑-𐏕𐐀-𐒝𐒠-𐒩𐒰-𐓓𐓘-𐓻𐔀-𐔧𐔰-𐕣𐕰-𐕺𐕼-𐖊𐖌-𐖒𐖔𐖕𐖗-𐖡𐖣-𐖱𐖳-𐖹𐖻𐖼𐘀-𐜶𐝀-𐝕𐝠-𐝧𐞀-𐞅𐞇-𐞰𐞲-𐞺𐠀-𐠅𐠈𐠊-𐠵𐠷𐠸𐠼𐠿-𐡕𐡠-𐡶𐢀-𐢞𐣠-𐣲𐣴𐣵𐤀-𐤕𐤠-𐤹𐦀-𐦷𐦾𐦿𐨀-𐨃𐨅𐨆𐨌-𐨓𐨕-𐨗𐨙-𐨵𐨸-𐨿𐨺𐩠-𐩼𐪀-𐪜𐫀-𐫇𐫉-𐫦𐬀-𐬵𐭀-𐭕𐭠-𐭲𐮀-𐮑𐰀-𐱈𐲀-𐲲𐳀-𐳲𐴀-𐴧𐴰-𐴹𐺀-𐺩𐺫𐺬𐺰𐺱𐻽-𐼜𐼧𐼰-𐽐𐽰-𐾅𐾰-𐿄𐿠-𐿶𑀀-𑁆𑁦-𑁵𑁿-𑂺𑃂𑃐-𑃨𑃰-𑃹𑄀-𑄴𑄶-𑄿𑅄-𑅇𑅐-𑅳𑅶𑆀-𑇄𑇉-𑇌𑇎-𑇚𑇜𑈀-𑈑𑈓-𑈷𑈾-𑉁𑊀-𑊆𑊈𑊊-𑊍𑊏-𑊝𑊟-𑊨𑊰-𑋪𑋰-𑋹𑌀-𑌃𑌅-𑌌𑌏𑌐𑌓-𑌨𑌪-𑌰𑌲𑌳𑌵-𑌹𑌻-𑍄𑍇𑍈𑍋-𑍍𑍐𑍗𑍝-𑍣𑍦-𑍬𑍰-𑍴𑐀-𑑊𑑐-𑑙𑑞-𑑡𑒀-𑓅𑓇𑓐-𑓙𑖀-𑖵𑖸-𑗀𑗘-𑗝𑘀-𑙀𑙄𑙐-𑙙𑚀-𑚸𑛀-𑛉𑜀-𑜚𑜝-𑜫𑜰-𑜹𑝀-𑝆𑠀-𑠺𑢠-𑣩𑣿-𑤆𑤉𑤌-𑤓𑤕𑤖𑤘-𑤵𑤷𑤸𑤻-𑥃𑥐-𑥙𑦠-𑦧𑦪-𑧗𑧚-𑧡𑧣𑧤𑨀-𑨾𑩇𑩐-𑪙𑪝𑪰-𑫸𑰀-𑰈𑰊-𑰶𑰸-𑱀𑱐-𑱙𑱲-𑲏𑲒-𑲧𑲩-𑲶𑴀-𑴆𑴈𑴉𑴋-𑴶𑴺𑴼𑴽𑴿-𑵇𑵐-𑵙𑵠-𑵥𑵧𑵨𑵪-𑶎𑶐𑶑𑶓-𑶘𑶠-𑶩𑻠-𑻶𑼀-𑼐𑼒-𑼺𑼾-𑽂𑽐-𑽙𑾰𒀀-𒎙𒐀-𒑮𒒀-𒕃𒾐-𒿰𓀀-𓐯𓑀-𓑕𔐀-𔙆𖠀-𖨸𖩀-𖩞𖩠-𖩩𖩰-𖪾𖫀-𖫉𖫐-𖫭𖫰-𖫴𖬀-𖬶𖭀-𖭃𖭐-𖭙𖭣-𖭷𖭽-𖮏𖹀-𖹿𖼀-𖽊𖽏-𖾇𖾏-𖾟𖿠𖿡𖿣𖿤𖿰𖿱𗀀-𘟷𘠀-𘳕𘴀-𘴈𚿰-𚿳𚿵-𚿻𚿽𚿾𛀀-𛄢𛄲𛅐-𛅒𛅕𛅤-𛅧𛅰-𛋻𛰀-𛱪𛱰-𛱼𛲀-𛲈𛲐-𛲙𛲝𛲞𜼀-𜼭𜼰-𜽆𝅥-𝅩𝅭-𝅲𝅻-𝆂𝆅-𝆋𝆪-𝆭𝉂-𝉄𝐀-𝑔𝑖-𝒜𝒞𝒟𝒢𝒥𝒦𝒩-𝒬𝒮-𝒹𝒻𝒽-𝓃𝓅-𝔅𝔇-𝔊𝔍-𝔔𝔖-𝔜𝔞-𝔹𝔻-𝔾𝕀-𝕄𝕆𝕊-𝕐𝕒-𝚥𝚨-𝛀𝛂-𝛚𝛜-𝛺𝛼-𝜔𝜖-𝜴𝜶-𝝎𝝐-𝝮𝝰-𝞈𝞊-𝞨𝞪-𝟂𝟄-𝟋𝟎-𝟿𝨀-𝨶𝨻-𝩬𝩵𝪄𝪛-𝪟𝪡-𝪯𝼀-𝼞𝼥-𝼪𞀀-𞀆𞀈-𞀘𞀛-𞀡𞀣𞀤𞀦-𞀪𞀰-𞁭𞂏𞄀-𞄬𞄰-𞄽𞅀-𞅉𞅎𞊐-𞊮𞋀-𞋹𞓐-𞓹𞟠-𞟦𞟨-𞟫𞟭𞟮𞟰-𞟾𞠀-𞣄𞣐-𞣖𞤀-𞥋𞥐-𞥙𞸀-𞸃𞸅-𞸟𞸡𞸢𞸤𞸧𞸩-𞸲𞸴-𞸷𞸹𞸻𞹂𞹇𞹉𞹋𞹍-𞹏𞹑𞹒𞹔𞹗𞹙𞹛𞹝𞹟𞹡𞹢𞹤𞹧-𞹪𞹬-𞹲𞹴-𞹷𞹹-𞹼𞹾𞺀-𞺉𞺋-𞺛𞺡-𞺣𞺥-𞺩𞺫-𞺻🯰-🯹𠀀-𪛟𪜀-𫜹𫝀-𫠝𫠠-𬺡𬺰-𮯠丽-𪘀𰀀-𱍊𱍐-𲎯󠄀" #define REGEX_GRAPH_NAME \ "^[" REGEX_ID_STRT "_][" REGEX_ID_CONT "\\.\\-]*[" REGEX_ID_CONT "]$" #define REGEX_LABEL_NAME "^[" REGEX_ID_STRT "_][" REGEX_ID_CONT "]*$" #define MAX_GRAPH_NAME_LEN 63 #define MIN_GRAPH_NAME_LEN 3 #define MAX_LABEL_NAME_LEN 65535 #define MIN_LABEL_NAME_LEN 1 int is_valid_graph_name(const char *graph_name); int is_valid_label(char *label_name, char label_type); #endif age-PG16-v1.5.0-rc0/tools/000077500000000000000000000000001454606241200147405ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/tools/PerfectHash.pm000066400000000000000000000334771454606241200175100ustar00rootroot00000000000000# # For PostgreSQL Database Management System: # (formerly known as Postgres, then as Postgres95) # # Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group # # Portions Copyright (c) 1994, The Regents of the University of California # # Permission to use, copy, modify, and distribute this software and its documentation for any purpose, # without fee, and without a written agreement is hereby granted, provided that the above copyright notice # and this paragraph and the following two paragraphs appear in all copies. # # IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, # INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, # ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY # OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. # # THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA # HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # #---------------------------------------------------------------------- # # PerfectHash.pm # Perl module that constructs minimal perfect hash functions # # This code constructs a minimal perfect hash function for the given # set of keys, using an algorithm described in # "An optimal algorithm for generating minimal perfect hash functions" # by Czech, Havas and Majewski in Information Processing Letters, # 43(5):256-264, October 1992. # This implementation is loosely based on NetBSD's "nbperf", # which was written by Joerg Sonnenberger. # # The resulting hash function is perfect in the sense that if the presented # key is one of the original set, it will return the key's index in the set # (in range 0..N-1). However, the caller must still verify the match, # as false positives are possible. Also, the hash function may return # values that are out of range (negative or >= N), due to summing unrelated # hashtable entries. This indicates that the presented key is definitely # not in the set. # # # Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group # Portions Copyright (c) 1994, Regents of the University of California # # src/tools/PerfectHash.pm # #---------------------------------------------------------------------- package PerfectHash; use strict; use warnings; # At runtime, we'll compute two simple hash functions of the input key, # and use them to index into a mapping table. The hash functions are just # multiply-and-add in uint32 arithmetic, with different multipliers and # initial seeds. All the complexity in this module is concerned with # selecting hash parameters that will work and building the mapping table. # We support making case-insensitive hash functions, though this only # works for a strict-ASCII interpretation of case insensitivity, # ie, A-Z maps onto a-z and nothing else. my $case_fold = 0; # # Construct a C function implementing a perfect hash for the given keys. # The C function definition is returned as a string. # # The keys should be passed as an array reference. They can be any set # of Perl strings; it is caller's responsibility that there not be any # duplicates. (Note that the "strings" can be binary data, but hashing # e.g. OIDs has endianness hazards that callers must overcome.) # # The name to use for the function is specified as the second argument. # It will be a global function by default, but the caller may prepend # "static " to the result string if it wants a static function. # # Additional options can be specified as keyword-style arguments: # # case_fold => bool # If specified as true, the hash function is case-insensitive, for the # limited idea of case-insensitivity explained above. # # fixed_key_length => N # If specified, all keys are assumed to have length N bytes, and the # hash function signature will be just "int f(const void *key)" # rather than "int f(const void *key, size_t keylen)". # sub generate_hash_function { my ($keys_ref, $funcname, %options) = @_; # It's not worth passing this around as a parameter; just use a global. $case_fold = $options{case_fold} || 0; # Try different hash function parameters until we find a set that works # for these keys. The multipliers are chosen to be primes that are cheap # to calculate via shift-and-add, so don't change them without care. # (Commonly, random seeds are tried, but we want reproducible results # from this program so we don't do that.) my $hash_mult1 = 31; my $hash_mult2; my $hash_seed1; my $hash_seed2; my @subresult; FIND_PARAMS: foreach (127, 257, 521, 1033, 2053) { $hash_mult2 = $_; # "foreach $hash_mult2" doesn't work for ($hash_seed1 = 0; $hash_seed1 < 10; $hash_seed1++) { for ($hash_seed2 = 0; $hash_seed2 < 10; $hash_seed2++) { @subresult = _construct_hash_table( $keys_ref, $hash_mult1, $hash_mult2, $hash_seed1, $hash_seed2); last FIND_PARAMS if @subresult; } } } # Choke if we couldn't find a workable set of parameters. die "failed to generate perfect hash" if !@subresult; # Extract info from _construct_hash_table's result array. my $elemtype = $subresult[0]; my @hashtab = @{ $subresult[1] }; my $nhash = scalar(@hashtab); # OK, construct the hash function definition including the hash table. my $f = ''; $f .= sprintf "int\n"; if (defined $options{fixed_key_length}) { $f .= sprintf "%s(const void *key)\n{\n", $funcname; } else { $f .= sprintf "%s(const void *key, size_t keylen)\n{\n", $funcname; } $f .= sprintf "\tstatic const %s h[%d] = {\n", $elemtype, $nhash; for (my $i = 0; $i < $nhash; $i++) { $f .= sprintf "%s%6d,%s", ($i % 8 == 0 ? "\t\t" : " "), $hashtab[$i], ($i % 8 == 7 ? "\n" : ""); } $f .= sprintf "\n" if ($nhash % 8 != 0); $f .= sprintf "\t};\n\n"; $f .= sprintf "\tconst unsigned char *k = (const unsigned char *) key;\n"; $f .= sprintf "\tsize_t\t\tkeylen = %d;\n", $options{fixed_key_length} if (defined $options{fixed_key_length}); $f .= sprintf "\tuint32\t\ta = %d;\n", $hash_seed1; $f .= sprintf "\tuint32\t\tb = %d;\n\n", $hash_seed2; $f .= sprintf "\twhile (keylen--)\n\t{\n"; $f .= sprintf "\t\tunsigned char c = *k++"; $f .= sprintf " | 0x20" if $case_fold; # see comment below $f .= sprintf ";\n\n"; $f .= sprintf "\t\ta = a * %d + c;\n", $hash_mult1; $f .= sprintf "\t\tb = b * %d + c;\n", $hash_mult2; $f .= sprintf "\t}\n"; $f .= sprintf "\treturn h[a %% %d] + h[b %% %d];\n", $nhash, $nhash; $f .= sprintf "}\n"; return $f; } # Calculate a hash function as the run-time code will do. # # If we are making a case-insensitive hash function, we implement that # by OR'ing 0x20 into each byte of the key. This correctly transforms # upper-case ASCII into lower-case ASCII, while not changing digits or # dollar signs. (It does change '_', as well as other characters not # likely to appear in keywords; this has little effect on the hash's # ability to discriminate keywords.) sub _calc_hash { my ($key, $mult, $seed) = @_; my $result = $seed; for my $c (split //, $key) { my $cn = ord($c); $cn |= 0x20 if $case_fold; $result = ($result * $mult + $cn) % 4294967296; } return $result; } # Attempt to construct a mapping table for a minimal perfect hash function # for the given keys, using the specified hash parameters. # # Returns an array containing the mapping table element type name as the # first element, and a ref to an array of the table values as the second. # # Returns an empty array on failure; then caller should choose different # hash parameter(s) and try again. sub _construct_hash_table { my ($keys_ref, $hash_mult1, $hash_mult2, $hash_seed1, $hash_seed2) = @_; my @keys = @{$keys_ref}; # This algorithm is based on a graph whose edges correspond to the # keys and whose vertices correspond to entries of the mapping table. # A key's edge links the two vertices whose indexes are the outputs of # the two hash functions for that key. For K keys, the mapping # table must have at least 2*K+1 entries, guaranteeing that there's at # least one unused entry. (In principle, larger mapping tables make it # easier to find a workable hash and increase the number of inputs that # can be rejected due to touching unused hashtable entries. In practice, # neither effect seems strong enough to justify using a larger table.) my $nedges = scalar @keys; # number of edges my $nverts = 2 * $nedges + 1; # number of vertices # However, it would be very bad if $nverts were exactly equal to either # $hash_mult1 or $hash_mult2: effectively, that hash function would be # sensitive to only the last byte of each key. Cases where $nverts is a # multiple of either multiplier likewise lose information. (But $nverts # can't actually divide them, if they've been intelligently chosen as # primes.) We can avoid such problems by adjusting the table size. while ($nverts % $hash_mult1 == 0 || $nverts % $hash_mult2 == 0) { $nverts++; } # Initialize the array of edges. my @E = (); foreach my $kw (@keys) { # Calculate hashes for this key. # The hashes are immediately reduced modulo the mapping table size. my $hash1 = _calc_hash($kw, $hash_mult1, $hash_seed1) % $nverts; my $hash2 = _calc_hash($kw, $hash_mult2, $hash_seed2) % $nverts; # If the two hashes are the same for any key, we have to fail # since this edge would itself form a cycle in the graph. return () if $hash1 == $hash2; # Add the edge for this key. push @E, { left => $hash1, right => $hash2 }; } # Initialize the array of vertices, giving them all empty lists # of associated edges. (The lists will be hashes of edge numbers.) my @V = (); for (my $v = 0; $v < $nverts; $v++) { push @V, { edges => {} }; } # Insert each edge in the lists of edges connected to its vertices. for (my $e = 0; $e < $nedges; $e++) { my $v = $E[$e]{left}; $V[$v]{edges}->{$e} = 1; $v = $E[$e]{right}; $V[$v]{edges}->{$e} = 1; } # Now we attempt to prove the graph acyclic. # A cycle-free graph is either empty or has some vertex of degree 1. # Removing the edge attached to that vertex doesn't change this property, # so doing that repeatedly will reduce the size of the graph. # If the graph is empty at the end of the process, it was acyclic. # We track the order of edge removal so that the next phase can process # them in reverse order of removal. my @output_order = (); # Consider each vertex as a possible starting point for edge-removal. for (my $startv = 0; $startv < $nverts; $startv++) { my $v = $startv; # If vertex v is of degree 1 (i.e. exactly 1 edge connects to it), # remove that edge, and then consider the edge's other vertex to see # if it is now of degree 1. The inner loop repeats until reaching a # vertex not of degree 1. while (scalar(keys(%{ $V[$v]{edges} })) == 1) { # Unlink its only edge. my $e = (keys(%{ $V[$v]{edges} }))[0]; delete($V[$v]{edges}->{$e}); # Unlink the edge from its other vertex, too. my $v2 = $E[$e]{left}; $v2 = $E[$e]{right} if ($v2 == $v); delete($V[$v2]{edges}->{$e}); # Push e onto the front of the output-order list. unshift @output_order, $e; # Consider v2 on next iteration of inner loop. $v = $v2; } } # We succeeded only if all edges were removed from the graph. return () if (scalar(@output_order) != $nedges); # OK, build the hash table of size $nverts. my @hashtab = (0) x $nverts; # We need a "visited" flag array in this step, too. my @visited = (0) x $nverts; # The goal is that for any key, the sum of the hash table entries for # its first and second hash values is the desired output (i.e., the key # number). By assigning hash table values in the selected edge order, # we can guarantee that that's true. This works because the edge first # removed from the graph (and hence last to be visited here) must have # at least one vertex it shared with no other edge; hence it will have at # least one vertex (hashtable entry) still unvisited when we reach it here, # and we can assign that unvisited entry a value that makes the sum come # out as we wish. By induction, the same holds for all the other edges. foreach my $e (@output_order) { my $l = $E[$e]{left}; my $r = $E[$e]{right}; if (!$visited[$l]) { # $hashtab[$r] might be zero, or some previously assigned value. $hashtab[$l] = $e - $hashtab[$r]; } else { die "oops, doubly used hashtab entry" if $visited[$r]; # $hashtab[$l] might be zero, or some previously assigned value. $hashtab[$r] = $e - $hashtab[$l]; } # Now freeze both of these hashtab entries. $visited[$l] = 1; $visited[$r] = 1; } # Detect range of values needed in hash table. my $hmin = $nedges; my $hmax = 0; for (my $v = 0; $v < $nverts; $v++) { $hmin = $hashtab[$v] if $hashtab[$v] < $hmin; $hmax = $hashtab[$v] if $hashtab[$v] > $hmax; } # Choose width of hashtable entries. In addition to the actual values, # we need to be able to store a flag for unused entries, and we wish to # have the property that adding any other entry value to the flag gives # an out-of-range result (>= $nedges). my $elemtype; my $unused_flag; if ( $hmin >= -0x7F && $hmax <= 0x7F && $hmin + 0x7F >= $nedges) { # int8 will work $elemtype = 'int8'; $unused_flag = 0x7F; } elsif ($hmin >= -0x7FFF && $hmax <= 0x7FFF && $hmin + 0x7FFF >= $nedges) { # int16 will work $elemtype = 'int16'; $unused_flag = 0x7FFF; } elsif ($hmin >= -0x7FFFFFFF && $hmax <= 0x7FFFFFFF && $hmin + 0x3FFFFFFF >= $nedges) { # int32 will work $elemtype = 'int32'; $unused_flag = 0x3FFFFFFF; } else { die "hash table values too wide"; } # Set any unvisited hashtable entries to $unused_flag. for (my $v = 0; $v < $nverts; $v++) { $hashtab[$v] = $unused_flag if !$visited[$v]; } return ($elemtype, \@hashtab); } 1; age-PG16-v1.5.0-rc0/tools/gen_keywordlist.pl000077500000000000000000000163201454606241200205130ustar00rootroot00000000000000# # For PostgreSQL Database Management System: # (formerly known as Postgres, then as Postgres95) # # Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group # # Portions Copyright (c) 1994, The Regents of the University of California # # Permission to use, copy, modify, and distribute this software and its documentation for any purpose, # without fee, and without a written agreement is hereby granted, provided that the above copyright notice # and this paragraph and the following two paragraphs appear in all copies. # # IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, # INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, # ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY # OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. # # THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA # HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # #---------------------------------------------------------------------- # # gen_keywordlist.pl # Perl script that transforms a list of keywords into a ScanKeywordList # data structure that can be passed to ScanKeywordLookup(). # # The input is a C header file containing a series of macro calls # PG_KEYWORD("keyword", ...) # Lines not starting with PG_KEYWORD are ignored. The keywords are # implicitly numbered 0..N-1 in order of appearance in the header file. # Currently, the keywords are required to appear in ASCII order. # # The output is a C header file that defines a "const ScanKeywordList" # variable named according to the -v switch ("ScanKeywords" by default). # The variable is marked "static" unless the -e switch is given. # # ScanKeywordList uses hash-based lookup, so this script also selects # a minimal perfect hash function for the keyword set, and emits a # static hash function that is referenced in the ScanKeywordList struct. # The hash function is case-insensitive unless --no-case-fold is specified. # Note that case folding works correctly only for all-ASCII keywords! # # # Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group # Portions Copyright (c) 1994, Regents of the University of California # # src/tools/gen_keywordlist.pl # #---------------------------------------------------------------------- use strict; use warnings; use Getopt::Long; use FindBin; use lib $FindBin::RealBin; use PerfectHash; my $output_path = ''; my $extern = 0; my $case_fold = 1; my $varname = 'ScanKeywords'; GetOptions( 'output:s' => \$output_path, 'extern' => \$extern, 'case-fold!' => \$case_fold, 'varname:s' => \$varname) || usage(); my $kw_input_file = shift @ARGV || die "No input file.\n"; # Make sure output_path ends in a slash if needed. if ($output_path ne '' && substr($output_path, -1) ne '/') { $output_path .= '/'; } $kw_input_file =~ /(\w+)\.h$/ || die "Input file must be named something.h.\n"; my $base_filename = $1 . '_d'; my $kw_def_file = $output_path . $base_filename . '.h'; open(my $kif, '<', $kw_input_file) || die "$kw_input_file: $!\n"; open(my $kwdef, '>', $kw_def_file) || die "$kw_def_file: $!\n"; # Opening boilerplate for keyword definition header. printf $kwdef <) { if (/^PG_KEYWORD\("(\w+)"/) { push @keywords, $1; } } # When being case-insensitive, insist that the input be all-lower-case. if ($case_fold) { foreach my $kw (@keywords) { die qq|The keyword "$kw" is not lower-case in $kw_input_file\n| if ($kw ne lc $kw); } } # Error out if the keyword names are not in ASCII order. # # While this isn't really necessary with hash-based lookup, it's still # helpful because it provides a cheap way to reject duplicate keywords. # Also, insisting on sorted order ensures that code that scans the keyword # table linearly will see the keywords in a canonical order. for my $i (0 .. $#keywords - 1) { die qq|The keyword "$keywords[$i + 1]" is out of order in $kw_input_file\n| if ($keywords[$i] cmp $keywords[ $i + 1 ]) >= 0; } # Emit the string containing all the keywords. printf $kwdef qq|static const char %s_kw_string[] =\n\t"|, $varname; print $kwdef join qq|\\0"\n\t"|, @keywords; print $kwdef qq|";\n\n|; # Emit an array of numerical offsets which will be used to index into the # keyword string. Also determine max keyword length. printf $kwdef "static const uint16 %s_kw_offsets[] = {\n", $varname; my $offset = 0; my $max_len = 0; foreach my $name (@keywords) { my $this_length = length($name); print $kwdef "\t$offset,\n"; # Calculate the cumulative offset of the next keyword, # taking into account the null terminator. $offset += $this_length + 1; # Update max keyword length. $max_len = $this_length if $max_len < $this_length; } print $kwdef "};\n\n"; # Emit a macro defining the number of keywords. # (In some places it's useful to have access to that as a constant.) printf $kwdef "#define %s_NUM_KEYWORDS %d\n\n", uc $varname, scalar @keywords; # Emit the definition of the hash function. my $funcname = $varname . "_hash_func"; my $f = PerfectHash::generate_hash_function(\@keywords, $funcname, case_fold => $case_fold); printf $kwdef qq|static %s\n|, $f; # Emit the struct that wraps all this lookup info into one variable. printf $kwdef "static " if !$extern; printf $kwdef "const ScanKeywordList %s = {\n", $varname; printf $kwdef qq|\t%s_kw_string,\n|, $varname; printf $kwdef qq|\t%s_kw_offsets,\n|, $varname; printf $kwdef qq|\t%s,\n|, $funcname; printf $kwdef qq|\t%s_NUM_KEYWORDS,\n|, uc $varname; printf $kwdef qq|\t%d\n|, $max_len; printf $kwdef "};\n\n"; printf $kwdef "#endif\t\t\t\t\t\t\t/* %s_H */\n", uc $base_filename; sub usage { die <] [--varname/-v ] [--extern/-e] [--[no-]case-fold] input_file --output Output directory (default '.') --varname Name for ScanKeywordList variable (default 'ScanKeywords') --extern Allow the ScanKeywordList variable to be globally visible --no-case-fold Keyword matching is to be case-sensitive gen_keywordlist.pl transforms a list of keywords into a ScanKeywordList. The output filename is derived from the input file by inserting _d, for example kwlist_d.h is produced from kwlist.h. EOM } age-PG16-v1.5.0-rc0/tools/git/000077500000000000000000000000001454606241200155235ustar00rootroot00000000000000age-PG16-v1.5.0-rc0/tools/git/commit-msg000077500000000000000000000040611454606241200175260ustar00rootroot00000000000000#!/bin/sh # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # # This script checks the commit log message. if [ ! -s "$1" ] || ! grep -v '^#' "$1" | grep -q '[^[:space:]]'; then echo "Aborting commit due to empty commit message." >&2 exit 1 fi # Separate subject from body with a blank line line2=$(sed '2q;d' "$1") if [ -n "$line2" ] && echo "$line2" | grep -qv '^#'; then echo "FAIL: put a blank line to separate subject from body" >&2 head -n 2 "$1" >&2 exit 1 fi # Limit the subject line to 50 characters subject=$(head -n 1 "$1") subject_len=$(printf "$subject" | wc -m) if [ $subject_len -gt 72 ]; then echo "FAIL: subject lines cannot be longer than 72 characters" >&2 echo "$subject" >&2 exit 1 elif [ $subject_len -gt 50 ]; then echo "Subject lines less than or equal to 50 characters are preferred." fi # Capitalize the subject line if echo "$subject" | grep -qv '^[[:upper:]]'; then echo "FAIL: begin the subject line with a capital letter" >&2 echo "$subject" >&2 exit 1 fi # Do not end the subject line with a period if echo "$subject" | grep -q '\.$'; then echo "FAIL: trailing punctuation is unnecessary in subject lines" >&2 echo "$subject" >&2 exit 1 fi # Wrap the body at 72 characters lines=$(grep -nE '.{73,}' "$1") if [ -n "$lines" ]; then echo "FAIL: wrap the body at 72 characters" >&2 echo "$lines" >&2 exit 1 fi

7Y _ \dB]0 u8u2'xnQ XQ H2H#XpP& P0lX%,Ϣ`4K AL+ Fq gP}b#A'pLTP0@;Gc Ґː5@bp\2`C3~'v\(#l"Q 52/ qsw%aP0 v@ MD v2>G[= T#NkCh.`=D)1+P 0^w%3#G&  v@ (%i@y#Ѓ gw  Pj'pCib @R1E  BD@ _#bNg.@3 DU | iB5YЙ emc8)A_nb- PL `}O\ 9"8- S Q Yl9b=QrO)U0`W6 U WRͲl@bw"GuS0 KCU G\&#Аwx)/`a 3I ,Y]Q0)WFLEu{x !B qc0b$Pp9b0)䤳A_ 'rwP @  0:Y"Y&?Xp0SQqv g p U TGIԠ(tP @Ph uy 'TJhCx!)a%h2=ktP 2;y ` عR ٠ @ %G0S |is¶ !qlcPF=_rQjr$0o'j@ٰ 6rd{D@Ӑ8c#0C'1 ["AH醋ŠW _ ys5!6WQ&UX)p>ց7 tzy)KUƓ m 4 R0qa Vڈq zk _@(2_ -U~n%ǀ;P!cF"G_ PZ_aP" gmn1&Ӱ  U6e2'SWǰ;3&7tJ> r+03_ Z.{4*\9AF *.a } n 7% p tE^&Ҵ'ش 8+8B@.E}h X$pZJ# ل0hp243BdCƼ"a-c 2vc@q  zw@00(< `+4vKS i 0cBWٰD1i:B.p 5&7eZ*&_s3ʶ y 0 W[qFteH`qs,dP YB0Q 6 ːMz1&#Xb>` 7 a.)D.fʀ  h y5% @ !coq&S ǀ< v80s49]Be5hRT0 2p/CelR w @h6~V"#qX8a հ6o*9f# ݐMizBj Sim UXd E b/ŰzQ06S &>2 ? e IL3 XJؔ 䞞 @Ȅp R 2D JI 2hg-v_rA.0h I@g % 3bEYh5Ҥ'<0evu9o;v}8 A @ii"{O6Q q<*? s%vkP[hBP Qo o&W Ӱ܏=&9C& s \QAvPHeHa?! 1 &a^z5.MEkP!$v .XgoeLl"\߈ qHP…ec9OHz/F=~RH%MDRJ-]SL5m9p/C}vd<<7ot qh5=D$aXFT_?pP4,Y_hc#@"%4DXbƍ?YdʕǶK/*UxZoj$R >)R2UKjO!=p @]>dT].ፁ#cٹy-^x͟GC}-74ЙߥE(T蹏<9F!{/G$qP+lK0(LȒ"jKDOD1EWdψ6`s !#Dl2 ^@xZA2Q *Ƣ%X'd "y1j /PaduL1Q5 0:ƭ,qaDi ;&#ӡ9a$^$-YbhlDf2xQaA5c8c D(2lGGF$Or*iIUȱc|tJЃU B Z4c-8'; cZfBP$ E ^@<,f9tDJ+x4:%;} LRc"?pF AI6\I@/D"Xc^ jT*z#hF>ae╶'@ c*$:F>GR.ZBg A?p'3&c F)se10B*ںemlf#1.A ݤЇQC 2v#˲,vDj^YW}D…m, ,K,1- 4;^wvU:t1EQ[D+f{o~ )2x~0xo`8DE-"(riP;bmHAZїm(nG=N!/D>ЏXcP UXNK2%DG©Z RDnG!ʲDgFsei"QD(< 9124 ] c'a 0G^D& #F&Dq 5@;VLа!C?`'Sse=MUKH%\jTCH0D@S! :W+ bK\[agET"fSb uˊH1y' B#^歴wr!b+⠶5NG y­x"(nh//۰-cB wx%oA"q(A:|K|@^v@.CDDb nhňȋ1C@$"c|*s%K\ڝ| 8QC9L\ysx:ȅYV93s(8l Bç0à6ɿ]p81Bj%a`=sx|8)Ȋ-P3P񯈰 Aqtȇyȇ9 8T@"$襪j7@mR먂@0@>`PqɃȞg<(5Ƞg`="*0p##OPz%>P$@?3P'ɵdf\Kt[ ` a\P~jS:H$(+J -=z)DeHTtk@k`W6;xAk6b>8*L8lэAKJH ˋX|Nx\ 3Sȧ=(RB89Xdz;()˅X9 d.^5 ְtGP\;z*@rK,y8K"O2P.@9xOK4H2Hx:2Ȑ/:՘e!ôQPB={7  OI$pF O \~0SAѹ` /#HT9 ya hH␨ȃl1%B=B"> pç |'"p܈I|R,[@ wc*ካL4VuUM@8.숬0Ҫ2 X|]s@WEd AQݙth- @TEep]{!VQ[W`(Bw WqzV{}~؀؁%؂5؃E؄U؅e؆u؇؈؉؋،؍؎؏ِEXmmٓ})eو5q ˖Y> ' ٝWm/T|٣MVx=Tȃ|uDک%Tsx7́@KگW6aC۳uUR@<0Z[u|Е[WsۿMDŋ{[PYSU]\@ᐆ\cXť\\T>-໇9 K ke]Ë h {r l?@A'B7CGDWEgFwG:a*_xSaqrh>o%t(jmvs0Y7/rX'nvhRqw=؅ p/?r#7x@E^ӆmpoox`xxxȀVQNFV؃!:O{aRF\=>hKxqi8F0cx:N(p8>g0C`kNqve ) 0u(Gh^R(ZK}jl^m Ƈȗɧ| sNmu/?ھxmxy`pȀ  g}yyVh1t80h%87x+x)|5nxGcx>x߃p\P>281x:570K8jlCm7uH!ӛG.ȧ4j{xM{#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:w3РB (ҤD1mʔ5mRRfq̕7Nիi  D 4aAve‚\m+bCVӚ1fΛlc8s2|T[ÙٸqΔy'ќ5Nʵjć7e! )kfHt贚 2o~?H9TTMUXVe>$(6Zje dW;lW^;,  _.pVҌ265r~HQ'|d4\R1{p'16332mnbWJzT4).'K>9[~9"{9+:orcE 5:ϲ+[Z}VW;ow5 0ʐr,3 01?Go?~wO [#׏/ Ǐ}0# ӯ?sLǵx < @pl AJ-A Np 5B$<MBp.l! UCʰ4 mCp>2p;xDӭLRq͚"*m-z#$4L!10)L! 5p)Q81ǵ$1Φ `8!3E2|Nؒ^P$02  o=%**?Ex#<`/㕱5apLLa cC($e2t.)iRd';f)P*ԡF=*Rԥ2N}*T*թRV*RtMdF7IEoc(9R4nH qCi1WC~+=V=f8}lb# Je3jgC ъ=iSժ}kc ʶms궷eyȆ l!W27v}n]Q! ,yH*\ȰÄ=Hŋ3jȱǏ CIɓ(S\ɲ0cʜI͛8sɳϟ@ JѣHiKJp)ӧPJJիXjʵׯ`ÊKٳhӪ]˶۷duKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKǽس&WMËOӫJO>cϿ'WC>L 6OVhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)d Ls=f؄n)#w?x=)[9蟉΢F*餔Vj饘f-<*A@͠P*kP9뭸뮼\:*Jk&6F+zMk-}p-/ltȶ.$#1hdι*,ç; m6ZF[hAlSAÀ~"< 'dľSFa<9t+>:c+09 H2?u=ZkqV/-%;LCsQ NO@8I#P%d'?$4ٮC*@ܜ.(7?>  |KjsA<OKJrC5\RN]%yS#Tʪ bܣO*.@_HTN =!P [{99@DR\))ODN6zB|?$jQw9$Ѐ_<0H@( /Pn@ .*p5 (f3(oIFHe+I܀;'"Q7„@q!b v*[טM Pb4m8$X9a~$pz HcdD&h,v~ AqEyRD',P6;Ê;BHMH# `bS"2ȢI2EHpA L9 Bx^C$ną =~PfQR(#2jJN$ט x0b) `<'`;D8E#hM f5:PG5" {H+SƤguNQ}XW7v>l ? .\y f(O11 cW\pw$H9,hbW\1I;2 {8huCʈ*F _h ɣnBtih!1ْt8 ~Ic-Rhr%E^b@ 3R;FMIiGƍu<JH ""/I3S՜Ar ("tV#$w[x d؈˄I#@Qsc#<ߚ#HL#ȈC`iWY.b8Pă>1ERs1!0+XEKf:?X'we"'`Qe#Xt)8!H_~P$XǗ f(OOkG=2> p!@ _eH5[?K8bAԑai QRh `GpYC 9p! Vmt479J'i\>z\&EoPYj]C\2.hOpNxϻOO;` P o  q`0 t P P ppМ0 Wp6 P`P{P x P/ p ቏|` P JPPp ޠ  P "4) 0  t ࡞d'` 9PUy\D@ChMHn@4p4/@  R {W|@oL u p up Ӱ 0t0̀] I uPk` ``  ˰ʹ tp{P{@ u j:LpWZP y`Ȕ I0Ц If0{ 0 K{=CIyg` ` uWsPs0+PWi *v eu@`` p ܐ@ o@  Ncpt@bop p t  2 @@ Ϡ k|t  3 @` @ 㳤PP Z `@ Эф=2BJIsh` H` {+y $p0|` uв| |0 0 }=#9 ; Je`T`P0` Ǡupj p L`uШj aK op@ t fYc[u [k sUH=D0PD904Z { @ u Pðڀ ࡚s P; k: ` @  P [ 0 ? Tlp *: $ЩCIр L p émW` 8@U.//@鑫)zk Ӑy| ĠouP yܖp ˾< UǐLӼP<H û@0͓7v2~nC> [L'W2$Րӭ7C 9V $3NLP4(V 1ls]+>7|=#MDmH'L7@? b3RXA\5t`}8*3fgH@ iKI 9w$H?@1{+(Q1ȸ@0q@#x9sz_^`>3O=t.? n:<s9QFǔKٳs3ń S IBL"F:򑐌$'IJZ̤&7Nz (GIRL*WV򕰌,gIZ̥.w^ 0IbL2f:Ќ4IjZ̦6nz 8IrL:v<+"@fb wR@VP~@.P8"HSlt1@Ak0iH@QR4s_B܀4 k3 B kRAC4ơF˅fFEF o$ g 6d2 W PU!8BĞ0H+c#P AMRxbr4NiBէ!MU +$# r/ D^%' qV<@*FҌ4O92iDC$+ g؋$}3 rĠm/t!PC!P< C`c %/!*SqB,Q R@ {s:єră SF5(jЯ7Bw! , }H*\ȰÇ#JHŋ3jȱǏ CIf(3ɲ˗0cʜI͛8slϟѣH*]ʴӧ,wAJիXjjׯ`ÊKv.H8˜~kʝK濺:>c8RK MCGn.؊˘3c7yͦ8̺װc˞M۸sͻ ȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vh!Ct#vo{LJ$h50`,&L0ƨ\ 8U5@)X iH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫.WD ںF@ΑZ{o,l⡃08p&ZNžfR ƴr ,ri&E},̪#9-;8MЩz7w jR)mfIt=0t@Ԟז5؋.Qsw 6pݭ;@7Ubw=r ݌x%#$W^ ,kF?C@ >7wӝqNRаBT@ F MI'(Tŋ#3;JB298^=<#4;z4 >d3nC1r Y4/38\ -PpEppPڕ v>(xz#䱵(,|JNw i 긡QWh9!)P b%=CWRpp¶( v DS-P я.ĎlN;5քBasXY'D <3dR!:Qa&DHB*(= /&y8*sK=-=Ǥ#Gv7scq# Ix0F6d&gJĜ (#g9(5\ =gf c # x'Oأ'Lb " HD4AF1>[2¢HX Qz`9!A2< `\8Q c%-Pڇ "t'dȂ1hT.p:J0`U.Tw61-E{l j>@U2!P!ʧP;\BAAG|C.P~O&^*вO\Rd f#X+r<ˈ%ZYmN@mDV!l]^(Z,bnzx\hA/&i]L؃6S6,`-'LaΰuSGP$NW0gL8αw@L"HN&;PL*g ᭕,ysawj]Up|LfU?EB>πMBЈNF;ѐ'MJ[Ҙδ7N{ӠGMRԨNWVհgMZָεw^MbNf;ЎMj[ζn{MrNvMzη~ l Ѥ.@;x5&N[\ x)mKi|'E 13r|9G< qHOҗx4N\AxBGkhE(85>Dƫ mE^:Ͻg9gAxH;'$aؐfY1hXԘCj60G9 ";k oL#X 1ћF3 spCe{{7)=5fXu0@|4?hF7Vta oo z'z7~g`@PP (  ٰU ` {0  | ){d`0 o u   ـ P @ {}q P|  tp Ѱ8dXd|ge. ,pqXot22u((&V {P |@{ t ` X@@р p Pπ{w `u0 Pp|p ` @ ЁC t@ {  | { 0 o` S0  0M x8Xx~Іr}.2`AihA` wcp~ |@t (o{ {P w|epc(uu_`x Ljрp P7  ;YP t uuY@yð{9I\ & ,`6p;@(p)".`٘ Iop c @|pPհb 0Ha Q t5 !` `Q0{p9|` {!| {,h ͙ 9f7 p';{.p }| !LpbWpPp p  t0 H   R0 {p`@uu@up|`0 Pt opbpѠ Y uut`)@ ɤ+["  A(; Ъ` X$Ip 0 p p ` P y p ڤʰ ) !|P` ueӠ: P b 9 a9 P P Y@ ΐY 8 tͺ ۰9uq8.rXYI y&; `T Ͱ^ ϰh<ǀa 3Q"ת Zp ĀؤpjD31; (Qo*OP9+\ L˅I>3mkkcw~oyۙohhi{@^ àyD 0 z19kA 1 :s=zIp 09l ;ǠP nK +Kk; @ s ۸M껾+Sۼ; k{ڋ۽˽⻽k{ꋾ۾˾k{ۿ̿l | ̽ a |, l` `¢  ˸: 9K P8:qßq #Ñr0Lu p j#zJ:GĸoTWy9Y@=Lk+õP ;p ! , H*\ȰÇ#JHŋ3jȱǏ CIɓ\ɲ˗0cʜI͛8s䦳ϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx e{QrЛ5+^̸st?\A縳5i]Пgdk 拶H˞Mʣ y3J+Б.˥KG W o)f]" R'x/~K^fW! ) G{џDTApveaIDc߂.CR#H@U@DDؐh#QVSId$D#|C?@=584A WqOHȐqG%D)@p˰Yc f$;SH#&LdӘ ^8LaZsM<͂dsH7dsH:v~J}JP OA!!JٴcxB*Z:Jҹ,( ,HMLRCl3)ZӞ de NuJTT G@}šcW -TBz$ Tʖ](Wǚ8$ZTwWTEE G rͫY9CKY@XRaheGۓ Hx0EmNj\7=$Hípbs4MNL vUt}fMhWz&sxK^ MK݅趪Wnu6s~?rwƈ[G w"F$vHepyzRڞC]!`5L^+:z >($$-O=,'$a fK 10 "B4z\ص]g hXsBs9/ r<"\C3H:ڃ/YrI,rsVoR/ttń D9p 4=d+ IHQ=5d; &T:4!;/םr?[GKՁTB 8Qf<(|65,6D  MT" d,sc>!@ p2@k @jQ~b1 u;z !pY&C2 = dFF(j8R@gw>i w^{T=v@DaVeH|>o[ 2f\7,57E]#b]?/:we sscƫb>$I$=C,Q$:B  =@B;HӑpJZh<^!Xqޢ =6w  'w'v9_ q~lGq^rFsrQUZf;+i D2.UR%gg@ub#%~WH B'@P f'a W6\n F+Ts Ű3%8 @v;k1\bu[(KbKHC@Zg4Pa !"a A 3,:.cmH qR~cD@/P 0'HUDVqz1aek;#~DF wFwcUxR&%qUvU`m1YCf"7@H`1b&l*ȇ q2mb%G 7Ҁ |_ ~3GQ~>#!RtXDap0 eC[:pt 6o=p ]A.ty;(6D`{ р r8f#77eP ݔG&xb lXVNG+hR А@qǨzHi; v ys; uu9|`*aXwH+XrHp> ]_Ջ^fxSИ3u1]Ig "Bi*Q V ( (qɚ8ti& PPWb5 XAaSsQr,u`K i4!6 IaKv# Xi 0ٞh0saL9QAFa c[b#П( @fɩ2<828 *1dZ7.%f{ȖU%SH2 u68BǞ,5Ζh.dP"K8n`P%~@#R Ppm@U{zhZ45Ce`,ZWfF~:!0(krA35vwIag d}Yza61'@,2 Y 7BW5b8@h #w Vy^saeW0 13TP`֧ O : uh+nK! #Wqiچ g% / s A_#" "lxp,'*?R :ِ Ck,8zaFAhPB;daff+V 08ybZʠA[ h#iye/氟6j9(yW"RT 2WP 3+;sORi暸[!u!$ P y'; [q"q 4bVX('p5!_PwX @kUC oz e:U*' A1/yڻ*n!9Zx Jj'hšTg{]+*m7p Z ;,?p{b wB+öB@wҀE| _6Iwj:~y RJp03C+@wb4@+0ڪűJQ 010hl+J{q==XQJE_f  QdzR8@&hNv,"͟G^z?&`%Wݮ)W1VF!H?ajdNѤŲ"c@ԑH"HI#h*ND1EWdQ蕒D1'"! dL"2šbrfp<K/3Lɬt*S@l2!5;*;n~ bX X9*4Ա1zD:ҙFfnpĤRK/4SM! x 'p _sÄNֹ#թ{bs2Ԅ̑ YaHSg6Zi5]J*s*tHNP5!woJ E2ǜvQTFrZ}_*(`& <2m9#„-Ud^!O jv:GV ?AA@@)riw<_vӛ1`Q‰ڈD gYr0#'Pza #Gԃrs0hT iHԤ'EiJURԥ/iLe:SԦ7iNuSԧ?jP:TըGEjRT6թOjT:UVUPjVjUvUS%jXźcEkZպVb`$>:W(k^ꓣMi,[jխְ0IgpX6&ݺc%;ٓd)llfJ҅DglhQYEZFY;۪ PIhۮd@<dRH@6OBG4:׺HU`PG>Pu]*;cg+2@^;ߞ#8He2)|5jؐ"DFO Vщ9 P6pLysvtrpkNq] B)DUt=hBЇFthF7яt%=iJWҗD[/cӟuE]T̎ԯѴ:}jVկue=kZַuuk^׿v=lbFvNlf7φv=mjWvmnww=nrFwսnvw=ozwWA x>pGxp7x%>qWx5qwyE>r'GyUr/ye>s7yus?zЅNoq =b DJ7:"^dW߆BoUw:9 n ]`'ו\@7%ǧwQ׉ݱ^};^1Iix֘zө>rl:ӡ^ypcP>7nFAwXըF; sLm@? "7=@/F3F- hۨ!񹊆5!j](܏5/@9D9@A Chjho@3 k؃Y(y>q@o r>^lCcX=KPg(V(sr=kcX`mp^n$NNK= 4? ?k ``ཊ"sG8V؅]Xf=+|j(>YVPKkjKn=x^=0hO 2OmRYKpg=hraЅGx>(KVKhY@=|gHA.Gf@SBCx=(a7GȆ:PSEp)080h7+8ihX]h>e + N8L:xKC8CmVDRNxG؃esa؃e0ETTD$ 8@ 'ĽGѐ)ts\@cblR dO(1:C=Cv=\B0`FXKGLeh=uC0s>e9̆fldK,t +vŽ膱q&ȁ Ѐ+ X|mŁ@?(|chfxfPpxC)h01Ce`>i :h5hFL])8Gh:E:`<G\CG0(Iݴ4MeL+LtK/IΎ`%T'<؁؀'΄„Ċ8ρXNh^PR8eOxNk(7heh[:GOXe0ZYlRVЅV^KcNxZVa(\K8kCMOVhXXKXeO\ XmPB&4%$< 0؀pŁP')+#2bsiPɜ҂XKbh#"+h8kc8hRl/m PSySbGS7=:U f8޳LdbHQCp 7uSK#xP MMR؀&#baHc9 -U-uu"-Z=9aaUUUaYU6T%XXVX f`-VeV,jRVomVpp%q5Wo-Wt=WqUvewMWx]xyWwW|Wy~W׀%؁5X-X=XU؆e؇MX]؈XU L<™-JSSYI YI0I YKKQPpX^`QYM ٕ Z](Y_%0TssZ9ҐyfLPڦEBڇԐR|Eo]ێ܄\-܂\=]\H\9\Ǎ\m\x\5ʽ\˝\U\Е\ͽ\-E\]}]%]]]׵ѽ] ܕ]ޭ]]M]%5=}^m^ ^E^5e^^e%\لZ0E(lHPh,t<IV*eVMTeVh-L Mԉ3+k5U5|`G@! , H*\ȰÇ#JHŋ3jȱǏ CI7k!fˍ-䱗8sɳϟ@ k|lDFJJիXE?.k@]Ӫ]˶۷prLDIQFÈ+aTb͌x#6 ŠC* D BN,)Q5 >թG$^"2o(dțسc|DqYײ|4ͼ'VxÝe=h&e 6F(Vh7v ($h(,0(4h8<@)DiH&L6PF)TViXf\v`Vdi&DC g馕tZIA $CN# q P j褔Ed4aB҄S騤GsiqQꪬd8)ZAhp10Alƈ̓@5 DCDټZ"΃hפ&>t,C.(jڊ@+o0Xr9Y  pTC )8< g h> s Z$ Bӕʤ=0,4vL8<3,FU%@ < @Q BR/uuՑ7]$ c  ,дQJvTd= " e]JGLQMCBFd?7"n9b' i5@ l CBf 8#_[V`Js AA't@.|\tT@`@8Co=\\+t{p[A #4@6D $d;ACAj?B7fC$Տ?AU~Xߍo{' < ̠I A = N*/̚ 'qhcy'L! H"i@x" $iuD+#h>C S>8+vkH2hL6pH:x̣> IBlH (a#'IvF +9`ANv( %8 L*WVRG|,gIZ̥.w^ 0raL2f:Ќ4IjZ̦61p?y8IrNLCy8ꌧBaag |ٴE k"HwX|@!jDC<)Xr -=RU.[dBaϒ ^q)%q@ΑDiqQ$#40ꔑţRSgHAP2 1eDj8 xi]c1B i=1WZҵ D] u#L[C<} jQtLc2.ZcV̢*K@O `iiikPL4!tH'-DѹeU{{܃O#Bք$HBRzux)z7w.z[)\ŠG=ISTkݭo'2WꁯYeq`ÿ/1M py]gaV5xz@u]0c@UQ(0 ֐$G:rk2҃x)!e $ h؃3ZSDqC\ٍ7Dj=+{u s{9>:ܐAdYuFX>/-4EAR1" 2<:j~6 $ER4eK4^lp S'L atjaG=|Hc !+0$43愜Q -.q u#^ImAyg0y@(=|뉴'D  $L#8M b\HG.J;,#8y#rqӨC7Hӝ 4m+DJsNO_<%sb_/Ib0vT|(uB钧#xG#R^FHH=ÛaC` ;UL!oW#x ГQiAlz>#뭇cҞ1.u=ruH Rf|ˁiALF$q*PG 9aW8 ~09\ J)Hzp xԏ&8ayx5:TmF_1 q7:Z0"8}$x&'8ӕh+8F\4X6x8:<؃>@B8DXFxHJL؄NPR8^T(4*x\؅^`$B!2f/Dai؆nphY!vxxzqĒ8Xu؈8Xx؉8Xx؊8Xx؋8XxȘʸ،8Xxؘڸ؍8Xx蘎긎؎8Xx؏9Yy ِ9X"P9I ady :(y'Q!)\ ܐ4Y9Q` <ْ֐ @ $i @ /I96G /5Y  `@ [!y JA3@ X0 0@ ͠ @ R@ nI{y_I9} |閈)u uqXaB pv Pǰ!WY蠖P0 @ Q 0 P W雜 P Ӱ [y t԰YY`~R1 aXI@ t p u ` p P P 0  p qI  p @ @ ʠ  MÆh`X&8ʐ pep WC0`WP|PP p0 ٰp 00p c t@ o@|{uP `)Y!*AP0k| t p6zePoo@yޠ ˠ pz |HѩPj P@ * Ps { aAI6iɱY u   CJ{Wet c@ S ʫQlVPqʘ` P u0 vߺ9 Ͱ uxͰxx!%Q$ S ̐2) 9 @ J ˠ @ {0 0P P@ p FM{ P p p  z P tЉ sm,1 q{ p  h+ۖC { ^ P^t V+зkXѷX OkhA1 7A к 7 @{ m7 ,]q ;w,Xѻ͠7:l( 00 t!~'[TظC0E@ѸkŨ{A EQ'+w q+ eϛj! ,H*\ȰalJHŋ3jȱǏ CIɓ(S\˗0cʜI͛8sɳϟ@ Jѣe ӦPJJիXjʵׯ`ÊKٳhӪ]˶۷puvݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKOس&WMËOӫFOcϿ'GCL 6OVhfv ($h(,0(4h8<@)DiH&L6L01.tLOfi7r9qI'(P:clϛ0ћ? D't2})hO:L@9@;:O4\C3O=jj^L;jN63)^?Ґ1 104SľE?@? Цӎ:)D AD>X<+YB; 8(BN;N;:XR\$D:ccR f1~tBI$s 1N1 5C*̓V2s"8L /뀳 -p23O>|L 3?ʻW|0''Xc݉ 4J}O=BU-7>tO7"'l ; ݂o7lO'd&90݋:Mϛ%L:P #*-z|S:tc (g:Ƿ\K}3(Ŝ#<*KaH:YzBB@>cT:}Lhp)t\Rkq!1) с\/$ a0pu$ a0&K 3 $  @4R9'tէ2ݧ|, DZ.Αb t9 tVB: z,lU<,^#yA͟je뽤l$>q|9ґH>#dBP[St+JJ zae#97-oŃGLX9aS5NaLsh/D5:KZv[ICS(EL=ֲ(D`"UTW@cJ':`Yrj 8x.F=؁ pf< "E5YDKO "b7vQP,p!9U ҨG?P/|a SER܊xV% 5#RE(PO",|9S b  =xP0r'4WЊiyCa C>V>& [3q N\YaSh:= L!B+>!uHjQh bDkD'ƍ ;2f!ixY吘&AI!T?  UH*?NF Ym] YMo:a~oʇ; yCFfs 9&Hpsc /8' j,Of@Q7.4XPTbD%T9rƖTLh$/QSGHyG @ McsN u>ѡ ]xh5avX&(h÷ 2DRM,qAE _~0ڽBT0Z$U ^xcc(.J fH1" =?7PC+c4|XBi3X-U߽ˇ7prF5of2xt KQs5&6P ~o @ ȠpM- Ѡ)|*p'jt~3+ L5@OҀ@CWL1=HQ-c6`-y`u5Xg[P `܀ P &rvJJ.RlDwH  0 or`@>NCR{%|1_b7QQE1Ȳ,%q& @ @oba _@=rsm!Z 40 p E`b6NPW9Jdfr)U@EzWϤy@ cSD@`Jrid >SJ &P Y0pC)  E7g-@RI_::@\ CJ4s cPD0[ 0P VaQPJM;i]49BR|D7t;SeyB`/Qd^0]PD0fd؅AC  3XP *[D0%S4oe!8ڠ rv@ Zj*3,CY ^Rl>@$_ *fg-|wy v3`-@vP p ״ x Pr)vRP{ y@="MK6)3 0):GY 9[`h $fl*wv@R J% ˠ_E]it1xrW$ '9xKI$5gK9P3 O&-.ۂ2*&IѰ,1 Tps w|4|#q6 @#/2(ujJ*XO6Utg) bG )3c찯Q2HPJlhyU1 Ww^5U,`V%}@.w.B d/Dh6I' EBtM|7p}YB24Uv QaT`Gs5s57*J'+b,DPi7WVR 8TqSa@XC0Aҏ0`=;$P ?:-y' h vp$S5yhhP L>b-W1_0zp Dw+6` <J4fx?#:@ MtF, "-hZJDd-` 1hG*g qJU P L5@u0|XPo60j~jqvstFGtd%̆Ap7qDY{sX1}(ƖԧpG` 9$ F/0slX>W\X)tI"f~ ƻb66/e@C?,Y8Pu% $(uU2p0ofLM2M)D)۲-<@0B#Ph~FIKi e ᅘA8| tv$yovMp"P Kiy) PV'[ڥpy/-͗6\2ka؄ڏgtT3Ѐpr 0cMJ1=T 9s kPP I6 dIF)vQL">81$D>Hw P/xJ|Hp)BL)L+p sw(PȦxb1# 'iW]U/sUw` rF~χmrL<4%\p  vHM)P*/ ]SU6^pb0} ?ЄiQ…y\{e_)L3hD} * fB4Ph<0PHhau WVT n>J5uN>XŁ]6=0H42>4׀=N ߤIc)#y @h1t Dհov+/4*u0|  6VyU1)+clYbh9 լOU9|wJQpC= ) *AT} d0^AbJUaB}h%L8pAmݾW\uśW^}X`… FX1yGkVs[Ntn7U.zҙKmQp`)(r[NFçu:wӵlO?i rՎjװlԪ T(=NA#Թ|0@$@D0A 3@# $HzD+C B3|J389pa dhhApBAev4 ҌŇ(b,FVZe2Lj@ "ȐydlǡefitdA;3O=O?(,jxa huRCf"C1*Ȁ$HHRMQ\񃒟4Cp᧟tRwsF| b')\ )Ȑ~&⤗nE-8ub)b'-4]ue]w߅G3d|5iqZGs=$Mk!#Z91ݮΑN4?rĂ2jbeH(AR|`C*;g$jkai3e!D[ɇx;l&l648h9H=M!yml -7"|橛3{&#gN{ 2Dx^}dqETY&p`rv$|Q"AmNt!fۂzTˇ<3y矇>z5gh*Rg"X8Vt%pOGOҌsҩ>8AO:=|<&9ȨF>h,!!A@(sCpAR ~́K9шE`\:ԑjĨ P h@>cU,4#pcRkKP>UČE9JRҔR\B*rGktcTڲ ;΂H1D'@q Qc$V(4 qlبHa^xG-.'@2/C0s]1ਆ!岉L'! 4=AS6ԡhDrDøPld#ܢ.nxB]шhE^ rBfʅvd! P|3G6FlE#|P:V"؃ؐt%gR`k$:Wծf8vA fQDG,:\HQ2M#]@. XB=\zl'0cEV R}g0\`r{ƢE$db #K 79@9 R~z5D ̘8Ř 3K "6EȵCG8y o#iɑ(tF+q:2$1XE(G-Q fCTG,N~Xr<$4uGL.dЇ9Ol{ˌA 4-s ܬ6VbB*}#Ց/A9b%2*-tE? XޠH8dQJK1 ]SQnGdNwD4)k0o sPb LtՌW7sg,ir\N s8h8"V>i h8u)i>hVUʁ Sen1L .s:ѧo~M,4qV"X38ᇡhsp!"CY+bׂ.Ri :1 hGkl5el׈'@ʏX dqasfЌصEB[Fu_{؟7ǭ @r'hъ0X#>b7Tdr =<=јa\BxPh%?Ł NDX}G&'v7$a*0pQsscG8 J|{b Ð(< VLZȇCzWr|z8HpH@ZEztr'A@*H:r[X@i˅) @80K>0$zpRYPlHb~`jVp8SjBizJȁ$H#H1p:*:yȃx> KLɃ*@2HH{FltCVc%`cx >i P42gʇQ(~u%ә*ɠs*+ȱ$K:[ HX<(9;h _"\i f*6E`!ƪ@3q:[rr@8gxZ@/؁̄@K[hfٸ"sp Gw; ?.PC"8r$(IŁPfx@i|5@Ie r¡@PXȴӠ#R؃Rt6S.p6 ; u "'v0T}>T) h ր`c-7u*++j@).B-%P( G h XRss \QlK*\pޙ Ѕd)ROR|/.k؛^‡1e1rXNt/P)&z;0;A*Ѿ2|R25 ~k|rhaHJsꫂS@*eV;^ЄY<J0z6ptp ̈9($8Lb5k3@] trp$F9)uw}[D c,3XJ"͘#1{HH1Tsl 7¬z9sp$`;Riه<54xeٖEl=-&Jx)pp|яJr8s:iP0DA0"НG$a34,Iu۷#rg5^9{=dJ`d*X+KȆ7)%=$U. *,rڔ`jp`9!e}(]1ӱbc(M!`dHbpp8fhY O* l   "8.5fc<Ge2B%Gg\#*h5M/.%$ B0/HEȆris8<N6fVuX[9Q|jG(GpsUKz0*ēȴzhfEȓAX0w0̾sZ<; `%x%.uh؊P"U@088D@3ЄEDG&:KòH"Qb0aF sM|hhcOБ(Ѡ|բށv꧶ X6}x=q0ihi8ILBnf`iТXɳR ( ѭI=t%7>Hwxw>m舡`rM(vK *;V~PRP ?Vզ(6EINNM 1"KHejBTPqYȄU8f[l8[ILxԔ kK`:fNlhGxs[=lZxE8B5@HfoȢ~ЇJa\pȇ\83 4^LMF"؈k}}K!vz`]#cX"8;ssbxLRIjVvͣ hp?XHpXP~@+#SnёdaYЇ'6JH H2 lch](/נ91j*0XS;$x%((wt`X(7.+N Ek5Ed4Vp(h;Oh~0&}P) y>V\s (S&$8 3  Њ eS֝_9,̀fS@XRfr1q4M|` i/>VXTZD$5+QisL` p#sfR(nTꃟ<шg@ Hmh˶w[8pFmeb=l p%\zцjpLQX.aj$~ 3΍ D!!6j!R_)miARYA/Gao.OOE0j'%`K؅Y^0D2hTp'J0b0ecu8OpCiо9Rg!:ha{@UR ))zcehYCC rkj"F7rNy  F37]+g׏N4mI~СKb;v_ԫo9uE;r+ذbǒ-k,ڴjײm-ܸrҭk.G"-x)+l߿yiH$i<3 gUmqGo;wgވ:z"Ƌ_J)K|?kk\u0QMZeg/6"F 6%fˇ/ӯo>8_UpEKqJ9 08>` TR>J)TS8cI<ȃ3R#QqQlN6 B g 3 N=,Ӟ:?`).bNa8NsE@69Om&q9'u©?yT2x/,c-d)% S0dI_pE=XGCCSRv* f?,# ?MˀK+\#2s;9Ŕr 7iXaf= nLbQٹ..ʫG$ h c/O0tX%tÏ:s'cbW 1g=4ΌdY)M1С\$N+R:T<P:GVN-dC?"`)3v|24Nj5]{5dA[>$QhN1РPQ*"=43L>p"  $=L}z!R?69Fs }Q5O42MacR-Sw䰽)C ʉ.6<χ2 w;fJ馣>1 SL6O.N>XN]fUTcE)|?{v9Dq)G1 U1 OVk<ʑWhk.T󮴐oC1 C|1? Xix?1n)~@91]~eǠ;C[@8!wXp6"A J ؊)>)(cECUA<$Г`1E5buA\  r@ J9aELyGDBY,;1zds*Kr.Z!q((M֊Qh: 4&>7GC _pD=D$:өu3-0x u&>DQ =cbǦ#cI-#MR1Scu|ΑzD:)&V&0ʠP3#$9CbJyX2W )ԡT\agO$l( ǎcѰD@ O$2\h@zI1 fd@zPl^e1d, ^[U(>` ^is"G0!W pr5*hC+‹\V!)@NP@9s@r VO$֚'$ (|C (qV~&6@O87Ί2 n"ee$sƹ#I$TN\'&~UWrHF6\ qcăPJ:$ P 2t1i] %u4>L  2FQ PP:34a:ɝ#c:97Ղ4(,)S,Gl24nOQL,n ZB"1ɕ0U@=V Nx@F,\q2"hJF⬡~)+a|c8?BbHB:ssaQڑD.] Wֶ/4uaq#=@I 0";1Ibb9ȁ .B 8gmjx8x*hcu?R { H|x4oPvOZc%8yM{P!-:9Ț%Ps%K!28.ƘɚX8;J?tc21G4F85b $3oR8AL%;`񱓽+92}$cGfpaOn\U g9 G֏כw96v8xFa 6 &"nrQbDc8F5qaDy*Ӿ?0ho|Eڎ;.3Q# /ڢ|8ϋ,?",L6J gPs@ 9 W&\N)t@۱4˕5 ;GH --`M( :$?\G'A.0CO$řHA PE:Cj4(C,CFE\'-L}1) e-4 @o!E\B$J94BxLC.TAM1;TC6$<:""&F˩ϓL;LC>\i)#}=BhO8YP>%I CF?HS Ak(t/PLU<[ )"2&c-F4LO#N]?tC_,9D)C)@CxʧȕC0XSb E5=8al8IL-‘6*#A$!.@B)@G5T?R` xEh?)@oA"DL 3Cb58Qč`-0TD#DMdU9dD%D=Pa솰2nٔ$HҝC\$QЈ84¤$Z]ٳ E P>GHPE]2H#4 4Zs ?`;Pp]NdfM -b M(ZjH@̈́Q?BEKpj0OaPPJq$}Du%$@?c^Ԉ?4RD.ɱx~(C҈h9Q4[~XQHB?ЃN(8PK`Ȋ(`XsRz:=gCE \ALv΋\a$ R"O)QM H$AP =(ҾQi@AI9N$Ă^Nŗv)Cl'L?CdBHBX9'U<~ >HCh?4Q]zks0MZl)PFp+v~7D>DmgȁF b-@GY9 %XPWTДF5E1DG5d /~M:, XgX&>,6.]0M*qP/0UBB+C?p*G#>\[a%cBP[@D/RG A20 ah/Z(V;fX 0^QÕmWiF 1[dgC1qVqo1wH 1Z#1oDZEi`|EWއ`k2!߉2"'2T"?2$E#7r$W%$%o2' w2(YԈ()wũQ52+1#1W0,Mh+2mmdhڲ/x@/sJ& =F.aU1OdMLyP37{5פ*3 4w9p&ӆ0%+(^sWjjɬG+Yj!o;й]$aASb)f& ^j;9:4hA褔P:9@)#H:ΛT髏:# )ԠkĄZ UϩCDTa3_pC }($}j-+08X3O>m1@)OsBEA/COS23)<@ 9쾨nG&)* > H̊# D?<\p3:3]= 2{%! G=q" a H 4XuPyC?ѵPK )R4ĵ#%怆@0G5jX*Z~(pQ# xMh<|C"He%J^$B.B39|q/x>Rr2tC:U.Ѓ r4C:\%@>,q o1RA 5A |VF=qFv QXk9Bq^MlBh>fRTPF5ZBТE1sgO#%|:x TZ;&ܝ#]Y,L{ k0?ۉJT`!l+`ZG5z?XS?d pSF᭴YAt#LP )}h>"!O|ӟ`,b  Wԏ2T9H/5#D H *F7d-`jMT؅1"q[E%dqeSÃacȆ%8-xks>rkV1icj9r#X+ ;P&:1d#}m(V#9(tcV#ȶxv$ػflDH&r3)!pvca81 b\b81U|\&tRsD=( dS9qbg 5)\iTn S0UPWB0}mD!^ZyY0}0Ap?QeRH t ^p ]%;Us\/ SVyn_mP5[$ 4Q 4w8F2n'jk@G0 }d PpPS2Pp{ "}x@WF}ס@C5Sk F#WT1@yF4`j5Ff(c P oMEpP9/@Ű U1 &v5sJLKֱhW3?3_gPkK@/" tP5U@.+#if^ @W~0 0&qTW_5`} u5B67VnVgV.j 72] 4YN 0 _'>:p@Z*0xcp@_0@ ` v%8|F27Esi01v D9C@0S4?t*0l98pD&%&`Dumdmr x swg?uUP]b{R.p s3ő1T `P (Rr5rJhF<|@4Y/H % 0 0 X@c ` imjlj8sVs.)/&$A"oU^ "Q` 7ChFB] p?pogc)?\p?hD   djnn P CDV=siƙP8-&)@(v  05@ovU4 F9`:v"p?0+@P#TH&vRkb:eaI 06 7hfQd?3&Nq0 TX(LW 6&Fe:88S9D{pUPC] vN Ф?1uA:zx:72 p W @ @@SWNGI P wg7t@s@Jcx@D6@ e^ @TNŰ 0C//@urv3|[iFv`ojZЅĄ>`3hp B('gyoȐ[ p ư 0 p1@}@.=t5|2A0@ pM!#^x:w"4I$ k<ڷ+_Pl $ SyQ o0 s/@x@IUud*A(  eimZ9 p Vsk,KD-}4)IO9O BȐq30xH t4,0@ uY߲9sAGQ442Ҁ' ` Ц a{ors\O0d` C)u5Y㹶5jX÷b+=OCUT@p N7&7is;eF Rxk􈬀 f`%4ovnИp"6+pe2$mPK+rlesm) +qO*?S.7f\8rYҡZxJ@h"` p PH8= Ơ^s+[pt%tKHW&AIPM".ʰq&Iŷ &ZGUR>HsP;KQPbP>Y 9 rg `:+daQ4`^慯` ,p}||1U941MG `RB>] %4yp|UpJ+DWȍ9TG`v\9T,BFPU6`7).6qp :;aD?@nOHR<%dS6>JG)R-x1 ?'SR pJE j"(Ԕ%1*ʾ19Zh'ZhW&x>IU7K <rۈ3C8RGT8P `Up s4o4P"@ŀ 5İg0` `J &x'OkVppqƯՁTa 4cBЁMa mLQ)?h+p 0rK:JPٰ*(*`&B8/$ T+p o8޲< #O 4KYF* 3,J0>N{:hQ@s)vh r g*끻sd,+5Vs 856dx\6UPk=&XK[[3ыMc 3haw8fZ ʊ#Q4UQ?-=< P 54M<Rp0=>692_1PVY`EW'@ā7B9𖜬(PvBb gpF ʷX1UGC}@ K%OVEк n=p @?[$D3m(sP l뺧-{oW `)4hWHۡ/pG|FęSN=}TPEETRM>UTHGVvI۝[NݽveͦڨҙmWXsk֝;{-G6/ܑн-?d:-߿~v'o_>O1^|&[tF޻.r"H;F 1huUōG\r͝?gyW/2pͤ>e-˧_?ܹd;xG?A /~̱EQ] jG -9#(.zb-d& "@$ bR>vG2H!L{F22I%zP+K.us%G(Gr) {Kz3qjɲt et)Ɵ,.+evC)/3IQEr|  .x<9+Hl W"wW_6Xa* N,j|AzLd$i* KZ|9"mrb'#ʧh)e+Kr|f!!fm]p'9lXG&dOF*H aJøjDH' -ƹ,/&U$c09LbBg/#;bFiACO qmV8J86`puI7xa~HI<1}P%p`!jN `h/dhl{jYkOa#>N&z9g1URT(+Ifbj(؅-qtCbED3& E>1}a'|}H fأa dȢ\qicɘ3QՑbBVVi`^<oռfCOgVFD6Mǖq R3 \ܻ*ZP'j0YnJ1Ȧhqc-2f Bh3"A MlD7t(dn08|NrIG>QJ1bEYB)lv=R[ !ux(Ew&&}˝:K^qC0+{"S@f fX#tX'K+FXy^מGdAVvjb@I\" *68d Y|{$ iTP0b흷:Rx:hzSv@']93dzt۰ C6z}r̢Ѱf Upm ]xo. +(n@\A G0hh@ph "@iwp=4\ȸ)ZIуA#ʅ)`03t |(VOxX @ EiFJ`N D(Vr@%@SqALMxHXn0~0cC u0s)I/  ?kcЪ/y, Rh{p/ r0i&"PA+p ?`5MBJW ihxp㛻{؝ey`608NWcEpWhc 9 h0ⷖ1c*ÙBRx~0Y0˪@Ѹ@Dt,ȇkHC ::R<2`][*@ԡ0z0,-ĄNWXBG t BiЇd("dHIO(C85xZ4s8ZHx> fh@O(Cf9h]Hutʧ&bhiK27\.9:jex)ȁ29PYA#dz@ y9;xPoud@ȴ҈0V{{A C訳Z H!H N٤Yt@xx`3NƈR$5X(O;2zNOO`YCQs QjP?;@|x2ux;(v Sȇ\Sj s6)J\B ;?aP\HK:)QA>㫮HBڪEDn(K4X02/_~y%X2`(MȄN`P<|Cx)X`[Ѓ_EF؄3ғr&mGr(/*,KD2{(Zh7:UQ%<|#Ex==7ʼn>e(XhPQ.4͎$Ypd8蔳h~Ȉ}qMJhHJXY3 F R︊l(F`ɕPΩت@- ($O4va$== jצuZ`I…|5|E 39k DҪ1uH\U T~=¶x*H}hOOut`)N(SY28?9Zg7Z ;Zd/ᬧ:ZH!s{4#:-GYXK8j8EL[1xzG guSa@ Jv6 #>C $z>sy0Yq`j}4\f ߣ `@Mo(g tȇsPh1TmޮM8e ޴-Uu h ,Ss 'aM` YW-Ys(1tv"nT>E|؅Y0RT 1H/C9Nhp07ɇ\8(`a >F ojY_pRV}؇+>YřGi^:b-J\=#h!pThl8`Fu|0K ,*tA?(~\ĸ~m^:(h؆8sBmVy ]hCf({`7SX/11sF睠0< [DYT UtxhCgz HPGAxh.yci %dupMHPiIX諬(n@es-k+{e@+![LG`5eCr0GQثt +XD[tPELhNlsr H#MjC( N^1{d,u0pQhF@c\1z}+8 y豙KSĄAH]T*%>׀234IZ m#M`=T$: 4Ѕ!öڿц\ J!2T7>PrbȇXhENsKX ثWX5sxV2ShJD +섈LFkF72/aָp20H[C߰A[0K3x&@H_󞣦 8P>8f^v@z@b`Ca'}#^?U"@l`N]XuH!\0hGKa: ~ ’#HL&}KPHOUm G^~]s@٭[eGxLWj|8~xk`.lВ'YwCXҦmUO`R~aςÀ "x!2 ^6' Z=0"_? !*_˖/]{ѣW3O?̥O4*qʴ|թ/"uv]2I_dǮjײm-ܸrҭk.޼z/.l<hTԈF G7ݹPi)sIc-hk_\Ж+oLe 1v`yIGܙ:y$9O5rXGguu?*,CA}Ps$:L4hc/9X֐CPLM>|6eJH,H Qz].-6#4Z[;_yBtÞ?c*:͓2<$ sC=#QW#TJ,N>Z31,C8@d5"++P5:!q4d4dDR\pQ52Փc=rF4q8D=(C9׌L{B? P4@lRyO>tV>#)O6zZj>dL/Cc4SI =4E}4 O?hsLy:ݪ%\h-0\i] 4ԣZ+9u\ +polZSC bX\M>@c23##Hdvh#5|`qlPcN>htBDS?sJ_FHЋ&;;OH!=`0?O?! 9Z2ó./@d>75*s}8D,ⱍ|D;uod9S&?z3'/FIn&X42=O<^3I'!F^:c"Ļ ;1~|[[rqP"5F'  ,TK&4΀"! fB`f.udTH hpsd:t5!h#$_,<xd#7<%*SY4OIKvU.6]RbGEvT#yD.8EdBX/֚у 8;8pC=8^ 7s,?Qō$6Tls'@*Ё4.)35E4Z˷Hdd(&* LhD4%|[F .2 ISuE&85@ r~TTLu{0.@BRQtِ(fCRD<:*ֱFZ#j/5eWZPb&x E"k\I dr9Z)óJ| _ 5sh эVk"==ZäG![򶷾-{4"q [hqa R.",TJf0[ꭄp3\r@NGے`::ȇPii$N!w\]rnj\fJ+ _iy\rp_>s4KR6$=9ZTѹR'(nxAp0+ЇXGQx p!KBH|+MQSb?؃2~̦`?(܎0so1g=X#]•bL5$Q d#! 3h| zDdrq$5xA<˙AH5Tj3 :YEhay^`5~18/O}~KjV{rYWM89VB[%9Ã2"Cu*0?C?X!?B> ́}G R$P%0,?lT?p!b>EHd#xnQ́Ah&UyB1B44#p4@B$4@ C,!'%B5#|IZNng,r][x'>)C?.BB) tD#vjܡ?`C$܂,-vH.4B)p1LO|v؄7xC3<109 $,'(,T,zcHG+d}tCg2XP!2(X3~txB?>bKd(jT Pެ:CNApP$+z> TtB%$)J7pAl DATЃMæ+G1&lBStDE9t#gMYF4P: 2hE)/]DG(.Y@!=e>ZDD ` GG)ĄYY>-ԞHWPB',Ey3Dnm,2K^hȜW9?p_Q\:-\2T,%ri.vCB? O!6KJ.e5 b%RRNDl4IL\CIԶ`-)H&,+! wRt_gݠ%XG _-%&0B'@dnVȅ*BJd9T;\S50 =BF}4((>Ô ;!=CT`~| yl~ΔCWL.g0a\?4-C<:q~B240e,xs)D13$(r ѲA_ZCW,0Xy%!*Ȃ.%ȁ+$l0:P&dGyC5 -B)1+J.T8 U>LQ|L:-33թ!0xD1:51>Nq -43c)JzLf,LkE?CSGVr '&TBEε1DCi  0ecքgQ@# ?S?'0j(dO-gl@gә)C+XjF Kv#7#C1'?58DGp: C)V|˸=w`ƔΟV@O;ٮ{EٮJ6phΜt<2}hܞc9'VqcǏ!Gz?^=P9)wy=@xᚥN)[j*v*cJ'p a?{q'uʟڹb)*"V $$=NAQJ_tAels'H OBʇp}] *{)@@QL]VP1UM}ː{ve"K|@Ibᔾr4{AgaFf矁Z衉.0tgUȃGg&9*YJTEeByd ߫ g'PCkhΩ힠Zm6Զ+ǛB.hm|D$!;iAIYg-Dn.)şۖ@Hp*p ,p5grr'/OPkfKAf| DV m˜ҨDeʳIX yd~́Up&*MG=1~]U$D@x@ Ү/) A~(%4 Q΀(EzҎ 8/̡D`F ٤|H01aO[B>Z*t#%qyF7VdVB_`O 0#rA\H,0Ksp%P'AJQ2YY@l0Wڀ@'Z1 c**ī PFHPZ10C8|z4Ȱ!x>H"C,yOP"0G:ģDdE %mr"' N !=XERNE1S!--6G Fh1|J08 Q>B YV N ;| -96dJh j'UC瘏TO]D% )PF)0^gaxPK֨D$_XVt *JlT"A^^;NA9%= Syc1 P+"蠇é[= ~Уcj;NUx̝>ފ,[&"+] RY#ZMT\`R Y<_^]?<΄ c'1sDj/ hn(L%/Da /x9_8B¥A">B+])u, bXayY&01qC'*>*]CW2Kۖ6Z0916Bee6EM`#'<#q M6!` 0{ z@ xr1m>Za% ! A TZF9q5TЍ1*@I<U$Wv *LqW@?8LCC!K9=Ab3"5ImiO{18GUxj!N@' D.á=  RK`8_4(B$BULtBnhL#MT%.1B~Y7|dX(8bُ}tR<=ԱdD; p4U;6ё^PnĖ:q]z)Ն6 r{0xeQp`(UAƁfPCDxf"MD=2 WUyB7a H!zMeUZLy (otgp+a^ RV ln!fpf,mDGr&ujar :&60Xva4NdRyW}z *? V ;jcTCB*}>9X bAEgvYrj RfV6CІ vxba LdN J!E'D&a1A0s3v!24hny<q8Tܠ+y#Fp$ĉ ` AH /A` !,p!Ar*Vd3q' Ji)hDiЈ%$x؁LoywAcs >5 9'<&rIkAPcu,qbMsơ]݂/632}獈'X4b4p4~闝\܃$O>遽>>ԙ; ]>?Z/پJzbŘ~e^O>3>(>G*%5U_1)9';I?2Q_E:~<&>cٕ]D_ֽ}[ڻ^=vqq%//ߎ: H`FC3O>QEO A1a=$u`~bZ|$=<w/xG'cOs!ވc:`Y3?B F?;.dNԣY9̂ E?dbo@T)$Pr/dvvމ'Q:TDȓO4sYt5SC9˘N=^i T|6F"8#j^N!%iH)&m?̴R?ljT*X+Χ.l8?^I頳-:! 霖mkoFgF3oJf \?FSH7Jpý2%@hx?a r#$ `yC?>sN6F53 UHC?`fO5ǔsNX=|TAuC`=N> tjO+}_Q!HP8E.̈́܎B.-چ\pb $L1DShA>h#Nz?ҜA‹?-K#L>39 (R ?czw֎?ADqu[O#=40 %T ˯Ͼ^h3?LJмÌ.,S Qt#D&2 L B8G=IpjaWf2 4H+ЉNh As#^l ӒUD36>q Y A pD F7,w'2Ol„9"jqf9M:&X>4+H1?abXE5qAH:FI!6qdI:]ȎdLjr#:Xbc`ʇ?T"h+_YﵲG)`]pZY`rĤ'VЃ(3&F{hE.ljS.E!tt(Rt&>̡K#lg& .qJ 5fQpӝLL.P?O6cd8C dMc>a3Y LA-)j P-t $R`8=XF>5ӠJ8HE 5,c)J5yD=GV`MT VtEbwr|T*amkb/ zp n+ZUsx ;ZlQ841tk,tH&66- Z--iOԪvmk_ vmovo w-q*wms Jwԭujwkw w-yϋwm{ w}w x.+x n Kx* kxSm1A W"&1J,ހ! ,)hH*\h3#JHŋ3jȱǏ CIɓ( x/yͥ͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`MٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνgOӫ_Ͼ˟OϿ(h& 6F(S'" @ʄRtq*AN(B7?=):Ԉ8<@)DiH&LWFOPΔTeATf%CpMQ6)fR(t1Cj 1"̜t3̜ K/'.ع1L3M45#!BO>B 1PC $q@5rh̑}D#^v + 9r@ ?I@ {=2 (?؃N5 cN9O.u D$ 4)JNA)SO:騣ρP}RhL=ij2l" %`Bݪ#?xC|4 /є:2Gst14gp  5# tI r ?2K)Ss+0S '| -B3h>ԓ.4p~:*̑ύ`]ϐ+P9Vk2!?P&&vgIŐ?Wp'h1C;1p$ ~9_>4D \܀TAw} k ; ؠ({8Pܠ&#* a%6"E1n*>ȱ .L!G:@5{@7T |\2L؎t8Ua:…5(f-=FJ{L*ٶAMx ]?Y$,d J@>H.w ;3d,PDAv8яyN{:z 5эhtFa[XM3Jd'Dĉ9la ?->щHä;:^#c52{s$Yw42Xa u$ 9vRx@Q .PD8C-1w\ZKPq.>ET3PPmn+`D,"%T1s–;JV AUH?܁Bd?db n:{ fP} !95K(ӤAT;3g8?PK!BG9!Y@l1Ai &M0"09aWC=ԁGk@-ӎ F0Q~`4^@v4 (g{sn+MOKxKl51Ү^)q%Gpb`=⨰~Ѓ`&tN B'^vc`j?Ա=rcv= Xxb-k~aT̡ Q@7 w7?!1H^3ArP-D&,V`Ƴlo<Y0txD#J1j0xb|C[% ~#)GD.v 5,JGx)13r|t'ig«@LubkCd\ fp fFZQqFd Ș?Ztc`: U|> 2(@+=GA؇E6^AN#SNww{~'i(4p 6E{*ݺɺy4_⌐CFʖcЅ2Ј`cjpJ OA\WO0ֱg!HU%Òzч:ANbG֎ c0(HBKEb̨̂?,mo;x.`Nы`y %yY5' S _9Y PņGP3`zCNX^dNd;b; iFy#cdh0tfgb/}G>Ӆ5Ј$n0ng `:ODvn3 \_s/$@# "\C/T`{g8WeIEyQä \ pOC 4"gSh ` MW`pxV ʠz&P.5kF6>scjT#]ӗn0 i @5BDpq\K ΰ P p P 9' p@  p @ ̀2pzl_xS<T8O4mvt.5RP P萂7ư ,7Hxd]R j-  21NTJ1p =h0B_sL Y [9 P А Հ ! , P ~  `'p p >NlYٔzXxF. P8pz `7w Hgj'я(9=9LE G \ @w#F3i =0 Pq/_w<@ ܁c P p Z@΅ G0h"z!5h1@ۥ,Ȝ@ F i:P ;F 4pRt _sCUD h: -@0ؠ Ó0s,` @20y` 7!cPGɄ5@/Y\)01+@s0.(Dڇ ϩ;+ 2. 2) =N9 hqm  3 P 旬]@jeհ pKt@ J(12 :@Cc5w t7oU `690 p Pꔆ8ނ6m_Qdn{n) ǰ PZ _UЊ6s|(`J % G ɐ ` ^9dR0K0 P|=$0@6A##X 9h -6[k W?Awqglǂ73T 1˖N+B3`! =c, P $1lMG sac*@Pz+( kp `##÷IiqDK@IwVZ 7miP6RO@KMbId ThyU l7);y:@;Hk6KP E. j`KDŋGxTfQ0|w}= Rp {k-&X33p u С.`3`$~{l P v@  1 3 J!b1lFj>s TPP;차VDPlLPG$J1#fb/4*) p0tGFp,8 #F8{f6E<xJOX F˥ ezI 1hiqM68Mр8N87h>GJ\,Zc0s:c@)`-Jz[gHے=pD4QV9hB,xq ": . ̱] :(oX] U`㧓Ű3@d?##M l>p P 2[ t=wSQpKz* 0 { }͞88^@#uY?G9ްq웑6> @9P:u ޲Xg1vs#т xMز ptɀTa3p ==NDO(1pMb d4URh#0 0 @P R]1H8o DDc2B5KHME04 H lf9\ 60RlO/~yn) @wźVp $rKH|}+ UhQ` 'S t- tq}{IhS>0VD $@ DPB >QD-^ĘQF=~NdzYʕ/*f]tխ_Ǟ={t}-"/j3S>9/CGG,J裸N⮩p,#H ňd[xA|'ehX)fG";y #^Xrx(̭;pxHNj!(I5yeu>2K-K/ HC#.yI>J'-HL:$N(yp9$ ;`m0~xa#Cj&#!~2S ( . ƷǗbgvZk6[m> /c'pÍ9s㉕V*c)qmr@b+seGG(GTxmF:ifZ:L">,Mzb&J*#ʫz˞~!gb }%c9֫)Gv*뛨 \o>Xf&y飇'@'x5|Y&!x(RΫi jj=sJMNQtFgjy矇>\$(OtWԁTZT,̑'paX_x X"@Hq ?r1&n&4e#`T#=Ї?"t~CUHl^@\[QG@>}SSgxbp}#@qR!)k9vōOTmJ9v zDh 9d^P CA4t hBlB6% :).]{E]b}hLҎіe.yz# "hPlQDgx"Ylङ{1h,ȇ<(4i3Z#oN'2DV00,?b,|TĒXN[:YVֲ?|ANB!IUgSNJ-G# m#72$@R9aâ- !@< GE `h7uk:bR Z ΠzeB"ه^A/ rIt׾ůBFRU/JaQe0(Uy;h+ReNVQB.1U[Ӕ.p߻Ҹg1@cv -9@#nC/fd&7yK^GsuMOA Z<=0e@ PІsal?=rdLrN/aXMWsSp$~l#TB9%DE E=jR7)m: ci֣pWsr𢆺bK$hkGgZQh./qnj%r08^D-j$Jk,~j,(I OL7X s%A$NrҜ8ڏ cPL6p;J)|G`<[fsp S @<+g(m V2Y,XhCDR)BXzX2BUC; L0s>{ J?(4VJhsz8HP Q$Q6+c,7H,!CnfLd/`;.` {` n@0)>&i(_΀v2AFhnG˹ kqȃ*3ti-))0>(H3h8QX[ȇ,/^q9Kɴ/$X%^~x $8OB0^Q%8Ç( Ța| s\hZ|5UQ]z`tH 2` rl@T$%R؅K(BOt;a~8z2 9a?YK:((q+Նu؊@{cPԒU`ɮ)ȅE(e H" ~_/qHG­br+g3xֳsp+TX$2hSchBexfcPU0lBH~ -"'2aл*{ء;!nH'0iO Ք&5/4聾bH4ğIbt:7:$_ 9Cehjctt G)y`hb[^|Liu+r=XM@Nus`zܢ!RSLRU4!@7BfBz|lv<,F#a>c ه8! W 1X0U5VØ"]>w:mPW*l0pyduxdXGFxXh0RVbhgXHAM A~˵raFSa *XRihfXXF?p$H4K-\N0;i;h?yX x+\ٵ| yƒ89V29X8l{y bVQw]gh`%b:8y0Bl[R(PN`Y0G@bbXdfNFF(\Ȇ($e(RMɃm"LN#wڨk&EL!h¼4 •8*)TTK6f E|xY(y uG[~QlYaYtsOYPoPYY4GV8>8ߴ[pJEu022!L O*qO:P u  > öPn9 *f3`V{x~P~a-sbZn(A=Dcoia ~ݕ4;! % S9s`9= ٺyNQ">P\i% g(Z@׍013)RH85i@.@;ׄNA!u; ]u5+d(/dPW0i@Qi%WpT:ҏya7}a|0NKypJsԈYU􀇸`_p·߈gi2o.G/ "Y5'E?d'I EM%O@8AO?׀ah-(PcGb?SX0cűtޣa VXEA"iX~,Ze[ VHx̡hnX! `ks6'B*uS .v*Vn HL|n.?h+,m9DE bQf(COoWcȁۯ:-C{8H_"\ɣcr'Df@~Xr:Ic /“VF"GW$rBVsmRx;,{,xϝ;{Υ7h,Y>Ih?sk籝A(Yݿ^!ZV,?3`&V վZT8qHXQiDcg#pY,<%GW-H.ݿcykɼwjʊ$H2n1Ȓ'Sl2̚7s3ТG..9/_,V}eVџ=^myxƋPq7/]ƽ7WϜ:dݺ*Y0Kr:ukfkW6/vDsJ1%L)M*T(U <@4΅OJcUJ)DwZ\(QepCPP S@=c=#A 9$EBx)ѓ;O4O?VY&YJ![q^1sIԐC1E&CCDB&l hB -g=t؞S ( "Ҙ;qt9mN>L;C.O?c =_q4P8gwObuG 4&d;(qT&:39d0# ÏbO?SL,3O_j"A<,<ưx%"c23oR0؎W*F91}һ7}7;FmISN9uLJ3(mqCrǠy3VZ&t t3\w!g 4e>"l"2Nbb: qc,P';S-ѪsG \|Q0&RO,L>>#Ia*p! \/<' R dĒ,|xC)(8`No!Hs!7Ѡ10B*ҵ QBQtѨvGu E02abd0 ֡|$CqbͳG_ \CUAxG11;ÂYQ8|oE&`؛$D:3 <%*0fBCxE>!i ?D9 D4 $THz?q }A \U1y`ŸF>nP_-Te@SPS)әҴ6e; ^4M4|3Fb37!Xo#uЃGK Gj % !0|s& z(}82+i>`r=A 5(`Smuc ZI2ҊaR?] iP|ܴ-nHؠ%/C;z >\BfmMr|P+f׳1ƹ}ndܡx ?^!~k;㼠$gWA[PdE#]v.ZԡAlr=nS$Teuk6l1ѷPPwji)-(1Un,!GL-w)${-:!y1K i/d3#7ǫ^ ,7H`=\sE P{g*e8&цbxI'(.(D[ V,H;dƋeP<*K|3Z b:r72 d^9'J!@pJֿuTcQ^쑏xCm DL BL] C l =2:TKu?<9\kݘ48Ѓ>,0Q%2H_)F67D9> ? +OY=Ty@ {B):p.Y\1(d}"CI4e0$W>pWIar1{&uBL䑇lB@G>lHr!! aUT4 6#aI,E%=$N+8,AJAB{DD*C*E?\'Ll,(Ci!sMOJ0͖}Cy?KU %DgB1\ t ?x=XxR5Gp Q9 )*CuiG K1C9 ?,N1D 5,F_4K9<C-%A#?;C5 ?|4@A)@T2*=ܪ?,CЀbƠrf2p{Ww|B'0B[R)v?x Ѐq|A%<'PBQ < r':UMJ0AciJ0-DKC4.d"6%_! 91EPX\4loQ>A @J BDDPDT6aƥN- B9 /)b*C5l6$܅?`C \k+(90w $` P 9X )\p!fvwIG_@%H!?x?2U-0ÆHE\!A5r@ȹ>CrQLL֐!FѮr?%!x+>$ epG^/Mf9A@L IJLJX9*,h 0,@ikIG!6Š: /TG@e?06k ^`9\U1ئ =8AWU^$7x HD91LAC  A ́2$H씌)/,dC4=ڳj9YUph tAx-@,0tDLgaC&lB}1CTz$Q޾@@"ƉJJ+T> y'H}K>@v |qЈ'̶\qWj\PV# CG÷ݏ:G@ϐɖ0.±3Dx8 @ȦSrkT1ßAV?BE*zA 8dC+x%L,tòN@DZPNP,]~A3ᓴP1(wp1`F9CyL)B4x{FFԦcJ'ΰԆ96} !*4 +Fઌw7-4J=mߤH6,Q. "7pB+@H{^D3-G/hz6ێԒ:|wzIAÚq`دR;?L@ǷgZs}9;L_<2zex}D(GK)pJBP5B~HB K|Ffd]9\C),<4XB @.pȪQ{ņ m5H+d{|EADAtm1Sـ'=qzH}ed&2l#yBmdS^=r}V0H\ݼPZl _Ð KG|=l ʨyBU2~.C|<-֛ 5PAz.aǖ=vm۷qFs.ԪS0Ό:GU(mʴҠdM,Ss 9c ٲLݿ@gܸ%n@ctY rNcpjzG~yh*tzh>(sJǟe2IKDR4T@4^j#LR%l#Ov깫f7"=:DL4юa!p,1ǻv|_Q":""BQz@"&bgx^ª!s'_ѣMie~v t8a|G9rHɇ{Pemg6dL\ c$"FL2鄒HiKRDGtyA'"A*^4j!$5n7#NKCu,3sHh0$2D 4@ 7nKNg63 Q31=:8'clw.QOIq."{鈹cƬzO`>%PY<;uxiޞꡝh.”G*i @/X'{q*@+YA)/M#e쉏vR9x? et#v;h7t@G:wS5 qx͢ȇFna@Fd&&~Yt*Ty{ˀk< czhЯ) I@<8$>HE?!, JMOy_"eAd(D3CњVg7j t*+27)8cȇNrʋ3G;IMŬd31co|X9>z}޽/%*D,G?rQ}a }VL[$lika Z|([]n"[[25b*0DFSkOT*+[,_UB ]r]T̢HD@ {|Hp 8rb6. aC3< 44v!-lڛiN<2v{b#J1 p}Ġ`r41Y%ƼpT]>.r L]@ECOJM#ŀڈ16o]X<]Q]!e0d\MY gؑi.#uA $GS#` gV~7.0!.-wyKAu7"f/yaG>WOn1D-,]!qXspacAQ] |Y |4vH3?O$N#Aws`m|89Da ֖!H?]p "Hp! B*NԍDAv if,'R `k V2H1Wf (6ޡL(Y,&-I}C|!z)ڱ>A6l #.(EBd=C ` rK-쉧Xa2D't%:((DO|b)!V(:""Y>HmR#n',Idpu&m b+rnxA<aj,Z"!J h%al b8jmT(FV^l",A j`%؁ot@AnxK*B'RAA5p lG' A+!N4p F LШ .j &0'!h ~`!NK|*GUa)$b`? ` `qD'!#$'1$ (% (N,0\6acÑ`P# FΊ"BBAj@|H  a"{niBgH4:> Fo¾51*r7C!#G*#aT )ATd4l_ b 8좞DE@%(؄pa4 n%A'.$+DHb+h!}AsEY$8)ApiFAAZ.AJZa| , oPXa 8!ֲADaygdh\>r$3(2Ted2dfv.h3X 4t P>'bNAi!#!* ^CE[tTIQ,dR5yRL ^a a bmHaA !P܁@e\<gڰ d!GUA'>A_, 6"Y".qfe@  8vDBCުa$0 F:v jm"Cs_eH4" Rc"Q8[> |`/n TTQT,@AUoy'U5Ah,!a!{MҬԳOjLO#.fc$IV$ajF<>'.aa}R_ Ȁր!".^ e 0>2lЀ-#e17s|!!FFp GEgV:)p ȥALNֈL#L*~.L v 3RM>C2fZZAhOdj+cж )eTFʐ'4E3S3 `f~+R42axy@!FM!XALaba :Ats9N {Xkt.V^&{:C*uZa Ze\RaIn_bԲp |zIpGC V1BuyQOdvIAX-m)iHa_OO␹Ft4z5iϑa>M:ATĐ!ڎ&t_7;Yi"E 3E(E'iR Pa\v ;& `v8 b!= PQ tӹ id]iGH ih.U"l[ԵOH93hz *y!a\Sah>rPr`E,VA>kZ%Ά@jYOUVdI*fXQlJ9=@I~ z .ukk@4RmV` mk#ۣ%8!F4!caDKQa`>Z&Om#4v,^pRtp aH|'0hXH%XF0`ZafЀby 8|"j+F |͇Z8K؊Ģ!<%žkz7P}s5D,Œ*nf Dd&bVhbje2:a9!&˙t. \vQY=Rކ L,6$A/"r|ڡϗ1XAEps‡ a8<8 r1pWA0֍%]#.n+Wa$aAy>ARy]G!\OXA ڜLo~x" o[MRکM.fZNv"z`Naus%3NP1 Kifa1!!/F^WezǺ&0]>ain A8!aG~pa8`A `c!J 6>UUA9LN=}bbkF)&_e`m־]fPb@$iBr@+ 9!`ND56KP -^B`H`%P{F`K$k$. ? "9yXmYl UNjÞeS_񣇉#+a4hxԵ3&v4kT?i}AdNܹ)3z{E_=TZ5֭\z 6رd˚=6Z6E4HwnYbԥ×Ω43o:Я]_t̵oWeSq lOg(G#[tf M̓23O?V&b*b.Հs q7—?Cl"g`&a2'2O1TN?x 1pN1dqq uH3?6&[mp3guDCpS1 hgq*[aF1P s?EfO>݃%Ss[_TBI'hH+:=sf4Qg2lCN,PWHm^mn{VbD /1Ѐy.N:S:c rR&d~v 9\)d!mGv8΅CD hS4{D3SWg#uy0O92 gL)hk|5cN> 3BIє0>^Te0TL~LVL 8mbMvf}ՀYROH Q?0MQ|77HO:94L4LG$+Āy55N>f30LSVȜ$ $`9pO98:z?#,`!?޴ 'Tgǔh~~V6nhv.< O:^Q Y|[ЃG3>tC04ь~ȃ`vx@x'Q?ޗ|xd؛G׏^ dhqD," C8G 9"|(.xl`Gd |BhJ>pvۗ&r:\,0PF#D +w06$" 1ӎ}%/I0v3; RC)W]b x-n) c܂y,bbE5p|hE+ɣ@| hC?DF:u5YΑx4|buDŽ])M ̰B';6ucsG;Ña9Atl$3:SG*F̤IOҔ&"O.@ QG=at#?|t`%>Olp0At8at#ȇ j'<01Pf9mS`t#kMNRZSH1^=f*R:mC1ulӛT$Gu0CD4~5؃~P2G&m6 @T`[o RKMn#f>[lci *7pa\LBT9r`)̑y!i 41nysԳɊ5$Ό&GH Z?"`?a*j& yD%Db;Ec6sMd"S= t̞(F q$i pIN8J)=>'bml?NdC'8!_<(A7f;ͨT೙/Ȁ291 $(Y\+ FБ&&eF" {.6K#O$4NV)G91إts# & w>⑗g Tx-9\lrכUkǦ ]hd۵G9cBЂGIL"+GL8' ̃.6&8F+I1<R 8p;|`40M?b h_|  6>a4J"ih2A_d3F+f&H| h F&2 ::T# w>/,`1 &ȁq]01$? ODc `> ӫ&.hI12G |Ѐ1xsƼ~o1|(:` =TԯӇ{dSUNT z{*NS c#iUfVg(HA fR,3#w6/A&7Q@VN11 ^` 6}0 kO @4I ]t< S }Cy@8D99rf3BRIP g>gGb<E""T@3PLA^1e ,a 0!j5PyCρ,B[`SNˀ nR$A"r t`hgsb< B%4 [$MsVv` xpMy04hQWb&=苿H-T pt ;JiZ u` s tPj0,?8:U A/T": o0]0_ ITƀr6 Ȑe/p2Q o0 421T6H76=D7": P }Y8 p o8pmp >42d a >T")JE/E `QVxX ׅ 1s IB;2.L5h ? pP3 pSa;%gp wI^&g.X3TgSO4cT0R wI2! #b' @$0e@10 >9GS2T p8GH1E0 "iyp_ #@^` K ] m4 4D]+' t@!.$@8-i!@7Vme,wb@ a_ i tK R((gYsP+#B VNrYȒ8igUj.`0|A]uPAӰ a=!au  !baI&S9@T^9;~ pc&@  +aWhbU m /Lp Cpr)`@//PX荑 " l #4 W꫿i, l mZV4 l Gb1 A$H0N*{ZC@;s(59$ZFXa fyxzl p ΃Kp\Guja ewBð g$؆Q` p 5 DW| * F%. GB7` /aM5޴'M'C_1#BsQ1@H0sdd)\ϕ`Si4Dc sM_ @H@0{r<0e ݩ, ғC5CQ/ YǬ^",󚴵kEV=[c2ɐQ3z! 4f| Ձ\0؊H5Pp Z;EuQ'& yTo824 b# P /@P` dX1S5Q$Le ȉ[6 ͣ 4>elr#2.<@J-!BI6F|BU T5PS &z3*& +Z^4܀ P pu#Ѩ LggX,\ j&\ i~ PhrK@D_iCU mF)uj0W@oL "8J _ _4Q*=$Y*p `2P  P x2:()h 0C'(0a%** L R1 P P @ 0 rdM\}˺٫Xq9 S<"{  !fw@ kIآȍZYzmW@ pf%$ Y@=9@4V 3"0P i `E8n _ZZcN(2 v PG -5lLQQ 1*> 4!Fݖe'J`)8S@rD@ 4Cuڇ ^ 3###Va+pQ, jYP 0 `Q*b eN  R $p WPh`>REBѬ1$9V,jm&dQ~UU cqPU^1F* uV'+PPCP:Ź`o '#`oPPQ!72C bS$–-\n P_Hǰ 2PqFmvUE 9w-b0ۘ| E*}l,~RB @sb=,P &$Cp:;̀ #'BĊh0s;V،!*xΓ® @; pAM`/Qa#LK[@v .lvߴgm,-dCz `˟t8"C BGO$=}.%q6|h޾x$m9IlۧNCaŎ%[Yiծe[qΥ[]yg֡mV%>y|9Bƕ8Hy-H;{Lcb7S?kxT诜!O\:1^bSy5Сyc"_~^uٵo{Zw$gV}g s;}-2HM7R1»ϩ8i%:1jyöt/!'"Vk3ȱo܁osl1vdloH"4H$TҬڈ2<)'Τ~u !itfFyZJr*:m:)vAǝVjX!RX*sƛb'bHj)+K5TTSU;@FР/ZծƟjy\rA7jdzLwpNo2TΨxnʧhgɇ\1V 6`KuaxFGY'luh< 瑟x@c S/c2]C*BGh- ~[ɇ*n)\E2#vi,ҩA{ǜYh;-/И#4c:v,YǞR>x'z #,օm'Vx1%J.b9͚w@&Ps?@pY,-,G6x'1XW,!z$ o|LQjU:ˠGetc8I[A bؼy0 ؃:@(;1]V1i'Q:qMu*EQu 9HQy > J|c7!yZlF4hRXF_8Q$e)Surԁ}t^aztҔ(HtS/Q*=x^@cR˄Q܉%_22X8xaB6>4e9yNx6X+Wćṣ~'Џdxǧv%w$Fh@83Q9F1t,:bth=8jpboCgK]һ&c {#"QUcBQ۱!-P9xE>(h48 Zxc[gQ>?C K;jnxKCj f,H=/T{+Z$( \@B.DI %`PiAE!G]Q E'qGJ`DGvfu PmUd _q9eBx=!vF)4;:%oK}^p >@hh׀`zT.@-pAz;*G7q{ĒqHzcDjЃ$>D#^. ԦFD9E>R,škfxmp/E'HWvLg[۽8+=]d(! %`G"7>gn`kgDE/S8o9@ Y90`!+׳^Fvݱ'[mm\ J10y؂ycBSW_ y8.'"+j 4@\HAl  Kl z ͅ%@EL<&yWPzHU3Q$kA̎Jʼ̨Lw`!.チ;ʇk(V@KHS3U8) cK?zs~X@>! 'W-O2Ir@3w"3/C@(ݘhɓ ӑqHH|@$9@5Fx~)@=)|!bEy/@*;.xC !HJt-<=$@x~C : =!>p749pRD@P(L){K}[=R=ڍ F K̞jT"89y>9TL=jT B(" Ӌ6X> v$! 9CHzSt跮LU_mL:Tk U$(8yeM! }3ѿkeUp ^t0s8WTɚWxWI׸jW|W}{W85 XP:؃-X]cKaXXsX1XLCXX%/1Y==Y)Y]Y࡟BY=EԙYs4NkY-Z1Z]Z%YZ~-+ZZ눗Zۼ[w%[[U =[ZHZ۩$L9Ш[Ya \UmM\ǍY _y\ٛmۧ\[KAQ=]}iݳuE]]݂U]uݿݱ]U-^=u^W}^^}Z̥^^++ _p[]M_]m_͘\KkI lu)I_ }*haU=`e"#)s2C, `~-8.NʰR ^ SE#JM]Tčp\C0Ka"~ANlɖ@-b)^<}|-&.p7)m#VwУ:"˃;2c MX 4Pl#]:[ܱ&ysq # (層$9u\C>jU'3@vv `7(BjѤ!=pYۑ'fj~빠xaᵨl" l ɡȌAz#FFN j*/3;* ~ Q4Qm^ 8ҍ؇A ~Yys(6`m6 v>*Cd 2څah-zW0A6@|Ӎn*=cE{[se:N`q-z }XPPm ^./T*&Mq(^(C=`Zop<fFLJlen|‘kK2ZC(Y}JMML`cj_tAsč@ep@bSAMЄ%τNHЇ*_on(B: :r\^avu u$WrM؄MJ`N/"{kigpx GVowVwy0{T z0Kc:y .re}Ч|~s9z+wcnPRhcO$y0Oah>py؃BQyy9jN6worsDQ] w?F}}`4yq^R W5<2@>_8W830*R" d্`9nq) зN2ncpf8?Fqq}o}ۯ}}qp}G}! ,vH!\ȰÇ 'N ċ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJ՜޼]ʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nqnx$8֩4гk S&ӫ_Ͼk˟:>3Ͽhy LF(Ofv ($h(,袊|(:2 Aʌ<="=2>#?TViXf\v`)dihڦAkP]9BC'A0T84@gAgYy#hAv ig s0te0jWz̦t0*+3L/*2eک *찻*c+1Ӂ*ꬠK3K1􂫂f+Z+r2p.<\#lɼl sͤTP<ń 8xJ|JSG <4<:W 2O:49*x  dF=uD p+ AP <=Cc:Pc+; G4)/AqXƀQhn;V!v=h?ґ(D+Jq &2@ԀA -b0 ?,a7/AQщNPey0A )CIO,=(#ȜMw9ЬяyCc&A @_`yę4 @%%>ay G̑l iHEOFXy$Ft81ApL1=#h8.~ȭ x 9Ȱp/4qNNNwqȀ)lG??SOؠZ1=b{0< sNh׺ь'4?!C9(qjW(9P4vfrG48Q5` H H?ъ>ԡІґְig7u *'2[tBŽD7Vz@zx7l{h4bE@{ǁl /ƈ "l  CS ?bc8= ȇ(◎[2;JFH9X zc?q "8$B I 1ˊ#>~$pĸʼnъl P,53]غ83>4`x_B9n8yc 'hOVs9(Qz)aA~\s8$P pܣl#bO끆չ$85ʉ"8a>AsH\Dz bv1pe$K@VT3gLl[+Ӑ;9f3\#|. ! tF/ Qapp}>6{a?КcNvj*|0S4P0wqb}J A-EQ"i+ؚ׵¥=x]F<=0 ˟o?ۂ`ZE)#1A z@=+F 7|#d V\dAT\ pEА|i8xv8N8T pilumGE 6| ty0\_@885Ap Z3Dt5pac5P _3pE <0m@oyh^p$d8yPNhf{Ir?@찇9?pD_x 4c t dTsوצ _0sssTHH0194  w GCTQh4X0 I `P XP0mC/?9ЖDDW3;ZI5M G9AHP А0=湟4`0=5=T{}XT ^9P oP 0  S6X SKdK@ I`Q@=u FIsI@Q\@C=@ C[SS@yG ydЕ P WV_ z+?"?$@MZ%\c PG?P9eL OuXؠKvEYP ZV@}g sЙp Y#1kL>PJH|˧zk[,6Dp5`  P@S p*y:bwm|P ZsQG\uJWƫ:7H7Ql \:S=߳:X7ƅ4I`s_<7wwKˇPqAsvPmW3 , q(ٔiY\&ZaXɐ PKa/+8@uP#8#18=ސgSEqA8|Sb5|F @ J X( XxGF~C3_Tp Ǚ |J?i)[E }ǀW7y /pM+3@3xu4  0ӟ z X0O @N6h̝ |؇$;XMGwiycX?rY +dT  5uy)_$`9cY_ SEy } H`{8aA zKIXpcP4 䀩6@ DpO8nl N| Z!memfUҙNN5J04uu1=p34U\P =VH *xjx4 s@0\DjN鑫֜g=7GK\pSP eg[ۈJF\Ȁx䫒IJdه80^M@Rm׆.}`8#(_DPh` |P 1zgp66*:@*s p ?JZJz\TlJN4 pp~JDjQ}}%H@$ǘ֜dC>C|<}YmV1TozKw^ᓡKWD P>Trᅑ٦Npp/ȋ~\'\HDp?SUşz dNIkxnoNxpЅ;/2@> 谰ЎETC@]l\kfK5@p:a D[Mj.lky)֝IpmjSNun3~jOЙPm(1=5!> ` ORt %K˜zz2** d)ys(J6p v&%X]> D&p"02\b/TAF P9XA4B! {84ĩҐb 4D0@E?{@c6ɨjE (k%9IJVҒ)ZN b^gWy!x Qr/Gqd#%|p@ 0ʊ222qY)M>=in":ahDae[z>ԑfH2fovJbqbH^ҠEhB%w@t:,"-"J2J7If|nK']B:Wֵ*U? C: bN|xU.F3k*91MM>$"-Ae2.!@]^f%f>Ngc_ҏq8GU>MЉQDHHº$|}>׽Ō6#3He;S('j)#ASCca5 *@9ыY0+?bX4Mrԁ Dp H0NAVW2K ɜC3{˦ 1‘ޖr -JQqQ]=3LF{G1F3=>(h2eF撵hNQV] heԡy|M'4ZZb W?Bh%D}Ӊ9b QAx"!}HG/ejW׮ұIrRx:^l7OA C=Bd dJo&"  zpsH<ȃ gX؊]Pgnd+L ~h!F;aNС(H-!Zha{858fp>:^s3^ 2H? 3(ܠȯft DTE`-b *Hu( U1:p P r $P+C /B[h8#HnU,ʕk9C0ؤRriCE$dy/*(:Crŏ@,':MFFTu@h>H?@ B  {70 @xL n(qC jX<NjJBsGx ~fTyXXbBf0G$ޡ^C!&-s 1 " _hr *HyXCvʯ67Xzqȁ'0K(f,lAw16(É.k$] 7X(86@$RLPZ(.$ S|pb({@Nxr0 W5lʬ.[ҧ_SbD!٫XN( ++T 1!tI\XC p\h=Mx-"P4`IǏF<'@9'/Oq=nOcPtud*۝y2b#FD%Hb88O`̈́2ZО@jyʇ E:Ɂ*@")_5)TccL\gFxK f(eiFw0$ȁ m퉑(:xuM؂e~PC`P1(eR;W-;|Ɉ_X" ㄏŽp֔UYbhQ+@:Ă 3S7WrX$-@H8D聀(hu0<: Ue(r=9]@3g9Z@k :"Wȕf`6$  A].0媇sQ \0n]~T4˒9X.y8X >94ʅ)EX'0rЊD$Ő)q1[#~^P7<Ȋa9`"_{"35- sSW pJ P-$7 \85RU_uY=y{ݟf πzCufSU^:|$\s-Ӥ[clx?(\PK V i) _8c=h7lG`E3 1RrrS< >)lRЅk/ fH+%gG'."В'H>(՜!/su|!nWX@! j4 c!0H Kd0p3*8_s[rh!L cp X(`y@e a`Ϙ@գV(>xXpcj0Upc0"S8BN0c@<"_v X ̏'=0GْL:|Jj_8*)GXRcp&Z wH S*xֈ%?yi q@ W b")0g90RbXyR |!81eqHc؃2ȆV\EYJEA@q˾dJ:z@0?N1RJV&_X8akް-}&l c{shʫl>Qj}W> < _u@hdm.8{^7,{81 zD)Qxit(MsЅK\Vh _V`FЅVWj(=hATXM؄ބEW`8"pШOQԭ/+'@J`pѾ–p{4?G_{(ȇqaױEypqh0!C_i|C[^f9ls*3Rajxe] e\^pFMMJp0g aMxNb|᧌s A5I uAƠXv aV|hH|l& 6HOvF(7H=uCp39d| im ]#i׬_lՋInuN:{b@00q(`J1qτNH`sHĦ_Sk,pPv4@B%X.ehPgV&c(~H&6AY o)}X/AwyߕP ` hx00N #8qhƸ2lG(1`؆ 0;:{ +YX=HoLwMLȄM=hȼŲ'󑓧|(gz ?!+Oi 贞PpGkl9I܉θBl@Rҿ[ Oϫx^؃ԋ>C pI}2[1QxЦ8b*3?x)#?20ΊQJ9e2- (bL$#'Gs134tc'H# '(iN9昃N9C1D N; ?YL,# *:D%T S_\ =̑:W30 I)S%Iӏ<JT_n?̂+8X/0Bɽ 9?`:SR ;Iȓ+ŨS9$G'T & oI%#"?朳?O;ǰ{ES?O?+ /(5044!@<爂c:(3ٴ6mvK۽t 8RwHs+s;}d;@#|IQy=O1E t&t"+,c *{.w#)|>`3H k2<&!kɾј#<5:?(?G97/=la?R2]? 5?PSs'<6#aVq d|/G)0d wf9<)=0"0,/"cG%JCh aItv񊇉L`*0RH =.l[Kl!z#Tk!"\#PHW:0eQcdcxOA4)Tq*q$B34#H0 N?*P4 x(?;f0$$")d{`$\n<#; :"!z:a r 洈i!xg&:UPF-qm >nY!g>dZ`. _*{p|hj!J'pt!'JэuFʕ.%f@(|3 0 ##٬еfEDr$p*!]Ku{Ncv}Q0>Cl\:A"88 AtD2T`xaJB)ꀄ` E?zo $` HS\lhLjQa ,pY$&ЭR^eU_*NY< i$/a [LJ69Ұp?::0v݄0SNB~ث%w_OHV*Qȁ 8k:a @'Ti!K9p1àAkԡ/VЃG3'GJ*D%٪@Pl9Q.|`Ex DA||hC5.,fpCHY"a=(>W#?bو^U$Dp|(_;Ƶ@ 8]r?O$#4-L kG~()s+cc3 ;0}@+\u^ć~\QyȬ~Ќ#l_?']zg0B<M;Qp,yӛV?q H@#Ē$ oYrEr :rHbfSnv`>u8Bjq`蒘0UdZ9x7dh1dgC2DcF pC~Ƒx6 FJ)@ܴ+ zAX!S*1 U=ڸ3Ꮝ%xCg *7/z!a$r"#%01`d' S4,! \ f@|oENuD%HF27ejy-Κ#Csvj>A@F x9Lğ(.a !Q!/4ҘjS4x!ҹ=oh?F@\@Z > DIԈpPv 'ALtY:C<9IIUýA, T\UU`C!.#A90 ) \`DRn"'vFp18<QHA\ )CЀRLRMB `0DhB&8y(E,=.C!B%P'CB=@/ÉP6x0lVك (,;=A$$-vV"aKI:,EER@-;q3@L|O9 0'$J607O 0B9#V8#> ҼDH?-O!B?#|U#̥d/4T,:Y0'WuB8c8<,@䦤K!+Lup*N똥#яEA\f1 iEAEW6x}ɂ1$C<\ZU8U PU@P$x%d~aS&@2iL3A)_p,Y`Xl<8FBtH+V^+C5D@kVfD3( hD(M ÉP+f-Ky6P .A36ADCb:G=j#E0mO.):DRU !2ܐ4tB1Y?>˗`ڗ|g\C=+0f6])(F86d%'¬ rf<9\UO?(a`Kub% p].7kB6Ui,@}f=8TnH;H?B6C* ԡ.v/1M,p="a.DS8F>dJ "\C-iCl?M> oIL{z$$9Q-hﳬl*,C,d5qP?8+Dz0DE]2DûF`ĉ-XCPTP80J8G0܄@EbUfelQʲɭƢє CHA݊-l2BB X@cQ\?HB)Dav.f(HAK%Ԃ',8Ef5ŽYB|4TN5?`JfAp?$3C<$|\\6fK^JevfK!9RLLCgfK(;y<5< oNLH΂$8Bn%L\@J58fg1,7j=TC-)DL΢3<2B:h>|tBH9dCA4&ELf_T#T,/FABHP?<x2 $D=`o8W̓<H8Wi$$$+.Eo3"dCG^jiR>p194UA8 !+Ȃ "D'@VcU?7+#-dy1pAx2&F)AjU<2A$#+S$a:K)p"t aXk/Qc9:4'0Ĉ#WC5$(:Ƈ)2):(! 0-T@C_m1*:L4&H9C9B!4SGY^T:Sʧ{v;DAlt̽DCumװ.Y| Đ&V)04@]ݑy@ \µ `,˜ZX$`+ t:eHw<--=.Vhxp [0%!f? eO>*t½!0@Xvu<SĭC?"1vQYa1zsU>hUћO"c802 pDXI"fѦ7 _<׀ pAr3uA$\9?LKf+Tb:@w];{+& z sWotetVJWW/_d iӦN(Q?!{5e!ͫ@"FԩĦTfպkW_;lYgѦUm[cŗwC/|9}(uʔIScMmr?-gT. 1߸-wj5Ow0NiFo{e.=_ /bԐ.K]g/96w]SORj/~ܮ *Ȳ SP3DzvAlz"aPTL|0, w| R!,#j * %t: sYG1D.ԤFdkJRGlaL4䨠tIc)!uyyVt%HX| N1΁ v'dhyu2R*4瑇 3|aiSGѥ28_ {:(sAE XfKsJ0Ǝ-&Y~${W}۪9**}J%y+aҞ~I[@餓HnO8N'#aʞH"~!3E4iPR'W=Nnd fs 8inqvv9r|AsY^ y)?mц9fvEFeB Z>GfaRx48pڤ\/5|F V{nWYoas!x]r Q{J* g~l9'Adc>c׸ ahGv.Y!r߽Z9(t7LG+4A d-x`?:'j  ;Cb%D)6WJ!VR@#<GA R`/ƃO(vԿ{H"`%6 KL( xtjUbF1eDL1u ].GCҧn08 T': Plc' X %+yXl S\܃$=rJLڅhC.Ubr+]|Q 8)1.az {'w̲[y?Qmh2.KAM) _ar VЃR#A(^K@Lvmf8Ƀۉ4:8Bo? (a}%@G:edCB9 ` eEg&H А{Hi"4n R峧cYXi#ڶ P$CƸ- IcX=ΖlKHIz HG+Q1ԡkxJ1 OT mqĠ1˄M x1\O1cst׼Y9y1f Y8%w'{#-K28 XxC^9/Xd5̧48:J\$r<|iaЇIq?1SUw_ F%>H`"DAJhGnn]F: ARdb x)&bh'q#I1;s#bʕdq戭=J/Ruhx͞R©J0\s%ͣM HC3&fEsC+p9@(1aD\="=˭H#*'i)tC.Xy1|Wy: *HvСx@Ѐ-iˌ#TR.p ]WxQY3J^h́ yȃ݀>KX Vdc̙QRdd+v jR.0e^ܑV}"']R4&QuDJB8 Q@BFnD. Hg+|\"<(+g T `w `%]t %bLN0`c ҁZ,pP ` @ y`:K6HkiN  2 r$A2A1z^!!ah!hBBa Q. q-Oث(:iH7(bd *F(ց!V&+* -V`%,>Vb*:f`ARa΁JFdhG}.`=% j=0! !! ,g< M`r,hRo'Ā \ Mt!9ꪘxa%O%Ȁ>j ZdQq%Y%ł"ZGBNfI\/N*!y ax&kTObq,-f&k`:Aa"DhDtmK#A.i A.ag1@ 07qq,Ar $ob 6*e3өAaJ aZiƩRb&/.]7b |ȓx$s+*R,(!` ȁ !<,#<3<; .B.£+3>/8A>S>i" p %!.D40$2b;!3Ahbhva -B9.e݋:0% "<-#.`R&|@3.4a1cjB 3vxBز4.Dɱ &.LєےSH` 0oh-3 e"bMx.pJ;A%#ݠweJM,!AF"$C)\ހ!W (H.-#Ҩ`@dIF%@g)y,A**!b!X!bX!ΪAx4e$9 Ƿf :z`؇B]Cb`6V`Ʊ-n!; u+rv(wȬ*iA8vN lMN @|dnBJN`"4JЁAaWf% pṯxL1vHfA@aup J-P1P(h3"4L>8YB!av1c`mQoJP`^A".c .NFvm'*GX\ vFPb&N,B0Q F`pd KA,&$p`sW` 8 xawknTZ FSqeT c~*c@s+ ANG^!Y|-fhBXa1O4ܫoEۨ*-9Vx8~fa%v #|6 `*_Iuc?aPgqi#Vk.HanoelFaUBT ̪x-f22=6-d`ff* qBh_ob>v*NY'#%t:h2]M9VvW萲M"}'Mfv`TD&@A-1(Ȁ8N(A}'$~3AgbN\Bp"{&@Oʡ ᠱo`. 9#n%z$ʬ.Bq 13Cաy(tb xta*aU>Tg ڈ r{A2U2@2@vW*PCAVŸ)BqHg% 9W9rhQ${ ,|5Z"0/Ks)!A.AGmf`% gB j泜 xq.5f4ڴʘ٭lH@ b >sA?AA 3~bN.PPl;/!|xg", nqE)oG+9;5 ><}HgZd!iAdAڏoUJ&hR/1 I ܀H  .q5RHwD*wH |`p(},ΜLKa$Abk*J~aմgǪ^1k' yʑ=ĺ.oFW,Vd 1n1,FdrZ S&t^Kd蚇懄krZ<‹^y 1̿ ۆa&1!W%f) x 5$c bw mA r5aQuܜiR*r?D=I]ͯ>(,~1_ bya\vԣ ]|뵌{d>EHpAy~"78xĨ1^z_7V[I DA# /@ h?iԩܴj(WzbQ ]Km0f̜Ԇ9gnשZ#u=ԫ[=ܻ{1)qɖ9~}DӧNRnb ?5_V9м[Hg+W8<ՃN>LH sE%ΑG<@E.sY(c4t=0 QA'sOEB!Q:q]bIfffIy2F4],4Ӟ{"Pxlr-D+}" &|O=(Y1+.<_/p4(C3K_O\THL?xF>C4h@ 4 >?`%GxN>qCLBO>xc9Xne:榉nn6Ӣ4bHNљUxъD0O2"K2"-'Bϕp> 9?m%? 7->SC/ @ dH,##ti $q=/CYO}?H757O3Q˕ m/ح~ x'v208Cw't76MITD&0"?(t @;4\}Vw/!EE/f!$0d4 6ҁ!<:D<ӈ'h柏~dxu FyA>xMPȄ#l%%1w@bsқ(♌zKBX99U3R ǀt(iM"g#<ݘ%)qLl72 始7pHJn4P0)`T:AJ#Y@*DK`bX|O:=t"B94/%2u@0x (Cg3 `ѡ0#HآAO+G5JpP-o9l͘5"huc ؑG0dL F O9Ӊ`#| .n'ơӤh#0Bֆ, LEI!Khs+<`VygDz-!K&W|h? 2&ȆNV>R+u֢2%m%8ű ?%CX疪4,2.A5(G9ؤr V䝊Y^$4|b@{e&5R.^d%EځvThD( GĄ.G}e,P iHkF)(zl.0E>Rln+xъ7x0M? W [t|rusGfȢ%t2 a / @|"Þf @S;̹e0E1:$t[M|:>/ 5>}"|2 oHo8?׉-tȇ/^y69?hx2qA#Y5ܱeH:%C4X vzDŗš`c<#~Jr- YGD}k}\YeΩsx]dcR27+XĢC?(9jĐ/>8`Z88=hg62sD, -p!'fъ3Ta U)qe봯=UlL{8/fsBClH `L'JQW *x5.#u$ HGB'lTl P8@eu @wd{h%:-vvR h 0vCB Ass TmFCD ,tG-'' Ő.H3#f2s> jl5`rzH tg{`FpSo7M(Aq`v qGvP} POhy_\\_`9 i7~ a  #TF@ p e)U|ߖw*(^W( ԁ( Dkw1=CPuΗ׈ޑ5T?2u07|@ E{1hK [`$~H0el` P J{!x>_e"y 0vȏq +7W؏hL]P0&6B^en!jv!=疍A)!oN1 \)Ѐɲd փBpo8 KBt0p`^`PDzBnFJUD ` |d.YA|v'DOBW I1?#C\tCY݂@W 0 괗.XT Tēc)%]ɛ7 @\(: %ћͩ[ `p[RZ d}5fzA3p9x6 iU6P ;m]-y-ɛ 6Ű 恛I``DPX}zאNə1*1*a @ p\c?TjGOk =$0YO  9 ݤ 5@7ǚ%P A Cp!=>E+LڤN `x {0 piyMZɚ*Š;Zn`y`O +x.:*qp\ ؐ!a1@<`B1NH`aaZaJ z9hD %Gv`!WeP[7O7mH\ +,Qa;n btӡ[Za(S'O%׭q@hOP\@(H֢py걣 UQ@ 1)dZFYB~*5-lw X 0@C h p`1/ S2S0Ѩ+@K7LaOyA =?>h- s@U@ {TƖC4of3tO6+dD]y2r\b0Q\`10ԙ:FAQ% #D@C+@ɀ7t]bХSՀ2dp &؃ւpop z9pW p>ePIHw!!)<8r.BYu0FTFd@ J$ENe( c-i;QP".4 P @ P @  p `0FMcÎ g: *AyL .X1 nPs (^P @@,ƺUݰe#ɝd%դ4e, ꜿkX+Ԡ9!Ц%TmzF @g1Mpà9ϐ @ p P[t@ QPhPXDhйD@ 0 0 p>To@ - 0OP m N `1 @\Pò%* V WpAb%/`wVcKVwOsg4 }hPC<$ 3ҴO(1e͠ # Sĵ  `@t0 0  ?Ӏ!4DCCVP 0 = ਻P 2: 0' !eb1*q pTh[hwiώP P`>R nh3a `_\yȯ޵Ot p p g1CQa )<1$=ڦ<1`uP"ʒ݇g}hP 1Ɛ ` x` 0 dka=9}r:I\Ъ{w`@9 a1P  p"gLT58 0*YO'@WcE%p o `-* tn @'-4:Q9@d0 "5{ҰطsՆ,}5@Y:/3$Q%Z79n]@O1t 1Ananc`,H=lZr2]r.֒4 W MO  jga ѐ0 _f A]Je' voK^s@,'30vT9}זma.r u,49T@P R5N\2~PQyp9p3*BF 5Sk+= 4NJxla|8 AFVjF .WP[  !eʋ$H@BꜿzԵXELЦN0aʤi%JKwF1eΌIE9u]?t^'ot蔢KETw"OED/@"q"afkرeϦ]mܹuo_bXI* L64ىQ'}|wl4Q;wN4bAi׹|RtIIUPDLFZl1ǧ */7|OL*2tԙgE|\ꏞIbTs 'DH.X'\F (|!œjxa iu  uN~9bPlO=q"?MPDUtQFuQE:NC%~ډ`6QJ*A)l̑RSb!xJǟn$aOhԑg~Lyٯl4XdmFP$r$쪝dmt [mX䩇QKK8cbgELO8`Yp%تu1YǘO7Q(A-X'zcө瞴8vBNQzA#%@# %B3"|IJm'ꅅ3|8%y.tivi51k8p Y":ir|aj8˟Z^XZWr5p~Q\hTYGбɥX/p""3~YƜr</EuɇS\Hc=c:D5XY1+tRШ"@Ò9@d$ /\m aRC5Udj$` x@:-AG6paMp3q;QVHDq*٣2q xPJ?erCZD8K10|#l`ojĐ Y)JyĮXl0́|@$$ahBk #d#%E@K=LDj"Ѹ1JQb0$PV D"zPIldEh tGr#oO7QNT+n`C#a%GnYx8He^ r NIbk$ ݃Di!(AQWq&0D#ı:t7` #d YBk-|Bᇀix1 vc3KkZ{'G3@:O`OM^l!+"8Mw '&o=iP-s3WtZLWC+F_-RA rpbrբ\%!d5 Lכ}aRL@<̣xPiC"t(, CBDqO- Y&@tY~y0jY$&THE~H`Ɔ@P\39q.L dx2iZehE4`V`d6+z1@ew-n1ឲ1O;7Q6j7lBo}_XG6)fRT On-ȁ i`Ȑ=Tn"TtHoU5ulh8UHA(CCDAuȰKQ4'~?V||^WNH<`aǖ557i*2e ; cu :̎jDE Zt\I(;XNk ¡ޠ9X';@>2Vt,B-9#6pKB±j!J9`J`J`O-3:]0WL%h_аX yzaDM|aqlP(@@9nq_ٛv0=D]ȇVH"T"_AZlQҤ-|GxGި'2HR  H~YJ`#JO J+F,u;] Er ȟQJ?ػC>"B#Fw$4*Bx~PŢsRic0{(lMPL d8&xS :Bt" KGK`B C:>G-:b ~t3PPEu0[{Ppva oB(ky DS` z'y꦳0LYZ0oŒ`ٴ'lRD2$iG0_LQ Ĭw!f3 BOLXchsd(戇|*&)϶ٜ'';2Wq\Pe-(*EY)#crTOX.r < apwp$'$ [IH@q8VqGѸDz]$%V֚br8&Yd lC(SFs؛^AWOp8@c/dRR_lP>S9$ГI2 98b(_ T@ s =ȤU#F1³o`CNhfPꙉz0E|w{" vhBJR%p']̋%X|K8֌P+N_+0Aga8YVX>yh^QSSRڸ tmSS{W;.8Ƀ<'9H/%s\e\~f@k@j8"Q`U0n(:tPn0^9 b=1 |:8ޤ1ZmZ'p "HP@Y)Q ȇl#+bRrVpBhh81xN(D/5;hZ B2k>q4E|\ݯa7))@.XAAb ch+=(7)tK_T؂P PHOLOJ}PT8p@(u[ACm%filjȅ>@$$/((8r`dA؃GT,Ĺ_= :lO@.9 4ٛZ @@Z–X1Q Xlߴ th8y؇ FOh20^ (y:6_΁ wN8La+؛1\|bxV Vjm_ІID N[xY01N? CĻ+g](:R8:$;89@4c7$}aICB aPdJD zt C_ f)^i[EWHdFAboa [Ym &d4!nfg!;NP Kp)o fpHH`H]P`HT`H+Xex5(rVpHE|E` 0hE{_)p%ӕ\=1aD6v 1i->.eˀ =wr/KgPqi z@c}YIcs F?~fj.Iu Pʅ̀d9J9)@ӰtCPE hFvhX= Ƴp`N&"~]PR+Y\Nɒ aZz!"  0:PW^G(7W@b^S8]ky3 W*[Z^c R')8R,J]\U5SovzyE2/E#~x@ƇBiMK(5A'I Y ba@!^fhtyc ܓ֌nW: g9;^m(N@b!e@-Xm:0hOV(jZ#qH!)a(S@L2_8٫́'PIQ]XF.o.C)EwزS*ӠET _ꛠ ]JFBHlȇej@n@K^؃Rfj΢9z_'ܜ0ceLdHe[(I?mPz8*Vjn7w wm_~:sp5t>dtٴe(ul!|І 4rTf$0ytM7x .rpA6 4fv55& HjA}׾8)d؅V[^BsxPU2YHre_~g<]Hɜ DIf rPkP;Undyhwtn؆W_h^!Ah Xb}JHeO9R?}(⛯ۯ"AY%`‰6ՃeJp;uT?;\ш'ӏ7q1ŘG&n9nyҼbL%i96-o4"ox*\Rp ' ?At_<"C(,&[oI'dNw:NìQJ 5 hQH !AxDm{;ȓBCS~/$Q.{0Le )t.G6#Lc( g TfI9c֛NӻEdvՌ935?D8!<;ls9$k'`&ɯƤ'YO!t<3+DA` hHԁޥKyU1^!T. ;A.m(P-n XDfx;qC4 V $0$aHp]V-# .l#Y?X!bc%A L 6q8wR,qDj\ SB~4i?1h38dh\jGw}S*;`.(21r,jG8*>JT}py 2 ;~ZI$ۼ=Ј($X ` w'e;`9u7'4P4d!]5X~'! L"<&B芁"0;0˦A#.l'qI_@F43)26g8GVf`Kᐅ1,{OHßh(6aq$w?}163p"S6I K@d"D$d G$騴nVj`E@18g'ABla;42@)^h8@E!1```$\F~LvŒzzG uPyVt!'OTbگ, .ho.٬tMFOxP@b'al=c\yuQE!@J@`Z˃CJ>lpM @ uJI Ĩ PC1>` >\J\Ω>ڬOuB-˨ 2+5a},hS D JC<2ob <ڄ?Q|QѨa (BaB B29?~mYCC@VA.dJ f`?ćF́%B $Cy<<+;̋=Ä3ZmM>mB%02<?m.."N܂= ܵU==p$@H',ml<ޢ/m n^xW ;m@[8"8=y? % @$h802B2Ȃl,C,62wtxLFH  T_@ !Hd>db,` K&!/C)-(0 wL< w98%(O>fуʬ : ܱOݭ܉Cy*2W`MHBϮGB,XG?`*CjKJcBfd JBaC$$C˵-`C& @,3!xB#\B+41P'LC)<XbL AH"`; @  F!>4@+3ANpB)DC-N?L `1+j<"i*S!'TؒM<0>,tف"D>D<.2a=(:!@p.(J2QiaTBt6n"D>=`ɇ44I $>HlL% ¾5ZdPMLJ?&BJ%hC&^ꯖ! yB]&̚a2,M>(C9ԃC9C40x;xCA d,\b {ːkȠ ¡aT0Ȫf19 2 X^2t]ɂ*t#B\$!>@Ī#Rp J@+$YY0-?ȅe%@^vby9 8xC! N,=ZlV{+H6B<'ú8(0#:J?C%$CdMeF,p ؒWv> 'ĮjG%r&'oj`eP*bIW Ėy'?(%GGBCf(Ȃ+'dêe﵃4Bނ1Ҧ#k5vE j9  64.S @ AyFfXiFQn]5C D"`Q6mS11O8 k@ZfJxT@2<BiƷÃ4"TC=E8OX}|2HB1/\0%LDsQ1_D,A;`tU\  _@ 0kI5jAu.%0C+,èJ.zeyOͽ}sY?*2L6|| ^qC.T U Ahz|[wCjxF?"dc,% ю<-p60Kfe"o3DF?t7hd`}ǤS Vh2ED(NTu? "/'\!Ȇ(q?\;0B+,HJ?xm*'&` +:̂.C9bC2j6*=5x[ ID `Q=T܆NEq7BYYX.fL8:/{1Q@&0..CCP\+Qxs N(#Z'Ђ7۴CTrAD|,0!b hɝ ?C\T,I1+oƙ98 iptGV9'\ɚ-@pB9Ga3:90/pQQIزx0YT] 3<Q!9m\IVD5J+x.wL=h6C1B>I;Dİ E.DW -\* ɓ$@8 ! 9 1OYk̐p G-B9\\n>+?YQN: - !oT_ ]; 6lb:Tt9>#IB%G +Y-߼zi.,Yr޼sc(o9QիwiRK6ujTSVzkV[vDW_ّ#ؑrֵ_|#'zz_bŋ%߿B{p=$T| X[CӚybWݿK`c/oܙ=#< bxaa^\GM\i~h[s ̍Ɓ $ #m$rLX9 NZ)पʋX׎=䐡2t8AEVuc8!?i:1*!$r@B!`q4M:XBayg7>|qf@|Fou(V2:œr;{RQ{Ajaa.*>.*ht_jA&K[B,pd1=+?^)B'ygQΩ{Qy&i䣋GjѦ 4@%@ .".0`'Ul3$hcuqM! ODp],^:61!*L%iI%8%S%G6 l 8x^@p>\?'(Ia(L/l}ъO8D'~adU^sR U #|ģ?1Q>11QYy9.z#8̜Vb9)!TY$e/ˇ)Q=I!x'4leU$JW.5s|H4h9 Q `= K0$zR!F(tD0ŒY\SB6D(8GN1wC'0:d".w8i#kHLt8=UNc BSYN nb.B\?NQ@9ybM|Wh5rNBБ) IODIg4%,Q*5@3RIx0:#-RYֲNU*#9Haa&`H$DT%ObC SY%GJCbY0Pų!`Бj$hl1s5fg?+.41=?|<(I=GR+B e0C^StHp;GyCtRd1a@Y0yxF#(ukYCU*1a5O90 mF0>aEd.u$d w>PGhqQFʕrp"2Re ?`٣`<TY;04qGafY,A(hD B@ sU60)f!El | \ 怆)PG>A\ RXHiD_ѩ8,Q>5XTI*"&LCJQa =A="81E1l.|MY14D zw9T O(epA&X8Qqm墷&G;3fSȒ(tA=H99)3>7790yGkVpOe i";9?A f .{R OZȇ7lF ϡ :_!c,*,y̜jdT÷?Z좱>ۓ~T(DYzSh֏E pJzЃR!ϔ{ld=#/L#!0fՕTBV4HO<P{ϝ/zDng0}drǫ|,# M' ^`cjhśJ!&nPA,N%|h%\B6 ia .w N <0Dvz8.7|v,pBl p}hpS-<R k1{ 30`C6q{C\x˷Ncsҧ _By*ҍ"cb++| "s''hx !&7-B.p p{?0ke1ge_@RطPv+%u%z0k` >6 TŸ7d\DGob %y 4oya`&.!465:5\5،& ^Rr }2w+6BL (s>J+̂`1j.LCN6 7WYsK&yJ,VNn Q=4Lb\BvT[B')z1N IJlPϸ>V= y%V x(I%VΡNyP"R `ߒٝ߹yɯ ɹ.h4 R@S5YW!#/bZ |%O)]+kHؚGAu+ꐤb' !STR>sfӥ9DwRRf,XP | 0r B-)P !2AP@bֈOm*8KZkDǁ -ߞozb)za|,Cz[žRN?a9""ءu1bH`F+Lnif J[[t<^ə>kk۶#HMn{Iۘnc.1V:۷QSh[乕x[l`B;;̮ۼ[۽[۾x;#xb1|n<Ęc܃\'U/@3;\qC\{O *fΝe\0h g 8FB5&T"8+i)ȋg9țP*bĝ|bʫ\{My|Ǽ̑< |5Eley{w!(ϿhP6hE uLF(Jƒf!WlT-$h≄,0(4h869@)DiH&?J6`(NF?TIM44@"2 1|+-K^yS=8K-(cN?|)?ԢhGS(\ѤDC @H'7,hI%@ԟd&TRI597䐒91?hFs $DPh] SX8$SUO>AE>@=X҈'<қ6CT3?A@?K?Qd&a@Y0T#tz ʁ 3 FHƠ7@?O@%IXATh F^0e~ " W~p,JI-/|GHQ`/xiP_T^-Bc:a$ A 7g yVA?1A8Sc0>AWH.x1*hv̥.uy{c@*HXO8N41y>8a nTE>@2 ?*Io~s/!7}p #(H:4#,2' 0Q <8 1Ă͠%( TTG }$ k>. )ھ.x:9zuH`kҖv# 54Yu"|ȣQN(Gjʹ&.݉Ab eN!!$ /A`mXhPaVp~ ,mgEv#d{C G> `06)Oo0aVk@?ur~/@FPi;+I\9+5v$|G5aÖzիYw5Ҭ}yO|{G4 MxʉrۉE"Dov#9S#Y~+d73O+|'k}S@"U> Yx`KU `9B1M>\~`_2Yރ7I۔I'G/M)(fUk y:H<'@lM(8<'F vyg tS}qy'v ]q_`ii `UXr MZxr8gpU |ny0IU9BRfKPCL@CD+ zw(kS3_X<K8vچeyLt}u=TlDHKPy`tFX\wume EesWu~fTsߗT^A `  5\  p_TT6e `.dF'S4  E_pn`tQDH6 W8R~TFF h^I^?$Q0 gp \%D%6huHed`[sG]nD \O`q_` ;D0<8@V'!@PtPAǃ{%{vkW0J `[A UY?GC0 t~mg CUKPS}%ƗFO`VN{x{AH\Z`HD dpVk,DFbglSB8r׈È 6|rZȖʈΆ =0_sb_plI@IhPp{S~*hIex* z V  Ak 8Ij@htHr#Hx7<$ WiM\0UMgI=z# ~@tHѐDyQ0kXV[6I!*A9JM  [ᖋ9p4O44Qz%aVXv UakvjUUQ@Wp ps㹃ځ@2 `[Pk|nR*pf?U8qIHD09$Т$hGܴ ({dMn^$X\B\&઩X ԉ{AJJ?IhGNVh  >u{YEf߃ I|kօ0 AP Nayrd]0%Qn`D/H+0@ 0qwMev*E p@\Qk%) HN+`m耴r'xuˑNE։KbdԐQ{p6 +k[C>Y%CD}x$q `E@WWK 0>PNe5> a_n0 lʽ;XICp }U י50UkEIT T<0nby` O\ bs6[K0d'q P `h$@^bN 4FsPZ<J@ )7}pzpp FnP : DРO9q5Q@ĖMK 4uu @%LU!q@ 12PJL_A%P {P3$j5y4 VgK3yXq햁* pJh_+&J{pI.F<]F F;%IxFla.  mHg\J̲x5=mrov'W8P}>絚` qtp8W,` yPLjy7FhUFU۵+:?焷0'I0RGES0T| @qkdg4ԀW p<:<ߔH PMEʡ rH{R$P„yFoyH[FY$@ `@u R8I`?>] &pj] K8Јy0 h`wj9_Op˸I Uu gHyKNKـ8Н4FLQaMF$S4c/~t KQ7V tP ëU,dv9ƽM\ ppb|z=Us=Pp2hڣK}Kj$ u gv'hdVgSMV!@9g < *D ]qmWb51g],+.tp0=ϐS` D\kVMU NF=@"H`Ip$=D֬ |6(R{~w<쐪m'I` ޚKT^ ,eSdn~~~dD~:X|fM`~0 hT6\%%f tɵ8(j Q8|$Tjc=nR焑34{N \kP%ursd$ "ݿm t"Ͷ 0h@7f`~ӎ0!/ !NeU^P^(DDO=DX8oǴP~RW BV|P `]VĽ P2 ڵT ׬Z[<yԩgХsb'oE9|x.)dv:Z'$莧eD{]ķ;.XD4M9s4._xȩ[lڵmƝ[n޽}\pk 0_1QTsk`v[PFv3o0YQJwڼ I^&a&E2DO'Λi! -tѨ@SotGTvyi.)2hy.b.ye|)RjvtZli'j8ƫU;ɒKK@c"(@C"z``3.L1$L3D3M5M9ǜQu&Iqm#O 2ϙ*0ҐltR0Gɐ+~K!/ғszRjF#"'GKqɔXKt!TBg=ElcSrb_qI~R8s7s?7a4Ș:.⊈5LQn,#NxR #VXwZб]:2=eOJ"px'@x!gXgvD Va_i!GBuޫTrB ;jXhzEOANy?cXm' {a x@C:Ca UBS KG 1[A a]ghrPaG#00 "F$B,8kh`^>XCш98+k|-p<@(@ 1Ma % zr"B=zWPV9 [qL+LsI+؛RDD A >DqEqS?qPZdQ=yKĜ4EnrJ%#? 8޺؃!x kt6x)`,h \CEr 691TxJ^!o0y|{g z5rmy6h_kJ5կ:9X9@ Dt\W#Gh?&]f:œiW{'ܨdž ֻQC 48؆6<.qy7lbKD&l^ ,'w@xqqV F"RQ@C0Ј]fARŎt?2 a O#r:Fa Xt QT=ٯ~j#n((ko*zPv?J N2 <@B N$,cx H(,Sc28-T9]`nx/|Oh@8:bT,zJ5" ! vGZQlG o| iz.HσbjSA"B`bnq [DH]Xӫ'\oz?ٜZw~3Y7~aG*"(7 9H* "<7(H:0!;Q&N>h1(H<K>{<KȃP ΰ4 4/pHA( }(*[ɇ|hpxG؃Vc@]X$("7(.8$+1p3 CDTc.< @D4<uxCFRC)X$xKpB7>@@ X 2\(`O"I|؅C.'}! @$HYE.'s/hB48(S`iyh~RhOF?GdXCl d6X|0!()k"2ZĎaS$H@8&9GF"ָ >, 9$x= 9 ~"h=*J3"v(ux `NK`ڦb,|"c8qJk>vc<PԠ!H{ S7rqneG8<^dw:HXI=RȡjbZzBďtפ)(-xx!J0kj+Y`C,sJ7K6\\bB꤈Xpa/(33x?](] grx}K{ 00Ni&']ZnH) Q rK2%$)b(C/ZY.Kʩٰ>곇rPGCNv{@OjsP sMwЈbl3OFp@?1_@ȃ#OINZ`Gر~`=q4t>) 6sP8s= k-m-aJ-O0s8 (hgd#4=$ZHTETE;,}ܚ0x1Ng!.R1Y).vAe{)ª$j(`i(/D$#7$GpqI((Uarxȇe}hMxjhLH 32A(@AndRUD9r2(R;}gP;zQ0XA<aJEsf-Pƈ9v0}sxDT$γNqh:``sYx{hqGUCF` b1|@ P(YRPy=[yHH 'J )ҘA48،\RH!12gFr:RdYsRCJ \ܙ]RjO{tNm!`=:lp"Z=;P1k0-tȇ!P$!i>!g`^tP }S\wiFk=$Gʵ`M+{pⳋ+j㒌u88w 2Rv)g\\*09 `ei%Q@|.P+*)8RJ]pBz %.+ s(Ch5070C>_pUUXps؅6s8TdPQpx"!#>|L1?8YȍtT KԀp ԠR 3)פ[!> )f[iem0 ~ȇVX-c.; v~@IVݕQ@RER̘$}"@ ]Qq䍔~ȅ>ʈ#)q==ȇh70sHD=N`EXJXiJlBȀ&8ߊP c=#["V i"W(;ɠxA mB_ꘒ'"G8*#@n &yW-e㩗GŴ; R*@' 9BevO'p8t+QEž{X@x*r@[8`RzsRj([*pROZ:v:aǏV؏ R6sAN؄nL`FBVId`*ыXT5ȅFMl6t{ԥyTũpF.[H.&X08Y$ RA o"Ji['ʃ|B OQWT(""f(|Q Haȍ70b`?' q~8l)c؃쵨\ PYlT) Ƹ uX(CHnChh(Wo  wr2p(bIptn:F(C8ׄ'x_T>W*->LnD8JA6-8@y\d0u3Vˁ]^ $O!'M3*zxαsV1 w $3DiY\(sB2$[Q枭bOs*l(:ohm`zՍ̈fur07ej V`EЄM(NAwb1ńP:1~ehj(CTjzp|wIa53(޻y_fvБW3e_gqgި+aMNp7j]% VT+N=X~>\+H}Fb&x9xMLs=H~Cz ]ˆgƊ3jШQc1Boz*ңKi͉G / #ʰt2m)ԨRRj*֬Zrjy,ڑ9i|BC7OMqũ.(d깃8qC߯=tGC)*m҈7˷+}so\Fu<*_:źwm3_a)g 2}z0uDI&M5Uz.Oc;}`yЮ͡I<^1/xC8?В;iT=Ac $\O 9!8"%x"W52Sd5c 3 H4p?S=HEID39HJ@ ֑UZy:ƁK QA6ea<8!+# N:J(@?Lc0t\'հC&cfM%ĔO1 P,T&sUR:(N> K+L38xL5N4#-i:΁y䁆h3D9 *6=*)= TӒ?D k𓛘(J<1[|qxU < aV 1{=)F;h@"nHC+@rRǬu934ަzڇ܄Ph.JFgAj>'H1uk|+D1#h:c|?~V o(nu2C1O`YpA| TLH9`Q v {%PF. ^xQ?,c;\ËB "Dy%,ci|P9R%m/aYy@M<,8caBEqy#Jm R(JcLy:1:c{8PMM&G n0# CьTD' Q LR? QrlO&*թRU/S.P2]*G1GMHO_hD+;$S:H'O,LvS>43ˣp2|\8Ms>' 1]C^-\Ԉ8E*!p V 8G6iתBNi!Y k,KƋh?6Pb܃9n׾9-E,KGy;$bX 3l02{rwa̐}땣R{БH#*ix:! ~\z׉>9S.#D%S@;:ZK,b|Ѯ4s5$/ y ^!iH"qd2C2p;cȋӋ|vj cN؄ 1gE>Q O (9#v~iMAuD%saQA. F.@h!`A18Hɬ> Fi 8_P#JaOkk:I랫# 4FYq5M;+rǒ`2= Pat&t  l#C#.%4Bvq߇<$h$H ̀24(*Hm/܃cT BUD*IaZ8-çTnT?LY'TuHs"4e{܆" B|tq :>e1oQ'V-=($$i=3#ty0RE/ YL X)ԁ%8ϵH.1huᘕlO@" @4=6cÑ@Q(c9c;I<@18B1ВbcdA9LZHpD @d5E{Q9HD-DT- %p9/%4R@3'\d-^c;b*~B2B^ȃ:(?Χ':('Ё84B6D ,qfCS5L:\C6a?<\u?%Tot|Z- @V@enc֨nŧ0#B< ]P(?BΠ4<Po舐XB8A MIFx PA.x9UDW: (+$z&rj%DDgV^y.lA(V_|#:_8C>gAl$a>C+C @I|NB"@9D\| 8xR<%+8\H@.ZiTN D B6QiSYYoɐ&bu!PԆckVSk?BɔVZ~A@@% $$ VjQg3=*VtC# {$:ޔќWk<,d XVxbv !*,<92C4TOFȃ:+õo^ ̀A H@J&^ܰOqp?t%:̴cfSvu Fƪ"(S@ 'ckb&d>kE0 C2X\>ЃO SD"VtM3a'$KML_ A0NĊ7P(t8'=SIɼkOM?C+HI9O6 Gk~䦏t+1E.CE1?.WD #-uCLwt0(״MKQE:\D|9?45C)P2 [M`HHܔ)>:D2;%2$ VPs1&6<0s_QC-@B<)4c8n?43 Ypa"s50*kBl!,?t[+H(@|%N 2A#xC^T> kK8K@Luu;] !D551Nv@mo1]$MvcC7|"4caB:)H) @\6N,C& Ys_v׃Rq%|^Cn=h$ {D }LHç.ߪyW볾V,BSA (RF_$A$$ a{u;F7@)҂y, =LWEu$ YxE@bhW3S>'Zne+8B ;0O Zt vT?,4%#Ho57 q"Z'?E2B>Ì?H /Tr, ,B<9ndto92GB{ES?d 4q k+y6U0D`,tQ~b'6h;F-ŸHDB.N6Zͣ$o1:oߩ42S?M)T;׮U+I0!3-~"5>xM3#},I Mztwn@`AڱC7_/bQE 4,XG"48dI'QTeK/aƔ9fM5תѿg73d;u7O:7jՁSabO1VD<,fQZy,=a:1Æm~ȉ(_wJ 1&8#3vIB}TI֦MlSOF#H$*fة]j^CBм=m \Œ$i9~+T^vbo׾n#Nޓtǜeᔏ 1P 9CG] Y yGeΙgkƔI'br.#|Vz.qG *ixFSbGy~C!H|;3P1'+slnI[@EPA(duұvJS{4$Iqy~):±ć5٤ ?IS{$'p$ ʑ$-[M^QN]/=v_EC Rݬΐzo Wq-WzyN.[y㥗?bEV.t ɝ|K樢 . %0iuo*Ǯb.'r$qalb'|O߶R #壦4Hdo1FdT@E1zBhۦ0tX[1:,6/[|xGgMmfmΫ(nٷ_ WjTWMauaTE%vYo_tr9uiuIzU)YgIfBAf) ֯JF,<&'ƑsIʆxxAկk HBuA;ydM\dO*Qئ's~;jGAnYJ$Jq,dS4҃x-g |09x414:tT PbFslK.+(v B A5NB;$;A ;1e4LNA,FA=LQoQƨȐ%] Iߠ}Ic,~rH+x?Ȣ|@{`J \W \ 4ş.U*щLdB1cX8Hj3!TERC818 HMlE6JQFTDRr^EMnzAHSD _cLMQ탟XV,bc?=S9XAc\~aST\pQ G#w؁O 'ET=d SB/ԉ"T"(5ބ%1 Vx@xLG<F5la7 F0BHU \f#`,K>' r dx0YDAّR8g5{-pQH? rc\ah 8F#"!9EV0w`d89HS T~$FJ?z0+h x 8B< [ ZWCosV!"wH&qbAi>A.< D ( K@]PmBd!N0 dv%a(-q1Tw4M=v8/Ns s!]|{0G+{7Gs&G )<&DҐsl8Ahw.ȫ3ޠh^(,F 0R#|vQj9ġ b`"( i` me$KlR~016!e'FZ}!j+ ^Poꋈ|~#(*+@c21idM>z:x'$\ѸD%>:v98pۂAxP7:!{;9SfC1ǨE-:8mܩUzlLb ? A50"q gͣ ۾|̝tWz_$bw[HF"9MZ4A@*vJۘ &oJu'zԊ7<[SZ^uo?VKo|z׋$!2`AOqp.}5:1u(JPsȣEZ<o(!Z f u>ZY9 ?CJA-g.!^!S&e衪Ae% G/Xa 4N"dx S8O^AA`$*aʮaRq=>a(lvba El/,SdDcx1"cĔ~>Zk ~Pa0!\{ʦC$! Za 5 * Q1ipUamd:a!l.c3FB%_>"Tbc%d &”`-~#:!p!N,x`tx @UdnMs5p,Ji(Z*m<& i.1P ]$AHa?ԣ(6l r-AA, PY2Φ9OMQ(,AKBjhAȊ^"m r+F$fkԁvV%p/J|a,S`a a@; d"^@BX dP(" Ad ())ҳ%\ @ FFԡ.G$ aҁ!Ra H 3H@ʃs )t4* @Ay|12b)@A4B="SkM+ֺs<`As3N唦NrBAza.SajJ>.i1ߘ>DN\enVʡHHaH51*4ROTURIʼ!N%JPU TM.F!lD'bȫ} `ݺWU#A`&NaT RnB!,BuUa^fFFjeH"hB.And!nAd6{{R$RJ F@"҂^jԠS2 .-d,ąDWi YeDA v6PurJ(tخ# pŶsCbbFzBH.PyY]$~$an d0!+t JR` d.MB(E?":"@9y$,ew pGהTE1"L2G6 e[_b4/~19#H`-wbTn M̚ EM{APl:L4ڠM-$/(ny YTjʡ AA''kA&!badXa(Q5Ԙ0k,7qNe e|d%as%J $mQr(J Hb-laBR.q|J /AHAxZOyd8mB2;<f>\!i7RzO|:'ya"'c 9-t;$#myJ8` l E>'Gd!S>Si)p\y!(SENU!9k",`8Ov$%zB*zolW A ,n&n !, {XnE$M,ye!D!ini@!P:pS&ǡ=G.Ly36c#v'9. B Z^AAvs7L k>Az /'7D"2#" d`,fM)^Bd{.`-کzڽ<xAL.0>re=%!xa A((8 !=[u8$EN 8C7#`I:P"4zBx#%Aμi2i#-D'7>YxbT"G}",}j S%'f+abD"ޢ*gA+[u"έ"gڒ}K(.T%S_G. Πad3#vt8SncW0[Ahq]3v,SGͣZ} (}j@?DN Ԅ`BM(Urb#rk|2ȑ$K<2ʕ,[| 3̙4k1ݿ9gA4QR5rU 4zڿ\5zbCңݿj(mʔ`L0\Gw 8=g $yA$\*# ]RzjK{@63URdr}CVuh$AׯCnǗt`j[i/_ OX~>Xp.*/bx_cF3?v;~k3O>La GhF\ 5?hc?&%AtQ9q1 R:3L9X}NF6-dN> eRĎ?sQE ASD<ԳRNd1C*9|5 7ag:ȳ3LRMU:2ߨ3tcN3%pЈ7 L1{4԰)ݨE?&sx\HIDC*h8N>D2Peb"#\ˍȠb$c8t:WWuϜSLs6ߌ3:Ae |0U< \MD()4?|H[(bg%x+)IEKQ=!Y3, ݎ?TJ|dHV=Î=Zt9Hӏ kO0md1] ZS>9'r 36^5nK`y3 $r*g,cǢnJ]l_4X# LGI?~Cmi'tc od}q`*`]T b@"P# IHJqR =юt걾P ?XA78`X$ȃ*&<= GCaDp$ɩyF4CTGk@&>%ĥ<<_:pp O/5\ ;qETEZfEڒXL?!JDp˞ }CP` p+NԢ|.N#98#~3@N1DDz{0-ACk,J K l`c5|ҘSc \Ǡ@ŒP:aF)Ё $qz҇ 2w Jȇ/Bys2ݜItrBxB+Zq (*;TNqF!29 z9hLomFQʁ{hPo*H?2ys#Z4L,Q%(;ъKp;W0Qe5{ a A4W8' Sv-JE33 |#R*>ADt89܁ņiPWsV#hDsX$#q`'j$C;w a`?La 1-:Iqx|FAr<lc@\.3+HG>۰\o xKܕyi=BUtj%d }A[Sa ,n%8 ?:\W61*}vln3za y !ztIQ< `G>$4r$8\;@($zӈ0.Q J"KqtH4Tڄ~$G?vVCvo*(G5B⼢Q>h::EDm<^_ica-gղ hoJ FOЪ$!0Ӭ<0 UXfFj1q#U yW2@q4OR^ePooP0u [w4@T B6`H+> =.QkMX\u0(2n(0GFpoofj!l 2P pl@'HgE [2 PoՄr}l$1+ [%FD:%N` (05*#p&&CD9)'6{ Ni! (a`<C)A1n/_!!2_S F kAxFpf y 6lРS $CfV>pRNXk5FvU%h  h$`bF$[d xeȑj&Y Q54 nx='&[Mt PLH$8oI/P)oD@3|!@X3vR@=OI@lNu'{Ui )9%P⛰!*` T"? Pq~Gv+$ Xэ@s:P׀-M01X|2dmrۛHl= 5pO@ctv$,*/@FGJ@)s@npjduҰ'} l֔9Ɛ+$N>Zk(AaeMZC989N) 3_ { :$o 9EQ $R 0>zR`'[1wvݛʐ}vcIiWS h=T5VNam`LD(&evˑMBn8 \; 0o?E YptG={Nu$\A P8@ 3} h'@*N 5pĝçФDbpW pA ňcZd&=pg_rG ovDžz% } p00q ,[!AǠlO P8$ T: " "Pӑnƾ!Nu$/aA0DgpP R*PeW9M !:Q t$21` g;9D_P =0Hk 5i 2%=?v'z  Ք"~yQQ.S`i8Q(9 Lp /1K0vx./0_ *=y@@\A2ޙPQz} WPD p ` `iV?o=hPt7Pcp2%9FU:! P@ 7-<k8iUtn`HI<>(=}PriR ɕ@ uPS0Up @;Of CwhZ #n丱]tvݹK1eΤYM9ugN|1#.٫Q)F%*IVPI&FуX[qT?vQm;]c=r \0UQYo^Gh$9*nA3 "I\AGjJ$ "]歜 #>|VignUeN춧7H}uٵo;{!zN85qcdߟC>P@d)c1o餓J>voCÕQQG:o)HjxA(1biakȡRG:t=Gqʁ{<|tiE' *f& 8nQ`ɐ/G6?Qkd^"!RNf6BLTf5!+IGVdB\$&2Um`*$a]B@#G1J$}%BMȆ|+ rC?sG"4ܠZ1P1E-F!Ŷ'Avno0Jzb 0)vC(FtĚY'/Nx3rxF9((ID@Kť#;':E:2D' Ýc$ G1L sbXLn9Pi"'IG*b${$ALs=\@$D! \XҒ6dQq;DxK#8);Asb/"Ml&:HC`,;ȓC-Q `JzgG:!5_>Y 9 rX,GX;6>A3@K `4$#+yJPd yMJ0E,o O;^'ִ91~uf׍вRrH+GֺڈX,GVd#L!UtE6:WKDJG(]KXQ(+x-B0\lxjaae % K@PX);.߃5%]\1ooã3Z=M:ƧY{s_rJ)Sګ cBut'~%(EXZ 2Vc3 \<{V q|DA ><T@B +Ԋ? ԁ|Wá1sbhu"h%&FUp2!d}~w㛏|& 4*o\C ΑjNo8`j8!jV҈G<}~x9%f=`:A#89`a 6T?DSN DfI; s?怃ktkR%ފW#V8Da߸K-pƵtR89s| :8cāޛpVzMA=y X4B^gzܧ>";ѧ_H@).ݗp+E)a/E+qV k4{sg?\t Xˉb.v;gwwԿ'9x$"s3C|\O 0A-S0p{@K!ep!1aew zA>P6j@ bȇ%ck_Se$XNH7#ĎXt8h;xqȇg PI&"R^8bP7Q؅|O R5DL\![!XdK_sAUjӰippPF/͢bIps8'֐DԎgd'w`W!P;,˜"(2x F` EWzb*sЫt sh8" #X( eH @7QDy3Sˀ+@QȆ;}Ks ;tK:˗s|G tX9J"3 ![8R˾ ͞hK<I@v $y@cH~<{M M|xKu8+@KJʇ+=דP@`)4DMN y˪H WpHq:v̉(I Ƙ $u7Kjqkis{rtS)xe8}_ Z"hx;w`O:!F эPJF>t Ʌ5 !N/TQD{GYWJRڛ^BlAGd8<'B2ʤ]ؗ2J$$P"4p$¢$,_"D-51#v{!ʇS媃9 h1>AKA]ڭثb|>( .оˬs2QZ!o|fSl#61[ zP{P.jZc/B_4P"@ȃ˘ PW-!\պR%3!Vo ·呙V1Ø/Ձ/32Ib:֍X2$K P?!ADUڎ> *8V4O]!i9d؂; x=}J0=RA `̘9،@h*@>X..pWe,Ge 6:4uw;W~@uӢt8 X~\\+BaIUlٕMw +ꍤ* hdFo|*s#}ąpJ@vǥoA'@y*%`bٲeE:J00aSH ݉ ,+΍ at -_ Ünzt:aΌKHGN*0``懱KÆG؄H3_~v` =㉆5 | X"LkW\aN `aN{X_O ֋8` N0b+``$;Nx$aQ?pY 3_1~ޘq0P8JP0khZp@l+"#MQp+Ks$K[Az]p}I78lԡ՞:^Sx@V7=Z tFN8X]EZP%p%Sb_PH"Pa$ t6/7Mob/g$Ww$ J,FТ9v( ,$X"ȃ9H:"(H,gȆjpżj/Jpj b$~愊 F2|ŌHڪ KpvKvP_7&|P :T8v2h~G Ύԉs;kZ P$@RxK̛V )Hnŀ?wMSzslЃ 1~MlrHd1Pfk(X-.KH@׬E>@XXfpej~xexV^9]es0Dn IׄCO扱XC2jk@>M 麪$c(^r@ :O9)oGK1¶)s҉2 OC Oz _*d/w$YkntA+aaC(NhhxI9EΨ$p4 @d$K1+*T&{ )3fO(._̜!ÆJnɢ􉒬d6u$+fJK{!MN*J(QTbͪZ3_i;u3._~Vov~ݙ׊?XPo^=V"uNQǐ55?g = O%Km=uު3[/g/?PI'|"'`R'h #Ep5HA#ʼn2(=X +/PCHO]#sI#I!7>z%b$NB1`-ӥ*BIN0PV痚w(= Y~#4CN<験BϚ53\Q'3Z:YbE{fQj^ŦViT3pSP󱉪Vꨳ9|px@Bze< sɉǃs$!=ڦbr{ (K`Sn$BpRJ9'0R ;?b ?ӌS[bN4 '9BN24n2r'D9lfVgub]9\qYϞ䜳Y?B:Sim4B%em6K9hifzp}A=A$X|<$0PC F2}O:y@ŠιHBs3Лs޹矃ΞD ˠ|)|ɺ'vB0X{m:CN&`jZmf:DΤqL=`GNTI&WI%`2&uX|Uihc5>Ҋ:y5X{:G#|G?|Cza'<ŇRy"6Mh?8U % H̀/XA c{zpu@E1gCy3cs s@)6G/1{S;!AlB҇7n'E?7ڜ{ؓ55ڐS ~`wRd@2G#!&{X Lo|);1O}~$RI\&Vb#w ]P e$ZG4X5˪$gx,ݑA(D"Yn/l4ꐂ!*+89YY;"+JN\ԃ(`>Bx[-)`qj#G;я-{D'H R4IasC( n I"8dԃQg?TSa}DBLKJWډ*P{tv)Z*>?"{RR2T= G#0?Dvp;< ͫ2guw>"sp4!@ c'[BY4-oc({#dT/'X?4h.\a]x6B$DCCH$@9!N]/{^D.L0"D%1[D7'̊{[` |[Mt[W2^J7\͇(|yԃqꭋugҌ'c(;Hm<|wޤKl~x+,iZ|ެP7dM@XhDi!>ag`C|6Ђt p8A "r7B:]\Q:ܑ;2< 7! |U`\#% Atbt$C5"0"c<dV+7 OGJ7uM? ɺ1YlS'O I2(Pz~8<(,g$S+d]l BL#(DA`CND(X)TG)Q 71sۍSP&R&EPBq 0)DUdlpF99YXESI$P=@M0Q\Fe؃N^Q?#P% .B$$?dABRaH魈嘞sy`\QT?Px)|aaja~:TC]Ն9?0C',BR}82$?TRm =?0F(9ȃ<:U>9":+ = ?,e"&:6b{HFnl 3SbaW1߾\m])?9@<H( 8m1t#h4HhhF4-q#,P=01xbPU#nd[v5/G?]_?C /4PՈ4Y L>x'8N#BJYuX/-~=(R&(,2JϬOKް[Ɔ^mY @B%XBDA&$c7G*1@DB?U%dnfFU4B)C#47qVL=>N܂1?CdHC<"BQ1C<.D/$F2`ڲ1ӱPy2<(҄] :.8B|PC:C6.}ABViD|,|8~IC>LԎX;xM0xb24> #6ec,kk(ڃe@#BJk(bR\#? L ,x0/0Ѓϣ’;b>2C1 `~҈ҤE?U;DL>\2xxB#p`p37À]&P|]Zv.79b$CjY̜)H2G0~|@=}lfW:TNE NA)؃Sf ,\Q2-QLW9IEQ'l?̂#<òog7((|%,(8t'DJك}bk: d@CnRV12BpA^G#>)F<4dІ% \mD &If)E:*H)fO중)B@L:IC,?X0.=pk=DF$IfTd رV4{&;3c.D m`5/b 4ApB904A?d@CFqP>f?}փǒ/1f$}_ ?9 @ $G4l,0 np6T?'pt876ż(+bUBsBBN_ e%8'LB=Xe1Um@^pw5 s DeU @ 2|i\P@sZ5]ዲ?xu%83`mP,nBy~"/D mTL#RoÎ` (2Am__/>2L$ @ @+@C5BGHm#0C3ټ#DE ˚-[$,7 Ȁ A$tLt4ഁ(9(<u!ZGp M LA.YY|MCu}w,MT<2ҜǞ[[''-5If|v}q1,8,Ё"~ΖQ14ZW|-Aj-)|DD| @A#CI$щ2?8?BGT49d8Ԩ2A1&&hO\BTA/{n,&5Lwm~9@ }3:kG:D @FINMt3&5nzPwсAmL374B34N[R]4 1dCm"?EPpt7REBV1}H8#lf hfvdP1²"2|?<00#Bw+/.V?G _0P%R.SaKn[RX4\@V.y9j)>0ⲑqn9<X.̟[CLA>'Bׇ>G|C|p@?=T],Ŵy#G!K(x| rG m8<9Í?*l$%L"d*D LH?\+"Ciw#\h 9| *ؑJ T.hΝ{ 6tƒCWv9v1aDž #Fɰ`Ï+YHN]~Ȧxq1^y3 \g=ڥtN[W\y#qRzΙR'L2u"B8)^-Kw It{vJ'hÖ++TT|othѣI6}ujիYV})4jԶ}D3%)9ҩ0ҩQZM;Qٿ|$>y E_?Wԁ㎊<~Љ6V8z恩\PRNǵc I}='[)b`ib31*J($ZKN٤T\p+02̹Ҝ?kɝygQȑg \6|8G?m9$)F}Q1{HSGlH ȶ4 r .\$ڡ0he:a'u¬v7V<|`쩇UCSv,|׎Ʋׂ@ڂ[ zh6ppNEȘU)fgBz؅](AD-AVXpv_Zڐ7g[>-َb#'h10o蠅`н"rnֺ֜-#ژx1n)f ;ՙLőz]r%y8J0mhg5dΆVJo}Sdcl ||c̡#Gt1犜n:'s^9GRɲ%Tmr좥אjvv (': ;:4XNyF!~eDC_-"MeR4$ f08@2 ! SazzĔH,i!1!ҙ{0,y cAp2d+1ԉ[s 7Q:DG91 C 1gD)ZQ,$"ʑƮ~=SmUr\fm($P.O/ ! D$&] hLE:m» /x}H(>!OT':H,^ &=|S8Ch?ьqx!LI* <o])EpM0Cd[J &B< c:Ao&z%Jp(2BR`Q,La#`SU3;1B$-Ke861!q ]w 0AhG?zzL87< Tb" 9q eю@PaPƖ P;eqN;!YL A`)b SF+L{'m٦E1/L8C < pùrP9o{x;lgNpyxhȸvq ["AQa4 NeSYBrxAqC9_⎞Y=! 9J0ܷAfΡC¢,ֹu5*gmkf`>?qB(:!j0z0эVx؂$XQظE$ WطAlan?.Q b!C|̆G.2Vz֣As/< g0w)|1fYG~j%o !Ny(/~1{?/!Q<Gx*A6baJ˿ΡFDR+qT #!!A!&/a=#b*":OAZLBzpK#{fil (, #1#tk2&oAȁ0G ޠJmkB;RFoH sA$cF.! ;mVhԈ Ho5CaTM!$A)3(dne5t~!a 2a`T c4ph.#=#8#@ yEl1/%s2%|kȒm{[?;A~HMgjWArZ!Z:#pAw=6VB``O7{"kd#qD&@*;Vh ) (Y$xBt*3AH:5a9V!aFp<( \y!!r!Kl! p e'H  &xa4:efRaBoWfQWc/g)\>Ck@ !h3 ƑCYD`"66 I^TaE%m[E"A|*Ga3A$8:ab@d6g\b@vl)U:ĺ!g5|% .2E \'A/ ˆ<:P1c@ΡBEܻa1Z%4(ᘅ5W+DZQP) Dsx +ȕxƥJ_[ʧܰ7=́ր a۪?Fa2>X ᐂE!`A @tZd/̼)I*_$3d)!̓y"!x#G.h?b!I4q30 0ɖ<w !S: Jm">bAx@*  @Xʕ`8tF-o\ǝ5!i!"4^Avai!KDǐh a:l=;gfhJQ7qajՒ&ar~5F- E (@حt @~%%ܣ^OY80 B b~42B ``rϹZYC z%$N+3 jDTy%JX*A*{2~ L"aZ>aády﷥)j CmXP,/zxhc DU pF~U!(}YW];Av` %`0 gzZ ;' ܿyXȰz9HŋbWNҵIʼnm#J6mʴ "JY'Iw"MH*Mک[1i1ݿRe=+UQE5ΖE; >,ᛧNW'(Wy LÈ+^̸ǐ#V[l\7,>u U } ̚=[ϴ|B;]Iɇۇ/hd+μ^FYqt+[ݔ)L:isx=7(FnJ:~J?zш?6RP%%>F[O W#J>,܈$h(آ=aeK+:"NOiBeO X?A>@}XO5j9a?4Hlӊfcg#.3OWo:BE +@ /@ԣ!2t`\: |`R` %C9г5>D,|'6lwI'=6d0‰9cOA,6 9A4_U9ҏu砇.:П1$= )0:s*t.>9ʶ 9"F48<;##;:A</ )!M?1v3<[>WNXJ"r#Լ+Z BID"'c1 lC16J\M0G:A*la7JpP>`N%lH}09؇9P,y2wI?Ї*F܄X8XXc/+FĤ!R@`P/.!~hYpD]яaGHcYs KZ O玉0r1C"#K}X>BlBLAHTKQ x6QLC?C?,j#B#sp r#@2 KsA`AV $2EQWX^T6BL(bCVM%re9vTk]'zū[jR"P:ĆCpF!gI!?NA,P%=<c` qxCplgK>fY`(цUaC"EBxEP^z`sr`(M(@\5< 0禤mJFô GVpDG!E57%u(3qUq P1Slyb{ߑ%`27hHDj#`k2AHf@\U )k'!rwɛH?q ,|B  {0aM֍ Eϊ Mo٪D(ߔ$I]h I h@Z$ g,g=-9|HDVI ^->BLxt5 d kùV A@] U&( naX1@UM76 qU!G&2"6ᬝxϻ'SbCM7ԭPhz^Hmϯ"hz Ƕ%3h % A1pʗ.pcUa`U;S"!d(e>xŴhƲ }ʫLVb211X$q ^)*zB2wGݨgTDLP>",V@uwxN[؂ Pb-670`UiB TPC<}`UIuwy5=Q<OPZP(4==Qbrz`5b@+" "O$t@PKoIA^6E ` ہlr@e)[{9*yB.tO7 z uRbWzI y1;qX%6k+W#Tw)^A0H( Ry2!АI phUPs\s0OU  Ő p Mnc `*KR#~r]UofN 47(GYP 1Q7q\`j dƨt؁8OpG5Vl8x8a`;Pa p6Mi# p `v8P0 ~d1OCg'iuQqn6373pȰ 0 ` 0 5r P P ǣ S$hK"5D@U Y%69bsIAtn55b9VtJ0, wI p6ٜygyw A)]霢 s54\UC+Tkؙ깞?6 fA k Y[ P{p {P , 0nQO<0K7O5p 8aDp ` eo }ĕbQbWi@Bta^@U5I*]T F> a Δ ưpA0 C Q}2Ϧ92``K5q@_Ǟڨav7n m6CWa [p A{ Tnnh} yp>1%w $hC2!;>` u @{ wȠrM+nvRWK ٝ A@4d: rg D, ǐ[P \"##6w ps& UկIN 0YnY愝ƤrP+kW0KԧJQ 5-u0j0 0    =OysUp8XH>I"@y7.}x0m0 p P  i A  p6 LM68 wa7A U+ 4H| ?u0 .90 0U18uHe mh:`A6ah+0F}˴[NmS#5?H帏VgHPh5@HD*r< 'bOQC<O Bw|z 3 ma@k $AgAMh oH0@ ApB7[ 8 VX< wPJT 6yv3?pU@=Tp R9bQ a| PAL MP g<Ne!~DxQ'<§AKbgj8oq1p%y$0 .$0p"iMG"cmA`M?6P=̻9P.9G! \B7Q t d*- 2͂caA*P39@+H R>$L%P(#$ qZ͚a6[ A'I6}?c e>(Z_Ҁe8@TOz9ѧ9PR[RKi -hLk} p,*s쀚#{P @ u 'c|1ŐyDMVQT]>#C5>_|i0PP `jsA |}AӺ%$ @Os|{ ?ӻ]P$`ˋ[" M O0U:C= w,؂ɃxgxD}kMXKԷEcnu`0̰K#Q඀ WHD]Eѽ88D) q !n N| 0 a P wKV"cIRo` t *bSמ#j0 oC9F9cR IxH$ ;P<@ |8p= ѣ0TkPP 0 T ^D+Ʌ'cl툍 \>` (6 ğ osH3 O]O`r=#2Je:a=U"N> AJEtZs#]~Ґ󀝲 p%LBw c=#$t1!4`Z' Ű v Ǡ 0$ѐm[g5XZ* iw.Ĉ/M ϒ#P&ZcZdv;p g`YݍYDè֡Hgi&5u4?Q"DN.Dc'ѝyΑ %=vk'M`H!Ӧ'fnFtR:uꑫC 1j#Ƌ1h@ $PC/#yS=޻?c(ahpӦE;琢_ʕ-_ƜYfΝ=ZhҥMF]zo7oNݦǯf8-.g搂aj5F'k#RZ?sb^FObŒ'SlYٳFch=ԝNzd&jCJ&‹zf . "xBȃ%!`p٫otf̯3l"10L*YC2I%dI'4wF|L"`'Lv*/05dM bg~+|A'"3݉ ɜ;; }1z$j4 |*=HF#e5keVgyecMXuhb>AvK('G̝V%S"|JM(9l[Ö|JU?祷^{ŷOqe^'m3m1_GGLq dn}cX)siGCI}Gu!&zj$9]z@W=D"-Ј@s CpR'6BF(^q~ַT8Xd)aN۔@@[87D%oy=xA-UIЉ Hڱ2d Gp GBa:$DKACȚxv4[䠈D$brMzqe$kN6b#rc2q$eh?Zq1ӚkU8%puYHR&6G-@aТ *x,k8%  |Jt"ÊD4%'PRLAT fDK;R5xVVG`XC5tU.pU##4hPF2/զ?FayU"xX,< ԲlffC cYkJxd]["":RE+b_,3z| Zk\Etyfa=%`⩈  H" XL}2%b#]K!8׾?.:x gcl’ 8%.vGt)z!`$Cr!bְ!VӓpijɇlFK+Ⳍ/A1Pk~8.1jFtSAKpAȡ(ry&iZA‘ Sɹ Kf(c8@pBpB)++2}* %C.{$fhSBգ8C<2Q ~(qpTPC}^hj |h_u8T r(xC!̌|h`; @]z$ |!(CxhEdF *3eXtPybpKZ- lF|hЅ\sr\ B-S(ND0ѳ3Fh~81+=|WX6`ҌhipszG #ʰ:(YXFǒq3E[xԒJ4IaxB~̠ɩx`Plq* [ FdQ sWFǒZ؃p2gɺ\[9.|/꺊zh>& lj y@A.=[[bxJPd(JBeO؃7q3҅!8IX|X/qM'qAI+X>5̈sA;/;ه~Yw\* ɰR4R(Á ;x|A|lFdY鴛﬈_X:Xz`h}sڋ{`h K"902'I':I$;=mo|M>i%!0FMeؠ Πa2't(݌{c0U̯5ExZ{#ݡt`ɇQOLʸi\$N0K`rzr/@X2UoxK^h=y3$}LRR8&UjSB>G)DeRc<0S)wH~h4 .[yC3u &xt9_x0ovS(u3/M?5(&̸Wtl=Py@V|cdX^8x2Y@ *Pz],:`<լ(HȁK|؅,IWTHJ;(0XSW@R$آt =Ndڽ0&([eC[[YB7 .@xB*HB˻el S"K"pS8u(#z8Hړ`_h_' 2 9KXNZ`4h>$BPF hf+̨W^EG.ȃ<@@7@4@<C#H~^݋]r }!pw!3(IO N  F:_Q "YFʁ4(c(Vhz̇G*(s/ %.0\R6 ~"u^ Ʉ[Rz8HpR~|Hrg$͌SL+>^z$^Y=,~>@\i6S˸_6QYR<^%[x;, KS݇[+Ri$E&()D!ق+'x7)vT0щ #:k>#[c95NXXa0QykI ૾1x..`|H 6K Y$uM"@NT\Rdžmp>[!|D¼.E"JM v>ѣ>9A!q0#\LyKH%Kh9<n.HАx$~^MUQP)R4$pݶE$8en[ $7؊$@6G6&z ؀q@s(ooF)Z[3HXegjQ^E9x$mB '*>|8mp"ҵcC =bKu@?"PG~!htgmV >č6sH V2@ւt8DH*P3Uս `]fXVV0Pcoݼګk6ȁaX5:JH& R ̦9$a7s$*G1)sJ @H8S'X('PwnV##QK;_0Tԓt4+1nu+CfXz]*ҥ U~бi2@FA1?Rx4VP⛑)0\qiȦy@m'.Yrn_zU3o@|bx.A {\cǁ ; ѷp dx [iņ~ xd!`8"`H |-Q`G$Q$5Hm1}̓EX#APR 20Ous Jԩ!Ĉ560'I, ݿ/86Ȳs7I=%3XC&92}X%0$VbE*l5AKh~m-ܸrҭk.޼zW{ݛ'"8R\m<?5|ʈƟ?i؊4`r|H}9t }J)g_:!#[&5xt·kߑQ#ǥs5lw2{=Ǔ/o<׳y/?o_n|1Gkn[/]>p6lš\J@C[ǟIM#$E$L?P`2SL8p== S 78Cx )8"|n%N><&[C]B\U, d:O_=u݊$d_#:HCg3rO-=FG<, D,p kG;35|3Km?y0sRb:D<,9ԎCD3E(CICCEP2ıcJdC/}VPq1T5}GH 9Nx-Dv.NLd%hϙ#M)\aDԁ:nיea*^jQ+bGHA?Q)zZ0%2..J'WW4\AM|'`ټ Dj7t_wZK(FBz( P%`R{dw gYPa"|ìˏ/(P^e ga’phf{~ -EbɫoL.ŠXb G=P59A a-|.G=9nE-"ؽ38KqdOg>g!9 ~qClG?>?hτ6jF?:ғ3N:ԣ.cK!s^i:Ӯ^jn;qF9m$;w'm!U;=:~3x#/;go??o2?dʠ??Ni. 66 F ;m6@J fn v~  Ơ ֠ `454E8D3(C3j410B/HD-L!`3.EF1!F`@! ,yH*\ȰÄ=Hŋ3jȱǏ CIɓ(S\˗0cʜI͛8ssee= JѣH*mXn=[JիXjʵׯ`ÊKٳhӪ]˶۷pʝKn˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ=v˟OϿ(h& 6F(Vhfvx$'x(}0OAx0 `@wÏ@#DNHv_L6PF)TViXfemMUTN# T6MEk>4&Ao4Dsn%9N9GAx4fx͝~M_'GbF*Bujџy[~40jꩦ31)꫰& :+k61C43C&lft .3 1\j/ª3JjnP3p 14.RK0DÌ.;*1ͪ1/ 0F:цڑ8bwpzѠ(M+攓e>pC-RN8L#X(O9 #8PC}x9@CbC37 -`=7] >@#]TAo~ _>a Tπ4&<@h0*pAGpG>P0fXP!A"HTt' S@OTBr*bsC z$p_X b"!Ջ?w|WC2H#{(~1@#G>?UDG:|L!sP|#i$'IJZL?ш2pAF>!{< p @G<Y^ $b"P01t ׀7#=rHb`e,(R8$HЇ|̃y>䑏Q؇4@͡OC .(h@68w  $ \P?;1DH/v##9{×@!lR4T0$:  %cI C 86" ֠c4>&b~9xb38?AɊcc?m@ =[FHL8>{C@ V r3r=@4YC<@V;tx 8? uG?ox9y8Rׄn8p|kt,tfk!Ix߃<` } ``& `|kPa$<_+WpWXMi4trvf]S7[U!Vƃ>b5KF3U0B{d} @t<#VbE WԈX#=MFJG=?b?h(=Es =ZgE#=u`k$đЗ7X E$@84In:$=(V؎uB<9Y;^HQPÖHN)1KI0TPTZslV@ 6l t @Wr Gt `vW0 inhngWC# ` ); gU9Yk3IG@o+3\q`hXvAsJ Hyzph;WROBIHXNƕ1Љp` 9Hpp `u 6u?ZEQgJ% fYtYu?Pp mYI[% c q*/NQqJ0$ ES/0Dp gkpab HV6Y8ĸB:9=BYt =BXVc0dg&6Ǣ_Ԙ5A~Tz`vFOb@I{ ݀ k'G~XznWy9VGu|g凂(Hd7i'a{z|xJ}BW dB`d uP؀% 49y~el6COa|d!RSRpWjXڧzwT@ +P4@[V=n@49H c=L*4nh|x%D ch _ K(I(% !UxaW@ P ZqWwuipڹPC K8`lxph @ sb! wFʄ}yk #DODyH\_h:E$p ՚ UW}0VXB0 jǨgW[@~ȺzT zok oPXzzmzkDygWbeB[{B { S7 mZ|P)׹>!4 u J'z\BO 0d =hH\DH@p/hx P he@P VIPPUxWd@Чr qMt `S^[I ;0 à  ӱBܴ~8gW`opPyNf_L 4 kX4n EkP ӼHAOf\@6Q֋= 6Ƚ7۫ztMH( |q "q;K S ?! Wy yW|\=@Up ?w" V0d@77=4ZfDb  9Ug Z g~ý& ȓo&jZ40c0]L\PR,5i[J q,S4ȔJ9D'K|Ep3K$IL Kv PEUx7I p sIsyITR&J8p H)Ő}gլU}eb#@;iYz*IO4p `| p{SPyZIqm>@lcQU) 6S8`e `gB>0{'JP DPbe+DP v B AQ@wN7PRg=UtWks0d|N4oo*C0EÐ0 p^qVwayE80)uW[rd sHȳcpljǃ$lbu`P` Sچ4tfs@V I{R60v]<cy6ŠK_j t0]80ьR5gzP/Z `Ӱ 3iw&LeQ1fl-2u uP>\` \=I@ K.Fw#lD)n! k4D{j>u8`P UH4p$%ڔ»b f0@0 1^SEX l`lqVZjUHa]rưw{ 0]}fe g& 1}<\'<] >>Ul|3u qtP N~eYPIQ>=hvaւ=0mfm@s`w4  N~> e@ G [v(U tg&{4gH^Za$IY=U׬eIP |/I@5PEW}Z^'T0 NekQQ5;۶^QxLU UB `^aH)pE"W @ P''?`T䐝;W[;쫷 7pw.=@|PTy ?𔧯ާѬ^8N[7@/S-_T` 0+tɷ}P JkP {`[Cer f}@)nBŃ Dxt +rPRܿy &RH%MDRJ-]SH CF=}|ԩ[=M2%@)AyTUUr!+gAP.7/!5^IcF/hq:t%Mzs aXa>-*nl,DŖ˻%6eިz/hX "ty2b]Kj蘫KǠlAǫ)*@ 7ȃ$ 9(,i'-ʇ).2 4܈9/ $:e@p GPQ'= 0֘4W]7lD'~&xt!V6oo"(h{yX$ޭLzk!]#Ilm s#@paRxT"<\u7h!uƳO4[Qa4>29"z |0j KÍ?ލ3\Ē8 DLgV f8ǡvRKʟr(D+Q0.p $Lk3"p Q@3́ ġt[|/.e\C >bU! G8JwB\bBӈ8F$lD# egk-aKB-@b=!PЙτf4sAJH_g?c x@ c%ROaθ+ QP$"! NQpgđǀE! 5 y!G$bTD;!|# 9_b^( z@!0(5 6,MRj )G/q#@Jg/rb"}H%n=G)MլgV;Hъ d>P$DE>avʯOQPP A8EҦ FeN|p #+NDcNPd@" !BrIHb\v` K{< mES%G(J8#h2pZnjfYmKNԸ 4G(jV:X]3x{ A>PCĨrk$h'rCh,f߷ԍ zMژ~- RRټ]6Atr:aFEk< Z v۞'8Nn{ԣl:t|!shی#X:7%UI-y>&h 䘙E/p  7yS4^]P dkk= h.rhЃ(NHj'`l^[p01zh(*;ܡne3jT<"73pQ,Sh1D(vD,'EKkG(ޠrP7u Ŋ1u>|_$S~@#n?{P0'v'eid̺={QCc3ѳ KS{hJ% Բ5R1LC'뚶`"C,A= θ5R ~(@ ɓ zW}!@1õxr"aQHT)Rf9@:fVx+C`%H>q )U s +{}ȇhBÔ1|24m0\eC:R,jE[Ǯ2Q`r280ȸ 4p$| $H OZؤT)JƘ06A K ~ NRx9s*:(.q!Ue0Ucu xV`"$)V#X ͼ4.4TJ D< &`!Њ+t|& H9>kcj3Ȍ8B\dNij1dK THxi('RLr0GPc.  U R>  9XBWHE ! Z؎聡^ڰAf>X)8*+8AQ* ZUFXEQFU`V@/Vy lȉX>H#ڨ2J=:N|LC:s8DӿI @H퀏)j5 gL*H" Z~H>Li?a;aDX=iRX6/|G0H:4K}#Z(|xsPOZP| \ȃ3HH!G(O(<=XU@:@X MJMMWJXJP|phI@8FtIMJl _XP)7/miӊ7Xd[4eYBS(ʨy ѥtU4FݰAss8ex>shZƐxFv Txsvy\MMJPHb؈vp3͸Omx,@z8 ؇3]¨~xSJm=!Yu>%@^j6j>0[p5>{Cm$:[uGTL.[zRgxFy] +ZG.S8=)toBVp*#0P+t(Y^ȍBPW@shVV`R ~PEńLPb%WL؄NXP $s` wF8> HNvd #tHBxlt=8& /+l+Vz c_JB3"AdXBi˪vP=2 =5/̍`u7@]*:r0oE۶0Xtk2(^fcރe=$^lL8MYЍ#HM&+1$y8)KTInv/2d>g`!2ALCBjrPi~t[n]zFzK6+_ޭ s(:B(aȑ3>JppJ:|5F-iuG g =|`E̍\gYxFMfmfxJPRMOS>; _?ˋ@9s&!:~9C1P ڐX +Kr YUkUyN+hc8m jm J^/c+ Cx+ŅY臢ڨ3~FX =XXNϕnf(CdFqkl# bsP2spzvqnh7>0@  xZ8~1^+nxc[3J3;3>9JsP=p`4? ȭFx2(1/s(EɶڈȎHE,ʇQV. [1h5xc+[`eP2NO@}]&&>bJ}G83/ M.fRH* b Ok|؍u Ci(t{q K%.s95Hȱt@@hsP%@/ip @Z8ʲ%ϑxΖh ~H񽴟S`Vٖ F*m l^cXxFi ;`}kLw/\=Py|h` Gf7%oHGj~A4h*Yp#AʁZ|*N i2kRp@cHWǏnsZ S)GF0 @:,=.g8lm`^z c3AyDχkX!؀.@ ) 14|`=qN+O /+FcB{cVFV#dFdȄN MM[Ndh;xGANtZ(KxRx\؃=fx9ˇ=HpXb}_(XX@>p<ؽ,yV$RHe 6NPt.E#WAHݍuTzWK)pwIx'A$Pru,h { 2l!ˆ۵#8O^]śGĐ,!Ey}m;w"MҬ_:N' 0^?V2Hk|Ŝ$Sի!ZptRyۆCl5 g:s vkP[NJ,PܪYq\(I%qNH'\ZRӛ1W4o>{5**&Bw.s|ҧJ@s 3'O4HHCU\ h(7)ya _$AB /SO;GЇ#~G#S<Ј$E"J>#PL."D"AS8pl:lu>"-R?s^+H9:NO?d?O=1L4D\<-DHCLrys \@C 0C5/~z 91 ]H#_$O\+( ?<=pD@4TK|P45># N~ ~8TO?2Oy{c:֎t (MPP"(~L2q Ra&I@G5G2"R#: `b{HJh 6q|c*XL#&<恎v@%-L1#@BjPnt#ЏyL*x ¡T"NJwA{==Ws ktD6䱨MH2B1B&2e2,цI .LD1/0W;j hbذ"d0H&vH"ʍ:azHCC %r>-l$#FX"8Xw*S^Уv &=)J#%X}W|)&O|Dӝ>)OE䍆1qtR?@*}MSH` s\(21;EHPsX4!- D' w؄ "Q B0V2/>qG@C, IBp;*v!&H9[ޔb =Ӊ ?rAI΀;nqkt;s'ѳ2;,ɒm&O)}/|S*sJ +iD:jt?]AC渝V`A [ds@#H*u# 6tђVnI+!XpG7<[K? x@^Jbw^FXъK.P 5(|CcJAs@b4s]iyqCN O0./ū/߈@wO߇|8oh?owh9~$! S u螡CJD%dL d&<āsbƎ"c M),8pIIʸ m rEӞp@ x\U?'*f( r`FCbbCGXjQjr!KWOcazD=a "F1n饖`KL9_8cOi ڈձqDz G8o"4y>@?J/|A !&ˆ<1>~ԎH_Webb}=avTQI<( q*>^;d-D2;Z'@,T?d܁9CB#%A)28THp h VB\ͥCX )x`BC7pBRMD!?T,'A@.܄t쵡4p qBǰ#Bڭ-_ B+؝"~"A#څA*@[x dB:=Q^_m&6XnW0<C1lV1>p;T:?dP%&i>C>LH ?X+'j |TW @# Ai$lU%Ԓ&QHGй?P2"-V #@uVdEFfUHC#@ Z! h4Z:pF-C>0 ?ĤL$M֤MdDMB]MLGFS>CMb=AXF%M~#A$B`e~`հ(`,D&|B'M2 }("?CX U$͙9C5Ă 4?샱ddFC>B #dP'::?` +C5xB#v]-=94VAH ?`*4)/t?CKHZ-<P"0YHKb䮑C#@#kJb A.`iEgz/GW@́N:9B{ ^-("[OQrQb 5]DW8~E2 B'tPfb B2QHBla=(C$C2(>Xfԃ?? $9C<?E?BA#!D@ T!;x ΦْG|%1"B@,pa}|G9wAxlzjz.T2-.4Uڃ4"C"̂6 f>d&$B%AI*և)CT*%f '-Ff'* YR*P1܂+(1A2eL*F T42%A@4Wj>>90Q`6 $GLTX *8`Qy-<'\=TC #ŀMY+FJٕMߨi?yB5dDW5qrM/L#l>TJCڬo=gpNZ5BUAIuPg4VY9ŬBAD H(WqD o>1mֺJ}W"m(<'TB&'Dn2u>ՖYR:L'?4 ABdɖDNT"  CLG| ֠V;U099B.8h ЃR-U;`mDA ?D]8lH=U,#{5Y?t)SSAHڬ٘Iȃ̙M?4ÞbX4'֋' ځ H$ȁ$HA 49' M&82I *9V/܃C$T"[$8$<<1M9 kG䃩IH$40\MC!x9C #=RI D:B)Н7N!D_RUPu2|bUEL=oM0CA!Iج=}B @r@%p@D t@(=2":gɟ/؉"%D:PZD2Ax(~thC10 (e2ߖ=H ?XkeX-UT@=&s ECyA-G<2%5(sU 2HyP򸔂'ؤ#|Y,Ԁ,䴶t LԷxȭK^Cםh">qZƢ}C-cv0SiZ#|tQY,0ϰ,C"hELP(A@N%4&#A !h t_$r XbdbHvENߍ/4NWwT5Xys004zT?iv7Q#N E?Ijm"qBC&P*;Y%PIHmIe:C~:8LVp?Z^)5wv8[%"W82{YE.TH8Rh ŀ$ѻśc*@/A#0l-ed1THSl؂n!5 u~B6l3-[ܬb@ IGGd9>)2- &HYf?H @aC,B?XpaW8%@%XB )({Xkb74 m;tAM#CJ?A,A$A|Op~9!fAa!A)\/`ڹ48BrtqB!H?Hy3mO#3 EM[7=> X>98KɸG ` J2,  c4Ø̳v EC?| rC7Ontp%` G0p/L4=46Ms; UE dA1E7?@|A ,DzX$;:AUl>ѮpA8M (CՠP$b%&Ǚ <@BQ25uCMoQ-l P)U$=0ñ%Ӑ-=T4=L9C L)(B!pT ?Bg@b]:vF4Bć5r^;ܹ0dI$TreɐwN/~ y/IG q$qgN4URe @V$IcN?vTm[oƕ;n]wLs+eq/Q2`{-<2dtHXsg5fpNܼzEV 5kɓ3珟MaʤIS&LQ22|9yW/%Zqz 1/]AP9߾ui7L&yi>{*w\(iuR :xtTcC1B3yQRMEy|ǹ=TQzT|!^A)}CHM-/ɜFМ`C|qy0N ?*Ram&!dǜsdMvL4=0MF~д9PJGя :JD\FU#b`U^@h5{"Jjg|6Fҡ&r QNYe.7Ym3OquX̲CrX:X́:gi#DiDadE}eL`sp uQG$p!yB.FDb!}:uDaEM*!O>Dt衇j[F9#)C';mLC e ׳xs@Xٱ.&IqWm= |ÇםF'4C^"C]Yodt: z&Kag⣔HS@ J+ qh@Q*cxLQC9z z07y9 $|qC9 =HF%dq E2b B4I"|SSRZ |Ka;T | #$ #zsG iA{aP4Z);jЌ<HR>YΒTK9Zъ3 |&irbLDɓc ЃLs4! F`tF)>⑳ &!Y :p+#ϿRnpx90s&$Z[g xU֐Fƻn$% GCTn}IL]=-n~թD1 d `  _c.D-;0X/ (LUD_+ %x*'wiQBr9h^1F q;g"$QPR|pG5c ,EJkXD dmB9f4:l *edƔ G/3H4PE 8P~p2Lf3>#OEExX~#D);_xnu->iD)! Q:)I> "֣#P4ؼ,)8"I_9 Žzdݦ;Zd{ߴ 19G?r_ Sp" 5J< )* ?m^1qzśM8?`4;h,S%=P`1dMGL?hqcС&L*@\jGIm=+G5J (GJk.,sԽC=Ze4V(y `v:G?"cBH8(3#|Ea5'ht!-a2-6ۋPK=L&%ȇ(lȝS\ўzp'[jЂJVh 8t:D'Ρ` z r s}N<$